code:
//=============================================================================
// VariableDigitsHandler.js
// ----------------------------------------------------------------------------
// Copyright (c) 2020 たくろう_りらっくすーぷ
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Last Updated: 2020/07/29
//
// Version
// 1.0.0  2020/07/29 初版
// ----------------------------------------------------------------------------
// [Blog]   : https://tkrou.hatenablog.jp/
// [Twitter]: https://twitter.com/t_taraku3
//=============================================================================

/*:ja
 * @plugindesc 変数の任意の桁を参照したり処理したりします　e.g. [VDH_CTD 参照 対象変数 桁数 代入先変数]
 * @author たくろう_りらっくすーぷ
 *
 *
 * @help 指定した変数の指定した桁に対して、参照したり計算したりするプラグインです。
 *
 * ◆プラグインパラメーター
 * 　今のところありません。
 *
 * ◆プラグインコマンド
 *  イベントコマンド「プラグインコマンド」から実行してください。
 *  （引数の間は半角スペースで区切ってください）
 *
 * ▽コマンドの書式
 * 　VDH_CTD 操作 対象変数 桁数 [計算値] [代入先変数]
 * 　※VDH_　Command　Target　Digit　の意
 *
 * ▽ざっくり実行例
 * 　<参照（REF)>
 * 　変数1の3桁目を参照し、変数10に代入
 * 　VDH_CTD 参照 1 3 10
 *
 * 　変数1の左から2桁目を参照し、変数10に代入
 * 　VDH_CTD REF 1 -2 10
 *
 * 　<計算（CAL)>
 * 　変数1の3桁目に5を加算し、変数10に代入
 * 　VDH_CTD 計算 1 3 5 10
 *
 * 　変数1の左から4桁目に -2を計算（減算）し、変数1を上書き更新
 * 　VDH_CTD CAL 1 -4 -2
 *
 * 　変数1(文字列)の3桁目に 特別な を結合し、変数10に代入
 * 　VDH_CTD 計算 1 3 特別な 10
 *
 *
 * ▽操作についての詳細
 * 　VDH_CTD 操作 対象変数 桁数 [計算値] [代入先変数]
 *
 * 　第一引数で操作を指定します。
 * 　（括弧内で書かれた文字でも指定できます）
 *
 * ●参照（REF)
 * 　　指定した変数の、任意の桁の数を参照します。
 *
 * 　(例) _変数1_ の _3桁目_ を参照し、結果を _変数10_ に代入する
 * 　VDH_CTD 参照 1 3 10
 * 　→変数1が 3857461 なら 変数10 に 4 が代入される
 *
 *
 * 　　第三引数の桁数に負の数を指定すると、左から桁数カウントします。
 *
 * 　(例) _変数1_ の _左から2桁目_ を参照し、結果を _変数10_ に代入する
 * 　VDH_CTD REF 1 -2 10
 * 　→変数1が 3857461 なら 変数10 に 8 が代入される
 *
 *
 * 　指定した変数の中身が文字列だった場合、対象位置の文字が代入先変数に入ります。
 *
 * 　(例) _変数1_ の _3桁目_ を参照し、結果を _変数10_ に代入する
 * 　VDH_CTD 参照 1 3 10
 * 　→変数1が 「これは文字列です」 なら 変数10 に 「列」 が代入される
 *
 * 　VDH_CTD REF 1 -2 10
 * 　→変数1が 「これは文字列です」 なら 変数10 に 「れ」 が代入される
 *
 * 　*===**===**===*
 * ●計算（CAL)
 * 　　指定した変数の、任意の桁を、計算値で計算します。
 *
 * 　(例) _変数1_ の _3桁目_ に、_計算値 5_を加算し、結果を _変数10_ に代入する
 * 　VDH_CTD 計算 1 3 5 10
 * 　→変数1が 3857461 なら 変数10 に 3857961 が代入される
 *
 * 　　計算値に負の数を入れると減算します。
 * 　VDH_CTD CAL 1 3 -2 10
 * 　→変数1が 3857461 なら 変数10 に 3857261 が代入される
 *
 * 　　桁の繰り上がり繰り下がりはなく、0に戻ります。ダイヤルのイメージです。
 * 　VDH_CTD 計算 1 3 8 10
 * 　→変数1が 3857461 なら 変数10 に 3857261 が代入される
 * 　VDH_CTD 計算 1 3 -5 10
 * 　→変数1が 3857461 なら 変数10 に 3857961 が代入される
 *
 *
 * 　　第三引数の桁数に負の数を指定すると、左から桁数カウントします。
 *
 * 　(例) _変数1_ の _左から2桁目_ に、_計算値 5_を加算し、結果を _変数10_ に代入する
 * 　VDH_CTD 計算 1 -2 5 10
 * 　→変数1が 3857461 なら 変数10 に 3357461 が代入される
 *
 *
 * 　　第五引数の代入先変数を指定しないと、第二引数の対象変数を上書きする形で計算します。
 *
 * 　(例) _変数1_ の _3桁目_ に、_計算値 5_を加算する
 * 　VDH_CTD 計算 1 3 5
 * 　→変数1が 3857461 なら 変数1 が 3857961 になる
 *
 * 　(例) _変数1_ の _左から4桁目_ に、_計算値 -5_を計算する（減算）
 * 　VDH_CTD 計算 1 -4 -5
 * 　→変数1が 3857461 なら 変数1 が 3852961 になる
 *
 *
 * 　指定した変数の中身が文字列だった場合、対象位置に文字列が結合されます。
 *
 * 　(例) _変数1_ の _3桁目_ に _「のテスト」_を結合し、結果を _変数10_ に代入する
 * 　VDH_CTD 計算 1 3 のテスト 10
 * 　→変数1が 「これは文字列です」 なら 変数10 に 「これは文字列のテストです」 が代入される
 *
 * 　左からの桁数カウントと変数上書きも同様
 * 　VDH_CTD CAL 1 -3 特別な
 * 　→変数1が 「これは文字列です」 なら 変数1 が 「これは特別な文字列です」 になる
 *
 *
 *
 *
 */

