From a43480a93fc58bf07002d9b6108825d6a68e79b3 Mon Sep 17 00:00:00 2001 From: Martin Sukany Date: Wed, 25 Mar 2026 08:56:39 +0100 Subject: [PATCH] Unified inventory commands: one entry per category in dispatch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each category (Zbraně, Výbava, Brnění, Zranění, Podmínky) is now a single command that asks Přidat/Odebrat/Upravit/Munice as needed. Dispatch menu halved from 31 to 26 entries — no more confusion between "Výbava — přidat" and "Výbava — spravovat". Removed SPC G v sub-prefix. Co-Authored-By: Claude Opus 4.6 (1M context) --- alien-rpg.el | 214 +++++++++++++++++++++++++++------------------------ 1 file changed, 115 insertions(+), 99 deletions(-) diff --git a/alien-rpg.el b/alien-rpg.el index 080db55..9e8702c 100644 --- a/alien-rpg.el +++ b/alien-rpg.el @@ -1267,10 +1267,9 @@ Průlezy G<->H: G3<->H3, G4<->H4, G7<->H7, G8<->H8, G9<->H9 (alien-rpg--autosave) (message "Výbava: %s" item)) -(defun alien-rpg-add-weapon () - "Přidej zbraň se všemi parametry." - (interactive) - (let* ((name (read-string "Zbraň: ")) +(defun alien-rpg--add-weapon-interactive () + "Interaktivně přidej novou zbraň." + (let* ((name (read-string "Název zbraně: ")) (modifier (read-number "Modifier: " 0)) (damage (read-number "Damage: " 1)) (range (completing-read "Range: " '("Engaged" "Short" "Medium" "Long" "Extreme") nil t)) @@ -1283,6 +1282,11 @@ Průlezy G<->H: G3<->H3, G4<->H4, G7<->H7, G8<->H8, G9<->H9 (alien-rpg--autosave) (message "Zbraň: %s mod%+d/DMG%d/%s" name modifier damage range))) +(defun alien-rpg-add-weapon () + "Přidej zbraň se všemi parametry." + (interactive) + (alien-rpg--add-weapon-interactive)) + (defun alien-rpg-add-armor () "Nastav brnění." (interactive) @@ -1378,24 +1382,40 @@ Průlezy G<->H: G3<->H3, G4<->H4, G7<->H7, G8<->H8, G9<->H9 ;; SPRAVA INVENTARE ;; ==================================================================== -(defun alien-rpg-manage-gear () - "Spravuj výbavu — odeber předmět." +(defun alien-rpg-gear () + "Výbava — přidat nebo odebrat." (interactive) - (let ((extra (plist-get alien-rpg-state :extra-gear))) - (if (not extra) - (message "(žádná přidaná výbava)") - (let* ((choice (completing-read "Odebrat výbavu: " extra nil t)) + (let* ((extra (plist-get alien-rpg-state :extra-gear)) + (actions (if extra '("Přidat" "Odebrat") '("Přidat"))) + (action (if extra + (completing-read "Výbava: " actions nil t) + "Přidat"))) + (cond + ((string= action "Přidat") + (let ((item (read-string "Nová výbava: "))) + (setq alien-rpg-state (plist-put alien-rpg-state :extra-gear + (append extra (list item)))) + (alien-rpg--autosave) + (message "Výbava: %s" item))) + ((string= action "Odebrat") + (let* ((choice (completing-read "Odebrat: " extra nil t)) (new-list (remove choice extra))) (setq alien-rpg-state (plist-put alien-rpg-state :extra-gear new-list)) (alien-rpg--autosave) - (message "Odebráno: %s" choice))))) + (message "Odebráno: %s" choice)))))) -(defun alien-rpg-manage-weapon () - "Spravuj zbraně — odeber, uprav munici, nebo přepiš." +(defun alien-rpg-weapon () + "Zbraně — přidat, odebrat, upravit munici." (interactive) - (let ((weapons (plist-get alien-rpg-state :weapons))) - (if (not weapons) - (message "(žádné zbraně)") + (let* ((weapons (plist-get alien-rpg-state :weapons)) + (actions (if weapons '("Přidat" "Munice" "Upravit" "Odebrat") '("Přidat"))) + (action (if weapons + (completing-read "Zbraně: " actions nil t) + "Přidat"))) + (cond + ((string= action "Přidat") + (alien-rpg--add-weapon-interactive)) + (t (let* ((names (mapcar (lambda (w) (format "%s mod%+d/DMG%d/%s/%dks" (plist-get w :name) @@ -1404,14 +1424,11 @@ Průlezy G<->H: G3<->H3, G4<->H4, G7<->H7, G8<->H8, G9<->H9 (or (plist-get w :range) "?") (or (plist-get w :ammo) 0))) weapons)) - (choice (completing-read "Zbraň: " names nil t)) + (choice (completing-read "Která zbraň: " names nil t)) (idx (cl-position choice names :test #'string=)) - (weapon (nth idx weapons)) - (action (completing-read - (format "%s: " (plist-get weapon :name)) - '("Munice +/-" "Odebrat" "Upravit") nil t))) + (weapon (nth idx weapons))) (cond - ((string= action "Munice +/-") + ((string= action "Munice") (let* ((current (or (plist-get weapon :ammo) 0)) (delta (read-number (format "Munice [%d] +/-: " current) -1)) (new-ammo (max 0 (+ current delta)))) @@ -1428,7 +1445,7 @@ Průlezy G<->H: G3<->H3, G4<->H4, G7<->H7, G8<->H8, G9<->H9 (alien-rpg--autosave) (message "Odebráno: %s" (plist-get weapon :name))) ((string= action "Upravit") - (let* ((name (read-string "Zbraň: " (plist-get weapon :name))) + (let* ((name (read-string "Název: " (plist-get weapon :name))) (modifier (read-number "Modifier: " (or (plist-get weapon :modifier) 0))) (damage (read-number "Damage: " (or (plist-get weapon :damage) 1))) (range (completing-read "Range: " @@ -1443,63 +1460,79 @@ Průlezy G<->H: G3<->H3, G4<->H4, G7<->H7, G8<->H8, G9<->H9 (plist-put weapon :ammo ammo) (plist-put weapon :weight weight) (alien-rpg--autosave) - (message "Upraveno: %s mod%+d/DMG%d/%s" name modifier damage range)))))))) + (message "Upraveno: %s mod%+d/DMG%d/%s" name modifier damage range))))))))) -(defun alien-rpg-manage-injury () - "Odeber zranění." +(defun alien-rpg-armor () + "Brnění — nasadit nebo odebrat." (interactive) - (let ((injuries (plist-get alien-rpg-state :injuries))) - (if (not injuries) - (message "(žádná zranění)") - (let* ((choice (completing-read "Odebrat zranění: " injuries nil t)) + (let* ((armor (plist-get alien-rpg-state :armor)) + (action (if armor + (completing-read "Brnění: " '("Nasadit nové" "Odebrat") nil t) + "Nasadit nové"))) + (cond + ((string= action "Nasadit nové") + (let* ((name (read-string "Brnění: ")) + (level (read-number "Level: " 1)) + (weight (read-number "Weight: " 1)) + (new-armor (list :name name :level level :weight weight))) + (setq alien-rpg-state (plist-put alien-rpg-state :armor new-armor)) + (alien-rpg--autosave) + (message "Brnění: %s (L%d/W%d)" name level weight))) + ((string= action "Odebrat") + (setq alien-rpg-state (plist-put alien-rpg-state :armor nil)) + (alien-rpg--autosave) + (message "Brnění odebráno."))))) + +(defun alien-rpg-injury () + "Zranění — přidat nebo vyléčit." + (interactive) + (let* ((injuries (plist-get alien-rpg-state :injuries)) + (actions (if injuries '("Přidat" "Vyléčit") '("Přidat"))) + (action (if injuries + (completing-read "Zranění: " actions nil t) + "Přidat"))) + (cond + ((string= action "Přidat") + (let ((injury (read-string "Zranění: "))) + (setq alien-rpg-state (plist-put alien-rpg-state :injuries + (append injuries (list injury)))) + (alien-rpg--autosave) + (message "Zranění: %s" injury))) + ((string= action "Vyléčit") + (let* ((choice (completing-read "Vyléčit: " injuries nil t)) (new-list (remove choice injuries))) (setq alien-rpg-state (plist-put alien-rpg-state :injuries new-list)) (alien-rpg--autosave) - (message "Vyléčeno: %s" choice))))) + (message "Vyléčeno: %s" choice)))))) -(defun alien-rpg-manage-condition () - "Odeber stav/podmínku." +(defun alien-rpg-condition () + "Stav/podmínka — přidat nebo odebrat." (interactive) - (let ((conditions (plist-get alien-rpg-state :conditions))) - (if (not conditions) - (message "(žádné stavy)") - (let* ((choice (completing-read "Odebrat stav: " conditions nil t)) + (let* ((conditions (plist-get alien-rpg-state :conditions)) + (actions (if conditions '("Přidat" "Odebrat") '("Přidat"))) + (action (if conditions + (completing-read "Podmínka: " actions nil t) + "Přidat"))) + (cond + ((string= action "Přidat") + (let ((cond-name (read-string "Stav: "))) + (setq alien-rpg-state (plist-put alien-rpg-state :conditions + (append conditions (list cond-name)))) + (alien-rpg--autosave) + (message "Stav: %s" cond-name))) + ((string= action "Odebrat") + (let* ((choice (completing-read "Odebrat: " conditions nil t)) (new-list (remove choice conditions))) (setq alien-rpg-state (plist-put alien-rpg-state :conditions new-list)) (alien-rpg--autosave) - (message "Odebráno: %s" choice))))) - -(defun alien-rpg-manage-armor () - "Odeber brnění." - (interactive) - (let ((armor (plist-get alien-rpg-state :armor))) - (if (not armor) - (message "(žádné brnění)") - (when (y-or-n-p (format "Odebrat %s? " (plist-get armor :name))) - (setq alien-rpg-state (plist-put alien-rpg-state :armor nil)) - (alien-rpg--autosave) - (message "Brnění odebráno."))))) - -(defun alien-rpg-manage-tiny-items () - "Odeber drobný předmět." - (interactive) - (let ((items (plist-get alien-rpg-state :tiny-items))) - (if (not items) - (message "(žádné drobné předměty)") - (let* ((choice (completing-read "Odebrat: " items nil t)) - (new-list (remove choice items))) - (setq alien-rpg-state (plist-put alien-rpg-state :tiny-items new-list)) - (alien-rpg--autosave) - (message "Odebráno: %s" choice))))) + (message "Odebráno: %s" choice)))))) ;; ==================================================================== ;; DISPATCH, HELP, VIEW MODE ;; ==================================================================== (defvar alien-rpg--dispatch-commands - '(("Brnění — přidat" . alien-rpg-add-armor) - ("Brnění — spravovat" . alien-rpg-manage-armor) - ("Deck přehled" . alien-rpg-deck-overview) + '(("Brnění" . alien-rpg-armor) ("Dovednosti" . alien-rpg-skills) ("Editovat stat" . alien-rpg-set-stat) ("Health +/-" . alien-rpg-set-health) @@ -1510,8 +1543,8 @@ Průlezy G<->H: G3<->H3, G4<->H4, G7<->H7, G8<->H8, G9<->H9 ("Nápověda" . alien-rpg-help) ("Najít cestu" . alien-rpg-find-path) ("Najít místnost" . alien-rpg-find-room) - ("Podmínka — přidat" . alien-rpg-add-condition) - ("Podmínka — odebrat" . alien-rpg-manage-condition) + ("Paluba přehled" . alien-rpg-deck-overview) + ("Podmínka" . alien-rpg-condition) ("Poznámka globální" . alien-rpg-add-note) ("Poznámka k místnosti" . alien-rpg-add-room-note) ("Poznámky" . alien-rpg-show-room-notes) @@ -1522,12 +1555,9 @@ Průlezy G<->H: G3<->H3, G4<->H4, G7<->H7, G8<->H8, G9<->H9 ("Stress +/-" . alien-rpg-set-stress) ("Teleport" . alien-rpg-teleport) ("Uložit stav" . alien-rpg-save-state) - ("Výbava — přidat" . alien-rpg-add-gear) - ("Výbava — spravovat" . alien-rpg-manage-gear) - ("Zbraň — přidat" . alien-rpg-add-weapon) - ("Zbraň — spravovat" . alien-rpg-manage-weapon) - ("Zranění — přidat" . alien-rpg-add-injury) - ("Zranění — odebrat" . alien-rpg-manage-injury)) + ("Výbava" . alien-rpg-gear) + ("Zbraně" . alien-rpg-weapon) + ("Zranění" . alien-rpg-injury)) "Všechny příkazy pro dispatch.") (defun alien-rpg-dispatch () @@ -1563,19 +1593,12 @@ Průlezy G<->H: G3<->H3, G4<->H4, G7<->H7, G8<->H8, G9<->H9 (insert "SPC G S Stress +/-\n") (insert "SPC G r Kostky (dice calc)\n") (insert "SPC G e Editovat stat/skill\n\n") - (insert "--- Inventář přidat ---\n") - (insert "SPC G g Přidat výbavu\n") - (insert "SPC G W Přidat zbraň\n") - (insert "SPC G a Přidat brnění\n") - (insert "SPC G j Přidat zranění\n") - (insert "SPC G c Přidat podmínku\n\n") - (insert "--- Inventář spravovat ---\n") - (insert "SPC G v g Spravovat výbavu\n") - (insert "SPC G v w Spravovat zbraně\n") - (insert "SPC G v a Spravovat brnění\n") - (insert "SPC G v j Spravovat zranění\n") - (insert "SPC G v c Spravovat podmínky\n") - (insert "SPC G v t Spravovat drobné věci\n\n") + (insert "--- Inventář (přidat/odebrat/upravit) ---\n") + (insert "SPC G g Výbava\n") + (insert "SPC G W Zbraně\n") + (insert "SPC G a Brnění\n") + (insert "SPC G j Zranění\n") + (insert "SPC G c Podmínky\n\n") (insert "--- Poznámky ---\n") (insert "SPC G n Poznámka k místnosti\n") (insert "SPC G N Zobrazit poznámky\n") @@ -1636,23 +1659,16 @@ Průlezy G<->H: G3<->H3, G4<->H4, G7<->H7, G8<->H8, G9<->H9 :desc "Stress" "S" #'alien-rpg-set-stress :desc "Kostky" "r" #'alien-rpg-dice :desc "Editovat" "e" #'alien-rpg-set-stat - :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 "Zranění" "j" #'alien-rpg-injury + :desc "Výbava" "g" #'alien-rpg-gear + :desc "Zbraně" "W" #'alien-rpg-weapon + :desc "Brnění" "a" #'alien-rpg-armor + :desc "Podmínky" "c" #'alien-rpg-condition :desc "Pozn. místnost" "n" #'alien-rpg-add-room-note - :desc "Poznamky" "N" #'alien-rpg-show-room-notes + :desc "Poznámky" "N" #'alien-rpg-show-room-notes :desc "Glob. pozn." "x" #'alien-rpg-add-note :desc "Uložit" "q" #'alien-rpg-save-state - :desc "Načíst" "Q" #'alien-rpg-load-state - (:prefix ("v" . "Inventář") - :desc "Výbava" "g" #'alien-rpg-manage-gear - :desc "Zbraně" "w" #'alien-rpg-manage-weapon - :desc "Brnění" "a" #'alien-rpg-manage-armor - :desc "Zranění" "j" #'alien-rpg-manage-injury - :desc "Podmínky" "c" #'alien-rpg-manage-condition - :desc "Drobné věci" "t" #'alien-rpg-manage-tiny-items)))) + :desc "Načíst" "Q" #'alien-rpg-load-state))) (provide 'alien-rpg) ;;; alien-rpg.el ends here