Skip to content

Instantly share code, notes, and snippets.

@miahmie
Last active January 26, 2022 19:01
Show Gist options
  • Save miahmie/504903d3e33b4304d4d0e2867dcbb77c to your computer and use it in GitHub Desktop.
Save miahmie/504903d3e33b4304d4d0e2867dcbb77c to your computer and use it in GitHub Desktop.
saveMacros を後から無効にして既存のセーブデータのマクロを読み込まないようにする

saveMacros を後から無効にして既存のセーブデータのマクロを読み込まないようにする

saveMacros 設定について

Config.tjs の下記定義

// ◆ 栞にマクロの情報を保存するかどうか
// 栞にマクロの情報を保存するかどうかを指定します。true を指定すると、KAG の
// マクロの情報は栞に保存され、栞をたどる動作を行うと、栞を保存した状態のマ
// クロが再現されます。
// false を指定すると、KAG のマクロの情報は栞に保存されなく、栞をたどる動作
// を行っても、現在のマクロの情報は変わりません。
// 特に 毎回マクロ定義を 作品のはじめで行うような用途では、古いマクロの情報
// が栞の読み込みによって新しいマクロの情報に上書きされてしまうことが開発の
// 妨げになるため、false を指定した方がよいでしょう。
;saveMacros = true;

のコメントの通り,ここが true だとセーブデータにマクロの情報が入ってしまい,修正パッチなどでマクロ内容が更新された時に動作がおかしくなるケースがあります。

ここを後から false にしても,既存のセーブデータには既にマクロの情報が埋め込まれているため対処のしようがありません。

ここでは,ロード時にセーブデータのマクロ情報を無視する hack を入れて,無理やり上記問題に対応する方法を説明します。

MainWindow.tjs を改造する

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.tjssaveMacrosfalse に変更します。

以上の対策で既存のセーブデータのマクロ情報は無視されて現在の状態が維持されます。

注意点

この方法は,「毎回マクロ定義を 作品のはじめで行うような用途」前提です。

スクリプトの途中でマクロ定義を使用するゲームには利用できませんのでご注意ください。 (マクロ定義の直後にそのマクロを利用[※]して,以降は利用しないようなケースのみ可)

※:定義や利用スクリプトの中にラベルやセーブポイントを含まないこと

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment