code:
//=============================================================================
// CustomizeConfigDefault.js
// ----------------------------------------------------------------------------
// (C)2015 Triacontane
// This plugin is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.1.1 2020/09/13 Mano_InputConfig.jsと併用したとき、Option項目を消していると表示不整合が発生する競合を修正
// 1.1.0 2016/08/01 項目自体を非表示にする機能を追加しました。
// 1.0.3 2016/06/22 多言語対応
// 1.0.2 2016/01/17 競合対策
// 1.0.1 2015/11/01 既存コードの再定義方法を修正（内容に変化なし）
// 1.0.0 2015/11/01 初版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc Setting default value for Options
 * @author triacontane
 *
 * @param AlwaysDash
 * @desc Always dash(ON/OFF)
 * @default OFF
 *
 * @param CommandRemember
 * @desc Command remember(ON/OFF)
 * @default OFF
 *
 * @param BgmVolume
 * @desc BGM Volume(0-100)
 * @default 100
 *
 * @param BgsVolume
 * @desc BGS Volume(0-100)
 * @default 100
 *
 * @param MeVolume
 * @desc ME Volume(0-100)
 * @default 100
 *
 * @param SeVolume
 * @desc SE Volume(0-100)
 * @default 100
 *
 * @param EraseAlwaysDash
 * @desc Erase AlwaysDash Option(ON/OFF)
 * @default OFF
 *
 * @param EraseCommandRemember
 * @desc Erase CommandRemember Option(ON/OFF)
 * @default OFF
 *
 * @param EraseBgmVolume
 * @desc Erase BgmVolume Option(ON/OFF)
 * @default OFF
 *
 * @param EraseBgsVolume
 * @desc Erase BgsVolume Option(ON/OFF)
 * @default OFF
 *
 * @param EraseMeVolume
 * @desc Erase MeVolume Option(ON/OFF)
 * @default OFF
 *
 * @param EraseSeVolume
 * @desc Erase SeVolume Option(ON/OFF)
 * @default OFF
 *
 * @help Setting default value for Options.
 *
 * This plugin is released under the MIT License.
 */
/*:ja
 * @plugindesc オプションデフォルト値設定プラグイン
 * @author トリアコンタン
 *
 * @param 常時ダッシュ
 * @desc 常にダッシュする。（Shiftキーを押している場合のみ歩行）(ON/OFF)
 * @default OFF
 *
 * @param コマンド記憶
 * @desc 選択したコマンドを記憶する。(ON/OFF)
 * @default OFF
 *
 * @param BGM音量
 * @desc BGMの音量。0-100
 * @default 100
 *
 * @param BGS音量
 * @desc BGSの音量。0-100
 * @default 100
 *
 * @param ME音量
 * @desc MEの音量。0-100
 * @default 100
 *
 * @param SE音量
 * @desc SEの音量。0-100
 * @default 100
 *
 * @param 常時ダッシュ消去
 * @desc 常時ダッシュの項目を非表示にする。(ON/OFF)
 * @default OFF
 *
 * @param コマンド記憶消去
 * @desc コマンド記憶の項目を非表示にする。(ON/OFF)
 * @default OFF
 *
 * @param BGM音量消去
 * @desc BGM音量の項目を非表示にする。(ON/OFF)
 * @default OFF
 *
 * @param BGS音量消去
 * @desc BGS音量の項目を非表示にする。(ON/OFF)
 * @default OFF
 *
 * @param ME音量消去
 * @desc ME音量の項目を非表示にする。(ON/OFF)
 * @default OFF
 *
 * @param SE音量消去
 * @desc SE音量の項目を非表示にする。(ON/OFF)
 * @default OFF
 *
 * @help オプション画面で設定可能な項目のデフォルト値を指定した値に変更します。
 * 例えば、初回から常時ダッシュをONにしておけば
 * プレイヤーが設定を変更する手間を省くことができます。
 * この処理はconfig.rpgsaveが未作成の場合にのみ実行されます。
 *
 * また、項目そのものを消去することもできます。
 * 例えば、戦闘がないゲームでは「コマンド記憶」等は不要なので消去できます。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */
(function () {
  "use strict";
  var pluginName = "CustomizeConfigDefault";

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

  var getParamBoolean = function (paramNames) {
    var value = getParamOther(paramNames);
    return (value || "").toUpperCase() === "ON";
  };

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

  //=============================================================================
  // パラメータの取得と整形
  //=============================================================================
  var paramAlwaysDash = getParamBoolean(["AlwaysDash", "常時ダッシュ"]);
  var paramCommandRemember = getParamBoolean([
    "CommandRemember",
    "コマンド記憶",
  ]);
  var paramBgmVolume = getParamNumber(["BgmVolume", "BGM音量"], 0, 100);
  var paramBgsVolume = getParamNumber(["BgsVolume", "BGS音量"], 0, 100);
  var paramMeVolume = getParamNumber(["MeVolume", "ME音量"], 0, 100);
  var paramSeVolume = getParamNumber(["SeVolume", "SE音量"], 0, 100);
  var paramEraseAlwaysDash = getParamBoolean([
    "EraseAlwaysDash",
    "常時ダッシュ消去",
  ]);
  var paramEraseCommandRemember = getParamBoolean([
    "EraseCommandRemember",
    "コマンド記憶消去",
  ]);
  var paramEraseBgmVolume = getParamBoolean(["EraseBgmVolume", "BGM音量消去"]);
  var paramEraseBgsVolume = getParamBoolean(["EraseBgsVolume", "BGS音量消去"]);
  var paramEraseMeVolume = getParamBoolean(["EraseMeVolume", "ME音量消去"]);
  var paramEraseSeVolume = getParamBoolean(["EraseSeVolume", "SE音量消去"]);

  //=============================================================================
  // ConfigManager
  //  それぞれの項目に初期値を与えます。
  //=============================================================================
  var _ConfigManagerApplyData = ConfigManager.applyData;
  ConfigManager.applyData = function (config) {
    _ConfigManagerApplyData.apply(this, arguments);
    if (config.alwaysDash == null) this.alwaysDash = paramAlwaysDash;
    if (config.commandRemember == null)
      this.commandRemember = paramCommandRemember;
    if (config.bgmVolume == null) this.bgmVolume = paramBgmVolume;
    if (config.bgsVolume == null) this.bgsVolume = paramBgsVolume;
    if (config.meVolume == null) this.meVolume = paramMeVolume;
    if (config.seVolume == null) this.seVolume = paramSeVolume;
  };

  //=============================================================================
  // Window_Options
  //  パラメータを空白にした項目を除去します。
  //=============================================================================
  var _Window_Options_makeCommandList =
    Window_Options.prototype.makeCommandList;
  Window_Options.prototype.makeCommandList = function () {
    _Window_Options_makeCommandList.apply(this, arguments);
    if (paramEraseAlwaysDash) this.eraseOption("alwaysDash");
    if (paramEraseCommandRemember) this.eraseOption("commandRemember");
    if (paramEraseBgmVolume) this.eraseOption("bgmVolume");
    if (paramEraseBgsVolume) this.eraseOption("bgsVolume");
    if (paramEraseMeVolume) this.eraseOption("meVolume");
    if (paramEraseSeVolume) this.eraseOption("seVolume");
  };

  Window_Options.prototype.eraseOption = function (symbol) {
    for (var i = 0; i < this._list.length; i++) {
      if (this._list[i].symbol === symbol) {
        this._list.splice(i, 1);
        // for Mano_InputConfig.js
        this.adjustIndexManoInputConfig(i);
        break;
      }
    }
  };

  Window_Options.prototype.adjustIndexManoInputConfig = function (index) {
    if (this._gamepadOptionIndex > index) {
      this._gamepadOptionIndex -= 1;
    }
    if (this._keyboardConfigIndex > index) {
      this._keyboardConfigIndex -= 1;
    }
  };
})();


