fix: human fight timing, creative timer, TTS reliability, add sweary/vibe narrations

- Fix invisible characters in human mode: init live scene BEFORE starting
  challenge polling so entrance plays before first question appears
- Cap creative writing timer to 10s for multiple choice (just tapping buttons)
- Fix TTS reliability: precache priority phrases (Round 1-7, Fight!, K.O.)
  all at once instead of in slow batches; prevent duplicate precache runs
- Add 10 vibe-coded narrations (~20% chance): "I was vibe coded into existence"
- Add 15 sweary narrations (~30% chance): raw unhinged fight commentary
- Add sweary draw and retro narrations

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-03-09 13:50:24 +00:00
co-authored by Claude Opus 4.6
parent 3ba05a66b4
commit a2416bbe19
5 changed files with 85 additions and 9 deletions
+15 -1
View File
@@ -430,6 +430,10 @@ watch(liveFightData, async (val) => {
await nextTick()
await nextTick()
await initLiveScene()
// For human fights, start challenge polling after scene is ready
if (isHumanFight.value) {
startHumanPolling()
}
const queued = pendingSSEEvents.value.splice(0)
for (const evt of queued) {
if (evt.type === 'round_end') await handleRoundEnd(evt.data)
@@ -465,8 +469,18 @@ onMounted(async () => {
if (isLive.value) {
startPolling({ onFinished: () => stopHumanPolling(), onTimeout: () => stopHumanPolling() })
if (isHumanFight.value) {
startHumanPolling()
wireSSE()
// Init scene first, then start challenge polling — ensures entrance
// plays before the first question appears (characters invisible otherwise)
if (liveFightData.value) {
await nextTick()
await nextTick()
await initLiveScene()
}
// Only start polling after scene is ready (or watcher will start it when liveFightData arrives)
if (liveSceneReady.value) {
startHumanPolling()
}
}
}
})