code:
//=============================================================================
// PictureCallCommon.js
// ----------------------------------------------------------------------------
// (C)2015 Triacontane
// This plugin is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.14.3 2021/05/01 紐付け解除の際の設定値を変更
// 1.14.2 2020/06/05 ヘルプのキーバインドにpagedownとpageupを追加
// 1.14.1 2020/05/16 ヘルプのコマンド部分の紛らわしい記述を修正
// 1.14.0 2020/05/13 指定したスイッチがONのときのみ「タッチ操作抑制」を有効にできる設定を追加
// 1.13.1 2020/05/06 マップズームを実行したときの座標の取得計算が間違っていた問題を修正
// 1.13.0 2019/12/22 ピクチャコモンを並列処理として実行する設定を追加。
// 1.12.2 2019/03/31 キーバインドで追加でキーを指定した場合に、ボタン名称が小文字でないと反応しない仕様を変更
// 1.12.1 2019/03/19 コミュニティ版コアスクリプト1.3以降でピクチャコモンから移動ルートの設定を実行するとエラーになっていた問題を修正
// 1.12.0 2018/11/02 すべてのピクチャタッチを無効にできるスイッチを追加
// 1.11.0 2018/08/10 なでなで機能に透過設定が正しく適用されない問題を修正
//                   なでなで機能にもプラグインコマンドから透過設定を変更できる機能を追加
// 1.10.8 2018/06/16 Boolean型のパラメータが一部正常に取得できていなかった問題を修正
// 1.10.7 2018/06/01 イベント「戦闘の処理」による戦闘の場合、「戦闘中に常にコモン実行」の機能が使えない問題を修正
// 1.10.6 2018/04/12 ヘルプの記述を微修正
// 1.10.5 2017/12/17 コモンイベントを実行するタイプのボタンは、イベント実行中に無効になるよう仕様変更
// 1.10.4 2017/11/01 ピクチャコモンが呼ばれる瞬間に対象ピクチャが表示されていない場合はイベントを呼ばない仕様に変更
// 1.10.3 2017/10/28 ピクチャタッチイベントの呼び出し待機中に戦闘に突入すると、戦闘画面表示後に実行されてしまう問題を修正
// 1.10.2 2017/10/21 戦闘画面に突入する際のエフェクトで、マウスオーバーイベントが予期せず発生する場合がある問題を修正
// 1.10.1 2017/05/27 動的文字列ピクチャプラグインのウィンドウフレームクリックをピクチャクリックに対応
// 1.9.3 2017/05/27 競合の可能性のある記述（Objectクラスへのプロパティ追加）をリファクタリング（by liplyさん）
// 1.9.2 2017/03/16 1.9.0で戦闘中にコモンイベント実行が正しく動作していなかった問題を修正
// 1.9.1 2017/03/16 透明色を考慮する場合、不透明度が0のピクチャは一切反応しなくなるように仕様変更
// 1.9.0 2017/03/13 戦闘中常にピクチャクリックイベントを実行できる機能を追加
// 1.8.2 2017/02/14 1.8.0の修正により、ピクチャクリック時に変数に値を格納する機能が無効化されていたのを修正
// 1.8.1 2017/02/07 端末依存の記述を削除
// 1.8.0 2017/02/03 ピクチャクリックを任意のボタンにバインドできる機能を追加
// 1.7.0 2017/02/02 マップのズームおよびシェイク中でも正確にピクチャをクリックできるようになりました。
//                  マウスポインタがピクチャ内にあるかどうかをスクリプトで判定できる機能を追加。
// 1.6.0 2016/12/29 ピクチャクリックでイベントが発生したらマップタッチを無効化するよう仕様修正
// 1.5.1 2016/11/20 1.5.0で混入した不要なコードを削除
// 1.5.0 2016/11/19 ピクチャクリック時にコモンイベントではなくスイッチをONにできる機能を追加
// 1.4.0 2016/08/20 ピクチャごとに透明色を考慮するかどうかを設定できる機能を追加
//                  プラグインを適用していないセーブデータをロードした場合に発生するエラーを修正
// 1.3.5 2016/04/20 リファクタリングによりピクチャの優先順位が逆転していたのをもとに戻した
// 1.3.4 2016/04/08 ピクチャが隣接する状態でマウスオーバーとマウスアウトが正しく機能しない場合がある問題を修正
// 1.3.3 2016/03/19 トリガー条件を満たした場合に以後のタッチ処理を抑制するパラメータを追加
// 1.3.2 2016/02/28 処理の負荷を少し軽減
// 1.3.1 2016/02/21 トリガーにマウスを押したまま移動を追加
// 1.3.0 2016/01/24 ピクチャをなでなでする機能を追加
//                  トリガーにマウスムーブを追加
//                  ピクチャが回転しているときに正しく位置を補足できるよう修正
// 1.2.1 2016/01/21 呼び出すコモンイベントの上限を100から1000（DB上の最大値）に修正
//                  競合対策（YEP_MessageCore.js）
// 1.2.0 2016/01/14 ホイールクリック、ダブルクリックなどトリガーを10種類に拡充
// 1.1.3 2016/01/02 競合対策（TDDP_BindPicturesToMap.js）
// 1.1.2 2015/12/20 長押しイベント発生時に1秒間のインターバルを設定するよう仕様変更
// 1.1.1 2015/12/10 ピクチャを消去後にマウスオーバーするとエラーになる現象を修正
// 1.1.0 2015/11/23 コモンイベントを呼び出した対象のピクチャ番号を特定する機能を追加
//                  設定で透明色を考慮する機能を追加
//                  トリガーとして「右クリック」や「長押し」を追加
// 1.0.0 2015/11/14 初版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:ja
 * @plugindesc ピクチャのボタン化プラグイン
 * @author トリアコンタン
 *
 * @param 透明色を考慮
 * @desc クリックされた箇所が透明色だった場合は、クリックを無効にする。
 * @default true
 * @type boolean
 *
 * @param ピクチャ番号の変数番号
 * @desc ピクチャクリック時にピクチャ番号を格納するゲーム変数の番号。
 * @default 0
 * @type variable
 *
 * @param ポインタX座標の変数番号
 * @desc マウスカーソルもしくはタッチした位置のX座標を常に格納するゲーム変数の番号
 * @default 0
 * @type variable
 *
 * @param ポインタY座標の変数番号
 * @desc マウスカーソルもしくはタッチした位置のY座標を常に格納するゲーム変数の番号
 * @default 0
 * @type variable
 *
 * @param タッチ操作抑制
 * @desc トリガー条件を満たした際にタッチ情報をクリアします。(ON/OFF)
 * 他のタッチ操作と動作が重複する場合にONにします。
 * @default false
 * @type boolean
 *
 * @param タッチ操作抑制スイッチ
 * @desc 指定した場合、対象スイッチがONのときのみ「タッチ操作抑制」が有効になります。
 * @default 0
 * @type switch
 *
 * @param 戦闘中常にコモン実行
 * @desc 戦闘中にピクチャをクリックしたとき、常にコモンイベントを実行します。(ON/OFF)
 * @default false
 * @type boolean
 *
 * @param 並列処理として実行
 * @desc ピクチャクリックによるコモンイベント実行を並列処理扱いで実行します。
 * @default false
 * @type boolean
 *
 * @param 無効スイッチ
 * @desc 指定した番号のスイッチがONになっている場合、すべてのピクチャタッチが無効になります。
 * @default 0
 * @type switch
 *
 * @help ピクチャをクリックすると、指定したコモンイベントが
 * 呼び出される、もしくは任意のスイッチをONにするプラグインコマンドを提供します。
 * このプラグインを利用すれば、JavaScriptの知識がなくても
 * 誰でも簡単にクリックやタッチを主体にしたゲームを作れます。
 *
 * 戦闘中でも実行可能ですが、ツクールMVの仕様により限られたタイミングでしか
 * イベントは実行されません。パラメータ「戦闘中常にコモン実行」を有効にすると
 * 常にイベントが実行されるようになりますが、
 * 一部イベントコマンドは正しく動作しない制約があります。
 *
 * 注意！
 * 一度関連づけたピクチャとコモンイベントはピクチャを消去しても有効です。
 * ピクチャが存在しなければどこをクリックしても反応しませんが、
 * 同じ番号で再度、ピクチャの表示を行うと反応するようになります。
 *
 * プラグインコマンド詳細
 *  イベントコマンド「プラグインコマンド」から実行。
 *  （引数の間は半角スペースで区切る）
 *
 *  ピクチャのボタン化 or
 *  P_CALL_CE [ピクチャ番号] [コモンイベントID] [トリガー] [透明色を考慮]
 *      ピクチャの領域内でトリガー条件を満たした場合に呼び出されるコモンイベントを関連づけます。
 *  　　トリガーは以下の通りです。(省略すると 1 になります)
 *      1  : クリックした場合
 *      2  : 右クリックした場合
 *      3  : 長押しした場合
 *      4  : マウスをピクチャに重ねた場合
 *      5  : マウスをピクチャから放した場合
 *      6  : クリックを解放（リリース）した場合
 *      7  : クリックした場合（かつ長押しの際の繰り返しを考慮）
 *      8  : クリックしている間ずっと
 *      9  : ホイールクリックした場合（PCの場合のみ有効）
 *      10 : ダブルクリックした場合
 *      11 : マウスをピクチャ内で移動した場合
 *      12 : マウスを押しつつピクチャ内で移動した場合
 *
 *      透明色を考慮のパラメータ(ON/OFF)を指定するとピクチャごとに透明色を考慮するかを
 *      設定できます。何も設定しないとプラグインパラメータの設定が適用されます。(従来の仕様)
 *
 *  例：P_CALL_CE 1 3 7 ON
 *  　：ピクチャのボタン化 \v[1] \v[2] \v[3] OFF
 *
 *  ピクチャのスイッチ化 or
 *  P_CALL_SWITCH [ピクチャ番号] [スイッチID] [トリガー] [透明色を考慮]
 *  　　ピクチャの領域内でトリガー条件を満たした場合に、任意のスイッチをONにします。
 *  　　トリガーの設定などは、ピクチャのボタン化と同一です。
 *
 *  ピクチャのキーバインド or
 *  P_CALL_KEY_BIND [ピクチャ番号] [ボタン名称] [トリガー] [透明色を考慮]
 *  　　ピクチャの領域内でトリガー条件を満たした場合に、任意のボタンを押したことにします。
 *  　　ボタン名の設定は以下の通りです。(Windows基準)
 *  ok       : Enter,Z
 *  shift    : Shift
 *  control  : Ctrl,Alt
 *  escape   : Esc,X
 *  left     : ←
 *  up       : ↑
 *  right    : →
 *  down     : ↓
 *  pageup   : PageUp
 *  pagedown : PageDown
 *
 *  ピクチャのボタン化解除 or
 *  P_CALL_CE_REMOVE [ピクチャ番号]
 *      ピクチャとコモンイベントもしくはスイッチの関連づけを解除します。
 *      全てのトリガーが削除対象です。
 *
 *  例：P_CALL_CE_REMOVE 1
 *  　：ピクチャのボタン化解除 \v[1]
 *
 *  ピクチャのなでなで設定 or
 *  P_STROKE [ピクチャ番号] [変数番号] [透明色を考慮]
 *  　　指定したピクチャの上でマウスやタッチを動かすと、
 *  　　速さに応じた値が指定した変数に値が加算されるようになります。
 *  　　この設定はピクチャを差し替えたり、一時的に非表示にしても有効です。
 *  　　10秒でだいたい1000くらいまで溜まります。
 *
 *  例：P_STROKE 1 2 ON
 *  　：ピクチャのなでなで設定 \v[1] \v[2] OFF
 *
 *  ピクチャのなでなで解除 or
 *  P_STROKE_REMOVE [ピクチャ番号]
 *  　　指定したピクチャのなでなで設定を解除します。
 *
 *  例：P_STROKE_REMOVE 1
 *  　：ピクチャのなでなで解除 \v[1]
 *
 *  ピクチャのポインタ化 or
 *  P_POINTER [ピクチャ番号]
 *  　　指定したピクチャがタッチ座標を自動で追従するようになります。
 *  　　タッチしていないと自動で非表示になります。
 *
 *  例：P_POINTER 1
 *  　：ピクチャのポインタ化 \v[1]
 *
 *  ピクチャのポインタ化解除 or
 *  P_POINTER_REMOVE [ピクチャ番号]
 *  　　指定したピクチャのポインタ化を解除します。
 *
 *  例：P_POINTER_REMOVE 1
 *  　：ピクチャのポインタ化解除 \v[1]
 *
 *  ・スクリプト（上級者向け）
 *  $gameScreen.isPointerInnerPicture([ID]);
 *
 *  指定した[ID]のピクチャ内にマウスポインタもしくはタッチ座標が存在する場合に
 *  trueを返します。このスクリプトは[P_CALL_CE]を使用していなくても有効です。
 *
 *  例：$gameScreen.isPointerInnerPicture(5);
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */
/*:
 * @plugindesc Clickable picture plugin
 * @author triacontane
 *
 * @param TransparentConsideration
 * @desc if click position is transparent, click is disabled.
 * @default true
 * @type boolean
 *
 * @param GameVariablePictureNum
 * @desc Game variable number that stores the picture number when common event called.
 * @default 0
 * @type variable
 *
 * @param GameVariableTouchX
 * @desc Game variable number that stores touch x position
 * @default 0
 * @type variable
 *
 * @param GameVariableTouchY
 * @desc Game variable number that stores touch y position
 * @default 0
 * @type variable
 *
 * @param SuppressTouch
 * @desc Suppress touch event for others(ON/OFF)
 * @default false
 * @type boolean
 *
 * @param SuppressTouchSwitch
 * @desc If this is specified, the "SuppressTouch" is enabled only when the target switch is on.
 * @default 0
 * @type switch
 *
 * @param AlwaysCommonInBattle
 * @desc Always execute common event in battle(ON/OFF)
 * @default false
 * @type boolean
 *
 * @param AsParallelCommon
 * @desc ピクチャクリックによるコモンイベント実行を並列処理扱いで実行します。
 * @default false
 * @type boolean
 *
 * @param InvalidSwitchId
 * @desc 指定した番号のスイッチがONになっている場合、すべてのピクチャタッチが無効になります。
 * @default 0
 * @type switch
 *
 * @help When clicked picture, call common event.
 *
 * Plugin Command
 *
 *  P_CALL_CE [Picture number] [Common event ID] [Trigger] [TransparentConsideration]:
 *      When picture was clicked, assign common event id.
 *  　　Trigger are As below(if omit, It is specified to 1)
 *      1  : Left click
 *      2  : Right click
 *      3  : Long click
 *      4  : Mouse over
 *      5  : Mouse out
 *      6  : Mouse release
 *      7  : Mouse repeat click
 *      8  : Mouse press
 *      9  : Wheel click
 *      10 : Double click
 *      11 : Mouse move
 *      12 : Mouse move and press
 *
 *  P_CALL_CE_REMOVE [Picture number] :
 *      break relation from picture to common event.
 *
 *  - Script
 *  $gameScreen.isPointerInnerPicture([ID]);
 *
 *  If mouse pointer inner the picture, return true.
 *
 *  ex：$gameScreen.isPointerInnerPicture(5);
 *
 *  This plugin is released under the MIT License.
 */
