From 4e13400c615248f6eed3de0fd69f4139ae640df5 Mon Sep 17 00:00:00 2001 From: Roman Chistokhodov Date: Sun, 5 Jun 2022 19:35:04 +0300 Subject: [PATCH] Add 'explosionfix' cvar to control explosions going through walls sometimes. Related issue: https://github.com/ValveSoftware/halflife/issues/3244 (#252) --- dlls/game.cpp | 2 ++ dlls/game.h | 1 + dlls/ggrenade.cpp | 6 +++++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/dlls/game.cpp b/dlls/game.cpp index eb4ae16b..57defc57 100644 --- a/dlls/game.cpp +++ b/dlls/game.cpp @@ -35,6 +35,7 @@ cvar_t weaponstay = { "mp_weaponstay","0", FCVAR_SERVER }; cvar_t selfgauss = { "selfgauss", "1", FCVAR_SERVER }; cvar_t chargerfix = { "chargerfix", "0", FCVAR_SERVER }; cvar_t satchelfix = { "satchelfix", "0", FCVAR_SERVER }; +cvar_t explosionfix = { "explosionfix", "0", FCVAR_SERVER }; cvar_t monsteryawspeedfix = { "monsteryawspeedfix", "1", FCVAR_SERVER }; cvar_t forcerespawn = { "mp_forcerespawn","1", FCVAR_SERVER }; cvar_t flashlight = { "mp_flashlight","0", FCVAR_SERVER }; @@ -486,6 +487,7 @@ void GameDLLInit( void ) CVAR_REGISTER( &selfgauss ); CVAR_REGISTER( &chargerfix ); CVAR_REGISTER( &satchelfix ); + CVAR_REGISTER( &explosionfix ); CVAR_REGISTER( &monsteryawspeedfix ); CVAR_REGISTER( &forcerespawn ); CVAR_REGISTER( &flashlight ); diff --git a/dlls/game.h b/dlls/game.h index 3119351a..17c15219 100644 --- a/dlls/game.h +++ b/dlls/game.h @@ -30,6 +30,7 @@ extern cvar_t weaponstay; extern cvar_t selfgauss; extern cvar_t chargerfix; extern cvar_t satchelfix; +extern cvar_t explosionfix; extern cvar_t monsteryawspeedfix; extern cvar_t forcerespawn; extern cvar_t flashlight; diff --git a/dlls/ggrenade.cpp b/dlls/ggrenade.cpp index 60b658b9..5995fe53 100644 --- a/dlls/ggrenade.cpp +++ b/dlls/ggrenade.cpp @@ -26,6 +26,7 @@ #include "nodes.h" #include "soundent.h" #include "decals.h" +#include "game.h" //===================grenade @@ -59,7 +60,10 @@ void CGrenade::Explode( TraceResult *pTrace, int bitsDamageType ) // Pull out of the wall a bit if( pTrace->flFraction != 1.0f ) { - pev->origin = pTrace->vecEndPos + ( pTrace->vecPlaneNormal * ( pev->dmg - 24 ) * 0.6f ); + if (explosionfix.value) + pev->origin = pTrace->vecEndPos + ( pTrace->vecPlaneNormal * 0.6f ); + else + pev->origin = pTrace->vecEndPos + ( pTrace->vecPlaneNormal * ( pev->dmg - 24 ) * 0.6f ); } int iContents = UTIL_PointContents( pev->origin );