code:
//=============================================================================
// TMVplugin - リングコマンド
// 作者: tomoaky (http://hikimoki.sakura.ne.jp/)
// Version: 0.4b
// 最終更新日: 2016/04/13
//=============================================================================

/*:
 * @plugindesc マップシーンで使えるリングコマンドを追加します。
 *
 * @author tomoaky (http://hikimoki.sakura.ne.jp/)
 *
 * @param useEscape
 * @desc Escキーなどによるメニュー処理を乗っ取る
 * 初期値: 0 ( 1 にするとデフォルトのメニューは使えません)
 * @default 0
 *
 * @param useCaption
 * @desc リングコマンドにコマンド名を字幕で表示する
 * 初期値: 1 ( 0 で非表示)
 * @default 1
 *
 * @param saveLastIndex
 * @desc 最後に選択したコマンドを記憶する
 * 初期値: 0 ( 1 で前回決定したコマンドが初期位置になります)
 * @default 0
 *
 * @param openResetIndex
 * @desc リングコマンド開閉のたびにカーソル位置を初期化する
 * 初期値: 0 ( 1 で開閉のたびに初期化)
 * @default 0
 *
 * @param openGoldWindow
 * @desc リングコマンドと一緒に所持金ウィンドウも開閉する
 * 初期値: 1 ( 0 で開閉しない)
 * @default 1
 *
 * @param goldWindowX
 * @desc 所持金ウィンドウのＸ座標
 * 初期値: 576
 * @default 576
 *
 * @param goldWindowY
 * @desc 所持金ウィンドウのＹ座標
 * 初期値: 0
 * @default 0
 *
 * @param seOpenCommand
 * @desc リングコマンドを開くときに鳴らす効果音
 * 初期値: {name: "Cancel2", volume: 90, pitch: 100, pan: 0}
 * @default {name: "Cancel2", volume: 90, pitch: 100, pan: 0}
 *
 * @param seCloseCommand
 * @desc リングコマンドを閉じるときに鳴らす効果音
 * 初期値: {name: "Cancel2", volume: 90, pitch: 100, pan: 0}
 * @default {name: "Cancel2", volume: 90, pitch: 100, pan: 0}
 *
 * @param commandIconItem
 * @desc アイテムコマンドのアイコン番号
 * 初期値: 176
 * @default 176
 *
 * @param commandIconSkill
 * @desc スキルコマンドのアイコン番号
 * 初期値: 76
 * @default 76
 *
 * @param commandIconEquip
 * @desc 装備コマンドのアイコン番号
 * 初期値: 135
 * @default 135
 *
 * @param commandIconStatus
 * @desc ステータスコマンドのアイコン番号
 * 初期値: 84
 * @default 84
 *
 * @param commandIconFormation
 * @desc 並び替えコマンドのアイコン番号
 * 初期値: 75
 * @default 75
 *
 * @param commandIconOptions
 * @desc オプションコマンドのアイコン番号
 * 初期値: 83
 * @default 83
 *
 * @param commandIconSave
 * @desc セーブコマンドのアイコン番号
 * 初期値: 225
 * @default 225
 *
 * @param commandIconGameEnd
 * @desc ゲーム終了コマンドのアイコン番号
 * 初期値: 82
 * @default 82
 *
 * @param commandIconGoldLevelUp
 * @desc お金でレベルアップコマンドのアイコン番号
 * 初期値: 236 ( TMGoldLevelUp.js 導入時のみ有効)
 * @default 236
 *
 * @param rotateDuration
 * @desc アイコンの移動にかける時間
 * 初期値: 4（フレーム数）
 * @default 4
 *
 * @param iconDistX
 * @desc アイコンの広がり（横方向）
 * 初期値: 16
 * @default 16
 *
 * @param iconDistY
 * @desc アイコンの広がり（縦方向）
 * 初期値: 12
 * @default 12
 *
 * @param iconSelectScale
 * @desc 選択中アイコンの拡大率補正
 * 初期値: 1.5
 * @default 1.5
 *
 * @param captionWidth
 * @desc キャプションの幅
 * 初期値: 200
 * @default 200
 *
 * @param captionHeight
 * @desc キャプションの高さ
 * 初期値: 48
 * @default 48
 *
 * @param captionShiftX
 * @desc キャプションのＸ座標補正値
 * 初期値: 0
 * @default 0
 *
 * @param captionShiftY
 * @desc キャプションのＹ座標補正値
 * 初期値: -96
 * @default -96
 *
 * @help
 * マップシーンで Ctrl または Alt を押している間、リングコマンドが表示され
 * ←, → でリングの回転、Z, Enter, Space で各シーンへ移行できます。
 *
 * useEscape に 1 を設定すると Ctrl(Alt) での操作は無効化され、
 * デフォルトメニューと同様に Esc / X / Insert / Num 0 / 右クリック などで
 * リングコマンドを開閉することができるようになります。
 * この場合、キーを押しっぱなしにする必要はありません。
 *
 * マウスで操作する場合は、プレイヤーよりも左あるいは右をクリックすると
 * それぞれの方向へリングを回転させることができ、プレイヤーの近くを
 * クリックすれば正面にあるコマンドアイコンに対応するシーンへ移行します。
 * クリックの座標判定は横方向のみです、画面のどこをクリックしても反応します。
 *
 * プラグインコマンドはありません。
 *
 * TMGoldLevelUp.js（お金でレベルアップ）と併用する場合、TMGoldLevelUp.jsの
 * バージョンが Ver1.11 以上である必要があります。
 *
 */

var Imported = Imported || {};
Imported.TMRingCommand = true;

