From e93ce8c564405f8be6609426922404d3c09d9764 Mon Sep 17 00:00:00 2001 From: marigi64 Date: Sat, 2 Aug 2025 19:21:27 +1000 Subject: [PATCH 1/2] Legacy Hand Grenade Physics CVAR Adds a CVAR to restore original grenade throw physics. --- dlls/game.cpp | 4 ++++ dlls/handgrenade.cpp | 17 ++++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/dlls/game.cpp b/dlls/game.cpp index 6f2db0963..60e2e0a48 100644 --- a/dlls/game.cpp +++ b/dlls/game.cpp @@ -455,6 +455,8 @@ cvar_t sv_pushable_fixed_tick_fudge = { "sv_pushable_fixed_tick_fudge", "15" }; cvar_t sv_busters = { "sv_busters", "0" }; +cvar_t legacy_hgrenade = { "sv_legacy_hgrenade", "0", FCVAR_SERVER }; + // Register your console variables here // This gets called one time when the game is initialied void GameDLLInit( void ) @@ -895,6 +897,8 @@ void GameDLLInit( void ) CVAR_REGISTER ( &sv_pushable_fixed_tick_fudge ); + CVAR_REGISTER ( &legacy_hgrenade ); + SERVER_COMMAND( "exec skill.cfg\n" ); } diff --git a/dlls/handgrenade.cpp b/dlls/handgrenade.cpp index 55903e9c3..3468c7991 100644 --- a/dlls/handgrenade.cpp +++ b/dlls/handgrenade.cpp @@ -140,10 +140,21 @@ void CHandGrenade::WeaponIdle( void ) else angThrow.x = -10 + angThrow.x * ( ( 90 + 10 ) / 90.0 ); - static float flMultiplier = 6.5f; + float flMultiplier = 6.5f; + float flMaxVel = 1000.0f; + +#ifndef CLIENT_DLL + extern cvar_t legacy_hgrenade; + if ( legacy_hgrenade.value > 0 ) + { + flMultiplier = 4.0f; + flMaxVel = 500.0f; + } +#endif + float flVel = ( 90 - angThrow.x ) * flMultiplier; - if ( flVel > 1000 ) - flVel = 1000; + if ( flVel > flMaxVel ) + flVel = flMaxVel; UTIL_MakeVectors( angThrow ); From 63186626f1077c2f48f31a15f9061e21e586baef Mon Sep 17 00:00:00 2001 From: marigi64 Date: Sat, 2 Aug 2025 20:38:04 +1000 Subject: [PATCH 2/2] Legacy Satchel Charge Controls CVAR Adds a CVAR to restore original satchel charge controls. --- cl_dll/hud.cpp | 2 ++ dlls/gamerules.h | 3 +++ dlls/player.cpp | 11 +++++++++ dlls/player.h | 1 + dlls/satchel.cpp | 46 +++++++++++++++++++++++++++++++---- dlls/singleplay_gamerules.cpp | 8 ++++++ dlls/weapons.h | 1 + 7 files changed, 67 insertions(+), 5 deletions(-) diff --git a/cl_dll/hud.cpp b/cl_dll/hud.cpp index 41aa5cffb..922f158de 100644 --- a/cl_dll/hud.cpp +++ b/cl_dll/hud.cpp @@ -84,6 +84,7 @@ extern client_sprite_t *GetSpriteList(client_sprite_t *pList, const char *psz, i extern float IN_GetMouseSensitivity(); cvar_t *cl_lw = NULL; +cvar_t *legacy_satchel = NULL; void ShutdownInput (void); @@ -329,6 +330,7 @@ void CHud :: Init( void ) CVAR_CREATE( "zoom_sensitivity_ratio", "1.2", FCVAR_ARCHIVE ); CVAR_CREATE( "cl_autowepswitch", "1", FCVAR_USERINFO|FCVAR_ARCHIVE ); + legacy_satchel = CVAR_CREATE( "cl_legacy_satchel", "0", FCVAR_USERINFO | FCVAR_ARCHIVE ); default_fov = CVAR_CREATE( "default_fov", "90", FCVAR_ARCHIVE ); m_pCvarStealMouse = CVAR_CREATE( "hud_capturemouse", "1", FCVAR_ARCHIVE ); m_pCvarDraw = CVAR_CREATE( "hud_draw", "1", FCVAR_ARCHIVE ); diff --git a/dlls/gamerules.h b/dlls/gamerules.h index b327d40b1..ba08f57a2 100644 --- a/dlls/gamerules.h +++ b/dlls/gamerules.h @@ -246,6 +246,9 @@ class CHalfLifeRules : public CGameRules // Teamplay stuff virtual const char *GetTeamID( CBaseEntity *pEntity ) {return "";}; virtual int PlayerRelationship( CBaseEntity *pPlayer, CBaseEntity *pTarget ); + +// Client preference + virtual void ClientUserInfoChanged( CBasePlayer *pPlayer, char *infobuffer ); }; //========================================================= diff --git a/dlls/player.cpp b/dlls/player.cpp index 85b67c477..5840bb899 100644 --- a/dlls/player.cpp +++ b/dlls/player.cpp @@ -4348,6 +4348,17 @@ void CBasePlayer :: SetPrefsFromUserinfo( char * infobuffer ) { m_iAutoWepSwitch = atoi( pszKeyVal ); } + + // Set satchel charge control preference + pszKeyVal = g_engfuncs.pfnInfoKeyValue( infobuffer, "cl_legacy_satchel" ); + if ( FStrEq( pszKeyVal, "" ) ) + { + m_iLegacySatchel = 0; + } + else + { + m_iLegacySatchel = atoi( pszKeyVal ); + } } diff --git a/dlls/player.h b/dlls/player.h index e7c7cedcb..e5cbcc5ec 100644 --- a/dlls/player.h +++ b/dlls/player.h @@ -327,6 +327,7 @@ class CBasePlayer : public CBaseMonster float m_flNextChatTime; int m_iAutoWepSwitch; + int m_iLegacySatchel; }; #define AUTOAIM_2DEGREES 0.0348994967025 diff --git a/dlls/satchel.cpp b/dlls/satchel.cpp index 10f7b6b45..f2b115db2 100644 --- a/dlls/satchel.cpp +++ b/dlls/satchel.cpp @@ -23,6 +23,10 @@ #include "player.h" #include "gamerules.h" +#ifdef CLIENT_DLL +extern cvar_t *legacy_satchel; +#endif + enum satchel_e { SATCHEL_IDLE1 = 0, SATCHEL_FIDGET1, @@ -350,15 +354,47 @@ void CSatchel::Holster( int skiplocal /* = 0 */ ) void CSatchel::PrimaryAttack() { - // we're reloading, don't allow fire - if( m_chargeReady != 2 ) +#ifdef CLIENT_DLL + if ( legacy_satchel->value > 0 ) +#else + if ( m_pPlayer->m_iLegacySatchel > 0 ) +#endif + switch (m_chargeReady) + { + case 0: + Throw(); + break; + case 1: + Detonate(); + break; + } + else + // we're reloading, don't allow fire + if( m_chargeReady != 2 ) + { + Throw(); + } +} + +void CSatchel::SecondaryAttack( void ) +{ +#ifdef CLIENT_DLL + if ( legacy_satchel->value > 0 ) +#else + if ( m_pPlayer->m_iLegacySatchel > 0 ) +#endif { - Throw(); + // we're reloading, don't allow fire + if( m_chargeReady != 2 ) + { + Throw(); + } } + else + Detonate(); } - -void CSatchel::SecondaryAttack( void ) +void CSatchel::Detonate( void ) { if ( m_chargeReady == 1 ) { diff --git a/dlls/singleplay_gamerules.cpp b/dlls/singleplay_gamerules.cpp index 3438f7c86..9e6a22626 100644 --- a/dlls/singleplay_gamerules.cpp +++ b/dlls/singleplay_gamerules.cpp @@ -406,3 +406,11 @@ BOOL CHalfLifeRules :: FAllowMonsters( void ) { return TRUE; } + +//========================================================= +//========================================================= +void CHalfLifeRules::ClientUserInfoChanged( CBasePlayer *pPlayer, char *infobuffer ) +{ + // Set preferences + pPlayer->SetPrefsFromUserinfo( infobuffer ); +} diff --git a/dlls/weapons.h b/dlls/weapons.h index ab2d2e7aa..3bf4f4bca 100644 --- a/dlls/weapons.h +++ b/dlls/weapons.h @@ -951,6 +951,7 @@ class CSatchel : public CBasePlayerWeapon void Holster( int skiplocal = 0 ); void WeaponIdle( void ); void Throw( void ); + void Detonate( void ); virtual BOOL UseDecrement( void ) {