最も正確で完全な多世代ポケモンダメージ計算機パッケージ。
@pkmn/dmg
は、 @pkmn
エコシステムと互換性があり、ポケモンショーダウン開発者にぴったりのスケーラブルなアーキテクチャに基づいてゼロから設計された@smogon/calc
libraryのスピリチュアル後継者です。アーキテクチャと正確性に加えた改善に加えて、 @pkmn/dmg
機能:
$ npm install @pkmn/dmg
または、以下で詳述しているように、ブラウザで@pkmn/dmg
使用していて、開始するための便利な方法を必要とする場合は、UNPKG( @pkmn/dex
および@pkmn/data
必要な依存関係が必要です。 @pkmn/dmg
):
< script src =" https://unpkg.com/@pkmn/dex " > </ script >
< script src =" https://unpkg.com/@pkmn/data " > </ script >
< script src =" https://unpkg.com/@pkmn/dmg " > </ script >
@pkmn/dmg
のメインAPIは、 State
を取得してResult
を返すcalculate
関数です。
@pkmn/dmg
はデータレイヤー不可抗力です - @pkmn/data
への依存性のおかげで、 @pkmn/data
's Generations
constructor( @pkmn/dexに提供するポケモン対決互換Dex
タイプの実装が必要です( @pkmn/dex
ここでは選択肢がありますが、完全に機能しているため、 @smogon/calc/data
のサイズは4倍であり、特定のアプリケーションは、不要なフィールドをトリミングするためにJSONファイルを事前に処理することを望む場合があります。
State
のヘルパー関数、 State#createPokemon
およびState#createMove
calculate
に必要な入力データ構造を初期化する推奨方法です。これらの関数は、基本的な完全性チェックを実行しながらすべてのフィールドを指定しないようにするための便利な方法を提供します。代わりに、 State
インターフェイスと互換性のあるオブジェクトを提供することができますが、これはすでに独自のバトル状態表現があるアプリケーションに関連しています( @pkmn/client
など)。
import { Dex } from '@pkmn/dex'
import { Generations } from '@pkmn/data' ;
import * as dmg from '@pkmn/dmg' ;
const gens = new Generations ( Dex ) ;
const gen = gens . get ( 4 ) ;
const result = dmg . calculate (
gen ,
dmg . State . createPokemon ( gen , 'Gengar' , { item : 'Choice Specs' , nature : 'Modest' , evs : { spa : 252 } } ) ,
{
pokemon : dmg . State . createPokemon ( gen , 'Blissey' , { evs : { hp : 252 , spd : 252 } } ) ,
sideConditions : { spikes : { level : 2 } , stealthrock : { } } ,
}
dmg . State . createMove ( gen , 'Focus Blast' ) ,
{ weather : 'Sandstorm' , pseudoWeather : { } }
) ;
これは、スコープされたinGen
ヘルパーを使用することにより、さらに簡素化できます。
const result = dmg . inGen ( gens . get ( 4 ) , ( { calculate , Pokemon , Move } ) =>
calculate (
Pokemon ( 'Gengar' , { item : 'Choice Specs' , nature : 'Modest' , evs : { spa : 252 } } ) ,
{
pokemon : Pokemon ( 'Blissey' , { evs : { hp : 252 , spd : 252 } } ) ,
sideConditions : { spikes : { level : 2 } , stealthrock : { } } ,
}
Move ( 'Focus Blast' ) ,
{ weather : 'Sandstorm' , pseudoWeather : { } }
) ;
) ;
上記は、 Side
またはField
条件がどのように指定されるかを示すより高度な例です。一般的なケースは次のように見えます。
const result = dmg . inGen ( gens . get ( 4 ) , ( { calculate , Pokemon , Move } ) =>
calculate (
Pokemon ( 'Gengar' , { item : 'Choice Specs' , nature : 'Modest' , evs : { spa : 252 } } ) ,
Pokemon ( 'Blissey' , { evs : { hp : 252 , spd : 252 } } )
Move ( 'Focus Blast' )
) ;
) ;
calculate
@smogon/calc
返されるResult
には、損傷ロール、反動または排水/回復情報、ターンの残差データ、および詳細なKOチャンスの内訳に関する情報が含まれています。詳細な人間に優しいテキストが提供されます)。おなじみの人間に優しい出力も、 Result
目的の形式にエンコードすることで取得できます。
dmg
バイナリを使用して、コマンドラインを介して損傷計算を実行できます。
// FIXME improve these to match actual output and encoding
dmg +1 252 SpA Gengar @ Choice Specs [Focus Blast] vs. 0 HP / 172+ SpD Blissey --gen=4
+1 252 SpA Choice Specs Gengar Focus Blast vs. 0 HP / 172+ SpD Blissey: 362-428 (55.6 - 65.7%) -- guaranteed 2HKO after Leftovers recovery
$ dmg gengar [focus blast] vs. blissey gen:6
252 SpA Life Orb Gengar Focus Blast vs. 252 HP / 4 SpD Blissey: 263-309 (36.8 - 43.2%) -- 98.7% chance to 3HKO after Leftovers recovery
$ dmg gen=3 mence @ CB [EQ] vs. cune @ lefties
252+ Atk Choice Band Salamence Earthquake vs. 252 HP / 252+ Def Suicune: 121-143 (29.9 - 35.3%) -- guaranteed 4HKO after Leftovers recovery
calc.pokemonshowdown.comと同様に、CLIは事前定義されたセットとヒューリスティックに依存して、計算を実行するために指定する必要がある情報の量を最小限に抑えます。解析ドキュメントは、より詳細に構文をカバーしています。 dmg
実行するには、オプションの@pkmn/smogon
依存関係をインストールする必要があります。
必須ではありませんが、 dmg
に対する最初の位置的引数は@pkmn/smogon
からセットをその特定の形式から描画するフォーマットID( gen7ou
またはgen8anythinggoes
)にすることができます(VGCまたはLittle Cupの計算に特に役立ちます。 )。
Webブラウザーで@pkmn/dmg
使用する推奨される方法は、バンドラー(Webpack、ロールアップ、小包などを構成して、それを最小化し、残りのアプリケーションでパッケージ化することです。バンドラーを使用しない場合、コンビニエンスindex.umd.js
がパッケージに含まれています。 ./node_modules/@pkmn/dmg/build/index.umd.js
にscript
する必要がありますcalc
また、 Generations
実装が提供される必要があり、計算をロードする前にロードする必要があります。
< script src =" ./node_modules/@pkmn/dex/build/production.min.js " > </ script >
< script src =" ./node_modules/@pkmn/data/build/production.min.js " > </ script >
< script src =" ./node_modules/@pkmn/dmg/build/index.umd.js " > </ script >
@pkmn/dmg
の状態と「Appliers」の概念とそれらのapply
関数の概念の処理は、おそらく以前のダメージ計算機で提供される最大のイノベーション@pkmn/dmg
です。 @pkmn/dmg
のアプリケは、「ジオマンシー」や「極端なエヴォースト」などの動きの統計をブーストする能力またはボタンを「オン」にするためのトグルなどの既存の計算機が提供するアドホックコンビニエンス機能の抑制一般化です。
効果を持つ能力/条件/アイテム/動きは、その効果をapply
ことState
できます。これはUIに役立ちます。「Swords Dance」のような動きを備えたセットは、クリックすると+2の攻撃ブーストを提供するための便利なボタンに変えるapply
ができます。将来の計算など。 apply
には制限があります- @pkmn/dmg
その状態を完全に更新できるように、内部に完全なシミュレーター /バトルエンジンを埋め込むつもりはありません。 apply
利便性を目的としています- @pkmn/dmg
、提供されているState
に関して正確かつ包括的であるState
を目的としていますが、 apply
常に保証されません。
@pkmn/dmg
以前の計算機とは異なる方法でヒットapply
処理します - 各ヒットはダメージ式全体(特定の最適化が検出される場合がありますが)で実行されます。打つ。このデザインは、ペアレントボンドまたはマルチヒットの動きを自然に処理します(Power Up Punchの攻撃ブーストから利益を得るために、Stamina Raising DefenseまたはPernal Bondの2回目のヒットのような相互作用を含む)が、Abitraryaryの動きを連鎖させて、一連の攻撃。
チェーンを処理するのは、繰り返し過熱またはドラコ流星の結果が何であるかを見たいという一般的なケースを処理しますが、Scizor UターンのGengar Focus Blastのようなものもカバーします - 同じターゲットを持つ結果をリンクし、予想されるKOをリンクできます共同Result
のチャンスは、例えば2連続ヒットとまったく同じ方法で処理されます。ブレルームの弾丸の種が処理されます。極端に、このデザインは、いくつかのヒットの後、または反動が攻撃者を必要なHP範囲に落とした後に数回ヒットしたり、敗北者のアクティブになった後に蹴ったなどのシナリオを処理するためのこのデザインスケールを拡大します。チェーンズの動きは、保証されたシナリオのみを扱います - つまり、効果は、アクティブ化の可能性が100%あるか、特定のイベントが発生することを保証する範囲があるため、発生することが保証されている場合にのみapply
。
== todo ==
@pkmn
パッケージは、MOD(非カノニカルデータまたはメカニック)のファーストクラスのサポートを提供するつもりはありませんが、 @pkmn/dmg
、 @smogon/calc
よりもmodの方がはるかに拡張可能になるように慎重に設計されています。 @pkmn/dmg
のデータの変更は、
override
メソッドが公開されます(これは、 @smogon/calc
の一部のコンストラクターの一部が取るoverrides
パラメーターと事実上同じです)exists
機能実装を提供することにより、 @pkmn/data
のGenerations
クラスから追加の非標準データを公開する@pkmn/dex
をwringし、追加データを追加します( @pkmn/mods
を参照)あなたの修正が伴うものに応じて、基本的なポケモンメカニクスの検証を実行する際に、 State
提供する便利な工場手法を利用できない可能性があります。ただし、これらのメソッドを使用せずに常にState
オブジェクトを構築できることに注意してください。
@pkmn/dmg
@pkmn/dex-types
フィールドのみを使用しているため、追加のデータフィールドは問題を引き起こすことはありません。ただし、新しいフィールドを使用したい場合、または単にさまざまなメカニックの動作を変更したい場合は、既存のハンドラーメカニクスを拡張またはオーバーライドできるオプションのhandlers
パラメーターをcalculate
。おそらく、既存のエクスポートされたHandlers
オブジェクトをベースとして活用したいと思うでしょう。
ユースケースでより広範な改造機能が必要な場合(たとえば、コアダメージフローの周りに変更できる)、ユースケースを説明するために問題を開いてください。十分な正当化がある場合、アルゴリズムのコア部分が分割され、 Handlers
が同じように改造可能になる可能性があります。
@pkmn/engine
-PKMN貢献者@smogon/calc
ホンコ、オースティン、および貢献者このパッケージは、MITライセンスの条件の下で配布されます。