古い土地

暗い穴

【RTA解説】Wii「スマブラX」収録 5分体験版「時のオカリナ」any% を可能にしたグリッチ part2/2:SRM以後のWrong Warp

 

<前|

wagaizumo.hatenablog.com

 

 前回はSRMとWrong Warpの基礎について学んだ。時間(5分)とファイルネーム(「リンク」)が限られた中でのSRMピーキーな性能を持っていること。体験版any%の目標であるCredits Warp(エンディング直行)の基礎にはWrong Warpがあること。Wrong Warpは足し算の原理(ベースエントランスとカットシーンIDの和)で動くこと。

 今回はここら辺の基礎知識を使いながらガッツリ解説するので、ちゃんと理解したい方/急に難易度が上がったと感じた方は適宜前回の記事に戻りながら読むことを推奨。*1

 

www.youtube.com

 そして体験版any%を可能にしたこの動画から、次のような問を立てていた。

  • 1回目のSRMでわざわざ迷いの森から迷いの森に移動したのは何故?
  • 2回目のSRMで一旦無を置き角度調整してから再び無を持つとマップがアンロードされる。全体的に何? 何故? 
  • この状態でしばらくするとロンロン牧場のエンディングに辿り着くのは何故?

 

 今やこれらの問に答えることができる。以下ではまず準備運動として現行ルート前の試行錯誤をとりあげよう。そのあと本題である体験版any%の解説を始める。

 

 

 本稿の目的の一つにSRM以降露出の少なくなったWrong Warpへ再度光を当てることがある。いや、「ボス戦後のブルーワープに入ると同時に云々」という分かりやすい形が少なくなっただけで、むしろSRM以後の方が圧倒的にWrong Warp(の原理に基づくワープ)の種類は増えているのだ。

 製品版any%(前回はN64コントローラー3レスチャートについて触れた。今回はiQue Playerという謎ハードに触れる)と体験版any%、どちらもWrong Warpの展開の好例である。

 

 付録としてSRM以後のワープ技がフル活用されているカテゴリ「All Dungons - SRM」をとりあげた。フロルWrong Warpと似ているようで全く別物の「どこでもドア」へ注意を促したい。

 見た目だけでもかなり面白いボスラッシュRTAなので、興味がある方は合わせてご覧いただきたい。

 

 

 

 

 

試行:Wrong WarpSRM(1)

 

 そもそも何故5分体験版なのか、ということをこれまで説明していなかった。丁度良いので導入としてここにまとめておこう。

 

歴史的経緯

 

 昔から時オカのミームとして「5分体験版で○○やってみた」系は一定の知名度があった。次は2019年1月に有名走者のZFG氏が体験版でボンゴボンゴを倒した時の動画。*2

Beating Bongo in Brawl OoT - ZFG Twitch Highlights - YouTube

 この時はWrong Warpしか(クレジット)ワープ技が無く5分でクリアするなど考えられなかった。しかしSRMの発見(2019年10月)以後は現実味を帯びてきて、たびたび時オカRTAのdiscordサーバーでも言及されている。

 とはいえ技術的に可能そうな雰囲気が共有され実際に着手されたのは2021年7月に入ってからのことだった。Savestate氏が当時最速だったGC版any%(同月中にWii VCが最速となる)を走っていた際「5分体験版はクリアできるのか?」という雑談コメントが来たのが始まりである。

 氏はまずgrotto SRMガノン城崩壊後へワープしてみた。ところがガノンを討伐するには5分は短すぎると判明する(SRMは魔法だが便利な魔法ではない! 最終的にはセットアップを最適化してギリギリ間に合うようになるが)

 しばらく後にLightNode SRM(2021年3月発見)を活かす方向で戦略を立て始めた。これは非常に強力なSRMで、2021年6-7月に各種SRMカテゴリ(any%、Defeat Ganon、No Wrong Warp)のルートを更新させた。果たしてLightNode SRMのポテンシャルは体験版でも活かされるのだろうか。ネタバレ:活かされない。

 

[参考]

 LightNode SRMの技術面に関しては次を参照。

【時のオカリナ・ムジュラの仮面】SRM/ACE以降の ゼルダ RTA 史 part 2/2:2020年3月 ~ 2021年 - 古い土地

 実践面に関しては次を参照。1回セットアップを覚えればファイルネームを変えるだけで色んなことができる(アーウィン呼び出し等)。Switch NSO版でも出来るし結構おすすめしたいグリッチ

時オカ日記②(コキリの森 LightNode SRM編) - 古い土地

 

 

 

LightNode SRMの挫折

 

 この節では5分体験版時オカがクリアされる直前の試行錯誤(LightNode SRM関連)に触れる。これらはSRMと絡めつつWrong Warpを比較的素直に(?)使う。

 WWにおいてボス戦後の青い光を使っているわけではないが、ベースエントランスとカットシーンIDの和で変なところ(ないしエンディング)に飛ぶという原理は同じ。

 

 一応エントランスの数値を具体的に書いたが、単純な足し算であり前回丁寧に付けたで今回はスクショを付けなかった。興味のある方は計算練習と思ってエントランステーブルおよびシーン設定表をじっくり眺めるとよいだろう。

https://wiki.cloudmodding.com/oot/Entrance_Table_(Data)

https://wiki.cloudmodding.com/oot/Scene_Setups

 

 

2021/8/9 子供リンクから始めるストラト by MrCheeze

