エネミー戦術変更の現況

次バージョンには、召喚系コマンドの増加も含ませることにしました。もうちょっと時間がかかりそうです。


昨年より(http://d.hatena.ne.jp/kumashige/20071124/1195835709)、敵側のコマンド戦術について思案を巡らせていたが、何人かの意見を聞いて形が定まりつつある。

私自身の需要を含め、要望をなんでもかんでも入れていると、煩雑に中庸化していくために、何をしたいのか分からないまま使えないツールになっていく。適度に不満を残しつつシンプルに見せることを重視するというあたりが、私が想像するところの限度だろう。

シンプルにと書いたが、私がしばし悩みをのぞかせた(http://d.hatena.ne.jp/kumashige/20080504/1209883049)とおり、エネミーの戦術は、スクリプトなしで考えるにはきわめて難しい分野の話になる。予想より複雑になってしまった。

以下、どこかで見たようなゲームレビューサイトのヨイショ記事のようだが、それは忘れて元気よくいってみよう。


次バージョンの現況。エネミーのコマンドには、それを使う条件を指定できるようになった。大まかに分けて、「コマンドを使う優先度」と「対象に決める優先度」を、条件つきで指定する。

リストの中、使う条件を設定したエネミーのコマンドの下には、その条件が表示される。


設定するとどうなるか

条件の中身を見る前に、設定するとどんなことが起きるか。まず先日お伝えした通り、シナリオ作者向けの環境で、戦闘中に敵の戦術を表示できるようになったことから。

以下は、エネミーの一体、「ダークプリースト」の持つコマンドだ。表示されている情報のうち、順位はそのコマンドを使いやすい順、括弧内の数値は使う確率を示す。確率の左にある数値は「優先度」だ。これは重要そうでさほど重要でない、あまり意識しなくていい数値になっている。シナリオ作者にとって必要なのは「確率」なのだ。

なお、優先度が未設定の場合、「コマンドの条件を満たす全コマンドが同じ確率」で選ばれる。

ダークプリーストのコマンドは、見ての通り格闘・HP回復・マモリ増強の三択。実はこれに加えて、「グループ蘇生」という蘇生コマンドを加えてあるのだが、まだ死者が一体もいないので、候補に挙がっていないだけだ。ほら「対象者に必要なステート」という項目がコマンドにあっただろう。あそこで「死亡」を指定しているので、誰も死んでいなければ対象もいない、ということで候補にさえ上がってこないのだ。まあそれはいい。

で、最初のターン。プレイヤーがあっけなくコボルドを全滅させた。すると……

第二ターン、先ほどのダークプリーストが、「グループ蘇生」を使う気満々になった。使用率が七割を超えている。以下、コマンド使用率を対象別に見てみる。

見ての通り、照準は第一グループの「コボルド」。案の定、第二ターンでダークプリーストは、コボルドを全員蘇らせた。

設定内容

この設定内容を大まかに見てみる。ダークプリーストが「グループ蘇生」を高確率で使う指定はさほど難しくない。エネミーコマンドの「グループ蘇生」ところで条件を追加するボタンを押し、対象が「死亡」ステートを持っているかどうか。それを条件に指定するのだ。(以下の画像はリンクになっています)

条件には、「実行者の条件」と「対象者の条件」があるが、両方とも任意でよい。もし両方とも条件を指定しなければ、必ず優先度が変化することになる。

条件を満たせば、そのコマンドをどう料理するか、あとは「優先度」の問題になる。そのコマンドを必ず使うこともできるし、必ず使わないこともできる。あるいは、その対象を必ず指定することもできるし、必ず対象から外すこともできる。

冒頭で少し述べたように、「コマンドの優先度」それと「対象の優先度」、この二つのうちいずれか、あるいは両方を指定することで、コマンドを使う率を変えるのだ(対象の優先度は、全体コマンドや自分向けコマンドでは設定が表示されない。必要がない)。

それと、今回は条件を少しだけひねってある。それは対象に合致する条件、すなわち「死亡ステートを持っている」キャラクタが「全員」のグループだけを探しているところだ。

ダークプリーストは、全員が死んでいる仲間のグループを見つけると、そのグループに蘇生を掛ける確率を9倍にする。3体のうち1体だけが死んでいても、蘇生コマンドはあまり使ってくれない。全員死んでいるグループだけを強く優先する。そういう設定だ。

条件には何を指定できるか

実行者と対象者に、どんな条件を指定できるかは、以下を見ればだいたい分かるかもしれない(ただし今日時点で、まだ実装されていないものも若干。一部、未サポートにするかもしれない)。

たとえばターン指定で。HPの残量をパーセントで、あるいは値で、といった条件。

ステートの数。死んだ仲間の数。

「所属」を指定しても面白いかもしれない。これによって、パーティの僧侶だけをタコ殴りにして、街にお帰りいただく作り方もできる。むしろ悪の性格の者が6人揃ったパーティには、シャレでダークプリーストが回復呪文をかけてくれるかもしれない!(本当はステートに対応した時点で、所属の機能はいらない。所属に判定用のステートを与えれば同じこと)

「威力平均の対象値割合」というのは、旧AIでも重視していた項目だ。攻撃コマンドの威力と対象能力値(普通はHP)を比べる機能。これによって「命中したとき、一撃でHPをゼロにできるか」をチェックできる。死者二名以上が予想されるコマンドがあればそれを使い、いなければ逃げる、なんて設定もできるわけだ。

いくつかの項目は、順位を指定できる。たとえばHP残量の多い順(あるいは少ない順)にとって、上位三位までに対する優先度を変えることができる。

この優先度、実行者の順位を条件にすることもできるので、たとえばHPがグループ内でもっとも少ないエネミーだけ、特別な行動をとらせることもできる。

ただしあくまで条件は、「実行者」と「コマンドの対象者」に関することに絞られる。関係のない情報を判定するには、設定画面をだいぶ複雑にしないとできないので、実行/対象以外の要素には触れないようにした。

抜けてはいけない設定内容

コマンドの条件のことを忘れてはいけない。むしろそちらをしっかりやるのが先だろう。例の「対象者の条件」やら何やら、コマンドは従来通り、ステートなどによる使用条件を指定すべきだ。条件に見合わない相手は、はじめから除外し、先の条件判定にさえ飛んでこない。

たとえば、死者には使えないコマンド(蘇生以外の大半)は、今回の条件設定にかかわらず死者に対し使うことはできない。その点はこれまでと同じだ。

厳しい欠点

欠点は、不慣れなうちはかなり微調整が大変なこと。

以前述べた問題点をなるべく克服するよう設計した結果、優先度はコマンドにひとつと、対象にひとつという、二段仕込みにならざるを得なかった。前回書いた通り、「必ず使う(使わない)条件指定」が有意なシステムになっていることは明記したい。優先度をN倍にするといった調整の仕方は、実際にやってみると分かるが、細かにやると大変そうだ。

これだけの機能を付けてみたが正直なところ、私は百体以上のモンスターの全コマンドに、この条件と優先度を練り込む覚悟はない。多くのモンスターは、デフォルトのギャンブルゲームで我慢することも必要だろう。コマンド側で対象条件を絞れば、愚かな思考レベルは脱しないものの、ゲームバランスを維持する程度の戦闘はできるはずなのだ。古きウィザードリィドラゴンクエスト3のモンスターも愚かもの揃いだったが、とてもいいゲームだった。

まぁ、慣れれば随分と違うのかもしれないが、私自身、テスト程度にしか触れていないので実際、これが使えるかどうか。これでもだいぶ使いやすくしたつもりだが、私も時間との戦いの中でやっているので、どうしてもユーザーフレンドリーなインターフェース作りには限度がある。

エネミーの戦術に限らず、Desigeon自身も、それによって作る作品も、懲り始めると完成しない。


ということらしいのねん。