code:
//=============================================================================
// MPP_ChoiceEX.js
//=============================================================================
// Copyright (c) 2015-2019 Mokusei Penguin
// Released under the MIT license
// http://opensource.org/licenses/mit-license.php
//=============================================================================

/*:
 * @plugindesc 【ver.3.11】選択肢の機能拡張
 * @author 木星ペンギン
 *
 * @help ※[]内は未設定でも動作します。
 * プラグインコマンド:
 *   ChoicePos x y[ row]    # 選択肢の位置(x,y)と行数(row)指定
 *   ChoiceVariableId n     # 選択肢のデフォルト位置を変数n番にする
 *   ChoiceRect x y width height
 *                          # 選択肢の座標とサイズを指定
 *   ChoiceUnderMessage     # 選択肢をメッセージの下に表示
 *
 * ※ プラグインコマンドにて指定する値には変数が使用できます。
 *    v[n] と記述することでn番の変数の値を参照します。
 *
 * 注釈:
 *   選択肢ヘルプ             # 各項目の下に設定することでヘルプを表示させる
 *
 * 選択肢テキスト:
 *   if(条件)                # 条件が偽になると項目が表示されなくなる
 *   en(条件)                # 条件が偽になると項目が選択不可
 *
 * ================================================================
 * ▼ 使い方
 * --------------------------------
 *  〇 選択肢を増やす
 *   イベントコマンド『選択肢の表示』を続けて配置すると
 *   一つの選択肢にまとめられます。
 *   まとめたくない場合は、間に注釈などを入れることで
 *   通常通り分けることができます。
 *
 *   『デフォルト』の処理は、なし以外を設定したものが適用されます。
 *   『デフォルト』の処理が複数ある場合、
 *   後に設定された選択肢のものが適用されます。
 *
 *   『キャンセル』の処理は、禁止以外を設定したものが適用されます。
 *   『キャンセル』の処理が複数ある場合、
 *   後に設定された選択肢のものが適用されます。
 *
 *  『背景』と『ウィンドウ位置』は後の選択肢のものが適用されます。
 *
 *
 * ================================================================
 * ▼ プラグインコマンド 詳細
 * --------------------------------
 *  〇 ChoicePos x y[ row]
 *      x   : 選択肢ウィンドウのX座標
 *      y   : 選択肢ウィンドウのY座標
 *      row : 選択肢ウィンドウの行数。未設定の場合はすべて表示
 *
 *   次に表示する選択肢の位置(x,y)と行数(row)指定します。
 *
 * --------------------------------
 *  〇 ChoiceVariableId n
 *      n : 変数番号
 *
 *   次に表示する選択肢のデフォルト位置を変数の値にします。
 *   さらに現在のカーソル位置を変数に入れます。
 *
 *   カーソル位置は最初の選択肢が上から0～5、次の選択肢は10～15と、
 *   選択肢毎に+10されます。
 *
 *   変数に入った値の項目が表示されない場合、なしと同じ処理をします。
 *
 * --------------------------------
 *  〇 ChoiceRect x y width height
 *      x      : X座標
 *      y      : Y座標
 *      width  : 幅
 *      height : 高さ
 *
 *   次に表示する選択肢の座標とサイズを指定します。
 *
 *   各項目、未設定もしくは-1を指定した場合、通常の値が適用されます。
 *
 * --------------------------------
 *  〇 ChoiceUnderMessage
 *
 *   次に表示する選択肢をメッセージウィンドウ内に表示させます。
 *
 *   この機能は[文章の表示]と併用しなければ機能しません。
 *   [文章の表示]の前に実行してください。
 *
 *   選択肢ウィンドウの[背景]は設定したものが適用されます。
 *
 *
 * ================================================================
 * ▼ 選択肢テキスト 詳細
 * --------------------------------
 *  〇 項目が表示される条件の設定
 *   選択肢の文章中に
 *     if(条件)
 *   と入れ、その条件が偽になると項目が表示されなくなります。
 *
 *   『デフォルト』の項目が表示されない場合の動作は、
 *   プラグインパラメータの[Disabled Index]にて設定できます。
 *
 *   『キャンセル』の項目が表示されない場合、禁止と同じ処理をします。
 *
 *   条件内では s でスイッチ、v で変数を参照できます。
 *
 *     例：if(s[1]) とした場合
 *          => スイッチ１番がONで表示、OFFで非表示。
 *        if(!s[2]) とした場合
 *          => スイッチ２番がOFFで表示、ONで非表示。
 *        if(v[5]>0) とした場合
 *          => 変数５番が0より大きければ表示、0以下で非表示。
 *
 *     変数で使える不等号
 *       === : 等しい
 *       !== : 等しくない
 *       <   : より小さい
 *       <=  : より小さいまたは等しい
 *       >   : より大きい
 *       >=  : より大きいまたは等しい
 *
 *     条件式はeval関数で処理されているため、他演算子も使用できます。
 *
 * --------------------------------
 *  〇 項目を半透明で表示する条件の設定
 *   選択肢の文章中に
 *     en(条件)
 *   と入れ、その条件が偽になると項目が半透明で表示されます。
 *   半透明となった項目は選択できなくなります。
 *
 *   条件は上の『項目が表示される条件の設定』と同じです。
 *
 *   『キャンセル』の項目が半透明の場合、ブザーが鳴ります。
 *
 *
 * ================================================================
 * ▼ プラグインパラメータ 詳細
 * --------------------------------
 *  〇 Disabled Index
 *
 *   [デフォルト]となる項目がif(条件)により非表示となった場合、
 *   デフォルト位置をどこにするかを設定します。
 *
 *     none : [なし]と同じ
 *     top  : 先頭の項目
 *
 * --------------------------------
 *  〇 Plugin Commands / Event Comment
 *
 *   プラグインコマンドや注釈で使用するコマンドは、
 *   プラグインパラメータから変更できます。
 *
 *   コマンドを短くしたり日本語にしたりなどして、
 *   自分が使いやすいようにしてください。
 *
 *   プラグインコマンドのみ、変更後もデフォルトのコマンドでも動作します。
 *
 *
 * ================================================================
 * ▼ その他
 * --------------------------------
 *  〇 プラグインコマンドの実行タイミング
 *   プラグインコマンドを使用する場合、[選択肢の表示]の前に実行するのが
 *   好ましいです。
 *   ただし、メッセージウィンドウを表示したまま選択肢の処理を実行したい場合、
 *   [文章の表示]より前にプラグインコマンドを実行してください。
 *
 * --------------------------------
 *  〇 ヘルプメッセージの表示
 *   各選択肢項目の下に注釈で以下の文字列を入れると、
 *   続きの文章をヘルプメッセージとしてカーソルを合わせたときに
 *   標示させることができます。
 *
 *     選択肢ヘルプ
 *
 *   ※注意点
 *    ヘルプメッセージは[文章の表示]と同じ機能を使っているため、
 *    制御文字が使用できます。
 *    ただし、\!と\^は使用できません。
 *
 * ================================
 * 制作 : 木星ペンギン
 * URL : http://woodpenguin.blog.fc2.com/
 *
 * @param maxPageRow
 * @type number
 * @desc 1ページに表示される行数
 * @default 6
 *
 * @param Disabled Index
 * @type select
 * @option none
 * @option top
 * @desc [デフォルト]となる選択肢が表示されない場合のデフォルト位置
 * @default none
 *
 *
 * @param === Command ===
 *
 * @param Plugin Commands
 * @type struct<Plugin>
 * @desc プラグインコマンド名
 * @default {"ChoicePos":"ChoicePos","ChoiceVariableId":"ChoiceVariableId","ChoiceRect":"ChoiceRect","ChoiceUnderMessage":"ChoiceUnderMessage"}
 * @parent === Command ===
 *
 * @param Event Comment
 * @type struct<EventComment>
 * @desc イベントの注釈で使うコマンド名
 * @default {"ChoiceHelp":"選択肢ヘルプ"}
 * @parent === Command ===
 *
 */

/*~struct~Plugin:
 * @param ChoicePos
 * @desc 選択肢の位置(x,y)と行数(row)指定
 * @default ChoicePos
 *
 * @param ChoiceVariableId
 * @desc 選択肢のデフォルト位置を変数n番にする
 * @default ChoiceVariableId
 *
 * @param ChoiceRect
 * @desc 選択肢の座標とサイズ(x,y,width,height)指定
 * @default ChoiceRect
 *
 * @param ChoiceUnderMessage
 * @desc 選択肢をメッセージの下に表示
 * @default ChoiceUnderMessage
 *
 */

/*~struct~EventComment:
 * @param ChoiceHelp
 * @desc 各項目の下に設定することでヘルプを表示させる
 * @default 選択肢ヘルプ
 */

