diff --git a/src/dlls/agrunt.cpp b/src/dlls/agrunt.cpp index ae26fc8..2981c12 100644 --- a/src/dlls/agrunt.cpp +++ b/src/dlls/agrunt.cpp @@ -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; } diff --git a/src/dlls/apache.cpp b/src/dlls/apache.cpp index 554372b..7af6c0f 100644 --- a/src/dlls/apache.cpp +++ b/src/dlls/apache.cpp @@ -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 ) { diff --git a/src/dlls/barney.cpp b/src/dlls/barney.cpp index 673c7ee..188a488 100644 --- a/src/dlls/barney.cpp +++ b/src/dlls/barney.cpp @@ -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; } diff --git a/src/dlls/bigmomma.cpp b/src/dlls/bigmomma.cpp index 62a5175..ec89a27 100644 --- a/src/dlls/bigmomma.cpp +++ b/src/dlls/bigmomma.cpp @@ -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; } diff --git a/src/dlls/bullsquid.cpp b/src/dlls/bullsquid.cpp index 82c06e5..7af2538 100644 --- a/src/dlls/bullsquid.cpp +++ b/src/dlls/bullsquid.cpp @@ -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; } diff --git a/src/dlls/cmbasemonster.h b/src/dlls/cmbasemonster.h index cae8a1e..2428e68 100644 --- a/src/dlls/cmbasemonster.h +++ b/src/dlls/cmbasemonster.h @@ -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 ); diff --git a/src/dlls/controller.cpp b/src/dlls/controller.cpp index 1c70705..fcb8bf1 100644 --- a/src/dlls/controller.cpp +++ b/src/dlls/controller.cpp @@ -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; } diff --git a/src/dlls/gargantua.cpp b/src/dlls/gargantua.cpp index 3fc32b6..0602de5 100755 --- a/src/dlls/gargantua.cpp +++ b/src/dlls/gargantua.cpp @@ -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; } diff --git a/src/dlls/hassassin.cpp b/src/dlls/hassassin.cpp index e9cd210..91de38f 100644 --- a/src/dlls/hassassin.cpp +++ b/src/dlls/hassassin.cpp @@ -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; } diff --git a/src/dlls/headcrab.cpp b/src/dlls/headcrab.cpp index 341ac98..5d283e5 100644 --- a/src/dlls/headcrab.cpp +++ b/src/dlls/headcrab.cpp @@ -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; } diff --git a/src/dlls/hgrunt.cpp b/src/dlls/hgrunt.cpp index 4d8b4ac..687d061 100644 --- a/src/dlls/hgrunt.cpp +++ b/src/dlls/hgrunt.cpp @@ -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; } diff --git a/src/dlls/hornet.cpp b/src/dlls/hornet.cpp index fecd5e2..960e4f5 100644 --- a/src/dlls/hornet.cpp +++ b/src/dlls/hornet.cpp @@ -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(); } //========================================================= diff --git a/src/dlls/houndeye.cpp b/src/dlls/houndeye.cpp index bb198f9..5f1c4aa 100644 --- a/src/dlls/houndeye.cpp +++ b/src/dlls/houndeye.cpp @@ -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; } diff --git a/src/dlls/islave.cpp b/src/dlls/islave.cpp index f92733a..baad32b 100644 --- a/src/dlls/islave.cpp +++ b/src/dlls/islave.cpp @@ -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; } diff --git a/src/dlls/monsters.cpp b/src/dlls/monsters.cpp index 4ff1bbe..84cc378 100644 --- a/src/dlls/monsters.cpp +++ b/src/dlls/monsters.cpp @@ -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 ); diff --git a/src/dlls/scientist.cpp b/src/dlls/scientist.cpp index 2116b95..a28d72f 100644 --- a/src/dlls/scientist.cpp +++ b/src/dlls/scientist.cpp @@ -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; } diff --git a/src/dlls/squeakgrenade.cpp b/src/dlls/squeakgrenade.cpp index 4d62247..bcc60f0 100644 --- a/src/dlls/squeakgrenade.cpp +++ b/src/dlls/squeakgrenade.cpp @@ -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; } diff --git a/src/dlls/turret.cpp b/src/dlls/turret.cpp index 3e8c0c5..31b20ac 100755 --- a/src/dlls/turret.cpp +++ b/src/dlls/turret.cpp @@ -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; } diff --git a/src/dlls/zombie.cpp b/src/dlls/zombie.cpp index b8240c5..362747c 100644 --- a/src/dlls/zombie.cpp +++ b/src/dlls/zombie.cpp @@ -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; }