Add "classify" keyvalue to override monster classification.

This commit is contained in:
Julian
2020-06-03 13:57:06 -03:00
parent 1e68434df5
commit 6d4a608793
19 changed files with 116 additions and 7 deletions

View File

@@ -125,11 +125,14 @@ const char *CMAGrunt::pAlertSounds[] =
//========================================================= //=========================================================
int CMAGrunt::IRelationship ( CMBaseEntity *pTarget ) int CMAGrunt::IRelationship ( CMBaseEntity *pTarget )
{ {
// ditto hgrunt.cpp
/*
if ( strcmp(STRING(pTarget->pev->model), "models/hgrunt.mdl") == 0 ) if ( strcmp(STRING(pTarget->pev->model), "models/hgrunt.mdl") == 0 )
{ {
return R_NM; return R_NM;
} }
*/
return CMBaseMonster :: IRelationship( pTarget ); return CMBaseMonster :: IRelationship( pTarget );
} }
@@ -313,6 +316,11 @@ void CMAGrunt :: PainSound ( void )
//========================================================= //=========================================================
int CMAGrunt :: Classify ( void ) int CMAGrunt :: Classify ( void )
{ {
if ( m_iClassifyOverride == -1 ) // helper
return CLASS_NONE;
else if ( m_iClassifyOverride > 0 )
return m_iClassifyOverride; // override
return CLASS_ALIEN_MILITARY; return CLASS_ALIEN_MILITARY;
} }

View File