(function() {

const MPPlugin = {};

{

    let parameters = PluginManager.parameters('MPP_ChoiceEX');

    MPPlugin.maxPageRow = Number(parameters['maxPageRow']);
    MPPlugin.DisabledIndex = parameters['Disabled Index'];

    MPPlugin.PluginCommands = JSON.parse(parameters['Plugin Commands']);
    MPPlugin.EventComment = JSON.parse(parameters['Event Comment']);

}

const Alias = {};

//-----------------------------------------------------------------------------
// Game_Message

//15
Alias.GaMe_clear = Game_Message.prototype.clear;
Game_Message.prototype.clear = function() {
    Alias.GaMe_clear.apply(this, arguments);
    this._choiceEnables = [];
    this._choiceResults = [];
    this._helpTexts = [];
    this._choiceX = -1;
    this._choiceY = -1;
    this._choiceWidth = -1;
    this._choiceHeight = -1;
    this._choiceMaxRow = MPPlugin.maxPageRow;
    this._choiceVariableId = 0;
    this.choiceUnderMes = false;
};

Game_Message.prototype.setChoiceEnables = function(enables) {
    this._choiceEnables = enables;
};

Game_Message.prototype.choiceEnables = function() {
    return this._choiceEnables;
};

Game_Message.prototype.setChoiceResults = function(results) {
    this._choiceResults = results;
};

Game_Message.prototype.setChoiceHelpTexts = function(texts) {
    this._helpTexts = texts;
};

Game_Message.prototype.isHelp = function() {
    return this._helpTexts.length > 0;
};

Game_Message.prototype.setChoicePos = function(x, y, row) {
    this._choiceX = x;
    this._choiceY = y;
    this._choiceWidth = -1;
    this._choiceHeight = -1;
    this._choiceMaxRow = row;
};

Game_Message.prototype.setChoiceRect = function(x, y, width, height) {
    this._choiceX = x;
    this._choiceY = y;
    this._choiceWidth = width;
    this._choiceHeight = height;
};

Game_Message.prototype.setChoiceVariableId = function(id) {
    this._choiceVariableId = id;
};

Game_Message.prototype.shiftLine = function(height) {
    this._choiceY += height;
    this._choiceHeight -= height;
};

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

//336
Game_Interpreter.prototype.setupChoices = function(params) {
    var data = {
        choices: [],
        enables: [],
        results: [],
        helpTexts: [],
        cancelType: -1,
        defaultType: -1,
        positionType: 0,
        background: 0
    };
    data = this.addChoices(params, this._index, data, 0);
    if (data.choices.length > 0) {
        var helpTexts = [];
        if (data.helpTexts.length > 0) {
            helpTexts = data.results.map( i => data.helpTexts[i] );
        }
        var cancelType = -1;
        if (data.cancelType.mod(10) === 8 || data.results.contains(data.cancelType)) {
            data.results.push(data.cancelType);
            cancelType = data.choices.length;
        }
        var index = data.defaultType;
        if ($gameMessage._choiceVariableId > 0) {
            index = $gameVariables.value($gameMessage._choiceVariableId);
        }
        var defaultType = data.results.indexOf(index);
        if (index >= 0 && defaultType < 0 && MPPlugin.DisabledIndex === "top")  {
            defaultType = 0;
        }
        $gameMessage.setChoices(data.choices, defaultType, cancelType);
        $gameMessage.setChoiceEnables(data.enables);
        $gameMessage.setChoiceResults(data.results);
        $gameMessage.setChoiceHelpTexts(helpTexts);
        $gameMessage.setChoiceBackground(data.background);
        $gameMessage.setChoicePositionType(data.positionType);
        $gameMessage.setChoiceCallback( n => this._branch[this._indent] = data.results[n] );
    } else {
        this._branch[this._indent] = -1;
    }
};

Game_Interpreter.prototype.addChoices = function(params, i, data, d) {
    var regIf = /\s*if\((.+?)\)/;
    var regEn = /\s*en\((.+?)\)/;
    for (var n = 0; n < params[0].length; n++) {
        var str = params[0][n];
        if (regIf.test(str)) {
            str = str.replace(regIf, '');
            if (RegExp.$1 && !this.evalChoice(RegExp.$1)) continue;
        }
        var enable = true;
        if (regEn.test(str)) {
            str = str.replace(regEn, '');
            enable = this.evalChoice(RegExp.$1);
        }
        data.choices.push(str);
        data.enables.push(enable);
        data.results.push(n + d);
    }
    var cancelType = params[1];
    if (cancelType !== -1) {
        data.cancelType = cancelType + d;
    }
    var defaultType = params.length > 2 ? params[2] : 0;
    if (defaultType >= 0) {
        data.defaultType = defaultType + d;
    }
    data.positionType = params.length > 3 ? params[3] : 2;
    data.background = params.length > 4 ? params[4] : 0;
    var command;
    for (;;) {
        i++;
        command = this._list[i];
        if (!command) break;
        if (command.indent === this._indent) {
            if (command.code === 402) {
                this.getHelpText(command.parameters[0] + d, i + 1, data);
            } else if (command.code === 404) {
                break;
            }
        }
    }
    command = this._list[i + 1];
    if (command && command.code === 102) {
        this.addChoices(command.parameters, i + 1, data, d + 10);
    }
    return data;
};

Game_Interpreter.prototype.getHelpText = function(c, i, data) {
    var command = MPPlugin.EventComment.ChoiceHelp || '選択肢ヘルプ';
    if (this._list[i].code === 108 && this._list[i].parameters[0] === command) {
        var texts = [];
        while (this._list[i + 1].code === 408) {
            i++;
            texts.push(this._list[i].parameters[0]);
        }
        data.helpTexts[c] = texts;
    }
};

Game_Interpreter.prototype.evalChoice = function(formula) {
    try {
        var s = $gameSwitches._data;
        var formula2 = formula.replace(/v\[(\d+)\]/g,
            (match, p1) => $gameVariables.value(parseInt(p1)) );
        return !!eval(formula2);
    } catch (e) {
        alert("条件エラー \n\n " + formula);
        return true;
    }
};

//362
Game_Interpreter.prototype.command403 = function() {
    if (this._branch[this._indent] !== -2) {
        this.skipBranch();
    }
    return true;
};

Game_Interpreter.prototype.command404 = function() {
    if (this.nextEventCode() === 102) {
        this._branch[this._indent] -= 10;
        this._index++;
    }
    return true;
};

//1739
Alias.GaIn_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
    Alias.GaIn_pluginCommand.apply(this, arguments);
    var args2 = this.mppPluginCommandArgs(args);
    switch (command) {
        case MPPlugin.PluginCommands.ChoicePos:
        case 'ChoicePos':
            var x = args2[0];
            var y = args2[1];
            var row = args2[2] || 99;
            $gameMessage.setChoicePos(x, y, row);
            break;
        case MPPlugin.PluginCommands.ChoiceVariableId:
        case 'ChoiceVariableId':
            $gameMessage.setChoiceVariableId(args2[0]);
            break;
        case MPPlugin.PluginCommands.ChoiceRect:
        case 'ChoiceRect':
            var x = (args2[0] === undefined ? -1 : args2[0]);
            var y = (args2[1] === undefined ? -1 : args2[1]);
            var width = (args2[2] === undefined ? -1 : args2[2]);
            var height = (args2[3] === undefined ? -1 : args2[3]);
            $gameMessage.setChoiceRect(x, y, width, height);
            break;
        case MPPlugin.PluginCommands.ChoiceUnderMessage:
        case 'ChoiceUnderMessage':
            $gameMessage.choiceUnderMes = true;
            break;
    }
    return true;
};

Game_Interpreter.prototype.mppPluginCommandArgs = function(args) {
    var v = $gameVariables._data;
    return args.map(function(arg) {
        try {
            return eval(arg) || 0;
        } catch (e) {
            return arg;
        }
    });
};

//-----------------------------------------------------------------------------
// Window

Window.prototype.isClearWindowRect = function() {
    return true;
};

//-----------------------------------------------------------------------------
// WindowLayer

//7100
Alias.WiLa__canvasClearWindowRect = WindowLayer.prototype._canvasClearWindowRect;
WindowLayer.prototype._canvasClearWindowRect = function(renderSession, window) {
    if (window.isClearWindowRect())
        Alias.WiLa__canvasClearWindowRect.apply(this, arguments);
};

//7162
Alias.WiLa__maskWindow = WindowLayer.prototype._maskWindow;
WindowLayer.prototype._maskWindow = function(window, shift) {
    Alias.WiLa__maskWindow.apply(this, arguments);
    if (!window.isClearWindowRect()) {
        var rect = this._windowRect;
        rect.x = 0;
        rect.y = 0;
        rect.width = 0;
        rect.height = 0;
    }
};

//-----------------------------------------------------------------------------
// Window_ChoiceList

Window_ChoiceList.prototype.isClearWindowRect = function() {
    return !this._underMessage;
};

if (Window_ChoiceList.prototype.hasOwnProperty('close')) {
    Alias.WiChLi_close = Window_ChoiceList.prototype.close
}
Window_ChoiceList.prototype.close = function() {
    if ($gameMessage.isHelp()) this._messageWindow.onShowFast();
    var _super = Alias.WiChLi_close || Window_Command.prototype.close;
    _super.apply(this, arguments);
};

if (Window_ChoiceList.prototype.hasOwnProperty('select')) {
    Alias.WiChli_select = Window_ChoiceList.prototype.select;
}
Window_ChoiceList.prototype.select = function(index) {
    var variableId = $gameMessage._choiceVariableId;
    if (index !== this.index() && variableId > 0) {
        var results = $gameMessage._choiceResults;
        $gameVariables.setValue(variableId, results[index]);
    }
    var _super = Alias.WiChli_select = Window_Command.prototype.select
    _super.apply(this, arguments);
};

//34
Alias.WiChLi_updatePlacement = Window_ChoiceList.prototype.updatePlacement;
Window_ChoiceList.prototype.updatePlacement = function() {
    Alias.WiChLi_updatePlacement.apply(this, arguments);
    if ($gameMessage._choiceWidth >= 0) {
        this.width = Math.min($gameMessage._choiceWidth, Graphics.boxWidth);
    }
    if ($gameMessage._choiceHeight >= 0) {
        this.height = Math.min($gameMessage._choiceHeight, Graphics.boxHeight);
    }
    if ($gameMessage._choiceX >= 0) {
        this.x = Math.min($gameMessage._choiceX, Graphics.boxWidth - this.width);
    }
    if ($gameMessage._choiceY >= 0) {
        this.y = Math.min($gameMessage._choiceY, Graphics.boxHeight - this.height);
    }
    this._underMessage = $gameMessage.choiceUnderMes;
};

//67
Window_ChoiceList.prototype.numVisibleRows = function() {
    return Math.min($gameMessage.choices().length, $gameMessage._choiceMaxRow);
};

//103
Window_ChoiceList.prototype.makeCommandList = function() {
    var choices = $gameMessage.choices();
    var enables = $gameMessage._choiceEnables;
    for (var i = 0; i < choices.length; i++) {
        this.addCommand(choices[i], 'choice', enables[i]);
    }
};

//110
Alias.WiChLi_drawItem = Window_ChoiceList.prototype.drawItem;
Window_ChoiceList.prototype.drawItem = function(index) {
    this.changePaintOpacity(this.isCommandEnabled(index));
    Alias.WiChLi_drawItem.apply(this, arguments);
};

//123
Alias.WiChLi_callOkHandler = Window_ChoiceList.prototype.callOkHandler;
Window_ChoiceList.prototype.callOkHandler = function() {
    Alias.WiChLi_callOkHandler.apply(this, arguments);
    this._messageWindow.forceClear();
};

//129
Alias.WiChLi_callCancelHandler = Window_ChoiceList.prototype.callCancelHandler;
Window_ChoiceList.prototype.callCancelHandler = function() {
    Alias.WiChLi_callCancelHandler.apply(this, arguments);
    this._messageWindow.forceClear();
};

if (Window_ChoiceList.prototype.hasOwnProperty('processCancel')) {
    Alias.WiChLi_processCancel = Window_ChoiceList.prototype.processCancel
}
Window_ChoiceList.prototype.processCancel = function() {
    var type = $gameMessage.choiceCancelType();
    var results = $gameMessage._choiceResults;
    var index = results.indexOf(results[type]);
    if (this.isCancelEnabled() && index !== type && !this.isCommandEnabled(index)) {
        this.playBuzzerSound();
    } else {
        var _super = Alias.WiChLi_processCancel || Window_Command.prototype.processCancel;
        _super.apply(this, arguments);
    }
};

Window_ChoiceList.prototype.callUpdateHelp = function() {
    if (this.active && this._messageWindow && $gameMessage.isHelp())
        this.updateHelp();
};

Window_ChoiceList.prototype.updateHelp = function() {
    this._messageWindow.forceClear();
    var texts = $gameMessage._helpTexts[this.index()];
    $gameMessage._texts = texts ? texts.clone() : [''];
    this._messageWindow.startMessage();
};

//-----------------------------------------------------------------------------
// Window_Message

//109
Alias.WiMe_updatePlacement = Window_Message.prototype.updatePlacement;
Window_Message.prototype.updatePlacement = function() {
    Alias.WiMe_updatePlacement.apply(this, arguments);
    this.clearUnderChoice();
};

Window_Message.prototype.clearUnderChoice = function() {
    if ($gameMessage.choiceUnderMes) {
        var x = this.x + this.standardPadding();
        x += this._textState.left || 0;
        var y = this.y + 4;
        var height = this.windowHeight();
        $gameMessage.setChoiceRect(x, y, -1, height);
    }
};

if (Window_Message.prototype.hasOwnProperty('processNewLine')) {
    Alias.WiMe_processNewLine = Window_Message.prototype.processNewLine;
}
Window_Message.prototype.processNewLine = function(textState) {
    if ($gameMessage.choiceUnderMes) $gameMessage.shiftLine(textState.height);
    var _super = Alias.WiMe_processNewLine || Window_Base.prototype.processNewLine;
    _super.apply(this, arguments);
};

//149
Alias.WiMe_updateInput = Window_Message.prototype.updateInput;
Window_Message.prototype.updateInput = function() {
    if ($gameMessage.isHelp() && this._textState) return false;
    return Alias.WiMe_updateInput.apply(this, arguments);
};

//196
Alias.WiMe_onEndOfText = Window_Message.prototype.onEndOfText;
Window_Message.prototype.onEndOfText = function() {
    if ($gameMessage.isHelp() && !this._choiceWindow.active) {
        this.startInput();
    } else {
        Alias.WiMe_onEndOfText.apply(this, arguments);
    }
};

//207
Alias.WiMe_startInput = Window_Message.prototype.startInput;
Window_Message.prototype.startInput = function() {
    if (this._choiceWindow.active) return true;
    if ($gameMessage.isChoice() && $gameMessage.choiceUnderMes &&
            this._textState.x !== this._textState.left) {
        $gameMessage.shiftLine(this._textState.height);
    }
    return Alias.WiMe_startInput.apply(this, arguments);
};

Window_Message.prototype.forceClear = function() {
    this._textState = null;
    this.close();
    this._goldWindow.close();
};

Window_Message.prototype.onShowFast = function() {
    this._showFast = true;
};

//243
Alias.WiMe_newPage = Window_Message.prototype.newPage;
Window_Message.prototype.newPage = function(textState) {
    Alias.WiMe_newPage.apply(this, arguments);
    this.clearUnderChoice();
};

})();

repo_name: dazed/translations

license: unknown


code:
//=============================================================================
// MPP_DeleteSelfSwitch.js
//=============================================================================
// Copyright (c) 2022 Mokusei Penguin
// Released under the MIT license
// http://opensource.org/licenses/mit-license.php
//=============================================================================

