rt4-client/client/src/main/java/rt4/SpriteLoader.java
2022-05-01 12:48:59 -04:00

325 lines
15 KiB
Java

package rt4;
import org.openrs2.deob.annotation.OriginalArg;
import org.openrs2.deob.annotation.OriginalMember;
import org.openrs2.deob.annotation.Pc;
public class SpriteLoader {
@OriginalMember(owner = "client!uj", name = "x", descriptor = "[I")
public static int[] innerWidths;
@OriginalMember(owner = "client!wa", name = "z", descriptor = "[I")
public static int[] yOffsets;
@OriginalMember(owner = "client!ca", name = "Y", descriptor = "[I")
public static int[] innerHeights;
@OriginalMember(owner = "client!ah", name = "l", descriptor = "[[B")
public static byte[][] pixels;
@OriginalMember(owner = "client!wf", name = "b", descriptor = "[I")
public static int[] xOffsets;
@OriginalMember(owner = "client!vc", name = "R", descriptor = "[I")
public static int[] palette;
@OriginalMember(owner = "client!nb", name = "h", descriptor = "I")
public static int frames;
@OriginalMember(owner = "client!fb", name = "n", descriptor = "[[B")
public static byte[][] alpha;
@OriginalMember(owner = "client!mi", name = "W", descriptor = "[Z")
public static boolean[] hasAlpha;
@OriginalMember(owner = "client!jk", name = "x", descriptor = "I")
public static int width;
@OriginalMember(owner = "client!sg", name = "h", descriptor = "I")
public static int height;
@OriginalMember(owner = "client!cg", name = "a", descriptor = "(ZILclient!ve;I)[Lclient!ek;")
static SoftwareIndexedSprite[] loadSoftwareIndexedSprites(@OriginalArg(1) int arg0, @OriginalArg(2) Js5 arg1) {
return decode(arg1, 0, arg0) ? createSoftwareIndexedSprites() : null;
}
@OriginalMember(owner = "client!ta", name = "a", descriptor = "(Lclient!ve;III)Z")
public static boolean decode(@OriginalArg(0) Js5 arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2) {
@Pc(9) byte[] local9 = arg0.getFile(arg2, arg1);
if (local9 == null) {
return false;
} else {
decode(local9);
return true;
}
}
@OriginalMember(owner = "client!jg", name = "a", descriptor = "(I)[Lclient!ek;")
public static SoftwareIndexedSprite[] createSoftwareIndexedSprites() {
@Pc(2) SoftwareIndexedSprite[] sprites = new SoftwareIndexedSprite[frames];
for (@Pc(8) int local8 = 0; local8 < frames; local8++) {
sprites[local8] = new SoftwareIndexedSprite(width, height, xOffsets[local8], yOffsets[local8], innerWidths[local8], innerHeights[local8], pixels[local8], palette);
}
clear();
return sprites;
}
@OriginalMember(owner = "client!gk", name = "a", descriptor = "([BI)V")
public static void decode(@OriginalArg(0) byte[] arg0) {
@Pc(4) Buffer buffer = new Buffer(arg0);
buffer.offset = arg0.length - 2;
frames = buffer.g2();
innerHeights = new int[frames];
innerWidths = new int[frames];
xOffsets = new int[frames];
hasAlpha = new boolean[frames];
alpha = new byte[frames][];
yOffsets = new int[frames];
pixels = new byte[frames][];
buffer.offset = arg0.length - frames * 8 - 7;
width = buffer.g2();
height = buffer.g2();
@Pc(66) int paletteSize = (buffer.g1() & 0xFF) + 1;
@Pc(68) int i;
for (i = 0; i < frames; i++) {
xOffsets[i] = buffer.g2();
}
for (i = 0; i < frames; i++) {
yOffsets[i] = buffer.g2();
}
for (i = 0; i < frames; i++) {
innerWidths[i] = buffer.g2();
}
for (i = 0; i < frames; i++) {
innerHeights[i] = buffer.g2();
}
buffer.offset = arg0.length + 3 - frames * 8 - paletteSize * 3 - 7;
palette = new int[paletteSize];
for (i = 1; i < paletteSize; i++) {
palette[i] = buffer.g3();
if (palette[i] == 0) {
palette[i] = 1;
}
}
buffer.offset = 0;
for (i = 0; i < frames; i++) {
@Pc(195) int local195 = innerWidths[i];
@Pc(199) int local199 = innerHeights[i];
@Pc(203) int local203 = local195 * local199;
@Pc(206) byte[] local206 = new byte[local203];
@Pc(208) boolean local208 = false;
pixels[i] = local206;
@Pc(215) byte[] local215 = new byte[local203];
alpha[i] = local215;
@Pc(223) int local223 = buffer.g1();
@Pc(232) int local232;
if ((local223 & 0x1) == 0) {
for (local232 = 0; local232 < local203; local232++) {
local206[local232] = buffer.g1s();
}
if ((local223 & 0x2) != 0) {
for (local232 = 0; local232 < local203; local232++) {
@Pc(343) byte local343 = local215[local232] = buffer.g1s();
local208 |= local343 != -1;
}
}
} else {
local232 = 0;
label88: while (true) {
@Pc(241) int local241;
if (local232 >= local195) {
if ((local223 & 0x2) == 0) {
break;
}
local232 = 0;
while (true) {
if (local232 >= local195) {
break label88;
}
for (local241 = 0; local241 < local199; local241++) {
@Pc(291) byte local291 = local215[local195 * local241 + local232] = buffer.g1s();
local208 |= local291 != -1;
}
local232++;
}
}
for (local241 = 0; local241 < local199; local241++) {
local206[local232 + local241 * local195] = buffer.g1s();
}
local232++;
}
}
hasAlpha[i] = local208;
}
}
@OriginalMember(owner = "client!g", name = "a", descriptor = "(B)V")
public static void clear() {
innerWidths = null;
yOffsets = null;
innerHeights = null;
pixels = null;
xOffsets = null;
palette = null;
}
@OriginalMember(owner = "client!ra", name = "a", descriptor = "(IBILclient!ve;)[Lclient!qf;")
public static Sprite[] loadAlphaSprites(@OriginalArg(2) int arg0, @OriginalArg(3) Js5 arg1) {
return decode(arg1, 0, arg0) ? method3730() : null;
}
@OriginalMember(owner = "client!vj", name = "a", descriptor = "(IIILclient!ve;)[Lclient!mm;")
public static SoftwareSprite[] loadSoftwareSprites(@OriginalArg(2) int arg0, @OriginalArg(3) Js5 arg1) {
return decode(arg1, 0, arg0) ? method474() : null;
}
@OriginalMember(owner = "client!gd", name = "a", descriptor = "(ILclient!ve;II)Lclient!mm;")
public static SoftwareSprite loadSoftwareSprite(@OriginalArg(0) int arg0, @OriginalArg(1) Js5 arg1, @OriginalArg(3) int arg2) {
return decode(arg1, arg0, arg2) ? method3537() : null;
}
@OriginalMember(owner = "client!lg", name = "a", descriptor = "(Lclient!ve;BII)[Lclient!ok;")
public static IndexedSprite[] loadIndexedSprites(@OriginalArg(0) Js5 arg0, @OriginalArg(3) int arg1) {
return decode(arg0, 0, arg1) ? method4331() : null;
}
@OriginalMember(owner = "client!kd", name = "a", descriptor = "(IIILclient!ve;)[Lclient!qf;")
public static Sprite[] method2580(@OriginalArg(2) int arg0, @OriginalArg(3) Js5 arg1) {
return decode(arg1, 0, arg0) ? method870() : null;
}
@OriginalMember(owner = "client!lk", name = "a", descriptor = "(IIBLclient!ve;)Lclient!qf;")
public static Sprite loadSprites(@OriginalArg(1) int arg0, @OriginalArg(3) Js5 arg1) {
return decode(arg1, 0, arg0) ? method1764() : null;
}
@OriginalMember(owner = "client!re", name = "b", descriptor = "(I)[Lclient!qf;")
public static Sprite[] method3730() {
@Pc(14) Sprite[] local14 = new Sprite[frames];
for (@Pc(16) int local16 = 0; local16 < frames; local16++) {
@Pc(23) byte[] local23 = pixels[local16];
@Pc(31) int local31 = innerHeights[local16] * innerWidths[local16];
if (hasAlpha[local16]) {
@Pc(38) int[] local38 = new int[local31];
@Pc(42) byte[] local42 = alpha[local16];
for (@Pc(44) int local44 = 0; local44 < local31; local44++) {
local38[local44] = palette[local23[local44] & 0xFF] | (local42[local44] & 0xFF) << 24;
}
if (GlRenderer.enabled) {
local14[local16] = new GlAlphaSprite(width, height, xOffsets[local16], yOffsets[local16], innerWidths[local16], innerHeights[local16], local38);
} else {
local14[local16] = new SoftwareAlphaSprite(width, height, xOffsets[local16], yOffsets[local16], innerWidths[local16], innerHeights[local16], local38);
}
} else {
@Pc(119) int[] local119 = new int[local31];
for (@Pc(121) int local121 = 0; local121 < local31; local121++) {
local119[local121] = palette[local23[local121] & 0xFF];
}
if (GlRenderer.enabled) {
local14[local16] = new GlSprite(width, height, xOffsets[local16], yOffsets[local16], innerWidths[local16], innerHeights[local16], local119);
} else {
local14[local16] = new SoftwareSprite(width, height, xOffsets[local16], yOffsets[local16], innerWidths[local16], innerHeights[local16], local119);
}
}
}
clear();
return local14;
}
@OriginalMember(owner = "client!bd", name = "a", descriptor = "(Z)[Lclient!mm;")
public static SoftwareSprite[] method474() {
@Pc(4) SoftwareSprite[] local4 = new SoftwareSprite[frames];
for (@Pc(12) int local12 = 0; local12 < frames; local12++) {
@Pc(27) int local27 = innerHeights[local12] * innerWidths[local12];
@Pc(31) byte[] local31 = pixels[local12];
@Pc(34) int[] local34 = new int[local27];
for (@Pc(36) int local36 = 0; local36 < local27; local36++) {
local34[local36] = palette[local31[local36] & 0xFF];
}
local4[local12] = new SoftwareSprite(width, height, xOffsets[local12], yOffsets[local12], innerWidths[local12], innerHeights[local12], local34);
}
clear();
return local4;
}
@OriginalMember(owner = "client!pl", name = "a", descriptor = "(I)Lclient!mm;")
public static SoftwareSprite method3537() {
@Pc(13) int local13 = innerWidths[0] * innerHeights[0];
@Pc(17) byte[] local17 = pixels[0];
@Pc(20) int[] local20 = new int[local13];
for (@Pc(22) int local22 = 0; local22 < local13; local22++) {
local20[local22] = palette[local17[local22] & 0xFF];
}
@Pc(57) SoftwareSprite local57 = new SoftwareSprite(width, height, xOffsets[0], yOffsets[0], innerWidths[0], innerHeights[0], local20);
clear();
return local57;
}
@OriginalMember(owner = "client!ui", name = "h", descriptor = "(I)[Lclient!ok;")
public static IndexedSprite[] method4331() {
@Pc(8) IndexedSprite[] local8 = new IndexedSprite[frames];
for (@Pc(10) int local10 = 0; local10 < frames; local10++) {
if (GlRenderer.enabled) {
local8[local10] = new GlIndexedSprite(width, height, xOffsets[local10], yOffsets[local10], innerWidths[local10], innerHeights[local10], pixels[local10], palette);
} else {
local8[local10] = new SoftwareIndexedSprite(width, height, xOffsets[local10], yOffsets[local10], innerWidths[local10], innerHeights[local10], pixels[local10], palette);
}
}
clear();
return local8;
}
@OriginalMember(owner = "client!cj", name = "a", descriptor = "(I)[Lclient!qf;")
public static Sprite[] method870() {
@Pc(6) Sprite[] local6 = new Sprite[frames];
for (@Pc(15) int local15 = 0; local15 < frames; local15++) {
@Pc(30) int local30 = innerWidths[local15] * innerHeights[local15];
@Pc(34) byte[] local34 = pixels[local15];
@Pc(37) int[] local37 = new int[local30];
for (@Pc(39) int local39 = 0; local39 < local30; local39++) {
local37[local39] = palette[local34[local39] & 0xFF];
}
if (GlRenderer.enabled) {
local6[local15] = new GlSprite(width, height, xOffsets[local15], yOffsets[local15], innerWidths[local15], innerHeights[local15], local37);
} else {
local6[local15] = new SoftwareSprite(width, height, xOffsets[local15], yOffsets[local15], innerWidths[local15], innerHeights[local15], local37);
}
}
clear();
return local6;
}
@OriginalMember(owner = "client!gi", name = "b", descriptor = "(I)Lclient!qf;")
public static Sprite method1764() {
@Pc(9) byte[] local9 = pixels[0];
@Pc(17) int local17 = innerWidths[0] * innerHeights[0];
@Pc(20) int[] local20 = new int[local17];
for (@Pc(28) int local28 = 0; local28 < local17; local28++) {
local20[local28] = palette[local9[local28] & 0xFF];
}
@Pc(69) Sprite local69;
if (GlRenderer.enabled) {
local69 = new GlSprite(width, height, xOffsets[0], yOffsets[0], innerWidths[0], innerHeights[0], local20);
} else {
local69 = new SoftwareSprite(width, height, xOffsets[0], yOffsets[0], innerWidths[0], innerHeights[0], local20);
}
clear();
return local69;
}
@OriginalMember(owner = "client!uj", name = "a", descriptor = "(BLclient!ve;I)Z")
public static boolean decode(@OriginalArg(1) Js5 arg0, @OriginalArg(2) int arg1) {
@Pc(13) byte[] local13 = arg0.method4500(arg1);
if (local13 == null) {
return false;
} else {
decode(local13);
return true;
}
}
@OriginalMember(owner = "client!ml", name = "a", descriptor = "(BILclient!ve;)[Lclient!ek;")
public static SoftwareIndexedSprite[] method3088(@OriginalArg(1) int arg0, @OriginalArg(2) Js5 arg1) {
return decode(arg1, arg0) ? createSoftwareIndexedSprites() : null;
}
@OriginalMember(owner = "client!da", name = "a", descriptor = "(ILclient!ve;Z)Lclient!ok;")
public static IndexedSprite loadIndexedSpriteAutoDetect(@OriginalArg(0) int arg0, @OriginalArg(1) Js5 arg1) {
return decode(arg1, arg0) ? Static276.method4614() : null;
}
@OriginalMember(owner = "client!kc", name = "a", descriptor = "(ILclient!ve;I)Lclient!qf;")
public static Sprite loadSpriteAutoDetect(@OriginalArg(1) Js5 arg0, @OriginalArg(2) int arg1) {
return decode(arg0, arg1) ? method1764() : null;
}
}