全員友達モードでの索敵がおかしい。†
MH参加後、そのままの設定(全員友達モード)でフィールドにでて気がついたこと。
ノンアクティブの敵がいるマップで、1発殴っては他の敵にいく「かき集め」的動作をしている。
ちょっと解析して、なんとなくわかった:Glenelgの「全員友達」の判定の結果、友人込みでの優先度ルールが過剰動作しているっぽい。
全員友達モードでは、指定したIDのキャラが友人かどうかを判定する IsFriend()が必ず「友人」の判断になっている。
たぶん、これがよくない。
この関数は同時に「ある敵が殴っているIDは、友人か?」という判定にも使われています。
つまり、全員友達モードでは、フリーの敵が『友人を殴っている』というような判断になっています。
そしてGlenelgの優先度計算の基準に以下のルールがあります:
『「ケミとホムにきている敵の合計」よりも、友人(達)への敵の方が多ければ、友人達の敵を狙う』。
つまり、画面内のフリーの敵がすべて『友人を狙っている』ので、フリーのそれを優先してしまう。
IsFriend() の判定をもうちょっと頭よく、「ターゲットがゼロ以外なら全部友人」みたいにすれば、たぶん直る。
前列移動+追従距離設定†
前列移動では「4セル先」を狙って移動する。
で、その際は休息時追従距離 DISTANCE_OWNER_REST を追従位置に設定している。
その結果、もし DISTANCE_OWNER_RESTが4より小さいと、こっちが優先されて「後ろに下がってしまう」。
NeedFollowing() の処理の問題。
どうすべきか悩みどころ。
設計上はなんのおかしな点もないんだけど、実際の振る舞いが怪しい。
REST位置を小さく設定している側が悪いといえば悪いんだけど、この値自体もあまり意味がないんだよね。
先行距離は固定設計なんだから、追従条件も固定というか自動禁止にしてしまってもいいのでは。
ご意見などがあれば。