/*:
 * @target MV MZ
 * @plugindesc When you move to another place, turn off the specified self-switch.
 * @author Mokusei Penguin
 * @url
 *
 * @help [version 2.1.0]
 * This plugin is for RPG Maker MV and MZ.
 *
 * ▼ Plugin command details
 *  - In MV, the variable N is referred to by writing v [N] in the item for
 *    inputting a numerical value.
 *  - In MZ, in the item to enter a numerical value, select the text and
 *    write v [N] to refer to the variable N.
 *
 *  〇 MV / MZ
 *
 *  〇 DeleteSelfSwitch mapIds sw  / delete
 *      mapIds : Range can be specified
 *      sw     : Self switch to turn off
 *   - Turns off all self-switches on the specified map.
 *   - When specifying the range, do not put a space between them. (MV only)
 *   - Do not put a space between the self-switch specifications.
 *       Example： DeleteSelfSwitch 1 A
 *                   => Change self-switch A of map ID 1 to OFF
 *                 DeleteSelfSwitch v[13] BCD
 *                   => Change the self-switch B, C, D of the map ID of
 *                      variable 13 to OFF
 *                 DeleteSelfSwitch 1-5,8 BC
 *                   => Change the self-switches B and C of map IDs 1 to 5 and
 *                      8 to OFF
 *
 * ▼ About range specification
 *  - When setting numbers in an array, you can specify numbers from N to M by
 *    writing N-M.
 *      Example: 1-4,8,10-12
 *
 * ================================
 * Mail : wood_penguin＠yahoo.co.jp (＠ is half-width)
 * Blog : http://woodpenguin.blog.fc2.com/
 * License : MIT license
 *
 *  @command delete
 *      @desc
 *      @arg mapIds
 *          @desc Range can be specified
 *          @default 0
 *      @arg switchs
 *          @desc
 *          @default ABCD
 *
 *
 *  @param Map IDs
 *      @desc Map ID that turns off the self-switch when moving to another location
 * (All maps if empty / Range can be specified)
 *      @default
 *
 *  @param Self Switches
 *      @desc Self switch to turn off
 *      @default ABCD
 *
 *      @param Self Variables
 *      @desc Self variable to be 0
 * (Only when MPP_SelfVariable is installed / Range can be specified)
 *      @default
 *
 */

/*:ja
 * @target MV MZ
 * @plugindesc 場所移動した際に、指定したセルフスイッチをOFFにします。
 * @author 木星ペンギン
 * @url
 *
 * @help [version 2.1.0]
 * このプラグインはRPGツクールMVおよびMZ用です。
 *
 * ▼ プラグインコマンド
 *  - MVでは数値を入力する項目で v[N] と記述することで変数N番を参照します。
 *  - MZでは数値を入力する項目で、テキストを選択して v[N] と記述することで
 *    変数N番を参照します。
 *
 *  〇 MV / MZ
 *
 *  〇 DeleteSelfSwitch mapIds sw  / セルフスイッチ削除
 *      mapIds : マップID (範囲指定可)
 *      sw     : OFFにするセルフスイッチ
 *   - 指定したマップのセルフスイッチを全てOFFにします。
 *   - 範囲指定する場合は間にスペースを入れないでください。(MVのみ)
 *   - セルフスイッチの指定は間にスペースを入れないでください。
 *       例： DeleteSelfSwitch 1 A
 *             => マップID 1 番のセルフスイッチ A をOFFに変更
 *           DeleteSelfSwitch v[13] BCD
 *             => 変数13番のマップIDのセルフスイッチ B,C,D をOFFに変更
 *           DeleteSelfSwitch 1-5,8 BC
 *             => マップID 1～5と8 のセルフスイッチ B,C をOFFに変更
 *
 * ▼ 範囲指定について
 *  - 数値を配列で設定する際、n-m と表記することでnからmまでの数値を指定できます。
 *      例: 1-4,8,10-12
 *
 * ================================
 * Mail : wood_penguin＠yahoo.co.jp (＠は半角)
 * Blog : http://woodpenguin.blog.fc2.com/
 * License : MIT license
 *
 *  @command delete
 *      @text 削除
 *      @desc
 *      @arg mapIds
 *          @text マップID
 *          @desc 範囲指定可
 *          @default 0
 *      @arg switchs
 *          @text スイッチ
 *          @desc
 *          @default ABCD
 *
 *
 *  @param Map IDs
 *      @text マップID
 *      @desc 場所移動でセルフスイッチをOFFにするマップIDの配列
 * (空の場合はすべてのマップ / 範囲指定可)
 *      @default
 *
 *  @param Self Switches
 *      @text セルフスイッチ
 *      @desc OFFにするセルフスイッチ
 *      @default ABCD
 *
 *  @param Self Variables
 *      @text セルフ変数
 *      @desc 0にするセルフ変数
 * (MPP_SelfVariable導入時のみ / 範囲指定可)
 *      @default
 *
 */

(() => {
    'use strict';

    const pluginName = 'MPP_DeleteSelfSwitch';

    // Plugin Parameters
    const parameters = PluginManager.parameters(pluginName);
    const range = function*(start, end) {
        for (let i = start; i < end; i++) {
            yield i;
        }
    };
    const convertToArray = (param) => {
        return param.split(',').reduce((r, item) => {
            if (item) {
                const match = /(\d+)-(\d+)/.exec(item);
                if (match) {
                    r.push(...range(+match[1], +match[2] + 1));
                } else {
                    r.push(+item);
                }
            }
            return r;
        }, []);
    };
    const params_MapIDs = convertToArray(parameters['Map IDs']);
    const params_SelfSwitches = parameters['Self Switches'];
    const params_SelfVariables = convertToArray(parameters['Self Variables']);

    // Dealing with other plugins
    const _importedPlugin = (...names) => {
        return names.some(name => PluginManager._scripts.includes(name));
    };

    //-------------------------------------------------------------------------
    // Game_SelfSwitches

    Game_SelfSwitches.prototype.delete = function(mapId, switchs) {
        const regexp = new RegExp(`${mapId},\\d+,[${switchs}]`);
        for (const key of Object.keys(this._data)) {
            if (regexp.test(key)) {
                delete this._data[key];
            }
        }
        this.onChange();
    };

    //-------------------------------------------------------------------------
    // Game_Map

    const _Game_Map_setup = Game_Map.prototype.setup;
    Game_Map.prototype.setup = function(mapId) {
        if (
            this._mapId !== mapId &&
            (params_MapIDs.length === 0 || params_MapIDs.includes(this._mapId))
        ) {
            $gameSelfSwitches.delete(this._mapId, params_SelfSwitches);
            if (_importedPlugin('MPP_SelfVariable')) {
                $gameVariables.deleteSelfValues(this._mapId, [], params_SelfVariables);
            }
        }
        _Game_Map_setup.apply(this, arguments);
    };

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

    const _mzCommands = {
        DeleteSelfSwitch: { name:'delete', keys:['mapIds', 'switchs'] }
    };
    Object.assign(_mzCommands, {
        'セルフスイッチ削除': _mzCommands.DeleteSelfSwitch
    });

    const _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
    Game_Interpreter.prototype.pluginCommand = function(command, args) {
        _Game_Interpreter_pluginCommand.apply(this, arguments);
        const mzCommand = _mzCommands[command];
        if (mzCommand) {
            const args2 = Object.assign(
                {},
                ...mzCommand.keys.map((k, i) => ({ [k]: args[i] }))
            );
            PluginManager.callCommandMV(this, pluginName, mzCommand.name, args2);
        }
    };

    //-------------------------------------------------------------------------
    // PluginManager

    if (!PluginManager.registerCommand) {
        PluginManager._commandsMV = PluginManager._commandsMV || {};

        PluginManager.registerCommandMV = function(pluginName, commandName, func) {
            const key = pluginName + ':' + commandName;
            this._commandsMV[key] = func;
        };

        PluginManager.callCommandMV = function(self, pluginName, commandName, args) {
            const key = pluginName + ':' + commandName;
            const func = this._commandsMV[key];
            if (typeof func === 'function') {
                func.bind(self)(args);
            }
        };
    }

    {
        const _registerCommand = PluginManager.registerCommand || PluginManager.registerCommandMV;

        _registerCommand.call(PluginManager, pluginName, 'delete', function(args) {
            const switchs = args.switchs.toUpperCase();
            for (const mapId of PluginManager.mppConvertRange(args.mapIds)) {
                $gameSelfSwitches.delete(mapId || this._mapId, switchs);
            }
        });

    }

    PluginManager.mppConvertRange = function(text) {
        return convertToArray(text.replace(
            /V\[(\d+)\]/gi, (_, p1) => $gameVariables.value(parseInt(p1))
        ));
    };

})();


code:
//=============================================================================
// MPP_SmoothBattleLog.js
//=============================================================================
// Copyright (c) 2018 Mokusei Penguin
// Released under the MIT license
// http://opensource.org/licenses/mit-license.php
//=============================================================================

/*:
 * @plugindesc 【ver.1.0】戦闘ログの表示方法や動作を変更し、戦闘の進行を早くしたりします。
 * @author 木星ペンギン
 *
 * @help ▼ 動作詳細
 * --------------------------------
 *  〇 戦闘ログの表示方法を蓄積型にすることで、ログ進行が早くても
 *    文章がすぐに消ることがなくなります。
 *
 *  〇 通常、敵を倒した際の演出が終了するまでキャラクターは動きませんが、
 *    演出の終了を待たずにキャラクターが元の位置に戻ります。
 *
 *  〇 通常、前に行動したキャラクターが元の位置に戻らないと
 *    次のキャラクターは行動しませんが、
 *    前のキャラクターが行動を終了した時点で次のキャラクターが行動します。
 *
 *  〇 アニメーションの終了待ちの時間を短縮します。
 *    短縮する時間はプラグインパラメータ[Animation Short Count]にて変更可能です。
 *
 *  〇 パーティコマンドから戦闘過去ログを確認することができます。
 *
 * ================================================================
 * ▼ プラグインパラメータ 詳細
 * --------------------------------
 *  〇 Fast Forward Enabled? (戦闘ログの高速表示の有効/無効)
 *   「戦闘ログの高速表示」はツクールＭＶのデフォルトの機能です。
 *   決定キー長押しや長押しタッチなどでログ表示が早くなる機能の有無を
 *   変更します。
 *
 * --------------------------------
 *  〇 Log Type (戦闘ログの消去タイプ)
 *   0:まとめて消去
 *    最後のログが表示されてから一定時間がたつと戦闘ログウィンドウが
 *    非表示となります。
 *
 *   1:一行ずつ消去
 *    表示されてから一定時間経過したログから順に消去されます。
 *
 * --------------------------------
 *  〇 Not Display Skils (ログに表示しないスキルIDの配列)
 *   n-m と表記することで、nからmまでの数値を指定できます。
 *   (例 : 1-4,8 => 1,2,3,4,8)
 *
 * --------------------------------
 *  〇 Log Command (戦闘過去ログを表示するコマンド名)
 *   コマンドはパーティコマンドに追加されます。
 *
 * ================================
 * 制作 : 木星ペンギン
 * URL : http://woodpenguin.blog.fc2.com/
 *
 * @param === Base ===
 * @default 【基本的な設定】
 *
 * @param Fast Forward Enabled?
 * @type boolean
 * @desc 戦闘ログの高速表示の有効/無効
 * @default false
 * @parent === Base ===
 *
 * @param Log Type
 * @type number
 * @max 1
 * @desc 戦闘ログの消去タイプ
 * (0:まとめて消去, 1:一行ずつ消去)
 * @default 1
 * @parent === Base ===
 *
 * @param Message Speed
 * @type number
 * @desc 戦闘ログの表示速度
 * @default 8
 * @parent === Base ===
 *
 * @param View Duration
 * @type number
 * @desc 戦闘ログの表示時間
 * (0:常時表示)
 * @default 150
 * @parent === Base ===
 *
 * @param Start Messages On Log?
 * @type boolean
 * @desc 戦闘開始メッセージをログに表示するかどうか
 * @default false
 * @parent === Base ===
 *
 * @param Log Command
 * @desc 戦闘過去ログを表示するコマンド名
 * @default 戦闘ログ
 * @parent === Base ===
 *
 * @param Log Max Size
 * @type number
 * @desc 戦闘ログを保持する数
 * @default 100
 * @parent === Base ===
 *
 * @param Item Name Only?
 * @type boolean
 * @desc アイテム/スキル名のみ表示
 * @default false
 * @parent === Base ===
 *
 * @param Not Display Skils
 * @desc ログに表示しないスキルIDの配列
 * (範囲指定可)
 * @default 1,2
 * @parent === Base ===
 *
 *
 * @param === Window ===
 * @default 【ログウィンドウ】
 *
 * @param Log Window Y
 * @type number
 * @min -1000
 * @desc ログウィンドウのY座標
 * @default 0
 * @parent === Window ===
 *
 * @param Log Window Width
 * @type number
 * @desc ログウィンドウの幅
 * @default 816
 * @parent === Window ===
 *
 * @param Line Height
 * @type number
 * @desc 戦闘ログの一行の高さ
 * @default 30
 * @parent === Window ===
 *
 * @param Font Size
 * @type number
 * @desc 戦闘ログの文字サイズ
 * @default 24
 * @parent === Window ===
 *
 * @param Max Lines
 * @type number
 * @min 1
 * @desc 戦闘ログの最大表示行数
 * @default 6
 * @parent === Window ===
 *
 *
 * @param === Advanced ===
 * @default 【高度な設定】
 *
 * @param Indent Width
 * @type number
 * @desc インデント(字下げ)の幅
 * @default 12
 * @parent === Advanced ===
 *
 * @param Animation Next Delay
 * @type number
 * @desc 複数の対象にアニメーションを表示する際の間隔
 * @default 12
 * @parent === Advanced ===
 *
 * @param Animation Short Count
 * @type number
 * @desc アニメーション待ちを短縮する時間
 * @default 16
 * @parent === Advanced ===
 *
 *
 *
 *
 *
 *
 *
 */

