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