登場するユニットのデータは変数として保存されているので、{VARIABLE} や [set_variables] などを使って、変更、追加、削除が可能です。
ただし、ゲーム中のデータを直接いじることはできないので、[store_unit]、[unstore_unit] を利用します。
(もっとも {MODIFY_UNIT} で容易にできるような変更なら、こちらを使う方が簡単で確実だと思われます。)
[store_unit] とは
[store_unit] とは、いわば「ある時点での特定のユニットの状態に名前をつけて、変数(ハッシュ、配列)の形で保存したもの」です。
ゲームデータそのものとは、別のところに保存されますので、その後そのユニットがレベルアップしたり死んだりしても、その影響を受けません。
変数ですので、{VARIABLE} や [set_variables] などを使ってデータをいじる事が可能になります。
また、他の変数同様に格納されたデータを読み出す事ができます。
[unstore_unit] とは
[unstore_unit] とは、いわば「[store_unit] でゲームデータとは別のところに保存したユニット情報をゲームデータに戻す事」です。
そのため、[unstore_nit] を実行すると、そのユニットのデータは上書きされてしまいます。また、そのユニットが存在していないときには、新たにユニットが作られます。
ユニットデータを読み出す
例えば次のようにユニットデータを保存したとします。(ちなみに Lulu はエルフの呪術師とします。)
[store_unit]
variable=Lulu_store
[filter]
id=Lulu
[/filter]
[/store_unit]
このとき Lulu のデータを読み出したいときには、次のようにします。
$Lulu_store.race -> Lulu の種族を読み出す
$Lulu_store.attack.name -> Lulu の(最初の)攻撃名を読み出す
$Lulu_store.attack[1].name -> Lulu の2番目の攻撃名を読み出す
実行例
[message]
speaker=Lulu
message= _ "私の攻撃は $Lulu_store.attack.name と $Lulu_store.attack[1].name とそれから $Lulu_store.attack[2].name よ"
[/message]
2番目、3番目の攻撃を持っていない場合は、結果に何も表示されません。
ユニットの中身をいじってみる
比較的簡単な例
まずは、[store_unit] します。
[store_unit]
variable=Lulu_store
[filter]
id=Lulu
[/filter]
[/store_unit]
次に変更したい要素を記述します。
{VARIABLE Lulu_store.max_moves 100 } -> 最大移動能力を100にする
{VARIABLE Lulu_store.moves 100 } -> 移動能力を100にする
{VARIABLE Lulu_store.attack.name "金属バット" } -> 最初の攻撃の名前を「金属バット」に変える
{VARIABLE Lulu_store.attack[1].name "抱きつき" } -> 2ばん目の攻撃の名前を「抱きつき」に変える
このままでは、変数「Lulu_store」の内容が変わっただけで、ゲームそのものには反映されていませんので、[unstore_unit] を使って変更をゲームに反映させます。
[unstore_unit]
variable=Lulu_store
[/unstore_unit]
こうする事で Lulu は恐るべき能力を与えられたハイパーLulu に生まれ変わることができます。
注意点
例えば
{VARIABLE Lulu_store.type "Elvish Shyde" } -> タイプをシェードに変える
とやると、「見た目」だけがシェードになりますが、レベルや攻撃力などは元のままです。
タイプを変えたい場合は、普通に
{MODIFY_UNIT id=Lulu type "Elvish Shyde"}
とやるのがよいでしょう(ただし、先に与えられたハイパーな能力は多分失われてしまうので、再度付与する必要があります。)。
ちょっと高度な例
例えばゲームの途中で特定のユニットの投射攻撃に「狂戦」を付与するのはなかなか面倒なのですが、変数を活用すると割と簡単にできます(個人の感想です。)。
まずは、お約束で [store_unit] します。
[store_unit]
variable=Lulu_store
[filter]
id=Lulu
[/filter]
[/store_unit]
今度は、[set_variables] を使って次のように記述します。
[set_variables]
name=Lulu_store.attack[1] <- 投射攻撃「巻きつき」は2番目の攻撃なので、[1] とします。
mode=merge <- これを忘れないように!
[value]
name="ハイパー巻きつき"
damage=20
[specials] <- 以下の3行で「狂戦」を記述してます。
{WEAPON_SPECIAL_POISON}
[/specials]
[/value]
[/set_variables]
ここで大切なのは、3行目の「mode=merge」です。
[set_variables] では、デフォルトでは、既存の内容(今回は、Lulu_store.attack[1]=2番目の攻撃)がすべて破棄されて上書きされます。そのため、「mode=merge」を忘れると、ハイパー巻きつきという名前で相手へのダメージは20で狂戦だけど実際には何もできない攻撃となってしまいます。
「mode=merge」にすると、変更のある要素は上書きされ、元々ない要素は付け加えられますが、それ以外の要素は元のまま保持されます(ちなみに既存の特殊攻撃「遅化」は保持されます。
ちなみに mode のオプションは次の4つです。
replace: 既存のデータを破棄して置き換えます。(デフォルト)
append: データを追加します。
merge: 既存のデータに統合します。
insert: nameで指定したインデックスに挿入します。(別記例参照)
最後に [unstore_unit] でゲームデータに反映させます。
[unstore_unit]
variable=Lulu_store
[/unstore_unit]
mode=insert の使用例
使用例1
[set_variables]
name=Lulu_store.attack[0].specials
mode=insert
[value]
{WEAPON_SPECIAL_BERSERK}
[/value]
[/set_variables]
この場合、Lulu の最初の攻撃に特殊攻撃を持っていないときには、 [specials] を追加し、その中に {WEAPON_SPECIAL_BERSERK}(狂戦)を挿入します。
一方、すでに特殊攻撃を持っている場合には、既存の特殊攻撃を破棄し、{WEAPON_SPECIAL_BERSERK} で置き換えます。
使用例2
[set_variables]
name=Lulu_store.attack[1].specials
mode=insert
[value]
{WEAPON_SPECIAL_BERSERK}
{WEAPON_SPECIAL_SLOW}
[/value]
[/set_variables]
既に特殊攻撃「遅化」を持っているところに、「狂戦」を追加したいような場合は、このように書きます。
(ゲームバランスのため特殊能力の付けすぎに注意しましょう。)
最終更新:2017年11月26日 12:55