code:
//=============================================================================
// ScrollForceCenter.js
// ----------------------------------------------------------------------------
// (C) 2016 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.1.0 2019/04/28 中心座標を指定したぶんだけずらせる機能を追加
// 1.0.0 2016/09/15 初版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc ScrollForceCenterPlugin
 * @author triacontane
 *
 * @param adjustX
 * @desc 指定した分だけ中心がずれて表示されます。
 * @default 0
 * @type number
 * @min -500
 * @max 500
 *
 * @param adjustY
 * @desc 指定した分だけ中心がずれて表示されます。
 * @default 0
 * @type number
 * @min -500
 * @max 500
 *
 * @help マップ画面でマップサイズにかかわらずプレイヤーが常に画面中央に
 * 配置されるようになります。
 * マップの外側が画面内に入る場合、真っ黒の状態で表示されます。
 *
 * プラグインコマンド詳細
 *  イベントコマンド「プラグインコマンド」から実行。
 *  （パラメータの間は半角スペースで区切る）
 *
 * SFC禁止予約         # 強制中央スクロールが禁止され通常スクロールになります。
 * SFC_DISABLE_RESERVE # 同上
 * SFC許可予約         # 再度、強制中央スクロールが許可されます。
 * SFC_ENABLE_RESERVE  # 同上
 *
 * 上記の設定はすぐには反映されず、次回場所移動後から有効になります。
 *
 * またマップ設定のメモ欄に以下の通り記述すると、マップ単位で強制中央スクロールの
 * 禁止/許可を制御できます。この設定はプラグインコマンドより優先されます。
 * <SFC禁止>     # 対象マップで強制中央スクロールが禁止されます。
 * <SFC_Disable> # 同上
 * <SFC許可>     # 対象マップで強制中央スクロールが許可されます。
 * <SFC_Enable>  # 同上
 *
 * This plugin is released under the MIT License.
 */
/*:ja
 * @plugindesc 強制中央スクロールプラグイン
 * @author トリアコンタン
 *
 * @param adjustX
 * @text X補正
 * @desc 指定した分だけ中心がずれて表示されます。
 * @default 0
 * @type number
 * @min -500
 * @max 500
 *
 * @param adjustY
 * @text Y補正
 * @desc 指定した分だけ中心がずれて表示されます。
 * @default 0
 * @type number
 * @min -500
 * @max 500
 *
 * @help マップ画面でマップサイズにかかわらずプレイヤーが常に画面中央に
 * 配置されるようになります。
 * マップの外側が画面内に入る場合、真っ黒の状態で表示されます。
 *
 * プラグインコマンド詳細
 *  イベントコマンド「プラグインコマンド」から実行。
 *  （パラメータの間は半角スペースで区切る）
 *
 * SFC_REM_ENABLE   許可
 * SFC_REM_DISABLE  禁止
 *
 * SFC禁止予約         # 強制中央スクロールが禁止され通常スクロールになります。
 * SFC_DISABLE_RESERVE # 同上
 * SFC許可予約         # 再度、強制中央スクロールが許可されます。
 * SFC_ENABLE_RESERVE  # 同上
 *
 * 上記の設定はすぐには反映されず、次回場所移動後から有効になります。
 *
 * またマップ設定のメモ欄に以下の通り記述すると、マップ単位で強制中央スクロールの
 * 禁止/許可を制御できます。この設定はプラグインコマンドより優先されます。
 * <SFC禁止>     # 対象マップで強制中央スクロールが禁止されます。
 * <SFC_Disable> # 同上
 * <SFC許可>     # 対象マップで強制中央スクロールが許可されます。
 * <SFC_Enable>  # 同上
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function() {
    'use strict';
    var metaTagPrefix = 'SFC';

    var getCommandName = function(command) {
        return (command || '').toUpperCase();
    };

    var getMetaValue = function(object, name) {
        var metaTagName = metaTagPrefix + (name ? name : '');
        return object.meta.hasOwnProperty(metaTagName) ? object.meta[metaTagName] : undefined;
    };

    var getMetaValues = function(object, names) {
        if (!Array.isArray(names)) return getMetaValue(object, names);
        for (var i = 0, n = names.length; i < n; i++) {
            var value = getMetaValue(object, names[i]);
            if (value !== undefined) return value;
        }
        return undefined;
    };

    /**
     * Create plugin parameter. param[paramName] ex. param.commandPrefix
     * @param pluginName plugin name(EncounterSwitchConditions)
     * @returns {Object} Created parameter
     */
    var createPluginParameter = function(pluginName) {
        var paramReplacer = function(key, value) {
            if (value === 'null') {
                return value;
            }
            if (value[0] === '"' && value[value.length - 1] === '"') {
                return value;
            }
            try {
                return JSON.parse(value);
            } catch (e) {
                return value;
            }
        };
        var parameter     = JSON.parse(JSON.stringify(PluginManager.parameters(pluginName), paramReplacer));
        PluginManager.setParameters(pluginName, parameter);
        return parameter;
    };
    var param = createPluginParameter('ScrollForceCenter');

    //=============================================================================
    // Game_Interpreter
    //  プラグインコマンドを追加定義します。
    //=============================================================================
    var _Game_Interpreter_pluginCommand      = Game_Interpreter.prototype.pluginCommand;
    Game_Interpreter.prototype.pluginCommand = function(command, args) {
        _Game_Interpreter_pluginCommand.apply(this, arguments);
        if (!command.match(new RegExp('^' + metaTagPrefix))) return;
        this.pluginCommandScrollForceCenter(command.replace(metaTagPrefix, ''), args);
    };

    Game_Interpreter.prototype.pluginCommandScrollForceCenter = function(command) {
        switch (getCommandName(command)) {
            case '禁止予約' :
            case '_DISABLE_RESERVE':
                $gameMap.setDisableForceCenterReserve(true);
                break;
            case '許可予約' :
            case '_ENABLE_RESERVE':
                $gameMap.setDisableForceCenterReserve(false);
                break;
			case '_REM_ENABLE':
				$gameParty.setMapForceCenter(true);
				break;
			case '_REM_DISABLE':
				$gameParty.setMapForceCenter(false);
				break;
        }
    };

    var _Game_Player_updateScroll      = Game_Player.prototype.updateScroll;
    Game_Player.prototype.updateScroll = function(lastScrolledX, lastScrolledY) {
        _Game_Player_updateScroll.apply(this, arguments);
        if ($gameMap.isForceCenter()) {
            var x1 = lastScrolledX;
            var y1 = lastScrolledY;
            var x2 = this.scrolledX();
            var y2 = this.scrolledY();
            if (y2 > y1 && y2 <= this.centerY()) {
                $gameMap.scrollDown(y2 - y1);
            }
            if (x2 < x1 && x2 >= this.centerX()) {
                $gameMap.scrollLeft(x1 - x2);
            }
            if (x2 > x1 && x2 <= this.centerX()) {
                $gameMap.scrollRight(x2 - x1);
            }
            if (y2 < y1 && y2 >= this.centerY()) {
                $gameMap.scrollUp(y1 - y2);
            }
        }
    };

	Game_Party.prototype.setMapForceCenter = function(value) {
        this._mapForceCenter = value;
    };
	Game_Party.prototype.isMapForceCenter = function() {
        return this._mapForceCenter;
    };

    var _Game_Map_initialize = Game_Map.prototype.initialize;
    Game_Map.prototype.initialize = function() {
        _Game_Map_initialize.apply(this, arguments);
        this._disableForceCenter        = false;
        this._disableForceCenterReserve = false;
    };

    var _Game_Map_setup = Game_Map.prototype.setup;
    Game_Map.prototype.setup = function(mapId) {
        this.refreshDisableForceCenter();
        _Game_Map_setup.apply(this, arguments);
    };

    Game_Map.prototype.isForceCenter = function() {
        return !this._disableForceCenter;
    };

    Game_Map.prototype.setDisableForceCenterReserve = function(value) {
        this._disableForceCenterReserve = !!value;
    };

    Game_Map.prototype.refreshDisableForceCenter = function() {
        var disableForceCenter;
        if (getMetaValues($dataMap, ['禁止', '_Disable'])) {
            disableForceCenter = true;
        } else if (getMetaValues($dataMap, ['許可', '_Enable'])) {
            disableForceCenter = false;
        } else {
            disableForceCenter = this._disableForceCenterReserve;
        }
        this._disableForceCenter = disableForceCenter;
    };

    var _Game_Map_setDisplayPos = Game_Map.prototype.setDisplayPos;
    Game_Map.prototype.setDisplayPos = function(x, y) {
        _Game_Map_setDisplayPos.apply(this, arguments);
        if (this.isForceCenterHorizontal()) {
            this._displayX = x + (param.adjustX || 0);
            this._parallaxX = this._displayX;
        }
        if (this.isForceCenterVertical()) {
            this._displayY = y + (param.adjustY || 0);
            this._parallaxY = this._displayY;
        }
    };

    Game_Map.prototype.isForceCenterVertical = function() {
        return !this.isLoopVertical() && (this.isForceCenter() || $gameParty.isMapForceCenter());
    };

    Game_Map.prototype.isForceCenterHorizontal = function() {
        return !this.isLoopHorizontal() && (this.isForceCenter() || $gameParty.isMapForceCenter());
    };

    var _Game_Map_scrollDown = Game_Map.prototype.scrollDown;
    Game_Map.prototype.scrollDown = function(distance) {
        var forceCenterDisplayY = this._displayY + distance;
        _Game_Map_scrollDown.apply(this, arguments);
        if (this.isForceCenterVertical()) {
            this._displayY = forceCenterDisplayY;
        }
    };

    var _Game_Map_scrollLeft      = Game_Map.prototype.scrollLeft;
    Game_Map.prototype.scrollLeft = function(distance) {
        var forceCenterDisplayX = this._displayX - distance;
        _Game_Map_scrollLeft.apply(this, arguments);
        if (this.isForceCenterHorizontal()) {
            this._displayX = forceCenterDisplayX;
        }
    };

    var _Game_Map_scrollRight      = Game_Map.prototype.scrollRight;
    Game_Map.prototype.scrollRight = function(distance) {
        var forceCenterDisplayX = this._displayX + distance;
        _Game_Map_scrollRight.apply(this, arguments);
        if (this.isForceCenterHorizontal()) {
            this._displayX = forceCenterDisplayX;
        }
    };

    var _Game_Map_scrollUp = Game_Map.prototype.scrollUp;
    Game_Map.prototype.scrollUp = function(distance) {
        var forceCenterDisplayY = this._displayY - distance;
        _Game_Map_scrollUp.apply(this, arguments);
        if (this.isForceCenterVertical()) {
            this._displayY = forceCenterDisplayY;
        }
    };
})();


