エメラルドの裏IDを調べたい。
この記事はPokémon Past Generation Advent Calender 2019 八日目の記事です。大遅刻です。クリスマスすら過ぎてしまいました。。。
いんとろだくしょん
Emで色乱数をしようと思ったら、裏IDがわからないといけません。しかしEmでは実機でのID調整の方法が確立されていません。エメラルドの表IDは超高速で更新される内部値から決定するためです。なので、正規の方法で裏IDを知るためには色違いに自然遭遇する必要があります。
現在実機での調整の方法が確立されていないとは言いましたが、裏IDの決定の仕方自体はわかっています。
表ID決定時に表IDと同じ値がseedとして格納され、通常のLCG(3世代で使われている疑似乱数)から乱数を取得して決定されます。つまり表ID決定から裏ID決定までの時間がわかれば、トレーナーカードに表示される表IDから裏IDが求められることになります。
ゲーム開始時、表IDが決定決定するのは主人公の名前の入力終了時で、裏ID決定は(「その後「はい」を押して名前を確定したタイミング」と書いていましたがこれは誤りでした)「けんきゅうじょでまっているぞ!」でAを押したタイミングです。
したがって、この間を連打で飛ばしていたのならば、SIDの範囲はかなり絞ることができることになります。連打をしていなかったとしても、長くて見積もって数十秒程度――すなわち3000F弱なので、8192通りすべてを試すよりは少ない範囲を調べるだけで事足ります。(裏ID自体は65536通り存在しますが、色違い判定の処理で使われる部分(TIDと合わせてこの処理を施した値をTSVと呼んだりする)が同じID同士をまとめると8192通りに減ります。)
なるほどわからん
という人のために、ツールを作りました。DLはこちらから。
ソースコードはこっち(github)。
![画像1](https://assets.st-note.com/production/uploads/images/17237413/picture_pc_f5abf6a59b361cc15fdaba372e885ac9.png?width=1200)
表IDを入力して計算ボタンを押すと裏ID候補が出力されます。
「調べた」にチェックを入れると、同じTSVになる裏IDに自動的にチェックが付きます。
メニューから調べた裏ID候補の状態をcsvに出力したりcsvから読み込んだりできるので、作業を中断するときも安心です。
また、色違いにならなかった捕獲済み個体から裏ID候補を絞り込む機能もあり、これもメニューから起動することができます。
![キャプチャ](https://assets.st-note.com/production/uploads/images/17237472/picture_pc_05d112740993f448516558ec9a278e1e.png?width=1200)
「つよさをみる」で表示される捕まえたマップ、捕獲時のレベル、せいかく、そして個体値から性格値を特定し、PSV(色違いになるかの判定に使われるポケモン側の内部値。性格値の上位16bitと下位16bitをxorして>>3したもの)候補を出します(個体値は完全に特定する必要があります)。ここで「調べた」にチェックを入れたPSVが色違いになるような裏IDは、メインフォームでも「調べた」扱いになります。進化しているポケモンは捕獲時の形態を入力する必要があるので注意して下さい。また、固定シンボルには対応してないのでカクレオンは注意してください。
裏ID候補をダブルクリックすると、その候補が当たりだった場合に色違いになる個体を検索するウィンドウが表示されます。3genSearchと合わせてお使いください。
![キャプチャ](https://assets.st-note.com/production/uploads/images/17237518/picture_pc_5b37dfa30f38de3a71b91c12367905cb.png?width=1200)
ちなみに
私のメインロム(小学生のころに買ってもらったままのデータ)の裏IDは900F付近にありました。デフォルトで基準になっている600Fは全力で連打した際のデータを参考に設定してあるので、各自いい感じに調節してください。