anchor.diff:              (nearest-bullet (nearest-object enemy 'bullet))
               (nearest-upgrade (nearest-object enemy 'upgrade-bullet))
               (r (- xy (/ (size (game-root *game*)) 2))))
  -        (setf accel
  +        (setf v (* (unit v) (min (abs v) (+ 8d0 (* 2d0 difficulty))))
  +              accel
                 (cond ((and nearest-thopter
                             (< (dist xy (offset nearest-thopter)) 180))
                        (toward nearest-thopter))
  
positive.code:     (detach (parent bullet) bullet)))
  
  (defmethod update ((enemy enemy) event)
    (with-slots (parent (xy offset) (v veloc) (s size) accel health) enemy
      (labels
          ((circular (r)
             (+ ;; circular motion
  
negative.code:                  (typep (event-hit event) 'thopter)))
      (detach (parent upgrade) upgrade)))
  
  (defun spawn-wave (w n)
    (let* ((root (game-root *game*)) (size (size root)) (center (/ size 2)))
      (loop for i from (* (1+ (floor n -2)) 64) to (* (floor n 2) 64) by 64
         do (let* ((xy (complex (+ (/ (x size) 2) i) (* (y size) -0.05d0)))
                   (v (* 2 (rot (unit (- center xy)) (/ pi 2)))))
              (make-instance 'enemy :parent root :offset xy :veloc v :depth 1
                             :image (make-instance 'image :name :enemy)
                             :health 4 :timer 20
                             :firepower (max 1 (ceiling w 3))
                             :difficulty (floor w 3))))))
  
  (defmethod game-init ((game thopter-game))
    (let* ((size #c(800 600))
  