feat: v2 — queue matchmaking, procedural audio, sprite archetypes, auth

- Add queue-based matchmaking with Elo-proximity and 10s timeout
- Procedural sound engine (SFX, voice announcer, 4-track music)
- Sprite system refactored into 6 archetypes (standard, lobster, sheep, cyborg, blob, tank)
- 42+ fight choreographies with themed/generic/wild card selection
- 4 KO finish styles, super-speed mode, hyperdetail close-ups
- Auth routes, JoinBout page, bot profile with stats
- 7-tier ranking system (Baby through Legend)
- Arena and challenge system expansions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-03-06 22:13:19 +00:00
co-authored by Claude Opus 4.6
parent 335c148866
commit 47d20fbe66
82 changed files with 14011 additions and 741 deletions
+35
View File
@@ -77,6 +77,41 @@ export const ARENAS: Arena[] = [
modifier: 'all_types',
modifierDescription: 'All round types can appear. Chaos mode.',
},
{
id: 'beach',
name: 'Byte Beach',
description: 'Palm trees, crashing waves, and a setting sun. Fights feel lazy until someone gets dunked.',
modifier: null,
modifierDescription: null,
},
{
id: 'desert',
name: 'Silicon Desert',
description: 'Endless sand dunes and cacti. The heat makes bots hallucinate even more than usual.',
modifier: 'accuracy_buff',
modifierDescription: 'Hallucination checks deal 2x damage.',
},
{
id: 'forest',
name: 'Binary Forest',
description: 'Ancient trees with LED bark. Fireflies carry encrypted messages through the undergrowth.',
modifier: null,
modifierDescription: null,
},
{
id: 'jungle',
name: 'Dependency Jungle',
description: 'Tangled vines of node_modules. One wrong step and you fall into a circular dependency.',
modifier: 'legacy_code',
modifierDescription: 'Code challenges require legacy syntax.',
},
{
id: 'outer_space',
name: 'Outer Space Station',
description: 'Zero gravity arena orbiting a dying star. Asteroids drift through the ring.',
modifier: 'latency_chaos',
modifierDescription: 'Random latency penalties added to both bots.',
},
]
export function pickArena(botAChoice: number, botBChoice: number): Arena {