第2章 構成の考え方
キャプチャ差し替え
images/02_architecture.png
図2-1: アーキテクチャ俯瞰
images/02_architecture.png本章は「ゲームデータとスクリプトがどうつながるか」を説明します。内部実装の詳細は扱いません。シナリオの書き方は 制作者向け入門、プラットフォーム差は「仕様(6章)」や「運用(3章)」も合わせて参照してください。
2.1 全体構成
| レイヤ | 内容 | 役割 |
|---|---|---|
| 実行本体 | lumina.exe / lumina.html / lumina.apk / lumina.aab | ゲームを起動し、入力・描画・音声を処理。Play 向け AAB は Play Asset Delivery でゲームデータを配信 |
| システムスクリプト | data0/system/*.txt(暗号化すると .lsf)と起動の入口 data0/startup.txt | 起動処理、タイトル、設定画面、プラグインの許可 |
| シナリオスクリプト | data0/scenario/*.txt(暗号化すると .lsf) | 本編のコマンド・メッセージ・分岐 |
| ゲームデータ | data0〜data8 のフォルダ / dataN.laf | 画像・音声・動画・マクロ・文言表などの素材 |
| プラグイン | Windows は exe の隣の DLL\ にある DLL。ブラウザ/Android は本体に内蔵 | OGG / Opus 再生、動画、部品アニメ、メッシュ変形モーション等 |
2.2 起動時に動くもの
起動からタイトル表示まで、おおむね次の順で処理されます(起動ダイアログとウィンドウの作成は Windows のみ)。
起動
→ exe のフォルダと 1 階層下(GameData など)の *.laf をマウント
→ system/Config を先に 1 回実行
(保存先・データルート・INI 方針・拡張子・フォルダを確定。setDataRoot 先の *.laf も追加)
→ systemdata.dat を読む(INI を有効にしたときだけ config.ini も)
→ 起動ダイアログ(setStartupDialog(true) のとき)
→ ウィンドウ作成(非表示)→ PreInitialize.txt(RunMode → Localization → Menus → SystemMenu)
→ ウィンドウ表示 → data0/startup.txt → Initialize.txt
(Confirm → Config → 検索パス → 多言語 → MesWnd ほか)
→ logo_enhanced → title_enhanced
→ タイトルから System.loadScenario(または Scenario.load)で本編へ
スクリプト実行順序
system/Config.txt— エンジンが起動直後に先行して 1 回実行する。保存先・データルート・INI の有無・拡張子・フォルダを決めるsystem/PreInitialize.txt— ウィンドウを出す前に実行。system/RunMode.txt(実行モードの決定)→system/Localization.txt(言語)→ メニューバーとシステムメニューの組み立てdata0/startup.txt— 起動の入口。system/Initializeを呼ぶだけsystem/Initialize.txt— プラグインの許可一覧、Configの再実行(本番の設定)、検索パス、多言語、メッセージウィンドウ・メニューバー・選択肢・バックログ・音量などの初期化、最後にロゴ → タイトル
実行モード(Debug / Release)の決め方は system/RunMode.txt の 1 か所にまとめてあります(第3章 3.5)。
編集元:
build\win\bin\Release\GameData\data0。書き出し先の build\win\bin\master\Release は build-win.ps1 を実行するたびに作り直されるので、直接編集しないでください(clean の注意も参照)。
2.3 1フレームの処理(概要)
- 入力の更新(クリック、キー、メニュー操作)
- スクリプトの 1 ステップ実行
- 音声・動画の更新
- 画面の描画
2.4 プラグインの読み込み
Initialize.txt で許可一覧と検索フォルダを設定しておけば、エンジンが各機能を最初に使う直前に DLL を自動で読み込みます(Windows)。System.loadPlugin で先に読んでおくこともできます。
System.setAllowedPlugins([...])— 読み込んでよい DLL の一覧。一覧に無い DLL は読み込まれない(空の一覧を渡すと制限なし)System.addPluginDirectory("DLL")— 検索フォルダの追加(見本は"."と"DLL")System.loadPlugin("name.dll")— 先読み(任意)。Steam 連携のmrusteam.dllだけは、許可一覧に足したうえでこれを呼ぶ必要がある(第8章)
Android / ブラウザでは DLL を使いません。部品アニメ(mruanime)とメッシュ変形モーション(mrumotion)は本体に内蔵です。音声は Android が OGG Vorbis / Opus の復号を本体に内蔵、ブラウザはブラウザの音声機能を使います。動画はブラウザが HTML の <video>、Android が MediaCodec です。詳細は 第8章 を参照してください。
2.5 素材の参照方法
Config.txtのSystem.setFolderで決めた置き場からの名前(例: 背景はbg01aのように名前だけで引ける)- 拡張子を省くと、
System.setExtensionで決めた拡張子を自動で補う(見本は画像lgc、BGM・SEogg、ボイスopus、動画ogv) .lafパックに含まれるファイル。Windows では同じ名前の素のファイルがあればそちらが優先され、パックは見つからないときの予備になるpack:///仮想パス(パック内ファイル)Storages.addAutoPath()で登録したフォルダ- 原語以外の言語を選んでいるときは、言語別の上書きフォルダ(
data0/lang/<ID>/)を最初に 1 か所だけ見る(第5章)