code:
//=============================================================================
// FootstepSound.js
// ----------------------------------------------------------------------------
// (C) 2016 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 3.0.6 2020/12/27 ヘルプの文言を修正
// 3.0.5 2020/09/26 パラメータ「位相」のデフォルト値が100になっていたので0に修正
// 3.0.4 2020/09/23 本体v1.5系で動作するよう修正
// 3.0.3 2020/09/15 イベントの足音を初期状態でプレイヤーと同じにできるメモ欄を追加
// 3.0.2 2020/09/01 インターバルを2以上にしたとき、他の足音条件を満たしていても通常の足音が演奏されてしまう問題を修正
// 3.0.0 2020/08/09 足音データをプラグインパラメータで設定する仕様に変更しリファクタリング
//                  足音の間隔を歩行、ダッシュで別々に設定できる機能を追加
// 2.1.0 2019/02/02 イベントごとの足音を固有に設定できる機能を追加
// 2.0.0 2018/09/05 プレイヤーの足音を無効化するスイッチを指定できる機能を追加
//                  パラメータの型指定機能に対応
// 1.1.0 2017/06/23 立ち止まったときに足音演奏間隔をリセットする機能を追加
// 1.0.0 2016/02/18 初版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc 足音プラグイン
 * @author トリアコンタン
 *
 * @param EventRunningInvalid
 * @text イベント実行中無効
 * @desc イベント実行中は足音を無効にする。（ON/OFF）
 * @default false
 * @type boolean
 *
 * @param ResetIfStop
 * @text 立ち止まるとリセット
 * @desc 演奏間隔が設定されている場合、立ち止まることでリセットされます。（ON/OFF）
 * @default false
 * @type boolean
 *
 * @param InvalidSwitchId
 * @text 無効スイッチID
 * @desc 指定したスイッチがONのときプレイヤーの足音が無効になります。指定しない場合は常に有効になります。
 * @default 0
 * @type switch
 *
 * @param airship
 * @text 飛行船の足音セット
 * @desc 飛行船乗船時の足音セットです。
 * @type struct<SoundSet>
 * @default {"interval":"1","walk1":"","walk2":"","dash1":"","dash2":""}
 *
 * @param ship
 * @text 大型船の足音セット
 * @desc 大型船乗船時の足音セットです。
 * @type struct<SoundSet>
 * @default {"interval":"1","walk1":"","walk2":"","dash1":"","dash2":""}
 *
 * @param boat
 * @text 小型船の足音セット
 * @desc 小型船乗船時の足音セットです。
 * @type struct<SoundSet>
 * @default {"interval":"1","walk1":"","walk2":"","dash1":"","dash2":""}
 *
 * @param regionList
 * @text リージョン属性の足音セット
 * @desc 指定リージョンのタイルを通過したときの足音セットです。
 * @type struct<SoundSet>[]
 * @default []
 *
 * @param damageFloor
 * @text ダメージ床属性の足音セット
 * @desc ダメージ床属性のタイルを通過したときの足音セットです。
 * @type struct<SoundSet>
 * @default {"interval":"1","walk1":"","walk2":"","dash1":"","dash2":""}
 *
 * @param bush
 * @text 茂み属性の足音セット
 * @desc 茂み属性のタイルを通過したときの足音セットです。
 * @type struct<SoundSet>
 * @default {"interval":"1","walk1":"","walk2":"","dash1":"","dash2":""}
 *
 * @param counter
 * @text カウンター属性の足音セット
 * @desc カウンター属性のタイルを通過したときの足音セットです。
 * @type struct<SoundSet>
 * @default {"interval":"1","walk1":"","walk2":"","dash1":"","dash2":""}
 *
 * @param ladder
 * @text 梯子属性の足音セット
 * @desc 梯子属性のタイルを通過したときの足音セットです。
 * @type struct<SoundSet>
 * @default {"interval":"1","walk1":"","walk2":"","dash1":"","dash2":""}
 *
 * @param terrainTagList
 * @text 地形タグの足音セット
 * @desc 指定地形タグのタイルを通過したときの足音セットです。
 * @type struct<SoundSet>[]
 * @default []
 *
 * @param always
 * @text 通常時の足音セット
 * @desc 他の条件を満たしていないときの足音セットです。
 * @type struct<SoundSet>
 * @default {"interval":"1","walk1":"","walk2":"","dash1":"","dash2":""}
 *
 * @help 以下の状況下で指定した足音効果音を演奏します。
 * 数字の小さい方が優先度が高いです。
 * 1.  飛行船乗船時
 * 2.  大型船乗船時
 * 3.  小型船乗船時
 * 4.  指定リージョン通過時
 * 5.  ダメージ床属性通過時
 * 6.  茂み属性通過時
 * 7.  カウンター属性通過時
 * 8.  梯子属性通過時
 * 9.  指定地形タグ通過時
 * 10. 常に
 *
 * 足音が演奏されるのはプレイヤーのみですが、
 * 「移動ルートの指定」の「スクリプト」から以下を実行すると
 * イベントにも足音が演奏されるようになります。
 *
 * 足音を演奏する　：this.setStepSoundFlg(true);
 * 足音を演奏しない：this.setStepSoundFlg(false);
 *
 * イベントごとに固有に足音を設定したい場合、以下の通り指定してください。
 * <FootStep:Absorb1> // 足音に「Absorb1」が設定されます。
 * <足音:Absorb1>     // 同上
 * <FootStep>        // パラメータで設定した足音が演奏されます。
 * <足音>             // 同上
 * このメモ欄を設定するとスクリプト「this.setStepSoundFlg(true);」
 * を実行しなくてもデフォルトで足音が有効になります。
 *
 * プラグインコマンド詳細
 *  イベントコマンド「プラグインコマンド」から実行。
 *  （引数の間は半角スペースで区切る）
 *
 * 足音無効化 or FS_INVALID_SOUND
 *   一時的に全ての足音を無効にします。
 * 例：足音無効化
 *
 * 足音有効化 or FS_VALID_SOUND
 *   全ての足音を有効に戻します。
 * 例：足音有効化
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

/*~struct~SoundSet:
 * @param interval
 * @text 間隔
 * @desc 足音SEの演奏間隔(歩数)です。0を指定した場合、間隔による判定をしなくなります。
 * @type number
 * @default 1
 * @min 0
 *
 * @param id
 * @text リージョン、地形タグ
 * @desc リージョンもしくは地形タグの番号です。リージョンや地形タグ以外の設定では無視されます。
 * @type number
 * @default 0
 *
 * @param walk1
 * @text 歩行時の足音1
 * @desc 歩行時の足音1です。足音2と交互に演奏されます。
 * @type struct<Sound>
 * @default
 *
 * @param walk2
 * @text 歩行時の足音2
 * @desc 歩行時の足音2です。指定がない場合は足音1だけが演奏されます。
 * @type struct<Sound>
 * @default
 *
 * @param dash1
 * @text ダッシュ時の足音1
 * @desc ダッシュ時の足音1です。足音2と交互に演奏されます。ダッシュがない乗り物等ではこの設定は無視されます。
 * @type struct<Sound>
 * @default
 *
 * @param dash2
 * @text ダッシュ時の足音2
 * @desc ダッシュ時の足音2です。指定がない場合は足音1だけが演奏されます。
 * @type struct<Sound>
 * @default
 */

/*~struct~Sound:
 * @param name
 * @text ファイル名
 * @desc 足音SEのファイル名です。
 * @default
 * @require 1
 * @dir audio/se/
 * @type file
 *
 * @param volume
 * @text 音量
 * @desc 足音SEの音量です。
 * @type number
 * @default 90
 * @max 100
 *
 * @param pitch
 * @text ピッチ
 * @desc 足音SEのピッチです。
 * @type number
 * @default 100
 * @min 50
 * @max 150
 *
 * @param pan
 * @text 位相
 * @desc 足音SEの位相です。
 * @type number
 * @default 0
 * @min -100
 * @max 100
 *
 * @param interval
 * @text 間隔
 * @desc 足音SEの演奏間隔(歩数)です。足音の種別ごとに間隔を指定したい場合に使用します。
 * @type number
 * @default 0
 * @min 0
 */