(function () {

  var parameters = PluginManager.parameters('TMRingCommand');
  var useEscape = parameters['useEscape'] === '1' ? true : false;
  var useCaption = parameters['useCaption'] === '1' ? true : false;
  var saveLastIndex = parameters['saveLastIndex'] === '1' ? true : false;
  var openResetIndex = parameters['openResetIndex'] === '1' ? true : false;
  var openGoldWindow = parameters['openGoldWindow'] === '1' ? true : false;
  var goldWindowX = Number(parameters['goldWindowX']);
  var goldWindowY = Number(parameters['goldWindowY']);
  var seOpenCommand = (new Function("return " + parameters['seOpenCommand']))();
  var seCloseCommand = (new Function("return " + parameters['seCloseCommand']))();
  var commandIcon = {};
  commandIcon['item'] = Number(parameters['commandIconItem']);
  commandIcon['skill'] = Number(parameters['commandIconSkill']);
  commandIcon['equip'] = Number(parameters['commandIconEquip']);
  commandIcon['status'] = Number(parameters['commandIconStatus']);
  commandIcon['formation'] = Number(parameters['commandIconFormation']);
  commandIcon['options'] = Number(parameters['commandIconOptions']);
  commandIcon['save'] = Number(parameters['commandIconSave']);
  commandIcon['gameEnd'] = Number(parameters['commandIconGameEnd']);
  commandIcon['goldLevelUp'] = Number(parameters['commandIconGoldLevelUp']);
  var rotateDuration = Number(parameters['rotateDuration']);
  var iconDistX = Number(parameters['iconDistX']);
  var iconDistY = Number(parameters['iconDistY']);
  var iconSelectScale = Number(parameters['iconSelectScale']);
  var captionWidth = Number(parameters['captionWidth']);
  var captionHeight = Number(parameters['captionHeight']);
  var captionShiftX = Number(parameters['captionShiftX']);
  var captionShiftY = Number(parameters['captionShiftY']);

  //-----------------------------------------------------------------------------
  // Game_Temp
  //

  Game_Temp.prototype.isRingCommandVisible = function () {
    if (this._ringCommandVisible === undefined) {
      this._ringCommandVisible = false;
    }
    return this._ringCommandVisible;
  };

  Game_Temp.prototype.setRingCommandVisible = function (flag) {
    this._ringCommandVisible = flag;
  };

  Game_Temp.prototype.ringCommandLastIndex = function () {
    if (this._ringCommandLastIndex === undefined) {
      this._ringCommandLastIndex = 0;
    }
    return this._ringCommandLastIndex;
  };

  Game_Temp.prototype.setRingCommandLastIndex = function (index) {
    this._ringCommandLastIndex = index;
  };

  Game_Temp.prototype.calledByRingCommand = function () {
    if (this._calledByRingCommand === undefined) {
      this._calledByRingCommand = false;
    }
    return this._calledByRingCommand;
  };

  Game_Temp.prototype.setCalledByRingCommand = function (flag) {
    this._calledByRingCommand = flag;
  };

  //-----------------------------------------------------------------------------
  // Game_Player
  //

  var _Game_Player_canMove = Game_Player.prototype.canMove;
  Game_Player.prototype.canMove = function () {
    if ($gameTemp.isRingCommandVisible()) {
      return false;
    }
    return _Game_Player_canMove.call(this);
  };

  //-----------------------------------------------------------------------------
  // Sprite_TMRingCommandIcon
  //

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

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

  Sprite_TMRingCommandIcon.prototype.initialize = function (name) {
    Sprite.prototype.initialize.call(this);
    this.anchor.x = 0.5;
    this.anchor.y = 0.5;
    this._commandName = name;
    this.bitmap = ImageManager.loadSystem('IconSet');
    var bx = commandIcon[name] % 16 * Window_Base._iconWidth;
    var by = Math.floor(commandIcon[name] / 16) * Window_Base._iconHeight;
    this.setFrame(bx, by, Window_Base._iconWidth, Window_Base._iconHeight);
    this._targetPosAngle = 0;
    this._posAngle = 0;
  };

  Sprite_TMRingCommandIcon.prototype.setIndex = function (index) {
    this._targetPosAngle = Math.PI * 2 / this.parent._commandSprites.length * index;
    var r = this._targetPosAngle - this._posAngle;
    r -= Math.floor(r / (Math.PI * 2)) * (Math.PI * 2);
    if (r > Math.PI) {
      r -= Math.PI * 2;
    }
    this._rotationCount = rotateDuration;
    this._va = r / this._rotationCount;
  };

  Sprite_TMRingCommandIcon.prototype.name = function () {
    return this._commandName;
  };

  Sprite_TMRingCommandIcon.prototype.isEnabled = function () {
    switch (this._commandName) {
      case 'save':
        return this.isSaveEnabled();
      case 'options':
        return this.isOptionsEnabled();
      case 'gameEnd':
        return this.isGameEndEnabled();
      default:
        return this.areMainCommandsEnabled();
    }
  };

  Sprite_TMRingCommandIcon.prototype.areMainCommandsEnabled = function () {
    return $gameParty.exists();
  };

  Sprite_TMRingCommandIcon.prototype.isFormationEnabled = function () {
    return $gameParty.size() >= 2 && $gameSystem.isFormationEnabled();
  };

  Sprite_TMRingCommandIcon.prototype.isOptionsEnabled = function () {
    return true;
  };

  Sprite_TMRingCommandIcon.prototype.isSaveEnabled = function () {
    return !DataManager.isEventTest() && $gameSystem.isSaveEnabled();
  };

  Sprite_TMRingCommandIcon.prototype.isGameEndEnabled = function () {
    return true;
  };

  Sprite_TMRingCommandIcon.prototype.update = function () {
    Sprite.prototype.update.call(this);
    if (this._rotationCount > 0) {
      this._posAngle += this._va;
      this._rotationCount--;
      if (this._rotationCount === 0) {
        this._posAngle = this._targetPosAngle;
      }
    }
    var r = this._posAngle + Math.PI / 2;
    this.x = Math.cos(r) * this.parent._commandRadius * iconDistX;
    this.y = Math.sin(r) * this.parent._commandRadius * iconDistY - 24;
    var scale = (this.y + 56) / 256 + 0.75;
    if (this.parent.currentCommandName() === this.name()) {
      scale *= iconSelectScale;
    }
    this.scale.set(scale, scale);
    this.opacity = this.isEnabled() ? 255 : 160
  };

  //-----------------------------------------------------------------------------
  // Sprite_TMRingCommandCaption
  //

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

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

  Sprite_TMRingCommandCaption.prototype.initialize = function () {
    Sprite.prototype.initialize.call(this);
    this.anchor.x = 0.5;
    this.anchor.y = 0.5;
    this.x = captionShiftX;
    this.y = captionShiftY;
    this._commandName = '';
    this.bitmap = new Bitmap(captionWidth, captionHeight);
  };

  Sprite_TMRingCommandCaption.prototype.update = function () {
    if (this._commandName !== this.parent.currentCommandName()) {
      this._commandName = this.parent.currentCommandName();
      this.refresh();
    }
  };

  Sprite_TMRingCommandCaption.prototype.refresh = function () {
    this.bitmap.clear();
    this.bitmap.paintOpacity = 160;
    this.bitmap.fillRect(0, 0, 240, 48, '#000000');
    this.bitmap.paintOpacity = 255;
    this.bitmap.drawText(TextManager[this._commandName], 0, 0,
      captionWidth, captionHeight, 'center');
  };

  //-----------------------------------------------------------------------------
  // Sprite_TMRingCommand
  //

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

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

  Sprite_TMRingCommand.prototype.initialize = function () {
    Sprite.prototype.initialize.call(this);
    this._commandIndex = saveLastIndex ? $gameTemp.ringCommandLastIndex() : 0;
    this._commandRadius = 0;
    this.makeCommandList();
    this.makeCaption();
    this.refresh();
  };

  Sprite_TMRingCommand.prototype.makeCommandList = function () {
    this._commandSprites = []
    this.addMainCommands();
    this.addFormationCommand();
    this.addOptionsCommand();
    this.addOriginalCommand();
    this.addSaveCommand();
    this.addGameEndCommand();
  };

  Sprite_TMRingCommand.prototype.currentCommandName = function () {
    return this._commandSprites[this._commandIndex].name();
  };

  Sprite_TMRingCommand.prototype.addMainCommands = function () {
    if (this.needsCommand('item')) {
      var sprite = new Sprite_TMRingCommandIcon('item');
      this._commandSprites.push(sprite);
      this.addChild(sprite);
    }
    if (this.needsCommand('skill')) {
      var sprite = new Sprite_TMRingCommandIcon('skill');
      this._commandSprites.push(sprite);
      this.addChild(sprite);
    }
    if (this.needsCommand('equip')) {
      var sprite = new Sprite_TMRingCommandIcon('equip');
      this._commandSprites.push(sprite);
      this.addChild(sprite);
    }
    if (this.needsCommand('status')) {
      var sprite = new Sprite_TMRingCommandIcon('status');
      this._commandSprites.push(sprite);
      this.addChild(sprite);
    }
  };

  Sprite_TMRingCommand.prototype.addFormationCommand = function () {
    if (this.needsCommand('formation')) {
      var sprite = new Sprite_TMRingCommandIcon('formation');
      this._commandSprites.push(sprite);
      this.addChild(sprite);
    }
  };

  Sprite_TMRingCommand.prototype.addOriginalCommand = function () {
    if (Imported.TMGoldLevelUp && TextManager.goldLevelUp) {
      var sprite = new Sprite_TMRingCommandIcon('goldLevelUp');
      this._commandSprites.push(sprite);
      this.addChild(sprite);
    }
  };

  Sprite_TMRingCommand.prototype.addOptionsCommand = function () {
    var sprite = new Sprite_TMRingCommandIcon('options');
    this._commandSprites.push(sprite);
    this.addChild(sprite);
  };

  Sprite_TMRingCommand.prototype.addSaveCommand = function () {
    if (this.needsCommand('save')) {
      var sprite = new Sprite_TMRingCommandIcon('save');
      this._commandSprites.push(sprite);
      this.addChild(sprite);
    }
  };

  Sprite_TMRingCommand.prototype.addGameEndCommand = function () {
    var sprite = new Sprite_TMRingCommandIcon('gameEnd');
    this._commandSprites.push(sprite);
    this.addChild(sprite);
  };

  Sprite_TMRingCommand.prototype.needsCommand = function (name) {
    var flags = $dataSystem.menuCommands;
    if (flags) {
      switch (name) {
        case 'item':
          return flags[0];
        case 'skill':
          return flags[1];
        case 'equip':
          return flags[2];
        case 'status':
          return flags[3];
        case 'formation':
          return flags[4];
        case 'save':
          return flags[5];
      }
    }
    return true;
  };

  Sprite_TMRingCommand.prototype.makeCaption = function () {
    if (useCaption) {
      this._captionSprite = new Sprite_TMRingCommandCaption();
      this.addChild(this._captionSprite);
    }
  };

  Sprite_TMRingCommand.prototype.update = function () {
    Sprite.prototype.update.call(this);
    this.updateVisible();
    if ($gameTemp.isRingCommandVisible()) {
      if (this._commandRadius < 4) {
        if (this._commandRadius === 0) {
          if (openResetIndex) {
            this._commandIndex = saveLastIndex ? $gameTemp.ringCommandLastIndex() : 0;
            this.refresh();
          }
          AudioManager.playSe(seOpenCommand);
        }
        if (openGoldWindow && this.parent.parent) {
          var goldWindow = this.parent.parent._messageWindow._goldWindow;
          goldWindow.x = goldWindowX;
          goldWindow.y = goldWindowY;
          goldWindow.open();
        }
        this._commandRadius++;
      }
      this.updateInput();
      this.x = $gamePlayer.screenX();
      this.y = $gamePlayer.screenY();
    } else {
      if (this._commandRadius > 0) {
        if (this._commandRadius === 4) {
          if (openGoldWindow) {
            this.parent.parent._messageWindow._goldWindow.close();
          }
          AudioManager.playSe(seCloseCommand);
        }
        this._commandRadius--;
      }
    }
  };

  Sprite_TMRingCommand.prototype.updateVisible = function () {
    if (SceneManager._scene.isBusy() || $gameMap.isEventRunning() ||
      !$gameSystem.isMenuEnabled()) {
      $gameTemp.setRingCommandVisible(false);
    } else if (useEscape) {
    } else {
      $gameTemp.setRingCommandVisible(Input.isPressed('control'));
    }

    this.visible = this._commandRadius > 0;
  };

  Sprite_TMRingCommand.prototype.updateInput = function () {
    if (Input.isRepeated('left') || (TouchInput.isRepeated() &&
      TouchInput.x < $gamePlayer.screenX() - 24)) {
      this._commandIndex--
      if (this._commandIndex < 0) {
        this._commandIndex = this._commandSprites.length - 1;
      }
      this.refresh();
      SoundManager.playCursor();
    }
    if (Input.isRepeated('right') || (TouchInput.isRepeated() &&
      TouchInput.x > $gamePlayer.screenX() + 24)) {
      this._commandIndex++;
      if (this._commandIndex >= this._commandSprites.length) {
        this._commandIndex = 0;
      }
      this.refresh();
      SoundManager.playCursor();
    }
    if (Input.isTriggered('ok') || (TouchInput.isTriggered() &&
      TouchInput.x >= $gamePlayer.screenX() - 24 &&
      TouchInput.x <= $gamePlayer.screenX() + 24)) {
      var sprite = this._commandSprites[this._commandIndex];
      if (sprite.isEnabled()) {
        switch (sprite.name()) {
          case 'item':
            $gameTemp.setCalledByRingCommand(true);
            SceneManager.push(Scene_Item);
            break;
          case 'skill':
            $gameTemp.setCalledByRingCommand(true);
            SceneManager.push(Scene_Skill);
            break;
          case 'equip':
            SceneManager.push(Scene_Equip);
            break;
          case 'status':
            $gameTemp.setCalledByRingCommand(true);
            SceneManager.push(Scene_Status);
            break;
          case 'formation':
            SceneManager.push(Scene_RCFormation);
            break;
          case 'options':
            SceneManager.push(Scene_Options);
            break;
          case 'save':
            SceneManager.push(Scene_Save);
            break;
          case 'gameEnd':
            SceneManager.push(Scene_GameEnd);
            break;
          case 'goldLevelUp':
            SceneManager.push(TMParam.Scene_GoldLevelUp);
            break;
        }
        this._commandRadius = 0;
        if (openGoldWindow) {
          this.parent.parent._messageWindow._goldWindow.hide();
        }
        $gameTemp.setRingCommandLastIndex(this._commandIndex);
        $gameTemp.setRingCommandVisible(false);
        SoundManager.playOk();
      } else {
        SoundManager.playBuzzer();
      }
    }
    if (useEscape && this._commandRadius === 4 &&
      (Input.isTriggered('menu') || TouchInput.isCancelled())) {
      $gameTemp.setRingCommandVisible(false);
    }
  };

  Sprite_TMRingCommand.prototype.refresh = function () {
    for (var i = 0; i < this._commandSprites.length; i++) {
      var sprite = this._commandSprites[i];
      var index = (this._commandIndex - i) % this._commandSprites.length;
      sprite.setIndex(index);
    }
  };

  //-----------------------------------------------------------------------------
  // Spriteset_Map
  //

  var _Spriteset_Map_createLowerLayer = Spriteset_Map.prototype.createLowerLayer;
  Spriteset_Map.prototype.createLowerLayer = function () {
    _Spriteset_Map_createLowerLayer.call(this);
    this.createRingCommand();
  };

  Spriteset_Map.prototype.createRingCommand = function () {
    this._ringCommand = new Sprite_TMRingCommand();
    this.addChild(this._ringCommand);
  };

  //-----------------------------------------------------------------------------
  // Window_MenuActor
  //

  var _Window_MenuActor_refresh = Window_MenuActor.prototype.refresh;
  Window_MenuActor.prototype.refresh = function () {
    if (!$gameTemp.calledByRingCommand()) {
      _Window_MenuActor_refresh.call(this);
    }
  };

  //-----------------------------------------------------------------------------
  // Window_SkillStatus
  //

  var _Window_SkillStatus_refresh = Window_SkillStatus.prototype.refresh;
  Window_SkillStatus.prototype.refresh = function () {
    if (!$gameTemp.calledByRingCommand()) {
      _Window_SkillStatus_refresh.call(this);
    }
  };

  //-----------------------------------------------------------------------------
  // Window_Status
  //

  var _Window_Status_refresh = Window_Status.prototype.refresh;
  Window_Status.prototype.refresh = function () {
    if (!$gameTemp.calledByRingCommand()) {
      _Window_Status_refresh.call(this);
    }
  };

  //-----------------------------------------------------------------------------
  // Window_Message
  //

  var _Window_Message_updatePlacement = Window_Message.prototype.updatePlacement;
  Window_Message.prototype.updatePlacement = function () {
    _Window_Message_updatePlacement.call(this);
    this._goldWindow.x = Graphics.boxWidth - this._goldWindow.width;
  };

  //-----------------------------------------------------------------------------
  // Scene_Item
  //

  var _Scene_Item_start = Scene_Item.prototype.start;
  Scene_Item.prototype.start = function () {
    _Scene_Item_start.call(this);
    if ($gameTemp.calledByRingCommand()) {
      $gameTemp.setCalledByRingCommand(false);
      this._actorWindow.refresh();
    }
  }

  //-----------------------------------------------------------------------------
  // Scene_Skill
  //

  var _Scene_Skill_start = Scene_Skill.prototype.start;
  Scene_Skill.prototype.start = function () {
    _Scene_Skill_start.call(this);
    if ($gameTemp.calledByRingCommand()) {
      $gameTemp.setCalledByRingCommand(false);
      this._actorWindow.refresh();
      this._statusWindow.refresh();
    }
  }

  //-----------------------------------------------------------------------------
  // Scene_Status
  //

  var _Scene_Status_start = Scene_Status.prototype.start;
  Scene_Status.prototype.start = function () {
    _Scene_Status_start.call(this);
    if ($gameTemp.calledByRingCommand()) {
      $gameTemp.setCalledByRingCommand(false);
      this._statusWindow.refresh();
    }
  }

  //-----------------------------------------------------------------------------
  // Scene_Map
  //

  var _Scene_Map_callMenu = Scene_Map.prototype.callMenu;
  Scene_Map.prototype.callMenu = function () {
    if (useEscape) {
      $gameTemp.setRingCommandVisible(true);
      this.menuCalling = false;
    } else {
      _Scene_Map_callMenu.call(this);
    }
  };

  //-----------------------------------------------------------------------------
  // Scene_RCFormation
  //

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

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

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

  Scene_RCFormation.prototype.create = function () {
    Scene_MenuBase.prototype.create.call(this);
    this.createStatusWindow();
  };

  Scene_RCFormation.prototype.start = function () {
    Scene_MenuBase.prototype.start.call(this);
    this._statusWindow.refresh();
    this._statusWindow.setFormationMode(true);
    this._statusWindow.selectLast();
    this._statusWindow.activate();
    this._statusWindow.setHandler('ok', this.onFormationOk.bind(this));
    this._statusWindow.setHandler('cancel', this.onFormationCancel.bind(this));
  };

  Scene_RCFormation.prototype.createStatusWindow = function () {
    this._statusWindow = new Window_MenuStatus(0, 0);
    this._statusWindow.x = (Graphics.boxWidth - this._statusWindow.width) / 2;
    this.addWindow(this._statusWindow);
  };

  Scene_RCFormation.prototype.onFormationOk = function () {
    var index = this._statusWindow.index();
    var actor = $gameParty.members()[index];
    var pendingIndex = this._statusWindow.pendingIndex();
    if (pendingIndex >= 0) {
      $gameParty.swapOrder(index, pendingIndex);
      this._statusWindow.setPendingIndex(-1);
      this._statusWindow.redrawItem(index);
    } else {
      this._statusWindow.setPendingIndex(index);
    }
    this._statusWindow.activate();
  };

  Scene_RCFormation.prototype.onFormationCancel = function () {
    if (this._statusWindow.pendingIndex() >= 0) {
      this._statusWindow.setPendingIndex(-1);
      this._statusWindow.activate();
    } else {
      this.popScene();
    }
  };

})();


code:
//=============================================================================
// TMVplugin - SameGame
// 作者: tomoaky (http://hikimoki.sakura.ne.jp/)
// Version: 0.31b
// 最終更新日: 2016/03/04
//=============================================================================

