code:
/*
############################################
	作者: COBRA
	改造や配布好き勝手にしても大丈夫だよ
	寧ろ積極的に配布して皆のゲーム開発を快適にしてあげて
	http://cobrara.blogspot.jp/
############################################
*/

// Version 1.1.3
// 2020/4/23 \C[0]に対応してませんでした
// 2018/4/26 ロードした際ステータスの変更もロードされるよう修正
// 2017/12/13 最新のバージョン(1.5)でデプロイメントすると1回目だけ画像が表示されない問題を修正
// 2017/8/27 1.1.0 ページの表示・非表示機能を追加しました
// 2017/7/30 1.0.4 最新のコアスクリプト(ver1.2c)にも対応しました
// 2017/5/4 1.0.3 エロステータス画面を開いてる最中NPCが動いてしまう問題を修正しました
// 2017/1/31 1.0.2 changeにおいて最後の項目に｢@@,@_,@=｣が含まれている場合エスケープされない問題を修正しました
// 2017/1/30 1.0.1 ピクチャ名に変数が反映されないバグを修正しました
// 2017/1/24 1.0.0

/*:
* @plugindesc エロステータス作れちゃうプラグイン(本体)
* @author COBRA
* @help Version 1.1.3
* 自由にいじれちゃうエロステータス画面
*
* 画像はimg/picturesにpngで保存してください
*
* 0pxの画像を表示しようとするとバグります
*
*
* 詳しくはこちらで
* http://cobrara.blogspot.jp/2017/01/blog-post_24.html
*
* 横幅：1024　縦幅：567

* @param eroStaName
* @desc メニューに表示される名前だよ
* Default: エロステータス
* @default エロステータス
*
*
* @param
*
*
* @param commonEvent
* @desc エロステ画面を開く直前に実行されるコモンイベント、数値
* Default:
* @default
*/

var CBR_eroStatus = [];
var CBR_eroStatusState = {};

//表示するページ変える
Game_System.prototype.CBR_eroSta_page = function (list) {
  this.availablePage = list;
  CBR_eroStatusState.num = this.availablePage;
};

//起動・ロード・ニューゲーム時
var _CBR_Game_System_initialize = Game_System.prototype.initialize;
Game_System.prototype.initialize = function () {
  _CBR_Game_System_initialize.call(this);

  //初期値
  CBR_eroStatus = [];
  CBR_eroStatusState.num = [];
  CBR_eroStatusState.numOrigin = [];
  CBR_eroStatusState.now = null;
  CBR_eroStatusState.name = null;
  CBR_eroStatusState.event = null;

  this.availablePage = [];

  //ページ数取得
  //こっちがあったら

  for (var i = 0, len = $plugins.length; i < len; i++) {
    var temp = $plugins[i].name.match(/^CBR_eroStatus_(\d+)/); //プラグインが存在して
    if (temp) {
      CBR_eroStatusState.numOrigin[CBR_eroStatusState.numOrigin.length] =
        Number(temp[1]);
      CBR_eroStatusState.num[CBR_eroStatusState.num.length] = Number(temp[1]);
    }
  }

  //変更箇所の保存
  CBR_eroStatusState.numOrigin.sort(function (a, b) {
    return a - b;
  }); //_nの小さい順に
  this._CBR_eroSta_change_list = [];

  //numOriginに[1,2,4,8]ってページが入ってる

  //numには表示すべき[2,4]だけが入ってる

  //エロステには[obj,obj,obj,obj]とOriginに対応した順番で入ってる

  this._CBR_eroSta_pageList = [];

  var param = PluginManager.parameters("CBR_eroStatus_main");
  CBR_eroStatusState.name = "" + (param["eroStaName"] || "エロステータス");
  CBR_eroStatusState.event = Number(param["commonEvent"]) || null;

  for (var i = 0, len = CBR_eroStatusState.numOrigin.length; i < len; i++) {
    //ページの数だけ
    var n = CBR_eroStatusState.numOrigin[i];
    var param = PluginManager.parameters("CBR_eroStatus_" + n);
    //nは_n.js　1,2,3
    //iはページの順番　 0,1,2
    //保存する場合は0から99
    CBR_eroStatus[i] = { p: [], t: [] };

    this._CBR_eroSta_change_list[i] = {
      p: [],
      t: [],
    };

    for (var k = 1; k < 100; k++) {
      this.CBR_eroSta_add(
        "p",
        i,
        k - 1,
        param["picName_" + k],
        param["picX_" + k],
        param["picY_" + k],
        param["picOrigin_" + k],
        param["picShow_" + k],
        param["picOpacity_" + k],
        param["picZoom_" + k]
      );
      this.CBR_eroSta_add(
        "t",
        i,
        k - 1,
        param["txtSubject_" + k],
        param["txtX_" + k],
        param["txtY_" + k],
        param["txtOrigin_" + k],
        param["txtShow_" + k],
        param["txtAlign_" + k],
        param["txtSize_" + k]
      );
    }
  }

  this._CBR_eroSta_change_list = [];
  for (var i = 0, len = CBR_eroStatusState.numOrigin.length; i < len; i++) {
    //ページ分だけチェンジリスト作る
    this._CBR_eroSta_change_list[i] = {
      p: [],
      t: [],
    };
  }
};

//セーブデータ読み込み時に実行
var _CBR_Game_System_onAfterLoad = Game_System.prototype.onAfterLoad;
Game_System.prototype.onAfterLoad = function () {
  _CBR_Game_System_onAfterLoad.call(this);

  if (this.availablePage.length) {
    CBR_eroStatusState.num = this.availablePage;
  }

  for (var i = 0, len = CBR_eroStatusState.numOrigin.length; i < len; i++) {
    //ページ数分繰り返す
    for (var j = 0; j < 2; j++) {
      var ty = !j ? "p" : "t";
      var list = this._CBR_eroSta_change_list[i][ty]; //変更したいナンバーリスト
      for (var k = 0, len2 = list.length; k < len2; k++) {
        var koumokuList = list[k].list;
        for (var m = 0, len3 = koumokuList.length; m < len3; m++) {
          //チェンジする項目数
          if (!CBR_eroStatus[i][ty][list[k].page]) {
            //その項目のデフォが存在しなかったら作成
            this.CBR_eroSta_add(ty, i);
          }
          CBR_eroStatus[i][ty][list[k].num][koumokuList[m].name] =
            koumokuList[m].val;
        }
      }
    }
  }
};

Game_System.prototype.CBR_eroSta_getPageIndex = function (num) {
  //aはaligin or opacity bはzoom
  var ary = CBR_eroStatusState.numOrigin;
  for (var i = 0, len = ary.length; i < len; i++) {
    if (ary[i] == num) {
      return i;
    }
  }
};

Game_System.prototype.CBR_eroSta_add = function (
  type,
  page,
  num,
  data,
  x,
  y,
  origin,
  show,
  a,
  b
) {
  //aはaligin or opacity bはzoom
  if (type == "p") {
    CBR_eroStatus[page].p[num] = {
      name: data,
      x: this.CBR_eroSta_changeVal("x", x),
      y: this.CBR_eroSta_changeVal("y", y),
      origin: origin || "left",
      show: show == "on",
      opacity: this.CBR_eroSta_changeVal("opacity", a),
      zoom: this.CBR_eroSta_changeVal("zoom", b),
    };
  } else if (type == "t") {
    CBR_eroStatus[page].t[num] = {
      subject: data,
      x: this.CBR_eroSta_changeVal("x", x),
      y: this.CBR_eroSta_changeVal("y", y),
      origin: origin || "left",
      show: show == "on",
      align: a || "top",
      size: this.CBR_eroSta_changeVal("size", b),
    };
  }
};

Game_System.prototype.CBR_eroSta_changeVal = function (name, val) {
  //チェンジする時 add時　ロード時のチェンジで反映させよう
  switch (name) {
    case "x":
    case "y":
      return Number(val) || 0;
      break;
    case "opacity":
    case "zoom":
      if (val) {
        return Number(val) / 100;
      } else {
        return 1;
      }
      break;
    case "show":
      return val == "on";
      break;
    case "size":
      return Number(val) || 28;
      break;
    case "name":
    case "subject":
      return val || "";
      break;
    default:
      return val;
      break;
  }
};

Game_System.prototype.CBR_eroSta_change = function (ary) {
  var txt_ary = {
    fontsize: "fontSize",
    vardigit: "varDigit",
  };

  var checkList = {
    p: ["name", "origin", "x", "y", "show", "opacity", "zoom"],
    t: ["subject", "origin", "x", "y", "show", "align", "size"],
  };

  for (var i = 0, len = ary.length; i < len; i++) {
    //変更したいpage_type_nの分だけ
    var temp = ary[i].split(/@@|@_|@=|_|=/);
    var temp2 = ary[i].match(/@@|@_|@=|_|=/g);

    var list = []; //aryを分割したものを入れる
    var temp3 = "";
    for (var k = 0, len2 = temp.length; k < len2; k++) {
      if (temp2[k]) {
        if (temp2[k].charAt(0) == "@") {
          temp3 += temp[k] + temp2[k].charAt(1);
        } else {
          list[list.length] = temp3 + temp[k];
          temp3 = "";
        }
      } else {
        list[list.length] = temp3 + temp[k];
      }
    }

    list[0] = Number(list[0]);
    var page = null;
    for (var k = 0, len2 = CBR_eroStatusState.numOrigin.length; k < len2; k++) {
      //ページ数だけ回す
      if (CBR_eroStatusState.numOrigin[k] == list[0]) {
        //nと一致したら
        page = k;
      }
    }
    var type = list[1];
    var n = Number(list[2]) - 1;

    //しつこい気もするけどエロステータス開く時の軽さを最優先で
    var obj = this._CBR_eroSta_change_list[page][type];

    var objNum = false;
    for (var k = 0, len2 = obj.length; k < len2; k++) {
      //このページのchange数
      if (n == obj[k].num) {
        //nとチェンジしたい番号が一緒だったら
        objNum = k;
        break;
      }
    }
    if (objNum === false) {
      objNum = len2;
      obj[objNum] = {
        num: n,
        list: [],
      };
    }

    //変更したいパラメータ数だけ回す
    var chaList = obj[objNum].list;
    for (var k = 3, len2 = list.length; k + 1 < len2; k += 2) {
      var listNum = false;
      for (var m = 0, len3 = chaList.length; m < len3; m++) {
        //既に存在するチェンジ数
        if (list[k] == chaList[m].name) {
          //一致する箇所があるかどうか
          listNum = m;
          break;
        }
      }
      if (listNum === false) {
        //無かったら
        listNum = len3;
        for (var m = 0, len3 = checkList[type].length; m < len3; m++) {
          //ちゃんと項目通りかチェック
          if (list[k] == checkList[type][m]) {
            break;
          } else if (m + 1 == len3) {
            //もし無かったら
            alert("ERROR:CBR_eroSta_change引数");
          }
        }
      }
      list[k + 1] = this.CBR_eroSta_changeVal(list[k], list[k + 1]);
      chaList[listNum] = {
        name: list[k],
        val: list[k + 1],
      };
      CBR_eroStatus[page][type][n][list[k]] = list[k + 1];
    }
  }
};

//########### Scene ###########
function Scene_EroStatus() {
  this.initialize.apply(this, arguments);
}
Scene_EroStatus.prototype = Object.create(Scene_MenuBase.prototype);
Scene_EroStatus.prototype.constructor = Scene_EroStatus;

Scene_EroStatus.prototype.initialize = function () {
  Scene_MenuBase.prototype.initialize.call(this);
};
Scene_EroStatus.prototype.create = function () {
  Scene_MenuBase.prototype.create.call(this);
  if (CBR_eroStatusState.event) {
    $gameTemp.reserveCommonEvent(CBR_eroStatusState.event);
  }
  this._eroStatusWindow = new Window_EroStatus();
  this._eroStatusWindow.setHandler("cancel", this.popScene.bind(this));

  this._eroStatusWindow._margin = 0; //背景ピッチリする為
  this._eroStatusWindow.margin = 0; //本当はこっちだけどね
  this._eroStatusWindow._windowFrameSprite.visible = false; //枠線を消す

  this.addWindow(this._eroStatusWindow);
};

Scene_EroStatus.prototype.update = function () {
  $gameMap.refreshIfNeeded();
  if (this.isActive()) {
    $gameMap.updateInterpreter();
  }
  $gameMap.updateVehicles();

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

//########### window ###########
function Window_EroStatus() {
  this.initialize.apply(this, arguments);
}

Window_EroStatus.prototype = Object.create(Window_Selectable.prototype);
Window_EroStatus.prototype.constructor = Window_EroStatus;

Window_EroStatus.prototype.initialize = function () {
  //windowを作る
  var width = Graphics.boxWidth;
  var height = Graphics.boxHeight;
  Window_Selectable.prototype.initialize.call(this, 0, 0, width, height);
  CBR_eroStatusState.now = 0;
  this._CBR_complete = false;
};

Window_EroStatus.prototype.CBR_complete = function () {
  //描写終わったかどうか
  return this._CBR_complete;
};

Window_EroStatus.prototype.update = function () {
  //毎回image描写してもいいけどそれだと負荷が多くなるのでこの方法で
  Window_Selectable.prototype.update.call(this);

  if (1 < CBR_eroStatusState.num.length && this.isOpenAndActive()) {
    //操作があった時
    if (Input.isRepeated("right") || Input.isRepeated("left")) {
      SoundManager.playCursor(2); //音楽鳴らす
      CBR_eroStatusState.now =
        CBR_eroStatusState.now + 1 < CBR_eroStatusState.num.length
          ? CBR_eroStatusState.now + 1
          : 0;
      this._CBR_complete = false; //初期化
      //this._statusWindow.refresh();//切り替えしたんでリフレッシュ
    }
  }

  var page = $gameSystem.CBR_eroSta_getPageIndex(
    CBR_eroStatusState.num[CBR_eroStatusState.now]
  );

  if (!this.CBR_complete()) {
    //まだ画像の描写してないのなら
    var flag = false;
    var ary = CBR_eroStatus[page].p;
    var p_data = [];
    //ピクチャの数だけ
    for (var i = 0, len = ary.length; i < len; i++) {
      var name = ary[i].name;
      if (!name || !ary[i].show) {
        continue;
      }
      name = name.replace(
        /\\(\\)|\\([VNP])\[(\d+)\]|\\(<)(.+)\\>/g,
        function (a, b, c, d, e, f) {
          //汚いけどこれは毎回やらないとね
          if (b) {
            //\\
            return "\\";
          } else if (c) {
            //[VNP]
            d = Number(d);
            switch (c) {
              case "V":
                return $gameVariables.value(d);
                break;
              case "N":
                return $gameActors._data[d]._name;
                break;
              case "P":
                return $dataActors[$gameParty._actors[d - 1]].name;
                break;
            }
          } else {
            //script
            return eval(f);
          }
        }
      );

      if (ary[i].var) {
        //変数があったら入れる
        var v = "" + $gameVariables.value(ary[i].var);
        if (ary[i].varDigit) {
          //2ケタの時は2まで
          if (v.length >= ary[i].varDigit) {
            name += v.substr(-1 * ary[i].varDigit, 1);
          } else {
            name = false;
          }
        } else {
          name += v;
        }
      }
      if (name) {
        var temp = ImageManager.loadPicture(name); //初回読み込み
        if (temp) {
          //if(temp._isLoading || temp._loadingState == 'requesting'){//前者は古いver用 ロード中ならアウト
          if (!temp.width) {
            //前者は古いver用 ロード中ならアウト
            flag = true;
            break;
          }
        } else {
          //その名前の画像が無かったら
          flag = true;
          this._CBR_complete = true;
          break;
        }
        p_data[i] = {
          w: temp.width,
          h: temp.height,
        };
      }
    }

    if (!flag) {
      //全ロードが終わってたら
      this.contents.clear();

      //ピクチャの表示
      var ary = CBR_eroStatus[page].p;
      for (var i = 0, len = ary.length; i < len; i++) {
        var name = ary[i].name;
        if (!name || !ary[i].show) {
          continue;
        }

        //変数とか文字化
        name = name.replace(
          /\\(\\)|\\([VNP])\[(\d+)\]|\\(<)(.+)\\>/g,
          function (a, b, c, d, e, f) {
            if (b) {
              //\\
              return "\\";
            } else if (c) {
              //[VNP]
              d = Number(d);
              switch (c) {
                case "V":
                  return $gameVariables.value(d);
                  break;
                case "N":
                  return $gameActors._data[d]._name;
                  break;
                case "P":
                  return $dataActors[$gameParty._actors[d - 1]].name;
                  break;
              }
            } else {
              //script
              return eval(f);
            }
          }
        );

        if (name) {
          this.changePaintOpacity(ary[i].opacity);

          var x = ary[i].x;
          var y = ary[i].y;
          if (ary[i].origin == "center") {
            x -= (p_data[i].w * ary[i].zoom) / 2;
            y -= (p_data[i].h * ary[i].zoom) / 2;
          }
          this.drawPicture("pictures", name, 0, 0, x, y, 0, 0, ary[i].zoom, 0);
        }
      }

      //テキストの表示
      this.resetTextColor();
      var ary = CBR_eroStatus[page].t;
      for (var i = 0, len = ary.length; i < len; i++) {
        var size = ary[i].size; // ary[i].fontSize;
        var temp = ary[i].subject;
        if (!temp || !ary[i].show) {
          continue;
        }

        var opAry = temp.match(/(\\\{|\\\}|\\[CI]\[\d+\])+/g);

        //先頭にある場合は"","tesa"になる
        var strAry = temp.split(/(?:\\\{|\\\}|\\[CI]\[\d+\])+/);

        var str = "";
        var allW = 0;
        var maxSize = null;
        var dataFAry = [];
        var dataWAry = [];
        var drawI = [];
        var drawC = [];
        //分割した配列の数
        for (var k = 0, len2 = strAry.length; k < len2; k++) {
          //前方にある\{のフォントサイズを入れる
          dataFAry[k] = k ? dataFAry[k - 1] : 0;
          drawI[k] = [];

          //変数とか文字化
          strAry[k] = strAry[k].replace(
            /\\(\\)|\\([VNP])\[(\d+)\]|\\(G)|\\(<)(.+)\\>/g,
            function (a, b, c, d, e, f, g) {
              if (b) {
                //\\
                return "\\";
              } else if (c) {
                //[VNP]
                d = Number(d);
                switch (c) {
                  case "V":
                    return $gameVariables.value(d);
                    break;
                  case "N":
                    return $gameActors._data[d]._name;
                    break;
                  case "P":
                    return $dataActors[$gameParty._actors[d - 1]].name;
                    break;
                }
              } else if (e) {
                //G
                return $dataSystem.currencyUnit;
              } else {
                //script
                return eval(g);
              }
            }
          );

          //自身の前に区切りマッチがあったら
          if (0 < k) {
            var temp = opAry[k - 1].split("\\"); //\\{\\}を分割する
            for (var m = 1, len3 = temp.length; m < len3; m++) {
              switch (temp[m].charAt(0)) {
                case "{":
                  dataFAry[k] += 6;
                  break;
                case "}":
                  dataFAry[k] -= 6;
                  break;
                case "C":
                  drawC[k] = Number(temp[m].match(/\[(\d+)\]/)[1]); //Cは複数あっても最後のが適応されれば良いわけで
                  break;
                case "I":
                  drawI[k][drawI[k].length] = Number(
                    temp[m].match(/\[(\d+)\]/)[1]
                  );
                  break;
              }
            }
          }
          this.contents.fontSize = size + dataFAry[k];
          this.contents.context.font = this.contents._makeFontNameText();
          dataWAry[k] = this.contents.context.measureText(strAry[k]).width; //何の為に+4するのか忘れた
          allW += dataWAry[k];

          if (strAry[k]) {
            //先頭に\{や変数がある時の問題　アイコン乃場合もここを通さないと
            if (maxSize === null) {
              //まだ記録されてなかったら入れよう
              maxSize = dataFAry[k];
            } else {
              maxSize = maxSize < dataFAry[k] ? dataFAry[k] : maxSize;
            }
          }
        }

        var x = ary[i].x;
        if (ary[i].origin == "center") {
          x -= allW / 2;
        } else if (ary[i].origin == "right") {
          x -= allW;
        }
        for (var k = 0, len2 = strAry.length; k < len2; k++) {
          this.contents.fontSize = size + dataFAry[k];
          this.contents.context.font = this.contents._makeFontNameText();
          //bottom→下揃え原点の上　top→上揃え原点の下　center→原点
          var line = ary[i].y;
          var iconLine = ary[i].y;
          if (ary[i].align == "top") {
            line += (size + dataFAry[k]) / 2;
          } else if (ary[i].align == "bottom") {
            line -= (size + dataFAry[k]) / 2;
            iconLine -= Window_Base._iconWidth;
          } else {
            iconLine -= Window_Base._iconWidth / 2;
          }
          if (drawI[k].length) {
            for (var m = 0, len3 = drawI[k].length; m < len3; m++) {
              this.drawIcon(drawI[k][m], x, iconLine);
              x += Window_Base._iconWidth;
            }
          }
          if (drawC[k] || drawC[k] === 0) {
            this.changeTextColor(this.textColor(drawC[k]));
          }
          this.contents.drawText(strAry[k], x, line, dataWAry[k], 0, "left");
          x += dataWAry[k];
        }
        this.contents.fontSize = this.standardFontSize();
      }
      this.resetTextColor();
      this.changePaintOpacity(true);

      this.activate();
      this._CBR_complete = true;
    }
  }
};

Window_EroStatus.prototype.drawPicture = function (
  dir,
  filename,
  sx,
  sy,
  x,
  y,
  w,
  h,
  zoom,
  hue
) {
  var bitmap = ImageManager.loadBitmap("img/" + dir + "/", filename, hue, true);
  this.contents.blt(
    bitmap,
    sx,
    sy,
    bitmap.width,
    bitmap.height,
    x,
    y,
    bitmap.width * zoom,
    bitmap.height * zoom
  );
};
Window_EroStatus.prototype.standardPadding = function () {
  return 0;
};
Window_Status.prototype.lineColor = function () {
  return this.normalColor();
};
Window_Status.prototype.maxEquipmentLines = function () {
  return 6;
};

//#########　コマンドの追加　##########
Scene_Menu.prototype.commandEroSta = function () {
  SceneManager.push(Scene_EroStatus);
};
setTimeout(function () {
  var _Scene_Menu_createCommandWindow =
    Scene_Menu.prototype.createCommandWindow;
  Scene_Menu.prototype.createCommandWindow = function () {
    _Scene_Menu_createCommandWindow.call(this);
    this._commandWindow.setHandler("eroStatus", this.commandEroSta.bind(this));
  };
}, 0);
_Window_MenuCommand_addOriginalCommands =
  Window_MenuCommand.prototype.addOriginalCommands;
Window_MenuCommand.prototype.addOriginalCommands = function () {
  _Window_MenuCommand_addOriginalCommands.call(this);
  this.addCommand(CBR_eroStatusState.name, "eroStatus", true);
};

repo_name: dazed/translations

license: unknown


code:
/*:
 * @plugindesc Fixes an issue with large sprites appearing under ☆ passability tiles.
 * @author Neon Black - Version 1.0
 *
 * @help Large Sprite ☆ Fix v1.0
 *
 * V1.0 - 8.11.2015
 *
 * This plugin was created to fix an issue similar to the fix applied in Ace
 * where large sprites would display under ☆ passability tiles when they should
 * appear above them.  This plugin is for the most part non-intrusive but does
 * require a little bit of input from the user.
 *
 * By default, only the player is affected by this plugin.  To apply this fix to
 * an event, add the tag <large sprite> to a comment box in the page of the
 * event you would like to appear above ☆ tiles properly.
 *
 * This work by Neon Black is licensed under a Creative Commons Attribution 4.0
 * International License.  To view a copy of this license, visit
 * http://creativecommons.org/licenses/by/4.0/.  Permissions beyond the scope of
 * this license may be available at neonblack.moe/terms.
 *
 * @param Terrain ID
 * @desc This is the ID of the terrain to fix with ☆ tiles.  Terrain ID is set in the database.
 * @default 7
 *
 * @param Large Followers
 * @desc Enable this option to perform large sprite checking on followers.  Disabled by default.
 * @default No
 *
 * @param Large Vehicles
 * @desc Enable this option to perform large sprite checking on vehicles.  Enabled by default.
 * @default Yes
 */

/*:ja
 * @plugindesc すり抜け可能タイル(★タイル)の下側に
 * 大きなスプライトが出現する際の問題点を解決します。
 * @author Neon Black - Version 1.0
 *
 * @help Large Sprite ☆ Fix v1.0
 *
 * V1.0 - 8.11.2015
 *
 * このプラグインは、すり抜け可能タイル(★タイル)の上に表示されるべき
 * スプライトが、背面に表示されてしまうバグの修正を行います。
 * ほとんどが自動的な修正となりますが、多少のカスタムが必要となります。
 *
 * デフォルト状態では、このプラグインが有効になるのはプレイヤーに対してだけです。
 * イベントに対してもこのプラグインを有効にしたい場合は、
 * 対象のイベントのコメントボックス内に<large sprite>タグを挿入してください。
 * これによって、★タイルの上にイベントを表示することができます。
 *
 * ■ライセンスポリシー
 * This work by Neon Black is licensed under a Creative Commons Attribution 4.0
 * International License.  To view a copy of this license, visit
 * http://creativecommons.org/licenses/by/4.0/.  Permissions beyond the scope of
 * this license may be available at neonblack.moe/terms.
 *
 * @param Terrain ID
 * @desc ★タイルによって固定される地形IDです。
 * @default 7
 *
 * @param Large Followers
 * @desc YESにすることで、フォロワーキャラクターにも適用されます。
 * デフォルトではOFFになっています。
 * @default No
 *
 * @param Large Vehicles
 * @desc YESにすることで、乗り物にも適用されます。
 * デフォルトではONになっています。
 * @default Yes
 */

//------
// The following lines are the actual core code of the plugin.  While you are
// certainly invited to look, modifying it may result in undesirable results.
// Modify at your own risk!
//------

//------
// Imported and namespace
//------
var Imported = Imported || {};
Imported.CP_LargeSpriteFix = 1.0;

var cpp = cpp || {};
cpp.yyt = ["yes", "y", "true"];
cpp.lsdf = cpp.lsdf || {};

cpp.lsdf.params = PluginManager.parameters("CP_Large_Sprite_Fix");
cpp.lsdf.terrain = cpp.lsdf.params["Terrain ID"];
cpp.lsdf.followers =
  cpp.yyt.indexOf(cpp.lsdf.params["Large Followers"].toLowerCase()) >= 0;
cpp.lsdf.vehicles =
  cpp.yyt.indexOf(cpp.lsdf.params["Large Vehicles"].toLowerCase()) >= 0;

//------
// Alias functions
//------
var aliasUpdateBitmap081115a = Sprite_Character.prototype.updateBitmap;
var aliasUpdatePosition081115a = Sprite_Character.prototype.updatePosition;
var aliasSetupPage081115a = Game_Event.prototype.setupPage;

//------
// Destructive functions list
/*
 */

//------
// Sprite_Character
//------
Sprite_Character.prototype.setUpperAreaSprite = false;
Sprite_Character.prototype.forceGfxChange = false;
Sprite_Character.prototype.oldBitmap = null;
Sprite_Character.prototype.upperAreaSprite = null;

// Checks if the sprite has been changed.
Sprite_Character.prototype.updateBitmap = function () {
  if (this.isImageChanged() && this.setUpperAreaSprite)
    this.forceGfxChange = true;
  else this.forceGfxChange = false;
  aliasUpdateBitmap081115a.apply(this, arguments);
};

Sprite_Character.prototype.updatePosition = function () {
  aliasUpdatePosition081115a.apply(this, arguments);
  if (this.spriteIsOnscreen()) this.checkEncompassedArea();
};

// 5 would be highest priority level for characters
Sprite_Character.prototype.spriteIsOnscreen = function () {
  if (this._character.largeSprite() && this._character.screenZ() < 5) {
    var rectArray = this.getEdgeRect();
    if (
      rectArray[0] < Graphics._width &&
      rectArray[1] < Graphics._height &&
      rectArray[2] > 0 &&
      rectArray[3] > 0
    )
      return true;
  }
  return false;
};

Sprite_Character.prototype.getEdgeRect = function () {
  var x = this.x - Math.round(this._frame.width * this.anchor.x);
  var y = this.y - Math.round(this._frame.height * this.anchor.y);
  var w = x + this._frame.width;
  var h = y + this._frame.height;
  return [x, y, w, h];
};

Sprite_Character.prototype.checkEncompassedArea = function () {
  var tw = $gameMap.tileWidth();
  var th = $gameMap.tileHeight();
  if (this.setUpperAreaSprite && this.forceGfxChange)
    this.oldBitmap = this.bitmap;
  this.setUpperAreaSprite = false;
  var boxArray = this.getEdgeRect();
  var lastX = null;
  var lastY = null;
  var copyR = 0;
  var mapXD = $gameMap.displayX() * $gameMap.tileWidth();
  var mapYD = $gameMap.displayY() * $gameMap.tileHeight();
  var totalH = this._frame.height + this._character.jumpHeight();
  var _bx = [false, 0, 0, 0];
  for (var x = 0; x < this._frame.width; x++) {
    var xp = Math.round(mapXD) + boxArray[0] + x;
    if (Math.floor(xp / tw) != lastX) {
      lastX = Math.floor(xp / tw);
      lastY = null;
      copyR = 0;
      for (var y = 0; y < totalH; y++) {
        var yp =
          Math.round(mapYD) + boxArray[3] + this._character.jumpHeight() - y;
        while (Math.floor(yp / th) == lastY) {
          y++;
          yp--;
        }
        lastY = Math.floor(yp / th);
        if (
          lastY ==
          Math.round(
            (this._character.screenY + this._character.jumpHeight() + mapYD) /
              th
          )
        ) {
          if ($gameMap.terrainTag(lastX, lastY) == Number(cpp.lsdf.terrain))
            break;
          continue;
        }
        if ($gameMap.terrainTag(lastX, lastY) != Number(cpp.lsdf.terrain))
          continue;
        var copyR = Math.min(this._frame.height, Math.round(totalH - y + 1));
        this.setUpperSprite();
        break;
      }
    }
    _bx = this.upperSpriteCopy(x, copyR, _bx);
  }
  _bx = this.upperSpriteCopy(x, 0, _bx);
  if (!this.setUpperAreaSprite && this.upperAreaSprite) {
    this.parent.removeChild(this.upperAreaSprite);
    this.upperAreaSprite = null;
    this.cpResetBitmapFrame();
  }
};

Sprite_Character.prototype.upperSpriteCopy = function (x, copyR, _bx) {
  if (_bx[3] == copyR) {
    _bx[2]++;
    return _bx;
  }
  if (
    _bx[0] &&
    this.upperAreaSprite &&
    _bx[3] > 0 &&
    _bx[3] < this._frame.height
  ) {
    var rect = new Rectangle();
    rect.x = this._frame.x + _bx[1];
    rect.y = this._frame.y;
    rect.width = _bx[2];
    rect.height = _bx[3];
    this.upperAreaSprite.bitmap.blt(
      this.bitmap,
      rect.x,
      rect.y,
      rect.width,
      rect.height,
      _bx[1],
      0,
      rect.width,
      rect.height
    );
    this.bitmap.clearRect(rect.x, rect.y, rect.width, rect.height);
  }
  return [true, x, 1, copyR];
};

Sprite_Character.prototype.setUpperSprite = function () {
  if (this.setUpperAreaSprite) {
    return;
  }
  if (this.upperAreaSprite) {
    this.upperAreaSprite.visible = true;
  } else {
    this.upperAreaSprite = new Sprite();
    this.parent.addChild(this.upperAreaSprite);
    this.oldBitmap = this.bitmap;
  }
  this.upperAreaSprite.bitmap = new Bitmap(
    this._frame.width,
    this._frame.height
  );
  this.upperAreaSprite.x = this.x;
  this.upperAreaSprite.y = this.y;
  this.upperAreaSprite.anchor.x = this.anchor.x;
  this.upperAreaSprite.anchor.y = this.anchor.y;
  this.upperAreaSprite.opacity = this.opacity;
  this.upperAreaSprite.visible = this.visible;
  this.upperAreaSprite.z = 8;
  this.setUpperAreaSprite = true;
  var _oldFrame = new Rectangle();
  _oldFrame.x = this._frame.x;
  _oldFrame.y = this._frame.y;
  _oldFrame.width = this._frame.width;
  _oldFrame.height = this._frame.height;
  this.bitmap = new Bitmap(this.oldBitmap.width, this.oldBitmap.height);
  this.bitmap.blt(
    this.oldBitmap,
    0,
    0,
    this.oldBitmap.width,
    this.oldBitmap.height,
    0,
    0,
    this.bitmap.width,
    this.bitmap.height
  );
  this.setFrame(_oldFrame.x, _oldFrame.y, _oldFrame.width, _oldFrame.height);
};

Sprite_Character.prototype.cpResetBitmapFrame = function () {
  var _oldFrame = new Rectangle();
  _oldFrame.x = this._frame.x;
  _oldFrame.y = this._frame.y;
  _oldFrame.width = this._frame.width;
  _oldFrame.height = this._frame.height;
  this.bitmap = this.oldBitmap;
  this.setFrame(_oldFrame.x, _oldFrame.y, _oldFrame.width, _oldFrame.height);
};

//------
// Game_CharacterBase
//------
Game_CharacterBase.prototype.largeSprite = function () {
  return false;
};
Game_Player.prototype.largeSprite = function () {
  return true;
};
Game_Follower.prototype.largeSprite = function () {
  return cpp.lsdf.followers;
};
Game_Vehicle.prototype.largeSprite = function () {
  return cpp.lsdf.vehicles;
};
Game_Event.prototype.largeSprite = function () {
  return this._largeSprite;
};

Game_Event.prototype.setupPage = function () {
  aliasSetupPage081115a.apply(this, arguments);
  this._largeSprite = false;
  if (this._pageIndex >= 0) {
    for (var i = 0; i < this.list().length; i++) {
      if ([108, 408].indexOf(this.list()[i]["code"]) >= 0) {
        var note = this.list()[i]["parameters"][0];
        if (note.match(/<large sprite>/i)) this._largeSprite = true;
      }
    }
  }
};

//------
// End of plugin
//------


code:
/*:
 * @plugindesc Allows ☆ tiles to use the "Passage (4 dir)" setting in the tilesets tab of the database.
 * @author Neon Black - Version 1.0
 *
 * @help ☆ Passability Fix v1.0
 *
 * V1.0 - 8.13.2015
 *
 * This plugin allows the user to define passage settings on ☆ passability
 * tiles, similar to how normal O passability is defined.  This plugin works on
 * its own without any need for settings.  It overwrites a single function but
 * should not interfere with any other plugins.  Nonetheless it should be placed
 * high in the plugin list.
 *
 * This work by Neon Black is licensed under a Creative Commons Attribution 4.0
 * International License.  To view a copy of this license, visit
 * http://creativecommons.org/licenses/by/4.0/.  Permissions beyond the scope of
 * this license may be available at neonblack.moe/terms.
 */

/*:ja
 * @plugindesc ★タイルに対して、4方向の通行指定が可能になります。
 * @author Neon Black - Version 1.0
 *
 * @help ☆ Passability Fix v1.0
 *
 * V1.0 - 8.13.2015
 *
 * このプラグインは、★タイルに対しても、
 * ○タイル同様の4方向の通行指定ができるようになるプラグインです。
 * このプラグインは設定不要で、独立して動作します。
 * 1つのファンクションを上書きしますが、他のプラグインには干渉しません。
 * プラグインリストの中では上位に置いておく必要があります。
 *
 * ■ライセンスポリシー
 * This work by Neon Black is licensed under a Creative Commons Attribution 4.0
 * International License.  To view a copy of this license, visit
 * http://creativecommons.org/licenses/by/4.0/.  Permissions beyond the scope of
 * this license may be available at neonblack.moe/terms.
 */

//------
// The following lines are the actual core code of the plugin.  While you are
// certainly invited to look, modifying it may result in undesirable results.
// Modify at your own risk!
//------

//------
// Imported and namespace
//------
var Imported = Imported || {};
Imported.CP_StarPassabilityFix = 1.0;

//------
// Alias functions
//------

//------
// Destructive functions list
/*
 Game_Map.prototype.checkPassage()
 */

// The only modified function....
Game_Map.prototype.checkPassage = function (x, y, bit) {
  var flags = this.tilesetFlags();
  var tiles = this.allTiles(x, y);
  for (var i = 0; i < tiles.length; i++) {
    var flag = flags[tiles[i]];
    if ((flag & 0x10) !== 0) {
      // [*] No effect on passage
      if ((flag & bit) === 0) continue;
      if ((flag & bit) === bit) return false;
    } else {
      if ((flag & bit) === 0)
        // [o] Passable
        return true;
      if ((flag & bit) === bit)
        // [x] Impassable
        return false;
    }
  }
  return false;
};

//------
// End of plugin
//------


code:
//=============================================================================
// Change Tile Size
// by Shaz
// Last Update: 2015.10.21
//=============================================================================

/*:
 * @plugindesc Allows maps based on a grid size other than 48x48
 * @author Shaz
 *
 * @param Tile Size
 * @desc Size of tiles (pixels)
 * @default 48
 *
 * @param Tileset Image Folder
 * @desc Folder where the in-game tilesets are kept
 * @default img/tilesets/
 *
 * @param Parallax Image Folder
 * @desc Folder where the in-game parallaxes are kept
 * @default img/parallaxes/
 *
 * @help This plugin does not provide plugin commands.
 *
 * To use the map editor with tiles of a size other than 48x48 in your project,
 * have two folders for tileset images.  The folder named in the plugin
 * parameters is for original, high-quality, final-sized tiles.  The
 * original folder, img/tilesets/ can contain a duplicate copy of each
 * tileset, shrunk or enlarged to 48x48 pixels per tile.  Quality in the
 * editor may be poorer, but the original tiles will be used in the game.
 * The img/tilesets folder can be cleared prior to distribution.
 *
 * The same applies to the img/parallaxes folder if using a parallax map
 * with a grid size other than 48x48.
 *
 */

/*:ja
 * @plugindesc 48x48以外のグリッドサイズのマップを使用可能にします。
 * @author Shaz
 *
 * @param Tile Size
 * @desc タイルのサイズの指定です(ピクセル)
 * @default 48
 *
 * @param Tileset Image Folder
 * @desc タイルセットが保管されているフォルダーです
 * @default img/tilesets/
 *
 * @param Parallax Image Folder
 * @desc パララックスイメージが保管されているフォルダーです
 * @default img/parallaxes/
 *
 * @help このプラグインは、プラグインコマンドを含みません。
 *
 * 48x48サイズ以外のタイルを使用したい場合、
 * タイルセット用に2つのフォルダーを作成してください。
 * パラメーターによって指定されたフォルダーは、最終版サイズの
 * オリジナル画像の保管用ファイルとしてください。
 * img/tilesets/のオリジナルフォルダーには、それぞれのタイルセットから
 * 48x48のサイズに縮小・拡大された複製が保管されます。
 * エディタ上では荒く見えるかもしれませんが、
 * ゲーム内ではオリジナルのタイルが使われますので大丈夫です。
 * img/tilesetsは配布前に削除することができます。
 *
 * 48x48グリッドサイズ以外でパララックスマップを利用する場合にも、
 * 同様の操作をimg/parallaxesに行ってください。
 */

(function () {
  var parameters = PluginManager.parameters("ChangeTileSize");
  var tileSize = parseInt(parameters["Tile Size"] || 48);
  var tilesetsFolder = String(
    parameters["Tileset Image Folder"] || "img/tilesets/"
  );
  var parallaxesFolder = String(
    parameters["Parallax Image Folder"] || "img/parallaxes/"
  );

  ImageManager.loadTileset = function (filename, hue) {
    return this.loadBitmap(tilesetsFolder, filename, hue, false);
  };

  ImageManager.loadParallax = function (filename, hue) {
    return this.loadBitmap(parallaxesFolder, filename, hue, true);
  };

  Game_Map.prototype.tileWidth = function () {
    return tileSize;
  };

  Game_Map.prototype.tileHeight = function () {
    return tileSize;
  };

  Game_Vehicle.prototype.maxAltitude = function () {
    return tileSize;
  };
})();


code:
//=============================================================================
// ChangeWeaponOnBattle.js
//=============================================================================

/*:
 * @plugindesc make battle command that changes weapon.
 * @author Sasuke KANNAZUKI
 *
 * @param commandName
 * @desc command name that change equip
 * @default Equip
 *
 * @help This plugin does not provide plugin commands.
 *
 * - changable equips are only weapon(s) and shield.
 * - changing weapon doesn't consume turn.
 *
 */

/*:ja
 * @plugindesc 戦闘コマンドに装備変更を追加
 * @author 神無月サスケ
 *
 * @param commandName
 * @desc 装備変更のコマンド名です。
 * @default 装備変更
 *
 * @help このプラグインには、プラグインコマンドはありません。
 *
 * - 変更可能なのは武器と盾だけです。
 * - 装備変更はターンを消費しません。
 *
 */

(function () {
  var parameters = PluginManager.parameters("ChangeWeaponOnBattle");
  var commandName = parameters["commandName"] || "Equip";

  //---------------------------------------------------------------------------
  // Tiny equip status
  // display only atk and def.
  //
  function Window_TinyEquipStatus() {
    this.initialize.apply(this, arguments);
  }

  Window_TinyEquipStatus.prototype = Object.create(
    Window_EquipStatus.prototype
  );
  Window_TinyEquipStatus.prototype.constructor = Window_TinyEquipStatus;

  Window_TinyEquipStatus.prototype.initialize = function (x, y) {
    Window_EquipStatus.prototype.initialize.call(this, x, y);
  };

  Window_TinyEquipStatus.prototype.numVisibleRows = function () {
    return 2;
  };

  Window_TinyEquipStatus.prototype.refresh = function () {
    this.contents.clear();
    if (this._actor) {
      for (var i = 0; i < 2; i++) {
        this.drawItem(0, this.lineHeight() * i, 2 + i);
      }
    }
  };

  //---------------------------------------------------------------------------
  // Tiny equip slot
  // display only a weapon, and a shield or another weapon.
  //
  function Window_TinyEquipSlot() {
    this.initialize.apply(this, arguments);
  }

  Window_TinyEquipSlot.prototype = Object.create(Window_EquipSlot.prototype);
  Window_TinyEquipSlot.prototype.constructor = Window_TinyEquipSlot;

  Window_TinyEquipSlot.prototype.initialize = function (x, y, width, height) {
    Window_EquipSlot.prototype.initialize.call(this, x, y, width, height);
  };

  Window_TinyEquipSlot.prototype.maxItems = function () {
    return this._actor ? 2 : 0;
  };

  Window_TinyEquipSlot.prototype.show = function () {
    Window_EquipSlot.prototype.show.call(this);
    this.showHelpWindow();
  };

  Window_TinyEquipSlot.prototype.hide = function () {
    Window_EquipSlot.prototype.hide.call(this);
    this.hideHelpWindow();
  };

  //---------------------------------------------------------------------------

  //
  // add equipment windows for check active.
  //
  var _Scene_Battle_isAnyInputWindowActive =
    Scene_Battle.prototype.isAnyInputWindowActive;
  Scene_Battle.prototype.isAnyInputWindowActive = function () {
    if (_Scene_Battle_isAnyInputWindowActive.call(this)) {
      return true;
    }
    return this._equipSlotWindow.active || this._equipItemWindow.active;
  };

  //
  // creat new windows for equip weapon(s) on battle
  //
  var _Scene_Battle_createAllWindows = Scene_Battle.prototype.createAllWindows;
  Scene_Battle.prototype.createAllWindows = function () {
    _Scene_Battle_createAllWindows.call(this);
    this.createEquipStatusWindow();
    this.createEquipSlotWindow();
    this.createEquipItemWindow();
  };

  Scene_Battle.prototype.createEquipStatusWindow = function () {
    this._equipStatusWindow = new Window_TinyEquipStatus(
      0,
      this._helpWindow.height
    );
    this._equipStatusWindow.hide();
    this.addWindow(this._equipStatusWindow);
  };

  Scene_Battle.prototype.createEquipSlotWindow = function () {
    var wx = this._equipStatusWindow.width;
    var wy = this._helpWindow.height;
    var ww = Graphics.boxWidth - this._equipStatusWindow.width;
    var wh = this._equipStatusWindow.height;
    this._equipSlotWindow = new Window_TinyEquipSlot(wx, wy, ww, wh);
    this._equipSlotWindow.setHelpWindow(this._helpWindow);
    this._equipSlotWindow.setStatusWindow(this._equipStatusWindow);
    this._equipSlotWindow.setHandler("ok", this.onEquipSlotOk.bind(this));
    this._equipSlotWindow.setHandler(
      "cancel",
      this.onEquipSlotCancel.bind(this)
    );
    this._equipSlotWindow.hide();
    this.addWindow(this._equipSlotWindow);
  };

  Scene_Battle.prototype.createEquipItemWindow = function () {
    var wx = 0;
    var wy = this._equipStatusWindow.y + this._equipStatusWindow.height;
    var ww = Graphics.boxWidth;
    var wh = Graphics.boxHeight - wy - this._statusWindow.height;
    this._equipItemWindow = new Window_EquipItem(wx, wy, ww, wh);
    this._equipItemWindow.setHelpWindow(this._helpWindow);
    this._equipItemWindow.setStatusWindow(this._equipStatusWindow);
    this._equipItemWindow.setHandler("ok", this.onEquipItemOk.bind(this));
    this._equipItemWindow.setHandler(
      "cancel",
      this.onEquipItemCancel.bind(this)
    );
    this._equipSlotWindow.setItemWindow(this._equipItemWindow);
    this._equipItemWindow.hide();
    this.addWindow(this._equipItemWindow);
  };

  //
  // add command to actor command window
  //
  var _Scene_Battle_createActorCommandWindow =
    Scene_Battle.prototype.createActorCommandWindow;
  Scene_Battle.prototype.createActorCommandWindow = function () {
    _Scene_Battle_createActorCommandWindow.call(this);
    this._actorCommandWindow.setHandler("equip", this.commandEquip.bind(this));
  };

  var _Window_ActorCommand_makeCommandList =
    Window_ActorCommand.prototype.makeCommandList;
  Window_ActorCommand.prototype.makeCommandList = function () {
    _Window_ActorCommand_makeCommandList.call(this);
    if (this._actor) {
      this.addEquipCommand();
    }
  };

  Window_ActorCommand.prototype.addEquipCommand = function () {
    this.addCommand(commandName, "equip");
  };

  //
  // process handlers
  //
  Scene_Battle.prototype.refreshActor = function () {
    var actor = BattleManager.actor();
    this._equipStatusWindow.setActor(actor);
    this._equipSlotWindow.setActor(actor);
    this._equipItemWindow.setActor(actor);
  };

  Scene_Battle.prototype.commandEquip = function () {
    this.refreshActor();
    this._equipStatusWindow.show();
    this._equipItemWindow.refresh();
    this._equipItemWindow.show();
    this._equipSlotWindow.refresh();
    this._equipSlotWindow.show();
    this._equipSlotWindow.activate();
    this._equipSlotWindow.select(0);
  };

  Scene_Battle.prototype.onEquipSlotOk = function () {
    this._equipItemWindow.activate();
    this._equipItemWindow.select(0);
  };

  Scene_Battle.prototype.onEquipSlotCancel = function () {
    this._equipStatusWindow.hide();
    this._equipItemWindow.hide();
    this._equipSlotWindow.hide();
    this._actorCommandWindow.activate();
    this._actorCommandWindow.select(0);
  };

  Scene_Battle.prototype.onEquipItemOk = function () {
    SoundManager.playEquip();
    BattleManager.actor().changeEquip(
      this._equipSlotWindow.index(),
      this._equipItemWindow.item()
    );
    this._equipSlotWindow.activate();
    this._equipSlotWindow.refresh();
    this._equipItemWindow.deselect();
    this._equipItemWindow.refresh();
    this._equipStatusWindow.refresh();
  };

  Scene_Battle.prototype.onEquipItemCancel = function () {
    this._equipSlotWindow.activate();
    this._equipItemWindow.deselect();
  };
})();


code:
/*:
 * @plugindesc Plugin used to set basic parameters.
 * @author RM CoreScript team
 *
 * @help This plugin does not provide plugin commands.
 *
 * @param cacheLimit
 * @desc For setting the upper limit of image memory cache. (MPix)
 * @default 10
 *
 * @param screenWidth
 * @desc For setting the screen width.
 * @default 816
 *
 * @param screenHeight
 * @desc For setting the screen height.
 * @default 624
 *
 * @param changeWindowWidthTo
 * @desc If set, change window width to this value
 *
 * @param changeWindowHeightTo
 * @desc If set, change window height to this value
 *
 * @param renderingMode
 * @desc Rendering mode (canvas/webgl/auto)
 * @default auto
 *
 * @param alwaysDash
 * @desc To set initial value as to whether the player always dashes. (on/off)
 * @default off
 */

/*:ja
 * @plugindesc 基本的なパラメーターを設定するプラグインです。
 * @author RM CoreScript team
 *
 * @help このプラグインにはプラグインコマンドはありません。
 *
 * @param cacheLimit
 * @desc 画像のメモリへのキャッシュの上限値 (MPix)
 * @default 10
 *
 * @param screenWidth
 * @desc 画面サイズの幅
 * @default 816
 *
 * @param screenHeight
 * @desc 画面サイズの高さ
 * @default 624
 *
 * @param changeWindowWidthTo
 * @desc 値が設定された場合、ウインドウの幅を指定した値に変更
 *
 * @param changeWindowHeightTo
 * @desc 値が設定された場合、ウインドウの高さを指定した値に変更
 *
 * @param renderingMode
 * @desc レンダリングモード (canvas/webgl/auto)
 * @default auto
 *
 * @param alwaysDash
 * @desc プレイヤーが常時ダッシュするかどうかの初期値 (on/off)
 * @default off
 */

(function () {
  function toNumber(str, def) {
    return isNaN(str) ? def : +(str || def);
  }

  var parameters = PluginManager.parameters("Community_Basic");
  var cacheLimit = toNumber(parameters["cacheLimit"], 10);
  var screenWidth = toNumber(parameters["screenWidth"], 816);
  var screenHeight = toNumber(parameters["screenHeight"], 624);
  var renderingMode = parameters["renderingMode"].toLowerCase();
  var alwaysDash = parameters["alwaysDash"].toLowerCase() === "on";
  var windowWidthTo = toNumber(parameters["changeWindowWidthTo"], 0);
  var windowHeightTo = toNumber(parameters["changeWindowHeightTo"], 0);

  var windowWidth;
  var windowHeight;

  if (windowWidthTo) {
    windowWidth = windowWidthTo;
  } else if (screenWidth !== SceneManager._screenWidth) {
    windowWidth = screenWidth;
  }

  if (windowHeightTo) {
    windowHeight = windowHeightTo;
  } else if (screenHeight !== SceneManager._screenHeight) {
    windowHeight = screenHeight;
  }

  ImageCache.limit = cacheLimit * 1000 * 1000;
  SceneManager._screenWidth = screenWidth;
  SceneManager._screenHeight = screenHeight;
  SceneManager._boxWidth = screenWidth;
  SceneManager._boxHeight = screenHeight;

  SceneManager.preferableRendererType = function () {
    if (Utils.isOptionValid("canvas")) {
      return "canvas";
    } else if (Utils.isOptionValid("webgl")) {
      return "webgl";
    } else if (renderingMode === "canvas") {
      return "canvas";
    } else if (renderingMode === "webgl") {
      return "webgl";
    } else {
      return "auto";
    }
  };

  var _ConfigManager_applyData = ConfigManager.applyData;
  ConfigManager.applyData = function (config) {
    _ConfigManager_applyData.apply(this, arguments);
    if (config["alwaysDash"] === undefined) {
      this.alwaysDash = alwaysDash;
    }
  };

  var _SceneManager_initNwjs = SceneManager.initNwjs;
  SceneManager.initNwjs = function () {
    _SceneManager_initNwjs.apply(this, arguments);

    if (Utils.isNwjs() && windowWidth && windowHeight) {
      var dw = windowWidth - window.innerWidth;
      var dh = windowHeight - window.innerHeight;
      window.moveBy(-dw / 2, -dh / 2);
      window.resizeBy(dw, dh);
    }
  };
})();


code:
//=============================================================================
// ConfigureRootElement.js
// Version: 1.0.0
//----------------------------------------------------------------------------
// Copyright (c) 2016 DeNA
// RPGMV 1.0.0
//=============================================================================

//=============================================================================
/*:
 * @plugindesc v1.00 任意のroot要素にゲーム本体の要素を追加できるようにするpluginです
 * @author DeNA
 *
 * @param ---General---
 * @default
 *
 * @param Root Element Id
 * @default
 *
 * @help
 * ============================================================================
 * Introduction
 * ============================================================================
 *
 * このpluginはgameの要素を追加するroot要素を指定できます。
 *
 *  # ConfigureRootElement.js
 *
 *  ## 使い方
 *  * GUI上からConfigureRootElement の"Root Element Id"に任意のDOMのidを指定する  * ことでゲームが表示される領域をコントロールすることができます。
 *
 *  ## 実装
 *
 *  ### RootElementの指定
 * 以下の部分を参照ください。
 *
 *  ```
 *     var Parameters = PluginManager.parameters('ConfigureRootElement');
 *     var RootElementId = String(Parameters['Root Element Id']);
 *     var GAME_ROOT_ELEMENT_NODE_KEY = 'ConfigureRootElement_Root_Element_Node_Key';
 *     try {
 *         if (RootElementId) {
 *             PluginManager.setParameters(GAME_ROOT_ELEMENT_NODE_KEY, document.getElementById(RootElementId));
 *         } else if (!(PluginManager.parameters(GAME_ROOT_ELEMENT_NODE_KEY) instanceof HTMLElement)) {
 *             PluginManager.setParameters(GAME_ROOT_ELEMENT_NODE_KEY, document.body);
 *         }
 *     } catch (e) {
 *         console.info('Caution! set default root element, document.body.');
 *         PluginManager.setParameters(GAME_ROOT_ELEMENT_NODE_KEY, document.body);
 *     }
 * ```
 *
 * ### 表示位置のコントロール
 *
 * * rpg_core.jsのGraphicsの以下の関数をオーバーライドすることで表示位置をコントロールしています。（rpg_core.jsに変更が入った場合はご注意ください。）
 * 	* Graphics.pageToCanvasX
 * 	* Graphics._createErrorPrinter
 *	* Graphics._createCanvas
 *	* Graphics._createVideo
 *	* Graphics._createUpperCanvas
 *	* Graphics._createModeBox
 *	* Graphics._createFontLoader
 *	* Graphics._disableTextSelection
 *	* Graphics._disableContextMenu
 *	* Graphics._requestFullScreen
 *
 * ============================================================================
 * Changelog
 * ============================================================================
 *
 * Version 1.00:
 * - Finished plugin!
 */
//=============================================================================

(function () {
  //-----------------------------------------------------------------------------
  // setup

  var Parameters = PluginManager.parameters("ConfigureRootElement");
  var RootElementId = String(Parameters["Root Element Id"]);
  var GAME_ROOT_ELEMENT_NODE_KEY = "ConfigureRootElement_Root_Element_Node_Key";
  try {
    if (RootElementId) {
      PluginManager.setParameters(
        GAME_ROOT_ELEMENT_NODE_KEY,
        document.getElementById(RootElementId)
      );
    } else if (
      !(
        PluginManager.parameters(GAME_ROOT_ELEMENT_NODE_KEY) instanceof
        HTMLElement
      )
    ) {
      PluginManager.setParameters(GAME_ROOT_ELEMENT_NODE_KEY, document.body);
    }
  } catch (e) {
    console.info("Caution! set default root element, document.body.");
    PluginManager.setParameters(GAME_ROOT_ELEMENT_NODE_KEY, document.body);
  }

  //-----------------------------------------------------------------------------
  // override Graphics

  /**
   * Converts an x coordinate on the page to the corresponding
   * x coordinate on the canvas area.
   *
   * @static
   * @method pageToCanvasX
   * @param {Number} x The x coordinate on the page to be converted
   * @return {Number} The x coordinate on the canvas area
   */
  Graphics.pageToCanvasX = function (x) {
    if (this._canvas) {
      var left = this._canvas.getBoundingClientRect().left;
      return Math.round((x - left) / this._realScale);
    } else {
      return 0;
    }
  };

  /**
   * @static
   * @method _createErrorPrinter
   * @private
   */
  Graphics._createErrorPrinter = function () {
    this._errorPrinter = document.createElement("p");
    this._errorPrinter.id = "ErrorPrinter";
    this._updateErrorPrinter();
    PluginManager.parameters(GAME_ROOT_ELEMENT_NODE_KEY).appendChild(
      this._errorPrinter
    );
  };

  /**
   * @static
   * @method _createCanvas
   * @private
   */
  Graphics._createCanvas = function () {
    this._canvas = document.createElement("canvas");
    this._canvas.id = "GameCanvas";
    this._updateCanvas();
    PluginManager.parameters(GAME_ROOT_ELEMENT_NODE_KEY).appendChild(
      this._canvas
    );
  };

  /**
   * @static
   * @method _createVideo
   * @private
   */
  Graphics._createVideo = function () {
    this._video = document.createElement("video");
    this._video.id = "GameVideo";
    this._video.style.opacity = 0;
    this._updateVideo();
    PluginManager.parameters(GAME_ROOT_ELEMENT_NODE_KEY).appendChild(
      this._video
    );
  };

  /**
   * @static
   * @method _createUpperCanvas
   * @private
   */
  Graphics._createUpperCanvas = function () {
    this._upperCanvas = document.createElement("canvas");
    this._upperCanvas.id = "UpperCanvas";
    this._updateUpperCanvas();
    PluginManager.parameters(GAME_ROOT_ELEMENT_NODE_KEY).appendChild(
      this._upperCanvas
    );
  };

  /**
   * @static
   * @method _createModeBox
   * @private
   */
  Graphics._createModeBox = function () {
    var box = document.createElement("div");
    box.id = "modeTextBack";
    box.style.position = "absolute";
    box.style.left = "5px";
    box.style.top = "5px";
    box.style.width = "119px";
    box.style.height = "58px";
    box.style.background = "rgba(0,0,0,0.2)";
    box.style.zIndex = 9;
    box.style.opacity = 0;

    var text = document.createElement("div");
    text.id = "modeText";
    text.style.position = "absolute";
    text.style.left = "0px";
    text.style.top = "41px";
    text.style.width = "119px";
    text.style.fontSize = "12px";
    text.style.fontFamily = "monospace";
    text.style.color = "white";
    text.style.textAlign = "center";
    text.style.textShadow = "1px 1px 0 rgba(0,0,0,0.5)";
    text.innerHTML = this.isWebGL() ? "WebGL mode" : "Canvas mode";

    PluginManager.parameters(GAME_ROOT_ELEMENT_NODE_KEY).appendChild(box);
    box.appendChild(text);

    this._modeBox = box;
  };

  /**
   * @static
   * @method _createFontLoader
   * @param {String} name
   * @private
   */
  Graphics._createFontLoader = function (name) {
    var div = document.createElement("div");
    var text = document.createTextNode(".");
    div.style.fontFamily = name;
    div.style.fontSize = "0px";
    div.style.color = "transparent";
    div.style.position = "absolute";
    div.style.margin = "auto";
    div.style.top = "0px";
    div.style.left = "0px";
    div.style.width = "1px";
    div.style.height = "1px";
    div.appendChild(text);
    PluginManager.parameters(GAME_ROOT_ELEMENT_NODE_KEY).appendChild(div);
  };

  /**
   * @static
   * @method _disableTextSelection
   * @private
   */
  Graphics._disableTextSelection = function () {
    var body = PluginManager.parameters(GAME_ROOT_ELEMENT_NODE_KEY);
    body.style.userSelect = "none";
    body.style.webkitUserSelect = "none";
    body.style.msUserSelect = "none";
    body.style.mozUserSelect = "none";
  };

  /**
   * @static
   * @method _disableContextMenu
   * @private
   */
  Graphics._disableContextMenu = function () {
    var elements = PluginManager.parameters(
      GAME_ROOT_ELEMENT_NODE_KEY
    ).getElementsByTagName("*");
    var oncontextmenu = function () {
      return false;
    };
    for (var i = 0; i < elements.length; i++) {
      elements[i].oncontextmenu = oncontextmenu;
    }
  };

  /**
   * @static
   * @method _requestFullScreen
   * @private
   */
  Graphics._requestFullScreen = function () {
    var element = PluginManager.parameters(GAME_ROOT_ELEMENT_NODE_KEY);
    if (element.requestFullScreen) {
      element.requestFullScreen();
    } else if (element.mozRequestFullScreen) {
      element.mozRequestFullScreen();
    } else if (element.webkitRequestFullScreen) {
      element.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);
    } else if (element.msRequestFullscreen) {
      element.msRequestFullscreen();
    }
  };
})();


