【ポケモンFRLG】初期Seed集め自動化

 

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ビューアーにもそのまま使うこともできます。

 

 

なお、海外版の需要があるのは承知の上ですが、筆者は海外版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#スクリプトのエラーメッセージだと、どの行に問題が発生しているか分からないので、別の解決方法があれば教えていただけると幸いです。