From 5af1f83a6f7a2133ec0765ab837e4e8d2de83f50 Mon Sep 17 00:00:00 2001 From: AdamTadeusz Date: Tue, 1 Oct 2024 08:28:13 +0100 Subject: [PATCH 1/6] viewmodel only lean --- mp/src/game/shared/neo/neo_predicted_viewmodel.cpp | 13 ++++++++++++- mp/src/game/shared/neo/neo_predicted_viewmodel.h | 1 + .../neo/weapons/weapon_neobasecombatweapon.cpp | 4 ++-- 3 files changed, 15 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 7d229ef5c0..5c4c43b8e8 100644 --- a/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp +++ b/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp @@ -57,6 +57,7 @@ CNEOPredictedViewModel::CNEOPredictedViewModel() #endif m_flYPrevious = 0; + m_flLeanAngle = 0; m_flStartAimingChange = 0; m_bViewAim = false; } @@ -267,6 +268,8 @@ float GetLeanRatio(const float leanAngle) return fabs(leanAngle) / ((leanAngle < 0) ? neo_lean_yaw_peek_left_amount.GetFloat() : neo_lean_yaw_peek_right_amount.GetFloat()); } +ConVar cl_neo_lean_viewmodel_only("cl_neo_lean_viewmodel_only", "1", FCVAR_ARCHIVE, "Rotate view-model instead of camera when leaning", true, 0, true, 1); + float CNEOPredictedViewModel::lean(CNEO_Player *player){ Assert(player); #ifdef CLIENT_DLL @@ -326,9 +329,13 @@ float CNEOPredictedViewModel::lean(CNEO_Player *player){ player->m_vecLean = Vector(0, viewOffset.y, -(neo_lean_fp_lower_eyes_scale.GetFloat() * leanRatio)); player->SetViewOffset(viewOffset); + m_flLeanAngle = leanAngle; viewAng.z = leanAngle; #ifdef CLIENT_DLL - engine->SetViewAngles(viewAng); + if (!cl_neo_lean_viewmodel_only.GetBool()) + { + engine->SetViewAngles(viewAng); + } #endif #ifdef GAME_DLL @@ -426,6 +433,10 @@ void CNEOPredictedViewModel::CalcViewModelView(CBasePlayer *pOwner, newPos += vUp * vOffset.z; newAng += angOffset; + if (cl_neo_lean_viewmodel_only.GetBool()) + { + newAng.z += m_flLeanAngle; + } BaseClass::CalcViewModelView(pOwner, newPos, newAng); } diff --git a/mp/src/game/shared/neo/neo_predicted_viewmodel.h b/mp/src/game/shared/neo/neo_predicted_viewmodel.h index 1df52a9c53..13ac39a1af 100644 --- a/mp/src/game/shared/neo/neo_predicted_viewmodel.h +++ b/mp/src/game/shared/neo/neo_predicted_viewmodel.h @@ -68,6 +68,7 @@ class CNEOPredictedViewModel : public CPredictedViewModel private: float m_flStartAimingChange; + float m_flLeanAngle; bool m_bViewAim; Vector m_vOffset; QAngle m_angOffset; diff --git a/mp/src/game/shared/neo/weapons/weapon_neobasecombatweapon.cpp b/mp/src/game/shared/neo/weapons/weapon_neobasecombatweapon.cpp index 02c8a1c803..b06f5d09f9 100644 --- a/mp/src/game/shared/neo/weapons/weapon_neobasecombatweapon.cpp +++ b/mp/src/game/shared/neo/weapons/weapon_neobasecombatweapon.cpp @@ -27,14 +27,14 @@ extern ConVar weaponstay; IMPLEMENT_NETWORKCLASS_ALIASED( NEOBaseCombatWeapon, DT_NEOBaseCombatWeapon ) BEGIN_NETWORK_TABLE( CNEOBaseCombatWeapon, DT_NEOBaseCombatWeapon ) -#ifdef CLIENT_DLL + #ifdef CLIENT_DLL RecvPropTime(RECVINFO(m_flSoonestAttack)), RecvPropTime(RECVINFO(m_flLastAttackTime)), RecvPropFloat(RECVINFO(m_flAccuracyPenalty)), RecvPropInt(RECVINFO(m_nNumShotsFired)), RecvPropBool(RECVINFO(m_bRoundChambered)), RecvPropBool(RECVINFO(m_bRoundBeingChambered)), -#else + #else SendPropTime(SENDINFO(m_flSoonestAttack)), SendPropTime(SENDINFO(m_flLastAttackTime)), SendPropFloat(SENDINFO(m_flAccuracyPenalty)), From ac01651a7fa3b8c8a1927fbede095c613ab4a23c Mon Sep 17 00:00:00 2001 From: AdamTadeusz Date: Wed, 16 Oct 2024 14:56:10 +0100 Subject: [PATCH 2/6] fix and add setting in settings --- mp/src/game/client/neo/ui/neo_root_settings.cpp | 4 ++++ mp/src/game/client/neo/ui/neo_root_settings.h | 1 + mp/src/game/shared/neo/neo_predicted_viewmodel.cpp | 6 +++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/mp/src/game/client/neo/ui/neo_root_settings.cpp b/mp/src/game/client/neo/ui/neo_root_settings.cpp index ba8a9710e2..df8dcdcc2d 100644 --- a/mp/src/game/client/neo/ui/neo_root_settings.cpp +++ b/mp/src/game/client/neo/ui/neo_root_settings.cpp @@ -27,6 +27,7 @@ extern ConVar neo_viewmodel_fov_offset; extern ConVar neo_aim_hold; extern ConVar cl_autoreload_when_empty; extern ConVar cl_righthand; +extern ConVar cl_neo_lean_viewmodel_only; extern ConVar cl_showpos; extern ConVar cl_showfps; extern ConVar hud_fastswitch; @@ -185,6 +186,7 @@ void NeoSettingsRestore(NeoSettings *ns) pGeneral->bAimHold = neo_aim_hold.GetBool(); pGeneral->bReloadEmpty = cl_autoreload_when_empty.GetBool(); pGeneral->bViewmodelRighthand = cl_righthand.GetBool(); + pGeneral->bLeanViewmodelOnly = cl_neo_lean_viewmodel_only.GetBool(); pGeneral->bShowPlayerSprays = !(cvr->cl_player_spray_disable.GetBool()); // Inverse pGeneral->bShowPos = cl_showpos.GetBool(); pGeneral->iShowFps = cl_showfps.GetInt(); @@ -373,6 +375,7 @@ void NeoSettingsSave(const NeoSettings *ns) neo_aim_hold.SetValue(pGeneral->bAimHold); cl_autoreload_when_empty.SetValue(pGeneral->bReloadEmpty); cl_righthand.SetValue(pGeneral->bViewmodelRighthand); + cl_neo_lean_viewmodel_only.SetValue(pGeneral->bLeanViewmodelOnly); cvr->cl_player_spray_disable.SetValue(!pGeneral->bShowPlayerSprays); // Inverse cl_showpos.SetValue(pGeneral->bShowPos); cl_showfps.SetValue(pGeneral->iShowFps); @@ -507,6 +510,7 @@ void NeoSettings_General(NeoSettings *ns) NeoUI::RingBoxBool(L"Aim hold", &pGeneral->bAimHold); NeoUI::RingBoxBool(L"Reload empty", &pGeneral->bReloadEmpty); NeoUI::RingBoxBool(L"Right hand viewmodel", &pGeneral->bViewmodelRighthand); + NeoUI::RingBoxBool(L"Lean viewmodel only", &pGeneral->bLeanViewmodelOnly); NeoUI::RingBoxBool(L"Show player spray", &pGeneral->bShowPlayerSprays); NeoUI::RingBoxBool(L"Show position", &pGeneral->bShowPos); NeoUI::RingBox(L"Show FPS", SHOWFPS_LABELS, ARRAYSIZE(SHOWFPS_LABELS), &pGeneral->iShowFps); diff --git a/mp/src/game/client/neo/ui/neo_root_settings.h b/mp/src/game/client/neo/ui/neo_root_settings.h index 96583b2824..2435263c76 100644 --- a/mp/src/game/client/neo/ui/neo_root_settings.h +++ b/mp/src/game/client/neo/ui/neo_root_settings.h @@ -13,6 +13,7 @@ struct NeoSettings bool bAimHold; bool bReloadEmpty; bool bViewmodelRighthand; + bool bLeanViewmodelOnly; bool bShowPlayerSprays; bool bShowPos; int iShowFps; diff --git a/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp b/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp index 5c4c43b8e8..96e05ce52c 100644 --- a/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp +++ b/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp @@ -268,7 +268,9 @@ float GetLeanRatio(const float leanAngle) return fabs(leanAngle) / ((leanAngle < 0) ? neo_lean_yaw_peek_left_amount.GetFloat() : neo_lean_yaw_peek_right_amount.GetFloat()); } -ConVar cl_neo_lean_viewmodel_only("cl_neo_lean_viewmodel_only", "1", FCVAR_ARCHIVE, "Rotate view-model instead of camera when leaning", true, 0, true, 1); +#ifdef CLIENT_DLL +ConVar cl_neo_lean_viewmodel_only("cl_neo_lean_viewmodel_only", "0", FCVAR_ARCHIVE, "Rotate view-model instead of camera when leaning", true, 0, true, 1); +#endif float CNEOPredictedViewModel::lean(CNEO_Player *player){ Assert(player); @@ -433,10 +435,12 @@ void CNEOPredictedViewModel::CalcViewModelView(CBasePlayer *pOwner, newPos += vUp * vOffset.z; newAng += angOffset; +#ifdef CLIENT_DLL if (cl_neo_lean_viewmodel_only.GetBool()) { newAng.z += m_flLeanAngle; } +#endif BaseClass::CalcViewModelView(pOwner, newPos, newAng); } From 09d325099c9d10ab4eab9788bc482122c83270ee Mon Sep 17 00:00:00 2001 From: AdamTadeusz Date: Wed, 16 Oct 2024 15:02:03 +0100 Subject: [PATCH 3/6] add convar to cvr --- mp/src/game/client/neo/ui/neo_root_settings.h | 1 + 1 file changed, 1 insertion(+) diff --git a/mp/src/game/client/neo/ui/neo_root_settings.h b/mp/src/game/client/neo/ui/neo_root_settings.h index 7a9623d9cd..8ce5413774 100644 --- a/mp/src/game/client/neo/ui/neo_root_settings.h +++ b/mp/src/game/client/neo/ui/neo_root_settings.h @@ -155,6 +155,7 @@ struct NeoSettings CONVARREF_DEF(neo_aim_hold); CONVARREF_DEF(cl_autoreload_when_empty); CONVARREF_DEF(cl_righthand); + CONVARREF_DEF(cl_neo_lean_viewmodel_only); CONVARREF_DEF(cl_showpos); CONVARREF_DEF(cl_showfps); CONVARREF_DEF(hud_fastswitch); From d9797aa6b0772bb21f69d6e2b4bbb0fb487b307f Mon Sep 17 00:00:00 2001 From: AdamTadeusz Date: Wed, 16 Oct 2024 15:06:01 +0100 Subject: [PATCH 4/6] cleanup --- mp/src/game/shared/neo/weapons/weapon_neobasecombatweapon.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mp/src/game/shared/neo/weapons/weapon_neobasecombatweapon.cpp b/mp/src/game/shared/neo/weapons/weapon_neobasecombatweapon.cpp index 30542b4be0..2fd77aee37 100644 --- a/mp/src/game/shared/neo/weapons/weapon_neobasecombatweapon.cpp +++ b/mp/src/game/shared/neo/weapons/weapon_neobasecombatweapon.cpp @@ -29,14 +29,14 @@ extern ConVar weaponstay; IMPLEMENT_NETWORKCLASS_ALIASED( NEOBaseCombatWeapon, DT_NEOBaseCombatWeapon ) BEGIN_NETWORK_TABLE( CNEOBaseCombatWeapon, DT_NEOBaseCombatWeapon ) - #ifdef CLIENT_DLL +#ifdef CLIENT_DLL RecvPropTime(RECVINFO(m_flSoonestAttack)), RecvPropTime(RECVINFO(m_flLastAttackTime)), RecvPropFloat(RECVINFO(m_flAccuracyPenalty)), RecvPropInt(RECVINFO(m_nNumShotsFired)), RecvPropBool(RECVINFO(m_bRoundChambered)), RecvPropBool(RECVINFO(m_bRoundBeingChambered)), - #else +#else SendPropTime(SENDINFO(m_flSoonestAttack)), SendPropTime(SENDINFO(m_flLastAttackTime)), SendPropFloat(SENDINFO(m_flAccuracyPenalty)), From 830bb9c1c03297ed57a2c315902e5ee31198f995 Mon Sep 17 00:00:00 2001 From: AdamTadeusz Date: Wed, 16 Oct 2024 15:26:11 +0100 Subject: [PATCH 5/6] fix camera roll stuck if switching on viewmodel only lean while already leaning --- mp/src/game/shared/neo/neo_predicted_viewmodel.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp b/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp index 13f2b66ffa..74db72077a 100644 --- a/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp +++ b/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp @@ -350,10 +350,11 @@ float CNEOPredictedViewModel::lean(CNEO_Player *player){ m_flLeanAngle = leanAngle; viewAng.z = leanAngle; #ifdef CLIENT_DLL - if (!cl_neo_lean_viewmodel_only.GetBool()) + if (cl_neo_lean_viewmodel_only.GetBool()) { - engine->SetViewAngles(viewAng); + viewAng.z = 0; } + engine->SetViewAngles(viewAng); #endif #ifdef GAME_DLL From ecf657483701f1efa06e6bcd7060787245349673 Mon Sep 17 00:00:00 2001 From: AdamTadeusz Date: Wed, 16 Oct 2024 15:29:04 +0100 Subject: [PATCH 6/6] do this in one go --- mp/src/game/shared/neo/neo_predicted_viewmodel.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp b/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp index 74db72077a..e68a5b8d5f 100644 --- a/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp +++ b/mp/src/game/shared/neo/neo_predicted_viewmodel.cpp @@ -348,12 +348,8 @@ float CNEOPredictedViewModel::lean(CNEO_Player *player){ player->SetViewOffset(viewOffset); m_flLeanAngle = leanAngle; - viewAng.z = leanAngle; #ifdef CLIENT_DLL - if (cl_neo_lean_viewmodel_only.GetBool()) - { - viewAng.z = 0; - } + viewAng.z = cl_neo_lean_viewmodel_only.GetBool() ? 0 : leanAngle; engine->SetViewAngles(viewAng); #endif