AVGにおけるセンテンスサイクル

AVGのゲームの進行を整理し、それにあわせたシナリオ記述方式を考察する。

ゲームの進行

ゲームは以下のサイクルで進行する。シナリオはこのサイクルを反映したセンテンス単位で記述されるとする。
ループやブロックの定義を記号や約束語ではなくインデントで表現するPython的発想である。

  1. センテンスの開始
    1. 画面(各種スプライトとテキストウィンドウ)とループ音楽の状態を記録する。これが、セーブデータに使われる。
    2. テキストウィンドウ削除フラグを立てる。
  2. 演出の出力
    1. 背景・立ち絵・音楽・効果音などの演出を実行する。
  3. テキストの出力
    1. もし、テキストにボイスが設定されていれば、それを読み込み再生を開始する。
    2. テキストウィンドウに文字を出力する。0文字の出力は特別な記号を用いれば可能とする。
    3. テキストに特別な記号が含まれていれば、テキストウィンドウ削除フラグを折る。
  4. クリック待ち・選択肢
    1. 選択肢であれば、選択肢を表示。
    2. センテンスの記述形式ではクリック待ちが挿入されるはずだが、クリック待ちスキップフラグが立っていればそもそもこの部分を飛ばす。
    3. スクリーンショットを撮る。これが、セーブデータのサムネイルに使用される。
    4. また、この時のセーブデータ状態が、フルバックログに使用される。
    5. もし、これが選択肢であれば、あらゆる自動更新のフラグは一旦棚上げされる。
    6. その他、セーブやロードのコマンドを受け付ける。セーブデータはこのサイクル冒頭で作られた物を使用し、サムネイルはクリック待ち冒頭で作成されたものを使う。
    7. 選択肢が選択されたのであれば、それを記録する。
  5. センテンスの終了
    1. テキストウィンドウ削除フラグが立っていれば、テキストウィンドウの内容を削除する。
    2. テキストウィンドウ削除フラグを折る。

特別センテンス

各種フラグ、選択肢の選択記録による分岐を行う。

エンジンの仕様

シナリオ解釈エンジンは、あらかじめシナリオファイルを全て読み込んでおく。
こうすることで、エンジンはシナリオが何クリックで終了するかを計算できるし、どのセンテンスにボイスがあり、どのセンテンスにボイスがないのかを把握できる。
また、センテンスにフラグを立てておくことで、「発射まで何クリックか」を表示することもできるし、ボイスの有無によりきめ細かなオートモードを実現できる。
たとえば、オートモードとボイスの関係は、以下のような仕様が求められていることが多い。

オートモードの動作
次センテンスは ボイス有り ボイス無し
現在ボイス再生中 ボイス再生終了と、テキストの長さから計算される時間の長い方を待つ。 テキストの長さから計算される時間を待つ
現在ボイス無し テキストの長さから計算される時間を待つ。 テキストの長さから計算される時間を待つ。

また、センテンスに分割することで、画面状態を含めたフルバックログの実装が容易になる。