From 5f126516c69a8a39c1be556d5d6c693ece6e224e Mon Sep 17 00:00:00 2001 From: Marco Cawthorne Date: Fri, 11 Nov 2022 15:04:11 -0800 Subject: [PATCH] Server: Add new global g_dmg_vecLocation, which gives an approximate damage impact location. --- src/server/NSGameRules.qc | 1 + src/server/NSTraceAttack.qc | 4 +++- src/server/defs.h | 1 + src/shared/NSClientPlayer.qc | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/server/NSGameRules.qc b/src/server/NSGameRules.qc index 06b3a496..a136a5f2 100644 --- a/src/server/NSGameRules.qc +++ b/src/server/NSGameRules.qc @@ -417,6 +417,7 @@ NSGameRules::DamageRadius(vector org, entity attacker, float dmg, float r, int c new_dmg = rint(dmg * diff); if (diff > 0) { + g_dmg_vecLocation = org; DamageApply(e, attacker, new_dmg, w, DMG_EXPLODE); /* approximate, feel free to tweak */ diff --git a/src/server/NSTraceAttack.qc b/src/server/NSTraceAttack.qc index 70bfd641..80617f60 100644 --- a/src/server/NSTraceAttack.qc +++ b/src/server/NSTraceAttack.qc @@ -21,11 +21,13 @@ NSTraceAttack::_ApplyDamage(void) if (m_eMultiTarget == __NULL__) return; - if (trace_ent.iBleeds == 1) { + /* the location _could_ be more accurate... */ + if (m_eMultiTarget.iBleeds == 1) { FX_Blood(trace_endpos, [0.5,0,0]); } trace_surface_id = m_iMultiBody; + g_dmg_vecLocation = trace_endpos; Damage_Apply(m_eMultiTarget, m_eOwner, m_iMultiValue, m_iWeapon, DMG_BULLET); m_eMultiTarget = __NULL__; m_iMultiValue = 0; diff --git a/src/server/defs.h b/src/server/defs.h index b3b0efb5..46b69c12 100644 --- a/src/server/defs.h +++ b/src/server/defs.h @@ -139,6 +139,7 @@ int g_dmg_iRealDamage; bodyType_t g_dmg_iHitBody; int g_dmg_iFlags; int g_dmg_iWeapon; +vector g_dmg_vecLocation; var bool g_ents_initialized = FALSE; diff --git a/src/shared/NSClientPlayer.qc b/src/shared/NSClientPlayer.qc index 3d877e6e..4c4a3f04 100644 --- a/src/shared/NSClientPlayer.qc +++ b/src/shared/NSClientPlayer.qc @@ -1079,7 +1079,7 @@ NSClientPlayer::Footsteps_Update(void) step_time = time + 0.35; //tracebox(origin, PHY_HULL_MIN, PHY_HULL_MAX, origin + [0,0,-48], MOVE_NORMAL, target); - traceline(origin + view_ofs, origin + [0,0,-48], FALSE, this); + traceline(origin + view_ofs, origin + [0,0,-48], MOVE_NORMAL, this); tex_name = getsurfacetexture(trace_ent, getsurfacenearpoint(trace_ent, trace_endpos)); if (!(GetFlags() & FL_ONGROUND) && (!GetFlags() & FL_ONLADDER)) {