103 lines
3.9 KiB
JavaScript
103 lines
3.9 KiB
JavaScript
/*:
|
||
* @target MZ
|
||
* @plugindesc [v1.2] 戦闘中の立ち絵表情変更プラグイン(スプライト版)
|
||
* @author ChatGPT
|
||
*
|
||
* @help BattleSpriteExpression.js
|
||
*
|
||
* 【機能】
|
||
* 1. 戦闘開始時・ターン開始時に現在の表情スプライトを記録。
|
||
* 2. 敵から攻撃を受けた瞬間、`battle00_common/face_02damage.png` に変更。
|
||
* 3. 1秒後に元の表情(ターン開始時のスプライト)に戻す。
|
||
*
|
||
* 【使い方】
|
||
* - プラグインを有効化するだけで動作します。
|
||
* - 画像のファイル名を適宜変更してください。
|
||
*
|
||
* 【注意】
|
||
* - 立ち絵画像は `img/battle00_common/` フォルダに配置してください。
|
||
* - **スプライトを戦闘画面のレイヤーに追加する形に修正しました。**
|
||
* - 表示位置は **X = 584, Y = 0** に固定されています。
|
||
*/
|
||
|
||
(() => {
|
||
"use strict";
|
||
|
||
const SPRITE_X = 584; // ★ X座標
|
||
const SPRITE_Y = 0; // ★ Y座標
|
||
let currentExpressionSprite = null; // 現在の表情スプライトを記録
|
||
let damageSprite = null; // ダメージ時のスプライト
|
||
|
||
/**
|
||
* @function saveCurrentExpression
|
||
* 現在の表情スプライトを記録
|
||
*/
|
||
const saveCurrentExpression = () => {
|
||
if (!SceneManager._scene._spriteset) return; // スプライトセットがない場合は中断
|
||
|
||
// 以前のスプライトを削除
|
||
if (currentExpressionSprite) {
|
||
SceneManager._scene._spriteset.removeChild(currentExpressionSprite);
|
||
}
|
||
|
||
// 新しいスプライトを作成
|
||
currentExpressionSprite = new Sprite();
|
||
currentExpressionSprite.bitmap = ImageManager.loadBitmap("img/battle00_common/", "face_02normal"); // ★ 通常表情
|
||
currentExpressionSprite.x = SPRITE_X;
|
||
currentExpressionSprite.y = SPRITE_Y;
|
||
SceneManager._scene._spriteset.addChild(currentExpressionSprite);
|
||
};
|
||
|
||
/**
|
||
* @function changeExpressionOnDamage
|
||
* ダメージを受けた瞬間に指定の表情スプライトへ変更
|
||
*/
|
||
const changeExpressionOnDamage = () => {
|
||
if (!SceneManager._scene._spriteset) return; // スプライトセットがない場合は中断
|
||
|
||
// 以前のダメージスプライトを削除
|
||
if (damageSprite) {
|
||
SceneManager._scene._spriteset.removeChild(damageSprite);
|
||
}
|
||
|
||
// ダメージ時のスプライトを作成
|
||
damageSprite = new Sprite();
|
||
damageSprite.bitmap = ImageManager.loadBitmap("img/battle00_common/", "face_02damage"); // ★ ダメージ表情
|
||
damageSprite.x = SPRITE_X;
|
||
damageSprite.y = SPRITE_Y;
|
||
SceneManager._scene._spriteset.addChild(damageSprite);
|
||
|
||
// 1秒後に元の表情に戻す
|
||
setTimeout(() => {
|
||
if (!SceneManager._scene._spriteset) return;
|
||
if (damageSprite) {
|
||
SceneManager._scene._spriteset.removeChild(damageSprite);
|
||
damageSprite = null;
|
||
}
|
||
if (currentExpressionSprite) {
|
||
SceneManager._scene._spriteset.addChild(currentExpressionSprite);
|
||
}
|
||
}, 1000);
|
||
};
|
||
|
||
/**
|
||
* @override BattleManager.startTurn
|
||
* ターン開始時に現在の表情を記録
|
||
*/
|
||
const _BattleManager_startTurn = BattleManager.startTurn;
|
||
BattleManager.startTurn = function() {
|
||
_BattleManager_startTurn.call(this);
|
||
saveCurrentExpression();
|
||
};
|
||
|
||
/**
|
||
* @override Game_Battler.prototype.performDamage
|
||
* ダメージを受けた瞬間に表情を変更
|
||
*/
|
||
const _Game_Battler_performDamage = Game_Battler.prototype.performDamage;
|
||
Game_Battler.prototype.performDamage = function() {
|
||
_Game_Battler_performDamage.call(this);
|
||
changeExpressionOnDamage();
|
||
};
|
||
|
||
})();
|