2021年1月9日土曜日

【ウディタ】イルシェラート(仮称)制作記録(2):NPCのAI

久しぶりの次回作制作記録です。

ただでさえ遅い制作スピードが麻雀にはまってしまった影響でさらに遅くなっていますが、一応すすんでます。心もまだヒビひとつない状態でやっています。

今は、山場の戦闘処理改修作業をしています。ここさえ乗り越えれば、あとは基幹処理の共通化が済んでて淡々と作業すればおわるメニュー処理とか、中身の実装作業とかなので、気楽になれます。

で、今回の記事はNPCのAI処理について書いておきます。
ケルリートのAI処理については、制作中に消しカスほども触れていないせいで、ブログに取り上げることすらできないのですが、レイユウサイ制作中の自分が詳しい記事を残してくれていましたので、参考にリンクを置いておきます。

基本の設計は当時とほとんど変わらず。「確率行動+条件付き固定行動」です。
青:レイユウサイ、緑:ケルリートでの追加、橙:イルシェラート(仮称)での追加です。
①味方属性のNPCの存在を考慮すること。
②味方/敵の仲間同士で補助ができるような処理をつくること。
③RPGらしく一定HP切ったら本気モードとかできるようにしたい。
④ある程度NPCが手加減できる仕様を入れること。
⑤状況に応じて多少戦い方を変えられるとなおよし。

⑥動作が軽いこと(NPC10体くらいを1画面内に出しても処理落ちしない)。
⑦NPCの移動に特徴を出せるようにすること(近づいたら逃げるとか)。
⑧動作設定が簡単であること。
⑨状況に応じた技能選択ができるようにすること。
⑩NPC移動方法の遷移が短時間で頻発しない工夫をすること(チャタリング防止)。
⑪SP消費の概念を持ち込むこと。
⑫壁や障害物に引っかかって止まるケースを可能な限り減らすこと。

細かい仕様や挙動は書くと長くなるので省略しますが、大筋はレイユウサイ時代とだいたい同じです。
ただ、レイユウサイ時代のままではどうにもならない部分を、ケルリートで手をいれて改良し、それでもまだ足りない部分をイルシェラート(仮称)で手を入れるというイメージでやっています。

移動処理ひとつとっても、
レイユウサイでは対象に接近するしかなかったのが、ケルリートでは接近/距離を保つ/離れると改良しています。⑩は、この3つの移動方法の使い分けの設定点が1つしかなく、その設定点付近を保つような動作をプレイヤー/NPCが取ると挙動が変になる事象を改善することを意識した項目です。2点制御化するか、一定時間遷移しないとするかで迷っているところです。
壁や障害物に関してもケルリートでだいぶ対応処理を増やしたのですが、どうも穴があるようで、デバッグログを見るとたまにエラーを吐くし、投稿されているプレイ実況を見てもちょくちょく変な場所で引っかかっているので、修正しておきたいところ。

技能使用処理に関しては、味方NPCの存在が大きくなるので、イルシェラート(仮称)ではかなり手を入れる予定です。
また、味方NPCの存在を考慮する(=複数種類の技の使い分けが可能になる)ように改良することで、これまでボスでも通常行動ではひとつかふたつの技をランダムで使ってくるくらいの表現しかできなかったのを、4種類の技をフルに使ってくるような設定が可能となるようになります。4種類の技を状況に応じて使い分けできるようになることで、今までよりも手ごたえがでるという算段。使いこなすのも難しくなりそうだけど。
これを実現するための方策としては、これまでのようなランダム行動に頼らず、戦闘中に変化するもの(相手との間合い、強化弱体化の付与、残りHPなど)を参照させて、適当な技を使うような処理を入れる予定です。

逆に改良作業の関係で妥協せざるを得ないものもあって、
確実に増える設定項目数の関係で⑧は苦しいし、いろいろな判定を増やす関係でおそらく⑥の動作の軽さも落ちるはず。軽量化はがんばってみますが、無理ならマップ設計で補うしかないですね。

といった感じの方針をもとに今週末はDBから手を入れてます。
先は長いです……。