move overwrittenAbilities field to DisableStruct (#5946)
Co-authored-by: ghoulslash <pokevoyager0@gmail.com>
This commit is contained in:
parent
404b4daa7b
commit
401df8da4d
@ -139,6 +139,7 @@ struct DisableStruct
|
|||||||
u8 weatherAbilityDone:1;
|
u8 weatherAbilityDone:1;
|
||||||
u8 terrainAbilityDone:1;
|
u8 terrainAbilityDone:1;
|
||||||
u8 usedProteanLibero:1;
|
u8 usedProteanLibero:1;
|
||||||
|
u16 overwrittenAbility; // abilities overwritten during battle (keep separate from battle history in case of switching)
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ProtectStruct
|
struct ProtectStruct
|
||||||
@ -779,7 +780,6 @@ struct BattleStruct
|
|||||||
u8 effectsBeforeUsingMoveDone:1; // Mega Evo and Focus Punch/Shell Trap effects.
|
u8 effectsBeforeUsingMoveDone:1; // Mega Evo and Focus Punch/Shell Trap effects.
|
||||||
u8 spriteIgnore0Hp:1;
|
u8 spriteIgnore0Hp:1;
|
||||||
u8 targetsDone[MAX_BATTLERS_COUNT]; // Each battler as a bit.
|
u8 targetsDone[MAX_BATTLERS_COUNT]; // Each battler as a bit.
|
||||||
u16 overwrittenAbilities[MAX_BATTLERS_COUNT]; // abilities overwritten during battle (keep separate from battle history in case of switching)
|
|
||||||
u8 battleBondTransformed[NUM_BATTLE_SIDES]; // Bitfield for each party.
|
u8 battleBondTransformed[NUM_BATTLE_SIDES]; // Bitfield for each party.
|
||||||
u8 storedHealingWish:4; // Each battler as a bit.
|
u8 storedHealingWish:4; // Each battler as a bit.
|
||||||
u8 storedLunarDance:4; // Each battler as a bit.
|
u8 storedLunarDance:4; // Each battler as a bit.
|
||||||
|
|||||||
@ -1347,8 +1347,8 @@ s32 AI_DecideKnownAbilityForTurn(u32 battlerId)
|
|||||||
u32 abilityAiRatings[NUM_ABILITY_SLOTS] = {0};
|
u32 abilityAiRatings[NUM_ABILITY_SLOTS] = {0};
|
||||||
|
|
||||||
// We've had ability overwritten by e.g. Worry Seed. It is not part of AI_PARTY in case of switching
|
// We've had ability overwritten by e.g. Worry Seed. It is not part of AI_PARTY in case of switching
|
||||||
if (gBattleStruct->overwrittenAbilities[battlerId])
|
if (gDisableStructs[battlerId].overwrittenAbility)
|
||||||
return gBattleStruct->overwrittenAbilities[battlerId];
|
return gDisableStructs[battlerId].overwrittenAbility;
|
||||||
|
|
||||||
// The AI knows its own ability.
|
// The AI knows its own ability.
|
||||||
if (IsAiBattlerAware(battlerId))
|
if (IsAiBattlerAware(battlerId))
|
||||||
|
|||||||
@ -1616,7 +1616,7 @@ static u32 GetBattlerMonData(u32 battler, struct Pokemon *party, u32 monId, u8 *
|
|||||||
u32 side = GetBattlerSide(battler);
|
u32 side = GetBattlerSide(battler);
|
||||||
u32 partyIndex = gBattlerPartyIndexes[battler];
|
u32 partyIndex = gBattlerPartyIndexes[battler];
|
||||||
if (TestRunner_Battle_GetForcedAbility(side, partyIndex))
|
if (TestRunner_Battle_GetForcedAbility(side, partyIndex))
|
||||||
gBattleMons[battler].ability = gBattleStruct->overwrittenAbilities[battler] = TestRunner_Battle_GetForcedAbility(side, partyIndex);
|
gBattleMons[battler].ability = gDisableStructs[battler].overwrittenAbility = TestRunner_Battle_GetForcedAbility(side, partyIndex);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -3058,7 +3058,6 @@ static void BattleStartClearSetData(void)
|
|||||||
gBattleStruct->lastTakenMoveFrom[i][3] = MOVE_NONE;
|
gBattleStruct->lastTakenMoveFrom[i][3] = MOVE_NONE;
|
||||||
gBattleStruct->AI_monToSwitchIntoId[i] = PARTY_SIZE;
|
gBattleStruct->AI_monToSwitchIntoId[i] = PARTY_SIZE;
|
||||||
gBattleStruct->skyDropTargets[i] = 0xFF;
|
gBattleStruct->skyDropTargets[i] = 0xFF;
|
||||||
gBattleStruct->overwrittenAbilities[i] = ABILITY_NONE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gLastUsedMove = 0;
|
gLastUsedMove = 0;
|
||||||
@ -3286,8 +3285,6 @@ void SwitchInClearSetData(u32 battler)
|
|||||||
// Reset G-Max Chi Strike boosts.
|
// Reset G-Max Chi Strike boosts.
|
||||||
gBattleStruct->bonusCritStages[battler] = 0;
|
gBattleStruct->bonusCritStages[battler] = 0;
|
||||||
|
|
||||||
gBattleStruct->overwrittenAbilities[battler] = ABILITY_NONE;
|
|
||||||
|
|
||||||
// Clear selected party ID so Revival Blessing doesn't get confused.
|
// Clear selected party ID so Revival Blessing doesn't get confused.
|
||||||
gSelectedMonPartyId = PARTY_SIZE;
|
gSelectedMonPartyId = PARTY_SIZE;
|
||||||
|
|
||||||
@ -3298,7 +3295,7 @@ void SwitchInClearSetData(u32 battler)
|
|||||||
u32 side = GetBattlerSide(battler);
|
u32 side = GetBattlerSide(battler);
|
||||||
u32 partyIndex = gBattlerPartyIndexes[battler];
|
u32 partyIndex = gBattlerPartyIndexes[battler];
|
||||||
if (TestRunner_Battle_GetForcedAbility(side, partyIndex))
|
if (TestRunner_Battle_GetForcedAbility(side, partyIndex))
|
||||||
gBattleMons[i].ability = gBattleStruct->overwrittenAbilities[i] = TestRunner_Battle_GetForcedAbility(side, partyIndex);
|
gBattleMons[i].ability = gDisableStructs[i].overwrittenAbility = TestRunner_Battle_GetForcedAbility(side, partyIndex);
|
||||||
}
|
}
|
||||||
#endif // TESTING
|
#endif // TESTING
|
||||||
|
|
||||||
@ -3429,8 +3426,6 @@ const u8* FaintClearSetData(u32 battler)
|
|||||||
Ai_UpdateFaintData(battler);
|
Ai_UpdateFaintData(battler);
|
||||||
TryBattleFormChange(battler, FORM_CHANGE_FAINT);
|
TryBattleFormChange(battler, FORM_CHANGE_FAINT);
|
||||||
|
|
||||||
gBattleStruct->overwrittenAbilities[battler] = ABILITY_NONE;
|
|
||||||
|
|
||||||
// If the fainted mon was involved in a Sky Drop
|
// If the fainted mon was involved in a Sky Drop
|
||||||
if (gBattleStruct->skyDropTargets[battler] != 0xFF)
|
if (gBattleStruct->skyDropTargets[battler] != 0xFF)
|
||||||
{
|
{
|
||||||
@ -3537,7 +3532,7 @@ static void DoBattleIntro(void)
|
|||||||
u32 side = GetBattlerSide(battler);
|
u32 side = GetBattlerSide(battler);
|
||||||
u32 partyIndex = gBattlerPartyIndexes[battler];
|
u32 partyIndex = gBattlerPartyIndexes[battler];
|
||||||
if (TestRunner_Battle_GetForcedAbility(side, partyIndex))
|
if (TestRunner_Battle_GetForcedAbility(side, partyIndex))
|
||||||
gBattleMons[battler].ability = gBattleStruct->overwrittenAbilities[battler] = TestRunner_Battle_GetForcedAbility(side, partyIndex);
|
gBattleMons[battler].ability = gDisableStructs[battler].overwrittenAbility = TestRunner_Battle_GetForcedAbility(side, partyIndex);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -3853,7 +3848,7 @@ static void TryDoEventsBeforeFirstTurn(void)
|
|||||||
u32 side = GetBattlerSide(i);
|
u32 side = GetBattlerSide(i);
|
||||||
u32 partyIndex = gBattlerPartyIndexes[i];
|
u32 partyIndex = gBattlerPartyIndexes[i];
|
||||||
if (TestRunner_Battle_GetForcedAbility(side, partyIndex))
|
if (TestRunner_Battle_GetForcedAbility(side, partyIndex))
|
||||||
gBattleMons[i].ability = gBattleStruct->overwrittenAbilities[i] = TestRunner_Battle_GetForcedAbility(side, partyIndex);
|
gBattleMons[i].ability = gDisableStructs[i].overwrittenAbility = TestRunner_Battle_GetForcedAbility(side, partyIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // TESTING
|
#endif // TESTING
|
||||||
|
|||||||
@ -7177,7 +7177,7 @@ static void Cmd_switchindataupdate(void)
|
|||||||
u32 side = GetBattlerSide(battler);
|
u32 side = GetBattlerSide(battler);
|
||||||
u32 partyIndex = gBattlerPartyIndexes[battler];
|
u32 partyIndex = gBattlerPartyIndexes[battler];
|
||||||
if (TestRunner_Battle_GetForcedAbility(side, partyIndex))
|
if (TestRunner_Battle_GetForcedAbility(side, partyIndex))
|
||||||
gBattleMons[battler].ability = gBattleStruct->overwrittenAbilities[battler] = TestRunner_Battle_GetForcedAbility(side, partyIndex);
|
gBattleMons[battler].ability = gDisableStructs[battler].overwrittenAbility = TestRunner_Battle_GetForcedAbility(side, partyIndex);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -9724,7 +9724,7 @@ static void Cmd_various(void)
|
|||||||
case VARIOUS_TRACE_ABILITY:
|
case VARIOUS_TRACE_ABILITY:
|
||||||
{
|
{
|
||||||
VARIOUS_ARGS();
|
VARIOUS_ARGS();
|
||||||
gBattleMons[battler].ability = gBattleStruct->overwrittenAbilities[battler] = gBattleStruct->tracedAbility[battler];
|
gBattleMons[battler].ability = gDisableStructs[battler].overwrittenAbility = gBattleStruct->tracedAbility[battler];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case VARIOUS_TRY_ILLUSION_OFF:
|
case VARIOUS_TRY_ILLUSION_OFF:
|
||||||
@ -10324,7 +10324,7 @@ static void Cmd_various(void)
|
|||||||
gSpecialStatuses[gBattlerTarget].neutralizingGasRemoved = TRUE;
|
gSpecialStatuses[gBattlerTarget].neutralizingGasRemoved = TRUE;
|
||||||
|
|
||||||
gBattleScripting.abilityPopupOverwrite = gBattleMons[gBattlerTarget].ability;
|
gBattleScripting.abilityPopupOverwrite = gBattleMons[gBattlerTarget].ability;
|
||||||
gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = ABILITY_SIMPLE;
|
gBattleMons[gBattlerTarget].ability = gDisableStructs[gBattlerTarget].overwrittenAbility = ABILITY_SIMPLE;
|
||||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -10352,7 +10352,7 @@ static void Cmd_various(void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = gBattleMons[gBattlerAttacker].ability;
|
gBattleMons[gBattlerTarget].ability = gDisableStructs[gBattlerTarget].overwrittenAbility = gBattleMons[gBattlerAttacker].ability;
|
||||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -12982,7 +12982,7 @@ static void Cmd_transformdataexecution(void)
|
|||||||
for (i = 0; i < offsetof(struct BattlePokemon, pp); i++)
|
for (i = 0; i < offsetof(struct BattlePokemon, pp); i++)
|
||||||
battleMonAttacker[i] = battleMonTarget[i];
|
battleMonAttacker[i] = battleMonTarget[i];
|
||||||
|
|
||||||
gBattleStruct->overwrittenAbilities[gBattlerAttacker] = GetBattlerAbility(gBattlerTarget);
|
gDisableStructs[gBattlerAttacker].overwrittenAbility = GetBattlerAbility(gBattlerTarget);
|
||||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||||
{
|
{
|
||||||
u32 pp = GetMovePP(gBattleMons[gBattlerAttacker].moves[i]);
|
u32 pp = GetMovePP(gBattleMons[gBattlerAttacker].moves[i]);
|
||||||
@ -14744,7 +14744,7 @@ static void Cmd_trycopyability(void)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
gBattleScripting.abilityPopupOverwrite = gBattleMons[battler].ability;
|
gBattleScripting.abilityPopupOverwrite = gBattleMons[battler].ability;
|
||||||
gBattleMons[battler].ability = gBattleStruct->overwrittenAbilities[battler] = defAbility;
|
gBattleMons[battler].ability = gDisableStructs[battler].overwrittenAbility = defAbility;
|
||||||
gLastUsedAbility = defAbility;
|
gLastUsedAbility = defAbility;
|
||||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||||
}
|
}
|
||||||
@ -14935,8 +14935,8 @@ static void Cmd_tryswapabilities(void)
|
|||||||
if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget))
|
if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget))
|
||||||
gBattleScripting.abilityPopupOverwrite = gBattleMons[gBattlerAttacker].ability;
|
gBattleScripting.abilityPopupOverwrite = gBattleMons[gBattlerAttacker].ability;
|
||||||
gLastUsedAbility = gBattleMons[gBattlerTarget].ability;
|
gLastUsedAbility = gBattleMons[gBattlerTarget].ability;
|
||||||
gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = gBattleMons[gBattlerAttacker].ability;
|
gBattleMons[gBattlerTarget].ability = gDisableStructs[gBattlerTarget].overwrittenAbility = gBattleMons[gBattlerAttacker].ability;
|
||||||
gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = gLastUsedAbility;
|
gBattleMons[gBattlerAttacker].ability = gDisableStructs[gBattlerAttacker].overwrittenAbility = gLastUsedAbility;
|
||||||
|
|
||||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||||
}
|
}
|
||||||
@ -16245,7 +16245,7 @@ static void Cmd_tryworryseed(void)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
gBattleScripting.abilityPopupOverwrite = gBattleMons[gBattlerTarget].ability;
|
gBattleScripting.abilityPopupOverwrite = gBattleMons[gBattlerTarget].ability;
|
||||||
gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = ABILITY_INSOMNIA;
|
gBattleMons[gBattlerTarget].ability = gDisableStructs[gBattlerTarget].overwrittenAbility = ABILITY_INSOMNIA;
|
||||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5747,7 +5747,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
|||||||
&& IsBattlerTurnDamaged(gBattlerTarget)
|
&& IsBattlerTurnDamaged(gBattlerTarget)
|
||||||
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
|
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
|
||||||
&& IsMoveMakingContact(move, gBattlerAttacker)
|
&& IsMoveMakingContact(move, gBattlerAttacker)
|
||||||
&& gBattleStruct->overwrittenAbilities[gBattlerAttacker] != GetBattlerAbility(gBattlerTarget)
|
&& gDisableStructs[gBattlerAttacker].overwrittenAbility != GetBattlerAbility(gBattlerTarget)
|
||||||
&& gBattleMons[gBattlerAttacker].ability != ABILITY_MUMMY
|
&& gBattleMons[gBattlerAttacker].ability != ABILITY_MUMMY
|
||||||
&& gBattleMons[gBattlerAttacker].ability != ABILITY_LINGERING_AROMA
|
&& gBattleMons[gBattlerAttacker].ability != ABILITY_LINGERING_AROMA
|
||||||
&& !gAbilitiesInfo[gBattleMons[gBattlerAttacker].ability].cantBeSuppressed)
|
&& !gAbilitiesInfo[gBattleMons[gBattlerAttacker].ability].cantBeSuppressed)
|
||||||
@ -5759,7 +5759,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
|||||||
}
|
}
|
||||||
|
|
||||||
gLastUsedAbility = gBattleMons[gBattlerAttacker].ability;
|
gLastUsedAbility = gBattleMons[gBattlerAttacker].ability;
|
||||||
gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = gBattleMons[gBattlerTarget].ability;
|
gBattleMons[gBattlerAttacker].ability = gDisableStructs[gBattlerAttacker].overwrittenAbility = gBattleMons[gBattlerTarget].ability;
|
||||||
BattleScriptPushCursor();
|
BattleScriptPushCursor();
|
||||||
gBattlescriptCurrInstr = BattleScript_MummyActivates;
|
gBattlescriptCurrInstr = BattleScript_MummyActivates;
|
||||||
effect++;
|
effect++;
|
||||||
@ -5782,8 +5782,8 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
|||||||
}
|
}
|
||||||
|
|
||||||
gLastUsedAbility = gBattleMons[gBattlerAttacker].ability;
|
gLastUsedAbility = gBattleMons[gBattlerAttacker].ability;
|
||||||
gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = gBattleMons[gBattlerTarget].ability;
|
gBattleMons[gBattlerAttacker].ability = gDisableStructs[gBattlerAttacker].overwrittenAbility = gBattleMons[gBattlerTarget].ability;
|
||||||
gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = gLastUsedAbility;
|
gBattleMons[gBattlerTarget].ability = gDisableStructs[gBattlerTarget].overwrittenAbility = gLastUsedAbility;
|
||||||
BattleScriptPushCursor();
|
BattleScriptPushCursor();
|
||||||
gBattlescriptCurrInstr = BattleScript_WanderingSpiritActivates;
|
gBattlescriptCurrInstr = BattleScript_WanderingSpiritActivates;
|
||||||
effect++;
|
effect++;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user