Fix bug when a captured pokemon replaces a party member who changed forms (#8091)
This commit is contained in:
parent
79441c6574
commit
6c3f87e74e
@ -300,6 +300,7 @@ bool32 IsBattlerMegaEvolved(u32 battler);
|
||||
bool32 IsBattlerPrimalReverted(u32 battler);
|
||||
bool32 IsBattlerUltraBursted(u32 battler);
|
||||
u16 GetBattleFormChangeTargetSpecies(u32 battler, enum FormChanges method);
|
||||
bool32 TryRevertPartyMonFormChange(u32 partyIndex);
|
||||
bool32 TryBattleFormChange(u32 battler, enum FormChanges method);
|
||||
bool32 DoBattlersShareType(u32 battler1, u32 battler2);
|
||||
bool32 CanBattlerGetOrLoseItem(u32 battler, u16 itemId);
|
||||
|
||||
@ -5627,17 +5627,7 @@ static void HandleEndTurn_FinishBattle(void)
|
||||
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
bool8 changedForm = FALSE;
|
||||
|
||||
// Appeared in battle and didn't faint
|
||||
if ((gBattleStruct->appearedInBattle & (1u << i)) && GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0)
|
||||
changedForm = TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_END_BATTLE_ENVIRONMENT);
|
||||
|
||||
if (!changedForm)
|
||||
changedForm = TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_END_BATTLE);
|
||||
|
||||
// Clear original species field
|
||||
gBattleStruct->partyState[B_SIDE_PLAYER][i].changedSpecies = SPECIES_NONE;
|
||||
bool8 changedForm = TryRevertPartyMonFormChange(i);
|
||||
gBattleStruct->partyState[B_SIDE_OPPONENT][i].changedSpecies = SPECIES_NONE;
|
||||
|
||||
// Recalculate the stats of every party member before the end
|
||||
|
||||
@ -14155,6 +14155,8 @@ static void Cmd_givecaughtmon(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
//Before sending to PC, we revert battle form
|
||||
TryRevertPartyMonFormChange(gSelectedMonPartyId);
|
||||
// Mon chosen, try to put it in the PC
|
||||
if (CopyMonToPC(&gPlayerParty[gSelectedMonPartyId]) == MON_GIVEN_TO_PC)
|
||||
{
|
||||
|
||||
@ -10131,6 +10131,23 @@ bool32 CanBattlerFormChange(u32 battler, enum FormChanges method)
|
||||
return DoesSpeciesHaveFormChangeMethod(gBattleMons[battler].species, method);
|
||||
}
|
||||
|
||||
bool32 TryRevertPartyMonFormChange(u32 partyIndex)
|
||||
{
|
||||
bool32 changedForm = FALSE;
|
||||
|
||||
// Appeared in battle and didn't faint
|
||||
if ((gBattleStruct->appearedInBattle & (1u << partyIndex)) && GetMonData(&gPlayerParty[partyIndex], MON_DATA_HP, NULL) != 0)
|
||||
changedForm = TryFormChange(partyIndex, B_SIDE_PLAYER, FORM_CHANGE_END_BATTLE_ENVIRONMENT);
|
||||
|
||||
if (!changedForm)
|
||||
changedForm = TryFormChange(partyIndex, B_SIDE_PLAYER, FORM_CHANGE_END_BATTLE);
|
||||
|
||||
// Clear original species field
|
||||
gBattleStruct->partyState[B_SIDE_PLAYER][partyIndex].changedSpecies = SPECIES_NONE;
|
||||
|
||||
return changedForm;
|
||||
}
|
||||
|
||||
bool32 TryBattleFormChange(u32 battler, enum FormChanges method)
|
||||
{
|
||||
u32 monId = gBattlerPartyIndexes[battler];
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user