rpg_managers.js versus new_rpg_managers.js

Created Diff never expires
//=============================================================================
//=============================================================================
// rpg_managers.js v1.5.2
// rpg_managers.js v1.5.2
//=============================================================================
//=============================================================================


//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// DataManager
// DataManager
//
//
// The static class that manages the database and game objects.
// The static class that manages the database and game objects.


function DataManager() {
function DataManager() {
throw new Error('This is a static class');
throw new Error('This is a static class');
}
}


var $dataActors = null;
var $dataActors = null;
var $dataClasses = null;
var $dataClasses = null;
var $dataSkills = null;
var $dataSkills = null;
var $dataItems = null;
var $dataItems = null;
var $dataWeapons = null;
var $dataWeapons = null;
var $dataArmors = null;
var $dataArmors = null;
var $dataEnemies = null;
var $dataEnemies = null;
var $dataTroops = null;
var $dataTroops = null;
var $dataStates = null;
var $dataStates = null;
var $dataAnimations = null;
var $dataAnimations = null;
var $dataTilesets = null;
var $dataTilesets = null;
var $dataCommonEvents = null;
var $dataCommonEvents = null;
var $dataSystem = null;
var $dataSystem = null;
var $dataMapInfos = null;
var $dataMapInfos = null;
var $dataMap = null;
var $dataMap = null;
var $gameTemp = null;
var $gameTemp = null;
var $gameSystem = null;
var $gameSystem = null;
var $gameScreen = null;
var $gameScreen = null;
var $gameTimer = null;
var $gameTimer = null;
var $gameMessage = null;
var $gameMessage = null;
var $gameSwitches = null;
var $gameSwitches = null;
var $gameVariables = null;
var $gameVariables = null;
var $gameSelfSwitches = null;
var $gameSelfSwitches = null;
var $gameActors = null;
var $gameActors = null;
var $gameParty = null;
var $gameParty = null;
var $gameTroop = null;
var $gameTroop = null;
var $gameMap = null;
var $gameMap = null;
var $gamePlayer = null;
var $gamePlayer = null;
var $testEvent = null;
var $testEvent = null;


DataManager._globalId = 'RPGMV';
DataManager._globalId = 'RPGMV';
DataManager._lastAccessedId = 1;
DataManager._lastAccessedId = 1;
DataManager._errorUrl = null;
DataManager._errorUrl = null;


DataManager._databaseFiles = [
DataManager._databaseFiles = [
{ name: '$dataActors', src: 'Actors.json' },
{ name: '$dataActors', src: 'Actors.json' },
{ name: '$dataClasses', src: 'Classes.json' },
{ name: '$dataClasses', src: 'Classes.json' },
{ name: '$dataSkills', src: 'Skills.json' },
{ name: '$dataSkills', src: 'Skills.json' },
{ name: '$dataItems', src: 'Items.json' },
{ name: '$dataItems', src: 'Items.json' },
{ name: '$dataWeapons', src: 'Weapons.json' },
{ name: '$dataWeapons', src: 'Weapons.json' },
{ name: '$dataArmors', src: 'Armors.json' },
{ name: '$dataArmors', src: 'Armors.json' },
{ name: '$dataEnemies', src: 'Enemies.json' },
{ name: '$dataEnemies', src: 'Enemies.json' },
{ name: '$dataTroops', src: 'Troops.json' },
{ name: '$dataTroops', src: 'Troops.json' },
{ name: '$dataStates', src: 'States.json' },
{ name: '$dataStates', src: 'States.json' },
{ name: '$dataAnimations', src: 'Animations.json' },
{ name: '$dataAnimations', src: 'Animations.json' },
{ name: '$dataTilesets', src: 'Tilesets.json' },
{ name: '$dataTilesets', src: 'Tilesets.json' },
{ name: '$dataCommonEvents', src: 'CommonEvents.json' },
{ name: '$dataCommonEvents', src: 'CommonEvents.json' },
{ name: '$dataSystem', src: 'System.json' },
{ name: '$dataSystem', src: 'System.json' },
{ name: '$dataMapInfos', src: 'MapInfos.json' }
{ name: '$dataMapInfos', src: 'MapInfos.json' }
];
];


