//============================================================================= // TRP_SkillMotion.js //============================================================================= /*: * @target MZ * @author Thirop * @plugindesc スキル使用時のモーション簡易設定 * * @help * 戦闘モーション拡張系のプラグインとは競合可能性大 * 必要に応じてプラグイン設定で機能を制限してご利用ください * * 《モーション設定》 * ※設定はいずれもスキルのメモ欄に記述 * * □アニメーションの表示開始を遅らせる * * * □スキル使用時のモーション変更 * * 有効なモーション名 * ・walk * ・wait * ・chant * ・guard * ・damage * ・evade * ・thrust * ・swing * ・missile * ・skill * ・spell * ・item * ・escape * ・victory * ・dying * ・abnormal * ・sleep * ・dead * * □スキル使用時のモーションを硬直 * * └武器を振ったあとにすぐにポーズを戻したくないときに設定 * * * * @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); } }; })(); })();