                 a (vec- (:pos (nodes (:node-a h))) (:pos (nodes (:node-b h))))
                 c (vec- (:pos (nodes (:node-c h))) (:pos (nodes (:node-b h))))]
                 (angle a c))
-            :strength 20000))
+            :modifier-angle 0.0
+            :strength 1000000))
         hinges)
 })
 

                        (conj keys (.keyCode event))
                    :else keys)})))

(defn tick-imp [state tick-step input-state]
    (assoc state
        :springs
            (let [modifier (cond
                    ((:keys input-state) KeyCodes/Q) 0.99
                    ((:keys input-state) KeyCodes/W) 1.01
                    :else 1.0)]
                (map (fn [s]
                    (assoc s :rest-length
                        (* modifier (:rest-length s))))
                        (:springs state)))
        :nodes
            (update-node-positions
                (update-node-velocities

(defn calculate-hinge-forces [nodes hinges]
    (apply merge-with vec+
        (map
            (fn [{:keys [node-a node-b node-c rest-angle modifier-angle strength]}] (let [
                [force-a force-c] (calculate-hinge-force (:pos (nodes node-a)) (:pos (nodes node-b)) (:pos (nodes node-c)) (+ rest-angle modifier-angle) strength)]
                {
                    node-a force-a
                    node-b (vec- [0 0] force-a force-c)