code:
//=============================================================================
// CustomizeCritical.js
// ----------------------------------------------------------------------------
// (C)2020 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.1.4 2020/07/11 複数ヒットする攻撃の会心判定が、ヒットごとに行われていなかった問題を修正
// 1.1.3 2017/09/01 様子を見る等の一部の行動を敵キャラが実行するとエラーになる問題を修正（byツミオさま）
// 1.1.2 2017/07/09 ヘルプのメモ欄「<CC計算式:JavaScript計算式>」の記述例が誤っていたので修正
// 1.1.1 2017/05/31 1.1.0の修正でメニュー画面でスキルを使用するとエラーになる不具合を修正
// 1.1.0 2017/05/27 連続ヒットする攻撃の2ヒット目以降のダメージが正常に表示されない問題を修正。YEP_BattleEngineCore.jsとの競合を解消
// 1.0.0 2016/05/05 初版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc 会心カスタマイズプラグイン
 * @author トリアコンタン
 *
 * @help 会心（クリティカルヒット）の確率とダメージ、演出をカスタマイズします。
 *
 * スキルのメモ欄に以下の通り記述してください。
 *
 * ・会心に専用計算式を適用します。書式はダメージ計算式と同様です。
 * 　計算式を適用した場合、デフォルトのダメージ3倍は無効になります。
 * <CC計算式:JavaScript計算式>
 * 例：<CC計算式:a.atk * 4> //攻撃力の4倍で相手の防御は無視
 *
 * ・会心の確率を加算します。元の確率に計算結果が加算されます。(百分率)
 * <CC確率加算:加算値>
 * 例：<CC確率加算:50> //元の確率+50%で発生
 *
 * ・会心の確率を変更します。元の確率は無視されます。(百分率)
 * <CC確率変更:変更値>
 * 例：<CC確率変更:\v[1]> //変数[1]の値の確率で発生
 *
 * ・会心発生時の専用の戦闘アニメを適用します。
 * <CCアニメ:戦闘アニメID>
 *
 * アクターもしくは敵キャラのメモ欄に以下の通り記述してください。
 * ただし、フロントビューの場合、敵キャラのアニメーションは表示されません。
 *
 * ・演出用の戦闘アニメを実行前に表示します。
 * <CC演出:戦闘アニメID>
 *
 * ・演出用の専用メッセージを実行前に表示します。
 * <CCメッセージ:メッセージ内容>
 *
 * ※ 敵全体あるいは複数回攻撃するスキルの場合、1回でも会心判定になった場合
 * 会心用の演出となります。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function () {
  "use strict";
  var pluginName = "CustomizeCritical";
  var metaTagPrefix = "CC";

  var getArgString = function (arg, upperFlg) {
    arg = convertEscapeCharactersAndEval(arg, false);
    return upperFlg ? arg.toUpperCase() : arg;
  };

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

  var convertEscapeCharactersAndEval = function (text, evalFlg) {
    if (text === null || text === undefined) {
      text = evalFlg ? "0" : "";
    }
    var window = SceneManager._scene._windowLayer.children[0];
    if (window) {
      var result = window.convertEscapeCharacters(text);
      return evalFlg ? eval(result) : result;
    } else {
      return text;
    }
  };

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

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

  //=============================================================================
  // Game_Action
  //  会心をカスタマイズします。
  //=============================================================================
  var _Game_Action_evalDamageFormula = Game_Action.prototype.evalDamageFormula;
  Game_Action.prototype.evalDamageFormula = function (target) {
    var item = this.item();
    var formula = getMetaValues(item, ["計算式", "Formula"]);
    if (formula && target.result().critical) {
      try {
        var a = this.subject();
        var b = target;
        var v = $gameVariables._data;
        var sign = [3, 4].contains(item.damage.type) ? -1 : 1;
        var value = Math.max(eval(getArgString(formula)), 0) * sign;
        if (isNaN(value)) value = 0;
        return value;
      } catch (e) {
        return 0;
      }
    } else {
      return _Game_Action_evalDamageFormula.apply(this, arguments);
    }
  };

  var _Game_Action_itemCri = Game_Action.prototype.itemCri;
  Game_Action.prototype.itemCri = function (target) {
    var queue = this._criticalQueue;
    if (queue && queue.length > 0) {
      return queue.shift() ? 1.0 : 0.0;
    } else {
      return _Game_Action_itemCri.apply(this, arguments);
    }
  };

  Game_Action.prototype.judgeCritical = function (target) {
    var changeValue = getMetaValues(this.item(), ["確率変更", "ProbChange"]);
    var itemCritical;
    if (changeValue) {
      itemCritical = getArgNumber(changeValue, 0, 100) / 100;
    } else {
      var addValue = getMetaValues(this.item(), ["確率加算", "ProbAdd"]);
      itemCritical =
        _Game_Action_itemCri.apply(this, arguments) +
        (addValue ? getArgNumber(addValue) / 100 : 0);
    }
    this._criticalQueue.push(Math.random() < itemCritical);
  };

  Game_Action.prototype.initCriticalQueue = function () {
    this._criticalQueue = [];
  };

  Game_Action.prototype.isCritical = function () {
    if (!this._criticalQueue) {
      return false;
    }
    return this._criticalQueue.some(function (critical) {
      return critical;
    });
  };

  var _Game_Action_applyCritical = Game_Action.prototype.applyCritical;
  Game_Action.prototype.applyCritical = function (damage) {
    var formula = getMetaValues(this.item(), ["計算式", "Formula"]);
    return formula ? damage : _Game_Action_applyCritical.apply(this, arguments);
  };

  //=============================================================================
  // Game_Battler
  //  データオブジェクトを取得します。
  //=============================================================================
  Game_Battler.prototype.getData = function () {
    return null;
  };

  Game_Actor.prototype.getData = function () {
    return this.actor();
  };

  Game_Enemy.prototype.getData = function () {
    return this.enemy();
  };

  //=============================================================================
  // BattleManager
  //  会心判定を事前に行います。
  //=============================================================================
  BattleManager.judgeCritical = function (action, targets) {
    action.initCriticalQueue();
    targets.forEach(function (target) {
      action.judgeCritical(target);
    });
  };

  //=============================================================================
  // Window_BattleLog
  //  会心の演出を追加定義します。
  //=============================================================================
  var _Window_BattleLog_startAction = Window_BattleLog.prototype.startAction;
  Window_BattleLog.prototype.startAction = function (subject, action, targets) {
    this._noCritialAnimationId = 0;
    this._currentAction = action;
    BattleManager.judgeCritical(action, targets);
    if (action.isCritical()) {
      this.showCriticalEffect(subject, action, targets);
      var animationIdString = getMetaValues(action.item(), [
        "アニメ",
        "Animation",
      ]);
      if (animationIdString) {
        this._noCritialAnimationId = action.item().animationId;
        action.item().animationId = getArgNumber(animationIdString, 1);
      }
    }
    _Window_BattleLog_startAction.apply(this, arguments);
  };

  var _Window_BattleLog_endAction = Window_BattleLog.prototype.endAction;
  Window_BattleLog.prototype.endAction = function (subject) {
    _Window_BattleLog_endAction.apply(this, arguments);
    if (this._noCritialAnimationId) {
      this._currentAction.item().animationId = this._noCritialAnimationId;
      this._noCritialAnimationId = 0;
    }
    this._currentAction = null;
  };

  Window_BattleLog.prototype.showCriticalEffect = function (
    subject,
    action,
    targets
  ) {
    var animationIdString = getMetaValues(subject.getData(), [
      "演出",
      "エフェクト",
    ]);
    if (animationIdString) {
      var animationId = getArgNumber(animationIdString, 1);
      var animation = $dataAnimations[animationId];
      if (animation) {
        this.push("showAnimation", subject, targets.clone(), animationId);
        this.push("waitForFrame", animation.frames.length * 4);
      }
    }
    var message = getMetaValues(subject.getData(), ["メッセージ", "Message"]);
    if (message) {
      this.push("addText", message);
    }
  };

  Window_BattleLog.prototype.waitForFrame = function (frame) {
    this._waitCount = frame;
  };
})();

repo_name: dazed/translations

license: unknown


code:
//=============================================================================
// CustomizeFollowersGraphic.js
// ----------------------------------------------------------------------------
// Copyright (c) 2015-2016 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.0.1 2016/05/09 向きとアニメパターンを直接設定する機能を追加
// 1.0.0 2016/05/07 初版
// ----------------------------------------------------------------------------
// [Blog]   : http://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc フォロワー画像調整プラグイン
 * @author トリアコンタン
 *
 * @help 本来はプレイヤーの設定に準ずるフォロワー画像の表示方法を調整します。
 * 以下のスクリプトを実行してください。
 *
 * ・フォロワーの移動速度(1-6)を設定します。
 * $gamePlayer.followers().setMoveSpeed(1);
 *
 * ・フォロワーの不透明度(0-255)を設定します。
 * $gamePlayer.followers().setOpacity(128);
 *
 * ・フォロワーの合成方法(0-3)を設定します。
 * $gamePlayer.followers().setBlendMode(1);
 *
 * ・フォロワーの歩行アニメ(true/false)を設定します。
 * $gamePlayer.followers().setWalkAnime(false);
 *
 * ・フォロワーの足踏みアニメ(true/false)を設定します。
 * $gamePlayer.followers().setStepAnime(true);
 *
 * ・フォロワーの向き固定(true/false)を設定します。
 * $gamePlayer.followers().setDirectionFix(true);
 *
 * ・フォロワーの透明状態(true/false)を設定します。
 * $gamePlayer.followers().setTransparent(true);
 *
 * ・フォロワーの向き(2, 4, 6, 8)を設定します。
 *  すでに向き固定されている場合、無効です。
 * $gamePlayer.followers().setDirection(2);
 *
 * ・フォロワーのアニメパターン(0-3)を設定します。
 * $gamePlayer.followers().setPattern(0);
 *
 * ・フォロワーの変更内容を全て消去します。
 * $gamePlayer.followers().clearProperty();
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function () {
  "use strict";

  //=============================================================================
  // Game_Followers
  //  専用のプロパティを追加定義します。
  //=============================================================================
  var _Game_Followers_initialize = Game_Followers.prototype.initialize;
  Game_Followers.prototype.initialize = function () {
    _Game_Followers_initialize.apply(this, arguments);
    this.clearProperty();
  };

  Game_Followers.prototype.clearProperty = function () {
    this._moveSpeed = undefined;
    this._opacity = undefined;
    this._blendMode = undefined;
    this._walkAnime = undefined;
    this._stepAnime = undefined;
    this._directionFix = undefined;
    this._transparent = undefined;
    this._direction = undefined;
    this._pattern = undefined;
  };

  Game_Followers.prototype.setPropertyForChild = function (follower) {
    if (this._moveSpeed !== undefined) {
      follower.setMoveSpeed(this._moveSpeed);
    }
    if (this._opacity !== undefined) {
      follower.setOpacity(this._opacity);
    }
    if (this._blendMode !== undefined) {
      follower.setBlendMode(this._blendMode);
    }
    if (this._walkAnime !== undefined) {
      follower.setWalkAnime(this._walkAnime);
    }
    if (this._stepAnime !== undefined) {
      follower.setStepAnime(this._stepAnime);
    }
    if (this._directionFix !== undefined) {
      follower.setDirectionFix(this._directionFix);
    }
    if (this._transparent !== undefined) {
      follower.setTransparent(this._transparent);
    }
    if (this._direction !== undefined) {
      follower.setDirection(this._direction);
    }
    if (this._pattern !== undefined) {
      follower.setPattern(this._pattern);
    }
  };

  Game_Followers.prototype.setMoveSpeed = function (moveSpeed) {
    this._moveSpeed = moveSpeed.clamp(1, 6);
  };

  Game_Followers.prototype.setOpacity = function (opacity) {
    this._opacity = opacity.clamp(0, 255);
  };

  Game_Followers.prototype.setBlendMode = function (blendMode) {
    this._blendMode = blendMode.clamp(0, 100);
  };

  Game_Followers.prototype.setWalkAnime = function (walkAnimation) {
    this._walkAnime = !!walkAnimation;
  };

  Game_Followers.prototype.setStepAnime = function (stepAnimation) {
    this._stepAnime = !!stepAnimation;
  };

  Game_Followers.prototype.setDirectionFix = function (directionFix) {
    this._directionFix = !!directionFix;
  };

  Game_Followers.prototype.setTransparent = function (transparent) {
    this._transparent = !!transparent;
  };

  Game_Followers.prototype.setDirection = function (direction) {
    this._direction = direction.clamp(1, 9);
  };

  Game_Followers.prototype.setPattern = function (pattern) {
    this._pattern = pattern.clamp(0, 3);
  };

  //=============================================================================
  // Game_Follower
  //  専用のプロパティを適用します。
  //=============================================================================
  var _Game_Follower_update = Game_Follower.prototype.update;
  Game_Follower.prototype.update = function () {
    _Game_Follower_update.apply(this, arguments);
    this.updateProperty();
  };

  Game_Follower.prototype.updateProperty = function () {
    var parent = $gamePlayer.followers();
    parent.setPropertyForChild(this);
  };
})();


