古い土地

暗い穴

【n回目の革命】「ゼルダの伝説 ムジュラの仮面」で1st サイクルスキップ(=最初の三日間でクリア)が可能に

 

 

 

 以下はスピードランナーでもグリッチハンターでもない門外漢の筆者が、自分で理解できる範囲で勝手に解説を抄訳・拙訳したものです。翻訳に許可とれという話だったり理解不足・誤訳で記述に誤りがあったり真似してゲームソフト/ハードが壊れたりしたら、筆者が全ての責任を負います。つまるところ、公開できるレベルまでブラッシュアップした個人的メモに近いので注意してください。誤りがあれば是非コメント等でご教授ください。

 

 本稿は次のツイードスレッドの翻案に近い内容です。文中で紹介する動画「Human in First Cycle」の説明文も参考にしています。

 

 

 

 

 

ムジュラの仮面未解決問題「1st cycle skip」

 

 「ムジュラの仮面」のスピードランコミュニティでは、発売から21年間ずっと「最初の三日間(1st cycle)」を飛ばす方法が模索されていました。いやしの歌を入手しデクナッツ状態を解除するまでの「オープニング」*1区間デクナッツリンクが非力すぎてほとんど何もできないからです。デクナッツ状態さえ解除できればクリアできる、というのはfolkloreとして古くから知られていたようです。

 「スピードランを根幹から変えた」(カテゴリを増やした)と言ってよいSRM/ACEの発見、しかしこれも1st cycle skipに対しては寄与しないように思われました。*2

 「ほとんど何でもできる」「多種のセットアップが知られている」SRM/ACEですが、「岩さえ持てない」デクナッツリンクでは実行が極めて困難なのです。

 

 こちらは2021/6/27に達成された旧チャートWR(Spoo氏)。24:44の記録の内22:16までが「オープニング」です。ムービーも多いしできるだけカットしたいのは当然の欲求でしょう。「本編」が短すぎるとも言えますが。

www.youtube.com

 

 

 

 

3DS版での1st cycle skip

 

 奇妙なことに、人間に戻る方法は3DS版で先に見つかりました。2020年8月頃のことです。洗濯場でSRMを行います。

www.youtube.com

 これと2021年3月頃に見つかった3DS版でムーンワープする方法*3を組み合わせれば、3DS版の方で先に1st cycle skip ルートが達成されたことになります。

www.youtube.com

 ムジュラ3Dにおけるムーンワープの技術的詳細は、例えば次を参照。

 

 ただし洗濯場SRMでの待機時間が長く、RTAでは最初の3日間を正規にクリアした方が速くなるようです。2021/11/21現在any%のWRは33:23(iwabi氏)なので、1st cycle skip ルートを完璧に通せたら40分前後とかになるのでしょうか? RTAとして突き詰めてやっている走者はまだ居ない気がします。

 

 ここで述べた3DS版における発見はしかし、オリジナル版に逆輸入されることはありませんでした。プログラミング(この場合はヒープ)の仕様が根本的に違うからです。

 いまだ探究の時が続きます。

 

 

2021年11月 Deku SRMのブレイクスルー

 

 状況を変えたのは2021年11月から始まったTürkenheimer氏によるブレイクスルーでした。11/1に「Technically Deku SRM」を投稿すると、4日後の11/5に「SRM in 1st Cycle is possible」を投稿。あの非力なデクリンクでもできるSRMを発見したのです。

 アイディアは次の通り:デクリンクができる数少ないアクションの一つ、シャボンを使います。溜めたシャボンは発射後タイマーが内部でセットされ0になった瞬間に消えます。ところで、一部のテキスト(ボンバーズ団員を捕まえた時のテキスト)はリンクの動きを止めますがシャボンタイマーは止めません。シャボンが消えてからリンクが動き始めるまでの間に何かをメモリへロードできたとすれば、SRMが達成可能なはず。

www.youtube.com

 

 さて、ムジュラの仮面におけるSRMの聖地として「天文観測所」や「デクナッツ城」や「迷いの森」が挙げられますが、これらはいずれも複数のロードゾーンがあり境界を跨ぐことが容易です。ヒープ操作の過程でロードゾーン跨ぎは有効活用されています。

 しかしデクSRMが行えるのは「クロックタウン」の北か東か西で、これらのマップではロードゾーン跨ぎが行えないのです。ゆえにヒープ操作は限られ、望むSRMの効果が得られるかは微妙になってきます。

 

 Türkenheimer氏は当初SRMの非ACE的作用*4を活用するアイディアを持っていましたが、ヒープ操作の困難さゆえに断念。よりACE的な手法に取り組み始めました。

 

 はたしてそれは現実のものとなります。2021/11/15に「ACE in First Cycle」を投稿。11/17にはついに「Human in First Cycle」を投稿。21年越しの勝利でした。

www.youtube.com

今回世界を救うのはこの男 「   Fpr」

 

大まかな手順は以下の通り。動画でみられる細かい角度・位置調整は主に手順③⑥のためです。

 

①シャボンAをジムの風船に向けて発射。ぶつかるまでに②を行う。

②シャボンBを溜め始める。

③シャボンAが風船にぶつかると同時にボンバーズ団員を捕まえる。このときシャボンBのタイマーが始動する。

④テキスト表示中数秒待つとシャボンBのタイマーが切れ、シャボンBが割れる。リンクの動きは止まったままで、ポインターがシャボンBから解放されたはずの不正なフリーメモリを参照していることに気付かない。

⑤テキストを閉じる。リンクが動き始める前にフリーメモリへ風船爆発時のアクター「En_Clear_Tag」(煙に相当)がロードされる。

⑥シャボンBが持っていたxy回転の値が参照しているメモリ(今はEn_Clear_Tagをロードしている)に流し込まれる。

注1:普通のSRM/ACEを使ったRTAでスティックをぐりぐりして調整してるのは回転軸が地面と垂直なy回転のみ

注2:xy回転の値はリンクではなくシャボンBが持っている

⑦数秒後、「爆発」が収まり、オブジェクトのdestroy functionが実行される。ここがちょうどxy回転の値により改変されている。

 

 SRMの仕組みを時オカの岩を使ったSRMを通して復習してみよう。any%のRTA(2021/11/25現在Wii VCで6:49)を想定する。

  1. ロードゾーン跨ぎ/回転切り等のセットアップでこれから持つ岩の角度情報をヒープ内の良いアドレスAに誘導する 
  2. 岩を持つ 
  3. 何らかの手段(any%の視点固定しながらロードゾーン跨ぎ、SSによるロードゾーン跨ぎ等)で岩のアクターを解放(無を取得)し参照だけ保持する 
  4. マップをロード(これは実際的には③と同時)するとAに新たなアクターやメモリ情報Bが入る 
  5. 無を特定位置/角度に置くことで無が参照しているアドレスAに位置する情報Bへ異常な値を流し込む 

 岩SRMの要点は「持っている岩」が「無」に変わることでメモリ情報が「解放され」、しかし「参照は保持したまま」「新たなアクターがロードされる」ことにある。これで「新たなアクター」に「異常な値」を流し込むことができるのだ。これ以外の手順はSRMを実用的な効果(例えばACE:ファイルネームを命令として実行する)に結び付けるために行っている。 

 これと今回のDeku SRMを比較すると分かりやすい。「溜めているシャボンB」のタイマーが切れ「無」に変わることでメモリが「解放され」、しかし「参照は保持したまま」「新たに風船爆発のアクターがロードされる」。これによりちょうど風船爆発のアクターが持っている「destroy function」に本来はシャボンBが持っていた「xy回転の値」が流し込まれた。

 

 

 今回のDeku SRMでいじるのは、アイテム選択画面で今どの行に居るかを管理する内部変数です。十行弱上に行けばファイルネーム「   Fpr」がアイテム選択画面の行として誤認され、「フックショット」「ゴロンの仮面」「鬼神の仮面」が装備できます。

 さあ、人間に戻ったらあとはやるだけです。Any%なら例えば、別のSRMによってムーンワープすればよいでしょう。

 

 本当に限られたアクションだけで人間状態に戻るためのSRMがギリギリできるところに水墨画のごとき美しさがあります。21年間見つからないのも納得。

 

 ヒープ調整の詳細は次の動画で説明されています。

New Any% Actor Heap Manipulation explained - YouTube

 

 

余談:今回のDeku SRMと全く同じ原理。掴んでたボムチュウが無へ、そしてサコンへ。

2021/11/21 「Bombchu + Bomber Text + Night Transition SRM」 by MrCheeze

www.youtube.com

 

 

 

RTAへの導入

 

 次なる課題は、これをRTAに落とし込むことです。見たところボンバーズ団員の誘導が乱数的で、先のセットアップはちょっと人間には難しい気がします。まあスピードラン勢はセットアップの開発に余念がないのでそのうち行われることでしょう。

 

 と、思っていたら翌日の11/18にはJake氏がany%のスピードランを開始*5。11時間半走り続けて1回のみ完走、24:13の記録を出しWRを30秒更新しました。セットアップを進化させるのではなく人間が進化すればよい、という方向です。

 翌日にはTürkenheimer氏も参入し23:12の記録を出します、が、これは4時間天下に終わります。Jake氏が同日21:05を出し2021/11/21現在はこれがWRです。21分切りはすぐ行われると思います。

www.youtube.com

 

 

追記(2021/11/24):むーす氏が21分切りを成し遂げ、そのランで解説動画を制作しています。こちらもぜひご覧ください。

www.youtube.com

 

 

追々記(2021/11/30):現在のWRは19:10。「Fpr」の前の名前の空白が多いけど影響なし? 完璧に通せばこのルートでも19分は切れそうですが、ボンバーズ団員の誘導が時間かかる&本当に安定しないので競技性が結構削がれています。新技術開発が望まれる。

www.youtube.com

 

追々々記(2021/12/4):18:37の記録が出(てい)ました。記録達成自体は11/28で承認が遅れていた模様。

 

 なお、ずれたアドレスを参照したりその他諸々でN64ではクラッシュします。エミュの仕様上GC/Wii VC/Wii U VCでは回避できると思われます。公開されているセットアップはWii VC英語版用。

 

 

 Speedrun.comのstatiticsでSRM発見初期からムジュラの仮面におけるany%でのタイムとハードの変遷を眺めてみましょう。

  • 2019年8月~:54:02 → 48:32 Wii U VC (漬物石と呼ばれたWii U一瞬の輝き)
  • 2019年11月~:40:58 → 28:17 Wii VC(ムーンワープ発見以降)
  • 2020年2月~:27:42 → 24:43 N64(クレジットワープ発見以降)
  • 2021年11月~:24:13 → 18:37 Wii VC (1st cycle skip発見以降)

 

 といった感じです。時オカany%は現在ミリ秒の戦いになってきてかなり煮詰まっている感がありますが、ムジュラのany%は技術的にもラン的にも改善の余地がありそうで、しばらく更新ラッシュが続くかもしれません。

 技術的には1st cycle skipとクレジットワープを両立させることが次なる課題でしょうか。ACEでないSRMのみで1st cycle skipが達成できれば(speedrun.com基準で)any%以外でも使用が許可されるので、この方向性も面白そうです。

 

 

 

 外野から見ているだけでも長年の未解決問題が解かれたとき特有の達成感と感動、そして喪失感がありました。

 個人的備忘録として拙稿を提出します。ご笑覧いただけたなら幸い。

 

 

 

 

| 2年後>

wagaizumo.hatenablog.com

 

 

 

 

f:id:wagaizumo:20211121130542j:plain



 

 

 

*1:揶揄した言い方

*2:SRM/ACEについては次を参照。時のオカリナの場合ですが、ムジュラの仮面と基本的な原理は同じ。【翻訳記事】時のオカリナにおける任意コード実行について - しままのものづくり

*3:オリジナル版と3DS版ではプログラミングが異なるため、真に非自明な発見でした

*4:これが例えば何なのかはよくわかってないです

*5:speedrun.comのカテゴリ的にはACEが許可されているのはany%だけなのでAll Dungeons等では使えないのでしょうか? 使えたとして、ファイルネームSRMでアイテム入手した方が速いのかもしれませんが