https://www.youtube.com/watch?v=fSrNF7txj20&ab_channel=MrCheeze

 子供リンクはコキリの森からスタートし、ルピー50・剣・盾のみ持っている。冒頭のLightNode SRMは製品版Wii VC any%と微妙に異なるセットアップ。

 SRMによって死亡時「ゲームを続けますか?」に「いいえ」を選択した際、タイトルスクリーンでなく「現在のベースエントランス 」+「カットシーン 3」*3を計算したエントランスをロードするよう改変する。「はい」ではなく「いいえ」の方に仕込むのにセンスを感じる。

 これでまずデクの樹入口(0000)から0000 + 4 + 3 = 0007(ドドンゴの洞窟入口)へWrong Warp。副作用(?)でタイトル画面のデバッグファイルを読み込み大人になるようだ。

 デスマウンテン登山道(ベース013D from カカリコ村)からカットシーン3でWrong Warpすると、013D + 4 + 3 = 0144(デスマウンテン登山道)にたどり着く。ここにおいてカットシーン3(シーン設定7)が流すべきムービーは「Credits at Death Mountain Trail」。エンディングを流したので勝ち。

 ちなみにたどり着いたエントランス0144はムービーと対応した正規のもの。

 

 このチャートはスマブラ実機では使えず没になった。(本質的に「Wii VCでACEができない」という奴?) 

 加えてアナログスティックの微妙な入力を必要とする点でもRTA-viableでない。*4

 

 

2021/8/15 大人リンクから始めるストラト

https://www.youtube.com/watch?v=RpY1CCtTjRM&ab_channel=MrCheeze

 先と同様LightNode SRMで、死亡時「いいえ」によりカットシーン3のWrong Warpを可能にする。

 大人リンクは時の神殿からスタートし、スライド・ヒープ調整用の爆弾と、フックショット(日本語版のみ)/フロルの風・太陽の歌(英語版のみ)を持っている。前者は梯子を上るのに使える。

 まず迷いの森へ向かう。SRMを行って、迷いの森(ベース05E0)からロンロン牧場建物内(05E7)へWrong Warp。ロンロン牧場(ベース0157 from ハイラル平原)からWrong Warpすると再びロンロン牧場(015E)で、対応するムービーはエンディング「Credits 2 - Support Unit」である。

 ちなみにこのエントランス015Eはムービーに対応した正規のもの。

 

 そして没になる理由も先と同様。

 

 

 補足:死亡時「いいえ」に仕込む、という点ではSRM/ACE初期に次のような動画があった。

2020/2/25「Ocarina of Time - Alternate Game Over credits warp (and bonus Ganon warp)」 by MrCheeze

https://www.youtube.com/watch?v=QTKvGcj_oHI&ab_channel=MrCheeze

 タイトル画面におけるムービーは、実のところベースエントランス00CD(ハイラル平原:From After Zelda Escape, 2nd+ Impa Escort)とカットシーン3を読み込んで実行している。この動画ではハイラル平原はそのままに、ACEでカットシーン 5 or 7 を読み込んでエンディングに到達する。

 またNo Wrong Warp - SRMの現ルートでは、死亡後タイトル画面のリンクを操作することによって大人リンクになるのとタイトルファイルを読み込むのを1回のSRMで達成している。

Ocarina of Time - Fast Lightnode SRM for title file and age change - YouTube

 

 

 

 

解決:Wrong WarpSRM(2)

 

 紆余曲折を経て、最終的にLightNode SRMの利用は諦めたようだ。8/22版のストラトを見て行こう。*5

 

 方針は一見シンプルだ。爆弾を持った大人リンクで始める。時の神殿から迷いの森へ向かい、セットアップ開始。grotto SRMでベースエントランスを調整し、次にcurrent cutscene SRMカットシーンIDを調整する。その後Wrong Warpでエンディングへ。困難は分割せよ。

 最初からやれよ、と思ってしまう単純さだが、非自明性は戦略の実装方法にある。即座に思いつくナイーヴなものはどこかしらで躓くのだ。いくつかは本文でも取り扱う。

 

 シンプルな戦略の奇妙な(ともすれば美しい)実装。これこそが「正解」(の一つ)であった。*6

 

 

0 Bombchus Heap Manipulation

 

 大人リンクが持っているアイテムを今一度確認してみよう。

f:id:wagaizumo:20220219034814j:plain

 このうちヒープ調整で使えそうなのは爆弾(重要:無の取得に必要)・空きビン(重要:虫や魚を詰める)・ブーメラン(Equip Swapで大人でも装備可)・魔力(回転斬りのエフェクト)あたり。

 案外充実している。が、迷いの森でのSRMを一つでも試したことのある方は気付かれるかもしれない。

 ヒープ調整における最重要アイテム「ボムチュウ」が無い。迷いの森SRMの95%はボムチュウを使用する*7。ボムチュウの方が爆弾よりデータ量が大きく何かと便利だし、無の取得はボムチュウでもできる。爆弾よりボムチュウをくれ。

 

 2回目のcurrent cutscene SRMは通常の方法だと*8ボムチュウ3個と魚によって「迷いの森内で」「20秒で」ヒープ調整が終わる。体験版のデータがボムチュウを持っていれば、既存の方法を組み合わせるだけで2020年内にクリア出来たかもしれない。

 

 しかし「リンク」はボムチュウは持っていなかった。

 それでもなんとかメモリアドレス「0x801F8F30」に魚を置くため、Savestate氏は古のSRM聖地ゴロンシティへと向かった。任意コード実行(ACE)が最初に達成され(2019年11月)、しかしコキリの森ACE発見(2020年1月)以降皆に忘れられたかの地に再び光が当たった瞬間である。

 5分という制限時間にも十分収まる新しいセットアップが開発された。

 

 さて、ゴロンシティで魚を置くのは2回目のSRMの下準備なのだが、これは1回目のSRMのセットアップに先駆けて行われている。大丈夫なのか? 準備したデータは消えないのか?

 実際のところ迷いの森へ戻ったときゴロンシティにあるものは全て(特に魚のアクター)はアンロードされてしまう。しかし情報そのものは何かに上書きされるまで使うことができる(コンピューターあるある)。そして魚のアクターを置いたアドレスは1回目のSRMで上書きされない。

 このようなセットアップの圧縮法は5分という時間に対応する人間の智慧だろう。最適化の過程で困難を統合してしまった。

 

 補足1:実のところこのようなセットアップの圧縮は製品版RTAで2つほど先例があった。次を参照。

