# Destroyulator — Cascade Prototype Mac-first (Apple Silicon / Metal), **Godot 4.7**, **Jolt** physics. Built to prove two things on the M3 *before* committing: the destruction feels good, and the frame rate holds. ## Run it **Editor (easiest):** open `/Applications/Godot.app`, import this folder (`game/`), press **F5** / ▶. **CLI:** ```sh /Applications/Godot.app/Contents/MacOS/Godot --path /Users/m3ultra/Documents/Destroyulater/game ``` ## Controls | Input | Does | |---|---| | **Left-click** | Swing the (nerf) hammer at whatever's under the cursor | | **S** | Rain **500** rigid bodies — the **Day-0 stress gate**. Watch the FPS counter hold. | | **R** | Reset the rack | Top-left HUD shows **FPS · live body count · things smashed**. ## What it's proving — the cascade The rack is nested the same way your store's DB is (`rack → shelf → crate → jacket → record`): - **Frame + shelves** start *frozen* (act static, hold everything up). - Smash a **shelf** → it bursts into shards and vanishes → the **crates** on it fall → the **cardboard jackets** spill → the **vinyl records** tumble out → - **records are brittle** (`brittle_speed` in `Smashable.gd`) → they **crack a beat later when they smack the floor**. A record that lands flat *survives* — there's your comedy/score beat. No scripted "release" logic — gravity reads the hierarchy. That's the whole point. ## Files - `scripts/Smashable.gd` — one component for every breakable piece. The `PROFILES` table is where **material identity** is authored (color · shard count · brittleness · bounce). Swap `wood/cardboard/vinyl/glass/steel` behaviours here. - `scripts/Main.gd` — builds the world + rack from primitives, hammer raycast, stress test, HUD. ## Next step: real art (one function) Everything is grey primitives so it runs with zero import deps. To use your actual assets, change `_piece()` in `Main.gd` to load a GLB instead of building a BoxMesh, e.g. `load("res://assets/wooden-rack-type-long.glb").instantiate()` for the visual, keep the convex collider. Your `3D-STORE/clean_glbs/*.glb` are ready to copy into `game/assets/`.