code:
//=============================================================================
// FastForwardCustomize.js
// ----------------------------------------------------------------------------
// Copyright (c) 2015-2017 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.0.0 2017/07/01 初版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc FastForwardCustomizePlugin
 * @author triacontane
 *
 * @param EventSpeedVariableId
 * @desc イベント高速化時の速度を取得する変数番号です。変数値が0なら高速化禁止、数値が大きくなると速度も速くなります。
 * @default 0
 * @type variable
 *
 * @help イベント高速化時の速度を調整できます。
 * 指定した変数の値によって高速化時の速度が変化します。
 * 変数値によって以下の通り変化します。
 * 0  : 高速化が禁止されます。
 * 1  : デフォルトの速度です。
 * 2- : 数値が高いほど高速になります。異常に高い値を設定すると処理落ちします。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * This plugin is released under the MIT License.
 */
/*:ja
 * @plugindesc イベント高速化調整プラグイン
 * @author トリアコンタン
 *
 * @param イベント速度変数
 * @desc イベント高速化時の速度を取得する変数番号です。変数値が0なら高速化禁止、数値が大きくなると速度も速くなります。
 * @default 0
 * @type variable
 *
 * @help イベント高速化時の速度を調整できます。
 * 指定した変数の値によって高速化時の速度が変化します。
 * 変数値によって以下の通り変化します。
 * 0  : 高速化が禁止されます。
 * 1  : デフォルトの速度です。
 * 2- : 数値が高いほど高速になります。異常に高い値を設定すると処理落ちします。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

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

    //=============================================================================
    // ローカル関数
    //  プラグインパラメータやプラグインコマンドパラメータの整形やチェックをします
    //=============================================================================
    var getParamString = function(paramNames) {
        if (!Array.isArray(paramNames)) paramNames = [paramNames];
        for (var i = 0; i < paramNames.length; i++) {
            var name = PluginManager.parameters(pluginName)[paramNames[i]];
            if (name) return name;
        }
        return '';
    };

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

    //=============================================================================
    // パラメータの取得と整形
    //=============================================================================
    var param       = {};
    param.eventSpeedVariableId = getParamNumber(['EventSpeedVariableId', 'イベント速度変数']);

    var _Scene_Map_updateMainMultiply = Scene_Map.prototype.updateMainMultiply;
    Scene_Map.prototype.updateMainMultiply = function() {
        _Scene_Map_updateMainMultiply.apply(this, arguments);
        if (this.isFastForward()) {
            this.updateMainForMoreFast();
        }
    };

    Scene_Map.prototype.updateMainForMoreFast = function() {
        var updateCount = this.getFastSpeed() - 1;
        for (var i = 0; i < updateCount; i++) {
            this.updateMain();
        }
    };

    var _Scene_Map_isFastForward = Scene_Map.prototype.isFastForward;
    Scene_Map.prototype.isFastForward = function() {
        return _Scene_Map_isFastForward.apply(this, arguments) && this.getFastSpeed() > 0;
    };

    Scene_Map.prototype.getFastSpeed = function() {
        return param.eventSpeedVariableId > 0 ? $gameVariables.value(param.eventSpeedVariableId) : 1;
    };
})();

repo_name: onms/sister

license: unknown


code:
//=============================================================================
// FatefulLocation.js
//=============================================================================

/*:ja
 * @plugindesc ver1.00 場所移動時の自動演奏の制御等
 * @author まっつＵＰ
 *
 * @param bgmSwitch
 * @desc オンにしていると場所移動時設定したBGMを自動演奏しません。
 * @default 10
 *
 * @param bgsSwitch
 * @desc オンにしていると場所移動時設定したBGSを自動演奏しません。
 * @default 11
 *
 * @param atpVariable
 * @desc このIDの変数はスイッチや処理の制御に使います。
 * @default 19
 *
 * @param defVariable
 * @desc 処理の終わりにこのIDの変数の値をatpVariableに代入します。
 * @default 20
 *
 * @help
 *
 * RPGで笑顔を・・・
 *
 * このヘルプとパラメータの説明をよくお読みになってからお使いください。
 *
 * bgmSwitchは任意のスイッチのIDを設定します。
 * このスイッチをオンにすると場所移動後のマップの自動演奏が設定されていても
 * そのBGMの自動演奏を行われません。
 * bgsSwitchは上のbgmの部分をbgsに置き換えてお察しください。
 *
 * atpVariableは任意の変数のIDを設定します。
 * この変数に10以上の値が入っている場合、
 * 自動演奏の処理はパラメータのスイッチのオンオフに関わらず行いません。
 * この変数に入っている値で自動演奏の処理の後、
 * 下記の処理を加えることができます。
 *
 * 0:追加の処理はありません。
 * 1:bgmスイッチのみオフにする。
 * 2:bgsスイッチのみオフにする。
 * 3:両方のスイッチをオフにする。
 * 7:隊員を全回復させる。
 * 8:隊員を全回復させた上で両方のスイッチをオフにする。
 * ---
 * 10:場所移動前のBGMを2秒間かけてフェードアウト。
 * 11:場所移動前のBGSを2秒間かけてフェードアウト。
 * 12:BGMBGSともに1秒間かけてフェードアウト。
 * 13:場所移動前のBGMを保存してから1秒間かけてBGMをフェードアウト。
 * 14:保存されているBGMを再生する、さらに両方のスイッチをオフにする。
 * それ以外の場合:追加の処理はありません。
 *
 * defVariableは任意の変数のIDを設定します。
 * 上までの処理を行った後、このIDの変数の値をatpVariableに代入します。
 * ただし、このIDの変数の値が0に満たない場合代入は行いません。
 *
 * スイッチオンにより自動演奏をさせないようにしたいだけなど
 * 変数を使わないなら両方のIDの変数の値を0に保っておけば大丈夫です。
 * Game_Map.prototype.autoplay
 * Scene_Load.prototype.reloadMapIfUpdatedを全て書き換えています。
 * ニューゲーム直後の開始マップの自動演奏の制御はできないので留意してください。
 * （あくまでニューゲーム直後のことで自動実行などでスイッチや変数の操作をすれば
 * 　その後は自動演奏の制御はできるようになっています。）
 * コンティニュー時にはマップの変更などによる更新があってもautoplayの処理は
 * 行われないようにしました。
 *
 * （10以上の時の使用例）
 * 13を指定して、移動先で迫真のイベントを終えた後
 * 14を指定して移動することで元のBGMを再び再生しながら
 * スイッチを両方オフにして原状復帰することができる。
 *
 * 免責事項：
 * このプラグインを利用したことによるいかなる損害も制作者は一切の責任を負いません。
 *
 */

(function() {

    var parameters = PluginManager.parameters('FatefulLocation');
    var APbgmSwitch = Number(parameters['bgmSwitch'] || 10);
    var APbgsSwitch = Number(parameters['bgsSwitch'] || 11);
    var APatpVariable = Number(parameters['atpVariable'] || 19);
    var APdefVariable = Number(parameters['defVariable'] || 20);
    var requestno;

    //このメソッドを全て書き換えている。
    Game_Map.prototype.autoplay = function() {
        //コンティニュー時直後のautoplayは実行されない。
    if(requestno !== 5){
    var apa = $gameVariables._data[APatpVariable];

    if(apa === undefined) apa = 0;
    if(apa < 10){
        //スイッチのオンオフにかかわらずapaが10以上の場合はそれぞれ自動演奏されない。
    if ($dataMap.autoplayBgm && !$gameSwitches.value(APbgmSwitch)) {
        AudioManager.playBgm($dataMap.bgm);
    }
    if ($dataMap.autoplayBgs && !$gameSwitches.value(APbgsSwitch)) {
        AudioManager.playBgs($dataMap.bgs);
    }
    }

    switch(apa){
        case 0:
        //0の時は処理なし。
        break;
        case 1:
        //bgmスイッチのみオフにする。
        this.OFFautoplaybgmSwitch();
        break;
        case 2:
        //bgsスイッチのみオフにする。
        this.OFFautoplaybgsSwitch();
        break;
        case 3:
        //両方のスイッチをオフにする。
        this.OFFautoplaybgmSwitch();
        this.OFFautoplaybgsSwitch();
        break;
        case 7:
        //全回復させる。
        for(i = 1; i <= $gameParty.size(); i++){
　　　　　　$gameActors.actor(i).recoverAll()
　　　　 }
        break;
        case 8:
        //全回復させたうえで両方のスイッチをオフにする。
        for(i = 1; i <= $gameParty.size(); i++){
　　　　　　$gameActors.actor(i).recoverAll()
　　　　 }
        this.OFFautoplaybgmSwitch();
        this.OFFautoplaybgsSwitch();
        break;
        case 10:
        //場所移動前のBGMを()内の秒数かけてフェードアウト、自動演奏は無効になっている。
        AudioManager.fadeOutBgm(2);
        break;
        case 11:
        //場所移動前のBGSを()内の秒数かけてフェードアウト、自動演奏は無効になっている。
        AudioManager.fadeOutBgs(2);
        break;
        case 12:
        //BGMBGSともに()内の秒数かけてフェードアウト、自動演奏は無効になっている。
        AudioManager.fadeOutBgm(1);
        AudioManager.fadeOutBgs(1);
        break;
        case 13:
        //場所移動前のBGMを保存してから()内の秒数かけてフェードアウト、自動演奏は無効になっている。
        $gameSystem.saveBgm()
        AudioManager.fadeOutBgm(1);
        break;
        case 14:
        //保存されているBGMを再生する、さらに両方のスイッチをオフ、自動演奏は無効になっている。
        $gameSystem.replayBgm();
        this.OFFautoplaybgmSwitch();
        this.OFFautoplaybgsSwitch();
        break;
        default:
        //それ以外の場合は何もなし。
        break;
    }
    this.ANOautoplaybgmVal();
    }else{
        requestno = 0;
    }
};

//以下各種の処理
Game_Map.prototype.OFFautoplaybgmSwitch = function() {
    $gameSwitches._data[APbgmSwitch] = false;
}

Game_Map.prototype.OFFautoplaybgsSwitch = function() {
    $gameSwitches._data[APbgsSwitch] = false;
}

Game_Map.prototype.ANOautoplaybgmVal = function() {
    var apd = $gameVariables._data[APdefVariable];
    if(apd === undefined) apd = 0;
    if(apd >= 0){
        //defVariableが0未満の時は代入しない。
        $gameVariables._data[APatpVariable] = apd;
    }
}

//コンティニュー時の自動演奏の処理の中止のための記述
Scene_Load.prototype.reloadMapIfUpdated = function() {
    if ($gameSystem.versionId() !== $dataSystem.versionId) {
        requestno = 5;
        $gamePlayer.reserveTransfer($gameMap.mapId(), $gamePlayer.x, $gamePlayer.y);
        $gamePlayer.requestMapReload();
    }
};

})();


code:
//=============================================================================
// FlexibleBattleBgm.js
// ----------------------------------------------------------------------------
// Copyright (c) 2015 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.0.1 2017/05/27 競合の可能性のある記述（Objectクラスへのプロパティ追加）をリファクタリング
// 1.0.0 2016/01/07 初版
// ----------------------------------------------------------------------------
// [Blog]   : http://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc 敵グループごとの戦闘BGM設定プラグイン
 * @author トリアコンタン
 *
 * @help 敵グループごとに戦闘BGM設定できるようになるプラグインです。
 * この設定はシステムの戦闘BGMよりも優先され、設定されていない場合のみ
 * システムの戦闘BGMが演奏されます。
 * 指定はプラグインコマンドから行い、敵グループIDは一括で指定できます。
 * 一度実行した設定はセーブファイルに保存されるので、
 * ゲーム開始時に1回実行すればOKです。
 *
 * プラグインコマンド詳細
 *  イベントコマンド「プラグインコマンド」から実行。
 *  （パラメータの間は半角スペースで区切る）
 *
 * 敵グループBGM追加 [敵グループID開始位置] [敵グループID終了位置]
 * 　[BGM名称] [BGM音量] [BGMピッチ] [BGM位相]
 *
 * （例1）敵グループ「1」の戦闘BGMを「Battle1」にしたい場合
 * 敵グループBGM追加 1 1 Battle1 100 100 0
 *
 * （例2）敵グループ「1」～「20」の戦闘BGMを「Battle2」にしたい場合
 * 敵グループBGM追加 1 20 Battle2
 * ※ 音量、ピッチ、位相は省略するとそれぞれ「90」「100」「0」になります。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */
