(defclass player-ship () ((armor-val :initarg :armor-val :accessor armor-val :initform 10) (rep-shield-val :initarg :rep-shield-val :accessor rep-shield-val :initform 10) (warp-drive-power ; 0 off, 1 on :initarg :warp-drive-power :accessor warp-drive-power :initform 1) (reactor-str ; 0 - low power, 1 - full power, 2 - overdrive :initarg :reactor-str :accessor reactor-str :initform 1) (warp-field ; 0 - low power, 1 - full power :initarg :warp-field :accessor warp-field :initform 1) (weapons :initarg :weapons :accessor weapons) (credits :initarg :credits :accessor credits :initform 1000) (crew :initarg :crew :accessor crew) (inventory :initarg :inventory :accessor inventory))) (defclass player-inventory () ((petrofuel :initarg :petrofuel :accessor petrofuel :initform 20) (gruel :initarg :gruel :accessor gruel :initform 20) (spice :initarg :spice :accessor spice :initform 0) (ammo :initarg :ammo :accessor ammo :initform 20) (archeotech :initarg :archeotech :accessor archeotech :initform 0))) (defclass crew () ((sanity-val ; Max 100 :initarg :sanity-val :accessor sanity-val :initform 100) (moral-val :initarg :moral-val :accessor moral-val :initform 100) (crew-members :initarg :crew-members ; List of *uniq-crew-mem* :accessor crew-members))) ;; "Given an object, return the names of it's slots" (defgeneric return-slots (obj)) (defmethod return-slots ((market market)) (map 'list #'closer-mop:slot-definition-name (closer-mop:class-slots (class-of market)))) ;;; Unique crew member that can provide an abstract buff ;;; or nerf to some internal game system (defclass uniq-crew-mem () ((name :initarg :name :accessor name) (buff :initarg :buff :accessor buff :initform NIL))) ;; 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))) (defclass weapon () ((name :initarg :name :accessor name) (shield-dmg :initarg :shield-dmg :accessor sheild-dmg) (hull-dmg :initarg :hull-dmg :accessor hull-dmg) (ammo-cost :initarg :ammo-cost :accessor ammo-cost))) (defclass market () ((price-of-petrofuel :initarg :price-of-petrofuel :accessor price-of-petrofuel :initform 10) (price-of-gruel :initarg :gruel :accessor price-of-gruel :initform 5) (price-of-spice :initarg :spice :accessor price-of-spice :initform 100) (price-of-ammo :initarg :ammo :accessor price-of-ammo :initform 20) (price-of-archeotech :initarg :archeotech :accessor price-of-archeotech :initform 2000))) ;; This gets created when travelling to a ;; new sector (defclass sector () ((market :initarg :market :accessor market) (hazards :initarg :hazards :accessor hazards :initform NIL) (boons :initarg :boons :accessor boons :initform NIL)))