From 24ed9e77ffd9dacf0a38584168b58b1bdd140910 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Fri, 2 Feb 2024 14:13:16 +0100 Subject: [PATCH] Fix FREE_MATCH_CALL --- include/config/save.h | 2 +- src/battle_setup.c | 26 ++++++++++++++------------ src/gym_leader_rematch.c | 7 ++++++- src/match_call.c | 2 ++ src/overworld.c | 4 ++++ src/pokenav_menu_handler_gfx.c | 2 +- src/vs_seeker.c | 24 ++++++++++++++++++++++++ 7 files changed, 52 insertions(+), 15 deletions(-) diff --git a/include/config/save.h b/include/config/save.h index c22f8e93a0..fcce547709 100644 --- a/include/config/save.h +++ b/include/config/save.h @@ -5,7 +5,7 @@ #define FREE_EXTRA_SEEN_FLAGS FALSE // Free up unused Pokédex seen flags (52 bytes). #define FREE_TRAINER_HILL FALSE //frees up trainer hill data. 28 bytes. WARNING THIS HAS BEEN SHOWN TO BREAK MULTI BATTLES #define FREE_MYSTERY_EVENT_BUFFERS FALSE //frees up mystery event and ramScript. roughly 1880 bytes Needed by FREE_BATTLE_TOWER_E_READER -#define FREE_MATCH_CALL FALSE //frees up match call data. 104 bytes +#define FREE_MATCH_CALL FALSE // Frees up match call and rematch data. (104 bytes). #define FREE_UNION_ROOM_CHAT FALSE //frees up field unk3C88. 210 bytes #define FREE_ENIGMA_BERRY FALSE //frees up enigma berry. 52 bytes #define FREE_LINK_BATTLE_RECORDS FALSE //frees link battle record data. 88 bytes diff --git a/src/battle_setup.c b/src/battle_setup.c index e05dc551a6..f6ec52b97e 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -88,7 +88,9 @@ static void SaveChangesToPlayerParty(void); static void HandleBattleVariantEndParty(void); static void CB2_EndTrainerBattle(void); static bool32 IsPlayerDefeated(u32 battleOutcome); +#if FREE_MATCH_CALL == FALSE static u16 GetRematchTrainerId(u16 trainerId); +#endif //FREE_MATCH_CALL static void RegisterTrainerInMatchCall(void); static void HandleRematchVarsOnBattleEnd(void); static const u8 *GetIntroSpeechOfApproachingTrainer(void); @@ -1667,7 +1669,7 @@ s32 TrainerIdToRematchTableId(const struct RematchTrainer *table, u16 trainerId) // Returns TRUE if the given trainer (by their entry in the rematch table) is not allowed to have rematches. // This applies to the Elite Four and Victory Road Wally (if he's not been defeated yet) -static bool32 IsRematchForbidden(s32 rematchTableId) +static inline bool32 IsRematchForbidden(s32 rematchTableId) { if (rematchTableId >= REMATCH_ELITE_FOUR_ENTRIES) return TRUE; @@ -1679,9 +1681,9 @@ static bool32 IsRematchForbidden(s32 rematchTableId) static void SetRematchIdForTrainer(const struct RematchTrainer *table, u32 tableId) { +#if FREE_MATCH_CALL == FALSE s32 i; -#if FREE_MATCH_CALL == FALSE for (i = 1; i < REMATCHES_COUNT; i++) { u16 trainerId = table[tableId].trainerIds[i]; @@ -1696,7 +1698,7 @@ static void SetRematchIdForTrainer(const struct RematchTrainer *table, u32 table #endif //FREE_MATCH_CALL } -static bool32 DoesCurrentMapMatchRematchTrainerMap(s32 i, const struct RematchTrainer *table, u16 mapGroup, u16 mapNum) +static inline bool32 DoesCurrentMapMatchRematchTrainerMap(s32 i, const struct RematchTrainer *table, u16 mapGroup, u16 mapNum) { return table[i].mapGroup == mapGroup && table[i].mapNum == mapNum; } @@ -1706,6 +1708,7 @@ bool32 TrainerIsMatchCallRegistered(s32 i) return FlagGet(FLAG_MATCH_CALL_REGISTERED + i); } +#if FREE_MATCH_CALL == FALSE static bool32 UpdateRandomTrainerRematches(const struct RematchTrainer *table, u16 mapGroup, u16 mapNum) { s32 i; @@ -1713,7 +1716,6 @@ static bool32 UpdateRandomTrainerRematches(const struct RematchTrainer *table, u if (CheckBagHasItem(ITEM_VS_SEEKER, 1) && I_VS_SEEKER_CHARGING != 0) return FALSE; -#if FREE_MATCH_CALL == FALSE for (i = 0; i <= REMATCH_SPECIAL_TRAINER_START; i++) { if (DoesCurrentMapMatchRematchTrainerMap(i,table,mapGroup,mapNum) && !IsRematchForbidden(i)) @@ -1731,10 +1733,10 @@ static bool32 UpdateRandomTrainerRematches(const struct RematchTrainer *table, u return TRUE; } } -#endif //FREE_MATCH_CALL return FALSE; } +#endif //FREE_MATCH_CALL void UpdateRematchIfDefeated(s32 rematchTableId) { @@ -1744,9 +1746,9 @@ void UpdateRematchIfDefeated(s32 rematchTableId) static bool32 DoesSomeoneWantRematchIn_(const struct RematchTrainer *table, u16 mapGroup, u16 mapNum) { +#if FREE_MATCH_CALL == FALSE s32 i; -#if FREE_MATCH_CALL == FALSE for (i = 0; i < REMATCH_TABLE_ENTRIES; i++) { if (table[i].mapGroup == mapGroup && table[i].mapNum == mapNum && gSaveBlock1Ptr->trainerRematches[i] != 0) @@ -1889,6 +1891,7 @@ static bool8 WasSecondRematchWon(const struct RematchTrainer *table, u16 firstBa return TRUE; } +#if FREE_MATCH_CALL == FALSE static bool32 HasAtLeastFiveBadges(void) { s32 i, count; @@ -1904,6 +1907,7 @@ static bool32 HasAtLeastFiveBadges(void) return FALSE; } +#endif //FREE_MATCH_CALL #define STEP_COUNTER_MAX 255 @@ -1922,25 +1926,21 @@ void IncrementRematchStepCounter(void) #endif //FREE_MATCH_CALL } +#if FREE_MATCH_CALL == FALSE static bool32 IsRematchStepCounterMaxed(void) { -#if FREE_MATCH_CALL == FALSE if (HasAtLeastFiveBadges() && gSaveBlock1Ptr->trainerRematchStepCounter >= STEP_COUNTER_MAX) return TRUE; else return FALSE; -#else - return FALSE; -#endif //FREE_MATCH_CALL } void TryUpdateRandomTrainerRematches(u16 mapGroup, u16 mapNum) { -#if FREE_MATCH_CALL == FALSE if (IsRematchStepCounterMaxed() && UpdateRandomTrainerRematches(gRematchTable, mapGroup, mapNum) == TRUE) gSaveBlock1Ptr->trainerRematchStepCounter = 0; -#endif //FREE_MATCH_CALL } +#endif //FREE_MATCH_CALL bool32 DoesSomeoneWantRematchIn(u16 mapGroup, u16 mapNum) { @@ -1952,6 +1952,7 @@ bool32 IsRematchTrainerIn(u16 mapGroup, u16 mapNum) return IsRematchTrainerIn_(gRematchTable, mapGroup, mapNum); } +#if FREE_MATCH_CALL == FALSE static u16 GetRematchTrainerId(u16 trainerId) { if (FlagGet(I_VS_SEEKER_CHARGING) && (I_VS_SEEKER_CHARGING != 0)) @@ -1959,6 +1960,7 @@ static u16 GetRematchTrainerId(u16 trainerId) else return GetRematchTrainerIdFromTable(gRematchTable, trainerId); } +#endif //FREE_MATCH_CALL u16 GetLastBeatenRematchTrainerId(u16 trainerId) { diff --git a/src/gym_leader_rematch.c b/src/gym_leader_rematch.c index 222299982c..d944ebdb51 100644 --- a/src/gym_leader_rematch.c +++ b/src/gym_leader_rematch.c @@ -5,7 +5,9 @@ #include "gym_leader_rematch.h" static void UpdateGymLeaderRematchFromArray(const u16 *data, size_t size, u32 maxRematch); +#if FREE_MATCH_CALL == FALSE static s32 GetRematchIndex(u32 trainerIdx); +#endif //FREE_MATCH_CALL static const u16 GymLeaderRematches_AfterNewMauville[] = { REMATCH_ROXANNE, @@ -42,11 +44,12 @@ void UpdateGymLeaderRematch(void) static void UpdateGymLeaderRematchFromArray(const u16 *data, size_t size, u32 maxRematch) { +#if FREE_MATCH_CALL == FALSE s32 whichLeader = 0; s32 lowestRematchIndex = 5; u32 i; s32 rematchIndex; -#if FREE_MATCH_CALL == FALSE + for (i = 0; i < size; i++) { if (!gSaveBlock1Ptr->trainerRematches[data[i]]) @@ -93,6 +96,7 @@ static void UpdateGymLeaderRematchFromArray(const u16 *data, size_t size, u32 ma #endif //FREE_MATCH_CALL } +#if FREE_MATCH_CALL == FALSE static s32 GetRematchIndex(u32 trainerIdx) { s32 i; @@ -105,3 +109,4 @@ static s32 GetRematchIndex(u32 trainerIdx) } return 5; } +#endif //FREE_MATCH_CALL diff --git a/src/match_call.c b/src/match_call.c index 4d4b1d35bf..5f14c24a09 100644 --- a/src/match_call.c +++ b/src/match_call.c @@ -1462,6 +1462,8 @@ static bool32 TrainerIsEligibleForRematch(int matchCallId) { #if FREE_MATCH_CALL == FALSE return gSaveBlock1Ptr->trainerRematches[matchCallId] > 0; +#else + return FALSE; #endif //FREE_MATCH_CALL } diff --git a/src/overworld.c b/src/overworld.c index e18ae583c4..5e11c04d5f 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -820,7 +820,9 @@ void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum) ClearTempFieldEventData(); ResetCyclingRoadChallengeData(); RestartWildEncounterImmunitySteps(); +#if FREE_MATCH_CALL == FALSE TryUpdateRandomTrainerRematches(mapGroup, mapNum); +#endif //FREE_MATCH_CALL if (I_VS_SEEKER_CHARGING != 0) MapResetTrainerRematches(mapGroup, mapNum); @@ -874,7 +876,9 @@ static void LoadMapFromWarp(bool32 a1) ClearTempFieldEventData(); ResetCyclingRoadChallengeData(); RestartWildEncounterImmunitySteps(); +#if FREE_MATCH_CALL == FALSE TryUpdateRandomTrainerRematches(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum); +#endif //FREE_MATCH_CALL if (I_VS_SEEKER_CHARGING != 0) MapResetTrainerRematches(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum); diff --git a/src/pokenav_menu_handler_gfx.c b/src/pokenav_menu_handler_gfx.c index 282ccfcb5a..b0128d385d 100644 --- a/src/pokenav_menu_handler_gfx.c +++ b/src/pokenav_menu_handler_gfx.c @@ -365,9 +365,9 @@ static const struct ScanlineEffectParams sPokenavMainMenuScanlineEffectParams = static bool32 AreAnyTrainerRematchesNearby(void) { +#if FREE_MATCH_CALL == FALSE s32 i; -#if FREE_MATCH_CALL == FALSE for (i = 0; i < REMATCH_TABLE_ENTRIES; i++) { if (GetMatchTableMapSectionId(i) == gMapHeader.regionMapSectionId diff --git a/src/vs_seeker.c b/src/vs_seeker.c index 0b58b9bac3..63b6c6f9d5 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -88,13 +88,17 @@ static void GatherNearbyTrainerInfo(void); static void Task_VsSeeker_ShowResponseToPlayer(u8 taskId); static bool8 CanUseVsSeeker(void); static u8 GetVsSeekerResponseInArea(void); +#if FREE_MATCH_CALL == FALSE static u8 GetResponseMovementTypeFromTrainerGraphicsId(u8 graphicsId); +#endif //FREE_MATCH_CALL static u16 GetTrainerFlagFromScript(const u8 * script); static void ClearAllTrainerRematchStates(void); +#if FREE_MATCH_CALL == FALSE static bool8 IsTrainerVisibleOnScreen(struct VsSeekerTrainerInfo * trainerInfo); static u32 GetRematchableTrainerLocalId(void); static void StartTrainerObjectMovementScript(struct VsSeekerTrainerInfo * trainerInfo, const u8 * script); static u8 GetCurVsSeekerResponse(s32 vsSeekerIdx, u16 trainerIdx); +#endif //FREE_MATCH_CALL static void StartAllRespondantIdleMovements(void); static bool8 ObjectEventIdIsSane(u8 objectEventId); static u8 GetRandomFaceDirectionMovementType(); @@ -221,6 +225,7 @@ void VsSeekerResetObjectMovementAfterChargeComplete(void) bool8 UpdateVsSeekerStepCounter(void) { +#if FREE_MATCH_CALL == FALSE u8 x = 0; if (!I_VS_SEEKER_CHARGING) return FALSE; @@ -246,6 +251,7 @@ bool8 UpdateVsSeekerStepCounter(void) return TRUE; } } +#endif //FREE_MATCH_CALL return FALSE; } @@ -284,12 +290,16 @@ static void ResetMovementOfRematchableTrainers(void) static void VsSeekerResetInBagStepCounter(void) { +#if FREE_MATCH_CALL == FALSE gSaveBlock1Ptr->trainerRematchStepCounter &= 0xFF00; +#endif //FREE_MATCH_CALL } static void VsSeekerResetChargingStepCounter(void) { +#if FREE_MATCH_CALL == FALSE gSaveBlock1Ptr->trainerRematchStepCounter &= 0x00FF; +#endif //FREE_MATCH_CALL } void Task_InitVsSeekerAndCheckForTrainersOnScreen(u8 taskId) @@ -403,6 +413,7 @@ static void Task_VsSeeker_ShowResponseToPlayer(u8 taskId) static u8 CanUseVsSeeker(void) { +#if FREE_MATCH_CALL == FALSE u8 vsSeekerChargeSteps = gSaveBlock1Ptr->trainerRematchStepCounter; if ((vsSeekerChargeSteps == VSSEEKER_RECHARGE_STEPS) && (GetRematchableTrainerLocalId() == 0xFF)) @@ -413,10 +424,14 @@ static u8 CanUseVsSeeker(void) ConvertIntToDecimalStringN(gStringVar1, (VSSEEKER_RECHARGE_STEPS - vsSeekerChargeSteps), STR_CONV_MODE_LEFT_ALIGN, 3); return VSSEEKER_NOT_CHARGED; +#else + return VSSEEKER_NO_ONE_IN_RANGE; +#endif //FREE_MATCH_CALL } static u8 GetVsSeekerResponseInArea(void) { +#if FREE_MATCH_CALL == FALSE u16 trainerIdx = 0; u8 response = 0, rematchTrainerIdx; s32 vsSeekerIdx = 0, randomValue = 0; @@ -486,6 +501,7 @@ static u8 GetVsSeekerResponseInArea(void) if (sVsSeeker->trainerHasNotYetBeenFought) return VSSEEKER_RESPONSE_UNFOUGHT_TRAINERS; +#endif //FREE_MATCH_CALL return VSSEEKER_RESPONSE_NO_RESPONSE; } @@ -589,6 +605,7 @@ static u8 GetRandomFaceDirectionMovementType() } } +#if FREE_MATCH_CALL == FALSE static bool32 IsRegularLandTrainer(u8 graphicsId) { u32 i; @@ -677,6 +694,7 @@ static u8 GetResponseMovementTypeFromTrainerGraphicsId(u8 graphicsId) return MOVEMENT_TYPE_FACE_DOWN; } +#endif //FREE_MATCH_CALL static u16 GetTrainerFlagFromScript(const u8 *script) /* @@ -701,6 +719,7 @@ static u16 GetTrainerFlagFromScript(const u8 *script) static void ClearAllTrainerRematchStates(void) { +#if FREE_MATCH_CALL == FALSE u32 i; if (!CheckBagHasItem(ITEM_VS_SEEKER, 1)) @@ -708,8 +727,10 @@ static void ClearAllTrainerRematchStates(void) for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->trainerRematches); i++) gSaveBlock1Ptr->trainerRematches[i] = 0; +#endif //FREE_MATCH_CALL } +#if FREE_MATCH_CALL == FALSE static bool8 IsTrainerVisibleOnScreen(struct VsSeekerTrainerInfo * trainerInfo) { s16 x; @@ -769,9 +790,11 @@ static u8 GetCurVsSeekerResponse(s32 vsSeekerIdx, u16 trainerIdx) } return VSSEEKER_SINGLE_RESP_RAND; } +#endif //FREE_MATCH_CALL static void StartAllRespondantIdleMovements(void) { +#if FREE_MATCH_CALL == FALSE s32 i; s32 j; @@ -790,4 +813,5 @@ static void StartAllRespondantIdleMovements(void) } } } +#endif //FREE_MATCH_CALL }