(function () {
  "use strict";

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

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

  /**
   * Get database meta information.
   * @param object Database item
   * @param name Meta name
   * @returns {String} meta value
   */
  var getMetaValue = function (object, name) {
    return object.meta.hasOwnProperty(name)
      ? convertEscapeCharacters(object.meta[name])
      : null;
  };

  /**
   * Get database meta information.(for multi language)
   * @param object Database item
   * @param names Meta name array (for multi language)
   * @returns {String} meta value
   */
  var getMetaValues = function (object, names) {
    var metaValue;
    names.some(function (name) {
      metaValue = getMetaValue(object, name);
      return metaValue !== null;
    });
    return metaValue;
  };

  /**
   * Convert escape characters.(require any window object)
   * @param text Target text
   * @returns {String} Converted text
   */
  var convertEscapeCharacters = function (text) {
    var windowLayer = SceneManager._scene._windowLayer;
    return windowLayer
      ? windowLayer.children[0].convertEscapeCharacters(text.toString())
      : text;
  };

  var findListItem = function (id, targetList) {
    if (!Array.isArray(targetList)) {
      return null;
    }
    return targetList.filter(function (listItem) {
      return listItem.id === id;
    })[0];
  };

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

  Game_Interpreter.prototype.pluginCommandFootstep = function (command, args) {
    switch (getCommandName(command)) {
      case "FS_INVALID_SOUND":
      case "足音無効化":
        $gameSystem.footstepDisable = true;
        break;
      case "FS_VALID_SOUND":
      case "足音有効化":
        $gameSystem.footstepDisable = false;
        break;
    }
  };

  //=============================================================================
  // Game_CharacterBase
  //  足音効果音の演奏処理を追加します。
  //=============================================================================
  var _Game_CharacterBase_initMembers =
    Game_CharacterBase.prototype.initMembers;
  Game_CharacterBase.prototype.initMembers = function () {
    _Game_CharacterBase_initMembers.apply(this, arguments);
    this.setStepSoundFlg(false);
    this._stepToggle = null;
    this.resetStepCountForSound();
  };

  Game_CharacterBase.prototype.resetStepCountForSound = function () {
    this._stepCountForSound = null;
  };

  var _Game_CharacterBase_increaseSteps =
    Game_CharacterBase.prototype.increaseSteps;
  Game_CharacterBase.prototype.increaseSteps = function () {
    _Game_CharacterBase_increaseSteps.apply(this, arguments);
    if (this.isInvalidFootStepSound()) {
      return;
    }
    var soundsHash = [
      { key: "airship", condition: this.isInAirship.bind(this) },
      { key: "ship", condition: this.isInShip.bind(this) },
      { key: "boat", condition: this.isInBoat.bind(this) },
      {
        key: "regionList",
        condition: findListItem.bind(this, this.regionId()),
      },
      { key: "damageFloor", condition: this.isOnDamageFloor.bind(this) },
      { key: "bush", condition: this.isOnBush.bind(this) },
      { key: "counter", condition: this.isOnCounter.bind(this) },
      { key: "ladder", condition: this.isOnLadder.bind(this) },
      {
        key: "terrainTagList",
        condition: findListItem.bind(this, this.terrainTag()),
      },
      { key: "always", condition: this.noCondition.bind(this) },
    ];
    soundsHash.some(
      function (data) {
        return this.updateStepSound(data.key, data.condition);
      }.bind(this)
    );
  };

  Game_CharacterBase.prototype.isInvalidFootStepSound = function () {
    return (
      !this.isPlayStepSound() ||
      $gameSystem.footstepDisable ||
      ($gameMap.isEventRunning() && param.EventRunningInvalid)
    );
  };

  Game_CharacterBase.prototype.updateStepSound = function (typeKey, condition) {
    var soundParam = this.findSoundParam(typeKey, condition);
    if (!soundParam) {
      return false;
    }
    this._stepCountForSound++;
    if (this.checkInterval(soundParam)) {
      var se = this.findStepSound(soundParam);
      if (se && se.hasOwnProperty("name") && this.checkInterval(se)) {
        this.playStepSound(se);
      }
    }
    return true;
  };

  Game_CharacterBase.prototype.playStepSound = function (se) {
    AudioManager.playSe(se);
    this._stepToggle = !this._stepToggle;
  };

  Game_CharacterBase.prototype.checkInterval = function (targetObject) {
    var interval = targetObject.interval;
    if (!interval) {
      return true;
    }
    return this._stepCountForSound % interval === 0;
  };

  Game_CharacterBase.prototype.findSoundParam = function (typeKey, condition) {
    var data = param[typeKey];
    if (!data) {
      return null;
    }
    var result = condition(data);
    if (!result) {
      return null;
    }
    return Array.isArray(data) ? result : data;
  };

  Game_CharacterBase.prototype.findStepSound = function (soundHash) {
    var soundBaseKey = this.isDashing() ? "dash" : "walk";
    var soundKey = soundBaseKey + (this._stepToggle ? "2" : "1");
    return soundHash[soundKey] || soundHash[soundBaseKey + "1"] || null;
  };

  Game_CharacterBase.prototype.noCondition = function () {
    return true;
  };

  Game_CharacterBase.prototype.isOnDamageFloor = function () {
    return $gameMap.isDamageFloor(this.x, this.y);
  };

  Game_CharacterBase.prototype.isOnCounter = function () {
    return $gameMap.isCounter(this.x, this.y);
  };

  Game_CharacterBase.prototype.isInBoat = function () {
    return false;
  };

  Game_CharacterBase.prototype.isInShip = function () {
    return false;
  };

  Game_CharacterBase.prototype.isInAirship = function () {
    return false;
  };

  Game_CharacterBase.prototype.isPlayStepSound = function () {
    return this._stepSoundFlg;
  };

  Game_CharacterBase.prototype.setStepSoundFlg = function (value) {
    this._stepSoundFlg = !!value;
  };

  //=============================================================================
  // Game_Player
  //  キャラクターごとの足音演奏取得
  //=============================================================================
  Game_Player.prototype.isPlayStepSound = function () {
    return !$gameSwitches.value(param.InvalidSwitchId);
  };

  var _Game_Player_updateNonmoving = Game_Player.prototype.updateNonmoving;
  Game_Player.prototype.updateNonmoving = function (wasMoving) {
    _Game_Player_updateNonmoving.apply(this, arguments);
    if (!wasMoving && param.ResetIfStop) {
      this.resetStepCountForSound();
    }
  };

  var _Game_Event_initialize = Game_Event.prototype.initialize;
  Game_Event.prototype.initialize = function () {
    _Game_Event_initialize.apply(this, arguments);
    this._footStepSeName =
      getMetaValues(this.event(), ["FootStep", "足音"]) || null;
    if (this._footStepSeName) {
      this.setStepSoundFlg(true);
      name;
    }
  };

  var _Game_Event_findStepSound = Game_Event.prototype.findStepSound;
  Game_Event.prototype.findStepSound = function (soundHash) {
    var se = _Game_Event_findStepSound.apply(this, arguments);
    if (se && this._footStepSeName !== true) {
      return {
        name: this._footStepSeName,
        volume: se.volume,
        pitch: se.pitch,
        pan: se.pan,
      };
    } else {
      return se;
    }
  };

  //=============================================================================
  // Game_System
  //  足音効果音の有効無効設定を追加定義します。
  //=============================================================================
  var _Game_System_initialize = Game_System.prototype.initialize;
  Game_System.prototype.initialize = function () {
    _Game_System_initialize.apply(this, arguments);
    this.footstepDisable = null;
  };
})();


code:
//=============================================================================
// Foreground.js
//=============================================================================

/*:
 * @plugindesc display foreground tiling sprite
 * @author Sasuke KANNAZUKI (thanks to Yoji Ojima)
 *
 * @help  This plugin does not provide plugin commands.
 *
 * 'foreground' is like a parallax that displays over the map.
 * put bitmap file at img/parallaxes.
 *
 * Map Note:
 *  write down following 5 settings at map's note.
 *  <fgName:name>     name is the string, file name of tiling sprite.
 *    if the name starts '!', it is regarded as "foreground zero".
 *    the filename is searched from img/parallaxes.
 *  <fgLoopX:number>  number is the flag of loop x. 0:no 1:yes
 *    if this is not written on the note, it'll be 0(=no).
 *  <fgLoopY:number>  number is the flag of loop y. 0:no 1:yes
 *    if this is not written on the note, it'll be 0(=no).
 *  <fgSx:number>     number is x scroll speed.
 *    when it doesn't loop x, this is ignored.
 *    if this is not written on the note, it'll be 0.
 *  <fgSy:number>     number is y scroll speed.
 *    when it doesn't loop y, this is ignored.
 *    if this is not written on the note, it'll be 0.
 *
 * Ex.
 * <fgName:sample1><fgLoopX:1><fgLoopY:1>
 *
 * <fgName:!sample1>
 */

/*:ja
 * @plugindesc マップに合わせてスクロールする近景の設定
 * @author 神無月サスケ (thanks to Yoji Ojima)
 *
 * @help このプラグインにプラグインコマンドはありません。
 * 近景(foreground)は、マップの上に表示される遠景のようなものです。
 * 使用する画像ファイルは、img/parallaxes に置いてください。
 *
 * マップのメモ:
 *  以下の5項目を書いてください(設定項目は、遠景と似ています)。
 *  <fgName:ファイル名> 前景として使うファイル名です（拡張子なし）
 *    名前が '!'で始まる場合、遠景同様視差ゼロとなります。
 *    ファイルは img/parallaxes に置いてください
 *  <fgLoopX:数字> X座標にループするかどうか  (0:no 1:yes)。
 *    省略時は0(=no)になります。
 *  <fgLoopY:number> Y座標にループするかどうか  (0:no 1:yes)。
 *    省略時は0(=no)になります。
 *  <fgSx:数字>    X座標のスクロール速度です
 *    X座標にループしない場合は無視されます。
 *    省略時は0になります。
 *  <fgSy:数字>    Y座標のスクロール速度です
 *    Y座標にループしない場合は無視されます。
 *    省略時は0になります。
 *
 * 例：
 * <fgName:sample1><fgLoopX:1><fgLoopY:1>
 * sample1.png が前景になり、斜め上にループします。
 *
 * <fgName:!sample1>
 * 視差ゼロで!sample1.png が表示されます。
 */