(function () {
  // strictモードで動作（よくわかってない）
  'use strict';

  // コマンド名を取得する関数を定義
  var getCommandName = function (command) {
    // 大文字に変換して戻す
    return (command || '').toUpperCase();
  };

  //=============================================================================
  // Game_Interpreter
  //  プラグインコマンドを追加定義します。
  //=============================================================================

  // 元の処理を変数に入れて
  var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
  // 元の処理を上書きする
  Game_Interpreter.prototype.pluginCommand = function (command, args) {
    // 変数にいれた元の処理を呼び出して
    _Game_Interpreter_pluginCommand.apply(this, arguments);
    // 今回追加する関数を追加する
    this.pluginCommandVariableDigitsHandler(command, args);
  };

  // 追加定義するプラグインコマンド
  Game_Interpreter.prototype.pluginCommandVariableDigitsHandler = function (command, args) {
    // プラグインコマンドで入力された文字列によって今回の処理が呼び出されるようにする
    switch (getCommandName(command)) {
      // プラグインコマンドのメインコマンド部分
      case '変数操作-対象-桁':
      // 覚え方は　VDH_　Command　Target　Digit
      case 'VDH_CTD':
        // 上のコマンド名が指定されたら、下記関数を呼び出す
        VariableDigitsHandler(args)
        break;

      // 別の処理が追加したくなったらここにこんな感じで追加する
      // case '変数操作-対象-桁-代入先':
      // case 'VDH_CTD':
      //     // 上のコマンド名が指定されたら、下記関数を呼び出す
      //     VariableDigitsHandler(args)
      //     break;
    }
  };

  //=============================================================================
  // VariableDigitsHandler
  //  追加するプラグインコマンド処理の関数を定義します。
  //=============================================================================

  // プラグインコマンドで呼び出された関数
  function VariableDigitsHandler(args) {
    // 操作対象の変数の中身を target に代入する
    var target = $gameVariables.value(args[1]);
    // 操作内容によって分岐
    switch (getCommandName(args[0])) {

      // ==== 任意の桁の参照 ======
      // args[0]操作内容　args[1]操作対象の変数　args[2]指定桁数　args[3]代入先の変数
      case 'REF':
      case '参照':
        // 変数の中身が数字だった場合と文字列だった場合で処理を分岐
        if (typeof target == "number") {
          // もし指定桁数が正の数だったら右から桁数カウント
          if (+args[2] > 0) {
            // 対象桁の値を取得
            var digitvalue = +String(target)[String(target).length - args[2]];
            // 取得した値を代入先の変数に代入
            $gameVariables.setValue(args[3], digitvalue);
          } else {
            // もし桁数が正の数じゃなかったら（負の数）だったら左から桁数カウント
            var digitvalue = +String(target)[Math.abs(args[2]) - 1];
            $gameVariables.setValue(args[3], digitvalue);
          }

        } else if (typeof target == "string") {
          // 文字列を扱うパターンがパッと思いつかないが、とりあえずいれておく
          if (+args[2] > 0) {
            var digitvalue = target[target.length - args[2]];
            $gameVariables.setValue(args[3], digitvalue);
          } else {
            var digitvalue = target[Math.abs(args[2]) - 1];
            $gameVariables.setValue(args[3], digitvalue);
          }
        }
        break;

      // ==== 任意の桁の計算 ======
      // args[0]操作内容　args[1]操作対象の変数　args[2]指定桁数　args[3]計算値　args[4]代入先の変数
      case 'CAL':
      case '計算':
        // 変数の中身が数字だった場合と文字列だった場合で処理を分岐
        if (typeof target == "number") {
          // targegの数字列を配列にする
          const target_array = [...String(target)];

          // もし桁数が正の数だったら右から桁数カウント
          if (+args[2] > 0) {
            // 対象桁数の値を取得
            var digitvalue = +target_array[target_array.length - args[2]];
            // もし計算値が負の数で計算結果が負の数になる場合は9に戻す(絶対値で加算)
            if (+args[3] < 0 && Math.abs(args[3]) > digitvalue) {
              var cal_result = digitvalue + Math.abs(args[3]);
            } else {
              // 取得した値に計算値を加算
              var cal_result = digitvalue + +args[3];
            }
            // 計算した結果を同じ桁のところに入れる　2桁以上になる場合は1の位のみを使用
            target_array[target_array.length - args[2]] = cal_result % 10;
          } else {
            // 指定桁数が負の数で左からカウント
            var digitvalue = +target_array[Math.abs(args[2]) - 1];
            var cal_result = digitvalue + +args[3];
            target_array[Math.abs(args[2]) - 1] = cal_result % 10;
          }
          // 配列を数値に変換
          target = +target_array.join("");

        } else if (typeof target == "string") {
          // 文字列を扱うパターンがパッと思いつかないが、とりあえずいれておく

          // targegの文字列を配列にする
          const target_array = [...target];

          // もし桁数が正の数だったら右から桁数カウント
          if (+args[2] > 0) {
            // 対象桁数の文字を取得
            var digitvalue = target_array[target_array.length - args[2]];
            // 取得した文字に文字を結合
            var cal_result = digitvalue + String(args[3]);
            // 結合した結果を同じ桁のところに入れる
            target_array[target_array.length - args[2]] = cal_result;
          } else {
            // 指定桁数が負の数で左からカウント
            var digitvalue = target_array[Math.abs(args[2]) - 1];
            var cal_result = digitvalue + String(args[3]);
            target_array[Math.abs(args[2]) - 1] = cal_result;
          }
          // 配列を文字列に変換
          target = target_array.join("");
        }

        // 代入先が指定されているかどうか
        if (typeof args[4] === "undefined") {
          // 代入先変数が指定されてない場合、元の変数を上書きする
          $gameVariables.setValue(args[1], target);
        } else {
          // 指定されていればそこに代入
          $gameVariables.setValue(args[4], target);
        }

        break;

    }
  };

})();


code:
//=============================================================================
// VehicleBgmfix.js
//=============================================================================

/*:ja
 * @plugindesc ver1.00 乗り物の厄介の仕様の改変。
 * @author まっつＵＰ
 *
 * @param switch
 * @desc このIDのスイッチがオフの時
 * 乗り物から降りたときマップBGMを再生します。
 * @default 10
 *
 * @help
 *
 * RPGで笑顔を・・・
 *
 * このヘルプとパラメータの説明をよくお読みになってからお使いください。
 *
 * デフォルトでは乗り物に乗った時、直前のbgmが保存され
 * 降りるときにそのbgmが再生されます。
 * このプラグインでは特定のスイッチがオフの時
 * 保存のbgmに関係なくマップBGMを再生します。
 *
 * このプラグインを利用する場合は
 * また、素材のみの販売はダメです。
 * 上記以外の規約等はございません。
 * もちろんツクールMVで使用する前提です。
 * 何か不具合ありましたら気軽にどうぞ。
 *
 * 免責事項：
 * このプラグインを利用したことによるいかなる損害も制作者は一切の責任を負いません。
 *
 */

(function () {

    var parameters = PluginManager.parameters('Vehiclebgmfix');
    var VBswitch = Number(parameters['switch'] || 10);

    var _Game_System_replayWalkingBgm = Game_System.prototype.replayWalkingBgm;
    Game_System.prototype.replayWalkingBgm = function () {
        if (!$gameSwitches.value(VBswitch)) {
            $gameMap.autoplay();
            return;
        }
        _Game_System_replayWalkingBgm.call(this);
    };

})();

repo_name: dazed/translations

license: unknown


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

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

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

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

    var getParamString = function (paramNames) {
        var value = getParamOther(paramNames);
        return value === null ? '' : value;
    };

    var getParamArrayString = function (paramNames) {
        var values = getParamString(paramNames).split(',');
        for (var i = 0; i < values.length; i++) values[i] = values[i].trim();
        return values;
    };

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

    //=============================================================================
    // パラメータの取得と整形
    //=============================================================================
    var paramBoatPassableRegions = getParamArrayNumber(['BoatPassableRegions', '小型船通行リージョン'], 0);
    var paramBoatPassableTerrainTags = getParamArrayNumber(['BoatPassableTerrainTags', '小型船通行地形タグ'], 0);
    var paramBoatNonPassableRegions = getParamArrayNumber(['BoatNonPassableRegions', '小型船不可リージョン'], 0);
    var paramBoatNonPassableTerrainTags = getParamArrayNumber(['BoatNonPassableTerrainTags', '小型船不可地形タグ'], 0);
    var paramShipPassableRegions = getParamArrayNumber(['ShipPassableRegions', '大型船通行リージョン'], 0);
    var paramShipPassableTerrainTags = getParamArrayNumber(['ShipPassableTerrainTags', '大型船通行地形タグ'], 0);
    var paramShipNonPassableRegions = getParamArrayNumber(['ShipNonPassableRegions', '大型船不可リージョン'], 0);
    var paramShipNonPassableTerrainTags = getParamArrayNumber(['ShipNonPassableTerrainTags', '大型船不可地形タグ'], 0);
    var paramAirShipNonPassableRegions = getParamArrayNumber(['AirShipNonPassableRegions', '飛行船不可リージョン'], 0);
    var paramAirShipNonPassableTerrainTags = getParamArrayNumber(['AirShipNonPassableTerrainTags', '飛行船不可地形タグ'], 0);
    var paramBoatRidingTerrainTags = getParamArrayNumber(['BoatRidingTerrainTags', '小型船乗降地形タグ'], 0);
    var paramBoatRidingRegions = getParamArrayNumber(['BoatRidingRegions', '小型船乗降リージョン'], 0);
    var paramShipRidingTerrainTags = getParamArrayNumber(['ShipRidingTerrainTags', '大型船乗降地形タグ'], 0);
    var paramShipRidingRegions = getParamArrayNumber(['ShipRidingRegions', '大型船乗降リージョン'], 0);
    var paramAirShipRidingTerrainTags = getParamArrayNumber(['AirShipRidingTerrainTags', '飛行船乗降地形タグ'], 0);
    var paramAirShipRidingRegions = getParamArrayNumber(['AirShipRidingRegions', '飛行船乗降リージョン'], 0);

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

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

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

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

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

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

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

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

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

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

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

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

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


code:
//=============================================================================
// VehicleSpeed.js
//=============================================================================

/*:
 * @plugindesc 乗り物の初期移動速度を変えるよ。
 * @author ゆわか
 *
 * @param BoatSpeed
 * @desc ボートの速度(例: 4=通常 5=2倍速)
 * @default 4
 *
 * @param ShipSpeed
 * @desc 帆船の速度(例: 4=通常 5=2倍速)
 * @default 5
 *
 * @param AirshipSpeed
 * @desc 飛行船の速度(例: 4=通常 5=2倍速)
 * @default 6
 *
 * @help このプラグインには、プラグインコマンドはありません。
 *
 *　乗り物の移動速度の初期値を変更できます。
 *　ゲームの途中では変更できませんのでご注意ください。
 *
 * ＲＰＧツクールＭＶ専用のプラグインです。
 * 使用報告不要・クレジット不要・改変可・商用利用可
 * もし何か問題が起きても、当方は一切責任を負いません。ご了承ください。
 */

