From 3a755aaba748178ae753c7d530b1c1d959959d28 Mon Sep 17 00:00:00 2001 From: Marco Cawthorne Date: Sat, 22 Apr 2023 01:05:27 -0700 Subject: [PATCH] NSSurfacePropEntity: add SetCanBleed() and CanBleed() methods to abstract the old iBleeds field. --- src/client/modelevent.qc | 23 +++++++++++++++++++---- src/client/view.qc | 4 ++-- src/gs-entbase/server/monster_generic.qc | 2 +- src/server/NSTraceAttack.h | 2 +- src/server/NSTraceAttack.qc | 6 +++--- src/shared/NSClientPlayer.qc | 4 ++-- src/shared/NSMonster.qc | 2 +- src/shared/NSSurfacePropEntity.h | 5 +++++ src/shared/NSSurfacePropEntity.qc | 12 ++++++++++++ 9 files changed, 46 insertions(+), 14 deletions(-) diff --git a/src/client/modelevent.qc b/src/client/modelevent.qc index f2c0d144..3385131b 100644 --- a/src/client/modelevent.qc +++ b/src/client/modelevent.qc @@ -14,6 +14,17 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +string +Event_DataToMuzzleflash(string dataString) +{ + float id = stof(substring(dataString, 0, 1)) - 1; + + if (id) + return strcat("sprites/muzzleflash", ftos(id), ".spr"); + else + return "sprites/muzzleflash.spr"; +} + /* ==================== Event_ProcessModel @@ -48,23 +59,27 @@ Event_ProcessModel(float flTimeStamp, int iCode, string strData) break; case 5001: /* muzzle flash on attachment 0 */ pSeat->m_eMuzzleflash.alpha = 1.0f; - pSeat->m_eMuzzleflash.scale = 0.5; + pSeat->m_eMuzzleflash.scale = 0.35; pSeat->m_eMuzzleflash.skin = pSeat->m_iVMBones; + setmodel(pSeat->m_eMuzzleflash, Event_DataToMuzzleflash(strData)); break; case 5011: /* muzzle flash on attachment 1 */ pSeat->m_eMuzzleflash.alpha = 1.0f; - pSeat->m_eMuzzleflash.scale = 0.5; + pSeat->m_eMuzzleflash.scale = 0.35; pSeat->m_eMuzzleflash.skin = pSeat->m_iVMBones + 1; + setmodel(pSeat->m_eMuzzleflash, Event_DataToMuzzleflash(strData)); break; case 5021: /* muzzle flash on attachment 2 */ pSeat->m_eMuzzleflash.alpha = 1.0f; - pSeat->m_eMuzzleflash.scale = 0.5; + pSeat->m_eMuzzleflash.scale = 0.35; pSeat->m_eMuzzleflash.skin = pSeat->m_iVMBones + 2; + setmodel(pSeat->m_eMuzzleflash, Event_DataToMuzzleflash(strData)); break; case 5031: /* muzzle flash on attachment 3 */ pSeat->m_eMuzzleflash.alpha = 1.0f; - pSeat->m_eMuzzleflash.scale = 0.5; + pSeat->m_eMuzzleflash.scale = 0.35; pSeat->m_eMuzzleflash.skin = pSeat->m_iVMBones + 3; + setmodel(pSeat->m_eMuzzleflash, Event_DataToMuzzleflash(strData)); break; default: print(sprintf("Unknown model event: %f %i %S\n", flTimeStamp, iCode, strData)); diff --git a/src/client/view.qc b/src/client/view.qc index 4f6e5193..fca0b9bd 100644 --- a/src/client/view.qc +++ b/src/client/view.qc @@ -138,9 +138,9 @@ muzzleflash, dynamic lights and so on appear void View_DrawViewModel(void) { - NSRenderableEntity m_eViewModel = pSeat->m_eViewModel; + NSRenderableEntity m_eViewModel = (NSRenderableEntity)pSeat->m_eViewModel; entity m_eMuzzleflash = pSeat->m_eMuzzleflash; - NSRenderableEntity m_eViewModelL = pSeat->m_eViewModelL; + NSRenderableEntity m_eViewModelL = (NSRenderableEntity)pSeat->m_eViewModelL; entity m_eMuzzleflashL = pSeat->m_eMuzzleflashL; player pl = __NULL__; diff --git a/src/gs-entbase/server/monster_generic.qc b/src/gs-entbase/server/monster_generic.qc index d94b2ab3..24c94b38 100644 --- a/src/gs-entbase/server/monster_generic.qc +++ b/src/gs-entbase/server/monster_generic.qc @@ -66,6 +66,6 @@ monster_generic::Respawn(void) if (HasSpawnFlags(MGF_NONSOLID)) { takedamage = DAMAGE_NO; SetSolid(SOLID_NOT); - iBleeds = FALSE; + SetCanBleed(false); } } diff --git a/src/server/NSTraceAttack.h b/src/server/NSTraceAttack.h index f9773307..31e12f8e 100644 --- a/src/server/NSTraceAttack.h +++ b/src/server/NSTraceAttack.h @@ -28,7 +28,7 @@ NSTraceAttack:NSIO { private: /* multi-part damage */ - entity m_eMultiTarget; + NSSurfacePropEntity m_eMultiTarget; int m_iMultiValue; int m_iMultiBody; diff --git a/src/server/NSTraceAttack.qc b/src/server/NSTraceAttack.qc index b08ac2a2..ceab37d1 100644 --- a/src/server/NSTraceAttack.qc +++ b/src/server/NSTraceAttack.qc @@ -66,7 +66,7 @@ NSTraceAttack::Restore(string strKey, string strValue) { switch (strKey) { case "m_eMultiTarget": - m_eMultiTarget = ReadEntity(strValue); + m_eMultiTarget = (NSSurfacePropEntity)ReadEntity(strValue); break; case "m_iMultiValue": m_iMultiValue = ReadInt(strValue); @@ -123,7 +123,7 @@ NSTraceAttack::_ApplyDamage(void) return; /* the location _could_ be more accurate... */ - if (m_eMultiTarget.iBleeds == 1) { + if (m_eMultiTarget.CanBleed() == true) { FX_Blood(trace_endpos, [0.5,0,0]); } @@ -235,7 +235,7 @@ NSTraceAttack::_FireSingle(vector vecPos, vector vecAngles, float flDamage, floa if (trace_ent.takedamage == DAMAGE_YES) { if (trace_ent != m_eMultiTarget) { _ApplyDamage(); - m_eMultiTarget = trace_ent; + m_eMultiTarget = (NSSurfacePropEntity)trace_ent; m_iMultiValue = flDamage; } else { m_iMultiValue += flDamage; diff --git a/src/shared/NSClientPlayer.qc b/src/shared/NSClientPlayer.qc index 8af87b61..8cd988b0 100644 --- a/src/shared/NSClientPlayer.qc +++ b/src/shared/NSClientPlayer.qc @@ -832,7 +832,7 @@ NSClientPlayer::Death(void) SetVelocity([0,0,0]); SetGravity(1.0f); customphysics = Empty; - iBleeds = FALSE; + SetCanBleed(false); setsize(this, [0,0,0], [0,0,0]); forceinfokey(this, "*deaths", ftos(deaths)); forceinfokey(this, "*dead", "1"); @@ -867,7 +867,7 @@ NSClientPlayer::MakePlayer(void) SetGravity(1.0f); SendFlags = UPDATE_ALL; customphysics = Empty; - iBleeds = TRUE; + SetCanBleed(true); scale = 1.0f; SetSize(VEC_HULL_MIN, VEC_HULL_MAX); forceinfokey(this, "*spectator", "0"); diff --git a/src/shared/NSMonster.qc b/src/shared/NSMonster.qc index 8798da77..85a09f65 100644 --- a/src/shared/NSMonster.qc +++ b/src/shared/NSMonster.qc @@ -886,7 +886,7 @@ NSMonster::Respawn(void) SetHealth(base_health); m_eEnemy = __NULL__; m_iFlags = 0x0; - iBleeds = TRUE; + SetCanBleed(true); customphysics = Physics; SetAngles(v_angle); diff --git a/src/shared/NSSurfacePropEntity.h b/src/shared/NSSurfacePropEntity.h index 15dfc77e..cf9f6367 100644 --- a/src/shared/NSSurfacePropEntity.h +++ b/src/shared/NSSurfacePropEntity.h @@ -109,6 +109,11 @@ public: /** Returns whether or not the entity is alive. */ virtual bool IsAlive(void); + /** Sets whether the entity can bleed. */ + nonvirtual void SetCanBleed(bool); + /** Returns whether the entity can bleed. */ + nonvirtual bool CanBleed(void); + /* Generic Damage */ /** Sets whether the entity can take damage */ nonvirtual void SetTakedamage(float); diff --git a/src/shared/NSSurfacePropEntity.qc b/src/shared/NSSurfacePropEntity.qc index 6242fa93..c51b5c1d 100644 --- a/src/shared/NSSurfacePropEntity.qc +++ b/src/shared/NSSurfacePropEntity.qc @@ -64,6 +64,18 @@ NSSurfacePropEntity::IsAlive(void) return (health > 0) ? true : false; } +void +NSSurfacePropEntity::SetCanBleed(bool bleedValue) +{ + iBleeds = bleedValue; +} + +bool +NSSurfacePropEntity::CanBleed(void) +{ + return iBleeds; +} + #if 0 typedef enum {