1.はじめに
この記事は Pokémon Past Generation Advent Calendar 2023 の243日目の記事です。
以前、178日目の記事でEmのID調整の自動化プログラムを紹介しました。FRLGでもID調整は可能ですが、Emと同様に人力で調整することはほぼ不可能です。
TIDとSIDを両方調整するとなると、「さいしょからはじめる選択から、名前入力開始まで」、「主人公の名前入力開始から終了まで」、「名前入力終了からオーキド博士との会話終了まで」を全て1F単位でフレームを合わせる必要があります。
加えて、Emとは異なり、TIDFinder(ID調整用ツール)で目的のTIDを引けるフレーム設定を検索することができません。これの何が問題かというと、フレーム設定を人海戦術で調査するしかない上に、フレームがどれくらいズレたかツールを使って特定するのが不可能となります。1F合わせを連続で成功させるだけではなく、目標のフレームまで手動で調べるのは正気の沙汰ではありません。そのため、今回はGC自動化を使ったID調整プログラムを紹介します。
2.従来のプログラムとの違い
今回作成したNx macro Controller用のプログラムは従来のID調整自動化で使われていた「画像認識」、「乱数値確認」、「タイマー機能」に加えて、以下の機能を追加しております。
・名前入力スクリプト
・LINEトークンによる通知
・画像認識に使用した閾値表示
・Select押下数追加
特に名前入力スクリプトは便利で、任意のトレーナーネームを設定するだけで、勝手にプログラム側が目的の名前を入力をしてくれます。要は各自でキー入力のコマンドを書き換える作業が不要となったということです。
3.ID調整自動化プログラム
リセットから「さいしょからはじめる」を選択し、目的のTIDを引くまで、ループする自動化プログラムとなります。
※ Nx Macro Controller用の自動化プログラムです。GC(GBA)自動化の導入はこちらの記事を参考にしましょう。また、Frame3の設定には「TIDFinder」というツールを使いますので、ダウンロードしていない方はぼんじり様のGoogleドライブより入手して下さい。
ゲームでの設定
・「はなしの はやさ」を「はやい」にする。
・ ゲームボーイプレイヤーの画面設定を「フル」にする。
Nx Macro Controllerでの設定
・「Var TrainerName」で主人公の名前入力する。
・「Var Gender」で主人公の性別を入力する。
・「Var RivalName」でライバルの名前を入力する。
・「Var TID」で目的のTIDを入力する。
・「Var Frame1」、「Var Frame2」、「Var Frame3」をそれぞれ目的のIDが出現するフレームを入力する。(少数単位まで指定可能。)
※ Frame1とFrame2はTIDFinderの設定を使えませんが、Frame3はそのままの値を使えます。
初期設定ではFrame1=1235F、Frame2=1267.3F、Frame3=6609FのID0で固定臆病5VA7用のIDの設定にしています。
ちなみにこのID0用のフレーム設定の場合、主人公の名前を入力する際にSelectを2回押下した場合、「Selectズレ」が発生して、出現するIDが+1948程度になります。英語ネームにする場合はSelectズレが発生しますので、 48行目の「Var SelectPlus」を増やすことで対応して下さい。
Frame1、Frame2、OP待機時間を変更するC#スクリプト
前述の通り、FRLGはTIDFinderの設定を使えないため、力技でフレーム設定を探す必要があります。39行目の 「Var FrameRandom」を「"あり"」にした場合、Frame1は1200~1400F、Frame2は1200~1600Fの範囲でランダムに待機時間をログに出力します。
42行目で設定している 「Var IDToleranceRange」で目標IDからの許容範囲内(初期設定では±50)のIDを引いた場合は、ログ出力&LINE Notifyで通知しますので、このフレーム設定を基に目標IDに近付けていきます。
FRLGはEmと同様にOPを押下するタイミングで出現するTIDが若干ズレますので、こちらを利用して目標のTIDを引きます。OP待機時間をランダム生成するC♯スクリプトを用意しています。45行目の 「Var OPRandom」を「"あり"」にすると、0.5秒~2.5秒までの範囲でOP待機時間をランダムに生成してくれますので、目標IDを引けたら 48行目の「Var OPWaitTime」に生成した待機時間を入力します。
例えば、目的のIDが出現した際の待機時間が「2.316秒」だった場合は、36行目の「Var OPWaitTime」を2.316に変更して、「Var OPRandom」を無効にすればOKです。
Frame1とFrame2の設定はリージョン違いでなければ、使い回すことができますが、OP待機時間は各自で設定を見つける必要があるので、ぜひ役立てて下さい。なお、設定を探す際は回転率を上げるために「Var RivalName」を "Default"にして、 「Var Frame3」を950にしておくと良いです。
プログラムの実行
以上の準備ができたら、プログラムの実行をして下さい。Frame1とFrame2がズレることが多い場合などはフレームを微妙に調整するなどして、効率的な設定を見つけてみて下さい。NXのオプションから、LINE Notifyトークンを設定していれば、目的のIDを引いた際に通知してくれます。
引いたIDはcsxファイルと同ディレクトリに作られる「Captures」フォルダに保存されます。TID、Frame1、Frame2、OP待機時間がファイル名になります。
なお、TIDはゲーム設定、性別、生産ロットで変わってくるため、discordの3世代自動化鯖で設定を集約しております。OP待機時間は各自の環境によって、多少のズレがありますので、前後5F程度に広げて、同じIDを引けているか確認しながら調整すると良いです。
4.御三家乱数自動化
目的のSIDが引けているか調べるには、実際にそのIDで色違いになるポケモンが光るか実際に乱数調整する必要があります。そのため、御三家を乱数用のプログラムも用意しています。
Nx Macro Controllerでの設定
・「Var Frame1」で初期Seed決定フレームを入力する。
・「Var Frame2」で個体決定フレームを入力する。
・キー入力を使用する場合は、「Var KeyInput」に該当のコマンドを入力する。(17~20行目をコピペする。)
Frame1の設定は眼鏡ポッポさんが公開している「初期Seedリスト」とリンクさせています。公開先はコチラです。
設定ができたら、モンスターボールの前でレポートを書いてプログラムを実行し、目標の個体が色違いになるか確認します。
目標の個体が光らない場合はどのSIDを引いたか、総当たりして調べる必要があります。例えば、TID0でFrame3が6609Fで引けるSID14633を目標としている場合、前後2F程度で出現するSIDで光る個体を総当たりし、それでも光らない場合は範囲を広げてください。光る個体が見つかった場合は、目的のSIDになるようにFrame3を調整してID調整からやり直します。
無事に目標の個体が色違いになれば、SIDの調整も成功です。おめでとうございます
5.おわりに
ジュナリさんが明日の記事でFRLGストーリー自動化を公開しますので、併用して色理想個体を捕獲するのに役立てていただければと思います。また、近いうちにRSEで作成した固定・野生乱数自動化プログラムのFRLG自動化プログラムも公開する予定です。
ツール作成者のぼんじりさん、デバックに協力してくれたいぶさん、Hopeさんにはこの場をお借りして感謝します。