(function () {
  "use strict";
  var pluginName = "PictureCallCommon";

  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 getParamBoolean = function (paramNames) {
    var value = getParamOther(paramNames);
    return (
      (value || "").toUpperCase() === "ON" ||
      (value || "").toUpperCase() === "TRUE"
    );
  };

  var getParamNumber = function (paramNames, min, max) {
    var value = getParamOther(paramNames);
    if (arguments.length < 2) min = -Infinity;
    if (arguments.length < 3) max = Infinity;
    return (parseInt(value, 10) || 0).clamp(min, max);
  };

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

  var getArgNumber = function (arg, min, max) {
    if (arguments.length < 2) min = -Infinity;
    if (arguments.length < 3) max = Infinity;
    return (parseInt(convertEscapeCharacters(arg), 10) || 0).clamp(min, max);
  };

  var getArgBoolean = function (arg) {
    return (arg || "").toUpperCase() === "ON";
  };

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

  var iterate = function (that, handler) {
    Object.keys(that).forEach(function (key, index) {
      handler.call(that, key, that[key], index);
    });
  };

  //=============================================================================
  // パラメータの取得とバリデーション
  //=============================================================================
  var paramGameVariableTouchX = getParamNumber(
    ["GameVariableTouchX", "ポインタX座標の変数番号"],
    0
  );
  var paramGameVariableTouchY = getParamNumber(
    ["GameVariableTouchY", "ポインタY座標の変数番号"],
    0
  );
  var paramGameVariablePictNum = getParamNumber(
    ["GameVariablePictureNum", "ピクチャ番号の変数番号"],
    0
  );
  var paramTransparentConsideration = getParamBoolean([
    "TransparentConsideration",
    "透明色を考慮",
  ]);
  var paramSuppressTouch = getParamBoolean(["SuppressTouch", "タッチ操作抑制"]);
  var paramSuppressTouchSwitch = getParamNumber([
    "SuppressTouchSwitch",
    "タッチ操作抑制スイッチ",
  ]);
  var paramAlwaysCommonInBattle = getParamBoolean([
    "AlwaysCommonInBattle",
    "戦闘中常にコモン実行",
  ]);
  var paramInvalidSwitchId = getParamNumber(
    ["InvalidSwitchId", "無効スイッチ"],
    0
  );
  var paramAsParallelCommon = getParamBoolean([
    "AsParallelCommon",
    "並列処理として実行",
  ]);

  //=============================================================================
  // Game_Interpreter
  //  プラグインコマンド[P_CALL_CE]などを追加定義します。
  //=============================================================================
  var _Game_Interpreter_pluginCommand =
    Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function (command, args) {
    _Game_Interpreter_pluginCommand.apply(this, arguments);
    var pictureId, touchParam, trigger, variableNum, transparent;
    switch (getCommandName(command)) {
      case "P_CALL_CE":
      case "ピクチャのボタン化":
        pictureId = getArgNumber(args[0], 1, $gameScreen.maxPictures());
        touchParam = getArgNumber(args[1], 1, $dataCommonEvents.length - 1);
        trigger = getArgNumber(args[2], 1);
        transparent = args.length > 3 ? getArgBoolean(args[3]) : null;
        $gameScreen.setPictureCallCommon(
          pictureId,
          touchParam,
          trigger,
          transparent
        );
        break;
      case "P_CALL_SWITCH":
      case "ピクチャのスイッチ化":
        pictureId = getArgNumber(args[0], 1, $gameScreen.maxPictures());
        touchParam = getArgNumber(args[1], 1);
        trigger = getArgNumber(args[2], 1);
        transparent = args.length > 3 ? getArgBoolean(args[3]) : null;
        $gameScreen.setPictureCallCommon(
          pictureId,
          touchParam * -1,
          trigger,
          transparent
        );
        break;
      case "P_CALL_KEY_BIND":
      case "ピクチャのキーバインド":
        pictureId = getArgNumber(args[0], 1, $gameScreen.maxPictures());
        touchParam = convertEscapeCharacters(args[1]);
        trigger = getArgNumber(args[2], 1);
        transparent = args.length > 3 ? getArgBoolean(args[3]) : null;
        $gameScreen.setPictureCallCommon(
          pictureId,
          touchParam,
          trigger,
          transparent
        );
        break;
      case "P_CALL_CE_REMOVE":
      case "ピクチャのボタン化解除":
        pictureId = getArgNumber(args[0], 1, $gameScreen.maxPictures());
        $gameScreen.setPictureRemoveCommon(pictureId);
        break;
      case "P_STROKE":
      case "ピクチャのなでなで設定":
        pictureId = getArgNumber(args[0], 1, $gameScreen.maxPictures());
        variableNum = getArgNumber(
          args[1],
          1,
          $dataSystem.variables.length - 1
        );
        transparent = args.length > 2 ? getArgBoolean(args[2]) : null;
        $gameScreen.setPictureStroke(pictureId, variableNum, transparent);
        break;
      case "P_STROKE_REMOVE":
      case "ピクチャのなでなで解除":
        pictureId = getArgNumber(args[0], 1, $gameScreen.maxPictures());
        $gameScreen.removePictureStroke(pictureId);
        break;
      case "P_POINTER":
      case "ピクチャのポインタ化":
        pictureId = getArgNumber(args[0], 1, $gameScreen.maxPictures());
        $gameScreen.setPicturePointer(pictureId);
        break;
      case "P_POINTER_REMOVE":
      case "ピクチャのポインタ化解除":
        pictureId = getArgNumber(args[0], 1, $gameScreen.maxPictures());
        $gameScreen.removePicturePointer(pictureId);
        break;
    }
  };

  var _Game_Interpreter_terminate = Game_Interpreter.prototype.terminate;
  Game_Interpreter.prototype.terminate = function () {
    _Game_Interpreter_terminate.apply(this, arguments);
    this._setupFromPicture = false;
  };

  Game_Interpreter.prototype.setupFromPicture = function (eventList, commonId) {
    this.setup(eventList, null);
    if (this.setEventInfo) {
      this.setEventInfo({ eventType: "common_event", commonEventId: commonId });
    }
    this._setupFromPicture = true;
  };

  Game_Interpreter.prototype.isSetupFromPicture = function () {
    return this._setupFromPicture;
  };

  //=============================================================================
  // Game_Temp
  //  呼び出し予定のコモンイベントIDのフィールドを追加定義します。
  //=============================================================================
  var _Game_Temp_initialize = Game_Temp.prototype.initialize;
  Game_Temp.prototype.initialize = function () {
    _Game_Temp_initialize.call(this);
    this.clearPictureCallInfo();
  };

  Game_Temp.prototype.clearPictureCallInfo = function () {
    this._pictureCommonId = 0;
    this._touchPictureId = 0;
  };

  Game_Temp.prototype.setPictureCallInfo = function (pictureCommonId) {
    this._pictureCommonId = pictureCommonId;
  };

  Game_Temp.prototype.pictureCommonId = function () {
    if (!$gameScreen.picture(this._touchPictureId)) {
      this.clearPictureCallInfo();
    }
    return this._pictureCommonId;
  };

  Game_Temp.prototype.onTouchPicture = function (param, pictureId) {
    this._touchPictureParam = param;
    if (this.isTouchPictureSetSwitch()) {
      $gameSwitches.setValue(param * -1, true);
    }
    if (this.isTouchPictureCallCommon()) {
      if (
        !paramAsParallelCommon &&
        $gameMap.isEventRunning() &&
        !$gameParty.inBattle()
      ) {
        this._touchPictureParam = null;
        return;
      }
      this.setPictureCallInfo(param);
    }
    if (this.isTouchPictureButtonTrigger()) {
      Input.bindKeyState(param);
    }
    if (paramGameVariablePictNum > 0) {
      $gameVariables.setValue(paramGameVariablePictNum, pictureId);
    }
    this._touchPictureId = pictureId;
  };

  Game_Temp.prototype.isTouchPictureButtonTrigger = function () {
    return isNaN(this._touchPictureParam);
  };

  Game_Temp.prototype.isTouchPictureSetSwitch = function () {
    return !isNaN(this._touchPictureParam) && this._touchPictureParam < 0;
  };

  Game_Temp.prototype.isTouchPictureCallCommon = function () {
    return !isNaN(this._touchPictureParam) && this._touchPictureParam > 0;
  };

  //=============================================================================
  // Game_System
  //  ロード時にピクチャ関連メンバを初期化します。
  //=============================================================================
  var _Game_System_onAfterLoad = Game_System.prototype.onAfterLoad;
  Game_System.prototype.onAfterLoad = function () {
    _Game_System_onAfterLoad.apply(this, arguments);
    $gameScreen.initPictureArray();
  };

  //=============================================================================
  // Game_Map
  //  ピクチャがタッチされたときのコモンイベント呼び出し処理を追加定義します。
  //=============================================================================
  var _Game_Map_setupStartingEvent = Game_Map.prototype.setupStartingEvent;
  Game_Map.prototype.setupStartingEvent = function () {
    var result = _Game_Map_setupStartingEvent.call(this);
    return result || this.setupPictureCommonEvent();
  };

  var _Game_Map_updateInterpreter = Game_Map.prototype.updateInterpreter;
  Game_Map.prototype.updateInterpreter = function () {
    _Game_Map_updateInterpreter.apply(this, arguments);
    this.setupPictureParallelCommonEvent();
  };

  Game_Map.prototype.setupPictureParallelCommonEvent = function () {
    if (!paramAsParallelCommon) {
      return;
    }
    var commonId = $gameTemp.pictureCommonId();
    var event = $dataCommonEvents[commonId];
    if (event) {
      if (!this._pictureCommonEvents) {
        this._pictureCommonEvents = [];
      }
      var interpreter = new Game_Interpreter();
      interpreter.setupFromPicture(event.list, commonId);
      this._pictureCommonEvents.push(interpreter);
      $gameTemp.clearPictureCallInfo();
    }
  };

  Game_Map.prototype.setupPictureCommonEvent = function () {
    if (paramAsParallelCommon) {
      return false;
    }
    var commonId = $gameTemp.pictureCommonId();
    var event = $dataCommonEvents[commonId];
    var result = false;
    if (!this.isEventRunning() && event) {
      this._interpreter.setupFromPicture(event.list, commonId);
      result = true;
    }
    $gameTemp.clearPictureCallInfo();
    return result;
  };

  var _Game_Map_updateEvents = Game_Map.prototype.updateEvents;
  Game_Map.prototype.updateEvents = function () {
    _Game_Map_updateEvents.apply(this, arguments);
    if (this._pictureCommonEvents && this._pictureCommonEvents.length > 0) {
      this.updatePictureCommonEvents();
    }
  };

  Game_Map.prototype.updatePictureCommonEvents = function () {
    this._pictureCommonEvents.forEach(function (event) {
      event.update();
    });
    this._pictureCommonEvents = this._pictureCommonEvents.filter(function (
      event
    ) {
      return event.isRunning();
    });
  };

  //=============================================================================
  // Game_Troop
  //  ピクチャがタッチされたときのコモンイベント呼び出し処理を追加定義します。
  //=============================================================================
  Game_Troop.prototype.setupPictureCommonEvent =
    Game_Map.prototype.setupPictureCommonEvent;

  Game_Troop.prototype.isExistPictureCommon = function () {
    return this._interpreter.isSetupFromPicture();
  };

  //=============================================================================
  // Game_Screen
  //  ピクチャに対応するコモンイベント呼び出し用のID配列を追加定義します。
  //=============================================================================
  var _Game_Screen_initialize = Game_Screen.prototype.initialize;
  Game_Screen.prototype.initialize = function () {
    _Game_Screen_initialize.apply(this, arguments);
    this.initPictureArray();
  };

  Game_Screen.prototype.initPictureArray = function () {
    this._pictureCidArray = this._pictureCidArray || [];
    this._pictureSidArray = this._pictureSidArray || [];
    this._picturePidArray = this._picturePidArray || [];
    this._pictureTransparentArray = this._pictureTransparentArray || [];
  };

  var _Game_Screen_update = Game_Screen.prototype.update;
  Game_Screen.prototype.update = function () {
    _Game_Screen_update.apply(this, arguments);
    this.updatePointer();
  };

  Game_Screen.prototype.updatePointer = function () {
    if (paramGameVariableTouchX)
      $gameVariables._data[paramGameVariableTouchX] = TouchInput.x;
    if (paramGameVariableTouchY)
      $gameVariables._data[paramGameVariableTouchY] = TouchInput.y;
  };

  Game_Screen.prototype.setPictureCallCommon = function (
    pictureId,
    touchParameter,
    trigger,
    transparent
  ) {
    var realPictureId = this.realPictureId(pictureId);
    if (this._pictureCidArray[realPictureId] == null)
      this._pictureCidArray[realPictureId] = [];
    this._pictureCidArray[realPictureId][trigger] = touchParameter;
    this._pictureTransparentArray[realPictureId] = transparent;
  };

  Game_Screen.prototype.setPictureRemoveCommon = function (pictureId) {
    this._pictureCidArray[this.realPictureId(pictureId)] = null;
  };

  Game_Screen.prototype.setPictureStroke = function (
    pictureId,
    variableNum,
    transparent
  ) {
    var realPictureId = this.realPictureId(pictureId);
    this._pictureSidArray[realPictureId] = variableNum;
    this._pictureTransparentArray[realPictureId] = transparent;
  };

  Game_Screen.prototype.removePictureStroke = function (pictureId) {
    this._pictureSidArray[this.realPictureId(pictureId)] = null;
  };

  Game_Screen.prototype.setPicturePointer = function (pictureId) {
    this._picturePidArray[this.realPictureId(pictureId)] = true;
  };

  Game_Screen.prototype.removePicturePointer = function (pictureId) {
    this._picturePidArray[this.realPictureId(pictureId)] = null;
  };

  Game_Screen.prototype.getPictureCid = function (pictureId) {
    return this._pictureCidArray[this.realPictureId(pictureId)];
  };

  Game_Screen.prototype.getPictureSid = function (pictureId) {
    return this._pictureSidArray[this.realPictureId(pictureId)];
  };

  Game_Screen.prototype.getPicturePid = function (pictureId) {
    return this._picturePidArray[this.realPictureId(pictureId)];
  };

  Game_Screen.prototype.getPictureTransparent = function (pictureId) {
    return this._pictureTransparentArray[this.realPictureId(pictureId)];
  };

  Game_Screen.prototype.disConvertPositionX = function (x) {
    var unshiftX = x - this.zoomX() * (1 - this.zoomScale());
    return Math.round(unshiftX / this.zoomScale());
  };

  Game_Screen.prototype.disConvertPositionY = function (y) {
    var unshiftY = y - this.zoomY() * (1 - this.zoomScale());
    return Math.round(unshiftY / this.zoomScale());
  };

  Game_Screen.prototype.isPointerInnerPicture = function (pictureId) {
    var picture = SceneManager.getPictureSprite(pictureId);
    return picture ? picture.isIncludePointer() : false;
  };

  //=============================================================================
  // SceneManager
  //  ピクチャスプライトを取得します。
  //=============================================================================
  SceneManager.getPictureSprite = function (pictureId) {
    return this._scene.getPictureSprite(pictureId);
  };

  //=============================================================================
  // BattleManager
  //  ピクチャコモンを常に実行できるようにします。
  //=============================================================================
  BattleManager.updatePictureCommon = function () {
    if ($gameTroop.isExistPictureCommon() && paramAlwaysCommonInBattle) {
      this.updateEventMain();
      return true;
    }
    return false;
  };

  //=============================================================================
  // Scene_Base
  //  ピクチャに対する繰り返し処理を追加定義します。
  //=============================================================================
  Scene_Base.prototype.updateTouchPictures = function () {
    if (paramInvalidSwitchId && $gameSwitches.value(paramInvalidSwitchId)) {
      return;
    }
    this._spriteset.iteratePictures(function (picture) {
      if (typeof picture.callTouch === "function") picture.callTouch();
      return $gameTemp.pictureCommonId() === 0;
    });
  };

  Scene_Base.prototype.getPictureSprite = function (pictureId) {
    var result = null;
    this._spriteset.iteratePictures(function (picture) {
      if (picture.isIdEquals(pictureId)) {
        result = picture;
        return false;
      }
      return true;
    });
    return result;
  };

  //=============================================================================
  // Scene_Map
  //  ピクチャのタッチ状態からのコモンイベント呼び出し予約を追加定義します。
  //=============================================================================
  var _Scene_Map_update = Scene_Map.prototype.update;
  Scene_Map.prototype.update = function () {
    this.updateTouchPictures();
    _Scene_Map_update.apply(this, arguments);
  };

  var _Scene_Map_processMapTouch = Scene_Map.prototype.processMapTouch;
  Scene_Map.prototype.processMapTouch = function () {
    _Scene_Map_processMapTouch.apply(this, arguments);
    if ($gameTemp.isDestinationValid() && $gameTemp.pictureCommonId() > 0) {
      $gameTemp.clearDestination();
    }
  };

  var _Scene_Map_terminate = Scene_Map.prototype.terminate;
  Scene_Map.prototype.terminate = function () {
    _Scene_Map_terminate.apply(this, arguments);
    $gameTemp.clearPictureCallInfo();
  };

  //=============================================================================
  // Scene_Battle
  //  ピクチャのタッチ状態からのコモンイベント呼び出し予約を追加定義します。
  //=============================================================================
  var _Scene_Battle_update = Scene_Battle.prototype.update;
  Scene_Battle.prototype.update = function () {
    this.updateTouchPictures();
    $gameTroop.setupPictureCommonEvent();
    _Scene_Battle_update.apply(this, arguments);
  };

  var _Scene_Battle_updateBattleProcess =
    Scene_Battle.prototype.updateBattleProcess;
  Scene_Battle.prototype.updateBattleProcess = function () {
    var result = BattleManager.updatePictureCommon();
    if (result) return;
    _Scene_Battle_updateBattleProcess.apply(this, arguments);
  };

  var _Scene_Battle_terminate = Scene_Battle.prototype.terminate;
  Scene_Battle.prototype.terminate = function () {
    _Scene_Battle_terminate.apply(this, arguments);
    $gameTemp.clearPictureCallInfo();
  };

  //=============================================================================
  // Spriteset_Base
  //  ピクチャに対するイテレータを追加定義します。
  //=============================================================================
  Spriteset_Base.prototype.iteratePictures = function (callBackFund) {
    var containerChildren = this._pictureContainer.children;
    if (!Array.isArray(containerChildren)) {
      iterate(
        this._pictureContainer,
        function (property) {
          if (this._pictureContainer[property].hasOwnProperty("children")) {
            containerChildren = this._pictureContainer[property].children;
            this._iteratePicturesSub(containerChildren, callBackFund);
          }
        }.bind(this)
      );
    } else {
      this._iteratePicturesSub(containerChildren, callBackFund);
    }
  };

  Spriteset_Base.prototype._iteratePicturesSub = function (
    containerChildren,
    callBackFund
  ) {
    for (var i = containerChildren.length - 1; i >= 0; i--) {
      if (!callBackFund(containerChildren[i])) {
        break;
      }
    }
  };

  //=============================================================================
  // Sprite_Picture
  //  ピクチャのタッチ状態からのコモンイベント呼び出し予約を追加定義します。
  //=============================================================================
  var _Sprite_Picture_initialize = Sprite_Picture.prototype.initialize;
  Sprite_Picture.prototype.initialize = function (pictureId) {
    _Sprite_Picture_initialize.call(this, pictureId);
    this._triggerHandler = [];
    this._triggerHandler[1] = this.isTriggered;
    this._triggerHandler[2] = this.isCancelled;
    this._triggerHandler[3] = this.isLongPressed;
    this._triggerHandler[4] = this.isOnFocus;
    this._triggerHandler[5] = this.isOutFocus;
    this._triggerHandler[6] = this.isReleased;
    this._triggerHandler[7] = this.isRepeated;
    this._triggerHandler[8] = this.isPressed;
    this._triggerHandler[9] = this.isWheelTriggered;
    this._triggerHandler[10] = this.isDoubleTriggered;
    this._triggerHandler[11] = this.isMoved;
    this._triggerHandler[12] = this.isMovedAndPressed;
    this._onMouse = false;
    this._outMouse = false;
    this._wasOnMouse = false;
  };

  var _Sprite_update = Sprite_Picture.prototype.update;
  Sprite_Picture.prototype.update = function () {
    _Sprite_update.apply(this, arguments);
    this.updateTouch();
  };

  Sprite_Picture.prototype.updateTouch = function () {
    this.updateMouseMove();
    this.updateStroke();
    this.updatePointer();
  };

  Sprite_Picture.prototype.updateMouseMove = function () {
    if (this.isIncludePointer()) {
      if (!this._wasOnMouse) {
        this._onMouse = true;
        this._wasOnMouse = true;
      }
    } else if (this._wasOnMouse) {
      this._outMouse = true;
      this._wasOnMouse = false;
    }
  };

  Sprite_Picture.prototype.isIncludePointer = function () {
    return (
      this.isTouchable() && this.isTouchPosInRect() && !this.isTransparent()
    );
  };

  Sprite_Picture.prototype.updateStroke = function () {
    var strokeNum = $gameScreen.getPictureSid(this._pictureId);
    if (strokeNum > 0 && TouchInput.isPressed() && this.isIncludePointer()) {
      var value = $gameVariables.value(strokeNum);
      $gameVariables.setValue(strokeNum, value + TouchInput.pressedDistance);
    }
  };

  Sprite_Picture.prototype.updatePointer = function () {
    var strokeNum = $gameScreen.getPicturePid(this._pictureId);
    if (strokeNum > 0) {
      this.opacity = TouchInput.isPressed() ? 255 : 0;
      this.x = TouchInput.x;
      this.y = TouchInput.y;
      this.anchor.x = 0.5;
      this.anchor.y = 0.5;
    }
  };

  Sprite_Picture.prototype.callTouch = function () {
    var commandIds = $gameScreen.getPictureCid(this._pictureId);
    if (!commandIds || SceneManager.isNextScene(Scene_Battle)) {
      return;
    }
    for (var i = 0, n = this._triggerHandler.length; i < n; i++) {
      var handler = this._triggerHandler[i];
      if (
        handler &&
        commandIds[i] &&
        handler.call(this) &&
        (this.triggerIsFocus(i) || !this.isTransparent())
      ) {
        this.fireTouchEvent(commandIds, i);
      }
    }
  };

  Sprite_Picture.prototype.fireTouchEvent = function (commandIds, i) {
    if (this.isTouchSuppress()) {
      TouchInput.suppressEvents();
    }
    if (this.triggerIsLongPressed(i)) TouchInput._pressedTime = -60;
    if (this.triggerIsOnFocus(i)) this._onMouse = false;
    if (this.triggerIsOutFocus(i)) this._outMouse = false;
    $gameTemp.onTouchPicture(commandIds[i], this._pictureId);
  };

  Sprite_Picture.prototype.isTouchSuppress = function () {
    return paramSuppressTouchSwitch > 0
      ? $gameSwitches.value(paramSuppressTouchSwitch)
      : paramSuppressTouch;
  };

  Sprite_Picture.prototype.triggerIsLongPressed = function (triggerId) {
    return triggerId === 3;
  };

  Sprite_Picture.prototype.triggerIsOnFocus = function (triggerId) {
    return triggerId === 4;
  };

  Sprite_Picture.prototype.triggerIsOutFocus = function (triggerId) {
    return triggerId === 5;
  };

  Sprite_Picture.prototype.triggerIsFocus = function (triggerId) {
    return (
      this.triggerIsOnFocus(triggerId) || this.triggerIsOutFocus(triggerId)
    );
  };

  Sprite_Picture.prototype.isTransparent = function () {
    if (this.isTouchPosInFrameWindow()) return false;
    if (!this.isValidTransparent()) return false;
    if (this.opacity === 0) return true;
    var dx = this.getTouchScreenX() - this.x;
    var dy = this.getTouchScreenY() - this.y;
    var sin = Math.sin(-this.rotation);
    var cos = Math.cos(-this.rotation);
    var bx =
      Math.floor(dx * cos + dy * -sin) / this.scale.x +
      this.anchor.x * this.width;
    var by =
      Math.floor(dx * sin + dy * cos) / this.scale.y +
      this.anchor.y * this.height;
    return this.bitmap.getAlphaPixel(bx, by) === 0;
  };

  Sprite_Picture.prototype.isValidTransparent = function () {
    var transparent = $gameScreen.getPictureTransparent(this._pictureId);
    return transparent !== null ? transparent : paramTransparentConsideration;
  };

  Sprite_Picture.prototype.screenWidth = function () {
    return (this.width || 0) * this.scale.x;
  };

  Sprite_Picture.prototype.screenHeight = function () {
    return (this.height || 0) * this.scale.y;
  };

  Sprite_Picture.prototype.screenX = function () {
    return (this.x || 0) - this.anchor.x * this.screenWidth();
  };

  Sprite_Picture.prototype.screenY = function () {
    return (this.y || 0) - this.anchor.y * this.screenHeight();
  };

  Sprite_Picture.prototype.minX = function () {
    return Math.min(this.screenX(), this.screenX() + this.screenWidth());
  };

  Sprite_Picture.prototype.minY = function () {
    return Math.min(this.screenY(), this.screenY() + this.screenHeight());
  };

  Sprite_Picture.prototype.maxX = function () {
    return Math.max(this.screenX(), this.screenX() + this.screenWidth());
  };

  Sprite_Picture.prototype.maxY = function () {
    return Math.max(this.screenY(), this.screenY() + this.screenHeight());
  };

  Sprite_Picture.prototype.isTouchPosInRect = function () {
    if (this.isTouchPosInFrameWindow()) return true;
    var dx = this.getTouchScreenX() - this.x;
    var dy = this.getTouchScreenY() - this.y;
    var sin = Math.sin(-this.rotation);
    var cos = Math.cos(-this.rotation);
    var rx = this.x + Math.floor(dx * cos + dy * -sin);
    var ry = this.y + Math.floor(dx * sin + dy * cos);
    return (
      rx >= this.minX() &&
      rx <= this.maxX() &&
      ry >= this.minY() &&
      ry <= this.maxY()
    );
  };

  Sprite_Picture.prototype.isTouchPosInFrameWindow = function () {
    if (!this._frameWindow) return false;
    var frame = this._frameWindow;
    var x = this.getTouchScreenX();
    var y = this.getTouchScreenY();
    return (
      frame.x <= x &&
      frame.x + frame.width >= x &&
      frame.y <= y &&
      frame.y + frame.height >= y
    );
  };

  Sprite_Picture.prototype.isTouchable = function () {
    return (
      this.bitmap && this.visible && this.scale.x !== 0 && this.scale.y !== 0
    );
  };

  Sprite_Picture.prototype.isTriggered = function () {
    return this.isTouchEvent(TouchInput.isTriggered);
  };

  Sprite_Picture.prototype.isCancelled = function () {
    return this.isTouchEvent(TouchInput.isCancelled);
  };

  Sprite_Picture.prototype.isLongPressed = function () {
    return this.isTouchEvent(TouchInput.isLongPressed);
  };

  Sprite_Picture.prototype.isPressed = function () {
    return this.isTouchEvent(TouchInput.isPressed);
  };

  Sprite_Picture.prototype.isReleased = function () {
    return this.isTouchEvent(TouchInput.isReleased);
  };

  Sprite_Picture.prototype.isRepeated = function () {
    return this.isTouchEvent(TouchInput.isRepeated);
  };

  Sprite_Picture.prototype.isOnFocus = function () {
    return this._onMouse;
  };

  Sprite_Picture.prototype.isOutFocus = function () {
    return this._outMouse;
  };

  Sprite_Picture.prototype.isMoved = function () {
    return this.isTouchEvent(TouchInput.isMoved);
  };

  Sprite_Picture.prototype.isMovedAndPressed = function () {
    return this.isTouchEvent(TouchInput.isMoved) && TouchInput.isPressed();
  };

  Sprite_Picture.prototype.isWheelTriggered = function () {
    return this.isTouchEvent(TouchInput.isWheelTriggered);
  };

  Sprite_Picture.prototype.isDoubleTriggered = function () {
    return this.isTouchEvent(TouchInput.isDoubleTriggered);
  };

  Sprite_Picture.prototype.isTouchEvent = function (triggerFunc) {
    return (
      this.isTouchable() &&
      triggerFunc.call(TouchInput) &&
      this.isTouchPosInRect()
    );
  };

  Sprite_Picture.prototype.getTouchScreenX = function () {
    return $gameScreen.disConvertPositionX(TouchInput.x);
  };

  Sprite_Picture.prototype.getTouchScreenY = function () {
    return $gameScreen.disConvertPositionY(TouchInput.y);
  };

  Sprite_Picture.prototype.isIdEquals = function (pictureId) {
    return this._pictureId === pictureId;
  };

  //=============================================================================
  // Input
  //  ピクチャクリックをキー入力に紐付けます。
  //=============================================================================
  Input._bindKeyStateFrames = new Map();
  Input.bindKeyState = function (name) {
    this._currentState[name] = true;
    this._bindKeyStateFrames.set(name, 5);
  };

  var _Input_update = Input.update;
  Input.update = function () {
    _Input_update.apply(this, arguments);
    this._updateBindKeyState();
  };

  Input._updateBindKeyState = function () {
    this._bindKeyStateFrames.forEach(function (frame, keyName) {
      frame--;
      if (frame === 0 || !this._currentState[keyName]) {
        this._currentState[keyName] = false;
        this._bindKeyStateFrames.delete(keyName);
      } else {
        this._bindKeyStateFrames.set(keyName, frame);
      }
    }, this);
  };

  //=============================================================================
  // TouchInput
  //  ホイールクリック、ダブルクリック等を実装
  //=============================================================================
  TouchInput.keyDoubleClickInterval = 300;
  TouchInput._pressedDistance = 0;
  TouchInput._prevX = -1;
  TouchInput._prevY = -1;

  Object.defineProperty(TouchInput, "pressedDistance", {
    get: function () {
      return this._pressedDistance;
    },
    configurable: true,
  });

  TouchInput.suppressEvents = function () {
    this._triggered = false;
    this._cancelled = false;
    this._released = false;
    this._wheelTriggered = false;
    this._doubleTriggered = false;
  };

  TouchInput._onMouseMove = function (event) {
    var x = Graphics.pageToCanvasX(event.pageX);
    var y = Graphics.pageToCanvasY(event.pageY);
    this._onMove(x, y);
  };

  var _TouchInput_clear = TouchInput.clear;
  TouchInput.clear = function () {
    _TouchInput_clear.apply(this, arguments);
    this._events.wheelTriggered = false;
    this._events.doubleTriggered = false;
  };

  var _TouchInput_update = TouchInput.update;
  TouchInput.update = function () {
    _TouchInput_update.apply(this, arguments);
    this._wheelTriggered = this._events.wheelTriggered;
    this._doubleTriggered = this._events.doubleTriggered;
    this._events.wheelTriggered = false;
    this._events.doubleTriggered = false;
  };

  TouchInput.isWheelTriggered = function () {
    return this._wheelTriggered;
  };

  TouchInput.isDoubleTriggered = function () {
    return this._doubleTriggered;
  };

  var _TouchInput_onMiddleButtonDown = TouchInput._onMiddleButtonDown;
  TouchInput._onMiddleButtonDown = function (event) {
    _TouchInput_onMiddleButtonDown.apply(this, arguments);
    var x = Graphics.pageToCanvasX(event.pageX);
    var y = Graphics.pageToCanvasY(event.pageY);
    if (Graphics.isInsideCanvas(x, y)) {
      this._onWheelTrigger(x, y);
    }
  };

  TouchInput._onWheelTrigger = function (x, y) {
    this._events.wheelTriggered = true;
    this._x = x;
    this._y = y;
  };

  var _TouchInput_onTrigger = TouchInput._onTrigger;
  TouchInput._onTrigger = function (x, y) {
    if (this._date && Date.now() - this._date < this.keyDoubleClickInterval)
      this._events.doubleTriggered = true;
    this._pressedDistance = 0;
    this._prevX = x;
    this._prevY = y;
    _TouchInput_onTrigger.apply(this, arguments);
  };

  var _TouchInput_onMove = TouchInput._onMove;
  TouchInput._onMove = function (x, y) {
    if (this.isPressed())
      this._pressedDistance =
        Math.abs(this._prevX - x) + Math.abs(this._prevY - y);
    this._prevX = x;
    this._prevY = y;
    _TouchInput_onMove.apply(this, arguments);
  };

  var _TouchInput_onRelease = TouchInput._onRelease;
  TouchInput._onRelease = function (x, y) {
    this._pressedDistance = 0;
    this._prevX = x;
    this._prevY = y;
    _TouchInput_onRelease.apply(this, arguments);
  };
})();


