|
@@ -0,0 +1,126 @@
|
|
|
+(defun display-crew (player-ship-obj)
|
|
|
+ (let ((crew-names
|
|
|
+ (loop for member in (crew-members (crew player-ship-obj))
|
|
|
+ collect (progn
|
|
|
+ (if (buff member)
|
|
|
+ (list (name member) (slot-value (buff member) 'buff-type) (slot-value (buff member) 'buff-value))
|
|
|
+ (list (name member) NIL NIL))))))
|
|
|
+
|
|
|
+ (format T "~%CREW DETAILS~%~%")
|
|
|
+ (format-table T
|
|
|
+ (list
|
|
|
+ (list
|
|
|
+ (sanity-val (crew player-ship-obj))
|
|
|
+ (moral-val (crew player-ship-obj)))) :column-label '("Sanity" "Moral"))
|
|
|
+ (format T "~%")
|
|
|
+ (format-table T crew-names :column-label '("Name" "Buff" "Buff Amount"))))
|
|
|
+
|
|
|
+(defun display-inventory (player-ship-obj)
|
|
|
+ (let* ((inventory (inventory player-ship-obj))
|
|
|
+ (inventory-list (loop for slot in (return-slots inventory)
|
|
|
+ collect (list
|
|
|
+ slot (slot-value inventory slot)))))
|
|
|
+ (format T "~%INVENTORY~%")
|
|
|
+ (format-table T inventory-list :column-label '("Resource" "Amount"))))
|
|
|
+
|
|
|
+(defparameter *buff-types*
|
|
|
+ (list 'weapons-expert
|
|
|
+ 'shields-expert
|
|
|
+ 'chef
|
|
|
+ 'machine-enchanter
|
|
|
+ 'warp-shaman
|
|
|
+ 'holy-see))
|
|
|
+
|
|
|
+(defun make-buff (buff-type)
|
|
|
+ "Given a buff-type symbol, return an instance of 'crew-buff
|
|
|
+ that corresponds with the buff-type"
|
|
|
+ (case buff-type
|
|
|
+ (holy-see
|
|
|
+ (make-instance 'crew-buff
|
|
|
+ :name "Holy See" ; Moral cannot go below val while the
|
|
|
+ ; Holy See lives
|
|
|
+ :buff-type buff-type
|
|
|
+ :buff-value (+ 1 (random 50))))
|
|
|
+ (warp-shaman
|
|
|
+ (make-instance 'crew-buff
|
|
|
+ :name "Warp Shaman" ; % change to ignore low power warp shield
|
|
|
+ :buff-type buff-type
|
|
|
+ :buff-value (+ 0.1 (random 0.6))))
|
|
|
+ (machine-enchanter
|
|
|
+ (make-instance 'crew-buff
|
|
|
+ :name "Machine Enchanter" ; Val is % chance to not consume
|
|
|
+ ; ammo when firing weapon
|
|
|
+ :buff-type buff-type
|
|
|
+ :buff-value (+ 0.1 (random 0.6))))
|
|
|
+ (chef
|
|
|
+ (make-instance 'crew-buff
|
|
|
+ :name "Chef" ; Reduce gruel consumption / action by val
|
|
|
+ :buff-type buff-type
|
|
|
+ :buff-value (+ 1 (random 20))))
|
|
|
+ (shields-expert
|
|
|
+ (make-instance 'crew-buff
|
|
|
+ :name "Shields Expert" ; Increases shield str by val
|
|
|
+ :buff-type buff-type
|
|
|
+ :buff-value (+ 1 (random 3))))
|
|
|
+ (weapons-expert
|
|
|
+ (make-instance 'crew-buff
|
|
|
+ :name "Weapons Expert" ; Increases all weapon damage by val
|
|
|
+ :buff-type buff-type
|
|
|
+ :buff-value (+ 1 (random 3))))))
|
|
|
+
|
|
|
+(defun get-random-buff ()
|
|
|
+ "Return a random 'crew-buff object"
|
|
|
+ (make-buff (nth (+ 1 (random (length *buff-types*))) *buff-types*)))
|
|
|
+
|
|
|
+;; Crew name generators
|
|
|
+(defvar *name-prefixes*
|
|
|
+ (list "Precepitor"
|
|
|
+ "Auriga"
|
|
|
+ "Basileus"
|
|
|
+ "Pontiff"
|
|
|
+ "Palatine"
|
|
|
+ "Centurion"
|
|
|
+ "Conjugator"
|
|
|
+ "Principus"
|
|
|
+ "Executor"
|
|
|
+ "Commonus"
|
|
|
+ "Gothicus"
|
|
|
+ "Augusta"
|
|
|
+ "Calligraphus"
|
|
|
+ "Imperator"
|
|
|
+ "Consul"
|
|
|
+ "Signifier"
|
|
|
+ "Tribune"
|
|
|
+ "Praetorian"
|
|
|
+ "Prefect"))
|
|
|
+
|
|
|
+(defvar *name-values*
|
|
|
+ (list "Atticus"
|
|
|
+ "Aurelia"
|
|
|
+ "Cassius"
|
|
|
+ "Maximus"
|
|
|
+ "Aurelius"
|
|
|
+ "Magnus"
|
|
|
+ "Lucius"
|
|
|
+ "Augustus"
|
|
|
+ "Caeser"
|
|
|
+ "Remus"
|
|
|
+ "Julius"
|
|
|
+ "Octavius"
|
|
|
+ "Cato"
|
|
|
+ "Tiberius"
|
|
|
+ "Nero"
|
|
|
+ "Romulus"
|
|
|
+ "Septimus"
|
|
|
+ "Cicero"
|
|
|
+ "Cyprian"
|
|
|
+ "Justus"
|
|
|
+ "Quintus"
|
|
|
+ "Decimus"))
|
|
|
+
|
|
|
+(defun make-crew-mem-name (name-prefixes name-values)
|
|
|
+ "Expects a list of strings to use as prefixes for a name, and a list
|
|
|
+ of possible names"
|
|
|
+ (let ((name (nth (random (length name-values)) name-values))
|
|
|
+ (prefix (nth (random (length name-prefixes)) name-prefixes)))
|
|
|
+ (concatenate 'string prefix " " name)))
|