summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2026-06-04 15:06:34 -0400
committerAndrew Opalach <andrew@akon.city> 2026-06-04 15:06:34 -0400
commit651c012b9fa24e1ae1a10d578669fd55086094d5 (patch)
tree5fd442471ce0dd7f946087201f1497795b223aeb
parentc17ae36a78425647a44fd4303e01468c17476518 (diff)
downloadWorldTuningTool-651c012b9fa24e1ae1a10d578669fd55086094d5.tar.gz
WorldTuningTool-651c012b9fa24e1ae1a10d578669fd55086094d5.tar.bz2
WorldTuningTool-651c012b9fa24e1ae1a10d578669fd55086094d5.zip
Fix Add to button logic, cleanup
Signed-off-by: Andrew Opalach <andrew@akon.city>
-rwxr-xr-xPlugin.cs467
1 files changed, 242 insertions, 225 deletions
diff --git a/Plugin.cs b/Plugin.cs
index 9f9ba3a..61821d8 100755
--- a/Plugin.cs
+++ b/Plugin.cs
@@ -1,5 +1,5 @@
-#define ENABLE_ASSERTS
-#define SHADER_FEATURES
+//#define ENABLE_ASSERTS
+//#define SHADER_FEATURES
using System.Numerics;
using System.Runtime.InteropServices;
@@ -16,11 +16,12 @@ using SharpPluginLoader.Core.Memory;
using SharpPluginLoader.Core.Entities;
// @TODO:
-// - Adding new value should not show restore button.
-// - Hotload nukes config?
-// - Remove all parameters deemed mostly useless and/or unsafe.
+// - Descriptions.
+// - float format.
+// - Min/Max.
+// - Lights refactor.
+// - Lights iterop.
// - SPL Patches:
-// - Dialoge fix.
// - No crash on empty config.
// - Style change
// - Optimized update logic.
@@ -28,13 +29,10 @@ using SharpPluginLoader.Core.Entities;
// - Tune parameter settings (step, min/max, format, etc).
// - PerFrame.
// - Create light hook.
-// - Inter-op.
-// - Lights.
// - Try to understand shadow distance vs backforward distance vs bias.
// - Shadow distance retuning.
// - Weird shadow area in Rotten Vale.
-// - float format.
-// - Descriptions.
+// - Hotload nukes config?
//
// Known issues to think about:
// - Volume rendering can look really bad with multiple sources(?) (Guding lands vines).
@@ -43,39 +41,9 @@ using SharpPluginLoader.Core.Entities;
namespace WorldTuningTool
{
- public class Interop
+ public unsafe class Plugin : IPlugin
{
- public static string PluginName = "World Tuning Tool";
- private static dynamic? Instance = null;
-
- public bool InitFromLoadedInstance()
- {
- //Instance = IPlugin.GetInstance(Plugin.PluginName);
- Instance = null;
- return Instance != null;
- }
-
- public virtual int AddOverride(string name, Vector4 v4, int i1)
- {
- if (Instance != null)
- {
- return Instance.AddOverride(name, v4, i1);
- }
- return 0;
- }
-
- public virtual void RemoveOverride(int id)
- {
- if (Instance != null)
- {
- Instance.RemoveOverride(id);
- }
- }
- }
-
- public unsafe class Plugin : Interop, IPlugin
- {
- public string Name => PluginName;
+ public string Name => "World Tuning Tool";
public string Author => "Akon City Software";
private static void Assert(bool condition)
@@ -132,7 +100,7 @@ namespace WorldTuningTool
private static Stage selectedStage = globalStage;
private static Stage previousStage = selectedStage;
- private List<Override>? maybeGetStageOverrides(Config config)
+ private static List<Override>? maybeGetStageOverrides(Config config)
{
return currentStage != 0 ? config.Overrides[currentStage] : null;
}
@@ -182,6 +150,30 @@ namespace WorldTuningTool
return false;
}
+ private static bool selectedOverrideSuperseded(Config config, List<Override>? globalOverrides, List<Override>? stageOverrides, Parameter? param)
+ {
+ bool superseded = false;
+ if (param != null)
+ {
+ superseded |= globalOverrides == null && stageOverrides != null &&
+ overridesContainsParam(stageOverrides, param);
+ superseded |= selectedPreset != "" && overridesContainsParam(config.Presets[selectedPreset], param);
+ superseded |= overridesContainsParam(externalOverrides.Values, param);
+ }
+ return superseded;
+ }
+
+ private static bool stageOverrideSuperseded(Config config, Parameter? param)
+ {
+ bool superseded = false;
+ if (param != null)
+ {
+ superseded |= selectedPreset != "" && overridesContainsParam(config.Presets[selectedPreset], param);
+ superseded |= overridesContainsParam(externalOverrides.Values, param);
+ }
+ return superseded;
+ }
+
public abstract class Parameter
{
public string Name;
@@ -754,34 +746,13 @@ namespace WorldTuningTool
{
writeCurrentValue();
}
- Config config = getConfig();
- List<Override> selectedOverrides = config.Overrides[selectedStage];
- if (!assumeOverride && overrideValue && !overridesContainsParam(selectedOverrides, this))
+ if (!overrideValue)
{
- ImGui.SameLine();
- if (ImGui.Button("▲"))
- {
- // Create override before unsetting global.
- Override ov = new Override(this, v4, i1);
- if (selectedStage != globalStage)
- {
- unsetIfOverridesContainsParam(config.Overrides[globalStage], this);
- }
- bool superseded = selectedPreset != "" && overridesContainsParam(config.Presets[selectedPreset], this);
- superseded |= overridesContainsParam(externalOverrides.Values, this);
- if (!superseded)
- {
- ov.Set();
- }
- selectedOverrides.Add(ov);
- }
- if (ImGui.BeginItemTooltip())
- {
- ImGui.Text($"Add to {Config.StageToString(selectedStage)}");
- ImGui.EndTooltip();
- }
+ ImGui.PopItemFlag();
}
- if (!assumeOverride && overrideValue && !pendingUpdate)
+ Config config = getConfig();
+ bool showButtons = !assumeOverride && overrideValue && !pendingUpdate;
+ if (showButtons)
{
ImGui.SameLine();
if (!bValue)
@@ -812,17 +783,67 @@ namespace WorldTuningTool
bValue = false;
}
}
- ImGui.SameLine();
- DrawReferenceValue("Original", oValueV, oValueInt);
- if (ImGui.BeginItemTooltip())
+ List<Override> selectedOverrides = config.Overrides[selectedStage];
+ List<Override>? stageOverrides = maybeGetStageOverrides(config);
+ List<Override>? globalOverrides = null;
+ if (selectedStage != globalStage)
{
- ImGui.Text("Will be incorrect if the in-game value was updated to be the same as an override.");
- ImGui.EndTooltip();
+ globalOverrides = config.Overrides[globalStage];
}
- }
- if (!overrideValue)
- {
- ImGui.PopItemFlag();
+ if (selectedPreset != "")
+ {
+ List<Override> presetOverrides = config.Presets[selectedPreset];
+ if (!overridesContainsParam(presetOverrides, this))
+ {
+ ImGui.SameLine();
+ if (ImGui.Button("▲"))
+ {
+ // Create override before unsetting global.
+ Override ov = new Override(this, v4, i1);
+ bool superseded = overridesContainsParam(externalOverrides.Values, this);
+ if (!superseded)
+ {
+ if (!(stageOverrides != null && unsetIfOverridesContainsParam(stageOverrides, this)))
+ {
+ unsetIfOverridesContainsParam(config.Overrides[globalStage], this);
+ }
+ ov.Set();
+ }
+ presetOverrides.Add(ov);
+ }
+ if (ImGui.BeginItemTooltip())
+ {
+ ImGui.Text($"Add to '{selectedPreset}'");
+ ImGui.EndTooltip();
+ }
+ }
+ }
+ else if (!overridesContainsParam(selectedOverrides, this))
+ {
+ ImGui.SameLine();
+ if (ImGui.Button("▲"))
+ {
+ // Create override before unsetting global.
+ Override ov = new Override(this, v4, i1);
+ bool superseded = selectedOverrideSuperseded(config, globalOverrides, stageOverrides, this);
+ if (!superseded)
+ {
+ if (globalOverrides != null)
+ {
+ unsetIfOverridesContainsParam(globalOverrides, this);
+ }
+ ov.Set();
+ }
+ selectedOverrides.Add(ov);
+ }
+ if (ImGui.BeginItemTooltip())
+ {
+ ImGui.Text($"Add to '{Config.StageToString(selectedStage)}'");
+ ImGui.EndTooltip();
+ }
+ }
+ ImGui.SameLine();
+ DrawReferenceValue("Original", oValueV, oValueInt);
}
ImGui.PopID();
}
@@ -830,28 +851,28 @@ namespace WorldTuningTool
public class Parameter<T> : Parameter where T : unmanaged
{
- public Parameter(string name, nint offset, ParameterType type, bool perFrame, T? step = null, T min = default, T max = default) : base(name, offset, type, perFrame)
+ // @TODO: Defaults are ill-defined. Should have no defaults except for type sizes (byte).
+ public Parameter(string name, nint offset, ParameterType type, bool perFrame, T? step = null, T? min = null, T? max = null) : base(name, offset, type, perFrame)
{
if (typeof(T) == typeof(float))
{
this.stepf = step != null ? Convert.ToSingle(step) : 0.01f;
- this.minf = Convert.ToSingle(min);
- this.maxf = Convert.ToSingle(max);
- if (type == ParameterType.FLOAT && this.minf == 0.0f && this.maxf == 0.0f)
- {
- this.maxf = Single.MaxValue;
- }
+ this.minf = min != null ? Convert.ToSingle(min) : -Single.MaxValue;
+ this.maxf = max != null ? Convert.ToSingle(max) : Single.MaxValue;
}
else if (typeof(T) == typeof(int) || typeof(T) == typeof(byte))
{
this.step = step != null ? Convert.ToInt32(step) : 0;
mask = this.step;
- this.min = Convert.ToInt32(min);
- this.max = Convert.ToInt32(max);
- if (typeof(T) == typeof(byte) && this.min == 0 && this.max == 0)
+ if (typeof(T) == typeof(int))
+ {
+ this.min = min != null ? Convert.ToInt32(min) : Int32.MinValue;
+ this.max = max != null ? Convert.ToInt32(max) : Int32.MaxValue;
+ }
+ else if (typeof(T) == typeof(byte))
{
- this.min = 0x0;
- this.max = 0xFF;
+ this.min = min != null ? Convert.ToInt32(min) : 0x0;
+ this.max = max != null ? Convert.ToInt32(max) : 0xFF;
}
}
}
@@ -1097,7 +1118,7 @@ namespace WorldTuningTool
ImGui.PopStyleVar();
if (ImGui.BeginItemTooltip())
{
- ImGui.Text("The object this parameter belongs to has no current object");
+ ImGui.Text("The type this parameter belongs to has no current object.");
ImGui.EndTooltip();
}
}
@@ -1178,8 +1199,6 @@ namespace WorldTuningTool
new Parameter<float>("LOD Culling Length Bias", 0x224, ParameterType.FLOAT, false),
new Parameter<float>("LOD Culling Pixel Bias", 0x228, ParameterType.FLOAT, false),
new Parameter<byte>("Is Calc LOD Bias Use Boundary", 0x218, ParameterType.BOOL, false),
- new Parameter<byte>("Material Draw SS Normal", 0x5626, ParameterType.BOOL, false),
- new Parameter<float>("Material Height Factor", 0x5628, ParameterType.FLOAT, false),
new Parameter<int>("Model Detail", 0x190, ParameterType.INT, false, 1),
new Parameter<byte>("Passthrough Active", 0xE9A0, ParameterType.BOOL, false),
new Parameter<byte>("Passthrough Culling Active", 0xE9A2, ParameterType.BOOL, false),
@@ -1221,15 +1240,6 @@ namespace WorldTuningTool
new Parameter<int>("Broad Area Shadow Precision", 0x5518, ParameterType.INT, false, 1, 0, 2), // Maybe 3?
new Parameter<float>("Shadow Culling Length", 0x5C, ParameterType.FLOAT, false),
new Parameter<byte>("Light Frustum Cull Enable", 0x552C, ParameterType.BOOL, false),
- new Parameter<float>("Checkerboard Alpha Unroll Near", 0xE964, ParameterType.FLOAT, false),
- new Parameter<float>("Checkerboard Alpha Unroll Far", 0xE968, ParameterType.FLOAT, false),
- new Parameter<float>("Checkerboard History Blend Rate", 0xE96C, ParameterType.FLOAT, false),
- new Parameter<byte>("Checkerboard Sanitize Color", 0xE972, ParameterType.BOOL, false),
- new Parameter<byte>("Checkerboard Blend Dither", 0xE973, ParameterType.BOOL, false),
- new Parameter<float>("Checkerboard BBox Strength", 0xE974, ParameterType.FLOAT, false),
- new Parameter<float>("Checkerboard Dither Passthru Weight", 0xE978, ParameterType.FLOAT, false),
- new Parameter<float>("Checkerboard Dither Filtered Weight", 0xE97C, ParameterType.FLOAT, false),
- new Parameter<byte>("Checkerboard Continous History Reset", 0xE971, ParameterType.BOOL, false),
new Parameter<float>("Snow Field 4 Global LOD Param", 0x5718, ParameterType.FLOAT, false)
};
@@ -1288,7 +1298,7 @@ namespace WorldTuningTool
private nint motionBlurObject = 0x0;
private static Parameter[] motionBlurParameters = {
new Parameter<int>("Type", 0x168, ParameterType.INT, false, 1),
- new Parameter<int>("Sample Num", 0x180, ParameterType.INT, false, 1),
+ new Parameter<int>("Sample Num", 0x180, ParameterType.INT, false, 1, 0),
new Parameter<float>("Shutter Speed", 0x184, ParameterType.FLOAT, true),
new Parameter<float>("Fur Shutter Speed", 0x188, ParameterType.FLOAT, false),
new Parameter<float>("Blur Threshold", 0x18C, ParameterType.FLOAT, false)
@@ -1413,8 +1423,10 @@ namespace WorldTuningTool
.Concat(shadowParameters2).ToArray();
private bool tripleShadowResolution = false;
+ private bool quadrupleShadowResolution = false;
private NativeAction<int> setShadowQuality;
private Patch shadowRes1_3x;
+ private Patch shadowRes1_4x;
private Patch shadowRes1_1;
private Patch shadowRes1_2;
private Patch shadowRes1_3;
@@ -1430,6 +1442,7 @@ namespace WorldTuningTool
shadowRes1_3.Enable();
shadowRes2.Enable();
shadowRes3.Enable();
+ //shadowRes4_Limit.Enable();
}
private void tripleShadowResDisable()
@@ -1440,6 +1453,7 @@ namespace WorldTuningTool
shadowRes1_3.Disable();
shadowRes2.Disable();
shadowRes3.Disable();
+ //shadowRes4_Limit.Disable();
}
private bool fullResVolumeBlur = false;
@@ -1607,14 +1621,14 @@ namespace WorldTuningTool
private List<Light> sceneLights = new List<Light>();
private NativeAction<nint, int, nint, int> addToScene;
private NativeAction<nint> removeFromScene;
- private delegate nint CreateLightObject(int type);
- private Hook<CreateLightObject>? createLightObject;
+ //private delegate nint CreateLightObject(int type);
+ //private Hook<CreateLightObject>? createLightObject;
private delegate void DestroyLightObject(nint lightObject, int unknownInt);
private Hook<DestroyLightObject>? destroyLightObject;
private delegate void UpdateLights(nint lightObject);
private Hook<UpdateLights>? updateLights;
- public override int AddOverride(string name, Vector4 v4, int i1)
+ public int AddOverride(string name, Vector4 v4, int i1)
{
foreach (Parameter param in allParameters)
{
@@ -1639,7 +1653,7 @@ namespace WorldTuningTool
return 0;
}
- public override void RemoveOverride(int id)
+ public void RemoveOverride(int id)
{
if (externalOverrides.ContainsKey(id))
{
@@ -1699,7 +1713,9 @@ namespace WorldTuningTool
addr = PatternScanner.FindFirst(Pattern.FromString("48 83 EC 28 F3 0F 10 0D ?? ?? ?? ?? 80 F9 04 75 2F 48 8B 0D ?? ?? ?? ?? E8 D3 8A E4 01 48 8B 0D ?? ?? ?? ?? 33 D2 E8 ?? ?? ?? ??"));
Assert(addr == 0x14043FF80);
Assert(MemoryUtil.Read<float>(0x142E4FE5C) == 3.0f);
+ Assert(MemoryUtil.Read<float>(0x142C4A2F0) == 4.0f);
shadowRes1_3x = new Patch(addr + 0x8, [0xD0, 0xFE, 0xA0, 0x02]); // 3.0.
+ shadowRes1_4x = new Patch(addr + 0x8, [0x64, 0xA3, 0x80, 0x02]); // 4.0.
shadowRes1_1 = new Patch(addr + 0x65, [0x17]); // Always set "Value is not 1.0" flag.
shadowRes1_2 = new Patch(addr + 0x68, [0x59]); // movss -> mulss.
shadowRes1_3 = new Patch(addr + 0x77, [0x59]); // movss -> mulss.
@@ -1730,7 +1746,8 @@ namespace WorldTuningTool
// This value controls the shadow map texture resolution. 16384x16384 is likely the limit for many drivers
// and any value higher would crash. Keeping this at the default value (unpatched) *should* work unless the
// game does something unpredictable. At 3x Shadow Resolution + High, the shadow map will be 8448x8448.
- /* Results in 16320x16320, not sure why not 16128.
+ /* At 3x Shadow Resolution, results in a 16320x16320 shadow map. Adjusting the shadow map resolution via this
+ * value feels unsafe, especially if the result is not a multiple of something the game would produce.
shadowRes4_Limit = new Patch(addr + 0x29, [ // N/64 = 255, fractional values closer to 256 not tested.
0xB8, 0x40, 0x15, 0x00, 0x00, 0xEB, 0x21 // This case is used for Low, Medium and High in-game.
]);
@@ -1895,7 +1912,7 @@ namespace WorldTuningTool
ConfigManager.SaveConfig<Config>(this);
}
- /*
+ /* It's hard to test, but I'm pretty sure just updating stepTime isn't enough for a higher rate to look right.
// https://github.com/AsteriskAmpersand/CTC-MHW-Editor/blob/9ec6303042690478398801b1bb860a2d38298eee/structures/Ctc.py#L23
private static bool adjustCtcParams = false;
private static float stepTimeFps = 60.0f;
@@ -2313,12 +2330,9 @@ namespace WorldTuningTool
}
foreach (Override ovR in prevOverrides)
{
- bool superseded = false;
- if (ovR.Param != null)
- {
- superseded |= selectedPreset != "" && overridesContainsParam(config.Presets[selectedPreset], ovR.Param);
- superseded |= overridesContainsParam(externalOverrides.Values, ovR.Param);
- }
+ // If previousStage was global, none of it's parameters could have been
+ // superseded by a non-global stage override.
+ bool superseded = stageOverrideSuperseded(config, ovR.Param);
if (!superseded)
{
ovR.Unset();
@@ -2333,12 +2347,7 @@ namespace WorldTuningTool
List<Override> stageOverrides = config.Overrides[stage];
foreach (Override ovS in stageOverrides)
{
- bool superseded = false;
- if (ovS.Param != null)
- {
- superseded |= selectedPreset != "" && overridesContainsParam(config.Presets[selectedPreset], ovS.Param);
- superseded |= overridesContainsParam(externalOverrides.Values, ovS.Param);
- }
+ bool superseded = stageOverrideSuperseded(config, ovS.Param);
if (!superseded)
{
if (ovS.Param != null)
@@ -2425,14 +2434,7 @@ namespace WorldTuningTool
{
ImGui.PushID(i);
Override ovS = selectedOverrides[i];
- bool superseded = false;
- if (ovS.Param != null)
- {
- superseded |= globalOverrides == null && stageOverrides != null &&
- overridesContainsParam(stageOverrides, ovS.Param);
- superseded |= selectedPreset != "" && overridesContainsParam(config.Presets[selectedPreset], ovS.Param);
- superseded |= overridesContainsParam(externalOverrides.Values, ovS.Param);
- }
+ bool superseded = selectedOverrideSuperseded(config, globalOverrides, stageOverrides, ovS.Param);
bool requestRemove = ImGui.Button("X");
ImGui.SameLine();
bool requestUp = ImGui.Button("▲");
@@ -2529,11 +2531,7 @@ namespace WorldTuningTool
List<Override> prevOverrides = config.Presets[prevPreset];
foreach (Override ovR in prevOverrides)
{
- bool superseded = false;
- if (ovR.Param != null)
- {
- superseded |= overridesContainsParam(externalOverrides.Values, ovR.Param);
- }
+ bool superseded = ovR.Param != null && overridesContainsParam(externalOverrides.Values, ovR.Param);
if (!superseded)
{
ovR.Unset();
@@ -2552,11 +2550,7 @@ namespace WorldTuningTool
List<Override> newOverrides = config.Presets[selectedPreset];
foreach (Override ovN in newOverrides)
{
- bool superseded = false;
- if (ovN.Param != null)
- {
- superseded |= overridesContainsParam(externalOverrides.Values, ovN.Param);
- }
+ bool superseded = ovN.Param != null && overridesContainsParam(externalOverrides.Values, ovN.Param);
if (!superseded)
{
if (ovN.Param != null)
@@ -2593,16 +2587,19 @@ namespace WorldTuningTool
if (ImGui.Button("Save"))
{
string presetName = typedPresetName;
- int presetDup = 0;
- while (config.Presets.ContainsKey(presetName))
+ if (presetName != selectedPreset)
{
- presetDup++;
- presetName = $"{typedPresetName} ({presetDup})";
+ int presetDup = 0;
+ while (config.Presets.ContainsKey(presetName))
+ {
+ presetDup++;
+ presetName = $"{typedPresetName} ({presetDup})";
+ }
+ List<Override> tmpOverrides = config.Presets[selectedPreset];
+ config.Presets.Remove(selectedPreset);
+ config.Presets[presetName] = tmpOverrides;
+ selectedPreset = presetName;
}
- List<Override> tmpOverrides = config.Presets[selectedPreset];
- config.Presets.Remove(selectedPreset);
- config.Presets[presetName] = tmpOverrides;
- selectedPreset = presetName;
renamingPreset = false;
}
if (typedPresetName == "")
@@ -2628,11 +2625,7 @@ namespace WorldTuningTool
{
ImGui.PushID(i);
Override ovP = presetOverrides[i];
- bool superseded = false;
- if (ovP.Param != null)
- {
- superseded |= overridesContainsParam(externalOverrides.Values, ovP.Param);
- }
+ bool superseded = ovP.Param != null && overridesContainsParam(externalOverrides.Values, ovP.Param);
bool requestRemove = ImGui.Button("X");
ImGui.SameLine();
bool requestUp = ImGui.Button("▲");
@@ -2719,6 +2712,21 @@ namespace WorldTuningTool
ImGui.Text("In-Game Settings:\n - High: 1.0 -> 3.0\n - Mid: 0.7 -> 2.1\n - Low: 0.5 -> 1.5");
ImGui.EndTooltip();
}
+ ImGui.SameLine();
+ if (ImGui.Checkbox("4x Shadow Resolution", ref quadrupleShadowResolution))
+ {
+ if (quadrupleShadowResolution)
+ {
+ shadowRes1_3x.Disable();
+ shadowRes1_4x.Enable();
+ }
+ else
+ {
+ shadowRes1_4x.Disable();
+ shadowRes1_3x.Enable();
+ }
+ setShadowQuality.Invoke(MemoryUtil.Read<int>(sMhScene!.Instance + 0x5530) + 1);
+ }
if (ImGui.Checkbox("Volume Rendering Full Resolution Blur Pass (Requires Area Change)", ref fullResVolumeBlur))
{
@@ -2904,75 +2912,20 @@ namespace WorldTuningTool
if (ImGui.CollapsingHeader("Parameters"))
{
- if (ImGui.CollapsingHeader("FXAA Parameters"))
- {
- ImGui.PushID("FXAA");
- ImGui.Text($"Address: {fxaaObject:X}");
- if (fxaaObject != 0x0)
- {
- foreach (Parameter param in fxaaParameters)
- {
- param.Draw(width);
- }
- }
- ImGui.PopID();
- }
-
- if (ImGui.CollapsingHeader("Depth of Field Parameters"))
- {
- ImGui.PushID("DepthOfField");
- ImGui.Text($"Address: {dofObject:X}");
- if (dofObject != 0x0)
- {
- foreach (Parameter param in dofParameters)
- {
- param.Draw(width);
- }
- }
- ImGui.PopID();
- }
-
- if (ImGui.CollapsingHeader("Motion Blur Parameters"))
- {
- ImGui.PushID("MotionBlur");
- ImGui.Text($"Address: {motionBlurObject:X}");
- if (motionBlurObject != 0x0)
- {
- foreach (Parameter param in motionBlurParameters)
- {
- param.Draw(width);
- }
- }
- }
-
- if (ImGui.CollapsingHeader("Bloom Parameters"))
- {
- ImGui.PushID("Bloom");
- ImGui.Text($"Address: {bloomObject:X}");
- if (bloomObject != 0x0)
- {
- foreach (Parameter param in bloomParameters)
- {
- param.Draw(width);
- }
- }
- }
+ ImGui.Separator();
- if (ImGui.CollapsingHeader("Lighting Parameters"))
+ if (ImGui.CollapsingHeader("Scene"))
{
- ImGui.PushID("Lighting");
- ImGui.Text($"Address: {lightingObject:X}");
- if (lightingObject != 0x0)
+ ImGui.PushID("Scene");
+ ImGui.Text($"Address: {sMhScene!.Instance:X}");
+ foreach (Parameter param in sceneParameters)
{
- foreach (Parameter param in lightingParameters)
- {
- param.Draw(width);
- }
+ param.Draw(width);
}
ImGui.PopID();
}
- if (ImGui.CollapsingHeader("Shadow (a.k.a. \"Infinite Light\") Parameters"))
+ if (ImGui.CollapsingHeader("Sun Light/Shadows"))
{
ImGui.PushID("Shadows");
// MonsterHunterWorld.exe+1AB99E0 - mov rax,[MonsterHunterWorld.exe+500E180]
@@ -3005,7 +2958,7 @@ namespace WorldTuningTool
ImGui.PopID();
}
- if (ImGui.CollapsingHeader("SSAO Parameters"))
+ if (ImGui.CollapsingHeader("Screen-space Ambient Occlusion"))
{
ImGui.PushID("SSAO");
ImGui.Text($"Address: {sMhScene!.Instance:X}");
@@ -3016,7 +2969,7 @@ namespace WorldTuningTool
ImGui.PopID();
}
- if (ImGui.CollapsingHeader("SSLR Parameters"))
+ if (ImGui.CollapsingHeader("Screen-space Local Reflections"))
{
ImGui.PushID("SSLR");
ImGui.Text($"Address: {sMhScene!.Instance:X}");
@@ -3027,27 +2980,91 @@ namespace WorldTuningTool
ImGui.PopID();
}
- if (ImGui.CollapsingHeader("Light Probes Parameters"))
+ if (ImGui.CollapsingHeader("Bloom"))
{
- ImGui.PushID("LightProbes");
- ImGui.Text($"Address: {sLightProbes!.Instance:X}");
- foreach (Parameter param in lightProbesParameters)
+ ImGui.PushID("Bloom");
+ ImGui.Text($"Address: {bloomObject:X}");
+ if (bloomObject != 0x0)
{
- param.Draw(width);
+ foreach (Parameter param in bloomParameters)
+ {
+ param.Draw(width);
+ }
+ }
+ }
+
+ if (ImGui.CollapsingHeader("Depth of Field"))
+ {
+ ImGui.PushID("DepthOfField");
+ ImGui.Text($"Address: {dofObject:X}");
+ if (dofObject != 0x0)
+ {
+ foreach (Parameter param in dofParameters)
+ {
+ param.Draw(width);
+ }
}
ImGui.PopID();
}
- if (ImGui.CollapsingHeader("Scene Parameters"))
+ if (ImGui.CollapsingHeader("Motion Blur"))
{
- ImGui.PushID("Scene");
- ImGui.Text($"Address: {sMhScene!.Instance:X}");
- foreach (Parameter param in sceneParameters)
+ ImGui.PushID("MotionBlur");
+ ImGui.Text($"Address: {motionBlurObject:X}");
+ if (motionBlurObject != 0x0)
+ {
+ foreach (Parameter param in motionBlurParameters)
+ {
+ param.Draw(width);
+ }
+ }
+ }
+
+ if (ImGui.CollapsingHeader("FXAA"))
+ {
+ ImGui.PushID("FXAA");
+ ImGui.Text($"Address: {fxaaObject:X}");
+ if (fxaaObject != 0x0)
+ {
+ foreach (Parameter param in fxaaParameters)
+ {
+ param.Draw(width);
+ }
+ }
+ ImGui.PopID();
+ }
+
+ if (ImGui.CollapsingHeader("Lighting"))
+ {
+ ImGui.PushID("Lighting");
+ ImGui.Text($"Address: {lightingObject:X}");
+ if (lightingObject != 0x0)
+ {
+ foreach (Parameter param in lightingParameters)
+ {
+ param.Draw(width);
+ }
+ }
+ ImGui.PopID();
+ }
+
+ if (ImGui.CollapsingHeader("Light Probes"))
+ {
+ ImGui.PushID("LightProbes");
+ ImGui.Text($"Address: {sLightProbes!.Instance:X}");
+ foreach (Parameter param in lightProbesParameters)
{
param.Draw(width);
}
ImGui.PopID();
}
+
+ ImGui.Separator();
+ }
+ if (ImGui.BeginItemTooltip())
+ {
+ ImGui.Text("\"Original\" values may be inaccurate for multiple reasons, including\n 1. The value was set by the game to the same value as an already applied Override.\n 2. The value is being set per-frame in a location unknown to this mod.");
+ ImGui.EndTooltip();
}
if (ImGui.CollapsingHeader("DEBUG"))