はじめに
ニンテンドー64の3Dゼルダといえば「時のオカリナ」および「ムジュラの仮面」。今更語るまでもない名作で、スピードランも古くから盛んに行われている。
これら2作を2019年11月頃から徹底的にぶっ壊したのがSRM(Stale Reference Manipulation)およびACE(Arbitrary Code Execution:任意コード実行)だ*1。
近々開催されるRTA in Japan Winter 2021で大トリ前に「スマブラX」収録5分体験版時オカをクリアする(?)レースがあるが、これもモロにSRMの恩恵を受けている。5分クリアなんてSRM/ACE以前には考えられなかった。
本稿はグリッチハンターでもスピードランナーでもない筆者が、時のオカリナany%を中心にSRM/ACE開拓期の大混乱から現在に至るまでの通史を編纂(偽造)したものである。
所詮門外漢が書いた文章なので、間違い・不足等あればご教授願いたい。特に2019年10月-12月あたりの雰囲気は、当時コミュニティに居た方しか判らない気がする。
なお、SRMの実践については別の記事で扱っている。興味があればこちらも是非。
時オカ日記②(コキリの森 LightNode SRM編) - 古い土地
「通史の骨格」となることを狙って、本編に入る前にany%の記録変遷を見てみよう。
時のオカリナ any% 記録変遷
SRM/ACE以前のany%は、今のspeedrun.comで「Defeat Ganon - No SRM」カテゴリに相当する。
2020年以前の世界記録は16:58(2019/7/12, by Torje)。現在の世界記録は16:34(2021/11/16, by Lozoots)。いずれも日本版Wii VCを用いている。
Ocarina of Time Defeat Ganon No SRM in 16:34 (Former WR)
2020年1月~:13:48 → 8:12 日本版N64(コントローラー3チャート)*2
2020年2月23日~:8:04 → 7:32 日本版N64(コントローラー3レス)
2020年9月~:7:27 → 7:07 日本版GC(プリレンダリングムービー呼び出し)
2021年7月~:7:04 → 6:49 日本版Wii VC(LightNode SRM)*3
注意:2022年7月にオープニングをカットしてよいことになった。そのためこの記事で言及する時オカRTA記録は全て、2022年7月以降の計測法だと3分近く早くなる。Any%世界記録3:50.950(2023/5/11 by Murph_E)は上の「6:49」から劇的なブレイクスルーを経たわけではない。
ムジュラの仮面 any% 記録変遷
デバッグメニュー以前のany%は今のspeedrun.comで「any% - No Major Glitches」カテゴリに相当する。
こちらはデバッグメニュールート開発直後に1:15:52(2019/8/24, by EnNopp112)の世界記録が提出され、現在も破られていない。北米版Wii VCを使用。
The Legend of Zelda: Majora's Mask Any% Speedrun (1:15:52) NEW Route
2019年8月~:54:02 → 48:32 北米版Wii U VC (漬物石と呼ばれたWii U一瞬の輝き:デバッグメニュー)
2019年11月~:40:58 → 28:17 北米版Wii VC(ムーンワープ発見以降:SRM)
2020年2月~:27:42 → 24:43 日本版N64(クレジットワープ発見以降:ACE)
2021年11月~:24:13 → 18:37 北米版Wii VC (1st cycle skip発見以降:デクSRM)
[reference]
技術的資料としては次が参考になる。①→②→…の流れはそのままこの記事の「お品書き」だ。本編はどうしても脱線が多くなってしまう(技術は直線的に発展しない!)ので、日時を含めてこのあたりを頭に入れておくと読みやすくなるだろう。
①SRMによる宝箱の中身改変(2019/10/29)
Explanation: Editing Chest Contents (DC Chest
Stale Reference Manipulation 日本勢用ドキュメント
②時オカACEの達成(2019/11/11)
Arbitrary Code Execution in Ocarina of Time
③N64版での時オカany%:コントローラー3あり(2020/01/21)
Reach the Credits from Kokiri Forest using ACE (Ocarina of Time Glitch Explained)
④N64版での時オカany%:コントローラー3なし(2020/2/23)
⑤GC版での時オカany%(2020/9/3)
Ocarina of Time Any% Tutorial (GameCube Movie Night ACE) (Outdated)
⑥LightNode SRM(2021/3/18)
⑦2021/4/28時点での時オカRTA概況
⑧Wii VCでの時オカany%(2021/8/30)
Ocarina of Time any% Speedrun guide (Wii VC lightnode route)
追記:次のプレイリストはSRMの前史(2007年!)から現在に至るまでを網羅している。困ったらここを探せば何かしら見つかるだろう。
Stale Reference Manipulation (SRM) Research
SRM/ACEが何なのか知りたい、定義に自信が無いから復習したい、という方は本記事末尾の「付録:基礎事項」を参照。
特筆しない限り「時のオカリナ」は日本語N64初期版ROMとする*4。
「ムジュラの仮面」はそのときどきで述べる。SRM/ACEの文脈だと北米版Wii VCか日本版N64を用いることが多い。
~2019年 SRM/ACEの理論的整備
2007/9/15 「Acryte - Leever Armor」 by Acryte
「無を取得」自体は本当に古くから知られていた。これはおそらく動画ベースで最初の報告。
2016/10/30 「Dampe's Grave as Child using Actor Carry Glitch」 by GlitchesAndStuff
アクター(リンク自身、敵キャラ、草といったゲーム内の物体のこと)に関するグリッチの例。
2017/12/15 「Theory for New Wrong Warps to Cutscenes」 by Exodus
アクターを活用する点でSRM/ACEの先駆とみなせる。数人のグリッチハンターがこの方向性でクレジットワープできないか検討したが、技術的困難により頓挫する。
2019/8/17 Wii U VC ムジュラの仮面 デバッグメニューが利用可能に
2019/8/17 「Majora's Mask- Open Debug Menu with 63 Songs of Soaring」 by Exodus
text overflowで攻撃するので、SRM/ACEと技術的には関係が無い。しかしSRM直前の大更新ゆえ触れておこう。同日中にany% RTAへ取り込まれ、54:02(by EnNopp112)の記録が出る。初の1時間切。
Wii U VCでやってるのが面白い。Wii VCでできたら基礎動作的にそっちの方が絶対良いのだが、Wii VCで使えるコントローラーはデバッグメニューを操作できない。*5
3か月後にはSRMムーンワープで塗り替えられる記録。
2019/9/18 ムジュラの仮面 Superslideでロードゾーンを跨ぎ「無を取得」
知名度はともかく、ネタとしての「無を取得」は昔からあった。
しかし、この動画こそがSRMの起源だと言って差し支えない。2019年という、リバースエンジニアリングとスピードランコミュニティが成熟しきった時期に再発見された「無を取得」は、とんでもない研究速度でとんでもないところに行き着く。
2019/10/11 SRMの発見
2019/10/11「OoT/MM: Stale Reference Manipulation (Boomerang)」 by GlitchesAndStuff
SRMの起源を調べるためOoT Speedrunning discord鯖の#glitch-huntingチャンネルに潜ってみた。まず雑談風に、2019/9/18の「無を取得」が時オカでもできないか議論されている。アクターのロードが関係していそうという話になり、そして突然――「I think I found a new glitch」この短文と共に動画が投稿された。
部屋を行き来することでスタルチュラのしるしが鍵付き扉に化ける? 複製ではなくどこかから奪ってきているらしい。
「Stale Reference Manipulation (Boomerang) 2」by GlitchesAndStuff
再現実験が始まると、ボムチュウを事前に爆破しないとクラッシュするとか○○を視界に入れるとクラッシュするとかの情報が出てくる。(ヒープ調整をちゃんとしないと不正命令になってクラッシュする? 全体的な仕組みは「ブーメランが参照するスタルチュラのアクターが隣室への移動によって無に変わり、ヒープ調整が偶々うまくいって鍵付きドアのアクターが無の参照するアドレスに入った」という感じに見える)
セットアップ次第(ボムチュウの爆破数など)でしるしはスタルチュラ自体になったりブロックになったりする。見た目が面白いのも研究された要因だろう。
現地時間午前4時になって一旦解散の雰囲気になった。
「Alright im going to bed don't find ACE before I wake up ok?」と言っている人が居たが、慧眼である。寝て起きて事態が変わるわけではなかったが、しかし1か月後にはACEまでたどり着くのだ。
2019/10/12 「Boomerang Actor Displacement Glitch in Majora's Mask」by Türkenheimer
ムジュラでもできる。森の神殿に限らない一般的現象であることが実証されてきた。
ヒープの性質の議論、N64実機/VC/emulatorの内どれが原因なのかを腑分けする作業とかが大変で追うのが辛い。必要ならあとで追記する。
10/14の段階でチェストの中身変えられないか考えている人が居る。ブレインストーミングかもしれないが発想が凄い(専門家からすれば自然だったのだろうか?)。
チェストの中身をSRMで変える。分かりやすい応用例。
2019/11/11 時のオカリナ 任意コード実行が可能に
2019/11/11「Arbitrary Code Execution in Ocarina of Time」by Fig
これをもって時オカ任意コード実行が達成された、としておこう。
追記:実際は11/8に達成され、「フックショットを消す」のが一番最初の命令だったとのこと。コメントでの情報提供に感謝します。
5 days later and.. we have Arbitrary Code Execution.
— Fig (@Fig02_) 2019年11月7日
People who worked on it will have a video soon. pic.twitter.com/LlYmw6sLsH
N64の任意コード実行は2017年にポケモンスタジアムで為されて以来2例目(ポケスタはGBとの接続を使うので単独なら史上初)。
どこで聞いたか忘れたが、これ以前(以後?)に3時間だか15時間だかオカリナを吹いてACEするアイディアがあったらしい。気になるのだが今検索しても一切言及が出てこない。2019/12/12の 「Total Control Demonstration Stream」はこれに近そうだが……。
追記:ムジュラのデバッグメニュー呼び出しが発見当初(2019年5月頃)33時間大翼の歌を吹かなければならなかった事実と記憶を混同しているかもしれない。12時間まではすぐ縮まる。
2019/11/13 Wii VC ムジュラの仮面 SRMによりムーンワープ
2019/11/13「Majora's Mask - Moon Warp」 by Exodus
SRMが猛威を振るい始める。よくよく考えると、SRMがRTAに影響したのは時オカよりムジュラの方が先なのかもしれない。
2019/11/20 RTAでムーンワープ達成
ムジュラany%の世界記録は40:58に(by FullGrownGaming)。ここから更新が始まる。
2019/11/26 「Majora's Mask - Moon Warp 2」 by MrCheeze
ゾーラとビンが不要に。ムーンワープ期は最終的に28:17(2019/12/7, by EnNopp112)まで縮む。
2019/12/12 「Total Control Demonstration Stream」by glank
カカシの唄を30分吹いてた頃の時オカTotal Control ACE。今だったらファイルネーム入力画面でポチポチプログラミングするだろう。
生まれ出るものは光り輝く犬。犬の虹。
2019/12/16 「Ocarina of Time - Fast and Easy Total Control ACE」 by MrCheeze
Total Controlとしてタイピングのアイディアが提出された。虹色に光りHESS以上の速度で後ろスライドするリンク。加速して制御しきれない。
2019/12/27 「Ocarina of Time - Credits Warp ACE idea」 by MrCheeze
SRM/ACEのセットアップは簡易化されたとはいえ、この時点ではまだダルニア始点らしい。
2020年 1 – 2月 RTAへの輸入と大混乱
技術とセットアップが爆速で発展していく時期。
時オカany%に関して。最初コキリの森でのACEに「妖精のオカリナ」「パチンコ」「コントローラー3」が必要だった。まずオカリナが不要になり、次にパチンコ、最後にコントローラー3が葬られる。
コントローラー3関連が特にややこしい。2020/2/19までセットアップにコントローラー3の入力が必要だったが、要求する入力でチャートは2つに分かれる:手動で容易にできるもの(単純な斜め最大入力)とできないもの(人間にはちょっと再現できない微妙なアナログスティックの傾き)。
後者のチャートにおいてRTA走者がどうしたかというと、入力が1回だけ必要な点に着目した。プラクティスROMで数値を可視化し、目標の値で物理的に固定化したコントローラーを用意すればよい、と。固定法に走者の創意工夫がみられる。
This is the current state of Ocarina of Time LMAO pic.twitter.com/f9VwRTaDiP
— Skater (@skater82297) 2020年1月15日
— Savestate (@Savestate) 2020年1月16日
84フーボぉパv pic.twitter.com/wOTYeXZ7V5
— すば (@sva16162) 2020年1月21日
コントローラー3の物理的固定を使うのは現在のレギュレーションだと禁止されていたはず。議論が熟さぬうちに記録が出ていた。
2020/1/3 「ACEはN64でしかできない」
現在ではN64, Wii U, Switchでできることが知られている(Switchに関しては2021/10/28参照)
Turns out, zelda64 ACE is only possible on the N64 itself, not gamecube/virtual console. This is because the N64 only looks at 1 opcode at a time, but ...
— MrCheeze (@MrCheeze_) 2020年1月3日
Actually, no, separate reason. Previous ACE routes jumped to random parts of code such as seed angle, and GC fails to recognize that as a valid function.
— MrCheeze (@MrCheeze_) 2020年9月1日
Thr current idea only edits instructions in the middle of a valid function, do GC can JIT it successfully.
(2020/9/1 any%がGC版で更新されたことに関して)
GCやWiiでも関数内部のポインタをいじったりはできるし、LightNode SRMによるArbitrary Ram Writeの自由度はN64以外の方が高かったりするのだが……。ROM内に存在しない関数を零から創り出して実行することはできない、らしい。
Turns out this information is... wrong?!
— MrCheeze (@MrCheeze_) 2021年7月26日
ACE doesn't really work well on Wii VC and Gamecube, because:
1) the recompiler crashes if a function ends with a jump instruction instead of "jr", and
2) if a function has already been recompiled, modifying it doesn't do anything... https://t.co/mcNC5djpFD
(2021/7/27 Wii UでACE出来るのはWiiよりエミュとしての完成度が高いため。でも実機の方が基礎動作速いし(Wii Uはラグりすぎ)特殊カテゴリ以外誰が使うのか)
2020/1/4 iQue版時オカ TASでコキリの森からクレジットワープが可能に
2020/1/4「Ocarina of Time - Kokiri Forest Credits Warp」 by MrCheeze
ACEの研究成果。オカリナありパチンコありコント―ローラー3あり。
時オカAny% TASとしては15分切りを達成した初の記録。ファイルネームが「Cheatbox」だしACEの過程で利用していないっぽい。
何よりも中国語、iQue Playerの使用が目を引く。これは任天堂が2003年に中国で発売したゲーム機で、性能はN64程度。ソフトもハードも入手困難そうだがどうやって手に入れたんだ*6。なんでエミュ環境があるんだ。
https://ja.wikipedia.org/wiki/IQue_Player
技術的な解説はルートが安定する2020/2/19まで控える。
2020/1/9 AGDQ2020:GC版時のオカリナ100% NSR (by ZFG)
https://www.twitch.tv/videos/533539330?collection=NZFiatOA5xW75w
https://archive.japanese-restream.org/agdq2020
過渡期の映像として貴重。GC版を使うのが珍しい。
この記録は2時間50分前後で今見ると普通の100%と大差ない。2週間後(2020/1/22)、100% NSRの世界記録は38分になってしまう。更に2年後(2021年10月)には11分台へ。
ランは安定していて、日本語による解説も快適(すば氏、せーら氏)。グリッチshowcaseがあり、雑談から当時の状況が伺える。
2020/1/15 N64版時のオカリナ any% RTAでSRM/ACEの使用が始まる
2020/1/15「Ocarina of Time - Kokiri Forest Credits Warp (RTA viable N64 version)」 by MrCheeze
日本語ファイルネームの利用によってN64でもコキリクレジットワープができるようになった。
「Ocarina of Time Any% in 12:59 (Former WR)」by Lozoots
今回世界を救うのはこの男 「84フーボぉパv」*7
現在のspeedrun.com statisticsでany%の一番最初の世界記録がこれ*8。
妖精のオカリナありパチンコあり。コントローラー3も使っているが手動で入力している。
妖精のオカリナ、Return A(すぐ後のany%に見られるデクババでカメラ角度を固定するグリッチ)の代わりぐらいにしか使ってなくないか? そうでもないのかな。このセットアップだと命令を走らす上で持っていることが大事らしい。
2020/1/22「Ocarina of Time 100% No Source Requirement Speedrun in 38:23」 by ZFG
角度依存でアイテムを入手していた頃の100% NSR。
2019/12/28に2:42:53(by ZFG)を出してから1ヶ月で2時間も縮んでいる。
2020/1/27「OoT Kokiri Forest Credits Warp - Easier method without extra controllers」 by MrCheeze
オカリナありパチンコありの場合、コントローラー3レスはここで確立されていた。
まあ1週間後にはオカリナレス・パチンコレス・コントローラー3固定化の時代になるのだが。
2020/1/31 時のオカリナ any% オカリナレスチャート
2020/1/31「OoT any% in 11:18 (former WR)」 by Savestate
オカリナレスチャートがいつのまに登場。全然最適化されていないのに一瞬WRになるのが面白い。技術先行の時代。コントローラー3固定化チャートと思われる。
2020/2/1 時のオカリナany% 10分切り 9:59(by Lozoots)
2020/2/2 「Ocarina of Time Any% in 9:56 (Former WR)」 by Lozoots
今回世界を救うのはこの男 「3-08ビぁcべ」
こちらはコントローラー3手動入力。パチンコを取得するためだけにデクの樹様内部へ。セーブリセットしたらあとはいつもの。
2020/2/2 N64版ムジュラの仮面 ACEでクレジットワープ達成
2020/2/2「Majora's Mask — Wrong Warp to Credits with ACE」 by SeedBorn
次は2020/2/5に上がったセットアップ。イカーナの墓場はムジュラの仮面三大SRM聖地の一つ(他はデクナッツ城と天文観測所)
Majora's Mask — Credits Warp from Graveyard
2020/2/16にはRTAでクレジットワープが達成される。ムジュラの仮面any%の新WRは27:42(by Seedborn)*9。
Majora's Mask Any% Speedrun in 27:42
余談:2020/2/2にはもう一つ大事件が起こっている。風のタクトでボムを使う簡易バリアスキップが見つかったのだ(以前のバリアスキップは動的メモリ調整による)。3Dゼルダ魔の日。
February 1st, 2020 in 3D Zelda:
— MrCheeze (@MrCheeze_) 2020年2月2日
- Ocarina of Time goes below 10 minutes
- Majora's Mask gets ACE
- New barrier skip https://t.co/2Mh5VJyKBk
2020/2/3 時のオカリナ any% パチンコレスチャート
「Ocarina of Time - any% Slingshot Skip (TAS Only)」 by MrCheeze
「OoT any% in 9:25 (former WR)」 by Savestate
TAS only つってるのが即日RTA始まるのはなんかおかしいよなぁ?
2020/2/6 時オカany% 9分切り 8:45 (by Narcissa Wright)
2020/2/19 「OoT any% 8:12.300」 by Narcissa Wright
今回世界を救うのはこの男 「3. dべNgべ」
パチンコをスキップしてコキリの森内で完結するセットアップ。今見ると無を取得後結構動き回る。またコントローラー3の物理的固定化を使っている。
2020/2/7 時のオカリナ NG+ 1.684秒でクリア(by Savestate)
ジョークであり、レギュレーション議論に一石を投じるもの。
[WR] Ocarina of Time NG+ Speedrun in 1.684 Seconds
当時のミーム画像
LMAOOOOO thanks reddit pic.twitter.com/opzI1rXtjD
— Savestate (@Savestate) 2020年2月7日
2020/02/14 「Majora's Mask — Total Control」by SeedBorn
ムジュラの仮面の方もACEでめちゃくちゃできるようになったという報告。
2020/2/19 N64版時オカany% コントローラー3が不要に
2020/2/19「Ocarina of Time - Slingshot and Controller 3 Skip」 by MrCheeze
2020/2/23「OoT Any% ACE Tutorial」 by dannyb
今回世界とレギュ改訂議論を救うのはこの男 「87Nジほブeぞ」
今思い出すN64 any%のルートといえばこれだ。
レギュレーション上大事なのはコントローラ3入力を使用しなくて済むようになったこと。早めにこのルートが開拓されて本当によかった。もし長い間コントローラー3物理的固定化ルートが世界記録になっていたら、レギュ改訂議論がものっそい面倒なことになっただろう。
ルートが安定した(2020年9月まではこれが最速)ので少し技術的な解説を挟んでみる。
55ルピーを入手し(ヒープ調整でコキリの森内の特定のルピーを入手したりしなかったり)剣・盾・デクの実を揃える。
デクババが出現するあたりにロードゾーンの境目があり、そこを跨いでヒープ調整を行う。デクババを使ってRetrun A / 一人称視点バグを発動。カメラ角度が固定化される。
Return A/First Person Glitch - ZeldaSpeedRuns
この状態で剣がある狭い穴に向かい、看板でWWT(Walking While Talking)を起こす。本来WWTはカメラ位置を固定化するのだが、このルートではReturn Aが発動中であり、両者が相殺して微妙な状態になっている。
Walking While Talking - ZeldaSpeedRuns
このあと岩に向かってデクの実を使うとReturn Aが解除。WWTが本来の力を取り戻し、視点が看板あたりに固定化される。と同時にリンクが何かをつかむのだが、(遠くなので見え辛いが)岩ではなく無をつかんでいるのが判る。
WWTを使った「無を取得」はCamera Lock SRMと呼ばれ、元々時オカ3Dのコミュニティでアイディアが出されたらしい(時オカ3Dは2022/1/7現在でもSRMの有用な応用が無いのに!)
ここからACEまで持っていく。リンクの現在角度/最後にロックした角度の調整を3回行うことでファイルネームを読み込み、「飛び石を1フレーム映すごとにカットシーンIDとよばれる値が1増える」状態になる。9フレーム映せばカットシーンIDは0から8まで増える。すると
この状況で双子の家(009C)に入るとCutscne Map(00A8)という特殊なエントランス/マップに飛ぶ。ここにおいてカットシーン8が流すべきムービーは「Cutscene - A Thwarted Ganondorf Curses His Opposers」、つまりエンディングである。
――「速成:Wrong Warp - 計算例」
【RTA解説】Wii「スマブラX」収録 5分体験版「時のオカリナ」any% を可能にしたグリッチ part1/2:SRMとWrong Warpの基礎 - 古い土地
SRM以後のCredits Warp(エンディングワープ)も、結局はWrong Warp(ロングワープ)と呼ばれるグリッチの原理で成し遂げられる*10。Wrong WarpといえばSRM以前のany%でゴーマ戦から崩壊ガノン城内部へ飛んだ通称「ガノンドア」が有名だろうか。
上で引用した記事にはWrong Warpを基礎から応用まで(SRM以後を見据えて)書いたので、興味がある方は参照されたい。「エントランス」「カットシーンID」ともに超重要概念だが、解説は上記事に譲る。
このルート最初の記録は8:04(2020/2/23, by dannyb)。
2020/2/26 N64版時のオカリナ any% 8分切り 7:59 (by dannyb)
このあともまだまだ縮む。
付録:基礎事項
年表の中で説明できなかったSRM/ACEの仕組みについて補足する。
SRMの概要
以下は筆者の理解。「Stale(古くなった) Reference(参照) Manipulation(操作)」とはどういうことか、 時オカany%のように岩で無を取得する場合で例示してみよう。
①ロードゾーン跨ぎ/回転切り等の「儀式」=セットアップでこれから持つ岩の角度情報をヒープ内の良いアドレスAに誘導する
②岩を持つ
③何らかの手段(時オカany%の視点固定するやつ、スライドによるロードゾーン跨ぎ等)で岩のアクターを解放(無を取得)し、参照だけ保持する
④新たなロードゾーンを踏むと解放されたアドレスAに新たなアクター/メモリ情報Bが入る
⑤無を特定角度に置くことで、無が参照しているアドレスAに位置する情報Bへ異常な値を流し込む
岩SRMの要点は「持っている岩」が「無」に変わることでメモリ情報が「解放され」、しかし「参照は保持したまま」「新たなアクターがロードされる」ことにある。これで「新たなアクター」に「異常な値」を流し込むことができるのだ。この過程はどのSRMにも共通する。
またSRMを実用的な効果に結び付けるために、上の「アドレスA」「メモリ情報B」以外の部分も調整が必要である場合が多い。例えば宝箱の中身を変えるのはSRMだけでもできるが、ファイルネームを命令として実行する(ACE)にはいくつかジャンプ命令を乗り継ぐ必要がある。
この節の執筆にあたっては次の記事を参考にした。
時オカにおけるACEの定義
任意コード実行(ACE)とは何か。(ゲーム内の操作だけで)(程度にもよるが)任意のコードを実行することである。以上。
いや、割と文脈によりけりなので、本当に一般論としてこれ以上のことは言えない。
時オカ・ムジュラに関しては、チューリング完全に近いしプログラミングも書きやすい(と筆者は認識している)。次の動画を具体例として挙げておこう。次回の記事でも触れるつもりだ。
「Majora's Mask 100% TAS with Arbitrary Code Execution by Seedborn」(2020/12/12)
(動画の34:54時点、RTAタイマー34:41の時点のスクショ cool)
本当に問題にしたいのは、ACEのレギュレーション上の定義である。
ACEがany%以外のメインカテゴリで禁止される一方、SRMは「100%」「All Dungeons」「Defeat Ganon」「No Wrong Warp」の4つの「SRM」カテゴリで使用が許可されている。「何がACEでないか」はタイム短縮につながる実際的な問なのだ。
speedrun.comのCategory Rulesから引用しよう。
In the context of OoT rules, ACE is defined as:
- Executing code outside of the .text section of a file
- Executing modified code in the .text section of a file
*If code is indirectly modified by some SRM application but it does not benefit the speedrun, it is allowed
明解な定義である。と同時に、仕組みを全部理解していないと判別できるものではない。「よくわかんないことがわかった」状態。
まあ、SRMのセットアップを後追いしかしない人はルールに抵触する危険が無いし、セットアップを開発する人は十全に理解しているはずなので、誰も困らないのか……?
それでも喉奥に何か引っかかったような感覚がある。解消するには「全部理解」するしかない。あるいは、この敷居の高さこそ引っかかりの原因なのか。*11
ここでは時オカのレギュレーションを説明したが、ムジュラの方ではSRMを「Function Pointer Manipulation:FPM」か否かで更に細かく分けている。元々ダンジョンが4つと少なくFPMと大翼の歌を組み合わせると強力すぎるせいだろうか、現在ではFPMまで許可した「SRM」カテゴリはcategory extensionに追いやられている。
|次>
*1:余談:2019年は他の3Dゼルダゲーでもヤバイことが起きていた。風タクではActor Unlodingによるハイラル城バリアスキップが見つかり、Any%は3時間50分から1時間05分に更新。スカウォではReverse BiTMagicの発見でフラグ関係が滅茶苦茶になり、Any%は4時間50分から2時間09分に更新。
*2:iQueは11:11まで短縮し、「SRM以前」は9:59まで短縮したとMrCheeze氏はまとめている。そうかなあ 「Since the iQue era, the time has been cut by 11 minutes and 11 seconds. Since the last pre-SRM route, 9 minutes and 59 seconds. (I wonder who will be the first to get sub 6:58.366?) / OoT minus the intro is faster than a SMB1 speedrun. It's kinda incredible.」https://twitter.com/MrCheeze_/status/1418316441795932161?s=20
*3:最近気づいた細かい見落とし:GC版最後の世界記録である7:07はムービー呼び出しにLightNode SRMを活用することで前記録から2秒短縮した。なので正確を期すなら、Wii VC 直前からany%でLightNode SRMは活躍していたことになる。
*4:SRM/ACEに関してはN64でver1.1, ver1.2が使われることは無かったはず。一般にver1.1は利点が無く、ver1.2を使うならそのバージョンに基づくGCかWii VCを使った方が何かとアドバンテージを得られる。SRMのセットアップはバージョンによっても変わり得るので実践する方は要注意。Version Differences - ZeldaSpeedRuns
*5:「Wii VCのコントローラーだとデバッグメニューを呼び出すことはできても操作できない」という問題は、後に時オカでも発生した。特殊カテゴリでWii U VCが生き延びたり生き延びなかったりする原因の一つ。
*6:2013-14年のany%最速ハードがテキスト表示の関係でiQueだったことがある。any%上位勢は一定数iQueを導入した。
*7:走者により名前が違うことについて:まずコントローラー3の扱いによってチャートが変わる。また、この時期は同じチャートでも名前の入力にいくらか不定性があったはず。
*8:「ACE以後一番最初」となると同日同走者の13:48の記録がある。
*9:技術開発担当と実走担当が別れることも当然多い。しかしながら、SRM/ACE使用カテゴリは実走(の改善)に深い知識が要求されるため、技術開発と実走両方できる人が活躍している印象。
*10:ただし本記事のpart2で見るようにGC版any%は「エンディング呼び出し関数」を実行すればいいので例外的。
*11:ベテラン走者もよくわかっていなかったらしい(ツイートはすば氏より引用) 「イマイチACEの定義ってよくわかってないんだよなあ/NoWWのタイトルファイル呼び出しとかファイルネーム4文字利用してるけど、あれはACEでは無いんだよねえ」https://twitter.com/sva16162/status/1277184658900258817?s=20