destroyulator/LANES/LANE9-fun-layer.md
2026-08-03 23:49:53 +10:00

3.0 KiB
Raw Blame History

LANE 9 — the fun layer: still scales, the Roomba, the incident report, chair riding

Spec'd and executed by Fable, 2026-08-03. Owns game/ only.

Four features, one commit each, every one riding systems that already exist. House rule respected throughout: the game never says so — no tutorials, no popups explaining.

0. The scales sleep at spawn (bug fix — restores a red gate)

probe_levels reads 0.48 m/s residual in the grocer: the scale pan (Main.gd:391, angular_damp = 0.25, origin at the pivot) is near-neutrally balanced, so spawn jitter never dies. Fix: after the joint has resolved (~0.6 s), zero the pan's velocities and put it to sleep. The swing feel after a hit is untouched — this is a spawn-settle, same spirit as the spawn guard. Gate: all six sites back to 0.00 m/s.

1. The Roomba (scripts/Roomba.gd)

A robot vacuum that patrols the site eating your debris — the anti-combo antagonist.

  • class_name Roomba extends Smashable, kind = "steel" — so the weapon matrix already works: bare hands are futile (clank), a crowbar dents it, a sledge can genuinely kill it (and the payslip bills you for it, because it's company property).
  • Wander: slow patrol; when debris (group debris) is within sniff range it steers there.
  • Eat: an Area3D mouth; debris it touches shrinks and vanishes with a little vacuum whirr, and each item eaten deducts score (Main._score), with an occasional smug beep.
  • Dent it and it panics: beeps, flees fast for a few seconds.
  • Procedural audio (beeps + whirr) synthesized in _ready — no assets, house style.
  • Spawns in every site EXCEPT LEVEL 0 (_backrooms == null check) — nothing cute in the Backrooms — and not in the Gauntlet round itself.

2. The incident report (scripts/Receipt.gd)

When a meltdown ends (Rage.calmed after a SNAP), a dot-matrix incident report prints, line by line, itemizing what you broke during that window: OBJECT · unit $ · ×N, then TOTAL DAMAGES, then DEDUCTED FROM PAY. One synth chirp per printed line. Collected via Main._on_smashed while Rage.is_meltdown(). Any key (or 5 s) dismisses. All drawn/synthesized in code — no textures, no audio files.

3. Ride the office chair (scripts/ChairRide.gd + Player hooks)

E on an office chair (piece named office-chair, within 2.5 m, hands empty) mounts it.

  • The chair stays a real RigidBody3D; the player follows it kinematically (collision paused), camera up top. WASD pushes it (strong forward, weak steering — deliberately bad), momentum is real, the floor is the office. Space/E hops off with a small dismount.
  • Ramming does what physics says: mass × speed scatters furniture; brittle things (vinyl, glass, produce) break on impact via their existing brittle_speed — no new damage code.
  • If the chair shatters mid-ride (it's plastic; you CAN sledge your own vehicle), the ride ends on the spot, comedically.

Gates (each commit)

Headless smoke clean · probe_levels all sites 0.00 m/s · probe_overlap CLEAN. README controls table updated in the final commit.