reborn-island/js/plugins/NRP_CharacterDirectionPriority.js
2025-02-08 11:08:12 -06:00

185 lines
6.2 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//=============================================================================
// NRP_CharacterDirectionPriority.js
//=============================================================================
/*:
* @target MV MZ
* @plugindesc v1.00 Accept direction changes, even if the direction is fixed.
* @author Takeshi Sunagawa (http://newrpg.seesaa.net/)
* @url http://newrpg.seesaa.net/article/481360429.html
*
* @help Make it possible to accept direction change commands
* for characters in fixed direction.
*
* In RPG Maker MV and MZ, instructions to change the direction of a character
* with a fixed direction from the movement route settings will be ignored.
* However, this specification is not very reasonable.
* If you don't intend to change the direction, you don't tell it to do so.
*
* There is also a way to undo the direction fixation each time,
* but it is not reasonable,
* as it is time-consuming and error-prone.
*
* Therefore, I will change the specification
* to accept direction changes only at the time of instruction,
* just like RPG Maker 2000.
*
* The relevant process is as follows.
* - Change the direction of the move route setting
* - Change the direction when autonomous movement is custom.
* - Change the direction when setting the position of an event.
*
* ■Usage
* You only need to apply the plugin.
* There are no parameters.
*
* [Terms]
* There are no restrictions.
* Modification, redistribution freedom, commercial availability,
* and rights indication are also optional.
* The author is not responsible,
* but will deal with defects to the extent possible.
*/
/*:ja
* @target MV MZ
* @plugindesc v1.00 キャラクターの向き固定時も向き変更を有効に
* @author 砂川赳http://newrpg.seesaa.net/
* @url http://newrpg.seesaa.net/article/481360429.html
*
* @help 向き固定状態のキャラクターに対しても、
* 向きの変更命令を受けつけるようにします。
*
* ツクールMV~MZでは、向き固定状態のキャラクターに対して、
* 移動ルートの設定から向き変更を指示しても、無視される仕様です。
* しかしながら、この仕様はあまり合理的ではありません。
* そもそも、向きを変更する意図がないなら指示などしないからです。
*
* いちいち、向き固定を解除する方法もありますが、
* 手間がかかる上にミスもしやすく、やはり合理的ではありません。
*
* というわけで、ツクール2000などと同じように、
* 命令時のみ、向き変更を受けつけるように仕様を変更します。
*
* 該当の処理は以下の通りです。
* ・移動ルートの設定の向き変更
* ・自律移動がカスタムの際の向き変更
* ・イベントの位置設定時の向き変更
*
* ■使用方法
* プラグインを適用するだけでOKです。
* パラメータなどはありません。
*
* ■利用規約
* 特に制約はありません。
* 改変、再配布自由、商用可、権利表示も任意です。
* 作者は責任を負いませんが、不具合については可能な範囲で対応します。
*/
(function () {
"use strict";
const PLUGIN_NAME = "NRP_CharacterDirectionPriority";
const parameters = PluginManager.parameters(PLUGIN_NAME);
/**
* ●向き設定
*/
const _Game_CharacterBase_setDirection =
Game_CharacterBase.prototype.setDirection;
Game_CharacterBase.prototype.setDirection = function (d) {
// 向き変更強制フラグがオンなら変更
if (this.isForceDirection() && d) {
this._direction = d;
}
_Game_CharacterBase_setDirection.apply(this, arguments);
};
/**
* 【独自】向き変更強制フラグを設定
*/
Game_CharacterBase.prototype.setForceDirection = function (flg) {
this._forceDirection = flg;
};
/**
* 【独自】向き変更強制フラグを取得
*/
Game_CharacterBase.prototype.isForceDirection = function () {
return !!this._forceDirection;
};
/**
* ●移動ルートの設定
*/
const _Game_Character_processMoveCommand =
Game_Character.prototype.processMoveCommand;
Game_Character.prototype.processMoveCommand = function (command) {
const gc = Game_Character;
// 向き変更に該当する処理の場合、強制フラグを立てる。
switch (command.code) {
case gc.ROUTE_TURN_DOWN:
this.setForceDirection(true);
break;
case gc.ROUTE_TURN_LEFT:
this.setForceDirection(true);
break;
case gc.ROUTE_TURN_RIGHT:
this.setForceDirection(true);
break;
case gc.ROUTE_TURN_UP:
this.setForceDirection(true);
break;
case gc.ROUTE_TURN_90D_R:
this.setForceDirection(true);
break;
case gc.ROUTE_TURN_90D_L:
this.setForceDirection(true);
break;
case gc.ROUTE_TURN_180D:
this.setForceDirection(true);
break;
case gc.ROUTE_TURN_90D_R_L:
this.setForceDirection(true);
break;
case gc.ROUTE_TURN_RANDOM:
this.setForceDirection(true);
break;
case gc.ROUTE_TURN_TOWARD:
this.setForceDirection(true);
break;
case gc.ROUTE_TURN_AWAY:
this.setForceDirection(true);
break;
}
_Game_Character_processMoveCommand.apply(this, arguments);
// 強制フラグを解除
this.setForceDirection(false);
};
/**
* ●イベントの位置設定
*/
const _Game_Interpreter_command203 = Game_Interpreter.prototype.command203;
Game_Interpreter.prototype.command203 = function (params) {
const character = this.character(params[0]);
if (character) {
if (params[4] > 0) {
character.setForceDirection(true);
}
}
const ret = _Game_Interpreter_command203.apply(this, arguments);
// 戻す
if (character) {
if (params[4] > 0) {
character.setForceDirection(false);
}
}
return ret;
};
})();