古い土地

暗い穴

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

 

 

 

序文

 

www.youtube.com

 RTA in Japan Winter 2021 お疲れさまでした。

 

 本稿は、このレースの前半で行われた体験版クリアまでのタイムを競うカテゴリ「SSBB Demo - any%」*1について、SRMとWrong Warpを中心に技術的側面をまとめたものである。元々次の記事で扱っていたのだが、説明が長くなってしまったので別稿として独立させた。

wagaizumo.hatenablog.com

 

 このような経緯で出発したのだが、現在では膨らみに膨らんで33000文字ほどになっている。流石に長いので記事も2つに分割した。

 グリッチの技術的(科学的)解説記事として多少なりとも読者の興味を惹くことを願う。

 

 

 RiJW2021のレース後半で行われたガノン討伐までのタイムを競う「SSBB Demo - Defeat Ganon」は、見ての通り「any%」よりも時間がカツカツになる(正直4人中1人でも最初の試行で成功させる人が現れるとは思わなかった)。しかし技術的には、いつものHESSの後にいつもの grotto SRM*2を行い、ガノン城に飛んだらSSでマスターソードを複製しつつガノンを倒すだけである。

 酷い言い草だが、戦略は案外シンプルで使われるバグも大体見慣れているのは確かだ(grotto SRMの仕組み自体はかなり非自明なものの、そのワープ効果はすぐ見てとれる)。観る側からすればグリッチそのものより走者の腕の方に興味が湧く。

 なお現在の世界記録は4:47(2021/11/28, by Cma)。ガノンまわりのムービーが長すぎて短縮する余地がもう無い。

Ocarina of Time Category Extensions - speedrun.com

 

 これに比べて「any%」における2回のSRMは、その見た目の地味さ(?)・荒唐無稽さゆえにスル―してしまいがちだが、一度考え始めると途端に謎を増す曲者だ。筆者はその原理を理解しようとしてだいぶ迷走した(今思うにWrong Warp/Credits Warpの原理をちゃんと履修していなかったのが問題を更にこじらせていた)。

 実際のところ「any%」の戦略はクールで背景技術も興味深い。こういったチャートの面白さはテキスト媒体で解説するのにうってつけである。

 現在の世界記録は3:40(2021/12/11, by Tsundere_rar)と、実は5分も要らず4分弱でクリアできてしまう。一体何がこれを可能にしたのだろうか?

 

 

 ここで「SRMってなんでもできるらしいし、5分クリアも余裕でしょ?」と思われた読者の方がおられるかもしれない。

 そうではなかった。この体験版をクリアするため、数カ月の調査・閃き・非自明な戦略・セットアップ開発が必要だった。

 

 SRMは強力だが、相応の準備も必要である。それは「ラ97ぉ」等の呪術めいたファイルネームであり、ロードゾーン跨ぎや角度調整などRTA走者でさえ時間のかかる精緻なセットアップ、通称「儀式」である。

 諸事情によりファイルネームを使うことができなかった(「リンク」が世界を救うしかなかった)というのが戦略立案の上でまず大きな制約になってくる。

 

 あるいは10分貰えれば永続RAMエディタを作るなり任意コード実行(ACE)紛いのことなり「なんでも」出来ただろう*3。しかし5分という制限の中では、SRMの「重さ」ゆえに「なんでもできる」ところまで持っていくのは到底不可能だ。

 

 限られた名前と時間とアイテムの中、どこに狙いを定めてSRMの強力さを活かすか。どう戦略を立てどう実装するか。ここが面白いポイントになってくる。

 

 

 

 

 

[注意]

 本シリーズの山場はPart 2に含まれる「解決:Wrong WarpSRM(2)」である。ここにおいて5分体験版any%が紐解かれ、一部の専門家にのみ知られていたことが紹介される。

 それ以前は準備編であり既存知識の要約・例示であり「(筆者が)雰囲気で知っているつもりだったが実は知らなかったこと」を明らかにしていく作業である。

 とにかく長丁場になるので各人の興味・知識量に合わせて適宜スキップされたい。Part 1はまるまる準備編になってしまったからPart 2から読み始め必要に応じて戻って来る方がよいかもしれない。

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

 

 

 勉強途中のため記述に誤りを含む可能性あり。もし間違いがあればドシドシ指摘いただけると大変助かります。

 

 

