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();
}