lust-oni/www/js/plugins/ChangeSurpriseRateByDir.js
2025-10-26 23:43:42 -05:00

87 lines
3 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.

//============================================================================
// ChangeSurpriseRateByDir.js (Individual Specified Plugin)
//============================================================================
/*:
* @plugindesc On Symbol Encount System, change surprise rate according to direction.
* @author Sasuke KANNAZUKI
*
* @help
* This plugin does not provide plugin commands.
*
* [Summary]
* This plugin is the order-made.
* see https://forum.tkool.jp/index.php?threads/1300/
* (Japanese page)
*
*
* [License]
* this plugin is released under MIT license.
* http://opensource.org/licenses/mit-license.php
*/
/*:ja
* @plugindesc シンボルエンカウントで、イベントの向きによって先制や不意打ち率を変更します。
* @author 神無月サスケ
*
* @help
* このプラグインには、プラグインコマンドはありません。
*
* ■概要
* このプラグインは、下記の要望によって作られたオーダーメイドのプラグインです。
* https://forum.tkool.jp/index.php?threads/1300/
*
* 具体的には以下の機能を実装しています。
* ・「シンボルに背後から接触された場合」に100の確率で不意打ち
* ・「シンボルに背後から接触した場合」は100の確率で先制攻撃
*
* ■ライセンス表記
* このプラグインは MIT ライセンスで配布されます。
* ご自由にお使いください。
* http://opensource.org/licenses/mit-license.php
*/
(function() {
//
// judge the position and direction of troop event and player
//
Game_Character.prototype._isEventAdjacent = function (direction, eventId) {
var x = $gameMap.roundXWithDirection(this.x, direction);
var y = $gameMap.roundYWithDirection(this.y, direction);
return $gameMap.eventsXyNt(x, y).some(function (e) {
return e.eventId() === eventId && e.direction() === this.direction();
}, this);
};
Game_Character.prototype._isEventThere = function (eventId) {
return this._isEventAdjacent(this.direction(), eventId);
};
Game_Character.prototype._isEventBehind = function (eventId) {
return this._isEventAdjacent(10 - this.direction(), eventId);
};
//
// change the rate of preemptive and surprise
//
var nowBattleHasBegun = function () {
return BattleManager._phase === 'init';
};
var _Game_Interpreter_command301 = Game_Interpreter.prototype.command301;
Game_Interpreter.prototype.command301 = function() {
var wasInBattle = $gameParty.inBattle();
_Game_Interpreter_command301.call(this);
var symbolEventId = this._eventId;
if (!wasInBattle && nowBattleHasBegun() && $gameTroop.troop()) {
if ($gamePlayer._isEventThere(symbolEventId)) {
BattleManager._preemptive = true;
BattleManager._surprise = false;
} else if ($gamePlayer._isEventBehind(symbolEventId)) {
BattleManager._preemptive = false;
BattleManager._surprise = true;
}
}
return true;
};
})();