code:
//ショップ画面で装備アイテムの全情報を表示
/*:

@plugindesc
ショップで装備品を購入する際、詳細な情報を
表示することができます

@author
シトラス

*/
Window_ShopStatus.prototype.pageSize = function() {
    return 1;
};
Window_ShopStatus.prototype.drawParamName = function(x, y, paramId) {
    this.changeTextColor(this.systemColor());
    this.drawText(TextManager.param(paramId), x + 5, y -5, 120);
};
Window_ShopStatus.prototype.drawActorEquipInfo = function(x, y, actor) {
    var enabled = actor.canEquip(this._item);
    this.changePaintOpacity(enabled);
    this.resetTextColor();

	//アクターの名前を表示
    //this.drawText(actor.name(), x, y - 30, 168);

    //そのかわりに
    //this.drawText("➥ステータス上昇値", 30,120);

	//ステータスの名前を表示
	for(var i = 0;i < 6;i++){
		this.drawParamName(x + 50, 132 + i*35,i);
	}

    var item1 = this.currentEquippedItem(actor, this._item.etypeId);
    if (enabled) {
        this.drawActorParamChange(x, y, actor, item1);
    }

	//現在装備しているアイテムの名前を表示
    this.drawItemName(item1, x, y + this.lineHeight() - 25);
    this.changePaintOpacity(true);
};

Window_ShopStatus.prototype.drawActorParamChange = function(x, y, actor, item1) {
    var width = this.contents.width - this.textPadding() - x;
    var changeParams = new Array(8);
	for(var i = 0;i < 6;i++){
		changeParams[i] = this._item.params[i] - (item1 ? item1.params[i] : 0);
		console.log(changeParams[i] );
		this.changeTextColor(this.paramchangeTextColor(changeParams[i] ) );
		this.drawText( (changeParams[i] > 0 ? '+' : '') + changeParams[i], -140, 55 + y + i*35, width, "right");
	}
};

Window_ShopStatus.prototype.drawPossession = function(x, y) {
    var width = this.contents.width - this.textPadding() - x;
    var possessionWidth = this.textWidth('0000');
    this.changeTextColor(this.systemColor());
    this.drawText(TextManager.possession, x, y, width - possessionWidth);
    this.resetTextColor();
    this.drawText($gameParty.numItems(this._item), x - 140, y, width, 'right');
};

repo_name: Rexhunk/karryn

license: unknown


code:
//=============================================================================
// SimpleMsgSideView.js
//=============================================================================

/*:
 * @plugindesc at sideview battle, only display item/skill names.
 * @author Sasuke KANNAZUKI
 *
 * @param displayAttack
 * @desc Whether to display normal attack. 1:yes 0:no
 * @default 0
 *
 * @param position
 * @desc Skill name display position. 0:left, 1:center
 * @default 1
 *
 * @help This plugin does not provide plugin commands.
 *
 * By not displaying the log and only displaying the skill name,
 * the speed of battle will increase slightly.
 */

/*:ja
 * @plugindesc サイドビューバトルで技/アイテムの名前のみ表示します。
 * @author 神無月サスケ
 *
 * @param displayAttack
 * @desc 通常攻撃も表示するか (1:する 0:しない)
 * @default 0
 *
 * @param position
 * @desc 技名を表示する位置 (0:左寄せ, 1:中央)
 * @default 1
 *
 * @help このプラグインには、プラグインコマンドはありません。
 *
 * ログを表示せず、技名のみを表示することで、戦闘のテンポが若干高速になります。
 */

(function() {

  var parameters = PluginManager.parameters('SimpleMsgSideView');
  var displayAttack = Number(parameters['displayAttack']) != 0;
  var position = Number(parameters['position'] || 1);

  var _Window_BattleLog_addText = Window_BattleLog.prototype.addText;
  Window_BattleLog.prototype.addText = function(text) {
   if($gameSystem.isSideView()){
     this.refresh();
     this.wait();
     return;  // not display battle log
   }
   _Window_BattleLog_addText.call(this, text);
  };

  // for sideview battle only
  Window_BattleLog.prototype.addItemNameText = function(itemName) {
    this._lines.push(itemName);
    this.refresh();
    this.wait();
  };

  var _Window_BattleLog_displayAction =
   Window_BattleLog.prototype.displayAction;
  Window_BattleLog.prototype.displayAction = function(subject, item) {
    if($gameSystem.isSideView()){
      if(displayAttack ||
       !(DataManager.isSkill(item) && item.id == subject.attackSkillId())) {
　　    this.push('addItemNameText', item.name);  // display item/skill name
      } else {
        this.push('wait');
      }
      return;
    }
    _Window_BattleLog_displayAction.call(this, subject, item);
  };

  // to put skill/item name at center
  var _Window_BattleLog_drawLineText = Window_BattleLog.prototype.drawLineText;
  Window_BattleLog.prototype.drawLineText = function(index) {
    if($gameSystem.isSideView() && position == 1){
      var rect = this.itemRectForText(index);
      this.contents.clearRect(rect.x, rect.y, rect.width, rect.height);
      this.drawText(this._lines[index], rect.x, rect.y,
       rect.width, 'center');
      return;
    }
    _Window_BattleLog_drawLineText.call(this, index);
  };

})();


code:
//=============================================================================
// StateRingIcon.js
// ----------------------------------------------------------------------------
// Copyright (c) 2015-2016 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.3.2 2017/06/22 一度に複数のステートが解除された場合に一部アイコンが正しく消去されない問題を修正
// 1.3.1 2017/05/05 残りターン数のフォントサイズ指定機能を追加
// 1.3.0 2017/05/05 味方の残りターン数も表示する機能を追加
// 1.2.1 2017/05/05 1.2.0の機能でプラグイン等の機能により残りターン数が小数になった場合に切り上げする仕様を追加
// 1.2.0 2017/05/04 ステートおよびバフの残りターン数を表示する機能を追加
// 1.1.0 2017/02/28 ステートアイコンを横に並べる機能を追加。ステート数によって演出を分けることもできます。
// 1.0.0 2016/08/08 初版
// ----------------------------------------------------------------------------
// [Blog]   : http://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc Ring State Plugin
 * @author triacontane
 *
 * @param RadiusX
 * @desc 横方向の半径の値です。
 * @default 64
 *
 * @param RadiusY
 * @desc 縦方向の半径の値です。
 * @default 16
 *
 * @param CycleDuration
 * @desc アイコンが一周するのに掛かる時間(フレーム数)です。0に指定すると回転しなくなります。
 * @default 60
 *
 * @param LineViewLimit
 * @desc ステート数がこの値以下の場合はリングアイコンではなく1列で表示されます。0にすると常に1列表示になります。
 * @default 1
 *
 * @param Reverse
 * @desc 回転方向が反時計回りになります。(Default:OFF)
 * @default OFF
 *
 * @param ShowTurnCount
 * @desc ステートの残りターン数を表示します。
 * @default ON
 *
 * @param TurnCountX
 * @desc ターン数のX座標表示位置を調整します。デフォルトはアイコンの右下になります。
 * @default 0
 *
 * @param TurnCountY
 * @desc ターン数のY座標表示位置を調整します。デフォルトはアイコンの右下になります。
 * @default 0
 *
 * @param ShowActorTurnCount
 * @desc 味方のステートの残りターン数を表示します。使用しているプラグイン次第で動作しない場合もあります。
 * @default ON
 *
 * @param FontSize
 * @desc 残りターン数表示のフォントサイズです。
 * @default 32
 *
 * @help 敵キャラのステートが複数有効になった場合の
 * ステートアイコンを時計回りに回転させてリングで表現します。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * This plugin is released under the MIT License.
 */
