Hra a laboratoř · tabletop-3

Spusťte npm run dev a otevřete / (stará adresa /tabletop.html přesměruje). Stránka obsahuje hru, přepínač tématu a jazyka, nastavení scénáře a vlastní mapy, hráče a boty, panel externího agenta, návrh karty, experimenty, inspektor rozhodnutí, ověřitelné trajektorie a tisk.

Ovládání u stolu

Obrazovka kopíruje rozložení skutečného stolu: společné úsilí ve dvou miskách (k dispozici / vydané), karta kola se žetonem, oba balíčky lícem dolů, karta cíle, karty míst s figurkami a situacemi, prostory postav a transportu a zóny odložených a vyřešených karet. Transport je na mapě jen figurka jako postavy. Jeho karta se sloty paluby a nákladu leží stranou a stav ukazuje otočením. Kdo je na palubě, stojí figurkou na této kartě, ne na mapě.

Místa se rozloží podle souřadnic mapy tak, aby se spoje nekřížily a nevedly přes cizí kartu. Mapa bez souřadnic se rozloží jen podle spojů. Na úzkém displeji jsou místa pod sebou v pořadí od základny k cíli a spoje ukazují odkazy na kartách.

Akce jsou dvoukrokové, aby odpovídaly placení u stolu. Vyberete komponentu, v bočním panelu zvolíte akci a teprve tlačítko v náhledu ji provede a odečte úsilí; náhled uvádí, kolik žetonů přesunout do vydaného úsilí. Výběr lze zrušit bez následku. Totéž jde myší: figurku nebo kartu přetáhnete na cílovou kartu a přetažení nabídne odpovídající akci. Nelegální přetažení se odmítne hláškou, nikoli tichým selháním.

U situace zaškrtnete účastníky řešení na stejném místě a vyberete příjemce odměny; panel ukazuje, které schopnosti skupina pokrývá a proč akce případně není dostupná. Konec kola otevře dialog s kroky úklidu (odložit naléhavé, otočit čerstvé, posunout žeton a dobrat), takže je stejný postup vidět i u stolu.

Co je dokončené

Scénáře a změna obtížnosti

Scénář Kola Úsilí na kolo Karty cesty Kapacita transportu Umisťování
Rozdělená posádka 6 8 4 2 včetně obsluhy podle geografie
Seznámení 8 10 3 5 cyklus míst
Mlžné souostroví 7 9 3 3 podle geografie; na začátku 2 karty, příchod jen ohlásí, balíček Výprava

Cílem je dopravit všechny zbývající postavy a funkční transport do cílového místa po získání potřebných karet cesty. Postavy nemusí být současně na palubě. Ve variantě bez transportu stačí postavy.

Tím se omezuje levné převážení celé skupiny. Scénář vznikl po porovnání pěti rozpočtů na 1 500 partiích, potom se ověřoval na oddělených seedech. Výsledky a omezení jsou v balance.md. Jde o ověřenou změnu chování simulovaných strategií, nikoli o certifikaci zábavnosti nebo věkové vhodnosti.

V UI lze upravit kola, úsilí, počet cílů, kapacitu, role, přítomnost transportu, topologii, průzkum, balíček Výprava a varianty průzkumu. Změna scénáře načte jeho preset, následné vlastní úpravy jsou výslovné. Stejné chování platí pro variantu {scenarioId: "family"} v experimentu.

Geografie bez digitální pomůcky

Režim geography umisťuje odměny do základny nebo jejích sousedů, cílové situace alespoň do poloviny největší vzdálenosti od základny a hrozby do artikulačních bodů. Pokud taková úzká místa nejsou, hrozby mohou vzniknout kdekoli. Dosažitelnost určuje graf, nikoli souřadnice.

Na každé tištěné situaci je seznam povolených míst. Zamíchejte samostatný balíček umístění; postupně odkrývejte karty a vracejte je dospod, dokud nenajdete povolené místo. Počáteční pořadí je skryté, později může být odvoditelné. Stejný postup používá engine. Audit upozorňuje na nedosažitelný cíl pro transport, chybějící schopnosti rolí, neúměrnou vzdálenost a překročení komponentového rozpočtu. Varování o schopnosti není důkaz neřešitelnosti: schopnost může dodat odměna.

