well here's my version of it that also fixes the horrible aiming at very low fps..
Code:
Vector vecDeviation = Vector (pEdict->v.idealpitch, pEdict->v.ideal_yaw, 0) - pBot->vecPrevv_angle;
UTIL_ClampVector (&vecDeviation);
float fAverageSpeed = 0;
float fTurnSkill = pBot->bot_skill / 20.0 + 3.0;
float fSpeed = 0;
float fMultiplier = 1.0 / (2.0 * g_fFrameTime);
if (fMultiplier > 25.0)
fMultiplier = 25.0;
if (fMultiplier < 2.0)
fMultiplier = 2.0;
if (pBot->iAimFlags & AIM_ENEMY)
fSpeed = 0.7 + (fTurnSkill - 1.0) / 10.0; // fast aim
else
fSpeed = 0.2 + (fTurnSkill - 1.0) / 20.0; // slow aim
pEdict->v.pitch_speed = (pEdict->v.pitch_speed * exp (log (fSpeed / 2) * g_fFrameTime * fMultiplier)
+ fSpeed * vecDeviation.x * (1 - exp (log (fSpeed / 2) * g_fFrameTime * fMultiplier)))
* g_fFrameTime * fMultiplier;
pEdict->v.yaw_speed = (pEdict->v.yaw_speed * exp (log (fSpeed / 2) * g_fFrameTime * fMultiplier)
+ fSpeed * vecDeviation.y * (1 - exp (log (fSpeed / 2) * g_fFrameTime * fMultiplier)))
* g_fFrameTime * fMultiplier;
// influence of y movement on x axis, based on skill (less influence than x on y since it's
// easier and more natural for the bot to "move its mouse" horizontally than vertically)
if (pEdict->v.pitch_speed > 0)
pEdict->v.pitch_speed += pEdict->v.yaw_speed / (2.0 * (1 + fTurnSkill));
else
pEdict->v.pitch_speed -= pEdict->v.yaw_speed / (2.0 * (1 + fTurnSkill));
// influence of x movement on y axis, based on skill
if (pEdict->v.yaw_speed > 0)
pEdict->v.yaw_speed += pEdict->v.pitch_speed / (1.5 * (1 + fTurnSkill));
else
pEdict->v.yaw_speed -= pEdict->v.pitch_speed / (1.5 * (1 + fTurnSkill));
// Change Pitch Angles
fAverageSpeed = (pBot->rgfPitchHistory[0] + pBot->rgfPitchHistory[1] + pEdict->v.pitch_speed) / 3;
pBot->rgfPitchHistory[1] = pBot->rgfPitchHistory[0];
pBot->rgfPitchHistory[0] = pEdict->v.pitch_speed;
pEdict->v.v_angle.x += fAverageSpeed;
// Change Yaw Angles
fAverageSpeed = (pBot->rgfYawHistory[0] + pBot->rgfYawHistory[1] + pEdict->v.yaw_speed) / 3;
pBot->rgfYawHistory[1] = pBot->rgfYawHistory[0];
pBot->rgfYawHistory[0] = pEdict->v.yaw_speed;
pEdict->v.v_angle.y += fAverageSpeed;
// Save Angles
pBot->vecPrevv_angle = pEdict->v.v_angle;
UTIL_ClampVector (&pBot->vecPrevv_angle);
g_fFrameTime is just a manual version of gpGlobals->frametime because it seems booster modifies that one...