//============================================================================= // MOG_CollapseEffects.js //============================================================================= /*: * @target MZ * @plugindesc (v1.0) Adiciona efeitos de colapsos animados. * @author Moghunter * @url https://mogplugins.wordpress.com * * @param Default Collapse * @desc Definição do colapso padrão; * (0 a 9) (-1 = No Effect / -2 = Random Effects) * @default 1 * @type select * @option Shatter Effect 1 (Horizontal) * @value 0 * @option Shatter Effect 2 (Vertical) * @value 1 * @option Shatter Effect 3 (Stripes / Horizontal / Vertical) * @value 2 * @option Shatter Effect 4 (Stripes / Vertical) * @value 3 * @option Fade + Horizontal Zoom (Melting) * @value 4 * @option Fade + Vertical Zoom * @value 5 * @option Fade + Horizontal + Vertical Zoom * @value 6 * @option Fade + Rotation * @value 7 * @option Horizontal Slice * @value 8 * @option Vetical Slice * @value 9 * @option Random * @value -2 * @option No Effect * @value -1 * * @param Shatter Direction * @desc Definição da direção do Collapso no modo 0; * (Left / Right) * @default Left * @type select * @option Left * @value Left * @option Right * @value Right * * @help * ============================================================================= * ♦♦♦ MOG - Collapse Effects ♦♦♦ +++ * Author - Moghunter * Version - 1.0 * Updated - 2021/04/05 * https://mogplugins.wordpress.com * ============================================================================= * Adiciona efeitos de colapsos animados. * * ============================================================================= * - COLLAPSE EFFECT (SKILL & ENEMY) * ============================================================================= * Para forçar um efeito use use as tags abaixo na caixa de notas do inimigo * ou SKILLs. * * Collapse Motion : EFFECT_ID * * EFFECT ID = Tipo de efeito(0 a 10) * 0 - Shatter Effect (Particles + Side Animation) * 1 - Shatter Effect (Particles) * 2 - Shatter Effect (Stripes + Wave) * 3 - Shatter Effect (Stripes) * 4 - Fade + Horizontal Zoom. * 5 - Fade + Vertical Zoom. * 6 - Fade + Horizontal + Vertical Zoom. * 7 - Fade + Rotation. * 8 - Horizontal Slice. * 9 - Vetical Slice. * * ============================================================================= * - ANIMATION (SKILL & ENEMY) * ============================================================================= * Para forçar uma animação use use as tags abaixo na caixa de notas do inimigo * ou SKILLs. * * Collapse Animation : ANIMATION_ID * * ANIMATION_ID = Definição da ID da animação do banco de dados. * */ /*:ja * @target MZ * @plugindesc (v1.0) 消滅エフェクトのアニメーションを拡張します。 * @author Moghunter * @url https://raw.githubusercontent.com/harizumi/Moghunter-MZ-jp/main/MOG_CollapseEffects.js * * @param Default Collapse * @text デフォルトの消滅エフェクト * @desc 0から9 (-1 = なし / -2 = ランダム) * @default 1 * @type select * @option 粉砕(粒子化 + サイドアニメーション) * @value 0 * @option 粉砕(粒子化) * @value 1 * @option 粉砕(ストライプ + ウェーブ) * @value 2 * @option 粉砕(ストライプ) * @value 3 * @option フェード+水平ズーム * @value 4 * @option フェード+垂直ズーム * @value 5 * @option フェード+水平+垂直ズーム * @value 6 * @option フェード+回転 * @value 7 * @option 水平スライス * @value 8 * @option 垂直スライス * @value 9 * @option ランダム * @value -2 * @option なし * @value -1 * * @param Shatter Direction * @text モード0での粉砕方向 * @desc 左 / 右 * @default 左 * @type select * @option 左 * @value Left * @option 右 * @value Right * * @help * 翻訳: * https://fungamemake.com/ * * =========================================================================== * ♦♦♦ MOG - Collapse Effects ♦♦♦ +++ * Author - Moghunter * Version - 1.0 * Updated - 2021/04/05 * https://mogplugins.wordpress.com * =========================================================================== * 消滅エフェクトのアニメーションを拡張します。 * * =========================================================================== * - 消滅エフェクト (スキル & 敵) * =========================================================================== * エフェクトの設定は、スキル/敵のメモ欄に以下のタグを使用してください。 * * Collapse Effect: EFFECT_ID * * EFFECT ID = エフェクトのタイプ (0 から 10) * 0 - 粉砕 (粒子化 + サイドアニメーション) * 1 - 粉砕 (粒子化) * 2 - 粉砕 (ストライプ + ウェーブ) * 3 - 粉砕 (ストライプ) * 4 - フェード + 水平ズーム * 5 - フェード + 垂直ズーム * 6 - フェード + 水平 + 垂直ズーム * 7 - フェード + 回転 * 8 - 水平スライス * 9 - 垂直スライス * * =========================================================================== * - アニメーション (スキル & 敵) * =========================================================================== * アニメーションの設定は、スキル/敵のメモ欄に以下のタグを使用してください。 * * Collapse Animation: ANIMATION_ID * * ANIMATION_ID = データベースのアニメーションID * */ //============================================================================= // ** PLUGIN PARAMETERS //============================================================================= var Imported = Imported || {}; Imported.MOG_CollapseEffects = true; var Moghunter = Moghunter || {}; Moghunter.parameters = PluginManager.parameters('MOG_CollapseEffects'); Moghunter.collShatterDirection = String(Moghunter.parameters['Shatter Direction'] || "Left"); Moghunter.collDefaultCollapse = Number(Moghunter.parameters['Default Collapse'] || 0); //============================================================================= // ■■■ Game Battler ■■■ //============================================================================= //============================== // ♦ ALIAS ♦ initMembers //============================== var _mog_cefc_gbat_initMembers = Game_Battler.prototype.initMembers; Game_Battler.prototype.initMembers = function () { _mog_cefc_gbat_initMembers.call(this); this._collpaseData = [-1, -1]; }; //============================== // * Notetags //============================== Game_Battler.prototype.notetags = function () { if (this.isEnemy()) { return this.enemy().note.split(/[\r\n]+/) }; if (this.isActor()) { return this.actor().note.split(/[\r\n]+/) }; }; //============================== // ♦ ALIAS ♦ Perform Collapse //============================== var _mog_colefct_gbattler_performCollapse = Game_Battler.prototype.performCollapse; Game_Battler.prototype.performCollapse = function () { _mog_colefct_gbattler_performCollapse.call(this); if (this.isEnemy()) { this.checkCollapseEffect() }; }; //============================== // * Check Collapse Effect //============================== Game_Battler.prototype.checkCollapseEffect = function () { const animationID = this._collpaseData[1]; if (animationID > 0) { $gameTemp.requestAnimation([this], animationID, true); this._collpaseData[0] = -1; this.performCollapseSoundMG() }; if (this._collpaseData[0] == -1) { this.setDefaultCollapse() }; }; //============================== // * set Default Collapse //============================== Game_Battler.prototype.setDefaultCollapse = function () { var coltype = Math.min(Math.max(Number(Moghunter.collDefaultCollapse), -2), 9); if (coltype === -1) { this.performCollapseSoundMG(); return; }; if (coltype === -2) { this._collpaseData[0] = Math.randomInt(7); } else { this._collpaseData[0] = coltype; }; }; //============================== // * perform Collapse Sound //============================== Game_Battler.prototype.performCollapseSoundMG = function () { switch (this.collapseType()) { case 0: SoundManager.playEnemyCollapse(); break; case 1: SoundManager.playBossCollapse1(); break; }; }; //============================== // * Load Collapse Notetags //============================== Game_Battler.prototype.loadCollapseNotetags = function () { this.notetags().forEach(function (note) { var note_data = note.split(' : ') if (note_data[0].toLowerCase() == "collapse motion") { var effect = Math.min(Math.max(Number(note_data[1]), 0), 9); this._collpaseData[0] = effect; } else if (note_data[0].toLowerCase() == "collapse animation") { var animation_id = Math.min(Math.max(Number(note_data[1]), 0), 2000); this._collpaseData[1] = animation_id; }; }, this); if (this._collpaseData[1] > 0) { this._collpaseData[0] = -1 }; }; //============================================================================= // ■■■ Game Enemy ■■■ //============================================================================= //============================== // ♦ ALIAS ♦ Setup //============================== var _mog_coleft_genmy_setup = Game_Enemy.prototype.setup; Game_Enemy.prototype.setup = function (enemyId, x, y) { _mog_coleft_genmy_setup.call(this, enemyId, x, y); this.loadCollapseNotetags(); }; //============================== // * perform Collapse *Overwrite //============================== Game_Enemy.prototype.performCollapse = function () { Game_Battler.prototype.performCollapse.call(this); switch (this.collapseType()) { case 0: this.requestEffect('collapse'); break; case 1: this.requestEffect('bossCollapse'); break; case 2: this.requestEffect('instantCollapse'); break; } }; //============================================================================= // ■■■ Game Action ■■■ //============================================================================= //============================== // ♦ ALIAS ♦ Apply //============================== var _alias_mog_colefct_gaction_apply = Game_Action.prototype.apply; Game_Action.prototype.apply = function (target) { _alias_mog_colefct_gaction_apply.call(this, target); if (target.isDead() && this._item) { if (target.isEnemy()) { this.setCollapseEffect(target) }; }; }; //============================== // * Set Collapse Effect //============================== Game_Action.prototype.setCollapseEffect = function (target) { if (!this._item || !this._item.object()) { return }; var item_notes = this._item.object().note.split(/[\r\n]+/); item_notes.forEach(function (note) { var note_data = note.split(' : ') if (note_data[0].toLowerCase() == "collapse motion") { var effect = Math.min(Math.max(Number(note_data[1]), 0), 10); target._collpaseData[0] = effect; } else if (note_data[0].toLowerCase() == "collapse animation") { var animation_id = Math.min(Math.max(Number(note_data[1]), 0), 2000); target._collpaseData[1] = animation_id; }; }, this); if (target._collpaseData[1] > 0) { target._collpaseData[0] = -1 }; }; //============================================================================= // ■■■ Sprite Enemy ■■■ //============================================================================= //============================== // ♦ ALIAS ♦ set Battler //============================== var _mog_colefct_sprEnemy_setBattler = Sprite_Enemy.prototype.setBattler; Sprite_Enemy.prototype.setBattler = function (battler) { _mog_colefct_sprEnemy_setBattler.call(this, battler) if (this.isEnemyP()) { this._colpsBitmap = this.bitmap }; }; //============================== // ♦ ALIAS ♦ Update //============================== var _mog_cefc_sprtenemy_update = Sprite_Enemy.prototype.update; Sprite_Enemy.prototype.update = function () { _mog_cefc_sprtenemy_update.call(this); if (this._spriteCol != null) { this.setFrame(0, 0, 0, 0) }; }; //============================== // ♦ ALIAS ♦ update Collapse //============================== var _mog_cefc_sprtenmy_updateCollapse = Sprite_Enemy.prototype.updateCollapse; Sprite_Enemy.prototype.updateCollapse = function () { if (this._battler._collpaseData[0] != -1 && this._battler._collpaseData[1] <= 0) { this.updateCollapseEffects(); return }; _mog_cefc_sprtenmy_updateCollapse.call(this) }; //============================================================================= // ■■■ Sprite Battler ■■■ //============================================================================= //============================== // ♦ ALIAS ♦ init Members //============================== var _mog_sprtBat_initMembers = Sprite_Battler.prototype.initMembers; Sprite_Battler.prototype.initMembers = function () { _mog_sprtBat_initMembers.call(this); this._collEffectWait = 0; }; //============================== // * is Enemy P //============================== Sprite_Battler.prototype.isEnemyP = function () { if (!this._battler) { return false }; if (!Imported.MOG_EnemyPoses) { return false }; if (!this._battler.isBPose()) { return false }; return true; }; //============================== // * collapse Type //============================== Sprite_Battler.prototype.collapseType = function () { return this._battler._collpaseData[0]; }; //============================== // * Record Pre Collapse //============================== Sprite_Battler.prototype.recordPreCollapse = function () { this._collData = [0, this.width, this.height, this.rotation, this.scale.x, this.scale.y]; }; //============================== // * load Pre Collapse //============================== Sprite_Battler.prototype.loadPreCollapse = function () { this.rotation = this._collData[3]; this.scale.x = this._collData[4]; this.scale.y = this._collData[5]; this.setFrame(0, 0, this._collData[1], this._collData[2]); }; //============================== // * remove Collapse Effects //============================== Sprite_Battler.prototype.removeCollapseEffects = function () { this._effectDuration = 0; this.filters = null; if (this._spriteCol) { for (var i = 0; i < this._spriteCol.length; i++) { this.removeChild(this._spriteCol[i]); this._spriteCol[i] = null; }; }; this.loadPreCollapse(); this.revertToNormal(); this.opacity = 0; this._collData = null; this._spriteCol = null; this._collapseMode = false; }; //============================== // * setup Collapse Effects //============================== Sprite_Battler.prototype.setupCollapseEffect = function () { if (Imported.MOG_BattlerMotion && this._battler) { this._battler.clearBdamage(0) }; if (this._stateIconSprite) { this._stateIconSprite.visible = false }; if (this.collapseType() < 4 || this.collapseType() > 7) { if (this._colpsBitmap) { this.bitmap = this._colpsBitmap; }; } else { this._collapseMode = true; }; this._effectDuration = 400; this._collEffectWait = 1; if (Imported.MOG_FlashDamage) { this._collEffectWait = $gameTemp._flashDamage ? 22 : 1; }; this.recordPreCollapse(); if (this.collapseType() == -1) { } else if (this.collapseType() <= 1) { this.setupColShatterPoint(); } else if (this.collapseType() === 2 || this.collapseType() === 3) { this.setupColShatterLine(); } else if (this.collapseType() === 4 || this.collapseType() === 5 || this.collapseType() === 6 || this.collapseType() === 7) { this.setupColFadeZoom(); } else if (this.collapseType() === 8) { this.setupColSliceHorz(); } else if (this.collapseType() === 9) { this.setupColSliceVert(); } else if (this.collapseType() === 10) { this.setupColStone(); }; }; //============================== // * setColSpritePar //============================== Sprite_Battler.prototype.setColSpritePar = function (sprite) { sprite.anchor.x = this.anchor.x; sprite.anchor.y = this.anchor.y; sprite.width = this.width; sprite.height = this.height; sprite.scale.x = 1.00; sprite.scale.y = 1.00; sprite.rotation = this.rotation; }; //============================== // * setup Coll Shatter Point //============================== Sprite_Battler.prototype.setupColShatterPoint = function () { this._spriteCol = []; this._shatterDCol = String(Moghunter.collShatterDirection) == "Left" ? 0 : 1; var w = this.isEnemyP() ? this.bitmap.width / 4 : this.width; var fz = 32; var x2 = this.isEnemyP() ? w * 3 : 0; var frag_size = Math.floor((this.height + w) / 40); var xi = Math.floor(-w / 2) + Math.floor(frag_size / 2); var yi = Math.floor(-this.height + frag_size); var f = 0 for (var i = 0; i >= 0; i++) { this._spriteCol[i] = new Sprite(this.bitmap); this.setColSpritePar(this._spriteCol[i]); this._spriteCol[i].sx = (Math.random() * 0.5) + 1 this._spriteCol[i].op = (Math.random() * 2) + 2.5; var x = Math.floor(i % fz) * frag_size var y = Math.floor(i / fz) * frag_size; this._spriteCol[i].x = xi + x; this._spriteCol[i].y = yi + y; this._spriteCol[i].setFrame(x + x2, y, frag_size, frag_size); this.addChild(this._spriteCol[i]); if (this._spriteCol[i].y > 0) { break }; }; }; //============================== // * update Collapse Shatter Point //============================== Sprite_Battler.prototype.updateCollapseShatterPoint = function () { var coldone = true; for (var i = 0; i < this._spriteCol.length; i++) { if (this.collapseType() === 0) { if (this._shatterDCol === 0) { this._spriteCol[i].x -= this._spriteCol[i].sx; } else { this._spriteCol[i].x += this._spriteCol[i].sx; }; }; this._spriteCol[i].y -= this._spriteCol[i].sx; this._spriteCol[i].opacity -= this._spriteCol[i].op; if (this._spriteCol[i].opacity > 0) { coldone = false }; }; if (coldone) { this.removeCollapseEffects() }; }; //============================== // * setup Coll Shatter Line //============================== Sprite_Battler.prototype.setupColShatterLine = function () { var w = this.isEnemyP() ? this.bitmap.width / 4 : this.width; var fz = 32; var x2 = this.isEnemyP() ? w * 3 : 0; this._spriteCol = []; var frag_size = 6; var xi = Math.floor(-w / 2) + Math.floor(frag_size / 2); var yi = Math.floor(-this.height + frag_size) for (var i = 0; i >= 0; i++) { this._spriteCol[i] = new Sprite(this.bitmap); this.setColSpritePar(this._spriteCol[i]); this._spriteCol[i].sx = (Math.random() * 0.5) + 1 - (i * 0.01); this._spriteCol[i].op = (Math.random() * 2) + 2.5; var y = Math.floor(i * frag_size); this._spriteCol[i].y = yi + y; this._spriteCol[i].setFrame(x2, y, this.width, frag_size); this.addChild(this._spriteCol[i]); if (this._spriteCol[i].y > 0) { break }; }; }; //============================== // * update Collapse Shatter Line //============================== Sprite_Battler.prototype.updateCollapseShatterLine = function () { var coldone = true; var d = this.collapseType() === 2 ? 0 : null; for (var i = 0; i < this._spriteCol.length; i++) { if (d != null) { d = d === 0 ? 1 : 0; if (d === 0) { this._spriteCol[i].x -= this._spriteCol[i].sx; } else { this._spriteCol[i].x += this._spriteCol[i].sx; }; }; this._spriteCol[i].y -= this._spriteCol[i].sx this._spriteCol[i].opacity -= this._spriteCol[i].op if (this._spriteCol[i].opacity > 0) { coldone = false }; }; if (coldone) { this.removeCollapseEffects() }; }; //============================== // * setup Col Slice Horz //============================== Sprite_Battler.prototype.setupColSliceHorz = function () { var w = this.isEnemyP() ? this.bitmap.width / 4 : this.width; var fz = 32; var x2 = this.isEnemyP() ? w * 3 : 0; this._spriteCol = []; var frag_size = Math.floor(this.height / 2); var yi = Math.floor(-this.height + frag_size) for (var i = 0; i < 2; i++) { this._spriteCol[i] = new Sprite(this.bitmap); this.setColSpritePar(this._spriteCol[i]); var y = Math.floor(i * frag_size); this._spriteCol[i].y = yi + y; this._spriteCol[i].setFrame(x2, y, w, frag_size); this.addChild(this._spriteCol[i]); this._spriteCol[i].sx = Math.floor(frag_size / 2); this._spriteCol[i].sp = (this._spriteCol[i].sx / 40) + 0.01; }; }; //============================== // * update Collapse Slice Horz //============================== Sprite_Battler.prototype.updateCollapseSliceHorz = function () { var coldone = false; if (this._spriteCol[0].x >= this._spriteCol[0].sx) { this._spriteCol[0].opacity -= 5; this._spriteCol[1].opacity -= 5; if (this._spriteCol[0].opacity <= 0) { coldone = true; }; } else { this._spriteCol[0].x += this._spriteCol[0].sp; this._spriteCol[1].x -= this._spriteCol[1].sp; }; if (coldone) { this.removeCollapseEffects() }; }; //============================== // * setup Col Slice Vert //============================== Sprite_Battler.prototype.setupColSliceVert = function () { var w = this.isEnemyP() ? this.bitmap.width / 4 : this.width; var fz = 32; var x2 = this.isEnemyP() ? w * 3 : 0; this._spriteCol = []; var frag_size = Math.floor(w / 2); var xi = Math.floor(-w / 2) + Math.floor(frag_size / 2); for (var i = 0; i < 2; i++) { this._spriteCol[i] = new Sprite(this.bitmap); this.setColSpritePar(this._spriteCol[i]); var x = Math.floor(i * frag_size); this._spriteCol[i].x = xi + x; this._spriteCol[i].setFrame(x + x2, 0, frag_size, this.height); this.addChild(this._spriteCol[i]); this._spriteCol[i].sx = Math.floor(frag_size / 2); this._spriteCol[i].sp = (this._spriteCol[i].sx / 40) + 0.01; }; }; //============================== // * update Collapse Slice Vert //============================== Sprite_Battler.prototype.updateCollapseSliceVert = function () { var coldone = false; if (this._spriteCol[0].y >= this._spriteCol[0].sx) { this._spriteCol[0].opacity -= 5; this._spriteCol[1].opacity -= 5; if (this._spriteCol[0].opacity <= 0) { coldone = true; }; } else { this._spriteCol[0].y += this._spriteCol[0].sp; this._spriteCol[1].y -= this._spriteCol[1].sp; }; if (coldone) { this.removeCollapseEffects() }; }; //============================== // * setup Col Fade Zoom //============================== Sprite_Battler.prototype.setupColFadeZoom = function () { this._animeDuration = 0; }; //============================== // * update Col Fade Zoom //============================== Sprite_Battler.prototype.updateColFadeZoom = function () { this._animeDuration++; if (this.collapseType() === 4) { this.updateColFazeZoom1(); } else if (this.collapseType() === 5) { this.updateColFazeZoom2(); } else if (this.collapseType() === 6) { this.updateColFazeZoom3(); } else { this.updateColFazeZoom4(); }; if (this.scale.x < 0) { this.scale.x = 0 }; if (this.scale.y < 0) { this.scale.y = 0 }; if (this.opacity === 0) { this.removeCollapseEffects() }; }; //============================== // * update Col Fade Zoom1 //============================== Sprite_Battler.prototype.updateColFazeZoom1 = function () { this.scale.x += 0.03; this.scale.y -= 0.01; this.opacity -= 3; }; //============================== // * update Col Fade Zoom2 //============================== Sprite_Battler.prototype.updateColFazeZoom2 = function () { this.scale.x -= 0.01; this.scale.y += 0.03; this.opacity -= 3; }; //============================== // * update Col Fade Zoom3 //============================== Sprite_Battler.prototype.updateColFazeZoom3 = function () { if (this._animeDuration < 30) { this.scale.x += 0.08; this.scale.y -= 0.04; } else if (this._animeDuration < 120) { this.scale.x -= 0.10; this.scale.y += 0.15; this.opacity -= 5; }; }; //============================== // * update Col Fade Zoom4 //============================== Sprite_Battler.prototype.updateColFazeZoom4 = function () { this.scale.x -= 0.01; this.scale.y += 0.04; this.rotation -= 0.1; this.opacity -= 2; }; //============================== // * update Collapse Base //============================== Sprite_Battler.prototype.updateCollapseBase = function () { }; //============================== // * setup Col Stone //============================== Sprite_Battler.prototype.setupColStone = function () { }; //============================== // * update Collapse Stone //============================== Sprite_Battler.prototype.updateCollapseStone = function () { }; //============================== // * update Collapse Effects //============================== Sprite_Battler.prototype.updateCollapseEffects = function () { if (!this._collData) { this.setupCollapseEffect() }; if (this._collEffectWait > 0) { this._collEffectWait-- if (this._collEffectWait == 0) { this._battler.performCollapseSoundMG() } return; }; if (this.collapseType() == -1) { this.updateCollapseBase(); } else if (this.collapseType() <= 1) { this.updateCollapseShatterPoint(); } else if (this.collapseType() === 2 || this.collapseType() === 3) { this.updateCollapseShatterLine(); } else if (this.collapseType() === 4 || this.collapseType() === 5 || this.collapseType() === 6 || this.collapseType() === 7) { this.updateColFadeZoom(); } else if (this.collapseType() === 8) { this.updateCollapseSliceHorz(); } else if (this.collapseType() === 9) { this.updateCollapseSliceVert(); } else if (this.collapseType() === 10) { this.updateCollapseStone(); }; };