Vlastní mapa má nodes s ID n0 až n8, názvy, polem tags a volitelnými souřadnicemi; edges obsahují from, to, tags. První místo je základna, poslední cíl. Transport má profil range 2 s tagem sea: musí být povolený každý spoj i cílové místo každého kroku. UI i tisk to překládají jako „transport i postavy“ nebo „jen postavy“. Není třeba pamatovat technické tagy.

Experimenty, agenti a větvení

npm run experiment -- examples/tabletop/holdout.json output/experiments/holdout.json
npm run experiment -- examples/tabletop/exploration.json output/experiments/exploration.json
npm run simulate -- 100 ring6 output/quick.json --strategy=scout

Formát specifikace, sweepy, porovnání, externí agenti, trajektorie a inspektor rozhodnutí jsou popsané v experiments.md. Strategie jsou random, greedy (samostatní řešitelé), convoy (společný postup), cooperative (výběr skupiny podle schopností a cestovních nákladů, rozdělování redundantních předmětů) a scout (nejdřív zachytí podrobnosti signálů, pak na dálku odhalí ty, které slibují kartu cesty). Nejsou optimální; zejména transportní logistika je heuristická.

Hráči, boti a externí agent

U každé postavy zvolíte, kdo ji hraje: člověk, nebo jedna ze strategií. Tah bota provede další akci první postavy řízené botem, která má co dělat; „Boti dohrají kolo“ opakuje tahy, dokud se kolo nezmění. Bot vybírá jen ze svých akcí a z pozorování své postavy, takže se znalostí po postavách neví víc než ona. Kolo ukončí sám jen tehdy, když u stolu nehraje žádný člověk; jinak čeká.

Panel Externí agent zkopíruje veřejný kontext vybrané postavy (pozorování, její akce a společné akce, cíle, poslední historii) pro LLM nebo jiný program. Odpověď {"actionId": "…", "reason": "…"} se ověří proti nabídnutým akcím a provede. Zdůvodnění se ukládá mimo stav hry a exportuje se s trajektorií jako komentář; ověření trajektorie ho ignoruje.

Jazyky a témata

Jazyk je vlastnost tištěné sady (config.locale), stejně jako téma. Přepnutí v hlavičce přehraje stejné akce se jmény v novém jazyce nebo tématu a Vrátit akci přepnutí vrátí. Texty rozhraní, pravidel, tisku, auditu a chyb jsou v src/locales/cs.js a en.js, jména karet, míst a rolí v tématu. Test hlídá, že oba jazyky mají stejné klíče a že anglická stránka neobsahuje český text.

Návrh karty

Do panelu Návrh karty vložíte JSON nové karty. Kontrola ověří ID, název, požadavky (nejvýše dvě schopnosti), úsilí 1–3, typ (cíl, hrozba, nebo odměna s druhem a jednou schopností), kopie, viditelnost, signál, podmínky odhalení a vysílání. Spočítá tištěnou sadu i s kopiemi a odmítne návrh, který by překročil 50 karet. Varuje před kartou bez požadavku nebo zavádějící nápovědou signálu. Platný návrh ukáže tištěný líc. Do hry ho přidáte ručně jako kartu balíčku v src/content.js a jméno doplníte do všech témat.

Co měříme

Párový experiment bez transportu měří účinek jeho odebrání pro danou strategii. Korelace separace a výher sama neprokazuje, že rozdělení týmu způsobilo úspěch.

Komponenty a fyzický audit

Základní sada: 44 karet, 5 figurek, 8 žetonů úsilí a jeden žeton kola, s průzkumem navíc 12 žetonů signálů a žeton ? pro každé místo kromě základny. Karty: šest míst, šest umístění, čtyři postavy, jeden transport, 25 situací, kolo a cíl. Rozpočet sady je 50 karet, 6 figurek, 12 žetonů úsilí a 24 dalších žetonů; konfiguraci nad něj (např. devět míst a pět postav, tedy 51 karet) engine odmítne s konkrétním důvodem.

