シナリオの途中でユニットの状態を変える
シナリオの途中でユニットの状態を帰るために通常は、 {MODIFY_UNIT FILTER KEY VALUE} のマクロが使われます。
FILTER ユニットを絞るためのフィルター
side,type,id などいわゆるスタンダードユニットフィルター
KEY 「何」を変えたいか
side,hitpoints,alignment など
VALUE 変更後の状態
例
サイド3のユニットすべてをサイド1の陣営に変える。
{MODIFY_UNIT (side=3) side 1}
すべての魔術師のヒットポイントを1にする。
{MODIFY_UNIT (type=Mage) hitpoints 1}
Lulu という名のユニットのアライメントを混沌にする。
{MODIFY_UNIT (id=Lulu) alignment chaotic}
シナリオの途中でユニットに新たに能力を与える
{MODIFY_UNIT FILTER KEY VALUE} マクロでは、ユニットの能力(統率、回復、伏兵、潜水など)を変えられないようです。
また、battle for Wesnoth 1.8系では、シナリオの途中でユニットに新たな能力を与えるようなタグやマクロはないようです。
やむを得ないので、特定のアイテムを取得すると新たに能力や攻撃力などを得ることができる [object] タグを流用します。
なお、本来アイテムを取得するというタグのため、ひとつのユニットにしか効果がでません。
例
[event]
name=moveto
[filter]
x,y=10,14
[filter]
[object]
duration=forever ← 効果が次のシナリオ以降も続く
[filter]
id=$unit.id ← 座標(10,14)に止まったユニット
[/filter]
[effect]
apply_to=new_ability
[abilities]
{ABILITY_NIGHTSTALK} ← 隠密能力を与える
[/abilities]
[/effect]
[/object]
[/event]
あるユニットが特定の地形上で止まるたびに HP が減少してしまう状態を作る
例(Lulu が草原で止まると一言言って、HP が減少する。)
[event]
name=moveto ←「どこかに行くと発生する」ので moveto イベント
first_time_only=no ← 条件が成立すれば何度でも発生
[filter]
id=Lulu
[filter_location]
terrain=G* ← この前後3行で草原を指定。
[/filter_location]
[/filter]
[message]
speaker=Lulu
message= _ "草は臭いわ。"
[/message]
[store_unit] ← [store_data] タグで Lulu のデータを temp_lulu として保存
[filter]
id=Lulu
[/filter]
variable=temp_lulu
[/store_unit]
[set_variable]
name=temp_lulu.hitpoints ←保存された Lulu のデータ temp_lulu のヒットポイント読み込み
add=-10 ←呼び出したヒットポイントに -10足す(つまり 10引く)
[/set_variable]
[unstore_unit] ← [unstore_unit] タグでいじくった後の Lulu のデータを呼び出す
variable=temp_lulu
[/unstore_unit]
[clear_variable] ←使用済みの変数 temp_lulu をきれいさっぱり消す。
name=temp_lulu (不用意に残しておくと、あとで悪さすることがあるので。)
[/clear_variable]
[/event]
特定のタイプのユニットについて倒されるとゾンビになってしまうようにする
やり方としては、ユニットが倒されたら、その場所にあらたにゾンビを配置することでできます。
ポイントとしては、倒されて画面上から消えてもそのタイルには倒されたユニットが残っているので、[kill]~[/kill] タグを用いて、完全に消し去ることです。これをやらないと、倒されたタイル直近の別のタイルにゾンビが出現してしてしまい、不自然になってしまいます。
例(エルフの呪術師が倒されるとゾンビになる)
[event]
name=die ← 倒されると発動するイベントなので name=die を指定します。
first_time_only=no ← 条件に一致する場合は何度も発生するようにします。
[filter]
type=Elvish Shaman
[/filter]
[kill]
id=$unit.id ← $unit というのは、今回のイベントの「当事者」を指します。
[/kill]
[unit]
type=Walking Corpse
side=1
x,y=$x1,$y1 ← $x1,$y1というのは、「当事者」のいたタイルの座標を指します。
find_vacant=no
[modifications]
{TRAIT_LOYAL} ← 「忠義」特性を付与します(いずれにしろ維持費ゼロですが。)
[/modifications]
[/unit]
[/event]
ちなみに、type=Elvish Shaman のところを side=1 とすると、もうたいていのシナリオでは負ける気がしなくなるくらいすごいことになります。ただし、「負けない」だけで勝てるかはわかりません。
あるユニットを昼間砂漠にいると1ターンごと4ヒットポイントが減少するようにする
まず、movetoイベントを砂漠かつ昼間(=混沌ではない時間帯)に発動するようにします。
次にそのユニットの状態を変数にして、ヒットポイントが4減るようにします。
[event]
name=moveto
first_time_only=no ← 条件成立すれば毎回発動
[filter]
id=Lulu
[filter_location] ← 地形専用のフィルター
terrain=D* ← D* とすることで砂漠を指定
[not] ← この3行で昼間(混沌ではない時間帯)を指定
time_of_day=chaotic
[/not]
[/filter_location]
[/filter]
[message]
speaker=Lulu
message= _ "お日様が痛い!"
[/message]
[store_unit] ← ユニットの状態を変数として保存
[filter]
id=Lulu
[/filter]
variable=temp_Lulu
[/store_unit]
[set_variable] ← ヒットポイントを4減らす
name=temp_Lulu.hitpoints
add=-4
[/set_variable]
[unstore_unit] ← 状態変更後のユニットを登場させる
variable=temp_Lulu
[/unstore_unit]
[clear_variable] ← 保存した変数を空にする。
name=temp_Lulu
[/clear_variable]
[/event]
なお、公式キャンペーンの「燃える太陽の下で」の第2章では、砂漠ではヒットポイントが減るが、オアシスでは回復するなどより凝った設定をしています。興味がある方はシナリオファイルを読んでみてください。
シナリオを分岐させる
[endlevel]
result=victory
bonus=yes
{NEW_GOLD_CARRYOVER 40}
next_scenario=分岐先のシナリオ名
[/endlevel]
最終更新:2012年03月04日 08:30