/*:
 * @plugindesc いわゆるさめがめっぽいものを追加します。
 *
 * @author tomoaky (http://hikimoki.sakura.ne.jp/)
 *
 * @param samegameCommand
 * @desc 『選択肢の表示』コマンドで使用するSameGame起動文字列。
 * 初期値: [samegame]
 * @default [samegame]
 *
 * @param samegameIcons
 * @desc ゲームに使用するアイコン番号（半角スペース区切り）
 * 初期値: 97 128 176 265 301
 * @default 97 128 176 265 301
 *
 * @param timeupSe
 * @desc 時間切れ時に鳴らす効果音（ファイル名 音量 ピッチ パン）
 * 初期値: Explosion2 90 100 0
 * @default Explosion2 90 100 0
 *
 * @param clearSe
 * @desc ゲーム終了時に鳴らす効果音（ファイル名 音量 ピッチ パン）
 * 初期値: Applause1 90 100 0
 * @default Applause1 90 100 0
 *
 * @requiredAssets img/system/SamegameCursor
 *
 * @help
 * 準備:
 *   画像ファイル SamegameCursor.png を img/system フォルダに置いてください。
 *   このプラグインの配布元ページで一緒に配布しています。
 *
 * ルール:
 *   同じ種類のアイコンが２個以上隣接しているところをクリック（タップ）
 *   することでそのアイコンを消すことができます。
 *   同時により多くの数のアイコンを消すと得られる得点がアップします。
 *
 * 使い方:
 *   イベントコマンド『選択肢の表示』の選択肢１番に [samegame] と
 *   入力することでSameGameが起動します。（括弧は半角です）
 *   選択肢２番には以下の５つの数値を半角スペースで区切って入力します。
 *   ・横に並ぶアイコンの数
 *   ・縦に並ぶアイコンの数
 *   ・アイコン１つの幅（ドット数）
 *   ・アイコン１つの高さ（ドット数）
 *   ・アイコンの種類
 *   例）14 8 32 32 5
 *   この例では１つが32*32ドットのアイコン５種類を、横に１４、縦に８、
 *   計１１２個ランダムに並べた状態でスタートします。
 *
 *   これ以上消せるアイコンがない状態になるとゲーム終了となり、選択肢１番の
 *   処理が実行されます。
 *
 *   選択肢３番に半角数字で制限時間を設定することができます。入力した秒数が
 *   経過するとSameGameが強制終了し、選択肢３番の処理が実行されます。
 *
 * プラグインコマンド:
 *   samegameScore 4        # 得点を変数４番に代入
 *   samegameTime 5         # 所要時間を変数５番に代入
 *   samegameAllIcons 7     # 残りの総アイコン数を変数７番に代入
 *   samegameIcons 0 8      # 種類別の残りアイコン数を変数８番に代入
 *                            最初の数値でアイコンの種類を指定します
 *                            アイコンが５種類なら 0 ～ 4
 *   samegameAllIconsS 9    # 開始時の総アイコン数を変数９番に代入
 *   samegameIconsS 0 11    # 開始時の種類別アイコン数を変数１１番に代入
 *
 *   これらのコマンドで得られる結果は直前に実行されたSamegameのものに
 *   なります。SameGameとプラグインコマンド実行までの間にセーブ＆ロードを
 *   はさむと結果が取得できなくなります。
 *
 *   samegameTime コマンドで得られる値の単位はミリ秒になっていますので、
 *   秒に変換したい場合はイベントコマンド『変数の操作』を使い、この値を
 *   1000 で割ってください。
 *
 * 注意事項:
 *   『文章の表示』コマンドの直後にSameGameを起動した場合、
 *   メッセージウィンドウが閉じずにそのままSameGameが起動します。
 *   メッセージウィンドウを閉じてからSameGameを起動したい場合は
 *   『文章の表示』と『選択肢の表示』の間に『ウェイト』を 1 フレーム以上
 *   入れてください。
 *
 *   また、SameGameウィンドウの上下位置はメッセージウィンドウの
 *   上下位置に影響を受けるので、背景が透明で内容が空のメッセージウィンドウを
 *   使えばSameGameウィンドウの上下位置を変更することができます。
 *
 * 特殊な使い方:
 *   SameGameの実行中に並列イベントを使ってプラグインコマンドを使用すると
 *   現在の得点や所要時間を取得することができます。
 *   これを使えば残り時間が少なくなったときにピクチャや効果音で知らせるなど
 *   いろいろとアレンジができると思います。
 */

var Imported = Imported || {};
Imported.TMSameGame = true;

