diff --git a/client/src/main/java/rt4/Light.java b/client/src/main/java/rt4/Light.java index 3b2cbae..695468b 100644 --- a/client/src/main/java/rt4/Light.java +++ b/client/src/main/java/rt4/Light.java @@ -67,6 +67,8 @@ public final class Light { @OriginalMember(owner = "client!gi", name = "g", descriptor = "Z") public boolean aBoolean125 = false; + public boolean matchesStaticLightOverride = false; + @OriginalMember(owner = "client!gi", name = "I", descriptor = "[F") public final float[] diffuse = new float[4]; @@ -151,7 +153,7 @@ public final class Light { } else { alpha = 2048; } - if (disableFlicker) { + if (disableFlicker || matchesStaticLightOverride) { alpha = 2048; } this.alpha = (float) (this.alphaMax + (alpha * this.alphaMin >> 11)) / 2048.0F; diff --git a/client/src/main/java/rt4/LightingManager.java b/client/src/main/java/rt4/LightingManager.java index 3120545..4455a8d 100644 --- a/client/src/main/java/rt4/LightingManager.java +++ b/client/src/main/java/rt4/LightingManager.java @@ -82,6 +82,22 @@ public class LightingManager { } } + private static final int[][] STATIC_LIGHT_OVERRIDES = { + { 8005, 3063, 3046, 2 } + }; + + public static boolean matchesStaticLightOverride(int regionId, int x, int y, int plane) { + for (int[] override : STATIC_LIGHT_OVERRIDES) { + if (override[0] == regionId + && override[1] == x + && override[2] == y + && override[3] == plane) { + return true; + } + } + return false; + } + @OriginalMember(owner = "client!jf", name = "a", descriptor = "()V") public static void method2390() { for (@Pc(1) int local1 = 0; local1 < 4; local1++) { diff --git a/client/src/main/java/rt4/SceneGraph.java b/client/src/main/java/rt4/SceneGraph.java index 62ca01c..1bee764 100644 --- a/client/src/main/java/rt4/SceneGraph.java +++ b/client/src/main/java/rt4/SceneGraph.java @@ -5266,12 +5266,16 @@ public class SceneGraph { } break label270; } while (local515 <= 0); + int regionX = (arg4 + Camera.originX) >> 6; + int regionZ = (arg3 + Camera.originZ) >> 6; + int regionId = (regionX << 8) + regionZ; for (local243 = 0; local243 < local515; local243++) { @Pc(529) Light local529 = new Light(local95); if (local529.anInt2243 == 31) { @Pc(541) LightType local541 = LightTypeList.get(local95.g2()); local529.method1762(local541.anInt2865, local541.anInt2873, local541.anInt2867, local541.anInt2872); } + local529.matchesStaticLightOverride = LightingManager.matchesStaticLightOverride(regionId, local529.x, local529.z, local529.level); local529.z += arg3 << 7; local529.x += arg4 << 7; local194 = local529.z >> 7;