code:
//=============================================================================
// CustomizeMaxSaveFile.js
// ----------------------------------------------------------------------------
// Copyright (c) 2015 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.1.1 2017/02/25 セーブファイル数により大きな値を設定できるよう上限を開放
// 1.1.0 2016/11/03 オートセーブなど最大数以上のIDに対してセーブするプラグインとの競合に対応
// 1.0.0 2016/03/19 初版
// ----------------------------------------------------------------------------
// [Blog]   : http://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc Customize max save file number
 * @author triacontane
 *
 * @param SaveFileNumber
 * @desc max save file number(1...100)
 * @default 20
 *
 * @help Customize max save file number
 *
 * No plugin command
 *
 * This plugin is released under the MIT License.
 */
/*:ja
 * @plugindesc 最大セーブファイル数変更プラグイン
 * @author トリアコンタン
 *
 * @param セーブファイル数
 * @desc 最大セーブファイル数です。
 * @default 20
 *
 * @help 最大セーブファイル数をパラメータで指定した値に変更します。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

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

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

  var getParamOther = function (paramNames) {
    if (!Array.isArray(paramNames)) paramNames = [paramNames];
    for (var i = 0; i < paramNames.length; i++) {
      var name = PluginManager.parameters(pluginName)[paramNames[i]];
      if (name) return name;
    }
    return null;
  };
  var paramSaveFileNumber = getParamNumber(
    ["SaveFileNumber", "セーブファイル数"],
    0
  );

  //=============================================================================
  // DataManager
  //  セーブファイルの数をカスタマイズします。
  //=============================================================================
  var _DataManager_loadGlobalInfo = DataManager.loadGlobalInfo;
  DataManager.loadGlobalInfo = function () {
    if (!this._globalInfo) {
      this._globalInfo = _DataManager_loadGlobalInfo.apply(this, arguments);
    }
    return this._globalInfo;
  };

  var _DataManager_saveGlobalInfo = DataManager.saveGlobalInfo;
  DataManager.saveGlobalInfo = function (info) {
    _DataManager_saveGlobalInfo.apply(this, arguments);
    this._globalInfo = null;
  };

  var _DataManager_maxSavefiles = DataManager.maxSavefiles;
  DataManager.maxSavefiles = function () {
    return paramSaveFileNumber
      ? paramSaveFileNumber
      : _DataManager_maxSavefiles.apply(this, arguments);
  };

  var _DataManager_isThisGameFile = DataManager.isThisGameFile;
  DataManager.isThisGameFile = function (savefileId) {
    if (savefileId > this.maxSavefiles()) {
      return false;
    } else {
      return _DataManager_isThisGameFile.apply(this, arguments);
    }
  };
})();


code:
//
//  カットイン ver1.02
//
// author yana
//

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

/*:
 * @plugindesc ver1.02/スキルやアイテムに記述することで、発動前にカットインを表示することができます。
 * @author Yana
 *
 * @param Count
 * @desc カットインの表示時間の基本値です。
 * フレームで指定してください。
 * @default 60
 *
 * @param AnchorX
 * @desc カットインのアンカー位置Xです。
 * @default 0
 *
 * @param AnchorY
 * @desc カットインのアンカー位置Yです。
 * @default 0.5
 *
 * @param ActorHomeX
 * @desc アクターのカットインの移動前のX座標です。
 * @default 816
 *
 * @param ActorHomeY
 * @desc アクターのカットインの移動前のY座標です。
 * @default 312
 *
 * @param ActorMoveX
 * @desc アクターのカットインの移動量X値です。
 * @default -816
 *
 * @param ActorMoveY
 * @desc アクターのカットインの移動量Y値です。
 * @default 0
 *
 * @param EnemyHomeX
 * @desc エネミーのカットインの移動前のX座標です。
 * @default -816
 *
 * @param EnemyHomeY
 * @desc エネミーのカットインの移動前のY座標です。
 * @default 312
 *
 * @param EnemyMoveX
 * @desc エネミーのカットインの移動量X値です。
 * @default 816
 *
 * @param EnemyMoveY
 * @desc エネミーのカットインの移動量Y値です。
 * @default 0
 *
 * @noteParam CutIn1
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン1
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn2
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン2
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn3
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン3
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn4
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン4
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn5
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン5
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn6
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン6
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn7
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン7
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn8
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン8
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn9
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン9
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn10
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン10
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * ////////////////////////////////////////////////////////////////////////////////////
 *
 * @noteParam CutIn11
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン11
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn12
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン12
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn13
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン13
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn14
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン14
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn15
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン15
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn16
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン16
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn17
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン17
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn18
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン18
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn19
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン19
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn20
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン20
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * ////////////////////////////////////////////////////////////////////////////////////
 *
 * @noteParam CutIn21
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン21
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn22
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン22
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn23
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン23
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn24
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン24
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn25
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン25
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn26
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン26
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn27
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン27
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn28
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン28
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn29
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン29
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn30
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン30
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * ////////////////////////////////////////////////////////////////////////////////////
 *
 * @noteParam CutIn31
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン31
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn32
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン32
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn33
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン33
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn34
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン34
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn35
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン35
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn36
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン36
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn37
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン37
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn38
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン38
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn39
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン39
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn40
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン40
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * ////////////////////////////////////////////////////////////////////////////////////
 *
 * @noteParam CutIn41
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン41
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn42
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン42
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn43
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン43
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn44
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン44
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn45
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン45
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn46
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン46
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn47
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン47
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn48
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン48
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn49
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン49
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam CutIn50
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @noteParam カットイン50
 * @noteRequire 1
 * @noteDir img/pictures/
 * @noteType file
 * @noteData actors
 *
 * @help------------------------------------------------------
 *  プラグインコマンド
 * ------------------------------------------------------
 * ShowCutIn 対象指定 アイテム指定
 * カットイン表示 対象指定 アイテム指定
 *
 * 対象指定は、A○,E○,V○のように指定します。
 * A○の場合、ID○番のアクターが対象に指定され、そのアクターのメモに
 * 記述されたカットイン画像が使用されます。
 * E○の場合は、ID○番のエネミーが、V○の場合は、パーティの変数○番の値
 * のアクター(値が1000以上ならエネミー)となります。
 *
 * アイテム指定は、I○,S○,V○のように指定します。
 * I○の場合は、ID○番のアイテムに設定されたカットインが使用されます。
 * S○の場合は、ID○番のスキルが、V○の場合は、変数○番の値のスキルが
 * 使用されます。
 *
 * ------------------------------------------------------
 * 設定方法
 * ------------------------------------------------------
 *
 * スキルやアイテムのメモ欄に
 * <カットイン:xxx>
 * または、
 * <CutIn:xxx>
 * と記述すると、行動者のメモに<xxx:yyy>と記述されたyyyの
 * 画像をカットインとして表示します。
 * yyyは、カットイン1～50とCutIn1～50が、素材削除ツールの機能
 * を回避するためにアクターとエネミーに予約されています。
 *
 * また、スキルやアイテムのメモに記述するカットインの指定は、
 * 追加パラメータとして、ポップアップ用のパラメータが指定できます。
 * 指定可能なパラメータは以下となります。
 *
 * パラメータ詳細:
 * count:表示時間
 * delay:表示遅延
 * moveX:目標地点X(相対座標)
 * moveY:目標地点Y(相対座標)
 * sx:表示位置補正X
 * sy:表示位置補正Y
 * pattern:表示パターン
 * extend:表示タイミングの調整用配列で指定。 例:extend:[20,50] 20フレーム掛けて出現し、50フレーム目から消え始める。
 * fixed:画面に固定するか？ true/falseで指定。
 * anchorX:ポップアップのアンカーX値
 * anchorY:ポップアップのアンカーY値
 * slideCount:新しいポップアップが発生した際、上にスライドさせる速度。
 *
 * ------------------------------------------------------
 * 利用規約
 * ------------------------------------------------------
 * 使用に制限はありません。商用、アダルト、いずれにも使用できます。
 * 二次配布も制限はしませんが、サポートは行いません。
 * 著作表示は任意です。行わなくても利用できます。
 * 要するに、特に規約はありません。
 * バグ報告や使用方法等のお問合せはネ実ツクールスレ、または、Twitterにお願いします。
 * https://twitter.com/yanatsuki_
 * 素材利用は自己責任でお願いします。
 * ------------------------------------------------------
 * 更新履歴:
 * ver1.02:
 * CommonPopupCoreの更新に合わせて修正
 * ver1.01:
 * fixedのパラメータの初期値がtrueになっているのを修正
 * ver1.00:
 * 公開
 */

