From 24a9ef71acdb642fc96370271156017e555ef2b6 Mon Sep 17 00:00:00 2001 From: Marco Cawthorne Date: Wed, 24 Jul 2024 14:25:41 -0700 Subject: [PATCH] NSWeapon: add "speed_mod" key for manipulating the player speed. --- src/shared/NSWeapon.h | 1 + src/shared/NSWeapon.qc | 8 ++++++++ src/shared/player_pmove.qc | 7 ++++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/shared/NSWeapon.h b/src/shared/NSWeapon.h index 397ebc59..f0c4eb0c 100644 --- a/src/shared/NSWeapon.h +++ b/src/shared/NSWeapon.h @@ -197,6 +197,7 @@ private: string m_strLastFireInfo; float m_jointTrailWorld; float m_jointTrailView; + float m_flSpeedMod; /* cached fireInfo */ string m_fiDetonateOnFire; diff --git a/src/shared/NSWeapon.qc b/src/shared/NSWeapon.qc index 3f08fd9b..da427995 100644 --- a/src/shared/NSWeapon.qc +++ b/src/shared/NSWeapon.qc @@ -40,6 +40,7 @@ NSWeapon::NSWeapon(void) m_flFireRate = 1.0f; m_dState = 0; m_strLastFireInfo = __NULL__; + m_flSpeedMod = 1.0f; } void @@ -547,6 +548,13 @@ NSWeapon::_CacheWeaponDefVariables(void) string muzzleModel; string ammoRequired; + /* movement vars */ + m_flSpeedMod = GetDefFloat("speed_mod"); + + if (m_flSpeedMod <= 0.0) { + m_flSpeedMod = 1.0f; + } + /* string lookups can be expensive if done too often so we'll need to cache them whenever something big in the game state changes. like a save/load. */ diff --git a/src/shared/player_pmove.qc b/src/shared/player_pmove.qc index dadb0811..17d0a693 100644 --- a/src/shared/player_pmove.qc +++ b/src/shared/player_pmove.qc @@ -418,6 +418,11 @@ NSClientPlayer::Physics_MaxSpeed(void) float crouchSpeed = g_pmoveVars.pm_crouchspeed; float walkSpeed = g_pmoveVars.pm_walkspeed; float proneSpeed = g_pmoveVars.pm_pronespeed; + float speedMod = 1.0f; + + if (m_activeWeapon) { + speedMod = m_activeWeapon.m_flSpeedMod; + } if (CanSprint() && IsSprinting()) { if (m_flStamina < maxStamina) { @@ -439,7 +444,7 @@ NSClientPlayer::Physics_MaxSpeed(void) wishSpeed = walkSpeed; } - return wishSpeed; + return wishSpeed * speedMod; } void