From bae79a5320a24635113f8f114a09094ba03324e1 Mon Sep 17 00:00:00 2001
From: Branden J Brown
Date: Sun, 24 May 2026 18:06:51 -0400
Subject: [PATCH] zenno: format & lint fixes
---
zenno/src/lib/Skill.svelte | 37 +-
zenno/src/lib/data/skill.ts | 14 +-
zenno/src/lib/prob.ts | 12 +-
zenno/src/lib/race.ts | 49 +-
zenno/src/routes/doc/frbm/+page.svelte | 607 ++++++++++++++-----------
zenno/src/routes/mspeed/+page.svelte | 40 +-
6 files changed, 433 insertions(+), 326 deletions(-)
diff --git a/zenno/src/lib/Skill.svelte b/zenno/src/lib/Skill.svelte
index aab89a6..54ce867 100644
--- a/zenno/src/lib/Skill.svelte
+++ b/zenno/src/lib/Skill.svelte
@@ -1,27 +1,28 @@
{s.name}
diff --git a/zenno/src/lib/data/skill.ts b/zenno/src/lib/data/skill.ts
index 97ac3b7..a054a02 100644
--- a/zenno/src/lib/data/skill.ts
+++ b/zenno/src/lib/data/skill.ts
@@ -1,5 +1,5 @@
-import skillGlobal from '../../../../global/skill.json'
-import groupGlobal from '../../../../global/skill-group.json'
+import skillGlobal from '../../../../global/skill.json';
+import groupGlobal from '../../../../global/skill-group.json';
/**
* Skill data.
@@ -120,7 +120,7 @@ export interface Ability {
/**
* Skill groups.
* Skills in a skill group replace each other when purchased.
- *
+ *
* As a special case, horsegen lists both unique skills and their inherited
* versions in the skill groups for both.
*/
@@ -132,7 +132,7 @@ export interface SkillGroup {
/**
* Base skill in the skill group, if any.
* Either a common (white) skill or an Uma's own unique.
- *
+ *
* Some skill groups, e.g. for G1 Averseness, have no base skill.
*/
skill1?: number;
@@ -153,7 +153,7 @@ export interface SkillGroup {
}
export const skills = {
- global: skillGlobal as Skill[],
+ global: skillGlobal as Skill[],
} as const;
export const skillGroups = {
@@ -162,8 +162,8 @@ export const skillGroups = {
export const ZERO_SKILL: Readonly = {
skill_id: 0,
- name: "invalid skill",
- description: "an invalid skill was specified",
+ name: 'invalid skill',
+ description: 'an invalid skill was specified',
group: 0,
rarity: 1,
group_rate: 1,
diff --git a/zenno/src/lib/prob.ts b/zenno/src/lib/prob.ts
index 80b6584..68488e4 100644
--- a/zenno/src/lib/prob.ts
+++ b/zenno/src/lib/prob.ts
@@ -1,9 +1,9 @@
-import * as math from "mathjs";
+import * as math from 'mathjs';
export function binomPMF(p: number, n: number, k: number): number {
- // Operate in log domain for precision.
- const lc = math.lgamma(n+1) - math.lgamma(k+1) - math.lgamma(n-k+1);
- const lpk = k * math.log(p);
- const lr = (n - k) * math.log(1 - p);
- return math.exp(lc + lpk + lr);
+ // Operate in log domain for precision.
+ const lc = math.lgamma(n + 1) - math.lgamma(k + 1) - math.lgamma(n - k + 1);
+ const lpk = k * math.log(p);
+ const lr = (n - k) * math.log(1 - p);
+ return math.exp(lc + lpk + lr);
}
diff --git a/zenno/src/lib/race.ts b/zenno/src/lib/race.ts
index c464bab..2632e6b 100644
--- a/zenno/src/lib/race.ts
+++ b/zenno/src/lib/race.ts
@@ -1,8 +1,8 @@
// Umamusume race mechanics adapted from KuromiAK's doc:
// https://docs.google.com/document/d/15VzW9W2tXBBTibBRbZ8IVpW6HaMX8H0RP03kq6Az7Xg/edit?usp=sharing
-import * as math from "mathjs";
-import { binomPMF } from "./prob";
+import * as math from 'mathjs';
+import { binomPMF } from './prob';
/**
* Fundamental stats of umas.
@@ -115,7 +115,13 @@ const distanceProficiencyMod = [0.1, 0.2, 0.4, 0.6, 0.8, 0.9, 1.0, 1.05] as cons
* @param style Horse's running style
* @param phase Phase of the current section
*/
-export function sectionSpeed(raceLen: number, baseWit: number, witStat: number, style: RunningStyle, phase: Exclude): [number, number];
+export function sectionSpeed(
+ raceLen: number,
+ baseWit: number,
+ witStat: number,
+ style: RunningStyle,
+ phase: Exclude,
+): [number, number];
/**
* Calculate the range of section speed values for a horse not spurting during late race.
* @param raceLen Length of the race in meters
@@ -126,19 +132,38 @@ export function sectionSpeed(raceLen: number, baseWit: number, witStat: number,
* @param distance Hores's distance proficiency aptitude
* @param phase Phase.LateRace
*/
-export function sectionSpeed(raceLen: number, speedStat: number, baseWit: number, witStat: number, style: RunningStyle, distance: AptitudeLevel, phase: Phase.LateRace): [number, number];
-export function sectionSpeed(raceLen: number, speedStatOrBaseWit: number, baseWitOrWitStat: number, witStatOrStyle: number | RunningStyle, styleOrPhase: RunningStyle | Phase, distance?: AptitudeLevel, lateRace?: Phase.LateRace): [number, number] {
+export function sectionSpeed(
+ raceLen: number,
+ speedStat: number,
+ baseWit: number,
+ witStat: number,
+ style: RunningStyle,
+ distance: AptitudeLevel,
+ phase: Phase.LateRace,
+): [number, number];
+export function sectionSpeed(
+ raceLen: number,
+ speedStatOrBaseWit: number,
+ baseWitOrWitStat: number,
+ witStatOrStyle: number | RunningStyle,
+ styleOrPhase: RunningStyle | Phase,
+ distance?: AptitudeLevel,
+ lateRace?: Phase.LateRace,
+): [number, number] {
const speedStat = lateRace !== undefined ? speedStatOrBaseWit : 0;
const baseWit = lateRace !== undefined ? baseWitOrWitStat : speedStatOrBaseWit;
const witStat = lateRace !== undefined ? witStatOrStyle : baseWitOrWitStat;
- const style = lateRace !== undefined ? styleOrPhase as RunningStyle : witStatOrStyle as RunningStyle;
- const phase = lateRace !== undefined ? lateRace : styleOrPhase as Phase;
+ const style = lateRace !== undefined ? (styleOrPhase as RunningStyle) : (witStatOrStyle as RunningStyle);
+ const phase = lateRace !== undefined ? lateRace : (styleOrPhase as Phase);
const base = baseSpeed(raceLen);
const baseTarget = base * speedStrategyPhaseCoeff[style][phase];
- const late = phase === Phase.LateRace ? (math.sqrt(500 * speedStat) as number) * distanceProficiencyMod[distance ?? AptitudeLevel.A] * 0.002 : 0;
- const u = witStat / 550000 * math.log10(baseWit * 0.1);
+ const late =
+ phase === Phase.LateRace
+ ? (math.sqrt(500 * speedStat) as number) * distanceProficiencyMod[distance ?? AptitudeLevel.A] * 0.002
+ : 0;
+ const u = (witStat / 550000) * math.log10(baseWit * 0.1);
const l = u - 0.0065;
- return [baseTarget + late + base*l, baseTarget + late + base*u];
+ return [baseTarget + late + base * l, baseTarget + late + base * u];
}
/**
@@ -302,7 +327,7 @@ export function spotStruggleDuration(gutsStat: number, frontAptitude: AptitudeLe
* @returns Speed modifier for running uphill, a negative value
*/
export function uphillMod(powerStat: number, slopePer: number): number {
- return slopePer * -200/powerStat;
+ return (slopePer * -200) / powerStat;
}
/**
@@ -323,7 +348,7 @@ export function moveLaneModifier(powerStat: number): number {
* @returns Probability of exactly n skills out of N passing wit checks
*/
export function skillWitCheck(baseWit: number, N?: number, n?: number): number {
- const p = Math.max(0.2, 1 - 90/baseWit);
+ const p = Math.max(0.2, 1 - 90 / baseWit);
return binomPMF(p, N ?? 1, n ?? 1);
}
diff --git a/zenno/src/routes/doc/frbm/+page.svelte b/zenno/src/routes/doc/frbm/+page.svelte
index 141be44..49c518d 100644
--- a/zenno/src/routes/doc/frbm/+page.svelte
+++ b/zenno/src/routes/doc/frbm/+page.svelte
@@ -1,7 +1,22 @@
@@ -125,9 +142,9 @@
target="_blank"
rel="noopener noreferrer">kuromiAK's Race Mechanics doc. Many of those interpretations are also informed by the exceptionally knowledgeable folks on the
- GameTora Discord server.
- I may present some of the information from the race mechanics doc in chart form, but I will generally leave out exact mechanic numbers and conditions;
- the doc is already the place for that information.
+ GameTora Discord server. I may present
+ some of the information from the race mechanics doc in chart form, but I will generally leave out exact mechanic numbers and
+ conditions; the doc is already the place for that information.
I want to share the knowledge I've accrued about front runners, because teaching is my favorite thing. Definitely not just to
@@ -145,85 +162,108 @@
The numeric value of acceleration depends on the Power stat, dueling, surface aptitude, uphills, race phase, running style. At
the start of early race, horses accelerate from 3 m/s to the early race base target speed, which varies by race
- distance and running style but is generally on the order of 20 m/s. At the start of late race, if they have enough HP remaining for their last spurt, horses
- accelerate from the mid race base target speed to their spurt speed, which varies by speed stat, distance aptitude, running style, race
- distance, and guts stat, in decreasing order of effect. "Last spurt" and "last spurt phase" are different and
- unrelated things; the latter is only used in the condition for .
+ distance and running style but is generally on the order of 20 m/s. At the start of late race, if they have enough HP
+ remaining for their last spurt, horses accelerate from the mid race base target speed to their spurt speed, which varies by
+ speed stat, distance aptitude, running style, race distance, and guts stat, in decreasing order of effect. "Last spurt" and
+ "last spurt phase" are different and unrelated things; the latter is only used in the condition for .
Speed skills add a flat amount of target speed, generally +0.15 m/s for white skills, +0.25 m/s for double circle skills and
some inherited uniques, +0.35 m/s for gold skills and most speed uniques, and +0.45 m/s for a handful of speed uniques. Accel
- skills similarly add a flat amount of acceleration, typically +0.1 or +0.2 m/s² for white skills and inherited uniques, or +0.3
- or +0.4 m/s² for gold skills and uniques.
+ skills similarly add a flat amount of acceleration, typically +0.1 or +0.2 m/s² for white skills and inherited uniques, or
+ +0.3 or +0.4 m/s² for gold skills and uniques.
Runaway
- The skill converts front runners into the Great Escape running style. However, no player has ever uttered
- the words "Great Escape" when talking about Umamusume, presumably because Runaway is a much cooler name.
- ("Great Escape" is a direct translation of Japanese 大逃げ oonige, whereas "Front Runner" is a more liberal localization of 逃げ nige that technically just means "escape.")
+ The skill converts front runners into the Great Escape running style. However,
+ no player has ever uttered the words "Great Escape" when talking about Umamusume, presumably because Runaway is a much cooler
+ name. ("Great Escape" is a direct translation of Japanese 大逃げ oonige, whereas "Front Runner" is a more liberal
+ localization of 逃げ nige that technically just means "escape.")
- Runaways are still front runners for all purposes.
- The main difference is just different numbers for things like base speed and acceleration, stamina to HP conversion, and distance thresholds for running modes.
- Other mechanics that are specific to front runners also apply to runaways.
+ Runaways are still front runners for all purposes. The main difference is just different numbers for things like base speed
+ and acceleration, stamina to HP conversion, and distance thresholds for running modes. Other mechanics that are specific to
+ front runners also apply to runaways.
Win Conditions
- On Global today, competitive horses usually have stat lines that are pretty similar to each other.
- Races, therefore, are more often won by skills – typically acceleration skills that activate at the start of late race.
- Front runners have strong options.
+ On Global today, competitive horses usually have stat lines that are pretty similar to each other. Races, therefore, are more
+ often won by skills – typically acceleration skills that activate at the start of late race. Front runners have strong
+ options.
-
+
- , sometimes called Rod, is the second best skill in the game.
- Because only the horse in first place gets it, everything about training front runners becomes a matter of being in front at the start of late race, true to name.
+ , sometimes called Rod, is the second best skill in the game. Because only the horse
+ in first place gets it, everything about training front runners becomes a matter of being in front at the start of late
+ race, true to name.
- On long distance tracks, takes that role instead.
- The front two horses get it, which opens the opportunity for multi-front builds using / –
- especially because VC tracks aren't subject to the final corner spread that makes those skills worse on sprints and miles –
- but otherwise the function is the same.
+ On long distance tracks, takes that role instead. The front two horses get it, which opens
+ the opportunity for multi-front builds using / – especially because VC tracks aren't subject to the final corner spread that makes those skills worse on sprints and
+ miles – but otherwise the function is the same.
- On those sprints where Angling is dead, the front-specific options include (VPP, or Pasta) and (HCreek),
- It takes both of them to equal Angling, so such sprints may be better served gambling on , , and possibly instead.
- Front runners are especially strong on sprints for other reasons anyway.
+ On those sprints where Angling is dead, the front-specific options include (VPP, or Pasta)
+ and (HCreek), It takes both of them to equal Angling, so such sprints may be better
+ served gambling on , , and possibly instead. Front runners are especially strong on sprints
+ for other reasons anyway.
- is the best skill in the game.
- Unfortunately, for the most part, it's bad on front runners; generally not a win condition.
- Activating NSM requires not being in first, which means whoever was used Angling and is pulling away from you before you accumulate the blocked time to activate it.
- Again, VC tracks may be an exception if you specifically build for it.
+ is the best skill in the game. Unfortunately, for the most part, it's bad on front runners;
+ generally not a win condition. Activating NSM requires not being in first, which means whoever was used Angling and is pulling
+ away from you before you accumulate the blocked time to activate it. Again, VC tracks may be an exception if you specifically build
+ for it.
Pace Down Mode
- During the first 41.67% of the race, position keep is busy arranging each running style into their respective packs.
- The primary mechanism for this is pace down mode (PDM), which activates whenever a horse gets what their style defines as too close to first place.
+ During the first 41.67% of the race, position keep is busy arranging each running style into their respective packs. The
+ primary mechanism for this is pace down mode (PDM), which activates whenever a horse gets what their style defines as too close
+ to first place.
- Watch a MANT late surger with 1000+ power and wit in a daily legend race.
- As long as they don't get blocked, they should slide forward throughout the early race.
- Then, around when they reach the pace chaser pack, they'll suddenly start moonwalking back to the rest of the late surgers, often near the back of the group.
- That's PDM.
+ Watch a MANT late surger with 1000+ power and wit in a daily legend race. As long as they don't get blocked, they should slide forward throughout the early race. Then, around when they reach the pace chaser pack, they'll suddenly start moonwalking back to the rest
+ of the late surgers, often near the back of the group. That's PDM.
- On lesser running styles, early race and sometimes mid race speed skills are effectively converted from distance gain into HP conservation via PDM.
- The thing that really makes front runners good is that they don't have to worry about that – they aren't subject to PDM at all.
- Their mid race speed skills always gain distance.
+ On lesser running styles, early race and sometimes mid race speed skills are effectively converted from distance gain into HP
+ conservation via PDM. The thing that really makes front runners good is that they don't have to worry about that – they
+ aren't subject to PDM at all. Their mid race speed skills always gain distance.
Speed-Up and Overtake Modes
- Instead of pace-down and pace-up, front runners have speed-up (+4% target speed for first among that front type) and overtake (+5% for not-first) modes.
- Entering these modes requires meeting certain conditions relating to positioning, which collectively can be read as "solo fronts are heavily penalized."
- They also require passing a wit check, with the same chance for both modes.
+ Instead of pace-down and pace-up, front runners have speed-up (+4% target speed for first among that front type) and overtake
+ (+5% for not-first) modes. Entering these modes requires meeting certain conditions relating to positioning, which
+ collectively can be read as "solo fronts are heavily penalized." They also require passing a wit check, with the same chance
+ for both modes.
-
-
+
+
Skill Timing
@@ -262,27 +302,38 @@
Gate Skills
- Gate skills are (GW), (TTL), and (Conc), as well as all green skills including .
- These skills activate the moment the race starts.
+ Gate skills are (GW), (TTL), and (Conc), as well as all green skills including . These skills activate the
+ moment the race starts.
- GW is an absolutely mandatory skill for all front runners.
- Even runaway blockers should have it, otherwise they will be passed by the normal fronts they're trying to block.
- It requires three other gate skills, which should be active greens to avoid overreliance on wit checks.
- For reference, the chart below shows proc chances of one of one, one of two, or two of two skills with wit checks.
+ GW is an absolutely mandatory skill for all front runners. Even runaway blockers should have it, otherwise they will be passed
+ by the normal fronts they're trying to block. It requires three other gate skills, which should be active greens to avoid
+ overreliance on wit checks. For reference, the chart below shows proc chances of one of one, one of two, or two of two skills
+ with wit checks.
-
-
+
+
- TTL or its white version must be combined with GW if they want any chance of being first out of early race.
- Since the main source of TTL is the Mihono Bourbon Wit SSR from the first Halloween event, VBourbon can suffice with EL.
- (The other TTL option is the Twin Turbo SSR that does generate a lot of stats but requires winning three 50/50s to get the gold skill.)
+ TTL or its white version must be combined with GW if they want any chance of being first out
+ of early race. Since the main source of TTL is the Mihono Bourbon Wit SSR from the first Halloween event, VBourbon can suffice with
+ EL. (The other TTL option is the Twin Turbo SSR that does generate a lot of stats but requires winning three 50/50s to get the gold
+ skill.)
- Conc is less critical.
- It's worth taking on horses who have it, but it isn't worth using support card slots just to get it.
- On the other hand, its white version is bad; its only real use is as a backup gate skill for GW when you don't have enough greens available.
+ Conc is less critical. It's worth taking on horses who have it, but it isn't worth using support card slots just to get it. On
+ the other hand, its white version is bad; its only real use is as a backup gate skill for
+ GW when you don't have enough greens available.
Spot Struggle
@@ -295,111 +346,151 @@
Spot struggle provides a target speed bonus that scales with the guts stat. If it isn't cut short, which will approximately
never happen, its duration also scales with the guts stat. Unlike skills, its duration does not scale with race distance.
-
+
-
- Spot struggle also greatly increases HP consumption.
- For normal front runners, the rate is slightly less than Rushed.
- For runaways, it's more than double Rushed. (This is the reason people say you can't get enough stamina for runaways on Global.)
- Actually getting Rushed during spot struggle dramatically increases HP consumption, much more than just adding them together; red-light green-light pretty much guarantees that horse won't spurt.
-
- In medium+ races, the extra HP consumption is a serious consideration; front runners need more stamina and recoveries than other styles.
- At 1600m and shorter, the fact that Spot Struggle doesn't scale with race distance means that it can be worth multiple gold speed skills in total distance gained.
- See the mechanical speed calculator for precise analysis.
+ Spot struggle also greatly increases HP consumption. For normal front runners, the rate is slightly less than Rushed. For
+ runaways, it's more than double Rushed. (This is the reason people say you can't get enough stamina for runaways on Global.)
+ Actually getting Rushed during spot struggle dramatically increases HP consumption, much more than just adding them together;
+ red-light green-light pretty much guarantees that horse won't spurt.
+
+
+ In medium+ races, the extra HP consumption is a serious consideration; front runners need more stamina and recoveries than
+ other styles. At 1600m and shorter, the fact that Spot Struggle doesn't scale with race distance means that it can be worth
+ multiple gold speed skills in total distance gained. See the mechanical speed calculator for precise
+ analysis.
Lane Combo
- While under the influence of a skill that increases lane movement speed (shoe icon skills), and while actively changing lanes (i.e. moving sideways), horses gain a (forward) target speed boost that scales with power.
- This was a change Global received with the Unity Cup scenario.
+ While under the influence of a skill that increases lane movement speed (shoe icon skills), and while actively changing lanes
+ (i.e. moving sideways), horses gain a (forward) target speed boost that scales with power. This was a change Global received
+ with the Unity Cup scenario.
-
-
+
+
- Front runners have access to the skill , which forces a horse who uses it to move outward to a specific distance from the rail.
- DD almost always ends shortly before the horse has finished accelerating to early race speed, so it does not convert the move lane speed modifier into distance.
+ Front runners have access to the skill , which forces a horse who uses it to move outward to
+ a specific distance from the rail. DD almost always ends shortly before the horse has finished accelerating to early race
+ speed, so it does not convert the move lane speed modifier into distance.
- We get advantage from move lane speed modifier by following DD with or .
- DD created an opportunity for those return skills to convert into huge forward speed.
- This setup is called lane combo.
+ We get advantage from move lane speed modifier by following DD with or . DD created an opportunity for those return skills to convert into huge forward speed. This setup is called
+ lane combo.
- Lane combo is only viable on tracks where early race ends before or at most very early into the first corner.
- Since PP and Ignited WIT are phase_random==0 skills, they can activate at the very end of late race.
- If there's a corner there, and your horse is still on the outside from DD, you are now physically running a longer distance than those on the inside.
- That can more than undo the gain from the lane combo itself.
+ Lane combo is only viable on tracks where early race ends before or at most very early into the first corner. Since PP and
+ Ignited WIT are phase_random==0 skills, they can activate at the very end of late race. If there's
+ a corner there, and your horse is still on the outside from DD, you are now physically running a longer distance than those on the
+ inside. That can more than undo the gain from the lane combo itself.
- The mechanical speed calculator has an approximation of lane combo's benefit.
- A more precise lane combo simulator exists,
- but I am not sufficiently confident in my Japanese to try to guide readers through it.
+ The mechanical speed calculator has an approximation of lane combo's benefit. A more precise
+ lane combo simulator exists, but I am not
+ sufficiently confident in my Japanese to try to guide readers through it.
Slopes
- Different slopes can be of different angles; the SlopePer parameter is positive for uphills and negative for downhills.
- SlopePer values that currently exist on tracks include 1, 1.5, and 2, positive or negative.
+ Different slopes can be of different angles; the SlopePer parameter is positive for uphills and negative for downhills. SlopePer
+ values that currently exist on tracks include 1, 1.5, and 2, positive or negative.
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.
+ 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.
-
-
+
+
- Note that surface aptitude does not affect uphill speed, nor power generally.
- It only affects acceleration.
+ 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. Even with an otherwise
+ perfect build, an 800 power VBourbon is likely to be passed by a 1280 power ( + ) Seiun Sky.
-
+
Downhills
- Running downhill allows horses to enter downhill accel mode.
- Contrary to its name, downhill accel mode does not affect acceleration at all;
- it gives horses a target speed boost that scales with the slope angle, plus lowered HP consumption via a flat multiplier.
+ Running downhill allows horses to enter downhill accel mode. Contrary to its name, downhill accel mode does not affect
+ acceleration at all; it gives horses a target speed boost that scales with the slope angle, plus lowered HP consumption via a
+ flat multiplier.
- Entering downhill accel mode requires passing a wit check.
- The success rate scales linearly with wit.
- Style aptitude does affect the chance to pass the check.
- Its duration is random with a geometric distribution; it does not scale with stats.
+ Entering downhill accel mode requires passing a wit check. The success rate scales linearly with wit. Style aptitude does affect the chance to pass the check. Its duration is random with a geometric distribution; it does not scale with stats.
-
-
+
+
- Similar to uphills disproportionately rewarding front runners with higher power, downhills tend to reward high wit.
- However, the random elements of downhill accel mode mean that lower wit horses may still keep up on downhills, depending on luck.
+ Similar to uphills disproportionately rewarding front runners with higher power, downhills tend to reward high wit. However,
+ the random elements of downhill accel mode mean that lower wit horses may still keep up on downhills, depending on luck.
Conversely, the HP savings on long downhills can be enough to drop a recovery skill or two on some tracks.
Section Speed
- Each section, each horse gets a random modifier to target speed.
- The modifier's range is determined by the wit stat.
+ Each section, each horse gets a random modifier to target speed. The modifier's range is determined by the wit stat.
(Curiously, the calculation uses both wit as modified by style proficiency and green skills as well as base wit.)