zenno/doc/frbm: precise example for uphill power diff

This commit is contained in:
2026-05-26 17:30:30 -04:00
parent 2869e7c160
commit 40a015363c

View File

@@ -5,6 +5,7 @@
AptitudeLevel,
downhillAccelEnterChance,
frontModeEnterChance,
HORSE_LENGTH,
moveLaneModifier,
paceUpEnterChance,
Phase,
@@ -31,6 +32,20 @@
return x * (1 - p) + x * bonus * p;
}
const uphillSlowPow = 800;
const uphillFastPow = 1200;
const uphillBaseSpeed = mean2(sectionSpeed(2500, 1200, 1200, RunningStyle.FrontRunner, Phase.MidRace));
const uphillSlopes = [
{ per: 2, len: 110 },
{ per: 1.5, len: 200 },
]
.map((s) => ({ ...s, slowSpeed: uphillMod(uphillSlowPow, s.per), fastSpeed: uphillMod(uphillFastPow, s.per) }))
.map((s) => ({ ...s, slowTime: s.len / (uphillBaseSpeed + s.slowSpeed), fastTime: s.len / (uphillBaseSpeed + s.fastSpeed) }))
// TODO(zeph): should include the difference with decel down to uphill speed and accel out of it,
// since the high power horse is favored for both
.map((s) => ({ ...s, dx: (s.fastSpeed - s.slowSpeed) * s.fastTime + s.slowSpeed * (s.slowTime - s.fastTime) }));
const uphillLengths = uphillSlopes.reduce((m, { dx }) => m + dx, 0) / HORSE_LENGTH;
const secSpeedS = 1200;
const secSpeedA = 1000;
const secSpeedExample = $derived(sectionSpeed(raceLen, secSpeedS, secSpeedS * 1.1, RunningStyle.FrontRunner, Phase.EarlyRace));
@@ -425,14 +440,15 @@
<Sec h="3" id="uphills">Uphills</Sec>
<p>
Running uphill carries a penalty to target speed. This penalty scales negatively with the power stat; that is, higher power
means faster uphill running. It scales positively with slope angle.
means faster uphill running. It scales positively with slope angle. There is also a flat reduction in base acceleration for
running uphill, which does not change with stats nor slope angle.
</p>
<div class="mb-4 h-60 w-full md:h-96">
<StatChart
class="mx-auto h-full w-full max-w-3xl"
stat={Stat.Power}
y={uphillSeries}
yLabel="Speed Modifier (m/s)"
yLabel="Uphill Speed Modifier (m/s)"
yRule={uphillYRule}
range={[-2, 0]}
/>
@@ -441,12 +457,9 @@
Note that surface aptitude <i>does not</i> affect uphill speed, nor power generally. It only affects acceleration.
</p>
<p>
The practical impact is that steep early- and mid-race hills filter out front runners with low power. Even with an otherwise
perfect build, an 800 power VBourbon is likely to be passed by a 1280 power (<Skill skill={200152} hint="firm" mention /> + <Skill
skill={200282}
hint="comp spirit"
mention
/>) Seiun Sky.
The practical impact is that steep early- and mid-race hills filter out front runners with low power. All else equal, a Seiun
Sky with {uphillFastPow} power gains an average of about {uphillLengths.toFixed(1)} lengths over a VBourbon with {uphillSlowPow}
power on the Arima Kinen mid-race hills.
</p>
<Sec h="3" id="downhills">Downhills</Sec>