Thanks for your replies and code.

Unfortunately I cannot use the A5 template as the skill definitions clash and there are not enough to go around.

As far as using A7/8 goes I would have to convert the entire code to lite-c.

I have placed the players code below. Perhaps there is something obvious I have left out.





define jump = skill91;
define health,skill22;
define foot_step_distance skill11; // use skill11 to store the covered distance that will trigger the foot step sound
define state,skill50;//used for player and enemy states eg running, combat etc


var cam_pan_speed = 8;
var cam_tilt_speed = 6;
var eyespot[3];
var jump = 0;
var jump_height = 10;
var checkuptemp[3];
var state_fps=150;
var curmid;
var max_dist = 10000;
var bulb_brightness = 200;



function gravity(){

vec_set(temp, my.x);
temp.z = -999999;
trace_mode = ignore_me + use_box + ignore_models + ignore_sprites;
-trace(my.x, temp);

if(result > 20){my.skill3 -= 2 * time;}
else{my.skill3 = -trace(my.x, temp) * 0.25;}

}

function the_camera(){

vec_for_vertex(eyespot,player,25);//middle of the eyes
proc_late();
camera.genius = me;
//camera.diameter = 180;
//camera.arc = 75;
camera.x = eyespot.x;
camera.y = eyespot.y;
camera.z = eyespot.z;
my.pan -= cam_pan_speed * (mouse_force.x) * time;
camera.pan = my.pan;
camera.tilt += cam_tilt_speed * (mouse_force.y) * time;
camera.tilt = clamp(camera.tilt, -65, 90);
my.pan%=360;

}






action ent_player
{
if (my.foot_step_distance == 0) {my.foot_step_distance = 128;} // default foot step distance = 59
player = my;
my.shadow = on;
my.narrow = on;
my.fat = off;
my.polygon=on;
my.enable_impact=on;
my.enable_entity=on;
my.enable_block=on;
//my.event=event_player;
my.skill88=0;
my.invisible=on;
my.health = 100;
c_setminmax(my);
wait(2);
my.state=state_fps;
//init_weapons();
//while(weapons_initiated!=3){wait(1);}

my.skill99=0;
while(my.health>0)
{
//if(my.skill99==1){show_playerhit();my.skill99=0;}
//if(my.state==state_cutscene){my.passable=off;}
wait(1);

if(my.state==state_fps)
{
gravity();
the_camera();

//handle_plweapons();
if(key_ctrl)
{ //hold breath
ent_cycle("stand", my.skill6);
my.skill6 += 2 * time;my.skill6%=100;
}
else
{
//stand
ent_cycle("alert", my.skill6);
my.skill6 += 0.3 * time;my.skill6%=100;
}

move_friction = 1; // strong friction
my.skill47 += c_move(me, my.skill1, nullvector,IGNORE_PASSABLE+GLIDE+USE_AABB);


if (my.skill47 > my.foot_step_distance) // adjust my.foot_step_distance (by default, we've got a step sound every 59 quants)
{
//snd_play(step_wav, 20, 0); // then play the foot step sound
my.skill47 = 0; // reset the distance (increase the precission)
}

if(key_shift==0)
{

my.skill1 = 15 * (key_w - key_s) * time;
my.skill2 = 10 * (key_a - key_d) * time;
}
else
{
my.skill1 = 20 * (key_w - key_s) * time;
my.skill2 = 14 * (key_a - key_d) * time;
}

if(my.skill1 != 0)
{
my.skill4 += my.skill1/2;my.skill4%=100;
}
if(my.skill2 != 0)
{
my.skill5 += my.skill2/2;my.skill5%=100;
}

while(key_alt)
{
wait(1);//crouch

gravity();
the_camera();

my.skill1 = 6 * (key_w - key_s) * time;
my.skill2 = 6 * (key_a - key_d) * time;

if(my.skill8 < 85)
{
ent_cycle("standcrouch", my.skill8);
my.skill8 += 5;
}

c_move(me, my.skill1, nullvector, glide);

}
if(key_alt == 0){my.skill8 = 0;}


vec_set(temp, my.x);
temp.z = -999999;
trace_mode = use_box + ignore_passable;
-trace(my.x, temp);

if(key_space && my.jump==0&&result<5&&my.skill88==0)
{
//JUMP
my.skill3 += jump_height;
my.jump = 1;
while(my.jump == 1)&&(my.skill88==0)
{
wait(1);

the_camera();

if(key_shift==0)
{
my.skill1 = 20 * (key_w - key_s) * time;
my.skill2 = 20 * (key_a - key_d) * time;
}else{
my.skill1 = 12 * (key_w - key_s) * time;
my.skill2 = 12 * (key_a - key_d) * time;
}

ent_cycle("jump", my.skill7);

if(my.skill7 < 100)
{
my.skill7 += 20;
}
else
{
gravity();
}

vec_set(temp, my.x);
temp.z = -999999;
trace_mode = use_box + ignore_me + ignore_passable;
-trace(my.x, temp);
if((my.skill7 >= 90) && (result < 7)){my.jump=0;}
move_mode = ignore_passable+glide;
c_move(me,my.skill1,nullvector, glide + ignore_models + ignore_sprites);
vec_set(checkuptemp,vector(0,0,35));
vec_rotate(checkuptemp,my.pan);
vec_add(checkuptemp,my.x);
result = trace(my.x,checkuptemp);
IF (result != 0) {gravity();my.skill3 = -2;}

}
my.skill7 = 0;

}
}//end state fps


}//end health

beep();
}