code:
//=============================================================================
// MapNameExtend.js
// ----------------------------------------------------------------------------
// (C) 2017 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.3.0 2022/11/13 同じマップ名を連続して表示しないようにする設定を追加
// 1.2.1 2022/01/14 表示遅延を設定しかつ背景画像を指定したとき、背景画像がマップ名表示前に表示されてしまう問題を修正
// 1.2.0 2019/11/18 総フレーム数にInfinityを設定した場合の挙動を自然なものに変更
//                  遅延機能をイベントコマンドの「マップ名表示」をONにした場合にも適用されるよう修正
// 1.1.0 2019/11/17 マップ名表示を指定したフレーム数だけ遅延させる機能を追加
// 1.0.1 2017/04/06 イベントテストを実行すると、数秒経過後にエラーが発生する問題の修正
// 1.0.0 2017/03/20 MapNameWindow.jsから流用作成
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc MapNameWindowExtendPlugin
 * @author triacontane
 *
 * @param PositionX
 * @desc X座標を指定する場合は入力してください。
 * @default 0
 * @type number
 *
 * @param PositionY
 * @desc Y座標を指定する場合は入力してください。
 * @default 0
 * @type number
 *
 * @param MoveXInFade
 * @desc フェードイン、アウト中に移動するX方向のピクセル数です。
 * @default 0
 * @type number
 *
 * @param MoveYInFace
 * @desc フェードイン、アウト中に移動するY方向のピクセル数です。
 * @default 0
 * @type number
 *
 * @param AllDuration
 * @desc マップ名が表示されて消えるまでの総フレーム数です。ずっと表示させたい場合「Infinity」と入力してください。
 * @default 300
 * @type number
 * @min 1
 *
 * @param FadeInSpeed
 * @desc マップ名のフェードイン速度です。（デフォルト16）
 * @default 0
 * @type number
 *
 * @param ViewDelay
 * @desc マップ名の表示を指定したフレーム数だけ遅らせます。
 * @default 0
 * @type number
 *
 * @param Width
 * @desc 横幅を指定する場合は入力してください。
 * @default 0
 * @type number
 *
 * @param ShowWindow
 * @desc マップ名表示をウィンドウ化します。
 * @default false
 * @type boolean
 *
 * @param BackgroundImage
 * @desc 専用の背景画像(img/pictures)のファイル名を指定します。拡張子不要。
 * @default
 * @require 1
 * @dir img/pictures/
 * @type file
 *
 * @param ShowRealName
 * @desc エディタの「表示名」が未指定の場合、ツリー表示される「実名」でマップ名を表示します。
 * @default false
 * @type boolean
 *
 * @param UseControlCharacter
 * @desc マップ名表示に制御文字を使用可能にします。マップ名の表示幅を自動調整する機能は無効になり、強制左揃えになります。
 * @default false
 * @type boolean
 *
 * @help マップ名表示機能を拡張します。
 * MapNameWindow.jsの上位互換プラグインです。
 *
 * 機能一覧
 * 1. マップ背景をウィンドウ化したり、任意のピクチャに変えたりできます。
 * 2. 表示位置や移動方法、フェード速度などを細かく指定できます。
 * 3. マップ名に制御文字を使えるようになります。
 * 4. 二つの以上のマップ名を連続で表示できます。
 * 5. マップ名をエディタでツリー表示される「実名」で表示できます。
 *
 * 4.の機能を利用する場合、マップ名のメモ欄に以下の通り入力してください。
 * <MNE_MapName2:aaa>  # マップ名の表示後に「aaa」が追加表示されます。
 * <MNE_マップ名2:aaa> # 同上
 * ※ 3つ以上表示させたい場合は「<MNE_MapName3:aaa>」で表示できます。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * This plugin is released under the MIT License.
 */
/*:ja
 * @plugindesc マップ名表示拡張プラグイン
 * @author トリアコンタン
 *
 * @param X座標
 * @desc X座標を指定する場合は入力してください。
 * @default 0
 * @type number
 *
 * @param Y座標
 * @desc Y座標を指定する場合は入力してください。
 * @default 0
 * @type number
 *
 * @param フェード中移動X
 * @desc フェードイン、アウト中に移動するX方向のピクセル数です。
 * @default 0
 * @type number
 *
 * @param フェード中移動Y
 * @desc フェードイン、アウト中に移動するY方向のピクセル数です。
 * @default 0
 * @type number
 *
 * @param 総フレーム数
 * @desc マップ名が表示されて消えるまでの総フレーム数です。ずっと表示させたい場合「Infinity」と入力してください。
 * @default 300
 * @type number
 * @min 1
 *
 * @param フェードイン速度
 * @desc マップ名のフェードイン速度です。（デフォルト16）
 * @default 0
 * @type number
 *
 * @param 表示遅延
 * @desc マップ名の表示を指定したフレーム数だけ遅らせます。
 * @default 0
 * @type number
 *
 * @param 横幅
 * @desc 横幅を指定する場合は入力してください。
 * @default 0
 * @type number
 *
 * @param ウィンドウ表示
 * @desc マップ名表示をウィンドウ化します。
 * @default false
 * @type boolean
 *
 * @param 背景画像
 * @desc 専用の背景画像(img/pictures)のファイル名を指定します。拡張子不要。
 * @default
 * @require 1
 * @dir img/pictures/
 * @type file
 *
 * @param 実名表示
 * @desc エディタの「表示名」が未指定の場合、ツリー表示される「実名」でマップ名を表示します。
 * @default false
 * @type boolean
 *
 * @param 制御文字使用
 * @desc マップ名表示に制御文字を使用可能にします。マップ名の表示幅を自動調整する機能は無効になり、強制左揃えになります。
 * @default false
 * @type boolean
 *
 * @param noSameNameDisplay
 * @text 同じマップ名は出力しない
 * @desc 場所移動時、マップ表示名が移動前のマップと同じ場合はマップ名を出力しません。
 * @default false
 * @type boolean
 *
 * @param 無効タイルセット
 * @desc マップ名を表示しないタイルセットです。複数指定できます。
 * @default
 * @type tileset[]
 *
 * @help マップ名表示機能を拡張します。
 * MapNameWindow.jsの上位互換プラグインです。
 *
 * 機能一覧
 * 1. マップ背景をウィンドウ化したり、任意のピクチャに変えたりできます。
 * 2. 表示位置や移動方法、フェード速度などを細かく指定できます。
 * 3. マップ名に制御文字を使えるようになります。
 * 4. 二つの以上のマップ名を連続で表示できます。
 * 5. マップ名をエディタでツリー表示される「実名」で表示できます。
 *
 * 4.の機能を利用する場合、マップ名のメモ欄に以下の通り入力してください。
 * <MNE_MapName2:aaa>  # マップ名の表示後に「aaa」が追加表示されます。
 * <MNE_マップ名2:aaa> # 同上
 * ※ 3つ以上表示させたい場合は「<MNE_MapName3:aaa>」で表示できます。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function () {
  "use strict";
  var pluginName = "MapNameExtend";
  var metaTagPrefix = "MNE_";

  //=============================================================================
  // ローカル関数
  //  プラグインパラメータやプラグインコマンドパラメータの整形やチェックをします
  //=============================================================================
  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 (parseFloat(value) || 0).clamp(min, max);
  };

  var getParamBoolean = function (paramNames) {
    var value = getParamString(paramNames).toUpperCase();
    return value === "ON" || value === "TRUE";
  };

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

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

  var convertEscapeCharacters = function (text) {
    if (text == null || text === true) text = "";
    var windowLayer = SceneManager._scene._windowLayer;
    return windowLayer
      ? windowLayer.children[0].convertEscapeCharacters(text)
      : text;
  };

  //=============================================================================
  // パラメータの取得と整形
  //=============================================================================
  var param = {};
  param.positionX = getParamNumber(["PositionX", "X座標"]);
  param.positionY = getParamNumber(["PositionY", "Y座標"]);
  param.moveXInFade = getParamNumber(["MoveXInFade", "フェード中移動X"]);
  param.moveYInFace = getParamNumber(["MoveYInFace", "フェード中移動Y"]);
  param.allDuration = getParamNumber(["AllDuration", "総フレーム数"]);
  param.fadeInSpeed = getParamNumber(["FadeInSpeed", "フェードイン速度"]);
  param.width = getParamNumber(["Width", "横幅"]);
  param.showWindow = getParamBoolean(["ShowWindow", "ウィンドウ表示"]);
  param.useControlCharacter = getParamBoolean([
    "UseControlCharacter",
    "制御文字使用",
  ]);
  param.backgroundImage = getParamString(["BackgroundImage", "背景画像"]);
  param.showRealName = getParamBoolean(["ShowRealName", "実名表示"]);
  param.viewDelay = getParamNumber(["ViewDelay", "表示遅延"]);
  param.noSameNameDisplay = getParamBoolean(["noSameNameDisplay"]);

  //=============================================================================
  // ローカル変数
  //=============================================================================
  var local = {};
  local.mapNameIndex = 0;

  //=============================================================================
  // Game_Map
  //  連続マップ表示に対応します。
  //=============================================================================
  var _Game_Map_displayName = Game_Map.prototype.displayName;
  Game_Map.prototype.displayName = function () {
    var index = local.mapNameIndex + 1;
    if (index > 1 && $dataMap.meta) {
      return getMetaValues($dataMap, ["マップ名" + index, "MapName" + index]);
    } else {
      return (
        _Game_Map_displayName.apply(this, arguments) || this.getRealMapName()
      );
    }
  };

  Game_Map.prototype.isSameDisplayName = function () {
    const name = this.displayName();
    const result = this._prevDisplayName === name;
    this._prevDisplayName = this.displayName();
    return result;
  };

  Game_Map.prototype.getRealMapName = function () {
    return param.showRealName && $dataMapInfos[this._mapId]
      ? $dataMapInfos[this._mapId].name
      : "";
  };

  //=============================================================================
  // Window_MapName
  //  表示方法を全体的に拡張します。
  //=============================================================================
  var _Window_MapName_initialize = Window_MapName.prototype.initialize;
  Window_MapName.prototype.initialize = function () {
    _Window_MapName_initialize.apply(this, arguments);
    this._originalX = this.x;
    this._originalY = this.y;
    local.mapNameIndex = 0;
    this.createBackground();
    this.updatePlacementInit();
  };

  Window_MapName.prototype.createBackground = function () {
    if (!param.backgroundImage) return;
    this._backSprite = new Sprite();
    this._backSprite.bitmap = ImageManager.loadPicture(param.backgroundImage);
    this._backSprite.bitmap.addLoadListener(
      function () {
        this._backSprite.x =
          this.windowWidth() / 2 - this._backSprite.width / 2;
        this._backSprite.y =
          this.windowHeight() / 2 - this._backSprite.height / 2;
      }.bind(this)
    );
    this._backSprite.opacity = 0;
    this.addChildToBack(this._backSprite);
  };

  var _Window_MapName_updateFadeIn = Window_MapName.prototype.updateFadeIn;
  Window_MapName.prototype.updateFadeIn = function () {
    if (param.viewDelay > 0 && this.updateDelay()) {
      this._showCount++;
      return;
    }
    var opacity = this.contentsOpacity;
    _Window_MapName_updateFadeIn.apply(this, arguments);
    this.updateOpacity(opacity + param.fadeInSpeed);
    this.updatePlacementInFading(opacity);
  };

  Window_MapName.prototype.flash = function () {
    if (!this.isNeverHide()) {
      return;
    }
    if ($gameMap.isNameDisplayEnabled()) {
      this.open();
      while (this.contentsOpacity < 255) {
        this.updateFadeIn();
      }
    }
    this._showCount = Infinity;
  };

  Window_MapName.prototype.isNeverHide = function () {
    return !isFinite(param.allDuration);
  };

  Window_MapName.prototype.updateDelay = function () {
    this._delayCount = (this._delayCount || 0) + 1;
    return this._delayCount < param.viewDelay;
  };

  var _Window_MapName_updateFadeOut = Window_MapName.prototype.updateFadeOut;
  Window_MapName.prototype.updateFadeOut = function () {
    var opacity = this.contentsOpacity;
    this._delayCount = 0;
    _Window_MapName_updateFadeOut.apply(this, arguments);
    this.updateOpacity(opacity - param.fadeInSpeed);
    this.updatePlacementInFading(opacity);
    if (opacity > 0 && this.contentsOpacity === 0) {
      this.reOpen();
    }
  };

  Window_MapName.prototype.updateOpacity = function (opacity) {
    if (param.fadeInSpeed > 0) {
      this.contentsOpacity = opacity;
    }
    if (this.isWindow()) {
      this.opacity = this.contentsOpacity;
    }
    if (this._backSprite) {
      this._backSprite.opacity = this.contentsOpacity;
    }
  };

  Window_MapName.prototype.updatePlacementInit = function () {
    this.x = param.positionX ? param.positionX : this._originalX;
    this.y = param.positionY ? param.positionY : this._originalY;
  };

  Window_MapName.prototype.updatePlacementInFading = function (oldOpacity) {
    if (oldOpacity !== this.contentsOpacity) {
      this.x += param.moveXInFade || 0;
      this.y += param.moveYInFace || 0;
    }
  };

  var _Window_MapName_drawBackground = Window_MapName.prototype.drawBackground;
  Window_MapName.prototype.drawBackground = function (x, y, width, height) {
    if (this.isWindow() || this._backSprite) return;
    _Window_MapName_drawBackground.apply(this, arguments);
  };

  var _Window_MapName_windowWidth = Window_MapName.prototype.windowWidth;
  Window_MapName.prototype.windowWidth = function () {
    return param.width
      ? param.width
      : _Window_MapName_windowWidth.apply(this, arguments);
  };

  var _Window_MapName_refresh = Window_MapName.prototype.refresh;
  Window_MapName.prototype.refresh = function () {
    _Window_MapName_refresh.apply(this, arguments);
    this.visible = !!$gameMap.displayName();
  };

  var _Window_MapName_open = Window_MapName.prototype.open;
  Window_MapName.prototype.open = function () {
    _Window_MapName_open.apply(this, arguments);
    if (param.allDuration > 0) {
      this._showCount = param.allDuration / 2;
    }
    this.updatePlacementInit();
  };

  var _Window_MapName_hide = Window_MapName.prototype.hide;
  Window_MapName.prototype.hide = function () {
    if (this.isNeverHide()) {
      return;
    }
    _Window_MapName_hide.apply(this, arguments);
  };

  Window_MapName.prototype.reOpen = function () {
    local.mapNameIndex++;
    if ($gameMap.displayName()) {
      this.open();
    } else {
      local.mapNameIndex = 0;
    }
  };

  Window_MapName.prototype.isWindow = function () {
    return param.showWindow;
  };

  var _Window_MapName_drawText = Window_MapName.prototype.drawText;
  Window_MapName.prototype.drawText = function (text, x, y, maxWidth, align) {
    if (param.useControlCharacter) {
      this.drawTextEx(text, x, y);
    } else {
      _Window_MapName_drawText.apply(this, arguments);
    }
  };

  var _Scene_Map_start = Scene_Map.prototype.start;
  Scene_Map.prototype.start = function () {
    _Scene_Map_start.apply(this, arguments);
    if (!this._transfer) {
      this._mapNameWindow.flash();
    }
    if (
      this._transfer &&
      param.noSameNameDisplay &&
      $gameMap.isSameDisplayName()
    ) {
      this._mapNameWindow.close();
    }
  };
})();

repo_name: dazed/translations

license: unknown


code:
//=============================================================================
// MapRapid.js
// ----------------------------------------------------------------------------
// Copyright (c) 2015-2017 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.1.1 2017/08/12 型指定機能に対応
// 1.1.0 2016/01/11 テストプレー時のみ有効にできる設定を追加
//                  すべてのフェードアウト・フェードインを一瞬で行う機能を追加
// 1.0.0 2015/11/12 初版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc マップ高速化プラグイン
 * @author トリアコンタン
 *
 * @param testPlayOnly
 * @desc テストプレー時のみ本プラグインを適用します。
 * @default false
 * @type boolean
 *
 * @param showMessageRapid
 * @desc 制御文字にかかわらずメッセージを一瞬で表示する。
 * @default true
 * @type boolean
 *
 * @param windowOpenRapid
 * @desc ウィンドウの開閉を一瞬で行います。
 * @default true
 * @type boolean
 *
 * @param fadeRapid
 * @desc フェードイン・フェードアウトを一瞬で行います。
 * @default true
 * @type boolean
 *
 * @help マップ上の様々なウェイトを排除してゲームを高速化します。
 * 項目ごとに設定をON/OFFできます。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */
(function () {
  var pluginName = "MapRapid";

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

  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;
  };

  if (getParamBoolean("testPlayOnly") && !Utils.isOptionValid("test")) {
    return;
  }

  //=============================================================================
  // Window_Message
  //  制御文字にかかわらずメッセージを一瞬で表示する。
  //=============================================================================
  if (getParamBoolean("showMessageRapid")) {
    var _Window_Message_updateMessage = Window_Message.prototype.updateMessage;
    Window_Message.prototype.updateMessage = function () {
      this._lineShowFast = true;
      return _Window_Message_updateMessage.call(this);
    };
  }

  //=============================================================================
  // Window_Base
  //  ウィンドウの開閉を一瞬で行います。
  //=============================================================================
  if (getParamBoolean("windowOpenRapid")) {
    var _Window_Base_updateOpen = Window_Base.prototype.updateOpen;
    Window_Base.prototype.updateOpen = function () {
      if (this._opening) {
        this.openness = 255;
      }
      _Window_Base_updateOpen.call(this);
    };

    var _Window_Base_updateClose = Window_Base.prototype.updateClose;
    Window_Base.prototype.updateClose = function () {
      if (this._closing) this.openness = 0;
      _Window_Base_updateClose.call(this);
    };
  }

  //=============================================================================
  // Scene_Base
  //  フェードアウトを一瞬で行います。
  //=============================================================================
  if (getParamBoolean("fadeRapid")) {
    Scene_Base.prototype.fadeSpeed = function () {
      return 1;
    };

    var _Scene_Base_startFadeIn = Scene_Base.prototype.startFadeIn;
    Scene_Base.prototype.startFadeIn = function (duration, white) {
      arguments[0] = 1;
      _Scene_Base_startFadeIn.apply(this, arguments);
    };

    var _Scene_Base_startFadeOut = Scene_Base.prototype.startFadeOut;
    Scene_Base.prototype.startFadeOut = function (duration, white) {
      arguments[0] = 1;
      _Scene_Base_startFadeOut.apply(this, arguments);
    };
  }
})();


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

/*:
 * @plugindesc MenuReturnActorSelectPlugin
 * @author triacontane
 *
 * @help MenuReturnActorSelect.js
 *
 * When returning to the main menu from a
 * menu detail scene (skills, equipment, status),
 * the Focus on the actor selection window
 * instead of the main menu selection.
 *
 * This plugin is released under the MIT License.
 */
/*:ja
 * @plugindesc メニュー詳細画面からアクター選択に戻るプラグイン
 * @author トリアコンタン
 *
 * @help MenuReturnActorSelect.js
 *
 * メニュー詳細画面（スキル、装備、ステータス）からメインメニューに戻ったときに、
 * メインメニュー選択ではなく、アクター選択のウィンドウをフォーカスします。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function () {
  "use strict";

  Scene_Menu._selectPersonal = false;

  var _Scene_Menu_onPersonalOk = Scene_Menu.prototype.onPersonalOk;
  Scene_Menu.prototype.onPersonalOk = function () {
    _Scene_Menu_onPersonalOk.apply(this, arguments);
    Scene_Menu._selectPersonal = true;
  };

  var _Scene_Menu_onPersonalCancel = Scene_Menu.prototype.onPersonalCancel;
  Scene_Menu.prototype.onPersonalCancel = function () {
    _Scene_Menu_onPersonalCancel.apply(this, arguments);
    Scene_Menu._selectPersonal = false;
  };

  var _Scene_Menu_start = Scene_Menu.prototype.start;
  Scene_Menu.prototype.start = function () {
    _Scene_Menu_start.apply(this, arguments);
    if (Scene_Menu._selectPersonal) {
      this._commandWindow.deactivate();
      this.commandPersonal();
    }
  };
})();


code:
//
//  メニューステータス改造 ver1.01
//
// ------------------------------------------------------
// Copyright (c) 2016 Yana
// Released under the MIT license
// http://opensource.org/licenses/mit-license.php
// ------------------------------------------------------
//
// author Yana
//

var Imported = Imported || {};
Imported["MenuStatusR"] = 1.01;
/*:
 * @plugindesc ver1.01/メニュー画面等の簡易ステータス表示を改造します。
 * @author Yana
 *
 * @param 【基本設定】
 * @param FaceWidth
 * @desc フェイスの横幅の数値です。
 * @default 144
 * @type number
 *
 * @param MaxCols
 * @desc ステータス一人当たりの列数です。
 * @default 2
 * @type number
 *
 * @param MaxRows
 * @desc ステータス一人当たりの行数です。
 * @default 3
 * @type number
 *
 * @param MenuStatusFontSize
 * @desc メニューステータスのフォントサイズです。
 * @default 28
 * @type number
 *
 * @param UseSkillStatus
 * @desc スキルのステータス表示にも機能を拡張するかの設定です。
 * true/falseで設定してください。
 * @default true
 * @type boolean
 *
 * @param SkillStatusFontSize
 * @desc スキルステータスのフォントサイズです。
 * @default 28
 * @type number
 *
 * @param
 * @param 【ページの設定】
 * @param Page1
 * @desc 1ページ目に表示する内容です。
 * @default name,lv,states,class,hp,mp
 *
 * @param Page2
 * @desc 2ページ目に表示する内容です。
 * @default atk,def,mat,mdf,agi,luk
 *
 * @param Page3
 * @desc 3ページ目に表示する内容です。
 * @default q1,q2,q3,q4,q5
 *
 * @param Page4
 * @desc 4ページ目に表示する内容です。
 * @default
 *
 * @param Page5
 * @desc 5ページ目に表示する内容です。
 * @default
 *
 * @param Page6
 * @desc 6ページ目に表示する内容です。
 * @default
 *
 * @param Page7
 * @desc 7ページ目に表示する内容です。
 * @default
 *
 * @param Page8
 * @desc 8ページ目に表示する内容です。
 * @default
 *
 * @param Page9
 * @desc 9ページ目に表示する内容です。
 * @default
 *
 * @param Page10
 * @desc 10ページ目に表示する内容です。
 * @default
 *
 * @param
 * @param 【用語の設定】
 * @param EfficacyTexts
 * @desc 有効度などの名称です。
 * @default 有効度,有効度,低下有効度,無効化
 *
 * @param XparamTexts
 * @desc 追加能力値の名称です。
 * @default _hit,_eva,会心率,会心回避,魔法回避,魔法反射,反撃,_hp再生率,_mp再生率,_tp再生率
 *
 * @param SparamTexts
 * @desc 特殊能力値の名称です。
 * @default 狙われ率,防御効果率,回復効果率,薬の知識,_mp消費率,_tpチャージ率,物理ダメージ率,魔法ダメージ率,床ダメージ率,_exp獲得率
 *
 * @help ------------------------------------------------------
 * プラグインコマンド
 * ------------------------------------------------------
 * このプラグインにはプラグインコマンドはありません。
 * ------------------------------------------------------
 * 使い方
 * ------------------------------------------------------
 * プラグインを導入し、プラグインパラメータを設定することで動作します。
 *
 * このプラグインを導入して、Page1～10のうち、2つ以上空白以外に指定してある場合、
 * メニューコマンドがアクティブなときやメニューステータスがアクティブなときに、
 * 左右キーでページの切り替えができるようになります。
 *
 *・項目の設定方法
 * Page1～10に特定のキーワードを指定することで、
 * 好きな順番でパラメータを並べることができます。
 * 使用できるのは以下になります。
 *
 * name→アクターの名前
 * lv→アクターのレベル
 * nickname→アクターの二つ名
 * states→アクターに付与されているステートのアイコン
 * class→アクターのクラス名
 * hp→HP(ゲージ付き)
 * mp→MP(ゲージ付き)
 * tp→TP(ゲージ付き)
 * exp→現在のEXP
 * next→次のレベルまでの残りEXP(ゲージ付き)
 * atk→攻撃力
 * def→防御力
 * mat→魔法攻撃力
 * mdf→魔法防御力
 * agi→敏捷性
 * luk→運
 * hit→命中率
 * eva→回避率
 * cri→クリティカル率
 * mev→魔法回避率
 * mrf→魔法反射率
 * cev→会心回避率
 * cnt→反撃率
 * hrg→HP再生率
 * mrg→MP再生率
 * trg→TP再生率
 * tgr→狙われ率
 * grd→防御効果率
 * rec→回復効果率
 * pha→薬の知識
 * mcr→MP消費率
 * tcr→TPチャージ率
 * pdr→物理ダメージ率
 * mdr→魔法ダメージ率
 * fdr→床ダメージ率
 * exr→経験値獲得率
 * e○→ID○番の属性有効度
 * s○→ID○番のステート有効度
 * d0→最大HP低下の弱体有効度
 * d1→最大MP低下の弱体有効度
 * d2→攻撃力低下の弱体有効度
 * d3→防御力低下の弱体有効度
 * d4→魔法攻撃力低下の弱体有効度
 * d5→魔法防御力低下の弱体有効度
 * d6→敏捷性低下の弱体有効度
 * d7→運低下の弱体有効度
 * q○→アクターの○番目の装備
 * それ以外→そのまま表示(制御文字が使用可能です)
 *
 * ・用語の設定について
 * 用語の設定では以下の記述が対応する用語に置き換えられます。
 * また、上記のキーワードの設定で「それ以外」を指定した場合も、
 * この置き換えが行われます。
 *
 * _hp→用語で設定したHPの名称(略称)
 * _mp→用語で設定したMPの名称(略称)
 * _tp→用語で設定したTPの名称(略称)
 * _lv→用語で設定したLvの名称(略称)
 * _exp→用語で設定した経験値の名称(略称)
 * _hit→用語で設定した命中率の名称
 * _eva→用語で設定した回避率の名称
 * _id→アクターのID
 * _profile1→アクターのプロフィール1行目
 * _profile2→アクターのプロフィール2行目
 * _note○→アクターのメモ○行目
 * _eval<○○○>→○○○をevalで判定
 *
 * ------------------------------------------------------
 * 利用規約
 * ------------------------------------------------------
 * 当プラグインはMITライセンスで公開されています。
 * 使用に制限はありません。商用、アダルト、いずれにも使用できます。
 * 二次配布も制限はしませんが、サポートは行いません。
 * 著作表示は任意です。行わなくても利用できます。
 * 要するに、特に規約はありません。
 * バグ報告や使用方法等のお問合せはネ実ツクールスレ、または、Twitterにお願いします。
 * https://twitter.com/yanatsuki_
 * 素材利用は自己責任でお願いします。
 * ------------------------------------------------------
 * 更新履歴:
 * ver1.01:180410
 * ステータスのページが1つの場合にも左右キーの入力でカーソル音が鳴っていたバグを修正。
 * プラグインパラメータの仕様を1.5.0に更新。
 * ver1.00:
 * 公開
 */

