brainwashing-school/js/plugins/MOG_TrPopUpBattle.js
2025-02-25 10:53:19 -06:00

412 lines
13 KiB
JavaScript

//=============================================================================
// MOG_TrPopUpBattle.js
//=============================================================================
/*:
* @target MZ
* @plugindesc (v1.0) Apresenta os ícones dos tesouros após o inimigo morrer.
* @author Moghunter
* @url https://mogplugins.wordpress.com
*
* @param Drop Item Real Time
* @desc Ganhar o item em tempo real.
* @type boolean
* @default true
*
* @param Animation Type
* @desc Tipo de animação.
* 0 - Bouncing 1 - Floating
* @type select
* @default 0
* @option Bouncing
* @value 0
* @option Floating
* @value 1
*
* @param Fade Duration
* @desc Tempo para fazer o item desaparecer.
* @type number
* @default 20
* @min 5
*
* @param Scale
* @desc Tamanho do ícone do tesouro.
* @default 0.8
*
* @help
* =============================================================================
* ♦♦♦ MOG Treasure PopUp Battle ♦♦♦
* Author - Moghunter
* Version - 1.0
* Updated - 2021/04/04
* https://mogplugins.wordpress.com
* =============================================================================
* Apresenta os ícones dos tesouros após o inimigo morrer.
*
*/
//=============================================================================
// ** PLUGIN PARAMETERS
//=============================================================================
var Imported = Imported || {};
Imported.MOG_TrPopUpBattle = true;
var Moghunter = Moghunter || {};
Moghunter.parameters = PluginManager.parameters("MOG_TrPopUpBattle");
Moghunter.trPopup_animation = Number(
Moghunter.parameters["Animation Type"] || 0
);
Moghunter.trPopup_scale = Number(Moghunter.parameters["Scale"] || 0.8);
Moghunter.trPopup_fadeDuration = Number(
Moghunter.parameters["Fade Duration"] || 20
);
Moghunter.trPopup_dropRealTime = String(
Moghunter.parameters["Drop Item Real Time"] || "false"
);
//=============================================================================
// ■■■ Game Temp ■■■
//=============================================================================
//==============================
// ♦ ALIAS ♦ Initialize
//==============================
var _mog_trPopBattle_tempInitialize = Game_Temp.prototype.initialize;
Game_Temp.prototype.initialize = function () {
_mog_trPopBattle_tempInitialize.call(this);
this._trBatNeedPopUp = false;
this._trBatRealTimeDrop =
String(Moghunter.trPopup_dropRealTime) == "true" ? true : false;
this._trBatDropLock = false;
};
//=============================================================================
// ■■■ Game Temp ■■■
//=============================================================================
//==============================
// ♦ ALIAS ♦ initMembers
//==============================
var _mog_trPopBattle_gEnemy_initMembers = Game_Enemy.prototype.initMembers;
Game_Enemy.prototype.initMembers = function () {
_mog_trPopBattle_gEnemy_initMembers.call(this);
this._treasure = {};
this._treasure.needPopup = false;
this._treasure.checked = false;
this._treasure.item = [];
};
//==============================
// ♦ OVERWRITE ♦ make Drop Items
//==============================
Game_Enemy.prototype.makeDropItems = function () {
if (this._treasure.checked) {
return this._treasure.item;
} else {
const rate = this.dropItemRate();
return this.enemy().dropItems.reduce((r, di) => {
if (di.kind > 0 && Math.random() * di.denominator < rate) {
return r.concat(this.itemObject(di.kind, di.dataId));
} else {
return r;
}
}, []);
}
};
//=============================================================================
// ■■■ Battle Manager ■■■
//=============================================================================
//==============================
// ♦ ALIAS ♦ gain Drop Items
//==============================
var _mog_BMangr_gainDropItems = BattleManager.gainDropItems;
BattleManager.gainDropItems = function () {
if ($gameTemp._trBatDropLock) {
return;
}
_mog_BMangr_gainDropItems.call(this);
};
//=============================================================================
// ■■■ Scene Map ■■■
//=============================================================================
//==============================
// ♦ ALIAS ♦ Initialize
//==============================
var _mog_trPopup_scMap_initialize = Scene_Map.prototype.initialize;
Scene_Map.prototype.initialize = function () {
$gameTemp._trBatDropLock = false;
_mog_trPopup_scMap_initialize.call(this);
};
//=============================================================================
// ■■■ Sprite Enemy ■■■
//=============================================================================
//==============================
// ♦ ALIAS ♦ Update Collapse
//==============================
var _mog_trPopBattle_sprEnemy_updateCollapse =
Sprite_Enemy.prototype.updateCollapse;
Sprite_Enemy.prototype.updateCollapse = function () {
_mog_trPopBattle_sprEnemy_updateCollapse.call(this);
if (this._effectDuration === 0 && !this._enemy._treasure.checked) {
this.checkTreasurePopup();
}
};
//==============================
// ♦ ALIAS ♦ Update Boss Collapse
//==============================
var _mog_trPopBattle_sprEnemy_updateBossCollapse =
Sprite_Enemy.prototype.updateBossCollapse;
Sprite_Enemy.prototype.updateBossCollapse = function () {
_mog_trPopBattle_sprEnemy_updateBossCollapse.call(this);
if (this._effectDuration === 0 && !this._enemy._treasure.checked) {
this.checkTreasurePopup();
}
};
//==============================
// ♦ ALIAS ♦ Update Instant Collapse
//==============================
var _mog_trPopBattle_sprEnemy_updateInstantCollapse =
Sprite_Enemy.prototype.updateInstantCollapse;
Sprite_Enemy.prototype.updateInstantCollapse = function () {
_mog_trPopBattle_sprEnemy_updateInstantCollapse.call(this);
if (this._effectDuration === 0 && !this._enemy._treasure.checked) {
this.checkTreasurePopup();
}
};
//==============================
// * check Treasure Popup
//==============================
Sprite_Enemy.prototype.checkTreasurePopup = function () {
this._enemy._treasure.item = this._enemy.makeDropItems();
this._enemy._treasure.checked = true;
if (this._enemy._treasure.item) {
this._enemy._treasure.needPopup = true;
$gameTemp._trBatNeedPopUp = true;
}
};
//=============================================================================
// ■■■ Spriteset Battle ■■■
//=============================================================================
//==============================
// ♦ ALIAS ♦ update
//==============================
var _mog_trPopupBat_sprBat_update = Spriteset_Battle.prototype.update;
Spriteset_Battle.prototype.update = function () {
_mog_trPopupBat_sprBat_update.call(this);
if ($gameTemp._trBatNeedPopUp) {
this.treasurePopupR();
}
};
//==============================
// * treasurePopupR
//==============================
Spriteset_Battle.prototype.treasurePopupR = function () {
$gameTemp._trBatNeedPopUp = false;
if (!this._enemiesTreasure) {
this._enemiesTreasure = [];
}
for (var i = 0; i < this._enemySprites.length; i++) {
if (
this._enemySprites[i]._enemy &&
this._enemySprites[i]._enemy._treasure.needPopup
) {
this._enemySprites[i]._enemy._treasure.needPopup = false;
this._enemiesTreasure[i] = new SpriteEnemyTrP(this._enemySprites[i]);
this._enemiesTreasure[i].z = this._enemySprites[i].z
? this._enemySprites[i].z + 1
: 2;
this._battleField.addChild(this._enemiesTreasure[i]);
}
}
};
//=============================================================================
// ■■■ Sprite Enemy TrP ■■■
//=============================================================================
function SpriteEnemyTrP() {
this.initialize.apply(this, arguments);
}
SpriteEnemyTrP.prototype = Object.create(Sprite.prototype);
SpriteEnemyTrP.prototype.constructor = SpriteEnemyTrP;
//==============================
// ♦ ALIAS ♦ Initialize
//==============================
SpriteEnemyTrP.prototype.initialize = function (sprite) {
Sprite.prototype.initialize.call(this);
this._sprite = sprite;
this._mode = Moghunter.trPopup_animation;
this.visible = false;
this._enemy = this._sprite._enemy;
this.createIcon();
if ($gameTemp._trBatRealTimeDrop) {
$gameTemp._trBatDropLock = true;
this.gainDropItemsIcons();
}
};
//==============================
// * gainDropItems
//==============================
SpriteEnemyTrP.prototype.gainDropItemsIcons = function () {
const items = this._enemy._treasure.item;
for (const item of items) {
$gameParty.gainItem(item, 1);
}
};
//==============================
// * create Icon
//==============================
SpriteEnemyTrP.prototype.createIcon = function () {
this._iconImg = ImageManager.loadSystem("IconSet");
this._icons = [];
for (var i = 0; i < this._enemy._treasure.item.length; i++) {
var item = this._enemy._treasure.item[i];
if (item) {
this._icons[i] = new Sprite(this._iconImg);
this._icons[i].item = item;
this._icons[i].index = i;
this._icons[i].anchor.x = 0.5;
this._icons[i].anchor.y = 1;
this.refreshIcons(this._icons[i]);
this.addChild(this._icons[i]);
}
}
this._icons.sort(function (a, b) {
return b.intY - a.intY;
});
this.children.sort(function (a, b) {
return b.intY - a.intY;
});
for (var i = 0; i < this._icons.length; i++) {
this.refreshWait(this._icons[i], i, this._icons.length);
}
};
//==============================
// * refresh Wait
//==============================
SpriteEnemyTrP.prototype.refreshWait = function (sprite, index, maxv) {
var mv = maxv * 20;
var mvt = mv - 20 * index;
sprite.wait = Moghunter.trPopup_fadeDuration + mvt;
};
//==============================
// * refresh Icons
//==============================
SpriteEnemyTrP.prototype.refreshIcons = function (sprite) {
var w = ImageManager.iconWidth;
var h = ImageManager.iconHeight;
var iconindex = sprite.item.iconIndex;
var sx = (iconindex % 16) * w;
var sy = Math.floor(iconindex / 16) * h;
var hr = Math.randomInt(h);
sprite.setFrame(sx, sy, w, h);
sprite.intY = this._sprite.height / 3 + hr - h;
sprite.dr = 60;
sprite.dy = 15;
sprite.y = -40;
sprite.ry = sprite.y + sprite.intY;
var randx = Math.random() * 0.5 + sprite.index / 8;
var rands = Math.randomInt(2);
sprite.sx = rands === 0 ? randx : -randx;
sprite.scale.x = Moghunter.trPopup_scale;
sprite.scale.y = sprite.scale.x;
};
//==============================
// * Update Bounce
//==============================
SpriteEnemyTrP.prototype.updateBounce = function (sprite) {
sprite.dy += 0.6;
sprite.ry += sprite.dy;
if (sprite.ry >= 0) {
sprite.ry = 0;
sprite.dy *= -0.7;
}
sprite.y = -sprite.intY + Math.round(sprite.ry);
if (sprite.y < -sprite.intY) {
sprite.x += sprite.sx;
}
if (sprite.y === -sprite.intY) {
this.updateFade(sprite);
}
};
//==============================
// * Update Float
//==============================
SpriteEnemyTrP.prototype.updateFloat = function (sprite) {
sprite.wait--;
if (sprite.wait > 0) {
return;
}
sprite.y -= 3;
sprite.opacity -= 8;
};
//==============================
// * Update Animation
//==============================
SpriteEnemyTrP.prototype.updateAnimation = function (sprite) {
if (this._mode === 1) {
this.updateFloat(sprite);
} else {
this.updateBounce(sprite);
}
};
//==============================
// * Update Fade
//==============================
SpriteEnemyTrP.prototype.updateFade = function (sprite) {
sprite.wait--;
if (sprite.wait > 0) {
return;
}
sprite.opacity -= 15;
sprite.scale.x -= 0.05;
sprite.scale.y += 0.15;
};
//==============================
// * Update Sprites
//==============================
SpriteEnemyTrP.prototype.updateSprites = function (sprite) {
this.visible = true;
this.updateAnimation(sprite);
if (sprite.opacity <= 0) {
sprite.visible = false;
}
};
//==============================
// * Update
//==============================
SpriteEnemyTrP.prototype.update = function () {
Sprite.prototype.update.call(this);
this.x = this._sprite.x;
this.y = this._sprite.y;
if (this._iconImg.isReady()) {
for (var i = 0; i < this._icons.length; i++) {
if (this._icons[i].visible) {
this.updateSprites(this._icons[i]);
}
}
}
};