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

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

//=============================================================================
// 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();
};