(function () {

var MPPlugin = {};

(function() {

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

    function convertParam(name) {
        var param = parameters[name];
        var result = [];
        if (param) {
            var data = param.split(',');
            for (var i = 0; i < data.length; i++) {
                if (/(\d+)\s*-\s*(\d+)/.test(data[i])) {
                    for (var n = Number(RegExp.$1); n <= Number(RegExp.$2); n++) {
                        result.push(n);
                    }
                } else {
                    result.push(Number(data[i]));
                }
            }
        }
        return result;
    };

    MPPlugin.FastForwardEnabled = !!eval(parameters['Fast Forward Enabled?']);
    MPPlugin.LogType = Number(parameters['Log Type'] || 1);
    MPPlugin.MaxLines = Number(parameters['Max Lines'] || 6);
    MPPlugin.MessageSpeed = Number(parameters['Message Speed'] || 8);
    MPPlugin.ViewDuration = Number(parameters['View Duration'] || 150);
    MPPlugin.StartMessagesOnLog = !!eval(parameters['Start Messages On Log?']);
    MPPlugin.LogCommand = parameters['Log Command'] || '';
    MPPlugin.LogMaxSize = Number(parameters['Log Max Size'] || 100);
    MPPlugin.ItemNameOnly = !!eval(parameters['Item Name Only?']);
    MPPlugin.NotDisplaySkils = convertParam('Not Display Skils');

    MPPlugin.LogWindowY = Number(parameters['Log Window Y'] || 0);
    MPPlugin.LogWindowWidth = Number(parameters['Log Window Width'] || 816);
    MPPlugin.LineHeight = Number(parameters['Line Height'] || 30);
    MPPlugin.FontSize = Number(parameters['Font Size'] || 24);

    MPPlugin.IndentWidth = Number(parameters['Indent Width'] || 32);
    MPPlugin.AnimationNextDelay = Number(parameters['Animation Next Delay'] || 12);
    MPPlugin.AnimationShortCount = Number(parameters['Animation Short Count'] || 12);

})();

var Alias = {};

//-----------------------------------------------------------------------------
// BattleManager

//164
Alias.BaMa_isBusy = BattleManager.isBusy;
BattleManager.isBusy = function() {
    if (Alias.BaMa_isBusy.apply(this, arguments)) {
        return true;
    }
    if (this.isBattleEnd() && this.waitBattleEnd()) {
        return true;
    }
    return false;
};

BattleManager.isBattleEnd = function() {
    return ($gameParty.isAllDead() || $gameTroop.isAllDead());
};

BattleManager.waitBattleEnd = function() {
    return (this._spriteset.isEffecting() || this._spriteset.isAnyoneMoving());
};

//229
Alias.BaMa_displayStartMessages = BattleManager.displayStartMessages;
BattleManager.displayStartMessages = function() {
    if (!MPPlugin.StartMessagesOnLog)
        Alias.BaMa_displayStartMessages.apply(this, arguments);
};

BattleManager.displayStartMessagesOnLog = function() {
    $gameTroop.enemyNames().forEach(function(name) {
        this._logWindow.push('addText', TextManager.emerge.format(name));
    }, this);
    if (this._preemptive) {
        this._logWindow.push('wait');
        this._logWindow.push('addText', TextManager.preemptive.format($gameParty.name()));
    } else if (this._surprise) {
        this._logWindow.push('wait');
        this._logWindow.push('addText', TextManager.surprise.format($gameParty.name()));
    }
    this._logWindow.push('clear');
};

//480
Alias.BaMa_checkBattleEnd = BattleManager.checkBattleEnd;
BattleManager.checkBattleEnd = function() {
    var result = Alias.BaMa_checkBattleEnd.apply(this, arguments);
    if (result) {
        this._logWindow.clear_mppSBL();
        this._logWindow.endSelect();
    }
    return result;
};

//-----------------------------------------------------------------------------
// Window_Base

//303
Alias.WiBa_processEscapeCharacter = Window_Base.prototype.processEscapeCharacter;
Window_Base.prototype.processEscapeCharacter = function(code, textState) {
    if (code === 'PX') {
        textState.x += this.obtainEscapeParam(textState);
    } else {
        Alias.WiBa_processEscapeCharacter.apply(this, arguments);
    }
};

//-----------------------------------------------------------------------------
// Window_BattleLog

//14
Alias.WiBaLo_initialize = Window_BattleLog.prototype.initialize;
Window_BattleLog.prototype.initialize = function() {
    this._clearDuration = 0;
    this._logScrollYDuration = 0;
    this._logScrollY = this.lineHeight();
    this._logs = [];
    Alias.WiBaLo_initialize.apply(this, arguments);
    this.createLogSprites();
};

//34
Window_BattleLog.prototype.windowWidth = function() {
    return MPPlugin.LogWindowWidth;
};

//
Window_BattleLog.prototype.lineHeight = function() {
    return MPPlugin.LineHeight;
};

//
Window_BattleLog.prototype.standardFontSize = function() {
    return MPPlugin.FontSize;
};

//
Window_BattleLog.prototype.maxItems = function() {
    return this._logs.length;
};

//42
Window_BattleLog.prototype.maxLines = function() {
    return MPPlugin.MaxLines;
};

//46
Window_BattleLog.prototype.createBackBitmap = function() {
    this._backBitmap = new Bitmap(this.width, this.contentsHeight());
};

Window_BattleLog.prototype.createLogSprites = function() {
    this._logMainSprite = new Sprite();
    this.addChild(this._logMainSprite);
    this._logSprites = [];
    var max = this.maxLines() + 1;
    for (var i = 0; i < max; i++) {
        var sprite = new Sprite();
        sprite.bitmap = new Bitmap(this.contentsWidth(), this.lineHeight());
        this._logSprites[i] = sprite;
        this._logMainSprite.addChild(sprite);
    }
};

//61
Window_BattleLog.prototype.messageSpeed = function() {
    return MPPlugin.MessageSpeed;
};

//
if (Window_Message.prototype.hasOwnProperty('itemRectForText')) {
    Alias.WiBaLo_itemRectForText = Window_BattleLog.prototype.itemRectForText;
}
Window_BattleLog.prototype.itemRectForText = function(index) {
    var _super = Alias.WiBaLo_itemRectForText ||
            Window_Selectable.prototype.itemRectForText;
    var rect = _super.apply(this, arguments);
    if (!this.active) rect.y = 0;
    return rect;
};

//69
Alias.WiBaLo_update = Window_BattleLog.prototype.update;
Window_BattleLog.prototype.update = function() {
    Window_Selectable.prototype.update.call(this);
    Alias.WiBaLo_update.apply(this, arguments);
    this.updateLogSprites();
};

//
if (Window_Selectable.prototype.hasOwnProperty('updateArrows')) {
    Alias.WiSe_updateArrows = Window_Selectable.prototype.updateArrows;
}
Window_BattleLog.prototype.updateArrows = function() {
    if (Alias.WiSe_updateArrows) {
        Alias.WiSe_updateArrows.apply(this, arguments);
    } else {
        Window_Selectable.prototype.updateArrows.apply(this, arguments);
    }
    if (!this.active) {
        this.downArrowVisible = false;
        this.upArrowVisible = false;
    }
};

Window_BattleLog.prototype.updateLogSprites = function() {
    var lineHeight = this.lineHeight();
    if (this._logScrollYDuration > 0) {
        this._logScrollYDuration--;
        this._logScrollY = this.step(this._logScrollYDuration,
                                        lineHeight, this._logScrollY);
    }
    for (var i = 0; i < this._logSprites.length; i++) {
        var sprite = this._logSprites[i];
        var rect = this.itemRect(i);
        rect.y = i * lineHeight - this._logScrollY;
        if (sprite.logScrollXDuration > 0) sprite.logScrollXDuration--;
        sprite.x = Math.round(Math.pow(sprite.logScrollXDuration, 2) / 2);
        sprite.y = rect.y.clamp(0, (this.maxLines() - 1) * lineHeight);
        var y = Math.max(-rect.y, 0);
        sprite.setFrame(0, y, rect.width, rect.height - y);
        sprite.opacity = 255 - sprite.logScrollXDuration * 20;
        if (sprite.viewDuration > 0)
            sprite.viewDuration--;
    }
    if (this._clearDuration > 0) {
        this._clearDuration--;
        var max = Math.min(16, MPPlugin.ViewDuration);
        if (this._clearDuration < max) {
            this._logMainSprite.opacity = 255 * this._clearDuration / max;
            this._backSprite.opacity = 255 * this._clearDuration / max;
        }
        if (this._clearDuration === 0)
            this.clear_mppSBL();
    } else if (this.numLines() > 0) {
        if (this._logSprites[1].viewDuration === 0)
            this.shiftLine();
    }
    this._logMainSprite.x = this.padding;
    this._logMainSprite.y = this.padding;
    this._backSprite.y = this.padding;
    var height = (this.numLines() + 1) * lineHeight - this._logScrollY;
    height = Math.min(height, this.maxLines() * lineHeight);
    var y = this.maxLines() * lineHeight - height;
    this._backSprite.setFrame(0, y, this.width, height);
};

Window_BattleLog.prototype.step = function(d, t, n) {
    return Math.round(t + (n - t) * Math.pow(d, 2) / Math.pow(d + 1, 2));
};

Window_BattleLog.prototype.shiftLine = function() {
    this._lines.shift();
    var sprite = this._logSprites.shift();
    sprite.bitmap.clear();
    this._logSprites.push(sprite);
    this._logScrollY -= this.lineHeight();
    this._logScrollYDuration = 16;
};

//121
Alias.WiBaLo_isFastForward = Window_BattleLog.prototype.isFastForward;
Window_BattleLog.prototype.isFastForward = function() {
    return MPPlugin.FastForwardEnabled && Alias.WiBaLo_isFastForward.apply(this, arguments);
};

//131
Alias.WiBaLo_clear = Window_BattleLog.prototype.clear;
Window_BattleLog.prototype.clear = function() {
    if (MPPlugin.ItemNameOnly) {
        this.clear_mppSBL();
        return;
    }
    this._baseLineStack = [];
    if (MPPlugin.LogType === 0)
        this._clearDuration = MPPlugin.ViewDuration;
};
Window_BattleLog.prototype.clear_mppSBL = function() {
    Alias.WiBaLo_clear.call(this);
    for (var i = 0; i < this._logSprites.length; i++) {
        this._logSprites[i].bitmap.clear();
    }
    this._logScrollYDuration = 0;
    this._logScrollY = this.lineHeight();
};

//141
Window_BattleLog.prototype.waitForEffect = function() {
    //this.setWaitMode('effect');
};

//149
Window_BattleLog.prototype.addText = function(text) {
    var indent = this._baseLineStack.length;
    if (indent > 0) {
        text = '\\px[%1]'.format(indent * MPPlugin.IndentWidth) + text;
    }
    if (!MPPlugin.ItemNameOnly) {
        this._lines.push(text);
        if (this.numLines() > this.maxLines()) this.shiftLine();
    }
    this._logs.push(text);
    if (this.maxItems() > MPPlugin.LogMaxSize) this._logs.shift();

    if (this.active) {
        this.refresh();
    } else if (!MPPlugin.ItemNameOnly) {
        var index = this.numLines() - 1;
        var sprite = this._logSprites[index + 1];
        sprite.logScrollXDuration = 12;
        if (MPPlugin.LogType === 1)
            sprite.viewDuration = MPPlugin.ViewDuration || -1;

        this.drawLineText(index);
    }
    this.wait();
    this._clearDuration = 0;
    this._logMainSprite.opacity = 255;
    this._backSprite.opacity = 255;
};

Window_BattleLog.prototype.addItemName = function(name) {
    this._lines.push(name);
    var index = this.numLines() - 1;
    var sprite = this._logSprites[index + 1];
    sprite.logScrollXDuration = 0;
    sprite.viewDuration = -1;

    this.drawLineText(index);
};

//159
Window_BattleLog.prototype.popBaseLine = function() {
    var baseLine = this._baseLineStack.pop();
//    while (this._lines.length > baseLine) {
//        this._lines.pop();
//    }
};

//269
Window_BattleLog.prototype.animationNextDelay = function() {
    return MPPlugin.AnimationNextDelay;
};

//273
Alias.WiBaLo_refresh = Window_BattleLog.prototype.refresh;
Window_BattleLog.prototype.refresh = function() {
    if (this.active) {
        Window_Selectable.prototype.refresh.apply(this, arguments);
    } else {
        Alias.WiBaLo_refresh.apply(this, arguments);
    }
};

//290
Window_BattleLog.prototype.backRect = function() {
    return {
        x: 0,
        y: 0,
        width: this.width,
        height: this.contentsHeight()
    };
};

//307
Alias.WiBaLo_drawLineText = Window_BattleLog.prototype.drawLineText;
Window_BattleLog.prototype.drawLineText = function(index) {
    var sprite = this._logSprites[index + 1];
    var baseContents = this.contents;
    this.contents = sprite.bitmap;

    if (MPPlugin.ItemNameOnly) {
        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');
    } else {
        Alias.WiBaLo_drawLineText.apply(this, arguments);
    }

    this.contents = baseContents;
};

//326
Window_BattleLog.prototype.endAction = function(subject) {
    //this.push('waitForNewLine');
    this.push('clear');
    this.push('performActionEnd', subject);
};

//345
Alias.WiBaLo_displayAction = Window_BattleLog.prototype.displayAction;
Window_BattleLog.prototype.displayAction = function(subject, item) {
    if (MPPlugin.ItemNameOnly) {
        if (!DataManager.isSkill(item) || !MPPlugin.NotDisplaySkils.contains(item.id)) {
            this.push('addItemName', item.name);
        }
    }
    Alias.WiBaLo_displayAction.apply(this, arguments);
};

Window_BattleLog.prototype.drawItem = function(index) {
    var rect = this.itemRectForText(index);
    this.drawTextEx(this._logs[index], rect.x, rect.y, rect.width);
};

Window_BattleLog.prototype.startSelect = function(height) {
    this.activate();
    this.opacity = 255;
    this.height = height;
    this.createContents();
    this.openness = 0;
    this.open();
    this._logMainSprite.visible = false;
    this._backSprite.visible = false;
    this.select(Math.max(this.maxItems() - 1, 0));
    this.refresh();
};

//
Window_BattleLog.prototype.endSelect = function() {
    this.deactivate();
    this.opacity = 0;
    this.height = this.windowHeight();
    this._logMainSprite.visible = true;
    this._backSprite.visible = true;
    this.downArrowVisible = false;
    this.upArrowVisible = false;
    this.deselect();
    this.refresh();
};

//-----------------------------------------------------------------------------
// Window_PartyCommand

//28
Alias.WiPaCo_makeCommandList = Window_PartyCommand.prototype.makeCommandList;
Window_PartyCommand.prototype.makeCommandList = function() {
    Alias.WiPaCo_makeCommandList.apply(this, arguments);
    if (MPPlugin.LogCommand)
        this.addCommand(MPPlugin.LogCommand, 'battleLog');
};

//-----------------------------------------------------------------------------
// Sprite_Battler

//
Sprite_Battler.prototype.isAnimationPlaying = function() {
    return this._animationSprites.some(function(animation) {
        return animation._duration > MPPlugin.AnimationShortCount;
    });
};

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

//271
Spriteset_Battle.prototype.isBusy = function() {
    return this.isAnimationPlaying();// || this.isAnyoneMoving();
};

//-----------------------------------------------------------------------------
// Scene_Battle

//46
Alias.ScBat_isAnyInputWindowActive = Scene_Battle.prototype.isAnyInputWindowActive;
Scene_Battle.prototype.isAnyInputWindowActive = function() {
    return (Alias.ScBat_isAnyInputWindowActive.apply(this, arguments) ||
            this._logWindow.active);
};

//127
Alias.ScBat_createDisplayObjects = Scene_Battle.prototype.createDisplayObjects;
Scene_Battle.prototype.createDisplayObjects = function() {
    Alias.ScBat_createDisplayObjects.apply(this, arguments);
    if (MPPlugin.StartMessagesOnLog)
        BattleManager.displayStartMessagesOnLog();
};

//156
Alias.ScBat_createLogWindow = Scene_Battle.prototype.createLogWindow;
Scene_Battle.prototype.createLogWindow = function() {
    Alias.ScBat_createLogWindow.apply(this, arguments);
    this._logWindow.y = MPPlugin.LogWindowY;
    this._logWindow.setHandler('cancel', this.onLogCancel.bind(this));
};

//166
Alias.ScBat_createPartyCommandWindow = Scene_Battle.prototype.createPartyCommandWindow;
Scene_Battle.prototype.createPartyCommandWindow = function() {
    Alias.ScBat_createPartyCommandWindow.apply(this, arguments);
    this._partyCommandWindow.setHandler('battleLog',  this.commandLog.bind(this));
};

Scene_Battle.prototype.commandLog = function() {
    this._logWindow.startSelect(this._statusWindow.y);
};

Scene_Battle.prototype.onLogCancel = function() {
    this._logWindow.endSelect();
    this._partyCommandWindow.activate();
};

//400
Alias.ScBat_endCommandSelection = Scene_Battle.prototype.endCommandSelection;
Scene_Battle.prototype.endCommandSelection = function() {
    Alias.ScBat_endCommandSelection.call(this);
    this._logWindow.endSelect();
};

})();