(function () {
    'use strict';

    //=============================================================================
    // ローカル関数
    //  プラグインパラメータやプラグインコマンドパラメータの整形やチェックをします
    //=============================================================================
    var getCommandName = function (command) {
        return (command || '').toUpperCase();
    };

    var getArgString = function (args, upperFlg) {
        args = convertEscapeCharacters(args);
        return upperFlg ? args.toUpperCase() : args;
    };

    var getArgNumber = function (arg, min, max) {
        if (arguments.length <= 2) min = -Infinity;
        if (arguments.length <= 3) max = Infinity;
        return (parseInt(convertEscapeCharacters(arg), 10) || 0).clamp(min, max);
    };

    var convertEscapeCharacters = function(text) {
        if (typeof Game_Interpreter.prototype.pluginCommandBook_unescape === 'function') {
            return Game_Interpreter.prototype.pluginCommandBook_unescape(text);
        }
        if (text == null) 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], 10));
        }.bind(window));
        text = text.replace(/\x1bV\[(\d+)\]/gi, function() {
            return $gameVariables.value(parseInt(arguments[1], 10));
        }.bind(window));
        text = text.replace(/\x1bN\[(\d+)\]/gi, function() {
            var n = parseInt(arguments[1]);
            var actor = n >= 1 ? $gameActors.actor(n) : null;
            return actor ? actor.name() : '';
        }.bind(window));
        text = text.replace(/\x1bP\[(\d+)\]/gi, function() {
            var n = parseInt(arguments[1]);
            var actor = n >= 1 ? $gameParty.members()[n - 1] : null;
            return actor ? actor.name() : '';
        }.bind(window));
        text = text.replace(/\x1bG/gi, TextManager.currencyUnit);
        return text;
    };

    //=============================================================================
    // Object
    //  プロパティの定義
    //=============================================================================
    var iterate = function(that, handler) {
        Object.keys(that).forEach(function(key, index) {
            handler.call(that, key, that[key], index);
        });
    };

    //=============================================================================
    // Game_Interpreter
    //  プラグインコマンドを追加定義します。
    //=============================================================================
    var _Game_Interpreter_pluginCommand      = Game_Interpreter.prototype.pluginCommand;
    Game_Interpreter.prototype.pluginCommand = function (command, args) {
        _Game_Interpreter_pluginCommand.apply(this, arguments);
        try {
            this.pluginCommandFlexibleBattleBgm(command, args);
        } catch (e) {
            if ($gameTemp.isPlaytest() && Utils.isNwjs()) {
                var window = require('nw.gui').Window.get();
                if (!window.isDevToolsOpen()) {
                    var devTool = window.showDevTools();
                    devTool.moveTo(0, 0);
                    devTool.resizeTo(Graphics.width, Graphics.height);
                    window.focus();
                }
            }
            console.log('プラグインコマンドの実行中にエラーが発生しました。');
            console.log('- コマンド名 　: ' + command);
            console.log('- コマンド引数 : ' + args);
            console.log('- エラー原因   : ' + e.toString());
        }
    };

    Game_Interpreter.prototype.pluginCommandFlexibleBattleBgm = function (command, args) {
        switch (getCommandName(command)) {
            case '敵グループBGM追加' :
            case 'ADD_TROOP_BGM' :
                var start  = getArgNumber(args[0], 1, 5000);
                var end    = getArgNumber(args[1], 1, 5000);
                var name   = getArgString(args[2]);
                var volume = args[3] !== undefined ? getArgNumber(args[3]) : null;
                var pitch  = args[4] !== undefined ? getArgNumber(args[4]) : null;
                var pan    = args[5] !== undefined ? getArgNumber(args[5]) : null;
                $gameSystem.addTroopBattleBgm(start, end, name, volume, pitch, pan);
                break;
        }
    };

    //=============================================================================
    // Game_System
    //  敵グループごとの戦闘BGMの取得と設定処理を追加定義します。
    //=============================================================================
    var _Game_System_battleBgm = Game_System.prototype.battleBgm;
    Game_System.prototype.battleBgm = function() {
        var id = $gameTroop._troopId;
        if (this._troopsBattleBgm && id !== 0) {
            var bgm = null;
            iterate(this._troopsBattleBgm, function(key, value) {
                if (id >= parseInt(key.split(':')[0], 10) && id <= parseInt(key.split(':')[1], 10)) bgm = value;
            });
            if (bgm) return bgm;
        }
        return _Game_System_battleBgm.apply(this, arguments);
    };

    Game_System.prototype.addTroopBattleBgm = function(start, end, name, volume, pitch, pan) {
        if (volume === null) volume = 90;
        if (pitch === null) pitch = 100;
        if (pan === null) pan = 0;
        if (!this._troopsBattleBgm) this._troopsBattleBgm = {};
        this._troopsBattleBgm[start + ':' + end] = {name:name, pan:pan.clamp(-100, 100),
            volume:volume.clamp(0, 100), pitch:pitch.clamp(50, 150)};
    };
})();


code:
//============================================================================
// FlontAnimposi.js
//============================================================================

/*:ja
 * @plugindesc ver1.00 フロントビューでのアニメ位置を調整
 * @author まっつＵＰ
 *
 * @param dummyX
 * @desc アニメ表示のx座標の基準（0未満可）
 * @type number
 * @min -1600
 * @max 1600
 * @default 408
 *
 * @param dummyY
 * @desc アニメ表示のy座標の基準（0未満可）
 * @type number
 * @min -1200
 * @max 1200
 * @default 312
 *
 * @param dummyX2
 * @desc アニメ表示のx座標の
 * アクターのindexによる補正（0未満可）
 * @type number
 * @min -1200
 * @max 1200
 * @default 0
 *
 * @param dummyY2
 * @desc アニメ表示のy座標の
 * アクターのindexによる補正（0未満可）
 * @type number
 * @min -1200
 * @max 1200
 * @default 0
 *
 * @help
 *
 * RPGで笑顔を・・・
 *
 * このヘルプとパラメータの説明をよくお読みになってからお使いください。
 *
 * フロントビュー選択時、
 * サイドビューアクターの基本の位置を指定位置に変更し
 * その位置にアニメーションを表示させます。
 *
 * 利用規約(2019/9/7変更)：
 * この作品は マテリアル・コモンズ・ブルー・ライセンスの下に提供されています。
 * https://materialcommons.tk/mtcm-b-summary/
 * クレジット表示：まっつＵＰ
 *
 */

(function() {

var parameters = PluginManager.parameters('FlontAnimposi');
var FAdummyX = Number(parameters['dummyX']);
var FAdummyY = Number(parameters['dummyY']);
var FAdummyX2 = Number(parameters['dummyX2']);
var FAdummyY2 = Number(parameters['dummyY2']);

var _Sprite_Actor_setActorHome = Sprite_Actor.prototype.setActorHome;
Sprite_Actor.prototype.setActorHome = function(index) {
    if(!$gameSystem.isSideView()){
        this.setHome(FAdummyX + index * FAdummyX2, FAdummyY + index * FAdummyY2);
    }else{
        _Sprite_Actor_setActorHome.call(this, index);
    }
};

var _Sprite_Battler_setupAnimation = Sprite_Battler.prototype.setupAnimation;
Sprite_Battler.prototype.setupAnimation = function() {
    if(!$gameSystem.isSideView()){
        while (this._battler.isAnimationRequested()) {
            var data = this._battler.shiftAnimation();
            var animation = $dataAnimations[data.animationId];
            var mirror = data.mirror;
            var delay = animation.position === 3 ? 0 : data.delay;
            this.startAnimation(animation, mirror, delay);
        }
    }else{
        _Sprite_Battler_setupAnimation.call(this);
    }
};

})();


