ゲームを短時間でクリアすることを競う「RTA」ですが、様々なバグ技を駆使してOKな部門では、日夜斬新なアイディアが試されています。近年では「ホットプレートで温める」ことによって乱数を制御する方法が話題となりました。 今回ご紹介するのは、プレイ中にカセットを差し替える技。ドラクエ3⇒ドクターマリオ⇒星のカービィ⇒ドクターマリオ⇒ドラクエ3⇒ファイナルファンタジー⇒ドラクエ3という手順で、適切なタイミングで差し替えていくと、ドラクエ3のエンディングに到達してしまうという!
その状態でセーブを行い、今度は『ファイナルファンタジー』をプレイ。数歩歩いた後に強引にカセットを引き抜き、再び『DQ3』をセットすると、少々崩れた状態で画面が表示されており、そのままアイテムの整理やセーブデータの複製を行うことで、冒険再開時に王様から大魔王を倒していた事実が明かされ、唐突にエンディングを迎えた。
これは偶然を待っているのではなく、カセットを差し替えてほかのゲームでアイテムの並び替えなどをすることによって、目的のメモリアドレスを書き換えてしまうというものです。下記Tweetにこの技を生み出したピロ彦氏の解説があります。
FC版DQ3カセット差し替え任意コードRTAチャートは一応ここに置いておきます。
このリンクがずっと見れるかは不明だけど。https://t.co/T90U4q3QEQ— ピロ彦 (@pirohiko) April 5, 2021
【任意コード実行】
バグアイテムの「4レーへ」や「アリアハン」を使用すると
稀に、セーブデータ上であるアドレスの$6167が実行される。
$6167は現在使用中の冒険の書のID:06のキャラの現在MPの上位バイトなので
そこにコントローラ入力が反映されるアドレス$14を利用した命令を書きたい。
アドレス$6167に 6C 14 00 = JMP ($0014) という命令を書けば
任意のアドレスが実行可能になるので「1P:右A、2P:ABセレクト」という入力で
メモリアドレス$0781のPT3人目のアイテム6個目からのコードを実行できる。
そこにエンディングフラグを書き換えるコードをアイテムで書く。
ただし、エラー検出訂正(CRC)に引っかかると冒険の書が消えるが
セーブの先頭データである主人公(ID:00)のLvが0の時は
エラー検出訂正がスルーされるという「仕様」があるので
MPとID調整、Lv0化、バグアイテム入手、アイテムでコードを書く
という工程を複数のカセットから調達してくるのが今回のRTA。
どのソフトのどの操作が目的のメモリを書き換えるのかを一体どうやって探し出したのか…。すごい執念です…!