投稿者:

[FE7] The Official AI Documentation Thread

対象は烈火のみですが、それについての解析スレッドを見たので、取り上げてみた。
他の作品にもかなり通用する内容だと思います。

作ったのでこちらもどうぞ「烈火・聖魔の敵AI表


AIは4つの設定がある。

  • 攻撃AI – AI byte 1
  • 移動AI – AI byte 2
  • 回復AI + 標的AI – AI Byte 3
  • AI byte 4

まず、敵の行動は攻撃AIで決められる。そしてそれが、不可能だったり完了済みならば、移動AIで決められた行動をする。基本的に、攻撃AIは、攻撃・杖・盗むなどの行動の指定であり、移動AIは主に移動の指定である。

攻撃AIポインタテーブル: 0xC07C54(20個)《聖魔:0x5D308C》
移動AIポインタテーブル: 0xC07BC8(35個)《聖魔:0x5D3040》

ポインタテーブルに4Byte刻みで順にアドレスが並び、AIは16Byteで構成されている。


  • メモリ上に展開されたAI

Bytes 64-69: [AI3] [AI4] [AI1] [AI1C] [AI2] [AI2C]
AI1C = AI 1 counter. AI2C = AI 2 counter.
These bytes keep track of the next 16-byte AI command to execute.

参考までに。



  • 攻撃AI – AI byte 1

行動の優先順位は 杖>盗み>攻撃(アーチ含む) となっている。

烈火・聖魔の敵AI表


  • 杖について

複数の杖を所持していた場合は、武器ランクが高い方を使う。
同じ武器ランクだった場合、下にある方を使う。


  • 攻撃杖について

バサークとスリープは武器を装備していないキャラを対象にしない。
サイレスは使える杖を持っていないキャラを対象にしない。

命中率が4以下の場合は使わない。この計算は、敵が動く前の位置でされるので、近づけば命中が上がる場合でも使わない。他にも、杖を使用する際、敵が近すぎる場合は離れようとするが、その影響で命中が4以下になっても構わず使う。

上の条件に加えて、出撃順が最後のキャラから優先して狙う。
(これは、範囲内の敵を出撃表順に命中率を計算し、全員計算したうえで狙いを決めるという仕様上の挙動っぽい)


  • 回復杖について

回復杖を所持しているユニットは回復モードに入ったユニットが範囲内に居たら回復を行う。(回復モードについては後に)
攻撃AIが0x0Eの場合は、回復モードに入っていなくても回復を行う。



  • 移動AI – AI byte 2

烈火・聖魔の敵AI表

  • 0x00と0x1Cの違い

0x00は、壁などで道がふさがっている場合は動かない。扉が開いた、壁が壊れたなどで道が開けた場合は動き出す。0x1Cは道がふさがっていても接近する。(砂漠地下のハードキシュナ)

  • 座標移動AI

目的地に到着し待機しているとき、攻撃範囲内に相手が侵入した場合は相手に向かっていく。その後、相手が範囲内から居なくなった場合、0x13, 0x14, 0x15, 0x16, 0x1Dは目的地に戻る。(護衛型)0x17, 0x19, 0x1A, 0x1Eは戻らない。(遊撃型)

  • 標的移動AI

0x0D-0x11は、標的が味方の場合、標的が攻撃範囲内に居る時は、攻撃範囲外であろうと敵に向かっていく。しかし、その移動によって標的が攻撃範囲外に出てしまうと、また標的の元に戻るのを繰り返す。(遊撃型)
0x21と0x22は、標的が味方の場合、標的が攻撃範囲内に居る時は、そのまま待機する。攻撃範囲内に敵がいれば、攻撃に向かう。(護衛型)



  • 回復AI + 標的AI – AI Byte 3

3Byte目の下位3bitsが回復AIの設定に使われており、残りの上位4-8bitsが標的AIに使われています。
実際の値は、ふたつを足したものです。 (AI3 0x09 = 回復AI 0x01 + 標的AI 0x08)


  • 回復AI

ユニットはHPが決められた割合以下になると、回復モードに入ります。
回復モードに入ると、以下の状態になります。

  • 回復アイテムを持っていた場合、退避してそれを使う
  • 味方の回復対象になる(三体以上が回復モードになったらヒーラーに壁を作る?)
  • ヒーラーに向かって退避する(敵の範囲外に立てる場合のみ)
  • 近くの砦に退避する(敵の範囲外の砦のみ)

回復モードの条件は以下
0x00 弱気 = 50%以下で回復モードに入り、100%回復したら戻る
0x01 ふつう = 30%以下で回復モードに入り、80%以上回復したら戻る
0x02 強気 = 10%以下で回復モードに入り、50%以上回復したら戻る
0x03 オオヨワ = 80%以下で回復モードに入り、100%回復したら戻る
0x04 いけいけ = 回復モードにならない