時オカ日記 2.5 (All Dungeons と 100% のSRMについて) - 古い土地

 1つ目はAll Dungeons。FW on B SRMで使う魚のコードはAge Change SRM時においたものと同一である(Age Change SRM → Grotto SRM → FW on B SRMという流れで魚のコードは生き残った)。

 もう1つは100%。計測開始から45分の時点で「迷いの森Butterfly SRMのためゾーラ川でヒープ調整 → ゼルダの子守歌入手シーンへのgrotto SRM仕込み → Butterfly SRMの実行 → grottoに入ってワープ」というこんがらがったセットアップを行う。

 

 補足2:ヒープ調整に関連してHESS(Hyper-Extended-Superslide:雑にまとめると凄い速さで移動できる上に方向転換も可能なグリッチ)について触れておこう。

 体験版any%のルートではHESSが3回行われている。ハイラル平原を駆け抜ける区間、迷いの森初回入場から岩を爆破するまでの区間、grotto SRM後ミドのいる部屋までの区間。このうち前2つはスピードトリックとしてのHESSだが最後はヒープ調整も兼ねている。

 何故かというと、的当て部屋には敵キャラとしてのスタルキッドが居り攻撃を出されるとヒープ調整が破綻する。そのため高速移動でスタルキッドを即座にアンロードすることが必須なのだ。

 HESSを必須とするSRMのセットアップはどれも敷居が高い。単純にHESSがとても難しいグリッチだから。

 

 

 

 

1回目のSRM:grotto SRM

 

 grotto(隠し穴) SRMについては前回の記事で詳述した。今回使うのは難しい方(グリッチエントランス)ではなく、簡単な方(x座標直参照)である。ただし、その使用法はかなりトリッキーだ。

 

 1回目のgrotto SRMで迷いの森の没データ(unused)エントランスをロードする。グリッチエントランスではなくx座標直参照のようだ。穴に入る前の角度調整が不要な分短縮になる(し、グリッチエントランスを使うと以下の戦略は破綻する。グリッチエントランス状態でCredits WarpするSRMもあるが、7月に検討された後放棄されているのでおそらく体験版の状況では上手くいかなかったのだろう)

 動画で見られるようにこのエントランスがロードする部屋はコキリの森から迷いの森に入った場合と同じだ。的当て部屋から来た扱いになっている。

 

 エントランステーブルを眺めると、没データらしきものはベースエントランス04C6「迷いの森 - ??? コジローの男マップの西側へワープする」しか見当たらない。

 一応ロンロン牧場のデータと隣り合っているが、本当にこれか?

f:id:wagaizumo:20220102132036j:plain

  実際たどり着いたエントランスは04C6で合っている。

 ただしベースエントランスは04C4(ハイラル城大妖精の泉 - 大人昼相当)で、そこから子供昼・子供夜・大人昼で04C6に到達するのだ。

f:id:wagaizumo:20220102145809j:plain

 

 SRMは本来ベースエントランスでないものをベースに設定することまで可能にした

 

また、データ検索の際に取得されるのは子供昼用データの番号だけなので、ロングワープのワープ先計算の際は各エントランスの子供昼用データの番号のみが計算のベースとして使われる。

https://www.zeldaspeedruns.com/oot/wrongwarp/entrance-table?translation=ja

 新しいグリッチが過去の常識を破壊していく。

 

 補足1:「何故」ベースエントランスとしてより自然な04C6を選ばなかったのか、という疑問は当然湧き上がる。

 まず、これは作為的な選択ではない。04C4が現れたのは偶然(pythonのプログラムやlua scriptの導き?)によるところが多く、さしてSavestate氏に意図は無かっただろう。

 「何故」に対しては「自然(ゲーム)がそうなっているから」と答えるのが正しそうだ(いよいよ科学記事じみてきた)。ベース04C6は「grotto SRMにおけるx座標調整が人間に可能で」「早くて」「2回目のSRMとも整合する」という条件の内少なくとも1つは満たさないのである。

 

 

 この方針にはまた利点がある。次のcurrent cutscene SRMも数多のSRMセットアップが知られている聖地「迷いの森」で行えるのだ。

 逆に、2回目のSRMは1回目のそれより仕組みが複雑なので、迷いの森以外の場所でセットアップを完遂できるかは怪しい。後知恵になるが、迷いの森から迷いの森へワープするのはそれなりに理のある選択だった

 

 補足2:そもそも「何故」grotto SRM等を経由しないと行けない迷いの森の没エントランスを使ったのか。これもまた当然の疑問であろう。

 エントランステーブルとシーン設定表を突き合わせると分かるが、9種類ある迷いの森の通常ベースエントランスではどうカットシーンID(0からCまで)を設定してもエンディングに到達することはできない。

 いや、1つだけある。単純計算だと迷いの森(ベース04DE from ハイラル平原)からカットシーン1で「Cutscene - Credits in Goron City 」へ行けるはずだ。

 流石に試していないことがあり得ない組み合わせなので、どこかしらで躓くのだろう。「体験版の状況だと迷いの森・ハイラル平原で完結するヒープ調整なんてとてもできたものでは無い」というのが一番あり得そうだ。今回わざわざゴロンシティへ魚を置きに行っているのは意味深である。

 

 

 

