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é
- Stolní model používá společné obnovované úsilí, atomická řešení situací, zóny a orientaci karet. Předměty, dovednosti, týmové a místní vybavení mají jednoznačného vlastníka.
- Postavy a transporty mají čtyři provozní stavy; funguje obnova, doprovod, přeprava, kapacity i volitelné vyřazování. Pozice pasažéra se odvozuje výhradně z transportu.
- Grafy 4–9 míst podporují vlastní spoje a profily adjacent/range/direct. Souřadnice jsou jen prezentace. Tisk rozlišuje spoje pro transport a pro samotné postavy.
- Registr témat vyžaduje úplné názvy rolí, karet, schopností, míst, akcí a význam měřítka. Piráti, Společná výprava a bezpříběhová Neutrální laboratoř používají stejné mechaniky.
- Jediný engine a jediné UI; témata (Piráti, Společná výprava, Neutrální laboratoř) i jazyky (čeština, angličtina) se přepínají bez nové partie.
- Tištěná sada je závazný limit: konfiguraci nad 50 karet, 6 figurek, 12 žetonů úsilí nebo 24 dalších žetonů engine odmítne, stejně jako nastavení nebo pole stavu bez fyzické reprezentace.
- Každou postavu může hrát člověk, strategie nebo externí agent; všichni platí stejné úsilí a vidí jen svou postavu.
- Existuje pět strategií, párové varianty, porovnání strategií, reprodukovatelné vzorky, veřejný kontext externích agentů a inspektor historických rozhodnutí.
- Pravidla jsou verzovaná. Současná verze
tabletop-3přidává průzkum a skrytý obsah. Replaye z prototypůtabletop-1atabletop-2se už nenačítají; oba prototypy zůstávají v historii gitu (00b0d4f,134fd00).
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
Rozměry grafu, artikulační body a mosty, pohybové akce a vynaložené úsilí.
Průměrnou separaci a rozložení schopností ze snímků na konci kol; report současně uchovává jejich časovou řadu a konečný snímek.
Setkání nově společně umístěných dvojic, předávání, společná řešení, odměny partnerům a rozdělení předmětů/dovedností.
Použití transportu, pasažéry, náklad a překonanou vzdálenost. Ekvivalent pěšího úsilí je počet pasažérů krát vzdálenost; rozdíl po odečtení ceny transportu je lokální srovnání stejného přesunu, ne čas ušetřený celé partii.
Zhoršení stavů, obnovy, délku čekání od nepohyblivého stavu k první obnově v kolech a počet neobnovených případů.
Výsledky s časným vyřazením i bez něj. Při nulovém počtu případů vrací report
null, ne domnělou nulovou pravděpodobnost výhry. Základní scénář vyřazování nepoužívá.Průzkum: prozkoumaná místa a kolo prvního průzkumu, úsilí průzkumu a cest do nových míst, vytvořené, vyšetřené, prošlé a ignorované signály (prošlé vypršely neodhalené, ignorované navíc nikdo nenavštívil ani nezkoumal).
Přeměnu signálů: přesuny a plavby za signálem, rozdělení skupiny kvůli signálu a změnu cíle postavy.
Hodnotu informace přes pozorovatelné zástupné veličiny: počet objevů, odhalené a později vyřešené karty, hrozby, které vypršely bez zásahu, a místa prozkoumaná na dálku, kam pak nikdo nemusel jít. Efektivita je počet užitečných objevů na jedno úsilí průzkumu. Metrika o ničem nerozhoduje, jen ukazuje data.
Kvalitu jednotlivých karet: jak často se táhnou, odhalí, využijí a odloží po odhalení a kolik stálo jejich odhalení. Laboratoř označí karty, které se často odhalí, ale využijí se v méně než pětině případů.
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.