(function () {
  ////////////////////////////////////////////////////////////////////////////////////

  var parameters = PluginManager.parameters("CutIn");
  var countCutIn = Number(parameters["Count"] || 60);
  var anchorXCutIn = Number(parameters["AnchorX"] || 0);
  var anchorYCutIn = Number(parameters["AnchorY"] || 0);
  var actorHomeXCutIn = Number(parameters["ActorHomeX"] || 0);
  var actorHomeYCutIn = Number(parameters["ActorHomeY"] || 0);
  var actorMoveXCutIn = Number(parameters["ActorMoveX"] || 0);
  var actorMoveYCutIn = Number(parameters["ActorMoveY"] || 0);
  var enemyHomeXCutIn = Number(parameters["EnemyHomeX"] || 0);
  var enemyHomeYCutIn = Number(parameters["EnemyHomeY"] || 0);
  var enemyMoveXCutIn = Number(parameters["EnemyMoveX"] || 0);
  var enemyMoveYCutIn = Number(parameters["EnemyMoveY"] || 0);

  ////////////////////////////////////////////////////////////////////////////////////

  var __GInterpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function (command, args) {
    __GInterpreter_pluginCommand.call(this, command, args);
    if (command === "ShowCutIn" || command === "カットイン表示") {
      this.showCutIn(args[0], args[1]);
    }
  };

  Game_Interpreter.prototype.showCutIn = function (subject, item) {
    var s = null;
    var it = null;
    var isActor = true;
    if (/^([AEV])(\d+)/i.exec(subject)) {
      if (RegExp.$1 === "A") {
        s = $dataActors[Number(RegExp.$2)];
      } else if (RegExp.$1 === "E") {
        s = $dataEnemies[Number(RegExp.$2)];
        isActor = false;
      } else if (RegExp.$1 === "V") {
        var n = $gameVariables.value(Number(RegExp.$2));
        if (n < 1000) {
          s = $gameParty.members()[n];
        } else {
          s = $gameTroop.members()[n - 1000];
          isActor = false;
        }
      }
    } else {
      subject = Number(subject);
      if (subject < 1000) {
        s = $gameParty.members()[subject];
      } else {
        s = $gameTroop.members()[subject - 1000];
        isActor = false;
      }
    }
    if (/^([ISV])(\d+)/i.exec(item)) {
      if (RegExp.$1 === "I") {
        it = $dataItems[Number(RegExp.$2)];
      } else if (RegExp.$1 === "S") {
        it = $dataSkills[Number(RegExp.$2)];
      } else if (RegExp.$1 === "V") {
        it = $dataSkills[$gameVariables.value(Number(RegExp.$2))];
      }
    } else {
      it = $dataSkills[Number(item)];
    }
    CommonPopupManager.displayCutIn(s, it, isActor);
  };

  ////////////////////////////////////////////////////////////////////////////////////

  DataManager.isCutIn = function (item) {
    if (!item) {
      return false;
    }
    if (item.meta["カットイン"]) {
      return true;
    }
    if (item.meta["CutIn"]) {
      return true;
    }
    return false;
  };

  DataManager.cutIn = function (item) {
    var ary = [];
    var texts = item.note.split("\n");
    for (var i = 0, max = texts.length; i < max; i++) {
      if (/<(?:カットイン|CutIn):(.+)>/.exec(texts[i])) {
        ary.push(RegExp.$1.split(" "));
      }
    }
    return ary;
  };

  ////////////////////////////////////////////////////////////////////////////////////

  var __BManager_startAction = BattleManager.startAction;
  BattleManager.startAction = function () {
    var action = this._subject.currentAction();
    if (action && action.item() && DataManager.isCutIn(action.item())) {
      this._logWindow.displayCutIn(this._subject, action.item());
    }
    __BManager_startAction.call(this);
  };

  ////////////////////////////////////////////////////////////////////////////////////

  Window_BattleLog.prototype.displayCutIn = function (subject, item) {
    var sj = subject.isActor() ? subject.actor() : subject.enemy();
    CommonPopupManager.displayCutIn(sj, item, subject.isActor());
  };

  Window_BattleLog.prototype.showWindows = function () {
    this.visible = this._showStatus;
    SceneManager._scene._statusWindow.show();
    if (Imported["TurnWindow"]) {
      SceneManager._scene._turnWindow.show();
    }
    if (Imported["yAutoBattle"]) {
      SceneManager._scene._autoBattleWindow.show();
    }
  };

  ////////////////////////////////////////////////////////////////////////////////////

  CommonPopupManager.displayCutIn = function (subject, item, isActor) {
    var array = DataManager.cutIn(item);
    this.hideWindows();
    var speed = this.isFastForward() ? 3 : 1;
    var pos = [
      actorHomeXCutIn,
      actorHomeYCutIn,
      actorMoveXCutIn,
      actorMoveYCutIn,
    ];
    if (!isActor) {
      pos = [
        enemyHomeXCutIn,
        enemyHomeYCutIn,
        enemyMoveXCutIn,
        enemyMoveYCutIn,
      ];
    }
    for (var i = 0, max = array.length; i < max; i++) {
      var ary = array[i];
      var arg = CommonPopupManager.setPopup(ary);
      var fileName = ary[0];
      if (isActor) {
        fileName = subject.meta[fileName];
      } else {
        fileName = subject.meta[fileName];
      }
      if (fileName) {
        var bitmap = ImageManager.loadPicture(fileName);
        arg.count = countCutIn;
        arg.bitmap = bitmap;
        arg.anchorX = anchorXCutIn;
        arg.anchorY = anchorYCutIn;
        arg.x = pos[0];
        arg.moveX = pos[2];
        arg.y = pos[1];
        arg.moveY = pos[3];
        arg.fixed = false;
        for (var j = 0, jmax = ary.length; j < jmax; j++) {
          if (/^count:(\d+)/.exec(ary[j])) {
            arg.count = Number(RegExp.$1);
          } else if (/^x:(-?\d+)/.exec(ary[j])) {
            arg.x = Number(RegExp.$1);
          } else if (/^moveX:(-?\d+)/.exec(ary[j])) {
            arg.moveX = Number(RegExp.$1);
          } else if (/^y:(-?\d+)/.exec(ary[j])) {
            arg.y = Number(RegExp.$1);
          } else if (/^moveY:(-?\d+)/.exec(ary[j])) {
            arg.moveY = Number(RegExp.$1);
          } else if (/^anchorX:(.+)/.exec(ary[j])) {
            arg.anchorX = Number(RegExp.$1);
          } else if (/^anchorY:(.+)/.exec(ary[j])) {
            arg.anchorY = Number(RegExp.$1);
          } else if (/^pattern:(.+)/.exec(ary[j])) {
            arg.pattern = RegExp.$1;
          }
        }
        arg.count = Math.floor(arg.count / speed);
        arg.delay = Math.floor(arg.delay / speed);
        this._lastIndex = this._tempCommonSprites.setNullPos(arg);
        if ($gameParty.inBattle()) {
          var count = Math.floor((arg.count + arg.delay) / speed);
          if (SceneManager._scene._logWindow._waitCount <= 0) {
            SceneManager._scene._logWindow._waitCount = count;
          }
          if (SceneManager._scene._logWindow._waitCount < count) {
            SceneManager._scene._logWindow._waitCount = count;
          }
        }
        bitmap = null;
      }
      this.showWindows();
    }
  };

  CommonPopupManager.hideWindows = function () {
    if ($gameParty.inBattle()) {
      SceneManager._scene._logWindow._showStatus =
        SceneManager._scene._logWindow.visible;
      SceneManager._scene._logWindow.hide();
      SceneManager._scene._statusWindow.hide();
      if (Imported["TurnWindow"]) {
        SceneManager._scene._turnWindow.hide();
      }
      if (Imported["yAutoBattle"]) {
        SceneManager._scene._autoBattleWindow.hide();
      }
    }
  };

  CommonPopupManager.showWindows = function () {
    if ($gameParty.inBattle()) {
      SceneManager._scene._logWindow.push("showWindows");
    }
  };

  CommonPopupManager.isFastForward = function () {
    if ($gameParty.inBattle()) {
      return SceneManager._scene._logWindow.isFastForward();
    }
    return false;
  };

  ////////////////////////////////////////////////////////////////////////////////////
})();


code:
//=============================================================================
// 🏤drowsepost Plugins - Map Camera Controller
// DP_MapZoom.js
// Version: 0.87
//
// Copyright (c) 2016 - 2019 canotun
// Released under the MIT license.
// http://opensource.org/licenses/mit-license.php
//=============================================================================

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

var drowsepost = drowsepost || {};

//=============================================================================
/*:
 * @plugindesc Control the magnification of the map scene.
 * @author drowsepost
 *
 * @param Base Scale
 * @desc Set the basic magnification ratio.(Start up)
 * Default: 1 (0 or more)
 * @default 1
 *
 * @param Encount Effect
 * @desc Corrected code of encounter effect
 * Default: true (ON: true / OFF: false)
 * @default true
 * @type boolean
 *
 * @param Camera Controll
 * @desc camera control during magnification processing
 * Default: true (ON: true / OFF: false / Minimum: minimum)
 * @default true
 * @type select
 * @option ON
 * @value true
 * @option OFF
 * @value false
 * @option Minimum
 * @value minimum
 *
 * @param Weather Patch
 * @desc Change weather sprite generation range
 * Default: true (ON: true / OFF: false)
 * @default true
 * @type boolean
 *
 * @param Picture Size Fixation
 * @desc Exclude pictures from map zooming process
 * Default: ALL (ALL: true / OFF: false / $ / screen_ / fix_)
 * @default true
 * @type select
 * @option OFF
 * @value false
 * @option ALL
 * @value true
 * @option $
 * @value $
 * @option screen_
 * @value screen_
 * @option fix_
 * @value fix_
 *
 * @param Old Focus
 * @desc Use trackless focus similar to the old version.
 * Default: false (ON: true / OFF: false)
 * @default false
 * @type boolean
 *
 * @param Easing Function
 * @desc animation Easing function.
 * args: t (0.00～1.00) return: Number (0.00～1.00) Default: t
 * @default t
 * @type string
 *
 * @help
 * ============================================================================
 * About
 * ============================================================================
 * It controls the enlargement ratio of the map scene by
 * reflecting the calculation of the enlargement ratio
 * to various coordinate processing.
 * (sorry... english support is immature. by drowsepost)
 *
 * ============================================================================
 * Knowing issue
 * ============================================================================
 * If the enlargement ratio is too small in a huge map,
 * processing will be dropped in the canvas mode,
 * and the map missing problem will occur in the webgl mode.
 * This is the limit of the PIXI library and the solution is under investigation
 *
 * ============================================================================
 * How To Use
 * ============================================================================
 *
 * ◆ plugin command:
 * dpZoom {zoom ratio} {animate frames} {event id or "this" or "player"}
 * rename: mapSetZoom
 *
 * e.g.:
 * dpZoom 0.8 360 this
 * -> zoom out to 0.8x , animate 360 frames, centering to event of called
 *
 * dpZoom 1
 * -> zoom to 1x(reset), Immediate
 *
 * dpZoom 3 60 1
 * -> zoom to 3x , animate 60 frames, centering to Event id:001
 *
 * dpFocus {event id or "this" or "player"} {animate frames}
 * Place the specified event in the center of the screen without changing
 * the enlargement ratio of the screen.
 * The camera follows the movement of the event
 *
 * ◆ map meta:
 * if you need setting to Default Magnification on the map,
 * fill in the following in the "Note" field
 *
 * <zoomScale: {zoom ratio}>
 * Specify the enlargement ratio to be the basis for each map
 *
 * e.g.:
 * <zoomScale:0.5>
 * -> zoom out to 0.5x , Immediate
 *
 * if you need setting to Default Camera target on the map,
 * fill in the following in the "Note" field
 *
 * <camTarget: {event id or "player"}>
 * Events can be in the center of the screen.
 * The screen follows the movement of the event.
 *
 * e.g.:
 * <camTarget: 3>
 * -> set center of the screen Event ID "3"
 *
 * ============================================================================
 * Technical information
 * ============================================================================
 * If "screenX" or "screenY" used by another plugin is misaligned,
 * multiply "screenX" or "screenY" by "$gameScreen.zoomScale()".
 *
 * This plugin controls "$gameScreen"
 *
 * This plugin use savedata
 * "$gameMap._dp_scale", "$gameMap._dp_pan", "$gameMap._dp_target"
 *
 */
