From 7b5706b52c3145bba07dfbc95429798f9059360d Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Thu, 17 Sep 2026 20:00:50 -0400 Subject: Checkboxes for bitmasks Signed-off-by: Andrew Opalach --- Lights.cs | 4 ++-- Plugin.cs | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/Lights.cs b/Lights.cs index 4927fd3..fd072e2 100644 --- a/Lights.cs +++ b/Lights.cs @@ -45,7 +45,7 @@ namespace WorldTuningTool public uLight(nint lightObject) : base(lightObject) { Parameters.AddRange(new Parameter[]{ - M("Group", 0x13C, ParameterType.INT, 0x7, pMinMaxStep(0, 7, 1)), // 1 = World, (1 << 1) = Player/Palico, (1 << 2) = NPCs + M("Group", 0x13C, ParameterType.BITS, 0x7), // 1 = World, (1 << 1) = Player/Palico, (1 << 2) = NPCs M("Priority", 0x138, ParameterType.INT, (0xFF << 6), pMinMaxStep(0, 255, 1)), P("Color", 0x140, ParameterType.COLOR), P("Intensity", 0x144, ParameterType.FLOAT), @@ -277,7 +277,7 @@ namespace WorldTuningTool { public override int Type => 3; public override string Name => $"uSpotLight"; - public override string Info => $"0x{Object:X}, Parent: 0x{Parent:X}"; + public override string Info => $"0x{Object:X}" + (Parent != 0x0 ? $", Parent: 0x{Parent:X}" : ""); public nint Parent => MemoryUtil.Read(Object + 0x600); public int ParentNo => MemoryUtil.Read(Object + 0x610); public nint Target => MemoryUtil.Read(Object + 0x608); diff --git a/Plugin.cs b/Plugin.cs index 7da60f9..20d9786 100644 --- a/Plugin.cs +++ b/Plugin.cs @@ -163,6 +163,7 @@ namespace WorldTuningTool INT, ALIGNED_INT, HEX, + BITS, COLOR, COLOR_FACTOR, FLOAT, @@ -444,6 +445,7 @@ namespace WorldTuningTool case ParameterType.INT: case ParameterType.ALIGNED_INT: case ParameterType.HEX: + case ParameterType.BITS: case ParameterType.COLOR: { ref int i1 = ref MemoryUtil.GetRef(lastAddr + offset); @@ -643,6 +645,7 @@ namespace WorldTuningTool case ParameterType.INT: case ParameterType.ALIGNED_INT: case ParameterType.HEX: + case ParameterType.BITS: case ParameterType.COLOR: { ref int i1 = ref MemoryUtil.GetRef(baseObject + offset); @@ -787,6 +790,7 @@ namespace WorldTuningTool case ParameterType.BYTE: case ParameterType.INT: case ParameterType.HEX: + case ParameterType.BITS: i1 = Math.Clamp(i1, min, max); break; case ParameterType.ALIGNED_INT: @@ -854,6 +858,32 @@ namespace WorldTuningTool } break; } + case ParameterType.BITS: + { + for (int i = 0; i < 32; i++) + { + int bit = (1 << i); + if ((mask & bit) == bit) + { + bool set = (i1 & bit) == bit; + if (ImGui.Checkbox($"##Bit{i}", ref set)) + { + if (set) + { + i1 |= bit; + } + else + { + i1 &= ~bit; + } + valueChanged = true; + } + ImGui.SameLine(); + } + } + ImGui.Text(label); + break; + } case ParameterType.COLOR: { Vector4 colorV = ColorVectorFromInt(i1); @@ -950,6 +980,7 @@ namespace WorldTuningTool ImGui.Text($"({name}: {i1})"); break; case ParameterType.HEX: + case ParameterType.BITS: case ParameterType.COLOR: ImGui.Text($"({name}: {i1:X})"); break; @@ -1281,6 +1312,7 @@ namespace WorldTuningTool case ParameterType.SHADOW_RESOLUTION: return Int32ToString(sValueInt); case ParameterType.HEX: + case ParameterType.BITS: case ParameterType.COLOR: return Int32ToString(sValueInt, "X8"); case ParameterType.FLOAT: @@ -1317,6 +1349,7 @@ namespace WorldTuningTool valueInt = StringToInt32(value); break; case ParameterType.HEX: + case ParameterType.BITS: case ParameterType.COLOR: valueInt = StringToInt32(value, 16); break; -- cgit v1.2.3-101-g0448