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:
parent
81c9c4a349
commit
8101cdb472
55
LANES/LANE9-fun-layer.md
Normal file
55
LANES/LANE9-fun-layer.md
Normal 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.
|
||||||
Loading…
Reference in New Issue
Block a user