diff options
author | GriffinR <griffin.g.richards@gmail.com> | 2021-10-27 22:38:48 -0400 |
---|---|---|
committer | GriffinR <griffin.g.richards@gmail.com> | 2021-10-27 22:38:48 -0400 |
commit | 7f49f2633113175b78978bffe01000dcf1e858a8 (patch) | |
tree | 9d513026d687b472ec0772dee4c27f57108cf9b7 /src | |
parent | f9f91be60a6e21eb2c9bd87ac67865e05296eab8 (diff) |
Restore ModifyStatByNature bug notes
Diffstat (limited to 'src')
-rw-r--r-- | src/pokemon.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/pokemon.c b/src/pokemon.c index 6e3d37ae3..0f943734b 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5775,27 +5775,36 @@ u8 GetTrainerEncounterMusicId(u16 trainerOpponentId) return TRAINER_ENCOUNTER_MUSIC(trainerOpponentId); } -u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex) -{ +u16 ModifyStatByNature(u8 nature, u16 stat, u8 statIndex) +{ +// Because this is a u16 it will be unable to store the +// result of the multiplication for any stat > 595 for a +// positive nature and > 728 for a negative nature. +// Neither occur in the base game, but this can happen if +// any Nature-affected base stat is increased to a value +// above 248. The closest by default is Shuckle at 230. +#ifdef BUGFIX + u32 retVal; +#else u16 retVal; +#endif + // Don't modify HP, Accuracy, or Evasion by nature if (statIndex <= STAT_HP || statIndex > NUM_NATURE_STATS) - { - return n; - } + return stat; switch (gNatureStatTable[nature][statIndex - 1]) { case 1: - retVal = n * 110; + retVal = stat * 110; retVal /= 100; break; case -1: - retVal = n * 90; + retVal = stat * 90; retVal /= 100; break; default: - retVal = n; + retVal = stat; break; } |