ich habe jetzt mal deine schwerkraft funktion probiert
scheint soweit zu funktionieren

probier mal das hier



Code:
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////

VECTOR force;
VECTOR dist;
VECTOR absdist;




//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////

var my_height;
var jump_time = 1;
var jump_height = 55;
var speed_z = 0;



var fallgeschwindigkeit = 0;
var distanz_zum_boden;
VECTOR vFuesse;
vec_for_min(vFuesse,me);

//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////

#define health skill1


function main()
{
	fps_max = 75;
	fps_lock = 1; // NEEDED FOR PROPER WORK
	level_load("1.WMB");
	wait(3);
}

//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////

function handle_camera()
{
	camera.arc = 90;
	vec_lerp(camera.x,camera.x,vector(my.x,my.y,my.z + 50),0.5);
	my.pan = camera.pan;
	camera.pan -= 10 * mouse_force.x * time_step;
	camera.tilt += 10 * mouse_force.y * time_step;
	camera.tilt = clamp(camera.tilt,-80,80);
}

function handle_jump()
{
	proc_kill(1); 
	jump_time = 1;
	while (jump_time > -1 && player.health > 0)
	{
		on_space = NULL;
		absdist.z = jump_height * time_step * jump_time;
		jump_time -= 0.2 * time_step;
		wait (1);
	}
	while (my_height > 10) {wait (1);}
	jump_time = 1;
}

function handle_movement()
{
	if(my_height <= 10)
	{
		if(jump_time == 1){on_space = handle_jump;}
		if(!key_shift)
		{
			force.x = 10 * (key_w - key_s) * time_step;
			accelerate(dist.x,force.x,0.5);
			force.y = 10 * (key_a - key_d) * time_step;
			accelerate(dist.y,force.y,0.5);
		}
		else
		{
			force.x = 10 * (key_w - key_s) * time_step;
			accelerate(dist.x,force.x,1);
			force.y = 10 * (key_a - key_d) * time_step;
			accelerate(dist.y,force.y,1);
		}
	}
}


function schwerkraft()
{
	
	if (c_trace(my.x, vector(my.x,my.y,my.z-1000), IGNORE_ME | IGNORE_PASSABLE | USE_POLYGON) >0)
		distanz_zum_boden = my.z + vFuesse.z - target.z;
	else
		distanz_zum_boden = 0;
		
	if (distanz_zum_boden > 0)
		distanz_zum_boden = clamp(distanz_zum_boden,0,accelerate(fallgeschwindigkeit,5,0.1));
	else
		fallgeschwindigkeit = 0;

	
}


action hero()
{
	player = my;
	set(my,INVISIBLE);
	my.health = 100; // SET PLAYERS HEALTH TO 100 
	while(my.health > 0)
	{
		handle_movement(); // MOVEMENT
		c_move(my,dist,absdist,IGNORE_PASSABLE|GLIDE);
		handle_camera(); // CAMERA
		schwerkraft();
		wait(1);
	}
	
}