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 …)
macro フォルダ
キャプチャ差し替え images/07_macro_folder.png

GameData\data0\macro フォルダと bg.txt を開いた画面

図7-1: マクロフォルダ — 差し替え: images/07_macro_folder.png

7.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
マクロ使用
キャプチャ差し替え images/07_macro_usage.png

シナリオで BG_SHOW 等を実行した画面

図7-2: マクロ実行 — 差し替え: images/07_macro_usage.png

7.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 自作マクロの手順

  1. GameData\data0\macro\my_macros.txt を新しく作ります(UTF-8。既存ファイルに追記しても構いません)。
  2. [macro name="MY_SCENE_IN"] … [end_macro] を書きます。
  3. ゲームを再起動します。
  4. シナリオから MY_SCENE_IN 引数… と1行で呼びます。
  5. 配布前に、作品のパスワードで .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)