(function () {

  var parameters = PluginManager.parameters('TMSameGame');
  var samegameCommand = parameters['samegameCommand'];
  var a = parameters['samegameIcons'].split(' ');
  var samegameIcons = [];
  for (var i = 0; i < a.length; i++) {
    samegameIcons[i] = Number(a[i]);
  }
  var a = parameters['timeupSe'].split(' ');
  var timeupSe = { name: a[0], volume: a[1], pitch: a[2], pan: a[3] };
  var a = parameters['clearSe'].split(' ');
  var clearSe = { name: a[0], volume: a[1], pitch: a[2], pan: a[3] };

  //-----------------------------------------------------------------------------
  // Game_Temp
  //

  var _Game_Temp_initialize = Game_Temp.prototype.initialize;
  Game_Temp.prototype.initialize = function () {
    _Game_Temp_initialize.call(this);
    this._samegameScore = 0;
    this._samegameTime = 0;
  };

  Game_Temp.prototype.setSamegameScore = function (score, time) {
    this._samegameScore = score;
    this._samegameTime = time;
  };

  Game_Temp.prototype.setSamegameStartIcons = function (samegameMap) {
    this._samegameAllIconsS = samegameMap.length;
    this._samegameIcons = [];
    this._samegameIconsS = [];
    for (var i = 0; i < samegameMap.length; i++) {
      var index = samegameMap[i];
      this._samegameIconsS[index] = this._samegameIconsS[index] || 0;
      this._samegameIconsS[index]++;
    }
    for (var i = 0; i < this._samegameIconsS.length; i++) {
      this._samegameIcons[i] = this._samegameIconsS[i];
    }
  };

  Game_Temp.prototype.loseSamegameIcon = function (index, value) {
    this._samegameIcons[index] -= value;
  };

  Game_Temp.prototype.samegameScore = function () {
    return this._samegameScore;
  };

  Game_Temp.prototype.samegameTime = function () {
    return this._samegameTime;
  };

  Game_Temp.prototype.samegameAllIcons = function () {
    if (!this._samegameIcons) return 0;
    var result = 0;
    for (var i = 0; i < this._samegameIcons.length; i++) {
      result += this._samegameIcons[i];
    }
    return result;
  };

  Game_Temp.prototype.samegameIcons = function (index) {
    return this._samegameIcons ? this._samegameIcons[index] : 0
  };

  Game_Temp.prototype.samegameAllIconsS = function () {
    return this._samegameAllIconsS || 0;
  };

  Game_Temp.prototype.samegameIconsS = function (index) {
    return this._samegameIconsS ? this._samegameIconsS[index] : 0;
  };

  //-----------------------------------------------------------------------------
  // Game_Message
  //

  var _Game_Message_clear = Game_Message.prototype.clear;
  Game_Message.prototype.clear = function () {
    _Game_Message_clear.call(this);
    this._samegameWidth = 0;
    this._samegameHeight = 0;
    this._samegameCellWidth = 0;
    this._samegameCellHeight = 0;
  };

  Game_Message.prototype.samegameWidth = function () {
    return this._samegameWidth;
  };

  Game_Message.prototype.samegameHeight = function () {
    return this._samegameHeight;
  };

  Game_Message.prototype.samegameCellWidth = function () {
    return this._samegameCellWidth;
  };

  Game_Message.prototype.samegameCellHeight = function () {
    return this._samegameCellHeight;
  };

  Game_Message.prototype.samegameIcons = function () {
    return this._samegameIcons;
  };

  Game_Message.prototype.setSamegame = function (choices, cancelType) {
    var a = choices[1].split(' ');
    this._samegameWidth = Number(a[0]);
    this._samegameHeight = Number(a[1]);
    this._samegameCellWidth = Number(a[2]);
    this._samegameCellHeight = Number(a[3]);
    this._samegameIcons = Number(a[4]);
    this._samegameTimeLimit = choices[2] ? Number(choices[2]) * 1000 : 0;
    this._choiceCancelType = cancelType;
  };

  Game_Message.prototype.isSamegame = function () {
    return this._samegameWidth > 0;
  };

  var _Game_Message_isBusy = Game_Message.prototype.isBusy;
  Game_Message.prototype.isBusy = function () {
    return (_Game_Message_isBusy.call(this) || this.isSamegame());
  };

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

  var _Game_Interpreter_setupChoices = Game_Interpreter.prototype.setupChoices;
  Game_Interpreter.prototype.setupChoices = function (params) {
    var choices = params[0].clone();
    if (choices[0] === samegameCommand) {
      var cancelType = params[1];
      var defaultType = params.length > 2 ? params[2] : 0;
      var positionType = params.length > 3 ? params[3] : 2;
      var background = params.length > 4 ? params[4] : 0;
      if (cancelType >= choices.length) {
        cancelType = -2;
      }
      $gameMessage.setSamegame(choices, cancelType);
      $gameMessage.setChoiceBackground(background);
      $gameMessage.setChoicePositionType(positionType);
      $gameMessage.setChoiceCallback(function (n) {
        this._branch[this._indent] = n;
      }.bind(this));
    } else {
      _Game_Interpreter_setupChoices.call(this, params);
    }
  };

  var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function (command, args) {
    if (command === 'samegameScore') {
      $gameVariables.setValue(+args[0], $gameTemp.samegameScore());
    } else if (command === 'samegameTime') {
      $gameVariables.setValue(+args[0], $gameTemp.samegameTime());
    } else if (command === 'samegameAllIcons') {
      $gameVariables.setValue(+args[0], $gameTemp.samegameAllIcons());
    } else if (command === 'samegameIcons') {
      $gameVariables.setValue(+args[1], $gameTemp.samegameIcons(+args[0]));
    } else if (command === 'samegameAllIconsS') {
      $gameVariables.setValue(+args[0], $gameTemp.samegameAllIconsS());
    } else if (command === 'samegameIconsS') {
      $gameVariables.setValue(+args[1], $gameTemp.samegameIconsS(+args[0]));
    } else {
      _Game_Interpreter_pluginCommand.call(this, command, args);
    }
  };

  //-----------------------------------------------------------------------------
  // Window_Samegame
  //

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

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

  Window_Samegame.prototype.initialize = function (messageWindow) {
    this._messageWindow = messageWindow;
    Window_Selectable.prototype.initialize.call(this, 0, 0, 0, 0);
    this.openness = 0;
    this.deactivate();
  };

  Window_Samegame.prototype.lineHeight = function () {
    return 32;
  };

  Window_Samegame.prototype.maxCols = function () {
    return this._samegameWidth || 1;
  };

  Window_Samegame.prototype.maxItems = function () {
    return this._samegameCellNumber || 0;
  };

  Window_Samegame.prototype.spacing = function () {
    return 0;
  };

  Window_Samegame.prototype.isCursorMovable = function () {
    return Window_Selectable.prototype.isCursorMovable &&
      this._samegameState === -1;
  };

  Window_Samegame.prototype.start = function () {
    this._samegameWidth = $gameMessage.samegameWidth();
    this._samegameHeight = $gameMessage.samegameHeight();
    this._samegameCellWidth = $gameMessage.samegameCellWidth();
    this._samegameCellHeight = $gameMessage.samegameCellHeight();
    this._samegameCellNumber = this._samegameWidth * this._samegameHeight;
    this._samegameIcons = $gameMessage.samegameIcons();
    this.setupSamegame();
    this._samegameState = -1;
    this._samegameScore = 0;
    this._samegameStartTime = new Date();
    this._lastRefreshTime = this._samegameStartTime;
    this.updatePlacement();
    this.updateBackground();
    this.select(0);
    this.createContents();
    this.refresh();
    this.open();
    this.activate();
  };

  Window_Samegame.prototype.setupSamegame = function () {
    this._samegameMap = [];
    var a = [];
    for (var i = 0; i < this._samegameCellNumber; i++) {
      a[i] = i % this._samegameIcons;
    }
    for (var i = 0; i < this._samegameCellNumber; i++) {
      var index = a.splice(Math.randomInt(a.length), 1)[0];
      this._samegameMap[i] = index;
    }
    $gameTemp.setSamegameStartIcons(this._samegameMap);
  };

  Window_Samegame.prototype.isIndexValid = function (index) {
    return index >= 0 && index < this._samegameCellNumber;
  };

  Window_Samegame.prototype.updatePlacement = function () {
    var positionType = $gameMessage.choicePositionType();
    var messageY = this._messageWindow.y;
    this.width = this.windowWidth();
    this.height = this.windowHeight();
    switch (positionType) {
      case 0:
        this.x = 0;
        break;
      case 1:
        this.x = (Graphics.boxWidth - this.width) / 2;
        break;
      case 2:
        this.x = Graphics.boxWidth - this.width;
        break;
    }
    if (messageY >= Graphics.boxHeight / 2) {
      this.y = messageY - this.height;
    } else {
      this.y = messageY + this._messageWindow.height;
    }
  };

  Window_Samegame.prototype.updateBackground = function () {
    this._background = $gameMessage.choiceBackground();
    this.setBackgroundType(this._background);
  };

  Window_Samegame.prototype.windowWidth = function () {
    var width = $gameMessage.samegameWidth() * $gameMessage.samegameCellWidth() +
      this.padding * 2;
    return Math.min(width, Graphics.boxWidth);
  };

  Window_Samegame.prototype.windowHeight = function () {
    return this.fittingHeight($gameMessage.samegameHeight()) + 72;
  };

  Window_Samegame.prototype.update = function () {
    var lastIndex = this.index();
    Window_Selectable.prototype.update.call(this);
    if (this.active) {
      if (this._samegameState === -1) {
        this.updateTime();
        this.updateScore();
      } else if (Input.isTriggered('ok') || (TouchInput.isTriggered())) {
        $gameMessage.onChoice(this._samegameState);
        this.endSamegame();
        SoundManager.playOk();
      } else if (Input.isTriggered('escape') || (TouchInput.isCancelled())) {
        $gameMessage.onChoice(this._samegameState);
        this.endSamegame();
        SoundManager.playCancel();
      }
      if (lastIndex !== this.index()) {
        this.redrawItem(lastIndex);
        this.redrawItem(this.index());
      }
    }
  };

  Window_Samegame.prototype.updateTime = function () {
    var currentTime = new Date();
    if (currentTime - this._lastRefreshTime > 1000) {
      this.refreshTime();
      this._lastRefreshTime = currentTime;
    }
  };

  Window_Samegame.prototype.updateScore = function () {
    var time = new Date();
    $gameTemp.setSamegameScore(this._samegameScore, time - this._samegameStartTime);
  };

  Window_Samegame.prototype.gameOver = function (state) {
    this._samegameState = state;
    this.updateScore();
    if (this._samegameState === 2) {
      AudioManager.playSe(timeupSe);
    } else {
      AudioManager.playSe(clearSe);
    }
  };

  Window_Samegame.prototype.endSamegame = function () {
    this._messageWindow.terminateMessage();
    this.deactivate();
    this.close();
  };

  Window_Samegame.prototype.isCurrentItemEnabled = function () {
    var index = this.index();
    if (this._samegameMap[index] === -1) {
      return false;
    }
    this._checkTargets = [];
    this._deleteTargets = [];
    this.sweep(this.index());
    return this._checkTargets.length > 0;
  };

  Window_Samegame.prototype.drawItem = function (index) {
    var rect = this.itemRect(index);
    var iconIndex = this._samegameMap[index];
    if (iconIndex >= 0) {
      this.drawIcon(samegameIcons[iconIndex], rect.x, rect.y);
    }
    if (index === this.index()) {
      bitmap = ImageManager.loadSystem('SamegameCursor');
      this.contents.blt(bitmap, 0, 0, 32, 32, rect.x, rect.y,
        this._samegameCellWidth, this._samegameCellHeight);
    }
  };

  Window_Samegame.prototype.refresh = function () {
    if (this.contents) {
      this.contents.clear();
      this.drawAllItems();
      this.refreshTime();
      this.refreshScore();
    }
  };

  Window_Samegame.prototype.refreshTime = function () {
    var time = new Date();
    time -= this._samegameStartTime;
    if ($gameMessage._samegameTimeLimit) {
      time = $gameMessage._samegameTimeLimit - time;
      if (time < 0) {
        time = 0;
        this.gameOver(2);
      }
    }
    var width = this.contents.width - this.textPadding();
    var height = 36;
    var y = this.contents.height - height;
    this.contents.clearRect(0, y, width, height);
    this.drawText(Math.floor(time / 1000) + ' 秒', 0, y, width, 'right');
  };

  Window_Samegame.prototype.refreshScore = function () {
    var width = this.contents.width - this.textPadding();
    var height = 36;
    var y = this._samegameHeight * this._samegameCellHeight;
    this.contents.clearRect(0, y, width, height);
    this.drawText(this._samegameScore + ' 点', 0, y, width, 'right')
  };

  Window_Samegame.prototype.isOkEnabled = function () {
    return true;
  };

  Window_Samegame.prototype.isCancelEnabled = function () {
    return $gameMessage.choiceCancelType() !== -1;
  };

  Window_Samegame.prototype.processOk = function () {
    if (this._samegameState === -1) {
      Window_Selectable.prototype.processOk.call(this);
    }
  };

  Window_Samegame.prototype.callOkHandler = function () {
    if (this._samegameMap[this.index()] === -1) {
      SoundManager.playBuzzer();
    } else {
      this._checkTargets = [this.index()];
      this._deleteTargets = [];
      while (this._checkTargets.length > 0) {
        this.sweep(this._checkTargets.pop());
      }
      var n = this._deleteTargets.length;
      if (n >= 2) {
        this.gainScore(n);
        $gameTemp.loseSamegameIcon(this._samegameMap[this._deleteTargets[0]], n);
        this.deleteIcons();
        this.sortIcons();
        this.refresh();
      }
      if (this._samegameState === -1) {
        this.checkGameComplete();
      }
    }
    this.activate();
  };

  Window_Samegame.prototype.sweep = function (index) {
    var iconIndex = this._samegameMap[index];
    this._deleteTargets.push(index);
    this.addSweepTarget(index - this._samegameWidth, iconIndex);
    this.addSweepTarget(index + this._samegameWidth, iconIndex);
    if (index % this._samegameWidth > 0) {
      this.addSweepTarget(index - 1, iconIndex);
    }
    if (index % this._samegameWidth < this._samegameWidth - 1) {
      this.addSweepTarget(index + 1, iconIndex);
    }
  };

  Window_Samegame.prototype.addSweepTarget = function (index, targetIcon) {
    var iconIndex = this._samegameMap[index];
    if (iconIndex === targetIcon &&
      this._deleteTargets.indexOf(index) === -1 &&
      this._checkTargets.indexOf(index) === -1 &&
      this.isIndexValid(index)) {
      this._checkTargets.push(index);
    }
  };

  Window_Samegame.prototype.gainScore = function (n) {
    this._samegameScore += n * n * 100;
  };

  Window_Samegame.prototype.deleteIcons = function () {
    for (var i = 0; i < this._deleteTargets.length; i++) {
      this._samegameMap[this._deleteTargets[i]] = -1;
    }
  };

  Window_Samegame.prototype.sortIcons = function () {
    for (var x = 0; x < this._samegameWidth; x++) {
      var a = [];
      for (var y = this._samegameHeight - 1; y >= 0; y--) {
        var index = x + y * this._samegameWidth;
        if (this._samegameMap[index] >= 0) {
          a.push(this._samegameMap[index]);
          this._samegameMap[index] = -1;
        }
      }
      for (var i = 0; i < a.length; i++) {
        var y = this._samegameHeight - 1 - i;
        var index = x + y * this._samegameWidth;
        this._samegameMap[index] = a[i];
      }
    }
    for (var x = 0; x < this._samegameWidth; x++) {
      var y = this._samegameHeight - 1
      if (this._samegameMap[x + y * this._samegameWidth] === -1) {
        for (var x2 = x + 1; x2 < this._samegameWidth; x2++) {
          if (this._samegameMap[x2 + y * this._samegameWidth] >= 0) {
            for (var i = 0; i < this._samegameHeight; i++) {
              var index = x + i * this._samegameWidth;
              var index2 = x2 + i * this._samegameWidth;
              this._samegameMap[index] = this._samegameMap[index2];
              this._samegameMap[index2] = -1;
            }
            break;
          }
        }
      }
    }
  };

  Window_Samegame.prototype.checkGameComplete = function () {
    for (var x = 0; x < this._samegameWidth; x++) {
      for (var y = 0; y < this._samegameHeight; y++) {
        var index = x + y * this._samegameWidth;
        if (this._samegameMap[index] === -1) {
          continue;
        }
        this._checkTargets = [];
        this._deleteTargets = [];
        this.sweep(index);
        if (this._checkTargets.length > 0) {
          return;
        }
      }
    }
    this.gameOver(0);
  };

  Window_Samegame.prototype.processCancel = function () {
    if (this._samegameState === -1) {
      Window_Selectable.prototype.processCancel.call(this);
    }
  };

  Window_Samegame.prototype.callCancelHandler = function () {
    $gameMessage.onChoice($gameMessage.choiceCancelType());
    this._messageWindow.terminateMessage();
    this.close();
  };

  //-----------------------------------------------------------------------------
  // Window_Message
  //

  var _Window_Message_subWindows = Window_Message.prototype.subWindows;
  Window_Message.prototype.subWindows = function () {
    return _Window_Message_subWindows.call(this).concat(this._samegameWindow);
  };

  var _Window_Message_createSubWindows = Window_Message.prototype.createSubWindows;
  Window_Message.prototype.createSubWindows = function () {
    _Window_Message_createSubWindows.call(this);
    this._samegameWindow = new Window_Samegame(this);
  };

  var _Window_Message_isAnySubWindowActive = Window_Message.prototype.isAnySubWindowActive;
  Window_Message.prototype.isAnySubWindowActive = function () {
    return (_Window_Message_isAnySubWindowActive.call(this) ||
      this._samegameWindow.active);
  };

  var _Window_Message_startInput = Window_Message.prototype.startInput;
  Window_Message.prototype.startInput = function () {
    if ($gameMessage.isSamegame()) {
      this._samegameWindow.start();
      return true;
    }
    return _Window_Message_startInput.call(this);
  };

  //-----------------------------------------------------------------------------
  // Scene_Boot
  //

  var _Scene_Boot_loadSystemImages = Scene_Boot.prototype.loadSystemImages;
  Scene_Boot.prototype.loadSystemImages = function () {
    _Scene_Boot_loadSystemImages.call(this);
    ImageManager.loadSystem('SamegameCursor');
  };

})();

repo_name: dazed/translations

license: unknown


code:
//=============================================================================
// TMPlugin - セーブデータラベル
// バージョン: 2.0.0
// 最終更新日: 2016/08/12
// 配布元    : http://hikimoki.sakura.ne.jp/
//-----------------------------------------------------------------------------
// Copyright (c) 2016 tomoaky
// Released under the MIT license.
// http://opensource.org/licenses/mit-license.php
//=============================================================================

/*:
 * @plugindesc セーブファイルウィンドウに変数の値を表示します。
 *
 * @author tomoaky (http://hikimoki.sakura.ne.jp/)
 *
 * @param labelAName
 * @desc ラベルＡの名前
 * 初期値: ラベルＡ
 * @default ラベルＡ
 *
 * @param labelAId
 * @desc ラベルＡのゲーム変数番号
 * 初期値: 10（ 0 で非表示 / 1 以上で表示）
 * @default 10
 *
 * @param labelAMax
 * @desc ラベルＡの最大値
 * 初期値: 9999
 * @default 9999
 *
 * @param labelAFooter
 * @desc ラベルＡのフッターテキスト
 * 初期値:
 * @default
 *
 * @param labelBName
 * @desc ラベルＢの名前
 * 初期値: ラベルＢ
 * @default ラベルＢ
 *
 * @param labelBId
 * @desc ラベルＢのゲーム変数番号
 * 初期値: 0（ 0 で非表示 / 1 以上で表示）
 * @default 0
 *
 * @param labelBMax
 * @desc ラベルＢの最大値
 * 初期値: 9999
 * @default 9999
 *
 * @param labelBFooter
 * @desc ラベルＢのフッターテキスト
 * 初期値:
 * @default
 *
 * @param labelNameWidth
 * @desc ラベル名の表示幅
 * 初期値: 160
 * @default 160
 *
 * @param labelValueWidth
 * @desc ラベル値の表示幅
 * 初期値: 96
 * @default 96
 *
 * @param labelNameColorId
 * @desc ラベル名の文字色番号
 * 初期値: 16
 * @default 16
 *
 * @param labelValueColorId
 * @desc ラベル値の文字色番号
 * 初期値: 0
 * @default 0
 *
 * @param labelMaxColorId
 * @desc ラベル値が最大のときの文字色番号
 * 初期値: 2
 * @default 2
 *
 * @param labelFooterColorId
 * @desc フッターの文字色番号
 * 初期値: 0
 * @default 0
 *
 * @help
 * 使い方:
 *
 *   このプラグインを導入するとセーブファイルウィンドウの右上にゲーム変数の
 *   値（以下ラベル）を最大で２つまで表示することができるようになります。
 *
 *   プラグイン導入前に作成されたセーブデータは、再度セーブが実行されるまで
 *   ラベルは表示されません。
 *
 *   プラグインコマンドはありません。
 *
 *   このプラグインは RPGツクールMV Version 1.3.0 で動作確認をしています。
 *
 *
 * プラグインパラメータ補足:
 *
 *   labelAFooter / labelBFooter
 *     ラベル値の後ろに表示する文字列を設定します。
 *     『1234 点』、『12 日目』のような表示にするための機能です、値との間の
 *     スペースは半角スペースなどで調整してください。
 *
 *   labelAMax / labelBMax
 *     ゲーム変数の値がこれらの値以上だった場合、ラベルに表示される値の
 *     文字色番号が labelValueColorId から labelMaxColorId に変化します。
 *     また、ゲーム変数の値が最大値よりも大きい場合は、最大値を表示します。
 *     0 を設定すると上記機能が無効になります。
 *
 *   labelNameColorId
 *   labelValueColorId
 *   labelMaxColorId
 *   labelFooterColorId
 *     ラベルの各部分ごとの文字色番号を設定します。
 *     番号はイベントコマンド『文章の表示』などで使う制御文字 \C[n] の
 *     n の部分と同じものになります。
 */

