第4章 動作のしくみ

図4-1: 起動〜ランタイムの流れ
キャプチャ差し替え images/04_runtime.png

図4-1: 起動〜ランタイムの流れ

図4-1: 起動〜ランタイムの流れ — 差し替え: images/04_runtime.png

この章は主に実行時の挙動を説明します。描画やセーブのプラットフォーム差は 6章(仕様)も確認してください。シナリオの作り方は 制作者向け入門 を参照してください。

4.1 起動時の動作

フェーズ1: エンジン初期化

フェーズ2: 設定読み込み

フェーズ3: UI 表示

コマンドライン引数 --start-scenario= を付けて起動すると、ロゴとタイトルを飛ばして指定のシナリオから始めます(第6章)。

プラグインは使う直前に読む(Windows)

DLL は起動時には読み込みません。音は最初に音を鳴らすとき、動画は最初に動画を出すとき(.ogv なら mrutheora.dll も)、アニメやモーションは最初に使うとき、システム情報はそのダイアログを開くときに、エンジンが自動で読み込みます。読み込めるのは許可一覧に載った DLL だけです。かかった時間は lumina_diag.log の [プラグイン] の行に残ります。

起動時の先読み(Windows)

エンジンは、起動からタイトルまでに読んだファイルを覚えておき、次の起動ではウィンドウと DirectX の準備をしている間に裏でそれらを読んでおきます。PC を起動した直後(素材が HDD にあり、OS のファイルの控えが空のとき)の 1 回目の起動が速くなります。

ブラウザと Android の起動

4.2 ランタイムループ

ゲーム実行中は、おおむね次の処理が繰り返されます。

毎フレームの処理

4.3 スクリプト実行モデル

システムスクリプト

シナリオスクリプト

3D

API の一覧は 第9章、シナリオ命令は 第10章 を参照してください。

4.4 音声の動作

拡張子ごとの再生方法の目安です。プラットフォームによって利用可否が異なります。

拡張子Windows のバックエンド
.wav標準の音声再生(プラグイン不要)
.oggmruvorbis.dll
.opusmruopus.dll

BGM クロスフェード、SE プール、ボイスダッキングはスクリプト API 経由。

プラットフォーム音声
WindowsWAV は標準。OGG Vorbis/Opus はプラグイン DLL(使う直前に自動で読み込む)
AndroidOpenSL ES。OGG Vorbis と Opus のみ(復号は本体に内蔵、プラグイン不要)。WAV は再生できない
ブラウザWeb Audio。ブラウザの音声デコード(decodeAudioData。OGG・WAV・MP3 など、ブラウザが読める形式)

4.5 動画の動作

スクリプトでは拡張子を省いて書き、プラットフォームに合った形式を同じ名前で data8 に並べるのが基本です(例: opening.ogv と opening.mp4)。

プラットフォーム形式と再生のしかた
Windowsすべて lmmovie.dll 経由。.ogv は Theora(mrutheora.dll)、mp4 / mov / wmv は Media Foundation、avi / mpg は DirectShow。無圧縮(レベル 0)でパックに入れた動画は、パックからその場で再生する
ブラウザHTML の <video>。mp4 / m4v / webm を GameData\data8 に素のファイルで置く(パックには入れない)。拡張子を省くと mp4 → webm → 設定の拡張子 → ogv の順に探す
AndroidMediaCodec(H.264 / HEVC / VP8 / VP9)。mp4 / m4v / webm を APK に無圧縮のまま同梱する。探す順はブラウザと同じ(ogv は飛ばす)

Windows ではムービーを専用のホストウィンドウへ描画し、オーバーレイ合成できます。

4.6 セーブの動作

セーブの概念は共通ですが、保存先の実体はプラットフォームごとに異なります(第 6 章参照)。

保存形式(System.setSaveDataMode):

モード説明
""(空文字)平文
cAES-GCM で暗号化
zzstd で圧縮(見本の Config.txt はこれ)

4.7 終了時の動作