【マリオ64 RTA】BBH ちびテレサがワープする現象を調査してみた
テレサのホラーハウスのお館の入口から見て右側にある部屋に、ちびテレサがいることは多くの方がご存じだろう。
このテレサだが、特定の場所でガタるとワープするのだ。
「この現象を意図的に起こせるのならRTAで使えるのでは」――こう考えた私はその仕組みを調査することにした。今回はその調査結果を紹介する。
最終的に、120枚RTAなどで回収する『8まいコインはどこだ+100枚コイン』や『おやかたテレサをさがせ』のリカバリで使えそうだという結果を得られた。
リカバリの詳細は以下の動画を見てほしい。
ちびテレサが持つ『Action』とは?
今回の内容を理解する上で、ひとつ学んでおかなければならない知識がある。
それは、各ちびテレサが持つ『Action』と呼ばれる値に関する知識だ。これはちびテレサの状態を指し、具体的には以下となっている。
■Action = 0: 対象のちびテレサが停止している状態(マリオが対象のちびテレサの部屋にいない時)
■Action = 1: 対象のちびテレサが動いている状態(マリオが対象のちびテレサの部屋にいる時)
■Action = 2: 対象のちびテレサがジャンプなどで踏みつけられた状態(マリオはバウンドする)
■Action = 3: 対象のちびテレサが攻撃を食らった状態
■Action = 4: 対象のちびテレサが白い煙になった状態
このうち、今回重要なのは『Action = 0』と『Action = 1』となる。
次のセクションでは、『Action = 0』になるきっかけと『Action = 0』になった時に発生する仕様を紹介する。
『Action = 0』でテレサが初期位置に戻る!
マリオがちびテレサのいる部屋から別の部屋へ移動した時、対象のちびテレサのAction値が0になり初期位置に戻るという仕様がある。
今回においてはこの仕様が死ぬほど重要なので、理解してもらうために具体例を見せよう。
マリオがお館入口から見て右側にある部屋に入ることを想像してほしい。
ここで、テレサを引き寄せてから部屋を出た場合、次に入室した時のテレサの位置がどこなのかご存じだろうか。
正解は『扉付近』……ではなく『初期位置』だ。
この具体例をAction値で見てみたのが以下となる。
(1) マリオが部屋に入った時、対象のちびテレサのAction値は0から1へ変わる。
(2) テレサを倒さずに部屋から出た場合、対象のちびテレサのAction値は1から0へ戻る。
画面では見えないが、この時に対象のちびテレサは初期位置に戻っている。
(3) 次の入室時のテレサの位置は初期位置にいる。
この具体例から分かるように、
- マリオが違う部屋に移動すると、対象のちびテレサのAction値が0になり、
- Action値が0になると、初期位置に戻る
のである。
で、この仕様が本題の『テレサがワープする現象』でも起こっているのだ。
ちびテレサがワープする仕組み(一般向け)
先セクションで紹介した仕様を念頭に『ちびテレサがワープする現象』を見てみる。
(1) 回転床から降りた時、マリオは『回転床のある部屋内(2)』にいる。この時左下にいるちびテレサは『Action = 1』。
(2) 足場の左端に向かって歩いていく。
(3) 足場の端でガタると、マリオが一瞬『回転床の階層とメリーゴーランド階層の間(24)』にいる判定となる。
つまり、別の部屋にいる判定となるため、対象のちびテレサのAction値が0となる。
(4) Action値が0になったことで、初期位置に戻る。
ポイントは、『マリオがどの部屋にいるか』が『マリオが現在いる床』によって決まっていることにある。
(3)では足場でガタっているが、この部分(床)のみ『回転床の階層とメリーゴーランド階層の間(24)』扱いになっており、別の部屋にいる判定されるわけだ。
これは一種のバグだと言っても良いかもしれない。
以上が『テレサがワープする現象』の基本的な解説となる。見た目は深そうに見えるものの、意外とシンプルだったと思う。
ちびテレサがワープする仕組み(分かる人向け)
先のセクションで解説した仕組みは、細かい部分を省いている。
そのため、「どうして別の部屋に移動するとちびテレサが初期位置に戻るんだ!」と憤慨している人もいることだろう。
そんな人のために、本セクションにて『ちびテレサがワープする現象』に関連する仕様を紹介する。
■大枠のロジック
- ちびテレサが『Action = 1』の時の仕様の一部に『ちびテレサを止めるかどうかの判断(後述)』があり、『止める』と判断した場合はActionを0にする。
- ちびテレサが『Action = 0』の時の仕様の一部に『ちびテレサを初期位置に戻す』がある。
■『ちびテレサを止めるかどうかの判断』のロジックの一部
- もし『マリオのいる部屋が0番』だった場合、ちびテレサは『止めない』。※0番 = 青コインスイッチ付近、回転床付近。
- もし『マリオのいる部屋が0番以外』だった場合、『マリオが対象のちびテレサに関連する部屋にいるかどうか(後述)』で判断。
■『マリオが対象のちびテレサに関連する部屋にいるかどうか』のロジック
- 『マリオのいる部屋番号 = 対象のちびテレサの部屋番号』だった場合は、ちびテレサは『止めない』。
- 『マリオのいる部屋番号 = 対象のちびテレサの部屋番号に隣接する部屋番号(2つ)』だった場合は、ちびテレサは『止めない』。
- 上記2つ以外だった場合は、ちびテレサを『止める』。
■ 部屋番号の例
1階の各部屋の番号は以下の通り。黄色が部屋の中にいる時の番号で、オレンジ色が扉付近にいる時の番号となっている。
また、各部屋ごとに『隣接する部屋番号』を2つ持っている。
部屋番号 | 場所 | 隣接する部屋番号2つ |
---|---|---|
0 | 回転床付近、青コインスイッチ付近 | 0, 0 |
1 | お館のメイン部屋内 | 0, 0 |
2 | 回転床のある部屋内 | 0, 0 |
4 | 崩れる足場のある部屋内 | 0, 0 |
9 | 屋根裏部屋内 | 0, 0 |
14 | お館のメイン部屋⇔回転床のある部屋の扉付近 | 1, 2 |
22 | 回転床のある部屋⇔崩れる足場がある部屋の扉付近 | 2, 4 |
23 | 回転床のある部屋⇔屋根裏部屋の扉付近 | 2, 9 |
24 | 回転床のある階層⇔メリーゴーランド階層の中間 | 0, 0 |
■まとめるとこうなる
- 対象のちびテレサのAction値が1の時、
- 『マリオのいる部屋番号』が0番ではなく、
- 『マリオのいる部屋番号 = 対象のちびテレサのいる部屋番号』ではなく、
- 『マリオのいる部屋番号 = 対象のちびテレサのいる部屋番号に隣接する部屋番号(2つ)』でもない場合、
- ちびテレサのAction値を0に変える仕様がある。
- Action値が0の時は初期位置に戻す。
むすび
今回は深くまで掘り下げて解説してみたが、シンプルな仕組みなので、簡単に理解できたのではないだろうか。
仕様がRTAに活きることもあるので、RTAに絡んできそうな仕様は今後も紹介しようと思っている。