var Imported = Imported || {};
Imported.TMSaveDataLabel = true;

var TMPlugin = TMPlugin || {};
TMPlugin.SaveDataLabel = {};
TMPlugin.SaveDataLabel.Parameters = PluginManager.parameters('TMSaveDataLabel');
TMPlugin.SaveDataLabel.LabelAName = TMPlugin.SaveDataLabel.Parameters['labelAName'];
TMPlugin.SaveDataLabel.LabelAId = +(TMPlugin.SaveDataLabel.Parameters['labelAId'] || 10);
TMPlugin.SaveDataLabel.LabelAMax = +(TMPlugin.SaveDataLabel.Parameters['labelAMax'] || 9999);
TMPlugin.SaveDataLabel.LabelAFooter = TMPlugin.SaveDataLabel.Parameters['labelAFooter'];
TMPlugin.SaveDataLabel.LabelBName = TMPlugin.SaveDataLabel.Parameters['labelBName'];
TMPlugin.SaveDataLabel.LabelBId = +(TMPlugin.SaveDataLabel.Parameters['labelBId'] || 0);
TMPlugin.SaveDataLabel.LabelBMax = +(TMPlugin.SaveDataLabel.Parameters['labelBMax'] || 9999);
TMPlugin.SaveDataLabel.LabelBFooter = TMPlugin.SaveDataLabel.Parameters['labelBFooter'];
TMPlugin.SaveDataLabel.NameWidth = +(TMPlugin.SaveDataLabel.Parameters['labelNameWidth'] || 160);
TMPlugin.SaveDataLabel.ValueWidth = +(TMPlugin.SaveDataLabel.Parameters['labelValueWidth'] || 96);
TMPlugin.SaveDataLabel.NameColorId = +(TMPlugin.SaveDataLabel.Parameters['labelNameColorId'] || 16);
TMPlugin.SaveDataLabel.ValueColorId = +(TMPlugin.SaveDataLabel.Parameters['labelValueColorId'] || 0);
TMPlugin.SaveDataLabel.MaxColorId = +(TMPlugin.SaveDataLabel.Parameters['labelMaxColorId'] || 2);
TMPlugin.SaveDataLabel.FooterColorId = +(TMPlugin.SaveDataLabel.Parameters['labelFooterColorId'] || 0);

(function () {

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

  var _DataManager_makeSavefileInfo = DataManager.makeSavefileInfo;
  DataManager.makeSavefileInfo = function () {
    var info = _DataManager_makeSavefileInfo.call(this);
    info.labelA = TMPlugin.SaveDataLabel.LabelAId ? $gameVariables.value(TMPlugin.SaveDataLabel.LabelAId) : 0;
    info.labelB = TMPlugin.SaveDataLabel.LabelBId ? $gameVariables.value(TMPlugin.SaveDataLabel.LabelBId) : 0;
    return info;
  };

  //-----------------------------------------------------------------------------
  // Window_SavefileList
  //

  var _Window_SavefileList_drawItem = Window_SavefileList.prototype.drawItem;
  Window_SavefileList.prototype.drawItem = function (index) {
    _Window_SavefileList_drawItem.call(this, index);
    var id = index + 1;
    var valid = DataManager.isThisGameFile(id);
    var info = DataManager.loadSavefileInfo(id)
    if (info && valid) {
      var rect = this.itemRectForText(index);
      var x = rect.width + this.textPadding();
      if (TMPlugin.SaveDataLabel.LabelAId && info.labelA != null) {
        var label = {
          name: TMPlugin.SaveDataLabel.LabelAName, value: info.labelA,
          max: TMPlugin.SaveDataLabel.LabelAMax,
          footer: TMPlugin.SaveDataLabel.LabelAFooter
        };
        this.drawSaveDataLabel(x, rect.y, label);
      }
      if (TMPlugin.SaveDataLabel.LabelBId && info.labelB != null) {
        var label = {
          name: TMPlugin.SaveDataLabel.LabelBName, value: info.labelB,
          max: TMPlugin.SaveDataLabel.LabelBMax,
          footer: TMPlugin.SaveDataLabel.LabelBFooter
        };
        this.drawSaveDataLabel(x, rect.y + this.lineHeight(), label);
      }
    }
  };

  Window_SavefileList.prototype.drawSaveDataLabel = function (x, y, label) {
    if (label.footer) {
      var footerWidth = this.textWidth(label.footer);
      x -= footerWidth;
      this.changeTextColor(this.textColor(TMPlugin.SaveDataLabel.FooterColorId));
      this.drawText(label.footer, x, y, footerWidth);
    }
    x -= TMPlugin.SaveDataLabel.ValueWidth;
    this.changeTextColor(this.textColor(TMPlugin.SaveDataLabel.ValueColorId));
    if (label.max && label.value >= label.max) {
      label.value = label.max;
      this.changeTextColor(this.textColor(TMPlugin.SaveDataLabel.MaxColorId));
    }
    this.drawText(label.value, x, y, TMPlugin.SaveDataLabel.ValueWidth, 'right');
    if (label.name) {
      x -= TMPlugin.SaveDataLabel.NameWidth;
      this.changeTextColor(this.textColor(TMPlugin.SaveDataLabel.NameColorId));
      this.drawText(label.name, x, y, TMPlugin.SaveDataLabel.NameWidth);
    }
  };

})();


code:
//=============================================================================
// TMPlugin - ゆれるサキュバスさん
// バージョン: 1.0.2
// 最終更新日: 2016/08/19
// 配布元    : http://hikimoki.sakura.ne.jp/
//-----------------------------------------------------------------------------
// Copyright (c) 2016 tomoaky
// Released under the MIT license.
// http://opensource.org/licenses/mit-license.php
//=============================================================================

/*:
 * @plugindesc ゆれるサキュバスさんが冒険のサポートをしてくれます。
 *
 * @author tomoaky (http://hikimoki.sakura.ne.jp/)
 *
 * @param messageX
 * @desc メッセージウィンドウのＸ座標。
 * 初期値: 8
 * @default 8
 *
 * @param messageY
 * @desc メッセージウィンドウのＹ座標。
 * 初期値: 572
 * @default 572
 *
 * @param messageWidth
 * @desc メッセージウィンドウの幅。
 * 初期値: 640
 * @default 640
 *
 * @param succuX
 * @desc サキュバスのＸ座標補正値。
 * 初期値: 80
 * @default 80
 *
 * @param succuY
 * @desc サキュバスのＹ座標補正値。
 * 初期値: 80
 * @default 80
 *
 * @param succuIdleTopY
 * @desc 上側に表示する場合のサキュバスの待機位置Ｙ座標。
 * 初期値: -40
 * @default -40
 *
 * @param succuIdleBottomY
 * @desc 下側に表示する場合のサキュバスの待機位置Ｙ座標。
 * 初期値: 844
 * @default 844
 *
 * @param messageCloseTimer
 * @desc メッセージウィンドウを閉じるまでの時間。
 * 初期値: 180
 * @default 180
 *
 * @param messageFastCloseTimer
 * @desc 早送り状態でメッセージウィンドウを閉じるまでの時間。
 * 初期値: 30
 * @default 30
 *
 * @param messageDuration
 * @desc 待機状態までの時間。
 * 初期値: 180
 * @default 180
 *
 * @param messagePause
 * @desc 通常メッセージ表示中に一時停止する。
 * 初期値: 1 ( 0 で無効 / 1 有効 )
 * @default 1
 *
 * @param messageFast
 * @desc 早送り状態に移行する保留メッセージ件数。
 * 初期値: 8
 * @default 8
 *
 * @param messageMax
 * @desc 保留可能なメッセージの上限。
 * 初期値: 16
 * @default 16
 *
 * @param messageGainGold
 * @desc お金獲得時のメッセージ。
 * 初期値: %1\G ゲット！
 * @default %1\G ゲット！
 *
 * @param messageLostGold
 * @desc お金減少時のメッセージ。
 * 初期値: %1\G ロスト…
 * @default %1\G ロスト…
 *
 * @param messageGainItem
 * @desc アイテム獲得時のメッセージ。
 * 初期値: %1 ゲット！
 * @default %1 ゲット！
 *
 * @param messageLostItem
 * @desc アイテム減少時のメッセージ。
 * 初期値: %1 ロスト…
 * @default %1 ロスト…
 *
 * @param messageGainItems
 * @desc 複数アイテム獲得時のメッセージ。
 * 初期値: %1%2個 ゲット！
 * @default %1%2個 ゲット！
 *
 * @param messageLostItems
 * @desc 複数アイテム減少時のメッセージ。
 * 初期値: %1%2個 ロスト…
 * @default %1%2個 ロスト…
 *
 * @requiredAssets img/system/image_1
 * @requiredAssets img/system/SuccubusBody
 * @requiredAssets img/system/SuccubusBust
 * @requiredAssets img/system/SuccubusHead
 * @requiredAssets img/system/SuccubusHeadC
 * @requiredAssets img/system/SuccubusLArmT
 * @requiredAssets img/system/SuccubusLHairB
 * @requiredAssets img/system/SuccubusLHairT
 * @requiredAssets img/system/SuccubusLLegB
 * @requiredAssets img/system/SuccubusLLegT
 * @requiredAssets img/system/SuccubusLWing
 * @requiredAssets img/system/SuccubusRArmB
 * @requiredAssets img/system/SuccubusRArmT
 * @requiredAssets img/system/SuccubusRHairB
 * @requiredAssets img/system/SuccubusRHairT
 * @requiredAssets img/system/SuccubusRLegB
 * @requiredAssets img/system/SuccubusRLegT
 * @requiredAssets img/system/SuccubusRWing
 * @requiredAssets img/system/SuccubusShadow
 * @requiredAssets img/system/SuccubusTail
 * @requiredAssets img/system/TMSuccuNaviArrow
 *
 * @help
 * 準備:
 *
 *   プラグインと一緒に配布している以下の画像を img/pictures フォルダに
 *   保存してください。ファイル名を変更することはできません。
 *   SuccubusBody.png
 *   SuccubusBust.png
 *   SuccubusHead.png
 *   SuccubusHeadC.png
 *   SuccubusLArmT.png
 *   SuccubusLHairB.png
 *   SuccubusLHairT.png
 *   SuccubusLLegB.png
 *   SuccubusLLegT.png
 *   SuccubusLWing.png
 *   SuccubusRArmB.png
 *   SuccubusRArmT.png
 *   SuccubusRHairB.png
 *   SuccubusRHairT.png
 *   SuccubusRLegB.png
 *   SuccubusRLegT.png
 *   SuccubusRWing.png
 *   SuccubusShadow.png
 *   SuccubusTail.png
 *
 *   また、以下の画像を img/System フォルダに保存してください。
 *   TMSuccuNaviArrow.png
 *
 *
 * 使い方:
 *
 *   以下のイベントコマンド実行時、自動的にサキュバスさんがあらわれて
 *   メッセージが表示されます。
 *   ・所持金の増減
 *   ・アイテムの増減
 *   ・武器の増減
 *   ・防具の増減
 *
 *   このプラグインは RPGツクールMV Version 1.3.0 で動作確認をしています。
 *
 *
 * プラグインコマンド:
 *
 *   succuStop
 *     自動メッセージ機能を停止します。
 *
 *   succuStart
 *     停止した自動メッセージを再開します。
 *
 *   succuClear
 *     保留しているメッセージを全て削除します。
 *
 *   succuMes テキスト
 *     テキストを保留メッセージの末尾に追加します。
 *
 *   succuForce テキスト
 *     テキストを保留メッセージの先頭に追加します。
 *
 *   保留メッセージの数が上限に達している状態で force コマンドを実行すると
 *   最後に追加されたメッセージが押し出され、削除されます。
 */

var Imported = Imported || {};
Imported.TMSuccuNavi = true;

