From be23b58abf7d0b58a606ba391e8d4a26e9a77651 Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Mon, 10 Aug 2026 21:26:22 -0400 Subject: Add Haze object Signed-off-by: Andrew Opalach --- Plugin.cs | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/Plugin.cs b/Plugin.cs index 0b168b0..c24b8cf 100644 --- a/Plugin.cs +++ b/Plugin.cs @@ -1895,6 +1895,31 @@ namespace WorldTuningTool P("Motion Blur Threshold", 0x18C, ParameterType.FLOAT, pMinStep(0.0f, 0.01f)) }; + private delegate nint CreateHazeObject(); + private delegate nint CreateHazeObject2(nint unknownPtr); + private delegate nint DestroyHazeObject(nint hazeObjectInternal, int unknownInt); + private Hook? createHazeObject; + private Hook? createHazeObject2; + private Hook? destroyHazeObject; + private nint hazeObject = 0x0; + private static Parameter[] hazeParameters = { + M("Haze Draw", 0x14, ParameterType.FLAG, (1 << 1)), + P("Haze Noise Tex Scale", 0x1B4, ParameterType.FLOAT), + P("Haze Invert Src", 0x1D0, ParameterType.BOOL), + P("Haze Scale", 0x1BC, ParameterType.FLOAT), + P("Haze UVW Offset", 0x170, ParameterType.VECTOR3), + P("Haze Direction", 0x180, ParameterType.VECTOR3), + P("Haze Speed", 0x1B0, ParameterType.FLOAT), + P("Haze Move Scale", 0x1B8, ParameterType.FLOAT), + P("Haze Src Z", 0x1D1, ParameterType.BOOL), + P("Haze Enable Depth", 0x1D2, ParameterType.BOOL), + P("Haze Depth Start", 0x1D4, ParameterType.FLOAT), + P("Haze Depth End", 0x1D8, ParameterType.FLOAT), + P("Haze Enable Height", 0x1D3, ParameterType.BOOL), + P("Haze Height Start", 0x1DC, ParameterType.FLOAT), + P("Haze Height End", 0x1E0, ParameterType.FLOAT) + }; + private delegate nint CreateSimpleSkyObject(nint unknownPtr); private delegate nint DestroySimpleSkyObject(nint simpleSkyObjectInternal, int unknownInt); private delegate void RenderSimpleSky(nint simpleSkyObjectInternal, nint unknownPtr); @@ -2078,6 +2103,7 @@ namespace WorldTuningTool .Concat(bloomParameters) .Concat(dofParameters) .Concat(motionBlurParameters) + .Concat(hazeParameters) .Concat(simpleSkyParameters) .Concat(fogParameters) .Concat(waterWaveParameters) @@ -2425,6 +2451,10 @@ namespace WorldTuningTool createMotionBlurObject2 = Hook.Create(0x1424C9740, CreateMotionBlurObject2Hook); // nint destroyMotionBlurObject = Hook.Create(0x1424C97E0, DestroyMotionBlurObjectHook); // nint, int + createHazeObject = Hook.Create(0x1424C6A80, CreateHazeObjectHook); + createHazeObject2 = Hook.Create(0x1424C6C70, CreateHazeObject2Hook); // nint + destroyHazeObject = Hook.Create(0x1424C6E20, DestroyHazeObjectHook); // nint, int + createSimpleSkyObject = Hook.Create(0x141FCCC20, CreateSimpleSkyObjectHook); // nint destroySimpleSkyObject = Hook.Create(0x141FCD840, DestroySimpleSkyObjectHook); // nint, int @@ -2928,6 +2958,14 @@ namespace WorldTuningTool } } + if (hazeObject != 0x0) + { + foreach (Parameter param in hazeParameters) + { + param.Update(hazeObject); + } + } + if (simpleSkyObject != 0x0) { foreach (Parameter param in simpleSkyParameters) @@ -3121,6 +3159,40 @@ namespace WorldTuningTool return destroyMotionBlurObject!.Original(motionBlurObjectInternal, unknownInt); } + private nint CreateHazeObjectHook() + { + hazeObject = createHazeObject!.Original(); + foreach (Parameter param in hazeParameters) + { + param.Update(hazeObject); + } + return hazeObject; + } + + private nint CreateHazeObject2Hook(nint unknownPtr) + { + hazeObject = createHazeObject2!.Original(unknownPtr); + foreach (Parameter param in hazeParameters) + { + param.Update(hazeObject); + } + return hazeObject; + } + + private nint DestroyHazeObjectHook(nint hazeObjectInternal, int unknownInt) + { + Assert(unknownInt == 1); + if (hazeObject == hazeObjectInternal) + { + hazeObject = 0x0; + foreach (Parameter param in hazeParameters) + { + param.Update(hazeObject); + } + } + return destroyHazeObject!.Original(hazeObjectInternal, unknownInt); + } + private nint CreateSimpleSkyObjectHook(nint unknownPtr) { simpleSkyObject = createSimpleSkyObject!.Original(unknownPtr); @@ -4145,6 +4217,20 @@ namespace WorldTuningTool } ImGui.PopID(); + ImGui.PushID("Haze"); + if (ImGui.CollapsingHeader("Haze")) + { + ImGui.Text($"Address: 0x{hazeObject:X}"); + if (hazeObject != 0x0) + { + foreach (Parameter param in hazeParameters) + { + param.Draw(width); + } + } + } + ImGui.PopID(); + ImGui.PushID("Sky"); if (ImGui.CollapsingHeader("Sky")) { -- cgit v1.2.3-101-g0448