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