From 211a28692b6220aafa335a256049290fcbc00aa1 Mon Sep 17 00:00:00 2001 From: Marco Hladik Date: Fri, 17 Sep 2021 00:41:58 +0200 Subject: [PATCH] CBaseMonster: Add FALLING flag, and FallNoise() method so monsters/npcs can specify what to do/play when they start falling. --- src/gs-entbase/server/basemonster.h | 4 +++- src/gs-entbase/server/basemonster.qc | 15 ++++++++++++++- src/gs-entbase/server/basenpc.h | 1 - src/gs-entbase/server/basenpc.qc | 10 +++++++--- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/gs-entbase/server/basemonster.h b/src/gs-entbase/server/basemonster.h index d8b40424..ae745ff4 100644 --- a/src/gs-entbase/server/basemonster.h +++ b/src/gs-entbase/server/basemonster.h @@ -36,7 +36,8 @@ typedef enumflags MSF_WAITFORSCRIPT, MSF_PREDISASTER, MSF_FADECORPSE, - MSF_MULTIPLAYER + MSF_MULTIPLAYER, + MSF_FALLING } monsterFlag_t; /* movement states */ @@ -139,6 +140,7 @@ class CBaseMonster:CBaseEntity virtual void(void) Death; virtual void(void) Physics; virtual void(void) IdleNoise; + virtual void(void) FallNoise; virtual void(void) Gib; virtual void(string) Sound; virtual void(string, string) SpawnKey; diff --git a/src/gs-entbase/server/basemonster.qc b/src/gs-entbase/server/basemonster.qc index 497c8132..643b2c12 100644 --- a/src/gs-entbase/server/basemonster.qc +++ b/src/gs-entbase/server/basemonster.qc @@ -56,10 +56,14 @@ CBaseMonster::Gib(void) Hide(); } +void +CBaseMonster::FallNoise(void) +{ +} + void CBaseMonster::IdleNoise(void) { - } int @@ -462,6 +466,15 @@ CBaseMonster::Physics(void) } } + if (velocity[2] < -100) { + if (!(m_iFlags & MSF_FALLING)) + FallNoise(); + + m_iFlags |= MSF_FALLING; + } else { + m_iFlags &= ~MSF_FALLING; + } + /* support for think/nextthink */ if (think && nextthink > 0.0f) { if (nextthink < time) { diff --git a/src/gs-entbase/server/basenpc.h b/src/gs-entbase/server/basenpc.h index 42916786..b6dbf984 100644 --- a/src/gs-entbase/server/basenpc.h +++ b/src/gs-entbase/server/basenpc.h @@ -24,7 +24,6 @@ enumflags MONSTER_USED, MONSTER_FEAR, MONSTER_METPLAYER, - MONSTER_FALLING, MONSTER_CANFOLLOW }; diff --git a/src/gs-entbase/server/basenpc.qc b/src/gs-entbase/server/basenpc.qc index dc1491b2..aa764792 100644 --- a/src/gs-entbase/server/basenpc.qc +++ b/src/gs-entbase/server/basenpc.qc @@ -416,10 +416,14 @@ CBaseNPC::Physics(void) SetOrigin(origin); } - if (!(flags & FL_ONGROUND) && velocity[2] < -100) { - m_iFlags |= MONSTER_FALLING; + if (velocity[2] < -100) { + if (!(m_iFlags & MSF_FALLING)) { + FallNoise(); + } + + m_iFlags |= MSF_FALLING; } else { - m_iFlags &= ~MONSTER_FALLING; + m_iFlags &= ~MSF_FALLING; } /* support for think/nextthink */