Full character card in status, relative stress/health changes
- SPC G s now shows complete character card: name, career, age, attributes, non-zero skills, talent, position, gear, weapons, armor, injuries, conditions, buddy/rival, XP, story points, signature item - SPC G S (stress): now relative — enter -1 to decrease, +2 to increase. Shows delta in message. - SPC G h (health): accepts relative changes too (-1/+1) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
105
alien-rpg.el
105
alien-rpg.el
@@ -1031,33 +1031,60 @@ Průlezy G<->H: G3<->H3, G4<->H4, G7<->H7, G8<->H8, G9<->H9
|
||||
(switch-to-buffer "*Alien RPG*"))
|
||||
|
||||
(defun alien-rpg-status ()
|
||||
"Stav postavy — stručně."
|
||||
"Herní karta — kompletní stav postavy."
|
||||
(interactive)
|
||||
(let* ((room (alien-rpg--current-room))
|
||||
(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))
|
||||
(conditions (plist-get alien-rpg-state :conditions)))
|
||||
(let* ((ch alien-rpg-character)
|
||||
(st alien-rpg-state)
|
||||
(room (alien-rpg--current-room))
|
||||
(attrs (plist-get ch :attributes))
|
||||
(health (plist-get st :health))
|
||||
(stress (plist-get st :stress))
|
||||
(weapons (plist-get st :weapons))
|
||||
(armor (plist-get st :armor))
|
||||
(gear (plist-get ch :gear))
|
||||
(extra (plist-get st :extra-gear))
|
||||
(injuries (plist-get st :injuries))
|
||||
(conditions (plist-get st :conditions)))
|
||||
(with-current-buffer (get-buffer-create "*Alien RPG*")
|
||||
(let ((inhibit-read-only t))
|
||||
(erase-buffer)
|
||||
(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)))
|
||||
;; Hlavicka
|
||||
(insert (format "%s\n" (plist-get ch :name)))
|
||||
(insert (format "%s, %s let\n" (plist-get ch :career) (plist-get ch :age)))
|
||||
;; Atributy
|
||||
(insert (format "Str %s Agi %s Wit %s Emp %s\n"
|
||||
(plist-get attrs :strength) (plist-get attrs :agility)
|
||||
(plist-get attrs :wits) (plist-get attrs :empathy)))
|
||||
;; Health / Stress
|
||||
(insert (format "Health: %d/4 | Stress: %d\n" health stress))
|
||||
;; Dovednosti (jen nenulove)
|
||||
(let ((skills-str
|
||||
(mapconcat
|
||||
(lambda (sk)
|
||||
(let* ((key (car sk))
|
||||
(val (plist-get (plist-get ch :skills) key)))
|
||||
(when (> val 0)
|
||||
(format "%s %d" (cdr (assq key alien-rpg-skill-names)) val))))
|
||||
alien-rpg-skill-attributes "")))
|
||||
(insert (format "Dovednosti: %s\n"
|
||||
(string-join (cl-remove-if #'null
|
||||
(mapcar (lambda (sk)
|
||||
(let* ((key (car sk))
|
||||
(val (plist-get (plist-get ch :skills) key)))
|
||||
(when (> val 0)
|
||||
(format "%s %d" (cdr (assq key alien-rpg-skill-names)) val))))
|
||||
alien-rpg-skill-attributes)) ", "))))
|
||||
;; Talent
|
||||
(insert (format "Talent: %s\n" (plist-get ch :talent)))
|
||||
;; Pozice
|
||||
(insert (format "Pozice: %s [%s]\n" (plist-get room :name) (plist-get room :id)))
|
||||
;; 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 "\n")
|
||||
(insert "Zbraně:\n")
|
||||
(dolist (w weapons)
|
||||
(insert (format " %s +%s/DMG%s/%s/%sks/W%s\n"
|
||||
(plist-get w :name)
|
||||
@@ -1066,7 +1093,7 @@ 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)
|
||||
(or (plist-get w :weight) 0)))))
|
||||
(insert "--\n"))
|
||||
(insert "Zbraně: --\n"))
|
||||
;; Brneni
|
||||
(insert (format "Brnění: %s\n"
|
||||
(if armor
|
||||
@@ -1075,16 +1102,19 @@ Průlezy G<->H: G3<->H3, G4<->H4, G7<->H7, G8<->H8, G9<->H9
|
||||
(or (plist-get armor :rating) 0)
|
||||
(or (plist-get armor :weight) 0))
|
||||
"--")))
|
||||
;; Zraneni
|
||||
(when injuries
|
||||
(insert (format "Zranění: %s\n" (string-join injuries ", "))))
|
||||
;; Stavy
|
||||
(when conditions
|
||||
(insert (format "Stavy: %s\n" (string-join conditions ", "))))
|
||||
;; Zraneni a stavy
|
||||
(insert (format "Zranění: %s\n" (if injuries (string-join injuries ", ") "--")))
|
||||
(insert (format "Stavy: %s\n" (if conditions (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) "--"))))
|
||||
(or (plist-get st :buddy) "--")
|
||||
(or (plist-get st :rival) "--")))
|
||||
;; XP / Story points
|
||||
(insert (format "XP: %s | Story points: %s\n"
|
||||
(or (plist-get st :xp) 0)
|
||||
(or (plist-get st :story-points) 0)))
|
||||
;; Signature item
|
||||
(insert (format "Signature: %s\n" (or (plist-get ch :signature-item) "--"))))
|
||||
(goto-char (point-min))
|
||||
(special-mode))
|
||||
(switch-to-buffer "*Alien RPG*")))
|
||||
@@ -1124,18 +1154,25 @@ Průlezy G<->H: G3<->H3, G4<->H4, G7<->H7, G8<->H8, G9<->H9
|
||||
;; --- Upravy stavu ---
|
||||
|
||||
(defun alien-rpg-set-health (n)
|
||||
"Nastav Health."
|
||||
(interactive "nHealth (0-4): ")
|
||||
(setq alien-rpg-state (plist-put alien-rpg-state :health (max 0 (min 4 n))))
|
||||
"Změň Health (+1/-1 nebo absolutně 0-4)."
|
||||
(interactive "nHealth (+/-N nebo 0-4): ")
|
||||
(let* ((current (plist-get alien-rpg-state :health))
|
||||
(new-val (if (and (>= n -4) (<= n 4) (/= n current)
|
||||
(or (< n 0) (> (abs (- n current)) 1)))
|
||||
(max 0 (min 4 (+ current n)))
|
||||
(max 0 (min 4 n)))))
|
||||
(setq alien-rpg-state (plist-put alien-rpg-state :health new-val))
|
||||
(alien-rpg--autosave)
|
||||
(message "Health: %d/4" (plist-get alien-rpg-state :health)))
|
||||
(message "Health: %d/4 (%s%d)" new-val (if (>= (- new-val current) 0) "+" "") (- new-val current))))
|
||||
|
||||
(defun alien-rpg-set-stress (n)
|
||||
"Nastav Stress."
|
||||
(interactive "nStress (0+): ")
|
||||
(setq alien-rpg-state (plist-put alien-rpg-state :stress (max 0 n)))
|
||||
"Změň Stress (+N/-N relativně, zadej číslo)."
|
||||
(interactive "nStress (+/-N): ")
|
||||
(let* ((current (plist-get alien-rpg-state :stress))
|
||||
(new-val (max 0 (+ current n))))
|
||||
(setq alien-rpg-state (plist-put alien-rpg-state :stress new-val))
|
||||
(alien-rpg--autosave)
|
||||
(message "Stress: %d" (plist-get alien-rpg-state :stress)))
|
||||
(message "Stress: %d (%s%d)" new-val (if (>= n 0) "+" "") n)))
|
||||
|
||||
(defun alien-rpg-add-injury (injury)
|
||||
"Přidej zranění."
|
||||
|
||||
Reference in New Issue
Block a user