action FollowPlayer()
{
while(!player)
wait(-1);
vec_for_min(AIfeet, me); //assigning the lowest position of the model to the vector named "AIfeet"
c_setminmax(my);
vec_fill(my.min_x,-24);
vec_fill(my.max_x,24);
vec_set(PlayerTarget,my.x);
my.skill10 = hpf_path_get_max_nodes(my);
my.group = 2; // ignore other enemy units when doing pathfinding and visibility calculations (with IGNORE_PUSH)
while(1)
{
if(key_t)
vec_set(PlayerTarget, vector(player.x, player.y, player.z));
my.red = 0;
my.ambient = 0;
my.lightrange = 0;
if(!key_ins) hpf_region_get_target(temp,my,PlayerTarget,HPF_XYZ); //using insert key for dummy if statement
else vec_set(temp, PlayerTarget);
hpf_path_draw(my,COLOR_GREEN);
temp.z = my.z;
if(vec_dist(temp,my.x) > 16)
{
my.red = 100;
my.ambient = 100;
my.lightrange = 100;
vec_diff(temp2,temp,my.x);
vec_to_angle(temp,temp2);
my.pan += ang(temp.x-my.pan)*0.25*time_step;
result = c_move(me,vector(maxv(10-0.1*abs(ang(temp.x-my.pan)),0)*time_step,0,0), vector(0, 0, -AIdistancedown),IGNORE_PASSABLE | GLIDE);
my.skill1 += result;
my.skill1 %= 100;
ent_animate(me,"run",my.skill1,ANM_CYCLE);
//gravity codes
if(c_trace(my.x, vector(my.x,my.y,my.z-10000), IGNORE_ME|IGNORE_PASSABLE |USE_BOX) > 0)
AIdistancedown = my.z + AIfeet.z - target.z;
else
AIdistancedown = 0;
if(AIdistancedown > 0)
AIdistancedown = clamp(AIdistancedown, 0, accelerate(mygravity, 9.8, 0.1)); //0.1 is friction, accelerate "mygravity" by 9.8
//clamp limits distance down to lower limit 0 and upper limit accelerate(mygravity, 9.8, 0.1)
else
{mygravity = 0; vec_set(AILastSolidGround,vector(my.x,my.y,my.z));}
//if Mon is on ground, set gravity to zero and store position of mon on ground
}
var i;
for(i = 1; i <= my.skill10; i++)
{
path_getnode(my,i,temp,NULL);
if(vec_to_screen(temp,camera))
{
draw_text(str_for_num(NULL,i),temp.x-9,temp.y-9,vector(50,50,50));
draw_text(str_for_num(NULL,i),temp.x-10,temp.y-10,COLOR_RED);
}
}
wait(1);
}
}