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:
89
alien-rpg.el
89
alien-rpg.el
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user