anchor.diff:  
   (defmethod alarm ((enemy enemy) event)
     (with-slots (parent offset size veloc timer 
  -                      missiles missile-chance fire-rate) enemy
  +                      secondary-weapon missile-chance fire-rate) enemy
       (setf timer
             (ceiling (+ 5 (mt19937:random 30) (mt19937:random 30)) fire-rate))
       (let* ((shoot-decision (mt19937:random 1d0)))
  -      (if (and (> missiles 0) (< shoot-decision missile-chance))
  +      (if (and (> (ammo secondary-weapon) 0) (< shoot-decision missile-chance))
           (missile enemy event)
  -        (shoot enemy event)))))
  +        (shoot enemy (primary-weapon enemy) event)))))
   
   (defmethod collide ((enemy enemy) event)
  -  (with-slots (parent offset size depth veloc health ammo ammo-refill-rate
  -                      missiles) enemy
  -    (typecase (event-hit event)
  -      (bullet      (decf health))
  -      (missile     (decf health))
  -      (thopter     (decf health 8))
  -      (explosion   (decf health))
  -      (health-pack (incf health 2))
  -      (upgrade-bullet (incf ammo ammo-refill-rate))
  -      (upgrade-missile (incf missiles))
  -      (upgrade-speed (setf (speed-boost enemy) 240)))
  -    (when (and parent (<= health 0))
  -      (let ((i (if (typep enemy 'enemy-boss) 25 1)))
  -        (loop repeat i 
  -           do (let* ((random-choice (mt19937:random 1d0))
  -                     ; not happy with way chances are, prefer individual
  -                     (upgrade-bullet-chance 0.30)
  -                     (upgrade-missile-chance 0.6d0)
  -                     (health-pack-chance 0.90)
  -                     (upgrade-speed-chance 1.00d0)
  -                     (drop-class (if (< random-choice upgrade-bullet-chance)
  +  (with-slots (parent offset size depth veloc health primary-weapon 
  +               secondary-weapon missiles) enemy
  +    (with-slots (ammo ammo-refill-rate) primary-weapon
  +      (typecase (event-hit event)
  +        (bullet      (decf health))
  +        (missile     (decf health))
  +        (thopter     (decf health 8))
  +        (explosion   (decf health))
  +        (health-pack (incf health 2))
  +        (upgrade-bullet (incf ammo ammo-refill-rate))
  +        (upgrade-missile (incf (ammo secondary-weapon)))
  +        (upgrade-speed (setf (speed-boost enemy) 240)))
  +      (when (and parent (<= health 0))
  +        (let ((i (if (typep enemy 'enemy-boss) 25 1)))
  +          (loop repeat i 
  +            do (let* ((random-choice (mt19937:random 1d0))
  +                       ; not happy with way chances are, prefer individual
  +                       (upgrade-bullet-chance 0.30)
  +                       (upgrade-missile-chance 0.6d0)
  +                       (health-pack-chance 0.90)
  +                       (upgrade-speed-chance 1.00d0)
  +                       (drop-class (if (< random-choice upgrade-bullet-chance)
                                        'upgrade-bullet
  -                                   (if (< random-choice upgrade-missile-chance)
  -                                       'upgrade-missile
  +                                    (if (< random-choice upgrade-missile-chance)
  +                                      'upgrade-missile
                                        (if (< random-choice health-pack-chance)
  -                                         'health-pack
  -                                       'upgrade-speed))))
  -                     (drop-image
  -                      (make-anim-or-image (ecase drop-class
  -                                            ((upgrade-bullet) :upgrade-bullet)
  -                                            ((upgrade-missile) :upgrade-missile)
  -                                            ((health-pack) :health)
  -                                            ((upgrade-speed) :upgrade-speed))))
  -                     (image (make-anim :explosion))
  -                     (bound (- size (size image))))
  -                (make-instance
  -                 'explosion :parent parent
  -                 :offset (+ offset
  -                            (complex (mt19937:random (max 1 (x bound)))
  -                                     (mt19937:random (max 1 (y bound)))))
  -                 :depth depth
  -                 :veloc (if (= i 1)
  -                          (/ veloc 2)
  -                          (+ (/ veloc 2) (complex (- (mt19937:random 6d0) 3d0)
  -                                                  (- (mt19937:random 6d0) 3d0))))
  -                 :image image
  -                 :timer 28
  -                 :drop-class drop-class :drop-image drop-image)))
  -        (detach parent enemy)))))
  +                                       'health-pack
  +                                        'upgrade-speed))))
  +                       (drop-image
  +                         (make-anim-or-image (ecase drop-class
  +                                          ((upgrade-bullet) :upgrade-bullet)
  +                                          ((upgrade-missile) :upgrade-missile)
  +                                          ((health-pack) :health)
  +                                          ((upgrade-speed) :upgrade-speed))))
  +                       (image (make-anim :explosion))
  +                       (bound (- size (size image))))
  +                 (make-instance
  +                   'explosion :parent parent
  +                   :offset (+ offset
  +                             (complex (mt19937:random (max 1 (x bound)))
  +                               (mt19937:random (max 1 (y bound)))))
  +                   :depth depth
  +                   :veloc (if (= i 1)
  +                            (/ veloc 2)
  +                            (+ (/ veloc 2) (complex (- (mt19937:random 6d0) 3d0)
  +                                             (- (mt19937:random 6d0) 3d0))))
  +                   :image image
  +                   :timer 28
  +                   :drop-class drop-class :drop-image drop-image)))
  +          (detach parent enemy))))))
   
   (defmethod alarm ((explosion explosion) event)
     (with-slots (parent offset size depth veloc drop-class drop-image) explosion
  
positive.code:   (let* ((root (game-root *game*))
           (root-size (size root)))
      (loop for i from (1+ (floor count -2)) to (floor count 2)
         do (with-slots (offset size veloc)
                (make-instance enemy-type :parent root :depth 1
                               :health health
                               :ammo ammo
                               :missiles missiles
                               :missile-chance missile-chance
                               :difficulty (floor wave 5))
              (setf offset
                    (complex (+ (/ (x root-size) 2) (* i (x size) 2))
                             (* (y size) -2)))))))
  
  (defmethod alarm ((wave wave-controller) event)
    (with-slots (level) wave
  
negative.code:     :initform 4)
     (timer :initform 120)))
  
  (defclass enemy (sprite collidable alarm shooter)
    ((primary-weapon :accessor primary-weapon :initarg :primary-weapon)
     (secondary-weapon :accessor secondary-weapon :initarg :secondary-weapon)
     (timer :initform (+ 20 (mt19937:random 10) (mt19937:random 10)))
     (speed-boost :initform 0 :accessor speed-boost :initarg :speed-boost)
     (health
      :accessor health
      :initarg :health
      :initform 0)
     (missile-chance
      :accessor missile-chance
  