Difference between revisions of "AI Perception Behavior Enhancement"

From Valve Developer Community
Jump to: navigation, search
m
m (Pretty sure that condition merging requires bitwise operators, if it even exists and works as intended.)
Line 29: Line 29:
 
Alternate Code:
 
Alternate Code:
  
  if ( HasCondition ( COND_HEAR_DANGER || COND_HEAR_PLAYER || COND_HEAR_WORLD || COND_HEAR_BULLET_IMPACT || COND_HEAR_COMBAT ) )
+
  if ( HasCondition ( COND_HEAR_DANGER | COND_HEAR_PLAYER | COND_HEAR_WORLD | COND_HEAR_BULLET_IMPACT | COND_HEAR_COMBAT ) )
 
  {
 
  {
 
  return SCHED_INVESTIGATE_SOUND;
 
  return SCHED_INVESTIGATE_SOUND;

Revision as of 03:21, 2 August 2016

In Half-Life 2, if an idle NPC hears a sound but doesn't see its emitter, it will only turn in the direction of the sound for a bit before returning to its previous action.

With the modification below the NPC will investigate the source of the sound instead.

Open the ai_basenpc_schedule.cpp file and look for the function SelectAlertSchedule(). Look for the following code:

	if ( HasCondition ( COND_HEAR_DANGER ) ||
			  HasCondition ( COND_HEAR_PLAYER ) ||
			  HasCondition ( COND_HEAR_WORLD  ) ||
			  HasCondition ( COND_HEAR_BULLET_IMPACT ) ||
			  HasCondition ( COND_HEAR_COMBAT ) )
	{
		return SCHED_ALERT_FACE_BESTSOUND;

	}

Replace this code with:

	if ( HasCondition ( COND_HEAR_DANGER ) ||
			  HasCondition ( COND_HEAR_PLAYER ) ||
			  HasCondition ( COND_HEAR_WORLD  ) ||
			  HasCondition ( COND_HEAR_BULLET_IMPACT ) ||
			  HasCondition ( COND_HEAR_COMBAT ) )
	{
		
		return SCHED_INVESTIGATE_SOUND;
	}

Alternate Code:

	if ( HasCondition ( COND_HEAR_DANGER | COND_HEAR_PLAYER | COND_HEAR_WORLD | COND_HEAR_BULLET_IMPACT | COND_HEAR_COMBAT ) )
	{
		return SCHED_INVESTIGATE_SOUND;
	}


Conclusion

With this code, as soon as NPC hears sounds that meet conditions, they will investigate it.