Thanks...it's a cool snippet and I could translate it to c-script! Though it diden't solve my issue...the way I'm tracing probable causes the problem...

I post some more code here...hoping for a solution
Code:


function ang_lerp(&resultVec,&srcVec,&destVec,blendFactor)
{
var lerp_vec_ang[3];

vec_set(resultVec, srcVec); // Copy source into result
vec_diff(lerp_vec_ang.pan, destVec, resultVec); // Difference vector

lerp_vec_ang.pan = ang(lerp_vec_ang.pan); // Adjust angle validity
lerp_vec_ang.tilt = 0;//ang(lerp_vec_ang.tilt);
lerp_vec_ang.roll = 0;//ang(lerp_vec_ang.roll);

vec_scale(lerp_vec_ang.pan, blendFactor); // Interpolate the rotation
vec_add(resultVec, lerp_vec_ang.pan); // Apply interpolated angle

return(resultVec); // Return result angle
}

function trace_angle(dist,ang_dist)
{
my.check_x = my.x + fcos(my.pan+ang_dist,dist);
my.check_y = my.y + fsin(my.pan+ang_dist,dist);
my.check_z = my.z + 10;

return(c_trace(my.x,my.check_x,ignore_me + ignore_passable + ignore_passents + ignore_sprites));
}

function avoid_obstacle(&vec)
{
var face_pos[3];//used to set position then distance

var dist1;
var dist2;

var dist3;

var turn_state;
turn_state = 0;

// this is for normal turning to the player
if(turn_state == 0){
vec_diff(face_pos,my.x, vec.x);

dist1 = trace_angle(my.obj_avoid_trace_dist,-my.obj_avoid_ang_dist); // right angle checking
dist2 = trace_angle(my.obj_avoid_trace_dist,my.obj_avoid_ang_dist); // left angle checking

if(dist1 == 0 && dist2 == 0){
dist3 = (c_trace(vector((my.x + cos(my.pan) * (my.max_x + (my.obj_avoid_trace_dist/2))),(my.y + sin(my.pan) * (my.max_x + (my.obj_avoid_trace_dist/2))),my.z + (my.max_z)),vector((my.x + cos(my.pan) * (my.max_x + (my.obj_avoid_trace_dist/2))),(my.y + sin(my.pan) * (my.max_x + (my.obj_avoid_trace_dist/2))),my.z - (my.max_z + (my.max_z/1.5))),ignore_me + ignore_passable + ignore_passents + ignore_sprites + use_box));

vec_diff(temp,vector((my.x + cos(my.pan) * (my.max_x + (my.obj_avoid_trace_dist/2))),(my.y + sin(my.pan) * (my.max_x + (my.obj_avoid_trace_dist/2))),my.z + (my.max_z)),vector((my.x + cos(my.pan) * (my.max_x + (my.obj_avoid_trace_dist/2))),(my.y + sin(my.pan) * (my.max_x + (my.obj_avoid_trace_dist/2))),my.z - (my.max_z + (my.max_z/1.5))));//store difference of distance in temp


if(dist3 > (my.max_z * 2) && normal.z < 0.8 || normal.z > 1.2){
if (my.f_animblend != f_stand)
{
my.f_blendframe = f_stand;
}
my.speed_x = 0;
}
if(dist3 > ((my.max_z - my.min_z)/4) && dist3 < ((my.max_z - my.min_z)/2.75) && you != player){
jumping();
}
}
}

// alter states if dist1 or dist2 returns > 0
if(dist1 > 0 && turn_state == 0){turn_state = 1;}
if(dist2 > 0 && turn_state == 0){turn_state = 2;}


if(turn_state == 1){
dist1 = trace_angle(my.obj_avoid_trace_dist,my.obj_avoid_ang_dist);
vec_diff(face_pos,my.x,my.check_x);
if(dist1 == 0){turn_state = 0;} // back to normal state
}

if(turn_state == 2){
dist1 = 0;
dist2 = trace_angle(my.obj_avoid_trace_dist,-my.obj_avoid_ang_dist);
vec_diff(face_pos,my.x,my.check_x);
if(dist2 == 0){turn_state = 0;} // back to normal state
}

//do the turning
vec_to_angle(temp.pan, face_pos.x); // Angle from me to you
ang_lerp(my.ang_force_pan, my.pan, temp.pan, 0.8 * time_step); // Turn to you softly


}



The "my.ang_force_pan" is then used in c_rotate of the enemy action