『マリオストーリー』の世界最速クリアに、『ゼルダの伝説 時のオカリナ』ロムが使用される。カートリッジを抜き差しするとなぜかエンディングへ
『マリオストーリー』において新たなスピードラン記録が樹立されたようだ。その記録はわずか54分22秒。記録を樹立した走者は、JCog氏。ところがこの偉業は、同作のほかのスピードラン記録と並べて語るにはいささか特殊な手法で樹立されている。本記録を叩き出すのに用いられたのは、『ゼルダの伝説 時のオカリナ』。そう、まったく別のNINTENDO 64カートリッジを使うことで、『マリオストーリー』におけるスピードランが達成されたというのだ。いったい何がどうなっているのか。
今回用いられたのは、Arbitrary Code Execution (ACE、任意のコード実行)と呼ばれる手法だ。簡単にいうと、グリッチを利用することで、ゲーム内で独自のカスタムコードを実行可能にするものである。一般的なACEはマリオを特定のx/y/z座標に移動させる必要があるため、TASにおいてしか実現できないのが普通だった。しかしコミュニティ上の研究者のひとりRain氏によって、ツールを使わないRTAにおいてACEを実現する方法が発見された。それは「メニューストレージ」と呼ばれるグリッチを利用する手法だ。
ゲームにおいては、マリオの動きごとにさまざまなエフェクトが発生する。ジャンプしたときや、ハンマーを使った時の土埃などだ。通常、これらのエフェクトはアクションを実行するたびに発生し、消えていく。しかしメニュー画面を表示している間にジャンプしたりハンマーを打ちつけたりすると、そのエフェクトは即座には発生しない。代わりに、メニュー画面を閉じたときにはじめてすべてのエフェクトが実行されるのだ。つまりメニュー画面が出ている際にさまざまな行動を起こすと一度に膨大なデータが生成され、オーバーフロー状態になる。するとはじめて、ユーザーが書き込んだコードを実行する余地が生まれるのだ。有識者らは、ここで所定のコードを実行することで、『マリオストーリー』が本来使用しないはずのメモリー拡張パックにアクセスすることが可能であることを発見した。
本来使用しないはずのメモリー拡張パックにアクセスすると、通常の『マリオストーリー』はクラッシュしてしまう。しかし、そのメモリー拡張パックに「ある命令」が保存されていたらどうなるだろうか。ここで『ゼルダの伝説 時のオカリナ』の出番である。本作は以前からACEを実行可能な手法が確立されており、たとえば改造ロムを使用することなく「『スターフォックス64』のアーウィンを呼び出す」といった奇妙な芸当を実現してきた(関連記事)。同テクニックはもちろんスピードランに使用されている。
ポイントは、「セーブデータのファイル名にコードを書き込む」こと。ひとつのファイル名にすべてのコードを書き込むことは不可能なため、JCog氏はふたつのファイルに分割してコードを入力。所定の操作をおこなったのち、ファイル名をコードとして実行している。このコードが実行されることにより、リンクの角度データがアセンブリ命令としてセーブされ、拡張パック内に保存されるという。
そして重要なのが45分4秒ごろの操作。ここで何とJCog氏は、『ゼルダの伝説 時のオカリナ』のカートリッジをNINTENDO 64から引き抜き、即座に『マリオストーリー』のカートリッジを挿入するのだ。すると、拡張パック内には『ゼルダの伝説 時のオカリナ』で生成された命令が残ったまま、『マリオストーリー』が起動する。こうしてJCog氏は、『ゼルダの伝説 時のオカリナ』で記述した命令を『マリオストーリー』へ持ち込むことに成功。51分52秒ごろ、メニューストレージを利用してハンマーを連打し、ゲームをクラッシュさせる。そして祈りを込めて本体をリセット。すると54分25秒、そこにはエンドクレジット直通のデータが保存されていた。
記録達成後、エンディング曲が流れる中ひとしきり歓喜のリアクションを見せる JCog氏。今回の偉業達成にあたり、関係するさまざまな人々への感謝の言葉を寄せている。同氏のサポーター、数々のグリッチ研究に携わった有識者たち、母親などなど。同氏としては二度目のチャレンジだったことや、NINTENDO 64版の新記録更新は久しかったことなども喜びに拍車をかけたようだ。ちなみにACEに用いられているのは、『マリオストーリー』『ゼルダの伝説 時のオカリナ』ともに日本語版であった。
ACEを使わない NINTENDO 64実機におけるRTA最速記録は今のところ1時間42分(Speedrun.com)。今回の実績については、手法の特殊さからリーダーボードには記録されないようだ。もはや魔術めいてきたRTA業界は、明日どこへ向かっていくのだろうか。