var TMPlugin = TMPlugin || {};
TMPlugin.SuccuNavi = {};
TMPlugin.SuccuNavi.Parameters = PluginManager.parameters('TMSuccuNavi');
TMPlugin.SuccuNavi.MessageX = +(TMPlugin.SuccuNavi.Parameters['messageX'] || 8);
TMPlugin.SuccuNavi.MessageY = +(TMPlugin.SuccuNavi.Parameters['messageY'] || 572);
TMPlugin.SuccuNavi.MessageWidth = +(TMPlugin.SuccuNavi.Parameters['messageWidth'] || 640);
TMPlugin.SuccuNavi.SuccuX = +(TMPlugin.SuccuNavi.Parameters['succuX'] || 80);
TMPlugin.SuccuNavi.SuccuY = +(TMPlugin.SuccuNavi.Parameters['succuY'] || 80);
TMPlugin.SuccuNavi.SuccuIdleTopY = +(TMPlugin.SuccuNavi.Parameters['succuIdleTopY'] || -40);
TMPlugin.SuccuNavi.SuccuIdleBottomY = +(TMPlugin.SuccuNavi.Parameters['succuIdleBottomY'] || 844);
TMPlugin.SuccuNavi.MessageCloseTimer = +(TMPlugin.SuccuNavi.Parameters['messageCloseTimer'] || 180);
TMPlugin.SuccuNavi.MessageFastCloseTimer = +(TMPlugin.SuccuNavi.Parameters['messageFastCloseTimer'] || 30);
TMPlugin.SuccuNavi.MessageIdleTimer = +(TMPlugin.SuccuNavi.Parameters['messageIdleTimer'] || 180);
TMPlugin.SuccuNavi.MessagePause = +(TMPlugin.SuccuNavi.Parameters['messagePause']) === '1';
TMPlugin.SuccuNavi.MessageFast = +(TMPlugin.SuccuNavi.Parameters['messageFast'] || 8);
TMPlugin.SuccuNavi.MessageMax = +(TMPlugin.SuccuNavi.Parameters['messageMax'] || 16);
TMPlugin.SuccuNavi.MessageGainGold = TMPlugin.SuccuNavi.Parameters['messageGainGold'];
TMPlugin.SuccuNavi.MessageLostGold = TMPlugin.SuccuNavi.Parameters['messageLostGold'];
TMPlugin.SuccuNavi.MessageGainItem = TMPlugin.SuccuNavi.Parameters['messageGainItem'];
TMPlugin.SuccuNavi.MessageLostItem = TMPlugin.SuccuNavi.Parameters['messageLostItem'];
TMPlugin.SuccuNavi.MessageGainItems = TMPlugin.SuccuNavi.Parameters['messageGainItems'];
TMPlugin.SuccuNavi.MessageLostItems = TMPlugin.SuccuNavi.Parameters['messageLostItems'];

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

(function () {

  //-----------------------------------------------------------------------------
  // Game_Map
  //

  Game_Map.prototype.createSuccubus = function () {
    this._succubus = new Game_Succubus();
  };

  Game_Map.prototype.succubus = function () {
    if (!this._succubus) this.createSuccubus();
    return this._succubus;
  };

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

  Game_Map.prototype.updateSuccubus = function () {
    this.succubus().update();
  };

  //-----------------------------------------------------------------------------
  // Game_Succubus
  //

  Game_Succubus.prototype.initialize = function () {
    this._duration = -TMPlugin.SuccuNavi.MessageIdleTimer;
  };

  Game_Succubus.prototype.setDuration = function (duration) {
    this._duration = duration;
  };

  Game_Succubus.prototype.duration = function () {
    if (this._duration == null) this._duration = -TMPlugin.SuccuNavi.MessageIdleTimer;
    return this._duration;
  };

  Game_Succubus.prototype.clearMessage = function () {
    this._messageBuffer = [];
  };

  Game_Succubus.prototype.clearCurrentMessage = function () {
    this._currentMessage = null;
  };

  Game_Succubus.prototype.addMessage = function (text) {
    this._messageBuffer = this._messageBuffer || [];
    if (!this.isMessageMax()) this._messageBuffer.push(text);
  };

  Game_Succubus.prototype.forceMessage = function (text) {
    this._messageBuffer = this._messageBuffer || [];
    this._messageBuffer.unshift(text);
    if (this.isMessageMax()) this._messageBuffer.pop();
  };

  Game_Succubus.prototype.nextMessage = function () {
    this._messageBuffer = this._messageBuffer || [];
    this._currentMessage = this._messageBuffer.shift();
  };

  Game_Succubus.prototype.currentMessage = function () {
    return this._currentMessage;
  };

  Game_Succubus.prototype.isMessageExist = function () {
    this._messageBuffer = this._messageBuffer || [];
    return this._messageBuffer.length > 0;
  };

  Game_Succubus.prototype.setIdle = function (flag) {
    this._idle = flag;
  };

  Game_Succubus.prototype.isIdle = function () {
    if (this._idle == null) this._idle = true;
    return this._idle;
  };

  Game_Succubus.prototype.isMessageFast = function () {
    return this._messageBuffer.length >= TMPlugin.SuccuNavi.MessageFast;
  };

  Game_Succubus.prototype.isMessageMax = function () {
    return this._messageBuffer.length >= TMPlugin.SuccuNavi.MessageMax;
  };

  Game_Succubus.prototype.setAutoMessage = function (state) {
    this._succuAutoMesState = state;
  };

  Game_Succubus.prototype.isAutoMessageStop = function () {
    return this._succuAutoMesState === 'stop';
  };

  Game_Succubus.prototype.update = function () {
    if (TMPlugin.SuccuNavi.MessagePause && $gameMessage.isBusy()) {
      return;
    }
    if (this._duration > -TMPlugin.SuccuNavi.MessageIdleTimer) {
      this._duration--;
      if (this._duration === 0) {
        this.clearCurrentMessage();
      } else if (this._duration === -TMPlugin.SuccuNavi.MessageIdleTimer) {
        if (!this.isMessageExist()) this.setIdle(true);
      }
      if (this.isMessageFast() && this._duration > TMPlugin.SuccuNavi.MessageFastCloseTimer) {
        this._duration = TMPlugin.SuccuNavi.MessageFastCloseTimer;
      }
    }
  };

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

  // 所持金の増減
  var _Game_Interpreter_command125 = Game_Interpreter.prototype.command125;
  Game_Interpreter.prototype.command125 = function () {
    if (!$gameMap.succubus().isAutoMessageStop()) {
      var value = this.operateValue(this._params[0], this._params[1], this._params[2]);
      if (value > 0) {
        $gameMap.succubus().addMessage(TMPlugin.SuccuNavi.MessageGainGold.format(value));
      } else if (value < 0) {
        $gameMap.succubus().addMessage(TMPlugin.SuccuNavi.MessageLostGold.format(-value));
      }
    }
    return _Game_Interpreter_command125.call(this);
  };

  // アイテムの増減
  var _Game_Interpreter_command126 = Game_Interpreter.prototype.command126;
  Game_Interpreter.prototype.command126 = function () {
    if (!$gameMap.succubus().isAutoMessageStop()) {
      var value = this.operateValue(this._params[1], this._params[2], this._params[3]);
      var item = $dataItems[this._params[0]];
      this.addSuccuItemMes(item, value);
    }
    return _Game_Interpreter_command126.call(this);
  };

  // 武器の増減
  var _Game_Interpreter_command127 = Game_Interpreter.prototype.command127;
  Game_Interpreter.prototype.command127 = function () {
    if (!$gameMap.succubus().isAutoMessageStop()) {
      var value = this.operateValue(this._params[1], this._params[2], this._params[3]);
      var item = $dataWeapons[this._params[0]];
      this.addSuccuItemMes(item, value);
    }
    return _Game_Interpreter_command127.call(this);
  };

  // 防具の増減
  var _Game_Interpreter_command128 = Game_Interpreter.prototype.command128;
  Game_Interpreter.prototype.command128 = function () {
    if (!$gameMap.succubus().isAutoMessageStop()) {
      var value = this.operateValue(this._params[1], this._params[2], this._params[3]);
      var item = $dataArmors[this._params[0]];
      this.addSuccuItemMes(item, value);
    }
    return _Game_Interpreter_command128.call(this);
  };

  Game_Interpreter.prototype.addSuccuItemMes = function (item, value) {
    if (value > 0) {
      if (value > 1) {
        $gameMap.succubus().addMessage(TMPlugin.SuccuNavi.MessageGainItems.format(item.name, value));
      } else {
        $gameMap.succubus().addMessage(TMPlugin.SuccuNavi.MessageGainItem.format(item.name));
      }
    } else if (value < 0) {
      if (value < -1) {
        $gameMap.succubus().addMessage(TMPlugin.SuccuNavi.MessageLostItems.format(item.name, -value));
      } else {
        $gameMap.succubus().addMessage(TMPlugin.SuccuNavi.MessageLostItem.format(item.name));
      }
    }
  };

  var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function (command, args) {
    _Game_Interpreter_pluginCommand.call(this, command, args);
    if (command === 'succuStart') {
      $gameMap.succubus().setAutoMessage('normal');
    } else if (command === 'succuStop') {
      $gameMap.succubus().setAutoMessage('stop');
    } else if (command === 'succuClear') {
      $gameMap.succubus().clearMessage();
    } else if (command === 'succuMes') {
      $gameMap.succubus().addMessage(args[0]);
    } else if (command === 'succuForce') {
      $gameMap.succubus().forceMessage(args[0]);
    }
  };

  //-----------------------------------------------------------------------------
  // Sprite_AnimeChild
  //

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

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

  Sprite_AnimeChild.prototype.initialize = function (name, parentSprite, ax, ay,
    cx, cy, angleReset, timer) {
    Sprite.prototype.initialize.call(this);
    this.bitmap = ImageManager.loadPicture(name);
    this._cx = cx;
    this._cy = cy;
    this._angleReset = angleReset;
    this._timer = timer;
    this._count = 0;
    this._plusX = 0;
    this._plusY = 0;
    this.anchor.x = cx / this.bitmap.width;
    this.anchor.y = cy / this.bitmap.height;
    this._r = 0;
    this._parentSprite = parentSprite;
    if (parentSprite != null) {
      var x = ax - parentSprite._cx;
      var y = ay - parentSprite._cy;
      this._ad = Math.sqrt(x * x + y * y);
      this._aa = Math.atan2(y, x);
      this.updatePosition();
    }
  };

  Sprite_AnimeChild.prototype.update = function () {
    Sprite.prototype.update.call(this);
    if (this._timer > 0) {
      this._count++;
      if (this._count === this._timer) this._count = 0;
    }
    if (this._parentSprite != null) this.updatePosition();
  };

  Sprite_AnimeChild.prototype.updatePosition = function () {
    this.rotation = this._angleReset ? this._r : this._parentSprite._r + this._r;
    this.x = this._parentSprite.x + Math.cos(this._aa + this._parentSprite._r) * this._ad + this._plusX;
    this.y = this._parentSprite.y + Math.sin(this._aa + this._parentSprite._r) * this._ad + this._plusY;
  };

  Sprite_AnimeChild.prototype.getTimerAngle = function () {
    return Math.sin(this._count * Math.PI * 2 / this._timer);
  };

  //-----------------------------------------------------------------------------
  // Sprite_Succubus
  //

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

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

  Sprite_Succubus.prototype.initialize = function (x, y) {
    Sprite.prototype.initialize.call(this);
    this._shadowSprite = new Sprite_AnimeChild('SuccubusShadow', null, 0, 0, 73, 19, false, 120);
    this._shadowSprite.x = x;
    this._shadowSprite.y = y;
    this._bodySprite = new Sprite_AnimeChild('SuccubusBody', this._shadowSprite, 73, -100, 31, 30, false, 120);
    this._headSprite = new Sprite_AnimeChild('SuccubusHead', this._bodySprite, 22, 5, 21, 43, false, 180);
    this._rHairTSprite = new Sprite_AnimeChild('SuccubusRHairT', this._headSprite, 13, 18, 73, 14, true, 120);
    this._rHairBSprite = new Sprite_AnimeChild('SuccubusRHairB', this._rHairTSprite, 50, 33, 58, 10, false, 120);
    this._lHairTSprite = new Sprite_AnimeChild('SuccubusLHairT', this._headSprite, 39, 29, 6, 32, true, 120);
    this._lHairBSprite = new Sprite_AnimeChild('SuccubusLHairB', this._lHairTSprite, 17, 42, 13, 13, false, 120);
    this._bustSprite = new Sprite_AnimeChild('SuccubusBust', this._bodySprite, 28, 13, 20, 9, false, 60);
    this._rArmTSprite = new Sprite_AnimeChild('SuccubusRArmT', this._bodySprite, 9, 11, 13, 9, false, 105);
    this._rArmBSprite = new Sprite_AnimeChild('SuccubusRArmB', this._rArmTSprite, 10, 32, 34, 12, false, 105);
    this._lArmTSprite = new Sprite_AnimeChild('SuccubusLArmT', this._bodySprite, 33, 9, 8, 26, false, 120);
    this._rLegTSprite = new Sprite_AnimeChild('SuccubusRLegT', this._bodySprite, 29, 49, 14, 13, false, 120);
    this._rLegBSprite = new Sprite_AnimeChild('SuccubusRLegB', this._rLegTSprite, 48, 16, 11, 12, false, 120);
    this._lLegTSprite = new Sprite_AnimeChild('SuccubusLLegT', this._bodySprite, 43, 46, 14, 43, false, 120);
    this._lLegBSprite = new Sprite_AnimeChild('SuccubusLLegB', this._lLegTSprite, 31, 13, 12, 13, false, 120);
    this._rWingSprite = new Sprite_AnimeChild('SuccubusRWing', this._bodySprite, 18, 29, 85, 30, false, 30);
    this._lWingSprite = new Sprite_AnimeChild('SuccubusLWing', this._bodySprite, 34, 25, 9, 39, false, 30);
    this._tailSprite = new Sprite_AnimeChild('SuccubusTail', this._bodySprite, 31, 54, 31, 10, false, 90);
    this.addChild(this._shadowSprite);
    this.addChild(this._lHairBSprite);
    this.addChild(this._lHairTSprite);
    this.addChild(this._rHairBSprite);
    this.addChild(this._rHairTSprite);
    this.addChild(this._lWingSprite);
    this.addChild(this._lArmTSprite);
    this.addChild(this._lLegTSprite);
    this.addChild(this._lLegBSprite);
    this.addChild(this._rWingSprite);
    this.addChild(this._bodySprite);
    this.addChild(this._bustSprite);
    this.addChild(this._tailSprite);
    this.addChild(this._rArmTSprite);
    this.addChild(this._rArmBSprite);
    this.addChild(this._rLegTSprite);
    this.addChild(this._rLegBSprite);
    this.addChild(this._headSprite);
    this._blinkCount = 0;
    this._blinkTimer = 120;
  };

  Sprite_Succubus.prototype.update = function () {
    this._bodySprite._plusY = this._bodySprite.getTimerAngle() * 20;
    this._bustSprite._plusY = this._bustSprite.getTimerAngle() * -1.2 + 1.2;
    this._headSprite._r = this._headSprite.getTimerAngle() * 0.08;
    this._rLegTSprite._r = this._rLegTSprite.getTimerAngle() * 0.08;
    this._rLegBSprite._r = this._rLegBSprite.getTimerAngle() * 0.15;
    this._lLegTSprite._r = this._lLegTSprite.getTimerAngle() * -0.04 + 0.08;
    this._lLegBSprite._r = this._lLegBSprite.getTimerAngle() * -0.15;
    this._rArmTSprite._r = this._rArmTSprite.getTimerAngle() * -0.08;
    this._rArmBSprite._r = this._rArmBSprite.getTimerAngle() * -0.08 - 0.08;
    this._lArmTSprite._r = this._lArmTSprite.getTimerAngle() * 0.03 + 0.02;
    this._rWingSprite._r = this._rWingSprite.getTimerAngle() * 0.15;
    this._lWingSprite._r = this._lWingSprite.getTimerAngle() * -0.15;
    this._rHairTSprite._r = this._rHairTSprite.getTimerAngle() * 0.08;
    this._rHairBSprite._r = this._rHairBSprite.getTimerAngle() * 0.08;
    this._lHairTSprite._r = this._lHairTSprite.getTimerAngle() * -0.08;
    this._lHairBSprite._r = this._lHairBSprite.getTimerAngle() * -0.08;
    this._tailSprite._r = this._tailSprite.getTimerAngle() * 0.08;
    this._shadowSprite.scale.x = this._shadowSprite.getTimerAngle() * 0.05 + 0.95;
    this._shadowSprite.scale.y = this._shadowSprite.scale.x;
    this._blinkCount++;
    if (this._blinkCount == this._blinkTimer) {
      this._blinkCount = -5;
      this._blinkTimer = Math.randomInt(240) + 120;
      this._headSprite.bitmap = ImageManager.loadPicture('SuccubusHeadC');
    } else if (this._blinkCount == 0) {
      this._headSprite.bitmap = ImageManager.loadPicture('SuccubusHead');
    }
    this.updatePosition();
    Sprite.prototype.update.call(this);
  };

  Sprite_Succubus.prototype.updatePosition = function () {
    var y = TMPlugin.SuccuNavi.MessageY + TMPlugin.SuccuNavi.SuccuY;
    if ($gameMap.succubus().isIdle()) {
      this._shadowSprite.y += y < Graphics.height / 2 ? -5 : 5;
      this._shadowSprite.y = this._shadowSprite.y.clamp(TMPlugin.SuccuNavi.SuccuIdleTopY,
        TMPlugin.SuccuNavi.SuccuIdleBottomY);
    } else {
      if (this._shadowSprite.y < y) {
        this._shadowSprite.y += 20;
        if (this._shadowSprite.y > y) this._shadowSprite.y = y;
      } else if (this._shadowSprite.y > y) {
        this._shadowSprite.y -= 20;
        if (this._shadowSprite.y < y) this._shadowSprite.y = y;
      }
    }
  };

  Sprite_Succubus.prototype.hide = function () {
    for (var i = 0; i < this.children.length; i++) {
      this.children[i].visible = false;
    }
  };

  //-----------------------------------------------------------------------------
  // Spriteset_Map
  //

  var _Spriteset_Map_createLowerLayer = Spriteset_Map.prototype.createLowerLayer;
  Spriteset_Map.prototype.createLowerLayer = function () {
    _Spriteset_Map_createLowerLayer.call(this);
    this.createSuccubus();
  };

  Spriteset_Map.prototype.createSuccubus = function () {
    var x = TMPlugin.SuccuNavi.MessageX + TMPlugin.SuccuNavi.SuccuX;
    var y = TMPlugin.SuccuNavi.MessageY + TMPlugin.SuccuNavi.SuccuY;
    if (y < Graphics.height / 2) {
      y = TMPlugin.SuccuNavi.SuccuIdleTopY;
    } else {
      y = TMPlugin.SuccuNavi.SuccuIdleBottomY;
    }
    this._succubus = new Sprite_Succubus(x, y);
    this._baseSprite.addChild(this._succubus);
  };

  Spriteset_Map.prototype.hideSuccubus = function () {
    this._succubus.hide();
  };

  //-----------------------------------------------------------------------------
  // Window_SuccuMes
  //

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

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

  Window_SuccuMes.prototype.initialize = function () {
    var x = TMPlugin.SuccuNavi.MessageX;
    var y = TMPlugin.SuccuNavi.MessageY;
    var wight = this.windowWidth();
    var height = this.windowHeight();
    Window_Base.prototype.initialize.call(this, x, y, wight, height);
    this.createArrowSprite();
    this.openness = 0;
    if ($gameMap.succubus().currentMessage()) {
      this._text = this.convertEscapeCharacters($gameMap.succubus().currentMessage());
      this.refresh();
      this.open();
    }
    this._text = null;
  };

  Window_SuccuMes.prototype.createArrowSprite = function () {
    this._arrowSprite = new Sprite();
    this._arrowSprite.bitmap = ImageManager.loadSystem('TMSuccuNaviArrow');
    this._arrowSprite.anchor.x = 0.5;
    this._arrowSprite.x = TMPlugin.SuccuNavi.SuccuX;
    this._arrowSprite.y = -29;
    this._windowSpriteContainer.addChild(this._arrowSprite);
  };

  // ウィンドウの幅を取得
  Window_SuccuMes.prototype.windowWidth = function () {
    return TMPlugin.SuccuNavi.MessageWidth;
  };

  // ウィンドウの高さを取得
  Window_SuccuMes.prototype.windowHeight = function () {
    return 44;
  };

  // 標準パディングを取得
  Window_SuccuMes.prototype.standardPadding = function () {
    return 4;
  };

  // フレーム更新
  Window_SuccuMes.prototype.update = function () {
    Window_Base.prototype.update.call(this);
    if (TMPlugin.SuccuNavi.MessagePause && $gameMessage.isBusy()) {
      this.close();
      $gameMap.succubus().setIdle(true);
    } else {
      if ($gameMap.succubus().duration() <= 0) {
        if (this.isClosed()) {
          if ($gameMap.succubus().currentMessage()) {
            this.setSuccuMes($gameMap.succubus().currentMessage());
          } else if ($gameMap.succubus().isMessageExist()) {
            $gameMap.succubus().nextMessage();
            this.setSuccuMes($gameMap.succubus().currentMessage());
          }
        } else {
          this.close();
        }
      }
    }
  };

  Window_SuccuMes.prototype.setSuccuMes = function (text) {
    this._text = this.convertEscapeCharacters(text);
    this.refresh();
    this.open();
    $gameMap.succubus().setDuration(TMPlugin.SuccuNavi.MessageCloseTimer);
    $gameMap.succubus().setIdle(false);
  };

  // リフレッシュ
  Window_SuccuMes.prototype.refresh = function () {
    this.contents.clear();
    this.drawTextEx(this._text, 12, 0);
  };

  //-----------------------------------------------------------------------------
  // Scene_Boot
  //

  var _Scene_Boot_loadSystemImages = Scene_Boot.loadSystemImages;
  Scene_Boot.loadSystemImages = function () {
    _Scene_Boot_loadSystemImages.call(this);
    ImageManager.loadSystem('TMSuccuNaviArrow');
    ImageManager.loadPicture('SuccubusBody');
    ImageManager.loadPicture('SuccubusBust');
    ImageManager.loadPicture('SuccubusHead');
    ImageManager.loadPicture('SuccubusHeadC');
    ImageManager.loadPicture('SuccubusLArmT');
    ImageManager.loadPicture('SuccubusLHairB');
    ImageManager.loadPicture('SuccubusLHairT');
    ImageManager.loadPicture('SuccubusLLegB');
    ImageManager.loadPicture('SuccubusLLegT');
    ImageManager.loadPicture('SuccubusLWing');
    ImageManager.loadPicture('SuccubusRArmB');
    ImageManager.loadPicture('SuccubusRArmT');
    ImageManager.loadPicture('SuccubusRHairB');
    ImageManager.loadPicture('SuccubusRHairT');
    ImageManager.loadPicture('SuccubusRLegB');
    ImageManager.loadPicture('SuccubusRLegT');
    ImageManager.loadPicture('SuccubusRWing');
    ImageManager.loadPicture('SuccubusTail');
    ImageManager.loadPicture('SuccubusShadow');
  };

  //-----------------------------------------------------------------------------
  // Scene_Map
  //

  var _Scene_Map_createMapNameWindow = Scene_Map.prototype.createMapNameWindow;
  Scene_Map.prototype.createMapNameWindow = function () {
    this.createSuccuMesWindow();
    _Scene_Map_createMapNameWindow.call(this);
  };

  // サキュバスメッセージウィンドウの作成
  Scene_Map.prototype.createSuccuMesWindow = function () {
    this._succuMesWindow = new Window_SuccuMes();
    this.addChild(this._succuMesWindow);
  };

  var _Scene_Map_terminate = Scene_Map.prototype.terminate;
  Scene_Map.prototype.terminate = function () {
    this._succuMesWindow.hide();
    this._spriteset.hideSuccubus();
    _Scene_Map_terminate.call(this);
  };

})();