2回目のSRM:current cutscene SRM

 

 current cutscene SRMについては説明すべき箇所・解明したい謎が多く、想像以上に厚くなった。英語でもまとまった資料が存在しないため、補完やレファレンス集も兼ねている。

 

 current cutscene SRM(以下、カットシーSRMと呼ぶ)*9カットシーンIDを調整する。使うのはカットシーン2だ。*10 *11

 

 ここで一度冷静になって、SRMの原理を思い出そう。SRMは無の角度/位置情報をアクターに流し込んで異常な値に書き換える。grotto SRMは正にこの通りだった。

 しかし、カットシーンIDというセーブデータ内に属する情報が、マップに転がっているそこら辺の物体(アクター)の情報をいじって変更できるものだろうか? カットシーSRMはどうやって可能になったのか?

 答えはACEが最終的にファイルネームにたどり着くのと同様に、ジャンプ命令を経由すればよい。今回はゴロンシティで取り出していたあのがそれを担う。魚のアクターが持っている特定の関数に角度情報をぶち込むと、ヒープ調整次第でセーブデータ内にまで干渉できるのだ。

 これはFish Overlay SRMと呼ばれる。魚がヒープメモリ内のアドレス「0x801FXXXX」をセーブデータ内の「0x8011XXXX」に飛ばしてくれるらしい。(雰囲気を出すためアドレスの具体的数値を挙げたが、以下の説明で使うことは無い)

 

 

[参考]

 現在の「All Dungeons - SRM」で使われるようなアイテムデータ/セーブデータの改変は全て魚を起点に行うことができる。

2020/6/4「Lost Woods SRM Compilation (age, magic, inventory, quest status, farore's wind)」by MrCheeze

https://www.youtube.com/watch?v=eldzc3cmQ3s&ab_channel=MrCheeze

 

 「Current Cutscene ID」(現在のカットシーンID)の変更は「Current Age」(現在の年齢)の変更とほぼ同じセットアップで可能である。角度*12を0x9110とするか0x9108とするかの違いのみ。

「FIsh Overlay Save Context SRM Tracker」

https://docs.google.com/spreadsheets/d/17BLPrpJRf7Vf01lYhXPKu1VumFAkxbGxyrww8ux5aZc/edit#gid=376145157

「The Ultimate OoT Spreadsheet」(時オカのメモリアドレスマップ)

https://docs.google.com/spreadsheets/d/1Sl_ay1qPxTrs6xBTpVeqhKFrJjOGYyh3Tg1W0Ch5aHw/edit#gid=694034255

 

 3時間ほど練習すればFish Overlay SRMはできるようになる。実践上の注意等は次の記事にまとめた。

時オカ日記③(迷いの森 SRM編) - 古い土地

(ここまであまり触れてこなかったが、SRMはちょっとヒープ調整をミスったり角度がずれるだけで容易にクラッシュする。クラッシュしたランは記録にならないので視聴者が意識し辛い点。RiJW2021というイベント一発通しで4人とも初回で決めたのは流石の操作精度である)

 

 

 2回目のSRMで起こっていることを説明するために、2つほど準備を挟みたい。

 

 準備1:2020/5/30 「Ocarina of Time - SRM Age Change and Mirror Shield as Child」by MrCheeze

https://www.youtube.com/watch?v=nO-nlfBvMmk&ab_channel=MrCheeze

 Age Change SRM(現在の年齢を変更するSRM)において、current ageに書き込まれる値は無(草)の角度そのものではなく「無(草)の角度の余弦cosine)」らしい。

 書き込みはリンクが元々草のあった部屋へ入り、抱え上げた無(草)が元の位置に戻った瞬間から始まる。草は初期状態で0xC000(270°)の角度を持っており、cos270° = 0 なので部屋へ入った瞬間に「0」がcurrent ageに書き込まれることになる。

 current ageの値は「0(大人)」と「1(子供)」のみが許される*13。今回は「1」から「0」に突然切り替わることでビジュアルが珍妙な大人リンク状態になるが、ミラーシールドを装備できれば(All Dungeon - SRMの文脈では)何も問題はない。

 ちなみにこの状態で再度無をつかむとcurrent ageの値は角度に依存して更新され、ほとんどの場合クラッシュする。

 

 準備2:カットシーSRMにおいて無を再度掴みマップがアンロードされるあたりの挙動は、製品版any% TASのiQue時代(2020年1月上旬)を思い出させる。