(function () {
    var parameters = PluginManager.parameters('VehicleSpeed');
    var BoatSpeed = Number(parameters['BoatSpeed'] || 4);
    var ShipSpeed = Number(parameters['ShipSpeed'] || 5);
    var AirshipSpeed = Number(parameters['AirshipSpeed'] || 6);

    //rpg_objects.jsより。乗り物の移動速度を指定。
    Game_Vehicle.prototype.initMoveSpeed = function () {
        if (this.isBoat()) {
            this.setMoveSpeed(BoatSpeed);
        } else if (this.isShip()) {
            this.setMoveSpeed(ShipSpeed);
        } else if (this.isAirship()) {
            this.setMoveSpeed(AirshipSpeed);
        }
    };
})();


code:
//=============================================================================
// Vitsuno_Difficulty.js
//-----------------------------------------------------------------------------
// Copyright (c) 2016 Tsuno Ozumi
// Released under the MIT license
// http://opensource.org/licenses/mit-license.php
//=============================================================================

var Vitsuno = Vitsuno || {};
Vitsuno.Difficulty = {};
Vitsuno.Difficulty.version = 1.00;

/*:
 * @plugindesc 難易度により能力値や報酬倍率を変更できるようになります。
 * @author 尾角 つの (Tsuno Ozumi)
 *
 * @param Init Difficulty ID
 * @desc 難易度IDの初期値です。
 * @default 2
 *
 * @param Use Option
 * @desc オプションで難易度変更するかどうか。0:しない 1:する
 * @default 1
 *
 * @param Option Name
 * @desc オプションでの表示名です。
 * @default 難易度
 *
 * @param --(Difficulty ID:1)--
 *
 * @param 1 : Name
 * @desc 難易度名です。（使用しない場合は無記入にしてください。）
 * @default イージー
 *
 * @param 1 : Param Rate
 * @desc 難易度によるステータス倍率です。
 * 最大HP,最大MP,攻撃力,防御力,魔法力,魔法防御,敏捷性,運
 * @default 0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7
 *
 * @param 1 : Drop Rate
 * @desc 難易度による報酬倍率です。
 * 経験値,お金,アイテム1,アイテム2,アイテム3
 * @default 1.0,1.0,1.0,1.0,1.0
 *
 * @param --(ID:2)-------------
 *
 * @param 2 : Name
 * @desc 難易度名です。（使用しない場合は無記入にしてください。）
 * @default ノーマル
 *
 * @param 2 : Param Rate
 * @desc 難易度によるステータス倍率です。
 * 最大HP,最大MP,攻撃力,防御力,魔法力,魔法防御,敏捷性,運
 * @default 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
 *
 * @param 2 : Drop Rate
 * @desc 難易度による報酬倍率です。
 * 経験値,お金,アイテム1,アイテム2,アイテム3
 * @default 1.0,1.0,1.0,1.0,1.0
 *
 * @param --(ID:3)-------------
 *
 * @param 3 : Name
 * @desc 難易度名です。（使用しない場合は無記入にしてください。）
 * @default ハード
 *
 * @param 3 : Param Rate
 * @desc 難易度によるステータス倍率です。
 * 最大HP,最大MP,攻撃力,防御力,魔法力,魔法防御,敏捷性,運
 * @default 1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3
 *
 * @param 3 : Drop Rate
 * @desc 難易度による報酬倍率です。
 * 経験値,お金,アイテム1,アイテム2,アイテム3
 * @default 1.2,1.2,1.2,1.2,1.2
 *
 * @param --(ID:4)-------------
 *
 * @param 4 : Name
 * @desc 難易度名です。（使用しない場合は無記入にしてください。）
 * @default ベリーハード
 *
 * @param 4 : Param Rate
 * @desc 難易度によるステータス倍率です。
 * 最大HP,最大MP,攻撃力,防御力,魔法力,魔法防御,敏捷性,運
 * @default 1.6,1.6,1.6,1.6,1.6,1.6,1.6,1.6
 *
 * @param 4 : Drop Rate
 * @desc 難易度による報酬倍率です。
 * 経験値,お金,アイテム1,アイテム2,アイテム3
 * @default 1.4,1.4,1.4,1.4,1.4
 *
 * @param --(ID:5)-------------
 *
 * @param 5 : Name
 * @desc 難易度名です。（使用しない場合は無記入にしてください。）
 * @default マニア
 *
 * @param 5 : Param Rate
 * @desc 難易度によるステータス倍率です。
 * 最大HP,最大MP,攻撃力,防御力,魔法力,魔法防御,敏捷性,運
 * @default 1.9,1.9,1.9,1.9,1.9,1.9,1.9,1.9
 *
 * @param 5 : Drop Rate
 * @desc 難易度による報酬倍率です。
 * 経験値,お金,アイテム1,アイテム2,アイテム3
 * @default 1.6,1.6,1.6,1.6,1.6
 *
 * @param --(ID:6)-------------
 *
 * @param 6 : Name
 * @desc 難易度名です。（使用しない場合は無記入にしてください。）
 *
 * @param 6 : Param Rate
 * @desc 難易度によるステータス倍率です。
 * 最大HP,最大MP,攻撃力,防御力,魔法力,魔法防御,敏捷性,運
 * @default 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
 *
 * @param 6 : Drop Rate
 * @desc 難易度による報酬倍率です。
 * 経験値,お金,アイテム1,アイテム2,アイテム3
 * @default 1.0,1.0,1.0,1.0,1.0
 *
 * @param --(ID:7)-------------
 *
 * @param 7 : Name
 * @desc 難易度名です。（使用しない場合は無記入にしてください。）
 *
 * @param 7 : Param Rate
 * @desc 難易度によるステータス倍率です。
 * 最大HP,最大MP,攻撃力,防御力,魔法力,魔法防御,敏捷性,運
 * @default 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
 *
 * @param 7 : Drop Rate
 * @desc 難易度による報酬倍率です。
 * 経験値,お金,アイテム1,アイテム2,アイテム3
 * @default 1.0,1.0,1.0,1.0,1.0
 *
 * @param --(ID:8)-------------
 *
 * @param 8 : Name
 * @desc 難易度名です。（使用しない場合は無記入にしてください。）
 *
 * @param 8 : Param Rate
 * @desc 難易度によるステータス倍率です。
 * 最大HP,最大MP,攻撃力,防御力,魔法力,魔法防御,敏捷性,運
 * @default 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0
 *
 * @param 8 : Drop Rate
 * @desc 難易度による報酬倍率です。
 * 経験値,お金,アイテム1,アイテム2,アイテム3
 * @default 1.0,1.0,1.0,1.0,1.0
 *
 * @help
 *
 * プラグインコマンド:
 *    Difficulty SetID 難易度ID     # 難易度IDを変更する
 *    Difficulty Next              # 難易度IDを上げる
 *    Difficulty Previous          # 難易度IDを下げる
 */

// ● プラグインの設定値を取得
(function ($) {
    $.parameters = PluginManager.parameters('Vitsuno_Difficulty');
    $.initDifficultyId = Number($.parameters['Init Difficulty ID']) || 2;
    $.useOption = Number($.parameters['Use Option']) === 1;
    $.optionName = $.parameters['Option Name'];
    $.data = [];
    $.data[0] = null;

    // ● セットアップ用の一時関数
    var setup = function (id) {
        // 設定値の取得
        var idText = '%1 : '.format(id);
        var nameData = $.parameters[idText + 'Name'] || '';
        var paramData = $.parameters[idText + 'Param Rate'];
        var dropData = $.parameters[idText + 'Drop Rate'];
        if (nameData === '' || paramData === undefined || dropData === undefined) {
            return false;
        }
        // データの準備
        var paramRate = paramData ? paramData.split(',').map(Number) : [];
        var dropRate = dropData ? dropData.split(',').map(Number) : [];
        var getRate = function (rate) {
            return typeof rate === 'number' ? rate : 1.0;
        };
        // 難易度オブジェクトの作成
        var difficulty = {};
        difficulty.name = nameData;
        difficulty.paramRate = [];
        for (var i = 0; i < 8; i++) {
            difficulty.paramRate[i] = getRate(paramRate[i]);
        }
        difficulty.expRate = getRate(dropRate[0]);
        difficulty.goldRate = getRate(dropRate[1]);
        difficulty.dropItemRate = [];
        for (var i = 0; ; i++) {
            if (typeof dropRate[i + 2] === 'number' || i < 3) {
                difficulty.dropItemRate[i] = getRate(dropRate[i + 2]);
            } else {
                break;
            }
        }
        $.data[id] = difficulty;
        return true;
    };

    for (var i = 1; ; i++) {
        if (!setup(i)) {
            break;
        }
    }

})(Vitsuno.Difficulty);

