it's quite difficult to do that. i'm using this David Lancaste's code from KH Movement tutorial:

animate.c
Code:
//*******************************************************
// -- DEFINES -- 
//*******************************************************
#define animate skill31
#define animate2 skill32
#define animblend skill33
#define currentframe skill34
#define blendframe skill35

#define nullframe -2
#define blend -1
#define stand 0
#define run 1
#define walk 2
#define jump 3
#define fall 4
#define crouch 5
#define stand_aim 6

// Movement speed constants

#define run_speed 18
#define strafe_speed 12
#define run_animation_speed 16


//*******************************************************
// -- HANDLE ANIMATION -- function
//*******************************************************
function handle_animation(animation_speed) 
{
	while(1){
	if (animation_speed <= 0) animation_speed = 1;
	
	if (my.animblend != blend && my.blendframe != nullframe) 
	{ 
		my.animate2 = 0;
		my.animblend = blend;
	}
	
	if (my.animblend == blend)
	{
		if (my.currentframe == stand) ent_animate(my,"stand",my.animate,ANM_CYCLE);
		if (my.currentframe == run) ent_animate(my,"run",my.animate,ANM_CYCLE);
		if (my.currentframe == walk) ent_animate(my,"walk",my.animate,ANM_CYCLE);
		if (my.currentframe == crouch) ent_animate(my,"crouchaim",my.animate,ANM_CYCLE);
		if (my.currentframe == stand_aim) ent_animate(my,"standaim",my.animate,ANM_CYCLE);
		if (my.blendframe == stand) ent_blend("stand",0,my.animate2);
		if (my.blendframe == run) ent_blend("run",0,my.animate2);
		if (my.blendframe == walk) ent_blend("walk",0,my.animate2);
		if (my.blendframe == crouch) ent_blend("crouchaim",0,my.animate2);
		if (my.blendframe == stand_aim) ent_blend("standaim",0,my.animate2);
		
		my.animate2 += 45 * time_step;
		
		if (my.animate2 >= 100) 
		{
			my.animate = 0;
			my.animblend = my.blendframe;
			my.blendframe = nullframe;
		}
	}
	
	if (my.animblend == stand) 
	{
		ent_animate(my,"stand",my.animate,ANM_CYCLE);
		my.animate += 1 * animation_speed * time_step;
		my.animate %= 100;
		my.currentframe = stand;
	}
	
	if (my.animblend == run) 
	{
		ent_animate(my,"run",my.animate,ANM_CYCLE);
		my.animate += 7 * animation_speed * time_step;
		my.animate %= 100;
		my.currentframe = run;
	}
	
	if (my.animblend == walk) 
	{
		ent_animate(my,"walk",my.animate,ANM_CYCLE);
		my.animate += 7 * animation_speed * time_step;
		my.animate %= 100;
		my.currentframe = walk;
	}
	if (my.animblend == crouch) 
	{
		ent_animate(my,"crouchaim",my.animate,ANM_CYCLE);
		my.animate += 7 * animation_speed * time_step;
		my.animate %= 100;
		my.currentframe = crouch;
	}
	if (my.animblend == stand_aim) 
	{
		ent_animate(my,"standaim",my.animate,ANM_CYCLE);
		my.animate += 7 * animation_speed * time_step;
		my.animate %= 100;
		my.currentframe = stand_aim;
	}
	wait(1);
}

}




and then put a call handle_animation(1); in a while loop in player function or main function.


and then use it like this in player function loop:
Code:
if (key_w || key_s && key_c)   
			{
				if (my.animblend == stand) 
				{ 
					if (key_shift == 1) { my.blendframe = run; } else { my.blendframe = walk; }
				}
				if (my.animblend == walk && key_shift == 1) { my.blendframe = run; }
				if (my.animblend == run && key_shift == 0) { my.blendframe = walk; }
			} 
			if (!key_w && !key_s && !key_c)
			{
				if (my.animblend > stand) 
				{ 
					my.blendframe = stand;
				}
			}	
			if(key_c) 
			{
				if(my.animblend != crouch)
				{
					my.blendframe = crouch;
				}
			}




Ubi bene, ibi Patria.