セーブデータロード後のマクロ参照位置はセーブ時点のものになる
概要
ロード処理が行われると、ロード後のスクリプト内のマクロ参照位置はセーブ時点のものになる
マクロ参照位置とは、マクロが定義されている.ksファイルの名前およびインデックス番号(行数みたいなもの)のこと
たとえばsample.ksでこのように記述していたとする
code:sample.ks
;ここから開始
tf.test = 1
;別の処理
console.log("test2")
で、こんな感じのスクリプトを組む
code:test.ks
*start
マクロ処理のテストです。[p]の行でセーブを実行します。
その後、sample.ksをこんな感じに修正します。
code:sample.ks
;ここから開始
tf.test = 1
//ここから追加
tf.test2 = tf.test1 * 1000
console.log(tf.test2)
//ここまで追加
;別の処理
console.log("test2")
その後先ほどのセーブデータをロードし、ゲームを続けようとすると[test2]のところでエラーが発生します。
ティラノライダーで確認すると、本来[test2]は[iscript]から処理が始まらないといけないのに別の行からマクロが始まっているように見えると思います。
これは、ティラノスクリプトでゲームをロードするとゲームをセーブした時点のマクロ参照位置からマクロを参照し始めるために起こるエラーです。
マクロを変更したらセーブデータをリセットしてテストし直せというのも道理なのですが、万一リリース後にマクロに手を入れることになった際に、パッチをあてたあとはそれ以前のセーブデータが使えませんとなるとよくありません。
これを回避するため、make.ksにこのように記述します。
code:make.ks
;マクロ参照先を現在のシナリオデータ準拠にする
TYRANO.kag.stat.map_macro = $.extend(
true,
{},
TYRANO.kag.stat.map_macro,
tyrano.plugin.kag.stat.map_macro
)