Here a simplified version of only the movement code. The funny thing is move_mode 1 (ducking) works! If I press shift I can turn the player (other movement is not supposed to be possible in this mode). Just move_mode 0 (walking,jumping,etc.) doesn't work.


Code:
 
while(my.skill3 > 0)
{


//////////////////////////////
// MOVEMENT
//////////////////////////////

if (move_mode == 0) { //standard move_mode


//get the keyboardinput
my.skill21 = (key_pressed(key_forwards)-(key_pressed(key_backwards)/2))*my.skill1;
if (my.skill 21 >= 0) {my.skill22 = (key_pressed(key_left)-key_pressed(key_right))*my.skill1;}
else {my.skill 22 = 0;}

//gravity
vec_set(temp, my.x);
temp.z -= 4000;
check_inair = c_trace(my.x, temp, ignore_me|use_box);

if (check_inair > 10) { // in air?
friction = 0.1;
fallforce = gravity;
anim_mode = 5;
}
else { // ground
if (normal.z < 0.2) //slide if too steep
{
fallforce = gravity;
vec_set(force,vector(0,0,0));
}
else
{
fallforce = 0;
vec_set(force,vector(my.skill21,my.skill22,0));
}

if (key_pressed(key_jump) == 0) && (space_press == 1) { space_press = 0; }
if (key_pressed(key_jump) == 1) && (space_press == 0) && (shooting_pose == 0) {
space_press = 1;
jump_speed = 130;
}

if (shooting_pose == 0) {fallforce += jump_speed*time_step;}

jump_speed = 0; //reset jump_speed
friction = 0.7;
}

//get the mousemovement
my.skill24 = -mouse_force.x*my.skill2*time_step*2;
my.skill25 = mouse_force.y*my.skill2*time_step*2;



//add physics
my.skill21 = time_step*force.x + max(1-time_step*friction,0)*my.skill21;
my.skill22 = time_step*force.y + max(1-time_step*friction,0)*my.skill22;
my.skill30 = time_step*fallforce + max(1-time_step*friction,0)*my.skill30;
vec_set(my.dist_rel,vector(my.skill21*time_step,my.skill22*time_step,0));
vec_set(my.dist_abs,vector(0,0,my.skill30));


//turn and move the player
move_min_z = 0.0;
c_rotate(me,vector(my.skill24,0,0),glide|ignore_passable|ignore_passents);
c_move(me,my.dist_rel,my.dist_abs,glide|ignore_passable|ignore_passents);

} //End of move_mode 0



if (key_pressed(key_duck)) {move_mode = 1;} else {move_mode = 0;} //has to be changed for later move_modes...

if (move_mode == 1) { //duck move_mode
anim_mode = 4;

//gravity
vec_set(temp, my.x);
temp.z -= 4000;
check_inair = c_trace(my.x, temp, ignore_me|use_box);

if (check_inair > 10) { // in air?
friction = 0.1;
fallforce = gravity;
anim_mode = 5;
}
else { // ground
if (normal.z < 0.9) //slide if too steep
{
fallforce = gravity;
}
else
{
fallforce = 0;
}

fallforce = -2 * check_inair;
friction = 0.7;
}

//get the mousemovement
my.skill24 = -mouse_force.x*my.skill2*time_step*2;
my.skill25 = mouse_force.y*my.skill2*time_step*2;



//add physics
my.skill30 = time_step*fallforce + max(1-time_step*friction,0)*my.skill30;
vec_set(my.dist_abs,vector(0,0,my.skill30));

//turn and move the player
move_min_z = 0;
c_rotate(me,vector(my.skill24,0,0),glide|ignore_passable|ignore_passents);
c_move(me,vector(0,0,0),my.dist_abs,glide|ignore_passable|ignore_passents);



} //End of move_mode 1
}