Stav Reprezentace
místa, spoje, role, schopnosti, ceny a kapacity tištěné karty a pravidla
poloha postavy / transportu figurka u místa; pasažér na kartě transportu
provozní stav orientace karty postavy nebo transportu 0° / 90° / 180° / mimo stůl
čerstvá / naléhavá situace karta rovně / na boku
vyřešené cíle a odložené karty oddělené zóny
předmět / dovednost / místní a týmové vybavení tatáž odměnová karta u vlastníka; nové karty nepřibývají
balíčky situací a umístění fyzické pořadí, stejné ruby
kolo, úsilí, vítězství žeton kola, společný fond, otočený cíl
výsledek odvozený z cíle nebo posledního kola
konfigurace a verze pravidla/scénář; seed pouze pro digitální reprodukci
historie, ID, snímky a metriky digitální analýza, neovlivňuje pravidla

Odstraněný klasický model 0.3 (tag classic-0.3) ukazuje, proč tato pravidla platí: jeho souběžné čítače resources/strain/progress, seznam visited, assistsUsed/opportunities, rozpracovanost invested, deadline, osobní akce/assist/freeMove a turn/passed by vyžadovaly více žetonů, seznamů nebo paměti. Stolní verze je nahrazuje jediným fondem, polohou a orientací. Interní diagnostika může být složitější než operace u stolu.

Tisk a ověření

PDF není v gitu. Vytvoříte ho ze stejného tiskového výstupu jako ve hře, ne z ručně udržované druhé sady pravidel: A4, karty 63 × 88 mm, jednostranný tisk při 100 % a při zapnutém průzkumu strana žetonů (tři signály na kategorii a žeton ? pro každé místo kromě základny). Karty situací a umístění tiskněte na neprůhledný papír nebo vložte do stejných obalů. Generátor odmítne přetečení obsahu karty.

Přegenerování potřebuje vývojový Python balíček reportlab (kontrola vzhledu pymupdf); hra samotná je nepotřebuje. Třetí argument je písmo s českou diakritikou a šipkami; bez něj skript zkusí Arial Unicode (macOS), DejaVu Sans (Linux) nebo Arial (Windows):

npm run print -- output/print/data.json [konfigurace.json]    # např. {"themeId":"neutral","locale":"en"}
python scripts/print.py output/print/data.json output/pdf/sada.pdf [písmo.ttf]

Přesné kontroly a zbývající lidské kroky jsou v playtest.md. Stránka je ověřená v headless Chrome na šířce 1280 a 390 px (bez chyb konzole a vodorovného posuvu). Automatické testy a kontrola PDF ale neprokazují délku lidské partie ani pochopitelnost pro desetileté dítě.

Neutrální laboratoř

Téma neutral nemá příběh. Každý prvek je pojmenovaný podle toho, co mechanicky dělá, takže záznam partie se čte bez znalosti tématu. Téma se generuje z src/content.js (neutralTheme v src/themes/index.js), takže nová karta dostane jméno automaticky. Mechanika je ve všech třech tématech stejná; test ověřuje shodné legální akce i výsledky.

Prvek Kódování
Schopnosti písmeno, tvar a barva podle pořadí rolí: A● plavba (červená), B■ opravy (modrá), C▲ průzkum (žlutá), D◆ ošetření (zelená), E★ vyjednávání (fialová). Tvar a písmeno nesou informaci i v černobílém tisku.
Role 1 · A● až 5 · E★; výchozí posádka má barvu figurky shodnou s barvou schopnosti
Místa římské číslice I–IX, cíl Ω
Karty typ a pořadí + kód: u cíle a hrozby požadavky (Cíl 1 · C▲+B■, Hrozba 3 · D◆), u odměny to, co dává (Předmět 4 · C▲)
Úsilí, kola arabské číslice
Signály ◇ tíseň, △ příležitost, ○ varování, □ neznámý

Mechanické typy

