OMORI_Android/www.eng/js/plugins/VND_OmoriFixes.js

189 lines
5.8 KiB
JavaScript

// by VienDesu! 2023
//=============================================================================
// * Patches for rpg_core
//=============================================================================
Bitmap.prototype._requestImage = function (url) {
if (Bitmap._reuseImages.length !== 0) {
this._image = Bitmap._reuseImages.pop();
} else {
this._image = new Image();
}
url = replaceSpecialSymbols(url);
url = require("fs").cachedAlternativeName(url);
if (this._decodeAfterRequest && !this._loader) {
this._loader = ResourceHandler.createLoader(url, this._requestImage.bind(this, url), this._onError.bind(this));
}
this._image = new Image();
this._url = url;
this._loadingState = 'requesting';
if (!Decrypter.checkImgIgnore(url) && Decrypter.hasEncryptedImages) {
this._loadingState = 'decrypting';
Decrypter.decryptImg(url, this);
} else {
this._image.src = encodeURI(url);
this._image.addEventListener('load', this._loadListener = Bitmap.prototype._onLoad.bind(this));
this._image.addEventListener('error', this._errorListener = this._loader || Bitmap.prototype._onError.bind(this));
}
};
Graphics.printLoadingError = function (url) {
if (this._errorPrinter && !this._errorShowed) {
this._errorPrinter.innerHTML = this._makeErrorHtml('Loading Error', 'Failed to load: ' + url);
var button = document.createElement('button');
button.innerHTML = 'Retry';
button.style.fontSize = '24px';
button.style.color = '#000000';
button.style.backgroundColor = '#000000';
button.onmousedown = button.ontouchstart = function (event) {
ResourceHandler.retry();
event.stopPropagation();
};
this._errorPrinter.appendChild(button);
this._loadingCount = -Infinity;
}
};
Graphics._switchFPSMeter = function() {
};
Graphics._switchFullScreen = function () {
this._requestFullScreen();
};
Graphics._isFullScreen = function () {
return true;
};
Graphics._requestFullScreen = function () {
try {
var element = document.body;
if (element.requestFullScreen) {
element.requestFullScreen();
} else if (element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else if (element.webkitRequestFullScreen) {
element.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);
} else if (element.msRequestFullscreen) {
element.msRequestFullscreen();
}
} catch (e) {
console.log(`Fullscreen request denied! %s`, e)
}
};
Input._wrapNwjsAlert = function () {
if (Utils.isNwjs()) {
var _alert = window.alert;
window.alert = function () {
var gui = require('nw.gui');
var win = gui.window;
_alert.apply(this, arguments);
win.focus();
Input.clear();
};
}
};
Input._setupEventHandlers = function () {
document.addEventListener('keydown', this._onKeyDown.bind(this));
document.addEventListener('keyup', this._onKeyUp.bind(this));
};
TouchInput.update = function () {
return;
};
//=============================================================================
// * Patches for rpg_managers
//=============================================================================
DataManager.loadDataFile = function (name, src) {
var xhr = new XMLHttpRequest();
var url = _dfs.cachedAlternativeName('data/' + src);
xhr.open('GET', url);
xhr.overrideMimeType('application/json');
xhr.onload = function () {
if (xhr.status < 400) {
window[name] = JSON.parse(xhr.responseText);
DataManager.onLoad(window[name]);
}
};
xhr.onerror = this._mapLoader || function () {
DataManager._errorUrl = DataManager._errorUrl || url;
};
window[name] = null;
xhr.send();
};
ImageManager.loadBitmap = function (folder, filename, hue, smooth) {
if (filename) {
var path = folder + filename + '.png';
var bitmap = this.loadNormalBitmap(path, hue || 0);
bitmap.smooth = smooth;
return bitmap;
} else {
return this.loadEmptyBitmap();
}
};
ImageManager.loadNormalBitmap = function (path, hue) {
var key = this._generateCacheKey(path, hue);
var bitmap = this._imageCache.get(key);
if (!bitmap) {
bitmap = Bitmap.load(decodeURIComponent(replaceSpecialSymbols(path)));
bitmap.addLoadListener(function () {
bitmap.rotateHue(hue);
});
this._imageCache.add(key, bitmap);
} else if (!bitmap.isReady()) {
bitmap.decode();
}
return bitmap;
};
SceneManager.initNwjs = function () {
if (Utils.isNwjs()) {
var gui = require('nw.gui');
var win = gui.window;
if (process.platform === 'darwin' && !win.menu) {
var menubar = new gui.Menu({ type: 'menubar' });
var option = { hideEdit: true, hideWindow: true };
menubar.createMacBuiltin('Game', option);
win.menu = menubar;
}
}
};
SceneManager.onKeyDown = function (event) {
if (!event.ctrlKey && !event.altKey) {
switch (event.keyCode) {
case 116: // F5
if (Utils.isNwjs()) {
location.reload();
}
break;
case 119: // F8
if (Utils.isNwjs() && Utils.isOptionValid('test')) {
require('nw.gui').window.showDevTools();
}
break;
}
}
};
//=============================================================================
// * Patches for rpg_objects
//=============================================================================
Game_Temp.prototype.setDestination = function (x, y) {
return;
};