diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomConfig.java index 03ed25f33c..06f57e73d6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomConfig.java @@ -37,10 +37,20 @@ public interface ZoomConfig extends Config { @ConfigItem( keyName = "enabled", - name = "Enabled", - description = "Configures whether or not the zoom limit is reduced" + name = "Expand outer zoom limit", + description = "Configures whether or not the outer zoom limit is reduced" ) - default boolean enabled() + default boolean outerLimit() + { + return false; + } + + @ConfigItem( + keyName = "inner", + name = "Expand inner zoom limit", + description = "Configures whether or not the inner zoom limit is reduced" + ) + default boolean innerLimit() { return false; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomPlugin.java index 4dd0a42ad0..e22ea3773e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zoom/ZoomPlugin.java @@ -41,9 +41,6 @@ import net.runelite.client.plugins.PluginDescriptor; @Slf4j public class ZoomPlugin extends Plugin { - private static final int INCREASED_RESIZABLE_ZOOM_LIMIT = 70; - private static final int INCREASED_FIXED_ZOOM_LIMIT = 95; - @Inject private Client client; @@ -58,27 +55,56 @@ public class ZoomPlugin extends Plugin @Subscribe public void onScriptEvent(ScriptEvent event) - { - if (!zoomConfig.enabled()) - { - return; - } - - switch (event.getEventName()) - { - case "fixedOuterZoomLimit": - popAndReplace(INCREASED_FIXED_ZOOM_LIMIT); - break; - case "resizableOuterZoomLimit": - popAndReplace(INCREASED_RESIZABLE_ZOOM_LIMIT); - break; - } - } - - private void popAndReplace(int newValue) { int[] intStack = client.getIntStack(); int intStackSize = client.getIntStackSize(); - intStack[intStackSize - 1] = newValue; + if (zoomConfig.outerLimit()) + { + switch (event.getEventName()) + { + case "fixedOuterZoomLimit": + intStack[intStackSize - 1] = 95; + break; + case "resizableOuterZoomLimit": + intStack[intStackSize - 1] = 70; + break; + } + } + if (zoomConfig.innerLimit()) + { + switch (event.getEventName()) + { + case "fixedInnerZoomLimit": + intStack[intStackSize - 1] = 2100; + break; + case "resizableInnerZoomLimit": + intStack[intStackSize - 1] = 2200; + break; + } + } + if (zoomConfig.outerLimit() || zoomConfig.innerLimit()) + { + // This lets the options panel's slider have an exponential rate + final double exponent = 3.d; + switch (event.getEventName()) + { + case "zoomLinToExp": + { + double range = intStack[intStackSize - 1]; + double value = intStack[intStackSize - 2]; + value = Math.pow(value / range, exponent) * range; + intStack[intStackSize - 2] = (int) value; + break; + } + case "zoomExpToLin": + { + double range = intStack[intStackSize - 1]; + double value = intStack[intStackSize - 2]; + value = Math.pow(value / range, 1.d / exponent) * range; + intStack[intStackSize - 2] = (int) value; + break; + } + } + } } } diff --git a/runelite-scripts/scripts/OptionsPanelRebuilder.rs2asm b/runelite-scripts/scripts/OptionsPanelRebuilder.rs2asm index 9b6b1458e7..dcd2eb66c3 100644 --- a/runelite-scripts/scripts/OptionsPanelRebuilder.rs2asm +++ b/runelite-scripts/scripts/OptionsPanelRebuilder.rs2asm @@ -237,6 +237,8 @@ LABEL198: LABEL210: get_varc 73 load_int 700 + load_string "fixedInnerZoomLimit" + runelite_callback if_icmple LABEL214 jump LABEL226 LABEL214: @@ -249,6 +251,8 @@ LABEL214: LABEL218: get_varc 74 load_int 715 + load_string "resizableInnerZoomLimit" + runelite_callback if_icmple LABEL222 jump LABEL226 LABEL222: diff --git a/runelite-scripts/scripts/OptionsPanelZoomMouseListener.rs2asm b/runelite-scripts/scripts/OptionsPanelZoomMouseListener.rs2asm index b5c6874084..3b43b9cdfb 100644 --- a/runelite-scripts/scripts/OptionsPanelZoomMouseListener.rs2asm +++ b/runelite-scripts/scripts/OptionsPanelZoomMouseListener.rs2asm @@ -3,6 +3,8 @@ .string_stack_count 0 .int_var_count 8 .string_var_count 0 +; locals +; 2 bar size get_varbit 4606 load_int 0 if_icmpne LABEL4 @@ -33,22 +35,30 @@ LABEL5: invoke 1046 istore 2 load_int 715 + load_string "resizableInnerZoomLimit" + runelite_callback load_int 175 load_string "resizableOuterZoomLimit" runelite_callback isub - istore 6 + istore 6 ; resizable delta load_int 700 + load_string "fixedInnerZoomLimit" + runelite_callback load_int 195 load_string "fixedOuterZoomLimit" runelite_callback isub - istore 7 + istore 7 ; fixed delta iload 2 iload 6 imul iload 5 - idiv + idiv + iload 6 + load_string "zoomLinToExp" + runelite_callback + pop_int load_int 175 load_string "resizableOuterZoomLimit" runelite_callback @@ -58,7 +68,11 @@ LABEL5: iload 7 imul iload 5 - idiv + idiv + iload 7 + load_string "zoomLinToExp" + runelite_callback + pop_int load_int 195 load_string "fixedOuterZoomLimit" runelite_callback diff --git a/runelite-scripts/scripts/OptionsPanelZoomUpdater.rs2asm b/runelite-scripts/scripts/OptionsPanelZoomUpdater.rs2asm index 2d4fead69d..1f6f5bd2bb 100644 --- a/runelite-scripts/scripts/OptionsPanelZoomUpdater.rs2asm +++ b/runelite-scripts/scripts/OptionsPanelZoomUpdater.rs2asm @@ -3,13 +3,21 @@ .string_stack_count 0 .int_var_count 6 .string_var_count 0 +; locals +; 0 resizableZoomRange +; 1 fixedZoomRange +; 2 bar size load_int 715 + load_string "resizableInnerZoomLimit" + runelite_callback load_int 175 load_string "resizableOuterZoomLimit" runelite_callback isub istore 0 load_int 700 + load_string "fixedInnerZoomLimit" + runelite_callback load_int 195 load_string "fixedOuterZoomLimit" runelite_callback @@ -39,7 +47,11 @@ LABEL27: load_int 175 load_string "resizableOuterZoomLimit" runelite_callback - isub + isub + iload 0 + load_string "zoomExpToLin" + runelite_callback + pop_int iload 2 imul iload 0 @@ -51,7 +63,11 @@ LABEL36: load_int 195 load_string "fixedOuterZoomLimit" runelite_callback - isub + isub + iload 1 + load_string "zoomExpToLin" + runelite_callback + pop_int iload 2 imul iload 1 diff --git a/runelite-scripts/scripts/ScrollWheelZoomHandler.rs2asm b/runelite-scripts/scripts/ScrollWheelZoomHandler.rs2asm index 15c4098b3c..15981d8f15 100644 --- a/runelite-scripts/scripts/ScrollWheelZoomHandler.rs2asm +++ b/runelite-scripts/scripts/ScrollWheelZoomHandler.rs2asm @@ -11,6 +11,8 @@ LABEL4: return LABEL5: load_int 700 + load_string "fixedInnerZoomLimit" + runelite_callback iload 0 invoke 1046 istore 0 @@ -21,6 +23,8 @@ LABEL5: invoke 1045 istore 0 load_int 715 + load_string "resizableInnerZoomLimit" + runelite_callback iload 1 invoke 1046 istore 1