From 5dda4b846e3151d29339134550bff79bee769f05 Mon Sep 17 00:00:00 2001 From: cawtds <38510667+cawtds@users.noreply.github.com> Date: Sat, 6 Jul 2024 15:18:51 +0200 Subject: [PATCH] fishing chain only resets on failed attempt or when map warping, encountering different species does not break the chain, differentiate between max shiny streak and max chain length --- include/constants/wild_encounter.h | 3 ++- src/fieldmap.c | 1 - src/overworld.c | 1 + src/wild_encounter.c | 16 ++++------------ 4 files changed, 7 insertions(+), 14 deletions(-) diff --git a/include/constants/wild_encounter.h b/include/constants/wild_encounter.h index 8902f2ef43..ae669a2c35 100644 --- a/include/constants/wild_encounter.h +++ b/include/constants/wild_encounter.h @@ -8,6 +8,7 @@ #define NUM_ALTERING_CAVE_TABLES 9 -#define FISHING_CHAIN_LENGTH_MAX 20 +#define FISHING_CHAIN_LENGTH_MAX 200 +#define FISHING_CHAIN_SHINY_STREAK_MAX 20 #endif // GUARD_CONSTANTS_WILD_ENCOUNTER_H diff --git a/src/fieldmap.c b/src/fieldmap.c index e5a399875f..30daae49ca 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -67,7 +67,6 @@ const struct MapHeader *const GetMapHeaderFromConnection(const struct MapConnect void InitMap(void) { - gChainFishingDexNavStreak = 0; InitMapLayoutData(&gMapHeader); SetOccupiedSecretBaseEntranceMetatiles(gMapHeader.events); RunOnLoadMapScript(); diff --git a/src/overworld.c b/src/overworld.c index ca5a268a82..a9606578dc 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -907,6 +907,7 @@ if (I_VS_SEEKER_CHARGING != 0) RunOnTransitionMapScript(); UpdateLocationHistoryForRoamer(); MoveAllRoamersToOtherLocationSets(); + gChainFishingDexNavStreak = 0; if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR) InitBattlePyramidMap(FALSE); else if (InTrainerHill()) diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 450ba2f40f..ae7770aa3a 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -51,7 +51,7 @@ enum { static u16 FeebasRandom(void); static void FeebasSeedRng(u16 seed); -static void UpdateChainFishingSpeciesAndStreak(u32 species); +static void UpdateChainFishingStreak(); static bool8 IsWildLevelAllowedByRepel(u8 level); static void ApplyFluteEncounterRateMod(u32 *encRate); static void ApplyCleanseTagEncounterRateMod(u32 *encRate); @@ -68,7 +68,6 @@ EWRAM_DATA static u32 sFeebasRngValue = 0; EWRAM_DATA bool8 gIsFishingEncounter = 0; EWRAM_DATA bool8 gIsSurfingEncounter = 0; EWRAM_DATA u8 gChainFishingDexNavStreak = 0; -EWRAM_DATA static u16 sLastFishingSpecies = 0; #include "data/wild_encounters.h" @@ -520,7 +519,7 @@ static u16 GenerateFishingWildMon(const struct WildPokemonInfo *wildMonInfo, u8 u16 wildMonSpecies = wildMonInfo->wildPokemon[wildMonIndex].species; u8 level = ChooseWildMonLevel(wildMonInfo->wildPokemon, wildMonIndex, WILD_AREA_FISHING); - UpdateChainFishingSpeciesAndStreak(wildMonSpecies); + UpdateChainFishingStreak(); CreateWildMon(wildMonSpecies, level); return wildMonSpecies; } @@ -871,25 +870,18 @@ bool8 DoesCurrentMapHaveFishingMons(void) u32 CalculateChainFishingShinyRolls(void) { - return (2 * gChainFishingDexNavStreak); + return (2 * min(gChainFishingDexNavStreak, FISHING_CHAIN_SHINY_STREAK_MAX)); } -static void UpdateChainFishingSpeciesAndStreak(u32 species) +static void UpdateChainFishingStreak() { if (!I_FISHING_CHAIN) return; - if (species != sLastFishingSpecies) - { - gChainFishingDexNavStreak = 0; - return; - } - if (gChainFishingDexNavStreak >= FISHING_CHAIN_LENGTH_MAX) return; gChainFishingDexNavStreak++; - sLastFishingSpecies = species; } void FishingWildEncounter(u8 rod)