(function () {
  ////////////////////////////////////////////////////////////////////////////////////

  var parameters = PluginManager.parameters("MenuStatusR");
  var faceWidth = Number(parameters["FaceWidth"] || 144);
  var maxCols = Number(parameters["MaxCols"] || 2);
  var maxRows = Number(parameters["MaxRows"] || 3);
  var efficacyTexts = parameters["EfficacyTexts"].split(",");
  var xparamTexts = parameters["XparamTexts"].split(",");
  var sparamTexts = parameters["SparamTexts"].split(",");
  var menuStatusFontSize = Number(parameters["MenuStatusFontSize"]);
  var skillStatusFontSize = Number(parameters["SkillStatusFontSize"]);
  var useSkillStatus = parameters["UseSkillStatus"] === "true";
  var pages = [];

  var n = 0;
  for (var i = 0; i < 10; i++) {
    if (parameters["Page" + (i + 1)]) {
      pages[n] = parameters["Page" + (i + 1)].split(",");
      n++;
    }
  }

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

  // 再定義
  var __WBase_drawActorSimpleStatus =
    Window_Base.prototype.drawActorSimpleStatus;
  Window_Base.prototype.drawActorSimpleStatus = function (actor, x, y, width) {
    if (useSkillStatus) {
      if (this._pageIndex === undefined) this.initPages();
      var rect = { x: x, y: y, width: width, height: this.contentsHeight() };
      this.drawStatusContents(actor, rect);
    } else {
      __WBase_drawActorSimpleStatus.call(this, actor, x, y, width);
    }
  };

  Window_Base.prototype.initPages = function () {
    this._pageIndex = 0;
    this._pageMax = pages.length;
  };

  Window_Base.prototype.paramAry = function () {
    return [
      "hp",
      "mp",
      "atk",
      "def",
      "mat",
      "mdf",
      "agi",
      "luk",
      "hit",
      "eva",
      "cri",
      "mev",
      "mrf",
      "cev",
      "cnt",
      "hrg",
      "mrg",
      "trg",
      "tgr",
      "grd",
      "rec",
      "pha",
      "mcr",
      "tcr",
      "pdr",
      "mdr",
      "fdr",
      "exr",
    ];
  };

  Window_Base.prototype.drawStatusContents = function (actor, rect) {
    var x = rect.x;
    var y = rect.y + rect.height / 2 - this.lineHeight() * (maxRows / 2);
    var width = (rect.width - this.textPadding()) / maxCols - 12;
    var height = this.lineHeight();
    for (var i = 0, max = pages[this._pageIndex].length; i < max; i++) {
      var xx = x + (width + 12) * Math.floor(i / maxRows);
      var yy = y + height * Math.floor(i % maxRows);
      var code = pages[this._pageIndex][i];
      switch (code) {
        case "name":
          this.drawActorName(actor, xx, yy);
          break;
        case "lv":
          this.drawActorLevel(actor, xx, yy);
          break;
        case "states":
          this.drawActorIcons(actor, xx, yy, width);
          break;
        case "class":
          this.drawActorClass(actor, xx, yy, width);
          break;
        case "nickname":
          this.drawActorNickname(actor, xx, yy, width);
          break;
        case "hp":
          this.drawActorHp(actor, xx, yy, width);
          break;
        case "mp":
          this.drawActorMp(actor, xx, yy, width);
          break;
        case "tp":
          this.drawActorTp(actor, xx, yy, width);
          break;
        case "exp":
          this.drawLineActorExp(actor, xx, yy, width);
          break;
        case "next":
          this.drawLineActorNextExp(actor, xx, yy, width);
          break;
        default:
          this.drawLineParameter(actor, code, xx, yy, width);
      }
    }
  };

  Window_Base.prototype.drawLineParameter = function (
    actor,
    code,
    xx,
    yy,
    width
  ) {
    var n = this.paramAry().indexOf(code);
    this.resetFontSettings();
    if (n === -1) {
      if (code.match(/^q(\d+)/i)) {
        var index = RegExp.$1;
        var w = this.standardFontSize() + 4 + 2;
        var equip = actor.equips()[index - 1];
        if (equip) {
          this.drawIcon(
            equip.iconIndex,
            xx,
            yy + (this.lineHeight() - this.standardFontSize()) / 2 - 2
          );
          this.drawText(equip.name, xx + w, yy, width - w);
        }
      } else if (code.match(/^e(\d+)/i)) {
        var id = Number(RegExp.$1);
        var text = $dataSystem.elements[id];
        text += efficacyTexts[0];
        this.changeTextColor(this.systemColor());
        this.drawText(text, xx, yy, (width * 2) / 3);
        this.changeTextColor(this.normalColor());
        this.drawText(
          Math.floor(actor.elementRate(id) * 100) + "%",
          xx,
          yy,
          width,
          "right"
        );
      } else if (code.match(/^s(\d+)/i)) {
        var id = Number(RegExp.$1);
        var text = $dataStates[id].name;
        text += efficacyTexts[1];
        this.changeTextColor(this.systemColor());
        this.drawText(text, xx, yy, (width * 2) / 3);
        this.changeTextColor(this.normalColor());
        this.drawText(
          Math.floor(actor.stateRate(id) * 100) + "%",
          xx,
          yy,
          width,
          "right"
        );
      } else if (code.match(/^d(\d+)/i)) {
        var id = Number(RegExp.$1);
        var text = TextManager.param(id);
        text += efficacyTexts[2];
        this.changeTextColor(this.systemColor());
        this.drawText(text, xx, yy, (width * 2) / 3);
        this.changeTextColor(this.normalColor());
        this.drawText(
          Math.floor(actor.debuffRate(id) * 100) + "%",
          xx,
          yy,
          width,
          "right"
        );
      } else {
        var text = this.replaceText(actor, code);
        if (text) this.drawTextEx(text, xx, yy);
      }
    } else {
      this.changeTextColor(this.systemColor());
      if (n < 8) {
        this.drawText(TextManager.param(n), xx, yy, 108);
        this.changeTextColor(this.normalColor());
        this.drawText(actor.param(n), xx, yy, width, "right");
      } else if (n < 18) {
        n = n - 8;
        var text = this.replaceText(actor, xparamTexts[n]);
        this.drawText(text, xx, yy, 108);
        this.changeTextColor(this.normalColor());
        this.drawText(
          Math.floor(actor.xparam(n) * 100) + "%",
          xx,
          yy,
          width,
          "right"
        );
      } else {
        n = n - 18;
        var text = this.replaceText(actor, sparamTexts[n]);
        this.drawText(text, xx, yy, 108);
        this.changeTextColor(this.normalColor());
        this.drawText(
          Math.floor(actor.sparam(n) * 100) + "%",
          xx,
          yy,
          width,
          "right"
        );
      }
    }
  };

  Window_Base.prototype.replaceText = function (actor, text) {
    var desc = actor.actor().profile.split("\n");
    var notes = actor.actor().note.split("\n");
    if (!desc[0]) desc[0] = "";
    if (!desc[1]) desc[1] = "";
    text = text.replace(/_id/, actor.actorId());
    if (text.contains("_eval")) {
      text = text.replace(
        /\\V\[(\d+)\]/gi,
        function () {
          return $gameVariables.value(parseInt(arguments[1]));
        }.bind(this)
      );
      text = text.replace(
        /_eval<(.+?)>/,
        function () {
          return eval(arguments[1]);
        }.bind(this)
      );
    }
    text = text.replace(/_hp/, TextManager.hpA);
    text = text.replace(/_mp/, TextManager.mpA);
    text = text.replace(/_tp/, TextManager.tpA);
    text = text.replace(/_lv/, TextManager.levelA);
    text = text.replace(/_exp/, TextManager.expA);
    text = text.replace(/_hit/, TextManager.param(8));
    text = text.replace(/_eva/, TextManager.param(9));
    text = text.replace(/_profile1/, desc[0]);
    text = text.replace(/_profile2/, desc[1]);
    if (text.contains("_note")) {
      for (var i = 0, max = notes.length; i < max; i++) {
        if (!notes[i]) notes[i] = "";
        var r = new RegExp("_note" + (i + 1));
        text = text.replace(r, notes[i]);
      }
    }
    return text;
  };

  Window_Base.prototype.drawLineActorExp = function (actor, x, y, width) {
    var expTotal = TextManager.expTotal.format(TextManager.exp);
    var value1 = actor.currentExp();
    if (actor.isMaxLevel()) {
      value1 = "-----";
    }
    this.changeTextColor(this.systemColor());
    this.contents.fontSize = this.standardFontSize() / 1.5;
    this.drawText(expTotal, x, y, width);
    this.resetTextColor();
    this.contents.fontSize = this.standardFontSize();
    this.drawText(value1, x, y, width, "right");
  };

  Window_Base.prototype.drawLineActorNextExp = function (actor, x, y, width) {
    var expNext = TextManager.expNext.format(TextManager.level);
    var value2 = actor.nextRequiredExp();
    var next = actor.nextLevelExp();
    var clexp = actor.currentLevelExp();
    var rate = (actor.currentExp() - clexp) / (next - clexp);
    if (actor.isMaxLevel()) {
      value2 = "-----";
      rate = 1.0;
    }
    this.drawGauge(x, y, width, rate, "rgb(0,0,255)", "rgb(128,128,255)");
    this.changeTextColor(this.systemColor());
    this.contents.fontSize = this.standardFontSize() / 1.5;
    this.drawText(expNext, x, y, width);
    this.resetTextColor();
    this.contents.fontSize = this.standardFontSize();
    this.drawText(value2, x, y, width, "right");
  };

  Window_Base.prototype.maxPages = function () {
    return this._pageMax;
  };

  Window_Base.prototype.changePage = function (pageIndex) {
    this._pageIndex = pageIndex;
  };

  Window_Base.prototype.nextPage = function () {
    this.changePage((this._pageIndex + 1) % this.maxPages());
  };

  Window_Base.prototype.prevPage = function () {
    this.changePage(
      (this._pageIndex + (this.maxPages() - 1)) % this.maxPages()
    );
  };

  Window_Base.prototype.maxBattleMembers = function () {
    if (Imported["SceneFormation"]) {
      return Number(
        PluginManager.parameters("SceneFormation")["Max Battle Members Size"] ||
          4
      );
    } else {
      return $gameParty.maxBattleMembers();
    }
  };

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

  var __WSelectable_onTouch = Window_Selectable.prototype.onTouch;
  Window_Selectable.prototype.onTouch = function (triggered) {
    __WSelectable_onTouch.call(this, triggered);
    var x = this.canvasToLocalX(TouchInput.x);
    var y = this.canvasToLocalY(TouchInput.y);
    var hitIndex = this.hitTest(x, y);
    if (hitIndex < 0 && this._stayCount >= 10 && triggered) {
      if (x < this.padding) {
        this.cursorLeft();
      } else if (x >= this.width - this.padding) {
        this.cursorRight();
      }
    }
  };

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

  Window_MenuCommand.prototype.cursorRight = function (wrap) {
    if (SceneManager._scene._statusWindow.maxPages() < 2) return;
    SoundManager.playCursor();
    this.callHandler("right");
  };

  Window_MenuCommand.prototype.cursorLeft = function (wrap) {
    if (SceneManager._scene._statusWindow.maxPages() < 2) return;
    SoundManager.playCursor();
    this.callHandler("left");
  };

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

  var __WMStatus_initialize = Window_MenuStatus.prototype.initialize;
  Window_MenuStatus.prototype.initialize = function (x, y) {
    this.initPages();
    __WMStatus_initialize.call(this, x, y);
  };

  // 再定義
  Window_MenuStatus.prototype.drawItemImage = function (index) {
    var actor = $gameParty.members()[index];
    var rect = this.itemRect(index);
    this.changePaintOpacity(actor.isBattleMember());
    var w = Math.min(rect.width, faceWidth);
    var h = rect.height - 6;
    this.drawActorFace(actor, rect.x + 1, rect.y + 5, w, h);
    this.changePaintOpacity(true);
  };

  // 再定義
  Window_MenuStatus.prototype.drawItemStatus = function (index) {
    var actor = $gameParty.members()[index];
    var rect = this.itemRect(index);
    var fw = faceWidth + 18;
    rect.x += fw;
    rect.width -= fw;
    this.drawStatusContents(actor, rect);
  };

  // 再定義
  Window_MenuStatus.prototype.lineHeight = function () {
    var h = Window_Base.prototype.lineHeight.call(this);
    h = Math.floor(
      Math.min(this.contentsHeight() / (this.maxBattleMembers() * maxRows), h)
    );
    return h - 2;
  };

  // 再定義
  Window_MenuStatus.prototype.standardFontSize = function () {
    var s = Window_Base.prototype.standardFontSize.call(this);
    return menuStatusFontSize || s;
  };

  //再定義
  Window_MenuStatus.prototype.numVisibleRows = function () {
    return this.maxBattleMembers();
  };

  // 再定義
  Window_MenuStatus.prototype.drawIcon = function (iconIndex, x, y) {
    var bitmap = ImageManager.loadSystem("IconSet");
    var pw = Window_Base._iconWidth;
    var ph = Window_Base._iconHeight;
    var sx = (iconIndex % 16) * pw;
    var sy = Math.floor(iconIndex / 16) * ph;
    var n = Math.floor(this.standardFontSize() + 4);
    this.contents.blt(bitmap, sx, sy, pw, ph, x, y, n, n);
  };

  // 再定義
  Window_MenuStatus.prototype.processDrawIcon = function (
    iconIndex,
    textState
  ) {
    this.drawIcon(iconIndex, textState.x + 2, textState.y + 2);
    textState.x += this.standardFontSize() + 8;
  };

  Window_MenuStatus.prototype.cursorRight = function (wrap) {
    if (this.maxPages() < 2) return;
    SoundManager.playCursor();
    this.callHandler("right");
  };

  Window_MenuStatus.prototype.cursorLeft = function (wrap) {
    if (this.maxPages() < 2) return;
    SoundManager.playCursor();
    this.callHandler("left");
  };

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

  var __SMenu_createCommandWindow = Scene_Menu.prototype.createCommandWindow;
  Scene_Menu.prototype.createCommandWindow = function () {
    __SMenu_createCommandWindow.call(this);
    this._commandWindow.setHandler(
      "right",
      this.changeStatus.bind(this, "right")
    );
    this._commandWindow.setHandler(
      "left",
      this.changeStatus.bind(this, "left")
    );
  };

  var __SMenu_createStatusWindow = Scene_Menu.prototype.createStatusWindow;
  Scene_Menu.prototype.createStatusWindow = function () {
    __SMenu_createStatusWindow.call(this);
    this._statusWindow.setHandler(
      "right",
      this.changeStatus.bind(this, "right")
    );
    this._statusWindow.setHandler("left", this.changeStatus.bind(this, "left"));
  };

  Scene_Menu.prototype.changeStatus = function (dir) {
    if (dir === "right") this._statusWindow.nextPage();
    if (dir === "left") this._statusWindow.prevPage();
    this._statusWindow.refresh();
  };

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

  if (useSkillStatus) {
    Window_SkillType.prototype.cursorRight = function (wrap) {
      SoundManager.playCursor();
      this.callHandler("right");
    };

    Window_SkillType.prototype.cursorLeft = function (wrap) {
      SoundManager.playCursor();
      this.callHandler("left");
    };

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

    // 再定義
    Window_SkillStatus.prototype.refresh = function () {
      this.contents.clear();
      if (this._actor) {
        var w = this.width - this.padding * 2;
        var h = this.height - this.padding * 2;
        var y = 0; //h / 2 - this.lineHeight() * 1.5;
        var width = w - (faceWidth + 18) - this.textPadding();
        this.drawActorFace(this._actor, 0, 0, faceWidth, h);
        this.drawActorSimpleStatus(this._actor, faceWidth + 18, y, width);
      }
    };

    // 再定義
    Window_SkillStatus.prototype.lineHeight = function () {
      var h = Window_Base.prototype.lineHeight.call(this);
      h = Math.floor(Math.min(this.contentsHeight() / maxRows, h));
      return h - 2;
    };

    // 再定義
    Window_SkillStatus.prototype.standardFontSize = function () {
      var s = Window_Base.prototype.standardFontSize.call(this);
      return skillStatusFontSize || s;
    };

    // 再定義
    Window_SkillStatus.prototype.drawIcon = function (iconIndex, x, y) {
      var bitmap = ImageManager.loadSystem("IconSet");
      var pw = Window_Base._iconWidth;
      var ph = Window_Base._iconHeight;
      var sx = (iconIndex % 16) * pw;
      var sy = Math.floor(iconIndex / 16) * ph;
      var n = Math.floor(this.standardFontSize() + 4);
      this.contents.blt(bitmap, sx, sy, pw, ph, x, y, n, n);
    };

    // 再定義
    Window_SkillStatus.prototype.processDrawIcon = function (
      iconIndex,
      textState
    ) {
      this.drawIcon(iconIndex, textState.x + 2, textState.y + 2);
      textState.x += this.standardFontSize() + 8;
    };

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

    var __SSkill_createSkillTypeWindow =
      Scene_Skill.prototype.createSkillTypeWindow;
    Scene_Skill.prototype.createSkillTypeWindow = function () {
      __SSkill_createSkillTypeWindow.call(this);
      this._skillTypeWindow.setHandler(
        "right",
        this.changeStatus.bind(this, "right")
      );
      this._skillTypeWindow.setHandler(
        "left",
        this.changeStatus.bind(this, "left")
      );
    };

    Scene_Skill.prototype.changeStatus = function (dir) {
      if (dir === "right") this._statusWindow.nextPage();
      if (dir === "left") this._statusWindow.prevPage();
      this._statusWindow.refresh();
    };
  }

  ////////////////////////////////////////////////////////////////////////////////////
})();