code:
//=============================================================================
// PicturePriorityCustomize.js
// ----------------------------------------------------------------------------
// (C) 2017 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.2.1 2019/05/08 1.2.0の機能がYEP_BattleEngineCore.jsと併用すると無効になる競合を解消
// 1.2.0 2019/05/02 戦闘画面における下層ピクチャの表示優先度を微調整する機能を追加
// 1.1.3 2019/01/20 MenuCommonEvent.jsとの競合によるエラーを解消
// 1.1.2 2018/06/27 1.1.1の対応により発生したYEP_BattleEngineCore.jsとの競合を解消
// 1.1.1 2017/12/24 GALV_LayerGraphics.jsと併用したときに画像がちらつく競合を解消
// 1.1.0 2017/10/01 パラメータの型指定機能に対応
// 1.0.0 2017/03/20 初版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc PicturePriorityCustomizePlugin
 * @author triacontane
 *
 * @param UpperPictureId
 * @desc 指定した番号以上のピクチャはウィンドウより上に表示されるようになります。
 * @default 101
 * @type number
 *
 * @param LowerPictureId
 * @desc 指定した番号以下のピクチャはキャラクター、バトラーより下に表示されるようになります。
 * @default 0
 * @type number
 *
 * @param LowerPictureZ
 * @desc 下層ピクチャのZ座標です。変更することでより細かい表示優先度の調整ができます。
 * @default 1
 * @type select
 * @option 下層タイル
 * @value 0
 * @option 通常キャラの下
 * @value 1
 * @option 通常キャラと同じ
 * @value 3
 * @option 上層タイル
 * @value 4
 * @option 通常キャラの上
 * @value 5
 * @option 飛行船の影
 * @value 6
 * @option フキダシ
 * @value 7
 * @option マップタッチの行き先
 * @value 9
 *
 * @param LowerPictureBattleZ
 * @desc 戦闘画面の下層ピクチャのZ座標です。変更することでより細かい表示優先度の調整ができます。
 * @default 0
 * @type select
 * @option 敵キャラ
 * @value 0
 * @option アニメーション
 * @value 1
 *
 * @help ピクチャを上層、中層、下層に分けて表示できます。
 * 上層：ウィンドウより上
 * 中層：デフォルトの優先度
 * 下層：キャラクターより下
 *
 * 下層ピクチャに対しては、Z座標を設定することで
 * より細かい表示優先度の調整ができます。
 *
 * ※それぞれのプライオリティの値
 * 0 : 下層タイル
 * 1 : 通常キャラの下
 * 3 : 通常キャラと同じ
 * 4 : 上層タイル
 * 5 : 通常キャラの上
 * 6 : 飛行船の影
 * 7 : フキダシ
 * 8 : アニメーション
 * 9 : マップタッチの行き先（白く光るヤツ）
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * This plugin is released under the MIT License.
 */
