Improve accessibility: path as bullet steps, fix status format

- find-path: show each step as bullet point with room names instead
  of raw ID -> ID chains
- find-room: use same rich format as where-am-i (names, desc, deck info)
- status: fix format specifier crash by using %s instead of %d for
  weapon/armor numeric fields that may be float or nil

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-24 15:08:39 +01:00
parent 6b3ad21e45
commit 9ebffa1a43

View File

@@ -936,17 +936,55 @@
(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)))
(my-deck (plist-get room :deck))
(connected (alien-rpg--connected-rooms room))
(same-deck (cl-remove-if-not
(lambda (r) (string= (plist-get r :deck) my-deck))
connected))
(shaft-rooms (cl-remove-if-not
(lambda (r) (string-match-p "centralni-sachta"
(plist-get r :id)))
connected))
(cross-deck (cl-remove-if
(lambda (r) (or (string= (plist-get r :deck) my-deck)
(string-match-p "centralni-sachta"
(plist-get r :id))))
connected)))
(with-current-buffer (get-buffer-create "*Alien RPG*")
(let ((inhibit-read-only t))
(erase-buffer)
(insert (format "%s: %s\n" (plist-get room :id) (plist-get room :name)))
(insert (format "[%s] %s -- %s\n"
(insert (format "%s [%s]\n" (plist-get room :name) (plist-get room :id)))
(insert (format "Paluba %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 "%s\n" (plist-get room :note))))
(insert (format "Propojení: %s\n"
(mapconcat (lambda (r) (plist-get r :id)) connected ", "))))
(when (plist-get room :desc)
(insert (format "%s\n" (plist-get room :desc))))
(when same-deck
(insert (format "Východy: %s\n"
(mapconcat (lambda (r)
(format "%s [%s]"
(plist-get r :name)
(plist-get r :id)))
same-deck ", "))))
(when cross-deck
(insert (format "Průchody: %s\n"
(mapconcat (lambda (r)
(let ((d (alien-rpg--get-deck (plist-get r :deck))))
(format "%s [%s] (paluba %s)"
(plist-get r :name)
(plist-get r :id)
(if d (plist-get d :id) (plist-get r :deck)))))
cross-deck ", "))))
(when shaft-rooms
(let ((deck-ids (cl-remove-duplicates
(mapcar (lambda (r) (plist-get r :deck)) shaft-rooms)
:test #'string=)))
(insert (format "Šachta: %s\n"
(mapconcat (lambda (did)
(let ((d (alien-rpg--get-deck did)))
(if d
(format "%s %s" did (plist-get d :name))
did)))
deck-ids ", "))))))
(goto-char (point-min))
(special-mode))
(pop-to-buffer "*Alien RPG*")))
@@ -955,11 +993,13 @@
"Všechny nejkratší cesty do cíle."
(interactive)
(let* ((start (plist-get alien-rpg-state :current-room))
(start-room (alien-rpg--get-room start))
(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)))
(goal-room (alien-rpg--get-room goal))
(paths (alien-rpg--find-all-shortest-paths start goal)))
(with-current-buffer (get-buffer-create "*Alien RPG*")
(let ((inhibit-read-only t))
@@ -968,16 +1008,22 @@
(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"))))
(plist-get start-room :name)
(plist-get goal-room :name)
dist
(cond ((= dist 1) "") ((< dist 5) "y") (t "ů"))))
(when (> (length paths) 1)
(insert (format " (%d cest)" (length paths))))
(insert "\n")
(insert "\n\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 (format "Cesta %d:\n" i)))
(dolist (step path)
(let ((r (alien-rpg--get-room step)))
(insert (format " - %s [%s]\n"
(if r (plist-get r :name) step)
step))))
(insert "\n")))
(insert "Cesta nenalezena.\n")))
(goto-char (point-min))
@@ -1085,18 +1131,21 @@ Průlezy G<->H: G3<->H3, G4<->H4, G7<->H7, G8<->H8, G9<->H9
(progn
(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 (format " %s +%s/DMG%s/%s/%sks/W%s\n"
(plist-get w :name)
(or (plist-get w :bonus) 0)
(or (plist-get w :damage) 0)
(or (plist-get w :range) "?")
(or (plist-get w :ammo) 0)
(or (plist-get w :weight) 0)))))
(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))
(format "%s (%s/W%s)"
(or (plist-get armor :name) "?")
(or (plist-get armor :rating) 0)
(or (plist-get armor :weight) 0))
"--")))
;; Zraneni
(when injuries