Merge pull request #1031 from hondew/berry-yield

Document minor berry yield bug
This commit is contained in:
Sierra A 2020-05-03 02:26:18 -07:00 committed by GitHub
commit 8778aec7d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 3 deletions

View File

@ -25,4 +25,11 @@
#define BERRY_STAGE_BERRIES 5
#define BERRY_STAGE_SPARKLING 255
// Berries can be watered in the following stages:
// - BERRY_STAGE_PLANTED
// - BERRY_STAGE_SPROUTED
// - BERRY_STAGE_TALLER
// - BERRY_STAGE_FLOWERING
#define NUM_WATER_STAGES 4
#endif // GUARD_CONSTANTS_BERRY_H

View File

@ -1200,6 +1200,15 @@ static u8 GetNumStagesWateredByBerryTreeId(u8 id)
return BerryTreeGetNumStagesWatered(GetBerryTreeInfo(id));
}
// Berries can be watered at 4 stages of growth. This function is likely meant
// to divide the berry yield range equally into quartiles. If you watered the
// tree n times, your yield is a random number in the nth quartile.
//
// However, this function actually skews towards higher berry yields, because
// it rounds `extraYield` to the nearest whole number.
//
// See resulting yields: https://gist.github.com/hondew/2a099dbe54aa91414decdbfaa524327d,
// and bug fix: https://gist.github.com/hondew/0f0164e5b9dadfd72d24f30f2c049a0b.
static u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water)
{
u32 randMin;
@ -1215,10 +1224,11 @@ static u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water)
randMax = (max - min) * (water);
rand = randMin + Random() % (randMax - randMin + 1);
if ((rand & 3) > 1)
extraYield = rand / 4 + 1;
// Round upwards
if ((rand % NUM_WATER_STAGES) >= NUM_WATER_STAGES / 2)
extraYield = rand / NUM_WATER_STAGES + 1;
else
extraYield = rand / 4;
extraYield = rand / NUM_WATER_STAGES;
return extraYield + min;
}
}