From eff382d4f0c915f3223cda00a62ddd0d98852e8b Mon Sep 17 00:00:00 2001 From: AdamTadeusz Date: Tue, 13 Jan 2026 15:56:05 +0000 Subject: [PATCH 1/2] init --- game/neo/scripts/kb_act.lst | 2 ++ src/game/client/in_main.cpp | 2 +- src/game/shared/gamemovement.cpp | 28 +++++++++++++++++++++++++++- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/game/neo/scripts/kb_act.lst b/game/neo/scripts/kb_act.lst index 569e922755..c53b6fe8f4 100644 --- a/game/neo/scripts/kb_act.lst +++ b/game/neo/scripts/kb_act.lst @@ -14,6 +14,8 @@ "toggle_walk" "Walk (toggle)" "+jump" "#Valve_Jump" "+duck" "#Valve_Duck" +"+moveup" "Move Up (Roaming)" +"+movedown" "Move Down (Roaming)" "blank" "==========================" "blank" "#Valve_Combat_Title" "blank" "==========================" diff --git a/src/game/client/in_main.cpp b/src/game/client/in_main.cpp index d61fe65688..bfa0824a79 100644 --- a/src/game/client/in_main.cpp +++ b/src/game/client/in_main.cpp @@ -1679,7 +1679,7 @@ int CInput::GetButtonBits( int bResetState ) CalcButtonBits( bits, IN_LEAN_RIGHT, s_ClearInputState, &in_lean_right, bResetState ); CalcButtonBits( bits, IN_THERMOPTIC, s_ClearInputState, &in_thermoptic, bResetState); CalcButtonBits( bits, IN_VISION, s_ClearInputState, &in_vision, bResetState); - if (KeyState(&in_speed)) + if (KeyState(&in_speed) && !IsLocalPlayerSpectator()) { // Cancel walk toggle if sprinting KeyUp(&in_walk, nullptr); diff --git a/src/game/shared/gamemovement.cpp b/src/game/shared/gamemovement.cpp index 03f6a75189..452acf31c5 100644 --- a/src/game/shared/gamemovement.cpp +++ b/src/game/shared/gamemovement.cpp @@ -2311,7 +2311,20 @@ void CGameMovement::FullObserverMove( void ) float fmove = mv->m_flForwardMove * factor; float smove = mv->m_flSideMove * factor; - + +#ifdef NEO + const bool bDroneMove = mv->m_nButtons & IN_WALK; + if (bDroneMove) + { + forward.z = 0; + if (fmove && smove) + { + const float moveMagnitude = Vector2D(fmove, smove).LengthSqr(); + fmove *= moveMagnitude / fmove; + smove *= moveMagnitude / smove; + } + } +#endif // NEO VectorNormalize (forward); // Normalize remainder of vectors VectorNormalize (right); // @@ -2389,6 +2402,19 @@ void CGameMovement::FullNoClipMove( float factor, float maxacceleration ) float fmove = mv->m_flForwardMove * factor; float smove = mv->m_flSideMove * factor; +#ifdef NEO + const bool bDroneMove = mv->m_nButtons & IN_WALK; + if (bDroneMove) + { + forward.z = 0; + if (fmove && smove) + { + const float moveMagnitude = Vector2D(fabs(fmove), fabs(smove)).Length(); + fmove *= fabs(fmove) / moveMagnitude; + smove *= fabs(smove) / moveMagnitude; + } + } +#endif // NEO VectorNormalize (forward); // Normalize remainder of vectors VectorNormalize (right); // From d3f0fef637d9e22e2b2aa77a4341d6f3d0f598ce Mon Sep 17 00:00:00 2001 From: AdamTadeusz Date: Tue, 13 Jan 2026 16:02:58 +0000 Subject: [PATCH 2/2] dont make a vector --- src/game/shared/gamemovement.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/game/shared/gamemovement.cpp b/src/game/shared/gamemovement.cpp index 452acf31c5..e1f52cb997 100644 --- a/src/game/shared/gamemovement.cpp +++ b/src/game/shared/gamemovement.cpp @@ -2319,9 +2319,11 @@ void CGameMovement::FullObserverMove( void ) forward.z = 0; if (fmove && smove) { - const float moveMagnitude = Vector2D(fmove, smove).LengthSqr(); - fmove *= moveMagnitude / fmove; - smove *= moveMagnitude / smove; + const float absFMove = fabs(fmove); + const float absSMove = fabs(smove); + const float moveMagnitude = FastSqrt((absFMove * absFMove) + (absSMove * absSMove)); + fmove *= absFMove / moveMagnitude; + smove *= absSMove / moveMagnitude; } } #endif // NEO @@ -2409,9 +2411,11 @@ void CGameMovement::FullNoClipMove( float factor, float maxacceleration ) forward.z = 0; if (fmove && smove) { - const float moveMagnitude = Vector2D(fabs(fmove), fabs(smove)).Length(); - fmove *= fabs(fmove) / moveMagnitude; - smove *= fabs(smove) / moveMagnitude; + const float absFMove = fabs(fmove); + const float absSMove = fabs(smove); + const float moveMagnitude = FastSqrt((absFMove * absFMove) + (absSMove * absSMove)); + fmove *= absFMove / moveMagnitude; + smove *= absSMove / moveMagnitude; } } #endif // NEO