code:
//=============================================================================
// FootstepSound.js
// ----------------------------------------------------------------------------
// (C) 2016 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 2.1.0 2019/02/02 イベントごとの足音を固有に設定できる機能を追加
// 2.0.0 2018/09/05 プレイヤーの足音を無効化するスイッチを指定できる機能を追加
//                  パラメータの型指定機能に対応
// 1.1.0 2017/06/23 立ち止まったときに足音演奏間隔をリセットする機能を追加
// 1.0.0 2016/02/18 初版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc 足音プラグイン
 * @author トリアコンタン
 *
 * @param EventRunningInvalid
 * @text イベント実行中無効
 * @desc イベント実行中は足音を無効にする。（ON/OFF）
 * @default false
 * @type boolean
 *
 * @param ResetIfStop
 * @text 立ち止まるとリセット
 * @desc 演奏間隔が設定されている場合、立ち止まることでリセットされます。（ON/OFF）
 * @default false
 * @type boolean
 *
 * @param InvalidSwitchId
 * @text 無効スイッチID
 * @desc 指定したスイッチがONのときプレイヤーの足音が無効になります。指定しない場合は常に有効になります。
 * @default 0
 * @type switch
 *
 * @help version 2.0.0以降に差し替えた場合はパラメータの再設定が必要です。
 *
 * 以下の状況下で指定した足音効果音を演奏します。
 * 数字の小さい方が優先度が高いです。
 * 1.  飛行船乗船時
 * 2.  大型船乗船時
 * 3.  小型船乗船時
 * 4.  指定リージョン通過時
 * 5.  ダメージ床属性通過時
 * 6.  茂み属性通過時
 * 7.  カウンター属性通過時
 * 8.  梯子属性通過時
 * 9.  指定地形タグ通過時
 * 10. 常に
 *
 * 効果音を指定する場合、当ファイル「FootstepSound.js」を
 * テキストエディタで開き「ユーザ書き換え領域」と書かれている
 * 部分を注釈に従って修正してください。
 *
 * 要注意！　指定した効果音は、デプロイメント時に
 * 未使用ファイルとして除外される可能性があります。
 * その場合、削除されたファイルを入れ直す等の対応が必要です。
 *
 * 足音が演奏されるのはプレイヤーのみですが、
 * 「移動ルートの指定」の「スクリプト」から以下を実行すると
 * イベントにも足音が演奏されるようになります。
 *
 * 足音を演奏する　：this.setStepSoundFlg(true);
 * 足音を演奏しない：this.setStepSoundFlg(false);
 *
 * イベントごとに固有に足音を設定したい場合、以下の通り指定してください。
 * <FootStep:Absorb1> // 足音に「Absorb1」が設定されます。
 * <足音:Absorb1>     // 同上
 * このメモ欄を設定するとスクリプト「this.setStepSoundFlg(true);」
 * を実行しなくてもデフォルトで足音が有効になります。
 *
 * プラグインコマンド詳細
 *  イベントコマンド「プラグインコマンド」から実行。
 *  （引数の間は半角スペースで区切る）
 *
 * 足音無効化 or FS_INVALID_SOUND
 *   一時的に全ての足音を無効にします。
 * 例：足音無効化
 *
 * 足音有効化 or FS_VALID_SOUND
 *   全ての足音を有効に戻します。
 * 例：足音有効化
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function() {
    //=============================================================================
    // ユーザ書き換え領域 - 開始 -
    //  name   : 効果音名称(拡張子不要)
    //  volume : 音量(0...100)
    //  pitch  : ピッチ(50...150)
    //  pan    : 位相(-100...100)
    // ※コピー＆ペーストしやすくするために最後の項目にもカンマを付与しています。
    //=============================================================================
    var footStepJson = {
        // walk1:歩行時の効果音1
        // walk2:歩行時の効果音2
        // dash1:ダッシュ時の効果音1
        // dash2:ダッシュ時の効果音2
        // interval:効果音を演奏する間隔（1の場合は1歩ごと）

        // 常に演奏される足音
        always     : {
            interval: 3,
            walk1   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
            walk2   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
            dash1   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
            dash2   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
        },
        // 梯子属性通過時の足音
        ladder     : {
            interval: 3,
            walk1   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
            walk2   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
            dash1   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
            dash2   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
        },
        // カウンター属性通過時の足音
        counter    : {
            interval: 3,
            walk1   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
            walk2   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
            dash1   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
            dash2   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
        },
        // 茂み属性通過時の足音
        bush       : {
            interval: 3,
            walk1   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
            walk2   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
            dash1   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
            dash2   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
        },
        // ダメージ床属性通過時の足音
        damageFloor: {
            interval: 3,
            walk1   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
            walk2   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
            dash1   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
            dash2   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
        },
        // 小型船乗船時の足音
        boat       : {
            interval: 4,
            walk1   : {name: '', volume: 8, pitch: 50, pan: 0},
            walk2   : {name: '', volume: 8, pitch: 50, pan: 0},
        },
        // 大型船乗船時の足音
        ship       : {
            interval: 4,
            walk1   : {name: '', volume: 8, pitch: 50, pan: 0},
            walk2   : {name: '', volume: 8, pitch: 50, pan: 0},
        },
        // 飛行船船乗船時の足音
        airship    : {
            interval: 4,
            walk1   : {name: '', volume: 8, pitch: 50, pan: 0},
            walk2   : {name: '', volume: 8, pitch: 50, pan: 0},
        },
        // 地形タグ 1 通過時の足音（2以降はコピーするか以下の通り値を変更してください）
        // terrainTag1 → terrainTag2
        terrainTag1: {
            interval: 3,
            walk1   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
            walk2   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
            dash1   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
            dash2   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
        },
        // リージョン 1 通過時の足音（2以降はコピーするか以下の通り値を変更してください）
        // region1 → region2
        region1    : {
            interval: 3,
            walk1   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
            walk2   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
            dash1   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
            dash2   : {name: 'se_walk02_l', volume: 8, pitch: 50, pan: 0},
        },
    };
    //=============================================================================
    // ユーザ書き換え領域 - 終了 -
    //=============================================================================

    /**
     * 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('FootstepSound');

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

    /**
     * Get database meta information.
     * @param object Database item
     * @param name Meta name
     * @returns {String} meta value
     */
    var getMetaValue = function(object, name) {
        return object.meta.hasOwnProperty(name) ? convertEscapeCharacters(object.meta[name]) : null;
    };

    /**
     * Get database meta information.(for multi language)
     * @param object Database item
     * @param names Meta name array (for multi language)
     * @returns {String} meta value
     */
    var getMetaValues = function(object, names) {
        var metaValue;
        names.some(function(name) {
            metaValue = getMetaValue(object, name);
            return metaValue !== null;
        });
        return metaValue;
    };

    /**
     * Convert escape characters.(require any window object)
     * @param text Target text
     * @returns {String} Converted text
     */
    var convertEscapeCharacters = function(text) {
        var windowLayer = SceneManager._scene._windowLayer;
        return windowLayer ? windowLayer.children[0].convertEscapeCharacters(text.toString()) : text;
    };

    //=============================================================================
    // Game_Interpreter
    //  プラグインコマンドを追加定義します。
    //=============================================================================
    var _Game_Interpreter_pluginCommand      = Game_Interpreter.prototype.pluginCommand;
    Game_Interpreter.prototype.pluginCommand = function(command, args) {
        _Game_Interpreter_pluginCommand.apply(this, arguments);
        this.pluginCommandFootstep(command, args);
    };

    Game_Interpreter.prototype.pluginCommandFootstep = function(command, args) {
        switch (getCommandName(command)) {
            case 'FS_INVALID_SOUND' :
            case '足音無効化':
                $gameSystem.footstepDisable = true;
                break;
            case 'FS_VALID_SOUND':
            case '足音有効化':
                $gameSystem.footstepDisable = false;
                break;
        }
    };

    //=============================================================================
    // Game_CharacterBase
    //  足音効果音の演奏処理を追加します。
    //=============================================================================
    var _Game_CharacterBase_initMembers      = Game_CharacterBase.prototype.initMembers;
    Game_CharacterBase.prototype.initMembers = function() {
        _Game_CharacterBase_initMembers.apply(this, arguments);
        this.setStepSoundFlg(false);
        this._stepToggle = null;
        this.resetStepCountForSound();
    };

    Game_CharacterBase.prototype.resetStepCountForSound = function() {
        this._stepCountForSound = null;
    };

    var _Game_CharacterBase_increaseSteps      = Game_CharacterBase.prototype.increaseSteps;
    Game_CharacterBase.prototype.increaseSteps = function() {
        _Game_CharacterBase_increaseSteps.apply(this, arguments);
        if (!this.isPlayStepSound() || $gameSystem.footstepDisable ||
            ($gameMap.isEventRunning() && param.EventRunningInvalid)) return;
        var soundsHash = [
            {key: 'airship', condition: this.isInAirship.bind(this)},
            {key: 'ship', condition: this.isInShip.bind(this)},
            {key: 'boat', condition: this.isInBoat.bind(this)},
            {key: 'region' + this.regionId(), condition: this.noCondition.bind(this)},
            {key: 'damageFloor', condition: this.isOnDamageFloor.bind(this)},
            {key: 'bush', condition: this.isOnBush.bind(this)},
            {key: 'counter', condition: this.isOnCounter.bind(this)},
            {key: 'ladder', condition: this.isOnLadder.bind(this)},
            {key: 'terrainTag' + this.terrainTag(), condition: this.noCondition.bind(this)},
            {key: 'always', condition: this.noCondition.bind(this)}
        ];
        soundsHash.some(function(data) {
            return this.playStepSound(data.key, data.condition);
        }.bind(this));
    };

    Game_CharacterBase.prototype.playStepSound = function(typeKey, condition) {
        if (condition() && footStepJson.hasOwnProperty(typeKey)) {
            var soundHash = footStepJson[typeKey];
            if (this._stepCountForSound++ % soundHash.interval === 0) {
                var se = this.findStepSound(soundHash);
                if (se) {
                    if (AudioManager.playAdjustSe) {
                        AudioManager.playAdjustSe(se, this);
                    } else {
                        AudioManager.playSe(se);
                    }
                }
                this._stepToggle = !this._stepToggle;
            }
            return true;
        }
        return false;
    };

    Game_CharacterBase.prototype.findStepSound = function(soundHash) {
        var soundKey = this.isDashing() ? 'dash' : 'walk';
        soundKey += this._stepToggle ? '2' : '1';
        return soundHash[soundKey] || null;
    };

    Game_CharacterBase.prototype.noCondition = function() {
        return true;
    };

    Game_CharacterBase.prototype.isOnDamageFloor = function() {
        return $gameMap.isDamageFloor(this.x, this.y);
    };

    Game_CharacterBase.prototype.isOnCounter = function() {
        return $gameMap.isCounter(this.x, this.y);
    };

    Game_CharacterBase.prototype.isInBoat = function() {
        return false;
    };

    Game_CharacterBase.prototype.isInShip = function() {
        return false;
    };

    Game_CharacterBase.prototype.isInAirship = function() {
        return false;
    };

    Game_CharacterBase.prototype.isPlayStepSound = function() {
        return this._stepSoundFlg;
    };

    Game_CharacterBase.prototype.setStepSoundFlg = function(value) {
        this._stepSoundFlg = !!value;
    };

    //=============================================================================
    // Game_Player
    //  キャラクターごとの足音演奏取得
    //=============================================================================
    Game_Player.prototype.isPlayStepSound = function() {
        return !$gameSwitches.value(param.InvalidSwitchId);
    };

    var _Game_Player_updateNonmoving      = Game_Player.prototype.updateNonmoving;
    Game_Player.prototype.updateNonmoving = function(wasMoving) {
        _Game_Player_updateNonmoving.apply(this, arguments);
        if (!wasMoving && param.ResetIfStop) {
            this.resetStepCountForSound();
        }
    };

    var _Game_Event_initialize = Game_Event.prototype.initialize;
    Game_Event.prototype.initialize = function() {
        _Game_Event_initialize.apply(this, arguments);
        this._footStepSeName = getMetaValues(this.event(), ['FootStep', '足音']) || null;
        if (this._footStepSeName) {
            this.setStepSoundFlg(true);name
        }
    };

    var _Game_Event_findStepSound = Game_Event.prototype.findStepSound;
    Game_Event.prototype.findStepSound = function(soundHash) {
        var se = _Game_Event_findStepSound.apply(this, arguments);
        if (se && this._footStepSeName) {
            return {
                name : this._footStepSeName,
                volume : se.volume,
                pitch : se.pitch,
                pan : se.pan
            };
        } else {
            return se;
        }
    };

    //=============================================================================
    // Game_System
    //  足音効果音の有効無効設定を追加定義します。
    //=============================================================================
    var _Game_System_initialize      = Game_System.prototype.initialize;
    Game_System.prototype.initialize = function() {
        _Game_System_initialize.apply(this, arguments);
        this.footstepDisable = null;
    };
})();


code:
//-----------------------------------------------------------------------------
//  Galv's Timed Message Popups
//-----------------------------------------------------------------------------
//  For: RPGMAKER MV
//  GALV_TimedMessagePopups.js
//-----------------------------------------------------------------------------
//  KNOWN ISSUE, CONTENTS MAX SCREEN WIDTH
//  2020-09-28 - Version 2.0 - fixed issue with battle targeting actors
//  2020-11-07 - Version 1.9 - Added ability to change y value in popup command
//  2020-04-30 - Version 1.8 - Fixed typo in code for battle popups targeting
//                             party members causing crash
//  2017-02-01 - Version 1.7 - Hid popups when menu opens and battle starts
//  2016-07-13 - Version 1.6 - Added script call to remove popups from screen.
//                           - Timed popups now work in default battle
//  2016-03-31 - Version 1.5 - fixed minor mistake
//  2016-03-27 - Version 1.4 - added faces, arrows, Y offset bug fix and
//                           - window positioning over target
//  2016-03-24 - Version 1.3 - added ability to specify follower actor and
//                           - set windowskin
//  2016-03-23 - Version 1.2 - changed code to use | to split x|y coords
//  2016-03-23 - Version 1.1 - added "delay" setting and follower targeting
//  2016-03-23 - Version 1.0 - release
//-----------------------------------------------------------------------------
// Terms can be found at:
// galvs-scripts.com
//-----------------------------------------------------------------------------

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

var Galv = Galv || {};            // Galv's main object
Galv.Mpup = Galv.Mpup || {};        // Galv's stuff

//-----------------------------------------------------------------------------
/*:
 * @plugindesc (v.2.0) Display popup message boxes on screen that do not stop gameplay and auto close after a set time.
 *
 * @author Galv - galvs-scripts.com
 *
 * @param Y Offset
 * @desc Offset Y position by this much when popup is displayed over a character if no value set in plugin command.
 * @default -60
 *
 * @param Default Windowskin
 * @desc Windowskin file from /img/system/ that popup messages use by default
 * @default Window
 *
 * @param Use Arrows
 * @desc Use windowskin arrows to point at target of the popup message
 * @default true
 *
 * @param Windowskin Back Opacity
 * @desc Used for all custom windowskins (i.e: not 'Window.png').
 * 0 - 255
 * @default 255
 *
 * @param Text Outline Width
 * @desc Default text has an outline. Change this for all custom windows (not Window.png). default 4
 * @default 0
 *
 * @help
 *   Galv's Timed Message Popups
 * ----------------------------------------------------------------------------
 * Creates timed message popup boxes that can appear at a position on the
 * screen or at a character's location. These popups do not stop player
 * movement and you can display as many of them at one time as needed.
 *
 * To activate a message popup, inside a "Show Text" box, you will need to
 * include a tag on the first line of the message:
 *
 *    <c:target,time,delay,windowskin,yoffset>
 *
 * target  = the ID of an event (0 for current event) OR
 *           x|y screen coordinates OR
 *           negatives for followers (-1 being leader, -2 for second, etc.)
 *           OR... you can use a1, a2, a3, etc. to specify certain actor.
 *           If follower/actor is not in party, message won't display.
 * time    = frames the caption will be displayed before it closes
 * delay   = frames the caption will remain invisible before opening
 * windowskin = filename of new windowskin located in /img/system/
 *              do not include this to use normal windowskin.
 * yoffset = a different y offset for the popup than default.
 *
 * EXAMPLES:
 * <c:4,160,0>     // Message on event 4 for 160 frames
 * <c:-1,60,10>    // After 10 frames, message on player for 60 frames
 * <c:-3,80,20>    // After 20 frames, message on party member 3 for 80 frames
 * <c:a7,60,0>     // Message on actor 7 for 60 frames if actor is a follower
 * <c:0,100,0>     // Message on current event for 100 frames
 * <c:100|100,80,5>  // After 5 frames, message at screen x100 y100 for 80 fr
 * <c:0|0,90,0,Window2>  // message at screen x0 y0 for 90 frames using
 *                       // /img/system/Window2.png windowskin file.
 * <c:4,160,0,,-40> // Message on event 4 for 160 frames with yoffset -40
 *
 * Show Text message box settings for position bottom, middle and top will
 * change where the window displays over the target.
 *
 * Note that when the player opens the menu, even messages that were created
 * with a delay will be removed.
 *
 * ----------------------------------------------------------------------------
 *   SCRIPT CALL
 * ----------------------------------------------------------------------------
 *
 *   Galv.Mpup.clear();          // Remove all message popups on screen
 *
 * ----------------------------------------------------------------------------
 *   Note tag for ENEMIES and ACTORS
 * ----------------------------------------------------------------------------
 *    <msgY:x>      // x being the amount of pixels to move vertically for
 *                  // timed messages in BATTLE. Leaving this tag out will use
 *                  // default position Galv set up for default battle.
 */

