WebGAL 技術紹介
WebGAL 技術紹介
シーンシステム & プリロード
シーンの取得
WebGAL のシーンは、ファイル単位で管理されます。一般的に、WebGAL スクリプトファイルの拡張子は .txt
です。多くのプログラミング言語が main
関数をエントリーポイントとして持つように、WebGAL のエントリーシーンは start.txt
です。WebGAL は最初に start.txt
を取得し、それを WebGAL パーサーによってシーンオブジェクトに解析します。任意のシーンでは、choose
、changeScene
、callScene
といった方法を使用してシーンの切り替えや呼び出しが行えます。シーンの切り替えは現在のシーンを直接置き換えますが、シーンの呼び出しは新しいシーンをスタックにプッシュして実行し、実行後に呼び出し元の親シーンに戻ります。
シーンの事前読み込み
WebGAL は、シーンの解析と同時に、シーンに含まれるリソースも解析します。各シーンファイルには、画像、音声、およびビデオファイルなどのリソースが含まれています。これらのファイルは、シーンの解析が完了した後にプリロードが開始され、ユーザーがゲームプレイ中にリソースの読み込みを待つ可能性を最小限に抑えます。また、シーンの切り替え時にゲームのスムーズな動作を実現するために、WebGAL は現在のシーンファイルから参照されているシーンファイルのリソースも読み込みます。ただし、リソースの無駄を防ぐため、WebGAL はシーンの一層のみをプリロードします。
WebGAL パーサー
スクリプト解析 Ⅰ - シーンの分割
WebGAL のシーンファイルは主に改行でステートメントを区切ります。解析の最初に、WebGAL パーサーは改行コードに基づいてステートメントを分割します。セミコロンがある場合は、セミコロンの前の文字列を取得します。つまり、WebGAL スクリプトのコメント方法は、セミコロンの後に記述することです。
スクリプト解析 Ⅱ - ステートメントタイプの解析
WebGAL のステートメントは一般的に次のような形式です。
command:content -arg1 -arg2 ......;コメント
ここで、command はステートメントのコマンドを表し、bgm
、changeFigure
、choose
などのコマンドがあります。これはステートメントに対する制御アクションを示します。content
はステートメントの主要な内容を表します。例えば、bgm:Teabreak.mp3
は、BGM として音声ファイルを再生することを表します。
スクリプト解析 Ⅲ - 会話の特殊処理
WebGAL のスクリプトファイルでは、通常以下の形式で会話が書かれます。
森川由綺: 胸につかえていることを、时は解决してくれない。忘却のラベルを贴るだけで -voice_1.ogg;
ビジュアルノベルでは、会話がスクリプトの主要な構成要素であるため、WebGAL ではシンタックスシュガーが設計されています。もしスクリプトの command 部分がどのコマンドとも解析できない場合、WebGAL はそれを会話として扱います。また、音声の指定もシンプルにされており、ファイル名のみを指定すれば十分です。上記の会話は実際に say コマンドとして解析されます。
したがって、この会話の正しい表現は次のようになります。
say:胸につかえていることを、时は解决してくれない。忘却のラベルを贴るだけで -speaker=森川由綺 -vocal=voice_1.ogg;
また、もし対話が一人のキャラクターによって行われる場合、話者が変わる前にキャラクター名を省略することができます。
森川由綺: 胸につかえていることを;
时は解决してくれない;
忘却のラベルを贴るだけで;
会話の特殊な処理により、スクリプトの作成効率が大幅に向上します。
スクリプト解析 Ⅳ - パラメータ解析
content の後に -
で区切られたものは追加パラメータです。特に注意が必要なのは、追加パラメータの -
の前にはスペースが必要であることです。そうでない場合、WebGAL はそれを追加パラメータではなく普通の -
とみなします。
WebGAL のパラメータは -key=value
の形式で表されます。ここで、key
の型は string
であり、value
の型は動的に決定され、次の3つの可能な型のいずれかで存在することができます: string
、number
、boolean
。
例えば、-key=s
の value
は string
です。-key=1
の value
は number
です。-key=true
または -key=false
の value
は boolean
です。
また、value
を省略して key
のみを記述するパラメータは -key=true
と解釈され、これは省略された形式のシンタックスシュガーです。このシンタックスシュガーは非常に重要であり、WebGAL には -next
という重要なパラメータがあります。これは、現在のステートメントの実行後に直ちに次のステートメントを実行することを示すために使用されます。このシンタックスシュガーがなっかた場合、常に -next=true
と書く必要があります。
スクリプト解析 Ⅴ - リソースの処理とプリロード
スクリプトの解析中に、スクリプトが必要とするリソースを取得することができます。例えば、bgm
ステートメントでは通常音声リソースが必要であり、playVideo
ステートメントでは通常ビデオリソースが必要です。また、changeBg
ステートメントでは通常画像リソースが必要です。WebGAL のシーンパーサーは、すべてのシーンのステートメントが必要とするリソースをまとめて、プリローダーに渡してリソースをプリロードします。また、changeScene
、choose
、callScene
など、サブシーンを呼び出す必要がある場合には、サブシーンもスキャンされ、解析され、その中のリソースがプリロードされます。