人生

やっていきましょう

今日はボスの行動パターンを作っていたが、現時点で直面している課題がなかなか困難なものであり、早くも自分が始めたことに対して後悔を抱きはじめた。

その課題とはおよそボス戦をどう作ればいいかという問題に尽きるのだが、ほとんど単純なものを作るのでさえ明確な方針を立てられずにいる。開発経験のない自分には当然知識がなく、何をすればいいのか分からない。

そもそもボス戦とは何かというところから考え始める必要があった。プレイヤー視点からすれば強敵と戦うイベントということになるが、これをもう少し具体的な説明に置き換えてみる。

まずボス戦というものは様々な方法を駆使して主人公とボスが互いにHP削り合うものである。主人公は与えられたスキルと操作を駆使して、ボスは予め組み込まれたロジックにしたがって相手のHPに働きかける。

主人公の攻撃の基本は、主人公の技がボスと衝突した際にダメージを与えるということだ。この技の発動のタイミングは主人公、すなわちプレイヤーの任意によって決まる。プレイヤーは与えられたスキルを発動するために所定のキーを入力する。そのタイミングがうまく合えば相手にダメージを与えることができる。

対してボスの攻撃の基本は、ボスの技と主人公が衝突した際にダメージを与えるということ。この技が発動するタイミングはロジックによって決められる。従って攻撃はパターン化しており、プレイヤーはそれらを個別に対処していけば被ダメージを減らすことができる。

この両者が互いに別であるという認識を常にはっきりさせておく。そうしないと何が何だか分からなくなる。

次にそれぞれのイベントをどのように処理できるかを考える。現時点での主人公の技はボスに直接接触して体当たりするのみである。したがって主人公とボスのマップイベントが接触した際に計算(コモンイベント)が発動するように設定しておく。ゲームは攻撃力防御力といった複雑な計算はなくどちらのレベルが大きいかだけで決まるので、超えるか以下かで場合分けしてダメージ処理を行う。

問題はボスの行動についてだ。どのようにすればボスの攻撃を自動化できるか。自分が考えたのはイベントを周期化すること。そして条件に応じて発動する技を変化させることだ。

例えば自分はボスについて以下のロジックを考えてみた。まず3体のモンスターを召喚する。その後10秒間通常攻撃をする。その後相手は姿を消し、再びモンスターを召喚して姿を現す。このときボスのHP残量が40%以下だと強力な特殊技を発動する。ここでイベントの頭に戻る。これをマップ上の並列実行で行う。

これでうまくいくと考えていたが問題があった。まず並列実行で10秒間発動を待機するということができなかった。通常ウディタではウェイト機能を用いるが、なぜか並列実行ではうまく行えなかった。自動化なら強制的にウェイトが発動するが、主人公を動かしながら処理するためには並列実行でなければならない。

この秒数の問題を自分は変数のカウントを用いることで疑似的に対処した。ある変数Xに任意の数値を代入する。この数値が0になるまでひたすら減算1を繰り返させる。この処理にかかる時間がウェイト(1/60秒)に相当する。これはウディタのFPSに対応している。だから例えば10秒待機させたいという時は変数に600を代入すればよい。

このカウントが0になった時ボスの行動パターンを変える。姿を消すという演出を行ったが案の定並列実行ではうまく機能しなかったので、マップイベントの移動ルートをカスタムから設定(主人公から離れながら不透明度を0に)することでうまく対処できた。このボスの消失を円滑に行うためにここでも疑似ウェイトを設定した(使っていくうちにこの方法がかなり有用であることが分かってきた。画面上にこの変数を仮表示して正常に機能しているかどうかを確認することもできる)。

これで一応の下地はできた。あとはモンスターの召喚と特殊技をどのように組み込むかだ。主人公の攻撃についてもこれから作っていく。