AVGにおけるセンテンスサイクル
AVGのゲームの進行を整理し、それにあわせたシナリオ記述方式を考察する。
ゲームの進行
ゲームは以下のサイクルで進行する。シナリオはこのサイクルを反映したセンテンス単位で記述されるとする。
ループやブロックの定義を記号や約束語ではなくインデントで表現するPython的発想である。
- センテンスの開始
- 画面(各種スプライトとテキストウィンドウ)とループ音楽の状態を記録する。これが、セーブデータに使われる。
- テキストウィンドウ削除フラグを立てる。
- 演出の出力
- 背景・立ち絵・音楽・効果音などの演出を実行する。
- テキストの出力
- もし、テキストにボイスが設定されていれば、それを読み込み再生を開始する。
- テキストウィンドウに文字を出力する。0文字の出力は特別な記号を用いれば可能とする。
- テキストに特別な記号が含まれていれば、テキストウィンドウ削除フラグを折る。
- クリック待ち・選択肢
- センテンスの終了
- テキストウィンドウ削除フラグが立っていれば、テキストウィンドウの内容を削除する。
- テキストウィンドウ削除フラグを折る。
特別センテンス
各種フラグ、選択肢の選択記録による分岐を行う。
エンジンの仕様
シナリオ解釈エンジンは、あらかじめシナリオファイルを全て読み込んでおく。
こうすることで、エンジンはシナリオが何クリックで終了するかを計算できるし、どのセンテンスにボイスがあり、どのセンテンスにボイスがないのかを把握できる。
また、センテンスにフラグを立てておくことで、「発射まで何クリックか」を表示することもできるし、ボイスの有無によりきめ細かなオートモードを実現できる。
たとえば、オートモードとボイスの関係は、以下のような仕様が求められていることが多い。
オートモードの動作
次センテンスは | ボイス有り | ボイス無し |
---|---|---|
現在ボイス再生中 | ボイス再生終了と、テキストの長さから計算される時間の長い方を待つ。 | テキストの長さから計算される時間を待つ |
現在ボイス無し | テキストの長さから計算される時間を待つ。 | テキストの長さから計算される時間を待つ。 |
また、センテンスに分割することで、画面状態を含めたフルバックログの実装が容易になる。