(function () {
  //
  // check zero foreground or not.
  //
  ImageManager.isZeroForeground = function (filename) {
    return filename.charAt(0) === "!";
  };

  //
  // map initialization
  //
  var _Game_Map_initialize = Game_Map.prototype.initialize;
  Game_Map.prototype.initialize = function () {
    _Game_Map_initialize.call(this);
    this.initForeground();
  };

  Game_Map.prototype.initForeground = function () {
    this._foregroundDefined = true;
    this._foregroundName = "";
    this._foregroundZero = false;
    this._foregroundLoopX = false;
    this._foregroundLoopY = false;
    this._foregroundSx = 0;
    this._foregroundSy = 0;
    this._foregroundX = 0;
    this._foregroundY = 0;
  };

  //
  // if foreground is undefined, initialize it.
  //
  Game_Map.prototype.guardForeground = function () {
    if (!this._foregroundDefined) {
      this.initForeground();
    }
  };

  //
  // an accessor
  //
  Game_Map.prototype.foregroundName = function () {
    this.guardForeground();
    return this._foregroundName;
  };

  //
  // set foreground by reading map's note.
  //
  var _Game_Map_setup = Game_Map.prototype.setup;
  Game_Map.prototype.setup = function (mapId) {
    _Game_Map_setup.call(this, mapId);
    this.setupForeground();
  };

  Game_Map.prototype.setupForeground = function () {
    this._foregroundName = $dataMap.meta.fgName || "";
    this._foregroundZero = ImageManager.isZeroForeground(this._foregroundName);
    this._foregroundLoopX = !!$dataMap.meta.fgLoopX;
    this._foregroundLoopY = !!$dataMap.meta.fgLoopY;
    this._foregroundSx = Number($dataMap.meta.fgSx) || 0;
    this._foregroundSy = Number($dataMap.meta.fgSy) || 0;
    this._foregroundX = 0;
    this._foregroundY = 0;
  };

  //
  // to display foreground
  //
  var _Game_Map_setDisplayPos = Game_Map.prototype.setDisplayPos;
  Game_Map.prototype.setDisplayPos = function (x, y) {
    _Game_Map_setDisplayPos.call(this, x, y);
    this.guardForeground();
    if (this.isLoopHorizontal()) {
      this._foregroundX = x;
    } else {
      this._foregroundX = this._displayX;
    }
    if (this.isLoopVertical()) {
      this._foregroundY = y;
    } else {
      this._foregroundY = this._displayY;
    }
  };

  Game_Map.prototype.foregroundOx = function () {
    this.guardForeground();
    if (this._foregroundZero) {
      return this._foregroundX * this.tileWidth();
    } else if (this._foregroundLoopX) {
      return (this._foregroundX * this.tileWidth()) / 2;
    } else {
      return 0;
    }
  };

  Game_Map.prototype.foregroundOy = function () {
    this.guardForeground();
    if (this._foregroundZero) {
      return this._foregroundY * this.tileHeight();
    } else if (this._foregroundLoopY) {
      return (this._foregroundY * this.tileHeight()) / 2;
    } else {
      return 0;
    }
  };

  //
  // to scroll foreground
  //
  var _Game_Map_scrollDown = Game_Map.prototype.scrollDown;
  Game_Map.prototype.scrollDown = function (distance) {
    var lastY = this._displayY;
    _Game_Map_scrollDown.call(this, distance);
    this.guardForeground();
    if (this.isLoopVertical()) {
      if (this._foregroundLoopY) {
        this._foregroundY += distance;
      }
    } else if (this.height() >= this.screenTileY()) {
      var displayY = Math.min(
        lastY + distance,
        this.height() - this.screenTileY()
      );
      this._foregroundY += displayY - lastY;
    }
  };

  var _Game_Map_scrollLeft = Game_Map.prototype.scrollLeft;
  Game_Map.prototype.scrollLeft = function (distance) {
    var lastX = this._displayX;
    _Game_Map_scrollLeft.call(this, distance);
    this.guardForeground();
    if (this.isLoopHorizontal()) {
      if (this._foregroundLoopX) {
        this._foregroundX -= distance;
      }
    } else if (this.width() >= this.screenTileX()) {
      var displayX = Math.max(lastX - distance, 0);
      this._foregroundX += displayX - lastX;
    }
  };

  var _Game_Map_scrollRight = Game_Map.prototype.scrollRight;
  Game_Map.prototype.scrollRight = function (distance) {
    var lastX = this._displayX;
    _Game_Map_scrollRight.call(this, distance);
    this.guardForeground();
    if (this.isLoopHorizontal()) {
      if (this._foregroundLoopX) {
        this._foregroundX += distance;
      }
    } else if (this.width() >= this.screenTileX()) {
      var displayX = Math.min(
        lastX + distance,
        this.width() - this.screenTileX()
      );
      this._foregroundX += displayX - lastX;
    }
  };

  var _Game_Map_scrollUp = Game_Map.prototype.scrollUp;
  Game_Map.prototype.scrollUp = function (distance) {
    var lastY = this._displayY;
    _Game_Map_scrollUp.call(this, distance);
    this.guardForeground();
    if (this.isLoopVertical()) {
      if (this._foregroundLoopY) {
        this._foregroundY -= distance;
      }
    } else if (this.height() >= this.screenTileY()) {
      var displayY = Math.max(lastY - distance, 0);
      this._foregroundY += displayY - lastY;
    }
  };

  //
  // update foreground
  //
  var _Game_Map_update = Game_Map.prototype.update;
  Game_Map.prototype.update = function (sceneActive) {
    _Game_Map_update.call(this, sceneActive);
    this.updateForeground();
  };

  Game_Map.prototype.updateForeground = function () {
    this.guardForeground();
    if (this._foregroundLoopX) {
      this._foregroundX += this._foregroundSx / this.tileWidth() / 2;
    }
    if (this._foregroundLoopY) {
      this._foregroundY += this._foregroundSy / this.tileHeight() / 2;
    }
  };

  //
  // sprites
  //
  var _Spriteset_Map_createLowerLayer =
    Spriteset_Map.prototype.createLowerLayer;
  Spriteset_Map.prototype.createLowerLayer = function () {
    _Spriteset_Map_createLowerLayer.call(this);
    this.createForeground();
  };

  var _Spriteset_Map_update = Spriteset_Map.prototype.update;
  Spriteset_Map.prototype.update = function () {
    _Spriteset_Map_update.call(this);
    this.updateForeground();
  };

  Spriteset_Map.prototype.createForeground = function () {
    this._foreground = new TilingSprite();
    this._foreground.move(0, 0, Graphics.width, Graphics.height);
    // in order to display under the weather sprites:
    this._baseSprite.removeChild(this._weather);
    this._baseSprite.addChild(this._foreground);
    this._baseSprite.addChild(this._weather);
  };

  Spriteset_Map.prototype.updateForeground = function () {
    if (this._foregroundName !== $gameMap.foregroundName()) {
      this._foregroundName = $gameMap.foregroundName();
      this._foreground.bitmap = ImageManager.loadParallax(this._foregroundName);
    }
    if (this._foreground.bitmap) {
      this._foreground.origin.x = $gameMap.foregroundOx();
      this._foreground.origin.y = $gameMap.foregroundOy();
    }
  };
})();

repo_name: dazed/translations

license: unknown


code:
/*---------------------------------------------------------------------------*
 * 2017/04/13 kido
 * https://kido0617.github.io/
 *---------------------------------------------------------------------------*/

/*:
 * @plugindesc 全アイテム取得プラグイン
 * @author kido
 *
 * @help
 *   Plug-in to get all weapons, armors, items
 * plugin command:
 *   GetAllItems item 99      # Earn 99 items for all items
 *   GetAllItems armor 1      # Earn 99 armors for all items
 *   GetAllItems weapon 1     # Earn 99 weapons for all items
 */

/*:ja
 * @plugindesc 全アイテム取得プラグイン
 * @author kido
 *
 * @help
 *   全武器、防具、アイテムを取得するプラグイン
 * プラグインコマンド:
 *   GetAllItems item 99      # 全アイテムを99個獲得
 *   GetAllItems armor 1      # 全防具を1個獲得
 *   GetAllItems weapon 1     # 全武器を1個獲得
 */

(function () {
  var _Game_Interpreter_pluginCommand =
    Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function (command, args) {
    _Game_Interpreter_pluginCommand.call(this, command, args);
    if (command === "GetAllItems") {
      switch (args[0]) {
        case "item":
          getAlls($dataItems, Number(args[1]));
          break;
        case "armor":
          getAlls($dataArmors, Number(args[1]));
          break;
        case "weapon":
          getAlls($dataWeapons, Number(args[1]));
          break;
      }
    }
  };

  function getAlls(data, num) {
    for (var i = 1; i < data.length; i++) {
      if (data[i].name == "") continue;
      $gameParty.gainItem(data[i], num);
    }
  }
})();


code:
//
//  入手インフォメーション ver1.15
//
// ------------------------------------------------------
// Copyright (c) 2016 Yana
// Released under the MIT license
// http://opensource.org/licenses/mit-license.php
// ------------------------------------------------------
//
// author Yana
//

var Imported = Imported || {};
Imported["GetInformation"] = 1.15;

