Merge pull request #1031 from hondew/berry-yield
Document minor berry yield bug
This commit is contained in:
@@ -25,4 +25,11 @@
|
|||||||
#define BERRY_STAGE_BERRIES 5
|
#define BERRY_STAGE_BERRIES 5
|
||||||
#define BERRY_STAGE_SPARKLING 255
|
#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
|
#endif // GUARD_CONSTANTS_BERRY_H
|
||||||
|
|||||||
+13
-3
@@ -1200,6 +1200,15 @@ static u8 GetNumStagesWateredByBerryTreeId(u8 id)
|
|||||||
return BerryTreeGetNumStagesWatered(GetBerryTreeInfo(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)
|
static u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water)
|
||||||
{
|
{
|
||||||
u32 randMin;
|
u32 randMin;
|
||||||
@@ -1215,10 +1224,11 @@ static u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water)
|
|||||||
randMax = (max - min) * (water);
|
randMax = (max - min) * (water);
|
||||||
rand = randMin + Random() % (randMax - randMin + 1);
|
rand = randMin + Random() % (randMax - randMin + 1);
|
||||||
|
|
||||||
if ((rand & 3) > 1)
|
// Round upwards
|
||||||
extraYield = rand / 4 + 1;
|
if ((rand % NUM_WATER_STAGES) >= NUM_WATER_STAGES / 2)
|
||||||
|
extraYield = rand / NUM_WATER_STAGES + 1;
|
||||||
else
|
else
|
||||||
extraYield = rand / 4;
|
extraYield = rand / NUM_WATER_STAGES;
|
||||||
return extraYield + min;
|
return extraYield + min;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user