/*:ja
 * @plugindesc ピクチャの表示優先度調整プラグイン
 * @author トリアコンタン
 *
 * @param 上層ピクチャ番号
 * @desc 指定した番号以上のピクチャはウィンドウより上に表示されるようになります。
 * @default 101
 * @type number
 *
 * @param 下層ピクチャ番号
 * @desc 指定した番号以下のピクチャはキャラクター、バトラーより下に表示されるようになります。
 * @default 0
 * @type number
 *
 * @param 下層ピクチャZ座標
 * @desc 下層ピクチャのZ座標です。変更することでより細かい表示優先度の調整ができます。
 * @default 1
 * @type select
 * @option 下層タイル
 * @value 0
 * @option 通常キャラの下
 * @value 1
 * @option 通常キャラと同じ
 * @value 3
 * @option 上層タイル
 * @value 4
 * @option 通常キャラの上
 * @value 5
 * @option 飛行船の影
 * @value 6
 * @option フキダシ
 * @value 7
 * @option マップタッチの行き先
 * @value 9
 *
 * @param 戦闘下層ピクチャZ座標
 * @desc 戦闘画面の下層ピクチャのZ座標です。変更することでより細かい表示優先度の調整ができます。
 * @default 0
 * @type select
 * @option 敵キャラ
 * @value 0
 * @option アニメーション
 * @value 1
 *
 * @help ピクチャを上層、中層、下層に分けて表示できます。
 * 上層：ウィンドウより上
 * 中層：デフォルトの優先度
 * 下層：キャラクターより下
 *
 * 下層ピクチャに対しては、Z座標を設定することで
 * より細かい表示優先度の調整ができます。
 *
 * ※それぞれのプライオリティの値
 * 0 : 下層タイル
 * 1 : 通常キャラの下
 * 3 : 通常キャラと同じ
 * 4 : 上層タイル
 * 5 : 通常キャラの上
 * 6 : 飛行船の影
 * 7 : フキダシ
 * 8 : アニメーション
 * 9 : マップタッチの行き先（白く光るヤツ）
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function () {
  "use strict";
  const pluginName = "PicturePriorityCustomize";

  //=============================================================================
  // ローカル関数
  //  プラグインパラメータやプラグインコマンドパラメータの整形やチェックをします
  //=============================================================================
  const getParamString = function (paramNames) {
    if (!Array.isArray(paramNames)) paramNames = [paramNames];
    for (let i = 0; i < paramNames.length; i++) {
      const name = PluginManager.parameters(pluginName)[paramNames[i]];
      if (name) return name;
    }
    return "";
  };

  const getParamNumber = function (paramNames, min, max) {
    const value = getParamString(paramNames);
    if (arguments.length < 2) min = -Infinity;
    if (arguments.length < 3) max = Infinity;
    return (parseInt(value) || 0).clamp(min, max);
  };

  //=============================================================================
  // パラメータの取得と整形
  //=============================================================================
  const param = {};
  param.upperPictureId = getParamNumber(["UpperPictureId", "上層ピクチャ番号"]);
  param.lowerPictureId = getParamNumber(["LowerPictureId", "下層ピクチャ番号"]);
  param.lowerPictureZ = getParamNumber(["LowerPictureZ", "下層ピクチャZ座標"]);
  param.lowerPictureBattleZ = getParamNumber(
    ["LowerPictureBattleZ", "戦闘下層ピクチャZ座標"],
    0
  );

  //=============================================================================
  // Scene_Base
  //  ウィンドウの上にピクチャを配置します。
  //=============================================================================
  var _Scene_Base_createWindowLayer = Scene_Base.prototype.createWindowLayer;
  Scene_Base.prototype.createWindowLayer = function () {
    _Scene_Base_createWindowLayer.apply(this, arguments);
    if (this._spriteset) {
      this._spriteset.setUpperPictureContainer(this);
    }
  };

  //=============================================================================
  // Spriteset_Base
  //  ピクチャを三層に分割します。
  //=============================================================================
  var _Spriteset_Base_createPictures = Spriteset_Base.prototype.createPictures;
  Spriteset_Base.prototype.createPictures = function () {
    _Spriteset_Base_createPictures.apply(this, arguments);
    this.removeChild(this._pictureContainer);
    this.createPictureLayer();
  };

  Spriteset_Base.prototype.createPictureLayer = function () {
    var width = Graphics.boxWidth;
    var height = Graphics.boxHeight;
    var x = (Graphics.width - width) / 2;
    var y = (Graphics.height - height) / 2;
    this._pictureContainerLower = new Sprite();
    this._pictureContainerLower.setFrame(x, y, width, height);
    this._pictureContainerMiddle = new Sprite();
    this._pictureContainerMiddle.setFrame(x, y, width, height);
    this._pictureContainerUpper = new Sprite();
    this._pictureContainerUpper.setFrame(x, y, width, height);
    var pictureArray = this._pictureContainer.children.clone();
    pictureArray.forEach(function (picture) {
      var pictureId = picture.getPictureId();
      if (pictureId <= param.lowerPictureId) {
        this._pictureContainerLower.addChild(picture);
      } else if (pictureId >= param.upperPictureId) {
        this._pictureContainerUpper.addChild(picture);
      } else {
        this._pictureContainerMiddle.addChild(picture);
      }
    }, this);
    this._pictureContainer.children = pictureArray;
    this.setLowerPictureContainer();
    this.setMiddlePictureContainer();
  };

  Spriteset_Base.prototype.setUpperPictureContainer = function (parentScene) {
    parentScene.addChild(this._pictureContainerUpper);
  };

  Spriteset_Base.prototype.setMiddlePictureContainer = function () {
    this.addChild(this._pictureContainerMiddle);
  };

  Spriteset_Base.prototype.setLowerPictureContainer = function () {
    this.addChild(this._pictureContainerLower);
  };

  //=============================================================================
  // Spriteset_Map
  //  下層ピクチャの位置を設定します。
  //=============================================================================
  Spriteset_Map.prototype.setLowerPictureContainer = function () {
    this._pictureContainerLower.z = param.lowerPictureZ;
    this._tilemap.addChild(this._pictureContainerLower);
  };

  //=============================================================================
  // Spriteset_Battle
  //  下層ピクチャの位置を設定します。
  //=============================================================================
  Spriteset_Battle.prototype.setLowerPictureContainer = function () {
    this.updateLowerPictureContainerZ();
    // resolve conflict for GALV_LayerGraphics.js
    if (typeof Imported !== "undefined" && Imported.Galv_LayerGraphics) {
      this._pictureContainerLower.z = 2;
    }
  };

  Spriteset_Battle.prototype.updateLowerPictureContainerZ = function () {
    var compare =
      param.lowerPictureBattleZ > 0
        ? this._enemySprites[this._enemySprites.length - 1]
        : this._back2Sprite;
    var index = this._battleField.getChildIndex(compare);
    this._battleField.addChildAt(this._pictureContainerLower, index + 1);
  };

  if (typeof Yanfly !== "undefined" && Yanfly.BEC) {
    var _Spriteset_Battle_update = Spriteset_Battle.prototype.update;
    Spriteset_Battle.prototype.update = function () {
      _Spriteset_Battle_update.apply(this, arguments);
      this.updateLowerPictureContainerZ();
    };
  }

  //=============================================================================
  // Sprite_Picture
  //  ピクチャIDを取得可能にします。
  //=============================================================================
  Sprite_Picture.prototype.getPictureId = function () {
    return this._pictureId;
  };
})();

repo_name: dazed/translations

license: unknown


code:
//
//  ポップアップメッセージ ver1.02
//
// ------------------------------------------------------
// Copyright (c) 2016 Yana
// Released under the MIT license
// http://opensource.org/licenses/mit-license.php
// ------------------------------------------------------
//
// author Yana
//

var Imported = Imported || {};
Imported["PopupMessage"] = 1.02;

if (!Imported.CommonPopupCore) {
  console.error("CommonPopupCoreを導入してください。");
}

/*:
 * @plugindesc ver1.02/メッセージの表示をポップアップに変更する制御文字_pum[delay,x,y,action]を追加します。
 * @author Yana
 *
 * @param Pop Message FontSize
 * @desc ポップアップメッセージのデフォルトフォントサイズです。
 * @default 28
 *
 * @param Pop Message Count
 * @desc ポップアップメッセージの表示時間です。
 * @default 120
 *
 * @param Popup Pattern
 * @desc ポップアップパターンの初期設定です。
 * @default Down
 *
 * @help プラグインコマンドはありません。
 *
 * メッセージの表示のメッセージの中に_pum[delay,x,y,action,pattern]と記述することで、
 * メッセージをポップアップに変更します。
 * delayはディレイ値で、この値フレーム分待ってから、ポップアップを行います。
 * xは表示位置のX座標です。未指定の場合は、0が設定されます。
 * yは表示位置のY座標です。未指定の場合は、画面高さ-ポップアップの高さが設定されます。
 * actionはアクション形式です。1を指定すると、上から下にアクションします。
 * patternは動作パターンです。Normalで今まで通り、GrowUpでにょき、Stretchでうにょーんとなります。
 * ------------------------------------------------------
 * 利用規約
 * ------------------------------------------------------
 * 当プラグインはMITライセンスで公開されています。
 * 使用に制限はありません。商用、アダルト、いずれにも使用できます。
 * 二次配布も制限はしませんが、サポートは行いません。
 * 著作表示は任意です。行わなくても利用できます。
 * 要するに、特に規約はありません。
 * バグ報告や使用方法等のお問合せはネ実ツクールスレ、または、Twitterにお願いします。
 * https://twitter.com/yanatsuki_
 * 素材利用は自己責任でお願いします。
 * ------------------------------------------------------
 * このプラグインには「汎用ポップアップベース」のプラグインが必要です。
 * 汎用ポップアップベースより下に配置してください。
 * ------------------------------------------------------
 * 更新履歴:
 * ver1.03:
 * 各パラメータに制御文字が使用できるように変更。
 * ポップアップパターンのプラグインパラメータを追加。
 * ver1.02:
 * 動作パターンの設定を追加。
 * ver1.01:
 * 表示位置を調整する機能を追加。
 * ver1.00:
 * 公開
 */

