//============================================================================= // ShakeOnDamage.js // ---------------------------------------------------------------------------- // (C)2017 Triacontane // This software is released under the MIT License. // http://opensource.org/licenses/mit-license.php // ---------------------------------------------------------------------------- // Version // 1.2.0 2019/05/02 敵キャラのダメージ時にもシェイクさせる機能、弱点攻撃時にシェイクさせる機能を追加 // 1.1.1 2018/03/04 YEP_BattleEngineCore.jsとの競合を解消 // 1.1.0 2017/08/19 パラメータに計算式を使用できる機能を追加 // 1.0.0 2017/08/13 初版 // ---------------------------------------------------------------------------- // [Blog] : https://triacontane.blogspot.jp/ // [Twitter]: https://twitter.com/triacontane/ // [GitHub] : https://github.com/triacontane/ //============================================================================= /*: * @plugindesc ShakeOnDamagePlugin * @author triacontane * * @param ShakePower * @desc 通常ダメージを受けたときのシェイク強さです。 * @default 5 * @type number * @min 1 * @max 9 * * @param CriticalShakePower * @desc クリティカルダメージを受けたときのシェイク強さです。 * @default 9 * @type number * @min 1 * @max 9 * * @param EffectiveShakePower * @desc 弱点ダメージを受けたときのシェイク強さです。 * @default 9 * @type number * @min 1 * @max 9 * * @param ShakeSpeed * @desc シェイク速さです。 * @default 9 * @type number * @min 1 * @max 9 * * @param ShakeDuration * @desc シェイク時間(フレーム)です。 * @default 30 * @type number * * @param ApplyActor * @desc アクターのダメージ時にシェイクします。 * @default true * @type boolean * * @param ApplyEnemy * @desc 敵キャラのダメージ時にシェイクします。 * @default false * @type boolean * * @help ShakeOnDamage.js * * 戦闘でアクターがダメージを受けたときに画面を振動させます。 * クリティカル時と通常時とで強さを変えることができます。 * * 各パラメータには計算式を適用できます。さらにローカル変数として * 以下が使用可能です。 * a : ダメージを受けた対象のアクターです。 * r : ダメージを受けた対象のアクターの残りHP率(0-100)です。 * * 計算式を入力する場合はパラメータ設定ダイアログで「テキスト」タブを * 選択してから入力してください。 * * このプラグインにはプラグインコマンドはありません。 * * This plugin is released under the MIT License. */ /*:ja * @plugindesc ダメージ時の振動プラグイン * @author トリアコンタン * * @param シェイク強さ * @desc 通常ダメージを受けたときのシェイク強さです。 * @default 5 * @type number * @min 1 * @max 9 * * @param クリティカルシェイク強さ * @desc クリティカルダメージを受けたときのシェイク強さです。 * @default 9 * @type number * @min 1 * @max 9 * * @param 弱点シェイク強さ * @desc 弱点ダメージを受けたときのシェイク強さです。 * @default 9 * @type number * @min 1 * @max 9 * * @param シェイク速さ * @desc シェイク速さです。 * @default 9 * @type number * @min 1 * @max 9 * * @param シェイク時間 * @desc シェイク時間(フレーム)です。 * @default 30 * @type number * * @param アクターに適用 * @desc アクターのダメージ時にシェイクします。 * @default true * @type boolean * * @param 敵キャラに適用 * @desc 敵キャラのダメージ時にシェイクします。 * @default false * @type boolean * * @help ShakeOnDamage.js * * 戦闘でアクターがダメージを受けたときに画面を振動させます。 * クリティカル時と通常時とで強さを変えることができます。 * * 各パラメータには計算式を適用できます。 * さらにローカル変数として以下が使用可能です。 * a : ダメージを受けた対象のアクターです。 * r : ダメージを受けた対象のアクターの残りHP率(0-100)です。 * * 計算式を入力する場合はパラメータ設定ダイアログで「テキスト」タブを * 選択してから入力してください。 * * このプラグインにはプラグインコマンドはありません。 * * 利用規約: * 作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等) * についても制限はありません。 * このプラグインはもうあなたのものです。 */ (function() { 'use strict'; var pluginName = 'ShakeOnDamage'; //============================================================================= // ローカル関数 // プラグインパラメータやプラグインコマンドパラメータの整形やチェックをします //============================================================================= var getParamString = function(paramNames) { if (!Array.isArray(paramNames)) paramNames = [paramNames]; for (var i = 0; i < paramNames.length; i++) { var name = PluginManager.parameters(pluginName)[paramNames[i]]; if (name) return name; } return ''; }; var getParamBoolean = function(paramNames) { var value = getParamString(paramNames).toUpperCase(); return value === 'TRUE'; }; var convertEscapeCharacters = function(text) { if (isNotAString(text)) text = ''; var windowLayer = SceneManager._scene._windowLayer; return windowLayer ? windowLayer.children[0].convertEscapeCharacters(text) : text; }; var isNotAString = function(args) { return String(args) !== args; }; //============================================================================= // パラメータの取得と整形 //============================================================================= var param = {}; param.shakePower = getParamString(['ShakePower', 'シェイク強さ']); param.criticalShakePower = getParamString(['CriticalShakePower', 'クリティカルシェイク強さ']); param.effectiveShakePower = getParamString(['EffectiveShakePower', '弱点シェイク強さ']); param.shakeSpeed = getParamString(['ShakeSpeed', 'シェイク速さ']); param.shakeDuration = getParamString(['ShakeDuration', 'シェイク時間']); param.applyActor = getParamBoolean(['ApplyActor', 'アクターに適用']); param.applyEnemy = getParamBoolean(['ApplyEnemy', '敵キャラに適用']); //============================================================================= // Game_Battler // クリティカル判定を記憶します。 //============================================================================= Game_Battler.prototype.setCriticalForShake = function(value) { this._criticalForShake = value; }; Game_Battler.prototype.isCriticalForShake = function() { return this._criticalForShake; }; Game_Battler.prototype.setEffectiveForShake = function(value) { this._effectiveForShake = value; }; Game_Battler.prototype.isEffectiveForShake = function() { return this._effectiveForShake; }; var _Game_Battler_performDamage = Game_Battler.prototype.performDamage; Game_Battler.prototype.performDamage = function() { _Game_Battler_performDamage.apply(this, arguments); if (this.isShakeOnDamage()) { this.shakeOnDamage(); } }; Game_Battler.prototype.shakeOnDamage = function() { var power = this.getDamageShakePower(); var speed = this.convertShakeParameter(param.shakeSpeed); var duration = this.convertShakeParameter(param.shakeDuration); $gameScreen.startShake(power, speed, duration); this.setCriticalForShake(false); }; Game_Battler.prototype.getDamageShakePower = function() { var power = param.shakePower; if (param.criticalShakePower && this.isCriticalForShake()) { power = param.criticalShakePower; } else if (param.effectiveShakePower && this.isEffectiveForShake()) { power = param.effectiveShakePower; } return this.convertShakeParameter(power); }; Game_Battler.prototype.convertShakeParameter = function(param) { var convertParam = convertEscapeCharacters(param); // use in eval var a = this; var r = a.hpRate() * 100; return isNaN(Number(convertParam)) ? eval(convertParam) : parseInt(convertParam); }; Game_Battler.prototype.isShakeOnDamage = function() { return false; }; Game_Actor.prototype.isShakeOnDamage = function() { return param.applyActor; }; Game_Enemy.prototype.isShakeOnDamage = function() { return param.applyEnemy; }; //============================================================================= // Game_Action // クリティカル判定を記憶します。 //============================================================================= var _Game_Action_makeDamageValue = Game_Action.prototype.makeDamageValue; Game_Action.prototype.makeDamageValue = function(target, critical) { target.setCriticalForShake(critical); return _Game_Action_makeDamageValue.apply(this, arguments); }; var _Game_Action_calcElementRate = Game_Action.prototype.calcElementRate; Game_Action.prototype.calcElementRate = function(target) { var result = _Game_Action_calcElementRate.apply(this, arguments); target.setEffectiveForShake(result > 1.0); return result; }; })();