anchor.diff:  
   (defclass thopter-game (game) ())
   
  +(defclass alarm (event-mixin)
  +  ((timer
  +    :accessor timer
  +    :initarg :timer
  +    :initform nil)))
  +
  +(defgeneric alarm (object event))
  +
  +(defmethod initialize-instance :after ((alarm alarm) &key)
  +  (bind alarm :alarm #'alarm))
  +
  +(defmethod update :before ((alarm alarm) event)
  +  (with-slots (timer) alarm
  +    (when timer
  +      (decf timer)
  +      (when (< timer 0)
  +        (send alarm (make-instance 'event :type :alarm))))))
  +
   (defclass thopter (sprite mobile collidable)
     ((health
       :accessor health
       :initarg :health
       :initform 0)))
   (defclass bullet (sprite mobile collidable) ())
  -(defclass enemy (sprite mobile collidable)
  -  ((health
  +(defclass enemy (sprite mobile collidable alarm)
  +  ((timer :initform 10)
  +   (health
       :accessor health
       :initarg :health
       :initform 0)))
  +(defclass enemy-bullet (sprite mobile collidable) ())
   (defclass explosion (sprite mobile collidable)
     ((ttl
       :initarg :ttl
  
positive.code: 
  (defmethod collide ((bullet bullet) event)
    (when (and (parent bullet) (typep (event-hit event) 'enemy))
      (detach (parent bullet) bullet)))
  
  (defmethod update ((enemy enemy) event)
  
negative.code: (defmethod collide ((thopter thopter) event)
    (with-slots (parent offset depth veloc health) thopter
      (typecase (event-hit event)
        (enemy-bullet (decf health))
        (enemy        (decf health 4))
        (explosion    (decf health)))
      (when (and parent (<= health 0))
        (make-instance 'explosion :parent parent
                       :offset offset :depth depth :veloc veloc
  