brainwashing-school/js/plugins/TRP_SkillMotion.js
2025-02-25 10:53:19 -06:00

294 lines
9.7 KiB
JavaScript

//=============================================================================
// TRP_SkillMotion.js
//=============================================================================
/*:
* @target MZ
* @author Thirop
* @plugindesc スキル使用時のモーション簡易設定
*
* @help
* 戦闘モーション拡張系のプラグインとは競合可能性大
* 必要に応じてプラグイン設定で機能を制限してご利用ください
*
* 《モーション設定》
* ※設定はいずれもスキルのメモ欄に記述
*
* □アニメーションの表示開始を遅らせる
* <animationDelay:遅延フレーム数>
*
* □スキル使用時のモーション変更
* <motion:モーション名>
* 有効なモーション名
* ・walk
* ・wait
* ・chant
* ・guard
* ・damage
* ・evade
* ・thrust
* ・swing
* ・missile
* ・skill
* ・spell
* ・item
* ・escape
* ・victory
* ・dying
* ・abnormal
* ・sleep
* ・dead
*
* □スキル使用時のモーションを硬直
* <motionD:硬直フレーム数>
* └武器を振ったあとにすぐにポーズを戻したくないときに設定
*
*
*
* @param disableAnimationDelay
* @text アニメ遅延機能の無効化
* @desc 競合で動かないときにOFF/falseにしてアニメーション遅延機能を無効化
* @type boolean
* @default false
*
* @param disableSkillMotion
* @text モーション変更の無効化
* @desc 競合で動かないときにOFF/falseにしてスキルモーション変更機能を無効化
* @type boolean
* @default false
*
* @param disableMotionDuration
* @text モーション硬直の無効化
* @desc 競合で動かないときにOFF/falseにしてモーションの硬直機能を無効化
* @type boolean
* @default false
*/
//=============================================================================
//PRAGMA: englishHeader
//PRAGMA_END: englishHeader
(function () {
"use strict";
var parameters = PluginManager.parameters("TRP_SkillMotion");
var disableAnimationDelay = parameters.disableAnimationDelay === "true";
var disableSkillMotion = parameters.disableSkillMotion === "true";
var disableMotionDuration = parameters.disableMotionDuration === "true";
//=============================================================================
// AnimationDelay
//=============================================================================
(() => {
if (disableAnimationDelay) return;
//=============================================================================
// Window_BattleLog
//=============================================================================
var _Window_BattleLog_initialize = Window_BattleLog.prototype.initialize;
Window_BattleLog.prototype.initialize = function (rect) {
_Window_BattleLog_initialize.call(this, rect);
this._animationDelay = 0;
this._reservedAnimations = [];
};
var _Window_BattleLog_startAction = Window_BattleLog.prototype.startAction;
Window_BattleLog.prototype.startAction = function (
subject,
action,
targets
) {
_Window_BattleLog_startAction.call(this, subject, action, targets);
const item = action.item();
if (item && item.meta.animationDelay) {
this._animationDelay = Number(item.meta.animationDelay) || 0;
} else {
this._animationDelay = 0;
}
};
var _Window_BattleLog_endAction = Window_BattleLog.prototype.endAction;
Window_BattleLog.prototype.endAction = function (subject) {
_Window_BattleLog_endAction.call(this, subject);
this._animationDelay = 0;
};
var _Window_BattleLog_showAnimation =
Window_BattleLog.prototype.showAnimation;
Window_BattleLog.prototype.showAnimation = function (
subject,
targets,
animationId
) {
if (this._animationDelay > 0) {
this._reservedAnimations.push([this._animationDelay, ...arguments]);
} else {
_Window_BattleLog_showAnimation.call(this, ...arguments);
}
};
var _Window_BattleLog_update = Window_BattleLog.prototype.update;
Window_BattleLog.prototype.update = function () {
_Window_BattleLog_update.call(this);
if (this._reservedAnimations) {
this.updateReservedAnimations();
}
};
Window_BattleLog.prototype.updateReservedAnimations = function () {
var animations = this._reservedAnimations;
var length = animations.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var data = animations[i];
data[0] -= 1;
if (data[0] <= 0) {
animations.splice(i, 1);
i -= 1;
length -= 1;
data.shift();
_Window_BattleLog_showAnimation.call(this, ...data);
}
}
};
var _Window_BattleLog_isBusy = Window_BattleLog.prototype.isBusy;
Window_BattleLog.prototype.isBusy = function () {
if (this._reservedAnimations.length) return true;
return _Window_BattleLog_isBusy.call(this);
};
})();
//=============================================================================
// SkillMotion
//=============================================================================
(() => {
if (disableSkillMotion) return;
var _Game_Actor_performAction = Game_Actor.prototype.performAction;
Game_Actor.prototype.performAction = function (action) {
var skill = action.item();
if (skill && skill.meta.motion) {
var motion;
if (skill.meta.motion === "attack") {
var weapons = this.weapons();
var wtypeId = weapons[0] ? weapons[0].wtypeId : 0;
var attackMotion = $dataSystem.attackMotions[wtypeId];
if (attackMotion) {
if (attackMotion.type === 0) {
motion = "thrust";
} else if (attackMotion.type === 1) {
motion = "swing";
} else if (attackMotion.type === 2) {
motion = "missile";
}
this.startWeaponAnimation(attackMotion.weaponImageId);
} else {
_Game_Actor_performAction.call(this, action);
}
} else {
motion = skill.meta.motion;
}
this.requestMotion(motion);
} else {
_Game_Actor_performAction.call(this, ...arguments);
}
};
})();
//=============================================================================
// MotionDuration
//=============================================================================
(() => {
if (disableMotionDuration) return;
//=============================================================================
// Game_Actor
//=============================================================================
var Game_Actor_initMembers = Game_Actor.prototype.initMembers;
Game_Actor.prototype.initMembers = function () {
Game_Actor_initMembers.call(this);
this._motionDuration = 0;
};
var _Game_Actor_performAction = Game_Actor.prototype.performAction;
Game_Actor.prototype.performAction = function (action) {
var skill = action.item();
if (skill.meta.motionD) {
this._motionDuration = Number(skill.meta.motionD);
} else {
this._motionDuration = 0;
}
_Game_Actor_performAction.call(this, ...arguments);
};
//=============================================================================
// Sprite_Actor
//=============================================================================
var _Sprite_Actor_initMembers = Sprite_Actor.prototype.initMembers;
Sprite_Actor.prototype.initMembers = function () {
_Sprite_Actor_initMembers.call(this);
this._motionDuration = 0;
};
var _Sprite_Actor_startMotion = Sprite_Actor.prototype.startMotion;
Sprite_Actor.prototype.startMotion = function (motionType) {
const newMotion = Sprite_Actor.MOTIONS[motionType];
if (this._motion !== newMotion) {
this._motionDuration = this._actor._motionDuration || 0;
}
_Sprite_Actor_startMotion.call(this, ...arguments);
};
var _Sprite_Actor_updateMotionCount =
Sprite_Actor.prototype.updateMotionCount;
Sprite_Actor.prototype.updateMotionCount = function () {
if (
this._motion &&
!this._motion.loop &&
this._pattern === 2 &&
this._motionCount + 1 >= this.motionSpeed() &&
this._motionDuration > 0
) {
this._motionDuration -= 1;
} else {
_Sprite_Actor_updateMotionCount.call(this);
}
};
var _Sprite_Actor_setupWeaponAnimation =
Sprite_Actor.prototype.setupWeaponAnimation;
Sprite_Actor.prototype.setupWeaponAnimation = function () {
var requested = this._actor.isWeaponAnimationRequested();
_Sprite_Actor_setupWeaponAnimation.call(this);
if (requested) {
this._weaponSprite.setMotionDuration(this._actor._motionDuration);
}
};
//=============================================================================
// Sprite_Weapon
//=============================================================================
var _Sprite_Weapon_initMembers = Sprite_Weapon.prototype.initMembers;
Sprite_Weapon.prototype.initMembers = function () {
_Sprite_Weapon_initMembers.call(this);
this._motionDuration = 0;
};
Sprite_Weapon.prototype.setMotionDuration = function (duration = 0) {
this._motionDuration = duration;
};
var _Sprite_Weapon_update = Sprite_Weapon.prototype.update;
Sprite_Weapon.prototype.update = function () {
if (this._pattern === 2 && this._motionDuration > 0) {
this._motionDuration -= 1;
Sprite.prototype.update.call(this);
} else {
_Sprite_Weapon_update.call(this);
}
};
})();
})();