Das mit dem hochlaufen ist einfach:

.......
vec_set (temp.x, my.x);
temp.z -= 5000;
distance_to_ground = c_trace (my.x, temp.x, ignore_me | use_box);
.......
movement_speed.y = 0;
movement_speed.z = - (distance_to_ground - 17);
movement_speed.z = max (-35 * time, movement_speed.z);
c_move (my, movement_speed.x, nullvector, glide&&ignore_passable);
.......

Das Springen bekomme ich leider selber noch nicht so richtig hin.