//============================================================================= // Yanfly Engine Plugins - Battle System - Active Turn Battle // YEP_X_BattleSysATB.js //============================================================================= var Imported = Imported || {}; Imported.YEP_X_BattleSysATB = true; var Yanfly = Yanfly || {}; Yanfly.ATB = Yanfly.ATB || {}; Yanfly.ATB.version = 1.28; //============================================================================= /*: * @plugindesc v1.28 (Requires YEP_BattleEngineCore.js) Add ATB (Active * Turn Battle) into your game using this plugin! * @author Yanfly Engine Plugins * * @param ---ATB Settings--- * @default * * @param Per Tick * @parent ---ATB Settings--- * @desc This is how much speed is gained per tick. * @default user.agi * * @param Initial Speed * @parent ---ATB Settings--- * @desc The speed position of the battler at the start of battle. * This is a formula processed as an eval. * @default 0 * * @param Full Gauge * @parent ---ATB Settings--- * @desc The target speed for an ATB gauge to be full. * This is a formula processed as an eval. * @default Math.max(5000, BattleManager.highestBaseAgi() * 100) * * @param Charge Gauge * @parent ---ATB Settings--- * @desc The wind-up time after selecting an action. * This is a formula processed as an eval. * @default Math.max(2000, BattleManager.highestBaseAgi() * 20) * * @param Pre-Emptive Bonuses * @parent ---ATB Settings--- * @type number * @decimals 1 * @desc How much of the ATB bar do you want filled up for an * ATB pre-emptive bonus from 0 to 1. * @default 0.8 * * @param Surprise Bonuses * @parent ---ATB Settings--- * @type number * @decimals 1 * @desc How much of the ATB bar do you want filled up for an * ATB surprise bonus from 0 to 1. * @default 0.8 * * @param ---Escape--- * @default * * @param Escape Ratio * @parent ---Escape--- * @desc How ATB calculates escape ratios. * Default: 0.5 * $gameParty.agility() / $gameTroop.agility() * @default 0.125 * $gameParty.agility() / $gameTroop.agility() * * @param Fail Escape Boost * @parent ---Escape--- * @type number * @decimals 3 * @desc Each time the player fails escape, increase the success * rate by this much. This is a formula. Default: 0.1 * @default 0.025 * * @param ---Turn--- * @default * * @param Full Turn * @parent ---Escape--- * @desc This is how many ticks to equal a full battle turn. * This is a formula processed as an eval. * @default Math.min(200, BattleManager.lowestBaseAgi() * 8) * * @param Flash Enemy * @parent ---Escape--- * @type boolean * @on Flash * @off Don't Flash * @desc Flash enemies when they start charging their skills? * NO - false YES - true * @default true * * @param ---Rubberband--- * @default * * @param Enable Rubberband * @parent ---Rubberband--- * @type boolean * @on Enable * @off Disable * @desc This is an auto-balance mechanic for AGI. * Disable - false Enable - true * @default true * * @param Minimum Speed * @parent ---Rubberband--- * @desc If rubberbanding is enabled, what is the minimum * speed increase? This is a formula. * @default 0.5 * BattleManager.highestBaseAgi() * * @param Maximum Speed * @parent ---Rubberband--- * @desc If rubberbanding is enabled, what is the maximum * speed increase? This is a formula. * @default 1.5 * BattleManager.highestBaseAgi() * * @param ---Sound--- * @default * * @param Ready Sound * @parent ---Sound--- * @type file * @dir audio/se/ * @require 1 * @desc This is the sound played when the battler is ready. * @default Decision1 * * @param Ready Volume * @parent ---Sound--- * @type number * @min 0 * @max 100 * @desc This is the volume of the ready sound. * @default 90 * * @param Ready Pitch * @parent ---Sound--- * @type number * @min 0 * @desc This is the pitch of the ready sound. * @default 120 * * @param Ready Pan * @parent ---Sound--- * @type number * @min -100 * @max 100 * @desc This is the pan of the ready sound. * @default 0 * * @param ---Options--- * @default * * @param ATB Speed Text * @parent ---Options--- * @desc Text used for ATB speed in options window. * @default ATB Speed * * @param Default ATB Speed * @parent ---Options--- * @type number * @min 0 * @max 10 * @desc Default speed at which the gauges fill up. * 1 - slowest 10 - fastest * @default 10 * * @param ---Windows--- * @default * * @param Lock Status Window * @parent ---Windows--- * @type boolean * @on Lock Status * @off Don't Lock * @desc While ATB is active, lock the status window from moving? * OFF - false ON - true * @default true * * @param Gauge Style * @parent ---Windows--- * @type select * @option None * @value 0 * @option Under Name * @value 1 * @option Right Side * @value 2 * @desc This is the style of the ATB gauges: * 0 - None 1 - Under Name 2 - Right Side * @default 1 * * @param Gauge Text * @parent ---Windows--- * @desc If style 2 is used, this is the text displayed. * @default Turn * * @param Gauge Text Align * @parent ---Windows--- * @type combo * @option left * @option center * @option right * @desc If style 2 is used, this is the text alignment. * left center right * @default center * * @param ATB Gauge Color 1 * @parent ---Windows--- * @type number * @min 0 * @max 31 * @desc The 1st gauge color of the ATB gauge as it loads up. * @default 13 * * @param ATB Gauge Color 2 * @parent ---Windows--- * @type number * @min 0 * @max 31 * @desc The 2nd gauge color of the ATB gauge as it loads up. * @default 5 * * @param Slow Gauge Color 1 * @parent ---Windows--- * @type number * @min 0 * @max 31 * @desc 1st gauge color of the ATB gauge if actor is slowed. * @default 12 * * @param Slow Gauge Color 2 * @parent ---Windows--- * @type number * @min 0 * @max 31 * @desc 2nd gauge color of the ATB gauge if actor is slowed. * @default 4 * * @param Fast Gauge Color 1 * @parent ---Windows--- * @type number * @min 0 * @max 31 * @desc 1st gauge color of the ATB gauge if actor is hasted. * @default 26 * * @param Fast Gauge Color 2 * @parent ---Windows--- * @type number * @min 0 * @max 31 * @desc 2nd gauge color of the ATB gauge if actor is hasted. * @default 27 * * @param Stop Gauge Color 1 * @parent ---Windows--- * @type number * @min 0 * @max 31 * @desc 1st gauge color of the ATB gauge if actor is stopped. * @default 7 * * @param Stop Gauge Color 2 * @parent ---Windows--- * @type number * @min 0 * @max 31 * @desc 2nd gauge color of the ATB gauge if actor is stopped. * @default 8 * * @param Full Gauge Color 1 * @parent ---Windows--- * @type number * @min 0 * @max 31 * @desc The 1st gauge color of the ATB gauge when full. * @default 14 * * @param Full Gauge Color 2 * @parent ---Windows--- * @type number * @min 0 * @max 31 * @desc The 2nd gauge color of the ATB gauge when full. * @default 6 * * @param Charge Gauge Color 1 * @parent ---Windows--- * @type number * @min 0 * @max 31 * @desc The 1st gauge color of the ATB gauge when charging. * @default 2 * * @param Charge Gauge Color 2 * @parent ---Windows--- * @type number * @min 0 * @max 31 * @desc The 2nd gauge color of the ATB gauge when charging. * @default 10 * * @help * ============================================================================ * Introduction * ============================================================================ * * The Battle System - Active Turn Battle plugin is an extension plugin for * Yanfly Engine Plugins' Battle Engine Core. This extension plugin will not * work without the main plugin. * * To use the ATB system, go to the Battle Engine Core plugin and change the * 'Default System' setting in the parameters to 'atb'. * * The Active Turn Battle system functions in such where battlers will have a * new gauge in battle functioning as their turn gauge. As time goes by without * anything happening such as actions, menu selection, etc, the gauge fills up. * Once it is full, the battler can commit to an action. * * After committing to an action, the battler charges the skill before using it * in battle to either attack an enemy, heal an ally, etc. Upon finishing the * action, the gauge drains to empty and the battler must charge it up again. * * This is a battle system where agility plays an important factor in the * progress of battle where higher agility values give battlers more advantage * and lower agility values give battlers less advantage. * * ============================================================================ * Plugin Commands * ============================================================================ * * To change your battle system to Active Turn Battle if it isn't the default * battle system, you can use the following Plugin Command: * * Plugin Command: * setBattleSys ATB Sets battle system to Active Turn Battle. * setBattleSys DTB Sets battle system to Default Turn Battle. * * Using the above Plugin Commands, you can toggle between the Default Battle * System and Active Turn Battle! * * ============================================================================ * Notetags * ============================================================================ * * The following are notetags that pertain to and affect the ATB system. * * Skill and Item Notetags: * * text * text * * For those planning on using multiple battle systems, sometimes you may * have your skills perform differently while using ATB. If so, using this * notetag will allow skills and items to display different help text while * ATB is enabled. * * * * * Usable only during ATB. This sets the target's current speed or charge to * x. If 'speed' or 'charge' is used, it will only affect those gauges while * in the respective phase. If 'gauge' is used, it will affect either. * * * * * Usable only during ATB. This sets the target's current speed or charge to * x% of the whole gauge. If 'speed' or 'charge' is used, it will only affect * those gauges while in the respective phase. If 'gauge' is used, it will * affect either. * * or * or * or * Usable only during ATB. This increases or decreases the target's current * speed or charge by x. If 'speed' or 'charge' is used, it will only affect * those gauges while in the respective phase. If 'gauge' is used, it will * affect either. * * or * or * or * Usable only during ATB. This increases or decreases the target's current * speed or charge by x% of the whole gauge. If 'speed' or 'charge' is used, * it will only affect those gauges while in the respective phase. If 'gauge' * is used, it will affect either. * * * * This will set the skill/item user's ATB speed value to x or x%. If 'x' is * used, this will be the exact ATB value. If x% is used, this will be the * percentage of the ATB gauge that it will be at. * * * * This will give the skill the ability to interrupt and cancel out the * target's current action while it is in the charging phase. If the 'x%' * notetag version is used, it will have a x% chance of success. * * * This causes the skill to be unable to be interrupted and prevent the * battler's ATB to reset. * * Actor, Class, Enemy, Weapon, Armor, and State Notetags: * * * Usable only during ATB. This will give the actor, class, enemy, weapon, * armor, or state the property of starting battle with X ATB Speed or X% of * the ATB gauge filled up. * * * * Usable only during ATB. This will give the actor, class, enemy, weapon, * armor, or state the property of starting a turn with X ATB Speed or X% of * the ATB gauge filled up. * * ============================================================================ * Lunatic Mode - Conditional ATB Speed and Conditional ATB Charge * ============================================================================ * * For those who have a bit of JavaScript experience and would like to have * more unique ways of performing ATB speed and charge changes, you can use the * following notetags: * * Skill and Item Notetags: * * speed = x; * charge = x; * * You can omit speed and/or charge. Whatever you set 'speed' to will change * the ATB speed of the target. If the target is charging, 'charge' will * cause the target's charge to change to that value. To make things more * simple, 'max' will be the full gauge value. * * Here is an example: * * * speed = target.hp / target.mhp * max; * charge = target.hp / target.mhp * max; * * The above code will set the user's current ATB gauge to position equal to * the target's HP ratio. If the target has 25% HP, the ATB gauge will go to * 25% full for the target. * * --- --- --- --- --- * * * speed = x; * * This is the ATB set after the user has used the skill/item and the custom * ATB amount you want the user to be at after. 'max' be the value of the * full gauge value. Whatever you set 'speed', the user's ATB speed value * will change to that much: * * Here is an example: * * * speed = user.mp / user.mmp * max; * * The above code will set the user's ATB gauge after using the skill/item to * equal the user's MP ratio. If the user has 25% MP, the ATB gauge will go * to 25% full for the user. * * --- --- --- --- --- * * * interrupt = true; * * This will allow you to set custom conditions for interrupting a target. * Keep in mind that even though it is a custom condition, it still requires * the target to be in the charging phase for the interrupt to work. By * setting 'interrupt = true', the target will be interrupted. * * Here is an example: * * * if (user.hp > target.hp) { * interrupt = true; * } * * The above code will state that if the user has more HP than the target, * the target will be interrupted. * * ============================================================================ * Yanfly Engine Plugins - Battle Engine Extension - Action Sequence Commands * ============================================================================ * * You can make use of these extra ATB related action sequences. * *============================================================================= * ATB CHARGE: target, X * ATB CHARGE: target, X% * ATB CHARGE: targets, +X * ATB CHARGE: targets, +X% *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usable only for ATB. Sets the target's ATB charge to X or X%. This only * applies when the target is in the ATB charge phase. This will not affect * the user to prevent mechanical issues. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usage Example: atb charge: targets, +5000 * atb charge: target, -50% *============================================================================= * *============================================================================= * ATB GAUGE: target, X * ATB GAUGE: target, X% * ATB GAUGE: targets, +X * ATB GAUGE: targets, +X% *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usable only for ATB. Sets the target's ATB speed or charge (whichever the * user is currently filling up) to X or X%. This only. This will not affect * the user to prevent mechanical issues. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usage Example: atb gauge: targets, +5000 * atb gauge: target, -50% *============================================================================= * *============================================================================= * ATB INTERRUPT: target *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usable only for ATB. If the target is in the charging phase, interrupt it. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usage Example: atb interrupt: targets *============================================================================= * *============================================================================= * ATB SPEED: target, X * ATB SPEED: target, X% * ATB SPEED: targets, +X * ATB SPEED: targets, +X% *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usable only for ATB. Sets the target's ATB speed to X or X%. This only * applies when the target is filling up its ATB gauge. This will not affect * the user to prevent mechanical issues. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usage Example: atb speed: targets, +5000 * atb speed: target, -50% *============================================================================= * * ============================================================================ * Options Core Settings - Adding the New Options * ============================================================================ * * If you are using YEP_OptionsCore.js, you can add a new Option using this * plugin. Here's the following code/parameter settings you can use with it. * * --------- * Settings: * --------- * * Name: * \i[87]ATB Speed * * Help Description: * Determines how fast the ATB Gauge fills up during battle. * * Symbol: * atbSpeed * * Show/Hide: * if (Imported.YEP_X_BattleSysATB) { * show = $gameSystem.getBattleSystem() === 'atb'; * } else { * show = false; * } * * Enable: * enabled = true; * * Ext: * ext = 0; * * ---------- * Functions: * ---------- * * Make Option Code: * this.addCommand(name, symbol, enabled, ext); * * Draw Option Code: * var rect = this.itemRectForText(index); * var statusWidth = this.statusWidth(); * var titleWidth = rect.width - statusWidth; * this.resetTextColor(); * this.changePaintOpacity(this.isCommandEnabled(index)); * this.drawOptionsName(index); * var value = this.getConfigValue(symbol); * var rate = value / 10; * var gaugeColor1 = this.textColor(13); * var gaugeColor2 = this.textColor(5); * this.drawOptionsGauge(index, rate, gaugeColor1, gaugeColor2); * this.drawText(this.statusText(index), titleWidth, rect.y, statusWidth, 'center'); * * Process OK Code: * var index = this.index(); * var symbol = this.commandSymbol(index); * var value = this.getConfigValue(symbol); * value += 1; * if (value > 10) value = 1; * this.changeValue(symbol, value); * * Cursor Right Code: * var index = this.index(); * var symbol = this.commandSymbol(index); * var value = this.getConfigValue(symbol); * value += 1; * if (value > 10) value = 1; * this.changeValue(symbol, value); * * Cursor Left Code: * var index = this.index(); * var symbol = this.commandSymbol(index); * var value = this.getConfigValue(symbol); * value -= 1; * if (value < 1) value = 10; * this.changeValue(symbol, value); * * Default Config Code: * // Empty. Provided by this plugin. * * Save Config Code: * // Empty. Provided by this plugin. * * Load Config Code: * // Empty. Provided by this plugin. * * ============================================================================ * Changelog * ============================================================================ * * Version 1.28: * - Bypass the isDevToolsOpen() error when bad code is inserted into a script * call or custom Lunatic Mode code segment due to updating to MV 1.6.1. * * Version 1.27: * - Compatibility update with YEP_OptionsCore.js. * * Version 1.26: * - Updated for RPG Maker MV version 1.5.0. * * Version 1.25: * - Lunatic Mode fail safes added. * * Version 1.24: * - During action end, a single tick will be forced to occur to prevent clash * amongst actors with similar AGI values and make tick values more unique. * * Version 1.23: * - Timing has been changed for states that update turns at Turn Start. Now, * the states will update prior to the actor's command box opening or the enemy * make a decision on which action it will use. * * Version 1.22: * - Updated for RPG Maker MV version 1.1.0. * * Version 1.21: * - Counterattacks no longer cause interrupts if attack actions have interrupt * functionality. * * Version 1.20: * - Updated plugin to update the AI more accordingly with Battle AI Core. * * Version 1.19: * - Fixed a bug where forced actions clear out an action's effects before the * turn is over, making post-turn effects to not occur. * * Version 1.18: * - Fixed a bug where changing back and forth between the Fight/Escape window * would prompt on turn start effects. * * Version 1.17: * - Made a mechanic change so that turn 0 ends immediately upon battle start * rather than requiring a full turn to end. * * Version 1.16: * - Added a fail safe setting up ATB Charges when the Cannot Move restriction * is imposed upon an actor. * * Verison 1.15: * - Implemented a Forced Action queue list. This means if a Forced Action * takes place in the middle of an action, the action will resume after the * forced action finishes rather than cancels it out like MV does. * * Version 1.14: * - Added a speed position check for Instant Casts to maintain order position. * * Version 1.13: * - Fixed a bug that doesn't update state turns properly. * - Removed 'Turn Structure parameter' as it goes against the nature of a * Tick-Based battle system. * * Version 1.12: * - Added speed rebalance formulas for tick-based systems (innate). * * Version 1.11: * - Fixed a bug that would still allow battlers to perform actions even if the * actions got sealed midway through charging the action. * * Version 1.10: * - Fixed a bug that would cause AutoBattlers to stall if they got added into * the party mid-battle. * * Version 1.09: * - Mechanic change for states that update on Action End to end at the end of * a battler's turn instead of at the start. * * Version 1.08a: * - Fixed a bug that crashed the game when enemies were confused. * - Preparation for Enemy ATB Gauges. * * Version 1.07: * - Added 'Flash Enemy' to plugin parameters to flash the enemy once when it * starts charging a skill. * * Version 1.06: * - Added pre-emptive and surprise attack mechanic plugin parameters! * * Version 1.05: * - Fixed a bug with Forced Actions locking out the battle. * * Version 1.04: * - Added the 'Per Tick' parameter for you to adjust the formula that governs * the speed rate at which the ATB gauge fills up. * * Version 1.03: * - Fixed a bug that caused the ATB Gauge appear slow with maxed AGI. * * Version 1.02c: * - Fixed a bug with the ATB GAUGE and ATB CHARGE action sequences. * - Fixed a bug with battlers still getting a turn after the battle is over. * - Fixed a bug that prevented escaping. * - Added math fail safes for calculating ATB charging. * * Version 1.01: * - Fixed a bug with escaping causing battlers to go into infinite lock. * - Fixed a bug with multiple victory messages. * - Added fail safe to prevent infinite charging. * - Added . * * Version 1.00: * - It's doooooooone! */ //============================================================================= if (Imported.YEP_BattleEngineCore) { if (Yanfly.BEC.version && Yanfly.BEC.version >= 1.42) { //============================================================================= // Parameter Variables //============================================================================= Yanfly.Parameters = PluginManager.parameters('YEP_X_BattleSysATB'); Yanfly.Param = Yanfly.Param || {}; Yanfly.Param.ATBPerTick = String(Yanfly.Parameters['Per Tick']); Yanfly.Param.ATBInitSpeed = String(Yanfly.Parameters['Initial Speed']); Yanfly.Param.ATBFullGauge = String(Yanfly.Parameters['Full Gauge']); Yanfly.Param.ATBChargeGauge = String(Yanfly.Parameters['Charge Gauge']); Yanfly.Param.ATBPreEmptive = Number(Yanfly.Parameters['Pre-Emptive Bonuses']); Yanfly.Param.ATBSurprise = Number(Yanfly.Parameters['Surprise Bonuses']); Yanfly.Param.ATBEscapeRatio = String(Yanfly.Parameters['Escape Ratio']); Yanfly.Param.ATBEscapeBoost = String(Yanfly.Parameters['Fail Escape Boost']); Yanfly.Param.ATBFullTurn = String(Yanfly.Parameters['Full Turn']); Yanfly.Param.ATBTurnStructure = false; Yanfly.Param.ATBFlashEnemy = eval(String(Yanfly.Parameters['Flash Enemy'])); Yanfly.Param.ATBRubberband = String(Yanfly.Parameters['Enable Rubberband']); Yanfly.Param.ATBMinSpeed = String(Yanfly.Parameters['Minimum Speed']); Yanfly.Param.ATBMaxSpeed = String(Yanfly.Parameters['Maximum Speed']); Yanfly.Param.ATBReadyName = String(Yanfly.Parameters['Ready Sound']); Yanfly.Param.ATBReadyVol = Number(Yanfly.Parameters['Ready Volume']); Yanfly.Param.ATBReadyPitch = Number(Yanfly.Parameters['Ready Pitch']); Yanfly.Param.ATBReadyPan = Number(Yanfly.Parameters['Ready Pan']); Yanfly.Param.ATBOptionSpeedTx = String(Yanfly.Parameters['ATB Speed Text']); Yanfly.Param.ATBDefaultSpeed = Number(Yanfly.Parameters['Default ATB Speed']); Yanfly.Param.ATBLockStatusWin = String(Yanfly.Parameters['Lock Status Window']); Yanfly.Param.ATBGaugeStyle = Number(Yanfly.Parameters['Gauge Style']); Yanfly.Param.ATBGaugeText = String(Yanfly.Parameters['Gauge Text']); Yanfly.Param.ATBGaugeAlign = String(Yanfly.Parameters['Gauge Text Align']); Yanfly.Param.ATBColorAtb1 = Number(Yanfly.Parameters['ATB Gauge Color 1']); Yanfly.Param.ATBColorAtb2 = Number(Yanfly.Parameters['ATB Gauge Color 2']); Yanfly.Param.ATBColorSlow1 = Number(Yanfly.Parameters['Slow Gauge Color 1']); Yanfly.Param.ATBColorSlow2 = Number(Yanfly.Parameters['Slow Gauge Color 2']); Yanfly.Param.ATBColorFast1 = Number(Yanfly.Parameters['Fast Gauge Color 1']); Yanfly.Param.ATBColorFast2 = Number(Yanfly.Parameters['Fast Gauge Color 2']); Yanfly.Param.ATBColorStop1 = Number(Yanfly.Parameters['Stop Gauge Color 1']); Yanfly.Param.ATBColorStop2 = Number(Yanfly.Parameters['Stop Gauge Color 2']); Yanfly.Param.ATBColorFull1 = Number(Yanfly.Parameters['Full Gauge Color 1']); Yanfly.Param.ATBColorFull2 = Number(Yanfly.Parameters['Full Gauge Color 2']); Yanfly.Param.ATBColorChar1 = Number(Yanfly.Parameters['Charge Gauge Color 1']); Yanfly.Param.ATBColorChar2 = Number(Yanfly.Parameters['Charge Gauge Color 2']); //============================================================================= // DataManager //============================================================================= Yanfly.ATB.DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded; DataManager.isDatabaseLoaded = function() { if (!Yanfly.ATB.DataManager_isDatabaseLoaded.call(this)) return false; if (!Yanfly._loaded_YEP_X_BattleSysATB) { this.processATBNotetags1($dataSkills); this.processATBNotetags1($dataItems); this.processATBNotetags2($dataActors); this.processATBNotetags2($dataClasses); this.processATBNotetags2($dataEnemies); this.processATBNotetags2($dataWeapons); this.processATBNotetags2($dataArmors); this.processATBNotetags2($dataStates); Yanfly._loaded_YEP_X_BattleSysATB = true; } return true; }; DataManager.processATBNotetags1 = function(group) { var noteA1 = /<(?:ATB GAUGE):[ ](\d+)>/i; var noteA2 = /<(?:ATB GAUGE):[ ]([\+\-]\d+)>/i; var noteA3 = /<(?:ATB GAUGE):[ ](\d+)([%%])>/i; var noteA4 = /<(?:ATB GAUGE):[ ]([\+\-]\d+)([%%])>/i; var noteB1 = /<(?:ATB SPEED):[ ](\d+)>/i; var noteB2 = /<(?:ATB SPEED):[ ]([\+\-]\d+)>/i; var noteB3 = /<(?:ATB SPEED):[ ](\d+)([%%])>/i; var noteB4 = /<(?:ATB SPEED):[ ]([\+\-]\d+)([%%])>/i; var noteC1 = /<(?:ATB CHARGE):[ ](\d+)>/i; var noteC2 = /<(?:ATB CHARGE):[ ]([\+\-]\d+)>/i; var noteC3 = /<(?:ATB CHARGE):[ ](\d+)([%%])>/i; var noteC4 = /<(?:ATB CHARGE):[ ]([\+\-]\d+)([%%])>/i; var noteS1 = /<(?:AFTER ATB):[ ](\d+)>/i; var noteS2 = /<(?:AFTER ATB):[ ](\d+)([%%])>/i; var noteI1 = /<(?:ATB INTERRUPT)>/i; var noteI2 = /<(?:ATB INTERRUPT):[ ](\d+)([%%])>/i; var noteI3 = /<(?:CANNOT ATB INTERRUPT)>/i; for (var n = 1; n < group.length; n++) { var obj = group[n]; var notedata = obj.note.split(/[\r\n]+/); obj.setATBGaugeFlat = undefined; obj.addATBGaugeFlat = 0; obj.setATBGaugeRate = undefined; obj.addATBGaugeRate = 0.0; obj.setATBSpeedFlat = undefined; obj.addATBSpeedFlat = 0; obj.setATBSpeedRate = undefined; obj.addATBSpeedRate = 0.0; obj.setATBChargeFlat = undefined; obj.addATBChargeFlat = 0; obj.setATBChargeRate = undefined; obj.addATBChargeRate = 0.0; obj.afterATBFlat = undefined; obj.afterATBRate = undefined; obj.atbInterruptRate = 0; obj.cannotAtbInterrupt = false; var evalMode = 'none'; obj.atbEval = ''; obj.atbAfterEval = ''; obj.atbInterruptEval = ''; obj.atbHelp = undefined; for (var i = 0; i < notedata.length; i++) { var line = notedata[i]; if (line.match(noteA1)) { obj.setATBGaugeFlat = parseInt(RegExp.$1); } else if (line.match(noteA2)) { obj.addATBGaugeFlat = parseInt(RegExp.$1); } else if (line.match(noteA3)) { obj.setATBGaugeRate = parseFloat(RegExp.$1 * 0.01); } else if (line.match(noteA4)) { obj.addATBGaugeRate = parseFloat(RegExp.$1 * 0.01); } else if (line.match(noteB1)) { obj.setATBSpeedFlat = parseInt(RegExp.$1); } else if (line.match(noteB2)) { obj.addATBSpeedFlat = parseInt(RegExp.$1); } else if (line.match(noteB3)) { obj.setATBSpeedRate = parseFloat(RegExp.$1 * 0.01); } else if (line.match(noteB4)) { obj.addATBSpeedRate = parseFloat(RegExp.$1 * 0.01); } else if (line.match(noteC1)) { obj.setATBChargeFlat = parseInt(RegExp.$1); } else if (line.match(noteC2)) { obj.addATBChargeFlat = parseInt(RegExp.$1); } else if (line.match(noteC3)) { obj.setATBChargeRate = parseFloat(RegExp.$1 * 0.01); } else if (line.match(noteC4)) { obj.addATBChargeRate = parseFloat(RegExp.$1 * 0.01); } else if (line.match(noteS1)) { obj.afterATBFlat = parseInt(RegExp.$1); } else if (line.match(noteS2)) { obj.afterATBRate = parseFloat(RegExp.$1 * 0.01); } else if (line.match(noteI1)) { obj.atbInterruptRate = 1; } else if (line.match(noteI2)) { obj.atbInterruptRate = parseFloat(RegExp.$1 * 0.01); } else if (line.match(noteI3)) { obj.cannotAtbInterrupt = true; } else if (line.match(/<(?:TARGET ATB EVAL)>/i)) { evalMode = 'atb eval'; } else if (line.match(/<\/(?:TARGET ATB EVAL)>/i)) { evalMode = 'none'; } else if (line.match(/<(?:AFTER ATB EVAL)>/i)) { evalMode = 'after atb eval'; } else if (line.match(/<\/(?:AFTER ATB EVAL)>/i)) { evalMode = 'none'; } else if (line.match(/<(?:ATB INTERRUPT EVAL)>/i)) { evalMode = 'atb interrupt eval'; } else if (line.match(/<\/(?:ATB INTERRUPT EVAL)>/i)) { evalMode = 'none'; } else if (line.match(/<(?:ATB HELP)>/i)) { evalMode = 'atb help'; obj.atbHelp = ''; } else if (line.match(/<\/(?:ATB HELP)>/i)) { evalMode = 'none'; } else if (evalMode === 'atb help') { obj.atbHelp = obj.atbHelp + line + '\n'; } else if (evalMode === 'atb eval') { obj.atbEval = obj.atbEval + line + '\n'; } else if (evalMode === 'after atb eval') { obj.atbAfterEval = obj.atbAfterEval + line + '\n'; } else if (evalMode === 'atb interrupt eval') { obj.atbInterruptEval = obj.atbInterruptEval + line + '\n'; } } } }; DataManager.processATBNotetags2 = function(group) { var noteA1 = /<(?:ATB START):[ ]([\+\-]\d+)>/i; var noteA2 = /<(?:ATB START):[ ]([\+\-]\d+)([%%])>/i; var noteB1 = /<(?:ATB TURN):[ ]([\+\-]\d+)>/i; var noteB2 = /<(?:ATB TURN):[ ]([\+\-]\d+)([%%])>/i; for (var n = 1; n < group.length; n++) { var obj = group[n]; var notedata = obj.note.split(/[\r\n]+/); obj.atbStartFlat = 0; obj.atbStartRate = 0; obj.atbTurnFlat = 0; obj.atbTurnRate = 0; var evalMode = 'none'; obj.atbHelp = undefined; for (var i = 0; i < notedata.length; i++) { var line = notedata[i]; if (line.match(noteA1)) { obj.atbStartFlat = parseInt(RegExp.$1); } else if (line.match(noteA2)) { obj.atbStartRate = parseFloat(RegExp.$1 * 0.01); } else if (line.match(noteB1)) { obj.atbTurnFlat = parseInt(RegExp.$1); } else if (line.match(noteB2)) { obj.atbTurnRate = parseFloat(RegExp.$1 * 0.01); } else if (line.match(/<(?:ATB HELP)>/i)) { evalMode = 'atb help'; obj.atbHelp = ''; } else if (line.match(/<\/(?:ATB HELP)>/i)) { evalMode = 'none'; } else if (evalMode === 'atb help') { obj.atbHelp = obj.atbHelp + line + '\n'; } } } }; //============================================================================= // ConfigManager //============================================================================= ConfigManager.atbSpeed = Yanfly.Param.ATBDefaultSpeed; Yanfly.ATB.ConfigManager_makeData = ConfigManager.makeData; ConfigManager.makeData = function() { var config = Yanfly.ATB.ConfigManager_makeData.call(this); config.atbSpeed = this.atbSpeed; return config; }; Yanfly.ATB.ConfigManager_applyData = ConfigManager.applyData; ConfigManager.applyData = function(config) { Yanfly.ATB.ConfigManager_applyData.call(this, config); this.atbSpeed = this.readConfigATBSpeed(config, 'atbSpeed'); }; ConfigManager.readConfigATBSpeed = function(config, name) { var value = config[name]; if (value !== undefined) { return Number(value).clamp(1, 10); } else { return Yanfly.Param.ATBDefaultSpeed.clamp(1, 10); } }; //============================================================================= // BattleManager //============================================================================= BattleManager.isATB = function() { return this.isBattleSystem('atb'); }; Yanfly.ATB.BattleManager_isTurnBased = BattleManager.isTurnBased; BattleManager.isTurnBased = function() { if (this.isATB()) return false; return Yanfly.ATB.BattleManager_isTurnBased.call(this); }; Yanfly.ATB.BattleManager_tickRate = BattleManager.tickRate; BattleManager.tickRate = function() { var rate = Yanfly.ATB.BattleManager_tickRate.call(this); if (this.isATB()) rate *= this.atbTickRate(); return rate; }; BattleManager.atbTickRate = function() { var rate = 0.1 * ConfigManager.atbSpeed; return rate; }; Yanfly.ATB.BattleManager_makeEscapeRatio = BattleManager.makeEscapeRatio; BattleManager.makeEscapeRatio = function() { if (this.isATB()) { var code = Yanfly.Param.ATBEscapeRatio; try { this._escapeRatio = eval(code); } catch (e) { this._escapeRatio = 0; Yanfly.Util.displayError(e, code, 'ATB ESCAPE RATIO ERROR'); } var code = Yanfly.Param.ATBEscapeBoost; try { this._escapeFailBoost = eval(code); } catch (e) { this._escapeFailBoost = 0; Yanfly.Util.displayError(e, code, 'ATB ESCAPE BOOST ERROR'); } } else { this._escapeFailBoost = 0.1; Yanfly.ATB.BattleManager_makeEscapeRatio.call(this); } }; Yanfly.ATB.BattleManager_startBattle = BattleManager.startBattle; BattleManager.startBattle = function() { Yanfly.ATB.BattleManager_startBattle.call(this); if (this.isATB()) { this._phase = null; this._counterAttacking = false; this.startATB(); } }; Yanfly.ATB.BattleManager_endBattle = BattleManager.endBattle; BattleManager.endBattle = function(result) { Yanfly.ATB.BattleManager_endBattle.call(this, result); this.clearATBData(); }; BattleManager.startATB = function() { if (this._phase === 'battleEnd') return; this.clearATBData(); this._atbTarget = Math.max(1, eval(Yanfly.Param.ATBFullGauge)); this._atbCharge = Math.max(1, eval(Yanfly.Param.ATBChargeGauge)); this._atbFullTurn = Math.max(1, eval(Yanfly.Param.ATBFullTurn)); this._atbRubberband = eval(Yanfly.Param.ATBRubberband); if (this.atbRubberband()) { this._atbMinimumSpeed = Math.max(1, eval(Yanfly.Param.ATBMinSpeed)); this._atbMaximumSpeed = Math.max(1, eval(Yanfly.Param.ATBMaxSpeed)); } this._atbTicks = this._atbFullTurn; this._atbReadySound = { name: Yanfly.Param.ATBReadyName, volume: Yanfly.Param.ATBReadyVol, pitch: Yanfly.Param.ATBReadyPitch, pan: Yanfly.Param.ATBReadyPan } $gameParty.onATBStart(); $gameTroop.onATBStart(); this._phase = 'start'; }; BattleManager.clearATBData = function() { this._highestBaseAgi = undefined; this._averageBaseAgi = undefined; this._lowestBaseAgi = undefined; this._atbTarget = undefined; this._atbCharge = undefined; this._atbTarget = undefined; this._atbCharge = undefined; this._atbFullTurn = undefined; this._atbRubberband = undefined; this._atbMinimumSpeed = undefined; this._atbMaximumSpeed = undefined; this._atbTicks = 0; }; BattleManager.atbTarget = function() { if (!this._atbTarget) this.startATB(); return this._atbTarget; }; BattleManager.atbCharge = function() { if (!this._atbCharge) this.startATB(); return this._atbCharge; }; BattleManager.atbRubberband = function() { return this._atbRubberband; }; BattleManager.atbMinimumSpeed = function() { return this._atbMinimumSpeed; }; BattleManager.atbMaximumSpeed = function() { return this._atbMaximumSpeed; }; BattleManager.highestBaseAgi = function() { if (this._highestBaseAgi) return this._highestBaseAgi; var agi = 0; for (var i = 0; i < $gameParty.battleMembers().length; ++i) { var battler = $gameParty.battleMembers()[i]; if (battler) agi = Math.max(agi, battler.agi); } for (var i = 0; i < $gameTroop.members().length; ++i) { var battler = $gameTroop.members()[i]; if (battler) agi = Math.max(agi, battler.agi); } this._highestBaseAgi = agi; return this._highestBaseAgi; }; BattleManager.averageBaseAgi = function() { if (this._averageBaseAgi) return this._averageBaseAgi; var agi = 0; for (var i = 0; i < $gameParty.battleMembers().length; ++i) { var battler = $gameParty.battleMembers()[i]; if (battler) agi += battler.agi; } for (var i = 0; i < $gameTroop.members().length; ++i) { var battler = $gameTroop.members()[i]; if (battler) agi += battler.agi; } var sum = $gameParty.battleMembers().length; sum += $gameTroop.members().length; this._averageBaseAgi = agi / sum; return this._averageBaseAgi; }; BattleManager.lowestBaseAgi = function() { if (this._lowestBaseAgi) return this._lowestBaseAgi; var agi = this.highestBaseAgi(); for (var i = 0; i < $gameParty.battleMembers().length; ++i) { var battler = $gameParty.battleMembers()[i]; if (battler) agi = Math.min(agi, battler.agi); } for (var i = 0; i < $gameTroop.members().length; ++i) { var battler = $gameTroop.members()[i]; if (battler) agi = Math.min(agi, battler.agi); } this._lowestBaseAgi = agi; return this._lowestBaseAgi; }; Yanfly.ATB.BattleManager_update = BattleManager.update; BattleManager.update = function() { if (this.isATB()) { if (this.isBusy()) return; if (this.updateEvent()) return; if (this._phase === 'battleEnd') { return Yanfly.ATB.BattleManager_update.call(this); } if (this.checkBattleEnd()) return; if (this._phase === 'atb') { this.updateATBPhase(); } else { Yanfly.ATB.BattleManager_update.call(this); } } else { Yanfly.ATB.BattleManager_update.call(this); } }; Yanfly.ATB.BattleManager_updateEventMain = BattleManager.updateEventMain; BattleManager.updateEventMain = function() { if (this.isATB()) { $gameTroop.updateInterpreter(); $gameParty.requestMotionRefresh(); if ($gameTroop.isEventRunning()) { return true; } $gameTroop.setupBattleEvent(); if ($gameTroop.isEventRunning() || SceneManager.isSceneChanging()) { return true; } return false; } else { return Yanfly.ATB.BattleManager_updateEventMain.call(this); } }; BattleManager.updateATBPhase = function() { var chargedBattler = this.getChargedATBBattler(); if (chargedBattler) return this.startATBAction(chargedBattler); var readyBattler = this.getReadyATBBattler(); if (readyBattler) { return this.startATBInput(readyBattler); } else { this.updateATBTicks(); this.updateBattlerATB(); } }; BattleManager.updateATBTicks = function() { this._atbTicks += 1 * this.tickRate(); if (this._atbTicks < this._atbFullTurn) return; $gameTroop.increaseTurn(); this._atbTicks = 0; if (this.isTurnBased()) { this.endTurn(); } else { this.endTurn(); } }; BattleManager.getChargedATBBattler = function() { if ($gameParty.aliveMembers() <= 0 || $gameTroop.aliveMembers() <= 0) { return false; } var fastest = false; for (var i = 0; i < this.allBattleMembers().length; ++i) { var battler = this.allBattleMembers()[i]; if (!battler) continue; if (!this.isBattlerATBCharged(battler)) continue; if (!fastest) { fastest = battler; } else if (battler.atbCharge() > fastest.atbCharge()) { fastest = battler; } } return fastest; }; BattleManager.isBattlerATBCharged = function(battler) { if (!battler.isATBCharging()) return false; if (battler.atbChargeRate() < 1) return false; if (battler.isConfused()) { battler.makeActions(); if (battler.isActor()) battler.makeConfusionActions(); } return battler.currentAction() && battler.currentAction().item(); }; BattleManager.getReadyATBBattler = function() { var fastest = false; for (var i = 0; i < this.allBattleMembers().length; ++i) { var battler = this.allBattleMembers()[i]; if (!battler) continue; if (!this.isBattlerATBReady(battler)) continue; if (!fastest) { fastest = battler; } else if (battler.atbSpeed() > fastest.atbSpeed()) { fastest = battler; } } return fastest; }; BattleManager.isBattlerATBReady = function(battler) { if (battler.atbRate() < 1) return false; if (battler.isATBCharging()) return false; if (battler.currentAction() && battler.currentAction().item()) { battler.makeActions(); battler.setupATBCharge(); return false; } return true; }; BattleManager.updateBattlerATB = function(ignore) { $gameParty.updateTick(); $gameTroop.updateTick(); if (ignore) return; if (this._statusWindow) this.statusUpdateATB(); }; BattleManager.setATBPhase = function() { this._phase = 'atb'; }; Yanfly.ATB.BattleManager_startInput = BattleManager.startInput; BattleManager.startInput = function() { if (this.isATB()) { this.setATBPhase(); } else { Yanfly.ATB.BattleManager_startInput.call(this); } }; Yanfly.ATB.BattleManager_selectNextCommand = BattleManager.selectNextCommand; BattleManager.selectNextCommand = function() { if (this.isATB()) { if (!this.actor()) return this.setATBPhase(); this.resetNonPartyActorATB(); this.actor().setupATBCharge(); this.actor().spriteStepBack(); this.actor().requestMotionRefresh(); this._actorIndex = undefined; var chargedBattler = this.getChargedATBBattler(); if (chargedBattler) { this.startATBAction(chargedBattler); } else { this.setATBPhase(); } } else { Yanfly.ATB.BattleManager_selectNextCommand.call(this); } }; BattleManager.resetNonPartyActorATB = function() { for (var i = 0; i < $gameParty.allMembers().length; ++i) { var actor = $gameParty.allMembers()[i]; if (!actor) continue; if ($gameParty.battleMembers().contains(actor)) continue; actor.resetAllATB(); } }; Yanfly.ATB.BattleManager_selectPreviousCommand = BattleManager.selectPreviousCommand; BattleManager.selectPreviousCommand = function() { if (this.isATB()) { var actorIndex = this._actorIndex; var scene = SceneManager._scene; this._bypassAtbEndTurn = true; scene.startPartyCommandSelection(); this._actorIndex = actorIndex; BattleManager.actor().setActionState('undecided'); BattleManager.actor().requestMotionRefresh(); this._bypassAtbEndTurn = undefined; } else { Yanfly.ATB.BattleManager_selectPreviousCommand.call(this); } }; Yanfly.ATB.BattleManager_startTurn = BattleManager.startTurn; BattleManager.startTurn = function() { if (this.isATB() && !this.isTurnBased()) return; Yanfly.ATB.BattleManager_startTurn.call(this); }; Yanfly.ATB.BattleManager_updateTurnEnd = BattleManager.updateTurnEnd; BattleManager.updateTurnEnd = function() { if (this.isATB()) { this.setATBPhase(); } else { Yanfly.ATB.BattleManager_updateTurnEnd.call(this); } }; BattleManager.startATBInput = function(battler) { if (battler.isDead()) return; battler.onTurnStart(); battler.makeActions(); if (battler.isEnemy()) { battler.setupATBCharge(); if (Yanfly.Param.ATBFlashEnemy) battler.requestEffect('whiten'); var chargedBattler = this.getChargedATBBattler(); if (chargedBattler) this.startATBAction(chargedBattler); } else if (battler.canInput()) { this._actorIndex = battler.index(); this.playATBReadySound(); battler.setActionState('inputting'); battler.spriteStepForward(); this._phase = 'input'; } else if (battler.isConfused()) { battler.makeConfusionActions(); battler.setupATBCharge(); } else { battler.makeAutoBattleActions(); battler.setupATBCharge(); } }; BattleManager.playATBReadySound = function() { AudioManager.playSe(this._atbReadySound); }; BattleManager.startATBAction = function(battler) { this._subject = battler; var action = this._subject.currentAction(); if (action && action.isValid()) { this.startAction(); } else { this.endAction(); } }; Yanfly.ATB.BattleManager_processForcedAction = BattleManager.processForcedAction; BattleManager.processForcedAction = function() { var forced = false; if (this._actionForcedBattler && this.isATB()) { var action = this._actionForcedBattler.currentAction(); forced = true; } Yanfly.ATB.BattleManager_processForcedAction.call(this); if (forced) this._subject.setAction(0, action); }; Yanfly.ATB.BattleManager_endAction = BattleManager.endAction; BattleManager.endAction = function() { if (this.isATB()) { this.endATBAction(); } else { Yanfly.ATB.BattleManager_endAction.call(this); } }; BattleManager.endATBAction = function() { if (Imported.YEP_BattleEngineCore) { if (this._processingForcedAction) this._phase = this._preForcePhase; this._processingForcedAction = false; } if (this._subject) this._subject.onAllActionsEnd(); if (this.updateEventMain()) return; this._subject.endTurnAllATB(); if (this.loadPreForceActionSettings()) return; this.updateBattlerATB(true); var chargedBattler = this.getChargedATBBattler(); if (chargedBattler) { this.startATBAction(chargedBattler); } else { this.setATBPhase(); } }; Yanfly.ATB.BattleManager_invokeCounterAttack = BattleManager.invokeCounterAttack; BattleManager.invokeCounterAttack = function(subject, target) { if (this.isATB()) this._counterAttacking = true; Yanfly.ATB.BattleManager_invokeCounterAttack.call(this, subject, target); if (this.isATB()) this._counterAttacking = false; }; BattleManager.isCounterAttacking = function() { return this._counterAttacking; }; BattleManager.statusUpdateATB = function() { this._statusWindow.redrawATB(); }; Yanfly.ATB.BattleManager_processEscape = BattleManager.processEscape; BattleManager.processEscape = function() { if (this.isATB()) { return this.processEscapeATB(); } else { return Yanfly.ATB.BattleManager_processEscape.call(this); } }; BattleManager.processEscapeATB = function() { $gameParty.performEscape(); SoundManager.playEscape(); var success = this._preemptive ? true : (Math.random() < this._escapeRatio); if (success) { $gameParty.removeBattleStates(); $gameParty.performEscapeSuccess(); this.displayEscapeSuccessMessage(); this._escaped = true; this.processAbort(); } else { this.actor().spriteStepBack(); this.actor().clearActions(); this.displayEscapeFailureMessage(); this._escapeRatio += this._escapeFailBoost; this.startTurn(); this.processFailEscapeATB(); } return success; }; BattleManager.processFailEscapeATB = function() { var actor = $gameParty.members()[this._actorIndex]; if (!actor) return; actor.resetAllATB(); }; Yanfly.ATB.BattleManager_processActionSequence = BattleManager.processActionSequence; BattleManager.processActionSequence = function(actionName, actionArgs) { if (this.isATB()) { // ATB CHARGE if (actionName === 'ATB CHARGE') { return this.actionATBCharge(actionArgs); } // ATB GAUGE if (actionName === 'ATB GAUGE') { return this.actionATBCharge(actionArgs) && this.actionATBSpeed(actionArgs); } // ATB INTERRUPT if (actionName === 'ATB INTERRUPT') { return this.actionATBInterrupt(actionArgs); } // ATB SPEED if (actionName === 'ATB SPEED') { return this.actionATBSpeed(actionArgs); } } return Yanfly.ATB.BattleManager_processActionSequence.call(this, actionName, actionArgs); }; BattleManager.actionATBCharge = function(actionArgs) { var targets = this.makeActionTargets(actionArgs[0]); if (targets.length < 1) return true; var cmd = actionArgs[1]; if (cmd.match(/([\+\-]\d+)([%%])/i)) { var rate = parseFloat(RegExp.$1 * 0.01); for (var i = 0; i < targets.length; ++i) { var target = targets[i]; if (!target) continue; if (target === this._subject) continue; if (!target.isATBCharging()) continue; var max = target.atbChargeDenom(); var value = rate * max + target.atbCharge(); target.setATBCharge(value); target.refresh(); } } else if (cmd.match(/([\+\-]\d+)/i)) { var plus = parseInt(RegExp.$1); for (var i = 0; i < targets.length; ++i) { var target = targets[i]; if (!target) continue; if (target === this._subject) continue; if (!target.isATBCharging()) continue; var value = plus + target.atbCharge(); target.setATBCharge(value); target.refresh(); } } else if (cmd.match(/(\d+)([%%])/i)) { var rate = parseFloat(RegExp.$1 * 0.01); for (var i = 0; i < targets.length; ++i) { var target = targets[i]; if (!target) continue; if (target === this._subject) continue; if (!target.isATBCharging()) continue; var max = target.atbChargeDenom(); var value = rate * max; target.setATBCharge(value); target.refresh(); } } else if (cmd.match(/(\d+)/i)) { var value = parseInt(RegExp.$1); for (var i = 0; i < targets.length; ++i) { var target = targets[i]; if (!target) continue; if (target === this._subject) continue; if (!target.isATBCharging()) continue; target.setATBCharge(value); target.refresh(); } } return true; }; BattleManager.actionATBInterrupt = function(actionArgs) { var targets = this.makeActionTargets(actionArgs[0]); if (targets.length < 1) return true; for (var i = 0; i < targets.length; ++i) { var target = targets[i]; if (!target) continue; if (target === this._subject) continue; if (!target.isATBCharging()) continue; target.processATBInterrupt(); } return true; }; BattleManager.actionATBSpeed = function(actionArgs) { var targets = this.makeActionTargets(actionArgs[0]); if (targets.length < 1) return true; var cmd = actionArgs[1]; if (cmd.match(/([\+\-]\d+)([%%])/i)) { var rate = parseFloat(RegExp.$1 * 0.01); var max = this.atbTarget(); for (var i = 0; i < targets.length; ++i) { var target = targets[i]; if (!target) continue; if (target === this._subject) continue; if (target.isATBCharging()) continue; var value = rate * max + target.atbSpeed(); target.setATBSpeed(value); target.refresh(); } } else if (cmd.match(/([\+\-]\d+)/i)) { var plus = parseInt(RegExp.$1); for (var i = 0; i < targets.length; ++i) { var target = targets[i]; if (!target) continue; if (target === this._subject) continue; if (target.isATBCharging()) continue; var value = plus + target.atbSpeed(); target.setATBSpeed(value); target.refresh(); } } else if (cmd.match(/(\d+)([%%])/i)) { var rate = parseFloat(RegExp.$1 * 0.01); var max = this.atbTarget(); for (var i = 0; i < targets.length; ++i) { var target = targets[i]; if (!target) continue; if (target === this._subject) continue; if (target.isATBCharging()) continue; var value = rate * max; target.setATBSpeed(value); target.refresh(); } } else if (cmd.match(/(\d+)/i)) { var value = parseInt(RegExp.$1); for (var i = 0; i < targets.length; ++i) { var target = targets[i]; if (!target) continue; if (target === this._subject) continue; if (target.isATBCharging()) continue; target.setATBSpeed(value); target.refresh(); } } return true; }; //============================================================================= // Game_Action //============================================================================= Yanfly.ATB.Game_Action_applyItemUserEffect = Game_Action.prototype.applyItemUserEffect; Game_Action.prototype.applyItemUserEffect = function(target) { Yanfly.ATB.Game_Action_applyItemUserEffect.call(this, target); if (BattleManager.isATB() && $gameParty.inBattle()) { this.applyItemATBEffect(target); } }; Game_Action.prototype.applyItemATBEffect = function(target) { if (!target) return; this.applyItemATBSetEffects(target); this.applyItemATBAddEffects(target); this.applyItemATBEvalEffect(target); if (BattleManager.isCounterAttacking()) return; this.applyItemATBInterrupt(target); this.applyItemATBInterruptEval(target); }; Game_Action.prototype.applyItemATBSetEffects = function(target) { var item = this.item(); if (!item) return; var value = undefined; if (target.isATBCharging()) { var max = target.atbChargeDenom(); if (item.setATBChargeFlat !== undefined) { value = item.setATBChargeFlat; } else if (item.setATBGaugeFlat !== undefined) { value = item.setATBGaugeFlat; } else if (item.setATBChargeRate !== undefined) { value = item.setATBChargeRate * max; } else if (item.setATBGaugeRate !== undefined) { value = item.setATBGaugeRate * max; } if (value !== undefined) target.setATBCharge(value); } else { var max = BattleManager.atbTarget(); if (item.setATBSpeedFlat !== undefined) { value = item.setATBSpeedFlat; } else if (item.setATBGaugeFlat !== undefined) { value = item.setATBGaugeFlat; } else if (item.setATBSpeedRate !== undefined) { value = item.setATBSpeedRate * max; } else if (item.setATBGaugeRate !== undefined) { value = item.setATBGaugeRate * max; } if (value !== undefined) target.setATBSpeed(value); } if (value !== undefined && target.isActor()) BattleManager.statusUpdateATB(); }; Game_Action.prototype.applyItemATBAddEffects = function(target) { var item = this.item(); if (!item) return; if (target.isATBCharging()) { var value = target.atbCharge(); var max = target.atbChargeDenom(); value += item.addATBChargeRate * max; value += item.addATBGaugeRate * max; value += item.addATBChargeFlat; value += item.addATBGaugeFlat; target.setATBCharge(value); } else { var value = target.atbSpeed(); var max = BattleManager.atbTarget() value += item.addATBSpeedRate * max; value += item.addATBGaugeRate * max; value += item.addATBSpeedFlat; value += item.addATBGaugeFlat; target.setATBSpeed(value); } if (value !== 0 && target.isActor()) BattleManager.statusUpdateATB(); }; Game_Action.prototype.applyItemATBEvalEffect = function(target) { var a = this.subject(); var user = this.subject(); var b = target; var item = this.item(); var skill = this.item(); var s = $gameSwitches._data; var v = $gameVariables._data; var speed = target.atbSpeed(); var charge = target.atbCharge(); if (target.isATBCharging()) { var max = target.atbChargeDenom(); } else { var max = BattleManager.atbTarget(); } var code = item.atbEval; try { eval(code); } catch (e) { Yanfly.Util.displayError(e, code, 'ATB EVAL ERROR'); } target.setATBSpeed(speed); target.setATBCharge(charge); }; Game_Action.prototype.applyItemATBInterrupt = function(target) { var item = this.item(); if (!item) return; if (target === this.subject()) return; if (!target.isATBCharging()) return; if (item.atbInterruptRate <= 0) return; var success = (Math.random() < item.atbInterruptRate); if (success) target.processATBInterrupt(); }; Game_Action.prototype.applyItemATBInterruptEval = function(target) { var item = this.item(); if (!item) return; if (target === this.subject()) return; if (!target.isATBCharging()) return; if (item.atbInterruptEval === '') return; var interrupt = false; var a = this.subject(); var user = this.subject(); var b = target; var item = this.item(); var skill = this.item(); var s = $gameSwitches._data; var v = $gameVariables._data; var speed = target.atbSpeed(); var charge = target.atbCharge(); var code = item.atbInterruptEval; try { eval(code); } catch (e) { Yanfly.Util.displayError(e, code, 'ATB INTERRUPT EVAL ERROR'); } if (interrupt) target.processATBInterrupt(); }; Game_Action.prototype.rebalanceATBSpeed = function(target) { var speed = this.subject().atbSpeed(); var offset = 00000000001; speed = Math.max(speed + offset, target.atbSpeed() + target.atbCharge()); this.subject().setATBSpeed(speed); }; //============================================================================= // Game_Battlerbase //============================================================================= Yanfly.ATB.Game_BattlerBase_refresh = Game_BattlerBase.prototype.refresh; Game_BattlerBase.prototype.refresh = function() { Yanfly.ATB.Game_BattlerBase_refresh.call(this); if (BattleManager.isATB() && $gameParty.inBattle()) { this._atbTickValue = undefined; } }; Yanfly.ATB.Game_BattlerBase_die = Game_BattlerBase.prototype.die; Game_BattlerBase.prototype.die = function() { Yanfly.ATB.Game_BattlerBase_die.call(this); if (BattleManager.isATB() && $gameParty.inBattle()) this.resetAllATB(); }; //============================================================================= // Game_Battler //============================================================================= Game_Battler.prototype.onATBStart = function() { this._atbSpeed = eval(Yanfly.Param.ATBInitSpeed); this._atbSpeed += BattleManager.atbTarget() * this.atbStartRate(); this._atbSpeed += this.atbStartFlat(); this._atbCharge = 0; this._atbCharging = false; this._atbChargeMod = 0; this.applyPreemptiveBonusATB(); this.applySurpriseBonusATB(); this.refresh(); }; Game_Battler.prototype.applyPreemptiveBonusATB = function() { if (!BattleManager._preemptive) return; if (!this.isActor()) return; var rate = Yanfly.Param.ATBPreEmptive; this._atbSpeed += rate * BattleManager.atbTarget(); }; Game_Battler.prototype.applySurpriseBonusATB = function() { if (!BattleManager._surprise) return; if (!this.isEnemy()) return; var rate = Yanfly.Param.ATBSurprise; this._atbSpeed += rate * BattleManager.atbTarget(); }; Yanfly.ATB.Game_Battler_onBattleEnd = Game_Battler.prototype.onBattleEnd; Game_Battler.prototype.onBattleEnd = function() { Yanfly.ATB.Game_Battler_onBattleEnd.call(this); this._atbSpeed = 0; this._atbCharge = 0; this._atbCharging = false; this._atbChargeMod = 0; }; Game_Battler.prototype.atbSpeed = function() { if (this._atbSpeed === undefined) this.onATBStart(); return this._atbSpeed; }; Game_Battler.prototype.atbRate = function() { if (this._atbSpeed === undefined) this.onATBStart(); var rate = this._atbSpeed / BattleManager.atbTarget(); return rate.clamp(0, 1); }; Game_Battler.prototype.isATBCharging = function() { return this._atbCharging; }; Game_Battler.prototype.setATBCharging = function(value) { this._atbCharging = value; }; Game_Battler.prototype.atbCharge = function() { if (this._atbCharge === undefined) this.onATBStart(); return this._atbCharge; }; Game_Battler.prototype.atbChargeDenom = function() { var denom = Math.max(1, BattleManager.atbCharge() - this._atbChargeMod); return denom; }; Game_Battler.prototype.atbChargeRate = function() { if (this._atbCharge === undefined) this.onATBStart(); if (!this.isATBCharging()) return 0; var rate = this._atbCharge / this.atbChargeDenom(); return rate.clamp(0, 1); }; Game_Battler.prototype.setATBSpeed = function(value) { this._atbSpeed = Math.max(0, value); }; Game_Battler.prototype.setATBCharge = function(value) { if (this.isATBCharging()) this._atbCharge = Math.max(0, value); }; Game_Battler.prototype.setupATBCharge = function() { if (this._bypassAtbEndTurn) return; this.setATBCharging(true); if (!this.currentAction()) this.makeActions(); if (this.currentAction()) { var item = this.currentAction().item(); if (item) { this._atbChargeMod = item.speed; } else { this._atbChargeMod = 0; } } else { this._atbChargeMod = 0; } this.setATBCharge(0); this.setActionState('waiting'); }; Yanfly.ATB.Game_Battler_updateTick = Game_Battler.prototype.updateTick; Game_Battler.prototype.updateTick = function() { Yanfly.ATB.Game_Battler_updateTick.call(this); if (BattleManager.isATB()) this.updateATB(); }; Game_Battler.prototype.updateATB = function() { if (this.isDead()) return this.resetAllATB(); if (!this.canMove()) { this.updateATBStates(); return; } if (this.isATBCharging()) { if (!this.currentAction()) this.resetAllATB(); if (this.currentAction() && this.currentAction().item() === null) { this.resetAllATB(); } } if (this.isATBCharging()) { var value = this.atbCharge() + this.atbSpeedTick(); this.setATBCharge(value); } else if (this.atbRate() < 1) { var value = this.atbSpeed() + this.atbSpeedTick(); this.setATBSpeed(value); } }; Game_Battler.prototype.updateATBStates = function() { if (BattleManager.timeBasedBuffs()) return; for (var i = 0; i < this._states.length; ++i) { var stateId = this._states[i]; var state = $dataStates[stateId]; if (!state) continue; if (!this._stateTurns[stateId]) continue; if (state.restriction >= 4 && state.autoRemovalTiming !== 0) { var value = BattleManager.tickRate() / Yanfly.Param.BECTurnTime; this._stateTurns[stateId] -= value; if (this._stateTurns[stateId] <= 0) this.removeState(stateId); } } }; Game_Battler.prototype.resetAllATB = function() { this._atbCharge = 0; this._atbChargeMod = 0; this._atbCharging = false; this._atbSpeed = 0; this.clearActions(); }; Game_Battler.prototype.endTurnAllATB = function() { this._atbCharge = 0; this._atbChargeMod = 0; this._atbCharging = false; if (this.checkATBEndInstantCast()) return; this.setEndActionATBSpeed(); this.clearActions(); this.setActionState('undecided'); if (this.battler()) this.battler().refreshMotion(); if (BattleManager.isTickBased()) this.onTurnEnd(); }; Game_Battler.prototype.checkATBEndInstantCast = function() { if (!Imported.YEP_InstantCast) return false; var action = this.currentAction(); if (!action) return false; var item = action.item(); if (!item) return false; if (!this.isInstantCast(item)) return false; var length = BattleManager.allBattleMembers().length; for (var i = 0; i < length; ++i) { var member = BattleManager.allBattleMembers()[i]; if (!member) continue; var max = member.atbSpeed() + member.atbCharge(); this._atbSpeed = Math.max(this._atbSpeed, max); } this._atbSpeed = Math.max(this._atbSpeed, BattleManager.atbTarget()); this._atbSpeed += 0.00000000001; return true; }; Game_Battler.prototype.atbSpeedRate = function() { if (!this.canMove()) return 0; var base = this.paramBase(6) + this.paramPlus(6); if (base >= this.paramMax(6) && this.agi >= this.paramMax(6)) return 1; var rate = this.agi / base; return rate; }; Game_Battler.prototype.atbSpeedTick = function() { var value = this.atbTickValue(); if (BattleManager.atbRubberband()) { var min = BattleManager.atbMinimumSpeed(); var max = BattleManager.atbMaximumSpeed(); value = value.clamp(min, max); } return value * BattleManager.tickRate(); }; Game_Battler.prototype.atbTickValue = function() { if (this._atbTickValue !== undefined) return this._atbTickValue; var a = this; var user = this; var subject = this; this._atbTickValue = eval(Yanfly.Param.ATBPerTick); return this._atbTickValue; }; Game_Battler.prototype.setEndActionATBSpeed = function() { this._atbSpeed = 0; var action = this.currentAction(); if (!action) return; var item = action.item();; if (item) { if (item.afterATBFlat !== undefined) this.setATBSpeed(item.afterATBFlat); if (item.afterATBRate !== undefined) { this.setATBSpeed(item.afterATBRate * BattleManager.atbTarget()); } } this._atbSpeed += BattleManager.atbTarget() * this.atbTurnRate(); this._atbSpeed += this.atbTurnFlat(); if (item) this.afterATBEval(item); }; Game_Battler.prototype.afterATBEval = function(item) { if (!item) return; var a = this; var user = this; var skill = item; var s = $gameSwitches._data; var v = $gameVariables._data; var speed = this._atbSpeed; var max = BattleManager.atbTarget(); eval(item.atbAfterEval); this.setATBSpeed(speed); }; Game_Battler.prototype.processATBInterrupt = function() { if (this.currentAction()) { var item = this.currentAction().item(); if (item && item.cannotAtbInterrupt) return; } this.resetAllATB(); this.refresh(); }; Game_Battler.prototype.atbStartFlat = function() { var value = 0; for (var i = 0; i < this.states().length; ++i) { var state = this.states()[i]; if (state) value += state.atbStartFlat; } return value; }; Game_Battler.prototype.atbStartRate = function() { var value = 0; for (var i = 0; i < this.states().length; ++i) { var state = this.states()[i]; if (state) value += state.atbStartRate; } return value; }; Game_Battler.prototype.atbTurnFlat = function() { var value = 0; for (var i = 0; i < this.states().length; ++i) { var state = this.states()[i]; if (state) value += state.atbTurnFlat; } return value; }; Game_Battler.prototype.atbTurnRate = function() { var value = 0; for (var i = 0; i < this.states().length; ++i) { var state = this.states()[i]; if (state) value += state.atbTurnRate; } return value; }; Yanfly.ATB.Game_Battler_removeState = Game_Battler.prototype.removeState; Game_Battler.prototype.removeState = function(stateId) { if (BattleManager.isATB()) { var confuseCondition = this.isConfused(); } Yanfly.ATB.Game_Battler_removeState.call(this, stateId); if (BattleManager.isATB()) { if (confuseCondition !== this.isConfused()) this.resetAllATB(); } }; //============================================================================= // Game_Actor //============================================================================= Game_Actor.prototype.atbStartFlat = function() { var value = Game_Battler.prototype.atbStartFlat.call(this); value += this.actor().atbStartFlat; value += this.currentClass().atbStartFlat; for (var i = 0; i < this.equips().length; ++i) { var equip = this.equips()[i]; if (equip && equip.atbStartFlat) value += equip.atbStartFlat; } return value; }; Game_Actor.prototype.atbStartRate = function() { var value = Game_Battler.prototype.atbStartRate.call(this); value += this.actor().atbStartRate; value += this.currentClass().atbStartRate; for (var i = 0; i < this.equips().length; ++i) { var equip = this.equips()[i]; if (equip && equip.atbStartRate) value += equip.atbStartRate; } return value; }; Game_Actor.prototype.atbTurnFlat = function() { var value = Game_Battler.prototype.atbTurnFlat.call(this); value += this.actor().atbTurnFlat; value += this.currentClass().atbTurnFlat; for (var i = 0; i < this.equips().length; ++i) { var equip = this.equips()[i]; if (equip && equip.atbTurnFlat) value += equip.atbTurnFlat; } return value; }; Game_Actor.prototype.atbTurnRate = function() { var value = Game_Battler.prototype.atbTurnRate.call(this); value += this.actor().atbTurnRate; value += this.currentClass().atbTurnRate; for (var i = 0; i < this.equips().length; ++i) { var equip = this.equips()[i]; if (equip && equip.atbTurnRate) value += equip.atbTurnRate; } return value; }; //============================================================================= // Game_Enemy //============================================================================= Game_Enemy.prototype.atbStartFlat = function() { var value = Game_Battler.prototype.atbStartFlat.call(this); value += this.enemy().atbStartFlat; return value; }; Game_Enemy.prototype.atbStartRate = function() { var value = Game_Battler.prototype.atbStartRate.call(this); value += this.enemy().atbStartRate; return value; }; Game_Enemy.prototype.atbTurnFlat = function() { var value = Game_Battler.prototype.atbTurnFlat.call(this); value += this.enemy().atbTurnFlat; return value; }; Game_Enemy.prototype.atbTurnRate = function() { var value = Game_Battler.prototype.atbTurnRate.call(this); value += this.enemy().atbTurnRate; return value; }; //============================================================================= // Game_Unit //============================================================================= Game_Unit.prototype.onATBStart = function() { if (!BattleManager.isATB()) return; for (var i = 0; i < this.members().length; ++i) { var member = this.members()[i]; if (member) member.onATBStart(); } }; Game_Unit.prototype.increaseTurnTimeBasedATB = function() { for (var i = 0; i < this.members().length; ++i) { var member = this.members()[i]; if (!member) continue; if (member.isDead()) continue; if (member.isHidden()) continue; if (member.canMove()) continue; member.onTurnEnd(); } }; //============================================================================= // Game_Party //============================================================================= Yanfly.ATB.Game_Party_performEscape = Game_Party.prototype.performEscape; Game_Party.prototype.performEscape = function() { if (BattleManager.isATB()) return; Yanfly.ATB.Game_Party_performEscape.call(this); }; //============================================================================= // Game_Troop //============================================================================= Yanfly.ATB.Game_Troop_increaseTurn = Game_Troop.prototype.increaseTurn; Game_Troop.prototype.increaseTurn = function() { Yanfly.ATB.Game_Troop_increaseTurn.call(this); if (BattleManager.isATB() && BattleManager.timeBasedStates()) { $gameParty.increaseTurnTimeBasedATB(); this.increaseTurnTimeBasedATB(); } }; //============================================================================= // Window_Base //============================================================================= Window_Base.prototype.atbGaugeStyle = function() { return Yanfly.Param.ATBGaugeStyle }; Window_Base.prototype.atbGaugeColor1 = function(actor) { if (actor.atbRate() < 1) { if (actor.atbSpeedRate() === 0) { return this.textColor(Yanfly.Param.ATBColorStop1); } else if (actor.atbSpeedRate() > 1) { return this.textColor(Yanfly.Param.ATBColorFast1); } else if (actor.atbSpeedRate() < 1) { return this.textColor(Yanfly.Param.ATBColorSlow1); } else { return this.textColor(Yanfly.Param.ATBColorAtb1); } } else if (actor.atbRate() >= 1 && actor.atbChargeRate() >= 0) { return this.textColor(Yanfly.Param.ATBColorFull1); } else { return this.gaugeBackColor(); } }; Window_Base.prototype.atbGaugeColor2 = function(actor) { if (actor.atbRate() < 1) { if (actor.atbSpeedRate() === 0) { return this.textColor(Yanfly.Param.ATBColorStop2); } else if (actor.atbSpeedRate() > 1) { return this.textColor(Yanfly.Param.ATBColorFast2); } else if (actor.atbSpeedRate() < 1) { return this.textColor(Yanfly.Param.ATBColorSlow2); } else { return this.textColor(Yanfly.Param.ATBColorAtb2); } } else if (actor.atbRate() >= 1 && actor.atbChargeRate() >= 0) { return this.textColor(Yanfly.Param.ATBColorFull2); } else { return this.gaugeBackColor(); } }; Window_Base.prototype.drawActorAtbGauge = function(actor, wx, wy, ww) { ww = ww || 96; if (!actor) return; var color1 = this.atbGaugeColor1(actor); var color2 = this.atbGaugeColor2(actor); if (actor.atbRate() < 1) { var rate = actor.atbRate(); } else if (actor.atbRate() >= 1 && actor.atbChargeRate() >= 0) { var rate = 1; } else { var rate = 0; } this.drawGauge(wx, wy, ww, rate, color1, color2); if (actor.atbChargeRate() > 0) this.drawAtbChargeGauge(actor, wx, wy, ww); if (this.atbGaugeStyle() === 2) { var text = Yanfly.Param.ATBGaugeText; var align =Yanfly.Param.ATBGaugeAlign; if (actor.atbRate() >= 1) { this.changeTextColor(this.normalColor()); } else { this.changeTextColor(this.systemColor()); } this.drawText(text, wx, wy, ww, align); this.resetTextColor(); } }; Window_Base.prototype.drawAtbChargeGauge = function(actor, wx, wy, ww) { var color1 = this.textColor(Yanfly.Param.ATBColorChar1); var color2 = this.textColor(Yanfly.Param.ATBColorChar2); var rate = actor.atbChargeRate(); this.drawGauge(wx, wy, ww * rate, 1, color1, color2); }; //============================================================================= // Window_Help //============================================================================= Yanfly.ATB.Window_Help_setItem = Window_Help.prototype.setItem; Window_Help.prototype.setItem = function(item) { if (this.meetATBConditions(item)) return this.setText(item.atbHelp); Yanfly.ATB.Window_Help_setItem.call(this, item); }; Window_Help.prototype.meetATBConditions = function(item) { if (!item) return false; if (!BattleManager.isATB()) return false; return item.atbHelp !== undefined; }; //============================================================================= // Window_BattleStatus //============================================================================= Window_BattleStatus.prototype.redrawATB = function() { if (this.isATBGaugeStyle(0)) return; var rect; for (var i = 0; i < $gameParty.battleMembers().length; ++i) { var actor = $gameParty.battleMembers()[i]; if (this.isATBGaugeStyle(1)) { rect = this.basicAreaRect(i); this.contents.clearRect(rect.x - 1, rect.y, rect.width + 2, rect.height); this.drawBasicArea(rect, actor); } else if (this.isATBGaugeStyle(2)) { this.redrawATBGaugeRect(i, actor); } } }; Window_BattleStatus.prototype.redrawATBGaugeRect = function(index, actor) { var rect = this.gaugeAreaRect(index); var clrect = this.gaugeAreaRect(index); var totalArea = this.gaugeAreaWidth(); if ($dataSystem.optDisplayTp) { var gw = totalArea / 4 - 15; clrect.x = rect.x + gw * 3 + 44; clrect.y = rect.y; clrect.width = gw + 2; this.contents.clearRect(clrect.x, clrect.y, clrect.width, clrect.height); this.drawActorAtbGauge(actor, rect.x + gw * 3 + 45, rect.y, gw); } else { totalArea -= 30; var hpW = parseInt(totalArea * 108 / 300); var otW = parseInt(totalArea * 96 / 300); clrect.x = rect.x + hpW + otW + 29; clrect.y = rect.y; clrect.width = otW + 2; this.contents.clearRect(clrect.x, clrect.y, clrect.width, clrect.height); this.drawActorAtbGauge(actor, rect.x + hpW + otW + 30, rect.y, otW); } }; Window_BattleStatus.prototype.isATBGaugeStyle = function(type) { if (this.atbGaugeStyle() !== type) return false; if (!BattleManager.isATB()) return false; return (SceneManager._scene instanceof Scene_Battle); }; Yanfly.ATB.Window_BattleStatus_drawBasicArea = Window_BattleStatus.prototype.drawBasicArea; Window_BattleStatus.prototype.drawBasicArea = function(rect, actor) { if (this.isATBGaugeStyle(1)) { this.drawActorAtbGauge(actor, rect.x, rect.y, rect.width); } Yanfly.ATB.Window_BattleStatus_drawBasicArea.call(this, rect, actor); }; Yanfly.ATB.Window_BattleStatus_drawGaugeAreaWithTp = Window_BattleStatus.prototype.drawGaugeAreaWithTp; Window_BattleStatus.prototype.drawGaugeAreaWithTp = function(rect, actor) { if (this.isATBGaugeStyle(2)) { var totalArea = this.gaugeAreaWidth(); var gw = totalArea / 4 - 15; this.drawActorHp(actor, rect.x + 0, rect.y, gw); this.drawActorMp(actor, rect.x + gw * 1 + 15, rect.y, gw); this.drawActorTp(actor, rect.x + gw * 2 + 30, rect.y, gw); this.drawActorAtbGauge(actor, rect.x + gw * 3 + 45, rect.y, gw); } else { Yanfly.ATB.Window_BattleStatus_drawGaugeAreaWithTp.call(this, rect, actor); } }; Yanfly.ATB.Window_BattleStatus_drawGaugeAreaWOTp = Window_BattleStatus.prototype.drawGaugeAreaWithoutTp; Window_BattleStatus.prototype.drawGaugeAreaWithoutTp = function(rect, actor) { if (this.isATBGaugeStyle(2)) { var totalArea = this.gaugeAreaWidth() - 30; var hpW = parseInt(totalArea * 108 / 300); var otW = parseInt(totalArea * 96 / 300); this.drawActorHp(actor, rect.x + 0, rect.y, hpW); this.drawActorMp(actor, rect.x + hpW + 15, rect.y, otW); this.drawActorAtbGauge(actor, rect.x + hpW + otW + 30, rect.y, otW); } else { Yanfly.ATB.Window_BattleStatus_drawGaugeAreaWOTp.call(this, rect, actor); } }; //============================================================================= // Window_Options //============================================================================= Yanfly.ATB.Window_Options_addGeneralOptions = Window_Options.prototype.addGeneralOptions; Window_Options.prototype.addGeneralOptions = function() { Yanfly.ATB.Window_Options_addGeneralOptions.call(this); if (Imported.YEP_OptionsCore) return; if ($gameSystem.getBattleSystem() === 'atb') this.addATBOptions(); }; Window_Options.prototype.addATBOptions = function() { var text = Yanfly.Param.ATBOptionSpeedTx; this.addCommand(text, 'atbSpeed'); }; Yanfly.ATB.Window_Options_statusText = Window_Options.prototype.statusText; Window_Options.prototype.statusText = function(index) { var symbol = this.commandSymbol(index); if (symbol === 'atbSpeed') { return this.getConfigValue('atbSpeed'); } else { return Yanfly.ATB.Window_Options_statusText.call(this, index); } }; if (!Imported.YEP_OptionsCore) { Yanfly.ATB.Window_Options_processOk = Window_Options.prototype.processOk; Window_Options.prototype.processOk = function() { var index = this.index(); var symbol = this.commandSymbol(index); if (symbol === 'atbSpeed') { var value = this.getConfigValue(symbol); value += 1; if (value > 10) value = 1; this.changeValue(symbol, value); } else { Yanfly.ATB.Window_Options_processOk.call(this); } }; Yanfly.ATB.Window_Options_cursorRight = Window_Options.prototype.cursorRight; Window_Options.prototype.cursorRight = function(wrap) { var index = this.index(); var symbol = this.commandSymbol(index); if (symbol === 'atbSpeed') { var value = this.getConfigValue(symbol); value += 1; if (value > 10) value = 1; this.changeValue(symbol, value); } else { Yanfly.ATB.Window_Options_cursorRight.call(this, wrap); } }; Yanfly.ATB.Window_Options_cursorLeft = Window_Options.prototype.cursorLeft; Window_Options.prototype.cursorLeft = function(wrap) { var index = this.index(); var symbol = this.commandSymbol(index); if (symbol === 'atbSpeed') { var value = this.getConfigValue(symbol); value -= 1; if (value < 1) value = 10; this.changeValue(symbol, value); } else { Yanfly.ATB.Window_Options_cursorLeft.call(this, wrap); } }; }; // Imported.YEP_OptionsCore //============================================================================= // Scene_Battle //============================================================================= Yanfly.ATB.Scene_Battle_updateWindowPositions = Scene_Battle.prototype.updateWindowPositions; Scene_Battle.prototype.updateWindowPositions = function() { if (BattleManager.isATB() && !this._atbLockStatusWin) { this._atbLockStatusWin = eval(Yanfly.Param.ATBLockStatusWin); } if (BattleManager.isATB() && this._atbLockStatusWin) { this.updateWindowPositionsATB(); } else { Yanfly.ATB.Scene_Battle_updateWindowPositions.call(this); } }; Yanfly.ATB.Scene_Battle_isStartActorCommand = Scene_Battle.prototype.isStartActorCommand; Scene_Battle.prototype.isStartActorCommand = function() { if (BattleManager.isATB()) return true; return Yanfly.ATB.Scene_Battle_isStartActorCommand.call(this); }; Scene_Battle.prototype.updateWindowPositionsATB = function() { var activeWin = null; if (this._partyCommandWindow.active) activeWin = this._partyCommandWindow; if (this._actorCommandWindow.active) activeWin = this._actorCommandWindow; if (activeWin === null) return; if (activeWin.x <= Graphics.boxWidth / 2) { this._statusWindow.x = Graphics.boxWidth - this._statusWindow.width; } else { this._statusWindow.x = 0; } }; Yanfly.ATB.Scene_Battle_commandFight = Scene_Battle.prototype.commandFight; Scene_Battle.prototype.commandFight = function() { if (BattleManager.isATB()) { this.startActorCommandSelection(); BattleManager._phase = 'input'; } else { Yanfly.ATB.Scene_Battle_commandFight.call(this); } }; Yanfly.ATB.Scene_Battle_startActorCommandSelection = Scene_Battle.prototype.startActorCommandSelection; Scene_Battle.prototype.startActorCommandSelection = function() { Yanfly.ATB.Scene_Battle_startActorCommandSelection.call(this); if (BattleManager.isATB()) { BattleManager._bypassAtbEndTurn = true; BattleManager.actor().spriteStepForward(); BattleManager.actor().setActionState('undecided'); BattleManager.actor().requestMotionRefresh(); BattleManager.actor().makeActions(); BattleManager._bypassAtbEndTurn = undefined; } }; //============================================================================= // Utilities //============================================================================= Yanfly.Util = Yanfly.Util || {}; Yanfly.Util.displayError = function(e, code, message) { console.log(message); console.log(code || 'NON-EXISTENT'); console.error(e); if (Utils.RPGMAKER_VERSION && Utils.RPGMAKER_VERSION >= "1.6.0") return; if (Utils.isNwjs() && Utils.isOptionValid('test')) { if (!require('nw.gui').Window.get().isDevToolsOpen()) { require('nw.gui').Window.get().showDevTools(); } } }; //============================================================================= // End of File //============================================================================= } else { // Yanfly.BEC.version var text = '================================================================\n'; text += 'YEP_X_AnimatedSVEnemies requires YEP_BattleEngineCore to be at the '; text += 'latest version to run properly.\n\nPlease go to www.yanfly.moe and '; text += 'update to the latest version for the YEP_BattleEngineCore plugin.\n'; text += '================================================================\n'; console.log(text); require('nw.gui').Window.get().showDevTools(); } // Yanfly.BEC.version }; // YEP_BattleEngineCore