https://www.youtube.com/watch?v=YlADOm4G6pM&ab_channel=MrCheeze

 iQueのチャートでは最後カットシーン6をコキリの森で起動しようとする。だがタイトル画面のカットシーンがメモリに残っていて(カットシーンポインタの問題!)リンクは吹っ飛び境界外へ落ちてしまう。そのあと復帰処理で正しく「Cutscene - Credits in Kokiri Forest」が再生される。

 

 

 以上の準備を経てようやく謎めいたカットシーSRMの全貌が明らかになる。

 カットシーSRMにおける書き込みは年齢 SRMと同様に、部屋へ入り無を置いた瞬間に始まる*14。やはり初期状態で書き込まれる数値は「0」だ。しかしこれはカットシーン0を意味しているのではない。current cutscene = 0x00000000 は何も流すべきムービーが無い状態を示しており、カットシーン0に対応するムービーを流す際はcurrent cutscene = 0x0000FFF0 となる。

 この状態で再度無を持ちあげると、やはりcurrent cutsceneの値は角度に依存して更新される*15。だから持ち上げる前に角度調整する必要があった。

 今回は無を持ち上げてから左を向いた瞬間にカットシーン2がトリガーされるのだが、実はここで非常に危険な橋を渡っていた

 カットシーンポインタの設定によって3つの場合に分かれる。

 

 ①フリーズする場合

 次の表からわかるように、迷いの森にはカットシーン0(シーン設定4)までのムービーしか存在しない。

f:id:wagaizumo:20220108180420j:plain

 もしメモリにタイトル画面のムービーが残っていなかったら、ゲームは存在しないカットシーン2のムービーを流そうとしてフリーズしていた

 体験版any%の動画説明文では、「ハイラル平原以後にメニュー画面を開くとカットシーンポインタが更新されてしまうため絶対に開かない」よう注意している。すなわち、SRMのセットアップでポーズバッファが禁止される。結構厳しい制約に思えるが、訓練されたRTA走者はサラッとやってしまう。

 

 ②吹っ飛んで境界外で異空間落下判定を喰らう場合

 今回はこうなるようカットシーンポインタをタイトル画面に調整していた。仕上げのWrong Warpに繋がるルート。

 

 ③何も起こらない場合(カットシーンがトリガーされない場合)

 体験版any%の状況で起こっていたらWrong Warpする方法が無くなり、これはこれで詰む。例えばサリアの家でメニュー画面を開くとこうなる?

 

 補完(高度):以下で説明するように「何も起こらない」場合を利用するグリッチもある。次は100% - SRMの文脈で使われるLACS(Light Arrow Cutscene Skip:光の矢ムービースキップ)。

2020/9/26「LACS SRM Wrong Warp Position and Angle Setup for Current Cutscene SRM + Child Day Glitched Entrance」by Savestate

https://www.youtube.com/watch?v=cbZYLw6UIco&ab_channel=Savestate

 動画はカットシーSRMの最後、無を再度持ち上げるための角度調整から始まる。無を持ちあげた瞬間0xBF724BE5に相当する*16カットシーン5がトリガーされ……ない。この後右に向いて目的のカットシーンAに変更するのだが、やはり何も起こらない。この挙動はおそらくカットシーンポインタの設定に依るのだろう(設定をミスると持ち上げた瞬間フリーズ)。

 角度・位置を調整。グリッチエントランスと太陽の歌で時の神殿にワープし、カットシーンAにより光の矢を入手する最後のムービー「Cutscene - Receiving the Light Arrows」まで飛ぶ。およそ3分のムービーカット。

 

 

 

3つのワープ:Wrong Warp - Void Warp - Credits Warp

 

 必要なピースは全て揃った。最後を締めくくるのはWrong Warpだ。

 void outした迷いの森。遥か彼方へ吹っ飛んだリンクが異空間落下判定に触れ復帰するとき、復帰先のエントランスはベースエントランスとカットシーンIDの和で計算される。「1回目のSRM:grotto SRM」に掲載した画像を見ても判る通り、これは04C4 + 4 + 2 = 04CA(ロンロン牧場 - ルピーを支払い乗馬を始める)となる。

 

 更にロンロン牧場においてカットシーン2(シーン設定6)が流すべきムービーを探すと

f:id:wagaizumo:20220102140936j:plain

 「Credits 1 - Art Work Unit」となる。実際動画ではArt Work Unitからエンディング流れ始めている。

 たどり着いたエントランス04CAは本来このムービーを流すエントランス015Dとかけ離れているが、何も問題はない。

 

 

 さて、実はここで最後の危ない橋を渡っていた。Wrong Warpに伴ったVoid Warp(ヴォイドワープ)、ムービーと復帰処理の問題である。

https://www.zeldaspeedruns.com/oot/wrongwarp/void-warp?translation=ja

 

 前回の「速成:Wrong Warp - 計算例③」でフロルWrong Warpを扱った際には述べなかったが、フロルWWにおけるワープ先配置はエントランス初期位置ではなく、フロルに保存した部屋番号・座標まで加味して行われる。

 体験版any%ラストの復帰処理は「エリア退出タイプ1=通常の異空間落下」であり、フロルWWと同様に「落下前に保存していた」部屋番号・xyz座標を考慮してリンクを配置する。ここでもしロンロン牧場の境界外にワープしていたら……おそらく次のようになっていた。

 

 例*17:ゴロンシティ(ベース014D)とその境界外座標をフロルへ保存した後、カットシーン1のフロルWrong Warpで「Cutscene - Credits in Goron City」に飛んだ場合。

 

 エンディングでソフトロックする

 

 

 これには「カットシーンIDも元のまま復帰させる」というエリア退出タイプ1の性質が関係している。

 体験版any%の場合、この仕様のおかげで「カットシーン2をトリガーしコキリの森でvoid out」→「異空間落下・復帰処理」→「カットシーン2が消されずエントランス等計算し直してエンディング」という戦略が成立している。しかし仮にロンロン牧場の境界外が保存座標だったとすると