code:
//=============================================================================
// DeadOrAliveItem.js
//=============================================================================

/*:
 * @plugindesc make item/skill whose scope is both dead or alive.
 * @author Sasuke KANNAZUKI
 *
 * @help This plugin does not provide plugin commands.
 *
 * Skill/Item Note:
 *   <scope:oneDeadOrAlive>
 *   <scope:allDeadOrAlive>
 * usage example:
 *  - a skill that revive dead member with full HP,
 *   if use it to living menber, recover full HP.
 */
/*:ja
 * @plugindesc 戦闘不能かどうかに関係なく、仲間に使える技/アイテムを作成
 * @author 神無月サスケ
 *
 * @help このプラグインにはプラグインコマンドはありません。
 *
 * スキル/アイテムのメモに以下のように書いてください
 * <scope:oneDeadOrAlive>  生死問わず仲間1体への効果になります
 * <scope:allDeadOrAlive>　生死問わず仲間全体への効果になります
 *
 * 使用例：
 * 死者をHP全快で蘇生させる技だが、生きている味方に使用してもHP全快する
 */

(function () {
  // added item.scope
  // 20 : single friend (dead or alive)
  // 21 : all friends (dead or alive)

  //
  // process data in item.note
  // (for efficiency, note is processed at first.)
  //
  var _Scene_Boot_start = Scene_Boot.prototype.start;
  Scene_Boot.prototype.start = function () {
    _Scene_Boot_start.call(this);
    DataManager.processItemScope();
  };

  DataManager.processItemScope = function () {
    for (var i = 1; i < $dataSkills.length; i++) {
      DataManager.checkEachItemScope($dataSkills[i]);
    }
    for (var i = 1; i < $dataItems.length; i++) {
      DataManager.checkEachItemScope($dataItems[i]);
    }
  };

  DataManager.checkEachItemScope = function (item) {
    var result = item.meta.scope;
    if (result) {
      if (result == "oneDeadOrAlive") {
        item.scope = 20;
      } else if (result == "allDeadOrAlive") {
        item.scope = 21;
      }
    }
  };

  //
  // make status "dead or alive"
  //
  Game_Action.prototype.isDeadOrAlive = function () {
    return this.checkItemScope([20, 21]);
  };

  var _Game_Action_isForFriend = Game_Action.prototype.isForFriend;
  Game_Action.prototype.isForFriend = function () {
    if (_Game_Action_isForFriend.call(this)) {
      return true;
    }
    return this.checkItemScope([20, 21]);
  };

  var _Game_Action_isForDeadFriend = Game_Action.prototype.isForDeadFriend;
  Game_Action.prototype.isForDeadFriend = function () {
    if (_Game_Action_isForDeadFriend.call(this)) {
      return true;
    }
    return this.checkItemScope([20, 21]);
  };

  var _Game_Action_isForOne = Game_Action.prototype.isForOne;
  Game_Action.prototype.isForOne = function () {
    if (_Game_Action_isForOne.call(this)) {
      return true;
    }
    return this.checkItemScope([20]);
  };

  var _Game_Action_isForAll = Game_Action.prototype.isForAll;
  Game_Action.prototype.isForAll = function () {
    if (_Game_Action_isForAll.call(this)) {
      return true;
    }
    return this.checkItemScope([21]);
  };

  var _Game_Action_needsSelection = Game_Action.prototype.needsSelection;
  Game_Action.prototype.needsSelection = function () {
    if (_Game_Action_needsSelection.call(this)) {
      return true;
    }
    return this.checkItemScope([20]);
  };

  //
  // smooth/random target
  //
  Game_Unit.prototype.smoothTargetDeadOrAlive = function (index) {
    if (index < 0) {
      index = 0;
    }
    var member = this.members()[index];
    return member ? member : this.members()[0];
  };

  Game_Unit.prototype.randomTargetDeadOrAlive = function () {
    var randomDeadTarget = this.randomDeadTarget();
    if (randomDeadTarget) {
      return randomDeadTarget;
    }
    return this.randomTarget();
  };

  var _Game_Action_decideRandomTarget =
    Game_Action.prototype.decideRandomTarget;
  Game_Action.prototype.decideRandomTarget = function () {
    var target;
    if (this.isDeadOrAlive()) {
      target = this.friendsUnit().randomTargetDeadOrAlive();
      if (target) {
        this._targetIndex = target.index;
      } else {
        this.clear();
      }
      return;
    }
    _Game_Action_decideRandomTarget.call(this);
  };

  var _Game_Action_targetsForFriends = Game_Action.prototype.targetsForFriends;
  Game_Action.prototype.targetsForFriends = function () {
    var targets = [];
    var unit = this.friendsUnit();
    if (this.isDeadOrAlive()) {
      if (this.isForOne()) {
        targets.push(unit.smoothTargetDeadOrAlive(this._targetIndex));
      } else {
        targets = unit.members();
      }
      return targets;
    }
    return _Game_Action_targetsForFriends.call(this);
  };

  var _Game_Action_itemTargetCandidates =
    Game_Action.prototype.itemTargetCandidates;
  Game_Action.prototype.itemTargetCandidates = function () {
    if (!this.isValid()) {
      return [];
    } else if (this.isDeadOrAlive()) {
      return this.friendsUnit().members();
    }
    return _Game_Action_itemTargetCandidates.call(this);
  };

  var _Game_Action_testApply = Game_Action.prototype.testApply;
  Game_Action.prototype.testApply = function (target) {
    if (_Game_Action_testApply.call(this, target)) {
      return true;
    }
    // for convenience, always true
    if (this.isDeadOrAlive()) {
      return true;
    }
    return false;
  };
})();


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

