diff --git a/ClairObscur/dllmain.cpp b/ClairObscur/dllmain.cpp index ed339c9..58ad060 100644 --- a/ClairObscur/dllmain.cpp +++ b/ClairObscur/dllmain.cpp @@ -4,26 +4,7 @@ #include "UEWidgets.hpp" #include "UEvars.hpp" #include "Logger.hpp" -#include "SDK/Basic.hpp" -#include "SDK/Engine_classes.hpp" -#include "SDK/SandFall_classes.hpp" -#include "SDK/BP_jRPG_GM_Bootstrap_classes.hpp" -#include "SDK/BP_jRPG_Character_World_classes.hpp" -#include "SDK/BP_jRPG_Character_Battle_Base_classes.hpp" -#include "SDK/AC_jRPG_CharacterBattleStats_classes.hpp" -#include "SDK/AC_jRPG_BattleManager_classes.hpp" -#include "SDK/BP_jRPG_Enemy_World_Base_Seamless_classes.hpp" -#include "SDK/WBP_CinematicTransition_classes.hpp" -#include "SDK/WBP_PauseMenu_classes.hpp" -#include "SDK/WBP_HUD_BattleScreen_classes.hpp" -#include "SDK/WBP_GM_MainMenuContainer_classes.hpp" -#include "SDK/WBP_GameMenu_v3_classes.hpp" -#include "SDK/WBP_GM_CharacterMenuContainer_classes.hpp" -#include "SDK/WBP_Merchant_Panel_classes.hpp" -#include "SDK/WBP_WidescreenRatioBox_classes.hpp" -#include "SDK/WBP_DialogNotifBox_classes.hpp" -#include "SDK/WBP_PromptContainer_classes.hpp" -#include "SDK/WBP_Exploration_HUD_classes.hpp" +#include "SDK.h" using namespace SDK; @@ -81,7 +62,8 @@ static float g_Camera_Out = 280.f; static uint8_t* FOVaddress = nullptr; static uint8_t* CameraComponentaddress = nullptr; static uint8_t* Cameraaddress = nullptr; -static uint8_t* CutscenesFPSaddress = nullptr; +static uint8_t* CutscenesFPSaddress1 = nullptr; +static uint8_t* CutscenesFPSaddress2 = nullptr; static uint8_t* CAaddress = nullptr; static uint8_t* DOFaddress = nullptr; static uint8_t* Fogaddress = nullptr; @@ -117,7 +99,8 @@ extern "C" __declspec(dllexport) void SetFixEnabled(bool enabled, bool init) { logger->info("--------------- AOB scan started ---------------"); constexpr auto CameraComponentStringObfuscated = make_obfuscated<0xF3>("EB ?? F3 0F ?? ?? ?? ?? ?? ?? F3 0F ?? ?? ?? 8B 83"); constexpr auto FOVStringObfuscated = make_obfuscated<0xF3>("77 ?? 48 ?? ?? FF 90 ?? ?? ?? ?? F3 0F ?? ?? ?? 48 83 ?? ?? C3"); - constexpr auto CutscenesFPSStringObfuscated = make_obfuscated<0x0F>("EB ?? 0F ?? ?? 48 8B ?? ?? ?? 0F 28 ?? ?? ?? 44 0F ?? ?? ?? ?? 44 0F"); + constexpr auto CutscenesFPS1StringObfuscated = make_obfuscated<0x0F>("EB ?? 0F ?? ?? 48 8B ?? ?? ?? 0F 28 ?? ?? ?? 44 0F ?? ?? ?? ?? 44 0F"); + constexpr auto CutscenesFPS2StringObfuscated = make_obfuscated<0x0F>("0F 84 ?? ?? ?? ?? 48 8D ?? ?? ?? 48 89 ?? ?? ?? E8 ?? ?? ?? ?? 83 78"); constexpr auto CameraStruct1StringObfuscated = make_obfuscated<0x48>("48 89 ?? ?? ?? 57 48 83 ?? ?? 0F ?? ?? 48 8B FA 48 ?? ?? 0F ?? ?? F2 0F 10"); constexpr auto CameraStringObfuscated = make_obfuscated<0x28>("F2 0F 10 ?? ?? ?? 0F 28 ?? ?? ?? ?? ?? F2 0F ?? ?? ?? F2 0F ?? ?? ?? 0F ?? ?? 0F"); constexpr auto CAStringObfuscated = make_obfuscated<0x39>("7F ?? 44 89 ?? ?? ?? ?? ?? 43 8B ?? ?? 39 05 ?? ?? ?? ?? 0F 8F"); @@ -132,7 +115,8 @@ extern "C" __declspec(dllexport) void SetFixEnabled(bool enabled, bool init) { std::vector signatures = { Make(&CameraComponentaddress, CameraComponentStringObfuscated, "Camera component"), Make(&FOVaddress, FOVStringObfuscated, "FOV"), - Make(&CutscenesFPSaddress, CutscenesFPSStringObfuscated, "FPS unlock"), + Make(&CutscenesFPSaddress1, CutscenesFPS1StringObfuscated, "FPS unlock"), + Make(&CutscenesFPSaddress2, CutscenesFPS2StringObfuscated, "FPS unlock"), Make(&CameraStructaddress, CameraStruct1StringObfuscated, "Camera struct"), Make(&Cameraaddress, CameraStringObfuscated, "Camera"), Make(&CAaddress, CAStringObfuscated, "Chromatic aberrations"), @@ -145,7 +129,7 @@ extern "C" __declspec(dllexport) void SetFixEnabled(bool enabled, bool init) { Memory::AOBScanBatch(signatures, logger); if (FOVaddress && DOFaddress && Fogaddress && WorldTimedilationaddress && Timedilationaddress && - CutscenesFPSaddress && CAaddress && CameraComponentaddress && CameraStructaddress && Cameraaddress) + CutscenesFPSaddress1 && CutscenesFPSaddress1 && CAaddress && CameraComponentaddress && CameraStructaddress && Cameraaddress) logger->info("All AOB signatures found. Ready to patch..."); if (!GObjectsaddress || !AppendStringaddress || !ProcessEventaddress) { @@ -173,7 +157,7 @@ extern "C" __declspec(dllexport) void SetFixEnabled(bool enabled, bool init) { if (!init && FOVaddress) FOVFixEnabled(); if (!init && CameraStructaddress) UltraWideFixEnabled(GameFixes::UltraWide); - if (!init && CutscenesFPSaddress) CutscenesFPSFixEnabled(); + if (!init && CutscenesFPSaddress1) CutscenesFPSFixEnabled(); if (!init && Cameraaddress) CameraFixEnabled(); if (!init) HUDUpdate(true); if (!init && DOFaddress) DOFFixEnabled(); @@ -387,15 +371,19 @@ static void CameraFixEnabled() { } static void CutscenesFPSFixEnabled() { - if (!CutscenesFPSaddress) return; + if (!CutscenesFPSaddress1 || !CutscenesFPSaddress2) return; if (g_fix_enabled && g_CutscenesFPS_fix_enabled) { - if (!CutscenesFPSHook) CutscenesFPSHook = safetyhook::create_mid(CutscenesFPSaddress + 0xa, + if (!CutscenesFPSHook) CutscenesFPSHook = safetyhook::create_mid(CutscenesFPSaddress1 + 0xa, [](SafetyHookContext& ctx) { ctx.xmm0.f32[0] = 0.f; }); else CutscenesFPSHook.enable(); + Memory::PatchBytes(CutscenesFPSaddress2,"\x90\xE9",2); + } + else { + if (CutscenesFPSHook) CutscenesFPSHook.disable(); + Memory::RestoreBytes(CutscenesFPSaddress2); } - else if (CutscenesFPSHook) CutscenesFPSHook.disable(); logger->info("Cutscenes FPS unlocker fix {}", g_fix_enabled && g_CutscenesFPS_fix_enabled ? "enabled" : "disabled"); }