code:
//=============================================================================
// BB_CustomSaveWindow.js
// Copyright (c) 2016 BB ENTERTAINMENT
//=============================================================================

/*:
 * @plugindesc セーブウインドウ改造プラグイン
 * @author ビービー
 *
 *
 * @param OutsideFrameColor
 * @desc 外枠の色を指定（テキストカラー0～31）
 * デフォルト：0
 * @default 0
 *
 * @param OutsideFrameOpacity
 * @desc 外枠の透明度を指定（0～255）
 * デフォルト：64
 * @default 64
 *
 * @param InsideFrameColor
 * @desc 内枠の色を指定（テキストカラー0～31）
 * デフォルト：0
 * @default 0
 *
 * @param InsideFrameOpacity
 * @desc 内枠の透明度を指定（0～255）
 * デフォルト：64
 * @default 64
 *
 * @param MaxItem
 * @desc 内枠の数を指定（1～4）
 * デフォルト：4（0で非表示）
 * @default 4
 *
 * @param Item0
 * @desc ファイルID右に表示される項目 0=非表示 1=ﾀｲﾄﾙ 2=ﾌﾟﾚｲ時間 3=ﾏｯﾌﾟ名 4=所持金 5=ｾｰﾌﾞ回数 6=変数項1 7=変数項2 8=変数項3 9=変数項4
 * @default 1
 *
 * @param Item0Length
 * @desc ファイルID右に表示される項目の横幅（Item5(右上に表示される項目)に影響）
 * @default 300
 *
 * @param Item1title
 * @desc 右下に表示される項目のタイトル
 * デフォルト：プレイ時間
 * @default プレイ時間
 *
 * @param Item1
 * @desc 右下に表示される項目  0=非表示 1=ﾀｲﾄﾙ 2=ﾌﾟﾚｲ時間 3=ﾏｯﾌﾟ名
 * 4=所持金 5=ｾｰﾌﾞ回数 6=変数項1 7=変数項2 8=変数項3 9=変数項4
 * @default 2
 *
 * @param Item2title
 * @desc 中央右に表示される項目のタイトル
 * デフォルト：現在地
 * @default 現在地
 *
 * @param Item2
 * @desc 中央右に表示される項目  0=非表示 1=ﾀｲﾄﾙ 2=ﾌﾟﾚｲ時間 3=ﾏｯﾌﾟ名
 * 4=所持金 5=ｾｰﾌﾞ回数 6=変数項1 7=変数項2 8=変数項3 9=変数項4
 * デフォルト：3
 * @default 3
 *
 * @param Item3title
 * @desc 中央下に表示される項目のタイトル
 * デフォルト：所持金
 * @default 所持金
 *
 * @param Item3
 * @desc 中央下に表示される項  0=非表示 1=ﾀｲﾄﾙ 2=ﾌﾟﾚｲ時間 3=ﾏｯﾌﾟ名
 * 4=所持金 5=ｾｰﾌﾞ回数 6=変数項1 7=変数項2 8=変数項3 9=変数項4
 * デフォルト：4
 * @default 4
 *
 * @param Item4title
 * @desc 中央に表示される項目のタイトル
 * デフォルト：セーブ回数
 * @default セーブ回数
 *
 * @param Item4
 * @desc 中央に表示される項目  0=非表示 1=ﾀｲﾄﾙ 2=ﾌﾟﾚｲ時間 3=ﾏｯﾌﾟ名
 * 4=所持金 5=ｾｰﾌﾞ回数 6=変数項1 7=変数項2 8=変数項3 9=変数項4
 * デフォルト：5
 * @default 5
 *
 * @param Item5
 * @desc 右上に表示される項目  0=非表示 1=ﾀｲﾄﾙ 2=ﾌﾟﾚｲ時間 3=ﾏｯﾌﾟ名
 * 4=所持金 5=ｾｰﾌﾞ回数 6=変数項1 7=変数項2 8=変数項3 9=変数項4
 * デフォルト：6
 * @default 6
 *
 * @param ItemValue1
 * @desc 変数項目1に入れる変数のID
 * デフォルト：1
 * @default 1
 *
 * @param ItemValue2
 * @desc 変数項目2に入れる変数のID
 * デフォルト：2
 * @default 2
 *
 * @param ItemValue3
 * @desc 変数項目3に入れる変数のID
 * デフォルト：3
 * @default 3
 *
 * @param ItemValue4
 * @desc 変数項目4に入れる変数のID
 * デフォルト：4
 * @default 4
 *
 * @param ItemValue1unit
 * @desc 変数項目1の単位
 * デフォルト：無し
 * @default
 *
 * @param ItemValue2unit
 * @desc 変数項目2の単位
 * デフォルト：無し
 * @default
 *
 * @param ItemValue3unit
 * @desc 変数項目3の単位
 * デフォルト：無し
 * @default
 *
 * @param ItemValue4unit
 * @desc 変数項目4の単位
 * デフォルト：無し
 * @default
 *
 * @param TitleFramelength1
 * @desc 項目1のタイトル枠の横幅（文字数*20+10）(0～274)
 * デフォルト：110
 * @default 110
 *
 * @param TitleFramelength2
 * @desc 項目2のタイトル枠の横幅（文字数*20+10）(0～274)
 * デフォルト：110
 * @default 110
 *
 * @param TitleFramelength3
 * @desc 項目3のタイトル枠の横幅（文字数*20+10）(0～274)
 * デフォルト：110
 * @default 110
 *
 * @param TitleFramelength4
 * @desc 項目4のタイトル枠の横幅（文字数*20+10）(0～274)
 * デフォルト：110
 * @default 110
 *
 * @param CharacterPositionY
 * @desc キャラクターグラフィックのy座標（下=6 中央=12 上=20）
 * デフォルト：6
 * @default 6
 *
 * @param LevelPositionY
 * @desc レベルのy座標（下=72 上=23）
 * デフォルト：23
 * @default 23
 *
 * @param LevelOnOff
 * @desc レベルを表示するかしないかを指定（0＝非表示、1＝表示）
 * デフォルト：1
 * @default 1
 *
 * @help プラグインの説明
 *
 * ■各パラメータの説明
 * プラグイン内より少しだけ詳しくパラメータの説明をしていきます。
 *
 * OutsideFrameColor
 * 外枠の色をテキストカラーの0～31で指定できます。
 * デフォルト：0
 *
 * OutsideFrameOpacity
 * 外枠の透明度を0～255の数値で指定できます（0＝透明、255＝不透明）
 * デフォルト：64
 *
 * InsideFrameColor
 * 内枠の色をテキストカラーの0～31で指定できます。
 * デフォルト：0
 *
 * InsideFrameOpacity
 * 内枠の透明度を0～255の数値で指定できます（0＝透明、255＝不透明）
 * デフォルト：64
 *
 * MaxItem
 * 内枠の数を0から4のあいだで指定できます。
 * デフォルト：4（0で非表示）
 *
 * Item0
 * ファイルID右に表示される項目を0～9の数字で指定します。
 * 0＝非表示
 * 1＝ゲームタイトル
 * 2＝プレイ時間
 * 3＝マップ名
 * 4＝所持金（自動で通貨単位も表示されます）
 * 5＝セーブ回数
 * 6＝パラメータのItemValue1で指定した変数の値（パラメータのItemValue1unitで単位を指定できます）
 * 7＝パラメータのItemValue2で指定した変数の値（パラメータのItemValue2unitで単位を指定できます）
 * 8＝パラメータのItemValue3で指定した変数の値（パラメータのItemValue3unitで単位を指定できます）
 * 9＝パラメータのItemValue4で指定した変数の値（パラメータのItemValue4unitで単位を指定できます）
 *
 * Item0Length
 * ファイルID右に表示される項目の横幅を指定できます。（Item5(右上に表示される項目)に影響）
 * 指定したサイズより文字列の幅が大きい場合、指定したサイズに自動で文字幅が縮小されます。
 * default 300
 *
 * Item1title
 * 右下に表示される項目のタイトルを好きな文字列で指定できます。
 * デフォルト：プレイ時間
 *
 * Item1
 * 右下に表示される項目を0～9の数字で指定します。
 * デフォルト：2
 *
 * Item2title
 * 中央右に表示される項目のタイトルを好きな文字列で指定できます。
 * デフォルト：現在地
 *
 * Item2
 * 中央右に表示される項目を0～9の数字で指定します。
 * デフォルト：3
 *
 * Item3title
 * 中央下に表示される項目のタイトルを好きな文字列で指定できます。
 * デフォルト：所持金
 *
 * Item3
 * 中央下に表示される項を0～9の数字で指定します。
 * デフォルト：4
 *
 * Item4title
 * 中央に表示される項目のタイトルを好きな文字列で指定できます。
 * デフォルト：セーブ回数
 *
 * Item4
 * 中央に表示される項目を0～9の数字で指定します。
 * デフォルト：5
 *
 * Item5
 * 右上に表示される項目を0～9の数字で指定します。
 * デフォルト：6
 *
 * ItemValue1
 * 変数項目1に入れる変数のIDを指定します。
 * デフォルト：1
 *
 * ItemValue2
 * 変数項目2に入れる変数のIDを指定します。
 * デフォルト：2
 *
 * ItemValue3
 * 変数項目3に入れる変数のIDを指定します。
 * デフォルト：3
 *
 * ItemValue4
 * 変数項目4に入れる変数のIDを指定します。
 * デフォルト：4
 *
 * ItemValue1unit
 * 変数項目1の単位を指定します。
 * デフォルト：無し
 *
 * ItemValue2unit
 * 変数項目2の単位を指定します。
 * デフォルト：無し
 *
 * ItemValue3unit
 * 変数項目3の単位を指定します。
 * デフォルト：無し
 *
 * ItemValue4unit
 * 変数項目4の単位を指定します。
 * デフォルト：無し
 *
 * TitleFramelength1
 * 項目1のタイトル枠の横幅を0～274のあいだから指定します。
 * 文字数*20+10で文字の幅と同じ幅の枠を描画できます
 * 指定した枠幅より文字幅がはみ出る場合自動で文字幅が縮小されます。
 * デフォルト：110（5文字）
 *
 * TitleFramelength2
 * 項目2のタイトル枠の横幅（文字数*20+10）(0～274)
 * デフォルト：110
 *
 * TitleFramelength3
 * 項目3のタイトル枠の横幅（文字数*20+10）(0～274)
 * デフォルト：110
 *
 * TitleFramelength4
 * 項目4のタイトル枠の横幅（文字数*20+10）(0～274)
 * デフォルト：110
 *
 * CharacterPositionY
 * キャラクターグラフィックのy座標を指定します。
 * 下の方に表示したい場合は6、中央あたりなら12 上の方なら20が目安です。
 * デフォルト：6
 *
 * LevelPositionY
 * レベルのy座標を指定します。下の方なら72、上の方なら23が目安です。
 * レベルの表示はキャラクターグラフィックより手前に表示されます。
 * デフォルト：23
 *
 * LevelOnOff
 * レベルを表示するかしないかを指定（0＝非表示、1＝表示）
 * デフォルト：1
 *
 *
 * ■変数に文字列を代入する方法
 * 変数に文字列を代入するには
 * イベントコマンドの"タブ1"にある"ゲーム進行"内の"変数の操作"を実行し
 * 代入したい変数を選び、代入にチェックを入れ
 * スクリプトに書き込みます
 * このとき　'　←この記号ではじめと終わりを挟むのを忘れないでください。
 * （ ' ←この記号はキーボードが半角英数のときにshiftを押しながら７で打てます）
 *
 * ■BB ENTERTAINMENT BLOGにて画像付きで解説しています。
 * 記事：http://bb-entertainment-blog.blogspot.jp/2016/11/blog-post_27.html#more
 *
 * バージョン：
 * 1.0.2 2016/12/01 レベルの表示、非表示を切り替えるパラメータを追加
 * 1.0.1 2016/11/29 ヘルプを追記
 * 1.0.0 2016/11/27 初版
 *
 * 利用規約：
 * このプラグインは、MITライセンスのもとで公開されています。
 * Copyright (c) 2016 BB ENTERTAINMENT
 * Released under the MIT License.
 * http://opensource.org/licenses/mit-license.php
 *
 * コンタクト：
 * BB ENTERTAINMENT Twitter: https://twitter.com/BB_ENTER/
 * BB ENTERTAINMENT BLOG   : http://bb-entertainment-blog.blogspot.jp/
 */

