時オカ最大のバグ技、Wrong Warpについて
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

時オカ最大のバグ技、Wrong Warpについて

2014-01-13 03:53
  • 5
先日、自分が転載させていただきましたが、時オカのAny%TASが更新されました。

今回のTASでも使われている、Wrong Warpというバグ技について、書いていこうと思います。
というのも、動画内の投コメでも解説しているのですが、難解すぎてついていけねえよっていう人がほとんどだと思います。自分でも書いてて意味分かんないです。

ってことで、今回は長文にできるように、ブロマガってのを使わせていただきます。
ながーくなりますが、できるだけわかりやすいように書きますので、お付き合いください。

始めに、出口表【http://www.zeldaspeedruns.com/oot/wrongwarp/entrance-table】こちらを開いておくことをおすすめします。

目次
1.概要
2.知識
3.Wrong Warpの原理
4.Wrong Warpのやり方
5.直前に見たムービーが影響する
6.まとめ
7.参考資料

1.概要
時のオカリナにおけるWrong Warpは、2つのマップ移動を重ねることで、移動先を書き換える技です。ボス部屋の青い光を利用することで、マップ移動を重ねることが可能になります。

2.知識

2-1.マップ移動の原理
2つのマップ移動が重なった時、ゲーム内ではどのような処理が行われているのでしょう。
このゲームでは、各出口をくぐった際のリンクの位置情報と、移動先のマップの情報が、出口の数だけ準備してあります。さらに、子供か大人か、また昼か夜かによってもマップが変わる場合があるので、全てのマップに、子供の昼~大人の夜の計4つが準備してあります。
そしてその出口の情報は、一つの表にまとめて保存されています。
例えば、コキリの森→デクの樹、という移動は、子供でも大人でもデクの樹のマップ自体は同じですが、ROMの中の0000~0004番にそれぞれ保存してあります。

・コキリの森→デクの樹 マップ情報(実際は全て同じもの)
0000 デクの樹←コキリの森 子供・昼
0001 デクの樹←コキリの森 子供・夜
0002 デクの樹←コキリの森 大人・昼
0003 デクの樹←コキリの森 大人・夜

マップ移動を行う際は、その表の中のどの値を読みこめばいいか、毎回読み取ることになります。このゲームでは、マップ移動を行う際に、どのマップを選ぶかを考えるために、ある計算を行います。
始めに、くぐった出口の「子供・昼」の値を読み取ります。これは、各マップに固定されています。
続いて、子供か大人か、昼か夜かを判断します。夜だった場合は、昼から1つズレてるので、読み取った値に+1、大人だった場合は、子供から2つズレてるので、読み取った値に+2します。つまり・・・
読み取ったマップの値 + (昼だったら0、夜だったら1) + (子供だったら0、大人だったら2)=移動するべきマップの値 となるわけです。

例えば、「子供」「夜」で、「ハイラル平原→城下町」のマップ移動を行ったとします。
・ハイラル平原→城下町 マップ情報(大人時代では差異がないため同じもの)
0033 城下町←ハイラル平原 子供・昼
0034 城下町←ハイラル平原 子供・夜
0035 城下町←ハイラル平原 大人・昼
0036 城下町←ハイラル平原 大人・夜

まずは、「ハイラル平原→城下町」の出口をくぐったので、「ハイラル平原から城下町に来た」場合のリンクの位置情報と、マップ情報が保存されている、最初の番号「0033」を読み込みます。
ここで、リンクが子供か大人か、昼か夜かを読み取ります。「夜」であるので、+1、「子供」であるので、+0します。よって、
0033 + 1 + 0 = 0034(子供・夜のマップ)となるのです。
(この計算を、「マップ計算」と呼ぶことにします。)

2-2.ムービー再生の原理
このゲームには、マップ移動と同時に、ムービーが再生される場合があります。
一番頻繁なのが、「初めてそのマップに入った時」のムービーです。
他にも、「ボス撃破後の青い光から出た後」も頻繁に見られます。(というか、これを用いてWrong Warpをします。)
実はこのムービーの情報も、マップの情報と同じ表に保存されています。
各マップ移動時に再生されるムービーにはその数だけ番号が振ってあり、No.0~No.15まであります。
そのムービーの情報は、大人・夜のマップ情報以降に、No.0から連番で並んでいます。

