Commit Graph

1 Commits

Author SHA1 Message Date
m3ultra
a5158bf6ec Wrench phase 1: 3D jobs on your car in your shed -- your hands are the tune
The repair game grows its 3D half (src/wrench.gd): flat tyre, oil
change and dead battery are done on the player's actual car model,
parked in the actual shed level, through five mouse verbs on projected
3D anchor points:

  GRAB   part follows the cursor on a ray-plane, drop at the target
  TWIST  circle the mouse around the anchor; torque steps have a seat
         window (release inside = clean) and blowing past it STRIPS
         the thread -- quality hit plus an extraction step inserted
  PUMP   rhythm clicks (jack up, jack down)
  YANK   press and flick (pop the wheel, bonnet up)
  STEADY keep the cursor inside a wandering ring (line up the studs,
         pour the oil)

Camera presets per step (wheel / under-car / bonnet), a screen-space
ring overlay with a live torque arc, and props spawned per job (spare,
tray, bottle, batteries). The battery job enforces RED THEN BLACK --
backwards earns a spark shower and commentary.

Workmanship is a stat: every job scores 0-100, and an 85+ fix BUFFS the
car through Garage.apply (tyres +0.2 grip, oil +3% power, battery +0.15
boost) until that fault recurs -- add_fault clears its quality entry, so
your last good fix is exactly as durable as your driving.

Faults now have gameplay sources: a red light at the tree flat-spots
the fronts, every 4th wreck rattles the sump loose (oil light, not in
junctions where wrecking is the game), and getting busted kills the
battery. All three are suite-inert by construction. New faults route to
the wrench scene via FAULTS[id].scene; gearbox/gasket keep the 2D panel
until phase 2. Wounds: flat -0.35 grip, oil -7% power, battery -0.3
boost (boost floor clamped at 0.4 -- the old ba>0 guard never subtracted).

Smoke plays a clean flat-tyre job through the API (7 steps, quality
90+, grip buff verified on the next boot) and a sabotaged oil job (blown
torque window -> stripped thread -> extraction step appears). The same
Variant-inference parse trap struck a third time (Dictionary index this
time); the suite caught it before it cost anything.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 15:36:05 +10:00