459 lines
15 KiB
JavaScript
459 lines
15 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://atelierrgss.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, ""];
|
|
}
|
|
}
|
|
};
|