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> |
||
|---|---|---|
| game | ||
| LANES | ||
| tools | ||
| web | ||
| .gitignore | ||
| destroyulater.txt | ||
| README.md | ||
DESTROYULATOR
Clock out. Smash everything.
A comedic, non-violent, first-person workplace-destruction game from Monster Robot Party. Nobody gets hurt but the furniture.
The game is CUBICLE HELL. You work a shift doing deliberately infuriating office tasks. A rage meter fills. When it fills you snap, and you physically cannot go back to your desk until you've broken enough things. Then you sit back down and try to earn the rest of your day. Your score is your payslip: wages earned minus damages caused — so during a meltdown you want to wreck a lot of cheap rubbish rather than one expensive filing cabinet. Falling Down, scored by payroll.
Seven sites (Scranton branch, Pawnee city hall, a hacker house, a windowless IT
basement, a greengrocer where everything is soft except the bottles, the Backrooms — where the walls are procedurally generated and everything
you're there to destroy is invisible until you coat it in extinguisher powder, some of
which you breathe, and the real Monster Robot Party shop — imported live from the
storefront's own database, bins, genre labels and all) and four modes (Cubicle Hell, the Gauntlet, Total Destruction, Against the
Clock). Sites are data, not code — see game/scripts/Levels.gd.
Design, built and planned, lives in LANES/LANE7-cubicle-hell.md.
Monorepo layout — one lane per directory
| Dir | Lane | What |
|---|---|---|
game/ |
Lane 1 — the game | Godot 4.7 (Jolt physics, Mac-native). The shippable build. |
web/ |
Lane 3 — web toy | Three.js dig-and-destroy demo (planned; thriftgod-adjacent). |
tools/ |
asset build | Blender generators for the viewmodel + office props. Re-runnable. |
LANES/ |
coordination | Execution specs for parallel Claude/Opus work sessions. |
3D-STORE/ |
not in git | 700MB Blender/Unreal source-asset vault (see .gitignore). |
destroyulater.txt |
lore | The founding chat where the idea happened. |
Asset generation lives in its own repo: ~/Documents/meshgod (text→GLB factory). The
first-person arms are cut from ~/Documents/character_kit_modular (the GODVERSE modular
character kit) by tools/gen_fps_arms.py.
Rules for parallel work sessions
- A lane session writes ONLY inside its own directory. Cross-lane contracts
(asset formats, file drops) are specified in
LANES/*.md. - Every change to
game/must pass the headless smoke test before commit:Godot --headless --path game --quit-after 180with zero script errors. - GLB convention everywhere: glTF Y-up, 1 unit = 1 m, origin at floor-center.