①保存していたベースエントランス・カットシーンIDの情報から計算してエンディング開始

②同時に境界外を初期座標としたリンクが放り出される

③そのうち異空間落下判定が入って復帰処理、エンディングは中断する

→①→②→③→①→②→③→......

 という無限ループに陥る。ムービー途中なのでポーズを挟むこともできない。

 speedrun.comのレギュレーションにおいて、「The End」にたどり着くことのないエンディングムービーの繰り返し再生はクリアと扱われない。終わりが無いのは終わりではない。*18

 

 

 フロルWWの場合そもそも保存する座標を調整する等で回避の余地があるが、体験版any%でのそれは固定化されている。没エントランス04C6に入った際の初期座標(292, 0, 0)である。

 

 ちゃんとロンロン牧場に着地できて本当に良かった。

 たとえ最後に表示されるのが「The End」ではなく「制限時間になりました。/体験版を終了して/大乱闘スマッシュブラザーズXに戻ります。」だとしても、クリアはクリアである。

 

 

 ちなみにVoid Warpの影響で、エンディング冒頭の輪状の火が映っている場面左上あたりに、リンクとナヴィがこっそり映っている。子供リンクお祭り参加チャート。

f:id:wagaizumo:20220219154612j:plain



 

 補足:ここまで危険を煽る書き方をしてきたが、杞憂に思えてきた。グリッチエントランスとカットシーSRMを組み合わせた場合は無限ループ詰みもありえるかもしれない。カットシーンポインタ周りも常に危険だ。しかし、落下・復帰処理周りだけでソフトロックまで行くのは相当狙わないといけない気がする。

 次はWWでムービーに入りムービー終わりと復帰処理を重ねることで更にWWする「Linked Cutscene Wrong Warp」というグリッチ*19、その時オカ3Dにおける進展。最後はソフトロックする。

