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>
46 lines
2.6 KiB
Markdown
46 lines
2.6 KiB
Markdown
# 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`](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 180` with zero script errors.
|
|
- GLB convention everywhere: glTF Y-up, 1 unit = 1 m, origin at floor-center.
|