こんばんは、所長です。
統合版でモンスターの湧き範囲が変わったということで、トラップタワーの制作を考えています。というか制作中。
ランダムウォークを利用して落とし穴に落とすタイプでやってみてるんですが、どうもランダムウォークの動きが思ってるのと違うな~ってことで、検証した結果を備忘録として残しておきます。
ランダムウォークとは
そもそもランダムウォークとはなんなのか。
ズバリ、モンスターの歩行AIです。
モンスターってプレイヤーを見つけたら襲ってきますけど、そうでなければその辺をウロウロと歩いていますよね?
実はこれって適当に歩いてるんじゃなくて、「ココならイケます」「ココにはイケません」っていうのをアルゴリズムに沿って判定しながら歩いてるんです。
そのアルゴリズムを逆手にとれば落とし穴に誘導したりできるので、トラップタワーに組み込むと効率アップが見込めるんですね。
そのためにランダムウォークのアルゴリズムを暴き出しましょう、というお話です。
基本的には「ランダムウォーク」で検索すると表示される、上記2ページとの差異について検証していきます。
プレイヤーとの距離が32ブロック離れても大丈夫
プレイヤーとの距離が32ブロック以上離れている状態が続くとランダムウォークしなくなる説。
これが真だとランダムウォーク型のトラップタワーはほぼ機能しないため、是が非でもクリアして欲しい項目ですが・・・
スポーン後、しばらく待っても遠くのゾンビが動いてるので問題ないでしょう。
私の検証はこれくらい雑なもんです(‘-‘)
透過ブロックは移動先にならない
ガラスブロックやハーフブロックなど、透過ブロックは移動先にならない説。
下付きハーフブロック、上付きハーフブロック、ガラス、階段で検証してみましょう。(地面からは十分高さを離しています)
移動しません。透過ブロックは移動先にならないようです。
透過ブロックの下に不透過ブロックがある場合
透過ブロックの真下に3×3で不透過ブロックを置いてみました。
下付きハーフブロックのところだけがら空き。
ただし行こうとした形跡はあります。
「移動先までの移動経路がなければ最寄りのブロックまで近寄る」という特性から、不透過ブロックを移動先として認識しているものの、下付きハーフブロックを移動経路として認識していないようです。
これはどこかで使えそうですねえ!
ランダムウォークの範囲
続いてはメインとなる、ランダムウォークの範囲について。
モンスターが乗っているブロックを中心として、
- 上下に7ブロック
- 水平方向に10ブロック
21×21×15がランダムウォークの範囲とされています。
下への移動範囲
移動先に選択されないガラスブロックを間に置いて、7ブロック下の不透過ブロックまで移動するか見てみましょう。
・・・待てど暮らせど移動しません。
ゾンビを増やすことでヒット率を上げてみても結果は同じ。
6ブロックだとあっさり行ったり来たりします。下方向への移動範囲は6ブロックのようです。
上への移動範囲
上方向も7ブロックでチェックしたものの移動せず。
6ブロックなら移動しました。上方向への移動範囲は6ブロックのようです。
水平方向への移動範囲
水平方向は10ブロック先への移動を確認。
10ブロックの位置に黄色いガラスを置いて11ブロック目を不透過ブロックにしてみたところ、移動しません。
水平方向への移動範囲は10ブロックのようです。
10ブロック先の6ブロック上にも移動できたので、範囲が球状ということもなさそうです。
以上の結果から、ランダムウォーク範囲は21×21×15ではなく、21×21×13で良さそうですね。
積み上げたブロックは移動先になる
距離10、高さ6の位置に不透過ブロックを並べると移動先と認識して、最寄りのブロック = 真下のガラスブロックまで移動します。
ではその不透過ブロックの上に1ブロック積み上げて、高さ6と7にしたらどうなるでしょう?
見た目では移動先が”潰された”ように見えますが・・・
無事、動いてくれました。
このことから、移動先の上に不透過ブロックが置かれていても移動先と認識することが分かります。
トラップタワーでありがちな四方を壁で囲む方式では、ランダムウォーク範囲内の壁すべてが移動先に選ばれる可能性があるため注意せねばなりません。
移動先は近いが、移動経路が遠い場合
移動先は範囲内にあるが、移動経路が距離が遠いときにどうするか。
最寄りのブロックで止まりました。
しかし移動経路をランダムウォーク範囲に収まらない程度に近づけた状態で再検証すると登っていきました。
詳しいアルゴリズムは分かりませんけど、移動中でも有効な移動経路を探索する・・・とか?
まとめ
- モンスターはプレイヤーとの距離が32ブロック離れてもランダムウォークを行う
- 透過ブロック(ガラスなど)は移動先として認識されず、下付きハーフブロックは移動経路としても認識されない
- ランダムウォークの範囲は21×21×13
- ブロック上に不透過ブロックがあっても移動先として認識する
- 移動中でも有効な移動経路を探索し、見つかればルートを切り替える(?)
ざっくりと検証できました。
トラップタワーを制作する上では、ランダムウォークの範囲が上下7ブロック⇒6ブロックになってるのが意外と大きくて、高さをシビアに設計しないと落下穴に誘導する確率が低下しそうです。
統合版は湧き上限が厳しくてトラップタワーで効率が出しにくいので、得た情報を活かしてできるだけ効率を高めたトラップタワーを作れるよう頑張らねば~。
以上、ランダムウォーク範囲の検証でした。ではまた!(‘-‘)ノ
コメント
32ブロック先でもランダムウォークを継続するのはわかったのですが いったいどの程度の距離までランダムウォークをするのでしょうか?
54ブロック離れるとデスポーンするらしいのですが そのギリギリの範囲までランダムウォークするのでしょうか?
すると思います
1.16.2でスポーン範囲が縮小され、地表判定削除方法も変わったみたいです
記事を更新する予定はありますか?
確認してみましたが、特に変更点はないようです。
一番怪しそうな、下付きハーフブロックが移動経路にならない部分もそのままでした。