Ultrawide fix is now revertible in real time

This commit is contained in:
2025-11-18 21:15:29 +01:00
parent f89d03f002
commit 497f7ae768

View File

@@ -58,6 +58,7 @@ static uint8_t* FPSaddress = nullptr;
// Hooking
static SafetyHookMid FOVHook{};
static SafetyHookMid UltraWideHook{};
static SafetyHookMid FPSHook{};
static SafetyHookMid VignettingHook{};
static SafetyHookMid FogHook{};
@@ -88,7 +89,7 @@ extern "C" __declspec(dllexport) void SetFixEnabled(bool enabled, bool init)
}
if (!UltraWideaddress) {
constexpr auto AspectRatioAxisConstraintStringObfuscated = make_obfuscated<0x4A>("C7 80 ?? ?? ?? ?? 3B 8E E3 3F 48 8B");
constexpr auto AspectRatioAxisConstraintStringObfuscated = make_obfuscated<0x4A>("89 ?? ?? 0F B6 ?? ?? ?? ?? ?? 33 ?? ?? 83 ?? ?? 31 ?? ?? 0F B6");
UltraWideaddress = Memory::AOBScan("", AspectRatioAxisConstraintStringObfuscated.decrypt(), PAGE_EXECUTE_READ);
if (!UltraWideaddress)
@@ -256,6 +257,26 @@ static void FOVFixEnabled() {
}
}
static void UltraWideFixEnabled() {
if (g_fix_enabled && g_ultrawide_fix_enabled && UltraWideaddress) {
if (!UltraWideHook) {
UltraWideHook = safetyhook::create_mid(UltraWideaddress,
[](SafetyHookContext& ctx) {
ctx.rax = *(uint32_t*)&aspectRatio;
});
}
else UltraWideHook.enable();
logger->info("Ultrawide fix enabled");
FOVFixEnabled();
}
if (!(g_fix_enabled && g_ultrawide_fix_enabled) && UltraWideaddress) {
if (UltraWideHook) UltraWideHook.disable();
logger->info("Ultrawide fix disabled");
if (!g_fov_fix_enabled) FOVFixEnabled();
}
}
static void VignettingFixEnabled() {
if (g_fix_enabled && g_Vignetting_fix_enabled && Vignettingaddress) {
if (!VignettingHook) { // Hook only once
@@ -308,21 +329,6 @@ static void FPSFixEnabled() {
}
// Memory patch fixes
static void UltraWideFixEnabled() {
if (g_fix_enabled && g_ultrawide_fix_enabled && UltraWideaddress) {
const char* newAspectRatio = Memory::Float32ToHexBytes(aspectRatio); // Converts new apsect ratio in 4 char bytes
Memory::PatchBytes(UltraWideaddress + 0x6, newAspectRatio, 4); // mov [rax+00000208],3FE38E3B <= patched
logger->info("Ultrawide fix enabled");
FOVFixEnabled();
}
if (!(g_fix_enabled && g_ultrawide_fix_enabled) && UltraWideaddress) {
Memory::RestoreBytes(UltraWideaddress + 0x6);
logger->info("Ultrawide fix disabled");
if (!g_fov_fix_enabled)
FOVFixEnabled();
}
}
static void DOFFixEnabled() { // Depth of field (bokeh)
if (g_fix_enabled && g_DOF_fix_enabled && DOFaddress) {
Memory::PatchBytes(DOFaddress, "\x31\xFF\x90", 3); // xor edi,edi r.DepthOfFieldQuality = 0