/*:ja
 * @plugindesc マップの拡大率を制御します。
 * @author drowsepost
 *
 * @param Base Scale
 * @desc 基本の拡大率を設定します。(0以上)
 * Default: 1
 * @default 1
 *
 * @param Encount Effect
 * @desc エンカウントエフェクトに拡大率を反映
 * Default: true (ON: true / OFF: false)
 * @default true
 * @type boolean
 *
 * @param Camera Controll
 * @desc 拡大処理中のセンタリング制御をこのプラグインが行う
 * Default: true (ON: true / OFF: false / 最小: minimum)
 * @default true
 * @type select
 * @option ON
 * @value true
 * @option OFF
 * @value false
 * @option Minimum
 * @value minimum
 *
 * @param Weather Patch
 * @desc 天候スプライトの生成範囲を広げる修正を適用します。
 * Default: true (ON: true / OFF: false)
 * @default true
 * @type boolean
 *
 * @param Picture Size Fixation
 * @desc ピクチャをマップの拡大処理から除外します
 * Default: ALL (ALL: true / OFF: false / $ / screen_ / fix_)
 * @default true
 * @type select
 * @option OFF
 * @value false
 * @option ALL
 * @value true
 * @option $
 * @value $
 * @option screen_
 * @value screen_
 * @option fix_
 * @value fix_
 *
 * @param Old Focus
 * @desc 古いバージョンの追跡なしのフォーカスを使用します。
 * Default: false (ON: true / OFF: false)
 * @default false
 * @type boolean
 *
 * @param Easing Function
 * @desc アニメーションのイージング式。
 * 引数 t (0.00～1.00) 戻り値 数値(0.00～1.00) Default: t
 * @default t
 * @type string
 *
 * @help
 * ============================================================================
 * About
 * ============================================================================
 * 各種座標処理に拡大率の計算を反映し
 * マップシーンの拡大率を制御します。
 * また、指定したイベントをカメラが追うように指定します。
 * 標準のフォーカス対象は先頭のプレイヤーとなります。
 *
 * ============================================================================
 * Knowing issue
 * ============================================================================
 * 巨大なマップにおいて拡大率をあまりに小さくすると
 * canvasモードで処理落ち、webglモードでマップ欠けの問題が発生します。
 * これはPIXIライブラリの限界であり、解決方法は調査中です
 *
 * ============================================================================
 * How To Use
 * ============================================================================
 * ◆ マップメモ欄
 *
 * <zoomScale:0.5>
 * などと記述すると、マップごとに基準になる拡大率を指定することが出来ます。
 *
 * <camTarget: 3>
 * 等と記述すると、イベントID n番のイベントが画面中央になった状態にできます。
 * フォーカスはイベントの移動に画面が追従します。
 *
 * ◆ プラグインコマンド
 *
 * (1)ズーム機能
 * dpZoom {倍率} {変更にかけるフレーム数} {対象イベントID / this / player}
 * 指定したイベントにフォーカスを合わせつつ画面の拡大率を変更できます。
 * 第3引数に何も指定しない場合、画面中央に向かって拡大します。
 *
 * 例:
 * プラグインコマンドにおいて対象イベントの部分に
 * 「this」もしくは「このイベント」と指定すると、
 * イベント実行中のオブジェクトを指定します。
 * dpZoom 2 360 this
 * たとえば上記はそのイベントが中心になるように6秒かけて2倍の拡大率に変化します。
 * <非推奨> mapSetZoom は利用できますが、非推奨とします。
 *
 * (2)フォーカス機能
 * dpFocus {対象イベントID / this / player} {変更にかけるフレーム数}
 * 画面の拡大率を変更せずに指定したイベントにフォーカスを合わせます。
 *
 * ============================================================================
 * Settings
 * ============================================================================
 * Base Scale
 * ゲーム開始時の拡大倍率を指定します。
 * 倍率には0以上を指定してください。
 *
 * Encount Effect
 * エンカウントエフェクトを置き換えるかどうかを指定します。
 * オリジナルのエフェクトで置き換えている場合はこちらをfalseにしてください。
 * しかしその場合、画面の拡大率をそれぞれ反映できるように調整する必要があります。
 *
 * Camera Controll
 * falseの場合はイベントを指定した拡大を含む拡大中のカメラ制御は動作しません。
 * 別プラグインでカメラ制御を行う場合にご利用ください。
 *
 * Weather Patch
 * trueの場合、天候スプライトの生成範囲に関する修正を行い、
 * 拡大率変更後も天候スプライトをまんべんなく分布させます
 * 別プラグインで天候演出の制御を行っている場合等はfalseにしてください。
 *
 * Picture Size Fixation
 * trueの場合、ピクチャを拡大処理から除外します。
 *
 * Old Focus
 * trueの場合、古いDP_MapZoom.jsと同様のフォーカス処理を行います。
 * このフォーカス処理は対象イベントまでの座標のずれを基準にしているため、
 * イベントの移動を追尾しません。
 *
 * Easing Function
 * ズーム時のイージングを主に0から1の間で戻す式を設定できます。
 * 引数 t にズームの進捗が0から1で入ります。JavaScript。
 *
 * ============================================================================
 * Technical information
 * ============================================================================
 * 現在の画面の拡大率は$gameScreen.zoomScale()で取得できます。
 * これはプラグインの利用に関わらず元から存在する関数です。
 * 他のプラグインで利用する「screenX」や「screenY」がずれる場合は、
 * 「screenX」や「screenY」にそれぞれ$gameScreen.zoomScale()を掛けて下さい。
 *
 * このプラグインは$gameScreenを制御します。
 *
 * 指定された拡大率設定は$gameMap._dp_scaleが保持します。
 * シーン離脱時のスクロール量は$gameMap._dp_panが保持します。
 * マップのフォーカスイベントは$gameMap._dp_targetが保持します。
 *
 */
(function () {
  "use strict";
  var user_map_marginright = 0;
  var user_map_marginbottom = 0;

  var parameters = PluginManager.parameters("DP_MapZoom");
  var user_scale = Number(parameters["Base Scale"] || 1);
  var user_fix_encount = Boolean(
    parameters["Encount Effect"] === "true" || false
  );
  var user_use_camera = Boolean(
    parameters["Camera Controll"] === "true" || false
  );
  var user_use_camera_transfer = Boolean(
    parameters["Camera Controll"] === "minimum" || false
  );
  var user_fix_weather = Boolean(
    parameters["Weather Patch"] === "true" || false
  );
  var user_fix_picture = parameters["Picture Size Fixation"];
  var user_use_oldfocus = Boolean(parameters["Old Focus"] === "true" || false);
  var user_easing_function = parameters["Easing Function"];

  /*
    Main Functions
    =============================================================================
    実際の拡大処理
    */
  var camera = {};

  /*
    dp_renderSize
    タイル拡大率を保持および仮想的なレンダリング範囲を算出します。
    */
  var dp_renderSize = {
    _scale: undefined,
    width: undefined,
    height: undefined,

    /**
     * 拡大率からレンダリングするべきオブジェクトのサイズを設定します。
     * @param {number} scale
     */
    onChange: function (_scale) {
      if (!("_scene" in SceneManager)) return;
      if (!("_spriteset" in SceneManager._scene)) return;
      var scale = _scale || this._scale;
      var spriteset = SceneManager._scene._spriteset;

      //マップサイズ変更
      spriteset._tilemap.width =
        Math.ceil(Graphics.width / scale) + spriteset._tilemap._margin * 2;
      spriteset._tilemap.height =
        Math.ceil(Graphics.height / scale) + spriteset._tilemap._margin * 2;

      //パララックスサイズ変更
      spriteset._parallax.move(
        0,
        0,
        Math.round(Graphics.width / scale),
        Math.round(Graphics.height / scale)
      );

      // Foreground.js対応
      if (
        spriteset._foreground &&
        spriteset._foreground instanceof TilingSprite
      ) {
        spriteset._foreground.move(
          0,
          0,
          Math.round(Graphics.width / scale),
          Math.round(Graphics.height / scale)
        );
      }

      spriteset._tilemap.refresh();
      spriteset._tilemap._needsRepaint = true;
      spriteset._tilemap.updateTransform();
    },

    /**
     * scaleをリセットします
     */
    reset: function () {
      this.scale = 1;
    },
  };

  Object.defineProperty(dp_renderSize, "scale", {
    get: function () {
      return this._scale;
    },
    set: function (val) {
      if (val != this._scale) {
        this._scale = Number(val);
        this.width = Math.ceil(Graphics.boxWidth / this._scale);
        this.height = Math.ceil(Graphics.boxHeight / this._scale);
        this.onChange();
      }
    },
  });

  /**
   * ズームすべき座標を算出
   * @return {object} Point
   */
  var dp_getZoomPos = function () {
    return new Point(
      camera.target.screenX(),
      camera.target.screenY() - $gameMap.tileHeight() / 2
    );
  };

  /**
   * マップのレンダリング原点と表示位置のずれを取得します。
   * @return {object} Point
   */
  var dp_getVisiblePos = function () {
    var scale = $gameScreen.zoomScale();
    return new Point(
      Math.round($gameScreen.zoomX() * (scale - dp_renderSize.scale)),
      Math.round($gameScreen.zoomY() * (scale - dp_renderSize.scale))
    );
  };

  /**
   * フォーカスされているキャラクターから画面の中心がどれだけずれているか取得します
   * @return {object} Point
   */
  var dp_getpan = function () {
    var centerPosX = ($gameMap.screenTileX() - 1) / 2;
    var centerPosY = ($gameMap.screenTileY() - 1) / 2;

    var pan_x = $gameMap.displayX() + centerPosX - camera.target._realX;
    var pan_y = $gameMap.displayY() + centerPosY - camera.target._realY;

    return new Point(
      $gameMap.screenTileX() >= $dataMap.width ? 0 : pan_x,
      $gameMap.screenTileY() >= $dataMap.height ? 0 : pan_y
    );
  };

  /**
   * 画面の拡大率を設定します。
   * @param {number} scale
   */
  var dp_setZoom = function (scale) {
    dp_renderSize.scale = scale;
    $gameMap._dp_scale = scale;

    $gameScreen.setZoom(0, 0, scale);
    camera.center();
  };

  /**
   * 指定されたイベントIDをイベントインスタンスにして返却
   * @param {any} event イベントIDもしくはイベントオブジェクトもしくはプレイヤー
   * @return {object} Game_CharacterBase
   */
  var dp_getEvent = function (event) {
    var _target;
    if (typeof event === "object") {
      if ("_eventId" in event) _target = $gameMap.event(event._eventId);
    }

    if (typeof event === "number") {
      _target = $gameMap.event(event);
    }

    if (!(_target instanceof Game_CharacterBase)) {
      _target = $gamePlayer;
    }

    return _target;
  };

  /**
   * カメラターゲットから目標イベントまでのマップ上のズレ(x,y)を取得
   * @param {any} event イベントIDもしくはイベントオブジェクトもしくはプレイヤー
   * @return {object} Point
   */
  var dp_targetPan = function (event) {
    var _target = dp_getEvent(event);

    return new Point(
      _target._realX - camera.target._realX,
      _target._realY - camera.target._realY
    );
  };

  /**
   * 文字列をイージング用関数として評価した関数を返します
   * @param {String|Function} txt_func
   * @return {Function} イージング用関数、引数は float t
   */
  var dp_txtToEasing = function (txt_func) {
    var basic_func = function (t) {
      return t;
    };
    if (typeof txt_func === "function") return txt_func;
    if (typeof txt_func !== "string") return basic_func;
    if (txt_func == "") return basic_func;

    try {
      return new Function("t", "return " + txt_func + ";");
    } catch (e) {
      console.error("DP_MapZoom: Easing Function", e, txt_func);
    }
    return basic_func;
  };

  /**
   * 線形補完
   * @param {Number} p 入力進捗率
   * @param {Number} from 開始数値
   * @param {Number} to 目標数値
   * @return {Number} 結果進捗率
   */
  var dp_lerp = function (p, from, to) {
    return from + (to - from) * p;
  };

  /*
    Camera Object
    ===================================================================================
    */

  /**
   * カメラのアニメーションを制御するオブジェクト
   */
  camera.animation = (function () {
    //private
    var _active = false;
    var _count, _duration, _easing;
    var _start_pan, _start_scale, _end_pan, _end_scale;

    //public
    var r = {
      /**
       * アニメーションのスタート
       * @param {Number} scale 目標とする拡大率
       * @param {Point} pos 目標とする座標のズレ
       * @param {Number} dulation 変化にかけるフレーム
       */
      start: function (scale, pos, duration) {
        var is_zoomout = $gameScreen.zoomScale() > scale ? true : false;

        _count = 0;
        _duration = duration || 0;
        _end_scale = scale || $gameScreen.zoomScale();
        _end_pan = pos || new Point();

        _start_pan = dp_getpan();
        _start_scale = $gameScreen.zoomScale();

        if (is_zoomout) {
          dp_renderSize.scale = scale;
          camera.center(_start_pan.x, _start_pan.y);
        }

        _active = true;
      },
      /**
       * アニメーションのアップデート
       * camera.animation.update
       */
      update: function () {
        if (!_active) return;

        var p = _count / _duration;
        _count++;

        if (p > 1) {
          r.end();
          return;
        }

        if (_count % 2 === 0) return;

        var ease = _easing(p);
        var x = dp_lerp(ease, _start_pan.x, _end_pan.x);
        var y = dp_lerp(ease, _start_pan.y, _end_pan.y);
        var z = dp_lerp(ease, _start_scale, _end_scale);

        $gameScreen.setZoom(0, 0, z);
        camera.center(x, y);
      },
      /**
       * アニメーションの終了
       */
      end: function () {
        if (!_active) return;
        _active = false;

        $gameMap._dp_pan = _end_pan;
        dp_setZoom(_end_scale);
      },
    };

    Object.defineProperty(r, "easing", {
      get: function () {
        return _easing;
      },
      set: function (val) {
        _easing = dp_txtToEasing(val);
      },
    });

    r.easing = user_easing_function;

    return r;
  })();

  /**
   * カメラのズームを開始する関数
   * @param {number} ratio 拡大率
   * @param {number} duration 変化にかけるフレーム
   * @param {any} target フォーカスするイベントIDもしくはゲームイベントオブジェクト
   */
  camera.zoom = function (ratio, duration, target) {
    if (typeof ratio !== "number" || ratio < 0) {
      ratio = dp_renderSize.scale;
    }

    var target_pan = dp_getpan();
    if (typeof target !== "undefined") {
      if (user_use_oldfocus) {
        target_pan = dp_targetPan(target);
      } else {
        camera.target = target;
        target_pan = new Point();
      }
    }

    if (duration > 0) {
      camera.animation.start(ratio, target_pan, duration);
    } else {
      $gameMap._dp_pan = target_pan;
      dp_setZoom(ratio);
    }
  };

  /**
   * フォーカスしたターゲットをカメラ中央に配置
   * @param {number} panX 画面をずらすマスの数。横。
   * @param {number} panY 画面をずらすマスの数。縦。
   * @param {boolean} force_center カメラ制御無効でも実行
   */
  camera.center = function (panX, panY, force_center) {
    if (!user_use_camera && !force_center) return;
    var px = Number(panX || $gameMap._dp_pan.x);
    var py = Number(panY || $gameMap._dp_pan.y);
    camera.target.center(camera.target._realX + px, camera.target._realY + py);
  };

  /**
   * カメラがフォーカスする対象
   * @param {any} event イベントIDもしくはゲームイベントもしくはプレイヤー
   * @return {object} ゲームイベントもしくはプレイヤー
   */
  Object.defineProperty(camera, "target", {
    get: function () {
      if ($gameMap._dp_target === 0) return $gamePlayer;
      return $gameMap.event($gameMap._dp_target);
    },
    set: function (event) {
      var _target = dp_getEvent(event);

      $gameMap._dp_target = 0;
      if (typeof _target === "object") {
        if ("_eventId" in _target) $gameMap._dp_target = _target._eventId;
      }
    },
  });

  //公開
  drowsepost.camera = camera;
  drowsepost.rendersize = dp_renderSize;

  /*
    Command Entry
    ===================================================================================
    @param {array} args スペース区切りで指定したプラグインコマンドの引数(array<string>)
    */
  drowsepost.fn = drowsepost.fn || {};

  /**
   * 拡大率を変更せずにフォーカス変更
   * {target} {frame}
   */
  var _p_dpfocus =
    "dpFocus" in drowsepost.fn ? drowsepost.fn.dpFocus : function () {};
  drowsepost.fn.dpFocus = function (_a) {
    _p_dpfocus.call(this, _a);

    var _s = this;
    var _target;

    if (_a.length < 1) _a.push("player");

    if (_a[0] === "this" || _a[0] === "このイベント") _target = _s;
    else if (_a[0] === "player" || _a[0] === "プレイヤー")
      _target = $gamePlayer;
    else _target = parseInt(_a[0]);

    camera.zoom(dp_renderSize.scale, parseInt(_a[1]), _target);
  };

  /**
   * 画面拡大率を変更
   * 第三引数にターゲット指定でフォーカスも変更
   * {zoom} {frame} {target}
   */
  var _p_dpzoom =
    "dpZoom" in drowsepost.fn ? drowsepost.fn.dpZoom : function () {};
  drowsepost.fn.mapSetZoom = drowsepost.fn.dpZoom = function (_a) {
    _p_dpzoom.call(this, _a);

    var _s = this;
    var _target;

    if (_a.length > 2) {
      if (_a[2] === "this" || _a[2] === "このイベント") _target = _s;
      else if (_a[2] === "player" || _a[2] === "プレイヤー")
        _target = $gamePlayer;
      else _target = parseInt(_a[2]);
    }

    camera.zoom(parseFloat(_a[0]), parseInt(_a[1]), _target);
  };

  /*
    Game_Interpreter
    ===================================================================================
    コマンドパーサーの追加
    */
  (function () {
    //@override
    var _parent_pluginCommand = Game_Interpreter.prototype.pluginCommand;
    Game_Interpreter.prototype.pluginCommand = function (command, args) {
      _parent_pluginCommand.call(this, command, args);

      if ("DP_Basics" in Imported) return;
      if (!(command in drowsepost.fn)) return;
      if (typeof drowsepost.fn[command] === "function") {
        drowsepost.fn[command].call(this, args);
      }
    };
  })();

  /*
    Game Map
    =============================================================================
    拡大率($gameScreen.zoomScale())の反映
    */
  (function () {
    //@override
    var _parent_initialize = Game_Map.prototype.initialize;
    Game_Map.prototype.initialize = function () {
      _parent_initialize.call(this);

      //保存用変数エントリー
      this._dp_scale = user_scale;
      this._dp_pan = new Point();
      this._dp_target = 0;
    };

    //@override
    Game_Map.prototype.screenTileX = function () {
      return (
        (Graphics.width - user_map_marginright) /
        (this.tileWidth() * $gameScreen.zoomScale())
      );
    };

    //@override
    Game_Map.prototype.screenTileY = function () {
      return (
        (Graphics.height - user_map_marginbottom) /
        (this.tileHeight() * $gameScreen.zoomScale())
      );
    };

    //@override
    Game_Map.prototype.canvasToMapX = function (x) {
      var tileWidth = this.tileWidth() * $gameScreen.zoomScale();
      var originX = this._displayX * tileWidth;
      var mapX = Math.floor((originX + x) / tileWidth);
      return this.roundX(mapX);
    };

    //@override
    Game_Map.prototype.canvasToMapY = function (y) {
      var tileHeight = this.tileHeight() * $gameScreen.zoomScale();
      var originY = this._displayY * tileHeight;
      var mapY = Math.floor((originY + y) / tileHeight);
      return this.roundY(mapY);
    };
  })();

  /*
    Game Character
    =============================================================================
    Game Characterに注視する場合の処理を追加
    */
  (function () {
    Game_Character.prototype.centerX = function () {
      return ($gameMap.screenTileX() - 1) / 2.0;
    };

    Game_Character.prototype.centerY = function () {
      return ($gameMap.screenTileY() - 1) / 2.0;
    };

    Game_Character.prototype.center = function (x, y) {
      return $gameMap.setDisplayPos(x - this.centerX(), y - this.centerY());
    };

    Game_Character.prototype.updateScroll = function (
      lastScrolledX,
      lastScrolledY
    ) {
      var x1 = lastScrolledX;
      var y1 = lastScrolledY;
      var x2 = this.scrolledX();
      var y2 = this.scrolledY();
      if (y2 > y1 && y2 > this.centerY()) {
        $gameMap.scrollDown(y2 - y1);
      }
      if (x2 < x1 && x2 < this.centerX()) {
        $gameMap.scrollLeft(x1 - x2);
      }
      if (x2 > x1 && x2 > this.centerX()) {
        $gameMap.scrollRight(x2 - x1);
      }
      if (y2 < y1 && y2 < this.centerY()) {
        $gameMap.scrollUp(y1 - y2);
      }
    };
  })();

  /*
    Game Player
    =============================================================================
    拡大率の反映
    */
  (function () {
    //@override
    Game_Player.prototype.centerX = function () {
      return ($gameMap.screenTileX() - 1) / 2.0;
    };

    //@override
    Game_Player.prototype.centerY = function () {
      return ($gameMap.screenTileY() - 1) / 2.0;
    };

    //@override
    var _parent_updateScroll = Game_Player.prototype.updateScroll;
    Game_Player.prototype.updateScroll = function (
      lastScrolledX,
      lastScrolledY
    ) {
      if (typeof $gameMap !== "object") return;
      if ($gameMap._dp_target !== 0) return;
      _parent_updateScroll.call(this, lastScrolledX, lastScrolledY);
    };
  })();

  /*
    Game Event
    =============================================================================
    Game Eventに注視する場合の処理を追加
    */
  (function () {
    //@override
    var _parent_update = Game_Event.prototype.update;
    Game_Event.prototype.update = function () {
      var lastScrolledX = this.scrolledX();
      var lastScrolledY = this.scrolledY();

      _parent_update.call(this);

      this.updateScroll(lastScrolledX, lastScrolledY);
    };

    Game_Event.prototype.updateScroll = function (
      lastScrolledX,
      lastScrolledY
    ) {
      if (typeof $gameMap !== "object") return;
      if ($gameMap._dp_target !== this._eventId) return;
      Game_Character.prototype.updateScroll.call(
        this,
        lastScrolledX,
        lastScrolledY
      );
    };
  })();

  /*
    Weather
    =============================================================================
    描画反映変更機能の追加
    */
  (function () {
    //天候スプライトの生成範囲をGraphic基準ではなく実際の描画範囲に合わせる
    if (!user_fix_weather) return;
    //@override
    var _parent_rebornSprite = Weather.prototype._rebornSprite;
    Weather.prototype._rebornSprite = function (sprite) {
      _parent_rebornSprite.call(this, sprite);
      sprite.ax =
        Math.randomInt(dp_renderSize.width + 100) - 50 + this.origin.x;
      sprite.ay =
        Math.randomInt(dp_renderSize.height + 200) - 100 + this.origin.y;
      sprite.opacity = 160 + Math.randomInt(60);
    };
  })();

  /*
    Sprite_Picture
    =============================================================================
    ピクチャdot by dot配置機能の追加
    */
  (function () {
    //ピクチャの配置と拡大率を、スクリーンの拡大率で打ち消す
    if (!user_fix_picture) return;
    if (user_fix_picture === "false") return;

    //@override
    var _parent_loadBitmap = Sprite_Picture.prototype.loadBitmap;
    Sprite_Picture.prototype.loadBitmap = function () {
      _parent_loadBitmap.call(this);

      if (user_fix_picture === "true") {
        this._dp_fix = true;
      } else if (!this._pictureName.indexOf(user_fix_picture)) {
        this._dp_fix = true;
      } else {
        this._dp_fix = false;
      }
    };

    //@override
    var _parent_updateScale = Sprite_Picture.prototype.updateScale;
    Sprite_Picture.prototype.updateScale = function () {
      _parent_updateScale.call(this);
      if (!this._dp_fix) return;

      var picture = this.picture();
      this.scale.x = (1 / $gameScreen.zoomScale()) * (picture.scaleX() / 100);
      this.scale.y = (1 / $gameScreen.zoomScale()) * (picture.scaleY() / 100);
    };

    //@override
    var _parent_updatePosition = Sprite_Picture.prototype.updatePosition;
    Sprite_Picture.prototype.updatePosition = function () {
      _parent_updatePosition.call(this);
      if (!this._dp_fix) return;

      var picture = this.picture();
      var map_s = dp_getVisiblePos();
      this.x = (picture.x() + map_s.x) * (1 / $gameScreen.zoomScale());
      this.y = (picture.y() + map_s.y) * (1 / $gameScreen.zoomScale());
    };
  })();

  /*
    Sprite_Timer
    =============================================================================
    タイマーの配置とサイズを調整
    */
  (function () {
    //@override
    var _parent_updatePosition = Sprite_Timer.prototype.updatePosition;
    Sprite_Timer.prototype.updatePosition = function () {
      _parent_updatePosition.call(this);

      var _zoom = 1 / $gameScreen.zoomScale();

      this.x = this.x * _zoom;
      this.y = this.y * _zoom;
      this.scale.x = _zoom;
      this.scale.y = _zoom;
    };
  })();

  /*
    Spriteset_Base
    =============================================================================
    拡大座標の調整
    */
  (function () {
    //@override
    var _parent_updatePosition = Spriteset_Base.prototype.updatePosition;
    Spriteset_Base.prototype.updatePosition = function () {
      _parent_updatePosition.call(this);

      var map_s = dp_getVisiblePos();
      this.x = map_s.x * -1;
      this.y = map_s.y * -1;

      this.x += Math.round($gameScreen.shake());
    };
  })();

  /*
    Scene_Map
    =============================================================================
    拡大率の引継ぎ
    */
  (function () {
    /*
        マップシーンの開始
        */
    //@override
    var _parent_start = Scene_Map.prototype.start;
    Scene_Map.prototype.start = function () {
      _parent_start.call(this);

      //移動後処理
      if (this._transfer) {
        //マップ設定情報で拡大率変更
        //イベントエディタからのテスト実行では$gameMap.metaが定義されない。
        $gameMap._dp_scale =
          "meta" in $dataMap
            ? Number($dataMap.meta.zoomScale || $gameMap._dp_scale)
            : $gameMap._dp_scale;

        //カメラターゲット
        //イベントエディタからのテスト実行では$gameMap.metaが定義されない。
        $gameMap._dp_target =
          "meta" in $dataMap ? Number($dataMap.meta.camTarget || 0) : 0;

        //パン
        $gameMap._dp_pan = new Point();
      }

      //標準レンダリングサイズにリセット
      dp_renderSize.reset();

      //カメラターゲット設定
      camera.target = $gameMap._dp_target;

      //マップシーン開始時に拡大率変更をフック。
      dp_setZoom($gameMap._dp_scale);

      //画面中心を強制設定する
      if (!user_use_camera && user_use_camera_transfer)
        camera.center(null, null, true);
    };

    /*
        マップシーンの終了
        */
    //@override
    var _parent_terminate = Scene_Map.prototype.terminate;
    Scene_Map.prototype.terminate = function () {
      //マップシーン終了時に拡大率情報を保存。
      camera.animation.end();

      var zoomPos = dp_getZoomPos();
      $gameScreen.setZoom(zoomPos.x, zoomPos.y, dp_renderSize.scale);
      $gameMap._dp_pan = dp_getpan();

      _parent_terminate.call(this);
    };

    /*
        エンカウントエフェクト
        */
    if (!user_fix_encount) return;
    //@override
    Scene_Map.prototype.updateEncounterEffect = function () {
      if (this._encounterEffectDuration > 0) {
        this._encounterEffectDuration--;
        var speed = this.encounterEffectSpeed();
        var n = speed - this._encounterEffectDuration;
        var p = n / speed;
        var q = ((p - 1) * 20 * p + 5) * p + 1;
        var zoomPos = dp_getZoomPos();

        if (n === 2) {
          $gameScreen.setZoom(zoomPos.x, zoomPos.y, dp_renderSize.scale);
          this.snapForBattleBackground();
          this.startFlashForEncounter(speed / 2);
        }

        $gameScreen.setZoom(zoomPos.x, zoomPos.y, q * dp_renderSize.scale);
        if (n === Math.floor(speed / 6)) {
          this.startFlashForEncounter(speed / 2);
        }
        if (n === Math.floor(speed / 2)) {
          BattleManager.playBattleBgm();
          this.startFadeOut(this.fadeSpeed());
        }
      }
    };
    //エンカウントエフェクトここまで
  })();

  /*
    Tilemap
    =============================================================================
    Canvasモード時の軽量化、拡大率の反映
    */
  (function () {
    //@override
    var _Tilemap_createLayers = Tilemap.prototype._createLayers;
    Tilemap.prototype._createLayers = function () {
      if (this._lowerLayer instanceof Sprite) {
        this._lowerLayer.destroy();
      }
      if (this._upperLayer instanceof Sprite) {
        this._upperLayer.destroy();
      }

      _Tilemap_createLayers.call(this);
    };
  })();

  /*
    Game_Screen
    =============================================================================
    アニメーション処理のフック
    */
  (function () {
    //@override
    var _parent_update = Game_Screen.prototype.update;
    Game_Screen.prototype.update = function () {
      _parent_update.call(this);
      camera.animation.update();
    };

    //@override
    var _parent_initialize = Game_Screen.prototype.initialize;
    Game_Screen.prototype.initialize = function () {
      _parent_initialize.call(this);
      dp_renderSize.reset();
    };
  })();
})();


code:
// DarkPlasma_AutoCloseSelectActorWindow
// Copyright (c) 2021 DarkPlasma
// This software is released under the MIT license.
// http://opensource.org/licenses/mit-license.php

/**
 * 2021/03/04 1.0.0 公開
 */

/*:
 * @plugindesc アイテム/スキル使用不能になったらアクター選択ウィンドウを閉じる
 * @author DarkPlasma
 * @license MIT
 *
 * @target MV
 * @url https://github.com/elleonard/RPGtkoolMV-Plugins
 *
 * @help
 * メニューからアクター選択ウィンドウを開くアイテムやスキルを使用し、
 * 下記条件でアイテムやスキルが使用不能になった場合に
 * アクター選択ウィンドウを自動で閉じます。
 *
 * - アイテム残数が0
 * - スキル消費MPが支払えない
 */

(function () {
  "use strict";

  const _Scene_ItemBase_useItem = Scene_ItemBase.prototype.useItem;
  Scene_ItemBase.prototype.useItem = function () {
    _Scene_ItemBase_useItem.call(this);
    if (!this.user().canUse(this.item())) {
      if (this.item().id >= 17 && this.item().id <= 24) return; //実のときだけ閉じない。
      this.hideSubWindow(this._actorWindow);
    }
  };
})();


code:
// DarkPlasma_AutoHighlight
// Copyright (c) 2018 DarkPlasma
// This software is released under the MIT license.
// http://opensource.org/licenses/mit-license.php

/**
 * 2020/09/21 1.3.2 指定語句のうち、長いものを優先するよう修正
 *                  スキル名と指定語句の判定衝突を修正
 * 2020/04/14 1.3.1 指定したウィンドウが存在しない場合にエラーになる不具合を修正
 *            1.3.0 指定スキルの自動ハイライト機能追加
 *            1.2.0 自動ハイライトを有効にするウィンドウを指定できるよう修正
 * 2020/04/09 1.1.0 Torigoya_TextRuby.jsに対応
 * 2018/01/07 1.0.1 他の語句を含む語句がハイライトされない不具合の修正
 * 2018/01/01 1.0.0 公開
 */

