From 87f29e5f213e5b7f0df077459e38a0877f3afd70 Mon Sep 17 00:00:00 2001 From: khang Date: Fri, 29 Mar 2024 21:20:37 -0400 Subject: [PATCH 1/2] Add bxt-rs camera replay related hooks --- BunnymodXT/modules/HwDLL.cpp | 22 ++++++++++++++++++++++ BunnymodXT/modules/HwDLL.hpp | 2 ++ 2 files changed, 24 insertions(+) diff --git a/BunnymodXT/modules/HwDLL.cpp b/BunnymodXT/modules/HwDLL.cpp index dba0ea57..63255253 100644 --- a/BunnymodXT/modules/HwDLL.cpp +++ b/BunnymodXT/modules/HwDLL.cpp @@ -41,6 +41,7 @@ struct on_tas_playback_frame_data { std::array prev_predicted_trace_fractions; std::array prev_predicted_trace_normal_zs; on_tas_playback_frame_max_accel_yaw_offset max_accel_yaw_offset; + std::array rendered_viewangles; }; // Change the variable name if you change the parameters! @@ -2474,6 +2475,26 @@ cvar_t* HwDLL::FindCVar(const char* name) return ORIG_Cvar_FindVar(name); } +std::array HwDLL::GetRenderedViewangles() { + std::array res = {player.Viewangles[0], player.Viewangles[1], player.Viewangles[2]}; + + if (!PitchOverrides.empty()) { + res[0] = PitchOverrides[PitchOverrideIndex]; + } + if (!RenderPitchOverrides.empty()) { + res[0] = RenderPitchOverrides[RenderPitchOverrideIndex]; + } + + if (!TargetYawOverrides.empty()) { + res[1] = TargetYawOverrides[TargetYawOverrideIndex]; + } + if (!RenderYawOverrides.empty()) { + res[1] = RenderYawOverrides[RenderYawOverrideIndex]; + } + + return res; +} + int HwDLL::CallOnTASPlaybackFrame() { if (!bxt_on_tas_playback_frame) return 0; @@ -2489,6 +2510,7 @@ int HwDLL::CallOnTASPlaybackFrame() { StrafeState.MaxAccelYawOffsetAccel, // accel static_cast(StrafeState.MaxAccelYawOffsetDir), // dir }, + GetRenderedViewangles(), }); } diff --git a/BunnymodXT/modules/HwDLL.hpp b/BunnymodXT/modules/HwDLL.hpp index 9f3e6462..4b080dba 100644 --- a/BunnymodXT/modules/HwDLL.hpp +++ b/BunnymodXT/modules/HwDLL.hpp @@ -360,6 +360,8 @@ class HwDLL : public IHookableNameFilterOrdered bool is_cof_steam = false; // Cry of Fear-specific + // For bxt-rs rendered view playback. + std::array GetRenderedViewangles(); int CallOnTASPlaybackFrame(); void CallOnTASPlaybackStopped(); void ResetTASPlaybackState(); From 19de4ca7f703ae987f5a85ca3337b41dd0257a06 Mon Sep 17 00:00:00 2001 From: khang Date: Fri, 12 Jul 2024 14:10:10 -0400 Subject: [PATCH 2/2] change bxt_on_tas_playback_frame to bxt_on_tas_playback_frame_v2 --- BunnymodXT/modules/HwDLL.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/BunnymodXT/modules/HwDLL.cpp b/BunnymodXT/modules/HwDLL.cpp index 63255253..c4fcaac7 100644 --- a/BunnymodXT/modules/HwDLL.cpp +++ b/BunnymodXT/modules/HwDLL.cpp @@ -50,7 +50,7 @@ extern "C" { // BXT will call this right before running HLStrafe for every played back frame of a TAS. // // Return value != 0 will cause BXT to stop TAS playback. - DLLEXPORT int (*bxt_on_tas_playback_frame)(on_tas_playback_frame_data data); + DLLEXPORT int (*bxt_on_tas_playback_frame_v2)(on_tas_playback_frame_data data); // BXT will call this when the TAS playback stops. DLLEXPORT void (*bxt_on_tas_playback_stopped)(); @@ -2496,10 +2496,10 @@ std::array HwDLL::GetRenderedViewangles() { } int HwDLL::CallOnTASPlaybackFrame() { - if (!bxt_on_tas_playback_frame) + if (!bxt_on_tas_playback_frame_v2) return 0; - return bxt_on_tas_playback_frame(on_tas_playback_frame_data { + return bxt_on_tas_playback_frame_v2(on_tas_playback_frame_data { StrafeState.StrafeCycleFrameCount, PrevFractions, PrevNormalzs, @@ -6149,7 +6149,7 @@ void HwDLL::InsertCommands() pushables, }); - if (bxt_on_tas_playback_frame) { + if (bxt_on_tas_playback_frame_v2) { const auto stop = CallOnTASPlaybackFrame(); if (stop) { ResetTASPlaybackState(); @@ -6683,7 +6683,7 @@ void HwDLL::InsertCommands() RenderPitchOverrides.clear(); RenderPitchOverrideIndex = 0; - if (bxt_on_tas_playback_frame) { + if (bxt_on_tas_playback_frame_v2) { // We don't use the return value here because we stop anyway. CallOnTASPlaybackFrame(); }