Commit Graph

7 Commits

Author SHA1 Message Date
Brian Fertig e1a5c21180 feat: add per-game soundtrack system and Nintendo music for Super Kart
- Introduce soundtrack override system allowing games to define custom music
- Add Nintendo-themed soundtrack for Super Kart (2 tracks with metadata)
- Make main menu track configurable via data/music.json instead of hardcoded
- Add MusicPlayer volume parameter for per-soundtrack volume control
- Lazy-load per-game audio assets via assetManifest on game entry
- Add SPACE/X keyboard shortcuts to advance Super Kart menus
- Play kart-spinner SFX when player picks up an item in Super Kart
- Increase speech queue volume to 1.0
- Add Super Kart icons artwork and additional music assets
2026-07-18 16:53:49 -06:00
Brian Fertig e4a4531401 feat(superkart): add post-race victory cam, engine audio, and polished results screens
- VictoryCamDirector: cinematic post-race camera system with shuffled
  shot types (chase, orbit, front, trackside) and hard-cut transitions;
  player can press ENTER to skip.
- Engine audio: per-racer engine hum (heavy/fast/medium) with pitch
  tracking based on kart speed; engine-start sound at green light.
- Star power loop sound that stops when star expires.
- Positional audio: AI kart sounds (spin, hit, flatten) scale volume
  with distance from player.
- Enhanced event sounds: item-use, boost, EMP, squash, bump, coin,
  star now play appropriate SFX.
- Player kart autopiloted after finishing for victory-lap vignette;
  race phase waits for entire field (up to 90s safety cap).
- EMP now emits target list for per-target shrink sounds; squash
  collision emits event.
- Animated race results screen with staggered row reveals.
- Animated cup standings with running point counter and position
  arrows; tweens rows to new ranks.
- Podium reveal: 3rd → 2nd → 1st staggered with confetti, count-up,
  and CRT pulse; winner speech plays.
- Mode7 camera now tracks height and focal length; setCamera accepts
  arbitrary poses for cinematic shots.
- New audio assets: engine-start/heavy/fast/medium/rev, kart-coin,
  kart-flatten, kart-thump, kart-shrink, kart-spin, kart-hit,
  kart-shell, kart-star.
2026-07-18 15:24:49 -06:00
Brian Fertig 30629380b4 feat(civilization): add coinage/public works special builds + fix AI fallback
- Add Coinage (1 shield → 1 gold) and Public Works (2 shields → 1 food)
  special build options for cities, with remainder carry logic in shieldBox
- Update AI to fall back to producing gold or food instead of stockpiling
  redundant defenders when nothing else is available
- Fix mid-build detection to check build.type before comparing shield progress
- Add City Screen UI for special builds: display gain per turn, color-coded
  rows, and tooltips
- Only apply class-switch penalty when switching between unit/building
  production types
- Add verification tests for coinage payout, public works remainder carry,
  and AI special build fallback

feat(superkart): fix player kart scale + add missing backdrop images

- Compute PLAYER_KART_SCALE from MODE7 parameters instead of hardcoding,
  keeping player and AI karts consistent at the camera's follow distance
- Wire up previously null backdrops: volcano, scrapyard, swamp, speedway,
  nightcity
2026-07-18 09:08:26 -06:00
Brian Fertig a0316bf467 feat: add mini-turbo boost mechanic to drifting
- Track drift charge duration while sliding and payout a speed boost
  when the drift is released cleanly (not stalled or reversed)
- Boost strength scales with drift duration, capped at maximum charge
- Added configurable mini-turbo parameters (min/max ms, boost ms,
  boost multiplier range) to superkart-rules.json
- Increase drift visual rotation angle from 6° to 14° for more
  pronounced drift feedback
- Reset charge on respawn, spin, and new drift start
2026-07-17 22:04:43 -06:00
Brian Fertig 29d18c9c5f refactor: reduce kart rotation frames from 16 to 8 and add racer artwork
- Add new racer spritesheets (8 angles × 64×64) for all 9 racers
- Introduce KART_ROT_FRAMES constant as single source of truth for rotation frame count
- Update SuperKartMode7.angleFrame(), SuperKartGame frame math, and procedural fallback
  to derive from KART_ROT_FRAMES instead of magic numbers
- Update data/superkart-artwork.json with asset paths and 8-angle metadata
- Update sprites.md documentation to reflect 8-view-angle contract
2026-07-17 21:38:18 -06:00
Brian Fertig 81145d7891 Add custom background artwork to Super Kart menu screens
- Add superkart-background.png image asset
- Replace solid-color rectangle background with artwork in menu views
- Add semi-transparent shade overlay for better contrast
- Remove hardcoded title and tagline text (now baked into the image)
2026-07-17 15:09:01 -06:00
Brian Fertig 5380a8eab4 feat: add Super Kart — SNES-style Mode 7 kart racing game
Complete kart racing game featuring 12 procedurally generated tracks
across 3 cups, 9 unique racers with distinct stats, headless physics
simulation, and a secret track editor (?superkart-editor=1).

Core features:
- Mode 7 ground renderer with parallax horizon backdrops
- 12 hand-tuned tracks (speedway, beach, swamp, scrapyard, volcano, nightcity)
- 9-racer roster with balanced archetypes (all-rounder, drift pirate, etc.)
- Headless race simulation for deterministic AI and headless verification
- Item system (bolt, seeker, oil, turbo, overdrive, emp, coins)
- Position-weighted item roulette and rubber-banding
- AI opponents with skill-based driving and stuck-recovery
- Full track editor with live preview, validation, and export
- 275 verification checks covering schema, physics, AI soak, and determinism

Data files: data/superkart-racers.json, superkart-rules.json, superkart-artwork.json
Game data: assets/gamedata/superkart/ (cups.json + 12 track files)
Tools: genSuperKartTracks.js, verifySuperKart.js
2026-07-17 14:25:18 -06:00