     hero
     ))
 
-(defn on-ground? [hero]
+(defn nearest-vertical-border [bottom]
+  (* (round (/ bottom 70)) 70)
+  )
+
+(defn on-ground? [original-hero hero]
   (if (on-block? (get-in hero [:position]) 1)
     (update-in hero [:dy] + 0.75)
-    hero
+    (if (> 0 (get-in hero [:dy]))
+      (if (in-block? (get-in hero [:position]) 1)
+        (let [new-hero (update-in hero [:dy] + 0.75)]
+          (update-in new-hero [:position :bottom] (fn [_] (nearest-vertical-border (get-in original-hero [:position :bottom]))))
+          )
+        hero
+        )
+      hero
+      )
     ))
 
 (defn spike-damage [hero]

(defn ceil [i]
  (.ceil js/Math i))

(defn floor [i]
  (.floor js/Math i))


                 (dom/tbody nil
                            (dom/tr nil
                                    (dom/th nil "Red Trampoline")
                                    (om/build table-cell (get-in app [:settings :red-trampete]) {:init-state {:options (mapv (fn [i] [i]) (range 1 5))}})
                                    )
                            (dom/tr nil
                                    (dom/th nil "Blue Trampoline")
                                    (om/build table-cell (get-in app [:settings :blue-trampete]) {:init-state {:options (mapv (fn [i] [i]) (range 1 5))}})
                                    )
                            (dom/tr nil
                                    (dom/th nil "Spiel Dauer")