//-----------------------------------------------------------------------------
//  CODE STUFFS
//-----------------------------------------------------------------------------

(function() {

Galv.Mpup.thisEvent = null;
Galv.Mpup.yOffset = Number(PluginManager.parameters('Galv_TimedMessagePopups')['Y Offset']);
Galv.Mpup.windowskin = PluginManager.parameters('Galv_TimedMessagePopups')['Default Windowskin'];
Galv.Mpup.arrows = PluginManager.parameters('Galv_TimedMessagePopups')['Use Arrows'].toLowerCase() == 'true' ? true : false;
Galv.Mpup.opac = Number(PluginManager.parameters('Galv_TimedMessagePopups')['Windowskin Back Opacity']);
Galv.Mpup.outlineWidth = Number(PluginManager.parameters('Galv_TimedMessagePopups')['Text Outline Width']);

Galv.Mpup.Game_Interpreter_command101 = Game_Interpreter.prototype.command101;
Game_Interpreter.prototype.command101 = function() {
	var cap = this._list[this._index + 1].parameters[0].match(/<c:(.*)>/i);

	var pos = 2; //this._params[3];
	var data = this._params.clone();

	if (!cap) {
		Galv.Mpup.Game_Interpreter_command101.call(this);
	} else {
		this.createCaption(cap,pos,data);
	};
};

Game_Interpreter.prototype.createCaption = function(cap,pos,data) {
	Galv.Mpup.thisEvent = this._eventId;
	var txtArray = [];
	var targetActor = false;

	// get all text:
	while (this.nextEventCode() === 401) {  // Text data
		this._index++;
		txtArray.push(this.currentCommand().parameters[0]);
	};

	txtArray[0] = txtArray[0].replace(cap[0],"");

	var o = cap[1].split(",");
		var windowskin = o[3];
		if (windowskin) ImageManager.loadSystem(windowskin);

	if (o[0].contains("|")) {
		// X Y LOCATION
		var xy = o[0].split("|");
		var target = [Number(xy[0]),Number(xy[1])];
	} else if (o[0].contains("a")) {
		// ACTOR
		var actorIndex = $gameActors.actor(Number(o[0].replace("a",""))).index();
		if (actorIndex < 0) return;
		var target = -(actorIndex + 1);
		targetActor = true;
	} else {
		var target = Number(o[0]);
	};
	var time = Number(o[1]);
	var delay = Number(o[2]) || 0;

	var yoffset = Number(o[4]) || false;
	SceneManager._scene.createCaptionWindow(target,time,txtArray,data,delay,windowskin,yoffset,targetActor);
};

Galv.Mpup.clear = function() {
	SceneManager._scene.removeCaptionWindows();
};

// Scene Base
//-----------------------------------------------------------------------------

Scene_Base.prototype.updateCaptionBoxes = function() {
	for (var i = 0; i < this._captionWindows.length; i++) {
		if (!this._captionWindows[i] || !this._captionWindows[i].active) {
			this._windowLayer.removeChild(this._captionWindows[i]);
			this._captionWindows[i] = null;
			this._captionWindows.splice(i, 1);
			i--;
		};
	};
};

Scene_Base.prototype.createCaptionWindow = function(target,time,textArray,data,delay,windowskin) {};
Scene_Base.prototype.removeCaptionWindows = function() {};

// Scene Map
//-----------------------------------------------------------------------------

Galv.Mpup.Scene_Map_initialize = Scene_Map.prototype.initialize;
Scene_Map.prototype.initialize = function() {
    Galv.Mpup.Scene_Map_initialize.call(this);
	this._captionWindows = [];
};

Galv.Mpup.Scene_Map_update = Scene_Map.prototype.update;
Scene_Map.prototype.update = function() {
    Galv.Mpup.Scene_Map_update.call(this);
	this.updateCaptionBoxes();
};

Scene_Map.prototype.createCaptionWindow = function(target,time,textArray,data,delay,windowskin,yoffset,targetActor) {
	var p = new Window_GalvCaption(target,time,textArray,data,delay,windowskin,yoffset,targetActor);
	this._captionWindows.push(p);
	this.addWindow(p);
};

Galv.Mpup.Scene_Map_startEncounterEffect = Scene_Map.prototype.startEncounterEffect;
Scene_Map.prototype.startEncounterEffect = function() {
	Galv.Mpup.Scene_Map_startEncounterEffect.call(this);
	this.removeCaptionWindows();
};

Galv.Mpup.Scene_Map_terminate = Scene_Map.prototype.terminate;
Scene_Map.prototype.terminate = function() {
	for (var i = 0; i < this._captionWindows.length; i++) {
		this._captionWindows[i].visible = false;
	};
	Galv.Mpup.Scene_Map_terminate.call(this);
};

Scene_Base.prototype.removeCaptionWindows = function() {
	for (var i = 0; i < this._captionWindows.length; i++) {
		this._captionWindows[i].active = false;
	};
};

// Scene Battle
//-----------------------------------------------------------------------------

Galv.Mpup.Scene_Battle_initialize = Scene_Battle.prototype.initialize;
Scene_Battle.prototype.initialize = function() {
    Galv.Mpup.Scene_Battle_initialize.call(this);
	this._captionWindows = [];
};

Galv.Mpup.Scene_Battle_update = Scene_Battle.prototype.update;
Scene_Battle.prototype.update = function() {
    Galv.Mpup.Scene_Battle_update.call(this);
	this.updateCaptionBoxes();
};

Scene_Battle.prototype.createCaptionWindow = function(target,time,textArray,data,delay,windowskin,yoffset,targetActor) {
	var p = new Window_GalvCaption(target,time,textArray,data,delay,windowskin,yoffset,targetActor);
	this._captionWindows.push(p);
	this.addWindow(p);
};

// Game_BattlerBase
//-----------------------------------------------------------------------------

// Caption Window
//-----------------------------------------------------------------------------

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

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

Window_GalvCaption.prototype.initialize = function(target,time,textArray,data,delay,windowskin,yoffset,targetActor) {
	// target = [x,y] or event id or 0 for player
	this._pos = data[3];  // bottom is 2, top is 0, middle is 1
	if (data[0] != "") {
		this._faceBitmap = ImageManager.loadFace(data[0]);
		this._faceName = data[0];
		this._faceIndex = data[1];
	};
	this.skin = windowskin || Galv.Mpup.windowskin;

	if (SceneManager._scene.constructor.name == 'Scene_Map') {
		this.setMapTarget(target,yoffset,targetActor);
	} else {
		this.setBattleTarget(target,yoffset,targetActor);
	};

	this._time = time + delay || 160;
	this._delayTime = this._time - delay;
	this._txtArray = textArray;
	var h = this.fittingHeight(this._txtArray.length);
	h = this._faceName ? Math.max(h, Window_Base._faceHeight + this.standardPadding() * 2) : h;

    Window_Base.prototype.initialize.call(this, this.targetX, this.targetY, Graphics.width, h);
	this.windowskin = ImageManager.loadSystem(this.skin);
	if (this.skin != "Window") this.backOpacity = Galv.Mpup.opac;
	this._downArrowSprite.visible = false;
	this._upArrowSprite.visible = false;
	this.checkImages();
    this.openness = 0;

	if (!this._disable) this.active = true;
};

Window_GalvCaption.prototype.setMapTarget = function(target,yoffset,targetActor) {
	this._heightY = yoffset || Galv.Mpup.yOffset;

	if (Number.isInteger(target)) {
		// event ID or player
		if (target >= -1) {
			switch (target) {
				case 0:
					// Current event
					this.target = $gameMap.event(Galv.Mpup.thisEvent);
					break;
				case -1:
					// Player
					this.target = $gamePlayer;
					break;
				default:
					// Event
					this.target = $gameMap.event(target);
					break;
			};

		} else {
			// Follower
			var f = Math.abs(target) - 2;
			this.target = $gamePlayer._followers.follower(f);
			if (f > $gameParty.battleMembers().length) this._disable = true;
		};
		Galv.Mpup.thisEvent = null;
		this.follow = true; // follow the object in update
	} else {
		this.targetX = target[0];
		this.targetY = target[1];
		this.toScreen = true;
	};
};

Window_GalvCaption.prototype.setBattleTarget = function(target,yoffset,targetActor) {
	Galv.Mpup.thisEvent = null;
	this._heightY = yoffset || 0;
	if (Number.isInteger(target)) {
		// event ID or player
		if (target >= -1 && !targetActor) {
			switch (target) {
				case -1:
					// battle leader
					this.target = $gameParty.battleMembers()[Math.abs(target) - 1];
					if (!this.target || this.target.isDead()) this._disable = true;
					break;
				default:
					// enemy index
					this.target = $gameTroop.members()[target];
					if (!this.target || this.target.isDead()) this._disable = true;
					break;
			};

		} else {
			// battle actors
			var mem = Math.abs(target) - 1;

			this.target = $gameParty.members()[mem];
			if (mem > $gameParty.members().length) this._disable = true;
		};
		if (!this.toScreen) this.follow = true; // follow the object in update
	} else {
		this.targetX = target[0];
		this.targetY = target[1];
		this.toScreen = true;

	};

	this._heightY = this.target ? this.target._offsetmsgY : 0;

	// Target has no screen pos functions?
	if (this.target && !this.target.screenX) {
		this.target.screenX = function() {return this._msgX || 0};
		this.target.screenY = function() {return this._msgY || 0};
	};
};

Window_GalvCaption.prototype.loadWindowskin = function() {
	this.windowskin = ImageManager.loadSystem(this.skin);
};

Window_GalvCaption.prototype.setWindowDimensions = function() {
	var w = 10;
	this.contents.clear();
	// Calc max width and line height to get dimensions

	var xO = this._faceName ? Window_Base._faceWidth + 10 : 0;

	for (var i = 0; i < this._txtArray.length; i++) {
        var lineWidth = this.textWidthEx(this._txtArray[i]) + this.standardPadding() * 2;
        if (w < lineWidth) {
            w = lineWidth;
        };
		if (this.skin != 'Window') this.contents.outlineWidth = Galv.Mpup.outlineWidth;
		this.drawTextEx(this._txtArray[i], xO, this.lineHeight() * i);

    }
	this.width = w + xO;

	if (this._faceName) {
		this.drawFace(this._faceName, this._faceIndex, 0, 0);
	};

	this._offsetY = 0;

	if (this._pos == 0) {
		this._offsetY += -this.height + this._heightY;
	} else if (this._pos == 1) {
		this._offsetY += -this.height / 2 - 24;
	} else if (this._pos == 2) {
		this._offsetY += Math.abs(this._heightY * 0.2);
	};
};

Window_GalvCaption.prototype.textWidthEx = function(text) {
    return this.drawTextEx(text, 0, this.contents.height);
};

Window_GalvCaption.prototype.update = function() {
	Window_Base.prototype.update.call(this);
	if (this._disable) return;
	if (!this.imagesLoaded) this.checkImages();

	if (this._time == this._delayTime && !this._disable) {this.open()};
	if (this._time <= 0) {
		if (this._time == 0) {
			this.close();
		} else if (this.openness == 0) {
			this.active = false;
		};
	};
	this._time -= 1;

	if (this.follow) {
		var centX = this.target.screenX() - this.width / 2;
		this.x = centX;
		this.y = this.target.screenY() + this._offsetY;
	};
};

Window_GalvCaption.prototype.checkImages = function() {
	if (this.windowskin.isReady()) {
		if (!this._faceBitmap || this._faceBitmap && this._faceBitmap.isReady()) {
			this.setWindowDimensions();
			this.imagesLoaded = true;
			this._faceBitmap = null;
		};
	};
};

if (Galv.Mpup.arrows) {
	Window_GalvCaption.prototype._updateArrows = function() {
		if (this.toScreen) { return };
		if (this._pos == 0) { // top
			this._downArrowSprite.visible = this.isOpen() && this._pos == 0;
			this._downArrowSprite.anchor.y = -0.8;
		} else if (this._pos == 2) { // bottom
			this._upArrowSprite.visible = this.isOpen() && this._pos == 2;
			this._upArrowSprite.anchor.y = 1.7;
		};
	};
};

// Get note offsets
Galv.Mpup.Game_Enemy_setup = Game_Enemy.prototype.setup;
Game_Enemy.prototype.setup = function(enemyId, x, y) {
	Galv.Mpup.Game_Enemy_setup.call(this,enemyId,x,y);
	var n = this.enemy().note.match(/<msgY:(.*)>/i);
	this._offsetmsgY = n ? Number(n[1]) : -150;
};

Galv.Mpup.Game_Actor_setup = Game_Actor.prototype.setup;
Game_Actor.prototype.setup = function(actorId) {
	Galv.Mpup.Game_Actor_setup.call(this,actorId);
	var n = this.actor().note.match(/<msgY:(.*)>/i);
	this._offsetmsgY = n ? Number(n[1]) : -40;
};

// Get battler positions for messages
Galv.Mpup.Sprite_Battler_updatePosition = Sprite_Battler.prototype.updatePosition;
Sprite_Battler.prototype.updatePosition = function() {
	Galv.Mpup.Sprite_Battler_updatePosition.call(this);
	this._battler._msgX = this.x;
	this._battler._msgY = this.y + this._battler._offsetmsgY;
};

})();