code:
//=============================================================================
// TMPlugin - 先頭並び替え不可
// バージョン: 1.0.1
// 最終更新日: 2017/02/17
// 配布元    : http://hikimoki.sakura.ne.jp/
//-----------------------------------------------------------------------------
// Copyright (c) 2015 tomoaky
// Released under the MIT license.
// http://opensource.org/licenses/mit-license.php
//=============================================================================

/*:
 * @plugindesc パーティの先頭にいるアクターの並び替えを禁止します。
 *
 * @author tomoaky (http://hikimoki.sakura.ne.jp/)
 *
 * @help
 * TMPlugin - 先頭並び替え不可 ver1.0.1
 *
 * 使い方:
 *
 *   ゲーム開始時は先頭アクターの並び替えが禁止の状態になります。
 *   必要に応じてプラグインコマンドで解除してください。
 *
 *   このプラグインは RPGツクールMV Version 1.3.5 で動作確認をしています。
 *
 * プラグインコマンド:
 *
 *   stopTopFix
 *     先頭並び替え禁止を解除します。
 *
 *   startTopFix
 *     先頭並び替えを禁止します。
 */

var Imported = Imported || {};
Imported.TMTopFix = true;

(function () {

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

  Game_System.prototype.setTopFix = function (topFix) {
    this._topFix = topFix;
  };

  Game_System.prototype.isTopFix = function () {
    if (this._topFix == null) this._topFix = true;
    return this._topFix;
  };

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

  var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function (command, args) {
    _Game_Interpreter_pluginCommand.call(this, command, args);
    if (command === 'stopTopFix') {
      $gameSystem.setTopFix(false);
    } else if (command === 'startTopFix') {
      $gameSystem.setTopFix(true);
    }
  };

  //-----------------------------------------------------------------------------
  // Window_MenuStatus
  //

  var _Window_MenuStatus_isCurrentItemEnabled = Window_MenuStatus.prototype.isCurrentItemEnabled;
  Window_MenuStatus.prototype.isCurrentItemEnabled = function () {
    if ($gameSystem.isTopFix() && this._formationMode && this.index() === 0) {
      return false;
    }
    return _Window_MenuStatus_isCurrentItemEnabled.call(this);
  };

})();


