Config.tjs
の下記定義
// ◆ 栞にマクロの情報を保存するかどうか
// 栞にマクロの情報を保存するかどうかを指定します。true を指定すると、KAG の
// マクロの情報は栞に保存され、栞をたどる動作を行うと、栞を保存した状態のマ
// クロが再現されます。
// false を指定すると、KAG のマクロの情報は栞に保存されなく、栞をたどる動作
// を行っても、現在のマクロの情報は変わりません。
// 特に 毎回マクロ定義を 作品のはじめで行うような用途では、古いマクロの情報
// が栞の読み込みによって新しいマクロの情報に上書きされてしまうことが開発の
// 妨げになるため、false を指定した方がよいでしょう。
;saveMacros = true;
のコメントの通り,ここが true
だとセーブデータにマクロの情報が入ってしまい,修正パッチなどでマクロ内容が更新された時に動作がおかしくなるケースがあります。
ここを後から false
にしても,既存のセーブデータには既にマクロの情報が埋め込まれているため対処のしようがありません。
ここでは,ロード時にセーブデータのマクロ情報を無視する hack を入れて,無理やり上記問題に対応する方法を説明します。
function restoreFlags()
にある
mainConductor.restore(pcflags.mainConductor);
の部分を
var macros = void;
if (!saveMacros) pcflags.mainConductor.macros <-> macros;
mainConductor.restore(pcflags.mainConductor);
if (!saveMacros) pcflags.mainConductor.macros <-> macros;
に書き換えて,Config.tjs
の saveMacros
を false
に変更します。
以上の対策で既存のセーブデータのマクロ情報は無視されて現在の状態が維持されます。
この方法は,「毎回マクロ定義を 作品のはじめで行うような用途」前提です。
スクリプトの途中でマクロ定義を使用するゲームには利用できませんのでご注意ください。 (マクロ定義の直後にそのマクロを利用[※]して,以降は利用しないようなケースのみ可)
※:定義や利用スクリプトの中にラベルやセーブポイントを含まないこと