/*:
 * @plugindesc 【MMP ver.1.1】戦闘メッセージが空の場合、表示しないようにします。
 * @author 木星ペンギン
 *
 * @help ●対応しているメッセージ一覧
 * 出現
 * 先制攻撃
 * 不意打ち
 * 逃走開始
 * 逃走失敗
 * 勝利
 * 敗北
 * 経験値獲得
 * お金獲得
 * アイテム獲得
 * レベルアップ
 * スキル習得
 *
 * ================================
 * 制作 : 木星ペンギン
 * URL : http://woodpenguin.blog.fc2.com/
 */

(function () {
  //-------------------------------------------------------------------------
  // BattleManager

  BattleManager.displayStartMessages = function () {
    if (TextManager.emerge.length > 0) {
      $gameTroop.enemyNames().forEach(function (name) {
        $gameMessage.add(TextManager.emerge.format(name));
      });
    }
    if (this._preemptive && TextManager.preemptive.length > 0) {
      $gameMessage.add(TextManager.preemptive.format($gameParty.name()));
    } else if (this._surprise && TextManager.surprise.length > 0) {
      $gameMessage.add(TextManager.surprise.format($gameParty.name()));
    }
  };

  BattleManager.displayVictoryMessage = function () {
    if (TextManager.victory.length > 0) {
      $gameMessage.add(TextManager.victory.format($gameParty.name()));
    }
  };

  BattleManager.displayDefeatMessage = function () {
    if (TextManager.defeat.length > 0) {
      $gameMessage.add(TextManager.defeat.format($gameParty.name()));
    }
  };

  BattleManager.displayEscapeSuccessMessage = function () {
    if (TextManager.escapeStart.length > 0) {
      $gameMessage.add(TextManager.escapeStart.format($gameParty.name()));
    }
  };

  BattleManager.displayEscapeFailureMessage = function () {
    if (TextManager.escapeStart.length > 0) {
      $gameMessage.add(TextManager.escapeStart.format($gameParty.name()));
    }
    if (TextManager.escapeFailure.length > 0) {
      $gameMessage.add("\\." + TextManager.escapeFailure);
    }
  };

  var _BattleManager_displayExp = BattleManager.displayExp;
  BattleManager.displayExp = function () {
    if (TextManager.escapeStart.length > 0) {
      _BattleManager_displayExp.call(this);
    }
  };

  var _BattleManager_displayGold = BattleManager.displayGold;
  BattleManager.displayGold = function () {
    if (TextManager.obtainGold.length > 0) {
      _BattleManager_displayGold.call(this);
    }
  };

  var _BattleManager_displayDropItems = BattleManager.displayDropItems;
  BattleManager.displayDropItems = function () {
    if (TextManager.obtainItem.length > 0) {
      _BattleManager_displayDropItems.call(this);
    }
  };

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

  Game_Actor.prototype.displayLevelUp = function (newSkills) {
    if (TextManager.levelUp.length > 0) {
      var text = TextManager.levelUp.format(
        this._name,
        TextManager.level,
        this._level
      );
      $gameMessage.newPage();
      $gameMessage.add(text);
    }
    if (TextManager.obtainSkill.length > 0) {
      newSkills.forEach(function (skill) {
        $gameMessage.add(TextManager.obtainSkill.format(skill.name));
      });
    }
  };
})();


