Merge pull request #1531 from GriffinRichards/fix-statoverflow

Restore ModifyStatByNature bug notes
This commit is contained in:
GriffinR 2021-10-28 18:13:05 -04:00 committed by GitHub
commit c793949f46
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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;
}