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