code:
//=============================================================================
// EnemyBook.js
//=============================================================================

/*:
 * @plugindesc Displays detailed statuses of enemies.
 * @author Yoji Ojima
 *
 * @param Unknown Data
 * @desc The index name for an unknown enemy.
 * @default ??????
 *
 * @help
 *
 * Plugin Command:
 *   EnemyBook open         # Open the enemy book screen
 *   EnemyBook add 3        # Add enemy #3 to the enemy book
 *   EnemyBook remove 4     # Remove enemy #4 from the enemy book
 *   EnemyBook complete     # Complete the enemy book
 *   EnemyBook clear        # Clear the enemy book
 *
 * Enemy Note:
 *   <desc1:foobar>         # Description text in the enemy book, line 1
 *   <desc2:blahblah>       # Description text in the enemy book, line 2
 *   <book:no>              # This enemy does not appear in the enemy book
 */

/*:ja
 * @plugindesc モンスター図鑑です。敵キャラの詳細なステータスを表示します。
 * @author Yoji Ojima
 *
 * @param Unknown Data
 * @desc 未確認の敵キャラの索引名です。
 * @default ？？？？？？
 *
 * @help
 *
 * プラグインコマンド:
 *   EnemyBook open         # 図鑑画面を開く
 *   EnemyBook add 3        # 敵キャラ３番を図鑑に追加
 *   EnemyBook remove 4     # 敵キャラ４番を図鑑から削除
 *   EnemyBook complete     # 図鑑を完成させる
 *   EnemyBook clear        # 図鑑をクリアする
 *
 * 敵キャラのメモ:
 *   <desc1:なんとか>       # 説明１行目
 *   <desc2:かんとか>       # 説明２行目
 *   <book:no>              # 図鑑に載せない場合
 */

