Forudskrevne kommentarer til oplæsningen og flere faste replikker
CI / test (push) Successful in 53s

- Alle 232 spørgsmål har en kort, overbevisende kommentar til sandheden og
  hver af husets løgne (1.015 i alt, ens tone og lige mange lyd-tags), så
  lyden kan ligge i cachen; hjernen spørges kun om spillernes egne løgne.
  Mangler blot én kommentar, bruges skabelonerne til alle svar, så stilen
  aldrig røber, hvem der har skrevet hvad
- Bemærkninger, når en løgn afleveres, er nu faste replikker med navnet
  (også uden hjerne); hjernens udgave er et tilvalg (BRAIN_PROGRESS)
- Telefonens drillerier bruger en fast pulje på 28 (BRAIN_TEASES slår
  hjernens til)
- Flere varianter til opsummering, oplæsning, velkomst og spil igen
- Én fælles liste over tilladte lyd-tags
- Lukkede forbindelser logges ikke længere som fejl

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
This commit is contained in:
agw
2026-10-03 20:12:07 +02:00
parent a611215e3c
commit ba1fa259d9
13 changed files with 2209 additions and 594 deletions
File diff suppressed because it is too large Load Diff
+490 -70
View File
@@ -14,7 +14,13 @@
"søster",
"mor"
],
"note": "Edvard Eriksens hustru Eline stod model til kroppen; ballerinaen Ellen Price til hovedet."
"note": "Edvard Eriksens hustru Eline stod model til kroppen; ballerinaen Ellen Price til hovedet.",
"pitch": {
"kone": "Kunstnere tager jo bare den model, der er nærmest.",
"datter": "Ung og drømmende, det passer jo fint til eventyret.",
"søster": "Familien måtte jo stille op, modeller var dyre.",
"mor": "[whispers] Hvem ellers ville sidde stille på en sten så længe?"
}
},
{
"category": "Danmark",
@@ -31,7 +37,13 @@
"Alexander 1.",
"Nikolaj 1."
],
"note": "Peter den Store red op i Rundetårn i 1716, og zarinaen fulgte efter i karet."
"note": "Peter den Store red op i Rundetårn i 1716, og zarinaen fulgte efter i karet.",
"pitch": {
"Peter den Store": "[laughs] Den slags stunt kræver en zar med selvtillid.",
"Ivan den Grusomme": "Han var vist ikke typen, der gad gå trapper.",
"Alexander 1.": "Han elskede jo prestige og store indtog til hest.",
"Nikolaj 1.": "Russiske kejsere holdt jo meget af danske besøg."
}
},
{
"category": "Danmark",
@@ -47,7 +59,13 @@
"domprovst",
"hofnar"
],
"note": "Ole Rømer blev i 1705 udnævnt til politimester i København."
"note": "Ole Rømer blev i 1705 udnævnt til politimester i København.",
"pitch": {
"politimester": "Han holdt jo øje med alt, også med københavnerne.",
"bøddel": "[suspicious] Stjernekiggere er stille typer, man skal passe på dem.",
"domprovst": "Himlen var hans speciale, både den med stjerner og engle.",
"hofnar": "Videnskabsfolk var jo kongens underholdning dengang."
}
},
{
"category": "Danmark",
@@ -62,7 +80,13 @@
"kviksølv",
"saltsyre"
],
"note": "George de Hevesy opløste von Laues og Francks guldmedaljer i kongevand; guldet blev senere genvundet og medaljerne støbt på ny."
"note": "George de Hevesy opløste von Laues og Francks guldmedaljer i kongevand; guldet blev senere genvundet og medaljerne støbt på ny.",
"pitch": {
"kongevand": "[impressed] Lyder fornemt nok til en Nobelpris, ikke?",
"svovlsyre": "Den stærkeste flaske på hylden, naturligvis.",
"kviksølv": "Sølv opløser guld, det er da ren logik.",
"saltsyre": "Fysikere har altid en flaske stående i skabet."
}
},
{
"category": "Danmark",
@@ -78,7 +102,13 @@
"Narnia",
"Harry Potter"
],
"note": "Dronningens tegninger blev brugt i den danske udgave af Tolkiens Ringenes Herre fra 1977."
"note": "Dronningens tegninger blev brugt i den danske udgave af Tolkiens Ringenes Herre fra 1977.",
"pitch": {
"Ringenes Herre": "Hun elsker jo lange historier med mange kapitler.",
"Peter Pan": "En dronning forstår sig da på aldrig at blive voksen.",
"Narnia": "Kongeriger og troner, det kender hun alt til.",
"Harry Potter": "[chuckles] Hun har vist altid haft en tryllestav i tasken."
}
},
{
"category": "Danmark",
@@ -96,7 +126,13 @@
"et ben",
"sin højre hånd"
],
"note": "Kongen blev ramt af splinter og mistede sit højre øje, men blev på dækket af Trefoldigheden."
"note": "Kongen blev ramt af splinter og mistede sit højre øje, men blev på dækket af Trefoldigheden.",
"pitch": {
"et øje": "Han kiggede vist lidt for nysgerrigt efter fjenden.",
"en arm": "Den svingede han også alt for vildt med.",
"et ben": "[sighs] Det er svært at stå fast på et skibsdæk.",
"sin højre hånd": "Så måtte han skrive kongebreve med venstre."
}
},
{
"category": "Danmark",
@@ -112,7 +148,13 @@
"skjorteærmer",
"skolisser"
],
"note": "Efter brudevalsen løfter gæsterne brudgommen og klipper tæerne af hans sokker."
"note": "Efter brudevalsen løfter gæsterne brudgommen og klipper tæerne af hans sokker.",
"pitch": {
"sokker": "De stikker jo frem, når han danser brudevals.",
"seler": "[mischievously] Så må han holde bukserne oppe selv resten af natten.",
"skjorteærmer": "Så kan han endelig smøge dem op til festen.",
"skolisser": "Så slipper han aldrig væk fra bruden."
}
},
{
"category": "Danmark",
@@ -127,7 +169,13 @@
"karry",
"sukker"
],
"note": "Pebersvende og pebermøer får kanel som 25-årige; som 30-årige bliver det peber."
"note": "Pebersvende og pebermøer får kanel som 25-årige; som 30-årige bliver det peber.",
"pitch": {
"kanel": "[whispers] Lidt krydderi skal der til, når man er alene.",
"kakao": "Passer til en, der stadig drikker varm chokolade.",
"karry": "Man skal da have lidt kulør på tilværelsen.",
"sukker": "Så bliver man i det mindste lidt sødere."
}
},
{
"category": "Danmark",
@@ -142,7 +190,13 @@
"skrivetavle",
"trykpresse"
],
"note": "Præsten Rasmus Malling-Hansens skrivekugle var en af de første kommercielle skrivemaskiner; Nietzsche brugte en i 1882."
"note": "Præsten Rasmus Malling-Hansens skrivekugle var en af de første kommercielle skrivemaskiner; Nietzsche brugte en i 1882.",
"pitch": {
"skrivekugle": "Rund og mystisk, ligesom hans tanker.",
"stenografimaskine": "Han tænkte jo hurtigere, end andre kunne skrive.",
"skrivetavle": "Så kunne han viske de dårlige ideer ud igen.",
"trykpresse": "[impressed] Store tanker kræver store maskiner, det siger sig selv."
}
},
{
"category": "Danmark",
@@ -156,7 +210,13 @@
"1843",
"1652"
],
"note": "Bakken opstod omkring Kirsten Piils Kilde, der blev fundet i 1583 og trak folk til."
"note": "Bakken opstod omkring Kirsten Piils Kilde, der blev fundet i 1583 og trak folk til.",
"pitch": {
"1583": "Gammel nok til at karrusellerne knirker lidt.",
"1721": "Lige på den tid, hvor man begyndte at more sig.",
"1843": "Et årstal, der dufter af brændte mandler.",
"1652": "[curious] Midt i et århundrede, hvor folk trængte til sjov."
}
},
{
"category": "Danmark",
@@ -172,7 +232,13 @@
"besvimet",
"i trance"
],
"note": "Andersen led af en stærk frygt for at blive erklæret død og begravet levende."
"note": "Andersen led af en stærk frygt for at blive erklæret død og begravet levende.",
"pitch": {
"skindød": "[sarcastic] Han var jo altid en smule dramatisk, ham Andersen.",
"i dvale": "Som en bjørn, der bare tager en lang lur.",
"besvimet": "Han var trods alt en meget følsom herre.",
"i trance": "Digtere svæver tit rundt i deres egen verden."
}
},
{
"category": "Danmark",
@@ -188,7 +254,13 @@
"guldtænder",
"øreringe"
],
"note": "Frederik 9. var søofficer og fik bl.a. en drage tatoveret, hvilket var velkendt."
"note": "Frederik 9. var søofficer og fik bl.a. en drage tatoveret, hvilket var velkendt.",
"pitch": {
"tatoveringer": "En rigtig sømand tager altid lidt med hjem fra havnen.",
"papegøjer": "Hver sømand med respekt for sig selv har en.",
"guldtænder": "[chuckles] Så kunne han smile kongeligt til hele flåden.",
"øreringe": "Det hørte sig til på de syv verdenshave."
}
},
{
"category": "Danmark",
@@ -203,7 +275,13 @@
"finger",
"hage"
],
"note": "I 1566 duellerede den unge Tycho med fætteren Manderup Parsberg og mistede en del af næsen."
"note": "I 1566 duellerede den unge Tycho med fætteren Manderup Parsberg og mistede en del af næsen.",
"pitch": {
"næse": "Han stak den vist lidt for langt frem.",
"øre": "Så kunne han kun høre halvdelen af fornærmelserne.",
"finger": "En astronom peger jo hele tiden op på stjernerne.",
"hage": "[sarcastic] Han tog slaget med hovedet højt hævet, naturligvis."
}
},
{
"category": "Sprog og ord",
@@ -219,7 +297,13 @@
"hollandsk",
"finsk"
],
"note": "Hygge kom ind i dansk fra norsk omkring 1800, med rod i norrønt hugga, 'trøste'."
"note": "Hygge kom ind i dansk fra norsk omkring 1800, med rod i norrønt hugga, 'trøste'.",
"pitch": {
"norsk": "Naboerne har lange, mørke vintre at hygge sig i.",
"tysk": "Gemytlighed og hygge er næsten tvillinger.",
"hollandsk": "[mischievously] De har også styr på stearinlys og kakao.",
"finsk": "Sauna og tæpper, hvad mere kan man ønske sig?"
}
},
{
"category": "Sprog og ord",
@@ -236,7 +320,13 @@
"maskine",
"tjener"
],
"note": "Karel Čapek brugte ordet i skuespillet R.U.R. (1920); tjekkisk robota betyder hoveri/tvangsarbejde."
"note": "Karel Čapek brugte ordet i skuespillet R.U.R. (1920); tjekkisk robota betyder hoveri/tvangsarbejde.",
"pitch": {
"tvangsarbejde": "[suspicious] En robot holder aldrig fri, stakkels fyr.",
"jernmand": "Lyder som en superhelt fra en gammel tegneserie.",
"maskine": "Det ligger da lige for, når man tænker over det.",
"tjener": "Den skal bare hente kaffe og rydde op."
}
},
{
"category": "Sprog og ord",
@@ -250,7 +340,13 @@
"fisk",
"orm"
],
"note": "Latin musculus betyder 'lille mus'; en spændt muskel blev sammenlignet med en mus under huden."
"note": "Latin musculus betyder 'lille mus'; en spændt muskel blev sammenlignet med en mus under huden.",
"pitch": {
"mus": "Den piler rundt under huden, når du spænder.",
"slange": "Den snor sig fint rundt om knoglerne.",
"fisk": "[suspicious] Den spræller jo, når man spænder armen.",
"orm": "Lang, tynd og lidt vrikkende, når man træner."
}
},
{
"category": "Sprog og ord",
@@ -266,7 +362,13 @@
"gift",
"kur"
],
"note": "Latin vacca = ko; Edward Jenner brugte kokopper til at vaccinere mod kopper."
"note": "Latin vacca = ko; Edward Jenner brugte kokopper til at vaccinere mod kopper.",
"pitch": {
"ko": "Landbruget har altid været foran lægerne, det ved alle.",
"nål": "[sighs] Det er den del, alle børn husker bedst.",
"gift": "Lidt af det onde for at gøre godt, kloge romere.",
"kur": "Logisk nok, det er jo det, det hele handler om."
}
},
{
"category": "Sprog og ord",
@@ -280,7 +382,13 @@
"Ares",
"Dionysos"
],
"note": "Hyrdeguden Pan kunne ifølge grækerne sprede pludselig, ustyrlig rædsel."
"note": "Hyrdeguden Pan kunne ifølge grækerne sprede pludselig, ustyrlig rædsel.",
"pitch": {
"Pan": "Kort og godt, ligesom et råb i mørket.",
"Hermes": "Budbringeren kom altid med dårlige nyheder i sidste øjeblik.",
"Ares": "[excited] Krigens gud skaber vel panik som ingen anden.",
"Dionysos": "Hans fester endte altid i rent kaos."
}
},
{
"category": "Sprog og ord",
@@ -295,7 +403,13 @@
"Louis Nicolet",
"Jacques Tobin"
],
"note": "Jean Nicot, fransk gesandt i Portugal, sendte tobak til det franske hof omkring 1560."
"note": "Jean Nicot, fransk gesandt i Portugal, sendte tobak til det franske hof omkring 1560.",
"pitch": {
"Jean Nicot": "[curious] En rigtig diplomat med flot overskæg, kan man forestille sig.",
"Pierre Tabard": "Lyder som en mand, der altid havde pibe i munden.",
"Louis Nicolet": "Navnet klinger da helt rigtigt, ikke?",
"Jacques Tobin": "Fransk nok til at være sandt, vil jeg mene."
}
},
{
"category": "Sprog og ord",
@@ -315,7 +429,13 @@
"al-Biruni",
"Omar Khayyam"
],
"note": "Den persiske matematiker al-Khwarizmi (ca. 780-850) blev på latin til 'Algoritmi'."
"note": "Den persiske matematiker al-Khwarizmi (ca. 780-850) blev på latin til 'Algoritmi'.",
"pitch": {
"al-Khwarizmi": "Han regnede sikkert hurtigere end din lommeregner.",
"Ibn Sina": "Et klogt hoved, der kunne lidt af hvert.",
"al-Biruni": "[impressed] En mand, der elskede tal til morgenmad.",
"Omar Khayyam": "Digter og matematiker, en rigtig alsidig herre."
}
},
{
"category": "Sprog og ord",
@@ -332,7 +452,13 @@
"lyskarm",
"husøje"
],
"note": "Norrønt vindauga = vind + øje, et hul i taget hvor vinden kom ind."
"note": "Norrønt vindauga = vind + øje, et hul i taget hvor vinden kom ind.",
"pitch": {
"vindøje": "Huset skal jo også kunne kigge ud, ikke?",
"vindhul": "Rent praktisk, vikingerne var ikke til pynt.",
"lyskarm": "[chuckles] Selv vikinger ville have lidt lys til morgenkaffen.",
"husøje": "Et hus med øjne, det er da poetisk."
}
},
{
"category": "Sprog og ord",
@@ -349,7 +475,13 @@
"syv uger",
"lukket havn"
],
"note": "I Venedig skulle skibe under pest ligge isoleret i quaranta giorni, 40 dage."
"note": "I Venedig skulle skibe under pest ligge isoleret i quaranta giorni, 40 dage.",
"pitch": {
"fyrre dage": "Lang nok til at kede sig gevaldigt.",
"tretten dage": "[mischievously] Et uheldigt tal til en uheldig tid.",
"syv uger": "Italienerne tager sig altid god tid.",
"lukket havn": "Skibene måtte bare vente pænt udenfor."
}
},
{
"category": "Sprog og ord",
@@ -365,7 +497,13 @@
"hyrdekald",
"bordbøn"
],
"note": "Gælisk sluagh-ghairm = 'hærens råb', klanernes krigsråb."
"note": "Gælisk sluagh-ghairm = 'hærens råb', klanernes krigsråb.",
"pitch": {
"krigsråb": "[excited] Skotterne var aldrig kendt for at hviske!",
"kampsang": "Med sækkepiber og det hele, kan man forestille sig.",
"hyrdekald": "Der er flere får end folk deroppe.",
"bordbøn": "Skotter siger tak for maden med stor alvor."
}
},
{
"category": "Sprog og ord",
@@ -383,7 +521,13 @@
"blæk",
"tandpulver"
],
"note": "Kohl var fint antimonpulver til øjensminke; senere kom ordet til at betyde 'essensen' af et stof."
"note": "Kohl var fint antimonpulver til øjensminke; senere kom ordet til at betyde 'essensen' af et stof.",
"pitch": {
"øjensminke": "Man skulle jo se godt ud i ørkensolen.",
"krudt": "Sort pulver, der går af med et brag, logisk.",
"blæk": "Skriverne havde brug for noget at skrive med.",
"tandpulver": "[suspicious] Det lyder mærkeligt nok til at være sandt."
}
},
{
"category": "Sprog og ord",
@@ -397,7 +541,13 @@
"bæger",
"lanterne"
],
"note": "Blomstens form mindede om en turban (tyrkisk tülbend, persisk dulband)."
"note": "Blomstens form mindede om en turban (tyrkisk tülbend, persisk dulband).",
"pitch": {
"turban": "Vend blomsten på hovedet, så ser du det.",
"hjelm": "Den står rank som en lille soldat.",
"bæger": "[curious] Den kan næsten holde på en slurk regnvand.",
"lanterne": "Den lyser op i bedet hele foråret."
}
},
{
"category": "Sprog og ord",
@@ -412,7 +562,13 @@
"tysk",
"finsk"
],
"note": "Sverige indførte embedet justitieombudsman i 1809, og ordet bredte sig derfra til engelsk."
"note": "Sverige indførte embedet justitieombudsman i 1809, og ordet bredte sig derfra til engelsk.",
"pitch": {
"svensk": "Naboerne har et ord for alting, også klager.",
"hollandsk": "Handelsfolk har altid brug for nogen at klage til.",
"tysk": "[sarcastic] Der er en paragraf for alt dernede.",
"finsk": "Lange ord med mange bogstaver, det er deres speciale."
}
},
{
"category": "Sprog og ord",
@@ -428,7 +584,13 @@
"Spanien",
"Skotland"
],
"note": "Joachimsthaler-mønten fra Joachimsthal (nu Jáchymov) blev til thaler, daler og dollar."
"note": "Joachimsthaler-mønten fra Joachimsthal (nu Jáchymov) blev til thaler, daler og dollar.",
"pitch": {
"Tjekkiet": "[whispers] Bjerge og dale nok til en hel møntsamling.",
"Holland": "Handelsfolkets land, de kunne da finde ud af penge.",
"Spanien": "Sølvskibe fra Amerika, så sølvet lå lige ved hånden.",
"Skotland": "Og skotter er kendt for at passe på pengene."
}
},
{
"category": "Sprog og ord",
@@ -445,7 +607,13 @@
"vagthus",
"skur"
],
"note": "Tyrkisk köşk var en åben havepavillon; ordet kom via fransk kiosque."
"note": "Tyrkisk köşk var en åben havepavillon; ordet kom via fransk kiosque.",
"pitch": {
"pavillon": "Et lille hus i parken, hvor man kan købe slik.",
"markedsbod": "Der har man altid solgt lidt af hvert.",
"vagthus": "[mischievously] Ekspedienten holder øje med alle, der går forbi.",
"skur": "Lille, trangt og fyldt med aviser, det passer."
}
},
{
"category": "Sport",
@@ -462,7 +630,13 @@
"mælkespande",
"hummerteiner"
],
"note": "James Naismith hængte to ferskenkurve op i en gymnastiksal; bolden måtte hentes ned efter hver scoring."
"note": "James Naismith hængte to ferskenkurve op i en gymnastiksal; bolden måtte hentes ned efter hver scoring.",
"pitch": {
"ferskenkurve": "Gymnastiksalen manglede bare et sted at gemme frugten.",
"fiskenet": "Så kunne bolden dumpe lige igennem.",
"mælkespande": "[excited] Tænk på det dejlige klonk ved hver eneste scoring!",
"hummerteiner": "Fiskerne i Massachusetts havde masser af dem liggende."
}
},
{
"category": "Sport",
@@ -476,7 +650,13 @@
"tennis",
"fodbold"
],
"note": "På Apollo 14 slog Shepard to golfbolde med et hjemmelavet jern."
"note": "På Apollo 14 slog Shepard to golfbolde med et hjemmelavet jern.",
"pitch": {
"golf": "Masser af sand og ingen ventetid ved første hul.",
"baseball": "Amerikanerne kan ikke undvære deres nationalsport.",
"tennis": "[laughs] Uden luftmodstand kommer serven aldrig tilbage.",
"fodbold": "Et helt hold i rumdragter, det ville jeg se."
}
},
{
"category": "Sport",
@@ -494,7 +674,13 @@
"ridning",
"skydning"
],
"note": "Kunstkonkurrencer var med 1912-1948; Coubertin vandt med 'Ode til sporten' under pseudonym."
"note": "Kunstkonkurrencer var med 1912-1948; Coubertin vandt med 'Ode til sporten' under pseudonym.",
"pitch": {
"litteratur": "[impressed] Han skrev vel lige så godt, som han talte.",
"fægtning": "En rigtig fransk gentleman med kårde i hånden.",
"ridning": "Han sad sikkert flot i sadlen, den gode baron.",
"skydning": "Han ramte altid plet, også med sine ideer."
}
},
{
"category": "Sport",
@@ -509,7 +695,13 @@
"stylteløb",
"æggeløb"
],
"note": "Tovtrækning var med ved fem olympiske lege; i 1900 vandt et dansk-svensk hold guld."
"note": "Tovtrækning var med ved fem olympiske lege; i 1900 vandt et dansk-svensk hold guld.",
"pitch": {
"tovtrækning": "Det kunne alle lande da finde ud af.",
"sækkeløb": "[chuckles] Jeg ville da gerne se det på tv.",
"stylteløb": "Det giver et godt overblik over konkurrenterne.",
"æggeløb": "Det kræver mere balance end de fleste sportsgrene."
}
},
{
"category": "Sport",
@@ -524,7 +716,13 @@
"Rumænien",
"Bulgarien"
],
"note": "Jugoslavien blev udelukket pga. FN-sanktioner, Danmark rykkede ind og vandt hele turneringen."
"note": "Jugoslavien blev udelukket pga. FN-sanktioner, Danmark rykkede ind og vandt hele turneringen.",
"pitch": {
"Jugoslavien": "Der var uro mange steder i Europa dengang.",
"Sovjetunionen": "Landet forsvandt nærmest, mens man så på.",
"Rumænien": "[whispers] Der skete underlige ting bag kulisserne, siger man.",
"Bulgarien": "Lyder rigtigt, de lå jo lige i nærheden."
}
},
{
"category": "Sport",
@@ -539,7 +737,13 @@
"Stockholm",
"Athen"
],
"note": "I 1908 gik ruten fra Windsor Castle til stadion; distancen blev senere standard."
"note": "I 1908 gik ruten fra Windsor Castle til stadion; distancen blev senere standard.",
"pitch": {
"London": "Englænderne elsker at måle ting helt præcist.",
"Paris": "Franskmændene har altid haft styr på metersystemet.",
"Stockholm": "[curious] Svenskerne er kendt for at være grundige.",
"Athen": "Hvor ellers skulle maratonløbet finde sin rigtige længde?"
}
},
{
"category": "Sport",
@@ -553,7 +757,13 @@
"Netonia",
"Smashball"
],
"note": "William G. Morgan kaldte spillet Mintonette; navnet volleyball kom året efter."
"note": "William G. Morgan kaldte spillet Mintonette; navnet volleyball kom året efter.",
"pitch": {
"Mintonette": "[mischievously] Fint og fransk, ligesom en lille dans.",
"Ballonette": "Bolden svæver som en ballon over nettet.",
"Netonia": "Et net i midten, så er navnet givet.",
"Smashball": "Lige ud ad landevejen, typisk amerikanerne."
}
},
{
"category": "Sport",
@@ -572,7 +782,13 @@
"kloster",
"værtshus"
],
"note": "Badminton House i Gloucestershire tilhørte hertugen af Beaufort."
"note": "Badminton House i Gloucestershire tilhørte hertugen af Beaufort.",
"pitch": {
"gods": "Fornemme folk havde god plads på plænen.",
"fyrtårn": "Fjerbolden var let at finde i lyset.",
"kloster": "[whispers] Munkene trængte også til lidt motion.",
"værtshus": "Kroens gæster havde god tid om aftenen."
}
},
{
"category": "Sport",
@@ -588,7 +804,13 @@
"tog",
"på cykel"
],
"note": "Lorz fik et lift i bil i ca. 11 miles og blev diskvalificeret."
"note": "Lorz fik et lift i bil i ca. 11 miles og blev diskvalificeret.",
"pitch": {
"bil": "Det gik stærkt, da han dukkede op.",
"hestevogn": "Så kunne han hvile benene undervejs.",
"tog": "[laughs] Han havde vist købt billet hele vejen.",
"på cykel": "Smart, så var benene da varmet op."
}
},
{
"category": "Sport",
@@ -604,7 +826,13 @@
"cykling",
"svømning"
],
"note": "Viggo Jensen vandt tohåndsløftet ved de første moderne olympiske lege i Athen."
"note": "Viggo Jensen vandt tohåndsløftet ved de første moderne olympiske lege i Athen.",
"pitch": {
"vægtløftning": "En stærk dansker, det har vi altid haft nok af.",
"brydning": "[impressed] Vikingeblodet havde ikke glemt kampen.",
"cykling": "Danskerne cykler overalt, også dengang.",
"svømning": "Vi har hav på næsten alle sider."
}
},
{
"category": "Sport",
@@ -619,7 +847,13 @@
"Italien",
"Frankrig"
],
"note": "Uruguay var vært og vandt også turneringen."
"note": "Uruguay var vært og vandt også turneringen.",
"pitch": {
"Uruguay": "[excited] Fodbold er nærmest en religion i Sydamerika!",
"Brasilien": "Hvor ellers skulle verdens bedste bold begynde?",
"Italien": "Pasta, sol og fodbold, en perfekt kombination.",
"Frankrig": "Det var franskmændene, der fandt på det hele."
}
},
{
"category": "Sport",
@@ -633,7 +867,13 @@
"Arran",
"Iona"
],
"note": "Firmaet Kays of Scotland laver olympiske sten af den særligt tætte granit fra Ailsa Craig."
"note": "Firmaet Kays of Scotland laver olympiske sten af den særligt tætte granit fra Ailsa Craig.",
"pitch": {
"Ailsa Craig": "Lyder som en gammel skotsk bedstemor, ikke?",
"Isle of Skye": "Den ø er skotternes stolthed, så selvfølgelig.",
"Arran": "[curious] Kort navn, hårde sten, det passer fint.",
"Iona": "Munkene derude var eksperter i sten."
}
},
{
"category": "Sport",
@@ -650,7 +890,13 @@
"kortforlag",
"reklamebureau"
],
"note": "Sportsavisen L'Auto, der grundlagde løbet i 1903, blev trykt på gult papir."
"note": "Sportsavisen L'Auto, der grundlagde løbet i 1903, blev trykt på gult papir.",
"pitch": {
"avis": "Nogen skulle jo betale for alle de nye trøjer.",
"plakatfabrik": "Gule plakater kan ses på lang afstand.",
"kortforlag": "[mischievously] De vidste i hvert fald, hvor ruten gik.",
"reklamebureau": "Reklame har altid været det halve af sporten."
}
},
{
"category": "Historie",
@@ -666,7 +912,13 @@
"kaniner",
"krokodiller"
],
"note": "Den såkaldte Emukrig: soldater med maskingeværer skulle bekæmpe emuer på markerne og opgav."
"note": "Den såkaldte Emukrig: soldater med maskingeværer skulle bekæmpe emuer på markerne og opgav.",
"pitch": {
"emuer": "Hurtige fugle er svære at ramme, det er sikkert.",
"kænguruer": "De slår hårdt fra sig med de baglår.",
"kaniner": "[sighs] Der var millioner af dem, hvem ville ikke tabe?",
"krokodiller": "Man kan ikke vinde mod noget med de tænder."
}
},
{
"category": "Historie",
@@ -681,7 +933,13 @@
"104",
"121"
],
"note": "Krigen varede fra 1337 til 1453, med flere pauser."
"note": "Krigen varede fra 1337 til 1453, med flere pauser.",
"pitch": {
"116": "[laughs] Krige har det med at trække lidt ud.",
"99": "De gik hjem lige før jubilæet.",
"104": "Lidt overtid er der altid.",
"121": "Ingen gad tælle, mens de havde travlt med at slås."
}
},
{
"category": "Historie",
@@ -699,7 +957,13 @@
"to uger",
"seks timer"
],
"note": "Den regnes som historiens korteste krig, ca. 38-45 minutter."
"note": "Den regnes som historiens korteste krig, ca. 38-45 minutter.",
"pitch": {
"40 minutter": "Hurtigere end en skoletime, sådan kan det gå.",
"tre dage": "Lige nok til at pakke kufferten og tage hjem.",
"to uger": "[sarcastic] En rigtig sommerferie med kanoner, kan man sige.",
"seks timer": "En arbejdsdag og hjem til aftensmad, meget britisk."
}
},
{
"category": "Historie",
@@ -715,7 +979,13 @@
"olie",
"honning"
],
"note": "Den store melasseflod sendte en bølge af sirup gennem North End i Boston."
"note": "Den store melasseflod sendte en bølge af sirup gennem North End i Boston.",
"pitch": {
"melasse": "Klistret og sødt, så kommer man ingen vegne.",
"mælk": "Byen havde masser af mejerier i gamle dage.",
"olie": "[suspicious] Store tanke indeholder tit noget glat.",
"honning": "Bierne i Boston var åbenbart meget flittige."
}
},
{
"category": "Historie",
@@ -732,7 +1002,13 @@
"hatte",
"hunde"
],
"note": "Urin fra offentlige latriner blev brugt til garvning og vask; heraf 'pecunia non olet', penge lugter ikke."
"note": "Urin fra offentlige latriner blev brugt til garvning og vask; heraf 'pecunia non olet', penge lugter ikke.",
"pitch": {
"urin": "Romerne beskattede alt, der kunne sælges.",
"skæg": "Fine romerske herrer skulle da betale for pynten.",
"hatte": "[chuckles] Hovedbeklædning var et tegn på rigdom.",
"hunde": "Hver gø skulle åbenbart koste en mønt."
}
},
{
"category": "Historie",
@@ -747,7 +1023,13 @@
"Edgar Allan Poe",
"Napoleon 3."
],
"note": "Begge blev født den 12. februar 1809."
"note": "Begge blev født den 12. februar 1809.",
"pitch": {
"Charles Darwin": "[impressed] To skæggede herrer, der ændrede verden, passer perfekt.",
"Charles Dickens": "Begge skrev historie, hver på sin måde.",
"Edgar Allan Poe": "En mørk og skæbnesvanger dag, uden tvivl.",
"Napoleon 3.": "Ledere fødes gerne i samme kuld."
}
},
{
"category": "Historie",
@@ -763,7 +1045,13 @@
"huleløver",
"kæmpehjorte"
],
"note": "De sidste mammutter på Wrangeløen uddøde for ca. 4.000 år siden; pyramiden er ca. 4.500 år gammel."
"note": "De sidste mammutter på Wrangeløen uddøde for ca. 4.000 år siden; pyramiden er ca. 4.500 år gammel.",
"pitch": {
"mammutter": "Kulden passede dem fint deroppe.",
"sabeltandtigre": "Der var masser af bytte at jage.",
"huleløver": "[curious] De har vel bare gemt sig godt i hulerne.",
"kæmpehjorte": "Store gevirer og masser af plads, hvorfor ikke?"
}
},
{
"category": "Historie",
@@ -779,7 +1067,13 @@
"hund",
"frisør"
],
"note": "Hesten Incitatus havde ifølge kilderne en marmorstald og krybbe af elfenben."
"note": "Hesten Incitatus havde ifølge kilderne en marmorstald og krybbe af elfenben.",
"pitch": {
"hest": "Den lyttede i det mindste, når han talte.",
"kok": "Den, der laver maden, bestemmer alligevel.",
"hund": "[mischievously] En loyal ven siger aldrig kejseren imod.",
"frisør": "Han hørte alle hemmelighederne i Rom."
}
},
{
"category": "Historie",
@@ -796,7 +1090,13 @@
"paraplyer",
"tændstikker"
],
"note": "Fusajiro Yamauchi startede med håndlavede japanske hanafuda-kort."
"note": "Fusajiro Yamauchi startede med håndlavede japanske hanafuda-kort.",
"pitch": {
"spillekort": "Japanerne elsker ting, man kan samle på.",
"symaskiner": "Præcision og små tandhjul, det ligner dem.",
"paraplyer": "[laughs] Der regner en del i Japan.",
"tændstikker": "Det startede med en lille gnist."
}
},
{
"category": "Historie",
@@ -811,7 +1111,13 @@
"Carpathia",
"Empress of Ireland"
],
"note": "Hun var også om bord på Olympic, da den kolliderede i 1911."
"note": "Hun var også om bord på Olympic, da den kolliderede i 1911.",
"pitch": {
"Britannic": "[whispers] Et stolt navn til et rigtig stort skib.",
"Lusitania": "Hun havde tydeligvis en dragning mod uheld.",
"Carpathia": "Nogle mennesker har bare ni liv, ligesom katte.",
"Empress of Ireland": "Fint navn, og hun elskede fornemme skibe."
}
},
{
"category": "Historie",
@@ -828,7 +1134,13 @@
"en appelsin",
"is"
],
"note": "Aldrin tog nadver med medbragt brød og vin, før han gik ud på Månen."
"note": "Aldrin tog nadver med medbragt brød og vin, før han gik ud på Månen.",
"pitch": {
"nadver": "Man skulle jo takke nogen for den gode landing.",
"kaffe": "[excited] Astronauter kører på koffein, det ved alle!",
"en appelsin": "Man skal huske sine vitaminer, også i rummet.",
"is": "Den smelter ikke i rummets kulde."
}
},
{
"category": "Historie",
@@ -843,7 +1155,13 @@
"fem år",
"50 år"
],
"note": "Tilladelsen gjaldt 20 år; tårnet blev reddet bl.a. fordi det var nyttigt som radioantenne."
"note": "Tilladelsen gjaldt 20 år; tårnet blev reddet bl.a. fordi det var nyttigt som radioantenne.",
"pitch": {
"20 år": "Franskmændene ændrer mening en gang imellem.",
"et år": "Bare en pyntegenstand til en enkelt fest.",
"fem år": "[sighs] Pariserne hadede det fra første dag.",
"50 år": "Et halvt århundrede er en fin, rund levetid."
}
},
{
"category": "Historie",
@@ -862,7 +1180,13 @@
"fra nytår",
"om en uge"
],
"note": "Han svarede 'sofort, unverzüglich' på et pressemøde den 9. november, og folk strømmede til grænsen."
"note": "Han svarede 'sofort, unverzüglich' på et pressemøde den 9. november, og folk strømmede til grænsen.",
"pitch": {
"straks": "Han ville vist bare hurtigt hjem fra pressemødet.",
"fra jul": "[chuckles] En julegave til hele Østeuropa, det er rørende.",
"fra nytår": "Nyt år, ny frihed, det lyder logisk.",
"om en uge": "Så kunne alle lige nå at pakke kufferten."
}
},
{
"category": "Historie",
@@ -878,7 +1202,13 @@
"persisk",
"nubisk"
],
"note": "Hun var den sidste af det ptolemæiske dynasti, grundlagt af en af Alexander den Stores makedonske generaler."
"note": "Hun var den sidste af det ptolemæiske dynasti, grundlagt af en af Alexander den Stores makedonske generaler.",
"pitch": {
"græsk": "[curious] Hun var kendt for sine fine filosofiske samtaler.",
"romersk": "Hun havde et godt øje til romerne.",
"persisk": "Alt det guld og silke kom et sted fra.",
"nubisk": "Nilen løber lige ned gennem nabolaget."
}
},
{
"category": "Historie",
@@ -892,7 +1222,13 @@
"1952",
"1961"
],
"note": "Onoda troede ikke på, at krigen var slut, og overgav sig først, da hans gamle chef kom og gav ordre til det."
"note": "Onoda troede ikke på, at krigen var slut, og overgav sig først, da hans gamle chef kom og gav ordre til det.",
"pitch": {
"1974": "Ingen gad gå ud i junglen og sige det.",
"1946": "Nyheder rejser langsomt gennem tæt jungle.",
"1952": "[sarcastic] Han havde vist ikke radio med i rygsækken.",
"1961": "Selv den mest stædige soldat bliver træt til sidst."
}
},
{
"category": "Geografi",
@@ -910,7 +1246,13 @@
"60 km",
"120 km"
],
"note": "Store Diomede (Rusland) og Lille Diomede (USA) ligger ca. 3,8 km fra hinanden."
"note": "Store Diomede (Rusland) og Lille Diomede (USA) ligger ca. 3,8 km fra hinanden.",
"pitch": {
"4 km": "Man kan næsten råbe goddag over vandet.",
"25 km": "En god svømmetur for de modige, vil jeg tro.",
"60 km": "[mischievously] Lige langt nok til at holde naboerne på afstand.",
"120 km": "Isen gør det ekstra svært at måle."
}
},
{
"category": "Geografi",
@@ -924,7 +1266,13 @@
"USA",
"Canada"
],
"note": "Med sine oversøiske områder har Frankrig 12 tidszoner (13 med kravet i Antarktis)."
"note": "Med sine oversøiske områder har Frankrig 12 tidszoner (13 med kravet i Antarktis).",
"pitch": {
"Frankrig": "Franskmændene vil altid gerne have det sidste ord.",
"Rusland": "[impressed] Et kæmpe land, det giver sig selv.",
"USA": "Fra Hawaii til New York, der skal mange ure til.",
"Canada": "Masser af plads og masser af ure."
}
},
{
"category": "Geografi",
@@ -943,7 +1291,13 @@
"tre tidszoner",
"fire tidszoner"
],
"note": "Hele Kina følger Beijing-tid (UTC+8)."
"note": "Hele Kina følger Beijing-tid (UTC+8).",
"pitch": {
"én tidszone": "[sarcastic] Det gør det nemt at holde møde, ikke?",
"to tidszoner": "Øst og vest, sådan holder man styr på det.",
"tre tidszoner": "Et godt kompromis for et land af den størrelse.",
"fire tidszoner": "Fornuftigt for et land med så mange mennesker."
}
},
{
"category": "Geografi",
@@ -957,7 +1311,13 @@
"Aconcagua",
"Cotopaxi"
],
"note": "Jorden buler ud ved ækvator, så vulkanen Chimborazo i Ecuador rager længere ud end Everest."
"note": "Jorden buler ud ved ækvator, så vulkanen Chimborazo i Ecuador rager længere ud end Everest.",
"pitch": {
"Chimborazo": "Det navn lyder i hvert fald højt og mægtigt.",
"Kilimanjaro": "Den rager op lige midt på ækvator.",
"Aconcagua": "[excited] Andesbjergenes konge, hvem ellers?",
"Cotopaxi": "En vulkan med fart på mod himlen."
}
},
{
"category": "Geografi",
@@ -975,7 +1335,13 @@
"Ladogasøen",
"Titicacasøen"
],
"note": "Bajkalsøen i Sibirien er ca. 1.640 m dyb og også verdens ældste sø."
"note": "Bajkalsøen i Sibirien er ca. 1.640 m dyb og også verdens ældste sø.",
"pitch": {
"Bajkalsøen": "Den sibiriske kulde gør vel alt lidt dybere.",
"Tanganyikasøen": "Afrikas søer er kæmpestore, det ved enhver.",
"Ladogasøen": "[whispers] Nordiske søer gemmer på mange hemmeligheder i dybet.",
"Titicacasøen": "Højt oppe og langt nede, det hænger sammen."
}
},
{
"category": "Geografi",
@@ -990,7 +1356,13 @@
"fladeste",
"ældste"
],
"note": "Aleuterne krydser 180. længdegrad, så Alaskas yderste øer ligger på østlig længde."
"note": "Aleuterne krydser 180. længdegrad, så Alaskas yderste øer ligger på østlig længde.",
"pitch": {
"østligste": "Alaska kan åbenbart det hele, den grådige stat.",
"sydligste": "Den har øer, der stikker langt ud.",
"fladeste": "[curious] Al den sne udjævner vel det hele.",
"ældste": "Inuitterne var der længe før alle andre."
}
},
{
"category": "Geografi",
@@ -1005,7 +1377,13 @@
"Omega",
"Blue"
],
"note": "Opkaldt efter Kaptajn Nemo; ca. 2.700 km fra nærmeste land i Stillehavet, og bruges som kirkegård for satellitter."
"note": "Opkaldt efter Kaptajn Nemo; ca. 2.700 km fra nærmeste land i Stillehavet, og bruges som kirkegård for satellitter.",
"pitch": {
"Nemo": "[chuckles] Kort og fængende, ligesom et kælenavn.",
"Zero": "Nul land, nul mennesker, nul selskab.",
"Omega": "Verdens ende fortjener et græsk bogstav.",
"Blue": "Der er kun blåt vand i alle retninger."
}
},
{
"category": "Geografi",
@@ -1023,7 +1401,13 @@
"missionær",
"guvernør"
],
"note": "Sir George Everest var Surveyor General of India; han protesterede selv mod navnet."
"note": "Sir George Everest var Surveyor General of India; han protesterede selv mod navnet.",
"pitch": {
"landmåler": "En mand med kort og passer i rygsækken.",
"bjergbestiger": "[excited] Den første, der kom op, fik da æren!",
"missionær": "De rejste overalt, også helt op i skyerne.",
"guvernør": "Bureaukrater elsker at sætte deres navn på ting."
}
},
{
"category": "Geografi",
@@ -1037,7 +1421,13 @@
"Namibia",
"Mozambique"
],
"note": "Lesotho er en enklave og samtidig det land, hvis laveste punkt ligger højest (ca. 1.400 m)."
"note": "Lesotho er en enklave og samtidig det land, hvis laveste punkt ligger højest (ca. 1.400 m).",
"pitch": {
"Sydafrika": "Det store land i nabolaget, det ligger lige for.",
"Botswana": "Nogen skal holde det lille kongerige i hånden.",
"Namibia": "Ørkenen kan omringe hvad som helst.",
"Mozambique": "[chuckles] Med havet i ryggen og et lille land i favnen."
}
},
{
"category": "Geografi",
@@ -1052,7 +1442,13 @@
"6",
"25"
],
"note": "Mercator-kortet får Grønland til at ligne Afrika i størrelse; reelt er Afrika ca. 30,4 mio. km² mod 2,2 mio."
"note": "Mercator-kortet får Grønland til at ligne Afrika i størrelse; reelt er Afrika ca. 30,4 mio. km² mod 2,2 mio.",
"pitch": {
"14": "Kortene lyver om størrelser, det ved alle.",
"3": "Kortet snyder lidt, men ikke så meget.",
"6": "[suspicious] Et pænt tal, hvis man runder lidt op.",
"25": "Kontinentet er enormt, det ved hver skoleelev."
}
},
{
"category": "Geografi",
@@ -1066,7 +1462,13 @@
"Island",
"USA"
],
"note": "Efter årtiers 'whiskykrig' blev den lille ø mellem Grønland og Canada delt i juni 2022."
"note": "Efter årtiers 'whiskykrig' blev den lille ø mellem Grønland og Canada delt i juni 2022.",
"pitch": {
"Canada": "[mischievously] Vores høflige naboer over isen, giver god mening.",
"Norge": "Nordmændene vil altid have en bid af kagen.",
"Island": "Vikingerne har altid haft øje for små klipper.",
"USA": "Amerikanerne kan ikke lade en ø ligge."
}
},
{
"category": "Geografi",
@@ -1081,7 +1483,13 @@
"Mongoliet",
"Bolivia"
],
"note": "Begge er dobbelt indlandsstater: alle nabolande er selv uden kyst."
"note": "Begge er dobbelt indlandsstater: alle nabolande er selv uden kyst.",
"pitch": {
"Usbekistan": "Midt i Asien er havet meget langt væk.",
"Schweiz": "Bjerge til alle sider og ingen strand i sigte.",
"Mongoliet": "[impressed] Steppen fortsætter bare og bare og bare.",
"Bolivia": "De har savnet havet i over hundrede år."
}
},
{
"category": "Geografi",
@@ -1095,7 +1503,13 @@
"Haleakala",
"Waialeale"
],
"note": "Mauna Kea er over 10.000 m fra havbunden, men kun 4.207 m over havets overflade."
"note": "Mauna Kea er over 10.000 m fra havbunden, men kun 4.207 m over havets overflade.",
"pitch": {
"Mauna Kea": "Navnet lyder da stort og ophøjet.",
"Kilauea": "Den spruder lava, så den vokser hele tiden.",
"Haleakala": "[curious] Et langt navn til et langt bjerg.",
"Waialeale": "Så mange vokaler, det må være højt."
}
},
{
"category": "Geografi",
@@ -1111,6 +1525,12 @@
"Kakkelovns",
"Søndagsskole"
],
"note": "Lauge Koch opkaldte øen efter kaffeklubben på Mineralogisk Museum i København."
"note": "Lauge Koch opkaldte øen efter kaffeklubben på Mineralogisk Museum i København.",
"pitch": {
"Kaffeklubben": "Polarforskere har brug for noget varmt at drikke.",
"Frokostklubben": "Man bliver sulten af at gå på opdagelse.",
"Kakkelovns": "[chuckles] Man skal varme sig deroppe i kulden.",
"Søndagsskole": "Opdagelsesrejsende var pæne drenge, der gik i kirke."
}
}
]
File diff suppressed because it is too large Load Diff
@@ -29,7 +29,8 @@ class Command(BaseCommand):
prompt=item["prompt"].strip(),
defaults={"category": cat, "answer": item["answer"].strip(),
"alternatives": item.get("alternatives", []),
"decoys": item.get("decoys", []), "note": item.get("note", "")},
"decoys": item.get("decoys", []), "note": item.get("note", ""),
"pitch": item.get("pitch", {})},
)
created += was_created
updated += not was_created
@@ -0,0 +1,14 @@
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [("fupogfakta", "0003_category_packs")]
operations = [
migrations.AddField(
model_name="question",
name="pitch",
field=models.JSONField("oplæsningens kommentarer", blank=True, default=dict,
help_text="Svar → kort overbevisende kommentar til sandheden og husets løgne (runde 2 og finalen)."),
),
]
+3 -1
View File
@@ -33,6 +33,8 @@ class Question(models.Model):
decoys = models.JSONField("husets løgne", default=list, blank=True,
help_text="Plausible forkerte svar, bruges når der mangler løgne.")
note = models.CharField("forklaring", max_length=300, blank=True)
pitch = models.JSONField("oplæsningens kommentarer", default=dict, blank=True,
help_text="Svar → kort overbevisende kommentar til sandheden og husets løgne (runde 2 og finalen).")
active = models.BooleanField("aktiv", default=True)
times_used = models.PositiveIntegerField("brugt", default=0)
times_all_correct = models.PositiveIntegerField(
@@ -50,7 +52,7 @@ class Question(models.Model):
def as_game_dict(self):
return {"id": self.id, "category_id": self.category_id, "category": self.category.name,
"prompt": self.prompt, "answer": self.answer, "alternatives": self.alternatives,
"decoys": self.decoys, "note": self.note, "times_used": self.times_used}
"decoys": self.decoys, "note": self.note, "times_used": self.times_used, "pitch": self.pitch}
TOO_EASY = 2 # så mange gange "alle fandt sandheden", før spørgsmålet tages ud
+421 -344
View File
@@ -1,346 +1,423 @@
{
"lobby_welcome": [
"Velkommen til Fup og Fakta. Find telefonen frem. Samvittigheden kan blive i lommen.",
"Her må du lyve. Vi har endda lavet en pointtavle til det.",
"Velkommen. Her bliver familiehistorier endelig vurderet efter, hvor godt de snyder.",
"[excited] Fup og Fakta! Find telefonen frem. Jeg har allerede gjort sandheden nervøs.",
"Et spil om sandhed og løgn. Altså en familiefest med lidt tydeligere regler."
],
"lobby_join": [
"{navn} er med. Så har vi en mere at stole lidt for meget på.",
"Velkommen, {navn}. Jeg stoler på dig. Det plejer at gå galt.",
"Der kom {navn}. Endnu et navn til min kommende samling af bortforklaringer.",
"{navn}, dejligt. Jeg skriver dig på listen over mistænkeligt hyggelige mennesker.",
"[suspicious] {navn} er med. Den tavshed tager jeg som en tilståelse.",
"Plads til {navn}. Telefonen er nu officielt et redskab til familieintriger.",
"{navn}, du kom præcis i tide til at tage fejl sammen med os.",
"[impressed] {navn} fandt ind. Første opgave løst. Desværre giver den ingen point.",
"Nu er {navn} her. Så kan vi snart få sandheden nedstemt.",
"[suspicious] {navn} er landet. Jeg holder øje med dig.",
"{navn} er her. Så er der én mere, jeg ikke kan stole på.",
"[excited] {navn}! Endelig en med et ærligt ansigt. Det er de farligste.",
"{navn} er landet. Pas godt på jeres point.",
"Velkommen, {navn}. Lad bare som om, du aldrig har spillet før.",
"{navn} er med. Jeg har allerede en dårlig fornemmelse.",
"[suspicious] Hej, {navn}. Du ser ud til at kunne lyve uden at blinke."
],
"lobby_waiting": [
"{vip}, når du er klar, kan vi begynde. Jeg har løgne, der skal luftes.",
"Hvis vi venter længere, {vip}, bliver mine løgne til gamle familiehistorier.",
"{vip}, giv os et tegn. Helst startknappen. Røgsignaler virker dårligt i stuen.",
"Jeg er klar, {vip}. Det siger jeg også før møder. Her mener jeg det.",
"[whispers] {vip}, jeg har snart brugt min eneste replik om vejret."
],
"game_start": [
"{antal_spillere} spillere og én sandhed. Det bliver en helt almindelig familiefest.",
"{antal_spillere} spillere. Gæt sandheden, og nar de andre. Begge dele giver point.",
"{antal_spillere} spillere. Tilliden i sofaen skal nu testes med helt frivillige løgne.",
"[excited] Vi er i gang! {antal_spillere} spillere, samlet om noget mistænkeligt. Helt lovligt.",
"{antal_spillere} spillere. Point for sandheden og gode løgne. Familiefortælleren får endelig lidt anerkendelse."
],
"round1_intro": [
"Første runde. Almindelige point, ualmindeligt tvivlsomme forklaringer.",
"Vi begynder med normale point. Se det som en høflig prøve på familiens tillid.",
"Runde ét. Pointene er normale. Det er resten af det her sjældent.",
"Første runde, normale point. Jeg starter med fuld tillid. Det plejer at være en kort fornøjelse.",
"Vi starter stille med normale point. I får rigelig mulighed for at råbe senere."
],
"round2_intro": [
"Nu giver vi dobbelt point. {foerende}, din føring får brug for en sikkerhedssele.",
"Runde to, dobbelt point. Nu får selv en lille løgn lidt vokseværk.",
"Vi fordobler pointene. {foerende} fører, men sofaen har endnu ikke kronet nogen.",
"Dobbelt point! Nu er det dyrere at stole på familie og venner.",
"[excited] Runde to giver dobbelt point. Jeg føler mig allerede dobbelt så vigtig."
],
"final_intro": [
"Finale med tredobbelt point. {foerende} fører, men ingen har fået lov at holde takketale.",
"{sidst}, nu giver vi tredobbelt point. Tid til at pynte på regnskabet.",
"{foerende}, finalen giver tredobbelt point. Føringer tæller bedst, når de holder hele vejen.",
"[dramatic] Tredobbelt point i finalen. Nu kan en mavefornemmelse flytte rundt på hele stillingen.",
"Sidste runde. Tre gange pointene. Jeg har allerede øvet min overraskede stemme."
],
"category_choose": [
"{navn}, vælg en kategori. Gerne noget, du kan lyve selvsikkert om.",
"Valget er dit, {navn}. Hele sofaen får naturligvis lov at brokke sig bagefter.",
"Hvad skal vi høre om, {navn}? Du har ordet. Jeg beholder opmærksomheden.",
"{navn}, peg på en kategori. Her er mavefornemmelsen faktisk kvalificeret.",
"{navn}, hvilken kategori? Du behøver kun vælge én. Gem resten til ønskesedlen.",
"{navn}, du vælger. Tænk dig om. Eller lad være, det går hurtigere.",
"{navn} har magten nu. Det gik jo nok.",
"[excited] {navn}, vælg en kategori! Alle kigger på dig. Intet pres.",
"{navn}, hvad skal det være? Alle andre har allerede en mening.",
"Turen er kommet til {navn}. Lad os se, hvor længe det holder.",
"{navn}, vælg klogt. Eller vælg sjovt. Det er sjældent det samme."
],
"category_timeout": [
"{navn} tog betænkningstid. Vi tog {kategori}. Så kom der da en beslutning.",
"Det blev {kategori}. {navn}, stilhed er åbenbart også en måde at vælge på.",
"[sighs] {navn}, tiden løb. Nu hedder kategorien {kategori}. Den kunne heldigvis beslutte sig.",
"{kategori} er valgt. {navn}, vi kalder det delegering. Det lyder pænere.",
"{navn}, universet har valgt {kategori}. Universet arbejder åbenbart hurtigere end vores familie."
],
"lie_start": [
"Nu gælder det {kategori}. Skriv en løgn, der kunne få sit eget leksikonopslag.",
"{kategori}. Skriv en løgn, der føles som noget, man har hørt før.",
"Skriv en løgn om {kategori}. Giv den en parkeringsvagts selvtillid.",
"{kategori} er emnet. Skriv noget opdigtet. Hunden har lovet at tage skylden.",
"Opfind et svar om {kategori}. En lille detalje kan gøre løgnen stor.",
"Vi skal digte om {kategori}. Gør gerne løgnen kedelig. Det virker overraskende godt.",
"[mischievously] Nu handler det om {kategori}. Skriv en løgn, du kunne sige helt alvorligt.",
"Skriv en løgn om {kategori}. Husets dårlige ry kan godt bruge hjælp.",
"{kategori}. Opfind et svar, som selv familiens skeptiker kunne købe.",
"{kategori}. Skriv en troværdig løgn. Du må gerne rette stavefejl i virkeligheden.",
"Kategorien er {kategori}. Gør jer klar til at lyve med god samvittighed.",
"[excited] {kategori}! Nu skal der opfindes fakta.",
"{kategori}. Et emne, I alle sammen tror, I ved noget om.",
"Vi skal tale om {kategori}. Eller rettere, lyve om det.",
"{kategori} står på programmet. Fantasien må gerne tage overarbejde.",
"[mischievously] {kategori}. Jeg har en fornemmelse af, at det her bliver kreativt."
],
"lie_hurry": [
"Ti sekunder. En lille løgn er bedre end en stor tænkepause.",
"Ti sekunder tilbage. Afsted med løgnen. Den behøver kun overleve ét spørgsmål.",
"Ti sekunder. Det behøver ikke være godt. Bare forkert.",
"Ti sekunder! Selv en halvbagt løgn kan serveres med overbevisning.",
"Kun ti sekunder. Din indre forfatter må godt springe korrekturen over.",
"[excited] Ti sekunder! Skriv noget. Hvad som helst.",
"Ti sekunder tilbage. Tænk mindre, skriv mere.",
"Ti sekunder. Selv en dårlig løgn er bedre end ingen løgn.",
"Tiden løber. Ti sekunder til at blive kreativ.",
"[whispers] Ti sekunder. Jeg siger det bare."
],
"lie_all_done": [
"Alle løgne er afleveret. Sikke vi kan arbejde, når sandheden bliver valgfri.",
"Alle har skrevet. Jeg gemmer bunken til næste gang, nogen kalder sig ærlige.",
"Nu har vi alle løgnene. Det er som et familiereferat, bare hurtigere.",
"[impressed] Alle er færdige. Sikke et samarbejde om at gøre hinanden mistænksomme.",
"Alle har løjet. Det gik hurtigere, end jeg havde frygtet.",
"Alle har løjet. Det gik hurtigt. Lidt for hurtigt, hvis I spørger mig.",
"[impressed] Alle løgne er inde. I er skræmmende effektive.",
"Så er alle færdige. Lad os se, hvem der har det bedste pokerfjæs.",
"Alle løgne er afleveret. Sandheden sidder alene i et hjørne og venter.",
"Færdige allerede? I har øvet jer derhjemme, har I ikke?",
"[mischievously] Løgnene er klar. Nu bliver det spændende."
],
"lie_was_truth": [
"Det var faktisk sandheden. Prøv igen, med lidt mindre ærlighed.",
"Sandheden kom ind ad bagdøren. Send den ud igen, og skriv en løgn.",
"Nogen skrev sandheden. Det er snyd. Bare den omvendte slags.",
"Det svar var sandt. En sjælden tastefejl. Prøv med en løgn.",
"Du ramte sandheden. Gem den slags talenter til gættefasen.",
"Nogen kender sandheden. Hold den for dig selv, og skriv en løgn.",
"[suspicious] Der var en, der skrev det rigtige svar. Det tæller ikke.",
"Sandheden er ikke en løgn. Prøv igen."
],
"guess_start": [
"Én af dem er sand. Held og lykke. I får brug for det.",
"Vælg det sande svar. Selvtillid er desværre en dårlig kildehenvisning.",
"Nu skal I gætte sandheden. Tænk efter, før familieanekdoterne tager over.",
"Hvilket svar er sandt? Lad maven bestemme. Den træffer jo allerede aftensmadsbeslutninger.",
"Vælg sandheden. Mine løgne er også med. De er lavet med kærlighed.",
"Find det rigtige svar. Virkeligheden har en ret løs opfattelse af, hvad der er rimeligt.",
"Ét af svarene passer. Vælg det. Resten sælger vi på næste loppemarked.",
"Vælg sandheden. Publikum gætter med. Nu kan endnu flere blande sig.",
"Find sandheden. Bagefter må I gerne give hjerter til de sjoveste løgne.",
"[suspicious] Ét svar er sandt. Vælg med omhu. De andre har bare øvet sig.",
"Find sandheden. Den gemmer sig mellem jeres egne løgne.",
"Ét af svarene er rigtigt. Resten er ren familiefantasi.",
"[mischievously] Vælg med omhu. Nogen her vil gerne have, at du tager fejl.",
"Nu skal I gætte. Stol på maven. Eller på din nabo, hvis du tør.",
"Ét svar er sandt. Held og lykke med at finde ud af hvilket.",
"Gæt løs. Det er helt normalt at være i tvivl. Det er pointen."
],
"guess_hurry": [
"Fem sekunder. Vælg et svar. Det hjælper sjældent at stirre vredt på telefonen.",
"Fem sekunder tilbage. Din mavefornemmelse har nu sidste ord.",
"Der er fem sekunder. Tvivlen får desværre ingen point.",
"Fem sekunder! Vælg et svar, før din store overvejelse bliver en meget lille aflevering.",
"Kun fem sekunder. Sandheden venter. Den er åbenbart bedre opdraget end mig.",
"[excited] Fem sekunder! Vælg nu.",
"Fem sekunder. Maven ved det godt.",
"Fem, fire.. vælg noget!",
"Fem sekunder tilbage. Det første svar er ofte det rigtige. Nogle gange.",
"Fem sekunder. Ingen fortrydelse, kun gæt."
],
"reveal_lie_fooled": [
"{forfatter} opfandt {svar}. {ofre} købte den. Kvitteringen er desværre forsvundet.",
"{ofre} faldt for {svar}. {forfatter}, din fantasi har nu fået selskab.",
"Det var {forfatter}, der fandt på {svar}. {ofre} hoppede lige i.",
"[chuckles] {svar} var en løgn fra {forfatter}. Tak for støtten, {ofre}.",
"{forfatter} skrev {svar}, og {ofre} tog imod. Meget høfligt. Meget forkert.",
"{svar} kom fra {forfatter}. {ofre} lod sig overbevise. Selvtilliden fik åbenbart ordet først.",
"{ofre} troede på {svar}. {forfatter} har lige bevist, at en god historie kan springe køen over.",
"{forfatter}, {svar} virkede på {ofre}. Den løgn slap godt fra middagsbordet.",
"{svar}, sagde {forfatter}. Ja tak, sagde {ofre}. Og sådan fik fantasien sin belønning.",
"{svar} var en løgn fra {forfatter}. {ofre}, det bliver mellem os og hele stuen.",
"{svar}? Løgn! {forfatter} fandt på den, og {ofre} hoppede direkte i.",
"[laughs] {ofre} troede på {svar}. Flot arbejde, {forfatter}.",
"{svar} kom fra {forfatter}. {ofre} faldt i. Det sker for de bedste.",
"Løgn! {svar} var opfundet af {forfatter}. {ofre} tog den med et smil.",
"[chuckles] {forfatter} skrev {svar}. {ofre} købte den uden at blinke.",
"{svar}. Helt opdigtet af {forfatter}. Og {ofre} slugte den råt.",
"{ofre} valgte {svar}. {forfatter} gnider sig i hænderne.",
"{svar} var en løgn. {forfatter} narrede {ofre}. Sådan skal det gøres."
],
"reveal_lie_fooled_many": [
"{antal} troede på {svar}. {forfatter}, du har nok til at stifte en forening.",
"{forfatter} fik {antal} til at vælge {svar}. Sofaen har dannet fælles front mod fakta.",
"[impressed] {svar} narrede {antal}. {forfatter}, jeg bøjer mig. Mest for at gemme min jalousi.",
"{antal} hoppede på {svar}. {forfatter}, du kan starte en bølge uden at rejse dig.",
"{svar} narrede {antal}. {forfatter}, din fantasi har flere tilhængere end min madplan."
],
"reveal_lie_shared": [
"{forfattere} skrev begge {svar}. To hjerner, én fælles omvej.",
"{forfattere} leverede {svar}. To løgnere for én. Det kan tilbudsavisen lide.",
"{forfattere} fandt på {svar}. Samme løgn. Fantasien må have en kopimaskine.",
"{svar}, fra {forfattere}. En løgn med to underskrifter. Næsten klar til kommunen.",
"[suspicious] {forfattere} skrev {svar}. Jeg siger bare, at telepati burde stå i reglerne."
],
"reveal_house_lie": [
"{svar} var min løgn. Tak, {ofre}. Dejligt, at kunst bliver værdsat.",
"[mischievously] {ofre} valgte {svar}. Husets løgn. Jeg modtager gerne stående bifald fra sofaen.",
"Jeg opfandt {svar}. {ofre} troede på den. Det kalder jeg godt samarbejde.",
"{ofre}, {svar} var min. Så ved vi, hvem der bestemmer over rygterne.",
"{ofre} købte {svar}. Min opskrift. Tillid er åbenbart den hemmelige ingrediens.",
"{svar} kom fra huset. {ofre}, den forklaring kan give næste middag ekstra samtalestof.",
"{ofre} troede på {svar}. Jeg skrev den helt uden hjælp fra virkeligheden.",
"Min løgn var {svar}. {ofre}, jeg kan mærke min dårlige samvittighed tage fri.",
"{svar} snød {ofre}. Den var min. Jeg øver lige mit ydmyge nik.",
"Huset opfandt {svar}. {ofre} faldt for den. Så sparede vi penge på specialeffekter.",
"[mischievously] {svar} var min. {ofre} faldt for huset. Jeg er rørt.",
"{ofre} valgte {svar}. Den skrev jeg selv. Tak for tilliden.",
"Husets løgn! {svar} narrede {ofre}. Jeg tager æren.",
"{svar}? Det var mig. {ofre}, vi to skal have en lille snak.",
"[laughs] {ofre} faldt for {svar}. Den var fra huset. Bare så I ved det.",
"{svar} kom fra mig. {ofre} hoppede i. Huset vinder igen."
],
"reveal_truth_found": [
"Sandheden er {sandhed}. {navne} fandt den. Så fik virkeligheden lidt opbakning.",
"{navne} valgte sandheden, {sandhed}. Gem lige øjeblikket til næste familiediskussion.",
"[impressed] Svaret er {sandhed}. {navne} gennemskuede os. Irriterende godt arbejde.",
"{sandhed}, det er sandheden. {navne} ramte rigtigt. Meget upraktisk for løgnerne.",
"{sandhed} er svaret. {navne} har tilladelse til ét lille, bedrevidende nik.",
"{navne} ramte rigtigt med {sandhed}. Nogen har åbenbart læst bagsiden af mælkekartonen.",
"Sandheden var {sandhed}. Godt fanget, {navne}. Den viden fortjente sin egen fest.",
"{navne} valgte {sandhed}. Korrekt. Skepsissen kan lige lægge benene op.",
"{navne} fandt sandheden, {sandhed}. Mavefornemmelsen har lige fået en lønforhøjelse.",
"Svaret er {sandhed}. Point til {navne}. Jeg vidste det selvfølgelig også. Næsten.",
"[excited] Og sandheden er.. {sandhed}! Point til {navne}.",
"[impressed] {sandhed}. Rigtigt! {navne} lader sig ikke snyde.",
"Det rigtige svar er {sandhed}. Godt gået, {navne}.",
"{sandhed} er sandheden. {navne} fik point. Resten fik en lærestreg.",
"Ja, det er faktisk {sandhed}. {navne} vidste det godt.",
"Sandheden er {sandhed}! {navne} så igennem det hele."
],
"reveal_truth_nobody": [
"Svaret var {sandhed}. Ingen fandt det. Vi lader som om, det her var opvarmning.",
"Sandheden var {sandhed}. Hele sofaen tog fejl. Sikke en sjælden form for enighed.",
"[sighs] Sandheden var {sandhed}. Den stod lige der. Jeg giver virkeligheden et trøstende kram.",
"Ingen valgte {sandhed}. Det var ellers sandheden. Den må arbejde lidt på sin troværdighed.",
"Sandheden var {sandhed}. Ingen fandt den. Jeg havde ellers væddet min sidste småkage på jer.",
"Sandheden var {sandhed}. Ingen fandt den. Den er lidt fornærmet.",
"[sighs] {sandhed}. Det var det rigtige svar. Ingen troede på det.",
"Det var faktisk {sandhed}. Hele stuen tog fejl. Imponerende.",
"{sandhed} var sandheden. I valgte alle sammen noget andet. Modigt.",
"Ingen fandt {sandhed}. Virkeligheden er åbenbart mindre troværdig end jer."
],
"reveal_truth_everyone": [
"Svaret var {sandhed}. Alle fandt det. Jeg får åbenbart brug for bedre løgne.",
"Sandheden var {sandhed}. Enighed i sofaen. Nogen burde tage et billede.",
"[impressed] Alle valgte {sandhed}. Korrekt. Det her bliver svært at forklare som held.",
"{sandhed} var sandheden. Alle ramte rigtigt. Jeg havde ellers reserveret tid til en forklaring.",
"Alle fandt sandheden, {sandhed}. Pointtavlen bliver lige så spændende som fælles opvask.",
"Alle fandt {sandhed}. Det var vist for let. Jeg skriver det på listen.",
"[sighs] {sandhed}. Alle vidste det. Så kan jeg lige så godt holde fri.",
"Sandheden er {sandhed}, og I fandt den alle. Næste gang bliver det sværere.",
"Alle valgte {sandhed}. Rigtigt. Jeg er en smule skuffet over mine løgne.",
"[laughs] {sandhed}! Alle sammen. Det spørgsmål går på pension nu."
],
"scores_intro": [
"{foerende} fører, og {sidst} ligger sidst. Pointtavlen har åbenbart fået holdninger.",
"{foerende} fører. Jubel med omtanke. Der skal stadig være plads til alle i sofaen.",
"{foerende} øverst, {sidst} nederst. Klager modtages på en serviet efter middagen.",
"{foerende} ligger først, {sidst} sidst. Jeg kontrollerede tallene med et ansvarligt nik.",
"Pointtavlen er klar. {foerende} fører. Dejligt med tal. De afbryder mig sjældent.",
"{foerende} fører. {sidst} er sidst, men har det helt sikkert sjovest.",
"[excited] Stillingen! {foerende} på toppen, {sidst} i bunden. Alt kan stadig ske.",
"{foerende} fører lige nu. {sidst}, der er stadig håb. Lidt.",
"Pointtavlen siger {foerende} øverst. {sidst} siger, den er snydt.",
"{foerende} fører. Resten af jer har stadig tid til at lyve bedre."
],
"winner": [
"{vinder} vinder med {point} point. Det skal sofaen nok høre om igen.",
"[cheering] Tillykke, {vinder}! {point} point. Æren er din. Fjernbetjeningen kræver stadig en forhandling.",
"Sejren går til {vinder}, med {point} point. Takketalen må gerne indeholde noget sandt.",
"Med {point} point vinder {vinder}. Min oplæring har tydeligvis været fuldstændig afgørende.",
"{vinder} vinder med {point} point. Præmiebudgettet gik desværre til mit meget velfortjente honorar."
],
"award_biggest_liar": [
"Største løgner, {navn}. {antal} vellykkede bedrag. Prisen overrækkes med et mistænksomt håndtryk.",
"{navn} narrede jer {antal} gange. Tjek lige jeres lommer.",
"{navn} narrede andre {antal} gange. Største løgner! Vi springer forklaringen over.",
"[impressed] Største løgner er {navn}. {antal} gange blev nogen narret. Din fantasi har fået faste kunder.",
"{antal} vellykkede bedrag. Prisen for største løgner går til {navn}. Pokalen er ægte. Tror jeg."
],
"award_truth_seeker": [
"{navn} er sandhedsjæger med {antal} rigtige gæt. En meget irriterende person at diskutere med.",
"Flest rigtige gæt, {navn}, med {antal}. Virkeligheden har åbenbart fået sin egen rådgiver.",
"Sandhedsprisen går til {navn}. {antal} rigtige gæt. Endelig kom den mærkelige viden til nytte.",
"{navn} fandt sandheden {antal} gange. Vi springer høfligt diskussionen om held over.",
"{navn} er sandhedsjæger. {antal} rigtige gæt. Den titel har vi faktisk undersøgt, før vi fandt på den."
],
"award_most_liked": [
"Hjerteprisen går til {navn}, med {antal}. Løgn med charme er åbenbart en disciplin.",
"{antal} hjerter til {navn}. Sofaens yndling. Blomsterhandleren har lige mistet en kunde.",
"Hjerteprisen går til {navn}. Folkets yndlingsløgner. Sæt det ikke på dit CV.",
"[cheering] Flest hjerter, {navn}, med {antal}. Vi har målt din morsomhed med tommelfingre.",
"{navn} vandt {antal} hjerter. Sjældent har en bunke løgne fået så varm en modtagelse."
],
"play_again": [
"En omgang mere! Vi nulstiller pointene. Mistanken gemmer familien selv.",
"I vil spille igen. Det tager jeg som ros og et meget svagt ønske om sandhed.",
"[excited] Så tager vi en til. Nye løgne, samme sofa. Den har efterhånden hørt lidt af hvert.",
"Vi spiller igen. Jeg henter flere fakta. I kan bare genbruge jeres selvtillid.",
"En ny omgang. Jeg er glad for tilliden. Især fordi jeg tydeligvis ikke har fortjent den."
],
"present_intro": [
"Lad os høre jeres svar. Lyt godt efter.",
"[mischievously] Her er svarene. Et af dem er sandt. Resten er jer.",
"Svarene, tak. Jeg læser dem op med min mest troværdige stemme.",
"Lad os høre, hvad I har fundet på. Og hvad virkeligheden har fundet på.",
"[excited] Svarene kommer nu. Gæt ikke endnu, bare lyt."
],
"present_answer": [
"{svar}.",
"Måske {svar}.",
"Eller hvad med {svar}?",
"Nogen siger {svar}.",
"{svar}. Det lyder da rimeligt.",
"{svar}? Hmm.",
"Så er der {svar}.",
"[whispers] {svar}.",
"{svar}. Tænk lige over den.",
"Og {svar}. Hvorfor ikke?"
],
"summary_cleanup": [
"De her løgne troede ingen på. Lad os lige rydde op.",
"[sighs] Ingen faldt for de her. Væk med dem.",
"Disse løgne fik ikke en eneste stemme. Farvel.",
"Lad os feje de løgne væk, som ingen gad tro på.",
"[mischievously] Ingen troede på dem her. De ryger ud med et brag."
],
"summary_points": [
"Og så til pointene.",
"[excited] Lad os se, hvem der tjente noget.",
"Nu tæller vi op.",
"Pointene, tak.",
"Så er det tid til at dele point ud."
],
"summary_favorite": [
"Publikums favorit var {svar}. I kunne ikke styre jer.",
"[laughs] {svar} fik stuen op at køre.",
"I reagerede vildt på {svar}. Det noterer jeg mig.",
"{svar} fik flest reaktioner. Selv jeg måtte trække på smilebåndet.",
"Stuen elskede {svar}. Så er det sagt."
]
"lobby_welcome": [
"Velkommen til Fup og Fakta. Find telefonen frem. Samvittigheden kan blive i lommen.",
"Her må du lyve. Vi har endda lavet en pointtavle til det.",
"Velkommen. Her bliver familiehistorier endelig vurderet efter, hvor godt de snyder.",
"[excited] Fup og Fakta! Find telefonen frem. Jeg har allerede gjort sandheden nervøs.",
"Et spil om sandhed og løgn. Altså en familiefest med lidt tydeligere regler.",
"[mischievously] Velkommen. I aften bliver sandheden sat på en hård prøve.",
"Hej og velkommen. Telefonerne frem, ærligheden ud.",
"Velkommen til Fup og Fakta, hvor man får point for at fortælle historier.",
"Find et godt sted i sofaen. Og et endnu bedre pokerfjæs.",
"Velkommen. Jeg er speakeren, og jeg tror på alt, hvad I siger. Næsten."
],
"lobby_join": [
"{navn} er med. Så har vi en mere at stole lidt for meget på.",
"Velkommen, {navn}. Jeg stoler på dig. Det plejer at gå galt.",
"Der kom {navn}. Endnu et navn til min kommende samling af bortforklaringer.",
"{navn}, dejligt. Jeg skriver dig på listen over mistænkeligt hyggelige mennesker.",
"[suspicious] {navn} er med. Den tavshed tager jeg som en tilståelse.",
"Plads til {navn}. Telefonen er nu officielt et redskab til familieintriger.",
"{navn}, du kom præcis i tide til at tage fejl sammen med os.",
"[impressed] {navn} fandt ind. Første opgave løst. Desværre giver den ingen point.",
"Nu er {navn} her. Så kan vi snart få sandheden nedstemt.",
"[suspicious] {navn} er landet. Jeg holder øje med dig.",
"{navn} er her. Så er der én mere, jeg ikke kan stole på.",
"[excited] {navn}! Endelig en med et ærligt ansigt. Det er de farligste.",
"{navn} er landet. Pas godt på jeres point.",
"Velkommen, {navn}. Lad bare som om, du aldrig har spillet før.",
"{navn} er med. Jeg har allerede en dårlig fornemmelse.",
"[suspicious] Hej, {navn}. Du ser ud til at kunne lyve uden at blinke."
],
"lobby_waiting": [
"{vip}, når du er klar, kan vi begynde. Jeg har løgne, der skal luftes.",
"Hvis vi venter længere, {vip}, bliver mine løgne til gamle familiehistorier.",
"{vip}, giv os et tegn. Helst startknappen. Røgsignaler virker dårligt i stuen.",
"Jeg er klar, {vip}. Det siger jeg også før møder. Her mener jeg det.",
"[whispers] {vip}, jeg har snart brugt min eneste replik om vejret."
],
"game_start": [
"{antal_spillere} spillere og én sandhed. Det bliver en helt almindelig familiefest.",
"{antal_spillere} spillere. Gæt sandheden, og nar de andre. Begge dele giver point.",
"{antal_spillere} spillere. Tilliden i sofaen skal nu testes med helt frivillige løgne.",
"[excited] Vi er i gang! {antal_spillere} spillere, samlet om noget mistænkeligt. Helt lovligt.",
"{antal_spillere} spillere. Point for sandheden og gode løgne. Familiefortælleren får endelig lidt anerkendelse."
],
"round1_intro": [
"Første runde. Almindelige point, ualmindeligt tvivlsomme forklaringer.",
"Vi begynder med normale point. Se det som en høflig prøve på familiens tillid.",
"Runde ét. Pointene er normale. Det er resten af det her sjældent.",
"Første runde, normale point. Jeg starter med fuld tillid. Det plejer at være en kort fornøjelse.",
"Vi starter stille med normale point. I får rigelig mulighed for at råbe senere.",
"Runde ét. Varm løgnene op, vi starter stille og roligt.",
"Første runde. Normale point og helt unormale svar, håber jeg.",
"[excited] Så er vi i gang. Runde ét, almindelige point."
],
"round2_intro": [
"Nu giver vi dobbelt point. {foerende}, din føring får brug for en sikkerhedssele.",
"Runde to, dobbelt point. Nu får selv en lille løgn lidt vokseværk.",
"Vi fordobler pointene. {foerende} fører, men sofaen har endnu ikke kronet nogen.",
"Dobbelt point! Nu er det dyrere at stole på familie og venner.",
"[excited] Runde to giver dobbelt point. Jeg føler mig allerede dobbelt så vigtig."
],
"final_intro": [
"Finale med tredobbelt point. {foerende} fører, men ingen har fået lov at holde takketale.",
"{sidst}, nu giver vi tredobbelt point. Tid til at pynte på regnskabet.",
"{foerende}, finalen giver tredobbelt point. Føringer tæller bedst, når de holder hele vejen.",
"[dramatic] Tredobbelt point i finalen. Nu kan en mavefornemmelse flytte rundt på hele stillingen.",
"Sidste runde. Tre gange pointene. Jeg har allerede øvet min overraskede stemme."
],
"category_choose": [
"{navn}, vælg en kategori. Gerne noget, du kan lyve selvsikkert om.",
"Valget er dit, {navn}. Hele sofaen får naturligvis lov at brokke sig bagefter.",
"Hvad skal vi høre om, {navn}? Du har ordet. Jeg beholder opmærksomheden.",
"{navn}, peg på en kategori. Her er mavefornemmelsen faktisk kvalificeret.",
"{navn}, hvilken kategori? Du behøver kun vælge én. Gem resten til ønskesedlen.",
"{navn}, du vælger. Tænk dig om. Eller lad være, det går hurtigere.",
"{navn} har magten nu. Det gik jo nok.",
"[excited] {navn}, vælg en kategori! Alle kigger på dig. Intet pres.",
"{navn}, hvad skal det være? Alle andre har allerede en mening.",
"Turen er kommet til {navn}. Lad os se, hvor længe det holder.",
"{navn}, vælg klogt. Eller vælg sjovt. Det er sjældent det samme."
],
"category_timeout": [
"{navn} tog betænkningstid. Vi tog {kategori}. Så kom der da en beslutning.",
"Det blev {kategori}. {navn}, stilhed er åbenbart også en måde at vælge på.",
"[sighs] {navn}, tiden løb. Nu hedder kategorien {kategori}. Den kunne heldigvis beslutte sig.",
"{kategori} er valgt. {navn}, vi kalder det delegering. Det lyder pænere.",
"{navn}, universet har valgt {kategori}. Universet arbejder åbenbart hurtigere end vores familie."
],
"lie_start": [
"Nu gælder det {kategori}. Skriv en løgn, der kunne få sit eget leksikonopslag.",
"{kategori}. Skriv en løgn, der føles som noget, man har hørt før.",
"Skriv en løgn om {kategori}. Giv den en parkeringsvagts selvtillid.",
"{kategori} er emnet. Skriv noget opdigtet. Hunden har lovet at tage skylden.",
"Opfind et svar om {kategori}. En lille detalje kan gøre løgnen stor.",
"Vi skal digte om {kategori}. Gør gerne løgnen kedelig. Det virker overraskende godt.",
"[mischievously] Nu handler det om {kategori}. Skriv en løgn, du kunne sige helt alvorligt.",
"Skriv en løgn om {kategori}. Husets dårlige ry kan godt bruge hjælp.",
"{kategori}. Opfind et svar, som selv familiens skeptiker kunne købe.",
"{kategori}. Skriv en troværdig løgn. Du må gerne rette stavefejl i virkeligheden.",
"Kategorien er {kategori}. Gør jer klar til at lyve med god samvittighed.",
"[excited] {kategori}! Nu skal der opfindes fakta.",
"{kategori}. Et emne, I alle sammen tror, I ved noget om.",
"Vi skal tale om {kategori}. Eller rettere, lyve om det.",
"{kategori} står på programmet. Fantasien må gerne tage overarbejde.",
"[mischievously] {kategori}. Jeg har en fornemmelse af, at det her bliver kreativt."
],
"lie_hurry": [
"Ti sekunder. En lille løgn er bedre end en stor tænkepause.",
"Ti sekunder tilbage. Afsted med løgnen. Den behøver kun overleve ét spørgsmål.",
"Ti sekunder. Det behøver ikke være godt. Bare forkert.",
"Ti sekunder! Selv en halvbagt løgn kan serveres med overbevisning.",
"Kun ti sekunder. Din indre forfatter må godt springe korrekturen over.",
"[excited] Ti sekunder! Skriv noget. Hvad som helst.",
"Ti sekunder tilbage. Tænk mindre, skriv mere.",
"Ti sekunder. Selv en dårlig løgn er bedre end ingen løgn.",
"Tiden løber. Ti sekunder til at blive kreativ.",
"[whispers] Ti sekunder. Jeg siger det bare."
],
"lie_all_done": [
"Alle løgne er afleveret. Sikke vi kan arbejde, når sandheden bliver valgfri.",
"Alle har skrevet. Jeg gemmer bunken til næste gang, nogen kalder sig ærlige.",
"Nu har vi alle løgnene. Det er som et familiereferat, bare hurtigere.",
"[impressed] Alle er færdige. Sikke et samarbejde om at gøre hinanden mistænksomme.",
"Alle har løjet. Det gik hurtigere, end jeg havde frygtet.",
"Alle har løjet. Det gik hurtigt. Lidt for hurtigt, hvis I spørger mig.",
"[impressed] Alle løgne er inde. I er skræmmende effektive.",
"Så er alle færdige. Lad os se, hvem der har det bedste pokerfjæs.",
"Alle løgne er afleveret. Sandheden sidder alene i et hjørne og venter.",
"Færdige allerede? I har øvet jer derhjemme, har I ikke?",
"[mischievously] Løgnene er klar. Nu bliver det spændende."
],
"lie_was_truth": [
"Det var faktisk sandheden. Prøv igen, med lidt mindre ærlighed.",
"Sandheden kom ind ad bagdøren. Send den ud igen, og skriv en løgn.",
"Nogen skrev sandheden. Det er snyd. Bare den omvendte slags.",
"Det svar var sandt. En sjælden tastefejl. Prøv med en løgn.",
"Du ramte sandheden. Gem den slags talenter til gættefasen.",
"Nogen kender sandheden. Hold den for dig selv, og skriv en løgn.",
"[suspicious] Der var en, der skrev det rigtige svar. Det tæller ikke.",
"Sandheden er ikke en løgn. Prøv igen."
],
"guess_start": [
"Én af dem er sand. Held og lykke. I får brug for det.",
"Vælg det sande svar. Selvtillid er desværre en dårlig kildehenvisning.",
"Nu skal I gætte sandheden. Tænk efter, før familieanekdoterne tager over.",
"Hvilket svar er sandt? Lad maven bestemme. Den træffer jo allerede aftensmadsbeslutninger.",
"Vælg sandheden. Mine løgne er også med. De er lavet med kærlighed.",
"Find det rigtige svar. Virkeligheden har en ret løs opfattelse af, hvad der er rimeligt.",
"Ét af svarene passer. Vælg det. Resten sælger vi på næste loppemarked.",
"Vælg sandheden. Publikum gætter med. Nu kan endnu flere blande sig.",
"Find sandheden. Bagefter må I gerne give hjerter til de sjoveste løgne.",
"[suspicious] Ét svar er sandt. Vælg med omhu. De andre har bare øvet sig.",
"Find sandheden. Den gemmer sig mellem jeres egne løgne.",
"Ét af svarene er rigtigt. Resten er ren familiefantasi.",
"[mischievously] Vælg med omhu. Nogen her vil gerne have, at du tager fejl.",
"Nu skal I gætte. Stol på maven. Eller på din nabo, hvis du tør.",
"Ét svar er sandt. Held og lykke med at finde ud af hvilket.",
"Gæt løs. Det er helt normalt at være i tvivl. Det er pointen."
],
"guess_hurry": [
"Fem sekunder. Vælg et svar. Det hjælper sjældent at stirre vredt på telefonen.",
"Fem sekunder tilbage. Din mavefornemmelse har nu sidste ord.",
"Der er fem sekunder. Tvivlen får desværre ingen point.",
"Fem sekunder! Vælg et svar, før din store overvejelse bliver en meget lille aflevering.",
"Kun fem sekunder. Sandheden venter. Den er åbenbart bedre opdraget end mig.",
"[excited] Fem sekunder! Vælg nu.",
"Fem sekunder. Maven ved det godt.",
"Fem, fire.. vælg noget!",
"Fem sekunder tilbage. Det første svar er ofte det rigtige. Nogle gange.",
"Fem sekunder. Ingen fortrydelse, kun gæt."
],
"reveal_lie_fooled": [
"{forfatter} opfandt {svar}. {ofre} købte den. Kvitteringen er desværre forsvundet.",
"{ofre} faldt for {svar}. {forfatter}, din fantasi har nu fået selskab.",
"Det var {forfatter}, der fandt på {svar}. {ofre} hoppede lige i.",
"[chuckles] {svar} var en løgn fra {forfatter}. Tak for støtten, {ofre}.",
"{forfatter} skrev {svar}, og {ofre} tog imod. Meget høfligt. Meget forkert.",
"{svar} kom fra {forfatter}. {ofre} lod sig overbevise. Selvtilliden fik åbenbart ordet først.",
"{ofre} troede på {svar}. {forfatter} har lige bevist, at en god historie kan springe køen over.",
"{forfatter}, {svar} virkede på {ofre}. Den løgn slap godt fra middagsbordet.",
"{svar}, sagde {forfatter}. Ja tak, sagde {ofre}. Og sådan fik fantasien sin belønning.",
"{svar} var en løgn fra {forfatter}. {ofre}, det bliver mellem os og hele stuen.",
"{svar}? Løgn! {forfatter} fandt på den, og {ofre} hoppede direkte i.",
"[laughs] {ofre} troede på {svar}. Flot arbejde, {forfatter}.",
"{svar} kom fra {forfatter}. {ofre} faldt i. Det sker for de bedste.",
"Løgn! {svar} var opfundet af {forfatter}. {ofre} tog den med et smil.",
"[chuckles] {forfatter} skrev {svar}. {ofre} købte den uden at blinke.",
"{svar}. Helt opdigtet af {forfatter}. Og {ofre} slugte den råt.",
"{ofre} valgte {svar}. {forfatter} gnider sig i hænderne.",
"{svar} var en løgn. {forfatter} narrede {ofre}. Sådan skal det gøres."
],
"reveal_lie_fooled_many": [
"{antal} troede på {svar}. {forfatter}, du har nok til at stifte en forening.",
"{forfatter} fik {antal} til at vælge {svar}. Sofaen har dannet fælles front mod fakta.",
"[impressed] {svar} narrede {antal}. {forfatter}, jeg bøjer mig. Mest for at gemme min jalousi.",
"{antal} hoppede på {svar}. {forfatter}, du kan starte en bølge uden at rejse dig.",
"{svar} narrede {antal}. {forfatter}, din fantasi har flere tilhængere end min madplan."
],
"reveal_lie_shared": [
"{forfattere} skrev begge {svar}. To hjerner, én fælles omvej.",
"{forfattere} leverede {svar}. To løgnere for én. Det kan tilbudsavisen lide.",
"{forfattere} fandt på {svar}. Samme løgn. Fantasien må have en kopimaskine.",
"{svar}, fra {forfattere}. En løgn med to underskrifter. Næsten klar til kommunen.",
"[suspicious] {forfattere} skrev {svar}. Jeg siger bare, at telepati burde stå i reglerne."
],
"reveal_house_lie": [
"{svar} var min løgn. Tak, {ofre}. Dejligt, at kunst bliver værdsat.",
"[mischievously] {ofre} valgte {svar}. Husets løgn. Jeg modtager gerne stående bifald fra sofaen.",
"Jeg opfandt {svar}. {ofre} troede på den. Det kalder jeg godt samarbejde.",
"{ofre}, {svar} var min. Så ved vi, hvem der bestemmer over rygterne.",
"{ofre} købte {svar}. Min opskrift. Tillid er åbenbart den hemmelige ingrediens.",
"{svar} kom fra huset. {ofre}, den forklaring kan give næste middag ekstra samtalestof.",
"{ofre} troede på {svar}. Jeg skrev den helt uden hjælp fra virkeligheden.",
"Min løgn var {svar}. {ofre}, jeg kan mærke min dårlige samvittighed tage fri.",
"{svar} snød {ofre}. Den var min. Jeg øver lige mit ydmyge nik.",
"Huset opfandt {svar}. {ofre} faldt for den. Så sparede vi penge på specialeffekter.",
"[mischievously] {svar} var min. {ofre} faldt for huset. Jeg er rørt.",
"{ofre} valgte {svar}. Den skrev jeg selv. Tak for tilliden.",
"Husets løgn! {svar} narrede {ofre}. Jeg tager æren.",
"{svar}? Det var mig. {ofre}, vi to skal have en lille snak.",
"[laughs] {ofre} faldt for {svar}. Den var fra huset. Bare så I ved det.",
"{svar} kom fra mig. {ofre} hoppede i. Huset vinder igen."
],
"reveal_truth_found": [
"Sandheden er {sandhed}. {navne} fandt den. Så fik virkeligheden lidt opbakning.",
"{navne} valgte sandheden, {sandhed}. Gem lige øjeblikket til næste familiediskussion.",
"[impressed] Svaret er {sandhed}. {navne} gennemskuede os. Irriterende godt arbejde.",
"{sandhed}, det er sandheden. {navne} ramte rigtigt. Meget upraktisk for løgnerne.",
"{sandhed} er svaret. {navne} har tilladelse til ét lille, bedrevidende nik.",
"{navne} ramte rigtigt med {sandhed}. Nogen har åbenbart læst bagsiden af mælkekartonen.",
"Sandheden var {sandhed}. Godt fanget, {navne}. Den viden fortjente sin egen fest.",
"{navne} valgte {sandhed}. Korrekt. Skepsissen kan lige lægge benene op.",
"{navne} fandt sandheden, {sandhed}. Mavefornemmelsen har lige fået en lønforhøjelse.",
"Svaret er {sandhed}. Point til {navne}. Jeg vidste det selvfølgelig også. Næsten.",
"[excited] Og sandheden er.. {sandhed}! Point til {navne}.",
"[impressed] {sandhed}. Rigtigt! {navne} lader sig ikke snyde.",
"Det rigtige svar er {sandhed}. Godt gået, {navne}.",
"{sandhed} er sandheden. {navne} fik point. Resten fik en lærestreg.",
"Ja, det er faktisk {sandhed}. {navne} vidste det godt.",
"Sandheden er {sandhed}! {navne} så igennem det hele."
],
"reveal_truth_nobody": [
"Svaret var {sandhed}. Ingen fandt det. Vi lader som om, det her var opvarmning.",
"Sandheden var {sandhed}. Hele sofaen tog fejl. Sikke en sjælden form for enighed.",
"[sighs] Sandheden var {sandhed}. Den stod lige der. Jeg giver virkeligheden et trøstende kram.",
"Ingen valgte {sandhed}. Det var ellers sandheden. Den må arbejde lidt på sin troværdighed.",
"Sandheden var {sandhed}. Ingen fandt den. Jeg havde ellers væddet min sidste småkage på jer.",
"Sandheden var {sandhed}. Ingen fandt den. Den er lidt fornærmet.",
"[sighs] {sandhed}. Det var det rigtige svar. Ingen troede på det.",
"Det var faktisk {sandhed}. Hele stuen tog fejl. Imponerende.",
"{sandhed} var sandheden. I valgte alle sammen noget andet. Modigt.",
"Ingen fandt {sandhed}. Virkeligheden er åbenbart mindre troværdig end jer."
],
"reveal_truth_everyone": [
"Svaret var {sandhed}. Alle fandt det. Jeg får åbenbart brug for bedre løgne.",
"Sandheden var {sandhed}. Enighed i sofaen. Nogen burde tage et billede.",
"[impressed] Alle valgte {sandhed}. Korrekt. Det her bliver svært at forklare som held.",
"{sandhed} var sandheden. Alle ramte rigtigt. Jeg havde ellers reserveret tid til en forklaring.",
"Alle fandt sandheden, {sandhed}. Pointtavlen bliver lige så spændende som fælles opvask.",
"Alle fandt {sandhed}. Det var vist for let. Jeg skriver det på listen.",
"[sighs] {sandhed}. Alle vidste det. Så kan jeg lige så godt holde fri.",
"Sandheden er {sandhed}, og I fandt den alle. Næste gang bliver det sværere.",
"Alle valgte {sandhed}. Rigtigt. Jeg er en smule skuffet over mine løgne.",
"[laughs] {sandhed}! Alle sammen. Det spørgsmål går på pension nu."
],
"scores_intro": [
"{foerende} fører, og {sidst} ligger sidst. Pointtavlen har åbenbart fået holdninger.",
"{foerende} fører. Jubel med omtanke. Der skal stadig være plads til alle i sofaen.",
"{foerende} øverst, {sidst} nederst. Klager modtages på en serviet efter middagen.",
"{foerende} ligger først, {sidst} sidst. Jeg kontrollerede tallene med et ansvarligt nik.",
"Pointtavlen er klar. {foerende} fører. Dejligt med tal. De afbryder mig sjældent.",
"{foerende} fører. {sidst} er sidst, men har det helt sikkert sjovest.",
"[excited] Stillingen! {foerende} på toppen, {sidst} i bunden. Alt kan stadig ske.",
"{foerende} fører lige nu. {sidst}, der er stadig håb. Lidt.",
"Pointtavlen siger {foerende} øverst. {sidst} siger, den er snydt.",
"{foerende} fører. Resten af jer har stadig tid til at lyve bedre."
],
"winner": [
"{vinder} vinder med {point} point. Det skal sofaen nok høre om igen.",
"[cheering] Tillykke, {vinder}! {point} point. Æren er din. Fjernbetjeningen kræver stadig en forhandling.",
"Sejren går til {vinder}, med {point} point. Takketalen må gerne indeholde noget sandt.",
"Med {point} point vinder {vinder}. Min oplæring har tydeligvis været fuldstændig afgørende.",
"{vinder} vinder med {point} point. Præmiebudgettet gik desværre til mit meget velfortjente honorar."
],
"award_biggest_liar": [
"Største løgner, {navn}. {antal} vellykkede bedrag. Prisen overrækkes med et mistænksomt håndtryk.",
"{navn} narrede jer {antal} gange. Tjek lige jeres lommer.",
"{navn} narrede andre {antal} gange. Største løgner! Vi springer forklaringen over.",
"[impressed] Største løgner er {navn}. {antal} gange blev nogen narret. Din fantasi har fået faste kunder.",
"{antal} vellykkede bedrag. Prisen for største løgner går til {navn}. Pokalen er ægte. Tror jeg."
],
"award_truth_seeker": [
"{navn} er sandhedsjæger med {antal} rigtige gæt. En meget irriterende person at diskutere med.",
"Flest rigtige gæt, {navn}, med {antal}. Virkeligheden har åbenbart fået sin egen rådgiver.",
"Sandhedsprisen går til {navn}. {antal} rigtige gæt. Endelig kom den mærkelige viden til nytte.",
"{navn} fandt sandheden {antal} gange. Vi springer høfligt diskussionen om held over.",
"{navn} er sandhedsjæger. {antal} rigtige gæt. Den titel har vi faktisk undersøgt, før vi fandt på den."
],
"award_most_liked": [
"Hjerteprisen går til {navn}, med {antal}. Løgn med charme er åbenbart en disciplin.",
"{antal} hjerter til {navn}. Sofaens yndling. Blomsterhandleren har lige mistet en kunde.",
"Hjerteprisen går til {navn}. Folkets yndlingsløgner. Sæt det ikke på dit CV.",
"[cheering] Flest hjerter, {navn}, med {antal}. Vi har målt din morsomhed med tommelfingre.",
"{navn} vandt {antal} hjerter. Sjældent har en bunke løgne fået så varm en modtagelse."
],
"play_again": [
"En omgang mere! Vi nulstiller pointene. Mistanken gemmer familien selv.",
"I vil spille igen. Det tager jeg som ros og et meget svagt ønske om sandhed.",
"[excited] Så tager vi en til. Nye løgne, samme sofa. Den har efterhånden hørt lidt af hvert.",
"Vi spiller igen. Jeg henter flere fakta. I kan bare genbruge jeres selvtillid.",
"En ny omgang. Jeg er glad for tilliden. Især fordi jeg tydeligvis ikke har fortjent den.",
"Én gang til! Pointene er nulstillet. Mistanken er det ikke.",
"[excited] Revanche! Jeg elsker en revanche.",
"Nyt spil. Samme løgnere. Jeg glæder mig.",
"I kan ikke få nok. Det forstår jeg godt. Vi kører igen.",
"Så kører vi en omgang mere. Nu med endnu mere mistillid."
],
"present_intro": [
"Lad os høre jeres svar. Lyt godt efter.",
"[mischievously] Her er svarene. Et af dem er sandt. Resten er jer.",
"Svarene, tak. Jeg læser dem op med min mest troværdige stemme.",
"Lad os høre, hvad I har fundet på. Og hvad virkeligheden har fundet på.",
"[excited] Svarene kommer nu. Gæt ikke endnu, bare lyt.",
"Jeg læser svarene op. Ét af dem er sandt. Lyt godt efter.",
"[whispers] Her kommer svarene. Lad være med at gætte endnu.",
"Svarene på bordet. Jeg lover at læse dem alle lige overbevisende.",
"Lyt med. Jeg sælger hvert eneste svar, som om det var mit eget.",
"Her er, hvad I har fundet på. Plus én ting, der faktisk passer.",
"[curious] Lad os høre svarene. Jeg er selv spændt.",
"Svarene kommer nu. Ét er sandt, og resten er meget selvsikre.",
"Ører på stilke. Svarene læses op ét ad gangen.",
"Jeg læser op. I lytter. Det er sjældent, det går så nemt.",
"Her er svarene. Jeg har ingen favoritter. Det påstår jeg i hvert fald."
],
"present_answer": [
"{svar}.",
"Måske {svar}.",
"Eller hvad med {svar}?",
"Nogen siger {svar}.",
"{svar}. Det lyder da rimeligt.",
"{svar}? Hmm.",
"Så er der {svar}.",
"[whispers] {svar}.",
"{svar}. Tænk lige over den.",
"Og {svar}. Hvorfor ikke?"
],
"summary_cleanup": [
"De her løgne troede ingen på. Lad os lige rydde op.",
"[sighs] Ingen faldt for de her. Væk med dem.",
"Disse løgne fik ikke en eneste stemme. Farvel.",
"Lad os feje de løgne væk, som ingen gad tro på.",
"[mischievously] Ingen troede på dem her. De ryger ud med et brag.",
"Der er nogle løgne her, som ingen gad røre. Ud med dem.",
"[chuckles] De her blev ikke valgt af nogen. Ikke engang af høflighed.",
"Lad os lige rydde bordet for løgne, som ingen gad tro på.",
"Ingen hoppede på de her. Jeg sender dem på pension.",
"[sighs] De her løgne gjorde deres bedste. Det var bare ikke nok.",
"Nul stemmer. Det er en ret tydelig anmeldelse. Væk med dem.",
"De her troede ingen på. Jeg kalder på oprydningsholdet.",
"[mischievously] Ingen valgte dem. Så nu får de lov at eksplodere.",
"Tid til hovedrengøring. De her løgne flytter ud nu.",
"Ingen ville have dem. Ligesom den sidste frikadelle, bare værre."
],
"summary_points": [
"Og så til pointene.",
"[excited] Lad os se, hvem der tjente noget.",
"Nu tæller vi op.",
"Pointene, tak.",
"Så er det tid til at dele point ud.",
"Så skal pointene på plads.",
"[excited] Og nu det vigtige. Pointene!",
"Lad os se, hvem der kan købe sig en ny pointtavle.",
"Pointene ruller ind nu.",
"Så er det lønningsdag for løgnere.",
"Regnskabet, tak. Hvem tjente på det her?",
"[chuckles] Nu bliver der talt op. Ingen snyd, det er mit job.",
"Lad os se, hvem der har gjort sig fortjent til noget.",
"Kassen er åben. Pointene deles ud.",
"Så er det tid til at se, hvem der faktisk fik noget ud af det."
],
"summary_favorite": [
"Publikums favorit var {svar}. I kunne ikke styre jer.",
"[laughs] {svar} fik stuen op at køre.",
"I reagerede vildt på {svar}. Det noterer jeg mig.",
"{svar} fik flest reaktioner. Selv jeg måtte trække på smilebåndet.",
"Stuen elskede {svar}. Så er det sagt."
],
"lie_progress_fast": [
"{navn} er allerede færdig. Mistænkeligt hurtigt.",
"[suspicious] {navn} har allerede løjet. Det gik lidt for let.",
"{navn} er klar. Den løgn lå åbenbart lige på lager.",
"Hov, {navn} er færdig. Det kalder jeg rutine.",
"{navn} skrev løs uden at tøve. Det må vi holde øje med.",
"[chuckles] {navn} er færdig allerede. Har du øvet dig?",
"{navn} har afleveret. Hurtigt og uden skrupler.",
"Første løgn er inde, tak til {navn}. Der var ingen tøven.",
"{navn} er færdig. Resten af jer kan godt mærke presset nu.",
"[impressed] {navn} har allerede løjet. Imponerende. Og lidt bekymrende."
],
"lie_progress_retry": [
"{navn} er færdig. Andet forsøg sad i skabet.",
"{navn} fik det til sidst. Øvelse gør mester.",
"[chuckles] {navn} prøvede igen, og nu er den inde.",
"{navn} er klar efter lidt bøvl. Det tæller stadig.",
"Så kom {navn} i mål. Ikke kønt, men i mål.",
"{navn} har afleveret. Anden gang er lykkens gang.",
"[sighs] {navn} er endelig færdig. Jeg var lige ved at blive bekymret.",
"{navn} fandt en ny løgn. Den gamle var for ærlig."
],
"lie_progress": [
"{navn} er færdig. Lad os håbe, den er god.",
"{navn} har løjet. Jeg tager det ikke personligt.",
"Der kom en løgn fra {navn}. Jeg har lagt den i bunken.",
"{navn} er klar. Resten, kom så.",
"[mischievously] {navn} har skrevet noget. Jeg siger ikke hvad.",
"{navn} er færdig. Der er stadig tid til jer andre.",
"En løgn mere i posen. Tak, {navn}.",
"{navn} har afleveret. Ser selvsikker ud. Det er et dårligt tegn.",
"{navn} er inde. Nu mangler vi bare resten af familien.",
"[whispers] {navn} er færdig. Og jeg tror, den er lumsk."
]
}
+2 -2
View File
@@ -10,6 +10,7 @@ LINES = Path(__file__).resolve().parents[1] / "narrator" / "lines.json"
# begivenhed -> tilladte pladsholdere (samme tabel som i prompten til manuskriptet)
EVENTS = {
"lie_progress": {"navn"}, "lie_progress_fast": {"navn"}, "lie_progress_retry": {"navn"},
"lobby_welcome": set(), "lobby_join": {"navn"}, "lobby_waiting": {"vip"},
"game_start": {"antal_spillere"}, "round1_intro": set(), "round2_intro": {"foerende"},
"final_intro": {"foerende", "sidst"}, "category_choose": {"navn"}, "category_timeout": {"navn", "kategori"},
@@ -24,8 +25,7 @@ EVENTS = {
"present_intro": set(), "present_answer": {"svar"}, "summary_cleanup": set(), "summary_points": set(),
"summary_favorite": {"svar"},
}
TAGS = {"laughs", "chuckles", "sighs", "whispers", "excited", "sarcastic", "dramatic", "pause",
"mischievously", "impressed", "disappointed", "suspicious", "cheering"}
from party.narrator import AUDIO_TAGS as TAGS # samme liste som hjernen og filtret bruger
class NarratorLinesTests(SimpleTestCase):
+4 -1
View File
@@ -5,7 +5,7 @@ from django.core.management.base import BaseCommand
from fupogfakta.engine import RULES
from fupogfakta.models import Question
from party import tts
from party.narrator import LINES, TEASES, speakable_prompt
from party.narrator import LINES, TEASES, Narrator, speakable_prompt
def _expand_categories(lines: list[str], categories: list[str]) -> list[str]:
@@ -47,9 +47,12 @@ class Command(BaseCommand):
# Spørgsmålene i den rækkefølge, spillet vælger dem (mindst brugte først), skiftevis med
# kategori-replikkerne, så begge dele bliver dækket over et par nætter.
narrator = Narrator()
questions = []
for q in Question.objects.filter(active=True).select_related("category").order_by("times_used", "id"):
questions += [speakable_prompt(q.prompt)] + ([q.note] if q.note else [])
# oplæsningen i runde 2/finalen: sandheden og husets løgne med deres forudskrevne kommentar
questions += [narrator.present_answer(svar, comment) for svar, comment in (q.pitch or {}).items() if comment]
categories = sorted(set(Question.objects.filter(active=True).values_list("category__name", flat=True)))
per_category = _expand_categories(LINES.get("lie_start", []), categories)
queue = [t for pair in zip(questions, per_category) for t in pair]
+7 -2
View File
@@ -51,7 +51,7 @@ def safe(text: str) -> str:
# Lyd-tags, som stemmen (eleven_v3/v4) udfører i stedet for at læse dem op. Andre [ord] fjernes,
# så en opfundet tag ikke bliver læst højt.
AUDIO_TAGS = {"laughs", "chuckles", "giggles", "sighs", "whispers", "excited", "mischievously", "sarcastic",
"suspicious", "impressed", "gasps", "dramatic", "cheering", "curious", "snorts"}
"suspicious", "impressed", "gasps", "dramatic", "cheering", "curious", "snorts", "pause", "disappointed"}
def keep_known_tags(text: str) -> str:
@@ -75,7 +75,12 @@ def speakable_prompt(prompt: str) -> str:
# Drillerier på telefonen: kort tekst på skærmen og (hvis der er stemme) samme replik læst op.
TEASES = ["Buh!", "Hov hov, der røg du i!", "Avs, avs, avs!", "Snydt!", "Hihi, den var god!",
"Klassisk dig!", "Ups!", "Ha! Fanget!"]
"Klassisk dig!", "Ups!", "Ha! Fanget!",
"[laughs] Snydt igen!", "Den købte du råt!", "Nåå, troede du på den?", "[whispers] Jeg så det godt.",
"Lige i fælden!", "Bid på krogen!", "[chuckles] Hov, hov!", "Den var for nem!",
"Ups, der røg pointene.", "[mischievously] Tak for pointene!", "Godtroende!", "Sikke en naiv sjæl!",
"Narret!", "Fanget med fingrene i løgnen!", "[gasps] Den troede du på?", "Lidt for tillidsfuld!",
"Hjem og læs lektier!", "[sighs] Åh nej, ikke dig også.", "Den løgn sad lige i skabet!", "Bum! Fanget!"]
class Narrator:
+29 -10
View File
@@ -14,6 +14,7 @@ import random
import time
from asgiref.sync import sync_to_async
from django.conf import settings
from fupogfakta import engine
from fupogfakta.models import record_question_result
@@ -127,7 +128,9 @@ class Room:
for conn in list(self.connections):
try:
await conn.send_state()
except Exception: # en død forbindelse må ikke stoppe de andre
except Exception as e: # en død forbindelse må ikke stoppe de andre
if type(e).__name__ in ("ClientDisconnected", "ConnectionClosed", "ConnectionClosedOK"):
continue # telefonen lukkede lige: helt normalt
log.exception("send_state fejlede i rum %s", self.code)
def _schedule_timer(self):
@@ -233,6 +236,9 @@ class Room:
names = {p.id: p.name for p in g.players.values()}
if t == "lie_submitted" and self.brain:
self._hold_for(self._judge(ev["player"], ev["text"], dict(g.question or {})))
elif t == "lie_submitted": # uden hjerne: ingen dommer, men speakeren kommenterer stadig
self._attempts[ev["player"]] = self._attempts.get(ev["player"], 0) + 1
asyncio.get_running_loop().create_task(self._progress_remark(ev["player"]))
elif t == "lie_start":
self._progress_said, self._attempts = [], {}
elif t == "reactions_summary":
@@ -298,8 +304,13 @@ class Room:
info = {"navn": p.name, "sekunder_om_det": round(now - (g.lie_deadline - engine.LIE_SECONDS)),
"forsøg": self._attempts.get(pid, 1), "færdige": f"{len(g.lies)} af {len(g.players)}",
"point_indtil_nu": p.score}
line = await self.brain.lie_progress(info, list(self.memory))
line = self.narrator.clean_ai(line) if line else line
if self.brain and settings.BRAIN_PROGRESS:
line = await self.brain.lie_progress(info, list(self.memory))
line = self.narrator.clean_ai(line) if line else line
else: # faste replikker med navnet: lyden caches, efterhånden som navnene går igen
key = ("lie_progress_retry" if info["forsøg"] > 1 else
"lie_progress_fast" if info["sekunder_om_det"] < 15 else "lie_progress")
line = self.narrator.line(key, navn=p.name)
if line and g.phase == "lie":
self.say(line, blocking=False)
@@ -454,7 +465,9 @@ class Room:
self.changed()
names = {p.id: p.name for p in g.players.values()}
if self.brain:
tease_job = asyncio.get_running_loop().create_task(self._brain_teases(names))
# drillerierne er som standard faste (cachet lyd); hjernens personlige udgave er et tilvalg
tease_job = (asyncio.get_running_loop().create_task(self._brain_teases(names))
if settings.BRAIN_TEASES else None)
ai_lines = await self._brain_reveal_lines(names)
else:
tease_job, ai_lines = None, {}
@@ -518,14 +531,20 @@ class Room:
ident = (g.round_idx, g.q_idx)
g.hold_present(time.time(), max_wait=COMMENT_WAIT + REVEAL_AUDIO_WAIT + 2 + max(0.0, self.speech_end - time.time()))
self.changed()
comments = {}
if self.brain:
# Sandheden og husets løgne har forudskrevne kommentarer (spørgsmålets "pitch", lyden ligger i cachen);
# hjernen spørges kun om spillernes egne løgne. Mangler der en kommentar til bare ét svar, bruges de
# faste skabeloner til ALLE svar, så forskellen i stil aldrig kan røbe, hvilke svar huset har skrevet.
pitch = {engine.normalize(k): v for k, v in ((g.question or {}).get("pitch") or {}).items()}
comments = {a.id: pitch[engine.normalize(a.text)] for a in g.answers if engine.normalize(a.text) in pitch}
missing = [{"id": a.id, "text": a.text} for a in g.answers if a.id not in comments]
if missing and self.brain:
try:
comments = await asyncio.wait_for(
self.brain.present_lines(dict(g.question or {}), [{"id": a.id, "text": a.text} for a in g.answers]),
timeout=COMMENT_WAIT)
comments.update(await asyncio.wait_for(
self.brain.present_lines(dict(g.question or {}), missing), timeout=COMMENT_WAIT))
except (asyncio.TimeoutError, Exception): # noqa: BLE001
comments = {}
pass
if any(a.id not in comments for a in g.answers):
comments = {}
intro = self.narrator.line("present_intro")
texts = [self.narrator.present_answer(a.text, comments.get(a.id)) for a in g.answers]
try:
+11
View File
@@ -199,3 +199,14 @@ class AudioTagTests(SimpleTestCase):
self.assertEqual(n.present_answer("ugler", "[whispers] Ugler. De ser kloge ud."),
"Ugler. [whispers] De ser kloge ud.") # svaret gentages ikke
self.assertEqual(n.present_answer("[krager]", "Sorte og kloge."), "Krager. Sorte og kloge.") # spillertekst kan ikke sende tags
class PitchTests(SimpleTestCase):
def test_pitch_covers_house_answers_and_brain_only_gets_player_lies(self):
from fupogfakta import engine
q = {"pitch": {"Ugler": "De ser kloge ud.", "krager": "Sorte og snakkesalige."}}
answers = [engine.Answer(id="a1", text="ugler", is_truth=True), engine.Answer(id="a2", text="krager", house=True),
engine.Answer(id="a3", text="pingviner")]
pitch = {engine.normalize(k): v for k, v in q["pitch"].items()}
covered = {a.id for a in answers if engine.normalize(a.text) in pitch}
self.assertEqual(covered, {"a1", "a2"}) # spillerens løgn (a3) er den eneste, hjernen skal skrive til
+5 -1
View File
@@ -46,7 +46,11 @@ BRAIN_BASE_URL = env("BRAIN_BASE_URL", "")
BRAIN_EFFORT = env("BRAIN_EFFORT", "low") # kun Anthropic
BRAIN_WORKSPACE = env("BRAIN_WORKSPACE", "") # kun Anthropic: workspace-id, når nøglen ikke selv er bundet til et
BRAIN_TIMEOUT_FAST = float(env("BRAIN_TIMEOUT_FAST", "6")) # dommer, drillerier
BRAIN_TIMEOUT_SLOW = float(env("BRAIN_TIMEOUT_SLOW", "25")) # kommentarer, anmeldelse
BRAIN_TIMEOUT_SLOW = float(env("BRAIN_TIMEOUT_SLOW", "25"))
# Hjernens personlige drillerier på telefonen (ellers den faste, cachede pulje i narrator.TEASES)
BRAIN_TEASES = env("BRAIN_TEASES", "false").lower() in ("1", "true", "yes")
# Hjernens bemærkninger, når en løgn afleveres (ellers faste replikker med navnet)
BRAIN_PROGRESS = env("BRAIN_PROGRESS", "false").lower() in ("1", "true", "yes") # kommentarer, anmeldelse
# Rummets mikrofon (eksperimentel, slås til på storskærmen): elevenlabs | openai (Whisper-kompatibel)
STT_PROVIDER = env("STT_PROVIDER", "elevenlabs")