(function () {
  "use strict";

  var parameters = PluginManager.parameters("PopupMessage");
  var popMesFontSize = Number(parameters["Pop Message FontSize"] || 28);
  var popMesCount = Number(parameters["Pop Message Count"] || 120);
  var popMesSlide = Number(parameters["Pop Message Slide"] || 60);
  var popupPattern = parameters["Popup Pattern"] || 0;
  var popMesRegExp = /_PUM\[(.+)\]/gi;

  var _pMes_GInterpreter_pluginCommand =
    Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function (command, args) {
    _pMes_GInterpreter_pluginCommand.call(this, command, args);
    if (command === "PopupMessage") {
    }
  };

  var _pMes_GInterpreter_c101 = Game_Interpreter.prototype.command101;
  Game_Interpreter.prototype.command101 = function () {
    var texts = [];
    var pIndex = this._index;
    var param = { delay: null };
    while (this.nextEventCode() === 401) {
      this._index++;
      texts.push(this.currentCommand().parameters[0]);
    }
    var window = CommonPopupManager.window();
    for (var i = 0; i < texts.length; i++) {
      if (texts[i].match(popMesRegExp)) {
        var ary = [0, null, null, 0, popupPattern];
        var text = texts[i].replace(
          popMesRegExp,
          function () {
            var arg = arguments[1].split(",");
            ary[0] = Number(window.convertEscapeCharacters(arg[0]));
            if (arg[1]) ary[1] = Number(window.convertEscapeCharacters(arg[1]));
            if (arg[2]) ary[2] = Number(window.convertEscapeCharacters(arg[2]));
            if (arg[3]) ary[3] = Number(window.convertEscapeCharacters(arg[3]));
            if (arg[4]) ary[4] = arg[4];
            return "";
          }.bind(this)
        );
        texts[i] = text;
        CommonPopupManager.setPopupMessage(this._params, texts, ary);
        return true;
      }
    }
    this._index = pIndex;
    var result = _pMes_GInterpreter_c101.call(this);
    return result;
  };

  var _pMes_GMessage_add = Game_Message.prototype.add;
  Game_Message.prototype.add = function (text) {
    text = text.replace(popMesRegExp, "");
    _pMes_GMessage_add.call(this, text);
  };

  CommonPopupManager.setPopupMessage = function (params, texts, ary) {
    this._readyPopup = this._readyPopup || [];
    var bitmap = ImageManager.loadFace(params[0]);
    this.bltCheck(bitmap);
    this._readyPopup.push([params, texts, ary, "pMessage"]);
  };

  var _pMes_CPManager_makeBitmap = CommonPopupManager.makeBitmap;
  CommonPopupManager.makeBitmap = function (arg) {
    if (arg[3] === "pMessage") {
      return ImageManager.loadFace(arg[0][0]);
    } else {
      return _pMes_CPManager_makeBitmap.call(this, arg);
    }
  };

  var _pMes_CPManager_startPopup = CommonPopupManager.startPopup;
  CommonPopupManager.startPopup = function (arg) {
    if (arg[3] === "pMessage") {
      this.startPopupMessage(arg[0], arg[1], arg[2]);
    } else {
      _pMes_CPManager_startPopup.call(this, arg);
    }
  };

  CommonPopupManager.startPopupMessage = function (params, texts, arg) {
    var fontSize = popMesFontSize;
    var oneHeight = fontSize + 8;
    var height = params[0] ? 144 : oneHeight * texts.length;
    var bitmap = new Bitmap(Graphics.boxWidth, height);
    var faceSize = params[0] === "" ? 0 : 144;
    var delay = arg[0];
    var x = arg[1];
    var y = arg[2];
    var action = arg[3];
    var pattern = arg[4];
    bitmap.fillRect(0, 0, bitmap.width / 2, bitmap.height, "rgba(0,0,0,0.5)");
    bitmap.gradientFillRect(
      bitmap.width / 2,
      0,
      bitmap.width / 2,
      bitmap.height,
      "rgba(0,0,0,0.5)",
      "rgba(0,0,0,0)"
    );
    this.window().contents = bitmap;
    this.window().drawTextEx("\\FS[" + fontSize + "]", 0, 0);
    this.window().drawFace(params[0], params[1], 0, 0);
    var iFontSize = fontSize;
    for (var i = 0; i < texts.length; i++) {
      var text = "\\FS[" + iFontSize + "]" + texts[i];
      this.window().drawTextEx(text, 8 + faceSize, i * oneHeight);
      iFontSize = this.window().contents.fontSize;
    }
    var arg = this.setPopup([]);
    arg.bitmap = bitmap;
    if (pattern === "GrowUp") {
      arg.x = 0;
      arg.y = Graphics.boxHeight;
      arg.moveX = 0;
      arg.anchorX = 0;
      arg.anchorY = 1.0;
      arg.pattern = -2;
    } else if (pattern === "Stretch") {
      arg.x = 0;
      arg.y = Graphics.boxHeight - height;
      arg.moveX = 0;
      arg.anchorX = 0;
      arg.anchorY = 0;
      arg.pattern = -1;
    } else {
      arg.x = Graphics.boxWidth * -1;
      arg.y = Graphics.boxHeight - height;
      arg.moveX = Graphics.boxWidth;
      arg.anchorX = 0;
      arg.anchorY = 0;
    }
    if (x) {
      arg.x += x;
    }
    if (y) {
      arg.y = y;
    }
    if ($gameParty.inBattle()) {
      arg.y = Math.min(Graphics.boxHeight - 180, arg.y);
    }
    arg.moveY = 0;
    arg.count = popMesCount;
    arg.fixed = false;
    arg.slideCount = popMesSlide;
    if (action === 1) {
      arg.slideAction = "Down";
    }
    arg.delay = delay;
    this._tempCommonSprites.setNullPos(arg);
  };
})();


