BBH100赤 庭にいるクモの仕様まとめ

解説120枚RTA

テレサのホラーハウスの『8まいコインはどこだ+100枚コイン』では、庭の10枚箱付近でクモを倒すが、このクモがすぐに来る場合とそうでない場合がある。

走者としては『お屋敷に入る時の扉カメラ×タイムにて、最速の4.03秒ならマリオのほうに来る・4.06秒なら来ない』とだけ覚えておけば良いが、より詳しく知りたい方もいると思うので、当記事にてその仕様をまとめる。

参考動画におけるタイム比較(クモを踏むまで):

  • 4.03秒: +0.0秒、時計回り
  • 4.06秒: +0.5秒程度、反時計回り
  • 4.10秒: +0.4秒程度、時計回り

前提知識: クモの基本的な動きとホームという概念

以下が4.03秒で入った時の動画となる(動画時間0秒から)。10枚箱を壊した後にマリオのほうにクモが来て、踏んで倒せていることが分かると思う。

また、鳥観図(上からみた映像)を見れば分かるが、対象のクモは

1. マリオがお屋敷に入るまで動き続け
2. マリオがお屋敷に入って少ししてから停止し
3. マリオが庭の扉に近づいたら再度動き出す

という流れでホームを経由する形でぐるぐる回っている。

ホームというのは、クモの基準となる場所であり、ステージ入場後のクモの初期位置となる場所のことだ。

具体的に、対象クモのホームは(x,y,z)=(1146,-203,-2280)。

ステージ入場後にマリオを放置すると、クモは速度5&ホームを経由する形で時計回りに一生ぐるぐる回り続ける。

このホームという概念は、この後登場するので覚えておいてほしい。

bbh-yard-scuttlebug-1

結論と疑問点

結論としては、マリオが庭の扉を開けている付近にて、クモが時計回りになるか・反時計回りになるかでマリオのほうに来るかどうかが決まる。

時計回りならマリオのほうに来る、反時計回りなら来ない結果となる。

もう少し掘り下げると、時計回りになる条件は、クモがちょうどホームを通り過ぎた時に『クモの向き(角度)』と『クモから見たホームの方向(角度)』の差が180°以内の時。逆に反時計回りになる条件は180°を超える時である。

この結論と先ほどの話と照らし合わせた時に違和感を覚えた人もいるだろう。

普通に考えれば、ステージ入場後に放置していると時計回りし続けるのなら、途中で止まったとしても時計回りが再開されるはずだ。

しかし実際はそうはならず、(RTAルート的には)お屋敷に入ったタイムによって時計回りになる場合と反時計回りになる場合があるのだ。

この違和感を解決するべく、以降のセクションにて、4.03秒と4.06秒を例に実際の仕様や挙動を確認してみる。

(1) 4.03秒(時計回り)の場合の流れ

実際の動画は以下となる(動画時間0秒から)。

(1)-1 お屋敷に入るまでのパート

先ほど話した通り、マリオがお屋敷に入るまでの間、クモは時計回りに回り続ける。

bbh-yard-scuttlebug-2

その後、お屋敷の入口先の左上に伸びる床判定(以下フレーム)に触れた時にクモは非アクティブになるが、一瞬で停止するのではなく、その場でホームの方向まで向きを変える。

この処理こそが今回の話の根本的な原因だといえるだろう。

bbh-yard-scuttlebug-3

アクティブ/非アクティブの基本知識

BBHにおいて敵キャラがアクティブ(動く)になるタイミングは、マリオが対象の敵キャラに関連する部屋番号にいるかどうかで決まる。

このパートの場合、お屋敷の扉を開け始めた時点はまだ関連する部屋番号にいるが、扉を開けている途中で部屋番号が21から1に変わり、対象のクモは非アクティブとなる。

この部屋番号の話はBBH共通の話であり、以下の記事の『ちびテレサがワープする仕組み(分かる人向け)』を読むともう少し詳しく分かると思う。

クモが非アクティブなのに角度を変える理由

普通に考えるなら、マリオのいる部屋番号が変わったタイミングでクモが非アクティブになり完全停止するのが自然だと感じるだろう。

しかし実際は、4.86秒にクモは(x,z)=(1114.404,-2203.722)にたどり着いた後、この座標で停止したまま角度だけを変える動きをする。

