はじめに
Physical-Burst-ProjectのCPについて気になってる人がいたので書いてみました。
アルゴリズムの解説を図とか使って解説していきます。
ゲームシステムの振り返り
このゲームにおいて、ユニットの行動は以下のプロセスで構成されます。
行動選択
- 移動
- 襲撃
- 待ち伏せ
- 行動
コマンド選択(行動or戦闘のみ)
「行動」と「戦闘」を選択した場合はどのコマンドを使うか選びます。
対象 or 移動先選択
これら全てを状況に合わせて選択できるようにアルゴリズムは設計されています。
CPのアルゴリズム
ヘイトについて
敵ユニットは戦闘に参加しているユニット毎に「ヘイト値」を持っており、これが一番高い味方ユニットを狙うようになっています。
攻撃を受けると、その攻撃を行ったユニットの「ヘイト値」がダメージに応じて増えるようになっています。
また、魔法などの「行動」はそのユニットに向けられたヘイト値を全て増加させます。(つまり、魔法を使うと全ての敵に狙われやすくなる)
行動選択について
全ての敵(ユニット)には攻撃可能範囲が設定されています。基本的には
$攻撃可能範囲 = 移動範囲+攻撃範囲$
であり、2回目の行動では
$攻撃可能範囲 = 攻撃範囲$
に設定されます。
この攻撃可能範囲にターゲットが入っているかどうかでCPの行動選択が行われます。
攻撃可能範囲にターゲットが入っている場合
ターゲットに「襲撃」を行います。(そのときのコマンド選択に関しては後々解説します。)
攻撃可能範囲にターゲットが入っていない場合
「移動」、「待ち伏せ」をそれぞれ50%で選ぶ。
「移動」の場合、ターゲットの方向に限界ギリギリまで移動する。
コマンド選択
襲撃を行う場合、コマンドを選択する必要があります。
コマンドには、敵ユニットの種類毎にそのコマンドの「出しやすさ」が設定してあります。
そしてそのコマンドの出しやすさを全て足して数直線を作り出し、数直線上にランダム点を打って、そこがどの技の範囲であるかによってコマンドを決定しています。
また、戦闘優先度が相対的に高い場合は攻撃系コマンドの「出しやすさ」を増やし、防御系コマンドの出しやすさを減らしています。
逆に、戦闘優先度が相対的に低い場合は攻撃系コマンドの「出しやすさ」を減らし、防御系コマンドの出しやすさを増やしています。
その他
戦闘の際に相手がバーストを行ったら、90%の確率で自分もバーストを行うようになっています。
また、不利な行動の際にも90%の確率でバーストを行います。
終わりに
今回はCPの実装について書いてみました。
結構このゲームに特化した特殊な実装ですが、何かコマンドバトルを行うゲームなどを作る際に参考になったら幸いです。