brainwashing-school/js/plugins/MOG_TrPopUpBattle.js
2025-05-30 08:36:40 -05:00

370 lines
No EOL
12 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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