code:
//-----------------------------------------------------------------------------
//  Galv's Dynamic Traits
//-----------------------------------------------------------------------------
//  For: RPGMAKER MV
//  Galv_DynamicTraits.js
//-----------------------------------------------------------------------------
//  2016-10-30 - Version 1.0 - release
//-----------------------------------------------------------------------------
// Terms can be found at:
// galvs-scripts.com
//-----------------------------------------------------------------------------

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

var Galv = Galv || {};                  // Galv's main object
Galv.DTRAITS = Galv.DTRAITS || {};          // Galv's stuff

// Galv Notetag setup (Add notes required for this plugin if not already added)
Galv.noteFunctions = Galv.noteFunctions || [];       // Add note function to this.

//-----------------------------------------------------------------------------
/*:
 * @plugindesc (v.1.0) Add traits to an actor during game or gain traits on level up.
 *
 * @author Galv - galvs-scripts.com
 *
 * @param Display Trait On Level
 * @desc true or false if trait gains are displayed in default level up message
 * @default true
 *
 * @param Trait Gained Text
 * @desc The text displayed before gaining a trait on level up
 * @default Gained Trait:
 *
 *
 * @help
 *   Galv's Dynamic Traits
 * ----------------------------------------------------------------------------
 * This plugin allows you to manually add new traits to actors during the game
 * or to set up actors and classes to give new traits when actors level up.
 * Actors and classes have notetags that control which traits will be gained
 * when reaching certain levels and a notification of traits gained can be
 * added to the level up message if desired.
 *
 * Customizing the trait level-up text more in detail is possible but must be
 * done by editing the plugin file and requires a little bit of javascript
 * understanding to see how it works. Please do not ask Galv to teach you this.
 *
 * ----------------------------------------------------------------------------
 *   NOTE TAG for ACTORS and CLASSES
 * ----------------------------------------------------------------------------
 * Traits gained at level
 * ----------------------
 * Actors and classes can be tagged with the following note tag to specify a
 * list of traits that will be gained on each designated level-up. You can have
 * as many lvl,code,id,val traits each separated by |.
 *
 *       <traits:lvl,code,id,val|lvl,code,id,val|lvl,code,id,val>
 *
 * lvl is the level that the trait will be aquired at
 * code, id and val settings can be seen in the below table.
 *
 * TRAIT                      CODE         ID               VAL
 * ------------------         -------      -----------      -------------
 * Element Rate               11           elementId        % as decimal
 * Debuff Rate                12           paramId*         % as decimal
 * State Rate                 13           stateId          % as decimal
 * State Resist               14           stateId          N/A
 *
 * Parameter                  21           paramId*         % as decimal
 * Ex-Parameter               22           ExParamId*       % as decimal
 * Sp-Parameter               23           SpParamId*       % as decimal
 *
 * Attack Element             31           elementId        N/A
 * Attack State               32           stateId          % as decimal
 * Attack Speed               33           integer          N/A
 * Attack Times +             34           0                integer
 *
 * Add Skill Type             41           skillTypeId      N/A
 * Seal Skill Type            42           skillTypeId      N/A
 * Add Skill                  43           skillId          N/A
 * Seal Skill                 44           skillId          N/A
 *
 * Equip Weapon               51           weaponTypeId     N/A
 * Equip Armor                52           armorTypeId      N/A
 * Lock Equip                 53           equipTypeId      N/A
 * Seal Equip                 54           equipTypeId      N/A
 * Slot Type                  55           0 norm 1 dual    N/A
 *
 * Action Times +             61           0                % as decimal
 * Special Flag               62           flagId*          N/A
 * Collapse Effect            63           collapseId*      N/A
 * Party Ability              64           partyAbilityId*  N/A
 * ----------------------------------------------------------------------------
 * NOTES:
 *   ID's generally start at 1 for values that can be seen in the database.
 *   Where there is a * above, the first id in their list is 0 instead of 1.
 *
 *   Where VAL is N/A, simply put 0 in the val position of the notetag/script
 *
 *   Actors will use the highest level trait if multiple level ups have the
 *   same trait (same trait code).
 *   Classes will use the highest level trait if multiple level ups have the
 *   same trait (same trait code).
 *   This means that if an actor has the same trait code as class class's trait
 *   then the actor will use BOTH traits but only the highest from each.
 * ----------------------------------------------------------------------------
 *
 * ----------------------------------------------------------------------------
 *  SCRIPT CALLS
 * ----------------------------------------------------------------------------
 * Actors can have traits added to them manually via script calls. Script calls
 * can also be used to remove these added traits from the actor again (but it
 * cannot remove traits added via level or from actors/items/states/etc/ from
 * the database).
 * Adding traits using this method will replace any previous traits also added
 * by this method that have the same code. (So only one of each trait can exist
 * on an actor from these manually added traits).
 *
 *    Galv.DTRAITS.addTrait(actorId,code,id,value);
 *
 *    Galv.DTRAITS.removeTrait(actorId,code);
 *
 * ----------------------------------------------------------------------------
 */

//-----------------------------------------------------------------------------
//  CODE STUFFS
//-----------------------------------------------------------------------------

