rpg_managers.js versus new_rpg_managers.js

Created Diff never expires
33 removals
Lines
Total
Removed
Words
Total
Removed
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
847 lines
28 additions
Lines
Total
Added
Words
Total
Added
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
842 lines
//=============================================================================
//=============================================================================
// 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