Prvek Hodnoty
Schopnosti (5) navigation, technical, discovery, medical, social
Role (5) každá má jednu vlastní schopnost; oslabená postava ji ztrácí
Karty cesty (goal) 6 šablon, 1–2 požadované schopnosti, úsilí 2–3; nutné k výhře
Předměty (item) dávají schopnost nositeli; přenosné, sloty postavy, náklad transportu
Dovednosti (skill) dávají schopnost natrvalo; nepřenosné
Vybavení místa (location) schopnost platí jen na svém místě
Týmové vybavení (team) schopnost platí jen v základně; sloty týmu
Hrozby (hazard) při vypršení zhorší stav postav a transportů na místě
Stavy postav a transportu připravená → oslabená → nepohyblivá (→ vyřazená)
Zóny karet balíček, čerstvá, naléhavá, vyřešená, odložená, vybavení
Znalost viditelnost local / signaled / observable, stav unknown / signaled / revealed + podrobnost signálu

Izolace mechanik

cardTypes vybírá typy karet v balíčku. Karty cesty jsou vždy nutné; bez hrozeb nevzniknou změny stavů, bez odměn nevznikne vybavení. Ve formuláři jsou to zaškrtávátka „Typy karet“. Scénáře lab1 až lab5 tvoří žebřík, kde každý krok přidá jednu mechaniku na rozpočtu výchozího scénáře (6 kol, 8 úsilí, 4 karty cesty), s pěti rolemi a cyklickým umisťováním:

Scénář Přidává
lab1 Úkoly jen karty cesty; bez transportu a průzkumu
lab2 + odměny předměty, dovednosti, vybavení místa a týmu
lab3 + hrozby a stavy zhoršení, obnova, doprovod
lab4 + transport loď / transport T s nákladem a pasažéry
lab5 + průzkum skrytý obsah, signály, průzkum na dálku

Experiment examples/tabletop/mechanics-ladder.json porovnává každý krok s předchozím ("comparison": "previous"). Výsledky jsou v balance.md.

Průzkum a znalosti (dodatek 3)

Nové partie mají exploration: true. Engine drží pravdivý svět odděleně od toho, co ví tým. Na začátku přiřadí místa celému zamíchanému balíčku, takže pohyb nevytváří náhodný obsah a replay je přesný. Obsah má tři stavy znalosti: unknown, signaled, revealed. Mapa je ve výchozím stavu známá celá.

Karty. Viditelnost, signál a podmínky odhalení jsou data karty v src/content.js, ne větve enginu. Hrozby jsou vidět hned (observable). Karty cesty a horečka se ohlásí signálem (signaled). Odměny jsou místní (local) a odhalí je až průzkum. Signál má veřejnou kategorii (volání o pomoc, příležitost, varování, neznámý signál) a u některých karet naléhavost. Riziko, potřebnou schopnost a druh odměny přečte až další zachycení signálu (SIGNALED+) nebo postava, jejíž vlastní role odpovídá potřebné schopnosti; zdravotník tedy pozná, že volání o pomoc potřebuje ošetření.

Odhalení. Příchod, plavba s posádkou i doprovod místo prozkoumají a odhalí karty, které mají podmínku enter. Akce Prozkoumat místo (1 úsilí) odhalí i karty s podmínkou explore. Karta může mít další podmínky: scout (průzkum na dálku), near:<schopnost> (postava s tou schopností do 1 spoje), resolved:<karta> (vyřešení jiné karty) a round:<n|final>. Pašerácké signály se příchodem jen ohlásí a odhalí je až průzkum; signály na pobřeží se vyjasní rozsvícením majáku. Vyřešený maják ohlásí vše skryté do 3 spojů s podrobnostmi; opuštěná signální věž z balíčku Výprava dosáhne na celou mapu a jako vybavení místa dává schopnost průzkumu.

Průzkum na dálku. Schopnost discovery dodá role průzkumnice, mosazný dalekohled, dovednost nebo vybavení místa. Do 2 spojů lze zachytit signály za 1 úsilí a obsah plně odhalit za 2. Z paluby lodi zachytí signály kdokoli do 1 spoje a průzkumník dosáhne o spoj dál. Volitelná páka freeDetect dává první zachycení v kole zdarma. Nabídka akcí nezávisí na skrytém počtu ani totožnosti obsahu a prázdný průzkum úsilí nevrací.

