239 lines
No EOL
8.1 KiB
JavaScript
239 lines
No EOL
8.1 KiB
JavaScript
/*:-----------------------------------------------------------------------------------
|
||
* NUUN_BattlerOverlayBase.js
|
||
*
|
||
* Copyright (C) 2022 NUUN
|
||
* This software is released under the MIT License.
|
||
* http://opensource.org/licenses/mit-license.php
|
||
* -------------------------------------------------------------------------------------
|
||
*/
|
||
/*:
|
||
* @target MZ
|
||
* @plugindesc バトラーオーバーレイベース
|
||
* @author NUUN
|
||
* @version 1.0.7
|
||
* @base NUUN_Base
|
||
* @orderAfter NUUN_Base
|
||
*
|
||
* @help
|
||
* モンスター、サイドビューアクター上に画像を表示させるベースプラグイン。
|
||
* モンスター、アクターのスプライトの子にスプライトを追加してしまうとゲージ、ステートアイコン等にまで影響を及ば差ないようにします。
|
||
* (バトラーグラフィック表示拡張プラグインでバトラーの色調を変化させるとバトラーとともにゲージ、ステートアイコンの変色を防ぐ目的等)
|
||
*
|
||
* 木星ペンギン氏の疑似3Dバトル、蒼竜氏のSVアクター適用エネミーと併用する場合、このプラグインをこれらのプラグインより
|
||
* 下に配置する必要があります。
|
||
*
|
||
* 利用規約
|
||
* このプラグインはMITライセンスで配布しています。
|
||
*
|
||
* 更新履歴
|
||
* 2024/3/4 Ver.1.0.7
|
||
* Ver.1.0.7で修正した処理方法の変更。
|
||
* 2024/3/2 Ver.1.0.6
|
||
* 出現前のモンスターにゲージ等が表示されてしまう問題を修正。
|
||
* 2023/8/24 Ver.1.0.5
|
||
* 一部のプラグインと併用するとエラーが出る問題を修正。
|
||
* 2023/7/15 Ver.1.0.4
|
||
* バトラー画像と同期させるときの座標のモードを指定できる機能を追加。
|
||
* 2023/6/2 Ver.1.0.3
|
||
* 処理の修正。
|
||
* 2023/5/28 Ver.1.0.2
|
||
* SVアクターのゲージ表示に関する処理の追加。
|
||
* 2022/10/11 Ver.1.0.1
|
||
* 微修正。
|
||
* 2022/5/10 Ver.1.0.0
|
||
* 初版
|
||
*
|
||
*
|
||
* @param ConflictScale
|
||
* @desc 敵画像の上設定時の拡大率の考慮
|
||
* @text 拡大率の考慮
|
||
* @type select
|
||
* @option 元のサイズ基準
|
||
* @value 'Default'
|
||
* @option 画像のサイズ基準
|
||
* @value 'Img'
|
||
* @default 'Img'
|
||
*
|
||
* @param CoordinateMode
|
||
* @desc 座標の計算モード。
|
||
* @text 座標計算モード
|
||
* @type select
|
||
* @option 元の座標値
|
||
* @value 'Default'
|
||
* @option 小数切り捨て
|
||
* @value 'Floor'
|
||
* @default 'Default'
|
||
*
|
||
*
|
||
*/
|
||
var Imported = Imported || {};
|
||
Imported.NUUN_BattlerOverlayBase = true;
|
||
|
||
(() => {
|
||
const parameters = PluginManager.parameters('NUUN_BattlerOverlayBase');
|
||
const ConflictScale = eval(parameters['ConflictScale']) || 'Img';
|
||
const CoordinateMode = eval(parameters['CoordinateMode']) || 'Img';
|
||
|
||
const _Spriteset_Battle_createLowerLayer = Spriteset_Battle.prototype.createLowerLayer;
|
||
Spriteset_Battle.prototype.createLowerLayer = function() {
|
||
_Spriteset_Battle_createLowerLayer.call(this);
|
||
this.createBattlerOverlayBase();
|
||
};
|
||
|
||
Spriteset_Battle.prototype.createBattlerOverlayBase = function() {
|
||
this._battlerOverlaySprite = [];
|
||
for (const sprite of this._enemySprites) {
|
||
this.setBattlerOverlaySprite(sprite, 'enemy');
|
||
}
|
||
for (const sprite of this._actorSprites) {
|
||
this.setBattlerOverlaySprite(sprite, 'actor');
|
||
}
|
||
};
|
||
|
||
Spriteset_Battle.prototype.setBattlerOverlaySprite = function(sprite, mode) {
|
||
if (!sprite.battlerOverlay) {
|
||
const baseSprite = new Sprite_BattlerOverlay();
|
||
this._battleField.addChild(baseSprite);
|
||
baseSprite.setup(sprite, mode);
|
||
sprite.battlerOverlay = baseSprite;
|
||
this._battlerOverlaySprite.push(baseSprite);
|
||
}
|
||
};
|
||
|
||
const _Spriteset_Battle_update = Spriteset_Battle.prototype.update;
|
||
Spriteset_Battle.prototype.update = function() {
|
||
_Spriteset_Battle_update.call(this);
|
||
this.updateBattlerOverlay();
|
||
};
|
||
|
||
Spriteset_Battle.prototype.updateBattlerOverlay = function() {
|
||
if ($gameTemp.refreshOverlay) {
|
||
for (const sprite of this._enemySprites) {
|
||
if (!sprite.battlerOverlay) {
|
||
this.setBattlerOverlaySprite(sprite);
|
||
}
|
||
}
|
||
$gameTemp.refreshOverlay = false;
|
||
}
|
||
this.updateBattlerOverlaySprite();
|
||
};
|
||
|
||
Spriteset_Battle.prototype.updateBattlerOverlaySprite = function() {
|
||
for (const sprite of this._battlerOverlaySprite) {
|
||
let spriteData = null;
|
||
if (sprite.battlerMode === 'actor') {
|
||
spriteData = this._actorSprites.some(actor => actor.spriteId === sprite._battlerSpriteId);
|
||
} else {
|
||
spriteData = this._enemySprites.some(enemy => enemy.spriteId === sprite._battlerSpriteId);
|
||
}
|
||
if (!spriteData) {
|
||
this._battleField.removeChild(sprite);
|
||
} else {
|
||
sprite.updatePosition();
|
||
}
|
||
}
|
||
};
|
||
|
||
|
||
function Sprite_BattlerOverlay() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Sprite_BattlerOverlay.prototype = Object.create(Sprite.prototype);
|
||
Sprite_BattlerOverlay.prototype.constructor = Sprite_BattlerOverlay;
|
||
|
||
Sprite_BattlerOverlay.prototype.initialize = function() {
|
||
Sprite.prototype.initialize.call(this);
|
||
this._battlerSprite = null;
|
||
this._battlerSpriteId = -1;
|
||
this.battlerSpriteScale_x = 1.0;
|
||
this.battlerSpriteScale_y = 1.0;
|
||
};
|
||
|
||
Sprite_BattlerOverlay.prototype.setup = function(sprite, mode) {
|
||
this._battlerSprite = sprite;
|
||
this._battlerSpriteId = sprite.spriteId;
|
||
this.battlerMode = mode;
|
||
};
|
||
|
||
Sprite_BattlerOverlay.prototype.setOpacity = function(opacity) {
|
||
this.opacity = opacity;
|
||
};
|
||
|
||
Sprite_BattlerOverlay.prototype.update = function() {
|
||
Sprite.prototype.update.call(this);
|
||
//this.updatePosition();
|
||
};
|
||
|
||
Sprite_BattlerOverlay.prototype.updatePosition = function() {
|
||
this.x = CoordinateMode === 'Floor' ? Math.floor(this._battlerSprite.x) : this._battlerSprite.x;
|
||
this.y = CoordinateMode === 'Floor' ? Math.floor(this._battlerSprite.y) : this._battlerSprite.y;
|
||
this.battlerSpriteScale_x = this._battlerSprite.scale.x;
|
||
this.battlerSpriteScale_y = this._battlerSprite.scale.y;
|
||
};
|
||
|
||
|
||
const _Sprite_Enemy_initMembers = Sprite_Enemy.prototype.initMembers;
|
||
Sprite_Enemy.prototype.initMembers = function() {
|
||
_Sprite_Enemy_initMembers.call(this);
|
||
};
|
||
|
||
const _Sprite_Actor_update = Sprite_Actor.prototype.update;
|
||
Sprite_Actor.prototype.update = function() {
|
||
_Sprite_Actor_update.call(this);
|
||
if (this.battlerOverlay) {
|
||
this.battlerOverlayOpacity();
|
||
} else {
|
||
$gameTemp.refreshOverlay = true;
|
||
}
|
||
};
|
||
|
||
|
||
Sprite_Battler.prototype.battlerOverlayOpacity = function() {
|
||
if (this._effectType && this._effectType !== "blink") {
|
||
this.battlerOverlay.setOpacity(this.opacity);
|
||
}
|
||
};
|
||
|
||
const _Sprite_Enemy_update = Sprite_Enemy.prototype.update;
|
||
Sprite_Enemy.prototype.update = function() {
|
||
_Sprite_Enemy_update.call(this);
|
||
if (this.battlerOverlay) {
|
||
this.battlerOverlayOpacity();
|
||
this.battlerOverlayVisible();
|
||
} else {
|
||
$gameTemp.refreshOverlay = true;
|
||
}
|
||
};
|
||
|
||
Sprite_Enemy.prototype.battlerOverlayVisible = function() {//暫定処置
|
||
this.battlerOverlay.visible = this._battler.isAppeared();
|
||
};
|
||
|
||
Sprite_Battler.prototype.getBattlerOverlayHeight = function() {
|
||
if (this._SVBattlername) {//SoR_EnemySVSprite_MZ
|
||
return Math.floor((this._mainSprite.bitmap.height / 6) * 0.9);
|
||
} else if (this._svBattlerSprite) {//Visu
|
||
return Math.floor(this.height * 0.9);
|
||
} else {
|
||
return Math.floor(((this.bitmap.height) * 0.9));
|
||
}
|
||
};
|
||
|
||
Sprite_Battler.prototype.getBattlerOverlayConflict = function() {
|
||
if (ConflictScale === 'Img' && this.battlerOverlay) {
|
||
return this.battlerOverlay.battlerSpriteScale_y;
|
||
} else {
|
||
return 1.0;
|
||
}
|
||
};
|
||
|
||
Sprite_Actor.prototype.getBattlerOverlayHeight = function() {
|
||
return this.getSVBattlerHeight();
|
||
};
|
||
|
||
Sprite_Actor.prototype.getSVBattlerHeight = function() {
|
||
return this._mainSprite && this._mainSprite.bitmap ? Math.floor((this._mainSprite.bitmap.height / 6) * 0.9) : 0;
|
||
};
|
||
|
||
})(); |