From 11e3f03bd8fa5546e522995b2cb582930a074724 Mon Sep 17 00:00:00 2001 From: Abaresk Date: Wed, 12 Oct 2022 03:51:13 +0000 Subject: [PATCH 1/2] Document new metatile wild encounter odds --- src/field_control_avatar.c | 10 +++++----- src/wild_encounter.c | 20 +++++++++++--------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 2ba4c29cd0..1b907f3d2b 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -36,7 +36,7 @@ #include "constants/trainer_hill.h" static EWRAM_DATA u8 sWildEncounterImmunitySteps = 0; -static EWRAM_DATA u16 sPreviousPlayerMetatileBehavior = 0; +static EWRAM_DATA u16 sPrevMetatileBehavior = 0; u8 gSelectedObjectEvent; @@ -671,18 +671,18 @@ static bool8 CheckStandardWildEncounter(u16 metatileBehavior) if (sWildEncounterImmunitySteps < 4) { sWildEncounterImmunitySteps++; - sPreviousPlayerMetatileBehavior = metatileBehavior; + sPrevMetatileBehavior = metatileBehavior; return FALSE; } - if (StandardWildEncounter(metatileBehavior, sPreviousPlayerMetatileBehavior) == TRUE) + if (StandardWildEncounter(metatileBehavior, sPrevMetatileBehavior) == TRUE) { sWildEncounterImmunitySteps = 0; - sPreviousPlayerMetatileBehavior = metatileBehavior; + sPrevMetatileBehavior = metatileBehavior; return TRUE; } - sPreviousPlayerMetatileBehavior = metatileBehavior; + sPrevMetatileBehavior = metatileBehavior; return FALSE; } diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 01161e6ccb..49b337268c 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -518,7 +518,9 @@ static bool8 DoWildEncounterRateTest(u32 encounterRate, bool8 ignoreAbility) return DoWildEncounterRateDiceRoll(encounterRate); } -static bool8 DoGlobalWildEncounterDiceRoll(void) +// When you first step on a different type of metatile, there's a 40% chance it +// skips the wild encounter check entirely. +static bool8 AllowWildCheckOnNewMetatile(void) { if (Random() % 100 >= 60) return FALSE; @@ -537,7 +539,7 @@ static bool8 AreLegendariesInSootopolisPreventingEncounters(void) return FlagGet(FLAG_LEGENDARIES_IN_SOOTOPOLIS); } -bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavior) +bool8 StandardWildEncounter(u16 curMetatileBehavior, u16 prevMetatileBehavior) { u16 headerId; struct Roamer *roamer; @@ -551,7 +553,7 @@ bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavi if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS) { headerId = GetBattlePikeWildMonHeaderId(); - if (previousMetaTileBehavior != currMetaTileBehavior && !DoGlobalWildEncounterDiceRoll()) + if (prevMetatileBehavior != curMetatileBehavior && !AllowWildCheckOnNewMetatile()) return FALSE; else if (DoWildEncounterRateTest(gBattlePikeWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE) return FALSE; @@ -566,7 +568,7 @@ bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavi if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR) { headerId = gSaveBlock2Ptr->frontier.curChallengeBattleNum; - if (previousMetaTileBehavior != currMetaTileBehavior && !DoGlobalWildEncounterDiceRoll()) + if (prevMetatileBehavior != curMetatileBehavior && !AllowWildCheckOnNewMetatile()) return FALSE; else if (DoWildEncounterRateTest(gBattlePyramidWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE) return FALSE; @@ -580,11 +582,11 @@ bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavi } else { - if (MetatileBehavior_IsLandWildEncounter(currMetaTileBehavior) == TRUE) + if (MetatileBehavior_IsLandWildEncounter(curMetatileBehavior) == TRUE) { if (gWildMonHeaders[headerId].landMonsInfo == NULL) return FALSE; - else if (previousMetaTileBehavior != currMetaTileBehavior && !DoGlobalWildEncounterDiceRoll()) + else if (prevMetatileBehavior != curMetatileBehavior && !AllowWildCheckOnNewMetatile()) return FALSE; else if (DoWildEncounterRateTest(gWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE) return FALSE; @@ -616,14 +618,14 @@ bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavi return FALSE; } } - else if (MetatileBehavior_IsWaterWildEncounter(currMetaTileBehavior) == TRUE - || (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) && MetatileBehavior_IsBridgeOverWater(currMetaTileBehavior) == TRUE)) + else if (MetatileBehavior_IsWaterWildEncounter(curMetatileBehavior) == TRUE + || (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) && MetatileBehavior_IsBridgeOverWater(curMetatileBehavior) == TRUE)) { if (AreLegendariesInSootopolisPreventingEncounters() == TRUE) return FALSE; else if (gWildMonHeaders[headerId].waterMonsInfo == NULL) return FALSE; - else if (previousMetaTileBehavior != currMetaTileBehavior && !DoGlobalWildEncounterDiceRoll()) + else if (prevMetatileBehavior != curMetatileBehavior && !AllowWildCheckOnNewMetatile()) return FALSE; else if (DoWildEncounterRateTest(gWildMonHeaders[headerId].waterMonsInfo->encounterRate, FALSE) != TRUE) return FALSE; From af081b08ee852dd72dc55061a3a22df3367619e4 Mon Sep 17 00:00:00 2001 From: Abaresk Date: Wed, 12 Oct 2022 04:35:23 +0000 Subject: [PATCH 2/2] Make related func names more concise --- src/wild_encounter.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 49b337268c..eb42cd7bdf 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -481,7 +481,7 @@ static bool8 DoMassOutbreakEncounterTest(void) return FALSE; } -static bool8 DoWildEncounterRateDiceRoll(u16 encounterRate) +static bool8 EncounterOddsCheck(u16 encounterRate) { if (Random() % MAX_ENCOUNTER_RATE < encounterRate) return TRUE; @@ -489,7 +489,8 @@ static bool8 DoWildEncounterRateDiceRoll(u16 encounterRate) return FALSE; } -static bool8 DoWildEncounterRateTest(u32 encounterRate, bool8 ignoreAbility) +// Returns true if it will try to create a wild encounter. +static bool8 WildEncounterCheck(u32 encounterRate, bool8 ignoreAbility) { encounterRate *= 16; if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) @@ -515,7 +516,7 @@ static bool8 DoWildEncounterRateTest(u32 encounterRate, bool8 ignoreAbility) } if (encounterRate > MAX_ENCOUNTER_RATE) encounterRate = MAX_ENCOUNTER_RATE; - return DoWildEncounterRateDiceRoll(encounterRate); + return EncounterOddsCheck(encounterRate); } // When you first step on a different type of metatile, there's a 40% chance it @@ -555,7 +556,7 @@ bool8 StandardWildEncounter(u16 curMetatileBehavior, u16 prevMetatileBehavior) headerId = GetBattlePikeWildMonHeaderId(); if (prevMetatileBehavior != curMetatileBehavior && !AllowWildCheckOnNewMetatile()) return FALSE; - else if (DoWildEncounterRateTest(gBattlePikeWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE) + else if (WildEncounterCheck(gBattlePikeWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE) return FALSE; else if (TryGenerateWildMon(gBattlePikeWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, WILD_CHECK_KEEN_EYE) != TRUE) return FALSE; @@ -570,7 +571,7 @@ bool8 StandardWildEncounter(u16 curMetatileBehavior, u16 prevMetatileBehavior) headerId = gSaveBlock2Ptr->frontier.curChallengeBattleNum; if (prevMetatileBehavior != curMetatileBehavior && !AllowWildCheckOnNewMetatile()) return FALSE; - else if (DoWildEncounterRateTest(gBattlePyramidWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE) + else if (WildEncounterCheck(gBattlePyramidWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE) return FALSE; else if (TryGenerateWildMon(gBattlePyramidWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, WILD_CHECK_KEEN_EYE) != TRUE) return FALSE; @@ -588,7 +589,7 @@ bool8 StandardWildEncounter(u16 curMetatileBehavior, u16 prevMetatileBehavior) return FALSE; else if (prevMetatileBehavior != curMetatileBehavior && !AllowWildCheckOnNewMetatile()) return FALSE; - else if (DoWildEncounterRateTest(gWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE) + else if (WildEncounterCheck(gWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE) return FALSE; if (TryStartRoamerEncounter() == TRUE) @@ -627,7 +628,7 @@ bool8 StandardWildEncounter(u16 curMetatileBehavior, u16 prevMetatileBehavior) return FALSE; else if (prevMetatileBehavior != curMetatileBehavior && !AllowWildCheckOnNewMetatile()) return FALSE; - else if (DoWildEncounterRateTest(gWildMonHeaders[headerId].waterMonsInfo->encounterRate, FALSE) != TRUE) + else if (WildEncounterCheck(gWildMonHeaders[headerId].waterMonsInfo->encounterRate, FALSE) != TRUE) return FALSE; if (TryStartRoamerEncounter() == TRUE) @@ -667,7 +668,7 @@ void RockSmashWildEncounter(void) { gSpecialVar_Result = FALSE; } - else if (DoWildEncounterRateTest(wildPokemonInfo->encounterRate, TRUE) == TRUE + else if (WildEncounterCheck(wildPokemonInfo->encounterRate, TRUE) == TRUE && TryGenerateWildMon(wildPokemonInfo, WILD_AREA_ROCKS, WILD_CHECK_REPEL | WILD_CHECK_KEEN_EYE) == TRUE) { BattleSetup_StartWildBattle();