(function () {
  var parameters = PluginManager.parameters("EnemyBook");
  var unknownData = String(parameters["Unknown Data"] || "??????");

  var _Game_Interpreter_pluginCommand =
    Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function (command, args) {
    _Game_Interpreter_pluginCommand.call(this, command, args);
    if (command === "EnemyBook") {
      switch (args[0]) {
        case "open":
          SceneManager.push(Scene_EnemyBook);
          break;
        case "add":
          $gameSystem.addToEnemyBook(Number(args[1]));
          break;
        case "remove":
          $gameSystem.removeFromEnemyBook(Number(args[1]));
          break;
        case "complete":
          $gameSystem.completeEnemyBook();
          break;
        case "clear":
          $gameSystem.clearEnemyBook();
          break;
      }
    }
  };

  Game_System.prototype.addToEnemyBook = function (enemyId) {
    if (!this._enemyBookFlags) {
      this.clearEnemyBook();
    }
    this._enemyBookFlags[enemyId] = true;
  };

  Game_System.prototype.removeFromEnemyBook = function (enemyId) {
    if (this._enemyBookFlags) {
      this._enemyBookFlags[enemyId] = false;
    }
  };

  Game_System.prototype.completeEnemyBook = function () {
    this.clearEnemyBook();
    for (var i = 1; i < $dataEnemies.length; i++) {
      this._enemyBookFlags[i] = true;
    }
  };

  Game_System.prototype.clearEnemyBook = function () {
    this._enemyBookFlags = [];
  };

  Game_System.prototype.isInEnemyBook = function (enemy) {
    if (this._enemyBookFlags && enemy) {
      return !!this._enemyBookFlags[enemy.id];
    } else {
      return false;
    }
  };

  var _Game_Troop_setup = Game_Troop.prototype.setup;
  Game_Troop.prototype.setup = function (troopId) {
    _Game_Troop_setup.call(this, troopId);
    this.members().forEach(function (enemy) {
      if (enemy.isAppeared()) {
        $gameSystem.addToEnemyBook(enemy.enemyId());
      }
    }, this);
  };

  var _Game_Enemy_appear = Game_Enemy.prototype.appear;
  Game_Enemy.prototype.appear = function () {
    _Game_Enemy_appear.call(this);
    $gameSystem.addToEnemyBook(this._enemyId);
  };

  var _Game_Enemy_transform = Game_Enemy.prototype.transform;
  Game_Enemy.prototype.transform = function (enemyId) {
    _Game_Enemy_transform.call(this, enemyId);
    $gameSystem.addToEnemyBook(enemyId);
  };

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

  Scene_EnemyBook.prototype = Object.create(Scene_MenuBase.prototype);
  Scene_EnemyBook.prototype.constructor = Scene_EnemyBook;

  Scene_EnemyBook.prototype.initialize = function () {
    Scene_MenuBase.prototype.initialize.call(this);
  };

  Scene_EnemyBook.prototype.create = function () {
    Scene_MenuBase.prototype.create.call(this);
    this._indexWindow = new Window_EnemyBookIndex(0, 0);
    this._indexWindow.setHandler("cancel", this.popScene.bind(this));
    var wy = this._indexWindow.height;
    var ww = Graphics.boxWidth;
    var wh = Graphics.boxHeight - wy;
    this._statusWindow = new Window_EnemyBookStatus(0, wy, ww, wh);
    this.addWindow(this._indexWindow);
    this.addWindow(this._statusWindow);
    this._indexWindow.setStatusWindow(this._statusWindow);
  };

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

  Window_EnemyBookIndex.prototype = Object.create(Window_Selectable.prototype);
  Window_EnemyBookIndex.prototype.constructor = Window_EnemyBookIndex;

  Window_EnemyBookIndex.lastTopRow = 0;
  Window_EnemyBookIndex.lastIndex = 0;

  Window_EnemyBookIndex.prototype.initialize = function (x, y) {
    var width = Graphics.boxWidth;
    var height = this.fittingHeight(6);
    Window_Selectable.prototype.initialize.call(this, x, y, width, height);
    this.refresh();
    this.setTopRow(Window_EnemyBookIndex.lastTopRow);
    this.select(Window_EnemyBookIndex.lastIndex);
    this.activate();
  };

  Window_EnemyBookIndex.prototype.maxCols = function () {
    return 3;
  };

  Window_EnemyBookIndex.prototype.maxItems = function () {
    return this._list ? this._list.length : 0;
  };

  Window_EnemyBookIndex.prototype.setStatusWindow = function (statusWindow) {
    this._statusWindow = statusWindow;
    this.updateStatus();
  };

  Window_EnemyBookIndex.prototype.update = function () {
    Window_Selectable.prototype.update.call(this);
    this.updateStatus();
  };

  Window_EnemyBookIndex.prototype.updateStatus = function () {
    if (this._statusWindow) {
      var enemy = this._list[this.index()];
      this._statusWindow.setEnemy(enemy);
    }
  };

  Window_EnemyBookIndex.prototype.refresh = function () {
    this._list = [];
    for (var i = 1; i < $dataEnemies.length; i++) {
      var enemy = $dataEnemies[i];
      if (enemy.name && enemy.meta.book !== "no") {
        this._list.push(enemy);
      }
    }
    this.createContents();
    this.drawAllItems();
  };

  Window_EnemyBookIndex.prototype.drawItem = function (index) {
    var enemy = this._list[index];
    var rect = this.itemRectForText(index);
    var name;
    if ($gameSystem.isInEnemyBook(enemy)) {
      name = enemy.name;
    } else {
      name = unknownData;
    }
    this.drawText(name, rect.x, rect.y, rect.width);
  };

  Window_EnemyBookIndex.prototype.processCancel = function () {
    Window_Selectable.prototype.processCancel.call(this);
    Window_EnemyBookIndex.lastTopRow = this.topRow();
    Window_EnemyBookIndex.lastIndex = this.index();
  };

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

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

  Window_EnemyBookStatus.prototype.initialize = function (x, y, width, height) {
    Window_Base.prototype.initialize.call(this, x, y, width, height);
    this._enemy = null;
    this._enemySprite = new Sprite();
    this._enemySprite.anchor.x = 0.5;
    this._enemySprite.anchor.y = 0.5;
    this._enemySprite.x = width / 2 - 20;
    this._enemySprite.y = height / 2;
    this.addChildToBack(this._enemySprite);
    this.refresh();
  };

  Window_EnemyBookStatus.prototype.setEnemy = function (enemy) {
    if (this._enemy !== enemy) {
      this._enemy = enemy;
      this.refresh();
    }
  };

  Window_EnemyBookStatus.prototype.update = function () {
    Window_Base.prototype.update.call(this);
    if (this._enemySprite.bitmap) {
      var bitmapHeight = this._enemySprite.bitmap.height;
      var contentsHeight = this.contents.height;
      var scale = 1;
      if (bitmapHeight > contentsHeight) {
        scale = contentsHeight / bitmapHeight;
      }
      this._enemySprite.scale.x = scale;
      this._enemySprite.scale.y = scale;
    }
  };

  Window_EnemyBookStatus.prototype.refresh = function () {
    var enemy = this._enemy;
    var x = 0;
    var y = 0;
    var lineHeight = this.lineHeight();

    this.contents.clear();

    if (!enemy || !$gameSystem.isInEnemyBook(enemy)) {
      this._enemySprite.bitmap = null;
      return;
    }

    var name = enemy.battlerName;
    var hue = enemy.battlerHue;
    var bitmap;
    if ($gameSystem.isSideView()) {
      bitmap = ImageManager.loadSvEnemy(name, hue);
    } else {
      bitmap = ImageManager.loadEnemy(name, hue);
    }
    this._enemySprite.bitmap = bitmap;

    this.resetTextColor();
    this.drawText(enemy.name, x, y);

    x = this.textPadding();
    y = lineHeight + this.textPadding();

    for (var i = 0; i < 8; i++) {
      this.changeTextColor(this.systemColor());
      this.drawText(TextManager.param(i), x, y, 160);
      this.resetTextColor();
      this.drawText(enemy.params[i], x + 160, y, 60, "right");
      y += lineHeight;
    }

    var rewardsWidth = 280;
    x = this.contents.width - rewardsWidth;
    y = lineHeight + this.textPadding();

    this.resetTextColor();
    this.drawText(enemy.exp, x, y);
    x += this.textWidth(enemy.exp) + 6;
    this.changeTextColor(this.systemColor());
    this.drawText(TextManager.expA, x, y);
    x += this.textWidth(TextManager.expA + "  ");

    this.resetTextColor();
    this.drawText(enemy.gold, x, y);
    x += this.textWidth(enemy.gold) + 6;
    this.changeTextColor(this.systemColor());
    this.drawText(TextManager.currencyUnit, x, y);

    x = this.contents.width - rewardsWidth;
    y += lineHeight;

    for (var j = 0; j < enemy.dropItems.length; j++) {
      var di = enemy.dropItems[j];
      if (di.kind > 0) {
        var item = Game_Enemy.prototype.itemObject(di.kind, di.dataId);
        this.drawItemName(item, x, y, rewardsWidth);
        y += lineHeight;
      }
    }

    var descWidth = 480;
    x = this.contents.width - descWidth;
    y = this.textPadding() + lineHeight * 7;
    this.drawTextEx(enemy.meta.desc1, x, y + lineHeight * 0, descWidth);
    this.drawTextEx(enemy.meta.desc2, x, y + lineHeight * 1, descWidth);
  };
})();


