//============================================================================= // MOG_CharShatterEffect.js //============================================================================= /*: * @target MZ * @plugindesc (v1.0) Cria o efeito de shatter nos sprites dos characters. * @author Moghunter * @url https://mogplugins.wordpress.com * * @command CharShatterEffectEvent * @desc Ativa o efeito shatter no evento. * @text Set Chatter Effect * * @arg id * @desc Define a ID do evento. * @text Event ID * @default 1 * @type number * @min 1 * * @arg mode * @desc Define o efeito do shatter. * @text Shatter Mode * @default Normal * @type select * @option Normal * @value Normal * @option Random * @value Random * @option Gravity * @value Gravity * * @arg x * @desc Define a velocidade X-axis do shatter. * @text X Speed (Offset) * @default -1 * * @arg y * @desc Define a velocidade Y-axis do shatter. * @text Y Speed (Offset) * @default -1 * * @help * ============================================================================= * +++ MOG - Char Shatter Effect (v1.0) +++ * By Moghunter * https://mogplugins.wordpress.com * ============================================================================= * Cria o efeito de shatter nos sprites dos characters. * */ //============================================================================= // ** PLUGIN PARAMETERS //=============================================================================   var Imported = Imported || {};   Imported.MOG_CharShatterEffect = true;   var Moghunter = Moghunter || {};  Moghunter.parameters = PluginManager.parameters('MOG_CharShatterEffect'); //============================================================================= // ■■■ PluginManager ■■■ //============================================================================= PluginManager.registerCommand('MOG_CharShatterEffect', "CharShatterEffectEvent", data => { var charID = Number(data.id); var char = $gameMap.event(charID); if (char) {$gameMap.charShatterEffect(data,char)}; }); //============================================================================= // ■■■ Game Temp ■■■ //============================================================================= //============================== // * Initialize //============================== var _mog_cshatter_gTemp_initialize = Game_Temp.prototype.initialize; Game_Temp.prototype.initialize = function() { _mog_cshatter_gTemp_initialize.call(this); this._forceSkipShatter = true; }; //============================================================================= // ■■■ Game Map ■■■ //============================================================================= //============================== // * Char Shatter Effect //============================== Game_Map.prototype.charShatterEffect = function(data,char) { if (char._shatter[0]) {return} var mode = this.charGetShatterEffect(String(data.mode)); var x = Number(data.x); var y = Number(data.y); char._shatter = [true,[],true,x,y,mode]; }; //============================== // * Char Get Shatter Effect //============================== Game_Map.prototype.charGetShatterEffect = function(mode) { if (mode == "Normal") {return 0; } else if (mode == "Random") {return 1; } else if (mode == "Gravity") {return 2; }; return 0; }; //============================================================================= // ■■■ Game Character Base ■■■ //============================================================================= //============================== // ♦ ALIAS ♦ Initialize //============================== var _mog_chaShatter_gchar_initMembers = Game_CharacterBase.prototype.initMembers; Game_CharacterBase.prototype.initMembers = function() { _mog_chaShatter_gchar_initMembers.call(this); this._shatter = [false,[],false,0,0,1,false]; }; //============================================================================= // ■■■ Sprite Character ■■■ //============================================================================= //============================== // ♦ ALIAS ♦ Update //============================== var _mog_charShatter_update = Sprite_Character.prototype.update; Sprite_Character.prototype.update = function() { _mog_charShatter_update.call(this); if (this._character && this._character._shatter[0]) {this.updateShatterEffect()}; }; //============================== // * Update Shatter Effect //============================== Sprite_Character.prototype.updateShatterEffect = function() { if ($gameTemp._forceSkipShatter) {this._character._shatter[7] = true}; if (this._character._shatter[7]) { this.visible = false; this.opacity = 0; return; } if (!this._shatterField) {this.createShatterField()}; if (!this._shatterSprites || this._character._shatter[2]) {this.createShatterSprites()}; for (var i = 0; i < this._shatterSprites.length; i++) { this.updateShatterSprites(this._shatterSprites[i],i); if (this._shatterSprites[i].opacity === 0) { this._shatterField.removeChild(this._shatterSprites[i]); }; }; this.setFrame(0,0,0,0); }; //============================== // * create Shatter Field //============================== Sprite_Character.prototype.createShatterField = function() { this._shatterField = new Sprite(); this.addChild(this._shatterField); }; //============================== // * remove Shatter Sprites //============================== Sprite_Character.prototype.removeShatterSprites = function() { for (var i = 0; i < this._shatterSprites.length; i++) { this._shatterField.removeChild(this._shatterSprites[i]); this._shatterSprites[i].destroy(); this._shatterSprites[i].bitmap = null; this._shatterSprites[i] = null; this._character._shatter[1][i] = null; }; this._shatterSprites = null; }; //============================== // * create Shatter Sprites //============================== Sprite_Character.prototype.createShatterSprites = function() { this._character._shatter[2] = false; if (this._shatterSprites) {this.removeShatterSprites()}; this._character._priorityType = 2 this._character._through = true; this._shatterSprites = []; this._shatterType = this._character._shatter[5]; var frag_size = 5; var pw = this.patternWidth(); var ph = this.patternHeight(); var maxw = Math.floor((pw / frag_size) * (ph / frag_size)); if (this._tileId > 0) { var sx = (Math.floor(this._tileId / 128) % 2 * 8 + this._tileId % 8) * pw; var sy = Math.floor(this._tileId % 256 / 8) % 16 * ph; } else { var sx = (this.characterBlockX() + this.characterPatternX()) * pw; var sy = (this.characterBlockY() + this.characterPatternY()) * ph; }; for (var i = 0; i < maxw; i++) { this.createFrag(i,pw,ph,sx,sy,frag_size); if (!this._character._shatter[1][i]) { this.setShatterAnimation(i) } else { this.loadShatterData(i); }; }; this._shatterField.x = -this.width / 2; this._shatterField.y = -this.height; }; //============================== // * create Frag //============================== Sprite_Character.prototype.createFrag = function(i,pw,ph,sx,sy,frag_size) { this._shatterSprites[i] = new Sprite(this.bitmap); var l = Math.floor((frag_size * i) / pw); var x = (frag_size * i) - (l * pw); var y = Math.floor((l * frag_size)); var y3 = Math.floor((l * frag_size)); if (y >= ph - frag_size) {y = ph - frag_size}; var sx2 = sx + x var sy2 = Math.floor(sy + y) this._shatterSprites[i].x = x; this._shatterSprites[i].y = y; this._shatterSprites[i].setFrame(sx2,sy2,frag_size,frag_size); this._shatterField.addChild(this._shatterSprites[i]); this._shatterSprites[i].an = [0,0,0]; }; //============================== // * Mode //============================== Sprite_Character.prototype.mode = function() { return this._character._shatter[5]; }; //============================== // * set Shatter Animation //============================== Sprite_Character.prototype.setShatterAnimation = function(i) { this._character._shatter[1][i] = []; var x = this._character._shatter[3]; var y = this._character._shatter[4]; if (this.mode() === 1) { var sx = Math.random() * Math.abs(x) + 0.1; var sy = Math.random() * Math.abs(y) + 0.1; var r = Math.randomInt(2); sx = r === 0 ? sx : -sx; var r = Math.randomInt(2); sy = r === 0 ? sy : -sy; } else if (this.mode() === 2) { var sx = Math.random() * Math.abs(x) + 0.1; var sy = Math.random() * Math.abs(y) + 0.1; var r = Math.randomInt(2); sx = r === 0 ? sx : -sx; } else { var sx = Math.random() * Math.abs(x) + 0.1; var sy = Math.random() * Math.abs(y) + 0.1; sx = this._character._shatter[3] >= 0 ? sx : -sx; sy = this._character._shatter[4] >= 0 ? sy : -sy; }; this._shatterSprites[i].sx = sx; this._shatterSprites[i].sy = sy; this._shatterSprites[i].op = (Math.random() * 2) + 1.0; this._shatterSprites[i].sc = 0; this._shatterSprites[i].rt = 0; }; //============================== // * Load Shatter Data //============================== Sprite_Character.prototype.loadShatterData = function(i) { this._shatterSprites[i].x = this._character._shatter[1][i].x; this._shatterSprites[i].y = this._character._shatter[1][i].y; this._shatterSprites[i].scale.x = this._character._shatter[1][i].scaleX; this._shatterSprites[i].scale.y = this._character._shatter[1][i].scaleY; this._shatterSprites[i].sc = this._character._shatter[1][i].sc; this._shatterSprites[i].rotation = this._character._shatter[1][i].rotation; this._shatterSprites[i].opacity = this._character._shatter[1][i].opacity; this._shatterSprites[i].sx = this._character._shatter[1][i].sx; this._shatterSprites[i].sy = this._character._shatter[1][i].sy; this._shatterSprites[i].op = this._character._shatter[1][i].op; this._shatterSprites[i].rt = this._character._shatter[1][i].rt; this._shatterSprites[i].an = this._character._shatter[1][i].an; }; //============================== // * Update Shatter Sprites //============================== Sprite_Character.prototype.updateShatterSprites = function(sprite,index) { sprite.an[0]++; if (this._character._shatter[5] === 2) { if (sprite.an[0] < 60) { sprite.x += sprite.sx; sprite.y -= sprite.sy; } else if (sprite.an[0] < 450) { sprite.x += sprite.sx; sprite.y += sprite.sy * 1.2; }; } else { 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; }; //============================== // * Save Shatter Data //============================== Sprite_Character.prototype.saveShatterData = function(sprite,index) { this._character._shatter[1] = []; for (var i = 0; i < this._shatterSprites.length; i++) { var sprite = this._shatterSprites[i] this._character._shatter[1][i] = {}; this._character._shatter[1][i].x = sprite.x; this._character._shatter[1][i].y = sprite.y; this._character._shatter[1][i].scaleX = sprite.scale.x; this._character._shatter[1][i].scaleY = sprite.scale.y; this._character._shatter[1][i].opacity = sprite.opacity; this._character._shatter[1][i].sx = sprite.sx; this._character._shatter[1][i].sy = sprite.sy; this._character._shatter[1][i].op = sprite.op; this._character._shatter[1][i].sc = sprite.sc; this._character._shatter[1][i].rotation = sprite.rotation; this._character._shatter[1][i].rt = sprite.rt; this._character._shatter[1][i].an = sprite.an; }; }; //============================================================================= // ■■■ Scene Map ■■■ //============================================================================= //============================== // ♦ ALIAS ♦ Terminate //============================== var _mog_charShatter_scMap_terminate = Scene_Map.prototype.terminate; Scene_Map.prototype.terminate = function() { if (this._spriteset) {this._spriteset.recordShatterData()}; _mog_charShatter_scMap_terminate.call(this); }; //============================== // ♦ ALIAS ♦ update //============================== var _mog_charShatter_scMap_update = Scene_Map.prototype.update; Scene_Map.prototype.update = function() { _mog_charShatter_scMap_update.call(this); $gameTemp._forceSkipShatter = false; }; //============================================================================= // ■■■ Spriteset Map ■■■ //============================================================================= //============================== // * Record Shatter Data //============================== Spriteset_Map.prototype.recordShatterData = function() { for (var i = 0; i < this._characterSprites.length; i++) { var sprite = this._characterSprites[i]; if (sprite._shatterSprites) {sprite.saveShatterData() } else {sprite._character._shatter[1] = []}; } };