From 9e8c3d8c58d879e82d68045efe93630876e56802 Mon Sep 17 00:00:00 2001 From: Max Weber Date: Fri, 7 Sep 2018 02:33:05 -0600 Subject: [PATCH 1/2] cache: name InterfaceDefinition fields --- .../definitions/InterfaceDefinition.java | 136 ++++----- .../definitions/loaders/InterfaceLoader.java | 277 +++++++++--------- .../definitions/savers/InterfaceSaver.java | 100 +++---- 3 files changed, 256 insertions(+), 257 deletions(-) diff --git a/cache/src/main/java/net/runelite/cache/definitions/InterfaceDefinition.java b/cache/src/main/java/net/runelite/cache/definitions/InterfaceDefinition.java index a20d947c76..dfc0c72792 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/InterfaceDefinition.java +++ b/cache/src/main/java/net/runelite/cache/definitions/InterfaceDefinition.java @@ -27,102 +27,102 @@ package net.runelite.cache.definitions; public class InterfaceDefinition { public int id = -1; - public boolean hasScript = true; + public boolean isIf3 = false; public int type; public int contentType; public int originalX; public int originalY; public int originalWidth; - public int field2231; - public int field2226; - public int field2227; - public int field2351; - public int field2217; + public int originalHeight; + public int widthMode; + public int heightMode; + public int xPositionMode; + public int yPositionMode; public int parentId = -1; public boolean isHidden; public int scrollWidth; public int scrollHeight; - public boolean field2210; + public boolean noClickThrough; public int spriteId; - public int field2294; - public boolean field2257; + public int textureId; + public boolean spriteTiling; public int opacity; - public int borderThickness; - public int sprite2; + public int borderType; + public int shadowColor; public boolean flippedVertically; public boolean flippedHorizontally; public int modelType; public int modelId; - public int field2268; - public int field2269; + public int offsetX2d; + public int offsetY2d; public int rotationX; public int rotationY; public int rotationZ; public int modelZoom; - public int field2266; - public boolean field2296; - public int field2274; + public int animation; + public boolean orthogonal; + public int modelHeightOverride; public int fontId; public String text; - public int field2212; - public int field2219; - public int field2283; + public int lineHeight; + public int xTextAlignment; + public int yTextAlignment; public boolean textShadowed; public int textColor; - public boolean field2267; - public int field2218; - public boolean field2253; - public int config; + public boolean filled; + public int lineWidth; + public boolean lineDirection; + public int clickMask; public String name; public String[] actions; - public int field2295; - public int field2223; - public boolean field2297; - public String selectedAction; - public Object[] field2225; - public Object[] field2300; - public Object[] field2248; - public Object[] field2311; - public Object[] field2350; - public Object[] field2312; - public Object[] field2314; - public Object[] field2316; - public Object[] field2318; - public Object[] field2319; - public Object[] field2306; - public Object[] field2337; - public Object[] field2287; - public Object[] field2303; - public Object[] field2304; - public Object[] field2308; - public Object[] field2310; - public Object[] field2262; - public int[] field2313; - public int[] field2315; - public int[] field2282; - public boolean field2299; + public int dragDeadZone; + public int dragDeadTime; + public boolean dragRenderBehavior; + public String targetVerb; + public Object[] onLoadListener; + public Object[] onMouseOverListener; + public Object[] onMouseLeaveListener; + public Object[] onTargetLeaveListener; + public Object[] onTargetEnterListener; + public Object[] onVarTransmitListener; + public Object[] onInvTransmitListener; + public Object[] onStatTransmitListener; + public Object[] onTimerListener; + public Object[] onOpListener; + public Object[] onMouseRepeatListener; + public Object[] onClickListener; + public Object[] onClickRepeatListener; + public Object[] onReleaseListener; + public Object[] onHoldListener; + public Object[] onDragListener; + public Object[] onDragCompleteListener; + public Object[] onScrollWheelListener; + public int[] varTransmitTriggers; + public int[] invTransmitTriggers; + public int[] statTransmitTriggers; + public boolean hasListener; - public int field2222; - public int field2334; - public int[] tableActions; - public int[] field2333; - public int[][] dynamicValues; + public int menuType; + // This is set to a siblings' child id when that widget should get a hover effect when this one is hovered + public int hoveredSiblingId; + public int[] alternateOperators; + public int[] alternateRhs; + public int[][] clientScripts; public int[] itemIds; public int[] itemQuantities; - public int paddingX; - public int paddingY; - public int[] xSprites; - public int[] field2288; - public int[] field2289; + public int xPitch; + public int yPitch; + public int[] xOffsets; + public int[] yOffsets; + public int[] sprites; public String[] configActions; - public String field2241; - public int field2245; - public int field2280; - public int field2247; - public int field2332; - public int field2264; - public int field2265; - public int field2276; - public String field2335; + public String alternateText; + public int alternateTextColor; + public int hoveredTextColor; + public int alternateHoveredTextColor; + public int alternateSpriteId; + public int alternateModelId; + public int alternateAnimation; + public String spellName; public String tooltip; } diff --git a/cache/src/main/java/net/runelite/cache/definitions/loaders/InterfaceLoader.java b/cache/src/main/java/net/runelite/cache/definitions/loaders/InterfaceLoader.java index c0f65b8dd1..4e08ac6821 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/loaders/InterfaceLoader.java +++ b/cache/src/main/java/net/runelite/cache/definitions/loaders/InterfaceLoader.java @@ -35,54 +35,54 @@ public class InterfaceLoader iface.id = id; if (b[0] == -1) { - method3252(iface, new InputStream(b)); + decodeIf3(iface, new InputStream(b)); } else { - method3251(iface, new InputStream(b)); + decodeIf1(iface, new InputStream(b)); } return iface; } - private void method3251(InterfaceDefinition iface, InputStream var1) + private void decodeIf1(InterfaceDefinition iface, InputStream var1) { - iface.hasScript = false; + iface.isIf3 = false; iface.type = var1.readUnsignedByte(); - iface.field2222 = var1.readUnsignedByte(); + iface.menuType = var1.readUnsignedByte(); iface.contentType = var1.readUnsignedShort(); iface.originalX = var1.readShort(); iface.originalY = var1.readShort(); iface.originalWidth = var1.readUnsignedShort(); - iface.field2231 = var1.readUnsignedShort(); + iface.originalHeight = var1.readUnsignedShort(); iface.opacity = var1.readUnsignedByte(); iface.parentId = var1.readUnsignedShort(); - if (iface.parentId == '\uffff') + if (iface.parentId == 0xFFFF) { iface.parentId = -1; } else { - iface.parentId += iface.id & -65536; + iface.parentId += iface.id & ~0xFFFF; } - iface.field2334 = var1.readUnsignedShort(); - if (iface.field2334 == '\uffff') + iface.hoveredSiblingId = var1.readUnsignedShort(); + if (iface.hoveredSiblingId == 0xFFFF) { - iface.field2334 = -1; + iface.hoveredSiblingId = -1; } int var2 = var1.readUnsignedByte(); int var3; if (var2 > 0) { - iface.tableActions = new int[var2]; - iface.field2333 = new int[var2]; + iface.alternateOperators = new int[var2]; + iface.alternateRhs = new int[var2]; for (var3 = 0; var3 < var2; ++var3) { - iface.tableActions[var3] = var1.readUnsignedByte(); - iface.field2333[var3] = var1.readUnsignedShort(); + iface.alternateOperators[var3] = var1.readUnsignedByte(); + iface.alternateRhs[var3] = var1.readUnsignedShort(); } } @@ -92,19 +92,19 @@ public class InterfaceLoader int var6; if (var3 > 0) { - iface.dynamicValues = new int[var3][]; + iface.clientScripts = new int[var3][]; for (var4 = 0; var4 < var3; ++var4) { var5 = var1.readUnsignedShort(); - iface.dynamicValues[var4] = new int[var5]; + iface.clientScripts[var4] = new int[var5]; for (var6 = 0; var6 < var5; ++var6) { - iface.dynamicValues[var4][var6] = var1.readUnsignedShort(); - if (iface.dynamicValues[var4][var6] == '\uffff') + iface.clientScripts[var4][var6] = var1.readUnsignedShort(); + if (iface.clientScripts[var4][var6] == 0xFFFF) { - iface.dynamicValues[var4][var6] = -1; + iface.clientScripts[var4][var6] = -1; } } } @@ -124,37 +124,37 @@ public class InterfaceLoader if (iface.type == 2) { - iface.itemIds = new int[iface.originalWidth * iface.field2231]; - iface.itemQuantities = new int[iface.field2231 * iface.originalWidth]; + iface.itemIds = new int[iface.originalWidth * iface.originalHeight]; + iface.itemQuantities = new int[iface.originalHeight * iface.originalWidth]; var4 = var1.readUnsignedByte(); if (var4 == 1) { - iface.config |= 268435456; + iface.clickMask |= 268435456; } var5 = var1.readUnsignedByte(); if (var5 == 1) { - iface.config |= 1073741824; + iface.clickMask |= 1073741824; } var6 = var1.readUnsignedByte(); if (var6 == 1) { - iface.config |= Integer.MIN_VALUE; + iface.clickMask |= Integer.MIN_VALUE; } int var7 = var1.readUnsignedByte(); if (var7 == 1) { - iface.config |= 536870912; + iface.clickMask |= 536870912; } - iface.paddingX = var1.readUnsignedByte(); - iface.paddingY = var1.readUnsignedByte(); - iface.xSprites = new int[20]; - iface.field2288 = new int[20]; - iface.field2289 = new int[20]; + iface.xPitch = var1.readUnsignedByte(); + iface.yPitch = var1.readUnsignedByte(); + iface.xOffsets = new int[20]; + iface.yOffsets = new int[20]; + iface.sprites = new int[20]; int var8; for (var8 = 0; var8 < 20; ++var8) @@ -162,13 +162,13 @@ public class InterfaceLoader int var9 = var1.readUnsignedByte(); if (var9 == 1) { - iface.xSprites[var8] = var1.readShort(); - iface.field2288[var8] = var1.readShort(); - iface.field2289[var8] = var1.readInt(); + iface.xOffsets[var8] = var1.readShort(); + iface.yOffsets[var8] = var1.readShort(); + iface.sprites[var8] = var1.readInt(); } else { - iface.field2289[var8] = -1; + iface.sprites[var8] = -1; } } @@ -180,23 +180,23 @@ public class InterfaceLoader if (var11.length() > 0) { iface.configActions[var8] = var11; - iface.config |= 1 << var8 + 23; + iface.clickMask |= 1 << var8 + 23; } } } if (iface.type == 3) { - iface.field2267 = var1.readUnsignedByte() == 1; + iface.filled = var1.readUnsignedByte() == 1; } if (iface.type == 4 || iface.type == 1) { - iface.field2219 = var1.readUnsignedByte(); - iface.field2283 = var1.readUnsignedByte(); - iface.field2212 = var1.readUnsignedByte(); + iface.xTextAlignment = var1.readUnsignedByte(); + iface.yTextAlignment = var1.readUnsignedByte(); + iface.lineHeight = var1.readUnsignedByte(); iface.fontId = var1.readUnsignedShort(); - if (iface.fontId == '\uffff') + if (iface.fontId == 0xFFFF) { iface.fontId = -1; } @@ -207,7 +207,7 @@ public class InterfaceLoader if (iface.type == 4) { iface.text = var1.readString(); - iface.field2241 = var1.readString(); + iface.alternateText = var1.readString(); } if (iface.type == 1 || iface.type == 3 || iface.type == 4) @@ -217,43 +217,42 @@ public class InterfaceLoader if (iface.type == 3 || iface.type == 4) { - iface.field2245 = var1.readInt(); - iface.field2280 = var1.readInt(); - iface.field2247 = var1.readInt(); + iface.alternateTextColor = var1.readInt(); + iface.hoveredTextColor = var1.readInt(); + iface.alternateHoveredTextColor = var1.readInt(); } if (iface.type == 5) { iface.spriteId = var1.readInt(); - iface.field2332 = var1.readInt(); + iface.alternateSpriteId = var1.readInt(); } if (iface.type == 6) { iface.modelType = 1; iface.modelId = var1.readUnsignedShort(); - if (iface.modelId == '\uffff') + if (iface.modelId == 0xFFFF) { iface.modelId = -1; } - iface.field2264 = 1; - iface.field2265 = var1.readUnsignedShort(); - if (iface.field2265 == '\uffff') + iface.alternateModelId = var1.readUnsignedShort(); + if (iface.alternateModelId == 0xFFFF) { - iface.field2265 = -1; + iface.alternateModelId = -1; } - iface.field2266 = var1.readUnsignedShort(); - if (iface.field2266 == '\uffff') + iface.animation = var1.readUnsignedShort(); + if (iface.animation == 0xFFFF) { - iface.field2266 = -1; + iface.animation = -1; } - iface.field2276 = var1.readUnsignedShort(); - if (iface.field2276 == '\uffff') + iface.alternateAnimation = var1.readUnsignedShort(); + if (iface.alternateAnimation == 0xFFFF) { - iface.field2276 = -1; + iface.alternateAnimation = -1; } iface.modelZoom = var1.readUnsignedShort(); @@ -263,23 +262,23 @@ public class InterfaceLoader if (iface.type == 7) { - iface.itemIds = new int[iface.originalWidth * iface.field2231]; - iface.itemQuantities = new int[iface.originalWidth * iface.field2231]; - iface.field2219 = var1.readUnsignedByte(); + iface.itemIds = new int[iface.originalWidth * iface.originalHeight]; + iface.itemQuantities = new int[iface.originalWidth * iface.originalHeight]; + iface.xTextAlignment = var1.readUnsignedByte(); iface.fontId = var1.readUnsignedShort(); - if (iface.fontId == '\uffff') + if (iface.fontId == 0xFFFF) { iface.fontId = -1; } iface.textShadowed = var1.readUnsignedByte() == 1; iface.textColor = var1.readInt(); - iface.paddingX = var1.readShort(); - iface.paddingY = var1.readShort(); + iface.xPitch = var1.readShort(); + iface.yPitch = var1.readShort(); var4 = var1.readUnsignedByte(); if (var4 == 1) { - iface.config |= 1073741824; + iface.clickMask |= 1073741824; } iface.configActions = new String[5]; @@ -290,7 +289,7 @@ public class InterfaceLoader if (var10.length() > 0) { iface.configActions[var5] = var10; - iface.config |= 1 << var5 + 23; + iface.clickMask |= 1 << var5 + 23; } } } @@ -300,57 +299,57 @@ public class InterfaceLoader iface.text = var1.readString(); } - if (iface.field2222 == 2 || iface.type == 2) + if (iface.menuType == 2 || iface.type == 2) { - iface.selectedAction = var1.readString(); - iface.field2335 = var1.readString(); + iface.targetVerb = var1.readString(); + iface.spellName = var1.readString(); var4 = var1.readUnsignedShort() & 63; - iface.config |= var4 << 11; + iface.clickMask |= var4 << 11; } - if (iface.field2222 == 1 || iface.field2222 == 4 || iface.field2222 == 5 || iface.field2222 == 6) + if (iface.menuType == 1 || iface.menuType == 4 || iface.menuType == 5 || iface.menuType == 6) { iface.tooltip = var1.readString(); if (iface.tooltip.length() == 0) { - if (iface.field2222 == 1) + if (iface.menuType == 1) { iface.tooltip = "Ok"; } - if (iface.field2222 == 4) + if (iface.menuType == 4) { iface.tooltip = "Select"; } - if (iface.field2222 == 5) + if (iface.menuType == 5) { iface.tooltip = "Select"; } - if (iface.field2222 == 6) + if (iface.menuType == 6) { iface.tooltip = "Continue"; } } } - if (iface.field2222 == 1 || iface.field2222 == 4 || iface.field2222 == 5) + if (iface.menuType == 1 || iface.menuType == 4 || iface.menuType == 5) { - iface.config |= 4194304; + iface.clickMask |= 4194304; } - if (iface.field2222 == 6) + if (iface.menuType == 6) { - iface.config |= 1; + iface.clickMask |= 1; } } - private void method3252(InterfaceDefinition iface, InputStream var1) + private void decodeIf3(InterfaceDefinition iface, InputStream var1) { var1.readUnsignedByte(); - iface.hasScript = true; + iface.isIf3 = true; iface.type = var1.readUnsignedByte(); iface.contentType = var1.readUnsignedShort(); iface.originalX = var1.readShort(); @@ -358,25 +357,25 @@ public class InterfaceLoader iface.originalWidth = var1.readUnsignedShort(); if (iface.type == 9) { - iface.field2231 = var1.readShort(); + iface.originalHeight = var1.readShort(); } else { - iface.field2231 = var1.readUnsignedShort(); + iface.originalHeight = var1.readUnsignedShort(); } - iface.field2226 = var1.readByte(); - iface.field2227 = var1.readByte(); - iface.field2351 = var1.readByte(); - iface.field2217 = var1.readByte(); + iface.widthMode = var1.readByte(); + iface.heightMode = var1.readByte(); + iface.xPositionMode = var1.readByte(); + iface.yPositionMode = var1.readByte(); iface.parentId = var1.readUnsignedShort(); - if (iface.parentId == '\uffff') + if (iface.parentId == 0xFFFF) { iface.parentId = -1; } else { - iface.parentId += iface.id & -65536; + iface.parentId += iface.id & ~0xFFFF; } iface.isHidden = var1.readUnsignedByte() == 1; @@ -384,17 +383,17 @@ public class InterfaceLoader { iface.scrollWidth = var1.readUnsignedShort(); iface.scrollHeight = var1.readUnsignedShort(); - iface.field2210 = var1.readUnsignedByte() == 1; + iface.noClickThrough = var1.readUnsignedByte() == 1; } if (iface.type == 5) { iface.spriteId = var1.readInt(); - iface.field2294 = var1.readUnsignedShort(); - iface.field2257 = var1.readUnsignedByte() == 1; + iface.textureId = var1.readUnsignedShort(); + iface.spriteTiling = var1.readUnsignedByte() == 1; iface.opacity = var1.readUnsignedByte(); - iface.borderThickness = var1.readUnsignedByte(); - iface.sprite2 = var1.readInt(); + iface.borderType = var1.readUnsignedByte(); + iface.shadowColor = var1.readInt(); iface.flippedVertically = var1.readUnsignedByte() == 1; iface.flippedHorizontally = var1.readUnsignedByte() == 1; } @@ -403,31 +402,31 @@ public class InterfaceLoader { iface.modelType = 1; iface.modelId = var1.readUnsignedShort(); - if (iface.modelId == '\uffff') + if (iface.modelId == 0xFFFF) { iface.modelId = -1; } - iface.field2268 = var1.readShort(); - iface.field2269 = var1.readShort(); + iface.offsetX2d = var1.readShort(); + iface.offsetY2d = var1.readShort(); iface.rotationX = var1.readUnsignedShort(); iface.rotationZ = var1.readUnsignedShort(); iface.rotationY = var1.readUnsignedShort(); iface.modelZoom = var1.readUnsignedShort(); - iface.field2266 = var1.readUnsignedShort(); - if (iface.field2266 == '\uffff') + iface.animation = var1.readUnsignedShort(); + if (iface.animation == 0xFFFF) { - iface.field2266 = -1; + iface.animation = -1; } - iface.field2296 = var1.readUnsignedByte() == 1; + iface.orthogonal = var1.readUnsignedByte() == 1; var1.readUnsignedShort(); - if (iface.field2226 != 0) + if (iface.widthMode != 0) { - iface.field2274 = var1.readUnsignedShort(); + iface.modelHeightOverride = var1.readUnsignedShort(); } - if (iface.field2227 != 0) + if (iface.heightMode != 0) { var1.readUnsignedShort(); } @@ -436,15 +435,15 @@ public class InterfaceLoader if (iface.type == 4) { iface.fontId = var1.readUnsignedShort(); - if (iface.fontId == '\uffff') + if (iface.fontId == 0xFFFF) { iface.fontId = -1; } iface.text = var1.readString(); - iface.field2212 = var1.readUnsignedByte(); - iface.field2219 = var1.readUnsignedByte(); - iface.field2283 = var1.readUnsignedByte(); + iface.lineHeight = var1.readUnsignedByte(); + iface.xTextAlignment = var1.readUnsignedByte(); + iface.yTextAlignment = var1.readUnsignedByte(); iface.textShadowed = var1.readUnsignedByte() == 1; iface.textColor = var1.readInt(); } @@ -452,18 +451,18 @@ public class InterfaceLoader if (iface.type == 3) { iface.textColor = var1.readInt(); - iface.field2267 = var1.readUnsignedByte() == 1; + iface.filled = var1.readUnsignedByte() == 1; iface.opacity = var1.readUnsignedByte(); } if (iface.type == 9) { - iface.field2218 = var1.readUnsignedByte(); + iface.lineWidth = var1.readUnsignedByte(); iface.textColor = var1.readInt(); - iface.field2253 = var1.readUnsignedByte() == 1; + iface.lineDirection = var1.readUnsignedByte() == 1; } - iface.config = var1.read24BitInt(); + iface.clickMask = var1.read24BitInt(); iface.name = var1.readString(); int var2 = var1.readUnsignedByte(); if (var2 > 0) @@ -476,34 +475,34 @@ public class InterfaceLoader } } - iface.field2295 = var1.readUnsignedByte(); - iface.field2223 = var1.readUnsignedByte(); - iface.field2297 = var1.readUnsignedByte() == 1; - iface.selectedAction = var1.readString(); - iface.field2225 = this.method3282(iface, var1); - iface.field2300 = this.method3282(iface, var1); - iface.field2248 = this.method3282(iface, var1); - iface.field2311 = this.method3282(iface, var1); - iface.field2350 = this.method3282(iface, var1); - iface.field2312 = this.method3282(iface, var1); - iface.field2314 = this.method3282(iface, var1); - iface.field2316 = this.method3282(iface, var1); - iface.field2318 = this.method3282(iface, var1); - iface.field2319 = this.method3282(iface, var1); - iface.field2306 = this.method3282(iface, var1); - iface.field2337 = this.method3282(iface, var1); - iface.field2287 = this.method3282(iface, var1); - iface.field2303 = this.method3282(iface, var1); - iface.field2304 = this.method3282(iface, var1); - iface.field2308 = this.method3282(iface, var1); - iface.field2310 = this.method3282(iface, var1); - iface.field2262 = this.method3282(iface, var1); - iface.field2313 = this.method3274(var1); - iface.field2315 = this.method3274(var1); - iface.field2282 = this.method3274(var1); + iface.dragDeadZone = var1.readUnsignedByte(); + iface.dragDeadTime = var1.readUnsignedByte(); + iface.dragRenderBehavior = var1.readUnsignedByte() == 1; + iface.targetVerb = var1.readString(); + iface.onLoadListener = this.decodeListener(iface, var1); + iface.onMouseOverListener = this.decodeListener(iface, var1); + iface.onMouseLeaveListener = this.decodeListener(iface, var1); + iface.onTargetLeaveListener = this.decodeListener(iface, var1); + iface.onTargetEnterListener = this.decodeListener(iface, var1); + iface.onVarTransmitListener = this.decodeListener(iface, var1); + iface.onInvTransmitListener = this.decodeListener(iface, var1); + iface.onStatTransmitListener = this.decodeListener(iface, var1); + iface.onTimerListener = this.decodeListener(iface, var1); + iface.onOpListener = this.decodeListener(iface, var1); + iface.onMouseRepeatListener = this.decodeListener(iface, var1); + iface.onClickListener = this.decodeListener(iface, var1); + iface.onClickRepeatListener = this.decodeListener(iface, var1); + iface.onReleaseListener = this.decodeListener(iface, var1); + iface.onHoldListener = this.decodeListener(iface, var1); + iface.onDragListener = this.decodeListener(iface, var1); + iface.onDragCompleteListener = this.decodeListener(iface, var1); + iface.onScrollWheelListener = this.decodeListener(iface, var1); + iface.varTransmitTriggers = this.decodeTriggers(var1); + iface.invTransmitTriggers = this.decodeTriggers(var1); + iface.statTransmitTriggers = this.decodeTriggers(var1); } - private Object[] method3282(InterfaceDefinition iface, InputStream var1) + private Object[] decodeListener(InterfaceDefinition iface, InputStream var1) { int var2 = var1.readUnsignedByte(); if (var2 == 0) @@ -527,12 +526,12 @@ public class InterfaceLoader } } - iface.field2299 = true; + iface.hasListener = true; return var3; } } - private int[] method3274(InputStream var1) + private int[] decodeTriggers(InputStream var1) { int var2 = var1.readUnsignedByte(); if (var2 == 0) diff --git a/cache/src/main/java/net/runelite/cache/definitions/savers/InterfaceSaver.java b/cache/src/main/java/net/runelite/cache/definitions/savers/InterfaceSaver.java index 64e3cae7eb..af64c9dfe3 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/savers/InterfaceSaver.java +++ b/cache/src/main/java/net/runelite/cache/definitions/savers/InterfaceSaver.java @@ -31,56 +31,56 @@ public class InterfaceSaver { public byte[] save(InterfaceDefinition def) { - if (def.hasScript) + if (def.isIf3) { - return saveScript(def); + return saveIf3(def); } else { - return saveNoScript(def); + return saveIf1(def); } } - private byte[] saveScript(InterfaceDefinition def) + private byte[] saveIf3(InterfaceDefinition def) { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } - private byte[] saveNoScript(InterfaceDefinition def) + private byte[] saveIf1(InterfaceDefinition def) { OutputStream out = new OutputStream(); out.writeByte(def.type); - out.writeByte(def.field2222); + out.writeByte(def.menuType); out.writeShort(def.contentType); out.writeShort(def.originalX); out.writeShort(def.originalY); out.writeShort(def.originalWidth); - out.writeShort(def.field2231); + out.writeShort(def.originalHeight); out.writeByte(def.opacity); out.writeShort(def.parentId); - out.writeShort(def.field2334); - if (def.tableActions != null) + out.writeShort(def.hoveredSiblingId); + if (def.alternateOperators != null) { - out.writeByte(def.tableActions.length); - for (int i = 0; i < def.tableActions.length; ++i) + out.writeByte(def.alternateOperators.length); + for (int i = 0; i < def.alternateOperators.length; ++i) { - out.writeByte(def.tableActions[i]); - out.writeShort(def.field2333[i]); + out.writeByte(def.alternateOperators[i]); + out.writeShort(def.alternateRhs[i]); } } else { out.writeByte(0); } - if (def.dynamicValues != null) + if (def.clientScripts != null) { - out.writeByte(def.dynamicValues.length); - for (int i = 0; i < def.dynamicValues.length; ++i) + out.writeByte(def.clientScripts.length); + for (int i = 0; i < def.clientScripts.length; ++i) { - out.writeShort(def.dynamicValues[i].length); - for (int j = 0; j < def.dynamicValues[i].length; ++j) + out.writeShort(def.clientScripts[i].length); + for (int j = 0; j < def.clientScripts[i].length; ++j) { - out.writeShort(def.dynamicValues[i][j]); + out.writeShort(def.clientScripts[i][j]); } } } @@ -100,20 +100,20 @@ public class InterfaceSaver } if (def.type == 2) { - out.writeByte((def.config & 268435456) != 0 ? 1 : 0); - out.writeByte((def.config & 1073741824) != 0 ? 1 : 0); - out.writeByte((def.config & Integer.MIN_VALUE) != 0 ? 1 : 0); - out.writeByte((def.config & 536870912) != 0 ? 1 : 0); - out.writeByte(def.paddingX); - out.writeByte(def.paddingY); + out.writeByte((def.clickMask & 268435456) != 0 ? 1 : 0); + out.writeByte((def.clickMask & 1073741824) != 0 ? 1 : 0); + out.writeByte((def.clickMask & Integer.MIN_VALUE) != 0 ? 1 : 0); + out.writeByte((def.clickMask & 536870912) != 0 ? 1 : 0); + out.writeByte(def.xPitch); + out.writeByte(def.yPitch); for (int i = 0; i < 20; ++i) { - if (def.field2289[i] != -1) + if (def.sprites[i] != -1) { out.writeByte(1); - out.writeShort(def.xSprites[i]); - out.writeShort(def.field2288[i]); - out.writeShort(def.field2289[i]); + out.writeShort(def.xOffsets[i]); + out.writeShort(def.yOffsets[i]); + out.writeShort(def.sprites[i]); } else { @@ -134,20 +134,20 @@ public class InterfaceSaver } if (def.type == 3) { - out.writeByte(def.field2267 ? 1 : 0); + out.writeByte(def.filled ? 1 : 0); } if (def.type == 4 || def.type == 1) { - out.writeByte(def.field2219); - out.writeByte(def.field2283); - out.writeByte(def.field2212); + out.writeByte(def.xTextAlignment); + out.writeByte(def.yTextAlignment); + out.writeByte(def.lineHeight); out.writeShort(def.fontId); out.writeByte(def.textShadowed ? 1 : 0); } if (def.type == 4) { out.writeString(def.text); - out.writeString(def.field2241); + out.writeString(def.alternateText); } if (def.type == 1 || def.type == 3 || def.type == 4) { @@ -155,34 +155,34 @@ public class InterfaceSaver } if (def.type == 3 || def.type == 4) { - out.writeInt(def.field2245); - out.writeInt(def.field2280); - out.writeInt(def.field2247); + out.writeInt(def.alternateTextColor); + out.writeInt(def.hoveredTextColor); + out.writeInt(def.alternateHoveredTextColor); } if (def.type == 5) { out.writeInt(def.spriteId); - out.writeInt(def.field2332); + out.writeInt(def.alternateSpriteId); } if (def.type == 6) { out.writeShort(def.modelId); - out.writeShort(def.field2265); - out.writeShort(def.field2266); - out.writeShort(def.field2276); + out.writeShort(def.alternateModelId); + out.writeShort(def.animation); + out.writeShort(def.alternateAnimation); out.writeShort(def.modelZoom); out.writeShort(def.rotationX); out.writeShort(def.rotationZ); } if (def.type == 7) { - out.writeByte(def.field2219); + out.writeByte(def.xTextAlignment); out.writeShort(def.fontId); out.writeByte(def.textShadowed ? 1 : 0); out.writeInt(def.textColor); - out.writeShort(def.paddingX); - out.writeShort(def.paddingY); - out.writeByte((def.config & 1073741824) != 0 ? 1 : 0); + out.writeShort(def.xPitch); + out.writeShort(def.yPitch); + out.writeByte((def.clickMask & 1073741824) != 0 ? 1 : 0); for (int i = 0; i < 5; ++i) { out.writeString(def.configActions[i]); @@ -192,13 +192,13 @@ public class InterfaceSaver { out.writeString(def.text); } - if (def.field2222 == 2 || def.type == 2) + if (def.menuType == 2 || def.type == 2) { - out.writeString(def.selectedAction); - out.writeString(def.field2335); - out.writeShort((def.config >>> 11) & 63); + out.writeString(def.targetVerb); + out.writeString(def.spellName); + out.writeShort((def.clickMask >>> 11) & 63); } - if (def.field2222 == 1 || def.field2222 == 4 || def.field2222 == 5 || def.field2222 == 6) + if (def.menuType == 1 || def.menuType == 4 || def.menuType == 5 || def.menuType == 6) { out.writeString(def.tooltip); } From 36971a2add714a5f48b13c7359275c6f02ecc335 Mon Sep 17 00:00:00 2001 From: Max Weber Date: Sat, 8 Sep 2018 07:04:40 -0600 Subject: [PATCH 2/2] cache: Disassemble CS1s --- .../definitions/ClientScript1Instruction.java | 61 +++++++++++++++++++ .../definitions/InterfaceDefinition.java | 2 +- .../definitions/loaders/InterfaceLoader.java | 29 +++++++-- .../definitions/savers/InterfaceSaver.java | 23 ++++++- .../savers/InterfaceSaverTest.java | 5 +- 5 files changed, 109 insertions(+), 11 deletions(-) create mode 100644 cache/src/main/java/net/runelite/cache/definitions/ClientScript1Instruction.java diff --git a/cache/src/main/java/net/runelite/cache/definitions/ClientScript1Instruction.java b/cache/src/main/java/net/runelite/cache/definitions/ClientScript1Instruction.java new file mode 100644 index 0000000000..f0fe7d4683 --- /dev/null +++ b/cache/src/main/java/net/runelite/cache/definitions/ClientScript1Instruction.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2018 Abex + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.cache.definitions; + +import lombok.RequiredArgsConstructor; + +public class ClientScript1Instruction +{ + @RequiredArgsConstructor + public enum Opcode + { + RETURN(0), + BOOSTED_SKILL_LEVELS(1), + REAL_SKILL_LEVELS(1), + SKILL_EXPERIENCE(1), + WIDGET_CONTAINS_ITEM_GET_QUANTITY(3), + VARP(1), + EXPERIENCE_AT_LEVEL_FOR_SKILL(1), + VARP_TIMES_469(1), + COMBAT_LEVEL(1), + TOTAL_LEVEL(0), + WIDGET_CONTAINS_ITEM_STAR(3), + RUN_ENERGY(0), + WEIGHT(0), + VARP_TESTBIT(2), + VARBIT(1), + MINUS(0), + DIV(0), + MUL(0), + WORLD_X(0), + WORLD_Y(1), + CONSTANT(1); + + public final int argumentCount; + } + + public Opcode opcode; + public int[] operands; +} diff --git a/cache/src/main/java/net/runelite/cache/definitions/InterfaceDefinition.java b/cache/src/main/java/net/runelite/cache/definitions/InterfaceDefinition.java index dfc0c72792..4bbee579e2 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/InterfaceDefinition.java +++ b/cache/src/main/java/net/runelite/cache/definitions/InterfaceDefinition.java @@ -107,7 +107,7 @@ public class InterfaceDefinition public int hoveredSiblingId; public int[] alternateOperators; public int[] alternateRhs; - public int[][] clientScripts; + public ClientScript1Instruction[][] clientScripts; public int[] itemIds; public int[] itemQuantities; public int xPitch; diff --git a/cache/src/main/java/net/runelite/cache/definitions/loaders/InterfaceLoader.java b/cache/src/main/java/net/runelite/cache/definitions/loaders/InterfaceLoader.java index 4e08ac6821..69db420f9f 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/loaders/InterfaceLoader.java +++ b/cache/src/main/java/net/runelite/cache/definitions/loaders/InterfaceLoader.java @@ -24,6 +24,10 @@ */ package net.runelite.cache.definitions.loaders; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import net.runelite.cache.definitions.ClientScript1Instruction; import net.runelite.cache.definitions.InterfaceDefinition; import net.runelite.cache.io.InputStream; @@ -92,20 +96,35 @@ public class InterfaceLoader int var6; if (var3 > 0) { - iface.clientScripts = new int[var3][]; + iface.clientScripts = new ClientScript1Instruction[var3][]; for (var4 = 0; var4 < var3; ++var4) { var5 = var1.readUnsignedShort(); - iface.clientScripts[var4] = new int[var5]; + int[] bytecode = new int[var5]; for (var6 = 0; var6 < var5; ++var6) { - iface.clientScripts[var4][var6] = var1.readUnsignedShort(); - if (iface.clientScripts[var4][var6] == 0xFFFF) + bytecode[var6] = var1.readUnsignedShort(); + if (bytecode[var6] == 0xFFFF) { - iface.clientScripts[var4][var6] = -1; + bytecode[var6] = -1; } + + List instructions = new ArrayList<>(); + for (int i = 0; i < bytecode.length;) + { + ClientScript1Instruction ins = new ClientScript1Instruction(); + + ins.opcode = ClientScript1Instruction.Opcode.values()[bytecode[i++]]; + + int ac = ins.opcode.argumentCount; + ins.operands = Arrays.copyOfRange(bytecode, i, i + ac); + + instructions.add(ins); + i += ac; + } + iface.clientScripts[var4] = instructions.toArray(new ClientScript1Instruction[0]); } } } diff --git a/cache/src/main/java/net/runelite/cache/definitions/savers/InterfaceSaver.java b/cache/src/main/java/net/runelite/cache/definitions/savers/InterfaceSaver.java index af64c9dfe3..61151a4158 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/savers/InterfaceSaver.java +++ b/cache/src/main/java/net/runelite/cache/definitions/savers/InterfaceSaver.java @@ -24,6 +24,7 @@ */ package net.runelite.cache.definitions.savers; +import net.runelite.cache.definitions.ClientScript1Instruction; import net.runelite.cache.definitions.InterfaceDefinition; import net.runelite.cache.io.OutputStream; @@ -77,10 +78,28 @@ public class InterfaceSaver out.writeByte(def.clientScripts.length); for (int i = 0; i < def.clientScripts.length; ++i) { - out.writeShort(def.clientScripts[i].length); + int len = 0; for (int j = 0; j < def.clientScripts[i].length; ++j) { - out.writeShort(def.clientScripts[i][j]); + ClientScript1Instruction ins = def.clientScripts[i][j]; + len++; + if (ins.operands != null) + { + len += ins.operands.length; + } + } + out.writeShort(len); + for (int j = 0; j < def.clientScripts[i].length; ++j) + { + ClientScript1Instruction ins = def.clientScripts[i][j]; + out.writeShort(ins.opcode.ordinal()); + if (ins.operands != null) + { + for (int op : ins.operands) + { + out.writeShort(op); + } + } } } } diff --git a/cache/src/test/java/net/runelite/cache/definitions/savers/InterfaceSaverTest.java b/cache/src/test/java/net/runelite/cache/definitions/savers/InterfaceSaverTest.java index cc4bf51a5c..6d95f445a9 100644 --- a/cache/src/test/java/net/runelite/cache/definitions/savers/InterfaceSaverTest.java +++ b/cache/src/test/java/net/runelite/cache/definitions/savers/InterfaceSaverTest.java @@ -40,7 +40,6 @@ import org.junit.Test; public class InterfaceSaverTest { - @Test public void testSave() throws Exception { @@ -51,10 +50,10 @@ public class InterfaceSaverTest Storage storage = store.getStorage(); Index index = store.getIndex(IndexType.INTERFACES); - Archive archive = index.getArchive(149); + Archive archive = index.getArchive(31); byte[] archiveData = storage.loadArchive(archive); ArchiveFiles files = archive.getFiles(archiveData); - FSFile file = files.findFile(0); + FSFile file = files.findFile(76); byte[] contents = file.getContents(); InterfaceDefinition def = new InterfaceLoader().load(0, contents);