code:
//=============================================================================
// MT_ChangeMoveSpeed.js
// 移動速度を補正するプラグイン
// ----------------------------------------------------------------------------
// (C) 2019 Moooty
//=============================================================================

/*:
 * @plugindesc Change Move Speed.
 * @author Moooty
 *
 * @param playerWalkSpeedRate
 * @desc Player(and Follower)'s move speed rate(default：1)
 * @type number
 * @decimals 2
 * @default 1.00
 *
 * @param vehicle1MoveSpeedRate
 * @desc Vehicle1(Boat)'s move speed rate.(default: 1)
 * @type number
 * @decimals 2
 * @default 1.00
 *
 * @param vehicle2MoveSpeedRate
 * @desc Vehicle2(Ship)'s move speed rate.(default: 1)
 * @type number
 * @decimals 2
 * @default 1.00
 *
 * @param vehicle3MoveSpeedRate
 * @desc Vehicle3(Airship)'s move speed rate.(default: 1)
 * @type number
 * @decimals 2
 * @default 1.00
 *
 * @param eventSpeedRate
 * @desc Map Event's move speed rate.(default: 1)
 * @type number
 * @decimals 2
 * @default 1.00
 *
 * @help
 * === Description ===
 * Multiply move speed by plagin paramter.
 *
 * Nothing plugin commnad this plugin.
 *
 *
 * === Change Log ===
 * Apr 18, 2019 ver1.00 Initial release.
 * Nov 24, 2019 ver1.10 Rename plugin file.（ChangeMoveSpeed → MT_ChangeMoveSpeed.js）
 *
 * === Manual & License(Japanese) ===
 * https://www.5ing-myway.com/rpgmaker-plugin-change-move-speed/
 *
 */

/*:ja
 * @plugindesc 移動速度を補正
 * @author むーてぃ
 *
 * @param playerWalkSpeedRate
 * @text プレイヤーの移動速度補正
 * @desc プレイヤーとフォロワー(仲間)の移動速度補正(デフォルト：1倍)
 * @type number
 * @decimals 2
 * @default 1.00
 *
 * @param vehicle1MoveSpeedRate
 * @text 乗り物1の移動速度補正
 * @desc 乗り物1の移動速度補正(デフォルト: 1倍)
 * @type number
 * @decimals 2
 * @default 1.00
 *
 * @param vehicle2MoveSpeedRate
 * @text 乗り物2の移動速度補正
 * @desc 乗り物2の移動速度補正(デフォルト: 1倍)
 * @type number
 * @decimals 2
 * @default 1.00
 *
 * @param vehicle3MoveSpeedRate
 * @text 乗り物3の移動速度補正
 * @desc 乗り物3の移動速度補正(デフォルト: 1倍)
 * @type number
 * @decimals 2
 * @default 1.00
 *
 * @param eventSpeedRate
 * @text マップイベントの移動速度補正
 * @desc マップイベントの移動速度補正(デフォルト:1倍)
 * @type number
 * @decimals 2
 * @default 1.00
 *
 * @help
 * === 説明 ===
 * 移動速度を変更できるプラグインです。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * === 更新履歴 ===
 * 2019/04/18 ver1.00 初版
 * 2019/11/24 ver1.10 ファイル名変更（ChangeMoveSpeed → MT_ChangeMoveSpeed.js）
 *
 * === マニュアル＆ライセンス ===
 * https://www.5ing-myway.com/rpgmaker-plugin-change-move-speed/
 *
 */

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

(function(){
    'use strict';

    const PLUGIN_NAME       = "MT_ChangeMoveSpeed";
    var parameters          = PluginManager.parameters(PLUGIN_NAME);

    var playerMoveSpeedRate = getParameterValue(parameters['playerWalkSpeedRate'], 1);
    var vehiclesSpeedRate   = [];
    vehiclesSpeedRate.push(getParameterValue(parameters['vehicle1MoveSpeedRate'], 1));
    vehiclesSpeedRate.push(getParameterValue(parameters['vehicle2MoveSpeedRate'], 1));
    vehiclesSpeedRate.push(getParameterValue(parameters['vehicle3MoveSpeedRate'], 1));

    var eventSpeedRate = getParameterValue(parameters['eventSpeedRate'], 1);

    // ---------- rpg_object.js の変更ここから ----------
    // Game_CharacterBase
    // 元の式に移動速度補正をかける
    var _Game_CharacterBase_distancePerFrame = Game_CharacterBase.prototype.distancePerFrame;
    Game_CharacterBase.prototype.distancePerFrame = function() {
		return _Game_CharacterBase_distancePerFrame.call(this) * this.moveSpeedRate();
    };

    // メソッド追加(速度補正取得)
    Game_CharacterBase.prototype.moveSpeedRate = function(){
		return this._moveSpeedRate;
    };

    // Game_Player
    var _Game_Player_initialize = Game_Player.prototype.initialize;
    Game_Player.prototype.initialize = function() {
		_Game_Player_initialize.call(this);
		this._moveSpeedRate = playerMoveSpeedRate;
    };

    // メソッド追加(速度補正取得)
    Game_Player.prototype.moveSpeedRate = function(){
		if($gamePlayer.vehicle() != null){
			if($gamePlayer.vehicle()._driving){
				return $gamePlayer.vehicle()._moveSpeedRate;
			}
		}

		return this._moveSpeedRate;
    };

    // Game_Follower
    var _Game_Follower_initialize = Game_Follower.prototype.initialize;
    Game_Follower.prototype.initialize = function(memberIndex) {
		_Game_Follower_initialize.call(this, memberIndex);
		this._moveSpeedRate = playerMoveSpeedRate;
    };

    // Game_Vehicle
    var _Game_Vehicle_initialze = Game_Vehicle.prototype.initialize;
    Game_Vehicle.prototype.initialize = function(type) {
		_Game_Vehicle_initialze.call(this, type);

		if (this.isBoat()) {
				this._moveSpeedRate = vehiclesSpeedRate[0];
		} else if (this.isShip()) {
				this._moveSpeedRate = vehiclesSpeedRate[1];
		} else if (this.isAirship()) {
				this._moveSpeedRate = vehiclesSpeedRate[2];
		}
    };

    // Game_Event
    var _Game_Event_initialize = Game_Event.prototype.initialize;
    Game_Event.prototype.initialize = function(mapId, eventId) {
		this._moveSpeedRate = eventSpeedRate;
		_Game_Event_initialize.call(this, mapId, eventId);
    };
    // ---------- rpg_object.js の変更ここまで ----------

    // ---------- パラメータ取得用関数ここから ----------
    // @type numberのパラメータでも文字列を入れることができてしまう対策
    function getParameterValue(param, defaultValue){
	    var result = Number(param || defaultValue);

	    if(Number.isNaN(result)){
	        result = defaultValue;
	    }

	    return result;
    };
    // ---------- パラメータ取得用関数ここまで ----------
})();


code:
(function () {
    Input.keyMapper[65] = 'A';
//���l�Ɏg�p�������L�[��o�^���Ă���
//
//
})();


