さけのさかなのブログ

同人ゲーム開発やってます。Unity使ったりする。

SRPGのボスAI

1. はしがき

 SRPGのボス戦は得てして単調なものになりかねない。それをAIのカスタマイズで解決する。

2. ザコ戦とボス戦

 ザコとボスの違いは何か。数である。とりあえず、ここではそういうものとする。

  • ザコは徒党を組み、プレイヤーになで斬りにされる。
  • ボスは単騎で戦う。プレイヤーは一体のボス相手に対してじっくりと向かい合うことになる。

 バトルシステムを設計する際には、この2種類の敵を置けるように機能を作ることになる。

3. ボスの要件

 プレイヤーに飽きられないよう、バトルには起伏が求められる。ザコ戦はまあいいだろう。ウェーブや倒す順番などによって状況が変化するからだ。問題はボスだ。素朴に作れば、HPバーの残量を少しずつ減らすだけの退屈なボス戦になりかねない。

 ではどうするかというと、ボスユニットが多彩な行動をとれば良い。「毎ターン違うスキルを使ってくる」とか、「戦闘が始まってもしばらく待機して、動き始めたら自分にバフをうち、ピンチになったら奥の手で粘る」といった具合だ。

 だが、これを純粋なAIのロジックで実現するのは難しい。AIはふつう最善手を打つように組むからだ。とりあえず作ってみると、単調に最強技を連発してプレイヤーを全滅させる(もしくは、息切れを起こしてジリ貧になる)味気ないボスができあがるだろう。毎ターンはどうほう連発はファミコン時代の話である。

4. AIをカスタマイズする

 簡単な方法を考える。AIの思考を制限してやればよい。同じ行動を連続してほしくないなら、しないように組めばいいのだ。結果として「強スキルがあるのになぜか使ってこない舐めプAI」となってしまうが、ここは妥協する。

 ポイントとしては、スキルデータなどの共通部分ではなくてユニットごとのプロパティで設定できるようにすること。これは変更時の副作用を小さくする意図がある。悪い実装だと、「ある敵を調整したら別の敵の動きが変になった」といった現象が起こり得る。

 MSTでは以下のような制限を組めるようにした。

  • 起動制限:ターンが回ってきても何回かは行動せずその場で待機するよう設定できる。この設定はダメージを受けると解除して即行動開始する。
  • HP制限:HPが一定以上だとそのスキルを使わないように設定できる。ピンチになった時に使う「奥の手」だ。ついでに条件を満たしたらセリフでも言わせると良い感じになる。
  • 連発制限:そのスキルを使った後、数ターンは使わないように設定できる。強力すぎて連発させられないスキルに適用する。また、とにかくいろんなスキルを(なんならランダムっぽく)使わせたいとき。

 AIに制限を設けると、ひるがえって数値としては強くすることができる。「強力な攻撃がとんできてパーティが半壊したが、次のターンはデレてなんとか立て直した」みたいな九死に一生の展開は、開発者が意図して組めるものである。

5. その他のアプローチ

 正攻法でやるなら、最善手をうっていれば千変万化する派手な動きになるようにゲームのルールが敷かれていれば良い。が、これはとてつもなく難しい。これができたらひょっとすると対人戦に堪えるシステムになっているのではないだろうか。とはいえある程度は意識する価値はある。うまくいけばプレイヤーが動かしたときも楽しい動きになっているだろう。(多分だけどバフ関係がかなり複雑なシステムになるのではと思う。また、単純なMP制ではなく別のリソース方式を考えたほうがよさそうだ。)

 もちろん、そもそもボスの動きなんて単調でも良くない?という考え方はある。たとえば育成パートで思考させるゲームなら、バトルパートはわりと単純でも良かったりするし。