昨日の一件を受けて、戦闘時の敵のAIについて修正・調査しました。
その結果、ほとんどの敵のAIは
問題なく動作していたことがわかりました。
哀鬱戦記での敵のAIの基本パターンは以下の通り。
実際にはこれをベースに、特殊な判定を行う敵もいます。
- 乱数型
- 乱数型+
(状態異常系スキルにて、既に対象がその状態である場合は使用しない)
- 最大ダメージ型
(ダメージが高いほど高確率で使用)
- 期待値型
(ダメージ×命中率が高いほど高確率で使用)
このうち不具合が発生していたのは
最大ダメージ型・
期待値型。
乱数型・
乱数型+では既に確率係数が計算されていました。
ほとんどのザコは乱数型で、期待値型は一部強ザコやボスにて使用されています。
期待値を計算して最適な行動を取るタイプなので下手に補正をかけるより強くなっている可能性はあるのですが、
個性付けという観点から見ると少し気になるところ。
いずれにせよ、思ったほど深刻な不具合ではなかったので安心……していいのか。
どの道初歩的なミスがあったのは事実なんですよね……。
以下、期待値型のAI処理について解説。
マニアックで数字が多い割に当たり前の内容なので、以下続きを読むにて。
期待値型のAI処理
仮に以下の行動を取る敵がいるとします。
また、パーティにはバジル・セリカがいます。
スキル | 確率係数 |
通常攻撃 |
50 |
ポンアペ
(弱火魔法) |
100 |
攻撃よりも魔法を使う傾向があるものの、なるべく最善の行動を取る敵というコンセプト。
1.敵味方問わず、全てのスキル・対象について使用可能か判断します。
使用可能な場合、ダメージと命中率を計算します。
スキル | 対象 | 確率係数 | ダメージ | 命中率 |
通常攻撃 |
バジル |
50 |
100 |
90.3% |
通常攻撃 |
セリカ |
50 |
150 |
85.5% |
ポンアペ |
バジル |
100 |
150 |
99.0% |
ポンアペ |
セリカ |
100 |
100 |
99.0% |
この場合、装備の差によってダメージや命中率に差が出ています。
バジル:物防高・魔防低・回避率5%
セリカ:物防低・魔防高・回避率10%
実際には自分自身含む敵についてもダメージ計算をしていますが割愛。
状態異常等についても能力値を元に疑似ダメージを計算。
また、回復系スキルも同じ方法で計算します。
2.ダメージと命中率、確率係数から採用有効度を計算する
スキル | 対象 | 確率係数 | ダメージ | 命中率 | 期待値 | 採用有効度 |
通常攻撃 |
バジル |
50 |
100 |
90.3% |
90.3 |
4513 |
通常攻撃 |
セリカ |
50 |
150 |
85.5% |
128.3 |
6413 |
ポンアペ |
バジル |
100 |
150 |
99.0% |
148.5 |
14850 |
ポンアペ |
セリカ |
100 |
100 |
99.0% |
99.0 |
9900 |
期待値:
ダメージ×
命中率
採用有効度:
ダメージ×
命中率×
確率係数
3.採用有効度に応じてランダムで行動を決定
スキル | 対象 | 確率係数 | ダメージ | 命中率 | 期待値 | 採用有効度 | 本来の行動確率 | 実際の行動確率 |
通常攻撃 |
バジル |
50 |
100 |
90.3% |
90.3 |
4513 |
12.65% |
19.37% |
通常攻撃 |
セリカ |
50 |
150 |
85.5% |
128.3 |
6413 |
17.97% |
27.52% |
ポンアペ |
バジル |
100 |
150 |
99.0% |
148.5 |
14850 |
41.63% |
31.87% |
ポンアペ |
セリカ |
100 |
100 |
99.0% |
99.0 |
9900 |
27.75% |
21.24% |
行動確率をグラフにするとこんな感じ。
横棒グラフにしたとき順番が逆になるんですがこれどうやって直せばいいんですかね?
図を見るとわかる通り、本来火魔法をメインに使うはずが通常攻撃も頻繁に使うようになっています。
ただ、これによってゲームバランスにどこまで影響が出るかとなると微妙なところ。
個性付けに反する行動を取るとはいえ、一応状況に応じて適切な行動を取っています。
ゲームバランスに何らかの影響が出そうなのですが、これによって難易度が上がるか下がるか、そして面白くなるかはよくわかりません……。
……確率係数が一番重要になる乱数型で不具合が起きていない以上、直さなくても大丈夫?