[記数法]

 文献によって同じ値が異なる進法で表記されていることもあるので注意。本稿ではエントランスデータを表す4桁の数値(例:0157)と0xで始まる値は16進法であり、それ以外は全ての10進法で表す。

 (コンピューター科学では常にそうだが)計算の際 0-indexed か 1-indexed かに気を付けよう。

 

 

[追記(2022/2/9):動画ベースの解説]

2021/9/11「How Speedrunners Beat the Brawl Ocarina of Time Demo」by LunaticJ

www.youtube.com

 前後の流れを含む概説としてバランスが良い。

 

 日本語では次の動画もある。

2021/9/4 「【RTAスマブラX時のオカリナ体験版をクリアしてみた【ゆっくり解説】」by ミクロン

www.youtube.com

 

 この記事はだいぶ技術方面に重心を置いている。筆者がガチガチかつ丁寧な技術解説が好きなので自給自足した形。

 

 

 

 

復習:SRM

 

 SRM(Stale Reference Manipulation)は2019年10月以降時オカ(とムジュラ)を決定的にぶっ壊し、ついには任意コード実行(Arbitrary Code Execution:ACE)まで可能にしたグリッチだ。

 RTA解説動画やイベントで何度も披露されているためご存知の方も多いかもしれない。後々SRMの基本原理に立ち返ることがあるかちゃんと説明しておこう。

 

 筆者が過去に書いた文章を引用する。

 

 「Stale(古くなった) Reference(参照) Manipulation(操作)」とはどういうことか、 時オカany%のように岩で無を取得する場合で例示してみよう。

 

①ロードゾーン跨ぎ/回転切り等の「儀式」=セットアップでこれから持つ岩の角度情報をヒープ内の良いアドレスAに誘導する 

②岩を持つ 

③何らかの手段(時オカany%の視点固定するやつ、スライドによるロードゾーン跨ぎ等)で岩のアクターを解放(無を取得)し、参照だけ保持する 

④以降新たなロードゾーンを踏むごとに解放されたアドレスAに新たなアクター/メモリ情報Bが入る 

⑤無を特定角度に置くことで、無が参照しているアドレスAに位置する情報Bへ異常な値を流し込む 

 

 岩SRMの要点は「持っている岩」が「無」に変わることでメモリ情報が「解放され」、しかし「参照は保持したまま」「新たなアクターがロードされる」ことにある。これで「新たなアクター」に「異常な値」を流し込むことができるのだ。この過程はどのSRMにも共通する。

 またSRMを実用的な効果に結び付けるために、上の「アドレスA」「メモリ情報B」以外の部分も調整が必要である場合が多い。例えば宝箱の中身を変えるのはSRMだけでもできるが、ファイルネームを命令として実行する(任意コード実行:ACE)にはいくつかジャンプ命令を乗り継ぐ必要がある。

 

[SRMの概要] 【時のオカリナ・ムジュラの仮面】SRM/ACE 以降の ゼルダ RTA 史 part 1/2:(2019年10月)~2020年2月 - 古い土地

 

[参考]

時オカ any% 現世界記録 6:49.150(2021/10/12 by PaintSkate8)

https://www.youtube.com/watch?v=3-DPprG7Iog&ab_channel=PaintSkate8

 

SRM/ACEをメモリ内部まで踏み込んで解説した文章として次がある。

【翻訳記事】時のオカリナにおける任意コード実行について - しままのものづくり

 

驚異のSRM 95連発。重要なものはこのプレイリストの中に一通り揃っている。

Stale Reference Manipulation (SRM) Research - YouTube

 

SRM/ACEの歴史をテキストベースでまとめた資料としては次がある。

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

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

 

 

 

grotto SRM

 

 隠し穴から世界のどこへでも

 

2020/10/3「Grotto SRM - Ganon's Tower Collapse Exit (outdated)」 by Savestate

