diff options
| -rw-r--r-- | Plugin.cs | 86 |
1 files changed, 86 insertions, 0 deletions
@@ -1895,6 +1895,31 @@ namespace WorldTuningTool P<float>("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>? createHazeObject; + private Hook<CreateHazeObject2>? createHazeObject2; + private Hook<DestroyHazeObject>? destroyHazeObject; + private nint hazeObject = 0x0; + private static Parameter[] hazeParameters = { + M<bool>("Haze Draw", 0x14, ParameterType.FLAG, (1 << 1)), + P<float>("Haze Noise Tex Scale", 0x1B4, ParameterType.FLOAT), + P<bool>("Haze Invert Src", 0x1D0, ParameterType.BOOL), + P<float>("Haze Scale", 0x1BC, ParameterType.FLOAT), + P<float>("Haze UVW Offset", 0x170, ParameterType.VECTOR3), + P<float>("Haze Direction", 0x180, ParameterType.VECTOR3), + P<float>("Haze Speed", 0x1B0, ParameterType.FLOAT), + P<float>("Haze Move Scale", 0x1B8, ParameterType.FLOAT), + P<bool>("Haze Src Z", 0x1D1, ParameterType.BOOL), + P<bool>("Haze Enable Depth", 0x1D2, ParameterType.BOOL), + P<float>("Haze Depth Start", 0x1D4, ParameterType.FLOAT), + P<float>("Haze Depth End", 0x1D8, ParameterType.FLOAT), + P<bool>("Haze Enable Height", 0x1D3, ParameterType.BOOL), + P<float>("Haze Height Start", 0x1DC, ParameterType.FLOAT), + P<float>("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<CreateMotionBlurObject2>(0x1424C9740, CreateMotionBlurObject2Hook); // nint destroyMotionBlurObject = Hook.Create<DestroyMotionBlurObject>(0x1424C97E0, DestroyMotionBlurObjectHook); // nint, int + createHazeObject = Hook.Create<CreateHazeObject>(0x1424C6A80, CreateHazeObjectHook); + createHazeObject2 = Hook.Create<CreateHazeObject2>(0x1424C6C70, CreateHazeObject2Hook); // nint + destroyHazeObject = Hook.Create<DestroyHazeObject>(0x1424C6E20, DestroyHazeObjectHook); // nint, int + createSimpleSkyObject = Hook.Create<CreateSimpleSkyObject>(0x141FCCC20, CreateSimpleSkyObjectHook); // nint destroySimpleSkyObject = Hook.Create<DestroySimpleSkyObject>(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")) { |