From 8910d2f5f36fa7ced2a9b20a0948d9b2dc746afe Mon Sep 17 00:00:00 2001 From: khang Date: Fri, 29 Mar 2024 12:27:01 -0400 Subject: [PATCH] add pitch_override --- BunnymodXT/modules/ClientDLL.cpp | 4 ++++ BunnymodXT/modules/HwDLL.cpp | 39 ++++++++++++++++++++++++++++++++ BunnymodXT/modules/HwDLL.hpp | 4 ++++ hlstrafe | 2 +- 4 files changed, 48 insertions(+), 1 deletion(-) diff --git a/BunnymodXT/modules/ClientDLL.cpp b/BunnymodXT/modules/ClientDLL.cpp index 4d33a99a..d73b8647 100644 --- a/BunnymodXT/modules/ClientDLL.cpp +++ b/BunnymodXT/modules/ClientDLL.cpp @@ -1505,6 +1505,10 @@ HOOK_DEF_1(ClientDLL, void, __cdecl, V_CalcRefdef, ref_params_t*, pparams) pparams->viewangles[1] = hwDLL.RenderYawOverrides[hwDLL.RenderYawOverrideIndex - 1]; } + if (hwDLL.RenderPitchOverrideIndex != 0 && hwDLL.RenderPitchOverrideIndex <= hwDLL.RenderPitchOverrides.size()) { + pparams->viewangles[0] = hwDLL.RenderPitchOverrides[hwDLL.RenderPitchOverrideIndex - 1]; + } + float forward_offset = CVars::bxt_viewmodel_ofs_forward.GetFloat(); float right_offset = CVars::bxt_viewmodel_ofs_right.GetFloat(); float up_offset = CVars::bxt_viewmodel_ofs_up.GetFloat(); diff --git a/BunnymodXT/modules/HwDLL.cpp b/BunnymodXT/modules/HwDLL.cpp index 92e1a776..0a5929d9 100644 --- a/BunnymodXT/modules/HwDLL.cpp +++ b/BunnymodXT/modules/HwDLL.cpp @@ -812,6 +812,10 @@ void HwDLL::Clear() TargetYawOverrides.clear(); RenderYawOverrideIndex = 0; RenderYawOverrides.clear(); + PitchOverrideIndex = 0; + PitchOverrides.clear(); + RenderPitchOverrideIndex = 0; + RenderPitchOverrides.clear(); lastLoadedMap.clear(); isOverridingCamera = false; isOffsettingCamera = false; @@ -2516,6 +2520,10 @@ void HwDLL::ResetTASPlaybackState() TargetYawOverrides.clear(); RenderYawOverrideIndex = 0; RenderYawOverrides.clear(); + PitchOverrideIndex = 0; + PitchOverrides.clear(); + RenderPitchOverrideIndex = 0; + RenderPitchOverrides.clear(); } void HwDLL::StartTASPlayback() @@ -5566,6 +5574,8 @@ void HwDLL::SetTASEditorMode(TASEditorMode mode) } RenderYawOverrides.clear(); RenderYawOverrideIndex = 0; + RenderPitchOverrides.clear(); + RenderPitchOverrideIndex = 0; assert(movementFrameCounter >= 1); tas_editor_input.first_frame_counter_value = movementFrameCounter - 1; @@ -6094,6 +6104,25 @@ void HwDLL::InsertCommands() RenderYawOverrideIndex += 1; } + if (PitchOverrideIndex == PitchOverrides.size()) { + PitchOverrides.clear(); + PitchOverrideIndex = 0; + } + + if (PitchOverrides.empty()) { + StrafeState.PitchOverrideActive = false; + } else { + StrafeState.PitchOverride = PitchOverrides[PitchOverrideIndex++]; + StrafeState.PitchOverrideActive = true; + } + + if (RenderPitchOverrideIndex == RenderPitchOverrides.size()) { + RenderPitchOverrides.clear(); + RenderPitchOverrideIndex = 0; + } else { + RenderPitchOverrideIndex += 1; + } + f.ResetAutofuncs(); resulting_frame.SetPitch(p.Pitch); @@ -6514,6 +6543,14 @@ void HwDLL::InsertCommands() } else if (!f.RenderYawOverride.empty()) { RenderYawOverrides = f.RenderYawOverride; RenderYawOverrideIndex = 0; + } else if (!f.PitchOverride.empty()) { + PitchOverrides = f.PitchOverride; + StrafeState.PitchOverrideActive = true; + StrafeState.PitchOverride = PitchOverrides[0]; + PitchOverrideIndex = 1; + } else if (!f.RenderPitchOverride.empty()) { + RenderPitchOverrides = f.RenderPitchOverride; + RenderPitchOverrideIndex = 0; } currentFramebulk++; @@ -6546,6 +6583,8 @@ void HwDLL::InsertCommands() if (resetState == ResetState::NORMAL) { RenderYawOverrides.clear(); RenderYawOverrideIndex = 0; + RenderPitchOverrides.clear(); + RenderPitchOverrideIndex = 0; if (bxt_on_tas_playback_frame) { // We don't use the return value here because we stop anyway. diff --git a/BunnymodXT/modules/HwDLL.hpp b/BunnymodXT/modules/HwDLL.hpp index a92b5bed..7c489d9e 100644 --- a/BunnymodXT/modules/HwDLL.hpp +++ b/BunnymodXT/modules/HwDLL.hpp @@ -668,10 +668,14 @@ class HwDLL : public IHookableNameFilterOrdered unsigned LoadingSeedCounter; size_t TargetYawOverrideIndex; std::vector TargetYawOverrides; + size_t PitchOverrideIndex; + std::vector PitchOverrides; float sensitivityToRestore = 0; public: size_t RenderYawOverrideIndex; std::vector RenderYawOverrides; + size_t RenderPitchOverrideIndex; + std::vector RenderPitchOverrides; bool ButtonsPresent; HLTAS::StrafeButtons Buttons; HLStrafe::CurrentState StrafeState; diff --git a/hlstrafe b/hlstrafe index 9e657a86..f0eb38be 160000 --- a/hlstrafe +++ b/hlstrafe @@ -1 +1 @@ -Subproject commit 9e657a862344867fb1e1df17f769267542dd7870 +Subproject commit f0eb38be1dd8b1e52be53428a80c61b1fa7c6cc8