www.youtube.com

 

 

 SRMの例として2020年9月頃に実装されたgrotto SRMの仕組みに触れておこう。

 これ以前にも便利なワープ技がSRMによって開発されていたが、フロルの風と子供リンクが必要だった(Part 2「付録:All Dungeons - SRM / どこでもドアについて」参照)。grotto SRMは大人リンクでも使えるワープ技であり、体験版クリア(any%とDefeat Ganonの両方)にも本質的に関わってくる

 

 「エントランス(entrance)」というデータの詳細は「速成:Wrong Warp」で説明するが、とりあえずエリア移動時にリンクの初期位置などを決めていることが判っていればよい。

 隠し穴(grotto)の行先として決められたエントランス番号(entrance index)を何とかしていじってワープしよう、というのがgrotto SRMの方針。SRMの応用としては素直な方だ。

 ただし「グリッチエントランス」という奇妙なヴァリアントがある。「All Dungeons - SRM」や「100% - SRM」で多用される超重要テクニックだが、発展的な内容かつ体験版any%には結局採用されなかったので読み飛ばしても良い。

 

 

 草を起点にしよう。逆滑走(superslide)で草を無に変えつつ、そのx座標をヒープ調整により特定のアドレスに誘導する。うまく調整すれば最終的に隠し穴の行き先の情報(エントランス番号 )と一致。

 つまり、隠し穴のエントランス番号が無のx座標によって毎フレーム更新される状態だ*4。無を置けば書き換えた値は固定される。

 無の位置調整*5はfloat-perfect(いわゆるpixel-perfectよりも細かいsubpixel-perfectよりも2^16倍細かい!)を要求するが、一方で当たりの座標も数多く(上位2byte = 2^16通り)存在する。時オカの操作感はこういった微調整に大変都合が良く、この中でRTA走者なら出来そうなfloat-perfectを探すことも不可能ではない。*6

 

 ここから二つの場合に分かれる。

 

 ①そのまま目的の通常エントランスと一致させる場合(x座標直参照)。穴に落ちれば特に問題なくワープできる。

 デメリットとして目的地ごとに精緻なx座標のセットアップを開発する必要があり、場合によっては次の方が楽かもしれない。

 

 ②グリッチエントランス(glitched entrance)と呼ばれる本来ありえない大きさの値に設定する場合。エントランスは通常 0000から0613 までなのだが、7BFA などを代入してみよう。

 ここで隠し穴に落ちると、ゲームはグリッチエントランスの番号に対応したエントランスを探す。だが値の大きさゆえエントランステーブルを遥かに飛び越して、例えば(穴に落ちた際の)カメラ角度を参照するのだ。*7 

 これで特定のx座標に無を置いた後は、角度に依存して様々な場所へ行くことができる*8。時オカにおいて角度は調整しやすい値だから、こちらの方が汎用性は高そうだ。

 逆に隠し穴へ落ちる前に露骨な角度調整を行っていれば、グリッチエントランスを使っているのだと推測できる。

 

 補足1:細かいが重要な点として、グリッチエントランスはメモリ内のアドレス配置に強く依存する。そのためバージョン・言語によってセットアップは異なる。GC版はgrotto SRM自体できるもののグリッチエントランスに派生するのは不可能だと考えられている(角度情報がエントランステーブルから遠すぎる)。

OoT Master Quest - Grotto SRM heap manip (adult) - YouTube

 

 補足2:grotto SRMは現状迷いの森でのみセットアップが開発されている(grotto SRMは仕組みが比較的単純なので隠し穴がある他の場所でも出来ないことはないだろう。RTAに組み込めるかは別として)。

 迷いの森はロードゾーンの多さ等がヒープ調整に大変有用で、多くのSRM(強力なものからネタ技まで)がここで編み出されてきた。ゲーム開始地点のコキリの森とも近く、RTAでの利便性も抜群。時オカにおけるSRMの聖地の一つ。

 

 補足3(高度):「グリッチエントランス」と言えば角度参照のものを指すことが多いが、それ以外も当然ある。「sound effects glitched entrance」など。角度参照の場合と違って1回使い切りの運用になるが、特定の場所に行きたい場合①のx座標直参照よりセットアップが簡単なこともあるかもしれない。

 この節冒頭で挙げた動画「Grotto SRM - Ganon's Tower Collapse Exit (outdated)」では、崩壊後ガノン城へ行くのにエントランス15C8という通常エントランスでも角度参照でもない値を用いている。

 

 

 

[参考]

2020/9/23「Ocarina of Time - Grotto SRM」by MrCheeze

https://www.youtube.com/watch?v=JOOcm-NMlIc&ab_channel=MrCheeze

