ポケモン第二世代対戦シミュレータ「ジムリーダーの城」の対戦考察Wikiです。各所に散らばった考察をまとめ上げ、より考察を深めます。

はじめに

「PBSTools」は、ポケモン第二世代の対戦シミュレータである「ジムリーダーの城」の対戦考察のためのツールです。

当ツール自体は完成されたツールというわけではなく、あくまでも「ジムリーダーの城の仕様(ビジネスロジック)を部品(クラス)として提供する」という立ち位置であり、一言で言うとツールのひな型です。
仕様が部品として提供されているため、新たなツールを作成する際はその部品を組み合わせるだけで良く、作成にかかる労力(工数)を削減することができます。
やりたいことだけ記述して気軽に新たなツールを作れるようにする、それが当ツールが目指す理想です。

また、読みやすいコーディングを心がけ、ジムリーダーの城の詳細な挙動を記述するドキュメントとしても利用可能とします。

上記のような背景があるため、当ツールは著作権フリーとします。
改変・再配布は自由にしていただいて構いません。

ただし、以下の点にご留意ください。
  • 調査不足、及びコーディングミスにより、意図せずジムリーダーの城と異なる挙動が記述されている可能性がございます。
  • 「ジムリーダーの城」の挙動を再現することを目的としており、「ジムリーダーの城」の内部実装を忠実に守ることを目的としていないので、ご注意をお願いします。
    • 「ジムリーダーの城」のソースコードが非公開であるため、内部実装を伺い知ることができません。
  • オンライン対戦での使用を想定していないため、出力されるメッセージはジムリーダーの城とは異なります。
    • これは、処理の簡略化、及び工数削減のためであり、仕様です。
  • 小数点以下の計算を行う際、浮動小数点型の丸め誤差が原因で誤差が発生する可能性がありますが、仕様とさせてください。
    • 公開されているランク計算の結果から、ジムリーダーの城では浮動小数点型の変数を使用していると推測されます。また、小数点以下が発生する可能性がある計算を行う際は、計算を行う度に小数点以下を切り捨てしているとPBSTools作者は推測しています。しかし、ジムリーダーの城の詳細な仕様が公開されていないため、これらの推測が正しいという確証がありません。
      • 仮にこの推測が正しかったとしても、プログラム言語間の浮動小数点型の仕様の違いによる誤差等は不可避です。
  • 計算中でステータスが999を越えた場合や255を越えた場合、誤差が発生する可能性がありますが、仕様とさせてください。
    • これらの場合にステータスに補正が入りますが、補正がかかるタイミングが不明瞭なため、解釈の違いにより誤差が発生する可能性があります。
      • 現時点ではステータス計算で除算が発生する直前(除算は最後にまとめて行う想定)に1回だけ999の補正が、ダメージ計算時に1回だけ255の補正がかかるものだと思っていますが、検証は困難です。
  • 技の命中率については誤差が発生する可能性がありますが、仕様とさせてください。
    • 具体的に言えば、真の命中率(256分率そのまま or 256分率を10進数にした値)を採用しているか、概算の命中率(攻略本記載の値)を採用しているかが不明です。そのため、命中率計算で1%未満の誤差が発生する可能性があります。
  • 「mobile mode」「overflow mode」「思考時間」は未実装です。

開発言語・環境

開発言語はJavaです。
Eclipseを使用して開発を行っております。

最低限、JDKのインストールは必要になります。
(サンプルツールの実行だけでも必要になります)
Windows環境でのインストール方法は下記ページを参照してください。

WindowsへのJDKインストール方法 - Qiita
https://qiita.com/ko2a/items/69fa8a5366d7449500ca

開発履歴

開発履歴を開く

サンプルツール

使用例として、Windows環境で実行できるコマンドラインのツールを作成し、使用可能としています。
「PBSTools」フォルダ直下のバッチファイルをダブルクリックすることで動きます。

Sample1_StatusCalcEachSpeedEffortLevel.bat

素早さ実数値を素早さ努力レベル毎に出力するツール。
入力されたレベル・種族名・素早さ個体値について、素早さ努力レベルを0〜63の範囲で動かすと素早さ実数値がいくつになるのかを出力する。

Sample2_DamageCalc10000.bat

10000回ダメージ計算を行い、各々の攻撃回数毎の撃破率を計算するツール。
攻撃側のポケモンの型、防御側のポケモンの型、技のタイプ、技の威力、ランクや光の粉考慮後の命中率(0.00〜1.00)、ランク考慮後の急所率(0.00〜1.00)を入力し、その条件下で何回の攻撃で倒せるのかを10000回試して算出する。
急所率(ランクや持ち物による変動は自力で計算)・命中率(ランクや急所技や持ち物による変動は自力で計算)・種族固有アイテム・1.1倍アイテム・きあいのハチマキ等考慮。
PP・天候・追加効果・HP回復・ABCDランク変動・火傷・壁・ランダム化無し・プレゼント・変身・テスクチャー等未考慮。
(何を考慮して何を考慮していないか詳細を知る必要がある場合はソースコードを読む必要がある。考慮していない要素も、ソースコードの小改造で考慮可能になる。)

