halflife25-sdk/dmc/dlls/defaultai.cpp
2013-08-30 13:34:05 -07:00

240 lines
4.8 KiB
C++

/***
*
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
*
* This product contains software technology licensed from Id
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
* All Rights Reserved.
*
* This source code contains proprietary and confidential information of
* Valve LLC and its suppliers. Access to this code is restricted to
* persons who have executed a written SDK license with Valve. Any access,
* use or distribution of this code by or to any unlicensed person is illegal.
*
****/
//=========================================================
// Default behaviors.
//=========================================================
#include "extdll.h"
#include "util.h"
#include "cbase.h"
#include "monsters.h"
#include "schedule.h"
#include "defaultai.h"
#include "nodes.h"
#include "scripted.h"
Schedule_t *CBaseMonster::m_scheduleList[] =
{
};
Schedule_t *CBaseMonster::ScheduleFromName( const char *pName )
{
return ScheduleInList( pName, m_scheduleList, ARRAYSIZE(m_scheduleList) );
}
Schedule_t *CBaseMonster :: ScheduleInList( const char *pName, Schedule_t **pList, int listCount )
{
int i;
if ( !pName )
{
ALERT( at_console, "%s set to unnamed schedule!\n", STRING(pev->classname) );
return NULL;
}
for ( i = 0; i < listCount; i++ )
{
if ( !pList[i]->pName )
{
ALERT( at_console, "Unnamed schedule!\n" );
continue;
}
if ( stricmp( pName, pList[i]->pName ) == 0 )
return pList[i];
}
return NULL;
}
//=========================================================
// GetScheduleOfType - returns a pointer to one of the
// monster's available schedules of the indicated type.
//=========================================================
Schedule_t* CBaseMonster :: GetScheduleOfType ( int Type )
{
// ALERT ( at_console, "Sched Type:%d\n", Type );
switch ( Type )
{
// This is the schedule for scripted sequences AND scripted AI
case SCHED_AISCRIPT:
{
ASSERT( m_pCine != NULL );
if ( !m_pCine )
{
ALERT( at_aiconsole, "Script failed for %s\n", STRING(pev->classname) );
CineCleanup();
return GetScheduleOfType( SCHED_IDLE_STAND );
}
// else
// ALERT( at_aiconsole, "Starting script %s for %s\n", STRING( m_pCine->m_iszPlay ), STRING(pev->classname) );
switch ( m_pCine->m_fMoveTo )
{
case 0:
case 4:
return slWaitScript;
case 1:
return slWalkToScript;
case 2:
return slRunToScript;
case 5:
return slFaceScript;
}
break;
}
case SCHED_IDLE_STAND:
{
if ( RANDOM_LONG(0,14) == 0 && FCanActiveIdle() )
{
return &slActiveIdle[ 0 ];
}
return &slIdleStand[ 0 ];
}
case SCHED_IDLE_WALK:
{
return &slIdleWalk[ 0 ];
}
case SCHED_WAIT_TRIGGER:
{
return &slIdleTrigger[ 0 ];
}
case SCHED_WAKE_ANGRY:
{
return &slWakeAngry[ 0 ];
}
case SCHED_ALERT_FACE:
{
return &slAlertFace[ 0 ];
}
case SCHED_ALERT_STAND:
{
return &slAlertStand[ 0 ];
}
case SCHED_COMBAT_STAND:
{
return &slCombatStand[ 0 ];
}
case SCHED_COMBAT_FACE:
{
return &slCombatFace[ 0 ];
}
case SCHED_CHASE_ENEMY:
{
return &slChaseEnemy[ 0 ];
}
case SCHED_CHASE_ENEMY_FAILED:
{
return &slFail[ 0 ];
}
case SCHED_SMALL_FLINCH:
{
return &slSmallFlinch[ 0 ];
}
case SCHED_ALERT_SMALL_FLINCH:
{
return &slAlertSmallFlinch[ 0 ];
}
case SCHED_RELOAD:
{
return &slReload[ 0 ];
}
case SCHED_ARM_WEAPON:
{
return &slArmWeapon[ 0 ];
}
case SCHED_STANDOFF:
{
return &slStandoff[ 0 ];
}
case SCHED_RANGE_ATTACK1:
{
return &slRangeAttack1[ 0 ];
}
case SCHED_RANGE_ATTACK2:
{
return &slRangeAttack2[ 0 ];
}
case SCHED_MELEE_ATTACK1:
{
return &slPrimaryMeleeAttack[ 0 ];
}
case SCHED_MELEE_ATTACK2:
{
return &slSecondaryMeleeAttack[ 0 ];
}
case SCHED_SPECIAL_ATTACK1:
{
return &slSpecialAttack1[ 0 ];
}
case SCHED_SPECIAL_ATTACK2:
{
return &slSpecialAttack2[ 0 ];
}
case SCHED_TAKE_COVER_FROM_BEST_SOUND:
{
return &slTakeCoverFromBestSound[ 0 ];
}
case SCHED_TAKE_COVER_FROM_ENEMY:
{
return &slTakeCoverFromEnemy[ 0 ];
}
case SCHED_COWER:
{
return &slCower[ 0 ];
}
case SCHED_AMBUSH:
{
return &slAmbush[ 0 ];
}
case SCHED_BARNACLE_VICTIM_GRAB:
{
return &slBarnacleVictimGrab[ 0 ];
}
case SCHED_BARNACLE_VICTIM_CHOMP:
{
return &slBarnacleVictimChomp[ 0 ];
}
case SCHED_INVESTIGATE_SOUND:
{
return &slInvestigateSound[ 0 ];
}
case SCHED_DIE:
{
return &slDie[ 0 ];
}
case SCHED_TAKE_COVER_FROM_ORIGIN:
{
return &slTakeCoverFromOrigin[ 0 ];
}
case SCHED_VICTORY_DANCE:
{
return &slVictoryDance[ 0 ];
}
case SCHED_FAIL:
{
return slFail;
}
default:
{
ALERT ( at_console, "GetScheduleOfType()\nNo CASE for Schedule Type %d!\n", Type );
return &slIdleStand[ 0 ];
break;
}
}
return NULL;
}