・ハイラル平原→ハイリア湖畔のマップ、ムービー情報
0102 ハイリア湖畔←ハイラル平原 子供・昼
0103 ハイリア湖畔←ハイラル平原 子供・夜
0104 ハイリア湖畔←ハイラル平原 大人・昼
0105 ハイリア湖畔←ハイラル平原 大人・夜
0106 ムービー0
0107 ムービー1

では、マップ移動時に、ムービー0を再生したい、とします。
まず、ハイラル平原から、ハイリア湖畔への出口をくぐりました。「0102」を取得します。
ムービー0を再生する条件が整っているので、ムービーを再生します。
ムービーを再生する、という判断をゲームが行った場合、無条件で取得した値に+4をします。
さらに、再生したいムービー番号の数だけ、値を加算します。
つまり、計算式は、
読み取ったマップの値 + 4 + ムービー番号 = 再生するムービー
となります。
ハイリア湖畔のムービー0を再生する場合は、
0102 + 4 + 0 = 0106 となります。
(この計算を、ここでは「ムービー計算」と呼ぶことにします。)

2-3.青い光によるマップ移動
青い光によるマップ移動も、基本的にはマップ上で出口をくぐった際の移動と同じものです。
ただ一つ違うのは、その移動に独特の演出があることです。
青い光に入った瞬間、演出が開始すると同時に、マップ移動を行うまでのフレームカウントが行われます。
それぞれの青い光に定められた数フレームがカウントされた瞬間に、マップ移動が行われるようになっています。

2-4.同時に重ねる、ってどういうこと?
Wrong Warpは、「2つのマップ移動を重ねることだ」という説明をしました。ではそもそも重ねるとはどういうことなのでしょう。
マップ移動は、2つのフレームに分割されて行われます。ある出口をくぐり、マップ移動が行われる際は、
1フレーム目で、「直前にくぐった出口」を取得します。
そして、2フレーム目で、「マップ計算」または「ムービー計算」を行います。
1フレーム目に取っておいた「直前にくぐった出口」の値を、2フレーム目の計算で引用するわけです。
ここで、2つのマップ移動が同時に行われた場合はどうなるかと言うと、「直前にくぐった出口」が上書きされてしまいます。
A、Bという2つのマップ移動が重なったとします。
A 1フレーム目 出口「a」をくぐった (直前にくぐった出口 a)
B 1フレーム目 出口「b」をくぐった (直前にくぐった出口 b)
A 2フレーム目 マップ計算を行う b + (計算)でマップ移動
 となるので、出口と計算の値が矛盾することになります。

しかし、これだけだと、子供/大人と昼/夜の計算は同じだから、変わらないんじゃ・・・?と考えると思います。しかし、マップ計算と同時に、リンクの立つx-y-z座標情報も判定されるので、マップはあっていても、リンクの現れる座標が食い違うので、とんでもなく高い位置からリンクが現れることもあります。
これが、Void Warp(後述)と呼ばれる技です。

3.Wrong Warpの原理
ここまでの知識を元に、Wrong Warpの原理を説明していきます。
3-1.ムービー計算+マップ計算のWrong Warp
恐ろしい結果を見せるのが、このムービー計算を伴う移動を重ねた場合です。
前述したように、ムービー計算では、取得した値に+4し、さらにそこからムービー番号を加算します。
しかし、ムービーをもたないマップでは、大人・夜の場合の、取得した値+3までの情報しか存在しません。そこに、ムービー計算を重ねることで、恐ろしいことになります。
それは、全てのマップが1つの表に保存してあることに起因します。
例えば、実際にも用いられている、デクの樹ボス部屋→デクの樹というマップ移動の部分を見ると、

0252 デクの樹サマの中←デクの樹 ボス部屋 子供・昼
0253 デクの樹サマの中←デクの樹 ボス部屋 子供・夜
0254 デクの樹サマの中←デクの樹 ボス部屋 大人・昼
0255 デクの樹サマの中←デクの樹 ボス部屋 大人・夜

と、4つのマップが保存されています。
では、そこに、ゴーマを倒した後に現れる青い光のマップ移動を重ねてみましょう。
すると、以下の様な動きをします。
青い光のマップ移動 1フレーム目 直前にくぐった出口 「00EE コキリの森」を読み込む
ボス部屋→デクの樹 1フレーム目 直前にくぐった出口 「0252 デクの樹」を読み込む
青い光のマップ移動 2フレーム目 ムービー計算 0252+4+1=0257に移動

ということで、デクの樹ではない、0257のマップに移動します。
0257に保存されているのは、「崩壊中のガノン城」です。
以上より、デクの樹サマの中から、ガノン城へのワープが可能となるのです。

