You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1703 lines
52 KiB
JavaScript

3 years ago
//=============================================================================
// MOG_ATB.js
//=============================================================================
/*:
* @plugindesc (v0.3 *) Sistema de batalha em tempo real.
* @author Moghunter
*
* @param ATB Mode
* @desc Definição do Modo de ATB.
* 0 Wait / 1 SemiActive-I / 2 SemiActive-II / 3 Full Active
* @default 2
* @type select
* @option Wait
* @value 0
* @option Semi Active I
* @value 1
* @option Semi Active II
* @value 2
* @option Full Active
* @value 3
* @parent -> EXP <<<<<<<<<<<<<<<<<<<<<<<
*
* @param ATB Max Value
* @desc Definição do tempo máximo de ATB (Velocidade).
* @default 4000
* @type number
*
* @param Turn Duration
* @desc Definição da duração do turno.
* @default 480
* @type number
*
* @param States Duration
* @desc Definição da duração das condições.
* @default 180
* @type number
*
* @param Escape Duration
* @desc Definição do tempo para escapar.
* @default 180
* @type number
*
* @param Skip Emerge Message
* @desc Desativar a janela de mensagem de emergir.
* @default true
* @type boolean
*
* @param Full SE
* @desc Definição do som quando o ATB atingir o nível máximo.
* @type file
* @default audio/se/Book1
*
* @param Change Actor Left
* @desc Definição do botão para mudar o personagem.
* @default pagedown
*
* @param Change Actor Right
* @desc Definição do botão para mudar o personagem.
* @default pageup
*
* @param Escape Button
* @desc Definição do botão para escapar.
* @default cancel
*
* @param Escape Layout X
* @desc Definição da posição do layout de fugir X-axis.
* @default 600
* @type number
*
* @param Escape Layout Y
* @desc Definição da posição do layout de fugir Y-axis.
* @default 64
* @type number
*
* @param Escape Gauge X
* @desc Definição da posição do medidor de fugir X-axis.
* @default 6
* @type number
*
* @param Escape Gauge Y
* @desc Definição da posição do medidor de fugir Y-axis.
* @default 16
* @type number
*
* @help
* =============================================================================
* +++ MOG - Active Time Battle [ATB] (v0.3 *) +++
* By Moghunter
* https://mogplugins.wordpress.com
* =============================================================================
* Sistema de batalha em tempo real.
*
* =============================================================================
* IMAGES
* =============================================================================
* As imagens deverão ser gravadas na pasta. (img/atb/)
* Imagens necessárias.
*
* Escape_A.png
* Escape_B.png
*
* =============================================================================
* PLUGIN COMMAND
* =============================================================================
* Para definir o modo do ATB utilize o comando abaixo.
*
* atb_mode : MODE
*
* 0 - Wait
* - Os inimigos não atacam na seleção de comando.
* 1 - Semi Active I
* - Os inimigos não atacam na seleção de items/skills e seleção de alvo.
* 2 - Semi Active II
* - Os inimigos não atacam na seleção de items/skills.
* 3 - Full Active
* - Os inimigos atacam em qualquer situação.
*
* =============================================================================
* CAST TIME
* =============================================================================
* Para definir o tempo de ativar uma ação (magias), defina pelo valor da
* velocidade (Speed) da ação da habilidade ou item.
*
* =============================================================================
* STATE DURATION
* =============================================================================
* Para definir o tempo da duração da condição, defina um valor em
*
* Durations in Turns
*
* =============================================================================
* BUTTONS
* =============================================================================
* Q - Selecionar o personagem da direita.
* W - Selecionar o personagem da esquerda.
* X - Escapar
*
* =============================================================================
* - WHAT'S NEW (version 0.3b)
* =============================================================================
* - (BUG FIX) - Correção de não poder mudar de personagem durante a ação.
*
*/
//=============================================================================
// ** PLUGIN PARAMETERS
//=============================================================================
  var Imported = Imported || {};
  Imported.MOG_ATB = true;
  var Moghunter = Moghunter || {};
 Moghunter.parameters = PluginManager.parameters('MOG_ATB');
