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

199 lines
6.7 KiB
JavaScript

//=============================================================================
// Yanfly Engine Plugins - Slippery Tiles
// YEP_SlipperyTiles.js
//=============================================================================
var Imported = Imported || {};
Imported.YEP_SlipperyTiles = true;
var Yanfly = Yanfly || {};
Yanfly.Slip = Yanfly.Slip || {};
Yanfly.Slip.version = 1.05
//=============================================================================
/*:
* @plugindesc v1.05 You can create slippery tiles by marking them with
* either a terrain tag or a region number.
* @author Yanfly Engine Plugins
*
* @param Slippery Frame
* @type number
* @min 0
* @desc This is the frame used while characters are sliding.
* @default 2
*
* @param Slippery Region
* @type number
* @min 0
* @max 255
* @desc Any tile marked with this region is a slippery tile
* regardless of terrain tag. Use 0 to ignore.
* @default 0
*
* @param Slippery Speed
* @type number
* @min 0
* @desc Change the speed of the player while on a slippery tile to
* this speed instead. Leave at 0 to keep current speed.
* @default 0
*
* @help
* ============================================================================
* Introduction
* ============================================================================
*
* This plugin enables you to set which tiles are slippery tiles through either
* regions or notetags. To use regions, change the parameter setting to which
* region ID you would like to associate with a slippery tile.
*
* ============================================================================
* Notetags
* ============================================================================
*
* You can use these notetags to add slippery tiles to your tilesets.
*
* Tileset Notetag:
* <Slippery Tile: x>
* <Slippery Tile: x, x, x>
* Tiles with terrain ID x will be designated as slippery tiles.
*
* ============================================================================
* Changelog
* ============================================================================
*
* Version 1.05:
* - Updated for RPG Maker MV version 1.5.0.
*
* Version 1.04:
* - Added 'Slippery Speed' plugin parameter to let you change the speed of
* a character when its on a slippery tile.
*
* Version 1.03:
* - Added anti-crash for switch checks from battle tests.
*
* Version 1.02:
* - Updated for RPG Maker MV version 1.1.0.
*
* Version 1.01:
* - Added failsafe for people who aren't using tilesets
*
* Version 1.00:
* - Finished Plugin!
*/
//=============================================================================
//=============================================================================
// Parameter Variables
//=============================================================================
Yanfly.Parameters = PluginManager.parameters('YEP_SlipperyTiles');
Yanfly.Param = Yanfly.Param || {};
Yanfly.Param.SlipRegion = Number(Yanfly.Parameters['Slippery Region']);
Yanfly.Param.SlipFrame = Number(Yanfly.Parameters['Slippery Frame']);
Yanfly.Param.SlipSpeed = Number(Yanfly.Parameters['Slippery Speed']);
//=============================================================================
// DataManager
//=============================================================================
Yanfly.Slip.DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
DataManager.isDatabaseLoaded = function() {
if (!Yanfly.Slip.DataManager_isDatabaseLoaded.call(this)) return false;
if (!Yanfly._loaded_YEP_SlipperyTiles) {
this.processSlipNotetags($dataTilesets);
Yanfly._loaded_YEP_SlipperyTiles = true;
}
return true;
};
DataManager.processSlipNotetags = function(group) {
var regexp1 = /<(?:SLIPPERY|slippery tile):[ ]*(\d+(?:\s*,\s*\d+)*)>/i;
for (var n = 1; n < group.length; n++) {
var obj = group[n];
var notedata = obj.note.split(/[\r\n]+/);
obj.slippery = [];
for (var i = 0; i < notedata.length; i++) {
var line = notedata[i];
if (line.match(regexp1)) {
var array = JSON.parse('[' + RegExp.$1.match(/\d+/g) + ']');
obj.slippery = obj.slippery.concat(array);
}
}
}
};
//=============================================================================
// Game_Map
//=============================================================================
Game_Map.prototype.isSlippery = function(mx, my) {
if ($gameParty.inBattle()) return false;
if (this.isValid(mx, my) && this.tileset()) {
if (Yanfly.Param.SlipRegion !== 0 &&
this.regionId(mx, my) === Yanfly.Param.SlipRegion) return true;
var tagId = this.terrainTag(mx, my);
var slipTiles = this.tileset().slippery;
return slipTiles.contains(tagId);
}
return false;
};
//=============================================================================
// Game_CharacterBase
//=============================================================================
Game_CharacterBase.prototype.onSlipperyFloor = function() {
return $gameMap.isSlippery(this._x, this._y);
};
Game_CharacterBase.prototype.slipperyPose = function() {
if (!this.onSlipperyFloor()) return false;
if (this._stepAnime) return false;
return true;
};
Yanfly.Slip.Game_CharacterBase_pattern = Game_CharacterBase.prototype.pattern;
Game_CharacterBase.prototype.pattern = function() {
if (this.slipperyPose()) return Yanfly.Param.SlipFrame;
return Yanfly.Slip.Game_CharacterBase_pattern.call(this);
};
Yanfly.Slip.Game_CharacterBase_realMoveSpeed =
Game_CharacterBase.prototype.realMoveSpeed;
Game_CharacterBase.prototype.realMoveSpeed = function() {
if (this.onSlipperyFloor() && Yanfly.Param.SlipSpeed > 0) {
return Yanfly.Param.SlipSpeed;
}
return Yanfly.Slip.Game_CharacterBase_realMoveSpeed.call(this);
};
//=============================================================================
// Game_Player
//=============================================================================
Yanfly.Slip.Game_Player_isDashing = Game_Player.prototype.isDashing;
Game_Player.prototype.isDashing = function() {
if (this.onSlipperyFloor()) return false;
return Yanfly.Slip.Game_Player_isDashing.call(this);
};
Yanfly.Slip.Game_Player_update = Game_Player.prototype.update;
Game_Player.prototype.update = function(sceneActive) {
Yanfly.Slip.Game_Player_update.call(this, sceneActive);
this.updateSlippery();
};
Game_Player.prototype.updateSlippery = function() {
if ($gameMap.isEventRunning()) return;
if (this.onSlipperyFloor() && !this.isMoving()) {
$gameTemp.clearDestination();
this.moveStraight(this._direction);
}
};
//=============================================================================
// End of File
//=============================================================================