code:
/*:
 * NOTE: Images are stored in the img/system folder.
 *
 * @plugindesc Show a Splash Screen "Made with MV" and/or a Custom Splash Screen before going to main screen.
 * @author Dan "Liquidize" Deptula
 *
 * @help This plugin does not provide plugin commands.
 *
 * @param Show Made With MV
 * @desc Enabled/Disables showing the "Made with MV" splash screen.
 * OFF - false     ON - true
 * Default: ON
 * @default true
 *
 * @param Made with MV Image
 * @desc The image to use when showing "Made with MV"
 * Default: MadeWithMv
 * @default MadeWithMv
 * @require 1
 * @dir img/system/
 * @type file
 *
 * @param Show Custom Splash
 * @desc Enabled/Disables showing the "Made with MV" splash screen.
 * OFF - false     ON - true
 * Default: OFF
 * @default false
 *
 * @param Custom Image
 * @desc The image to use when showing "Made with MV"
 * Default:
 * @default
 * @require 1
 * @dir img/system/
 * @type file
 *
 * @param Fade Out Time
 * @desc The time it takes to fade out, in frames.
 * Default: 120
 * @default 120
 *
 * @param Fade In Time
 * @desc The time it takes to fade in, in frames.
 * Default: 120
 * @default 120
 *
 * @param Wait Time
 * @desc The time between fading in and out, in frames.
 * Default: 160
 * @default 160
 *
 */
/*:ja
 * メモ: イメージはimg／systemフォルダ内に保存されます。
 *
 * @plugindesc メイン画面へ進む前に、"Made with MV"のスプラッシュ画面もしくはカスタマイズされたスプラッシュ画面を表示します。
 * @author Dan "Liquidize" Deptula
 *
 * @help  このプラグインにはプラグインコマンドはありません。
 *
 * @param Show Made With MV
 * @desc "Made with MV"のスプラッシュ画面を表示できる/できないようにします。
 * OFF - false     ON - true
 * デフォルト: ON
 * @default true
 *
 * @param Made with MV Image
 * @desc "Made with MV"を表示する際に使用する画像
 * デフォルト: MadeWithMv
 * @default MadeWithMv
 * @require 1
 * @dir img/system/
 * @type file
 *
 * @param Show Custom Splash
 * @desc "Made with MV"のスプラッシュ画面を表示できる/できないようにします。
 * OFF - false     ON - true
 * デフォルト: OFF
 * @default false
 *
 * @param Custom Image
 * @desc "Made with MV"を表示する際に使用する画像
 * デフォルト:
 * @default
 * @require 1
 * @dir img/system/
 * @type file
 *
 * @param Fade Out Time
 * @desc フェードアウトに要する時間（フレーム数）
 * デフォルト: 120
 * @default 120
 *
 * @param Fade In Time
 * @desc フェードインに要する時間（フレーム数）
 * デフォルト: 120
 * @default 120
 *
 * @param Wait Time
 * @desc フェードインからフェードアウトまでに要する時間（フレーム数）
 * デフォルト: 160
 * @default 160
 *
 */
var Liquidize = Liquidize || {};
Liquidize.MadeWithMV = {};
Liquidize.MadeWithMV.Parameters = PluginManager.parameters('MadeWithMv');

Liquidize.MadeWithMV.ShowMV = JSON.parse(Liquidize.MadeWithMV.Parameters["Show Made With MV"]);
Liquidize.MadeWithMV.MVImage = String(Liquidize.MadeWithMV.Parameters["Made with MV Image"]);
Liquidize.MadeWithMV.ShowCustom = JSON.parse(Liquidize.MadeWithMV.Parameters["Show Custom Splash"]);
Liquidize.MadeWithMV.CustomImage = String(Liquidize.MadeWithMV.Parameters["Custom Image"]);
Liquidize.MadeWithMV.FadeOutTime = Number(Liquidize.MadeWithMV.Parameters["Fade Out Time"]) || 120;
Liquidize.MadeWithMV.FadeInTime = Number(Liquidize.MadeWithMV.Parameters["Fade In Time"]) || 120;
Liquidize.MadeWithMV.WaitTime = Number(Liquidize.MadeWithMV.Parameters["Wait Time"]) || 160;

//-----------------------------------------------------------------------------
// Scene_Splash
//
// This is a constructor, implementation is done in the inner scope.

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

(function() {

    //-----------------------------------------------------------------------------
    // Scene_Boot
    //
    // The scene class for dealing with the game boot.

    var _Scene_Boot_loadSystemImages = Scene_Boot.prototype.loadSystemImages;
    Scene_Boot.prototype.loadSystemImages = function() {
        _Scene_Boot_loadSystemImages.call(this);
        if (Liquidize.MadeWithMV.ShowMV) {
            ImageManager.loadSystem(Liquidize.MadeWithMV.MVImage);
        }
        if (Liquidize.MadeWithMV.ShowCustom) {
            ImageManager.loadSystem(Liquidize.MadeWithMV.CustomImage);
        }
    };

    var _Scene_Boot_start = Scene_Boot.prototype.start;
    Scene_Boot.prototype.start = function() {
        if ((Liquidize.MadeWithMV.ShowMV || Liquidize.MadeWithMV.ShowCustom) && !DataManager.isBattleTest() && !DataManager.isEventTest()) {
            SceneManager.goto(Scene_Splash);
        } else {
            _Scene_Boot_start.call(this);
        }
    };

    //-----------------------------------------------------------------------------
    // Scene_Splash
    //
    // The scene class for dealing with the splash screens.

    Scene_Splash.prototype = Object.create(Scene_Base.prototype);
    Scene_Splash.prototype.constructor = Scene_Splash;

    Scene_Splash.prototype.initialize = function() {
        Scene_Base.prototype.initialize.call(this);
        this._mvSplash = null;
        this._customSplash = null;
        this._mvWaitTime = Liquidize.MadeWithMV.WaitTime;
        this._customWaitTime = Liquidize.MadeWithMV.WaitTime;
        this._mvFadeOut = false;
        this._mvFadeIn = false;
        this._customFadeOut = false;
        this._customFadeIn = false;
    };

    Scene_Splash.prototype.create = function() {
        Scene_Base.prototype.create.call(this);
        this.createSplashes();
    };

    Scene_Splash.prototype.start = function() {
        Scene_Base.prototype.start.call(this);
        SceneManager.clearStack();
        if (this._mvSplash != null) {
            this.centerSprite(this._mvSplash);
        }
        if (this._customSplash != null) {
            this.centerSprite(this._customSplash);
        }
    };

    Scene_Splash.prototype.update = function() {
        if (Liquidize.MadeWithMV.ShowMV) {
            if (!this._mvFadeIn) {
                this.startFadeIn(Liquidize.MadeWithMV.FadeInTime, false);
                this._mvFadeIn = true;
            } else {
                if (this._mvWaitTime > 0 && this._mvFadeOut == false) {
                    this._mvWaitTime--;
                } else {
                    if (this._mvFadeOut == false) {
                        this._mvFadeOut = true;
                        this.startFadeOut(Liquidize.MadeWithMV.FadeOutTime, false);
                    }
                }
            }
        }

        if (Liquidize.MadeWithMV.ShowCustom) {
            if (Liquidize.MadeWithMV.ShowMV && this._mvFadeOut == true) {
                if (!this._customFadeIn && this._fadeDuration == 0) {
                    this._customSplash.opacity = 255;
                    this._customWaitTime = Liquidize.MadeWithMV.WaitTime;
                    this.startFadeIn(Liquidize.MadeWithMV.FadeInTime, false);
                    this._customFadeIn = true;
                } else {
                    if (this._customWaitTime > 0 && this._customFadeOut == false) {
                        this._customWaitTime--;
                    } else {
                        if (this._customFadeOut == false) {
                            this._customFadeOut = true;
                            this.startFadeOut(Liquidize.MadeWithMV.FadeOutTime, false);
                        }
                    }
                }
            } else if (!Liquidize.MadeWithMV.ShowMV) {
                if (!this._customFadeIn) {
                    this._customSplash.opacity = 255;
                    this.startFadeIn(Liquidize.MadeWithMV.FadeInTime, false);
                    this._customFadeIn = true;
                } else {
                    if (this._customWaitTime > 0 && this._customFadeOut == false) {
                        this._customWaitTime--;
                    } else {
                        if (this._customFadeOut == false) {
                            this._customFadeOut = true;
                            this.startFadeOut(Liquidize.MadeWithMV.FadeOutTime, false);
                        }
                    }
                }
            }
        }

        if (Liquidize.MadeWithMV.ShowCustom) {
            if (Liquidize.MadeWithMV.ShowMV && this._mvFadeOut == true && this._customFadeOut == true) {
                this.gotoTitleOrTest();
            } else if (!Liquidize.MadeWithMV.ShowMV && this._customFadeOut == true) {
                this.gotoTitleOrTest();
            }
        } else {
            if (this._mvFadeOut == true) {
                this.gotoTitleOrTest();
            }
        }

        Scene_Base.prototype.update.call(this);
    };

    Scene_Splash.prototype.createSplashes = function() {
        if (Liquidize.MadeWithMV.ShowMV) {
            this._mvSplash = new Sprite(ImageManager.loadSystem(Liquidize.MadeWithMV.MVImage));
            this.addChild(this._mvSplash);
        }
        if (Liquidize.MadeWithMV.ShowCustom) {
            this._customSplash = new Sprite(ImageManager.loadSystem(Liquidize.MadeWithMV.CustomImage));
            this._customSplash.opacity = 0;
            this.addChild(this._customSplash);
        }
    };

    Scene_Splash.prototype.centerSprite = function(sprite) {
        sprite.x = Graphics.width / 2;
        sprite.y = Graphics.height / 2;
        sprite.anchor.x = 0.5;
        sprite.anchor.y = 0.5;
    };

    Scene_Splash.prototype.gotoTitleOrTest = function() {
        Scene_Base.prototype.start.call(this);
        SoundManager.preloadImportantSounds();
        if (DataManager.isBattleTest()) {
            DataManager.setupBattleTest();
            SceneManager.goto(Scene_Battle);
        } else if (DataManager.isEventTest()) {
            DataManager.setupEventTest();
            SceneManager.goto(Scene_Map);
        } else {
            this.checkPlayerLocation();
            DataManager.setupNewGame();
            SceneManager.goto(Scene_Title);
            Window_TitleCommand.initCommandPosition();
        }
        this.updateDocumentTitle();
    };

    Scene_Splash.prototype.updateDocumentTitle = function() {
        document.title = $dataSystem.gameTitle;
    };

    Scene_Splash.prototype.checkPlayerLocation = function() {
        if ($dataSystem.startMapId === 0) {
            throw new Error('Player\'s starting position is not set');
        }
    };

})();


code:
//=============================================================================
// Mano_SymbolCommonEventCall.js
// ----------------------------------------------------------------------------
// Copyright (c) 2017-2017 Sigureya
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// [Twitter]: https://twitter.com/Sigureya/
// [github]:https://github.com/Sigureya/RPGmakerMV
//=============================================================================

/*:
 * @plugindesc マップ上で、1ボタンでコモンイベントを呼び出す機能を追加します。
 *
 *
 * @author しぐれん（魔のささやき）
 *
 * @param commonA
 * @type Struct<CommonDefine>
 * @default {"text":"コマンド名","enabled":"true","enableSwitch":"0","event":"","symbol":"onebuttonA","interrupt":"false","mandatory":"false","keyList":"IO","keycodeList":"[]","padButton":"-1"}
 *
 * @param commonB
 * @type struct<CommonDefine>
 * @default {"text":"コマンド名","enabled":"true","enableSwitch":"0","event":"","symbol":"onebuttonA","interrupt":"false","mandatory":"false","keyList":"IO","keycodeList":"[]","padButton":"-1"}
 *
 * @param commonC
 * @type struct<CommonDefine>
 *
 * @param commonD
 * @type struct<CommonDefine>
 *
 * @param commonE
 * @type struct<CommonDefine>
 *
 * @param commonF
 * @type struct<CommonDefine>
 *
 * @param commonG
 * @type struct<CommonDefine>
 *
 * @param commonH
 * @type struct<CommonDefine>
 *
 * @param debugMode
 * @desc デバッグモードです。
 * 設定ミスがある場合、コンソールにエラー文章を表示します。
 * @type boolean
 * @default true
 *
 * @help
 * 1ボタンでコモンイベントを呼び出せるようになります。
 * ゲームパッドにも対応しています。
 *
 * マップ中でのみ有効です。
 * Aから順に呼び出し判定を行います。
 * 一つでも呼びだされた場合、残りは呼ばれません.
 *
 * 呼び出しのタイミングは、通常のコモンイベントの実行が終了したあとです。
 *
 * ゲームパッドのボタンですが、割り当てはGamepadAPIで調べてください。
 * 16は意図的に割り当て不能にしています。
 * 存在しない場合もあるためです。
 * 12から15は十字キーなので不可。
 * 元から機能が割り当てられている0~5への割り当ては、自己責任でお願いします。
 *
 * Mano_InputConfigよりも上に入れることで、
 * Mano_InputConfig用の設定を自動で用意します。
 *
 * Mano_InputConfigと一緒に入れている状態で動かない場合、
 * オプション画面を開いて初期設定に戻すを選択してください。
 * 解決するかもしれません。
 *
 *
 * ver 2.3 (2018/11/18)
 * 旧方式を使いたいという声があったので、形を変えて復活
 *
 * ver 2.2
 * キーコードの設定方法で、旧型式を完全に削除
 *
 * ver 2.1(2018/03/01) 更新
 * 破壊的変更
 * 割り込み設定のパラメータを追加
 * アクションゲームで使っている方は要注意
 * パラメータのデフォルト値を変更
 * 自分で使っていて、ミスが多発したので
 * ver 2.0(2018/02/01)　更新
 * 破壊的変更
 * キーコードの指定方法を変更　数字キーを押して、動作を確認してください。
 *
 * var 1.0(2017/10/17) 公開
 */