Sample3_TaimanCalc10000.bat

10000回タイマンの計算を行い、お互いの勝率を計算するツール。
お互いのポケモンの型を入力ファイルで与え、1つ目の技を打ち合った場合の勝率を10000回試して算出する。
最大20ターン試行し、20ターン経過時点で判定を行う。
試行回数や思考ターン数は、Sample3_TaimanCalc10000クラスのソースコードを改造することで変更可能。
なお、デフォルトの思考ルーチンでは、1つ目の技のPPが切れた際は2つ目以降の技を使う。
MyCommandRTNクラスのソースコードを改造することで、2つ以上の技を使う場合や交代を伴う場合の計算も可能。

Sample4_PseudoBattleSupporter.bat

一人で行う机上での対戦をサポートするためのツール。
コマンド入力していくだけで机上戦が可能となる。
机上での対戦では考慮困難な運要素についても考慮可能であり、ログも自動的に生成する。
サンプルログ

Sample5_PBSPartyToPBSToolsParty.bat

PBSのパーティ構築ツールで生成したHTMLを、PBSTools独自形式のパーティテキストに変換するツール。
事前準備として、所定のフォルダにHTMLを格納する。
その後、「Sample5_PBSPartyToPBSToolsParty.bat」を実行する。
この操作により、所定のフォルダにパーティテキストファイルが出力される。

Sample6_PBSToolsPartyToPBSParty.bat

PBSToolsのパーティテキストを、PBSの再現ボタン付きHTMLファイルに変換するツール。
事前準備として、所定のフォルダにパーティテキストファイルを格納する。
その後、「Sample6_PBSToolsPartyToPBSParty.bat」を実行する。
この操作により、所定のフォルダにHTMLファイルが出力される。
出力されるHTMLファイルには、入力ミス防止のため、個体値や努力レベルも表示する。
また、導出項目である、PP、性別、HP実数値、素早さ実数値、めざパタイプ・威力についても同様の理由で表示する。
サンプルHTML

Sample7_ValidationCheckForNC2000.bat

PBSToolsのパーティテキストに記述されたパーティがニンテンドウカップ2000に適合しているかを確認するツール。
事前準備として、所定のフォルダにパーティテキストファイルを格納する。
その後、「Sample7_ValidationCheckForNC2000.bat」を実行する。
ルールに適合していない場合は、コンソール上にエラーメッセージが表示される。
また、ルールに適合しているかどうか手動での確認が必要な場合は、コンソール上にワーニングメッセージが表示される。

Sample8_LevelAndMovesSearcher.bat

レベル・技のバリデーションを通る種族の一覧を表示するツール。
レベルと技(0〜4つ)をコンソールの指示に従って入力する。
そうすることで、コンソール上にバリデーションを通る種族の一覧が表示される。

Sample9_WikiPageToPBSToolsParty.bat

Wikiのパーティ解説ページからパーティテキストを生成するツール。
まず、Wikiのパーティ解説ページにブラウザでアクセスする。
次に、所定のフォルダに任意のテキストファイルを新規作成。
その後、ブラウザに表示されている「全容」の箇所を上記テキストファイルにそのままコピー・ペースト。
(Wiki記法の編集ソースを閲覧可能な場合は、それを上記テキストファイルにコピー・ペーストでも良い)
そして、「Sample9_WikiPageToPBSToolsParty.bat」を実行する。
この操作により、所定のフォルダにパーティテキストが生成される。

Sample10_PBSToolsPartyToSDTeamForNC2000.bat

PBSToolsのパーティテキストを、Pokemon Showdown!のTeamBuilderのテキストファイルに変換するツール。
事前準備として、所定のフォルダにパーティテキストファイルを格納する。
その後、「Sample10_PBSToolsPartyToSDTeamForNC2000.bat」を実行する。
すると、ポケスタ環境準拠かGB・VC環境準拠かを選ぶように指示されるので、指示に従って指定(入力+Enter)を行う。
この操作により、所定のファイルにテキストが出力される。
(ニンテンドウカップ2000向けであるが、Gen2OUにも適用可能)

Sample11_SDTeamToPBSToolsParty.bat

Pokemon Showdown!のTeamBuilderのテキストファイルを、PBSToolsのパーティテキストに変換するツール。
事前準備として、所定のファイルにTeamBuilderのテキストを張り付ける。
その後、「Sample11_SDTeamToPBSToolsParty.bat」を実行する。
この操作により、所定のフォルダにパーティテキストが生成される。

取得方法

最新バージョン(20210930)は下記より取得し、解凍して下さい。
PBSTools(20210930).zip

その他詳細

上記ファイル解凍後の「PBSTools」フォルダ直下の「readme.txt」を参照して下さい。

