alter-egoism/js/plugins/EnemyGauge.js
2025-11-01 14:17:42 -05:00

892 lines
28 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// EnemyGauge.js Ver.3.0.3
/*:
* @target MZ
* @plugindesc Displays the enemy's HP gauge at specific times.
* @author あわやまたな (Awaya_Matana)
* @url https://awaya3ji.seesaa.net/article/486325593.html
* @help Ver.3.0.3
* By default, the gauge is displayed when an enemy is selected,
* when HP changes, when damage occurs, and when a state is added.
*
* @param chaseEnemy
* @text Chase Enemy
* @desc Chasing enemies moving from their home position.
* @type boolean
* @default false
*
* @param gaugeStyle
* @text Gauge Style
* @desc Change the display style.
* @type select
* @default default1
* @option Default
* @value default1
* @option Also Battle Start
* @value default2
* @option Always
* @value always
*
* @param displayTiming
* @text Display Timing
* @desc Display timing of gauges and icons.
* This parameter is valid only if Icon Format is "synch".
* @type select
* @default affectedStatus
* @option When Damaged
* @value damaged
* @option When Affected Status
* @value affectedStatus
*
* @param iconStyle
* @text Icon Style
* @desc Displays state icons above gauges.
* @type select
* @default sync
* @option MZ Default
* @value false
* @option Sync to Gauge
* @value sync
* @option Always
* @value always
*
* @param gaugePosition
* @text Gauge Position
* @desc Specifies the origin.
* @type select
* @default center
* @option Center of Enemy
* @value center
* @option Bottom of Enemy
* @value bottom
* @option Top of Enemy
* @value top
*
* @param gaugeOffsetY
* @text Gauge Offset Y
* @desc Shift the position by the specified number.
* @type number
* @min -999999
* @default 80
*
* @param iconOffsetY
* @text Icon Offset Y
* @desc Offsets the icon from the gauge by the specified number.
* @type number
* @min -999999
* @default 0
*
* @param gaugeWidth
* @text Gauge Width
* @type number
* @default 128
*
* @param gaugeHeight
* @text Gauge Height
* @type number
* @default 8
*
* @param lineWidth
* @text Line Width
* @desc The thickness of the line used for the gauge.
* Depending on the height of the gauge, it will not draw correctly.
* @type number
* @default 1
*
* @param waitDuration
* @text Wait Duration
* @desc It is the time from when the gauge moves until it disappears.
* @type number
* @default 128
*
* @param fadeDuration
* @text Fade Duration
* @desc Specifies how long the fadeout should occupy the wait duration.
* @type number
* @default 10
*
* @param smoothness
* @text Smoothness
* @desc Smoothness of movement of the gauge.
* @type number
* @default 15
*
* @param damagePosition
* @text Damage Position
* @desc Specify the reference point of the display position.
* @type select
* @default center
* @option Center of Enemy
* @value center
* @option Bottom of Enemy
* @value bottom
* @option Top of Enemy
* @value top
*
* @param damageOffsetY
* @text Damage OffsetY
* @desc Shifts the position of the damage popup by the specified number.
* @type number
* @min -999999
* @default 0
*
*/
/*:ja
* @target MZ
* @plugindesc 特定タイミングでエネミーのHPゲージを表示します。(Ver.3.0.2)
* @author あわやまたな (Awaya_Matana)
* @url https://awaya3ji.seesaa.net/article/486325593.html
* @help 標準では敵の選択時、HP変化時、ダメージポップアップ時、ステート付与時に
* ゲージを表示します。
*
* コアスクリプトの一部を使用している為、このプラグインの使用には
* ツクールMZのユーザー登録が必要です。
*
* [更新履歴]
* 2022/04/06Ver.1.0.0 公開。
* 2022/05/26Ver.2.0.0 アイコン表示機能追加。パラメータ追加。
* 2022/06/03Ver.2.0.1 バグ修正。
* 2022/06/07Ver.3.0.0 処理の見直し。エネミーに追従するかどうかを設定可能に。
* 2022/06/07Ver.3.0.1 表示タイミングを微調整可能に。
* 2022/06/12Ver.3.0.2 表示タイミングを修正。
* 2022/07/28Ver.3.0.3 不具合修正。線の太さを変更するパラメータを追加。
*
* @param chaseEnemy
* @text エネミーに追従
* @desc エネミーが定位置から動いたときに追従します。
* @type boolean
* @default false
*
* @param gaugeStyle
* @text ゲージ形式
* @desc 表示形式を変更します。
* @type select
* @default default1
* @option 標準
* @value default1
* @option 戦闘開始時にも表示
* @value default2
* @option 常に表示
* @value always
*
* @param displayTiming
* @text 表示タイミング
* @desc ゲージとアイコンの表示タイミングです。
* アイコン形式がsyncの時のみ有効なパラメータです。
* @type select
* @default affectedStatus
* @option 被ダメージ時
* @value damaged
* @option ステート影響時
* @value affectedStatus
*
* @param iconStyle
* @text アイコン形式
* @desc ステートアイコンをゲージの上に表示します。
* @type select
* @default sync
* @option MZ標準
* @value false
* @option ゲージと同期
* @value sync
* @option 常に表示
* @value always
*
* @param gaugePosition
* @text ゲージ位置
* @desc 表示位置の基準点を指定します。
* @type select
* @default center
* @option エネミーの中央
* @value center
* @option エネミーの足元
* @value bottom
* @option エネミーの頭上
* @value top
*
* @param gaugeOffsetY
* @text ゲージオフセットY
* @desc 指定した数だけ位置をずらします。
* @type number
* @min -999999
* @default 80
*
* @param iconOffsetY
* @text アイコンオフセットY
* @desc 指定した数だけゲージからのアイコンの位置をずらします。
* @type number
* @min -999999
* @default 0
*
* @param gaugeWidth
* @text ゲージ横幅
* @desc ゲージの横幅です。
* @type number
* @default 128
*
* @param gaugeHeight
* @text ゲージ高さ
* @desc ゲージの高さです。
* @type number
* @default 8
*
* @param lineWidth
* @text 線の太さ
* @desc ゲージに使用される線の太さです。
* ゲージの高さによっては正しく描画されません。
* @type number
* @default 1
*
* @param waitDuration
* @text ウェイト時間
* @desc ゲージ動作後、消えるまでの時間です。
* @type number
* @default 128
*
* @param fadeDuration
* @text フェード時間
* @desc ウェイト時間のうち、フェードアウトに占める時間を指定します。
* @type number
* @default 10
*
* @param smoothness
* @text 滑らかさ
* @desc ゲージの動きの滑らかさ。
* @type number
* @default 15
*
* @param damagePosition
* @text ダメージ位置
* @desc 表示位置の基準点を指定します。
* @type select
* @default center
* @option エネミーの中央
* @value center
* @option エネミーの足元
* @value bottom
* @option エネミーの頭上
* @value top
*
* @param damageOffsetY
* @text ダメージオフセットY
* @desc 指定した数だけダメージポップアップの位置をずらします。
* @type number
* @min -999999
* @default 0
*
*/
"use strict";
{
const pluginName = document.currentScript.src.match(/^.*\/(.*).js$/)[1];
const parameter = PluginManager.parameters(pluginName);
const chaseEnemy = parameter["chaseEnemy"] === "true";
const gaugeStyle = parameter["gaugeStyle"];
const displayTiming = parameter["displayTiming"];
const iconStyle = parameter["iconStyle"] === "false" ? false : parameter["iconStyle"];
const gaugePosition = parameter["gaugePosition"];
const gaugeOffsetY = Number(parameter["gaugeOffsetY"]);
const iconOffsetY = Number(parameter["iconOffsetY"]);
const gaugeWidth = Number(parameter["gaugeWidth"]);
const gaugeHeight = Number(parameter["gaugeHeight"]);
const lineWidth = Number(parameter["lineWidth"] || 1);
const waitDuration = Number(parameter["waitDuration"]);
const fadeDuration = Number(parameter["fadeDuration"]);
const smoothness = Number(parameter["smoothness"]);
const damagePosition = parameter["damagePosition"];
const damageOffsetY = Number(parameter["damageOffsetY"]);
//-----------------------------------------------------------------------------
// Game_Temp
const _Game_Temp_initialize = Game_Temp.prototype.initialize;
Game_Temp.prototype.initialize = function () {
_Game_Temp_initialize.call(this);
this._battleEnemyGaugeQueue = [];
};
Game_Temp.prototype.requestBattleEnemyGauge = function (target) {
const request = { target: target };
this._battleEnemyGaugeQueue.push(request);
};
Game_Temp.prototype.retrieveBattleEnemyGauge = function () {
return this._battleEnemyGaugeQueue.shift();
};
//-----------------------------------------------------------------------------
// Spriteset_Battle
const _Spriteset_Battle_createLowerLayer = Spriteset_Battle.prototype.createLowerLayer;
Spriteset_Battle.prototype.createLowerLayer = function () {
_Spriteset_Battle_createLowerLayer.call(this);
this.createEnemyGaugeSprite();
};
Spriteset_Battle.prototype.createEnemyGaugeSprite = function () {
const enemySprites = this._enemySprites;
this._enemyGaugeSprites = [];
for (const enemySprite of enemySprites) {
const gauge = new Sprite_BattleEnemyStatus(enemySprite);
gauge.setup(enemySprite._battler);
enemySprite._statusSprite = gauge;
this._enemyGaugeSprites.push(gauge);
this._battleField.addChild(gauge);
}
};
const _Spriteset_Battle_update = Spriteset_Battle.prototype.update;
Spriteset_Battle.prototype.update = function () {
_Spriteset_Battle_update.call(this);
this.updateEnemyGauges();
};
Spriteset_Battle.prototype.updateEnemyGauges = function () {
this.processEnemyGaugeRequests();
};
Spriteset_Battle.prototype.processEnemyGaugeRequests = function () {
for (;;) {
const request = $gameTemp.retrieveBattleEnemyGauge();
if (request) {
this.visibleEnemyGauge(request);
} else {
break;
}
}
};
Spriteset_Battle.prototype.visibleEnemyGauge = function (request) {
const sprite = this._enemyGaugeSprites.find((sprite) => sprite._battlerObj === request.target);
if (sprite) {
sprite.requestVisible();
}
};
//-----------------------------------------------------------------------------
// Sprite_BattleEnemyStatus
function Sprite_BattleEnemyStatus() {
this.initialize(...arguments);
}
Sprite_BattleEnemyStatus.prototype = Object.create(Sprite.prototype);
Sprite_BattleEnemyStatus.prototype.constructor = Sprite_BattleEnemyGauge;
const _Sprite_Gauge_initialize = Sprite_Gauge.prototype.initialize;
Sprite_BattleEnemyStatus.prototype.initialize = function (target) {
Sprite.prototype.initialize.call(this);
this.initMembers(target);
this.createHpGaugeSprite();
if (iconStyle) {
this.createBuffIconSprite();
this.createStateIconSprite();
}
var sp = new Sprite();
sp.bitmap = new Bitmap(180, 32);
sp.bitmap.fontSize = 20;
sp.bitmap.drawText(target._battler.originalName(), 0, 0, 180, 32, "left");
sp.y = -32;
sp.x = -62;
this._CBR_name_sprite = sp;
this.addChild(sp);
};
Sprite_BattleEnemyStatus.prototype.initMembers = function (target) {
this._battlerObj = null;
this._target = target;
this._waitDuration = 0;
this._died = false;
this._lastCollapseType = null;
this._requestVisible = false;
this._result = null;
};
Sprite_BattleEnemyStatus.prototype.setOpacity = function (opacity) {
this.opacity = opacity;
this._CBR_name_sprite.opacity = opacity;
};
if (iconStyle === "always") {
Sprite_BattleEnemyStatus.prototype.setOpacity = function (opacity) {
this._hpGaugeSprite.opacity = opacity;
this._CBR_name_sprite.opacity = opacity;
};
}
Sprite_BattleEnemyStatus.prototype.gaugeWidth = function () {
return this._hpGaugeSprite.bitmapWidth();
};
Sprite_BattleEnemyStatus.prototype.gaugeHeight = function () {
return this._hpGaugeSprite.gaugeHeight();
};
Sprite_BattleEnemyStatus.prototype.createHpGaugeSprite = function () {
const sprite = new Sprite_BattleEnemyGauge();
this._hpGaugeSprite = sprite;
this.addChild(sprite);
sprite.anchor.x = 0.5;
sprite.anchor.y = 0.5;
};
Sprite_BattleEnemyStatus.prototype.createBuffIconSprite = function () {
const sprite = new Sprite_BattleEnemyIcon();
this._buffIconSprite = sprite;
this.addChild(sprite);
sprite.anchor.x = 0.5;
sprite.anchor.y = 0.5;
sprite.x = Math.floor((this.gaugeWidth() - ImageManager.iconWidth) / 2) - 58;
sprite.y = -Math.floor((ImageManager.iconHeight + this.gaugeHeight()) / 2) + iconOffsetY - 34;
};
Sprite_BattleEnemyStatus.prototype.createStateIconSprite = function () {
const sprite = new Sprite_BattleEnemyIcon();
this._stateIconSprite = sprite;
this.addChild(sprite);
sprite.anchor.x = 0.5;
sprite.anchor.y = 0.5;
sprite.x = Math.floor((this.gaugeWidth() - ImageManager.iconWidth) / 2) - 94;
sprite.y = -Math.floor((ImageManager.iconHeight + this.gaugeHeight()) / 2) + iconOffsetY - 34;
};
Sprite_BattleEnemyStatus.prototype.setup = function (battler) {
this._battlerObj = battler;
this._hpGaugeSprite.setup(battler, "hp");
if (iconStyle) {
this._buffIconSprite.setup(battler, "buff");
this._stateIconSprite.setup(battler, "state");
}
};
Sprite_BattleEnemyStatus.prototype.startVisible = function () {
this.setOpacity(255);
if (this.canAddWait()) {
this._waitDuration = waitDuration;
} else if (this.isEnemySelecting()) {
this._waitDuration = 0;
}
this._requestVisible = false;
};
Sprite_BattleEnemyStatus.prototype.requestVisible = function () {
this._requestVisible = true;
};
Sprite_BattleEnemyStatus.prototype.endVisible = function () {
this._waitDuration = 0;
this.setOpacity(0);
};
Sprite_BattleEnemyStatus.prototype.update = function () {
Sprite.prototype.update.call(this);
this.updateOpacity();
if (this.canMove()) {
this.updatePosition();
}
this.updateIconSprites();
};
Sprite_BattleEnemyStatus.prototype.canMove = function () {
return this._battlerObj.isAlive();
};
Sprite_BattleEnemyStatus.prototype.updateIconSprites = function () {};
if (iconStyle) {
Sprite_BattleEnemyStatus.prototype.updateIconSprites = function () {
if (this._battlerObj.stateIcons().length > 0) {
this._buffIconSprite.x = Math.floor((this.gaugeWidth() - ImageManager.iconWidth) / 2) - ImageManager.iconWidth;
} else {
this._buffIconSprite.x = this._stateIconSprite.x;
}
let opacity = 255;
if (SceneManager._scene._enemyWindow.active && !this._battlerObj.isSelected()) {
opacity = 128;
}
this._buffIconSprite.opacity = this._stateIconSprite.opacity = opacity;
};
}
Sprite_BattleEnemyStatus.prototype.updatePosition = function () {
const sprite = this._target;
this.x = sprite._homeX;
this.y = sprite._homeY;
if (chaseEnemy) {
this.x += sprite._offsetX;
this.y += sprite._offsetY;
}
const bitmapHeight = Math.floor(sprite.mainSprite().height / 2);
this.y -= bitmapHeight;
this.y += gaugeOffsetY;
};
if (gaugePosition === "bottom") {
Sprite_BattleEnemyStatus.prototype.updatePosition = function () {
const sprite = this._target;
this.x = sprite._homeX;
this.y = sprite._homeY;
if (chaseEnemy) {
this.x += sprite._offsetX;
this.y += sprite._offsetY;
}
this.y += gaugeOffsetY;
};
} else if (gaugePosition === "top") {
Sprite_BattleEnemyStatus.prototype.updatePosition = function () {
const sprite = this._target;
this.x = sprite._homeX;
this.y = sprite._homeY;
if (chaseEnemy) {
this.x += sprite._offsetX;
this.y += sprite._offsetY;
}
const bitmapHeight = sprite.mainSprite().height;
this.y -= bitmapHeight;
this.y += gaugeOffsetY;
};
}
const collapseSet = new Set(["collapse", "bossCollapse", "instantCollapse"]);
Sprite_BattleEnemyStatus.prototype.updateOpacity = function () {
const collapseType = (collapseSet.has(this._target._effectType) && this._target._effectType) || null;
if (this.canVisible()) {
this.startVisible();
} else if (this._waitDuration > 0) {
this._waitDuration--;
this.setOpacity(255);
if (this.isEnemyCollapsed(collapseType) && this._waitDuration > fadeDuration) {
this._waitDuration = fadeDuration;
}
if (this._waitDuration <= fadeDuration) {
const opacity = (255 * this._waitDuration) / fadeDuration;
this.setOpacity(opacity);
}
} else {
this.endVisible();
}
this._lastCollapseType = collapseType;
};
Sprite_BattleEnemyStatus.prototype.canAddWait = function () {
return this._requestVisible;
};
Sprite_BattleEnemyStatus.prototype.canVisible = function () {
if (this.isEnemyDamaging()) {
this._requestVisible = true;
return true;
} else if (this.isEnemySelecting()) {
return true;
}
return false;
};
if (gaugeStyle === "always") {
Sprite_BattleEnemyStatus.prototype.canAddWait = function () {
return true;
};
Sprite_BattleEnemyStatus.prototype.canVisible = function () {
return this._battlerObj.isAlive();
};
}
Sprite_BattleEnemyStatus.prototype.isEnemyCollapsed = function (collapseType) {
return this._battlerObj.isDead() && this._lastCollapseType && this._lastCollapseType !== collapseType;
};
Sprite_BattleEnemyStatus.prototype.isEnemyDamaging = function () {
return this._requestVisible || (this._battlerObj.isAlive() && this._hpGaugeSprite.isGaugeMoving());
};
Sprite_BattleEnemyStatus.prototype.isEnemySelecting = function () {
return BattleManager.isInputting() && this._battlerObj.isSelected();
};
//-----------------------------------------------------------------------------
// Sprite_BattleEnemyGauge
function Sprite_BattleEnemyGauge() {
this.initialize(...arguments);
}
Sprite_BattleEnemyGauge.prototype = Object.create(Sprite_Gauge.prototype);
Sprite_BattleEnemyGauge.prototype.constructor = Sprite_BattleEnemyGauge;
const _Sprite_Gauge_initMembers = Sprite_Gauge.prototype.initMembers;
Sprite_BattleEnemyGauge.prototype.initMembers = function () {
_Sprite_Gauge_initMembers.call(this);
this._oneBreak = gaugeStyle === "default1";
};
Sprite_BattleEnemyGauge.prototype.bitmapWidth = function () {
return gaugeWidth;
};
Sprite_BattleEnemyGauge.prototype.bitmapHeight = function () {
return this.gaugeHeight();
};
Sprite_BattleEnemyGauge.prototype.textHeight = function () {
return this.gaugeHeight();
};
Sprite_BattleEnemyGauge.prototype.gaugeHeight = function () {
return gaugeHeight;
};
Sprite_BattleEnemyGauge.prototype.gaugeX = function () {
return 0;
};
Sprite_BattleEnemyGauge.prototype.isGaugeMoving = function () {
return !!this._duration;
};
Sprite_BattleEnemyGauge.prototype.smoothness = function () {
if (this._oneBreak) {
this._oneBreak = false;
return 1;
}
return smoothness;
};
Sprite_BattleEnemyGauge.prototype.drawGaugeRect = function (x, y, width, height) {
const rate = this.gaugeRate();
const fillW = Math.floor((width - lineWidth * 4) * rate);
const fillH = height - lineWidth * 4;
const color0 = this.gaugeBackColor();
const color1 = this.gaugeColor1();
const color2 = this.gaugeColor2();
const color3 = ColorManager.normalColor();
this.bitmap.fillRect(x, y, width, height, color3);
this.bitmap.fillRect(x + lineWidth, y + lineWidth, width - lineWidth * 2, height - lineWidth * 2, color0);
this.bitmap.gradientFillRect(x + lineWidth * 2, y + lineWidth * 2, fillW, fillH, color1, color2);
};
Sprite_BattleEnemyGauge.prototype.drawLabel = function () {};
Sprite_BattleEnemyGauge.prototype.drawValue = function () {};
//-----------------------------------------------------------------------------
// Sprite_Enemy
const _Sprite_Enemy_initMembers = Sprite_Enemy.prototype.initMembers;
Sprite_Enemy.prototype.initMembers = function () {
_Sprite_Enemy_initMembers.call(this);
this._statusSprite = null;
};
const _Sprite_Enemy_setBattler = Sprite_Enemy.prototype.setBattler;
Sprite_Enemy.prototype.setBattler = function (battler) {
_Sprite_Enemy_setBattler.call(this, battler);
if (this._statusSprite) {
this._statusSprite.setup(battler);
}
};
const _Sprite_Enemy_createStateIconSprite = Sprite_Enemy.prototype.createStateIconSprite;
Sprite_Enemy.prototype.createStateIconSprite = function () {
_Sprite_Enemy_createStateIconSprite.call(this);
if (iconStyle) this._stateIconSprite.hide();
};
Sprite_Enemy.prototype.damageOffsetY = function () {
const offsetY = damageOffsetY;
return Sprite_Battler.prototype.damageOffsetY.call(this) + offsetY;
};
if (damagePosition === "top") {
Sprite_Enemy.prototype.damageOffsetY = function () {
const fontSize = Sprite_Damage.prototype.fontSize();
const bitmapHeight = this.mainSprite().height;
const offsetY = -bitmapHeight + fontSize + damageOffsetY;
return Sprite_Battler.prototype.damageOffsetY.call(this) + offsetY;
};
} else if (damagePosition === "center") {
Sprite_Enemy.prototype.damageOffsetY = function () {
const fontSize = Sprite_Damage.prototype.fontSize();
const bitmapHeight = this.mainSprite().height;
const offsetY = -(bitmapHeight - fontSize) / 2 + damageOffsetY;
return Sprite_Battler.prototype.damageOffsetY.call(this) + offsetY;
};
}
//-----------------------------------------------------------------------------
// Sprite_BattleEnemyIcon
function Sprite_BattleEnemyIcon() {
this.initialize(...arguments);
}
Sprite_BattleEnemyIcon.prototype = Object.create(Sprite_StateIcon.prototype);
Sprite_BattleEnemyIcon.prototype.constructor = Sprite_BattleEnemyIcon;
Sprite_BattleEnemyIcon.prototype.initMembers = function () {
Sprite_StateIcon.prototype.initMembers.call(this);
this._statusType = "";
};
Sprite_BattleEnemyIcon.prototype.setup = function (battler, statusType) {
Sprite_StateIcon.prototype.setup.call(this, battler);
this._statusType = statusType;
};
Sprite_BattleEnemyIcon.prototype.update = function () {
Sprite_StateIcon.prototype.update.call(this);
this.visible = this.canVisible();
};
Sprite_BattleEnemyIcon.prototype.canVisible = function () {
return this._iconIndex > 0;
};
Sprite_BattleEnemyIcon.prototype.updateIcon = function () {
const icons = [];
if (this.shouldDisplay()) {
icons.push(...this.icons());
}
if (icons.length > 0) {
this._animationIndex++;
if (this._animationIndex >= icons.length) {
this._animationIndex = 0;
}
this._iconIndex = icons[this._animationIndex];
} else {
this._animationIndex = 0;
this._iconIndex = 0;
}
};
Sprite_BattleEnemyIcon.prototype.icons = function () {
switch (this._statusType) {
case "buff":
return this._battler.buffIcons();
case "state":
return this._battler.stateIcons();
default:
return this._battler.allIcons();
}
};
//-----------------------------------------------------------------------------
// Window_BattleLog
const _Window_BattleLog_popupDamage = Window_BattleLog.prototype.popupDamage;
Window_BattleLog.prototype.popupDamage = function (target) {
_Window_BattleLog_popupDamage.call(this, target);
if (target.isEnemy() && target.result().hpEffect) {
$gameTemp.requestBattleEnemyGauge(target);
}
};
if (iconStyle === "sync" && displayTiming === "affectedStatus") {
const _Window_BattleLog_displayAffectedStatus = Window_BattleLog.prototype.displayAffectedStatus;
Window_BattleLog.prototype.displayAffectedStatus = function (target) {
_Window_BattleLog_displayAffectedStatus.call(this, target);
if (target.isEnemy() && target.result().hasEffectIcon) {
$gameTemp.requestBattleEnemyGauge(target);
}
};
}
//-----------------------------------------------------------------------------
// Game_Enemy
if (iconStyle === "sync" && displayTiming === "affectedStatus") {
const _Game_Enemy_addState = Game_Enemy.prototype.addState;
Game_Enemy.prototype.addState = function (stateId) {
const affected = this.isStateAddable(stateId);
const iconIndex = $dataStates[stateId].iconIndex || 0;
_Game_Enemy_addState.call(this, stateId);
if (affected && iconIndex > 0) {
$gameTemp.requestBattleEnemyGauge(this);
}
};
const _Game_Enemy_removeState = Game_Enemy.prototype.removeState;
Game_Enemy.prototype.removeState = function (stateId) {
const affected = this.isStateAffected(stateId);
const iconIndex = $dataStates[stateId].iconIndex || 0;
_Game_Enemy_removeState.call(this, stateId);
if (affected && iconIndex > 0) {
$gameTemp.requestBattleEnemyGauge(this);
}
};
const _Game_Enemy_addBuff = Game_Enemy.prototype.addBuff;
Game_Enemy.prototype.addBuff = function (paramId, turns) {
const affected = this.isAlive();
const iconIndex = this.buffIconIndex(this._buffs[paramId], paramId);
_Game_Enemy_addBuff.call(this, paramId, turns);
if (affected && iconIndex > 0) {
$gameTemp.requestBattleEnemyGauge(this);
}
};
const _Game_Enemy_addDebuff = Game_Enemy.prototype.addDebuff;
Game_Enemy.prototype.addDebuff = function (paramId, turns) {
const affected = this.isAlive();
const iconIndex = this.buffIconIndex(this._buffs[paramId], paramId);
_Game_Enemy_addDebuff.call(this, paramId, turns);
if (affected && iconIndex > 0) {
$gameTemp.requestBattleEnemyGauge(this);
}
};
const _Game_Enemy_removeBuff = Game_Enemy.prototype.removeBuff;
Game_Enemy.prototype.removeBuff = function (paramId) {
const affected = this.isAlive() && this.isBuffOrDebuffAffected(paramId);
const iconIndex = this.buffIconIndex(this._buffs[paramId], paramId);
_Game_Enemy_removeBuff.call(this, paramId);
if (affected && iconIndex > 0) {
$gameTemp.requestBattleEnemyGauge(this);
}
};
}
//-----------------------------------------------------------------------------
// Game_Action
Game_Action.prototype.hasEffectIcon = function (target) {
return this.hasStateIcon(target) || this.hasBuffIcon(target);
};
Game_Action.prototype.hasStateIcon = function (target) {
const result = target.result();
const stateIcons = result.addedStates
.concat(result.removedStates)
.map((paramId) => $dataStates[paramId].iconIndex)
.filter((iconIndex) => iconIndex > 0);
return stateIcons.length > 0;
};
Game_Action.prototype.hasBuffIcon = function (target) {
const result = target.result();
const buffIcons = result.addedBuffs
.concat(result.addedDebuffs, result.removedBuffs)
.map((paramId) => Game_BattlerBase.prototype.buffIconIndex(target._buffs[paramId], paramId))
.filter((iconIndex) => iconIndex > 0);
return buffIcons.length > 0;
};
const _Game_Action_apply = Game_Action.prototype.apply;
Game_Action.prototype.apply = function (target) {
_Game_Action_apply.call(this, target);
const result = target.result();
result.hpEffect = this.isHpEffect();
result.hasEffectIcon = iconStyle === "sync" && displayTiming === "affectedStatus" && this.hasEffectIcon(target);
};
//-----------------------------------------------------------------------------
// Game_ActionResult
const _Game_ActionResult_clear = Game_ActionResult.prototype.clear;
Game_ActionResult.prototype.clear = function () {
_Game_ActionResult_clear.call(this);
this.hpEffect = false;
this.hasEffectIcon = false;
};
}