(function () {
  "use strict";
  //-----------------------------------------------------------------------------
  // プラグインパラメータ管理
  //-----------------------------------------------------------------------------
  var parameters = PluginManager.parameters("BB_CustomSaveWindow");
  var BBSWInFC = Number(parameters["InsideFrameColor"]);
  var BBSWInFO = Number(parameters["InsideFrameOpacity"]);
  var BBSWOutFC = Number(parameters["OutsideFrameColor"]);
  var BBSWOutFO = Number(parameters["OutsideFrameOpacity"]);
  var BBSWMaxItem = Number(parameters["MaxItem"]);
  var BBSWItem0 = Number(parameters["Item0"]);
  var BBSWItem0L = Number(parameters["Item0Length"]);
  var BBSWItem1T = String(parameters["Item1title"]);
  var BBSWItem1 = Number(parameters["Item1"]);
  var BBSWItem2T = String(parameters["Item2title"]);
  var BBSWItem2 = Number(parameters["Item2"]);
  var BBSWItem3T = String(parameters["Item3title"]);
  var BBSWItem3 = Number(parameters["Item3"]);
  var BBSWItem4T = String(parameters["Item4title"]);
  var BBSWItem4 = Number(parameters["Item4"]);
  var BBSWItem5 = Number(parameters["Item5"]);
  var BBSWV1 = Number(parameters["ItemValue1"]);
  var BBSWV2 = Number(parameters["ItemValue2"]);
  var BBSWV3 = Number(parameters["ItemValue3"]);
  var BBSWV4 = Number(parameters["ItemValue4"]);
  var BBSWV1u = String(parameters["ItemValue1unit"]);
  var BBSWV2u = String(parameters["ItemValue2unit"]);
  var BBSWV3u = String(parameters["ItemValue3unit"]);
  var BBSWV4u = String(parameters["ItemValue4unit"]);
  var BBSWTF1 = Number(parameters["TitleFramelength1"]);
  var BBSWTF2 = Number(parameters["TitleFramelength2"]);
  var BBSWTF3 = Number(parameters["TitleFramelength3"]);
  var BBSWTF4 = Number(parameters["TitleFramelength4"]);
  var BBSWCPY = Number(parameters["CharacterPositionY"]);
  var BBSWLPY = Number(parameters["LevelPositionY"]);
  var BBSWLOO = Number(parameters["LevelOnOff"]);
  //-----------------------------------------------------------------------------
  // セーブデータに名前を定義
  //-----------------------------------------------------------------------------
  var _DataManager_makeSavefileInfo = DataManager.makeSavefileInfo;
  DataManager.makeSavefileInfo = function () {
    var info = {};
    info.globalId = this._globalId;
    info.title = $dataSystem.gameTitle;
    info.characters = $gameParty.charactersForSavefile();
    info.faces = $gameParty.facesForSavefile();
    info.playtime = $gameSystem.playtimeText();
    info.timestamp = Date.now();
    //add--------------------------------------------------------------------------
    info.mapname = $gameMap.displayName();
    info.gold = $gameParty._gold;
    info.savecount = $gameSystem._saveCount;
    info.value1 = $gameVariables.value(BBSWV1);
    info.value2 = $gameVariables.value(BBSWV2);
    info.value3 = $gameVariables.value(BBSWV3);
    info.value4 = $gameVariables.value(BBSWV4);
    if ($gameParty.size() == 1) {
      info.level1 = $gameParty.members()[0].level;
    }
    if ($gameParty.size() == 2) {
      info.level1 = $gameParty.members()[0].level;
      info.level2 = $gameParty.members()[1].level;
    }
    if ($gameParty.size() == 3) {
      info.level1 = $gameParty.members()[0].level;
      info.level2 = $gameParty.members()[1].level;
      info.level3 = $gameParty.members()[2].level;
    }
    if ($gameParty.size() >= 4) {
      info.level1 = $gameParty.members()[0].level;
      info.level2 = $gameParty.members()[1].level;
      info.level3 = $gameParty.members()[2].level;
      info.level4 = $gameParty.members()[3].level;
    }
    //-----------------------------------------------------------------------------
    return info;
  };

  var _Window_SavefileList_prototype_drawItem =
    Window_SavefileList.prototype.drawItem;
  Window_SavefileList.prototype.drawItem = function (index) {
    var PL_OFFSET_X = 464; // 2023/10/15
    var PL_OFFSET_Y = 19; // 2023/10/15

    var id = index + 1;
    var valid = DataManager.isThisGameFile(id);
    var info = DataManager.loadSavefileInfo(id);
    var rect = this.itemRectForText(index);
    //add--------------------------------------------------------------------------
    this.contents.fontSize = 20;
    this.contents.paintOpacity = BBSWInFO;
    this.contents.fillRect(
      rect.x - 5,
      rect.y + 2,
      rect.width + 10,
      2,
      this.textColor(BBSWInFC)
    );
    this.contents.fillRect(
      rect.x - 5,
      rect.y + 100 + PL_OFFSET_Y,
      rect.width + 10,
      2,
      this.textColor(BBSWInFC)
    );
    this.contents.fillRect(
      rect.x - 5,
      rect.y + 4,
      2,
      rect.height - 7,
      this.textColor(BBSWInFC)
    );
    this.contents.fillRect(
      rect.x + 771 + PL_OFFSET_X,
      rect.y + 4,
      2,
      rect.height - 7,
      this.textColor(BBSWInFC)
    );

    this.contents.fillRect(
      rect.x - 3,
      rect.y + 4,
      rect.width + 6,
      28,
      this.textColor(BBSWInFC)
    );
    this.contents.paintOpacity = BBSWOutFO;
    if (BBSWMaxItem >= 0) {
    }
    if (BBSWMaxItem >= 1) {
      this.contents.fillRect(
        rect.x + 490,
        rect.y + 70 + PL_OFFSET_Y,
        BBSWTF1,
        26,
        this.textColor(BBSWOutFC)
      );

      this.contents.fillRect(
        rect.x + 490,
        rect.y + 68 + PL_OFFSET_Y,
        276,
        2,
        this.textColor(BBSWOutFC)
      );
      this.contents.fillRect(
        rect.x + 490,
        rect.y + 96 + PL_OFFSET_Y,
        276,
        2,
        this.textColor(BBSWOutFC)
      );
      this.contents.fillRect(
        rect.x + 764,
        rect.y + 70 + PL_OFFSET_Y,
        2,
        26,
        this.textColor(BBSWOutFC)
      );
    }
    if (BBSWMaxItem >= 2) {
      this.contents.fillRect(
        rect.x + 490,
        rect.y + 37 + PL_OFFSET_Y,
        BBSWTF2,
        26,
        this.textColor(BBSWOutFC)
      );

      this.contents.fillRect(
        rect.x + 490,
        rect.y + 35 + PL_OFFSET_Y,
        276,
        2,
        this.textColor(BBSWOutFC)
      );
      this.contents.fillRect(
        rect.x + 490,
        rect.y + 63 + PL_OFFSET_Y,
        276,
        2,
        this.textColor(BBSWOutFC)
      );
      this.contents.fillRect(
        rect.x + 764,
        rect.y + 37 + PL_OFFSET_Y,
        2,
        26,
        this.textColor(BBSWOutFC)
      );
    }
    if (BBSWMaxItem >= 3) {
      this.contents.fillRect(
        rect.x + 210,
        rect.y + 70 + PL_OFFSET_Y,
        BBSWTF3,
        26,
        this.textColor(BBSWOutFC)
      );

      this.contents.fillRect(
        rect.x + 210,
        rect.y + 68 + PL_OFFSET_Y,
        276,
        2,
        this.textColor(BBSWOutFC)
      );
      this.contents.fillRect(
        rect.x + 210,
        rect.y + 96 + PL_OFFSET_Y,
        276,
        2,
        this.textColor(BBSWOutFC)
      );
      this.contents.fillRect(
        rect.x + 484,
        rect.y + 70 + PL_OFFSET_Y,
        2,
        26,
        this.textColor(BBSWOutFC)
      );
    }
    if (BBSWMaxItem >= 4) {
      this.contents.fillRect(
        rect.x + 210,
        rect.y + 37 + PL_OFFSET_Y,
        BBSWTF4,
        26,
        this.textColor(BBSWOutFC)
      );

      this.contents.fillRect(
        rect.x + 210,
        rect.y + 35 + PL_OFFSET_Y,
        276,
        2,
        this.textColor(BBSWOutFC)
      );
      this.contents.fillRect(
        rect.x + 210,
        rect.y + 63 + PL_OFFSET_Y,
        276,
        2,
        this.textColor(BBSWOutFC)
      );
      this.contents.fillRect(
        rect.x + 484,
        rect.y + 37 + PL_OFFSET_Y,
        2,
        26,
        this.textColor(BBSWOutFC)
      );
    }
    this.contents.paintOpacity = 255;
    //-----------------------------------------------------------------------------
    this.resetTextColor();
    if (this._mode === "load") {
      this.changePaintOpacity(valid);
    }

    this.drawFileId(id, rect.x, rect.y);
    if (info) {
      this.changePaintOpacity(valid);
      this.drawContents(info, rect, valid);
      this.changePaintOpacity(true);
    }
  };
  var _Window_SavefileList_prototype_drawContents =
    Window_SavefileList.prototype.drawContents;
  Window_SavefileList.prototype.drawContents = function (info, rect, valid) {
    var PL_OFFSET_X = 0; // 2023/10/15  項目1～4を右端にしたいなら464だが、枠の描画にもPL_OFFSET_Xをつけること。

    var bottom = rect.y + rect.height;
    if (rect.width >= 420) {
      //項目0------------------------------------------------------------------------
      if (BBSWItem0 == 1) {
        this.drawText(info.title, rect.x + 142, rect.y, BBSWItem0L);
      } else if (BBSWItem0 == 2) {
        this.drawText(info.playtime, rect.x + 142, rect.y, BBSWItem0L);
      } else if (BBSWItem0 == 3) {
        this.drawText(info.mapname, rect.x + 142, rect.y, BBSWItem0L);
      } else if (BBSWItem0 == 4) {
        this.drawText(
          info.gold + TextManager.currencyUnit,
          rect.x + 142,
          rect.y,
          BBSWItem0L
        );
      } else if (BBSWItem0 == 5) {
        this.drawText(info.savecount, rect.x + 142, rect.y, 312);
      } else if (BBSWItem0 == 6) {
        this.drawText(info.value1 + BBSWV1u, rect.x + 142, rect.y, BBSWItem0L);
      } else if (BBSWItem0 == 7) {
        this.drawText(info.value2 + BBSWV2u, rect.x + 142, rect.y, BBSWItem0L);
      } else if (BBSWItem0 == 8) {
        this.drawText(info.value3 + BBSWV3u, rect.x + 142, rect.y, BBSWItem0L);
      } else if (BBSWItem0 == 9) {
        this.drawText(info.value4 + BBSWV4u, rect.x + 142, rect.y, BBSWItem0L);
      } else {
      }
      //-----------------------------------------------------------------------------
      if (valid) {
        this.drawPartyCharacters(info, rect.x + 25, bottom - BBSWCPY); //-6 -12 -20
        //レベル表示-------------------------------------------------------------------
        if (BBSWLOO == 1) {
          this.contents.fontSize = 16;
          this.drawText(
            TextManager.levelA + " " + info.level1,
            rect.x + 5,
            rect.y + BBSWLPY,
            40
          ); //72 23
          if (info.characters.length == 2) {
            this.drawText(
              TextManager.levelA + " " + info.level2,
              rect.x + 5 + 48,
              rect.y + BBSWLPY,
              40
            );
          }
          if (info.characters.length == 3) {
            this.drawText(
              TextManager.levelA + " " + info.level2,
              rect.x + 5 + 48,
              rect.y + BBSWLPY,
              40
            );
            this.drawText(
              TextManager.levelA + " " + info.level3,
              rect.x + 5 + 48 + 48,
              rect.y + BBSWLPY,
              40
            );
          }
          if (info.characters.length >= 4) {
            this.drawText(
              TextManager.levelA + " " + info.level2,
              rect.x + 5 + 48,
              rect.y + BBSWLPY,
              40
            );
            this.drawText(
              TextManager.levelA + " " + info.level3,
              rect.x + 5 + 48 + 48,
              rect.y + BBSWLPY,
              40
            );
            this.drawText(
              TextManager.levelA + " " + info.level4,
              rect.x + 5 + 48 + 48 + 48,
              rect.y + BBSWLPY,
              40
            );
          }

          this.contents.fontSize = 20;
        }
        //-----------------------------------------------------------------------------
      }
    }
    var lineHeight = this.lineHeight();
    var y2 = bottom - lineHeight;
    if (y2 >= lineHeight) {
      //項目1 右下-------------------------------------------------------------------
      this.drawText(
        BBSWItem1T,
        rect.x + 495 + PL_OFFSET_X,
        y2 - 2,
        BBSWTF1 - 10
      );
      if (BBSWItem1 == 1) {
        this.drawText(
          info.title,
          rect.x + 495 + BBSWTF1 + PL_OFFSET_X,
          y2 - 2,
          266 - BBSWTF1,
          "right"
        ); //rect.x - 7, y2 - 2, rect.width
      } else if (BBSWItem1 == 2) {
        this.drawText(
          info.playtime,
          rect.x + 495 + BBSWTF1 + PL_OFFSET_X,
          y2 - 2,
          266 - BBSWTF1,
          "right"
        );
      } else if (BBSWItem1 == 3) {
        this.drawText(
          info.mapname,
          rect.x + 495 + BBSWTF1 + PL_OFFSET_X,
          y2 - 2,
          266 - BBSWTF1,
          "right"
        );
      } else if (BBSWItem1 == 4) {
        this.drawText(
          info.gold + TextManager.currencyUnit,
          rect.x + 495 + BBSWTF1 + PL_OFFSET_X,
          y2 - 2,
          266 - BBSWTF1,
          "right"
        );
      } else if (BBSWItem1 == 5) {
        this.drawText(
          info.savecount,
          rect.x + 495 + BBSWTF1 + PL_OFFSET_X,
          y2 - 2,
          266 - BBSWTF1,
          "right"
        );
      } else if (BBSWItem1 == 6) {
        this.drawText(
          info.value1 + BBSWV1u,
          rect.x + 495 + BBSWTF1 + PL_OFFSET_X,
          y2 - 2,
          266 - BBSWTF1,
          "right"
        );
      } else if (BBSWItem1 == 7) {
        this.drawText(
          info.value2 + BBSWV2u,
          rect.x + 495 + BBSWTF1 + PL_OFFSET_X,
          y2 - 2,
          266 - BBSWTF1,
          "right"
        );
      } else if (BBSWItem1 == 8) {
        this.drawText(
          info.value3 + BBSWV3u,
          rect.x + 495 + BBSWTF1 + PL_OFFSET_X,
          y2 - 2,
          266 - BBSWTF1,
          "right"
        );
      } else if (BBSWItem1 == 9) {
        this.drawText(
          info.value4 + BBSWV4u,
          rect.x + 495 + BBSWTF1 + PL_OFFSET_X,
          y2 - 2,
          266 - BBSWTF1,
          "right"
        );
      } else {
      }
      //-----------------------------------------------------------------------------
      //項目2 右上-------------------------------------------------------------------
      this.drawText(
        BBSWItem2T,
        rect.x + 495 + PL_OFFSET_X,
        y2 - 34,
        BBSWTF2 - 10
      );
      if (BBSWItem2 == 1) {
        this.drawText(
          info.title,
          rect.x + 495 + BBSWTF2 + PL_OFFSET_X,
          y2 - 34,
          266 - BBSWTF2,
          "right"
        ); //rect.x - 7, y2 - 34, rect.width
      } else if (BBSWItem2 == 2) {
        this.drawText(
          info.playtime,
          rect.x + 495 + BBSWTF2 + PL_OFFSET_X,
          y2 - 34,
          266 - BBSWTF2,
          "right"
        );
      } else if (BBSWItem2 == 3) {
        this.drawText(
          info.mapname,
          rect.x + 495 + BBSWTF2 + PL_OFFSET_X,
          y2 - 34,
          266 - BBSWTF2,
          "right"
        );
      } else if (BBSWItem2 == 4) {
        this.drawText(
          info.gold + TextManager.currencyUnit,
          rect.x + 495 + BBSWTF2 + PL_OFFSET_X,
          y2 - 34,
          266 - BBSWTF2,
          "right"
        );
      } else if (BBSWItem2 == 5) {
        this.drawText(
          info.savecount,
          rect.x + 495 + BBSWTF2 + PL_OFFSET_X,
          y2 - 34,
          266 - BBSWTF2,
          "right"
        );
      } else if (BBSWItem2 == 6) {
        this.drawText(
          info.value1 + BBSWV1u,
          rect.x + 495 + BBSWTF2 + PL_OFFSET_X,
          y2 - 34,
          266 - BBSWTF2,
          "right"
        );
      } else if (BBSWItem2 == 7) {
        this.drawText(
          info.value2 + BBSWV2u,
          rect.x + 495 + BBSWTF2 + PL_OFFSET_X,
          y2 - 34,
          266 - BBSWTF2,
          "right"
        );
      } else if (BBSWItem2 == 8) {
        this.drawText(
          info.value3 + BBSWV3u,
          rect.x + 495 + BBSWTF2 + PL_OFFSET_X,
          y2 - 34,
          266 - BBSWTF2,
          "right"
        );
      } else if (BBSWItem2 == 9) {
        this.drawText(
          info.value4 + BBSWV4u,
          rect.x + 495 + BBSWTF2 + PL_OFFSET_X,
          y2 - 34,
          266 - BBSWTF2,
          "right"
        );
      } else {
      }
      //-----------------------------------------------------------------------------
      //項目3 左下-------------------------------------------------------------------
      this.drawText(
        BBSWItem3T,
        rect.x + 215 + PL_OFFSET_X,
        y2 - 2,
        BBSWTF3 - 10
      );
      if (BBSWItem3 == 1) {
        this.drawText(
          info.title,
          rect.x + 215 + BBSWTF3 + PL_OFFSET_X,
          y2 - 2,
          266 - BBSWTF3,
          "right"
        ); //rect.x - 287, y2 - 2, rect.width
      } else if (BBSWItem3 == 2) {
        this.drawText(
          info.playtime,
          rect.x + 215 + BBSWTF3 + PL_OFFSET_X,
          y2 - 2,
          266 - BBSWTF3,
          "right"
        );
      } else if (BBSWItem3 == 3) {
        this.drawText(
          info.mapname,
          rect.x + 215 + BBSWTF3 + PL_OFFSET_X,
          y2 - 2,
          266 - BBSWTF3,
          "right"
        );
      } else if (BBSWItem3 == 4) {
        this.drawText(
          info.gold + TextManager.currencyUnit,
          rect.x + 215 + BBSWTF3 + PL_OFFSET_X,
          y2 - 2,
          266 - BBSWTF3,
          "right"
        );
      } else if (BBSWItem3 == 5) {
        this.drawText(
          info.savecount,
          rect.x + 215 + BBSWTF3 + PL_OFFSET_X,
          y2 - 2,
          266 - BBSWTF3,
          "right"
        );
      } else if (BBSWItem3 == 6) {
        this.drawText(
          info.value1 + BBSWV1u,
          rect.x + 215 + BBSWTF3 + PL_OFFSET_X,
          y2 - 2,
          266 - BBSWTF3,
          "right"
        );
      } else if (BBSWItem3 == 7) {
        this.drawText(
          info.value2 + BBSWV2u,
          rect.x + 215 + BBSWTF3 + PL_OFFSET_X,
          y2 - 2,
          266 - BBSWTF3,
          "right"
        );
      } else if (BBSWItem3 == 8) {
        this.drawText(
          info.value3 + BBSWV3u,
          rect.x + 215 + BBSWTF3 + PL_OFFSET_X,
          y2 - 2,
          266 - BBSWTF3,
          "right"
        );
      } else if (BBSWItem3 == 9) {
        this.drawText(
          info.value4 + BBSWV4u,
          rect.x + 215 + BBSWTF3 + PL_OFFSET_X,
          y2 - 2,
          266 - BBSWTF3,
          "right"
        );
      } else {
      }
      //-----------------------------------------------------------------------------
      //項目4 左上-------------------------------------------------------------------
      this.drawText(
        BBSWItem4T,
        rect.x + 215 + PL_OFFSET_X,
        y2 - 34,
        BBSWTF4 - 10
      );
      if (BBSWItem4 == 1) {
        this.drawText(
          info.title,
          rect.x + 215 + BBSWTF4 + PL_OFFSET_X,
          y2 - 34,
          266 - BBSWTF4,
          "right"
        ); //rect.x - 287, y2 - 34, rect.width
      } else if (BBSWItem4 == 2) {
        this.drawText(
          info.playtime,
          rect.x + 215 + BBSWTF4 + PL_OFFSET_X,
          y2 - 34,
          266 - BBSWTF4,
          "right"
        );
      } else if (BBSWItem4 == 3) {
        this.drawText(
          info.mapname,
          rect.x + 215 + BBSWTF4 + PL_OFFSET_X,
          y2 - 34,
          266 - BBSWTF4,
          "right"
        );
      } else if (BBSWItem4 == 4) {
        this.drawText(
          info.gold + TextManager.currencyUnit,
          rect.x + 215 + BBSWTF4 + PL_OFFSET_X,
          y2 - 34,
          266 - BBSWTF4,
          "right"
        );
      } else if (BBSWItem4 == 5) {
        this.drawText(
          info.savecount,
          rect.x + 215 + BBSWTF4 + PL_OFFSET_X,
          y2 - 34,
          266 - BBSWTF4,
          "right"
        );
      } else if (BBSWItem4 == 6) {
        this.drawText(
          info.value1 + BBSWV1u,
          rect.x + 215 + BBSWTF4 + PL_OFFSET_X,
          y2 - 34,
          266 - BBSWTF4,
          "right"
        );
      } else if (BBSWItem4 == 7) {
        this.drawText(
          info.value2 + BBSWV2u,
          rect.x + 215 + BBSWTF4 + PL_OFFSET_X,
          y2 - 34,
          266 - BBSWTF4,
          "right"
        );
      } else if (BBSWItem4 == 8) {
        this.drawText(
          info.value3 + BBSWV3u,
          rect.x + 215 + BBSWTF4 + PL_OFFSET_X,
          y2 - 34,
          266 - BBSWTF4,
          "right"
        );
      } else if (BBSWItem4 == 9) {
        this.drawText(
          info.value4 + BBSWV4u,
          rect.x + 215 + BBSWTF4 + PL_OFFSET_X,
          y2 - 34,
          266 - BBSWTF4,
          "right"
        );
      } else {
      }
      //-----------------------------------------------------------------------------
      //項目5 上部-------------------------------------------------------------------
      var L5 = 609 - BBSWItem0L;
      if (BBSWItem5 == 1) {
        this.drawText(
          info.title,
          rect.x + 160 + BBSWItem0L,
          rect.y,
          L5,
          "right"
        ); //rect.x + 455, rect.y, 312,
      } else if (BBSWItem5 == 2) {
        this.drawText(
          info.playtime,
          rect.x + 160 + BBSWItem0L,
          rect.y,
          L5,
          "right"
        );
      } else if (BBSWItem5 == 3) {
        this.drawText(
          info.mapname,
          rect.x + 160 + BBSWItem0L,
          rect.y,
          L5,
          "right"
        );
      } else if (BBSWItem5 == 4) {
        this.drawText(
          info.gold + TextManager.currencyUnit,
          rect.x + 160 + BBSWItem0L,
          rect.y,
          L5,
          "right"
        );
      } else if (BBSWItem5 == 5) {
        this.drawText(
          info.savecount,
          rect.x + 160 + BBSWItem0L,
          rect.y,
          L5,
          "right"
        );
      } else if (BBSWItem5 == 6) {
        this.drawText(
          info.value1 + BBSWV1u,
          rect.x + 160 + BBSWItem0L,
          rect.y,
          L5,
          "right"
        );
      } else if (BBSWItem5 == 7) {
        this.drawText(
          info.value2 + BBSWV2u,
          rect.x + 160 + BBSWItem0L,
          rect.y,
          L5,
          "right"
        );
      } else if (BBSWItem5 == 8) {
        this.drawText(
          info.value3 + BBSWV3u,
          rect.x + 160 + BBSWItem0L,
          rect.y,
          L5,
          "right"
        );
      } else if (BBSWItem5 == 9) {
        this.drawText(
          info.value4 + BBSWV4u,
          rect.x + 160 + BBSWItem0L,
          rect.y,
          L5,
          "right"
        );
      } else {
      }
      //-----------------------------------------------------------------------------
    }
  };

  var _Window_SavefileList_prototype_drawFileId =
    Window_SavefileList.prototype.drawFileId;
  Window_SavefileList.prototype.drawFileId = function (id, x, y) {
    this.drawText(TextManager.file + " " + id, x, y, 120);
  };
})();