/**
 * TODO:
 * autoExportの無効化機能
 *
 */

/*~struct~CommonDefine:
 * @param text
 * @desc コマンド名称です
 *
 * @param enabled
 * @desc このパラメータがONの時だけ、機能します
 * デバッグ用に機能を無効化する場合を想定しています
 * @type boolean
 * @default true
 *
 * @param enableSwitch
 * @desc 指定したスイッチがONの時だけ、呼びだしを行います。
 * 指定がない場合、チェックしません。
 * @type switch
 * @default 0
 *
 * @param event
 * @desc 呼びだされるコモンイベント
 * @type common_event
 *
 * @param symbol
 * @desc Input.isTriggered()の引数として使われます。
 * 他のプラグインと重複しないような名前を付けてください。
 *
 * @param interrupt
 * @desc 他のイベントが実行されている時に割り込むかを決めます。
 * アクションゲームの場合、trueにすると良いと思います。
 * @on 割り込む
 * @off 割り込まない(入力を無視)
 * @type boolean
 * @default false
 *
 * @param mandatory
 * @desc inputConfigの方で必須指定されたものとして扱います。
 * @type boolean
 * @default false
 *
 *
 * @param keyList
 * @desc キーボードの割り当てです。(半角・大文字)
 * ADと入れればAかDを押したときにイベントを実行します。
 * @type string
 *
 * @param keycodeList
 * @desc キーコードを数字で直接指定します。
 * キーコードについては各自で検索してください。
 * @type number[]
 * @default []
 *
 * @param padButton
 * @desc ゲームパッドの割り当てです
 * カッコ内はツクールのデフォルトでの割り当てです
 * @type select
 * @default -1
 * @option non(割り当てなし)
 * @value -1
 * @type select
 * @option button6(L2)
 * @value 6
 * @option button7(R2)
 * @value 7
 * @option button8(select)
 * @value 8
 * @option button9(start)
 * @value 9
 * @option button10
 * @value 10
 * @option button11
 * @value 11
 * @option button0(ok/決定)
 * @value 0
 * @option button1(cancel/キャンセル)
 * @value 1
 * @option button2(shift/ダッシュ)
 * @value 2
 * @option button3(menu/メニュー)
 * @value 3
 * @option button4(pageup)
 * @value 4
 * @option button5(pagedown)
 * @value 5
 *
 */

var MA_InputSymbols =MA_InputSymbols||[];

var Mano_OneButtonCommonEventCall = (function () {
    'use strict';

class MA_OneButtonCommonEvent {
    /**
     * @param {Number} settingId
     */
    constructor(settingId) {
        this._settingId = settingId;
        this._interpreter = null;
        this.refresh();
    }
    refresh() {
        const def = this.mySetting();
        if(!def){
            this._interpreter =null;
            return;
        }

        if (!this._interpreter) {
            this._interpreter = new Game_Interpreter();
        }
    }
    /**
     * @return {RPG.Event}
     */
    event() {
        const eventId = this.mySetting().eventId;
        return $dataCommonEvents[eventId];
    }
    commonEventId(){
        return this._commonEventId;
    }
    /**
     * @return {RPG.EventCommand[]}
     */
    list() {
        return this.event().list;
    }

    get switchId(){
        return this.mySetting().enableSwitch;
    }
    isSwitchOk() {
        const switchId =this.switchId;
        return switchId === 0 || $gameSwitches.value(switchId);
    }
    isCallOK() {
        const def = this.mySetting();
        if (!Input.isTriggered(def.symbol)) {
            return false;
        }
        return (!SceneManager.isSceneChanging())
            && (!this._interpreter.isRunning())
            && (def.interrupt || !$gameMap.isEventRunning())
            && this.isSwitchOk();
    }
    update() {
        if (this._interpreter) {
            if (this.isCallOK()) {
                this._interpreter.setup(this.list());
            }
            this._interpreter.update();
        }
    }

    onLoad(){
        this.refresh();
    }

    mySetting(){
        return setting.eventList[this._settingId];
    }

    settingId(){
        return this._settingId;
    }
}

window[MA_OneButtonCommonEvent.name] = MA_OneButtonCommonEvent;

const setting= (function(){

    /**
     * @return {Number[]}
     * @param {String} text
     */
    function parseNumbers(text){
        if(!text){
            return [];
        }
        const obj = JSON.parse(text);
        if(!obj.map){
            return [];
        }

        return obj.map(function(v){return Number(v);});
    }

    const params =PluginManager.parameters('Mano_OneButtonCommonEventCall')
    const isDebug = Utils.isOptionValid("test") && (params.isDebug==='true');
    function fetchCommonEvent(CommonDefine){
         if(!CommonDefine){
             return null;
         }
        const obj =JSON.parse(CommonDefine);
        const enabled=(obj.enabled==='true');

        if(!enabled){
            // if(isDebug){
            //     console.log("無効だから無視したよ");
            // }
            return null;
        }
        const eventId_ = Number(obj.event);
        if(!(eventId_>0)){
            if(isDebug){
               console.log("イベント番号が不正だからやめたよ")
            }
            return null;
        }
        if(!obj.symbol){
            if(isDebug){
               console.log("シンボルが設定されてないよ");
            }
            return null;
        }

        return {
            enableSwitch:Number(obj.enableSwitch ||0 ),
            symbol:String(obj.symbol),
            text:String(obj.text),
            eventId:eventId_,
            keyList:String(obj.keyList),
            keycodeList:parseNumbers(obj.keycodeList),
            padButtonNumber:Number(obj.padButton),
            mandatory:(obj.mandatory==='true'),
            interrupt:(obj.interrupt==='true'),
        };
    }
    function createCommonEventList(params){
        return [
            fetchCommonEvent(params.commonA),
            fetchCommonEvent(params.commonB),
            fetchCommonEvent(params.commonC),
            fetchCommonEvent(params.commonD),
            fetchCommonEvent(params.commonE),
            fetchCommonEvent(params.commonF),
            fetchCommonEvent(params.commonG),
            fetchCommonEvent(params.commonH),
        ];//.filter(function(e){return !!e});
    }
    const result= {
        eventList:createCommonEventList(params),
        isDebug : isDebug,
    };
    return result
})();

(function(){

    /**
     * @param {Number} keycode
     * @param {String} symbol
     */
    function setKeySymbol(keycode,symbol){
        const preDef =Input.keyMapper[keycode ];
        if(preDef){
//            console.log("上書き警告("+keycode+"):"+preDef+"を"+symbol+"に上書きしようとしています");
        }
//        console.log("keycode:"+keycode+"に"+symbol);
        Input.keyMapper[keycode ] =symbol;
        console.log(Input.keyMapper[keycode ]);
    }

    setting.eventList.forEach(function(data){
        if(!data){return;}

        const keyListLen = data.keyList.length;
        for(var i=0; i < keyListLen; ++i){
            setKeySymbol( data.keyList.charCodeAt(i)  ,data.symbol);
        }

        for (const keycode of data.keycodeList) {
            setKeySymbol(keycode,data.symbol);
        }

        if( (  data.padButtonNumber)>=0){
//            console.log("button"+data.padButtonNumber+"="+data.symbol);
            Input.gamepadMapper[ data.padButtonNumber]=data.symbol;
        }

        MA_InputSymbols.push({
            mandatory:data.mandatory,
            text:data.text,
            symbol:data.symbol,
        });
    });
})();

function createOneButtonEvents2(){
   return setting.eventList.map(function(e,index){
       const result = new MA_OneButtonCommonEvent(index);
       return result;
   });
}
const Game_Map_initialize=Game_Map.prototype.initialize;
Game_Map.prototype.initialize =function(){
    Game_Map_initialize.apply(this,arguments);
    this.initOneButtonEvents();
};

Game_Map.prototype.initOneButtonEvents =function(){
    if(!this._oneButtonEvents){
        this._oneButtonEvents =createOneButtonEvents2();
    }
};

const  Game_Map_updateEvents=Game_Map.prototype.updateEvents;
Game_Map.prototype.updateEvents =function(){
    for (const one of this._oneButtonEvents) {
        if(one){
            one.update();
        }
    }
    Game_Map_updateEvents.call(this);
};

const DataManager_extractSaveContents=DataManager.extractSaveContents;
DataManager.extractSaveContents=function(contents){
    DataManager_extractSaveContents.call(this,contents);
    $gameMap.initOneButtonEvents();
    for (const iterator of $gameMap._oneButtonEvents) {
        iterator.onLoad();
    }
};

return {
    Event:MA_OneButtonCommonEvent,
};

})();


code:
// --------------------------------------------------------------------------
//
// MapNameinSaveData.js
//
// Copyright (c) kotonoha*
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
//
// 2016/06/13 ver1.0 プラグイン公開
//
// --------------------------------------------------------------------------
/*:
 * @plugindesc セーブデータ上に現在マップ名を載せるプラグイン
 * @author kotonoha*
 * @help セーブデータ上に現在マップの表示名を載せるプラグインです。
 *
 */

(function() {

	DataManager.makeSavefileInfo = function() {
	    var info = {};
	    info.globalId   = this._globalId;
		info.title      = $dataSystem.gameTitle;
		info.mapname    = $gameMap.displayName();
	    info.characters = $gameParty.charactersForSavefile();
	    info.faces      = $gameParty.facesForSavefile();
	    info.playtime   = $gameSystem.playtimeText();
	    info.timestamp  = Date.now();
	    return info;
	};

	Window_SavefileList.prototype.drawContents = function(info, rect, valid) {
	    var bottom = rect.y + rect.height;
	    if (rect.width >= 420) {
	        this.drawGameMapName(info, rect.x + 192, rect.y, rect.width - 192);
	        if (valid) {
	            this.drawPartyCharacters(info, rect.x + 220, bottom - 4);
	        }
	    }
	    var lineHeight = this.lineHeight();
	    var y2 = bottom - lineHeight;
	    if (y2 >= lineHeight) {
	        this.drawPlaytime(info, rect.x + 190, rect.y, rect.width - 192);
	    }
	};

	Window_SavefileList.prototype.drawGameMapName = function(info, x, y, width) {
	    if (info.mapname) {
	        this.drawText(info.mapname, x, y, width);
	    }
	};

})();


code:
//=============================================================================
// MenuCallCommon.js
//=============================================================================

/*:
 * @plugindesc Xボタンorマウスの右クリックでメニュー画面を開くかわりにコモンイベントを動作させるプラグイン
 * @author のん Twitter : non_non_cha
 *
 * @param ComEvent
 * @desc 開くためのコモンイベント
 * @default 1
 *
 * @param ComCloseEvent
 * @desc 閉じるためのコモンイベント
 * @default 1
 *
 * @param ComSwitch
 * @desc 開閉するために使うスイッチ番号
 * @default 1
 *
 * @help
 *
 * Xボタンorマウスの右クリックでメニュー画面を
 * 開くかわりにコモンイベントを動作させるプラグイン
 * 自作メニューとか作成したい場合にすごく便利。
 * 閉じたいときはスイッチをONに。
 * そうじゃない場合はOFFにしてください。
 * メニュー→アイテムの時のようなメニューからサブメニューに転移するときは
 * メニュー禁止を押してもらえればいけるはず。
 */

