phantom-soul-sword-lambda-n.../www/js/plugins/VE_BasicModule.js
2025-07-11 18:31:55 -07:00

1475 lines
No EOL
52 KiB
JavaScript

/*
* ===========================================================================
* ** Victor Engine MV - Basic Module
* ---------------------------------------------------------------------------
* VE_BasicModule.js
* ===========================================================================
*/
var Imported = Imported || {};
Imported['VE - Basic Module'] = '1.23';
var VictorEngine = VictorEngine || {};
VictorEngine.BasicModule = VictorEngine.BasicModule || {};
(function() {
VictorEngine.BasicModule.loadDatabase = DataManager.loadDatabase;
DataManager.loadDatabase = function() {
VictorEngine.BasicModule.loadDatabase.call(this);
PluginManager.requiredPlugin.call(PluginManager, 'VE - Basic Module');
};
PluginManager.requiredPlugin = function(name, required, version) {
VictorEngine.BasicModule.checkPlugins(name, required, version);
};
})();
/*:
* ===========================================================================
* @plugindesc v1.23 - Plugin with base code required for all Victor Engine plugins.
* @author Victor Sant
*
* @param == Trait Names ==
*
* @param Hit Rate Name
* @desc 'Hit Rate' Ex-Parameter name shown on windows.
* @default Hit
*
* @param Evasion Rate Name
* @desc 'Evasion Rate' Ex-Parameter name shown on windows.
* @default Evasion
*
* @param Critical Rate Name
* @desc 'Critical Rate' Ex-Parameter name shown on windows.
* @default Critical
*
* @param Critical Evasion Name
* @desc 'Critical Evasion' Ex-Parameter name shown on windows.
* @default C. Evasion
*
* @param Magic Evasion Name
* @desc 'Magic Evasion' Ex-Parameter name shown on windows.
* @default M. Evasion
*
* @param Magic Reflection Name
* @desc 'Magic Reflection' Ex-Parameter name shown on windows.
* @default M. Reflection
*
* @param Counter Attack Name
* @desc 'Counter Attack' Ex-Parameter name shown on windows.
* @default Counter
*
* @param HP Regeneration Name
* @desc 'HP Regeneration' Ex-Parameter name shown on windows.
* @default HP Regen
*
* @param MP Regeneration Name
* @desc 'MP Regeneration' Ex-Parameter name shown on windows.
* @default MP Regen
*
* @param TP Regeneration Name
* @desc 'TP Regeneration' Ex-Parameter name shown on windows.
* @default TP Regen
*
* @param Target Rate Name
* @desc 'Target Rate' Sp-Parameter name shown on windows.
* @default Target Rate
*
* @param Guard Rate Name
* @desc 'Guard Rate' Sp-Parameter name shown on windows.
* @default Guard Rate
*
* @param Recovery Effect Name
* @desc 'Recovery Effect' Sp-Parameter name shown on windows.
* @default Recovery
*
* @param Pharmacology Name
* @desc 'Pharmacology' Sp-Parameter name shown on windows.
* @default Pharmacology
*
* @param MP Cost Rate Name
* @desc 'MP Cost Rate' Sp-Parameter name shown on windows.
* @default MP Cost
*
* @param TP Charge Rate Name
* @desc 'TP Charge Rate' Sp-Parameter name shown on windows.
* @default TP Charge
*
* @param Physical Damage Name
* @desc 'Physical Damage' Sp-Parameter name shown on windows.
* @default Physical Damage
*
* @param Magical Damage Name
* @desc 'Magical Damage' Sp-Parameter name shown on windows.
* @default Magical Damage
*
* @param Floor Damage Name
* @desc 'Floor Damage' Sp-Parameter name shown on windows.
* @default Floor Damage
*
* @param Experience Rate Name
* @desc 'Experience Rate' Sp-Parameter name shown on windows.
* @default Exp. Rate
*
* ===========================================================================
* @help
* ===========================================================================
* Install this plugin above any other Victor Engine plugin.
* ===========================================================================
*
* ===========================================================================
* Version History:
* ---------------------------------------------------------------------------
* v 1.00 - 2015.11.26 > First release.
* v 1.01 - 2015.11.29 > Added function to get database objects.
* v 1.02 - 2015.12.07 > Added function to get multiples elements.
* > Added check for plugin correct order.
* v 1.03 - 2015.12.13 > Added function to get page comments.
* v 1.04 - 2015.12.21 > Added function to check only relevant objects.
* v 1.05 - 2015.12.25 > Added check to wait bitmap loading.
* v 1.06 - 2015.12.31 > Added rgb to hex and hex to rgb functions.
* > Added function to get plugins parameters.
* v 1.07 - 2016.01.07 > Fixed issue with plugin order checks.
* v 1.08 - 2016.01.17 > Added function to get BattleLog method index.
* > Added function to insert methods on BattleLog.
* v 1.09 - 2016.01.24 > Added function to set wait for animations.
* v 1.10 - 2016.02.05 > Added function to get values from regex.
* v 1.11 - 2016.02.10 > Added function to capitalize texts.
* > Added Plugin Parameter to set trait display names.
* v 1.12 - 2016.02.18 > Added function to get parameter names.
* v 1.13 - 2016.02.26 > Added functions to setup battler direction.
* v 1.14 - 2016.03.15 > Added functions to check opponents.
* v 1.15 - 2016.03.18 > Added function for compatibility with YEP.
* v 1.16 - 2016.03.23 > Added function to replace mathods.
* Added functions for dynamic motions.
* v 1.17 - 2016.04.01 > Fixed issue with battler sprite check.
* v 1.18 - 2016.04.21 > Fixed issue with damage popup on action user.
* v 1.19 - 2016.04.30 > Added function to get evaluated font color.
* v 1.20 - 2016.05.12 > Added function to get width of text with escape codes.
* v 1.21 - 2016.05.31 > Improved method stack for dynamic motions.
* > Added functions for compatibility with Battle Motions.
* v 1.22 - 2016.06.26 > Added functions for escape command.
* v 1.23 - 2017.05.25 > Added functions for damage formula.
* ===========================================================================
*/
/*:ja
* ===========================================================================
* @plugindesc v1.23 - 全てのVictor Engineプラグインに必要なベースコード付きプラグイン
* @author Victor Sant
*
* @param == Trait Names ==
* @text == 特性名 ==
*
* @param Hit Rate Name
* @text 命中率の名前
* @desc '命中率'ウィンドウに表示される元パラメータ名
* @default 命中
*
* @param Evasion Rate Name
* @text 回避率の名前
* @desc '回避率'ウィンドウに表示される元パラメータ名
* @default 回避
*
* @param Critical Rate Name
* @text 会心率の名前
* @desc '会心率'ウィンドウに表示される元パラメータ名
* @default 会心
*
* @param Critical Evasion Name
* @text 会心回避率の名前
* @desc '会心回避率'ウィンドウに表示される元のパラメータ名
* @default 会心回避
*
* @param Magic Evasion Name
* @text 魔法回避率の名前
* @desc '魔法回避率'ウィンドウに表示される元のパラメータ名
* @default 魔法回避
*
* @param Magic Reflection Name
* @text 魔法反射率の名前
* @desc '魔法反射率'ウィンドウに表示される元のパラメータ名
* @default 魔法反射
*
* @param Counter Attack Name
* @text 反撃率の名前
* @desc '反撃率'ウィンドウに表示される元のパラメータ名
* @default 反撃
*
* @param HP Regeneration Name
* @text HP再生率の名前
* @desc 'HP再生率'ウィンドウに表示される元のパラメータ名
* @default HP再生
*
* @param MP Regeneration Name
* @text MP再生率の名前
* @desc 'MP再生率'ウィンドウに表示される元のパラメータ名
* @default MP再生
*
* @param TP Regeneration Name
* @text TP再生率の名前
* @desc 'TP再生率'ウィンドウに表示される元のパラメータ名
* @default TP再生
*
* @param Target Rate Name
* @text 狙われ率の名前
* @desc '狙われ率'ウィンドウに表示される元のパラメータ名
* @default 狙われ率
*
* @param Guard Rate Name
* @text 防御効果率の名前
* @desc '防御効果率'ウィンドウに表示される元のパラメータ名
* @default 防御効果率
*
* @param Recovery Effect Name
* @text 回復効果率の名前
* @desc '回復効果率'ウィンドウに表示される元のパラメータ名
* @default 回復
*
* @param Pharmacology Name
* @text 薬の知識の名前
* @desc '薬の知識'ウィンドウに表示される元のパラメータ名
* @default 薬の知識
*
* @param MP Cost Rate Name
* @text MP消費率の名前
* @desc 'MP消費率'ウィンドウに表示される元のパラメータ名
* @default MP消費
*
* @param TP Charge Rate Name
* @text TPチャージ率の名前
* @desc 'TPチャージ率'ウィンドウに表示される元のパラメータ名
* @default TPチャージ
*
* @param Physical Damage Name
* @text 物理ダメージ率の名前
* @desc '物理ダメージ率'ウィンドウに表示される元のパラメータ名
* @default 物理ダメージ
*
* @param Magical Damage Name
* @text 魔法ダメージ率の名前
* @desc '魔法ダメージ率'ウィンドウに表示される元のパラメータ名
* @default 魔法ダメージ
*
* @param Floor Damage Name
* @text 床ダメージ率の名前
* @desc '床ダメージ率'ウィンドウに表示される元のパラメータ名
* @default 床ダメージ
*
* @param Experience Rate Name
* @text 経験値獲得率の名前
* @desc '経験値獲得率'ウィンドウに表示される元のパラメータ名
* @default 経験値獲得率
*
* ===========================================================================
* @help
* 翻訳:ムノクラ
* https://fungamemake.com/
* https://twitter.com/munokura/
*
* 元プラグイン:
* https://victorenginescripts.wordpress.com/rpg-maker-mv/basic-module/
* ===========================================================================
* このプラグインを他のVictor Engineプラグインの上にインストールします。
* ===========================================================================
*
* ===========================================================================
* Version History:
* ---------------------------------------------------------------------------
* v1.00 - 2015.11.26 First release.
* v1.01 - 2015.11.29 Added function to get database objects.
* v1.02 - 2015.12.07 Added function to get multiples elements.
* Added check for plugin correct order.
* v1.03 - 2015.12.13 Added function to get page comments.
* v1.04 - 2015.12.21 Added function to check only relevant objects.
* v1.05 - 2015.12.25 Added check to wait bitmap loading.
* v1.06 - 2015.12.31 Added rgb to hex and hex to rgb functions.
* Added function to get plugins parameters.
* v1.07 - 2016.01.07 Fixed issue with plugin order checks.
* v1.08 - 2016.01.17 Added function to get BattleLog method index.
* Added function to insert methods on BattleLog.
* v1.09 - 2016.01.24 Added function to set wait for animations.
* v1.10 - 2016.02.05 Added function to get values from regex.
* v1.11 - 2016.02.10 Added function to capitalize texts.
* Added Plugin Parameter to set trait display names.
* v1.12 - 2016.02.18 Added function to get parameter names.
* v1.13 - 2016.02.26 Added functions to setup battler direction.
* v1.14 - 2016.03.15 Added functions to check opponents.
* v1.15 - 2016.03.18 Added function for compatibility with YEP.
* v1.16 - 2016.03.23 Added function to replace mathods.
* Added functions for dynamic motions.
* v1.17 - 2016.04.01 Fixed issue with battler sprite check.
* v1.18 - 2016.04.21 Fixed issue with damage popup on action user.
* v1.19 - 2016.04.30 Added function to get evaluated font color.
* v1.20 - 2016.05.12 Added function to get width of text with escape codes.
* v1.21 - 2016.05.31 Improved method stack for dynamic motions.
* Added functions for compatibility with Battle Motions.
* v1.22 - 2016.06.26 Added functions for escape command.
* v1.23 - 2017.05.25 Added functions for damage formula.
* ===========================================================================
*/
(function() {
//===========================================================================
// Parameters
//===========================================================================
VictorEngine.getPluginParameters = function() {
var script = document.currentScript || (function() {
var scripts = document.getElementsByTagName('script');
return scripts[scripts.length - 1];
})();
var start = script.src.lastIndexOf('/') + 1;
var end = script.src.indexOf('.js');
return PluginManager.parameters(script.src.substring(start, end));
}
var parameters = VictorEngine.getPluginParameters();
VictorEngine.Parameters = VictorEngine.Parameters || {};
VictorEngine.Parameters.BasicModule = {};
VictorEngine.Parameters.BasicModule.hit = String(parameters["Hit Rate Name"]).trim();
VictorEngine.Parameters.BasicModule.eva = String(parameters["Evasion Rate Name"]).trim();
VictorEngine.Parameters.BasicModule.cri = String(parameters["Critical Rate Name"]).trim();
VictorEngine.Parameters.BasicModule.cev = String(parameters["Critical Evasion Name"]).trim();
VictorEngine.Parameters.BasicModule.hev = String(parameters["Magic Evasion Name"]).trim();
VictorEngine.Parameters.BasicModule.mrf = String(parameters["Magic Reflection Name"]).trim();
VictorEngine.Parameters.BasicModule.cnt = String(parameters["Counter Attack Name"]).trim();
VictorEngine.Parameters.BasicModule.hrg = String(parameters["HP Regeneration Name"]).trim();
VictorEngine.Parameters.BasicModule.mrg = String(parameters["MP Regeneration Name"]).trim();
VictorEngine.Parameters.BasicModule.trg = String(parameters["TP Regeneration Name"]).trim();
VictorEngine.Parameters.BasicModule.tgr = String(parameters["Target Rate Name"]).trim();
VictorEngine.Parameters.BasicModule.grd = String(parameters["Guard Rate Name"]).trim();
VictorEngine.Parameters.BasicModule.rec = String(parameters["Recovery Effect Name"]).trim();
VictorEngine.Parameters.BasicModule.pha = String(parameters["Pharmacology Name"]).trim();
VictorEngine.Parameters.BasicModule.mcr = String(parameters["MP Cost Rate Name"]).trim();
VictorEngine.Parameters.BasicModule.tcr = String(parameters["TP Charge Rate Name"]).trim();
VictorEngine.Parameters.BasicModule.pdr = String(parameters["Physical Damage Name"]).trim();
VictorEngine.Parameters.BasicModule.mdr = String(parameters["Magical Damage Name"]).trim();
VictorEngine.Parameters.BasicModule.fdr = String(parameters["Floor Damage"]).trim();
VictorEngine.Parameters.BasicModule.ext = String(parameters["Experience"]).trim();
//===========================================================================
// DataManager
//===========================================================================
VictorEngine.BasicModule.isDatabaseLoaded = DataManager.isDatabaseLoaded;
DataManager.isDatabaseLoaded = function() {
if (!VictorEngine.BasicModule.isDatabaseLoaded.call(this)) return false;
VictorEngine.loadParameters();
VictorEngine.loadNotetags();
return ImageManager.isReady();
};
//===========================================================================
// VictorEngine
//===========================================================================
VictorEngine.BasicModule.checkPlugins = function(name, req, ver) {
var msg = '';
this.loadedPlugins = this.loadedPlugins || {};
if (ver && req && (!Imported[req] || Number(Imported[req]) < Number(ver))) {
msg += 'The plugin ' + name + ' requires the plugin ' + req;
msg += ' v' + ver + ' or higher installed to work properly'
if (Number(Imported[req]) < Number(ver)) {
msg += '. Your current version is v' + Imported[req];
}
msg += '. Go to http://victorenginescripts.wordpress.com/'
msg += ' to download the updated plugin.';
throw msg;
} else if (!ver && req && this.loadedPlugins[req] === true) {
msg += 'The plugin ' + name + ' requires the plugin ' + req;
msg += ' to be placed bellow it. Open the Plugin Manager and place';
msg += ' the plugins in the correct order.';
throw msg;
} else if (req && Imported['VE - Basic Module'] && !this.loadedPlugins['VE - Basic Module']) {
msg += 'The plugin ' + name + ' must be placed bellow the plugin ' + req;
msg += '. Open the Plugin Manager and place';
msg += ' the plugins in the correct order.';
throw msg;
} else {
this.loadedPlugins[name] = true
}
};
VictorEngine.loadNotetags = function() {
if (VictorEngine.BasicModule.loaded) return;
VictorEngine.BasicModule.loaded = true;
var list = [$dataActors, $dataClasses, $dataSkills, $dataItems, $dataWeapons,
$dataArmors, $dataEnemies, $dataStates
];
list.forEach(function(objects, index) {
this.processNotetags(objects, index)
}, this);
};
VictorEngine.processNotetags = function(objects, index) {
objects.forEach(function(data) {
if (data) {
this.loadNotetagsValues(data, index);
}
}, this);
};
VictorEngine.objectSelection = function(index, list) {
var objects = ['actor', 'class', 'skill', 'item', 'weapon', 'armor', 'enemy', 'state'];
return list.contains(objects[index]);
};
VictorEngine.loadNotetagsValues = function(data, index) {};
VictorEngine.loadParameters = function() {};
VictorEngine.getNotesValues = function(value1, value2) {
value2 = value2 || value1;
return new RegExp('<' + value1 + '>([\\s\\S]*?)<\\/' + value2 + '>', 'gi');
};
VictorEngine.getPageNotes = function(event) {
var result = (event instanceof Game_CommonEvent) || event.page();
if (!result || !event.list()) {
return "";
}
return event.list().reduce(function(r, cmd) {
var valid = (cmd.code === 108 || cmd.code === 408);
var comment = valid ? cmd.parameters[0] + "\r\n" : "";
return r + comment;
}, "");
};
VictorEngine.getAllElements = function(subject, action) {
if (action.item().damage.elementId < 0) {
return subject.attackElements();
} else {
return [action.item().damage.elementId];
}
};
VictorEngine.getAllStates = function(subject, item) {
var result;
return item.effects.reduce(function(r, effect) {
if (effect.code === 21) {
if (effect.dataId === 0) {
result = subject.attackStates();
} else {
result = [effect.dataId];
};
} else {
result = [];
};
return r.concat(result);
}, []);
};
VictorEngine.getDamageFormula = function(action) {
return action.item().damage.formula;
};
VictorEngine.getNumberValue = function(match, type, base) {
var regex = new RegExp(type + '[ ]*:[ ]*([+-.\\d]+)', 'gi');
var value = regex.exec(match);
return value ? Number(value[1]) : base;
};
VictorEngine.getStringValue = function(match, type, base) {
var regex = new RegExp(type + "[ ]*:[ ]*([\\w ]+)", 'gi');
var value = regex.exec(match);
return value ? value[1].trim() : base;
};
VictorEngine.getAnyValue = function(match, type, base) {
var regex = new RegExp(type + "[ ]*:[ ]*('[^\']+'|\"[^\"]+\")", 'gi');
var value = regex.exec(match);
return value ? value[1].slice(1, -1) : base;
};
VictorEngine.getNumberValues = function(match, type) {
var regex = new RegExp(type + '[ ]*:[ ]*((?:[+-.\\d]+[ ]*,?[ ]*)+)', 'gi');
var value = regex.exec(match);
var result = value ? value[1].match(/\d+/gi) : [];
return result.map(function(id) {
return Number(id)
});
};
VictorEngine.getStringValues = function(match, type) {
var regex = new RegExp(type + '[ ]*:[ ]*((?:[\\w ]+[ ]*,?[ ]*)+)', 'gi');
var value = regex.exec(match);
var result = value ? value[1].match(/\d+/gi) : [];
return result.map(function(id) {
return value[1].trim()
});
};
VictorEngine.captalizeText = function(text) {
return text.replace(/(?:^|\s)\S/g, function(a) {
return a.toUpperCase();
});
};
VictorEngine.replaceZeros = function(text, value) {
value = value || '';
return text.replace(/\b(0(?!\b))+/g, function(a) {
return a.replace(/0/g, value);
});
};
VictorEngine.rgbToHex = function(r, g, b) {
r = Math.floor(r).toString(16).padZero(2);
g = Math.floor(g).toString(16).padZero(2);
b = Math.floor(b).toString(16).padZero(2);
return '#' + r + g + b;
}
VictorEngine.hexToRgb = function(hex) {
var r = parseInt(hex[1] + hex[2], 16);
var g = parseInt(hex[3] + hex[4], 16);
var b = parseInt(hex[5] + hex[6], 16);
return [r, g, b];
}
VictorEngine.methodIndex = function(methods, name) {
for (var i = 0; i < methods.length; i++) {
if (methods[i] && methods[i].name === name) {
return i;
}
}
return null;
}
VictorEngine.removeMethod = function(methods, name) {
var index = this.methodIndex(methods, name);
if (index || index === 0) {
methods.splice(index, 1);
}
}
VictorEngine.insertMethod = function(methods, index, name, params) {
if (index || index === 0) {
methods.splice(index, 0, {
name: name,
params: params
});
}
}
VictorEngine.replaceMethod = function(methods, index, name, params) {
if (index || index === 0) {
methods.splice(index, 1, {
name: name,
params: params
});
}
}
VictorEngine.waitAnimation = function(animationId) {
var animation = $dataAnimations[animationId];
return animation ? animation.frames.length * 4 + 1 : 0;
};
VictorEngine.params = function() {
return ['hp', 'mp', 'atk', 'def', 'mat', 'mdf', 'agi', 'luk'];
};
VictorEngine.xparams = function() {
return ['hit', 'eva', 'cri', 'cev', 'mev', 'mrf', 'cnt', 'hrg', 'mrg', 'trg'];
};
VictorEngine.sparams = function() {
return ['tgr', 'grd', 'rec', 'pha', 'mcr', 'tcr', 'prd', 'mrd', 'frd', 'exr'];
};
VictorEngine.allParams = function() {
return this.params().concat(this.xparams(), this.sparams())
};
VictorEngine.paramName = function(paramId) {
return this.params()[paramId];
};
VictorEngine.xparamName = function(xparamId) {
return this.xparams()[xparamId];
};
VictorEngine.sparamName = function(sparamId) {
return this.sparams()[sparamId];
};
VictorEngine.paramId = function(paramName) {
return this.params().indexOf(paramName.toLowerCase());
};
VictorEngine.paramText = function(name) {
switch (name.toLowerCase()) {
case 'hit':
case 'eva':
case 'cri':
case 'cev':
case 'mev':
case 'mrf':
case 'cnt':
case 'hrg':
case 'mrg':
case 'trg':
case 'tgr':
case 'grd':
case 'rec':
case 'pha':
case 'mcr':
case 'tcr':
case 'pdr':
case 'mdr':
case 'fdr':
case 'ext':
return this.Parameters.BasicModule[name.toLowerCase()];
case 'hp':
case 'atk':
case 'def':
case 'agi':
case 'mp':
case 'mat':
case 'mdf':
case 'luk':
var paramId = this.params().indexOf(name.toLowerCase());
return TextManager.param(paramId)
default:
return this.captalizeText(name.toLowerCase());
}
};
VictorEngine.battlerIndex = function(battler) {
if (battler && battler.isActor() && $gameParty.members().contains(battler)) {
return 1 + $gameParty.members().indexOf(battler);
} else if (battler && battler.isEnemy() && $gameTroop.members().contains(battler)) {
return 1 + $gameParty.maxBattleMembers() + $gameTroop.members().indexOf(battler);
} else {
return 0;
}
};
VictorEngine.battleSprites = function(spriteId) {
return this._battleSprites[spriteId];
};
VictorEngine.addBattleSprite = function(spriteId, sprite) {
this._battleSprites = this._battleSprites || {};
this._battleSprites[spriteId] = sprite;
};
//===========================================================================
// BattleManager
//===========================================================================
BattleManager.updateStackAction = function(index, subject, target) {
this._logWindow.saveMethodsStack(index);
this.clearTargets(target);
this.invokeAction(subject, target);
this._logWindow.restoreMethodsStack(index);
};
BattleManager.clearTargets = function(target) {
for (var i = 0; i < this._targets.length; i++) {
if (this._targets[i] === target) {
this._targets.splice(i, 1);
i--;
}
}
};
BattleManager.clearActionTargets = function() {
this._targets = [];
};
BattleManager.prepareAction = function(subject, action, targets, skip) {
this._phase = 'action';
this._subject = subject;
this._action = action;
this._targets = targets;
if (skip) {
subject.useItem(action.item());
}
this._action.applyGlobal();
this.refreshStatus();
};
BattleManager.startCounterAction = function(subject, target, targets, action) {
if (targets.length > 0) {
this._isCounterAttack = true;
this._counterSubject = subject;
this._counterTarget = target;
this.prepareAction(subject, action, targets);
this._logWindow.startCounterAction(subject, action, targets);
}
};
BattleManager.averageTargetsPositions = function(targets) {
var x = targets.reduce(function(r, member) {
return r + member.screenX();
}, 0) / targets.length;
var y = targets.reduce(function(r, member) {
return r + member.screenX();
}, 0) / targets.length;
return {
x: x,
y: y
};
};
BattleManager.isSurprise = function() {
return this._surprise;
};
BattleManager.isPreemptive = function() {
return this._preemptive;
};
//===========================================================================
// SceneManager
//===========================================================================
SceneManager.sceneSpriteset = function() {
return this._scene ? this._scene._spriteset : null;
};
//===========================================================================
// Window_Base
//===========================================================================
Window_Base.prototype.getFontColor = function(color) {
if (color.match(/^\#[abcdef\d]{6}/i)) {
return '"' + color + '"';
} else {
return color;
}
};
//===========================================================================
// Game_Action
//===========================================================================
Game_Action.prototype.setEscape = function() {
var action = {
name: TextManager.escape,
speed: 9999,
escape: true
};
this._escapeAction = action;
};
Game_Action.prototype.isEscape = function() {
return !!this._escapeAction;
};
//===========================================================================
// Game_Unit
//===========================================================================
Game_Unit.prototype.averageX = function() {
return this.aliveMembers().reduce(function(r, member) {
return r + member.screenX();
}, 0) / this.aliveMembers().length;
};
Game_Unit.prototype.averageY = function() {
return this.aliveMembers().reduce(function(r, member) {
return r + member.screenY();
}, 0) / this.aliveMembers().length;
};
//===========================================================================
// Game_Player
//===========================================================================
Game_Player.prototype.follower = function(index) {
return index === 0 ? this : this.followers().follower(index - 1);
};
//===========================================================================
// Game_BattlerBase
//===========================================================================
Game_BattlerBase.prototype.screenX = function() {
return this.spriteScreenX() || this._screenX || 0;
};
Game_BattlerBase.prototype.screenY = function() {
return this.spriteScreenY() || this._screenY || 0;
};
Game_BattlerBase.prototype.homeX = function() {
return this.battleSprite() ? this.battleSprite().homeX() : 0;
};
Game_BattlerBase.prototype.homeY = function() {
return this.battleSprite() ? this.battleSprite().homeY() : 0;
};
Game_BattlerBase.prototype.spriteScreenX = function() {
return this.battleSprite() ? this.battleSprite().screenX() : 0;
};
Game_BattlerBase.prototype.spriteScreenY = function() {
return this.battleSprite() ? this.battleSprite().screenY() : 0;
};
Game_BattlerBase.prototype.mainSprite = function() {
return this.battleSprite() ? this.battleSprite().mainSprite() : null;
};
Game_BattlerBase.prototype.friends = function() {
return this.isActor() ? $gameParty : $gameTroop;
};
Game_BattlerBase.prototype.opponents = function() {
return this.isEnemy() ? $gameParty : $gameTroop;
};
Game_BattlerBase.prototype.isOpponent = function(battler) {
return this.isEnemy() === !battler.isEnemy();
};
Game_BattlerBase.prototype.idleMotions = function() {
return ['wait', 'idle', 'dying', 'abnormal', 'guard', 'chant', 'sleep', 'victory', 'dead'];
};
Game_BattlerBase.prototype.isIdleMotion = function(motionType) {
return this.idleMotions().contains(motionType);
};
Game_BattlerBase.prototype.isFacingDown = function() {
return this.battlerDirection() === 'down';
};
Game_BattlerBase.prototype.isFacingLeft = function() {
return this.battlerDirection() === 'left';
};
Game_BattlerBase.prototype.isFacingRight = function() {
return this.battlerDirection() === 'right';
};
Game_BattlerBase.prototype.isFacingUp = function() {
return this.battlerDirection() === 'up';
};
Game_BattlerBase.prototype.isFacingHorizontal = function() {
return this.isFacingLeft() || this.isFacingRight();
};
Game_BattlerBase.prototype.isFacingVertical = function() {
return this.isFacingDown() || this.isFacingUp();
};
Game_BattlerBase.prototype.turnDown = function() {
this._battlerDirection = 'down';
};
Game_BattlerBase.prototype.turnLeft = function() {
this._battlerDirection = 'left';
};
Game_BattlerBase.prototype.turnRight = function() {
this._battlerDirection = 'right';
};
Game_BattlerBase.prototype.turnUp = function() {
this._battlerDirection = 'up';
};
Game_BattlerBase.prototype.turnBack = function() {
if (this.isFacingLeft()) {
this.turnRight();
} else if (this.isFacingRight()) {
this.turnLeft();
}
};
Game_BattlerBase.prototype.turnTowardCenter = function() {
this.turnTowardPosition(Graphics.boxWidth / 2, Graphics.boxHeight / 2);
};
Game_BattlerBase.prototype.turnAwayFromCenter = function() {
this.turnAwayFromPosition(Graphics.boxWidth / 2, Graphics.boxHeight / 2);
};
Game_BattlerBase.prototype.turnTowardOpponents = function() {
this.turnTowardPosition(this.opponents().averageX(), this.opponents().averageY());
};
Game_BattlerBase.prototype.turnAwayFromOpponents = function() {
this.turnAwayFromPosition(this.opponents().averageX(), this.opponents().averageY);
};
Game_BattlerBase.prototype.turnTowardTargets = function(targets) {
var position = BattleManager.averageTargetsPositions(targets);
this.turnTowardPosition(position.x, position.y);
};
Game_BattlerBase.prototype.turnAwayFromTargets = function(targets) {
var position = BattleManager.averageTargetsPositions(targets);
this.turnAwayFromPosition(position.x, position);
};
Game_BattlerBase.prototype.turnTowardPosition = function(positionX, positionY) {
if (this.screenX() < positionX) {
this.turnRight();
} else if (this.screenX() > positionX) {
this.turnLeft();
}
};
Game_BattlerBase.prototype.turnAwayFromPosition = function(positionX, positionY) {
if (this.screenX() < positionX) {
this.turnLeft();
} else if (this.screenX() > positionX) {
this.turnRight();
}
};
Game_BattlerBase.prototype.isBehind = function(target) {
return (target.isFacingRight() && this.screenX() < target.screenX()) ||
(target.isFacingLeft() && this.screenX() > target.screenX());
};
Game_BattlerBase.prototype.isSpriteEffecting = function() {
return this.battleSprite() && this.battleSprite().isEffecting();
};
Game_BattlerBase.prototype.isSpriteMoving = function() {
return this.battleSprite() && this.battleSprite().isMoving();
};
Game_BattlerBase.prototype.isSpriteAnimation = function() {
return this.battleSprite() && this.battleSprite().isAnimationPlaying();
};
Game_BattlerBase.prototype.isAnimatedBattler = function() {
return this.battleSprite() && this.battleSprite().isAnimatedBattler();
};
Game_BattlerBase.prototype.isStaticBattler = function() {
return this.battleSprite() && this.battleSprite().isStaticBattler();
};
Game_BattlerBase.prototype.inHomePosition = function() {
return this.battleSprite() && this.battleSprite().inHomePosition();
};
Game_BattlerBase.prototype.notIinHomePosition = function() {
return !this.inHomePosition();
};
Game_BattlerBase.prototype.isCounterAttack = function() {
return this._counterAttack;
};
Game_BattlerBase.prototype.startCounterAttack = function() {
this._counterAttack = true;
};
Game_BattlerBase.prototype.endCounterAttack = function() {
this._counterAttack = false;
};
Game_BattlerBase.prototype.battleSprite = function() {
return VictorEngine.battleSprites(this.spriteId());
};
Game_BattlerBase.prototype.setBattleSprite = function(sprite) {
VictorEngine.addBattleSprite(this.spriteId(), sprite);
};
Game_BattlerBase.prototype.clearBattleSprite = function() {
VictorEngine.addBattleSprite(this.spriteId(), null);
};
Game_BattlerBase.prototype.addNewAction = function(action) {
this._actions.unshift(action);
};
Game_BattlerBase.prototype.startEscapeCommand = function() {
this._isEscapeCommand = true;
};
Game_BattlerBase.prototype.endEscapeCommand = function() {
this._isEscapeCommand = false;
};
Game_BattlerBase.prototype.isEscapeCommand = function() {
return this._isEscapeCommand;
};
//===========================================================================
// Game_Battler
//===========================================================================
VictorEngine.BasicModule.onBattleEnd = Game_Battler.prototype.onBattleEnd;
Game_Battler.prototype.onBattleEnd = function() {
VictorEngine.BasicModule.onBattleEnd.call(this);
this.clearBattleSprite();
};
//===========================================================================
// Game_Actor
//===========================================================================
Game_Actor.prototype.battlerDirection = function() {
return this._battlerDirection || 'left';
};
Game_Actor.prototype.spriteId = function() {
return 'actor ' + String(this.actorId());
};
//===========================================================================
// Game_Enemy
//===========================================================================
Game_Enemy.prototype.battlerDirection = function() {
return this._battlerDirection || ($gameSystem.isSideView() ? 'right' : 'left');
};
Game_Enemy.prototype.attackAnimationId1 = function() {
return 0;
};
Game_Enemy.prototype.attackAnimationId2 = function() {
return 0;
};
Game_Enemy.prototype.spriteId = function() {
return 'enemy ' + String(this.index());
};
//===========================================================================
// Sprite_Battler
//===========================================================================
Object.defineProperties(Sprite_Battler.prototype, {
z: {
get: function() {
return 3;
},
configurable: true
},
h: {
get: function() {
return this.spriteZ();
},
configurable: true
}
});
Sprite_Battler.prototype.isEnemy = function() {
return this._battler && this._battler.isEnemy();
};
Sprite_Battler.prototype.isVisible = function() {
return this.visible && this.opacity > 0;
};
Sprite_Battler.prototype.isDamagePopup = function() {
return this._damages.length > 0;
};
Sprite_Battler.prototype.isDisabledMotion = function() {
var motion = Sprite_Actor.MOTIONS;
return this._motion === motion['dead'] || this._motion === motion['sleep'];
};
Sprite_Battler.prototype.isAnimatedBattler = function() {
return false;
};
Sprite_Battler.prototype.isStaticBattler = function() {
return false;
};
Sprite_Battler.prototype.spriteZ = function() {
return this.screenY();
};
Sprite_Battler.prototype.screenX = function() {
return this._homeX + this._offsetX;
};
Sprite_Battler.prototype.screenY = function() {
return this._homeY + this._offsetY;
};
Sprite_Battler.prototype.homeX = function() {
return this._homeX;
};
Sprite_Battler.prototype.homeY = function() {
return this._homeY;
};
Sprite_Battler.prototype.mainSprite = function() {
return this._mainSprite;
};
Sprite_Battler.prototype.noEntryMove = function() {
return this._battler && !this._battler.canMove();
};
Sprite_Battler.prototype.center = function() {
var sprite = this._mainSprite ? this._mainSprite : this;
var x = sprite._frame.width / 2 || 0;
var y = sprite._frame.height / 2 || 0;
return {
x: x,
y: y
};
};
//===========================================================================
// Sprite_Actor
//===========================================================================
Sprite_Actor.prototype.updateBattlerDirection = function() {
if (this._battler && !this.isDisabledMotion()) {
if ((this._battler.isFacingLeft() && this.scale.x < 0) ||
(this._battler.isFacingRight() && this.scale.x > 0)) {
this.scale.x *= -1;
}
}
};
//===========================================================================
// Sprite_Enemy
//===========================================================================
Sprite_Enemy.prototype.updateBattlerDirection = function() {
if (this._battler && !this.isDisabledMotion()) {
if ((this._battler.isFacingLeft() && this.scale.x > 0) ||
(this._battler.isFacingRight() && this.scale.x < 0)) {
this.scale.x *= -1;
}
}
};
Sprite_Enemy.prototype.isStaticBattler = function() {
return true;
};
//===========================================================================
// Sprite_Damage
//===========================================================================
Object.defineProperties(Sprite_Damage.prototype, {
z: {
get: function() {
return 10;
},
configurable: true
}
});
//===========================================================================
// Spriteset_Battle
//===========================================================================
VictorEngine.BasicModule.setBattler = Sprite_Battler.prototype.setBattler;
Sprite_Battler.prototype.setBattler = function(battler) {
VictorEngine.BasicModule.setBattler.call(this, battler);
if (battler) {
battler.setBattleSprite(this);
}
};
Spriteset_Battle.prototype.sortBattleSprites = function() {
if (this._sortChildrenFrame !== Graphics.frameCount) {
this._battleField.children.sort(this.compareBattleSprites.bind(this));
this._sortChildrenFrame = Graphics.frameCount;
}
};
Spriteset_Battle.prototype.compareBattleSprites = function(a, b) {
if ((a.z || 0) !== (b.z || 0)) {
return (a.z || 0) - (b.z || 0);
} else if ((a.h || 0) !== (b.h || 0)) {
return (a.h || 0) - (b.h || 0);
} else if ((a.y || 0) !== (b.y || 0)) {
return (a.y || 0) - (b.y || 0);
} else {
return a.spriteId - b.spriteId;
}
};
//===========================================================================
// Window_Base
//===========================================================================
Window_Base.prototype.textWidthEx = function(text) {
if (text) {
var state = {
index: 0,
x: 0
};
state.text = this.convertEscapeCharacters(text);
while (state.index < state.text.length) {
this.processCharacter(state)
};
return state.x;
} else {
return 0;
}
};
//===========================================================================
// Window_BattleLog
//===========================================================================
Window_BattleLog.prototype.waitForBattleAnimation = function(animationId, speed) {
var speed = Math.max(speed, 1) || 1;
this.waitForTime(VictorEngine.waitAnimation(animationId) / speed);
};
Window_BattleLog.prototype.startCounterAction = function(subject, action, targets) {
this.push('addText', TextManager.counterAttack.format(subject.name()));
this.startAction(subject, action, targets);
};
Window_BattleLog.prototype.waitForTime = function(time) {
this._waitCount = time;
};
Window_BattleLog.prototype.setupStartAction = function(subject, action, targets) {
if (this._setupStartActionFrame !== Graphics.frameCount) {
VictorEngine.removeMethod(this._methods, 'showAnimation');
VictorEngine.removeMethod(this._methods, 'waitForBattleAnimation');
this.push('prepareAction', subject, action, targets);
this._setupStartActionFrame = Graphics.frameCount;
}
};
Window_BattleLog.prototype.initializeMethodsStack = function() {
this._stackWaitCount = [];
this._stackWaitMode = [];
this._methodsStack = [];
this._stackIndex = 0;
};
Window_BattleLog.prototype.prepareAction = function(subject, action, targets) {
this.uniqueTargets(targets).forEach(function(unique) {
this._stackIndex = VictorEngine.battlerIndex(unique.target);
this.prepareUniqueAction(subject, action, unique.target, unique.repeat)
}, this)
this._stackIndex = 0;
};
Window_BattleLog.prototype.prepareUniqueAction = function(subject, action, target, repeat) {
this.prepareUniqueActionStep1(subject, action, target, repeat);
this.prepareUniqueActionStep2(subject, action, target, repeat);
this.prepareUniqueActionStep3(subject, action, target, repeat);
};
Window_BattleLog.prototype.prepareUniqueActionStep1 = function(subject, action, target, repeat) {
var item = action.item();
this.push('showAnimation', subject, [target], item.animationId);
};
Window_BattleLog.prototype.prepareUniqueActionStep2 = function(subject, action, target, repeat) {
var item = action.item();
var animId = this.uniqueActionAnimationId(subject, item)
this.push('waitForBattleAnimation', animId);
};
Window_BattleLog.prototype.prepareUniqueActionStep3 = function(subject, action, target, repeat) {
for (var i = 0; i < repeat; i++) {
if (i > 0) {
this.push('waitForTime', 1);
}
this.push('updateStackAction', this._stackIndex, subject, target);
}
};
Window_BattleLog.prototype.uniqueActionAnimationId = function(subject, item) {
if (item.animationId < 0) {
return subject.attackAnimationId1();
} else {
return item.animationId;
}
}
Window_BattleLog.prototype.uniqueTargets = function(targets) {
var repeats = [];
targets.forEach(function(target, i) {
var index = targets.indexOf(target);
if (index === i) {
repeats[index] = {
target: target,
repeat: 1
};
} else {
repeats[index].repeat++;
}
})
return repeats.filter(function(repeat) {
return !!repeat
});
}
Window_BattleLog.prototype.updateMethodsStack = function() {
var methods = this._methodsStack;
for (var i = 0; i < methods.length; i++) {
if (methods[i] && methods[i].length > 0) {
while (methods[i].length > 0 && !this.updateStackWait(i)) {
this.callNextStackMethod(i);
}
}
}
if (this.isStackEmpty()) {
this._methodsStack = [];
}
};
Window_BattleLog.prototype.isStackEmpty = function() {
return this._methodsStack.every(function(methods) {
return !methods || methods.length === 0;
})
};
Window_BattleLog.prototype.stackBattler = function(index) {
if (index > 0) {
var max = $gameParty.maxBattleMembers();
if (index > max) {
return $gameTroop.members()[index - max - 1];
} else {
return $gameParty.members()[index - 1];
}
} else {
return null;
}
};
Window_BattleLog.prototype.callNextStackMethod = function(index) {
var method = this._methodsStack[index].shift();
if (method.name && this[method.name]) {
this[method.name].apply(this, method.params);
} else {
throw new Error('Method not found: ' + method.name);
}
};
Window_BattleLog.prototype.saveMethodsStack = function(index) {
this._saveStackIndex = this._stackIndex;
this._saveMethodsStack = this._methodsStack[index].clone();
this._stackIndex = index;
this._methodsStack[index] = [];
};
Window_BattleLog.prototype.restoreMethodsStack = function(index) {
this._methodsStack[index] = this._methodsStack[index].concat(this._saveMethodsStack);
this._stackIndex = this._saveStackIndex;
};
Window_BattleLog.prototype.methodStackActive = function() {
return this._methodsStack.length > 0;
};
Window_BattleLog.prototype.updateStackAction = function(index, subject, target) {
BattleManager.updateStackAction(index, subject, target);
};
Window_BattleLog.prototype.pushMethodsStack = function(methodName) {
var index = this._stackIndex || 0;
var methodArgs = Array.prototype.slice.call(arguments, 1);
if (methodName === 'wait') {
methodName = 'stackWait';
methodArgs.unshift(index);
} else if (methodName === 'waitForTime') {
methodName = 'stackWaitForTime';
methodArgs.unshift(index);
} else if (methodName === 'waitForBattleAnimation') {
methodName = 'stackWaitFoAnimation';
methodArgs.unshift(index);
} else if (methodName === 'updateWaitMode') {
methodName = 'updateStackWaitMode';
methodArgs.unshift(index);
} else if (methodName === 'setWaitMode') {
methodName = 'setStackWaitMode';
methodArgs.unshift(index);
}
this._methodsStack[index] = this._methodsStack[index] || [];
this._methodsStack[index].push({
name: methodName,
params: methodArgs
});
};
Window_BattleLog.prototype.updateStackWait = function(index) {
return this.updateStackWaitCount(index) || this.updateStackWaitMode(index);
};
Window_BattleLog.prototype.updateStackWaitCount = function(index) {
if (this._stackWaitCount[index] && this._stackWaitCount[index] > 0) {
this._stackWaitCount[index]--;
return true;
}
return false;
};
Window_BattleLog.prototype.stackWait = function(index) {
this.stackWaitForTime(index, this.messageSpeed());
};
Window_BattleLog.prototype.stackWaitFoAnimation = function(index, animationId, speed) {
var speed = Math.max(speed, 1) || 1;
this.stackWaitForTime(index, VictorEngine.waitAnimation(animationId) / speed);
};
Window_BattleLog.prototype.stackWaitForTime = function(index, time) {
this._stackWaitCount[index] = time;
};
Window_BattleLog.prototype.updateStackWaitMode = function(index) {
var battler = this.stackBattler(index);
var waitMode = this._stackWaitMode[index] || [];
if (waitMode.contains('effect')) {
var waiting = battler ? battler.isSpriteEffecting() : this._spriteset.isEffecting();
if (waiting) {
return true;
} else {
this.removeWaitMode(index, 'effect');
}
}
if (waitMode.contains('movement')) {
var waiting = battler ? battler.isSpriteMoving() : this._spriteset.isAnyoneMoving();
if (waiting) {
return true;
} else {
this.removeWaitMode(index, 'movement');
}
}
this._stackWaitMode[index] = [];
return false;
};
Window_BattleLog.prototype.setStackWaitMode = function(index, waitMode) {
this._stackWaitMode[index] = this._stackWaitMode[index] || [];
if (!this._stackWaitMode[index].contains(waitMode)) {
this._stackWaitMode[index].push(waitMode);
}
};
Window_BattleLog.prototype.removeWaitMode = function(index, waitMode) {
this._stackWaitMode[index] = this._stackWaitMode[index] || [];
var waitIndex = this._stackWaitMode[index].indexOf(waitMode);
this._stackWaitMode[index].splice(waitIndex, 1);
};
Window_BattleLog.prototype.startEscape = function(subject, action) {
subject._isEscapeCommand = true;
};
Window_BattleLog.prototype.performEscape = function(subject) {
$gameParty._skipClear = true;
BattleManager.processEscape();
$gameParty._skipClear = false;
};
Window_BattleLog.prototype.setupCurrentAction = function(subject, action, targets) {};
})();