code:
//=============================================================================
// TN_SpriteExtender.js
//=============================================================================
//v1.04 New function: The body rate can be manually changed if it is named like "filename_x###.png" (#:number)
//v1.03a Fix a bug: When an extended event changed to non-extended one by event page refresh, it was not shown correctly.
//v1.02a Fix a bug: The lowerbody of the non-extended sprites are not transparent when they are on bush.
//v1.01 Resolve the plugin confliction with the color tone function of CharacterGraphicExtend.js
//v1.00 Released
/*:
 * @plugindesc 【有償ライセンス】任意の比率で歩行グラフィックの胴体を引き伸ばし、頭身を上げます。
 * @author terunon / AA series
 * @version 1.04
 * @target MZ
 * @url https://terunon.booth.pm/
 *
 * @param 胴体の引き伸ばし率
 * @desc 1でデフォルトと同じ頭身になります。高いほど頭身が上がります。
 * @default 1.42
 *
 * @param 頭の範囲
 * @desc 歩行グラフィック上端を0とし、ここに指定した値までは引き伸ばしを行いません。
 * @default 14
 *
 * @param 除外ファイル（部分一致）
 * @desc 画像ファイル名に特定の文字列が含まれる場合、頭身引き伸ばしを行いません。【スペース無しのカンマ区切りで複数指定可】
 * @default !,Damage
 *
 * @param 除外ファイル（完全一致）
 * @desc ここに記載された画像ファイルは、頭身引き伸ばしを行いません。【スペース無しのカンマ区切りで複数指定可】
 * @default Nature,Monster,Vehicle
 *
 * @param 茂みタイルの高さを統一
 * @desc 茂み属性タイルに入った時、頭身を上げていないキャラも上げたキャラと同じ高さだけ身体が隠れるようにします。
 * @type boolean
 * @on 統一する
 * @off 統一しない
 * @default true
 *
 * @help
 * 頭身をお好きな比率に調節することができます。
 * 微妙な数値変更で、胴体のどのドットが引き伸ばされるか変わるため
 * 引き伸ばし方が気に入らない場合は、0.1～0.01単位で各値を調節してみてください。
 * 数値によっては、ホコグラの上端に別のホコグラ由来の線が見えることがありますが、
 * 0.01ほど数値を調整すれば消失します。
 *
 * v1.04新機能: 引き伸ばし比率の個別設定
 * イベント画像（characterフォルダ）のファイル名を 「ファイル名_x小数点を省いた比率.png」 にすると、
 * そのキャラクターのみ、プラグインパラメータの設定値ではなくファイル名で指定した比率で引き伸ばしを行います。
 *  （例: AbsentedAge_x120.png → 比率1.20、 Karen_x080 または Karen_x80 → 比率0.80）
 *
 * 再定義を含むため、プラグインリストの上の方への適用が望ましいです。
 * -----------------------------------------------------------
 * 【！】 有償ライセンスプラグイン
 * 本プラグインは、ライセンス付与者様名簿
 * （https://ch.nicovideo.jp/terunon/blomaga/ar1083931）に作者名（サークル名）を
 * 記載された方が、公開ゲームへ組み込んでご使用いただけます。
 *
 * BOOTHから有償ライセンス付き本プラグインをご購入できます。
 * 購入後、通常1～2日、最長5日以内に
 * BOOTHのメッセージ機能でお名前をお伺いし、ライセンス名簿に追加いたします。
 * 詳細は上記ライセンスページをご覧ください。
 *
 * This plugin can be used only by the users who have added the license roster below:
 *   https://ch.nicovideo.jp/terunon/blomaga/ar1083931
 *
 * When you buy this plugin, the license register form
 * will be post to your BOOTH account.
 *
 * [!] If you find a product without registering the license roster,
 * please report to me or the owner of the website.
 */

(function () {
    var parameters = PluginManager.parameters("TN_SpriteExtender"); var bodyRate = Number(parameters["\u80f4\u4f53\u306e\u5f15\u304d\u4f38\u3070\u3057\u7387"]); var bodyMargin = Number(parameters["\u982d\u306e\u7bc4\u56f2"]); var disableKeys = String(parameters["\u9664\u5916\u30d5\u30a1\u30a4\u30eb\uff08\u90e8\u5206\u4e00\u81f4\uff09"]).split(","); var disableFiles = String(parameters["\u9664\u5916\u30d5\u30a1\u30a4\u30eb\uff08\u5b8c\u5168\u4e00\u81f4\uff09"]).split(","); var disableKeysL = disableKeys.length;
    var disableFilesL = disableFiles.length; var bushHeight = parameters["\u8302\u307f\u30bf\u30a4\u30eb\u306e\u9ad8\u3055\u3092\u7d71\u4e00"] === "true"; Sprite_Character.prototype.updateBitmap = function () {
        if (this.isImageChanged()) {
            this._tilesetId = $gameMap.tilesetId(); this._tileId = this._character.tileId(); this._characterName = this._character.characterName(); this._characterIndex = this._character.characterIndex(); this._isSeperated = this.isSeperated(); this._bodyRate = this.bodyRate() || bodyRate; this.removeChild(this._upperBody);
            this.removeChild(this._lowerBody); this._upperBody = null; this._lowerBody = null; if (this._tileId > 0) this.setTileBitmap(); else this.setCharacterBitmap()
        }
    }; var TN_dn = 172; Sprite_Character.prototype.isSeperated = function () { for (var i = 0; i < disableKeysL; i++)if (this._characterName.contains(disableKeys[i])) return false; for (var i$0 = 0; i$0 < disableFilesL; i$0++)if (this._characterName === disableFiles[i$0]) return false; return true }; Sprite_Character.prototype.bodyRate = function () {
        var seeds = this._characterName.split("_x"); var seed =
            seeds[seeds.length - 1]; if (!seed) return bodyRate; return +seed / 100
    }; Sprite_Character.prototype.updateCharacterFrameDef = Sprite_Character.prototype.updateCharacterFrame; Sprite_Character.prototype.updateCharacterFrameSep = function () {
        var pw = this.patternWidth(); var ph = this.patternHeight(); var sx = (this.characterBlockX() + this.characterPatternX()) * pw; var sy = (this.characterBlockY() + this.characterPatternY()) * ph; this.createHalfBodySprites(); if (this._bushDepth > 0) this._lowerBody.opacity = 128; else this._lowerBody.opacity =
            255; this._upperBody.bitmap = this.bitmap; this._upperBody.visible = true; this._lowerBody.bitmap = this.bitmap; this._lowerBody.visible = true; this._upperBody.y = -bodyMargin * this._bodyRate; this._lowerBody.scale.y = this._bodyRate; this._upperBody.setFrame(sx, sy, pw, ph - bodyMargin); this._lowerBody.setFrame(sx, sy + ph - bodyMargin, pw, bodyMargin); this.setFrame(sx, sy, 0, ph); var tone = this._character._tone; if (tone) { this._upperBody.setColorTone(tone); this._lowerBody.setColorTone(tone) }
    }; Sprite_Character.prototype.updateCharacterFrame =
        function () { if (this.isSeperated()) this.updateCharacterFrameSep(); else this.updateCharacterFrameDef() }; if (bushHeight) Sprite_Character.prototype.updateCharacterFrameDef = function () {
            var pw = this.patternWidth(); var ph = this.patternHeight(); var sx = (this.characterBlockX() + this.characterPatternX()) * pw; var sy = (this.characterBlockY() + this.characterPatternY()) * ph; this.createHalfBodySprites(); if (this._bushDepth > 0) this._lowerBody.opacity = 128; else this._lowerBody.opacity = 255; this._upperBody.bitmap = this.bitmap; this._upperBody.visible =
                true; this._lowerBody.bitmap = this.bitmap; this._lowerBody.visible = true; this._upperBody.y = -bodyMargin * this._bodyRate; this._upperBody.setFrame(sx, sy, pw, ph - bodyMargin * this._bodyRate); this._lowerBody.setFrame(sx, sy + ph - bodyMargin * this._bodyRate, pw, bodyMargin * this._bodyRate); this.setFrame(sx, sy, pw, ph); var tone = this._character._tone; if (tone) { this._upperBody.setColorTone(tone); this._lowerBody.setColorTone(tone) }
        }
})();


code:
//=============================================================================
// TRP_DisplacementFilter.js
//=============================================================================
/*:
 * @plugindesc 水中マップ用のゆらぎフィルター
 * @author Thirop
 * @help
 *
 * 1.img/systemフォルダに指定する画像名の変形用画像ファイルを配置
 * 2.マップのメモ欄に設定を記述
 * <displacement:x方向スピード,y方向スピード,拡大率,画像名>
 * 拡大率を省略時のデフォルト値は20
 * 画像名を省略時のデフォルト値はDisplacementMap
 *
 */
//=============================================================================

(function () {
	var parameters = PluginManager.parameters('TRP_DisplacementFilter');

	//=============================================================================
	// Game_Screen
	//=============================================================================
	var _Game_Screen_clear = Game_Screen.prototype.clear;
	Game_Screen.prototype.clear = function () {
		_Game_Screen_clear.call(this);
		this._displacementSetting = null;
	};

	Game_Screen.prototype.startDisplacementFilter = function (sx, sy, scale, image) {
		this._displacementSetting = {
			sx: sx || 0,
			sy: sy || 0,
			scale: scale || 20,
			image: image || 'DisplacementMap'
		};
	};
	Game_Screen.prototype.clearDisplacementFilter = function (sx, sy, scale, image) {
		this._displacementSetting = null;
	};

	//=============================================================================
	// Game_Map
	//=============================================================================
	var _Game_Map_setup = Game_Map.prototype.setup;
	Game_Map.prototype.setup = function (mapId) {
		_Game_Map_setup.call(this, mapId);

		var displacement = $dataMap.meta ? $dataMap.meta.displacement : null;
		if (displacement) {
			this.setupDisplacement(displacement);
		} else {
			$gameScreen.clearDisplacementFilter();
		}
	};

	Game_Map.prototype.setupDisplacement = function (displacement) {
		var dispArgs = displacement.split(',');
		var sx = Number(dispArgs[0]);
		var sy = Number(dispArgs[1]);
		var scale = Number(dispArgs[2]) || 0;
		var image = dispArgs[3];
		$gameScreen.startDisplacementFilter(sx, sy, scale, image);
	};

	//=============================================================================
	// Scene_Map
	//=============================================================================
	var _Scene_Map_initialize = Scene_Map.prototype.initialize;
	Scene_Map.prototype.initialize = function () {
		_Scene_Map_initialize.call(this);
		this.clearDisplacement();
	};

	Scene_Map.prototype.clearDisplacement = function () {
		this._displacement = {
			image: '',
			scale: 0,
			filter: null,
			dx: -1,
			dy: -1
		};
	};

	var _Scene_Map_update = Scene_Map.prototype.update;
	Scene_Map.prototype.update = function () {
		_Scene_Map_update.call(this);

		this.updateDisplacementFilter();
	};

	Scene_Map.prototype.updateDisplacementFilter = function () {
		var setting = $gameScreen._displacementSetting;
		if (setting) {
			if (this._displacement.image !== setting.image) {
				this._displacement.image = setting.image;
				this.setupDisplacementFilters(setting);
			} else if (this._displacement.filter) {
				this._updateDisplacemenFilters(setting);
			}
		} else if (this._displacement.filter) {
			ths.removeDisplacementFilter();
		}
	};
	Scene_Map.prototype._updateDisplacemenFilters = function (setting) {
		var displacement = this._displacement;
		var filter = displacement.filter;
		filter.maskSprite.x += setting.sx;
		filter.maskSprite.y += setting.sy;

		var dx = $gameMap.displayX();
		if (displacement.dx !== dx) {
			filter.maskSprite.x += (displacement.dx - dx) * 48;
			displacement.dx = dx;
		}
		var dy = $gameMap.displayY();
		if (displacement.dy !== dy) {
			filter.maskSprite.y += (displacement.dy - dy) * 48;
			displacement.dy = dy;
		}

		if (this._displacement.scale !== setting.scale) {
			this._displacement.scale = setting.scale;
			filter.scale = new PIXI.Point(setting.scale, setting.scale);
		}
	};

	Scene_Map.prototype.setupDisplacementFilters = function (setting) {
		if (!this._displacement.filter) {
			this.createDisplacementFilter(setting);
		}
		var bitmap = ImageManager.loadSystem(setting.image);
		bitmap.addLoadListener(function (bitmap) {
			bitmap.baseTexture.wrapMode = PIXI.WRAP_MODES.REPEAT;
		});

		this._displacement.filter.maskSprite.bitmap = bitmap;

		this._displacement.scale = setting.scale;
		this._displacement.filter.scale = new PIXI.Point(setting.scale, setting.scale);
	};

	Scene_Map.prototype.createDisplacementFilter = function (setting) {
		var sprite = new Sprite();
		var filter = new PIXI.filters.DisplacementFilter(sprite);
		this.addChild(sprite);
		this._displacement.filter = filter;

		var allFilters = this._spriteset.filters || [];
		allFilters.push(filter);
		this._spriteset.filters = allFilters;
	};

	Scene_Map.prototype.removeDisplacementFilter = function () {
		var allFilters = this.filters;
		var filter = this._displacement.filter;
		var index = allFilters.indexOf(filter);
		if (index >= 0) {
			allFilters.splice(index, 1);
		}
		this.filters = allFilters;

		if (filter.maskSprite.parent) {
			filter.maskSprite.parent.removeChild(filter.maskSprite);
		}

		this.clearDisplacement();

	};

})();