<前|
混乱期は終わった。SRMが順当に応用範囲を拡げつつ発展していく様を見ていこう。
次のプレイリストはSRMの前史から応用まで一通り重要な動画が揃っており、本稿の執筆においても参考にした。
Stale Reference Manipulation (SRM) Research - YouTube
またpart 2ではany%以外の話が増えてくる。他カテゴリだったり、3DSのリメイク作品だったり。
追記:2020年から2021年までの2年間にわたる(時オカ・ムジュラに限らない)3Dゼルダany%短観として、次も面白い。
2020年 3 - 12月
2020/3/1「Zoras River SRM items as child (Butterfly rewards)」 by blini plz
ゾーラ川の蝶をつかむと、なんやかんやでカエルがアイテムをくれる動作に干渉する。これで(一部のRTA走者にとっては)容易にアイテム錬成が可能となった。
No Wrong Warp - SRMで一瞬使われたが、タイトル画面のデバッグファイル読み込みにすぐとって代わられた。現在の100% - SRMでは(少し見た目が異なるが)現役。
2020/3/8「Achieving ACE-like effects without ACE (Arbitrary Function Calls)」 by MrCheeze
ACEが禁止されたSRMカテゴリで後に大活躍する「ラ97ぉ」の登場。タイトル画面のセーブデータを読み込める。これでもACEではないらしい。もしかして既存の関数(この場合は「load title screen save」)を実行するだけならspeedrun.comのレギュには抵触しない? 「instruction pointer manipulation」はムジュラだとダメらしいが。
2020/5/11 「OoT Gamecube Any% Route Demonstration」 by Link11
GC版時オカany%ルート提案。この時点ではN64版と比べてちょっと遅い
2020/5/22「Ocarina of Time 100% NSR Speedrun in 32:02」 by Savestate
ファイル2個使ってタイピング→デバッグメニューに持ち込んでいた頃の100% NSR。N64を使用。
2020/5/26 どこでもドア(Farore's Wind Entrance Index SRM)が発明される
2020/5/26「SRM modify FW entrance index (v1.2)」by blini plz
「グリッチエントランス(glitched entrance)」と呼ばれる異常に大きい値をフロルの風に登録するグリッチ。以後フロルの風を使うたび、その時点でのリンクの角度を参照して行先を決定する。つまり、どこへでも行けるようになった。ただしこの時点では子供リンク限定(後にgrotto SRMが大人リンクでも可能にする)。
この即座の応用として次がある。
2020/6/11 SRMを使った時のオカリナ All Dungeonsの新しいルート提案
「all dungeons with SRM warps demonstration run」 by ZFG
40分切り。これ以前もWrong Warpでかなり早かったが、それでも1:16:56(2019/7/19, by Zudu)だ。以前のAll Dungeonsは「All Dungeons - No SRM」カテゴリに収められている。
現在の世界記録は日本語版Wii VCで35:28(2021/9/2, by RTA64)。
どこでもフロル以外にも「子供状態だが一瞬大人になってミラーシールドを装備する」「闇と魂のメダルを消す」「RBAを用いないBフロル」は重要な発明である。これで子供リンクだけでAll Dungeons攻略が可能になった。
このあたりについては次の記事の付録でも触れた。
【RTA解説】Wii「スマブラX」収録 5分体験版「時のオカリナ」any% を可能にしたグリッチ part1/2:SRMとWrong Warpの基礎 - 古い土地
2020/8/15「Moon's Tear ACE Credits Warp on English (NTSC-U)」 by Ryle
英語版N64ムジュラの仮面において、英語のファイルネームだけでクレジットワープを達成。
ムジュラの仮面3DにおけるSRMの応用。「最初の3日間で人間状態に戻る」というムジュラコミュニティの悲願が達成された。しかも原作より先に。
だが……
①セットアップを完遂するのに時間がかかる(最低でもゲーム内半日=現実内9分待つ)
②オカリナ無しでムジュラ3Dをクリアする手段がこの時点では存在しない
というわけでRTAで使われることは無かった。②は2021年3月にムーンワープで解消するが、それでも9分待つなら普通に1stサイクルをクリアした方が速い。
原作でも2021年11月に「Human in 1st Cycle」が達成されるが、戦略は全く異なる。any%に取り込めるセットアップだった。
2020/9/1 GC版による時のオカリナ any%の更新
2020/9/1「Ocarina of Time Any% Speedrun in 7:27.217 (former WR)」 by Savestate
今回世界を救うのはこの男 「 zラ0.Fg」*1
Today, a huge new discovery for Ocarina of Time any% was made - quite possibly the final major innovation the category will see. https://t.co/cBqL6guVDI
— MrCheeze (@MrCheeze_) 2020年9月1日
「quite possibly the final major innovation the category will see.」(訳:おそらくany%カテゴリーで行われる最後の主要な革新です)
実際には10か月後、Wii VCでまた更新されるのだが。
以下ツイートスレッドの抄訳。
これ以前のN64のルートでは3回異なる角度をセットアップしコキリの家に入る必要があった。Savestate氏はここを改善することを考えた。
(中略。ちょっと門外漢すぎて勘所が判らない。)
ともかく、GC版時オカはdynamic recompilation (動的リコンパイル)emulatorなのだが、次で述べるような欠陥(実装上の便法)がある。
正確なエミュにおいて、RA(Return Address)レジスタは仮想N64メモリ内のコードへを指すべきだ。しかしGCの場合、GCのメモリ内にある「N64コードをリコンパイルしたもの」を指してしまっている。GCのエミュは「砂場 sandbox」として閉じていないのだ。
これにより、N64のグリッチであるSRMを使って(命令を乗り継ぎ)GCの既存関数を呼び出すことができる*2。
もうひとつの重要な事実は、GC版時オカのエンディングがリアルタイムレンダリング(in-engine)でなくプリレンダリングムービーになっていること(おそらくは映像と音声の同期ズレを防ぐための処置なのだろう)。
これに伴い、エンディングムービー開始はある1つの(GCの)関数が担っている。
今回のセットアップではSRMによりこの関数を呼び出した。角度調整は一回だけで済むし、デクの樹方面へのロードゾーンを跨ぐだけでエンディングに入る。
N64で7:32(2020/8/18, by Savestate)だった世界記録が、後にはGC版で7:07(2021/7/6, by Savestate)まで縮むことになる。25秒の短縮。
2020/9/23 「Ocarina of Time - Grotto SRM」 by MrCheeze
ムジュラで概念実証され、時オカで実装された技。
SRMで隠し穴(grottto)の行先を変える、というシンプルだが強力なワープ技。グリッチエントランス・どこでもドアとも親和性がある。
詳細は次の記事で扱った。
【RTA解説】Wii「スマブラX」収録 5分体験版「時のオカリナ」any% を可能にしたグリッチ part1/2:SRMとWrong Warpの基礎 - 古い土地
2020/11/25 時のオカリナ 100% TASが公開 3時間切り(2:57:59)
2020/11/25「Ocarina of Time 100% New Route LOTAD in 2:57:59 [commentated]」 by ZFG
LOTAD:Low Optimization Tool Assisted Demonstrationの略。ポケモン第三世代に出てくるハスボーの英語名がlotadなのでそれに掛けてる(おそらく頭文字ありきで造語している)。
「100% - SRM」:ACE禁止。SRMを使ってアイテムを不正入手してもよいが、正規の手段でも取らなければいけない。例えば、一度取得すると正規入手が不可能になる(さらに消せない)アイテムをSRMで取ると詰み。
「Fブーツ」(2020年6月頃)の使用が今回のルートの目玉の一つ。無重力状態になることで色々利点があるのだが、バック宙したり空中でダメージを受けたりすると永遠に空中浮遊してソフトロックする諸刃の剣。更に子供リンクしか装備できない。
もうひとつは「どこでもドア」(2020/5/26参照)。その時点では子供リンクのみ可能だったのだが、9月に見つかったgrotto SRMによって、大人リンクも使えるようになった。フロルの風がより便利なワープアイテムになって新登場。
RTAの現世界記録は3:03:43(2021/2/23, by ZFG)。この長さの激ムズルート走ってLOTAD + 5分程度なのは流石だ。
Ocarina of Time 100% Speedrun in 3:03:43
「100% - SRM」開設以前の100%には3:51:34(2019/12/18, by glitchyman)の世界記録がある。現世界記録は3:50:41(2021/10/23, by glitchyman)。SRMの登場によって100%は50分近く縮まったことになる。
2020/12/12 ムジュラの仮面100% TAS(with ACE)が公開
2020/12/12「Majora's Mask — 100% Speedrun with Arbitrary Code Execution」 by SeedBorn
注意
①NSR(No Source Requirement)でない。つまりアイテムは全て「正規の方法」で入手する。「100% NSR」ならもっと早くできるはず(レギュ的にもACEの使用は許可されている)。
②speedrun.comのレギュレーションだと「100% - No Pointer Manip」でACEは(本質的に)禁止されているが、この動画ではバリバリ使う。
というわけで二重に遊びになる。スピードランというよりはデモンストレーションと言った方が正しい。3Dゼルダにおける任意コード実行の威力を知るには良い動画。
これを作るのに200時間だが300時間だがかかったらしいが、34:43-の部分はその労に見合う価値のある映像だ。
コード入力の様子
A number of people were interested in seeing what controllers 2, 3 and 4 were up to during the ace run. Here's their inputs as they appear in TAStudio during the payload creation (easily their busiest time): pic.twitter.com/CETMwKvRa7
— SeedBorn (@TVand) 2020年12月12日
2021年
2021/1/10 AGDQ2021:時オカ All Bosses - SRM (by ZFG)
https://www.twitch.tv/videos/868404524
https://archive.japanese-restream.org/agdq2021
1年前もAGDQでZFG氏が走っていた。1年で何もかも変わってしまった。
面白いルート、安定した走り、良い解説。(最後以外)SRMでグダらないのは本当に実力が高い。
グリッチエキシビジョンのLSDガノン城、久しぶりに見てビビった。
(Japanese Restream 1:33:24時点)
2021/2/17「Majora's Mask 3D - Wet Bomb SRM」 by MrCheeze
ムジュラの仮面3Dにおける基礎研究。ムジュラ3Dムーンワープの前に色々試されていた。
2021/2/28 時オカをメモリエディタとしてマリオストーリーACEが達成される
酷いニュース。SGDQ2021でも披露され、一時期話題になった。
元々2/20にマリオストーリーのACEが達成されたのだが、そのメモリ調整の手法は明らかにTAS onlyだった(XYZ float-perfectが6回必要)。人間でもできるメモリ調整のセットアップを模索する中で、近年急速にメモリエディタ性能として優秀になった時オカが抜擢された。常人の発想じゃない。
Jcog氏はこのチャレンジの2週間前(2021/02/13)、blindfoldedでマリオストーリーをクリアしていたらしい。狂人?
マリオストーリーACEの経緯は次の記事にも書いた。
マリオストーリー(N64)とペーパーマリオ(GC)における任意コード実行/任意スクリプト実行について - 古い土地
2021/3/14 ムジュラの仮面3Dでムーンワープの実装
2021/3/14「Majora's Mask 3D: Moonwarp」 by iwabi
原作(N64)とリメイク(3DS)でヒープの仕様が全く異なるから真に非自明な発見だった。このSRMのセットアップはかなりキマっている。
ムーンワープによってAny%は50分の更新。現世界記録は33:23(2021/3/19, by iwabi)
技術的側面に関しては次のツイートスレッドが参考になる。
Ladies, Gentlemen, and anyone it concerns:
— MrCheeze (@MrCheeze_) 2021年3月14日
Moonwarp has been found in Majora's Mask 3D. https://t.co/focly64Egd
2021/3/18 LightNode SRMの発見
thanks to a discovery by @MrCheeze_, we now have the ability to write words to anywhere in memory arbitrarily with a new application of srm
— Savestate (@Savestate) 2021年3月18日
this means: DEBUG MENU!, faster any% (sub 7 soon?), and much much more soon to come! pic.twitter.com/6Wq3yfTA33
極めて重要な発見。技術的詳細は「2021/7/23 Wii VC~」の節に含めた。
即座の応用として、例えば次の3つが挙げられる。
2021/3/24 「Building a RAM Editor in Ocarina of Time」 by SeedBorn
LightNode SRMは1回のArbitrary Ram Writeを可能にしたが、工夫すれば永続的なそれもできる。しかも人の手で可能。
Wii U VC限定かと思いきや、 N64でもできるようになったらしい。「[WR] 100% NSR Speedrun in 21:15」(2021/6/30, by PaintSkate8)で見られる。
2021/4/26 「Ocarina of Time 100% NSR in 25:12」 by Big Salt
デバッグメニューが呼び出しやすくなって新登場。Wii U VCを使用。
2021/7/4 「Rough Comparison between Current GC Any% and LightNode Heap Manips」 by Savestate
Wii VCによるany%更新直前、LightNode SRMはGC版のセットアップにも取り込まれていた。世界記録は7:09.850(2020/12/4, by Amateseru)から7:07.666(2021/7/6, by Savestate)に。
追記(2022/2/5):LightNode SRMを実践する記事を書いた。「Any%」「Defeat Ganon - SRM」「No Wrong Warp - SRM」全てLightNode SRMにより更新されている。更にアーウィン呼び出しや100% NSRやKFC%まで同一セットアップ(ファイルネームだけ変える)で可能。
2021/7/23 Wii VC 時のオカリナany%で7分切り達成 6:59(by Savestate)
Ocarina of Time Any% Speedrun in 6:59.766
And with this amazing run, I've officially lost my $100 bet with Savestate that sub-7 minutes would never happen, and I couldn't be happier about it :D https://t.co/KqUjuSXYEQ pic.twitter.com/8bNQlJ1hqc
— MrCheeze (@MrCheeze_) 2021年7月22日
今回世界を救うのはこの男 「ラんぐUVくBヲ」
8分切りがACE初期の2020/2/26(7:59 by dannyb)だと思うと隔世の感がある。
今回の達成に伴い「7分切りは不可能」に賭けていたMrCheeze氏が100ドルをSavestate氏に渡した。
ツイートスレッドを以下で抄訳してみよう。
しばらく前からスピードランに寄与している技術がLightNode SRMだ。LightNodeはナヴィ等妖精のアクターが持つ構造体。「連結リスト」と呼ばれるごくごく一般的なデータ構造を持っている。*3
アクターが持っている、ということはSRMで利用しうるわけだ。連結リストの削除関数を利用できれば……以前のSRMと比べて自由度は格段に上がる。
次はLightNode SRMに関するドキュメント。
ファイルネームを併用すると、人間の手でも一つ任意のアドレスに好きな値を書き込む(Arbitrary Ram Write)ことができるようになった。なお、LightNode SRMに関しては珍しくN64以外の方が自由度が高いようだ(N64が不正アドレス参照に対しすぐクラッシュするため。ある種の安全設計?)
GC版はN64版に無いプリレンダリングムービーを再生して(1つの関数を実行すればよい)25秒の短縮を図った。最終的に7:07まで縮む。
この時点でもうかなり煮詰まっていた。改善の方法は、無を取得までの流れを大きく変えるか、Wii VCで同様のこと(角度調整1回のみのクレジットワープ)を行うか。
これは基礎動作の問題である。N64, GC, Wii VCのうち、メニュー開閉はWii VCが最速でGCが最遅。GC版がany%で活躍したことこそ驚異かもしれない。
エンディングに直行するためには(GC版のムービー呼び出しを例外として)マップとカットシーンの特定の組み合わせをロードする必要がある。組み合わせは一つではないが、多くもない。
運よくLightNode SRMは2つのアドレスの値を同時に変えることができる。が、それには数学的制約がかかってくる。通常はアドレスを任意に指定しその値を任意に指定するので2つ分自由度があるが、今回は2つアドレスを指定するのに自由度を使い果たしてしまう。
MrCheeze氏の調査がしたところ、可能な組み合わせは0個だった。7分切りは不可能なのか?
この状況を救ったのはムジュラコミュニティだった。
Türkenheimer氏が発見しRylie氏がより詳細に調査したところ、Wii VCでのLightNode SRMでは極めて奇妙なことが起こるのだ(調査は元々ムジュラの仮面で行われ、時オカに輸入された)。
①N64における有効なポインターは”80”か”A0”で始まり、また4の倍数でなければならない。しかしWiiとWii Uではそうでないアドレスにも書き込める。
②Wiiのエミュレーターエラー。N64の関数実行の際、まずN64のポインターとして有効かチェックしてからWiiのコードに動的リコンパイルするのだが、何故かリコンパイル後に再チェックをしない。
結果として、C0112223のようなN64では意味を持たないアドレス(Uncached メモリ)をWiiでは使える*4。
さらにここで、WiiのエミュレーターDolphinでは再現されていなかったWii実機の挙動(バグ?)が関わってくる。Uncachedメモリ内のアドレスを4の倍数でないところから書き始めると、実機はなぜか「2回繰り返す」ことで補完するのだ。
Basically, whatever data you write gets duplicated. For example, if the memory at C0000000 starts off as:
— MrCheeze (@MrCheeze_) 2021年7月22日
00000000 00000000 00000000 00000000
and then you write "80123456" to C0000002, you would expect memory to look like this:
00008012 34560000 00000000 00000000
And if you were to test on Dolphin, that's exactly what happens! But the Wii hardware is much wilder. The write will be extended to fill the entire doubleword, looping the value to make it work. So memory ends up looking like this:
— MrCheeze (@MrCheeze_) 2021年7月22日
34568012 34568012 00000000 00000000
これらを考慮すると、ものしり兄弟(Know-It-All Brother)の家をロードし、カットシーンID:43BF8037をセットすることで、エンディングワープが可能だった。かなり針の穴を通すような実装に見える。
最後の部分について、Wrong Warpの観点から詳しく計算してみる。SRM以後も最終的にはWrong Warpの原理によってエンディングを呼び出すことの例証である。この計算の意味合いを知りたい方は次を参照。
【RTA解説】Wii「スマブラX」収録 5分体験版「時のオカリナ」any% を可能にしたグリッチ(あるいはSRM以後のWrong Warp勉強ノート) - 古い土地
ものしり兄弟の家のベースエントランスは00C9であり、ここから+4+7=+11すると00D4「ハイラル平原」(ゼルダ逃亡ムービー・インパ見送りイベント(2 回目以降)などの後)のエントランスにたどり着く。というわけでハイラル平原がロードされる。なおカットシーンIDは16進数の下一桁しか適用されないから、43BF8037ではなく単に7を用いる。
このあとマップとカットシーンIDの組み合わせで流すムービーが決まる。ハイラル平原のCS 7(Setup 11)は「Cutscene - Farewell to Zelda in the Sky」を引き起こす。スタッフロールではないがガノン討伐後に流れるムービーだ。実際動画のエンディングはここから始まっている。
以上が7分切りの経緯。GC版で7:07(2021/7/6 by Savestate)だったのが、現世界記録はWii VCで6:49.150(2021/10/12, by PaintSkate8)に。18秒の短縮。
[Former WR] Ocarina of Time Any% Speedrun in 6:49.150
ヒープ調整がそもそも短いルートで、角度調整がクソ早い。
2021/8/19 N64版時のオカリナ 100% NSR TAS で10分切り
LightNode SRMからファイル選択画面の名前入力。Arbitrary Ram Writeを上手く使いながらデバッグメニューへ。
RTAは11:58(2021/11/29, by kaeru)が現世界記録。TASはタイピングが速すぎる。
2021/8/22 Wii 「スマブラX」名作トライアル 5分体験版時オカがクリアされる (by Savestate)
2021/8/22「Beating the JP Brawl OoT Demo - Route Idea」 by Savestate
今回世界を救うのはこの男 「リンク」
名前入力して新規データから始めるとオープニング3分のせいで何もできない。既存のセーブデータ(子供と大人の2つがある)を使うと、名前「リンク」をいじる余地が無い=ACEでファイルネームを利用できない。
後者はまだ勝ち筋があるから、そちらで調査が進む。
技術的詳細は別記事にまとめた。
2021/8/24 「SSBB OoT Demo Defeat Ganon Speedrun in 4:56」 by Savestate
体験版でガノンドロフ撃破まで。200回走って1回のみ完走なのは本当に難易度が高い。長いスライド、SRM、ガノン戦。各区間一瞬でもグダると体験版は終わる。
また、Savestate氏に引き続いて日本勢が追走。speedrun.comのCategory Extensionsに「SSBB Demo」が登録されることとなった(2021年11月末?)。流石の海外ゼルダ勢と言えど、名作トライアル目当てに日本語版スマブラXを所有していた/所有する人は少なかろう。
2021/10/28 Switch NSO 時オカでACEが確認される
ACE works! Footage from @PaintSkate8.
— MrCheeze (@MrCheeze_) 2021年10月28日
(Audio wobble at the start is caused by an exotic SRM that modifies code every frame.) pic.twitter.com/rSIniBLf6P
ただしSwitchはWii U以下の出来なので、スピードラン的な使い道は無さそう。基本はNTSC 1.2 だがヒープメモリだけ仕様が変更されているせいでセットアップはN64後期版/Wii VC/Wii U VCと異なる*5。
https://twitter.com/MrCheeze_/status/1453459387159306243?s=20&t=ECDpfe4hxpsvsJTD3rP1Jw
後には(デモンストレーションとして?)Switch NSOで100% NSRが走られてる。記録は12:35(2021/11/22, by Big Salt)。
追記(2022/2/21):100% NSRの最速ハードがSwitchになった。入力遅延があってポーズバッファがまともにできなくても処理速度を活かせる分野だと強い。次に日本語の解説動画がある。
【字幕解説】ゼルダの伝説 時のオカリナ RTA 100% NSR 10:39.38 - ニコニコ動画
2021/11/17 Wii VC ムジュラの仮面 1stサイクルスキップが可能に
2021/11/17「Human in First Cycle」 by Türkenheimer
最初の3日間でクリアできるようになるまで21年かかった。SRMの発見から数えても2年だ。デクナッツリンクは限られた能力しか持たず、まずSRMできることが非自明であり、SRMから有用な効果を引き出すためのセットアップは更に非自明だった。
デクから人返りした後は再びSRMによってムーンワープしてラスボス撃破。世界記録は6分縮まって18:37(2021/11/28, by raggen)。
詳細は次の記事でも扱った。
【n回目の革命】「ゼルダの伝説 ムジュラの仮面」で1st サイクルスキップ(=最初の三日間でクリア)が可能に - 古い土地
あとがき
流石に、そろそろ、SRM/ACE関連も落ち着いてきたのではないかと思う。
いや、どうなんだろう。まだ擦れるのかそうでないのか。科学的発見に必要な土壌・環境を用意することはできても(ゼルダコミュニティにはおそらくそれがある)、発見そのものがいつ起こるかは全く予想できない。
年表を作った勢いで、SRM/ACEの今後の課題について思いつくままに列挙してみよう。
①時オカany%は新しいグリッチが見つかるまで伸び代がない。それも、SRM/ACEの「多少の」ヴァリアントでは改善しようがない領域に入ってしまっていると思う。数千回の試行に基づく走者の操作最適化が著しい。次がもしあるとすれば、「無を取得」までの流れを変更するものか、全く別のものか。数か月後にはこのルートも変わっているのか5年後まで同じルートが最速なのか全く予想できない。
②時オカ100% - SRM のRTA 3時間切りはこのまま技術開発していけば可能な気もする。達成されたら一つの節目となるだろう。
③ムジュラany% はデクSRMとクレジットワープを両立させるのが次の課題だ。現在のルートではファイルネームをデクSRM人返りに使うため、ファイルネーム参照抜きに行えるムーンワープが限界である。
④3DSリメイク版でのSRMは今後発展の余地がある。仕様の違いゆえN64よりも遥かにヒープ調整が困難であり、今のところムジュラの仮面3Dのムーンワープ以外に際立ったSRMの応用を聞かない*6。
果たして、リメイク版SRMは不毛の土地なのか豊饒の大地なのか。
本稿では専らSRM/ACEに着目してきたが、No SRMやNMG(No Major Glitches)のカテゴリでも着々とオフラインアップデートが進んでいる。例えば、ここ最近はLunge Storage(突き保存)による時の神殿扉スキップが話題だ。扉スキップはよく使われる割に難易度高めで、Lunge Storageにより敷居が下がったとか。
— すば (@sva16162) 2021年12月20日
lunge storageによる新しい扉抜け
— すば (@sva16162) 2021年12月20日
突きを出した瞬間にキャンセルさせることにより、その勢いが次の攻撃に反映される
ジャンプ斬りで抜けられる場所が増えた
ちなみにlungeが突きって意味だから突き限定かと思ってたけどZ無し縦斬りで良かったみたい
時の神殿の扉以外にも壁・門等をすり抜けた報告がある。いくつかはRTAに活かされるかもしれない。
以下、雑記。
冬のRiJ2021にも3Dゼルダが2作登録されている。
1つはむーす氏による ムジュラの仮面Any% NMGだ。All Masksの現世界記録保持者であり、直近だと1stサイクルスキップ実用化直後のムジュラany%でも一瞬WRをとった(マニ屋の開店時間に関する誤解で初の20分切りを逃したのが悲しい)。
ムジュラのNMGは「SRMとデバッグメニュー以外全部アリ」らしいので、昔ながらの壊れたランが見られるだろう。主要バグ無しとは。
もう1つは日本勢3人(Cma氏、つりゃ氏、すば氏)と本稿で何回も名前が出てきたSavestate氏によるWii「スマブラX」収録時オカ5分体験版レースだ。「SSBB Demo - any%」に記録が載った4人でもある。
本番環境の中でいかにSRM2回を含めた操作を正確に行うか。5分というタイムリミットがあるので安定をとりすぎるわけにもいかず、妙に競技性が確保されている。
年が明けるとAGDQ2022もある。
3Dゼルダ作品は1つ、「3DS Zelda Game Bidwar」という名前で登録されている。寄付を入札(Bid)に見立て、時オカ3Dany%とムジュラ3Dany%のうち入札が多かった方を走るらしい。
走者はgymnast86氏。3Dゼルダの超高水準オールラウンダーな氏だからこそできる芸当だ。ゼルダが上手過ぎる男。
次はjapanese restreamでのスケジュール。
[reference:日本語の解説動画]
通史の提示、というよりは見て楽しむためのリスト。part1の冒頭で提示した技術資料よりはかみ砕いて分かりやすい解説が多いはず。
ただし一部を除いてSRM/ACEが関係するものに限定した。更に動画の全列挙は意図していない。
ニコニコチャンネルのブロマガが消えたことで結構テキストベースの情報が失われている。
時のオカリナ
2020/6/12「【解説動画】 ゼルダの伝説 時のオカリナ RTA "No Wrong Warp" 22:46:23」 by せーら
「No Wrong Warp - SRM」カテゴリ。タイトル画面のデバッグ(?)データを活用する。
動画説明文から更に複数の解説記事・解説動画に飛べる。そちらも参照。
2020/6/13「【RTA】ゼルダの伝説 時のオカリナ Any% 7:49【字幕解説】」 by すば
コントローラー3レスのN64 時オカany%。
時オカany%の前史も簡潔にまとめられている。
2020/6/28「ゼルダの伝説 時のオカリナ "F Boots" やり方解説動画」 by せーら
「100% - SRM」カテゴリで使われている技。
2020/12/31「RTA in Japan 2020: ゼルダの伝説 時のオカリナ」 by つりゃ
GC版時オカany%。
ムジュラの仮面
2019/8/23「【RTA】ゼルダの伝説 ムジュラの仮面 Any% 52:26 字幕微解説part1」 by わらしのみかど
デバッグメニュー期のムジュラany%
2019/12/29 「RTA in Japan 2019: ゼルダの伝説 ムジュラの仮面」 by せーら
応募時点ではデバッグメニュー開くつもりでEST1時間取ったのに、ムーンワープのせいで半分しか時間を使わない。
2020/1/4「【RTA】ゼルダの伝説 ムジュラの仮面 Any% 28:42 Part1【字幕解説】」 by すば
ムーンワープ期のムジュラany%。
2020/4/3 「【世界記録】ゼルダの伝説ムジュラの仮面All Masks 1:36:32 part1【ゆっくり解説】」 by むーす
現在の「All Masks」ではデバッグメニューおよびSRM禁止されている。こちらも最近むーす氏が世界記録を奪取した。2:21:38(2021/10/23)で前世界記録から5分縮めた。
この動画はspeedrun.comのCategory Extentionsにある「SRM – All Masks」*7のレギュレーションで走っている。「SRMを使用してよい」「仮面は全て正規の方法で取得しなければならない」。
没データ「太陽の歌」の活用が面白い。
最後のSRMでブレー面取得からのムーンワープ、何が起こってるんだ。
2020/4/11 「[RTA]ゼルダの伝説ムジュラの仮面 Any% 25:50 [字幕解説]」 by むーす
クレジットワープ期のムジュラany%
2021/11/23 「[RTA][世界記録]ゼルダの伝説ムジュラの仮面Any% 20:28」by むーす
1stサイクルスキップ期のムジュラany%。
時のオカリナ3D
2021/6/17 「【RTA】ゼルダの伝説 時のオカリナ3D Any% 27:50 【解説付き】」 by ぱる
現在の世界記録。ゼルダの子守歌→魔力→フロルの風→ゴーマWrong Warp というルート。
2019年末までの世界記録は37:23(2018/10/24, by zeldacubed)だった。2019/12/29から一気に8分更新される。要因の一つは2019年11月に見つかったダルニア部屋の石像スキップ(Goron City Statue Unload)だ*8。
石像スキップのためにヒープ調整し始めたとき、時期を考え一瞬身構えたが、SRMは関係ない。
追記*9:歴史的な最後のピース(そしてこちらの方が本質的かもしれない:石像スキップが無くともテクタイトホバーで魔力をとれないことはないから)は、2019年12月に見つかったInvisible seamによる爆弾無しフロルの風入手だ。一応2018年から存在は知られていたのだが、当時のセットアップは残像剣(のために回復のハート・黄金のスタルチュラ)が必要で、全く安定しなかった。
以上を合わせ、爆弾抜きで運ゲーを排除しつつAny%を通せるようになった。
ともかくInvisible seamという技が面白い。セットアップ開発に相当苦心したことがうかがえる。
ムジュラの仮面3D
2021/3/21 「【RTA】ゼルダの伝説 ムジュラの仮面3D Any% 33:23【part1】」 by いわび
ムーンワープの実現。
以下、リメイク作品SRMへの雑感。誤り・勘違いを含んでいたらご指摘願いたい(というかリメイク作品でSRMの良い応用をご存知の方は教えて下さい。調べ切れてない感。)
時オカ3DはSRM不毛の地なのだろうか? 「無を取得」まではいくつもセットアップが提唱されているが、有用な効果を引き出しているものはあまり見かけない。原作と比べてヒープ調整が難しすぎる。
一方、同じくグレッゾが4年後に開発したムジュラ3DはSRMによりムーンワープまで漕ぎつけた。開発期間が空いたせいかムジュラ3Dのヒープの仕様は時オカ3Dともまた違う。そこに付け入る隙があった。いや、こじあけた。
……とはいえ、ムジュラ3Dも「何でもできる」からは程遠い。「何でもできる」の最果てに任意コード実行があるが、DS作品で任意コード実行できるようになったのが2021年9月以降のこと(ポケモンダイヤモンド・パール)*10。3DSとなれば、もっと腰を据える必要がありそうだ。
追補:「何でもできる」ことはゲームファン/スピードランコミュニティにとって良いことなのか、という問題も提起できるだろう。筆者は理論的側面からSRM/ACEに興味を持ったし、相当好意的だからこんな記事まで書いた。だが、セットアップが意味不明だったりACEのレギュ上の定義も傍目にはよくわからなかったりして、「効果が強すぎる」「難しくなりすぎた」「ナンセンスでゲーム性を損ねる」「見た目は面白いけど一発ネタ」とみなされても不思議ではない。時オカspeedrun.comのカテゴリ的にはACE/SRM/No SRMでおおよそ住み分けが出来ている(ようにレギュレーション改訂投票がされた)が……間口が広がったと思うか、人口が分散(分断)されたと思うか。
いつまでも何も変わらないというのはまたあり得ない。SRM/ACEが間口を広げる方向に働くことを願いつつ、本稿を終える。
*1:「ラ0.F」以外の部分は自由。この名前は有名走者のZFG氏に掛けているようだ。
*2:こういった手法はそのままセキュリティ分野に含まれる、と指摘する有識者の方が居た。https://twitter.com/MidoriSM64/status/1301008888226091008?s=20
*3:時オカのソースコードの中でLightNodeが具体的にどう使われているか、筆者は知らない。
*4:UncachedメモリはペーパーマリオRPG(GC)の任意スクリプト実行でも活躍した。
*5:Switchの暗号化とかエミュの状況はどうなってるんだろう? メトロイドドレッドなりポケモンBDSPなり結構復号化しているようだが。
*6:RTAでは使えないが、ムジュラの仮面3Dでの1st サイクルスキップを加えてよいかもしれない。
*7:時オカのように「All Dungeons」の中にサブカテゴリ「SRM」があるのではなく、「SRM」カテゴリの中にサブカテゴリとして「All Masks」だの「All Dungeons」がある。探すときに注意。
大翼の歌とSRMの合わせ技(FPM:Function Pointer Manipulation)が強力すぎ、それで元々少ないダンジョンを走破するのは競技性を損ねる、というのがメジャーカテゴリから外された原因だろうか。
*8:活用例として「Any% NG+」というカテゴリをとりあげよう。NG+ではBボタンにフロルの風をセットする。
石像スキップ以前にも既に爆弾レスの記録がある:26:32(2018/8/23, by zelda)。当時はテクタイトホバー(Tektite Hover)によって魔力を手に入れていた。これが石像スキップによって3分短縮される。
2019/11/4「Ocarina of Time 3D Any% NG+ Speedrun in 23:31[World Record]」by gymnast
*9:ぱる氏よりご指摘いただきました。情報提供に感謝致します。
*10:原作ダイパでのACEは次の記事で紹介している:【ポケモンDP】ダイヤモンド・パール(DS日本語初期版ROM)で任意コード実行(ACE)が可能に - 古い土地