02. 環境とフォルダ
開発時に触る場所
編集するのは、lumina.exe の隣にある GameData\data0 フォルダです。
エンジンの開発環境では、build\win\bin\Release\GameData\data0 がその場所です。
images/02_folder_map.png
エクスプローラーで lumina.exe の隣の GameData と data0〜data8 を表示した画面
images/02_folder_map.pnglumina.exe と同じフォルダ
├── lumina.exe
├── DLL\ ← Windows 用のプラグイン(使うときに自動で読み込みます)
├── GameData\
│ └── data0\ … data8\ ← 編集する場所
└── SaveData\ ← 遊ぶと作られるセーブ(配布物には入りません)
Windows のビルドが、配布用の一式を
build\win\bin\master\Release に毎回作り直します。そこを直しても、次のビルドで消えてしまいます。
Release と Debug の GameData
開発環境の build\win\bin\Release と build\win\bin\Debug には、GameData がそれぞれ別にあります。中の system\Config.txt の設定も違います。
| 項目 | Release の GameData | Debug の GameData |
|---|---|---|
| シナリオ | .txt を先に読む | .lsf を先に読む |
| マクロ | どちらも、同じ名前の .lsf があればそちらを読む | |
| システムスクリプト(Windows) | どちらも、.txt と .lsf のうち新しいほうを読む | |
| パスワード | 作品のパスワード(Config.txt の setScriptPassword) | 使わない(既定の鍵) |
| 使いどころ | ふだんの確認はこちら | エンジンを調べるとき |
直した GameData と、起動した lumina.exe が同じフォルダか、いつも確かめてください。
実行モード(Debug/Release)
実行モードは、起動時に次の順で決まります(system\RunMode.txt)。
- 環境変数
LUMINA_RUNMODEが1なら Debug、0なら Release data0\system\DevMode.txtがあれば Debug(開発中の目印)- どちらも無ければ Release(配布物はこれ)
| Debug 実行モードでできること | 内容 |
|---|---|
| デバッグメニュー | メニューバーに「デバッグ」が出ます |
| FPS 表示 | タイトルバーに表示されます |
lumina_debug.log | lumina.exe の隣にできるログ。読み込みの失敗や構文エラーが出ます |
| 道具パネル | Shift+D で開きます(Windows のみ) |
GameData には、どちらも DevMode.txt があります。そのため、どちらも Debug 実行モードで起動します。DevMode.txt は暗号化しないでください。配布物には入りません(ビルドが data0\system の .txt を外すためです)。
対応プラットフォームと共有関係
| 対象 | 実行形態 | 共通で使うもの | 状況 |
|---|---|---|---|
| Windows | ネイティブ実行ファイル | シナリオ・素材・システムスクリプト | 起動可(最も機能が揃っています) |
| Steam | Windows ビルド + Steam 連携 | 同じデータ | 起動可 |
| Android | APK | 同じ data0〜data8 を元にパック | 起動可(一部 Windows 専用機能は使えません) |
| ブラウザ | WebAssembly / HTML | 同じ data0〜data8 を元にパック | 起動可(HTTP 配信前提、対応機能に差があります) |
| Linux / iOS / PlayStation系 / Switch系 | — | — | 開発中(現時点では起動できません) |
build\win\bin\master\Release\GameData)から、build-pack-data.ps1 が .laf パックにして作ります。つまり編集するデータは共通で、ビルド出力だけがプラットフォームごとに分かれます。
data0〜data8 の役割(現行 Config)
system\Config.txt の System.setFolder(...) でフォルダが割り当てられています。
| 論理名 | 実フォルダ | 中身の例 |
|---|---|---|
script | data0 | スクリプト一式(下の表) |
ui | data1 | タイトル・メッセージ枠・環境設定などの画像(data1\title など) |
bgImage | data2 | 背景(bg01a / bg01b / bg01c など) |
eventCg | data3 | イベント CG(data3\cg01\base と差分 smile) |
stand | data4\stand | 立ち絵(ch01〜ch05。例: ch01\smile) |
sprite | data4\sprite | スプライト(petal_1 など) |
| (モーション) | data4\motion | メッシュ変形モーション |
bgm | data5\sound | BGM(title など) |
se | data5\se | 効果音(sysse01 など) |
sysse | data5\sysse | ボタンの効果音(システム効果音) |
sysvoice | data5\sysvoice | システム音声 |
voice | data6 | ボイス。キャラごとのフォルダ(例: data6\vo01\vo01_0001.opus) |
rule | data7\rule | 場面切り替えのルール画像(001〜、1080p_rule10 など) |
movie | data8 | 動画(例: data8\logo\lumina_logo) |
data0 の中身
| フォルダ | 中身 |
|---|---|
system\ | システムスクリプト(起動・タイトル・環境設定・セーブ画面など) |
scenario\ | シナリオ |
macro\ | マクロ(07章) |
font\ | 組み込みフォント |
lang\ | 多言語の文言の表と、言語ごとの差し替え(例: lang\en\) |
particle\ | パーティクルの設定ファイル(sakura_soft など) |
licence\ | フォントのライセンス文 |
sim\ | 育成・恋愛シミュレーションの設定ファイル。シナリオと同じく、配布前に .lsf へ暗号化します(.txt は配布物から自動では外れません) |
素材の呼び方と拡張子
シナリオから素材を呼ぶときは、フォルダを書かずにファイル名(拡張子なし)だけを書きます。
bg 0 bg01a
拡張子は Config.txt の System.setExtension(...) で決まります。
| 種類 | 拡張子 |
|---|---|
| 画像 | .lgc |
| BGM・効果音 | .ogg |
| ボイス | .opus |
| 動画 | .ogv(Android・ブラウザ用に、同じ名前の .mp4 も並べて置きます。data8\logo の見本と同じ形です) |
.lgc)でだけ探します。PNG を置いただけでは見つかりません。
LuminaImageCompressor(開発環境の Tool\01_Development\build\bin\x64\Release\LuminaImageCompressor.exe)で .lgc に変換して置くか、bg 0 mybg.png のように拡張子まで書きます。
.txt は UTF-8 で保存してください(日本語の台詞行を含むため)。エディタの保存形式が Shift_JIS などになっていると文字化けすることがあります。
シナリオファイルの置き場所
images/02_scenario_folder.png
GameData\data0\scenario 内の feature_demo.txt など
images/02_scenario_folder.pngGameData\data0\scenario\
├── feature_demo.txt ← 紹介デモ(学習用に最適)
├── feature_demo.lsf ← 暗号化版(配布用)
└── my_first.txt ← あなたのシナリオ
- 開発中は
.txtを編集します。Release のGameDataなら、保存してゲームを再起動すれば反映されます。 - 配布物には
.txtが入りません。配布前にScriptEncryptorで.lsfを必ず作ります(下の「配布前」)。
起動から本編までの流れ
images/02_startup_flow.png
無くても下の図で説明できます
images/02_startup_flow.png- Windows では、最初に「起動設定」のダイアログが出ます。OK でゲームが始まり、キャンセルで終了します。
- タイトルの「はじめから」を押すと、
System.loadScenarioでシナリオが始まります。自分のシナリオを試すときは、この読込パスを差し替えます(03章)。 - シナリオが
endに来るか、最後の行まで進むと、自動でタイトルへ戻ります。 - Windows では
lumina.exe --start-scenario=scenario/my_firstで、ロゴとタイトルを飛ばして直接始められます。
開発中の .txt と配布前の .lsf(重要)
開発中(.txt)
- Release の
GameDataで.txtを編集して保存します。 - ゲームを再起動して確認します。
- シナリオ: Release は
.txtを先に読むので、そのまま反映されます。 - システムスクリプト: Windows では
.txtと.lsfの新しいほうが読まれます。保存すれば.txtが新しくなります。 - マクロ: 同じ名前の
.lsfがあると、そちらが読まれます。マクロの.txtを直したら、.lsfも作り直してください。 - Debug の
GameDataはシナリオも.lsfを先に読みます。古い.lsfが読まれるので、ふだんの確認は Release で行ってください。
配布前(.lsf)
ScriptEncryptor で .lsf を作ります。x.txt から、同じフォルダに x.lsf ができます。
ツールの場所(開発環境): Tool\01_Development\build\bin\x64\Release\ScriptEncryptor.exe
ScriptEncryptor.exe -e -p "(Config.txt の setScriptPassword の文字列)" --ext txt "…\data0\scenario\my_first.txt"
ScriptEncryptor.exe -e --default-key --ext txt "…\data0\system\Config.txt"
- シナリオ・システムスクリプト・マクロは、作品のパスワード(
-p)で暗号化します。 Config.txtだけは--default-keyで暗号化します。パスワードがConfigの中に書いてあるので、Config自身は既定の鍵でしか開けないためです。- 既定の鍵で作った
.lsfもエンジンは読めますが、作品のパスワードでは守られません。
| オプション | 意味 |
|---|---|
-e / -d | 暗号化(既定)/復号 |
-p <パスワード> / --default-key | パスワード(8 文字以上)/既定の鍵 |
-o <フォルダ> | 出力先(省略すると元のフォルダ) |
--ext | 対象の拡張子(; 区切り。例: txt) |
-r / --no-recursive | サブフォルダも処理する(既定)/しない |
-q | 進み具合を表示しない |
-e などのオプションにします。ファイル名から書くと、コマンドではなく画面(GUI)が開きます。フォルダごと暗号化すると、
Config.txt や DevMode.txt まで作品のパスワードで暗号化されてしまいます。ファイルは 1 本ずつ指定してください。
配布時の暗号化・パックの位置づけは 公式マニュアル 第5章・第3章 も参照してください。
ビルド出力のイメージ
| プラットフォーム | 主な出力先 | メモ |
|---|---|---|
| Windows(開発用) | build\win\bin\Release / build\win\bin\Debug | lumina.exe と GameData。ここで編集・確認します |
| Windows(配布用) | build\win\bin\master\Release | ビルドが毎回作り直します(編集しません)。.txt と SaveData は入りません |
| ブラウザ | build\web\bin\ | lumina.html / .js / .wasm / GameData(.laf) |
| Android | build\android\bin\ | lumina.apk / Play 向け lumina.aab |
Android/ブラウザへの流れ
GameDataを編集し、配布前と同じく.lsfを作ります。- Windows の Release をビルドします(
build-win.ps1)。build\win\bin\master\Releaseが作り直されます。 build-pack-data.ps1で.lafパックを作ります。ブラウザ用も作るときは-Targets android,webを付けます。build-android.ps1またはbuild-web.ps1でビルドします。
パックを作り直さない限り、Android とブラウザには編集が反映されません。
ゲームの起動確認
| プラットフォーム | 確認方法の例 |
|---|---|
| Windows | lumina.exe を起動し、「起動設定」のダイアログで OK を押す |
| ブラウザ | エンジン直下の serve-web.py(python serve-web.py)で build\web\bin\ を HTTP 配信し、lumina.html を開く |
| Android | 生成した lumina.apk を実機またはエミュレータで起動。Google Play 向けは lumina.aab(Play Asset Delivery) |
どのプラットフォームでも、編集したデータが実際に読み込まれているかを確認してください。特に Windows の Release/Debug の GameData、ブラウザ用 build\web\bin\GameData、Android APK 内のアセットは混同しやすいです。
まずは確認してほしいこと
lumina.exeの隣のGameData\data0\scenario\feature_demo.txtが開くこと- タイトルの「はじめから」で紹介デモが再生できること
- 編集したら、起動した exe の隣の
GameDataを直したか(Release/Debug は別)を確認すること - プラットフォーム差が気になる箇所は、最終的に Windows だけでなく Android / ブラウザでも確認すること