code:
//=============================================================================
// EnemyBook.js
//=============================================================================

/*:
 * @plugindesc Displays detailed statuses of enemies.
 * @author Yoji Ojima
 *
 * @param Unknown Data
 * @desc The index name for an unknown enemy.
 * @default ??????
 *
 * @help
 *
 * Plugin Command:
 *   EnemyBook open         # Open the enemy book screen
 *   EnemyBook add 3        # Add enemy #3 to the enemy book
 *   EnemyBook remove 4     # Remove enemy #4 from the enemy book
 *   EnemyBook complete     # Complete the enemy book
 *   EnemyBook clear        # Clear the enemy book
 *
 * Enemy Note:
 *   <desc1:foobar>         # Description text in the enemy book, line 1
 *   <desc2:blahblah>       # Description text in the enemy book, line 2
 *   <book:no>              # This enemy does not appear in the enemy book
 */

/*:ja
 * @plugindesc モンスター図鑑です。敵キャラの詳細なステータスを表示します。
 * @author Yoji Ojima
 *
 * @param Unknown Data
 * @desc 未確認の敵キャラの索引名です。
 * @default ？？？？？？
 *
 * @help
 *
 * プラグインコマンド:
 *   EnemyBook open         # 図鑑画面を開く
 *   EnemyBook add 3        # 敵キャラ３番を図鑑に追加
 *   EnemyBook remove 4     # 敵キャラ４番を図鑑から削除
 *   EnemyBook complete     # 図鑑を完成させる
 *   EnemyBook clear        # 図鑑をクリアする
 *
 * 敵キャラのメモ:
 *   <desc1:なんとか>       # 説明１行目
 *   <desc2:かんとか>       # 説明２行目
 *   <book:no>              # 図鑑に載せない場合
 */

