fix: fight restart bug, mobile TTS, character sizing, bitcoin symbols

- Fix fight replay showing empty scene: validate rounds before playing,
  retry loading fight data up to 5 times when rounds are missing
- Add COOP/COEP headers to production server for SharedArrayBuffer
  (required by Kokoro TTS WASM threading on mobile)
- Add blob: to scriptSrc/workerSrc CSP for Web Worker support
- Fix mobile character cutoff: raise ground line to 0.82, add
  MOBILE_SCALE_CAP (0.55) so fighters never shrink too small
- Add ₿ bitcoin chest badge to all fighter sprites (scales with tier)
- Add sats coin stack on bot profile page proportional to satsWon
- Seed dev tournament with 8 mock bots on startup (dev mode only)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-03-09 08:21:16 +00:00
co-authored by Claude Opus 4.6
parent a10c1c9cb6
commit 5ee6b6c88c
10 changed files with 141 additions and 16 deletions
+28 -7
View File
@@ -201,14 +201,35 @@ export function generateSpriteSheet(
if (tier >= 3) { px(cx + hOff, beltY, '#ffd700', ox, oy); px(cx + hOff + 1, beltY, '#ffd700', ox, oy) }
}
// Chest emblem (tier 4+)
if (tier >= 4) {
// ₿ Bitcoin chest badge — every fighter carries the symbol
{
const ey = by + Math.round(bh * 0.3)
px(cx + hOff - 1, ey, pal.acc, ox, oy)
px(cx + hOff, ey, pal.accLight, ox, oy)
px(cx + hOff + 1, ey, pal.acc, ox, oy)
px(cx + hOff, ey - 1, pal.acc, ox, oy)
px(cx + hOff, ey + 1, pal.acc, ox, oy)
const ec = cx + hOff
// Tier 0-1: simple orange ₿ dot
// Tier 2-3: small ₿ shape (vertical bar + bumps)
// Tier 4+: full golden ₿ with glow
if (tier >= 4) {
// Golden glow behind
px(ec - 2, ey, '#ffd70066', ox, oy)
px(ec + 2, ey, '#ffd70066', ox, oy)
px(ec, ey - 2, '#ffd70066', ox, oy)
px(ec, ey + 2, '#ffd70066', ox, oy)
}
const bc = tier >= 4 ? '#ffd700' : tier >= 2 ? '#ff8c00' : '#ff6600'
// Vertical stroke
px(ec, ey - 1, bc, ox, oy)
px(ec, ey, bc, ox, oy)
px(ec, ey + 1, bc, ox, oy)
// Right bumps (₿ shape)
if (bw >= 6) {
px(ec + 1, ey - 1, bc, ox, oy)
px(ec + 1, ey + 1, bc, ox, oy)
}
// Top/bottom serifs
if (tier >= 2) {
px(ec, ey - 2, tier >= 4 ? '#ffd700' : '#cc7000', ox, oy)
px(ec, ey + 2, tier >= 4 ? '#ffd700' : '#cc7000', ox, oy)
}
}
// Shoulder pads (tier 3+)