基準
0x00: C06550 (64 32)
0x01: C06554 (50 1E)
0x02: C06558 (32 0A)
0x03: C0655C (64 50)

<聖魔: 5D2298~>


  • 標的AI

AIは、ターゲットポイント(TP)を計算し、それがもっとも高くなった攻撃対象を攻撃します。
TPの計算は、手持ちの装備を上から順に計算します。そして、装備ごとに範囲内の敵を出撃表の上から順に計算します。TPの量が被った場合は、武器、出撃表、共に下にある物を優先します。

標的AIは6種類(0x00、0x08、0x10、0x18、0x20、0x28)あります。
それによって、標的を選ぶにあたって何を優先するかが変わります。

0x1D8F88
名称未設定

例えば標的AIが0x08ならば「③敵との距離優先度」は2で、2倍です。

標的選択の判断基準は8項目があり、それぞれに優先度(警戒度)を設定できます。優先度は0含むα倍を設定できます(ゼロなら無視)。
TP計算結果に優先度を乗算し、最後にすべて合算したものが、最終TPです。

なお、主に0x00、0x08の標的AIが使われています。

 


▽以下項目の説明

    ①致死ダメージ&最終ダメージ優先度【0x00】(0x394c4)

もし致死ダメージを与えられる敵なら、この項目のTPは50固定です(優先度無視)

致死ダメージを与えられない場合のTPは「命中率xダメージ/100」の値を計算します。なお、この計算に追撃は考慮されません。
加算されるTP上限は40です。(上限は優先度を乗算した値にかかります)

 

    ②敵の残りHP優先度【0x01】(0x39524)

「20-敵の残りHP」で計算されます。全部の攻撃が当たると想定して計算します。この計算が0以下になれば0です。
例を挙げると、HP30の敵に25ダメージを与えられるとすると、敵の残りHPは5なので、20-5=15で「15」が計算結果です。

 

    ③敵との距離優先度【0x02】(0x39548)

動く前の位置関係もTPに加算されます。

名称未設定

なんか図が欠けてますが、これはプログラムのバグだそうです。

加算されるTP上限は10です。

 

    ④敵のクラス優先度【0x03】(0x395ec)

優先して狙うクラスの設定ができます。項目00~09に設定してある値と優先度を乗算したものがTPです。
優先クラス設定のポインタは0xC0639C以降にあり、敵がどのクラスでもない場合は、09(ゼロ)を乗算します。

例えば、0xC063A0のポインタで指定されたクラスは「④の値」と「01の値」を乗算したものがTPです。
ただし、烈火・聖魔ではポインタのクラス指定がすべてゼロなので、意味がありません。封印だけに設定されています。

加算されるTP上限は20です。

 

    ⑤現在ターン優先度【0x04】(0x39620)

現在のターン数がTPに加算されます(?)

 

    ⑥反撃ダメージ警戒度【0x05】(0x39638)

反撃されない場合は、10の優先ポイントとなります。(警戒度無視)

反撃を受ける場合のTPは「命中率xダメージ/100」の値を計算します。なお、この計算に追撃は考慮されません。

減算されるTP下限は40です。

 

    ⑦包囲警戒度【0x06】(0x39698)

標的AIには攻撃するときの位置取りにも影響します。
攻撃すると敵の攻撃範囲に入る場合、敵ごとに「力+一番強い武器の威力/2」の値を計算し、それを合算した値を8で除算した結果をTPから減算します。

力8、てつ剣(威力5)のリン: (8 + 5)/2 = 6
力13、手槍(威力6)はがね槍(威力10)のセイン: (13 + 10)/2 = 11
攻撃するとリンの攻撃範囲に入る場合: TP penalty = 6/8 = 0
攻撃するとセインの攻撃範囲に入る場合: TP penalty = 11/8 = 1
攻撃するとリンとセインの攻撃範囲に入る場合: TP penalty = (6 + 11)/8 = 2

減算されるTP下限は20です。

 

    ⑧自分の残りHP警戒度【0x07】(0x396d0)

「20-自分の残りHP」で計算されます。全部の攻撃が当たると想定して計算します。この計算が0以下になれば0です。

①~⑧すべての値を足して40倍したものが合計TPです。

TP from each weapon-target option gets compared at 080386F0

 


・AI byte 4

AI4 = 0x20: 回復モードに入っても、退避行動を起こさない。

回復アイテムも動かないで使用し、砦にも逃げない。また、攻撃AI【0x03】のような挙動になる。

(元スレ)
http://feuniverse.us/t/fe7-the-official-ai-documentation-thread/348/