アットウィキロゴ

登場するユニットのデータは変数として保存されているので、{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