/*:
 * @plugindesc 指定した単語に自動でハイライトをつける
 * @author DarkPlasma
 * @license MIT
 *
 * @param Highlight Words
 * @desc ハイライトする語とその色
 * @type struct<HighlightWord>[]
 *
 * @param Skill Highlight
 * @text スキル名に関するハイライト
 *
 * @param Highlight Skills
 * @desc 名前をハイライトするスキル
 * @text スキル
 * @type skill[]
 * @default []
 * @parent Skill Highlight
 *
 * @param Skill Name Color
 * @desc スキル名をハイライトする際の色。色番号またはカラーコードをシャープ付きで設定する
 * @text スキル名の色
 * @type string
 * @default 0
 * @parent SKill Highlight
 *
 * @param Auto highlight Windows
 * @desc 自動ハイライトを有効にするウィンドウクラス一覧
 * @text 自動ハイライトウィンドウ
 * @type string[]
 * @default ["Window_Message"]
 *
 * @help
 * 指定した単語を指定した色でハイライトします。
 * 色指定には、 Trb_TextColor.js を採用している場合に限り、
 * シャープ付きのカラーコードを指定することができます。
 */
/*~struct~HighlightWord:
 *
 * @param word
 * @desc ハイライトしたい語句
 * @text 語句
 * @default
 * @type string
 *
 * @param color
 * @desc 語句の色。色番号またはカラーコードをシャープ付きで設定する
 * @text 語句の色
 * @default 0
 */

(function (global) {
  // パラメータ読み込み
  const pluginName = "DarkPlasma_AutoHighlight";
  const pluginParameters = PluginManager.parameters(pluginName);

  const highlightSettings = JSON.parse(pluginParameters["Highlight Words"]).map(
    (e) => JSON.parse(e)
  );
  const autoHighlightWindows = JsonEx.parse(
    pluginParameters["Auto highlight Windows"] || '["Window_Message"]'
  ).map((parsed) => String(parsed));
  const skillHighlight = {
    color: String(pluginParameters["Skill Name Color"] || 0),
    skillIds: JsonEx.parse(pluginParameters["Highlight Skills"] || "[]").map(
      (skillId) => Number(skillId)
    ),
  };

  class HighlightWords {
    constructor() {
      this._highlightWords = [];
      this._sortedWords = null;
      this._colors = null;
    }

    /**
     * @return {RegExp}
     */
    getRegExp() {
      return new RegExp(`(${this.sortedWords().join("|")})`, "gi");
    }

    /**
     * @return {RegExp}
     */
    getRegExPForRuby() {
      return new RegExp(`(^${this.sortedWords().join("$|")})`, "i");
    }

    /**
     * 長さ順にソートしたハイライト語句一覧
     * @return {string[]}
     */
    sortedWords() {
      if (!this._sortedWords || this._needsRefreshCache) {
        this.refreshCache();
      }
      return this._sortedWords;
    }

    /**
     * @param {HighlightWord} highlightWord ハイライトする語句と色
     */
    add(highlightWord) {
      this._highlightWords.push(highlightWord);
      this._needsRefreshCache = true;
    }

    refreshCache() {
      /**
       * 毎度ソートするのはパフォーマンス的に許容できないため、キャッシュする
       */
      this._sortedWords = this._highlightWords
        .map((word) => word.word)
        .sort((a, b) => b.length - a.length);
      this._colors = {};
      /**
       * パフォーマンスに気を使い、ランダムアクセスできるようにキャッシュする
       */
      this._highlightWords.forEach((highlightWord) => {
        this._colors[highlightWord.word] = highlightWord.color;
      });
      this._needsRefreshCache = false;
    }

    /**
     * ハイライト色を返す
     * @param {string} word ハイライトする語句
     * @return {string|number}
     */
    findColorByWord(word) {
      if (!this._colors) {
        this.refreshCache();
      }
      return this._colors[word].startsWith("#")
        ? this._colors[word]
        : Number(this._colors[word]);
    }

    /**
     * テキスト内の指定語句をハイライトして返す
     * @param {string} text ハイライト対象テキスト
     * @return {string}
     */
    highlightText(text) {
      return text.replace(this.getRegExp(), (match) => {
        return `\x1bC[${this.findColorByWord(match)}]${match}\x1bC[0]`;
      });
    }
  }

  class HighlightWord {
    constructor(word, color) {
      this._word = word;
      this._color = color;
    }

    get word() {
      return this._word;
    }

    get color() {
      return this._color;
    }
  }

  const highlightWords = new HighlightWords();
  highlightSettings.forEach((highlight) => {
    highlightWords.add(new HighlightWord(highlight.word, highlight.color));
  });

  const _DataManager_onLoad = DataManager.onLoad;
  DataManager.onLoad = function (object) {
    _DataManager_onLoad.call(this, object);

    if (object === $dataSkills) {
      skillHighlight.skillIds
        .map(
          (skillId) =>
            new HighlightWord($dataSkills[skillId].name, skillHighlight.color)
        )
        .forEach((word) => highlightWords.add(word));
    }
  };

  const _Window_Base_convertEscapeCharacters =
    Window_Base.prototype.convertEscapeCharacters;
  Window_Base.prototype.convertEscapeCharacters = function (text) {
    text = _Window_Base_convertEscapeCharacters.call(this, text);
    if (this.isHighlightWindow() && !this._checkWordWrapMode) {
      return highlightWords.highlightText(text);
    }
    return text;
  };

  Window_Base.prototype.isHighlightWindow = function () {
    return autoHighlightWindows.some(
      (autoHighlightWindow) =>
        typeof window[autoHighlightWindow] === "function" &&
        this instanceof window[autoHighlightWindow]
    );
  };

  PluginManager.isLoadedTorigoyaTextRuby = function () {
    return !!global.Torigoya && !!global.Torigoya.TextRuby;
  };

  if (PluginManager.isLoadedTorigoyaTextRuby()) {
    const rubyHighlightRegexp = highlightWords.getRegExPForRuby();
    let TextRuby = global.Torigoya.TextRuby;

    const _TextRuby_processDrawRuby = TextRuby.processDrawRuby;
    TextRuby.processDrawRuby = function (mainText, subText, textState) {
      if (rubyHighlightRegexp.test(mainText)) {
        TextRuby.setMainTextColor(highlightWords.findColorByWord(mainText));
      }
      if (rubyHighlightRegexp.test(subText)) {
        TextRuby.setSubTextColor(highlightWords.findColorByWord(subText));
      }
      _TextRuby_processDrawRuby.call(this, mainText, subText, textState);
    };
  }
})(window);


code:
// DarkPlasma_SkipCommandPersonal
// Copyright (c) 2020 DarkPlasma
// This software is released under the MIT license.
// http://opensource.org/licenses/mit-license.php

/**
 * 2020/03/10 1.1.0 パーティメンバーが一人の場合のみ有効にするパラメータを追加
 *                  メニューや戦闘におけるアイテム/スキルの使用対象選択をスキップする機能を追加
 * 2020/03/09 1.0.0 公開
 */

/*:
 * @plugindesc キャラクター選択をスキップするプラグイン
 * @author DarkPlasma
 * @license MIT
 *
 * @param Enable Only When Solo Party
 * @desc パーティメンバーが一人の場合のみ有効にする
 * @text ソロ時のみ有効
 * @type boolean
 * @default true
 *
 * @param Skip Select Item And Skill Target In Menu
 * @desc メニューでのアイテム/スキルの使用対象選択をスキップする
 * @text メニューアイテム対象選択省略
 * @type boolean
 * @default true
 *
 * @param Skip Select Item And SKill Target For Friend In Battle
 * @desc 戦闘での味方に対するアイテム/スキルの使用対象選択をスキップする
 * @text 戦闘時アイテム対象選択省略
 * @type boolean
 * @default true
 *
 * @help
 * このプラグインを導入すると、メニュー画面などでのキャラクター選択をスキップし、
 * 強制的に先頭のキャラクターを選択します。
 *
 * プラグインパラメータの設定により、
 * アイテムやスキルの使用対象選択をスキップできます。
 */

(function () {
  "use strict";
  const pluginName = document.currentScript.src.replace(
    /^.*\/(.*).js$/,
    function () {
      return arguments[1];
    }
  );
  const pluginParameters = PluginManager.parameters(pluginName);

  const settings = {
    enableOnlyWhenSolo:
      String(pluginParameters["Enable Only When Solo Party"] || "true") ===
      "true",
    skipSelectTargetInMenu:
      String(
        pluginParameters["Skip Select Item And Skill Target In Menu"] || "true"
      ) === "true",
    skipSelectTargetInBattle:
      String(
        pluginParameters[
          "Skip Select Item And SKill Target For Friend In Battle"
        ]
      ) === "true",
  };

  Game_Party.prototype.isSoloParty = function () {
    return this.members().length === 1;
  };

  Scene_Menu.prototype.skipCommandPersonal = function () {
    return !settings.enableOnlyWhenSolo || $gameParty.isSoloParty();
  };

  const _Scene_Menu_commandPersonal = Scene_Menu.prototype.commandPersonal;
  Scene_Menu.prototype.commandPersonal = function () {
    if (this.skipCommandPersonal()) {
      $gameParty.setTargetActor($gameParty.leader());
      this.onPersonalOk();
    } else {
      _Scene_Menu_commandPersonal.call(this);
    }
  };

  Scene_ItemBase.prototype.skipSelectTarget = function () {
    return (
      settings.skipSelectTargetInMenu &&
      (!settings.enableOnlyWhenSolo || $gameParty.isSoloParty())
    );
  };

  const _Scene_ItemBase_determineItem = Scene_ItemBase.prototype.determineItem;
  Scene_ItemBase.prototype.determineItem = function () {
    if (this.skipSelectTarget()) {
      let action = new Game_Action(this.user());
      action.setItemObject(this.item());
      if (action.isForFriend()) {
        this._actorWindow.select(0);
        this.onActorOk();
        this.activateItemWindow();
      } else {
        _Scene_ItemBase_determineItem.call(this);
      }
    } else {
      _Scene_ItemBase_determineItem.call(this);
    }
  };

  Scene_Battle.prototype.skipSelectTarget = function () {
    return (
      settings.skipSelectTargetInBattle &&
      (!settings.enableOnlyWhenSolo || $gameParty.isSoloParty())
    );
  };

  const _Scene_Battle_selectActorSelection =
    Scene_Battle.prototype.selectActorSelection;
  Scene_Battle.prototype.selectActorSelection = function () {
    if (this.skipSelectTarget()) {
      this._actorWindow.select(0);
      this.onActorOk();
    } else {
      _Scene_Battle_selectActorSelection.call(this);
    }
  };
})();