(function() {

//-----------------------------------------------------------------------------
//  LEVEL UP TEXT
//-----------------------------------------------------------------------------
// Below is a list of traits and how the text displays in the level up message.
// To make a trait not display in level up txt, make the name an empty string ''

Galv.DTRAITS.names = {
// integer: {name: 'string', d: 'eval string', v 'string', message: 'level up message'},

	11: {name: 'Element Rate',		d: '$dataSystem.elements[#1]',		v:'#1%',		message:'#n #d #v'},	// Element Rate
	12: {name: 'Debuff Rate',		d: '$dataSystem.terms.params[#1]',	v:'#1%',		message:'#n #d #v'},	// Debuff Rate
	13: {name: 'State Rate',		d: '$dataStates[#1].name',			v:'#1%',		message:'#n #d #v'},	// State Rate
	14: {name: 'State Resist',		d: '$dataStates[#1].name',			v:'',			message:'#n #d'},		// State Resist

	21: {name: 'Parameter',			d: '$dataSystem.terms.params[#1]',	v:'#1%',		message:'#d #v'},	// Parameter
	22: {name: 'Ex-Parameter',		d: 'Galv.DTRAITS.xparams[#1]',		v:'#1%',		message:'#d #v'},	// Ex-Params
	23: {name: 'Sp-Parameter',		d: 'Galv.DTRAITS.sparams[#1]',		v:'#1%',		message:'#d #v'},	// Sp-Params

	31: {name: 'Attack Element',	d: '$dataSystem.elements[#1]',		v:'',			message:'#n #d'},		// Attack Element
	32: {name: 'Attack State',		d: '$dataSystem.elements[#1]',		v:'',			message:'#n #d'},		// Attack State
	33: {name: 'Attack Speed',		d: '#1',							v:'',			message:'#n #d'},		// Attack Speed
	34: {name: 'Attack Times +',	d: '#1',							v:'',			message:'#n #d'},		// Attack Times +

	41: {name: 'Add Skill Type',	d:'$dataSystem.skillTypes[#1]',		v:'',			message:'#n #d'},		// Add Skill Type
	42: {name: 'Seal Skill Type',	d:'$dataSystem.skillTypes[#1]',		v:'',			message:'#n #d'},		// Seal Skill Type
	43: {name: 'Add Skill',			d:'$dataSkills[#1].name',			v:'',			message:'#n #d'},		// Add Skill
	44: {name: 'Seal Skill',		d:'$dataSkills[#1].name',			v:'',			message:'#n #d'},		// Seal Skill

	51: {name: 'Equip Weapon',		d:'$dataSystem.weaponTypes[#1]',	v:'',			message:'#n #d'},		// Equip Weapon (Type)
	52: {name: 'Equip Armor',		d:'$dataSystem.armorTypes[#1]',		v:'',			message:'#n #d'},		// Equip Armor (Type)
	53: {name: 'Lock Equip',		d:'$dataSystem.equipTypes[#1]',		v:'',			message:'#n #d'},		// Lock Equip (Type)
	54: {name: 'Seal Equip',		d:'$dataSystem.equipTypes[#1]',		v:'',			message:'#n #d'},		// Seal Equip (Type)
	55: {name: 'Slot Type',			d:'#1 == 1 ? "Dual Wield" : ""',	v:'',			message:'#n #d'},		// Slot Type (0 norm, 1 dual wield)

	61: {name: 'Action Times +',	d:'',								v:'',			message:'#n'},			// Ation Times +
	62: {name: 'Special Flag',		d:'Galv.DTRAITS.sFlags[#1]',		v:'',			message:'#d'},		// Special Flag
	63: {name: '',					d:'',								v:'',			message:'#n'},			// Collapse Effect
	64: {name: 'Party Ability',		d:'Galv.DTRAITS.pAbility[#1]',		v:'',			message:'#d'},		// Party Ability
};

Galv.DTRAITS.xparams = {
	0: 'Hit rate',
	1: 'Evasion rate',
	2: 'Critical rate',
	3: 'Critical Evasion rate',
	4: 'Magic Evasion rate',
	5: 'Magic Reflection rate',
	6: 'Counter attack rate',
	7: 'Hp Regeneration rate',
	8: 'Mp Regeneration rate',
	9: 'Tp Regeneration rate',
};

Galv.DTRAITS.sparams = {
	0: 'Target Rate',
	1: 'Guard effect rate',
	2: 'Recovery effect rate',
	3: 'Pharmacology',
	4: 'Mp Cost Rate',
	5: 'Tp Charge Rate',
	6: 'Physical Damage Rate',
	7: 'Magical Damage Rate',
	8: 'Floor Damage Rate',
	9: 'Experience Rate',
};

Galv.DTRAITS.sFlags = {
	0: 'Auto Battle',
	1: 'Guard',
	2: 'Substitute',
	3: 'Preserve Tp'
};

Galv.DTRAITS.pAbility = {
	0: 'Encounter Half',
	1: 'Encounter None',
	2: 'Cancel Surprise',
	3: 'Raise Pre-emptive',
	4: 'Gold Double',
	5: 'Drop Item Double'
};

//-----------------------------------------------------------------------------
//  OTHER STUFF
//-----------------------------------------------------------------------------

Galv.DTRAITS.displayLevel = PluginManager.parameters('Galv_DynamicTraits')["Display Trait On Level"].toLowerCase() === 'true' ? true : false;
Galv.DTRAITS.gainTxt = PluginManager.parameters('Galv_DynamicTraits')["Trait Gained Text"];

Galv.DTRAITS.createTrait = function(code,id,value) {
	return {code: Number(code), dataId: Number(id), value: Number(value)};
};

Galv.DTRAITS.addTrait = function(actorId,code,id,value) {
	var actor = $gameActors.actor(actorId);
	if (actor) actor._dTraits[code] = Galv.DTRAITS.createTrait(code,id,value);
};

Galv.DTRAITS.removeTrait = function(actorId,code) {
	var actor = $gameActors.actor(actorId);
	if (actor) delete(actor._dTraits[code]);
};

Galv.DTRAITS.traitTxt = function(trait) {
	var c = trait.code;
	var d = trait.dataId;
	var v = trait.value;

	if (!Galv.DTRAITS.names[trait.code].name) return null;

	// #n
	var name = Galv.DTRAITS.names[trait.code].name;

	// #d
	var data = Galv.DTRAITS.names[trait.code].d;
	data = data.replace('#1',d);
	data = eval(data) || '';

	// #v
	var value = Galv.DTRAITS.names[trait.code].v;
	if (value.contains('%')) v = Number(v * 100);
	value = value.replace('#1',v);

	var text = Galv.DTRAITS.names[trait.code].message;
	text = text.replace('#n', name);
	text = text.replace('#d', data);
	text = text.replace('#v', value);

	return Galv.DTRAITS.gainTxt + ' ' + text;
};

//-----------------------------------------------------------------------------
//  NOTE TAGS
//-----------------------------------------------------------------------------

if (!Galv.notetagAlias) {   // Add alias only if not added by another Galv plugin
	Galv.DTRAITS.Scene_Boot_start = Scene_Boot.prototype.start;
	Scene_Boot.prototype.start = function() {
		for (var i = 0;i < Galv.noteFunctions.length; i++) {
			Galv.noteFunctions[i]();
		};
		Galv.DTRAITS.Scene_Boot_start.call(this);
	};
	Galv.notetagAlias = true;
};

Galv.DTRAITS.notetags = function() {
	// Class
	for (var i = 1;i < $dataClasses.length;i++) {
		$dataClasses[i].traitsByLvl = {};
		var note = $dataClasses[i].note.toLowerCase().match(/<traits:(.*)>/i)
		if (note) {
			note = note[1].split('|');

			for (var t = 0; t < note.length; t++) {
				var data = note[t].split(',');
				var lvl = Number(data[0]);
				var code = Number(data[1]);
				if (!$dataClasses[i].traitsByLvl[lvl]) $dataClasses[i].traitsByLvl[lvl] = {};
				$dataClasses[i].traitsByLvl[lvl][code] = Galv.DTRAITS.createTrait(data[1],data[2],data[3]);
			}
		}
	};

	// Actor
	for (var i = 1;i < $dataActors.length;i++) {
		$dataActors[i].traitsByLvl = {};
		var note = $dataActors[i].note.toLowerCase().match(/<traits:(.*)>/i)
		if (note) {
			note = note[1].split('|');

			for (var t = 0; t < note.length; t++) {
				var data = note[t].split(',');
				var lvl = Number(data[0]);
				var code = Number(data[1]);
				if (!$dataActors[i].traitsByLvl[lvl]) $dataActors[i].traitsByLvl[lvl] = {};
				$dataActors[i].traitsByLvl[lvl][code] = Galv.DTRAITS.createTrait(data[1],data[2],data[3]);
			}
		}
	};
};

Galv.noteFunctions.push(Galv.DTRAITS.notetags);

//-----------------------------------------------------------------------------
//  GAME ACTOR
//-----------------------------------------------------------------------------

Galv.DTRAITS.Game_Actor_initMembers = Game_Actor.prototype.initMembers;
Game_Actor.prototype.initMembers = function() {
	Galv.DTRAITS.Game_Actor_initMembers.call(this);
	this._dTraits = {};
};

Galv.DTRAITS.Game_Actor_allTraits = Game_Actor.prototype.allTraits;
Game_Actor.prototype.allTraits = function() {
	var traits = Galv.DTRAITS.Game_Actor_allTraits.call(this);

	var cTraits = [];  // class traits by level
	var aTraits = [];  // actor traits by level

	for (var lvl = 1; lvl < this._level + 1; lvl++) {
		// class
		var clvlTraits = $dataClasses[this._classId].traitsByLvl[lvl];
		if (clvlTraits) {
			for (var trait in clvlTraits) {
				var code = clvlTraits[trait].code
				cTraits[code] = clvlTraits[trait];
			}
		}

		// actor
		var alvlTraits = $dataActors[this._actorId].traitsByLvl[lvl];
		if (alvlTraits) {
			for (var trait in alvlTraits) {
				var code = alvlTraits[trait].code
				aTraits[code] = alvlTraits[trait];
			}
		}
	}

	// ACTOR MANUALLY ADDED TRAITS
	for (var trait in this._dTraits) {
		traits.push(this._dTraits[trait]);
	}

	// MERGE TRAIT ARRAYS
	traits = traits.concat(aTraits,cTraits);

	return traits;
};

// display in level up?
if (Galv.DTRAITS.displayLevel) {

	Galv.DTRAITS.Game_Actor_changeExp = Game_Actor.prototype.changeExp;
	Game_Actor.prototype.changeExp = function(exp, show) {
		if (show) this._tempLastTraits = this.allTraits();
		Galv.DTRAITS.Game_Actor_changeExp.call(this,exp,show);
	};

	Galv.DTRAITS.Game_Actor_displayLevelUp = Game_Actor.prototype.displayLevelUp;
	Game_Actor.prototype.displayLevelUp = function(newSkills) {
		Galv.DTRAITS.Game_Actor_displayLevelUp.call(this,newSkills);
		this.displayLevelTraits();
	};

	Game_Actor.prototype.findNewTraits = function() {
		var newTraits = this.allTraits();

		if (this._tempLastTraits) {
			for (var i = 0; i < this._tempLastTraits.length; i++) {
				var index = newTraits.indexOf(this._tempLastTraits[i]);
				if (index >= 0) {
					newTraits.splice(index, 1);
				}
			}
		}
		return newTraits;
	};

	Game_Actor.prototype.displayLevelTraits = function() {
		var newTraits = this.findNewTraits();

		newTraits.forEach(function(trait) {
			var txt = Galv.DTRAITS.traitTxt(trait);
			if (txt) $gameMessage.add(txt);
		});

		this._tempLastTraits = null;
	};
}

})();


code:
//
//  入手インフォメーション ver1.11
//
// author yana
//

var Imported = Imported || {};
Imported['GetInformation'] = 1.11;

if (!Imported.CommonPopupCore) {
	console.error('CommonPopupCoreを導入してください。')
}
/*:
 * @plugindesc ver1.11/アイテムの入手などにスライドアニメするインフォメーションを追加するプラグインです。
 * @author Yana
 *
 * @param Info Disable Switch Id
 * @desc 入手インフォメーションを無効化するためのスイッチのIDです。
 * このスイッチがONの時、インフォメーションが無効化されます。
 * @default 10
 *
 * @param Use Battle Info
 * @desc 入手インフォメーションを戦闘中に使用するかの設定です。
 * true/falseで設定してください。
 * @default true
 *
 * @param Use Rewards Info
 * @desc 戦利品を入手インフォメーションで表示するかの設定です。
 * true/falseで設定してください。
 * @default true
 *
 * @param Info Pattern
 * @desc 入手インフォメーションの動作パターンです。
 * Normal:普通 GrowUp:にょき Stretch:うにょーん
 * @default GrowUp
 *
 * @param Info Font Size
 * @desc 入手インフォメーションの文字サイズです。
 * @default 20
 *
 * @param Info Count
 * @desc 入手インフォメーションの表示時間です。
 * @default 120
 *
 * @param Info Delay
 * @desc 入手インフォメーションのディレイです。
 * 連続で設定された時、この数値の表示ディレイがかかります。
 * @default 20
 *
 * @param Info MoveWait
 * @desc 入手インフォメーションが完全に表示された状態の時間です。
 * @default 100
 *
 * @param Info MoveFade
 * @desc 入手インフォメーションのフェードの時間です。
 * @default 10
 *
 * @param Info Position
 * @desc 入手インフォメーションの表示位置です。
 * Upを指定すると、画面上部になります。
 * @default
 *
 * @param Info Slide Action
 * @desc 入手インフォメーションのスライド方向です。
 * Downを指定すると、上から下になります。
 * @default
 *
 * @param Info Sup X
 * @desc 入手インフォメーションの表示位置補正X座標です。
 * @default 0
 *
 * @param Info Sup Y
 * @desc 入手インフォメーションの表示位置補正Y座標です。
 * @default 0
 *
 * @param Info Width
 * @desc 入手インフォメーションの横幅です。
 * @default 816
 *
 * @param Gold Icon Index
 * @desc 所持金のアイコンとして使用するアイコンのインデックスです。
 * @default 314
 *
 * @param Actor Icon Start Index
 * @desc アクターのアイコンとして使用するアイコンの最初のインデックスです。
 * @default 320
 *
 * @param Battle Show List
 * @desc 戦闘中に表示するインフォメーションのリストです。item,gold,
 * exp,skill,params,level,abp,classLevelで指定してください。
 * @default item,gold,exp,skill,params,level,abp,classLevel
 *
 * @param Get Gold Text
 * @desc 所持金の増加で表示されるテキストです。。
 * _icon:上記で設定したアイコンインデックス _num:金額
 * @default 「\I[_icon]_num\C[14]\G\C[0]」 を\C[24]手に入れた！
 *
 * @param Lost Gold Text
 * @desc 所持金の減少で表示されるテキストです。
 * _icon:上記で設定したアイコンインデックス _num:金額
 * @default 「\I[_icon]_num\C[14]\G\C[0]」 を\C[2]失った・・・
 *
 * @param Get Item Text
 * @desc アイテムの増加で表示されるテキストです。
 * _icon:アイコン _name:名前　_desc1:解説1行目 _desc2:解説2行目
 * @default 「\I[_icon]_name」 を\C[24]手に入れた！\n\C[6]_desc1
 *
 * @param Lost Item Text
 * @desc アイテムの減少で表示されるテキストです。
 * _icon:アイコン _name:名前　_desc1:解説1行目 _desc2:解説2行目
 * @default 「\I[_icon]_name」 を\C[2]失った・・・\n\C[6]_desc1
 *
 * @param Get Item Text Num
 * @desc アイテム増加。2個以上。_icon:アイコン
 * _name:名前　_num:個数 _desc1:解説1行目 _desc2:解説2行目
 * @default 「\I[_icon]_name」 を\C[14]_num個\C[24]手に入れた！\n\C[6]_desc1
 *
 * @param Lost Item Text Num
 * @desc アイテム減少。2個以上。_icon:アイコン
 * _name:名前　_num:個数 _desc1:解説1行目 _desc2:解説2行目
 * @default 「\I[_icon]_name」を\C[14]_num個\C[2]失った・・・\n\C[6]_desc1
 *
 * @param Get Skill Text
 * @desc スキルの習得で表示されるテキストです。_actor:アクター名
 * _icon:アイコン _name:名前　_desc1:解説1行目 _desc2:解説2行目
 * @default _actorは「\I[_icon]_name」 を\C[24]覚えた！\n\C[6]_desc1
 *
 * @param Lost Skill Text
 * @desc スキルの忘却で表示されるテキストです。_actor:アクター名
 * _icon:アイコン _name:名前　_desc1:解説1行目 _desc2:解説2行目
 * @default _actorは「\I[_icon]_name」を \C[2]忘れてしまった・・・\n\C[6]_desc1
 *
 * @param Exp Up Text
 * @desc 経験値の増加で表示されるテキストです。
 * _actor:アクター名  _name:経験値の名前 _num:経験値
 * @default _actorは\C[14]_numポイント\C[0]の\C[4]_name\C[0]を\C[24]得た！
 *
 * @param Exp Down Text
 * @desc 経験値の減少で表示されるテキストです。
 * _actor:アクター名  _name:経験値の名前　_num:経験値
 * @default _actorは\C[14]_numポイント\C[0]の\C[4]_name\C[0]を\C[2]失った・・・
 *
 * @param Lv Up Text
 * @desc レベルの増加で表示されるテキストです。
 * _actor:アクター名  _name:レベルの名前 _num:上がったレベル
 * @default _actorは\C[4]_name\C[0]が\C[14]_numポイント\C[24]上がった！
 *
 * @param Lv Down Text
 * @desc レベルの減少で表示されるテキストです。
 * _actor:アクター名  _name:レベルの名前　_num:下がったレベル
 * @default _actorは\C[4]_name\C[0]が\C[14]_numポイント\C[2]下がった・・・
 *
 * @param Param Up Text
 * @desc 能力値の増加で表示されるテキストです。
 * _actor:アクター名  _name:能力値の名前 _num:上がったレベル
 * @default _actorは\C[4]_name\C[0]が\C[14]_numポイント\C[24]上がった！
 *
 * @param Param Down Text
 * @desc 能力値の減少で表示されるテキストです。
 * _actor:アクター名  _name:能力値の名前　_num:下がったレベル
 * @default _actorは\C[4]_name\C[0]が\C[14]_numポイント\C[2]下がった・・・
 *
 *
 * @param Abp Up Text
 * @desc クラス経験値の増加で表示されるテキストです。
 * _actor:アクター名  _name:経験値の名前 _num:経験値
 * @default _actorは\C[14]_numポイント\C[0]の\C[4]_name\C[0]を\C[24]得た！
 *
 * @param Abp Down Text
 * @desc クラス経験値の減少で表示されるテキストです。
 * _actor:アクター名  _name:経験値の名前　_num:経験値
 * @default _actorは\C[14]_numポイント\C[0]の\C[4]_name\C[0]を\C[2]失った・・・
 *
 * @param Class Lv Up Text
 * @desc クラスレベルの増加で表示されるテキストです。 _class:クラス名
 * _actor:アクター名  _name:レベルの名前 _num:上がったレベル
 * @default _actorは\C[4]_classの_name\C[0]が\C[14]_numポイント\C[24]上がった！
 *
 * @param Class Lv Down Text
 * @desc クラスレベルの減少で表示されるテキストです。 _class:クラス名
 * _actor:アクター名  _name:レベルの名前　_num:下がったレベル
 * @default _actorは\C[4]_classの_name\C[0]が\C[14]_numポイント\C[2]下がった・・・
 *
 * @help------------------------------------------------------
 * プラグインコマンド
 * ------------------------------------------------------
 * ShowInfo 表示したいテキスト
 * インフォ表示 表示したいテキスト
 *
 * ※スペースは必ず半角で入力してください。
 * ------------------------------------------------------
 * このプラグインには「汎用ポップアップベース」のプラグインが必要です。
 * 汎用ポップアップベースより下に配置してください。
 * また、それぞれの表示テキストに何も記載しない場合、そのインフォメーションを無効化できます。
 * ------------------------------------------------------
 * 使い方
 * ------------------------------------------------------
 * 導入するだけで動作します。
 * 詳細な設定は、プラグインパラメータを参照してください。
 * ------------------------------------------------------
 * 利用規約
 * ------------------------------------------------------
 * 使用に制限はありません。商用、アダルト、いずれにも使用できます。
 * 二次配布も制限はしませんが、サポートは行いません。
 * 著作表示は任意です。行わなくても利用できます。
 * 要するに、特に規約はありません。
 * バグ報告や使用方法等のお問合せはネ実ツクールスレ、または、Twitterにお願いします。
 * https://twitter.com/yanatsuki_
 * 素材利用は自己責任でお願いします。
 * ------------------------------------------------------
 * 更新履歴:
 * ver1.11:
 * 動作パターンの設定を追加しました。
 * プラグインパラメータを追加しました。
 * ver1.10:
 * 処理内容を少し変更しました。
 * ヘルプを追加・修正しました。
 * 任意のテキストを表示するプラグインコマンドを追加しました。
 * ver1.09:
 * スキルを忘れさせた際のポップアップが表示されないバグを修正しました。
 * レベルアップ時やクラスレベルアップ時のスキル習得の表示位置を調整しました。
 * ver1.08:
 * 戦闘中の表示をexpとabpを無効化すると、経験値やABPが入らないバグを修正しました。
 * ver1.07:
 * インフォメーションを無効化する機能が正常に機能していなかったバグを修正しました。
 * 戦闘時に表示するインフォメーションを設定するBattle Show Listの設定項目を追加しました。
 * ver1.06:
 * 戦闘中のポップアップの位置が正常でなかったバグを修正しました。
 * var1.05:
 * 表示位置を補正するためのプラグインパラメータを追加しました。
 * 上から下へ動作する設定を追加しました。
 * var1.04:
 * 任意のテキストを渡せるように修正しました。
 * ver1.03:
 * ABPとクラスレベルのポップアップ処理を追加しました。
 * ver1.02:
 * レベルアップ処理でポップアップ表示が逆になっていたバグを修正しました。
 * ver1.01:
 * valueが0の状態でもポップアップしていたバグを修正しました。
 * YEP_CoreEngineとの競合回避処理を追加しました。
 * ver1.00:
 * 公開
 */