/*:ja
 * @plugindesc リングステートプラグイン
 * @author トリアコンタン
 *
 * @param X半径
 * @desc 横方向の半径の値です。(Default:64)
 * @default 64
 *
 * @param Y半径
 * @desc 縦方向の半径の値です。(Default:16)
 * @default 16
 *
 * @param 周期
 * @desc アイコンが一周するのに掛かる時間(フレーム数)です。0に指定すると回転しなくなります。
 * @default 60
 *
 * @param 一列配置上限
 * @desc ステート数がこの値以下の場合はリングアイコンではなく1列で表示されます。0にすると常に1列表示になります。
 * @default 1
 *
 * @param 反時計回り
 * @desc 回転方向が反時計回りになります。(Default:OFF)
 * @default OFF
 *
 * @param ターン数表示
 * @desc ステートの残りターン数を表示します。
 * @default ON
 *
 * @param ターン数X座標
 * @desc ターン数のX座標表示位置を調整します。デフォルトはアイコンの右下になります。
 * @default 0
 *
 * @param ターン数Y座標
 * @desc ターン数のY座標表示位置を調整します。デフォルトはアイコンの右下になります。
 * @default 0
 *
 * @param 味方ターン数表示
 * @desc 味方のステートの残りターン数を表示します。使用しているプラグイン次第で動作しない場合もあります。
 * @default ON
 *
 * @param フォントサイズ
 * @desc 残りターン数表示のフォントサイズです。
 * @default 32
 *
 * @help 敵キャラのステートが複数有効になった場合のステートアイコンを時計回りに
 * 回転させてリング表示したり一列に並べて表示したりできます。
 *
 * また、各ステートの残りターンを表示することもできます。
 *
 * 追加機能として、味方のステートの残りターンを表示することもできます。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function() {
    'use strict';
    var pluginName = 'StateRingIcon';

    var getParamNumber = function(paramNames, min, max) {
        var value = getParamOther(paramNames);
        if (arguments.length < 2) min = -Infinity;
        if (arguments.length < 3) max = Infinity;
        return (parseInt(value, 10) || 0).clamp(min, max);
    };

    var getParamBoolean = function(paramNames) {
        var value = getParamOther(paramNames);
        return (value || '').toUpperCase() === 'ON';
    };

    var getParamOther = 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 null;
    };

    //=============================================================================
    // パラメータの取得と整形
    //=============================================================================
    var paramRadiusX            = getParamNumber(['RadiusX', 'X半径'], 0);
    var paramRadiusY            = getParamNumber(['RadiusY', 'Y半径'], 0);
    var paramCycleDuration      = getParamNumber(['CycleDuration', '周期'], 0);
    var paramReverse            = getParamBoolean(['Reverse', '反時計回り']);
    var paramLineViewLimit      = getParamNumber(['LineViewLimit', '一列配置上限'], 0);
    var paramShowTurnCount      = getParamBoolean(['ShowTurnCount', 'ターン数表示']);
    var paramTurnCountX         = getParamNumber(['TurnCountX', 'ターン数X座標']);
    var paramTurnCountY         = getParamNumber(['TurnCountY', 'ターン数Y座標']);
    var paramShowActorTurnCount = getParamBoolean(['ShowActorTurnCount', '味方ターン数表示']);
    var paramFontSize           = getParamNumber(['FontSize', 'フォントサイズ']) || 32;

    //=============================================================================
    // Game_BattlerBase
    //  ステートの残りターン数を取得します。
    //=============================================================================
    Game_BattlerBase.prototype.stateTurns = function() {
        var stateTurns = this.states().map(function(state) {
            if (state.iconIndex <= 0) {
                return null;
            } else if (state.autoRemovalTiming <= 0) {
                return '';
            } else {
                return Math.ceil(this._stateTurns[state.id]);
            }
        }, this);
        return stateTurns.filter(function(turns) {
            return turns !== null;
        });
    };

    Game_BattlerBase.prototype.buffTurns = function() {
        return this._buffTurns.filter(function(turns, index) {
            return this._buffs[index] !== 0;
        }, this);
    };

    Game_BattlerBase.prototype.allTurns = function() {
        return this.stateTurns().concat(this.buffTurns());
    };

    //=============================================================================
    // Sprite_StateIcon
    //  ステートアイコンを回転させます。
    //=============================================================================
    var _Sprite_StateIcon_initMembers      = Sprite_StateIcon.prototype.initMembers;
    Sprite_StateIcon.prototype.initMembers = function() {
        _Sprite_StateIcon_initMembers.apply(this, arguments);
        this._icons        = [];
        this._iconsSprites = [];
    };

    Sprite_StateIcon.prototype.update = function() {
        Sprite.prototype.update.call(this);
        this._animationCount++;
        if (this._animationCount >= this.getCycleDuration()) {
            this._animationCount = 0;
        }
        this.updateRingIcon();
    };

    Sprite_StateIcon.prototype.updateRingIcon = function() {
        var icons = [];
        if (this._battler && this._battler.isAlive()) {
            icons = this._battler.allIcons();
        }
        if (!this._icons.equals(icons)) {
            this._icons = icons;
            this.setupRingIcon();
        }
        if (this._iconsSprites.length > paramLineViewLimit && paramLineViewLimit > 0) {
            this.updateRingPosition();
        } else {
            this.updateNormalPosition();
        }
        if (paramShowTurnCount) {
            this.updateTurns();
        }
        this._sortChildren();
    };

    Sprite_StateIcon.prototype.updateRingPosition = function() {
        this._iconsSprites.forEach(function(sprite, index) {
            sprite.setRingPosition(this.getIconRadian(index));
        }, this);
    };

    Sprite_StateIcon.prototype.updateNormalPosition = function() {
        this._iconsSprites.forEach(function(sprite, index) {
            sprite.setNormalPosition(index, this._iconsSprites.length);
        }, this);
    };

    Sprite_StateIcon.prototype.updateTurns = function() {
        var turns = this._battler.allTurns();
        this._icons.forEach(function(icon, index) {
            this._iconsSprites[index].setIconTurn(turns[index]);
        }, this);
    };

    Sprite_StateIcon.prototype.getIconRadian = function(index) {
        var radian = (this._animationCount / this.getCycleDuration() + index / this._iconsSprites.length) * Math.PI * 2;
        if (paramReverse) radian *= -1;
        return radian;
    };

    Sprite_StateIcon.prototype.getCycleDuration = function() {
        return paramCycleDuration || Infinity;
    };

    Sprite_StateIcon.prototype.setupRingIcon = function() {
        this._icons.forEach(function(icon, index) {
            if (!this._iconsSprites[index]) this.makeNewIcon(index);
            this._iconsSprites[index].setIconIndex(icon);
        }, this);
        var spriteLength = this._iconsSprites.length;
        for (var i = this._icons.length; i < spriteLength; i++) {
            this.popIcon();
        }
    };

    Sprite_StateIcon.prototype.makeNewIcon = function(index) {
        var iconSprite            = new Sprite_StateIconChild();
        this._iconsSprites[index] = iconSprite;
        this.addChild(iconSprite);
    };

    Sprite_StateIcon.prototype.popIcon = function() {
        var removedSprite = this._iconsSprites.pop();
        this.removeChild(removedSprite);
    };

    Sprite_StateIcon.prototype._sortChildren = function() {
        this.children.sort(this._compareChildOrder.bind(this));
    };

    Sprite_StateIcon.prototype._compareChildOrder = function(a, b) {
        if (a.z !== b.z) {
            return a.z - b.z;
        } else if (a.y !== b.y) {
            return a.y - b.y;
        } else {
            return a.spriteId - b.spriteId;
        }
    };

    //=============================================================================
    // Sprite_StateIconChild
    //  ステートアイコンを回転させます。
    //=============================================================================
    function Sprite_StateIconChild() {
        this.initialize.apply(this, arguments);
    }

    Sprite_StateIconChild.prototype             = Object.create(Sprite_StateIcon.prototype);
    Sprite_StateIconChild.prototype.constructor = Sprite_StateIconChild;

    Sprite_StateIconChild.prototype.initialize = function() {
        Sprite_StateIcon.prototype.initialize.call(this);
        this.visible     = false;
        this._turnSprite = null;
        this._turn       = 0;
    };

    Sprite_StateIconChild.prototype.update = function() {};

    Sprite_StateIconChild.prototype.setIconIndex = function(index) {
        this._iconIndex = index;
        this.updateFrame();
    };

    Sprite_StateIconChild.prototype.setIconTurn = function(turn) {
        this.makeTurnSpriteIfNeed();
        if (this._turn === turn) return;
        this._turn = turn;
        this.refreshIconTurn();
    };

    Sprite_StateIconChild.prototype.refreshIconTurn = function() {
        var bitmap = this._turnSprite.bitmap;
        bitmap.clear();
        bitmap.drawText(this._turn, 0, 0, bitmap.width, bitmap.height, 'center');
    };

    Sprite_StateIconChild.prototype.makeTurnSpriteIfNeed = function() {
        if (this._turnSprite) return;
        var sprite             = new Sprite();
        sprite.bitmap          = new Bitmap(Sprite_StateIcon._iconWidth, Sprite_StateIcon._iconHeight);
        sprite.bitmap.fontSize = paramFontSize;
        sprite.x               = paramTurnCountX;
        sprite.y               = paramTurnCountY;
        this._turnSprite       = sprite;
        this.addChild(this._turnSprite);
    };

    Sprite_StateIconChild.prototype.setRingPosition = function(radian) {
        this.x       = Math.cos(radian) * paramRadiusX;
        this.y       = Math.sin(radian) * paramRadiusY;
        this.visible = true;
    };

    Sprite_StateIconChild.prototype.setNormalPosition = function(index, max) {
        this.x       = ((-max + 1) / 2 + index) * Sprite_StateIcon._iconWidth;
        this.y       = 0;
        this.visible = true;
    };

    //=============================================================================
    // Window_BattleStatus
    //  味方の残りターン数を表示します。
    //=============================================================================
    if (paramShowActorTurnCount) {
        var _Window_BattleStatus_drawActorIcons      = Window_BattleStatus.prototype.drawActorIcons;
        Window_BattleStatus.prototype.drawActorIcons = function(actor, x, y, width) {
            this._drawIconCount = 0;
            _Window_BattleStatus_drawActorIcons.apply(this, arguments);
            this.drawActorIconsTurn(actor, x, y);
        };

        Window_BattleStatus.prototype.drawActorIconsTurn = function(actor, x, y) {
            var turns = actor.allTurns();
            this.contents.fontSize = paramFontSize;
            for (var i = 0; i < this._drawIconCount; i++) {
                this.drawText(turns[i], x + Window_Base._iconWidth * i, y + 2, Window_Base._iconWidth, 'right');
            }
            this.resetFontSettings();
            this._drawIconCount = undefined;
        };

        var _Window_BattleStatus_drawIcon      = Window_BattleStatus.prototype.drawIcon;
        Window_BattleStatus.prototype.drawIcon = function(iconIndex, x, y) {
            _Window_BattleStatus_drawIcon.apply(this, arguments);
            if (this._drawIconCount !== undefined) {
                this._drawIconCount++;
            }
        };
    }
})();


code:
//=============================================================================
// TDDP_PreloadManager.js
// Version: 1.1.1
//=============================================================================

var Imported = Imported || {};
Imported.TDDP_PreloadManager = "1.1.1";

var TDDP = TDDP || {};
TDDP.PreloadManager = TDDP.PreloadManager || {};
//=============================================================================
/*:
 * @plugindesc 1.1.1 Preload resources on scene/map load as well as game startup for a smoother gameplay experience.          id:TDDP_PreloadManager
 *
 * @author Tor Damian Design / Galenmereth
 *
 * @param Preload On Map Load
 * @desc If you want to preload all assets found on a map upon loading the map, set this to true.
 * @default true
 *
 * @param Preload System Music
 * @desc If you want to preload all the Music specified in the Database System tab on startup, set this to true.
 * @default false
 *
 * @param Preload System SFX
 * @desc If you want to preload all the SFX specified in the Database System tab on startup, set this to true.
 * @default false
 *
 * @param Print Debug to Console
 * @desc If you want to see debug information in the console (F8) set this to true.
 * @default false
 *
 * @help =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
 * Introduction / Table of contents
 * =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
 * TDDP PreloadManager lets you preload resources on both startup (before the
 * game title screen displays) and on map load (in between map transfers) to
 * ensure resources such as pictures, music and sound effects are preloaded
 * before called.
 *
 * By default MV will stream the resources as they are required. This plugin
 * serves as an alternative for a smoother gameplay experience at the cost of
 * more bandwidth.
 *
 * This Plugin will load all resources in all event pages on the map,
 * regardless of if they will be triggered by the player at any time or not.
 * Since page conditions cannot be predicted as they are dependent on player
 * interaction, this is a necessity to ensure the right files are ready and
 * preloaded.
 *
 * For updates and easy to use documentation, please go to the plugin's website:
 * http://mvplugins.tordamian.com/?p=29
 *
 * There you can also download a PDF of the documentation for offline use, and
 * having the documentation in one cleanly presented place means you can always
 * be sure it's the most recent available.
 *
 * Table of contents
 * -----------------
 * 1. Installation
 * 2. Advanced Configuration
 * 3. Terms & Conditions
 *
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * 1. Installation
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * Drag and drop plugin .js file into your project's js/plugins folder, then
 * enable it in the editor interface.
 *
 * Make sure this plugin is placed at the top for maximum compatibility.
 *
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * 2. Advanced Configuration
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * There is an advanced configuration section if you open the plugin .js file
 * in a text editor. Look for BOOT PRELOAD CONFIG -- ADVANCED USERS. This lets
 * you define resources to preload on boot manually.
 *
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * 3. Terms & Conditions
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * This plugin is free for both non-commercial and commercial use. Please see
 * http://mvplugins.tordamian.com/terms-of-use for the full terms of use.
 *
 * A big thank you to Degica for making this plugin free for commercial use for
 * everyone!
 */