2020/1/9「OoT3D Linked Cutscene Wrong Warp (CS #2 WW in Kokiri Forest)」 by Hylian Freddy

https://www.youtube.com/watch?v=465GNBQL_tU&ab_channel=HylianFreddy

 

 「Wrong Warp勉強ノート」としてはVoid Warpやその面白ケース、エンディングにリンクが見える理由を含めたかった部分もあるので、どうかご容赦頂きたい。

 

 

 以上により、SRMとWrong Warpを組み合わせることで5分体験版でもCredits Warpが達成された。

 

 

 

 

解答編(まとめ)

 

 いささか冗長な説明であったが、前回「主題:「リンク」はいかにして5分で世界を救ったか?」で提起した3つの問には全て答えたと思う。

 

Q:1回目のSRMでわざわざ迷いの森から迷いの森に移動したのは何故?

A:迷いの森の没データエントランスを使うため。また、2回目のカットシーSRMを迷いの森で行うため。

 

Q:2回目のSRMで一旦無を置き、角度調整してから再び無を持つとマップがアンロードされる。全体的に何? 何故? 

A:マップのアンロードはこの瞬間に初めてカットシーン2が起動するから。本来はクラッシュするが、タイトル画面のムービーがカットシーンポインタに残っているおかげでその残滓が再生され迷いの森の境界外に飛ぶ。

 

Q:この状態でしばらくするとロンロン牧場のエンディングに辿り着くのは何故?

A:待ち時間はぶっ飛ばされたリンクが異空間落下判定に触れるまでの時間。次に復帰処理においてWrong Warpが行われる。ここまで準備してきたベースエントランス・カットシーンIDはエンディングへと勇者を導く。

 

 

 

 

結語:グリッチの科学

 

 こうして見ると体験版の5分という時間設定は絶妙である。世界記録ペースから1分20秒余るから訓練された走者が集えばレースも出来るし、ガノンを倒すことも出来なくはない。丁度良いバランス。任R想。

 

 Wrong Warpは最終的にはただの足し算なのだが、何が何に依存するか/しないかの関係、および何ができるか/できないかの制約が複雑で、把握するのに時間がかかった。更にSRM以後はいくつかの制約が無効化されたりされなかったりして大変である。

 この複雑性に戸惑い、表と睨めっこしながらWrong Warpを考えたのは良い経験になった。

 

 本当は「セットアップの非自明性」に押し込めた部分にも興味がある(つまりメモリの挙動を具体的に見たい)のだが、時間・能力・労力を鑑みてとりあえず今はこれで良しとする。書くとすればまた別稿になるだろう。

 

 筆者にとってSSBB Demo any%のルートは、特殊な状況に最適化しギリギリのラインを攻め続けた非常に美しいルートだ。

 5分体験版クリアというミームへ真剣に取り込み、探究の過程で「遊び」と「可能性」を見出していったグリッチハンター・スピードランナーたち。

 拙い紹介記事であったが、彼らの技術的背景と読者(視聴者)の方々を引き合わせることが僅かでも出来たなら、これ以上のことはない。

 

 

 おまけ。

 マロンWrong Warpの可能性。体験版クリアに当たって一瞬話題に上がったもの。

 

2021/7/7「Malon wrong warp to Zelda's Courtyard with RC Epona」

https://www.youtube.com/watch?v=O3FrxLrIjJA&ab_channel=bliniplz

 

 前準備の絵面が面白い(Remote Control Epona)。マロンがセットするのはカットシーン0である。

 

 

 

 

 

付録:All Dungeons - SRM / どこでもドアについて

 

2021/9/10「OoT All Dungeons Speedrun in 35:28 (WR)」 by RTA64

https://www.youtube.com/watch?v=CtqS9gcBfX4&ab_channel=RTA64

 

 「SRM以後のWrong Warp勉強ノート」へのサプリメントとして、「All Dungeons - SRM」の異常ルートを検討してみたい。

 筆者は当初フロルWrong Warpを多用しているのだと勘違いしていた。実際8つあるボス戦後の青い光の内8つでフロルを使っている。

 しかし、結論から言うと、現世界記録では最後のヴァルヴァジア戦以外Wrong Warpを使っていない

 

[参考]

 とりあえずZFG氏によるコメンタリー(grotto SRM以前)・英語のチャート(grotto SRM以後)・AGDQ2021で披露された際(grotto SRM以後)のすば氏による日本語コメンタリーがあるので、興味のある方はここら辺をとっかかりにすると良いかもしれない。

 基本的にZFG氏の動画(2020年6月)で全て説明されている。ルートもまだマシだ。grotto SRM以後は更に情報が盛られて、理解を拒む見た目をしている。

Ocarina of Time All Dungeons Speedrun in 37:18 [Commentated] - YouTube

All Dungeons SRM Route - Google スプレッドシート

https://www.twitch.tv/videos/868404524

 

 ワープ技以外にもSRMで「デバッグファイル読み込み」「手に入れてしまった闇・魂のメダルを消す」「一瞬大人になってミラーシールド装備」「Bフロル」など好き勝手やっているが、ここでは扱わない。一言だけ述べると一番最初はファイルネーム「ラ97ぉ」のおかげ、その他は魚のおかげである。

 

 

 以下ではgrotto SRMグリッチエントランスについて繰り返し言及する。詳細は前回の記事を参照。

https://wagaizumo.hatenablog.com/entry/2022/01/04/233710#grotto-SRM

 

 

 このルートを生み出す原動力となった「どこでもドア(FW Entrance Index SRM」(2020年5月頃発見)とはどういうグリッチなのだろうか?*20

Ocarina of Time: Using SRM to Modify Farore's Wind Entrance Index (Essentially Warping Anywhere) : speedrun

 

 まず、何らかの方法でグリッチエントランスをフロルに保存する。5月時点で見つかったのがこれを可能にするSRMである(フロルを一回デクの樹等で保存してからSRMで情報改変)。9月にgrotto SRMが見つかって以降は隠し穴からグリッチエントランスに入ってフロルを保存すればよくなった、こっちの方が早い。

 以降「どこでも」角度を調整すれば「どこへでも」飛ぶことができる。グリッチエントランスを使ったgrotto SRMの永続版と思えばよい。

 ただし、フロルの風にエントランスを保存する前にエリア移動(エントランス更新)してはいけない。グリッチエントランスの情報が消えてしまうからだ。

 

 補足:発見当初は子供リンクでしかできない技だったのだが、grotto SRMの登場によって「大人でもグリッチエントランスを用意できる」=「大人でもどこでもドアが使える」ようになった。これに伴い100% - SRMのルートが(特に後半大人パートを中心に)変更され、20分以上短縮される。

 なおAll Dungeonsでは問題にならないが、実は子供昼・子供夜・大人昼・大人夜によって適用すべきグリッチエントランスの値は変わってくる。このため100%ではたびたび太陽の歌を吹いてからワープを行う。

 

 

 どこでもドアは何もかも間違ったワープ技であり、RTAルートではどことなくフロルWrong Warpと見た目が似るのだが、しかし上記のように原理は全く異なる。どこでもドアはWrong Warpではない

 実を言うと原理が異なるだけでなく、どこでもドアはWrong Warpと相性が悪いとすら言える。

 

 カットシーンIDが設定されない青い光(魂・森・水・闇)については、角度調整しながらどこでもドアを使うとその角度と対応した場所に飛ぶ。当然予想される結果だ。

 しかし、カットシーンIDが設定される青い光(デクの樹・ドドンゴ・ジャブジャブ・炎の神殿)でどこでもドアを使うと、なぜか角度に関わらずデクの樹へ飛んでしまう。 ??? 

 しかも飛んだ先のデクの樹では既にフロルが登録されている(これはフロルWrong Warpでも起こるカットシーン絡みの動作)

 

 シーンテーブルの0番目を参照してこうなってしまうらしい。カットシーンIDとグリッチエントランスが喧嘩して共倒れしている。(とはいえデクの樹でどこでもドアを使えばすぐ次のボス部屋に行ける。どこでもドアを採用しない手は無い。)

https://wiki.cloudmodding.com/oot/Scene_Table/NTSC_1.2

 

 追記:100% - SRMのコメンタリー(2:33:06)によると、カットシーンIDが設定される青い光において、フリーズするか否かは角度に依存するらしい。行先はデクの樹で固定なのに。 ???

https://www.youtube.com/watch?v=R8EE9FXeJnE&ab_channel=ZFG

 

 

 このままだとAll Dungeons - No SRMで使われるような炎の神殿からのCredits Warp(Wrong Warp)が使えず、少し面倒だ。

 2020年6月時点のルートでは、最後から2番目のボス(闇の神殿ボンゴボンゴ)戦後、どこでもドアでゲルドの砦へ向かう。そこでエリア移動し特定のエントランス(02AA or 02DE)をフロルに登録することでグリッチエントランスを切る。逆に、それまではフロルにグリッチエントランスを保持し続けている。落下時の復帰処理やフォールマスターはエリア移動ではない(だが角度に依存してワープはできる)。

 ボレロで普通に炎の神殿へ向かって攻略。通常のフロルWrong Warpをするとロンロン牧場のエンディングに。シーン設定7の「Credits 2 - Support Unit」はお馴染み。

 

 その後これより10秒近く速い方法が見つかった(AGDQ2021で披露されたのはこちら)。

2020/10/3「Full Ending Segment for All Dungeons SRM (post-Volvagia) with FW」by Savestate

https://www.youtube.com/watch?v=W1Vzexf8g2s&ab_channel=Savestate

 闇の神殿から炎の神殿へはどこでもドアで向かう。ボス戦後、グリッチエントランスをフロルに保持したまま迷いの森へ向かう。カットシーSRMを行いフロルの風を使うと、何やかんやでコキリの森のエンディングに飛ぶ。 ??? 

 グリッチエントランスとフロルWrong Warpは相性が悪いが、しかしカットシーSRMならまだ足し算の原理(Wrong Warp)を利用できるらしい。

 これはまた「2回目のSRM:current cutscene SRM」で述べた「③何も起こらない場合」の例になっている。カットシーンポインタを適切に設定しないと「①フリーズする場合」になるので注意。

 無を置いた1フレーム後にフロル・太陽の歌を起動するのは、それ以後だとcurrent cutsceneが「0x00000000(ムービーを流さない状態)」に戻ってしまうため。

 

 

 現世界記録では炎の神殿Wrong Warpストラトを戻している。カットシーSRMルートはセットアップの難しさの割に短縮幅が小さい(1回ミスるともうペイしない)のが原因だろうか。

 

 

 

 

 

 

 

*1:筆者の勉強ノートを兼ねているので細かいところまで(アセンブリ言語の手前までは全て説明するつもりで)書いたが、読み物として面白くなるよう適宜修正したい

*2:もっと前にキングドドンゴを倒す動画が日本語であったと思うがロストした

*3:動画説明文ではより詳しくメモリ上の数値FFF3で表している

*4:体験版クリアというカテゴリのミーム性を考えるとコントローラーの物理的固定化(輪ゴム)を使っても許される気はしないでもない。speedrun.comのレギュレーション的にはダメです

*5:以下はSavestate氏に直接情報提供いただいた部分を含む。感謝申し上げます。

*6:5分体験版any% については今後の調査・技術開発・アイディア次第で大きくルートが変わる可能性を否定しない。まだまだ開拓の余地はある気がする。

*7:迷いの森SRMを辞書的に紹介した次の記事においてボムチュウを使わないのはgrotto SRM(adult)ぐらいしか無かった。

時オカ日記③(迷いの森 SRM編) - 古い土地

*8:これは子供リンク時のセットアップであり今回は大人リンクなので単純比較はできないが。具体的なセットアップは次を参照

https://wagaizumo.hatenablog.com/entry/2022/02/19/033816#Age-Change-SRM

*9:この呼称には注意が必要。というのも、(今回は使わないが)「next cutscene」を変更するSRMもあるからだ。例えばiQueのany%は「current cutscene」を、N64Wii VCのany%は「next cutscene」を変更している。文脈と挙動によって大体区別はつく。

*10:単純に計算すると、このベースエントランスならカットシーンID2~7のどれでもエンディングに到達する。一番調整が容易なのはCS 2だった。

*11:豆知識:SRM以前のWrong Warpでこの数値をセットするものは存在しなかった。一応ガノンが封印されながら「おのれ・・・」と言っている場面はカットシーン2がトリガーされるが、これを使うのは本末転倒である。

*12:これまで数値を出してこなかったが、時オカにおいて角度の情報は16bitで管理されている。例えば0x8000は180°に相当する。

*13:例外も存在する。All Dungeons - SRMで使われるBフロル用のSRMではcurrent ageに0xBF800000という意味不明な値(floatなら-1)を書き込み、ゲーム側を惑わせて子供リンクのままボトルアドベンチャーを起こす

*14:ただし年齢SRMだと無を勝手に手放すのだが、カットシーSRMでは手動でシールドドロップする必要がある

*15:筆者が計算して確認したところ、おそらく角度の余弦になる。ただし一番下の位が一番大事で一番計算の実装に依存する部分だから、メモリ上の数値を観ながらやった方が良い

*16:メモリ上の数値に対して16進法で一番下の位のみが実際に使われる。一応0より大きく0x0000FFF0より小さい値だとフリーズするのだが、範囲が狭すぎて(floatで10^-40)このカットシーSRMの途中で遭遇することはありえない。

*17:筆者のナイーヴな問に応じて態々動画まで撮って頂いたぱる氏へ感謝申し上げます。

時オカ3Dの例だが、落下に関する基本的な実装は原作のそれと変わらないはず。

*18:「If wrong warping into the credits, timing ends on the first frame of the fade-in of any cutscene which normally takes place after the Ganon final slash, and which will eventually reach The End screen.」

拙訳「エンディングへロングワープする場合、計測終了はガノン討伐後流れるムービー(そして最後にThe Endを表示するもの)のいずれかがが流れ始めた瞬間とする」

*19:この技の存在はぱる氏に紹介いただいた

*20:「どこでもドア」という呼称はすば氏のコメンタリーから引用した。