code:
//=============================================================================
// UTA_CommonSave.js
//=============================================================================
// Version    : 1.20
// LastUpdate : 2016.05.11
// Author     : T.Akatsuki
// Website    : http://utakata-no-yume.net/
// License    : MIT License(http://opensource.org/licenses/mit-license.php)
//=============================================================================

//=============================================================================
/*:
 * @plugindesc Create a share save data. Share state of game switch and variables between each save data.
 * @author T.Akatsuki
 *
 * @param Target Switches
 * @desc Set target switch index number.
 * If you want to set multiple, put comma between indexes.
 * Using "-", the range can be specified.
 * (ex) 1-3,11,12,13,20,21
 * @default
 *
 * @param Target Variables
 * @desc Set target variable index number.
 * If you want to set multiple, put comma between indexes.
 * Using "-", the range can be specified.
 * (ex) 1-5,11,12,13,23,24
 * @default
 *
 * @param Is Auto
 * @desc Automatically to set save / load common save data on save / load timing.
 * true  : Automatically common save data is saved/loaded on save / load timing.
 * false : Save and load of common save data you do manually.
 * @default true
 *
 * @param Auto on Gameover
 * @desc If auto saving common save data is enabled , it automatically saves common save data on gameover.
 * true  : It save common save data on game over.
 * false : It do nothing on game over.
 * @default false
 *
 * @param Show Trace
 * @desc Set state traces display.
 * true  : Show trace., false : Don't show trace.
 * @default false
 *
 * @help # Overview
 * Create a share save data. Share state of game switch and variables between each save data.
 * If you use plugin command, you can operate common save data at any time.
 *
 * Common save data will be saved with a name "common.rpgsave" below save directory.
 *
 * # Parameters
 *   Target Switches [Switch No, ...]
 *     Set target switch index number.
 *     If you want to set multiple, put comma between indexes.
 *     Using "-", the range can be specified.
 *     (Ex) 1-3,11,12,13,20,21
 *            => number 1,2,3,11,12,13,20,21 switches are target.
 *
 *   Target Variables [Valiable No, ...]
 *     Set target variable index number.
 *     If you want to set multiple, put comma between indexes.
 *     Using "-", the range can be specified.
 *     (Ex) 1-3,11,12,13,14,15
 *            => number 1,2,3,11,12,13,14,15 variables are target.
 *
 *   Is Auto [true|false]
 *     Automatically to set save / load common save data on save / load timing.
 *
 *   Auto on Gameover [true|false]
 *     If auto saving common save data is enabled , it automatically saves common save data on gameover.
 *
 *   Show Trace [true|false]
 *     Set whether the issue a trace for debugging.
 *
 * # Plugin Command
 *   CommonSave load                  # Read GameSwitches and GameVariables from common save data and apply game data.
 *                                    # This command is used when you want to load common save data at any time.
 *   CommonSave save                  # Save target GameSwitches and GameVariables common save data.
 *                                    # This command is used when you want to save in common save data at any time.
 *   CommonSave remove                # Remove common save data file.
 *
 *   CommonSave setTrace [true|false] # Setting to enabled trace on console.
 *
 *   CommonSave check                 # Show sharing target switches and variables to console.
 *
 * # Change Log
 *   ver 1.20 (2016.05.11)
 *     Using "-", the range can be specified.
 *     Add setTrace plugin command.
 *     Add check plugin command.
 *
 *   ver 1.10 (Fed 17, 2016)
 *     Rename to UTA_CommonSave.js.
 *     To be able to set trace in the parameter.
 *
 *   ver1.01 (Jan 14, 2016)
 *     Fixed bug where could not share variables.
 *
 *   ver1.00 (Dec 31, 2015)
 *     To ver1.00 according to the Japanese version of RPG Maker MV.
 *
 *   ver0.01 (Nov 05, 2015)
 *     Initial release.
 */

/*:ja
 * @plugindesc 共有のセーブデータを作成し、指定したスイッチ・変数の状態をセーブデータ間で共有します。
 * @author 赤月 智平
 *
 * @param Target Switches
 * @desc 対象となるスイッチの番号を指定します。
 * カンマ区切りで複数指定、ハイフンで範囲指定が可能です。
 * (例) 1-3,11,12,13,20,21
 * @default
 *
 * @param Target Variables
 * @desc 対象となる変数の番号を指定します。
 * カンマ区切りで複数指定、ハイフンで範囲指定が可能です。
 * (例) 1-5,11,12,13,23,24
 * @default
 *
 * @param Is Auto
 * @desc セーブ・ロード時に自動的に共通セーブデータのセーブ・ロードを行うかを設定します。
 *       true  : セーブ・ロード時に自動的に共有セーブデータにデータのセーブ・ロードを行う。
 *       false : 共通セーブデータのセーブ・ロードは手動で行う。
 * @default true
 *
 * @param Auto on Gameover
 * @desc 自動セーブ設定がONの時にゲームオーバー時に共有セーブデータの自動セーブを行うかを設定します。
 *       true  : ゲームオーバー時に自動共有セーブを行う。
 *       false : ゲームオーバー時は自動共有セーブを行わない。
 * @default false
 *
 * @param Show Trace
 * @desc デバッグ用のトレースを出すかを設定します。
 * true: トレースを表示, false: トレースを表示しない
 * @default false
 *
 * @help ■概要
 * CommonSaveプラグインは共有セーブデータを作成し、指定したスイッチ・変数の状態をセーブデータ間で共有する事ができます。
 * 基本的にはセーブ・ロード時に設定に応じて自動的に処理してくれます。
 * プラグインコマンドを利用すると、任意のタイミングで共有セーブデータの操作を行う事ができます。
 *
 * 共有セーブデータはsaveディレクトリ以下に「common.rpgsave」という名前で保存されます。
 *
 * ■パラメータの説明
 *   Target Switches [スイッチ番号, ...]
 *     共有したいスイッチの番号を指定します。「,」で区切り複数の値を指定する事ができます。
 *     「-」で数値の範囲を指定する事も可能です。
 *     (例) 1-3,11,12,13,20,21
 *            => 1,2,3,11,12,13,20,21番のスイッチが対象になる。
 *
 *   Target Variables [変数番号, ...]
 *     共有したい変数の番号を指定します。「,」で区切り複数の値を指定する事ができます。
 *     「-」で数値の範囲を指定する事も可能です。
 *     (例) 1-3,11,12,13,14,15
 *            => 1,2,3,11,12,13,14,15番の変数が対象になる。
 *
 *   Is Auto [true|false]
 *     セーブ・ロード時に自動的に共通セーブデータのセーブ・ロードを行うかを設定します。
 *     デフォルトではtrue(セーブ・ロード時に自動的に共有セーブ・ロードを行う)になっています。
 *
 *   Auto on Gameover [true|false]
 *     自動セーブ設定がONの時にゲームオーバー時に共有セーブデータの自動セーブを行うかを設定します。
 *     デフォルトではfalse(ゲームオーバー時に自動共有セーブを行わない)になっています。
 *
 *   Show Trace [true|false]
 *     デバッグ用のトレースを出すかを設定します。
 *
 * ■プラグインコマンド
 *   CommonSave load                  # 共有セーブデータからスイッチ・変数を読み込み反映させます。
 *                                    # 任意のタイミングで共有セーブデータのロードを行いたい場合に使用します。
 *   CommonSave save                  # 共有セーブデータにスイッチ・変数の状態を記録します。
 *                                    # 任意のタイミングで共有セーブデータのセーブを行いたい場合に使用します。
 *   CommonSave remove                # 共有セーブデータを削除します。
 *                                    # 共有セーブデータをリセットしたい場合に使用します。
 *   CommonSave setTrace [true|false] # コンソールにトレースを出力するかを設定します。
 *                                    # ゲーム実行中にトレース状態を切り替えたい場合に使用します。
 *   CommonSave check                 # 共有状態になっているスイッチ・変数番号をコンソールに表示し確認します。
 *
 * ■更新履歴
 *   ver 1.20 (2016.05.11)
 *     スイッチ・変数の指定の際に「-」を使う事で範囲指定を可能に。
 *     トレース状態を動的に変えられるように setTrace プラグインコマンドを追加。
 *     共有対象になっているスイッチ・変数を確認できる check プラグインコマンドを追加。
 *
 *   ver 1.10 (2016.02.17)
 *     ファイル名をUTA_CommonSave.jsに変更。
 *     トレース出力の有無をパラメータで設定できるように。
 *
 *   ver 1.01 (2016.01.14)
 *     変数の共有が上手くできていないバグの修正。
 *
 *   ver 1.00 (2015.12.31)
 *     日本語版RPGツクールMVの発売に合わせver1.00に。
 *
 *   ver 0.01 (2015.11.05)
 *     初版。
 */