2020/10/16「Ocarina of Time - Fast heap manip for Grotto SRM as adult (NTSC 1.2)」 by MrCheeze

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

「Finding Grotto SRM Positions using Angle Drop Finder LUA script」(x座標直参照)

https://docs.google.com/document/d/1y9O2L67g_0D7qOVUqkgqx4VUI0lS9PD0hgxxiduWipY/edit

「Angle Warp Setup」(グリッチエントランス時の角度とワープ先の対応表)

https://docs.google.com/spreadsheets/d/19E9rxfi3XcqxfDdMf9ahLTlYgy4R_VVnzI4qZDzhRvg/edit#gid=125184608

自分でもやってみたい、と思う方は次の記事を参考にしてほしい。大人でのgrotto SRMはそう難しくない。

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

 

 この節を終える前に(繰り返しになるが)教訓を引き出しておこう。SRMは非常に強力なグリッチで色んな応用が知られているが、「いつでもどこでも」発動できる魔法ではない*9

 grotto SRMSRM開発初期(2019年10月~)に実用化されていてもおかしくないグリッチに見える。実際発想はあったのだろう。しかし結局のところ、現在のシンプルな形にまとまるまで約1年を要した。本稿では殆ど触れないが、強いSRMは調査・実装パートも相応に重いのだ。

 「無を取得」するだけならいろんな場所で出来るし、歴史的にも古く(2007年)から報告例がある。12年もの間「無を取得」が単なるネタ技に甘んじていた事実は、裏返せばSRMを有用な効果に結び付けるために必要なヒープ調整・準備がいかに非自明かつ困難だったかを示している。

 更に、RTAへ導入する際は人間に可能なセットアップに落とし込めるかという問題も出てくる。*10

 

 

 

 

 

主題:「リンク」はいかにして5分で世界を救ったか?

 

2021/8/22「Beating the JP Brawl OoT Demo - Route Idea」 by Savestate

