Commit Graph

8 Commits

Author SHA1 Message Date
type-two
e11a201d75 Attract mode: 6-page cab loop using the idle attract + villain art
The title screen now cycles every 7s like a real cabinet:
  0 SELECT   — logo + portrait class cards (playable page, maze visible behind)
  1 STORY    — the closing-down shop painting + the last-night premise
  2 BESTIARY — 8 grunts with names ("they are not here for the music")
  3 BOSSES   — the 5 unkillables ("the airhorn does not work on everything")
  4 ARCHIVE  — the descending-staircase painting + the White Label
  5 SCORES   — hall of fame, or "NO NAMES ON THE WALL YET"

Any key or tap snaps back to page 0; keys 1-4 start the game from any page, so
the attract loop never costs you a coin. Info pages get a dimmed backdrop and
label backgrounds so art reads instead of fighting the maze behind it.

Wires up attract_shop + attract_archive (generated in batch 3, never used).

Bug caught while verifying: the backdrop was pushed into 5 page arrays, but the
per-page visibility loop sets each object true for its page then false again for
every later page — last write wins, so it never appeared. Shared objects can't
live in the page arrays; it's toggled explicitly in showAttract now.

Verified: full 0-1-2-3-4-5-0 cycle runs unattended, any-key returns to select,
1-4 starts from any page with the right class sprite, no console errors.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 23:23:54 +10:00
type-two
df25531893 Art pass: wall variants, floor decals, per-class sprites, 2 idle villains
Texture audit found the real weakness: one wall texture repeated up to 316x per
maze, so levels read as wallpaper. Generated 26 more images on MODELBEAST (free,
local) and wired what was already sitting unused.

- 4 wall variants per theme (24 total), picked by a stable hash of tile position:
  neighbours differ, but a given tile keeps its texture across rebuilds
- 8 floor decals scattered on open tiles (5% density, seeded per level, tinted
  back to 0.45 alpha so litter never competes with sprites)
- Classes now have distinct SPRITES instead of colour tints (the 3 player
  variants were generated in batch 3 and never wired)
- Scalper (hunts gold only, flees with it) joins club/festival spawn tables;
  Fire Marshal (2nd wall-phasing stalker) appears in procgen from level 7
- Readability fix: CLUB NIGHT's fine checker floor read as noise under sprites.
  Regenerated a coarse one + per-theme floorTint so busy floors get knocked back.
- process_sprites skips not-yet-generated files instead of crashing the batch

39 -> 73 game textures. All verified in-browser: 316-wall maze splits evenly
across 4 variants, deterministic across rebuilds, per-class sprites, scalper
ignores espresso for gold, 71/71 assets load clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 22:56:22 +10:00
type-two
ea2bfd0eaa Tier 3: bosses, warehouse+festival themes, portrait title screen
- Title: FLUX marquee logo + 4 portrait class-select cards (keys 1-4 or tap)
- Themes 4-5: WAREHOUSE RAVE (shazam zombie turrets firing slow requests,
  gatekeeper tanks) and FESTIVAL GROUNDS (wobbling warped records); tune pools
  extracted for both (acid/tech-house/minimal, trance/big-beat/prog) -> 1008 tunes
- Spectral Conductor boss (level 8 of each 12-cycle): 20 HP, teleports to a
  corner every 5 hits, doubles generator rate + 1.5x enemy speed while alive
- The Monstrous 78 RPM (level 12): 30 HP, bounces Pong-style, spits warped
  shards, only vulnerable while "changing sides" (dimmed); killing it reveals
  THE WHITE LABEL (??? - ???) in the notebook and starts NG+ density
- Boss arenas have no exit until the boss falls - the booth appears where it died
- Fix: makeGlow crashes on scene restart (createCanvas returns null if key exists)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 19:27:34 +10:00
type-two
8e967407c1 Tier 2 complete: digging, treasure rooms, the Archive, infinite mazes
- Digging: hold E (or DIG touch button) by a crate wall, 2s rooted channel, once
  per tile. Loot: 70% +200 vibe, 25% gold record, 4% grail (full vibe), 1%
  bootleg (every bin on the level erupts).
- Treasure rooms: every 3rd level, 20s bonus room strewn with gold, no enemies,
  booth exits instantly, "CLOSING TIME" when the timer dies.
- THE ARCHIVE (4th theme): FLUX-generated dark tileset, real darkness via
  RenderTexture with radial glow holes at player + lamps, dust mites spawn in
  packs of 3, Mite Queen miniboss (12 HP, broods mites every 5s, airhorn-immune,
  drops 3 gold + 1000 pts). Archive tune pool: 195 dnb/hardcore/breakbeat/
  electro 12"s (718 total tunes now).
- Infinite: levels past the 4 authored maps are deterministic seeded mazes
  (recursive backtracker + loops + rooms), difficulty scales with depth.

All verified in-browser via engine stepping.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 17:35:42 +10:00
type-two
a1f4588deb Tier 2: the Trainspotter's Notebook — real records from discogs_full
assets/extract_tunes.py pulls 523 canon tunes (repress-count ranked, club pool
12"-only) into public/tunes.json across shop/fair/club genre pools; top ~8% of
each chunk flagged grail ("CERTIFIED CLASSIC", gold flash, 2000 pts). Level
clear reveals a real record (artist — title, label, year), the announcer speaks
it, and first IDs land in a persistent localStorage notebook (+1000). Title
screen shows notebook progress. Also: overlay/sub text got backgrounds for
readability, and prompt() is guarded for webviews that lack it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 17:17:34 +10:00
type-two
d903dd57ca Tier 1: classes, themes, pirates/ghouls, score, vibe states, touch
- 4 Gauntlet classes (stat tweaks + tint) with title-screen select (keys 1-4 or tap)
- Level themes cycle shop/fair/club: per-theme tilesets (9 idle sprites wired) and
  weighted enemy spawn tables
- Record Pirate (steals pickups, flees to its bin; kill = loot back + gold bonus)
  and Crate Ghoul (3 HP tank)
- Gold records ('R' tiles + pirate drops), score (kills/gold/clears), local top-5
  high-score table with initials on the title screen
- Vibe states: peak time = faster vinyl, burning out = slower + red vignette
- "Selector shot the espresso" (vinyl destroys food) + new announcer lines
- Mobile: Scale.FIT canvas, twin-stick touch (left = move, right = fire), HORN button

All mechanics regression-tested in browser via engine stepping.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 16:58:25 +10:00
type-two
8341bed22f Sharpen sprites: TILE 32->48, higher-res textures + unsharp pass
Regenerate textures at 48px (chars/walls), 96px floor, with an UnsharpMask to
counter the LANCZOS softening. Bump TILE to 48 so the whole world scales up and
sprites render bigger/crisper; scale movement + range constants x1.5 to keep the
same tiles-per-second feel, and collision bodies to 34px. Mechanics reverified.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 23:52:08 +10:00
type-two
9a42e0eaf8 Step 7: wire FLUX sprites into the game
Chroma-key magenta -> alpha, autocrop, downscale (assets/process_sprites.py ->
public/sprites/). GameScene loads image textures instead of drawing primitives:
tiled darkened floor, crate walls, digger/poser/nerd/sound-guy/booth/pickup
sprites. Bodies sized under the 32px sprites so corridors still fit. Mechanics
verified unchanged (combat, trainspot, level flow).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 23:39:40 +10:00