こんにちは。トイロジックでプログラマをしています、ナベです。以前、『NieR Replicant ver.1.22474487139…』(以下、本作)のオートバトルについての記事をお送りしましたが、今回はオートバトルの中でもオート魔法を中心に、ゲーム開発での仕様についてのお話をしていこうと思います。なお、今回はコードは出てきません。
要望から仕様を汲み取る
ゲーム開発において、最初から全ての仕様が確定して、それらが仕様書に記載されていることは稀です。事前に考えられる範囲での条件分岐やパラメータなどは提示されますが、実際に開発を進めていくと、それまで見えていなかった新たな問題や影響が明らかになったり、より面白くするための調整が必要になったりと、様々なことが起こり得ます。
その都度プログラマは他セクションのスタッフと協力して、より良い解決方法を模索することになります。ゲームプログラマの仕事は、依頼された内容をただコードに変換するだけではありません。
本作のオートバトル開発においても、初期の仕様は要望リストに近い状態でした。そこでまずは過去の議事録からオートバトルについて触れられている箇所をリストアップし、要望リストと合わせて本作で実現したい内容をプランナーから聞き取り、目標とする形を明らかにしていきました。そのうえで、操作キャラクターが実際に実行可能なアクションを踏まえ、オートバトル機能の作成に必要な要素とフローを整理していきました。
また、要望リストには『なるべく』、『かっこよく』、『その場に適した』といった曖昧な表現もみられたため、具体的にどのような条件、頻度、優先順位などで行動を分岐させるかを、プランナーと話し合いながら決めていきました。
オート魔法の仕様と実装
本作のオート魔法は、複数の魔法を敵キャラクターとの距離や位置関係などの状況に応じて使い分けています。実装にあたって念頭に置いたのは、人間がどのような判断を下しているか、ということです。
人間が本作の戦闘パートをプレイする際には、画面内の敵と味方キャラクターの配置や地形、現在のステータスを認識したうえで、より有利に戦える場所はどこか、より優先して攻撃すべき敵はどれか、より効率よく敵を攻撃できる魔法はどれか、選択した魔法は現在使えるか、魔法を無駄にしない発動タイミングはいつか、などの様々な判断を経て最終的な行動を決定していると考え、これらの判断をシステムに肩代わりさせる形でオート魔法に適用しました。中でも攻撃対象の選択、魔法の選択、魔法の発動タイミングについては、次のように条件を設定しました。
攻撃対象の選択
ボスが存在すればボスを優先する。
ボスが存在しなければロックオンしている敵を優先する。
敵をロックオンしていない場合は操作キャラクターの前方にいる敵を優先する。
ただし、無敵状態や非戦闘状態の敵、魔法が通用しない敵は攻撃対象から除外する。
魔法の選択
操作キャラクターを中心とした一定範囲内に存在する敵の数や位置を調べ、射程内に敵が1体以上存在する魔法を候補とする。候補の中から、攻撃対象の敵を射程内に捉えている魔法について、射程が短いものから順に、実際に選択するか否かを抽選する。このとき、直前に選択した魔法は連続使用を抑えるために候補の中で最後に抽選する。
魔法の発動タイミング
選択した魔法が攻撃対象の敵に命中する場合とする。操作キャラクターと攻撃対象との間に障害物が存在した場合は、障害物がなくなるまで発動を遅延させる。複数の敵を同時に攻撃可能な魔法の場合は、攻撃対象を含めた敵が一定数以上攻撃範囲内に存在した場合とする。もし発動前に攻撃範囲内から敵が存在しなくなり一定時間が経過した場合は、魔法をキャンセルする。
このようにして、オート魔法はプレイヤーが戦闘中の敵に対して魔法を切り替えながら攻撃しています。最初は曖昧な要望が並ぶところから始まりましたが、ゲーム中の状況を細かく想定し、一つ一つ解決方法を探していくことで、無事に作り終えることができました。
最後に
今回はテキスト多めでお送りしました。読んでいただきありがとうございます。ゲーム開発において仕様や仕様書は重要ですが、最初から完璧なものが存在するわけではありません。依頼された内容に沿ってただ作るのではなく、ゲームをより面白くするためにチーム内で意見を交わし、協力してモノづくりに取り組めると良いのではないでしょうか。
トイロジックではそんな姿勢でゲーム開発に向き合える方を募集しています!