code:
//=============================================================================
// BattleEffectPopup.js
// ----------------------------------------------------------------------------
// Copyright (c) 2015 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.7.1 2017/08/03 YEP_BattleEngineCore.jsと併用したときに、メッセージの種類によってポップアップ位置が変化する問題を修正
// 1.7.0 2017/06/13 行動がガード（耐性によって完全に防がれた）された場合のポップアップを追加
// 1.6.0 2017/06/10 行動が無効だった場合のポップアップを追加
// 1.5.1 2017/06/10 自動戦闘が有効なアクターがいる場合に一部機能が正常に動作しない問題を修正
// 1.5.0 2017/05/30 弱点と耐性のポップアップで弱点や耐性と見なすための閾値を設定できる機能を追加
// 1.4.0 2017/05/20 CounterExtend.jsとの併用でスキルによる反撃が表示されない問題を修正。
//                  ポップアップのイタリック体および縁取り表示を行う機能を追加。
// 1.3.1 2016/12/18 VE_BasicModule.jsとの競合を解消
// 1.3.0 2016/07/14 アクターと敵キャラの通常ダメージにも専用のフラッシュ色を指定できるようになりました。
// 1.2.3 2016/07/13 1.2.2の修正が不完全だったのを対応
// 1.2.2 2016/07/13 YEP_BattleEngineCore.jsと併用したときに、Missが重複して表示される現象を修正
// 1.2.1 2016/07/12 Z座標を指定しているプラグインとの競合を解消するかもしれない
// 1.2.0 2016/07/10 行動失敗時(Miss!)も任意の文字または画像に置き換えられるようになりました。
// 1.1.0 2016/07/09 ポップアップに任意の画像を指定できるようになりました。
//                  フラッシュするフレーム数を指定できるようになりました。
// 1.0.0 2016/07/06 初版
// ----------------------------------------------------------------------------
// [Blog]   : http://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc 戦闘行動結果ポップアッププラグイン
 * @author トリアコンタン
 *
 * @param クリティカル
 * @desc クリティカル発生時のポップアップメッセージまたはファイル名です。(img/pictures/)拡張子不要
 * @default CRITICAL!
 * @require 1
 * @dir img/pictures/
 * @type file
 *
 * @param クリティカルカラー
 * @desc クリティカル発生時の文字のフラッシュ色です。R(赤),G(緑),B(青),A(強さ)の順番でカンマ(,)区切りで指定。
 * @default 255,0,0,255
 *
 * @param 回避
 * @desc 回避発生時のポップアップメッセージまたはファイル名です。
 * @default Avoid!
 * @require 1
 * @dir img/pictures/
 * @type file
 *
 * @param 回避カラー
 * @desc 回避発生時の文字のフラッシュ色です。
 * @default 0,128,255,255
 *
 * @param ミス
 * @desc ミス発生時のポップアップメッセージまたはファイル名です。通常のMissは表示されなくなります。
 * @default Miss!
 * @require 1
 * @dir img/pictures/
 * @type file
 *
 * @param ミスカラー
 * @desc ミス発生時の文字のフラッシュ色です。
 * @default 0,0,0,0
 *
 * @param 無効
 * @desc 行動が無効（行動は成功したが有効な効果がなかった）だった時のポップアップメッセージまたはファイル名です。
 * @default Invalid!
 * @require 1
 * @dir img/pictures/
 * @type file
 *
 * @param 無効カラー
 * @desc 無効発生時の文字のフラッシュ色です。
 * @default 0,0,0,0
 *
 * @param ガード
 * @desc 行動がガード（行動は成功したが相手の耐性によって完全に防がれた）された時のポップアップメッセージまたはファイル名です。
 * @default Guard!
 * @require 1
 * @dir img/pictures/
 * @type file
 *
 * @param ガードカラー
 * @desc ガード発生時の文字のフラッシュ色です。
 * @default 0,128,255,255
 *
 * @param 魔法反射
 * @desc 魔法反射時のポップアップメッセージまたはファイル名です。
 * @default Reflection!
 * @require 1
 * @dir img/pictures/
 * @type file
 *
 * @param 魔法反射カラー
 * @desc 魔法反射発生時の文字のフラッシュ色です。
 * @default 0,128,255,255
 *
 * @param 反撃
 * @desc 反撃時のポップアップメッセージまたはファイル名です。
 * @default Counter!
 * @require 1
 * @dir img/pictures/
 * @type file
 *
 * @param 反撃カラー
 * @desc 反撃発生時の文字のフラッシュ色です。
 * @default 0,128,255,255
 *
 * @param 弱点
 * @desc 弱点時のポップアップメッセージまたはファイル名です。
 * @default Weakness!
 * @require 1
 * @dir img/pictures/
 * @type file
 *
 * @param 弱点カラー
 * @desc 弱点発生時の文字のフラッシュ色です。
 * @default 0,255,128,255
 *
 * @param 弱点閾値
 * @desc この値以上なら弱点と見なします。百分率で指定します。
 * @default 200
 *
 * @param 耐性
 * @desc 弱点時のポップアップメッセージまたはファイル名です。
 * @default Resistance!
 * @require 1
 * @dir img/pictures/
 * @type file
 *
 * @param 耐性カラー
 * @desc 耐性発生時の文字のフラッシュ色です。
 * @default 0,0,128,255
 *
 * @param 耐性閾値
 * @desc この値以下なら耐性と見なします。百分率で指定します。
 * @default 50
 *
 * @param 味方ダメージカラー
 * @desc アクターダメージのフラッシュ色です。
 * @default 0,0,0,0
 *
 * @param 敵ダメージカラー
 * @desc 敵キャラダメージのフラッシュ色です。
 * @default 0,0,0,0
 *
 * @param フォントサイズ
 * @desc ポップアップのフォントサイズです。
 * @default 42
 *
 * @param メッセージ最大幅
 * @desc ポップアップメッセージの最大幅です。
 * @default 240
 *
 * @param フラッシュ時間
 * @desc フラッシュカラーがフェードアウトするまでのフレーム数です。
 * @default 60
 *
 * @param X座標補正
 * @desc X座標の補正値です。
 * @default 0
 *
 * @param Y座標補正
 * @desc Y座標の補正値です。
 * @default -40
 *
 * @param イタリック表示
 * @desc ポップアップがイタリック体で表示されます。
 * @default OFF
 *
 * @param 縁取り表示
 * @desc ポップアップが縁取り表示されます。
 * @default OFF
 *
 * @param 画像使用
 * @desc 各種ポップアップに任意のピクチャ(img/pictures)を使用します。メッセージの代わりにファイル名を入力してください。
 * @default OFF
 *
 * @noteParam BEPメッセージ
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData items
 *
 * @help 戦闘中に行動の結果のメッセージをポップアップします。
 * ポップアップするのは動的に作成した文字列もしくは用意したピクチャです。
 * 表示条件は以下の通りです。
 *
 * ・失敗（通常のMissは表示されなくなります）
 * ・回避（通常のMissは表示されなくなります）
 * ・無効（行動は成功したが有効な効果がなかった）
 * ・ガード（行動は成功したが相手の耐性によって完全に防がれた）
 * ・クリティカル
 * ・反撃
 * ・魔法反射
 * ・弱点（ダメージ倍率が1.0を上回った場合）
 * ・耐性（ダメージ倍率が1.0を下回った場合）
 * ・ステート付与（ステートごとに設定できます）
 * ・コモンイベント（プラグインコマンドから実行します）
 *
 * ※ガードが表示されるのは、ステート有効度もしくは属性有効度が0%の効果が
 * 存在し、かつ他に有効な効果がない場合です。
 * なお、「ステート無効化」で防がれた場合は表示されません。
 *
 * また、ポップアップ時にフラッシュカラーを指定することができます。
 * フラッシュカラーの指定は「赤」「緑」「青」「強さ」の順番で
 * カンマ区切りで指定してください。
 *
 * ステート付与時にメッセージをポップアップをしたい場合
 * ステートのメモ欄に以下の通り指定してください。
 * <BEPメッセージ:state>       # 付加時にメッセージ「state」が表示されます。
 *                             # 画像使用が有効な場合はファイル名を指定します。
 * <BEPカラー:255,255,255,255> # 付加時のフラッシュカラーを指定します。
 *
 * さらに、プラグインコマンドから任意の文字列を自由にポップアップできます。
 * このコマンドはバトルイベントのみ使用可能です。
 *
 * プラグインコマンド詳細
 *  イベントコマンド「プラグインコマンド」から実行。
 *  （パラメータの間は半角スペースで区切る）
 *
 * BEP対象者ポップアップ message 255,0,0,255 # 行動の対象者にmessageがポップ。
 * BEP_TARGET_POPUP message 255,0,0,255      # 上と同じ
 *
 * BEP使用者ポップアップ message 255,0,0,255 # 行動の使用者にmessageがポップ。
 * BEP_USER_POPUP message 255,0,0,255        # 上と同じ
 *
 * ※画像使用が有効な場合はファイル名を指定します。
 *
 * 競合に関する情報
 * 当プラグインは以下のプラグインより下に配置してください。
 *
 * YEP_BattleEngineCore.js
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function () {
  "use strict";
  var pluginName = "BattleEffectPopup";
  var metaTagPrefix = "BEP";

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

  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 getParamString = function (paramNames) {
    var value = getParamOther(paramNames);
    return value === null ? "" : value;
  };

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

  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 getParamArrayString = function (paramNames) {
    var values = getParamString(paramNames).split(",");
    for (var i = 0; i < values.length; i++) values[i] = values[i].trim();
    return values;
  };

  var getParamArrayNumber = function (paramNames, min, max) {
    var values = getParamArrayString(paramNames);
    if (arguments.length < 2) min = -Infinity;
    if (arguments.length < 3) max = Infinity;
    for (var i = 0; i < values.length; i++) {
      if (!isNaN(parseInt(values[i], 10))) {
        values[i] = (parseInt(values[i], 10) || 0).clamp(min, max);
      } else {
        values.splice(i--, 1);
      }
    }
    return values;
  };

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

  var getArgArrayNumber = function (args, min, max) {
    var values = getArgArrayString(args, false);
    if (arguments.length < 2) min = -Infinity;
    if (arguments.length < 3) max = Infinity;
    for (var i = 0; i < values.length; i++)
      values[i] = (parseInt(values[i], 10) || 0).clamp(min, max);
    return values;
  };

  var getArgArrayString = function (args, upperFlg) {
    var values = getArgString(args, upperFlg).split(",");
    for (var i = 0; i < values.length; i++) values[i] = values[i].trim();
    return values;
  };

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

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

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

  //=============================================================================
  // パラメータの取得と整形
  //=============================================================================
  var paramCritical = getParamString(["Critical", "クリティカル"]);
  var paramCriticalColor = getParamArrayNumber(
    ["CriticalColor", "クリティカルカラー"],
    0,
    256
  );
  var paramAvoid = getParamString(["Avoid", "回避"]);
  var paramAvoidColor = getParamArrayNumber(
    ["AvoidColor", "回避カラー"],
    0,
    256
  );
  var paramMiss = getParamString(["Miss", "ミス"]);
  var paramMissColor = getParamArrayNumber(["MissColor", "ミスカラー"], 0, 256);
  var paramInvalid = getParamString(["Invalid", "無効"]);
  var paramInvalidColor = getParamArrayNumber(
    ["InvalidColor", "無効カラー"],
    0,
    256
  );
  var paramGuard = getParamString(["Guard", "ガード"]);
  var paramGuardColor = getParamArrayNumber(
    ["GuardColor", "ガードカラー"],
    0,
    256
  );
  var paramReflection = getParamString(["Reflection", "魔法反射"]);
  var paramReflectionColor = getParamArrayNumber(
    ["ReflectionColor", "魔法反射カラー"],
    0,
    256
  );
  var paramCounter = getParamString(["Counter", "反撃"]);
  var paramCounterColor = getParamArrayNumber(
    ["CounterColor", "反撃カラー"],
    0,
    256
  );
  var paramWeakness = getParamString(["Weakness", "弱点"]);
  var paramWeaknessColor = getParamArrayNumber(
    ["WeaknessColor", "弱点カラー"],
    0,
    256
  );
  var paramWeaknessLine = getParamNumber(["WeaknessLine", "弱点閾値"]);
  var paramResistance = getParamString(["Resistance", "耐性"]);
  var paramResistanceLine = getParamNumber(["ResistanceLine", "耐性閾値"]);
  var paramResistanceColor = getParamArrayNumber(
    ["ResistanceColor", "耐性カラー"],
    0,
    256
  );
  var paramActorDamageColor = getParamArrayNumber(
    ["ActorDamageColor", "味方ダメージカラー"],
    0,
    256
  );
  var paramEnemyDamageColor = getParamArrayNumber(
    ["EnemyDamageColor", "敵ダメージカラー"],
    0,
    256
  );
  var paramFontSize = getParamNumber(["FontSize", "フォントサイズ"], 16, 128);
  var paramMaxWidth = getParamNumber(["MaxWidth", "メッセージ最大幅"], 1);
  var paramFlashDuration = getParamNumber(
    ["FlashDuration", "フラッシュ時間"],
    1
  );
  var paramOffsetX = getParamNumber(["OffsetX", "X座標補正"]);
  var paramOffsetY = getParamNumber(["OffsetY", "Y座標補正"]);
  var paramUsingPicture = getParamBoolean(["UsingPicture", "画像使用"]);
  var paramUsingItalic = getParamBoolean(["UsingItalic", "イタリック表示"]);
  var paramUsingOutline = getParamBoolean(["UsingOutline", "縁取り表示"]);

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

  Game_Interpreter.prototype.pluginCommandBattleEffectPopup = function (
    command,
    args
  ) {
    switch (getCommandName(command)) {
      case "使用者ポップアップ":
      case "_USER_POPUP":
        BattleManager._subject.startMessagePopup(
          getArgString(args[0]),
          getArgArrayNumber(args[1], 0, 256)
        );
        break;
      case "対象者ポップアップ":
      case "_TARGET_POPUP":
        var action = BattleManager._action;
        var unit = action.isForOpponent()
          ? action.opponentsUnit()
          : action.friendsUnit();
        var index = BattleManager._subject._lastTargetIndex;
        var target = unit.members()[index];
        target.startMessagePopup(
          getArgString(args[0]),
          getArgArrayNumber(args[1], 0, 256)
        );
        break;
    }
  };

  //=============================================================================
  // Game_Action
  //  弱点によってポップアップを設定します。
  //=============================================================================
  var _Game_Action_calcElementRate = Game_Action.prototype.calcElementRate;
  Game_Action.prototype.calcElementRate = function (target) {
    var result = _Game_Action_calcElementRate.apply(this, arguments);
    if (BattleManager.isInputting()) return result;
    if (result === 0) {
      target.appointMessagePopup(paramGuard, paramGuardColor);
    } else if (result >= paramWeaknessLine / 100) {
      target.appointMessagePopup(paramWeakness, paramWeaknessColor);
    } else if (result <= paramResistanceLine / 100) {
      target.appointMessagePopup(paramResistance, paramResistanceColor);
    }
    return result;
  };

  //=============================================================================
  // Game_Battler
  //  ポップアップメッセージのリクエストに応答します。
  //=============================================================================
  Game_Battler.prototype.clearMessagePopup = function () {
    this._messagePopup = false;
  };

  Game_Battler.prototype.isMessagePopupRequested = function () {
    return this._messagePopup;
  };

  Game_Battler.prototype.startMessagePopup = function (message, flashColor) {
    if (message) {
      this._messagePopup = true;
      this._message = message;
      this._flashColor = flashColor;
    }
  };

  Game_Battler.prototype.startAppointMessagePopup = function () {
    this.startMessagePopup(this._appointMessage, this._appointFlashColor);
    this._appointMessage = "";
    this._appointFlashColor = null;
  };

  Game_Battler.prototype.appointMessagePopup = function (message, flashColor) {
    this._appointMessage = message;
    this._appointFlashColor = flashColor;
  };

  Game_Battler.prototype.getMessagePopupText = function () {
    return this._message;
  };

  Game_Battler.prototype.getMessagePopupFlashColor = function () {
    return this._flashColor;
  };

  var _Game_Battler_stateRate = Game_Battler.prototype.stateRate;
  Game_Battler.prototype.stateRate = function (stateId) {
    var rate = _Game_Battler_stateRate.apply(this, arguments);
    if (rate === 0) {
      this.result().guarded = true;
    }
    return rate;
  };

  //=============================================================================
  // Game_ActionResult
  //  行動が無効だったかどうかを返します。
  //=============================================================================
  var _Game_ActionResult_clear = Game_ActionResult.prototype.clear;
  Game_ActionResult.prototype.clear = function () {
    _Game_ActionResult_clear.apply(this, arguments);
    this.guarded = false;
  };

  Game_ActionResult.prototype.isInvalid = function () {
    return !this.success && !this.missed && !this.evaded;
  };

  Game_ActionResult.prototype.isGuarded = function () {
    return this.guarded && this.isInvalid();
  };

  //=============================================================================
  // Window_BattleLog
  //  ポップアップメッセージをリクエストします。
  //=============================================================================
  Window_BattleLog.prototype.popupMessage = function (
    target,
    message,
    flashColor
  ) {
    target.startMessagePopup(message, flashColor);
  };

  var _Window_BattleLog_displayDamage =
    Window_BattleLog.prototype.displayDamage;
  Window_BattleLog.prototype.displayDamage = function (target) {
    _Window_BattleLog_displayDamage.apply(this, arguments);
    if (target.result().isGuarded()) {
      this.pushPopupMessage(target, paramGuard, paramGuardColor);
    } else if (target.result().isInvalid()) {
      this.pushPopupMessage(target, paramInvalid, paramInvalidColor);
    }
    target.startAppointMessagePopup();
  };

  var _Window_BattleLog_displayCritical =
    Window_BattleLog.prototype.displayCritical;
  Window_BattleLog.prototype.displayCritical = function (target) {
    _Window_BattleLog_displayCritical.apply(this, arguments);
    if (target.result().critical) {
      this.pushPopupMessage(target, paramCritical, paramCriticalColor);
    }
  };

  var _Window_BattleLog_displayMiss = Window_BattleLog.prototype.displayMiss;
  Window_BattleLog.prototype.displayMiss = function (target) {
    _Window_BattleLog_displayMiss.apply(this, arguments);
    this.popupMiss(target);
  };

  Window_BattleLog.prototype.popupMiss = function (target) {
    this.pushPopupMessage(target, paramMiss, paramMissColor);
  };

  var _Window_BattleLog_displayEvasion =
    Window_BattleLog.prototype.displayEvasion;
  Window_BattleLog.prototype.displayEvasion = function (target) {
    _Window_BattleLog_displayEvasion.apply(this, arguments);
    this.popupEvasion(target);
  };

  Window_BattleLog.prototype.popupEvasion = function (target) {
    this.pushPopupMessage(target, paramAvoid, paramAvoidColor);
  };

  var _Window_BattleLog_displayCounter =
    Window_BattleLog.prototype.displayCounter;
  Window_BattleLog.prototype.displayCounter = function (target) {
    _Window_BattleLog_displayCounter.apply(this, arguments);
    this.popupCounter(target);
  };

  Window_BattleLog.prototype.popupCounter = function (target) {
    this.pushPopupMessage(target, paramCounter, paramCounterColor);
  };

  var _Window_BattleLog_displayReflection =
    Window_BattleLog.prototype.displayReflection;
  Window_BattleLog.prototype.displayReflection = function (target) {
    _Window_BattleLog_displayReflection.apply(this, arguments);
    this.popupReflection(target);
  };

  Window_BattleLog.prototype.popupReflection = function (target) {
    this.pushPopupMessage(target, paramReflection, paramReflectionColor);
  };

  var _Window_BattleLog_displayAddedStates =
    Window_BattleLog.prototype.displayAddedStates;
  Window_BattleLog.prototype.displayAddedStates = function (target) {
    _Window_BattleLog_displayAddedStates.apply(this, arguments);
    target
      .result()
      .addedStateObjects()
      .forEach(function (state) {
        var message = getMetaValues(state, ["Message", "メッセージ"]);
        if (message) {
          var flash = getMetaValues(state, ["FlashColor", "カラー"]);
          if (flash) flash = getArgArrayNumber(flash, 0, 256);
          this.pushPopupMessage(target, getArgString(message), flash);
        }
      }, this);
  };

  Window_BattleLog.prototype.pushPopupMessage = function (
    target,
    message,
    flashColor
  ) {
    this.push("popupMessage", target, message, flashColor);
  };

  //=============================================================================
  // Sprite_Battler
  //  ポップアップメッセージを作成します。
  //=============================================================================
  var _Sprite_Battler_updateDamagePopup =
    Sprite_Battler.prototype.updateDamagePopup;
  Sprite_Battler.prototype.updateDamagePopup = function () {
    this.setupMessagePopup();
    _Sprite_Battler_updateDamagePopup.apply(this, arguments);
  };

  var _Sprite_Battler_pushDamageSprite =
    Sprite_Battler.prototype.pushDamageSprite;
  Sprite_Battler.prototype.pushDamageSprite = function (sprite) {
    var damage = this._damages;
    this._damages = this._damages.filter(function (sprite) {
      return !sprite.isMessage();
    });
    _Sprite_Battler_pushDamageSprite.apply(this, arguments);
    damage.push(sprite);
    this._damages = damage;
  };

  Sprite_Battler.prototype.setupMessagePopup = function () {
    if (this._battler.isMessagePopupRequested()) {
      if (this._battler.isSpriteVisible()) {
        var sprite = new Sprite_PopupMessage();
        sprite.x = this.x + this.messageOffsetX();
        sprite.y = this.y + this.messageOffsetY();
        sprite.setup(this._battler);
        if (!sprite.z) {
          this.setZPositionOfPopup(sprite);
        }
        this._damages.push(sprite);
        this.parent.addChild(sprite);
      }
      this._battler.clearMessagePopup();
    }
  };

  Sprite_Battler.prototype.setZPositionOfPopup = function (sprite) {
    if (this.z > 0) sprite.z = this.z + 10;
    if (this._mainSprite && this._mainSprite.z > 0)
      sprite.z = this._mainSprite.z + 10;
  };

  Sprite_Battler.prototype.messageOffsetX = function () {
    return paramOffsetX;
  };

  Sprite_Battler.prototype.messageOffsetY = function () {
    return paramOffsetY;
  };

  //=============================================================================
  // Sprite_Damage
  //  回避メッセージが有効な場合のミス表示を抑制します。
  //=============================================================================
  var _Sprite_Damage_setup = Sprite_Damage.prototype.setup;
  Sprite_Damage.prototype.setup = function (target) {
    // for YEP_BattleEngineCore.js
    var result = target.shiftDamagePopup
      ? target.shiftDamagePopup()
      : target.result();
    if ((!result.evaded || !paramAvoid) && (!result.missed || !paramMiss)) {
      if (target.shiftDamagePopup) {
        target._damagePopup.unshift(result);
      }
      _Sprite_Damage_setup.apply(this, arguments);
    }
    this.setupFlash(result, target);
  };

  Sprite_Damage.prototype.setupFlash = function (result, target) {
    if (!result.missed && !result.evaded && result.hpAffected) {
      var color =
        target instanceof Game_Actor
          ? paramActorDamageColor
          : paramEnemyDamageColor;
      if (color && color.length > 0) this.setupFlashEffect(color);
    }
  };

  Sprite_Damage.prototype.setupFlashEffect = function (flashColor, duration) {
    this._flashColor = flashColor.clone();
    this._flashDuration = duration || paramFlashDuration;
  };

  Sprite_Damage.prototype.isMessage = function () {
    return false;
  };

  //=============================================================================
  // Sprite_PopupMessage
  //  ポップアップメッセージを表示するスプライトです。
  //=============================================================================
  function Sprite_PopupMessage() {
    this.initialize.apply(this, arguments);
  }

  Sprite_PopupMessage.prototype = Object.create(Sprite_Damage.prototype);
  Sprite_PopupMessage.prototype.constructor = Sprite_PopupMessage;

  Sprite_PopupMessage.prototype.setup = function (target) {
    var text = target.getMessagePopupText();
    var bitmap = paramUsingPicture
      ? this.setupStaticText(text)
      : this.setupDynamicText(text);
    var sprite = this.createChildSprite();
    sprite.bitmap = bitmap;
    sprite.dy = 0;
    var flashColor = target.getMessagePopupFlashColor();
    if (flashColor) {
      this.setupFlashEffect(flashColor);
    }
  };

  Sprite_PopupMessage.prototype.setupDynamicText = function (text) {
    var bitmap = new Bitmap(paramMaxWidth, paramFontSize + 8);
    bitmap.fontSize = paramFontSize;
    if (paramUsingItalic) {
      bitmap.fontItalic = true;
    }
    if (paramUsingOutline) {
      bitmap.outlineWidth = Math.floor(bitmap.fontSize / 6);
      bitmap.outlineColor = "gray";
    }
    bitmap.drawText(text, 0, 0, bitmap.width, bitmap.height, "center");
    return bitmap;
  };

  Sprite_PopupMessage.prototype.setupStaticText = function (textPicture) {
    return ImageManager.loadPicture(textPicture, 0);
  };

  Sprite_PopupMessage.prototype.isMessage = function () {
    return true;
  };
})();