▼ マリオがジャンプしたあたりでもクモはまだ動いている。
bbh-yard-scuttlebug-4

なぜこのような動きをするのか――クモが非アクティブになった場合はそのクモの物理的な移動の処理は走らなくなるが、その処理とは別に、アクティブ/非アクティブ関係なく常時動作するクモ自体の角度処理があるからである。

具体的には、このパートにおいては、以下2つの角度処理が①→②の順番で実行される。今回重要なのはこの処理だけなので、覚えておいてほしい。

①クモの目標角度の設定: マリオ⇔クモのホームの距離が1000ユニットを超える時、クモは自身から見たホームの向き(角度)を目標角度に設定する。

②クモの角度の設定: ①で設定された目標角度に向けて、原則1fにつき512ずつクモの角度を変更する。

※①は、対象のクモとホームのX, Z座標の差を出した後、atan2(アークタンジェント)で角度が算出される。

このパートにおけるゲーム内部の処理

先の角度処理をもとに、4.03秒時の対象クモの流れをまとめたのが以下だ。最終的にクモは角度28673で停止する。

1. 部屋番号=1に到着するとクモは非アクティブとなり、(x,z)=(1114.404,-2203.722)で停止。
bbh-yard-scuttlebug-5

2. クモの停止位置から見たホームの向き(角度)が28673と算出され、目標角度=28673が設定される。この時のクモの角度は56832。
bbh-yard-scuttlebug-6

3. 56832から28673に向けて、56832→56320→55808→55296…と1fにつき512ずつ角度を変えていく
bbh-yard-scuttlebug-7

4. 512ずつの角度変更を繰り返し、最終的に目標角度と同じ角度28673になり停止
bbh-yard-scuttlebug-8

※印のタイミングは目標角度=28673で固定されているように見えるが、実際は目標角度の処理は毎フレーム行われており、常に結果が28673となっている。

ちなみに、クモの角度と目標角度の差が512以下の場合は、クモの角度=目標角度を設定する仕様となっている。なので、4.の最後は角度29184から28673で511だけ変わっている。

以上がマリオがお屋敷に入るまでの間で発生しているクモの処理となる。

(1)-2 庭に行くパート

次にクモが動き出すのが庭の扉に近づいてからになる(動画時間38秒から)。

以降でまたゲームの内部処理を紹介するが、根本的な処理は先の『このパートにおけるゲーム内部の処理』と同じなので重複する部分は省略する。

クモはホーム向けて移動

マリオが部屋番号28に到着したタイミングからまたクモがアクティブになる。

クモは最後(x,z)=(1114.404,-2203.722)、角度28673で停止したため、そこから移動を開始する。

bbh-yard-scuttlebug-9

移動する方向やロジックは先ほどの仕様の通りで、クモはホームに向かって移動する。

4.03秒の場合、クモがホームにたどり着くまでの間は目標角度の計算結果が常に28673となる。そのため、クモは常に同じ方向を向いたまま速度5で移動する。

例えば、クモが移動を開始した1f後の座標は(x,z)=(1116.318,-2208.341)。この座標とホームの座標をもとにクモの目標角度が算出され28673になる。

bbh-yard-scuttlebug-10

※詳細: クモの角度処理は座標移動処理の前に行われるため、18.56秒のフレームでは18.53秒の座標からの計算結果が目標角度に設定される。

要するに、クモの座標と目標角度とではゲーム画面上では1fのズレがあるという意味。上記の18.56秒であれば、この座標からの計算結果は18.60秒のフレームの目標角度になっている。

クモはホームを通り過ぎたら角度を変える

ホームを通り過ぎたフレームでいよいよ本題の時計回りの話になる。参考動画だと19.10秒のフレームとなる。

クモの座標は(x,z)=(1146.933,-2282.251)、角度は28673。

bbh-yard-scuttlebug-11

この時も今までと同じロジックで角度が決定するが、これまでとは違うのはクモがホームを通り過ぎていることだ。

つまり、クモの背中側にホームがある状態となり、具体的な目標角度の計算結果は61441となる。

