Replikker:
- To spioner siges i flertal ("Spionerne var ..."), også i den generiske
udgave; fanges den ene, og den anden slipper, er det en halv sejr
("Den ene spion er fanget, men den anden slap væk"), ikke "Agenterne
vinder". Storskærmens overskrift følger med.
- Er spionen gået i løbet af runden, siges "Spionen forlod missionen", og
navnet står stadig i afsløringen (motoren husker spionernes navne fra
rundens start; storskærmen viser dem uden farve).
- Fire små replikker skrevet om (vedkommende, "Måske er det ansigtet",
skarpeste øje = flest rigtige stemmer, vinderen gentog ikke den faste).
Ord: Spionen bruger ikke ord under tre bogstaver ("is", "fe"); de står inde
i for mange andre ord (isvaffel), til at stikordene kan holdes fri af dem.
Mad har 17 ord, Eventyr 15.
Test: speaker-testen kører uden rigtige ventetider (37 s til 4 s for hele
filen); skift-testen venter på det nye spils lobby i stedet for at gætte
på tiden.
deploy/bots.py --game spion: tilfældige stikord (prøver et andet, hvis det
afvises), tilfældige stemmer og gæt; værten forkorter snakken. En stemme,
der kommer et øjeblik efter, at fasen sluttede, er ikke en fejl.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
WPP_TTS_LIVE (settings.TTS_LIVE): auto (standard) eller off.
Én søm i BaseRoom._synth: kan en replik hverken findes i cachen eller laves
live, og kender den en generisk afløser (narrator.Line), siges en af de
generiske, der ligger i cachen. Rummets kø, afsløringens og oplæsningens
tidslinjer og drillerierne går alle igennem den, og storskærmen (og
telefonens drilleri) viser det, der faktisk siges. Et nyt spil får det ved
at bruge Narrator med sin egen generic.json.
tts:
- enabled() = der er en stemme (cachede klip kan spilles uden nøgle);
can_fetch() = nøgle og stemme (tts_warm og nye klip).
- off: kun cachen, aldrig et kald.
- auto: efter 401, 402, 429 eller timeout holdes der pause med live-kald i
fem minutter; saldoen tjekkes højst hvert femte minut i baggrunden, og
under LIVE_MIN_CREDITS laves intet live. Et spil venter aldrig på det.
Hjernen: dens replikker caches aldrig. Kan de ikke siges, siges den faste
replik, hjernen erstattede (hvis den er cachet), ellers dens generiske
udgave; drillerier falder tilbage til de faste drillerier. Hjernen selv
kaldes som før. Tegn og Gæt: afsløringens intro plus første kæde har en
generisk afløser med samme intro.
Tavse, når de ikke er forvarmet: oplæsningen af spørgsmålet og dets note,
oplæsningen af spillernes svar og hjernens slutanmeldelse.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Under afsløringen kom snapshots hurtigere, end en bot med en pause
efter hver besked kunne læse dem, og forbindelsen faldt (ping-timeout).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bots tegner tilfældige streger, gætter tilfældige ord, bruger af og
til forslaget og giver hjerter under afsløringen.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fest-spillet hedder nu Fest-Z (kategorierne "Fest-Z: …"), og telefonerne
får zoomer-emojis (💀😭🧢🗿💅🍻) i stedet for familie-sættet. Serveren
sender sættet i tilstanden, så klienten altid viser det, spillet tager imod.
Reglerne og speakeren taler om slang og memes frem for pop-sladder.
Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
Ny spørgsmålspakke "fest" (aldrig med i "Alle"): 43 faktatjekkede
spørgsmål om dansk pop i to kategorier, Fest: retro og Fest: nu.
Et fest-spil tæller tår ved siden af point: narret giver en tår,
ingen fandt sandheden giver alle en tår, gange rundens faktor
(finalen er en shot). Afsløringen, opsummeringen, stillingen og
telefonen viser tårene, og der er en pris til aftenens tørstigste.
Speakeren bruger zoomer-replikker (<begivenhed>_fest), egne regler
og FEST_VOICE_ID til alt.
Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
- 87 nye spørgsmål med kilder: Star Wars (inkl. Legends), Harry Potter,
Ringenes Herre, Lægevidenskab, E-faktura, IT-sikkerhed, Computerhistorie
- Spørgsmålspakker pr. kategori (familie, nørd, arbejde); værten vælger
Alle/Familie/Nørd, og arbejdspakken kun under "Flere valg"
- Lydeffekter i flere udgaver, der vælges tilfældigt (aldrig samme to gange
i træk); jingles og tænkemusik til de nye kategorier; ekstra tænke- og
afsløringsmusik
- Musik hentes og afkodes først, når den skal spilles, og slippes igen
- tts_warm --budget: forvarmer spørgsmål, forklaringer og kategori-replikker
(de næste spørgsmål først) inden for et tegnbudget
Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
- Runde 2 og finalen: speakeren læser svarene op ét ad gangen (med hjernen
en overbevisende kommentar pr. svar), i samme takt på storskærm og telefoner
- Emoji-reaktioner fra telefonerne, der må spammes; de flyver op på storskærmen
og tælles på svaret i fokus
- Opsummeringen følger speakeren: "lad os rydde op", eksplosioner, så pointene
- Speakeren kommenterer, hvordan løgnene skrider frem, uden at røbe indhold,
og driller dem, der falder for svage løgne
- Reglerne forklares med kort og stemme før rummets første spil
- "Lyv for mig" låser forslaget i feltet (halve point), og feltet bliver ikke
længere kæmpestort
- Svar vises med versaler, og spillernes løgne gemmes med små bogstaver, så
store forbogstaver ikke afslører dem
- Løgne og navne renses: kun bogstaver, tal og lidt tegnsætning
- Valgfrit workspace-id til Anthropic-brugernøgler
Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
Deploy-script og systemd-unit beskrev én bestemt installation og hører ikke
hjemme i et offentligt repo. README beskriver nu kravene til proxy og
headere generelt, og eksempelmiljøet bruger neutrale værdier.
Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
Vanilla JS uden build-trin: én WebSocket pr. skærm med automatisk
genforbindelse, tegner altid fra seneste snapshot. Storskærmen viser kode,
QR, nedtælling og en animeret afsløring; telefonen er bygget til store
knapper og genoptager sin plads efter genindlæsning. dev.html viser alle
faser uden server. deploy/ har systemd-unit, deploy-script og en bot-test,
der spiller et helt spil mod en kørende server.
Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
Den tidligere version (Angular-SPA, REST og polling) er gemt på branchen
legacy. Denne version samler alle regler i en ren Python-spilmotor
(fupogfakta/engine.py), holder rummene i hukommelsen i én proces og sender
hele spiltilstanden pr. rolle over én WebSocket. Vært-login sker via
Authentik forward-auth i NPMplus.
Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu