https://git.spwbk.site/swatson/clwars/raw/master/structs.lisp
___________________________________
;; 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)
   (player-ship-obj
    :initarg :player-ship-obj
    :accessor player-ship-obj
    :initform NIL)
   (enemy-ships
    :initarg :enemy-ships
    :accessor enemy-ships
    :initform NIL)))

(defclass 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
    :initform NIL)
   (inventory
    :initarg :inventory
    :accessor inventory
    :initform (make-instance 'player-inventory))))

(defclass ai-ship (ship)
  ((name
    :initarg :name
    :accessor name
    :initform NIL)
   (ai-type
   :initarg :ai-type
   :accessor ai-type
   :initform NIL)))

(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)))

;;; 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)))

(defclass crew-buff ()
  ((name
    :initarg :name
    :accessor name)
   (buff-type
    :initarg :buff-type
    :accessor buff-type
    :initform NIL)
   (buff-value
    :initarg :buff-value
    :accessor buff-value
    :initform NIL)))

(defclass weapon ()
  ((name
    :initarg :name
    :accessor name)
   (shield-dmg
    :initarg :shield-dmg
    :accessor shield-dmg)
   (hull-dmg
    :initarg :hull-dmg
    :accessor hull-dmg)
   (ammo-cost
    :initarg :ammo-cost
    :accessor ammo-cost)))

(defclass market ()
    ((price-of-petrofuel
      :initarg :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)))