ファイルが無いときのエラー抑制(KAG用)

KAGでは存在しない画像ファイルを読み込むとエラーでゲームが止まってしまいます。
些細な指定ミスでゲームを再起動するのも大変なので止まらないようにします。

下のスクリプトをignoreMissing.tjsとして保存し、override.tjsで「Scripts.evalStorage(“ignoreMissing.tjs”);」のように読み込みます。

後はfirst.ksなどで[eval exp=”global.ignoreImageMissing = true”]とすると画像ファイルが存在しなくてもエラー停止しなくなります。
[eval exp=”global.ignoreSEMissing = true”]とすると効果音ファイルについても同じく停止しなくなります。

[tjs title=”ignoreMissing.tjs”]
global.ignoreSEMissing = false;
global.ignoreImageMissing = false;

SESoundBuffer.play = function(elm, resetvolume = true) {
var SUPER = global.WaveSoundBuffer;
SUPER.stop();
stopFade();
var storage = elm.storage;
var start = elm.start;
var found = true;
if (!Storages.isExistentStorage(storage)) {
var test;
if(test = storage + ".wav", Storages.isExistentStorage(test)) storage = test;
else if(test = storage + ".ogg", Storages.isExistentStorage(test)) storage = test;
else if(test = storage + ".tcw", Storages.isExistentStorage(test)) storage = test;
else found = false;
}
if(!found) {
if (global.ignoreSEMissing) { // 例外を抑制
dm("効果音 " + storage + " が見つかりません");
return;
} else {
throw new Exception("効果音 " + storage + " が見つかりません");
}
}
var loop = elm.loop === void ? false : +elm.loop;
looping = loop;
if(loop) currentStorage = storage;
else currentStorage = "";
try {
SUPER.open(storage);
if(resetvolume) SUPER.volume = currentVolume * 1000;
// 再生位置指定
if (start !== void &&
SUPER.labels !== void &&
(start = SUPER.labels[start]) !== void &&
(start = start.samplePosition) !== void) {
SUPER.samplePosition = start;
}
SUPER.play();
} catch(e) {
dm("効果音の再生に失敗しました(実行は続行できます) : " + e.message);
}
};

KAGLayer.loadImages = function(storage, key) {
var SUPER = global.Layer;
key = adjustColorKey(key);
try {
return SUPER.loadImages(storage, key);
} catch(e) {
if (global.ignoreImageMissing) { // 例外を抑制
dm("画像(" + storage + ")の読み込みに失敗しました。" + e.message);
return;
} else {
throw e;
}
}
};
[/tjs]

昔書いたスクリプトを発掘したので公開。
KAG専用です。KAGEXでは最初から止まらないようになっていると思います。

コメントを残す

メールアドレスが公開されることはありません。