LANE9 spec: still scales, the Roomba, the incident report, chair riding

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Monster Robot Party 2026-08-03 23:49:53 +10:00
parent 81c9c4a349
commit 8101cdb472

55
LANES/LANE9-fun-layer.md Normal file
View File

@ -0,0 +1,55 @@
# 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.