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

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

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

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

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;
		}
	}
};

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です