diff --git a/cache/src/main/java/net/runelite/cache/definitions/TextureDefinition.java b/cache/src/main/java/net/runelite/cache/definitions/TextureDefinition.java index da8d89738a..d34bc5678a 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/TextureDefinition.java +++ b/cache/src/main/java/net/runelite/cache/definitions/TextureDefinition.java @@ -26,10 +26,125 @@ package net.runelite.cache.definitions; import lombok.Data; +import net.runelite.cache.definitions.providers.SpriteProvider; @Data public class TextureDefinition { + public int field1777; + public boolean field1778; private int id; private int[] fileIds; + public int[] field1780; + public int[] field1781; + public int[] field1786; + public int field1782; + public int field1783; + + public transient int[] pixels; + + public boolean method2680(double var1, int var3, SpriteProvider spriteProvider) + { + int var5 = var3 * var3; + this.pixels = new int[var5]; + + for (int var6 = 0; var6 < this.fileIds.length; ++var6) + { + SpriteDefinition var7 = spriteProvider.provide(fileIds[var6], 0); + var7.normalize(); + byte[] var8 = var7.pixelIdx; + int[] var9 = var7.palette; + int var10 = this.field1786[var6]; + + int var11; + int var12; + int var13; + int var14; + if ((var10 & -16777216) == 50331648) + { + var11 = var10 & 16711935; + var12 = var10 >> 8 & 255; + + for (var13 = 0; var13 < var9.length; ++var13) + { + var14 = var9[var13]; + if (var14 >> 8 == (var14 & 65535)) + { + var14 &= 255; + var9[var13] = var11 * var14 >> 8 & 16711935 | var12 * var14 & 65280; + } + } + } + + for (var11 = 0; var11 < var9.length; ++var11) + { + var9[var11] = adjustRGB(var9[var11], var1); + } + + if (var6 == 0) + { + var11 = 0; + } + else + { + var11 = this.field1780[var6 - 1]; + } + + if (var11 == 0) + { + if (var3 == var7.getMaxWidth()) + { + for (var12 = 0; var12 < var5; ++var12) + { + this.pixels[var12] = var9[var8[var12] & 255]; + } + } + else if (var7.getMaxWidth() == 64 && var3 == 128) + { + var12 = 0; + + for (var13 = 0; var13 < var3; ++var13) + { + for (var14 = 0; var14 < var3; ++var14) + { + this.pixels[var12++] = var9[var8[(var13 >> 1 << 6) + (var14 >> 1)] & 255]; + } + } + } + else + { + if (var7.getMaxWidth() != 128 || var3 != 64) + { + throw new RuntimeException(); + } + + var12 = 0; + + for (var13 = 0; var13 < var3; ++var13) + { + for (var14 = 0; var14 < var3; ++var14) + { + this.pixels[var12++] = var9[var8[(var14 << 1) + (var13 << 1 << 7)] & 255]; + } + } + } + } + } + + return true; + } + + static int adjustRGB(int var0, double var1) + { + double var3 = (double) (var0 >> 16) / 256.0D; + double var5 = (double) (var0 >> 8 & 255) / 256.0D; + double var7 = (double) (var0 & 255) / 256.0D; + var3 = Math.pow(var3, var1); + var5 = Math.pow(var5, var1); + var7 = Math.pow(var7, var1); + int var9 = (int) (var3 * 256.0D); + int var10 = (int) (var5 * 256.0D); + int var11 = (int) (var7 * 256.0D); + return var11 + (var10 << 8) + (var9 << 16); + } } diff --git a/cache/src/main/java/net/runelite/cache/definitions/loaders/TextureLoader.java b/cache/src/main/java/net/runelite/cache/definitions/loaders/TextureLoader.java index a6de684833..3e9ff09e89 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/loaders/TextureLoader.java +++ b/cache/src/main/java/net/runelite/cache/definitions/loaders/TextureLoader.java @@ -38,7 +38,8 @@ public class TextureLoader TextureDefinition def = new TextureDefinition(); InputStream is = new InputStream(b); - is.skip(3); + def.field1777 = is.readUnsignedShort(); + def.field1778 = is.readByte() != 0; def.setId(id); int count = is.readUnsignedByte(); @@ -49,6 +50,36 @@ public class TextureLoader def.setFileIds(files); + if (count > 1) + { + def.field1780 = new int[count - 1]; + + for (int var3 = 0; var3 < count - 1; ++var3) + { + def.field1780[var3] = is.readUnsignedByte(); + } + } + + if (count > 1) + { + def.field1781 = new int[count - 1]; + + for (int var3 = 0; var3 < count - 1; ++var3) + { + def.field1781[var3] = is.readUnsignedByte(); + } + } + + def.field1786 = new int[count]; + + for (int var3 = 0; var3 < count; ++var3) + { + def.field1786[var3] = is.readInt(); + } + + def.field1783 = is.readUnsignedByte(); + def.field1782 = is.readUnsignedByte(); + return def; } }