View Single Post
Re: JoeBot/RACC aiming
Old
  (#2)
sPlOrYgOn
<-- He did it.
 
sPlOrYgOn's Avatar
 
Status: Offline
Posts: 1,558
Join Date: Jan 2004
Location: Los Angeles, California, USA, North America, Earth, Solar System, Milky Way.
Default Re: JoeBot/RACC aiming - 30-07-2004

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...
  
Reply With Quote