Commit Graph

2 Commits

Author SHA1 Message Date
0e80d393c1 LANE9: the grocer is still again — settle sweep + parked scale pans
probe_levels was red (0.15-0.48 m/s residual, grocer): the pin-jointed scale pans
hang neutrally balanced so the joint solve re-wakes them forever, and 310 packed
bodies (bottles on shelves, nested fruit) trade contact micro-jitter for seconds.
Two mechanisms, both one-shot at spawn, neither touching gameplay feel:

- scale pans PARK frozen once the joint has resolved (plain .sleeping doesn't stick
  — the joint re-wakes its island every frame) and unfreeze the first time the
  player comes within 1.7 m. You cannot see a pan swing from further than that.
- a settle sweep the frame the spawn-guard window closes: bodies drifting slower
  than 0.5 m/s are put to bed. Anything faster is left for the guard to name —
  a real mis-spawn still fails loudly.

probe_levels also names the culprit properly now ([class, parent] — name-collided
siblings all render as @RigidBody3D@N, which is how three different scale pans
masqueraded as one mystery body across runs).

All six sites: 0.00 m/s. probe_overlap: CLEAN.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-03 23:57:25 +10:00
4bcd7b49d9 LANE7: four workplaces, built from data
Office.gd is gone. Floorplan.gd consumes a spec Dictionary — bounds, palette, walls
with doors and glazing styles, window runs with mullions and blinds, ceiling style,
light grid and style, slabs, static props, desk clusters, chairs, level-specific
smashables and spawn — and Levels.gd holds four of them.

Making this data rather than four subclasses means a site is authorable in minutes,
levels can be diffed, and a real generator can later emit the same structure (a BSP
split of the footprint -> rooms -> doors on shared walls -> fittings by room type).
That was the actual answer to "can we use this git to generate plans": the repo John
found is OpenSCAD SVG->STL for 3D printing, with no generation, no plan parsing, no
room polygons and GPL-3.0, so it can't help — but Office.gd was already most of a
parametric plan builder, and lifting its numbers out is the real path.

The four sites are deliberately not reskins; they differ in the three things a player
actually reads — palette, light, and what the walls are made of:

  SCRANTON      magnolia, grey carpet, drop ceiling, fluorescent troffers, daylight
                down one glazed wall. The baseline.
  PAWNEE        civic beige and blue-grey, low partitions everywhere, a public
                counter, pinboards. Municipal and over-partitioned.
  THE INCUBATOR timber floor, white walls, 3 m ceiling, PENDANT lights, glass wall
                onto a pool. Nobody has an office; they work at a dining table.
  SUB-LEVEL 4   concrete, NO windows at all, exposed services, bare strip lights, a
                wall of server racks. The light is green and everything is junk.

L cycles sites in-game; _load_level tears down the shell, rebuilds, re-registers task
stations and re-arms the shift.

tools/gen_level_props.py adds ten more procedural props. The filing cabinet is the
important one: it exports as a CARCASS plus a separate DRAWER, each with its own
floor-centre origin, so the Gauntlet can pull a drawer out as its own rigid body and
spill the files. Also file folder, desk phone, guillotine, shredder, server rack,
sofa, wastebin, stapler.

dev/probe_levels.gd builds every level and reports residual motion after a full
second. All four read 0.00 m/s.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 17:58:41 +10:00