code:
//=============================================================================
// EscapeDungeon.js
//=============================================================================

/*:
 * @plugindesc Escape to the specified position from a dungeon.
 * @author Sasuke KANNAZUKI
 *
 * @param mapIdVal
 * @desc variable id for escape map ID.
 * Escape is disabled when variable number mapIdVal equals 0.
 * @default 21
 *
 * @param xCoordVal
 * @desc variable id for escape x coordinate.
 * @default 22
 *
 * @param yCoordVal
 * @desc variable id for escape y coordinate.
 * @default 23
 *
 * @help This plugin does not provide plugin commands.
 *
 * - Set the position variables when player enters the dungeon.
 * - Be sure to disable when player exits from the dungeon,
 *  especially when the player moves to other map by an event.
 *   (to disable this, let variables number mapIdVal be 0).
 * - After escape exection, escape is automatically disabled
 *
 * check points:
 * - this plugin only for menu scene, cannot apply at battle scene.
 * - the scope must be 0(none).
 *
 * Item/Skill Note:
 * <ESCAPE> : the item/skill is for escape.
 */
/*:ja
 * @plugindesc ダンジョンから特定の場所にエスケープ
 * @author 神無月サスケ
 *
 * @param mapIdVal
 * @desc 脱出するマップのIDを格納するゲーム変数番号
 * この値が 0 の時は、エスケープは出来ません。
 * @default 21
 *
 * @param xCoordVal
 * @desc 脱出するマップのX座標用の変数を格納するゲーム変数番号
 * @default 22
 *
 * @param yCoordVal
 * @desc 脱出するマップのY座標用の変数を格納するゲーム変数番号
 * @default 23
 *
 * @help このプラグインにプラグインコマンドはありません。
 *
 * - プレイヤーがダンジョンに入る際に変数を設定してください。
 * - ダンジョンから出る時は、忘れずにエスケープ禁止にしてください。
 *  特にダンジョンからイベントで別の場所に行く場合は忘れずに。
 *   (mapIdVal の変数を 0 にしてください)。
 * - エスケープした後、自動的にエスケープ不可になります。
 *
 * チェックポイント:
 * - このプラグインはメニュー専用です。戦闘時は使用できません。
 * - 「範囲」は「なし」にしてください。
 *
 * アイテムや魔法のメモに以下を書くとエスケープとみなされます：
 * <ESCAPE>
 */

(function () {
  var parameters = PluginManager.parameters("EscapeDungeon");
  var mapIdVal = Number(parameters["mapIdVal"] || 21);
  var xCoordVal = Number(parameters["xCoordVal"] || 22);
  var yCoordVal = Number(parameters["yCoordVal"] || 23);
  var reEscape = /<ESCAPE>/i;

  //
  // use escape item
  //
  var _Scene_ItemBase_useItem = Scene_ItemBase.prototype.useItem;
  Scene_ItemBase.prototype.useItem = function () {
    _Scene_ItemBase_useItem.call(this);
    if (reEscape.exec(this.item().note) != null) {
      this.useEscapeItem();
    }
  };

  Scene_ItemBase.prototype.useEscapeItem = function () {
    var mapId = $gameVariables.value(mapIdVal);
    var x = $gameVariables.value(xCoordVal);
    var y = $gameVariables.value(yCoordVal);
    $gamePlayer.reserveTransfer(mapId, x, y, 2, 0);
    SceneManager.goto(Scene_Map);
    $gameVariables.setValue(mapIdVal, 0); // disable escape
  };

  //
  // check whether one can escape or not
  //
  var _Game_BattlerBase_meetsUsableItemConditions =
    Game_BattlerBase.prototype.meetsUsableItemConditions;
  Game_BattlerBase.prototype.meetsUsableItemConditions = function (item) {
    if (
      reEscape.exec(item.note) != null &&
      $gameVariables.value(mapIdVal) == 0
    ) {
      return false;
    }
    return _Game_BattlerBase_meetsUsableItemConditions.call(this, item);
  };
})();


code:
//=============================================================================
// EventSelector.js
//=============================================================================

/*:
 * @plugindesc Displays a window to select a common event.
 * @author Yoji Ojima
 *
 * @help
 *
 * Plugin Command:
 *   EventSelector open       # Open the event selector window
 *   EventSelector add 3      # Add common event #3 to the selector
 *   EventSelector remove 4   # Remove common event #4 from the selector
 *   EventSelector clear      # Clear the event selector
 */

/*:ja
 * @plugindesc コモンイベントを選択するウィンドウを表示します。
 * @author Yoji Ojima
 *
 * @help
 *
 * プラグインコマンド:
 *   EventSelector open       # イベント選択ウィンドウを開く
 *   EventSelector add 3      # コモンイベント３番をイベント選択に追加
 *   EventSelector remove 4   # コモンイベント４番をイベント選択から削除
 *   EventSelector clear      # イベント選択をクリア
 */