if (!Imported.CommonPopupCore) {
  console.error("CommonPopupCoreを導入してください。");
}
/*:
 * @plugindesc ver1.15/アイテムの入手などにスライドアニメするインフォメーションを追加するプラグインです。
 * @author Yana
 *
 * @param Info Disable Switch Id
 * @desc 入手インフォメーションを無効化するためのスイッチのIDです。
 * このスイッチがONの時、インフォメーションが無効化されます。
 * @default 10
 *
 * @param Use Battle Info
 * @desc 入手インフォメーションを戦闘中に使用するかの設定です。
 * true/falseで設定してください。
 * @default true
 *
 * @param Use Rewards Info
 * @desc 戦利品を入手インフォメーションで表示するかの設定です。
 * true/falseで設定してください。
 * @default true
 *
 * @param Info Pattern
 * @desc 入手インフォメーションの動作パターンです。
 * Normal:普通 GrowUp:にょき Stretch:うにょーん
 * @default GrowUp
 *
 * @param Info Font Size
 * @desc 入手インフォメーションの文字サイズです。
 * @default 20
 *
 * @param Info Count
 * @desc 入手インフォメーションの表示時間です。
 * @default 120
 *
 * @param Info Delay
 * @desc 入手インフォメーションのディレイです。
 * 連続で設定された時、この数値の表示ディレイがかかります。
 * @default 20
 *
 * @param Info MoveWait
 * @desc 入手インフォメーションが完全に表示された状態の時間です。
 * @default 100
 *
 * @param Info MoveFade
 * @desc 入手インフォメーションのフェードの時間です。
 * @default 10
 *
 * @param Info Position
 * @desc 入手インフォメーションの表示位置です。
 * Upを指定すると、画面上部になります。
 * @default
 *
 * @param Info Slide Action
 * @desc 入手インフォメーションのスライド方向です。
 * Downを指定すると、上から下になります。
 * @default
 *
 * @param Info Sup X
 * @desc 入手インフォメーションの表示位置補正X座標です。
 * @default 0
 *
 * @param Info Sup Y
 * @desc 入手インフォメーションの表示位置補正Y座標です。
 * @default 0
 *
 * @param Info Width
 * @desc 入手インフォメーションの横幅です。
 * @default 816
 *
 * @param Gold Icon Index
 * @desc 所持金のアイコンとして使用するアイコンのインデックスです。
 * @default 314
 *
 * @param Actor Icon Start Index
 * @desc アクターのアイコンとして使用するアイコンの最初のインデックスです。
 * @default 320
 *
 * @param Reward Popup Delay
 * @desc 戦利品表示時に表示開始までにかけるディレイの数値です。
 * @default 0
 *
 * @param Battle Show List
 * @desc 戦闘中に表示するインフォメーションのリストです。item,gold,
 * exp,skill,params,level,abp,classLevelで指定してください。
 * @default item,gold,exp,skill,params,level,abp,classLevel
 *
 * @param Get Gold Text
 * @desc 所持金の増加で表示されるテキストです。。
 * _icon:上記で設定したアイコンインデックス _num:金額
 * @default 「\I[_icon]_num\C[14]\G\C[0]」 を\C[24]手に入れた！
 *
 * @param Lost Gold Text
 * @desc 所持金の減少で表示されるテキストです。
 * _icon:上記で設定したアイコンインデックス _num:金額
 * @default 「\I[_icon]_num\C[14]\G\C[0]」 を\C[2]失った・・・
 *
 * @param Get Item Text
 * @desc アイテムの増加で表示されるテキストです。
 * _icon:アイコン _name:名前　_desc1:解説1行目 _desc2:解説2行目
 * @default 「\I[_icon]_name」 を\C[24]手に入れた！\n\C[6]_desc1
 *
 * @param Lost Item Text
 * @desc アイテムの減少で表示されるテキストです。
 * _icon:アイコン _name:名前　_desc1:解説1行目 _desc2:解説2行目
 * @default 「\I[_icon]_name」 を\C[2]失った・・・\n\C[6]_desc1
 *
 * @param Get Item Text Num
 * @desc アイテム増加。2個以上。_icon:アイコン
 * _name:名前　_num:個数 _desc1:解説1行目 _desc2:解説2行目
 * @default 「\I[_icon]_name」 を\C[14]_num個\C[24]手に入れた！\n\C[6]_desc1
 *
 * @param Lost Item Text Num
 * @desc アイテム減少。2個以上。_icon:アイコン
 * _name:名前　_num:個数 _desc1:解説1行目 _desc2:解説2行目
 * @default 「\I[_icon]_name」を\C[14]_num個\C[2]失った・・・\n\C[6]_desc1
 *
 * @param Get Skill Text
 * @desc スキルの習得で表示されるテキストです。_actor:アクター名
 * _icon:アイコン _name:名前　_desc1:解説1行目 _desc2:解説2行目
 * @default _actorは「\I[_icon]_name」 を\C[24]覚えた！\n\C[6]_desc1
 *
 * @param Lost Skill Text
 * @desc スキルの忘却で表示されるテキストです。_actor:アクター名
 * _icon:アイコン _name:名前　_desc1:解説1行目 _desc2:解説2行目
 * @default _actorは「\I[_icon]_name」を \C[2]忘れてしまった・・・\n\C[6]_desc1
 *
 * @param Exp Up Text
 * @desc 経験値の増加で表示されるテキストです。
 * _actor:アクター名  _name:経験値の名前 _num:経験値
 * @default _actorは\C[14]_numポイント\C[0]の\C[4]_name\C[0]を\C[24]得た！
 *
 * @param Exp Down Text
 * @desc 経験値の減少で表示されるテキストです。
 * _actor:アクター名  _name:経験値の名前　_num:経験値
 * @default _actorは\C[14]_numポイント\C[0]の\C[4]_name\C[0]を\C[2]失った・・・
 *
 * @param Lv Up Text
 * @desc レベルの増加で表示されるテキストです。
 * _actor:アクター名  _name:レベルの名前 _num:上がったレベル
 * @default _actorは\C[4]_name\C[0]が\C[14]_numポイント\C[24]上がった！
 *
 * @param Lv Down Text
 * @desc レベルの減少で表示されるテキストです。
 * _actor:アクター名  _name:レベルの名前　_num:下がったレベル
 * @default _actorは\C[4]_name\C[0]が\C[14]_numポイント\C[2]下がった・・・
 *
 * @param Param Up Text
 * @desc 能力値の増加で表示されるテキストです。
 * _actor:アクター名  _name:能力値の名前 _num:上がったレベル
 * @default _actorは\C[4]_name\C[0]が\C[14]_numポイント\C[24]上がった！
 *
 * @param Param Down Text
 * @desc 能力値の減少で表示されるテキストです。
 * _actor:アクター名  _name:能力値の名前　_num:下がったレベル
 * @default _actorは\C[4]_name\C[0]が\C[14]_numポイント\C[2]下がった・・・
 *
 * @param Abp Up Text
 * @desc クラス経験値の増加で表示されるテキストです。
 * _actor:アクター名  _name:経験値の名前 _num:経験値
 * @default _actorは\C[14]_numポイント\C[0]の\C[4]_name\C[0]を\C[24]得た！
 *
 * @param Abp Down Text
 * @desc クラス経験値の減少で表示されるテキストです。
 * _actor:アクター名  _name:経験値の名前　_num:経験値
 * @default _actorは\C[14]_numポイント\C[0]の\C[4]_name\C[0]を\C[2]失った・・・
 *
 * @param Class Lv Up Text
 * @desc クラスレベルの増加で表示されるテキストです。 _class:クラス名
 * _actor:アクター名  _name:レベルの名前 _num:上がったレベル
 * @default _actorは\C[4]_classの_name\C[0]が\C[14]_numポイント\C[24]上がった！
 *
 * @param Class Lv Down Text
 * @desc クラスレベルの減少で表示されるテキストです。 _class:クラス名
 * _actor:アクター名  _name:レベルの名前　_num:下がったレベル
 * @default _actorは\C[4]_classの_name\C[0]が\C[14]_numポイント\C[2]下がった・・・
 *
 * @param Formation Lv Up Text
 * @desc 陣形レベルの増加で表示されるテキストです。
 * _name:陣形の名前　_num:上がったレベル
 * @default \C[4]_nameの熟練度\C[0]が\C[14]_numポイント\C[24]上がった！
 *
 * @param Formation Lv Max Text
 * @desc 陣形をマスターした時に表示されるテキストです。
 * _name:陣形の名前
 * @default \C[4]_name\C[0]を\C[14]マスターした！
 *
 * @help------------------------------------------------------
 * プラグインコマンド
 * ------------------------------------------------------
 * ShowInfo 表示したいテキスト
 * インフォ表示 表示したいテキスト
 *
 * ※スペースは必ず半角で入力してください。
 * ------------------------------------------------------
 * このプラグインには「汎用ポップアップベース」のプラグインが必要です。
 * 汎用ポップアップベースより下に配置してください。
 * また、それぞれの表示テキストに何も記載しない場合、そのインフォメーションを無効化できます。
 * ------------------------------------------------------
 * 使い方
 * ------------------------------------------------------
 * 導入するだけで動作します。
 * 詳細な設定は、プラグインパラメータを参照してください。
 *
 * 170524
 * それぞれのテキストの最初に追加することで、ポップアップ発生時にSEを追加する専用制御文字を追加しました。
 * _SE[名前[,音量,ピッチ,位相]]
 * ※音量、ピッチ、位相は省略可能です。省略した場合、音量=90,ピッチ=100，位相=0として扱われます。
 * 例：レベルアップのポップアップ時にSkill3のSEを鳴らす。
 * _SE[Skill3]_actorは\C[4]_name\C[0]が\C[14]_numポイント\C[24]上がった！
 * ------------------------------------------------------
 * 利用規約
 * ------------------------------------------------------
 * 当プラグインはMITライセンスで公開されています。
 * 使用に制限はありません。商用、アダルト、いずれにも使用できます。
 * 二次配布も制限はしませんが、サポートは行いません。
 * 著作表示は任意です。行わなくても利用できます。
 * 要するに、特に規約はありません。
 * バグ報告や使用方法等のお問合せはネ実ツクールスレ、または、Twitterにお願いします。
 * https://twitter.com/yanatsuki_
 * 素材利用は自己責任でお願いします。
 * ------------------------------------------------------
 * 更新履歴:
 * ver1.15:170525
 * 戦闘中にメッセージウィンドウが下以外の場合、ポップアップの位置がずれるバグを修正しました。
 * ポップアップ時にSEを再生する制御文字を追加しました。
 * 動作パターンをGrowUpに指定して、表示位置を上にした場合の動作を修正しました。
 * ver1.14:170216
 * アクター名の変換が正常に動作していなかったバグを修正しました。
 * ver1.131:170104
 * 特定の状況でエラーが発生することのあるバグを修正しました。
 * ver1.13:
 * 戦闘中のポップアップ位置を調整しました。
 * 戦闘終了時の戦利品表示にディレイをかける設定を追加しました。
 * 陣形レベルが上がった時にポップアップを表示する機能を追加しました。
 * ver1.12:
 * 利用規約をMITライセンスに変更しました。
 * 一度も仲間になっていないアクターに対してポップアップを表示すると、無限ループに陥るバグを修正しました。
 * ver1.11:
 * 動作パターンの設定を追加しました。
 * プラグインパラメータを追加しました。
 * ver1.10:
 * 処理内容を少し変更しました。
 * ヘルプを追加・修正しました。
 * 任意のテキストを表示するプラグインコマンドを追加しました。
 * ver1.09:
 * スキルを忘れさせた際のポップアップが表示されないバグを修正しました。
 * レベルアップ時やクラスレベルアップ時のスキル習得の表示位置を調整しました。
 * ver1.08:
 * 戦闘中の表示をexpとabpを無効化すると、経験値やABPが入らないバグを修正しました。
 * ver1.07:
 * インフォメーションを無効化する機能が正常に機能していなかったバグを修正しました。
 * 戦闘時に表示するインフォメーションを設定するBattle Show Listの設定項目を追加しました。
 * ver1.06:
 * 戦闘中のポップアップの位置が正常でなかったバグを修正しました。
 * var1.05:
 * 表示位置を補正するためのプラグインパラメータを追加しました。
 * 上から下へ動作する設定を追加しました。
 * var1.04:
 * 任意のテキストを渡せるように修正しました。
 * ver1.03:
 * ABPとクラスレベルのポップアップ処理を追加しました。
 * ver1.02:
 * レベルアップ処理でポップアップ表示が逆になっていたバグを修正しました。
 * ver1.01:
 * valueが0の状態でもポップアップしていたバグを修正しました。
 * YEP_CoreEngineとの競合回避処理を追加しました。
 * ver1.00:
 * 公開
 */