repo_name: dazed/translations

license: unknown


code:
//=============================================================================
// BattlebustPict.js
//=============================================================================

/*:ja
 * @plugindesc ver1.02 バトル中のピクチャ表示
 * @author まっつＵＰ
 *
 * @param startId
 * @desc ピクチャの開始ID
 * @type number
 * @min 1
 * @max 100
 * @default 50
 *
 * @param middying
 * @desc デフォルトとは別のピンチ基準。
 * デフォルトのピンチ基準も使うことに注意。
 * @type number
 * @min 1
 * @max 99
 * @default 50
 *
 * @param orizin
 * @desc ピクチャの原点
 * 0・・・左上 1・・・中央
 * @type number
 * @min 0
 * @max 1
 * @default 1
 *
 * @param pictX
 * @desc ピクチャのx座標
 * @type number
 * @min 1
 * @max 2000
 * @default 600
 *
 * @param pictY
 * @desc ピクチャのy座標
 * @type number
 * @min 1
 * @max 2000
 * @default 350
 *
 * @param scaleX
 * @desc ピクチャのx拡大率
 * @type number
 * @min -1000
 * @max 1000
 * @default 100
 *
 * @param scaleY
 * @desc ピクチャのy拡大率
 * @type number
 * @min -1000
 * @max 1000
 * @default 100
 *
 * @param equipX
 * @desc スロットごとのx座標
 * ヘルプ参照
 * @default 0 0 0 0 0 0
 *
 * @param equipY
 * @desc スロットごとのy座標
 * ヘルプ参照
 * @default 0 0 0 0 0 0
 *
 * @param indexaddX
 * @desc アクターのindex(先頭は0)に
 * この数をかけてx座標を算出します
 * @type number
 * @min 1
 * @max 1000
 * @default 150
 *
 * @param dyingtone
 * @desc 戦闘不能のアクターのピクチャを
 * 表示させるときの黒さの強さ(0だと無効です)
 * @type number
 * @min 0
 * @max 255
 * @default 64
 *
 * @help
 *
 * RPGで笑顔を・・・
 *
 * このヘルプとパラメータの説明をよくお読みになってからお使いください。
 *
 * アクター・武器・防具のノートタグ
 * <BPnormal:x>　通常時
 * <BPdying:x>　瀕死時
 * <BPmiddying:x>　パラメータ指定瀕死時
 * xはファイル名、(:とのスペースは無しでお願いします)
 *
 * 例<BPnormal:aaa>
 * 通常時aaa.pngのファイルをピクチャで表示します。
 *
 * アクターのノートタグ
 * <BPnoequip>
 * このアクターは装備による差分を表示しません。
 *
 * equipXはスロットのindexごとにx座標を指定します。
 * 数値と数値の間は半角スペースを一つだけあけてください。
 * 装備スロットの数だけ数値を増やしてください。
 * 0を指定したスロットindexではピクチャの取得・表示を行いません。
 *
 * 例：0 0 600 600 0
 * 装備できる装備品が5つでその順が「武器、盾、頭、体、飾」の場合
 * 頭、体のピクチャのx座標を600とします。
 *
 * equipYも設定方法は同様ですが
 * こちらは0を指定してもピクチャの取得・表示の分岐を行いません。
 *
 * indexaddXは
 * 実質バトルメンバー数が2以上の時に機能します。
 *
 * ピクチャのIDは
 * アクターの設定のピクチャ
 * startId + アクターのindex * 10
 *
 * アクターの装備のピクチャ
 * アクターの設定のピクチャ + 装備スロットindex + 1
 *
 * となります。
 *
 * ピクチャの原点は
 * イベントコマンド「ピクチャの表示」と同じ扱いです。
 *
 * 表示するピクチャの優先度は
 * dying > middying > normal
 * です。
 *
 * このプラグインを利用する場合は
 * readmeなどに「まっつＵＰ」の名を入れてください。
 * また、素材のみの販売はダメです。
 * 上記以外の規約等はございません。
 * もちろんツクールMVで使用する前提です。
 * 何か不具合ありましたら気軽にどうぞ。
 *
 * ver1.01 装備差分対応、パラメータを増加。
 * ver1.02 戦闘不能時の処理追加
 *
 * 免責事項：
 * このプラグインを利用したことによるいかなる損害も制作者は一切の責任を負いません。
 *
 */