code:
//=============================================================================
// MessageSkip.js
// ----------------------------------------------------------------------------
// (C) 2016 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.16.1 2021/08/29 スキップ中はウィンドウ背景が変わってもウィンドウを閉じないよう修正
// 1.16.0 2021/06/15 ピクチャによるクリックは押し続けスキップの対象外とするよう仕様変更
// 1.15.1 2021/06/01 1.15.0でループボイスを再生するとオートモードで文章が送られなくなる問題を修正
// 1.15.0 2021/05/31 SimpleVoice.jsと併用したとき、ボイス演奏中はオートモードによる文章送りを待機するよう変更
// 1.14.1 2020/10/15 ヘルプに注釈を追加
// 1.14.0 2020/08/02 クリックすることで任意のスイッチをONにできるピクチャをメッセージウィンドウに表示する機能を追加
// 1.13.0 2020/03/26 オート、スキップピクチャの表示方法をメッセージウィンドウからの相対座標と絶対座標とを選択できる機能を追加
// 1.12.1 2020/03/25 アイコン表示位置をメッセージウィンドウの位置やサイズの変更に追従するよう修正
// 1.12.0 2019/05/26 オート、スキップアイコンの位置を自由に指定できる機能を追加
// 1.11.0 2018/06/16 オート及びスキップの機能を一時的に無効化するスイッチを追加
// 1.10.1 2018/05/07 オートモードで途中に「\!」が含まれる場合の待機フレームが正しく計算されない問題を修正
// 1.10.0 2018/05/01 スキップモードとオートモードをスイッチで自動制御できる機能を追加
// 1.9.0 2018/02/18 イベント終了時にオート、スキップを解除するかどうかを任意のスイッチで判定できるように仕様変更
// 1.8.0 2018/02/16 オート待機フレーム数の計算式にウィンドウに表示した文字数を組み込める機能を追加
// 1.7.0 2017/12/12 SkipAlreadyReadMessage.jsとの連携したときに当プラグインのスキップ機能が既読スキップになるよう修正
//                  スキップピクチャの条件スイッチが0(指定なし)のときに同ピクチャが表示されない問題を修正
// 1.6.1 2017/09/21 オートモード時 改ページを伴わない入力待ちの後のメッセージを一瞬でスキップする問題を修正(by DarkPlasmaさん)
// 1.6.0 2017/08/03 キーを押している間だけスキップが有効にできる機能を追加
// 1.5.0 2017/05/27 オートおよびスキップボタンの原点指定と表示可否を変更できるスイッチの機能を追加
// 1.4.0 2017/05/26 クリックでオートおよびスキップを切り替えるボタンを追加
// 1.3.1 2017/05/13 アイコンの量を増やしたときにオートとスキップのアイコンが正常に表示されない問題を修正
// 1.3.0 2017/05/05 スキップ中はメッセージのウェイトを無視するよう修正
// 1.2.0 2017/04/29 並列実行のイベントでも通常イベントが実行中でなければスキップを解除するよう修正
//                  キーコードの「右」と「上」が逆になっていた問題を修正
//                  オート待機フレームを制御文字を使って動的に変更できる機能を追加
// 1.1.0 2016/12/14 並列処理イベントが実行されている場合にスキップが効かなくなる問題を修正
// 1.0.1 2016/02/15 モバイル端末での動作が遅くなる不具合を修正
// 1.0.0 2016/01/15 初版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc MessageSkipPlugin
 * @author triacontane
 *
 * @param SkipKey
 * @desc メッセージスキップに該当するキー(controlを選択するとAltキーも対象に含まれます)
 * (キーのアルファベット/shift/control/tab)
 * @default S
 * @type select
 * @option shift
 * @option control
 * @option tab
 * @option S
 *
 * @param AutoKey
 * @desc メッセージオートに該当するキー(controlを選択するとAltキーも対象に含まれます)
 * (キーのアルファベット/shift/control/tab)
 * @default A
 * @type select
 * @option shift
 * @option control
 * @option tab
 * @option A
 *
 * @param SkipSwitchId
 * @desc 指定した番号のスイッチがONになっている場合は常にスキップします。
 * @default 0
 * @type switch
 *
 * @param AutoSwitchIId
 * @desc 指定した番号のスイッチがONになっている場合は常にオートします。スキップが優先されます。
 * @default 0
 * @type switch
 *
 * @param SkipIcon
 * @desc メッセージスキップ中にウィンドウ右下に表示されるアイコン
 * @default 140
 * @type number
 *
 * @param AutoIcon
 * @desc メッセージオート中にウィンドウ右下に表示されるアイコン
 * @default 75
 * @type number
 *
 * @param IconX
 * @desc オート、スキップのアイコン位置を自由に変更したい場合に指定するX座標です。
 * @default 0
 * @type number
 * @min -2000
 * @max 2000
 *
 * @param IconY
 * @desc オート、スキップのアイコン位置を自由に変更したい場合に指定するX座標です。
 * @default 0
 * @type number
 * @min -2000
 * @max 2000
 *
 * @param PressingSkip
 * @desc スキップの判定が指定のキーを押している間のみになります。
 * @default false
 * @type boolean
 *
 * @param AutoWaitFrame
 * @desc オートモードが有効の場合にメッセージを表示しておくフレーム数。制御文字\v[n]および計算式が指定できます。
 * @default 100 + textSize * 10
 *
 * @param ResetOnEndSwitch
 * @desc 指定した番号のスイッチがONのとき、イベント終了時にスキップ、オート状態を解除します。0の場合は常に解除します。
 * @default 0
 * @type switch
 *
 * @param SkipPicture
 * @desc ウィンドウ内に表示するスキップピクチャのファイル名です。クリックするとスキップモードになります。
 * @default
 * @require 1
 * @dir img/pictures/
 * @type file
 *
 * @param SkipPictureX
 * @desc ウィンドウ内に表示するスキップピクチャのX座標です。
 * @default 500
 * @type number
 *
 * @param SkipPictureY
 * @desc ウィンドウ内に表示するスキップピクチャのY座標です。
 * @default 0
 * @type number
 *
 * @param AutoPicture
 * @desc ウィンドウ内に表示するオートピクチャのファイル名です。クリックするとオートモードになります。
 * @default
 * @require 1
 * @dir img/pictures/
 * @type file
 *
 * @param AutoPictureX
 * @desc ウィンドウ内に表示するオートピクチャのX座標です。
 * @default 750
 * @type number
 *
 * @param AutoPictureY
 * @desc ウィンドウ内に表示するオートピクチャのY座標です。
 * @default 0
 * @type number
 *
 * @param SwitchPicture
 * @desc ウィンドウ内に表示するスイッチピクチャのファイル名です。クリックすると指定したスイッチがONになります。
 * @default
 * @require 1
 * @dir img/pictures/
 * @type file
 *
 * @param SwitchPictureTrigger
 * @desc スイッチピクチャをクリックしたときにONにするスイッチ番号です。
 * @default 0
 * @type switch
 *
 * @param SwitchPictureX
 * @desc ウィンドウ内に表示するスイッチピクチャのX座標です。
 * @default 750
 * @type number
 *
 * @param SwitchPictureY
 * @desc ウィンドウ内に表示するスイッチピクチャのY座標です。
 * @default 0
 * @type number
 *
 * @param PictureSwitchId
 * @desc 指定した番号のスイッチがONのときのみスキップ、オートの各ピクチャボタンを表示します。0の場合は無条件で表示します。
 * @default 0
 * @type switch
 *
 * @param PictureAnchor
 * @desc スキップ、オートの各ピクチャボタン座標の原点です。（0:左上、1:右上、2:左下、3:右下）
 * @default 0
 * @type select
 * @option 0
 * @option 1
 * @option 2
 * @option 3
 *
 * @param PicturePosType
 * @desc オート、スキップピクチャの配置方法です。相対座標を選択するとウィンドウ表示位置からの相対座標となります。
 * @default relative
 * @type select
 * @option absolute
 * @option relative
 *
 * @param InvalidSwitchId
 * @desc 指定したスイッチがONのときプラグインの全機能が無効になります。
 * @default 0
 * @type switch
 *
 * @help メッセージウィンドウでメッセージのスキップやオートモードの切替ができます。
 * イベントが終了すると自働でスキップやオートモードは解除されます。
 * 並列実行イベントは、通常イベントが実行中でない場合のみ解除されます。
 * 明示的に解除したい場合は、以下のスクリプトを実行してください。
 *
 * $gameMessage.clearSkipInfo();
 *
 * ・SkipAlreadyReadMessage.jsとの連携
 * SkipAlreadyReadMessage.js（奏ねこま様作）と併用したときに
 * 当プラグインのスキップ機能は「既読スキップ」機能になります。
 * http://makonet.sakura.ne.jp/rpg_tkool/
 *
 * ・パラメータ「オート待機フレーム」を設定するとオートモード時の待機フレームを変更できます。
 * 制御文字\v[n]のほか、JavaScript計算式が使えます。
 * さらにtextSizeで表示文字数を計算式に組み込むことができます。
 *
 * 指定例：
 * 100 + textSize * 10
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * This plugin is released under the MIT License.
 */

