Commit Graph

5 Commits

Author SHA1 Message Date
5852322606 Restructure into monorepo: game/ is the Godot lane
Repo root moves up from game/ to the project folder. Lanes live as top-level
dirs (game/ now, web/ planned); LANES/ will hold parallel-session specs.
3D-STORE asset vault stays out of git. History preserved as renames.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 15:33:13 +10:00
b78ea04183 Records wear real sleeves: Nano Banana art atlases + UV-tile skinning
- assets/art/sleeves_{a,b}.jpg: two 3x3 sheets of ORIGINAL fictional album
  covers (18 total — dub, techno, metal, jazz, punk, synthwave, hip-hop,
  psych, ambient, northern soul, krautrock, disco, white-label, bossa,
  UKG, country, noise) generated with Gemini gemini-3-pro-image. No real
  artists/albums — copyright-clean destructible content.
- assets/art/keyart.jpg: DESTROYULATOR title key art ("CLOCK OUT. SMASH
  EVERYTHING.") for a future title screen.
- Main.gd _skin_record(): records duplicate their M_Sleeve_Front/Back
  materials and window one random atlas tile via uv1_scale/uv1_offset —
  one texture in VRAM serves nine covers, every record looks different.
- Verified headless: boots clean, "[art] records skinned: 15" (all of
  them). The two dummy-renderer "material is null" prints are headless-
  only (override materials have no RID in the dummy backend). Eyeball a
  sleeve in the editor — if the art renders rotated, flip uv1 here.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 23:24:11 +10:00
7c88e8371d Bring in real store art: Monster Robot Party racks, crates, records
- game/assets/store/{rack,crate,record}.glb from the 3D-STORE library
- _glb_piece(): instances a GLB as a Smashable's visual, auto-fits a box
  collider to the mesh AABB, and drops it flush to the floor (no hardcoded dims)
- _build_rack now assembles two smashable racks + crates of records on the floor
- cascade preserved: smashing a crate spills the records stacked on it

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 00:39:46 +10:00
cc5b118d71 Add juice layer: hitstop, screenshake, particles, procedural audio, combos
Juice.gd — the feel system, driven off Smashable.smashed (purely additive):
- Hitstop freeze-frame on every impact (time_scale dip, released in real time)
- Screenshake with quadratic trauma falloff, scaled by shard count
- Per-material GPU particle bursts, colored from the PROFILES table
- Procedural impact audio synthesized in code per material — no sound files,
  the dig.js trick: wood crunch, cardboard rip, vinyl crack+warble, glass tinkle, steel ring
- Combo counter on the HUD

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 00:29:17 +10:00
a8b735f79e Destroyulator prototype: first-person cascade smasher (Godot 4.7)
Mac-native (Apple Silicon / Metal), Jolt physics.
- First-person controller + semi-opaque viewmodel hands
- Punch (L-click) / kick (R-click) via a swappable MeleeAttack resource
- Structural support-graph cascade: knock the legs -> the rack pancakes
- Brittle vinyl records shatter on hard impact
- Day-0 stress gate (B: rain 500) — holds 60fps on the M3 Ultra

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 00:25:35 +10:00