                            ; -> accelerate right or left
                            (when (< vx move-speed)
                              (make-edge
-                               (kw :jumping dir (inc vx))
-                               [:geq :acc-timer 0.1]
+                               (kw :jumping dir (.min js/Math move-speed (+ vx air-move-acc)))
+                               [:geq :acc-timer acc-interval]
                                #{[:on #{dir}]}
                                clear-acc-timer))
-                           (if (= vx 0)
+                           (if (< (- vx air-move-acc) 0)
                              (make-edge
-                               (kw :jumping opp 1)
-                               [:geq :acc-timer 0.1]
+                               (kw :jumping opp (.abs js/Math (- vx air-move-acc)))
+                               [:geq :acc-timer acc-interval]
                                #{[:on #{opp}]}
                                clear-acc-timer)
                              (make-edge
-                               (kw :jumping dir (dec vx))
-                               [:geq :acc-timer 0.1]
+                               (kw :jumping dir (.min js/Math move-speed (- vx air-move-acc)))
+                               [:geq :acc-timer acc-interval]
                                #{[:on #{opp}]})))
                          ])
                       ]

                                ; falling on right timer no obstacle -> accelerating right
                                (when (< vx move-speed)
                                  (make-edge
                                    (kw :falling dir (inc vx) vy)
                                    [:and
                                     [:geq :acc-timer 0.1]
                                     (non-bumping-guard opp walls wall-others)]
                                    #{[:on #{dir}] [:off #{opp}]}
                                    clear-timers))
                                ; falling on left timer no obstacle -> accelerating left, switch to opposite dir if vx-1 <= 0
                                (make-edge
                                  turning-state-terminal
                                  [:and
                                   [:geq :acc-timer 0.1]
                                   (non-bumping-guard dir walls wall-others)]
                                  #{[:on #{opp}] [:off #{dir}]}
                                  clear-timers)

                           ;moving -> moving (faster)
                           (when (< vx move-speed)
                             (make-edge
                               (kw :moving dir (.min js/Math (+ vx ground-move-acc) move-speed))
                               [:and
                                (non-bumping-guard dir walls wall-others)
                                [:geq :acc-timer acc-interval]]
                               #{:required}
                               clear-timers))
                           ;moving -> jumping  (ascend controlled)