(function () {

    var parameters = PluginManager.parameters('EnemyBook');
    var unknownData = String(parameters['Unknown Data'] || '??????');

    var _Game_Interpreter_pluginCommand =
        Game_Interpreter.prototype.pluginCommand;
    Game_Interpreter.prototype.pluginCommand = function (command, args) {
        _Game_Interpreter_pluginCommand.call(this, command, args);
        if (command === 'EnemyBook') {
            switch (args[0]) {
                case 'open':
                    SceneManager.push(Scene_EnemyBook);
                    break;
                case 'add':
                    $gameSystem.addToEnemyBook(Number(args[1]));
                    break;
                case 'remove':
                    $gameSystem.removeFromEnemyBook(Number(args[1]));
                    break;
                case 'complete':
                    $gameSystem.completeEnemyBook();
                    break;
                case 'clear':
                    $gameSystem.clearEnemyBook();
                    break;
            }
        }
    };

    Game_System.prototype.addToEnemyBook = function (enemyId) {
        if (!this._enemyBookFlags) {
            this.clearEnemyBook();
        }
        this._enemyBookFlags[enemyId] = true;
    };

    Game_System.prototype.removeFromEnemyBook = function (enemyId) {
        if (this._enemyBookFlags) {
            this._enemyBookFlags[enemyId] = false;
        }
    };

    Game_System.prototype.completeEnemyBook = function () {
        this.clearEnemyBook();
        for (var i = 1; i < $dataEnemies.length; i++) {
            this._enemyBookFlags[i] = true;
        }
    };

    Game_System.prototype.clearEnemyBook = function () {
        this._enemyBookFlags = [];
    };

    Game_System.prototype.isInEnemyBook = function (enemy) {
        if (this._enemyBookFlags && enemy) {
            return !!this._enemyBookFlags[enemy.id];
        } else {
            return false;
        }
    };

    var _Game_Troop_setup = Game_Troop.prototype.setup;
    Game_Troop.prototype.setup = function (troopId) {
        _Game_Troop_setup.call(this, troopId);
        this.members().forEach(function (enemy) {
            if (enemy.isAppeared()) {
                $gameSystem.addToEnemyBook(enemy.enemyId());
            }
        }, this);
    };

    var _Game_Enemy_appear = Game_Enemy.prototype.appear;
    Game_Enemy.prototype.appear = function () {
        _Game_Enemy_appear.call(this);
        $gameSystem.addToEnemyBook(this._enemyId);
    };

    var _Game_Enemy_transform = Game_Enemy.prototype.transform;
    Game_Enemy.prototype.transform = function (enemyId) {
        _Game_Enemy_transform.call(this, enemyId);
        $gameSystem.addToEnemyBook(enemyId);
    };

    function Scene_EnemyBook() {
        this.initialize.apply(this, arguments);
    }

    Scene_EnemyBook.prototype = Object.create(Scene_MenuBase.prototype);
    Scene_EnemyBook.prototype.constructor = Scene_EnemyBook;

    Scene_EnemyBook.prototype.initialize = function () {
        Scene_MenuBase.prototype.initialize.call(this);
    };

    Scene_EnemyBook.prototype.create = function () {
        Scene_MenuBase.prototype.create.call(this);
        this._indexWindow = new Window_EnemyBookIndex(0, 0);
        this._indexWindow.setHandler('cancel', this.popScene.bind(this));
        var wy = this._indexWindow.height;
        var ww = Graphics.boxWidth;
        var wh = Graphics.boxHeight - wy;
        this._statusWindow = new Window_EnemyBookStatus(0, wy, ww, wh);
        this.addWindow(this._indexWindow);
        this.addWindow(this._statusWindow);
        this._indexWindow.setStatusWindow(this._statusWindow);
    };

    function Window_EnemyBookIndex() {
        this.initialize.apply(this, arguments);
    }

    Window_EnemyBookIndex.prototype = Object.create(Window_Selectable.prototype);
    Window_EnemyBookIndex.prototype.constructor = Window_EnemyBookIndex;

    Window_EnemyBookIndex.lastTopRow = 0;
    Window_EnemyBookIndex.lastIndex = 0;

    Window_EnemyBookIndex.prototype.initialize = function (x, y) {
        var width = Graphics.boxWidth;
        var height = this.fittingHeight(6);
        Window_Selectable.prototype.initialize.call(this, x, y, width, height);
        this.refresh();
        this.setTopRow(Window_EnemyBookIndex.lastTopRow);
        this.select(Window_EnemyBookIndex.lastIndex);
        this.activate();
    };

    Window_EnemyBookIndex.prototype.maxCols = function () {
        return 3;
    };

    Window_EnemyBookIndex.prototype.maxItems = function () {
        return this._list ? this._list.length : 0;
    };

    Window_EnemyBookIndex.prototype.setStatusWindow = function (statusWindow) {
        this._statusWindow = statusWindow;
        this.updateStatus();
    };

    Window_EnemyBookIndex.prototype.update = function () {
        Window_Selectable.prototype.update.call(this);
        this.updateStatus();
    };

    Window_EnemyBookIndex.prototype.updateStatus = function () {
        if (this._statusWindow) {
            var enemy = this._list[this.index()];
            this._statusWindow.setEnemy(enemy);
        }
    };

    Window_EnemyBookIndex.prototype.refresh = function () {
        this._list = [];
        for (var i = 1; i < $dataEnemies.length; i++) {
            var enemy = $dataEnemies[i];
            if (enemy.name && enemy.meta.book !== 'no') {
                this._list.push(enemy);
            }
        }
        this.createContents();
        this.drawAllItems();
    };

    Window_EnemyBookIndex.prototype.drawItem = function (index) {
        var enemy = this._list[index];
        var rect = this.itemRectForText(index);
        var name;
        if ($gameSystem.isInEnemyBook(enemy)) {
            name = enemy.name;
        } else {
            name = unknownData;
        }
        this.drawText(name, rect.x, rect.y, rect.width);
    };

    Window_EnemyBookIndex.prototype.processCancel = function () {
        Window_Selectable.prototype.processCancel.call(this);
        Window_EnemyBookIndex.lastTopRow = this.topRow();
        Window_EnemyBookIndex.lastIndex = this.index();
    };

    function Window_EnemyBookStatus() {
        this.initialize.apply(this, arguments);
    }

    Window_EnemyBookStatus.prototype = Object.create(Window_Base.prototype);
    Window_EnemyBookStatus.prototype.constructor = Window_EnemyBookStatus;

    Window_EnemyBookStatus.prototype.initialize = function (x, y, width, height) {
        Window_Base.prototype.initialize.call(this, x, y, width, height);
        this._enemy = null;
        this._enemySprite = new Sprite();
        this._enemySprite.anchor.x = 0.5;
        this._enemySprite.anchor.y = 0.5;
        this._enemySprite.x = width / 2 - 20;
        this._enemySprite.y = height / 2;
        this.addChildToBack(this._enemySprite);
        this.refresh();
    };

    Window_EnemyBookStatus.prototype.setEnemy = function (enemy) {
        if (this._enemy !== enemy) {
            this._enemy = enemy;
            this.refresh();
        }
    };

    Window_EnemyBookStatus.prototype.update = function () {
        Window_Base.prototype.update.call(this);
        if (this._enemySprite.bitmap) {
            var bitmapHeight = this._enemySprite.bitmap.height;
            var contentsHeight = this.contents.height;
            var scale = 1;
            if (bitmapHeight > contentsHeight) {
                scale = contentsHeight / bitmapHeight;
            }
            this._enemySprite.scale.x = scale;
            this._enemySprite.scale.y = scale;
        }
    };

    Window_EnemyBookStatus.prototype.refresh = function () {
        var enemy = this._enemy;
        var x = 0;
        var y = 0;
        var lineHeight = this.lineHeight();

        this.contents.clear();

        if (!enemy || !$gameSystem.isInEnemyBook(enemy)) {
            this._enemySprite.bitmap = null;
            return;
        }

        var name = enemy.battlerName;
        var hue = enemy.battlerHue;
        var bitmap;
        if ($gameSystem.isSideView()) {
            bitmap = ImageManager.loadSvEnemy(name, hue);
        } else {
            bitmap = ImageManager.loadEnemy(name, hue);
        }
        this._enemySprite.bitmap = bitmap;

        this.resetTextColor();
        this.drawText(enemy.name, x, y);

        x = this.textPadding();
        y = lineHeight + this.textPadding();

        for (var i = 0; i < 8; i++) {
            this.changeTextColor(this.systemColor());
            this.drawText(TextManager.param(i), x, y, 160);
            this.resetTextColor();
            this.drawText(enemy.params[i], x + 160, y, 60, 'right');
            y += lineHeight;
        }

        var rewardsWidth = 280;
        x = this.contents.width - rewardsWidth;
        y = lineHeight + this.textPadding();

        this.resetTextColor();
        this.drawText(enemy.exp, x, y);
        x += this.textWidth(enemy.exp) + 6;
        this.changeTextColor(this.systemColor());
        this.drawText(TextManager.expA, x, y);
        x += this.textWidth(TextManager.expA + '  ');

        this.resetTextColor();
        this.drawText(enemy.gold, x, y);
        x += this.textWidth(enemy.gold) + 6;
        this.changeTextColor(this.systemColor());
        this.drawText(TextManager.currencyUnit, x, y);

        x = this.contents.width - rewardsWidth;
        y += lineHeight;

        for (var j = 0; j < enemy.dropItems.length; j++) {
            var di = enemy.dropItems[j];
            if (di.kind > 0) {
                var item = Game_Enemy.prototype.itemObject(di.kind, di.dataId);
                this.drawItemName(item, x, y, rewardsWidth);
                y += lineHeight;
            }
        }

        var descWidth = 480;
        x = this.contents.width - descWidth;
        y = this.textPadding() + lineHeight * 7;
        this.drawTextEx(enemy.meta.desc1, x, y + lineHeight * 0, descWidth);
        this.drawTextEx(enemy.meta.desc2, x, y + lineHeight * 1, descWidth);
    };

})();


