【初代ポケモン】ノーエンカウントポケモンゲット【任意コード実行】
8月初の更新となります
皆さまは、ポケモンを捕まえるときどのような方法を取っていますか?
地道にモンスターボールで捕獲している?
裏技でマスターボールで乱獲している?
はたまたFifth法やら化石変換を使いこなしている?
ノンノン、今どきそんな方法は古いです。過去の産物です
今回の特集は、新たな任意コード実行になります
ポケモンとエンカウントするために草むらを回ったり
ポケモンのとくしゅ値の調整をしたりカセキを増殖させるetc...
それ自体が大きな手間とは思いませんか?
そもそもポケモンを捕獲する際のメモリ挙動とはどのような処理でしょうか?
調査してみたところ
RAMバンクのFFB8に答えがありました
この領域は普段17hとなっていますが捕獲処理が入った時に03hに書き換わります
そして、03hに書き換える際に360Ehから始まるサブルーチンが使われており
そのルーチンではROMバンクを変更してhlに与えられた値をcallしてからROMバンクを元に戻す働きがあるようです
その変更されるROMバンクというのは7617h~の数値にありました
11,23,d1,fa,49,cc…という並びになっている羅列がそうです
つまり結果から言ってしまえばその数値を直接書き換えてしまい捕獲したポケモンの内部番号をレジスタに保存してしまうことでポケモンの捕獲ができるというわけです
もうお分かりですね?
この数値を書き換える任意コード実行をご紹介します
ボックスの1番上から
がめぜワョ
せぐガづず
づのずずか
ぜ ひマじ
がまづがふ
ぜのひすョ
づギかひく
ゾゾなギガ
が ひホガ
ひオぜバガ
ずずの
察しがいい方はお気づきでしょうが最初の15文字は
任意のポケモン(トレーナー)とエンカウントする際に用いるコードです
効果だけを解説すると
正確には
4番目のどうぐの個数が0個でない場合
3~4番目のどうぐの個数を0個にし
4番目のどうぐの個数が0個の場合
3番目のどうぐの個数に対応する内部番号のポケモンが手持ちに加わります
という効果です
例えば3番目のどうぐの個数が21個なら
内部番号021のミュウが手持ちに入ります
レベルは最後にバトルしたポケモンのレベルになります
ロード直後ならレベル0です
この方法であれば、前姿が用意されていないポケモンもエンカウントすることなく
手持ちに加えることができます
ただし後姿が用意されていないポケモンや見ただけでフリーズするポケモンもいるためバトルに出す際は注意しましょう
大きな利点としては化石変換でしか入手できなかったポケモンの直接入手が可能になったこと、そしてなによりも
マスターボール自体が不要の産物となったことにありますね
今回はここまでになります
皆さまもポケモンゲットですよ、シャイニー☆