DataManager.loadDatabase = function() {
DataManager.loadDatabase = function() {
// The initialization of DB driver below would ideally be on the main.html page
localforage.defineDriver(window.cordovaSQLiteDriver).then(function() {
return localforage.setDriver([
window.cordovaSQLiteDriver._driver,
localforage.INDEXEDDB,
localforage.WEBSQL,
localforage.LOCALSTORAGE
]);
}

var test = this.isBattleTest() || this.isEventTest();
var test = this.isBattleTest() || this.isEventTest();
var prefix = test ? 'Test_' : '';
var prefix = test ? 'Test_' : '';
for (var i = 0; i < this._databaseFiles.length; i++) {
for (var i = 0; i < this._databaseFiles.length; i++) {
var name = this._databaseFiles[i].name;
var name = this._databaseFiles[i].name;
var src = this._databaseFiles[i].src;
var src = this._databaseFiles[i].src;
this.loadDataFile(name, prefix + src);
this.loadDataFile(name, prefix + src);
}
}
if (this.isEventTest()) {
if (this.isEventTest()) {
this.loadDataFile('$testEvent', prefix + 'Event.json');
this.loadDataFile('$testEvent', prefix + 'Event.json');
}
}
};
};


DataManager.loadDataFile = function(name, src) {
DataManager.loadDataFile = function(name, src) {
var xhr = new XMLHttpRequest();
var xhr = new XMLHttpRequest();
var url = 'data/' + src;
var url = 'data/' + src;
xhr.open('GET', url);
xhr.open('GET', url);
xhr.overrideMimeType('application/json');
xhr.overrideMimeType('application/json');
xhr.onload = function() {
xhr.onload = function() {
if (xhr.status < 400) {
if (xhr.status < 400) {
window[name] = JSON.parse(xhr.responseText);
window[name] = JSON.parse(xhr.responseText);
DataManager.onLoad(window[name]);
DataManager.onLoad(window[name]);
}
}
};
};
xhr.onerror = this._mapLoader || function() {
xhr.onerror = this._mapLoader || function() {
DataManager._errorUrl = DataManager._errorUrl || url;
DataManager._errorUrl = DataManager._errorUrl || url;
};
};
window[name] = null;
window[name] = null;
xhr.send();
xhr.send();
};
};


DataManager.isDatabaseLoaded = function() {
DataManager.isDatabaseLoaded = function() {
this.checkError();
this.checkError();
for (var i = 0; i < this._databaseFiles.length; i++) {
for (var i = 0; i < this._databaseFiles.length; i++) {
if (!window[this._databaseFiles[i].name]) {
if (!window[this._databaseFiles[i].name]) {
return false;
return false;
}
}
}
}
return true;
return true;
};
};


DataManager.loadMapData = function(mapId) {
DataManager.loadMapData = function(mapId) {
if (mapId > 0) {
if (mapId > 0) {
var filename = 'Map%1.json'.format(mapId.padZero(3));
var filename = 'Map%1.json'.format(mapId.padZero(3));
this._mapLoader = ResourceHandler.createLoader('data/' + filename, this.loadDataFile.bind(this, '$dataMap', filename));
this._mapLoader = ResourceHandler.createLoader('data/' + filename, this.loadDataFile.bind(this, '$dataMap', filename));
this.loadDataFile('$dataMap', filename);
this.loadDataFile('$dataMap', filename);
} else {
} else {
this.makeEmptyMap();
this.makeEmptyMap();
}
}
};
};


DataManager.makeEmptyMap = function() {
DataManager.makeEmptyMap = function() {
$dataMap = {};
$dataMap = {};
$dataMap.data = [];
$dataMap.data = [];
$dataMap.events = [];
$dataMap.events = [];
$dataMap.width = 100;
$dataMap.width = 100;
$dataMap.height = 100;
$dataMap.height = 100;
$dataMap.scrollType = 3;
$dataMap.scrollType = 3;
};
};


DataManager.isMapLoaded = function() {
DataManager.isMapLoaded = function() {
this.checkError();
this.checkError();
return !!$dataMap;
return !!$dataMap;
};
};


DataManager.onLoad = function(object) {
DataManager.onLoad = function(object) {
var array;
var array;
if (object === $dataMap) {
if (object === $dataMap) {
this.extractMetadata(object);
this.extractMetadata(object);
array = object.events;
array = object.events;
} else {
} else {
array = object;
array = object;
}
}
if (Array.isArray(array)) {
if (Array.isArray(array)) {
for (var i = 0; i < array.length; i++) {
for (var i = 0; i < array.length; i++) {
var data = array[i];
var data = array[i];
if (data && data.note !== undefined) {
if (data && data.note !== undefined) {
this.extractMetadata(data);
this.extractMetadata(data);
}
}
}
}
}
}
if (object === $dataSystem) {
if (object === $dataSystem) {
Decrypter.hasEncryptedImages = !!object.hasEncryptedImages;
Decrypter.hasEncryptedImages = !!object.hasEncryptedImages;
Decrypter.hasEncryptedAudio = !!object.hasEncryptedAudio;
Decrypter.hasEncryptedAudio = !!object.hasEncryptedAudio;
Scene_Boot.loadSystemImages();
Scene_Boot.loadSystemImages();
}
}
};
};


DataManager.extractMetadata = function(data) {
DataManager.extractMetadata = function(data) {
var re = /<([^<>:]+)(:?)([^>]*)>/g;
var re = /<([^<>:]+)(:?)([^>]*)>/g;
data.meta = {};
data.meta = {};
for (;;) {
for (;;) {
var match = re.exec(data.note);
var match = re.exec(data.note);
if (match) {
if (match) {
if (match[2] === ':') {
if (match[2] === ':') {
data.meta[match[1]] = match[3];
data.meta[match[1]] = match[3];
} else {
} else {
data.meta[match[1]] = true;
data.meta[match[1]] = true;
}
}
} else {
} else {
break;
break;
}
}
}
}
};
};


DataManager.checkError = function() {
DataManager.checkError = function() {
if (DataManager._errorUrl) {
if (DataManager._errorUrl) {
throw new Error('Failed to load: ' + DataManager._errorUrl);
throw new Error('Failed to load: ' + DataManager._errorUrl);
}
}
};
};


DataManager.isBattleTest = function() {
DataManager.isBattleTest = function() {
return Utils.isOptionValid('btest');
return Utils.isOptionValid('btest');
};
};


DataManager.isEventTest = function() {
DataManager.isEventTest = function() {
return Utils.isOptionValid('etest');
return Utils.isOptionValid('etest');
};
};


DataManager.isSkill = function(item) {
DataManager.isSkill = function(item) {
return item && $dataSkills.contains(item);
return item && $dataSkills.contains(item);
};
};


DataManager.isItem = function(item) {
DataManager.isItem = function(item) {
return item && $dataItems.contains(item);
return item && $dataItems.contains(item);
};
};


DataManager.isWeapon = function(item) {
DataManager.isWeapon = function(item) {
return item && $dataWeapons.contains(item);
return item && $dataWeapons.contains(item);
};
};


DataManager.isArmor = function(item) {
DataManager.isArmor = function(item) {
return item && $dataArmors.contains(item);
return item && $dataArmors.contains(item);
};
};


DataManager.createGameObjects = function() {
DataManager.createGameObjects = function() {
$gameTemp = new Game_Temp();
$gameTemp = new Game_Temp();
$gameSystem = new Game_System();
$gameSystem = new Game_System();
$gameScreen = new Game_Screen();
$gameScreen = new Game_Screen();
$gameTimer = new Game_Timer();
$gameTimer = new Game_Timer();
$gameMessage = new Game_Message();
$gameMessage = new Game_Message();
$gameSwitches = new Game_Switches();
$gameSwitches = new Game_Switches();
$gameVariables = new Game_Variables();
$gameVariables = new Game_Variables();
$gameSelfSwitches = new Game_SelfSwitches();
$gameSelfSwitches = new Game_SelfSwitches();
$gameActors = new Game_Actors();
$gameActors = new Game_Actors();
$gameParty = new Game_Party();
$gameParty = new Game_Party();
$gameTroop = new Game_Troop();
$gameTroop = new Game_Troop();
$gameMap = new Game_Map();
$gameMap = new Game_Map();
$gamePlayer = new Game_Player();
$gamePlayer = new Game_Player();
};
};


DataManager.setupNewGame = function() {
DataManager.setupNewGame = function() {
this.createGameObjects();
this.createGameObjects();
this.selectSavefileForNewGame();
this.selectSavefileForNewGame();
$gameParty.setupStartingMembers();
$gameParty.setupStartingMembers();
$gamePlayer.reserveTransfer($dataSystem.startMapId,
$gamePlayer.reserveTransfer($dataSystem.startMapId,
$dataSystem.startX, $dataSystem.startY);
$dataSystem.startX, $dataSystem.startY);
Graphics.frameCount = 0;
Graphics.frameCount = 0;
};
};


DataManager.setupBattleTest = function() {
DataManager.setupBattleTest = function() {
this.createGameObjects();
this.createGameObjects();
$gameParty.setupBattleTest();
$gameParty.setupBattleTest();
BattleManager.setup($dataSystem.testTroopId, true, false);
BattleManager.setup($dataSystem.testTroopId, true, false);
BattleManager.setBattleTest(true);
BattleManager.setBattleTest(true);
BattleManager.playBattleBgm();
BattleManager.playBattleBgm();
};
};


DataManager.setupEventTest = function() {
DataManager.setupEventTest = function() {
this.createGameObjects();
this.createGameObjects();
this.selectSavefileForNewGame();
this.selectSavefileForNewGame();
$gameParty.setupStartingMembers();
$gameParty.setupStartingMembers();
$gamePlayer.reserveTransfer(-1, 8, 6);
$gamePlayer.reserveTransfer(-1, 8, 6);
$gamePlayer.setTransparent(false);
$gamePlayer.setTransparent(false);
};
};


DataManager.loadGlobalInfo = function() {
DataManager.loadGlobalInfo = function() {
var json;
var json;
try {
try {
json = StorageManager.load(0);
json = StorageManager.load(0);
} catch (e) {
} catch (e) {
console.error(e);
console.error(e);
return [];
return [];
}
}
if (json) {
if (json) {
var globalInfo = JSON.parse(json);
var globalInfo = JSON.parse(json);
for (var i = 1; i <= this.maxSavefiles(); i++) {
for (var i = 1; i <= this.maxSavefiles(); i++) {
if (!StorageManager.exists(i)) {
if (!StorageManager.exists(i)) {
delete globalInfo[i];
delete globalInfo[i];
}
}
}
}
return globalInfo;
return globalInfo;
} else {
} else {
return [];
return [];
}
}
};
};


DataManager.saveGlobalInfo = function(info) {
DataManager.saveGlobalInfo = function(info) {
StorageManager.save(0, JSON.stringify(info));
StorageManager.save(0, JSON.stringify(info));
};
};


DataManager.isThisGameFile = function(savefileId) {
DataManager.isThisGameFile = function(savefileId) {
var globalInfo = this.loadGlobalInfo();
var globalInfo = this.loadGlobalInfo();
if (globalInfo && globalInfo[savefileId]) {
if (globalInfo && globalInfo[savefileId]) {
if (StorageManager.isLocalMode()) {
if (StorageManager.isLocalMode()) {
return true;
return true;
} else {
} else {
var savefile = globalInfo[savefileId];
var savefile = globalInfo[savefileId];
return (savefile.globalId === this._globalId &&
return (savefile.globalId === this._globalId &&
savefile.title === $dataSystem.gameTitle);
savefile.title === $dataSystem.gameTitle);
}
}
} else {
} else {
return false;
return false;
}
}
};
};


DataManager.isAnySavefileExists = function() {
DataManager.isAnySavefileExists = function() {
var globalInfo = this.loadGlobalInfo();
var globalInfo = this.loadGlobalInfo();
if (globalInfo) {
if (globalInfo) {
for (var i = 1; i < globalInfo.length; i++) {
for (var i = 1; i < globalInfo.length; i++) {
if (this.isThisGameFile(i)) {
if (this.isThisGameFile(i)) {
return true;
return true;
}
}
}
}
}
}
return false;
return false;
};
};


DataManager.latestSavefileId = function() {
DataManager.latestSavefileId = function() {
var globalInfo = this.loadGlobalInfo();
var globalInfo = this.loadGlobalInfo();
var savefileId = 1;
var savefileId = 1;
var timestamp = 0;
var timestamp = 0;
if (globalInfo) {
if (globalInfo) {
for (var i = 1; i < globalInfo.length; i++) {
for (var i = 1; i < globalInfo.length; i++) {
if (this.isThisGameFile(i) && globalInfo[i].timestamp > timestamp) {
if (this.isThisGameFile(i) && globalInfo[i].timestamp > timestamp) {
timestamp = globalInfo[i].timestamp;
timestamp = globalInfo[i].timestamp;
savefileId = i;
savefileId = i;
}
}
}
}
}
}
return savefileId;
return savefileId;
};
};


DataManager.loadAllSavefileImages = function() {
DataManager.loadAllSavefileImages = function() {
var globalInfo = this.loadGlobalInfo();
var globalInfo = this.loadGlobalInfo();
if (globalInfo) {
if (globalInfo) {
for (var i = 1; i < globalInfo.length; i++) {
for (var i = 1; i < globalInfo.length; i++) {
if (this.isThisGameFile(i)) {
if (this.isThisGameFile(i)) {
var info = globalInfo[i];
var info = globalInfo[i];
this.loadSavefileImages(info);
this.loadSavefileImages(info);
}
}
}
}
}
}
};
};


DataManager.loadSavefileImages = function(info) {
DataManager.loadSavefileImages = function(info) {
if (info.characters) {
if (info.characters) {
for (var i = 0; i < info.characters.length; i++) {
for (var i = 0; i < info.characters.length; i++) {
ImageManager.reserveCharacter(info.characters[i][0]);
ImageManager.reserveCharacter(info.characters[i][0]);
}
}
}
}
if (info.faces) {
if (info.faces) {
for (var j = 0; j < info.faces.length; j++) {
for (var j = 0; j < info.faces.length; j++) {
ImageManager.reserveFace(info.faces[j][0]);
ImageManager.reserveFace(info.faces[j][0]);
}
}
}
}
};
};


DataManager.maxSavefiles = function() {
DataManager.maxSavefiles = function() {
return 20;
return 20;
};
};


DataManager.saveGame = function(savefileId) {
DataManager.saveGame = function(savefileId) {
try {
try {
StorageManager.backup(savefileId);
StorageManager.backup(savefileId);
return this.saveGameWithoutRescue(savefileId);
return this.saveGameWithoutRescue(savefileId);
} catch (e) {
} catch (e) {
console.error(e);
console.error(e);
try {
try {
StorageManager.remove(savefileId);
StorageManager.remove(savefileId);
StorageManager.restoreBackup(savefileId);
StorageManager.restoreBackup(savefileId);
} catch (e2) {
} catch (e2) {
}
}
return false;
return false;
}
}
};
};


DataManager.loadGame = function(savefileId) {
DataManager.loadGame = function(savefileId) {
try {
try {
return this.loadGameWithoutRescue(savefileId);
return this.loadGameWithoutRescue(savefileId);
} catch (e) {
} catch (e) {
console.error(e);
console.error(e);
return false;
return false;
}
}
};
};


DataManager.loadSavefileInfo = function(savefileId) {
DataManager.loadSavefileInfo = function(savefileId) {
var globalInfo = this.loadGlobalInfo();
var globalInfo = this.loadGlobalInfo();
return (globalInfo && globalInfo[savefileId]) ? globalInfo[savefileId] : null;
return (globalInfo && globalInfo[savefileId]) ? globalInfo[savefileId] : null;
};
};


DataManager.lastAccessedSavefileId = function() {
DataManager.lastAccessedSavefileId = function() {
return this._lastAccessedId;
return this._lastAccessedId;
};
};


DataManager.saveGameWithoutRescue = function(savefileId) {
DataManager.saveGameWithoutRescue = function(savefileId) {
var json = JsonEx.stringify(this.makeSaveContents());
var json = JsonEx.stringify(this.makeSaveContents());
if (json.length >= 200000) {
if (json.length >= 200000) {
console.warn('Save data too big!');
console.warn('Save data too big!');
}
}
StorageManager.save(savefileId, json);
StorageManager.save(savefileId, json);
this._lastAccessedId = savefileId;
this._lastAccessedId = savefileId;
var globalInfo = this.loadGlobalInfo() || [];
var globalInfo = this.loadGlobalInfo() || [];
globalInfo[savefileId] = this.makeSavefileInfo();
globalInfo[savefileId] = this.makeSavefileInfo();
this.saveGlobalInfo(globalInfo);
this.saveGlobalInfo(globalInfo);
return true;
return true;
};
};


DataManager.loadGameWithoutRescue = function(savefileId) {
DataManager.loadGameWithoutRescue = function(savefileId) {
var globalInfo = this.loadGlobalInfo();
var globalInfo = this.loadGlobalInfo();
if (this.isThisGameFile(savefileId)) {
if (this.isThisGameFile(savefileId)) {
var json = StorageManager.load(savefileId);
var json = StorageManager.load(savefileId);
this.createGameObjects();
this.createGameObjects();
this.extractSaveContents(JsonEx.parse(json));
this.extractSaveContents(JsonEx.parse(json));
this._lastAccessedId = savefileId;
this._lastAccessedId = savefileId;
return true;
return true;
} else {
} else {
return false;
return false;
}
}
};
};


DataManager.selectSavefileForNewGame = function() {
DataManager.selectSavefileForNewGame = function() {
var globalInfo = this.loadGlobalInfo();
var globalInfo = this.loadGlobalInfo();
this._lastAccessedId = 1;
this._lastAccessedId = 1;
if (globalInfo) {
if (globalInfo) {
var numSavefiles = Math.max(0, globalInfo.length - 1);
var numSavefiles = Math.max(0, globalInfo.length - 1);
if (numSavefiles < this.maxSavefiles()) {
if (numSavefiles < this.maxSavefiles()) {
this._lastAccessedId = numSavefiles + 1;
this._lastAccessedId = numSavefiles + 1;
} else {
} else {
var timestamp = Number.MAX_VALUE;
var timestamp = Number.MAX_VALUE;
for (var i = 1; i < globalInfo.length; i++) {
for (var i = 1; i < globalInfo.length; i++) {
if (!globalInfo[i]) {
if (!globalInfo[i]) {
this._lastAccessedId = i;
this._lastAccessedId = i;
break;
break;
}
}
if (globalInfo[i].timestamp < timestamp) {
if (globalInfo[i].timestamp < timestamp) {
timestamp = globalInfo[i].timestamp;
timestamp = globalInfo[i].timestamp;
this._lastAccessedId = i;
this._lastAccessedId = i;
}
}
}
}
}
}
}
}
};
};


DataManager.makeSavefileInfo = function() {
DataManager.makeSavefileInfo = function() {
var info = {};
var info = {};
info.globalId = this._globalId;
info.globalId = this._globalId;
info.title = $dataSystem.gameTitle;
info.title = $dataSystem.gameTitle;
info.characters = $gameParty.charactersForSavefile();
info.characters = $gameParty.charactersForSavefile();
info.faces = $gameParty.facesForSavefile();
info.faces = $gameParty.facesForSavefile();
info.playtime = $gameSystem.playtimeText();
info.playtime = $gameSystem.playtimeText();
info.timestamp = Date.now();
info.timestamp = Date.now();
return info;
return info;
};
};


DataManager.makeSaveContents = function() {
DataManager.makeSaveContents = function() {
// A save data does not contain $gameTemp, $gameMessage, and $gameTroop.
// A save data does not contain $gameTemp, $gameMessage, and $gameTroop.
var contents = {};
var contents = {};
contents.system = $gameSystem;
contents.system = $gameSystem;
contents.screen = $gameScreen;
contents.screen = $gameScreen;
contents.timer = $gameTimer;
contents.timer = $gameTimer;
contents.switches = $gameSwitches;
contents.switches = $gameSwitches;
contents.variables = $gameVariables;
contents.variables = $gameVariables;
contents.selfSwitches = $gameSelfSwitches;
contents.selfSwitches = $gameSelfSwitches;
contents.actors = $gameActors;
contents.actors = $gameActors;
contents.party = $gameParty;
contents.party = $gameParty;
contents.map = $gameMap;
contents.map = $gameMap;
contents.player = $gamePlayer;
contents.player = $gamePlayer;
return contents;
return contents;
};
};


DataManager.extractSaveContents = function(contents) {
DataManager.extractSaveContents = function(contents) {
$gameSystem = contents.system;
$gameSystem = contents.system;
$gameScreen = contents.screen;
$gameScreen = contents.screen;
$gameTimer = contents.timer;
$gameTimer = contents.timer;
$gameSwitches = contents.switches;
$gameSwitches = contents.switches;
$gameVariables = contents.variables;
$gameVariables = contents.variables;
$gameSelfSwitches = contents.selfSwitches;
$gameSelfSwitches = contents.selfSwitches;
$gameActors = contents.actors;
$gameActors = contents.actors;
$gameParty = contents.party;
$gameParty = contents.party;
$gameMap = contents.map;
$gameMap = contents.map;
$gamePlayer = contents.player;
$gamePlayer = contents.player;
};
};


//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// ConfigManager
// ConfigManager
//
//
// The static class that manages the configuration data.
// The static class that manages the configuration data.


function ConfigManager() {
function ConfigManager() {
throw new Error('This is a static class');
throw new Error('This is a static class');
}
}


ConfigManager.alwaysDash = false;
ConfigManager.alwaysDash = false;
ConfigManager.commandRemember = false;
ConfigManager.commandRemember = false;


Object.defineProperty(ConfigManager, 'bgmVolume', {
Object.defineProperty(ConfigManager, 'bgmVolume', {
get: function() {
get: function() {
return AudioManager._bgmVolume;
return AudioManager._bgmVolume;
},
},
set: function(value) {
set: function(value) {
AudioManager.bgmVolume = value;
AudioManager.bgmVolume = value;
},
},
configurable: true
configurable: true
});
});


Object.defineProperty(ConfigManager, 'bgsVolume', {
Object.defineProperty(ConfigManager, 'bgsVolume', {
get: function() {
get: function() {
return AudioManager.bgsVolume;
return AudioManager.bgsVolume;
},
},
set: function(value) {
set: function(value) {
AudioManager.bgsVolume = value;
AudioManager.bgsVolume = value;
},
},
configurable: true
configurable: true
});
});


Object.defineProperty(ConfigManager, 'meVolume', {
Object.defineProperty(ConfigManager, 'meVolume', {
get: function() {
get: function() {
return AudioManager.meVolume;
return AudioManager.meVolume;
},
},
set: function(value) {
set: function(value) {
AudioManager.meVolume = value;
AudioManager.meVolume = value;
},
},
configurable: true
configurable: true
});
});


Object.defineProperty(ConfigManager, 'seVolume', {
Object.defineProperty(ConfigManager, 'seVolume', {
get: function() {
get: function() {
return AudioManager.seVolume;
return AudioManager.seVolume;
},
},
set: function(value) {
set: function(value) {
AudioManager.seVolume = value;
AudioManager.seVolume = value;
},
},
configurable: true
configurable: true
});
});


ConfigManager.load = function() {
ConfigManager.load = function() {
var json;
var json;
var config = {};
var config = {};
try {
try {
json = StorageManager.load(-1);
json = StorageManager.load(-1);
} catch (e) {
} catch (e) {
console.error(e);
console.error(e);
}
}
if (json) {
if (json) {
config = JSON.parse(json);
config = JSON.parse(json);
}
}
this.applyData(config);
this.applyData(config);
};
};


ConfigManager.save = function() {
ConfigManager.save = function() {
StorageManager.save(-1, JSON.stringify(this.makeData()));
StorageManager.save(-1, JSON.stringify(this.makeData()));
};
};


ConfigManager.makeData = function() {
ConfigManager.makeData = function() {
var config = {};
var config = {};
config.alwaysDash = this.alwaysDash;
config.alwaysDash = this.alwaysDash;
config.commandRemember = this.commandRemember;
config.commandRemember = this.commandRemember;
config.bgmVolume = this.bgmVolume;
config.bgmVolume = this.bgmVolume;
config.bgsVolume = this.bgsVolume;
config.bgsVolume = this.bgsVolume;
config.meVolume = this.meVolume;
config.meVolume = this.meVolume;
config.seVolume = this.seVolume;
config.seVolume = this.seVolume;
return config;
return config;
};
};


ConfigManager.applyData = function(config) {
ConfigManager.applyData = function(config) {
this.alwaysDash = this.readFlag(config, 'alwaysDash');
this.alwaysDash = this.readFlag(config, 'alwaysDash');
this.commandRemember = this.readFlag(config, 'commandRemember');
this.commandRemember = this.readFlag(config, 'commandRemember');
this.bgmVolume = this.readVolume(config, 'bgmVolume');
this.bgmVolume = this.readVolume(config, 'bgmVolume');
this.bgsVolume = this.readVolume(config, 'bgsVolume');
this.bgsVolume = this.readVolume(config, 'bgsVolume');
this.meVolume = this.readVolume(config, 'meVolume');
this.meVolume = this.readVolume(config, 'meVolume');
this.seVolume = this.readVolume(config, 'seVolume');
this.seVolume = this.readVolume(config, 'seVolume');
};
};


ConfigManager.readFlag = function(config, name) {
ConfigManager.readFlag = function(config, name) {
return !!config[name];
return !!config[name];
};
};


ConfigManager.readVolume = function(config, name) {
ConfigManager.readVolume = function(config, name) {
var value = config[name];
var value = config[name];
if (value !== undefined) {
if (value !== undefined) {
return Number(value).clamp(0, 100);
return Number(value).clamp(0, 100);
} else {
} else {
return 100;
return 100;
}
}
};
};


//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// StorageManager
// StorageManager
//
//
// The static class that manages storage for saving game data.
// The static class that manages storage for saving game data.


function StorageManager() {
function StorageManager() {
throw new Error('This is a static class');
throw new Error('This is a static class');
}
}


StorageManager.save = function(savefileId, json) {
StorageManager.save = function(savefileId, json) {
if (this.isLocalMode()) {
if (this.isLocalMode()) {
this.saveToLocalFile(savefileId, json);
this.saveToLocalFile(savefileId, json);
} else {
} else {
this.saveToWebStorage(savefileId, json);
this.saveToWebStorage(savefileId, json);
}
}
};
};


StorageManager.load = function(savefileId) {
StorageManager.load = function(savefileId) {
if (this.isLocalMode()) {
if (this.isLocalMode()) {
return this.loadFromLocalFile(savefileId);
return this.loadFromLocalFile(savefileId);
} else {
} else {
return this.loadFromWebStorage(savefileId);
return this.loadFromWebStorage(savefileId);
}
}
};
};


StorageManager.exists = function(savefileId) {
StorageManager.exists = function(savefileId) {
if (this.isLocalMode()) {
if (this.isLocalMode()) {
return this.localFileExists(savefileId);
return this.localFileExists(savefileId);
} else {
} else {
return this.webStorageExists(savefileId);
return this.webStorageExists(savefileId);
}
}
};
};


StorageManager.remove = function(savefileId) {
StorageManager.remove = function(savefileId) {
if (this.isLocalMode()) {
if (this.isLocalMode()) {
this.removeLocalFile(savefileId);
this.removeLocalFile(savefileId);
} else {
} else {
this.removeWebStorage(savefileId);
this.removeWebStorage(savefileId);
}
}
};
};


StorageManager.backup = function(savefileId) {
StorageManager.backup = function(savefileId) {
if (this.exists(savefileId)) {
if (this.exists(savefileId)) {
if (this.isLocalMode()) {
if (this.isLocalMode()) {
var data = this.loadFromLocalFile(savefileId);
var data = this.loadFromLocalFile(savefileId);
var compressed = LZString.compressToBase64(data);
var compressed = LZString.compressToBase64(data);
var fs = require('fs');
var fs = require('fs');
var dirPath = this.localFileDirectoryPath();
var dirPath = this.localFileDirectoryPath();
var filePath = this.localFilePath(savefileId) + ".bak";
var filePath = this.localFilePath(savefileId) + ".bak";
if (!fs.existsSync(dirPath)) {
if (!fs.existsSync(dirPath)) {
fs.mkdirSync(dirPath);
fs.mkdirSync(dirPath);
}
}
fs.writeFileSync(filePath, compressed);
fs.writeFileSync(filePath, compressed);
} else {
} else {
var data = this.loadFromWebStorage(savefileId);
var data = this.loadFromWebStorage(savefileId);
var compressed = LZString.compressToBase64(data);
var compressed = LZString.compressToBase64(data);
var key = this.webStorageKey(savefileId) + "bak";
var key = this.webStorageKey(savefileId) + "bak";
localStorage.setItem(key, compressed);
localforage.setItem(key, compressed);
}
}
}
}
};
};


StorageManager.backupExists = function(savefileId) {
StorageManager.backupExists = function(savefileId) {
if (this.isLocalMode()) {
if (this.isLocalMode()) {
return this.localFileBackupExists(savefileId);
return this.localFileBackupExists(savefileId);
} else {
} else {
return this.webStorageBackupExists(savefileId);
return this.webStorageBackupExists(savefileId);
}
}
};
};


StorageManager.cleanBackup = function(savefileId) {
StorageManager.cleanBackup = function(savefileId) {
if (this.backupExists(savefileId)) {
if (this.backupExists(savefileId)) {
if (this.isLocalMode()) {
if (this.isLocalMode()) {
var fs = require('fs');
var fs = require('fs');
var dirPath = this.localFileDirectoryPath();
var dirPath = this.localFileDirectoryPath();
var filePath = this.localFilePath(savefileId);
var filePath = this.localFilePath(savefileId);
fs.unlinkSync(filePath + ".bak");
fs.unlinkSync(filePath + ".bak");
} else {
} else {
var key = this.webStorageKey(savefileId);
var key = this.webStorageKey(savefileId);
localStorage.removeItem(key + "bak");
localforage.removeItem(key + "bak");
}
}
}
}
};
};


StorageManager.restoreBackup = function(savefileId) {
StorageManager.restoreBackup = function(savefileId) {
if (this.backupExists(savefileId)) {
if (this.backupExists(savefileId)) {
if (this.isLocalMode()) {
if (this.isLocalMode()) {
var data = this.loadFromLocalBackupFile(savefileId);
var data = this.loadFromLocalBackupFile(savefileId);
var compressed = LZString.compressToBase64(data);
var compressed = LZString.compressToBase64(data);
var fs = require('fs');
var fs = require('fs');
var dirPath = this.localFileDirectoryPath();
var dirPath = this.localFileDirectoryPath();
var filePath = this.localFilePath(savefileId);
var filePath = this.localFilePath(savefileId);
if (!fs.existsSync(dirPath)) {
if (!fs.existsSync(dirPath)) {
fs.mkdirSync(dirPath);
fs.mkdirSync(dirPath);
}
}
fs.writeFileSync(filePath, compressed);
fs.writeFileSync(filePath, compressed);
fs.unlinkSync(filePath + ".bak");
fs.unlinkSync(filePath + ".bak");
} else {
} else {
var data = this.loadFromWebStorageBackup(savefileId);
var data = this.loadFromWebStorageBackup(savefileId);
var compressed = LZString.compressToBase64(data);
var compressed = LZString.compressToBase64(data);
var key = this.webStorageKey(savefileId);
var key = this.webStorageKey(savefileId);
localStorage.setItem(key, compressed);
await localforage.setItem(key, compressed);
localStorage.removeItem(key + "bak");
localforage.removeItem(key + "bak");
}
}
}
}
};
};


StorageManager.isLocalMode = function() {
StorageManager.isLocalMode = function() {
return Utils.isNwjs();
return Utils.isNwjs();
};
};


StorageManager.saveToLocalFile = function(savefileId, json) {
StorageManager.saveToLocalFile = function(savefileId, json) {
var data = LZString.compressToBase64(json);
var data = LZString.compressToBase64(json);
var fs = require('fs');
var fs = require('fs');
var dirPath = this.localFileDirectoryPath();
var dirPath = this.localFileDirectoryPath();
var filePath = this.localFilePath(savefileId);
var filePath = this.localFilePath(savefileId);
if (!fs.existsSync(dirPath)) {
if (!fs.existsSync(dirPath)) {
fs.mkdirSync(dirPath);
fs.mkdirSync(dirPath);
}
}
fs.writeFileSync(filePath, data);
fs.writeFileSync(filePath, data);
};
};


StorageManager.loadFromLocalFile = function(savefileId) {
StorageManager.loadFromLocalFile = function(savefileId) {
var data = null;
var data = null;
var fs = require('fs');
var fs = require('fs');
var filePath = this.localFilePath(savefileId);
var filePath = this.localFilePath(savefileId);
if (fs.existsSync(filePath)) {
if (fs.existsSync(filePath)) {
data = fs.readFileSync(filePath, { encoding: 'utf8' });
data = fs.readFileSync(filePath, { encoding: 'utf8' });
}
}
return LZString.decompressFromBase64(data);
return LZString.decompressFromBase64(data);
};
};


StorageManager.loadFromLocalBackupFile = function(savefileId) {
StorageManager.loadFromLocalBackupFile = function(savefileId) {
var data = null;
var data = null;
var fs = require('fs');
var fs = require('fs');
var filePath = this.localFilePath(savefileId) + ".bak";
var filePath = this.localFilePath(savefileId) + ".bak";
if (fs.existsSync(filePath)) {
if (fs.existsSync(filePath)) {
data = fs.readFileSync(filePath, { encoding: 'utf8' });
data = fs.readFileSync(filePath, { encoding: 'utf8' });
}
}
return LZString.decompressFromBase64(data);
return LZString.decompressFromBase64(data);
};
};


StorageManager.localFileBackupExists = function(savefileId) {
StorageManager.localFileBackupExists = function(savefileId) {
var fs = require('fs');
var fs = require('fs');
return fs.existsSync(this.localFilePath(savefileId) + ".bak");
return fs.existsSync(this.localFilePath(savefileId) + ".bak");
};
};


StorageManager.localFileExists = function(savefileId) {
StorageManager.localFileExists = function(savefileId) {
var fs = require('fs');
var fs = require('fs');
return fs.existsSync(this.localFilePath(savefileId));
return fs.existsSync(this.localFilePath(savefileId));
};
};


StorageManager.removeLocalFile = function(savefileId) {
StorageManager.removeLocalFile = function(savefileId) {
var fs = require('fs');
var fs = require('fs');
var filePath = this.localFilePath(savefileId);
var filePath = this.localFilePath(savefileId);
if (fs.existsSync(filePath)) {
if (fs.existsSync(filePath)) {
fs.unlinkSync(filePath);
fs.unlinkSync(filePath);
}
}
};
};


StorageManager.saveToWebStorage = function(savefileId, json) {
StorageManager.saveToWebStorage = function(savefileId, json) {
var key = this.webStorageKey(savefileId);
var key = this.webStorageKey(savefileId);
var data = LZString.compressToBase64(json);
var data = LZString.compressToBase64(json);
localStorage.setItem(key, data);
localforage.setItem(key, data);
};
};


StorageManager.loadFromWebStorage = function(savefileId) {
StorageManager.loadFromWebStorage = function(savefileId) {
var key = this.webStorageKey(savefileId);
var key = this.webStorageKey(savefileId);
var data = localStorage.getItem(key);
var data = await localforage.getItem(key);
return LZString.decompressFromBase64(data);
return LZString.decompressFromBase64(data);
};
};


StorageManager.loadFromWebStorageBackup = function(savefileId) {
StorageManager.loadFromWebStorageBackup = function(savefileId) {
var key = this.webStorageKey(savefileId) + "bak";
var key = this.webStorageKey(savefileId) + "bak";
var data = localStorage.getItem(key);
var data = await localforage.getItem(key);
return LZString.decompressFromBase64(data);
return LZString.decompressFromBase64(data);
};
};


StorageManager.webStorageBackupExists = function(savefileId) {
StorageManager.webStorageBackupExists = function(savefileId) {
var key = this.webStorageKey(savefileId) + "bak";
var key = this.webStorageKey(savefileId) + "bak";
return !!localStorage.getItem(key);
return await !!localforage.getItem(key);
};
};


StorageManager.webStorageExists = function(savefileId) {
StorageManager.webStorageExists = function(savefileId) {
var key = this.webStorageKey(savefileId);
var key = this.webStorageKey(savefileId);
return !!localStorage.getItem(key);
return await !!localforage.getItem(key);
};
};


StorageManager.removeWebStorage = function(savefileId) {
StorageManager.removeWebStorage = function(savefileId) {
var key = this.webStorageKey(savefileId);
var key = this.webStorageKey(savefileId);
localStorage.removeItem(key);
localforage.removeItem(key);
};
};


StorageManager.localFileDirectoryPath = function() {
StorageManager.localFileDirectoryPath = function() {
var path = require('path');
var path = require('path');


var base = path.dirname(process.mainModule.filename);
var base = path.dirname(process.mainModule.filename);
return path.join(base, 'save/');
return path.join(base, 'save/');
};
};


StorageManager.localFilePath = function(savefileId) {
StorageManager.localFilePath = function(savefileId) {
var name;
var name;
if (savefileId < 0) {
if (savefileId < 0) {
name = 'config.rpgsave';
name = 'config.rpgsave';
} else if (savefileId === 0) {
} else if (savefileId === 0) {
name = 'global.rpgsave';
name = 'global.rpgsave';
} else {
} else {
name = 'file%1.rpgsave'.format(savefileId);
name = 'file%1.rpgsave'.format(savefileId);
}
}
return this.localFileDirectoryPath() + name;
return this.localFileDirectoryPath() + name;
};
};


StorageManager.webStorageKey = function(savefileId) {
StorageManager.webStorageKey = function(savefileId) {
if (savefileId < 0) {
if (savefileId < 0) {
return 'RPG Config';
return 'RPG Config';
} else if (savefileId === 0) {
} else if (savefileId === 0) {
return 'RPG Global';
return 'RPG Global';
} else {
} else {
return 'RPG File%1'.format(savefileId);
return 'RPG File%1'.format(savefileId);
}
}
};
};


//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// ImageManager
// ImageManager
//
//
// The static class that loads images, creates bitmap objects and retains them.
// The static class that loads images, creates bitmap objects and retains them.


function ImageManager() {
function ImageManager() {
throw new Error('This is a static class');
throw new Error('This is a static class');
}
}


ImageManager.cache = new CacheMap(ImageManager);
ImageManager.cache = new CacheMap(ImageManager);


ImageManager._imageCache = new ImageCache();
ImageManager._imageCache = new ImageCache();
ImageManager._requestQueue = new RequestQueue();
ImageManager._requestQueue = new RequestQueue();
ImageManager._systemReservationId = Utils.generateRuntimeId();
ImageManager._systemReservationId = Utils.generateRuntimeId();


ImageManager._generateCacheKey = function(path, hue){
ImageManager._generateCacheKey = function(path, hue){
return path + ':' + hue;
return path + ':' + hue;
};
};


ImageManager.loadAnimation = function(filename, hue) {
ImageManager.loadAnimation = function(filename, hue) {
return this.loadBitmap('img/animations/', filename, hue, true);
return this.loadBitmap('img/animations/', filename, hue, true);
};
};


ImageManager.loadBattleback1 = function(filename, hue) {
ImageManager.loadBattleback1 = function(filename, hue) {
return this.loadBitmap('img/battlebacks1/', filename, hue, true);
return this.loadBitmap('img/battlebacks1/', filename, hue, true);
};
};


ImageManager.loadBattleback2 = function(filename, hue) {
ImageManager.loadBattleback2 = function(filename, hue) {
return this.loadBitmap('img/battlebacks2/', filename, hue, true);
return this.loadBitmap('img/battlebacks2/', filename, hue, true);
};
};


ImageManager.loadEnemy = function(filename, hue) {
ImageManager.loadEnemy = function(filename, hue) {
return this.loadBitmap('img/enemies/', filename, hue, true);
return this.loadBitmap('img/enemies/', filename, hue, true);
};
};


ImageManager.loadCharacter = function(filename, hue) {
ImageManager.loadCharacter = function(filename, hue) {
return this.loadBitmap('img/characters/', filename, hue, false);
return this.loadBitmap('img/characters/', filename, hue, false);
};
};


ImageManager.loadFace = function(filename, hue) {
ImageManager.loadFace = function(filename, hue) {
return this.loadBitmap('img/faces/', filename, hue, true);
return this.loadBitmap('img/faces/', filename, hue, true);
};
};


ImageManager.loadParallax = function(filename, hue) {
ImageManager.loadParallax = function(filename, hue) {
return this.loadBitmap('img/parallaxes/', filename, hue, true);
return this.loadBitmap('img/parallaxes/', filename, hue, true);
};
};


ImageManager.loadPicture = function(filename, hue) {
ImageManager.loadPicture = function(filename, hue) {
return this.loadBitmap('img/pictures/', filename, hue, true);
return this.loadBitmap('img/pictures/', f
};

ImageManager.loadSvActor = function(filename, hue) {
return this.loadBitmap('img/sv_actors/', filename, hue, false);
};

ImageManager.loadSvEnemy = function(filename, hue) {
return this.loadBitmap('img/sv_enemies/', filename, hue, true);
};

ImageManager.loadSystem = function(filename, hue) {
return this.loadBitmap('img/system/', filename, hue, false);
};

ImageManager.loadTiles