The level the whole game started as, and the only one that isn't authored.
robotmonster.party/store/ is assembled procedurally from Postgres (the wowplatter
virtual_* schema, served by recordgod), and this game's sites are already data — so
tools/import_store.py reads the live shop and emits assets/store/shop_floor.json:
the actual 6.66 x 9.51 m floor, 35 racks across 21 archetypes, 278 bins carrying
their real genre labels (HARD TRANCE, $12-$15 EURO/ITALO HOUSE), 21,159 records
of stock. Levels.record_store() loads it; 'store' joins ORDER as the seventh site.
The shop's schema IS the cascade. virtual_crate.rack_id already records which rack
holds which bin, so bins arrive frozen and supported_by their rack and none of the
structure is authored. To carry that, smashables gained two optional generic keys —
'id' and 'supported_by' — so any level can express support as data. Every existing
level is unaffected.
Two reconciliations, because a storefront is a renderer:
- Mesh sizes are a lie: 21 archetypes share a few stand-in GLBs, so each piece
carries 'fit' (the archetype's real dims from the shop's table) and _glb_piece
scales the visual to it and builds the collider from it. Also fixed racks being
flattened to the floor — pos_y is a piece's BOTTOM, which is what sit_on means,
so the ceiling beams, aircon and wall shelves now stay up where they belong.
- Nothing collides in a renderer: racks that sat inside each other for years get
separated (weighted, so racks barely move and aisles keep their shape — 3 m of
correction across 35), rack footprints inset 1.5 cm a side for the few genuinely
wedged units, and the importer AUDITS ITS OWN OUTPUT with the same test
probe_overlap runs. Bins are deliberately not separated from their rack: cargo
inside a container is what the shop means, they spawn frozen, and the audit skips
frozen bodies because a frozen body cannot be depenetrated across the room.
dev/probe_store.gd: 22 racks hold bins, 255 labels survived, and smashing the rack
carrying 22 bins releases exactly those 22 while the other 256 stay frozen.
All gates green: smoke clean, 7/7 sites 0.00 m/s, overlap CLEAN, LANE9 probes pass.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>