/*:ja
 * @plugindesc メッセージスキッププラグイン
 * @author トリアコンタン
 *
 * @param スキップキー
 * @desc メッセージスキップに該当するキー
 * (キーのアルファベット/shift/control/tab)
 * @default S
 * @type select
 * @option shift
 * @option control
 * @option tab
 * @option S
 *
 * @param オートキー
 * @desc メッセージオートに該当するキー
 * (キーのアルファベット/shift/control/tab)
 * @default A
 * @type select
 * @option shift
 * @option control
 * @option tab
 * @option A
 *
 * @param スキップスイッチ
 * @desc 指定した番号のスイッチがONになっている場合は常にスキップします。
 * @default 0
 * @type switch
 *
 * @param オートスイッチ
 * @desc 指定した番号のスイッチがONになっている場合は常にオートします。スキップが優先されます。
 * @default 0
 * @type switch
 *
 * @param スキップアイコン
 * @desc メッセージスキップ中にウィンドウ右下に表示されるアイコン
 * @default 140
 * @type number
 *
 * @param オートアイコン
 * @desc メッセージオート中にウィンドウ右下に表示されるアイコン
 * @default 75
 * @type number
 *
 * @param アイコンX
 * @desc オート、スキップのアイコン位置を自由に変更したい場合に指定するX座標です。
 * @default 0
 * @type number
 * @min -2000
 * @max 2000
 *
 * @param アイコンY
 * @desc オート、スキップのアイコン位置を自由に変更したい場合に指定するX座標です。
 * @default 0
 * @type number
 * @min -2000
 * @max 2000
 *
 * @param 押し続けスキップ
 * @desc スキップの判定が指定のキーを押している間のみになります。
 * @default false
 * @type boolean
 *
 * @param オート待機フレーム
 * @desc オートモードが有効の場合にメッセージを表示しておくフレーム数。制御文字\v[n]および計算式が指定できます。
 * @default 100 + textSize * 10
 *
 * @param 終了解除スイッチID
 * @desc 指定した番号のスイッチがONのとき、イベント終了時にスキップ、オート状態を解除します。0の場合は常に解除します。
 * @default 0
 * @type switch
 *
 * @param スキップピクチャ
 * @desc ウィンドウ内に表示するスキップピクチャのファイル名です。クリックするとスキップモードになります。
 * @default
 * @require 1
 * @dir img/pictures/
 * @type file
 *
 * @param スキップピクチャX
 * @desc ウィンドウ内に表示するスキップピクチャのX座標です。
 * @default 500
 * @type number
 *
 * @param スキップピクチャY
 * @desc ウィンドウ内に表示するスキップピクチャのY座標です。
 * @default 0
 * @type number
 *
 * @param オートピクチャ
 * @desc ウィンドウ内に表示するオートピクチャのファイル名です。クリックするとオートモードになります。
 * @default
 * @require 1
 * @dir img/pictures/
 * @type file
 *
 * @param オートピクチャX
 * @desc ウィンドウ内に表示するオートピクチャのX座標です。
 * @default 750
 * @type number
 *
 * @param オートピクチャY
 * @desc ウィンドウ内に表示するオートピクチャのY座標です。
 * @default 0
 * @type number
 *
 * @param スイッチピクチャ
 * @desc ウィンドウ内に表示するスイッチピクチャのファイル名です。クリックすると指定したスイッチがONになります。
 * @default
 * @require 1
 * @dir img/pictures/
 * @type file
 *
 * @param スイッチピクチャトリガー
 * @desc スイッチピクチャをクリックしたときにONにするスイッチ番号です。
 * @default 0
 * @type switch
 *
 * @param スイッチピクチャX
 * @desc ウィンドウ内に表示するスイッチピクチャのX座標です。
 * @default 750
 * @type number
 *
 * @param スイッチピクチャY
 * @desc ウィンドウ内に表示するスイッチピクチャのY座標です。
 * @default 0
 * @type number
 *
 * @param ボタン原点
 * @desc スキップ、オートの各ピクチャボタン座標の原点です。（0:左上、1:右上、2:左下、3:右下）
 * @default 0
 * @type select
 * @option 0
 * @option 1
 * @option 2
 * @option 3
 *
 * @param ボタン表示スイッチID
 * @desc 指定した番号のスイッチがONのときのみスキップ、オートの各ピクチャボタンを表示します。0の場合は無条件で表示します。
 * @default 0
 * @type switch
 *
 * @param ピクチャ座標タイプ
 * @desc オート、スキップピクチャの配置方法です。相対座標を選択するとウィンドウ表示位置からの相対座標となります。
 * @default relative
 * @type select
 * @option 絶対座標
 * @value absolute
 * @option 相対座標
 * @value relative
 *
 * @param 無効化スイッチ
 * @desc 指定したスイッチがONのときプラグインの全機能が無効になります。
 * @default 0
 * @type switch
 *
 * @help メッセージウィンドウでメッセージのスキップやオートモードの切替ができます。
 * イベントが終了すると自働でスキップやオートモードは解除されます。
 * 並列実行イベントは、通常イベントが実行中でない場合のみ解除されます。
 * 明示的に解除したい場合は、以下のスクリプトを実行してください。
 *
 * $gameMessage.clearSkipInfo();
 *
 * ・SkipAlreadyReadMessage.jsとの連携
 * SkipAlreadyReadMessage.js（奏ねこま様作）と併用したときに
 * 当プラグインのスキップ機能は「既読スキップ」機能になります。
 * http://makonet.sakura.ne.jp/rpg_tkool/
 *
 * ・パラメータ「オート待機フレーム」を設定するとオートモード時の待機フレームを変更できます。
 * 制御文字\v[n]のほか、JavaScript計算式が使えます。
 * さらにtextSizeで表示文字数を計算式に組み込むことができます。
 *
 * 指定例：
 * 100 + textSize * 10
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

/**
 * メッセージボタンスプライト
 * @constructor
 */
