mirror of
https://gitlab.com/2009scape/rt4-client.git
synced 2025-12-12 01:21:23 -07:00
325 lines
15 KiB
Java
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;
|
|
}
|
|
}
|