From 1afd66ec7cabe36f8437765be791d08d206bd23f Mon Sep 17 00:00:00 2001 From: AdamTadeusz Date: Sun, 28 Apr 2024 03:34:53 +0100 Subject: [PATCH 1/5] Modifying standing hull and crouching hull mins with duck maxhull offsets was causing players to sink into the ground. --- mp/src/game/shared/shareddefs.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mp/src/game/shared/shareddefs.h b/mp/src/game/shared/shareddefs.h index b4b3f55af..e1447948a 100644 --- a/mp/src/game/shared/shareddefs.h +++ b/mp/src/game/shared/shareddefs.h @@ -94,9 +94,9 @@ class CViewVectors #define NEO_RECON_DUCK_MAXHULL_OFFSET Vector(0.0f, 0.0f, -4.0f) #define NEO_ASSAULT_DUCK_MAXHULL_OFFSET Vector(0.0f, 0.0f, -2.0f) #define NEO_SUPPORT_DUCK_MAXHULL_OFFSET Vector(0.0f, 0.0f, 9.0f) -#define VEC_HULL_MIN_NEOSCALED(NeoPlayer) (g_pGameRules->GetViewVectors()->m_vHullMin + ((NeoPlayer->GetClass() == NEO_CLASS_RECON) ? NEO_RECON_DUCK_MAXHULL_OFFSET : (NeoPlayer->GetClass() == NEO_CLASS_SUPPORT) ? NEO_SUPPORT_DUCK_MAXHULL_OFFSET : NEO_ASSAULT_DUCK_MAXHULL_OFFSET)) -#define VEC_HULL_MAX_NEOSCALED(NeoPlayer) (g_pGameRules->GetViewVectors()->m_vHullMax + ((NeoPlayer->GetClass() == NEO_CLASS_RECON) ? NEO_RECON_DUCK_MAXHULL_OFFSET : (NeoPlayer->GetClass() == NEO_CLASS_SUPPORT) ? NEO_SUPPORT_DUCK_MAXHULL_OFFSET : NEO_ASSAULT_DUCK_MAXHULL_OFFSET)) -#define VEC_DUCK_HULL_MIN_NEOSCALED(NeoPlayer) (g_pGameRules->GetViewVectors()->m_vDuckHullMin + ((NeoPlayer->GetClass() == NEO_CLASS_RECON) ? NEO_RECON_DUCK_MAXHULL_OFFSET : (NeoPlayer->GetClass() == NEO_CLASS_SUPPORT) ? NEO_SUPPORT_DUCK_MAXHULL_OFFSET : NEO_ASSAULT_DUCK_MAXHULL_OFFSET)) +#define VEC_HULL_MIN_NEOSCALED(NeoPlayer) (g_pGameRules->GetViewVectors()->m_vHullMin) +#define VEC_HULL_MAX_NEOSCALED(NeoPlayer) (g_pGameRules->GetViewVectors()->m_vHullMax) +#define VEC_DUCK_HULL_MIN_NEOSCALED(NeoPlayer) (g_pGameRules->GetViewVectors()->m_vDuckHullMin) #define VEC_DUCK_HULL_MAX_NEOSCALED(NeoPlayer) (g_pGameRules->GetViewVectors()->m_vDuckHullMax + ((NeoPlayer->GetClass() == NEO_CLASS_RECON) ? NEO_RECON_DUCK_MAXHULL_OFFSET : (NeoPlayer->GetClass() == NEO_CLASS_SUPPORT) ? NEO_SUPPORT_DUCK_MAXHULL_OFFSET : NEO_ASSAULT_DUCK_MAXHULL_OFFSET)) #endif From 513795ad63c8300297d8a7399e1ad47058c87753 Mon Sep 17 00:00:00 2001 From: AdamTadeusz Date: Sat, 4 May 2024 14:22:02 +0100 Subject: [PATCH 2/5] adjusted recon jump power up and lowered duck in air z position gain to compensate. Character views can clip through ceilings, will probably need to redo entire thing to get correct cl_showpos z positions between games, adjust bounding box sizes, jump power and duck altitude gain again --- mp/src/game/shared/gamemovement.cpp | 7 +++++-- mp/src/game/shared/shareddefs.h | 6 +++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/mp/src/game/shared/gamemovement.cpp b/mp/src/game/shared/gamemovement.cpp index 6efcbd755..c5040586b 100644 --- a/mp/src/game/shared/gamemovement.cpp +++ b/mp/src/game/shared/gamemovement.cpp @@ -2516,12 +2516,12 @@ bool CGameMovement::CheckJumpButton( void ) // Because jump heights depend on the hull values, ducked // hull values, and gravity settings, need some magical // multipliers here to actually hit the correct values in-game. -#define NEO_JUMP_SCALE_RECON_CORRECTION 0.7221 +#define NEO_JUMP_SCALE_RECON_CORRECTION 0.775 //0.7221 for correct jump followed by duck at the apex of jump #define NEO_JUMP_SCALE_ASSAULT_CORRECTION 0.79 #define NEO_JUMP_SCALE_SUPPORT_CORRECTION 0.872 // The final NT class specific multipliers to be applied in jump calculations below. -#define RECON_JUMP_MULTIPLIER ((RECON_SHOULD_REACH_HEIGHT / HL2DM_DEFAULT_MAX_JUMP_REACH_UNITS) * NEO_JUMP_SCALE_RECON_CORRECTION) +#define RECON_JUMP_MULTIPLIER ((RECON_SHOULD_REACH_HEIGHT / HL2DM_DEFAULT_MAX_JUMP_REACH_UNITS) * NEO_JUMP_SCALE_RECON_CORRECTION) // This value is wrong, Recon's standard jump should be weaker and recon should have it's own duck jump multiplier which #define ASSAULT_JUMP_MULTIPLIER ((ASSAULT_SHOULD_REACH_HEIGHT / HL2DM_DEFAULT_MAX_JUMP_REACH_UNITS) * NEO_JUMP_SCALE_ASSAULT_CORRECTION) #define SUPPORT_JUMP_MULTIPLIER ((SUPPORT_SHOULD_REACH_HEIGHT / HL2DM_DEFAULT_MAX_JUMP_REACH_UNITS) * NEO_JUMP_SCALE_SUPPORT_CORRECTION) @@ -4402,6 +4402,9 @@ void CGameMovement::FinishDuck( void ) #endif Vector viewDelta = ( hullSizeNormal - hullSizeCrouch ); + if (static_cast(player)->GetClass() == NEO_CLASS_RECON) { // Lower how far bottom of hull travels upwards during a duck jump + viewDelta = viewDelta * 0.6; + } Vector out; VectorAdd( mv->GetAbsOrigin(), viewDelta, out ); mv->SetAbsOrigin( out ); diff --git a/mp/src/game/shared/shareddefs.h b/mp/src/game/shared/shareddefs.h index e1447948a..1a7252998 100644 --- a/mp/src/game/shared/shareddefs.h +++ b/mp/src/game/shared/shareddefs.h @@ -91,9 +91,9 @@ class CViewVectors #define VEC_VIEW_NEOSCALE(NeoPlayer) (g_pGameRules->GetViewVectors()->m_vView + ((NeoPlayer->GetClass() == NEO_CLASS_RECON) ? NEO_RECON_VIEW_OFFSET : (NeoPlayer->GetClass() == NEO_CLASS_SUPPORT) ? NEO_SUPPORT_VIEW_OFFSET : NEO_ASSAULT_VIEW_OFFSET)) #define VEC_DUCK_VIEW_NEOSCALE(NeoPlayer) (g_pGameRules->GetViewVectors()->m_vDuckView + ((NeoPlayer->GetClass() == NEO_CLASS_RECON) ? NEO_RECON_VIEW_OFFSET : (NeoPlayer->GetClass() == NEO_CLASS_SUPPORT) ? NEO_SUPPORT_VIEW_OFFSET : NEO_ASSAULT_VIEW_OFFSET)) -#define NEO_RECON_DUCK_MAXHULL_OFFSET Vector(0.0f, 0.0f, -4.0f) -#define NEO_ASSAULT_DUCK_MAXHULL_OFFSET Vector(0.0f, 0.0f, -2.0f) -#define NEO_SUPPORT_DUCK_MAXHULL_OFFSET Vector(0.0f, 0.0f, 9.0f) +#define NEO_RECON_DUCK_MAXHULL_OFFSET Vector(0.0f, 0.0f, -2.0f) +#define NEO_ASSAULT_DUCK_MAXHULL_OFFSET Vector(0.0f, 0.0f, -1.0f) +#define NEO_SUPPORT_DUCK_MAXHULL_OFFSET Vector(0.0f, 0.0f, 6.0f) #define VEC_HULL_MIN_NEOSCALED(NeoPlayer) (g_pGameRules->GetViewVectors()->m_vHullMin) #define VEC_HULL_MAX_NEOSCALED(NeoPlayer) (g_pGameRules->GetViewVectors()->m_vHullMax) #define VEC_DUCK_HULL_MIN_NEOSCALED(NeoPlayer) (g_pGameRules->GetViewVectors()->m_vDuckHullMin) From 3368b5d0913b8b8050a1455ca8defe023fa4adc6 Mon Sep 17 00:00:00 2001 From: AdamTadeusz Date: Sun, 5 May 2024 15:53:59 +0100 Subject: [PATCH 3/5] leaning view offset fix --- mp/src/game/shared/neo/neo_predicted_viewmodel.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp b/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp index c937a8bd3..8d42f45a0 100644 --- a/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp +++ b/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp @@ -304,13 +304,13 @@ float CNEOPredictedViewModel::lean(CNEO_Player *player){ switch (player->GetClass()) { case NEO_CLASS_RECON: - viewOffset.z = ((player->GetFlags() & FL_DUCKING) ? NEO_RECON_EYE_HEIGHT_DUCKING : NEO_RECON_EYE_HEIGHT_STANDING) - (neo_lean_fp_lower_eyes_scale.GetFloat() * leanRatio); + viewOffset.z = ((player->GetFlags() & FL_DUCKING) ? VEC_DUCK_VIEW_SCALED(player).z : VEC_VIEW_SCALED(player).z) - (neo_lean_fp_lower_eyes_scale.GetFloat() * leanRatio); break; case NEO_CLASS_ASSAULT: - viewOffset.z = ((player->GetFlags() & FL_DUCKING) ? NEO_ASSAULT_EYE_HEIGHT_DUCKING : NEO_ASSAULT_EYE_HEIGHT_STANDING) - (neo_lean_fp_lower_eyes_scale.GetFloat() * leanRatio); + viewOffset.z = ((player->GetFlags() & FL_DUCKING) ? VEC_DUCK_VIEW_SCALED(player).z : VEC_VIEW_SCALED(player).z) - (neo_lean_fp_lower_eyes_scale.GetFloat() * leanRatio); break; case NEO_CLASS_SUPPORT: - viewOffset.z = ((player->GetFlags() & FL_DUCKING) ? NEO_SUPPORT_EYE_HEIGHT_DUCKING : NEO_SUPPORT_EYE_HEIGHT_STANDING) - (neo_lean_fp_lower_eyes_scale.GetFloat() * leanRatio); + viewOffset.z = ((player->GetFlags() & FL_DUCKING) ? VEC_DUCK_VIEW_SCALED(player).z : VEC_VIEW_SCALED(player).z) - (neo_lean_fp_lower_eyes_scale.GetFloat() * leanRatio); break; default: Assert(false); From 21580b4c8daef8da42cb6e3d0c7a3b1034297ccf Mon Sep 17 00:00:00 2001 From: AdamTadeusz Date: Sat, 11 May 2024 11:30:25 +0100 Subject: [PATCH 4/5] lean offset used to calculate duck and unduck final view offset, removing crouch lean jitter (again), leaning now takes into account the neo_class_view_offset, ensuring smooth transitions between duck stances and correct final duck and unduck view offset, modified view offsets to prevent camera clipping when standing right underneath a ceiling --- mp/src/game/shared/gamemovement.cpp | 3 ++- mp/src/game/shared/neo/neo_predicted_viewmodel.cpp | 7 ++++--- mp/src/game/shared/shareddefs.h | 6 +++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/mp/src/game/shared/gamemovement.cpp b/mp/src/game/shared/gamemovement.cpp index c5040586b..2f3c079d3 100644 --- a/mp/src/game/shared/gamemovement.cpp +++ b/mp/src/game/shared/gamemovement.cpp @@ -806,7 +806,8 @@ Vector CGameMovement::GetPlayerViewOffset( bool ducked ) const { #ifdef NEO Assert(dynamic_cast(player)); - return ducked ? VEC_DUCK_VIEW_SCALED(static_cast(player)) : VEC_VIEW_SCALED(static_cast(player)); + auto thisPlayer = static_cast(player); + return ducked ? VEC_DUCK_VIEW_SCALED(static_cast(player)) + thisPlayer->m_vecLean : VEC_VIEW_SCALED(static_cast(player)) + thisPlayer->m_vecLean; #else return ducked ? VEC_DUCK_VIEW_SCALED(player) : VEC_VIEW_SCALED(player); #endif diff --git a/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp b/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp index 8d42f45a0..8e0b12bc3 100644 --- a/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp +++ b/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp @@ -304,13 +304,13 @@ float CNEOPredictedViewModel::lean(CNEO_Player *player){ switch (player->GetClass()) { case NEO_CLASS_RECON: - viewOffset.z = ((player->GetFlags() & FL_DUCKING) ? VEC_DUCK_VIEW_SCALED(player).z : VEC_VIEW_SCALED(player).z) - (neo_lean_fp_lower_eyes_scale.GetFloat() * leanRatio); + viewOffset.z = ((player->GetFlags() & FL_DUCKING) ? NEO_RECON_EYE_HEIGHT_DUCKING + NEO_RECON_VIEW_OFFSET.z : NEO_RECON_EYE_HEIGHT_STANDING + NEO_RECON_VIEW_OFFSET.z) - (neo_lean_fp_lower_eyes_scale.GetFloat() * leanRatio); break; case NEO_CLASS_ASSAULT: - viewOffset.z = ((player->GetFlags() & FL_DUCKING) ? VEC_DUCK_VIEW_SCALED(player).z : VEC_VIEW_SCALED(player).z) - (neo_lean_fp_lower_eyes_scale.GetFloat() * leanRatio); + viewOffset.z = ((player->GetFlags() & FL_DUCKING) ? NEO_ASSAULT_EYE_HEIGHT_DUCKING + NEO_ASSAULT_VIEW_OFFSET.z : NEO_ASSAULT_EYE_HEIGHT_STANDING + NEO_ASSAULT_VIEW_OFFSET.z) - (neo_lean_fp_lower_eyes_scale.GetFloat() * leanRatio); break; case NEO_CLASS_SUPPORT: - viewOffset.z = ((player->GetFlags() & FL_DUCKING) ? VEC_DUCK_VIEW_SCALED(player).z : VEC_VIEW_SCALED(player).z) - (neo_lean_fp_lower_eyes_scale.GetFloat() * leanRatio); + viewOffset.z = ((player->GetFlags() & FL_DUCKING) ? NEO_SUPPORT_EYE_HEIGHT_DUCKING + NEO_SUPPORT_VIEW_OFFSET.z : NEO_SUPPORT_EYE_HEIGHT_STANDING + NEO_SUPPORT_VIEW_OFFSET.z) - (neo_lean_fp_lower_eyes_scale.GetFloat() * leanRatio); break; default: Assert(false); @@ -318,6 +318,7 @@ float CNEOPredictedViewModel::lean(CNEO_Player *player){ break; } + player->m_vecLean = Vector(0, viewOffset.y, -(neo_lean_fp_lower_eyes_scale.GetFloat() * leanRatio)); player->SetViewOffset(viewOffset); viewAng.z = leanAngle; diff --git a/mp/src/game/shared/shareddefs.h b/mp/src/game/shared/shareddefs.h index 1a7252998..92a3692ed 100644 --- a/mp/src/game/shared/shareddefs.h +++ b/mp/src/game/shared/shareddefs.h @@ -85,9 +85,9 @@ class CViewVectors #define VEC_DEAD_VIEWHEIGHT g_pGameRules->GetViewVectors()->m_vDeadViewHeight #ifdef NEO -#define NEO_RECON_VIEW_OFFSET Vector(0.0f, 0.0f, -1.0f) -#define NEO_ASSAULT_VIEW_OFFSET vec3_origin -#define NEO_SUPPORT_VIEW_OFFSET Vector(0.0f, 0.0f, 2.0f) +#define NEO_RECON_VIEW_OFFSET Vector(0.0f, 0.0f, -6.0f) +#define NEO_ASSAULT_VIEW_OFFSET Vector(0.0f, 0.0f, -3.75f) +#define NEO_SUPPORT_VIEW_OFFSET Vector(0.0f, 0.0f, 3.0f) #define VEC_VIEW_NEOSCALE(NeoPlayer) (g_pGameRules->GetViewVectors()->m_vView + ((NeoPlayer->GetClass() == NEO_CLASS_RECON) ? NEO_RECON_VIEW_OFFSET : (NeoPlayer->GetClass() == NEO_CLASS_SUPPORT) ? NEO_SUPPORT_VIEW_OFFSET : NEO_ASSAULT_VIEW_OFFSET)) #define VEC_DUCK_VIEW_NEOSCALE(NeoPlayer) (g_pGameRules->GetViewVectors()->m_vDuckView + ((NeoPlayer->GetClass() == NEO_CLASS_RECON) ? NEO_RECON_VIEW_OFFSET : (NeoPlayer->GetClass() == NEO_CLASS_SUPPORT) ? NEO_SUPPORT_VIEW_OFFSET : NEO_ASSAULT_VIEW_OFFSET)) From 2084e39091f0b67f21505fa8ca6f712f37ce86fa Mon Sep 17 00:00:00 2001 From: AdamTadeusz Date: Sat, 11 May 2024 11:46:56 +0100 Subject: [PATCH 5/5] double cast --- mp/src/game/shared/gamemovement.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mp/src/game/shared/gamemovement.cpp b/mp/src/game/shared/gamemovement.cpp index 2f3c079d3..32ba6af0c 100644 --- a/mp/src/game/shared/gamemovement.cpp +++ b/mp/src/game/shared/gamemovement.cpp @@ -807,7 +807,7 @@ Vector CGameMovement::GetPlayerViewOffset( bool ducked ) const #ifdef NEO Assert(dynamic_cast(player)); auto thisPlayer = static_cast(player); - return ducked ? VEC_DUCK_VIEW_SCALED(static_cast(player)) + thisPlayer->m_vecLean : VEC_VIEW_SCALED(static_cast(player)) + thisPlayer->m_vecLean; + return ducked ? VEC_DUCK_VIEW_SCALED(thisPlayer) + thisPlayer->m_vecLean : VEC_VIEW_SCALED(thisPlayer) + thisPlayer->m_vecLean; #else return ducked ? VEC_DUCK_VIEW_SCALED(player) : VEC_VIEW_SCALED(player); #endif