WMLの基本
WMLは大雑把に言うと タグ、キー、値で構成されています。
この3つは下の例のように組み合わさっています。
[タグ] キー=値 [/タグ]
タグは必ず [ ] の中に書かれており、「開始タグ」「閉じタグ」という2種類のタグが1つのセットになります。
開始タグが [タグ] 、閉じタグが [/タグ] です。二つの違いは / が有るか無いか。
そして、開始タグと閉じタグの間に挟まれているのが「キー」と「値」です。
「キー」と「値」は常に = で繋いで一対になっています。
下は実際に動くWMLコードの例です。(サイド1のエルフの射手(Elvish Archer)を5,7の位置に配置するという意味になります)
[unit] side=1 type="Elvish Archer" x=5 y=7 [/unit]
カンマを使って、x=5 y=7を1行に書くこともできます。
[unit] side=1 type="Elvish Archer" x,y=5,7 [/unit]
クォーテーション(")は多くの場合省略することができます。
[unit] side=1 type=Elvish Archer x,y=5,7 [/unit]
今のは一番単純なWMLの例です。次はもう少し複雑になります。
下の例のようにWMLタグは入れ子にすることができます。
[タグ] キー=値 [タグ] キー=値 [/タグ] [/タグ]
[タグ] キー=値 [タグ] キー=値 [/タグ] [タグ] キー=値 [タグ] キー=値 [/タグ] [/タグ] [/タグ]
実際のコードで入れ子になったタグの例を見てみましょう。(石化したサイド1のエルフの射手(Elvish Archer)を5,7の位置に配置する、という意味になります)
[unit] side=1 type=Elvish Archer x,y=5,7 [status] petrified=yes [/status] [/unit]
unitタグの中にstatusタグが入っていますね。この場合、unitタグを親タグ、statusタグを子タグと表現します。
このような入れ子構造を組み合わせる事で、WMLは複雑なイベントの作成を可能にしているわけです。
WMLの基本構造がわかったところで、次はタグとキー=値の関係を説明します。
タグとキーは好きな名前を勝手に付けて使う事は出来ません。それぞれ、あらかじめ定義されたタグネームとキーネームがあります。
そして値はキーが要求する形式に合ったものを与える必要があります。これを守らないとコードは正常に動きません。
それでは、具体的な例を見てみましょう。
[label]というタグネームがあります。これは、マップ上にラベル(短いテキスト)を配置します。
このタグで使えるキーには以下のものがあります。
- x,y:マップ上でのラベルの位置を指定するキーです。
- text:ラベルの内容
- team_name:これが指定されている場合、ラベルは指定されたチームにのみ表示されます。
- color:ラベルの色。 形式はr,g,bです。 r,g,bはそれぞれ0~255の数字です。
- visible_in_fog:ラベルを霧の中で表示するかどうかを指定します。 デフォルトはyesです。
- visible_in_shroud:ラベルがシュラウド(視界の外にあり黒く塗りつぶされたヘクス)の中にある場合に見えるかどうか。
デフォルトはno。 - immutable:このラベルがプレーヤーによって削除または変更されないように保護されているかどうか。 デフォルトはyesです。
これが[label]で使用できるキーの全てです。これ以外のキーを使った場合、それは無視されます。
キーにも、それぞれ決められた形式の値があります。それは数字であったりテキストだったり、yes、no のような決められたフレーズだったりします。
数字を求めるキーにテキストを与えるような事をしたら、それはエラーの原因になります。
タグやキーの種類、値の形式を知るには
タグやキーにはどのような種類があるのか、キーにはどのような値がふさわしいかなどを調べるには ReferenceWML (https://wiki.wesnoth.org/ReferenceWML)を見ると良いでしょう。
ここには完全なタグとキーのカタログがあり、詳細に解説されています。(全て英語で書かれていますが、グーグル翻訳などはかなり正確な翻訳をしてくれます)
コメント機能を使う
コメント機能とはWMLの途中にメモ書きを残せる機能です。
例えば、何千行にも及ぶ長いコードを書いたとします。それを最初から最後まで覚えていて、どこに何が書かれているのか即座に言い当てるような事は書いた本人にさえ不可能です。
学校の授業では、重要な箇所、後で確認したい箇所などにペンで線を引いたり付箋を貼ったりするでしょう?WMLでそれをするのが、コメント機能です。
WMLでは通常の場合、「#」が現れるとその行の以降の文字はコメント文と判断されて、WMLに無視されます。
これを利用して、「#」の後ろにコードをどういう意図で書いたかなどをメモしたり、書いたコードの前に「#」を置いて、一時的に無効化することができます。
実際にコメント機能を使用した例
# 10,2にオークの兵卒 ←ここがコメントになっています。 [unit] side=2 type="Orcish Grunt" x=10,2 [/unit]
コードの前に「#」を書いて置くとその部分は実行されません。 # [unit] # side=2 # type="Skeleton Archer" # x=11,3 # [/unit]
コメントを残すという行為はとても重要です、コメントが無いと後でコードを修正する必要が出てきた時に、どこを修正したら良いのかを確認するのに非常に手間がかかります。
ぜひ、コメントを残す習慣をつけておきましょう。
ただし一つ注意しておく事があります。WMLには、#に英字が続く場合、#define、#undef、#ifdef、#ifndefなど、特別な意味を持つものもあります。
コメントにしたつもりで、偶然そのようなフレーズが現れたりすると思わぬエラーにつながります。それを回避するために、「#」の後に半角のスペースを入れておくと良いでしょう。