import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; import net.runelite.rs.ScriptOpcodes; @ObfuscatedName("aj") @Implements("WorldMapManager") public final class WorldMapManager { @ObfuscatedName("qd") @ObfuscatedSignature( signature = "Ldw;" ) @Export("pcmPlayer0") static PcmPlayer pcmPlayer0; @ObfuscatedName("dj") @ObfuscatedSignature( signature = "Lfr;" ) @Export("js5SocketTask") static Task js5SocketTask; @ObfuscatedName("x") @Export("loaded") boolean loaded; @ObfuscatedName("m") @Export("loadStarted") boolean loadStarted; @ObfuscatedName("k") @ObfuscatedSignature( signature = "Lad;" ) @Export("mapAreaData") WorldMapAreaData mapAreaData; @ObfuscatedName("d") @ObfuscatedSignature( signature = "Lla;" ) @Export("compositeTextureSprite") Sprite compositeTextureSprite; @ObfuscatedName("w") @Export("icons") HashMap icons; @ObfuscatedName("v") @ObfuscatedSignature( signature = "[[Lao;" ) @Export("regions") WorldMapRegion[][] regions; @ObfuscatedName("q") HashMap field359; @ObfuscatedName("z") @ObfuscatedSignature( signature = "[Lle;" ) @Export("mapSceneSprites") IndexedSprite[] mapSceneSprites; @ObfuscatedName("t") @ObfuscatedSignature( signature = "Liy;" ) @Export("geographyArchive") final AbstractArchive geographyArchive; @ObfuscatedName("e") @ObfuscatedSignature( signature = "Liy;" ) @Export("groundArchive") final AbstractArchive groundArchive; @ObfuscatedName("s") @Export("fonts") final HashMap fonts; @ObfuscatedName("p") @ObfuscatedGetter( intValue = -1440050247 ) @Export("tileX") int tileX; @ObfuscatedName("n") @ObfuscatedGetter( intValue = 2084338799 ) @Export("tileY") int tileY; @ObfuscatedName("u") @ObfuscatedGetter( intValue = 1804049707 ) @Export("tileWidth") int tileWidth; @ObfuscatedName("h") @ObfuscatedGetter( intValue = 793863639 ) @Export("tileHeight") int tileHeight; @ObfuscatedName("g") @ObfuscatedGetter( intValue = 1333710855 ) @Export("pixelsPerTile") public int pixelsPerTile; @ObfuscatedSignature( signature = "([Lle;Ljava/util/HashMap;Liy;Liy;)V" ) public WorldMapManager(IndexedSprite[] var1, HashMap var2, AbstractArchive var3, AbstractArchive var4) { this.loaded = false; this.loadStarted = false; this.field359 = new HashMap(); this.pixelsPerTile = 0; this.mapSceneSprites = var1; this.fonts = var2; this.geographyArchive = var3; this.groundArchive = var4; } @ObfuscatedName("x") @ObfuscatedSignature( signature = "(Liy;Ljava/lang/String;ZI)V", garbageValue = "1660505626" ) @Export("load") public void load(AbstractArchive var1, String var2, boolean var3) { if (!this.loadStarted) { this.loaded = false; this.loadStarted = true; System.nanoTime(); int var4 = var1.getGroupId(WorldMapCacheName.field339.name); int var5 = var1.getFileId(var4, var2); Buffer var6 = new Buffer(var1.takeFileByNames(WorldMapCacheName.field339.name, var2)); Buffer var7 = new Buffer(var1.takeFileByNames(WorldMapCacheName.field340.name, var2)); System.nanoTime(); System.nanoTime(); this.mapAreaData = new WorldMapAreaData(); try { this.mapAreaData.init(var6, var7, var5, var3); } catch (IllegalStateException var19) { return; } this.mapAreaData.getOriginX(); this.mapAreaData.getOriginPlane(); this.mapAreaData.getOriginY(); this.tileX = this.mapAreaData.getRegionLowX() * 64; this.tileY = this.mapAreaData.getRegionLowY() * 64; this.tileWidth = (this.mapAreaData.getRegionHighX() - this.mapAreaData.getRegionLowX() + 1) * 64; this.tileHeight = (this.mapAreaData.getRegionHighY() - this.mapAreaData.getRegionLowY() + 1) * 64; int var16 = this.mapAreaData.getRegionHighX() - this.mapAreaData.getRegionLowX() + 1; int var9 = this.mapAreaData.getRegionHighY() - this.mapAreaData.getRegionLowY() + 1; System.nanoTime(); System.nanoTime(); PendingSpawn.method1840(); this.regions = new WorldMapRegion[var16][var9]; Iterator var10 = this.mapAreaData.worldMapData0Set.iterator(); while (var10.hasNext()) { WorldMapData_0 var11 = (WorldMapData_0)var10.next(); int var12 = var11.regionX; int var13 = var11.regionY; int var14 = var12 - this.mapAreaData.getRegionLowX(); int var15 = var13 - this.mapAreaData.getRegionLowY(); this.regions[var14][var15] = new WorldMapRegion(var12, var13, this.mapAreaData.getBackGroundColor(), this.fonts); this.regions[var14][var15].initWorldMapData0(var11, this.mapAreaData.iconList); } for (int var17 = 0; var17 < var16; ++var17) { for (int var18 = 0; var18 < var9; ++var18) { if (this.regions[var17][var18] == null) { this.regions[var17][var18] = new WorldMapRegion(this.mapAreaData.getRegionLowX() + var17, this.mapAreaData.getRegionLowY() + var18, this.mapAreaData.getBackGroundColor(), this.fonts); this.regions[var17][var18].initWorldMapData1(this.mapAreaData.worldMapData1Set, this.mapAreaData.iconList); } } } System.nanoTime(); System.nanoTime(); if (var1.isValidFileName(WorldMapCacheName.field341.name, var2)) { byte[] var20 = var1.takeFileByNames(WorldMapCacheName.field341.name, var2); this.compositeTextureSprite = class200.convertJpgToSprite(var20); } System.nanoTime(); var1.clearGroups(); var1.clearFiles(); this.loaded = true; } } @ObfuscatedName("m") @ObfuscatedSignature( signature = "(I)V", garbageValue = "2062651870" ) @Export("clearIcons") public final void clearIcons() { this.icons = null; } @ObfuscatedName("k") @ObfuscatedSignature( signature = "(IIIIIIIIB)V", garbageValue = "8" ) @Export("drawTiles") public final void drawTiles(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) { int[] var9 = Rasterizer2D.Rasterizer2D_pixels; int var10 = Rasterizer2D.Rasterizer2D_width; int var11 = Rasterizer2D.Rasterizer2D_height; int[] var12 = new int[4]; Rasterizer2D.Rasterizer2D_getClipArray(var12); WorldMapRectangle var13 = this.createWorldMapRectangle(var1, var2, var3, var4); float var14 = this.getPixelsPerTile(var7 - var5, var3 - var1); int var15 = (int)Math.ceil((double)var14); this.pixelsPerTile = var15; if (!this.field359.containsKey(var15)) { class49 var16 = new class49(var15); var16.init(); this.field359.put(var15, var16); } int var23 = var13.width + var13.x - 1; int var17 = var13.height + var13.y - 1; int var18; int var19; for (var18 = var13.x; var18 <= var23; ++var18) { for (var19 = var13.y; var19 <= var17; ++var19) { this.regions[var18][var19].drawTile(var15, (class49)this.field359.get(var15), this.mapSceneSprites, this.geographyArchive, this.groundArchive); } } Rasterizer2D.Rasterizer2D_replace(var9, var10, var11); Rasterizer2D.Rasterizer2D_setClipArray(var12); var18 = (int)(var14 * 64.0F); var19 = this.tileX + var1; int var20 = var2 + this.tileY; for (int var21 = var13.x; var21 < var13.width + var13.x; ++var21) { for (int var22 = var13.y; var22 < var13.height + var13.y; ++var22) { this.regions[var21][var22].method519(var5 + (this.regions[var21][var22].regionX * 64 - var19) * var18 / 64, var8 - (this.regions[var21][var22].regionY * 64 - var20 + 64) * var18 / 64, var18); } } } @ObfuscatedName("d") @ObfuscatedSignature( signature = "(IIIIIIIILjava/util/HashSet;Ljava/util/HashSet;IIZB)V", garbageValue = "18" ) @Export("drawElements") public final void drawElements(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, HashSet var9, HashSet var10, int var11, int var12, boolean var13) { WorldMapRectangle var14 = this.createWorldMapRectangle(var1, var2, var3, var4); float var15 = this.getPixelsPerTile(var7 - var5, var3 - var1); int var16 = (int)(var15 * 64.0F); int var17 = this.tileX + var1; int var18 = var2 + this.tileY; int var19; int var20; for (var19 = var14.x; var19 < var14.width + var14.x; ++var19) { for (var20 = var14.y; var20 < var14.height + var14.y; ++var20) { if (var13) { this.regions[var19][var20].initWorldMapIcon1s(); } this.regions[var19][var20].method529(var5 + (this.regions[var19][var20].regionX * 64 - var17) * var16 / 64, var8 - (this.regions[var19][var20].regionY * 64 - var18 + 64) * var16 / 64, var16, var9); } } if (var10 != null && var11 > 0) { for (var19 = var14.x; var19 < var14.width + var14.x; ++var19) { for (var20 = var14.y; var20 < var14.height + var14.y; ++var20) { this.regions[var19][var20].flashElements(var10, var11, var12); } } } } @ObfuscatedName("w") @ObfuscatedSignature( signature = "(IIIILjava/util/HashSet;IIB)V", garbageValue = "73" ) @Export("drawOverview") public void drawOverview(int var1, int var2, int var3, int var4, HashSet var5, int var6, int var7) { if (this.compositeTextureSprite != null) { this.compositeTextureSprite.drawScaledAt(var1, var2, var3, var4); if (var6 > 0 && var6 % var7 < var7 / 2) { if (this.icons == null) { this.buildIcons0(); } Iterator var8 = var5.iterator(); while (true) { List var10; do { if (!var8.hasNext()) { return; } int var9 = (Integer)var8.next(); var10 = (List)this.icons.get(var9); } while(var10 == null); Iterator var11 = var10.iterator(); while (var11.hasNext()) { AbstractWorldMapIcon var12 = (AbstractWorldMapIcon)var11.next(); int var13 = var3 * (var12.coord2.x - this.tileX) / this.tileWidth; int var14 = var4 - (var12.coord2.y - this.tileY) * var4 / this.tileHeight; Rasterizer2D.Rasterizer2D_drawCircleAlpha(var13 + var1, var14 + var2, 2, 16776960, 256); } } } } } @ObfuscatedName("v") @ObfuscatedSignature( signature = "(IIIIIIIIIII)Ljava/util/List;", garbageValue = "1400578411" ) public List method722(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10) { LinkedList var11 = new LinkedList(); if (!this.loaded) { return var11; } else { WorldMapRectangle var12 = this.createWorldMapRectangle(var1, var2, var3, var4); float var13 = this.getPixelsPerTile(var7, var3 - var1); int var14 = (int)(var13 * 64.0F); int var15 = this.tileX + var1; int var16 = var2 + this.tileY; for (int var17 = var12.x; var17 < var12.width + var12.x; ++var17) { for (int var18 = var12.y; var18 < var12.height + var12.y; ++var18) { List var19 = this.regions[var17][var18].method606(var5 + (this.regions[var17][var18].regionX * 64 - var15) * var14 / 64, var8 + var6 - (this.regions[var17][var18].regionY * 64 - var16 + 64) * var14 / 64, var14, var9, var10); if (!var19.isEmpty()) { var11.addAll(var19); } } } return var11; } } @ObfuscatedName("q") @ObfuscatedSignature( signature = "(IIIII)Lar;", garbageValue = "-1850062895" ) @Export("createWorldMapRectangle") WorldMapRectangle createWorldMapRectangle(int var1, int var2, int var3, int var4) { WorldMapRectangle var5 = new WorldMapRectangle(this); int var6 = this.tileX + var1; int var7 = var2 + this.tileY; int var8 = var3 + this.tileX; int var9 = var4 + this.tileY; int var10 = var6 / 64; int var11 = var7 / 64; int var12 = var8 / 64; int var13 = var9 / 64; var5.width = var12 - var10 + 1; var5.height = var13 - var11 + 1; var5.x = var10 - this.mapAreaData.getRegionLowX(); var5.y = var11 - this.mapAreaData.getRegionLowY(); if (var5.x < 0) { var5.width += var5.x; var5.x = 0; } if (var5.x > this.regions.length - var5.width) { var5.width = this.regions.length - var5.x; } if (var5.y < 0) { var5.height += var5.y; var5.y = 0; } if (var5.y > this.regions[0].length - var5.height) { var5.height = this.regions[0].length - var5.y; } var5.width = Math.min(var5.width, this.regions.length); var5.height = Math.min(var5.height, this.regions[0].length); return var5; } @ObfuscatedName("z") @ObfuscatedSignature( signature = "(B)Z", garbageValue = "8" ) @Export("isLoaded") public boolean isLoaded() { return this.loaded; } @ObfuscatedName("t") @ObfuscatedSignature( signature = "(B)Ljava/util/HashMap;", garbageValue = "-55" ) @Export("buildIcons") public HashMap buildIcons() { this.buildIcons0(); return this.icons; } @ObfuscatedName("e") @ObfuscatedSignature( signature = "(I)V", garbageValue = "1203186095" ) @Export("buildIcons0") void buildIcons0() { if (this.icons == null) { this.icons = new HashMap(); } this.icons.clear(); for (int var1 = 0; var1 < this.regions.length; ++var1) { for (int var2 = 0; var2 < this.regions[var1].length; ++var2) { List var3 = this.regions[var1][var2].icons(); Iterator var4 = var3.iterator(); while (var4.hasNext()) { AbstractWorldMapIcon var5 = (AbstractWorldMapIcon)var4.next(); if (var5.hasValidElement()) { int var6 = var5.getElement(); if (!this.icons.containsKey(var6)) { LinkedList var7 = new LinkedList(); var7.add(var5); this.icons.put(var6, var7); } else { List var8 = (List)this.icons.get(var6); var8.add(var5); } } } } } } @ObfuscatedName("s") @ObfuscatedSignature( signature = "(III)F", garbageValue = "-1899828753" ) @Export("getPixelsPerTile") float getPixelsPerTile(int var1, int var2) { float var3 = (float)var1 / (float)var2; if (var3 > 8.0F) { return 8.0F; } else if (var3 < 1.0F) { return 1.0F; } else { int var4 = Math.round(var3); return Math.abs((float)var4 - var3) < 0.05F ? (float)var4 : var3; } } @ObfuscatedName("a") @ObfuscatedSignature( signature = "(ILce;ZI)I", garbageValue = "345752229" ) static int method750(int var0, Script var1, boolean var2) { Widget var3 = MusicPatchNode.getWidget(Interpreter.Interpreter_intStack[--Interpreter.Interpreter_intStackSize]); if (var0 == ScriptOpcodes.IF_GETX) { Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.x; return 1; } else if (var0 == ScriptOpcodes.IF_GETY) { Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.y; return 1; } else if (var0 == ScriptOpcodes.IF_GETWIDTH) { Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.width; return 1; } else if (var0 == ScriptOpcodes.IF_GETHEIGHT) { Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.height; return 1; } else if (var0 == ScriptOpcodes.IF_GETHIDE) { Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.isHidden ? 1 : 0; return 1; } else if (var0 == ScriptOpcodes.IF_GETLAYER) { Interpreter.Interpreter_intStack[++Interpreter.Interpreter_intStackSize - 1] = var3.parentId; return 1; } else { return 2; } } }