メインコンテンツへスキップ

WebGAL 技術紹介

Mahiru約2分

WebGAL 技術紹介

シーンシステム & プリロード

シーンの取得

WebGAL のシーンは、ファイル単位で管理されます。一般的に、WebGAL スクリプトファイルの拡張子は .txt です。多くのプログラミング言語が main 関数をエントリーポイントとして持つように、WebGAL のエントリーシーンは start.txt です。WebGAL は最初に start.txt を取得し、それを WebGAL パーサーによってシーンオブジェクトに解析します。任意のシーンでは、choosechangeScenecallScene といった方法を使用してシーンの切り替えや呼び出しが行えます。シーンの切り替えは現在のシーンを直接置き換えますが、シーンの呼び出しは新しいシーンをスタックにプッシュして実行し、実行後に呼び出し元の親シーンに戻ります。

シーンの事前読み込み

WebGAL は、シーンの解析と同時に、シーンに含まれるリソースも解析します。各シーンファイルには、画像、音声、およびビデオファイルなどのリソースが含まれています。これらのファイルは、シーンの解析が完了した後にプリロードが開始され、ユーザーがゲームプレイ中にリソースの読み込みを待つ可能性を最小限に抑えます。また、シーンの切り替え時にゲームのスムーズな動作を実現するために、WebGAL は現在のシーンファイルから参照されているシーンファイルのリソースも読み込みます。ただし、リソースの無駄を防ぐため、WebGAL はシーンの一層のみをプリロードします。

WebGAL パーサー

スクリプト解析 Ⅰ - シーンの分割

WebGAL のシーンファイルは主に改行でステートメントを区切ります。解析の最初に、WebGAL パーサーは改行コードに基づいてステートメントを分割します。セミコロンがある場合は、セミコロンの前の文字列を取得します。つまり、WebGAL スクリプトのコメント方法は、セミコロンの後に記述することです。

スクリプト解析 Ⅱ - ステートメントタイプの解析

WebGAL のステートメントは一般的に次のような形式です。

command:content -arg1 -arg2 ......;コメント

ここで、command はステートメントのコマンドを表し、bgmchangeFigurechoose などのコマンドがあります。これはステートメントに対する制御アクションを示します。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つの可能な型のいずれかで存在することができます: stringnumberboolean

例えば、-key=svaluestring です。-key=1valuenumber です。-key=true または -key=falsevalueboolean です。

また、value を省略して key のみを記述するパラメータは -key=true と解釈され、これは省略された形式のシンタックスシュガーです。このシンタックスシュガーは非常に重要であり、WebGAL には -next という重要なパラメータがあります。これは、現在のステートメントの実行後に直ちに次のステートメントを実行することを示すために使用されます。このシンタックスシュガーがなっかた場合、常に -next=true と書く必要があります。

スクリプト解析 Ⅴ - リソースの処理とプリロード

スクリプトの解析中に、スクリプトが必要とするリソースを取得することができます。例えば、bgm ステートメントでは通常音声リソースが必要であり、playVideo ステートメントでは通常ビデオリソースが必要です。また、changeBg ステートメントでは通常画像リソースが必要です。WebGAL のシーンパーサーは、すべてのシーンのステートメントが必要とするリソースをまとめて、プリローダーに渡してリソースをプリロードします。また、changeScenechoosecallScene など、サブシーンを呼び出す必要がある場合には、サブシーンもスキャンされ、解析され、その中のリソースがプリロードされます。

実行制御システム

スタンバイフェイズ: 開始準備

メインフェイズ I: コマンドの読み取り、条件判断の実行

メインフェイズ II: コマンド制御モジュールからコマンドコントローラーの呼び出し、取得

エンドフェイズ: 連続コマンドの処理、バックログの更新

オートモード & スキップモード

コマンド制御

WebGAL コマンドタイプ

コマンドの自動破棄、終了判定、ブロックロジック

シーン制御 & アニメーション制御

データ駆動型 Pixi シーンコントローラー

アニメーション & トランスフォム制御

セーブ、ロード、ロールバックとユーザーデータ

WebGAL ステートテーブルの紹介

実行状態の保存 & 復元

セーブデータ & その他のユーザーデータの保存

鑑賞モジュール & 細かい機能

鑑賞モジュール

ブラウザを離れた際の状態保持 & 「続きから」

ショートカットキー & マウス操作