3 configurable graphics fixes in ClientSettings (#558)

This commit is contained in:
Pazaz
2023-01-28 15:39:12 -05:00
committed by GitHub
parent afdf369104
commit e517be1bfb
4 changed files with 126 additions and 33 deletions
@@ -54,4 +54,15 @@ public class ClientSettings {
public static final BigInteger RSA_MODULUS = new BigInteger("91553247461173033466542043374346300088148707506479543786501537350363031301992107112953015516557748875487935404852620239974482067336878286174236183516364787082711186740254168914127361643305190640280157664988536979163450791820893999053469529344247707567448479470137716627440246788713008490213212272520901741443");
public static final BigInteger RSA_EXPONENT = new BigInteger("65537");
// smooths out lines and sprites on the minimap
public static final boolean BILINEAR_MINIMAP_FILTERING = false;
// fixes overlapping lines drawn on transparent objects by post-incrementing the offset
// note: there's 2 other instances that haven't been updated in Texture.java (misnamed) because rarely used like this
public static final boolean FIX_TRANSPARENCY_OVERFLOW = false;
// render the game to 512px instead of 511px (black line on right side)
public static final boolean FULL_512PX_VIEWPORT = false;
}
@@ -16,7 +16,11 @@ public class DrawingArea extends NodeSub {
topY = 0;
bottomX = width;
bottomY = height;
centerX = bottomX - 1;
if (ClientSettings.FULL_512PX_VIEWPORT) {
centerX = bottomX;
} else {
centerX = bottomX - 1;
}
centerY = bottomX / 2;
}
@@ -37,7 +41,11 @@ public class DrawingArea extends NodeSub {
topY = l;
bottomX = k;
bottomY = i;
centerX = bottomX - 1;
if (ClientSettings.FULL_512PX_VIEWPORT) {
centerX = bottomX;
} else {
centerX = bottomX - 1;
}
centerY = bottomX / 2;
anInt1387 = bottomY / 2;
}
+24 -1
View File
@@ -366,7 +366,30 @@ public final class Sprite extends DrawingArea {
int k4 = j3 + i3 * i4;
int l4 = k3 - l2 * i4;
for (k1 = -ai[j1]; k1 < 0; k1++) {
DrawingArea.pixels[j4++] = pixels[(k4 >> 16) + (l4 >> 16) * width];
if (ClientSettings.BILINEAR_MINIMAP_FILTERING) {
int x1 = k4 >> 16;
int y1 = l4 >> 16;
int x2 = x1 + 1;
int y2 = y1 + 1;
int sampleColor1 = pixels[x1 + y1 * width];
int sampleColor2 = pixels[x2 + y1 * width];
int sampleColor3 = pixels[x1 + y2 * width];
int sampleColor4 = pixels[x2 + y2 * width];
int x1Distance = (k4 >> 8) - (x1 << 8);
int y1Distance = (l4 >> 8) - (y1 << 8);
int x2Distance = (x2 << 8) - (k4 >> 8);
int y2Distance = (y2 << 8) - (l4 >> 8);
int sampleAlpha1 = x2Distance * y2Distance;
int sampleAlpha2 = x1Distance * y2Distance;
int sampleAlpha3 = x2Distance * y1Distance;
int sampleAlpha4 = x1Distance * y1Distance;
int red = (sampleColor1 >> 16 & 0xff) * sampleAlpha1 + (sampleColor2 >> 16 & 0xff) * sampleAlpha2 + (sampleColor3 >> 16 & 0xff) * sampleAlpha3 + (sampleColor4 >> 16 & 0xff) * sampleAlpha4 & 0xff0000;
int green = (sampleColor1 >> 8 & 0xff) * sampleAlpha1 + (sampleColor2 >> 8 & 0xff) * sampleAlpha2 + (sampleColor3 >> 8 & 0xff) * sampleAlpha3 + (sampleColor4 >> 8 & 0xff) * sampleAlpha4 >> 8 & 0xff00;
int blue = (sampleColor1 & 0xff) * sampleAlpha1 + (sampleColor2 & 0xff) * sampleAlpha2 + (sampleColor3 & 0xff) * sampleAlpha3 + (sampleColor4 & 0xff) * sampleAlpha4 >> 16;
DrawingArea.pixels[j4++] = red | green | blue;
} else {
DrawingArea.pixels[j4++] = pixels[(k4 >> 16) + (l4 >> 16) * width];
}
k4 += i3;
l4 -= l2;
}
+81 -30
View File
@@ -730,22 +730,47 @@ final class Texture extends DrawingArea {
} else {
int j2 = anInt1465;
int l2 = 256 - anInt1465;
while (--k >= 0) {
j = anIntArray1482[j1 >> 8];
j1 += l1;
j = ((j & 0xff00ff) * l2 >> 8 & 0xff00ff) + ((j & 0xff00) * l2 >> 8 & 0xff00);
ai[i++] = j + ((ai[i] & 0xff00ff) * j2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j2 >> 8 & 0xff00);
ai[i++] = j + ((ai[i] & 0xff00ff) * j2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j2 >> 8 & 0xff00);
ai[i++] = j + ((ai[i] & 0xff00ff) * j2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j2 >> 8 & 0xff00);
ai[i++] = j + ((ai[i] & 0xff00ff) * j2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j2 >> 8 & 0xff00);
}
k = i1 - l & 3;
if (k > 0) {
j = anIntArray1482[j1 >> 8];
j = ((j & 0xff00ff) * l2 >> 8 & 0xff00ff) + ((j & 0xff00) * l2 >> 8 & 0xff00);
do {
if (ClientSettings.FIX_TRANSPARENCY_OVERFLOW) {
while (--k >= 0) {
j = anIntArray1482[j1 >> 8];
j1 += l1;
j = ((j & 0xff00ff) * l2 >> 8 & 0xff00ff) + ((j & 0xff00) * l2 >> 8 & 0xff00);
ai[i] = j + ((ai[i] & 0xff00ff) * j2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j2 >> 8 & 0xff00);
i++;
ai[i] = j + ((ai[i] & 0xff00ff) * j2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j2 >> 8 & 0xff00);
i++;
ai[i] = j + ((ai[i] & 0xff00ff) * j2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j2 >> 8 & 0xff00);
i++;
ai[i] = j + ((ai[i] & 0xff00ff) * j2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j2 >> 8 & 0xff00);
i++;
}
k = i1 - l & 3;
if (k > 0) {
j = anIntArray1482[j1 >> 8];
j = ((j & 0xff00ff) * l2 >> 8 & 0xff00ff) + ((j & 0xff00) * l2 >> 8 & 0xff00);
do {
ai[i] = j + ((ai[i] & 0xff00ff) * j2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j2 >> 8 & 0xff00);
i++;
} while (--k > 0);
}
} else {
while (--k >= 0) {
j = anIntArray1482[j1 >> 8];
j1 += l1;
j = ((j & 0xff00ff) * l2 >> 8 & 0xff00ff) + ((j & 0xff00) * l2 >> 8 & 0xff00);
ai[i++] = j + ((ai[i] & 0xff00ff) * j2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j2 >> 8 & 0xff00);
} while (--k > 0);
ai[i++] = j + ((ai[i] & 0xff00ff) * j2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j2 >> 8 & 0xff00);
ai[i++] = j + ((ai[i] & 0xff00ff) * j2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j2 >> 8 & 0xff00);
ai[i++] = j + ((ai[i] & 0xff00ff) * j2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j2 >> 8 & 0xff00);
}
k = i1 - l & 3;
if (k > 0) {
j = anIntArray1482[j1 >> 8];
j = ((j & 0xff00ff) * l2 >> 8 & 0xff00ff) + ((j & 0xff00) * l2 >> 8 & 0xff00);
do {
ai[i++] = j + ((ai[i] & 0xff00ff) * j2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j2 >> 8 & 0xff00);
} while (--k > 0);
}
}
}
return;
@@ -777,12 +802,22 @@ final class Texture extends DrawingArea {
}
int k2 = anInt1465;
int i3 = 256 - anInt1465;
do {
j = anIntArray1482[j1 >> 8];
j1 += i2;
j = ((j & 0xff00ff) * i3 >> 8 & 0xff00ff) + ((j & 0xff00) * i3 >> 8 & 0xff00);
ai[i++] = j + ((ai[i] & 0xff00ff) * k2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * k2 >> 8 & 0xff00);
} while (--k > 0);
if (ClientSettings.FIX_TRANSPARENCY_OVERFLOW) {
do {
j = anIntArray1482[j1 >> 8];
j1 += i2;
j = ((j & 0xff00ff) * i3 >> 8 & 0xff00ff) + ((j & 0xff00) * i3 >> 8 & 0xff00);
ai[i] = j + ((ai[i] & 0xff00ff) * k2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * k2 >> 8 & 0xff00);
i++;
} while (--k > 0);
} else {
do {
j = anIntArray1482[j1 >> 8];
j1 += i2;
j = ((j & 0xff00ff) * i3 >> 8 & 0xff00ff) + ((j & 0xff00) * i3 >> 8 & 0xff00);
ai[i++] = j + ((ai[i] & 0xff00ff) * k2 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * k2 >> 8 & 0xff00);
} while (--k > 0);
}
}
public static void method376(int i, int j, int k, int l, int i1, int j1, int k1) {
@@ -1125,16 +1160,32 @@ final class Texture extends DrawingArea {
int j1 = anInt1465;
int k1 = 256 - anInt1465;
j = ((j & 0xff00ff) * k1 >> 8 & 0xff00ff) + ((j & 0xff00) * k1 >> 8 & 0xff00);
while (--k >= 0) {
ai[i++] = j + ((ai[i] & 0xff00ff) * j1 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j1 >> 8 & 0xff00);
ai[i++] = j + ((ai[i] & 0xff00ff) * j1 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j1 >> 8 & 0xff00);
ai[i++] = j + ((ai[i] & 0xff00ff) * j1 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j1 >> 8 & 0xff00);
ai[i++] = j + ((ai[i] & 0xff00ff) * j1 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j1 >> 8 & 0xff00);
if (ClientSettings.FIX_TRANSPARENCY_OVERFLOW) {
while (--k >= 0) {
ai[i] = j + ((ai[i] & 0xff00ff) * j1 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j1 >> 8 & 0xff00);
i++;
ai[i] = j + ((ai[i] & 0xff00ff) * j1 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j1 >> 8 & 0xff00);
i++;
ai[i] = j + ((ai[i] & 0xff00ff) * j1 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j1 >> 8 & 0xff00);
i++;
ai[i] = j + ((ai[i] & 0xff00ff) * j1 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j1 >> 8 & 0xff00);
i++;
}
for (k = i1 - l & 3; --k >= 0;) {
ai[i] = j + ((ai[i] & 0xff00ff) * j1 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j1 >> 8 & 0xff00);
i++;
}
} else {
while (--k >= 0) {
ai[i++] = j + ((ai[i] & 0xff00ff) * j1 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j1 >> 8 & 0xff00);
ai[i++] = j + ((ai[i] & 0xff00ff) * j1 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j1 >> 8 & 0xff00);
ai[i++] = j + ((ai[i] & 0xff00ff) * j1 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j1 >> 8 & 0xff00);
ai[i++] = j + ((ai[i] & 0xff00ff) * j1 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j1 >> 8 & 0xff00);
}
for (k = i1 - l & 3; --k >= 0;) {
ai[i++] = j + ((ai[i] & 0xff00ff) * j1 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j1 >> 8 & 0xff00);
}
}
for (k = i1 - l & 3; --k >= 0;) {
ai[i++] = j + ((ai[i] & 0xff00ff) * j1 >> 8 & 0xff00ff) + ((ai[i] & 0xff00) * j1 >> 8 & 0xff00);
}
}
public static void method378(int i, int j, int k, int l, int i1, int j1, int k1, int l1, int i2, int j2, int k2, int l2, int i3, int j3, int k3, int l3, int i4, int j4, int k4) {