1.はじめに
この記事は Pokémon Past Generation Advent Calendar 2023 の250日目の記事です。
ポケモン3世代を始めとした過去作の乱数調整は、ゲーム起動時に初期Seedが決定され、そこから目標Seedまで消費するのが基本となります。
3世代の場合はEmは「0x0」で固定、RSは電池入りだと分刻みで「0x5A0」から1ずつ増加しますが、FRLGは起動からOP画面を抜けるまでの時間、起動までにキー入力した回数・長さ、ゲーム内設定、使用言語や前期・後期ROMで細かく変動します。
そのため、「起動から何フレームでOP画面を抜ければ、どの初期Seedが出るか」というように、実際に出る初期Seedを収集していく作業が必要となります。
今の時代では眼鏡ポッポさんが集めた初期Seedリストを公開していますので、基本的にはこちらで網羅できますが、後期LGや海外版の初期Seed、あるいは初期Seed追加する場合はイーブイの受け取りや、サンダーを捕獲するなどし、その実数値を元に初期Seedを逆算して集める必要があります。(参考記事)
夜綱さんが公開している「いーぶいでしょきしーどをもとめるつーる」で作業が簡略されているとはいえ、手作業で大量に集めるとなると、かなりの時間がかかり、なおかつ精度も悪いと思いますので、イーブイ受け取り → 実数値を画像認識で読み取り → 個体値特定から初期Seed特定までの作業を自動化するプログラムを作成しました。引いた初期Seedはcsv (またはtxt) ファイルに上から追記し、csvは眼鏡ポッポさんが初期Seedリストと一緒に公開している初期Seedビューアーにもそのまま使うこともできます。
FRLGでイーブイ受け取りから、個体値を特定して、初期Seedを自動で集めるプログラムを作成しました。
— 奈都 (@Natu5307051) 2024年8月9日
引いた初期Seedはcsv (またはtxt) ファイルに上から追記してくれます。眼鏡ポッポさんの初期Seedビューアーにもそのまま使える親切設計です。 pic.twitter.com/xwwrn3FEEK
なお、海外版の需要があるのは承知の上ですが、筆者は海外版ROMを所持していないため、日本版にしか対応していません。初期Seed集め自動化の海外版対応は、全性格の画像所得 & 0〜9ケタの画像所得 & 実数値1ケタ1ケタに認識範囲を設ける単純作業ですので、画像提供 & 認識範囲さえ教えていただければほぼ作成できます。希望があれば筆者のXアカウント(@Natu5307051)まで連絡下さい。一緒に3世代界隈に貢献しましょう。
2.初期Seed集め自動化プログラム
イーブイの性格・実数値から初期Seedを特定し、csvまたはtxtファイルに入力するプログラムです。
※ Nx Macro Controller用です。GC(GBA)自動化の導入はこちらの記事を参考にしましょう。
プログラム作成にあたっては夜綱さんのPokemonPRNGをお借りしました。(めっちゃ使いやすかった。)
ゲームでの設定
・「はなしの はやさ」を「はやい」にする。
・ ゲームボーイプレイヤーの画面設定を「フル」にする。
・ イーブイのステータスを確認するため、手持ちを1枠以上開けておく。
Nx Macro Controllerでの設定
【個体・初期Seed決定に関わる設定】
・「Var Reasion」で使用言語(現状JPNのみ)を入力する。
・「Var Frame1」で初期Seed決定の開始フレームを入力する。(1ずつ増加する。)
・「Var Seeds」で所得する初期Seedの数を入力する。
・「Var Frame2」で個体決定フレームを入力する。
・「Var Range」に個体決定フレームの許容値を入力する。(±2で十分。)
・「Var Threshold」に画像認識の閾値を入力する。(基本修正不要。)
※ Frame1、Frame2の微調整(オフセット)は「81行」、「84行」で行って下さい。Frame2周辺の個体を検索するため、Frame2で調整すると検索に引っかからなくなります。
【初期Seedのファイル出力設定】
・「Var OutputType」に初期Seed入力形式(「"Excel"」または「"Text"」)を入力する。
・「Var FileName」に記録させるファイルの名称を入力する。(自動で作成される。)
・「Var Mode」にファイルに記録するサウンド・ボタンモードを入力する。
csv出力の場合、1列目がフレーム、2列目が初期Seed、3列目がサウンド・ボタンモードになります。txtだとハイフンで区切ります。
実践
準備ができたら、「タマムシマンション」の屋上でイーブイが入ったモンスターボールの前でレポートを書いて実行します。初期Seedを所得する度に、初期Seed決定フレームを1ずつ増やしていきますが、うまく所得できなかった場合や、複数のSeedを所得した場合は個体決定フレームを変えてやり直してくれます。
NXのオプションから、LINE Notifyトークンを設定していれば、設定した初期Seedを集めた際に通知します。集めたSeedは共有しましょう。私も日本版LG30を公開予定です。
3.おわりに
Nx2はCallcsxでC#スクリプトを呼び続けると、動作が不安定になるようなので、今回はほぼC#スクリプトのみのプログラムを作成しました。
ID調整自動化を始めとした過去に作ったC#スクリプトを使用するプログラムは連続して、呼び続ける構成になっているので、今後、時間があれば修正したいと思います。
ただし、プログラム実行時にフォーカスを合わせる機能が使えない上に、C#スクリプトのエラーメッセージだと、どの行に問題が発生しているか分からないので、別の解決方法があれば教えていただけると幸いです。