threetris/README.md
type-two c1ef9e4dc4 Sentinel attack runs: duck or die
From level 3, flybys can become attack runs — klaxon + red 'SENTINEL —
DUCK' warning, red eye-light, then a fast sweep across the play plane
at the head height it locked at spawn. Hit costs a life; surviving
pays +25. Attack chance scales with level (25% + 5%/level, cap 70%).
Verified both outcomes via scripted playtest.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 12:21:27 +10:00

1.7 KiB
Raw Blame History

THREETRIS

POV Matrix tetris. Bricks fly at your face in bullet time — catch the green ones, dodge the red agents (they home in on you; touching them hurts), then throw caught bricks back through the hole in the oncoming wall, rotating them mid-flight so their silhouette fits exactly. Flat tetrominoes + full 3D rotation means pitching a piece changes its silhouette (an I-piece end-on is a 1×1 hole).

Play: open index.html over http (python3 -m http.server), any modern browser. No build step — single file, Three.js from CDN.

  • Mouse — move your head (dodge / reach)
  • Click — catch an incoming green brick, or throw the held brick
  • W/S · A/D · Q/E — pitch / yaw / roll 90°, works while held and mid-flight
  • Catch +25 · fit +100 × combo · dodge an agent +10 · 3 lives. Speed and agent frequency ramp per fit; consecutive fits build the combo multiplier.
  • From level 3 the sentinel attacks: klaxon + red warning, then it sweeps the play plane at the height your head was at when it locked on. Duck out of the band or lose a life; surviving pays +25.

Assets (all generated free & local on MODELBEAST)

Everything in assets/ came off the local render farm — FLUX (logo, circuit-board brick texture, city backdrop, sentinel concept art), RMBG background removal + Hunyuan3D image→GLB (the sentinel flyby), Kokoro TTS (operator voice lines), ACE-Step (music loop). Procedural Web Audio covers the small SFX. The game degrades gracefully if assets/ is missing — flat colors, no music, same gameplay.

Cheats/debug in console: _g (state), _auto() (rotate held brick to fit), _m(x,y) (move head), _start() (skip title).