//-----------------------------------------------------------------------------
// DataManager
//-----------------------------------------------------------------------------

// ● ニューゲームのセットアップ
Vitsuno.Difficulty.DataMgr_setupNewGame = DataManager.setupNewGame;
DataManager.setupNewGame = function () {
    Vitsuno.Difficulty.DataMgr_setupNewGame.call(this);
    SceneManager.setDifficultyMutable();
};

// ● 戦闘テストのセットアップ
Vitsuno.Difficulty.DataMgr_setupBattleTest = DataManager.setupBattleTest;
DataManager.setupBattleTest = function () {
    Vitsuno.Difficulty.DataMgr_setupBattleTest.call(this);
    SceneManager.setDifficultyMutable();
};

// ● イベントテストのセットアップ
Vitsuno.Difficulty.DataMgr_setupEventTest = DataManager.setupEventTest
DataManager.setupEventTest = function () {
    Vitsuno.Difficulty.DataMgr_setupEventTest.call(this);
    SceneManager.setDifficultyMutable();
};

// ● ゲームのロード
Vitsuno.Difficulty.DataMgr_loadGame = DataManager.loadGame;
DataManager.loadGame = function (savefileId) {
    var result = Vitsuno.Difficulty.DataMgr_loadGame.call(this, savefileId);
    if (result) {
        SceneManager.setDifficultyMutable();
    }
    return result;
};

//-----------------------------------------------------------------------------
// TextManager
//-----------------------------------------------------------------------------

// ● 難易度表示名を取得
Object.defineProperty(TextManager, 'difficulty', {
    get: function () { return Vitsuno.Difficulty.optionName; },
    configurable: true
});

//-----------------------------------------------------------------------------
// SceneManager
//-----------------------------------------------------------------------------

// ● クラス変数
SceneManager._isDifficultyMutable = false;

// ● 難易度変更可能判定
SceneManager.isDifficultyMutable = function () {
    return SceneManager._isDifficultyMutable;
};

// ● 難易度変更可能に設定
SceneManager.setDifficultyMutable = function () {
    SceneManager._isDifficultyMutable = true;
};

// ● 難易度変更可能設定を削除
SceneManager.removeDifficultyMutable = function () {
    SceneManager._isDifficultyMutable = false;
};

//-----------------------------------------------------------------------------
// Game_System
//-----------------------------------------------------------------------------

// ● 初期化
Vitsuno.Difficulty.GSystem_initialize = Game_System.prototype.initialize;
Game_System.prototype.initialize = function () {
    Vitsuno.Difficulty.GSystem_initialize.call(this);
    this._difficultyId = Vitsuno.Difficulty.initDifficultyId;
};

// ● 難易度IDの取得
Game_System.prototype.difficultyId = function () {
    if (this._difficultyId === undefined) {
        this._difficultyId = Vitsuno.Difficulty.initDifficultyId;
    }
    return this._difficultyId;
};

// ● 難易度IDの設定
Game_System.prototype.setDifficultyId = function (difficultyId) {
    if (Vitsuno.Difficulty.data[difficultyId]) {
        this._difficultyId = difficultyId;
    }
};

// ● 難易度の設定
Game_System.prototype.setDifficulty = function (difficulty) {
    var id = Vitsuno.Difficulty.data.indexOf(difficulty);
    if (id >= 0) {
        this.setDifficultyId(id);
    }
};

// ● 難易度オブジェクトの取得
Game_System.prototype.difficultyObject = function () {
    return Vitsuno.Difficulty.data[this.difficultyId()];
};

// ● 難易度名の取得
Game_System.prototype.difficultyName = function () {
    var difficulty = this.difficultyObject();
    return difficulty ? difficulty.name : '';
};

// ● 難易度オブジェクト配列の取得
Game_System.prototype.difficulties = function () {
    return Vitsuno.Difficulty.data.filter(function (difficulty) {
        return difficulty;
    });
};

// ● 次の難易度に変更
Game_System.prototype.nextDifficulty = function (wrap) {
    var lastDifficulty = this.difficultyObject();
    var difficulties = this.difficulties();
    var index = difficulties.indexOf(lastDifficulty);
    index = index < 0 ? 0 : index + 1;
    index = wrap ? index % difficulties.length : index;
    if (index >= 0 && index < difficulties.length) {
        this.setDifficulty(difficulties[index]);
    }
    return lastDifficulty !== this.difficultyObject();
};

// ● 前の難易度に変更する
Game_System.prototype.previousDifficulty = function (wrap) {
    var lastDifficulty = this.difficultyObject();
    var difficulties = this.difficulties();
    var index = difficulties.indexOf(lastDifficulty);
    index = index < 0 ? 0 : index - 1;
    index = wrap ? index % difficulties.length : index;
    if (index >= 0 && index < difficulties.length) {
        this.setDifficulty(difficulties[index]);
    }
    return lastDifficulty !== this.difficultyObject();
};

//-----------------------------------------------------------------------------
// Game_Enemy
//-----------------------------------------------------------------------------

// ● 能力値倍率の取得
Vitsuno.Difficulty.GEnemy_paramRate = Game_Enemy.prototype.paramRate;
Game_Enemy.prototype.paramRate = function (paramId) {
    var rate = Vitsuno.Difficulty.GEnemy_paramRate ?
        Vitsuno.Difficulty.GEnemy_paramRate.call(this, paramId) :
        Game_Battler.prototype.paramRate.call(this, paramId);
    var difficulty = $gameSystem.difficultyObject();
    if (difficulty) {
        rate *= difficulty.paramRate[paramId];
    }
    return rate;
};

// ● 経験値の取得
Vitsuno.Difficulty.GEnemy_exp = Game_Enemy.prototype.exp;
Game_Enemy.prototype.exp = function () {
    var exp = Vitsuno.Difficulty.GEnemy_exp.call(this);
    var difficulty = $gameSystem.difficultyObject();
    if (difficulty) {
        exp *= difficulty.expRate;
    }
    return Math.floor(exp);
};

// ● お金の取得
Vitsuno.Difficulty.GEnemy_gold = Game_Enemy.prototype.gold;
Game_Enemy.prototype.gold = function () {
    var gold = Vitsuno.Difficulty.GEnemy_gold.call(this);
    var difficulty = $gameSystem.difficultyObject();
    if (difficulty) {
        gold *= difficulty.goldRate;
    }
    return Math.floor(gold);
};

// ● ドロップアイテムの作成 (再定義)
Game_Enemy.prototype.makeDropItems = function () {
    return this.enemy().dropItems.reduce(function (r, di, i) {
        if (di.kind > 0 && Math.random() * di.denominator < this.dropItemRateFromIndex(i)) {
            return r.concat(this.itemObject(di.kind, di.dataId));
        } else {
            return r;
        }
    }.bind(this), []);
};

// ● インデック付きドロップアイテムレートの取得
Game_Enemy.prototype.dropItemRateFromIndex = function (index) {
    var rate = this.dropItemRate();
    var difficulty = $gameSystem.difficultyObject();
    if (difficulty) {
        rate *= difficulty.dropItemRate[index];
    }
    return rate;
};

//-----------------------------------------------------------------------------
// Game_Interpreter
//-----------------------------------------------------------------------------

// ● プラグインコマンドの実行
Vitsuno.Difficulty.GInterpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function (command, args) {
    Vitsuno.Difficulty.GInterpreter_pluginCommand.call(this, command, args);
    if (command === 'Difficulty') {
        switch (args[0]) {
            case 'SetID':
                $gameSystem.setDifficultyId(Number(args[1]));
                break;
            case 'Next':
                $gameSystem.nextDifficulty(false);
                break;
            case 'Previous':
                $gameSystem.previousDifficulty(false);
                break;
        }
    }
};

//-----------------------------------------------------------------------------
// Window_Options
//-----------------------------------------------------------------------------

// ● コマンドリストの作成
Vitsuno.Difficulty.WOptions_makeCommandList = Window_Options.prototype.makeCommandList;
Window_Options.prototype.makeCommandList = function () {
    Vitsuno.Difficulty.WOptions_makeCommandList.call(this);
    this.addDifficultyOptions();
};

// ● 難易度を表示するか判定
Window_Options.prototype.isDifficultyDisplayed = function () {
    return Vitsuno.Difficulty.useOption;
};

// ● 難易度が有効かどうか
Window_Options.prototype.isDifficultyEnabled = function () {
    return $gameSystem && SceneManager.isDifficultyMutable();
};

