03. 最初のシナリオ
最短で「背景・立ち絵・台詞・選択肢」まで通します。
手順概要
lumina.exeの隣のGameData\data0\scenario\に、my_first.txtを新しく作ります(開発環境ではbuild\win\bin\Release\GameData\data0\scenario\)。- 下のサンプルを貼り、UTF-8 で保存します。
- タイトルの「はじめから」で開くように、
title_enhanced.txtの 1 行を書き換えます(下の「タイトルから開く」)。 lumina.exeを起動し、クリックで進むことを確かめます。
すぐ試したいとき(Windows)
タイトルを書き換えなくても、
タイトルを書き換えなくても、
lumina.exe --start-scenario=scenario/my_first で起動すると、ロゴとタイトルを飛ばして my_first から始まります。
サンプルが動くための最小素材
サンプルは、エンジンに入っている次の素材を使います。
| 命令 | 参照するリソース | 置き場所 |
|---|---|---|
bg 0 bg01a | 背景 bg01a | data2\bg01a.lgc |
chara_show 0 smile center 30 sync | 立ち絵 smile(層 0) | data4\stand\ch01\smile.lgc |
chara_change 0 trouble 15 | 立ち絵 trouble | data4\stand\ch01\trouble.lgc |
立ち絵は、フォルダを書かずに表情の名前だけで見つかります。キャラのフォルダ(ch01 など)が system\SoundInit.txt の表に登録してあるためです。
自分の素材に替えるときは、まず feature_demo が動くか試すと、素材名の参考になります。
サンプル:最短の1シーン
キャプチャ差し替え
images/03_editor_my_first.png
エディタで my_first.txt を開いている画面
images/03_editor_my_first.png文章の行は、行頭にタブを 1 つ入れます。
// my_first.txt — はじめてのシナリオ
*start
msgshow
bg 0 bg01a
name "ナレーション"
物語が始まります。
chara_show 0 smile center 30 sync
name "ヒロイン"
こんにちは。LUMINA のシナリオへようこそ。
name ""
choice "話す" *talk "黙る" *silent
*talk
chara_change 0 trouble 15
name "ヒロイン"
ありがとうございます。では続きをどうぞ。
jump *ending
*silent
name "ナレーション"
……静かな時間が流れた。
jump *ending
*ending
chara_hide 0 30 sync
name ""
おしまいです。
fadeout 1000
end
キャプチャ差し替え
images/03_game_message.png
ゲーム実行中・メッセージと立ち絵が表示された画面
images/03_game_message.png
キャプチャ差し替え
images/03_game_choice.png
choice 命令で選択肢が出ている画面
images/03_game_choice.png何をしているか(行の意味)
| 行 | 意味 |
|---|---|
// … | コメント(実行されません) |
*start | ラベル(ここから開始/ジャンプ先) |
msgshow | メッセージウィンドウを出す |
bg 0 bg01a | 層 0 に背景 bg01a を出す |
name "…" | 話者名(name "" で地の文に戻す) |
| 行頭タブの行 | 文章を表示して、クリックを待つ |
chara_show 0 smile center 30 sync | 層 0 に立ち絵 smile を中央へ。30 フレーム(0.5 秒)でフェードインし、終わるまで待つ |
choice … | 選択肢(選んだ側のラベルへ飛ぶ) |
chara_change 0 trouble 15 | 層 0 の表情を trouble に替える |
jump *ending | 同じファイルのラベル *ending へ飛ぶ |
chara_hide 0 30 sync | 層 0 の立ち絵を 30 フレームで消す |
fadeout 1000 / end | 1 秒で暗転して終わり、タイトルへ戻る |
メッセージの書き方
推奨: 行頭タブ
こんにちは。
- 行頭にタブを入れた行が、画面の文章になります。文章は行頭タブにそろえましょう。
- タブの無い日本語の行も文章として表示されますが、英数字だけの行は命令として読まれ、エラーになります。
- 命令の行(
bgやjumpなど)は、行頭から書きます。 - 行頭タブの行でも、最初の語が命令名(
waitやnameなど)だと命令として扱われます。英語の文章で困るときはmessage "…"で書きます。
タイトルから開く(具体手順)
スタートボタンの動作は、同じ GameData\data0 の system\title_enhanced.txt にあります。228 行目付近の読込行を書き換えます。
キャプチャ差し替え(任意)
images/03_title_connect.png
title_enhanced.txt の loadScenario 部分など
images/03_title_connect.png変更箇所(RegisterButtonActions 内・title.start):
// 変更前(228 行目付近)
"System.loadScenario(\"scenario/feature_demo\");\n" +
// 変更後
"System.loadScenario(\"scenario/my_first\");\n" +
- この行は文字列の中に書かれています。
\"や\nはそのまま残し、feature_demoの部分だけを書き換えます。 - 保存してゲームを再起動すれば反映されます(Windows では
.txtと.lsfの新しいほうが読まれます)。 - 配布前に、
title_enhanced.lsfも作り直します(02章)。
動作確認チェックリスト
| 確認項目 | OK の目安 |
|---|---|
| ファイル作成 | GameData\data0\scenario\my_first.txt がある(UTF-8) |
| タイトル接続 | 「はじめから」で scenario/my_first が始まる |
| 表示 | メッセージ・背景・立ち絵が出る |
| 選択肢 | 「話す」「黙る」で分岐し、*ending まで進む |
| 終わり | 暗転したあと、タイトルへ戻る |
| 配布前 | my_first.lsf と title_enhanced.lsf を作った |
.txt と .lsf の扱いは 02章、タイトル接続の詳細は 08章 を参照してください。
タイトルから開く(API 参照)
システムスクリプト側で使う API は次のとおりです。
System.loadScenario("scenario/my_first");
- 拡張子は書かなくて構いません(Config の設定で決まります)。
System.loadScenarioは、前に遊んだ回の変数を空にしてから始めます。Scenario.load("scenario/my_first")でも読み込めますが、変数を空にしません。「はじめから」にはSystem.loadScenarioを使います。
エラーの見つけ方
開発環境の GameData は Debug 実行モードで起動するので、lumina.exe の隣に lumina_debug.log ができます。
- シナリオの書き間違いは「構文エラー」として、行番号つきで出ます。
- シナリオが見つからないときは「ファイルが見つかりません」と出ます。
うまく動かないとき
| 症状 | 確認 |
|---|---|
| 真っ黒/何も出ない | 背景名・立ち絵名が実在するか(bg01a・smile など)。lumina_debug.log に失敗が出ていないか |
| 立ち絵が出ない | 表情の名前(smile 等)と、位置(center / left / right / middleleft / middleright) |
| 文章が出ない | 行頭がタブになっているか。文字コードが UTF-8 か |
| 選択肢後に進まない | choice のラベル名と *ラベル が一致しているか |
| 古い内容のまま | 起動した exe の隣の GameData を直したか(Release/Debug は別フォルダ。Debug は .lsf を先に読みます) |
| タイトルから進まない | loadScenario のパスと、lumina_debug.log の「ファイルが見つかりません」 |
| Android/ブラウザで古いまま | .lsf を作り、Windows のビルドとパックをやり直したか(02章) |