(function () {
  var parameters = PluginManager.parameters("BattlebustPict");
  var BPstartId = Number(parameters["startId"] || 50);
  var BPmiddying = Number(parameters["middying"] || 50) / 100;
  var BPorizin = Number(parameters["orizin"] || 1);
  var BPpictX = Number(parameters["pictX"] || 600);
  var BPpictY = Number(parameters["pictY"] || 350);
  var BPscaleX = Number(parameters["scaleX"] || 100);
  var BPscaleY = Number(parameters["scaleY"] || 100);
  //ループ計算用変数の先定義
  var calconly = 0;
  var BPequipX = String(parameters["equipX"]);
  BPequipX = BPequipX.split(" ");
  for (var i = 0; i < BPequipX.length; ++i) {
    calconly = Number(BPequipX[i] || 0);
    BPequipX[i] = Math.abs(calconly);
  }

  var BPequipY = String(parameters["equipY"]);
  BPequipY = BPequipY.split(" ");
  for (var i = 0; i < BPequipY.length; ++i) {
    calconly = Number(BPequipY[i] || 0);
    BPequipY[i] = Math.abs(calconly);
  }

  var BPindexaddX = Number(parameters["indexaddX"] || 150);
  var BPdyingtone = Number(parameters["dyingtone"] || 64);

  var _BattleManager_refreshStatus = BattleManager.refreshStatus;
  BattleManager.refreshStatus = function () {
    _BattleManager_refreshStatus.call(this);
    $gameParty.TimingUpdateBP();
  };

  Game_Actor.prototype.showstandBP = function (id, name, x, y) {
    if (!name) return;
    $gameScreen.showPicture(
      id,
      name,
      BPorizin,
      x,
      y,
      BPscaleX,
      BPscaleY,
      255,
      0
    );
    if (this.isdyingtone()) {
      var color = -BPdyingtone;
      var tone = [color, color, color, 0];
      $gameScreen.tintPicture(id, tone, 0);
    }
  };

  Game_Actor.prototype.baseidBP = function () {
    return BPstartId + this.index() * 10;
  };

  Game_Actor.prototype.isBPDying = function () {
    return this.isAlive() && this._hp / this.mhp <= BPmiddying;
  };

  Game_Actor.prototype.isdyingtone = function () {
    return this.isDeathStateAffected() && BPdyingtone > 0;
  };

  Game_Actor.prototype.getnotetag = function () {
    var text = "BPnormal";
    if (this.isDying() || this.isDeathStateAffected()) {
      text = "BPdying";
    } else if (this.isBPDying()) {
      text = "BPmiddying";
    }
    return text;
  };

  Game_Actor.prototype.BPnotepict = function (data, text) {
    return data.meta[text];
  };

  Game_Actor.prototype.StandUpdateBP = function (text) {
    var id = this.baseidBP();
    var x = BPpictX + this.index() * BPindexaddX;
    var name = this.BPnotepict(this.actor(), text);
    this.showstandBP(id, name, x, BPpictY);
  };

  Game_Actor.prototype.EquipUpdateBP = function (text) {
    if (this.actor().note.match(/<BPnoequip>/i)) return;
    var id = this.baseidBP();
    var equip = this.equips();
    for (var i = 0; i < BPequipX.length; i++) {
      id++;
      if (BPequipX[i] <= 0 || !equip[i]) continue;
      var x = BPequipX[i] + this.index() * BPindexaddX;
      var y = BPequipY[i];
      var name = this.BPnotepict(equip[i], text);
      this.showstandBP(id, name, x, y);
    }
  };

  //オーバーライド（ここで初めてinBattleがtrueになる）
  var _Game_Unit_onBattleStart = Game_Unit.prototype.onBattleStart;
  Game_Party.prototype.onBattleStart = function () {
    _Game_Unit_onBattleStart.call(this);
    this.TimingUpdateBP();
  };

  Game_Party.prototype.TimingUpdateBP = function () {
    this.members().forEach(function (actor) {
      var text = actor.getnotetag();
      actor.StandUpdateBP(text);
      actor.EquipUpdateBP(text);
    });
  };
})();


