どうも プログラマーの森田です。

私からは『ベヨネッタ2』で行った、バグチェック作業の自動化についてお話させて頂きます。


皆さんの手元に商品として届くまでには、様々な不具合が修正されています。
そういった不具合の事を「バグ」と言い、例えば以下のようなものがあります。

ストップ
コントローラー操作等を受け付けなくなり、電源を落とす以外なにもできなくなる症状。※開発中でも大問題です。速やかに解決しないと該当箇所の作業が中断してしまいます。

コリジョン(当たり判定)抜け
見た目では地面があるのに、その上に立つとコリジョンが無く、キャラクターが落下したり、敵に押し出されて本来行けるはずの無い建物の中に入り込んでしまったりする事象を指します。さらに操作する事でストップするおそれも有ります。

終盤になると、それらのバグを検出・修正する為に、「バグチェック」と言う作業期間が始まります。社内スタッフや、外部プロフェッショナル集団による、厳しいチェックが行われ、修正を行うのです。

チェック内容は、
 ・通しプレイ(ストップせずにプレイできるか)
・長時間連続プレイ
・何かの途中で戻って別の事をしたりする例外チェック
・仕様と違う挙動のチェック

等、行うのですが、

チェック全てに人の手が必要なのでしょうか?
機械にできる事は、機械にさせようではないですか。
何をさせるのか? 実機での決められた行動の繰り返しプレイです。

>通しプレイ(ストップせずにプレイできるか)
メインストーリーだけをこなすなら、決まった事しかしないので機械でも可能ではないでしょうか?

>長時間連続プレイ
人は休憩が必要ですし寝なければいけません。
機械なら寝ずに作業ができます!

>再現性 :50回中1回 など、低確率で発生する現象の再現プレイ
同じ事を繰り返すなんて、機械にとって簡単なことです。
1/60秒単位であっても正確な作業が可能です。
タイミング状況が確定すれば、確実に再現可能です。

機械でもできそうな事は結構ありますよね。
人の手がいらなさそうなチェックは、機械にさせて、その分、人の手が必要な箇所に人間を充てるようにすれば、効率よくチェックできると思います。

この自動化ツールをなんとなくですが、考え始めたのは前作『ベヨネッタ』の開発終了ぐらいの時期ですね。
今回やっとオートプレイツールの実装ができました。

『ベヨネッタ2』では、このツールを使用し、連続通しプレイで、ニューゲームからゲームクリアまでを最高40周程クリアしました。
(もっと長時間プレイはできますが、バグ修正し続けている為、古いデータでチェックをしても意味がないので、だいたい数日で打ちきり、周回数はリセットされます。)

さて、説明も皆さん飽きているかと思いますので、動作している状態でも見てもらいましょう。

[動画]
※動画は開発環境で撮影されたものであり、製品とは異なります

auto01

上記画像で赤色のコーンが線でつながれていますが、これが、オートプレイ用のデータになります。このようなデータをチマチマ入力するわけです。

このコーンに設定された「アクション」を上から順番にこなし、それが終了したら次のコーンに移るという事を繰り返すだけの簡単な仕組みです。

特殊な行動を操作キャラのプログラムに追加したわけではなく、移動に関してはカメラと目的位置から、アナログスティックの押しこむ方向を逆算し、スティックを倒したことにしています。「コントローラーを操作したことにする」という実装にこだわっています。

「アクション」は、

 ・目的地までの移動
歩き・ジャンプ・二段ジャンプ・ワープ(デバッグ機能による瞬間移動)など

 ・パッドの入力
アナログスティックの回転等も可能
auto02

 ・特定の条件待ち

など、簡単な項目から、目的に合わせて複合的な「戦闘終了待ち」や、デバッグでのみ使用する、ログの出力画面キャプチャ機能等も存在します。

「戦闘終了待ち」は、かなり特殊で、指定することで本当に戦闘を行います。
内部的には、「永遠なるマリオネット」を装備させ、ボタン連打し、「トーチャーアタック」や、「魔力解放」をランダムで行ったりしています。

[動画]
※動画は開発環境で撮影されたものであり、製品とは異なります

単純にこなすだけでなく、条件付きでのコーン間の移動や、内部でループをすることも可能にしています。

・「パンチを3回してから次に移動」
・「特定箇所での一連の動作をワープしながら無限に繰り返す」

と言った事も可能にしています。

おっと、ついつい熱が入り説明が長くなってきてしまいました。
ツールの詳しい実装に関しては、別の機会という事で。

運用としては、スタッフ各自の環境で特定の事を繰り返したい場合に利用したり、終業前にデータを最新にしてオートプレイをセットして帰宅してもらったりなど、
「オラにみんなの空いているPC・開発機を分けてくれ!」
といった感じでした。

その後、朝出社したらストップしていたりするわけですね。
おかげでいくつかのバグを発見・修正できたので、次はさらに使い勝手がいいようにバージョンアップし利用しようと考えています。

ゲームプレイとはあまり関わりのない開発寄りの話でしたが、長々とお付き合いありがとうございました。

皆さんが快適にプレイできるよう、楽しい遊びを作りながらも、バグの無いゲームを目指し日々制作していますので、今後ともよろしくお願いします。