(function () {
  var parameters = PluginManager.parameters("GetInformation");
  var infoDisableSwitchId = Number(parameters["Info Disable Switch Id"] || 10);
  var getGoldText = String(parameters["Get Gold Text"]);
  var lostGoldText = String(parameters["Lost Gold Text"]);
  var getInfoText = String(parameters["Get Item Text"]);
  var lostInfoText = String(parameters["Lost Item Text"]);
  var getInfoTextNum = String(parameters["Get Item Text Num"]);
  var lostInfoTextNum = String(parameters["Lost Item Text Num"]);
  var getInfoSkillText = String(parameters["Get Skill Text"]);
  var lostInfoSkillText = String(parameters["Lost Skill Text"]);
  var ExpUpText = String(parameters["Exp Up Text"]);
  var ExpDownText = String(parameters["Exp Down Text"]);
  var lvUpText = String(parameters["Lv Up Text"]);
  var lvDownText = String(parameters["Lv Down Text"]);
  var ParamUpText = String(parameters["Param Up Text"]);
  var ParamDownText = String(parameters["Param Down Text"]);
  var infoFontSize = Number(parameters["Info Font Size"] || 20);
  var infoCount = Number(parameters["Info Count"] || 120);
  var infoDelay = Number(parameters["Info Delay"] || 20);
  var infoMoveWait = Number(parameters["Info MoveWait"] || 100);
  var infoMoveFade = Number(parameters["Info MoveFade"] || 20);
  var goldIconIndex = Number(parameters["Gold Icon Index"] || 314);
  var actorIconStartIndex = Number(parameters["Actor Icon Start Index"]);
  var useBattleInfo =
    String(parameters["Use Battle Info"] || "true") === "true";
  var useRewardsInfo =
    String(parameters["Use Rewards Info"] || "true") === "true";
  var infoSlideCount = 60;
  var infoPosition = String(parameters["Info Position"] || "");
  var infoSlideAction = String(parameters["Info Slide Action"] || "");
  var infoSupX = Number(parameters["Info Sup X"] || 0);
  var infoSupY = Number(parameters["Info Sup Y"] || 0);
  var infoPattern = parameters["Info Pattern"] || "Normal";
  var infoWidth = parameters["Info Width"] || 816;
  var rewardPopupDelay = Number(parameters["Reward Popup Delay"]);

  var abpUpText = String(parameters["Abp Up Text"]);
  var abpDownText = String(parameters["Abp Down Text"]);
  var clvUpText = String(parameters["Class Lv Up Text"]);
  var clvDownText = String(parameters["Class Lv Down Text"]);

  var fLvUpText = String(parameters["Formation Lv Up Text"]);
  var fLvMaxText = String(parameters["Formation Lv Max Text"]);

  var battleShowList = String(parameters["Battle Show List"]).split(",");

  var _gInfo_GInterpreter_pluginCommand =
    Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function (command, args) {
    _gInfo_GInterpreter_pluginCommand.call(this, command, args);
    if (command === "ShowInfo" || command === "インフォ表示") {
      CommonPopupManager.showInfo({}, args[0], null);
    }
  };

  CommonPopupManager.popEnable = function () {
    var useBattle = $gameParty.inBattle() ? useBattleInfo : true;
    return !$gameSwitches.value(infoDisableSwitchId) && useBattle;
  };

  // Change Gold
  var _gInfo_GInterpreter_command125 = Game_Interpreter.prototype.command125;
  Game_Interpreter.prototype.command125 = function () {
    CommonPopupManager._popEnable = CommonPopupManager.popEnable();
    var result = _gInfo_GInterpreter_command125.call(this);
    CommonPopupManager._popEnable = false;
    return result;
  };
  // Change Item
  var _gInfo_GInterpreter_command126 = Game_Interpreter.prototype.command126;
  Game_Interpreter.prototype.command126 = function () {
    CommonPopupManager._popEnable = CommonPopupManager.popEnable();
    var result = _gInfo_GInterpreter_command126.call(this);
    CommonPopupManager._popEnable = false;
    return result;
  };
  // Change Weapon
  var _gInfo_GInterpreter_command127 = Game_Interpreter.prototype.command127;
  Game_Interpreter.prototype.command127 = function () {
    CommonPopupManager._popEnable = CommonPopupManager.popEnable();
    var result = _gInfo_GInterpreter_command127.call(this);
    CommonPopupManager._popEnable = false;
    return result;
  };
  // Change Armor
  var _gInfo_GInterpreter_command128 = Game_Interpreter.prototype.command128;
  Game_Interpreter.prototype.command128 = function () {
    CommonPopupManager._popEnable = CommonPopupManager.popEnable();
    var result = _gInfo_GInterpreter_command128.call(this);
    CommonPopupManager._popEnable = false;
    return result;
  };
  // Change EXP
  var _gInfo_GInterpreter_command315 = Game_Interpreter.prototype.command315;
  Game_Interpreter.prototype.command315 = function () {
    CommonPopupManager._popEnable = CommonPopupManager.popEnable();
    var result = _gInfo_GInterpreter_command315.call(this);
    CommonPopupManager._popEnable = false;
    return result;
  };
  // Change Level
  var _gInfo_GInterpreter_command316 = Game_Interpreter.prototype.command316;
  Game_Interpreter.prototype.command316 = function () {
    CommonPopupManager._popEnable = CommonPopupManager.popEnable();
    var result = _gInfo_GInterpreter_command316.call(this);
    CommonPopupManager._popEnable = false;
    return result;
  };
  // Change Parameter
  var _gInfo_GInterpreter_command317 = Game_Interpreter.prototype.command317;
  Game_Interpreter.prototype.command317 = function () {
    CommonPopupManager._popEnable = CommonPopupManager.popEnable();
    var result = _gInfo_GInterpreter_command317.call(this);
    CommonPopupManager._popEnable = false;
    return result;
  };
  // Change Skill
  var _gInfo_GInterpreter_command318 = Game_Interpreter.prototype.command318;
  Game_Interpreter.prototype.command318 = function () {
    CommonPopupManager._popEnable = CommonPopupManager.popEnable();
    var result = _gInfo_GInterpreter_command318.call(this);
    CommonPopupManager._popEnable = false;
    return result;
  };

  Game_Actor.prototype.addParam = function (paramId, value) {
    Game_BattlerBase.prototype.addParam.call(this, paramId, value);
    if (CommonPopupManager._popEnable) {
      if ($gameParty.inBattle() && !battleShowList.contains("params")) {
        return;
      }
      CommonPopupManager.showInfo(
        {
          name: TextManager.param(paramId),
          value: value > 0,
        },
        value,
        "param",
        this.actorId()
      );
    }
  };
  var _gInfo_GParty_gainGold = Game_Party.prototype.gainGold;
  Game_Party.prototype.gainGold = function (amount) {
    _gInfo_GParty_gainGold.call(this, amount);
    if (CommonPopupManager._popEnable) {
      if ($gameParty.inBattle() && !battleShowList.contains("gold")) {
        return;
      }
      var hash = {
        name: "",
        iconIndex: goldIconIndex,
        description: "",
        value: Math.abs(amount),
      };
      CommonPopupManager.showInfo(hash, amount, "gold");
    }
  };
  var _gInfo_GParty_gainItem = Game_Party.prototype.gainItem;
  Game_Party.prototype.gainItem = function (item, amount, includeEquip) {
    var result = _gInfo_GParty_gainItem.call(this, item, amount, includeEquip);
    if (CommonPopupManager._popEnable) {
      if (this.inBattle() && !battleShowList.contains("item")) {
        return;
      }
      CommonPopupManager.showInfo(item, amount, "item");
    }
    if (Imported.YEP_CoreEngine) return result;
  };

  var _gInfo_GActor_learnSkill = Game_Actor.prototype.learnSkill;
  Game_Actor.prototype.learnSkill = function (skillId) {
    var isLearn = this.isLearnedSkill(skillId);
    _gInfo_GActor_learnSkill.call(this, skillId);
    if (CommonPopupManager._popEnable && !isLearn) {
      if ($gameParty.inBattle() && !battleShowList.contains("skill")) {
        return;
      }
      CommonPopupManager.showInfo(
        $dataSkills[skillId],
        1,
        "skill",
        this.actorId()
      );
    }
  };
  var _gInfo_GActor_forgetSkill = Game_Actor.prototype.forgetSkill;
  Game_Actor.prototype.forgetSkill = function (skillId) {
    var isLearn = this.isLearnedSkill(skillId);
    _gInfo_GActor_forgetSkill.call(this, skillId);
    if (CommonPopupManager._popEnable && isLearn) {
      if ($gameParty.inBattle() && !battleShowList.contains("skill")) {
        return;
      }
      CommonPopupManager.showInfo(
        $dataSkills[skillId],
        2,
        "skill",
        this.actorId()
      );
    }
  };
  var _gInfo_GActor_changeExp = Game_Actor.prototype.changeExp;
  Game_Actor.prototype.changeExp = function (exp, show) {
    var tExp = exp - this.currentExp();
    var plevel = this.level;
    var pSkills = this._skills.clone();
    if (CommonPopupManager._popEnable) {
      if (!$gameParty.inBattle() || battleShowList.contains("exp")) {
        CommonPopupManager.showInfo(
          {
            name: TextManager.exp,
            value: tExp > 0,
          },
          tExp,
          "exp",
          this.actorId()
        );
      }
    }
    var tempEnable = CommonPopupManager._popEnable;
    CommonPopupManager._popEnable = false;
    _gInfo_GActor_changeExp.call(this, exp, show);
    CommonPopupManager._popEnable = tempEnable;
    if (this.level - plevel !== 0) {
      var upLevel = this.level - plevel;
      if (CommonPopupManager._popEnable) {
        if ($gameParty.inBattle() && !battleShowList.contains("level")) {
          return;
        }
        CommonPopupManager.showInfo(
          {
            name: TextManager.level,
            value: upLevel > 0,
          },
          upLevel,
          "level",
          this.actorId()
        );
      }
    }
    if (CommonPopupManager._popEnable) {
      this._skills.forEach(
        function (skillId) {
          if (!pSkills.contains(skillId)) {
            CommonPopupManager.showInfo(
              $dataSkills[skillId],
              1,
              "skill",
              this.actorId()
            );
          }
        }.bind(this)
      );
    }
  };

  var _gInfo_GActor_changeLevel = Game_Actor.prototype.changeLevel;
  Game_Actor.prototype.changeLevel = function (level, show) {
    var upLevel = level - this.level;
    var tempEnable = CommonPopupManager._popEnable;
    var pSkills = this._skills.clone();
    CommonPopupManager._popEnable = false;
    _gInfo_GActor_changeLevel.call(this, level, show);
    CommonPopupManager._popEnable = tempEnable;
    if (CommonPopupManager._popEnable) {
      if ($gameParty.inBattle() && !battleShowList.contains("level")) {
        return;
      }
      CommonPopupManager.showInfo(
        {
          name: TextManager.level,
          value: upLevel > 0,
        },
        upLevel,
        "level",
        this.actorId()
      );

      this._skills.forEach(
        function (skillId) {
          if (!pSkills.contains(skillId)) {
            CommonPopupManager.showInfo(
              $dataSkills[skillId],
              1,
              "skill",
              this.actorId()
            );
          }
        }.bind(this)
      );
    }
  };

  if (Imported["VXandAceHybridClass"]) {
    // Change Class Level
    var _gInfo_GInterpreter_changeClassLevel =
      Game_Interpreter.prototype.changeClassLevel;
    Game_Interpreter.prototype.changeClassLevel = function (
      actorId,
      level,
      show
    ) {
      CommonPopupManager._popEnable = CommonPopupManager.popEnable();
      _gInfo_GInterpreter_changeClassLevel.call(this, actorId, level, show);
      CommonPopupManager._popEnable = false;
    };

    // Change Abp
    var _gInfo_GInterpreter_changeAbp = Game_Interpreter.prototype.changeAbp;
    Game_Interpreter.prototype.changeAbp = function (actorId, abp, show) {
      CommonPopupManager._popEnable = CommonPopupManager.popEnable();
      var result = _gInfo_GInterpreter_changeAbp.call(this, actorId, abp, show);
      CommonPopupManager._popEnable = false;
      return result;
    };

    var _gInfo_GActor_changeAbp = Game_Actor.prototype.changeAbp;
    Game_Actor.prototype.changeAbp = function (abp, show) {
      var tAbp = abp - this.currentAbp();
      var plevel = this.currentClassLevel();
      var pSkills = this._skills.clone();
      if (CommonPopupManager._popEnable) {
        if (!$gameParty.inBattle() || battleShowList.contains("abp")) {
          CommonPopupManager.showInfo(
            {
              name: TextManager.abp,
              value: tAbp > 0,
            },
            tAbp,
            "abp",
            this.actorId()
          );
        }
      }

      var tempEnable = CommonPopupManager._popEnable;
      CommonPopupManager._popEnable = false;

      _gInfo_GActor_changeAbp.call(this, abp, show);

      CommonPopupManager._popEnable = tempEnable;

      if (this.currentClassLevel() - plevel !== 0) {
        var upLevel = this.currentClassLevel() - plevel;
        if (CommonPopupManager._popEnable) {
          if ($gameParty.inBattle() && !battleShowList.contains("classLevel")) {
            return;
          }
          CommonPopupManager.showInfo(
            {
              name: TextManager.classLevel,
              value: upLevel > 0,
            },
            upLevel,
            "classLevel",
            this.actorId(),
            this.currentClass().name
          );
        }
      }
      if (CommonPopupManager._popEnable) {
        this._skills.forEach(
          function (skillId) {
            if (!pSkills.contains(skillId)) {
              CommonPopupManager.showInfo(
                $dataSkills[skillId],
                1,
                "skill",
                this.actorId()
              );
            }
          }.bind(this)
        );
      }
    };

    var _gInfo_GActor_changeClassLevel = Game_Actor.prototype.changeClassLevel;
    Game_Actor.prototype.changeClassLevel = function (level, show) {
      var upLevel = level - this.currentClassLevel();
      var tempEnable = CommonPopupManager._popEnable;
      var pSkills = this._skills.clone();
      CommonPopupManager._popEnable = false;
      _gInfo_GActor_changeClassLevel.call(this, level, show);
      CommonPopupManager._popEnable = tempEnable;
      if (CommonPopupManager._popEnable) {
        if ($gameParty.inBattle() && !battleShowList.contains("classLevel")) {
          return;
        }
        CommonPopupManager.showInfo(
          {
            name: TextManager.classLevel,
            value: upLevel > 0,
          },
          upLevel,
          "classLevel",
          this.actorId(),
          this.currentClass().name
        );

        this._skills.forEach(
          function (skillId) {
            if (!pSkills.contains(skillId)) {
              CommonPopupManager.showInfo(
                $dataSkills[skillId],
                1,
                "skill",
                this.actorId()
              );
            }
          }.bind(this)
        );
      }
    };
  }

  var __BManager_displayRewards = BattleManager.displayRewards;
  BattleManager.displayRewards = function () {
    __BManager_displayRewards.call(this);
    if (Imported["BattleFormation"]) {
      $gameTemp._popupDelay = rewardPopupDelay;
      var upLevel = this._upBfLevel;
      var item = $gameParty.battleFormation();
      if (CommonPopupManager.popEnable() && item) {
        if ($gameParty.inBattle() && !battleShowList.contains("formationLevel"))
          return;
        if ($gameParty.isMaxBfLevel(item.id)) {
          CommonPopupManager.showInfo(
            {
              name: item.name,
              iconIndex: item.iconIndex,
              value: "max",
            },
            upLevel,
            "formationLevel",
            null,
            null
          );
        } else {
          CommonPopupManager.showInfo(
            {
              name: item.name,
              iconIndex: item.iconIndex,
              value: upLevel > 0,
            },
            upLevel,
            "formationLevel",
            null,
            null
          );
        }
      }
      $gameTemp._popupDelay = 0;
    }
  };

  CommonPopupManager.showInfo = function (object, value, type, actor, c) {
    var text1 = null;
    if (value === 0) {
      return;
    }
    var se = { name: "", volume: 90, pitch: 100, pan: 0 };
    switch (type) {
      case "gold":
        text1 = getGoldText;
        if (value < 0) {
          text1 = lostGoldText;
        }
        break;
      case "item":
        text1 = getInfoText;
        if (value > 1) {
          text1 = getInfoTextNum;
        } else if (value === -1) {
          text1 = lostInfoText;
        } else if (value < -1) {
          text1 = lostInfoTextNum;
        }
        break;
      case "exp":
        text1 = object.value ? ExpUpText : ExpDownText;
        break;
      case "level":
        text1 = object.value ? lvUpText : lvDownText;
        break;
      case "abp":
        text1 = object.value ? abpUpText : abpDownText;
        break;
      case "classLevel":
        text1 = object.value ? clvUpText : clvDownText;
        break;
      case "param":
        text1 = object.value ? ParamUpText : ParamDownText;
        break;
      case "skill":
        text1 = value === 1 ? getInfoSkillText : lostInfoSkillText;
        break;
      case "formationLevel":
        text1 = object.value === "max" ? fLvMaxText : fLvUpText;
        break;
      default:
        text1 = value;
    }
    if (text1 === "") return;
    if (text1 === "null") return;
    text1 = text1.replace(
      /^_se\[(.+?)\]/i,
      function () {
        var tx = arguments[1].split(",");
        se.name = tx[0];
        if (tx[1]) se.volume = parseInt(tx[1], 10);
        if (tx[2]) se.pitch = parseInt(tx[2], 10);
        if (tx[3]) se.pan = parseInt(tx[3], 10);
        return "";
      }.bind(this)
    );
    var descs = object.description ? object.description.split(/\n/) : [];
    if (actor) {
      actor = $gameActors.actor(actor);
      text1 = text1.replace(/_actor/g, actor.name());
      text1 = text1.replace(
        /_aicon/g,
        actor.actorId() + actorIconStartIndex - 1
      );
    }
    if (c) {
      text1 = text1.replace(/_class/g, c);
    }
    text1 = text1.replace(/_name/g, object.name);
    text1 = text1.replace(/_icon/g, object.iconIndex);
    text1 = text1.replace(/_num/g, Math.abs(value));
    text1 = descs[0]
      ? text1.replace(/_desc1/g, descs[0])
      : text1.replace(/_desc1/g, "");
    text1 = descs[1]
      ? text1.replace(/_desc2/g, descs[1])
      : text1.replace(/_desc2/g, "");
    var texts = text1.split(/\n|\\n/);
    for (var i = 0; i < texts.length; i++) {
      var text = texts[i].replace(/\\C\[\d+\]/g, "");
      if (text === "") {
        delete texts[i];
      }
    }
    texts = texts.compact();
    var oneHeight = infoFontSize + 8;
    var height = oneHeight * texts.length;
    var bitmap = new Bitmap(Graphics.boxWidth, height);
    bitmap.fillRect(0, 0, infoWidth / 2, bitmap.height, "rgba(0,0,0,0.5)");
    bitmap.gradientFillRect(
      infoWidth / 2,
      0,
      infoWidth / 2,
      bitmap.height,
      "rgba(0,0,0,0.5)",
      "rgba(0,0,0,0)"
    );
    this.window().contents = bitmap;
    this.window().drawTextEx("\\FS[" + infoFontSize + "]", 0, 0);
    for (var i = 0; i < texts.length; i++) {
      var text = "\\FS[" + infoFontSize + "]" + texts[i];
      this.window().drawTextEx(text, 8, i * oneHeight);
    }
    var arg = this.setPopup([]);
    arg.bitmap = bitmap;
    arg.se = se;
    if (infoPattern === "GrowUp") {
      arg.x = 0 + infoSupX; //Graphics.boxWidth * -1 + infoSupX;
      arg.y = Graphics.boxHeight; // - height;
      arg.moveX = 0; //Graphics.boxWidth;
      arg.anchorX = 0;
      arg.anchorY = 1.0;
      arg.pattern = -2;
      if (infoSlideAction === "Down") arg.anchorY = 0;
    } else if (infoPattern === "Stretch") {
      arg.x = 0 + infoSupX;
      arg.y = Graphics.boxHeight - height;
      arg.moveX = 0;
      arg.anchorX = 0;
      arg.anchorY = 0;
      arg.pattern = -1;
    } else {
      arg.x = Graphics.boxWidth * -1 + infoSupX;
      arg.y = Graphics.boxHeight - height;
      arg.moveX = Graphics.boxWidth;
      arg.anchorX = 0;
      arg.anchorY = 0;
    }
    if (infoPosition === "Up") {
      arg.y = 0;
      if (infoPattern === "GrowUp" && infoSlideAction !== "Down")
        arg.y = height;
    }
    arg.y += infoSupY;
    if (
      $gameParty.inBattle() &&
      SceneManager._scene._messageWindow &&
      SceneManager._scene._messageWindow.active
    ) {
      if (SceneManager._scene._messageWindow._positionType === 2) {
        var my = SceneManager._scene._messageWindow.y;
        arg.y = Math.min(arg.y, my - height + height * arg.anchorY);
      }
    }
    if (
      SceneManager._scene._statusWindow &&
      SceneManager._scene._statusWindow.isOpen()
    ) {
      var sy = SceneManager._scene._statusWindow.y;
      arg.y = Math.min(arg.y, sy - height + height * arg.anchorY);
    }
    arg.moveY = 0;
    arg.count = infoCount;
    arg.fixed = false;
    arg.extend = [infoMoveFade, infoMoveWait];
    arg.slideCount = infoSlideCount;
    arg.delay = 0;
    arg.slideAction = infoSlideAction;
    if (!CommonPopupManager._tempCommonSprites)
      CommonPopupManager._tempCommonSprites = [];
    var array = CommonPopupManager._tempCommonSprites.compact();
    var ld = CommonPopupManager._lastIndex;
    if (ld !== undefined && ld >= 0 && array[ld]) {
      array.sort(function (a, b) {
        return a.delay > b.delay ? -1 : 1;
      });
      arg.delay = array[0].delay + infoDelay;
    }
    if ($gameTemp._popupDelay && arg.delay === 0)
      arg.delay += $gameTemp._popupDelay;
    CommonPopupManager._lastIndex = this._tempCommonSprites.setNullPos(arg);
  };

  var _gInfo_BManager_gainRewards = BattleManager.gainRewards;
  BattleManager.gainRewards = function () {
    CommonPopupManager._popEnable =
      CommonPopupManager.popEnable() && useRewardsInfo;
    $gameTemp._popupDelay = rewardPopupDelay;
    _gInfo_BManager_gainRewards.call(this);
    CommonPopupManager._popEnable = false;
    $gameTemp._popupDelay = 0;
  };
})();