@@ -118,7 +118,15 @@ void CMApache::Precache( void )
apache_rocket.Precache(); apache_rocket.Precache();
} }
int CMApache :: Classify ( void )
{
if ( m_iClassifyOverride == -1 ) // helper
return CLASS_NONE;
else if ( m_iClassifyOverride > 0 )
return m_iClassifyOverride; // override
return CLASS_HUMAN_MILITARY;
}
void CMApache::NullThink( void ) void CMApache::NullThink( void )
{ {

View File

@@ -186,6 +186,11 @@ int CMBarney :: ISoundMask ( void)
//========================================================= //=========================================================
int CMBarney :: Classify ( void ) int CMBarney :: Classify ( void )
{ {
if ( m_iClassifyOverride == -1 ) // helper
return CLASS_NONE;
else if ( m_iClassifyOverride > 0 )
return m_iClassifyOverride; // override
return CLASS_PLAYER_ALLY; return CLASS_PLAYER_ALLY;
} }

View File

@@ -299,6 +299,11 @@ void CMBigMomma :: KeyValue( KeyValueData *pkvd )
//========================================================= //=========================================================
int CMBigMomma :: Classify ( void ) int CMBigMomma :: Classify ( void )
{ {
if ( m_iClassifyOverride == -1 ) // helper
return CLASS_NONE;
else if ( m_iClassifyOverride > 0 )
return m_iClassifyOverride; // override
return CLASS_ALIEN_MONSTER; return CLASS_ALIEN_MONSTER;
} }

View File

@@ -357,6 +357,11 @@ BOOL CMBullsquid :: FValidateHintType ( short sHint )
//========================================================= //=========================================================
int CMBullsquid :: Classify ( void ) int CMBullsquid :: Classify ( void )
{ {
if ( m_iClassifyOverride == -1 ) // helper
return CLASS_NONE;
else if ( m_iClassifyOverride > 0 )
return m_iClassifyOverride; // override
return CLASS_ALIEN_MONSTER; return CLASS_ALIEN_MONSTER;
} }

View File

@@ -103,6 +103,7 @@ public:
Vector m_HackedGunPos; // HACK until we can query end of gun Vector m_HackedGunPos; // HACK until we can query end of gun
string_t m_szMonsterName; // Monster name to display on HUD string_t m_szMonsterName; // Monster name to display on HUD
int m_iClassifyOverride; // Overriden classification for this monster
void KeyValue( KeyValueData *pkvd ); void KeyValue( KeyValueData *pkvd );
@@ -794,7 +795,7 @@ class CMApache : public CMBaseMonster
public: public:
void Spawn( void ); void Spawn( void );
void Precache( void ); void Precache( void );
int Classify( void ) { return CLASS_HUMAN_MILITARY; }; int Classify( void );
int BloodColor( void ) { return DONT_BLEED; } int BloodColor( void ) { return DONT_BLEED; }
void Killed( entvars_t *pevAttacker, int iGib ); void Killed( entvars_t *pevAttacker, int iGib );
void GibMonster( void ); void GibMonster( void );

View File

@@ -81,6 +81,11 @@ const char *CMController::pDeathSounds[] =
//========================================================= //=========================================================
int CMController :: Classify ( void ) int CMController :: Classify ( void )
{ {
if ( m_iClassifyOverride == -1 ) // helper
return CLASS_NONE;
else if ( m_iClassifyOverride > 0 )
return m_iClassifyOverride; // override
return CLASS_ALIEN_MILITARY; return CLASS_ALIEN_MILITARY;
} }

View File

@@ -624,6 +624,11 @@ void CMGargantua :: PrescheduleThink( void )
//========================================================= //=========================================================
int CMGargantua :: Classify ( void ) int CMGargantua :: Classify ( void )
{ {
if ( m_iClassifyOverride == -1 ) // helper
return CLASS_NONE;
else if ( m_iClassifyOverride > 0 )
return m_iClassifyOverride; // override
return CLASS_ALIEN_MONSTER; return CLASS_ALIEN_MONSTER;
} }

View File

@@ -88,6 +88,11 @@ int CMHAssassin :: ISoundMask ( void)
//========================================================= //=========================================================
int CMHAssassin :: Classify ( void ) int CMHAssassin :: Classify ( void )
{ {
if ( m_iClassifyOverride == -1 ) // helper
return CLASS_NONE;
else if ( m_iClassifyOverride > 0 )
return m_iClassifyOverride; // override
return CLASS_HUMAN_MILITARY; return CLASS_HUMAN_MILITARY;
} }

View File

@@ -119,6 +119,11 @@ const char *CMHeadCrab::pBiteSounds[] =
//========================================================= //=========================================================
int CMHeadCrab :: Classify ( void ) int CMHeadCrab :: Classify ( void )
{ {
if ( m_iClassifyOverride == -1 ) // helper
return CLASS_NONE;
else if ( m_iClassifyOverride > 0 )
return m_iClassifyOverride; // override
return CLASS_ALIEN_PREY; return CLASS_ALIEN_PREY;
} }

View File

@@ -174,12 +174,15 @@ void CMHGrunt :: SpeakSentence( void )
//========================================================= //=========================================================
int CMHGrunt::IRelationship ( CMBaseEntity *pTarget ) int CMHGrunt::IRelationship ( CMBaseEntity *pTarget )
{ {
if (( strcmp(STRING(pTarget->pev->model), "models/agrunt.mdl") == 0 ) || // on single player, forcing R_NM makes sense.
// on multiplayer, a custom classification will cause misbehaviour.
/*
if (( strcmp(STRING(pTarget->pev->model), "models/agrunt.mdl") == 0 ) ||
( strcmp(STRING(pTarget->pev->model), "models/garg.mdl") == 0 )) ( strcmp(STRING(pTarget->pev->model), "models/garg.mdl") == 0 ))
{ {
return R_NM; return R_NM;
} }
*/
return CMBaseMonster::IRelationship( pTarget ); return CMBaseMonster::IRelationship( pTarget );
} }
@@ -596,6 +599,11 @@ void CMHGrunt :: CheckAmmo ( void )
//========================================================= //=========================================================
int CMHGrunt :: Classify ( void ) int CMHGrunt :: Classify ( void )
{ {
if ( m_iClassifyOverride == -1 ) // helper
return CLASS_NONE;
else if ( m_iClassifyOverride > 0 )
return m_iClassifyOverride; // override
return CLASS_HUMAN_MILITARY; return CLASS_HUMAN_MILITARY;
} }

View File

@@ -126,13 +126,23 @@ int CMHornet::IRelationship ( CMBaseEntity *pTarget )
//========================================================= //=========================================================
int CMHornet::Classify ( void ) int CMHornet::Classify ( void )
{ {
/*
if ( pev->owner && pev->owner->v.flags & FL_CLIENT) if ( pev->owner && pev->owner->v.flags & FL_CLIENT)
{ {
return CLASS_PLAYER_BIOWEAPON; return CLASS_PLAYER_BIOWEAPON;
} }
return CLASS_ALIEN_BIOWEAPON; return CLASS_ALIEN_BIOWEAPON;
*/
// Ensure classify is consistent with the owner, in the event
// it's classification was overriden.
if ( pev->owner == NULL )
return CLASS_ALIEN_BIOWEAPON;
// Ain't this going to make the hornets code "slow"?
CMBaseMonster *pOwner = GetClassPtr((CMBaseMonster *)VARS(pev->owner));
return pOwner->Classify();
} }
//========================================================= //=========================================================

View File

@@ -78,6 +78,11 @@ enum
//========================================================= //=========================================================
int CMHoundeye :: Classify ( void ) int CMHoundeye :: Classify ( void )
{ {
if ( m_iClassifyOverride == -1 ) // helper
return CLASS_NONE;
else if ( m_iClassifyOverride > 0 )
return m_iClassifyOverride; // override
return CLASS_ALIEN_MONSTER; return CLASS_ALIEN_MONSTER;
} }

View File

@@ -67,6 +67,11 @@ const char *CMISlave::pDeathSounds[] =
//========================================================= //=========================================================
int CMISlave :: Classify ( void ) int CMISlave :: Classify ( void )
{ {
if ( m_iClassifyOverride == -1 ) // helper
return CLASS_NONE;
else if ( m_iClassifyOverride > 0 )
return m_iClassifyOverride; // override
return CLASS_ALIEN_MILITARY; return CLASS_ALIEN_MILITARY;
} }

View File

@@ -2514,6 +2514,11 @@ void CMBaseMonster :: KeyValue( KeyValueData *pkvd )
m_szMonsterName = ALLOC_STRING( pkvd->szValue ); m_szMonsterName = ALLOC_STRING( pkvd->szValue );
pkvd->fHandled = TRUE; pkvd->fHandled = TRUE;
} }
else if (FStrEq(pkvd->szKeyName, "classify"))
{
m_iClassifyOverride = atoi( pkvd->szValue );
pkvd->fHandled = TRUE;
}
else else
{ {
CMBaseToggle::KeyValue( pkvd ); CMBaseToggle::KeyValue( pkvd );

View File

@@ -517,6 +517,11 @@ void CMScientist :: RunTask( Task_t *pTask )
//========================================================= //=========================================================
int CMScientist :: Classify ( void ) int CMScientist :: Classify ( void )
{ {
if ( m_iClassifyOverride == -1 ) // helper
return CLASS_NONE;
else if ( m_iClassifyOverride > 0 )
return m_iClassifyOverride; // override
return CLASS_HUMAN_PASSIVE; return CLASS_HUMAN_PASSIVE;
} }

View File

@@ -47,6 +47,12 @@ float CMSqueakGrenade::m_flNextBounceSoundTime = 0;
int CMSqueakGrenade :: Classify ( void ) int CMSqueakGrenade :: Classify ( void )
{ {
// E
if ( m_iClassifyOverride == -1 ) // helper
return CLASS_NONE;
else if ( m_iClassifyOverride > 0 )
return m_iClassifyOverride; // override
return CLASS_ALIEN_MONSTER; return CLASS_ALIEN_MONSTER;
} }

View File

@@ -992,7 +992,15 @@ int CMBaseTurret::MoveTurret(void)
int CMBaseTurret::Classify ( void ) int CMBaseTurret::Classify ( void )
{ {
if (m_iOn || m_iAutoStart) if (m_iOn || m_iAutoStart)
return CLASS_MACHINE; {
if ( m_iClassifyOverride == -1 ) // helper
return CLASS_NONE;
else if ( m_iClassifyOverride > 0 )
return m_iClassifyOverride; // override
return CLASS_MACHINE;
}
return CLASS_NONE; return CLASS_NONE;
} }

View File

@@ -82,6 +82,11 @@ const char *CMZombie::pPainSounds[] =
//========================================================= //=========================================================
int CMZombie :: Classify ( void ) int CMZombie :: Classify ( void )
{ {
if ( m_iClassifyOverride == -1 ) // helper
return CLASS_NONE;
else if ( m_iClassifyOverride > 0 )
return m_iClassifyOverride; // override
return CLASS_ALIEN_MONSTER; return CLASS_ALIEN_MONSTER;
} }