www.youtube.com

 

 今回世界を救うのはこの男 「リンク」

 

 「スマブラX名作トライアル」に収録された5分体験版は、名前を入力できる新規データから始めるとオープニング3分のせいで何もできない。既存のセーブデータ(子供と大人の2つがある)を使うと、名前「リンク」をいじる余地が無い。つまりファイルネーム参照を利用できず、SRMの応用もかなり制限されてくる。製品版any%の戦略はファイルネームに大きく依拠していることを思い出すと、かなり辛い状況だ。

 ともかく「リンク」の方がまだ勝ち筋があるからこちらの方向で調査が進んだ。

 

 動画を見ていると次のような疑問が浮かぶ。本稿の核となる問であり、これらの「何故?」に答えるため筆者は30000文字も費やしたのだ。

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

 

 早速これらについて考える……ことはできない。5分体験版のルートへ本格的に取り組むにはSRM以外にもう1つ大きなグリッチの知識が必要となる。

 そのグリッチWrong Warpは、エンディング直行(Credits Warpの基礎、いや殆どそれ自体である。

 

 

 

速成:Wrong Warp

 

 筆者の勉強ノートも兼ねて丁寧に書いた。Wrong Warpが「カットシーンIDが設定された青い光においてベースエントランスを書き換えることで生じる」「要は足し算である」ことをご存知の方は飛ばしてよい。

 

 Wrong Warp(WW:ロングワープ)は2012年に見つかったワープ技で、当時のany%を50分から20分に縮めた。ここではSRM以前のRTAルートから例を挙げてみよう。

 

例①:旧any%(現在の「Defeat Ganon - No SRM」)で使われたデクの樹ゴーマ戦後の青い光からガノン城へ飛ぶ「ガノンドア」。

参考:Defeat Ganon - No SRM 現世界記録 16:34(2021/11/16, by Lozoots)

https://www.youtube.com/watch?v=scHUKLgwjOI&ab_channel=Lozoots

 

例②:旧All Dungeons(現在の「All Dungeons - No SRM」)で使われた炎の神殿ヴァルヴァジア戦後の青い光からエンディングのロンロン牧場へ飛ぶCredits Warp

参考:All Dungeons - No SRM 現世界記録 1:16:56(2019/7/19, by Zudu)

https://www.youtube.com/watch?v=TLNs0KhOmfQ&ab_channel=Zudu

 

 

 Wrong Warpは何とかして不正なエントランスをロードする技術である。「エントランスとは何か」というところから話を始めよう。

 

 

 ゲーム内においてマップをロードしたときのリンクの初期位置は、(10進数で)1556個ある「エントランス(entrance)」によって決まっている。例:オープニング後/セーブリセット後の子供リンクの初期位置は番号00BBのエントランスを参照している。

参考:エントランステーブル。日本語(ベースエントランスのみ)と英語(全エントランス)。以下では後者をメインに使う。スクショの出典も全てここから。

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

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

 

 エントランスを更にその構成要素に分解すると、どこからどこへ来たかの物理的情報≒「ベースエントランス(Base Entranve)」と昼夜・時代の情報≒「シーン設定(Scene Setups)」に分かれる。

 例:ゴロンシティ(デスマウンテン登山道から)の場合、ベースエントランスは014Fで、そこからシーン設定0-3(0-indexed)に従って子供昼・子供夜・大人昼・大人夜とエントランスが並んでいる。

 この昼夜・時代の4つの組み合わせはデータ上区別されているが、中身は同じことが殆どだ。

f:id:wagaizumo:20220102080416j:plain

 さて、上の画像を見ると明らかにロンロン牧場(ハイラル平原から)のエントランスの数がおかしい。ベースエントランスは0157のみでシーン設定が14種類もある。

 これは子供昼・子供夜・大人昼・大人夜の通常データのあとにムービーを流すためのカットシーンID(CS ID:この場合0から9まで)に対応した特別なエントランスが並んでいるのだ。

 計算例:エリア移動に伴ってベースエントランス0157とカットシーン3がセットされた場合、0157 + 4(通常分)+ 3 (カットシーンID)= 0157 + 7(シーン設定)= 015D のエントランスにたどり着く。

 

 エントランスはベースエントランスと(設定された場合)カットシーンIDの2つの和で決まる、というのが重要だ。

 ボス戦後の青い光のうち、半分(デクの樹・ドドンゴの洞窟・ジャブジャブ・炎の神殿)は帰還にあたってカットシーンIDをセットする。

 Wrong Warpとは、リンクが青い光の判定に入ったあと何らかの方法で次に読み込むベースエントランスの値を書き換え、カットシーンIDとの和で更に異なる(ベース)エントランスに侵入するグリッチである

 

 補足1:カットシーンIDを設定しない青い光についてはWrong Warp的操作をしても「ワープ」はしない。単に書き換えたベースエントランスへ飛ぶ。メダル取得のムービースキップには役立つ。

 補足2:ジャブジャブ様バリネード戦後のWrong Warpはルト姫との会話後にカットシーン0が設定されるため、セットアップがかなり煩雑になる。

 

 

 

計算例

 

 例①:SRM/ACE以前のany%(現在の「Defeat Ganon - No SRM」)で使われたゴーマ戦後の青い光からガノン城へ飛ぶ「ガノンドア」。

 青い光はまずベースエントランス00EEとカットシーン1を設定し、00EE + 4 + 1 でエントランス00F3のコキリの森をロードしようとする。

f:id:wagaizumo:20220103023612j:plain

 しかし実際にワープするまでの瞬間にボス部屋のドアを開くと、ベースエントランスは0252(ボス部屋からデクの樹)に書き換わる。データ上の単純な足し算(0252 + 4 + 1)は崩壊ガノン城内部のエントランス0257へと勇者を導く。

f:id:wagaizumo:20220102090110j:plain

 ここの隣り合い方は本当に奇跡的で、任天堂はWrong WarpまでのRTAを想定していたというミームを否定しきれない。SRM/ACE以降は想定していないと考えられる。

 

 例②:旧All Dungeons(現在の「All Dungeons - No SRM」)で使われた炎の神殿ヴァルヴァジア戦後の青い光からエンディングのロンロン牧場へのワープ。

 青い光がカットシーン3を設定する。このあとカエルタイマー失敗を(カエルをちゃんと持ったまま)*11割り込ませることで、ベースエントランスは0153(ゾーラの里タイマー失敗)に変わる。行先を計算すれば0153 + 4 + 3 = 015A 、ロンロン牧場(ハイラル平原から)のエントランスである。

f:id:wagaizumo:20220102080416j:plain

 ここで注意したいのが(通常プレイでは全く問題にならないが)、流れるムービーはエントランスに依存しているのではないことだ。

 もしそうだとすると015Aは大人夜の通常エントランスだから、エンディングが流れるはずもない。またベースエントランス0153(ゾーラの里)とロンロン牧場のエンディングの間にも何ら関係がない。

 

 つまり、流れるムービーはエントランス(ベースエントランスとカットシーンID)ではなく、マップとカットシーンID(シーン設定)によって計算される

 Credits Warpに当たって非常に重要な点だが、Wrong Warpの解説でこの重要箇所をちゃんと説明したものは少ない。筆者もしばらく勘違いしていたから、ここで強調しておく。手続き的には「エントランステーブルだけでなくシーン設定の表も見ないと流れるムービーは決定できないよ」ということである。*12

f:id:wagaizumo:20220102092857j:plain

参考:マップとシーン設定(scene setups)とムービーの対応表

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

 

 結果、ムービーは4(通常分)+ 3(カットシーンID)= 7(シーン設定)に対応した「Credits 2 - Support Unit」となる。実際、エンディングムービーは「Suppor Unit」の所から流れ始めている。

 SRM以前のCredits Warpとは正にWrong WarpであったSRM以後も(GC版のプリレンダリングムービー呼び出しを除いて)基本はそうである。

 

 補足:時オカ(N64) any% コントローラー3レスチャートはやはりWrong Warpの原理(足し算の原理)でエンディングを呼び出している。

2020/2/19 「Ocarina of Time - Slingshot and Controller 3 Skip」 by MrCheeze

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

 最終盤だけ述べる。ACEでカットシーン8を用意し、この状況で双子の家(009C)に入るとCutscne Map(00A8)という特殊なエントランス/マップに飛ぶ。ここにおいてカットシーン8が流すべきムービーは「Cutscene - A Thwarted Ganondorf Curses His Opposers」、つまりエンディングである。

 

 

 

 例③:フロルの風を使ったWrong Warp(FW Wrong Warp

 これを説明しないとWrong Warpの概説としては片手落ちなので、手短に書く。

 Wrong Warpの汎用性を格段に引き上げる技。フロルの風は登録時に戻るべきベースエントランスXXXX(や座標や部屋番号)を保存する。ここで青い光に入りながらフロルを起動し、特定のタイミングで「ポインタへワープをする」を選択すると、次にロードするベースエントランスを保存したXXXXに書き換えることができる。これと更にカットシーンIDとの和であらぬ場所へワープする、というのがフロルWrong Warpの仕組み。

 フロルの風は本来ダンジョン内でしか使えないのだが、Bフロル等を用いると剣を振れる場所ならどこでもエントランスを保存できるようになる(どこでもフロル状態)。これによってXXXXの候補が激増し、Wrong Warpの行き先も激増した

 とはいえカットシーンポインタ(cutscene pointer)に関連したフリーズ回避の問題は残る。

 

 適切な使用例が見つからなかった(SRM以前は最終的に採用されなくなった? SRM以後はもうフロルWrong Warpどころではない)ので、時オカ3D any% 現世界記録から引用する。リメイク作品だがエントランステーブル等は原作と同じ。 

2021/6/17「【RTAゼルダの伝説 時のオカリナ3D Any% 27:50 【解説付き】」by ぱる

https://www.nicovideo.jp/watch/sm38896907

 ゴーマ戦後の青い光(カットシーン1)を利用する。フロルの風で保存したベースエントランス014D(デスマウンテン登山道からゴロンシティ)を割り込ませると、たどり着くエントランスは014D + 4 + 1 = 0152、再びゴロンシティへ。

f:id:wagaizumo:20220103054509j:plain

 ここで流すべきムービーはシーン設定5の「Credits in Goron City」となる。なおここでは正規のエントランス(0152)でエンディングを流している。

f:id:wagaizumo:20220103054837j:plain



 補足:Wii VC版の「All Dungeons - No SRM」だとフロルWWが使われていた。N64版のルートだとフロルWWを使わず代わりに目薬タイマーが活躍する。現状N64版の方が30秒ほど早い。

VC All Dungeons record in 1:17:29!! - YouTube

 

 

[参考]

 Wrong Warpの簡潔な解説動画として次がある。

2014/08/21「How Wrong Warps Work in Zelda OOT: Easy to Understand Explained by RC」 by RacingChu

https://www.youtube.com/watch?v=cxYoiOIGMeg&ab_channel=RacingChu

 

 目的地を選ぶと可能な選択肢、クラッシュするか否かを表示するツールとして次がある。ただしWrong WarpSRMを併用する場合をこのツールは想定していないので、その際はエントランステーブルに戻って考えた方がよい。

「Wrong Warp Calculator」

https://mzxrules.github.io/zelda64/ocarina/ww/

 

 例外的事象や細かい注意点はまだまだあるので、より詳しくは次を参照のこと。

 特にWrong Warpを実践される方はフリーズ関連(カットシーンポインタ)に注意されたい。RTAチャートはフリーズ回避のため事前に見るムービーまで調整している場合がある。ワープ直前の動作だけ真似しても上手くいかないかもしれない。

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

 

 ただし、本稿で「カットシーンID(cutscene ID)」「シーン設定(scene setups)」と訳したものを、zeldaspeedruns和訳では「ムービー番号」「パターン番号」と呼んでいるので注意。

 cutscene idを「ムービー番号」としたりsetupを「ムービー番号」としたり、訳が一定せず混乱したのが本稿で敢えて訳語を変更した理由である。

 

 

 

 

 以上で前編は終了である。これらの基礎事項を元に、後編では体験版any%の戦略へ斬り込んで行く。

 

 

|次>

wagaizumo.hatenablog.com

 


 

 

 

 

 

 

 

*1:speedrun.comにおけるカテゴリ名。SSBBは「スマブラX」の英題「Super Smash Bros. Brawl」から

*2:5分体験版用にセットアップを最適化したことは見逃せない時間的工夫ではある

*3:嘘をついている。どちらもファイルネームを使わないと10分には収まらないだろう。使えたとしてWii VCではACEそのものはできない(ACEっぽいことはできる)。RAMエディタに関しては次の動画を参照。これもWii VCでは出来ない。

2021/3/24「Building a RAM Editor in Ocarina of Time」 by SeedBorn

https://www.youtube.com/watch?v=J95D-gPBDuc&ab_channel=SeedBorn 

*4:正確にはfloatの数値型を持つx座標の「下位2byte」=「16進法で下位4桁」≒「10進法で小数点以下の値」が代入される

*5:無の角度調整はx座標調整の一環として行っている

*6:float-perfectが出来ないことは無い、あるいは出来るような値を探す余地がある、というのは時オカの大きな特徴だと思われる。2021年に入ってマリオストーリーN64)、ペーパーマリオRPGGC)、マリオサンシャインGC)で相次いで任意コード実行が発見されたが、どれもTAS onlyなfloat-perfectを要求される