//=============================================================================

//name space
var utakata = utakata || (utakata = {});

//-----------------------------------------------------------------------------
// class CommonSaveManager
//-----------------------------------------------------------------------------
(function (utakata) {
  var CommonSaveManager = (function () {
    //constructor
    function CommonSaveManager() {
      //member variables
      this._targetSwitchList = [];
      this._targetVariableList = [];

      this._showTrace = false;
      this._tr = null;

      this.initialize();
    }

    //private methods
    CommonSaveManager.prototype.initialize = function () {
      this.parameters = PluginManager.parameters("UTA_CommonSave");

      this._showTrace = String(this.parameters["Show Trace"]) === "true";

      this._tr = function (s) {
        if (!this._showTrace) {
          return;
        }
        var str = "CommonSaveManager: " + s;
        console.log(str);
      };

      var targetSwitchStr = String(this.parameters["Target Switches"]);
      var targetVariableStr = String(this.parameters["Target Variables"]);

      this._targetSwitchList = this._parseTargetNumber(targetSwitchStr);
      this._targetVariableList = this._parseTargetNumber(targetVariableStr);
    };

    CommonSaveManager.prototype._parseTargetNumber = function (str) {
      if (typeof str === "undefined" || str === "undefined") {
        return [];
      }

      str = str.replace(/\s+/g, "");

      var split_str = ",";
      var rgn_split_str = "-";

      var indexes = str.split(split_str, -1);
      var ret = [];

      var parseTargetNumbersFromRegion = function (rgn_target) {
        var ret = [];
        var target_number = rgn_target.split(rgn_split_str, -1);
        if (
          typeof target_number[0] === "undefined" ||
          typeof target_number[1] === "undefined"
        ) {
          return [];
        }

        var s_number = parseInt(target_number[0]);
        if (s_number !== s_number) {
          this._tr(
            "_parseTargetNumber getTargetNumbersFromRegion: Setting parameter is invalid."
          );
          return [];
        }

        var e_number = parseInt(target_number[1]);
        if (e_number !== e_number) {
          this._tr(
            "_parseTargetNumber getTargetNumbersFromRegion: Setting parameter is invalid."
          );
          return [];
        }

        for (var i = s_number; i <= e_number; i++) {
          ret.push(i);
        }

        return ret;
      };

      for (var i = 0; i < indexes.length; i++) {
        var rgn_target = indexes[i].match(/\d+-\d+/g);
        if (!!rgn_target) {
          var parseIndexes = parseTargetNumbersFromRegion(rgn_target[0]);
          if (parseIndexes.length <= 0) {
            continue;
          }

          ret = ret.concat(parseIndexes);
        } else {
          var parseIndex = parseInt(indexes[i]);
          if (parseIndex !== parseIndex) {
            this._tr("_parseTargetNumber: Setting parameter is invalid.");
            continue;
          }
          ret.push(parseIndex);
        }
      }
      return ret;
    };

    CommonSaveManager.prototype._getTargetSwitchJson = function () {
      var json = {};

      for (var i = 0; i < this._targetSwitchList.length; i++) {
        var idx = this._targetSwitchList[i].toString();
        var value = $gameSwitches.value(idx);
        json[idx] = value;
      }

      return json;
    };

    CommonSaveManager.prototype._getTargetVariableJson = function () {
      var json = {};

      for (var i = 0; i < this._targetVariableList.length; i++) {
        var idx = this._targetVariableList[i].toString();
        var value = $gameVariables.value(idx);
        json[idx] = value;
      }

      return json;
    };

    CommonSaveManager.prototype.setLoadSwitches = function (switches) {
      for (var key in switches) {
        var idx = parseInt(key);
        var value = switches[key];
        $gameSwitches.setValue(idx, value);
      }
    };

    CommonSaveManager.prototype.setLoadVariables = function (variables) {
      for (var key in variables) {
        var idx = parseInt(key);
        var value = variables[key];
        $gameVariables.setValue(idx, value);
      }
    };

    //public methods
    CommonSaveManager.prototype.load = function () {
      this._tr("load common save data.");

      if (!this.exists()) {
        return false;
      }

      var loadData = DataManager.loadCommonSave();

      if ("gameSwitches" in loadData) {
        this.setLoadSwitches(loadData["gameSwitches"]);
      }
      if ("gameVariables" in loadData) {
        this.setLoadVariables(loadData["gameVariables"]);
      }
    };

    CommonSaveManager.prototype.save = function () {
      this._tr("save common save data.");

      var switchesJson = this._getTargetSwitchJson();
      var variablesJson = this._getTargetVariableJson();

      var json = { gameSwitches: switchesJson, gameVariables: variablesJson };

      DataManager.saveCommonSave(json);
    };

    CommonSaveManager.prototype.exists = function () {
      this._tr("check exists common save data.");
      return StorageManager.existsCommonSave();
    };

    CommonSaveManager.prototype.remove = function () {
      this._tr("remove common save data.");
      StorageManager.removeCommonSave();
    };

    CommonSaveManager.prototype.setShowTrace = function (args) {
      if (!args) {
        return;
      }
      var enabled = String(args[1]) === "true" ? true : false;
      this._tr("setShowTrace: " + this._showTrace);
      this._showTrace = enabled;
    };

    CommonSaveManager.prototype.check = function () {
      var str = "CommonSaveManager: \n";
      str += " # Share switch targets : \n";
      str += JSON.stringify(this._targetSwitchList);

      str += "\n # Share variable targets : \n";
      str += JSON.stringify(this._targetVariableList);

      console.log(str);
    };

    CommonSaveManager.prototype.isAuto = function () {
      return String(this.parameters["Is Auto"]) === "true";
    };

    CommonSaveManager.prototype.isAutoOnGameOver = function () {
      return String(this.parameters["Auto on Gameover"]) === "true";
    };

    return CommonSaveManager;
  })();
  utakata.CommonSaveManager = new CommonSaveManager();
})(utakata || (utakata = {}));