(function () {
  var eventSelectorStatus = "";
  var selectedCommonEvent = null;

  var _Game_Interpreter_pluginCommand =
    Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function (command, args) {
    _Game_Interpreter_pluginCommand.call(this, command, args);
    if (command === "EventSelector") {
      switch (args[0]) {
        case "open":
          eventSelectorStatus = "open";
          this.setWaitMode("EventSelector");
          break;
        case "add":
          $gameSystem.addToEventSelector(Number(args[1]));
          break;
        case "remove":
          $gameSystem.removeFromEventSelector(Number(args[1]));
          break;
        case "clear":
          $gameSystem.clearEventSelector();
          break;
      }
    }
  };

  var _Game_Interpreter_updateWaitMode =
    Game_Interpreter.prototype.updateWaitMode;
  Game_Interpreter.prototype.updateWaitMode = function () {
    if (this._waitMode === "EventSelector") {
      if (eventSelectorStatus === "close") {
        this._waitMode = "";
        if (selectedCommonEvent) {
          this.setupChild(selectedCommonEvent.list);
          this._callingSelectedEvent = true;
        }
        eventSelectorStatus = "";
      }
      return true;
    } else {
      return _Game_Interpreter_updateWaitMode.call(this);
    }
  };

  var _Game_Interpreter_updateChild = Game_Interpreter.prototype.updateChild;
  Game_Interpreter.prototype.updateChild = function () {
    var result = _Game_Interpreter_updateChild.call(this);
    if (this._callingSelectedEvent && !result) {
      this._callingSelectedEvent = false;
      eventSelectorStatus = "open";
      this.setWaitMode("EventSelector");
      return true;
    }
    return result;
  };

  Game_System.prototype.addToEventSelector = function (commonEventId) {
    if (!this._eventSelectorData) {
      this.clearEventSelector();
    }
    if (!this._eventSelectorData.contains(commonEventId)) {
      this._eventSelectorData.push(commonEventId);
    }
  };

  Game_System.prototype.removeFromEventSelector = function (commonEventId) {
    if (this._eventSelectorData) {
      var index = this._eventSelectorData.indexOf(commonEventId);
      if (index >= 0) {
        this._eventSelectorData.splice(index, 1);
      }
    }
  };

  Game_System.prototype.clearEventSelector = function () {
    this._eventSelectorData = [];
  };

  Game_System.prototype.eventSelectorData = function () {
    if (this._eventSelectorData) {
      return this._eventSelectorData.clone();
    } else {
      return [];
    }
  };

  var _Scene_Map_createAllWindows = Scene_Map.prototype.createAllWindows;
  Scene_Map.prototype.createAllWindows = function () {
    _Scene_Map_createAllWindows.call(this);
    this._eventSelectorWindow = new Window_EventSelector(0, 0);
    this.addChild(this._eventSelectorWindow);
  };

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

  Window_EventSelector.prototype = Object.create(Window_Selectable.prototype);
  Window_EventSelector.prototype.constructor = Window_EventSelector;

  Window_EventSelector.lastTopRow = 0;
  Window_EventSelector.lastIndex = 0;

  Window_EventSelector.prototype.initialize = function (x, y) {
    var width = Graphics.boxWidth;
    var height = this.fittingHeight(4);
    Window_Selectable.prototype.initialize.call(this, x, y, width, height);
    this.openness = 0;
    this.deactivate();
    this.setHandler("ok", this.onOk.bind(this));
    this.setHandler("cancel", this.onCancel.bind(this));
  };

  Window_EventSelector.prototype.maxCols = function () {
    return 3;
  };

  Window_EventSelector.prototype.maxItems = function () {
    return this._list ? this._list.length : 0;
  };

  Window_EventSelector.prototype.update = function () {
    Window_Selectable.prototype.update.call(this);
    switch (eventSelectorStatus) {
      case "open":
        this.refresh();
        this.setTopRow(Window_EventSelector.lastTopRow);
        this.select(Window_EventSelector.lastIndex);
        this.open();
        this.activate();
        eventSelectorStatus = "select";
        break;
      case "select":
        if (this.isClosed()) {
          eventSelectorStatus = "close";
        }
        break;
    }
  };

  Window_EventSelector.prototype.refresh = function () {
    var data = $gameSystem.eventSelectorData();
    this._list = [];
    for (var i = 0; i < data.length; i++) {
      var commonEvent = $dataCommonEvents[data[i]];
      if (commonEvent) {
        this._list.push(commonEvent);
      }
    }
    this.createContents();
    this.drawAllItems();
  };

  Window_EventSelector.prototype.drawItem = function (index) {
    var commonEvent = this._list[index];
    var rect = this.itemRectForText(index);
    this.drawText(commonEvent.name, rect.x, rect.y, rect.width);
  };

  Window_EventSelector.prototype.isCurrentItemEnabled = function () {
    var commonEvent = this._list[this.index()];
    return !!commonEvent;
  };

  Window_EventSelector.prototype.isOkTriggered = function () {
    return Input.isTriggered("ok");
  };

  Window_EventSelector.prototype.onOk = function () {
    selectedCommonEvent = this._list[this.index()];
    Window_EventSelector.lastTopRow = this.topRow();
    Window_EventSelector.lastIndex = this.index();
    this.close();
  };

  Window_EventSelector.prototype.onCancel = function () {
    selectedCommonEvent = null;
    Window_EventSelector.lastTopRow = this.topRow();
    Window_EventSelector.lastIndex = this.index();
    this.close();
  };
})();


code:
//=============================================================================
// ExtraEquipType.js
//=============================================================================

/*:
 * @plugindesc add/remove extra equip type to an actor
 * @author Sasuke KANNAZUKI
 * @help
 * Plugin Command:
 * ExtraEquipType arg0 arg1 arg2 arg3
 * arg0 must be 'add' or 'remove'.
 * arg1 must be actor ID number.
 * arg2 must be 'weapon' or 'armor'.
 * arg3 must be type id number of weapon/armor.
 * ex.
 * ExtraEquipType add 1 weapon 4  # actor#1 can equip weapon whose type is 4.
 * ExtraEquipType remove 2 armor 3 # actor#2 cannot equip armor whose type is 3
 * note:
 * database is higher priority than this plugin. so, even if an actor is
 * removed equip type, it won't disable if it's enabled on database.
 *
 */
/*:ja
 * @plugindesc クラスや装備を変更せずに、武器/防具タイプを増やす
 * @author 神無月サスケ
 * @help
 * プラグインコマンドの書式:
 * ExtraEquipType arg0 arg1 arg2 arg3
 * arg0 は add か remove にします。addだと追加、removeだと削除です。
 * arg1 は 装備可能にするアクターのIDです。
 * arg2 は weapon か armor にします。
 * arg3 は タイプIDです。
 *
 * 例：
 * ExtraEquipType add 1 weapon 5
 * → アクターID1番のキャラが、武器タイプ5(ムチ)を装備可能になります。
 * ExtraEquipType add 3 armor 6
 * → アクターID3番のキャラが、防具タイプ6(大型盾)を装備可能になります。
 * ExtraEquipType remove 1 weapon 5
 * → アクターID1番のキャラが、さっき装備可能になったムチが装備出来なくなります。
 * ムチを装備していた場合、自動的にはずされます。
 * ExtraEquipType remove 3 armor 6
 * → アクターID3番のキャラが、さっき装備可能になった大型盾が装備できなくなります。
 * 大型盾を装備していた場合、自動的にはずされます。
 *
 * 注意:
 * remove で装備出来なくなるのは、このプラグインで装備可能にしたものだけで、
 * データベースで装備可能になっているものは、removeしても装備不可にはなりません。
 */

(function () {
  //
  // process plugin commands
  //
  var _Game_Interpreter_pluginCommand =
    Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function (command, args) {
    _Game_Interpreter_pluginCommand.call(this, command, args);
    if (command === "ExtraEquipType") {
      var actor = $gameActors.actor(Number(args[1]));
      var typeId = Number(args[3]);
      if (!actor || typeId == 0) {
        return;
      }
      if (args[0] === "add") {
        if (args[2] === "weapon") {
          actor.addWtypeId(typeId);
        } else if (args[2] === "armor") {
          actor.addAtypeId(typeId);
        }
      } else if (args[0] === "remove") {
        if (args[2] === "weapon") {
          actor.removeWtypeId(typeId);
          actor.releaseUnequippableItems(false);
        } else if (args[2] === "armor") {
          actor.removeAtypeId(typeId);
          actor.releaseUnequippableItems(false);
        }
      }
    }
  };

  //
  // initialize
  //
  var _Game_Actor_initialize = Game_Actor.prototype.initialize;
  Game_Actor.prototype.initialize = function (actorId) {
    _Game_Actor_initialize.call(this, actorId);
    this.initAddedWtypeIds();
    this.initAddedAtypeIds();
  };

  Game_Actor.prototype.initAddedWtypeIds = function () {
    this._addedWtypeIds = [];
  };

  Game_Actor.prototype.initAddedAtypeIds = function () {
    this._addedAtypeIds = [];
  };

  //
  // add W/AtypeId
  //
  Game_Actor.prototype.addWtypeId = function (wtypeId) {
    if (!this._addedWtypeIds) {
      this.initAddedWtypeIds();
    }
    this._addedWtypeIds[wtypeId] = true;
  };

  Game_Actor.prototype.addAtypeId = function (atypeId) {
    if (!this._addedAtypeIds) {
      this.initAddedAtypeIds();
    }
    this._addedAtypeIds[atypeId] = true;
  };

  //
  // remove W/AtypeId
  //
  Game_Actor.prototype.removeWtypeId = function (wtypeId) {
    if (!this._addedWtypeIds) {
      this.initAddedWtypeIds();
    }
    this._addedWtypeIds[wtypeId] = false;
  };

  Game_Actor.prototype.removeAtypeId = function (atypeId) {
    if (!this._addedAtypeIds) {
      this.initAddedAtypeIds();
    }
    this._addedAtypeIds[atypeId] = false;
  };

  //
  // check W/AtypeId is added or not
  //
  Game_Actor.prototype.isAddedWtypeId = function (wtypeId) {
    if (!this._addedWtypeIds) {
      return false;
    }
    return !!this._addedWtypeIds[wtypeId];
  };

  Game_Actor.prototype.isAddedAtypeId = function (atypeId) {
    if (!this._addedAtypeIds) {
      return false;
    }
    return !!this._addedAtypeIds[atypeId];
  };

  //
  // check whether the actor can equip it.
  //
  var _Game_Actor_isEquipWtypeOk = Game_Actor.prototype.isEquipWtypeOk;
  Game_Actor.prototype.isEquipWtypeOk = function (wtypeId) {
    if (this.isAddedWtypeId(wtypeId)) {
      return true;
    }
    return _Game_Actor_isEquipWtypeOk.call(this, wtypeId);
  };

  var _Game_Actor_isEquipAtypeOk = Game_Actor.prototype.isEquipAtypeOk;
  Game_Actor.prototype.isEquipAtypeOk = function (atypeId) {
    if (this.isAddedAtypeId(atypeId)) {
      return true;
    }
    return _Game_Actor_isEquipAtypeOk.call(this, atypeId);
  };
})();


code:
(function () {
  var _Sprite_Actor_refreshMotion = Sprite_Actor.prototype.refreshMotion;

  Sprite_Actor.prototype.refreshMotion = function () {
    var actor = this._actor,
      motionGuard = Sprite_Actor.MOTIONS["guard"];

    if (actor) {
      if (this._motion === motionGuard && !BattleManager.isInputting()) {
        return;
      }

      _Sprite_Actor_refreshMotion.call(this);
    }
  };
})();


code:
//=============================================================================
// FixedBattleMembers.js
//=============================================================================

/*:
 * @plugindesc Forbids formation change to the specified party members.
 * @author Yoji Ojima
 *
 * @help
 *
 * Plugin Command:
 *   FixedBattleMembers 1       # Fixed battle members = the actor #1
 *   FixedBattleMembers 2 3     # Fixed battle members = the actor #2 and #3
 *   FixedBattleMembers         # Clears the fixed battle members
 */

/*:ja
 * @plugindesc 指定したパーティメンバーの並び替えを禁止します。
 * @author Yoji Ojima
 *
 * @help
 *
 * プラグインコマンド:
 *   FixedBattleMembers 1       # アクター１番を固定メンバーにする
 *   FixedBattleMembers 2 3     # アクター２番と３番を固定メンバーにする
 *   FixedBattleMembers         # 固定メンバーの指定を解除する
 */

(function () {
  var _Game_Interpreter_pluginCommand =
    Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function (command, args) {
    _Game_Interpreter_pluginCommand.call(this, command, args);
    if (command === "FixedBattleMembers") {
      var members = $gameParty.allMembers();
      $gameParty.fixedBattleMembers = [];
      for (var i = 0; i < members.length; i++) {
        $gameParty.removeActor(members[i].actorId());
      }
      for (i = 0; i < args.length; i++) {
        var actorId = Number(args[i]);
        if ($dataActors[actorId]) {
          $gameParty.fixedBattleMembers.push(actorId);
          $gameParty.addActor(actorId);
        }
      }
      for (i = 0; i < members.length; i++) {
        $gameParty.addActor(members[i].actorId());
      }
    }
  };

  var _Game_Actor_isFormationChangeOk =
    Game_Actor.prototype.isFormationChangeOk;
  Game_Actor.prototype.isFormationChangeOk = function () {
    var array = $gameParty.fixedBattleMembers;
    if (array && array.contains(this.actorId())) {
      return false;
    } else {
      return _Game_Actor_isFormationChangeOk.call(this);
    }
  };
})();