(function() {
	var parameters = PluginManager.parameters('GetInformation');
	var infoDisableSwitchId = Number(parameters['Info Disable Switch Id'] || 10);
	var getGoldText = String(parameters['Get Gold Text']);
	var lostGoldText = String(parameters['Lost Gold Text']);
	var getInfoText = String(parameters['Get Item Text']);
	var lostInfoText = String(parameters['Lost Item Text']);
	var getInfoTextNum = String(parameters['Get Item Text Num']);
	var lostInfoTextNum = String(parameters['Lost Item Text Num']);
	var getInfoSkillText = String(parameters['Get Skill Text']);
	var lostInfoSkillText = String(parameters['Lost Skill Text']);
	var ExpUpText = String(parameters['Exp Up Text']);
	var ExpDownText = String(parameters['Exp Down Text']);
	var lvUpText = String(parameters['Lv Up Text']);
	var lvDownText = String(parameters['Lv Down Text']);
	var ParamUpText = String(parameters['Param Up Text']);
	var ParamDownText = String(parameters['Param Down Text']);
	var infoFontSize = Number(parameters['Info Font Size'] || 20);
	var infoCount = Number(parameters['Info Count'] || 120);
	var infoDelay = Number(parameters['Info Delay'] || 20);
	var infoMoveWait = Number(parameters['Info MoveWait'] || 100);
	var infoMoveFade = Number(parameters['Info MoveFade'] || 20);
	var goldIconIndex = Number(parameters['Gold Icon Index'] || 314);
	var actorIconStartIndex = Number(parameters['Actor Icon Start Index']);
	var useBattleInfo = String(parameters['Use Battle Info'] || 'true') === 'true';
	var useRewardsInfo = String(parameters['Use Rewards Info'] || 'true') === 'true';
	var infoSlideCount = 60;
	var infoPosition = String(parameters['Info Position'] || '');
	var infoSlideAction = String(parameters['Info Slide Action'] || '');
	var infoSupX = Number(parameters['Info Sup X'] || 0);
	var infoSupY = Number(parameters['Info Sup Y'] || 0);
    var infoPattern = parameters['Info Pattern'] || 'Normal';
	var infoWidth = parameters['Info Width'] || 816;

	var abpUpText = String(parameters['Abp Up Text']);
	var abpDownText = String(parameters['Abp Down Text']);
	var clvUpText = String(parameters['Class Lv Up Text']);
	var clvDownText = String(parameters['Class Lv Down Text']);

	var battleShowList = String(parameters['Battle Show List']).split(',');

	var _gInfo_GInterpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
	Game_Interpreter.prototype.pluginCommand = function(command, args) {
		_gInfo_GInterpreter_pluginCommand.call(this, command, args);
		if (command === 'ShowInfo' || command === 'インフォ表示') {
			CommonPopupManager.showInfo({},args[0],null);
		}
	};

	CommonPopupManager.popEnable = function() {
		var useBattle = $gameParty.inBattle() ? useBattleInfo : true;
		return !$gameSwitches.value(infoDisableSwitchId) && useBattle;
	};

	// Change Gold
	var _gInfo_GInterpreter_command125 = Game_Interpreter.prototype.command125;
	Game_Interpreter.prototype.command125 = function() {
		CommonPopupManager._popEnable = CommonPopupManager.popEnable();
		var result = _gInfo_GInterpreter_command125.call(this);
		CommonPopupManager._popEnable = false;
		return result;
	};
	// Change Item
	var _gInfo_GInterpreter_command126 = Game_Interpreter.prototype.command126;
	Game_Interpreter.prototype.command126 = function() {
		CommonPopupManager._popEnable = CommonPopupManager.popEnable();
		var result = _gInfo_GInterpreter_command126.call(this);
		CommonPopupManager._popEnable = false;
		return result;
	};
	// Change Weapon
	var _gInfo_GInterpreter_command127 = Game_Interpreter.prototype.command127;
	Game_Interpreter.prototype.command127 = function() {
		CommonPopupManager._popEnable = CommonPopupManager.popEnable();
		var result = _gInfo_GInterpreter_command127.call(this);
		CommonPopupManager._popEnable = false;
		return result;
	};
	// Change Armor
	var _gInfo_GInterpreter_command128 = Game_Interpreter.prototype.command128;
	Game_Interpreter.prototype.command128 = function() {
		CommonPopupManager._popEnable = CommonPopupManager.popEnable();
		var result = _gInfo_GInterpreter_command128.call(this);
		CommonPopupManager._popEnable = false;
		return result;
	};
	// Change EXP
	var _gInfo_GInterpreter_command315 = Game_Interpreter.prototype.command315;
	Game_Interpreter.prototype.command315 = function() {
		CommonPopupManager._popEnable = CommonPopupManager.popEnable();
		var result = _gInfo_GInterpreter_command315.call(this);
		CommonPopupManager._popEnable = false;
		return result;
	};
	// Change Level
	var _gInfo_GInterpreter_command316 = Game_Interpreter.prototype.command316;
	Game_Interpreter.prototype.command316 = function() {
		CommonPopupManager._popEnable = CommonPopupManager.popEnable();
		var result = _gInfo_GInterpreter_command316.call(this);
		CommonPopupManager._popEnable = false;
		return result;
	};
	// Change Parameter
	var _gInfo_GInterpreter_command317 = Game_Interpreter.prototype.command317;
	Game_Interpreter.prototype.command317 = function() {
		CommonPopupManager._popEnable = CommonPopupManager.popEnable();
		var result = _gInfo_GInterpreter_command317.call(this);
		CommonPopupManager._popEnable = false;
		return result;
	};
	// Change Skill
	var _gInfo_GInterpreter_command318 = Game_Interpreter.prototype.command318;
	Game_Interpreter.prototype.command318 = function() {
		CommonPopupManager._popEnable = CommonPopupManager.popEnable();
		var result = _gInfo_GInterpreter_command318.call(this);
		CommonPopupManager._popEnable = false;
		return result;
	};

	Game_Actor.prototype.addParam = function(paramId, value) {
		Game_BattlerBase.prototype.addParam.call(this, paramId, value);
		if (CommonPopupManager._popEnable) {
			if ($gameParty.inBattle() && !battleShowList.contains('params')){ return }
			CommonPopupManager.showInfo({
				'name' : TextManager.param(paramId),
				'value' : value > 0
			}, value, 'param', $gameActors.actor(this.actorId()));
		}
	};
	var _gInfo_GParty_gainGold = Game_Party.prototype.gainGold;
	Game_Party.prototype.gainGold = function(amount) {
		_gInfo_GParty_gainGold.call(this, amount);
		if (CommonPopupManager._popEnable) {
			if ($gameParty.inBattle() && !battleShowList.contains('gold')){ return }
			var hash = {
				'name' : '',
				'iconIndex' : goldIconIndex,
				'description' : '',
				'value' : Math.abs(amount)
			};
			CommonPopupManager.showInfo(hash, amount, 'gold');
		}
	};
	var _gInfo_GParty_gainItem = Game_Party.prototype.gainItem;
	Game_Party.prototype.gainItem = function(item, amount, includeEquip) {
		var result = _gInfo_GParty_gainItem.call(this, item, amount, includeEquip);
		if (CommonPopupManager._popEnable) {
			if (this.inBattle() && !battleShowList.contains('item')){ return }
			CommonPopupManager.showInfo(item, amount, 'item');
		}
		if (Imported.YEP_CoreEngine){ return result };
	};

	var _gInfo_GActor_learnSkill = Game_Actor.prototype.learnSkill;
	Game_Actor.prototype.learnSkill = function(skillId) {
		var isLearn = this.isLearnedSkill(skillId);
		_gInfo_GActor_learnSkill.call(this, skillId);
		if (CommonPopupManager._popEnable && !isLearn) {
			if ($gameParty.inBattle() && !battleShowList.contains('skill')){ return }
			CommonPopupManager.showInfo($dataSkills[skillId], 1, 'skill', $gameActors.actor(this.actorId()));
		};
	};
	var _gInfo_GActor_forgetSkill = Game_Actor.prototype.forgetSkill;
	Game_Actor.prototype.forgetSkill = function(skillId) {
		var isLearn = this.isLearnedSkill(skillId);
		_gInfo_GActor_forgetSkill.call(this, skillId);
		if (CommonPopupManager._popEnable && isLearn) {
			if ($gameParty.inBattle() && !battleShowList.contains('skill')){ return }
			CommonPopupManager.showInfo($dataSkills[skillId], 2, 'skill', $gameActors.actor(this.actorId()));
		};
	};
	var _gInfo_GActor_changeExp = Game_Actor.prototype.changeExp;
	Game_Actor.prototype.changeExp = function(exp, show) {
		var tExp = exp - this.currentExp();
		var plevel = this.level;
		var pSkills = this._skills.clone();
		if (CommonPopupManager._popEnable) {
			if (!$gameParty.inBattle() || battleShowList.contains('exp')){
				CommonPopupManager.showInfo({
					'name' : TextManager.exp,
					'value' : tExp > 0
				}, tExp, 'exp', $gameActors.actor(this.actorId()));
			}
		};
		var tempEnable = CommonPopupManager._popEnable;
		CommonPopupManager._popEnable = false;
		_gInfo_GActor_changeExp.call(this, exp, show);
		CommonPopupManager._popEnable = tempEnable;
		if ((this.level - plevel) !== 0){
			var upLevel = this.level - plevel;
			if (CommonPopupManager._popEnable) {
				if ($gameParty.inBattle() && !battleShowList.contains('level')){ return }
				CommonPopupManager.showInfo({
					'name' : TextManager.level,
					'value' : upLevel > 0
				}, upLevel, 'level', $gameActors.actor(this.actorId()));
			}
		}
		if (CommonPopupManager._popEnable) {
			this._skills.forEach(function(skillId){
				if (!pSkills.contains(skillId)){
					CommonPopupManager.showInfo($dataSkills[skillId], 1, 'skill', $gameActors.actor(this.actorId()));
				}
			}.bind(this));
		}
	};

	var _gInfo_GActor_changeLevel = Game_Actor.prototype.changeLevel;
	Game_Actor.prototype.changeLevel = function(level, show) {
		var upLevel = level - this.level;
		var tempEnable = CommonPopupManager._popEnable;
		var pSkills = this._skills.clone();
		CommonPopupManager._popEnable = false;
		_gInfo_GActor_changeLevel.call(this, level, show);
		CommonPopupManager._popEnable = tempEnable;
		if (CommonPopupManager._popEnable) {
			if ($gameParty.inBattle() && !battleShowList.contains('level')){ return }
			CommonPopupManager.showInfo({
				'name' : TextManager.level,
				'value' : upLevel > 0
			}, upLevel, 'level', $gameActors.actor(this.actorId()));

			this._skills.forEach(function(skillId){
				if (!pSkills.contains(skillId)){
					CommonPopupManager.showInfo($dataSkills[skillId], 1, 'skill', $gameActors.actor(this.actorId()));
				}
			}.bind(this));
		}
	};

	if (Imported['VXandAceHybridClass']){

		// Change Class Level
		var _gInfo_GInterpreter_changeClassLevel = Game_Interpreter.prototype.changeClassLevel;
		Game_Interpreter.prototype.changeClassLevel = function(actorId,level,show) {
			CommonPopupManager._popEnable = CommonPopupManager.popEnable();
			_gInfo_GInterpreter_changeClassLevel.call(this,actorId,level,show);
			CommonPopupManager._popEnable = false;
		};

		// Change Abp
		var _gInfo_GInterpreter_changeAbp = Game_Interpreter.prototype.changeAbp;
		Game_Interpreter.prototype.changeAbp = function(actorId,abp,show) {
			CommonPopupManager._popEnable = CommonPopupManager.popEnable();
			var result = _gInfo_GInterpreter_changeAbp.call(this,actorId,abp,show);
			CommonPopupManager._popEnable = false;
			return result;
		};

		var _gInfo_GActor_changeAbp = Game_Actor.prototype.changeAbp;
		Game_Actor.prototype.changeAbp = function(abp, show) {
			var tAbp = abp - this.currentAbp();
			var plevel = this.currentClassLevel();
			var pSkills = this._skills.clone();
			if (CommonPopupManager._popEnable) {
				if (!$gameParty.inBattle() || battleShowList.contains('abp')){
					CommonPopupManager.showInfo({
						'name' : TextManager.abp,
						'value' : tAbp > 0
					}, tAbp, 'abp', $gameActors.actor(this.actorId()));
				}
			};

			var tempEnable = CommonPopupManager._popEnable;
			CommonPopupManager._popEnable = false;

			_gInfo_GActor_changeAbp.call(this, abp, show);

			CommonPopupManager._popEnable = tempEnable;

			if ((this.currentClassLevel() - plevel) !== 0){
				var upLevel = this.currentClassLevel() - plevel;
				if (CommonPopupManager._popEnable) {
					if ($gameParty.inBattle() && !battleShowList.contains('classLevel')){ return }
					CommonPopupManager.showInfo({
						'name' : TextManager.classLevel,
						'value' : upLevel > 0
					}, upLevel, 'classLevel', $gameActors.actor(this.actorId()), this.currentClass().name);
				}
			}
			if (CommonPopupManager._popEnable) {
				this._skills.forEach(function(skillId){
					if (!pSkills.contains(skillId)){
						CommonPopupManager.showInfo($dataSkills[skillId], 1, 'skill', $gameActors.actor(this.actorId()));
					}
				}.bind(this));
			}
		};

		var _gInfo_GActor_changeClassLevel = Game_Actor.prototype.changeClassLevel;
		Game_Actor.prototype.changeClassLevel = function(level, show) {
			var upLevel = level - this.currentClassLevel();
			var tempEnable = CommonPopupManager._popEnable;
			CommonPopupManager._popEnable = false;
			_gInfo_GActor_changeClassLevel.call(this, level, show);
			CommonPopupManager._popEnable = tempEnable;
			if (CommonPopupManager._popEnable) {
				if ($gameParty.inBattle() && !battleShowList.contains('classLevel')){ return }
				CommonPopupManager.showInfo({
					'name' : TextManager.classLevel,
					'value' : upLevel > 0
				}, upLevel, 'classLevel', $gameActors.actor(this.actorId()), this.currentClass().name);

				this._skills.forEach(function(skillId){
					if (!pSkills.contains(skillId)){
						CommonPopupManager.showInfo($dataSkills[skillId], 1, 'skill', $gameActors.actor(this.actorId()));
					}
				}.bind(this));
			}
		};
	}

	CommonPopupManager.showInfo = function(object, value, type, actor, c) {
		var text1 = null;
		if (value === 0) { return }
		switch(type) {
		case 'gold':
			text1 = getGoldText;
			if (value < 0) {
				text1 = lostGoldText
			}
			break;
		case 'item':
			text1 = getInfoText;
			if (value > 1) {
				text1 = getInfoTextNum
			} else if (value === -1) {
				text1 = lostInfoText
			} else if (value < -1) {
				text1 = lostInfoTextNum
			}
			break;
		case 'exp':
			text1 = object.value ? ExpUpText : ExpDownText;
			break;
		case 'level':
			text1 = object.value ? lvUpText : lvDownText;
			break;
		case 'abp':
			text1 = object.value ? abpUpText : abpDownText;
			break;
		case 'classLevel':
			text1 = object.value ? clvUpText : clvDownText;
			break;
		case 'param':
			text1 = object.value ? ParamUpText : ParamDownText;
			break;
		case 'skill':
			text1 = value === 1 ? getInfoSkillText : lostInfoSkillText;
			break;
		default :
			text1 = value;
		}
		if (text1 === '') { return }
		var descs = object.description ? object.description.split(/\n/) : [];
		if (actor) {
			text1 = text1.replace(/_actor/g, actor.name());
			text1 = text1.replace(/_aicon/g, actor.actorId()+actorIconStartIndex-1);
		}
		if (c) { text1 = text1.replace(/_class/g, c) }
		text1 = text1.replace(/_name/g, object.name);
		text1 = text1.replace(/_icon/g, object.iconIndex);
		text1 = text1.replace(/_num/g, Math.abs(value));
		text1 = descs[0] ? text1.replace(/_desc1/g, descs[0]) : text1.replace(/_desc1/g, '');
		text1 = descs[1] ? text1.replace(/_desc2/g, descs[1]) : text1.replace(/_desc2/g, '');
		var texts = text1.split(/\n|\\n/);
		for (var i = 0; i < texts.length; i++) {
			var text = texts[i].replace(/\\C\[\d+\]/g, '');
			if (text === '') { delete texts[i] }
		}
		texts = texts.compact();
		var oneHeight = (infoFontSize + 8)
		var height = oneHeight * texts.length;
		var bitmap = new Bitmap(Graphics.boxWidth, height);
		bitmap.fillRect(0, 0, infoWidth / 2, bitmap.height, 'rgba(0,0,0,0.5)');
		bitmap.gradientFillRect(infoWidth / 2, 0, infoWidth / 2, bitmap.height, 'rgba(0,0,0,0.5)', 'rgba(0,0,0,0)');
		this.window().contents = bitmap;
		this.window().drawTextEx('\\FS[' + infoFontSize + ']', 0, 0);
		for (var i = 0; i < texts.length; i++) {
			var text = '\\FS[' + infoFontSize + ']' + texts[i]
			this.window().drawTextEx(text, 8, i * oneHeight);
		}
		var arg = this.setPopup([]);
		arg.bitmap = bitmap;
        if (infoPattern === 'GrowUp') {
            arg.x = 0;//Graphics.boxWidth * -1 + infoSupX;
            arg.y = Graphics.boxHeight;// - height;
            arg.moveX = 0;//Graphics.boxWidth;
            arg.anchorX = 0;
            arg.anchorY = 1.0;
            arg.pattern = -2;
            if (infoSlideAction === 'Down') arg.anchorY = 0;
        } else if (infoPattern === 'Stretch'){
            arg.x = 0;
            arg.y = Graphics.boxHeight - height;
            arg.moveX = 0;
            arg.anchorX = 0;
            arg.anchorY = 0;
            arg.pattern = -1;
        } else {
            arg.x = Graphics.boxWidth * -1 + infoSupX;
            arg.y = Graphics.boxHeight - height;
            arg.moveX = Graphics.boxWidth;
            arg.anchorX = 0;
            arg.anchorY = 0;
        }
		if (infoPosition === 'Up'){ arg.y = 0 }
		arg.y += infoSupY;
		if ($gameParty.inBattle()){ arg.y = Math.min(arg.y,Graphics.boxHeight - (180 + height) +  height * arg.anchorY) }
		arg.moveY = 0;
		arg.count = infoCount;
		arg.fixed = false;
		arg.extend = [infoMoveFade,infoMoveWait];
		arg.slideCount = infoSlideCount;
		arg.delay = 0;
		arg.slideAction = infoSlideAction;
		var array = CommonPopupManager._tempCommonSprites.clone().compact();
		if (CommonPopupManager._lastIndex && array[CommonPopupManager._lastIndex]){
			array.sort(function(a,b){ return a.delay > b.delay ? -1 : 1 });
			arg.delay = array[0].delay + infoDelay;
		}
		CommonPopupManager._lastIndex = this._tempCommonSprites.setNullPos(arg);
	};

	var _gInfo_BManager_gainRewards = BattleManager.gainRewards;
	BattleManager.gainRewards = function() {
		CommonPopupManager._popEnable = CommonPopupManager.popEnable() && useRewardsInfo;
		_gInfo_BManager_gainRewards.call(this);
		CommonPopupManager._popEnable = false;
	};
})();