(function () {
  //parse and dispatch plugin command
  var _Game_Interpreter_pluginCommand =
    Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function (command, args) {
    _Game_Interpreter_pluginCommand.call(this, command, args);
    if (command === "CommonSave") {
      switch (args[0]) {
        case "load":
          utakata.CommonSaveManager.load();
          break;
        case "save":
          utakata.CommonSaveManager.save();
          break;
        case "exists":
          utakata.CommonSaveManager.exists();
          break;
        case "remove":
          utakata.CommonSaveManager.remove();
          break;
        case "setTrace":
          utakata.CommonSaveManager.setShowTrace(args);
          break;
        case "check":
          utakata.CommonSaveManager.check();
          break;
        default:
          break;
      }
    }
  };

  //-----------------------------------------------------------------------------
  // DataManager
  //-----------------------------------------------------------------------------
  // # extension
  var _Data_Manager_loadGame = DataManager.loadGame;
  DataManager.loadGame = function (savefileId) {
    var ret = _Data_Manager_loadGame.call(this, savefileId);

    if (utakata.CommonSaveManager.isAuto()) {
      utakata.CommonSaveManager.load();
    }
    return ret;
  };

  var _Data_Manager_saveGame = DataManager.saveGame;
  DataManager.saveGame = function (savefileId) {
    var ret = _Data_Manager_saveGame.call(this, savefileId);

    if (utakata.CommonSaveManager.isAuto()) {
      utakata.CommonSaveManager.save();
    }
    return ret;
  };

  var _Data_Manager_setupNewGame = DataManager.setupNewGame;
  DataManager.setupNewGame = function () {
    _Data_Manager_setupNewGame.call(this);
    if (utakata.CommonSaveManager.isAuto()) {
      utakata.CommonSaveManager.load();
    }
  };

  // # add methods
  DataManager.loadCommonSave = function () {
    var json;
    try {
      json = StorageManager.loadCommonSave();
    } catch (e) {
      console.error(e);
      return [];
    }
    if (json) {
      var commonInfo = JSON.parse(json);
      return commonInfo;
    } else {
      return [];
    }
  };

  DataManager.saveCommonSave = function (json) {
    var jsonStr = JsonEx.stringify(json);
    if (jsonStr.length >= 200000) {
      console.warn("Common Save too big!");
    }
    StorageManager.saveCommonSave(jsonStr);
    return true;
  };

  //-----------------------------------------------------------------------------
  // StorageManager
  //-----------------------------------------------------------------------------
  //load methods ----------------------------------------------------------------
  StorageManager.loadCommonSave = function () {
    if (this.isLocalMode()) {
      return this.loadFromLocalFileCommonSave();
    } else {
      return this.loadFromWebStorageCommonSave();
    }
  };

  StorageManager.loadFromLocalFileCommonSave = function () {
    var data = null;
    var fs = require("fs");
    var filePath = this.localFilePathCommonSave();
    if (fs.existsSync(filePath)) {
      data = fs.readFileSync(filePath, { encoding: "utf8" });
    }
    return LZString.decompressFromBase64(data);
  };

  StorageManager.loadFromWebStorageCommonSave = function () {
    var key = this.webStorageKeyCommonSave();
    var data = localStorage.getItem(key);
    return LZString.decompressFromBase64(data);
  };

  // save methods ---------------------------------------------------------------
  StorageManager.saveCommonSave = function (json) {
    if (this.isLocalMode()) {
      this.saveToLocalFileCommonSave(json);
    } else {
      this.saveToWebStorageCommonSave(json);
    }
  };

  StorageManager.saveToLocalFileCommonSave = function (json) {
    var data = LZString.compressToBase64(json);
    var fs = require("fs");
    var dirPath = this.localFileDirectoryPath();
    var filePath = this.localFilePathCommonSave();
    if (!fs.existsSync(dirPath)) {
      fs.mkdirSync(dirPath);
    }
    fs.writeFileSync(filePath, data);
  };

  StorageManager.saveToWebStorageCommonSave = function (json) {
    var key = this.webStorageKeyCommonSave();
    var data = LZString.compressToBase64(json);
    localStorage.setItem(key, data);
  };

  //check exists ----------------------------------------------------------------
  StorageManager.existsCommonSave = function () {
    if (this.isLocalMode()) {
      return this.localFileExistsCommonSave();
    } else {
      return this.webStorageExistsCommonSave();
    }
  };

  StorageManager.localFileExistsCommonSave = function () {
    var fs = require("fs");
    return fs.existsSync(this.localFilePathCommonSave());
  };

  StorageManager.webStorageExistsCommonSave = function () {
    var key = this.webStorageKeyCommonSave();
    return !!localStorage.getItem(key);
  };

  //remove ----------------------------------------------------------------------
  StorageManager.removeCommonSave = function () {
    if (this.isLocalMode()) {
      this.removeLocalFileCommonSave();
    } else {
      this.removeWebStorageCommonSave();
    }
  };

  StorageManager.removeLocalFileCommonSave = function () {
    var fs = require("fs");
    var filePath = this.localFilePathCommonSave();
    if (fs.existsSync(filePath)) {
      fs.unlinkSync(filePath);
    }
  };

  StorageManager.removeWebStorageCommonSave = function () {
    var key = this.webStorageKeyCommonSave();
    localStorage.removeItem(key);
  };

  StorageManager.localFilePathCommonSave = function () {
    return this.localFileDirectoryPath() + "common.rpgsave";
  };
  StorageManager.webStorageKeyCommonSave = function () {
    return "RPG Common";
  };

  //-----------------------------------------------------------------------------
  // Scene_Gameover
  //-----------------------------------------------------------------------------
  var _Scene_Gameover_Start = Scene_Gameover.prototype.start;
  Scene_Gameover.prototype.start = function () {
    if (utakata.CommonSaveManager.isAutoOnGameOver()) {
      utakata.CommonSaveManager.save();
    }
    _Scene_Gameover_Start.call(this);
  };
})();


