Tutorial *54*
Here's a tutorial that will enable the bot model to "yaw" like a real player, i.e : when an enemy is on a higher level on top of the bot, the gun model will point at the enemy instead of just pointing straight forward. This was once a feature that Steven Polge wanted to implement before he went to work for Epic.

Step 1 :
Open up the file ai.qc. Paste this function at the end of the file :
/*

===========

ChangePitch



CN_PATCH



Turns towards self.ideal_pitch at 6 degree

chunks.  Used by Eliminator Bot.



Sets the global variable current_pitch

============

*/



void() ChangePitch =

{

	local float             ideal, move;





	current_pitch = self.angles_x;

	ideal = self.ideal_pitch;



	// only allow movement to within 54 degrees

	if (ideal > 54)

	  ideal = 54;

	else if (ideal < -54)

	  ideal = -54;



	if (current_pitch == ideal)

		return;



	move = ideal - current_pitch;



	if (move > 0)

	{

		if (move > 6)

			move = 6;

	}

	else

	{

		if (move < -6 )

			move = -6;

	}



	current_pitch = current_pitch + move;



	self.angles_x = current_pitch;

};


Step 2 :
Open up the file botthink.qc. Go to the function BotPostThink. Put in these code right above that function :
// Code from Eliminator Bot by Cameron Newham

void() checkyaw =

{

  local vector los;

  local vector los_angles;

  local float  o_range;

  local float  missile_factor;

  local vector spotty_squid;  // adds a tiny random for stationary targets



local string st;



  o_range = vlen(self.enemy.origin - self.origin);



  if ((self.weapon == IT_ROCKET_LAUNCHER) ||

      (self.weapon == IT_NAILGUN) ||

      (self.weapon == IT_SUPER_NAILGUN))

    missile_factor = o_range / (1900 + random() * 700);  // add scatter

  else if (self.weapon == IT_GRENADE_LAUNCHER)

    missile_factor = o_range / (1000 + random() * 50);  // add scatter

  else

    missile_factor = 0;  //other weapons are instantaneous



  // apply a small randomiser of the distance is large

  if (o_range > 300)

    spotty_squid = ('9 9 8') * (random() - 0.5);

  else

    spotty_squid = '0 0 0';



    // Face bot towards the specified angles

    los = self.enemy.origin - self.origin + self.enemy.velocity*missile_factor

          + spotty_squid;



    los_angles = vectoangles (los);

    self.ideal_pitch = los_angles_x;

    if (self.ideal_pitch > 180)

      self.ideal_pitch = self.ideal_pitch - 360;  //stupid id mistake



    ChangePitch();

};


Step 3 :
Now all we need to do is make a call to the function so place this piece of code inside the BotPostThink function, below the "local float fraglimit;" :

checkyaw ();

There you go ! You're done , save the files and recompile. You'll only notice the bot model yaw when you're an observer, a good map to see this happen is on maps like dm4, dm6, etc. Have fun !


 
Not logged in
Sign up
Login:
Passwd: