From 8659559857286186f9bc0423d91a96c9ef7ee968 Mon Sep 17 00:00:00 2001 From: Martin Sukany Date: Tue, 24 Mar 2026 14:25:14 +0100 Subject: [PATCH] refactored --- CLAUDE.md | 46 + README.org | 5 +- alien-rpg.el | 1555 ++++++++--------- ...026-03-24_1234-Copilot-claude-opus-4.6.org | 548 ------ paluby/paluba-B.org | 1 + paluby/paluba-C.org | 11 +- paluby/paluba-F.org | 2 +- paluby/paluba-G.org | 2 +- stanice.org | 2 +- workflow.org | 22 +- 10 files changed, 797 insertions(+), 1397 deletions(-) create mode 100644 CLAUDE.md delete mode 100644 gptel-chats/2026-03-24_1234-Copilot-claude-opus-4.6.org diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..aaf84cd --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,46 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +Accessible tabletop RPG gaming engine for the Alien RPG space station USCSS CETORHINA. Designed for blind/visually impaired players. Czech UI, English skill names. Runs as Emacs Lisp package within Doom Emacs — minibuffer completion, no file navigation. + +## Architecture + +**alien-rpg.el** (main engine, ~900 lines, lexical-binding): + +- **Data**: `alien-rpg-rooms` (131 rooms as connection graph), `alien-rpg-decks` (10 decks A-J), `alien-rpg-character` (static), `alien-rpg-state` (mutable). Station name in `alien-rpg-station-name`. +- **Room IDs**: ASCII slugs (e.g., `B-ridici-stredisko`). Display names use Czech diacritics (`Řídící středisko`). +- **Navigation**: Graph-based. `alien-rpg-move` (adjacent), `alien-rpg-teleport` (any). `alien-rpg-find-path` uses BFS to find ALL shortest paths. +- **No dice rolling**: Player rolls physical dice. Engine tracks state only. +- **Weapons/Armor**: Structured plists — weapons: `(:name :bonus :damage :range :ammo :weight)`, armor: `(:name :rating :weight)`. +- **State**: Health, stress, injuries, conditions, weapons, armor, gear, notes. Auto-saves via `alien-rpg--autosave`. +- **Keybindings**: `SPC G` prefix (Doom Emacs). No `r` (roll removed). `a` = armor, `c` = condition. + +**Reference docs** (org-mode, Czech): +- `paluby/paluba-{A..J}.org` + `paluba-GH.org` — deck descriptions +- `stanice.org` — station overview, průlezy, communication tower +- `herni_karta.org` — character card +- `workflow.org` — gameplay tutorial, keybindings + +## Key Design Constraints + +- **Concise output**: 3-5 lines per command. No emoji, no decorative borders. Room codes everywhere. +- **Screen reader friendly**: All interactions via minibuffer completion or short buffer output. +- **Zero dependencies**: All data embedded in Elisp. No external files at runtime. +- **Doom Emacs required**: `map!` macro, `SPC` leader. +- **PDF-verified data**: Room names and connections verified against `reference_pdf/` maps. Thick red lines on maps = doors. Centrální šachta = round room with upside-down person icon. + +## Map Structure + +- Decks A (top) to J (bottom), vertical station +- Central shaft: B-J (A is isolated, access from B only) +- Průlezy F↔G: F1↔G1, F2↔G2, F5↔G5, F6↔G6, F7↔G7, F8↔G8 +- Průlezy G↔H: G3↔H3, G4↔H4, G7↔H7, G8↔H8, G9↔H9 (communication tower) +- G9 connects via Nouzové shromaždiště (top of G), NOT centrální šachta +- F centrální šachta is at TOP of deck F, connects to Zbrojnice via corridor + +## Development + +No build system, tests, or CI. Load via `(load! "~/alienrpg/alien-rpg")` in `~/.doom.d/config.el`. Internal helpers use `alien-rpg--` double-dash prefix. diff --git a/README.org b/README.org index daae103..d2c0bc6 100644 --- a/README.org +++ b/README.org @@ -5,8 +5,8 @@ * O tomto projektu -Přístupný herní systém pro stolní RPG Alien. Obsahuje kompletní textový -přepis 10 palub vesmírné stanice a *interaktivní Elisp herní engine* +Přístupný herní systém pro stolní RPG Alien. Stanice *USCSS CETORHINA* — +kompletní textový přepis 10 palub a *interaktivní Elisp herní engine* pro Doom Emacs. Originální mapy vytvořil Miroslav Křenek (10 palub A–J, formát PDF). @@ -27,7 +27,6 @@ Instalace — přidej do =~/.doom.d/config.el=: |-----------+-----------------------| | =SPC G w= | Kde jsem | | =SPC G m= | Přesun | -| =SPC G r= | Hodit kostkou | | =SPC G s= | Stav postavy | | =SPC G p= | Najít cestu | | =SPC G k= | Klíčová místa | diff --git a/alien-rpg.el b/alien-rpg.el index 5970449..7f3ad28 100644 --- a/alien-rpg.el +++ b/alien-rpg.el @@ -1,552 +1,536 @@ ;;; alien-rpg.el --- Přístupný herní engine pro Alien RPG -*- lexical-binding: t; -*- ;; -;; Autor: Accessibility tool pro nevidomého hráče -;; Popis: Interaktivní navigace, sledování stavu, hod kostkou. -;; Všechna data v Elispu — žádné hledání v souborech. -;; Ovládání přes SPC G (Doom Emacs leader prefix). -;; -;; Filosofie: -;; - NULA závislosti na čtení org souborů během hry -;; - Minibuffer-driven: completion, ne hledání -;; - Jeden stisk → odpověď. Žádné scrollování. -;; - Přesnost: pouze data ověřená z PDF. Žádné vymyšlené dveře. +;; Přístupný systém pro nevidomého hráče Alien RPG. +;; Ovládání přes SPC G (Doom Emacs). +;; Žádné soubory, žádné scrollování. Jeden stisk = informace. ;; ;;; Code: (require 'cl-lib) -;; ══════════════════════════════════════════════════════════════ -;; DATA: Paluby -;; ══════════════════════════════════════════════════════════════ +;; ==================================================================== +;; STANICE +;; ==================================================================== + +(defvar alien-rpg-station-name "USCSS CETORHINA" + "Jméno stanice.") + +;; ==================================================================== +;; PALUBY +;; ==================================================================== (defvar alien-rpg-decks '((:id "A" :name "Astrometrická observatoř" :purpose "Astronomické pozorování" - :size "Malá (A2)" - :scale "5 m" - :position 1 - :notes "Izolovaná od centrální šachty. Přístup pouze z paluby B (západ). Slepá ulička.") + :size "Mala (A2)" :scale "5 m" :position 1 + :notes "Izolovaná. Přístup pouze z paluby B (západ).") (:id "B" :name "Řízení provozu" - :purpose "Velitelský můstek, řízení stanice" - :size "Střední (A2)" - :scale "5 m" - :position 2 - :notes "Strategicky nejdůležitější paluba. MU/TH/UR (hlavní počítač) a řídící středisko.") + :purpose "Velitelský můstek" + :size "Středni (A2)" :scale "5 m" :position 2 + :notes "MU/TH/UR (hlavni pocitac), řídící středisko.") (:id "C" :name "Zdraví a odpočinek" :purpose "Medicína, rekreace, botanika" - :size "Střední (A2)" - :scale "5 m" - :position 3 - :notes "Ošetřovna, laboratoř, arboretum, hydroponické zahrady.") + :size "Středni (A2)" :scale "5 m" :position 3 + :notes "Ošetřovna, laboratoř, arboretum.") (:id "D" :name "Recepce a výzkum" :purpose "Vědecké laboratoře, příjem návštěvníků" - :size "Střední (A2)" - :scale "5 m" - :position 4 - :notes "Návštěvnický dokovací port (přístup do vesmíru). Astrofyzikální laboratoř.") + :size "Středni (A2)" :scale "5 m" :position 4 + :notes "Návštěvnický dokovací port (přístup do vesmíru).") (:id "E" :name "Kajuty a stravování" :purpose "Ubytování posádky, stravování" - :size "Střední (A2)" - :scale "5 m" - :position 5 - :notes "6 kajut, jídelna, tělocvična. Poslední 'civilizovaná' paluba.") + :size "Středni (A2)" :scale "5 m" :position 5 + :notes "6 kajut, jídelna, tělocvična.") (:id "F" :name "Nápravné zařízení" :purpose "Vězeňské zařízení" - :size "Velká (A1)" - :scale "5 m" - :position 6 - :notes "ZBROJNICE (sever-střed). Symetrické: západ = východ. 6 průlezů na G.") + :size "Velka (A1)" :scale "5 m" :position 6 + :notes "Zbrojnice. 6 průlezů na G.") (:id "G" :name "Hangáry a údržba" :purpose "Hangáry, dokovací porty, údržba" - :size "Velká (A1)" - :scale "5 m" - :position 7 - :notes "2 hangáry, 2 dok. porty, 4 EVA pody, kryopody. Nejvíce průlezů (9).") + :size "Velka (A1)" :scale "5 m" :position 7 + :notes "2 hangáry, 2 dok. porty, 4 EVA pody, kryopody. 9 průlezů.") (:id "H" :name "Průmyslový komplex" :purpose "Energetika, průmysl, tavení" - :size "Velmi velká (A1, 10m měřítko)" - :scale "10 m" - :position 8 - :notes "NEJVĚTŠÍ paluba! Nádrž toxických plynů, plasma, dílny. Průlezy na G.") + :size "Velmi velka (A1, 10m meritko)" :scale "10 m" :position 8 + :notes "NEJVĚTŠÍ paluba. Nádrž toxických plynů, plasma, dílny.") (:id "I" :name "Záchranné moduly" :purpose "Evakuace — únikové kapsle" - :size "Střední (A2)" - :scale "5 m" - :position 9 - :notes "Záchranné moduly/kapsle. Na mapě bez textových popisků místností.") + :size "Středni (A2)" :scale "5 m" :position 9 + :notes "Záchranné moduly/kapsle.") (:id "J" :name "Strojovna reaktoru" - :purpose "Energetický reaktor stanice" - :size "Střední (A2)" - :scale "5 m" - :position 10 - :notes "Nejnižší paluba. 3 baterie. Slepá ulička (jen nahoru). Zničení = konec stanice.")) - "Data o palubách stanice. Ověřeno z PDF textových vrstev.") + :purpose "Energetický reaktor" + :size "Středni (A2)" :scale "5 m" :position 10 + :notes "Nejnižší paluba. 3 baterie. Slepá ulička.")) + "Data o palubách.") -;; ══════════════════════════════════════════════════════════════ -;; DATA: Místnosti -;; ══════════════════════════════════════════════════════════════ +;; ==================================================================== +;; MISTNOSTI +;; ==================================================================== (defvar alien-rpg-rooms '(;; === Paluba A === - (:id "A-observatoř" :deck "A" :name "Observatoř" - :location "Celá paluba" :note "Jeden velký otevřený prostor. Pravděpodobně kopule/okna." - :connections ("B-průchod-A")) + (:id "A-observator" :deck "A" :name "Observatoř" + :location "Celá paluba" :note "Jeden otevreny prostor — kopule." + :connections ("B-pruchod-A")) ;; === Paluba B === - (:id "B-observatoř" :deck "B" :name "Observatoř" - :location "Sever" :note "Pozorovací místnost" - :connections ("B-kancelář-vedoucího" "B-řídící-středisko")) - (:id "B-kancelář-vedoucího" :deck "B" :name "Kancelář vedoucího stanice" - :location "Sever-střed" :note "Může obsahovat důležité dokumenty/přístupy" - :connections ("B-observatoř" "B-zasedací" "B-řídící-středisko")) - (:id "B-zasedací" :deck "B" :name "Zasedací místnost" - :location "Severozápad" :note "Porady" - :connections ("B-kancelář-vedoucího" "B-průchod-A")) - (:id "B-řídící-středisko" :deck "B" :name "Řídící středisko" - :location "Sever-východ" :note "Hlavní velín. Monitorování a ovládání systémů stanice." - :connections ("B-observatoř" "B-kancelář-vedoucího" "B-wc-horní")) - (:id "B-wc-horní" :deck "B" :name "WC (horní)" + (:id "B-observator" :deck "B" :name "Observatoř" + :location "Sever" :note "" + :connections ("B-kancelar-vedouciho" "B-ridici-stredisko")) + (:id "B-kancelar-vedouciho" :deck "B" :name "Kancelář vedoucího stanice" + :location "Sever-střed" :note "" + :connections ("B-observator" "B-zasedaci" "B-chodba")) + (:id "B-zasedaci" :deck "B" :name "Zasedací místnost" + :location "Severozápad" :note "" + :connections ("B-kancelar-vedouciho" "B-pruchod-A")) + (:id "B-ridici-stredisko" :deck "B" :name "Řídící středisko" + :location "Severovýchod" :note "Hlavní velín." + :connections ("B-observator" "B-wc-horni" "B-chodba")) + (:id "B-wc-horni" :deck "B" :name "WC (horní)" :location "Východ" :note "" - :connections ("B-řídící-středisko" "B-wc-dolní")) - (:id "B-wc-dolní" :deck "B" :name "WC (dolní)" + :connections ("B-ridici-stredisko" "B-wc-dolni")) + (:id "B-wc-dolni" :deck "B" :name "WC (dolní)" :location "Východ" :note "" - :connections ("B-wc-horní" "B-kuchyňka")) - (:id "B-průchod-A" :deck "B" :name "Průchod na palubu A" - :location "Západ" :note "Jediný přístup na palubu A" - :connections ("B-zasedací" "A-observatoř" "B-mu-th-ur")) + :connections ("B-wc-horni" "B-chodba")) + (:id "B-pruchod-A" :deck "B" :name "Průchod na palubu A" + :location "Západ" :note "Jediný přístup na palubu A." + :connections ("B-zasedaci" "B-chodba" "A-observator")) + (:id "B-chodba" :deck "B" :name "Hlavní chodba" + :location "Střed" :note "" + :connections ("B-kancelar-vedouciho" "B-ridici-stredisko" "B-pruchod-A" + "B-wc-dolni" "B-mu-th-ur" "B-centralni-sachta")) (:id "B-mu-th-ur" :deck "B" :name "MU/TH/UR" - :location "Jih-střed" :note "Hlavní počítač stanice (Mother). Protokoly, logy, senzory." - :connections ("B-průchod-A" "B-kuchyňka" "B-centrální-šachta")) - (:id "B-kuchyňka" :deck "B" :name "Kuchyňka" + :location "Jih-střed" :note "Hlavní počítač stanice (Mother)." + :connections ("B-chodba" "B-kuchynka")) + (:id "B-kuchynka" :deck "B" :name "Kuchyňka" :location "Jihovýchod" :note "" - :connections ("B-mu-th-ur" "B-sklad" "B-wc-dolní")) + :connections ("B-mu-th-ur" "B-sklad")) (:id "B-sklad" :deck "B" :name "Sklad" - :location "Jihovýchod (jižněji)" :note "" - :connections ("B-kuchyňka" "B-centrální-šachta")) - (:id "B-centrální-šachta" :deck "B" :name "Centrální šachta" - :location "Střed" :note "Přístup na paluby C–J" - :connections ("B-mu-th-ur" "B-sklad" - "C-centrální-šachta" "D-centrální-šachta" "E-centrální-šachta" - "F-centrální-šachta" "G-centrální-šachta" "H-centrální-šachta" - "I-centrální-šachta" "J-centrální-šachta")) + :location "Jihovýchod" :note "" + :connections ("B-kuchynka")) + (:id "B-centralni-sachta" :deck "B" :name "Centrální šachta" + :location "Střed" :note "" + :connections ("B-chodba" + "C-centralni-sachta" "D-centralni-sachta" "E-centralni-sachta" + "F-centralni-sachta" "G-centralni-sachta" "H-centralni-sachta" + "I-centralni-sachta" "J-centralni-sachta")) ;; === Paluba C === - (:id "C-společenská" :deck "C" :name "Společenská místnost" - :location "Sever-střed" :note "Velká místnost pro odpočinek" - :connections ("C-sauna" "C-ošetřovna" "C-centrální-šachta")) - (:id "C-sauna" :deck "C" :name "Sauna, sprchy, WC" - :location "Severovýchod" :note "Sauna, sprchy, WC — společná zóna. Vlhko, pára." - :connections ("C-společenská" "C-zotavovací")) - (:id "C-ošetřovna" :deck "C" :name "Ošetřovna a laboratoř" - :location "Sever-západ" :note "Léčení a analýza vzorků. Vědecké vybavení." - :connections ("C-společenská" "C-kajuta-lékař")) - (:id "C-zotavovací" :deck "C" :name "Zotavovací místnost" - :location "Sever-východ" :note "Pro rekonvalescenci" - :connections ("C-sauna" "C-kajuta-vedoucí")) - (:id "C-kajuta-lékař" :deck "C" :name "Kajuta/kancelář lékařského důstojníka" - :location "Střed-západ" :note "Bydlení a pracoviště lékaře" - :connections ("C-ošetřovna" "C-arboretum")) - (:id "C-kajuta-vedoucí" :deck "C" :name "Kajuta vedoucího stanice" - :location "Střed-východ" :note "Soukromé bydlení velitele. Může mít speciální přístupy." - :connections ("C-zotavovací" "C-arboretum")) + (:id "C-spolecenska" :deck "C" :name "Společenská místnost" + :location "Sever" :note "" + :connections ("C-sauna" "C-wc" "C-osetrovna" "C-zotavovaci" "C-centralni-sachta")) + (:id "C-sauna" :deck "C" :name "Sauna a sprchy" + :location "Severovýchod" :note "" + :connections ("C-spolecenska")) + (:id "C-wc" :deck "C" :name "WC" + :location "Východ" :note "" + :connections ("C-spolecenska")) + (:id "C-osetrovna" :deck "C" :name "Ošetřovna a laboratoř" + :location "Severozápad" :note "Léčení, analýza vzorků." + :connections ("C-spolecenska" "C-kajuta-lekar" "C-centralni-sachta")) + (:id "C-zotavovaci" :deck "C" :name "Zotavovací místnost" + :location "Severovýchod" :note "" + :connections ("C-spolecenska" "C-kajuta-vedouci" "C-centralni-sachta")) + (:id "C-kajuta-lekar" :deck "C" :name "Kajuta lékařského důstojníka" + :location "Západ" :note "" + :connections ("C-osetrovna" "C-arboretum" "C-centralni-sachta")) + (:id "C-kajuta-vedouci" :deck "C" :name "Kajuta vedoucího stanice" + :location "Východ" :note "" + :connections ("C-zotavovaci" "C-arboretum" "C-centralni-sachta")) (:id "C-arboretum" :deck "C" :name "Arboretum" - :location "Střed" :note "Velký zelený prostor. Úkryt i past." - :connections ("C-kajuta-lékař" "C-kajuta-vedoucí" "C-hydro-zz" "C-hydro-v" "C-centrální-šachta")) - (:id "C-hydro-zz" :deck "C" :name "Hydroponické zahrady (západ)" - :location "Jihozápad" :note "Dvě zahrady vedle sebe. Produkce potravin." + :location "Střed-jih" :note "Velký zelený prostor." + :connections ("C-kajuta-lekar" "C-kajuta-vedouci" "C-centralni-sachta" + "C-hydro-z" "C-hydro-v")) + (:id "C-hydro-z" :deck "C" :name "Hydroponická zahrada (Z)" + :location "Jihozápad" :note "" :connections ("C-arboretum")) - (:id "C-hydro-v" :deck "C" :name "Hydroponická zahrada (východ)" - :location "Jihovýchod" :note "Třetí zahrada" + (:id "C-hydro-v" :deck "C" :name "Hydroponická zahrada (V)" + :location "Jihovýchod" :note "" :connections ("C-arboretum")) - (:id "C-centrální-šachta" :deck "C" :name "Centrální šachta" - :location "Střed" :note "Přístup na paluby B, D–J" - :connections ("C-společenská" "C-arboretum" - "B-centrální-šachta" "D-centrální-šachta" "E-centrální-šachta" - "F-centrální-šachta" "G-centrální-šachta" "H-centrální-šachta" - "I-centrální-šachta" "J-centrální-šachta")) + (:id "C-centralni-sachta" :deck "C" :name "Centrální šachta" + :location "Střed" :note "" + :connections ("C-spolecenska" "C-osetrovna" "C-zotavovaci" + "C-kajuta-lekar" "C-kajuta-vedouci" "C-arboretum" + "B-centralni-sachta" "D-centralni-sachta" "E-centralni-sachta" + "F-centralni-sachta" "G-centralni-sachta" "H-centralni-sachta" + "I-centralni-sachta" "J-centralni-sachta")) ;; === Paluba D === - (:id "D-měřící" :deck "D" :name "Měřící stanice" - :location "Sever-střed" :note "Vědecké měření" - :connections ("D-astro-lab" "D-kajuta-vědec")) + (:id "D-merici" :deck "D" :name "Měřící stanice" + :location "Sever-střed" :note "" + :connections ("D-astro-lab" "D-kajuta-vedec")) (:id "D-astro-lab" :deck "D" :name "Astrofyzikální laboratoř" - :location "Severozápad" :note "Hlavní vědecké pracoviště. Vybavení pro výzkum." - :connections ("D-měřící" "D-centrální-šachta")) - (:id "D-kajuta-vědec" :deck "D" :name "Kajuta/kancelář vědeckého důstojníka" - :location "Severovýchod" :note "Bydlení a pracoviště vědce" - :connections ("D-měřící" "D-wc")) - (:id "D-wc" :deck "D" :name "WC (dvě)" - :location "Střed-východ" :note "Dvě WC nad sebou" - :connections ("D-kajuta-vědec" "D-recepce")) - (:id "D-kancelář-inženýr" :deck "D" :name "Kancelář vedoucího inženýra" - :location "Jihozápad" :note "Technické informace o stanici" + :location "Severozápad" :note "" + :connections ("D-merici" "D-centralni-sachta")) + (:id "D-kajuta-vedec" :deck "D" :name "Kajuta vědeckého důstojníka" + :location "Severovýchod" :note "" + :connections ("D-merici" "D-wc")) + (:id "D-wc" :deck "D" :name "WC" + :location "Východ" :note "" + :connections ("D-kajuta-vedec" "D-recepce")) + (:id "D-kancelar-inzenyr" :deck "D" :name "Kancelář vedoucího inženýra" + :location "Jihozápad" :note "" :connections ("D-sklad" "D-recepce")) (:id "D-sklad" :deck "D" :name "Sklad" - :location "Jihozápad (pod kanceláří)" :note "Zásoby, improvizované zbraně" - :connections ("D-kancelář-inženýr")) + :location "Jihozápad" :note "" + :connections ("D-kancelar-inzenyr")) (:id "D-recepce" :deck "D" :name "Recepce a VIP salónek" - :location "Střed-jih" :note "Příjem návštěvníků. Otevřený prostor — špatné krytí." - :connections ("D-wc" "D-kancelář-inženýr" "D-dokovací-port" "D-centrální-šachta")) - (:id "D-dokovací-port" :deck "D" :name "Návštěvnický dokovací port" - :location "Jih" :note "Přistání návštěvnických lodí. Přístup do vesmíru!" + :location "Jih-střed" :note "" + :connections ("D-wc" "D-kancelar-inzenyr" "D-dokovaci-port" "D-centralni-sachta")) + (:id "D-dokovaci-port" :deck "D" :name "Návštěvnický dokovací port" + :location "Jih" :note "Přístup do vesmíru." :connections ("D-recepce")) - (:id "D-centrální-šachta" :deck "D" :name "Centrální šachta" - :location "Střed" :note "Přístup na paluby B–C, E–J" + (:id "D-centralni-sachta" :deck "D" :name "Centrální šachta" + :location "Střed" :note "" :connections ("D-astro-lab" "D-recepce" - "B-centrální-šachta" "C-centrální-šachta" "E-centrální-šachta" - "F-centrální-šachta" "G-centrální-šachta" "H-centrální-šachta" - "I-centrální-šachta" "J-centrální-šachta")) + "B-centralni-sachta" "C-centralni-sachta" "E-centralni-sachta" + "F-centralni-sachta" "G-centralni-sachta" "H-centralni-sachta" + "I-centralni-sachta" "J-centralni-sachta")) ;; === Paluba E === (:id "E-sklad" :deck "E" :name "Sklad" - :location "Severozápad" :note "Zásoby" - :connections ("E-kajuta-1" "E-prádelna")) - (:id "E-prádelna" :deck "E" :name "Prádelna" - :location "Sever-střed-východ" :note "Chemikálie" + :location "Severozápad" :note "" + :connections ("E-kajuta-1" "E-pradelna")) + (:id "E-pradelna" :deck "E" :name "Prádelna" + :location "Severovýchod" :note "" :connections ("E-sklad" "E-kajuta-2")) (:id "E-kajuta-1" :deck "E" :name "Kajuta 1 (levá horní)" - :location "Západ, řada 1" :note "Barikádovatelná" + :location "Západ, rada 1" :note "" :connections ("E-sklad" "E-kajuta-2" "E-kajuta-3" "E-chodba")) (:id "E-kajuta-2" :deck "E" :name "Kajuta 2 (pravá horní)" - :location "Východ, řada 1" :note "Barikádovatelná" - :connections ("E-prádelna" "E-kajuta-1" "E-kajuta-4" "E-chodba")) + :location "Východ, rada 1" :note "" + :connections ("E-pradelna" "E-kajuta-1" "E-kajuta-4" "E-chodba")) (:id "E-kajuta-3" :deck "E" :name "Kajuta 3 (levá střední)" - :location "Západ, řada 2" :note "Barikádovatelná" + :location "Západ, rada 2" :note "" :connections ("E-kajuta-1" "E-kajuta-4" "E-kajuta-5" "E-chodba")) (:id "E-kajuta-4" :deck "E" :name "Kajuta 4 (pravá střední)" - :location "Východ, řada 2" :note "Barikádovatelná" + :location "Východ, rada 2" :note "" :connections ("E-kajuta-2" "E-kajuta-3" "E-kajuta-6" "E-chodba")) (:id "E-kajuta-5" :deck "E" :name "Kajuta 5 (levá dolní)" - :location "Západ, řada 3" :note "Barikádovatelná" + :location "Západ, rada 3" :note "" :connections ("E-kajuta-3" "E-kajuta-6" "E-chodba")) (:id "E-kajuta-6" :deck "E" :name "Kajuta 6 (pravá dolní)" - :location "Východ, řada 3" :note "Barikádovatelná" + :location "Východ, rada 3" :note "" :connections ("E-kajuta-4" "E-kajuta-5" "E-chodba")) (:id "E-chodba" :deck "E" :name "Centrální chodba" - :location "Střed" :note "Propojuje kajuty, jídelnu a centrální šachtu" + :location "Střed" :note "" :connections ("E-kajuta-1" "E-kajuta-2" "E-kajuta-3" "E-kajuta-4" - "E-kajuta-5" "E-kajuta-6" "E-jídelna" "E-centrální-šachta")) - (:id "E-jídelna" :deck "E" :name "Jídelna" - :location "Střed" :note "Velký otevřený prostor. Dobrý přehled ale špatné krytí." - :connections ("E-chodba" "E-wc" "E-sprchy-z" "E-šatna" "E-centrální-šachta")) + "E-kajuta-5" "E-kajuta-6" "E-jidelna" "E-centralni-sachta")) + (:id "E-jidelna" :deck "E" :name "Jídelna" + :location "Střed-jih" :note "" + :connections ("E-chodba" "E-wc" "E-sprchy-z" "E-satna" "E-centralni-sachta")) (:id "E-wc" :deck "E" :name "WC" - :location "Západ" :note "" - :connections ("E-jídelna" "E-sprchy-z")) + :location "Jihozápad" :note "" + :connections ("E-jidelna" "E-sprchy-z")) (:id "E-sprchy-z" :deck "E" :name "Sprchy (západ)" :location "Jihozápad" :note "" - :connections ("E-wc" "E-jídelna")) - (:id "E-šatna" :deck "E" :name "Šatna a sprchy (východ)" - :location "Střed-východ" :note "" - :connections ("E-jídelna" "E-tělocvična")) - (:id "E-tělocvična" :deck "E" :name "Tělocvična" - :location "Jihovýchod" :note "Improvizované zbraně (tyče, závaží)" - :connections ("E-šatna")) - (:id "E-centrální-šachta" :deck "E" :name "Centrální šachta" - :location "Střed" :note "Přístup na paluby B–D, F–J" - :connections ("E-chodba" "E-jídelna" - "B-centrální-šachta" "C-centrální-šachta" "D-centrální-šachta" - "F-centrální-šachta" "G-centrální-šachta" "H-centrální-šachta" - "I-centrální-šachta" "J-centrální-šachta")) + :connections ("E-wc" "E-jidelna")) + (:id "E-satna" :deck "E" :name "Šatna a sprchy (východ)" + :location "Jihovýchod" :note "" + :connections ("E-jidelna" "E-telocvicna")) + (:id "E-telocvicna" :deck "E" :name "Tělocvična" + :location "Jihovýchod" :note "" + :connections ("E-satna")) + (:id "E-centralni-sachta" :deck "E" :name "Centrální šachta" + :location "Střed" :note "" + :connections ("E-chodba" "E-jidelna" + "B-centralni-sachta" "C-centralni-sachta" "D-centralni-sachta" + "F-centralni-sachta" "G-centralni-sachta" "H-centralni-sachta" + "I-centralni-sachta" "J-centralni-sachta")) ;; === Paluba F === - (:id "F-vězeňská-služba" :deck "F" :name "Vězeňská služba" - :location "Severozápad" :note "Kanceláře vězeňského personálu" - :connections ("F-údržba-androidů" "F-zbrojnice" "F-sprchy-z")) - (:id "F-příprava-stravy" :deck "F" :name "Příprava stravy" - :location "Severovýchod" :note "" - :connections ("F-ošetřovna" "F-zbrojnice" "F-prádelna")) - (:id "F-údržba-androidů" :deck "F" :name "Údržba androidů" - :location "Západ" :note "Opravy/reprogramování androidů" - :connections ("F-vězeňská-služba" "F-sprchy-z")) + (:id "F-centralni-sachta" :deck "F" :name "Centrální šachta" + :location "Sever (vrch paluby)" :note "Šachta navrchu, chodba vede ke zbrojnici." + :connections ("F-zbrojnice" + "B-centralni-sachta" "C-centralni-sachta" "D-centralni-sachta" + "E-centralni-sachta" "G-centralni-sachta" "H-centralni-sachta" + "I-centralni-sachta" "J-centralni-sachta")) (:id "F-zbrojnice" :deck "F" :name "Zbrojnice" - :location "Sever-střed" :note "*** ZBRANĚ *** Klíčové místo!" - :connections ("F-vězeňská-služba" "F-příprava-stravy" "F-kuchyně")) - (:id "F-ošetřovna" :deck "F" :name "Ošetřovna" - :location "Východ" :note "Vězeňská ošetřovna" - :connections ("F-příprava-stravy" "F-prádelna")) - (:id "F-kuchyně" :deck "F" :name "Kuchyně" - :location "Střed (pod zbrojnicí)" :note "" - :connections ("F-zbrojnice" "F-centrální-šachta")) + :location "Sever-střed" :note "ZBRANE." + :connections ("F-centralni-sachta" "F-kuchyne" "F-vezenska-sluzba" "F-priprava-stravy")) + (:id "F-kuchyne" :deck "F" :name "Kuchyně" + :location "Střed-sever" :note "" + :connections ("F-zbrojnice" "F-sklad-z" "F-sklad-v")) + (:id "F-vezenska-sluzba" :deck "F" :name "Vězeňská služba" + :location "Severozápad" :note "" + :connections ("F-zbrojnice" "F-udrzba-androidu")) + (:id "F-priprava-stravy" :deck "F" :name "Příprava stravy" + :location "Severovýchod" :note "" + :connections ("F-zbrojnice" "F-osetrovna" "F-pradelna")) + (:id "F-udrzba-androidu" :deck "F" :name "Údržba androidů" + :location "Západ" :note "" + :connections ("F-vezenska-sluzba" "F-sprchy-z" "F-sklad-z")) + (:id "F-osetrovna" :deck "F" :name "Ošetřovna" + :location "Východ" :note "" + :connections ("F-priprava-stravy" "F-pradelna")) + (:id "F-pradelna" :deck "F" :name "Prádelna" + :location "Východ" :note "" + :connections ("F-priprava-stravy" "F-osetrovna" "F-sprchy-v" "F-sklad-v")) (:id "F-sprchy-z" :deck "F" :name "Sprchy (západ)" :location "Krajní západ" :note "" - :connections ("F-vězeňská-služba" "F-údržba-androidů" "F-sklad-z")) + :connections ("F-udrzba-androidu" "F-sklad-z" "F-prulez-F1")) (:id "F-sprchy-v" :deck "F" :name "Sprchy (východ)" :location "Krajní východ" :note "" - :connections ("F-prádelna" "F-sklad-v")) - (:id "F-prádelna" :deck "F" :name "Prádelna" - :location "Východ" :note "" - :connections ("F-příprava-stravy" "F-ošetřovna" "F-sprchy-v")) + :connections ("F-pradelna" "F-sklad-v" "F-prulez-F2")) (:id "F-sklad-z" :deck "F" :name "Sklad (západ)" :location "Střed-západ" :note "" - :connections ("F-sprchy-z" "F-wc-z" "F-centrální-šachta")) + :connections ("F-kuchyne" "F-udrzba-androidu" "F-sprchy-z" "F-wc-z")) (:id "F-sklad-v" :deck "F" :name "Sklad (východ)" :location "Střed-východ" :note "" - :connections ("F-sprchy-v" "F-wc-v" "F-centrální-šachta")) + :connections ("F-kuchyne" "F-pradelna" "F-sprchy-v" "F-wc-v")) (:id "F-wc-z" :deck "F" :name "WC (západ)" :location "Střed-západ" :note "" - :connections ("F-sklad-z" "F-průlez-F1" "F-průlez-F5")) + :connections ("F-sklad-z" "F-prulez-F5" "F-prulez-F1")) (:id "F-wc-v" :deck "F" :name "WC (východ)" :location "Střed-východ" :note "" - :connections ("F-sklad-v" "F-průlez-F2" "F-průlez-F6")) + :connections ("F-sklad-v" "F-prulez-F6" "F-prulez-F2")) (:id "F-cely-z" :deck "F" :name "Cely (západ)" - :location "Jihozápad" :note "Vězeňské cely — západní blok. Vězni = spojenci i hrozby." - :connections ("F-průlez-F1" "F-průlez-F7" "F-sklady-jih")) + :location "Jihozápad" :note "" + :connections ("F-prulez-F1" "F-prulez-F7" "F-sklady-jih")) (:id "F-cely-v" :deck "F" :name "Cely (východ)" - :location "Jihovýchod" :note "Vězeňské cely — východní blok" - :connections ("F-průlez-F2" "F-průlez-F8" "F-sklady-jih")) + :location "Jihovýchod" :note "" + :connections ("F-prulez-F2" "F-prulez-F8" "F-sklady-jih")) (:id "F-sklady-jih" :deck "F" :name "Sklady (jih, 4 kusy)" - :location "Jih-střed" :note "Čtyři skladové místnosti v bloku 2×2" - :connections ("F-cely-z" "F-cely-v" "F-centrální-šachta")) - ;; Průlezy F - (:id "F-průlez-F1" :deck "F" :name "Průlez F1" - :location "Střed-západ" :note "Vede dolů na G1" - :connections ("F-wc-z" "F-cely-z" "G-průlez-G1")) - (:id "F-průlez-F2" :deck "F" :name "Průlez F2" - :location "Střed-východ" :note "Vede dolů na G2" - :connections ("F-wc-v" "F-cely-v" "G-průlez-G2")) - (:id "F-průlez-F5" :deck "F" :name "Průlez F5" - :location "Sever-střed západ" :note "Vede dolů na G5" - :connections ("F-wc-z" "G-průlez-G5")) - (:id "F-průlez-F6" :deck "F" :name "Průlez F6" - :location "Sever-střed východ" :note "Vede dolů na G6" - :connections ("F-wc-v" "G-průlez-G6")) - (:id "F-průlez-F7" :deck "F" :name "Průlez F7" - :location "Jih-západ" :note "Vede dolů na G7" - :connections ("F-cely-z" "G-průlez-G7")) - (:id "F-průlez-F8" :deck "F" :name "Průlez F8" - :location "Jih-východ" :note "Vede dolů na G8" - :connections ("F-cely-v" "G-průlez-G8")) - (:id "F-centrální-šachta" :deck "F" :name "Centrální šachta" - :location "Střed" :note "Přístup na paluby B–E, G–J" - :connections ("F-kuchyně" "F-sklad-z" "F-sklad-v" "F-sklady-jih" - "B-centrální-šachta" "C-centrální-šachta" "D-centrální-šachta" - "E-centrální-šachta" "G-centrální-šachta" "H-centrální-šachta" - "I-centrální-šachta" "J-centrální-šachta")) + :location "Jih-střed" :note "" + :connections ("F-cely-z" "F-cely-v")) + (:id "F-prulez-F1" :deck "F" :name "Průlez F1" + :location "Západ" :note "-> G1" + :connections ("F-sprchy-z" "F-wc-z" "F-cely-z" "G-prulez-G1")) + (:id "F-prulez-F2" :deck "F" :name "Průlez F2" + :location "Východ" :note "-> G2" + :connections ("F-sprchy-v" "F-wc-v" "F-cely-v" "G-prulez-G2")) + (:id "F-prulez-F5" :deck "F" :name "Průlez F5" + :location "Střed-západ" :note "-> G5" + :connections ("F-wc-z" "G-prulez-G5")) + (:id "F-prulez-F6" :deck "F" :name "Průlez F6" + :location "Střed-východ" :note "-> G6" + :connections ("F-wc-v" "G-prulez-G6")) + (:id "F-prulez-F7" :deck "F" :name "Průlez F7" + :location "Jihozápad" :note "-> G7" + :connections ("F-cely-z" "G-prulez-G7")) + (:id "F-prulez-F8" :deck "F" :name "Průlez F8" + :location "Jihovýchod" :note "-> G8" + :connections ("F-cely-v" "G-prulez-G8")) ;; === Paluba G === - (:id "G-shromaždiště" :deck "G" :name "Nouzové shromaždiště" - :location "Severovýchod" :note "Sraz při evakuaci" - :connections ("G-nástupní-hala")) - (:id "G-nástupní-hala" :deck "G" :name "Nástupní hala" - :location "Sever-střed" :note "Centrální hala" - :connections ("G-shromaždiště" "G-průlez-G3" "G-průlez-G4" "G-eva-sz" "G-eva-sv" - "G-servis-androidů" "G-centrální-šachta")) - (:id "G-hangár-01" :deck "G" :name "Hangár 01" - :location "Střed-západ" :note "Velký hangár pro plavidla" - :connections ("G-dokovací-01" "G-sklady-z" "G-průlez-G5")) - (:id "G-dokovací-01" :deck "G" :name "Dokovací port 01" - :location "Krajní západ" :note "Přístup do vesmíru z hangáru 01" - :connections ("G-hangár-01")) - (:id "G-hangár-02" :deck "G" :name "Hangár 02" - :location "Střed-východ" :note "Velký hangár pro plavidla" - :connections ("G-dokovací-02" "G-sklady-v" "G-průlez-G6")) - (:id "G-dokovací-02" :deck "G" :name "Dokovací port 02" - :location "Krajní východ" :note "Přístup do vesmíru z hangáru 02" - :connections ("G-hangár-02")) + (:id "G-shromazdiste" :deck "G" :name "Nouzové shromaždiště" + :location "Sever" :note "" + :connections ("G-nastupni-hala" "G-prulez-G9")) + (:id "G-nastupni-hala" :deck "G" :name "Nástupní hala" + :location "Sever-střed" :note "" + :connections ("G-shromazdiste" "G-prulez-G3" "G-prulez-G4" + "G-eva-sz" "G-eva-sv" "G-servis-androidu" "G-centralni-sachta")) + (:id "G-hangar-01" :deck "G" :name "Hangár 01" + :location "Západ" :note "" + :connections ("G-dokovaci-01" "G-sklady-z" "G-prulez-G5")) + (:id "G-dokovaci-01" :deck "G" :name "Dokovací port 01" + :location "Krajní západ" :note "Přístup do vesmíru." + :connections ("G-hangar-01")) + (:id "G-hangar-02" :deck "G" :name "Hangár 02" + :location "Východ" :note "" + :connections ("G-dokovaci-02" "G-sklady-v" "G-prulez-G6")) + (:id "G-dokovaci-02" :deck "G" :name "Dokovací port 02" + :location "Krajní východ" :note "Přístup do vesmíru." + :connections ("G-hangar-02")) (:id "G-eva-sz" :deck "G" :name "EVA pod (SZ)" - :location "Střed, mírně SZ" :note "Skafandry pro výstup do kosmu" - :connections ("G-nástupní-hala" "G-servis-androidů")) + :location "Střed-SZ" :note "" + :connections ("G-nastupni-hala" "G-servis-androidu")) (:id "G-eva-sv" :deck "G" :name "EVA pod (SV)" - :location "Střed, mírně SV" :note "Skafandry pro výstup do kosmu" - :connections ("G-nástupní-hala" "G-servis-androidů")) + :location "Střed-SV" :note "" + :connections ("G-nastupni-hala" "G-servis-androidu")) (:id "G-eva-jz" :deck "G" :name "EVA pod (JZ)" - :location "Střed, mírně JZ" :note "Skafandry pro výstup do kosmu" - :connections ("G-servis-androidů" "G-kryopody-z")) + :location "Střed-JZ" :note "" + :connections ("G-servis-androidu" "G-kryopody-z")) (:id "G-eva-jv" :deck "G" :name "EVA pod (JV)" - :location "Střed, mírně JV" :note "Skafandry pro výstup do kosmu" - :connections ("G-servis-androidů" "G-kryopody-v")) + :location "Střed-JV" :note "" + :connections ("G-servis-androidu" "G-kryopody-v")) (:id "G-sklady-z" :deck "G" :name "Sklady (západ)" - :location "Střed-západ" :note "" - :connections ("G-hangár-01" "G-centrální-šachta")) + :location "Západ" :note "" + :connections ("G-hangar-01" "G-centralni-sachta")) (:id "G-sklady-v" :deck "G" :name "Sklady (východ)" - :location "Střed-východ" :note "" - :connections ("G-hangár-02" "G-centrální-šachta")) - (:id "G-servis-androidů" :deck "G" :name "Servisní úložiště androidů" - :location "Střed" :note "Sklad/servis androidů" - :connections ("G-nástupní-hala" "G-eva-sz" "G-eva-sv" "G-eva-jz" "G-eva-jv" - "G-centrální-šachta")) - (:id "G-nákladový-dok" :deck "G" :name "Nákladový dok" - :location "Jihozápad" :note "Nakládání/vykládání" - :connections ("G-kryopody-z" "G-průlez-G1" "G-průlez-G7")) - (:id "G-opravárenský-dok" :deck "G" :name "Opravárenský dok" - :location "Jihovýchod" :note "Opravy plavidel" - :connections ("G-kryopody-v" "G-průlez-G2" "G-průlez-G8")) - (:id "G-kryopody-z" :deck "G" :name "Nouzové kryopody (západ)" - :location "Jihozápad" :note "Záložní kryospánek" - :connections ("G-eva-jz" "G-nákladový-dok")) - (:id "G-kryopody-v" :deck "G" :name "Nouzové kryopody (východ)" - :location "Jihovýchod" :note "Záložní kryospánek" - :connections ("G-eva-jv" "G-opravárenský-dok")) - ;; Průlezy G - (:id "G-průlez-G1" :deck "G" :name "Průlez G1" - :location "Jihozápad" :note "Vede nahoru na F1" - :connections ("G-nákladový-dok" "F-průlez-F1")) - (:id "G-průlez-G2" :deck "G" :name "Průlez G2" - :location "Jihovýchod" :note "Vede nahoru na F2" - :connections ("G-opravárenský-dok" "F-průlez-F2")) - (:id "G-průlez-G3" :deck "G" :name "Průlez G3" - :location "Severozápad" :note "Vede dolů na H3" - :connections ("G-nástupní-hala" "H-průlez-H3")) - (:id "G-průlez-G4" :deck "G" :name "Průlez G4" - :location "Severovýchod" :note "Vede dolů na H4" - :connections ("G-nástupní-hala" "H-průlez-H4")) - (:id "G-průlez-G5" :deck "G" :name "Průlez G5" - :location "Střed-západ" :note "Vede nahoru na F5" - :connections ("G-hangár-01" "F-průlez-F5")) - (:id "G-průlez-G6" :deck "G" :name "Průlez G6" - :location "Střed-východ" :note "Vede nahoru na F6" - :connections ("G-hangár-02" "F-průlez-F6")) - (:id "G-průlez-G7" :deck "G" :name "Průlez G7" - :location "Jihozápad (jižněji)" :note "Vede dolů na H7" - :connections ("G-nákladový-dok" "H-průlez-H7")) - (:id "G-průlez-G8" :deck "G" :name "Průlez G8" - :location "Jihovýchod (jižněji)" :note "Vede dolů na H8" - :connections ("G-opravárenský-dok" "H-průlez-H8")) - (:id "G-průlez-G9" :deck "G" :name "Průlez G9 (komunikační věž)" - :location "Komunikační věž" :note "Vede dolů na H9 (DA/UT/UR)" - :connections ("G-centrální-šachta" "GH-komunikační-věž")) - (:id "G-centrální-šachta" :deck "G" :name "Centrální šachta" - :location "Střed" :note "Přístup na paluby B–F, H–J" - :connections ("G-nástupní-hala" "G-sklady-z" "G-sklady-v" "G-servis-androidů" - "G-průlez-G9" - "B-centrální-šachta" "C-centrální-šachta" "D-centrální-šachta" - "E-centrální-šachta" "F-centrální-šachta" "H-centrální-šachta" - "I-centrální-šachta" "J-centrální-šachta")) + :location "Východ" :note "" + :connections ("G-hangar-02" "G-centralni-sachta")) + (:id "G-servis-androidu" :deck "G" :name "Servisní úložiště androidů" + :location "Střed" :note "" + :connections ("G-nastupni-hala" "G-eva-sz" "G-eva-sv" + "G-eva-jz" "G-eva-jv" "G-centralni-sachta")) + (:id "G-nakladovy-dok" :deck "G" :name "Nákladový dok" + :location "Jihozápad" :note "" + :connections ("G-kryopody-z" "G-prulez-G1" "G-prulez-G7")) + (:id "G-opravarensky-dok" :deck "G" :name "Opravárenský dok" + :location "Jihovýchod" :note "" + :connections ("G-kryopody-v" "G-prulez-G2" "G-prulez-G8")) + (:id "G-kryopody-z" :deck "G" :name "Nouzové kryopody (Z)" + :location "Jihozápad" :note "" + :connections ("G-eva-jz" "G-nakladovy-dok")) + (:id "G-kryopody-v" :deck "G" :name "Nouzové kryopody (V)" + :location "Jihovýchod" :note "" + :connections ("G-eva-jv" "G-opravarensky-dok")) + (:id "G-prulez-G1" :deck "G" :name "Průlez G1" + :location "Jihozápad" :note "-> F1" + :connections ("G-nakladovy-dok" "F-prulez-F1")) + (:id "G-prulez-G2" :deck "G" :name "Průlez G2" + :location "Jihovýchod" :note "-> F2" + :connections ("G-opravarensky-dok" "F-prulez-F2")) + (:id "G-prulez-G3" :deck "G" :name "Průlez G3" + :location "Severozápad" :note "-> H3" + :connections ("G-nastupni-hala" "H-prulez-H3")) + (:id "G-prulez-G4" :deck "G" :name "Průlez G4" + :location "Severovýchod" :note "-> H4" + :connections ("G-nastupni-hala" "H-prulez-H4")) + (:id "G-prulez-G5" :deck "G" :name "Průlez G5" + :location "Západ" :note "-> F5" + :connections ("G-hangar-01" "F-prulez-F5")) + (:id "G-prulez-G6" :deck "G" :name "Průlez G6" + :location "Východ" :note "-> F6" + :connections ("G-hangar-02" "F-prulez-F6")) + (:id "G-prulez-G7" :deck "G" :name "Průlez G7" + :location "Jihozápad" :note "-> H7" + :connections ("G-nakladovy-dok" "F-prulez-F7" "H-prulez-H7")) + (:id "G-prulez-G8" :deck "G" :name "Průlez G8" + :location "Jihovýchod" :note "-> H8" + :connections ("G-opravarensky-dok" "F-prulez-F8" "H-prulez-H8")) + (:id "G-prulez-G9" :deck "G" :name "Průlez G9 (komunikační věž)" + :location "Sever (vez)" :note "-> komunikační věž / H9" + :connections ("G-shromazdiste" "GH-komunikacni-vez")) + (:id "G-centralni-sachta" :deck "G" :name "Centrální šachta" + :location "Střed" :note "" + :connections ("G-nastupni-hala" "G-sklady-z" "G-sklady-v" "G-servis-androidu" + "B-centralni-sachta" "C-centralni-sachta" "D-centralni-sachta" + "E-centralni-sachta" "F-centralni-sachta" "H-centralni-sachta" + "I-centralni-sachta" "J-centralni-sachta")) - ;; === Komunikační věž (G/H) === - (:id "GH-komunikační-věž" :deck "GH" :name "Komunikační věž / DA/UT/UR" - :location "Mezi palubami G a H" :note "DA/UT/UR = komunikační počítač (Daughter). Alternativa k MU/TH/UR. Úzká vertikální struktura — snadno bránitelná i past." - :connections ("G-průlez-G9" "H-průlez-H9")) + ;; === Komunikacni vez (G/H) === + (:id "GH-komunikacni-vez" :deck "GH" :name "Komunikační věž / DA/UT/UR" + :location "Mezi G a H" :note "Komunikační počítač (Daughter)." + :connections ("G-prulez-G9" "H-prulez-H9")) ;; === Paluba H === - (:id "H-plasma-sz" :deck "H" :name "Plasmová přenosová stanice (SZ)" - :location "Sever-západ" :note "Přenos energie" - :connections ("H-nádrž-toxických" "H-destilační-z")) - (:id "H-plasma-sv" :deck "H" :name "Plasmová přenosová stanice (SV)" - :location "Sever-východ" :note "Přenos energie" - :connections ("H-nádrž-toxických" "H-destilační-v")) - (:id "H-nádrž-toxických" :deck "H" :name "Nádrž toxických plynů" - :location "Sever-střed" :note "*** EXTRÉMNĚ NEBEZPEČNÉ *** Únik = smrt" - :connections ("H-plasma-sz" "H-plasma-sv" "H-průlez-H3" "H-průlez-H4")) - (:id "H-destilační-z" :deck "H" :name "Destilační nádrže (Z)" - :location "Střed-západ" :note "Chemická destilace" - :connections ("H-plasma-sz" "H-kondenzátory-z")) - (:id "H-destilační-v" :deck "H" :name "Destilační nádrže (V)" - :location "Střed-východ" :note "Chemická destilace" - :connections ("H-plasma-sv" "H-kondenzátory-v")) - (:id "H-kondenzátory-z" :deck "H" :name "Kondenzátory (Z)" - :location "Střed-západ" :note "" - :connections ("H-destilační-z" "H-sběrač-01" "H-dílny-z")) - (:id "H-kondenzátory-v" :deck "H" :name "Kondenzátory (V)" - :location "Střed-východ" :note "" - :connections ("H-destilační-v" "H-sběrač-02" "H-dílny-v")) - (:id "H-sběrač-01" :deck "H" :name "Plasmový sběrač 01" - :location "Krajní západ" :note "Sběr plasmy" - :connections ("H-kondenzátory-z")) - (:id "H-sběrač-02" :deck "H" :name "Plasmový sběrač 02" - :location "Krajní východ" :note "Sběr plasmy" - :connections ("H-kondenzátory-v")) - (:id "H-dílny-z" :deck "H" :name "Dílny (Z)" - :location "Střed-západ" :note "Nářadí — improvizované zbraně" - :connections ("H-kondenzátory-z" "H-řídící-centrum")) - (:id "H-dílny-v" :deck "H" :name "Dílny (V)" - :location "Střed-východ" :note "Nářadí — improvizované zbraně" - :connections ("H-kondenzátory-v" "H-řídící-centrum")) - (:id "H-řídící-centrum" :deck "H" :name "Řídící centrum" - :location "Střed" :note "Řízení průmyslových procesů. Sabotáž?" - :connections ("H-dílny-z" "H-dílny-v" "H-strojovna-z" "H-strojovna-v" "H-centrální-šachta")) + (:id "H-plasma-sz" :deck "H" :name "Plasmová stanice (SZ)" + :location "Severozápad" :note "" + :connections ("H-nadrz-toxickych" "H-destilacni-z")) + (:id "H-plasma-sv" :deck "H" :name "Plasmová stanice (SV)" + :location "Severovýchod" :note "" + :connections ("H-nadrz-toxickych" "H-destilacni-v")) + (:id "H-nadrz-toxickych" :deck "H" :name "Nádrž toxických plynů" + :location "Sever-střed" :note "NEBEZPEČNÉ — unik = smrt." + :connections ("H-plasma-sz" "H-plasma-sv" "H-prulez-H3" "H-prulez-H4")) + (:id "H-destilacni-z" :deck "H" :name "Destilační nádrže (Z)" + :location "Západ" :note "" + :connections ("H-plasma-sz" "H-kondenzatory-z")) + (:id "H-destilacni-v" :deck "H" :name "Destilační nádrže (V)" + :location "Východ" :note "" + :connections ("H-plasma-sv" "H-kondenzatory-v")) + (:id "H-kondenzatory-z" :deck "H" :name "Kondenzátory (Z)" + :location "Západ" :note "" + :connections ("H-destilacni-z" "H-sberac-01" "H-dilny-z")) + (:id "H-kondenzatory-v" :deck "H" :name "Kondenzátory (V)" + :location "Východ" :note "" + :connections ("H-destilacni-v" "H-sberac-02" "H-dilny-v")) + (:id "H-sberac-01" :deck "H" :name "Plasmový sběrač 01" + :location "Krajní západ" :note "" + :connections ("H-kondenzatory-z")) + (:id "H-sberac-02" :deck "H" :name "Plasmový sběrač 02" + :location "Krajní východ" :note "" + :connections ("H-kondenzatory-v")) + (:id "H-dilny-z" :deck "H" :name "Dílny (Z)" + :location "Střed-západ" :note "Nářadí." + :connections ("H-kondenzatory-z" "H-ridici-centrum")) + (:id "H-dilny-v" :deck "H" :name "Dílny (V)" + :location "Střed-východ" :note "Nářadí." + :connections ("H-kondenzatory-v" "H-ridici-centrum")) + (:id "H-ridici-centrum" :deck "H" :name "Řídící centrum" + :location "Střed" :note "" + :connections ("H-dilny-z" "H-dilny-v" "H-strojovna-z" "H-strojovna-v" "H-centralni-sachta")) (:id "H-strojovna-z" :deck "H" :name "Strojovna (Z)" - :location "Jih-střed-západ" :note "" - :connections ("H-řídící-centrum" "H-mag-čerpadlo")) + :location "Jih-západ" :note "" + :connections ("H-ridici-centrum" "H-mag-cerpadlo")) (:id "H-strojovna-v" :deck "H" :name "Strojovna (V)" - :location "Jih-střed-východ" :note "" - :connections ("H-řídící-centrum" "H-mag-čerpadlo")) - (:id "H-mag-čerpadlo" :deck "H" :name "Magnetické čerpadlo" + :location "Jih-východ" :note "" + :connections ("H-ridici-centrum" "H-mag-cerpadlo")) + (:id "H-mag-cerpadlo" :deck "H" :name "Magnetické čerpadlo" :location "Jih-střed" :note "" - :connections ("H-strojovna-z" "H-strojovna-v" "H-tavení")) - (:id "H-tavení" :deck "H" :name "Řídící stanice tavení" + :connections ("H-strojovna-z" "H-strojovna-v" "H-taveni")) + (:id "H-taveni" :deck "H" :name "Řídící stanice tavení" :location "Jih-střed" :note "" - :connections ("H-mag-čerpadlo" "H-plasma-jz" "H-plasma-jv")) - (:id "H-plasma-jz" :deck "H" :name "Plasmová přenosová stanice (JZ)" + :connections ("H-mag-cerpadlo" "H-plasma-jz" "H-plasma-jv")) + (:id "H-plasma-jz" :deck "H" :name "Plasmová stanice (JZ)" :location "Jihozápad" :note "" - :connections ("H-tavení" "H-energie-z" "H-průlez-H7")) - (:id "H-plasma-jv" :deck "H" :name "Plasmová přenosová stanice (JV)" + :connections ("H-taveni" "H-energie-z" "H-prulez-H7")) + (:id "H-plasma-jv" :deck "H" :name "Plasmová stanice (JV)" :location "Jihovýchod" :note "" - :connections ("H-tavení" "H-energie-v" "H-průlez-H8")) + :connections ("H-taveni" "H-energie-v" "H-prulez-H8")) (:id "H-energie-z" :deck "H" :name "Energetické sběrné články (Z)" - :location "Krajní jihozápad" :note "Zásobník energie" + :location "Krajní jihozápad" :note "" :connections ("H-plasma-jz")) (:id "H-energie-v" :deck "H" :name "Energetické sběrné články (V)" - :location "Krajní jihovýchod" :note "Zásobník energie" + :location "Krajní jihovýchod" :note "" :connections ("H-plasma-jv")) - ;; Průlezy H - (:id "H-průlez-H3" :deck "H" :name "Průlez H3" - :location "Střed-západ" :note "Vede nahoru na G3" - :connections ("H-nádrž-toxických" "G-průlez-G3")) - (:id "H-průlez-H4" :deck "H" :name "Průlez H4" - :location "Střed-východ" :note "Vede nahoru na G4" - :connections ("H-nádrž-toxických" "G-průlez-G4")) - (:id "H-průlez-H7" :deck "H" :name "Průlez H7" - :location "Jih-západ" :note "Vede nahoru na G7" - :connections ("H-plasma-jz" "G-průlez-G7")) - (:id "H-průlez-H8" :deck "H" :name "Průlez H8" - :location "Jih-východ" :note "Vede nahoru na G8" - :connections ("H-plasma-jv" "G-průlez-G8")) - (:id "H-průlez-H9" :deck "H" :name "Průlez H9 (komunikační věž)" - :location "Komunikační věž" :note "Vede nahoru na G9. DA/UT/UR v komunikační věži." - :connections ("H-centrální-šachta" "GH-komunikační-věž")) - (:id "H-centrální-šachta" :deck "H" :name "Centrální šachta" - :location "Střed" :note "Přístup na paluby B–G, I–J" - :connections ("H-řídící-centrum" "H-průlez-H9" - "B-centrální-šachta" "C-centrální-šachta" "D-centrální-šachta" - "E-centrální-šachta" "F-centrální-šachta" "G-centrální-šachta" - "I-centrální-šachta" "J-centrální-šachta")) + (:id "H-prulez-H3" :deck "H" :name "Průlez H3" + :location "Západ" :note "-> G3" + :connections ("H-nadrz-toxickych" "G-prulez-G3")) + (:id "H-prulez-H4" :deck "H" :name "Průlez H4" + :location "Východ" :note "-> G4" + :connections ("H-nadrz-toxickych" "G-prulez-G4")) + (:id "H-prulez-H7" :deck "H" :name "Průlez H7" + :location "Jihozápad" :note "-> G7" + :connections ("H-plasma-jz" "G-prulez-G7")) + (:id "H-prulez-H8" :deck "H" :name "Průlez H8" + :location "Jihovýchod" :note "-> G8" + :connections ("H-plasma-jv" "G-prulez-G8")) + (:id "H-prulez-H9" :deck "H" :name "Průlez H9 (komunikační věž)" + :location "Sever (vez)" :note "-> G9 / DA/UT/UR" + :connections ("H-centralni-sachta" "GH-komunikacni-vez")) + (:id "H-centralni-sachta" :deck "H" :name "Centrální šachta" + :location "Střed" :note "" + :connections ("H-ridici-centrum" "H-prulez-H9" + "B-centralni-sachta" "C-centralni-sachta" "D-centralni-sachta" + "E-centralni-sachta" "F-centralni-sachta" "G-centralni-sachta" + "I-centralni-sachta" "J-centralni-sachta")) ;; === Paluba I === - (:id "I-záchranné-moduly" :deck "I" :name "Záchranné moduly" - :location "Celá paluba" :note "Únikové kapsle pro evakuaci. Na mapě bez textových popisků místností." - :connections ("I-centrální-šachta")) - (:id "I-centrální-šachta" :deck "I" :name "Centrální šachta" - :location "Střed" :note "Přístup na paluby B–H, J" - :connections ("I-záchranné-moduly" - "B-centrální-šachta" "C-centrální-šachta" "D-centrální-šachta" - "E-centrální-šachta" "F-centrální-šachta" "G-centrální-šachta" - "H-centrální-šachta" "J-centrální-šachta")) + (:id "I-zachranne-moduly" :deck "I" :name "Záchranné moduly" + :location "Celá paluba" :note "Únikové kapsle." + :connections ("I-centralni-sachta")) + (:id "I-centralni-sachta" :deck "I" :name "Centrální šachta" + :location "Střed" :note "" + :connections ("I-zachranne-moduly" + "B-centralni-sachta" "C-centralni-sachta" "D-centralni-sachta" + "E-centralni-sachta" "F-centralni-sachta" "G-centralni-sachta" + "H-centralni-sachta" "J-centralni-sachta")) ;; === Paluba J === - (:id "J-baterie-horní" :deck "J" :name "Baterie (horní)" - :location "Sever-střed" :note "Energetická baterie. Zásah = exploze/výpadek." - :connections ("J-centrální-šachta")) - (:id "J-baterie-levá" :deck "J" :name "Baterie (levá/západ)" - :location "Západ" :note "Energetická baterie" - :connections ("J-centrální-šachta")) - (:id "J-baterie-pravá" :deck "J" :name "Baterie (pravá/východ)" - :location "Východ" :note "Energetická baterie" - :connections ("J-centrální-šachta")) - (:id "J-centrální-šachta" :deck "J" :name "Centrální šachta" - :location "Střed" :note "Přístup na paluby B–I. Nejnižší paluba — jen nahoru." - :connections ("J-baterie-horní" "J-baterie-levá" "J-baterie-pravá" - "B-centrální-šachta" "C-centrální-šachta" "D-centrální-šachta" - "E-centrální-šachta" "F-centrální-šachta" "G-centrální-šachta" - "H-centrální-šachta" "I-centrální-šachta"))) - "Kompletní seznam místností s propojením. Ověřeno z PDF.") + (:id "J-baterie-horni" :deck "J" :name "Baterie (horní)" + :location "Sever-střed" :note "" + :connections ("J-centralni-sachta")) + (:id "J-baterie-leva" :deck "J" :name "Baterie (západ)" + :location "Západ" :note "" + :connections ("J-centralni-sachta")) + (:id "J-baterie-prava" :deck "J" :name "Baterie (východ)" + :location "Východ" :note "" + :connections ("J-centralni-sachta")) + (:id "J-centralni-sachta" :deck "J" :name "Centrální šachta" + :location "Střed" :note "Nejnižší paluba — jen nahoru." + :connections ("J-baterie-horni" "J-baterie-leva" "J-baterie-prava" + "B-centralni-sachta" "C-centralni-sachta" "D-centralni-sachta" + "E-centralni-sachta" "F-centralni-sachta" "G-centralni-sachta" + "H-centralni-sachta" "I-centralni-sachta"))) + "Kompletní seznam místností. Ověřeno z PDF map.") - -;; ══════════════════════════════════════════════════════════════ -;; DATA: Postava -;; ══════════════════════════════════════════════════════════════ +;; ==================================================================== +;; POSTAVA +;; ==================================================================== (defvar alien-rpg-character - '(:name "prof. Héctor Navarre, Ph.D." + '(:name "prof. Hector Navarre, Ph.D." :career "Biochemický inženýr" :age 74 :attributes (:strength 3 :agility 4 :wits 3 :empathy 4) @@ -554,10 +538,10 @@ :mobility 0 :piloting 0 :ranged-combat 3 :comtech 0 :observation 2 :survival 0 :command 0 :manipulation 3 :medical-aid 0) - :talent "Analýza: Hod na OBSERVATION — za každý úspěch (6) získáš jednu informaci o organismu/předmětu." - :gear ("Svítilna" "CBRN detektor (viry, toxiny, radiace)" "Lokátor PDT (pozice členů týmu)") - :signature-item "Karta (blíže neurčeno)") - "Statická data postavy (nemění se během hry).") + :talent "Analyza: Observation → info o organismu/předmětu" + :gear ("Svítilna" "CBRN detektor" "Lokátor PDT") + :signature-item "Karta") + "Statická data postavy.") (defvar alien-rpg-skill-attributes '((:close-combat . :strength) (:heavy-machinery . :strength) (:stamina . :strength) @@ -573,38 +557,42 @@ (:observation . "Observation") (:survival . "Survival") (:command . "Command") (:manipulation . "Manipulation") (:medical-aid . "Medical Aid")) - "Čitelné názvy dovedností.") + "Názvy dovedností.") -;; ══════════════════════════════════════════════════════════════ -;; STAV HRY (mění se během sezení) -;; ══════════════════════════════════════════════════════════════ +(defvar alien-rpg-attr-abbrevs + '((:strength . "Str") (:agility . "Agi") (:wits . "Wit") (:empathy . "Emp")) + "Zkratky atributů.") + +;; ==================================================================== +;; STAV HRY +;; ==================================================================== (defvar alien-rpg-state '(:health 4 :stress 0 - :current-room "B-centrální-šachta" + :current-room "B-centralni-sachta" :weapons () :armor nil :extra-gear () :injuries () + :conditions () :xp 0 :story-points 0 :notes () :buddy nil :rival nil) - "Dynamický herní stav. Mění se během sezení. Ukládá/načítá ze souboru.") + "Dynamický herní stav.") (defvar alien-rpg-state-file (expand-file-name "alien-rpg-save.el" (file-name-directory (or load-file-name buffer-file-name "~/alienrpg/"))) - "Soubor pro ukládání herního stavu.") + "Soubor pro ukládání.") - -;; ══════════════════════════════════════════════════════════════ -;; POMOCNÉ FUNKCE -;; ══════════════════════════════════════════════════════════════ +;; ==================================================================== +;; POMOCNE FUNKCE +;; ==================================================================== (defun alien-rpg--get-room (room-id) "Najdi místnost podle ROOM-ID." @@ -616,28 +604,27 @@ (cl-find-if (lambda (d) (string= (plist-get d :id) deck-id)) alien-rpg-decks)) -(defun alien-rpg--room-display-name (room) - "Vytvoř zobrazovaný název místnosti ROOM." - (format "[%s] %s" (plist-get room :deck) (plist-get room :name))) +(defun alien-rpg--room-label (room) + "Kód a jméno: B-mu-th-ur MU/TH/UR" + (format "%s %s" (plist-get room :id) (plist-get room :name))) (defun alien-rpg--current-room () - "Vrať plist aktuální místnosti." + "Aktuální místnost." (alien-rpg--get-room (plist-get alien-rpg-state :current-room))) (defun alien-rpg--connected-rooms (room) - "Vrať seznam plistů místností spojených s ROOM." - (let ((conn-ids (plist-get room :connections))) - (cl-remove-if #'null - (mapcar #'alien-rpg--get-room conn-ids)))) + "Propojené místnosti." + (cl-remove-if #'null + (mapcar #'alien-rpg--get-room (plist-get room :connections)))) (defun alien-rpg--rooms-on-deck (deck-id) - "Vrať všechny místnosti na palubě DECK-ID." + "Všechny místnosti na palubě." (cl-remove-if-not (lambda (r) (string= (plist-get r :deck) deck-id)) alien-rpg-rooms)) (defun alien-rpg--skill-total (skill-key) - "Vrať celkový počet kostek (atribut + dovednost) pro SKILL-KEY." + "Celkový počet (atribut + dovednost)." (let* ((attrs (plist-get alien-rpg-character :attributes)) (skills (plist-get alien-rpg-character :skills)) (attr-key (cdr (assq skill-key alien-rpg-skill-attributes))) @@ -645,62 +632,86 @@ (skill-val (or (plist-get skills skill-key) 0))) (+ attr-val skill-val))) +(defun alien-rpg--find-all-shortest-paths (start goal) + "Najdi všechny nejkratší cesty z START do GOAL." + (let ((queue (list (list (list start)))) + (visited (make-hash-table :test 'equal)) + (found-paths nil) + (found-dist most-positive-fixnum)) + (puthash start 0 visited) + (while queue + (let* ((path (pop queue)) + (current (car (last path))) + (dist (1- (length path)))) + (when (> dist found-dist) + (setq queue nil)) + (when (<= dist found-dist) + (if (string= current goal) + (progn + (setq found-dist dist) + (push path found-paths)) + (let ((room (alien-rpg--get-room current))) + (when room + (dolist (next (plist-get room :connections)) + (let ((new-dist (1+ dist))) + (when (<= new-dist found-dist) + (let ((prev (gethash next visited))) + (when (or (null prev) (>= prev new-dist)) + (puthash next new-dist visited) + (setq queue (append queue (list (append path (list next)))))))))))))))) + (nreverse found-paths))) -;; ══════════════════════════════════════════════════════════════ -;; ULOŽENÍ / NAČTENÍ STAVU -;; ══════════════════════════════════════════════════════════════ +;; ==================================================================== +;; ULOZENI / NACTENI +;; ==================================================================== (defun alien-rpg-save-state () - "Ulož herní stav do souboru." + "Ulož herní stav." (interactive) - (let ((file (or alien-rpg-state-file - (expand-file-name "alien-rpg-save.el" - (file-name-directory - (or buffer-file-name default-directory)))))) + (let ((file alien-rpg-state-file)) (with-temp-file file - (insert ";; Alien RPG — uložený herní stav\n") - (insert (format ";; Uloženo: %s\n" (format-time-string "%Y-%m-%d %H:%M"))) + (insert ";; Alien RPG — ulozeny herni stav\n") + (insert (format ";; %s\n" (format-time-string "%Y-%m-%d %H:%M"))) (insert "(setq alien-rpg-state\n '") (pp alien-rpg-state (current-buffer)) (insert ")\n")) - (setq alien-rpg-state-file file) - (message "Stav uložen: %s" file))) + (message "Uloženo: %s" file))) (defun alien-rpg-load-state () - "Načti herní stav ze souboru." + "Načti herní stav." (interactive) (let ((file (or alien-rpg-state-file - (read-file-name "Načíst stav ze souboru: " - nil nil t "alien-rpg-save.el")))) + (read-file-name "Načíst ze souboru: " nil nil t "alien-rpg-save.el")))) (when (file-exists-p file) (load file nil 'nomessage) (setq alien-rpg-state-file file) - (message "Stav načten: %s" file)))) + ;; Zpětná kompatibilita — doplnit chybějící klíče + (unless (plist-member alien-rpg-state :conditions) + (plist-put alien-rpg-state :conditions nil)) + (unless (plist-member alien-rpg-state :armor) + (plist-put alien-rpg-state :armor nil)) + (message "Načteno: %s" file)))) (defun alien-rpg--autosave () - "Automaticky ulož stav (tiše, bez zprávy)." + "Automaticky ulož (tiše)." (when alien-rpg-state-file (with-temp-file alien-rpg-state-file - (insert ";; Alien RPG — uložený herní stav\n") - (insert (format ";; Uloženo: %s\n" (format-time-string "%Y-%m-%d %H:%M"))) + (insert ";; Alien RPG — ulozeny herni stav\n") + (insert (format ";; %s\n" (format-time-string "%Y-%m-%d %H:%M"))) (insert "(setq alien-rpg-state\n '") (pp alien-rpg-state (current-buffer)) (insert ")\n")))) -;; Automaticky načti uložený stav při startu (pokud existuje) +;; Automaticky nacti stav pri startu (when (and alien-rpg-state-file (file-exists-p alien-rpg-state-file)) - (load alien-rpg-state-file nil 'nomessage) - (message "Alien RPG: stav načten z %s" alien-rpg-state-file)) + (load alien-rpg-state-file nil 'nomessage)) - -;; ══════════════════════════════════════════════════════════════ -;; INTERAKTIVNÍ PŘÍKAZY -;; ══════════════════════════════════════════════════════════════ - -;; --- Kde jsem --- +;; ==================================================================== +;; INTERAKTIVNI PRIKAZY +;; ==================================================================== (defun alien-rpg-where-am-i () - "Zobraz aktuální pozici a okolí. Jeden stisk = kompletní přehled." + "Kde jsem — stručně." (interactive) (let* ((room (alien-rpg--current-room)) (deck (alien-rpg--get-deck (plist-get room :deck))) @@ -714,107 +725,112 @@ (with-current-buffer (get-buffer-create "*Alien RPG*") (let ((inhibit-read-only t)) (erase-buffer) - (insert (propertize "═══ KDE JSEM ═══\n" 'face 'bold)) - (insert (format "\nPaluba %s — %s\n" (plist-get deck :id) (plist-get deck :name))) - (insert (format "Místnost: %s\n" (plist-get room :name))) - (insert (format "Poloha: %s\n" (plist-get room :location))) + (insert (format "%s: %s\n" (plist-get room :id) (plist-get room :name))) + (insert (format "[%s] %s -- %s\n" + (plist-get deck :id) (plist-get deck :name) (plist-get room :location))) (when (and (plist-get room :note) (not (string-empty-p (plist-get room :note)))) - (insert (format "\n%s\n" (plist-get room :note)))) - ;; Okolní místnosti na stejné palubě + (insert (format "%s\n" (plist-get room :note)))) (when same-deck - (insert (propertize "\n── Na této palubě ──\n" 'face 'bold)) - (dolist (r same-deck) - (insert (format " • %s (%s)\n" - (plist-get r :name) - (plist-get r :location))))) - ;; Přístupy na jiné paluby + (insert (format "Na palubě: %s\n" + (mapconcat (lambda (r) (plist-get r :id)) same-deck ", ")))) (when other-deck - (insert (propertize "\n── Přístupy na jiné paluby ──\n" 'face 'bold)) - (dolist (r other-deck) - (insert (format " → [%s] %s\n" - (plist-get r :deck) - (plist-get r :name))))) - ;; Paluba info - (insert (propertize "\n── Info o palubě ──\n" 'face 'bold)) - (insert (format "Účel: %s\n" (plist-get deck :purpose))) - (insert (format "Velikost: %s, Měřítko: %s\n" (plist-get deck :size) (plist-get deck :scale))) - (insert (format "%s\n" (plist-get deck :notes)))) + (let ((deck-ids (mapcar (lambda (r) (plist-get r :deck)) other-deck))) + (insert (format "Šachta: %s\n" + (string-join (cl-remove-duplicates deck-ids :test #'string=) " ")))))) (goto-char (point-min)) (special-mode)) (pop-to-buffer "*Alien RPG*"))) -;; --- Přesun --- - (defun alien-rpg-move () - "Přesuň se do propojené místnosti. Completion — žádné hledání." + "Přesun do propojené místnosti." (interactive) (let* ((room (alien-rpg--current-room)) (connected (alien-rpg--connected-rooms room)) (candidates (mapcar (lambda (r) - (cons (alien-rpg--room-display-name r) - (plist-get r :id))) + (cons (alien-rpg--room-label r) (plist-get r :id))) connected)) (choice (completing-read - (format "Přesun z [%s] %s → " (plist-get room :deck) (plist-get room :name)) + (format "%s -> " (plist-get room :id)) candidates nil t)) (target-id (cdr (assoc choice candidates)))) (plist-put alien-rpg-state :current-room target-id) (alien-rpg--autosave) (alien-rpg-where-am-i))) -;; --- Teleport (GM řekne "jsi na palubě X") --- - (defun alien-rpg-teleport () - "Přesuň se kamkoliv na stanici. Pro případy kdy GM řekne novou pozici." + "Teleport kamkoliv." (interactive) (let* ((candidates (mapcar (lambda (r) - (cons (alien-rpg--room-display-name r) - (plist-get r :id))) + (cons (alien-rpg--room-label r) (plist-get r :id))) alien-rpg-rooms)) - (choice (completing-read "Teleport na: " candidates nil t)) + (choice (completing-read "Teleport: " candidates nil t)) (target-id (cdr (assoc choice candidates)))) (plist-put alien-rpg-state :current-room target-id) (alien-rpg--autosave) (alien-rpg-where-am-i))) -;; --- Najít místnost --- - (defun alien-rpg-find-room () - "Najdi a zobraz informace o libovolné místnosti." + "Info o místnosti." (interactive) (let* ((candidates (mapcar (lambda (r) - (cons (alien-rpg--room-display-name r) - r)) + (cons (alien-rpg--room-label r) r)) alien-rpg-rooms)) - (choice (completing-read "Najít místnost: " candidates nil t)) + (choice (completing-read "Místnost: " candidates nil t)) (room (cdr (assoc choice candidates))) (deck (alien-rpg--get-deck (plist-get room :deck))) (connected (alien-rpg--connected-rooms room))) (with-current-buffer (get-buffer-create "*Alien RPG*") (let ((inhibit-read-only t)) (erase-buffer) - (insert (propertize "═══ MÍSTNOST ═══\n" 'face 'bold)) - (insert (format "\n[%s] %s — %s\n" (plist-get deck :id) (plist-get deck :name) (plist-get room :name))) - (insert (format "Poloha na palubě: %s\n" (plist-get room :location))) + (insert (format "%s: %s\n" (plist-get room :id) (plist-get room :name))) + (insert (format "[%s] %s -- %s\n" + (plist-get deck :id) (plist-get deck :name) (plist-get room :location))) (when (and (plist-get room :note) (not (string-empty-p (plist-get room :note)))) - (insert (format "\n%s\n" (plist-get room :note)))) - (insert (propertize "\n── Propojení ──\n" 'face 'bold)) - (dolist (r connected) - (insert (format " → [%s] %s (%s)\n" - (plist-get r :deck) - (plist-get r :name) - (plist-get r :location))))) + (insert (format "%s\n" (plist-get room :note)))) + (insert (format "Propojení: %s\n" + (mapconcat (lambda (r) (plist-get r :id)) connected ", ")))) (goto-char (point-min)) (special-mode)) (pop-to-buffer "*Alien RPG*"))) -;; --- Přehled paluby --- +(defun alien-rpg-find-path () + "Všechny nejkratší cesty do cíle." + (interactive) + (let* ((start (plist-get alien-rpg-state :current-room)) + (candidates (mapcar (lambda (r) + (cons (alien-rpg--room-label r) (plist-get r :id))) + alien-rpg-rooms)) + (choice (completing-read "Cesta do: " candidates nil t)) + (goal (cdr (assoc choice candidates))) + (paths (alien-rpg--find-all-shortest-paths start goal))) + (with-current-buffer (get-buffer-create "*Alien RPG*") + (let ((inhibit-read-only t)) + (erase-buffer) + (if paths + (let ((dist (1- (length (car paths)))) + (count (min 10 (length paths)))) + (insert (format "%s -> %s: %d krok%s" + start goal dist + (cond ((= dist 1) "") ((< dist 5) "y") (t "u")))) + (when (> (length paths) 1) + (insert (format " (%d cest)" (length paths)))) + (insert "\n") + (cl-loop for path in paths + for i from 1 to count do + (when (> count 1) + (insert (format "%d) " i))) + (insert (mapconcat #'identity path " -> ")) + (insert "\n"))) + (insert "Cesta nenalezena.\n"))) + (goto-char (point-min)) + (special-mode)) + (pop-to-buffer "*Alien RPG*"))) (defun alien-rpg-deck-overview () - "Zobraz přehled zvolené paluby." + "Přehled paluby." (interactive) (let* ((candidates (mapcar (lambda (d) - (cons (format "%s — %s" (plist-get d :id) (plist-get d :name)) + (cons (format "%s %s" (plist-get d :id) (plist-get d :name)) (plist-get d :id))) alien-rpg-decks)) (choice (completing-read "Paluba: " candidates nil t)) @@ -824,170 +840,219 @@ (with-current-buffer (get-buffer-create "*Alien RPG*") (let ((inhibit-read-only t)) (erase-buffer) - (insert (propertize (format "═══ PALUBA %s ═══\n" deck-id) 'face 'bold)) - (insert (format "\n%s\n" (plist-get deck :name))) - (insert (format "Účel: %s\n" (plist-get deck :purpose))) - (insert (format "Velikost: %s, Měřítko: %s\n" (plist-get deck :size) (plist-get deck :scale))) - (insert (format "\n%s\n" (plist-get deck :notes))) - (insert (propertize "\n── Místnosti ──\n" 'face 'bold)) + (insert (format "[%s] %s | %s\n" + deck-id (plist-get deck :name) (plist-get deck :scale))) (dolist (r rooms) - (insert (format " • %s (%s)" (plist-get r :name) (plist-get r :location))) - (when (and (plist-get r :note) (not (string-empty-p (plist-get r :note)))) - (insert (format " — %s" (plist-get r :note)))) - (insert "\n"))) + (insert (format " %-25s %-35s %s\n" + (plist-get r :id) + (plist-get r :name) + (plist-get r :location))))) (goto-char (point-min)) (special-mode)) (pop-to-buffer "*Alien RPG*"))) -;; --- Stav postavy --- +(defun alien-rpg-station-overview () + "Přehled stanice." + (interactive) + (let ((current-deck (plist-get (alien-rpg--current-room) :deck))) + (with-current-buffer (get-buffer-create "*Alien RPG*") + (let ((inhibit-read-only t)) + (erase-buffer) + (insert (format "%s\n" alien-rpg-station-name)) + (dolist (d alien-rpg-decks) + (let* ((id (plist-get d :id)) + (here (string= id current-deck)) + (marker (if here "> " " "))) + (insert (format "%s%s %s\n" marker id (plist-get d :name))) + (pcase id + ("A" (insert " (izolovaná, přístup jen z B)\n")) + ("E" (insert " ---\n")) + ("H" (insert " (průlezy G<->H)\n ---\n")))))) + (goto-char (point-min)) + (special-mode)) + (pop-to-buffer "*Alien RPG*"))) + +(defun alien-rpg-key-locations () + "Klíčová místa." + (interactive) + (with-current-buffer (get-buffer-create "*Alien RPG*") + (let ((inhibit-read-only t)) + (erase-buffer) + (insert "\ +Zbrane: F-zbrojnice [F] Sever-střed +Lekar: C-osetrovna [C] SZ +Pocitac: B-mu-th-ur [B] Jih-střed +Komunikace: GH-komunikacni-vez [GH] +Hangary: G-hangar-01 [G] Z, G-hangar-02 [G] V +Kapsle: I-zachranne-moduly [I] +Kryopody: G-kryopody-z, G-kryopody-v [G] +Reaktor: J-centralni-sachta [J] +Dílny: H-dilny-z, H-dilny-v [H] +EVA: G-eva-sz, G-eva-sv, G-eva-jz, G-eva-jv [G] +Šachta: B<->C<->D<->E<->F<->G<->H<->I<->J +Pruchod B->A: B-pruchod-A [B] Západ +Průlezy F<->G: F1<->G1, F2<->G2, F5<->G5, F6<->G6, F7<->G7, F8<->G8 +Průlezy G<->H: G3<->H3, G4<->H4, G7<->H7, G8<->H8, G9<->H9 +")) + (goto-char (point-min)) + (special-mode)) + (pop-to-buffer "*Alien RPG*")) (defun alien-rpg-status () - "Zobraz aktuální stav postavy. Zdraví, stres, výbava, pozice." + "Stav postavy — stručně." (interactive) (let* ((room (alien-rpg--current-room)) - (deck (alien-rpg--get-deck (plist-get room :deck))) (health (plist-get alien-rpg-state :health)) (stress (plist-get alien-rpg-state :stress)) (weapons (plist-get alien-rpg-state :weapons)) (armor (plist-get alien-rpg-state :armor)) (gear (plist-get alien-rpg-character :gear)) (extra (plist-get alien-rpg-state :extra-gear)) - (injuries (plist-get alien-rpg-state :injuries))) + (injuries (plist-get alien-rpg-state :injuries)) + (conditions (plist-get alien-rpg-state :conditions))) (with-current-buffer (get-buffer-create "*Alien RPG*") (let ((inhibit-read-only t)) (erase-buffer) - (insert (propertize "═══ STAV POSTAVY ═══\n" 'face 'bold)) - (insert (format "\n%s\n" (plist-get alien-rpg-character :name))) - (insert (format "%s, %d let\n" (plist-get alien-rpg-character :career) - (plist-get alien-rpg-character :age))) - ;; Pozice - (insert (propertize "\n── Pozice ──\n" 'face 'bold)) - (insert (format "Paluba %s — %s\n" (plist-get deck :id) (plist-get deck :name))) - (insert (format "Místnost: %s\n" (plist-get room :name))) - ;; Zdraví - (insert (propertize "\n── Zdraví a stres ──\n" 'face 'bold)) - (insert (format "Health: %d/4%s\n" health - (cond ((= health 4) " ████") - ((= health 3) " ███░") - ((= health 2) " ██░░") - ((= health 1) " █░░░ ⚠ KRITICKÉ!") - (t " ░░░░ ☠ BEZ VĚDOMÍ!")))) - (insert (format "Stress: %d%s\n" stress - (if (>= stress 7) - (format " (PANIKA při dalším stresu!)") - ""))) - ;; Zranění - (when injuries - (insert (propertize "\n── Zranění ──\n" 'face 'bold)) - (dolist (i injuries) - (insert (format " ✖ %s\n" i)))) - ;; Výbava - (insert (propertize "\n── Výbava ──\n" 'face 'bold)) - (dolist (g gear) (insert (format " • %s\n" g))) - (dolist (g extra) (insert (format " + %s\n" g))) + (insert (format "%s | Health %d/4 | Stress %d\n" + (plist-get alien-rpg-character :name) health stress)) + (insert (format "Pozice: %s %s [%s]\n" + (plist-get room :id) (plist-get room :name) + (plist-get room :deck))) + ;; Vybava + (let ((all-gear (append gear extra))) + (insert (format "Výbava: %s\n" (if all-gear (string-join all-gear ", ") "--")))) + ;; Zbrane + (insert "Zbrane: ") (if weapons (progn - (insert (propertize "\n── Zbraně ──\n" 'face 'bold)) - (dolist (w weapons) (insert (format " ⚔ %s\n" w)))) - (insert "\n (žádné zbraně)\n")) - (when armor - (insert (format "\n 🛡 Brnění: %s\n" armor))) - ;; Buddy/Rival - (insert (propertize "\n── Vztahy ──\n" 'face 'bold)) - (insert (format "Buddy: %s\n" (or (plist-get alien-rpg-state :buddy) "(nenastaveno)"))) - (insert (format "Rival: %s\n" (or (plist-get alien-rpg-state :rival) "(nenastaveno)")))) + (insert "\n") + (dolist (w weapons) + (insert (format " %s +%d/DMG%d/%s/%dks/W%s\n" + (plist-get w :name) (plist-get w :bonus) + (plist-get w :damage) (plist-get w :range) + (plist-get w :ammo) (plist-get w :weight))))) + (insert "--\n")) + ;; Brneni + (insert (format "Brnění: %s\n" + (if armor + (format "%s (%d/W%s)" + (plist-get armor :name) + (plist-get armor :rating) + (plist-get armor :weight)) + "--"))) + ;; Zraneni + (when injuries + (insert (format "Zranění: %s\n" (string-join injuries ", ")))) + ;; Stavy + (when conditions + (insert (format "Stavy: %s\n" (string-join conditions ", ")))) + ;; Vztahy + (insert (format "Buddy: %s | Rival: %s\n" + (or (plist-get alien-rpg-state :buddy) "--") + (or (plist-get alien-rpg-state :rival) "--")))) (goto-char (point-min)) (special-mode)) (pop-to-buffer "*Alien RPG*"))) -;; --- Hod kostkou --- - -(defun alien-rpg-roll () - "Hoď na dovednost. Vybere dovednost → automaticky spočítá kostky → hodí." +(defun alien-rpg-skills () + "Dovednosti — seřazené od nejsilnějších." (interactive) - (let* ((stress (plist-get alien-rpg-state :stress)) - (candidates + (let* ((skill-data (mapcar (lambda (sk) (let* ((key (car sk)) + (attr-key (cdr sk)) (name (cdr (assq key alien-rpg-skill-names))) - (total (alien-rpg--skill-total key))) - (cons (format "%s (%d kostek)" name total) key))) + (attr-abbr (cdr (assq attr-key alien-rpg-attr-abbrevs))) + (attr-val (plist-get (plist-get alien-rpg-character :attributes) attr-key)) + (skill-val (plist-get (plist-get alien-rpg-character :skills) key)) + (total (+ attr-val skill-val))) + (list total name attr-abbr attr-val skill-val))) alien-rpg-skill-attributes)) - (choice (completing-read "Hoď na: " candidates nil t)) - (skill-key (cdr (assoc choice candidates))) - (skill-name (cdr (assq skill-key alien-rpg-skill-names))) - (base-dice (alien-rpg--skill-total skill-key)) - (stress-dice stress) - (total-dice (+ base-dice stress-dice)) - ;; Hod - (base-results (cl-loop repeat base-dice collect (1+ (random 6)))) - (stress-results (cl-loop repeat stress-dice collect (1+ (random 6)))) - (successes (+ (cl-count 6 base-results) (cl-count 6 stress-results))) - (facehuggers (cl-count 1 stress-results))) + (sorted (sort skill-data (lambda (a b) (> (car a) (car b)))))) (with-current-buffer (get-buffer-create "*Alien RPG*") (let ((inhibit-read-only t)) (erase-buffer) - (insert (propertize "═══ HOD KOSTKOU ═══\n" 'face 'bold)) - (insert (format "\n%s\n" skill-name)) - (insert (format "Základ: %d kostek | Stress: %d kostek | Celkem: %d\n\n" - base-dice stress-dice total-dice)) - ;; Výsledky - (insert (format "Základní: %s\n" (mapconcat #'number-to-string base-results " "))) - (when (> stress-dice 0) - (insert (format "Stresové: %s\n" (mapconcat #'number-to-string stress-results " ")))) - (insert (propertize (format "\n✦ ÚSPĚCHY: %d\n" successes) 'face 'bold)) - (when (> facehuggers 0) - (insert (propertize (format "☣ FACEHUGGER IKONY: %d — PANIKA!\n" facehuggers) 'face 'error))) - ;; Push info - (when (= successes 0) - (insert "\n→ Můžeš pushovat (přehodit neúspěchy). Stress +1.\n")) - ;; Talent reminder - (when (eq skill-key :observation) - (insert "\n★ TALENT ANALÝZA: Za každý úspěch jedna informace o organismu/předmětu.\n"))) + (dolist (s sorted) + (let ((total (nth 0 s)) + (name (nth 1 s)) + (abbr (nth 2 s)) + (attr (nth 3 s)) + (sk (nth 4 s))) + (if (> sk 0) + (insert (format "%d %-18s (%s %d + %d)\n" total name abbr attr sk)) + (insert (format "%d %-18s (%s %d)\n" total name abbr attr))))) + (insert (format "\nTalent: %s\n" (plist-get alien-rpg-character :talent)))) (goto-char (point-min)) (special-mode)) (pop-to-buffer "*Alien RPG*"))) -;; --- Upravit zdraví/stres --- +;; --- Upravy stavu --- (defun alien-rpg-set-health (n) - "Nastav Health na N." + "Nastav Health." (interactive "nHealth (0-4): ") (plist-put alien-rpg-state :health (max 0 (min 4 n))) (alien-rpg--autosave) (message "Health: %d/4" (plist-get alien-rpg-state :health))) (defun alien-rpg-set-stress (n) - "Nastav Stress na N." + "Nastav Stress." (interactive "nStress (0+): ") (plist-put alien-rpg-state :stress (max 0 n)) (alien-rpg--autosave) - (let ((s (plist-get alien-rpg-state :stress))) - (message "Stress: %d%s" s (if (>= s 7) " ⚠ NEBEZPEČÍ PANIKY!" "")))) + (message "Stress: %d" (plist-get alien-rpg-state :stress))) (defun alien-rpg-add-injury (injury) - "Přidej zranění INJURY." + "Přidej zranění." (interactive "sZranění: ") (plist-put alien-rpg-state :injuries (append (plist-get alien-rpg-state :injuries) (list injury))) (alien-rpg--autosave) - (message "Přidáno zranění: %s" injury)) + (message "Zranění: %s" injury)) (defun alien-rpg-add-gear (item) - "Přidej výbavu ITEM." - (interactive "sNová výbava: ") + "Přidej výbavu." + (interactive "sVýbava: ") (plist-put alien-rpg-state :extra-gear (append (plist-get alien-rpg-state :extra-gear) (list item))) (alien-rpg--autosave) - (message "Přidáno: %s" item)) + (message "Výbava: %s" item)) -(defun alien-rpg-add-weapon (weapon) - "Přidej zbraň WEAPON." - (interactive "sNová zbraň: ") - (plist-put alien-rpg-state :weapons - (append (plist-get alien-rpg-state :weapons) (list weapon))) - (alien-rpg--autosave) - (message "Přidána zbraň: %s" weapon)) +(defun alien-rpg-add-weapon () + "Přidej zbraň se všemi parametry." + (interactive) + (let* ((name (read-string "Zbraň: ")) + (bonus (read-number "Bonus: " 0)) + (damage (read-number "Damage: " 1)) + (range (completing-read "Range: " '("Engaged" "Short" "Medium" "Long" "Extreme") nil t)) + (ammo (read-number "Ammo (0=neomezeno): " 0)) + (weight (read-number "Weight: " 1)) + (weapon (list :name name :bonus bonus :damage damage + :range range :ammo ammo :weight weight))) + (plist-put alien-rpg-state :weapons + (append (plist-get alien-rpg-state :weapons) (list weapon))) + (alien-rpg--autosave) + (message "Zbraň: %s +%d/DMG%d/%s" name bonus damage range))) + +(defun alien-rpg-add-armor () + "Nastav brnění." + (interactive) + (let* ((name (read-string "Brnění: ")) + (rating (read-number "Rating: " 1)) + (weight (read-number "Weight: " 1)) + (armor (list :name name :rating rating :weight weight))) + (plist-put alien-rpg-state :armor armor) + (alien-rpg--autosave) + (message "Brnění: %s (%d/W%d)" name rating weight))) + +(defun alien-rpg-add-condition () + "Přidej stav (Fatigued, Radiation, ...)." + (interactive) + (let ((cond-name (read-string "Stav: "))) + (plist-put alien-rpg-state :conditions + (append (plist-get alien-rpg-state :conditions) (list cond-name))) + (alien-rpg--autosave) + (message "Stav: %s" cond-name))) (defun alien-rpg-set-buddy (name) "Nastav Buddy." @@ -1004,216 +1069,58 @@ (message "Rival: %s" name)) (defun alien-rpg-add-note (note) - "Přidej herní poznámku NOTE." - (interactive "sPoznámka: ") + "Přidej poznámku." + (interactive "sPoznamka: ") (plist-put alien-rpg-state :notes (append (plist-get alien-rpg-state :notes) - (list (format "[%s] %s" - (format-time-string "%H:%M") - note)))) + (list (format "[%s] %s" (format-time-string "%H:%M") note)))) (alien-rpg--autosave) (message "Poznámka uložena.")) -;; --- Klíčová místa (rychlá reference) --- - -(defun alien-rpg-key-locations () - "Zobraz klíčová místa — kam utéct, co najít." - (interactive) - (with-current-buffer (get-buffer-create "*Alien RPG*") - (let ((inhibit-read-only t)) - (erase-buffer) - (insert (propertize "═══ KLÍČOVÁ MÍSTA ═══\n" 'face 'bold)) - (insert " -ZBRANĚ: [F] Zbrojnice (sever-střed paluby F) -LÉKAŘSKÁ POMOC: [C] Ošetřovna a laboratoř (sever-západ paluby C) -HLAVNÍ POČÍTAČ: [B] MU/TH/UR (jih-střed paluby B) -KOMUNIKACE: [GH] DA/UT/UR (komunikační věž mezi G a H) -EVAKUACE LODÍ: [G] Hangár 01 (západ) nebo Hangár 02 (východ) -EVAKUACE KAPSLE: [I] Záchranné moduly -SKRÝŠ/BARIKÁDA: [E] Kajuty (6 kusů, barikádovatelné) -KRYOSPÁNEK: [G] Nouzové kryopody (jihozápad/jihovýchod) -ZNIČENÍ STANICE: [J] Strojovna reaktoru -NÁŘADÍ: [H] Dílny (střed paluby H) -EVA SKAFANDRY: [G] EVA pody (4 kusy, střed) -VĚDECKÁ LAB: [D] Astrofyzikální laboratoř (severozápad) -DOK. PORT: [D] Návštěvnický dokovací port (jih) - -═══ VERTIKÁLNÍ PŘESUNY ═══ - -Centrální šachta: B ↔ C ↔ D ↔ E ↔ F ↔ G ↔ H ↔ I ↔ J (střed každé paluby) -Průchod B→A: Západ paluby B (jediný přístup na A) -Průlezy F↔G: F1↔G1, F2↔G2, F5↔G5, F6↔G6, F7↔G7, F8↔G8 -Průlezy G↔H: G3↔H3, G4↔H4, G7↔H7, G8↔H8, G9↔H9 (kom. věž) -")) - (goto-char (point-min)) - (special-mode)) - (pop-to-buffer "*Alien RPG*")) - -;; --- Dovednosti (rychlý přehled) --- - -(defun alien-rpg-skills () - "Zobraz přehled dovedností seřazený od nejsilnějších." - (interactive) - (let* ((skill-data - (mapcar (lambda (sk) - (let* ((key (car sk)) - (name (cdr (assq key alien-rpg-skill-names))) - (total (alien-rpg--skill-total key))) - (list total name key))) - alien-rpg-skill-attributes)) - (sorted (sort skill-data (lambda (a b) (> (car a) (car b)))))) - (with-current-buffer (get-buffer-create "*Alien RPG*") - (let ((inhibit-read-only t)) - (erase-buffer) - (insert (propertize "═══ DOVEDNOSTI ═══\n\n" 'face 'bold)) - (dolist (s sorted) - (let ((total (nth 0 s)) - (name (nth 1 s))) - (insert (format " %d kostek — %s%s\n" total name - (cond ((>= total 7) " ★★★") - ((>= total 5) " ★★") - (t "")))))) - (insert "\n") - (insert (propertize "Talent: " 'face 'bold)) - (insert (plist-get alien-rpg-character :talent)) - (insert "\n")) - (goto-char (point-min)) - (special-mode)) - (pop-to-buffer "*Alien RPG*"))) - -;; --- Přehled stanice (boční pohled) --- - -(defun alien-rpg-station-overview () - "Zobraz vertikální přehled stanice." - (interactive) - (let ((current-deck (plist-get (alien-rpg--current-room) :deck))) - (with-current-buffer (get-buffer-create "*Alien RPG*") - (let ((inhibit-read-only t)) - (erase-buffer) - (insert (propertize "═══ STANICE — BOČNÍ POHLED ═══\n\n" 'face 'bold)) - (dolist (d alien-rpg-decks) - (let* ((id (plist-get d :id)) - (here (string= id current-deck)) - (line (format "%s%s — %s (%s)\n" - (if here "→ " " ") - id - (plist-get d :name) - (plist-get d :purpose)))) - (insert (if here (propertize line 'face 'bold) line)) - ;; Vzdálenosti - (pcase id - ("A" (insert " ╎ (izolovaná, přístup jen z B)\n")) - ("E" (insert " ║ (střední mezera)\n")) - ("H" (insert " ║\n ║ (VELKÁ mezera)\n ║\n")) - ("I" (insert " ║ (střední mezera)\n")) - (_ (unless (string= id "J") (insert " ║\n"))))))) - (goto-char (point-min)) - (special-mode)) - (pop-to-buffer "*Alien RPG*"))) - -;; --- Najít cestu --- - -(defun alien-rpg-find-path () - "Najdi nejkratší cestu z aktuální místnosti do cíle (BFS)." - (interactive) - (let* ((start (plist-get alien-rpg-state :current-room)) - (candidates (mapcar (lambda (r) - (cons (alien-rpg--room-display-name r) - (plist-get r :id))) - alien-rpg-rooms)) - (choice (completing-read "Najít cestu do: " candidates nil t)) - (goal (cdr (assoc choice candidates))) - ;; BFS - (queue (list (list start))) - (visited (list start)) - (found nil)) - (while (and queue (not found)) - (let* ((path (pop queue)) - (current (car (last path))) - (room (alien-rpg--get-room current)) - (connections (plist-get room :connections))) - (if (string= current goal) - (setq found path) - (dolist (next connections) - (unless (member next visited) - (push next visited) - (setq queue (append queue (list (append path (list next)))))))))) - (with-current-buffer (get-buffer-create "*Alien RPG*") - (let ((inhibit-read-only t)) - (erase-buffer) - (if found - (progn - (insert (propertize "═══ CESTA ═══\n\n" 'face 'bold)) - (insert (format "Kroků: %d\n\n" (1- (length found)))) - (let ((step 0)) - (dolist (room-id found) - (let ((r (alien-rpg--get-room room-id))) - (insert (format "%s%d. [%s] %s\n" - (if (= step 0) "📍 " " ") - step - (plist-get r :deck) - (plist-get r :name))) - (cl-incf step))))) - (insert "Cesta nenalezena!\n"))) - (goto-char (point-min)) - (special-mode)) - (pop-to-buffer "*Alien RPG*"))) - -;; --- Poznámky --- - (defun alien-rpg-show-notes () - "Zobraz všechny herní poznámky." + "Zobraz poznámky." (interactive) (with-current-buffer (get-buffer-create "*Alien RPG*") (let ((inhibit-read-only t) (notes (plist-get alien-rpg-state :notes))) (erase-buffer) - (insert (propertize "═══ POZNÁMKY ═══\n\n" 'face 'bold)) (if notes - (dolist (n notes) - (insert (format " %s\n" n))) - (insert " (žádné poznámky)\n"))) + (dolist (n notes) (insert (format "%s\n" n))) + (insert "(žádné poznámky)\n"))) (goto-char (point-min)) (special-mode)) (pop-to-buffer "*Alien RPG*")) - -;; ══════════════════════════════════════════════════════════════ +;; ==================================================================== ;; DOOM EMACS KEYBINDINGS -;; ══════════════════════════════════════════════════════════════ -;; SPC G = Alien RPG prefix +;; ==================================================================== (with-eval-after-load 'doom-keybinds (map! :leader (:prefix ("G" . "Alien RPG") - ;; Navigace - :desc "Kde jsem" "w" #'alien-rpg-where-am-i - :desc "Přesun" "m" #'alien-rpg-move - :desc "Teleport" "t" #'alien-rpg-teleport - :desc "Najít místnost" "f" #'alien-rpg-find-room - :desc "Najít cestu" "p" #'alien-rpg-find-path - :desc "Přehled paluby" "d" #'alien-rpg-deck-overview - :desc "Přehled stanice" "o" #'alien-rpg-station-overview - :desc "Klíčová místa" "k" #'alien-rpg-key-locations - ;; Postava - :desc "Stav postavy" "s" #'alien-rpg-status - :desc "Dovednosti" "i" #'alien-rpg-skills - :desc "Hodit kostkou" "r" #'alien-rpg-roll - ;; Úpravy stavu - :desc "Nastavit Health" "h" #'alien-rpg-set-health - :desc "Nastavit Stress" "S" #'alien-rpg-set-stress - :desc "Přidat zranění" "j" #'alien-rpg-add-injury - :desc "Přidat výbavu" "g" #'alien-rpg-add-gear - :desc "Přidat zbraň" "W" #'alien-rpg-add-weapon - ;; Sociální - :desc "Nastavit Buddy" "b" #'alien-rpg-set-buddy - :desc "Nastavit Rival" "R" #'alien-rpg-set-rival - ;; Poznámky - :desc "Přidat poznámku" "n" #'alien-rpg-add-note - :desc "Zobrazit poznámky" "N" #'alien-rpg-show-notes - ;; Uložení - :desc "Uložit stav" "q" #'alien-rpg-save-state - :desc "Načíst stav" "Q" #'alien-rpg-load-state))) + :desc "Kde jsem" "w" #'alien-rpg-where-am-i + :desc "Přesun" "m" #'alien-rpg-move + :desc "Teleport" "t" #'alien-rpg-teleport + :desc "Najít místnost" "f" #'alien-rpg-find-room + :desc "Najít cestu" "p" #'alien-rpg-find-path + :desc "Přehled paluby" "d" #'alien-rpg-deck-overview + :desc "Přehled stanice" "o" #'alien-rpg-station-overview + :desc "Klíčová místa" "k" #'alien-rpg-key-locations + :desc "Stav postavy" "s" #'alien-rpg-status + :desc "Dovednosti" "i" #'alien-rpg-skills + :desc "Health" "h" #'alien-rpg-set-health + :desc "Stress" "S" #'alien-rpg-set-stress + :desc "Zraneni" "j" #'alien-rpg-add-injury + :desc "Vybava" "g" #'alien-rpg-add-gear + :desc "Zbran" "W" #'alien-rpg-add-weapon + :desc "Brneni" "a" #'alien-rpg-add-armor + :desc "Stav/condition" "c" #'alien-rpg-add-condition + :desc "Buddy" "b" #'alien-rpg-set-buddy + :desc "Rival" "R" #'alien-rpg-set-rival + :desc "Poznámka" "n" #'alien-rpg-add-note + :desc "Poznamky" "N" #'alien-rpg-show-notes + :desc "Uložit" "q" #'alien-rpg-save-state + :desc "Načíst" "Q" #'alien-rpg-load-state))) (provide 'alien-rpg) ;;; alien-rpg.el ends here diff --git a/gptel-chats/2026-03-24_1234-Copilot-claude-opus-4.6.org b/gptel-chats/2026-03-24_1234-Copilot-claude-opus-4.6.org deleted file mode 100644 index 20c542e..0000000 --- a/gptel-chats/2026-03-24_1234-Copilot-claude-opus-4.6.org +++ /dev/null @@ -1,548 +0,0 @@ -:PROPERTIES: -:GPTEL_MODEL: claude-opus-4.6 -:GPTEL_BACKEND: Copilot -:GPTEL_SYSTEM: You are a large language model living in Emacs and a helpful assistant. Respond concisely. -:GPTEL_TOOLS: Bash Eval WebSearch WebFetch YouTube Diagnostics Mkdir Edit Insert Write Glob Read Grep TodoWrite Skill Agent elisp_eval symbol_exists load_paths features manual_nodes library_source variable_value function_documentation variable_documentation function_completions command_completions variable_completions simulate_error coerce_nil all_arg_types async_tool gptel-got-tool--list-buffers gptel-got--dir gptel-got--open-file-inactive gptel-got--describe-variable gptel-got--describe-function gptel-got--org-extract-tags gptel-got--org-extract-headings gptel-got--org-ql-select-date gptel-got--org-agenda-seek gptel-got--org-ql-select-headings gptel-got--org-ql-select-headings-rifle gptel-got--org-ql-select-tags-local gptel-got--org-ql-select-tags-local-count gptel-got--org-ql-select-tags gptel-got--org-ql-select-rifle variable_source function_source manual_node_contents symbol_manual_section manual_names create_file create_directory view_buffer view_file edit_buffer edit_file glob replace_buffer replace_file grep ls buffer_search list_buffers bash eval_elisp -:GPTEL_NUM_MESSAGES_TO_SEND: 40 -:GPTEL_BOUNDS: ((tool (3215 4893 "tooluse_VyIksyDI5j1iQ1OUiskfPs") (5087 7931 "tooluse_F8jOGTSXIvHYgjE7WDf901") (8053 12275 "tooluse_aHhagOSuytDaSNMS9MupGX")) (response (4905 5022) (7943 7988) (12287 12823))) -:END: -#+title: Compacted Chat (2026-03-24 12:34) - -** Summary of previous conversation -## Shrnutí konverzace - -### Projekt -**~/alienrpg/** — přístupný herní systém Alien RPG pro nevidomého hráče v Doom Emacs. Postava: prof. Héctor Navarre (biochemik, 74 let). - -### Hlavní výstupy -- **alien-rpg.el** (~1200 řádků): kompletní Elisp herní engine — 129 místností, 10 palub (A–J), BFS pathfinding, hod kostkou, správa postavy -- **10 org souborů palub** (A–J) + paluba-GH.org: referenční textové přepisy map z PDF -- **stanice.org, workflow.org, README.org, herni_karta.org**: podpora/dokumentace - -### Rozhodnutí -- **Prefix SPC G** (ne SPC a — to je obsazené embark-act) -- **Org soubory = referenční studijní materiál**, alien-rpg.el = jediný nástroj během hry -- **Dveře**: vyčištěny falešné automatické detekce červených hran z PDF; sekce v org souborech přepsány na obecná pravidla -- **Pixelové souřadnice** odstraněny všude, nahrazeny textovými polohami (sever, jih-západ…) - -### Poslední změny (právě dokončené) -1. **SPC a → SPC G** opraveno ve workflow.org (43×), README.org (13×), alien-rpg.el komentáři -2. **Autosave stavu**: `alien-rpg-state-file` má výchozí cestu `~/alienrpg/alien-rpg-save.el`; autosave se volá po každém přesunu/teleportu/změně health/stress/zranění/výbavy/zbraní/buddy/rival/poznámky; autoload při `(load "alien-rpg")` -3. **Smazán Oops.rej** -4. **Vyčištěna poslední stará reference** — „tlusté červené čáry" v palubě B, falešná tabulka ~83 dveří v stanice.org - -### Stav -- Finální audit prošel: žádné zbylé SPC a, pixelové souřadnice, falešné počty dveří -- Engine se úspěšně načítá (`load-file` vrací t) -- **Pending**: uživatel chce testovat sám; žádné explicitní další úkoly - -** Continued conversation - - -(:name "edit_file" :args (:file "~/alienrpg/alien-rpg.el" :new_string " (target-id (cdr (assoc choice candidates)))) - (plist-put alien-rpg-state :current-room target-id) - (alien-rpg--autosave) - (alien-rpg-where-am-i))) - -;; --- Teleport (GM řekne \"jsi na palubě X\") --- - -(defun alien-rpg-teleport () - \"Přesuň se kamkoliv na stanici. Pro případy kdy GM řekne novou pozici.\" - (interactive) - (let* ((candidates (mapcar (lambda (r) - (cons (alien-rpg--room-display-name r) - (plist-get r :id))) - alien-rpg-rooms)) - (choice (completing-read \"Teleport na: \" candidates nil t)) - (target-id (cdr (assoc choice candidates)))) - (plist-put alien-rpg-state :current-room target-id) - (alien-rpg--autosave) - (alien-rpg-where-am-i)))" :old_string " (target-id (cdr (assoc choice candidates)))) - (plist-put alien-rpg-state :current-room target-id) - (alien-rpg-where-am-i))) - -;; --- Teleport (GM řekne \"jsi na palubě X\") --- - -(defun alien-rpg-teleport () - \"Přesuň se kamkoliv na stanici. Pro případy kdy GM řekne novou pozici.\" - (interactive) - (let* ((candidates (mapcar (lambda (r) - (cons (alien-rpg--room-display-name r) - (plist-get r :id))) - alien-rpg-rooms)) - (choice (completing-read \"Teleport na: \" candidates nil t)) - (target-id (cdr (assoc choice candidates)))) - (plist-put alien-rpg-state :current-room target-id) - (alien-rpg-where-am-i)))")) - -Successfully edited file /Users/martin/alienrpg/alien-rpg.el -#+end_tool -Teď přidám autosave i do všech funkcí co mění stav (health, stress, zranění, výbava, zbraně, buddy, rival, poznámky): - -#+begin_tool (view_file :file "~/alienrpg/alien-rpg.el" :l ...) -(:name "view_file" :args (:file "~/alienrpg/alien-rpg.el" :limit 80 :offset 940)) - - ;; Push info - (when (= successes 0) - (insert "\n→ Můžeš pushovat (přehodit neúspěchy). Stress +1.\n")) - ;; Talent reminder - (when (eq skill-key :observation) - (insert "\n★ TALENT ANALÝZA: Za každý úspěch jedna informace o organismu/předmětu.\n"))) - (goto-char (point-min)) - (special-mode)) - (pop-to-buffer "*Alien RPG*"))) - -;; --- Upravit zdraví/stres --- - -(defun alien-rpg-set-health (n) - "Nastav Health na N." - (interactive "nHealth (0-4): ") - (plist-put alien-rpg-state :health (max 0 (min 4 n))) - (message "Health: %d/4" (plist-get alien-rpg-state :health))) - -(defun alien-rpg-set-stress (n) - "Nastav Stress na N." - (interactive "nStress (0+): ") - (plist-put alien-rpg-state :stress (max 0 n)) - (let ((s (plist-get alien-rpg-state :stress))) - (message "Stress: %d%s" s (if (>= s 7) " ⚠ NEBEZPEČÍ PANIKY!" "")))) - -(defun alien-rpg-add-injury (injury) - "Přidej zranění INJURY." - (interactive "sZranění: ") - (plist-put alien-rpg-state :injuries - (append (plist-get alien-rpg-state :injuries) (list injury))) - (message "Přidáno zranění: %s" injury)) - -(defun alien-rpg-add-gear (item) - "Přidej výbavu ITEM." - (interactive "sNová výbava: ") - (plist-put alien-rpg-state :extra-gear - (append (plist-get alien-rpg-state :extra-gear) (list item))) - (message "Přidáno: %s" item)) - -(defun alien-rpg-add-weapon (weapon) - "Přidej zbraň WEAPON." - (interactive "sNová zbraň: ") - (plist-put alien-rpg-state :weapons - (append (plist-get alien-rpg-state :weapons) (list weapon))) - (message "Přidána zbraň: %s" weapon)) - -(defun alien-rpg-set-buddy (name) - "Nastav Buddy." - (interactive "sBuddy: ") - (plist-put alien-rpg-state :buddy name) - (message "Buddy: %s" name)) - -(defun alien-rpg-set-rival (name) - "Nastav Rivala." - (interactive "sRival: ") - (plist-put alien-rpg-state :rival name) - (message "Rival: %s" name)) - -(defun alien-rpg-add-note (note) - "Přidej herní poznámku NOTE." - (interactive "sPoznámka: ") - (plist-put alien-rpg-state :notes - (append (plist-get alien-rpg-state :notes) - (list (format "[%s] %s" - (format-time-string "%H:%M") - note)))) - (message "Poznámka uložena.")) - -;; --- Klíčová místa (rychlá reference) --- - -(defun alien-rpg-key-locations () - "Zobraz klíčová místa — kam utéct, co najít." - (interactive) - (with-current-buffer (get-buffer-create "*Alien RPG*") - (let ((inhibit-read-only t)) - (erase-buffer) - (insert (propertize "═══ KLÍČOVÁ MÍSTA ═══\n" 'face 'bold)) - (insert " -ZBRANĚ: [F] Zbrojnice (sever-střed paluby F) -LÉKAŘSKÁ POMOC: [C] Ošetřovna a laboratoř (sever-západ paluby C) -#+end_tool -Přidám autosave do všech funkcí co mění stav: - -#+begin_tool (edit_file :file "~/alienrpg/alien-rpg.el" :n ...) -(:name "edit_file" :args (:file "~/alienrpg/alien-rpg.el" :new_string "(defun alien-rpg-set-health (n) - \"Nastav Health na N.\" - (interactive \"nHealth (0-4): \") - (plist-put alien-rpg-state :health (max 0 (min 4 n))) - (alien-rpg--autosave) - (message \"Health: %d/4\" (plist-get alien-rpg-state :health))) - -(defun alien-rpg-set-stress (n) - \"Nastav Stress na N.\" - (interactive \"nStress (0+): \") - (plist-put alien-rpg-state :stress (max 0 n)) - (alien-rpg--autosave) - (let ((s (plist-get alien-rpg-state :stress))) - (message \"Stress: %d%s\" s (if (>= s 7) \" ⚠ NEBEZPEČÍ PANIKY!\" \"\")))) - -(defun alien-rpg-add-injury (injury) - \"Přidej zranění INJURY.\" - (interactive \"sZranění: \") - (plist-put alien-rpg-state :injuries - (append (plist-get alien-rpg-state :injuries) (list injury))) - (alien-rpg--autosave) - (message \"Přidáno zranění: %s\" injury)) - -(defun alien-rpg-add-gear (item) - \"Přidej výbavu ITEM.\" - (interactive \"sNová výbava: \") - (plist-put alien-rpg-state :extra-gear - (append (plist-get alien-rpg-state :extra-gear) (list item))) - (alien-rpg--autosave) - (message \"Přidáno: %s\" item)) - -(defun alien-rpg-add-weapon (weapon) - \"Přidej zbraň WEAPON.\" - (interactive \"sNová zbraň: \") - (plist-put alien-rpg-state :weapons - (append (plist-get alien-rpg-state :weapons) (list weapon))) - (alien-rpg--autosave) - (message \"Přidána zbraň: %s\" weapon)) - -(defun alien-rpg-set-buddy (name) - \"Nastav Buddy.\" - (interactive \"sBuddy: \") - (plist-put alien-rpg-state :buddy name) - (alien-rpg--autosave) - (message \"Buddy: %s\" name)) - -(defun alien-rpg-set-rival (name) - \"Nastav Rivala.\" - (interactive \"sRival: \") - (plist-put alien-rpg-state :rival name) - (alien-rpg--autosave) - (message \"Rival: %s\" name)) - -(defun alien-rpg-add-note (note) - \"Přidej herní poznámku NOTE.\" - (interactive \"sPoznámka: \") - (plist-put alien-rpg-state :notes - (append (plist-get alien-rpg-state :notes) - (list (format \"[%s] %s\" - (format-time-string \"%H:%M\") - note)))) - (alien-rpg--autosave) - (message \"Poznámka uložena.\")" :old_string "(defun alien-rpg-set-health (n) - \"Nastav Health na N.\" - (interactive \"nHealth (0-4): \") - (plist-put alien-rpg-state :health (max 0 (min 4 n))) - (message \"Health: %d/4\" (plist-get alien-rpg-state :health))) - -(defun alien-rpg-set-stress (n) - \"Nastav Stress na N.\" - (interactive \"nStress (0+): \") - (plist-put alien-rpg-state :stress (max 0 n)) - (let ((s (plist-get alien-rpg-state :stress))) - (message \"Stress: %d%s\" s (if (>= s 7) \" ⚠ NEBEZPEČÍ PANIKY!\" \"\")))) - -(defun alien-rpg-add-injury (injury) - \"Přidej zranění INJURY.\" - (interactive \"sZranění: \") - (plist-put alien-rpg-state :injuries - (append (plist-get alien-rpg-state :injuries) (list injury))) - (message \"Přidáno zranění: %s\" injury)) - -(defun alien-rpg-add-gear (item) - \"Přidej výbavu ITEM.\" - (interactive \"sNová výbava: \") - (plist-put alien-rpg-state :extra-gear - (append (plist-get alien-rpg-state :extra-gear) (list item))) - (message \"Přidáno: %s\" item)) - -(defun alien-rpg-add-weapon (weapon) - \"Přidej zbraň WEAPON.\" - (interactive \"sNová zbraň: \") - (plist-put alien-rpg-state :weapons - (append (plist-get alien-rpg-state :weapons) (list weapon))) - (message \"Přidána zbraň: %s\" weapon)) - -(defun alien-rpg-set-buddy (name) - \"Nastav Buddy.\" - (interactive \"sBuddy: \") - (plist-put alien-rpg-state :buddy name) - (message \"Buddy: %s\" name)) - -(defun alien-rpg-set-rival (name) - \"Nastav Rivala.\" - (interactive \"sRival: \") - (plist-put alien-rpg-state :rival name) - (message \"Rival: %s\" name)) - -(defun alien-rpg-add-note (note) - \"Přidej herní poznámku NOTE.\" - (interactive \"sPoznámka: \") - (plist-put alien-rpg-state :notes - (append (plist-get alien-rpg-state :notes) - (list (format \"[%s] %s\" - (format-time-string \"%H:%M\") - note)))) - (message \"Poznámka uložena.\")")) - -Successfully edited file /Users/martin/alienrpg/alien-rpg.el -#+end_tool -Hotovo. Co se změnilo: - -1. *=alien-rpg-state-file=* teď má výchozí hodnotu =~/alienrpg/alien-rpg-save.el= (ne nil). -2. *Autoload při startu* — když soubor existuje, stav se automaticky načte při =(load "alien-rpg")=. Po restartu Emacsu budeš tam, kde jsi skončil. -3. *Autosave po každé změně* — přesun, teleport, health, stress, zranění, výbava, zbraně, buddy, rival, poznámky — vše automaticky zapíše do =alien-rpg-save.el=. Nemusíš mačkat =SPC G q=. - -=SPC G q= (ruční uložení) a =SPC G Q= (ruční načtení) zůstávají pro případ potřeby. - -*** Mam nekolik problemu s Emacs integraci: -1. nejdulezitejsi - pohyb / presuny nereflektuji skutecny stav mapy, napr dvere, -2. vzdy mi to uaze jen jednu cestu nikoli alternativy, abych se mohl rozhodnout -3. pri pridani nove zbrane nechce vedet jeji atributy, v souladu s referencni herni kartou - -Potrebuji, aby hra byla plne accessible a vse sedelo dohromady. Chapu, ze mas problem s analyzou rastrove mapy, ale pouzij logiku, pokud mas problem s analyzou, napis si tool, kktery to bude schopen udelat. - -Kdyz neco budes poustet, dej si tam i smysluplny timeout aby ses nezasekl - -Pracuj samostatne. Pokud neco potrebujes upresnit, zeptej se ted. - - - - -Rozumím. Než - začnu, potřebuji upřesnit pár věcí: - -1. *Dveře* — V org sou -borech palub jsou popsané dveře (zamčené, otevřené, poškozené…). Chceš, abych z těchto org souborů extrahoval informace o dveřích a zabudoval je do grafu místností v =alien-rpg.el=? Tj. aby přesun mezi místnostmi respektoval stav dveří (zamčeno = nelze projít bez akce)? - -2. *Alternativní cesty* — Aktuálně =alien-rpg-move= nabídne sousední místnosti a =alien-rpg-navigate= najde jednu BFS cestu. Chceš: - - (a) Aby =move= ukázal *všechny sousední místnosti* s informací o dveřích/překážkách? - - (b) Aby =navigate= ukázal *více alternativních tras* (např. nejkratší + alternativy přes jiné paluby)? - -3. *Zbraně* — Na herní kartě vidím atributy zbraní (BONUS, DAMAGE, RANGE, SPECIAL). Chceš, aby =alien-rpg-add-weapon= se zeptal na tyto atributy a pak je zobrazoval ve statusu postavy? - -4. *Rastrová mapa* — Máš k dispozici PNG/PDF soubory map jednotlivých palub v =~/alienrpg/=? Pokud ano, jak se jmenují? Nebo mám pracovat *čistě z org souborů* (textových přepisů)? - -Odpověz stručně na tyto 4 body a hned se pustím do práce. - -1. nejsem si jist, ze v org jsou presne, protoze vychazely z drivejsi analyzy. Zdroj informaci je hlavne PDF, jak pro mapy, tak pro herni kartu, jsou v reference_pdf adresari, nacti si je. Cil je, aby rozsireni emacsu i org soubory byly zarovnane se skutecnou mapou. -2. chci idealne moznosti pro a) i b) -3. ano -4. ano, pdf jsou v repozitari, musis udelat dukladnou analyzu, klidne iterativni. mapy jsou celkem jednoduche, ale musis porozumet tomu, co nanich je. - - - - -Pojďme na to. Nejprve se podívám na strukturu projektu a PDF soubory. - - -#+begin_tool (TodoWrite :todos [(:content "Analyze project ...) -(:name "TodoWrite" :args (:todos [(:content "Analyze project structure and PDF files" :activeForm "Analyzing project structure and PDF files" :status "in_progress") (:content "Extract map data from PDF maps (rooms, connections, doors)" :activeForm "Extracting map data from PDF maps" :status "pending") (:content "Extract weapon/gear data from character sheet PDF" :activeForm "Extracting weapon/gear data from PDF" :status "pending") (:content "Rebuild room graph with accurate connections and door states" :activeForm "Rebuilding room graph with accurate connections and doors" :status "pending") (:content "Update move system to show all neighbors with door info" :activeForm "Updating move system for full neighbor display" :status "pending") (:content "Update navigate to show multiple alternative routes" :activeForm "Updating navigation for alternative routes" :status "pending") (:content "Update weapon system with full attributes" :activeForm "Updating weapon system with attributes" :status "pending") (:content "Align org files with corrected map data" :activeForm "Aligning org files with corrected data" :status "pending") (:content "Test and verify everything loads correctly" :activeForm "Testing and verifying" :status "pending")])) - -t -#+end_tool -#+begin_tool (ls :path "~/alienrpg") -(:name "ls" :args (:path "~/alienrpg")) - -. -.. -.DS_Store -.git -README.org -alien-rpg-save.el -alien-rpg.el -gptel-chats -herni_karta.org -paluby -reference_pdf -stanice.org -workflow.org -#+end_tool -#+begin_tool (ls :path "~/alienrpg/reference_pdf") -(:name "ls" :args (:path "~/alienrpg/reference_pdf")) - -. -.. -A_A2.pdf -B_A2.pdf -C_A2.pdf -D_A2.pdf -E_A2.pdf -F_A1.pdf -G+H_A2.pdf -G_A1.pdf -H_A1.pdf -I_A2.pdf -J_A2.pdf -bocni_pohled_A3.pdf -#+end_tool -#+begin_tool (ls :path "~/alienrpg/paluby") -(:name "ls" :args (:path "~/alienrpg/paluby")) - -. -.. -paluba-A.org -paluba-B.org -paluba-C.org -paluba-D.org -paluba-E.org -paluba-F.org -paluba-G.org -paluba-GH.org -paluba-H.org -paluba-I.org -paluba-J.org -#+end_tool -#+begin_tool (view_file :file "~/alienrpg/herni_karta.org") -(:name "view_file" :args (:file "~/alienrpg/herni_karta.org")) - -,#+TITLE: Herní karta — prof. Héctor Navarre -,#+STARTUP: overview - -,* Postava - -- Jméno: prof. Héctor Navarre, Ph.D. -- Kariéra: biochemický inženýr -- Věk: 74 let -- Popis: Metodický a systematický vědec. Tichý, trpělivý pragmatik, - který čeká na výsledky testů, než vyvodí závěry. Většinu kariéry - strávil v laboratoři — toto je jeho první práce v terénu. - -,* Atributy - -| Atribut | Hodnota | -|----------+---------| -| Strength | 3 | -| Agility | 4 | -| Wits | 3 | -| Empathy | 4 | - -,* Dovednosti - -,** Strength (základ 3) - -| Dovednost | Hodnota | Celkem (atribut + dovednost) | -|-----------------+---------+------------------------------| -| Close Combat | 2 | 5 | -| Heavy Machinery | 2 | 5 | -| Stamina | 0 | 3 | - -,** Agility (základ 4) - -| Dovednost | Hodnota | Celkem | -|---------------+---------+--------| -| Mobility | 0 | 4 | -| Piloting | 0 | 4 | -| Ranged Combat | 3 | 7 | - -,** Wits (základ 3) - -| Dovednost | Hodnota | Celkem | -|-------------+---------+--------| -| Comtech | 0 | 3 | -| Observation | 2 | 5 | -| Survival | 0 | 3 | - -,** Empathy (základ 4) - -| Dovednost | Hodnota | Celkem | -|--------------+---------+--------| -| Command | 0 | 4 | -| Manipulation | 3 | 7 | -| Medical Aid | 0 | 4 | - -,* Talent - -,** Analýza -Hod na OBSERVATION — za každý úspěch získáš informaci -o mimozemském organismu nebo předmětu. - -,* Zdraví a stres - -,** Stav - -- Health: 4 -- Resolve: 4 -- Stress Level: 0 - -,** Stavy (zaškrtni při poškození) - -- [ ] Fatigued (vyčerpaný) -- [ ] Radiation (ozáření) - -,** Panic tabulka (referenční) - -| Stress | Reakce (lichá) | Reakce (sudá) | -|--------+-----------------+----------------| -| 7 | Jumpy | Freeze | -| 8 | Tunnel Vision | Seek Cover | -| 9 | Aggravated | Scream | -| 10 | Shakes | Flee | -| 11 | Frantic | Frenzy | -| 12 | Deflated | Catatonic | -| 13-14 | Paranoid | Hesitant | - -,* Výbava - -,** Gear - -1. Svítilna -2. CBRN detektor (viry, toxiny, radiace) -3. Lokátor PDT - -,** Signature item - -Karta (blíže neurčeno) - -,** Zbraně - -| # | Zbraň | Modifier | Damage | Range | Ammo | Weight | -|---+-------+----------+--------+-------+------+--------| -| | | | | | | | - -(Zatím žádné zbraně — doplnit během hry.) - -,** Brnění - -| Brnění | Level | Weight | -|--------+-------+--------| -| | | | - -(Zatím žádné brnění.) - -,* Vztahy - -- Buddy: (doplnit před hrou) -- Rival: (doplnit před hrou) - -,* Tajná agenda - -(Doplnit — GM ti ji sdělí zvlášť, nebo ji obdržíš na začátku hry.) - -,* Body - -- Experience Points: 0 -- Story Points: 0 -- Cash: 0 - -,* Critical Injuries a Mental Trauma - -(Zaznamenávej sem zranění a traumata během hry.) - -,* Záznam ze hry - -,** Stav během sezení - -Aktualizuj si zde hodnoty, které se mění: - -- Aktuální Health: 4 -- Aktuální Stress: 0 -- Aktuální poloha: (paluba a místnost) -- Munice: — -- Přidaná výbava: — - -,** Poznámky - -(Volné poznámky z průběhu hry.) - -#+end_tool -Now let me analyze the PDFs and current alien-rpg.el. Let me start by examining the PDFs and current room definitions: diff --git a/paluby/paluba-B.org b/paluby/paluba-B.org index 3a55ae5..0e02862 100644 --- a/paluby/paluba-B.org +++ b/paluby/paluba-B.org @@ -43,6 +43,7 @@ Paluba B je velitelská paluba stanice. Rozložení místností na mapě | MU/TH/UR | Jih-střed | Hlavní počítač stanice | | Kuchyňka | Jihovýchod | | | Sklad | Jihovýchod (jižněji)| | +| Hlavní chodba | Střed | Centrální koridor paluby | | Centrální šachta | Střed | Přístup na paluby C–J | * Dveře a průchody diff --git a/paluby/paluba-C.org b/paluby/paluba-C.org index ff31bef..e65a11c 100644 --- a/paluby/paluba-C.org +++ b/paluby/paluba-C.org @@ -31,9 +31,8 @@ Rozložení (mapa na výšku): | Místnost | Poloha na palubě | Poznámka | |----------------------------+------------------+------------------------------| | Společenská místnost | Sever-střed | Velká místnost pro odpočinek | -| Sauna | Severovýchod | Označena "-SAUNA" | -| Sprchy (sev.) | Severovýchod | Označena "-SPRCHY" | -| WC | Severovýchod | | +| Sauna a sprchy | Severovýchod | Označena "-SAUNA -SPRCHY" | +| WC | Východ | Samostatná místnost na mapě | | Ošetřovna | Sever-západ | Označena "-OŠETŘOVNA" | | Laboratoř | Sever-západ | Označena "-LABORATOŘ" | | Zotavovací místnost | Sever-východ | Pro rekonvalescenci | @@ -47,9 +46,9 @@ Rozložení (mapa na výšku): * Poznámky k rozložení -Ošetřovna a laboratoř jsou na stejném místě (zřejmě sdílený prostor -nebo dvě části jedné místnosti, obě označeny pomlčkou). -Sauna a sprchy jsou podobně ve společné zóně. +Ošetřovna a laboratoř jsou na stejném místě (sdílený prostor, +obě označeny pomlčkou). Sauna a sprchy jsou ve společné zóně. +WC je samostatná místnost východně od společenské místnosti. Arboretum je velký prostor v jižní třetině paluby — živé rostliny, stromy. Tři hydroponické zahrady dole produkují potraviny. diff --git a/paluby/paluba-F.org b/paluby/paluba-F.org index d582fe6..6d7930c 100644 --- a/paluby/paluba-F.org +++ b/paluby/paluba-F.org @@ -54,7 +54,7 @@ Rozložení: | Sklad (JV horní) | Jih-střed (VH) | | | Sklad (JZ dolní) | Jih-střed (ZD) | | | Sklad (JV dolní) | Jih-střed (VD) | | -| Centrální šachta | Střed | Přístup na paluby B–E, G–J | +| Centrální šachta | Sever (vrch paluby)| Na vrchu paluby, chodba ke Zbrojnici | * Průlezy na této palubě diff --git a/paluby/paluba-G.org b/paluby/paluba-G.org index f040b33..30d7d19 100644 --- a/paluby/paluba-G.org +++ b/paluby/paluba-G.org @@ -64,7 +64,7 @@ Rozložení: | G6 | Střed-východ | Nahoru na F6 | | G7 | Jihozápad (jižněji)| Dolů na H7 | | G8 | Jihovýchod (jižněji)|Dolů na H8 | -| G9 | Komunikační věž | Dolů na H9 | +| G9 | Sever (Nouz. shrom.)| Na H9 přes Nouzové shromaždiště | * Dveře diff --git a/stanice.org b/stanice.org index 22e2a12..7b99146 100644 --- a/stanice.org +++ b/stanice.org @@ -3,7 +3,7 @@ * Typ stanice -Jedná se o velkou vesmírnou stanici s vertikálním uspořádáním. +USCSS CETORHINA — velká vesmírná stanice s vertikálním uspořádáním. Stanice má 10 palub označených písmeny A (nejvýše) až J (nejníže). * Boční pohled (vertikální řez) diff --git a/workflow.org b/workflow.org index f5c8559..2958365 100644 --- a/workflow.org +++ b/workflow.org @@ -36,13 +36,12 @@ budou dostupné všechny příkazy pod =SPC G=. | =SPC G o= | Přehled stanice | Vertikální boční pohled (A nahoře, J dole) | | =SPC G k= | Klíčová místa | Kam pro zbraně, léky, únik, počítač | -** Postava a kostky +** Postava | Klávesa | Příkaz | Co udělá | |----------+---------------------+----------------------------------------------| | =SPC G s= | Stav postavy | Health, Stress, výbava, pozice, zranění | -| =SPC G i= | Dovednosti | Seřazené od nejsilnějších, s počtem kostek | -| =SPC G r= | Hodit kostkou | Vybere dovednost → hodí → úspěchy + panika | +| =SPC G i= | Dovednosti | Seřazené od nejsilnějších | ** Úprava stavu během hry @@ -52,7 +51,9 @@ budou dostupné všechny příkazy pod =SPC G=. | =SPC G S= | Nastavit Stress | Zadej číslo 0+ | | =SPC G j= | Přidat zranění | Textový popis zranění | | =SPC G g= | Přidat výbavu | Nový předmět | -| =SPC G W= | Přidat zbraň | Nová zbraň | +| =SPC G W= | Přidat zbraň | Zbraň se všemi parametry | +| =SPC G a= | Přidat brnění | Brnění s ratingem a váhou | +| =SPC G c= | Přidat stav | Condition (Fatigued, Radiation, ...) | | =SPC G b= | Nastavit Buddy | Jméno spoluhráče | | =SPC G R= | Nastavit Rival | Jméno rivala | @@ -87,10 +88,10 @@ Nemusíš znát vše nazpaměť. Zaměř se na: ** 3. Nastudovat svou postavu -=SPC G i= (dovednosti) a =SPC G s= (stav). Tvé silné stránky: -- Ranged Combat: 7 kostek (střelba) -- Manipulation: 7 kostek (přesvědčování) -- Observation: 5 kostek + talent Analýza +=SPC G i= (dovednosti) a =SPC G s= (stav). Silné stránky: +- Ranged Combat: 7 (střelba) +- Manipulation: 7 (přesvědčování) +- Observation: 5 + talent Analýza ** 4. Doplnit Buddy a Rivala @@ -117,11 +118,6 @@ Před začátkem hry: =SPC G b= a =SPC G R=. 1. =SPC G p= → najdi cestu do bezpečí (vybereš cíl, engine najde cestu) 2. =SPC G k= → klíčová místa (zbrojnice, hangáry, kapsle) -** Když GM řekne "hoď si na X" - -1. =SPC G r= → vyber dovednost → automatický hod -2. Výsledek zobrazí úspěchy a paniku okamžitě - ** Na konci sezení =SPC G q= → uloží vše (pozice, health, stress, výbava, poznámky)