Limit karet a úniky. Do limitu čtyř aktivních karet se počítají jen karty, jejichž přítomnost je veřejná. Ze skutečnosti, že nová karta nepřibyla, tak nejde odvodit počet skrytých karet. getObservation v hráčském režimu vynechá neznámé a signalizované karty, skryté vybavení, seed i počet zbývajících karet. Každý signál je samostatný a obsahuje jen povolené údaje (label, category, urgency, detail, risk, capabilityHint, rewardType, lhůtu), nikdy ID karty, požadavky ani odměnu. Totéž pozorování dostávají interní i externí agenti.

Tempo a pokračování příběhu. Scénář určuje počet karet na začátku (opening) a zda příchod odhaluje, nebo jen ohlašuje (revealOnEnter: "basic"). Mlžné souostroví začíná dvěma kartami a používá balíček Výprava: trosečníka, jehož záchrana dá dovednost plavby, signální věž a pašeráckou skrýš, kterou odhalí blízký průzkumník. Balíčky obsahu (packs) přidávají karty a signály bez nových pravidel; téma pro ně musí dodat názvy.

Varianty. Všechny jsou ve výchozím stavu vypnuté a lze je zapnout v nastavení i v experimentu:

Klíč Co mění
hiddenPresence: "face-down" skryté karty leží u místa lícem dolů; hráč vidí jejich přítomnost a orientaci, ne obsah
hiddenTopology: true známá je jen základna, cíl a okolí prozkoumaných míst; pohyb a průzkum vedou jen po známých spojích
knowledge: "character" znalost patří postavám, které byly u odhalení; postavy na stejném místě si ji předají; getObservation(state, {actor}) a kontext agenta ukazují pohled jedné postavy
movingHazards: true hrozba, která není vidět, se na konci kola posune na sousední místo a ohlásí se znovu jen signálem
reconceal: n odhalená karta na místě, kde n kol nikdo nebyl, se znovu zakryje na signál

Skrytou topologii inspektor rozhodnutí nevzorkuje: neznámou geografii pozorování neobsahuje, takže ji nejde poctivě odhadnout. Simulované strategie hrají per-postavovou znalost týmovým pohledem, proto se v experimentech od sdílené znalosti neliší; varianta slouží lidem a externím agentům s oddělenými obrazovkami.

Analýza. Hráčská deska, historie i agenti používají pozorování. Inspektor návrháře ukazuje tabulku celého světa: místo, stav, viditelnost, znalost (u varianty po postavách i kdo co ví) a podmínky odhalení. Inspektor rozhodnutí vzorkuje alternativní světy jen z veřejných karet, signálů a karet lícem dolů; karta za signálem musí odpovídat všem zveřejněným údajům a nesmí mít nápovědu, kterou by odborník v týmu přečetl. Jde o přibližný model, ne o přesný posterior. Export replaye, plné trajektorie a tisk jsou návrhářské artefakty se seedem nebo skrytým obsahem.

Fyzická hra. Stůl zůstává fyzický, skryté karty spravuje správce scénáře mimo pohled hráčů, nebo tuto roli převezme aplikace. Správce umístí kartu balíčkem umístění podle viditelnosti na líci: skryté k blízkým místům, signály ke vzdáleným, viditelné hrozby na úzká místa. Tentýž postup používá engine, takže stůl a aplikace dávají stejné rozložení. Signál označí žeton kategorie, neprozkoumané místo žeton ?, skrytá karta leží lícem dolů, odhalená lícem nahoru a naléhavost značí otočení na bok. Na tištěné kartě je viditelnost a podmínka odhalení slovy. Samoobslužná hra bez správce by vyžadovala oboustranný tisk s rubem podle kategorie; tato sada ho neobsahuje.

exploration: false zůstává jako srovnávací varianta s otevřeným obsahem; na ní běží ověřovací sady v balance.md. Tamtéž jsou výsledky průzkumu.