code:
//=============================================================================
// VehiclePassable.js
// ----------------------------------------------------------------------------
// Copyright (c) 2015 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.2.0 2016/07/31 乗降可能な地形タグ、リージョンを設定できる機能を追加
// 1.1.0 2016/07/09 飛行船の通行不可、通行可能に対応
// 1.0.0 2016/06/17 初版
// ----------------------------------------------------------------------------
// [Blog]   : http://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc 乗り物通行判定拡張プラグイン
 * @author トリアコンタン
 *
 * @param 小型船通行リージョン
 * @desc 小型船で通行可能になるリージョンです。カンマ(,)区切りで指定してください。例「1,2,3」
 * @default 1,2,3
 *
 * @param 小型船通行地形タグ
 * @desc 小型船で通行可能になる地形タグです。カンマ(,)区切りで指定してください。例「1,2,3」
 * @default 1,2,3
 *
 * @param 小型船不可リージョン
 * @desc 小型船で通行不可になるリージョンです。カンマ(,)区切りで指定してください。例「1,2,3」
 * @default 4,5,6
 *
 * @param 小型船不可地形タグ
 * @desc 小型船で通行不可になる地形タグです。カンマ(,)区切りで指定してください。例「1,2,3」
 * @default 4,5,6
 *
 * @param 小型船乗降地形タグ
 * @desc 小型船で乗降可能になる地形タグです。未入力にするとどこでも乗降可能になります。
 * @default
 *
 * @param 小型船乗降リージョン
 * @desc 小型船で乗降可能になるリージョンです。未入力にするとどこでも乗降可能になります。
 * @default
 *
 * @param 大型船通行リージョン
 * @desc 大型船で通行可能になるリージョンです。カンマ(,)区切りで指定してください。例「1,2,3」
 * @default 1,2,3
 *
 * @param 大型船通行地形タグ
 * @desc 大型船で通行可能になる地形タグです。カンマ(,)区切りで指定してください。例「1,2,3」
 * @default 1,2,3
 *
 * @param 大型船不可リージョン
 * @desc 大型船で通行不可になるリージョンです。カンマ(,)区切りで指定してください。例「1,2,3」
 * @default 4,5,6
 *
 * @param 大型船不可地形タグ
 * @desc 大型船で通行不可になる地形タグです。カンマ(,)区切りで指定してください。例「1,2,3」
 * @default 4,5,6
 *
 * @param 大型船乗降地形タグ
 * @desc 大型船で乗降可能になる地形タグです。未入力にするとどこでも乗降可能になります。
 * @default
 *
 * @param 大型船乗降リージョン
 * @desc 大型船で乗降可能になるリージョンです。未入力にするとどこでも乗降可能になります。
 * @default
 *
 * @param 飛行船不可リージョン
 * @desc 飛行船で通行不可になるリージョンです。カンマ(,)区切りで指定してください。例「1,2,3」
 * @default 4,5,6
 *
 * @param 飛行船不可地形タグ
 * @desc 飛行船で通行不可になる地形タグです。カンマ(,)区切りで指定してください。例「1,2,3」
 * @default 4,5,6
 *
 * @param 飛行船乗降地形タグ
 * @desc 飛行船で乗降可能になる地形タグです。未入力にするとどこでも乗降可能になります。
 * @default
 *
 * @param 飛行船乗降リージョン
 * @desc 飛行船で乗降可能になるリージョンです。未入力にするとどこでも乗降可能になります。
 * @default
 *
 * @help 乗り物の通行判定を拡張します。
 * リージョンおよび地形タグを設定して柔軟な通行可能設定が可能です。
 *
 * 優先度はリージョン > 地形タグとなります。
 *
 * また、乗降可能な地形タグおよびリージョンを設定することができます。
 * たとえば小型船や大型船で桟橋のみ乗降可能にしたり、特定の発着場のみ
 * 飛行船の離着陸が可能にできます。
 *
 * ※実際には降船時のみ判定しています。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

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

  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 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 paramBoatPassableRegions = getParamArrayNumber(
    ["BoatPassableRegions", "小型船通行リージョン"],
    0
  );
  var paramBoatPassableTerrainTags = getParamArrayNumber(
    ["BoatPassableTerrainTags", "小型船通行地形タグ"],
    0
  );
  var paramBoatNonPassableRegions = getParamArrayNumber(
    ["BoatNonPassableRegions", "小型船不可リージョン"],
    0
  );
  var paramBoatNonPassableTerrainTags = getParamArrayNumber(
    ["BoatNonPassableTerrainTags", "小型船不可地形タグ"],
    0
  );
  var paramShipPassableRegions = getParamArrayNumber(
    ["ShipPassableRegions", "大型船通行リージョン"],
    0
  );
  var paramShipPassableTerrainTags = getParamArrayNumber(
    ["ShipPassableTerrainTags", "大型船通行地形タグ"],
    0
  );
  var paramShipNonPassableRegions = getParamArrayNumber(
    ["ShipNonPassableRegions", "大型船不可リージョン"],
    0
  );
  var paramShipNonPassableTerrainTags = getParamArrayNumber(
    ["ShipNonPassableTerrainTags", "大型船不可地形タグ"],
    0
  );
  var paramAirShipNonPassableRegions = getParamArrayNumber(
    ["AirShipNonPassableRegions", "飛行船不可リージョン"],
    0
  );
  var paramAirShipNonPassableTerrainTags = getParamArrayNumber(
    ["AirShipNonPassableTerrainTags", "飛行船不可地形タグ"],
    0
  );
  var paramBoatRidingTerrainTags = getParamArrayNumber(
    ["BoatRidingTerrainTags", "小型船乗降地形タグ"],
    0
  );
  var paramBoatRidingRegions = getParamArrayNumber(
    ["BoatRidingRegions", "小型船乗降リージョン"],
    0
  );
  var paramShipRidingTerrainTags = getParamArrayNumber(
    ["ShipRidingTerrainTags", "大型船乗降地形タグ"],
    0
  );
  var paramShipRidingRegions = getParamArrayNumber(
    ["ShipRidingRegions", "大型船乗降リージョン"],
    0
  );
  var paramAirShipRidingTerrainTags = getParamArrayNumber(
    ["AirShipRidingTerrainTags", "飛行船乗降地形タグ"],
    0
  );
  var paramAirShipRidingRegions = getParamArrayNumber(
    ["AirShipRidingRegions", "飛行船乗降リージョン"],
    0
  );

  //=============================================================================
  // Game_CharacterBase
  //  飛行専用の通行可能判定を事前に定義します。
  //=============================================================================
  var _Game_CharacterBase_canPass = Game_CharacterBase.prototype.canPass;
  Game_CharacterBase.prototype.canPass = function (x, y, d) {
    if (this instanceof Game_Player && this.isInAirship()) {
      var x2 = $gameMap.roundXWithDirection(this.x, d);
      var y2 = $gameMap.roundYWithDirection(this.y, d);
      if (!$gameMap.isAirShipPassable(x2, y2) && !this.isDebugThrough()) {
        return false;
      }
    }
    return _Game_CharacterBase_canPass.apply(this, arguments);
  };

  //=============================================================================
  // Game_Map
  //  乗り物用の通行可能判定を独自に定義します。
  //=============================================================================
  var _Game_Map_isBoatPassable = Game_Map.prototype.isBoatPassable;
  Game_Map.prototype.isBoatPassable = function (x, y) {
    var result = _Game_Map_isBoatPassable.apply(this, arguments);
    var resultRegion = this.isBoatPassableRegion(x, y);
    var resultTerrainTags = this.isBoatPassableTerrainTags(x, y);
    if (resultRegion !== null) {
      return resultRegion;
    } else if (resultTerrainTags !== null) {
      return resultTerrainTags;
    }
    return result;
  };

  Game_Map.prototype.isBoatPassableRegion = function (x, y) {
    var regionId = this.regionId(x, y);
    if (regionId === 0) return null;
    if (paramBoatPassableRegions.contains(regionId)) {
      return true;
    } else if (paramBoatNonPassableRegions.contains(regionId)) {
      return false;
    }
    return null;
  };

  Game_Map.prototype.isBoatPassableTerrainTags = function (x, y) {
    var terrainTag = this.terrainTag(x, y);
    if (terrainTag === 0) return null;
    if (paramBoatPassableTerrainTags.contains(terrainTag)) {
      return true;
    } else if (paramBoatNonPassableTerrainTags.contains(terrainTag)) {
      return false;
    }
    return null;
  };

  var _Game_Map_isShipPassable = Game_Map.prototype.isShipPassable;
  Game_Map.prototype.isShipPassable = function (x, y) {
    var result = _Game_Map_isShipPassable.apply(this, arguments);
    var resultRegion = this.isShipPassableRegion(x, y);
    var resultTerrainTags = this.isShipPassableTerrainTags(x, y);
    if (resultRegion !== null) {
      return resultRegion;
    } else if (resultTerrainTags !== null) {
      return resultTerrainTags;
    }
    return result;
  };

  Game_Map.prototype.isShipPassableRegion = function (x, y) {
    var regionId = this.regionId(x, y);
    if (regionId === 0) return null;
    if (paramShipPassableRegions.contains(regionId)) {
      return true;
    } else if (paramShipNonPassableRegions.contains(regionId)) {
      return false;
    }
    return null;
  };

  Game_Map.prototype.isShipPassableTerrainTags = function (x, y) {
    var terrainTag = this.terrainTag(x, y);
    if (terrainTag === 0) return null;
    if (paramShipPassableTerrainTags.contains(terrainTag)) {
      return true;
    } else if (paramShipNonPassableTerrainTags.contains(terrainTag)) {
      return false;
    }
    return null;
  };

  Game_Map.prototype.isAirShipPassable = function (x, y) {
    var resultRegion = this.isAirShipPassableRegion(x, y);
    var resultTerrainTags = this.isAirShipPassableTerrainTags(x, y);
    if (resultRegion !== null) {
      return resultRegion;
    } else if (resultTerrainTags !== null) {
      return resultTerrainTags;
    }
    return true;
  };

  Game_Map.prototype.isAirShipPassableRegion = function (x, y) {
    var regionId = this.regionId(x, y);
    if (regionId === 0) return null;
    if (paramAirShipNonPassableRegions.contains(regionId)) {
      return false;
    }
    return null;
  };

  Game_Map.prototype.isAirShipPassableTerrainTags = function (x, y) {
    var terrainTag = this.terrainTag(x, y);
    if (terrainTag === 0) return null;
    if (paramAirShipNonPassableTerrainTags.contains(terrainTag)) {
      return false;
    }
    return null;
  };

  var _Game_Map_isAirshipLandOk = Game_Map.prototype.isAirshipLandOk;
  Game_Map.prototype.isAirshipLandOk = function (x, y) {
    if (
      paramAirShipRidingRegions.length > 0 ||
      paramAirShipRidingTerrainTags.length > 0
    ) {
      return true;
    } else {
      return _Game_Map_isAirshipLandOk.apply(this, arguments);
    }
  };

  //=============================================================================
  // Game_Vehicle
  //  乗降可能な地形タグおよびリージョンを制限します。
  //=============================================================================
  var _Game_Vehicle_isLandOk = Game_Vehicle.prototype.isLandOk;
  Game_Vehicle.prototype.isLandOk = function (x, y, d) {
    var result = _Game_Vehicle_isLandOk.apply(this, arguments);
    if (result) {
      var x2, y2, terrainTags, regionIds;
      if (this.isBoat()) {
        x2 = $gameMap.roundXWithDirection(x, d);
        y2 = $gameMap.roundYWithDirection(y, d);
        terrainTags = paramBoatRidingTerrainTags;
        regionIds = paramBoatRidingRegions;
      } else if (this.isShip()) {
        x2 = $gameMap.roundXWithDirection(x, d);
        y2 = $gameMap.roundYWithDirection(y, d);
        terrainTags = paramShipRidingTerrainTags;
        regionIds = paramShipRidingRegions;
      } else if (this.isAirship()) {
        x2 = x;
        y2 = y;
        terrainTags = paramAirShipRidingTerrainTags;
        regionIds = paramAirShipRidingRegions;
      } else {
        return true;
      }
      result = this.isLandOkTerrainTagAndRegion(x2, y2, terrainTags, regionIds);
    }
    return result;
  };

  Game_Vehicle.prototype.isLandOkTerrainTagAndRegion = function (
    x,
    y,
    terrainTags,
    regionIds
  ) {
    var result = null;
    if (terrainTags.length > 0) {
      result = result || terrainTags.contains($gameMap.terrainTag(x, y));
    }
    if (regionIds.length > 0) {
      result = result || regionIds.contains($gameMap.regionId(x, y));
    }
    return result !== null ? result : true;
  };
})();