/*
* =============================================================================
* BOOT PRELOAD CONFIG -- ADVANCED USERS
* =============================================================================
*
* Tip: You can omit the filename, it will assume .png since this is what MV
* prefers.
*
* -----------------------------------------------------------------------------
* Image files to load on boot:
* -----------------------------------------------------------------------------
* Keys:
*   animation
*   battleback1
*   battleback2
*   character
*   enemy
*   face
*   parallax
*   picture
*   svActor
*   svEnemy
*   system
*   tileset
*   title1
*   title2
*
* If you have subfolders in any of these folders, just prepend that to the
* filename, like this example, where the picture "arrow" is in the "cursors"
* subfolder within the system folder:
*
* system: [
*   "balloon",
*   "cursors/arrow"
* ]
*/
TDDP.bootPreloadImages = {
    /* Example
    face: [
        "Actor3"
    ],

    character: [
      "subfolder/myOtherFile"

    ],

    tileset: [
    ],
    */

    system: [
      "WindowCursor"
    ],

    picture: [
    "menu1_status", "menu2_skill", "menu3_equip", "menu5_result", "menu6_item",
    "M_Face_Down001", "M_Face_Down002", "M_Face_Down003", "M_Face_Down004", "M_Face_Down005", "M_Face_Down006", "M_Face_Down007", "M_Face_Down008", "M_Face_Down009", "M_Face_Down010",
    "M_Face_Down011", "M_Face_Down012", "M_Face_Down013", "M_Face_Down014", "M_Face_Down015", "M_Face_Down016", "M_Face_Down017", "M_Face_Down018", "M_Face_Down019", "M_Face_Down020",
    "M_Face_Down021", "M_Face_Down022", "M_Face_Down023",
    "M_Face_Up001", "M_Face_Up002", "M_Face_Up003", "M_Face_Up004", "M_Face_Up005", "M_Face_Up006", "M_Face_Up007", "M_Face_Up008", "M_Face_Up009", "M_Face_Up010",
    "M_Face_Up011", "M_Face_Up012", "M_Face_Up013", "M_Face_Up014", "M_Face_Up015", "M_Face_Up016", "M_Face_Up017", "M_Face_Up018", "M_Face_Up019", "M_Face_Up020",
    "M_Face_Up021", "M_Face_Up022", "M_Face_Up023", "M_Face_Up024", "M_Face_Up025", "M_Face_Up026", "M_Face_Up027", "M_Face_Up028", "M_Face_Up029",
    "battle_face_attack", "battle_face_buff", "battle_face_damage", "battle_face_heal", "battle_face_lose", "battle_face_skill", "battle_face_win",
    "battle_face01", "battle_face02", "battle_face03", "battle_face04", "battle_face05"
    ],

}
/*
*
* -----------------------------------------------------------------------------
* BGM files to load on boot
* -----------------------------------------------------------------------------
*/
TDDP.bootPreloadBGM = [
    // "Town1"
]
/*
*
* -----------------------------------------------------------------------------
* BGS files to load on boot
* -----------------------------------------------------------------------------
*/
TDDP.bootPreloadBGS = [
    // "Quake"
]
/*
*
* -----------------------------------------------------------------------------
* SFX files to load on boot.
* -----------------------------------------------------------------------------
*/
TDDP.bootPreloadSE = [
    // "Open2"
]
/*
*
* -----------------------------------------------------------------------------
* ME files to load on boot.
* -----------------------------------------------------------------------------
*/
TDDP.bootPreloadME = [
    // "Shock1"
]
//=============================================================================
// END OF BOOT PRELOAD CONFIG
//=============================================================================
var PreloadManager;
(function() {
    "use strict";
    // Skip preloading if event test
    if (DataManager.isEventTest()) return;
    //=============================================================================
    // Setting up parameters
    //=============================================================================
    var parameters         = $plugins.filter(function(p){return p.description.contains("id:TDDP_PreloadManager")})[0].parameters;
    var preloadOnMapLoad   = Boolean(parameters['Preload On Map Load']       === 'true' || false);
    var preloadSystemMusic = Boolean(parameters['Preload System Music']      === 'true' || false);
    var preloadSystemSFX   = Boolean(parameters['Preload System SFX']        === 'true' || false);
    var debug              = Boolean(parameters['Print Debug to Console']    === 'true' || false);
    if(debug) console.log("========= TDDP PreloadManager: Debug mode on =========")

    PreloadManager = function() {
        throw new Error('This is a static class');
    };

    PreloadManager._callOnComplete = false;
    PreloadManager._filesLoaded = 0;
    PreloadManager._filesTotal = 0;
    PreloadManager._ready = false;
    PreloadManager._preloadedMaps = [];
    PreloadManager._preloadedAudio = [];
    PreloadManager._sessionRequestedImages = [];

    PreloadManager.callOnComplete = function(func) {
        this._callOnComplete = func;
    };

    PreloadManager.start = function() {
        this._ready = true;
        this._sessionRequestedImages = [];
        this.controlIfReady(true);
    };

    PreloadManager._projectPath = function() {
        var path = window.location.pathname.replace(/\/[^\/]*$/, "/");
        if (path.match(/^\/([A-Z]\:)/)) {
            path = path.slice(1);
        }
        return decodeURIComponent(path);
    };

    PreloadManager.controlAudioFileExistence = function(folder, filename) {
        this.controlFileExistence("audio/" + folder + "/", filename, [".m4a", ".ogg"]);
    };

    PreloadManager.controlFileExistence = function(folder, filename, extensions) {
        if (StorageManager.isLocalMode() && Utils.isOptionValid('test')) {
            var fs = require("fs");
            var path = this._projectPath() + folder + filename;
            for (var i=0, max=extensions.length; i < max; i++) {
                if (fs.existsSync(path + extensions[i])) return true;
            }
            throw new Error("PreloadManager: File " + folder + filename + " could not be found. Does it exist?")
        }
    };

    PreloadManager.preloadImages = function(type, filename, hue) {
        if(filename.constructor === Array) {
            for(var i = 0; i < filename.length; i++) {
                this.preloadImages(type, filename[i], hue);
            }
        } else {
            if(filename.length > 0) {
                if (this._isImageRequested(type, filename)) return;
                var func = "reserve" + type.charAt(0).toUpperCase() + type.substr(1).toLowerCase();
                if(typeof ImageManager[func] === 'undefined') {
                    e = "PreloadManager: " + type + " is not a valid image load key. Check your configuration.";
                    Graphics.printError(e);
                    throw new Error(e);
                }
                this._increaseFileNums();
                ImageManager[func](filename, hue, Utils.generateRuntimeId()).addLoadListener(this.onFileLoaded.bind(this, "(" + type + ") " + filename));
                this._registerRequestedImage(type, filename);
            }
        }
    };

    PreloadManager.preloadBGM = function(audioObject) {
        this.preloadAudio("bgm", audioObject);
    };

    PreloadManager.preloadBGS = function(audioObject) {
        this.preloadAudio("bgs", audioObject);
    };

    PreloadManager.preloadSE = function(audioObject) {
        this.preloadAudio("se", audioObject);
    }

    PreloadManager.preloadME = function(audioObject) {
        this.preloadAudio("me", audioObject);
    }

    PreloadManager.preloadAudio = function(type, audioObject) {
        if (!audioObject) return;
        if(audioObject.constructor === Array) {
            for(var i = 0, max = audioObject.length; i < max; i++) {
                this.preloadAudio(type, audioObject[i]);
            }
        } else {
            if(audioObject.name.length <= 0) return;
            if(this.isAudioCached(type, audioObject.name)) {
                if(debug) console.log(type + "/" + audioObject.name + " already preloaded; skipping.");
                return;
            }
            this._increaseFileNums();
            this.controlAudioFileExistence(type, audioObject.name);
            var bufferObject = AudioManager.createBuffer(type, audioObject.name);
            bufferObject.addLoadListener(this.onAudioFileLoaded.bind(this, type, audioObject.name));
        }
    }

    PreloadManager.preloadAnimation = function(animationId) {
        var animation = $dataAnimations[animationId];
        this.preloadImages('animation', [animation.animation1Name, animation.animation2Name]);
        for(var i=0, max=animation.timings.length; i<max; i++) {
            var se = animation.timings[i].se;
            this.preloadSE(se);
        }
    }

    PreloadManager.preloadMapResources = function(mapId) {
        this._ready = false;
        // Wait and ensure map is loaded
        if(!DataManager.isMapDataLoaded()) return setTimeout(this.preloadMapResources.bind(this, mapId), 100);
        var mapDebugName = mapId + " (" + $dataMapInfos[mapId].name + ")";
        if(this._preloadedMaps.indexOf(mapId) > -1) {
            if(debug) console.log("Map " + mapDebugName + " already preloaded, skipping.");
        } else {
            if(debug) console.log("Map " + mapDebugName + " preload starting.");
            // Map is loaded, preload resources now
            this.preloadBGM($dataMap.bgm);
            this.preloadBGS($dataMap.bgs);
            this.preloadImages('battleback1', $dataMap.battleback1Name);
            this.preloadImages('battleback2', $dataMap.battleback2Name);
            this.preloadImages('parallax', $dataMap.parallaxName);
            // Cycle events and load appropriate resources
            for(var i = 0, max = $dataMap.events.length; i < max; i++) {
                var event = $dataMap.events[i];
                if(!event) continue;
                for(var p = 0, pMax = event.pages.length; p < pMax; p++) {
                    var page = event.pages[p];
                    // Preload character graphic for page
                    this.preloadImages('character', page.image.characterName);
                    for(var l = 0, lMax = page.list.length; l < lMax; l++) {
                        var listEntry = page.list[l];
                        this.preloadEventListEntry(listEntry);
                    }
                }
            };
            this._preloadedMaps.push(mapId);
        }
        this.start(true);
    };

    PreloadManager.preloadEventListEntry = function(listEntry) {
        var code = listEntry.code;
        var parameters = listEntry.parameters;
        switch(code) {
            // Show Picture
            case 231:
                this.preloadImages('picture', parameters[1]);
                break;
            // Play BGM
            case 241:
                this.preloadBGM(parameters[0]);
                break;
            // Play BGS
            case 245:
                this.preloadBGS(parameters[0]);
                break;
            // Play ME
            case 249:
                this.preloadME(parameters[0]);
                break;
            // Play SE
            case 250:
                this.preloadSE(parameters[0]);
                break;
            // Change Parallax
            case 284:
                this.preloadImages('parallax', parameters[0]);
                break;
            // Show Text
            case 101:
                this.preloadImages('face', parameters[0]);
                break;
            // Show Animation
            case 212:
                this.preloadAnimation(parameters[1]);
                break;
        }
    };

    PreloadManager.onFileLoaded = function(filename) {
        this._filesLoaded += 1;
        if(debug) console.log("Loaded file: " + filename + "(" + this._filesLoaded + "/" + this._filesTotal + ")");
        this.controlIfReady();
    };

    PreloadManager.onAudioFileLoaded = function(type, filename) {
        this._cacheAudio(type, filename);
        this.onFileLoaded("(" + type + ") " + filename);
    };

    PreloadManager.controlIfReady = function(manual) {
        if(this.isReady()) {
            if(debug && !manual) console.log("All files loaded (" + this._filesLoaded + "/" + this._filesTotal + ")");
            this._filesTotal = this._filesLoaded = 0;
            if(this._callOnComplete) {
                this._callOnComplete.call();
            }
        }
    }

    PreloadManager._cacheAudio = function(path, filename) {
        this._preloadedAudio.push(path + filename);
    };

    PreloadManager._registerRequestedImage = function(type, filename) {
        this._sessionRequestedImages.push(type + filename);
    };

    PreloadManager._isImageRequested = function(type, filename) {
        return this._sessionRequestedImages.indexOf(type + filename) > -1;
    }

    PreloadManager.isAudioCached = function(path, filename) {
        return this._preloadedAudio.indexOf(path + filename) > -1;
    }

    PreloadManager._increaseFileNums = function() {
        this._ready = false;
        this._filesTotal +=1;
    };

    PreloadManager.isReady = function() {
        if(this._filesLoaded >= this._filesTotal) {
            if(this._ready || this._filesTotal == 0) {
                return true;
            }
        }
        return false;
    };

    var _isDatabaseLoaded = function() {
        DataManager.checkError();
        for (var i = 0; i < DataManager._databaseFiles.length; i++) {
            if (!window[DataManager._databaseFiles[i].name]) {
                return false;
            }
        }
        return true;
    }

    //=============================================================================
    // Scene_Boot extensions
    //=============================================================================
    var Scene_Boot_prototype_create =
        Scene_Boot.prototype.create;
    Scene_Boot.prototype.create = function() {
        Scene_Boot_prototype_create.call(this);
        this._performPreload();
    };

    Scene_Boot.prototype._performPreload = function() {
        if(!_isDatabaseLoaded()) return setTimeout(this._performPreload.bind(this), 5);
        if(debug) console.log("========= TDDP PreloadManager: Boot Preload =========");
        // Preload bootPreloadImages resources
        if(TDDP.bootPreloadImages) {
            for(var key in TDDP.bootPreloadImages) {
                if(TDDP.bootPreloadImages.hasOwnProperty(key)) {
                    PreloadManager.preloadImages(key, TDDP.bootPreloadImages[key]);
                }
            }
        }
        // Preload bootPreloadBGM resources
        if(TDDP.bootPreloadBGM && TDDP.bootPreloadBGM.length > 0) {
            for(var i = 0, max = TDDP.bootPreloadBGM.length; i < max; i++) {
                PreloadManager.preloadBGM({
                    name: TDDP.bootPreloadBGM[i],
                    volume: 90,
                    pitch: 100
                });
            }
        }
        // Preload bootPreloadBGS resources
        if(TDDP.bootPreloadBGS && TDDP.bootPreloadBGS.length > 0) {
            for(var i = 0, max = TDDP.bootPreloadBGS.length; i < max; i++) {
                PreloadManager.preloadBGS({
                    name: TDDP.bootPreloadBGS[i],
                    volume: 90,
                    pitch: 100
                });
            }
        }
        // Preload bootPreloadSE resources
        if(TDDP.bootPreloadSE && TDDP.bootPreloadSE.length > 0) {
            for(var i = 0, max = TDDP.bootPreloadSE.length; i < max; i++) {
                PreloadManager.preloadSE({
                    name: TDDP.bootPreloadSE[i],
                    volume: 90,
                    pitch: 100
                });
            }
        }
        // Preload bootPreloadME resources
        if(TDDP.bootPreloadME && TDDP.bootPreloadME.length > 0) {
            for(var i = 0, max = TDDP.bootPreloadME.length; i < max; i++) {
                PreloadManager.preloadME({
                    name: TDDP.bootPreloadME[i],
                    volume: 90,
                    pitch: 100
                });
            }
        }
        // Preload system SFX if set
        if(preloadSystemSFX) {
            if(debug) console.log("========= TDDP PreloadManager: Boot Preloading System SFX =========");
            for(var i = 0, max = $dataSystem.sounds.length; i < max; i++) {
                PreloadManager.preloadSE($dataSystem.sounds[i]);
            }
        }
        // Preload system BGM and ME if set
        if(preloadSystemMusic) {
            if(debug) console.log("========= TDDP PreloadManager: Boot Preloading System Music =========");
            [
                $dataSystem.titleBgm,
                $dataSystem.battleBgm,
                $dataSystem.boat.bgm,
                $dataSystem.ship.bgm,
                $dataSystem.airship.bgm,
            ].forEach(function(bgm) {
                PreloadManager.preloadBGM(bgm);
            });
            [
                $dataSystem.victoryMe,
                $dataSystem.defeatMe,
                $dataSystem.gameoverMe,
            ].forEach(function(me) {
                PreloadManager.preloadME(me);
            });
        }
        PreloadManager.start();
    };

    //=============================================================================
    // DataManager extensions
    //=============================================================================
    if (preloadOnMapLoad) {
        var DataManager_loadMapData =
            DataManager.loadMapData;
        DataManager.loadMapData = function(mapId) {
            if(debug) console.log("========= TDDP PreloadManager: Map Preload =========");
            this._preloaded = false;
            DataManager_loadMapData.call(this, mapId);
            PreloadManager.preloadMapResources(mapId);
            PreloadManager.callOnComplete(this._onPreloadDone.bind(this));
        }

        DataManager._onPreloadDone = function() {
            this._preloaded = true;
        }

        var DataManager_isMapLoaded =
            DataManager.isMapLoaded;
        DataManager.isMapLoaded = function() {
            return (this.isMapDataLoaded() && this._preloaded);
        }

        DataManager.isMapDataLoaded = function() {
            return DataManager_isMapLoaded.call(this);
        }
    }

    //=============================================================================
    // Scene_Base extensions
    //=============================================================================
    var Scene_Base_prototype_isReady =
        Scene_Base.prototype.isReady;
    Scene_Base.prototype.isReady = function() {
        if(!PreloadManager.isReady()) return false;
        return Scene_Base_prototype_isReady.call(this);
    }

    //=============================================================================
    // Html5Audio extensions
    //=============================================================================
    /**
     * Sets up the Html5 Audio.
     *
     * @static
     * @method setup
     * @param {String} url The url of the audio file
     */
    Html5Audio.setup = function (url) {
        if (!this._initialized) {
            this.initialize();
        }
        this.clear();
        this._load(url); // Changed from this._url = url to call the _load func; this func is never loaded by default
    };

    /**
     * @static
     * @method _setupEventHandlers
     * @private
     */
    Html5Audio._setupEventHandlers = function () {
        document.addEventListener('touchstart', this._onTouchStart.bind(this));
        document.addEventListener('visibilitychange', this._onVisibilityChange.bind(this));
        this._audioElement.addEventListener("canplaythrough", this._onLoadedData.bind(this)); // Changed from loaddata to canplaythrough, so it knows streaming is stable enough
        this._audioElement.addEventListener("error", this._onError.bind(this));
        this._audioElement.addEventListener("ended", this._onEnded.bind(this));
    };

    /**
     * @static
     * @method _onLoadedData
     * @private
     */
    Html5Audio._onLoadedData = function () {
        this._buffered = true;
        this._onLoad(); // I removed check for this._unlocked because that shouldn't matter
    };
})();


