//=============================================================================
// Yanfly Engine Plugins - Battle Engine Extension - Action Sequence Pack 1
// YEP_X_ActSeqPack1.js
//=============================================================================
var Imported = Imported || {};
Imported.YEP_X_ActSeqPack1 = true;
var Yanfly = Yanfly || {};
Yanfly.ASP1 = Yanfly.ASP1 || {};
Yanfly.ASP1.version = 1.13;
//=============================================================================
/*:
* @plugindesc v1.13 (Requires YEP_BattleEngineCore.js) Basic functions are
* added to the Battle Engine Core's action sequences.
* @author Yanfly Engine Plugins
*
* @param Default Volume
* @desc This will be the volume of the BGM played.
* @type number
* @min 0
* @max 100
* @default 90
*
* @param Default Pitch
* @type number
* @min 0
* @max 100
* @desc This will be the pitch of the BGM played.
* @default 100
*
* @param Default Pan
* @type number
* @min 0
* @max 100
* @desc This will be the pan of the BGM played.
* @default 0
*
* @help
* ============================================================================
* Introduction
* ============================================================================
*
* The Action Sequence Pack 1 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 technical scale. Here, you are able to change switches,
* operate variables, add states, change damage rates, and more.
*
* ============================================================================
* 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.
*
*=============================================================================
* ACTION ANIMATION: (target), (mirror)
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Plays the animation assigned to the skill/item. The animation will
* automatically select the skill's/item's assigned targets. If 'target' is
* used, it will specify a target to play the animation on. If 'mirror' is
* used, it will mirror the animation.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: action animation
* action animation: target
* action animation: user, mirror
*=============================================================================
*
*=============================================================================
* ACTION COMMON EVENT
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Plays the common event found within the skill's/item's traits list. This
* will only play the last common event on the list, following the game
* engine's original process. Nothing else will continue on the action list
* until the common event is finished (unless it is a forced action, in which
* case, it will wait until the action is complete first).
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: action common event
*=============================================================================
*
*=============================================================================
* ACTION EFFECT: target
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Causes the target(s) to take damage/healing from the skill/item and
* incurs any changes made to the target(s) such as buffs and states.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: action effect
*=============================================================================
*
*=============================================================================
* ADD stat BUFF: target, (turns), (show)
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Affects the target with 'stat' buff. Replace 'stat' with 'hp', 'mp', 'atk',
* 'def', 'mat', 'mdf', 'agi', or 'luk'. If you include a number after the
* target, it will buff the target by that many turns. Include 'show' and it
* will show the target getting the buff applied in the battle log.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: add atk buff: user, 3, show
* add def buff: target, 8
*=============================================================================
*
*=============================================================================
* ADD stat DEBUFF: target, (turns), (show)
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Affects the target with 'stat' debuff. Replace 'stat' with 'hp', 'mp',
* 'atk', 'def', 'mat', 'mdf', 'agi', or 'luk'. If you include a number after
* the target, it will debuff the target by that many turns. Include 'show' and
* it will show the target getting the debuff applied in the battle log.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: add atk debuff: user, 3, show
* add def debuff: target, 8
*=============================================================================
*
*=============================================================================
* ADD STATE X: target, (show)
* ADD STATE X, Y, Z: target (show)
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Affects the target with X state (including Y and Z if used in that format).
* If 'show' is included, it will display any state related messages.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: add state 5: target
* add state 6, 7, 8: user, show
*=============================================================================
*
*=============================================================================
* ANIMATION X: target, (mirror)
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Plays animation X on target. 'Mirror' will cause the animation to appear
* mirrored. Keep in mind that animations played on actors will automatically
* be mirrored and setting the mirror option will reverse it and have it appear
* unmirrored.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: animation 5: user
* animation 6: target, mirror
*=============================================================================
*
*=============================================================================
* ANIMATION WAIT: X
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Waits x animaiton frames. Each frame for an animation does not last one game
* frame, but instead, several. To make life easier, you can use this to have
* the game wait x frames played for the animation.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: animation 5: user
* animation 6: target, mirror
*=============================================================================
*
*=============================================================================
* BGM: STOP
* BGM: MEMORIZE
* BGM: MEMORY
* BGM: filename, (volume), (pitch), (pan)
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Changes the current background music at hand. 'Stop' will stop any BGM from
* playing. 'Memorize' will memorize the current BGM. 'Memory' will replay the
* memorized BGM if there is one playing. If you choose a filename (without the
* filename extensions), the game will play that BGM instead. Using this
* option opens up access to the volume, pitch, and pan control, all of which
* are optional to use. If no values are inputed for volume, pitch, and pan,
* the game will use the settings in this plugin's parameters.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: bgm: stop
* bgm: memorize
* bgm: memory
* bgm: Battle7
* bgm: Theme2, 80, 100, 0
*=============================================================================
*
*=============================================================================
* BGS: STOP
* BGS: MEMORIZE
* BGS: MEMORY
* BGS: filename, (volume), (pitch), (pan)
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Changes the current background sound at hand. 'Stop' will stop any BGS from
* playing. 'Memorize' will memorize the current BGS. 'Memory' will replay the
* memorized BGS if there is one playing. If you choose a filename (without the
* filename extensions), the game will play that BGS instead. Using this
* option opens up access to the volume, pitch, and pan control, all of which
* are optional to use. If no values are inputed for volume, pitch, and pan,
* the game will use the settings in this plugin's parameters.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: bgs: stop
* bgs: memorize
* bgs: memory
* bgs: City
* bgs: Darkness, 80, 100, 0
*=============================================================================
*
*=============================================================================
* BREAK ACTION
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* This will force the remainder of the action sequences for the part of the
* skill/item to shut down and be skipped.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: break action
*=============================================================================
*
*=============================================================================
* CAST ANIMATION
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Plays an animation on the skill's user. Will not occur if the action is
* an item or the user's default normal attack.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: cast animation
*=============================================================================
*
*=============================================================================
* CLEAR BATTLE LOG
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Clears all the messages at the top of the screen.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: clear battle log
*=============================================================================
*
*=============================================================================
* CHANGE SWITCH X: on/off/toggle/switch z
* CHANGE SWITCH X..Y: on/off/toggle/switch z
* CHANGE SWITCH X TO Y: on/off/toggle/switch z
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Changes Game Switch X to on, off, toggle (switching between on/off), or
* to whatever value the switch y is.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: change switch 1: on
* change switch 2..4: off
* change switch 5 to 8: toggle
* change switch 9: switch 5
*=============================================================================
*
*=============================================================================
* CHANGE VARIABLE X = Y
* CHANGE VARIABLE X += Y
* CHANGE VARIABLE X -= Y
* CHANGE VARIABLE X *= Y
* CHANGE VARIABLE X /= Y
* CHANGE VARIABLE X %= Y
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Changes variable X in the middle of the action sequence to be modified
* by value Y. Y can be either an integer or a piece of code.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: change variable 1 = 2
* change variable 3 += 4
* change variable 5 -= 6
* change variable 7 *= 8
* change variable 9 /= 10
* change variable 11 %= 12
*=============================================================================
*
*=============================================================================
* COLLAPSE: target, (force)
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* If the target is to be dead at this point, this will be the point in the
* action sequence where you can promt the game to kill the target as long
* as the target has 0 HP. If you want to force the death of the target,
* include the 'force' command after the targets.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: collapse: user
* collapse: target, force
*=============================================================================
*
*=============================================================================
* COMMON EVENT: X
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Plays common event X at that point in the action sequence. Nothing else
* will continue until the common event is finished (unless it is a forced
* action, in which case, it will wait until the action is complete first).
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: common event: 1
*=============================================================================
*
*=============================================================================
* DEATH BREAK
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* If a user were to die for any reason during the middle of the skill
* (either via counter attack or reflection), this will force the remainder
* of the action sequences for the part of the skill/item to shut down and
* be skipped.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: death break
*=============================================================================
*
*=============================================================================
* DISPLAY ACTION
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Displays the action's name at the top of the battle log. It will remain
* there until the battle log is cleared.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: display action
*=============================================================================
*
*=============================================================================
* EVAL: code
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* For those who'd like to do something that the current Battle Engine doesn't
* support, you can use an eval function to have a piece of code occur. Users
* beware, for those unfamiliar with JavaScript should avoid handling this
* action sequence command.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: eval: $gameParty.loseItem($dataItems[3], 10)
*=============================================================================
*
*=============================================================================
* GAIN ITEM X: Y LOSE ITEM X: Y
* GAIN WEAPON X: Y LOSE WEAPON X: Y
* GAIN ARMOR X: Y LOSE ARMOR X: Y
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Your party will gain/lose item x, weapon x, or armor x in the amount of
* y. If you choose to omit y, it will default to 1.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: gain item 1: 20
* lose weapon 2
* gain armor 3: 50
*=============================================================================
*
*=============================================================================
* GOLD +x
* GOLD -x
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Your party will gain/lose gold in the middle of battle by x amount.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: gold +2000
* gold -500
*=============================================================================
*
*=============================================================================
* IF ... ELSE STATEMENTS
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* For those familiar with programming, you can use if...else statements to
* perform different actions based on different conditions. Use 'if' to
* specify a block of code to be executed, if a specified condition is true.
* Use 'else' to specify a block of code to be executed, if the same
* condition is false. Use 'else if' to specify a new condition to test, if
* the first condition is false. Use 'end' to specify where the conditions
* are to end.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example:
* if $gameSwitches.value(1)
* action effect
* else if $gameSwitches.value(2)
* action effect
* action effect
* else
* action effect
* action effect
* action effect
* end
*
* *Note: You do not have to indent the code in between to work. It just
* looks better that way in your action sequences.
*=============================================================================
*
*=============================================================================
* IMMORTAL: targets, true/false
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Sets the targets to a state of immortality so that they don't die in the
* middle of an attack. This is to ensure every action effect goes through.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: immortal: targets true
*=============================================================================
*
*=============================================================================
* HP +X: target, (show)
* HP -X: target, (show)
* HP +X%: target, (show)
* HP -X%: target, (show)
* HP +VARIABLE X: target, (show)
* HP -VARIABLE X: target, (show)
* HP +VARIABLE X%: target, (show)
* HP -VARIABLE X%: target, (show)
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Target(s) gains HP equal to X values. To show the popup, insert 'show'
* after the target in the action sequence line. Including 'show' is
* entirely optional. If 'show' is omitted, no popup will be displayed.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: hp +500: user
* hp -variable 5: target
* hp +25%: target
* hp -variable 7: user
*=============================================================================
*
*=============================================================================
* ME: STOP
* ME: filename, (volume), (pitch), (pan)
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Causes the battle to play a music fanfare. 'Stop' will stop any ME from
* playing. If you choose a filename (without the filename extensions), the
* game will play that ME instead. Using this option opens up access to the
* volume, pitch, and pan control, all of which are optional to use. If no
* values are inputed for volume, pitch, and pan, the game will use the
* settings in this plugin's parameters.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: me: stop
* me: Victory1
* me: Darkness, 80, 100, 0
*=============================================================================
*
*=============================================================================
* MOTION WAIT: target
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Makes the game wait 12 frames if the target(s) performing the action is an
* actor. If the target(s) is not an actor, no waiting will be done.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: motion wait: user
*=============================================================================
*
*=============================================================================
* MP +X: target, (show)
* MP -X: target, (show)
* MP +X%: target, (show)
* MP -X%: target, (show)
* MP +VARIABLE X: target, (show)
* MP -VARIABLE X: target, (show)
* MP +VARIABLE X%: target, (show)
* MP -VARIABLE X%: target, (show)
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Target(s) gains MP equal to X values. To show the popup, insert 'show'
* after the target in the action sequence line. Including 'show' is
* entirely optional. If 'show' is omitted, no popup will be displayed.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: mp +500: user
* mp -variable 5: target
* mp +25%: target
* mp -variable 7: user
*=============================================================================
*
*=============================================================================
* PERFORM ACTION
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Causes actors to step forward and swing their weapon, thrust it, however
* the motion that is determined will be automatically done by the game.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: perform action
*=============================================================================
*
*=============================================================================
* PERFORM FINISH
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Causes actor to move back to its home spot.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: perform finish
*=============================================================================
*
*=============================================================================
* PERFORM START
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Causes actor to move forward from its home spot.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: perform start
*=============================================================================
*
*=============================================================================
* REFRESH STATUS
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Refreshes the status window in the middle of an action sequence.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: refresh status
*=============================================================================
*
*=============================================================================
* REMOVE stat BUFF: target, (show)
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Removes the 'stat' buff from target. Replace 'stat' with 'hp', 'mp', 'atk',
* 'def', 'mat', 'mdf', 'agi', or 'luk'. Include 'show' and it will show the
* target getting the buff removed in the battle log.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: remove atk buff: user, show
* remove def buff: target
*=============================================================================
*
*=============================================================================
* REMOVE stat DEBUFF: target, (show)
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Removes the 'stat' debuff from target. Replace 'stat' with 'hp', 'mp',
* 'atk', 'def', 'mat', 'mdf', 'agi', or 'luk'. Include 'show' and it will
* show the target getting the debuff removed in the battle log.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: remove atk debuff: user, show
* remove def debuff: target
*=============================================================================
*
*=============================================================================
* REMOVE STATE X: target (show)
* REMOVE STATE X, Y, Z: target (show)
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Removes X state (including Y and Z if used in that format) from target.
* If 'show' is included, it will display any state related messages.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: remove state 5: target
* remove state 6, 7, 8: user, show
*=============================================================================
*
*=============================================================================
* SE: filename, (volume), (pitch), (pan)
* SE: PLAY OK
* SE: PLAY CURSOR
* SE: PLAY CANCEL
* SE: PLAY BUZZER
* SE: PLAY EQUIP
* SE: PLAY SAVE
* SE: PLAY LOAD
* SE: PLAY BATTLE START
* SE: PLAY ESCAPE
* SE: PLAY ENEMY ATTACK
* SE: PLAY ENEMY DAMAGE
* SE: PLAY ENEMY COLLAPSE
* SE: PLAY BOSS COLLAPSE 1
* SE: PLAY BOSS COLLAPSE 2
* SE: PLAY ACTOR DAMAGE
* SE: PLAY ACTOR COLLAPSE
* SE: PLAY RECOVERY
* SE: PLAY MISS
* SE: PLAY EVASION
* SE: PLAY MAGIC EVASION
* SE: PLAY REFLECTION
* SE: PLAY SHOP
* SE: PLAY USE ITEM
* SE: PLAY USE SKILL
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Causes the battle to play a Sound Effect. If you choose a filename (without
* the filename extensions), the game will play that ME instead. Using this
* option opens up access to the volume, pitch, and pan control, all of which
* are optional to use. If no values are inputed for volume, pitch, and pan,
* the game will use the settings in this plugin's parameters. Using the action
* sequences with 'play x' in them will cause the game to play a system sound
* set within RPG Maker's database.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: se: play enemy attack
* se: Ice1
* se: Laser2, 80, 100, 0
*=============================================================================
*
*=============================================================================
* TP +X: target, (show)
* TP -X: target, (show)
* TP +X%: target, (show)
* TP -X%: target, (show)
* TP +VARIABLE X: target, (show)
* TP -VARIABLE X: target, (show)
* TP +VARIABLE X%: target, (show)
* TP -VARIABLE X%: target, (show)
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Target(s) gains TP equal to X values. To show the popup, insert 'show'
* after the target in the action sequence line. Including 'show' is
* entirely optional. If 'show' is omitted, no popup will be displayed. For
* TP to actually show popups, another plugin is needed to display TP popups.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: tp +500: user
* tp -variable 5: target
* tp +25%: target
* tp -variable 7: user
*=============================================================================
*
*=============================================================================
* WAIT: frames
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Makes the game wait a certain amount of frames before going on to the
* next action in the action sequence.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: wait: 60
*=============================================================================
*
*=============================================================================
* WAIT FOR ANIMATION
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Waits for all animations to finish before going on to the next action in
* the action sequence.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: wait for animation
*=============================================================================
*
*=============================================================================
* WAIT FOR EFFECT
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Waits for all effects to finish playing before continuing on.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: wait for effect
*=============================================================================
*
*=============================================================================
* WAIT FOR MOVEMENT
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Waits for all battler movements to finish before going on to the next
* action in the action sequence.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: wait for movement
*=============================================================================
*
*=============================================================================
* WAIT FOR NEW LINE
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Waits for a new line to appear in the log window before going on to the
* next action in the action sequence.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: wait for new line
*=============================================================================
*
*=============================================================================
* WAIT FOR POPUPS
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Waits for all popups to finish playing before going on to the next action.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: wait for popups
*=============================================================================
*
* ============================================================================
* Changelog
* ============================================================================
*
* Version 1.13:
* - 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.12:
* - Updated for RPG Maker MV version 1.5.0.
*
* Version 1.11:
* - Lunatic Mode fail safes added.
*
* Version 1.10a:
* - Changed the 'Change Variable' action sequence to read more effectively.
* - Documentation update for 'Action Common Event' and 'Common Event' to
* indicate that they will not work immediately if used as a forced action
* since another event is already running.
*
* Version 1.09:
* - Fixed a bug that didn't allow for HP and MP buff/debuff removal.
*
* Version 1.08:
* - Added 'Break Action' action sequence effect to completely cancel out all
* of the remaining action effects.
*
* Version 1.07:
* - Fixed a bug with the forcing a Collapse action sequence.
*
* Version 1.06:
* - If using the Add State action sequence to add the Death state, it will
* remove immortality settings.
*
* Version 1.05:
* - Optimized status window to refresh at a minimum.
*
* Version 1.04:
* - Updated help file to include Character X for target typing.
*
* Version 1.03:
* - Fixed a bug that didn't make the sounds played work properly (again).
*
* Version 1.02:
* - Fixed a bug that didn't make the sounds played work properly.
*
* Version 1.01:
* - Fixed a small bug that didn't allow Change Variable to work properly with
* evaluated strings.
*
* Version 1.00:
* - Finished plugin!
*/
//=============================================================================
if (Imported.YEP_BattleEngineCore) {
//=============================================================================
// Parameters
//=============================================================================
Yanfly.Parameters = PluginManager.parameters('YEP_X_ActSeqPack1');
Yanfly.Param = Yanfly.Param || {};
Yanfly.Param.SoundVolume = Number(Yanfly.Parameters['Default Volume']);
Yanfly.Param.SoundPitch = Number(Yanfly.Parameters['Default Pitch']);
Yanfly.Param.SoundPan = Number(Yanfly.Parameters['Default Pan']);
//=============================================================================
// BattleManager
//=============================================================================
Yanfly.ASP1.BattleManager_processActionSequence =
BattleManager.processActionSequence;
BattleManager.processActionSequence = function (actionName, actionArgs) {
// ADD X BUFF
if (actionName.match(/ADD[ ](.*)[ ]BUFF/i)) {
return this.actionAddBuff(actionName, actionArgs);
}
// ADD X DEBUFF
if (actionName.match(/ADD[ ](.*)[ ]DEBUFF/i)) {
return this.actionAddDebuff(actionName, actionArgs);
}
// ADD STATE X
if (actionName.match(/(?:ADD_STATE|ADD STATE)[ ](\d+(?:\s*,\s*\d+)*)/i)) {
return this.actionAddState(actionName, actionArgs);
}
// ANIMATION X
if (actionName.match(/ANIMATION[ ](\d+)/i)) {
return this.actionAnimation(parseInt(RegExp.$1), actionArgs);
}
// BGM, MUSIC, SONG
if (['BGM', 'MUSIC', 'SONG'].contains(actionName)) {
return this.actionBgmPlay(actionArgs);
}
// BGS, AMBIENCE
if (['BGS', 'AMBIENCE'].contains(actionName)) {
return this.actionBgsPlay(actionArgs);
}
// BREAK ACTION
if (actionName === 'BREAK ACTION') {
return this.actionBreakAction();
}
// COLLAPSE: target, (force)
if (actionName === 'COLLAPSE') {
return this.actionCollapse(actionArgs);
}
// COMMON EVENT: event id
if (actionName === 'COMMON EVENT') {
return this.actionCommonEvent(actionArgs[0]);
}
// CHANGE SWITCH X
if (actionName.match(/CHANGE[ ]SWITCH[ ](.*)/i)) {
return this.actionChangeSwitch(actionName, actionArgs);
}
// CHANGE VARIABLE X
if (actionName.match(/CHANGE[ ]VARIABLE[ ](.*)/i)) {
return this.actionChangeVariable(actionName);
}
// EVAL, SCRIPT
if (['EVAL', 'SCRIPT'].contains(actionName)) {
return this.actionEval(actionArgs);
}
// GAIN ITEM (item, weapon, armor) X
if (actionName.match(/GAIN[ ](.*)[ ](\d+)/i) ||
actionName.match(/LOSE[ ](.*)[ ](\d+)/i)) {
return this.actionGainItem(actionName, actionArgs);
}
// GOLD +/- VALUE
if (actionName.match(/GOLD[ ]([\+\-]\d+)/i)) {
return this.actionGoldModify(parseInt(RegExp.$1));
}
// ME, FANFARE
if (['ME', 'FANFARE'].contains(actionName)) {
return this.actionMePlay(actionArgs);
}
// REFRESH STATUS, REFRESH WINDOW
if (['REFRESH STATUS', 'REFRESH WINDOW'].contains(actionName)) {
return this.actionRefreshStatus();
}
// REMOVE X BUFF
if (actionName.match(/REMOVE[ ](.*)[ ]BUFF/i)) {
return this.actionRemoveBuff(actionName, actionArgs);
}
// REMOVE X DEBUFF
if (actionName.match(/REMOVE[ ](.*)[ ]DEBUFF/i)) {
return this.actionRemoveDebuff(actionName, actionArgs);
}
// REMOVE STATE X
if
(actionName.match(/(?:REMOVE_STATE|REMOVE STATE)[ ](\d+(?:\s*,\s*\d+)*)/i)) {
return this.actionRemoveState(actionName, actionArgs);
}
// SE, SOUND, SFX
if (['SE', 'SOUND', 'SFX'].contains(actionName)) {
return this.actionSePlay(actionArgs);
}
// HP +/- VALUE
if (actionName.match(/HP[ ](.*)/i)) {
return this.actionHpModify(actionName, actionArgs);
}
// MP +/- VALUE
if (actionName.match(/MP[ ](.*)/i)) {
return this.actionMpModify(actionName, actionArgs);
}
// TP +/- VALUE
if (actionName.match(/TP[ ](.*)/i)) {
return this.actionTpModify(actionName, actionArgs);
}
return Yanfly.ASP1.BattleManager_processActionSequence.call(this,
actionName, actionArgs);
};
BattleManager.getParamId = function (stat) {
switch (stat) {
case 'HP':
case 'MAXHP':
case 'MAX HP':
return 0;
break;
case 'MP':
case 'MAXMP':
case 'MAX MP':
case 'SP':
case 'MAXSP':
case 'MAX SP':
return 1;
break;
case 'ATK':
case 'STR':
return 2;
break;
case 'DEF':
return 3;
break;
case 'MAT':
case 'INT' || 'SPI':
return 4;
break;
case 'MDF':
case 'RES':
return 5;
break;
case 'AGI':
case 'SPD':
return 6;
break;
case 'LUK':
return 7;
break;
}
return -1;
};
BattleManager.actionAddBuff = function (actionName, actionArgs) {
var targets = this.makeActionTargets(actionArgs[0]);
if (targets.length < 1) return false;
var show = false;
for (var i = 0; i < actionArgs.length; ++i) {
var actionArg = actionArgs[i];
if (actionArg.toUpperCase() === 'SHOW') show = true;
}
if (actionName.match(/ADD[ ](.*)[ ]BUFF/i)) {
var paramId = this.getParamId(String(RegExp.$1).toUpperCase());
} else {
return true;
}
if (actionArgs[1] && parseInt(actionArgs[1]) > 0) {
var turns = parseInt(actionArgs[1]);
} else {
var turns = 5;
}
if (paramId < 0) return true;
targets.forEach(function (target) {
target.addBuff(paramId, turns);
if (show) this._logWindow.displayActionResults(this._subject, target);
}, this);
return true;
};
BattleManager.actionAddDebuff = function (actionName, actionArgs) {
var targets = this.makeActionTargets(actionArgs[0]);
if (targets.length < 1) return false;
var show = false;
for (var i = 0; i < actionArgs.length; ++i) {
var actionArg = actionArgs[i];
if (actionArg.toUpperCase() === 'SHOW') show = true;
}
if (actionName.match(/ADD[ ](.*)[ ]DEBUFF/i)) {
var paramId = this.getParamId(String(RegExp.$1).toUpperCase());
} else {
return true;
}
if (actionArgs[1] && parseInt(actionArgs[1]) > 0) {
var turns = parseInt(actionArgs[1]);
} else {
var turns = 5;
}
if (paramId < 0) return true;
targets.forEach(function (target) {
target.addDebuff(paramId, turns);
if (show) this._logWindow.displayActionResults(this._subject, target);
}, this);
return true;
};
BattleManager.actionAddState = function (actionName, actionArgs) {
var targets = this.makeActionTargets(actionArgs[0]);
if (targets.length < 1) return false;
var show = false;
for (var i = 0; i < actionArgs.length; ++i) {
var actionArg = actionArgs[i];
if (actionArg.toUpperCase() === 'SHOW') show = true;
}
if (actionName.match(/(?:ADD_STATE|ADD STATE)[ ](\d+(?:\s*,\s*\d+)*)/i)) {
var states = JSON.parse('[' + RegExp.$1.match(/\d+/g) + ']');
} else {
return true;
}
targets.forEach(function (target) {
for (var i = 0; i < states.length; ++i) {
stateId = states[i];
if (stateId === target.deathStateId()) {
if (target._prevImmortalState === false) target.forceRemoveImmortal();
}
target.addState(stateId);
if (show) this._logWindow.displayActionResults(this._subject, target);
}
}, this);
return true;
};
BattleManager.actionAnimation = function (aniId, actionArgs) {
if (aniId <= 0) return;
var targets = this.makeActionTargets(actionArgs[0]);
if (targets.length < 1) return false;
var mirror = false;
if (actionArgs[1] && actionArgs[1].toUpperCase() === 'MIRROR') mirror = true;
this._logWindow.showNormalAnimation(targets, aniId, mirror);
return true;
};
BattleManager.actionBgmPlay = function (actionArgs) {
if (actionArgs.length < 1) return true;
if (actionArgs[0].toUpperCase() === 'STOP') {
AudioManager.stopBgm();
} else if (actionArgs[0].toUpperCase() === 'MEMORIZE') {
this._battleMemorizedBgm = AudioManager.saveBgm();
return true;
} else if (actionArgs[0].toUpperCase() === 'MEMORY') {
if (this._battleMemorizedBgm) {
AudioManager.replayBgm(this._battleMemorizedBgm);
}
} else {
var name = actionArgs[0];
if (!name) return true;
var vol = actionArgs[1] || Yanfly.Param.SoundVolume;
var pitch = actionArgs[2] || Yanfly.Param.SoundPitch;
var pan = actionArgs[3] || Yanfly.Param.SoundPan;
var bgm = {
name: name,
volume: vol,
pitch: pitch,
pan: pan
};
AudioManager.playBgm(bgm);
}
return true;
};
BattleManager.actionBgsPlay = function (actionArgs) {
if (actionArgs.length < 1) return true;
if (actionArgs[0].toUpperCase() === 'STOP') {
AudioManager.stopBgs();
} else if (actionArgs[0].toUpperCase() === 'MEMORIZE') {
this._battleMemorizedBgs = AudioManager.saveBgs();
return true;
} else if (actionArgs[0].toUpperCase() === 'MEMORY') {
if (this._battleMemorizedBgs) {
AudioManager.replayBgs(this._battleMemorizedBgs);
}
} else {
var name = actionArgs[0];
if (!name) return true;
var vol = actionArgs[1] || Yanfly.Param.SoundVolume;
var pitch = actionArgs[2] || Yanfly.Param.SoundPitch;
var pan = actionArgs[3] || Yanfly.Param.SoundPan;
var bgs = {
name: name,
volume: vol,
pitch: pitch,
pan: pan
};
AudioManager.playBgs(bgs);
}
return true;
};
BattleManager.actionBreakAction = function () {
this._targets = [];
this._actionList = [];
this._individualTargets = [];
this._phase = 'phaseChange';
return false;
};
BattleManager.actionCollapse = function (actionArgs) {
var targets = this.makeActionTargets(actionArgs[0]);
var force = false;
if (actionArgs[1]) var force = (actionArgs[1].toUpperCase() === 'FORCE');
targets.forEach(function (target) {
if (force) {
target.removeImmortal();
target.addState(target.deathStateId());
}
if (target.isDeathStateAffected()) target.performCollapse();
}, this);
return false;
};
BattleManager.actionCommonEvent = function (id) {
if ($gameTroop.isEventRunning()) {
var ev = $dataCommonEvents[id];
if (!ev) return;
var list = ev.list;
var interpreter = $gameTroop._interpreter;
interpreter.setupChild(list, 0);
} else {
$gameTemp.reserveCommonEvent(id);
}
return false;
};
BattleManager.actionChangeSwitch = function (actionName, actionArgs) {
var subject = this._subject;
var user = this._subject;
var target = this._targets[0];
var targets = this._targets;
var action = this._action;
var item = this._action.item();
var switches = [];
if (actionName.match(/SWITCH[ ](\d+)/i)) {
switches = [parseInt(RegExp.$1)];
} else if (actionName.match(/SWITCH[ ](\d+)..(\d+)/i)) {
switches = [getRange(parseInt(RegExp.$1), parseInt(RegExp.$2))];
} else if (actionName.match(/SWITCH[ ](\d+)[ ]TO[ ](\d+)/i)) {
switches = [getRange(parseInt(RegExp.$1), parseInt(RegExp.$2))];
} else {
return true;
}
var result = actionArgs[0].toUpperCase();
var value;
if (['ON', 'TRUE'].contains(result)) {
value = true;
} else if (['OFF', 'FALSE'].contains(result)) {
value = false;
} else if (['TOGGLE', 'OPPOSITE', 'REVERSE'].contains(result)) {
value = 'toggle';
} else if (result.match(/SWITCH[ ](\d+)/i)) {
value = $gameSwitches.value(parseInt(RegExp.$1));
}
switches.forEach(function (switchId) {
if (value === 'toggle') {
$gameSwitches.setValue(switchId, !$gameSwitches.value(switchId));
} else {
$gameSwitches.setValue(switchId, value);
}
}, this);
return true;
};
BattleManager.actionChangeVariable = function (actionName) {
var cV1 =
/CHANGE[ ](?:VARIABLE|VAR)[ ](\d+)[ ](.*)[ ](?:VARIABLE|VAR)[ ](\d+)/i;
var cV2 = /CHANGE[ ](?:VARIABLE|VAR)[ ](\d+)[ ](.*?)[ ](.*)/i;
var subject = this._subject;
var user = this._subject;
var target = this._targets[0];
var targets = this._targets;
var action = this._action;
var item = this._action.item();
if (this._actSeq[0].match(cV1)) {
var mainVar = parseInt(RegExp.$1);
var operation = String(RegExp.$2);
var editVar = $gameVariables.value(parseInt(RegExp.$3));
} else if (this._actSeq[0].match(cV2)) {
var mainVar = parseInt(RegExp.$1);
var operation = String(RegExp.$2);
var editVar = eval(String(RegExp.$3));
} else {
return true;
}
var mainValue = $gameVariables.value(mainVar);
if (['='].contains(operation)) {
$gameVariables.setValue(mainVar, eval(editVar));
} else if (['+=', '+'].contains(operation)) {
$gameVariables.setValue(mainVar, mainValue + eval(editVar));
} else if (['-=', '-'].contains(operation)) {
$gameVariables.setValue(mainVar, mainValue - eval(editVar));
} else if (['*=', '*'].contains(operation)) {
$gameVariables.setValue(mainVar, mainValue * eval(editVar));
} else if (['/=', '/'].contains(operation)) {
$gameVariables.setValue(mainVar, mainValue / eval(editVar));
} else if (['%=', '%'].contains(operation)) {
$gameVariables.setValue(mainVar, mainValue % eval(editVar));
}
return true;
};
BattleManager.actionEval = function (actionArgs) {
if (actionArgs.length < 1) return true;
var subject = this._subject;
var user = this._subject;
var target = this._targets[0];
var targets = this._targets;
var action = this._action;
var item = this._action.item();
var text = String(actionArgs[0]);
for (var i = 1; i < actionArgs.length; ++i) {
text = text + ', ' + String(actionArgs[i]);
}
try {
eval(text);
} catch (e) {
Yanfly.Util.displayError(e, text, 'ACTION SEQUENCE EVAL ERROR');
}
return false;
};
BattleManager.actionGainItem = function (actionName, actionArgs) {
var gainItem;
var type;
var itemId;
if (actionName.match(/GAIN[ ](.*)[ ](\d+)/i)) {
gainItem = true;
type = String(RegExp.$1).toUpperCase();
itemId = parseInt(RegExp.$2);
} else if (actionName.match(/LOSE[ ](.*)[ ](\d+)/i)) {
gainItem = false;
type = String(RegExp.$1).toUpperCase();
itemId = parseInt(RegExp.$2);
} else {
return true;
}
var item;
if (type === 'ITEM') {
item = $dataItems[itemId];
} else if (['WPN', 'WEAPON'].contains(type)) {
item = $dataWeapons[itemId];
} else if (['ARM', 'ARMOR', 'ARMOUR'].contains(type)) {
item = $dataArmors[itemId];
} else {
return true;
}
var amount = Math.max(1, parseInt(actionArgs[0]));
if (isNaN(amount)) amount = 1;
if (gainItem) $gameParty.gainItem(item, amount);
if (!gainItem) $gameParty.loseItem(item, amount);
return true;
};
BattleManager.actionGoldModify = function (value) {
$gameParty.gainGold(value);
return true;
};
BattleManager.actionHpModify = function (actionName, actionArgs) {
var targets = this.makeActionTargets(actionArgs[0]);
if (targets.length < 1) return false;
var change;
var percent;
if (actionName.match(/HP[ ]([+-])(?:VARIABLE|VAR)[ ](\d+)/i)) {
change = parseInt($gameVariables.value(parseInt(RegExp.$2)));
if (String(RegExp.$1) === '-') change *= -1;
percent = false;
} else if
(actionName.match(/HP[ ]([+-])(?:VARIABLE|VAR)[ ](\d+)([%%])/i)) {
change = parseInt($gameVariables.value(parseInt(RegExp.$2)));
if (String(RegExp.$1) === '-') change *= -1;
percent = true;
} else if (actionName.match(/HP[ ]([\+\-]\d+)([%%])/i)) {
change = parseInt(RegExp.$1);
percent = true;
} else if (actionName.match(/HP[ ]([\+\-]\d+)/i)) {
change = parseInt(RegExp.$1);
percent = false;
} else {
return false;
}
var show = false;
for (var i = 0; i < actionArgs.length; ++i) {
var actionArg = actionArgs[i];
if (actionArg.toUpperCase() === 'SHOW') show = true;
}
var value;
targets.forEach(function (target) {
target.clearResult();
value = percent ? (target.mhp * change * 0.01) : change;
target.gainHp(parseInt(value));
if (show) {
target.startDamagePopup();
this._logWindow.displayActionResults(this._subject, target);
}
}, this);
return true;
};
BattleManager.actionMePlay = function (actionArgs) {
if (actionArgs.length < 1) return true;
if (actionArgs[0].toUpperCase() === 'STOP') {
AudioManager.stopMe();
} else {
var name = actionArgs[0];
if (!name) return true;
var vol = actionArgs[1] || Yanfly.Param.SoundVolume;
var pitch = actionArgs[2] || Yanfly.Param.SoundPitch;
var pan = actionArgs[3] || Yanfly.Param.SoundPan;
var me = {
name: name,
volume: vol,
pitch: pitch,
pan: pan
};
AudioManager.playMe(me);
}
return true;
};
BattleManager.actionMpModify = function (actionName, actionArgs) {
var targets = this.makeActionTargets(actionArgs[0]);
if (targets.length < 1) return false;
var change;
var percent;
if (actionName.match(/MP[ ]([+-])(?:VARIABLE|VAR)[ ](\d+)/i)) {
change = parseInt($gameVariables.value(parseInt(RegExp.$2)));
if (String(RegExp.$1) === '-') change *= -1;
percent = false;
} else if
(actionName.match(/MP[ ]([+-])(?:VARIABLE|VAR)[ ](\d+)([%%])/i)) {
change = parseInt($gameVariables.value(parseInt(RegExp.$2)));
if (String(RegExp.$1) === '-') change *= -1;
percent = true;
} else if (actionName.match(/MP[ ]([\+\-]\d+)([%%])/i)) {
change = parseInt(RegExp.$1);
percent = true;
} else if (actionName.match(/MP[ ]([\+\-]\d+)/i)) {
change = parseInt(RegExp.$1);
percent = false;
} else {
return false;
}
var show = false;
for (var i = 0; i < actionArgs.length; ++i) {
var actionArg = actionArgs[i];
if (actionArg.toUpperCase() === 'SHOW') show = true;
}
var value;
targets.forEach(function (target) {
target.clearResult();
value = percent ? (target.mmp * change * 0.01) : change;
target.gainMp(parseInt(value));
if (show) {
target.startDamagePopup();
this._logWindow.displayActionResults(this._subject, target);
}
}, this);
return true;
};
BattleManager.actionRefreshStatus = function () {
this._statusWindow.refresh();
return false;
};
BattleManager.actionRemoveBuff = function (actionName, actionArgs) {
var targets = this.makeActionTargets(actionArgs[0]);
if (targets.length < 1) return false;
var show = false;
for (var i = 0; i < actionArgs.length; ++i) {
var actionArg = actionArgs[i];
if (actionArg.toUpperCase() === 'SHOW') show = true;
}
if (actionName.match(/REMOVE[ ](.*)[ ]BUFF/i)) {
var paramId = this.getParamId(String(RegExp.$1).toUpperCase());
} else {
return true;
}
if (paramId < 0) return true;
targets.forEach(function (target) {
if (target.isBuffAffected(paramId)) {
target.removeBuff(paramId);
if (show) this._logWindow.displayActionResults(this._subject, target);
}
}, this);
return true;
};
BattleManager.actionRemoveDebuff = function (actionName, actionArgs) {
var targets = this.makeActionTargets(actionArgs[0]);
if (targets.length < 1) return false;
var show = false;
for (var i = 0; i < actionArgs.length; ++i) {
var actionArg = actionArgs[i];
if (actionArg.toUpperCase() === 'SHOW') show = true;
}
if (actionName.match(/REMOVE[ ](.*)[ ]DEBUFF/i)) {
var paramId = this.getParamId(String(RegExp.$1).toUpperCase());
} else {
return true;
}
if (paramId < 0) return true;
targets.forEach(function (target) {
if (target.isDebuffAffected(paramId)) {
target.removeBuff(paramId);
if (show) this._logWindow.displayActionResults(this._subject, target);
}
}, this);
return true;
};
BattleManager.actionRemoveState = function (actionName, actionArgs) {
var targets = this.makeActionTargets(actionArgs[0]);
if (targets.length < 1) return false;
var show = false;
for (var i = 0; i < actionArgs.length; ++i) {
var actionArg = actionArgs[i];
if (actionArg.toUpperCase() === 'SHOW') show = true;
}
if
(actionName.match(/(?:REMOVE_STATE|REMOVE STATE)[ ](\d+(?:\s*,\s*\d+)*)/i)) {
var states = JSON.parse('[' + RegExp.$1.match(/\d+/g) + ']');
} else {
return true;
}
targets.forEach(function (target) {
for (var i = 0; i < states.length; ++i) {
stateId = states[i];
if (target.isStateAffected(stateId)) {
target.removeState(stateId);
if (show) this._logWindow.displayActionResults(this._subject, target);
}
}
}, this);
return true;
};
BattleManager.actionSePlay = function (actionArgs) {
if (actionArgs.length < 1) return true;
if (actionArgs[0].toUpperCase() === 'PLAY CURSOR') {
SoundManager.playCursor();
} else if (actionArgs[0].toUpperCase() === 'PLAY OK') {
SoundManager.playOk();
} else if (actionArgs[0].toUpperCase() === 'PLAY CANCEL') {
SoundManager.playCancel();
} else if (actionArgs[0].toUpperCase() === 'PLAY BUZZER') {
SoundManager.playBuzzer();
} else if (actionArgs[0].toUpperCase() === 'PLAY EQUIP') {
SoundManager.playEquip();
} else if (actionArgs[0].toUpperCase() === 'PLAY SAVE') {
SoundManager.playSave();
} else if (actionArgs[0].toUpperCase() === 'PLAY LOAD') {
SoundManager.playLoad();
} else if (actionArgs[0].toUpperCase() === 'PLAY BATTLE START') {
SoundManager.playBattleStart();
} else if (actionArgs[0].toUpperCase() === 'PLAY ESCAPE') {
SoundManager.playEscape();
} else if (actionArgs[0].toUpperCase() === 'PLAY ENEMY ATTACK') {
SoundManager.playEnemyAttack();
} else if (actionArgs[0].toUpperCase() === 'PLAY ENEMY DAMAGE') {
SoundManager.playEnemyDamage();
} else if (actionArgs[0].toUpperCase() === 'PLAY ENEMY COLLAPSE') {
SoundManager.playEnemyCollapse();
} else if (actionArgs[0].toUpperCase() === 'PLAY BOSS COLLAPSE 1') {
SoundManager.playBossCollapse1();
} else if (actionArgs[0].toUpperCase() === 'PLAY BOSS COLLAPSE 2') {
SoundManager.playBossCollapse2();
} else if (actionArgs[0].toUpperCase() === 'PLAY ACTOR DAMAGE') {
SoundManager.playActorDamage();
} else if (actionArgs[0].toUpperCase() === 'PLAY ACTOR COLLAPSE') {
SoundManager.playActorCollapse();
} else if (actionArgs[0].toUpperCase() === 'PLAY RECOVERY') {
SoundManager.playRecovery();
} else if (actionArgs[0].toUpperCase() === 'PLAY MISS') {
SoundManager.playMiss();
} else if (actionArgs[0].toUpperCase() === 'PLAY EVASION') {
SoundManager.playEvasion();
} else if (actionArgs[0].toUpperCase() === 'PLAY MAGIC EVASION') {
SoundManager.playMagicEvasion();
} else if (actionArgs[0].toUpperCase() === 'PLAY REFLECTION') {
SoundManager.playReflection();
} else if (actionArgs[0].toUpperCase() === 'PLAY SHOP') {
SoundManager.playShop();
} else if (actionArgs[0].toUpperCase() === 'PLAY USE ITEM') {
SoundManager.playUseItem();
} else if (actionArgs[0].toUpperCase() === 'PLAY USE SKILL') {
SoundManager.playUseSkill();
} else {
var name = actionArgs[0];
if (!name) return true;
var vol = actionArgs[1] || Yanfly.Param.SoundVolume;
var pitch = actionArgs[2] || Yanfly.Param.SoundPitch;
var pan = actionArgs[3] || Yanfly.Param.SoundPan;
var se = {
name: name,
volume: vol,
pitch: pitch,
pan: pan
};
AudioManager.playSe(se);
}
return true;
};
BattleManager.actionTpModify = function (actionName, actionArgs) {
var targets = this.makeActionTargets(actionArgs[0]);
if (targets.length < 1) return false;
var change;
var percent;
if (actionName.match(/TP[ ]([+-])(?:VARIABLE|VAR)[ ](\d+)/i)) {
change = parseInt($gameVariables.value(parseInt(RegExp.$2)));
if (String(RegExp.$1) === '-') change *= -1;
percent = false;
} else if
(actionName.match(/TP[ ]([+-])(?:VARIABLE|VAR)[ ](\d+)([%%])/i)) {
change = parseInt($gameVariables.value(parseInt(RegExp.$2)));
if (String(RegExp.$1) === '-') change *= -1;
percent = true;
} else if (actionName.match(/TP[ ]([\+\-]\d+)([%%])/i)) {
change = parseInt(RegExp.$1);
percent = true;
} else if (actionName.match(/TP[ ]([\+\-]\d+)/i)) {
change = parseInt(RegExp.$1);
percent = false;
} else {
return false;
}
var show = false;
for (var i = 0; i < actionArgs.length; ++i) {
var actionArg = actionArgs[i];
if (actionArg.toUpperCase() === 'SHOW') show = true;
}
var value;
targets.forEach(function (target) {
target.clearResult();
value = percent ? (target.maxTp() * change * 0.01) : change;
target.gainTp(parseInt(value));
if (show) {
target.startDamagePopup();
this._logWindow.displayActionResults(this._subject, target);
}
}, this);
return true;
};
//=============================================================================
// 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.isDevToolsOpen()) {
require('nw.gui').window.showDevTools();
}
}
};
//=============================================================================
// End of File
//=============================================================================
};