code:
/*:ja
 * @plugindesc 放置していると画面がフリーズするのを修正
 * @author kido
 *
 * @help
 * このコアスクリプトの修正を取り込みます
 * https://github.com/rpgtkoolmv/corescript/pull/191
 *
 */

(function () {
  var _render = Graphics.render;
  Graphics.render = function (stage) {
    if (this._skipCount < 0) {
      this._skipCount = 0;
    }
    _render.call(this, stage);
  };
})();


code:
/*:

 * @plugindesc アイテムリスト、スキルリスト等の列数を改変します

 * @author ハーリー

 * @param ItemListCols
 * @desc アイテムリストの列数です。
 * @default 3

 * @param ItemFontSize
 * @desc アイテムリストのフォントサイズです。Default:28
 * @default 20

 * @param SkillListCols
 * @desc スキルリストの列数です。
 * @default 3

 * @param SkillFontSize
 * @desc スキルリストのフォントサイズです。Default:28
 * @default 20

 * @param ShopListCols
 * @desc ショップの購入リストの列数です。2以上の時、ステータスウィンドウが幅寄せされます
 * @default 2

 * @param ShopListFontSize
 * @desc ショップの購入リストのフォントサイズです。Default:28
 * @default 20

 * @param EquipListCols
 * @desc 装備画面時のアイテムの列数です。
 * @default 3

 * @help
 * アイテムリスト、スキルリスト、ショップの購入リストの列数を増やします。

 *列数を増やすことで、リストをスクロールする手間を軽減したり、
 *3段活用形のスキルなどを一行に表示したりすることができます。
 *
 *Author ハーリー
 *Version 1.00:2016.3.14
 *Version 1.01:2016.3.15　パラメータにEquipListColsを追加

 */

