Files
2019-11-05 20:14:51 +01:00

181 lines
6.8 KiB
JavaScript

//=============================================================================
// Yanfly Engine Plugins - Weather In Battle
// YEP_WeatherInBattle.js
//=============================================================================
var Imported = Imported || {};
Imported.YEP_WeatherInBattle = true;
var Yanfly = Yanfly || {};
Yanfly.WIB = Yanfly.WIB || {};
Yanfly.WIB.version = 1.00;
//=============================================================================
/*:
* @plugindesc v1.00 Allows you to have weather in battle. Weather also becomes
* controllable through action sequences.
* @author Yanfly Engine Plugins
*
* @help
* ============================================================================
* Introduction
* ============================================================================
*
* Weather does not appear in battles in RPG Maker MV by default. This causes a
* disconnect from entering a battle on a map with weather effects rolling in
* the background to a battle scene where the skies are suddenly devoid of such
* weather behavior. This plugin adds in the simple effect of making whatever
* weather that's being played on the map also affect the weather played in
* battle. There's also new functions to save weather settings and recall them
* for later in addition to a new action sequence for those using the Battle
* Engine Core plugin.
*
* If you are using YEP_BattleEngineCore.js, place this plugin underneath it
* in the Plugin Manager's plugin list.
*
* ============================================================================
* Plugin Commands
* ============================================================================
*
* Plugin Commands:
*
* SaveWeather
* - Saves the current weather settings, meaning the type, power, and
* duration to change will be saved.
*
* RecallWeather
* - Recalls the last saved weather settings. If nothing was last saved,
* then nothing will happen. Using this plugin command will not remove the
* last saved weather settings from memory.
*
* ============================================================================
* Yanfly Engine Plugins - Battle Engine Extension - Action Sequence Commands
* ============================================================================
*
* If you have YEP_BattleEngineCore.js installed with this plugin located
* underneath it in the Plugin Manager, you can make use of these extra
* damage related action sequences.
*
*=============================================================================
* WEATHER: type, (power), (duration)
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Replace 'type' with either 'none', 'rain', 'storm', or 'snow'.
* Replace 'power' with a value between 1 and 9.
* Replace 'duration' with the number of frames you want the change to be.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Usage Example: weather: rain, 5, 20
* weather: storm, 7, 60
* weather: snow, 9, 90
* weather: none, 1, 60
*=============================================================================
*
* ============================================================================
* Changelog
* ============================================================================
*
* Version 1.00:
* - Finished Plugin!
*
*/
//=============================================================================
//=============================================================================
// Game_Screen
//=============================================================================
Game_Screen.prototype.saveWeather = function() {
this._savedWeather = {
type: this._weatherType || 'none',
power: this._weatherPowerTarget || 0,
duration: this._weatherDuration || 0
}
};
Game_Screen.prototype.recallWeather = function() {
if (this._savedWeather === undefined) return;
this.changeWeather(this._savedWeather.type, this._savedWeather.power,
this._savedWeather.duration);
};
//=============================================================================
// Game_Interpreter
//=============================================================================
// Set Weather Effect
Game_Interpreter.prototype.command236 = function() {
$gameScreen.changeWeather(this._params[0], this._params[1],
this._params[2]);
if (this._params[3]) {
this.wait(this._params[2]);
}
return true;
};
Yanfly.WIB.Game_Interpreter_pluginCommand =
Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
Yanfly.WIB.Game_Interpreter_pluginCommand.call(this, command, args);
if (command.match(/SaveWeather/i)) {
$gameScreen.saveWeather();
} else if (command.match(/RecallWeather/i)) {
$gameScreen.recallWeather();
}
};
//=============================================================================
// Spriteset_Battle
//=============================================================================
Yanfly.WIB.Spriteset_Battle_createLowerLayer =
Spriteset_Battle.prototype.createLowerLayer;
Spriteset_Battle.prototype.createLowerLayer = function() {
Yanfly.WIB.Spriteset_Battle_createLowerLayer.call(this);
this.createWeather();
};
Spriteset_Battle.prototype.createWeather = function() {
this._weather = new Weather();
this.addChild(this._weather);
};
Yanfly.WIB.Spriteset_Battle_update = Spriteset_Battle.prototype.update;
Spriteset_Battle.prototype.update = function() {
Yanfly.WIB.Spriteset_Battle_update.call(this);
this.updateWeather();
};
Spriteset_Battle.prototype.updateWeather = function() {
this._weather.type = $gameScreen.weatherType();
this._weather.power = $gameScreen.weatherPower();
};
//=============================================================================
// YEP_BattleEngineCore Compatibility
//=============================================================================
if (Imported.YEP_BattleEngineCore) {
Yanfly.WIB.BattleManager_procActSeq = BattleManager.processActionSequence;
BattleManager.processActionSequence = function(actionName, actionArgs) {
if (actionName === 'WEATHER') {
return this.actionWeather(actionArgs);
}
return Yanfly.WIB.BattleManager_procActSeq.call(this, actionName, actionArgs);
};
}; // Imported.YEP_BattleEngineCore
BattleManager.actionWeather = function(actionArgs) {
var type = actionArgs[0].toLowerCase();
var power = Number(actionArgs[1]) || 0;
var duration = (actionArgs[2] === undefined) ? 20 :
(Number(actionArgs[2]) || 0);
if (type === 'clear') type = 'none';
if (type !== 'none') power = power.clamp(1, 9);
$gameScreen.changeWeather(type, power, duration);
return false;
};
//=============================================================================
// End of File
//=============================================================================