     :collidable?    'whatever
     }))
 
-(defn create-projectile
-  ([pos dir speed]
-   {:type           :projectile
-
-    :size           (-> ammunition-types :projectile :size)
-    :shape          [[-1.0 -5.0] [1.0 -5.0] [0.0 1.0]]
-    :color          (Color. 250 50 10)
-    :paint-method   fill-polygon
-
-    :position       pos
-    :speed          speed
-    :acceleration   0
-
-    :direction      dir
-    :rotation-speed 0
-
-    :collidable?    (-> ammunition-types :projectile :damage)
-    })
-  ([{:keys [position size direction speed] :as ship}]
-   (let [dir-vec (m/rotate-vec direction [0 1])
-         position (m/vec+vec position (m/num*vec size dir-vec))
-         speed (m/vec+vec speed (m/num*vec (-> ammunition-types :projectile :speed) dir-vec))]
-     (create-projectile position direction speed))))
-
-(defn create-missile
-  ([pos dir speed]
-   {:type           :missile
-
-    :size           (-> ammunition-types :missile :size)
-    :shape          [[0.0 1.0] [0.5 -1.0] [0.5 -3.5] [1.0 -4.5] [0.5 -4.5] [0.25 -4.25]
-                     [-0.25 -4.25] [-0.5 -4.5] [-1.0 -4.5] [-0.5 -3.5] [-0.5 -1.0]]
-    :color          (Color. 10 50 250)
-    :paint-method   fill-polygon
-
-    :position       pos
-    :speed          speed
-    :acceleration   (-> ammunition-types :missile :acceleration)
-
-    :direction      dir
-    :rotation-speed 0
-
-    :collidable?    (-> ammunition-types :missile :damage)
-    })
-  ([{:keys [position size direction speed] :as ship}]
-   (let [dir-vec (m/rotate-vec direction [0 1])
-         missile-position (m/vec+vec position (m/num*vec size dir-vec))
-         missile-speed (m/vec+vec speed (m/num*vec (-> ammunition-types :missile :speed) dir-vec))]
-     (create-missile missile-position direction missile-speed))))
-
-
+(defn create-shot [ammunition-type {:keys [position size direction speed] :as ship}]
+  (let [dir-vec (m/rotate-vec direction [0 1])
+        position (m/vec+vec position (m/num*vec size dir-vec))
+        speed (m/vec+vec speed (m/num*vec (-> ammunition-types ammunition-type :speed) dir-vec))
+        ammunition (get ammunition-types ammunition-type)]
+    {:type           ammunition-type
+
+     :size           (:size ammunition)
+     :shape          (:shape ammunition)
+     :color          (:color ammunition)
+     :paint-method   fill-polygon
+
+     :position       position
+     :speed          speed
+     :acceleration   (:acceleration ammunition)
+
+     :direction      direction
+     :rotation-speed 0
+
+     :collidable?    (:damage ammunition)}))
 
 (defn create-asteroid
   ([size pos speed]


(declare fill-polygon draw-polygon fill-circle draw-circle)

(defn create-ship []
  {:type                      :ship

   :size                      ship-size
   :shape                     [[-0.143 1.0] [0.143 1.0] [0.429 0.429] [1.0 0.143] [1.0 -1.0] [0.429 -0.714]
                               [0.143 -1.0] [-0.143 -1.0] [-0.429 -0.714] [-1.0 -1.0] [-1.0 0.143] [-0.429 0.429]]
   :color                     (Color. 160 160 150)
   :paint-method              fill-polygon

   :cockpit-shape             [[-0.143 0.714] [0.143 0.714] [0.286 -0.143] [-0.286 -0.143]]
   :cockpit-color             (Color. 0 0 80)

   :shots                     []
   :shooting?                 false
   :millis-since-last-shot    0
   :millis-since-last-missile 0

   :position                  [(/ width 2) (/ height 2)]
   :speed                     [0 0]
   :acceleration              0

   :direction                 0
   :rotation-speed            0
   :rotation                  #{}

   :life                      ship-life
   :life-colors               {0 (Color. 255 0 0)
                               1 (Color. 255 80 75)
                               2 (Color. 250 160 75)
                               3 (Color. 160 160 150)}
   :collidable?               false                         ; is set to ship-damage at first movement / shooting
   })

(defn create-circle

              (int \A) {:rotation (- ship-rotation-speed)}
              (int \D) {:rotation ship-rotation-speed}
              (int \W) {:acceleration ship-acceleration}
              (int \J) {:fire-weapon :launcher}
              (int \K) {:fire-weapon :machinegun}})

; END: constants

