02. 環境とフォルダ

開発時に触る場所

編集するのは、lumina.exe の隣にある GameData\data0 フォルダです。
エンジンの開発環境では、build\win\bin\Release\GameData\data0 がその場所です。

lumina.exe の隣の GameData のフォルダ構成
キャプチャ差し替え images/02_folder_map.png

エクスプローラーで lumina.exe の隣の GameData と data0〜data8 を表示した画面

図2-1: lumina.exe の隣のフォルダ(GameData と data0〜data8) — 差し替え: images/02_folder_map.png
lumina.exe と同じフォルダ
├── lumina.exe
├── DLL\                    ← Windows 用のプラグイン(使うときに自動で読み込みます)
├── GameData\
│   └── data0\ … data8\     ← 編集する場所
└── SaveData\               ← 遊ぶと作られるセーブ(配布物には入りません)
build\win\bin\master は編集しません。
Windows のビルドが、配布用の一式を build\win\bin\master\Release に毎回作り直します。そこを直しても、次のビルドで消えてしまいます。

Release と Debug の GameData

開発環境の build\win\bin\Release と build\win\bin\Debug には、GameData がそれぞれ別にあります。中の system\Config.txt の設定も違います。

項目Release の GameDataDebug の GameData
シナリオ.txt を先に読む.lsf を先に読む
マクロどちらも、同じ名前の .lsf があればそちらを読む
システムスクリプト(Windows)どちらも、.txt と .lsf のうち新しいほうを読む
パスワード作品のパスワード(Config.txt の setScriptPassword)使わない(既定の鍵)
使いどころふだんの確認はこちらエンジンを調べるとき

直した GameData と、起動した lumina.exe が同じフォルダか、いつも確かめてください。

実行モード(Debug/Release)

実行モードは、起動時に次の順で決まります(system\RunMode.txt)。

  1. 環境変数 LUMINA_RUNMODE が 1 なら Debug、0 なら Release
  2. data0\system\DevMode.txt があれば Debug(開発中の目印)
  3. どちらも無ければ Release(配布物はこれ)
Debug 実行モードでできること内容
デバッグメニューメニューバーに「デバッグ」が出ます
FPS 表示タイトルバーに表示されます
lumina_debug.loglumina.exe の隣にできるログ。読み込みの失敗や構文エラーが出ます
道具パネルShift+D で開きます(Windows のみ)
開発環境の Release と Debug の GameData には、どちらも DevMode.txt があります。そのため、どちらも Debug 実行モードで起動します。
DevMode.txt は暗号化しないでください。配布物には入りません(ビルドが data0\system の .txt を外すためです)。

対応プラットフォームと共有関係

対象実行形態共通で使うもの状況
Windowsネイティブ実行ファイルシナリオ・素材・システムスクリプト起動可(最も機能が揃っています)
SteamWindows ビルド + Steam 連携同じデータ起動可
AndroidAPK同じ data0〜data8 を元にパック起動可(一部 Windows 専用機能は使えません)
ブラウザWebAssembly / HTML同じ data0〜data8 を元にパック起動可(HTTP 配信前提、対応機能に差があります)
Linux / iOS / PlayStation系 / Switch系——開発中(現時点では起動できません)
重要: Android とブラウザのデータは、Windows の Release ビルドが作った配布用の一式(build\win\bin\master\Release\GameData)から、build-pack-data.ps1 が .laf パックにして作ります。
つまり編集するデータは共通で、ビルド出力だけがプラットフォームごとに分かれます。

data0〜data8 の役割(現行 Config)

system\Config.txt の System.setFolder(...) でフォルダが割り当てられています。

論理名実フォルダ中身の例
scriptdata0スクリプト一式(下の表)
uidata1タイトル・メッセージ枠・環境設定などの画像(data1\title など)
bgImagedata2背景(bg01a / bg01b / bg01c など)
eventCgdata3イベント CG(data3\cg01\base と差分 smile)
standdata4\stand立ち絵(ch01〜ch05。例: ch01\smile)
spritedata4\spriteスプライト(petal_1 など)
(モーション)data4\motionメッシュ変形モーション
bgmdata5\soundBGM(title など)
sedata5\se効果音(sysse01 など)
syssedata5\sysseボタンの効果音(システム効果音)
sysvoicedata5\sysvoiceシステム音声
voicedata6ボイス。キャラごとのフォルダ(例: data6\vo01\vo01_0001.opus)
ruledata7\rule場面切り替えのルール画像(001〜、1080p_rule10 など)
moviedata8動画(例: 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 などになっていると文字化けすることがあります。

シナリオファイルの置き場所

scenario フォルダ
キャプチャ差し替え images/02_scenario_folder.png

GameData\data0\scenario 内の feature_demo.txt など

図2-2: シナリオフォルダ — 差し替え: images/02_scenario_folder.png
GameData\data0\scenario\
├── feature_demo.txt     ← 紹介デモ(学習用に最適)
├── feature_demo.lsf     ← 暗号化版(配布用)
└── my_first.txt         ← あなたのシナリオ

起動から本編までの流れ

起動から本編までの流れ
キャプチャ差し替え(任意) images/02_startup_flow.png

無くても下の図で説明できます

図2-3: 起動フロー図(任意) — 差し替え: images/02_startup_flow.png
PreInitialize(RunMode・Localization・Menus)→ startup→ Initialize(Confirm → Config → MesWnd …)→ logo_enhanced→ title_enhanced→ System.loadScenario→ scenario\*.txt

開発中の .txt と配布前の .lsf(重要)

開発中(.txt)

  1. Release の GameData で .txt を編集して保存します。
  2. ゲームを再起動して確認します。

配布前(.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"
オプション意味
-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\Debuglumina.exe と GameData。ここで編集・確認します
Windows(配布用)build\win\bin\master\Releaseビルドが毎回作り直します(編集しません)。.txt と SaveData は入りません
ブラウザbuild\web\bin\lumina.html / .js / .wasm / GameData(.laf)
Androidbuild\android\bin\lumina.apk / Play 向け lumina.aab

Android/ブラウザへの流れ

  1. GameData を編集し、配布前と同じく .lsf を作ります。
  2. Windows の Release をビルドします(build-win.ps1)。build\win\bin\master\Release が作り直されます。
  3. build-pack-data.ps1 で .laf パックを作ります。ブラウザ用も作るときは -Targets android,web を付けます。
  4. build-android.ps1 または build-web.ps1 でビルドします。

パックを作り直さない限り、Android とブラウザには編集が反映されません。

ゲームの起動確認

プラットフォーム確認方法の例
Windowslumina.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 内のアセットは混同しやすいです。

まずは確認してほしいこと

  1. lumina.exe の隣の GameData\data0\scenario\feature_demo.txt が開くこと
  2. タイトルの「はじめから」で紹介デモが再生できること
  3. 編集したら、起動した exe の隣の GameData を直したか(Release/Debug は別)を確認すること
  4. プラットフォーム差が気になる箇所は、最終的に Windows だけでなく Android / ブラウザでも確認すること