code:
//=============================================================================
// TMPlugin - アニメ付き明かり
// バージョン: 2.0.1
// 最終更新日: 2016/12/02
// 配布元    : http://hikimoki.sakura.ne.jp/
//-----------------------------------------------------------------------------
// Copyright (c) 2016 tomoaky
// Released under the MIT license.
// http://opensource.org/licenses/mit-license.php
//=============================================================================

/*:
 * @plugindesc イベントにアニメーション付きの明かりを表示します。
 *
 * @author tomoaky (http://hikimoki.sakura.ne.jp/)
 *
 * @param range
 * @desc アニメーションの大きさ。
 * 初期値: 0.1 ( 0.1 でプラスマイナス 10% の拡大縮小アニメ)
 * @default 0.1
 *
 * @param defaultZ
 * @desc アニメーションのＺ座標。
 * 初期値: 4
 * @default 4
 *
 * @param frames
 * @desc アニメーションにかけるフレーム数。
 * 初期値: 30
 * @default 30
 *
 * @help
 * 準備:
 *
 *   プラグインと一緒に配布している明かり画像を img/system フォルダに
 *   保存してください。ファイル名は自由に変更可能です。
 *   使用する画像はどんなものでもかまいません、イベントごとに違う画像を
 *   表示することもできます。
 *
 *
 * 使い方:
 *
 *   イベントのメモ欄に <animeLight:ファイル名> というタグを書き込めば、
 *   明かりが表示されるようになります。
 *
 *   明かりの位置もタグを使って調整することができます。
 *
 *   このプラグインは RPGツクールMV Version 1.3.4 で動作確認をしています。
 *
 *
 * メモ欄（イベント）タグ:
 *
 *   <animeLight:TMAnimeLight1 192 24 -44 4>
 *     画像 TMAnimeLight1.png を不透明度 192 で、イベントの足元から右に 24、
 *     上に 44 ドットずらした位置にＺ座標 4 で表示します。
 *     不透明度の最大値は 255 です。
 *
 *   イベントのメモ欄以外に、実行内容の一番上にある注釈コマンド内でも
 *   同様のタグで名前を設定することができます。
 *   メモ欄と注釈の両方にタグがある場合は注釈が優先されます。
 *
 *
 * プラグインコマンド:
 *
 *   animeLight 1 TMAnimeLight1 255 0 -44 4
 *     イベント 1 番に明かりを適用します。
 *     イベント番号、ファイル名、不透明度、Ｘ座標補正、Ｙ座標補正、Ｚ座標
 *     の順に設定してください。
 *     Ｚ座標を省略した場合はプラグインパラメータ animeLightZ の値を
 *     使用します。
 *
 *   animeLight 1
 *     イベント 1 番の明かりを削除します。
 *
 *   イベント番号（ひとつ目の数値）は以下の規則にしたがって対象を指定します。
 *     -1     … プレイヤーを対象にする
 *     0      … コマンドを実行しているイベントを対象にする
 *     1 以上 … その番号のイベントを対象にする
 *
 *
 * おまけ機能:
 *
 *   メモ欄タグ、注釈、プラグインコマンドすべてに共通で、Ｚ座標のあとに
 *   1 という数値を付与することでアニメーションのない画像を表示できます。
 *   例: <animeLight:TMAnimeLight1 192 0 0 4 1>
 *   この場合Ｚ座標を省略することはできません。
 *
 *
 * プラグインパラメータ補足:
 *
 *   defaultZ
 *     明かりの描画順を設定します、これによりイベントよりも下に表示するか
 *     上に表示するかが決まります。
 *     0 … プライオリティ『通常キャラの下』より下
 *     2 … プライオリティ『通常キャラと同じ』より下
 *     4 … プライオリティ『通常キャラと同じ』より上
 *     6 … プライオリティ『通常キャラの上』より上
 */

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

