When moving, my player sticks in certain places on the terrain. Here is the player code, it's part KH movement my Mr. Lancaster, with the gravity from the dude that runs Game Beep:

Code:
function pl_character()
{
	player = me;
	
	//local variables
	var move[3];
	var move_result;
	var trace_from[3];
	var trace_to[3];
	var ground_dist;
	var anim_per;
	
	//adjust bounding box
	wait(1);
	c_setminmax(me);
	vec_set(my.min_x,vector(-25,-25,-60));
	vec_set(my.max_x,vector(25,25,60));
	
	//loop
	while(me)
	{
		
		
		temp.x = -1000;
		temp.y = 0;
		if(key_w && !key_s && !key_a && !key_d){temp.x = camera.pan;}
		if(key_s && !key_w && !key_a && !key_d){temp.x = camera.pan + 180;}
		if(key_a && !key_s && !key_w && !key_d){temp.x = camera.pan + 90;}
		if(key_d && !key_s && !key_a && !key_w){temp.x = camera.pan - 90;}
		if(key_w && key_a && !key_d && !key_s){temp.x = camera.pan + 45;}
		if(key_w && key_d && !key_a && !key_s){temp.x = camera.pan - 45;}
		if(key_s && key_a && !key_d && !key_w){temp.x = camera.pan + 135;}
		if(key_s && key_d && !key_a && !key_w){temp.x = camera.pan - 135;}
		
		//calculate directional force
		if(temp.x != -1000){temp.y = 20 * time;}
		move.x = fcos(temp.x,temp.y);
		move.y = fsin(temp.x,temp.y);
		
		//trace floor
		vec_set(trace_from,my.x);
		vec_set(trace_to,my.x);
		trace_to.z -= 500;
		ground_dist = c_trace(trace_from,trace_to,ignore_me|ignore_passents|ignore_passable|ignore_sprites|use_box);
		
		//calculate jumping
		if(key_space)
		{
			if(ground_dist < 5)
			{
				ground_dist = 3;
				move.z = 5;
			}
		}
		
		//gravity
		if(ground_dist > 0)
		{
			accelerate(move.z,(-3 * time_step),0);
			if (move.z < (ground_dist * -1))
			{
				move.z = ground_dist * -1;
			}
		}
		else
		{
			move.z = -1 * ground_dist;
		}
		
		//move player
		move_result = c_move(my,nullvector,move.x,ignore_passable|ignore_passents|ignore_sprites|glide);
		
		//calculate rotation
		if(my.pan != temp.x && (temp.y > 0))
		{
			result = ang(temp.x - my.pan);
			if(result > 0){my.pan += 30 * time;}
			if(result < 0){my.pan -= 30 * time;}
			if(ang(temp.x - my.pan) < 0 && result > 0){my.pan = temp.x;}
			if(ang(temp.x - my.pan) > 0 && result < 0){my.pan = temp.x;}
		}
		
		//rough draft animation
		if(temp.y == 0)
		{
			anim_per += (1 * time_step);
			ent_animate(me,"idle",anim_per,anm_cycle);
			anim_per %= 100;
		}
		else
		{
			anim_per += (move_result * (2 * time_step));
			ent_animate(me,"run",anim_per,anm_cycle);
			anim_per %= 100;
		}
		
		orbit_camera();
		wait(1);
	}
}


The sticking can be easily noticed because the running animation is linked to the c_move result. I am unsure as to whether this has to do with c_move itself or rather the gravity. I have tried multiple movement code types and the result seems the same as far as the sticking is concerned.