diff --git a/client/src/main/java/rt4/ClientProt.java b/client/src/main/java/rt4/ClientProt.java
index e9eab3c..46c82b6 100644
--- a/client/src/main/java/rt4/ClientProt.java
+++ b/client/src/main/java/rt4/ClientProt.java
@@ -13,8 +13,6 @@ public class ClientProt {
public static final JagString COMPLETE_PERCENT = JagString.parse("
(X100(U(Y");
@OriginalMember(owner = "client!wc", name = "g", descriptor = "I")
public static int anInt5804 = 0;
- @OriginalMember(owner = "client!nm", name = "U", descriptor = "I")
- public static int mapFilesMissingCount = 0;
@OriginalMember(owner = "client!vg", name = "a", descriptor = "(Lclient!na;IIBI)V")
public static void method4512(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(4) int arg3) {
@@ -169,259 +167,6 @@ public class ClientProt {
}
}
- @OriginalMember(owner = "client!gd", name = "c", descriptor = "(I)V")
- public static void rebuildMap() {
- ping(false);
- mapFilesMissingCount = 0;
- @Pc(12) boolean fileExists = true;
- @Pc(14) int id;
- for (id = 0; id < LoginManager.mapFilesBuffer.length; id++) {
- if (LoginManager.mapFileIds[id] != -1 && LoginManager.mapFilesBuffer[id] == null) {
- LoginManager.mapFilesBuffer[id] = client.js5Archive5.fetchFile(LoginManager.mapFileIds[id], 0);
- if (LoginManager.mapFilesBuffer[id] == null) {
- mapFilesMissingCount++;
- fileExists = false;
- }
- }
- if (LoginManager.locationsMapFileIds[id] != -1 && LoginManager.locationMapFilesBuffer[id] == null) {
- LoginManager.locationMapFilesBuffer[id] = client.js5Archive5.fetchFile(LoginManager.locationsMapFileIds[id], LoginManager.regionsXteaKeys[id], 0);
- if (LoginManager.locationMapFilesBuffer[id] == null) {
- fileExists = false;
- mapFilesMissingCount++;
- }
- }
-
- if (GlRenderer.enabled) {
- if (LoginManager.underWaterMapFileIds[id] != -1 && LoginManager.underWaterMapFilesBuffer[id] == null) {
- LoginManager.underWaterMapFilesBuffer[id] = client.js5Archive5.fetchFile(LoginManager.underWaterMapFileIds[id], 0);
- if (LoginManager.underWaterMapFilesBuffer[id] == null) {
- fileExists = false;
- mapFilesMissingCount++;
- }
- }
- if (LoginManager.underWaterLocationsMapFileIds[id] != -1 && LoginManager.underWaterLocationsMapFilesBuffer[id] == null) {
- LoginManager.underWaterLocationsMapFilesBuffer[id] = client.js5Archive5.fetchFile(LoginManager.underWaterLocationsMapFileIds[id], 0);
- if (LoginManager.underWaterLocationsMapFilesBuffer[id] == null) {
- mapFilesMissingCount++;
- fileExists = false;
- }
- }
- }
-
- if (LoginManager.npcSpawnsFileIds != null && LoginManager.npcSpawnsFilesBuffer[id] == null && LoginManager.npcSpawnsFileIds[id] != -1) {
- LoginManager.npcSpawnsFilesBuffer[id] = client.js5Archive5.fetchFile(LoginManager.npcSpawnsFileIds[id], LoginManager.regionsXteaKeys[id], 0);
- if (LoginManager.npcSpawnsFilesBuffer[id] == null) {
- mapFilesMissingCount++;
- fileExists = false;
- }
- }
- }
-
- if (LoginManager.mapElementList == null) {
- if (LoginManager.map == null || !client.js5Archive23.isGroupNameValid(JagString.concatenate(new JagString[]{LoginManager.map.group, aClass100_363}))) {
- LoginManager.mapElementList = new MapElementList(0);
- } else if (client.js5Archive23.isGroupReady(JagString.concatenate(new JagString[]{LoginManager.map.group, aClass100_363}))) {
- LoginManager.mapElementList = MapElementList.create(JagString.concatenate(new JagString[]{LoginManager.map.group, aClass100_363}), client.js5Archive23);
- } else {
- fileExists = false;
- mapFilesMissingCount++;
- }
- }
-
- if (!fileExists) {
- Static233.loadingScreenState = 1;
- return;
- }
-
- anInt5804 = 0;
- fileExists = true;
- @Pc(320) int chunkX;
- @Pc(309) int chunkZ;
- for (id = 0; id < LoginManager.mapFilesBuffer.length; id++) {
- @Pc(294) byte[] local294 = LoginManager.locationMapFilesBuffer[id];
- if (local294 != null) {
- chunkZ = (LoginManager.regionBitPacked[id] & 0xFF) * 64 - Camera.originZ;
- chunkX = (LoginManager.regionBitPacked[id] >> 8) * 64 - Camera.originX;
- if (LoginManager.dynamicMapRegion) {
- chunkZ = 10;
- chunkX = 10;
- }
- fileExists &= Static49.method1201(chunkX, chunkZ, local294);
- }
- if (GlRenderer.enabled) {
- local294 = LoginManager.underWaterLocationsMapFilesBuffer[id];
- if (local294 != null) {
- chunkX = (LoginManager.regionBitPacked[id] >> 8) * 64 - Camera.originX;
- chunkZ = (LoginManager.regionBitPacked[id] & 0xFF) * 64 - Camera.originZ;
- if (LoginManager.dynamicMapRegion) {
- chunkZ = 10;
- chunkX = 10;
- }
- fileExists &= Static49.method1201(chunkX, chunkZ, local294);
- }
- }
- }
- if (!fileExists) {
- Static233.loadingScreenState = 2;
- return;
- }
-
- if (Static233.loadingScreenState != 0) {
- Static114.drawTextOnScreen(true, JagString.concatenate(new JagString[]{LocalizedText.LOADING, COMPLETE_PERCENT}));
- }
-
- client.audioLoop();
- client.method3768();
- @Pc(420) boolean hasUnderWaterMap = false;
- @Pc(427) int i;
- if (GlRenderer.enabled && Preferences.highWaterDetail) {
- for (i = 0; i < LoginManager.mapFilesBuffer.length; i++) {
- if (LoginManager.underWaterLocationsMapFilesBuffer[i] != null || LoginManager.underWaterMapFilesBuffer[i] != null) {
- hasUnderWaterMap = true;
- break;
- }
- }
- }
- SceneGraph.init(GlRenderer.enabled ? GlobalConfig.TILE_DISTANCE : 25, hasUnderWaterMap);
- for (i = 0; i < 4; i++) {
- PathFinder.collisionMaps[i].clear();
- }
- for (i = 0; i < 4; i++) {
- for (chunkX = 0; chunkX < 104; chunkX++) {
- for (chunkZ = 0; chunkZ < 104; chunkZ++) {
- SceneGraph.tileFlags[i][chunkX][chunkZ] = 0;
- }
- }
- }
- AreaSoundManager.clear(false);
- if (GlRenderer.enabled) {
- ShadowManager.shadowMapImage.clear();
- for (i = 0; i < 13; i++) {
- for (chunkX = 0; chunkX < 13; chunkX++) {
- ShadowManager.shadows[i][chunkX].outputToSprite = true;
- }
- }
- }
- if (GlRenderer.enabled) {
- LightingManager.method2404();
- }
- if (GlRenderer.enabled) {
- setDefaultChunksAtmosphere();
- }
- client.audioLoop();
- System.gc();
- ping(true);
- SceneGraph.load(false);
- if (!LoginManager.dynamicMapRegion) {
- Static87.method1805(false);
- ping(true);
- if (GlRenderer.enabled) {
- i = PlayerList.self.movementQueueX[0] >> 3;
- chunkX = PlayerList.self.movementQueueZ[0] >> 3;
- FogManager.setLightPosition(chunkX, i);
- }
- LoginManager.method743(false);
- if (LoginManager.npcSpawnsFilesBuffer != null) {
- Static158.decodeNpcFiles();
- }
- }
- if (LoginManager.dynamicMapRegion) {
- Static89.method1835(false);
- ping(true);
- if (GlRenderer.enabled) {
- i = PlayerList.self.movementQueueX[0] >> 3;
- chunkX = PlayerList.self.movementQueueZ[0] >> 3;
- FogManager.setLightPosition(chunkX, i);
- }
- Static233.method4002(false);
- }
- client.method3768();
- ping(true);
- SceneGraph.method1169(PathFinder.collisionMaps, false);
- if (GlRenderer.enabled) {
- LightingManager.method2395();
- }
- ping(true);
- i = SceneGraph.firstVisibleLevel;
- if (i > Player.level) {
- i = Player.level;
- }
- if (i < Player.level - 1) {
- }
- if (SceneGraph.allLevelsAreVisible()) {
- SceneGraph.method2750(0);
- } else {
- SceneGraph.method2750(SceneGraph.firstVisibleLevel);
- }
- SceneGraph.unload();
- if (GlRenderer.enabled && hasUnderWaterMap) {
- SceneGraph.setUnderwater(true);
- SceneGraph.load(true);
- if (!LoginManager.dynamicMapRegion) {
- Static87.method1805(true);
- ping(true);
- LoginManager.method743(true);
- }
- if (LoginManager.dynamicMapRegion) {
- Static89.method1835(true);
- ping(true);
- Static233.method4002(true);
- }
- client.method3768();
- ping(true);
- SceneGraph.method1169(PathFinder.collisionMaps, true);
- ping(true);
- SceneGraph.unload();
- SceneGraph.setUnderwater(false);
- }
- if (GlRenderer.enabled) {
- for (chunkX = 0; chunkX < 13; chunkX++) {
- for (chunkZ = 0; chunkZ < 13; chunkZ++) {
- ShadowManager.shadows[chunkX][chunkZ].method4676(SceneGraph.tileHeights[0], chunkX * 8, chunkZ * 8);
- }
- }
- }
- for (chunkX = 0; chunkX < 104; chunkX++) {
- for (chunkZ = 0; chunkZ < 104; chunkZ++) {
- Protocol.spawnGroundObject(chunkZ, chunkX);
- }
- }
- ScriptRunner.method2218();
- client.audioLoop();
- ChangeLocRequest.flush();
- client.method3768();
- Static231.aBoolean252 = false;
- if (GameShell.frame != null && Protocol.socket != null && client.gameState == 25) {
- Protocol.outboundBuffer.p1isaac(20);
- Protocol.outboundBuffer.p4(1057001181);
- }
- if (!LoginManager.dynamicMapRegion) {
- @Pc(815) int local815 = (LoginManager.centralZoneZ + 6) / 8;
- @Pc(821) int local821 = (LoginManager.centralZoneZ - 6) / 8;
- chunkX = (LoginManager.centralZoneX - 6) / 8;
- chunkZ = (LoginManager.centralZoneX + 6) / 8;
- for (@Pc(837) int local837 = chunkX - 1; local837 <= chunkZ + 1; local837++) {
- for (@Pc(850) int local850 = local821 - 1; local850 <= local815 + 1; local850++) {
- if (local837 < chunkX || local837 > chunkZ || local850 < local821 || local850 > local815) {
- client.js5Archive5.prefetchGroup(JagString.concatenate(new JagString[]{LoginManager.aClass100_558, JagString.parseInt(local837), LoginManager.UNDERSCORE, JagString.parseInt(local850)}));
- client.js5Archive5.prefetchGroup(JagString.concatenate(new JagString[]{LoginManager.aClass100_1090, JagString.parseInt(local837), LoginManager.UNDERSCORE, JagString.parseInt(local850)}));
- }
- }
- }
- }
- if (client.gameState == 28) {
- client.setGameState(10);
- } else {
- client.setGameState(30);
- if (Protocol.socket != null) {
- Protocol.outboundBuffer.p1isaac(110);
- }
- }
- WorldMap.method2720();
- client.audioLoop();
- GameShell.resetTimer();
- }
-
@OriginalMember(owner = "client!ej", name = "i", descriptor = "(I)V")
public static void method1373() {
Protocol.outboundBuffer.p1isaac(243);
diff --git a/client/src/main/java/rt4/DisplayMode.java b/client/src/main/java/rt4/DisplayMode.java
index 93a6aab..28d37a9 100644
--- a/client/src/main/java/rt4/DisplayMode.java
+++ b/client/src/main/java/rt4/DisplayMode.java
@@ -159,7 +159,7 @@ public final class DisplayMode {
if (client.gameState == 5) {
LoadingBar.render(true, Fonts.b12Full);
} else {
- Static114.drawTextOnScreen(false, LocalizedText.LOADING);
+ Fonts.drawTextOnScreen(false, LocalizedText.LOADING);
}
try {
@Pc(269) Graphics local269 = GameShell.canvas.getGraphics();
diff --git a/client/src/main/java/rt4/Font.java b/client/src/main/java/rt4/Font.java
index 2b078e2..240a4f9 100644
--- a/client/src/main/java/rt4/Font.java
+++ b/client/src/main/java/rt4/Font.java
@@ -220,7 +220,7 @@ public abstract class Font extends SecondaryNode {
}
@OriginalMember(owner = "client!rk", name = "a", descriptor = "(Lclient!na;IIIIIIIII)I")
- public final int method2852(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8, @OriginalArg(9) int arg9) {
+ public final int drawInterfaceText(@OriginalArg(0) JagString arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) int arg6, @OriginalArg(7) int arg7, @OriginalArg(8) int arg8, @OriginalArg(9) int arg9) {
return this.renderParagraphAlpha(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
}
diff --git a/client/src/main/java/rt4/Fonts.java b/client/src/main/java/rt4/Fonts.java
index ad78800..48726e4 100644
--- a/client/src/main/java/rt4/Fonts.java
+++ b/client/src/main/java/rt4/Fonts.java
@@ -4,6 +4,8 @@ import org.openrs2.deob.annotation.OriginalArg;
import org.openrs2.deob.annotation.OriginalMember;
import org.openrs2.deob.annotation.Pc;
+import java.awt.*;
+
public class Fonts {
@OriginalMember(owner = "client!j", name = "x", descriptor = "Lclient!rk;")
public static Font p11Full;
@@ -54,4 +56,31 @@ public class Fonts {
p12Full = Font.method2462(Sprites.p12FullId, arg1, arg0);
b12Full = Font.method2462(Sprites.b12FullId, arg1, arg0);
}
+
+ @OriginalMember(owner = "client!j", name = "a", descriptor = "(BZLclient!na;)V")
+ public static void drawTextOnScreen(@OriginalArg(1) boolean arg0, @OriginalArg(2) JagString arg1) {
+ @Pc(24) int local24 = p12Full.getMaxLineWidth(arg1, 250);
+ @Pc(31) int local31 = p12Full.getParagraphLineCount(arg1, 250) * 13;
+ if (GlRenderer.enabled) {
+ GlRaster.fillRect(6, 6, local24 + 4 + 4, local31 + 8, 0);
+ GlRaster.drawRect(6, 6, local24 + 4 + 4, local31 + 4 + 4, 16777215);
+ } else {
+ SoftwareRaster.fillRect(6, 6, local24 + 4 + 4, local31 + 8, 0);
+ SoftwareRaster.drawRect(6, 6, local24 + 8, 4 + 4 + local31, 16777215);
+ }
+ p12Full.drawInterfaceText(arg1, 10, 10, local24, local31, 16777215, -1, 1, 1, 0);
+ InterfaceList.redrawScreen(6, local24 + 8, 6, local31 + 4 + 4);
+ if (!arg0) {
+ Static121.redrawScreen(10, 10, local31, local24);
+ } else if (GlRenderer.enabled) {
+ GlRenderer.swapBuffers();
+ } else {
+ try {
+ @Pc(159) Graphics local159 = GameShell.canvas.getGraphics();
+ SoftwareRaster.frameBuffer.draw(local159);
+ } catch (@Pc(167) Exception local167) {
+ GameShell.canvas.repaint();
+ }
+ }
+ }
}
diff --git a/client/src/main/java/rt4/GlRaster.java b/client/src/main/java/rt4/GlRaster.java
index c85c3cd..4dae0f8 100644
--- a/client/src/main/java/rt4/GlRaster.java
+++ b/client/src/main/java/rt4/GlRaster.java
@@ -75,7 +75,7 @@ public final class GlRaster {
}
@OriginalMember(owner = "client!dj", name = "a", descriptor = "(IIIII)V")
- public static void method1179(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) {
+ public static void drawRect(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) {
GlRenderer.method4162();
@Pc(5) float local5 = (float) arg0 + 0.3F;
@Pc(12) float local12 = local5 + (float) (arg2 - 1);
@@ -220,7 +220,7 @@ public final class GlRaster {
}
@OriginalMember(owner = "client!dj", name = "c", descriptor = "(IIIII)V")
- public static void method1186(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) {
+ public static void fillRect(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4) {
GlRenderer.method4162();
@Pc(3) float local3 = (float) arg0;
@Pc(8) float local8 = local3 + (float) arg2;
diff --git a/client/src/main/java/rt4/InterfaceList.java b/client/src/main/java/rt4/InterfaceList.java
index e1c0eb0..23a529c 100644
--- a/client/src/main/java/rt4/InterfaceList.java
+++ b/client/src/main/java/rt4/InterfaceList.java
@@ -349,9 +349,9 @@ public class InterfaceList {
}
if (MiniMenu.size == 1) {
Static40.aBoolean108 = false;
- method4012(anInt4271, anInt761, anInt5138, anInt436);
+ redrawScreen(anInt4271, anInt761, anInt5138, anInt436);
} else {
- method4012(anInt4271, anInt761, anInt5138, anInt436);
+ redrawScreen(anInt4271, anInt761, anInt5138, anInt436);
local43 = Fonts.b12Full.getStringWidth(LocalizedText.CHOOSE_OPTION);
for (@Pc(75) int local75 = 0; local75 < MiniMenu.size; local75++) {
@Pc(88) int local88 = Fonts.b12Full.getStringWidth(MiniMenu.getOp(local75));
@@ -502,7 +502,7 @@ public class InterfaceList {
}
@OriginalMember(owner = "client!kf", name = "a", descriptor = "(IIBII)V")
- public static void method4012(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3) {
+ public static void redrawScreen(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(3) int arg2, @OriginalArg(4) int arg3) {
for (@Pc(12) int local12 = 0; local12 < rectangles; local12++) {
if (rectangleWidth[local12] + rectangleX[local12] > arg0 && arg1 + arg0 > rectangleX[local12] && arg2 < rectangleHeight[local12] + rectangleY[local12] && rectangleY[local12] < arg2 + arg3) {
aBooleanArray100[local12] = true;
diff --git a/client/src/main/java/rt4/Js5.java b/client/src/main/java/rt4/Js5.java
index ce4ddec..06fc398 100644
--- a/client/src/main/java/rt4/Js5.java
+++ b/client/src/main/java/rt4/Js5.java
@@ -295,6 +295,7 @@ public final class Js5 {
try {
uncompressed = Js5Compression.uncompress(compressed);
} catch (@Pc(142) RuntimeException ex) {
+ ex.printStackTrace();
System.out.println("T3 - " + (key != null) + "," + group + "," + compressed.length + "," + Buffer.crc32(compressed, compressed.length) + "," + Buffer.crc32(compressed, compressed.length - 2) + "," + this.index.groupChecksums[group] + "," + this.index.checksum);
uncompressed = new byte[]{0};
}
diff --git a/client/src/main/java/rt4/LoadingBar.java b/client/src/main/java/rt4/LoadingBar.java
index da7634d..63d1467 100644
--- a/client/src/main/java/rt4/LoadingBar.java
+++ b/client/src/main/java/rt4/LoadingBar.java
@@ -17,10 +17,10 @@ public class LoadingBar {
arg1.renderCenter(LocalizedText.GAME0_LOADING, GameShell.canvasWidth / 2, GameShell.canvasHeight / 2 - 26, 16777215, -1);
local9 = GameShell.canvasHeight / 2 - 18;
if (GlRenderer.enabled) {
- GlRaster.method1179(GameShell.canvasWidth / 2 - 152, local9, 304, 34, 9179409);
- GlRaster.method1179(GameShell.canvasWidth / 2 - 151, local9 - -1, 302, 32, 0);
- GlRaster.method1186(GameShell.canvasWidth / 2 - 150, local9 + 2, client.mainLoadPercentage * 3, 30, 9179409);
- GlRaster.method1186(GameShell.canvasWidth / 2 + client.mainLoadPercentage * 3 - 150, local9 + 2, 300 - client.mainLoadPercentage * 3, 30, 0);
+ GlRaster.drawRect(GameShell.canvasWidth / 2 - 152, local9, 304, 34, 9179409);
+ GlRaster.drawRect(GameShell.canvasWidth / 2 - 151, local9 - -1, 302, 32, 0);
+ GlRaster.fillRect(GameShell.canvasWidth / 2 - 150, local9 + 2, client.mainLoadPercentage * 3, 30, 9179409);
+ GlRaster.fillRect(GameShell.canvasWidth / 2 + client.mainLoadPercentage * 3 - 150, local9 + 2, 300 - client.mainLoadPercentage * 3, 30, 0);
} else {
SoftwareRaster.drawRect(GameShell.canvasWidth / 2 - 152, local9, 304, 34, 9179409);
SoftwareRaster.drawRect(GameShell.canvasWidth / 2 - 151, local9 + 1, 302, 32, 0);
diff --git a/client/src/main/java/rt4/LoginManager.java b/client/src/main/java/rt4/LoginManager.java
index 9f75d3a..2511128 100644
--- a/client/src/main/java/rt4/LoginManager.java
+++ b/client/src/main/java/rt4/LoginManager.java
@@ -112,6 +112,10 @@ public class LoginManager {
public static int anInt1862 = 0;
@OriginalMember(owner = "client!sj", name = "u", descriptor = "Z")
public static boolean dynamicMapRegion = false;
+ @OriginalMember(owner = "client!nm", name = "U", descriptor = "I")
+ public static int mapFilesMissingCount = 0;
+ @OriginalMember(owner = "client!t", name = "y", descriptor = "I")
+ public static int loadingScreenState = 0;
@OriginalMember(owner = "client!dm", name = "d", descriptor = "(I)V")
public static void clear() {
@@ -497,7 +501,6 @@ public class LoginManager {
centralZoneX = -1;
Protocol.readRebuildPacket(false);
Protocol.opcode = -1;
- return;
}
} catch (@Pc(977) IOException ex) {
if (Protocol.socket != null) {
@@ -667,7 +670,7 @@ public class LoginManager {
} else {
client.setGameState(25);
}
- Static114.drawTextOnScreen(true, LocalizedText.LOADING);
+ Fonts.drawTextOnScreen(true, LocalizedText.LOADING);
@Pc(53) int local53 = Camera.originZ;
@Pc(55) int local55 = Camera.originX;
Camera.originZ = arg1 * 8 - 48;
@@ -838,4 +841,313 @@ public class LoginManager {
}
}
+ @OriginalMember(owner = "client!gd", name = "c", descriptor = "(I)V")
+ public static void rebuildMap() {
+ ClientProt.ping(false);
+ mapFilesMissingCount = 0;
+ @Pc(12) boolean fileExists = true;
+ @Pc(14) int id;
+ for (id = 0; id < mapFilesBuffer.length; id++) {
+ if (mapFileIds[id] != -1 && mapFilesBuffer[id] == null) {
+ mapFilesBuffer[id] = client.js5Archive5.fetchFile(mapFileIds[id], 0);
+ if (mapFilesBuffer[id] == null) {
+ mapFilesMissingCount++;
+ fileExists = false;
+ }
+ }
+ if (locationsMapFileIds[id] != -1 && locationMapFilesBuffer[id] == null) {
+ locationMapFilesBuffer[id] = client.js5Archive5.fetchFile(locationsMapFileIds[id], regionsXteaKeys[id], 0);
+ if (locationMapFilesBuffer[id] == null) {
+ fileExists = false;
+ mapFilesMissingCount++;
+ }
+ }
+
+ if (GlRenderer.enabled) {
+ if (underWaterMapFileIds[id] != -1 && underWaterMapFilesBuffer[id] == null) {
+ underWaterMapFilesBuffer[id] = client.js5Archive5.fetchFile(underWaterMapFileIds[id], 0);
+ if (underWaterMapFilesBuffer[id] == null) {
+ fileExists = false;
+ mapFilesMissingCount++;
+ }
+ }
+ if (underWaterLocationsMapFileIds[id] != -1 && underWaterLocationsMapFilesBuffer[id] == null) {
+ underWaterLocationsMapFilesBuffer[id] = client.js5Archive5.fetchFile(underWaterLocationsMapFileIds[id], 0);
+ if (underWaterLocationsMapFilesBuffer[id] == null) {
+ mapFilesMissingCount++;
+ fileExists = false;
+ }
+ }
+ }
+
+ if (npcSpawnsFileIds != null && npcSpawnsFilesBuffer[id] == null && npcSpawnsFileIds[id] != -1) {
+ npcSpawnsFilesBuffer[id] = client.js5Archive5.fetchFile(npcSpawnsFileIds[id], regionsXteaKeys[id], 0);
+ if (npcSpawnsFilesBuffer[id] == null) {
+ mapFilesMissingCount++;
+ fileExists = false;
+ }
+ }
+ }
+
+ if (mapElementList == null) {
+ if (map == null || !client.js5Archive23.isGroupNameValid(JagString.concatenate(new JagString[]{map.group, ClientProt.aClass100_363}))) {
+ mapElementList = new MapElementList(0);
+ } else if (client.js5Archive23.isGroupReady(JagString.concatenate(new JagString[]{map.group, ClientProt.aClass100_363}))) {
+ mapElementList = MapElementList.create(JagString.concatenate(new JagString[]{map.group, ClientProt.aClass100_363}), client.js5Archive23);
+ } else {
+ fileExists = false;
+ mapFilesMissingCount++;
+ }
+ }
+
+ if (!fileExists) {
+ loadingScreenState = 1;
+ return;
+ }
+
+ ClientProt.anInt5804 = 0;
+ fileExists = true;
+ @Pc(320) int chunkX;
+ @Pc(309) int chunkZ;
+ for (id = 0; id < mapFilesBuffer.length; id++) {
+ @Pc(294) byte[] local294 = locationMapFilesBuffer[id];
+ if (local294 != null) {
+ chunkZ = (regionBitPacked[id] & 0xFF) * 64 - Camera.originZ;
+ chunkX = (regionBitPacked[id] >> 8) * 64 - Camera.originX;
+ if (dynamicMapRegion) {
+ chunkZ = 10;
+ chunkX = 10;
+ }
+ fileExists &= method1201(chunkX, chunkZ, local294);
+ }
+ if (GlRenderer.enabled) {
+ local294 = underWaterLocationsMapFilesBuffer[id];
+ if (local294 != null) {
+ chunkX = (regionBitPacked[id] >> 8) * 64 - Camera.originX;
+ chunkZ = (regionBitPacked[id] & 0xFF) * 64 - Camera.originZ;
+ if (dynamicMapRegion) {
+ chunkZ = 10;
+ chunkX = 10;
+ }
+ fileExists &= method1201(chunkX, chunkZ, local294);
+ }
+ }
+ }
+ if (!fileExists) {
+ loadingScreenState = 2;
+ return;
+ }
+
+ if (loadingScreenState != 0) {
+ Fonts.drawTextOnScreen(true, JagString.concatenate(new JagString[]{LocalizedText.LOADING, ClientProt.COMPLETE_PERCENT}));
+ }
+
+ client.audioLoop();
+ client.method3768();
+ @Pc(420) boolean hasUnderWaterMap = false;
+ @Pc(427) int i;
+ if (GlRenderer.enabled && Preferences.highWaterDetail) {
+ for (i = 0; i < mapFilesBuffer.length; i++) {
+ if (underWaterLocationsMapFilesBuffer[i] != null || underWaterMapFilesBuffer[i] != null) {
+ hasUnderWaterMap = true;
+ break;
+ }
+ }
+ }
+ SceneGraph.init(GlRenderer.enabled ? GlobalConfig.TILE_DISTANCE : 25, hasUnderWaterMap);
+ for (i = 0; i < 4; i++) {
+ PathFinder.collisionMaps[i].clear();
+ }
+ for (i = 0; i < 4; i++) {
+ for (chunkX = 0; chunkX < 104; chunkX++) {
+ for (chunkZ = 0; chunkZ < 104; chunkZ++) {
+ SceneGraph.tileFlags[i][chunkX][chunkZ] = 0;
+ }
+ }
+ }
+ AreaSoundManager.clear(false);
+ if (GlRenderer.enabled) {
+ ShadowManager.shadowMapImage.clear();
+ for (i = 0; i < 13; i++) {
+ for (chunkX = 0; chunkX < 13; chunkX++) {
+ ShadowManager.shadows[i][chunkX].outputToSprite = true;
+ }
+ }
+ }
+ if (GlRenderer.enabled) {
+ LightingManager.method2404();
+ }
+ if (GlRenderer.enabled) {
+ ClientProt.setDefaultChunksAtmosphere();
+ }
+ client.audioLoop();
+ System.gc();
+ ClientProt.ping(true);
+ SceneGraph.load(false);
+ if (!dynamicMapRegion) {
+ Static87.method1805(false);
+ ClientProt.ping(true);
+ if (GlRenderer.enabled) {
+ i = PlayerList.self.movementQueueX[0] >> 3;
+ chunkX = PlayerList.self.movementQueueZ[0] >> 3;
+ FogManager.setLightPosition(chunkX, i);
+ }
+ method743(false);
+ if (npcSpawnsFilesBuffer != null) {
+ Static158.decodeNpcFiles();
+ }
+ }
+ if (dynamicMapRegion) {
+ Static89.method1835(false);
+ ClientProt.ping(true);
+ if (GlRenderer.enabled) {
+ i = PlayerList.self.movementQueueX[0] >> 3;
+ chunkX = PlayerList.self.movementQueueZ[0] >> 3;
+ FogManager.setLightPosition(chunkX, i);
+ }
+ Static233.method4002(false);
+ }
+ client.method3768();
+ ClientProt.ping(true);
+ SceneGraph.method1169(PathFinder.collisionMaps, false);
+ if (GlRenderer.enabled) {
+ LightingManager.method2395();
+ }
+ ClientProt.ping(true);
+ i = SceneGraph.firstVisibleLevel;
+ if (i > Player.level) {
+ i = Player.level;
+ }
+ if (i < Player.level - 1) {
+ }
+ if (SceneGraph.allLevelsAreVisible()) {
+ SceneGraph.method2750(0);
+ } else {
+ SceneGraph.method2750(SceneGraph.firstVisibleLevel);
+ }
+ SceneGraph.unload();
+ if (GlRenderer.enabled && hasUnderWaterMap) {
+ SceneGraph.setUnderwater(true);
+ SceneGraph.load(true);
+ if (!dynamicMapRegion) {
+ Static87.method1805(true);
+ ClientProt.ping(true);
+ method743(true);
+ }
+ if (dynamicMapRegion) {
+ Static89.method1835(true);
+ ClientProt.ping(true);
+ Static233.method4002(true);
+ }
+ client.method3768();
+ ClientProt.ping(true);
+ SceneGraph.method1169(PathFinder.collisionMaps, true);
+ ClientProt.ping(true);
+ SceneGraph.unload();
+ SceneGraph.setUnderwater(false);
+ }
+ if (GlRenderer.enabled) {
+ for (chunkX = 0; chunkX < 13; chunkX++) {
+ for (chunkZ = 0; chunkZ < 13; chunkZ++) {
+ ShadowManager.shadows[chunkX][chunkZ].method4676(SceneGraph.tileHeights[0], chunkX * 8, chunkZ * 8);
+ }
+ }
+ }
+ for (chunkX = 0; chunkX < 104; chunkX++) {
+ for (chunkZ = 0; chunkZ < 104; chunkZ++) {
+ Protocol.spawnGroundObject(chunkZ, chunkX);
+ }
+ }
+ ScriptRunner.method2218();
+ client.audioLoop();
+ ChangeLocRequest.flush();
+ client.method3768();
+ Static231.aBoolean252 = false;
+ if (GameShell.frame != null && Protocol.socket != null && client.gameState == 25) {
+ Protocol.outboundBuffer.p1isaac(20);
+ Protocol.outboundBuffer.p4(1057001181);
+ }
+ if (!dynamicMapRegion) {
+ @Pc(815) int local815 = (centralZoneZ + 6) / 8;
+ @Pc(821) int local821 = (centralZoneZ - 6) / 8;
+ chunkX = (centralZoneX - 6) / 8;
+ chunkZ = (centralZoneX + 6) / 8;
+ for (@Pc(837) int local837 = chunkX - 1; local837 <= chunkZ + 1; local837++) {
+ for (@Pc(850) int local850 = local821 - 1; local850 <= local815 + 1; local850++) {
+ if (local837 < chunkX || local837 > chunkZ || local850 < local821 || local850 > local815) {
+ client.js5Archive5.prefetchGroup(JagString.concatenate(new JagString[]{aClass100_558, JagString.parseInt(local837), UNDERSCORE, JagString.parseInt(local850)}));
+ client.js5Archive5.prefetchGroup(JagString.concatenate(new JagString[]{aClass100_1090, JagString.parseInt(local837), UNDERSCORE, JagString.parseInt(local850)}));
+ }
+ }
+ }
+ }
+ if (client.gameState == 28) {
+ client.setGameState(10);
+ } else {
+ client.setGameState(30);
+ if (Protocol.socket != null) {
+ Protocol.outboundBuffer.p1isaac(110);
+ }
+ }
+ WorldMap.method2720();
+ client.audioLoop();
+ GameShell.resetTimer();
+ }
+
+ @OriginalMember(owner = "client!dm", name = "a", descriptor = "(BII[B)Z")
+ public static boolean method1201(@OriginalArg(1) int arg0, @OriginalArg(2) int arg1, @OriginalArg(3) byte[] arg2) {
+ @Pc(15) boolean local15 = true;
+ @Pc(17) int local17 = -1;
+ @Pc(22) Buffer local22 = new Buffer(arg2);
+ label70:
+ while (true) {
+ @Pc(26) int local26 = local22.gVarSmart();
+ if (local26 == 0) {
+ return local15;
+ }
+ @Pc(33) int local33 = 0;
+ local17 += local26;
+ @Pc(39) boolean local39 = false;
+ while (true) {
+ @Pc(78) int local78;
+ @Pc(95) LocType local95;
+ do {
+ @Pc(72) int local72;
+ @Pc(68) int local68;
+ do {
+ do {
+ do {
+ do {
+ @Pc(45) int local45;
+ while (local39) {
+ local45 = local22.gsmarts();
+ if (local45 == 0) {
+ continue label70;
+ }
+ local22.g1();
+ }
+ local45 = local22.gsmarts();
+ if (local45 == 0) {
+ continue label70;
+ }
+ local33 += local45 - 1;
+ @Pc(58) int local58 = local33 & 0x3F;
+ @Pc(64) int local64 = local33 >> 6 & 0x3F;
+ local68 = arg1 + local58;
+ local72 = arg0 + local64;
+ local78 = local22.g1() >> 2;
+ } while (local72 <= 0);
+ } while (local68 <= 0);
+ } while (local72 >= 103);
+ } while (local68 >= 103);
+ local95 = LocTypeList.get(local17);
+ } while (local78 == 22 && !Preferences.showGroundDecorations && local95.anInt4429 == 0 && local95.anInt4435 != 1 && !local95.aBoolean206);
+ local39 = true;
+ if (!local95.isReady()) {
+ local15 = false;
+ ClientProt.anInt5804++;
+ }
+ }
+ }
+ }
}
diff --git a/client/src/main/java/rt4/MiniMap.java b/client/src/main/java/rt4/MiniMap.java
index 837c4b8..68f6cdc 100644
--- a/client/src/main/java/rt4/MiniMap.java
+++ b/client/src/main/java/rt4/MiniMap.java
@@ -396,7 +396,7 @@ public class MiniMap {
method1446(arg3, Sprites.mapflags, local181, local146, arg1, arg2);
}
if (GlRenderer.enabled) {
- GlRaster.method1186(arg2 + arg3.width / 2 - 1, arg1 + -1 - -(arg3.height / 2), 3, 3, 16777215);
+ GlRaster.fillRect(arg2 + arg3.width / 2 - 1, arg1 + -1 - -(arg3.height / 2), 3, 3, 16777215);
} else {
SoftwareRaster.fillRect(arg3.width / 2 + arg2 - 1, arg3.height / 2 + -1 + arg1, 3, 3, 16777215);
}
diff --git a/client/src/main/java/rt4/MiniMenu.java b/client/src/main/java/rt4/MiniMenu.java
index 9356c80..09dbfb9 100644
--- a/client/src/main/java/rt4/MiniMenu.java
+++ b/client/src/main/java/rt4/MiniMenu.java
@@ -73,6 +73,8 @@ public class MiniMenu {
public static final JagString aClass100_1008 = JagString.parse("