*7:基本的には角度を調整すればよいのだが、狭い部屋でカメラがリンクの方に寄るような場合は位置調整まで必要になってシビア。

*8:穴に落ちた後の初期位置は、エントランスだけでなく(フロルの風と同様に)部屋番号や座標まで指定されているらしい

*9:「できる場所が非常に限られる」とまでは言えない。加えて5分体験版の枠組みでさえ永続的な効果を及ぼすSRMはできるかもしれない(次回の「試行:Wrong WarpSRM(1)」参照)。これは結局TAS onlyかつemulator onlyだと判明したのだが……

*10:最近だとムジュラの仮面の1stサイクルスキップ(2021年11月発見)の例がある。最初の報告動画を筆者が見た際「これは実質運頼みのTAS-onlyセットアップでこれからRTA-viableなセットアップが開発されるのだろう。まあすぐ開発されるんだろうな」と思った。しかしトッププレイヤーたちは格が違い、実力と試行回数によりこのセットアップのまま通してしまった。それにしても12時間走ってようやく1回完走は酷いバランスである。

*11:わらしべアイテムを何らかの方法で書き換えるとボス部屋のエントランス、この場合は0305(炎の神殿ボス部屋)を参照する。これでWrong Warpするとハイリア湖でフリーズする。「カットシーンポインタ」の問題

*12:補足:シーン設定表を見るとマップ「崩壊ガノン城内部」はCS 1に対応したムービーが無いことに気付く。ガノンドアの場合このカットシーンの余剰をどうするかは細心の注意が必要である。直近に流したムービーによってフリーズしたりしなかったりするのだ。「カットシーンポインタ」の問題。