戦闘中にセル重複を回避し、PPなどを当てやすくします。
バースリーやドリアードなどのウェブ攻撃で移動不可になっている時は、移動不可状態を判別して
セル重複していてもそのまま攻撃を続けます。
残念ながら仕様上アイテムとの重複を避けることは出来ません。
この機能のはデフォルトではオン(true)になっていますが、HateOverlapをfalseにすればオフにすることも出来ます。
また、その時移動するセル数もAwayStepで設定可能ですが、あまり長い距離を指定してもすぐに攻撃動作に戻るため
あまり意味はありません。
デフォルトで「主人に対してターゲット中の敵の後ろ側」に向かって移動します。また、絶対座標移動も可能です。
この切り替えはAwayTypeで指定します。デフォルトの相対座標移動は1、絶対座標移動させる場合は0にしてください。
また、絶対移動の時は東>南>西>北の優先順位での移動ですが、これもある程度変更できるようになりました。
AvoidDirectionの配列を変更することで、東西南北だけでなく斜め方向も含めた8方向への移動を好きなだけ指定できます。
デフォルトでは従来どおりの動きになっていますが、例えば
AvoidDirection = {{x=-1,y=0},{x=1,y=0},{x=1,y=0},{x=0,y=-1}}
と変更すると西>北>東>南の優先順位で移動するようになります。
また斜め方向は{x=1,y=1} が北東、{x=-1,y=-1} が南西といった指定になります。
この変数の指定はややこしいので、よくわからなかったらあまり触らないほうがいいです。
「座標重なり回避に関する変数」カテゴリ内、以下の変数によって設定。
HateOverlap = true セル重なり回避をするか否か
AwayStep = 2 重なり回避する時の移動セル数
AwayType = 2 重なり回避する時の移動セル数
AvoidDirection = {{x=1,y=0},{x=0,y=-1},{x=-1,y=0},{x=0,y=1}} 移動ベクトル指定
カテゴリー : AI機能, 移動系設定
タグ : 戦闘系, 移動系, 重なり回避
攻撃開始時に主人と離れている場合、攻撃対象のターゲットが自分自身に移ったとき、
主人の1マス隣まで戻って一時的に待機します。
敵が寄ってきて攻撃射程内に入ると戦闘を再開します。
ホムンクルスがアクティブ状態のときにこのモードをオンにすると、いわゆる釣り動作をすることが出来ます。
この動作は、戦闘がキャンセルされない限り一体の敵に一回だけ発動するようになっています。
また、追跡時から自分をターゲットしている=遠距離攻撃の敵に対しては発動しません
(特定の条件で発動することはありますが、しばらく待てばこの状態はタイムアウトするため、復帰します)。
デフォルトではこの動作はオフ(false)になっています。HookShot を true にするとこの機能を利用することが出来ます。
「フック攻撃に関する変数」カテゴリ内、以下の変数によって設定。
HookShot = true 敵をフックするか否か
カテゴリー : AI機能, 移動系設定
タグ : フック移動, 戦闘系, 移動系, 釣り
戦闘時に敵との距離を指定するときはAttackDistanceの数値を変えます。
1なら隣接して攻撃し、2なら1マス空けて攻撃します。0に指定することも出来ますが、大抵の場合は目標地点に到達する前に攻撃に移るためとあまり変わりません。しかし一応目標点がより敵に近い位置になるので、よりスタックしづらいかもしれません。
デフォルトでは1になっています。これ以外の数字を入れると不具合が起きますので、必ず0~2にしてください。
この設定について、2014年3月18日のアップデートで無効になりました。
敵と1マス空けで攻撃出来なくなりましたので、現在のAIでは強制的に1に再設定しています。
「通常攻撃に関する変数」カテゴリ内、以下の変数によって設定。
AttackDistance = 1 敵を攻撃するときに取る距離
カテゴリー : AI機能, 戦闘系設定
タグ : 戦闘系, 移動系, 距離
こっこAIの索敵アルゴリズムは、ポイント制になっています。
攻撃可能な敵に対し条件に応じて採点していき、その時に最もポイントの高かった敵をターゲットします。
採点内容については、誰をターゲットしているか、その敵の優先度設定はいくつか、敵との距離はどのくらいか等です。
採点式
ターゲットポイント=Σ(条件優先度×評価倍率)
実際に設定変更が可能な項目は条件優先度の値です。また、敵の個別優先度も索敵条件に関わりますが、
こちらの設定方法は操作系設定の項目を参照してください。
条件優先度
索敵をする上で、味方・敵の攻撃対象や、敵との距離、Mob.luaで設定される優先度、
平均戦闘時間などの条件があります。
これらの条件をそれぞれどの程度重要視するかの数値を条件優先度としています。
条件優先度には、以下の8つの項目があります。これらの数値を自由に設定することで、
優先的にターゲットしたい敵の傾向を決定します。
なお、0に設定した条件については、採点対象にならなくなります。
【攻撃対象の条件】
TargetPriority[TP_En2Ow] = 9 -- 敵→主人(主人を攻撃する敵に対する優先度)
TargetPriority[TP_En2Me] = 8 -- 敵→自分(自分を攻撃する敵に対する優先度)
TargetPriority[TP_En2Fr] = 6 -- 敵→友達(友達を攻撃する敵に対する優先度)
TargetPriority[TP_Ow2En] = 10 -- 主人→敵(主人が攻撃する敵に対する優先度)
TargetPriority[TP_Fr2En] = 7 -- 友達→敵(友達が攻撃する敵に対する優先度)
【設定値の条件】
TargetPriority[TP_Rec] = 3 -- 平均戦闘時間(平均戦闘時間の短さの優先度)
TargetPriority[TP_Rank] = 4 -- 設定優先度(個別優先度の優先度)
【距離の条件】
TargetPriority[TP_Dist] = 5 -- 主人からの距離(主人からの距離の優先度)
評価倍率
採点時には、条件優先度に対して、その条件をどの程度満たしているかの評価倍率を掛けます。
例えば、主人からの距離という条件に対しては「距離」の評価が掛かります。主人の隣の敵は最も高い評価となり、
画面端に居るような敵は最も低い評価となります。(ただしOnBattleDistanceより外の敵は全てポイント0になります)
評価倍率は最大値1であり、評価1の時に条件優先度の設定値がそのままポイントとして加算されることになります。
すなわち、主人との距離が1の敵と8の敵では、評価倍率が2倍近く違うことになります。
また、自分や主人、敵の攻撃対象の条件(自分を攻撃する敵、主人が攻撃する敵など)については、
満たすかどうかの評価なので、0か1が掛かります。0が掛かる場合は、当然その条件でのポイントは得られない
ことになります。
ターゲットがフリーの敵は攻撃対象の条件でポイントを得られないので、アクティブ索敵の時にフリーの敵に対しては
設定値と距離の条件のみで採点されることになります。
デフォルトでは攻撃対象の条件優先度設定値が比較的高めにされているため、
殆どの場合は攻撃対象の条件が成立する敵からターゲットされます。
友達の攻撃対象の条件については、友達の数だけ評価が分散されることになります。例えば友達が二人居る場合、それぞれ違う敵を攻撃していれば「友達が攻撃している敵」の評価倍率はそれぞれの敵に0.5ずつになります。(同じ敵を攻撃している場合は、評価倍率1になります)
それぞれの評価倍率は以下のように計算します。
平均戦闘時間 : 1 - (評価対象の平均戦闘時間÷60)
設定優先度 : 1 - (評価対象の設定優先度÷20)
主人からの距離 : 1 - (評価対象の主人からの距離÷15)
※母数は、それぞれの変数の最大値
実際の採点は以下のようにして行われます。
採点例
敵A =「主人を攻撃」×条件優先度8 + 「平均戦闘時間(4秒)」×条件優先度3
+ 「個別優先度(10)」×条件優先度5 + 「主人からの距離(3)」×条件優先度6
= 1×8 + ( 1 - 4 / 60 )×3 + ( 1 - 10 / 20 )×5 + ( 1 - ( 3 / 15 ) )×6
= 8 + 2.8 + 2.5 + 4.8
= 18.1
敵B =「自分を攻撃」×条件優先度9 + 「平均戦闘時間(6秒)」×条件優先度3
+ 「個別優先度(5)」×条件優先度5 + 「主人からの距離(5)」×条件優先度6
= 1×9 + ( 1 - 6 / 60 )×3 + ( 1 - 5 / 20 )×5 + ( 1 - ( 5 / 15 )×6
= 9 + 2.7 + 1.25 + 3.96
= 16.91
したがって、「敵Aのポイント>敵Bのポイント」により、敵Aをターゲット。
カテゴリー : AI機能, 戦闘系設定
タグ : ターゲット, 優先度, 戦闘系, 索敵