     (create-explosion position (-> ammunition-types type :explosion))
     shot))
 
-(defmethod handle-damage :asteroid [{:keys [damage-taken size position speed] :as asteroid}]
+(defmethod handle-damage :asteroid [{:keys [damage-taken size position velocity] :as asteroid}]
   (if damage-taken
-    (create-asteroids damage-taken (/ size (sqrt damage-taken)) position speed)
+    (create-asteroids damage-taken (/ size (sqrt damage-taken)) position velocity)
     asteroid))
 
-(defmethod handle-damage :other [object]
+(defmethod handle-damage :default [object]
   object)
 
 (defn resolve-all-collision [{shots :shots :as ship} asteroids]

                                                   :life-time 400}}
                       :fire       {:size           (/ ship-size 2.5)
                                    :shape          [[-1.0 -1.0] [1.0 -1.0] [0.0 1.0]]
                                    :color          (fn [] (Color. (random-int 230 256) (random-int 60 220) (random-int 0 50)))
                                    :spread         0.2
                                    :speed          -0.7
                                    :acceleration   0
                                    :rotation-speed (fn [] (random -5 5))
                                    :cooldown       30
                                    :life-time      400}
                       :missile    {:size         (/ ship-size 3)

(defmethod move :ship [{shots :shots :as ship}]
  (let [ship (basic-move ship)
        shots (->> shots
                   (remove out-of-bounds?)
                   (map move)
                   (remove nil?))]
    (assoc ship :shots shots)))

(defmethod move :default [object]
  (basic-move object false))

(defmethod move :fire [{:keys [life-time color] :as fire}]
  (if (< life-time turn-millis)
