//============================================================================= // Yanfly Engine Plugins - Battle Engine Extension - Action Sequence Pack 2 // YEP_X_ActSeqPack2.js //============================================================================= var Imported = Imported || {}; Imported.YEP_X_ActSeqPack2 = true; var Yanfly = Yanfly || {}; Yanfly.ASP2 = Yanfly.ASP2 || {}; Yanfly.ASP2.version = 1.12; //============================================================================= /*: * @plugindesc v1.12 (Requires YEP_BattleEngineCore.js) Visual functions * are added to the Battle Engine Core's action sequences. * @author Yanfly Engine Plugins * * @help * ============================================================================ * Introduction * ============================================================================ * * The Action Sequence Pack 2 plugin is an extension plugin for Yanfly Engine * Plugins' Battle Engine Core. This extension plugin will not work without the * main plugin. * * This extension plugin contains the more basic functions used for customized * action sequences on a visual scale. This plugin focuses on making battlers * perform visual actions. * * ============================================================================ * Action Sequences - ala Melody * ============================================================================ * * Battle Engine Core includes Yanfly Engine Melody's Battle Engine system, * where each individual aspect of the skill and item effects can be controlled * to a degree. These are called Action Sequences, where each command in the * action sequence causes the game to perform a distinct individual action. * * Each skill and item consists of five different action sequences. They are as * follows: * * 1. Setup Actions * They prepare the active battler before carrying out the bulk of the action * and its individual effects. Usually what you see here are things such as the * active battler moving forward a bit, unsheathing their weapon, etc. This step * will occur before the active battler expends their skill or item costs. * * 2. Whole Actions * These actions will affect all of the targets simultaneously. Although this * section does not need to be used, most actions will use this for displaying * animations upon all enemies. This step occurs after skill and item costs. * * 3. Target Actions * This section will affect all of the targets individually. Used primarily * for physical attacks that will deliver more personal forms of damage. Actions * that occur here will not affect other targets unless specifically ordered to * do so otherwise. * * 4. Follow Actions * This section will dedicate towards cleanup work after the individual * targeting actions. Here, it'll do things such as removing immortal flags, * start up common events, and more. * * 5. Finish Actions * This section will have the active battler close up the action sequence. * Usually stuff like running waits and holds at the last minute for skills and * items, moving back to place, and others. * * Now that you know each of the five steps each action sequence goes through, * here's the tags you can insert inside of skills and items. Pay attention to * each tag name. * * 1. 5. * action list action list * action list action list * * * 2. 3. 4. * action list action list action list * action list action list action list * * * They will do their own respective action sets. The methods to insert for the * action list can be found below in the core of the Help Manual. * * Furthermore, to prevent overflooding every single one of your database item's * noteboxes with action sequence lists, there's a shortcut you can take to copy * all of the setup actions, whole actions, target actions, follow actions, and * finish actions with just one line. * * * * Replace x with "item" or "skill" to set the type for the action list code to * directly copy. The integer y is then the ID assigned for that particular * object type. For example, to copy 45th skill's action sequences, the code * would be for anything that will accept these action * codes. If you do use this notetag, it will take priority over any custom * that you've placed in the notebox. * * ============================================================================ * Target Typing * ============================================================================ * * You may notice that in some of the actions below will say "refer to target * typing" which is this section right here. Here's a quick run down on the * various targets you may select. * * user; This will select the active battler. * target, targets; These will select the active targets in question. * actors, existing actors; These will select all living actors. * all actors; This will select all actors including dead ones. * dead actors: This will select only dead actors. * actors not user; This will select all living actors except for the user. * actor x; This will select the actor in slot x. * character x; This will select the specific character with actor ID x. * enemies, existing enemies; This will select all living enemies. * all enemies; This will select all enemies, even dead. * dead enemies: This will select only dead enemies. * enemies not user; This will select all enemies except for the user. * enemy x; This will select the enemy in slot x. * friends; This will select the battler's alive allies. * all friends; This will select the all of battler's allies, even dead. * dead friends; This will select the battler's dead allies. * friends not user; This will select the battler's allies except itself. * friend x: This will select the battler's ally in slot x. * opponents; This will select the battler's alive opponents. * all opponents; This will select the all of the battler's opponents. * dead opponents; This will select the battler's dead opponents. * opponent x: This will select the battler's opponent in slot x. * all alive; Selects all living actors and enemies. * all members; Selects all living and dead actors and enemies. * all dead; Selects all dead actors and enemies. * all not user; This will select all living battlers except user. * focus; Selects the active battler and its targets. * not focus; Selects everything but the active battler and its targets. * * ============================================================================ * Action Sequences - Action List * ============================================================================ * * The following contains a list of the actions you can use inside the five * action sequences. Each action has a unique function and requires certain * formats to operate properly. * *============================================================================= * ATTACK ANIMATION: target, (mirror) *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Displays the active battler's attack animation on the target(s). This will * be the animation determined by the actor's weapon(s). If it's an enemy, it * will be determined by the enemy's attack animation. If 'mirror' is used, * the animation will be flipped. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usage Example: attack animation: target *============================================================================= * *============================================================================= * ENEMY EFFECT: target, effect-type *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * This affects enemies only. Makes the target display either a 'whiten' effect * or a 'blink' effect. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usage Example: enemy effect: targets, whiten * enemy effect: targets, blink *============================================================================= * *============================================================================= * FACE target: args *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * FACE target1: FORWARD * FACE target1: BACKWARD * FACE target1: HOME * FACE target1: AWAY FROM HOME * FACE target1: POINT, x coordinate, y coordinate * FACE target1: AWAY FROM POINT, x coordinate, y coordinate * FACE target1: target2 * FACE target1: AWAY FROM target2 *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * This will cause the battler to face a certain direction. Arguments can be * used in the above formats. This action sequence command will cause target1 * to face any of those directions. If target2 is used, then target1 will face * directions relative to target2. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usage Example: face user: forward * face target: backward * face enemies: home * face allies: away from home * face target: point, 20, 40 * face target: away from point, 500, 600 * face user: target * face target: away from user *============================================================================= * *============================================================================= * FADE OUT: (frames) * FADE IN: (frames) *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Fades the screen out and fades the screen in respectively. You can set the * amount of frames for the fading process. If you omit frames, 60 frames will * be used by default. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usage Example: fade out * fade in: 10 *============================================================================= * *============================================================================= * FLASH SCREEN: args *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * FLASH SCREEN: WHITE, (frames) * FLASH SCREEN: RED, (frames) * FLASH SCREEN: ORANGE, (frames) * FLASH SCREEN: YELLOW, (frames) * FLASH SCREEN: GREEN, (frames) * FLASH SCREEN: BLUE, (frames) * FLASH SCREEN: PURPLE, (frames) * FLASH SCREEN: MAGENTA, (frames) * FLASH SCREEN: BLACK, (frames) * FLASH SCREEN: (red), (green), (blue), (intensity), (frames) *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Causes the game screen to flash a set color. If for the arguments, you use a * color name, it will use a premade flash setting. If you choose to use your * own settings, use the red, green, blue, intensity format to determine what * color flash you would like. Red, green, blue, and intensity settings range * from 0 to 255. If frames are used, that will be the duration of the screen * flash. If omitted, the default frame count will be 60 frames. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usage Example: flash screen: white * flash screen: red, 45 * flash screen: 128, 170, 214, 170 * flash screen: 68, 68, 68, 170, 45 *============================================================================= * *============================================================================= * FLOAT target: (height), (frames) * FLOAT target: (height%), (frames) *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Causes the target to float into the air above the ground by height%. The * height is relative to the floating target. Using 100% means the target will * float above the ground 100% higher than its height. If no '%' sign is used, * the target will float that many pixels rather than a percentage of the * target's height. The frames determine how many frames it will take for the * target to reach that height. Using 0% for the height will bring the target * back to the ground. * Note: Floating only works with Sideview. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usage Example: float user: 200% * float enemies: 500, 30 * float target: 0%, 30 *============================================================================= * *============================================================================= * HIDE BATTLE HUD *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Hides the battle hud to not obstruct any animations being played. You * can reveal the battle hud again using 'show battle hud'. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usage Example: hide battle hud *============================================================================= * *============================================================================= * JUMP target: (height), (frames) * JUMP target: (height%), (frames) *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Causes the target to jump a height relative to the target itself. If the * target jumps a height of 200%, the height will be 200% of the target's * height. If no '%' sign is used, the target will jump that many pixels rather * than a percentage of the target's height. The frame count is how long the * target will be in the air. You can use this with the 'Move' action sequence * to make the target appear like it is jumping a distance. * Note: Jumping only works with Sideview. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usage Example: jump user: 150% * jump target: 300, 60 *============================================================================= * *============================================================================= * MOTION type: target, (no weapon) *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * MOTION WALK: target * MOTION STANDBY: target * MOTION CHANT: target * MOTION GUARD: target * MOTION DAMAGE: target * MOTION EVADE: target * MOTION ATTACK: target * MOTION THRUST: target * MOTION SWING: target * MOTION MISSILE: target * MOTION SKILL: target * MOTION SPELL: target * MOTION ITEM: target * MOTION ESCAPE: target * MOTION VICTORY: target * MOTION DYING: target * MOTION ABNORMAL: target * MOTION SLEEP: target * MOTION DEAD: target *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Forces the target to perform the specific type of action in sideview. If you * issue an action sequence command for the target to perform 'attack', the * target will automatically determine based on the weapon it has equipped to * use either a thrust, swing, or missile motion. Attack, thrust, swing, and * missile will also display the target's weapon if the target has one. * * If 'no weapon' is used after the target, no weapons will be displayed. This * effect will only work with the Thrust, Swing, and Missile motions. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usage Example: motion walk: user * motion thrust: user, no weapon *============================================================================= * *============================================================================= * MOVE target: args *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * MOVE target1: HOME, (frames) * MOVE target1: RETURN, (frames) * MOVE target1: FORWARD, (distance), (frames) * MOVE target1: BACKWARD, (distance), (frames) * MOVE target1: POINT, x coordinate, y coordinate, (frames) * MOVE target1: target2, BASE, (frames), (offset) * MOVE target1: target2, CENTER, (frames), (offset) * MOVE target1: target2, HEAD, (frames), (offset) * MOVE target1: target2, FRONT BASE, (frames), (offset) * MOVE target1: target2, FRONT CENTER, (frames), (offset) * MOVE target1: target2, FRONT HEAD, (frames), (offset) * MOVE target1: target2, BACK BASE, (frames), (offset) * MOVE target1: target2, BACK CENTER, (frames), (offset) * MOVE target1: target2, BACK HEAD, (frames), (offset) *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * This is a move command. Arguments can be used in the above formats. This * action sequence command will move target1 to any of those locations listed * in the arguments. If it's towards target2, you must include what location * relative to target2 for target1 to travel to. * Note: Moving only works with Sideview. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * You may be curious about the optional (offset) argument there for some of * the entries. You can insert any of the below arguments in place of (offset): * * offset x +100 * offset x -200 * offset y +300 * offset y -400 * * This will allow you to offset the distance to the destination by a flat * amount. Positive numbers would indicate forward while negative numbers will * indicate backward. * * auto offset x +500 * auto offset x -600 * * However, if you use either of the above, depending on if the user is an * actor or enemy and depending on the target (if there is one) is an actor or * an enemy, it will move them into position accordingly. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usage Example: move user: home, 20 * move target: forward, 48, 12 * move enemy 1: point, 400, 300 * move enemy 2: point, 500, 250, offset x -50, offset y -50 * move actor 3: target, front base, 20 * move user: target, front base, 20, auto offset x -100 *============================================================================= * *============================================================================= * OPACITY target: x, (frames) * OPACITY target: x%, (frames) *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Changes the opacity of the target to x (0-255) or x% (0% to 100%). If you * use 'frames', that will be the frame duration for the change in opacity for * the target. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usage Example: opacity user: 50%, 30 * opacity not focus: 0 *============================================================================= * *============================================================================= * SHOW BATTLE HUD *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * If the battle hud was hidden using 'hide battle hud', use this to show the * battle hud back within the player's screen. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usage Example: show battle hud *============================================================================= * *============================================================================= * SHAKE SCREEN: (power), (speed), (frames) *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Causes the game screen to shake. Adjust the power from 0-9, speed from 0-9, * and the frames to alter the duration of the screen shaking. If those values * are omitted, they will default to 5 power, 5 speed, and 60 frames. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usage Example: shake screen * shake screen: 9 * shake screen: 3, 9, 30 *============================================================================= * *============================================================================= * TINT SCREEN: args *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * TINT SCREEN: NORMAL, (frames) * TINT SCREEN: DARK, (frames) * TINT SCREEN: SEPIA, (frames) * TINT SCREEN: SUNSET, (frames) * TINT SCREEN: NIGHT, (frames) * TINT SCREEN: (red), (green), (blue), (gray), (frames) *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Tints the battle screen. If using the arguments 'normal', 'dark', 'sepia', * 'sunset', or 'night' the screen will be be given a premade tint. If not, * then the arguments for red, green, blue, and gray values must be inputted * for the tint. Red, green, and blue can range from -255 to 255 while gray * will range from 0 to 255. If frames are used, that will be the duration for * which the screen will change to the tint. If omitted, the default amount of * frames used will be 60 frames. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usage Example: tint screen: normal * tint screen: sepia, 30 * tint screen: 68, -34, -34, 0 * tint screen: 68, -68, 0, 68, 45 *============================================================================= * *============================================================================= * WAIT FOR FLOAT *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Waits for all battler float changes to finish before going on to the next * action in the action sequence. * Note: Floating only works with Sideview. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usage Example: wait for float *============================================================================= * *============================================================================= * WAIT FOR JUMP *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Waits for all battler jumps to finish before going on to the next action * in the action sequence. * Note: Jumping only works with Sideview. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usage Example: wait for jump *============================================================================= * *============================================================================= * WAIT FOR OPACITY *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Waits for all battlers to finish changing opacity before going on to the * next action in the action sequence. *- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Usage Example: wait for opacity *============================================================================= * * ============================================================================ * Changelog * ============================================================================ * * Version 1.12: * - Updated for RPG Maker MV version 1.5.0. * - Added new Offset X, Offset Y, arguments for the Move action sequence. * Check the helpfile for more information. * * Version 1.11: * - Fixed a bug that caused enemies to not mirror the attack animation. * * Version 1.10a: * - Fixed a bug that caused scaled enemies to have their state icons and * overlays appear in odd places. * - Documentation update for Move, Float, and Jump related action sequences as * they only work in Sideview. * * Version 1.09: * - Animations played on a floating or jumping battlers 'Feet' location will * now be played at the base of the battler regardless of how high the battler * is floating. This is to provide a more consistent animation image. * * Version 1.08a: * - State Icon and State Overlays will now synch together for floating and * jumping battlers. * * Version 1.07c: * - Synchronized battle animations to floating and jumping battlers. * * Version 1.06: * - Updated weapon motions for YEP_X_AnimatedSVEnemies to work with sideview * enemies. * * Version 1.05: * - Creating compatibility for a future plugin. * * Version 1.04a: * - Rewrote and updated movement formulas. * * Version 1.03: * - Made a change to Motion action sequence. 'Wait' is now substituted for * 'Standby' as to not confuse it with the actual Motion Wait action sequence. * - Added a 'no weapon' option to Motion action sequences. This new tag will * only affect the 'Thrust', 'Swing', and 'Missile' motions. * * Version 1.02: * - Added a check for motion attack to differentiate between actor and enemy. * * Version 1.01: * - Updated help file to include Character X for target typing. * * Version 1.00: * - Finished plugin! */ //============================================================================= if (Imported.YEP_BattleEngineCore) { //============================================================================= // Parameters //============================================================================= Yanfly.Parameters = PluginManager.parameters('YEP_X_ActSeqPack2'); Yanfly.Param = Yanfly.Param || {}; //============================================================================= // BattleManager //============================================================================= Yanfly.ASP2.BattleManager_processActionSequence = BattleManager.processActionSequence; BattleManager.processActionSequence = function(actionName, actionArgs) { // ATTACK ANIMATION if (actionName === 'ATTACK ANIMATION') { return this.actionAttackAnimation(actionArgs); } // ENEMY EFFECT if (actionName === 'ENEMY EFFECT') { return this.actionEnemyEffect(actionArgs); } // FACE TARGET if (actionName.match(/FACE[ ](.*)/i)) { var string = String(RegExp.$1); if (this.makeActionTargets(string).length > 0) { return this.actionFace(string, actionArgs); } } // FADE IN, FADE OUT if (['FADE IN', 'FADE OUT'].contains(actionName)) { return this.actionFadeScreen(actionName, actionArgs); } // FLASH SCREEN if (actionName === 'FLASH SCREEN') { return this.actionFlashScreen(actionArgs); } // FLOAT TARGET if (actionName.match(/FLOAT[ ](.*)/i)) { var string = String(RegExp.$1); if (this.makeActionTargets(string).length > 0) { return this.actionFloat(string, actionArgs); } } // HIDE BATTLE HUD, SHOW BATTLE HUD if (['HIDE BATTLE HUD', 'SHOW BATTLE HUD'].contains(actionName)) { return this.actionBattleHud(actionName); } // JUMP TARGET if (actionName.match(/JUMP[ ](.*)/i)) { var string = String(RegExp.$1); if (this.makeActionTargets(string).length > 0) { return this.actionJump(string, actionArgs); } } // MOTION TYPE if (actionName.match(/MOTION[ ](.*)/i)) { return this.actionMotionTarget(String(RegExp.$1), actionArgs); } // MOVE TARGET if (actionName.match(/MOVE[ ](.*)/i)) { var string = String(RegExp.$1); if (this.makeActionTargets(string).length > 0) { return this.actionMove(string, actionArgs); } } // OPACITY TARGET if (actionName.match(/OPACITY[ ](.*)/i)) { var string = String(RegExp.$1); if (this.makeActionTargets(string).length > 0) { return this.actionOpacity(string, actionArgs); } } // SHAKE SCREEN if (actionName === 'SHAKE SCREEN') { return this.actionShakeScreen(actionArgs); } // TINT SCREEN if (actionName === 'TINT SCREEN') { return this.actionTintScreen(actionArgs); } // WAIT FOR FLOAT if (actionName === 'WAIT FOR FLOAT') { return this.actionWaitForFloat(); } // WAIT FOR JUMP if (actionName === 'WAIT FOR JUMP') { return this.actionWaitForJump(); } // WAIT FOR OPACITY if (actionName === 'WAIT FOR OPACITY') { return this.actionWaitForOpacity(); } return Yanfly.ASP2.BattleManager_processActionSequence.call(this, actionName, actionArgs); }; BattleManager.actionAttackAnimation = function(actionArgs) { var targets = this.makeActionTargets(actionArgs[0]); var mirror = false; if (actionArgs[1] && actionArgs[1].toUpperCase() === 'MIRROR') mirror = true; if (mirror) { this._logWindow.showActorAtkAniMirror(this._subject, targets.filter(Yanfly.Util.onlyUnique)); } else { this._logWindow.showAttackAnimation(this._subject, targets.filter(Yanfly.Util.onlyUnique)); } return true; }; BattleManager.actionBattleHud = function(actionName) { if (actionName === 'HIDE BATTLE HUD') { this._windowLayer.x = Graphics.boxWidth * 495; } else if (actionName === 'SHOW BATTLE HUD') { this._windowLayer.x = 0; } return false; } BattleManager.actionEnemyEffect = function(actionArgs) { var targets = this.makeActionTargets(actionArgs[0]); if (targets.length < 1) return true; if (actionArgs[1].toUpperCase() === 'WHITEN') { targets.forEach(function(target) { if (target.isEnemy()) target.requestEffect('whiten'); }); } else if (actionArgs[1].toUpperCase() === 'BLINK') { targets.forEach(function(target) { if (target.isEnemy()) target.requestEffect('blink'); }); } return true; }; BattleManager.actionFace = function(name, actionArgs) { var movers = this.makeActionTargets(name); if (movers.length < 1) return true; var cmd = actionArgs[0].toUpperCase(); if (['FORWARD', 'NORMAL'].contains(cmd)) { movers.forEach(function(mover) { mover.spriteFaceForward(); }); } else if (['BACKWARD', 'MIRROR'].contains(cmd)) { movers.forEach(function(mover) { mover.spriteFaceBackward(); }); } else if (['HOME', 'ORIGIN'].contains(cmd)) { movers.forEach(function(mover) { mover.spriteFaceHome(); }); } else if (['AWAY FROM HOME', 'AWAY FROM ORIGIN'].contains(cmd)) { movers.forEach(function(mover) { mover.spriteFaceAwayHome(); }); } else if (['POINT', 'POSITION', 'COORDINATE', 'SCREEN', 'SCREEN POS', 'COORDINATES'].contains(cmd)) { var destX = eval(actionArgs[1]) || 0; var destY = eval(actionArgs[2]) || 0; movers.forEach(function(mover) { mover.spriteFacePoint(destX, destY); }); } else if (['AWAY FROM POINT', 'AWAY FROM POSITION', 'AWAY FROM COORDINATE', 'AWAY FROM SCREEN', 'AWAY FROM SCREEN POS', 'AWAY FROM COORDINATES'].contains(cmd)) { var destX = eval(actionArgs[1]) || 0; var destY = eval(actionArgs[2]) || 0; movers.forEach(function(mover) { mover.spriteFaceAwayPoint(destX, destY); }); } else if (cmd.match(/AWAY[ ]FROM[ ](.*)/i)) { var targets = this.makeActionTargets(String(RegExp.$1)); if (targets.length < 1) return false; var destX = 0; var destY = 0; targets.forEach(function(target) { destX += target.spritePosX(); destY += target.spritePosY(); }, this); destX /= targets.length; destY /= targets.length; movers.forEach(function(mover) { mover.spriteFaceAwayPoint(destX, destY); }, this); } else { var targets = this.makeActionTargets(actionArgs[0]); if (targets.length < 1) return false; var destX = 0; var destY = 0; targets.forEach(function(target) { destX += target.spritePosX(); destY += target.spritePosY(); }, this); destX /= targets.length; destY /= targets.length; movers.forEach(function(mover) { mover.spriteFacePoint(destX, destY); }, this); } return false; }; BattleManager.actionFadeScreen = function(actionName, actionArgs) { var frames = actionArgs[0] || 60; if (actionName === 'FADE IN') { $gameScreen.startFadeIn(frames); } else if (actionName === 'FADE OUT') { $gameScreen.startFadeOut(frames); } return false; }; BattleManager.actionFlashScreen = function(actionArgs) { if (actionArgs[0].toUpperCase() === 'WHITE') { var flash = [255, 255, 255, 255]; var frames = actionArgs[1] || 60; } else if (actionArgs[0].toUpperCase() === 'RED') { var flash = [255, 0, 0, 255]; var frames = actionArgs[1] || 60; } else if (actionArgs[0].toUpperCase() === 'ORANGE') { var flash = [255, 128, 0, 255]; var frames = actionArgs[1] || 60; } else if (actionArgs[0].toUpperCase() === 'YELLOW') { var flash = [255, 255, 0, 255]; var frames = actionArgs[1] || 60; } else if (actionArgs[0].toUpperCase() === 'GREEN') { var flash = [0, 255, 0, 255]; var frames = actionArgs[1] || 60; } else if (actionArgs[0].toUpperCase() === 'BLUE') { var flash = [0, 128, 255, 255]; var frames = actionArgs[1] || 60; } else if (actionArgs[0].toUpperCase() === 'PURPLE') { var flash = [128, 64, 255, 255]; var frames = actionArgs[1] || 60; } else if (actionArgs[0].toUpperCase() === 'MAGENTA') { var flash = [255, 0, 255, 255]; var frames = actionArgs[1] || 60; } else if (actionArgs[0].toUpperCase() === 'BLACK') { var flash = [0, 0, 0, 255]; var frames = actionArgs[1] || 60; } else { var red = actionArgs[0] || 0; var green = actionArgs[1] || 0; var blue = actionArgs[2] || 0; var intensity = actionArgs[3] || 0; var frames = actionArgs[4] || 60; var flash = [parseInt(red), parseInt(green), parseInt(blue), parseInt(intensity)]; } $gameScreen.startFlash(flash, frames); return false; }; BattleManager.actionFloat = function(name, actionArgs) { var movers = this.makeActionTargets(name); if (movers.length < 1) return true; var cmd = actionArgs[0]; var frames = actionArgs[1] || 12; var pixels = 0; if (cmd.match(/(\d+)([%%])/i)) { var floatPeak = parseFloat(RegExp.$1 * 0.01); } else if (cmd.match(/(\d+)/i)) { pixels = parseInt(RegExp.$1); var floatPeak = 0.0; } else { var floatPeak = 1.0; } movers.forEach(function(mover) { var floatRate = floatPeak + (pixels / mover.spriteHeight()); mover.spriteFloat(floatRate, frames); }); return false; }; BattleManager.actionJump = function(name, actionArgs) { var movers = this.makeActionTargets(name); if (movers.length < 1) return true; var cmd = actionArgs[0]; var frames = actionArgs[1] || 12; var pixels = 0; if (cmd.match(/(\d+)([%%])/i)) { var jumpPeak = parseFloat(RegExp.$1 * 0.01); } else if (cmd.match(/(\d+)/i)) { pixels = parseInt(RegExp.$1); var jumpPeak = 0.0; } else { var jumpPeak = 1.0; } movers.forEach(function(mover) { var jumpRate = jumpPeak + (pixels / mover.spriteHeight()); mover.spriteJump(jumpRate, frames); }); return true; }; BattleManager.actionMotionTarget = function(name, actionArgs) { if (name.toUpperCase() === 'WAIT') return this.actionMotionWait(actionArgs); if (name.toUpperCase() === 'STANDBY') name = 'WAIT'; var movers = this.makeActionTargets(actionArgs[0]); if (movers.length < 1) return true; var cmd = name.toLowerCase(); var motion = 'wait'; if (actionArgs[1] && actionArgs[1].toUpperCase() === 'NO WEAPON') { var showWeapon = false; } else { var showWeapon = true; } if (['wait', 'chant', 'guard', 'evade', 'skill', 'spell', 'item', 'escape', 'victory', 'dying', 'abnormal', 'sleep', 'dead'].contains(cmd)) { motion = cmd; } else if (['walk', 'move'].contains(cmd)) { motion = 'walk'; } else if (['damage', 'hit'].contains(cmd)) { motion = 'damage'; } else if (['attack'].contains(cmd)) { movers.forEach(function(mover) { mover.performAttack(); }); return false; } else if (['randattack'].contains(cmd)) { var motions = ['thrust', 'swing', 'missile']; movers.forEach(function(mover) { var motion = motions[Math.floor(Math.random() * motions.length)]; mover.forceMotion(motion); }); return false; } else if (['thrust', 'swing', 'missile'].contains(cmd)) { motion = cmd; movers.forEach(function(mover) { mover.forceMotion(motion); if (mover.isActor() && showWeapon) { var weapons = mover.weapons(); var wtypeId = weapons[0] ? weapons[0].wtypeId : 0; var attackMotion = $dataSystem.attackMotions[wtypeId]; if (attackMotion && [0, 1, 2].contains(attackMotion.type)) { mover.startWeaponAnimation(attackMotion.weaponImageId); } } if (Imported.YEP_X_AnimatedSVEnemies) { if (mover.isEnemy() && mover.hasSVBattler() && showWeapon) { var attackMotion = $dataSystem.attackMotions[wtypeId]; mover.startWeaponAnimation(mover.weaponImageId()); } } }); return false; } movers.forEach(function(mover) { mover.forceMotion(motion); }); return false; }; BattleManager.actionMove = function(name, actionArgs) { if (!$gameSystem.isSideView()) return true; var movers = this.makeActionTargets(name); if (movers.length < 1) return true; var cmd = actionArgs[0].toUpperCase(); if (['HOME', 'ORIGIN'].contains(cmd)) { var frames = actionArgs[1] || 12; movers.forEach(function(mover) { mover.battler().startMove(0, 0, frames); mover.requestMotion('walk'); mover.spriteFaceHome(); }); } else if (['RETURN'].contains(cmd)) { var frames = actionArgs[1] || 12; movers.forEach(function(mover) { mover.battler().startMove(0, 0, frames); mover.requestMotion('evade'); mover.spriteFaceForward(); }); } else if (['FORWARD', 'FORWARDS', 'BACKWARD', 'BACKWARDS'].contains(cmd)) { var distance = actionArgs[1] || Yanfly.Param.BECStepDist; if (['BACKWARD', 'BACKWARDS'].contains(cmd)) distance *= -1; var frames = actionArgs[2] || 12; movers.forEach(function(mover) { mover.battler().moveForward(distance, frames); mover.requestMotion('walk'); if (['FORWARD', 'FORWARDS'].contains(cmd)) { mover.spriteFaceForward(); } else { mover.spriteFaceBackward(); } }); } else if (['POINT', 'POSITION', 'COORDINATE', 'SCREEN', 'SCREEN POS', 'COORDINATES'].contains(cmd)) { var destX = eval(actionArgs[1]) || 0; var destY = eval(actionArgs[2]) || 0; var frames = actionArgs[3] || 12; movers.forEach(function(mover) { var offsetX = BattleManager.actionMoveOffsetX(actionArgs, mover, mover); var offsetY = BattleManager.actionMoveOffsetY(actionArgs, mover, mover); mover.battler().moveToPoint(destX + offsetX, destY + offsetY, frames); mover.requestMotion('walk'); mover.spriteFacePoint(destX, destY); }); } else { var targets = this.makeActionTargets(actionArgs[0]); var frames = actionArgs[2] || 12; var type = actionArgs[1].toUpperCase(); if (targets.length < 1) return false; for (var i = 0; i < movers.length; ++i) { var mover = movers[i]; if (!mover) continue; if (['BASE', 'FOOT', 'FEET'].contains(type)) { var destX = this.actionMoveX(mover, targets, 'center'); var destY = this.actionMoveY(mover, targets, 'foot'); } else if (['CENTER', 'MIDDLE'].contains(type)) { var destX = this.actionMoveX(mover, targets, 'center'); var destY = this.actionMoveY(mover, targets, 'center'); } else if (['HEAD', 'TOP'].contains(type)) { var destX = this.actionMoveX(mover, targets, 'center'); var destY = this.actionMoveY(mover, targets, 'head'); } else if (['FRONT BASE', 'FRONT FOOT', 'FRONT FEET', 'FRONT'].contains(type)) { var destX = this.actionMoveX(mover, targets, 'front'); var destY = this.actionMoveY(mover, targets, 'foot'); } else if (['BACK BASE', 'BACK FOOT', 'BACK FEET', 'BACK'].contains(type)) { var destX = this.actionMoveX(mover, targets, 'back'); var destY = this.actionMoveY(mover, targets, 'foot'); } else if (['FRONT CENTER', 'FRONT MIDDLE'].contains(type)) { var destX = this.actionMoveX(mover, targets, 'front'); var destY = this.actionMoveY(mover, targets, 'center'); } else if (['BACK CENTER', 'BACK MIDDLE',].contains(type)) { var destX = this.actionMoveX(mover, targets, 'back'); var destY = this.actionMoveY(mover, targets, 'center'); } else if (['FRONT HEAD', 'FRONT TOP'].contains(type)) { var destX = this.actionMoveX(mover, targets, 'front'); var destY = this.actionMoveY(mover, targets, 'head'); } else if (['BACK HEAD', 'BACK TOP'].contains(type)) { var destX = this.actionMoveX(mover, targets, 'back'); var destY = this.actionMoveY(mover, targets, 'head'); } var offsetX = this.actionMoveOffsetX(actionArgs, mover, targets[0]); var offsetY = this.actionMoveOffsetY(actionArgs, mover, targets[0]); mover.battler().moveToPoint(destX + offsetX, destY + offsetY, frames); mover.spriteFacePoint(destX, destY); } } return true; }; BattleManager.actionMoveX = function(mover, targets, value) { value = this.actionMoveXLocation(mover, targets, value); var max = targets.length; var moverWidth = mover.spriteWidth(); if (value === 'center') { var destX = null; } else { var destX = (value === 'left') ? Graphics.boxWidth : 0; } for (var i = 0; i < max; ++i) { var target = targets[i]; if (!target) continue; var targetWidth = target.spriteWidth(); var point = target.spritePosX(); if (value === 'center') { destX = (destX === null) ? 0 : destX; destX += point; } else if (value === 'left') { point -= targetWidth / 2; point -= (mover.isActor() ? 1 : 1) * moverWidth / 2; destX = Math.min(point, destX); } else { point += targetWidth / 2; point += (mover.isActor() ? 1 : 1) * moverWidth / 2; destX = Math.max(point, destX); } } if (value === 'center') destX /= max; return destX; }; BattleManager.actionMoveXLocation = function(mover, targets, value) { if (value === 'center') return 'center'; var actors = 0; var enemies = 0; var max = targets.length; for (var i = 0; i < max; ++i) { var target = targets[i]; if (!target) continue; if (target.isActor()) actors += 1; if (target.isEnemy()) enemies += 1; } if (actors > 0 && enemies === 0) { return (value === 'front') ? 'left' : 'right'; } else if (actors === 0 && enemies > 0) { return (value === 'front') ? 'right' : 'left'; } else { if (mover.isActor()) { return (value === 'front') ? 'right' : 'left'; } else { // enemy return (value === 'front') ? 'left' : 'right'; } } return 'center'; }; BattleManager.actionMoveY = function(mover, targets, value) { var max = targets.length; var destY = 0; var point = (value === 'head') ? Graphics.boxHeight : 0; for (var i = 0; i < max; ++i) { var target = targets[i]; if (!target) continue; if (value === 'head') { point = Math.min(target.spritePosY() - target.spriteHeight(), point); } else if (value === 'center') { point += target.spritePosY() - target.spriteHeight() / 2; } else { // foot point = Math.max(target.spritePosY(), point); } } destY = (value === 'center') ? point / max : point; return destY; }; BattleManager.actionMoveOffsetX = function(actionArgs, user, target) { if (actionArgs && actionArgs.length > 0) { var length = actionArgs.length; for (var i = 0; i < length; ++i) { var line = actionArgs[i]; if (line.match(/AUTO OFFSET X[ ]([\+\-]\d+)/i)) { var value = parseInt(RegExp.$1); if (user.isActor() && !target) { return value * -1; } else if (user.isEnemy() && !target) { return value; } else if (user.isActor() && target.isActor()) { return value; } else if (user.isActor() && target.isEnemy()) { return value * -1; } else if (user.isEnemy() && target.isEnemy()) { return value * -1; } else if (user.isEnemy() && target.isActor()) { return value; } } else if (line.match(/OFFSET X[ ]([\+\-]\d+)/i)) { return parseInt(RegExp.$1); } } } return 0; }; BattleManager.actionMoveOffsetY = function(actionArgs, user, target) { if (actionArgs && actionArgs.length > 0) { var length = actionArgs.length; for (var i = 0; i < length; ++i) { var line = actionArgs[i]; if (line.match(/AUTO OFFSET Y[ ]([\+\-]\d+)/i)) { return parseInt(RegExp.$1); } else if (line.match(/OFFSET Y[ ]([\+\-]\d+)/i)) { return parseInt(RegExp.$1); } } } return 0; }; BattleManager.actionOpacity = function(name, actionArgs) { var targets = this.makeActionTargets(name); if (targets.length < 1) return true; var cmd = actionArgs[0]; var frames = actionArgs[1] || 12; if (cmd.match(/(\d+)([%%])/i)) { var opacity = parseInt(RegExp.$1 * 0.01 * 255).clamp(0, 255); } else if (cmd.match(/(\d+)/i)) { var opacity = parseInt(RegExp.$1); } else { return false; } targets.forEach(function(target) { target.spriteOpacity(opacity, frames); }); return false; }; BattleManager.actionTintScreen = function(actionArgs) { if (actionArgs[0].toUpperCase() === 'NORMAL') { var tint = [0, 0, 0, 0]; var frames = actionArgs[1] || 60; } else if (actionArgs[0].toUpperCase() === 'DARK') { var tint = [-68, -68, -68, 0]; var frames = actionArgs[1] || 60; } else if (actionArgs[0].toUpperCase() === 'SEPIA') { var tint = [34, -34, -68, 170]; var frames = actionArgs[1] || 60; } else if (actionArgs[0].toUpperCase() === 'SUNSET') { var tint = [68, -34, -34, 0]; var frames = actionArgs[1] || 60; } else if (actionArgs[0].toUpperCase() === 'NIGHT') { var tint = [68, -68, 0, 68]; var frames = actionArgs[1] || 60; } else { var red = actionArgs[0] || 0; var green = actionArgs[1] || 0; var blue = actionArgs[2] || 0; var gray = actionArgs[3] || 0; var frames = actionArgs[4] || 60; var tint = [parseInt(red), parseInt(green), parseInt(blue), parseInt(gray)]; } $gameScreen.startTint(tint, frames); return false; }; BattleManager.actionShakeScreen = function(actionArgs) { var power = actionArgs[0] || 5; var speed = actionArgs[1] || 5; var frames = actionArgs[2] || 60; $gameScreen.startShake(parseInt(power), parseInt(speed), parseInt(frames)); return false; }; BattleManager.actionWaitForFloat = function() { this._logWindow.waitForFloat(); return false; }; BattleManager.actionWaitForJump = function() { this._logWindow.waitForJump(); return false; }; BattleManager.actionWaitForOpacity = function() { this._logWindow.waitForOpacity(); return false; }; BattleManager.setWindowLayer = function(windowLayer) { this._windowLayer = windowLayer; }; //============================================================================= // Sprite_Battler //============================================================================= Yanfly.ASP2.Sprite_Battler_initMembers = Sprite_Battler.prototype.initMembers; Sprite_Battler.prototype.initMembers = function() { Yanfly.ASP2.Sprite_Battler_initMembers.call(this); this.resetFloat(); this.setupJump(0, 0); this.resetOpacity(); }; Sprite_Battler.prototype.resetFloat = function() { this._floatHeight = 0.0; this._floatTarget = 0; this._floatDur = 0; this._floatRate = 0; }; Sprite_Battler.prototype.resetOpacity = function() { this._opacityTarget = 255; this._opacityDur = 0; this._opacityRate = 0; this._opacityChanging = false; }; Sprite_Battler.prototype.setupFloat = function(floatHeight, floatDuration) { floatDuration = Math.max(1, floatDuration); this._floatTarget = floatHeight; this._floatDur = floatDuration; var rate = Math.abs(this._floatHeight - floatHeight) / floatDuration; this._floatRate = rate; }; Sprite_Battler.prototype.setupJump = function(jumpHeight, jumpDuration) { this._jumpHeight = jumpHeight; this._jumpDur = jumpDuration; this._jumpFull = jumpDuration; }; Sprite_Battler.prototype.setupOpacityChange = function(target, duration) { duration = Math.max(1, duration); this._opacityTarget = target; this._opacityDur = duration; var rate = Math.abs(this.opacity - target) / duration; this._opacityRate = rate; this._opacityChanging = true; }; Yanfly.ASP2.Sprite_Battler_update = Sprite_Battler.prototype.update; Sprite_Battler.prototype.update = function() { Yanfly.ASP2.Sprite_Battler_update.call(this); if (this._battler) { this.updateFloat(); this.updateStateSprites(); this.updateWeapon(); this.updateOpacity(); } }; Sprite_Battler.prototype.updateFloat = function() { if (!this._battler) return; if (this._floatDur > 0) this._floatDur--; if (this._jumpDur > 0) this._jumpDur--; var baseY = this._battler.anchorY(); var floatHeight = this.getFloatHeight(); var jumpHeight = this.getJumpHeight(); var height = floatHeight + jumpHeight; if (this._mainSprite && this._mainSprite.bitmap) { var rate = this._battler.spriteHeight() / this._mainSprite.height; this._mainSprite.anchor.y = (baseY + height * rate); this._weaponSprite.anchor.y = this._mainSprite.anchor.y; } else { this.anchor.y = (baseY + height); } }; Sprite_Battler.prototype.updateStateSprites = function() { if (this._stateIconSprite) { var height = this._battler.spriteHeight() * -1; height -= Sprite_StateIcon._iconHeight; height /= this.scale.y; this._stateIconSprite.y = height; } if (this._stateSprite) { var height = (this._battler.spriteHeight() - 64 * this.scale.y) * -1; this._stateSprite.y = height; } var heightRate = 0; heightRate += this.getFloatHeight(); heightRate += this.getJumpHeight(); if (Imported.YEP_X_AnimatedSVEnemies) { if (this._enemy && this._enemy.isFloating()) { heightRate += this.addFloatingHeight(); }; } var height = this._battler.spriteHeight(); if (this._stateIconSprite) { this._stateIconSprite.y += Math.ceil(heightRate * -height); } if (this._stateSprite) { this._stateSprite.y += Math.ceil(heightRate * -height); } }; Sprite_Battler.prototype.updateWeapon = function() { if (!this._battler) return; if (!this._battler.isActor()) return; this._weaponSprite.anchor.y = this._mainSprite.anchor.y; }; Sprite_Battler.prototype.getFloatHeight = function() { if (this._floatDur <= 0) { this._floatHeight = this._floatTarget; } else { var target = this._floatTarget; var rate = this._floatRate; if (this._floatHeight >= target) { this._floatHeight = Math.max(target, this._floatHeight - rate); } else { this._floatHeight = Math.min(target, this._floatHeight + rate); } } return this._floatHeight; }; Sprite_Battler.prototype.getJumpHeight = function() { if (this._jumpDur <= 0) { return 0; } else { var x = this._jumpFull - this._jumpDur; var h = this._jumpFull / 2; var k = this._jumpHeight; var a = -k / Math.pow(h, 2); var height = a * Math.pow((x - h), 2) + k; } return height; }; Sprite_Battler.prototype.updateOpacity = function() { if (this.antiOpacityChange()) return; this._opacityDur--; if (this._opacityDur <= 0) { if (this.opacity !== this._opacityTarget) { this.opacity = this._opacityTarget; } this._opacityChanging = false; } else { var target = this._opacityTarget; var rate = this._opacityRate; if (this.opacity >= target) { this.opacity = Math.max(target, this.opacity - rate); } else { this.opacity = Math.min(target, this.opacity + rate); } } }; Sprite_Battler.prototype.antiOpacityChange = function() { if (!this._opacityChanging) return true; return false; }; Sprite_Battler.prototype.isFloating = function() { return this._floatDur > 0; }; Sprite_Battler.prototype.isJumping = function() { return this._jumpDur > 0; }; Sprite_Battler.prototype.isChangingOpacity = function() { return this._opacityDur > 0; }; //============================================================================= // Sprite_Animation //============================================================================= Yanfly.ASP2.Sprite_Animation_updatePosition = Sprite_Animation.prototype.updatePosition; Sprite_Animation.prototype.updatePosition = function() { Yanfly.ASP2.Sprite_Animation_updatePosition.call(this); if ([0, 1].contains(this._animation.position)) { if (this.isBattlerRelated()) this.updateBattlerPosition(); } }; Sprite_Animation.prototype.isBattlerRelated = function() { if (this._target instanceof Sprite_Battler) return true; if (this._target.parent instanceof Sprite_Battler) return true; return false; }; Sprite_Animation.prototype.updateBattlerPosition = function() { if (this._target instanceof Sprite_Battler) { var target = this._target; } else if (this._target.parent instanceof Sprite_Battler) { var target = this._target.parent; } else { return; } if (!target.bitmap) return; if (target.bitmap.height <= 0) return; var heightRate = target.getFloatHeight() + target.getJumpHeight(); var height = heightRate * target.bitmap.height; this.y -= height; }; //============================================================================= // Spriteset_Battle //============================================================================= Spriteset_Battle.prototype.isAnyoneFloating = function() { return this.battlerSprites().some(function(sprite) { return sprite.isFloating(); }); }; Spriteset_Battle.prototype.isAnyoneJumping = function() { return this.battlerSprites().some(function(sprite) { return sprite.isJumping(); }); }; Spriteset_Battle.prototype.isAnyoneChangingOpacity = function() { return this.battlerSprites().some(function(sprite) { return sprite.isChangingOpacity(); }); }; //============================================================================= // Game_Battler //============================================================================= Game_Battler.prototype.spriteFloat = function(floatHeight, floatDuration) { if (!this.battler()) return; if (!this.spriteCanMove()) return; if (!$gameSystem.isSideView()) return; this.battler().setupFloat(floatHeight, floatDuration); }; Game_Battler.prototype.spriteJump = function(jumpHeight, jumpDuration) { if (!this.battler()) return; if (!this.spriteCanMove()) return; if (!$gameSystem.isSideView()) return; this.battler().setupJump(jumpHeight, jumpDuration); }; Game_Battler.prototype.spriteOpacity = function(opacity, duration) { if (!this.battler()) return; this.battler().setupOpacityChange(opacity, duration); }; //============================================================================= // Scene_Battle //============================================================================= Yanfly.ASP2.Scene_Base_createWindowLayer = Scene_Base.prototype.createWindowLayer; Scene_Base.prototype.createWindowLayer = function() { Yanfly.ASP2.Scene_Base_createWindowLayer.call(this); BattleManager.setWindowLayer(this._windowLayer); }; //============================================================================= // Window_BattleLog //============================================================================= Yanfly.ASP2.Window_BattleLog_updateWaitMode = Window_BattleLog.prototype.updateWaitMode; Window_BattleLog.prototype.updateWaitMode = function() { if (this._waitMode === 'float') { if (this._spriteset.isAnyoneFloating()) return true; } else if (this._waitMode === 'jump') { if (this._spriteset.isAnyoneJumping()) return true; } else if (this._waitMode === 'opacity') { if (this._spriteset.isAnyoneChangingOpacity()) return true; } return Yanfly.ASP2.Window_BattleLog_updateWaitMode.call(this); }; Window_BattleLog.prototype.waitForFloat = function() { this.setWaitMode('float'); }; Window_BattleLog.prototype.waitForJump = function() { this.setWaitMode('jump'); }; Window_BattleLog.prototype.waitForOpacity = function() { this.setWaitMode('opacity'); }; //============================================================================= // End of File //============================================================================= };