Moghunter.atb_Mode = Number(Moghunter.parameters['ATB Mode'] || 3);
Moghunter.atb_MaxValue = Number(Moghunter.parameters['ATB Max Value'] || 4000);
Moghunter.atb_TurnDuration = Number(Moghunter.parameters['Turn Duration'] || 480);
Moghunter.atb_StatesDuration = Number(Moghunter.parameters['States Duration'] || 180);
Moghunter.atb_SkipEmerge = String(Moghunter.parameters['Skip Emerge Message'] || 'true');
Moghunter.atb_EscapeDuration = Number(Moghunter.parameters['Escape Duration'] || 180);
Moghunter.atb_EscapeGaugeX = Number(Moghunter.parameters['Escape Layout X'] || 600);
Moghunter.atb_EscapeGaugeY = Number(Moghunter.parameters['Escape Layout Y'] || 64);
Moghunter.atb_EscapeGaugeX2 = Number(Moghunter.parameters['Escape Gauge X'] || 6);
Moghunter.atb_EscapeGaugeY2 = Number(Moghunter.parameters['Escape Gauge Y'] || 16);
Moghunter.atb_EscapeButton = String(Moghunter.parameters['Escape Button'] || 'cancel');
Moghunter.atb_FullSE = String(Moghunter.parameters['Full SE'] || 'Book1');
Moghunter.atb_NextActorLeft = String(Moghunter.parameters['Change Actor Left'] || 'pagedown');
Moghunter.atb_NextActorRight = String(Moghunter.parameters['Change Actor Right'] || 'pageup');
//=============================================================================
// ** Game Temp
//=============================================================================
//==============================
// * Initialize
//==============================
var _mog_atb_gtemp_initialize = Game_Temp.prototype.initialize;
Game_Temp.prototype.initialize = function() {
_mog_atb_gtemp_initialize.call(this);
this._atbForceHideWindows = false;
this._atbEscape = [0,1,false];
this._atbWinData = [false,false,false];
this._atbWaitTemp = [0,0,0];
this._atbneedRefWind = false;
this._atbBattleEnd = false;
this._atbInTurn = false;
this._battleEnd = false;
};
//=============================================================================
// ** Game System
//=============================================================================
//==============================
// * Initialize
//==============================
var _mog_atb_gsys_initialize = Game_System.prototype.initialize;
Game_System.prototype.initialize = function() {
_mog_atb_gsys_initialize.call(this);
this._atbEventPhase = [0,0,0,false,false];
this._atbEventPhase[1] = Math.max(Moghunter.atb_TurnDuration,120);
this._atbEspcapeDuration = Math.max(Moghunter.atb_EscapeDuration,60);
this._atbMode = [Moghunter.atb_Mode,false];
};
//==============================
// * Play Sound MX 2
//==============================
SoundManager.playSoundMX2 = function(fileName){
var se = {};
var file = fileName.split('/');
var fileReal = file[file.length - 1];
se.name = String(fileReal);
se.pitch = 100;
se.volume = 100;
AudioManager.playSe(se);
};
//=============================================================================
// ** Game_Interpreter
//=============================================================================
//==============================
// * PluginCommand
//==============================
var _mog_atb_pluginCommand = Game_Interpreter.prototype.pluginCommand
Game_Interpreter.prototype.pluginCommand = function(command, args) {
_mog_atb_pluginCommand.call(this,command, args)
this.setATBParInt(command, args);
return true;
};
//==============================
// * set ATB ParInt
//==============================
Game_Interpreter.prototype.setATBParInt = function(command, args) {
if (command === "atb_mode" && args[1]) {
var mode = Math.min(Math.max(Number(args[1]),0),3);
$gameSystem._atbMode[0] = mode;
};
};
//=============================================================================
// ** Game Battler Base
//=============================================================================
//==============================
// * Init Members
//==============================
var _mog_atb_gbbase_initMembers = Game_BattlerBase.prototype.initMembers;
Game_BattlerBase.prototype.initMembers = function() {
_mog_atb_gbbase_initMembers.call(this);
this.initATBSetup();
};
//==============================
// * Init ATB Setup
//==============================
Game_BattlerBase.prototype.initATBSetup = function() {
this._atb = 0;
this._max_atb = Math.max(Moghunter.atb_MaxValue,100);
this._wait_atb = 0;
this._cast_atb = [null,0,1];
this._atbItem = null;
this._inSelection = false;
this._intTurn = false;
this._stateTime = Math.max(Moghunter.atb_StatesDuration,60);
this._stateDuration = [];
this._buffTime = Math.max(Moghunter.atb_StatesDuration,60);
this._buffDuration = [0,0,0,0,0,0,0,0];
};
//==============================
// * ATB
//==============================
Game_BattlerBase.prototype.atb = function() {
return this._atb;
};
//==============================
// * Max ATB
//==============================
Game_BattlerBase.prototype.maxAtb = function() {
return this._max_atb;
};
//==============================
// * ATB Speed
//==============================
Game_BattlerBase.prototype.atbSpeed = function() {
return this.agi;
};
//==============================
// * Die
//==============================
var _mog_atb_gbbase_die = Game_BattlerBase.prototype.die;
Game_BattlerBase.prototype.die = function() {
_mog_atb_gbbase_die.call(this);
if ($gameParty.inBattle()) {
if (this.needForceClearSelection()){
this.refreshCommandSelectionATB();
};
$gameTemp._atbneedRefWind = true;
this.clearATB();
};
};
//==============================
// * Need Force Clear Selection
//==============================
Game_BattlerBase.prototype.needForceClearSelection = function() {
if (!BattleManager._atbBattlerInput) {return false};
if (BattleManager._atbBattlerInput[0] != this) {return false};
if (this.isRestricted()) {return true};
if (this.isDead()) {return true}
return false;
};
//==============================
// * Refresh
//==============================
var _mog_atb_gBat_refresh = Game_Battler.prototype.refresh;
Game_Battler.prototype.refresh = function() {
_mog_atb_gBat_refresh.call(this);
if (this.needForceClearSelection()){
this.refreshCommandSelectionATB();
};
};
//==============================
// * refresh Command Selection ATB
//==============================
Game_BattlerBase.prototype.refreshCommandSelectionATB = function() {
BattleManager.selectionComAtbClear()
BattleManager._atbBattlerInput = [null,false];
$gameTemp._atbForceHideWindows = true;
};
//==============================
// * clear ATB
//==============================
Game_BattlerBase.prototype.clearATB = function() {
this._atb = 0;
this._wait_atb = 0;
this._intTurn = false
this._atbItem = null;
this.clearActions()
this.clearCast();
};
//==============================
// * clear Cast
//==============================
Game_BattlerBase.prototype.clearCast = function() {
this._cast_atb = [null,0,1];
};
//==============================
// * is Max ATB
//==============================
Game_BattlerBase.prototype.isMaxAtb = function() {
return this.atb() >= this.maxAtb();
};
//*******************************
// * is Chanting *(Overwritten)*
//*******************************
Game_Battler.prototype.isChanting = function() {
if (this._cast_atb[1] > 0) {return true};
};
//==============================
// * is Casting
//==============================
Game_BattlerBase.prototype.isCasting = function() {
return this._cast_atb[0];
};
//==============================
// * update Count Atb
//==============================
Game_BattlerBase.prototype.updateCountAtb = function() {
this._atb += this.atbSpeed();
};
//*******************************
// * Can Input *(Overwritten)*
//*******************************
Game_BattlerBase.prototype.canInput = function() {
if (!this.isAppeared()) {return false};
if (this.isRestricted()) {return false};
if (this.isAutoBattle()) {return false};
if (!this.isMaxAtb()) {return false};
if (this.isCasting()) {return false};
if (this._intTurn) {return false};
if (this._atbItem) {return false};
return true;
};
//==============================
// * Can Move Atb
//==============================
Game_BattlerBase.prototype.canMoveAtb = function() {
if (!this.isAppeared()) {return false};
if ($gameSystem._atbEventPhase[3]) {return false};
if (Imported.MOG_BattleCameraFrontal && $gameSystem._atbMode[0] < 3) {
if ($gameTemp._bcam.atbwaitFocus && $gameTemp._bcam.sMov) {return false};
};
return true;
};
//==============================
// * Can Fill ATB
//==============================
Game_BattlerBase.prototype.canFillATB = function() {
if (this.restriction() >= 4) {return false};
if (this._wait_atb > 0) {return false};
return true;
};
//*******************************
// * On End Turn *(Overwritten)*
//*******************************
Game_Battler.prototype.onTurnEnd = function() {
this.clearResult();
};
//==============================
// * clear States
//==============================
var _mog_atb_gbatbase_clearStates = Game_BattlerBase.prototype.clearStates;
Game_BattlerBase.prototype.clearStates = function() {
_mog_atb_gbatbase_clearStates.call(this);
this._stateDuration = [];
};
//==============================
// * Reset States Counts
//==============================
var _mog_atb_gbatbase_resetStateCounts = Game_BattlerBase.prototype.resetStateCounts;
Game_BattlerBase.prototype.resetStateCounts = function(stateId) {
_mog_atb_gbatbase_resetStateCounts.call(this,stateId);
if (!this._stateDuration[stateId]) {
this._stateDuration[stateId] = this._stateTime
};
if (this._stateDuration[stateId] < 60) {
this._stateDuration[stateId] = this._stateTime;
};
};
//==============================
// * erase State
//==============================
var _mog_atb_gbatbase_eraseState = Game_BattlerBase.prototype.eraseState;
Game_BattlerBase.prototype.eraseState = function(stateId) {
_mog_atb_gbatbase_eraseState.call(this,stateId);
delete this._stateDuration[stateId];
};
//==============================
// * update State Turns ATB
//==============================
Game_BattlerBase.prototype.updateStateTurns_ATB = function() {
this._states.forEach(function(stateId) {
if (this._stateDuration[stateId] == null) {
this._stateDuration[stateId] = 0
}
this._stateDuration[stateId]--;
if (this._stateDuration[stateId] <= 0) {
this._stateDuration[stateId] = this._stateTime;
if (this._stateTurns[stateId] > 0) {
this._stateTurns[stateId]--;
};
this.executeStatesEffect_ATB(stateId);
};
}, this);
};
//==============================
// * executeStatesEffect_ATB
//==============================
Game_BattlerBase.prototype.executeStatesEffect_ATB = function(stateId) {
this.regenerateAll();
this.startDamagePopup();
if (this._stateTurns[stateId] === 0) {this.eraseState(stateId)};
};
//==============================
// * remove Guard State
//==============================
Game_BattlerBase.prototype.removeGuardState = function(stateId) {
this.states().forEach(function(state) {
for (var i = 0; i < state.traits.length; i++) {
var effect = state.traits[i]
if (effect.dataId === 1) {
this.eraseState(state.id)
};
};
}, this);
};
//==============================
// * clear Buffs
//==============================
var _mog_atb_gBatbase_clearBuffs = Game_BattlerBase.prototype.clearBuffs;
Game_BattlerBase.prototype.clearBuffs = function() {
_mog_atb_gBatbase_clearBuffs.call(this);
this._buffDuration = [0,0,0,0,0,0,0,0];
};
//==============================
// * erase Buff
//==============================
var _mog_atb_gBatbase_eraseBuff = Game_BattlerBase.prototype.eraseBuff;
Game_BattlerBase.prototype.eraseBuff = function(paramId) {
_mog_atb_gBatbase_eraseBuff.call(this,paramId)
this._buffDuration[paramId] = 0;
};
//==============================
// * update Buff Turn ATB
//==============================
Game_BattlerBase.prototype.updateBuffTurns_ATB = function() {
for (var i = 0; i < this._buffTurns.length; i++) {
if (this._buffDuration[i] == null) {
this._buffDuration[i] = 0
};
this._buffDuration[i]--;
if (this._buffDuration[i] <= 0) {
this._buffDuration[i] = this._buffTime;
if (this._buffTurns[i] > 0) {
this._buffTurns[i]--;
this.executeBuffEffect_ATB(i)
};
};
};
};
//==============================
// * executeBuffEffect_ATB
//==============================
Game_BattlerBase.prototype.executeBuffEffect_ATB = function(buffId) {
if (this._buffTurns[buffId] === 0) {this.removeBuff(buffId)};
};
//=============================================================================
// ** Game Battler
//=============================================================================
//==============================
// * perform Action End
//==============================
var _mog_atb_gBat_performActionEnd = Game_Battler.prototype.performActionEnd;
Game_Battler.prototype.performActionEnd = function() {
_mog_atb_gBat_performActionEnd.call(this);
this.setActionState('undecided');
};
//=============================================================================
//=============================================================================
// ** Battle Manager
//=============================================================================
//=============================================================================
//==============================
// * init Members
//==============================
var _mog_atb_btmngr_initMembers = BattleManager.initMembers;
BattleManager.initMembers = function() {
_mog_atb_btmngr_initMembers.call(this);
this.setupATB();
};
//==============================
// * setup ATB
//==============================
BattleManager.setupATB = function() {
this._atbBattler = null;
this._atbBattlerInput = [null,false];
$gameTemp._atbEscape = [0,$gameSystem._atbEspcapeDuration,false];
$gameTemp._battleEnd = false;
$gameTemp._atbBattleEnd = false;
$gameTemp._atbWaitTemp = [0,40,0];
$gameTemp._atbneedRefWind = false;
$gameTemp._atbInTurn = false;
$gameSystem._atbEventPhase[0] = 0;
$gameSystem._atbEventPhase[3] = false;
};
//==============================
// * clear ATB Base
//==============================
BattleManager.clearATBBase = function() {
$gameTemp._atbForceHideWindows = true;
$gameTemp._atbEscape[0] = 0;
this._atbBattler = null;
this._atbBattlerInput = [null,false];
this._actorIndex = -1;
$gameSystem._atbEventPhase[0] = 0;
$gameSystem._atbEventPhase[3] = false;
};
//==============================
// * prepare Initial ATB Value
//==============================
BattleManager.prepareInitialATBValue = function() {
for (var i = 0; i < $gameParty.members().length; i++) {
var battler = $gameParty.members()[i];
battler.clearATB();
battler._wait_atb = 5;
var per = battler._max_atb * 30 / 100;
var value = Math.randomInt(per);
if (this._preemptive) {
value += (per * 2);
};
battler._atb = Math.floor(value);
};
for (var i = 0; i < $gameTroop.members().length; i++) {
var battler = $gameTroop.members()[i];
battler.clearATB();
battler._wait_atb = 5;
var per = battler._max_atb * 30 / 100;
var value = Math.randomInt(per);
if (this._surprise) {
value += (per * 2);
};
battler._atb = Math.floor(value);
};
this.clearATBBase();
};
//==============================
// * clear ATB Value Party
//==============================
BattleManager.clearATBValueParty = function() {
for (var i = 0; i < $gameParty.members().length; i++) {
var battler = $gameParty.members()[i];
battler.clearATB();
battler.setActionState('undecided')
};
if ($gameTemp._battleEnd || $gameSystem._atbBattleEnd) {
for (var i = 0; i < $gameTroop.members().length; i++) {
var battler = $gameTroop.members()[i];
battler.clearATB();
};
};
this.clearATBBase();
};
//==============================
// * need Update ATB Basic
//==============================
BattleManager.needUpdate_ATBBasic = function() {
if (this._phase == 'action') {return false};
if (this._phase == 'turn') {return false};
if ($gameTemp._atbBattleEnd) {return false};
if ($gameMessage.isBusy()) {return false};
if ($gameTemp._battleEnd) {return false};
if ($gameSystem._atbEventPhase[3]) {return false};
if ($gameTemp._atbWaitTemp[0] > 0) {return false}
if ($gameTemp._atbWaitTemp[1] > 0) {return false}
if ($gameSystem._atbMode[1]) {return false};
return true;
};
//==============================
// * need Update ATB
//==============================
BattleManager.needUpdate_ATB = function() {
if (this._phase === 'action') {return false};
if (this._phase === 'turn') {return false};
if (BattleManager.isBusy()) {return false};
if ($gameTemp._atbInTurn) {return false};
return true;
};
//==============================
// * Update ATB
//==============================
BattleManager.update_ATB = function() {
if (this.actor()) {this.updateCheckActorPar(this.actor())};
this.allBattleMembers().forEach(function(battler) {
if (battler.canMoveAtb() && !battler.isDead()) {this.updateBattlers_ATB(battler)};
}, this);
};
//==============================
// * need Force Clear Command
//==============================
BattleManager.needForceClearCommand = function(battler) {
if (!battler) {return true};
if (battler.restriction() > 0) {return true};
if (battler._intTurn) {return true};
if (!battler.isMaxAtb()) {return true};
if (!battler.currentAction()) {return true};
if (battler.isCasting()) {return true};
return false;
};
//==============================
// * Update Check Actor Par
//==============================
BattleManager.updateCheckActorPar = function(battler) {
if (this.needForceClearCommand(battler)) {
if (battler) {
battler._intTurn = false
battler._atbItem = null;
battler.clearActions()
battler.clearCast();
};
this.selectionComAtbClear();
};
};
//==============================
// * Update Battlers ATB
//==============================
BattleManager.updateBattlers_ATB = function(battler) {
if (battler._wait_atb > 0) {battler._wait_atb--};
if (battler.canFillATB()) {this.updateFill_ATB(battler)};
this.updateStateBuffTurn_ATB(battler);
};
//==============================
// * Update State Buff Turn_ATB
//==============================
BattleManager.updateStateBuffTurn_ATB = function(battler) {
battler.updateStateTurns_ATB();
battler.updateBuffTurns_ATB();
};
//==============================
// * update par Correction
//==============================
BattleManager.updateParCorretionBattler_ATB = function(battler) {
battler._intTurn = false;
battler._atbItem = null;
};
//==============================
// * update Fill ATB
//==============================
BattleManager.updateFill_ATB = function(battler) {
if (!battler.isMaxAtb()) {
battler.updateCountAtb();
this.updateParCorretionBattler_ATB(battler)
if (battler.isMaxAtb()) {this.executeATBFullEffect(battler)};
} else {
this.updateBattlerFull_ATB(battler);
};
};
//==============================
// * executeATBFullEffect
//==============================
BattleManager.executeATBFullEffect = function(battler) {
if (battler._atb > battler._max_atb) {battler._atb = battler._max_atb};
if (battler.isActor()) {SoundManager.playSoundMX2(Moghunter.atb_FullSE)};
battler.removeGuardState();
};
//==============================
// * update Battler Full ATB
//==============================
BattleManager.updateBattlerFull_ATB = function(battler) {
if (!this._atbBattler) {
if (battler.isCasting(battler)) {
this.updateATBCast_ATB(battler);
} else {
this.prepareNextSubject_ATB(battler);
};
};
};
//==============================
// * update Battler Full ATB
//==============================
BattleManager.updateATBCast_ATB = function(battler) {
battler._cast_atb[1]++;
if (battler._cast_atb[1] >= battler._cast_atb[2]) {this.prepareNextSubjectCast_ATB(battler);};
};
//==============================
// * update Escape
//==============================
BattleManager.canEscape_ATB = function(active) {
if (!active) {return false};
if (!this._canEscape) {return false};
if (!Input.isPressed(Moghunter.atb_EscapeButton)) {return false};
return true;
};
//==============================
// * update Escape ATB
//==============================
BattleManager.updateEscape_ATB = function(active) {
if ($gameTemp._atbEscape[2]) {return};
if (this.canEscape_ATB(active)) {
$gameTemp._atbEscape[0]++;
if ($gameTemp._atbEscape[0] >= $gameTemp._atbEscape[1]) {
$gameTemp._atbEscape[2] = true;
$gameTemp._atbEscape[0] = $gameTemp._atbEscape[1];
this.executeEscape_ATB();
};
} else {
if ($gameTemp._atbEscape[0] > 0) {
$gameTemp._atbEscape[0] -= 2;
if ($gameTemp._atbEscape <= 0) {
$gameTemp._atbEscape[0] = 0;
};
};
};
};
//==============================
// * execute Escape ATB
//==============================
BattleManager.executeEscape_ATB = function() {
this._escapeRatio = 100;
this.processEscape();
$gameTemp._battleEnd = true;
$gameTemp._atbBattleEnd = true;
this.selectionComAtbClear();
this._escaped = true;
this.clearATBValueParty();
};
//==============================
// * prepare Next Subject Cast
//==============================
BattleManager.prepareNextSubjectCast_ATB = function(battler) {
var item = battler._cast_atb[0];
if (battler.canUse(item)) {
this._atbBattler = battler;
this._atbBattler._atbItem = item;
} else {
battler.clearATB();
};
};
//==============================
// * prepare Next Subject ATB
//==============================
BattleManager.prepareNextSubject_ATB = function(battler) {
if (battler.isEnemy()) {
this.prepareActionEnemy(battler);
} else {
if (battler.isConfused()) {
this.prepareConfusionActionActor(battler);
} else if (this.needPrepareSelection(battler)) {
this.prepareCommandSelection(battler);
} else {;
if (battler._atbItem) {
this._atbBattler = battler;
battler._intTurn = true;
};
};
};
};
//==============================
// * prepare Confusion Action
//==============================
BattleManager.prepareConfusionActionActor = function(battler) {
battler.clearActions()
battler.makeActions();
var action = battler.currentAction();
if (action && action.item() && battler.canUse(action.item())) {
battler._atbItem = action.item()
this._atbBattler = battler;
} else {
battler.clearATB();
};
};
//==============================
// * need Prepare Action Actor
//==============================
BattleManager.needPrepareActionActor = function(action) {
if (!action) {return false};
if (!this._atbBattlerInput) {return false};
if (!this._atbBattlerInput[0]) {return false};
if (!this._atbBattlerInput[0].currentAction()) {return false};
if (!this._atbBattlerInput[0].currentAction().item()) {return false};
return true;
};
//==============================
// * selection Com Atb Cler
//==============================
BattleManager.selectionComAtbClear = function() {
var action = BattleManager.inputtingAction();
var actor = this.actor();
var active = false
if (this.needPrepareActionActor(action)) {
this.prepareActionActor(this._atbBattlerInput[0]);
active = true;
};
this._atbBattlerInput = [null,false];
this._actorIndex = -1;
if (actor) {
if (!this._atbBattler && active && !actor.isCasting()) {
this.updateBattlerFull_ATB(actor)
} else {
actor.setActionState('done');
};
};
};
//*******************************
// * start Input *(Overwritten)*
//*******************************
BattleManager.startInput = function() {
if (!this._atbBattler) {return};
this._atbBattler._intTurn = true;
this.startTurn();
};
//==============================
// * needPrepare Action Actor
//==============================
BattleManager.prepareActionActor = function(battler) {
var action = battler.currentAction();
if (action && action.item() && battler.canUse(action.item())) {
var castTime = Math.abs(action.item().speed);
if (castTime > 0 && battler.guardSkillId() != action.item().id) {
battler._cast_atb = [action.item(),0,castTime];
} else {
battler._atbItem = action.item();
};
} else {
battler.clearATB();
};
};
//==============================
// * prepare Action Enemy
//==============================
BattleManager.prepareActionEnemy = function(battler) {
battler.makeActions();
var action = battler.currentAction();
if (action && action.item() && battler.canUse(action.item())) {
battler._atbItem = action.item();
var castTime = Math.abs(action.item().speed)
if (castTime > 0 && battler.guardSkillId() != action.item().id) {
battler._cast_atb = [action.item(),0,castTime];
} else {
this._atbBattler = battler;
};
} else {
battler.clearATB();
};
};
//==============================
// * end Action
//==============================
var _mog_atb_bMngr_endAction = BattleManager.endAction;
BattleManager.endAction = function() {
_mog_atb_bMngr_endAction.call(this);
if (this._subject) {
this._subject.clearATB();
this._subject._wait_atb = 5;
};
$gameTemp._atbInTurn = false;
};
//*******************************
// * updateTurnEnd (Overwritten)*
//*******************************
BattleManager.updateTurnEnd = function() {
this._atbBattler = null;
this._phase = 'start'
$gameTemp._atbInTurn = false;
};
//*******************************
// * get Next Subject *(Overwritten)*
//*******************************
BattleManager.getNextSubject = function() {
for (;;) {
var battler = this._actionBattlers.shift();
if (!battler) {
return null;
}
if (battler.isBattleMember() && battler.isAlive() && battler._intTurn) {
return battler;
};
};
};
//*******************************
// * is Inputting *(Overwritten)*
//*******************************
BattleManager.isInputting = function() {
return this._atbBattlerInput[0];
};
//==============================
// * gget Available Actors
//==============================
BattleManager.getAvailableActors = function(index,value) {
var battler = null
if (value > 0) {
for (var i = index; i < $gameParty.battleMembers().length; i++) {
var actor = $gameParty.battleMembers()[i];
if (actor && actor.canInput() && this.actor() != actor) {
battler = actor;
break;
};
};
} else if (value < 0) {
for (var i = index; i >= 0; i--) {
var actor = $gameParty.battleMembers()[i];
if (actor && actor.canInput() && this.actor() != actor) {
battler = actor;
break;
};
};
};
return battler;
};
//==============================
// * change Actor Button
//==============================
BattleManager.changeActorButton_ATB = function(value) {
var currentActor = this.actor();
var battler = null;
var index = this._actorIndex;
var maxBatMembers = $gameParty.battleMembers().length
index += value;
if (index >= maxBatMembers) {
index = 0;
} else if (index < 0) {
index = maxBatMembers - 1;
};
if (value > 0) {
battler = this.getAvailableActors(index,value);
if (!battler) {
battler = this.getAvailableActors(0,value);
};
} else if (value < 0) {
battler = this.getAvailableActors(index,value);
if (!battler) {
battler = this.getAvailableActors(maxBatMembers - 1,value);
};
};
if (battler) {
currentActor.clearActions()
SoundManager.playCursor();
this.selectionComAtbClear()
this.prepareCommandSelection(battler);
currentActor.setActionState('undecided')
};
};
//==============================
// * prepare Command Selection
//==============================
BattleManager.setActorIndexATB = function(battler) {
for (var i = 0; i < $gameParty.members().length; i++) {
var actor = $gameParty.members()[i];
if (battler === actor) {return i};
};
return -1;
};
//==============================
// * prepare Command Selection
//==============================
BattleManager.prepareCommandSelection = function(battler) {
battler.clearActions()
this._atbBattlerInput = [battler,false];
this._actorIndex = this.setActorIndexATB(battler);
battler.makeActions();
battler._atbItem = null;
battler.setActionState('inputting');
};
//==============================
// * need Prepare Selection
//==============================
BattleManager.needPrepareSelection = function(battler) {
if (this._atbBattlerInput[0]) {return false};
if (!battler.canInput()) {return false};
if (battler._atbItem) {return false};
if (battler._intTurn) {return false};
return true
};
//==============================
// * end Battle
//==============================
var _mog_atb_btmngr_endBattle = BattleManager.endBattle;
BattleManager.endBattle = function(result) {
$gameTemp._atbForceHideWindows = true;
this.clearATBValueParty();
_mog_atb_btmngr_endBattle.call(this,result);
};
//==============================
// * can Use Item ATB
//==============================
BattleManager.canUseItemATB = function() {
if (!this._atbBattler._atbItem) {return false};
if (!this._atbBattler.canUse(this._atbBattler._atbItem)) {return false};
return true;
};
//*******************************
// * start Turn *(Overwritten)*
//*******************************
BattleManager.startTurn = function() {
$gameTemp._atbInTurn = false;
if (!this._atbBattler) {return};
if (!this.canUseItemATB()) {
this._atbBattler.clearATB();
this._atbBattler = null;
this._phase = 'start'
return;
};
this._phase = 'turn';
$gameTemp._atbInTurn = true;
this._actionBattlers = [this._atbBattler]
if (this._atbBattler.isActor()) {this._atbBattler.requestMotionRefresh()};
this._atbBattler.requestMotionRefresh()
this._logWindow.startTurn();
};
//==============================
// * can Event Turn ATB
//==============================
BattleManager.canUpdateEventTurnATB = function() {
if ($gameSystem._atbEventPhase[3]) {return false};
return true;
};
//==============================
// * Update Event Turn ATB
//==============================
BattleManager.updateEventTurnATB = function() {
$gameSystem._atbEventPhase[0]++;
if ($gameSystem._atbEventPhase[0] >= $gameSystem._atbEventPhase[1]) {
$gameSystem._atbEventPhase[0] = 0;
this.refreshEventPhase_ATB()
};
};
//==============================
// * can Event Phase
//==============================
BattleManager.canUpdateEventPhase = function() {
if ($gameTemp._battleEnd) {return false};
return $gameSystem._atbEventPhase[3];
};
//==============================
// * Update Event Phase
//==============================
BattleManager.updateEventPhase = function() {
var active = $gameSystem._atbEventPhase[3];
if (this.isActionForced()) {
this.processForcedAction();
$gameSystem._atbEventPhase[3] = true;
} else {
$gameSystem._atbEventPhase[3] = this.updateEventMain();
};
if (active != $gameSystem._atbEventPhase[3]) {
$gameTemp._atbWinData[1] = true;
$gameTemp._atbWaitTemp[0] = 10;
};
};
//==============================
// * refresh Event Phase ATB
//==============================
BattleManager.refreshEventPhase_ATB = function() {
$gameTroop.increaseTurn();
$gameSystem._atbEventPhase[3] = this.updateEventMain();
$gameTemp._atbWinData[0] = $gameSystem._atbEventPhase[3];
};
//==============================
// * display Start Messages
//==============================
var _mog_atb_BatMngr_displayStartMessages = BattleManager.displayStartMessages;
BattleManager.displayStartMessages = function() {
if (String(Moghunter.atb_SkipEmerge) == 'true') {return};
_mog_atb_BatMngr_displayStartMessages.call(this);
};
//==============================
// * processVictory
//==============================
var _mog_atbSprt_processVictory = BattleManager.processVictory;
BattleManager.processVictory = function() {
$gameTemp._battleEnd = true;
_mog_atbSprt_processVictory.call(this);
};
//==============================
// * processAbort
//==============================
var _mog_atbSprt_processAbort = BattleManager.processAbort;
BattleManager.processAbort = function() {
$gameTemp._battleEnd = true;
_mog_atbSprt_processAbort.call(this);
};
//==============================
// * processDefeat
//==============================
var _mog_atbSprt_processDefeat = BattleManager.processDefeat;
BattleManager.processDefeat = function() {
$gameTemp._battleEnd = true;
_mog_atbSprt_processDefeat.call(this);
};
//=============================================================================
//=============================================================================
// ** Scene Battle
//=============================================================================
//=============================================================================
//==============================
// * Start
//==============================
var _mog_atb_sBat_start = Scene_Battle.prototype.start;
Scene_Battle.prototype.start = function() {
_mog_atb_sBat_start.call(this);
BattleManager.prepareInitialATBValue();
$gameSystem._atbEventPhase[3] = BattleManager.updateEventMain();
};
//*******************************
// * Update Battle Process *(Overwritten)*
//*******************************
Scene_Battle.prototype.updateBattleProcess = function() {
if (Imported.MOG_EmergeMotion && $gameTemp.needSkipBattleProcessEM()) {
$gameTemp._emerging[1]--;
if ($gameTemp._emergingInt > 0) {$gameTemp._emergingInt--};
return;
};
this.updateCommandsATB();
if (!BattleManager.isAborting() || BattleManager.isBattleEnd()) {
if (BattleManager.canUpdateEventPhase()) {BattleManager.updateEventPhase()};
if (BattleManager.needUpdate_ATBBasic()) {
if (BattleManager.canUpdateEventTurnATB()) {BattleManager.updateEventTurnATB()};
BattleManager.update_ATB();
if ($gameSystem._atbMode[0] > 0 && !$gameTemp._atbInTurn) {
BattleManager.updateEscape_ATB(this._actorCommandWindow.active);
};
};
if ($gameSystem._atbMode[0] === 0) {
BattleManager.updateEscape_ATB(this._actorCommandWindow.active);
};
BattleManager.update();
if (this.canStartCommandSelection()) {
BattleManager._atbBattlerInput[1] = true
this.changeInputWindow()
};
};
if (Imported.MOG_BalloonActionName) {this.updateBalloonName()};
};
//==============================
// * update
//==============================
var _mog_atb_sBat_update = Scene_Battle.prototype.update;
Scene_Battle.prototype.update = function() {
_mog_atb_sBat_update.call(this);
this.updateAtbScBat();
};
//==============================
// * update Atb Sc Bat
//==============================
Scene_Battle.prototype.updateAtbScBat = function() {
if ($gameTemp._atbForceHideWindows) {this.forceHideWindows()};
if ($gameTemp._atbWinData[0]) {this.forceHideWindowsTemp()};
if ($gameTemp._atbWinData[1]) {this.loadWindowAtbData()};
if ($gameTemp._atbneedRefWind) {this.forceRefreshWindowATB()};
if ($gameTemp._atbWaitTemp[0] > 0) {$gameTemp._atbWaitTemp[0]--};
if ($gameTemp._atbWaitTemp[1] > 0) {$gameTemp._atbWaitTemp[1]--};
$gameSystem._atbMode[1] = !this.canUpdateAtbMode();
if (this._actorCommandWindow.isClosed() && this._actorCommandWindow.active && BattleManager.actor()) {
this._actorCommandWindow.open();
};
};
//==============================
// * force Refresh WindowATB
//==============================
Scene_Battle.prototype.forceRefreshWindowATB = function() {
$gameTemp._atbneedRefWind = false;
if (this._enemyWindow.active) {
if (this._enemyWindow.enemy().isDead()) {
this._enemyWindow.refresh()
this._enemyWindow.select(0);
if (!this._enemyWindow.enemy()) {
this.onEnemyCancel();
};
};
};
};
//==============================
// * can Update Atb Mode
//==============================
Scene_Battle.prototype.canUpdateAtbMode = function() {
if ($gameSystem._atbMode[0] === 0) {
if (this._partyCommandWindow.active) {return false};
if (this._actorCommandWindow.active) {return false};
if (this._actorWindow.active) {return false};
if (this._enemyWindow.active) {return false};
if (this._skillWindow.active) {return false};
if (this._itemWindow.active) {return false};
} else if ($gameSystem._atbMode[0] === 1) {
if (this._actorWindow.active) {return false};
if (this._enemyWindow.active) {return false};
if (this._skillWindow.active) {return false};
if (this._itemWindow.active) {return false};
} else if ($gameSystem._atbMode[0] === 2) {
if (this._skillWindow.active) {return false};
if (this._itemWindow.active) {return false};
};
return true;
};
//==============================
// * forceHideWindowsTemp
//==============================
Scene_Battle.prototype.forceHideWindowsTemp = function() {
$gameTemp._atbWinData[0] = false;
this.saveWindowAtbData();
this.disableAllWindowATB();
};
//==============================
// * create Display Objects
//==============================
var _mog_atb_sBat_createDisplayObjects = Scene_Battle.prototype.createDisplayObjects;
Scene_Battle.prototype.createDisplayObjects = function() {
_mog_atb_sBat_createDisplayObjects.call(this);
this.saveWindowAtbData();
};
//==============================
// * load Window Atb Data
//==============================
Scene_Battle.prototype.disableAllWindowATB = function() {
this._partyCommandWindow.visible = false;
this._partyCommandWindow.active = false;
this._actorCommandWindow.visible = false;
this._actorCommandWindow.active = false;
this._actorWindow.visible = false;
this._actorWindow.active = false;
this._enemyWindow.visible = false;
this._enemyWindow.active = false;
this._skillWindow.visible = false;
this._skillWindow.active = false;
this._itemWindow.visible = false;
this._itemWindow.active = false;
};
//==============================
// * save Window Atb Data
//==============================
Scene_Battle.prototype.saveWindowAtbData = function() {
$gameTemp._atbWinData[0] = false;
this._partyCommandWindowData = {};
this._partyCommandWindowData.visible = this._partyCommandWindow.visible;
this._partyCommandWindowData.active = this._partyCommandWindow.active;
this._actorCommandWindowData = {};
this._actorCommandWindowData.visible = this._actorCommandWindow.visible;
this._actorCommandWindowData.active = this._actorCommandWindow.active;
this._actorWindowData = {};
this._actorWindowData.visible = this._actorWindow.visible;
this._actorWindowData.active = this._actorWindow.active;
this._enemyWindowData = {};
this._enemyWindowData.visible = this._enemyWindow.visible;
this._enemyWindowData.active = this._enemyWindow.active;
this._skillWindowData = {};
this._skillWindowData.visible = this._skillWindow.visible;
this._skillWindowData.active = this._skillWindow.active;
this._itemWindowData = {};
this._itemWindowData.visible = this._itemWindow.visible;
this._itemWindowData.active = this._itemWindow.active;
};
//==============================
// * load Window Atb Data
//==============================
Scene_Battle.prototype.loadWindowAtbData = function() {
$gameTemp._atbWinData[1] = false;
if (!this._actorWindowData) {return};
this._partyCommandWindow.visible = this._partyCommandWindowData.visible;
this._partyCommandWindow.active = this._partyCommandWindowData.active;
this._actorCommandWindow.visible = this._actorCommandWindowData.visible;
this._actorCommandWindow.active = this._actorCommandWindowData.active;
if (this._actorCommandWindow.active) {
this._actorCommandWindow.open();
};
this._actorWindow.visible = this._actorWindowData.visible;
this._actorWindow.active = this._actorWindowData.active;
this._enemyWindow.visible = this._enemyWindowData.visible;
this._enemyWindow.active = this._enemyWindowData.active;
this._skillWindow.visible = this._skillWindowData.visible;
this._skillWindow.active = this._skillWindowData.active;
this._itemWindow.visible = this._itemWindowData.visible;
this._itemWindow.active = this._itemWindowData.active;
};
//==============================
// * force Hide Windows
//==============================
Scene_Battle.prototype.forceHideWindows = function() {
$gameTemp._atbForceHideWindows = false;
this._partyCommandWindow.close();
this._partyCommandWindow.active = false;
this._actorCommandWindow.close();
this._actorCommandWindow.active = false;
this._actorWindow.hide();
this._actorWindow.active = false;
this._enemyWindow.hide();
this._enemyWindow.active = false;
this._skillWindow.hide();
this._skillWindow.active = false;
this._itemWindow.hide();
this._itemWindow.active = false;
};
//==============================
// * can Start Command Selection
//==============================
Scene_Battle.prototype.canStartCommandSelection = function() {
if (!BattleManager._atbBattlerInput[0]) {return false};
if (BattleManager._atbBattlerInput[1]) {return false};
return true;
};
//==============================
// * update Commands ATB
//==============================
Scene_Battle.prototype.updateCommandsATB = function() {
if (this._actorCommandWindow.active) {
if (Input.isTriggered(Moghunter.atb_NextActorLeft)) {
BattleManager.changeActorButton_ATB(1);
} else if (Input.isTriggered(Moghunter.atb_NextActorRight)) {
BattleManager.changeActorButton_ATB(-1);
};
};
};
//*******************************
// * Select Next Command *(Overwritten)*
//*******************************
Scene_Battle.prototype.selectNextCommand = function() {
BattleManager.selectionComAtbClear();
this.endCommandSelection();
};
//==============================
// * create Actor Command Window
//==============================
var _mog_atb_createActorCommandWindow = Scene_Battle.prototype.createActorCommandWindow;
Scene_Battle.prototype.createActorCommandWindow = function() {
_mog_atb_createActorCommandWindow.call(this)
this._actorCommandWindow.setHandler('cancel', null);
};
//=============================================================================
//=============================================================================
// ** SPRITES
//=============================================================================
//=============================================================================
//==============================
// * load ATB Icon
//==============================
ImageManager.loadATBIcon = function(filename) {
return this.loadBitmap('img/atb/', filename, 0, true);
};
//=============================================================================
// ** Window Battle Actor
//=============================================================================
//==============================
// * Update
//==============================
var _mog_atb_wBatActor_update = Window_BattleActor.prototype.update;
Window_BattleActor.prototype.update = function() {
if (!BattleManager.actor()) {return};
_mog_atb_wBatActor_update.call(this);
};
//=============================================================================
// ** Window Battle Enemy
//=============================================================================
//==============================
// * Update
//==============================
var _mog_atb_wBatEnemy_update = Window_BattleEnemy.prototype.update;
Window_BattleEnemy.prototype.update = function() {
if (!BattleManager.actor()) {return};
_mog_atb_wBatEnemy_update.call(this);
};
//=============================================================================
// ** Window Actor Command
//=============================================================================
//==============================
// * Update
//==============================
var _mog_atb_wActCom_processOk = Window_ActorCommand.prototype.processOk;
Window_ActorCommand.prototype.processOk = function() {
if (!BattleManager.actor()) {return};
if ($gameTroop.isAllDead()) {return};
_mog_atb_wActCom_processOk.call(this);
};
//*******************************
// * cursor Page Down *(Overwritten)*
//*******************************
Window_ActorCommand.prototype.cursorPagedown = function() {
};
//*******************************
// * cursor Page UP *(Overwritten)*
//*******************************
Window_ActorCommand.prototype.cursorPageup = function() {
};
//=============================================================================
// ** Sprite Actor
//=============================================================================
//==============================
// * is Moving
//==============================
Sprite_Actor.prototype.isMoving = function() {
if (this._actor && !this._actor._intTurn) {return false};
return this._movementDuration > 0;
};
//=============================================================================
// ** Scene Base
//=============================================================================
//==============================
// ** create Hud Field
//==============================
Scene_Base.prototype.createHudField = function() {
this._hudField = new Sprite();
this._hudField.z = 10;
this.addChild(this._hudField);
};
//==============================
// ** sort MZ
//==============================
Scene_Base.prototype.sortMz = function() {
this._hudField.children.sort(function(a, b){return a.mz-b.mz});
};
//==============================
// * Create Escape Gauge ATB
//==============================
Scene_Base.prototype.createEscapeGaugeATB = function() {
this._escapeGaugeATB = new EscapeGaugeATB();
this._escapeGaugeATB.mz = 140;
this._hudField.addChild(this._escapeGaugeATB);
};
//=============================================================================
// ** Scene Battle
//=============================================================================
//==============================
// ** create Spriteset
//==============================
var _mog_atbEscapeGauge_sbattle_createSpriteset = Scene_Battle.prototype.createSpriteset;
Scene_Battle.prototype.createSpriteset = function() {
_mog_atbEscapeGauge_sbattle_createSpriteset.call(this);
if (!this._hudField) {this.createHudField()};
this.createEscapeGaugeATB();
this.sortMz();
};
//=============================================================================
// ** EscapeGaugeATB
//=============================================================================
function EscapeGaugeATB() {
this.initialize.apply(this, arguments);
}
EscapeGaugeATB.prototype = Object.create(Sprite.prototype);
EscapeGaugeATB.prototype.constructor = EscapeGaugeATB;
//==============================
// * Initialize
//==============================
EscapeGaugeATB.prototype.initialize = function() {
Sprite.prototype.initialize.call(this);
this.setup();
this.createSprites();
};
//==============================
// * Setup
//==============================
EscapeGaugeATB.prototype.setup = function() {
this.opacity = 0;
this.x = Moghunter.atb_EscapeGaugeX;
this.y = Moghunter.atb_EscapeGaugeY;
};
//==============================
// * create Sprites
//==============================
EscapeGaugeATB.prototype.createSprites = function() {
this.createLayout();
this.createGauge();
};
//==============================
// * create Layout
//==============================
EscapeGaugeATB.prototype.createLayout = function() {
this._layout = new Sprite(ImageManager.loadATBIcon("Escape_A"));
this.addChild(this._layout);
};
//==============================
// * create Gauge
//==============================
EscapeGaugeATB.prototype.createGauge = function() {
this._gauge = new Sprite(ImageManager.loadATBIcon("Escape_B"));
this._gauge.x = Moghunter.atb_EscapeGaugeX2;
this._gauge.y = Moghunter.atb_EscapeGaugeY2;
this.addChild(this._gauge);
};
//==============================
// * Update Gauge
//==============================
EscapeGaugeATB.prototype.updateGauge = function() {
var cw = this._gauge.bitmap.width;
var ch = this._gauge.height;
var rg = cw * $gameTemp._atbEscape[0] / $gameTemp._atbEscape[1];
this._gauge.setFrame(0,0,rg,ch);
};
//==============================
// * need Fade
//==============================
EscapeGaugeATB.prototype.needFade = function() {
if ($gameTemp._atbEscape[0] <= 0) {return true};
if ($gameMessage.isBusy()) {return true};
if ($gameTemp._battleEnd) {return true};
return false;
};
//==============================
// * Update Visible
//==============================
EscapeGaugeATB.prototype.updateVisible = function() {
if (this.needFade()) {
this.opacity -= 10;
} else {
this.opacity += 10;
};
};
//==============================
// * Update
//==============================
EscapeGaugeATB.prototype.update = function() {
Sprite.prototype.update.call(this);
this.updateVisible();
this.updateGauge();
};