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 )
{
// ditto hgrunt.cpp
/*
if ( strcmp(STRING(pTarget->pev->model), "models/hgrunt.mdl") == 0 )
{
return R_NM;
}
*/
return CMBaseMonster :: IRelationship( pTarget );
}
@@ -313,6 +316,11 @@ void CMAGrunt :: PainSound ( 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;
}

View File

@@ -118,7 +118,15 @@ void CMApache::Precache( void )
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 )
{

View File

@@ -186,6 +186,11 @@ int CMBarney :: ISoundMask ( 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;
}

View File

@@ -299,6 +299,11 @@ void CMBigMomma :: KeyValue( KeyValueData *pkvd )
//=========================================================
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;
}

View File

@@ -357,6 +357,11 @@ BOOL CMBullsquid :: FValidateHintType ( short sHint )
//=========================================================
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;
}

View File

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

View File

@@ -81,6 +81,11 @@ const char *CMController::pDeathSounds[] =
//=========================================================
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;
}

View File

@@ -624,6 +624,11 @@ void CMGargantua :: PrescheduleThink( 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;
}

View File

@@ -88,6 +88,11 @@ int CMHAssassin :: ISoundMask ( 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;
}

View File

@@ -119,6 +119,11 @@ const char *CMHeadCrab::pBiteSounds[] =
//=========================================================
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;
}

View File

@@ -174,12 +174,15 @@ void CMHGrunt :: SpeakSentence( void )
//=========================================================
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 ))
{
return R_NM;
}
*/
return CMBaseMonster::IRelationship( pTarget );
}
@@ -596,6 +599,11 @@ void CMHGrunt :: CheckAmmo ( 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;
}

View File

@@ -126,13 +126,23 @@ int CMHornet::IRelationship ( CMBaseEntity *pTarget )
//=========================================================
int CMHornet::Classify ( void )
{
/*
if ( pev->owner && pev->owner->v.flags & FL_CLIENT)
{
return CLASS_PLAYER_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 )
{
if ( m_iClassifyOverride == -1 ) // helper
return CLASS_NONE;
else if ( m_iClassifyOverride > 0 )
return m_iClassifyOverride; // override
return CLASS_ALIEN_MONSTER;
}

View File

@@ -67,6 +67,11 @@ const char *CMISlave::pDeathSounds[] =
//=========================================================
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;
}

View File

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

View File

@@ -517,6 +517,11 @@ void CMScientist :: RunTask( Task_t *pTask )
//=========================================================
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;
}

View File

@@ -47,6 +47,12 @@ float CMSqueakGrenade::m_flNextBounceSoundTime = 0;
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;
}

View File

@@ -992,7 +992,15 @@ int CMBaseTurret::MoveTurret(void)
int CMBaseTurret::Classify ( void )
{
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;
}

View File

@@ -82,6 +82,11 @@ const char *CMZombie::pPainSounds[] =
//=========================================================
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;
}