From 40a015363c9aa1d044a4996180b33329d9c0f858 Mon Sep 17 00:00:00 2001 From: Branden J Brown Date: Tue, 26 May 2026 17:30:30 -0400 Subject: [PATCH] zenno/doc/frbm: precise example for uphill power diff --- zenno/src/routes/doc/frbm/+page.svelte | 29 +++++++++++++++++++------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/zenno/src/routes/doc/frbm/+page.svelte b/zenno/src/routes/doc/frbm/+page.svelte index e15afa2..4881d49 100644 --- a/zenno/src/routes/doc/frbm/+page.svelte +++ b/zenno/src/routes/doc/frbm/+page.svelte @@ -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 @@ Uphills

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.

@@ -441,12 +457,9 @@ Note that surface aptitude does not affect uphill speed, nor power generally. It only affects acceleration.

- 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 ( + ) 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.

Downhills