1220 lines
60 KiB
EmacsLisp
1220 lines
60 KiB
EmacsLisp
;;; 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.
|
||
;;
|
||
;;; Code:
|
||
|
||
(require 'cl-lib)
|
||
|
||
;; ══════════════════════════════════════════════════════════════
|
||
;; DATA: 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.")
|
||
|
||
(: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.")
|
||
|
||
(: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.")
|
||
|
||
(: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ř.")
|
||
|
||
(: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.")
|
||
|
||
(: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.")
|
||
|
||
(: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).")
|
||
|
||
(: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.")
|
||
|
||
(: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í.")
|
||
|
||
(: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.")
|
||
|
||
;; ══════════════════════════════════════════════════════════════
|
||
;; DATA: Místnosti
|
||
;; ══════════════════════════════════════════════════════════════
|
||
|
||
(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"))
|
||
|
||
;; === 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í)"
|
||
:location "Východ" :note ""
|
||
:connections ("B-řídící-středisko" "B-wc-dolní"))
|
||
(:id "B-wc-dolní" :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"))
|
||
(: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 "Jihovýchod" :note ""
|
||
:connections ("B-mu-th-ur" "B-sklad" "B-wc-dolní"))
|
||
(: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"))
|
||
|
||
;; === 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-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."
|
||
:connections ("C-arboretum"))
|
||
(:id "C-hydro-v" :deck "C" :name "Hydroponická zahrada (východ)"
|
||
:location "Jihovýchod" :note "Třetí zahrada"
|
||
: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"))
|
||
|
||
;; === 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-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"
|
||
: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"))
|
||
(: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!"
|
||
: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"
|
||
: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"))
|
||
|
||
;; === 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"
|
||
: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á"
|
||
: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"))
|
||
(:id "E-kajuta-3" :deck "E" :name "Kajuta 3 (levá střední)"
|
||
:location "Západ, řada 2" :note "Barikádovatelná"
|
||
: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á"
|
||
: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á"
|
||
: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á"
|
||
: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"
|
||
: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"))
|
||
(:id "E-wc" :deck "E" :name "WC"
|
||
:location "Západ" :note ""
|
||
:connections ("E-jídelna" "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"))
|
||
|
||
;; === 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-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"))
|
||
(: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"))
|
||
(: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"))
|
||
(: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"))
|
||
(: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"))
|
||
(: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"))
|
||
(: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"))
|
||
(: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"))
|
||
(: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"))
|
||
(: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"))
|
||
|
||
;; === 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-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ů"))
|
||
(: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ů"))
|
||
(: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"))
|
||
(: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"))
|
||
(: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"))
|
||
(: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"))
|
||
|
||
;; === 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"))
|
||
|
||
;; === 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-strojovna-z" :deck "H" :name "Strojovna (Z)"
|
||
:location "Jih-střed-západ" :note ""
|
||
:connections ("H-řídící-centrum" "H-mag-čerpadlo"))
|
||
(: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-střed" :note ""
|
||
:connections ("H-strojovna-z" "H-strojovna-v" "H-tavení"))
|
||
(:id "H-tavení" :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)"
|
||
: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)"
|
||
:location "Jihovýchod" :note ""
|
||
:connections ("H-tavení" "H-energie-v" "H-průlez-H8"))
|
||
(:id "H-energie-z" :deck "H" :name "Energetické sběrné články (Z)"
|
||
:location "Krajní jihozápad" :note "Zásobník energie"
|
||
: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"
|
||
: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"))
|
||
|
||
;; === 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"))
|
||
|
||
;; === 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.")
|
||
|
||
|
||
;; ══════════════════════════════════════════════════════════════
|
||
;; DATA: Postava
|
||
;; ══════════════════════════════════════════════════════════════
|
||
|
||
(defvar alien-rpg-character
|
||
'(:name "prof. Héctor Navarre, Ph.D."
|
||
:career "Biochemický inženýr"
|
||
:age 74
|
||
:attributes (:strength 3 :agility 4 :wits 3 :empathy 4)
|
||
:skills (:close-combat 2 :heavy-machinery 2 :stamina 0
|
||
: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).")
|
||
|
||
(defvar alien-rpg-skill-attributes
|
||
'((:close-combat . :strength) (:heavy-machinery . :strength) (:stamina . :strength)
|
||
(:mobility . :agility) (:piloting . :agility) (:ranged-combat . :agility)
|
||
(:comtech . :wits) (:observation . :wits) (:survival . :wits)
|
||
(:command . :empathy) (:manipulation . :empathy) (:medical-aid . :empathy))
|
||
"Mapování dovedností na atributy.")
|
||
|
||
(defvar alien-rpg-skill-names
|
||
'((:close-combat . "Close Combat") (:heavy-machinery . "Heavy Machinery")
|
||
(:stamina . "Stamina") (:mobility . "Mobility") (:piloting . "Piloting")
|
||
(:ranged-combat . "Ranged Combat") (:comtech . "Comtech")
|
||
(:observation . "Observation") (:survival . "Survival")
|
||
(:command . "Command") (:manipulation . "Manipulation")
|
||
(:medical-aid . "Medical Aid"))
|
||
"Čitelné názvy dovedností.")
|
||
|
||
;; ══════════════════════════════════════════════════════════════
|
||
;; STAV HRY (mění se během sezení)
|
||
;; ══════════════════════════════════════════════════════════════
|
||
|
||
(defvar alien-rpg-state
|
||
'(:health 4
|
||
:stress 0
|
||
:current-room "B-centrální-šachta"
|
||
:weapons ()
|
||
:armor nil
|
||
:extra-gear ()
|
||
:injuries ()
|
||
: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.")
|
||
|
||
(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.")
|
||
|
||
|
||
;; ══════════════════════════════════════════════════════════════
|
||
;; POMOCNÉ FUNKCE
|
||
;; ══════════════════════════════════════════════════════════════
|
||
|
||
(defun alien-rpg--get-room (room-id)
|
||
"Najdi místnost podle ROOM-ID."
|
||
(cl-find-if (lambda (r) (string= (plist-get r :id) room-id))
|
||
alien-rpg-rooms))
|
||
|
||
(defun alien-rpg--get-deck (deck-id)
|
||
"Najdi palubu podle DECK-ID."
|
||
(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--current-room ()
|
||
"Vrať plist aktuální místnosti."
|
||
(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))))
|
||
|
||
(defun alien-rpg--rooms-on-deck (deck-id)
|
||
"Vrať všechny místnosti na palubě DECK-ID."
|
||
(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."
|
||
(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)))
|
||
(attr-val (or (plist-get attrs attr-key) 0))
|
||
(skill-val (or (plist-get skills skill-key) 0)))
|
||
(+ attr-val skill-val)))
|
||
|
||
|
||
;; ══════════════════════════════════════════════════════════════
|
||
;; ULOŽENÍ / NAČTENÍ STAVU
|
||
;; ══════════════════════════════════════════════════════════════
|
||
|
||
(defun alien-rpg-save-state ()
|
||
"Ulož herní stav do souboru."
|
||
(interactive)
|
||
(let ((file (or alien-rpg-state-file
|
||
(expand-file-name "alien-rpg-save.el"
|
||
(file-name-directory
|
||
(or buffer-file-name default-directory))))))
|
||
(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 "(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)))
|
||
|
||
(defun alien-rpg-load-state ()
|
||
"Načti herní stav ze souboru."
|
||
(interactive)
|
||
(let ((file (or alien-rpg-state-file
|
||
(read-file-name "Načíst stav 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))))
|
||
|
||
(defun alien-rpg--autosave ()
|
||
"Automaticky ulož stav (tiše, bez zprávy)."
|
||
(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 "(setq alien-rpg-state\n '")
|
||
(pp alien-rpg-state (current-buffer))
|
||
(insert ")\n"))))
|
||
|
||
;; Automaticky načti uložený stav při startu (pokud existuje)
|
||
(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))
|
||
|
||
|
||
;; ══════════════════════════════════════════════════════════════
|
||
;; INTERAKTIVNÍ PŘÍKAZY
|
||
;; ══════════════════════════════════════════════════════════════
|
||
|
||
;; --- Kde jsem ---
|
||
|
||
(defun alien-rpg-where-am-i ()
|
||
"Zobraz aktuální pozici a okolí. Jeden stisk = kompletní přehled."
|
||
(interactive)
|
||
(let* ((room (alien-rpg--current-room))
|
||
(deck (alien-rpg--get-deck (plist-get room :deck)))
|
||
(connected (alien-rpg--connected-rooms room))
|
||
(same-deck (cl-remove-if-not
|
||
(lambda (r) (string= (plist-get r :deck) (plist-get room :deck)))
|
||
connected))
|
||
(other-deck (cl-remove-if
|
||
(lambda (r) (string= (plist-get r :deck) (plist-get room :deck)))
|
||
connected)))
|
||
(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)))
|
||
(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ě
|
||
(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
|
||
(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))))
|
||
(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í."
|
||
(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)))
|
||
connected))
|
||
(choice (completing-read
|
||
(format "Přesun z [%s] %s → " (plist-get room :deck) (plist-get room :name))
|
||
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."
|
||
(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)))
|
||
|
||
;; --- Najít místnost ---
|
||
|
||
(defun alien-rpg-find-room ()
|
||
"Najdi a zobraz informace o libovolné místnosti."
|
||
(interactive)
|
||
(let* ((candidates (mapcar (lambda (r)
|
||
(cons (alien-rpg--room-display-name r)
|
||
r))
|
||
alien-rpg-rooms))
|
||
(choice (completing-read "Najít 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)))
|
||
(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)))))
|
||
(goto-char (point-min))
|
||
(special-mode))
|
||
(pop-to-buffer "*Alien RPG*")))
|
||
|
||
;; --- Přehled paluby ---
|
||
|
||
(defun alien-rpg-deck-overview ()
|
||
"Zobraz přehled zvolené paluby."
|
||
(interactive)
|
||
(let* ((candidates (mapcar (lambda (d)
|
||
(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))
|
||
(deck-id (cdr (assoc choice candidates)))
|
||
(deck (alien-rpg--get-deck deck-id))
|
||
(rooms (alien-rpg--rooms-on-deck deck-id)))
|
||
(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))
|
||
(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")))
|
||
(goto-char (point-min))
|
||
(special-mode))
|
||
(pop-to-buffer "*Alien RPG*")))
|
||
|
||
;; --- Stav postavy ---
|
||
|
||
(defun alien-rpg-status ()
|
||
"Zobraz aktuální stav postavy. Zdraví, stres, výbava, pozice."
|
||
(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)))
|
||
(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)))
|
||
(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)"))))
|
||
(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í."
|
||
(interactive)
|
||
(let* ((stress (plist-get alien-rpg-state :stress))
|
||
(candidates
|
||
(mapcar (lambda (sk)
|
||
(let* ((key (car sk))
|
||
(name (cdr (assq key alien-rpg-skill-names)))
|
||
(total (alien-rpg--skill-total key)))
|
||
(cons (format "%s (%d kostek)" name total) key)))
|
||
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)))
|
||
(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")))
|
||
(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)))
|
||
(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."))
|
||
|
||
;; --- 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."
|
||
(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")))
|
||
(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)))
|
||
|
||
(provide 'alien-rpg)
|
||
;;; alien-rpg.el ends here
|