var TMPlugin = TMPlugin || {};
TMPlugin.AnimeLight = {};
TMPlugin.AnimeLight.Parameters = PluginManager.parameters('TMAnimeLight');
TMPlugin.AnimeLight.Range = +(TMPlugin.AnimeLight.Parameters['range'] || 0.1);
TMPlugin.AnimeLight.DefaultZ = +(TMPlugin.AnimeLight.Parameters['defaultZ'] || 4);
TMPlugin.AnimeLight.Frames = +(TMPlugin.AnimeLight.Parameters['frames'] || 30);

if (!TMPlugin.EventBase) {
  TMPlugin.EventBase = true;
  (function() {

    var _Game_Event_setupPage = Game_Event.prototype.setupPage;
    Game_Event.prototype.setupPage = function() {
      _Game_Event_setupPage.call(this);
      if (this._pageIndex >= 0) this.loadCommentParams();
    };

    Game_Event.prototype.loadCommentParams = function() {
      this._commentParams = {};
      var re = /<([^<>:]+)(:?)([^>]*)>/g;
      var list = this.list();
      for (var i = 0; i < list.length; i++) {
        var command = list[i];
        if (command && command.code == 108 || command.code == 408) {
          for (;;) {
            var match = re.exec(command.parameters[0]);
            if (match) {
              this._commentParams[match[1]] = match[2] === ':' ? match[3] : true;
            } else {
              break;
            }
          }
        } else {
          break;
        }
      }
    };

    Game_Event.prototype.loadTagParam = function(paramName) {
      return this._commentParams[paramName] || this.event().meta[paramName];
    };

  })();
} // TMPlugin.EventBase

if (!TMPlugin.InterpreterBase) {
  TMPlugin.InterpreterBase = true;
  (function() {

    Game_Interpreter.prototype.convertEscapeCharactersTM = function(text) {
      text = text.replace(/\\/g, '\x1b');
      text = text.replace(/\x1b\x1b/g, '\\');
      text = text.replace(/\x1bV\[(\d+)\]/gi, function() {
        return $gameVariables.value(parseInt(arguments[1]));
      }.bind(this));
      text = text.replace(/\x1bV\[(\d+)\]/gi, function() {
        return $gameVariables.value(parseInt(arguments[1]));
      }.bind(this));
      text = text.replace(/\x1bN\[(\d+)\]/gi, function() {
        return this.actorNameTM(parseInt(arguments[1]));
      }.bind(this));
      text = text.replace(/\x1bP\[(\d+)\]/gi, function() {
        return this.partyMemberNameTM(parseInt(arguments[1]));
      }.bind(this));
      text = text.replace(/\x1bG/gi, TextManager.currencyUnit);
      return text;
    };

    Game_Interpreter.prototype.actorNameTM = function(n) {
      var actor = n >= 1 ? $gameActors.actor(n) : null;
      return actor ? actor.name() : '';
    };

    Game_Interpreter.prototype.partyMemberNameTM = function(n) {
      var actor = n >= 1 ? $gameParty.members()[n - 1] : null;
      return actor ? actor.name() : '';
    };

  })();
} // TMPlugin.InterpreterBase

(function() {

  //-----------------------------------------------------------------------------
  // Game_Temp
  //

  var _Game_Temp_initialize = Game_Temp.prototype.initialize;
  Game_Temp.prototype.initialize = function() {
    _Game_Temp_initialize.call(this);
    this.createAnimeLightSinTable();
  };

  Game_Temp.prototype.createAnimeLightSinTable = function() {
    this._animeLightSinTable = [];
    for (var i = 0; i < TMPlugin.AnimeLight.Frames; i++) {
      this._animeLightSinTable[i] = Math.sin(Math.PI * i / (TMPlugin.AnimeLight.Frames / 2)) *
                                    TMPlugin.AnimeLight.Range + 1;
    }
  };

  Game_Temp.prototype.animeLightSin = function(index) {
    return this._animeLightSinTable[index];
  };

  //-----------------------------------------------------------------------------
  // Game_CharacterBase
  //

  Game_CharacterBase.prototype.requestAnimeLight = function() {
    this._requestAnimeLight = true;
  };

  Game_CharacterBase.prototype.onChangeAnimeLight = function() {
    this._requestAnimeLight = false;
  };

  Game_CharacterBase.prototype.isAnimeLightRequested = function() {
    return this._requestAnimeLight;
  };

  //-----------------------------------------------------------------------------
  // Game_Event
  //

  var _Game_Event_setupPage = Game_Event.prototype.setupPage;
  Game_Event.prototype.setupPage = function() {
    _Game_Event_setupPage.call(this);
    if (this._pageIndex >= 0) {
      var animeLight = this.loadTagParam('animeLight');
      if (animeLight) {
        var arr = animeLight.split(' ');
        this._animeLight = arr[0];
        this._animeLightOpacity = arr[1] || 255;
        this._animeLightShiftX  = arr[2] || 0;
        this._animeLightShiftY  = arr[3] || 0;
        this._animeLightZ       = arr[4] || TMPlugin.AnimeLight.DefaultZ;
        this._animeLightNone    = arr[5] === '1';
      }
    } else {
      this._animeLight = '';
      this._animeLightOpacity = 255;
      this._animeLightShiftX = 0;
      this._animeLightShiftY = 0;
      this._animeLightZ = TMPlugin.AnimeLight.DefaultZ;
      this._animeLightNone = false;
    }
    this.requestAnimeLight();
  };

  //-----------------------------------------------------------------------------
  // Game_Interpreter
  //

  var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function(command, args) {
    _Game_Interpreter_pluginCommand.call(this, command, args);
    if (command === 'animeLight') {
      var arr = args.map(this.convertEscapeCharactersTM, this);
      var character = this.character(+arr[0]);
      if (character) {
        character._animeLight = arr[1];
        character._animeLightOpacity = arr[2] || 255;
        character._animeLightShiftX  = arr[3] || 0;
        character._animeLightShiftY  = arr[4] || 0;
        character._animeLightZ       = arr[5] || TMPlugin.AnimeLight.DefaultZ;
        character._animeLightNone    = arr[6] === '1';
        character.requestAnimeLight();
      }
    }
  };

  //-----------------------------------------------------------------------------
  // Sprite_Character
  //

  var _Sprite_Character_update = Sprite_Character.prototype.update;
  Sprite_Character.prototype.update = function() {
    _Sprite_Character_update.call(this);
    this.updateAnimeLight();
  };

  Sprite_Character.prototype.updateAnimeLight = function() {
    if (this._character.isAnimeLightRequested() ||
        this._animeLight !== this._character._animeLight) {
      this._character.onChangeAnimeLight();
      this._animeLight = this._character._animeLight;
      if (this._animeLight) {
        if (!this._animeLightSprite) {
          this._animeLightSprite = new Sprite_AnimeLight(this);
          this.parent.addChild(this._animeLightSprite);
        }
        this._animeLightSprite.refresh(this._animeLight);
      } else {
        this.parent.removeChild(this._animeLightSprite);
        this._animeLightSprite = null;
      }
    }
  };

  //-----------------------------------------------------------------------------
  // Sprite_AnimeLight
  //

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

  Sprite_AnimeLight.prototype = Object.create(Sprite.prototype);
  Sprite_AnimeLight.prototype.constructor = Sprite_AnimeLight;

  Sprite_AnimeLight.prototype.initialize = function(characterSprite) {
    Sprite.prototype.initialize.call(this);
    this._characterSprite = characterSprite;
    this.anchor.x = 0.5;
    this.anchor.y = 0.5;
    this.blendMode = 1;
    this._animeCount = 0;
  };

  Sprite_AnimeLight.prototype.update = function() {
    Sprite.prototype.update.call(this);
    this.x = this._characterSprite.x + this._shiftX;
    this.y = this._characterSprite.y + this._shiftY;
    if (!this._characterSprite._character._animeLightNone) {
      this._animeCount++;
      if (this._animeCount === TMPlugin.AnimeLight.Frames) this._animeCount = 0;
      var n = $gameTemp.animeLightSin(this._animeCount);
      this.scale.set(n, n);
    }
  };

  Sprite_AnimeLight.prototype.refresh = function(fileName) {
    this.bitmap = ImageManager.loadSystem(fileName);
    this.opacity = +this._characterSprite._character._animeLightOpacity;
    this._shiftX = +this._characterSprite._character._animeLightShiftX;
    this._shiftY = +this._characterSprite._character._animeLightShiftY;
    this.x = this._characterSprite.x + this._shiftX;
    this.y = this._characterSprite.y + this._shiftY;
    this.z = +this._characterSprite._character._animeLightZ;
  };

})();


code:
//=============================================================================
// TMPlugin - バトルミスト
// バージョン: 2.1.0
// 最終更新日: 2018/11/28
// 配布元　　: https://hikimoki.sakura.ne.jp/
//-----------------------------------------------------------------------------
// Copyright (c) 2016 tomoaky
// Released under the MIT license.
// http://opensource.org/licenses/mit-license.php
//=============================================================================

/*:
 * @plugindesc 戦闘シーンにそれっぽい霧を表示します。
 *
 * @author tomoaky (https://hikimoki.sakura.ne.jp/)
 *
 * @param mistImage
 * @desc 霧として利用する画像ファイル名。
 * 初期値: mist
 * @default mist
 * @require 1
 * @dir img/system/
 * @type file
 *
 * @param mistNumber
 * @desc 表示する霧スプライトの数です。
 * 初期値: 32
 * @default 32
 *
 * @param mistTopSide
 * @desc サイドビューで霧を表示する範囲の上端の座標。
 * 初期値: 200
 * @default 200
 *
 * @param mistRangeSide
 * @desc サイドビューで霧を表示するＹ方向の範囲。
 * 初期値: 300
 * @default 300
 *
 * @param mistTopFront
 * @desc フロントビューで霧を表示する範囲の上端の座標。
 * 初期値: 240
 * @default 240
 *
 * @param mistRangeFront
 * @desc フロントビューで霧を表示するＹ方向の範囲。
 * 初期値: 340
 * @default 340
 *
 * @param mistScale
 * @desc 霧スプライトの拡大率。
 * 初期値: 1
 * @default 1
 *
 * @param mistOpacityMax
 * @desc 霧スプライトの最大不透明度。
 * 初期値: 224
 * @default 224
 *
 * @help
 * TMPlugin - バトルミスト ver2.1.0
 *
 * 使い方:
 *
 *   プラグインと一緒に配布している霧の画像を img/system フォルダに
 *   保存してください。ファイル名は mist.png となっています。
 *   ファイル名を変更しなければならない場合はプラグインパラメータの
 *   mistImage も一緒に変更してください。
 *
 *   ゲーム画面の解像度 816*624 に合わせてあるため、解像度を変更すると
 *   表示が乱れる場合があります。
 *   プラグインパラメータの値をいじって調整してください。
 *
 *   このプラグインは RPGツクールMV Version 1.6.1 で動作確認をしています。
 *
 *   このプラグインはMITライセンスのもとに配布しています、商用利用、
 *   改造、再配布など、自由にお使いいただけます。
 *
 *
 * プラグインコマンド:
 *
 *   stopMist
 *     バトルミストを無効にします。この設定はセーブデータにも記録され、
 *     startMist コマンドが実行されるまで霧が表示されなくなります。
 *
 *   startMist
 *     無効になっているバトルミストを有効にします。
 *
 *   onMistMirror
 *     霧の移動方向を反転します。サイドビュー限定の機能です。この設定は
 *     セーブデータにも記録され、offMistMirror コマンドが実行されるまで
 *     反転したままとなります。
 *
 *   offMistMirror
 *     霧の移動方向反転を解除します。サイドビュー限定の機能です。
 *
 *   setFrontMist
 *     戦闘がサイドビューであっても霧をフロントビューと同じ流れにします。
 *
 *   setSideMist
 *     戦闘がフロントビューであっても霧をサイドビューと同じ流れにします。
 */

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

