586 lines
18 KiB
JavaScript
586 lines
18 KiB
JavaScript
//=============================================================================
|
|
// MOG_DizzyEffect.js
|
|
//=============================================================================
|
|
|
|
/*:
|
|
* @plugindesc (v1.0) Adiciona o efeito Dizzy.
|
|
* @author Moghunter
|
|
*
|
|
* @help
|
|
* =============================================================================
|
|
* +++ MOG - Dizzy Effect (v1.0) +++
|
|
* By Moghunter
|
|
* https://atelierrgss.wordpress.com/
|
|
* =============================================================================
|
|
* Adiciona o efeito Dizzy, esse efeito pode ser utilizado no mapa
|
|
* e na batalha.
|
|
*
|
|
* =============================================================================
|
|
* PLUGIN COMMAND
|
|
* =============================================================================
|
|
* Para ativar o efeito coloque o comando abaixo.
|
|
*
|
|
* dizzy_effect : POWER : DURATION : BLEND_MODE : OPACITY : REALTIME
|
|
*
|
|
* POWER - Poder do efeito (1..10)
|
|
* DURATION - Duração do efeito (30..999)
|
|
* BLEND_MODE - Efeito de brilho (0..2)
|
|
* OPACITY - Opacidade (30..255);
|
|
* REALTIME - O efeito será atualizado a cada imagem.
|
|
* (*Pode causar Lag se o poder do efeito for muito alto)
|
|
*
|
|
* Exemplo
|
|
*
|
|
* dizzy_effect : 2 : 260 : 0 : 255 : true
|
|
*
|
|
* =============================================================================
|
|
* Para cancelar o efeito use o comando abaixo.
|
|
*
|
|
* dizzy_clear
|
|
*
|
|
* =============================================================================
|
|
* SCRIPT COMMAND
|
|
* =============================================================================
|
|
* Para ativar o efeito Dizzy através do Script command use o código abaixo.
|
|
*
|
|
* $gameSystem.dizzeEffect(power,duration,blendType,opacity,realTime)
|
|
*
|
|
* Exemplo
|
|
*
|
|
* $gameSystem.dizzeEffect(1,1,0,150,false);
|
|
*
|
|
* =============================================================================
|
|
* SKILL NOTETAGS
|
|
* =============================================================================
|
|
* Para ativar o efeito Dizzy nas habilidades ou items use o comentário abaixo
|
|
* caixa de notas da Habilidade/Item.
|
|
*
|
|
* Dizzy Animation
|
|
*
|
|
*/
|
|
|
|
//=============================================================================
|
|
// ** PLUGIN PARAMETERS
|
|
//=============================================================================
|
|
var Imported = Imported || {};
|
|
Imported.MOG_DizzyEffect = true;
|
|
var Moghunter = Moghunter || {};
|
|
|
|
//=============================================================================
|
|
// ** Game_System
|
|
//=============================================================================
|
|
|
|
//==============================
|
|
// * Initialize
|
|
//==============================
|
|
var _mog_DizzyEffect_temp_initialize = Game_Temp.prototype.initialize;
|
|
Game_Temp.prototype.initialize = function () {
|
|
_mog_DizzyEffect_temp_initialize.call(this);
|
|
this._dizzyEffectLoadTime = 20;
|
|
};
|
|
|
|
//=============================================================================
|
|
// ** Game_System
|
|
//=============================================================================
|
|
|
|
//==============================
|
|
// * Initialize
|
|
//==============================
|
|
var _mog_DizzyEffect_sys_initialize = Game_System.prototype.initialize;
|
|
Game_System.prototype.initialize = function () {
|
|
_mog_DizzyEffect_sys_initialize.call(this);
|
|
this.setDizzyEffectSystem();
|
|
};
|
|
|
|
//==============================
|
|
// * set Dizzy Effect System
|
|
//==============================
|
|
Game_System.prototype.setDizzyEffectSystem = function () {
|
|
this._dizzyEffect = {};
|
|
this._dizzyEffect.enabled = false;
|
|
this._dizzyEffect.refresh = false;
|
|
this._dizzyEffect.loop = false;
|
|
this._dizzyEffect.speed = 10;
|
|
this._dizzyEffect.duration = 60;
|
|
this._dizzyEffect.time = 60;
|
|
this._dizzyEffect.reloadTime = 0;
|
|
this._dizzyEffect.frames = 1;
|
|
this._dizzyEffect.mode = 0;
|
|
this._dizzyEffect.opacity = 255;
|
|
this._dizzyEffect.blendMode = 0;
|
|
this._dizzyEffect.realTime = true;
|
|
this._dizzySpritesData = [];
|
|
};
|
|
|
|
//==============================
|
|
// * Dizze Effect
|
|
//==============================
|
|
Game_System.prototype.dizzeEffect = function (
|
|
power,
|
|
duration,
|
|
blendType,
|
|
opacity,
|
|
realTime
|
|
) {
|
|
var power2 = Math.min(Math.max(Number(power), 1), 10);
|
|
var duration2 = Math.min(Math.max(Number(duration), 20), 9999);
|
|
var blendType2 = Math.min(Math.max(Number(blendType), 0), 2);
|
|
var opacity2 = Math.min(Math.max(Number(opacity), 60), 255);
|
|
var realTime2 = String(realTime) === "true" ? true : false;
|
|
$gameSystem._dizzyEffect.frames = power2;
|
|
$gameSystem._dizzyEffect.time = duration2;
|
|
$gameSystem._dizzyEffect.blendMode = blendType2;
|
|
$gameSystem._dizzyEffect.opacity = opacity2;
|
|
$gameSystem._dizzyEffect.realTime = realTime2;
|
|
$gameSystem._dizzyEffect.refresh = true;
|
|
};
|
|
|
|
//=============================================================================
|
|
// ** Scene Manager
|
|
//=============================================================================
|
|
|
|
SceneManager._dizzyBitmap = null;
|
|
|
|
//==============================
|
|
// * Snap For Dizzy
|
|
//==============================
|
|
SceneManager.snapForDizzy = function () {
|
|
this._dizzyBitmap = this.snap();
|
|
};
|
|
|
|
//=============================================================================
|
|
// ** Scene Map
|
|
//=============================================================================
|
|
|
|
//==============================
|
|
// * can Call Menu Dizzy
|
|
//==============================
|
|
Scene_Map.prototype.canCallMenuDizzy = function () {
|
|
if ($gameSystem._dizzyEffect.duration <= 20) {
|
|
return true;
|
|
}
|
|
if ($gameTemp._dizzyEffectLoadTime > 0) {
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
|
|
//==============================
|
|
// * call Menu
|
|
//==============================
|
|
var _mog_dizzyEffect_sMenu_callMenu = Scene_Map.prototype.callMenu;
|
|
Scene_Map.prototype.callMenu = function () {
|
|
if (!this.canCallMenuDizzy()) {
|
|
return;
|
|
}
|
|
_mog_dizzyEffect_sMenu_callMenu.call(this);
|
|
};
|
|
|
|
//=============================================================================
|
|
// ** Game_Interpreter
|
|
//=============================================================================
|
|
|
|
//==============================
|
|
// * PluginCommand
|
|
//==============================
|
|
var _mog_DizzyEffect_pluginCommand = Game_Interpreter.prototype.pluginCommand;
|
|
Game_Interpreter.prototype.pluginCommand = function (command, args) {
|
|
_mog_DizzyEffect_pluginCommand.call(this, command, args);
|
|
this.dizzyEffectPluginCommand(command, args);
|
|
return true;
|
|
};
|
|
|
|
//==============================
|
|
// * Dizzy Effect Plugin Command
|
|
//==============================
|
|
Game_Interpreter.prototype.dizzyEffectPluginCommand = function (command, args) {
|
|
if (command === "dizzy_effect") {
|
|
var power = args[1] != null ? args[1] : 2;
|
|
var duration = args[3] != null ? args[3] : 0;
|
|
var blendType = args[5] != null ? args[5] : 0;
|
|
var opacity = args[7] != null ? args[7] : 255;
|
|
var realTime = args[9] != null ? args[9] : false;
|
|
$gameSystem.dizzeEffect(power, duration, blendType, opacity, realTime);
|
|
} else if (command === "dizzy_clear") {
|
|
$gameSystem._dizzyEffect.duration = 0;
|
|
}
|
|
};
|
|
|
|
//=============================================================================
|
|
// ** Game Action
|
|
//=============================================================================
|
|
|
|
//==============================
|
|
// * Execute Damage
|
|
//==============================
|
|
var _mog_dizzyEffect_gAction_applyItemUserEffect =
|
|
Game_Action.prototype.applyItemUserEffect;
|
|
Game_Action.prototype.applyItemUserEffect = function (target) {
|
|
_mog_dizzyEffect_gAction_applyItemUserEffect.call(this, target);
|
|
if (this.canUseDizzyAnimation(target)) {
|
|
this.executeDizzyAnimation(target);
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * can Use Dizzy Animation
|
|
//==============================
|
|
Game_Action.prototype.canUseDizzyAnimation = function (target) {
|
|
var enable = false;
|
|
if (!this.item()) {
|
|
enable = false;
|
|
}
|
|
var notes = this.item().note.split(/[\r\n]+/);
|
|
notes.forEach(function (note) {
|
|
if (note.toLowerCase() == "dizzy effect") {
|
|
enable = true;
|
|
}
|
|
}, this);
|
|
return enable;
|
|
};
|
|
|
|
//==============================
|
|
// ** Execute Dizzy Animation
|
|
//==============================
|
|
Game_Action.prototype.executeDizzyAnimation = function (target) {
|
|
$gameSystem.dizzeEffect(1, 1, 0, 150, false);
|
|
};
|
|
|
|
//=============================================================================
|
|
// ** Scene Base
|
|
//=============================================================================
|
|
|
|
//==============================
|
|
// * dizzy Sprite
|
|
//==============================
|
|
Scene_Base.prototype.dizzySprite = function () {
|
|
return this._spriteset._dizzySprite;
|
|
};
|
|
|
|
//==============================
|
|
// * dizzy Sprite Data
|
|
//==============================
|
|
Scene_Base.prototype.dizzySpriteData = function () {
|
|
return $gameSystem._dizzySpritesData;
|
|
};
|
|
|
|
//==============================
|
|
// * record Dizzy Data
|
|
//==============================
|
|
Scene_Base.prototype.recordDizzyData = function () {
|
|
$gameSystem._dizzySpritesData = [];
|
|
for (var i = 0; i < this.dizzySprite()._sprites.length; i++) {
|
|
var sprite = this.dizzySprite()._sprites[i];
|
|
$gameSystem._dizzySpritesData[i] = {};
|
|
$gameSystem._dizzySpritesData[i].x = sprite.x;
|
|
$gameSystem._dizzySpritesData[i].y = sprite.y;
|
|
$gameSystem._dizzySpritesData[i].opacity = sprite.opacity;
|
|
$gameSystem._dizzySpritesData[i].scaleX = sprite.scale.x;
|
|
$gameSystem._dizzySpritesData[i].scaleY = sprite.scale.y;
|
|
$gameSystem._dizzySpritesData[i].rotation = sprite.rotation;
|
|
$gameSystem._dizzySpritesData[i].blendMode = sprite.scale.blendMode;
|
|
$gameSystem._dizzySpritesData[i].rt = sprite.rt;
|
|
$gameSystem._dizzySpritesData[i].sc = sprite.sc;
|
|
$gameSystem._dizzySpritesData[i].wait = sprite.wait;
|
|
}
|
|
};
|
|
|
|
//=============================================================================
|
|
// ** Scene Map
|
|
//=============================================================================
|
|
|
|
//==============================
|
|
// * Terminate
|
|
//==============================
|
|
var _mog_dizzyEffect_scMap_terminate = Scene_Map.prototype.terminate;
|
|
Scene_Map.prototype.terminate = function () {
|
|
if (this._spriteset && this.dizzySprite() && this.dizzySprite()._sprites) {
|
|
this.recordDizzyData();
|
|
}
|
|
_mog_dizzyEffect_scMap_terminate.call(this);
|
|
};
|
|
|
|
//=============================================================================
|
|
// ** Spriteset Base
|
|
//=============================================================================
|
|
|
|
//==============================
|
|
// * Initialize
|
|
//==============================
|
|
var _mog_dizzyEffect_sprtBase_initialize = Spriteset_Base.prototype.initialize;
|
|
Spriteset_Base.prototype.initialize = function () {
|
|
_mog_dizzyEffect_sprtBase_initialize.call(this);
|
|
this.createDizzySprite();
|
|
};
|
|
|
|
//==============================
|
|
// * create Dizzy Sprite
|
|
//==============================
|
|
Spriteset_Base.prototype.createDizzySprite = function () {
|
|
this._dizzySprite = new DizzySprites();
|
|
this._dizzySprite.z = 500;
|
|
this.addChild(this._dizzySprite);
|
|
};
|
|
|
|
//=============================================================================
|
|
// * SpriteWeatherEX
|
|
//=============================================================================
|
|
function DizzySprites() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
DizzySprites.prototype = Object.create(Sprite.prototype);
|
|
DizzySprites.prototype.constructor = DizzySprites;
|
|
|
|
//==============================
|
|
// * Initialize
|
|
//==============================
|
|
DizzySprites.prototype.initialize = function () {
|
|
Sprite.prototype.initialize.call(this);
|
|
this.z = 500;
|
|
this.createField();
|
|
};
|
|
|
|
//==============================
|
|
// * Data
|
|
//==============================
|
|
DizzySprites.prototype.data = function () {
|
|
return $gameSystem._dizzyEffect;
|
|
};
|
|
|
|
//==============================
|
|
// * Data Sprites
|
|
//==============================
|
|
DizzySprites.prototype.dataSprites = function () {
|
|
return $gameSystem._dizzySpritesData;
|
|
};
|
|
|
|
//==============================
|
|
// * create Field
|
|
//==============================
|
|
DizzySprites.prototype.createField = function () {
|
|
this._field = new Sprite();
|
|
this.addChild(this._field);
|
|
};
|
|
|
|
//==============================
|
|
// * dizzy Bitmap
|
|
//==============================
|
|
DizzySprites.prototype.dizzyBitmap = function () {
|
|
return SceneManager._dizzyBitmap;
|
|
};
|
|
|
|
//==============================
|
|
// * remove Sprites
|
|
//==============================
|
|
DizzySprites.prototype.removeSprites = function () {
|
|
for (var i = 0; i < this._sprites.length; i++) {
|
|
this._field.removeChild(this._sprites[i]);
|
|
}
|
|
this._sprites = null;
|
|
SceneManager._dizzyBitmap = null;
|
|
};
|
|
|
|
//==============================
|
|
// * create Sprites
|
|
//==============================
|
|
DizzySprites.prototype.createSprites = function () {
|
|
this.data().duration = this.data().time;
|
|
this._sprites = [];
|
|
SceneManager.snapForDizzy();
|
|
for (var i = 0; i < this.data().frames; i++) {
|
|
this._sprites[i] = new Sprite(this.dizzyBitmap());
|
|
this.setupSpriteEffect(this._sprites[i], i, this.data().frames);
|
|
this._field.addChild(this._sprites[i]);
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * clear Base Parameters
|
|
//==============================
|
|
DizzySprites.prototype.clearBaseParameters = function (sprite) {
|
|
sprite.x = this.centerX();
|
|
sprite.y = this.centerY();
|
|
sprite.anchor.x = 0.5;
|
|
sprite.anchor.y = 0.5;
|
|
sprite.scale.x = 1.0;
|
|
sprite.scale.y = 1.0;
|
|
sprite.rotation = 0;
|
|
sprite.opacity = this.data().opacity;
|
|
sprite.blendMode = this.data().blendMode;
|
|
};
|
|
|
|
//==============================
|
|
// * refresh Bitmap
|
|
//==============================
|
|
DizzySprites.prototype.refreshBitmap = function (sprite) {
|
|
this.visible = false;
|
|
SceneManager.snapForDizzy();
|
|
this.visible = true;
|
|
sprite.bitmap = this.dizzyBitmap();
|
|
};
|
|
|
|
//==============================
|
|
// * prepare Refresh
|
|
//==============================
|
|
DizzySprites.prototype.prepareRefresh = function (sprite, i) {
|
|
this.clearBaseParameters(sprite);
|
|
if (this.data().realTime) {
|
|
this.refreshBitmap(sprite);
|
|
}
|
|
this._field.children.sort(function (a, b) {
|
|
return a.scale.x - b.scale.x;
|
|
});
|
|
};
|
|
|
|
//==============================
|
|
// * setup Sprite Effect
|
|
//==============================
|
|
DizzySprites.prototype.setupSpriteEffect = function (sprite, i, itemMax) {
|
|
this.clearBaseParameters(sprite);
|
|
var frTime = Math.floor(50 / this.data().frames);
|
|
sprite.wait = -frTime + Math.abs(frTime * (-itemMax + i));
|
|
if (sprite.wait < 0) {
|
|
sprite.wait = 0;
|
|
}
|
|
sprite.rt = 0;
|
|
sprite.sc = 0.01;
|
|
};
|
|
|
|
//==============================
|
|
// * load Sprites
|
|
//==============================
|
|
DizzySprites.prototype.loadSprites = function () {
|
|
this._sprites = [];
|
|
if (!SceneManager._dizzyBitmap) {
|
|
SceneManager.snapForDizzy();
|
|
}
|
|
for (var i = 0; i < this.dataSprites().length; i++) {
|
|
this._sprites[i] = new Sprite(this.dizzyBitmap());
|
|
this.clearBaseParameters(this._sprites[i]);
|
|
this.loadSpriteData(this._sprites[i], this.dataSprites()[i]);
|
|
this._field.addChild(this._sprites[i]);
|
|
}
|
|
$gameSystem._dizzySpritesData = [];
|
|
this._field.children.sort(function (a, b) {
|
|
return a.scale.x - b.scale.x;
|
|
});
|
|
};
|
|
|
|
//==============================
|
|
// * load Sprite Data
|
|
//==============================
|
|
DizzySprites.prototype.loadSpriteData = function (sprite, data) {
|
|
sprite.x = data.x;
|
|
sprite.y = data.y;
|
|
sprite.scale.x = data.scaleX;
|
|
sprite.scale.y = data.scaleY;
|
|
sprite.opacity = data.opacity;
|
|
sprite.rotation = data.rotation;
|
|
sprite.scale.blendMode = data.blendMode;
|
|
sprite.rt = data.rt;
|
|
sprite.sc = data.sc;
|
|
sprite.wait = data.wait;
|
|
};
|
|
|
|
//==============================
|
|
// * refresh Dizzy Sprites
|
|
//==============================
|
|
DizzySprites.prototype.refreshDizzySprites = function (preLoad) {
|
|
this.data().refresh = false;
|
|
if (this._sprites) {
|
|
this.removeSprites();
|
|
}
|
|
if (preLoad) {
|
|
this.loadSprites();
|
|
} else {
|
|
this.createSprites();
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * center X
|
|
//==============================
|
|
DizzySprites.prototype.centerX = function () {
|
|
return Graphics.boxWidth / 2;
|
|
};
|
|
|
|
//==============================
|
|
// * center Y
|
|
//==============================
|
|
DizzySprites.prototype.centerY = function () {
|
|
return Graphics.boxHeight / 2;
|
|
};
|
|
|
|
//==============================
|
|
// * update Sprites
|
|
//==============================
|
|
DizzySprites.prototype.updateSprites = function (sprite, i) {
|
|
sprite.x = this.centerX();
|
|
sprite.y = this.centerY();
|
|
if (sprite.wait > 0) {
|
|
sprite.wait--;
|
|
if (this.data().realTime && sprite.wait <= 0) {
|
|
this.refreshBitmap(sprite);
|
|
}
|
|
return;
|
|
}
|
|
sprite.opacity -= 5;
|
|
sprite.rotation += sprite.rt;
|
|
sprite.scale.x += sprite.sc;
|
|
sprite.scale.y += sprite.sc;
|
|
if (sprite.opacity === 0 && this.data().duration > 0) {
|
|
this.prepareRefresh(sprite, i);
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * need Remove Sprites
|
|
//==============================
|
|
DizzySprites.prototype.needRemoveSprites = function (needClear) {
|
|
if (!needClear) {
|
|
return false;
|
|
}
|
|
if (this.data().loop) {
|
|
return false;
|
|
}
|
|
if (this.data().duration > 0) {
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
|
|
//==============================
|
|
// * update
|
|
//==============================
|
|
DizzySprites.prototype.update = function () {
|
|
Sprite.prototype.update.call(this);
|
|
if ($gameTemp._dizzyEffectLoadTime > 0) {
|
|
$gameTemp._dizzyEffectLoadTime--;
|
|
}
|
|
if (this.data().refresh) {
|
|
this.refreshDizzySprites(false);
|
|
}
|
|
if (
|
|
!this._sprites &&
|
|
this.dataSprites().length > 0 &&
|
|
$gameTemp._dizzyEffectLoadTime === 0
|
|
) {
|
|
this.refreshDizzySprites(true);
|
|
}
|
|
if (this.data().duration > 0 && !this.data().loop) {
|
|
this.data().duration--;
|
|
}
|
|
if (this._sprites) {
|
|
var needClear = true;
|
|
for (var i = 0; i < this._sprites.length; i++) {
|
|
this.updateSprites(this._sprites[i], i);
|
|
if (this._sprites[i].opacity > 0) {
|
|
needClear = false;
|
|
}
|
|
}
|
|
if (this.needRemoveSprites(needClear)) {
|
|
this.removeSprites();
|
|
}
|
|
}
|
|
};
|