 
 (def initial-game-state (make-state
     {
-        :head (make-node 250 150)
-        :tail (make-node 50 150)
-        :h-l-k (make-node 260 75)
-        :h-l-f (make-node 250 0)
-        :h-t-k (make-node 260 75)
-        :h-t-f (make-node 250 0)
-        :t-l-k (make-node 40 75)
-        :t-l-f (make-node 50 0)
-        :t-t-k (make-node 40 75)
-        :t-t-f (make-node 50 0)
+        :hump (make-node 200 225 2)
+        :head (make-node 300 150 2)
+        :tail (make-node 100 150 2)
+
+        :h-l-k (make-node 310 75 0.5)
+        :h-l-f (make-node 300 0 0.5)
+        :h-t-k (make-node 310 75 0.5)
+        :h-t-f (make-node 300 0 0.5)
+
+        :t-l-k (make-node 90 75 0.5)
+        :t-l-f (make-node 100 0 0.5)
+        :t-t-k (make-node 90 75 0.5)
+        :t-t-f (make-node 100 0 0.5)
     }
     (map (partial apply make-spring) [
+        [:hump :head]
+        [:hump :tail]
         [:head :tail]
         [:head :h-l-k]
         [:h-l-k :h-l-f]

    (assoc state
        :hinges
            (let
                [[q w i o a s k l] (map (:keys input-state) [
                    KeyCodes/Q KeyCodes/W KeyCodes/I KeyCodes/O
                    KeyCodes/A KeyCodes/S KeyCodes/K KeyCodes/L
                    ])]
                (map (fn [h] (let [hn (hinge-nodes h)]
                    (assoc h :modifier-angle
                        (clamp (+ (:modifier-angle h)
                            (cond
                                (= hn [:tail :head :h-l-k])
                                    (+ (if q 0.05 0.0) (if w -0.05 0.0))
                                (= hn [:head :h-l-k :h-l-f])
                                    (+ (if i 0.05 0.0) (if o -0.05 0.0))
                                (= hn [:tail :head :h-t-k])
                                    (+ (if q -0.05 0.0) (if w 0.05 0.0))
                                (= hn [:head :h-t-k :h-t-f])
                                    (+ (if i -0.05 0.0) (if o 0.05 0.0))
                                (= hn [:head :tail :t-l-k])
                                    (+ (if a 0.05 0.0) (if s -0.05 0.0))
                                (= hn [:tail :t-l-k :t-l-f])
                                    (+ (if k 0.05 0.0) (if l -0.05 0.0))
                                (= hn [:head :tail :t-t-k])
                                    (+ (if a -0.05 0.0) (if s 0.05 0.0))
                                (= hn [:tail :t-t-k :t-t-f])
                                    (+ (if k -0.05 0.0) (if l 0.05 0.0))
                                :else
                                    0.0))
                            (:min-modifier-angle h) (:max-modifier-angle h)))))

(defn rot-cw [[x y]] [y (- x)])
(defn rot-ccw [[x y]] [(- y) x])

(defn make-node [x y m] {:pos [x y] :vel [0 0] :mass m})
(defn make-spring [a b] {:node-a a :node-b b})
(defn make-hinge [a b c min-a max-a] {:node-a a :node-b b :node-c c :min-modifier-angle min-a :max-modifier-angle max-a})
(defn make-state [nodes springs hinges] {
