Burnout 3 ran about 110 km/h and felt like 300. None of this makes the
car faster; all of it makes the car feel faster.
Screen pass (src/speed_fx.gd, shader authored in code like everything
else, layer 0 so the HUD stays sharp):
- RADIAL BLUR smearing the world outward from the crosshair
- SPEED LINES, the Sonic trick: 300 radial lanes, randomised phase,
streaming outward, sparse while merely quick and a storm on boost
- CHROMATIC ABERRATION folded into the blur as a per-channel radius
- TUNNEL VIGNETTE squeezing the frame under boost
Camera (game.gd _speed_cam): drops and hugs the boot as speed rises
(2.4/6.0 m -> 1.75/5.1), lags on hard acceleration so the car pulls
away from the lens, aims further up the road, dutch-rolls into the
steering (doubled mid-drift), and gains speed-scaled micro-shake on top
of the impact shake. FOV runs 72 -> 96 with speed, +12 on boost, and
PUNCHES +9 the instant boost lights -- the punch is what sells the
shove.
Plus motes streaming past the lens (Fx.rusher, parented to the camera
in local space -- the radial blur smears each speck into a streak for
free) and a procedural WIND loop whose volume and pitch ride the same
curve, so the ears agree with the eyes.
Everything keys off one number, km/h, with a squared response: nothing
happens at town speed, then it piles on. Effects cut in at 55 km/h and
max at 165.
Two things measurement caught that reading wouldn't: bolting chromatic
aberration on AFTER the blur samples sharp red/blue against blurred
green and fringes every edge magenta (it looked like a broken display,
not a fast car) -- the fix is per-channel sample radii inside the blur
loop; and the first pass was simply too much everywhere, so boost is
now the visual event and cruising fast is merely urgent.
Smoke: at ~160 km/h the lens must open >8 deg, the screen pass must
engage and become visible, the motes must emit, and pressing boost must
kick the FOV further still.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The drag strip now has consequences on both sides of the green.
Burnouts: DRIFT+GAS in the staging box lights up the rears -- fat white
FLUX-free tyre smoke (new Fx.burnout emitter), fake rear-wheel spin via
car.spin_override, the skid loop singing while stationary -- and builds
TYRE TEMP. Warm tyres hook up off the line, cold ones spin the launch
away: a traction factor (0.78 cold to 1.20 hot) applies for the first
150 m. The burnout holds the car with power_scale 0, so it can never
red-light you; releasing into a creep still can, as is right.
Gearbox: blown shifts are now strikes. Three in one run and the box
grenades -- a panel bangs off the back (car.mech_pop), the lever goes
dead (stuck in whatever gear you murdered it into, 55% drive), and the
car starts LEAKING: oil patches spawn behind it every 7 m of travel and
sit on the strip for 30 s. Everyone can see what you did.
Coolant: riding the limiter cooks ENG TEMP at 0.30/s (boost adds a
little; driving clean cools). At 100% the head gasket lets go: a steam
jet out of the bonnet (Fx.steamer), 72% power for the rest of the run,
and COOLANT EVERYWHERE. Sitting on the redline refusing to shift is now
a self-solving problem.
HUD shows tyre temp in staging and OVERHEAT/BOX GRENADED/GASKET
STEAMING flags in the run; the result screen commemorates both failures.
Smoke suite: burnout warms without tripping the beams, three panic
shifts grenade the box and lock the gear, the leak flag sets, and a
forced overtemp pops the gasket.
Next: these failures become persistent per-car faults you repair in the
shed with a drag/click/twist minigame and the Cashies code reader.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The last two design-doc gameplay items land:
- Road Rage: 90 s, wreck as many rivals as you can. They recover on their own
(no hold_wreck) so the supply never dries up, and a 220 m leash teleports
strays back to the road ahead of the player. Bronze/silver/gold at 4/8/12.
- Oncoming: driving against the RacePath tangent while actually on the road
(within 7 m of the line, above 12 m/s, heading dot < -0.55) trickles boost
with a periodic toast. Runs in cruise, race and rage.
Crashbreaker finally looks the part: layered Fx.explosion (70-particle additive
fire bloom, rising smoke, 60-spark shower) inside a thin additive shockwave
shell -- the old opaque orange bubble drowned the fire out completely, so it
became a fast-fading front-culled dome instead. Plus a 0.8 camera shake.
Menu is a title screen: FLUX-generated key art (battered sedan, flying hubcap,
bridge, jacarandas -- the hubcap is canon now) behind a scrim, outlined golden
title. Art prompt asks for no lettering; the plate gibberish is FLUX being FLUX.
Smoke coverage for both mechanics. The oncoming test taught a harness lesson:
setting global_position on a continuous_cd body SWEEPS it there, wrecking the
car before the test began -- teleport via PhysicsServer3D.body_set_state.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Skin pass (build_cars.py, whole procedural fleet rebuilt):
- warp_obj() kills the slab: plan taper (nose/tail pull in), tumblehome (the
glasshouse leans inward above the belt) and rocker tuck, applied to
world-space verts so det_ panels stay flush with the body.
- Beveled body edges catch light instead of vanishing into flat shading.
- Wheels are tyre + rim with the mesh centred on the hub and the OBJECT at the
hub -- the old wheels baked position into their verts, so a spinning wheel
would have orbited the car's origin. Chrome det_hub hubcaps on every corner,
dark arch shrouds so wheels sit in wells rather than under a slab.
- B-pillars over the one-piece glasshouse, licence plates, exhaust, door
handles. Mirrors anchored to where the tapered flank actually ends up.
Destruction feel:
- Visual wheels spin with road speed and the fronts steer (rotation order YXZ:
yaw then roll, so steered wheels roll about the steered axle).
- Shed panels burst outward with lift instead of just detaching; light hits
ping a hubcap off first, saving doors for crashes that deserve them.
- Sparks on every impact, soft-puff smoke on wrecks and heavy damage, tyre
smoke while drifting (src/fx.gd -- procedural particles, radial-gradient
billboards, no textures). Camera shake on player crashes, applied after
look_at so it reads as the camera being knocked, not re-aimed.
- Crumple strength up ~40% now that scratches and dulling ride on it.
Traffic and parked cars inherit all of it via the shared fleet GLBs.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>