var TMPlugin = TMPlugin || {};
TMPlugin.BattleMist = {};
TMPlugin.BattleMist.Parameters = PluginManager.parameters('TMBattleMist');
TMPlugin.BattleMist.MistImage = TMPlugin.BattleMist.Parameters['mistImage'] || 'mist';
TMPlugin.BattleMist.MaxMists = +(TMPlugin.BattleMist.Parameters['mistNumber'] || 32);
TMPlugin.BattleMist.TopSide = +(TMPlugin.BattleMist.Parameters['mistTopSide'] || 200);
TMPlugin.BattleMist.RangeSide = +(TMPlugin.BattleMist.Parameters['mistRangeSide'] || 300);
TMPlugin.BattleMist.TopFront = +(TMPlugin.BattleMist.Parameters['mistTopFront'] || 240);
TMPlugin.BattleMist.RangeFront = +(TMPlugin.BattleMist.Parameters['mistRangeFront'] || 340);
TMPlugin.BattleMist.Scale = +(TMPlugin.BattleMist.Parameters['mistScale'] || 1);
TMPlugin.BattleMist.OpacityMax = +(TMPlugin.BattleMist.Parameters['mistOpacityMax'] || 224);

(function() {

	//-----------------------------------------------------------------------------
	// Game_System
	//

	Game_System.prototype.isMistEnabled = function() {
		if (this._mistEnabled === undefined) this._mistEnabled = true;
		return this._mistEnabled;
	};

	Game_System.prototype.disableMist = function() {
		this._mistEnabled = false;
	};

	Game_System.prototype.enableMist = function() {
		this._mistEnabled = true;
	};

	Game_System.prototype.mistMirror = function() {
		return this._mistMirror;
	};

	Game_System.prototype.setMistMirror = function(mirror) {
		this._mistMirror = mirror;
	};

	Game_System.prototype.isSideMist = function() {
		if (!this._mistDirection) {
			return this.isSideView();
		}
		return this._mistDirection === 6;
	};

	Game_System.prototype.setMistDirection = function(direction) {
		this._mistDirection = direction;
	};

	//-----------------------------------------------------------------------------
	// Game_Interpreter
	//

	var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
	Game_Interpreter.prototype.pluginCommand = function(command, args) {
		_Game_Interpreter_pluginCommand.call(this, command, args);
		if (command === 'startMist') {
			$gameSystem.enableMist();
		} else if (command === 'stopMist') {
			$gameSystem.disableMist();
		} else if (command === 'onMistMirror') {
			$gameSystem.setMistMirror(true);
		} else if (command === 'offMistMirror') {
			$gameSystem.setMistMirror(false);
		} else if (command === 'setFrontMist') {
			$gameSystem.setMistDirection(2);
		} else if (command === 'setSideMist') {
			$gameSystem.setMistDirection(6);
		}
	};

	//-----------------------------------------------------------------------------
	// Sprite_BattleMist
	//

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

	Sprite_BattleMist.prototype = Object.create(Sprite.prototype);
	Sprite_BattleMist.prototype.constructor = Sprite_BattleMist;

	Sprite_BattleMist.prototype.initialize = function() {
		Sprite.prototype.initialize.call(this);
		this.loadBitmap();
		this.blendMode = 1;
		this.z = 5;
		this.anchor.x = 0.5;
		this.anchor.y = 1;
	};

	Sprite_BattleMist.prototype.loadBitmap = function() {
		this.bitmap = ImageManager.loadSystem(TMPlugin.BattleMist.MistImage);
	};

	Sprite_BattleMist.prototype.setRandomPosition = function() {
		if ($gameSystem.isSideMist()) {
			this.resetSideView();
			var w = this.width * this.scale.x;
			this.x = Math.random() * (Graphics.width + w) - w / 2 - this.parent.x;
		} else {
			this.resetFrontView();
			this.y = Math.random() * TMPlugin.BattleMist.RangeFront + TMPlugin.BattleMist.TopFront;
		}
		this.update();
	};

	Sprite_BattleMist.prototype.resetSideView = function() {
		var r = Math.random();
		this._count = Math.floor(Math.random() * 180);
		this.y = r * TMPlugin.BattleMist.RangeSide + TMPlugin.BattleMist.TopSide;
		r = (r + 0.5) * TMPlugin.BattleMist.Scale;
		this.scale.set(r, r);
		this._vx = this.scale.x * 2 - 0.5;
		if ($gameSystem.mistMirror()) {
			this.x = Graphics.width + this.width / 2 * this.scale.x;
			this._vx = 0 - this._vx;
		} else {
			this.x = -this.width / 2 * this.scale.x;
		}
		this.x -= this.parent.x;
	};

	Sprite_BattleMist.prototype.resetFrontView = function() {
		var r = Math.random();
		this.x = r * Graphics.width;
		this.y = TMPlugin.BattleMist.TopFront;
		this._vx = (this.x - Graphics.width / 2) * 0.01;
		this.x -= this.parent.x;
	};

	Sprite_BattleMist.prototype.update = function() {
		Sprite.prototype.update.call(this);
		if ($gameSystem.isSideMist()) {
			this.updateSideView();
		} else {
			this.updateFrontView();
		}
	};

	Sprite_BattleMist.prototype.updateSideView = function() {
		this.x += this._vx;
		this._count++;
		if (this._count >= 180) {
			this._count = 0;
		}
		this.opacity = TMPlugin.BattleMist.OpacityMax - 16 + Math.sin(this._count * Math.PI / 90) * 16;
		if ($gameSystem.mistMirror()) {
			if (this.x + this.width / 2 * this.scale.x < 0 - this.parent.x) {
				this.resetSideView();
			}
		} else {
			if (this.x - this.width / 2 * this.scale.x > Graphics.width - this.parent.x) {
				this.resetSideView();
			}
		}
	};

	Sprite_BattleMist.prototype.updateFrontView = function() {
		this.x += this._vx;
		this.y += TMPlugin.BattleMist.Scale;
		var w = this.width / 2;
		if (this.y > TMPlugin.BattleMist.RangeFront + TMPlugin.BattleMist.TopFront ||
				this.x < 0 - w - this.parent.x || this.x > Graphics.width + w - this.parent.x) {
			this.resetFrontView();
		}
		this.updateScaleFront();
		this.updateOpacityFront();
	};

	Sprite_BattleMist.prototype.updateScaleFront = function() {
		var r = (0.5 + (this.y - TMPlugin.BattleMist.TopFront) / TMPlugin.BattleMist.RangeFront) *
				TMPlugin.BattleMist.Scale;
		this.scale.set(r, r);
	};

	Sprite_BattleMist.prototype.updateOpacityFront = function() {
		var borderY = TMPlugin.BattleMist.TopFront + TMPlugin.BattleMist.RangeFront * 0.8;
		if (this.y > borderY) {
			this.opacity = (1 - (this.y - borderY) / (TMPlugin.BattleMist.RangeFront * 0.2)) *
					TMPlugin.BattleMist.OpacityMax;
		} else {
			this.opacity = Math.min((this.y - TMPlugin.BattleMist.TopFront) / TMPlugin.BattleMist.Scale * 8,
					TMPlugin.BattleMist.OpacityMax);
		}
	};

	//-----------------------------------------------------------------------------
	// Spriteset_Battle
	//

	var _Spriteset_Battle_createLowerLayer = Spriteset_Battle.prototype.createLowerLayer;
	Spriteset_Battle.prototype.createLowerLayer = function() {
		_Spriteset_Battle_createLowerLayer.call(this);
		this.createMists();
		this._back1Sprite.z = 0;
		this._back2Sprite.z = 1;
		for (var i = 0; i < this._enemySprites.length; i++) {
			this._enemySprites[i].z = 5;
		}
		this.updateActors();
		for (var j = 0; j < this._actorSprites.length; j++) {
			this._actorSprites[j].z = 5;
		}
	};

	Spriteset_Battle.prototype.createMists = function() {
		this._mistSprites = [];
		if ($gameSystem.isMistEnabled()) {
			for (var i = 0; i < TMPlugin.BattleMist.MaxMists; i++) {
				this._mistSprites[i] = new Sprite_BattleMist();
				this._battleField.addChild(this._mistSprites[i]);
				this._mistSprites[i].setRandomPosition();
			}
		}
	};

	var _Spriteset_Battle_update = Spriteset_Battle.prototype.update;
	Spriteset_Battle.prototype.update = function() {
		_Spriteset_Battle_update.call(this);
		this._sortBattleField();
	};

	Spriteset_Battle.prototype._sortBattleField = function() {
		this._battleField.children.sort(function(a, b) {
			a.z = a.z != null ? a.z : 10;
			b.z = b.z != null ? b.z : 10;
			if (a.z !== b.z) {
				return a.z - b.z;
			} else if (a.y !== b.y) {
				return a.y - b.y;
			} else {
				return a.spriteId - b.spriteId;
			}
		});
	};

})();


code:
//=============================================================================
// TMVplugin - バトラー表示拡張
// 作者: tomoaky (http://hikimoki.sakura.ne.jp/)
// Version: 1.0
// 最終更新日: 2015/11/24
//=============================================================================

/*:
 * @plugindesc エネミーに遠近感や息づかいの表現を追加します。
 *
 * @author tomoaky (http://hikimoki.sakura.ne.jp/)
 *
 * @param baseY
 * @desc 拡大率が 1 になる Y 座標。
 * 初期値: 400
 * @default 400
 *
 * @param breathH
 * @desc 息づかいの大きさ。
 * 初期値: 0.05
 * @default 0.05
 *
 * @param mirrorRate
 * @desc 左右反転の確率。
 * 初期値: 0.4（ 0 ～ 1 ）
 * @default 0.4
 *
 * @help サイドビューでは左右反転が無効になります。
 *
 * メモ欄（敵キャラ）タグ:
 *   <scale:1>       # 拡大率の個別設定
 *   <breathH:0.05>  # 息づかいの大きさを個別設定
 *   <noMirror>      # 左右反転を禁止
 *
 * 拡大率の個別設定がある敵キャラには遠近感の表現が適用されません。
 *
 * プラグインコマンドはありません。
 *
 */

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

(function() {

  var parameters = PluginManager.parameters('TMBattlerEx');
  var baseY = Number(parameters['baseY']);
  var breathH = Number(parameters['breathH']);
  var mirrorRate = Number(parameters['mirrorRate']);

  //-----------------------------------------------------------------------------
  // Sprite_Enemy
  //

  var _Sprite_Enemy_initialize = Sprite_Enemy.prototype.initialize;
  Sprite_Enemy.prototype.initialize = function(battler) {
    _Sprite_Enemy_initialize.call(this, battler);
    var r = battler.enemy().meta['scale'];
    r = r ? Number(scale) : this.y / (baseY * 2) + 0.5;
    //this._baseScale = new Point(r, r);
	this._baseScale = new Point(1, 1);
    if (!$gameSystem.isSideView() && Math.random() < mirrorRate &&
        !battler.enemy().meta['noMirror']) {
      this._baseScale.x = -r;
    }
    this._breathMax = Math.randomInt(90) + 90;
    this._breathCount = Math.randomInt(this._breathMax);
  };

  var _Sprite_Enemy_update = Sprite_Enemy.prototype.update;
  Sprite_Enemy.prototype.update = function() {
    _Sprite_Enemy_update.call(this);
    this.updateScaleEx();
  };

  Sprite_Enemy.prototype.updateScaleEx = function() {
    this._breathCount++;
    if (this._breathCount >= this._breathMax) {
      this._breathMax = Math.randomInt(90) + 90;
      this._breathCount = 0;
    }
    var scaleX = this._baseScale.x;
    var scaleY = this._baseScale.y;
    var bh = this._enemy.enemy().meta['breathH'];
    bh = bh ? Number(bh) : breathH;
    scaleY += Math.sin(Math.PI * this._breathCount / (this._breathMax / 2)) * bh;
    this.scale.set(scaleX, scaleY);
  };

})();


code:
//=============================================================================
// TMVplugin - キャラクター表示拡張
// 作者: tomoaky (http://hikimoki.sakura.ne.jp/)
// Version: 1.0
// 最終更新日: 2015/11/27
//=============================================================================

/*:
 * @plugindesc イベントに表示位置補正、回転、拡大の機能を追加します。
 *
 * @author tomoaky (http://hikimoki.sakura.ne.jp/)
 *
 * @help イベントのメモ欄にタグを書き込むことで、表示位置の補正、
 * 拡大率の設定、回転角度の設定ができます。
 *
 * グラフィックの中心を軸に回転させたい場合は angle タグと一緒に
 * <anchorY:0.5> を設定してください。
 *
 * イベントページが変化した際、次のページでタグ設定がないパラメータは
 * 変化前の状態がそのまま引き継がれます。
 *
 * メモ欄（イベント）タグ:
 *   <shiftX:0>       # X 方向の表示位置補正値
 *   <shiftY:0>       # Y 方向の表示位置補正値
 *   <angle:0>        # 回転角度
 *   <scaleX:1.0>     # X 方向の拡大率
 *   <scaleY:1.0>     # Y 方向の拡大率
 *   <anchorX:0.5>    # X 方向の中心座標
 *   <anchorY:1.0>    # Y 方向の中心座標
 *
 * イベントのメモ欄以外に、実行内容の一番上にある注釈コマンド内でも
 * 同様のタグでパラメータを設定することができます。
 * メモ欄と注釈の両方にタグがある場合は注釈が優先されます。
 *
 * プラグインコマンド:
 *   TMCharacterEx shift 1 5 -3 # イベント１番を右に５、上に３ドットずらす
 *   TMCharacterEx angle 1 90   # イベント１番を右に９０度回転
 *   TMCharacterEx scale 2 1.5 0.5 # イベント２番の幅を５０％拡大、
 *                                   高さを半分に縮小
 *
 *   イベント番号が 0 の場合は『このイベント』、-1 の場合はプレイヤーが
 *   コマンドの対象となります。
 *
 * プラグインコマンドの他にイベントコマンド『スクリプト』用のコマンドも
 * あります、イベントコマンド『移動ルートの設定』ではこちらを使用します。
 *   this.setShift(-10, 5)  # このイベントの表示位置を左に１０、下に５ずらす
 *   this.setAngle(180)     # このイベントの上下を反転する
 *   this.setScale(2, 1)    # このイベントの幅だけを２倍に拡大する
 */

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

if (!Imported.TMEventBase) {
  Imported.TMEventBase = true;
  (function() {

    //-----------------------------------------------------------------------------
    // Game_Event
    //

    var _Game_Event_setupPage = Game_Event.prototype.setupPage;
    Game_Event.prototype.setupPage = function() {
      _Game_Event_setupPage.call(this);
      if (this._pageIndex >= 0) {
        this.loadCommentParams();
      }
    };

    Game_Event.prototype.loadCommentParams = function() {
      this._commentParams = {};
      var re = /<([^<>:]+)(:?)([^>]*)>/g;
      var list = this.list();
      for (var i = 0; i < list.length; i++) {
        var command = list[i];
        if (command && command.code == 108 || command.code == 408) {
          for (;;) {
            var match = re.exec(command.parameters[0]);
            if (match) {
              if (match[2] === ':') {
                this._commentParams[match[1]] = match[3];
              } else {
                this._commentParams[match[1]] = true;
              }
            } else {
              break;
            }
          }
        } else {
          break;
        }
      }
    };

    Game_Event.prototype.loadTagParam = function(paramName) {
      if (this._commentParams[paramName]) {
        return this._commentParams[paramName];
      } else if (this.event().meta[paramName]) {
        return this.event().meta[paramName];
      } else {
        return null;
      }
    };

  })();
}

(function() {

  //-----------------------------------------------------------------------------
  // Game_CharacterBase
  //

  var _Game_CharacterBase_initMembers = Game_CharacterBase.prototype.initMembers;
  Game_CharacterBase.prototype.initMembers = function() {
    _Game_CharacterBase_initMembers.call(this);
    this.clearTMExParams();
  }

  Game_CharacterBase.prototype.clearTMExParams = function() {
    this._shiftTMExX = 0;
    this._shiftTMExY = 0;
    this._angleTMEx = 0;
    this._scaleTMExX = 1.0;
    this._scaleTMExY = 1.0;
    this._anchorTMExX = 0.5;
    this._anchorTMExY = 1;
  };

  var _Game_CharacterBase_screenX = Game_CharacterBase.prototype.screenX;
  Game_CharacterBase.prototype.screenX = function() {
    return _Game_CharacterBase_screenX.call(this) + this._shiftTMExX;
  };

  var _Game_CharacterBase_screenY = Game_CharacterBase.prototype.screenY;
  Game_CharacterBase.prototype.screenY = function() {
    return _Game_CharacterBase_screenY.call(this) + this._shiftTMExY;
  };

  Game_CharacterBase.prototype.screenAngle = function() {
    return this._angleTMEx;
  };

  Game_CharacterBase.prototype.screenScaleX = function() {
    return this._scaleTMExX;
  };

  Game_CharacterBase.prototype.screenScaleY = function() {
    return this._scaleTMExY;
  };

  Game_CharacterBase.prototype.screenAnchorX = function() {
    return this._anchorTMExX;
  };

  Game_CharacterBase.prototype.screenAnchorY = function() {
    return this._anchorTMExY;
  };

  Game_CharacterBase.prototype.setShift = function(shiftX, shiftY) {
    this._shiftTMExX = shiftX;
    this._shiftTMExY = shiftY;
  };

  Game_CharacterBase.prototype.setAngle = function(angle) {
    this._angleTMEx = angle * Math.PI / 180;
  };

  Game_CharacterBase.prototype.setScale = function(scaleX, scaleY) {
    this._scaleTMExX = scaleX;
    this._scaleTMExY = scaleY;
  };

  //-----------------------------------------------------------------------------
  // Game_Event
  //

  var _Game_Event_setupPage = Game_Event.prototype.setupPage;
  Game_Event.prototype.setupPage = function() {
    _Game_Event_setupPage.call(this);
    if (this._pageIndex >= 0) {
      var param = this.loadTagParam('shiftX');
      this._shiftTMExX = param ? Number(param) : this._shiftTMExX;
      param = this.loadTagParam('shiftY');
      this._shiftTMExY = param ? Number(param) : this._shiftTMExY;
      param = this.loadTagParam('angle');
      this._angleTMEx = param ? Number(param) * Math.PI / 180 : this._angleTMEx;
      param = this.loadTagParam('scaleX');
      this._scaleTMExX = param ? Number(param) : this._scaleTMExX;
      param = this.loadTagParam('scaleY');
      this._scaleTMExY = param ? Number(param) : this._scaleTMExY;
      param = this.loadTagParam('anchorX');
      this._anchorTMExX = param ? Number(param) : this._anchorTMExX;
      param = this.loadTagParam('anchorY');
      this._anchorTMExY = param ? Number(param) : this._anchorTMExY;
    } else {
      this.clearTMExParams();
    }
  };

  //-----------------------------------------------------------------------------
  // Game_Interpreter
  //

  var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function(command, args) {
    _Game_Interpreter_pluginCommand.call(this, command, args);
    if (command === 'TMCharacterEx') {
      switch (args[0]) {
      case 'shift':
        var character = this.character(args[1]);
        if (character) {
          character.setShift(Number(args[2]), Number(args[3]));
        }
        break;
      case 'angle':
        var character = this.character(args[1]);
        if (character) {
          character.setAngle(Number(args[2]));
        }
        break;
      case 'scale':
        var character = this.character(args[1]);
        if (character) {
          character.setScale(Number(args[2]), Number(args[3]));
        }
        break;
      }
    }
  };

  //-----------------------------------------------------------------------------
  // Sprite_Character
  //

  var _Sprite_Character_updateOther = Sprite_Character.prototype.updateOther;
  Sprite_Character.prototype.updateOther = function() {
    _Sprite_Character_updateOther.call(this);
    this.rotation = this._character.screenAngle();
    this.scale.set(this._character.screenScaleX(),
                   this._character.screenScaleY());
    this.anchor.set(this._character.screenAnchorX(),
                    this._character.screenAnchorY());
  };

})();