マクロの使い方
マクロを使うと、長いコードを省略して書くことができます。
以下のコードは、サイド1のエルフの射手を5,7の位置に配置する、というものです。
[unit] side=1 type="Elvish Archer" x,y=5,7 [/unit]
これを、標準マクロにあるUNITマクロを使って以下のように書き換えることができます。
{UNIT 1 "Elvish Archer" 5 7 ()}
このマクロの定義を見てみましょう。
#define UNIT SIDE TYPE X Y WML [unit] side={SIDE} type={TYPE} x={X} y={Y} {WML} [/unit] #enddef
UNITがマクロ名、SIDE TYPE X Y WMLは引数です。引数はマクロを使った時に記述したものに置き換えられます。
ところで、UNITマクロの例では、引数WMLのところが () になっています。
これは何も指定しない、という意味になります。これを以下のように記述してしまうとエラーになります。
{UNIT 1 "Elvish Archer" 5 7}
マクロは標準でいくつかのマクロが用意されていますが、自分で定義することもできます。
マクロ定義は、WMLコードと一緒に書くことができますが、すべてのタグより外に書く必要があります。
複数のシナリオで使うマクロは cfg ファイルにまとめて、 /add-ons/アドオン名/utils/ フォルダに置くと便利です。
マクロ定義の削除
一つのシナリオだけで使うマクロは、シナリオの cfg ファイルの最初に定義(#define)して、最後に #undef で削除しておくと、他のシナリオとマクロ名がかぶったりして起こる不具合を避けることができます。
マクロ定義の削除は以下のように記述します。
#undef MACRO_NAME