/*** * * 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::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; }