code:
//=============================================================================
// ChangeSurpriseRateByDir.js (Individual Specified Plugin)
//=============================================================================
/*:
 * @plugindesc On Symbol Encount System, change surprise rate according to direction.
 * @author Sasuke KANNAZUKI
 *
 * @help
 * This plugin does not provide plugin commands.
 *
 * [Summary]
 * This plugin is the order-made.
 * see https://forum.tkool.jp/index.php?threads/1300/
 * (Japanese page)
 *
 *
 * [License]
 * this plugin is released under MIT license.
 * http://opensource.org/licenses/mit-license.php
 */

/*:ja
 * @plugindesc シンボルエンカウントで、イベントの向きによって先制や不意打ち率を変更します。
 * @author 神無月サスケ
 *
 * @help
 * このプラグインには、プラグインコマンドはありません。
 *
 * ■概要
 * このプラグインは、下記の要望によって作られたオーダーメイドのプラグインです。
 * https://forum.tkool.jp/index.php?threads/1300/
 *
 * 具体的には以下の機能を実装しています。
 * ・「シンボルに背後から接触された場合」に100％の確率で不意打ち
 * ・「シンボルに背後から接触した場合」は100％の確率で先制攻撃
 *
 * ■ライセンス表記
 * このプラグインは MIT ライセンスで配布されます。
 * ご自由にお使いください。
 * http://opensource.org/licenses/mit-license.php
 */

(function () {
  //
  // judge the position and direction of troop event and player
  //
  Game_Character.prototype._isEventAdjacent = function (direction, eventId) {
    var x = $gameMap.roundXWithDirection(this.x, direction);
    var y = $gameMap.roundYWithDirection(this.y, direction);
    return $gameMap.eventsXyNt(x, y).some(function (e) {
      return e.eventId() === eventId && e.direction() === this.direction();
    }, this);
  };

  Game_Character.prototype._isEventThere = function (eventId) {
    return this._isEventAdjacent(this.direction(), eventId);
  };

  Game_Character.prototype._isEventBehind = function (eventId) {
    return this._isEventAdjacent(10 - this.direction(), eventId);
  };

  //
  // change the rate of preemptive and surprise
  //
  var nowBattleHasBegun = function () {
    return BattleManager._phase === "init";
  };

  var _Game_Interpreter_command301 = Game_Interpreter.prototype.command301;
  Game_Interpreter.prototype.command301 = function () {
    var wasInBattle = $gameParty.inBattle();
    _Game_Interpreter_command301.call(this);
    var symbolEventId = this._eventId;
    if (!wasInBattle && nowBattleHasBegun() && $gameTroop.troop()) {
      if ($gamePlayer._isEventThere(symbolEventId)) {
        BattleManager._preemptive = true;
        BattleManager._surprise = false;
      } else if ($gamePlayer._isEventBehind(symbolEventId)) {
        BattleManager._preemptive = false;
        BattleManager._surprise = true;
      }
    }
    return true;
  };
})();


code:
//=============================================================================
// CommonEventBeforeAfterMenu.js ver.1.04
//=============================================================================

/*:
 * @plugindesc メニューを開く直前、または閉じた直後に、指定したコモンイベントを実行します。
 * @author 奏ねこま（おとぶきねこま）
 * @url http://makonet.sakura.ne.jp/rpg_tkool
 * @target MZ
 *
 * @param Common Event ID (before Menu)
 * @desc メニューを開く直前に実行するコモンイベントのIDを指定してください。
 * @default 0
 *
 * @param Common Event ID (after Menu)
 * @desc メニューを閉じた直後に実行するコモンイベントのIDを指定してください。
 * @default 0
 *
 * @help
 * *このプラグインには、プラグインコマンドはありません。
 *
 * ----------------------------------------------------------------------------
 *   本プラグインの利用はRPGツクール/RPG Makerの正規ユーザーに限られます。
 *   商用、非商用、有償、無償、一般向け、成人向けを問わず利用可能です。
 *   ご利用の際に連絡や報告は必要ありません。また、製作者名の記載等も不要です。
 *   プラグインを導入した作品に同梱する形以外での再配布、転載はご遠慮ください。
 *   本プラグインにより生じたいかなる問題についても一切の責任を負いかねます。
 * ----------------------------------------------------------------------------
 *   Version 1.04  2022/08/10  イベントコマンドからメニュー画面を開いた場合に
 *                             コモンイベントが正しく実行されない問題を修正
 *   Version 1.03  2017/04/24  ウェイトを含んだコモンイベントを実行すると、
 *                             イベント後にメニューが開かない問題を修正
 *   Version 1.02  2017/02/13  メニュー後コモンイベントが、マップ以外への
 *                             シーン遷移時にも実行予約されていた問題を修正
 *   Version 1.01  2017/01/05  メニュー後コモンイベントIDを0に設定しても
 *                             コモンイベントの予約が実行されていた問題を修正
 *   Version 1.00  2016/07/21  初版
 * ----------------------------------------------------------------------------
 *                                            Copylight (c) 2022 Nekoma Otobuki
 *                                       http://makonet.sakura.ne.jp/rpg_tkool/
 *                                                https://twitter.com/koma_neko
 */

(function () {
  "use strict";

  const _PNAME = "CommonEventBeforeAfterMenu";
  const _PARAMETERS = PluginManager.parameters(_PNAME);

  const _COMMON_EVENT_ID_BM =
    +_PARAMETERS["Common Event ID (before Menu)"] || 0;
  const _COMMON_EVENT_ID_AM = +_PARAMETERS["Common Event ID (after Menu)"] || 0;

  function _(f) {
    return (f[_PNAME] = f[_PNAME] || {});
  }

  //==============================================================================
  // Scene_Map
  //==============================================================================

  var _Scene_Map_isMenuCalled = Scene_Map.prototype.isMenuCalled;
  Scene_Map.prototype.isMenuCalled = function () {
    return _Scene_Map_isMenuCalled.call(this) || _(this).reserveCallMenu;
  };

  var _Scene_Map_callMenu = Scene_Map.prototype.callMenu;
  Scene_Map.prototype.callMenu = function () {
    if (_COMMON_EVENT_ID_BM && !_(this).reserveCallMenu) {
      _(this).reserveCallMenu = true;
      $gameTemp.reserveCommonEvent(_COMMON_EVENT_ID_BM);
    } else {
      _(this).reserveCallMenu = false;
      _Scene_Map_callMenu.call(this);
    }
  };

  //==============================================================================
  // Scene_Menu
  //==============================================================================

  var _Scene_Menu_terminate = Scene_Menu.prototype.terminate;
  Scene_Menu.prototype.terminate = function () {
    if (
      _COMMON_EVENT_ID_AM &&
      !$gameTemp.isCalledMenuFromEvent &&
      SceneManager.isNextScene(Scene_Map)
    ) {
      $gameTemp.reserveCommonEvent(_COMMON_EVENT_ID_AM);
    }
    $gameTemp.isCalledMenuFromEvent = false;
    _Scene_Menu_terminate.call(this);
  };

  //==============================================================================
  // Game_Temp
  //==============================================================================

  ((__initialize) => {
    Game_Temp.prototype.initialize = function () {
      __initialize.apply(this, arguments);
      this.isCalledMenuFromEvent = false;
    };
  })(Game_Temp.prototype.initialize);

  //==============================================================================
  // Game_Interpreter
  //==============================================================================

  ((__setup) => {
    let common1 = { code: 117, indent: 0, parameters: [_COMMON_EVENT_ID_BM] };
    let common2 = { code: 117, indent: 0, parameters: [_COMMON_EVENT_ID_AM] };

    Game_Interpreter.prototype.setup = function (list, eventId) {
      let _list = list;
      if (_COMMON_EVENT_ID_BM || _COMMON_EVENT_ID_AM) {
        let hasCallMenu = list.some((event) => event.code == 351);
        if (hasCallMenu) {
          _list = [];
          for (let i = 0; i < list.length; i++) {
            if (list[i].code == 351) {
              let indent = list[i].indent;
              if (_COMMON_EVENT_ID_BM) {
                common1.indent = indent;
                _list.push({ ...common1 });
              }
              _list.push(list[i]);
              if (_COMMON_EVENT_ID_AM) {
                common2.indent = indent;
                _list.push({ ...common2 });
              }
            } else {
              _list.push(list[i]);
            }
          }
        }
      }
      __setup.call(this, _list, eventId);
    };
  })(Game_Interpreter.prototype.setup);

  ((__command351) => {
    Game_Interpreter.prototype.command351 = function () {
      $gameTemp.isCalledMenuFromEvent = true;
      return __command351.apply(this, arguments);
    };
  })(Game_Interpreter.prototype.command351);
})();


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

/*:
 * @plugindesc 割り込みコモンイベントプラグイン
 * @author トリアコンタン
 *
 * @param ニューゲームコモン
 * @desc ニューゲーム時に呼ばれるコモンイベントID
 * @default
 *
 * @param ロードコモン
 * @desc ロード完了時に呼ばれるコモンイベントID
 * @default
 *
 * @param メニューコモン
 * @desc メニュー画面を閉じた時に呼ばれるコモンイベントID
 * @default
 *
 * @help 指定したタイミングでコモンイベントを呼び出します。
 *
 * ・ニューゲーム時
 * ・ロード完了時
 * ・メニュー終了時
 *
 * プラグインコマンド詳細
 *  イベントコマンド「プラグインコマンド」から実行。
 *  （パラメータの間は半角スペースで区切る）
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */
(function () {
  "use strict";
  var pluginName = "CommonInterceptor";
  var paramNames = ["", "ニューゲームコモン", "ロードコモン", "メニューコモン"];

  //=============================================================================
  // ローカル関数
  //  プラグインパラメータやプラグインコマンドパラメータの整形やチェックをします
  //=============================================================================
  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 _Game_Temp_initialize = Game_Temp.prototype.initialize;
  Game_Temp.prototype.initialize = function () {
    _Game_Temp_initialize.apply(this, arguments);
    this._interceptorType = 0;
  };

  Object.defineProperty(Game_Temp.prototype, "interceptorType", {
    get: function () {
      return this._interceptorType;
    },
    set: function (value) {
      this._interceptorType = value.clamp(0, 3);
    },
    configurable: false,
  });

  var _DataManager_setupNewGame = DataManager.setupNewGame;
  DataManager.setupNewGame = function () {
    _DataManager_setupNewGame.apply(this, arguments);
    $gameTemp.interceptorType = 1;
  };

  var _DataManager_loadGameWithoutRescue = DataManager.loadGameWithoutRescue;
  DataManager.loadGameWithoutRescue = function (savefileId) {
    if (_DataManager_loadGameWithoutRescue.apply(this, arguments)) {
      $gameTemp.interceptorType = 2;
      return true;
    }
    return false;
  };

  var _Scene_Menu_terminate = Scene_Menu.prototype.terminate;
  Scene_Menu.prototype.terminate = function () {
    _Scene_Menu_terminate.apply(this, arguments);
    $gameTemp.interceptorType = 3;
  };
  //=============================================================================
  // Game_Map
  //  条件を満たした場合のコモンイベント呼び出し処理を追加定義します。
  //=============================================================================
  var _Game_Map_setupStartingEvent = Game_Map.prototype.setupStartingEvent;
  Game_Map.prototype.setupStartingEvent = function () {
    var result = _Game_Map_setupStartingEvent.apply(this, arguments);
    return result || this.setupInterceptorCommonEvent();
  };

  Game_Map.prototype.setupInterceptorCommonEvent = function () {
    var commonId = getParamNumber(paramNames[$gameTemp.interceptorType]);
    var event = $dataCommonEvents[commonId];
    var result = false;
    if (commonId > 0 && !this.isEventRunning() && event) {
      this._interpreter.setup(event.list);
      $gameTemp.interceptorType = 0;
      result = true;
    }
    return result;
  };
})();


code:
//
//  汎用ポップアップコア ver1.06
//
// ------------------------------------------------------
// Copyright (c) 2016 Yana
// Released under the MIT license
// http://opensource.org/licenses/mit-license.php
// ------------------------------------------------------
//
// author Yana
//

var Imported = Imported || {};
Imported["CommonPopupCore"] = 1.06;

