Skip to content

Gold

Gold buys speed, never a higher ceiling. It fills the fuel tank, swaps for cash and buys a few brand tokens of the player’s pick, so a player who spends reaches the same cars and brand levels sooner, never ones a free player cannot reach. Three free sources pay it (see below): at most 25 gold a day and 50 from the weekly event, 225 a week. The design is in docs/2026-11-08-progression-design.md (“Currencies”); every price is an estimate to tune after playtesting.

What Price Limit
A full tank (10 fuel), from any amount 30 gold refused when the tank is full
Cash 1 gold = 5% of the furthest open district’s average event prize, rounded to $10 any whole amount; the dialog offers 10, 50 and 250
1 brand token, any brand 20 gold 3 a week (ISO week, Monday 00:00 UTC)

The cash rate per district: Street $240, Harbor $630, Chinatown $1,410, the Strip $1,820. A replayed win pays 25% of the prize, so 1 gold is a fifth of a replayed win wherever the player is, and 550 gold (the EUR 4.99 pack in docs/2026-11-06-monetization-design.md) buys about three days of racing in any district (36 races a day, “Economy as built”).

A tank of 10 races is worth about 50 gold in replayed wins at that rate, so racing on a bought tank pays more than swapping the same 30 gold for cash. The free 50 gold a week buy one or two tanks. A free player earns about 15 brand tokens a week by racing, so the 3 bought tokens add a fifth at most.

Source Gold Limit
Weekly event wins 10, 15, 25 the first win of each rung, once a week (see Weekly event)
The day’s first won career event 10 once a UTC day
Rewarded gold ad 5 3 a UTC day

Sized against the 30 gold tank: a day’s free gold (25) stays under a tank, so it adds at most about 8 races of fuel to the 36 a day in the play model. The gold ad’s 5 gold are about 1.7 fuel, less than the fuel ad’s 2, so the fuel ad stays the better ad for fuel. Only a won career event counts for the first-win gold: a boss fight’s or tournament’s rounds, quick races and weekly races do not.

player/gold/ holds them, with no Phaser, so the race server and the game run the same code.

  • goldPrices.ts: TANK_PRICE, GOLD_CASH_SHARE, CASH_BUNDLES, TOKEN_PRICE, TOKENS_PER_WEEK and goldCashRate(progress), built on averageEventPrize (player/career/progress.ts), the same base as the daily bonus and the quick race prizes.
  • freeGold.ts: DAILY_WIN_GOLD, GOLD_PER_AD, GOLD_ADS_PER_DAY, payDailyWinGold (adds the gold to the garage and to the race’s award) and applyGoldAd, both counted in GarageState.goldDay ({ date, winPaid, ads }, the UTC day from ads/dailyBonus.ts bonusDay). A new day starts a new goldDay.
  • goldActions.ts: the three spending actions and goldAd. goldFuel fills the tank with fillFuel (player/fuel/fuel.ts); goldCash takes a whole number of gold and pays it at the current rate; goldToken adds one token of the named brand and counts it in GarageState.goldTokens ({ week, count }, the week key from player/weeklyEvent/weekCalendar.ts). Each refuses without changing anything: Not enough gold., a full tank, a bad amount, an unknown brand or No gold tokens left this week.

tests/freeGold.test.ts covers the first-win gold once a day, the gold ad’s cap and their reset at midnight UTC, and that the game cannot set goldDay. tests/gold.test.ts covers the tank price, the rate per district, the exchange, the weekly token cap and its reset on Monday, and that the game’s own copy of gold and the token count is ignored.

The actions are garage actions (player/garageActions.ts), applied by POST /api/garage/action (party/src/api/garageApi.ts) with the server’s clock: the server decides the week and the fuel, and works out every price itself. goldAd is an ad reward like fuelAd and dailyBonus: it pays only against an ad credit AdMob confirmed (party/src/api/adCredit.ts). The first-win gold is paid where the server settles a judged career event (party/src/race/judgedRace.ts), and comes back in the race’s award (RaceAward.gold), which the results line shows as “+10 gold for today’s first win”. gold, goldTokens and goldDay are not among the fields the game’s sync sends (player/garageSync.ts), so the game never sets its own gold.

  • Top bar (menu/topBar/goldGauge.ts): a coin and the amount left of the fuel. Tapping the gold or the fuel opens the gold dialog; a spend redraws the menu.
  • Gold dialog (ui/gold/goldDialog.ts): fill the tank, swap for cash (a second dialog with the amounts and what they pay) or brand tokens (a dialog with the 4 brands and the count the player has of each). “Watch an ad” (ui/gold/goldAd.ts) shows while a rewarded ad is loaded and one of the day’s 3 is left; paid, the menu redraws.
  • Results (race/raceAward.ts): the prize line ends with “+10 gold for today’s first win” when the race paid it.
  • Out of fuel (ui/fuelGuard.ts): with enough gold, “Fill the tank” sits next to the fuel ad and starts the race once paid.
  • Brand dialog in the parts shop (shop/parts/brands/BrandDialog.ts): “Buy tokens” opens the token pick and comes back to the brand dialog after.
  • DEV menu: “+100 gold” adds gold to a dev account’s garage.
  • Buying gold with real money. The purchase code kept from Remove ads (player/account/purchases.ts, POST /api/purchases/sync) reads RevenueCat’s active entitlements, which fits a one-time purchase that stays owned but not a consumable: crediting a gold pack needs the server to see each store transaction once (RevenueCat’s purchase history or a webhook, with a record of transactions already credited) or RevenueCat’s virtual currency. Until then gold comes only from the free sources above.
  • The play-length model (npm run career:check) does not count the free gold’s fuel.