diff --git a/client/src/main/java/Class59.java b/client/src/main/java/Class59.java index 6041781..f88f65e 100644 --- a/client/src/main/java/Class59.java +++ b/client/src/main/java/Class59.java @@ -326,7 +326,7 @@ public final class Class59 { local827 |= Static276.aClass3_Sub2_Sub7Array8[local353].method901(local381); local838 |= local858.aBoolean278; } - if ((local858.aBoolean277 || Static204.aBoolean234) && local367 != -1 && local367 < local858.anIntArray473.length) { + if ((local858.aBoolean277 || Static204.applyTweening) && local367 != -1 && local367 < local858.anIntArray473.length) { Static262.anIntArray515[local353] = local858.anIntArray474[local374]; Static73.anIntArray183[local353] = arg0[local353].anInt5404; local979 = local858.anIntArray473[local367]; @@ -364,7 +364,7 @@ public final class Class59 { local827 |= local1042.method901(local353); local838 |= arg3.aBoolean278; } - if ((arg3.aBoolean277 || Static204.aBoolean234) && arg1 != -1 && arg3.anIntArray473.length > arg1) { + if ((arg3.aBoolean277 || Static204.applyTweening) && arg1 != -1 && arg3.anIntArray473.length > arg1) { local360 = arg3.anIntArray473[arg1]; local451 = local360 >>> 16; local360 &= 0xFFFF; @@ -395,7 +395,7 @@ public final class Class59 { local827 |= local1154.method901(local979); local838 |= arg2.aBoolean278; } - if ((arg2.aBoolean277 || Static204.aBoolean234) && arg5 != -1 && arg2.anIntArray473.length > arg5) { + if ((arg2.aBoolean277 || Static204.applyTweening) && arg5 != -1 && arg2.anIntArray473.length > arg5) { local457 = arg2.anIntArray474[arg8]; local451 = arg2.anIntArray473[arg5]; local481 = local451 >>> 16; diff --git a/client/src/main/java/GameShell.java b/client/src/main/java/GameShell.java index 47151a7..60563a8 100644 --- a/client/src/main/java/GameShell.java +++ b/client/src/main/java/GameShell.java @@ -84,6 +84,8 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene @OriginalMember(owner = "client!ba", name = "B", descriptor = "I") public static int timePerFrame = 20; + public static int FIXED_UPDATE_RATE = 20; + @OriginalMember(owner = "client!cm", name = "b", descriptor = "Ljava/lang/Thread;") public static Thread thread; @@ -150,6 +152,7 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene if (signLink.eventQueue == null) { return; } + for (@Pc(19) int i = 0; i < 50 && signLink.eventQueue.peekEvent() != null; i++) { Static231.sleep(1L); } @@ -367,7 +370,7 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene } } - public GraphicsDevice getCurrentDevice() { + public static GraphicsDevice getCurrentDevice() { GraphicsConfiguration config = frame.getGraphicsConfiguration(); GraphicsDevice myScreen = config.getDevice(); GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); @@ -467,13 +470,24 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene Static260.frameBuffer = Static131.create(canvasHeight, canvasWidth, canvas); this.mainInit(); timer = Static70.create(); - while (killTime == 0L || killTime > MonotonicClock.currentTimeMillis()) { - logicCycles = timer.sleep(minimumDelay, timePerFrame); - for (i = 0; i < logicCycles; i++) { - this.mainLoopWrapper(); + + long lastUpdateTime = 0; + long lastDrawTime = 0; + while (killTime == 0L) { + long currentTime = MonotonicClock.currentTimeMillis(); + if (GameShell.killTime > currentTime) { + break; + } + + if (currentTime - lastUpdateTime >= FIXED_UPDATE_RATE) { + this.mainLoopWrapper(); + lastUpdateTime = currentTime; + } + + if (currentTime - lastDrawTime >= timePerFrame) { + this.mainRedrawWrapper(); + lastDrawTime = currentTime; } - this.mainRedrawWrapper(); - flush(signLink, canvas); } } catch (@Pc(198) Exception ex) { Static89.report(null, ex); diff --git a/client/src/main/java/GlobalConfig.java b/client/src/main/java/GlobalConfig.java index c93c9c2..56073f7 100644 --- a/client/src/main/java/GlobalConfig.java +++ b/client/src/main/java/GlobalConfig.java @@ -40,4 +40,6 @@ public class GlobalConfig { //endregion public static boolean ANIMATED_SD_BACKGROUND = true; + + public static boolean USE_TWEENING = true; } diff --git a/client/src/main/java/Loc.java b/client/src/main/java/Loc.java index 874a72f..918687c 100644 --- a/client/src/main/java/Loc.java +++ b/client/src/main/java/Loc.java @@ -269,7 +269,7 @@ public final class Loc extends Entity { @Pc(192) int local192 = (local157 >> 1) + this.anInt1300; @Pc(201) int local201 = (local157 + 1 >> 1) + this.anInt1300; this.method1047(local192 * 128, local185 * 128); - @Pc(256) boolean local256 = !local12 && local19.aBoolean212 && (local19.anInt4426 != this.anInt1321 || (this.anInt1297 != this.anInt1322 || this.aClass144_2 != null && (this.aClass144_2.aBoolean280 || Static204.aBoolean234) && this.anInt1297 != this.anInt1304) && Static139.sceneryShadowsType >= 2); + @Pc(256) boolean local256 = !local12 && local19.aBoolean212 && (local19.anInt4426 != this.anInt1321 || (this.anInt1297 != this.anInt1322 || this.aClass144_2 != null && (this.aClass144_2.aBoolean280 || Static204.applyTweening) && this.anInt1297 != this.anInt1304) && Static139.sceneryShadowsType >= 2); if (arg0 && !local256) { return null; } diff --git a/client/src/main/java/NpcType.java b/client/src/main/java/NpcType.java index c6732a6..35825a1 100644 --- a/client/src/main/java/NpcType.java +++ b/client/src/main/java/NpcType.java @@ -358,7 +358,7 @@ public final class NpcType { local721 |= Static6.aClass3_Sub2_Sub7Array1[local235].method901(local214); local725 |= local753.aBoolean278; } - if ((local753.aBoolean277 || Static204.aBoolean234) && local207 != -1 && local753.anIntArray473.length > local207) { + if ((local753.aBoolean277 || Static204.applyTweening) && local207 != -1 && local753.anIntArray473.length > local207) { Static71.anIntArray147[local235] = local753.anIntArray474[local200]; Static214.anIntArray492[local235] = arg0[local235].anInt5404; local228 = local753.anIntArray473[local207]; @@ -401,7 +401,7 @@ public final class NpcType { local721 |= local962.method901(local235); local725 |= arg8.aBoolean278; } - if ((arg8.aBoolean277 || Static204.aBoolean234) && arg3 != -1 && arg8.anIntArray473.length > arg3) { + if ((arg8.aBoolean277 || Static204.applyTweening) && arg3 != -1 && arg8.anIntArray473.length > arg3) { local200 = arg8.anIntArray474[arg5]; local221 = arg8.anIntArray473[arg3]; local1040 = local221 >>> 16; @@ -432,7 +432,7 @@ public final class NpcType { local721 |= local1088.method901(local228); local725 |= arg6.aBoolean278; } - if ((arg6.aBoolean277 || Static204.aBoolean234) && arg1 != -1 && arg1 < arg6.anIntArray473.length) { + if ((arg6.aBoolean277 || Static204.applyTweening) && arg1 != -1 && arg1 < arg6.anIntArray473.length) { local300 = arg6.anIntArray474[arg2]; local1040 = arg6.anIntArray473[arg1]; local318 = local1040 >>> 16; diff --git a/client/src/main/java/SeqType.java b/client/src/main/java/SeqType.java index ea00785..dec2707 100644 --- a/client/src/main/java/SeqType.java +++ b/client/src/main/java/SeqType.java @@ -82,7 +82,7 @@ public final class SeqType { } @Pc(39) int local39 = arg3 & 0x3; @Pc(41) AnimFrameset local41 = null; - if ((this.aBoolean277 || Static204.aBoolean234) && arg1 != -1 && this.anIntArray473.length > arg1) { + if ((this.aBoolean277 || Static204.applyTweening) && arg1 != -1 && this.anIntArray473.length > arg1) { @Pc(69) int local69 = this.anIntArray473[arg1]; local41 = Static72.method1566(local69 >> 16); arg1 = local69 & 0xFFFF; @@ -137,7 +137,7 @@ public final class SeqType { return arg0.method4572(true, true, true); } @Pc(34) AnimFrameset local34 = null; - if ((this.aBoolean277 || Static204.aBoolean234) && arg1 != -1 && arg1 < this.anIntArray473.length) { + if ((this.aBoolean277 || Static204.applyTweening) && arg1 != -1 && arg1 < this.anIntArray473.length) { @Pc(59) int local59 = this.anIntArray473[arg1]; local34 = Static72.method1566(local59 >> 16); arg1 = local59 & 0xFFFF; @@ -154,7 +154,7 @@ public final class SeqType { local83 &= 0xFFFF; } } - if ((this.aBoolean277 || Static204.aBoolean234) && arg1 != -1 && this.anIntArray475.length > arg1) { + if ((this.aBoolean277 || Static204.applyTweening) && arg1 != -1 && this.anIntArray475.length > arg1) { local85 = this.anIntArray475[arg1]; if (local85 != 65535) { local81 = Static72.method1566(local85 >> 16); @@ -195,7 +195,7 @@ public final class SeqType { } @Pc(40) int local40 = arg3 & 0x3; @Pc(42) AnimFrameset local42 = null; - if ((this.aBoolean277 || Static204.aBoolean234) && arg0 != -1 && arg0 < this.anIntArray473.length) { + if ((this.aBoolean277 || Static204.applyTweening) && arg0 != -1 && arg0 < this.anIntArray473.length) { @Pc(66) int local66 = this.anIntArray473[arg0]; local42 = Static72.method1566(local66 >> 16); arg0 = local66 & 0xFFFF; @@ -269,7 +269,7 @@ public final class SeqType { return arg3.method4560(true, true, true); } @Pc(42) AnimFrameset local42 = null; - if ((this.aBoolean277 || Static204.aBoolean234) && arg0 != -1 && this.anIntArray473.length > arg0) { + if ((this.aBoolean277 || Static204.applyTweening) && arg0 != -1 && this.anIntArray473.length > arg0) { @Pc(65) int local65 = this.anIntArray473[arg0]; local42 = Static72.method1566(local65 >> 16); arg0 = local65 & 0xFFFF; diff --git a/client/src/main/java/Static127.java b/client/src/main/java/Static127.java index dbe9bcd..92a21b2 100644 --- a/client/src/main/java/Static127.java +++ b/client/src/main/java/Static127.java @@ -343,11 +343,11 @@ public final class Static127 { Static121.aBoolean154 = true; } if (arg0.method3111(Static124.aClass100_596)) { - if (Static204.aBoolean234) { - Static204.aBoolean234 = false; + if (Static204.applyTweening) { + Static204.applyTweening = false; Static103.method2231(null, 0, Static274.aClass100_943); } else { - Static204.aBoolean234 = true; + Static204.applyTweening = true; Static103.method2231(null, 0, Static50.aClass100_362); } } diff --git a/client/src/main/java/Static204.java b/client/src/main/java/Static204.java index 931a382..2dc25ba 100644 --- a/client/src/main/java/Static204.java +++ b/client/src/main/java/Static204.java @@ -20,7 +20,7 @@ public final class Static204 { public static LinkedList aClass69_113 = new LinkedList(); @OriginalMember(owner = "client!qi", name = "v", descriptor = "Z") - public static boolean aBoolean234 = false; + public static boolean applyTweening = GlobalConfig.USE_TWEENING; @OriginalMember(owner = "client!qi", name = "x", descriptor = "[I") public static final int[] anIntArray425 = new int[] { 0, 1, 2, 3, 4, 5, 6, 14 };