Skip to content

Quick race

Quick race is a single race from the main menu, outside the career. The player picks a car, a track and a distance, then Easy, Medium or Hard. It pays a little XP and cash, gives no stars and puts no time on the leaderboards.

The rival is nameless (“Rival”) and drives a copy of the player’s car: the same model, the same parts and the same part brands (OpponentCarSpec.brands), with less power and a driver who makes more or fewer mistakes (QUICK_RIVALS in player/quickRace.ts). Each level has its own paint, so the levels look different on the line; its decals and underglow are rolled anew each race (rivalLook in player/career/rivalLook.ts).

Level Power Sloppiness Paint
Easy 74.5% 0.4 Toxic Lime
Medium 78% 0.3 Bayside Blue
Hard 87% 0.1 Jet Black

Because the rival copies the car, the difficulty follows the player’s progress in every class without a table per car. scripts/quickRaceCheck.ts measures it and tests/quickRaceBalance.test.ts holds it in range on a stock car and on 6 and 12 parts (scripts/quickRaceRates.ts): a player at 85% of the car’s best run (the career check’s driver until 2026-11-13) wins 78 to 91% of easy races and 38 to 55% of medium ones, and hard needs a better driver (66 to 88% at 92% of the best run). Traction control (2026-11-08) made a full-power car worth more against a detuned copy, so easy went from 65% to 72% power and medium from 75% to 82%; the real parts (2026-11-10) moved them to 74.5%, 80% and 86% for hard; the fixed nitrous shot (2026-11-11) to 78% for medium and 87% for hard.

A quick race is a CareerRace without an event, with an id like quick~hard~harbor~half (quickRaceId). pickRace in race/EventRace.ts and raceOf (race/judge/raceOf.ts, which the race server uses) build it from that id and the car raced, so the ticket, the replay and the result screens work as for a career race. The server rebuilds the rival from the car stored on the ticket, so the client cannot pick a weaker one.

settleSingleRace (race/judge/settleRace.ts, called by the server’s judgeRace) settles it with settleQuickRace (player/level/quickRaceRewards.ts) instead of the career’s prize and stars, and skips the leaderboards and the double prize. Results and the pause menu lead back to the quick race screen (race/raceHome.ts).

Tracks are those of the districts the career has opened, so a quick race shows nothing the career has not.

A win pays a share of the furthest open district’s average event prize (quickRaceCash, rounded to $50), the same base as the daily bonus, so quick races keep up with the career. Medium pays a fifth, what replaying an average event pays (REPLAY_SHARE).

Level Win Finished loss
Easy 10 XP, 12% of the average event prize ($150 in Street) 5 XP
Medium 20 XP, 20% ($250 in Street) 5 XP
Hard 35 XP, 28% ($350 in Street) 5 XP

A race that does not reach the line pays nothing. Only the first 20 finished quick races of a UTC day pay (GarageState.quickRaces, the server’s clock), so an easy rival cannot be farmed for cash or levels. The screen shows how many prize races are left today.

tests/quickRace.test.ts covers the ids, the rival and the rewards with the daily cap. npx tsx scripts/quickRaceCheck.ts prints the win rates per level; tests/quickRaceBalance.test.ts fails when one leaves its range.