code:
//
//  装備スロット追加特徴 ver1.00
//
// author yana
//

var Imported = Imported || {};
Imported['EquipSlotAddTrait'] = 1.00;
/*:
 * @plugindesc ver1.00/装備スロットを追加する特徴を設定できるようにします。
 * @author Yana
 *
 * @help ------------------------------------------------------
 * 使用方法
 * ------------------------------------------------------
 * 特徴を持ったオブジェクトのメモ欄に
 * <装備スロット:x+y>
 * または、
 * <AddEquipSlot:x+y>
 * と記述することで、xのスロットをy個増やします。
 * +を-にすることで減らすことも可能です。
 *
 * ------------------------------------------------------
 * 利用規約
 * ------------------------------------------------------
 * 使用に制限はありません。商用、アダルト、いずれにも使用できます。
 * 二次配布も制限はしませんが、サポートは行いません。
 * 著作表示は任意です。行わなくても利用できます。
 * 要するに、特に規約はありません。
 * バグ報告や使用方法等のお問合せはネ実ツクールスレ、または、Twitterにお願いします。
 * https://twitter.com/yanatsuki_
 * 素材利用は自己責任でお願いします。
 * ------------------------------------------------------
 * 更新履歴:
 * ver1.00:
 * 公開
 */
(function () {
	////////////////////////////////////////////////////////////////////////////////////

	var parameters = PluginManager.parameters('EquipSlotAddTrait');

	////////////////////////////////////////////////////////////////////////////////////

	DataManager.addEquipSlots = function (item) {
		if (!item) { return [] }
		if (item._addEquipSlots === undefined) {
			item._addEquipSlots = [];
			var texts = item.note.split('\n');
			for (var i = 0, max = texts.length; i < max; i++) {
				var text = texts[i];
				if (text.match(/<(?:装備スロット|AddEquipSlot):(\d+)([+-]\d+)>/)) {
					item._addEquipSlots.push([Number(RegExp.$1), Number(RegExp.$2)]);
				}
			}
		}
		return item._addEquipSlots;
	};

	var __DManager_loadGame = DataManager.loadGame;
	DataManager.loadGame = function (savefileId) {
		var result = __DManager_loadGame.call(this, savefileId);
		if (result) { $gameParty.allMembers().forEach(function (m) { m.refresh() }) }
		return result;
	};

	////////////////////////////////////////////////////////////////////////////////////

	var __GActor_equipSlots = Game_Actor.prototype.equipSlots;
	Game_Actor.prototype.equipSlots = function () {
		var slots = __GActor_equipSlots.call(this);
		var objects = this.traitObjects().clone();
		return objects.reduce(function (r, to) {
			var addSlots = DataManager.addEquipSlots(to);
			for (var i = 0, max = addSlots.length; i < max; i++) {
				var addSlot = addSlots[i];
				for (var j = 0; j < addSlot[1]; j++) {
					if (!this._equips[r.length]) {
						this._equips[r.length] = new Game_Item();
					}
					r = r.concat(addSlot[0]);
				}
				for (var j = 0; j < -addSlot[1]; j++) {
					var index = r.indexOf(addSlot[0]);
					if (index >= 0) { r.splice(index, 1) }
				}
			}
			return r;
		}.bind(this), slots);
	};

	////////////////////////////////////////////////////////////////////////////////////

	var __WESlot_refresh = Window_EquipSlot.prototype.refresh;
	Window_EquipSlot.prototype.refresh = function () {
		if (this._actor) { this._actor.refresh() }
		__WESlot_refresh.call(this);
	};
}());

