From 5fc121d121438cabf99ed63470dd01308df9b44a Mon Sep 17 00:00:00 2001 From: dystopm Date: Sun, 29 Oct 2023 14:17:25 -0300 Subject: [PATCH 1/5] Fixed grenades disappearing when speed exceeds 2000 fixed units ignoring sv_maxvelocity --- regamedll/dlls/cbase.cpp | 10 ++++++++-- regamedll/dlls/game.cpp | 2 ++ regamedll/dlls/game.h | 3 ++- regamedll/dlls/gib.cpp | 2 +- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/regamedll/dlls/cbase.cpp b/regamedll/dlls/cbase.cpp index 9e14bf43e..9b7da4da0 100644 --- a/regamedll/dlls/cbase.cpp +++ b/regamedll/dlls/cbase.cpp @@ -865,12 +865,18 @@ BOOL CBaseEntity::IsInWorld() return FALSE; } +#ifdef REGAMEDLL_FIXES + double maxvel = g_psv_maxvelocity->value; +#else + double maxvel = 2000.0; +#endif + // speed - if (pev->velocity.x >= 2000.0 || pev->velocity.y >= 2000.0 || pev->velocity.z >= 2000.0) + if (pev->velocity.x >= maxvel || pev->velocity.y >= maxvel || pev->velocity.z >= maxvel) { return FALSE; } - if (pev->velocity.x <= -2000.0 || pev->velocity.y <= -2000.0 || pev->velocity.z <= -2000.0) + if (pev->velocity.x <= -maxvel || pev->velocity.y <= -maxvel || pev->velocity.z <= -maxvel) { return FALSE; } diff --git a/regamedll/dlls/game.cpp b/regamedll/dlls/game.cpp index a9e37a8b5..a0c6b992a 100644 --- a/regamedll/dlls/game.cpp +++ b/regamedll/dlls/game.cpp @@ -9,6 +9,7 @@ cvar_t *g_psv_friction = nullptr; cvar_t *g_psv_stopspeed = nullptr; cvar_t *g_psv_stepsize = nullptr; cvar_t *g_psv_clienttrace = nullptr; +cvar_t *g_psv_maxvelocity = nullptr; cvar_t displaysoundlist = { "displaysoundlist", "0", 0, 0.0f, nullptr }; cvar_t timelimit = { "mp_timelimit", "0", FCVAR_SERVER, 0.0f, nullptr }; @@ -236,6 +237,7 @@ void EXT_FUNC GameDLLInit() g_psv_stopspeed = CVAR_GET_POINTER("sv_stopspeed"); g_psv_stepsize = CVAR_GET_POINTER("sv_stepsize"); g_psv_clienttrace = CVAR_GET_POINTER("sv_clienttrace"); + g_psv_maxvelocity = CVAR_GET_POINTER("sv_maxvelocity"); CVAR_REGISTER(&displaysoundlist); CVAR_REGISTER(&timelimit); diff --git a/regamedll/dlls/game.h b/regamedll/dlls/game.h index b9b9253b9..2c7465b7b 100644 --- a/regamedll/dlls/game.h +++ b/regamedll/dlls/game.h @@ -43,12 +43,13 @@ extern cvar_t *g_pskill; extern cvar_t *g_psv_gravity; extern cvar_t *g_psv_aim; +extern cvar_t *g_footsteps; extern cvar_t *g_psv_accelerate; extern cvar_t *g_psv_friction; extern cvar_t *g_psv_stopspeed; extern cvar_t *g_psv_stepsize; extern cvar_t *g_psv_clienttrace; -extern cvar_t *g_footsteps; +extern cvar_t *g_psv_maxvelocity; extern cvar_t displaysoundlist; extern cvar_t timelimit; diff --git a/regamedll/dlls/gib.cpp b/regamedll/dlls/gib.cpp index 069b118d9..7d166c921 100644 --- a/regamedll/dlls/gib.cpp +++ b/regamedll/dlls/gib.cpp @@ -5,7 +5,7 @@ LINK_ENTITY_TO_CLASS(gib, CGib, CCSGib) void CGib::LimitVelocity() { float length = pev->velocity.Length(); - float topspeed = CVAR_GET_FLOAT("sv_maxvelocity") * 0.75f; + float topspeed = g_psv_maxvelocity->value * 0.75f; // ceiling at topspeed. The gib velocity equation is not bounded properly. Rather than tune it // in 3 separate places again, I'll just limit it here. From 1e4762ee7d791219d720b76bf52055e2bb100d61 Mon Sep 17 00:00:00 2001 From: dystopm Date: Sun, 29 Oct 2023 23:27:37 -0300 Subject: [PATCH 2/5] Clamp nades velocity to sv_maxvelocity value when reached --- regamedll/dlls/ggrenade.cpp | 21 +++++++++++++++++++++ regamedll/dlls/gib.cpp | 3 +-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/regamedll/dlls/ggrenade.cpp b/regamedll/dlls/ggrenade.cpp index 678a78d58..41e92f27d 100644 --- a/regamedll/dlls/ggrenade.cpp +++ b/regamedll/dlls/ggrenade.cpp @@ -772,6 +772,13 @@ void CGrenade::BounceSound() void CGrenade::TumbleThink() { +#ifdef REGAMEDLL_FIXES + if (pev->velocity.IsLengthGreaterThan(g_psv_maxvelocity->value)) + { + pev->velocity = pev->velocity.Normalize() * g_psv_maxvelocity->value; + } +#endif + if (!IsInWorld()) { UTIL_Remove(this); @@ -809,6 +816,13 @@ void CGrenade::TumbleThink() void CGrenade::SG_TumbleThink() { +#ifdef REGAMEDLL_FIXES + if (pev->velocity.IsLengthGreaterThan(g_psv_maxvelocity->value)) + { + pev->velocity = pev->velocity.Normalize() * g_psv_maxvelocity->value; + } +#endif + if (!IsInWorld()) { UTIL_Remove(this); @@ -1322,6 +1336,13 @@ void AnnounceFlashInterval(float interval, float offset) void CGrenade::C4Think() { +#ifdef REGAMEDLL_FIXES + if (pev->velocity.IsLengthGreaterThan(g_psv_maxvelocity->value)) + { + pev->velocity = pev->velocity.Normalize() * g_psv_maxvelocity->value; + } +#endif + if (!IsInWorld()) { #ifdef REGAMEDLL_FIXES diff --git a/regamedll/dlls/gib.cpp b/regamedll/dlls/gib.cpp index 7d166c921..9301e283f 100644 --- a/regamedll/dlls/gib.cpp +++ b/regamedll/dlls/gib.cpp @@ -4,12 +4,11 @@ LINK_ENTITY_TO_CLASS(gib, CGib, CCSGib) void CGib::LimitVelocity() { - float length = pev->velocity.Length(); float topspeed = g_psv_maxvelocity->value * 0.75f; // ceiling at topspeed. The gib velocity equation is not bounded properly. Rather than tune it // in 3 separate places again, I'll just limit it here. - if (length > topspeed) + if (pev->velocity.IsLengthGreaterThan(topspeed)) { // DONE: This should really be sv_maxvelocity * 0.75 or something pev->velocity = pev->velocity.Normalize() * topspeed; From b0acc615fc7191bc848e8e4f2852d3cfb4f1ec56 Mon Sep 17 00:00:00 2001 From: dystopm Date: Sun, 29 Oct 2023 23:29:55 -0300 Subject: [PATCH 3/5] Make IsInWorld behave like SV_CheckVelocity: less/greater without equal --- regamedll/dlls/cbase.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/regamedll/dlls/cbase.cpp b/regamedll/dlls/cbase.cpp index 9b7da4da0..0fbdb685f 100644 --- a/regamedll/dlls/cbase.cpp +++ b/regamedll/dlls/cbase.cpp @@ -872,11 +872,11 @@ BOOL CBaseEntity::IsInWorld() #endif // speed - if (pev->velocity.x >= maxvel || pev->velocity.y >= maxvel || pev->velocity.z >= maxvel) + if (pev->velocity.x > maxvel || pev->velocity.y > maxvel || pev->velocity.z > maxvel) { return FALSE; } - if (pev->velocity.x <= -maxvel || pev->velocity.y <= -maxvel || pev->velocity.z <= -maxvel) + if (pev->velocity.x < -maxvel || pev->velocity.y < -maxvel || pev->velocity.z < -maxvel) { return FALSE; } From ec82ccb3599fbb8fc0de757b1cf7fb1fa53ca60c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Mu=C3=B1oz?= Date: Mon, 30 Oct 2023 14:13:14 -0300 Subject: [PATCH 4/5] Enclose IsInWorld changes with FIXES macro --- regamedll/dlls/cbase.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/regamedll/dlls/cbase.cpp b/regamedll/dlls/cbase.cpp index 0fbdb685f..7cd10e1c7 100644 --- a/regamedll/dlls/cbase.cpp +++ b/regamedll/dlls/cbase.cpp @@ -865,13 +865,9 @@ BOOL CBaseEntity::IsInWorld() return FALSE; } + // speed #ifdef REGAMEDLL_FIXES double maxvel = g_psv_maxvelocity->value; -#else - double maxvel = 2000.0; -#endif - - // speed if (pev->velocity.x > maxvel || pev->velocity.y > maxvel || pev->velocity.z > maxvel) { return FALSE; @@ -880,6 +876,16 @@ BOOL CBaseEntity::IsInWorld() { return FALSE; } +#else + if (pev->velocity.x >= 2000.0 || pev->velocity.y >= 2000.0 || pev->velocity.z >= 2000.0) + { + return FALSE; + } + if (pev->velocity.x <= -2000.0 || pev->velocity.y <= -2000.0 || pev->velocity.z <= -2000.0) + { + return FALSE; + } +#endif return TRUE; } From 19b603e0ddb19b4db9065b95c2241d5373ad029a Mon Sep 17 00:00:00 2001 From: Dmitry Novikov Date: Sun, 26 Nov 2023 11:18:45 +0700 Subject: [PATCH 5/5] Update cbase.cpp use float type --- regamedll/dlls/cbase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regamedll/dlls/cbase.cpp b/regamedll/dlls/cbase.cpp index 7cd10e1c7..20051e077 100644 --- a/regamedll/dlls/cbase.cpp +++ b/regamedll/dlls/cbase.cpp @@ -867,7 +867,7 @@ BOOL CBaseEntity::IsInWorld() // speed #ifdef REGAMEDLL_FIXES - double maxvel = g_psv_maxvelocity->value; + float maxvel = g_psv_maxvelocity->value; if (pev->velocity.x > maxvel || pev->velocity.y > maxvel || pev->velocity.z > maxvel) { return FALSE;