code:
//=============================================================================
// ProfileExtend.js
// ----------------------------------------------------------------------------
// Copyright (c) 2015 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.1.1 2017/02/07 端末依存の記述を削除
// 1.1.0 2017/01/13 プロフィールを途中で変更できるプラグインコマンドを追加
// 1.0.0 2016/05/03 初版
// ----------------------------------------------------------------------------
// [Blog]   : http://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc プロフィール拡張プラグイン
 * @author トリアコンタン
 *
 * @param 拡張行数
 * @desc プロフィール入力欄を拡張する行数です。
 * @default 0
 *
 * @help ステータス画面のプロフィール入力欄を拡張します。
 * 通常だとステータスと装備品表示欄と被ってしまうので注意してください。
 *
 * また、データベースのプロフィール入力欄には2行までしか入力できないので
 * アクターのメモ欄に以下の通り入力してください。
 *
 * <PE拡張:テスト> //「テスト」が3行目に表示されます。
 *
 * プラグインコマンド詳細
 *  イベントコマンド「プラグインコマンド」から実行。
 *  （パラメータの間は半角スペースで区切る）
 *
 * ・ID[1]のアクターの拡張プロフィールをゲーム途中で変更します。
 * PE_拡張プロフィール設定 1 プロフィール内容
 * PE_SET_EXTEND_PROFILE 1 プロフィール内容
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function () {
  "use strict";
  var pluginName = "ProfileExtend";
  var metaTagPrefix = "PE";

  var getParamNumber = function (paramNames, min, max) {
    var value = getParamOther(paramNames);
    if (arguments.length < 2) min = -Infinity;
    if (arguments.length < 3) max = Infinity;
    return (parseInt(value, 10) || 0).clamp(min, max);
  };

  var getParamOther = function (paramNames) {
    if (!Array.isArray(paramNames)) paramNames = [paramNames];
    for (var i = 0; i < paramNames.length; i++) {
      var name = PluginManager.parameters(pluginName)[paramNames[i]];
      if (name) return name;
    }
    return null;
  };

  var getArgNumber = function (arg, min, max) {
    if (arguments.length < 2) min = -Infinity;
    if (arguments.length < 3) max = Infinity;
    return (parseInt(arg) || 0).clamp(min, max);
  };

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

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

  var convertAllArguments = function (args) {
    for (var i = 0; i < args.length; i++) {
      args[i] = convertEscapeCharacters(args[i]);
    }
    return args;
  };

  //=============================================================================
  // パラメータの取得と整形
  //=============================================================================
  var paramExtendLine = getParamNumber(["ExtendLine", "拡張行数"], 0);

  var setPluginCommand = function (commandName, methodName) {
    pluginCommandMap.set(metaTagPrefix + commandName, methodName);
  };

  var pluginCommandMap = new Map();
  setPluginCommand("_拡張プロフィール設定", "setExtendProfile");
  setPluginCommand("_SET_EXTEND_PROFILE", "setExtendProfile");

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

  Game_Interpreter.prototype.setExtendProfile = function (args) {
    var actor = $gameActors.actor(getArgNumber(args[0], 1));
    if (actor) actor.setExtendProfile(args[1]);
  };

  //=============================================================================
  // Game_Actor
  //  プロフィールの内容を拡張します。
  //=============================================================================
  var _Game_Actor_profile = Game_Actor.prototype.profile;
  Game_Actor.prototype.profile = function () {
    var profile = _Game_Actor_profile.apply(this, arguments);
    var extend = this.getExtendProfile();
    return profile + (extend ? "\n" + extend : "");
  };

  Game_Actor.prototype.getExtendProfile = function () {
    if (!this._extendProfile) {
      this._extendProfile = getMetaValue(this.actor(), "拡張");
    }
    return this._extendProfile;
  };

  Game_Actor.prototype.setExtendProfile = function (value) {
    this._extendProfile = value;
  };

  //=============================================================================
  // Window_Status
  //  プロフィールの入力欄を拡張します。
  //=============================================================================
  var _Window_Status_drawHorzLine = Window_Status.prototype.drawHorzLine;
  Window_Status.prototype.drawHorzLine = function (y) {
    if (this.lineHeight() * 13 === y) {
      arguments[0] -= this.lineHeight() * paramExtendLine;
    }
    _Window_Status_drawHorzLine.apply(this, arguments);
  };

  var _Window_Status_drawBlock4 = Window_Status.prototype.drawBlock4;
  Window_Status.prototype.drawBlock4 = function (y) {
    arguments[0] -= this.lineHeight() * paramExtendLine;
    _Window_Status_drawBlock4.apply(this, arguments);
  };
})();


code:
// Generated by CoffeeScript 1.10.0

/*:
 * @plugindesc Queue製スクリプト用 汎用ライブラリ
 * @author queue
 *
 * @help
 * 他のQueue製スクリプトの前にインポートしてください。
 */

(function () {
  this.Imported = this.Imported || {};

  this.Imported.Queue_Lib = true;

  this.QueueLib = {};

  Window_Base.prototype.obtainEscapeStringParam = function (textState) {
    var arr;
    arr = /^\[[^\]]+\]/.exec(textState.text.slice(textState.index));
    if (arr) {
      textState.index += arr[0].length;
      return arr[0].slice(1).slice(0, -1);
    } else {
      return "";
    }
  };

  this.QueueLib.parseNumberTag = function (key, text, def) {
    if (def == null) {
      def = 0.0;
    }
    if (text.match(RegExp("<" + key + ":([+-]?[\\d.]+)>"))) {
      return Number(RegExp.$1);
    } else {
      return def;
    }
  };

  this.QueueLib.parseStringTag = function (key, text) {
    if (text.match(RegExp("<" + key + ">([\\s\\S]*?)</" + key + ">"))) {
      return RegExp.$1.substring(1);
    } else {
      return "";
    }
  };

  this.QueueLib.calcTotalExEffect = function (keyName) {
    var actor, i, id, item, j, len, len1, notes, num, ref, ref1, stateId, total;
    notes = [1.0];
    notes.push(
      (function () {
        var ref, results;
        ref = $gameParty._items;
        results = [];
        for (id in ref) {
          num = ref[id];
          results.push(
            QueueLib.parseNumberTag(keyName, $dataItems[id].note, 1.0)
          );
        }
        return results;
      })()
    );
    ref = $gameParty.members();
    for (i = 0, len = ref.length; i < len; i++) {
      actor = ref[i];
      notes.push(
        (function () {
          var j, len1, ref1, results;
          ref1 = actor.equips();
          results = [];
          for (j = 0, len1 = ref1.length; j < len1; j++) {
            item = ref1[j];
            if (item != null) {
              results.push(QueueLib.parseNumberTag(keyName, item.note, 1.0));
            }
          }
          return results;
        })()
      );
    }
    ref1 = $gameParty.members();
    for (j = 0, len1 = ref1.length; j < len1; j++) {
      actor = ref1[j];
      notes.push(
        (function () {
          var k, len2, ref2, results;
          ref2 = actor._states;
          results = [];
          for (k = 0, len2 = ref2.length; k < len2; k++) {
            stateId = ref2[k];
            results.push(
              QueueLib.parseNumberTag(keyName, $dataStates[stateId].note, 1.0)
            );
          }
          return results;
        })()
      );
    }
    notes = Array.prototype.concat.apply([], notes);
    total = notes.reduce(function (t, s) {
      return t * s;
    });
    return total;
  };
}).call(this);


code:
//=============================================================================
// SealActorCommand.js
// ----------------------------------------------------------------------------
// Copyright (c) 2015-2017 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.4.0 2018/12/22 禁止コマンドの上に文字を被せられる機能を追加
// 1.3.0 2018/12/17 封印したコマンドを非表示ではなく使用禁止にできる機能を追加
// 1.2.0 2017/03/08 アイテム使用をスキルのひとつとして作成できる機能を追加
// 1.1.0 2017/02/23 封印対象にスキルを追加
// 1.0.0 2017/02/22 初版
// ----------------------------------------------------------------------------
// [Blog]   : http://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc SealActorCommandPlugin
 * @author triacontane
 *
 * @param commandDisable
 * @desc 封印したコマンドを非表示ではなく使用禁止にします。
 * @default false
 * @type boolean
 *
 * @param disableSign
 * @desc 使用禁止にしたコマンドのうえに被せる文字列です。(コマンド使用禁止が有効な場合のみ機能します)
 * @default \i[1]\i[1]\i[1]
 *
 * @help アクターコマンド「攻撃」「防御」「アイテム」「スキル」を封印できます。
 * 封印されたコマンドはウィンドウから消失します。
 * 特定のコマンドが使用できないアクター、職業、装備品、ステートが作成できます。
 * さらに、スイッチやJavaScript計算式により、細かい条件が指定できます。
 *
 * 特徴を有するデータベースのメモ欄に以下の通り記入してください。
 *
 * <SAC攻撃封印スイッチ:4>   # ID[4]のスイッチがONのとき攻撃を封印
 * <SACAttackSwitch:4>       # 同上
 * <SAC防御封印スイッチ:5>   # ID[5]のスイッチがONのとき防御を封印
 * <SACGuardSwitch:5>        # 同上
 * <SAC道具封印スイッチ:6>   # ID[6]のスイッチがONのときアイテムを封印
 * <SACItemSwitch:6>         # 同上
 * <SACスキル封印スイッチ:7> # ID[7]のスイッチがONのときスキルを封印
 * <SACSkillSwitch:7>        # 同上
 * <SAC攻撃封印計算式:f>     # 計算式[f]の結果がtrueのとき攻撃を封印
 * <SACAttackFormula:f>      # 同上
 * <SAC防御封印計算式:f>     # 計算式[f]の結果がtrueのとき防御を封印
 * <SACGuardFormula:f>       # 同上
 * <SAC道具封印計算式:f>     # 計算式[f]の結果がtrueのときアイテムを封印
 * <SACItemFormula:f>        # 同上
 * <SACスキル封印計算式:f>   # 計算式[f]の結果がtrueのときスキルを封印
 * <SACSkillFormula:f>       # 同上
 *
 * 文章、スクリプト中で不等号を使いたい場合、以下のように記述してください。
 * < → <
 * > → >
 * 例
 * <SACAttackFormula:\v[1] >= 5> # 変数[1]が5以下の場合攻撃封印
 * <SACGuardFormula:true>           # 常に防御封印
 *
 * 注意！
 * 全てのコマンドを封印するとゲームが続行不可になります。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * This plugin is released under the MIT License.
 */
