Renamed ClientScript decoding

This commit is contained in:
Pazaz 2022-06-27 11:45:33 -04:00
parent 3f08a87a20
commit cf9639ea79
3 changed files with 59 additions and 61 deletions

View file

@ -7,25 +7,25 @@ import org.openrs2.deob.annotation.OriginalMember;
public final class ClientScript extends SecondaryNode {
@OriginalMember(owner = "client!qc", name = "I", descriptor = "I")
public int anInt4665;
public int intArgs;
@OriginalMember(owner = "client!qc", name = "L", descriptor = "I")
public int anInt4667;
public int intLocals;
@OriginalMember(owner = "client!qc", name = "N", descriptor = "I")
public int anInt4669;
public int stringArgs;
@OriginalMember(owner = "client!qc", name = "O", descriptor = "[I")
public int[] opcodes;
@OriginalMember(owner = "client!qc", name = "Q", descriptor = "[Lclient!sc;")
public HashTable[] aClass133Array1;
public HashTable[] switchTables;
@OriginalMember(owner = "client!qc", name = "R", descriptor = "Lclient!na;")
public JagString name;
@OriginalMember(owner = "client!qc", name = "S", descriptor = "I")
public int anInt4671;
public int stringLocals;
@OriginalMember(owner = "client!qc", name = "T", descriptor = "[Lclient!na;")
public JagString[] stringOperands;

View file

@ -10,59 +10,57 @@ public class ClientScriptList {
@OriginalMember(owner = "client!hc", name = "a", descriptor = "(IB)Lclient!qc;")
public static ClientScript get(@OriginalArg(0) int id) {
@Pc(12) ClientScript local12 = (ClientScript) scripts.get((long) id);
if (local12 != null) {
return local12;
@Pc(12) ClientScript script = (ClientScript) scripts.get(id);
if (script != null) {
return script;
}
@Pc(22) byte[] local22 = client.js5Archive12.fetchFile(id, 0);
if (local22 == null) {
@Pc(22) byte[] bytes = client.js5Archive12.fetchFile(id, 0);
if (bytes == null) {
return null;
}
local12 = new ClientScript();
@Pc(42) Buffer local42 = new Buffer(local22);
local42.offset = local42.data.length - 2;
@Pc(53) int local53 = local42.g2();
@Pc(63) int local63 = local42.data.length - local53 - 12 - 2;
local42.offset = local63;
@Pc(70) int local70 = local42.g4();
local12.anInt4667 = local42.g2();
local12.anInt4671 = local42.g2();
local12.anInt4665 = local42.g2();
local12.anInt4669 = local42.g2();
@Pc(98) int local98 = local42.g1();
@Pc(107) int local107;
@Pc(114) int local114;
if (local98 > 0) {
local12.aClass133Array1 = new HashTable[local98];
for (local107 = 0; local107 < local98; local107++) {
local114 = local42.g2();
@Pc(121) HashTable local121 = new HashTable(IntUtils.clp2(local114));
local12.aClass133Array1[local107] = local121;
while (local114-- > 0) {
@Pc(136) int local136 = local42.g4();
@Pc(140) int local140 = local42.g4();
local121.put(new IntNode(local140), (long) local136);
script = new ClientScript();
@Pc(42) Buffer buffer = new Buffer(bytes);
buffer.offset = buffer.data.length - 2;
@Pc(53) int trailerLen = buffer.g2();
@Pc(63) int trailerPos = buffer.data.length - trailerLen - 12 - 2;
buffer.offset = trailerPos;
@Pc(70) int instructions = buffer.g4();
script.intLocals = buffer.g2();
script.stringLocals = buffer.g2();
script.intArgs = buffer.g2();
script.stringArgs = buffer.g2();
@Pc(98) int switches = buffer.g1();
if (switches > 0) {
script.switchTables = new HashTable[switches];
for (int i = 0; i < switches; i++) {
int cases = buffer.g2();
@Pc(121) HashTable table = new HashTable(IntUtils.clp2(cases));
script.switchTables[i] = table;
while (cases-- > 0) {
@Pc(136) int value = buffer.g4();
@Pc(140) int offset = buffer.g4();
table.put(new IntNode(offset), value);
}
}
}
local42.offset = 0;
local12.name = local42.fastgjstr();
local12.opcodes = new int[local70];
local12.stringOperands = new JagString[local70];
local107 = 0;
local12.intOperands = new int[local70];
while (local63 > local42.offset) {
local114 = local42.g2();
if (local114 == 3) {
local12.stringOperands[local107] = local42.gjstr();
} else if (local114 >= 100 || local114 == 21 || local114 == 38 || local114 == 39) {
local12.intOperands[local107] = local42.g1();
buffer.offset = 0;
script.name = buffer.fastgjstr();
script.opcodes = new int[instructions];
script.stringOperands = new JagString[instructions];
int i = 0;
script.intOperands = new int[instructions];
while (trailerPos > buffer.offset) {
int cases = buffer.g2();
if (cases == 3) {
script.stringOperands[i] = buffer.gjstr();
} else if (cases >= 100 || cases == 21 || cases == 38 || cases == 39) {
script.intOperands[i] = buffer.g1();
} else {
local12.intOperands[local107] = local42.g4();
script.intOperands[i] = buffer.g4();
}
local12.opcodes[local107++] = local114;
script.opcodes[i++] = cases;
}
scripts.put(local12, (long) id);
return local12;
scripts.put(script, id);
return script;
}
}

View file

@ -385,9 +385,9 @@ public final class ScriptRunner {
@Pc(44) byte op = -1;
@Pc(58) int cycles;
try {
intLocals = new int[script.anInt4667];
intLocals = new int[script.intLocals];
@Pc(50) int intLocalIndex = 0;
stringLocals = new JagString[script.anInt4671];
stringLocals = new JagString[script.stringLocals];
@Pc(56) int stringLocalIndex = 0;
@Pc(77) int id;
@Pc(194) JagString value;
@ -571,16 +571,16 @@ public final class ScriptRunner {
if (opcode == 40) {
id = intOperands[pc];
@Pc(642) ClientScript local642 = ClientScriptList.get(id);
@Pc(646) int[] local646 = new int[local642.anInt4667];
@Pc(650) JagString[] local650 = new JagString[local642.anInt4671];
for (local652 = 0; local652 < local642.anInt4665; local652++) {
local646[local652] = intStack[local652 + isp - local642.anInt4665];
@Pc(646) int[] local646 = new int[local642.intLocals];
@Pc(650) JagString[] local650 = new JagString[local642.stringLocals];
for (local652 = 0; local652 < local642.intArgs; local652++) {
local646[local652] = intStack[local652 + isp - local642.intArgs];
}
for (local652 = 0; local652 < local642.anInt4669; local652++) {
local650[local652] = stringStack[local652 + ssp - local642.anInt4669];
for (local652 = 0; local652 < local642.stringArgs; local652++) {
local650[local652] = stringStack[local652 + ssp - local642.stringArgs];
}
isp -= local642.anInt4665;
ssp -= local642.anInt4669;
isp -= local642.intArgs;
ssp -= local642.stringArgs;
@Pc(705) GoSubFrame local705 = new GoSubFrame();
local705.stringLocals = stringLocals;
local705.intLocals = intLocals;
@ -667,7 +667,7 @@ public final class ScriptRunner {
continue;
}
if (opcode == 51) {
@Pc(992) HashTable local992 = script.aClass133Array1[intOperands[pc]];
@Pc(992) HashTable local992 = script.switchTables[intOperands[pc]];
isp--;
@Pc(1002) IntNode local1002 = (IntNode) local992.get((long) intStack[isp]);
if (local1002 != null) {