mirror of
https://github.com/YGGverse/hlsdk-portable.git
synced 2025-02-11 06:24:30 +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/helmet.cpp
|
||||
CAd/gonome.cpp
|
||||
CAd/massn.cpp
|
||||
CAd/otis.cpp
|
||||
../pm_shared/pm_debug.c
|
||||
../pm_shared/pm_math.c
|
||||
|
165
dlls/hgrunt.cpp
165
dlls/hgrunt.cpp
@ -40,152 +40,12 @@
|
||||
#include "soundent.h"
|
||||
#include "effects.h"
|
||||
#include "customentity.h"
|
||||
#include "hgrunt.h"
|
||||
|
||||
int g_fGruntQuestion; // true if an idle grunt asked a question. Cleared when someone answers.
|
||||
|
||||
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 )
|
||||
|
||||
TYPEDESCRIPTION CHGrunt::m_SaveData[] =
|
||||
@ -217,18 +77,6 @@ const char *CHGrunt::pGruntSentences[] =
|
||||
"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.
|
||||
//
|
||||
@ -262,7 +110,7 @@ void CHGrunt::SpeakSentence( void )
|
||||
//=========================================================
|
||||
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;
|
||||
}
|
||||
@ -2344,15 +2192,6 @@ Schedule_t *CHGrunt::GetScheduleOfType( int Type )
|
||||
// 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 )
|
||||
|
||||
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