From b2100cb480fef1b4d4f70a06eb88d1b6e9538d1a Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Sun, 25 Oct 2020 23:23:40 -0400 Subject: [PATCH] port ModifyStatByNature fakematch fix (from #1179) --- src/pokemon.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/pokemon.c b/src/pokemon.c index 188624d6a7..e04260e40c 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5746,25 +5746,29 @@ u8 GetTrainerEncounterMusicId(u16 trainerOpponentId) u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex) { - // Dont modify HP, Accuracy, or Evasion by nature + u16 retVal; + // Don't modify HP, Accuracy, or Evasion by nature if (statIndex <= STAT_HP || statIndex > NUM_NATURE_STATS) { - // Should just be "return n", but it wouldn't match without this. - u16 retVal = n; - retVal++; - retVal--; - return retVal; + return n; } switch (gNatureStatTable[nature][statIndex - 1]) { case 1: - return (u16)(n * 110) / 100; // NOTE: will overflow for n > 595 because the intermediate value is cast to u16 before the division. Fix by removing (u16) cast + retVal = n * 110; + retVal /= 100; + break; case -1: - return (u16)(n * 90) / 100; // NOTE: will overflow for n > 728, see above + retVal = n * 90; + retVal /= 100; + break; + default: + retVal = n; + break; } - return n; + return retVal; } #define IS_LEAGUE_BATTLE \