repo_name: dazed/translations

license: unknown


code:
//=============================================================================
// WeaponSkill.js
//=============================================================================

/*:
 * @plugindesc Change skill id of attack for each weapon.
 * @author Sasuke KANNAZUKI
 *
 * @help This plugin does not provide plugin commands.
 *
 * When <skill_id:3> is written in a weapon's note field,
 * skill id # 3 is used for the weapon's attack.
 * If nothing is written, default id(=1) is used.
 *
 * Check Points:
 * - When multiple weapons are equipped, the skill id of the weapon
 *  held in the dominant hand (previously defined) is used.
 * - It is most favorable for "skill type" to be "none"(=0),
 *  otherwise you cannot attack when your skill is blocked.
 *
 * Usage examples of this plugin:
 * - to create all-range weapons
 * - to create dual-attack or triple-attack weapons
 * - If healing skill is set when actor attacks, you can choose a friend to heal.
 * - It is possible to make a weapon that functions similar to a guard command.
 */

/*:ja
 * @plugindesc 武器ごとに通常攻撃のスキルIDを変更します。
 * @author 神無月サスケ
 *
 * @help このプラグインにはプラグインコマンドはありません。
 *
 *  武器の「メモ」欄に、<skill_id:3> と書いた場合、
 * 通常攻撃の際、3番のスキルが発動します。
 * ※特に記述がなければ、通常通り1番のスキルが採用されます。
 *
 * チェックポイント:
 * - 二刀流の場合、利き腕(先に定義された方)に持っているスキルIDが採用されます。
 * - スキルタイプは「なし」にするのが望ましいです。
 * さもなくば、技などを封じられたとき、攻撃が出来なくなります。
 *
 * 想定される用途:
 * - 全体攻撃可能な武器
 * - 2回攻撃、3回攻撃する武器
 * - 回復魔法をスキルに指定した場合、
 * 「攻撃」を選んだ際、味方の選択が出来、その仲間を回復します
 * - 防御コマンドなどと同等になる武器も実現可能です。
 */

(function () {
  //
  // set skill id for attack.
  //
  Game_Actor.prototype.attackSkillId = function () {
    var normalId = Game_BattlerBase.prototype.attackSkillId.call(this);
    if (this.hasNoWeapons()) {
      return normalId;
    }
    var weapon = this.weapons()[0]; // at plural weapon, one's first skill.
    var id = weapon.meta.skill_id;
    return id ? Number(id) : normalId;
  };

  //
  // for command at battle
  //
  var _Scene_Battle_commandAttack = Scene_Battle.prototype.commandAttack;
  Scene_Battle.prototype.commandAttack = function () {
    BattleManager.inputtingAction().setAttack();
    // normal attack weapon (or other single attack weapon)
    var action = BattleManager.inputtingAction();
    if (action.needsSelection() && action.isForOpponent()) {
      _Scene_Battle_commandAttack.call(this);
      return;
    }
    // special skill weapon
    this.onSelectAction();
  };
})();


code:
//=============================================================================
// WindowBackImage.js
// ----------------------------------------------------------------------------
// (C)2017 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.3.1 2020/08/22 カスタムメニュープラグインで作成したウィンドウ背景を変えられる機能を追加
// 1.3.0 2019/01/13 ウィンドウ背景の画像を複数表示できる機能を追加
//                  ウィンドウ背景を指定した場合も元のウィンドウフレームを表示したままにできる機能を追加
// 1.2.0 2018/11/29 ウィンドウ背景を有効にするかどうかを動的に制御するスイッチを追加
// 1.1.0 2017/11/19 拡大率を設定できる機能を追加
// 1.0.0 2017/11/18 初版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc ウィンドウ背景画像指定プラグイン
 * @author トリアコンタン
 *
 * @param windowImageInfo
 * @text ウィンドウ画像情報
 * @desc 背景画像を差し替えるウィンドウの情報です。
 * @default
 * @type struct<WindowImages>[]
 *
 * @help WindowBackImage.js
 *
 * ウィンドウの背景を任意の画像に置き換えます。
 * 画像は複数指定可能で、それぞれに出現条件スイッチを指定できます。
 * 画像が表示された場合、元のウィンドウフレームを非表示するかどうかを
 * 選択できます。
 *
 * 背景画像はウィンドウのサイズにかかわらず、中央を原点に表示されます。
 * 拡大率と座標を補正することは可能ですがサイズが可変、不定のウィンドウに
 * 対して背景画像を指定することは推奨しません。
 *
 * プラグインによって追加されたウィンドウにも指定可能ですが
 * 正常に動作するとは限りません。
 *
 * SceneCustomMenu.jsで追加したウィンドウの背景を変えたい場合は
 * WindowClassの指定を同プラグインの『ウィンドウ識別子』を指定してください。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

/*~struct~WindowImages:
 *
 * @param WindowClass
 * @desc 専用の画像に差し替える対象のウィンドウです。一覧にない場合は直接入力してください。
 * @type select
 * @default
 * @option [ゲーム全般]ヘルプウィンドウ
 * @value Window_Help
 * @option [ゲーム全般]お金ウィンドウ
 * @value Window_Gold
 * @option [メインメニュー]メインコマンドウィンドウ
 * @value Window_MenuCommand
 * @option [メインメニュー]アクターステータスウィンドウ
 * @value Window_MenuStatus
 * @option [アイテム画面]アイテムカテゴリウィンドウ
 * @value Window_ItemCategory
 * @option [アイテム画面]アイテムリストウィンドウ
 * @value Window_ItemList
 * @option [アイテム画面]アクター選択ウィンドウ
 * @value Window_MenuActor
 * @option [スキル画面]スキルタイプウィンドウ
 * @value Window_SkillType
 * @option [スキル画面]ステータスウィンドウ
 * @value Window_SkillStatus
 * @option [スキル画面]スキルリストウィンドウ
 * @value Window_SkillList
 * @option [装備画面]ステータスウィンドウ
 * @value Window_EquipStatus
 * @option [装備画面]装備コマンドウィンドウ
 * @value Window_EquipCommand
 * @option [装備画面]装備スロットウィンドウ
 * @value Window_EquipSlot
 * @option [装備画面]装備リストウィンドウ
 * @value Window_EquipItem
 * @option [ステータス画面]ステータスウィンドウ
 * @value Window_Status
 * @option [オプション画面]オプションウィンドウ
 * @value Window_Options
 * @option [セーブ、ロード画面]ファイルリストウィンドウ
 * @value Window_SavefileList
 * @option [ショップ画面]ショップコマンドウィンドウ
 * @value Window_ShopCommand
 * @option [ショップ画面]購入アイテムウィンドウ
 * @value Window_ShopBuy
 * @option [ショップ画面]売却アイテムウィンドウ
 * @value Window_ShopSell
 * @option [ショップ画面]数値入力ウィンドウ
 * @value Window_ShopNumber
 * @option [ショップ画面]ステータスウィンドウ
 * @value Window_ShopStatus
 * @option [名前入力画面]名前ウィンドウ
 * @value Window_NameEdit
 * @option [名前入力画面]名前入力ウィンドウ
 * @value Window_NameInput
 * @option [マップ画面]選択肢ウィンドウ
 * @value Window_ChoiceList
 * @option [マップ画面]数値入力ウィンドウ
 * @value Window_NumberInput
 * @option [マップ画面]アイテム選択ウィンドウ
 * @value Window_EventItem
 * @option [マップ画面]メッセージウィンドウ
 * @value Window_Message
 * @option [マップ画面]スクロールメッセージウィンドウ
 * @value Window_ScrollText
 * @option [マップ画面]マップ名ウィンドウ
 * @value Window_MapName
 * @option [戦闘画面]バトルログウィンドウ
 * @value Window_BattleLog
 * @option [戦闘画面]パーティコマンドウィンドウ
 * @value Window_PartyCommand
 * @option [戦闘画面]アクターコマンドウィンドウ
 * @value Window_ActorCommand
 * @option [戦闘画面]アクター一覧ウィンドウ
 * @value Window_BattleActor
 * @option [戦闘画面]敵キャラ一覧ウィンドウ
 * @value Window_BattleEnemy
 * @option [戦闘画面]スキル一覧ウィンドウ
 * @value Window_BattleSkill
 * @option [戦闘画面]アイテム一覧ウィンドウ
 * @value Window_BattleItem
 * @option [タイトル画面]タイトルウィンドウ
 * @value Window_TitleCommand
 * @option [ゲーム終了画面]終了確認ウィンドウ
 * @value Window_GameEnd
 * @option [デバッグ画面]変数選択ウィンドウ
 * @value Window_DebugRange
 * @option [デバッグ画面]変数設定ウィンドウ
 * @value Window_DebugEdit
 * @option [行動目標ウィンドウプラグイン]行動目標ウィンドウ
 * @value Window_Destination
 * @option [行動目標ウィンドウプラグイン]メニュー行動目標ウィンドウ
 * @value Window_DestinationMenu
 * @option [ゲーム内時間の導入プラグイン]時間ウィンドウ
 * @value Window_Chronus
 * @option [公式ガチャプラグイン]ガチャ表示ウィンドウ
 * @value Window_Gacha
 * @option [公式ガチャプラグイン]コマンドウィンドウ
 * @value Window_GachaCommand
 * @option [公式ガチャプラグイン]入手確認ウィンドウ
 * @value Window_GachaGetCommand
 * @option [公式ガチャプラグイン]入手情報ウィンドウ
 * @value Window_GachaGet
 * @option [公式ガチャプラグイン]コストウィンドウ
 * @value Window_Cost
 * @option [ノベルゲーム総合プラグイン]ノベル選択肢ウィンドウ
 * @value Window_NovelChoiceList
 * @option [ノベルゲーム総合プラグイン]ノベルメッセージウィンドウ
 * @value Window_NovelMessage
 * @option [ノベルゲーム総合プラグイン]ノベルタイトルコマンドウィンドウ
 * @value Window_NovelTitleCommand
 * @option [ノベルゲーム総合プラグイン]ノベル数値入力ウィンドウ
 * @value Window_NovelNumberInput
 * @option [ノベルゲーム総合プラグイン]ポーズメニューウィンドウ
 * @value Window_PauseMenu
 * @option [クロスセーブプラグイン]パスワード入力ウィンドウ
 * @value Window_PasswordInput
 * @option [クロスセーブプラグイン]パスワードウィンドウ
 * @value Window_PasswordEdit
 * @option [用語辞典プラグイン]用語カテゴリウィンドウ
 * @value Window_GlossaryCategory
 * @option [用語辞典プラグイン]用語リストウィンドウ
 * @value Window_GlossaryList
 * @option [用語辞典プラグイン]使用確認ウィンドウ
 * @value Window_GlossaryConfirm
 * @option [用語辞典プラグイン]収集率ウィンドウ
 * @value Window_GlossaryComplete
 * @option [用語辞典プラグイン]用語ウィンドウ
 * @value Window_Glossary
 * @option [サウンドテストプラグイン]オーディオカテゴリウィンドウ
 * @value Window_AudioCategory
 * @option [サウンドテストプラグイン]オーディオリストウィンドウ
 * @value Window_AudioList
 * @option [サウンドテストプラグイン]オーディオ設定ウィンドウ
 * @value Window_AudioSetting
 * @option [数値入力画面プラグイン]数値入力ウィンドウ
 * @value Window_NumberInput
 * @option [数値入力画面プラグイン]数値ウィンドウ
 * @value Window_NumberEdit
 *
 * @param ImageFile
 * @desc 差し替える画像のファイル名です。(img/pictureの中から選択します)　空を指定すると枠だけが非表示になります。
 * @default
 * @require 1
 * @dir img/pictures/
 * @type file
 *
 * @param OffsetX
 * @desc 表示X座標の補正値です。
 * @default 0
 * @type number
 * @min -2000
 * @max 2000
 *
 * @param OffsetY
 * @desc 表示Y座標の補正値です。
 * @default 0
 * @type number
 * @min -2000
 * @max 2000
 *
 * @param ScaleX
 * @desc X方向の拡大率(%指定)です。
 * @default 100
 * @type number
 * @min -2000
 * @max 2000
 *
 * @param ScaleY
 * @desc Y方向の拡大率(%指定)です。
 * @default 100
 * @type number
 * @min -2000
 * @max 2000
 *
 * @param WindowShow
 * @desc 画像が表示されているときでもウィンドウの元背景を表示したままにします。
 * @default false
 * @type boolean
 *
 * @param SwitchId
 * @desc 指定したスイッチがONのときのみウィンドウを差し替えます。
 * @default 0
 * @type switch
 */

(function () {
  "use strict";

  var getClassName = function (object) {
    return object.constructor
      .toString()
      .replace(/function\s+(.*)\s*\([\s\S]*/m, "$1");
  };

  //=============================================================================
  // ローカル関数
  //  プラグインパラメータやプラグインコマンドパラメータの整形やチェックをします
  //=============================================================================
  /**
   * Create plugin parameter. param[paramName] ex. param.commandPrefix
   * @param pluginName plugin name(EncounterSwitchConditions)
   * @returns {Object} Created parameter
   */
  var createPluginParameter = function (pluginName) {
    var paramReplacer = function (key, value) {
      if (value === "null") {
        return value;
      }
      if (value[0] === '"' && value[value.length - 1] === '"') {
        return value;
      }
      try {
        return JSON.parse(value);
      } catch (e) {
        return value;
      }
    };
    var parameter = JSON.parse(
      JSON.stringify(PluginManager.parameters(pluginName), paramReplacer)
    );
    PluginManager.setParameters(pluginName, parameter);
    return parameter;
  };

  var param = createPluginParameter("WindowBackImage");
  if (!param.windowImageInfo) {
    param.windowImageInfo = [];
  }

  //=============================================================================
  // Window
  //  専用の背景画像を設定します。
  //=============================================================================
  var _Window__createAllParts = Window.prototype._createAllParts;
  Window.prototype._createAllParts = function () {
    _Window__createAllParts.apply(this, arguments);
    this._backImageDataList = this.initBackImageData();
    if (this._backImageDataList.length >= 0) {
      this._createBackImage();
    }
  };

  Window.prototype._setBackImageProperty = function (backImageData) {
    this._backImageDx = parseInt(backImageData["OffsetX"]) || 0;
    this._backImageDy = parseInt(backImageData["OffsetY"]) || 0;
    this._windowBackImageSprite.scale.x =
      (parseInt(backImageData["ScaleX"]) || 100) / 100;
    this._windowBackImageSprite.scale.y =
      (parseInt(backImageData["ScaleY"]) || 100) / 100;
  };

  /**
   * 背景画像を作成します。
   * @private
   */
  Window.prototype._createBackImage = function () {
    this._windowBackSprite.visible = false;
    this._windowFrameSprite.visible = false;
    this._windowBackImageSprites = [];
    this._backImageDataList.forEach(function (backImageData) {
      var bitmap = ImageManager.loadPicture(backImageData["ImageFile"]);
      var sprite = new Sprite_WindowBackImage(bitmap);
      sprite.scale.x = (backImageData["ScaleX"] || 100) / 100;
      sprite.scale.y = (backImageData["ScaleY"] || 100) / 100;
      this._windowBackImageSprites.push(sprite);
      this._windowSpriteContainer.addChild(sprite);
    }, this);
  };

  Window.prototype.initBackImageData = function () {
    var className = getClassName(this);
    // for SceneCustomMenu.js
    if (this._data && this._data.Id) {
      className = this._data.Id;
    }
    return param.windowImageInfo.filter(function (data) {
      return data["WindowClass"] === className;
    }, this);
  };

  Window.prototype.getBackImageDataItem = function (index, propName) {
    return this._backImageDataList[index][propName];
  };

  var _Window__refreshAllParts = Window.prototype._refreshAllParts;
  Window.prototype._refreshAllParts = function () {
    if (this._windowBackImageSprites) {
      this._refreshBackImage();
    }
    _Window__refreshAllParts.apply(this, arguments);
  };

  /**
   * 背景画像をリフレッシュします。
   * @private
   */
  Window.prototype._refreshBackImage = function () {
    this._windowBackImageSprites.forEach(function (sprite, index) {
      sprite.x = this.width / 2 + this.getBackImageDataItem(index, "OffsetX");
      sprite.y = this.height / 2 + this.getBackImageDataItem(index, "OffsetY");
    }, this);
  };

  var _Window_update = Window.prototype.update;
  Window.prototype.update = function () {
    _Window_update.apply(this, arguments);
    if (!this._windowBackImageSprites) {
      return;
    }
    var defaultVisible = true;
    this._windowBackImageSprites.forEach(function (sprite, index) {
      var switchId = this.getBackImageDataItem(index, "SwitchId");
      sprite.visible = !switchId || $gameSwitches.value(switchId);
      if (sprite.visible && !this.getBackImageDataItem(index, "WindowShow")) {
        defaultVisible = false;
      }
    }, this);
    this._windowBackSprite.visible = defaultVisible;
    this._windowFrameSprite.visible = defaultVisible;
  };

  //=============================================================================
  // Sprite_WindowBackImage
  //  ウィンドウ背景画像のスプライトです。
  //=============================================================================
  function Sprite_WindowBackImage() {
    this.initialize.apply(this, arguments);
  }

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

  Sprite_WindowBackImage.prototype.initialize = function (bitmap) {
    Sprite.prototype.initialize.call(this);
    this.bitmap = bitmap;
    this.anchor.x = 0.5;
    this.anchor.y = 0.5;
  };
})();


code:
//=============================================================================
// WindowBlinkStop.js
// ----------------------------------------------------------------------------
// (C)2017 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.0.1 2021/05/30 メッセージウィンドウなどに表示されるページ送り画像のアニメーションが止まってしまう問題を修正
// 1.0.0 2017/12/09 初版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc WindowBlinkStopPlugin
 * @author triacontane
 *
 * @help WindowBlinkStop.js
 *
 * 選択中のウィンドウカーソルの点滅を停止します。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * This plugin is released under the MIT License.
 */
/*:ja
 * @plugindesc ウィンドウ点滅停止プラグイン
 * @author トリアコンタン
 *
 * @help WindowBlinkStop.js
 *
 * 選択中のウィンドウカーソルの点滅を停止します。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function () {
  "use strict";

  var _Window__updateCursor = Window.prototype._updateCursor;
  Window.prototype._updateCursor = function () {
    var prevCount = this._animationCount;
    this._animationCount = 0;
    _Window__updateCursor.apply(this, arguments);
    this._animationCount = prevCount;
  };
})();


code:
//=============================================================================
// WindowCorsorColorChange.js
//=============================================================================

/*:
 * @plugindesc ウィンドウカーソルの色と明滅ペースを変更します。
 * @author 村人Ａ
 *
 * @param カーソルの色
 * @desc カーソルの色をＲ,Ｂ,Ｇで指定します。それぞれ0～255の間で指定してください。
 * @default 244,150,94
 *
 * @param カーソル明滅フレーム数
 * @desc カーソル明滅の反転するまでのフレーム数を指定します。値が大きいほど明滅スパンが長くなります。
 * @default 30
 * @type number
 *
 * @help
 * ==============================
 * バージョン管理
 * ==============================
 * 18/11/29  ver 1.0　リリース
 *
 * ==============================
 * ヘルプ
 * ==============================
 * ウィンドウのカーソルの色と明滅のペースを変更します。
 * ウィンドウスキンの画像img/system/Window.pngはデフォルトのものを使ってください。
 * デフォルトのものでなくてもカーソルの色がデフォルトのものであれば問題ございません。
 * 色と明滅フレーム数はプラグインパラメータにて変更してください。
 *
 * 不具合・不備・ご不明点等ございましたら
 * villaa.contact＠gmail.com
 * までご連絡ください。（＠は半角に）
 *
 */

(function () {
  String.prototype.cnvtNumArray = function () {
    var strArr = this.split(",");
    var result = strArr.map(function (str) {
      return Number(str);
    });
    return result;
  };

  var parameters = PluginManager.parameters("WindowCorsorColorChange");
  windowCursorColorArray = String(
    parameters["カーソルの色"] || "244,150,94"
  ).cnvtNumArray();
  windowCursorBlinkingFrame = Number(
    parameters["カーソル明滅フレーム数"] || 30
  );

  var _alias_WCCC_Window_refreshCursor = Window.prototype._refreshCursor;
  Window.prototype._refreshCursor = function () {
    _alias_WCCC_Window_refreshCursor.call(this);
    var bitmap = this._windowCursorSprite.bitmap;
    bitmap.adjustTone(-214, -255, -241);
    var c = windowCursorColorArray;
    bitmap.adjustTone(c[0], c[1], c[2]);
  };

  Window.prototype._updateCursor = function () {
    var bf = windowCursorBlinkingFrame;
    var maxCount = bf * 2;
    var blinkCount = this._animationCount % maxCount;
    var cursorOpacity = this.contentsOpacity;
    if (this.active) {
      var fadeRate = Math.round(255 / bf);
      if (blinkCount < bf) {
        cursorOpacity -= blinkCount * fadeRate;
      } else {
        cursorOpacity -= (maxCount - blinkCount) * fadeRate;
      }
    }
    this._windowCursorSprite.alpha = cursorOpacity / 255;
    this._windowCursorSprite.visible = this.isOpen();
  };
})();


code:
/*:
 * @plugindesc Skip the title scene for testing purpose.
 * @version 1.0
 */

(function () {
  Scene_Boot.prototype.start = function () {
    Scene_Base.prototype.start.call(this);
    SoundManager.preloadImportantSounds();
    if (DataManager.isBattleTest()) {
      DataManager.setupBattleTest();
      SceneManager.goto(Scene_Battle);
    } else {
      this.checkPlayerLocation();
      DataManager.setupNewGame();
      SceneManager.goto(Scene_Map);
    }
    this.updateDocumentTitle();
  };
})();


code:
(function () {
  "use strict";

  var _Window_ShopCommand_maxCols = Window_ShopCommand.prototype.maxCols;
  Window_ShopCommand.prototype.maxCols = function () {
    var columnNumber = _Window_ShopCommand_maxCols.apply(this, arguments);
    return this._purchaseOnly ? columnNumber - 1 : columnNumber;
  };

  var _Window_ShopCommand_makeCommandList =
    Window_ShopCommand.prototype.makeCommandList;
  Window_ShopCommand.prototype.makeCommandList = function () {
    _Window_ShopCommand_makeCommandList.apply(this, arguments);
    if (this._purchaseOnly) {
      this._list = this._list.filter(function (command) {
        return command.symbol !== "sell";
      });
    }
  };
})();


code:
//=============================================================================
// mahoujin.js
//=============================================================================
//Copyright (c) 2016 Trb
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
//
//twitter https://twitter.com/Trb_surasura
/*:
 * @plugindesc 戦闘時に、回転する魔法陣の画像を表示させるプラグイン
 * @author Trb
 * @version 1.00 2016/7/6 初版
 *
 * @help picture のフォルダに、『mahoujin1』『mahoujin2』という名前の画像を用意して下さい。
 *
 * mahoujin1 は時計回りに回転する魔法陣の画像、
 * mahoujin2 は反時計回りに回転する魔法陣の画像です。
 *
 * 初期設定では、スイッチ1がオンの時魔法陣が表示されるようになっています。
 * 表示のオンオフに使用するスイッチを変更する場合はプラグインを直接編集して下さい。
 * 魔法陣の表示位置や回転速度などの設定もプラグインを直接編集する必要があります。
 *
 *
 * @requiredAssets img/pictures/mahoujin1
 * @requiredAssets img/pictures/mahoujin2
 *
 */
(function () {
  //------表示位置などの設定にはここの数字を書き換えてください------------------------------------------------------------------
  var switchId = 135; //画像の表示切り替えに使うスイッチの番号(この番号のスイッチがオンの時魔法陣が表示されます)
  var tsubure = 0.5; //画像の潰れ具合の値（0~1の間で設定）
  var x = 408; //画像の表示位置(中心のx座標)
  var y = 360; //画像の表示位置(中心のy座標)
  var kaiten1 = 0.8; //画像1の回転速度(1フレームあたり何度の速さで回転するか。マイナスの値を入れると反時計回りになります)
  var kaiten2 = -0.8; //画像2の回転速度
  var gousei = 3; //画像の合成方法(0~3の間で設定。0は通常、1と3は光る感じ、2は暗くなる感じで表示されます)
  //--------------------------------------------------------------------------------------------------------------------

  var _Spriteset_Battle_createBattleback =
    Spriteset_Battle.prototype.createBattleback;
  Spriteset_Battle.prototype.createBattleback = function () {
    _Spriteset_Battle_createBattleback.call(this);
    //魔法陣スプライトの器
    this._mahoujinSpriteContainer = new Sprite();
    this._mahoujinSpriteContainer.scale.y = tsubure; //器となるスプライトの位置や拡大率などを設定する
    this._mahoujinSpriteContainer.x = x;
    this._mahoujinSpriteContainer.y = y;
    //魔法陣スプライトの中身1
    this._mahoujinSprite1 = new Sprite();
    this._mahoujinSprite1.bitmap = ImageManager.loadPicture("mahoujin1"); //画像の設定
    this._mahoujinSprite1.anchor = { x: 0.5, y: 0.5 }; //anchor は画像の軸を指す値。0.5にすることで画像の回転軸が画像の中心になる。
    this._mahoujinSprite1.blendMode = gousei;
    this._mahoujinSpriteContainer.addChild(this._mahoujinSprite1); //器のスプライトに addChild する
    //魔法陣スプライトの中身2
    this._mahoujinSprite2 = new Sprite();
    this._mahoujinSprite2.bitmap = ImageManager.loadPicture("mahoujin2");
    this._mahoujinSprite2.anchor = { x: 0.5, y: 0.5 };
    this._mahoujinSprite2.blendMode = gousei;
    this._mahoujinSpriteContainer.addChild(this._mahoujinSprite2);

    this._battleField.addChild(this._mahoujinSpriteContainer); //器のスプライトを battleField に addChild する
  };
  /* ※ 戦闘ごとに魔法陣の画像を変更したい場合
51行目、57行目の ImageManager.loadPicture のカッコ内を ($gameVariables.value(変数番号)) にして、
変数に画像の名前を入れることによって、その名前の画像が読み込まれるようになります。
　　<具体例>
　　　ImageManager.loadPicture($gameVariables.value(1));にし、
　　　イベントコマンドの変数の操作で　変数1の値を『魔法陣A』にすれば『魔法陣A』というファイル名の画像が読み込まれる

ただし画像の読み込みは戦闘開始時に行われるため、戦闘の途中で画像を変えることは出来ません。
(そうしたい場合はまた別の改変が必要になります)
なので戦闘開始前のイベントで画像名を指定するようにしてください。
*/

  var _Spriteset_Battle_update = Spriteset_Battle.prototype.update;
  Spriteset_Battle.prototype.update = function () {
    _Spriteset_Battle_update.call(this);

    if ($gameSwitches.value(switchId)) {
      //スイッチがオンの時
      this._mahoujinSpriteContainer.visible = true; //visible は画像の表示の切り替えフラグ
      this._mahoujinSprite1.rotation += (kaiten1 / 180) * Math.PI; //rotation は画像の回転度。kaitenの値の分回転させる
      this._mahoujinSprite2.rotation += (kaiten2 / 180) * Math.PI; //[/ 180 * Math.PI]は角度をラジアンに変換する計算
    } else {
      //スイッチがオンじゃない時
      this._mahoujinSpriteContainer.visible = false; //表示をfalseにする
    }
  };
})();


code:
(function () {
  "use strict";

  // フェードイン時間（フレーム数）
  var fadeDuration = 30;

  // フェード用Bitmap
  var fadeBitmap = null;

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

  var _Scene_Map_startFadeIn = Scene_Map.prototype.startFadeIn;
  Scene_Map.prototype.startFadeIn = function (duration, white) {
    if (SceneManager.isPreviousScene(Scene_Battle) && fadeBitmap) {
      // フェード時間設定
      duration = fadeDuration;
      // フェードスプライトがすでに作られていたら削除
      if (this._fadeSprite) {
        this.removeChild(this._fadeSprite);
        this._fadeSprite = null;
      }
      // 元関数呼び出し
      _Scene_Battle_startFadeIn.call(this, duration, white);
      // フェードイン用の画像を、事前にキャプチャした画像に差し替え
      this.removeChild(this._fadeSprite);
      this._fadeSprite = new Sprite(fadeBitmap);
      this.addChild(this._fadeSprite);
      return;
    }
    if (!(this._fadeSprite instanceof ScreenSprite)) {
      this._fadeSprite = null;
    }
    _Scene_Map_startFadeIn.call(this, duration, white);
  };

  var _Scene_Map_startFadeOut = Scene_Map.prototype.startFadeOut;
  Scene_Map.prototype.startFadeOut = function (duration, white) {
    if (!(this._fadeSprite instanceof ScreenSprite)) {
      this._fadeSprite = null;
    }
    _Scene_Battle_startFadeOut.call(this, duration, white);
  };

  Scene_Map.prototype.startEncounterEffect = function () {
    // ウインドウ非表示
    this._windowLayer.visible = false;
    // マップクリック時の行き先エフェクトを消す
    $gameTemp.clearDestination();
    this._spriteset._destinationSprite.visible = false;
    // イベントを残した画面をキャプチャ
    fadeBitmap = Bitmap.snap(this);
    // イベント非表示
    this._spriteset.hideCharacters();
    // イベントを消した画面をキャプチャ
    SceneManager._backgroundBitmap = Bitmap.snap(this);
    // イベント非表示を解除
    this._spriteset._characterSprites.forEach(function (sprite) {
      if (!sprite.isTile()) {
        sprite.show();
      }
    });
    // ウインドウ非表示を解除
    this._windowLayer.visible = true;
  };

  //==============================================================================
  // Scene_Battle
  //==============================================================================

  var _Scene_Battle_startFadeIn = Scene_Battle.prototype.startFadeIn;
  Scene_Battle.prototype.startFadeIn = function (duration, white) {
    if (fadeBitmap) {
      // フェード時間設定
      duration = fadeDuration;
      // フェードスプライトがすでに作られていたら削除
      if (this._fadeSprite) {
        this.removeChild(this._fadeSprite);
        this._fadeSprite = null;
      }
      // 元関数呼び出し
      _Scene_Battle_startFadeIn.call(this, duration, white);
      // フェードイン用の画像を、事前にキャプチャした画像に差し替え
      this.removeChild(this._fadeSprite);
      this._fadeSprite = new Sprite(fadeBitmap);
      this.addChild(this._fadeSprite);
      return;
    }
    if (!(this._fadeSprite instanceof ScreenSprite)) {
      this._fadeSprite = null;
    }
    _Scene_Battle_startFadeIn.call(this, duration, white);
  };

  var _Scene_Battle_startFadeOut = Scene_Battle.prototype.startFadeOut;
  Scene_Battle.prototype.startFadeOut = function (duration, white) {
    this._fadeSprite = null;
    // 元関数呼び出し
    _Scene_Battle_startFadeOut.call(this, duration, white);
    // フェード無効化
    this._fadeDuration = 0;
    // ウインドウ非表示
    this._windowLayer.visible = false;
    // 画面をキャプチャ
    fadeBitmap = Bitmap.snap(this);
    // ウインドウ非表示を解除
    this._windowLayer.visible = true;
  };
})();