問い合わせ先

ツールについての質問やバグ報告については、当Wikiのトップページの管理人の連絡先にお願いします。

(補足1)保守開発の洗い出しと開発記録

予定を立てて行った保守開発は以下の通りです(全て完了or凍結済み)。
下記以外でもバグ対応は随時行っています。

(補足2)機能拡張に向けた方針の検討記録

PBS環境保守(凍結)

GBVC環境対応(凍結)

模擬戦・AI(完了(このページで管理する必要が無くなったという意味で))

対戦支援ツール(完了)

このページへのコメント

・DamageCalcクラスにて、わるあがきのダメージ計算用に備え攻撃力計算メソッドへphysicタイプも加える

0
Posted by none 2024年01月30日(火) 11:59:50 返信数(2) 返信

見つけてくださってありがとうございます。

確認しましたが、ヤバいですねこれは…。
わるあがきが攻撃側だけ特殊技として計算されてしまっています。
(混乱自滅は別メソッドなのでOK)

一応、修正手順を載せます。

【修正手順】
1.PBLTools\src\calc\DamageCalc.javaの245〜254行目を下記の記述に変更し、保存する。

if(moveType.equals("normal")||
moveType.equals("fighting")||
moveType.equals("flying")||
moveType.equals("poison")||
moveType.equals("ground")||
moveType.equals("rock")||
moveType.equals("bug")||
moveType.equals("ghost")||
moveType.equals("steel")) {

if(moveType.equals("normal")||
moveType.equals("fighting")||
moveType.equals("flying")||
moveType.equals("poison")||
moveType.equals("ground")||
moveType.equals("rock")||
moveType.equals("bug")||
moveType.equals("ghost")||
moveType.equals("steel")||
moveType.equals("physic")) {

2.変更の反映のため、PBSTools\ModuleDel_ExecuteWhenSourceAmended.bat を実行する。

1
Posted by  nanashi_a nanashi_a 2024年01月30日(火) 22:12:33

早々にご確認ありがとうございました。修正方法についてもありがとうございます。おかげさまで沢山使わせてもらっています。また何かありましたら宜しくお願い致します

1
Posted by none 2024年01月31日(水) 01:09:25

・プレゼントの威力(ポケスタ準拠になっていないか)、
・悪夢の解除タイミング(寝起き直後の眠るで悪夢が解除されない)

0
Posted by none 2023年01月28日(土) 12:38:57 返信数(3) 返信

バグが含まれていましたので、修正方法をお知らせします。

今後の保守は考えないといけないですね…。
一応、ソースコードは全公開していますし、Javaの入門書を理解した方なら保守可能に作ったつもりなので、頑張れば私以外の人でも保守できる…と思ってます。。

・プレゼントの威力(ポケスタ準拠になっていないか)
これはソースを見る限りそんなことはないはずです。
追加調査が必要かと思います。

・悪夢の解除タイミング(寝起き直後の眠るで悪夢が解除されない)
こちらはバグでした。
悪夢の解除判定タイミングが技使用後のみだったので、技を使う前後で共に眠り状態であった場合に悪夢が解除されない挙動となっていました。
以下のようにソースコードを変更し、変更を反映させることで、技を使う直前に起きた時にも悪夢解除判定が行われるようになり、当該の現象が解消します。

【修正手順】
1.PBLTools\src\calc\BeforeMoveCalc.javaの436行目(眠りを奇跡の実で回復したかどうかを判定した直後)に以下の記述を追加し、保存する。

// 悪夢状態の回復の判定
if (!partyInfo.pokeStateUnitArray[partyInfo.pokeStateUnitArrayIndex].badHealth.equals("sleep")) {
pokeStatePlaceMyself.beenIntoNightmare(false);
}

2.変更の反映のため、PBSTools\ModuleDel_ExecuteWhenSourceAmended.bat を実行する。

1
Posted by  nanashi_a nanashi_a 2023年02月05日(日) 18:17:08

早々にありがとうございます。返信気付けていませんでした。試してみます。
プレゼントは勘違いでしたらすみません。もう1回見直してみます

0
Posted by none 2023年02月23日(木) 00:31:56

プレゼントについては勘違いであるの確認できました。何か間違えたか、勘違いしたかもしれません。失礼しました。

0
Posted by none 2023年02月23日(木) 07:55:12

「はがねのつばさ」「メタルクロー」「げんしのちから」の追加効果が相手を倒した時に発動するバグを修正しました。

0
Posted by  nanashi_a nanashi_a 2021年09月30日(木) 23:33:38 返信

zipファイル内にゴミファイルが残っていたので、20210913版を再提供します。

0
Posted by  nanashi_a nanashi_a 2021年09月26日(日) 22:39:37 返信

素早さのステータス計算で上限999にならないバグを修正しました。

0
Posted by  nanashi_a nanashi_a 2021年09月13日(月) 22:49:55 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

メニュー

メニューバー

メンバーのみ編集できます