mirror of
https://github.com/YGGverse/hlsdk-portable.git
synced 2025-02-11 14:34:22 +00:00
Add monster_massn implementation.
This commit is contained in:
parent
f3966a31fe
commit
84f4fcab9c
1672
dlls/CAd/massn.cpp
Normal file
1672
dlls/CAd/massn.cpp
Normal file
File diff suppressed because it is too large
Load Diff
@ -131,6 +131,7 @@ set (SVDLL_SOURCES
|
|||||||
CAd/eagle.cpp
|
CAd/eagle.cpp
|
||||||
CAd/helmet.cpp
|
CAd/helmet.cpp
|
||||||
CAd/gonome.cpp
|
CAd/gonome.cpp
|
||||||
|
CAd/massn.cpp
|
||||||
CAd/otis.cpp
|
CAd/otis.cpp
|
||||||
../pm_shared/pm_debug.c
|
../pm_shared/pm_debug.c
|
||||||
../pm_shared/pm_math.c
|
../pm_shared/pm_math.c
|
||||||
|
165
dlls/hgrunt.cpp
165
dlls/hgrunt.cpp
@ -40,152 +40,12 @@
|
|||||||
#include "soundent.h"
|
#include "soundent.h"
|
||||||
#include "effects.h"
|
#include "effects.h"
|
||||||
#include "customentity.h"
|
#include "customentity.h"
|
||||||
|
#include "hgrunt.h"
|
||||||
|
|
||||||
int g_fGruntQuestion; // true if an idle grunt asked a question. Cleared when someone answers.
|
int g_fGruntQuestion; // true if an idle grunt asked a question. Cleared when someone answers.
|
||||||
|
|
||||||
extern DLL_GLOBAL int g_iSkillLevel;
|
extern DLL_GLOBAL int g_iSkillLevel;
|
||||||
|
|
||||||
//=========================================================
|
|
||||||
// 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 )
|
|
||||||
|
|
||||||
class CHGrunt : public CSquadMonster
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
void Spawn( void );
|
|
||||||
void Precache( void );
|
|
||||||
void SetYawSpeed( void );
|
|
||||||
int Classify( void );
|
|
||||||
int ISoundMask( void );
|
|
||||||
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 );
|
|
||||||
void DeathSound( void );
|
|
||||||
void PainSound( void );
|
|
||||||
void IdleSound( void );
|
|
||||||
Vector GetGunPosition( void );
|
|
||||||
void Shoot( void );
|
|
||||||
void Shotgun( void );
|
|
||||||
void PrescheduleThink( void );
|
|
||||||
void GibMonster( void );
|
|
||||||
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 );
|
|
||||||
|
|
||||||
int IRelationship( CBaseEntity *pTarget );
|
|
||||||
|
|
||||||
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[];
|
|
||||||
};
|
|
||||||
|
|
||||||
LINK_ENTITY_TO_CLASS( monster_human_grunt, CHGrunt )
|
LINK_ENTITY_TO_CLASS( monster_human_grunt, CHGrunt )
|
||||||
|
|
||||||
TYPEDESCRIPTION CHGrunt::m_SaveData[] =
|
TYPEDESCRIPTION CHGrunt::m_SaveData[] =
|
||||||
@ -217,18 +77,6 @@ const char *CHGrunt::pGruntSentences[] =
|
|||||||
"HG_TAUNT", // say rude things
|
"HG_TAUNT", // say rude things
|
||||||
};
|
};
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
//=========================================================
|
//=========================================================
|
||||||
// Speak Sentence - say your cued up sentence.
|
// Speak Sentence - say your cued up sentence.
|
||||||
//
|
//
|
||||||
@ -262,7 +110,7 @@ void CHGrunt::SpeakSentence( void )
|
|||||||
//=========================================================
|
//=========================================================
|
||||||
int CHGrunt::IRelationship( CBaseEntity *pTarget )
|
int CHGrunt::IRelationship( CBaseEntity *pTarget )
|
||||||
{
|
{
|
||||||
if( FClassnameIs( pTarget->pev, "monster_alien_grunt" ) || ( FClassnameIs( pTarget->pev, "monster_gargantua" ) ) )
|
if( FClassnameIs( pTarget->pev, "monster_alien_grunt" ) || FClassnameIs( pTarget->pev, "monster_gargantua" ) || FClassnameIs( pTarget->pev, "monster_massn" ) )
|
||||||
{
|
{
|
||||||
return R_NM;
|
return R_NM;
|
||||||
}
|
}
|
||||||
@ -2344,15 +2192,6 @@ Schedule_t *CHGrunt::GetScheduleOfType( int Type )
|
|||||||
// repelling down a line.
|
// repelling down a line.
|
||||||
//=========================================================
|
//=========================================================
|
||||||
|
|
||||||
class CHGruntRepel : public CBaseMonster
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
void Spawn( void );
|
|
||||||
void Precache( void );
|
|
||||||
void EXPORT RepelUse ( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
|
||||||
int m_iSpriteTexture; // Don't save, precache
|
|
||||||
};
|
|
||||||
|
|
||||||
LINK_ENTITY_TO_CLASS( monster_grunt_repel, CHGruntRepel )
|
LINK_ENTITY_TO_CLASS( monster_grunt_repel, CHGruntRepel )
|
||||||
|
|
||||||
void CHGruntRepel::Spawn( void )
|
void CHGruntRepel::Spawn( void )
|
||||||
|
188
dlls/hgrunt.h
Normal file
188
dlls/hgrunt.h
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
/***
|
||||||
|
*
|
||||||
|
* 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
|
Loading…
x
Reference in New Issue
Block a user