Battle for Wesnoth のキャンペーン等に用いられる WML の記述法は、 HTML などのマークアップランゲージとほとんど同じなので、 HTML に多少馴染んでいる方は容易にわかると思います。
とりあえず例示してみましょう。
[unit]
id=Lulu
name= _ "Lulu"
type=Elvish Shaman
side=1
x=7
y=17
[/unit]
これをコンピュータが読み込むと、「これはユニット(unit)を登場させろという意味で、ID は Lulu で、表示用の名前は Lulu で、ユニットタイプはエルフの呪術師で、陣営は第1グループで、登場させるタイルの座標は xが7で、yが17なんだな。」と解釈できるわけです。
コンピュータは賢い一方でとても融通がきかないので、これをきちんと書いてあげないと消化不良を起こしてエラーを吐き出して止まってしまいます。
そんなわけで、最低限の「正しい書き方」はマスターする必要があります(と言っても私自身いつもコンピュータに怒られてばかりですが。)。
タグ
キャンペーンやシナリオなどを作成するときに、「これはユニットに関する記述だ」とか「これは勝敗に関する記述だ」ということをコンピュータにわかってもらう必要があります。
そのための記号が「タグ」です。
例えば、ユニットに関する記述をするときには、[unit] 〜 [/unit] のタグのセットを、勝敗に関する記述には、[objectives] 〜 [/objectives] のタグのセットを使用します。
つまり、タグという「枠」を作ってやる感じですね。
属性
タグのセットの間に具体的に「何が」、「どうだ」ということを書いていきます。この「何が、どうだ」を「属性」と呼びます。
書き方は、「キー(何が)= 値(どうだ)」と書きます。
例えば、陣営が第1グループなら「side=1」、状態が勝利なら「condition=win」などと書きます。
(「値」とは、英語の"value"の訳で必ずしも数字ばかりではありません。広い意味での「プログラミング言語」は、数学の影響を受けているので、数字ではないものでも、「関数」とか「変数」とか言ったりします。)
人名、会話など
属性の値が人名や会話など「文字そのもの」の場合は、先頭に _(アンダースコア)をつけて " " で囲みます。
_ についてはよくわかりませんが、翻訳する際に必要らしいです。
例
description= _ "敵将を倒す" ←「敵将を倒す」と表示する。
(便宜的に""内を日本語で書いてますが、Wesnoth(に限らずコンピュータの世界)の公用語は英語です。世界に公開するときは英語にしましょう。)
タグのルール
1 タグであることを示すために [ と ] を用いる
コンピュータにタグであることを示すためにタグは必ず [ と ] で囲まれている必要があります。
逆にタグでない部分には [ と ] は絶対に使ってはいけません。
2 必ず「開始タグ」と「終了タグ」ではさむ必要がある
「/」のない方が開始タグで「/」がついているのが終了タグです。
いろいろな属性の記述は、必ず開始タグと終了タグの間に書く必要があります。
(多くのエラーが「終了タグ」の記述忘れで発生します。)
3 タグは「入れ子」で使用することができる。
例えば、勝敗を記述する [objectives] 〜 [/objectives] の中にさらに勝利条件と敗北条件を記述するために [objecive] 〜 [/objective] タグ(最後に「s」がないことに注意)を入れ子にします。
例
[objecives] ←ここから勝敗についての記述
side=1 ←第1の陣営について
[objecive] ←勝敗条件
description= _ "敵将を倒す" ←「敵将を倒す」と表示
condition=win ←状態は勝利
[/objective] ←勝敗条件の記述終わり
[objecive] ←別の勝敗条件
description= _ "主人公の死" (以下同様)
condition=win
[/objective]
[objecive]
description= _ "時間切れ"
condition=lose
[/objective]
[/objectives] ←勝敗についての記述終わり
誤った例
[objecives]
side=1
[objecive]
description= _ "敵将を倒す"
condition=win
[/objective]
[objecive]
description= _ "主人公の死"
condition=win
[/objective]
[objecive]
description= _ "時間切れ"
condition=lose
[/objectives]
[/objective] ← [/objectives] の内側にあるべき [/objective] が外に置かれている。
マクロ
マクロというのは、決まりきったことについて、いちいち要素を ○○=▲▲ と書いていくのはめんどうなので、もっと簡略に書けるようにしたものです。
{マクロ名(大文字英語) 値 値 値・・・} というような書き方をします。値の数は、マクロによって違ってきますし、値を持たないマクロもあります。
マクロのつかいかたについては、
そもそもマクロとは?も参照してください。
例
{SCENARIO_MUSIC "underground.ogg"} ←シナリオの BGM に "underground.ogg" を指定する。
ヒント
タグの書き忘れや入れ子の間違いを防ぐために次のよう書く習慣をつけましょう。
- 開始タグと終了タグを先に書く
- 適当に字下げ(インデント)をする。(見やすさのためにも大事!)
字下げは、必ず「半角スペース」ですること。全角でやるとエラーになってしまう上に、発見しづらいです。
例
一番外側のタグのセットを書く
[objectives]
[/objectives]
タグの間に中身を書く。このとき外側のタグより数文字字下げする。
[objectives]
side=1
[/objectives]
内側のタグのセットを書く
[objectives]
side=1
[objective]
[/objective]
[objective]
[/objective]
[objective]
[/objective]
[/objectives]
さらに字下げをして内側のタグの中身を書く
[objectives]
side=1
[objective]
description= _ "敵将を倒す"
condition=win
[/objective]
[objective]
[/objective]
[objective]
[/objective]
[/objectives]
あと、「うまく動いた」ものは、バックアップしておきましょう。今後シナリオなどをいろいろいじっていくと動かなくなることがあります(というかそれが普通)が、上書きされてしまうと、戻しようがありません。
最終更新:2015年01月03日 11:53