419 lines
No EOL
16 KiB
JavaScript
419 lines
No EOL
16 KiB
JavaScript
//=============================================================================
|
||
// MOG_CharParticles.js
|
||
//=============================================================================
|
||
|
||
/*:
|
||
* @plugindesc (v1.1) Adiciona o sistema de partículas nos characters.
|
||
* @author Moghunter
|
||
*
|
||
*
|
||
* @help
|
||
* =============================================================================
|
||
* +++ MOG - Char Particles (v1.1) +++
|
||
* By Moghunter
|
||
* https://mogplugins.wordpress.com
|
||
* =============================================================================
|
||
* Adiciona o sistema de partículas nos sprites dos characters.
|
||
*
|
||
* =============================================================================
|
||
* PLUGIN COMMAND
|
||
* =============================================================================
|
||
* Para ativar o efeito das partículas use esse comando através do Plugin Command.
|
||
*
|
||
* particles_event_id : EVENT_ID : MODE : POWER : BLEND : X : Y : POSITION : FILENAME
|
||
*
|
||
* EVENT_ID = ID do evento do mapa.
|
||
* MODE - Tipo de animação;
|
||
* 0 - Normal
|
||
* 1 - Random
|
||
* BLEND - Tipo de Blend
|
||
* 0 - Normal
|
||
* 1 - Add
|
||
* X - Velocidade da partícula na horizontal.
|
||
* Y - Velocidade do partícula na vertical.
|
||
* POSITION - Posição.
|
||
* 0 - Abaixo.
|
||
* 1 - Centro.
|
||
* 2 - Acima.
|
||
* FILE NAME - Definição do nome do arquivo.
|
||
* (As imagens devem ser gravadas na pasta /img/charparticles/)
|
||
*
|
||
* =============================================================================
|
||
* EVENT COMMENT
|
||
* =============================================================================
|
||
* Para ativar o efeito das partículas use esse comentário.
|
||
*
|
||
* particles : MODE : POWER : BLEND : X : Y : POSITION : FILENAME
|
||
*
|
||
* MODE - Tipo de animação;
|
||
* 0 - Normal
|
||
* 1 - Random
|
||
* BLEND - Tipo de Blend
|
||
* 0 - Normal
|
||
* 1 - Add
|
||
* X - Velocidade da partícula na horizontal.
|
||
* Y - Velocidade do partícula na vertical.
|
||
* POSITION - Posição.
|
||
* 0 - Abaixo.
|
||
* 1 - Centro.
|
||
* 2 - Acima.
|
||
* FILE NAME - Definição do nome do arquivo.
|
||
* (As imagens devem ser gravadas na pasta /img/charparticles/)
|
||
*
|
||
* =============================================================================
|
||
* HISTÓRICO
|
||
* =============================================================================
|
||
* (v1.1) - Compatibilidade com Pixi v4.
|
||
*/
|
||
|
||
|
||
|
||
//=============================================================================
|
||
// ** PLUGIN PARAMETERS
|
||
//=============================================================================
|
||
var Imported = Imported || {};
|
||
Imported.MOG_CharParticles = true;
|
||
var Moghunter = Moghunter || {};
|
||
|
||
Moghunter.parameters = PluginManager.parameters('MOG_CharParticles');
|
||
|
||
//=============================================================================
|
||
// ** ImageManager
|
||
//=============================================================================
|
||
|
||
//==============================
|
||
// * Char Particles
|
||
//==============================
|
||
ImageManager.loadCharParticles = function(filename) {
|
||
return this.loadBitmap('img/charparticles/', filename, 0, true);
|
||
};
|
||
|
||
//=============================================================================
|
||
// ** Game Character Base
|
||
//=============================================================================
|
||
|
||
//==============================
|
||
// * Initialize
|
||
//==============================
|
||
var _mog_chaParticles_gchar_initMembers = Game_CharacterBase.prototype.initMembers;
|
||
Game_CharacterBase.prototype.initMembers = function() {
|
||
_mog_chaParticles_gchar_initMembers.call(this);
|
||
this._particles = [false,[],false,0,0,0,0,0,0,""];
|
||
};
|
||
|
||
//=============================================================================
|
||
// ** Game_Interpreter
|
||
//=============================================================================
|
||
|
||
//==============================
|
||
// * PluginCommand
|
||
//==============================
|
||
var _mog_chaParticles_pluginCommand = Game_Interpreter.prototype.pluginCommand
|
||
Game_Interpreter.prototype.pluginCommand = function(command, args) {
|
||
_mog_chaParticles_pluginCommand.call(this,command, args)
|
||
this.checkEventsCharParticles(command, args);
|
||
return true;
|
||
};
|
||
|
||
//==============================
|
||
// * checkEventsCharParticles
|
||
//==============================
|
||
Game_Interpreter.prototype.checkEventsCharParticles = function(command, args) {
|
||
var event_id = 0;
|
||
if (command === "particles_event_id") {
|
||
event_id = Number(args[1]);
|
||
m = Number(args[3]);
|
||
p = Number(args[5]);
|
||
b = Number(args[7]);
|
||
x = Number(args[9]);
|
||
y = Number(args[11]);
|
||
a = Number(args[13]);
|
||
i = String(args[15]);
|
||
};
|
||
if (event_id > 0) {
|
||
$gameMap.events().forEach(function(event) {
|
||
if (event.eventId() === event_id) {
|
||
event._particles = [true,[],true,m,p,b,x,y,a,i];
|
||
};
|
||
}, this);
|
||
};
|
||
};
|
||
|
||
//=============================================================================
|
||
// ** Game Event
|
||
//=============================================================================
|
||
|
||
//==============================
|
||
// * Setup Page
|
||
//==============================
|
||
var _mog_charparticles_gevent_setupPage = Game_Event.prototype.setupPage;
|
||
Game_Event.prototype.setupPage = function() {
|
||
_mog_charparticles_gevent_setupPage.call(this);
|
||
this.checkCharParticles();
|
||
};
|
||
|
||
//==============================
|
||
// * Check Char Particles
|
||
//==============================
|
||
Game_Event.prototype.checkCharParticles = function() {
|
||
var oldR = this._particles[0];
|
||
this._particles = [false,[],false,0,0,0,0,0,0,""];
|
||
if (!this._erased && this.page()) {this.list().forEach(function(l) {
|
||
if (l.code === 108) {
|
||
var args = l.parameters[0].split(': ')
|
||
if (args[0].toLowerCase() == "particles "){
|
||
m = Number(args[1]);
|
||
p = Number(args[2]);
|
||
b = Number(args[3]);
|
||
x = Number(args[4]);
|
||
y = Number(args[5]);
|
||
a = Number(args[6]);
|
||
i = String(args[7]);
|
||
this._particles = [true,[],true,m,p,b,x,y,a,i];
|
||
};
|
||
};
|
||
}, this);};
|
||
if (oldR && !this._particles[0]) {this._particles = [true,[],true,-1,0,0,0,0,0,""]};
|
||
};
|
||
|
||
//=============================================================================
|
||
// ** Sprite Character
|
||
//=============================================================================
|
||
|
||
//==============================
|
||
// * Update
|
||
//==============================
|
||
var _mog_chaParticles_update = Sprite_Character.prototype.update;
|
||
Sprite_Character.prototype.update = function() {
|
||
_mog_chaParticles_update.call(this);
|
||
if (this.canUpdateParticles()) {this.updateParticlesEffect()};
|
||
};
|
||
|
||
//==============================
|
||
// * can Update Particles
|
||
//==============================
|
||
Sprite_Character.prototype.canUpdateParticles = function() {
|
||
if (!this._character) {return false};
|
||
if (!this._character._particles[0]) {return false};
|
||
if (!this.bitmap) {return false};
|
||
if (!this.bitmap.isReady()) {return false};
|
||
return true;
|
||
};
|
||
|
||
//==============================
|
||
// * Update Particles Effect
|
||
//==============================
|
||
Sprite_Character.prototype.updateParticlesEffect = function() {
|
||
if (!this._particlesField) {this.createParticlesField()};
|
||
if (!this._particlesSprites || this._character._particles[2]) {this.createParticlesSprites()};
|
||
if (this._particlesSprites) {
|
||
for (var i = 0; i < this._particlesSprites.length; i++) {
|
||
this.updateParticlesSprites(this._particlesSprites[i],i);
|
||
};
|
||
};
|
||
};
|
||
|
||
//==============================
|
||
// * create Particles Field
|
||
//==============================
|
||
Sprite_Character.prototype.createParticlesField = function() {
|
||
this._particlesField = new Sprite();
|
||
this.addChild(this._particlesField);
|
||
};
|
||
|
||
//==============================
|
||
// * remove Particles Sprites
|
||
//==============================
|
||
Sprite_Character.prototype.removeParticlesSprites = function() {
|
||
for (var i = 0; i < this._particlesSprites.length; i++) {
|
||
this._particlesField.removeChild(this._particlesSprites[i]);
|
||
this._particlesSprites[i].bitmap = null;
|
||
this._particlesSprites[i] = null;
|
||
this._character._particles[1][i] = null;
|
||
};
|
||
this._particlesSprites = null;
|
||
};
|
||
|
||
//==============================
|
||
// * dispose Particles
|
||
//==============================
|
||
Sprite_Character.prototype.disposeParticles = function() {
|
||
if (this._particlesSprites) {this.removeParticlesSprites()};
|
||
this.removeChild(this._particlesSprites);
|
||
this._particlesSprites = null;
|
||
this._character._particles = [false,[],false,0,0,0,0,0,0,""];
|
||
};
|
||
|
||
//==============================
|
||
// * create Particles Sprites
|
||
//==============================
|
||
Sprite_Character.prototype.createParticlesSprites = function() {
|
||
this._character._particles[2] = false;
|
||
if (this._particlesSprites) {this.removeParticlesSprites()};
|
||
this._particlesType = this._character._particles[3];
|
||
if (this._character._particles[3] < 0) {this.disposeParticles();return};
|
||
this._particlesSprites = [];
|
||
this._particlesImage = ImageManager.loadCharParticles(this._character._particles[9]);
|
||
this._particleSX = this._character._particles[6];
|
||
this._particleSY = this._character._particles[7];
|
||
this._particlesPos = this._character._particles[8];
|
||
var maxw = Math.min(Math.max(this._character._particles[4],1),999);
|
||
var blendMode = Math.min(Math.max(this._character._particles[5],0),1);
|
||
for (var i = 0; i < maxw; i++) {
|
||
this._particlesSprites[i] = new Sprite(this._particlesImage);
|
||
this._particlesSprites[i].anchor.x = 0.5;
|
||
this._particlesSprites[i].anchor.y = 0.5;
|
||
this._particlesSprites[i].blendMode = blendMode;
|
||
this._particlesField.addChild(this._particlesSprites[i]);
|
||
this._particlesSprites[i].an = [Math.randomInt((maxw / 2) + 20),0,0];
|
||
if (!this._character._particles[1][i]) {
|
||
this._character._particles[1][i] = [];
|
||
this.setParticlesAnimation(this._particlesSprites[i])
|
||
} else {
|
||
this.loadParticlesData(i);
|
||
};
|
||
};
|
||
};
|
||
|
||
//==============================
|
||
// * set Particles Animation
|
||
//==============================
|
||
Sprite_Character.prototype.setParticlesAnimation = function(sprite) {
|
||
var xi = this._particleSX;
|
||
var yi = this._particleSY;
|
||
if (this._particlesType === 0) {
|
||
var sx = (Math.random() * xi) + (0.1 * xi);
|
||
var sy = (Math.random() * yi) + (0.1 * yi);
|
||
} else {
|
||
var d = Math.randomInt(2);
|
||
var x = (Math.random() * Math.abs(xi)) + 0.3;
|
||
var sx = d === 0 ? x : -x;
|
||
var d = Math.randomInt(2);
|
||
var y = (Math.random() * Math.abs(yi)) + 0.3;
|
||
var sy = d === 0 ? y : -y;
|
||
};
|
||
var pw = this.patternWidth();
|
||
var ph = this.patternHeight();
|
||
sprite.x = Math.randomInt(pw) - (pw / 2)
|
||
if (this._particlesPos === 0) {
|
||
sprite.y = Math.randomInt((ph / 2)) - (ph / 2);
|
||
} else if (this._particlesPos === 1) {
|
||
sprite.y = Math.randomInt((ph / 2)) - (ph);
|
||
} else {
|
||
sprite.y = Math.randomInt((ph / 2)) - (ph + (ph / 2));
|
||
};
|
||
sprite.sx = sx;
|
||
sprite.sy = sy;
|
||
sprite.op = (Math.random() * 10) + 5.0;
|
||
sprite.sc = 0;
|
||
sprite.rt = 0;
|
||
sprite.visible = false;
|
||
sprite.opacity = 255;
|
||
this.charParticlesZoom(sprite);
|
||
};
|
||
|
||
//==============================
|
||
// * Random Zoom
|
||
//==============================
|
||
Sprite_Character.prototype.charParticlesZoom = function(sprite) {
|
||
var pz = ((Math.random() * 0.5) * 1);
|
||
sprite.scale = new PIXI.Point(0.5 + Number(pz), 0.5 + Number(pz));
|
||
};
|
||
|
||
//==============================
|
||
// * Load Particles Data
|
||
//==============================
|
||
Sprite_Character.prototype.loadParticlesData = function(i) {
|
||
this._particlesSprites[i].x = this._character._particles[1][i].x;
|
||
this._particlesSprites[i].y = this._character._particles[1][i].y;
|
||
this._particlesSprites[i].scale.x = this._character._particles[1][i].scaleX;
|
||
this._particlesSprites[i].scale.y = this._character._particles[1][i].scaleY;
|
||
this._particlesSprites[i].sc = this._character._particles[1][i].sc;
|
||
this._particlesSprites[i].rotation = this._character._particles[1][i].rotation;
|
||
this._particlesSprites[i].opacity = this._character._particles[1][i].opacity;
|
||
this._particlesSprites[i].sx = this._character._particles[1][i].sx;
|
||
this._particlesSprites[i].sy = this._character._particles[1][i].sy;
|
||
this._particlesSprites[i].op = this._character._particles[1][i].op;
|
||
this._particlesSprites[i].rt = this._character._particles[1][i].rt;
|
||
this._particlesSprites[i].an = this._character._particles[1][i].an;
|
||
this._particlesSprites[i].blendMode = this._character._particles[1][i].blendMode;
|
||
};
|
||
|
||
//==============================
|
||
// * Update Particles Sprites
|
||
//==============================
|
||
Sprite_Character.prototype.updateParticlesSprites = function(sprite,index) {
|
||
if (sprite.an[0] > 0) {sprite.an[0]--;
|
||
sprite.visible = false;
|
||
return;
|
||
};
|
||
sprite.visible = true;
|
||
sprite.x += sprite.sx;
|
||
sprite.y += sprite.sy;
|
||
sprite.opacity -= sprite.op;
|
||
sprite.scale.x += sprite.sc;
|
||
sprite.scale.y += sprite.sc;
|
||
sprite.rotation += sprite.rt;
|
||
if (this.charPartNeedReset(sprite)) {this.setParticlesAnimation(sprite)};
|
||
};
|
||
|
||
//==============================
|
||
// * char Par Need Reset
|
||
//==============================
|
||
Sprite_Character.prototype.charPartNeedReset = function(sprite) {
|
||
if (Imported.MOG_CharShatterEffects && this._character._shatter[0]) {return false};
|
||
if (sprite.opacity <= 0) {return true};
|
||
return false
|
||
};
|
||
|
||
//==============================
|
||
// * Save Particles Data
|
||
//==============================
|
||
Sprite_Character.prototype.saveParticlesData = function(sprite,index) {
|
||
this._character._particles[1] = [];
|
||
for (var i = 0; i < this._particlesSprites.length; i++) {
|
||
var sprite = this._particlesSprites[i]
|
||
this._character._particles[1][i] = {};
|
||
this._character._particles[1][i].x = sprite.x;
|
||
this._character._particles[1][i].y = sprite.y;
|
||
this._character._particles[1][i].scaleX = sprite.scale.x;
|
||
this._character._particles[1][i].scaleY = sprite.scale.y;
|
||
this._character._particles[1][i].opacity = sprite.opacity;
|
||
this._character._particles[1][i].sx = sprite.sx;
|
||
this._character._particles[1][i].sy = sprite.sy;
|
||
this._character._particles[1][i].op = sprite.op;
|
||
this._character._particles[1][i].sc = sprite.sc;
|
||
this._character._particles[1][i].rotation = sprite.rotation;
|
||
this._character._particles[1][i].rt = sprite.rt;
|
||
this._character._particles[1][i].an = sprite.an;
|
||
this._character._particles[1][i].blendMode = sprite.blendMode;
|
||
};
|
||
};
|
||
|
||
//=============================================================================
|
||
// ** Scene Map
|
||
//=============================================================================
|
||
|
||
//==============================
|
||
// * Terminate
|
||
//==============================
|
||
var _mog_chaParticles_scMap_terminate = Scene_Map.prototype.terminate;
|
||
Scene_Map.prototype.terminate = function() {
|
||
if (this._spriteset) {this._spriteset.recordParticlesData()};
|
||
_mog_chaParticles_scMap_terminate.call(this);
|
||
};
|
||
|
||
//=============================================================================
|
||
// ** Spriteset Map
|
||
//=============================================================================
|
||
|
||
//==============================
|
||
// * Record Particles Data
|
||
//==============================
|
||
Spriteset_Map.prototype.recordParticlesData = function() {
|
||
for (var i = 0; i < this._characterSprites.length; i++) {
|
||
var sprite = this._characterSprites[i];
|
||
if (sprite._particlesSprites) {sprite.saveParticlesData()
|
||
} else {sprite._character._particles = [false,[],false,0,0,0,0,0,0,""]};
|
||
}
|
||
}; |