K3の住民

最近はレア社のゲームについては書いていませんが、一応レア社のゲームが一番好きな人です。『雪圀』で"圀"は"国"とほぼ同義ですが、国ではありませんって当たり前か(笑)。

【時オカ】「Reverse Bottle Adventure(RBA)」「Bottle Adventure(BA)」を詳しく解説(再掲・後編)

※遊びでやる際はくれぐれもセーブだけはしないように。

前編→http://ryoryoau24.hatenablog.com/entry/2017/10/28/141735


皆さん、こんにちは。雪圀です。
今日は昨日書いた記事の後編です。昨日の時点で量が多すぎたので分けました。


前編のおさらい

・RBA、BAをやる為にはBアイテムをあきビンにする必要がある
・その為特殊な方法を使ってBアイテムをデクの棒にして更にあきビン化バグをする
・RBAはC→(3D版はIIボタン)にセットされているアイテムによってBアイテムを変化
 させたときに不具合が起こるバグ

大体こんな感じです。では早速BAから行きたいと思います。

Bottle Adventure

RBAではBアイテムによってC→アイテムのアイテムIDに準じたアイテムスロットに
格納されているアイテムを変化させていました。
BAはReverseのReverseなので分かるかと思いますが、変わるのはBアイテムの方
です

皆さんは時オカでは後半でリンクの子供時代と大人時代を行き来出来るのはやって
いたら知っていると思います。
この子供時代と大人時代を行き来するとき、何か引っかかる点はありませんか?
僕にはどうしても気になる点があってしょうがないところがありました。それは
子供時代でセットされたアイテム、大人時代でセットされたアイテムは行き来
しても保持されている」ことです。

例えば子供時代で以下のアイテムをセットしていたとしましょう。

メモリアドレスアイテム・領域名

セットする
アイテム
0x11A638コキリの剣59
0x11A639ブーメラン14
0x11A63Aデクの棒0
0x11A63B時のオカリナ8

セットしている
アイテムの格納先
0x11A63Cアイテムスロット1313
0x11A63Dアイテムスロット00
0x11A63Eアイテムスロット77

そして大人時代に行きます。このとき、リンクのセットしているアイテムは大人時代
のものになっているはずです

また子供時代に戻ります。すると、先ほどのセットしているアイテムに戻ります

つまり何が言いたいのかというと子供時代は子供時代で、大人時代は大人時代で
セットしているアイテムは別々になっている、ということです。

これは時代を行き来する際にその時代のアイテムIDとアイテムスロットの値を保存
し、そして戻ってきた際にアイテムIDからセットされているアイテムを復元している
為です
・・・ん?

では、ビン系アイテムはどうやって復元するのでしょうか???
ビン系アイテムはもしそのまま復元してしまえば、子供時代でのアイテム、大人時代
でのアイテムに矛盾が生じてしまいます。
つまり、もし復元したアイテムがビン系アイテムであるならば、その格納先を
チェックする必要があります。そして、チェックしたアイテムスロットに格納されて
いるアイテムIDを読み取ることで大人時代と子供時代のビン系アイテムを同期させて
いるのです。
因みにわらしべアイテムも格納するアイテムスロットは全て同じなので時代を移動
した際にチェックが行われます。

次に、Bアイテムについて。

BアイテムもCアイテムと同じように、アイテムIDが保存されており、復元されたとき
もどのようなアイテムでも普通に使える(フリーズするアイテムを除く)ように
なっています。
ところがあきビンやわらしべアイテムの場合、変わっている可能性も無きにしも非ず
なので、あきビンやわらしべアイテムがBアイテムに装備されている場合も何が格納
されているかのチェックを行わなければなりません
ということは、その為にはC→のアイテムIDからアイテムスロットに格納されている
アイテムを読み取らざるを得ません
また、一番最初に読み込むのは装備であるらしく、読み取る際は前の時代のC→に
セットされているアイテムのアイテムIDを読み取ることになります

以上から、BAは時代の移動と、それによるビン系アイテム、わらしべアイテムの
チェックが原因で起こるバグであると言えます。

では、例を介して説明しましょう。大人時代で以下のようにセットしていると
しましょう。

メモリアドレスアイテム・領域名

セットする
アイテム
0x11A638あきビン20
0x11A639ボムチュウ(17個)9
0x11A63Aサカナ入りビン25
0x11A63B時のオカリナ8

セットしている
アイテムの格納先
0x11A63Cアイテムスロット88
0x11A63Dアイテムスロット1919
0x11A63Eアイテムスロット77

そして子供時代に戻り、大人時代のアイテムID、アイテムスロットの値を保存
します。次に子供時代では以下のようにセットします。

メモリアドレスアイテム・領域名

セットする
アイテム
0x11A638コキリの剣59
0x11A639ボムチュウ(17個)9
0x11A63A時のオカリナ8
0x11A63Bポウ32

セットしている
アイテムの格納先
0x11A63Cアイテムスロット88
0x11A63Dアイテムスロット77
0x11A63Eアイテムスロット1919

そして大人時代に行きます。このとき、Bアイテムはあきビンなので3つ先のメモリ
アドレスより、アイテムスロット32*1に格納されているアイテムID17*2を読み取り
ます。
アイテムID17は「メガトンハンマー」なのでBアイテムにはメガトンハンマーがセット
されます
最後にCアイテムも全部セットされ最終的にはこのような感じになります。

メモリアドレスアイテム・領域名

セットする
アイテム
0x11A638メガトンハンマー17
0x11A639ボムチュウ(17個)9
0x11A63Aポウ32
0x11A63B時のオカリナ8

セットしている
アイテムの格納先
0x11A63Cアイテムスロット88
0x11A63Dアイテムスロット1919
0x11A63Eアイテムスロット77

以上が例です。因みにボムチュウは分かりやすくする為に、アイテムスロット19に
格納されているビン系アイテムは比較用に入れています。

このBAを使うことで、Bに色々なアイテムをセットできるほか使用禁止区域でも
使用不可能アイテムが使えるようになるので(例えばボス部屋で「フロルの風」を
使ったりとか)これに派生したバグも出来るようになります。

因みに3D版ではブーツもアイテム化しているのでヘビーブーツ、ホバーブーツを
セットすることも可能です。

終わりに

RBA、BAはメモリ操作系のバグだということが分かったでしょうか。理解出来れば
ちょっとしたハッカーの気分になれるでしょう。多分。
Wrong Warpの登場によりRBA、BAはどんどん廃れていきましたが、制限するなら
まだまだ捨てたものでは無いと思います。
どちらにしろ、面白いバグであることは確かです。



以上です。これも思った以上に長くなったのでこれ以上は書かないことにします。

今回はこれくらいにしときます。


参考サイト
Bottle Adventure - ZeldaSpeedRuns
 →BAの参考に使わせていただきました。
Time Travel Mechanics - ZeldaSpeedRuns
 →時代を行き来する際に行われる処理は「時代移動システム」と言われています。
  時代の行き来はどのように処理されているかの参考に使わせていただきました。

*1:厳密には「アイテムスロット32」は無い

*2:これはボムチュウの所持数である