function Sprite_MessageButton() {
  this.initialize.apply(this, arguments);
}

/**
 * アイコン描画用スプライト
 * @constructor
 */
function Sprite_Frame() {
  this.initialize.apply(this, arguments);
}

(function () {
  "use strict";
  var pluginName = "MessageSkip";

  var getParamString = function (paramNames, upperFlg) {
    var value = getParamOther(paramNames);
    return value === null ? "" : upperFlg ? value.toUpperCase() : 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) || 0).clamp(min, max);
  };

  var getParamBoolean = function (paramNames) {
    var value = getParamString(paramNames);
    return value.toUpperCase() === "ON" || value.toUpperCase() === "TRUE";
  };

  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 convertEscapeCharacters = function (text) {
    if (isNotAString(text)) text = "";
    var windowLayer = SceneManager._scene._windowLayer;
    return windowLayer
      ? windowLayer.children[0].convertEscapeCharacters(text)
      : text;
  };

  var isNotAString = function (args) {
    return String(args) !== args;
  };

  Number.prototype.times = function (handler) {
    var i = 0;
    while (i < this) handler.call(this, i++);
  };

  Input.keyCodeReverseMapper = {
    a: 65,
    b: 66,
    c: 67,
    d: 68,
    e: 69,
    f: 70,
    g: 71,
    h: 72,
    i: 73,
    j: 74,
    k: 75,
    l: 76,
    m: 77,
    n: 78,
    o: 79,
    p: 80,
    q: 81,
    r: 82,
    s: 83,
    t: 84,
    u: 85,
    v: 86,
    w: 87,
    x: 88,
    y: 89,
    z: 90,
    backspace: 8,
    tab: 9,
    enter: 13,
    shift: 16,
    ctrl: 17,
    alt: 18,
    pause: 19,
    esc: 27,
    space: 32,
    page_up: 33,
    page_down: 34,
    end: 35,
    home: 36,
    left: 37,
    right: 39,
    up: 38,
    down: 40,
    insert: 45,
    delete: 46,
  };
  (9).times(function (i) {
    Input.keyCodeReverseMapper[i] = i + 48;
  });
  (12).times(function (i) {
    Input.keyCodeReverseMapper["f" + (i + 1)] = i + 112;
  });

  //=============================================================================
  // パラメータの取得と整形
  //=============================================================================
  var skipKeyName = getParamString(["SkipKey", "スキップキー"]).toLowerCase();
  var skipKeyCode = Input.keyCodeReverseMapper[skipKeyName];
  var autoKeyName = getParamString(["AutoKey", "オートキー"]).toLowerCase();
  var autoKeyCode = Input.keyCodeReverseMapper[autoKeyName];
  if (skipKeyCode) {
    if (!Input.keyMapper[skipKeyCode]) {
      Input.keyMapper[skipKeyCode] = "messageSkip";
    } else {
      skipKeyName = Input.keyMapper[skipKeyCode];
    }
  }
  if (autoKeyCode) {
    if (!Input.keyMapper[autoKeyCode]) {
      Input.keyMapper[autoKeyCode] = "messageAuto";
    } else {
      autoKeyName = Input.keyMapper[autoKeyCode];
    }
  }
  var paramSkipPicture = getParamString(["SkipPicture", "スキップピクチャ"]);
  var paramSkipPictureX = getParamNumber(["SkipPictureX", "スキップピクチャX"]);
  var paramSkipPictureY = getParamNumber(["SkipPictureY", "スキップピクチャY"]);
  var paramAutoPicture = getParamString(["AutoPicture", "オートピクチャ"]);
  var paramAutoPictureX = getParamNumber(["AutoPictureX", "オートピクチャX"]);
  var paramAutoPictureY = getParamNumber(["AutoPictureY", "オートピクチャY"]);
  var paramSwitchPicture = getParamString([
    "SwitchPicture",
    "スイッチピクチャ",
  ]);
  var paramSwitchPictureX = getParamNumber([
    "SwitchPictureX",
    "スイッチピクチャX",
  ]);
  var paramSwitchPictureY = getParamNumber([
    "SwitchPictureY",
    "スイッチピクチャY",
  ]);
  var paramSwitchPictureTrigger = getParamNumber(
    ["SwitchPictureTrigger", "スイッチピクチャトリガー"],
    0
  );
  var paramPictureAnchor = getParamNumber(["PictureAnchor", "ボタン原点"]);
  var paramPictureSwitchId = getParamNumber(
    ["PictureSwitchId", "ボタン表示スイッチID"],
    0
  );
  var paramPressingSkip = getParamBoolean(["PressingSkip", "押し続けスキップ"]);
  var paramSkipSwitchId = getParamNumber(
    ["SkipSwitchId", "スキップスイッチ"],
    0
  );
  var paramAutoSwitchIId = getParamNumber(
    ["AutoSwitchIId", "オートスイッチ"],
    0
  );
  var paramInvalidSwitchId = getParamNumber(
    ["InvalidSwitchId", "無効化スイッチ"],
    0
  );
  var paramIconX = getParamNumber(["IconX", "アイコンX"], 0);
  var paramIconY = getParamNumber(["IconY", "アイコンY"], 0);
  var paramPicturePosType = getParamString([
    "PicturePosType",
    "ピクチャ座標タイプ",
  ]);

  //=============================================================================
  // Game_Message
  //  メッセージスキップ情報を保持します。
  //=============================================================================
  var _Game_Message_initialize = Game_Message.prototype.initialize;
  Game_Message.prototype.initialize = function () {
    _Game_Message_initialize.apply(this, arguments);
    this.clearSkipInfo();
    this._autoClearSkipSwitch = getParamNumber([
      "ResetOnEndSwitch",
      "終了解除スイッチID",
    ]);
  };

  Game_Message.prototype.toggleSkip = function () {
    this.setSkipFlg(!this._skipFlg);
  };

  Game_Message.prototype.toggleAuto = function () {
    this.setAutoFlg(!this._autoFlg);
  };

  Game_Message.prototype.skipFlg = function () {
    return this._skipFlg;
  };

  Game_Message.prototype.autoFlg = function () {
    return this._autoFlg;
  };

  Game_Message.prototype.setSkipFlg = function (value) {
    this._skipFlg = value;
    if (this._skipFlg) this._autoFlg = false;
  };

  Game_Message.prototype.setAutoFlg = function (value) {
    if (!this._skipFlg) {
      this._autoFlg = value;
    }
  };

  Game_Message.prototype.clearSkipInfo = function () {
    this._skipFlg = false;
    this._autoFlg = false;
  };

  Game_Message.prototype.terminateEvent = function () {
    if (
      !this._autoClearSkipSwitch ||
      $gameSwitches.value(this._autoClearSkipSwitch)
    ) {
      this.clearSkipInfo();
    }
  };

  //=============================================================================
  // Game_Interpreter
  //  マップイベント終了時にメッセージスキップフラグを初期化します。
  //=============================================================================
  var _Game_Interpreter_terminate = Game_Interpreter.prototype.terminate;
  Game_Interpreter.prototype.terminate = function () {
    _Game_Interpreter_terminate.apply(this, arguments);
    if (this.isNeedClearSkip()) {
      $gameMessage.terminateEvent();
    }
  };

  Game_Interpreter.prototype.isNeedClearSkip = function () {
    return (
      ($gameMap.isMapInterpreterOf(this) || !$gameMap.isEventRunning()) &&
      this._depth === 0
    );
  };

  //=============================================================================
  // Game_Map
  //  指定されたインタプリタがマップイベントかどうかを返します。
  //=============================================================================
  Game_Map.prototype.isMapInterpreterOf = function (interpreter) {
    return this._interpreter === interpreter;
  };

  //=============================================================================
  // Window_Message
  //  メッセージスキップ状態を描画します。
  //=============================================================================
  var _Window_Message_initialize = Window_Message.prototype.initialize;
  Window_Message.prototype.initialize = function () {
    _Window_Message_initialize.apply(this, arguments);
    this.createSpriteFrame();
    this.createSpriteSkipButton();
    this.createSpriteAutoButton();
    this.createSpriteSwitchButton();
  };

  Window_Message.prototype.createSpriteFrame = function () {
    this._icon = new Sprite_Frame(ImageManager.loadSystem("IconSet"), -1);
    this.addChild(this._icon);
    this.updatePlacementIcon();
  };

  Window_Message.prototype.updatePlacementIcon = function () {
    this._icon.x = paramIconX
      ? paramIconX - this.x
      : this.width - this._icon.width;
    this._icon.y = paramIconY
      ? paramIconY - this.y
      : this.height - this._icon.height;
  };

  Window_Message.prototype.createSpriteSkipButton = function () {
    if (!paramSkipPicture) return;
    this._skipButton = new Sprite_MessageButton(paramSkipPicture);
    this.addChild(this._skipButton);
  };

  var _Window_Message_areSettingsChanged =
    Window_Message.prototype.areSettingsChanged;
  Window_Message.prototype.areSettingsChanged = function () {
    var result = _Window_Message_areSettingsChanged.apply(this, arguments);
    if ($gameMessage.skipFlg()) {
      return this._positionType !== $gameMessage.positionType();
    } else {
      return result;
    }
  };

  Window_Message.prototype.createSpriteAutoButton = function () {
    if (!paramAutoPicture) return;
    this._autoButton = new Sprite_MessageButton(paramAutoPicture);
    this.addChild(this._autoButton);
  };

  Window_Message.prototype.createSpriteSwitchButton = function () {
    if (!paramSwitchPicture) return;
    this._switchButton = new Sprite_MessageButton(paramSwitchPicture);
    this.addChild(this._switchButton);
  };

  Window_Message.prototype.getRelativeButtonX = function (originalX) {
    if (paramPictureAnchor === 1 || paramPictureAnchor === 3) {
      originalX += this.width;
    }
    if (paramPicturePosType === "absolute") {
      originalX -= this.x;
    }
    return originalX;
  };

  Window_Message.prototype.getRelativeButtonY = function (originalY) {
    if (paramPictureAnchor === 2 || paramPictureAnchor === 3) {
      originalY += this.height;
    }
    if (paramPicturePosType === "absolute") {
      originalY -= this.y;
    }
    return originalY;
  };

  var _Window_Message_startMessage = Window_Message.prototype.startMessage;
  Window_Message.prototype.startMessage = function () {
    _Window_Message_startMessage.apply(this, arguments);
    this.initializeMessageAutoCount();
  };

  Window_Message.prototype.initializeMessageAutoCount = function () {
    var textSize = 0;
    if (this._textState) {
      var index = this._textState.index;
      var text = this._textState.text;
      while (
        text[index] &&
        !(text[index] === "\x1b" && text[index + 1] === "!")
      ) {
        index++;
      }
      // use in eval
      textSize = index - this._textState.index;
    }
    var paramValue =
      convertEscapeCharacters(
        getParamString(["AutoWaitFrame", "オート待機フレーム"])
      ) || 1;
    this._messageAutoCount = eval(paramValue);
  };

  var _Window_Message_update = Window_Message.prototype.update;
  Window_Message.prototype.update = function () {
    this.updateAutoIcon();
    return _Window_Message_update.apply(this, arguments);
  };

  var _Window_Message_updatePlacement =
    Window_Message.prototype.updatePlacement;
  Window_Message.prototype.updatePlacement = function () {
    _Window_Message_updatePlacement.apply(this, arguments);
    if (this._skipButton) {
      this.updateSkipButtonPlacement();
    }
    if (this._autoButton) {
      this.updateAutoButtonPlacement();
    }
    if (this._switchButton) {
      this.updateSwitchButtonPlacement();
    }
  };

  Window_Message.prototype.updateSkipButtonPlacement = function () {
    var x = this.getRelativeButtonX(paramSkipPictureX);
    var y = this.getRelativeButtonY(paramSkipPictureY);
    this._skipButton.move(x, y);
  };

  Window_Message.prototype.updateAutoButtonPlacement = function () {
    var x = this.getRelativeButtonX(paramAutoPictureX);
    var y = this.getRelativeButtonY(paramAutoPictureY);
    this._autoButton.move(x, y);
  };

  Window_Message.prototype.updateSwitchButtonPlacement = function () {
    var x = this.getRelativeButtonX(paramSwitchPictureX);
    var y = this.getRelativeButtonY(paramSwitchPictureY);
    this._switchButton.move(x, y);
  };

  Window_Message.prototype.updateAutoIcon = function () {
    if (this.messageSkip() && this.openness === 255) {
      this._icon.refresh(getParamNumber(["SkipIcon", "スキップアイコン"]));
      this._icon.flashSpeed = 16;
      this._icon.flash = true;
      this.updatePlacementIcon();
    } else if (this.messageAuto() && this.openness === 255) {
      this._icon.refresh(getParamNumber(["AutoIcon", "オートアイコン"]));
      this._icon.flashSpeed = 2;
      this._icon.flash = true;
      this.updatePlacementIcon();
    } else {
      this._icon.refresh(0);
      this._icon.flash = false;
    }
  };

  var _Window_Message_updateWait = Window_Message.prototype.updateWait;
  Window_Message.prototype.updateWait = function () {
    this.updateSkipAuto();
    this.updateSwitchPicture();
    if (this.messageSkip()) {
      this._waitCount = 0;
    }
    return _Window_Message_updateWait.apply(this, arguments);
  };

  Window_Message.prototype.updateSkipAuto = function () {
    if (this.isClosed()) return;
    if (this.isAnySubWindowActive()) {
      $gameMessage.clearSkipInfo();
    } else {
      this.setSkipAutoFlagByTrigger();
      this.setSkipAutoFlagBySwitch();
    }
    this.updateSkipForSkipAlreadyReadMessage();
  };

  Window_Message.prototype.updateSwitchPicture = function () {
    if (this.isTriggeredMessageSwitchButton()) {
      $gameSwitches.setValue(paramSwitchPictureTrigger, true);
    }
  };

  Window_Message.prototype.setSkipAutoFlagByTrigger = function () {
    if (this.isTriggeredMessageSkip()) {
      if (!paramPressingSkip) {
        $gameMessage.toggleSkip();
      }
      this._pressSkipStop = false;
    } else if (this.isTriggeredMessageSkipButton()) {
      $gameMessage.toggleSkip();
      this._pressSkipStop = true;
    } else if (this.isTriggeredMessageAuto()) {
      $gameMessage.toggleAuto();
    } else if (paramPressingSkip && !this._pressSkipStop) {
      $gameMessage.setSkipFlg(this.isPressedMessageSkip());
    }
  };

  Window_Message.prototype.setSkipAutoFlagBySwitch = function () {
    if (paramInvalidSwitchId > 0 && $gameSwitches.value(paramInvalidSwitchId)) {
      $gameMessage.setSkipFlg(false);
      $gameMessage.setAutoFlg(false);
      return;
    }
    if (paramSkipSwitchId > 0) {
      $gameMessage.setSkipFlg($gameSwitches.value(paramSkipSwitchId));
    }
    if (paramAutoSwitchIId > 0) {
      $gameMessage.setAutoFlg($gameSwitches.value(paramAutoSwitchIId));
    }
  };

  // for SkipAlreadyReadMessage.js
  Window_Message.prototype.updateSkipForSkipAlreadyReadMessage = function () {
    var pluginName = "SkipAlreadyReadMessage";
    if ($gameMessage[pluginName] && !$gameMessage[pluginName].already_read) {
      $gameMessage.setSkipFlg(false);
    }
  };

  Window_Message.prototype.messageAuto = function () {
    return $gameMessage.autoFlg();
  };

  Window_Message.prototype.messageSkip = function () {
    return $gameMessage.skipFlg();
  };

  var _Window_Message_updateInput = Window_Message.prototype.updateInput;
  Window_Message.prototype.updateInput = function () {
    if (this.messageAuto() && this._messageAutoCount > 0 && this.visible)
      this._messageAutoCount--;
    return _Window_Message_updateInput.apply(this, arguments);
  };

  Window_Message.prototype.isTriggeredMessageSkip = function () {
    return Input.isTriggered("messageSkip") || Input.isTriggered(skipKeyName);
  };

  Window_Message.prototype.isPressedMessageSkip = function () {
    return Input.isPressed("messageSkip") || Input.isPressed(skipKeyName);
  };

  Window_Message.prototype.isTriggeredMessageSkipButton = function (pressed) {
    return this.isTriggeredButton(this._skipButton, pressed);
  };

  Window_Message.prototype.isTriggeredMessageAuto = function () {
    return (
      Input.isTriggered("messageAuto") ||
      Input.isTriggered(autoKeyName) ||
      this.isTriggeredMessageAutoButton()
    );
  };

  Window_Message.prototype.isTriggeredMessageAutoButton = function () {
    return this.isTriggeredButton(this._autoButton, false);
  };

  Window_Message.prototype.isTriggeredMessageSwitchButton = function () {
    return this.isTriggeredButton(this._switchButton, false);
  };

  Window_Message.prototype.isTriggeredButton = function (button, pressed) {
    if (!button) {
      return false;
    }
    var x = this.canvasToLocalX(TouchInput.x);
    var y = this.canvasToLocalY(TouchInput.y);
    return button.isTriggered(x, y, pressed);
  };

  var _Window_Message_isTriggered = Window_Message.prototype.isTriggered;
  Window_Message.prototype.isTriggered = function () {
    if (this.isTriggeredAnyButton()) {
      return false;
    }
    if (this.messageAuto() && this._messageAutoCount <= 0) {
      if (!AudioManager.isExistVoice()) {
        this.initializeMessageAutoCount();
        return true;
      }
    }
    return (
      _Window_Message_isTriggered.apply(this, arguments) || this.messageSkip()
    );
  };

  Window_Message.prototype.isTriggeredAnyButton = function () {
    return (
      this.isTriggeredMessageSkipButton() ||
      this.isTriggeredMessageAutoButton() ||
      this.isTriggeredMessageSwitchButton()
    );
  };

  var _Window_Message_startPause = Window_Message.prototype.startPause;
  Window_Message.prototype.startPause = function () {
    _Window_Message_startPause.apply(this, arguments);
    if (this.messageSkip()) this.startWait(2);
  };

  AudioManager.isExistVoice = function () {
    if (!AudioManager._voiceBuffers) {
      return false;
    }
    this.filterPlayingVoice();
    return this._voiceBuffers.some(function (buffer) {
      return !buffer._sourceNode.loop;
    });
  };

  //=============================================================================
  // Sprite_MessageButton
  //  メッセージボタン描画用スプライトです。
  //=============================================================================
  Sprite_MessageButton.prototype = Object.create(Sprite.prototype);
  Sprite_MessageButton.prototype.constructor = Sprite_MessageButton;

  Sprite_MessageButton.prototype.initialize = function (fileName) {
    Sprite.prototype.initialize.call(this);
    this.bitmap = ImageManager.loadPicture(fileName);
    this.anchor.x = 0.5;
    this.anchor.y = 0.5;
    this.visible = false;
  };

  Sprite_MessageButton.prototype.update = function () {
    Sprite.prototype.update.call(this);
    this.updateOpacity();
    this.updateVisibility();
  };

  Sprite_MessageButton.prototype.updateOpacity = function () {
    this.opacity = this.parent.openness;
  };

  Sprite_MessageButton.prototype.updateVisibility = function () {
    if (paramInvalidSwitchId > 0 && $gameSwitches.value(paramInvalidSwitchId)) {
      this.visible = false;
      return;
    }
    this.visible =
      !paramPictureSwitchId || $gameSwitches.value(paramPictureSwitchId);
  };

  Sprite_MessageButton.prototype.isTriggered = function (
    targetX,
    targetY,
    pressed
  ) {
    var realX = targetX + this._frame.width * this.anchor.x;
    var realY = targetY + this._frame.height * this.anchor.y;
    var triggeredOk = pressed
      ? TouchInput.isPressed()
      : TouchInput.isTriggered();
    return triggeredOk && this.isInSprite(realX, realY);
  };

  Sprite_MessageButton.prototype.isInSprite = function (targetX, targetY) {
    return (
      this.x <= targetX &&
      this.x + this._frame.width >= targetX &&
      this.y <= targetY &&
      this.y + this._frame.height >= targetY
    );
  };

  //=============================================================================
  // Sprite_Frame
  //  アイコン描画用スプライトです。
  //=============================================================================
  Sprite_Frame.prototype = Object.create(Sprite.prototype);
  Sprite_Frame.prototype.constructor = Sprite_Frame;

  Sprite_Frame.prototype.initialize = function (bitmap, index) {
    Sprite.prototype.initialize.call(this);
    bitmap.addLoadListener(
      function () {
        this._column = Math.floor(bitmap.width / Window_Base._iconWidth);
        this._row = Math.floor(bitmap.height / Window_Base._iconHeight);
      }.bind(this)
    );
    this.bitmap = bitmap;
    this.anchor.x = 0.5;
    this.anchor.y = 0.5;
    this.flash = false;
    this.flashSpeed = 2;
    this._flashAlpha = 0;
    this.refresh(index ? index : 0);
  };

  Sprite_Frame.prototype.refresh = function (index) {
    if (!this.bitmap.isReady()) return;
    var w = Window_Base._iconWidth;
    var h = Window_Base._iconHeight;
    this.setFrame(
      (index % this._column) * w,
      Math.floor(index / this._column) * h,
      w,
      h
    );
  };

  Sprite_Frame.prototype.update = function () {
    if (this.flash) {
      if (this._flashAlpha <= -64) this._flashAlpha = 192;
      this.setBlendColor([255, 255, 255, this._flashAlpha]);
      this._flashAlpha -= this.flashSpeed;
    }
  };
})();