repo_name: dazed/translations

license: unknown


code:
//=============================================================================
// バトル中の各種速度を変更するプラグイン
// FTKR_ChangeBattleSpeed.js
// プラグインNo : 71
// 作成者     : フトコロ
// 作成日     : 2018/02/26
// 最終更新日 : 2019/04/07
// バージョン : v1.0.3
//=============================================================================

var Imported = Imported || {};
Imported.FTKR_CBS = true;

var FTKR = FTKR || {};
FTKR.CBS = FTKR.CBS || {};

//=============================================================================
/*:
 * @plugindesc v1.0.3 バトル中の各種速度を変更するプラグイン
 * @author フトコロ
 *
 * @param Message Speed
 * @desc バトルログの表示速度を設定します。
 * @type struct<variable>
 * @default {"variableId":"0","initValue":"16"}
 *
 * @param Aniamtion Base Delay
 * @desc アニメーションを再生するまでのウェイト時間を設定します。
 * @type struct<variable>
 * @default {"variableId":"0","initValue":"8"}
 *
 * @param Animation Next Delay
 * @desc 複数の対象に別々にアニメーションを表示する場合の２キャラ目以降の再生ウェイト時間を設定します。
 * @type struct<variable>
 * @default {"variableId":"0","initValue":"12"}
 *
 * @param Aniamtion Enemy Delay
 * @desc 敵がアニメーションを再生するまでのウェイト時間を設定します。Base Delayと別に処理されます。
 * @type struct<variable>
 * @default {"variableId":"0","initValue":"0"}
 *
 * @param Animation Rate
 * @desc アニメーションの１フレームごとの表示時間を設定します。
 * @type struct<variable>
 * @default {"variableId":"0","initValue":"4"}
 *
 * @param Damage Popup Duration
 * @desc ダメージのポップアップ時間を設定します。
 * @type struct<variable>
 * @default {"variableId":"0","initValue":"90"}
 *
 * @param Enemy Collapse Duration
 * @desc 敵キャラの消滅時間を設定します。
 * @type struct<variable>
 * @default {"variableId":"0","initValue":"32"}
 *
 * @help
 *-----------------------------------------------------------------------------
 * 概要
 *-----------------------------------------------------------------------------
 * バトル中の以下の各処理時間をゲーム内変数で管理することができます。
 *
 * 変更可能な処理
 * ・バトルログの表示時間　　　　　　　　　　　（MVデフォルト：16）
 * ・アニメーションを開始するまでのディレイ時間（MVデフォルト：8）
 * ・アニメーションのフレームごとの表示時間　　（MVデフォルト：4）
 * ・敵のアニメーション開始前のディレイ時間　　（MVデフォルトにはありません）
 * ・ダメージポップアップの時間　　　　　　　　（MVデフォルト：90）
 * ・敵通常キャラの消滅時間　　　　　　　　　　（MVデフォルト：32）
 *
 * プラグインパラメータで、変数ID(variableId)を指定しない場合は
 * 初期値(initValue)を固定で使用します。
 *
 * 初期値も設定しない(空欄にする)場合は、MVデフォルトの値を使用します。
 *
 *
 * なお、敵のアニメーションを開始する前のディレイ時間は
 * 「アニメーションを開始するまでのディレイ時間」+
 * 　　　　　　　「敵のアニメーション開始前のディレイ時間」
 * という結果になります。
 *
 * 「アニメーションを開始するまでのディレイ時間」はアクターも使用するため
 * 敵の行動だけ遅くしたい場合は、「敵のアニメーション開始前のディレイ時間」で
 * 調整してください。
 *
 *
 *-----------------------------------------------------------------------------
 * 設定方法
 *-----------------------------------------------------------------------------
 * 1.「プラグインマネージャー(プラグイン管理)」に、本プラグインを追加して
 *    ください。
 *
 *
 *-----------------------------------------------------------------------------
 * 本プラグインのライセンスについて(License)
 *-----------------------------------------------------------------------------
 * 本プラグインはMITライセンスのもとで公開しています。
 * This plugin is released under the MIT License.
 *
 * Copyright (c) 2018 Futokoro
 * http://opensource.org/licenses/mit-license.php
 *
 *
 * プラグイン公開元
 * https://github.com/futokoro/RPGMaker/blob/master/README.md
 *
 *
 *-----------------------------------------------------------------------------
 * 変更来歴
 *-----------------------------------------------------------------------------
 *
 * v1.0.3 - 2019/04/07 : 不具合修正
 *    1. 変数IDを設定せずに初期値を設定する機能が、正しく反映されない不具合を修正。(うたこさんからご提供)
 *
 * v1.0.2 - 2018/02/27 : 仕様変更
 *    1. プラグインパラメータで変数IDを設定しない場合に、初期値を設定していれば
 *       その値を固定で使用するように変更。
 *
 * v1.0.1 - 2018/02/27 : 機能追加
 *    1. 敵だけアニメーション開始前のディレイ時間を変更する機能を追加。
 *
 * v1.0.0 - 2018/02/26 : 初版作成
 *
 *-----------------------------------------------------------------------------
*/
//=============================================================================
/*~struct~variable:
 * @param variableId
 * @desc 数値を管理する変数IDを設定します。
 * @type variable
 * @default 0
 *
 * @param initValue
 * @desc 変数の初期値を設定します。
 * @type number
 * @default 1
 * @min 1
 *
*/

