ポケモン赤でバイナリエディタを使ってNPCのスクリプトを入れ替える

これはPokémon Past Generation Advent Calendar 2022の12月20日の記事です。遅れてすいませんでした。

バイナリエディタは導入済みとする。

アドレス0xd2ebから2バイト、NPCスクリプトの配列が格納されたアドレスが入っている。 また、0xffe8にそのROMバンク番号が入っている。

そこで0xd2ebに適当に使えるアドレス (0xd000など)を代入して、0xd000を適切に書き換えればNPCスクリプトを入れ替えることができる。

実際やってみた動画

タマムシポケモンセンターバイナリエディタを開く。 0xd2ebを見ると、スクリプトのアドレスは0x4fa3となっている。 また、0xffe8は12になっている。 ここで、0xffb8 (現在のROMバンク)を12に書き換えよう。 そして先ほど分かった0x4fa3に移動。 0x4fa3から順番に次のように格納されていることが分かる:

ac 4f ad 4f e2 4f ab 4f

これはスクリプトのアドレスの配列が

0x4fac
0x4fad
0x4fe2
0x4fab

となっていることを意味する。 さて、0xd000に

0x4fac
0x4fac
0x4fec
0x4fac

を意味する

ac 4f ac 4f ac 4f ac 4f

を書き込む。そして0xd2ebを00 d0にする。 これでNPCスクリプトが全部0番目のスクリプトのアドレス0x4facに変わるはずだ。 バイナリエディタを閉じよう (0xffb8 (現在のROMバンク)の値は特に戻す必要はない)。 そして、NPCに話しかけると、見事NPCポケモンセンターの受け付けのスクリプトに変わる。

ここでスクリプトのアドレスの参照先を自分で書いたセリフやプログラムにすることも可能である。