// ● 難易度コマンドの追加
Window_Options.prototype.addDifficultyOptions = function () {
    if (this.isDifficultyDisplayed()) {
        var enabled = this.isDifficultyEnabled();
        this.addCommand(TextManager.difficulty, 'difficulty', enabled);
    }
};

// ● 状態文字の取得
Vitsuno.Difficulty.WOptions_statusText = Window_Options.prototype.statusText;
Window_Options.prototype.statusText = function (index) {
    if (this.commandSymbol(index) === 'difficulty') {
        return this.isDifficultyEnabled() ? $gameSystem.difficultyName() : '';
    } else {
        return Vitsuno.Difficulty.WOptions_statusText.call(this, index);
    }
};

// ● 決定時の処理
Vitsuno.Difficulty.WOptions_processOk = Window_Options.prototype.processOk;
Window_Options.prototype.processOk = function () {
    if (this.commandSymbol(this.index()) === 'difficulty') {
        if (this.isDifficultyEnabled()) {
            if ($gameSystem.nextDifficulty(true)) {
                this.redrawItem(this.findSymbol('difficulty'));
                SoundManager.playCursor();
            }
        }
    } else {
        Vitsuno.Difficulty.WOptions_processOk.call(this);
    }
};

// ● カーソルを右に移動
Vitsuno.Difficulty.WOptions_cursorRight = Window_Options.prototype.cursorRight;
Window_Options.prototype.cursorRight = function (wrap) {
    if (this.commandSymbol(this.index()) === 'difficulty') {
        if (this.isDifficultyEnabled()) {
            if ($gameSystem.nextDifficulty(false)) {
                this.redrawItem(this.findSymbol('difficulty'));
                SoundManager.playCursor();
            }
        }
    } else {
        Vitsuno.Difficulty.WOptions_cursorRight.call(this, wrap);
    }
};

// ● カーソルを左に移動
Vitsuno.Difficulty.WOptions_cursorLeft = Window_Options.prototype.cursorLeft;
Window_Options.prototype.cursorLeft = function (wrap) {
    if (this.commandSymbol(this.index()) === 'difficulty') {
        if (this.isDifficultyEnabled()) {
            if ($gameSystem.previousDifficulty(false)) {
                this.redrawItem(this.findSymbol('difficulty'));
                SoundManager.playCursor();
            }
        }
    } else {
        Vitsuno.Difficulty.WOptions_cursorLeft.call(this, wrap);
    }
};

//-----------------------------------------------------------------------------
// Scene_Title
//-----------------------------------------------------------------------------

// ● シーン開始
Vitsuno.Difficulty.STitle_start = Scene_Title.prototype.start;
Scene_Title.prototype.start = function () {
    Vitsuno.Difficulty.STitle_start.call(this);
    SceneManager.removeDifficultyMutable();
};


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

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

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

(function () {

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

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

})();


code:
//=============================================================================
// Window Identifier
// by Shaz (based on Ace script by Rhyme)
// Last Updated: 2015.11.18
//=============================================================================

/*:
 * @plugindesc Shows the name of the windows while holding CTRL.
 * @author Shaz, Rhyme
 *
 * @param Font Size
 * @desc Font Size for window names
 * @default 28
 *
 * @param Font Color
 * @desc Color of text for window names (based on windowskin)
 * @default 0
 *
 * @help
 *
 * Hold the CTRL key in a scene to have window names pop up.
 * Remember to disable this on your game's final release!
 *
 */
/*:ja
 * @plugindesc CTRLを押している間、ウィンドウ名を表示させます。
 * @author Shaz, Rhyme
 *
 * @param Font Size
 * @desc ウィンドウ名のフォントサイズを指定します。
 * @default 28
 *
 * @param Font Color
 * @desc ウィンドウ名テキストのカラーを指定します。(ウィンドウスキンに基づく)
 * @default 0
 *
 * @help
 *
 * CTRLキーを押している間、ウィンドウ名がポップアップします。
 * テストプレイや前後のエディットに役立つプラグインです。
 * 特別なコマンドなどは不要で、プラグインをONにするだけで有効になります。
 *
 * ゲームの最終版を配布する前に、消すのを忘れないようにしてくださいね！
 *
 */

(function () {

  var parameters = PluginManager.parameters('WindowIdentifier');
  var fontSize = parseInt(parameters['Font Size'] || 28);
  var fontColor = parseInt(parameters['Font Color'] || 0);

  _Window_Base_createContents = Window_Base.prototype.createContents;
  Window_Base.prototype.createContents = function () {
    _Window_Base_createContents.call(this);
    if (!this._windowName) {
      this._windowName = new Sprite();
      this._windowName.bitmap = new Bitmap(500, this.lineHeight());
      this._windowName.bitmap.fontSize = fontSize;
      this._windowName.bitmap.textColor = fontColor;
      this._windowName.bitmap.drawText(this.constructor.toString().match(/function (\w*)/)[1], this.standardPadding(), this.standardPadding(), 500, 0);
      this.addChild(this._windowName);
      this._windowName.opacity = 0;
    }
  };

  _Window_Base_update = Window_Base.prototype.update;
  Window_Base.prototype.update = function () {
    _Window_Base_update.call(this);
    if (Input.isPressed('control')) {
      this._windowName.opacity += 16;
    } else {
      this._windowName.opacity -= 16;
    }
  };
})();


code:
/*:
 * Yami Engine Delta - Sideview Battler Enhancement
 *
 * @plugindesc v1.0.0 This plugin allows user to use any kind of sideview battler.
 * @author Yami Engine Delta [Dr.Yami]
 *
 * @param [Default Setting]
 * @default
 *
 * @param Default Frames
 * @desc Default frames number for each pose.
 * @default 3
 *
 * @param Default Speed
 * @desc Default speed for each pose. The higher number, the slower motion is.
 * @default 12
 *
 * @param Default Frame Width
 * @desc Default frame width.
 * @default 96
 *
 * @param Default Frame Height
 * @desc Default frame height.
 * @default 96
 *
 * @param Enable Weapon
 * @desc Showing weapon for battler.
 * @default false
 *
 * @help
 * There is no Plugin Command for this plugin.
 *
 * ============================================================================
 * Actors & Enemies Notetags
 *
 * <Sideview Battler: FILENAME>
 * Enable custom sideview battler for actor/enemy with battler set FILENAME.
 *
 * <Sideview Battler Default>
 * Make this battler use default kind of battler (MV's SV Battlers).
 *
 * <Sideview Battler Frames: X>
 * Change default number of frames per pose for current battler.
 *
 * <Sideview Battler Speed: X>
 * Change default speed per pose for current battler. The higher number, the
 * slower motion is.
 *
 * <Sideview Battler Size: WIDTH, HEIGHT>
 * Change the frame sizes.
 *
 * <Sideview Battler Weapon: FLAG>
 * Set weapon showing enable for battler. FLAG can be true or false.
 *
 * <Sideview Battler Motion: NAME, INDEX>
 * Add new motion (pose) for current battler, index is row number (start from
 * zero).
 *
 * <Sideview Battler Motion>
 *   Name: NAME
 *   Index: INDEX
 *   Loop
 *   Frames: X
 *   Speed: Y
 * </Sideview Battler Motion>
 * Add new motion (pose) for current battler.
 * Loop is for looping motion.
 * Frames and Speed is for custom frames and speed from the default ones.
 * Loop, Frames and Speed can be omitted.
 * ============================================================================
 * Notes
 *
 * 1. Frame will be started from 0 (first frame of the pose).
 * 2. All default motions to be setup:
 *    walk      wait    chant   guard   damage
 *    evade     thrust  swing   missile skill
 *    spell     item    escape  victory dying
 *    abnormal  sleep   dead
 * 3. All battlers should have the motion "walk". If any of default motions is
 *    not setup, the "other" motion will be used, "walk" will be used instead
 *    if "other" hasn't been setup.
 * 4. Current version only support animated enemies with Yanfly's Animated
 *    Sideview Enemies. This will be standalone on next version.
 * 5. When using with Yanfly's Animated Sideview Enemies, the sprite width and
 *    height should be set manually instead of 'auto'.
 * ============================================================================
 * Compatible
 *
 * The plugin should be placed under any of other Core script, such as YEP -
 * Core Engine.
 *
 * The plugin should be placed under YEP - Battle Engine Core and YEP -
 * Animated Sideview Enemies if used.
 * ============================================================================
 */