/*:
 * @plugindesc ver1.06/汎用的なポップアップの仕組みを提供するためのベースプラグインです。
 * @author Yana
 *
 * @param Text Back Color
 * @desc ポップアップの背景カラーです。
 * rgba(red,green,blue,alpha)で設定してください。
 * @default rgba(0,0,0,0.6)
 *
 * @param Text Back FileName
 * @desc ポップアップの背景画像名です。
 * %dがインデックスに変換されます。
 * @default popup_back%d
 *
 * @help プラグインコマンド
 * CommonPopup add param1 param2 param3 ・・・
 *
 * 必要なパラメータのみを指定できます。
 *  例:プレイヤーの上にテストと240フレームポップアップさせる
 * CommonPopup add text:テスト count:240 eventId:-1
 *
 * パラメータ詳細:
 * text:表示テキスト
 * eventId:表示するイベントのID
 * count:表示時間
 * delay:表示遅延
 * moveX:目標地点X(相対座標)
 * moveY:目標地点Y(相対座標)
 * sx:表示位置補正X
 * sy:表示位置補正Y
 * pattern:表示パターン　0がフェード、-1が横ストレッチ、-2が縦ストレッチ
 * back:-1:透明背景,0:背景カラーで塗りつぶし,1以上:画像インデックス
 * bx:内容の表示位置補正X
 * by:内容の表示位置補正Y
 * extend:表示タイミングの調整用配列で指定。 例:extend:[20,50] 20フレーム掛けて出現し、50フレーム目から消え始める。
 * fixed:画面に固定するか？ true/falseで指定。
 * anchorX:
 * anchorY:
 * slideCount:新しいポップアップが発生した際、上にスライドさせる速度。
 *
 * イベントコマンドのスクリプトを使う場合、
 *
 * this.addPopup(["add","text:テスト","count:120"…]);
 *
 * のように記述すればスクリプトでポップアップを行うことができます。
 * 同じように、イベントコマンドの移動ルート内のスクリプトで使用する場合、
 *
 * $gameMap._interpreter.addPopup(["add","text:テスト","count:120"…]);
 *
 * のように記述すれば使用可能です。
 *
 * ------------------------------------------------------
 * 利用規約
 * ------------------------------------------------------
 * 当プラグインはMITライセンスで公開されています。
 * 使用に制限はありません。商用、アダルト、いずれにも使用できます。
 * 二次配布も制限はしませんが、サポートは行いません。
 * 著作表示は任意です。行わなくても利用できます。
 * 要するに、特に規約はありません。
 * バグ報告や使用方法等のお問合せはネ実ツクールスレ、または、Twitterにお願いします。
 * https://twitter.com/yanatsuki_
 * 素材利用は自己責任でお願いします。
 * ------------------------------------------------------
 * このプラグインは、汎用的なポップアップの仕組みを提供するプラグインです。
 * このプラグイン単体ではプラグインコマンドを追加する以外の機能はありません。
 * 追加機能として、
 * ・\I[x]で描画されるアイコンのサイズが文字サイズに追従する。
 * ・文字サイズ変更の制御文字、\FS[x]が追加される。
 * の2点が追加されます。
 * ------------------------------------------------------
 * 更新履歴:
 * ver1.06:180513
 * 一部の処理が正常に動作していなかったバグを修正。
 * ver1.05:170525
 * ポップアップ発生時にSEを再生する機能を追加。
 * ver1.04
 * YEP_MessageCoreとの競合回避処理を追加。
 * 動作パターンに縦ストレッチと横ストレッチを追加。
 * ポップアップ用のプラグインパラメータが正常に動作していなかったバグを修正。
 * ver1.03:
 * backのパラメータにpicturesフォルダのファイル名を指定できるように変更。
 * ver1.02:
 * スライドに上から下に動作するようにする機能を追加。
 * ver1.01:
 * containerが作成されていない状態で、ポップアップが登録される可能性のあるバグを修正しました。
 * ver1.00:
 * 公開
 */

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

function CommonPopupManager() {
  throw new Error("This is a static class");
}