3-2.マップ計算+マップ計算のWrong Warp(Void Warp)
ムービー計算を伴わなくとも、Wrong Warpは発生します。
用いられているものでは、マップ外落下+マップ移動という方法があります。
マップ外に落下し、再び復帰する際は、ダメージ♡1を受けつつ、「直前に行ったマップ移動」をもう一度行います。それを利用すれば、Wrong Warpも可能です。
Any%のルートで用いられているものだと、マップ外落下と、「崩壊中のガノン城外→内部」を組み合わせています。
前述したように、移動先のマップに影響はなく、「崩壊中のガノン城内部」に出ます。しかし、リンクの位置座標はマップ外落下から復帰した際のものと同じになります。
そのとき、Any%では、「直前に行ったマップ移動」は、「崩壊中のガノン城内部→外」なので、そのときの位置座標にリンクが現れることになります。
これは、ムービー計算を伴うものと区別するために、Void Warpと呼ばれます。

4.Wrong Warpのやり方
では、やり方を説明します。

4-1.Wrong Warpの場合
基本的に、青い光を用いる他に、今のところ方法はありません。
青い光に入ると、通常はリンクの操作が不可能になります。青い光に入りながらオカリナを使用すると、青い光の演出による操作不能を回避できるのですが、ボス部屋の中ではオカリナは使えません。
そこで、OcarinaItemsという技を利用します。名前の通り、オカリナをアイテムで吹く技です。
中身の入っているビンを手に持った状態で、空中でビン→アイテムと入力すると、着地と同時にオカリナを構えます。ビンはボス部屋でも使用可能なので、青い光に入ると同時にOcarinaItemsを用いて着地、とすることで、青い光に入りながらオカリナを構えることができます。
オカリナを構えている時には、青い光によるフレームのカウントはされず、オカリナを解除すると同時に青い光のマップ移動のフレームカウントが始まります。
そして、フレームカウントの到達と、他のマップ移動を同時に行うことで、Wrong Warpを発生させます。
また、青い光によるフレームカウントは、ある程度離れて、カメラの中に青い光を入れないことで、無理やり止めることができます。これを利用して、RTAではセットアップによってWrong Warpを可能にしています。

4-2.Void Warpの場合
Void Warpは、崩壊中のガノン城外からでのみ、現状では用いることができます。
HESSによって高速で移動、高速で角に入り込むことでめりこみ、地面からの落下距離によって落下判定は発生するので、その距離に到達すると同時にマップ移動の判定に入り込み、マップ移動を重ねています。

5.直前に見たムービーが影響する
このWrong Warpという技ですが、RTAで用いる上にやっかいなのが、直前に見たムービーによって、Wrong Warp後の挙動が変わってしまうという点です。
ムービーを再生する際は、マップ移動のムービー番号とは別に、どのムービーか、を指すポインタというものが更新されます。ムービー時のゲームの動きは、そのポインタの指す値によって変わります。
Wrong Warpも、本来はムービーを再生しようとしたのに、マップ移動が起きてしまう、というものです。Wrong Warpでムービーを再生しようとすると、ポインタがどの値を指しているかを読み取ります。しかし、Wrong Warpではムービーが再生されないので、ポインタが更新されずに、古いもの(つまり直前に見たもの)が残っています。それを読み取ってしまうので、直前に見たムービーによって、Wrong Warp後の動きが変わってしまうのです。


6.まとめ(たい)
以上が、Wrong Warpの説明になります。
簡単にまとめると、
「2つのマップ移動を重ねると、移動先のマップが上書きされる」
「ムービーを再生しようとする処理のせいで、移動先のマップが先にズレる」
「そのせいで全く異なるマップに移動してしまうが、ムービーは再生しようとするので、直前にみたムービーによってリンクの動きが決まる」
と、いえるかもしれません。
Wrong Warpには、ドアを用いたものの他に、フロルの風を用いたもの、死を用いたもの、トレードアイテムを用いたものがあります。
そのうち1つの動画にまとめて紹介したいと思いますので、そのときはまた解説しようと思います。

長くなりましたが、ここまで読んでいただいた方、ありがとうございました。

7.参考資料
Zelda Speed Runs:http://www.zeldaspeedruns.com
ほとんどここに書いてあることを引用しました。解析班の方々には本当に感謝です。
広告
コメントを書く
コメントをするには、
ログインして下さい。