hmmm also ich bin mir nich sicher ob ich dich richtig verstehe wenn ja dann : c_trace .
aber movement mit dem gravtations code wurde zu 50% mit dem kh-movement tutorial gemacht(von david lancaster).
ich stell das einfach mal hier rein^^

Code:
FUNCTION handle_gravity() {
	
	trace_mode = ignore_me+ignore_passable+use_box;
	result = trace(vector(my.x,my.y,my.z - my.z_offset),vector(my.x,my.y,my.z - 4000));
	IF (result < 3) {
		IF (my.jumping_mode == 0) {
			my.force_z = -1 * result;
			IF (key_space == 0 && space_press == 1) { space_press = 0; }
			IF (key_space == 1 && space_press == 0 && my.movement_mode == 0 && my.animblend >= stand && my.animblend != jump && my.animblend != fall) {
				space_press = 1;
				my.jumping_mode = 1;
				my.force_z = 30;
				my.blendframe = jump;
				my.animate2 = 0;
				my.animblend = blend;
			}
		}
		IF (my.jumping_mode == 2 || my.jumping_mode == 3) { my.jumping_mode = 0; }
	} ELSE {
		IF (my.jumping_mode == 2) {
			IF (result > 120) {
				my.animate = 60;
				my.jumping_mode = 3;
			} ELSE {
				my.jumping_mode = 0;
			}
		}
		IF (my.jumping_mode == 3 && result <= 120) { my.jumping_mode = 0;	}
		IF (my.jumping_mode == 0 && my.movement_mode == 0) {
			IF (result > 120 && my.animblend >= stand && my.animblend != jump && my.animblend != fall) {
				my.jumping_mode = 3;
				my.blendframe = fall;
				my.animate2 = 0;
				my.animblend = blend;
			}
		}
		my.force_z -= my.gravity * time;
		my.force_z = max(-15,my.force_z);
		IF (my.movement_mode == 2) { my.force_z = 0; }
	}
 	my.velocity_z += (time * my.force_z) - (min(time*0.7,1) * my.velocity_z);
	my.move_z = my.velocity_z * time;
}