ultimate-angel-zerachiel/www/js/plugins/MOG_CharParticles.js
2024-01-17 11:38:37 -06:00

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, ""];
}
}
};