code:
//=============================================================================
// MessageWindowHidden.js
// ----------------------------------------------------------------------------
// (C)2015 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 2.6.1 2020/05/21 トリガースイッチと連動無効スイッチの状態によってエラーが起きうる記述を修正
// 2.6.0 2020/05/20 ピクチャの連動を無効にできるスイッチを追加
// 2.5.1 2020/05/19 2.3.0の仕様変更で連動表示ピクチャの透明度が復元できない問題を修正
// 2.5.0 2020/05/17 指定したスイッチに連動させてウィンドウの表示/非表示を切り替える機能を追加
// 2.4.0 2020/05/08 選択肢表示中でもウィンドウを隠せるよう設定を追加
// 2.3.0 2019/10/22 ウィンドウを表示状態にもどしたとき、連動ピクチャは、もともと表示していた不透明度を復元するよう仕様変更
// 2.2.0 2019/06/09 メッセージウィンドウと逆に連動して指定したピクチャの表示/非表示が自動で切り替わる機能を追加
// 2.1.0 2018/10/10 戦闘中にプラグインを無効化できる機能を追加。
// 2.0.0 2018/03/31 消去するトリガーを複数指定できる機能を追加。パラメータの指定方法を見直し。
// 1.4.0 2018/03/10 指定したスイッチがONの間はウィンドウ消去を無効化できる機能を追加
// 1.3.2 2017/08/02 ponidog_BackLog_utf8.jsとの競合を解消
// 1.3.1 2017/07/03 古いYEP_MessageCore.jsのネーム表示ウィンドウが再表示できない不具合の修正(by DarkPlasmaさま)
// 1.3.0 2017/03/16 連動して非表示にできるピクチャを複数指定できる機能を追加
// 1.2.1 2017/02/07 端末依存の記述を削除
// 1.2.0 2016/01/02 メッセージウィンドウと連動して指定したピクチャの表示/非表示が自動で切り替わる機能を追加
// 1.1.0 2016/08/25 選択肢の表示中はウィンドウを非表示にできないよう仕様変更
// 1.0.4 2016/07/22 YEP_MessageCore.jsのネーム表示ウィンドウと連携する機能を追加
// 1.0.3 2016/01/24 メッセージウィンドウが表示されていないときも非表示にできてしまう現象の修正
// 1.0.2 2016/01/02 競合対策
// 1.0.1 2015/12/31 コメント追加＋英語対応（仕様に変化なし）
// 1.0.0 2015/12/30 初版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc Erase message window
 * @author triacontane
 *
 * @param triggerButton
 * @desc Trigger buttons
 * (light_click or shift or control)
 * @default ["light_click"]
 * @type combo[]
 * @option light_click
 * @option shift
 * @option control
 * @option tab
 * @option pageup
 * @option pagedown
 * @option debug
 *
 * @param triggerSwitch
 * @desc The window will be erased in conjunction with the specified switch.
 * @default 0
 * @type switch
 *
 * @param linkPictureNumbers
 * @desc Picture number of window show/hide
 * @default []
 * @type number[]
 *
 * @param linkShowPictureNumbers
 * @desc Picture number of window show/hide
 * @default []
 * @type number[]
 *
 * @param disableLinkSwitchId
 * @desc 指定した番号のスイッチがONのとき、ピクチャの連動が無効になります。
 * @default 0
 * @type switch
 *
 * @param disableSwitchId
 * @desc 指定した番号のスイッチがONのとき、プラグインの機能が無効になります。
 * @default 0
 * @type switch
 *
 * @param disableInBattle
 * @desc trueのとき、戦闘中にプラグインの機能を無効にします。
 * @default false
 * @type boolean
 *
 * @param disableInChoice
 * @desc 選択肢の表示中はウィンドウを非表示にできなくなります。
 * @default true
 * @type boolean
 *
 * @help Erase message window (and restore) when triggered
 *
 * This plugin is released under the MIT License.
 */
