magical-girls-runa-and-nanami/js/plugins/CGPT_Battleface.js
2026-02-28 12:33:13 -06:00

103 lines
3.9 KiB
JavaScript
Raw Permalink 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.

/*:
* @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();
};
})();