Scoring
Master Formula
Every single hit evaluates this formula, in this exact order:
rawPoints = MIN_PAYOUT + (costMax − MIN_PAYOUT) × xMult × zMult × powerMult
basePoints = max(MIN_PAYOUT, round(rawPoints × comboMult))
points = max(MIN_PAYOUT, round(basePoints × backMult × streakMult × damageMult × wallBounceMult))
MIN_PAYOUT is $200 — any hit pays at least this, even a pure edge graze. The floor is applied twice: once after combo, once after all remaining multipliers. Multipliers stack multiplicatively in the order shown.
Vehicle Repair-Cost Table (costMax)
| Vehicle | Class | Max $ |
| Porsche 911 | Sports | $5,000 |
| BMW M3 E30 | Sports | $4,500 |
| Mazda RX-7 | Sports | $4,000 |
| Chevy Corvette | Sports | $4,000 |
| Audi RS5 | Sports | $4,000 |
| Crown Vic Interceptor | Sedan | $3,500 |
| Chevelle SS | Sedan | $3,500 |
| Hummer EV | Truck | $3,500 |
| Tesla Cybertruck | Truck | $3,500 |
| School Bus | Truck | $3,000 |
| Jeep Wrangler | SUV | $2,500 |
| Mercury Grand Marquis | Sedan | $2,000 |
| VW Golf GTI | Sedan | $2,000 |
| VW Bus | SUV | $2,000 |
| City Bus | Truck | $2,000 |
| RV | Truck | $2,000 |
| Saia Semi | Truck | $2,000 |
| Mercury Colony Park | SUV | $1,500 |
| Ford F-150 | Truck | $1,500 |
| 70s Pickup | Truck | $1,500 |
Unknown vehicles fall back by class: sports $4,000 · sedan $2,500 · suv $2,000 · truck $2,000.
Hit Position — xMult, zMult
xRatio = |rock.x − car.x| / (car.width / 2) → 0 center, 1 edge
zRatio = (rock.z − car.z) / (car.length / 2) → -1 front, +1 rear
yRatio = (rock.y − car.y) / car.height
xMult = 1 − xRatio [1.0 center → 0.0 edge]
zMult = 1.0 − zRatio × 0.3 [1.3 front → 1.0 center → 0.7 rear]
Dead-center hood hits score the full repair cost. Edge grazes collapse toward $0 (clamped by MIN_PAYOUT). Front bumpers pay 30% more than rears.
Panel Zones (yRatio + zRatio)
| Panel | Trigger |
| Bumper | zRatio < −0.3 |
| Hood | zRatio < 0.15 AND yRatio < 0.6 |
| Windshield | zRatio < 0.45 AND yRatio > 0.4 |
| Roof | zRatio < 0.7 |
| Trunk | otherwise |
The panel label is only for the hit log readout — the dollar math uses xMult/zMult directly, not the named panel.
Power Multiplier
powerMult = 1 + power × 2 where power ∈ [0, 1]
power 0.0
Feather drop → 1.0×
power 0.5
Mid-meter → 2.0×
power 1.0
Max-charge → 3.0×
Combo Multiplier (per-throw)
comboMult = carHits [1st car = 1×, 2nd = 2×, 3rd = 3×, … no cap]
One rock, multiple cars. Each successive car on the same projectile multiplies the hit's damage by its position in the chain. A single rock hitting 5 cars stacks 5×, 4×, 3×, 2×, 1× on the respective hits.
Streak Multiplier (cross-throw)
| Tier | Consecutive hit-throws | Multiplier |
| None | 0–1 | 1× |
| 🔥 HOT STREAK | 2–4 | 2× |
| ⚡ SUPER STREAK | 5–9 | 5× |
| 💥 MEGA STREAK | 10+ | 10× |
A "hit-throw" is any throw that scored at least one car hit. A miss (rock lands without connecting) resets the streak tier to 0. Reaching MEGA also grants a one-shot Triple Toss charge — your next throw fires three rocks in an 8° spread.
Backwards Hit 5×
backMult = 5 if (carHits ≥ 2 AND velocity.z > 2 AND !_backwardsUsed)
After hitting a car, the rock deflects. If it has positive Z velocity (moving back toward the camera) when it hits the next car, that hit scores 5×. Only one backwards hit per rock. Counts toward the backwards-trio time bonus (see below).
Wall Bounce Multiplier
wallBounceMult = wallBounceCount × 1.5
Side barriers of the highway bounce a rock back into traffic. Each bounce adds 1.5× to a running multiplier stored on the rock: 1st = 1.5×, 2nd = 3.0×, 3rd = 4.5×, and so on (no cap). Applied on every subsequent car hit by that rock. Stacks multiplicatively with streak, combo, and backwards.
Per-Projectile Damage Multiplier
| Projectile | damageMult | bounceMult | throwSpeedMult | gravityMult | windMult |
| 🪨 Rock | 1.00 | 1.00 | 1.00 | 1.00 | 0.50 |
| ⛳ Golf Ball | 0.65 | 1.60 | 1.15 | 1.40 | 1.00 |
| 🎳 Bowling Pin | 1.00 | 0.90 | 0.95 | 0.90 | 0.70 |
Golf balls do 65% of a rock's damage but bounce 60% harder, fly 15% faster, and fall 40% quicker (heavier effective gravity = snappier cadence). They're also blown around by wind twice as much. Rocks win on raw damage; golf balls win on combo depth and unpredictable ricochets.
Bowling pins match rocks for damage but fly a hair slower and float longer (0.9× gravity) so you can watch them tumble end-over-end. They excel at mowing laterally through a row of cars: each pin hit becomes the next car's combo multiplier, and pins keep their momentum after impact — a well-placed throw can pick up 10+ cars in one go. Wall bounces are brutal with pins since the multiplier stacks (no cap).
Flyback Bonus — +$20,000
If a rock that's already hit at least one car bounces back over the bridge deck (crosses Z = −5 going upward with Y above 6m, heading toward the camera), it's a Flyback. Flat +$20,000 bonus awarded once. Also counts as one tick toward the backwards-trio counter.
Time-Extension Bonuses
+10s · Backwards Trio
Accumulate 3 backwards hits (backwards-5× hits and flybacks both count) and the round clock gets +10s. Counter resets after each trio, so you can earn it repeatedly.
+10s · Back in Time!
The DeLorean appears once per round at the 40s-elapsed mark. Any direct hit awards +10s and plays "Back in Time!"
Worked Examples
Example 1 — Perfect Porsche hood at max power, cold start:
costMax=$5,000, xMult=1.0, zMult=1.0, powerMult=3.0, combo=1, back=1, streak=1, dmg=1, wall=1
rawPoints = 200 + (5000-200)×1×1×3 = $14,600
basePoints = 14,600 × 1 = $14,600
points = 14,600
Example 2 — Same shot but 3rd car of a combo on a SUPER streak with 1 wall bounce:
costMax=$2,500 sedan, xMult=1.0, zMult=1.0, powerMult=3.0
combo=3, streak=5, wall=1.5
rawPoints = 200 + (2500-200)×3 = $7,100
basePoints = 7100 × 3 = $21,300
points = 21,300 × 1 × 5 × 1 × 1.5 = $159,750
Example 3 — Backwards + MEGA on a truck:
costMax=$2,000, xMult=0.8, zMult=1.0, powerMult=2.5
combo=2, backMult=5, streak=10, dmg=1, wall=1
rawPoints = 200 + (2000-200)×0.8×1×2.5 = $3,800
basePoints = 3800 × 2 = $7,600
points = 7600 × 5 × 10 = $380,000