これを分かりやすいように度数法に変えたのが以下だ(角度の範囲は0~65535)。要するに、クモの向き(角度)とクモから見たホームの方向(角度)は真反対であることが分かる。

  • 角度28673: 360°×(28673÷65536)≒157.51°
  • 目標角度61441: 360°×(61441÷65536)≒337.51°
  • 差: 157.51°-337.51°=-180°→正に変換し180°差

※角度から目標角度を引く仕様となっている。ここも重要なポイント。

bbh-yard-scuttlebug-26

そして、差が180°以下の時は、次のクモの角度として-512(右向き)が設定される仕様となっている。

結果、次の角度として28673-512=28161が設定され、以降のフレームも-512(右向き)に進んでいき時計回りとなるのである。

参考動画だと次のフレーム(19.13秒)で上記数値が設定されていることが分かる。

bbh-yard-scuttlebug-12

クモは右向きに角度を変え続ける

ここからはご想像の通りで、右向きに角度を変えたクモは、以降、クモの向き(角度)とクモから見たホームの方向(角度)の差が常に180°以下となるため、常に右向きに移動する=時計回りになる。

せっかくなので、次のフレームも確認してみよう。

19.13秒のクモの座標は(x,z)=(1149.071,-2286.771)、角度は28161。この座標とホームの座標をもとに計算された結果、目標角度は61098となる。

  • 角度28161: 360°×(28161÷65536)≒154.69°
  • 目標角度61098: 360°×(61098÷65536)≒335.62°
  • 差: 154.69°-335.62°=-180.93°→正に変換し179.07°差

bbh-yard-scuttlebug-27

上記結果から分かるように差は180°以下であるため、次のクモの角度は-512(右向き)が設定される。

実際、19.16秒のフレームでは、角度は28161-512=27649、目標角度は61098が設定されていることが分かる。

bbh-yard-scuttlebug-14

このような感じで-512が続くため、時計回りとなるのである。

補足: クモがマリオを発見する条件

4.03秒の場合は、10枚箱付近でクモがマリオを発見する形となるが、これは以下2条件を両方満たしたからである。

  • 条件1: マリオ⇔クモのホームの距離が1000ユニット以下
  • 条件2: 『クモから見たマリオのいる位置への角度』と『クモの向き(角度)』の差が2048未満

※条件1を満たしたタイミングで、クモはマリオのいる位置に角度を変えるようになる(これまで紹介した動きではなくなる)。

参考動画の場合は、22.83秒以降のフレームが1000ユニット以下となっているため、このフレーム以降で条件2を達成するとクモがマリオを発見する形となる。

bbh-yard-scuttlebug-13

(2) 4.06秒(反時計回り)の場合の流れ

実際の動画は以下となる(動画時間1分5秒から)。『(1) 4.03秒(時計回り)の場合の流れ』とロジックは一緒なので復習がてら読んでみてほしい。

(2)-1 お屋敷に入るまでのパート

4.03秒と同じく、お屋敷の入口先の左上に伸びる床判定(以下フレーム)に触れた時にクモは非アクティブとなり、その場でホームの方向まで向きを変える。

具体的な流れは以下の通り。最終的にクモは角度28415で停止する。

1. 部屋番号=1に到着するとクモは非アクティブとなり、(x,z)=(1110.7,-2200.364)で停止。
bbh-yard-scuttlebug-15

2. クモの停止位置から見たホームの向き(角度)が28415と算出され、目標角度=28415が設定される。この時のクモの角度は56320。
bbh-yard-scuttlebug-16

3. 56320から28415に向けて、56320→55808→55296→54784…と1fにつき512ずつ角度を変えていく
bbh-yard-scuttlebug-17

4. 512ずつの角度変更を繰り返し、最終的に目標角度と同じ角度28415になり停止
bbh-yard-scuttlebug-18

※印のタイミングは目標角度=28415で固定されているように見えるが、実際は目標角度の処理は毎フレーム行われており、常に結果が28415となっている。

以上がマリオがお屋敷に入るまでの間で発生しているクモの処理となる。

(2)-2 庭に行くパート

次にクモが動き出すのが庭の扉に近づいてからになる(動画時間1秒45秒から)。

クモはホーム向けて移動

マリオが部屋番号28に到着したタイミングからまたクモがアクティブになる。

クモは最後(x,z)=(1110.7,-2200.364)、角度28415で停止したため、そこから移動を開始する。

