You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
6.2 KiB
189 lines
6.2 KiB
7 years ago
|
/***
|
||
|
*
|
||
|
* Copyright (c) 1996-2001, 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.
|
||
|
*
|
||
|
****/
|
||
|
#ifndef HGRUNT_H
|
||
|
#define HGRUNT_H
|
||
|
|
||
|
//=========================================================
|
||
|
// monster-specific DEFINE's
|
||
|
//=========================================================
|
||
|
#define GRUNT_CLIP_SIZE 36 // how many bullets in a clip? - NOTE: 3 round burst sound, so keep as 3 * x!
|
||
|
#define GRUNT_VOL 0.35 // volume of grunt sounds
|
||
|
#define GRUNT_ATTN ATTN_NORM // attenutation of grunt sentences
|
||
|
#define HGRUNT_LIMP_HEALTH 20
|
||
|
#define HGRUNT_DMG_HEADSHOT ( DMG_BULLET | DMG_CLUB ) // damage types that can kill a grunt with a single headshot.
|
||
|
#define HGRUNT_NUM_HEADS 2 // how many grunt heads are there?
|
||
|
#define HGRUNT_MINIMUM_HEADSHOT_DAMAGE 15 // must do at least this much damage in one shot to head to score a headshot kill
|
||
|
#define HGRUNT_SENTENCE_VOLUME (float)0.35 // volume of grunt sentences
|
||
|
|
||
|
#define HGRUNT_9MMAR ( 1 << 0)
|
||
|
#define HGRUNT_HANDGRENADE ( 1 << 1)
|
||
|
#define HGRUNT_GRENADELAUNCHER ( 1 << 2)
|
||
|
#define HGRUNT_SHOTGUN ( 1 << 3)
|
||
|
|
||
|
#define HEAD_GROUP 1
|
||
|
#define HEAD_GRUNT 0
|
||
|
#define HEAD_COMMANDER 1
|
||
|
#define HEAD_SHOTGUN 2
|
||
|
#define HEAD_M203 3
|
||
|
#define GUN_GROUP 2
|
||
|
#define GUN_MP5 0
|
||
|
#define GUN_SHOTGUN 1
|
||
|
#define GUN_NONE 2
|
||
|
|
||
|
//=========================================================
|
||
|
// Monster's Anim Events Go Here
|
||
|
//=========================================================
|
||
|
#define HGRUNT_AE_RELOAD ( 2 )
|
||
|
#define HGRUNT_AE_KICK ( 3 )
|
||
|
#define HGRUNT_AE_BURST1 ( 4 )
|
||
|
#define HGRUNT_AE_BURST2 ( 5 )
|
||
|
#define HGRUNT_AE_BURST3 ( 6 )
|
||
|
#define HGRUNT_AE_GREN_TOSS ( 7 )
|
||
|
#define HGRUNT_AE_GREN_LAUNCH ( 8 )
|
||
|
#define HGRUNT_AE_GREN_DROP ( 9 )
|
||
|
#define HGRUNT_AE_CAUGHT_ENEMY ( 10 ) // grunt established sight with an enemy (player only) that had previously eluded the squad.
|
||
|
#define HGRUNT_AE_DROP_GUN ( 11 ) // grunt (probably dead) is dropping his mp5.
|
||
|
|
||
|
//=========================================================
|
||
|
// monster-specific schedule types
|
||
|
//=========================================================
|
||
|
enum
|
||
|
{
|
||
|
SCHED_GRUNT_SUPPRESS = LAST_COMMON_SCHEDULE + 1,
|
||
|
SCHED_GRUNT_ESTABLISH_LINE_OF_FIRE,// move to a location to set up an attack against the enemy. (usually when a friendly is in the way).
|
||
|
SCHED_GRUNT_COVER_AND_RELOAD,
|
||
|
SCHED_GRUNT_SWEEP,
|
||
|
SCHED_GRUNT_FOUND_ENEMY,
|
||
|
SCHED_GRUNT_REPEL,
|
||
|
SCHED_GRUNT_REPEL_ATTACK,
|
||
|
SCHED_GRUNT_REPEL_LAND,
|
||
|
SCHED_GRUNT_WAIT_FACE_ENEMY,
|
||
|
SCHED_GRUNT_TAKECOVER_FAILED,// special schedule type that forces analysis of conditions and picks the best possible schedule to recover from this type of failure.
|
||
|
SCHED_GRUNT_ELOF_FAIL
|
||
|
};
|
||
|
|
||
|
//=========================================================
|
||
|
// monster-specific tasks
|
||
|
//=========================================================
|
||
|
enum
|
||
|
{
|
||
|
TASK_GRUNT_FACE_TOSS_DIR = LAST_COMMON_TASK + 1,
|
||
|
TASK_GRUNT_SPEAK_SENTENCE,
|
||
|
TASK_GRUNT_CHECK_FIRE
|
||
|
};
|
||
|
|
||
|
//=========================================================
|
||
|
// monster-specific conditions
|
||
|
//=========================================================
|
||
|
#define bits_COND_GRUNT_NOFIRE ( bits_COND_SPECIAL1 )
|
||
|
|
||
|
//=========================================================
|
||
|
// hgrunt
|
||
|
//=========================================================
|
||
|
class CHGrunt : public CSquadMonster
|
||
|
{
|
||
|
public:
|
||
|
virtual void Spawn(void);
|
||
|
virtual void Precache(void);
|
||
|
void SetYawSpeed(void);
|
||
|
virtual int Classify(void);
|
||
|
int ISoundMask(void);
|
||
|
virtual void HandleAnimEvent(MonsterEvent_t *pEvent);
|
||
|
BOOL FCanCheckAttacks(void);
|
||
|
BOOL CheckMeleeAttack1(float flDot, float flDist);
|
||
|
BOOL CheckRangeAttack1(float flDot, float flDist);
|
||
|
BOOL CheckRangeAttack2(float flDot, float flDist);
|
||
|
void CheckAmmo(void);
|
||
|
void SetActivity(Activity NewActivity);
|
||
|
void StartTask(Task_t *pTask);
|
||
|
void RunTask(Task_t *pTask);
|
||
|
virtual void DeathSound(void);
|
||
|
virtual void PainSound(void);
|
||
|
virtual void IdleSound(void);
|
||
|
Vector GetGunPosition(void);
|
||
|
void Shoot(void);
|
||
|
virtual void Shotgun(void);
|
||
|
void PrescheduleThink(void);
|
||
|
virtual void GibMonster(void);
|
||
|
virtual void SpeakSentence(void);
|
||
|
|
||
|
int Save(CSave &save);
|
||
|
int Restore(CRestore &restore);
|
||
|
|
||
|
CBaseEntity *Kick(void);
|
||
|
Schedule_t *GetSchedule(void);
|
||
|
Schedule_t *GetScheduleOfType(int Type);
|
||
|
void TraceAttack(entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType);
|
||
|
int TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType);
|
||
|
|
||
|
virtual int IRelationship(CBaseEntity *pTarget);
|
||
|
|
||
|
virtual BOOL FOkToSpeak(void);
|
||
|
void JustSpoke(void);
|
||
|
|
||
|
CUSTOM_SCHEDULES;
|
||
|
static TYPEDESCRIPTION m_SaveData[];
|
||
|
|
||
|
// checking the feasibility of a grenade toss is kind of costly, so we do it every couple of seconds,
|
||
|
// not every server frame.
|
||
|
float m_flNextGrenadeCheck;
|
||
|
float m_flNextPainTime;
|
||
|
float m_flLastEnemySightTime;
|
||
|
|
||
|
Vector m_vecTossVelocity;
|
||
|
|
||
|
BOOL m_fThrowGrenade;
|
||
|
BOOL m_fStanding;
|
||
|
BOOL m_fFirstEncounter;// only put on the handsign show in the squad's first encounter.
|
||
|
int m_cClipSize;
|
||
|
|
||
|
int m_voicePitch;
|
||
|
|
||
|
int m_iBrassShell;
|
||
|
int m_iShotgunShell;
|
||
|
|
||
|
int m_iSentence;
|
||
|
|
||
|
static const char *pGruntSentences[];
|
||
|
};
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
HGRUNT_SENT_NONE = -1,
|
||
|
HGRUNT_SENT_GREN = 0,
|
||
|
HGRUNT_SENT_ALERT,
|
||
|
HGRUNT_SENT_MONSTER,
|
||
|
HGRUNT_SENT_COVER,
|
||
|
HGRUNT_SENT_THROW,
|
||
|
HGRUNT_SENT_CHARGE,
|
||
|
HGRUNT_SENT_TAUNT
|
||
|
} HGRUNT_SENTENCE_TYPES;
|
||
|
|
||
|
//=========================================================
|
||
|
// CHGruntRepel - when triggered, spawns a monster_human_grunt
|
||
|
// repelling down a line.
|
||
|
//=========================================================
|
||
|
|
||
|
class CHGruntRepel : public CBaseMonster
|
||
|
{
|
||
|
public:
|
||
|
virtual void Spawn(void);
|
||
|
virtual void Precache(void);
|
||
|
virtual void EXPORT RepelUse(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value);
|
||
|
int m_iSpriteTexture; // Don't save, precache
|
||
|
};
|
||
|
|
||
|
#endif // HGRUNT_H
|