Fix Slateport Battle Tent/Battle Factory (#5281)
* Fix Slateport Battle Tent/Battle Factory Stops the Battle Factory and Slateport Battle Tent from returning no Pokémon when player wants to swap their Pokémon. * Fix player rental party being junk data after rest Fixes #5280 * Consolidate checks into single method Consolidates every gSpecialVar_0x8005 check into a singular method.
This commit is contained in:
parent
fb1f12aa1b
commit
a422db09c6
11 changed files with 31 additions and 11 deletions
|
@ -24,5 +24,6 @@ u16 GetFrontierBrainMonMove(u8 monId, u8 moveSlotId);
|
|||
u8 GetFrontierBrainMonNature(u8 monId);
|
||||
u8 GetFrontierBrainMonEvs(u8 monId, u8 evStatId);
|
||||
s32 GetFronterBrainSymbol(void);
|
||||
void ClearEnemyPartyAfterChallenge(void);
|
||||
|
||||
#endif // GUARD_FRONTIER_UTIL_H
|
||||
|
|
|
@ -529,6 +529,7 @@ static void SetArenaData(void)
|
|||
|
||||
static void SaveArenaChallenge(void)
|
||||
{
|
||||
ClearEnemyPartyAfterChallenge();
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, 0);
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
|
|
|
@ -2593,6 +2593,7 @@ static void SetDomeOpponentGraphicsId(void)
|
|||
|
||||
static void SaveDomeChallenge(void)
|
||||
{
|
||||
ClearEnemyPartyAfterChallenge();
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, 0);
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
|
|
|
@ -268,6 +268,7 @@ static void SetBattleFactoryData(void)
|
|||
|
||||
static void SaveFactoryChallenge(void)
|
||||
{
|
||||
ClearEnemyPartyAfterChallenge();
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, 0);
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
|
@ -430,9 +431,6 @@ static void SetPlayerAndOpponentParties(void)
|
|||
ivs = gSaveBlock2Ptr->frontier.rentalMons[i].ivs;
|
||||
|
||||
CreateFacilityMon(&gFacilityTrainerMons[monId], monLevel, ivs, OT_ID_PLAYER_ID, FLAG_FRONTIER_MON_FACTORY, &gPlayerParty[i]);
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY,
|
||||
&gSaveBlock2Ptr->frontier.rentalMons[i].personality);
|
||||
CalculateMonStats(&gPlayerParty[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -444,12 +442,7 @@ static void SetPlayerAndOpponentParties(void)
|
|||
{
|
||||
monId = gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].monId;
|
||||
ivs = gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].ivs;
|
||||
CreateFacilityMon(&gFacilityTrainerMons[monId],
|
||||
monLevel, ivs, OT_ID_PLAYER_ID, FLAG_FRONTIER_MON_FACTORY,
|
||||
&gEnemyParty[i]);
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY,
|
||||
&gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].personality);
|
||||
CalculateMonStats(&gPlayerParty[i]);
|
||||
CreateFacilityMon(&gFacilityTrainerMons[monId], monLevel, ivs, OT_ID_PLAYER_ID, FLAG_FRONTIER_MON_FACTORY, &gEnemyParty[i]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -5624,9 +5624,14 @@ static void FreeResetData_ReturnToOvOrDoEvolutions(void)
|
|||
}
|
||||
|
||||
FreeAllWindowBuffers();
|
||||
if (gBattleStruct != NULL && !(gBattleTypeFlags & BATTLE_TYPE_LINK))
|
||||
if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
|
||||
{
|
||||
ZeroEnemyPartyMons();
|
||||
// To account for Battle Factory and Slateport Battle Tent, enemy parties are zeroed out in the facilitites respective src/xxx.c files
|
||||
// The ZeroEnemyPartyMons() call happens in SaveXXXChallenge function (eg. SaveFactoryChallenge)
|
||||
if (!(gBattleTypeFlags & BATTLE_TYPE_FRONTIER))
|
||||
{
|
||||
ZeroEnemyPartyMons();
|
||||
}
|
||||
ResetDynamicAiFunc();
|
||||
FreeMonSpritesGfx();
|
||||
FreeBattleResources();
|
||||
|
|
|
@ -180,6 +180,7 @@ static void IncrementPalaceStreak(void)
|
|||
|
||||
static void SavePalaceChallenge(void)
|
||||
{
|
||||
ClearEnemyPartyAfterChallenge();
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, 0);
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
|
|
|
@ -707,6 +707,7 @@ static void ClearInWildMonRoom(void)
|
|||
|
||||
static void SavePikeChallenge(void)
|
||||
{
|
||||
ClearEnemyPartyAfterChallenge();
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, 0);
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include "battle_pyramid.h"
|
||||
#include "battle_pyramid_bag.h"
|
||||
#include "event_data.h"
|
||||
#include "frontier_util.h"
|
||||
#include "battle.h"
|
||||
#include "battle_setup.h"
|
||||
#include "battle_tower.h"
|
||||
|
@ -936,6 +937,7 @@ static void SetBattlePyramidData(void)
|
|||
|
||||
static void SavePyramidChallenge(void)
|
||||
{
|
||||
ClearEnemyPartyAfterChallenge();
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, 0);
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
|
|
|
@ -139,6 +139,7 @@ static void BufferVerdanturfTentTrainerIntro(void)
|
|||
|
||||
static void SaveVerdanturfTentChallenge(void)
|
||||
{
|
||||
ClearEnemyPartyAfterChallenge();
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, 0);
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
|
@ -189,6 +190,7 @@ static void SetFallarborTentPrize(void)
|
|||
|
||||
static void SaveFallarborTentChallenge(void)
|
||||
{
|
||||
ClearEnemyPartyAfterChallenge();
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, 0);
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
|
@ -244,6 +246,7 @@ static void SetSlateportTentPrize(void)
|
|||
|
||||
static void SaveSlateportTentChallenge(void)
|
||||
{
|
||||
ClearEnemyPartyAfterChallenge();
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, 0);
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
|
|
|
@ -2206,6 +2206,7 @@ static void SaveTowerChallenge(void)
|
|||
if (gSpecialVar_0x8005 == 0 && (challengeNum > 1 || gSaveBlock2Ptr->frontier.curChallengeBattleNum != 0))
|
||||
SaveBattleTowerRecord();
|
||||
|
||||
ClearEnemyPartyAfterChallenge();
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, 0);
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
|
|
|
@ -2578,3 +2578,14 @@ static void CopyFrontierBrainText(bool8 playerWonText)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ClearEnemyPartyAfterChallenge()
|
||||
{
|
||||
// We zero out the Enemy's party here when the player either wins or loses the challenge since we
|
||||
// can't do it the usual way in FreeResetData_ReturnToOvOrDoEvolutions() in battle_main.c due to the
|
||||
// way facilities like the Battle Factory and the Slateport Battle Tent work
|
||||
if (gSpecialVar_0x8005 == 0)
|
||||
{
|
||||
ZeroEnemyPartyMons();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue