Fix mega evo indicator priority on lvl-up-box

This commit is contained in:
DizzyEggg 2019-08-05 12:15:15 +02:00
parent 2c2b807a57
commit 9823d2bdf1
2 changed files with 19 additions and 4 deletions

View File

@ -6045,6 +6045,17 @@ static void atk6B_atknameinbuff1(void)
gBattlescriptCurrInstr++;
}
// Because the indicator must have priority 0 to be properly displayed on healthbox, it needs to be temporarily changed while displaying lvl-up-box.
static void ChangeMegaIndicatorsPriority(u32 priority)
{
s32 i;
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
if (gBattleStruct->mega.indicatorSpriteIds[i] != 0xFF)
gSprites[gBattleStruct->mega.indicatorSpriteIds[i]].oam.priority = priority;
}
}
static void atk6C_drawlvlupbox(void)
{
if (gBattleScripting.atk6C_state == 0)
@ -6075,6 +6086,7 @@ static void atk6C_drawlvlupbox(void)
SetBgAttribute(1, BG_ATTR_PRIORITY, 0);
ShowBg(0);
ShowBg(1);
ChangeMegaIndicatorsPriority(1);
HandleBattleWindow(0x12, 7, 0x1D, 0x13, WINDOW_x80);
gBattleScripting.atk6C_state = 4;
break;
@ -6127,6 +6139,7 @@ static void atk6C_drawlvlupbox(void)
case 10:
if (!IsDma3ManagerBusyWithBgCopy())
{
ChangeMegaIndicatorsPriority(0);
SetBgAttribute(0, BG_ATTR_PRIORITY, 0);
SetBgAttribute(1, BG_ATTR_PRIORITY, 1);
ShowBg(0);

View File

@ -5750,7 +5750,7 @@ static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType,
}
// sandstorm sp.def boost for rock types
if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SANDSTORM_ANY && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ROCK) && !usesDefStat)
if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ROCK) && WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SANDSTORM_ANY && !usesDefStat)
MulModifier(&modifier, UQ_4_12(1.5));
return ApplyModifier(modifier, defStat);
@ -6170,10 +6170,12 @@ bool32 CanMegaEvolve(u8 battlerId)
mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]];
itemId = GetMonData(mon, MON_DATA_HELD_ITEM);
if (itemId != ITEM_ENIGMA_BERRY)
holdEffect = ItemId_GetHoldEffect(itemId);
else
if (USE_BATTLE_DEBUG && gBattleStruct->debugHoldEffects[battlerId])
holdEffect = gBattleStruct->debugHoldEffects[battlerId];
else if (itemId == ITEM_ENIGMA_BERRY)
holdEffect = gEnigmaBerries[battlerId].holdEffect;
else
holdEffect = ItemId_GetHoldEffect(itemId);
if (holdEffect != HOLD_EFFECT_MEGA_STONE)
return FALSE;