/*:ja
 * Yami Engine Delta - Sideview Battler Enhancement
 *
 * @plugindesc v1.0.0 様々なタイプのサイドビューバトラーを生成できます。
 * @author Yami Engine Delta [Dr.Yami]
 *
 * @param [Default Setting]
 * @default
 *
 * @param Default Frames
 * @desc 各ポーズのデフォルトフレーム数を設定します
 * @default 3
 *
 * @param Default Speed
 * @desc 各ポーズのデフォルトスピードを設定します。数値が高くなるほどモーションはスローになります。
 * @default 12
 *
 * @param Default Frame Width
 * @desc フレームのデフォルト幅を設定します。
 * @default 96
 *
 * @param Default Frame Height
 * @desc フレームのデフォルトの高さを設定します。
 * @default 96
 *
 * @param Enable Weapon
 * @desc バトラーの武器を表示します。
 * @default false
 *
 * @help
 * このプラグインには、プラグインコマンドはありません。
 *
 * ============================================================================
 * アクターとエネミーのNotetags
 *
 * <Sideview Battler: FILENAME>
 * "FILENAME"で指定したバトラーセットで、サイドビューのアクターや敵をカスタム
 * できます
 *
 * <Sideview Battler Default>
 * このバトラーには、デフォルトのバトラーが適用されます。
 *
 * <Sideview Battler Frames: X>
 * このバトラーの各ポーズのデフォルトフレーム値を X に指定できます。
 *
 * <Sideview Battler Speed: X>
 * このバトラーの各ポーズのデフォルトスピードを X に指定できます。
 * 数値が高くなるほどモーションはスローになります。
 *
 * <Sideview Battler Size: WIDTH, HEIGHT>
 * フレームのサイズを変更します。(WIDTH=幅, HEIGHT=高さ)
 *
 * <Sideview Battler Weapon: FLAG>
 * バトラーの武器の表示を切り替えます。"FLAG" のところに true 又は false を
 * 入力してください。
 *
 * <Sideview Battler Motion: NAME, INDEX>
 * このバトラーに新しいモーション(ポーズ)を追加します。INDEX のところには
 * 0 から始まる列番号を入力してください。
 *
 * <Sideview Battler Motion>
 *   Name: NAME
 *   Index: INDEX
 *   Loop
 *   Frames: X
 *   Speed: Y
 * </Sideview Battler Motion>
 * 新しいモーション(ポーズ)を追加します。
 * "Loop" はモーションのループ(反復)を起こします。
 * "Frames" と "Speed" は、フレーム数とスピードのカスタムに用います。
 * "Loop" "Frames" "Speed" は省くことができます。
 * ============================================================================
 * 注意
 *
 * 1. フレームは 0 からスタートします。(ポーズの最初のフレーム)
 * 2. デフォルトのモーション一覧
 *    walk(前進)  wait(待機)  chant(詠唱)  guard(防御)  damage(ダメージ)
 *    evade(回避)  thrust(突き) swing(振り)  missile(飛び道具)  skill(スキル)
 *    spell(魔法)  item(アイテム)  escape(逃げる)  victory（勝利)  dying(瀕死)
 *    abnormal(状態異常)  sleep(睡眠)   dead(戦闘不能)
 * 3. 全てのバトラーが "前進" のモーションを持っているようにしてください。
 *    デフォルトのモーションがどこか欠けていた場合は、"その他" のモーシ
 *    ョンが代わりに使われます。"その他" が設定されていない場合は "前進"
 *    が用いられます。
 * 4. 現行のバージョンでは、アニメーションが付与された敵については
 *    "Yanfly's Animated Sideview Enemies" によるものにしか有効ではありません。
 *    次回のアップデートバージョンではスタンドアロン型を予定しています。
 * 5. "Yanfly's Animated Sideview Enemies"と一緒に用いられた場合スプライトの
 *    幅と高さはオートではなく手動での設定となります。
 * ============================================================================
 * コンパチビリティ
 *
 * このプラグインはコアスクリプトの下に置くようにしてください。
 * 例えば「YEP - Core Engine」などです。
 *
 * 「YEP - Battle Engine Core」と「YEP - Animated Sideview Enemies」
 * を使用している場合、それらの下に置くようにしてください。
 * ============================================================================
 */
/**
 * @namespace SideviewBattler
 * @memberof YED
 */

var YED = YED || {};

// init SideviewBattler module
YED.SideviewBattler = {};

// Imported
var Imported = Imported || {};
Imported.YED_SideviewBattler = true;

/* globals YED: false */

(function ($SideviewBattler) {
    /**
     * Enum for RegExp, used to notetags
     *
     * @readonly
     * @enum {RegExp}
     * @memberof YED.SideviewBattler
     */
    var Regexp = {
        /**
         * Filename for battler
         */
        FILENAME: /<Sideview Battler:[ ]*(.*)>/i,

        /**
         * Default type of set for battler
         */
        DEFAULT_TYPE: /<Sideview Battler Default>/i,

        /**
         * Default frames
         */
        FRAMES: /<Sideview Battler Frames:[ ]*(\d+)>/i,

        /**
         * Default frames
         */
        SPEED: /<Sideview Battler Speed:[ ]*(\d+)>/i,

        /**
         * Frame sizes
         */
        SIZES: /<Sideview Battler Size:[ ]*(\d+),[ ]*(\d+)>/i,

        /**
         * Enable Weapon
         */
        WEAPON_ENABLE: /<Sideview Battler Weapon:[ ]*(true|false)>/i,

        /**
         * Motions setup
         */
        MOTION_QUICK: /<Sideview Battler Motion:[ ]*(.*),[ ]*(\d+)>/i,

        /**
         * Motions setup
         */
        MOTION_BEGIN: /<Sideview Battler Motion>/i,

        /**
         * Motions setup
         */
        MOTION_END: /<\/Sideview Battler Motion>/i,

        /**
         * Motions setup
         */
        MOTION_NAME: /Name:[ ]*(.*)/i,

        /**
         * Motions setup
         */
        MOTION_INDEX: /Index:[ ]*(\d+)/i,

        /**
         * Motions setup
         */
        MOTION_LOOP: /Loop/i,

        /**
         * Motions setup
         */
        MOTION_FRAMES: /Frames:[ ]*(\d+)/i,

        /**
         * Motions setup
         */
        MOTION_SPEED: /Speed:[ ]*(\d+)/i,
    };

    $SideviewBattler.Regexp = Regexp;
}(YED.SideviewBattler));

/* globals YED: false */