(function () {
  var parameters = PluginManager.parameters("Hurry_ListColsPlus");
  var ItemListCols = Number(parameters["ItemListCols"]);
  var ItemFontSize = Number(parameters["ItemFontSize"]);
  var SkillListCols = Number(parameters["SkillListCols"]);
  var SkillFontSize = Number(parameters["SkillFontSize"]);
  var ShopListCols = Number(parameters["ShopListCols"]);
  var ShopListFontSize = Number(parameters["ShopListFontSize"]);
  var EquipListCols = Number(parameters["EquipListCols"]);

  Window_ItemList.prototype.maxCols = function () {
    return ItemListCols;
  };

  Window_ItemList.prototype.spacing = function () {
    return 9;
  };
  Window_ItemList.prototype.drawItem = function (index) {
    var item = this._data[index];
    if (item) {
      var numberWidth = this.numberWidth();
      var rect = this.itemRect(index);
      rect.width -= this.textPadding();
      this.contents.fontSize = ItemFontSize;
      this.changePaintOpacity(this.isEnabled(item));
      this.drawItemName(item, rect.x, rect.y, rect.width - numberWidth);
      this.drawItemNumber(item, rect.x, rect.y, rect.width);
      this.changePaintOpacity(1);
    }
  };

  Window_ItemList.prototype.numberWidth = function () {
    return this.textWidth("\u00d70,0");
  };

  Window_ItemList.prototype.drawItemNumber = function (item, x, y, width) {
    if (this.needsNumber()) {
      this.changeTextColor(this.systemColor());
      this.drawText($gameParty.numItems(item), x, y, width, "right");
    }
  };

  Window_SkillList.prototype.maxCols = function () {
    return SkillListCols;
  };
  Window_SkillList.prototype.spacing = function () {
    return 9;
  };
  Window_SkillList.prototype.drawItem = function (index) {
    var skill = this._data[index];
    if (skill) {
      var costWidth = this.costWidth();
      var rect = this.itemRect(index);
      rect.width -= this.textPadding();
      this.contents.fontSize = SkillFontSize;
      this.changePaintOpacity(this.isEnabled(skill));
      this.drawItemName(skill, rect.x, rect.y, rect.width - costWidth);
      this.drawSkillCost(skill, rect.x, rect.y, rect.width);
      this.changePaintOpacity(1);
    }
  };
  Window_SkillList.prototype.costWidth = function () {
    return this.textWidth("\u00d70,0");
  };

  Window_EquipItem.prototype.maxCols = function () {
    return EquipListCols;
  };

  if (ShopListCols > 1) {
    Window_ShopBuy.prototype.maxCols = function () {
      return ShopListCols;
    };
    Window_ShopBuy.prototype.windowWidth = function () {
      return 576;
    };

    Scene_Shop.prototype.createStatusWindow = function () {
      var wx = this._numberWindow.width + 120;
      var wy = this._dummyWindow.y;
      var ww = Graphics.boxWidth - wx;
      var wh = this._dummyWindow.height;
      this._statusWindow = new Window_ShopStatus(wx, wy, ww, wh);
      this._statusWindow.hide();
      this.addWindow(this._statusWindow);
    };
  }
  Window_ShopBuy.prototype.drawItem = function (index) {
    var item = this._data[index];
    var rect = this.itemRect(index);
    var priceWidth = 96;
    rect.width -= this.textPadding();
    this.contents.fontSize = ShopListFontSize;
    this.changePaintOpacity(this.isEnabled(item));
    this.drawItemName(item, rect.x, rect.y, rect.width - priceWidth);
    this.changeTextColor(this.systemColor());
    this.drawText(
      this.price(item),
      rect.x + rect.width - priceWidth,
      rect.y,
      priceWidth,
      "right"
    );
    this.changePaintOpacity(true);
  };

  Window_ShopStatus.prototype.drawPossession = function (x, y) {
    var width = this.contents.width - this.textPadding() - x;
    var possessionWidth = this.textWidth("\u00d70,0");
    this.contents.fontSize = ShopListFontSize;
    this.changeTextColor(this.systemColor());
    this.drawText(TextManager.possession, x, y, width - possessionWidth);
    this.resetTextColor();
    this.drawText($gameParty.numItems(this._item), x, y, width, "right");
  };

  Window_ShopStatus.prototype.drawActorEquipInfo = function (x, y, actor) {
    var enabled = actor.canEquip(this._item);
    var width = this.contents.width - this.textPadding() - x;
    var possessionWidth = this.textWidth("\u00d70");
    this.changePaintOpacity(enabled);
    this.resetTextColor();
    this.contents.fontSize = ShopListFontSize;
    this.drawText(actor.name(), x, y, 168);
    var item1 = this.currentEquippedItem(actor, this._item.etypeId);
    if (enabled) {
      this.drawActorParamChange(x, y, actor, item1);
    }
    this.drawItemName(item1, x, y + this.lineHeight(), width - possessionWidth);
    this.changePaintOpacity(true);
  };
})();


code:
//=============================================================================
// ItemBook.js
//=============================================================================

/*:
 * @plugindesc Displays detailed statuses of items.
 * @author Yoji Ojima
 *
 * @param Unknown Data
 * @desc The index name for an unknown item.
 * @default ??????
 *
 * @param Price Text
 * @desc The text for "Price".
 * @default Price
 *
 * @param Equip Text
 * @desc The text for "Equip".
 * @default Equip
 *
 * @param Type Text
 * @desc The text for "Type".
 * @default Type
 *
 * @help
 *
 * Plugin Command:
 *   ItemBook open            # Open the item book screen
 *   ItemBook add weapon 3    # Add weapon #3 to the item book
 *   ItemBook add armor 4     # Add armor #4 to the item book
 *   ItemBook remove armor 5  # Remove armor #5 from the item book
 *   ItemBook remove item 6   # Remove item #6 from the item book
 *   ItemBook complete        # Complete the item book
 *   ItemBook clear           # Clear the item book
 *
 * Item (Weapon, Armor) Note:
 *   <book:no>                # This item does not appear in the item book
 */