/*:ja
 * @plugindesc アクターコマンド封印プラグイン
 * @author トリアコンタン
 *
 * @param commandDisable
 * @text コマンド使用禁止
 * @desc 封印したコマンドを非表示ではなく使用禁止にします。
 * @default false
 * @type boolean
 *
 * @param disableSign
 * @text 使用禁止サイン
 * @desc 使用禁止にしたコマンドのうえに被せる文字列です。(コマンド使用禁止が有効な場合のみ機能します)
 * @default \c[2]\i[1]禁止\i[1]
 *
 * @help アクターコマンド「攻撃」「防御」「アイテム」「スキル」を封印できます。
 * 封印されたコマンドはウィンドウから消失します。
 * 特定のコマンドが使用できないアクター、職業、装備品、ステートが作成できます。
 * さらに、スイッチやJavaScript計算式により、細かい条件が指定できます。
 *
 * 特徴を有するデータベースのメモ欄に以下の通り記入してください。
 *
 * <SAC攻撃封印スイッチ:4>   # ID[4]のスイッチがONのとき攻撃を封印
 * <SACAttackSwitch:4>       # 同上
 * <SAC防御封印スイッチ:5>   # ID[5]のスイッチがONのとき防御を封印
 * <SACGuardSwitch:5>        # 同上
 * <SAC道具封印スイッチ:6>   # ID[6]のスイッチがONのときアイテムを封印
 * <SACItemSwitch:6>         # 同上
 * <SACスキル封印スイッチ:7> # ID[7]のスイッチがONのときスキルを封印
 * <SACSkillSwitch:7>        # 同上
 * <SAC攻撃封印計算式:f>     # 計算式[f]の結果がtrueのとき攻撃を封印
 * <SACAttackFormula:f>      # 同上
 * <SAC防御封印計算式:f>     # 計算式[f]の結果がtrueのとき防御を封印
 * <SACGuardFormula:f>       # 同上
 * <SAC道具封印計算式:f>     # 計算式[f]の結果がtrueのときアイテムを封印
 * <SACItemFormula:f>        # 同上
 * <SACスキル封印計算式:f>   # 計算式[f]の結果がtrueのときスキルを封印
 * <SACSkillFormula:f>       # 同上
 *
 * 文章、スクリプト中で不等号を使いたい場合、以下のように記述してください。
 * < → <
 * > → >
 * 例
 * <SACAttackFormula:\v[1] >= 5> # 変数[1]が5以下の場合攻撃封印
 * <SACGuardFormula:true>           # 常に防御封印
 *
 * 注意！
 * 全てのコマンドを封印するとゲームが続行不可になります。
 *
 * アイテム使用をスキル化したい場合は、スキルのメモ欄に以下の通り
 * 入力してください。対象スキルを選択後、アイテムウィンドウが開きます。
 * <SACアイテムスキル> # アイテム使用スキル化
 * <SACItemSkill>      # 同上
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function () {
  "use strict";
  var metaTagPrefix = "SAC";

  var getArgNumber = function (arg, min, max) {
    if (arguments.length < 2) min = -Infinity;
    if (arguments.length < 3) max = Infinity;
    return (parseInt(arg) || 0).clamp(min, max);
  };

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

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

  var convertEscapeCharacters = function (text) {
    if (text === true) return text;
    if (text == null) text = "";
    text = text.replace(/>?/gi, ">");
    text = text.replace(/<?/gi, "<");
    var windowLayer = SceneManager._scene._windowLayer;
    return windowLayer
      ? windowLayer.children[0].convertEscapeCharacters(text)
      : text;
  };

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

  //=============================================================================
  // Game_Actor
  //  コマンド封印が有効かどうかを判定します。
  //=============================================================================
  Game_Actor.prototype.getSealMetaInfo = function (names) {
    var metaValue = null;
    this.traitObjects().some(function (traitObject) {
      metaValue = getMetaValues(traitObject, names);
      return metaValue;
    });
    return metaValue;
  };

  Game_Actor.prototype.isSealCommand = function (commandNames) {
    var switchId = this.getSealMetaInfo([
      commandNames[0] + "Switch",
      commandNames[1] + "封印スイッチ",
    ]);
    if (switchId && $gameSwitches.value(getArgNumber(switchId))) {
      return true;
    }
    var formula = this.getSealMetaInfo([
      commandNames[0] + "Formula",
      commandNames[1] + "封印計算式",
    ]);
    return formula && eval(formula);
  };

  Game_Actor.prototype.isSealCommandAttack = function () {
    return this.isSealCommand(["Attack", "攻撃"]);
  };

  Game_Actor.prototype.isSealCommandGuard = function () {
    return this.isSealCommand(["Guard", "防御"]);
  };

  Game_Actor.prototype.isSealCommandItem = function () {
    return this.isSealCommand(["Item", "道具"]);
  };

  Game_Actor.prototype.isSealCommandSkill = function () {
    return this.isSealCommand(["Skill", "スキル"]);
  };

  //=============================================================================
  // Window_ActorCommand
  //  コマンドが封印されていた場合、処理を終了します。
  //=============================================================================
  var _Window_ActorCommand_addAttackCommand =
    Window_ActorCommand.prototype.addAttackCommand;
  Window_ActorCommand.prototype.addAttackCommand = function () {
    if (this._actor.isSealCommandAttack()) {
      if (param.commandDisable) {
        _Window_ActorCommand_addAttackCommand.apply(this, arguments);
        this.disableCommand("attack");
      }
      return;
    }
    _Window_ActorCommand_addAttackCommand.apply(this, arguments);
  };

  var _Window_ActorCommand_addGuardCommand =
    Window_ActorCommand.prototype.addGuardCommand;
  Window_ActorCommand.prototype.addGuardCommand = function () {
    if (this._actor.isSealCommandGuard()) {
      if (param.commandDisable) {
        _Window_ActorCommand_addGuardCommand.apply(this, arguments);
        this.disableCommand("guard");
      }
      return;
    }
    _Window_ActorCommand_addGuardCommand.apply(this, arguments);
  };

  var _Window_ActorCommand_addItemCommand =
    Window_ActorCommand.prototype.addItemCommand;
  Window_ActorCommand.prototype.addItemCommand = function () {
    if (this._actor.isSealCommandItem()) {
      if (param.commandDisable) {
        _Window_ActorCommand_addItemCommand.apply(this, arguments);
        this.disableCommand("item");
      }
      return;
    }
    _Window_ActorCommand_addItemCommand.apply(this, arguments);
  };

  var _Window_ActorCommand_addSkillCommands =
    Window_ActorCommand.prototype.addSkillCommands;
  Window_ActorCommand.prototype.addSkillCommands = function () {
    if (this._actor.isSealCommandSkill()) {
      if (param.commandDisable) {
        _Window_ActorCommand_addSkillCommands.apply(this, arguments);
        this.disableCommand("skill");
      }
      return;
    }
    _Window_ActorCommand_addSkillCommands.apply(this, arguments);
  };

  Window_ActorCommand.prototype.disableCommand = function (symbol) {
    this._list.forEach(function (command) {
      if (command.symbol === symbol) {
        command.enabled = false;
      }
    });
  };

  var _Window_ActorCommand_drawItem = Window_ActorCommand.prototype.drawItem;
  Window_ActorCommand.prototype.drawItem = function (index) {
    _Window_ActorCommand_drawItem.apply(this, arguments);
    var sign = param.disableSign;
    if (!this.isCommandEnabled(index) && sign) {
      var rect = this.itemRectForText(index);
      var width = this.drawTextEx(sign, this.windowWidth(), 0);
      var height = this.calcTextHeight({ text: sign }, false);
      this.resetFontSettings();
      this.resetTextColor();
      this.changePaintOpacity(true);
      this.drawTextEx(
        sign,
        rect.x + rect.width / 2 - width / 2,
        rect.y + rect.height / 2 - height / 2
      );
      this.resetFontSettings();
      this.resetTextColor();
      this.changePaintOpacity(false);
    }
  };

  //=============================================================================
  // Scene_Battle
  //  アイテムスキルを作成します。
  //=============================================================================
  var _Scene_Battle_onItemCancel = Scene_Battle.prototype.onItemCancel;
  Scene_Battle.prototype.onItemCancel = function () {
    if (this._selectItemSkill) {
      this._itemWindow.hide();
      this._skillWindow.show();
      this._skillWindow.activate();
      this._selectItemSkill = false;
    } else {
      _Scene_Battle_onItemCancel.apply(this, arguments);
    }
  };

  var _Scene_Battle_onSkillOk = Scene_Battle.prototype.onSkillOk;
  Scene_Battle.prototype.onSkillOk = function () {
    var skill = this._skillWindow.item();
    if (getMetaValues(skill, ["アイテムスキル", "ItemSkill"])) {
      var action = BattleManager.inputtingAction();
      action.setSkill(skill.id);
      BattleManager.actor().setLastBattleSkill(skill);
      this._skillWindow.hide();
      this.commandItem();
      this._selectItemSkill = true;
    } else {
      _Scene_Battle_onSkillOk.apply(this, arguments);
    }
  };

  var _Scene_Battle_onActorCancel = Scene_Battle.prototype.onActorCancel;
  Scene_Battle.prototype.onActorCancel = function () {
    if (this._selectItemSkill) {
      this._actorWindow.hide();
      this._itemWindow.show();
      this._itemWindow.activate();
    } else {
      _Scene_Battle_onActorCancel.apply(this, arguments);
    }
  };

  var _Scene_Battle_onEnemyCancel = Scene_Battle.prototype.onEnemyCancel;
  Scene_Battle.prototype.onEnemyCancel = function () {
    if (this._selectItemSkill) {
      this._enemyWindow.hide();
      this._itemWindow.show();
      this._itemWindow.activate();
    } else {
      _Scene_Battle_onEnemyCancel.apply(this, arguments);
    }
  };

  var _Scene_Battle_selectNextCommand =
    Scene_Battle.prototype.selectNextCommand;
  Scene_Battle.prototype.selectNextCommand = function () {
    _Scene_Battle_selectNextCommand.apply(this, arguments);
    this._selectItemSkill = false;
  };
})();


code:
//=============================================================================
// SelfSwitchTemporary.js
// ----------------------------------------------------------------------------
// (C)2017 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 2.0.0 2020/12/25 解除タイミングをプラグインコマンドで決められる機能を追加
//                  メモ欄の設定なしで必ず解除されるセルフスイッチを指定できる機能を追加
// 1.0.1 2018/03/16 セルフスイッチが切り替わった際、イベントページが切り替わらない問題を修正
// 1.0.0 2017/04/26 初版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc SelfSwitchTemporary
 * @author triacontane
 *
 * @param clearTransfer
 * @desc The self-switch is automatically released when the location is moved.
 * @default true
 * @type boolean
 *
 * @param defaultTemporary
 * @desc  A self-switch that is treated as a temporary self-switch even if it is not specified in the memo field.
 * @default []
 * @type select[]
 * @option A
 * @option B
 * @option C
 * @option D
 *
 * @help You can define a temporary self-switch that will be
 * automatically released.
 * Please fill in the memo field of the event as follows
 *
 * <SST_Switch:A,B>   # Release A,B
 * <SST_Switch>       # Release All
 *
 * It will be automatically deactivated when the
 * following plug-in command is executed.
 *
 * CLEAR_TEMPORARY_SELF_SWITCH
 *
 * This plugin is released under the MIT License.
 */
/*:ja
 * @plugindesc 一時セルフスイッチプラグイン
 * @author トリアコンタン
 *
 * @param clearTransfer
 * @text 場所移動時に自動解除
 * @desc 場所移動したときにセルフスイッチを自動で解除します。
 * @default true
 * @type boolean
 *
 * @param defaultTemporary
 * @text デフォルト一時スイッチ
 * @desc メモ欄に指定がなくても一時セルフスイッチとして扱うセルフスイッチです。全イベントに適用されるので注意してください。
 * @default []
 * @type select[]
 * @option A
 * @option B
 * @option C
 * @option D
 *
 * @help 自動で解除される一時的なセルフスイッチを定義できます。
 * イベントのメモ欄に以下の通り記入してください。
 *
 * <SST_スイッチ:A,B> # セルフスイッチ「A」「B」を自動解除
 * <SST_Switch:A,B>   # 同上
 * <SST_スイッチ>     # セルフスイッチを全て自動解除
 * <SST_Switch>       # 同上
 *
 * 以下のプラグインコマンドを実行したタイミングで自動解除されます。
 *
 * 一時セルフスイッチ解除
 * CLEAR_TEMPORARY_SELF_SWITCH
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function () {
  "use strict";
  var metaTagPrefix = "SST_";

  //=============================================================================
  // ローカル関数
  //  プラグインパラメータやプラグインコマンドパラメータの整形やチェックをします
  //=============================================================================
  var getMetaValue = function (object, name) {
    var metaTagName = metaTagPrefix + name;
    return object.meta.hasOwnProperty(metaTagName)
      ? convertEscapeCharacters(object.meta[metaTagName])
      : undefined;
  };

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

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

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

  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("SelfSwitchTemporary");

  /**
   * Game_Interpreter
   * プラグインコマンドを追加定義します。
   */
  var _Game_Interpreter_pluginCommand =
    Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function (command, args) {
    _Game_Interpreter_pluginCommand.apply(this, arguments);
    if (
      command === "CLEAR_TEMPORARY_SELF_SWITCH" ||
      command === "一時セルフスイッチ解除"
    ) {
      $gameSelfSwitches.clearTemporary();
    }
  };

  /**
   * Game_SelfSwitches
   */
  Game_SelfSwitches.prototype.appendTemporary = function (
    mapId,
    eventId,
    type
  ) {
    if (!this._temporaryList) {
      this._temporaryList = {};
    }
    this._temporaryList[[mapId, eventId, type]] = true;
  };

  Game_SelfSwitches.prototype.clearTemporary = function () {
    if (!this._temporaryList) {
      return;
    }
    Object.keys(this._temporaryList).forEach(function (key) {
      this.setValue(key, false);
    }, this);
  };

  /**
   * Game_Map
   */
  var _Game_Map_setupEvents = Game_Map.prototype.setupEvents;
  Game_Map.prototype.setupEvents = function () {
    if (param.clearTransfer) {
      $gameSelfSwitches.clearTemporary();
    }
    _Game_Map_setupEvents.apply(this, arguments);
    this.events().forEach(function (event) {
      event.addTemporarySelfSwitch();
    });
  };

  /**
   * Game_Event
   */
  Game_Event.prototype.addTemporarySelfSwitch = function () {
    var switchList = this.findTemporarySelfSwitch();
    if (!switchList) {
      return;
    }
    switchList.forEach(function (type) {
      $gameSelfSwitches.appendTemporary(
        $gameMap.mapId(),
        this.eventId(),
        type.toUpperCase()
      );
    }, this);
  };

  Game_Event.prototype.findTemporarySelfSwitch = function () {
    var metaValue = getMetaValues(this.event(), ["Switch", "スイッチ"]);
    if (!metaValue) {
      return null;
    }
    var list =
      metaValue === true ? ["A", "B", "C", "D"] : getArgArrayString(metaValue);
    return param.defaultTemporary ? list.concat(param.defaultTemporary) : list;
  };
})();


code:
//=============================================================================
// SetActorHome.js
//=============================================================================

/*:
 * @plugindesc サイドビューバトルでアクターを表示する位置を設定します。
 * @author こま
 *
 * @param Default Home X
 * @desc アクターを表示するX座標の計算式の初期設定
 * @default 600 + index * 32
 *
 * @param Default Home Y
 * @desc アクターを表示するY座標の計算式の初期設定
 * @default 280 + index * 48
 *
 * @help
 * プラグインコマンド：
 *   SetActorHomeX 式        # アクターを表示するX座標の計算式を設定します。
 *   SetActorHomeY 式        # アクターを表示するY座標の計算式を設定します。
 *
 * プラグインコマンド例：
 *   SetActorHomeX 600 + index * 32
 *   : 式中にindexというワードを使用すると、何番目のアクターかを示す数値に置き換え
 *   : られます。先頭のアクターを「0番目」とし、以降は+1ずつとなります。
 *
 * プラグインコマンド例（応用編）：
 *   SetActorHomeX (index == 0) ? 100 : 200
 *   : 「indexが0の場合、100。それ以外の場合、200」
 *
 *   SetActorHomeX (index == 0 || index == 1) ? 100 : 200
 *   : 「indexが0か1の場合、100。それ以外の場合、200」
 *
 *   SetActorHomeX (index == 0) ? 100 : (index == 1) ? 200 : 300
 *   : 「indexが0の場合、100。indexが1の場合、200。それ以外の場合、300」
 *
 * [ 利用規約 ] ...................................................................
 *  本プラグインの利用者は、RPGツクールMV/RPGMakerMVの正規ユーザーに限られます。
 *  商用、非商用、ゲームの内容（年齢制限など）を問わず利用可能です。
 *  ゲームへの利用の際、報告や出典元の記載等は必須ではありません。
 *  二次配布や転載、ソースコードURLやダウンロードURLへの直接リンクは禁止します。
 *  （プラグインを利用したゲームに同梱する形での結果的な配布はOKです）
 *  不具合対応以外のサポートやリクエストは受け付けておりません。
 *  本プラグインにより生じたいかなる問題においても、一切の責任を負いかねます。
 * [ 改訂履歴 ] ...................................................................
 *   Version 1.02  2016/05/05  リファクタリング
 *   Version 1.01  2016/02/20  プラグインコマンドによる設定変更を追加
 *   Version 1.00  2016/01/31  初版
 * -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 *  Web Site: http://i.gmobb.jp/nekoma/rpg_tkool/
 *  Twitter : https://twitter.com/koma_neko
 */