(function () {

    var paramParse = function (obj) {
        return JSON.parse(JSON.stringify(obj, paramReplace));
    };

    var paramReplace = function (key, value) {
        try {
            return JSON.parse(value || null);
        } catch (e) {
            return value;
        }
    };

    var setPluginStructVariable = function (param) {
        param = paramParse(parameters[param]);
        return param instanceof Object ? param : { initValue: 0, variableId: 0 };
    };

    //=============================================================================
    // プラグイン パラメータ
    //=============================================================================
    var parameters = PluginManager.parameters('FTKR_ChangeBattleSpeed');

    FTKR.CBS = {
        messageSpeed: setPluginStructVariable('Message Speed'),
        animationBaseDelay: setPluginStructVariable('Aniamtion Base Delay'),
        animationNextDelay: setPluginStructVariable('Animation Next Delay'),
        animationRate: setPluginStructVariable('Animation Rate'),
        damageDuration: setPluginStructVariable('Damage Popup Duration'),
        collapseDuration: setPluginStructVariable('Enemy Collapse Duration'),
        animationEnemyDelay: setPluginStructVariable('Aniamtion Enemy Delay'),
    };

    var getParamVariableValue = function (param, base) {
        return param.variableId ? $gameVariables.value(param.variableId) :
            !isNaN(param.initValue) ? param.initValue : base;
    };

    var getParamValue = function (param) {
        if (param.variableId) {
            return $gameVariables.value(param.variableId);
        } else if (param.initValue) {
            return param.initValue;
        } else {
            return 0; // or false
        }
    };

    var setParamVariableValue = function (param) {
        if (param.variableId) $gameVariables.setValue(param.variableId, param.initValue);
    };

    var _CBS_DataManager_setupNewGame = DataManager.setupNewGame;
    DataManager.setupNewGame = function () {
        _CBS_DataManager_setupNewGame.call(this);
        for (var prop in FTKR.CBS) {
            setParamVariableValue(FTKR.CBS[prop]);
        }
    };

    var _CBS_Window_BattleLog_messageSpeed = Window_BattleLog.prototype.messageSpeed;
    Window_BattleLog.prototype.messageSpeed = function () {
        return getParamVariableValue(FTKR.CBS.messageSpeed, _CBS_Window_BattleLog_messageSpeed.call(this));
    };

    var _CBS_Window_BattleLog_showAnimation = Window_BattleLog.prototype.showAnimation;
    Window_BattleLog.prototype.showAnimation = function (subject, targets, animationId) {
        this._subject = subject;
        _CBS_Window_BattleLog_showAnimation.call(this, subject, targets, animationId);
    };

    Window_BattleLog.prototype.animationEnemyDelay = function () {
        return getParamVariableValue(FTKR.CBS.animationEnemyDelay, 0);
    };

    var _CBS_Window_BattleLog_showEnemyAttackAnimation = Window_BattleLog.prototype.showEnemyAttackAnimation;
    Window_BattleLog.prototype.showEnemyAttackAnimation = function (subject, targets) {
        _CBS_Window_BattleLog_showEnemyAttackAnimation.call(this, subject, targets);
        this._waitCount = this.animationEnemyDelay();
    };

    var _CBS_Window_BattleLog_animationBaseDelay = Window_BattleLog.prototype.animationBaseDelay;
    Window_BattleLog.prototype.animationBaseDelay = function () {
        var delay = this._subject && !this._subject.isActor() ? this.animationEnemyDelay() : 0;
        return delay + getParamVariableValue(FTKR.CBS.animationBaseDelay, _CBS_Window_BattleLog_animationBaseDelay.call(this));
    };

    var _CBS_Window_BattleLog_animationNextDelay = Window_BattleLog.prototype.animationNextDelay;
    Window_BattleLog.prototype.animationNextDelay = function () {
        return getParamVariableValue(FTKR.CBS.animationNextDelay, _CBS_Window_BattleLog_animationNextDelay.call(this));
    };

    var _CBS_Sprite_Enemy_startCollapse = Sprite_Enemy.prototype.startCollapse;
    Sprite_Enemy.prototype.startCollapse = function () {
        _CBS_Sprite_Enemy_startCollapse.call(this);
        var paramValue = getParamValue(FTKR.CBS.collapseDuration);
        if (paramValue) {
            this._effectDuration = paramValue
        }
    };

    var _CBS_Sprite_Animation_initMembers = Sprite_Animation.prototype.initMembers;
    Sprite_Animation.prototype.initMembers = function () {
        _CBS_Sprite_Animation_initMembers.call(this);
        var paramValue = getParamValue(FTKR.CBS.animationRate);
        if (paramValue) {
            this._rate = paramValue;
        }
    };

    var _CBS_Sprite_Animation_setupRate = Sprite_Animation.prototype.setupRate;
    Sprite_Animation.prototype.setupRate = function () {
        var paramValue = getParamValue(FTKR.CBS.animationRate);
        if (paramValue) {
            this._rate = paramValue;
        } else {
            _CBS_Sprite_Animation_setupRate.call(this);
        }
    };

    var _CBS_Sprite_Damage_initialize = Sprite_Damage.prototype.initialize;
    Sprite_Damage.prototype.initialize = function () {
        _CBS_Sprite_Damage_initialize.call(this);
        var paramValue = getParamValue(FTKR.CBS.damageDuration);
        if (paramValue) {
            this._duration = paramValue;
        }
    };

}());//EOF