/*:ja
 * @plugindesc メッセージウィンドウ一時消去プラグイン
 * @author トリアコンタン
 *
 * @param triggerButton
 * @text ボタン名称
 * @desc ウィンドウを消去するボタンです。(複数登録可能) プラグイン等で入力可能なボタンを追加した場合は直接入力
 * @default ["右クリック"]
 * @type combo[]
 * @option 右クリック
 * @option shift
 * @option control
 * @option tab
 * @option pageup
 * @option pagedown
 * @option debug
 *
 * @param triggerSwitch
 * @text トリガースイッチ
 * @desc 指定したスイッチに連動させてウィンドウを消去します。並列処理などを使ってON/OFFを適切に管理してください。
 * @default 0
 * @type switch
 *
 * @param linkPictureNumbers
 * @text 連動ピクチャ番号
 * @desc ウィンドウ消去時に連動して不透明度を[0]にするピクチャの番号です。
 * @default []
 * @type number[]
 *
 * @param linkShowPictureNumbers
 * @text 連動表示ピクチャ番号
 * @desc ウィンドウ消去時に連動して不透明度を[255]にするピクチャの番号です。
 * @default []
 * @type number[]
 *
 * @param disableLinkSwitchId
 * @text 連動ピクチャ無効スイッチ
 * @desc 指定した番号のスイッチがONのとき、ピクチャの連動が無効になります。
 * @default 0
 * @type switch
 *
 * @param disableSwitchId
 * @text 無効スイッチ
 * @desc 指定した番号のスイッチがONのとき、プラグイン全体の機能が無効になります。
 * @default 0
 * @type switch
 *
 * @param disableInBattle
 * @text 戦闘中無効化
 * @desc trueのとき、戦闘中にプラグインの機能を無効にします。
 * @default false
 * @type boolean
 *
 * @param disableInChoice
 * @text 選択肢表示中は無効
 * @desc 選択肢の表示中はウィンドウを非表示にできなくなります。
 * @default true
 * @type boolean
 *
 * @help メッセージウィンドウを表示中に指定したボタンを押下することで
 * メッセージウィンドウを消去します。もう一度押すと戻ります。
 *
 * ウィンドウ消去時に連動して不透明度を[0]にするピクチャを指定することができます。
 * 背景に特定のピクチャを使用している場合などに指定してください。
 * 再表示すると不透明度は、ウィンドウ非表示まえの不透明度で復元されます。
 *
 * ver2.0.0よりパラメータの指定方法が一部変更になりました。
 * 以前のバージョンを使っていた方は再設定をお願いします。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */
(function () {
  "use strict";

  /**
   * 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("MessageWindowHidden");

  //=============================================================================
  // Game_Picture
  //  メッセージウィンドウの表示可否と連動します。
  //=============================================================================
  Game_Picture.prototype.linkWithMessageWindow = function (opacity) {
    this._opacity = opacity;
    this._targetOpacity = opacity;
  };

  //=============================================================================
  // Window_Message
  //  指定されたボタン押下時にウィンドウとサブウィンドウを非表示にします。
  //=============================================================================
  var _Window_Message_updateWait = Window_Message.prototype.updateWait;
  Window_Message.prototype.updateWait = function () {
    if (
      !this.isClosed() &&
      this.isTriggeredHidden() &&
      this.isEnableInChoice()
    ) {
      if (!this.isHidden()) {
        this.hideAllWindow();
      } else {
        this.showAllWindow();
      }
    }
    var wait = _Window_Message_updateWait.apply(this, arguments);
    if (this.isHidden() && this.visible) {
      this.hideAllWindow();
    }
    return wait;
  };

  Window_Message.prototype.isEnableInChoice = function () {
    return !(param.disableInChoice && $gameMessage.isChoice());
  };

  Window_Message.prototype.hideAllWindow = function () {
    this.hide();
    this.subWindows().forEach(
      function (subWindow) {
        this.hideSubWindow(subWindow);
      }.bind(this)
    );
    if (this.hasNameWindow() && !this.nameWindowIsSubWindow())
      this.hideSubWindow(this._nameWindow);
    this._originalPictureOpacities = {};
    this.linkPictures(0, param.linkPictureNumbers);
    this.linkPictures(255, param.linkShowPictureNumbers);
    this._hideByMessageWindowHidden = true;
  };

  Window_Message.prototype.showAllWindow = function () {
    this.show();
    this.subWindows().forEach(
      function (subWindow) {
        this.showSubWindow(subWindow);
      }.bind(this)
    );
    if (this.hasNameWindow() && !this.nameWindowIsSubWindow())
      this.showSubWindow(this._nameWindow);
    this.linkPictures(null, param.linkShowPictureNumbers);
    this.linkPictures(null, param.linkPictureNumbers);
    this._hideByMessageWindowHidden = false;
  };

  Window_Message.prototype.isHidden = function () {
    return this._hideByMessageWindowHidden;
  };

  Window_Message.prototype.linkPictures = function (opacity, pictureNumbers) {
    if (!pictureNumbers || $gameSwitches.value(param.disableLinkSwitchId)) {
      return;
    }
    pictureNumbers.forEach(function (pictureId) {
      this.linkPicture(opacity, pictureId);
    }, this);
  };

  Window_Message.prototype.linkPicture = function (opacity, pictureId) {
    var picture = $gameScreen.picture(pictureId);
    if (!picture) {
      return;
    }
    if (opacity === null) {
      if (!this._originalPictureOpacities.hasOwnProperty(pictureId)) {
        return;
      }
      opacity = this._originalPictureOpacities[pictureId];
    } else {
      this._originalPictureOpacities[pictureId] = picture.opacity();
    }
    picture.linkWithMessageWindow(opacity);
  };

  Window_Message.prototype.hideSubWindow = function (subWindow) {
    subWindow.prevVisible = subWindow.visible;
    subWindow.hide();
  };

  Window_Message.prototype.showSubWindow = function (subWindow) {
    if (subWindow.prevVisible) subWindow.show();
    subWindow.prevVisible = undefined;
  };

  Window_Message.prototype.hasNameWindow = function () {
    return this._nameWindow && typeof Window_NameBox !== "undefined";
  };

  // 古いYEP_MessageCore.jsでは、ネーム表示ウィンドウはsubWindowsに含まれる
  Window_Message.prototype.nameWindowIsSubWindow = function () {
    return (
      this.subWindows().filter(function (subWindow) {
        return subWindow === this._nameWindow;
      }, this).length > 0
    );
  };

  Window_Message.prototype.disableWindowHidden = function () {
    return (
      (param.disableSwitchId > 0 &&
        $gameSwitches.value(param.disableSwitchId)) ||
      (param.disableInBattle && $gameParty.inBattle())
    );
  };

  Window_Message.prototype.isTriggeredHidden = function () {
    if (this.disableWindowHidden()) {
      return false;
    }
    if (param.triggerSwitch > 0 && this.isTriggeredHiddenSwitch()) {
      return true;
    }
    return param.triggerButton.some(function (button) {
      switch (button) {
        case "":
        case "右クリック":
        case "light_click":
          return TouchInput.isCancelled();
        case "ok":
          return false;
        default:
          return Input.isTriggered(button);
      }
    });
  };

  Window_Message.prototype.isTriggeredHiddenSwitch = function () {
    var triggerSwitch = $gameSwitches.value(param.triggerSwitch);
    if (triggerSwitch && !this.isHidden()) {
      return true;
    }
    if (!triggerSwitch && this.isHidden()) {
      return true;
    }
    return false;
  };

  var _Window_Message_updateInput = Window_Message.prototype.updateInput;
  Window_Message.prototype.updateInput = function () {
    if (this.isHidden()) return true;
    return _Window_Message_updateInput.apply(this, arguments);
  };

  //=============================================================================
  // Window_ChoiceList、Window_NumberInput、Window_EventItem
  //  非表示の間は更新を停止します。
  //=============================================================================
  var _Window_ChoiceList_update = Window_ChoiceList.prototype.update;
  Window_ChoiceList.prototype.update = function () {
    if (!this.visible) return;
    _Window_ChoiceList_update.apply(this, arguments);
  };

  var _Window_NumberInput_update = Window_NumberInput.prototype.update;
  Window_NumberInput.prototype.update = function () {
    if (!this.visible) return;
    _Window_NumberInput_update.apply(this, arguments);
  };

  var _Window_EventItem_update = Window_EventItem.prototype.update;
  Window_EventItem.prototype.update = function () {
    if (!this.visible) return;
    _Window_EventItem_update.apply(this, arguments);
  };
})();