diff --git a/mp/src/game/shared/gamemovement.cpp b/mp/src/game/shared/gamemovement.cpp index 6efcbd755..32ba6af0c 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(thisPlayer) + thisPlayer->m_vecLean : VEC_VIEW_SCALED(thisPlayer) + thisPlayer->m_vecLean; #else return ducked ? VEC_DUCK_VIEW_SCALED(player) : VEC_VIEW_SCALED(player); #endif @@ -2516,12 +2517,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 +4403,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/neo/neo_predicted_viewmodel.cpp b/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp index c937a8bd3..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) ? NEO_RECON_EYE_HEIGHT_DUCKING : NEO_RECON_EYE_HEIGHT_STANDING) - (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) ? NEO_ASSAULT_EYE_HEIGHT_DUCKING : NEO_ASSAULT_EYE_HEIGHT_STANDING) - (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) ? NEO_SUPPORT_EYE_HEIGHT_DUCKING : NEO_SUPPORT_EYE_HEIGHT_STANDING) - (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 b4b3f55af..92a3692ed 100644 --- a/mp/src/game/shared/shareddefs.h +++ b/mp/src/game/shared/shareddefs.h @@ -85,18 +85,18 @@ 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)) -#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 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) #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