From 638760057e50840cfaa6d6a85a4c85814d4cecb6 Mon Sep 17 00:00:00 2001 From: Owain van Brakel Date: Mon, 13 Sep 2021 03:58:54 +0200 Subject: [PATCH] project: Mixins for HD --- .../net/runelite/deob/DeobAnnotations.java | 14 +- .../net/runelite/mixins/RSClientMixin.java | 21 +++ .../net/runelite/mixins/RSModelDataMixin.java | 51 ++++++- .../net/runelite/mixins/RSModelMixin.java | 141 +++++++++++++++++- .../net/runelite/mixins/RSSceneMixin.java | 53 ++++++- .../java/net/runelite/rs/api/RSClient.java | 12 ++ .../java/net/runelite/rs/api/RSModel.java | 11 +- .../java/net/runelite/rs/api/RSModelData.java | 9 ++ .../net/runelite/rs/api/RSOAuthTokens.java | 3 + .../java/net/runelite/rs/api/RSScene.java | 9 ++ .../net/runelite/rs/api/RSVertexNormal.java | 14 +- runescape-client/src/main/java/Client.java | 62 ++++---- runescape-client/src/main/java/ModelData.java | 47 +++--- .../src/main/java/StructComposition.java | 6 +- runescape-client/src/main/java/Tiles.java | 16 +- runescape-client/src/main/java/class6.java | 3 +- 16 files changed, 395 insertions(+), 77 deletions(-) create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSOAuthTokens.java diff --git a/deobfuscator/src/main/java/net/runelite/deob/DeobAnnotations.java b/deobfuscator/src/main/java/net/runelite/deob/DeobAnnotations.java index f2ee7438c4..b751a95af2 100644 --- a/deobfuscator/src/main/java/net/runelite/deob/DeobAnnotations.java +++ b/deobfuscator/src/main/java/net/runelite/deob/DeobAnnotations.java @@ -77,7 +77,14 @@ public class DeobAnnotations @Nullable public static String getImplements(@NotNull ClassFile cf) { - return getStringValue(cf, IMPLEMENTS); + String stringValue = getStringValue(cf, IMPLEMENTS); + + if (stringValue != null) + { + stringValue = flatten(stringValue); + } + + return stringValue; } @Nullable @@ -114,4 +121,9 @@ public class DeobAnnotations final var a = an.findAnnotation(type); return a == null ? null : a.getValueString(); } + + public static String flatten(String className) + { + return className.substring(className.lastIndexOf('/') + 1); + } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java index ceeaa0d32e..119fc17088 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -29,6 +29,7 @@ import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import java.math.BigInteger; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.EnumSet; import java.util.HashSet; @@ -2290,5 +2291,25 @@ public abstract class RSClientMixin implements RSClient @Inject public static RSArchive[] archives = new RSArchive[21]; + + @Inject + @FieldHook("rndHue") + public static void rndHue(int idx) + { + int rndHue = client.getRndHue(); + + if (rndHue >= -8 && rndHue <= 8) + { + RSScene scene = client.getScene(); + + byte[][][] underlays = client.getTileUnderlays(); + byte[][][] overlays = client.getTileOverlays(); + byte[][][] tileShapes = client.getTileShapes(); + + scene.setUnderlayIds(Arrays.copyOf(underlays, underlays.length)); + scene.setOverlayIds(Arrays.copyOf(overlays, overlays.length)); + scene.setTileShapes(Arrays.copyOf(tileShapes, tileShapes.length)); + } + } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSModelDataMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSModelDataMixin.java index 40ade7bb30..15b1e4223f 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSModelDataMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSModelDataMixin.java @@ -33,6 +33,7 @@ import net.runelite.api.mixins.Shadow; import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSModel; import net.runelite.rs.api.RSModelData; +import net.runelite.rs.api.RSVertexNormal; @Mixin(RSModelData.class) public abstract class RSModelDataMixin implements RSModelData @@ -43,6 +44,15 @@ public abstract class RSModelDataMixin implements RSModelData @Inject private float[] faceTextureUVCoordinates; + @Inject + private int[] vertexNormalsX; + + @Inject + private int[] vertexNormalsY; + + @Inject + private int[] vertexNormalsZ; + @Copy("toModel") @Replace("toModel") @SuppressWarnings("InfiniteRecursion") @@ -61,11 +71,50 @@ public abstract class RSModelDataMixin implements RSModelData computeTextureUVCoordinates(); } + vertexNormals(); + RSModel rsModel = (RSModel) model; + rsModel.setVertexNormalsX(vertexNormalsX); + rsModel.setVertexNormalsY(vertexNormalsY); + rsModel.setVertexNormalsZ(vertexNormalsZ); rsModel.setFaceTextureUVCoordinates(faceTextureUVCoordinates); return model; } + @Inject + public void vertexNormals() + { + RSVertexNormal[] vertexNormals = getVertexNormals(); + RSVertexNormal[] vertexVertices = getVertexVertices(); + + if (vertexNormals != null && vertexNormalsX == null) + { + int verticesCount = getVerticesCount(); + + vertexNormalsX = new int[verticesCount]; + vertexNormalsY = new int[verticesCount]; + vertexNormalsZ = new int[verticesCount]; + + for (int i = 0; i < verticesCount; ++i) + { + RSVertexNormal vertexNormal; + + if (vertexVertices != null && (vertexNormal = vertexVertices[i]) != null) + { + vertexNormalsX[i] = vertexNormal.getX(); + vertexNormalsY[i] = vertexNormal.getY(); + vertexNormalsZ[i] = vertexNormal.getZ(); + } + else if ((vertexNormal = vertexNormals[i]) != null) + { + vertexNormalsX[i] = vertexNormal.getX(); + vertexNormalsY[i] = vertexNormal.getY(); + vertexNormalsZ[i] = vertexNormal.getZ(); + } + } + } + } + @Inject public void computeTextureUVCoordinates() { @@ -171,6 +220,6 @@ public abstract class RSModelDataMixin implements RSModelData } } - this.faceTextureUVCoordinates = faceTextureUCoordinates; + faceTextureUVCoordinates = faceTextureUCoordinates; } } \ No newline at end of file diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSModelMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSModelMixin.java index e3e41629e0..f17215d244 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSModelMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSModelMixin.java @@ -63,13 +63,22 @@ public abstract class RSModelMixin implements RSModel @Inject private float[] rl$faceTextureUVCoordinates; + @Inject + private int[] rl$vertexNormalsX; + + @Inject + private int[] rl$vertexNormalsY; + + @Inject + private int[] rl$vertexNormalsZ; + @MethodHook(value = "", end = true) @Inject public void rl$init(RSModel[] models, int length) { - if (this.getFaceTextures() != null) + if (getFaceTextures() != null) { - int count = this.getTrianglesCount(); + int count = getTrianglesCount(); float[] uv = new float[count * 6]; int idx = 0; @@ -91,6 +100,8 @@ public abstract class RSModelMixin implements RSModel setFaceTextureUVCoordinates(uv); } + + vertexNormals(); } @Override @@ -154,6 +165,9 @@ public abstract class RSModelMixin implements RSModel if (model != null && model != this) { RSModel rsModel = (RSModel) model; + rsModel.setVertexNormalsX(rl$vertexNormalsX); + rsModel.setVertexNormalsY(rl$vertexNormalsY); + rsModel.setVertexNormalsZ(rl$vertexNormalsZ); rsModel.setFaceTextureUVCoordinates(rl$faceTextureUVCoordinates); } return model; @@ -176,6 +190,9 @@ public abstract class RSModelMixin implements RSModel { // Animated models are usually a shared Model instance that is global RSModel rsModel = (RSModel) sharedModel; + rsModel.setVertexNormalsX(rl$vertexNormalsX); + rsModel.setVertexNormalsY(rl$vertexNormalsY); + rsModel.setVertexNormalsZ(rl$vertexNormalsZ); rsModel.setFaceTextureUVCoordinates(rl$faceTextureUVCoordinates); } @@ -217,7 +234,7 @@ public abstract class RSModelMixin implements RSModel for (int i = 0; i < frame.getTransformCount(); i++) { int type = frame.getTransformTypes()[i]; - this.animate(skin.getTypes()[type], skin.getList()[type], frame.getTranslatorX()[i], + animate(skin.getTypes()[type], skin.getList()[type], frame.getTranslatorX()[i], frame.getTranslatorY()[i], frame.getTranslatorZ()[i]); } } @@ -316,10 +333,10 @@ public abstract class RSModelMixin implements RSModel @Inject public Shape getConvexHull(int localX, int localY, int orientation, int tileHeight) { - int[] x2d = new int[this.getVerticesCount()]; - int[] y2d = new int[this.getVerticesCount()]; + int[] x2d = new int[getVerticesCount()]; + int[] y2d = new int[getVerticesCount()]; - Perspective.modelToCanvas(client, this.getVerticesCount(), localX, localY, tileHeight, orientation, this.getVerticesX(), this.getVerticesZ(), this.getVerticesY(), x2d, y2d); + Perspective.modelToCanvas(client, getVerticesCount(), localX, localY, tileHeight, orientation, getVerticesX(), getVerticesZ(), getVerticesY(), x2d, y2d); return Jarvis.convexHull(x2d, y2d); } @@ -335,7 +352,7 @@ public abstract class RSModelMixin implements RSModel @Override public void setSceneId(int sceneId) { - this.rl$sceneId = sceneId; + rl$sceneId = sceneId; } @Inject @@ -377,6 +394,114 @@ public abstract class RSModelMixin implements RSModel @Override public void setFaceTextureUVCoordinates(float[] faceTextureUVCoordinates) { - this.rl$faceTextureUVCoordinates = faceTextureUVCoordinates; + rl$faceTextureUVCoordinates = faceTextureUVCoordinates; + } + + @Inject + public void vertexNormals() + { + if (rl$vertexNormalsX == null) + { + int verticesCount = getVerticesCount(); + + rl$vertexNormalsX = new int[verticesCount]; + rl$vertexNormalsY = new int[verticesCount]; + rl$vertexNormalsZ = new int[verticesCount]; + + int[] trianglesX = getTrianglesX(); + int[] trianglesY = getTrianglesY(); + int[] trianglesZ = getTrianglesZ(); + int[] verticesX = getVerticesX(); + int[] verticesY = getVerticesY(); + int[] verticesZ = getVerticesZ(); + + for (int i = 0; i < getTrianglesCount(); ++i) + { + int var9 = trianglesX[i]; + int var10 = trianglesY[i]; + int var11 = trianglesZ[i]; + + int var12 = verticesX[var10] - verticesX[var9]; + int var13 = verticesY[var10] - verticesY[var9]; + int var14 = verticesZ[var10] - verticesZ[var9]; + int var15 = verticesX[var11] - verticesX[var9]; + int var16 = verticesY[var11] - verticesY[var9]; + int var17 = verticesZ[var11] - verticesZ[var9]; + + int var18 = var13 * var17 - var16 * var14; + int var19 = var14 * var15 - var17 * var12; + + int var20; + for (var20 = var12 * var16 - var15 * var13; var18 > 8192 || var19 > 8192 || var20 > 8192 || var18 < -8192 || var19 < -8192 || var20 < -8192; var20 >>= 1) + { + var18 >>= 1; + var19 >>= 1; + } + + int var21 = (int) Math.sqrt(var18 * var18 + var19 * var19 + var20 * var20); + if (var21 <= 0) + { + var21 = 1; + } + + var18 = var18 * 256 / var21; + var19 = var19 * 256 / var21; + var20 = var20 * 256 / var21; + + rl$vertexNormalsX[var9] += var18; + rl$vertexNormalsY[var9] += var19; + rl$vertexNormalsZ[var9] += var20; + + rl$vertexNormalsX[var10] += var18; + rl$vertexNormalsY[var10] += var19; + rl$vertexNormalsZ[var10] += var20; + + rl$vertexNormalsX[var11] += var18; + rl$vertexNormalsY[var11] += var19; + rl$vertexNormalsZ[var11] += var20; + } + } + } + + @Inject + @Override + public int[] getVertexNormalsX() + { + return rl$vertexNormalsX; + } + + @Inject + @Override + public void setVertexNormalsX(int[] vertexNormalsX) + { + rl$vertexNormalsX = vertexNormalsX; + } + + @Inject + @Override + public int[] getVertexNormalsY() + { + return rl$vertexNormalsY; + } + + @Inject + @Override + public void setVertexNormalsY(int[] vertexNormalsY) + { + rl$vertexNormalsY = vertexNormalsY; + } + + @Inject + @Override + public int[] getVertexNormalsZ() + { + return rl$vertexNormalsZ; + } + + @Inject + @Override + public void setVertexNormalsZ(int[] vertexNormalsZ) + { + rl$vertexNormalsZ = vertexNormalsZ; } } \ No newline at end of file diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSSceneMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSSceneMixin.java index 56a52f8b1f..303bda7f90 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSSceneMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSSceneMixin.java @@ -99,6 +99,15 @@ public abstract class RSSceneMixin implements RSScene @Inject private static int rl$hoverY = -1; + @Inject + private static byte[][][] rl$underlayIds; + + @Inject + private static byte[][][] rl$overlayIds; + + @Inject + private static byte[][][] rl$tileShapes; + @Replace("draw") void drawScene(int cameraX, int cameraY, int cameraZ, int cameraPitch, int cameraYaw, int plane) { @@ -1120,7 +1129,7 @@ public abstract class RSSceneMixin implements RSScene Tile tile = tiles[plane][x][y]; if (tile != null && rl$tiles[plane][x][y] == 0 && blocking(plane, x, y)) { - this.iterateDeque(tile, var2); + iterateDeque(tile, var2); ++var2; } } @@ -1189,4 +1198,46 @@ public abstract class RSSceneMixin implements RSScene rl$hoverY = y; } } + + @Inject + @Override + public byte[][][] getUnderlayIds() + { + return rl$underlayIds; + } + + @Inject + @Override + public void setUnderlayIds(byte[][][] underlayIds) + { + rl$underlayIds = underlayIds; + } + + @Inject + @Override + public byte[][][] getOverlayIds() + { + return rl$overlayIds; + } + + @Inject + @Override + public void setOverlayIds(byte[][][] overlayIds) + { + rl$overlayIds = overlayIds; + } + + @Inject + @Override + public byte[][][] getTileShapes() + { + return rl$tileShapes; + } + + @Inject + @Override + public void setTileShapes(byte[][][] tileShapes) + { + rl$tileShapes = tileShapes; + } } \ No newline at end of file diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java index 16c462d8de..e0fade4a9f 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java @@ -1439,4 +1439,16 @@ public interface RSClient extends RSGameEngine, Client @Import("readStringIntParameters") RSIterableNodeHashTable readStringIntParameters(RSBuffer buffer, RSIterableNodeHashTable table); + + @Import("rndHue") + int getRndHue(); + + @Import("Tiles_underlays") + byte[][][] getTileUnderlays(); + + @Import("Tiles_overlays") + byte[][][] getTileOverlays(); + + @Import("Tiles_shapes") + byte[][][] getTileShapes(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSModel.java b/runescape-api/src/main/java/net/runelite/rs/api/RSModel.java index 8a3751d858..dd7b1ae9f9 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSModel.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSModel.java @@ -170,5 +170,14 @@ public interface RSModel extends RSRenderable, Model Shape getConvexHull(int localX, int localY, int orientation, int tileHeight); float[] getFaceTextureUVCoordinates(); - void setFaceTextureUVCoordinates(float[] rl$faceTextureUVCoordinates); + void setFaceTextureUVCoordinates(float[] faceTextureUVCoordinates); + + int[] getVertexNormalsX(); + void setVertexNormalsX(int[] vertexNormalsX); + + int[] getVertexNormalsY(); + void setVertexNormalsY(int[] vertexNormalsY); + + int[] getVertexNormalsZ(); + void setVertexNormalsZ(int[] vertexNormalsZ); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSModelData.java b/runescape-api/src/main/java/net/runelite/rs/api/RSModelData.java index f05b004217..4a3a519641 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSModelData.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSModelData.java @@ -42,4 +42,13 @@ public interface RSModelData extends RSRenderable @Import("textureRenderTypes") byte[] getTextureRenderTypes(); + + @Import("verticesCount") + int getVerticesCount(); + + @Import("vertexNormals") + RSVertexNormal[] getVertexNormals(); + + @Import("vertexVertices") + RSVertexNormal[] getVertexVertices(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSOAuthTokens.java b/runescape-api/src/main/java/net/runelite/rs/api/RSOAuthTokens.java new file mode 100644 index 0000000000..6bb3b4aec9 --- /dev/null +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSOAuthTokens.java @@ -0,0 +1,3 @@ +package net.runelite.rs.api; + +public interface RSOAuthTokens {} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSScene.java b/runescape-api/src/main/java/net/runelite/rs/api/RSScene.java index fbfd4820a0..e4dda41f0d 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSScene.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSScene.java @@ -55,4 +55,13 @@ public interface RSScene extends Scene @Import("removeGameObject") void removeGameObject(GameObject gameObject); + + byte[][][] getUnderlayIds(); + void setUnderlayIds(byte[][][] underlayIds); + + byte[][][] getOverlayIds(); + void setOverlayIds(byte[][][] overlayIds); + + byte[][][] getTileShapes(); + void setTileShapes(byte[][][] tileShapes); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSVertexNormal.java b/runescape-api/src/main/java/net/runelite/rs/api/RSVertexNormal.java index 94d346ad0c..97cea4748a 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSVertexNormal.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSVertexNormal.java @@ -1,3 +1,15 @@ package net.runelite.rs.api; -public interface RSVertexNormal {} +import net.runelite.mapping.Import; + +public interface RSVertexNormal +{ + @Import("x") + int getX(); + + @Import("y") + int getY(); + + @Import("z") + int getZ(); +} diff --git a/runescape-client/src/main/java/Client.java b/runescape-client/src/main/java/Client.java index 00bdfc08b4..918f12cbde 100644 --- a/runescape-client/src/main/java/Client.java +++ b/runescape-client/src/main/java/Client.java @@ -1860,9 +1860,9 @@ public final class Client extends GameEngine implements Usernamed, OAuthTokens { class1.playPcmPlayers(); Tiles.Tiles_minPlane = 99; - class6.field13 = new byte[4][104][104]; - Tiles.field974 = new byte[4][104][104]; - Tiles.field978 = new byte[4][104][104]; + class6.Tiles_underlays = new byte[4][104][104]; + Tiles.Tiles_overlays = new byte[4][104][104]; + Tiles.Tiles_shapes = new byte[4][104][104]; Tiles.field977 = new byte[4][104][104]; class113.field1367 = new int[4][105][105]; FloorUnderlayDefinition.field1769 = new byte[4][105][105]; @@ -2233,22 +2233,22 @@ public final class Client extends GameEngine implements Usernamed, OAuthTokens { } } - Tiles.field987 += (int)(Math.random() * 5.0D) - 2; - if (Tiles.field987 < -8) { - Tiles.field987 = -8; + Tiles.rndHue += (int)(Math.random() * 5.0D) - 2; + if (Tiles.rndHue < -8) { + Tiles.rndHue = -8; } - if (Tiles.field987 > 8) { - Tiles.field987 = 8; + if (Tiles.rndHue > 8) { + Tiles.rndHue = 8; } - Tiles.field988 += (int)(Math.random() * 5.0D) - 2; - if (Tiles.field988 < -16) { - Tiles.field988 = -16; + Tiles.rndLightness += (int)(Math.random() * 5.0D) - 2; + if (Tiles.rndLightness < -16) { + Tiles.rndLightness = -16; } - if (Tiles.field988 > 16) { - Tiles.field988 = 16; + if (Tiles.rndLightness > 16) { + Tiles.rndLightness = 16; } int var59; @@ -2286,7 +2286,7 @@ public final class Client extends GameEngine implements Usernamed, OAuthTokens { var16 = var14 + 5; int var10002; if (var16 >= 0 && var16 < 104) { - var17 = class6.field13[var53][var16][var15] & 255; + var17 = class6.Tiles_underlays[var53][var16][var15] & 255; if (var17 > 0) { FloorUnderlayDefinition var76 = TaskHandler.method2740(var17 - 1); var10000 = DirectByteArrayCopier.Tiles_hue; @@ -2303,7 +2303,7 @@ public final class Client extends GameEngine implements Usernamed, OAuthTokens { var17 = var14 - 5; if (var17 >= 0 && var17 < 104) { - var59 = class6.field13[var53][var17][var15] & 255; + var59 = class6.Tiles_underlays[var53][var17][var15] & 255; if (var59 > 0) { FloorUnderlayDefinition var77 = TaskHandler.method2740(var59 - 1); var10000 = DirectByteArrayCopier.Tiles_hue; @@ -2350,8 +2350,8 @@ public final class Client extends GameEngine implements Usernamed, OAuthTokens { Tiles.Tiles_minPlane = var53; } - var23 = class6.field13[var53][var14][var61] & 255; - var24 = Tiles.field974[var53][var14][var61] & 255; + var23 = class6.Tiles_underlays[var53][var14][var61] & 255; + var24 = Tiles.Tiles_overlays[var53][var14][var61] & 255; if (var23 > 0 || var24 > 0) { var25 = Tiles.Tiles_heights[var53][var14][var61]; var26 = Tiles.Tiles_heights[var53][var14 + 1][var61]; @@ -2368,8 +2368,8 @@ public final class Client extends GameEngine implements Usernamed, OAuthTokens { var36 = var16 / var60; var37 = var17 / var60; var33 = PlatformInfo.hslToRgb(var35, var36, var37); - var35 = var35 + Tiles.field987 & 255; - var37 += Tiles.field988; + var35 = var35 + Tiles.rndHue & 255; + var37 += Tiles.rndLightness; if (var37 < 0) { var37 = 0; } else if (var37 > 255) { @@ -2382,7 +2382,7 @@ public final class Client extends GameEngine implements Usernamed, OAuthTokens { FloorOverlayDefinition var63; if (var53 > 0) { boolean var79 = true; - if (var23 == 0 && Tiles.field978[var53][var14][var61] != 0) { + if (var23 == 0 && Tiles.Tiles_shapes[var53][var14][var61] != 0) { var79 = false; } @@ -2423,7 +2423,7 @@ public final class Client extends GameEngine implements Usernamed, OAuthTokens { if (var24 == 0) { var72.addTile(var53, var14, var61, 0, 0, -1, var25, var26, var27, var28, WorldMapCacheName.method3873(var33, var29), WorldMapCacheName.method3873(var33, var30), WorldMapCacheName.method3873(var33, var62), WorldMapCacheName.method3873(var33, var32), 0, 0, 0, 0, var35, 0); } else { - var36 = Tiles.field978[var53][var14][var61] + 1; + var36 = Tiles.Tiles_shapes[var53][var14][var61] + 1; byte var80 = Tiles.field977[var53][var14][var61]; var39 = var24 - 1; FloorOverlayDefinition var66 = (FloorOverlayDefinition)FloorOverlayDefinition.FloorOverlayDefinition_cached.get((long)var39); @@ -2451,8 +2451,8 @@ public final class Client extends GameEngine implements Usernamed, OAuthTokens { var43 = -2; } else { var42 = PlatformInfo.hslToRgb(var63.hue, var63.saturation, var63.lightness); - var44 = var63.hue + Tiles.field987 & 255; - var45 = var63.lightness + Tiles.field988; + var44 = var63.hue + Tiles.rndHue & 255; + var45 = var63.lightness + Tiles.rndLightness; if (var45 < 0) { var45 = 0; } else if (var45 > 255) { @@ -2468,8 +2468,8 @@ public final class Client extends GameEngine implements Usernamed, OAuthTokens { } if (var63.secondaryRgb != -1) { - var45 = var63.secondaryHue + Tiles.field987 & 255; - var46 = var63.secondaryLightness + Tiles.field988; + var45 = var63.secondaryHue + Tiles.rndHue & 255; + var46 = var63.secondaryLightness + Tiles.rndLightness; if (var46 < 0) { var46 = 0; } else if (var46 > 255) { @@ -2494,9 +2494,9 @@ public final class Client extends GameEngine implements Usernamed, OAuthTokens { } } - class6.field13[var53] = null; - Tiles.field974[var53] = null; - Tiles.field978[var53] = null; + class6.Tiles_underlays[var53] = null; + Tiles.Tiles_overlays[var53] = null; + Tiles.Tiles_shapes[var53] = null; Tiles.field977[var53] = null; FloorUnderlayDefinition.field1769[var53] = null; } @@ -2727,9 +2727,9 @@ public final class Client extends GameEngine implements Usernamed, OAuthTokens { HealthBarUpdate.updateGameState(30); class1.playPcmPlayers(); - class6.field13 = null; - Tiles.field974 = null; - Tiles.field978 = null; + class6.Tiles_underlays = null; + Tiles.Tiles_overlays = null; + Tiles.Tiles_shapes = null; Tiles.field977 = null; class113.field1367 = null; FloorUnderlayDefinition.field1769 = null; diff --git a/runescape-client/src/main/java/ModelData.java b/runescape-client/src/main/java/ModelData.java index 410102b62f..a1976e2f85 100644 --- a/runescape-client/src/main/java/ModelData.java +++ b/runescape-client/src/main/java/ModelData.java @@ -106,7 +106,8 @@ public class ModelData extends Renderable { @ObfuscatedSignature( descriptor = "[Lhc;" ) - VertexNormal[] field2257; + @Export("vertexVertices") + VertexNormal[] vertexVertices; @ObfuscatedName("ad") @Export("ambient") public short ambient; @@ -375,7 +376,7 @@ public class ModelData extends Renderable { this.faceLabelsAlpha = var1.faceLabelsAlpha; this.vertexNormals = var1.vertexNormals; this.faceNormals = var1.faceNormals; - this.field2257 = var1.field2257; + this.vertexVertices = var1.vertexVertices; this.ambient = var1.ambient; this.contrast = var1.contrast; } @@ -1386,7 +1387,7 @@ public class ModelData extends Renderable { @Export("invalidate") void invalidate() { this.vertexNormals = null; - this.field2257 = null; + this.vertexVertices = null; this.faceNormals = null; this.isBoundsCalculated = false; } @@ -1542,24 +1543,24 @@ public class ModelData extends Renderable { } } else { int var15 = this.faceColors[var16] & '\uffff'; - if (this.field2257 != null && this.field2257[this.indices1[var16]] != null) { - var13 = this.field2257[this.indices1[var16]]; + if (this.vertexVertices != null && this.vertexVertices[this.indices1[var16]] != null) { + var13 = this.vertexVertices[this.indices1[var16]]; } else { var13 = this.vertexNormals[this.indices1[var16]]; } var14 = (var4 * var13.y + var5 * var13.z + var3 * var13.x) / (var7 * var13.magnitude) + var1; var8.faceColors1[var16] = method3974(var15, var14); - if (this.field2257 != null && this.field2257[this.indices2[var16]] != null) { - var13 = this.field2257[this.indices2[var16]]; + if (this.vertexVertices != null && this.vertexVertices[this.indices2[var16]] != null) { + var13 = this.vertexVertices[this.indices2[var16]]; } else { var13 = this.vertexNormals[this.indices2[var16]]; } var14 = (var4 * var13.y + var5 * var13.z + var3 * var13.x) / (var7 * var13.magnitude) + var1; var8.faceColors2[var16] = method3974(var15, var14); - if (this.field2257 != null && this.field2257[this.indices3[var16]] != null) { - var13 = this.field2257[this.indices3[var16]]; + if (this.vertexVertices != null && this.vertexVertices[this.indices3[var16]] != null) { + var13 = this.vertexVertices[this.indices3[var16]]; } else { var13 = this.vertexNormals[this.indices3[var16]]; } @@ -1577,24 +1578,24 @@ public class ModelData extends Renderable { var8.faceColors3[var16] = -2; } } else { - if (this.field2257 != null && this.field2257[this.indices1[var16]] != null) { - var13 = this.field2257[this.indices1[var16]]; + if (this.vertexVertices != null && this.vertexVertices[this.indices1[var16]] != null) { + var13 = this.vertexVertices[this.indices1[var16]]; } else { var13 = this.vertexNormals[this.indices1[var16]]; } var14 = (var4 * var13.y + var5 * var13.z + var3 * var13.x) / (var7 * var13.magnitude) + var1; var8.faceColors1[var16] = method3975(var14); - if (this.field2257 != null && this.field2257[this.indices2[var16]] != null) { - var13 = this.field2257[this.indices2[var16]]; + if (this.vertexVertices != null && this.vertexVertices[this.indices2[var16]] != null) { + var13 = this.vertexVertices[this.indices2[var16]]; } else { var13 = this.vertexNormals[this.indices2[var16]]; } var14 = (var4 * var13.y + var5 * var13.z + var3 * var13.x) / (var7 * var13.magnitude) + var1; var8.faceColors2[var16] = method3975(var14); - if (this.field2257 != null && this.field2257[this.indices3[var16]] != null) { - var13 = this.field2257[this.indices3[var16]]; + if (this.vertexVertices != null && this.vertexVertices[this.indices3[var16]] != null) { + var13 = this.vertexVertices[this.indices3[var16]]; } else { var13 = this.vertexNormals[this.indices3[var16]]; } @@ -1659,22 +1660,22 @@ public class ModelData extends Renderable { for (int var14 = 0; var14 < var8; ++var14) { VertexNormal var15 = var1.vertexNormals[var14]; if (var12 == var7[var14] && var13 == var1.verticesZ[var14] && var11 == var1.verticesY[var14] && var15.magnitude != 0) { - if (var0.field2257 == null) { - var0.field2257 = new VertexNormal[var0.verticesCount]; + if (var0.vertexVertices == null) { + var0.vertexVertices = new VertexNormal[var0.verticesCount]; } - if (var1.field2257 == null) { - var1.field2257 = new VertexNormal[var8]; + if (var1.vertexVertices == null) { + var1.vertexVertices = new VertexNormal[var8]; } - VertexNormal var16 = var0.field2257[var9]; + VertexNormal var16 = var0.vertexVertices[var9]; if (var16 == null) { - var16 = var0.field2257[var9] = new VertexNormal(var10); + var16 = var0.vertexVertices[var9] = new VertexNormal(var10); } - VertexNormal var17 = var1.field2257[var14]; + VertexNormal var17 = var1.vertexVertices[var14]; if (var17 == null) { - var17 = var1.field2257[var14] = new VertexNormal(var15); + var17 = var1.vertexVertices[var14] = new VertexNormal(var15); } var16.x += var15.x; diff --git a/runescape-client/src/main/java/StructComposition.java b/runescape-client/src/main/java/StructComposition.java index 2574b4eddf..f349fdf463 100644 --- a/runescape-client/src/main/java/StructComposition.java +++ b/runescape-client/src/main/java/StructComposition.java @@ -177,13 +177,13 @@ public class StructComposition extends DualNode { } if (var7 <= 49) { - Tiles.field974[var1][var2][var3] = var0.readByte(); - Tiles.field978[var1][var2][var3] = (byte)((var7 - 2) / 4); + Tiles.Tiles_overlays[var1][var2][var3] = var0.readByte(); + Tiles.Tiles_shapes[var1][var2][var3] = (byte)((var7 - 2) / 4); Tiles.field977[var1][var2][var3] = (byte)(var7 - 2 + var6 & 3); } else if (var7 <= 81) { Tiles.Tiles_renderFlags[var1][var2][var3] = (byte)(var7 - 49); } else { - class6.field13[var1][var2][var3] = (byte)(var7 - 81); + class6.Tiles_underlays[var1][var2][var3] = (byte)(var7 - 81); } } } else { diff --git a/runescape-client/src/main/java/Tiles.java b/runescape-client/src/main/java/Tiles.java index 9aa4e0beed..71c44815ee 100644 --- a/runescape-client/src/main/java/Tiles.java +++ b/runescape-client/src/main/java/Tiles.java @@ -21,9 +21,11 @@ public final class Tiles { @Export("Tiles_minPlane") static int Tiles_minPlane; @ObfuscatedName("o") - static byte[][][] field974; + @Export("Tiles_overlays") + static byte[][][] Tiles_overlays; @ObfuscatedName("g") - static byte[][][] field978; + @Export("Tiles_shapes") + static byte[][][] Tiles_shapes; @ObfuscatedName("z") static byte[][][] field977; @ObfuscatedName("y") @@ -48,12 +50,14 @@ public final class Tiles { @ObfuscatedGetter( intValue = -416490741 ) - static int field987; + @Export("rndHue") + static int rndHue; @ObfuscatedName("i") @ObfuscatedGetter( intValue = -2134339611 ) - static int field988; + @Export("rndLightness") + static int rndLightness; @ObfuscatedName("ix") @ObfuscatedGetter( intValue = 1521226335 @@ -71,8 +75,8 @@ public final class Tiles { field984 = new int[]{0, -1, 0, 1}; field985 = new int[]{1, -1, -1, 1}; field973 = new int[]{-1, -1, 1, 1}; - field987 = (int)(Math.random() * 17.0D) - 8; - field988 = (int)(Math.random() * 33.0D) - 16; + rndHue = (int)(Math.random() * 17.0D) - 8; + rndLightness = (int)(Math.random() * 33.0D) - 16; } @ObfuscatedName("a") diff --git a/runescape-client/src/main/java/class6.java b/runescape-client/src/main/java/class6.java index 8fd4a51777..ccebe6731a 100644 --- a/runescape-client/src/main/java/class6.java +++ b/runescape-client/src/main/java/class6.java @@ -12,7 +12,8 @@ public enum class6 implements MouseWheel { field10(0, 0); @ObfuscatedName("k") - static byte[][][] field13; + @Export("Tiles_underlays") + static byte[][][] Tiles_underlays; @ObfuscatedName("c") @ObfuscatedGetter( intValue = -607968475