bbh-yard-scuttlebug-19

4.06秒の場合も基本は目標角度=28415のまま進んでいくが、4.03秒とは違い目標角度が微妙にズレるタイミングがある。

例えば、マリオが扉を開け始めた頃の座標は(x,z)=(1118.832,-2218.635)。

bbh-yard-scuttlebug-20

この座標とホームの座標をもとにクモの目標角度が算出された結果は28424になるため、次のフレームで28415→28424に角度が変わっていることが分かる。

bbh-yard-scuttlebug-21

このような感じで、ホームにたどり着くまでの間は、28415→28424→28432→28424と少しだけ角度を変えていく。

クモはホームを通り過ぎたら角度を変える

反時計回りになる挙動をホームの一歩手前のフレームから確認してみよう。参考動画だと19.13秒のフレームとなる。

クモの座標は(x,z)=(1145.152,-2278.068)、角度は28424。

まだホーム一歩手前であるため、目標角度=28458が算出された後、クモの角度も28458になり1歩前進する。

bbh-yard-scuttlebug-22

次のフレーム(19.16秒)でホームを通り過ぎる形となる。この時のクモの座標は(x,z)=(1147.165,-2282.646)、角度は28458。

bbh-yard-scuttlebug-23

このフレームでは、4.03秒時と同様にクモの背中側にホームがある状態となるため、目標角度の計算結果は61209となる。

これを分かりやすいように度数法に変えたのが以下であり、差は180.09°であることが分かる。

  • 角度28458: 360°×(28458÷65536)≒156.32°
  • 目標角度61209: 360°×(61209÷65536)≒336.23°
  • 差: 156.32°-336.23°=-179.91°→正に変換し180.09°差

bbh-yard-scuttlebug-28

そして、差が180°を超える時は、次のクモの角度として+512(左向き)が設定される仕様となっている。

結果、次の角度として28458+512=28970が設定される。参考動画だと次のフレーム(19.20秒)で上記数値が設定されていることが分かる。

bbh-yard-scuttlebug-24

ここからは4.03秒時と同様にひたすら左向きに角度を変えることなる=反時計回りになる。

念のためもう1フレーム(19.20秒)も見てみよう。

ここでの目標角度の計算結果は61209であり、これをもとに度数法で表現したのが以下となる。

  • 角度28970: 360°×(28970÷65536)≒159.14°
  • 目標角度61537: 360°×(61537÷65536)≒338.03°
  • 差: 159.14°-338.03°=-178.89°→正に変換し181.11°差

bbh-yard-scuttlebug-29

上記から差は180°を超えるため、再度+512(左向き)が設定される。

以降も同じく、クモの向き(角度)とクモから見たホームの方向(角度)の差が常に180°を超えるため、常に左向きに移動する=反時計回りになるのである。

補足: 4.06秒における10枚箱付近の状態

ちなみに、参考動画では、22.86秒以降のフレームで『マリオ⇔クモのホームの距離が1000ユニット以下』を満たし、クモの挙動が変わっている。

bbh-yard-scuttlebug-25

初めて1000ユニット以下になったのが上記の22.86秒で、クモがマリオと同じ方向を向いていることが分かる。

そのため、クモがこの向きからこちらに向くまでに時間がかかり、10枚箱を壊してすぐに踏めない結果となる。

ざっとの確認になったが、以上が4.06秒で起こっていることである。

Q. 練習中に4.06秒で時計回りを引いたがなぜか?

A. 練習ツールのレベルリセット機能の仕様の問題となる(将来改良されると思う)。

現行(2025年)のレベルリセット機能は全てを完璧にリセットできるものではないため、実際には起こらない挙動が発生する場合がある。そのひとつがこの話となる。

原因は特定できており、本来のマリオ64では絶対に起こらないので(クモの動きに乱数要素はないので)、このスターはスターセレクト機能で練習することをオススメしたい。

まとめ

今回は、自分の覚書も込めて庭にいるクモの仕様をまとめた。

仕様の裏を突いて4.06秒でもクモがマリオのほうに来る方法などが出てきたら面白かったが、残念ながらそういったものは見つからなかった。

RTAでは、4.03秒で扉を開けることを意識すると良いと思う。