OMORI_Android/www.eng/js/plugins/YEP_X_ExtMovePack1.js
2024-01-15 18:44:53 +03:00

369 lines
No EOL
14 KiB
JavaScript
Raw 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.

//=============================================================================
// Yanfly Engine Plugins - Move Route Extension - Extended Move Pack 1
// YEP_X_ExtMovePack1.js
//=============================================================================
if (Imported.YEP_MoveRouteCore) {
var Imported = Imported || {};
Imported.YEP_X_ExtMovePack1 = true;
var Yanfly = Yanfly || {};
Yanfly.EMvP1 = Yanfly.EMvP1 || {};
Yanfly.EMvP1.version = 1.01;
//=============================================================================
/*:
* @plugindesc v1.01 (Requires YEP_MoveRouteCore.js) Adds extra movement
* options to create specific behaviors in movement patterns.
* @author Yanfly Engine Plugins
*
* @help
* ============================================================================
* Introduction
* ============================================================================
*
* This plugin requires YEP_MoveRouteCore. Make sure this plugin is located
* under YEP_MoveRouteCore in the plugin list.
*
* This plugin adds extra simplified move routes for your events with the main
* intention of creating specific behaviors in movement patterns. The patterns
* include the option to hug a side of the wall and move along that, moving a
* single direction until coming to a stop, relative opacity adjusting, and
* index shifting.
*
* ============================================================================
* Instructions - Additional Simplified Movement Routes
* ============================================================================
*
* If you want to make events move a certain way using the commands from this
* plugin, do the following:
*
* 1. Open the event you wish to move.
* 2. Make a Movement Route command or Automatic Custom Route.
* 3. Press "Script..."
* 4. Type in any of the desired following commands:
*
* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
* HUG LEFT WALL
* HUG RIGHT WALL
*
* AVOID HUG LEFT WALL
* AVOID HUG RIGHT WALL
*
* CRASH HUG LEFT WALL
* CRASH HUG RIGHT WALL
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* The designated event will move alongside the wall to its left/right. If
* there is no wall to its left/right side, it will turn that direction and
* move that direction if possible.
*
* 'Avoid Hug Left Wall' and 'Avoid Hug Right Wall' will make the event not
* collide with the player character and the player's followers.
*
* 'Crash Hug Left Wall' and 'Crash Hug Right Wall' will allow collision with
* the player and/or followers.
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Example: Hug Left Wall
* Hug Right Wall
* Avoid Hug Left Wall
* Avoid Hug Right Wall
* Crash Hug Left Wall
* Crash Hug Right Wall
* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
*
* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
* INDEX: x
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Sets the designated event's current character graphic index to x without
* needing to change its character graphic.
* Replace x with integar values between 0 and 7.
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Example: Index: 5
* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
*
* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
* INDEX: +x
* INDEX: -x
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Adjusts the designated event's current character graphic index by +x or -x
* without needing to change its character graphic as to move it a few stages.
* The index cannot go under 0 and cannot go over 7.
* Replace x with integar values between 0 and 7.
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Example: Index: +1
* Index: -2
* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
*
* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
* MOVE UP UNTIL STOP
* MOVE LEFT UNTIL STOP
* MOVE RIGHT UNTIL STOP
* MOVE DOWN UNTIL STOP
* MOVE UPPER LEFT UNTIL STOP
* MOVE UPPER RIGHT UNTIL STOP
* MOVE LOWER LEFT UNTIL STOP
* MOVE LOWER RIGHT UNTIL STOP
*
* AVOID MOVE UP UNTIL STOP
* AVOID MOVE LEFT UNTIL STOP
* AVOID MOVE RIGHT UNTIL STOP
* AVOID MOVE DOWN UNTIL STOP
* AVOID MOVE UPPER LEFT UNTIL STOP
* AVOID MOVE UPPER RIGHT UNTIL STOP
* AVOID MOVE LOWER LEFT UNTIL STOP
* AVOID MOVE LOWER RIGHT UNTIL STOP
*
* CRASH MOVE UP UNTIL STOP
* CRASH MOVE LEFT UNTIL STOP
* CRASH MOVE RIGHT UNTIL STOP
* CRASH MOVE DOWN UNTIL STOP
* CRASH MOVE UPPER LEFT UNTIL STOP
* CRASH MOVE UPPER RIGHT UNTIL STOP
* CRASH MOVE LOWER LEFT UNTIL STOP
* CRASH MOVE LOWER RIGHT UNTIL STOP
*
* MOVE FORWARD UNTIL STOP
* AVOID MOVE FORWARD UNTIL STOP
* CRASH MOVE FORWARD UNTIL STOP
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* The designated event will keep moving the noted direction until it it cannot
* pass in that direction anymore. Once that happens, it will move onto the
* next movement command in the move route list.
*
* The 'Avoid' versions of this command will make the event not collide with
* the player character and the player's followers.
*
* The 'Crash' versions of this command will allow collision with the player
* and/or followers.
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Example: Move Right Until Stop
* Avoid Move Left Until Stop
* Crash Move Forward Until Stop
* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
*
* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
* OPACITY: +x
* OPACITY: -x
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Adjusts the designated event's opacity value by +x or -x instead of a set
* value like the editor's opacity command. The opacity value will be added
* upon or subtracted upon the current opacity value.
* Replace x with integar values.
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Example: Opacity: +50
* Opacity: -30
* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
*
* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
* OPACITY: +x%
* OPACITY: -x%
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Adjusts the designated event's opacity value by +x% or -x% instead of a set
* value like the editor's opacity command. The opacity value will be added
* upon or subtracted upon the current opacity value.
* Replace x with integar values.
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Example: Opacity: +10%
* Opacity: -20%
* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
*
* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
* OPACITY: x%
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Sets the designated event's opacity value to x% instead of a set value like
* the editor's opacity command. The opacity value will be automatically
* adjusted to meet the demands of the sprite.
* Replace x with integar values.
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Example: Opacity: 50%
* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
*
* ============================================================================
* Changelog
* ============================================================================
*
* Version 1.01:
* - Updated for RPG Maker MV version 1.5.0.
*
* Version 1.00:
* - Finished Plugin!
*/
//=============================================================================
//=============================================================================
// Game_Character
//=============================================================================
Yanfly.EMvP1.Game_Character_processMoveRouteScriptCall =
Game_Character.prototype.processMoveRouteScriptCall;
Game_Character.prototype.processMoveRouteScriptCall = function (line) {
// EXTENDED MOVE PACK 1 ADDITIONS
if (line === 'EXTENDED MOVE PACK 1') {
return;
// HUG LEFT WALL
} else if (line.match(/(?:HUG LEFT|HUG LEFT WALL)/i)) {
var collision = this.checkCollisionKeywords(line);
this.processMoveHugWall('left', collision);
// HUG RIGHT WALL
} else if (line.match(/(?:HUG RIGHT|HUG RIGHT WALL)/i)) {
var collision = this.checkCollisionKeywords(line);
this.processMoveHugWall('right', collision);
// INDEX: X
} else if (line.match(/INDEX:[ ](\d+)/i)) {
var value = parseInt(RegExp.$1);
this.processIndexSet(value);
// INDEX: +/-X
} else if (line.match(/INDEX:[ ]([\+\-]\d+)/i)) {
var value = parseInt(RegExp.$1);
this.processIndexAdjust(value);
// MOVE UNTIL WALL
} else if (line.match(/MOVE[ ](.*)[ ](?:UNTIL WALL|UNTIL STOP)/i)) {
var text = String(RegExp.$1);
var collision = this.checkCollisionKeywords(line);
this.processMoveUntilStop(text, collision);
// OPACITY: /-X%
} else if (line.match(/OPACITY:[ ](\d+)([%])/i)) {
var rate = parseInt(RegExp.$1) * 0.01;
var value = Math.round(255 * rate);
this.processOpacitySet(value);
// OPACITY: +/-X%
} else if (line.match(/OPACITY:[ ]([\+\-]\d+)([%])/i)) {
var rate = parseInt(RegExp.$1) * 0.01;
var value = Math.round(255 * rate);
this.processOpacityAdjust(value);
// OPACITY: +/-X
} else if (line.match(/OPACITY:[ ]([\+\-]\d+)/i)) {
var value = parseInt(RegExp.$1);
this.processOpacityAdjust(value);
// ELSE
} else {
Yanfly.EMvP1.Game_Character_processMoveRouteScriptCall.call(this, line);
}
};
Game_Character.prototype.processMoveHugWall = function (wall, collision) {
collision = collision || false;
var left = {}
left[1] = 3;
left[2] = 6;
left[3] = 9;
left[4] = 2;
left[6] = 8;
left[7] = 1;
left[8] = 4;
left[9] = 7;
var right = {};
right[1] = 7;
right[2] = 4;
right[3] = 1;
right[4] = 8;
right[6] = 2;
right[7] = 9;
right[8] = 6;
right[9] = 3;
if (wall === 'left') {
var mainDir = left[this.direction()];
var oppositeDir = right[this.direction()];
} else if (wall === 'right') {
var mainDir = right[this.direction()];
var oppositeDir = left[this.direction()];
} else {
return;
}
if (collision) $gameTemp._moveAllowPlayerCollision = true;
if (this.canPass(this.x, this.y, mainDir)) {
if (wall === 'left') {
this.turnLeft90();
} else {
this.turnRight90();
}
} else if (!this.canPass(this.x, this.y, this.direction())) {
if (this.canPass(this.x, this.y, oppositeDir)) {
if (wall === 'left') {
this.turnRight90();
} else {
this.turnLeft90();
}
} else {
this.turn180();
}
}
if (this.canPass(this.x, this.y, this.direction())) {
$gameTemp._moveAllowPlayerCollision = false;
this.moveForward();
}
$gameTemp._moveAllowPlayerCollision = false;
};
Game_Character.prototype.processMoveUntilStop = function (line, collision) {
var direction = 0;
if (line.match(/UPPER RIGHT/i)) {
direction = 9;
} else if (line.match(/UPPER LEFT/i)) {
direction = 7;
} else if (line.match(/LOWER RIGHT/i)) {
direction = 4;
} else if (line.match(/LOWER LEFT/i)) {
direction = 1;
} else if (line.match(/UP/i)) {
direction = 8;
} else if (line.match(/RIGHT/i)) {
direction = 6;
} else if (line.match(/LEFT/i)) {
direction = 4;
} else if (line.match(/DOWN/i)) {
direction = 2;
} else if (line.match(/FORWARD/i)) {
direction = this.direction();
} else {
return;
}
if (collision) $gameTemp._moveAllowPlayerCollision = true;
if (this.canPass(this.x, this.y, direction)) {
$gameTemp._moveAllowPlayerCollision = false;
this.moveStraight(direction);
this._moveRouteIndex -= 1;
}
$gameTemp._moveAllowPlayerCollision = false;
};
Game_Character.prototype.processOpacitySet = function (value) {
this._opacity = Math.round(value);
this._opacity = this._opacity.clamp(0, 255);
};
Game_Character.prototype.processOpacityAdjust = function (value) {
this._opacity += Math.round(value);
this._opacity = this._opacity.clamp(0, 255);
};
Game_Character.prototype.processIndexSet = function (value) {
if (ImageManager.isBigCharacter(this._characterName)) return;
var charName = this._characterName;
value = value.clamp(0, 7);
this.setImage(charName, value);
};
Game_Character.prototype.processIndexAdjust = function (value) {
if (ImageManager.isBigCharacter(this._characterName)) return;
var charName = this._characterName;
value = this._characterIndex + value;
value = value.clamp(0, 7);
this.setImage(charName, value);
};
//=============================================================================
// End of File
//=============================================================================
} else {
var text = '================================================================\n';
text += 'YEP_X_ExtMovePack1 requires YEP_MoveRouteCore to be at the ';
text += 'latest version to run properly.\n\nPlease go to www.yanfly.moe and ';
text += 'update to the latest version for the YEP_MoveRouteCore plugin.\n';
text += '================================================================\n';
console.log(text);
require('nw.gui').window.showDevTools();
} // Imported.YEP_MoveRouteCore