/*:ja
 * @plugindesc アイテム図鑑です。アイテムの詳細なステータスを表示します。
 * @author Yoji Ojima
 *
 * @param Unknown Data
 * @desc 未確認のアイテムの索引名です。
 * @default ？？？？？？
 *
 * @param Price Text
 * @desc 「価格」の文字列です。
 * @default 価格
 *
 * @param Equip Text
 * @desc 「装備」の文字列です。
 * @default 装備
 *
 * @param Type Text
 * @desc 「タイプ」の文字列です。
 * @default タイプ
 *
 * @help
 *
 * プラグインコマンド:
 *   ItemBook open            # 図鑑画面を開く
 *   ItemBook add weapon 3    # 武器３番を図鑑に追加
 *   ItemBook add armor 4     # 防具４番を図鑑に追加
 *   ItemBook remove armor 5  # 防具５番を図鑑から削除
 *   ItemBook remove item 6   # アイテム６番を図鑑から削除
 *   ItemBook complete        # 図鑑を完成させる
 *   ItemBook clear           # 図鑑をクリアする
 *
 * アイテム（武器、防具）のメモ:
 *   <book:no>                # 図鑑に載せない場合
 */

(function () {
  var parameters = PluginManager.parameters("ItemBook");
  var unknownData = String(parameters["Unknown Data"] || "??????");
  var priceText = String(parameters["Price Text"] || "Price");
  var equipText = String(parameters["Equip Text"] || "Equip");
  var typeText = String(parameters["Type Text"] || "Type");

  var _Game_Interpreter_pluginCommand =
    Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function (command, args) {
    _Game_Interpreter_pluginCommand.call(this, command, args);
    if (command === "ItemBook") {
      switch (args[0]) {
        case "open":
          SceneManager.push(Scene_ItemBook);
          break;
        case "add":
          $gameSystem.addToItemBook(args[1], Number(args[2]));
          break;
        case "remove":
          $gameSystem.removeFromItemBook(args[1], Number(args[2]));
          break;
        case "complete":
          $gameSystem.completeItemBook();
          break;
        case "clear":
          $gameSystem.clearItemBook();
          break;
      }
    }
  };

  Game_System.prototype.addToItemBook = function (type, dataId) {
    if (!this._ItemBookFlags) {
      this.clearItemBook();
    }
    var typeIndex = this.itemBookTypeToIndex(type);
    if (typeIndex >= 0) {
      this._ItemBookFlags[typeIndex][dataId] = true;
    }
  };

  Game_System.prototype.removeFromItemBook = function (type, dataId) {
    if (this._ItemBookFlags) {
      var typeIndex = this.itemBookTypeToIndex(type);
      if (typeIndex >= 0) {
        this._ItemBookFlags[typeIndex][dataId] = false;
      }
    }
  };

  Game_System.prototype.itemBookTypeToIndex = function (type) {
    switch (type) {
      case "item":
        return 0;
      case "weapon":
        return 1;
      case "armor":
        return 2;
      default:
        return -1;
    }
  };

  Game_System.prototype.completeItemBook = function () {
    var i;
    this.clearItemBook();
    for (i = 1; i < $dataItems.length; i++) {
      this._ItemBookFlags[0][i] = true;
    }
    for (i = 1; i < $dataWeapons.length; i++) {
      this._ItemBookFlags[1][i] = true;
    }
    for (i = 1; i < $dataArmors.length; i++) {
      this._ItemBookFlags[2][i] = true;
    }
  };

  Game_System.prototype.clearItemBook = function () {
    this._ItemBookFlags = [[], [], []];
  };

  Game_System.prototype.isInItemBook = function (item) {
    if (this._ItemBookFlags && item) {
      var typeIndex = -1;
      if (DataManager.isItem(item)) {
        typeIndex = 0;
      } else if (DataManager.isWeapon(item)) {
        typeIndex = 1;
      } else if (DataManager.isArmor(item)) {
        typeIndex = 2;
      }
      if (typeIndex >= 0) {
        return !!this._ItemBookFlags[typeIndex][item.id];
      } else {
        return false;
      }
    } else {
      return false;
    }
  };

  var _Game_Party_gainItem = Game_Party.prototype.gainItem;
  Game_Party.prototype.gainItem = function (item, amount, includeEquip) {
    _Game_Party_gainItem.call(this, item, amount, includeEquip);
    if (item && amount > 0) {
      var type;
      if (DataManager.isItem(item)) {
        type = "item";
      } else if (DataManager.isWeapon(item)) {
        type = "weapon";
      } else if (DataManager.isArmor(item)) {
        type = "armor";
      }
      $gameSystem.addToItemBook(type, item.id);
    }
  };

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

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

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

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

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

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

  Window_ItemBookIndex.lastTopRow = 0;
  Window_ItemBookIndex.lastIndex = 0;

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

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

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

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

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

  Window_ItemBookIndex.prototype.updateStatus = function () {
    if (this._statusWindow) {
      var item = this._list[this.index()];
      this._statusWindow.setItem(item);
    }
  };

  Window_ItemBookIndex.prototype.refresh = function () {
    var i, item;
    this._list = [];
    for (i = 1; i < $dataItems.length; i++) {
      item = $dataItems[i];
      if (item.name && item.itypeId === 1 && item.meta.book !== "no") {
        this._list.push(item);
      }
    }
    for (i = 1; i < $dataWeapons.length; i++) {
      item = $dataWeapons[i];
      if (item.name && item.meta.book !== "no") {
        this._list.push(item);
      }
    }
    for (i = 1; i < $dataArmors.length; i++) {
      item = $dataArmors[i];
      if (item.name && item.meta.book !== "no") {
        this._list.push(item);
      }
    }
    this.createContents();
    this.drawAllItems();
  };

  Window_ItemBookIndex.prototype.drawItem = function (index) {
    var item = this._list[index];
    var rect = this.itemRect(index);
    var width = rect.width - this.textPadding();
    if ($gameSystem.isInItemBook(item)) {
      this.drawItemName(item, rect.x, rect.y, width);
    } else {
      var iw = Window_Base._iconWidth + 4;
      this.drawText(unknownData, rect.x + iw, rect.y, width - iw);
    }
  };

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

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

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

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

  Window_ItemBookStatus.prototype.setItem = function (item) {
    if (this._item !== item) {
      this._item = item;
      this.refresh();
    }
  };

  Window_ItemBookStatus.prototype.refresh = function () {
    var item = this._item;
    var x = 0;
    var y = 0;
    var lineHeight = this.lineHeight();

    this.contents.clear();

    if (!item || !$gameSystem.isInItemBook(item)) {
      return;
    }

    this.drawItemName(item, x, y);

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

    var price = item.price > 0 ? item.price : "-";
    this.changeTextColor(this.systemColor());
    this.drawText(priceText, x, y, 120);
    this.resetTextColor();
    this.drawText(price, x + 120, y, 120, "right");
    y += lineHeight;

    if (DataManager.isWeapon(item) || DataManager.isArmor(item)) {
      var etype = $dataSystem.equipTypes[item.etypeId];
      this.changeTextColor(this.systemColor());
      this.drawText(equipText, x, y, 120);
      this.resetTextColor();
      this.drawText(etype, x + 120, y, 120, "right");
      y += lineHeight;

      var type;
      if (DataManager.isWeapon(item)) {
        type = $dataSystem.weaponTypes[item.wtypeId];
      } else {
        type = $dataSystem.armorTypes[item.atypeId];
      }
      this.changeTextColor(this.systemColor());
      this.drawText(typeText, x, y, 120);
      this.resetTextColor();
      this.drawText(type, x + 120, y, 120, "right");

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

    x = 0;
    y = this.textPadding() * 2 + lineHeight * 7;
    this.drawTextEx(item.description, x, y);
  };
})();


code:
/*:
 * @plugindesc JumpAttack.
 * @author Lib
 *
 * @param Unknown Data
 * @desc
 * @default ??????
 *
 * @help
 *
 * Plugin Command:
 *
 * Enemy Note:
 */

//�����U���̎������W�����v���܂��B
//��:Lib

(function () {
  Game_Battler.prototype._isMagicSkill = function () {
    return action.isMagicSkill();
  };

  var _Sprite_Battler_prototype_initMembers =
    Sprite_Battler.prototype.initMembers;
  Sprite_Battler.prototype.initMembers = function () {
    _Sprite_Battler_prototype_initMembers.call(this);
    this._jumpFlag = true;
    this._jumping = false;
    this._jumpDuration = 0;
    this._power = 0;
  };

  Sprite_Battler.prototype.updateMain = function () {
    if (this._battler.isSpriteVisible()) {
      this.updateBitmap();
      this.updateFrame();
    }

    this.dojump();
    this.updateMove();
    this.updateJump();
    this.updateShadow();
    this.updatePosition();
  };

  Sprite_Battler.prototype.startJump = function (x, power, duration) {
    if (this._offsetY === 0 && this._jumpDuration === 0) {
      this._targetOffsetX = x;
      this._power = power;
      this._jumping = true;
      this._jumpDuration = duration;
    }
  };

  Sprite_Battler.prototype.dojump = function () {
    if (this._motion && this._offsetX === 0 && this._offsetY === 0) {
      if (this._motion.index === 2) {
        this._jumpFlag = false;
      }
    }
  };

  Sprite_Battler.prototype.updateJump = function () {
    if (this._jumping) {
      var d = this._jumpDuration;
      this._power += 2;
      this._offsetX = (this._offsetX * (d - 1) + this._targetOffsetX) / d;
      this._offsetY = this._offsetY + this._power;
      if (this._offsetY === 0) {
        this.onJumpConcel();
      }
    }
  };

  Sprite_Battler.prototype.onJumpConcel = function () {
    this._jumping = false; //�W�����v�����H
    this._offsetY = 0;
    this._power = 0; //�W�����v�p���[
    this.updatePosition();
  };

  Sprite_Battler.prototype.onJumpEnd = function () {
    this.onJumpConcel();
    this._jumpFlag = true; //�W�����v�\�ɂ���B
    this._jumpDuration = 0;
  };

  Sprite_Battler.prototype.isJumping = function () {
    return this._offsetY !== 0;
  };

  Sprite_Battler.prototype.updateShadow = function () {};

  Sprite_Actor.prototype.stepForward = function () {
    if (this._actor.isInputting() || this._jumpFlag) {
      this.startJump(-48, -16, 12);
    } else {
      this.startMove(-48, 0, 12); //���@�̎��͕��ʂ�
    }
  };

  Sprite_Actor.prototype.stepBack = function () {
    this.onJumpEnd();
    this.startMove(0, 0, 12);
  };

  Sprite_Actor.prototype.updateShadow = function () {
    this._shadowSprite.y = -2 - this._offsetY;
  };
})();