From 38acd3ebe0db837ea216ce67094eeaa829dd3d85 Mon Sep 17 00:00:00 2001 From: EricPlayZ Date: Sun, 12 May 2024 02:26:29 +0300 Subject: [PATCH] fixed FOV issues --- EGameTools/source/game/Engine/CBaseCamera.cpp | 11 +++++ EGameTools/source/game/Engine/CBaseCamera.h | 1 + EGameTools/source/menu/camera.cpp | 45 +++++++++++-------- 3 files changed, 39 insertions(+), 18 deletions(-) diff --git a/EGameTools/source/game/Engine/CBaseCamera.cpp b/EGameTools/source/game/Engine/CBaseCamera.cpp index e611002..f9895d3 100644 --- a/EGameTools/source/game/Engine/CBaseCamera.cpp +++ b/EGameTools/source/game/Engine/CBaseCamera.cpp @@ -58,4 +58,15 @@ namespace Engine { return; } } + void CBaseCamera::SetFOV(float fov) { + __try { + void* (*pSetFOV)(LPVOID pCBaseCamera, float fov) = (decltype(pSetFOV))Utils::Memory::GetProcAddr("engine_x64_rwdi.dll", "?SetFOV@IBaseCamera@@QEAAXM@Z"); + if (!pSetFOV) + return; + + pSetFOV(this, fov); + } __except (EXCEPTION_EXECUTE_HANDLER) { + return; + } + } } \ No newline at end of file diff --git a/EGameTools/source/game/Engine/CBaseCamera.h b/EGameTools/source/game/Engine/CBaseCamera.h index 7f8695b..89f8c10 100644 --- a/EGameTools/source/game/Engine/CBaseCamera.h +++ b/EGameTools/source/game/Engine/CBaseCamera.h @@ -17,5 +17,6 @@ namespace Engine { Vector3* GetPosition(Vector3* outPos); void SetPosition(const Vector3* pos); + void SetFOV(float fov); }; } \ No newline at end of file diff --git a/EGameTools/source/menu/camera.cpp b/EGameTools/source/menu/camera.cpp index 545a45e..4162c99 100644 --- a/EGameTools/source/menu/camera.cpp +++ b/EGameTools/source/menu/camera.cpp @@ -42,8 +42,31 @@ namespace Menu { if (menuToggle.GetValue()) return; + GamePH::LevelDI* iLevel = GamePH::LevelDI::Get(); + Engine::CBaseCamera* viewCam = reinterpret_cast(iLevel->GetViewCamera()); + + static int previousFOV = FOV; + + if (goProMode.GetValue()) { + if (goProMode.HasChangedTo(true)) { + previousFOV = FOV; + goProMode.SetPrevValue(true); + } + + if (iLevel && viewCam) + viewCam->SetFOV(110.0f); + FOV = 110.0f; + return; + } else if (goProMode.HasChangedTo(false)) { + FOV = previousFOV; + goProMode.SetPrevValue(false); + + if (iLevel && viewCam) + viewCam->SetFOV(static_cast(FOV)); + } + Engine::CVideoSettings* videoSettings = Engine::CVideoSettings::Get(); - if (!videoSettings) + if (!videoSettings || goProMode.GetValue()) return; FOV = static_cast(videoSettings->extraFOV) + baseFOV; @@ -144,21 +167,6 @@ namespace Menu { GamePH::PlayerVariables::ManagePlayerVarOption("CameraDefaultFOVReduction", 0.0f, baseSafezoneFOVReduction, &disableSafezoneFOVReduction, true); - Engine::CVideoSettings* pCVideoSettings = Engine::CVideoSettings::Get(); - if (pCVideoSettings) { - static int previousFOV = FOV; - if (goProMode.HasChangedTo(true)) { - previousFOV = FOV; - goProMode.SetPrevValue(true); - } else if (goProMode.HasChangedTo(false)) { - FOV = previousFOV; - pCVideoSettings->extraFOV = static_cast(FOV - baseFOV); - goProMode.SetPrevValue(false); - } - - if (goProMode.GetValue()) - pCVideoSettings->extraFOV = static_cast((goProMode.GetValue() ? 110 : FOV) - baseFOV); - } GamePH::PlayerVariables::ChangePlayerVar("FOVCorrection", goProMode.GetValue() ? 1.0f : lensDistortion / 100.0f); GamePH::PlayerVariables::ManagePlayerVarOption("HeadBobFactor", 1.25f, 1.0f, &goProMode, true); @@ -220,11 +228,12 @@ namespace Menu { ImGui::SeparatorText("Misc"); Engine::CVideoSettings* pCVideoSettings = Engine::CVideoSettings::Get(); - ImGui::BeginDisabled(!pCVideoSettings); { + ImGui::BeginDisabled(!pCVideoSettings || goProMode.GetValue()); { if (ImGui::SliderInt("FOV", "Camera Field of View", &FOV, 20, 160) && pCVideoSettings) pCVideoSettings->extraFOV = static_cast(FOV - baseFOV); - else if (pCVideoSettings) + else if (pCVideoSettings && !goProMode.GetValue()) { FOV = static_cast(pCVideoSettings->extraFOV) + baseFOV; + } ImGui::EndDisabled(); } ImGui::SliderFloat("Lens Distortion", "Default game value is 20%", &lensDistortion, 0.0f, 100.0f, "%.1f%%");