07. マクロ
よく使う命令の組み合わせを1行のコマンドにまとめたものがマクロです。背景フェードや場面の後片付けなど、毎回同じパターンを書く手間を減らせます。
7.1 マクロの置き場所
GameData\data0\macro\
├── bg.txt … 背景用(BG_SHOW / BG_FADE / BG_CROSS …)
├── ch.txt … スプライトで作った立ち絵用(CH_SHOW …)
├── ev.txt … イベント CG 用(EV_SHOW …)
├── fx.txt … 画面演出用(SHAKE_LIGHT / FLASH_WHITE / MONO …)
├── fxdraw.txt … 図形の演出(SLASH / IMPACT など約 70 個)
├── scene.txt … 場面の初期化と後片付け(INIT_ALL / INIT_KEEP / END_ALL / END_KEEP)
├── se.txt … 効果音用(SE_PLAY / SE_LOOP …)
└── snd.txt … BGM・ボイス用(BGM_PLAY / BGM_FADEIN / VOICE_PLAY …)
- マクロは、起動してから最初にシナリオを実行したときに 1 回だけ読み込まれます。直したら、ゲームを再起動します。
- 同じ名前の
.lsfがあると、.txtより.lsfが優先されます(Config の設定に関係なく)。.txtを直したら、.lsfも作り直してください。
キャプチャ差し替え
images/07_macro_folder.png
GameData\data0\macro フォルダと bg.txt を開いた画面
images/07_macro_folder.png7.2 マクロの定義の書き方
bg.txt の例:
[macro name="BG_SHOW"]
bg 0 %0
[end_macro]
[macro name="BG_FADE"]
bg 0 %0 0 0 fadein %1
[end_macro]
| 要素 | 意味 |
|---|---|
[macro name="名前"] | マクロ定義の開始 |
%0 %1 … %9 | 呼び出し時の引数(0 始まり) |
[macro name="名前" %1="1000"] | 引数を省いたときの値(既定値)を決める書き方 |
[end_macro] | 定義の終了 |
マクロの中身は、通常のシナリオ命令と同じ書き方です。// や ; で始まる行はコメントとして飛ばされます(同梱の bg.txt 参照)。
7.3 シナリオからの呼び出し
シナリオ内ではマクロ名を1行コマンドとして書きます。
BG_SHOW bg01a
BG_FADE bg01b 30
BG_FADE_SYNC bg01c 30
BG_CROSS bg01b 800
INIT_ALL
SHAKE_LIGHT
FLASH_WHITE 150
- 引数の個数・順序は、マクロ定義の
%0%1に対応します。 - 引数は空白かカンマで区切ります。空白を含む引数は
"…"で囲みます。 - 数字の単位はマクロの中身で決まります。
BG_FADEはフレーム、BG_CROSSはミリ秒です。
キャプチャ差し替え
images/07_macro_usage.png
シナリオで BG_SHOW 等を実行した画面
images/07_macro_usage.png7.4 同梱マクロの主な一覧
背景(bg.txt)
| マクロ | 用途 | 例 |
|---|---|---|
BG_SHOW | 即時表示 | BG_SHOW bg01a |
BG_FADE | 前の絵を外してからフェードイン(フレーム) | BG_FADE bg01b 30 |
BG_FADE_SYNC | フェードインが終わるまで待つ(フレーム) | BG_FADE_SYNC bg01c 30 |
BG_OUT | フェードアウトで消す(フレーム) | BG_OUT 30 |
BG_CROSS | 前の絵を残したまま重ねて切り替え(ミリ秒) | BG_CROSS bg01b 800 |
場面の初期化と後片付け(scene.txt)
| マクロ | 置く場所 |
|---|---|
INIT_ALL | 場面の先頭。何も表示する前に置きます(全部消す) |
INIT_KEEP | 場面の先頭。背景と曲は残します |
END_ALL | 場面の末尾。フェードアウトで消えきった後に置きます |
END_KEEP | 場面の末尾。背景と曲は次へ渡します |
消すのは見た目と音だけです。変数や永続フラグは消えません。
演出(fx.txt・fxdraw.txt)
| マクロ | 用途 | 例 |
|---|---|---|
SHAKE_LIGHT / SHAKE_HEAVY | 画面を揺らす | SHAKE_LIGHT |
FLASH_WHITE / FLASH_RED | 画面を光らせる(ミリ秒) | FLASH_WHITE 150 |
MONO / SEPIA / COLOR_RESTORE | 白黒・セピア・元に戻す | MONO |
FX_SNOW / FX_RAIN / FX_SAKURA / FX_STOP | 雪・雨・桜を降らせる/止める | FX_SAKURA |
SLASH / IMPACT など | 画像を使わない図形の演出(fxdraw.txt) | IMPACT 640 360 |
立ち絵(ch.txt)について
CH_SHOW などの CH_ 系は sprite 命令で作られていて、立ち絵の仕組み(表情名・位置・口パク)を使いません。立ち絵は chara_show / chara_change / chara_hide を直接使うのがおすすめです(04章)。
SE・BGM は se.txt snd.txt を開いて確認してください。feature_demo.txt の *a_macro でも紹介しています。
7.5 自作マクロの手順
GameData\data0\macro\my_macros.txtを新しく作ります(UTF-8。既存ファイルに追記しても構いません)。[macro name="MY_SCENE_IN"]…[end_macro]を書きます。- ゲームを再起動します。
- シナリオから
MY_SCENE_IN 引数…と1行で呼びます。 - 配布前に、作品のパスワードで
.lsfを作ります。同じ名前の.lsfがあるときは、.txtを直すたびに作り直します。
// %0 = 背景の名前、%1 = 暗転の長さ(ミリ秒。省くと 500)
[macro name="MY_SCENE_IN" %1="500"]
fadeout %1
chara_clear
bg 0 %0
fadein %1
[end_macro]
呼び方: MY_SCENE_IN bg01b(500 ミリ秒)/MY_SCENE_IN bg01c 1000(1 秒)
- マクロ名は大文字・小文字を区別しません。定義どおりの表記で呼ぶと分かりやすいです。
- 組み込みの命令と同じ名前(
jumpやbgなど)は登録されません(中身が同じ命令を呼ぶだけの大文字の別名は除きます。fx.txtのSHAKEなど)。既存マクロとも重ならない名前を付けてください。 - マクロの中から別のマクロは呼べません(展開は 1 回だけです)。まとめたいときは中身を書き写します。
7.6 マクロと通常命令の使い分け
| 状況 | おすすめ |
|---|---|
| 1回だけの特殊な演出 | 通常命令をそのまま書く |
| 全編で同じ背景フェード | BG_FADE などマクロ化 |
| 場面の先頭と末尾の片付け | INIT_ALL / END_ALL |
| プロジェクト固有の定型シーン | 自作マクロ(例: SCENE_ENTER_ROOM) |