(function ($SideviewBattler) {
    /**
     * Shorten Dependencies
     */
    var Regexp = $SideviewBattler.Regexp;

    /**
     * Contains utility tools for module.
     *
     * @namespace Utils
     * @memberof YED.SideviewBattler
     */
    var Utils = {};

    /**
     * Contains module parsed parameters.
     *
     * @type {Object}
     * @memberOf YED.SideviewBattler.Utils
     */
    Utils.parameters = {};

    /**
     * Process parameters function.
     * Should be called with DataManager as current object.
     *
     * @function processParameters
     * @memberof YED.SideviewBattler.Utils
     */
    Utils.processParameters = function () {
        var parameters = PluginManager.parameters('YED_SideviewBattler'),
            result = Utils.parameters;

        result['Default Frames'] =
            Number(parameters['Default Frames'] || 0);

        result['Default Speed'] =
            Number(parameters['Default Speed'] || 0);

        result['Default Frame Width'] =
            Number(parameters['Default Frame Width'] || 0);

        result['Default Frame Height'] =
            Number(parameters['Default Frame Height'] || 0);

        result['Enable Weapon'] =
            eval(parameters['Enable Weapon'].toLowerCase());
    };

    /**
     * Process notetag function.
     * Should be called with DataManager as current object.
     *
     * @function processNotetag
     * @memberof YED.SideviewBattler.Utils
     */
    Utils.processNotetags = function () {
        var groups = [$dataActors, $dataEnemies],
            group, obj,
            notedata, line,
            helpers = {}; // multiline notetag

        for (var j = 0; j < groups.length; j++) {
            group = groups[j];

            for (var i = 1; i < group.length; i++) {
                obj = group[i];
                notedata = obj.note.split(/[\r\n]+/);

                Utils._processProperties.call(this, obj);
                Utils._processMethods.call(this, obj);

                for (var n = 0; n < notedata.length; n++) {
                    line = notedata[n];
                    Utils._processNotetag.call(this, obj, line, helpers);
                }
            }
        }
    };

    /**
     * Add new properties into object.
     *
     * @function _processProperties
     * @memberof YED.SideviewBattler.Utils
     * @param  {Object} obj Data object
     * @private
     */
    Utils._processProperties = function (obj) {
        obj._sideviewBattler = {
            filename: "",
            default: false,
            frames: Utils.parameters['Default Frames'],
            speed: Utils.parameters['Default Speed'],
            weapon: Utils.parameters['Enable Weapon'],
            sizes: [
                Utils.parameters['Default Frame Width'],
                Utils.parameters['Default Frame Height']
            ],
            motions: {}
        };
    };

    /**
     * Add new methods into object.
     *
     * @function _processMethods
     * @memberof YED.SideviewBattler.Utils
     * @param  {Object} obj Data object
     * @private
     */
    Utils._processMethods = function (obj) {
        obj.getSideviewBattler = Utils.getSideviewBattler;
        obj.isSideviewBattler = Utils.isSideviewBattler;
    };

    /**
     * Process notetag for object.
     *
     * @function _processNotetag
     * @memberof YED.SideviewBattler.Utils
     * @param  {Object} obj Data object
     * @param  {String} notetag Notetag
     * @private
     */
    Utils._processNotetag = function (obj, notetag, helpers) {
        var sideviewBattler = obj._sideviewBattler,
            match,
            motion;

        match = notetag.match(Regexp.FILENAME);
        if (match) {
            sideviewBattler.filename = String(match[1]);
        }

        match = notetag.match(Regexp.DEFAULT_TYPE);
        if (match) {
            sideviewBattler.default = true;
        }

        match = notetag.match(Regexp.FRAMES);
        if (match) {
            sideviewBattler.frames = Number(match[1]);
        }

        match = notetag.match(Regexp.SPEED);
        if (match) {
            sideviewBattler.speed = Number(match[1]);
        }

        match = notetag.match(Regexp.SIZES);
        if (match) {
            sideviewBattler.sizes[0] = Number(match[1]);
            sideviewBattler.sizes[1] = Number(match[2]);
        }

        match = notetag.match(Regexp.WEAPON_ENABLE);
        if (match) {
            sideviewBattler.weapon = eval(match[1].toLowerCase());
        }

        match = notetag.match(Regexp.MOTION_QUICK);
        if (match) {
            motion = {};

            motion.name = match[1].toLowerCase();
            motion.index = Number(match[2]);

            sideviewBattler.motions[motion.name] = motion;
        }

        match = notetag.match(Regexp.MOTION_BEGIN);
        if (match) {
            helpers.motionFlag = true;
            helpers.motion = {};
            return;
        }

        match = notetag.match(Regexp.MOTION_END);
        if (match) {
            motion = helpers.motion;

            helpers.motionFlag = false;
            sideviewBattler.motions[motion.name] = motion;
            return;
        }

        if (helpers.motionFlag) {
            motion = helpers.motion;

            match = notetag.match(Regexp.MOTION_NAME);
            if (match) {
                motion.name = match[1].toLowerCase();
            }

            match = notetag.match(Regexp.MOTION_INDEX);
            if (match) {
                motion.index = Number(match[1]);
            }

            match = notetag.match(Regexp.MOTION_LOOP);
            if (match) {
                motion.loop = true;
            }

            match = notetag.match(Regexp.MOTION_FRAMES);
            if (match) {
                motion.frames = Number(match[1]);
            }

            match = notetag.match(Regexp.MOTION_SPEED);
            if (match) {
                motion.speed = Number(match[1]);
            }
        }
    };

    /**
     * Get sideview battler infos.
     * Should be attached to actor/enemy object.
     *
     * @function getSideviewBattler
     * @memberof YED.SideviewBattler.Utils
     * @return {Object}
     */
    Utils.getSideviewBattler = function () {
        return this._sideviewBattler;
    };

    /**
     * Check if is sideview battler.
     * Should be attached to actor/enemy object.
     *
     * @function getSideviewBattler
     * @memberof YED.SideviewBattler.Utils
     * @return {Object}
     */
    Utils.isSideviewBattler = function () {
        return this._sideviewBattler.filename !== ""
            && !this._sideviewBattler.default;
    };

    $SideviewBattler.Utils = Utils;
}(YED.SideviewBattler));

/* globals YED: false */

/**
 * Pre-processes and notetag parsing
 */
(function ($SideviewBattler) {
    /**
     * Shorten Dependencies
     */
    var Utils = $SideviewBattler.Utils;

    /**
     * Aliasing methods
     */
    var _DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;

    /**
     * Extending: DataManager.isDatabaseLoaded
     *
     * Add notetags and parameters processing for module.
     */
    DataManager.isDatabaseLoaded = function () {
        var loaded = _DataManager_isDatabaseLoaded.call(this);

        if (!loaded) {
            return false;
        }

        Utils.processParameters.call(DataManager);
        Utils.processNotetags.call(DataManager);

        return true;
    };
}(YED.SideviewBattler));

(function () {
    Game_Battler.prototype.getBattler = function () {
        var battler;

        if (this.isActor()) {
            battler = this.actor();
        }

        if (this.isEnemy()) {
            battler = this.enemy();
        }

        return !!battler ? battler : null;
    };

    Game_Battler.prototype.getSideviewBattler = function () {
        var battler = this.getBattler();

        return !!battler ? battler.getSideviewBattler() : null;
    };

    Game_Battler.prototype.isSideviewBattler = function () {
        var battler = this.getBattler();

        return !!battler ? battler.isSideviewBattler() : false;
    };

    Game_Battler.prototype.isUseWeapon = function () {
        var sideviewBattler = this.getSideviewBattler();

        if (!this.isSideviewBattler()) {
            return true;
        }

        return sideviewBattler.weapon;
    };

    Game_Battler.prototype.getSideviewFilename = function () {
        var sideviewBattler = this.getSideviewBattler();

        if (!this.isSideviewBattler()) {
            return null;
        }

        return sideviewBattler.filename;
    };

    Game_Battler.prototype.getSideviewSizes = function () {
        var sideviewBattler = this.getSideviewBattler();

        if (!this.isSideviewBattler()) {
            return null;
        }

        return sideviewBattler.sizes;
    };

    Game_Battler.prototype.getSideviewMotions = function () {
        var sideviewBattler = this.getSideviewBattler();

        if (!this.isSideviewBattler()) {
            return null;
        }

        return sideviewBattler.motions;
    };

    Game_Battler.prototype.getFallbackMotion = function () {
        var motions = this.getSideviewMotions();

        if (!this.isSideviewBattler()) {
            return null;
        }

        if (!!motions.other) {
            return motions.other;
        }

        return motions.walk;
    };

    Game_Battler.prototype.getSideviewMotion = function (motionName) {
        var motions = this.getSideviewMotions();

        if (!motionName) {
            return null;
        }

        if (!this.isSideviewBattler()) {
            return null;
        }

        if (!motions[motionName]) {
            return this.getFallbackMotion();
        }

        return motions[motionName];
    };

    Game_Battler.prototype.getSideviewFrames = function (motionName) {
        var sideviewBattler = this.getSideviewBattler(),
            motion = this.getSideviewMotion(motionName);

        if (!this.isSideviewBattler()) {
            return null;
        }

        if (!!motion && !!motion.frames) {
            return motion.frames;
        }

        return sideviewBattler.frames;
    };

    Game_Battler.prototype.getSideviewSpeed = function (motionName) {
        var sideviewBattler = this.getSideviewBattler(),
            motion = this.getSideviewMotion(motionName);

        if (!this.isSideviewBattler()) {
            return null;
        }

        if (!!motion && !!motion.speed) {
            return motion.speed;
        }

        return sideviewBattler.speed;
    };
}());

(function () {
    /**
     * Aliasing methods
     */
    var _Game_Actor_battlerName
        = Game_Actor.prototype.battlerName;

    Game_Actor.prototype.battlerName = function () {
        if (this.isSideviewBattler()) {
            return this.getSideviewFilename();
        }

        return _Game_Actor_battlerName.call(this);
    };
}());

(function () {
    /**
     * Aliasing methods
     */
    var _Game_Enemy_battlerName
        = Game_Enemy.prototype.battlerName;

    Game_Enemy.prototype.battlerName = function () {
        if (this.isSideviewBattler()) {
            return this.getSideviewFilename();
        }

        return _Game_Enemy_battlerName.call(this);
    };
}());