(function() {

  var parameters = PluginManager.parameters('MenuCallCommon');
	var Noncha_ComEvent = Number(parameters['ComEvent'] || 1);
  var Noncha_ComCloseEvent = Number(parameters['ComCloseEvent'] || 1);
  var Noncha_ComSwitch = Number(parameters['ComSwitch'] || 1);

Scene_Map.prototype.updateCallMenu = function() {
    if (this.isMenuEnabled()) {
        if (this.isMenuCalled()) {
            this.menuCalling = true;
        }
        if (this.menuCalling && !$gamePlayer.isMoving()) {
            if(!$gameSwitches._data[Noncha_ComSwitch] == true){
              $gameTemp.reserveCommonEvent(Noncha_ComEvent);
              this.menuCalling = false;
            }else if(!$gameSwitches._data[Noncha_ComSwitch] == false){
              $gameTemp.reserveCommonEvent(Noncha_ComCloseEvent);
              this.menuCalling = false;
            }
        }
    } else {
        this.menuCalling = false;
    }
};

})();


code:
/*=============================================================================
 MessageAutoReplace.js
----------------------------------------------------------------------------
 (C)2022 Triacontane
 This software is released under the MIT License.
 http://opensource.org/licenses/mit-license.php
----------------------------------------------------------------------------
 Version
 1.0.0 2022/04/05 初版
----------------------------------------------------------------------------
 [Blog]   : https://triacontane.blogspot.jp/
 [Twitter]: https://twitter.com/triacontane/
 [GitHub] : https://github.com/triacontane/
=============================================================================*/

/*:
 * @plugindesc メッセージ自動置換プラグイン
 * @author トリアコンタン
 *
 * @param replaceList
 * @text 置換リスト
 * @desc すべての『文章の表示』の内容を自動で置換するリストです。
 * @default []
 * @type struct<REPLACE>[]
 *
 * @help MessageAutoReplace.js
 *
 * 指定されたパラメータに基づいて『文章の表示』テキストを自動置換します。
 * 特定の文字列に対して制御文字による装飾やフォントサイズの変更、修正などを
 * 一括で行う場合などに使用できます。
 * 置換条件スイッチも指定できるので状況に応じた使い分けも可能です。
 *
 * 正規表現を使った高度な置換も可能です。
 * 後方参照を使う場合は、置換後のテキストに%1, %2...を指定します。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

/*~struct~REPLACE:
 *
 * @param targetText
 * @text 置換対象テキスト
 * @desc 指定したテキストに一致する文字列を置換後のテキストに置き換えます。
 * @default
 * @type string
 *
 * @param text
 * @text 置換後のテキスト
 * @desc 置き換え後のテキストです。
 * @default
 * @type string
 *
 * @param switchId
 * @text 条件スイッチ
 * @desc 指定したスイッチがONのときのみ置換されます。指定が無い場合、常に追加されます。
 * @default 0
 * @type switch
 *
 */

(() => {
    'use strict';

    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('MessageAutoReplace');
    if (!param.replaceList) {
        param.replaceList = [];
    }

    var _Game_Message_allText = Game_Message.prototype.allText;
    Game_Message.prototype.allText = function() {
        return this.applyTextReplace(_Game_Message_allText.apply(this, arguments))
    };

    Game_Message.prototype.applyTextReplace = function(text) {
        param.replaceList.forEach(function(item) {
            if (item.switchId && !$gameSwitches.value(item.switchId)) {
                return;
            }
            const regExp = new RegExp(item.targetText, 'g');
            text = text.replace(regExp, function() {
                const params = Array.from(arguments).slice(1);
                return item.text.format.apply(item.text, params);
            });
        });
        return text;
    };
})();


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

/*:
 * @plugindesc MessageFontChangePlugin
 * @author triacontane
 *
 * @param Font1
 * @desc 1番のフォントセットです。
 * @default ヒラギノゴシック ProN W3,Hiragino Gothic ProN,ＭＳ Ｐゴシック,MS PGothic
 *
 * @param Font2
 * @desc 2番のフォントセットです。
 * @default ヒラギノ明朝 ProN W3,Hiragino Mincho ProN,ＭＳ Ｐ明朝,MS PMincho
 *
 * @param Font3
 * @desc 3番のフォントセットです。
 * @default
 *
 * @param Font4
 * @desc 4番のフォントセットです。
 * @default
 *
 * @param Font5
 * @desc 5番のフォントセットです。
 * @default
 *
 * @param DefaultFont
 * @desc デフォルトで使用されるフォント番号です。(1-5)
 * @default 0
 *
 * @help 文章の表示で使用されるフォントを一時的に変更します。
 * fontsフォルダに入っているものではなく、ユーザ環境にインストール
 * されているフォントから選択されるのでロードの必要はありません。
 *
 * 使用するフォントはパラメータで指定してください。(最大5つまで)
 * フォントは複数指定が可能です。カンマ(,)で区切ってください。
 * 複数指定した場合は順番に存在チェックして見付かり次第使用します。
 * 全て見付からなかった場合は、通常のフォントが使用されます。
 *
 * 文章の表示中に以下の制御文字を指定してください。
 * \fc[1] # 指定した番号のフォントを候補として使用する
 * \fc[0] # フォント指定をデフォルトに戻す
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * This plugin is released under the MIT License.
 */
/*:ja
 * @plugindesc メッセージフォント変更プラグイン
 * @author トリアコンタン
 *
 * @param フォント1
 * @desc 1番のフォントセットです。
 * @default ヒラギノゴシック ProN W3,Hiragino Gothic ProN,ＭＳ Ｐゴシック,MS PGothic
 *
 * @param フォント2
 * @desc 2番のフォントセットです。
 * @default ヒラギノ明朝 ProN W3,Hiragino Mincho ProN,ＭＳ Ｐ明朝,MS PMincho
 *
 * @param フォント3
 * @desc 3番のフォントセットです。
 * @default
 *
 * @param フォント4
 * @desc 4番のフォントセットです。
 * @default
 *
 * @param フォント5
 * @desc 5番のフォントセットです。
 * @default
 *
 * @param デフォルトフォント
 * @desc デフォルトで使用されるフォント番号です。0を指定するとデフォルトフォンが未指定になります。
 * @default 0
 *
 * @help 文章の表示で使用されるフォントを一時的に変更します。
 * fontsフォルダに入っているものではなく、ユーザ環境にインストール
 * されているフォントから選択されるのでロードの必要はありません。
 *
 * 使用するフォントはパラメータで指定してください。(最大5つまで)
 * フォントは複数指定が可能です。カンマ(,)で区切ってください。
 * 複数指定した場合は順番に存在チェックして見付かり次第使用します。
 * 全て見付からなかった場合は、通常のフォントが使用されます。
 *
 * 文章の表示中に以下の制御文字を指定してください。
 * \fc[1] # 指定した番号のフォントを候補として使用する
 * \fc[0] # フォント指定をデフォルトに戻す
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function() {
    'use strict';
    var pluginName    = 'MessageFontChange';
    var setting       = {
        fontChangeCode: 'FC',
    };

    var getParamString = function(paramNames) {
        var value = getParamOther(paramNames);
        return value === null ? '' : value;
    };

    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 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 paramFonts = {};
    for (var i = 1; i < 6; i++) {
        paramFonts[i] = getParamString(['Font' + i, 'フォント' + i]);
    }
    var paramDefaultFont = getParamNumber(['DefaultFont', 'デフォルトフォント'], 0, 5);

    var _Window_Message_processEscapeCharacter      = Window_Message.prototype.processEscapeCharacter;
    Window_Message.prototype.processEscapeCharacter = function(code, textState) {
        switch (code) {
            case setting.fontChangeCode:
                this.changeFontFace(this.obtainEscapeParam(textState));
                break;
            default:
                _Window_Message_processEscapeCharacter.apply(this, arguments);
        }
    };

    Window_Message.prototype.changeFontFace = function(fontIndex) {
        var fonts = paramFonts[fontIndex];
        this.contents.fontFace = (fonts ? fonts + ',' : '') + this.standardFontFace();
    };

    var _Window_Message_standardFontFace = Window_Message.prototype.standardFontFace;
    Window_Message.prototype.standardFontFace = function() {
        var fonts = paramFonts[paramDefaultFont];
        return (fonts ? fonts + ',' : '') + _Window_Message_standardFontFace.apply(this, arguments);
    };
})();


code:
//=============================================================================
// MessageSelectPicture.js
// ----------------------------------------------------------------------------
// (C) 2016 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.2.2 2019/09/29 ピクチャ選択と無関係な選択肢を選択後に、ピクチャ選択肢のコマンドを実行すると
//                  以前に選択した選択肢の番号に対応するピクチャが一瞬表示される問題を修正
// 1.2.1 2019/04/07 1.2.0で選択肢のインデックスが1つずれていた問題を修正
// 1.2.0 2019/04/07 複数のピクチャを選択肢に関連づけられる機能を追加
// 1.1.1 2017/05/27 競合の可能性のある記述（Objectクラスへのプロパティ追加）をリファクタリング
// 1.1.0 2016/02/20 選択肢拡張プラグイン（MPP_ChoiceEX.js）に対応
// 1.0.2 2016/01/24 マウス操作でピクチャが更新されない問題を修正
// 1.0.1 2016/01/24 起動しないバグ修正(笑)
// 1.0.0 2016/01/23 初版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc 選択肢のピクチャ表示プラグイン
 * @author トリアコンタン
 *
 * @help イベントコマンド「選択肢の表示」で選択肢にカーソルを合わせた際に
 * 選択肢に対応するピクチャを表示するようにします。
 *
 * あらかじめ不透明度0でピクチャを表示したうえで
 * プラグインコマンドを実行して、関連づけを指定してください。
 *
 * 選択肢を決定後、プラグイン側でピクチャを非表示にすることはないので
 * 自由にイベントコマンドで操作してください。
 *
 * プラグインコマンド詳細
 *  イベントコマンド「プラグインコマンド」から実行。
 *  （パラメータの間は半角スペースで区切る）
 *
 * 選択肢ピクチャ設定 or
 * MSP_SET [ピクチャ番号] [選択肢#(1-6)]
 * 　選択肢の番号と表示するピクチャ番号とを関連づけます。
 * 　関連づけは、選択肢を決定した時点で解除されます。
 * 　複数のピクチャを選択肢に関連づけたい場合は、その分コマンドを実行してください。
 *
 * 例：選択肢ピクチャ設定 1 1
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function() {
    'use strict';

    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 (text == null) text = '';
        var win = SceneManager._scene._windowLayer.children[0];
        return win ? win.convertEscapeCharacters(text) : text;
    };

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

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

    Game_Interpreter.prototype.pluginCommandMessageSelectPicture = function(command, args) {
        switch (getCommandName(command)) {
            case '選択肢ピクチャ設定' :
            case 'MSP_SET':
                var index = getArgNumber(args[1], 1) - 1;
                var pictureId = getArgNumber(args[0], 1, $gameScreen.maxPictures());
                $gameMessage.setSelectPictureId(index, pictureId);
                break;
        }
    };

    var _Game_Message_initialize      = Game_Message.prototype.initialize;
    Game_Message.prototype.initialize = function() {
        _Game_Message_initialize.apply(this, arguments);
        this.clearSelectPictures();
    };

    Game_Message.prototype.setSelectPictureId = function(index, pictureId) {
        this._selectPictures.push({index: index, pictureId: pictureId});
    };

    Game_Message.prototype.clearSelectPictures = function() {
        this._selectPictures = [];
    };

    Game_Message.prototype.getSelectPictures = function() {
        return this._selectPictures;
    };

    var _Game_Message_onChoice      = Game_Message.prototype.onChoice;
    Game_Message.prototype.onChoice = function(n) {
        _Game_Message_onChoice.apply(this, arguments);
        this.clearSelectPictures();
    };

    Game_Picture.prototype.setOpacity = function(value) {
        this._opacity = value;
    };

    var _Window_ChoiceList_update      = Window_ChoiceList.prototype.update;
    Window_ChoiceList.prototype.update = function() {
        _Window_ChoiceList_update.apply(this, arguments);
        if (this.isOpen()) {
            this.updateSelectPicture();
        }
    };

    Window_ChoiceList.prototype.updateSelectPicture = function() {
        $gameMessage.getSelectPictures().forEach(function(data) {
            var picture = $gameScreen.picture(data.pictureId);
            if (!picture) {
                return;
            }
            picture.setOpacity(data.index === this.index() ? 255 : 0);
        }, this);
    };
})();