Skip to content

Speed UHC computed stats

Derived Speed UHC metrics, attached as the always-on computed property of the raw stats block: whenever player.stats.speedUHC is present, player.stats.speedUHC.computed is a SpeedUHCComputed built by computeSpeedUHC(raw) from src/computed/modes/speeduhc.ts. All inputs are fields of the raw SpeedUHCStats block and its modeStats record of suffixed counters.

Conventions used below:

  • Ratios are bare (not percentages), rounded to 2 decimals. When the denominator is 0 the numerator is returned as-is (K/D convention).
  • *Share and *Percent fields are percentages from 0 to 100, rounded to 2 decimals; a zero whole yields 0.
  • *ForNext* fields are the additional amount of the numerator stat needed to reach the next whole ratio (floor(num / den) + 1); 0 when the denominator is 0.

SpeedUHCTitle

The Speed UHC title ladder, resolved from the raw score. The player's title is the highest entry whose requirement the score meets.

ts
export type SpeedUHCTitle =
  (typeof SPEED_UHC_TITLE_REQUIREMENTS)[number]["title"];

Equivalent to the union of these title strings, with their score requirements:

TitleScore required
"Hiker"0
"Jogger"50
"Runner"300
"Sprinter"1050
"Turbo"2550
"Sanic"5550
"Hot Rod"15550
"Bolt"30550
"Zoom"55550
"God Speed"85550

SpeedUHCComputed

The top-level object at player.stats.speedUHC.computed.

ts
export interface SpeedUHCComputed {
  readonly kdr: number;
  readonly killsForNextKdr: number;
  readonly wlr: number;
  readonly winsForNextWlr: number;
  readonly arrowAccuracy: number;
  readonly winRate: number;
  readonly killsPerGame: number;
  readonly averageSurvivors: number;
  readonly kadr: number;
  readonly quitRate: number;
  readonly tearsPerGame: number;
  readonly assistShare: number;
  readonly title: SpeedUHCTitle;
  readonly scoreToNextTitle: number;
  readonly titleProgressPercent: number;
  readonly modes: Readonly<Record<string, SpeedUHCModeComputed>>;
}
FieldFormulaMeaning
kdrraw.kills / raw.deathsOverall kill/death ratio
killsForNextKdrneededForNextWholeRatio(raw.kills, raw.deaths)Kills still needed to reach the next whole-number KDR
wlrraw.wins / raw.lossesOverall win/loss ratio
winsForNextWlrneededForNextWholeRatio(raw.wins, raw.losses)Wins still needed to reach the next whole-number WLR
arrowAccuracyraw.arrowsHit / raw.arrowsShotFraction of arrows shot that hit (bare ratio, not a percentage)
winRateraw.wins / raw.gamesFraction of games won (bare ratio)
killsPerGameraw.kills / raw.gamesAverage kills per game
averageSurvivorsraw.survivedPlayers / raw.gamesAverage players outlived per game
kadr(raw.kills + raw.assists) / raw.deathsKills-and-assists per death
quitRateraw.quits / raw.gamesQuits per game (bare ratio)
tearsPerGameraw.tearsGathered / raw.gamesAverage tears gathered per game
assistShare100 * raw.assists / (raw.kills + raw.assists)Percentage of kill involvements that were assists (0-100)
titlehighest ladder entry with raw.score >= requirementCurrent Speed UHC title; see SpeedUHCTitle
scoreToNextTitlenextRequirement - raw.score; 0 at the top titleScore still needed to reach the next title
titleProgressPercent100 * (raw.score - currentRequirement) / (nextRequirement - currentRequirement); 100 at the top titleProgress through the current title bracket (0-100)
modesone entry per named mode (see below)Per-mode breakdown; see SpeedUHCModeComputed

SpeedUHCModeComputed

The modes record always contains exactly these six keys, each reading the suffixed counters kills_<suffix>, deaths_<suffix>, wins_<suffix>, and losses_<suffix> from raw.modeStats (a missing counter counts as 0):

KeyRaw stat suffix
solosolo
soloNormalsolo_normal
soloInsanesolo_insane
teamteam
teamNormalteam_normal
teamInsaneteam_insane
ts
export interface SpeedUHCModeComputed {
  readonly kdr: number;
  readonly killsForNextKdr: number;
  readonly wlr: number;
  readonly winsForNextWlr: number;
}
FieldFormulaMeaning
kdrkills_<suffix> / deaths_<suffix>Kill/death ratio in this mode
killsForNextKdrneededForNextWholeRatio(kills_<suffix>, deaths_<suffix>)Kills still needed in this mode to reach the next whole-number KDR
wlrwins_<suffix> / losses_<suffix>Win/loss ratio in this mode
winsForNextWlrneededForNextWholeRatio(wins_<suffix>, losses_<suffix>)Wins still needed in this mode to reach the next whole-number WLR

Released under the MIT License.