(function () {
    /**
     * Aliasing methods
     */
    var _Sprite_Actor_initMembers
        = Sprite_Actor.prototype.initMembers;
    var _Sprite_Actor_setupWeaponAnimation
        = Sprite_Actor.prototype.setupWeaponAnimation;
    var _Sprite_Actor_startMotion
        = Sprite_Actor.prototype.startMotion;
    var _Sprite_Actor_forceMotion
        = Sprite_Actor.prototype.forceMotion;
    var _Sprite_Actor_motionSpeed
        = Sprite_Actor.prototype.motionSpeed;
    var _Sprite_Actor_updateFrame
        = Sprite_Actor.prototype.updateFrame;
    var _Sprite_Actor_updateMotionCount
        = Sprite_Actor.prototype.updateMotionCount;

    Sprite_Actor.prototype.initMembers = function () {
        _Sprite_Actor_initMembers.call(this);

        this._motionName = "";
    };

    Sprite_Actor.prototype.setupWeaponAnimation = function () {
        if (this._actor.isUseWeapon()) {
            _Sprite_Actor_setupWeaponAnimation.call(this);
            return;
        }

        this._actor.clearWeaponAnimation();
    };

    Sprite_Actor.prototype.startMotion = function (motionType) {
        if (this._actor.isSideviewBattler()) {
            this.startSideviewMotion(motionType);
            return;
        }

        _Sprite_Actor_startMotion.call(this, motionType);
    };

    Sprite_Actor.prototype.forceMotion = function (motionType) {
        if (this._actor.isSideviewBattler()) {
            this.forceSideviewMotion(motionType);
            return;
        }

        _Sprite_Actor_forceMotion.call(this, motionType);
    };

    Sprite_Actor.prototype.startSideviewMotion = function (motionType) {
        if (this._motionName !== motionType) {
            this._motionName = motionType;
            this._motionCount = 0;
            this._pattern = 0;
        }
    };

    Sprite_Actor.prototype.forceSideviewMotion = function (motionType) {
        this._motionName = motionType;
        this._motionCount = 0;
        this._pattern = 0;
    };

    Sprite_Actor.prototype.getCurrentMotion = function () {
        return this._actor.getSideviewMotion(this._motionName);
    };

    Sprite_Actor.prototype.frameSizes = function () {
        return this._actor.getSideviewSizes();
    };

    Sprite_Actor.prototype.motionFrames = function () {
        var motionName = this._motionName;

        if (this._actor.isSideviewBattler()) {
            return this._actor.getSideviewFrames(motionName);
        }

        return 3;
    };

    Sprite_Actor.prototype.motionSpeed = function () {
        var motionName = this._motionName;

        if (this._actor.isSideviewBattler()) {
            return this._actor.getSideviewSpeed(motionName);
        }

        return _Sprite_Actor_motionSpeed.call(this);
    };

    Sprite_Actor.prototype.updateFrame = function () {
        if (this._actor.isSideviewBattler()) {
            this.updateSideviewFrame();
            return;
        }

        _Sprite_Actor_updateFrame.call(this);
    };

    Sprite_Actor.prototype.updateSideviewFrame = function () {
        var bitmap = this._mainSprite.bitmap,
            motion = this.getCurrentMotion(),
            frameSizes = this.frameSizes();

        Sprite_Battler.prototype.updateFrame.call(this);

        if (bitmap) {
            var motionIndex = motion.index;
            var pattern = this._pattern;
            var cw = frameSizes[0];
            var ch = frameSizes[1];
            var cx = pattern;
            var cy = motionIndex;
            this._mainSprite.setFrame(cx * cw, cy * ch, cw, ch);
        }
    };

    Sprite_Actor.prototype.updateMotionCount = function () {
        if (this._actor.isSideviewBattler()) {
            this.updateSideviewMotionCount();
            return;
        }

        _Sprite_Actor_updateMotionCount.call(this);
    };

    Sprite_Actor.prototype.updateSideviewMotionCount = function () {
        var motion = this.getCurrentMotion(),
            speed = this.motionSpeed(),
            frames = this.motionFrames();

        if (!!motion && ++this._motionCount >= speed) {
            if (!!motion.loop) {
                this._pattern = (this._pattern + 1) % frames;
            } else if (this._pattern < frames - 1) {
                this._pattern++;
            } else {
                this.refreshMotion();
            }
            this._motionCount = 0;
        }
    };
}());

(function () {
    if (!Imported.YEP_X_AnimatedSVEnemies) {
        return;
    }
    /**
     * Aliasing methods
     */
    var _Sprite_Enemy_initMembers
        = Sprite_Enemy.prototype.initMembers;
    var _Sprite_Enemy_setupWeaponAnimation
        = Sprite_Enemy.prototype.setupWeaponAnimation;
    var _Sprite_Enemy_startMotion
        = Sprite_Enemy.prototype.startMotion;
    var _Sprite_Enemy_forceMotion
        = Sprite_Enemy.prototype.forceMotion;
    var _Sprite_Enemy_updateFrame
        = Sprite_Enemy.prototype.updateFrame;
    var _Sprite_Enemy_updateMotionCount
        = Sprite_Enemy.prototype.updateMotionCount;

    Sprite_Enemy.prototype.initMembers = function () {
        _Sprite_Enemy_initMembers.call(this);

        this._motionName = "";
    };

    Sprite_Enemy.prototype.setupWeaponAnimation = function () {
        if (this._enemy.isUseWeapon()) {
            _Sprite_Enemy_setupWeaponAnimation.call(this);
            return;
        }

        this._enemy.clearWeaponAnimation();
    };

    Sprite_Enemy.prototype.startMotion = function (motionType) {
        if (this._enemy.isSideviewBattler()) {
            this.startSideviewMotion(motionType);
            return;
        }

        _Sprite_Enemy_startMotion.call(this, motionType);
    };

    Sprite_Enemy.prototype.forceMotion = function (motionType) {
        if (this._enemy.isSideviewBattler()) {
            this.forceSideviewMotion(motionType);
            return;
        }

        _Sprite_Enemy_forceMotion.call(this, motionType);
    };

    Sprite_Enemy.prototype.startSideviewMotion = function (motionType) {
        if (this._motionName !== motionType) {
            this._motionName = motionType;
            this._motionCount = 0;
            this._pattern = 0;
        }
    };

    Sprite_Enemy.prototype.forceSideviewMotion = function (motionType) {
        this._motionName = motionType;
        this._motionCount = 0;
        this._pattern = 0;
    };

    Sprite_Enemy.prototype.getCurrentMotion = function () {
        return this._enemy.getSideviewMotion(this._motionName);
    };

    Sprite_Enemy.prototype.frameSizes = function () {
        return this._enemy.getSideviewSizes();
    };

    Sprite_Enemy.prototype.motionFrames = function () {
        var motionName = this._motionName;

        if (this._enemy.isSideviewBattler()) {
            return this._enemy.getSideviewFrames(motionName);
        }

        return 3;
    };

    Sprite_Enemy.prototype.motionSpeed = function () {
        var motionName = this._motionName;

        if (this._enemy.isSideviewBattler()) {
            return this._enemy.getSideviewSpeed(motionName);
        }

        return 12;
    };

    Sprite_Enemy.prototype.updateMotionCount = function () {
        if (this._enemy.isSideviewBattler()) {
            this.updateSideviewMotionCount();
            return;
        }

        _Sprite_Enemy_updateMotionCount.call(this);
    };

    Sprite_Enemy.prototype.updateSideviewMotionCount = function () {
        var motion = this.getCurrentMotion(),
            speed = this.motionSpeed(),
            frames = this.motionFrames();

        if (!!motion && ++this._motionCount >= speed) {
            if (!!motion.loop) {
                this._pattern = (this._pattern + 1) % frames;
            } else if (this._pattern < frames - 1) {
                this._pattern++;
            } else {
                this.refreshMotion();
            }
            this._motionCount = 0;
        }
    };

    Sprite_Enemy.prototype.updateFrame = function () {
        if (this._enemy.isSideviewBattler()) {
            if (Imported.YEP_X_AnimatedSVEnemies) {
                this.updateSideviewFrame();
                return;
            }

            this.updateSideviewFrame();
            return;
        }

        _Sprite_Enemy_updateFrame.call(this);
    };

    // compatible with YEP - Animated Sideview Enemies
    Sprite_Enemy.prototype.updateSideviewFrame = function () {
        var bitmap = this._mainSprite.bitmap,
            motion = this.getCurrentMotion(),
            frameSizes = this.frameSizes();

        Sprite_Battler.prototype.updateFrame.call(this);

        if (bitmap.width <= 0) {
            return;
        }

        this._effectTarget = this._mainSprite;

        var motionIndex = motion.index;
        var pattern = this._pattern;
        var cw = frameSizes[0];
        var ch = frameSizes[1];
        var cx = pattern;
        var cy = motionIndex;
        var cdh = 0;

        if (this._effectType === 'bossCollapse') {
            cdh = ch - this._effectDuration;
        }

        this.setFrame(cx * cw, cy * ch, cw, ch);
        this._mainSprite.setFrame(cx * cw, cy * ch, cw, ch - cdh);
        this.adjustMainBitmapSettings(bitmap);
        this.adjustSVShadowSettings();
    };
}());