void() meet_new_dir =
{
if (vlen(self.new_way - self.angles) > 2)
self.angles = self.angles + normalize(self.new_way - self.angles) * 2;
else
self.angles = self.new_way;
};
I'd like to know who it is so I can give them credit. Anyway, at first it didn't work, because there is a specific condition needed in order for the code to operate: the angles need to range from -180 to 180, instead of 0-360 or some other system.
So, I've since modified the function to be more general-purpose. Here are the results:
Code: Select all
/*
-----------------------------------------
frik_anglemod (part of FrikBot)
faster version of id's anglemod
-----------------------------------------
*/
float(float v) frik_anglemod =
{
return v - floor(v/360) * 360;
};
/*
-----------------------------------------
capangle (by Wazat)
Quick little function to save time.
Makes sure an angle's 3 floats range from 0-360
-----------------------------------------
*/
vector(vector ang) capangle =
{
ang_x = frik_anglemod(ang_x);
ang_y = frik_anglemod(ang_y);
ang_z = frik_anglemod(ang_z);
return ang;
};
/*
-----------------------------------------
nangle (by Wazat)
Basically makes an angle range from -180 to 180.
-----------------------------------------
*/
vector(vector ang) nangle =
{
ang = capangle(ang);
if (ang_x > 180)
ang_x = ang_x - 360;
else if (ang_x < -180)
ang_x = ang_x + 360;
if (ang_y > 180)
ang_y = ang_y - 360;
else if (ang_y < -180)
ang_y = ang_y + 360;
if (ang_z > 180)
ang_z = ang_z - 360;
else if (ang_z < -180)
ang_z = ang_z + 360;
return ang;
};
/*
-----------------------------------------
angle_turn (by... actually I forget who wrote this one)
Modified by Wazat to be more general-purpose.
Turns oldang toward newang in 'turnrate' increments.
-----------------------------------------
*/
vector(vector oldang, vector newang, float turnrate) angle_turn =
{
newang = nangle(newang);
oldang = nangle(oldang);
if (vlen(newang - oldang) > turnrate)
return oldang + normalize(newang - oldang) * turnrate;
else
return newang;
};
Code: Select all
newang = vectoangles(dir);
self.angles_z = newang_z; // don't modify roll
newang = self.angles = angle_turn(self.angles, newang, self.ammo_nails);
self.angles_z = 0; // stay level (0 roll)
// set self.movedir so turret will know what direction to fire later on
newang_x = newang_x * -1; // x angle is always backward for some reason
makevectors(newang);
self.movedir = v_forward;