anchor.diff:     (max-spread
       :accessor max-spread
       :initarg :max-spread
  -    :initform 2)))
  +    :initform 2)
  +   (weapon-type
  +    :accessor  weapon-type
  +    :initarg  :weapon-type
  +    :initform :radial)))
  +
  +(defclass spread-weapon (weapon)
  +  ((projectile-class :initform  'bullet)
  +   (projectile-image :initform :bullet)
  +   (projectile-n-directions :initform 16)
  +   (projectile-veloc :initform #c(0 -12))
  +   (projectile-timer :initform 120)
  +   (fire-sound
  +    :initform (make-instance 'sample :name :thopter-gun
  +                             :source (resource "sound/thoptergun.ogg")
  +                             :type :sample))
  +   (cooldown :initform 4)
  +   (firepower :initform nil)
  +   (ammo :initform 1)
  +   (ammo-refill-rate :initform 200)
  +   (ammo-deplete-rate :initform 200)))
   
   (defclass chaingun-weapon (weapon)
     ((projectile-class :initform  'bullet)
  
positive.code: (defmethod update ((missile missile) event)
    (with-slots (parent offset size veloc accel image) missile
      (let* ((nearest-enemy (nearest-object missile 'enemy 600))
             (new-image (make-image "~a-~2,'0d" :missile (quadrant veloc 16))))
        (if nearest-enemy
            (setf veloc (* (unit veloc) (min (abs veloc) 12d0))
                  accel (* 2d0 (unit (- (+ (offset nearest-enemy)
                                           (/ (size nearest-enemy) 2d0))
                                        (+ offset (/ size 2d0)))))
                  offset (+ offset (/ (size image) 2d0) (/ (size new-image) -2d0))
                  image new-image)
            (setf accel 0)))))
  
  (defmethod update ((missile enemy-missile) event)
    (with-slots (parent offset size veloc accel image) missile
      (let* ((nearest-enemy (nearest-object missile 'thopter 400))
             (new-image (make-image "~a-~2,'0d" :enemy-missile
                                    (quadrant veloc 16))))
        (if nearest-enemy
            (setf veloc (* (unit veloc) (min (abs veloc) 12d0))
                  accel (* 2d0 (unit (- (+ (offset nearest-enemy)
                                           (/ (size nearest-enemy) 2d0))
                                        (+ offset (/ size 2d0)))))
                  offset (+ offset (/ (size image) 2d0) (/ (size new-image) -2d0))
                  image new-image)
            (setf accel 0)))))
  
  (defmethod collide ((thopter thopter) event)
    (with-slots (parent offset depth veloc health primary-weapon
  
negative.code:     (iter (for player in (game-players (game screen))) (for i from 0)
            (with n = (length (game-players (game screen))))
            (let* ((body-image (make-image "~a~a-~a" :thopter (mod i 4) :body))
                   (blade-anim (make-anim "~a~a-~a" :thopter (mod i 4) :blades))
                   (primary-weapon (make-instance 'spread-weapon
                                     :max-spread 1/4))
                   ;(primary-weapon (make-instance 'chaingun-weapon
                   ;                  ;:max-spread 1/4
                   ;                  :max-spread 1
                   ;                  :offset #c(-33 -22)
                   ;                  :size (size blade-anim)
                   ;                  :weapon-type :straight))
                  ;                   :offset (complex 
                  ;                            (x (/ (size body-image) 2)) 0)))
                  ; (primary-weapon2 (make-instance 'chaingun-weapon
  