(function () {
  var _PLUGIN = "SetActorHome";
  var _PARAMETERS = PluginManager.parameters(_PLUGIN);

  var _DEFAULT_HOME_X = _PARAMETERS["Default Home X"];
  var _DEFAULT_HOME_Y = _PARAMETERS["Default Home Y"];

  function _p(o) {
    return (o[_PLUGIN] = o[_PLUGIN] || {});
  }

  var _alias_Sprite_Actor_setActorHome = Sprite_Actor.prototype.setActorHome;
  Sprite_Actor.prototype.setActorHome = function (index) {
    _alias_Sprite_Actor_setActorHome.call(this, index);
    var homeX = _p($gameSystem).x ? _p($gameSystem).x : _DEFAULT_HOME_X;
    var homeY = _p($gameSystem).y ? _p($gameSystem).y : _DEFAULT_HOME_Y;
    this.setHome(eval(homeX), eval(homeY));
  };

  var _alias_Game_Interpreter_pluginCommand =
    Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function (command, args) {
    _alias_Game_Interpreter_pluginCommand.call(this, command, args);
    switch (command) {
      case "SetActorHomeX":
        _p($gameSystem).x = args.join(" ");
        break;
      case "SetActorHomeY":
        _p($gameSystem).y = args.join(" ");
        break;
    }
  };
})();


code:
//=============================================================================
// SimpleMsgSideView.js
//=============================================================================

/*:
 * @plugindesc at sideview battle, only display item/skill names.
 * @author Sasuke KANNAZUKI
 *
 * @param displayAttack
 * @desc Whether to display normal attack. 1:yes 0:no
 * @default 0
 *
 * @param position
 * @desc Skill name display position. 0:left, 1:center
 * @default 1
 *
 * @help This plugin does not provide plugin commands.
 *
 * By not displaying the log and only displaying the skill name,
 * the speed of battle will increase slightly.
 */

/*:ja
 * @plugindesc サイドビューバトルで技/アイテムの名前のみ表示します。
 * @author 神無月サスケ
 *
 * @param displayAttack
 * @desc 通常攻撃も表示するか (1:する 0:しない)
 * @default 0
 *
 * @param position
 * @desc 技名を表示する位置 (0:左寄せ, 1:中央)
 * @default 1
 *
 * @help このプラグインには、プラグインコマンドはありません。
 *
 * ログを表示せず、技名のみを表示することで、戦闘のテンポが若干高速になります。
 */

(function () {
  var parameters = PluginManager.parameters("SimpleMsgSideView");
  var displayAttack = Number(parameters["displayAttack"]) != 0;
  var position = Number(parameters["position"] || 1);

  var _Window_BattleLog_addText = Window_BattleLog.prototype.addText;
  Window_BattleLog.prototype.addText = function (text) {
    if ($gameSystem.isSideView()) {
      this.refresh();
      this.wait();
      return; // not display battle log
    }
    _Window_BattleLog_addText.call(this, text);
  };

  // for sideview battle only
  Window_BattleLog.prototype.addItemNameText = function (itemName) {
    this._lines.push(itemName);
    this.refresh();
    this.wait();
  };

  var _Window_BattleLog_displayAction =
    Window_BattleLog.prototype.displayAction;
  Window_BattleLog.prototype.displayAction = function (subject, item) {
    if ($gameSystem.isSideView()) {
      if (
        displayAttack ||
        !(DataManager.isSkill(item) && item.id == subject.attackSkillId())
      ) {
        this.push("addItemNameText", item.name); // display item/skill name
      } else {
        this.push("wait");
      }
      return;
    }
    _Window_BattleLog_displayAction.call(this, subject, item);
  };

  // to put skill/item name at center
  var _Window_BattleLog_drawLineText = Window_BattleLog.prototype.drawLineText;
  Window_BattleLog.prototype.drawLineText = function (index) {
    if ($gameSystem.isSideView() && position == 1) {
      var rect = this.itemRectForText(index);
      this.contents.clearRect(rect.x, rect.y, rect.width, rect.height);
      this.drawText(this._lines[index], rect.x, rect.y, rect.width, "center");
      return;
    }
    _Window_BattleLog_drawLineText.call(this, index);
  };
})();


code:
//=============================================================================
// SkipPartyCommand.js
// ----------------------------------------------------------------------------
// Copyright (c) 2017-2018 Tsumio
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.0.5 2018/07/25 0ターン目もステータスウィンドウをリフレッシュするよう修正。
// 1.0.4 2018/01/04 アクターコマンドに逃げるコマンドを追加。
// 1.0.3 2018/01/02 パーティー先頭に行動不能アクターが存在した場合の不具合を修正。
// 1.0.2 2017/08/16 さらに微調整。
// 1.0.1 2017/08/16 スキップの判定を微調整。
// 1.0.0 2017/08/16 公開。
// ----------------------------------------------------------------------------
// [GitHub] : https://github.com/Tsumio/rmmv-plugins
// [Blog]   : http://ntgame.wpblog.jp/
// [Twitter]: https://twitter.com/TsumioNtGame
//=============================================================================

/*:
 * @plugindesc This plugin skip party command in battle.
 * @author Tsumio
 *
 * @param SwitchNumberForSkipping
 * @type switch
 * @desc If this switch is on, party command is skipped.
 * @default 1
 *
 * @param SwitchNumberForEscapeCommand
 * @type switch
 * @desc If this switch is on, show escape command to actor command window.
 * @default 2
 *
 * @help This plugin skip party command in battle.
 *
 * ----how to use----
 * You can use this plugin after setting SwitchNumberForSkipping and SwitchNumberForEscapeCommand parameters.
 *
 * ----plugin command----
 * There is no plugin command.
 *
 *
 * ----change log---
 * 1.0.5 2018/07/25 Fixed to refresh the status window also on turn 0.
 * 1.0.4 2018/01/04 Add escape command to acttor command window.
 * 1.0.3 2018/01/02 Fixed a bug when a inactivity actor is at the beginning of the party.
 * 1.0.2 2017/08/16 More Adjustment.
 * 1.0.1 2017/08/16 Adjustment of skip judgment.
 * 1.0.0 2017/08/16 Release
 *
 * ----remarks----
 * I shall not be responsible for any loss, damages and troubles from using this plugin.
 *
 * --Terms of Use--
 * This plugin is free for both commercial and non-commercial use.
 * You may edit the source code to suit your needs,
 * so long as you don't claim the source code belongs to you.
 *
 */
/*:ja
 * @plugindesc 戦闘時のパーティーコマンドをスキップします。
 * @author ツミオ
 *
 * @param スキップ用のスイッチ番号
 * @type switch
 * @desc このスイッチ番号がONのとき、パーティーコマンドはスキップされます。
 * @default 1
 *
 * @param 逃げるコマンド表示用のスイッチ番号
 * @type switch
 * @desc このスイッチ番号がONのとき、アクターコマンドに逃げるコマンドが追加されます。
 * @default 2
 *
 * @help 戦闘時のパーティーコマンドをスキップします。
 *
 *
 *
 * 【使用方法】
 * プラグインの導入後、スキップ用のスイッチ番号および逃げるコマンド表示用のスイッチ番号を設定することによって使用できます。
 *
 *
 * 【プラグインコマンド】
 * このプラグインにプラグインコマンドはありません。
 *
 * 【更新履歴】
 * 1.0.5 2018/07/25 0ターン目もステータスウィンドウをリフレッシュするよう修正。
 * 1.0.4 2018/01/04 アクターコマンドに逃げるコマンドを追加。
 * 1.0.3 2018/01/02 パーティー先頭に行動不能アクターが存在した場合の不具合を修正。
 * 1.0.2 2017/08/16 さらに微調整。
 * 1.0.1 2017/08/16 スキップの判定を微調整。
 * 1.0.0 2017/08/16 公開。
 *
 * 【備考】
 * 当プラグインを利用したことによるいかなる損害に対しても、制作者は一切の責任を負わないこととします。
 *
 * 【利用規約】
 * ソースコードの著作権者が自分であると主張しない限り、
 * 作者に無断で改変、再配布が可能です。
 * 利用形態（商用、18禁利用等）についても制限はありません。
 * 自由に使用してください。
 *
 */

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

  ////=============================================================================
  //// NTMO
  ////  Declare NTMO namespace.
  ////=============================================================================
  var NTMO = NTMO || {};
  NTMO.SPC = function () {};

  ////=============================================================================
  //// Local function
  ////  These functions checks & formats pluguin's command parameters.
  ////  I borrowed these functions from Triacontane.Thanks!
  ////=============================================================================
  var getParamString = function (paramNames) {
    if (!Array.isArray(paramNames)) paramNames = [paramNames];
    for (var i = 0; i < paramNames.length; i++) {
      var name = PluginManager.parameters(pluginName)[paramNames[i]];
      if (name) return name;
    }
    return "";
  };

  var getParamNumber = function (paramNames, min, max) {
    var value = getParamString(paramNames);
    if (arguments.length < 2) min = -Infinity;
    if (arguments.length < 3) max = Infinity;
    return (parseInt(value) || 0).clamp(min, max);
  };

  //This function is not written by Triacontane.Tsumio wrote this function !
  var getParamDouble = function (paramNames, min, max) {
    var value = getParamString(paramNames);
    if (arguments.length < 2) min = -Infinity;
    if (arguments.length < 3) max = Infinity;
    return Number(value);
  };

  //This function is not written by Triacontane.Tsumio wrote this function !
  var convertParam = function (param) {
    if (param !== undefined) {
      try {
        return JSON.parse(param);
      } catch (e) {
        console.group();
        console.error(
          "%cParameter is invalid ! You should check the following parameter !",
          "background-color: #5174FF"
        );
        console.error("Parameter:" + eval(param));
        console.error("Error message :" + e);
        console.groupEnd();
      }
    }
  };

  ////=============================================================================
  //// Get and set pluguin parameters.
  ////=============================================================================
  var param = {};
  param.switchNum_skipping = getParamNumber([
    "SwitchNumberForSkipping",
    "スキップ用のスイッチ番号",
  ]);
  param.switchNum_escapeCommand = getParamNumber([
    "SwitchNumberForEscapeCommand",
    "逃げるコマンド表示用のスイッチ番号",
  ]);

  ////==============================
  //// Convert parameters.
  ////==============================

  //There is none.

  //////=============================================================================
  ///// Scene_Battle
  /////  Add skipping system to battle scene.
  ////   Override some methods for skipping always.
  /////=============================================================================

  const _Scene_Battle_changeInputWindow =
    Scene_Battle.prototype.changeInputWindow;
  Scene_Battle.prototype.changeInputWindow = function () {
    if (this.skipPartyCommand_SPC()) {
      //If return true, it means be skipped.
      return;
    }

    _Scene_Battle_changeInputWindow.call(this);
  };

  //This is additional method.
  Scene_Battle.prototype.skipPartyCommand_SPC = function () {
    if (this.canSkipPartyCommand_SPC()) {
      BattleManager.selectNextCommand(); //Instead of commandFight().
      this.refreshStatus();
      this.startActorCommandSelection();
      return true; //Be skipped.
    }
    return false;
  };

  //This is additional method.
  Scene_Battle.prototype.isSkippableSwitchOn_SPC = function () {
    return $gameSwitches.value(param.switchNum_skipping);
  };

  //This is additional method.
  Scene_Battle.prototype.canSkipPartyCommand_SPC = function () {
    return (
      this.isSkippableSwitchOn_SPC() &&
      BattleManager.isInputting() &&
      !BattleManager.actor()
    );
  };

  const _Scene_Battle_createActorCommandWindow =
    Scene_Battle.prototype.createActorCommandWindow;
  Scene_Battle.prototype.createActorCommandWindow = function () {
    _Scene_Battle_createActorCommandWindow.call(this);
    this._actorCommandWindow.setHandler(
      "escape",
      this.commandEscape.bind(this)
    );
  };

  //////=============================================================================
  ///// Window_ActorCommand
  /////  Add escapeCommand.
  /////=============================================================================
  const _Window_ActorCommand_changeInputWindow =
    Window_ActorCommand.prototype.makeCommandList;
  Window_ActorCommand.prototype.makeCommandList = function () {
    _Window_ActorCommand_changeInputWindow.call(this);
    if (this._actor) {
      this.addEscapeCommand();
    }
  };

  Window_ActorCommand.prototype.addEscapeCommand = function () {
    if (this.isEscapeCommandSwitchOn_SPC()) {
      this.addCommand(TextManager.escape, "escape", BattleManager.canEscape());
    }
  };

  Window_ActorCommand.prototype.isEscapeCommandSwitchOn_SPC = function () {
    return $gameSwitches.value(param.switchNum_escapeCommand);
  };
})();