(function () {
  var parameters = PluginManager.parameters("CommonPopupCore");
  var commonPopupTextBackColor = String(
    parameters["Text Back Color"] || "rgba(0, 0, 0, 0.6)"
  );
  var commonPopupTextBackFileName = String(
    parameters["Text Back FileName"] || "popup_back%d"
  );

  var _cPU_GInterpreter_pluginCommand =
    Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function (command, args) {
    _cPU_GInterpreter_pluginCommand.call(this, command, args);
    if (command === "CommonPopup" || command === "ポップアップ") {
      switch (args[0]) {
        case "add":
        case "表示":
          this.addPopup(args);
          break;
        case "clear":
        case "消去":
          CommonPopupManager.clearPopup();
          break;
      }
    }
  };

  Array.prototype.setNullPos = function (object) {
    for (var i = 0; i < this.length; i++) {
      if (this[i] === null || this[i] === undefined) {
        this[i] = object;
        return i;
      }
    }
    this.push(object);
  };

  Array.prototype.compact = function () {
    var result = [];
    for (var i = 0; i < this.length; i++) {
      if (this[i] !== null && this[i] !== undefined) {
        result.push(this[i]);
      }
    }
    return result;
  };

  CommonPopupManager.initTempSprites = function () {
    this._tempCommonSprites = new Array(50);
    this._setedPopups = [];
    this._readyPopup = [];
  };

  CommonPopupManager.window = function () {
    if (this._window) {
      return this._window;
    }
    this._window = new Window_Base(0, 0, Graphics.boxWidth, Graphics.boxHeight);
    return this._window;
  };

  CommonPopupManager.testBitmap = function () {
    if (this._testBitmap) {
      return this._testBitmap;
    }
    this._testBitmap = new Bitmap(1, 1);
    return this._testBitmap;
  };

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

  Sprite_Popup.prototype.initialize = function (index) {
    Sprite.prototype.initialize.call(this);
    this._index = index;
    this._count = 0;
    this._enable = false;
    this.update();
  };

  Sprite_Popup.prototype.setMembers = function (arg) {
    this._count = arg.count;
    this._arg = arg;
    this.anchor.x = arg.anchorX;
    this.anchor.y = arg.anchorY;
    this.x = arg.x;
    this.y = arg.y;
    this.z = 6;
    this.visible = true;
    this._enable = true;
    this.createBitmap();
    if (arg.slideCount) {
      CommonPopupManager._setedPopups.push([
        this._index,
        this.height,
        this._arg.slideCount,
      ]);
    }
  };

  Sprite_Popup.prototype.createBitmap = function () {
    if (this._arg.bitmap) {
      this.bitmap = this._arg.bitmap;
    } else {
      CommonPopupManager.window().resetFontSettings();
      var text = this._arg.text;
      var width = CommonPopupManager.window().textWidth(text);
      var height = CommonPopupManager.window().contents.fontSize + 8;
      var sh = 8;
      if (this._arg.back === 0) {
        sh = 2;
      }
      CommonPopupManager.window().createContents();
      this.bitmap = new Bitmap(width + 24, height + sh);
      this.drawBackRect(width + 24, height + sh);
      CommonPopupManager.window().drawTextEx(this._arg.text, 12, 4);
      this.bitmap.blt(
        CommonPopupManager.window().contents,
        0,
        0,
        width + 24,
        height + sh,
        this._arg.bx,
        this._arg.by + 2
      );
    }
  };

  Sprite_Popup.prototype.drawBackRect = function (width, height) {
    switch (this._arg.back) {
      case 0:
        var color1 = commonPopupTextBackColor;
        var color2 = "rgba(0,0,0,0)";
        var dSize = width / 4;
        this.bitmap.gradientFillRect(0, 0, dSize, height, color2, color1);
        this.bitmap.fillRect(dSize, 0, dSize * 2, height, color1);
        this.bitmap.gradientFillRect(
          dSize * 3,
          0,
          dSize,
          height,
          color1,
          color2
        );
        break;
      case -1:
        break;
      default:
        var bitmap = CommonPopupManager.makeBitmap(this._arg);
        var w = this._bitmap.width;
        var h = this._bitmap.height;
        if (typeof this._arg.back === "string") {
          w = bitmap.width > this._bitmap.width ? bitmap.width : w;
          h = bitmap.height > this._bitmap.height ? bitmap.height : h;
          if (w > this._bitmap.width || h > this._bitmap.height) {
            this.bitmap = new Bitmap(w, h);
          }
        }
        this.bitmap.blt(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, w, h);
        bitmap.clear();
        bitmap = null;
    }
  };

  Sprite_Popup.prototype.update = function () {
    Sprite.prototype.update.call(this);
    if (CommonPopupManager._tempCommonSprites[this._index] && !this._enable) {
      if (CommonPopupManager._tempCommonSprites[this._index].delay === 0) {
        this.setMembers(CommonPopupManager._tempCommonSprites[this._index]);
        if (this._arg && this._arg.se.name) AudioManager.playSe(this._arg.se);
      } else {
        CommonPopupManager._tempCommonSprites[this._index].delay--;
      }
    }
    if (this._count > 0) {
      this._count--;
      if (!this._arg) {
        this.terminate();
        return;
      }
      switch (this._arg.pattern) {
        case 0:
        case "0":
        case "Normal":
          this.updateSlide();
          break;
        case -1:
        case "-1":
        case "Stretch":
          this.updateTurn();
          break;
        case -2:
        case "-2":
        case "GrowUp":
          this.updateGrowUp();
          break;
        default:
          this.updateAnime();
      }
      if (this._count === 0) this.terminate();
    }
    if (this._arg && this._arg.slideCount) this.updateMoveSlide();
  };

  Sprite_Popup.prototype.updateMoveSlide = function () {
    if (CommonPopupManager._setedPopups) {
      var array = CommonPopupManager._setedPopups.clone().reverse();
      var n = 0;
      for (var i = 0; i < array.length; i++) {
        if (this._index === array[i][0]) {
          if (this._arg.slideAction === "Down") {
            this.y = this.y + n;
          } else {
            this.y = this.y - n;
          }
        }
        var sprite = CommonPopupManager._tempCommonSprites[array[i][0]];
        if (sprite.pattern === -2 || sprite.pattern === "GrowUp") {
          n += array[i][1] * sprite.rate;
        } else {
          n +=
            array[i][1] *
            ((this._arg.slideCount - array[i][2]) / this._arg.slideCount);
        }
      }
      for (var i = 0; i < CommonPopupManager._setedPopups.length; i++) {
        CommonPopupManager._setedPopups[i][2]--;
        if (CommonPopupManager._setedPopups[i][2] < 0) {
          CommonPopupManager._setedPopups[i][2] = 0;
        }
      }
      array = null;
    }
  };

  Sprite_Popup.prototype.updateSlide = function () {
    var originalWait = this._arg.count;
    var cnt = originalWait - this._count;
    this.opacity = 255;
    var act = [originalWait * 0.25, originalWait * 0.75];
    if (this._arg.extend !== "") {
      act = this._arg.extend;
    }
    //var oa = Math.max(originalWait - act[1],1);
    //var n1 = Math.max(originalWait / oa,0.1);
    var opTime1 = act[0];
    var moveX = 0;
    var moveY = 0;
    if (act[2]) {
      opTime1 = originalWait - act[2];
    }
    var opTime2 = originalWait - act[1];
    var n = 0;
    if (act[3]) {
      opTime2 = act[3];
    }
    // 登場演出
    if (cnt < act[0]) {
      var up = this._arg.moveY / act[0];
      var slide = this._arg.moveX / act[0];
      this.opacity = Math.floor(255 * (cnt / opTime1));
      moveX = Math.floor(slide * cnt);
      moveY = Math.floor(up * cnt);
      // 退場演出
    } else if (cnt >= act[1]) {
      var up = this._arg.moveY / (originalWait - act[1]);
      var slide = this._arg.moveX / (originalWait - act[1]);
      this.opacity = Math.floor(255 * (this._count / opTime2));
      if (this._arg.enableOutEffect) {
        moveX = Math.floor(this._arg.moveX * (this._count / opTime2)); //Math.floor((originalWait / n1) * slide);
        moveY = Math.floor(this._arg.moveY * (this._count / opTime2)); //Math.floor((originalWait / n1) * up);
      } else {
        moveX = this._arg.moveX; //Math.floor((originalWait / n1) * slide);
        moveY = this._arg.moveY; //Math.floor((originalWait / n1) * up);
      }
    } else {
      moveX = this._arg.moveX; //Math.floor((originalWait / n1) * slide);
      moveY = this._arg.moveY; //Math.floor((originalWait / n1) * up);
    }
    this._times = cnt;
    this.setPosition(moveX, moveY);
  };

  Sprite_Popup.prototype.updateTurn = function () {
    var originalWait = this._arg.count;
    var cnt = originalWait - this._count;
    var act = [originalWait * 0.25, originalWait * 0.75];
    if (this._arg.extend) act = this._arg.extend;
    if (this._count === 0) this.scale.x = 0;
    //var oa = Math.max(originalWait - act[1],1);
    //var n1 = Math.max(originalWait / oa,0.1);
    //var up = (this._arg.moveY / (originalWait / n1));
    //var slide = (this._arg.moveX / (originalWait / n1));
    var moveX = 0;
    var moveY = 0;
    if (cnt < act[0]) {
      var up = this._arg.moveY / act[0];
      var slide = this._arg.moveX / act[0];
      var rate = cnt / act[0];
      this.scale.x = rate;
      moveX = Math.floor(slide * cnt);
      moveY = Math.floor(up * cnt);
    } else if (cnt > act[1]) {
      var a1 = originalWait - act[1];
      var rate = this._count / a1;
      this.scale.x = rate;
      if (this._arg.enableOutEffect) {
        moveX = Math.floor(this._arg.moveX * (this._count / a1)); //Math.floor((originalWait / n1) * slide);
        moveY = Math.floor(this._arg.moveY * (this._count / a1)); //Math.floor((originalWait / n1) * up);
      } else {
        moveX = this._arg.moveX; //Math.floor((originalWait / n1) * up);
        moveY = this._arg.moveY; //Math.floor((originalWait / n1) * slide);
      }
    } else {
      this.scale.x = 1.0;
      moveX = this._arg.moveX; //Math.floor((originalWait / n1) * up);
      moveY = this._arg.moveY; //Math.floor((originalWait / n1) * slide);
    }
    this._times = cnt;
    this.setPosition(moveX, moveY);
  };

  Sprite_Popup.prototype.updateGrowUp = function () {
    var originalWait = this._arg.count;
    var cnt = originalWait - this._count;
    var act = [originalWait * 0.25, originalWait * 0.75];
    if (this._arg.extend) act = this._arg.extend;
    if (this._count === 0) this.scale.y = 0;
    //var oa = Math.max(originalWait - act[1],1);
    //var n1 = Math.max(originalWait / oa,0.1);
    //var up = (this._arg.moveY / (originalWait / n1));
    //var slide = (this._arg.moveX / (originalWait / n1));
    var moveX = 0;
    var moveY = 0;
    if (cnt < act[0]) {
      var up = this._arg.moveY / act[0];
      var slide = this._arg.moveX / act[0];
      var rate = cnt / act[0];
      this.scale.y = rate;
      moveX = Math.floor(slide * cnt);
      moveY = Math.floor(up * cnt);
      this._arg.rate = rate;
    } else if (cnt >= act[1]) {
      var a1 = originalWait - act[1];
      var rate = this._count / a1;
      this.scale.y = rate;
      this._arg.rate = rate;
      if (this._arg.enableOutEffect) {
        moveX = Math.floor(this._arg.moveX * (this._count / a1)); //Math.floor((originalWait / n1) * slide);
        moveY = Math.floor(this._arg.moveY * (this._count / a1)); //Math.floor((originalWait / n1) * up);
      } else {
        moveX = this._arg.moveX; //Math.floor((originalWait / n1) * up);
        moveY = this._arg.moveY; //Math.floor((originalWait / n1) * slide);
      }
    } else {
      this.scale.y = 1.0;
      moveX = this._arg.moveX; //Math.floor((originalWait / n1) * up);
      moveY = this._arg.moveY; //Math.floor((originalWait / n1) * slide);
    }
    this._times = cnt;
    this.setPosition(moveX, moveY);
  };

  Sprite_Popup.prototype.setPosition = function (x, y) {
    this.x = this._arg.x + x + this._arg.sx;
    this.y = this._arg.y + y + this._arg.sy;
    if (this._arg.battler) {
      if ($gameParty.inBattle()) {
        this.x += this._arg.battler.x;
        this.y += this._arg.battler.y;
      } else {
        this.x += this._arg.battler._realX * $gameMap.tileWidth();
        this.y += this._arg.battler._realY * $gameMap.tileHeight();
      }
    }
    var xx = this.x;
    var yy = this.y;
    if (this._arg.fixed) {
      var dx = $gameMap._displayX;
      var dy = $gameMap._displayY;
      xx = this.x - dx * $gameMap.tileWidth();
      yy = this.y - dy * $gameMap.tileHeight();
      if (xx < 0 || yy < 0) {
        if (xx < 0 && $gameMap.isLoopHorizontal()) dx -= $dataMap.width;
        if (yy < 0 && $gameMap.isLoopVertical()) dy -= $dataMap.height;
        xx = this.x - dx * $gameMap.tileWidth();
        yy = this.y - dy * $gameMap.tileHeight();
      }
    }
    this.x = xx;
    this.y = yy;
  };

  Sprite_Popup.prototype.updateAnime = function () {
    var anime = $dataAnimations[Number(this._arg.pattern)];
    var frameId = Math.floor(
      (anime.frames.length * (this._arg.count - this._count)) / this._arg.count
    );
    if (frameId !== anime.frames.length) {
      var array = anime.frames[frameId][0];
      var x = array[1];
      var y = array[2];
      this.x = this._arg.x + x + this._arg.sx;
      this.y = this._arg.y + y + this._arg.sy;
      this.scale = new Point(array[3] / 100, array[3] / 100);
      this.rotation = array[4];
      this.opacity = array[6];
      this.blendMode = array[7];
    }
  };

  Sprite_Popup.prototype.terminate = function () {
    this.bitmap = null;
    this.visible = false;
    this._enable = false;
    this._count = 0;
    this._arg = null;

    if (CommonPopupManager._tempCommonSprites[this._index]) {
      CommonPopupManager._tempCommonSprites[this._index].terminate = true;
    }
    if (CommonPopupManager._setedPopups) {
      for (var i = 0; i < CommonPopupManager._setedPopups.length; i++) {
        if (CommonPopupManager._setedPopups[i][0] === this._index) {
          delete CommonPopupManager._setedPopups[i];
        }
      }
      CommonPopupManager._setedPopups =
        CommonPopupManager._setedPopups.compact();
    }
  };

  Game_Interpreter.prototype.addPopup = function (argParam) {
    var eventId = 0;
    for (var i = 0; i < argParam.length; i++) {
      if (argParam[i].match(/^eventId:(.+)/g)) {
        eventId = Number(RegExp.$1);
        break;
      }
    }
    var character = this.character(eventId);
    var arg = CommonPopupManager.setPopup(argParam, character);
    if (arg.back > 0 || typeof arg.back === "string") {
      CommonPopupManager.bltCheck(CommonPopupManager.makeBitmap(arg));
      CommonPopupManager._readyPopup.push(arg);
    } else {
      CommonPopupManager._tempCommonSprites.setNullPos(arg);
    }
  };

  CommonPopupManager.setPopup = function (argParam, character) {
    var arg = {
      x: null,
      y: null,
      text: "", // 表示テキスト
      eventId: -1, // 表示するイベントのID
      count: 60, // 表示時間
      delay: 0, // 表示遅延
      moveX: 0, // 目標地点X(相対座標)
      moveY: -48, // 目標地点Y(相対座標)
      sx: 0, // 表示位置補正X
      sy: 0, // 表示位置補正Y
      pattern: 0, // 表示パターン
      back: -1, // 背景に使う画像インデックス
      bx: 0, // 内容の表示位置補正X
      by: 0, // 内容の表示位置補正Y
      extend: "", //
      fixed: true, //
      anchorX: 0.5,
      anchorY: 0.5,
      battler: null,
      se: { name: "", volume: 90, pitch: 100, pan: 0 },
      enableOutEffect: true,
    };
    var array = [
      "x",
      "y",
      "text",
      "eventId",
      "count",
      "delay",
      "moveX",
      "moveY",
      "sx",
      "sy",
      "pattern",
      "back",
      "bx",
      "by",
      "extend",
      "fixed",
      "anchorX",
      "anchorY",
      "slideCount",
    ];
    for (var i = 0; i < argParam.length; i++) {
      if (i > 0) {
        for (var j = 0; j < array.length; j++) {
          var r = new RegExp("^(" + array[j] + ")" + ":(.+)");
          if (argParam[i].match(r)) {
            var code = RegExp.$1;
            var value = RegExp.$2;
            if (code === "text" || code === "extend") {
              arg[code] = value;
            } else if (code === "fixed") {
              arg[code] = value === "true";
            } else if (code === "back") {
              arg[code] = Number(value) !== NaN ? value : Number(value);
            } else {
              arg[code] = Number(value);
            }
          }
        }
      }
    }
    if (arg.x === null) {
      if (character) {
        var screenX = $gameParty.inBattle() ? 0 : character.screenX();
        var displayX = $gameParty.inBattle() ? 0 : $gameMap._displayX * 48;
        arg.x = screenX + displayX;
      } else {
        arg.x = 0;
      }
    }
    if (arg.y === null) {
      if (character) {
        var screenY = $gameParty.inBattle() ? 0 : character.screenY();
        var displayY = $gameParty.inBattle() ? 0 : $gameMap._displayY * 48;
        arg.y = screenY + displayY;
      } else {
        arg.y = 0;
      }
    }
    if (arg.extend) {
      arg.extend = eval(arg.extend);
    }

    arg.terminate = false;
    return arg;
  };

  CommonPopupManager.setPopUpdate = function () {
    if (this._readyPopup) {
      for (var i = 0; i < this._readyPopup.length; i++) {
        if (this._readyPopup[i]) {
          var arg = this._readyPopup[i];
          if (ImageManager.isReady()) {
            this.startPopup(arg);
            delete this._readyPopup[i];
            this._readyPopup.compact();
            return;
          } else {
            this.bltCheck(this.makeBitmap(arg));
          }
        }
      }
    }
  };

  CommonPopupManager.makeBitmap = function (arg) {
    if (typeof arg.back === "number") {
      var fileName = commonPopupTextBackFileName;
      fileName = fileName.replace(/%d/g, arg.back);
      return ImageManager.loadSystem(fileName);
    } else {
      var fileName = arg.back;
      return ImageManager.loadPicture(fileName);
    }
  };

  CommonPopupManager.bltCheck = function (bitmap) {
    this.testBitmap().blt(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0);
    //this.testBitmap().clear();
    //bitmap.clear();
    bitmap = null;
  };

  CommonPopupManager.startPopup = function (arg) {
    CommonPopupManager._tempCommonSprites.setNullPos(arg);
  };

  CommonPopupManager.clearPopup = function (tag) {
    if (!CommonPopupManager._tempCommonSprites) {
      CommonPopupManager.initTempSprites();
    }

    for (var i = 0; i < CommonPopupManager._tempCommonSprites.length; i++) {
      if (CommonPopupManager._tempCommonSprites[i]) {
        if (!tag || tag === CommonPopupManager._tempCommonSprites[i].tag) {
          CommonPopupManager._tempCommonSprites[i].delay = 0;
          CommonPopupManager._tempCommonSprites[i].count = 1;
          var sprite = CommonPopupManager._tempCommonSprites[i].sprite;
          if (sprite) sprite._count = 1;
        }
      }
    }
  };

  var _cPU_SsBase_initialize = Spriteset_Base.prototype.initialize;
  Spriteset_Base.prototype.initialize = function () {
    _cPU_SsBase_initialize.call(this);
    this.createSpritePopup();
  };

  var _cPU_SsBase_update = Spriteset_Base.prototype.update;
  Spriteset_Base.prototype.update = function () {
    _cPU_SsBase_update.call(this);
    if (this._popupContainer === undefined) {
      return;
    }
    if (CommonPopupManager._tempCommonSprites) {
      for (var i = 0; i < CommonPopupManager._tempCommonSprites.length; i++) {
        if (CommonPopupManager._tempCommonSprites[i]) {
          if (CommonPopupManager._tempCommonSprites[i].terminate) {
            var sprite = CommonPopupManager._tempCommonSprites[i].sprite;
            this._popupContainer.removeChild(sprite);
            delete CommonPopupManager._tempCommonSprites[i];
          } else if (!CommonPopupManager._tempCommonSprites[i].sprite) {
            var sprite = new Sprite_Popup(i);
            this._popupContainer.addChild(sprite);
            CommonPopupManager._tempCommonSprites[i].sprite = sprite;
          }
        }
      }
    }
  };

  var _cPU_SBase_update = Scene_Base.prototype.update;
  Scene_Base.prototype.update = function () {
    _cPU_SBase_update.call(this);
    if (CommonPopupManager) {
      CommonPopupManager.setPopUpdate();
    }
  };

  Spriteset_Base.prototype.createSpritePopup = function () {
    var width = Graphics.boxWidth;
    var height = Graphics.boxHeight;
    var x = (Graphics.width - width) / 2;
    var y = (Graphics.height - height) / 2;
    this._popupContainer = new Sprite();
    this._popupContainer.setFrame(x, y, width, height);
    this.addChild(this._popupContainer);
  };

  var _cPU_SBase_terminate = Scene_Base.prototype.terminate;
  Scene_Base.prototype.terminate = function () {
    _cPU_SBase_terminate.call(this);
    this.terminatePopup();
  };

  Scene_Base.prototype.terminatePopup = function () {
    if (!CommonPopupManager._tempCommonSprites) {
      CommonPopupManager.initTempSprites();
    }
    for (var i = 0; i < CommonPopupManager._tempCommonSprites.length; i++) {
      if (CommonPopupManager._tempCommonSprites[i]) {
        var sprite = CommonPopupManager._tempCommonSprites[i].sprite;
        if (sprite) sprite.terminate();
        delete CommonPopupManager._tempCommonSprites[i];
      }
    }
    CommonPopupManager._setedPopupss = [];
    CommonPopupManager._readyPopup = [];
  };

  var _cPU_SMap_launchBattle = Scene_Map.prototype.launchBattle;
  Scene_Map.prototype.launchBattle = function () {
    _cPU_SMap_launchBattle.call(this);
    this.terminatePopup();
  };

  // 再定義　文字サイズに合わせてアイコンのサイズを調整する
  Window_Base.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.contents.fontSize / this.standardFontSize()) *
        Window_Base._iconWidth
    );
    var nn = (32 - n) / 2;
    this.contents.blt(bitmap, sx, sy, pw, ph, x, y, n, n);
  };

  // 再定義 processDrawIconをストレッチされた文字サイズに合わせたズレに調整する
  Window_Base.prototype.processDrawIcon = function (iconIndex, textState) {
    this.drawIcon(iconIndex, textState.x + 2, textState.y + 2);
    var n = Math.floor(
      (this.contents.fontSize / this.standardFontSize()) *
        Window_Base._iconWidth
    );
    textState.x += n + 4;
  };

  if (!Imported.YEP_MessageCore) {
    // \FS[FontSize]の制御文字を追加する部分です。
    var _cPU_Window_Base_processEscapeCharacter =
      Window_Base.prototype.processEscapeCharacter;
    Window_Base.prototype.processEscapeCharacter = function (code, textState) {
      if (code === "FS") {
        var param = this.obtainEscapeParam(textState);
        if (param != "") {
          this.makeFontSize(param);
        }
      } else {
        _cPU_Window_Base_processEscapeCharacter.call(this, code, textState);
      }
    };
  }
  Window_Base.prototype.makeFontSize = function (fontSize) {
    this.contents.fontSize = fontSize;
  };
})();