エメラルドやDPtに限らず、FR・LGにもループが存在するみたいです。といっても、ポケモンにおける乱数はコンピュータである以上、擬似乱数で行われており、FR・LGやルビー・サファイアでも例外ではないとか。ただ、ルビー・サファイアに関してはマイナーチェンジ版であるエメラルドがある上に、ルビー・サファイアでしかゲットできないポケモンでもタマゴ未発見グループに属するものがないのでほとんど研究されていません。
ゆうのぴあ のある記事に書き込まれたコメントによるとFR・LGにおける乱数の初期シードは0xabcdという形になっており、CPUの処理によって変動するGBAの内部タイマーから持ってきているみたいです。そのため、Aボタンを押すタイミングや長さによって初期シードは変動することがあり、これらの値を計算で求めることはほとんど不可能といっても過言ではありません。そこで、今回はあるソフトを使って調べてみることにしました。
今回使うツール
個体値判定できるもの
SEED逆算ツール(http://www1.axfc.net/uploader/He/so/205118&key=321 )
今回はストップウォッチを使いませんが、あればフレームのずれとか推測できるのでいいかもしれませんね。
適当な時間まで待って野生のサンダーを捕まえて個体値を判定させてみてください。ちなみに、無人発電所で出てくるサンダーの場合はLv50なので「ふしぎのアメ」がなくても薬2個で判定することができます。ちなみに、例として今回捕まえてみたサンダーの個体値を確定させたものを示しておきます。
いじっぱり 1-13-5-1-13-24
先ほど調べた個体値をSEED逆算ツールに入力し、計算すると下のほうに
候補1 = 0xC4349B39, PID…
と表示され、この個体値の組み合わせに対応するシードが特定されます。そこで特定したシードを元に初期シードを特定していくわけだが、FR・LGの場合、初期シードが2バイトであるため、上位2バイトを0x0000にしておく必要があります。そこで、時間っぽいシードだけ表示にチェックし、時間を0、下4桁上限を0xFFFFに設定しておいてからシード逆算リストを表示させてください。
シード逆算リストが表示されるので0x0000…の箇所を探すと
-7264回目 , 0x00007359
(中略)
-9761回目 , 0x000056EF
-10052回目 , 0x000005C5
が該当する初期シード候補が見つかると思います。1個しかない場合は、初期シードを判定できるが、今回は3個もあったのでサンダーに話しかけた時間から初期シードを推定することになります。ちなみに、-○○回目は○○フレーム前(1フレーム = 1/60秒)に置き換えることができるのでこれを60で割ればおおよその秒数を求めることもできるみたいです。
これをもとに欲しいポケモンがでるフレームとどれぐらいずれているか知ることができるが、これ以上のことはできないみたいですね。要は根気とやる気だけだったりして…。まあ、それ以上効率的な方法があったら教えてもらいたいところです。