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

5417 lines
181 KiB
JavaScript

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

//=============================================================================
// Yanfly Engine Plugins - Battle Engine Core
// YEP_BattleEngineCore.js
//=============================================================================
var Imported = Imported || {};
Imported.YEP_BattleEngineCore = true;
var Yanfly = Yanfly || {};
Yanfly.BEC = Yanfly.BEC || {};
Yanfly.BEC.version = 1.43;
//=============================================================================
/*:
* @plugindesc v1.43a 战斗引擎核心☁️
* @author Yanfly Engine Plugins
*
* @param ---General---
* @text ---全局---
* @default
*
* @param Action Speed
* @text 动作速度
* @desc This is the formula used for an action's base speed.
* Default: agi + Math.randomInt(Math.floor(5 + agi / 4))
* @default agi
*
* @param Default System
* @text 默认系统
* @desc This is the default battle system your game uses.
* Default: dtb
* @default dtb
*
* @param ---Escape---
* @text ---逃跑---
* @default
*
* @param Escape Ratio
* @text 默认逃跑率
* @desc This is the formula used to determine escape success.
* Default: 0.5 * $gameParty.agility() / $gameTroop.agility()
* @default 0.5 * $gameParty.agility() / $gameTroop.agility()
*
* @param Fail Escape Boost
* @text 失败+逃跑率
* @desc Each time the player fails escape, increase the success
* rate by this much. Default: 0.1
* @default 0.1
*
* @param ---Animation---
* @text ---动画---
* @default
*
* @param Animation Base Delay
* @text 动画基本延迟
* @desc This sets the base delay in between animations.
* Default: 8
* @default 0
*
* @param Animation Next Delay
* @text 动画下一个延迟
* @desc This sets the sequential delay in between animations.
* Default: 12
* @default 0
*
* @param Certain Hit Animation
* @text 特定命中动画
* @desc Default animation to play for certain hit skills.
* Use 0 if you wish for no animation.
* @default 120
*
* @param Physical Animation
* @text 物理技能动画
* @desc Default animation to play for physical skills.
* Use 0 if you wish for no animation.
* @default 52
*
* @param Magical Animation
* @text 魔法技能动画
* @desc Default animation to play for magical skills.
* Use 0 if you wish for no animation.
* @default 51
*
* @param Enemy Attack Animation
* @text 敌人攻击动画
* @desc This is the default attack animation played by enemies.
* Default: 0
* @default 39
*
* @param Reflect Animation
* @text 魔法反射动画
* @desc The animation used when magic attacks are reflected.
* @default 42
*
* @param Motion Waiting
* @text 运动等待
* @desc Play animations after performing an action or during?
* During - false After - true Default: false
* @default false
*
* @param ---Frontview---
* @text ---正视图---
* @default
*
* @param Front Position X
* @desc This formula determines the actor's home X position.
* Default: 0
* @default Graphics.boxWidth / 8 + Graphics.boxWidth / 4 * index
*
* @param Front Position Y
* @desc This formula determines the actor's home Y position.
* Default: 0
* @default Graphics.boxHeight - 180
*
* @param Front Actor Sprite
* @text 显示前角色精灵
* @desc Show the actor battle sprite in frontview?
* NO - false YES - true Default - false
* @default false
*
* @param Front Sprite Priority
* @text 前精灵优先级
* @desc Give actor sprites the priority of always being on top?
* 0 - Normal 1 - Actors on Top 2 - Enemies on Top
* @default 1
*
* @param ---Sideview---
* @text ---侧视图---
* @default
*
* @param Home Position X
* @desc This formula determines the actor's home X position.
* Default: 600 + index * 32
* @default screenWidth - 16 - (maxSize + 2) * 32 + index * 32
*
* @param Home Position Y
* @desc This formula determines the actor's home Y position.
* Default: 280 + index * 48
* @default screenHeight - statusHeight - maxSize * 48 + (index+1) * 48 - 32
*
* @param Side Sprite Priority
* @text 侧精灵优先级
* @desc Give actor sprites the priority of always being on top?
* 0 - Normal 1 - Actors on Top 2 - Enemies on Top
* @default 1
*
* @param ---Sprites---
* @text ---精灵---
* @default
*
* @param Default X Anchor
* @desc Default value used for your sprites's X Anchor.
* Default: 0.5
* @default 0.5
*
* @param Default Y Anchor
* @desc Default value used for your sprites's Y Anchor.
* Default: 1.0
* @default 1.0
*
* @param Step Distance
* @text 步距
* @desc 这是一个单位为采取行动而向前走的距离。
* Default: 48
* @default 48
*
* @param Flinch Distance
* @text 退缩距离
* @desc 在侧视图中,当一个单位受到伤害或闪避时,它将
* 以像素为单位缩小一定距离。
* @default 12
*
* @param Show Shadows
* @text 显示阴影
* @desc Do you wish to have shadows appear under actors?
* NO - false YES - true
* @default true
*
* @param ---Damage Popups---
* @text ---伤害弹出窗口---
* @default
*
* @param Popup Duration
* @text 弹出窗口持续时间
* @desc Adjusts how many frames a popup will stay visible for.
* Default: 90
* @default 128
*
* @param Newest Popup Bottom
* @text 最新窗口底部弹出
* @desc Places the newest popup at the bottom of a group.
* NO - false YES - true
* @default true
*
* @param Popup Overlap Rate
* @text 弹出重叠率
* @desc When multiple damage popups appear, they cover each other.
* Use this to change the buffer rate amount for each sprite.
* @default 0.9
*
* @param Critical Popup
* @text 关键弹出窗口
* @desc Adjusts the popup's flashing color for critical hits.
* Default: 255, 0, 0, 160
* @default 255, 0, 0, 160
*
* @param Critical Duration
* @text 临界持续时间
* @desc 闪烁将保留多少帧用于关键帧
* How many frames the flashing will remain for a critical.
* Default: 60
* @default 60
*
* @param ---Tick-Settings---
* @text ---Tick 设置---
* @default
*
* @param Timed States
* @text 定时状态
* @desc If the battle system is Tick-based, use time instead of
* turns for states? NO - false YES - true
* @default false
*
* @param Timed Buffs
* @text 定时增益
* @desc If the battle system is Tick-based, use time instead of
* turns for buffs? NO - false YES - true
* @default false
*
* @param Turn Time
* @text 转弯时间
* @desc 必须经过多少个记号才能等于一圈?
* How many ticks must past to equal 1 turn?
* @default 100
*
* @param AI Self Turns
* @text AI自转
* @desc Set AI to be based on their own individual turns?
* NO - false YES - true
* @default true
*
* @param ---Window Settings---
* @text ---窗口设置---
* @default
*
* @param Lower Windows
* @text 底部窗口
* @desc Places the skill and item windows at the screen's bottom.
* OFF - false ON - true
* @default true
*
* @param Window Rows
* @text 窗口行
* @desc For lower windows, how many rows of items do you wish for
* the windows to display?
* @default 4
*
* @param Command Window Rows
* @text 命令窗口行
* @desc Sets the number of rows for each command window to display.
* Default: 4
* @default 4
*
* @param Command Alignment
* @text 命令对齐
* @desc Sets the text alignment for the Party/Actor Commands.
* Default: left
* @default center
*
* @param Start Actor Command
* @text 启用角色命令
* @desc Starts turn with the Actor Command Window instead of Party.
* OFF - false ON - true
* @default true
*
* @param Current Max
* @text 显示HP/MP的当前最大值
* @desc Display the entire current / max value of HP/MP?
* NO - false YES - true Default: true
* @default false
*
* @param ---Selection Help---
* @text ---选择帮助---
* @default
*
* @param Mouse Over
* @text 鼠标悬停
* @desc Allows you to mouse over the enemies to auto-select them.
* OFF - false ON - true
* @default true
*
* @param Select Help Window
* @text 选择帮助窗口
* @desc When selecting actors and enemies, show the help window?
* NO - false YES - true
* @default true
*
* @param User Help Text
* @text 用户帮助文本
* @desc The singular form of 'User' used in a help window.
* @default 用户
*
* @param Ally Help Text
* @text 队友帮助文本*单
* @desc The singular form of 'Ally' used in a help window.
* @default 队友
*
* @param Allies Help Text
* @text 队友帮助文本*复
* @desc The plural form of 'Allies' used in a help window.
* @default 全体队友
*
* @param Enemy Help Text
* @text 敌人帮助文本*单
* @desc The singular form of 'Enemy' used in a help window.
* @default 敌人
*
* @param Enemies Help Text
* @text 敌人帮助文本*复
* @desc The plural form of 'Enemy' used in a help window.
* @default 全体敌人
*
* @param All Help Text
* @text 所有帮助文字
* @desc When selecting a entire group of targets.
* %1 - Target Group (Allies or Enemies)
* @default %1
*
* @param Random Help Text
* @text 随机目标帮助文字
* @desc When selecting a random selection of targets.
* %1 - Target Group (Allies or Enemies) %2 - Number
* @default %2 随机 %1
*
* @param ---Enemy Select---
* @text ---敌人选择---
* @default
*
* @param Visual Enemy Select
* @text 视觉敌人选择
* @desc Replaces the enemy selection screen with a more visual one.
* OFF - false ON - true
* @default true
*
* @param Show Enemy Name
* @text 显示敌人名称
* @desc Show enemy names with Visual Enemy Select.
* OFF - false ON - true
* @default true
*
* @param Show Select Box
* @text 显示敌人选择框
* @desc Show a selection box when selecting enemies.
* OFF - false ON - true
* @default false
*
* @param Enemy Font Size
* @text 敌人字体大小
* @desc Changes the font size used to display enemy names.
* Default: 28
* @default 20
*
* @param Enemy Auto Select
* @text 初始自动选择敌人
* @desc Changes what enemy is automatically selected at first.
* LEFT - 0 RIGHT - this.furthestRight()
* @default this.furthestRight()
*
* @param ---Actor Select---
* @text ---角色选择---
* @default
*
* @param Visual Actor Select
* @text 视觉角色选择
* @desc Allows you to click the actor on screen to select it.
* OFF - false ON - true
* @default true
*
* @param ---Battle Log---
* @text ---战斗日志---
* @default
*
* @param Show Emerge Text
* @text 显示出现文本
* @desc Shows the battle start text for enemies appearing.
* OFF - false ON - true
* @default false
*
* @param Show Pre-Emptive Text
* @text 显示优先文本
* @desc Shows the text for getting a pre-emptive attack.
* OFF - false ON - true
* @default true
*
* @param Show Surprise Text
* @text 显示惊喜文本
* @desc Shows the text for getting a surprise attack.
* OFF - false ON - true
* @default true
*
* @param Optimize Speed
* @text 优化速度
* @desc Cuts log base line process to optimize the battle speed.
* OFF - false ON - true
* @default true
*
* @param Show Action Text
* @text 显示操作文本
* @desc Displays full action text or a simplified version of it.
* SIMPLE - false FULL - true
* @default false
*
* @param Show State Text
* @text 显示状态文本
* @desc Shows all text regarding states.
* OFF - false ON - true
* @default false
*
* @param Show Buff Text
* @text 显示Buff文本
* @desc Shows all text regarding buffs.
* OFF - false ON - true
* @default false
*
* @param Show Counter Text
* @text 显示反击文本
* @desc Shows text regarding counter attacks.
* OFF - false ON - true
* @default true
*
* @param Show Reflect Text
* @text 显示反射文本
* @desc Shows text regarding reflected spells.
* OFF - false ON - true
* @default true
*
* @param Show Substitute Text
* @text 显示替代伤害文本
* @desc Shows text regarding substituted damage.
* OFF - false ON - true
* @default true
*
* @param Show Fail Text
* @text 显示攻击失败文本
* @desc Shows text regarding failed attacks.
* OFF - false ON - true
* @default false
*
* @param Show Critical Text
* @text 显示暴击文本
* @desc Shows text regarding critical hits.
* OFF - false ON - true
* @default false
*
* @param Show Miss Text
* @text 显示Miss文本
* @desc Shows text regarding missed attacks.
* OFF - false ON - true
* @default false
*
* @param Show Evasion Text
* @text 显示闪避文本
* @desc Shows text regarding evaded attacks.
* OFF - false ON - true
* @default false
*
* @param Show HP Text
* @text 显示HP文本
* @desc Shows text regarding HP damage or heals.
* OFF - false ON - true
* @default false
*
* @param Show MP Text
* @text 显示MP文本
* @desc Shows text regarding MP damage or heals.
* OFF - false ON - true
* @default false
*
* @param Show TP Text
* @text 显示TP文本
* @desc Shows text regarding TP damage or heals.
* OFF - false ON - true
* @default false
*
* @help
* ============================================================================
* Introduction
* ============================================================================
*
* RPG Maker MV默认的战斗系统已经支持流行的横版战斗我们可以使用战斗核心
* 引擎来增加更多的特点和能力
* 这个插件改变了战斗系统的很多方面,使其看起来更像现代的角色扮演游戏,而
* 不是过时笨重的那种。这改变了战斗界面的文本的显示以及出现方式。
*
* ============================================================================
* Battle Messages
* ============================================================================
*
* 当改变了战斗过程中的选项和信息时候,插入下面的标签就可以让信息在战斗记
* 录里居中
*
* <CENTER>
* 这个标签可以覆盖所有的战斗记录窗口,并且将视为一种居中战斗文本信息的指令。
*
* SParam公式*有几个记事标签,你可以用来改变某些技能和项目的出现方式,
* 因为你不想在名字中出现像“哈罗德攻击”这样的名字。
*
* 技能和物品标签:
*
* <Display Text: x>
* 这会将显示的文本更改为x。
*
* <Display Icon: x>
* 这会将显示的图标更改为x。
*
* ============================================================================
* Battle Windows
* ============================================================================
*
* 为了使战斗系统的导航更加简便,这里有很多选项来调整战斗系统的角色窗口之
* 后出现。
*
* ============================================================================
* Battle Order
* ============================================================================
*
* 这个战斗回合系统也被修复,这样,任何有敏捷值改变的情况的战斗,将会在当
* 前回合生效而不是下个回合。行动速度计算也被调整过,移除了过去速度计算公
* 式带有随机的因素,让敏捷值可以更加实际的作为一个战术上的因素。
*
* Skill and Item Notetag:
* <speed: +x>
* <speed: -x>
* 这可以让您突破编辑器的限制-2000和2000允许您
* 控制你的动作速度。
*
* ============================================================================
* Multiple Hits
* ============================================================================
*
* 如果伤害标签在行动中消失,多重伤害系统不会中断。这个通过切换永久状态来
* 实现的。如果要使用这个特性,请确保数据库中存在一个永久状态;如果不想使
* 用请将永久状态参数ID改为0。
*
* ============================================================================
* Popup Revamp
* ============================================================================
*
* 尽管伤害数值的弹出系统和原版MV看起来一样但是他们的进程是完全不同的。
* 在之前弹出系统在1帧只会弹出一次但现在我们可以在同1帧显示所有伤害
* ,这使其看起来更加平滑。
*
* ============================================================================
* Common Events
* ============================================================================
*
* 无论敌人队伍是否存活,公共事件将会在每次行动结束的时候执行,通过恰当的
* 放置行动序列标签,你可以让技能的公共事件在一个行动当中执行。但是,请注
* 意如果你让一个行动在另一个行动当中执行,剩余的行动序列将会变成空的来取
* 代新的行动。
*
* ============================================================================
* Casting Animations
* ============================================================================
*
* 角色动作将会协助提供给玩家,让他们明白战斗者是谁,以及技能使用类型。这
* 个插件可以让技能拥有动作,这些动作是可以为单独技能自定调整的
*
* Skill Notetag:
* <Cast Animation: x>
* 设置技能动作ID设置0将会取消动作
*
* ============================================================================
* Changing Battle Systems
* ============================================================================
*
* 当玩家不在战斗时,你可以通过插件命令改变战斗系统。如果只使用这个插件
* 这里只包含了默认的战斗系统
*
* Plugin Command:
* setBattleSys DTB 设置战斗为默认回合制
*
* 未来其他插件将会包含其他战斗系统
*
* ============================================================================
* Sideview Actions
* ============================================================================
*
* 在软件默认的战斗系统里,竖向和横向的战斗方式都没有显示反击,显示魔法攻
* 击,或者任何战斗者的替换队员。这个战斗系统核心引擎可以提供给横版战斗模
* 式的游戏更好的战斗队员显示效果。
*
* 魔法攻击也将会显示一个相应的动画,来告诉玩家已经准备好战斗。这个动画可
* 以用参数改变,但是角色,职业,敌人,武器,装备和状态可以根据需要显示独
* 有的动画。
*
* Actor, Class, Enemy, Weapon, Armor, and State Notetag:
* <Reflect Animation ID: x>
* 改变角色的动画为X。这将影响角色职业敌人武器装备及状态等等
*
* 有时,你不希望你的敌人可以移动,或者你不希望某个角色移动。他们只是固定
* 的。为了完成这件事,你可以使用下面这个标签禁止参与战斗者移动。
*
* Actor, Class, Enemy, Weapon, Armor, and State Notetag:
* <Sprite Cannot Move>
* 阻止了参与战斗者移动。这将影响角色,职业,敌人,武器,装备及状态等等。
* 如果敌人在其行动的时候不能移动,他将会像竖版战斗那样闪烁。
*
* ============================================================================
* Custom Sideview Battler Anchor
* ============================================================================
*
* 横向战斗时,角色图通常被置于中间,并且固定在脚部,而不是所有的横版战斗
* 都会这样。用这个事件,对于那些不遵从标准的角色,我们可以用不同的手段固
* 定他们。
*
* Actor, Class, Weapon, Armor, State Notetags:
* <Anchor X: y.z>
* <Anchor Y: y.z>
* 这个设置了角色横向战斗时侧视图的位置。系统默认值中X=0.5,Y=1.0。如
* 果你希望X可以向左一点你需要设置它小于5.或者设置大于5来使其向右。为了
* 提高Y方向你需要设置小于1.0的值。请不断调整直到你完成了最正确的设置。
*
*如果一个锚有多个特性,产生不同的锚,它将是
*在类似于以下顺序的优先级列表中使用:
*
* States
* Weapons
* Armors
* Class
* Actor
* Default
*
* 优先级越高,优先级越高。
*
* ============================================================================
* 敌人攻击动画
* ============================================================================
*
* 为了给你的敌人提供独特的攻击动画,你可以使用这个标签:
*
* Enemy Notetag:
* <Attack Animation: x>
* 将x替换为要设置为
* 敌人的默认攻击动画。
*
* ============================================================================
* 自动状态删除条件
* ============================================================================
*
* 默认情况下角色扮演者MV的战斗系统会自动移除状态
* 三种不同的情况:无、动作结束、转身结束。
*
* 无和转弯端按预期工作。然而,行动结束了,然而
* 各州在战斗开始时撤军,而不是在战斗结束时撤军。
* 这是改变和更新,只发生在战斗的行动结束。
*
* 现在又增加了两个自动条件:动作开始和转弯开始。
* 可以使用以下注释标记添加和实现这些注释:
*
* State Notetags:
* <Action Start: x>
* <Action Start: x to y>
* 这将导致此状态更新其在开始时剩余的回合数
* 行动。x是它将持续的圈数。如果你用x到y
* 应用该状态,该状态将被随机数圈移除
* 从x到y。
*
* <Turn Start: x>
* <Turn Start: x to y>
* 这将导致状态更新其在循环开始时剩余的轮数
* 战斗回合。x是它将持续的圈数。如果你用x到y
* 在应用状态时,状态将被随机删除
* 从x转到y。
*
* 有行动结束的状态对他们来说有一个独特的特征,如果施法者
* 状态是当前活跃的战斗者(主体),如果状态是
* 应用于用户本身,他们将获得一个“自由转身”。“自由转弯”是
* 以减轻用户因某个动作而损失1个回合的持续时间
* 结束时间,他们将失去在国家统治下的好处
* 转弯的时机。
*
* ============================================================================
* 动作序列
* ============================================================================
*
* Yanfly引擎插件-战斗引擎核心包括
* 使用自定义动作序列。动作顺序是
* 该游戏创造了一个定制的视觉和机械技能。
* 然而,战斗引擎的核心将只包括最基本的行动
* 因此,有关如何创建自定义操作序列的说明
* 将包含在此插件的未来扩展插件的帮助文件中。
*
* ============================================================================
* Changelog
* ============================================================================
*
* Version 1.43a:
* - Bug fixed to prevent crash if non-existent actions are used.
* - Optimization update.
*
* Version 1.42:
* - Optimization update.
*
* Version 1.41:
* - Fixed a bug that allowed certain sprites to remain in the active pool
* while party members were removed midway through battle.
*
* Version 1.40:
* - Updated for RPG Maker MV version 1.3.2.
*
* Version 1.39c:
* - Fixed a bug that caused dead actors to not be a part of action sequence
* targeting for "Not Focus".
* - Optimization update.
* - Updated "queueForceAction" to utilize both numbers and actual targets.
*
* Version 1.38a:
* - Optimization update.
* - Compatibility update for Selection Control v1.08.
* - Bug fixed for mirrored animations on enemies.
*
* Version 1.37:
* - Fixed a bug where if the enemy's size is too small, the enemy's name
* during selection will be cut off.
*
* Version 1.36d:
* - Made an update for the battle background image snaps when there is no
* battleback being used. This will prevent the player party and enemy troop
* from appearing in the background snapshot when entering menus mid-battle.
* - 'Death Break' action sequence now only triggers upon dead status and not
* an 'or 0 HP' condition.
* - Updated Forced Action sequencing for more efficiency.
* - 'Action Times+' traits now work properly for DTB again.
* - Optimized message displaying for battle log.
* - Optimized z sorting algorithm for sprites.
*
* Verison 1.35d:
* - Scopes that target a dead ally will automatically target the first dead
* ally now. Scopes that target all dead allies will lock onto the first dead
* ally. This will hopefully provide less confusion amongst playing.
* - Added anti-crash measure for sprite bitmaps.
* - Added anti-crash measure for faux actions.
* - Added anti-crash measure to prevent non-existant animations from playing.
* - Added a check that prevents hidden battlers from appearing when using
* certain action sequences.
*
* Version 1.34a:
* - Fixed a bug where 'NOT FOCUS' targets were not including dead members.
* - Fixed a bug where using NOT FOCUS would cause dead targets to be visible.
*
* Version 1.33:
* - Updated for RPG Maker MV version 1.1.0.
*
* Version 1.32d:
* - Fixed a bug that caused a crash when an actor died.
* - Added a motion engine to be used for future plugins.
* - Preparation for a future plugin.
* - <Anchor X: y.z> and <Anchor Y: y.z> notetags for actors are now extended
* to actors, classes, weapons, armors, and states.
* - Added <Display Text: x> and <Display Icon: x> notetags for skills and
* items. These notetags will alter the display name shown and icon shown
* respectively while performing a skill.
* - Switched Magic Reflect checking order with Counterattack checking order.
* This is to give priority to reflected actions over countered actions.
*
* Version 1.31b:
* - States with Action End now have a unique trait to them where if the caster
* of the state is the current active battler (subject) and if the state is
* then applied on the user itself, they will gain a 'free turn'. The 'free
* turn' is to mitigate the user from losing 1 duration of the turn since with
* an Action End timing, they would lose the benefit of being under the state
* for that turn's timing.
* - Added failsafes for Free Turns in case other plugins have overwritten the
* on battle start functions.
* - Added a compatibility update to Animated SV Enemies for dead motion.
*
* Version 1.30:
* - Optimization update.
* - Fixed a bug that prevented added state effects be unable to apply if they
* are an added Death state.
* - Battlelog lines are now able to display text codes.
*
* Version 1.29:
* - Fixed a bug with the 'else if' action sequences not working in the right
* order of sequence conditions.
*
* Version 1.28d:
* - Fixed a bug if instant casting a skill that would make an opponent battler
* to force an action to end incorrectly. Thanks to DoubleX for the fix.
* - Fixed a bug with mouse over not working properly.
* - Fixed a bug regarding forced actions that will cause the battle to freeze
* if the forced action causes the main active subject to leave the battle.
* - Fixed a bug with timed states not updating their turns properly.
* - Changed priority of IF action sequences to higher to no longer interfere
* other action sequences.
*
* Version 1.27:
* - Mechanic change. This will only affect those using turn-based state timing
* mechanics. Turn End state updates are now shifted from Turn End to occur at
* Regeneration timing to have a more synchronized aspect. The timings are very
* close so there's next to no notice in difference. Buff turn updates are also
* moved to the regeneration timing, too.
*
* Version 1.26:
* - Added 'Mouse Over' parameter to Selection Help. This parameter enables
* mouse users to simply hover over the enemy to select them rather than having
* to click an enemy twice to select them.
*
* Version 1.25f:
* - Added failsafes for Forced Action queues.
* - Added 'Show Select Box' parameter when selecting enemies.
* - Fixed a bug that caused End Turn events to not function properly.
* - Battle animations, by default, are positioned relative to the base bitmap
* for its target sprite. However, actor sprites do not have a base bitmap and
* therefore, battle animations, regardless of position, will always target the
* actor sprite's feet. This update now gives actor sprites a base bitmap.
* - Readjusted sprite width and sprite height calculations.
* - Added a failsafe for when no sideview actor graphics are used.
*
* Version 1.24:
* - Implemented a Forced Action queue list. This means if a Forced Action
* takes place in the middle of an action, the action will resume after the
* forced action finishes rather than cancels it out like MV does.
*
* Version 1.23:
* - Fixed a bug that didn't regenerate HP/MP/TP properly for tick-based.
*
* Version 1.22:
* - Fixed a bug within MV that caused Forced Actions at Turn End to prompt and
* trigger all turn-end related activities (such as regeneration and state turn
* updating).
* - Made a mechanic change so that Action Start and Action End state turns do
* not update their turns through forced actions.
*
* Version 1.21:
* - Fixed a bug where states Action End weren't going down properly with DTB.
*
* Version 1.20:
* - Fixed a bug where revived actors using instant cast aren't properly set to
* use actions immediately.
*
* Version 1.19:
* - Added <Attack Animation: x> notetag for enemies.
* - Added 'AI Self Turns' for Tick-Based Battles. Enemies can now have their
* A.I. revolve around their own individual turns rather than the battle's.
* - Mechanic change for states. Following suit with the change to Action End
* removal, there are now two more conditions added: Action Start, Turn Start.
* - Added <Action Start: x>, <Action Start: x to y>, <Turn Start: x>, and
* <Turn Start: x to y> notetags for automatic state removal.
*
* Version 1.18:
* - Fixed a bug with irregular targeting scopes.
* - Fixed an MV-related bug with Recover All event not refreshing battlers.
*
* Version 1.17b:
* - Fixed a bug with action end states to remove multiple at once.
* - Fixed a visual error with flinching sprites.
* - Added 'Current Max' parameter to change HP current/max display in battle.
* - Mechanic change for states that update on Action End to end at the end of
* a battler's turn instead of at the start.
* - Began preparations for another battle system.
*
* Version 1.16:
* - Fixed an issue with mirrored enemies having mirrored state icons.
*
* Version 1.15a:
* - Fixed a bug revolving the status window not updating.
* - Updated default home position formula to better fit other party sizes.
* New Home Position X:
* screenWidth - 16 - (maxSize + 2) * 32 + index * 32
* New Home Position Y:
* screenHeight - statusHeight - maxSize * 48 + (index+1) * 48 - 16
*
* Version 1.14:
* - Fixed a bug with Forced Actions locking out the battle.
* - New mechanic: For tick-based battle systems, states with action-end will
* go down in turns based on how many actions took place for the actor instead.
* Previously, they were indistinguishable from states with Turn End removal.
* - New mechanic: Using Instant Skills/Items from YEP_InstantCast.js will also
* cause states with action-end to go down in turns upon using actions.
*
* Version 1.13a:
* - Fixed a bug that made battlebacks disappear.
* - Reworked visual enemy selection.
* - Victory phase doesn't immediately display level up changes in battle
* status window.
* - Fixed a bug with the visual enemy select showing dead enemy names.
*
* Version 1.12b:
* - If the Battle HUD has been hidden for whatever reason during the victory
* sequence, it will be returned.
* - Added <speed: +x> and <speed: -x> notetags to break past editor limits.
* - Added new conditions where the battle won't end until all action sequences
* have been fulfilled.
*
* Version 1.11:
* - Fixed a bug that didn't show HP/MP Regeneration.
*
* Version 1.10:
* - Removed immortal state dependancy. Immortality is now its own setting.
* - Added more abbreviated variables for action speed calculation.
* - Fixed a bug where all-scope attacks would reveal Appear-Halfway enemies.
* - Fixed a bug where the battle wouldn't end if the final enemy was killed
* by state damage.
*
* Version 1.09:
* - Fixed a undefined actor bug for refreshing the status window.
* - Added 'Show Shadows' parameter to the plugin settings.
* - Reworked the default action sequences so that forced actions do not appear
* on top of each other and party-heal animations occur simultaneously.
*
* Version 1.08:
* - Fixed a bug where battlers gaining HP/MP in the damage formula for
* themselves wouldn't trigger popups.
* - Fixed a bug where if the party failed to escape from battle, states that
* would be removed by battle still get removed. *Fixed by Emjenoeg*
* - Fixed a bug where instant death skills didn't work.
* - Changed Sprite Priority settings to decide whether actors, enemies, or
* neither would always be on top.
*
* Version 1.07:
* - Optimized status window to refresh at a minimum.
* - Set up frame work for future plugins:
* - Added 'Escape Ratio' and 'Fail Escape Boost' to parameters to allow users
* to set the escape ratio they want.
* - Added 'Front Sprite Priority' and 'Side Sprite Priority' to parameters to
* dictate if actor sprites are always on top.
* - Added 'Tick-Settings' category for tick-based battle systems.
*
* Version 1.06:
* - Fixed a bug that causes dead actors at the start of battle to not spawn.
* - Fixed a bug where the help window on an empty slot would show the
* previous skill's message.
*
* Version 1.05:
* - Added new target typing: Character X, which allows you to select
* specifically the actor with an actor ID of X if he/she/it is in the party.
* - Fixed a bug that prevented Miss and Evade popups from showing.
*
* Version 1.04:
* - Fixed a bug where popups didn't show under certain animation types.
* - Fixed certain battler motions from not refreshing correctly.
* - Actions with no scope will not trigger the confirmation selection window.
*
* Version 1.03:
* - Added 'Wait for Effect' action sequence.
* - Actions now wait for effects (such as collapsing) to be done before
* continuing on with battle or to end battle.
*
* Version 1.02:
* - Fixed a bug where the help window would retain descriptions on no skills.
* - Synched up weapons with actor sprites so they would occur simultaneously.
* - Fixed an issue where requesting certain motions from enemies that don't
* exist would cause them to crash.
*
* Version 1.01:
* - Skills and items that affect both HP and MP will now show popups for both.
*
* Version 1.00:
* - Finished plugin!
*/
//=============================================================================
//=============================================================================
// Parameter Variables
//=============================================================================
Yanfly.Parameters = PluginManager.parameters('YEP_BattleEngineCore');
Yanfly.Param = Yanfly.Param || {};
Yanfly.Param.BECSystem = String(Yanfly.Parameters['Default System']);
Yanfly.Param.BECEscRatio = String(Yanfly.Parameters['Escape Ratio']);
Yanfly.Param.BECEscFail = String(Yanfly.Parameters['Fail Escape Boost']);
Yanfly.Param.CastCertHit = Number(Yanfly.Parameters['Certain Hit Animation']);
Yanfly.Param.CastPhysical = Number(Yanfly.Parameters['Physical Animation']);
Yanfly.Param.CastMagical = Number(Yanfly.Parameters['Magical Animation']);
Yanfly.Param.EnemyAtkAni = Number(Yanfly.Parameters['Enemy Attack Animation']);
Yanfly.Param.BECOptSpeed = String(Yanfly.Parameters['Optimize Speed']);
Yanfly.Param.BECOptSpeed = eval(Yanfly.Param.BECOptSpeed);
Yanfly.Param.BECEmergeText = String(Yanfly.Parameters['Show Emerge Text']);
Yanfly.Param.BECEmergeText = eval(Yanfly.Param.BECEmergeText);
Yanfly.Param.BECPreEmpText = String(Yanfly.Parameters['Show Pre-Emptive Text']);
Yanfly.Param.BECPreEmpText = eval(Yanfly.Param.BECPreEmpText);
Yanfly.Param.BECSurpText = String(Yanfly.Parameters['Show Surprise Text']);
Yanfly.Param.BECSurpText = eval(Yanfly.Param.BECSurpText);
Yanfly.Param.BECPopupOverlap = String(Yanfly.Parameters['Popup Overlap Rate']);
Yanfly.Param.BECPopupOverlap = eval(Yanfly.Param.BECPopupOverlap);
Yanfly.Param.BECNewPopBottom = String(Yanfly.Parameters['Newest Popup Bottom']);
Yanfly.Param.BECNewPopBottom = eval(Yanfly.Param.BECNewPopBottom);
Yanfly.Param.BECStartActCmd = String(Yanfly.Parameters['Start Actor Command']);
Yanfly.Param.BECStartActCmd = eval(Yanfly.Param.BECStartActCmd);
Yanfly.Param.BECCurMax = eval(String(Yanfly.Parameters['Current Max']));
Yanfly.Param.BECSelectHelp = String(Yanfly.Parameters['Select Help Window']);
Yanfly.Param.BECSelectHelp = eval(Yanfly.Param.BECSelectHelp);
Yanfly.Param.BECHelpUserTx = String(Yanfly.Parameters['User Help Text']);
Yanfly.Param.BECHelpAllyTx = String(Yanfly.Parameters['Ally Help Text']);
Yanfly.Param.BECHelpAlliesTx = String(Yanfly.Parameters['Allies Help Text']);
Yanfly.Param.BECHelpEnemyTx = String(Yanfly.Parameters['Enemy Help Text']);
Yanfly.Param.BECHelpEnemiesTx = String(Yanfly.Parameters['Enemies Help Text']);
Yanfly.Param.BECHelpAllTx = String(Yanfly.Parameters['All Help Text']);
Yanfly.Param.BECHelpRandTx = String(Yanfly.Parameters['Random Help Text']);
Yanfly.Param.BECFrontPosX = String(Yanfly.Parameters['Front Position X']);
Yanfly.Param.BECFrontPosY = String(Yanfly.Parameters['Front Position Y']);
Yanfly.Param.BECFrontSprite = String(Yanfly.Parameters['Front Actor Sprite']);
Yanfly.Param.BECFrontSprite = eval(Yanfly.Param.BECFrontSprite);
Yanfly.Param.BECFrSpPrio = String(Yanfly.Parameters['Front Sprite Priority']);
Yanfly.Param.BECHomePosX = String(Yanfly.Parameters['Home Position X']);
Yanfly.Param.BECHomePosY = String(Yanfly.Parameters['Home Position Y']);
Yanfly.Param.BECSideSpPrio = String(Yanfly.Parameters['Side Sprite Priority']);
Yanfly.Param.BECSideSpPrio = eval(Yanfly.Param.BECSideSpPrio);
Yanfly.Param.BECAnchorX = Number(Yanfly.Parameters['Default X Anchor']);
Yanfly.Param.BECAnchorY = Number(Yanfly.Parameters['Default Y Anchor']);
Yanfly.Param.BECStepDist = Number(Yanfly.Parameters['Step Distance']);
Yanfly.Param.BECFlinchDist = Number(Yanfly.Parameters['Flinch Distance']);
Yanfly.Param.BECShowShadows = String(Yanfly.Parameters['Show Shadows']);
Yanfly.Param.BECShowShadows = eval(Yanfly.Param.BECShowShadows);
Yanfly.Param.BECPopupDur = Number(Yanfly.Parameters['Popup Duration']);
Yanfly.Param.BECCritPopup = String(Yanfly.Parameters['Critical Popup']);
Yanfly.Param.BECCritDur = Number(Yanfly.Parameters['Critical Duration']);
Yanfly.Param.BECActionSpeed = String(Yanfly.Parameters['Action Speed']);
Yanfly.Param.BECReflectAni = Number(Yanfly.Parameters['Reflect Animation']);
Yanfly.Param.BECMotionWait = String(Yanfly.Parameters['Motion Waiting']);
Yanfly.Param.BECMotionWait = eval(Yanfly.Param.BECMotionWait);
Yanfly.Param.BECTimeStates = String(Yanfly.Parameters['Timed States']);
Yanfly.Param.BECTimeStates = eval(Yanfly.Param.BECTimeStates);
Yanfly.Param.BECTimeBuffs = String(Yanfly.Parameters['Timed Buffs']);
Yanfly.Param.BECTimeBuffs = eval(Yanfly.Param.BECTimeBuffs);
Yanfly.Param.BECTurnTime = Number(Yanfly.Parameters['Turn Time']);
Yanfly.Param.BECAISelfTurn = eval(String(Yanfly.Parameters['AI Self Turns']));
Yanfly.Param.BECLowerWindows = String(Yanfly.Parameters['Lower Windows']);
Yanfly.Param.BECLowerWindows = eval(Yanfly.Param.BECLowerWindows);
Yanfly.Param.BECSelectMouseOver = eval(String(Yanfly.Parameters['Mouse Over']));
Yanfly.Param.BECEnemySelect = String(Yanfly.Parameters['Visual Enemy Select']);
Yanfly.Param.BECEnemySelect = eval(Yanfly.Param.BECEnemySelect);
Yanfly.Param.BECActorSelect = String(Yanfly.Parameters['Visual Actor Select']);
Yanfly.Param.BECActorSelect = eval(Yanfly.Param.BECActorSelect);
Yanfly.Param.BECWindowRows = Number(Yanfly.Parameters['Window Rows']);
Yanfly.Param.BECEnemyFontSize = Number(Yanfly.Parameters['Enemy Font Size']);
Yanfly.Param.BECShowEnemyName = String(Yanfly.Parameters['Show Enemy Name']);
Yanfly.Param.BECShowEnemyName = eval(Yanfly.Param.BECShowEnemyName);
Yanfly.Param.BECShowSelectBox = String(Yanfly.Parameters['Show Select Box']);
Yanfly.Param.BECShowSelectBox = eval(Yanfly.Param.BECShowSelectBox);
Yanfly.Param.BECEnemyAutoSel = String(Yanfly.Parameters['Enemy Auto Select']);
Yanfly.Param.BECCommandAlign = String(Yanfly.Parameters['Command Alignment']);
Yanfly.Param.BECCommandRows = Number(Yanfly.Parameters['Command Window Rows']);
Yanfly.Param.BECAniBaseDel = Number(Yanfly.Parameters['Animation Base Delay']);
Yanfly.Param.BECAniNextDel = Number(Yanfly.Parameters['Animation Next Delay']);
Yanfly.Param.BECFullActText = String(Yanfly.Parameters['Show Action Text']);
Yanfly.Param.BECFullActText = eval(Yanfly.Param.BECFullActText);
Yanfly.Param.BECShowCntText = String(Yanfly.Parameters['Show Counter Text']);
Yanfly.Param.BECShowCntText = eval(Yanfly.Param.BECShowCntText);
Yanfly.Param.BECShowRflText = String(Yanfly.Parameters['Show Reflect Text']);
Yanfly.Param.BECShowRflText = eval(Yanfly.Param.BECShowRflText);
Yanfly.Param.BECShowSubText = String(Yanfly.Parameters['Show Substitute Text']);
Yanfly.Param.BECShowSubText = eval(Yanfly.Param.BECShowSubText);
Yanfly.Param.BECShowFailText = String(Yanfly.Parameters['Show Fail Text']);
Yanfly.Param.BECShowFailText = eval(Yanfly.Param.BECShowFailText);
Yanfly.Param.BECShowCritText = String(Yanfly.Parameters['Show Critical Text']);
Yanfly.Param.BECShowCritText = eval(Yanfly.Param.BECShowCritText);
Yanfly.Param.BECShowMissText = String(Yanfly.Parameters['Show Miss Text']);
Yanfly.Param.BECShowMissText = eval(Yanfly.Param.BECShowMissText);
Yanfly.Param.BECShowEvaText = String(Yanfly.Parameters['Show Evasion Text']);
Yanfly.Param.BECShowEvaText = eval(Yanfly.Param.BECShowEvaText);
Yanfly.Param.BECShowHpText = String(Yanfly.Parameters['Show HP Text']);
Yanfly.Param.BECShowHpText = eval(Yanfly.Param.BECShowHpText);
Yanfly.Param.BECShowMpText = String(Yanfly.Parameters['Show MP Text']);
Yanfly.Param.BECShowMpText = eval(Yanfly.Param.BECShowMpText);
Yanfly.Param.BECShowTpText = String(Yanfly.Parameters['Show TP Text']);
Yanfly.Param.BECShowTpText = eval(Yanfly.Param.BECShowTpText);
Yanfly.Param.BECShowStateText = String(Yanfly.Parameters['Show State Text']);
Yanfly.Param.BECShowStateText = eval(Yanfly.Param.BECShowStateText);
Yanfly.Param.BECShowBuffText = String(Yanfly.Parameters['Show Buff Text']);
Yanfly.Param.BECShowBuffText = eval(Yanfly.Param.BECShowBuffText);
//=============================================================================
// DataManager
//=============================================================================
Yanfly.BEC.DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
DataManager.isDatabaseLoaded = function() {
if (!Yanfly.BEC.DataManager_isDatabaseLoaded.call(this)) return false;
if (!Yanfly._loaded_YEP_BattleEngineCore) {
this.processMELODYNotetags($dataSkills);
this.processMELODYNotetags($dataItems);
this.processBECNotetags1($dataSkills);
this.processBECNotetags2($dataSkills);
this.processBECNotetags2($dataItems);
this.processBECNotetags3($dataEnemies);
this.processBECNotetags4($dataActors);
this.processBECNotetags4($dataClasses);
this.processBECNotetags4($dataWeapons);
this.processBECNotetags4($dataArmors);
this.processBECNotetags4($dataEnemies);
this.processBECNotetags4($dataStates);
this.processBECNotetags5($dataActors, true);
this.processBECNotetags5($dataClasses, false);
this.processBECNotetags5($dataWeapons, false);
this.processBECNotetags5($dataArmors, false);
this.processBECNotetags5($dataStates, false);
this.processBECNotetags6($dataStates);
Yanfly._loaded_YEP_BattleEngineCore = true;
}
return true;
};
DataManager.processMELODYNotetags = function(group) {
for (var n = 1; n < group.length; n++) {
var obj = group[n];
if (obj.actionsMade) continue;
obj.actionsMade = true;
var notedata = obj.note.split(/[\r\n]+/);
var actionType = 0;
this.setDefaultActions(obj);
for (var i = 0; i < notedata.length; i++) {
var line = notedata[i];
if (line.match(/<(?:SETUP ACTION|setup)>/i)) {
actionType = 1;
obj.setupActions = [];
} else if (line.match(/<\/(?:SETUP ACTION|setup)>/i)) {
var actionType = 0;
} else if (line.match(/<(?:WHOLE ACTION|whole)>/i)) {
actionType = 2;
obj.wholeActions = [];
} else if (line.match(/<\/(?:WHOLE ACTION|whole)>/i)) {
var actionType = 0;
} else if (line.match(/<(?:TARGET ACTION|target)>/i)) {
actionType = 3;
obj.targetActions = [];
} else if (line.match(/<\/(?:TARGET ACTION|target)>/i)) {
var actionType = 0;
} else if (line.match(/<(?:FOLLOW ACTION|follow)>/i)) {
actionType = 4;
obj.followActions = [];
} else if (line.match(/<\/(?:FOLLOW ACTION|follow)>/i)) {
var actionType = 0;
} else if (line.match(/<(?:FINISH ACTION|finish)>/i)) {
actionType = 5;
obj.finishActions = [];
} else if (line.match(/<\/(?:FINISH ACTION|finish)>/i)) {
var actionType = 0;
} else {
this.convertSequenceLine(obj, line, actionType);
}
}
}
};
Yanfly.BEC.DefaultActionSetup = [
['CLEAR BATTLE LOG'],
['DISPLAY ACTION'],
['IMMORTAL', ['TARGETS', 'TRUE']],
['PERFORM START'],
['WAIT FOR MOVEMENT'],
['CAST ANIMATION'],
['WAIT FOR ANIMATION']
];
Yanfly.BEC.DefaultActionWhole = [
['PERFORM ACTION'],
];
Yanfly.BEC.DefaultActionTarget = [
['PERFORM ACTION'],
];
if (Yanfly.Param.BECMotionWait) {
Yanfly.BEC.DefaultActionWhole.push(['MOTION WAIT', ['USER']]);
Yanfly.BEC.DefaultActionTarget.push(['MOTION WAIT', ['USER']]);
} else {
Yanfly.BEC.DefaultActionWhole.push(['WAIT', [10]]);
Yanfly.BEC.DefaultActionTarget.push(['WAIT', [10]]);
};
Yanfly.BEC.DefaultActionWhole.push(['ACTION ANIMATION']);
Yanfly.BEC.DefaultActionWhole.push(['WAIT FOR ANIMATION']);
Yanfly.BEC.DefaultActionTarget.push(['ACTION ANIMATION']);
Yanfly.BEC.DefaultActionTarget.push(['WAIT FOR ANIMATION']);
Yanfly.BEC.DefaultActionFollow = [
];
Yanfly.BEC.DefaultActionFinish = [
['IMMORTAL', ['TARGETS', 'FALSE']],
['WAIT FOR NEW LINE'],
['CLEAR BATTLE LOG'],
['PERFORM FINISH'],
['WAIT FOR MOVEMENT'],
['WAIT FOR EFFECT'],
['ACTION COMMON EVENT'],
];
DataManager.setDefaultActions = function(obj) {
obj.setupActions = Yanfly.BEC.DefaultActionSetup.slice();
if (this.isWholeAction(obj)) {
obj.wholeActions = Yanfly.BEC.DefaultActionWhole.slice();
this.addActionEffects(obj, obj.wholeActions);
obj.targetActions = [];
} else {
obj.wholeActions = [];
obj.targetActions = Yanfly.BEC.DefaultActionTarget.slice();
this.addActionEffects(obj, obj.targetActions);
}
obj.followActions = Yanfly.BEC.DefaultActionFollow.slice();
obj.finishActions = Yanfly.BEC.DefaultActionFinish.slice();
};
DataManager.isWholeAction = function(obj) {
if (obj.animationId > 0 && $dataAnimations[obj.animationId]) {
var animation = $dataAnimations[obj.animationId];
if (animation.position === 3) return true;
if (animation.position !== 3 && [2, 8, 10].contains(obj.scope)) return true;
}
return false;
};
DataManager.addActionEffects = function(obj, array) {
for (;;) {
array[array.length] = ['ACTION EFFECT'];
array[array.length] = ['DEATH BREAK'];
obj.repeats -= 1;
if (obj.repeats <= 0) break;
array[array.length] = ['WAIT', [8]];
}
obj.repeats = 1;
};
Yanfly.BEC.SeqType6 =
/[ ]*(.*):[ ](.*),[ ](.*),[ ](.*),[ ](.*),[ ](.*),[ ](.*)/i;
Yanfly.BEC.SeqType5 =
/[ ]*(.*):[ ](.*),[ ](.*),[ ](.*),[ ](.*),[ ](.*)/i;
Yanfly.BEC.SeqType4 =
/[ ]*(.*):[ ](.*),[ ](.*),[ ](.*),[ ](.*)/i;
Yanfly.BEC.SeqType3 =
/[ ]*(.*):[ ](.*),[ ](.*),[ ](.*)/i;
Yanfly.BEC.SeqType2 =
/[ ]*(.*):[ ](.*),[ ](.*)/i;
Yanfly.BEC.SeqType1 =
/[ ]*(.*):[ ](.*)/i;
Yanfly.BEC.SeqType0 =
/[ ]*(.*)/i;
DataManager.convertSequenceLine = function(obj, line, actionType) {
if (actionType <= 0 || actionType > 5) return;
Yanfly.BEC.SeqType;
var seqArgs;
if (line.match(Yanfly.BEC.SeqType6)) {
Yanfly.BEC.SeqType = RegExp.$1;
seqArgs =
[RegExp.$2, RegExp.$3, RegExp.$4, RegExp.$5, RegExp.$6, RegExp.$7];
} else if (line.match(Yanfly.BEC.SeqType5)) {
Yanfly.BEC.SeqType = RegExp.$1;
seqArgs = [RegExp.$2, RegExp.$3, RegExp.$4, RegExp.$5, RegExp.$6];
} else if (line.match(Yanfly.BEC.SeqType4)) {
Yanfly.BEC.SeqType = RegExp.$1;
seqArgs = [RegExp.$2, RegExp.$3, RegExp.$4, RegExp.$5];
} else if (line.match(Yanfly.BEC.SeqType3)) {
Yanfly.BEC.SeqType = RegExp.$1;
seqArgs = [RegExp.$2, RegExp.$3, RegExp.$4];
} else if (line.match(Yanfly.BEC.SeqType2)) {
Yanfly.BEC.SeqType = RegExp.$1;
seqArgs = [RegExp.$2, RegExp.$3];
} else if (line.match(Yanfly.BEC.SeqType1)) {
Yanfly.BEC.SeqType = RegExp.$1;
seqArgs = [RegExp.$2];
} else if (line.match(Yanfly.BEC.SeqType0)) {
Yanfly.BEC.SeqType = RegExp.$1;
seqArgs = [];
} else {
return;
}
var array = [Yanfly.BEC.SeqType, seqArgs];
if (actionType === 1) obj.setupActions[obj.setupActions.length] = array;
if (actionType === 2) obj.wholeActions[obj.wholeActions.length] = array;
if (actionType === 3) obj.targetActions[obj.targetActions.length] = array;
if (actionType === 4) obj.followActions[obj.followActions.length] = array;
if (actionType === 5) obj.finishActions[obj.finishActions.length] = array;
};
DataManager.processBECNotetags1 = function(group) {
var note1 = /<(?:CAST ANIMATION|cast ani):[ ](\d+)>/i;
for (var n = 1; n < group.length; n++) {
var obj = group[n];
var notedata = obj.note.split(/[\r\n]+/);
obj.castAnimation = 0;
if (obj.hitType === 0) obj.castAnimation = Yanfly.Param.CastCertHit;
if (obj.hitType === 1) obj.castAnimation = Yanfly.Param.CastPhysical;
if (obj.hitType === 2) obj.castAnimation = Yanfly.Param.CastMagical;
for (var i = 0; i < notedata.length; i++) {
var line = notedata[i];
if (line.match(note1)) {
obj.castAnimation = parseInt(RegExp.$1);
}
}
}
};
DataManager.processBECNotetags2 = function(group) {
var note1 = /<(?:ACTION COPY):[ ](.*):[ ]*(\d+)>/i;
var note2 = /<(?:SPEED):[ ]([\+\-]\d+)>/i;
var note3 = /<(?:DISPLAY NAME|DISPLAY TEXT):[ ](.*)>/i;
var note4 = /<(?:DISPLAY ICON):[ ](\d+)>/i;
for (var n = 1; n < group.length; n++) {
var obj = group[n];
var notedata = obj.note.split(/[\r\n]+/);
obj.battleDisplayText = obj.name;
obj.battleDisplayIcon = obj.iconIndex;
for (var i = 0; i < notedata.length; i++) {
var line = notedata[i];
if (line.match(note1)) {
var text = String(RegExp.$1).toUpperCase();
var target;
if (['I', 'ITEM'].contains(text)) {
target = $dataItems[parseInt(RegExp.$2)];
} else if (['S', 'SKILL'].contains(text)) {
target = $dataSkills[parseInt(RegExp.$2)];
}
if (target) {
obj.setupActions = target.setupActions.slice();
obj.wholeActions = target.wholeActions.slice();
obj.targetActions = target.targetActions.slice();
obj.followActions = target.followActions.slice();
obj.finishActions = target.finishActions.slice();
}
} else if (line.match(note2)) {
obj.speed = parseInt(RegExp.$1);
} else if (line.match(note3)) {
obj.battleDisplayText = String(RegExp.$1);
} else if (line.match(note4)) {
obj.battleDisplayIcon = parseInt(RegExp.$1);
}
}
}
};
DataManager.processBECNotetags3 = function(group) {
var note1 = /<(?:ATTACK ANIMATION|attack ani):[ ](\d+)>/i;
for (var n = 1; n < group.length; n++) {
var obj = group[n];
var notedata = obj.note.split(/[\r\n]+/);
obj.attackAnimationId = Yanfly.Param.EnemyAtkAni;
for (var i = 0; i < notedata.length; i++) {
var line = notedata[i];
if (line.match(note1)) {
obj.attackAnimationId = parseInt(RegExp.$1);
}
}
}
};
DataManager.processBECNotetags4 = function(group) {
var note1 = /<(?:REFLECT ANIMATION|reflect ani):[ ](\d+)>/i;
for (var n = 1; n < group.length; n++) {
var obj = group[n];
var notedata = obj.note.split(/[\r\n]+/);
obj.reflectAnimationId = 0;
obj.spriteCannotMove = false;
for (var i = 0; i < notedata.length; i++) {
var line = notedata[i];
if (line.match(note1)) {
obj.reflectAnimationId = parseInt(RegExp.$1);
} else if (line.match(/<(?:SPRITE CANNOT MOVE)>/i)) {
obj.spriteCannotMove = true;
}
}
}
};
DataManager.processBECNotetags5 = function(group, isActor) {
for (var n = 1; n < group.length; n++) {
var obj = group[n];
var notedata = obj.note.split(/[\r\n]+/);
if (isActor) {
obj.anchorX = Yanfly.Param.BECAnchorX;
obj.anchorY = Yanfly.Param.BECAnchorY;
}
for (var i = 0; i < notedata.length; i++) {
var line = notedata[i];
if (line.match(/<(?:ANCHOR X):[ ](\d+)[.](\d+)>/i)) {
obj.anchorX = eval(String(RegExp.$1) + '.' + String(RegExp.$2));
} else if (line.match(/<(?:ANCHOR Y):[ ](\d+)[.](\d+)>/i)) {
obj.anchorY = eval(String(RegExp.$1) + '.' + String(RegExp.$2));
}
}
}
};
DataManager.processBECNotetags6 = function(group) {
var note1a = /<(?:ACTION START):[ ](\d+)>/i;
var note1b = /<(?:ACTION START):[ ](\d+)[ ](?:THROUGH|to)[ ](\d+)>/i;
var note2a = /<(?:TURN START):[ ](\d+)>/i;
var note2b = /<(?:TURN START):[ ](\d+)[ ](?:THROUGH|to)[ ](\d+)>/i;
for (var n = 1; n < group.length; n++) {
var obj = group[n];
var notedata = obj.note.split(/[\r\n]+/);
for (var i = 0; i < notedata.length; i++) {
var line = notedata[i];
if (line.match(note1a)) {
var turns = parseInt(RegExp.$1);
obj.autoRemovalTiming = 3;
obj.maxTurns = turns;
obj.minTurns = turns;
} else if (line.match(note1b)) {
var turns1 = parseInt(RegExp.$1);
var turns2 = parseInt(RegExp.$2);
obj.autoRemovalTiming = 3;
obj.maxTurns = turns1;
obj.minTurns = turns2;
} else if (line.match(note2a)) {
var turns = parseInt(RegExp.$1);
obj.autoRemovalTiming = 4;
obj.maxTurns = turns;
obj.minTurns = turns;
} else if (line.match(note2b)) {
var turns1 = parseInt(RegExp.$1);
var turns2 = parseInt(RegExp.$2);
obj.autoRemovalTiming = 4;
obj.maxTurns = turns1;
obj.minTurns = turns2;
}
}
}
};
//=============================================================================
// TouchInput
//=============================================================================
Yanfly.BEC.TouchInput_onMouseMove = TouchInput._onMouseMove;
TouchInput._onMouseMove = function(event) {
Yanfly.BEC.TouchInput_onMouseMove.call(this, event);
this._mouseOverX = Graphics.pageToCanvasX(event.pageX);
this._mouseOverY = Graphics.pageToCanvasY(event.pageY);
};
//=============================================================================
// BattleManager
//=============================================================================
Yanfly.BEC.BattleManager_initMembers = BattleManager.initMembers;
BattleManager.initMembers = function() {
Yanfly.BEC.BattleManager_initMembers.call(this);
this._forceSelection = false;
this._allSelection = false;
this._victoryPhase = false;
this._forceActionQueue = [];
};
BattleManager.isBattleSystem = function(value) {
return value.toLowerCase() === $gameSystem.getBattleSystem();
};
BattleManager.isDTB = function() {
return this.isBattleSystem('dtb');
};
BattleManager.isTurnBased = function() {
if (this.isDTB()) return true;
return false;
};
BattleManager.isTickBased = function() {
return !this.isTurnBased();
};
BattleManager.tickRate = function() {
return 1;
};
BattleManager.forceSelection = function() {
this._forceSelection = true;
};
BattleManager.isForceSelection = function() {
return this._forceSelection;
};
BattleManager.resetSelection = function() {
this._forceSelection = false;
};
BattleManager.startAllSelection = function() {
this._allSelection = true;
};
BattleManager.isAllSelection = function() {
return this._allSelection && BattleManager.isInputting();
};
BattleManager.stopAllSelection = function() {
this._allSelection = false;
};
Yanfly.BEC.BattleManager_makeEscapeRatio = BattleManager.makeEscapeRatio;
BattleManager.makeEscapeRatio = function() {
if (this.isDTB()) {
var code = Yanfly.Param.BECEscRatio;
try {
this._escapeRatio = eval(code);
} catch (e) {
this._escapeRatio = 0;
Yanfly.Util.displayError(e, code, 'ESCAPE RATIO FORMULA ERROR');
}
var code = Yanfly.Param.BECEscFail;
try {
this._escapeFailBoost = eval(code);
} catch (e) {
this._escapeFailBoost = 0;
Yanfly.Util.displayError(e, code, 'ESCAPE FAIL BOOST FORMULA ERROR');
}
} else {
this._escapeFailBoost = 0.1;
Yanfly.BEC.BattleManager_makeEscapeRatio.call(this);
}
};
BattleManager.timeBasedStates = function() {
if (!$gameParty.inBattle()) return false;
if (this.isTurnBased()) return false;
if (this._timeBasedStates !== undefined) return this._timeBasedStates;
this._timeBasedStates = Yanfly.Param.BECTimeStates;
return this._timeBasedStates;
};
BattleManager.timeBasedBuffs = function() {
if (!$gameParty.inBattle()) return false;
if (this.isTurnBased()) return false;
if (this._timeBasedBuffs !== undefined) return this._timeBasedBuffs;
this._timeBasedBuffs = Yanfly.Param.BECTimeBuffs;
return this._timeBasedBuffs;
};
BattleManager.displayStartMessages = function() {
if (Yanfly.Param.BECEmergeText) {
$gameTroop.enemyNames().forEach(function(name) {
$gameMessage.add(TextManager.emerge.format(name));
});
}
if (this._preemptive && Yanfly.Param.BECPreEmpText) {
$gameMessage.add(TextManager.preemptive.format($gameParty.name()));
} else if (this._surprise && Yanfly.Param.BECSurpText) {
$gameMessage.add(TextManager.surprise.format($gameParty.name()));
}
};
BattleManager.registerSprite = function(battler, sprite) {
if (!this._registeredSprites) this._registeredSprites = {};
if (battler.isActor()) var id = 100000 + battler.actorId();
if (battler.isEnemy()) var id = 200000 + battler.index();
this._registeredSprites[id] = sprite;
};
BattleManager.getSprite = function(battler) {
if (!this._registeredSprites) this._registeredSprites = {};
if (battler.isActor()) var id = 100000 + battler.actorId();
if (battler.isEnemy()) var id = 200000 + battler.index();
return this._registeredSprites[id];
};
BattleManager.setSpritePriority = function() {
if ($gameSystem.isSideView()) {
this._spritePriority = Yanfly.Param.BECSideSpPrio;
} else {
this._spritePriority = Yanfly.Param.BECFrontSprite;
}
if (this._spritePriority === false) this._spritePriority = 0;
if (this._spritePriority === true) this._spritePriority = 1;
};
BattleManager.getSpritePriority = function() {
if (!this._spritePriority) this.setSpritePriority();
return this._spritePriority;
};
BattleManager.changeActor = function(newActorIndex, lastActorActionState) {
var lastActor = this.actor();
this._actorIndex = newActorIndex;
var newActor = this.actor();
if (lastActor) {
lastActor.setActionState(lastActorActionState);
lastActor.spriteReturnHome();
}
if (newActor) {
newActor.setActionState('inputting');
newActor.spriteStepForward();
}
};
BattleManager.createActions = function() {
$gameParty.createActions();
$gameTroop.createActions();
};
BattleManager.clearInputtingAction = function() {
if (this.inputtingAction()) this.inputtingAction().clear();
};
Yanfly.BEC.BattleManager_checkBattleEnd = BattleManager.checkBattleEnd;
BattleManager.checkBattleEnd = function() {
if (this._phase === 'actionList') return false;
if (this._phase === 'actionTargetList') return false;
if (this._phase === 'action') return false;
if (this._phase === 'phaseChange') return false;
if ($gameTroop.isEventRunning()) return false;
return Yanfly.BEC.BattleManager_checkBattleEnd.call(this);
};
Yanfly.BEC.BattleManager_processTurn = BattleManager.processTurn;
BattleManager.processTurn = function() {
this._processTurn = true;
Yanfly.BEC.BattleManager_processTurn.call(this);
this._processTurn = false;
};
Yanfly.BEC.BattleManager_processVictory = BattleManager.processVictory;
BattleManager.processVictory = function() {
this._logWindow.clear();
this._victoryPhase = true;
if (this._windowLayer) this._windowLayer.x = 0;
Yanfly.BEC.BattleManager_processVictory.call(this);
};
BattleManager.processEscape = function() {
$gameParty.performEscape();
SoundManager.playEscape();
var success = this._preemptive ? true : (Math.random() < this._escapeRatio);
if ($gamePlayer.isDebugThrough()) success = true;
if (success) {
$gameParty.performEscapeSuccess();
this.displayEscapeSuccessMessage();
this._escaped = true;
this.processAbort();
} else {
this.displayEscapeFailureMessage();
this._escapeRatio += this._escapeFailBoost;
$gameParty.clearActions();
this.startTurn();
}
return success;
};
Yanfly.BEC.BattleManager_processAbort = BattleManager.processAbort;
BattleManager.processAbort = function() {
$gameParty.removeBattleStates();
Yanfly.BEC.BattleManager_processAbort.call(this);
};
BattleManager.refreshAllMembers = function() {
$gameParty.refreshMembers();
$gameTroop.refreshMembers();
};
BattleManager.startTurn = function() {
this._enteredEndPhase = false;
this._phase = 'turn';
this.clearActor();
$gameTroop.increaseTurn();
$gameParty.onTurnStart();
$gameTroop.onTurnStart();
this._performedBattlers = [];
this.makeActionOrders();
$gameParty.requestMotionRefresh();
this._logWindow.startTurn();
this._subject = this.getNextSubject();
};
Yanfly.BEC.BattleManager_endTurn = BattleManager.endTurn;
BattleManager.endTurn = function() {
if (this.isTurnBased() && this._spriteset.isPopupPlaying()) return;
if (this.isTurnBased() && this._enteredEndPhase) {
this._phase = 'turnEnd';
this._preemptive = false;
this._surprise = false;
return;
}
this._enteredEndPhase = true;
Yanfly.BEC.BattleManager_endTurn.call(this);
BattleManager.refreshAllMembers();
};
BattleManager.getNextSubject = function() {
if ($gameTroop.turnCount() <= 0) return;
this._performedBattlers = this._performedBattlers || [];
this.makeActionOrders();
for (;;) {
var battlerArray = [];
for (var i = 0; i < this._actionBattlers.length; ++i) {
var obj = this._actionBattlers[i];
if (!this._performedBattlers.contains(obj)) battlerArray.push(obj);
}
this._actionBattlers = battlerArray;
var battler = this._actionBattlers.shift();
if (!battler) return null;
if (battler.isBattleMember() && battler.isAlive()) {
this._performedBattlers.push(battler);
return battler;
}
}
};
BattleManager.update = function() {
if (!this.isBusy() && !this.updateEvent()) {
switch (this._phase) {
case 'start':
this.startInput();
break;
case 'turn':
this.updateTurn();
break;
case 'action':
this.updateAction();
break;
case 'phaseChange':
this.updatePhase();
break;
case 'actionList':
this.updateActionList()
break;
case 'actionTargetList':
this.updateActionTargetList()
break;
case 'turnEnd':
this.updateTurnEnd();
break;
case 'battleEnd':
this.updateBattleEnd();
break;
}
}
};
BattleManager.updateEvent = function() {
if (this._processingForcedAction) return false;
switch (this._phase) {
case 'start':
case 'turn':
case 'turnEnd':
case 'actionList':
case 'actionTargetList':
if (this.isActionForced()) {
this.processForcedAction();
return true;
} else {
return this.updateEventMain();
}
}
return this.checkAbort();
};
BattleManager.queueForceAction = function(user, skillId, target) {
if (target === undefined) {
var targetIndex = 0;
} else if (typeof target === 'number') {
var targetIndex = target;
} else {
var targetIndex = target.index();
}
var param = [
user.isEnemy() ? 0 : 1,
user.isActor() ? user.actorId() : user.index(),
skillId,
targetIndex
];
var command = {
code: 339,
indent: 0,
parameters: param
}
$gameTemp.forceActionQueue(command);
this.clearResults();
if (this.isTickBased()) this._phase = 'action';
};
BattleManager.addText = function(text, wait) {
if (!SceneManager._scene._logWindow) return;
wait = wait || 0;
SceneManager._scene._logWindow.addText(text);
if (wait <= 0) return;
var last = this._actionList[this._actionList.length - 1];
if (last && last[0] === 'WAIT') return;
this._actionList.push(['WAIT', [wait]]);
};
BattleManager.clearResults = function() {
var group = this.allBattleMembers();
var length = group.length;
for (var i = 0; i < length; ++i) {
var member = group[i];
if (member) member.clearResult();
}
this._allTargets = [];
this._targets = [];
this._target = undefined;
};
Yanfly.BEC.BattleManager_forceAction = BattleManager.forceAction;
BattleManager.forceAction = function(battler) {
if (this._subject) this._subject.clearResult();
this.createForceActionFailSafes();
this.savePreForceActionSettings();
Yanfly.BEC.BattleManager_forceAction.call(this, battler);
};
BattleManager.createForceActionFailSafes = function() {
this._actionList = this._actionList || [];
this._targets = this._targets || [];
this._allTargets = this._allTargets || [];
this._individualTargets = this._individualTargets || [];
this._phaseSteps = this._phaseSteps || [];
this._conditionFlags = this._conditionFlags || [];
this._trueFlags = this._trueFlags || [];
};
BattleManager.savePreForceActionSettings = function() {
var settings = this.setPreForceActionSettings();
this._forceActionQueue.push(settings);
};
BattleManager.setPreForceActionSettings = function() {
return {
subject: this._subject,
action: JsonEx.makeDeepCopy(this._action),
actionList: JsonEx.makeDeepCopy(this._actionList),
targets: this._targets.slice(),
allTargets: this._allTargets.slice(),
indTargets: this._individualTargets.slice(),
phaseSteps: JsonEx.makeDeepCopy(this._phaseSteps),
returnPhase: this._returnPhase,
phase: this._phase,
conditionFlags: JsonEx.makeDeepCopy(this._conditionFlags),
trueFlags: JsonEx.makeDeepCopy(this._trueFlags)
}
};
BattleManager.loadPreForceActionSettings = function() {
var settings = this._forceActionQueue[0];
if (settings) {
this._forceActionQueue.shift();
this.resetPreForceActionSettings(settings);
return this._subject && this._subject.isAppeared();
} else {
return false;
}
};
BattleManager.resetPreForceActionSettings = function(settings) {
this._subject = settings['subject'];
this._action = settings['action'];
this._actionList = settings['actionList'];
this._targets = settings['targets'];
this._allTargets = settings['allTargets'];
this._individualTargets = settings['indTargets'];
this._phaseSteps = settings['phaseSteps'];
this._returnPhase = settings['returnPhase'];
this._conditionFlags = settings['conditionFlags'];
this._trueFlags = settings['trueFlags'];
this._phase = settings['phase'];
};
Yanfly.BEC.BattleManager_processForcedAction =
BattleManager.processForcedAction;
BattleManager.processForcedAction = function() {
if (this._actionForcedBattler) {
this._preForcePhase = this._phase;
this._processingForcedAction = true;
}
Yanfly.BEC.BattleManager_processForcedAction.call(this);
};
BattleManager.setTargets = function(array) {
this._targets = [];
var max = array.length;
for (var i = 0; i < max; ++i) {
var target = array[i];
if (target) this._targets.push(target);
}
};
BattleManager.updateAction = function() {
var target = this._targets.shift();
if (target) {
this.invokeAction(this._subject, target);
} else {
if (this._returnPhase === 'target') {
this.setTargets([this._individualTargets[0]]);
this._phase = 'actionTargetList';
} else {
this.setTargets(this._allTargets.slice());
this._phase = 'actionList';
}
}
};
BattleManager.invokeAction = function(subject, target) {
if (!Yanfly.Param.BECOptSpeed) this._logWindow.push('pushBaseLine');
var normal = true;
if (Math.random() < this._action.itemMrf(target)) {
this.invokeMagicReflection(subject, target);
} else if (Math.random() < this._action.itemCnt(target)) {
this.invokeCounterAttack(subject, target);
} else {
this.invokeNormalAction(subject, target);
}
if (subject) subject.setLastTarget(target);
if (!Yanfly.Param.BECOptSpeed) this._logWindow.push('popBaseLine');
};
BattleManager.invokeCounterAttack = function(subject, target) {
var action = new Game_Action(target);
this._logWindow.displayCounter(target);
action.setAttack();
action.apply(subject);
this._logWindow.displayActionResults(target, subject);
if (subject.isDead()) subject.performCollapse();
};
Yanfly.BEC.BattleManager_invokeMagicReflection =
BattleManager.invokeMagicReflection;
BattleManager.invokeMagicReflection = function(subject, target) {
Yanfly.BEC.BattleManager_invokeMagicReflection.call(this, subject, target);
if (subject.isDead()) subject.performCollapse();
};
BattleManager.updatePhase = function() {
var phase = this._phaseSteps.shift();
if (phase) this.createPhaseChanges();
switch (phase) {
case 'setup':
this.createSetupActions();
break;
case 'whole':
this.createWholeActions();
break;
case 'target':
this.createTargetActions();
break;
case 'follow':
this.createFollowActions();
break;
case 'finish':
this.createFinishActions();
break;
default:
this.endAction();
break;
}
};
BattleManager.createPhaseChanges = function() {
this._phase = 'actionList';
this.setTargets(this._allTargets.slice());
this._conditionFlags = [];
this._trueFlags = [];
};
BattleManager.createSetupActions = function() {
$gameTemp.clearActionSequenceSettings();
this._returnPhase = 'setup';
this._actionList = this._action.item().setupActions.slice();
};
BattleManager.createWholeActions = function() {
this._returnPhase = 'whole';
this._actionList = this._action.item().wholeActions.slice();
};
BattleManager.createTargetActions = function() {
this._returnPhase = 'target';
this._phase = 'actionTargetList';
this.setTargets([this._individualTargets[0]]);
this._actionList = this._action.item().targetActions.slice();
};
BattleManager.createFollowActions = function() {
this._returnPhase = 'follow';
this._actionList = this._action.item().followActions.slice();
};
BattleManager.createFinishActions = function() {
this._returnPhase = 'finish';
this._actionList = this._action.item().finishActions.slice();
};
Yanfly.BEC.BattleManager_endAction = BattleManager.endAction;
BattleManager.endAction = function() {
if (this._subject) {
this._subject.onAllActionsEnd();
}
if (this._processingForcedAction) {
this._subject.removeCurrentAction();
this._phase = this._preForcePhase;
}
this._processingForcedAction = false;
if (this.loadPreForceActionSettings()) return;
Yanfly.BEC.BattleManager_endAction.call(this);
};
BattleManager.updateActionList = function() {
for (;;) {
this._actSeq = this._actionList.shift();
if (this._actSeq) {
if (!this.actionConditionsMet(this._actSeq)) continue;
var seqName = this._actSeq[0].toUpperCase();
if (!this.processActionSequenceCheck(seqName, this._actSeq[1])) {
break;
}
} else {
this._phase = 'phaseChange';
break;
}
}
};
BattleManager.updateActionTargetList = function() {
for (;;) {
this._actSeq = this._actionList.shift();
if (this._actSeq) {
if (!this.actionConditionsMet(this._actSeq)) continue;
var seqName = this._actSeq[0].toUpperCase();
if (!this.processActionSequenceCheck(seqName, this._actSeq[1])) {
break;
}
} else if (this._individualTargets.length > 0) {
this._individualTargets.shift();
if (this._individualTargets.length > 0) {
this.setTargets([this._individualTargets[0]]);
this._actionList = this._action.item().targetActions.slice();
} else {
this._phase = 'phaseChange';
break;
}
} else {
this._phase = 'phaseChange';
break;
}
}
};
BattleManager.updateActionTargetList = function() {
for (;;) {
this._actSeq = this._actionList.shift();
if (this._actSeq) {
if (!this.actionConditionsMet(this._actSeq)) continue;
var seqName = this._actSeq[0].toUpperCase();
if (!this.processActionSequenceCheck(seqName, this._actSeq[1])) {
break;
}
} else if (this._individualTargets.length > 0) {
this._individualTargets.shift();
if (this._individualTargets.length > 0) {
this.setTargets([this._individualTargets[0]]);
this._actionList = this._action.item().targetActions.slice();
} else {
this._phase = 'phaseChange';
break;
}
} else {
this._phase = 'phaseChange';
break;
}
}
};
BattleManager.startAction = function() {
var subject = this._subject;
if (!subject) return this.endAction();
var action = subject.currentAction();
this._action = action;
if (!this._action) return this.endAction();
if (!this._action.item()) return this.endAction();
var targets = action.makeTargets();
this.setTargets(targets);
this._allTargets = targets.slice();
this._individualTargets = targets.slice();
this._phase = 'phaseChange';
this._phaseSteps = ['setup', 'whole', 'target', 'follow', 'finish'];
this._returnPhase = '';
this._actionList = [];
subject.useItem(this._action.item());
this._action.applyGlobal();
this._logWindow.startAction(this._subject, this._action, this._targets);
};
BattleManager.processActionSequenceCheck = function(actionName, actionArgs) {
// IF condition
if (actionName.match(/IF[ ](.*)/i)) {
return this.actionIfConditions(actionName, actionArgs);
}
return this.processActionSequence(actionName, actionArgs)
};
BattleManager.processActionSequence = function(actionName, actionArgs) {
// NO ACTION
if (actionName === '') {
return true;
}
// ACTION ANIMATION
if (actionName === 'ACTION ANIMATION') {
return this.actionActionAnimation(actionArgs);
}
// ACTION EFFECT
if (actionName === 'ACTION COMMON EVENT') {
return this.actionActionCommonEvent();
}
// ACTION EFFECT
if (actionName === 'ACTION EFFECT') {
return this.actionActionEffect(actionArgs);
}
// ANI WAIT: frames
if (['ANI WAIT', 'ANIWAIT', 'ANIMATION WAIT'].contains(actionName)) {
return this.actionAniWait(actionArgs[0]);
}
// CAST ANIMATION
if (actionName === 'CAST ANIMATION') {
return this.actionCastAnimation();
}
// CLEAR BATTLE LOG
if (actionName === 'CLEAR BATTLE LOG') {
return this.actionClearBattleLog();
}
// DEATH BREAK
if (actionName === 'DEATH BREAK') {
return this.actionDeathBreak();
}
// DISPLAY ACTION
if (actionName === 'DISPLAY ACTION') {
return this.actionDisplayAction();
}
// IMMORTAL: targets, true/false
if (actionName === 'IMMORTAL') {
return this.actionImmortal(actionArgs);
}
// MOTION WAIT
if (actionName === 'MOTION WAIT') {
return this.actionMotionWait(actionArgs);
}
// PERFORM ACTION
if (actionName === 'PERFORM ACTION') {
return this.actionPerformAction();
}
// PERFORM FINISH
if (actionName === 'PERFORM FINISH') {
return this.actionPerformFinish();
}
// PERFORM START
if (actionName === 'PERFORM START') {
return this.actionPerformStart();
}
// WAIT: frames
if (actionName === 'WAIT') {
return this.actionWait(actionArgs[0]);
}
// WAIT FOR ANIMATION
if (actionName === 'WAIT FOR ANIMATION') {
return this.actionWaitForAnimation();
}
// WAIT FOR EFFECT
if (actionName === 'WAIT FOR EFFECT') {
return this.actionWaitForEffect();
}
// WAIT FOR MOVEMENT
if (actionName === 'WAIT FOR MOVEMENT') {
return this.actionWaitForMovement();
}
// WAIT FOR NEW LINE
if (actionName === 'WAIT FOR NEW LINE') {
return this.actionWaitForNewLine();
}
// WAIT FOR POPUPS
if (actionName === 'WAIT FOR POPUPS') {
return this.actionWaitForPopups();
}
return false;
};
BattleManager.makeActionTargets = function(string) {
var targets = []
string = string.toUpperCase()
if (['SUBJECT', 'USER'].contains(string)) {
return [this._subject];
}
if (['TARGET', 'TARGETS'].contains(string)) {
var group = this._targets;
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target && target.isAppeared()) targets.push(target);
}
return targets;
}
if (['ACTORS', 'EXISTING ACTORS', 'ALIVE ACTORS'].contains(string)) {
var group = $gameParty.aliveMembers();
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target && target.isAppeared()) targets.push(target);
}
return targets;
}
if (['ACTORS ALL', 'ALL ACTORS', 'PARTY'].contains(string)) {
var group = $gameParty.battleMembers();
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target && target.isAppeared()) targets.push(target);
}
return targets;
}
if (['DEAD ACTORS', 'DEAD ACTOR'].contains(string)) {
var group = $gameParty.deadMembers();
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target) targets.push(target);
}
return targets;
}
if (['ACTORS NOT USER', 'ACTORS NOT SUBJECT'].contains(string)) {
var group = $gameParty.aliveMembers();
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target && target !== this._subject && target.isAppeared()) {
targets.push(target);
}
}
return targets;
}
if (['ENEMIES', 'EXISTING ENEMIES', 'ALIVE ENEMIES', 'TROOP',
'TROOPS'].contains(string)) {
var group = $gameTroop.aliveMembers();
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target && target.isAppeared()) targets.push(target);
}
return targets;
}
if (['ENEMIES ALL', 'ALL ENEMIES'].contains(string)) {
var group = $gameTroop.members();
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target && target.isAppeared()) targets.push(target);
}
return targets;
}
if (['DEAD ENEMIES', 'DEAD ENEMY'].contains(string)) {
var group = $gameTroop.deadMembers();
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target) targets.push(target);
}
return targets;
}
if (['ENEMIES NOT USER', 'ENEMIES NOT SUBJECT', 'TROOP NOT USER',
'TROOP NOT SUBJECT'].contains(string)) {
var group = $gameTroop.aliveMembers();
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target && target !== this._subject && target.isAppeared()) {
targets.push(target);
}
}
return targets;
}
if (string.match(/ACTOR[ ](\d+)/i)) {
var target = $gameParty.battleMembers()[parseInt(RegExp.$1)];
if (target && target.isAppeared()) return [target];
}
if (string.match(/ENEMY[ ](\d+)/i)) {
var target = $gameTroop.members()[parseInt(RegExp.$1)];
if (target && target.isAppeared()) return [target];
}
if (['FRIEND', 'FRIENDS', 'ALLIES'].contains(string)) {
var group = this._action.friendsUnit().aliveMembers();
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target && target.isAppeared()) targets.push(target);
}
return targets;
}
if (['ALL FRIENDS', 'ALL ALLIES'].contains(string)) {
var group = this._action.friendsUnit().members();
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target && target.isAppeared()) targets.push(target);
}
return targets;
}
if (['DEAD FRIEND', 'DEAD FRIENDS', 'DEAD ALLIES'].contains(string)) {
var group = this._action.friendsUnit().deadMembers();
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target && target.isAppeared()) targets.push(target);
}
return targets;
}
if (['OPPONENT', 'OPPONENTS', 'RIVALS', 'FOES'].contains(string)) {
var group = this._action.opponentsUnit().aliveMembers();
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target && target.isAppeared()) targets.push(target);
}
return targets;
}
if (['ALL OPPONENTS', 'ALL RIVALS', 'ALL FOES'].contains(string)) {
var group = this._action.opponentsUnit().members();
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target && target.isAppeared()) targets.push(target);
}
return targets;
}
if (['DEAD OPPONENT', 'DEAD OPPONENTS', 'DEAD RIVALS',
'DEAD FOES'].contains(string)) {
var group = this._action.opponentsUnit().deadMembers();
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target) targets.push(target);
}
return targets;
}
if (['FRIENDS NOT USER', 'ALLIES NOT USER'].contains(string)) {
var group = this._action.friendsUnit().aliveMembers();
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target && target !== this._subject && target.isAppeared()) {
targets.push(target);
}
}
return targets;
}
if (string.match(/(?:FRIEND|ALLY)[ ](\d+)/i)) {
var target = this._action.friendsUnit().members()[parseInt(RegExp.$1)];
if (target && target.isAppeared()) return [target];
}
if (string.match(/(?:OPPONENT|FOE|RIVAL)[ ](\d+)/i)) {
var target = this._action.opponentsUnit().members()[parseInt(RegExp.$1)]
if (target && target.isAppeared()) return [target];
}
if (['ALL ALIVE'].contains(string)) {
var group = this._action.friendsUnit().aliveMembers();
group = group.concat(this._action.opponentsUnit().aliveMembers());
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target && target.isAppeared()) targets.push(target);
}
return targets;
}
if (['ALL MEMBERS'].contains(string)) {
var group = this._action.friendsUnit().members();
group = group.concat(this._action.opponentsUnit().members());
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target && target.isAppeared()) targets.push(target);
}
return targets;
}
if (['ALL DEAD'].contains(string)) {
var group = this._action.friendsUnit().deadMembers();
group = group.concat(this._action.opponentsUnit().deadMembers());
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target) targets.push(target);
}
return targets;
}
if (['ALL NOT USER'].contains(string)) {
var group = this._action.friendsUnit().aliveMembers();
group = group.concat(this._action.opponentsUnit().aliveMembers());
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target && target !== this._subject && target.isAppeared()) {
targets.push(target);
}
}
return targets;
}
if (['FOCUS', 'PARTICIPANTS'].contains(string)) {
var group = this._targets;
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target && target.isAppeared()) targets.push(target);
}
if (!targets.contains(this._subject)) targets.push(this._subject);
return targets;
}
if (['NOT FOCUS', 'NONPARTICIPANTS'].contains(string)) {
var group = this._action.friendsUnit().members();
group = group.concat(this._action.opponentsUnit().members());
for (var i = 0; i < group.length; ++i) {
var target = group[i];
if (target) {
if (target === this._subject) continue;
if (target.isHidden()) continue;
if (this._targets.contains(target)) continue;
if (target.isDead()) {
if (Imported.YEP_X_AnimatedSVEnemies && target.isEnemy()) {
if (target.hasSVBattler() && !target.sideviewCollapse()) {
// Ignore
} else {
continue;
}
} else if (target.isActor()) {
// Ignore
} else {
continue;
}
}
targets.push(target);
}
}
return targets;
}
if (string.match(/(?:CHAR|CHARA|CHARACTER)[ ](\d+)/i)) {
var actorId = parseInt(RegExp.$1);
var actor = $gameActors.actor(actorId);
if (actor && $gameParty.battleMembers().contains(actor)) {
return [actor];
}
}
if ('FIRST' === string.toUpperCase()) {
return [this._targets[0]];
}
return targets;
};
BattleManager.actionConditionsMet = function(actSeq) {
var ci = this._conditionFlags.length - 1;
var actionName = actSeq[0];
var actionArgs = actSeq[1];
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 (actionName.match(/ELSE[ ]IF[ ](.*)/i)) {
if (this._conditionFlags.length <= 0) return false;
if (this._conditionFlags[ci]) {
this._conditionFlags[ci] = false;
this._trueFlags[ci] = true;
} else if (!this._conditionFlags[ci] && !this._trueFlags[ci]) {
var text = String(RegExp.$1);
try {
this._conditionFlags[ci] = eval(text);
this._trueFlags[ci] = eval(text);
} catch (e) {
Yanfly.Util.displayError(e, text, 'ACTION SEQUENCE IF CONDITION ERROR');
this._conditionFlags[ci] = false;
this._trueFlags[ci] = false;
}
}
return false;
} else if (actionName.match(/ELSE[ ]*(.*)/i)) {
if (this._conditionFlags.length <= 0) return false;
if (this._conditionFlags[ci]) {
this._conditionFlags[ci] = false;
this._trueFlags[ci] = true;
} else if (!this._conditionFlags[ci] && !this._trueFlags[ci]) {
this._conditionFlags[ci] = true;
this._trueFlags[ci] = true;
}
return false;
} else if (actionName.toUpperCase() === 'END') {
if (this._conditionFlags.length <= 0) return false;
this._conditionFlags.pop();
this._trueFlags.pop();
return false;
}
if (this._conditionFlags.length > 0) return this._conditionFlags[ci];
return true
};
BattleManager.actionActionAnimation = function(actionArgs) {
if (actionArgs && actionArgs[0]) {
var targets = this.makeActionTargets(actionArgs[0]);
} else {
var targets = this._targets;
}
var mirror = false;
if (actionArgs && actionArgs[1]) {
if (actionArgs[1].toUpperCase() === 'MIRROR') mirror = true;
}
var subject = this._subject;
var group = targets.filter(Yanfly.Util.onlyUnique);
var aniId = this._action.item().animationId;
if (aniId < 0) {
if (mirror) {
this._logWindow.showActorAtkAniMirror(subject, group);
} else {
this._logWindow.showAttackAnimation(subject, group);
}
} else {
this._logWindow.showNormalAnimation(group, aniId, mirror);
}
return true;
};
BattleManager.actionActionCommonEvent = function() {
this._action.item().effects.forEach(function(effect) {
if (effect.code === Game_Action.EFFECT_COMMON_EVENT) {
$gameTemp.reserveCommonEvent(effect.dataId);
}
}, this);
return false;
};
BattleManager.actionActionEffect = function(actionArgs) {
if (actionArgs && actionArgs[0]) {
var targets = this.makeActionTargets(actionArgs[0]);
} else {
var targets = this._targets;
}
targets.forEach(function(target) {
if (target !== undefined) {
var alreadyDead = target.isDead();
this.invokeAction(this._subject, target);
if (target.isDead() && !alreadyDead) {
target.performCollapse();
}
}
}, this);
return true;
};
BattleManager.actionAniWait = function(frames) {
frames *= Yanfly.Param.AnimationRate || 4;
this._logWindow._waitCount = parseInt(frames);
return false;
};
BattleManager.actionCastAnimation = function() {
if (!$gameSystem.isSideView() && this._subject.isActor()) return true;
if (!this._action.isAttack() && !this._action.isGuard() &&
this._action.isSkill()) {
if (this._action.item().castAnimation > 0) {
var ani = $dataAnimations[this._action.item().castAnimation]
this._logWindow.showAnimation(this._subject, [this._subject],
this._action.item().castAnimation);
}
}
return true;
};
BattleManager.actionClearBattleLog = function() {
this._logWindow.clear();
return false;
};
BattleManager.actionDeathBreak = function() {
if (this._subject.isDead()) {
this._targets = [];
this._actionList = [];
this._individualTargets = [];
this._phase = 'phaseChange';
return false;
}
return true;
};
BattleManager.actionDisplayAction = function() {
this._logWindow.displayAction(this._subject, this._action.item());
return false;
};
BattleManager.actionIfConditions = 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 actionName = this._actSeq[0];
if (actionName.match(/IF[ ](.*)/i)) {
var text = String(RegExp.$1);
try {
this._conditionFlags.push(eval(text));
} catch (e) {
this._conditionFlags.push(false);
Yanfly.Util.displayError(e, text, 'ACTION SEQUENCE IF CONDITION ERROR');
}
this._trueFlags.push(false);
var ci = this._conditionFlags.length;
}
return true;
};
BattleManager.actionImmortal = function(actionArgs) {
var targets =
this.makeActionTargets(actionArgs[0]).filter(Yanfly.Util.onlyUnique);
try {
var value = eval(String(actionArgs[1]).toLowerCase());
} catch (e) {
var value = false;
}
targets.forEach(function (target) {
if (value) {
target.addImmortal();
} else {
var alreadyDead = target.isDead();
target.removeImmortal();
}
}, this);
return true;
};
BattleManager.actionMotionWait = function(actionArgs) {
var targets = this.makeActionTargets(actionArgs[0]);
if (targets[0].isActor() && targets[0].isSpriteVisible()) {
this._logWindow._waitCount += 12;
return false;
}
return true;
};
BattleManager.actionPerformAction = function() {
this._logWindow.performAction(this._subject, this._action);
if (this._subject.isActor() && this._subject.isSpriteVisible) {
this._logWindow._waitCount += 20;
return false;
}
return true;
};
BattleManager.actionPerformFinish = function() {
this._logWindow.performActionEnd(this._subject);
$gameParty.aliveMembers().forEach(function(member) {
member.spriteReturnHome();
});
$gameTroop.aliveMembers().forEach(function(member) {
member.spriteReturnHome();
});
return true;
};
BattleManager.actionPerformStart = function() {
this._logWindow.performActionStart(this._subject, this._action);
return true;
};
BattleManager.actionWait = function(frames) {
this._logWindow._waitCount = parseInt(frames);
return false;
};
BattleManager.actionWaitForAnimation = function() {
this._logWindow.waitForAnimation();
return false;
};
BattleManager.actionWaitForEffect = function() {
this._logWindow.waitForEffect();
return false;
};
BattleManager.actionWaitForMovement = function() {
this._logWindow.waitForMovement();
return false;
};
BattleManager.actionWaitForNewLine = function() {
this._logWindow.waitForNewLine();
return false;
};
BattleManager.actionWaitForPopups = function() {
this._logWindow.waitForPopups();
return false;
};
//=============================================================================
// SceneManager
//=============================================================================
Yanfly.BEC.SceneManager_snapForBackground = SceneManager.snapForBackground;
SceneManager.snapForBackground = function() {
if ($gameParty.inBattle()) {
var spriteset = this._scene._spriteset;
if (spriteset.battleback1Name() === '' &&
spriteset.battleback2Name() === '') {
return;
}
}
Yanfly.BEC.SceneManager_snapForBackground.call(this);
};
//=============================================================================
// Sprite_Battler
//=============================================================================
Yanfly.BEC.Sprite_Battler_initialize = Sprite_Battler.prototype.initialize;
Sprite_Battler.prototype.initialize = function(battler) {
this.preSpriteInitialize(battler);
Yanfly.BEC.Sprite_Battler_initialize.call(this, battler);
};
Sprite_Battler.prototype.preSpriteInitialize = function(battler) {
};
Yanfly.BEC.Sprite_Battler_update = Sprite_Battler.prototype.update;
Sprite_Battler.prototype.update = function() {
Yanfly.BEC.Sprite_Battler_update.call(this);
if (this._postSpriteInitialized) return;
this.postSpriteInitialize();
};
Sprite_Battler.prototype.postSpriteInitialize = function() {
this._postSpriteInitialized = true;
};
Yanfly.BEC.Sprite_Battler_initMembers = Sprite_Battler.prototype.initMembers;
Sprite_Battler.prototype.initMembers = function() {
Yanfly.BEC.Sprite_Battler_initMembers.call(this);
this.adjustAnchor();
this.setZ();
};
Sprite_Battler.prototype.adjustAnchor = function() {
this.anchor.x = 0.5;
this.anchor.y = 1.0;
};
Sprite_Battler.prototype.setZ = function() {
this.z = 1;
};
Sprite_Battler.prototype.setupDamagePopup = function() {
if (this._battler.isDamagePopupRequested()) {
if (this._battler.isSpriteVisible()) {
var sprite = new Sprite_Damage();
sprite.x = this.x + this.damageOffsetX();
sprite.y = this.y + this.damageOffsetY();
sprite.setup(this._battler);
this.pushDamageSprite(sprite);
BattleManager._spriteset.addChild(sprite);
this._battler.clearResult();
}
} else {
this._battler.clearDamagePopup();
}
};
Sprite_Battler.prototype.pushDamageSprite = function(sprite) {
var heightBuffer = Yanfly.Param.BECPopupOverlap;
if (Yanfly.Param.BECNewPopBottom) {
this._damages.push(sprite);
this._damages.forEach(function(spr) {
for (var i = 0; i < spr.children.length; i++) {
childSprite = spr.children[i];
childSprite.anchor.y += heightBuffer;
}
}, this);
} else {
this._damages.push(sprite);
heightBuffer *= this._damages.length
for (var i = 0; i < sprite.children.length; i++) {
childSprite = sprite.children[i];
childSprite.anchor.y += heightBuffer;
}
}
};
Yanfly.BEC.Sprite_Battler_setBattler = Sprite_Battler.prototype.setBattler;
Sprite_Battler.prototype.setBattler = function(battler) {
Yanfly.BEC.Sprite_Battler_setBattler.call(this, battler);
if (battler) battler.setBattler(this);
};
Yanfly.BEC.Sprite_Battler_startMove = Sprite_Battler.prototype.startMove;
Sprite_Battler.prototype.startMove = function(x, y, duration) {
if (this._battler && !this._battler.spriteCanMove()) return;
Yanfly.BEC.Sprite_Battler_startMove.call(this, x, y, duration);
};
Sprite_Battler.prototype.stepForward = function() {
this.startMove(Yanfly.Param.BECStepDist, 0, 12);
};
Sprite_Battler.prototype.stepBack = function() {
this.startMove(0, 0, 12);
};
Sprite_Battler.prototype.stepFlinch = function() {
var flinchX = this.x - this._homeX - Yanfly.Param.BECFlinchDist;
var flinchY = this.y - this._homeY;
this.startMove(flinchX, flinchY, 6);
};
Sprite_Battler.prototype.stepSubBack = function() {
var backX = -1 * this.width / 2;
this.startMove(backX, 0, 6);
};
Sprite_Battler.prototype.stepToSubstitute = function(focus) {
var target = focus.battler();
var targetX = (this.x - this._homeX) + (target._homeX - this._homeX);
var targetY = (this.y - this._homeY) + (target._homeY - this._homeY);;
if (focus.isActor()) targetX -= this._mainSprite.width / 2;
if (focus.isEnemy()) targetX += this.width / 2;
this.startMove(targetX, targetY, 1);
};
Sprite_Battler.prototype.startMotion = function(motionType) {
};
Sprite_Battler.prototype.forceMotion = function(motionType) {
};
Sprite_Battler.prototype.refreshMotion = function() {
};
Sprite_Battler.prototype.startActionMotion = function() {
};
Sprite_Battler.prototype.moveForward = function(distance, frames) {
distance = parseInt(distance);
frames = parseInt(frames);
if (this._battler.isActor()) distance *= -1;
var moveX = this.x - this._homeX + distance;
var moveY = this.y - this._homeY;
this.startMove(moveX, moveY, frames);
};
Sprite_Battler.prototype.moveToPoint = function(pointX, pointY, frames) {
pointX = parseInt(pointX);
pointY = parseInt(pointY);
var targetX = pointX - this._homeX;
var targetY = pointY - this._homeY;
this.startMove(targetX, targetY, frames);
};
Sprite_Battler.prototype.setMirror = function(value) {
if (this.scale.x > 0 && value) this.scale.x *= -1;
if (this.scale.x < 0 && !value) this.scale.x *= -1;
};
Sprite_Battler.prototype.isPopupPlaying = function() {
if (this._damages.length > 0) {
for (var i = 0; i < this._damages.length; ++i) {
return this._damages[i].isPlaying();
}
}
return false;
};
//=============================================================================
// Sprite_Actor
//=============================================================================
Sprite_Actor.prototype.preSpriteInitialize = function(battler) {
Sprite_Battler.prototype.preSpriteInitialize.call(this, battler);
};
Sprite_Actor.prototype.postSpriteInitialize = function() {
Sprite_Battler.prototype.postSpriteInitialize.call(this);
};
Yanfly.BEC.Sprite_Actor_updateShadow = Sprite_Actor.prototype.updateShadow;
Sprite_Actor.prototype.updateShadow = function() {
if (this._hideShadows === undefined) {
this._hideShadows = Yanfly.Param.BECShowShadows;
}
if (!this._hideShadows) return this._shadowSprite.visible = false;
Yanfly.BEC.Sprite_Actor_updateShadow.call(this);
};
Sprite_Actor.prototype.setActorHome = function(index) {
var screenWidth = Graphics.boxWidth;
var screenHeight = Graphics.boxHeight;
var maxSize = $gameParty.maxBattleMembers();
var partySize = $gameParty.battleMembers().length;
var statusHeight = eval(Yanfly.Param.BECCommandRows);
statusHeight *= Window_Base.prototype.lineHeight.call(this);
statusHeight += Window_Base.prototype.standardPadding.call(this) * 2;
if ($gameSystem.isSideView()) {
var code = Yanfly.Param.BECHomePosX;
try {
var homeX = eval(code);
} catch (e) {
var homeX = 0;
Yanfly.Util.displayError(e, code, 'SIDE VIEW HOME X FORMULA ERROR');
}
var code = Yanfly.Param.BECHomePosY;
try {
var homeY = eval(code);
} catch (e) {
var homeY = 0;
Yanfly.Util.displayError(e, code, 'SIDE VIEW HOME Y FORMULA ERROR');
}
} else {
var code = Yanfly.Param.BECFrontPosX;
try {
var homeX = eval(code);
} catch (e) {
var homeX = 0;
Yanfly.Util.displayError(e, code, 'FRONT VIEW HOME X FORMULA ERROR');
}
var code = Yanfly.Param.BECFrontPosY;
try {
var homeY = eval(code);
} catch (e) {
var homeY = 0;
Yanfly.Util.displayError(e, code, 'FRONT VIEW HOME Y FORMULA ERROR');
}
}
this._checkAliveStatus = false;
if ($gameParty.battleMembers()[index]) {
var actor = $gameParty.battleMembers()[index];
if (actor.isAlive()) this._checkAliveStatus = true;
}
this.setHome(homeX, homeY);
this.moveToStartPosition();
};
Sprite_Actor.prototype.moveToStartPosition = function() {
if (BattleManager._bypassMoveToStartLocation) return;
if ($gameSystem.isSideView() && this._checkAliveStatus) {
this.startMove(300, 0, 0);
}
};
Sprite_Actor.prototype.setupMotion = function() {
};
Sprite_Actor.prototype.forceMotion = function(motionType) {
var newMotion = Sprite_Actor.MOTIONS[motionType];
this._motion = newMotion;
this._motionCount = 0;
this._pattern = 0;
};
Sprite_Actor.prototype.updateTargetPosition = function() {
};
Sprite_Actor.prototype.updateMotion = function() {
this.updateMotionCount();
};
Sprite_Actor.prototype.onMoveEnd = function() {
Sprite_Battler.prototype.onMoveEnd.call(this);
};
Sprite_Actor.prototype.stepForward = function() {
this.startMove(-Yanfly.Param.BECStepDist, 0, 12);
};
Sprite_Actor.prototype.stepFlinch = function() {
var flinchX = this.x - this._homeX + Yanfly.Param.BECFlinchDist;
var flinchY = this.y - this._homeY;
this.startMove(flinchX, flinchY, 6);
};
Sprite_Actor.prototype.stepSubBack = function() {
var backX = this._mainSprite.width / 2;
this.startMove(backX, 0, 6);
};
Yanfly.BEC.Sprite_Actor_updateBitmap = Sprite_Actor.prototype.updateBitmap;
Sprite_Actor.prototype.updateBitmap = function() {
var name = this._actor.battlerName();
var needUpdate = false;
if (this._battlerName !== name) needUpdate = true;
Yanfly.BEC.Sprite_Actor_updateBitmap.call(this);
if (needUpdate) this.adjustAnchor();
};
Sprite_Actor.prototype.adjustAnchor = function() {
if (!this._mainSprite) return;
this._mainSprite.anchor.x = this._actor.anchorX();
this._mainSprite.anchor.y = this._actor.anchorY();
};
Yanfly.BEC.Sprite_Actor_updateFrame = Sprite_Actor.prototype.updateFrame;
Sprite_Actor.prototype.updateFrame = function() {
Yanfly.BEC.Sprite_Actor_updateFrame.call(this);
if (!this._mainSprite) return;
if (!this._mainSprite.bitmap) return;
if (this._mainSprite.bitmap.width > 0 && !this.bitmap) {
var sw = this._mainSprite.bitmap.width / 9;
var sh = this._mainSprite.bitmap.height / 6;
this.bitmap = new Bitmap(sw, sh);
}
};
Yanfly.BEC.Sprite_Actor_refreshMotion = Sprite_Actor.prototype.refreshMotion;
Sprite_Actor.prototype.refreshMotion = function() {
var actor = this._actor;
if (!actor) return;
var motionGuard = Sprite_Actor.MOTIONS['guard'];
if (this._motion === motionGuard && !BattleManager.isInputting()) return;
var stateMotion = actor.stateMotionIndex();
if (actor.isInputting() || actor.isActing()) {
this.startMotion(actor.idleMotion());
} else if (stateMotion === 3) {
this.startMotion(actor.deadMotion());
} else if (stateMotion === 2) {
this.startMotion(actor.sleepMotion());
} else if (actor.isChanting()) {
this.startMotion(actor.chantMotion());
} else if (actor.isGuard() || actor.isGuardWaiting()) {
this.startMotion(actor.guardMotion());
} else if (stateMotion === 1) {
this.startMotion(actor.abnormalMotion());
} else if (actor.isDying()) {
this.startMotion(actor.dyingMotion());
} else if (actor.isUndecided()) {
this.startMotion(actor.idleMotion());
} else {
this.startMotion(actor.waitMotion());
}
};
//=============================================================================
// Sprite_Enemy
//=============================================================================
Sprite_Enemy.prototype.preSpriteInitialize = function(battler) {
Sprite_Battler.prototype.preSpriteInitialize.call(this, battler);
this._visualSelect = Yanfly.Param.BECEnemySelect;
if (this._visualSelect) this.createVisualSelectWindow();
};
Yanfly.BEC.Sprite_Enemy_update = Sprite_Enemy.prototype.update;
Sprite_Enemy.prototype.update = function() {
Yanfly.BEC.Sprite_Enemy_update.call(this);
this.addVisualSelectWindow();
};
Sprite_Enemy.prototype.addVisualSelectWindow = function() {
if (!this._visualSelect) return;
if (this._addedVisualSelect) return;
if (!SceneManager._scene) return;
var scene = SceneManager._scene;
if (!scene._windowLayer) return;
this._addedVisualSelect = true;
scene.addChild(this._visualSelectWindow);
};
Sprite_Enemy.prototype.createVisualSelectWindow = function() {
this._visualSelectWindow = new Window_EnemyVisualSelect();
};
Yanfly.BEC.Sprite_Enemy_setBattler = Sprite_Enemy.prototype.setBattler;
Sprite_Enemy.prototype.setBattler = function(battler) {
Yanfly.BEC.Sprite_Enemy_setBattler.call(this, battler);
if (this._visualSelectWindow) this._visualSelectWindow.setBattler(battler);
};
//=============================================================================
// Sprite_Weapon
//=============================================================================
Yanfly.BEC.Sprite_Weapon_setup = Sprite_Weapon.prototype.setup;
Sprite_Weapon.prototype.setup = function(weaponImageId) {
Yanfly.BEC.Sprite_Weapon_setup.call(this, weaponImageId);
this._animationCount -= 1; // Synch with sprite
};
//=============================================================================
// Sprite_Damage
//=============================================================================
Yanfly.BEC.Sprite_Damage_initialize = Sprite_Damage.prototype.initialize;
Sprite_Damage.prototype.initialize = function() {
Yanfly.BEC.Sprite_Damage_initialize.call(this);
this._duration = Yanfly.Param.BECPopupDur;
};
Sprite_Damage.prototype.setup = function(target) {
this._result = target.shiftDamagePopup();
var result = this._result;
if (result.missed || result.evaded) {
this.createMiss();
} else if (result.hpAffected) {
this.createDigits(0, result.hpDamage);
} else if (target.isAlive() && result.mpDamage !== 0) {
this.createDigits(2, result.mpDamage);
}
if (result.critical) {
this.setupCriticalEffect();
}
};
Sprite_Damage.prototype.setupCriticalEffect = function() {
this._flashColor = eval('[' + Yanfly.Param.BECCritPopup + ']');
this._flashDuration = Yanfly.Param.BECCritDur;
};
//=============================================================================
// Sprite_StateIcon
//=============================================================================
Yanfly.BEC.Sprite_StateIcon_update = Sprite_StateIcon.prototype.update;
Sprite_StateIcon.prototype.update = function() {
Yanfly.BEC.Sprite_StateIcon_update.call(this);
this.updateMirror();
};
Sprite_StateIcon.prototype.updateMirror = function() {
if (this.parent.scale.x < 0) this.scale.x = -1 * Math.abs(this.scale.x);
if (this.parent.scale.x > 0) this.scale.x = Math.abs(this.scale.x);
};
//=============================================================================
// Sprite_StateOverlay
//=============================================================================
Yanfly.BEC.Sprite_StateOverlay_update = Sprite_StateOverlay.prototype.update;
Sprite_StateOverlay.prototype.update = function() {
Yanfly.BEC.Sprite_StateOverlay_update.call(this);
this.updateMirror();
};
Sprite_StateOverlay.prototype.updateMirror = function() {
if (this.parent.scale.x < 0) this.scale.x = -1 * Math.abs(this.scale.x);
if (this.parent.scale.x > 0) this.scale.x = Math.abs(this.scale.x);
};
//=============================================================================
// Spriteset_Battle
//=============================================================================
Spriteset_Battle.prototype.isBusy = function() {
return false;
};
Yanfly.BEC.Spriteset_Battle_update = Spriteset_Battle.prototype.update;
Spriteset_Battle.prototype.update = function() {
Yanfly.BEC.Spriteset_Battle_update.call(this);
this.updateZCoordinates();
};
Spriteset_Battle.prototype.updateZCoordinates = function() {
if (Imported.YEP_ImprovedBattlebacks) {
this.updateBattlebackGroupRemove();
} else {
this._battleField.removeChild(this._back1Sprite);
this._battleField.removeChild(this._back2Sprite);
}
this._battleField.children.sort(this.battleFieldDepthCompare);
if (Imported.YEP_ImprovedBattlebacks) {
this.updateBattlebackGroupAdd();
} else {
this._battleField.addChildAt(this._back2Sprite, 0);
this._battleField.addChildAt(this._back1Sprite, 0);
}
};
Spriteset_Battle.prototype.battleFieldDepthCompare = function(a, b) {
var priority = BattleManager.getSpritePriority();
if (a._battler && b._battler && priority !== 0) {
if (priority === 1) {
if (a._battler.isActor() && b._battler.isEnemy()) return 1;
if (a._battler.isEnemy() && b._battler.isActor()) return -1;
} else if (priority === 2) {
if (a._battler.isActor() && b._battler.isEnemy()) return -1;
if (a._battler.isEnemy() && b._battler.isActor()) return 1;
}
}
if (a.z < b.z) return -1;
if (a.z > b.z) return 1;
if (a.y < b.y) return -1;
if (a.y > b.y) return 1;
return 0;
};
Spriteset_Battle.prototype.isPopupPlaying = function() {
return this.battlerSprites().some(function(sprite) {
return sprite.isPopupPlaying();
});
};
Yanfly.BEC.Spriteset_Battle_battlerSprites =
Spriteset_Battle.prototype.battlerSprites;
Spriteset_Battle.prototype.battlerSprites = function() {
var sprites = Yanfly.BEC.Spriteset_Battle_battlerSprites.call(this);
var length = sprites.length;
var result = [];
for (var i = 0; i < length; ++i) {
var sprite = sprites[i];
if (!sprite) continue;
if (!sprite._battler) continue;
result.push(sprite);
}
return result;
};
//=============================================================================
// Game_Temp
//=============================================================================
Game_Temp.prototype.clearActionSequenceSettings = function() {
};
Game_Temp.prototype.forceActionQueue = function(command) {
if (!this._forceActionQueue) {
this._forceActionQueue = JsonEx.makeDeepCopy($dataCommonEvents[1]);
this._forceActionQueue.list = [];
}
this._forceActionQueue.list.push(command);
};
Yanfly.BEC.Game_Temp_clearCommonEvent = Game_Temp.prototype.clearCommonEvent;
Game_Temp.prototype.clearCommonEvent = function() {
this._forceActionQueue = undefined;
Yanfly.BEC.Game_Temp_clearCommonEvent.call(this);
};
Yanfly.BEC.Game_Temp_isCommonEventReserved =
Game_Temp.prototype.isCommonEventReserved;
Game_Temp.prototype.isCommonEventReserved = function() {
if (this._forceActionQueue) return true;
return Yanfly.BEC.Game_Temp_isCommonEventReserved.call(this);
};
Yanfly.BEC.Game_Temp_reservedCommonEvent =
Game_Temp.prototype.reservedCommonEvent;
Game_Temp.prototype.reservedCommonEvent = function() {
if (this._forceActionQueue) {
return this._forceActionQueue;
}
return Yanfly.BEC.Game_Temp_reservedCommonEvent.call(this);
};
//=============================================================================
// Game_System
//=============================================================================
Yanfly.BEC.Game_System_initialize = Game_System.prototype.initialize;
Game_System.prototype.initialize = function() {
Yanfly.BEC.Game_System_initialize.call(this);
this.initBattleSystem();
};
Game_System.prototype.initBattleSystem = function() {
this._battleSystem = Yanfly.Param.BECSystem.toLowerCase();
};
Game_System.prototype.getBattleSystem = function() {
if (this._battleSystem === undefined) this.initBattleSystem();
return this._battleSystem;
};
Game_System.prototype.setBattleSystem = function(type) {
this._battleSystem = type.toLowerCase();
};
//=============================================================================
// Game_Interpreter
//=============================================================================
Yanfly.BEC.Game_Interpreter_pluginCommand =
Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
Yanfly.BEC.Game_Interpreter_pluginCommand.call(this, command, args);
if (command === 'setBattleSys' && !$gameParty.inBattle()) {
this.setBattleSystem(args[0]);
}
};
Game_Interpreter.prototype.setBattleSystem = function(value) {
$gameSystem.setBattleSystem(value);
};
//=============================================================================
// Game_Action
//=============================================================================
Game_Action.prototype.speed = function() {
var user = this.subject(); var a = user;
var maxhp = user.mhp; var mhp = user.mhp; var hp = user.hp;
var maxmp = user.mmp; var mmp = user.mmp; var mp = user.mp;
var maxtp = user.maxTp(); var mtp = user.maxTp(); var tp = user.tp;
var atk = user.atk; var def = user.def; var mat = user.mat;
var int = user.mat; var mdf = user.mdf; var res = user.res;
var agi = user.agi; var luk = user.luk;
var code = Yanfly.Param.BECActionSpeed;
try {
var speed = eval(code);
} catch (e) {
var speed = 0;
Yanfly.Util.displayError(e, code, 'ACTION SPEED FORMULA ERROR');
}
if (this.item()) speed += this.item().speed;
if (this.isAttack()) speed += this.subject().attackSpeed();
return speed;
};
Yanfly.BEC.Game_Action_apply = Game_Action.prototype.apply;
Game_Action.prototype.apply = function(target) {
target._result = null;
target._result = new Game_ActionResult();
this.subject()._result = null;
this.subject()._result = new Game_ActionResult();
Yanfly.BEC.Game_Action_apply.call(this, target);
if ($gameParty.inBattle()) {
target.startDamagePopup();
target.performResultEffects();
if (target !== this.subject()) this.subject().startDamagePopup();
}
};
Game_Action.prototype.itemEffectAddAttackState = function(target, effect) {
this.subject().attackStates().forEach(function(stateId) {
var chance = effect.value1;
chance *= target.stateRate(stateId);
chance *= this.subject().attackStatesRate(stateId);
chance *= this.lukEffectRate(target);
if (Math.random() < chance) {
if (stateId === target.deathStateId()) {
if (target.isImmortal()) target.removeImmortal();
}
target.addState(stateId);
this.makeSuccess(target);
}
}.bind(this), target);
};
Game_Action.prototype.itemEffectAddNormalState = function(target, effect) {
var stateId = effect.dataId;
var chance = effect.value1;
if (!this.isCertainHit()) {
chance *= target.stateRate(stateId);
chance *= this.lukEffectRate(target);
}
if (Math.random() < chance) {
if (stateId === target.deathStateId()) {
if (target.isImmortal()) target.removeImmortal();
}
target.addState(stateId);
this.makeSuccess(target);
}
};
Yanfly.BEC.Game_Action_applyGlobal = Game_Action.prototype.applyGlobal;
Game_Action.prototype.applyGlobal = function() {
if ($gameParty.inBattle()) return;
Yanfly.BEC.Game_Action_applyGlobal.call(this);
};
Yanfly.BEC.Game_Action_needsSelection = Game_Action.prototype.needsSelection;
Game_Action.prototype.needsSelection = function() {
if ($gameParty.inBattle() && this.item().scope === 0) return false;
if ($gameParty.inBattle() && BattleManager.isForceSelection()) return true;
return Yanfly.BEC.Game_Action_needsSelection.call(this);
};
//=============================================================================
// Game_BattlerBase
//=============================================================================
Yanfly.BEC.Game_BattlerBase_recoverAll = Game_BattlerBase.prototype.recoverAll;
Game_BattlerBase.prototype.recoverAll = function() {
Yanfly.BEC.Game_BattlerBase_recoverAll.call(this);
this.refresh();
if ($gameParty.inBattle()) this.forceMotionRefresh();
};
Game_BattlerBase.prototype.requestStatusRefresh = function() {
this._statusRefreshRequested = true;
};
Game_BattlerBase.prototype.isStatusRefreshRequested = function() {
return this._statusRefreshRequested;
};
Game_BattlerBase.prototype.completetStatusRefreshRequest = function() {
this._statusRefreshRequested = false;
};
Game_BattlerBase.prototype.updateStateTicks = function() {
var needRefresh = false;
for (var i = 0; i < this._states.length; ++i) {
var stateId = this._states[i];
var state = $dataStates[stateId];
if (!state) continue;
if (state.autoRemovalTiming !== 2) continue;
if (!this._stateTurns[stateId]) continue;
var value = BattleManager.tickRate() / Yanfly.Param.BECTurnTime;
var shown1 = Math.ceil(this._stateTurns[stateId]);
this._stateTurns[stateId] -= value;
var shown2 = Math.ceil(this._stateTurns[stateId]);
if (shown1 !== shown2) needRefresh = true;
if (this._stateTurns[stateId] <= 0) this.removeState(stateId);
}
if (needRefresh) this.refresh();
};
Game_BattlerBase.prototype.isBypassUpdateTurns = function() {
if ($gameTroop.isEventRunning()) return true;
return false;
};
Game_BattlerBase.prototype.updateStateTurns = function() {
this.updateStateTurnEnd();
};
Game_BattlerBase.prototype.updateStateTurnTiming = function(timing) {
if (this.isBypassUpdateTurns()) return;
var statesRemoved = [];
this._freeStateTurn = this._freeStateTurn || [];
for (var i = 0; i < this._states.length; ++i) {
var stateId = this._states[i];
var state = $dataStates[stateId];
if (!state) continue;
if (state.autoRemovalTiming !== timing) continue;
if (!this._stateTurns[stateId]) continue;
if (this._freeStateTurn.contains(stateId)) {
var index = this._freeStateTurn.indexOf(stateId);
this._freeStateTurn.splice(index, 1);
} else {
this._stateTurns[stateId] -= 1;
}
if (this._stateTurns[stateId] <= 0) statesRemoved.push(stateId);
}
for (var i = 0; i < statesRemoved.length; ++i) {
var stateId = statesRemoved[i];
this.removeState(stateId);
}
};
Game_BattlerBase.prototype.updateStateActionStart = function() {
this.updateStateTurnTiming(3);
};
Game_BattlerBase.prototype.updateStateActionEnd = function() {
this.updateStateTurnTiming(1);
};
Game_BattlerBase.prototype.updateStateTurnStart = function() {
this.updateStateTurnTiming(4);
};
Game_BattlerBase.prototype.updateStateTurnEnd = function() {
this.updateStateTurnTiming(2);
};
Game_BattlerBase.prototype.updateBuffTicks = function() {
var needRefresh = false;
for (var i = 0; i < this._buffTurns.length; i++) {
if (this._buffTurns[i] <= 0) continue;
var value = BattleManager.tickRate() / Yanfly.Param.BECTurnTime;
var shown1 = Math.ceil(this._buffTurns[i]);
this._buffTurns[i] -= value;
var shown2 = Math.ceil(this._buffTurns[i]);
if (shown1 !== shown2) needRefresh = true;
if (this._buffTurns[i] <= 0) this.removeBuff(i);
}
if (needRefresh) this.refresh();
};
Game_BattlerBase.prototype.timedTick = function() {
return 1 * BattleManager.tickRate();
};
Yanfly.BEC.Game_BattlerBase_isStateResist =
Game_BattlerBase.prototype.isStateResist;
Game_BattlerBase.prototype.isStateResist = function(stateId) {
if (stateId === this.deathStateId() && this.isImmortal()) return true;
return Yanfly.BEC.Game_BattlerBase_isStateResist.call(this, stateId);
};
Game_BattlerBase.prototype.isImmortal = function() {
return this._immortalState;
};
Yanfly.BEC.Game_BattlerBase_paySkillCost =
Game_BattlerBase.prototype.paySkillCost;
Game_BattlerBase.prototype.paySkillCost = function(skill) {
this.requestStatusRefresh();
Yanfly.BEC.Game_BattlerBase_paySkillCost.call(this, skill);
};
//=============================================================================
// Game_Battler
//=============================================================================
Yanfly.BEC.Game_Battler_useItem = Game_Battler.prototype.useItem;
Game_Battler.prototype.useItem = function(item) {
Yanfly.BEC.Game_Battler_useItem.call(this, item);
this.refresh();
if (!$gameParty.inBattle()) return;
this.increaseSelfTurnCount();
this.updateStateActionStart();
};
Yanfly.BEC.Game_Battler_onBattleStart = Game_Battler.prototype.onBattleStart;
Game_Battler.prototype.onBattleStart = function() {
Yanfly.BEC.Game_Battler_onBattleStart.call(this);
this._freeStateTurn = [];
this._immortalState = false;
this._selfTurnCount = 0;
};
Yanfly.BEC.Game_Battler_onBattleEnd = Game_Battler.prototype.onBattleEnd;
Game_Battler.prototype.onBattleEnd = function() {
Yanfly.BEC.Game_Battler_onBattleEnd.call(this);
this._freeStateTurn = [];
this._immortalState = false;
};
Yanfly.BEC.Game_Battler_isSelected = Game_Battler.prototype.isSelected;
Game_Battler.prototype.isSelected = function() {
if ($gameParty.inBattle() && BattleManager.isAllSelection()) {
if (!this.isAppeared()) return false;
var action = BattleManager.inputtingAction();
if (action && action.item()) {
if (this.isDead() && this.isEnemy()) return false;
if (this.isDead() && this.isActor()) return action.isForDeadFriend();
if (action.isForFriend() && this.isActor()) return true;
if (action.isForOpponent() && this.isEnemy()) return true;
}
}
return Yanfly.BEC.Game_Battler_isSelected.call(this);
};
Yanfly.BEC.Game_Battler_regenerateAll = Game_Battler.prototype.regenerateAll;
Game_Battler.prototype.regenerateAll = function() {
this.clearResult();
var lifeState = this.isAlive();
Yanfly.BEC.Game_Battler_regenerateAll.call(this);
if (!BattleManager.timeBasedStates()) this.updateStateTurns();
if (!BattleManager.timeBasedBuffs()) {
this.updateBuffTurns();
this.removeBuffsAuto();
}
if (this.isDead() && lifeState === true) {
this.performCollapse();
}
if ($gameParty.inBattle()) this.startDamagePopup();
};
Game_Battler.prototype.addImmortal = function() {
this._immortalState = true;
};
Game_Battler.prototype.removeImmortal = function() {
var alreadyDead = this.isDead();
this._immortalState = false;
this.refresh();
if (this.isDead() && !alreadyDead) this.performCollapse();
};
Yanfly.BEC.Game_Battler_removeState = Game_Battler.prototype.removeState;
Game_Battler.prototype.removeState = function(stateId) {
Yanfly.BEC.Game_Battler_removeState.call(this, stateId);
};
Game_Battler.prototype.clearDamagePopup = function() {
this._damagePopup = [];
};
Game_Battler.prototype.isDamagePopupRequested = function() {
if (!this._damagePopup) this.clearDamagePopup();
return this._damagePopup.length > 0;
};
Game_Battler.prototype.startDamagePopup = function() {
var result = this.result();
if (result.missed || result.evaded) {
var copyResult = JsonEx.makeDeepCopy(result);
copyResult.hpAffected = false;
copyResult.mpDamage = 0;
this._damagePopup.push(copyResult);
}
if (result.hpAffected) {
var copyResult = JsonEx.makeDeepCopy(result);
copyResult.mpDamage = 0;
this._damagePopup.push(copyResult);
}
if (result.mpDamage !== 0) {
var copyResult = JsonEx.makeDeepCopy(result);
copyResult.hpAffected = false;
this._damagePopup.push(copyResult);
}
};
Game_Battler.prototype.shiftDamagePopup = function() {
if (!this._damagePopup) this.clearDamagePopup();
return this._damagePopup.shift();
};
Yanfly.BEC.Game_Battler_performCollapse =
Game_Battler.prototype.performCollapse;
Game_Battler.prototype.performCollapse = function() {
Yanfly.BEC.Game_Battler_performCollapse.call(this);
if ($gameParty.inBattle()) this.forceMotion(this.deadMotion());
};
Game_Battler.prototype.performResultEffects = function() {
var result = this.result();
if (result.missed && result.physical) this.performMiss();
if (result.evaded) {
if (result.physical) {
this.performEvasion();
} else {
this.performMagicEvasion();
}
}
if (result.hpAffected) {
if (result.hpDamage > 0 && !result.drain) {
this.performDamage();
}
if (result.hpDamage < 0) {
this.performRecovery();
}
}
if (this.isAlive() && result.mpDamage !== 0 && result.mpDamage < 0) {
this.performRecovery();
}
if (this.isAlive() && result.tpDamage !== 0 && result.tpDamage < 0) {
this.performRecovery();
}
};
Yanfly.BEC.Game_Battler_performDamage =
Game_Battler.prototype.performDamage;
Game_Battler.prototype.performDamage = function() {
Yanfly.BEC.Game_Battler_performDamage.call(this);
this.performFlinch();
};
Yanfly.BEC.Game_Battler_performMiss = Game_Battler.prototype.performMiss;
Game_Battler.prototype.performMiss = function() {
Yanfly.BEC.Game_Battler_performMiss.call(this);
this.performFlinch();
};
Yanfly.BEC.Game_Battler_performEvasion =
Game_Battler.prototype.performEvasion;
Game_Battler.prototype.performEvasion = function() {
Yanfly.BEC.Game_Battler_performEvasion.call(this);
this.performFlinch();
};
Yanfly.BEC.Game_Battler_performMagicEvasion =
Game_Battler.prototype.performMagicEvasion;
Game_Battler.prototype.performMagicEvasion = function() {
Yanfly.BEC.Game_Battler_performMagicEvasion.call(this);
this.performFlinch();
};
Game_Battler.prototype.performFlinch = function() {
if (this._flinched || !$gameSystem.isSideView()) return;
this._flinched = true;
this.spriteStepFlinch();
};
Yanfly.BEC.Game_Battler_performReflection =
Game_Battler.prototype.performReflection;
Game_Battler.prototype.performReflection = function() {
Yanfly.BEC.Game_Battler_performReflection.call(this);
if (!$gameSystem.isSideView() && this.isActor()) return;
var animationId = this.reflectAnimationId();
var mirror = this.isActor();
this.startAnimation(animationId, mirror, 0);
};
Yanfly.BEC.Game_Battler_performSubstitute =
Game_Battler.prototype.performSubstitute;
Game_Battler.prototype.performSubstitute = function(target) {
Yanfly.BEC.Game_Battler_performSubstitute.call(this, target);
if (!$gameSystem.isSideView()) return;
this._flinched = true;
if (BattleManager._action.isForAll()) {
this.spriteStepForward();
target.spriteStepSubBack();
} else {
this.spriteStepToSubstitute(target);
target.spriteStepSubBack();
}
};
Game_Battler.prototype.setBattler = function(sprite) {
BattleManager.registerSprite(this, sprite);
};
Game_Battler.prototype.battler = function() {
return BattleManager.getSprite(this);
};
Game_Battler.prototype.requestMotion = function(motionType) {
this._motionType = motionType;
if (this.battler()) {
this.battler().startMotion(motionType);
}
};
Game_Battler.prototype.forceMotion = function(motionType) {
this._motionType = motionType;
if (this.battler()) {
this.battler().forceMotion(motionType);
}
};
Game_Battler.prototype.startWeaponAnimation = function(weaponImageId) {
this._weaponImageId = weaponImageId;
if (this.battler()) {
this.battler().setupWeaponAnimation();
}
};
Game_Battler.prototype.performActionStart = function(action) {
if (!action.isGuard()) {
this.setActionState('acting');
this.spriteStepForward();
}
};
Yanfly.BEC.Game_Battler_performActionEnd =
Game_Battler.prototype.performActionEnd;
Game_Battler.prototype.performActionEnd = function() {
Yanfly.BEC.Game_Battler_performActionEnd.call(this);
this.spriteReturnHome();
};
Game_Battler.prototype.spriteStepForward = function() {
if ($gameSystem.isSideView() && this.battler()) {
this.battler().stepForward();
}
};
Game_Battler.prototype.spriteStepBack = function() {
if ($gameSystem.isSideView() && this.battler()) {
this.battler().stepBack();
}
};
Game_Battler.prototype.spriteStepSubBack = function() {
if ($gameSystem.isSideView() && this.battler()) {
this.battler().stepSubBack();
}
};
Game_Battler.prototype.spriteStepToSubstitute = function(target) {
if ($gameSystem.isSideView() && this.battler()) {
this.battler().stepToSubstitute(target);
}
};
Game_Battler.prototype.spriteStepFlinch = function() {
if ($gameSystem.isSideView() && this.battler()) {
this.battler().stepFlinch();
}
};
Game_Battler.prototype.spriteReturnHome = function() {
if ($gameSystem.isSideView() && this.battler()) {
this._flinched = false;
this.spriteFaceForward();
this.battler().stepBack();
if (this.numActions() <= 0) {
this.setActionState('undecided');
}
this.battler().refreshMotion();
}
};
Game_Battler.prototype.reflectAnimationId = function() {
for (var i = 0; i < this.states().length; ++i) {
var state = this.states()[i];
if (state.reflectAnimationId > 0) return state.reflectAnimationId;
}
return Yanfly.Param.BECReflectAni;
};
Game_Battler.prototype.spriteCanMove = function() {
if (!$gameSystem.isSideView()) return false;
for (var i = 0; i < this.states().length; ++i) {
var state = this.states()[i];
if (state.spriteCannotMove) return false;
}
return this.canMove();
};
Game_Battler.prototype.spritePosX = function() {
if ($gameSystem.isSideView() && this.battler()) {
return this.battler().x;
} else if (this.battler()) {
return this.battler().x;
} else {
return 0;
}
};
Game_Battler.prototype.spritePosY = function() {
if ($gameSystem.isSideView() && this.battler()) {
return this.battler().y;
} else if (this.battler()) {
return this.battler().y;
} else {
return 0;
}
};
Game_Battler.prototype.spriteWidth = function() {
if ($gameSystem.isSideView() && this.battler() && this.battler().bitmap) {
return this.battler().bitmap.width;
} else if (this.battler() && this.battler().bitmap) {
return this.battler().bitmap.width;
} else {
return 1;
}
};
Game_Battler.prototype.spriteHeight = function() {
if ($gameSystem.isSideView() && this.battler() && this.battler().bitmap) {
return this.battler().bitmap.height;
} else if (this.battler() && this.battler().bitmap) {
return this.battler().bitmap.height;
} else {
return 1;
}
};
Game_Battler.prototype.anchorX = function() {
return Yanfly.Param.BECAnchorX;
};
Game_Battler.prototype.anchorY = function() {
return Yanfly.Param.BECAnchorY;
};
Game_Battler.prototype.spriteHomeX = function() {
if ($gameSystem.isSideView() && this.battler()) {
return this.battler()._homeX;
} else {
return 0;
}
};
Game_Battler.prototype.spriteHomeY = function() {
if ($gameSystem.isSideView() && this.battler()) {
return this.battler()._homeY;
} else {
return 0;
}
};
Game_Battler.prototype.setMirror = function(value) {
if ($gameSystem.isSideView() && this.battler() && this.spriteCanMove()) {
this.battler().setMirror(value);
}
};
Game_Battler.prototype.spriteFaceForward = function() {
this.setMirror(false);
};
Game_Battler.prototype.spriteFaceBackward = function() {
this.setMirror(true);
};
Game_Battler.prototype.spriteFacePoint = function(pointX, pointY) {
if (this.spritePosX() > pointX) {
this.spriteFaceBackward();
} else {
this.spriteFaceForward();
}
};
Game_Battler.prototype.spriteFaceAwayPoint = function(pointX, pointY) {
if (this.spritePosX() > pointX) {
this.spriteFaceForward();
} else {
this.spriteFaceBackward();
}
};
Game_Battler.prototype.spriteFaceTarget = function(target) {
if (!target) return;
var pointX = target.spritePosX();
var pointY = target.spritePosY();
this.spriteFacePoint(pointX, pointY);
};
Game_Battler.prototype.spriteFaceAwayTarget = function(target) {
if (!target) return;
var pointX = target.spritePosX();
var pointY = target.spritePosY();
this.spriteFaceAwayPoint(pointX, pointY);
};
Game_Battler.prototype.spriteFaceHome = function() {
var pointX = this.spriteHomeX();
var pointY = this.spriteHomeY();
this.spriteFacePoint(pointX, pointY);
};
Game_Battler.prototype.spriteFaceAwayHome = function() {
var pointX = target.spriteHomeX();
var pointY = target.spriteHomeY();
this.spriteFaceAwayPoint(pointX, pointY);
};
Game_Battler.prototype.attackMotion = function() {
return 'thrust';
};
Game_Battler.prototype.performAttack = function() {
};
Game_Battler.prototype.forceMotionRefresh = function() {
if (!$gameParty.inBattle()) return;
if (this.battler()) this.battler().refreshMotion();
};
Game_Battler.prototype.requestMotionRefresh = function() {
var deadMotion = this.deadMotion();
if (this.isDead() && this._motionType !== deadMotion) {
this.requestMotion(deadMotion);
}
if (this.isDead() && this._motionType === deadMotion) return;
if (this._motionType === 'victory') return;
if (this._motionType === 'escape' && !BattleManager.isInputting()) return;
if (this._motionType === 'guard' && !BattleManager.isInputting()) return;
this.clearMotion();
if (this.battler() && BattleManager.isInputting()) {
this.battler().refreshMotion();
}
};
Game_Battler.prototype.onTurnStart = function() {
this.updateStateTurnStart();
};
Game_Battler.prototype.onTurnEnd = function() {
this.clearResult();
if (BattleManager.isTurnBased()) {
this.regenerateAll();
} else if (BattleManager.isTickBased() && !BattleManager.isTurnEnd()) {
this.regenerateAll();
}
this.removeStatesAuto(2);
};
Yanfly.BEC.Game_Battler_onAllActionsEnd =
Game_Battler.prototype.onAllActionsEnd;
Game_Battler.prototype.onAllActionsEnd = function() {
Yanfly.BEC.Game_Battler_onAllActionsEnd.call(this);
if (!BattleManager._processTurn) this.updateStateActionEnd();
};
Game_Battler.prototype.updateTick = function() {
if (BattleManager.timeBasedStates()) this.updateStateTicks();
if (BattleManager.timeBasedBuffs()) this.updateBuffTicks();
};
Game_Battler.prototype.increaseSelfTurnCount = function() {
if (this._selfTurnCount === undefined) this._selfTurnCount = 0;
this._selfTurnCount += 1;
};
Game_Battler.prototype.turnCount = function() {
if (BattleManager.isTurnBased()) return $gameTroop.turnCount();
if (BattleManager.isTickBased() && Yanfly.Param.BECAISelfTurn) {
return this._selfTurnCount;
}
return $gameTroop.turnCount();
};
Game_Battler.prototype.createActions = function() {
if (this.currentAction()) return;
this.makeActions();
};
Yanfly.BEC.Game_Battler_addState = Game_Battler.prototype.addState;
Game_Battler.prototype.addState = function(stateId) {
Yanfly.BEC.Game_Battler_addState.call(this, stateId);
if (this.canAddStateFreeTurn(stateId)) this.setStateFreeTurn(stateId);
};
Game_Battler.prototype.canAddStateFreeTurn = function(stateId) {
if (!$gameParty.inBattle()) return false;
if (BattleManager._subject !== this) return false;
if ($dataStates[stateId].autoRemovalTiming !== 1) return false;
if (Imported.YEP_BuffsStatesCore) {
if ($dataStates[stateId].reapplyRules === 0) return false;
}
return true;
};
Game_Battler.prototype.setStateFreeTurn = function(stateId) {
this._freeStateTurn = this._freeStateTurn || [];
this._freeStateTurn.push(stateId);
};
Game_Battler.prototype.idleMotion = function() {
return 'walk';
};
Game_Battler.prototype.deadMotion = function() {
return 'dead';
};
Game_Battler.prototype.sleepMotion = function() {
return 'sleep';
};
Game_Battler.prototype.chantMotion = function() {
return 'chant';
};
Game_Battler.prototype.guardMotion = function() {
return 'guard';
};
Game_Battler.prototype.abnormalMotion = function() {
return 'abnormal';
};
Game_Battler.prototype.dyingMotion = function() {
return 'dying';
};
Game_Battler.prototype.waitMotion = function() {
return 'wait';
};
Yanfly.BEC.Game_Battler_startAnimation = Game_Battler.prototype.startAnimation;
Game_Battler.prototype.startAnimation = function(animationId, mirror, delay) {
if (!$dataAnimations[animationId]) return;
Yanfly.BEC.Game_Battler_startAnimation.call(this, animationId, mirror, delay);
};
//=============================================================================
// Game_Actor
//=============================================================================
Yanfly.BEC.Game_Actor_refresh = Game_Actor.prototype.refresh;
Game_Actor.prototype.refresh = function() {
this._anchorX = undefined;
this._anchorY = undefined;
Yanfly.BEC.Game_Actor_refresh.call(this);
if ($gameParty.inBattle()) this.requestStatusRefresh();
};
Game_Actor.prototype.isSpriteVisible = function() {
if ($gameSystem.isSideView()) return true;
return Yanfly.Param.BECFrontSprite;
};
Game_Actor.prototype.reflectAnimationId = function() {
if (this.actor().reflectAnimationId > 0) {
return this.actor().reflectAnimationId;
}
if (this.currentClass().reflectAnimationId > 0) {
return this.currentClass().reflectAnimationId;
}
for (var i = 0; i < this.equips().length; ++i) {
var equip = this.equips()[i];
if (equip && equip.reflectAnimationId > 0) {
return equip.reflectAnimationId;
}
}
return Game_Battler.prototype.reflectAnimationId.call(this);
};
Game_Actor.prototype.spriteCanMove = function() {
if (this.actor().spriteCannotMove) return false;
if (this.currentClass().spriteCannotMove) return false;
for (var i = 0; i < this.equips().length; ++i) {
var equip = this.equips()[i];
if (equip && equip.spriteCannotMove) return false;
}
return Game_Battler.prototype.spriteCanMove.call(this);
};
Game_Actor.prototype.spriteWidth = function() {
if ($gameSystem.isSideView() && this.battler()) {
return this.battler()._mainSprite.width;
} else {
return 1;
}
};
Game_Actor.prototype.spriteHeight = function() {
if ($gameSystem.isSideView() && this.battler()) {
return this.battler()._mainSprite.height;
} else {
return 1;
}
};
Game_Actor.prototype.anchorX = function() {
if (this._anchorX !== undefined) return this._anchorX;
var length = this.states().length;
for (var i = 0; i < length; ++i) {
var obj = this.states()[i];
if (obj && obj.anchorX !== undefined) {
this._anchorX = obj.anchorX;
return this._anchorX;
}
}
length = this.equips().length;
for (var i = 0; i < length; ++i) {
var obj = this.equips()[i];
if (obj && obj.anchorX !== undefined) {
this._anchorX = obj.anchorX;
return this._anchorX;
}
}
if (this.currentClass().anchorX !== undefined) {
this._anchorX = this.currentClass().anchorX;
return this._anchorX;
}
this._anchorX = this.actor().anchorX;
return this._anchorX;
};
Game_Actor.prototype.anchorY = function() {
if (this._anchorY !== undefined) return this._anchorY;
var length = this.states().length;
for (var i = 0; i < length; ++i) {
var obj = this.states()[i];
if (obj && obj.anchorY !== undefined) {
this._anchorY = obj.anchorY;
return this._anchorY;
}
}
length = this.equips().length;
for (var i = 0; i < length; ++i) {
var obj = this.equips()[i];
if (obj && obj.anchorY !== undefined) {
this._anchorY = obj.anchorY;
return this._anchorY;
}
}
if (this.currentClass().anchorY !== undefined) {
this._anchorY = this.currentClass().anchorY;
return this._anchorY;
}
this._anchorY = this.actor().anchorY;
return this._anchorY;
};
Game_Actor.prototype.spriteFacePoint = function(pointX, pointY) {
if (this.spritePosX() > pointX) {
this.spriteFaceForward();
} else {
this.spriteFaceBackward();
}
};
Game_Actor.prototype.spriteFaceAwayPoint = function(pointX, pointY) {
if (this.spritePosX() > pointX) {
this.spriteFaceBackward();
} else {
this.spriteFaceForward();
}
};
Game_Actor.prototype.performAttack = function() {
var weapons = this.weapons();
var wtypeId = weapons[0] ? weapons[0].wtypeId : 0;
var attackMotion = $dataSystem.attackMotions[wtypeId];
if (attackMotion) {
if (attackMotion.type === 0) {
this.forceMotion('thrust');
} else if (attackMotion.type === 1) {
this.forceMotion('swing');
} else if (attackMotion.type === 2) {
this.forceMotion('missile');
}
this.startWeaponAnimation(attackMotion.weaponImageId);
}
};
Game_Actor.prototype.attackMotion = function() {
var weapons = this.weapons();
var wtypeId = weapons[0] ? weapons[0].wtypeId : 0;
var attackMotion = $dataSystem.attackMotions[wtypeId];
if (attackMotion) {
if (attackMotion.type === 0) {
return 'thrust';
} else if (attackMotion.type === 1) {
return 'swing';
} else if (attackMotion.type === 2) {
return 'missile';
}
};
return 'thrust';
};
Game_Actor.prototype.performEscapeSuccess = function() {
if (this.battler()) {
this.performEscape();
this.battler().startMove(300, 0, 60);
}
};
//=============================================================================
// Game_Enemy
//=============================================================================
if (!Game_Enemy.prototype.skills) {
Game_Enemy.prototype.skills = function() {
var skills = []
for (var i = 0; i < this.enemy().actions.length; ++i) {
var skill = $dataSkills[this.enemy().actions[i].skillId]
if (skill) skills.push(skill);
}
return skills;
}
}; // (!Game_Enemy.prototype.skills)
Game_Enemy.prototype.performActionStart = function(action) {
Game_Battler.prototype.performActionStart.call(this, action);
if (!$gameSystem.isSideView() || !this.spriteCanMove()) {
this.requestEffect('whiten');
}
};
Yanfly.BEC.Game_Enemy_performDamage = Game_Enemy.prototype.performDamage;
Game_Enemy.prototype.performDamage = function() {
if ($gameSystem.isSideView()) {
Game_Battler.prototype.performDamage.call(this);
SoundManager.playEnemyDamage();
} else {
Yanfly.BEC.Game_Enemy_performDamage.call(this);
}
};
Game_Enemy.prototype.attackAnimationId = function() {
return this.enemy().attackAnimationId;
};
Game_Enemy.prototype.attackAnimationId1 = function() {
return this.attackAnimationId();
};
Game_Enemy.prototype.attackAnimationId2 = function() {
return this.attackAnimationId();
};
Game_Enemy.prototype.reflectAnimationId = function() {
if (this.enemy().reflectAnimationId > 0) {
return this.enemy().reflectAnimationId;
}
return Game_Battler.prototype.reflectAnimationId.call(this);
};
Game_Enemy.prototype.spriteCanMove = function() {
if (this.enemy().spriteCannotMove) return false;
return Game_Battler.prototype.spriteCanMove.call(this);
};
Game_Enemy.prototype.meetsTurnCondition = function(param1, param2) {
var n = this.turnCount();
if (param2 === 0) {
return n === param1;
} else {
return n > 0 && n >= param1 && n % param2 === param1 % param2;
}
};
//=============================================================================
// Game_Unit
//=============================================================================
Game_Unit.prototype.createActions = function() {
var max = this.members().length;
for (var i = 0; i < max; ++i) {
var member = this.members()[i];
if (member) member.createActions();
}
};
Game_Unit.prototype.requestMotionRefresh = function() {
var max = this.members().length;
for (var i = 0; i < max; ++i) {
var member = this.members()[i];
if (member) member.requestMotionRefresh();
}
};
Game_Unit.prototype.onTurnStart = function() {
var max = this.members().length;
for (var i = 0; i < max; ++i) {
var member = this.members()[i];
if (member) {
member.onTurnStart();
member.refresh();
}
}
};
Game_Unit.prototype.updateTick = function() {
var max = this.members().length;
for (var i = 0; i < max; ++i) {
var member = this.members()[i];
if (member) member.updateTick();
}
};
Game_Unit.prototype.refreshMembers = function() {
var group = this.allMembers();
var length = group.length;
for (var i = 0; i < length; ++i) {
var member = group[i];
if (member) member.refresh();
}
};
//=============================================================================
// Game_Party
//=============================================================================
Game_Party.prototype.performEscapeSuccess = function() {
for (var i = 0; i < this.members().length; ++i) {
var member = this.members()[i];
if (member) member.performEscapeSuccess();
}
};
//=============================================================================
// Game_Troop
//=============================================================================
Game_Troop.prototype.allMembers = function() {
return this.members();
};
//=============================================================================
// Scene_Battle
//=============================================================================
Yanfly.BEC.Scene_Battle_update = Scene_Battle.prototype.update;
Scene_Battle.prototype.update = function() {
Yanfly.BEC.Scene_Battle_update.call(this);
this.updateStatusWindowRequests();
};
Scene_Battle.prototype.updateStatusWindowRequests = function() {
if (!this._statusWindow) return;
if (this._statusWindow.isClosed()) return;
this._statusWindow.updateStatusRequests();
};
Yanfly.BEC.Scene_Battle_createSkillWindow =
Scene_Battle.prototype.createSkillWindow;
Scene_Battle.prototype.createSkillWindow = function() {
Yanfly.BEC.Scene_Battle_createSkillWindow.call(this);
if (Yanfly.Param.BECLowerWindows) {
this.adjustLowerWindow(this._skillWindow);
}
};
Yanfly.BEC.Scene_Battle_createItemWindow =
Scene_Battle.prototype.createItemWindow;
Scene_Battle.prototype.createItemWindow = function() {
Yanfly.BEC.Scene_Battle_createItemWindow.call(this);
if (Yanfly.Param.BECLowerWindows) {
this.adjustLowerWindow(this._itemWindow);
}
};
Yanfly.BEC.Scene_Battle_createActorWindow =
Scene_Battle.prototype.createActorWindow;
Scene_Battle.prototype.createActorWindow = function() {
Yanfly.BEC.Scene_Battle_createActorWindow.call(this);
this._actorWindow.x = Graphics.boxWidth - this._actorWindow.width;
if (Yanfly.Param.BECSelectHelp) {
this._actorWindow.setHelpWindow(this._helpWindow);
}
};
Yanfly.BEC.Scene_Battle_createEnemyWindow =
Scene_Battle.prototype.createEnemyWindow;
Scene_Battle.prototype.createEnemyWindow = function() {
Yanfly.BEC.Scene_Battle_createEnemyWindow.call(this);
if (Yanfly.Param.BECSelectHelp) {
this._enemyWindow.setHelpWindow(this._helpWindow);
}
};
Scene_Battle.prototype.adjustLowerWindow = function(win) {
win.height = win.fittingHeight(Yanfly.Param.BECWindowRows);
win.y = Graphics.boxHeight - win.height;
};
Yanfly.BEC.Scene_Battle_startPartyCommandSelection =
Scene_Battle.prototype.startPartyCommandSelection;
Scene_Battle.prototype.startPartyCommandSelection = function() {
if (this.isStartActorCommand()) {
this.selectNextCommand();
} else {
Yanfly.BEC.Scene_Battle_startPartyCommandSelection.call(this);
}
};
Scene_Battle.prototype.isStartActorCommand = function() {
if (this._isStartActorCommand === undefined) {
this._isStartActorCommand = Yanfly.Param.BECStartActCmd;
}
return this._isStartActorCommand;
};
Yanfly.BEC.Scene_Battle_selectPreviousCommand =
Scene_Battle.prototype.selectPreviousCommand;
Scene_Battle.prototype.selectPreviousCommand = function() {
if (this.isStartActorCommand()) {
BattleManager.selectPreviousCommand();
if (BattleManager.isInputting() && BattleManager.actor()) {
this.startActorCommandSelection();
} else {
Yanfly.BEC.Scene_Battle_startPartyCommandSelection.call(this);
}
} else {
Yanfly.BEC.Scene_Battle_selectPreviousCommand.call(this);
}
};
Yanfly.BEC.Scene_Battle_selectNextCommand =
Scene_Battle.prototype.selectNextCommand;
Scene_Battle.prototype.selectNextCommand = function() {
Yanfly.BEC.Scene_Battle_selectNextCommand.call(this);
this._helpWindow.clear();
BattleManager.stopAllSelection();
};
Yanfly.BEC.Scene_Battle_commandSkill = Scene_Battle.prototype.commandSkill;
Scene_Battle.prototype.commandSkill = function() {
this._helpWindow.clear();
Yanfly.BEC.Scene_Battle_commandSkill.call(this);
};
Yanfly.BEC.Scene_Battle_commandItem = Scene_Battle.prototype.commandItem;
Scene_Battle.prototype.commandItem = function() {
this._helpWindow.clear();
Yanfly.BEC.Scene_Battle_commandItem.call(this);
};
Yanfly.BEC.Scene_Battle_startActorCommandSelection =
Scene_Battle.prototype.startActorCommandSelection;
Scene_Battle.prototype.startActorCommandSelection = function() {
BattleManager.createActions();
Yanfly.BEC.Scene_Battle_startActorCommandSelection.call(this);
this._statusWindow.refresh();
};
Yanfly.BEC.Scene_Battle_selectActorSelection =
Scene_Battle.prototype.selectActorSelection;
Scene_Battle.prototype.selectActorSelection = function() {
if (Yanfly.Param.BECSelectHelp) this._helpWindow.show();
this._helpWindow.clear();
Yanfly.BEC.Scene_Battle_selectActorSelection.call(this);
this._actorWindow.autoSelect();
};
Yanfly.BEC.Scene_Battle_onActorCancel = Scene_Battle.prototype.onActorCancel;
Scene_Battle.prototype.onActorCancel = function() {
if (Yanfly.Param.BECSelectHelp) this._helpWindow.hide();
this._helpWindow.clear();
Yanfly.BEC.Scene_Battle_onActorCancel.call(this);
BattleManager.stopAllSelection();
BattleManager.clearInputtingAction();
};
Yanfly.BEC.Scene_Battle_selectEnemySelection =
Scene_Battle.prototype.selectEnemySelection;
Scene_Battle.prototype.selectEnemySelection = function() {
if (Yanfly.Param.BECSelectHelp) this._helpWindow.show();
this._helpWindow.clear();
Yanfly.BEC.Scene_Battle_selectEnemySelection.call(this);
this._enemyWindow.autoSelect();
};
Yanfly.BEC.Scene_Battle_onEnemyCancel = Scene_Battle.prototype.onEnemyCancel;
Scene_Battle.prototype.onEnemyCancel = function() {
if (Yanfly.Param.BECSelectHelp) this._helpWindow.hide();
this._helpWindow.clear();
Yanfly.BEC.Scene_Battle_onEnemyCancel.call(this);
BattleManager.stopAllSelection();
BattleManager.clearInputtingAction();
};
Yanfly.BEC.Scene_Battle_onSelectAction = Scene_Battle.prototype.onSelectAction;
Scene_Battle.prototype.onSelectAction = function() {
if (Yanfly.Param.BECSelectHelp) BattleManager.forceSelection();
this._helpWindow.clear();
Yanfly.BEC.Scene_Battle_onSelectAction.call(this);
if (Yanfly.Param.BECSelectHelp) BattleManager.resetSelection();
};
Yanfly.BEC.Scene_Battle_onSkillOk =
Scene_Battle.prototype.onSkillOk;
Scene_Battle.prototype.onSkillOk = function() {
this._helpWindow.clear();
Yanfly.BEC.Scene_Battle_onSkillOk.call(this);
};
Yanfly.BEC.Scene_Battle_onSkillCancel =
Scene_Battle.prototype.onSkillCancel;
Scene_Battle.prototype.onSkillCancel = function() {
this._helpWindow.clear();
Yanfly.BEC.Scene_Battle_onSkillCancel.call(this);
BattleManager.clearInputtingAction();
};
Yanfly.BEC.Scene_Battle_onItemOk =
Scene_Battle.prototype.onItemOk;
Scene_Battle.prototype.onItemOk = function() {
this._helpWindow.clear();
Yanfly.BEC.Scene_Battle_onItemOk.call(this);
};
Yanfly.BEC.Scene_Battle_onItemCancel =
Scene_Battle.prototype.onItemCancel;
Scene_Battle.prototype.onItemCancel = function() {
this._helpWindow.clear();
Yanfly.BEC.Scene_Battle_onItemCancel.call(this);
BattleManager.clearInputtingAction();
};
//=============================================================================
// Window_Selectable
//=============================================================================
Yanfly.BEC.Window_Selectable_isCursorMovable =
Window_Selectable.prototype.isCursorMovable;
Window_Selectable.prototype.isCursorMovable = function() {
if (this._inputLock) return false;
return Yanfly.BEC.Window_Selectable_isCursorMovable.call(this);
};
//=============================================================================
// Window_Help
//=============================================================================
Yanfly.BEC.Window_Help_clear = Window_Help.prototype.clear;
Window_Help.prototype.clear = function() {
Yanfly.BEC.Window_Help_clear.call(this);
this.contents.clear();
};
Window_Help.prototype.setBattler = function(battler) {
this.contents.clear();
this.clear();
this.resetFontSettings();
if (!$gameParty.inBattle()) return;
if (!battler) return;
var action = BattleManager.inputtingAction();
if (this.specialSelectionText(action)) {
this.drawSpecialSelectionText(action);
} else {
this.drawBattler(battler);
}
};
Window_Help.prototype.specialSelectionText = function(action) {
BattleManager.resetSelection();
if (!action) return false;
return !action.needsSelection();
};
Window_Help.prototype.drawBattler = function(battler) {
var text = battler.name();
var wx = 0;
var wy = (this.contents.height - this.lineHeight()) / 2;
this.drawText(text, wx, wy, this.contents.width, 'center');
};
Window_Help.prototype.drawSpecialSelectionText = function(action) {
var wx = 0;
var wy = (this.contents.height - this.lineHeight()) / 2;
var text = '';
if (action.isForUser()) {
text = Yanfly.Param.BECHelpUserTx;
} else if (action.isForRandom()) {
BattleManager.startAllSelection();
var fmt = Yanfly.Param.BECHelpRandTx;
if (action.isForOpponent() && action.numTargets() !== 1) {
var target = Yanfly.Param.BECHelpEnemiesTx;
} else if (action.isForOpponent() && action.numTargets() === 1) {
var target = Yanfly.Param.BECHelpEnemyTx;
} else if (action.isForFriend() && action.numTargets() !== 1) {
var target = Yanfly.Param.BECHelpAlliesTx;
} else {
var target = Yanfly.Param.BECHelpAllyTx;
}
text = fmt.format(target, Yanfly.Util.toGroup(action.numTargets()));
} else if (action.isForAll()) {
BattleManager.startAllSelection();
var fmt = Yanfly.Param.BECHelpAllTx;
if (action.isForOpponent()) {
var target = Yanfly.Param.BECHelpEnemiesTx;
} else {
var target = Yanfly.Param.BECHelpAlliesTx;
}
text = fmt.format(target);
}
this.drawText(text, wx, wy, this.contents.width, 'center');
};
//=============================================================================
// Window_BattleActor
//=============================================================================
Window_BattleActor.prototype.autoSelect = function() {
var action = BattleManager.inputtingAction();
if (!action) return;
this._inputLock = false;
this._selectDead = false;
if (action.isForUser()) {
this.select(BattleManager.actor().index());
this._inputLock = true;
} else if (action.isForDeadFriend()) {
this._selectDead = true;
this.autoSelectFirstDeadActor();
if (action.isForAll()) this._inputLock = true;
}
};
Window_BattleActor.prototype.autoSelectFirstDeadActor = function() {
var length = $gameParty.members().length;
for (var i = 0; i < length; ++i) {
var member = $gameParty.members()[i];
if (member && member.isDead()) return this.select(i);
}
};
Window_BattleActor.prototype.isOkEnabled = function() {
if (this._selectDead) return this.actor().isDead();
return Window_Selectable.prototype.isOkEnabled.call(this);
};
Window_BattleActor.prototype.updateHelp = function() {
if (!this._helpWindow) return;
this._helpWindow.setBattler(this.actor());
};
Yanfly.BEC.Window_BattleActor_processTouch =
Window_BattleActor.prototype.processTouch;
Window_BattleActor.prototype.processTouch = function() {
if (Yanfly.Param.BECActorSelect && this.isOpenAndActive()) {
if (TouchInput.isTriggered() && !this.isTouchedInsideFrame()) {
if (this.getClickedActor() >= 0) {
var index = this.getClickedActor();
if (this.index() === index) {
return this.processOk();
} else {
SoundManager.playCursor();
return this.select(index);
}
}
}
if (TouchInput.isPressed() && !this.isTouchedInsideFrame()) {
if (this.getClickedActor() >= 0) {
var index = this.getClickedActor();
if (this.index() !== index) {
SoundManager.playCursor();
return this.select(index);
}
}
}
if (Yanfly.Param.BECSelectMouseOver) {
var index = this.getMouseOverActor();
if (index >= 0 && this.index() !== index) {
SoundManager.playCursor();
return this.select(index);
}
}
}
Yanfly.BEC.Window_BattleActor_processTouch.call(this);
};
Window_BattleActor.prototype.getClickedActor = function() {
for (var i = 0; i < $gameParty.battleMembers().length; ++i) {
var actor = $gameParty.battleMembers().reverse()[i];
if (!actor) continue;
if (this.isClickedActor(actor)) {
if (this._selectDead && !actor.isDead()) continue;
if (this._inputLock && actor.index() !== this.index()) continue;
return actor.index();
}
}
return -1;
};
Window_BattleActor.prototype.isClickedActor = function(actor) {
if (!actor) return false;
if (!actor.isSpriteVisible()) return false;
if (!actor.isAppeared()) return false;
if ($gameTemp._disableMouseOverSelect) return false;
var x = TouchInput.x;
var y = TouchInput.y;
var rect = new Rectangle();
rect.width = actor.spriteWidth();
rect.height = actor.spriteHeight();
rect.x = actor.spritePosX() - rect.width / 2;
rect.y = actor.spritePosY() - rect.height;
return (x >= rect.x && y >= rect.y && x < rect.x + rect.width &&
y < rect.y + rect.height);
};
Window_BattleActor.prototype.getMouseOverActor = function() {
for (var i = 0; i < $gameParty.battleMembers().length; ++i) {
var actor = $gameParty.battleMembers().reverse()[i];
if (!actor) continue;
if (this.isMouseOverActor(actor)) {
if (this._selectDead && !actor.isDead()) continue;
if (this._inputLock && actor.index() !== this.index()) continue;
return actor.index();
}
}
return -1;
};
Window_BattleActor.prototype.isMouseOverActor = function(actor) {
if (!actor) return false;
if (!actor.isSpriteVisible()) return false;
if (!actor.isAppeared()) return false;
if ($gameTemp._disableMouseOverSelect) return false;
var x = TouchInput._mouseOverX;
var y = TouchInput._mouseOverY;
var rect = new Rectangle();
rect.width = actor.spriteWidth();
rect.height = actor.spriteHeight();
rect.x = actor.spritePosX() - rect.width / 2;
rect.y = actor.spritePosY() - rect.height;
return (x >= rect.x && y >= rect.y && x < rect.x + rect.width &&
y < rect.y + rect.height);
};
//=============================================================================
// Window_BattleEnemy
//=============================================================================
Yanfly.DisableWebGLMask = false;
Yanfly.BEC.Window_BattleEnemy_initialize =
Window_BattleEnemy.prototype.initialize;
Window_BattleEnemy.prototype.initialize = function(x, y) {
if (Yanfly.Param.BECEnemySelect) {
x -= Graphics.boxWidth * 200;
y -= Graphics.boxHeight * 200;
};
Yanfly.BEC.Window_BattleEnemy_initialize.call(this, x, y);
};
Yanfly.BEC.WindowLayer_webglMaskWindow =
WindowLayer.prototype._webglMaskWindow;
WindowLayer.prototype._webglMaskWindow = function(renderSession, win) {
if (win._ignoreMask) return;
Yanfly.BEC.WindowLayer_webglMaskWindow.call(this, renderSession, win);
};
Yanfly.BEC.Window_BattleEnemy_maxCols =
Window_BattleEnemy.prototype.maxCols;
Window_BattleEnemy.prototype.maxCols = function() {
if (Yanfly.Param.BECEnemySelect) return this._enemies.length;
return Yanfly.BEC.Window_BattleEnemy_maxCols.call(this);
};
Window_BattleEnemy.prototype.allowedTargets = function() {
var targets = [];
targets = targets.concat($gameTroop.aliveMembers());
return targets;
};
Window_BattleEnemy.prototype.refresh = function() {
this._enemies = this.allowedTargets();
this.sortTargets();
Window_Selectable.prototype.refresh.call(this);
};
Window_BattleEnemy.prototype.sortTargets = function() {
this._enemies.sort(function(a, b) {
if (a.spritePosX() == b.spritePosX()) {
return a.spritePosY() - b.spritePosY();
}
return a.spritePosX() - b.spritePosX();
});
};
Window_BattleEnemy.prototype.autoSelect = function() {
var selectIndex = eval(Yanfly.Param.BECEnemyAutoSel);
this.select(selectIndex);
};
Window_BattleEnemy.prototype.furthestRight = function() {
return this.maxItems() - 1;
};
Window_BattleEnemy.prototype.updateHelp = function() {
if (!this._helpWindow) return;
this._helpWindow.setBattler(this.enemy());
};
Yanfly.BEC.Window_BattleEnemy_processTouch =
Window_BattleEnemy.prototype.processTouch;
Window_BattleEnemy.prototype.processTouch = function() {
if (Yanfly.Param.BECEnemySelect && this.isOpenAndActive()) {
if (TouchInput.isTriggered() && !this.isTouchedInsideFrame()) {
if (this.getClickedEnemy() >= 0) {
var index = this.getClickedEnemy();
if (this.index() === index) {
return this.processOk();
} else {
SoundManager.playCursor();
return this.select(index);
}
}
}
if (TouchInput.isPressed() && !this.isTouchedInsideFrame()) {
if (this.getClickedEnemy() >= 0) {
var index = this.getClickedEnemy();
if (this.index() !== index) {
SoundManager.playCursor();
return this.select(index);
}
}
}
if (Yanfly.Param.BECSelectMouseOver) {
var index = this.getMouseOverEnemy();
if (index >= 0 && this.index() !== index) {
SoundManager.playCursor();
return this.select(index);
}
}
};
Yanfly.BEC.Window_BattleEnemy_processTouch.call(this);
};
Window_BattleEnemy.prototype.getClickedEnemy = function() {
for (var i = 0; i < this._enemies.length; ++i) {
var enemy = this._enemies[i];
if (!enemy) continue;
if (this.isClickedEnemy(enemy)) {
if (this._selectDead && !enemy.isDead()) continue;
var index = this._enemies.indexOf(enemy)
if (this._inputLock && index !== this.index()) continue;
return index;
}
}
return -1;
};
Window_BattleEnemy.prototype.isClickedEnemy = function(enemy) {
if (!enemy) return false;
if (!enemy.isSpriteVisible()) return false;
if ($gameTemp._disableMouseOverSelect) return false;
var x = TouchInput.x;
var y = TouchInput.y;
var rect = new Rectangle();
rect.width = enemy.spriteWidth();
rect.height = enemy.spriteHeight();
rect.x = enemy.spritePosX() - rect.width / 2;
rect.y = enemy.spritePosY() - rect.height;
return (x >= rect.x && y >= rect.y && x < rect.x + rect.width &&
y < rect.y + rect.height);
};
Window_BattleEnemy.prototype.getMouseOverEnemy = function() {
for (var i = 0; i < this._enemies.length; ++i) {
var enemy = this._enemies[i];
if (!enemy) continue;
if (this.isMouseOverEnemy(enemy)) {
if (this._selectDead && !enemy.isDead()) continue;
var index = this._enemies.indexOf(enemy)
if (this._inputLock && index !== this.index()) continue;
return index;
}
}
return -1;
};
Window_BattleEnemy.prototype.isMouseOverEnemy = function(enemy) {
if (!enemy) return false;
if (!enemy.isSpriteVisible()) return false;
if ($gameTemp._disableMouseOverSelect) return false;
var x = TouchInput._mouseOverX;
var y = TouchInput._mouseOverY;
var rect = new Rectangle();
rect.width = enemy.spriteWidth();
rect.height = enemy.spriteHeight();
rect.x = enemy.spritePosX() - rect.width / 2;
rect.y = enemy.spritePosY() - rect.height;
return (x >= rect.x && y >= rect.y && x < rect.x + rect.width &&
y < rect.y + rect.height);
};
//=============================================================================
// Window_EnemyVisualSelect
//=============================================================================
function Window_EnemyVisualSelect() {
this.initialize.apply(this, arguments);
}
Window_EnemyVisualSelect.prototype = Object.create(Window_Base.prototype);
Window_EnemyVisualSelect.prototype.constructor = Window_EnemyVisualSelect;
Window_EnemyVisualSelect.prototype.initialize = function() {
Window_Base.prototype.initialize.call(this, 0, 0, 1, 1);
this._battler = null;
this._battlerName = '';
this._requestRefresh = false;
this._showSelectCursor = Yanfly.Param.BECShowSelectBox;
this._showEnemyName = Yanfly.Param.BECShowEnemyName;
this.contentsOpacity = 0;
this.opacity = 0;
};
Window_EnemyVisualSelect.prototype.setBattler = function(battler) {
if (this._battler === battler) return;
this._battler = battler;
this._battlerName = battler.name();
};
Window_EnemyVisualSelect.prototype.update = function() {
Window_Base.prototype.update.call(this);
if (!this._battler) return;
this.updateWindowAspects();
};
Window_EnemyVisualSelect.prototype.updateWindowAspects = function() {
this.updateBattlerName();
this.updateWindowSize();
this.updateWindowPosition();
this.updateOpacity();
this.updateRefresh();
this.updateCursor();
};
Window_EnemyVisualSelect.prototype.updateBattlerName = function() {
if (this._battlerName !== this._battler.name())
this._battlerName = this._battler.name();
this._requestRefresh = true;
this._nameTextWidth = undefined;
};
Window_EnemyVisualSelect.prototype.updateWindowSize = function() {
var spriteWidth = this._battler.spriteWidth();
this.contents.fontSize = Yanfly.Param.BECEnemyFontSize;
if (this._nameTextWidth === undefined) {
this._nameTextWidth = this.textWidth(this._battler.name());
}
var textWidth = this._nameTextWidth;
textWidth += this.textPadding() * 2;
var width = Math.max(spriteWidth, textWidth) + this.standardPadding() * 2;
width = Math.ceil(width);
var height = this._battler.spriteHeight() + this.standardPadding() * 2;
height = Math.ceil(height);
height = Math.max(height, this.lineHeight() + this.standardPadding() * 2);
if (width === this.width && height === this.height) return;
this.width = width;
this.height = height;
this.createContents();
this._requestRefresh = true;
this.makeWindowBoundaries();
};
Window_EnemyVisualSelect.prototype.makeWindowBoundaries = function() {
if (!this._requestRefresh) return;
this._minX = -1 * this.standardPadding();
this._maxX = Graphics.boxWidth - this.width + this.standardPadding();
this._minY = -1 * this.standardPadding();
this._maxY = Graphics.boxHeight - this.height + this.standardPadding();
this._maxY -= SceneManager._scene._statusWindow.height;
};
Window_EnemyVisualSelect.prototype.updateWindowPosition = function() {
if (!this._battler) return;
this.x = -1 * this.width / 2;
this.y = -1 * this.height + this.standardPadding();
this.x += this._battler.spritePosX();
this.y += this._battler.spritePosY();
this.x = this.x.clamp(this._minX, this._maxX);
this.y = this.y.clamp(this._minY, this._maxY);
};
Window_EnemyVisualSelect.prototype.updateOpacity = function() {
if (this.isShowWindow()) {
this.contentsOpacity += 32;
} else {
this.contentsOpacity -= 32;
}
};
Window_EnemyVisualSelect.prototype.isShowWindow = function() {
var scene = SceneManager._scene;
if (!scene._enemyWindow) return false;
var enemyWindow = scene._enemyWindow;
if (!enemyWindow.active) return false;
if (!this._battler.isAppeared()) return false;
if (this._battler.isDead()) {
return enemyWindow._selectDead;
}
return enemyWindow._enemies.contains(this._battler);
};
Window_EnemyVisualSelect.prototype.updateCursor = function() {
if (this.isShowCursor()) {
var wy = this.contents.height - this.lineHeight();
this.setCursorRect(0, wy, this.contents.width, this.lineHeight());
} else {
this.setCursorRect(0, 0, 0, 0);
}
};
Window_EnemyVisualSelect.prototype.isShowCursor = function() {
if (!this._showSelectCursor) return false;
var scene = SceneManager._scene;
if (!scene._enemyWindow) return false;
var enemyWindow = scene._enemyWindow;
if (!enemyWindow.active) return false;
if (!this._battler.isAppeared()) return false;
return this._battler.isSelected();
};
Window_EnemyVisualSelect.prototype.updateRefresh = function() {
if (this._requestRefresh) this.refresh();
};
Window_EnemyVisualSelect.prototype.refresh = function() {
this.contents.clear();
if (!this._battler) return;
if (!this._showEnemyName) return;
if (this._battler.isHidden()) return;
this._requestRefresh = false;
this.contents.fontSize = Yanfly.Param.BECEnemyFontSize;
var text = this._battler.name();
var wy = this.contents.height - this.lineHeight();
this.drawText(text, 0, wy, this.contents.width, 'center');
};
//=============================================================================
// Window_PartyCommand
//=============================================================================
Window_PartyCommand.prototype.itemTextAlign = function() {
return Yanfly.Param.BECCommandAlign;
};
Window_PartyCommand.prototype.numVisibleRows = function() {
return Yanfly.Param.BECCommandRows;
};
//=============================================================================
// Window_ActorCommand
//=============================================================================
Window_ActorCommand.prototype.itemTextAlign = function() {
return Yanfly.Param.BECCommandAlign;
};
Window_ActorCommand.prototype.numVisibleRows = function() {
return Yanfly.Param.BECCommandRows;
};
//=============================================================================
// Window_BattleStatus
//=============================================================================
Window_BattleStatus.prototype.numVisibleRows = function() {
return Yanfly.Param.BECCommandRows;
};
Window_BattleStatus.prototype.updateStatusRequests = function() {
if (BattleManager._victoryPhase) return;
for (var i = 0; i < $gameParty.battleMembers().length; ++i) {
var actor = $gameParty.battleMembers()[i];
if (!actor) continue;
if (actor.isStatusRefreshRequested()) this.processStatusRefresh(i);
}
};
Window_BattleStatus.prototype.processStatusRefresh = function(index) {
var actor = $gameParty.battleMembers()[index];
if (!actor) return;
var rect = this.itemRect(index);
this.contents.clearRect(rect.x, rect.y, rect.width, rect.height);
this.drawItem(index);
actor.completetStatusRefreshRequest();
};
Window_BattleStatus.prototype.update = function() {
Window_Selectable.prototype.update.call(this);
};
if (!Yanfly.Param.BECCurMax) {
Window_BattleStatus.prototype.drawCurrentAndMax = function(current, max, x, y,
width, color1, color2) {
var labelWidth = this.textWidth('HP');
var valueWidth = this.textWidth(Yanfly.Util.toGroup(max));
var slashWidth = this.textWidth('/');
var x1 = x + width - valueWidth;
this.changeTextColor(color1);
this.drawText(Yanfly.Util.toGroup(current), x1, y, valueWidth, 'right');
};
}; // Yanfly.Param.BECCurMax
//=============================================================================
// Window_BattleLog
//=============================================================================
Yanfly.BEC.Window_BattleLog_isFastForward =
Window_BattleLog.prototype.isFastForward;
Window_BattleLog.prototype.isFastForward = function() {
if (Yanfly.Param.BECOptSpeed) return true;
return Yanfly.BEC.Window_BattleLog_isFastForward.call(this);
};
Window_BattleLog.prototype.updateWaitCount = function() {
if (this._waitCount > 0) {
this._waitCount -= 1;
if (this._waitCount < 0) {
this._waitCount = 0;
}
return true;
}
return false;
};
Window_BattleLog.prototype.animationBaseDelay = function() {
return Yanfly.Param.BECAniBaseDel;
};
Window_BattleLog.prototype.animationNextDelay = function() {
return Yanfly.Param.BECAniNextDel;
};
Window_BattleLog.prototype.updateWaitMode = function() {
var waiting = false;
switch (this._waitMode) {
case 'effect':
waiting = this._spriteset.isEffecting();
break;
case 'movement':
waiting = this._spriteset.isAnyoneMoving();
break;
case 'animation':
waiting = this._spriteset.isAnimationPlaying();
break;
case 'popups':
waiting = this._spriteset.isPopupPlaying();
break;
}
if (!waiting) {
this._waitMode = '';
}
return waiting;
};
Window_BattleLog.prototype.startAction = function(subject, action, targets) {
};
Window_BattleLog.prototype.endAction = function(subject) {
};
Window_BattleLog.prototype.waitForAnimation = function() {
this.setWaitMode('animation');
};
Window_BattleLog.prototype.waitForEffect = function() {
this.setWaitMode('effect');
};
Window_BattleLog.prototype.waitForPopups = function() {
this.setWaitMode('popups');
};
Yanfly.BEC.Window_BattleLog_displayAction =
Window_BattleLog.prototype.displayAction;
Window_BattleLog.prototype.displayAction = function(subject, item) {
if (Yanfly.Param.BECFullActText) {
Yanfly.BEC.Window_BattleLog_displayAction.call(this, subject, item);
} else {
this._actionIcon = this.displayIcon(item);
var text = this.displayText(item);
this.push('addText', '<SIMPLE>' + text);
if (item.message2) {
this.push('addText', '<CENTER>' + item.message2.format(text));
}
}
};
Window_BattleLog.prototype.displayIcon = function(item) {
if (!item) return 0;
return item.battleDisplayIcon;
};
Window_BattleLog.prototype.displayText = function(item) {
if (!item) return '';
return item.battleDisplayText;
};
Yanfly.BEC.Window_BattleLog_displayActionResults =
Window_BattleLog.prototype.displayActionResults;
Window_BattleLog.prototype.displayActionResults = function(subject, target) {
if (Yanfly.Param.BECOptSpeed) {
if (target.result().used) {
this.displayCritical(target);
this.displayDamage(target);
this.displayAffectedStatus(target);
this.displayFailure(target);
}
} else {
Yanfly.BEC.Window_BattleLog_displayActionResults.call(this, subject,
target);
}
if (target.isDead()) target.performCollapse();
};
Yanfly.BEC.Window_BattleLog_drawLineText =
Window_BattleLog.prototype.drawLineText;
Window_BattleLog.prototype.drawLineText = function(index) {
if (this._lines[index].match('<CENTER>')) {
this.drawCenterLine(index);
} else if (this._lines[index].match('<SIMPLE>')) {
this.drawSimpleActionLine(index);
} else {
Yanfly.BEC.Window_BattleLog_drawLineText.call(this, index);
}
};
Window_BattleLog.prototype.textWidthEx = function(text) {
return this.drawTextEx(text, 0, this.contents.height + this.lineHeight());
};
Window_BattleLog.prototype.drawCenterLine = function(index) {
var text = this._lines[index].replace('<CENTER>', '');
var rect = this.itemRectForText(index);
this.contents.clearRect(rect.x, rect.y, rect.width, rect.height);
var tw = this.textWidthEx(text);
var wx = rect.x + (rect.width - tw) / 2;
this.resetFontSettings();
this.drawTextEx(text, wx, rect.y);
};
Window_BattleLog.prototype.drawSimpleActionLine = function(index) {
var text = this._lines[index].replace('<SIMPLE>', '');
var rect = this.itemRectForText(index);
this.contents.clearRect(rect.x, rect.y, rect.width, rect.height);
if (this._actionIcon) {
var tw = this.textWidth(text);
var ix = (rect.width - tw) / 2 - 4;
this.drawIcon(this._actionIcon, ix, rect.y + 2);
}
this.drawText(text, rect.x, rect.y, Graphics.boxWidth, 'center');
};
Window_BattleLog.prototype.displayCounter = function(target) {
if (Yanfly.Param.BECShowCntText) {
this.addText(TextManager.counterAttack.format(target.name()));
}
target.performCounter();
this.showAttackAnimation(target, [BattleManager._subject]);
this.waitForAnimation();
};
Window_BattleLog.prototype.displayReflection = function(target) {
if (Yanfly.Param.BECShowRflText) {
this.addText(TextManager.magicReflection.format(target.name()));
}
target.performReflection();
var animationId = BattleManager._action.item().animationId;
this.showNormalAnimation([BattleManager._subject], animationId);
this.waitForAnimation();
};
Window_BattleLog.prototype.displaySubstitute = function(substitute, target) {
if (Yanfly.Param.BECShowSubText) {
var substName = substitute.name();
this.addText(TextManager.substitute.format(substName, target.name()));
}
substitute.performSubstitute(target);
};
Yanfly.BEC.Window_BattleLog_displayFailure =
Window_BattleLog.prototype.displayFailure;
Window_BattleLog.prototype.displayFailure = function(target) {
if (!Yanfly.Param.BECShowFailText) return;
Yanfly.BEC.Window_BattleLog_displayFailure.call(this, target);
};
Yanfly.BEC.Window_BattleLog_displayCritical =
Window_BattleLog.prototype.displayCritical;
Window_BattleLog.prototype.displayCritical = function(target) {
if (!Yanfly.Param.BECShowCritText) return;
Yanfly.BEC.Window_BattleLog_displayCritical.call(this, target);
};
Yanfly.BEC.Window_BattleLog_displayMiss =
Window_BattleLog.prototype.displayMiss;
Window_BattleLog.prototype.displayMiss = function(target) {
if (!Yanfly.Param.BECShowMissText) return;
Yanfly.BEC.Window_BattleLog_displayMiss.call(this, target);
};
Yanfly.BEC.Window_BattleLog_displayEvasion =
Window_BattleLog.prototype.displayEvasion;
Window_BattleLog.prototype.displayEvasion = function(target) {
if (!Yanfly.Param.BECShowEvaText) return;
Yanfly.BEC.Window_BattleLog_displayEvasion.call(this, target);
};
Yanfly.BEC.Window_BattleLog_displayHpDamage =
Window_BattleLog.prototype.displayHpDamage;
Window_BattleLog.prototype.displayHpDamage = function(target) {
if (!Yanfly.Param.BECShowHpText) return;
Yanfly.BEC.Window_BattleLog_displayHpDamage.call(this, target);
};
Yanfly.BEC.Window_BattleLog_displayMpDamage =
Window_BattleLog.prototype.displayMpDamage;
Window_BattleLog.prototype.displayMpDamage = function(target) {
if (!Yanfly.Param.BECShowMpText) return;
Yanfly.BEC.Window_BattleLog_displayMpDamage.call(this, target);
};
Yanfly.BEC.Window_BattleLog_displayTpDamage =
Window_BattleLog.prototype.displayTpDamage;
Window_BattleLog.prototype.displayTpDamage = function(target) {
if (!Yanfly.Param.BECShowTpText) return;
Yanfly.BEC.Window_BattleLog_displayTpDamage.call(this, target);
};
Yanfly.BEC.Window_BattleLog_displayCurrentState =
Window_BattleLog.prototype.displayCurrentState;
Window_BattleLog.prototype.displayCurrentState = function(subject) {
if (!Yanfly.Param.BECShowStateText) return;
Yanfly.BEC.Window_BattleLog_displayCurrentState.call(this, subject);
};
Yanfly.BEC.Window_BattleLog_displayAddedStates =
Window_BattleLog.prototype.displayAddedStates;
Window_BattleLog.prototype.displayAddedStates = function(target) {
if (!Yanfly.Param.BECShowStateText) return;
Yanfly.BEC.Window_BattleLog_displayAddedStates.call(this, target);
};
Yanfly.BEC.Window_BattleLog_displayRemovedStates =
Window_BattleLog.prototype.displayRemovedStates;
Window_BattleLog.prototype.displayRemovedStates = function(target) {
if (!Yanfly.Param.BECShowStateText) return;
Yanfly.BEC.Window_BattleLog_displayRemovedStates.call(this, target);
};
Yanfly.BEC.Window_BattleLog_displayChangedBuffs =
Window_BattleLog.prototype.displayChangedBuffs;
Window_BattleLog.prototype.displayChangedBuffs = function(target) {
if (!Yanfly.Param.BECShowBuffText) return;
Yanfly.BEC.Window_BattleLog_displayChangedBuffs.call(this, target);
};
Window_BattleLog.prototype.popupDamage = function(target) {
};
Yanfly.BEC.Window_BattleLog_showEnemyAttackAnimation =
Window_BattleLog.prototype.showEnemyAttackAnimation;
Window_BattleLog.prototype.showEnemyAttackAnimation =
function(subject, targets) {
if ($gameSystem.isSideView()) {
this.showNormalAnimation(targets, subject.attackAnimationId(), false);
} else {
this.showNormalAnimation(targets, subject.attackAnimationId(), false);
Yanfly.BEC.Window_BattleLog_showEnemyAttackAnimation.call(this, subject,
targets);
}
};
Window_BattleLog.prototype.showActorAtkAniMirror = function(subject, targets) {
if (subject.isActor()) {
this.showNormalAnimation(targets, subject.attackAnimationId1(), true);
this.showNormalAnimation(targets, subject.attackAnimationId2(), false);
} else {
this.showNormalAnimation(targets, subject.attackAnimationId1(), true)
}
};
//=============================================================================
// New Function
//=============================================================================
Yanfly.Util = Yanfly.Util || {};
Yanfly.Util.displayError = function(e, code, message) {
console.log(message);
console.log(code || 'NON-EXISTENT');
console.error(e);
if (Utils.isNwjs() && Utils.isOptionValid('test')) {
if (!require('nw.gui').Window.get().isDevToolsOpen()) {
require('nw.gui').Window.get().showDevTools();
}
}
};
if (!Yanfly.Util.toGroup) {
Yanfly.Util.toGroup = function(inVal) {
return inVal;
}
};
Yanfly.Util.getRange = function(n, m) {
var result = [];
for (var i = n; i <= m; ++i) result.push(i);
return result;
};
Yanfly.Util.onlyUnique = function(value, index, self) {
return self.indexOf(value) === index;
};
//=============================================================================
// End of File
//=============================================================================