@@ -26,13 +26,15 @@ grammar rs2asm;
|
|||||||
|
|
||||||
prog: (header NEWLINE)* (line NEWLINE)+ ;
|
prog: (header NEWLINE)* (line NEWLINE)+ ;
|
||||||
|
|
||||||
header: int_stack_count | string_stack_count | int_var_count | string_var_count ;
|
header: id | int_stack_count | string_stack_count | int_var_count | string_var_count ;
|
||||||
|
|
||||||
|
id: '.id ' id_value ;
|
||||||
int_stack_count: '.int_stack_count ' int_stack_value ;
|
int_stack_count: '.int_stack_count ' int_stack_value ;
|
||||||
string_stack_count: '.string_stack_count ' string_stack_value ;
|
string_stack_count: '.string_stack_count ' string_stack_value ;
|
||||||
int_var_count: '.int_var_count ' int_var_value ;
|
int_var_count: '.int_var_count ' int_var_value ;
|
||||||
string_var_count: '.string_var_count ' string_var_value ;
|
string_var_count: '.string_var_count ' string_var_value ;
|
||||||
|
|
||||||
|
id_value: INT ;
|
||||||
int_stack_value: INT ;
|
int_stack_value: INT ;
|
||||||
string_stack_value: INT ;
|
string_stack_value: INT ;
|
||||||
int_var_value: INT ;
|
int_var_value: INT ;
|
||||||
@@ -59,5 +61,6 @@ NEWLINE: '\n'+ ;
|
|||||||
INT: '-'? [0-9]+ ;
|
INT: '-'? [0-9]+ ;
|
||||||
QSTRING: '"' (~('"' | '\\' | '\r' | '\n') | '\\' ('"' | '\\'))* '"' ;
|
QSTRING: '"' (~('"' | '\\' | '\r' | '\n') | '\\' ('"' | '\\'))* '"' ;
|
||||||
INSTRUCTION: [a-z0-9_]+ ;
|
INSTRUCTION: [a-z0-9_]+ ;
|
||||||
|
COMMENT: ';' ~( '\r' | '\n' )* -> channel(HIDDEN) ;
|
||||||
|
|
||||||
WS: (' ' | '\t')+ -> channel(HIDDEN) ;
|
WS: (' ' | '\t')+ -> channel(HIDDEN) ;
|
||||||
@@ -30,14 +30,11 @@ import static net.runelite.cache.script.Opcodes.*;
|
|||||||
|
|
||||||
public class Instructions
|
public class Instructions
|
||||||
{
|
{
|
||||||
private static final Map<Integer, Instruction> instructions = new HashMap<>();
|
private final Map<Integer, Instruction> instructions = new HashMap<>();
|
||||||
private static final Map<String, Instruction> instructionsByName = new HashMap<>();
|
private final Map<String, Instruction> instructionsByName = new HashMap<>();
|
||||||
|
|
||||||
public static void init()
|
public void init()
|
||||||
{
|
{
|
||||||
instructions.clear();
|
|
||||||
instructionsByName.clear();
|
|
||||||
|
|
||||||
add(LOAD_INT, "load_int", 0, 1);
|
add(LOAD_INT, "load_int", 0, 1);
|
||||||
add(GET_SETTINGS, "get_settings", 0, 1);
|
add(GET_SETTINGS, "get_settings", 0, 1);
|
||||||
add(PUT_SETTINGS, "put_settings", 0, 1);
|
add(PUT_SETTINGS, "put_settings", 0, 1);
|
||||||
@@ -466,16 +463,16 @@ public class Instructions
|
|||||||
add(5504, 2, 0);
|
add(5504, 2, 0);
|
||||||
add(5505, 0, 1);
|
add(5505, 0, 1);
|
||||||
add(GET_MAPANGLE, "get_mapangle", 0, 1);
|
add(GET_MAPANGLE, "get_mapangle", 0, 1);
|
||||||
add(5530, 1, 0);
|
add(SET_CAMERA_FOCAL_POINT_HEIGHT, "set_camera_focal_point_height", 1, 0);
|
||||||
add(5531, 0, 1);
|
add(GET_CAMERA_FOCAL_POINT_HEIGHT, "get_camera_focal_point_height", 0, 1);
|
||||||
// 5600-5700
|
// 5600-5700
|
||||||
add(CANCEL_LOGIN, "cancel_login", 0, 0);
|
add(CANCEL_LOGIN, "cancel_login", 0, 0);
|
||||||
// 5700-6300
|
// 5700-6300
|
||||||
add(6200, 2, 0);
|
add(6200, 2, 0);
|
||||||
add(6201, 2, 0);
|
add(SET_ZOOM_DISTANCE, "set_zoom_distance", 2, 0);
|
||||||
add(6202, 4, 0);
|
add(6202, 4, 0);
|
||||||
add(GET_VIEWPORT_SIZE, "get_viewport_size", 0, 2);
|
add(GET_VIEWPORT_SIZE, "get_viewport_size", 0, 2);
|
||||||
add(6204, 0, 2);
|
add(GET_ZOOM_DISTANCE, "get_zoom_distance", 0, 2);
|
||||||
add(6205, 0, 2);
|
add(6205, 0, 2);
|
||||||
// 6300-6600
|
// 6300-6600
|
||||||
add(LOAD_WORLDS, "load_worlds", 0, 1);
|
add(LOAD_WORLDS, "load_worlds", 0, 1);
|
||||||
@@ -536,7 +533,7 @@ public class Instructions
|
|||||||
add(6699, 0, 1);
|
add(6699, 0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void add(int opcode, String name, int ipops, int ipushes, int spops, int spushes)
|
protected void add(int opcode, String name, int ipops, int ipushes, int spops, int spushes)
|
||||||
{
|
{
|
||||||
Instruction i = new Instruction(opcode);
|
Instruction i = new Instruction(opcode);
|
||||||
i.setName(name);
|
i.setName(name);
|
||||||
@@ -555,27 +552,27 @@ public class Instructions
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void add(int opcode, int ipops, int ipushes)
|
protected void add(int opcode, int ipops, int ipushes)
|
||||||
{
|
{
|
||||||
add(opcode, null, ipops, ipushes, 0, 0);
|
add(opcode, null, ipops, ipushes, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void add(int opcode, int ipops, int ipushes, int spops, int spushes)
|
protected void add(int opcode, int ipops, int ipushes, int spops, int spushes)
|
||||||
{
|
{
|
||||||
add(opcode, null, ipops, ipushes, spops, spushes);
|
add(opcode, null, ipops, ipushes, spops, spushes);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void add(int opcode, String name, int ipops, int ipushes)
|
protected void add(int opcode, String name, int ipops, int ipushes)
|
||||||
{
|
{
|
||||||
add(opcode, name, ipops, ipushes, 0, 0);
|
add(opcode, name, ipops, ipushes, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Instruction find(int opcode)
|
public Instruction find(int opcode)
|
||||||
{
|
{
|
||||||
return instructions.get(opcode);
|
return instructions.get(opcode);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Instruction find(String name)
|
public Instruction find(String name)
|
||||||
{
|
{
|
||||||
return instructionsByName.get(name);
|
return instructionsByName.get(name);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -361,8 +361,12 @@ public class Opcodes
|
|||||||
public static final int GET_SCREENTYPE = 5308;
|
public static final int GET_SCREENTYPE = 5308;
|
||||||
public static final int SET_SCREENTYPE = 5309;
|
public static final int SET_SCREENTYPE = 5309;
|
||||||
public static final int GET_MAPANGLE = 5506;
|
public static final int GET_MAPANGLE = 5506;
|
||||||
|
public static final int SET_CAMERA_FOCAL_POINT_HEIGHT = 5530;
|
||||||
|
public static final int GET_CAMERA_FOCAL_POINT_HEIGHT = 5531;
|
||||||
public static final int CANCEL_LOGIN = 5630;
|
public static final int CANCEL_LOGIN = 5630;
|
||||||
|
public static final int SET_ZOOM_DISTANCE = 6201;
|
||||||
public static final int GET_VIEWPORT_SIZE = 6203;
|
public static final int GET_VIEWPORT_SIZE = 6203;
|
||||||
|
public static final int GET_ZOOM_DISTANCE = 6204;
|
||||||
public static final int LOAD_WORLDS = 6500;
|
public static final int LOAD_WORLDS = 6500;
|
||||||
public static final int GET_FIRST_WORLD = 6501;
|
public static final int GET_FIRST_WORLD = 6501;
|
||||||
public static final int GET_NEXT_WORLD = 6502;
|
public static final int GET_NEXT_WORLD = 6502;
|
||||||
|
|||||||
@@ -35,10 +35,15 @@ import org.antlr.v4.runtime.tree.ParseTreeWalker;
|
|||||||
|
|
||||||
public class Assembler
|
public class Assembler
|
||||||
{
|
{
|
||||||
|
private final Instructions instructions;
|
||||||
|
|
||||||
|
public Assembler(Instructions instructions)
|
||||||
|
{
|
||||||
|
this.instructions = instructions;
|
||||||
|
}
|
||||||
|
|
||||||
public ScriptDefinition assemble(InputStream in) throws IOException
|
public ScriptDefinition assemble(InputStream in) throws IOException
|
||||||
{
|
{
|
||||||
Instructions.init();
|
|
||||||
|
|
||||||
// Get our lexer
|
// Get our lexer
|
||||||
rs2asmLexer lexer = new rs2asmLexer(new ANTLRInputStream(in));
|
rs2asmLexer lexer = new rs2asmLexer(new ANTLRInputStream(in));
|
||||||
|
|
||||||
@@ -66,7 +71,7 @@ public class Assembler
|
|||||||
LabelVisitor labelVisitor = new LabelVisitor();
|
LabelVisitor labelVisitor = new LabelVisitor();
|
||||||
walker.walk(labelVisitor, progContext);
|
walker.walk(labelVisitor, progContext);
|
||||||
|
|
||||||
ScriptWriter listener = new ScriptWriter(labelVisitor);
|
ScriptWriter listener = new ScriptWriter(instructions, labelVisitor);
|
||||||
walker.walk(listener, progContext);
|
walker.walk(listener, progContext);
|
||||||
|
|
||||||
return listener.buildScript();
|
return listener.buildScript();
|
||||||
|
|||||||
@@ -39,8 +39,10 @@ public class ScriptWriter extends rs2asmBaseListener
|
|||||||
{
|
{
|
||||||
private static final Logger logger = LoggerFactory.getLogger(ScriptWriter.class);
|
private static final Logger logger = LoggerFactory.getLogger(ScriptWriter.class);
|
||||||
|
|
||||||
|
private final Instructions instructions;
|
||||||
private final LabelVisitor labelVisitor;
|
private final LabelVisitor labelVisitor;
|
||||||
|
|
||||||
|
private int id;
|
||||||
private int pos;
|
private int pos;
|
||||||
private int intStackCount;
|
private int intStackCount;
|
||||||
private int stringStackCount;
|
private int stringStackCount;
|
||||||
@@ -51,11 +53,19 @@ public class ScriptWriter extends rs2asmBaseListener
|
|||||||
private List<String> sops = new ArrayList<>();
|
private List<String> sops = new ArrayList<>();
|
||||||
private List<LookupSwitch> switches = new ArrayList<>();
|
private List<LookupSwitch> switches = new ArrayList<>();
|
||||||
|
|
||||||
public ScriptWriter(LabelVisitor labelVisitor)
|
public ScriptWriter(Instructions instructions, LabelVisitor labelVisitor)
|
||||||
{
|
{
|
||||||
|
this.instructions = instructions;
|
||||||
this.labelVisitor = labelVisitor;
|
this.labelVisitor = labelVisitor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void enterId_value(rs2asmParser.Id_valueContext ctx)
|
||||||
|
{
|
||||||
|
int value = Integer.parseInt(ctx.getText());
|
||||||
|
id = value;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void enterInt_stack_value(rs2asmParser.Int_stack_valueContext ctx)
|
public void enterInt_stack_value(rs2asmParser.Int_stack_valueContext ctx)
|
||||||
{
|
{
|
||||||
@@ -94,7 +104,7 @@ public class ScriptWriter extends rs2asmBaseListener
|
|||||||
public void enterName_string(rs2asmParser.Name_stringContext ctx)
|
public void enterName_string(rs2asmParser.Name_stringContext ctx)
|
||||||
{
|
{
|
||||||
String text = ctx.getText();
|
String text = ctx.getText();
|
||||||
Instruction i = Instructions.find(text);
|
Instruction i = instructions.find(text);
|
||||||
if (i == null)
|
if (i == null)
|
||||||
{
|
{
|
||||||
logger.warn("Unknown instruction {}", text);
|
logger.warn("Unknown instruction {}", text);
|
||||||
@@ -207,6 +217,7 @@ public class ScriptWriter extends rs2asmBaseListener
|
|||||||
public ScriptDefinition buildScript()
|
public ScriptDefinition buildScript()
|
||||||
{
|
{
|
||||||
ScriptDefinition script = new ScriptDefinition();
|
ScriptDefinition script = new ScriptDefinition();
|
||||||
|
script.setId(id);
|
||||||
script.setIntStackCount(intStackCount);
|
script.setIntStackCount(intStackCount);
|
||||||
script.setStringStackCount(stringStackCount);
|
script.setStringStackCount(stringStackCount);
|
||||||
script.setLocalIntCount(localIntCount);
|
script.setLocalIntCount(localIntCount);
|
||||||
|
|||||||
@@ -38,6 +38,13 @@ public class Disassembler
|
|||||||
{
|
{
|
||||||
private static final Logger logger = LoggerFactory.getLogger(Disassembler.class);
|
private static final Logger logger = LoggerFactory.getLogger(Disassembler.class);
|
||||||
|
|
||||||
|
private final Instructions instructions = new Instructions();
|
||||||
|
|
||||||
|
public Disassembler()
|
||||||
|
{
|
||||||
|
instructions.init();
|
||||||
|
}
|
||||||
|
|
||||||
private boolean isJump(int opcode)
|
private boolean isJump(int opcode)
|
||||||
{
|
{
|
||||||
switch (opcode)
|
switch (opcode)
|
||||||
@@ -120,7 +127,7 @@ public class Disassembler
|
|||||||
int iop = iops[i];
|
int iop = iops[i];
|
||||||
String sop = sops[i];
|
String sop = sops[i];
|
||||||
|
|
||||||
Instruction ins = Instructions.find(opcode);
|
Instruction ins = this.instructions.find(opcode);
|
||||||
if (ins == null)
|
if (ins == null)
|
||||||
{
|
{
|
||||||
logger.warn("Unknown instruction {} in script {}", opcode, script.getId());
|
logger.warn("Unknown instruction {} in script {}", opcode, script.getId());
|
||||||
|
|||||||
@@ -1,98 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter;
|
|
||||||
|
|
||||||
import net.runelite.cache.definitions.ScriptDefinition;
|
|
||||||
|
|
||||||
public class Frame
|
|
||||||
{
|
|
||||||
private final Interpreter interpreter;
|
|
||||||
private final ScriptDefinition script;
|
|
||||||
private final Stack intStack;
|
|
||||||
private final Stack stringStack;
|
|
||||||
private final Variables intVariables;
|
|
||||||
private final Variables stringVariables;
|
|
||||||
|
|
||||||
private boolean running = true;
|
|
||||||
int pc;
|
|
||||||
|
|
||||||
public Frame(Interpreter interpreter, ScriptDefinition script)
|
|
||||||
{
|
|
||||||
this.interpreter = interpreter;
|
|
||||||
this.script = script;
|
|
||||||
this.intStack = new Stack();
|
|
||||||
this.stringStack = new Stack();
|
|
||||||
this.intVariables = new Variables(script.getLocalIntCount());
|
|
||||||
this.stringVariables = new Variables(script.getLocalStringCount());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Frame(Interpreter interpreter, Frame other)
|
|
||||||
{
|
|
||||||
this.interpreter = interpreter;
|
|
||||||
this.script = other.script;
|
|
||||||
this.intStack = new Stack(other.intStack);
|
|
||||||
this.stringStack = new Stack(other.stringStack);
|
|
||||||
this.intVariables = new Variables(other.intVariables);
|
|
||||||
this.stringVariables = new Variables(other.stringVariables);
|
|
||||||
this.pc = other.pc;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Stack getIntStack()
|
|
||||||
{
|
|
||||||
return intStack;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Stack getStringStack()
|
|
||||||
{
|
|
||||||
return stringStack;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ScriptDefinition getScript()
|
|
||||||
{
|
|
||||||
return script;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Frame dup()
|
|
||||||
{
|
|
||||||
Frame frame = new Frame(interpreter, this);
|
|
||||||
interpreter.addFrame(this);
|
|
||||||
return frame;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isRunning()
|
|
||||||
{
|
|
||||||
return running;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void stop()
|
|
||||||
{
|
|
||||||
running = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void jump(int offset)
|
|
||||||
{
|
|
||||||
pc += offset + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter;
|
|
||||||
|
|
||||||
import net.runelite.cache.script.Instruction;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
public class GenericInstructionHandler extends InstructionHandler
|
|
||||||
{
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(GenericInstructionHandler.class);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void execute(Frame frame, InstructionContext ctx)
|
|
||||||
{
|
|
||||||
Instruction i = ctx.getScriptInstruction().getInstruction();
|
|
||||||
Stack istack = frame.getIntStack();
|
|
||||||
Stack sstack = frame.getStringStack();
|
|
||||||
|
|
||||||
int ipops = i.getIntStackPops();
|
|
||||||
for (int j = 0; j < ipops; ++j)
|
|
||||||
{
|
|
||||||
StackContext value = istack.pop();
|
|
||||||
ctx.popsInt(value);
|
|
||||||
value.poppedBy(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
int spops = i.getStringStackPops();
|
|
||||||
for (int j = 0; j < spops; ++j)
|
|
||||||
{
|
|
||||||
StackContext value = sstack.pop();
|
|
||||||
ctx.popsString(value);
|
|
||||||
value.poppedBy(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
int ipushes = i.getIntStackPushes();
|
|
||||||
for (int j = 0; j < ipushes; ++j)
|
|
||||||
{
|
|
||||||
StackContext sctx = new StackContext(ctx, null);
|
|
||||||
istack.push(sctx);
|
|
||||||
ctx.pushesInt(sctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
int spushes = i.getStringStackPushes();
|
|
||||||
for (int j = 0; j < spushes; ++j)
|
|
||||||
{
|
|
||||||
StackContext sctx = new StackContext(ctx, null);
|
|
||||||
sstack.push(sctx);
|
|
||||||
ctx.pushesString(sctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ipushes > 0 || spushes > 0)
|
|
||||||
{
|
|
||||||
logger.debug("Executed instruction {} with {}/{} pushes!", i, ipushes, spushes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,101 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class InstructionContext
|
|
||||||
{
|
|
||||||
private final ScriptInstruction scriptInstruction;
|
|
||||||
|
|
||||||
private final List<StackContext> ipops = new ArrayList<>();
|
|
||||||
private final List<StackContext> spops = new ArrayList<>();
|
|
||||||
private final List<StackContext> ipushes = new ArrayList<>();
|
|
||||||
private final List<StackContext> spushes = new ArrayList<>();
|
|
||||||
|
|
||||||
public InstructionContext(ScriptInstruction scriptInstruction)
|
|
||||||
{
|
|
||||||
this.scriptInstruction = scriptInstruction;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ScriptInstruction getScriptInstruction()
|
|
||||||
{
|
|
||||||
return scriptInstruction;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void popsInt(StackContext... ctx)
|
|
||||||
{
|
|
||||||
for (StackContext s : ctx)
|
|
||||||
{
|
|
||||||
ipops.add(s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void popsString(StackContext... ctx)
|
|
||||||
{
|
|
||||||
for (StackContext s : ctx)
|
|
||||||
{
|
|
||||||
spops.add(s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void pushesInt(StackContext... ctx)
|
|
||||||
{
|
|
||||||
for (StackContext s : ctx)
|
|
||||||
{
|
|
||||||
ipushes.add(s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void pushesString(StackContext... ctx)
|
|
||||||
{
|
|
||||||
for (StackContext s : ctx)
|
|
||||||
{
|
|
||||||
spushes.add(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<StackContext> getIpops()
|
|
||||||
{
|
|
||||||
return ipops;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<StackContext> getSpops()
|
|
||||||
{
|
|
||||||
return spops;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<StackContext> getIpushes()
|
|
||||||
{
|
|
||||||
return ipushes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<StackContext> getSpushes()
|
|
||||||
{
|
|
||||||
return spushes;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter;
|
|
||||||
|
|
||||||
public abstract class InstructionHandler
|
|
||||||
{
|
|
||||||
public abstract void execute(Frame frame, InstructionContext ctx);
|
|
||||||
}
|
|
||||||
@@ -1,78 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import net.runelite.cache.script.Opcodes;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.If_ICmpEQ;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.If_ICmpGE;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.If_ICmpGT;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.If_ICmpLE;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.If_ICmpLT;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.If_ICmpNE;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.Invoke;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.Jump;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.LoadInt;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.Return;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.StringAppend;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.Switch;
|
|
||||||
|
|
||||||
public class InstructionHandlers
|
|
||||||
{
|
|
||||||
private static final Map<Integer, InstructionHandler> handlers = new HashMap<>();
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
init();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void init()
|
|
||||||
{
|
|
||||||
add(Opcodes.LOAD_INT, new LoadInt());
|
|
||||||
add(Opcodes.JUMP, new Jump());
|
|
||||||
add(Opcodes.IF_ICMPNE, new If_ICmpNE());
|
|
||||||
add(Opcodes.IF_ICMPEQ, new If_ICmpEQ());
|
|
||||||
add(Opcodes.IF_ICMPLT, new If_ICmpLT());
|
|
||||||
add(Opcodes.IF_ICMPGT, new If_ICmpGT());
|
|
||||||
add(Opcodes.IF_ICMPLE, new If_ICmpLE());
|
|
||||||
add(Opcodes.IF_ICMPGE, new If_ICmpGE());
|
|
||||||
add(Opcodes.INVOKE, new Invoke());
|
|
||||||
add(Opcodes.RETURN, new Return());
|
|
||||||
add(Opcodes.SWITCH, new Switch());
|
|
||||||
add(Opcodes.STRING_APPEND, new StringAppend());
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void add(int opcode, InstructionHandler handler)
|
|
||||||
{
|
|
||||||
assert handlers.containsKey(opcode) == false;
|
|
||||||
handlers.put(opcode, handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static InstructionHandler find(int opcode)
|
|
||||||
{
|
|
||||||
return handlers.get(opcode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,111 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter;
|
|
||||||
|
|
||||||
import java.util.ArrayDeque;
|
|
||||||
import java.util.Queue;
|
|
||||||
import net.runelite.cache.definitions.ScriptDefinition;
|
|
||||||
import net.runelite.cache.script.Instruction;
|
|
||||||
import net.runelite.cache.script.Instructions;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
public class Interpreter
|
|
||||||
{
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(Interpreter.class);
|
|
||||||
|
|
||||||
private final Queue<Frame> frames = new ArrayDeque<>();
|
|
||||||
private final GenericInstructionHandler genericInstructionHandler = new GenericInstructionHandler();
|
|
||||||
|
|
||||||
public void run(ScriptDefinition script)
|
|
||||||
{
|
|
||||||
Instructions.init();
|
|
||||||
|
|
||||||
Frame frame = new Frame(this, script);
|
|
||||||
frames.add(frame);
|
|
||||||
|
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
while (!frames.isEmpty())
|
|
||||||
{
|
|
||||||
frame = frames.remove();
|
|
||||||
run(frame);
|
|
||||||
++count;
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.info("Processed {} frames", count);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void run(Frame frame)
|
|
||||||
{
|
|
||||||
ScriptDefinition script = frame.getScript();
|
|
||||||
|
|
||||||
int[] instructions = script.getInstructions();
|
|
||||||
int[] iops = script.getIntOperands();
|
|
||||||
String[] sops = script.getStringOperands();
|
|
||||||
|
|
||||||
while (frame.isRunning())
|
|
||||||
{
|
|
||||||
if (frame.pc >= instructions.length)
|
|
||||||
{
|
|
||||||
throw new RuntimeException("PC went past end of instructions - maybe missing return");
|
|
||||||
}
|
|
||||||
|
|
||||||
int opcode = instructions[frame.pc];
|
|
||||||
int iop = iops[frame.pc];
|
|
||||||
String sop = sops[frame.pc];
|
|
||||||
|
|
||||||
Instruction i = Instructions.find(opcode);
|
|
||||||
if (i == null)
|
|
||||||
{
|
|
||||||
throw new RuntimeException("Unknown instruction " + opcode + " in script at pc " + frame.pc);
|
|
||||||
}
|
|
||||||
|
|
||||||
ScriptInstruction scriptInstruction = new ScriptInstruction(frame.pc, i, iop, sop);
|
|
||||||
InstructionContext ctx = new InstructionContext(scriptInstruction);
|
|
||||||
|
|
||||||
InstructionHandler handler = InstructionHandlers.find(opcode);
|
|
||||||
if (handler == null)
|
|
||||||
{
|
|
||||||
handler = genericInstructionHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
int old = frame.pc;
|
|
||||||
|
|
||||||
handler.execute(frame, ctx);
|
|
||||||
|
|
||||||
if (old == frame.pc)
|
|
||||||
{
|
|
||||||
// not a jump
|
|
||||||
++frame.pc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addFrame(Frame frame)
|
|
||||||
{
|
|
||||||
frames.add(frame);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter;
|
|
||||||
|
|
||||||
import net.runelite.cache.script.Instruction;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* an instruction in a script
|
|
||||||
*
|
|
||||||
* @author Adam
|
|
||||||
*/
|
|
||||||
public class ScriptInstruction
|
|
||||||
{
|
|
||||||
private final int pc;
|
|
||||||
private final Instruction instruction;
|
|
||||||
private final int iop;
|
|
||||||
private final String sop;
|
|
||||||
|
|
||||||
public ScriptInstruction(int pc, Instruction instruction, int iop, String sop)
|
|
||||||
{
|
|
||||||
this.pc = pc;
|
|
||||||
this.instruction = instruction;
|
|
||||||
this.iop = iop;
|
|
||||||
this.sop = sop;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPc()
|
|
||||||
{
|
|
||||||
return pc;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Instruction getInstruction()
|
|
||||||
{
|
|
||||||
return instruction;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getIop()
|
|
||||||
{
|
|
||||||
return iop;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSop()
|
|
||||||
{
|
|
||||||
return sop;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class StackContext
|
|
||||||
{
|
|
||||||
private final InstructionContext pushed;
|
|
||||||
private final List<InstructionContext> popped = new ArrayList<>();
|
|
||||||
private final Object value;
|
|
||||||
|
|
||||||
public StackContext(InstructionContext pushed, Object value)
|
|
||||||
{
|
|
||||||
assert value == null || value instanceof String || value instanceof Integer;
|
|
||||||
this.pushed = pushed;
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void poppedBy(InstructionContext ctx)
|
|
||||||
{
|
|
||||||
popped.add(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
public InstructionContext getPushed()
|
|
||||||
{
|
|
||||||
return pushed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<InstructionContext> getPopped()
|
|
||||||
{
|
|
||||||
return popped;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object getValue()
|
|
||||||
{
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
import net.runelite.cache.script.interpreter.Frame;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionContext;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionHandler;
|
|
||||||
import net.runelite.cache.script.interpreter.Stack;
|
|
||||||
import net.runelite.cache.script.interpreter.StackContext;
|
|
||||||
|
|
||||||
public abstract class If extends InstructionHandler
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public final void execute(Frame frame, InstructionContext ctx)
|
|
||||||
{
|
|
||||||
Stack intStack = frame.getIntStack();
|
|
||||||
int iop = ctx.getScriptInstruction().getIop();
|
|
||||||
|
|
||||||
StackContext sctx1 = intStack.pop();
|
|
||||||
StackContext sctx2 = intStack.pop();
|
|
||||||
|
|
||||||
ctx.popsInt(sctx1, sctx2);
|
|
||||||
sctx1.poppedBy(ctx);
|
|
||||||
sctx2.poppedBy(ctx);
|
|
||||||
|
|
||||||
Frame dup = frame.dup();
|
|
||||||
dup.jump(iop);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
public class If_ICmpLE extends If
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
public class If_ICmpLT extends If
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
public class If_ICmpNE extends If
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
import net.runelite.cache.script.interpreter.Frame;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionContext;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionHandler;
|
|
||||||
import net.runelite.cache.script.interpreter.ScriptInstruction;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
public class Invoke extends InstructionHandler
|
|
||||||
{
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(Invoke.class);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void execute(Frame frame, InstructionContext ctx)
|
|
||||||
{
|
|
||||||
ScriptInstruction scriptInstruction = ctx.getScriptInstruction();
|
|
||||||
|
|
||||||
int scriptToInvoke = scriptInstruction.getIop();
|
|
||||||
|
|
||||||
// copy new script's intStackCount/stringStackCount to the new LVT, and pop from caller's stack
|
|
||||||
|
|
||||||
logger.warn("Invoke not implemented yet");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
import net.runelite.cache.script.interpreter.Frame;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionContext;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionHandler;
|
|
||||||
|
|
||||||
public class Jump extends InstructionHandler
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void execute(Frame frame, InstructionContext ctx)
|
|
||||||
{
|
|
||||||
int iop = ctx.getScriptInstruction().getIop();
|
|
||||||
frame.jump(iop);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
import net.runelite.cache.script.interpreter.Frame;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionContext;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionHandler;
|
|
||||||
import net.runelite.cache.script.interpreter.Stack;
|
|
||||||
import net.runelite.cache.script.interpreter.StackContext;
|
|
||||||
|
|
||||||
public class LoadInt extends InstructionHandler
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void execute(Frame frame, InstructionContext ctx)
|
|
||||||
{
|
|
||||||
Stack intStack = frame.getIntStack();
|
|
||||||
int iop = ctx.getScriptInstruction().getIop();
|
|
||||||
|
|
||||||
StackContext sctx = new StackContext(ctx, iop);
|
|
||||||
ctx.pushesInt(sctx);
|
|
||||||
|
|
||||||
intStack.push(sctx);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
import net.runelite.cache.script.interpreter.Frame;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionContext;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionHandler;
|
|
||||||
|
|
||||||
public class Return extends InstructionHandler
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void execute(Frame frame, InstructionContext ctx)
|
|
||||||
{
|
|
||||||
frame.stop();
|
|
||||||
|
|
||||||
// restore lvt from calling script. return value is on the stack.
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
import net.runelite.cache.script.interpreter.Frame;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionContext;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionHandler;
|
|
||||||
import net.runelite.cache.script.interpreter.ScriptInstruction;
|
|
||||||
import net.runelite.cache.script.interpreter.Stack;
|
|
||||||
import net.runelite.cache.script.interpreter.StackContext;
|
|
||||||
|
|
||||||
public class StringAppend extends InstructionHandler
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void execute(Frame frame, InstructionContext ctx)
|
|
||||||
{
|
|
||||||
Stack stringStack = frame.getStringStack();
|
|
||||||
ScriptInstruction scriptInstruction = ctx.getScriptInstruction();
|
|
||||||
int number = scriptInstruction.getIop();
|
|
||||||
|
|
||||||
for (int i = 0; i < number; ++i)
|
|
||||||
{
|
|
||||||
StackContext sctx = stringStack.pop();
|
|
||||||
ctx.popsString(sctx);
|
|
||||||
sctx.poppedBy(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
// push appended string
|
|
||||||
StackContext sctx = new StackContext(ctx, null);
|
|
||||||
stringStack.push(sctx);
|
|
||||||
ctx.pushesString(sctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import net.runelite.cache.definitions.ScriptDefinition;
|
|
||||||
import net.runelite.cache.script.interpreter.Frame;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionContext;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionHandler;
|
|
||||||
import net.runelite.cache.script.interpreter.ScriptInstruction;
|
|
||||||
import net.runelite.cache.script.interpreter.Stack;
|
|
||||||
import net.runelite.cache.script.interpreter.StackContext;
|
|
||||||
|
|
||||||
public class Switch extends InstructionHandler
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void execute(Frame frame, InstructionContext ctx)
|
|
||||||
{
|
|
||||||
Stack intStack = frame.getIntStack();
|
|
||||||
ScriptInstruction scriptInstruction = ctx.getScriptInstruction();
|
|
||||||
ScriptDefinition script = frame.getScript();
|
|
||||||
int switchTableIndex = scriptInstruction.getIop();
|
|
||||||
|
|
||||||
// value -> pc
|
|
||||||
Map<Integer, Integer> switchTable = script.getSwitches()[switchTableIndex];
|
|
||||||
|
|
||||||
// pop value off stack
|
|
||||||
StackContext sctx = intStack.pop();
|
|
||||||
ctx.popsInt(sctx);
|
|
||||||
sctx.poppedBy(ctx);
|
|
||||||
|
|
||||||
// jump to targets
|
|
||||||
for (int target : switchTable.values())
|
|
||||||
{
|
|
||||||
Frame dup = frame.dup();
|
|
||||||
dup.jump(target);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -27,6 +27,7 @@ package net.runelite.cache.definitions.savers;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import net.runelite.cache.definitions.ScriptDefinition;
|
import net.runelite.cache.definitions.ScriptDefinition;
|
||||||
import net.runelite.cache.definitions.loaders.ScriptLoader;
|
import net.runelite.cache.definitions.loaders.ScriptLoader;
|
||||||
|
import net.runelite.cache.script.Instructions;
|
||||||
import net.runelite.cache.script.assembler.Assembler;
|
import net.runelite.cache.script.assembler.Assembler;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -42,7 +43,9 @@ public class ScriptSaverTest
|
|||||||
@Test
|
@Test
|
||||||
public void testSave() throws IOException
|
public void testSave() throws IOException
|
||||||
{
|
{
|
||||||
ScriptDefinition script = new Assembler().assemble(getClass().getResourceAsStream(SCRIPT_RESOURCE));
|
Instructions instructions = new Instructions();
|
||||||
|
instructions.init();
|
||||||
|
ScriptDefinition script = new Assembler(instructions).assemble(getClass().getResourceAsStream(SCRIPT_RESOURCE));
|
||||||
byte[] saved = new ScriptSaver().save(script);
|
byte[] saved = new ScriptSaver().save(script);
|
||||||
ScriptDefinition loadedScripot = new ScriptLoader().load(42, saved);
|
ScriptDefinition loadedScripot = new ScriptLoader().load(42, saved);
|
||||||
assertEquals(script, loadedScripot);
|
assertEquals(script, loadedScripot);
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ public class InstructionsTest
|
|||||||
@Test
|
@Test
|
||||||
public void testInit()
|
public void testInit()
|
||||||
{
|
{
|
||||||
Instructions.init();
|
new Instructions().init();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ package net.runelite.cache.script.assembler;
|
|||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import net.runelite.cache.definitions.ScriptDefinition;
|
import net.runelite.cache.definitions.ScriptDefinition;
|
||||||
|
import net.runelite.cache.script.Instructions;
|
||||||
import net.runelite.cache.script.disassembler.Disassembler;
|
import net.runelite.cache.script.disassembler.Disassembler;
|
||||||
import org.apache.commons.compress.utils.IOUtils;
|
import org.apache.commons.compress.utils.IOUtils;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
@@ -60,7 +61,10 @@ public class AssemblerTest
|
|||||||
InputStream in = AssemblerTest.class.getResourceAsStream(script);
|
InputStream in = AssemblerTest.class.getResourceAsStream(script);
|
||||||
Assert.assertNotNull(in);
|
Assert.assertNotNull(in);
|
||||||
|
|
||||||
Assembler assembler = new Assembler();
|
Instructions instructions = new Instructions();
|
||||||
|
instructions.init();
|
||||||
|
|
||||||
|
Assembler assembler = new Assembler(instructions);
|
||||||
ScriptDefinition script = assembler.assemble(in);
|
ScriptDefinition script = assembler.assemble(in);
|
||||||
|
|
||||||
// compare with disassembler
|
// compare with disassembler
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ import net.runelite.cache.fs.Archive;
|
|||||||
import net.runelite.cache.fs.Index;
|
import net.runelite.cache.fs.Index;
|
||||||
import net.runelite.cache.fs.Storage;
|
import net.runelite.cache.fs.Storage;
|
||||||
import net.runelite.cache.fs.Store;
|
import net.runelite.cache.fs.Store;
|
||||||
import net.runelite.cache.script.Instructions;
|
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.rules.TemporaryFolder;
|
import org.junit.rules.TemporaryFolder;
|
||||||
@@ -55,8 +54,6 @@ public class DisassemblerTest
|
|||||||
File outDir = folder.newFolder();
|
File outDir = folder.newFolder();
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
Instructions.init();
|
|
||||||
|
|
||||||
try (Store store = new Store(StoreLocation.LOCATION))
|
try (Store store = new Store(StoreLocation.LOCATION))
|
||||||
{
|
{
|
||||||
store.load();
|
store.load();
|
||||||
|
|||||||
@@ -1,54 +0,0 @@
|
|||||||
.int_stack_count 3
|
|
||||||
.string_stack_count 0
|
|
||||||
.int_var_count 3
|
|
||||||
.string_var_count 0
|
|
||||||
iload 0
|
|
||||||
load_int 1
|
|
||||||
if_icmpne LABEL4
|
|
||||||
jump LABEL5
|
|
||||||
LABEL4:
|
|
||||||
return
|
|
||||||
LABEL5:
|
|
||||||
load_int 2871
|
|
||||||
load_int 1
|
|
||||||
load_int 0
|
|
||||||
3200
|
|
||||||
iload 1
|
|
||||||
load_int 1
|
|
||||||
if_icmpeq LABEL13
|
|
||||||
jump LABEL20
|
|
||||||
LABEL13:
|
|
||||||
get_varbit 3985
|
|
||||||
iload 2
|
|
||||||
iadd
|
|
||||||
load_int 4
|
|
||||||
modulo
|
|
||||||
set_varbit 3985
|
|
||||||
jump LABEL41
|
|
||||||
LABEL20:
|
|
||||||
iload 1
|
|
||||||
load_int 2
|
|
||||||
if_icmpeq LABEL24
|
|
||||||
jump LABEL31
|
|
||||||
LABEL24:
|
|
||||||
get_varbit 3986
|
|
||||||
iload 2
|
|
||||||
iadd
|
|
||||||
load_int 4
|
|
||||||
modulo
|
|
||||||
set_varbit 3986
|
|
||||||
jump LABEL41
|
|
||||||
LABEL31:
|
|
||||||
iload 1
|
|
||||||
load_int 3
|
|
||||||
if_icmpeq LABEL35
|
|
||||||
jump LABEL41
|
|
||||||
LABEL35:
|
|
||||||
get_varbit 3987
|
|
||||||
iload 2
|
|
||||||
iadd
|
|
||||||
load_int 4
|
|
||||||
modulo
|
|
||||||
set_varbit 3987
|
|
||||||
LABEL41:
|
|
||||||
return
|
|
||||||
2
pom.xml
2
pom.xml
@@ -119,6 +119,8 @@
|
|||||||
<module>runelite-api</module>
|
<module>runelite-api</module>
|
||||||
<module>runelite-client</module>
|
<module>runelite-client</module>
|
||||||
<module>runelite-mixins</module>
|
<module>runelite-mixins</module>
|
||||||
|
<module>runelite-script-assembler-plugin</module>
|
||||||
|
<module>runelite-scripts</module>
|
||||||
<module>runescape-api</module>
|
<module>runescape-api</module>
|
||||||
<module>runescape-client</module>
|
<module>runescape-client</module>
|
||||||
<module>runescape-client-injector</module>
|
<module>runescape-client-injector</module>
|
||||||
|
|||||||
@@ -37,6 +37,11 @@
|
|||||||
<name>RuneLite API</name>
|
<name>RuneLite API</name>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
<version>1.7.21</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.projectlombok</groupId>
|
<groupId>org.projectlombok</groupId>
|
||||||
<artifactId>lombok</artifactId>
|
<artifactId>lombok</artifactId>
|
||||||
|
|||||||
@@ -255,4 +255,16 @@ public interface Client extends GameEngine
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
ItemContainer getItemContainer(InventoryID inventory);
|
ItemContainer getItemContainer(InventoryID inventory);
|
||||||
|
|
||||||
|
int getIntStackSize();
|
||||||
|
|
||||||
|
void setIntStackSize(int stackSize);
|
||||||
|
|
||||||
|
int[] getIntStack();
|
||||||
|
|
||||||
|
int getStringStackSize();
|
||||||
|
|
||||||
|
void setStringStackSize(int stackSize);
|
||||||
|
|
||||||
|
String[] getStringStack();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@@ -22,9 +22,9 @@
|
|||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
package net.runelite.api;
|
||||||
|
|
||||||
public class If_ICmpGE extends If
|
public class Opcodes
|
||||||
{
|
{
|
||||||
|
public static final int RUNELITE_EXECUTE = 6599;
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
* Copyright (c) 2018 Abex
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@@ -22,9 +22,11 @@
|
|||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
package net.runelite.cache.script.interpreter;
|
package net.runelite.api;
|
||||||
|
|
||||||
public class VariableContext
|
public interface Script extends Node
|
||||||
{
|
{
|
||||||
|
int[] getIntOperands();
|
||||||
|
|
||||||
|
int[] getInstructions();
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@@ -22,9 +22,14 @@
|
|||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
package net.runelite.api.events;
|
||||||
|
|
||||||
public class If_ICmpGT extends If
|
import lombok.Data;
|
||||||
|
import net.runelite.api.Script;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class ScriptEvent
|
||||||
{
|
{
|
||||||
|
private Script script;
|
||||||
|
private String eventName;
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@@ -22,28 +22,40 @@
|
|||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
package net.runelite.cache.script.interpreter;
|
package net.runelite.api.overlay;
|
||||||
|
|
||||||
|
import java.io.DataInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import net.runelite.cache.definitions.ScriptDefinition;
|
import java.util.HashSet;
|
||||||
import net.runelite.cache.script.assembler.Assembler;
|
import java.util.Set;
|
||||||
import org.junit.Assert;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
public class InterpreterTest
|
@Slf4j
|
||||||
|
public class OverlayIndex
|
||||||
{
|
{
|
||||||
@Test
|
private static final Set<Integer> overlays = new HashSet<>();
|
||||||
public void testRun() throws IOException
|
|
||||||
|
static
|
||||||
{
|
{
|
||||||
InputStream in = InterpreterTest.class.getResourceAsStream("397.rs2asm");
|
InputStream indexStream = OverlayIndex.class.getResourceAsStream("/runelite/index");
|
||||||
Assert.assertNotNull(in);
|
|
||||||
|
|
||||||
Assembler assembler = new Assembler();
|
try (DataInputStream in = new DataInputStream(indexStream))
|
||||||
ScriptDefinition script = assembler.assemble(in);
|
{
|
||||||
|
int id;
|
||||||
Interpreter interpreter = new Interpreter();
|
while ((id = in.readInt()) != -1)
|
||||||
interpreter.run(script);
|
{
|
||||||
|
overlays.add(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (IOException ex)
|
||||||
|
{
|
||||||
|
log.warn("unable to load overlay index", ex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean hasOverlay(int indexId, int archiveId)
|
||||||
|
{
|
||||||
|
return overlays.contains(indexId << 16 | archiveId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -109,6 +109,12 @@
|
|||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
<scope>runtime</scope>
|
<scope>runtime</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.runelite</groupId>
|
||||||
|
<artifactId>scripts</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.runelite</groupId>
|
<groupId>net.runelite</groupId>
|
||||||
<artifactId>http-api</artifactId>
|
<artifactId>http-api</artifactId>
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ import com.google.inject.Injector;
|
|||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import net.runelite.api.ChatMessageType;
|
import net.runelite.api.ChatMessageType;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
import net.runelite.api.MainBufferProvider;
|
import net.runelite.api.MainBufferProvider;
|
||||||
@@ -45,6 +44,8 @@ import net.runelite.api.PacketBuffer;
|
|||||||
import net.runelite.api.Point;
|
import net.runelite.api.Point;
|
||||||
import net.runelite.api.Projectile;
|
import net.runelite.api.Projectile;
|
||||||
import net.runelite.api.Region;
|
import net.runelite.api.Region;
|
||||||
|
import net.runelite.api.Script;
|
||||||
|
import net.runelite.api.events.ScriptEvent;
|
||||||
import net.runelite.client.RuneLite;
|
import net.runelite.client.RuneLite;
|
||||||
import net.runelite.client.chat.ChatMessageManager;
|
import net.runelite.client.chat.ChatMessageManager;
|
||||||
import net.runelite.client.game.DeathChecker;
|
import net.runelite.client.game.DeathChecker;
|
||||||
@@ -52,10 +53,14 @@ import net.runelite.client.task.Scheduler;
|
|||||||
import net.runelite.client.ui.overlay.OverlayLayer;
|
import net.runelite.client.ui.overlay.OverlayLayer;
|
||||||
import net.runelite.client.ui.overlay.OverlayRenderer;
|
import net.runelite.client.ui.overlay.OverlayRenderer;
|
||||||
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
|
import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@Slf4j
|
|
||||||
public class Hooks
|
public class Hooks
|
||||||
{
|
{
|
||||||
|
// must be public as the mixins use it
|
||||||
|
public static final Logger log = LoggerFactory.getLogger(Hooks.class);
|
||||||
|
|
||||||
private static final long CHECK = 600; // ms - how often to run checks
|
private static final long CHECK = 600; // ms - how often to run checks
|
||||||
|
|
||||||
private static final Injector injector = RuneLite.getInjector();
|
private static final Injector injector = RuneLite.getInjector();
|
||||||
@@ -148,6 +153,28 @@ public class Hooks
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param opcode
|
||||||
|
* @param script
|
||||||
|
* @param isOne
|
||||||
|
* @return 0 halts, 1 continues, 2 throws
|
||||||
|
*/
|
||||||
|
public static int runeliteExecute(int opcode, Script script, boolean isOne)
|
||||||
|
{
|
||||||
|
String[] stringStack = client.getStringStack();
|
||||||
|
int stackSize = client.getStringStackSize();
|
||||||
|
String eventName = stringStack[--stackSize];
|
||||||
|
client.setStringStackSize(stackSize);
|
||||||
|
|
||||||
|
ScriptEvent event = new ScriptEvent();
|
||||||
|
event.setScript(script);
|
||||||
|
event.setEventName(eventName);
|
||||||
|
eventBus.post(event);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
public static void menuActionHook(int actionParam, int widgetId, int menuAction, int id, String menuOption, String menuTarget, int var6, int var7)
|
public static void menuActionHook(int actionParam, int widgetId, int menuAction, int id, String menuOption, String menuTarget, int var6, int var7)
|
||||||
{
|
{
|
||||||
/* Along the way, the RuneScape client may change a menuAction by incrementing it with 2000.
|
/* Along the way, the RuneScape client may change a menuAction by incrementing it with 2000.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
* Copyright (c) 2018 Abex
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@@ -22,21 +22,26 @@
|
|||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
package net.runelite.cache.script.interpreter;
|
package net.runelite.client.plugins.zoom;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import net.runelite.client.config.Config;
|
||||||
|
import net.runelite.client.config.ConfigGroup;
|
||||||
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
|
||||||
public class Variables
|
@ConfigGroup(
|
||||||
|
keyName = "zoom",
|
||||||
|
name = "Zoom Unlimiter",
|
||||||
|
description = "Configuration for the camera zoom limit"
|
||||||
|
)
|
||||||
|
public interface ZoomConfig extends Config
|
||||||
{
|
{
|
||||||
private final VariableContext[] variables;
|
@ConfigItem(
|
||||||
|
keyName = "enabled",
|
||||||
public Variables(int count)
|
name = "Enabled",
|
||||||
|
description = "Configures whether or not the zoom limit is reduced"
|
||||||
|
)
|
||||||
|
default boolean enabled()
|
||||||
{
|
{
|
||||||
variables = new VariableContext[count];
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
public Variables(Variables other)
|
|
||||||
{
|
|
||||||
variables = Arrays.copyOf(other.variables, other.variables.length);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018 Abex
|
||||||
|
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.client.plugins.zoom;
|
||||||
|
|
||||||
|
import com.google.common.eventbus.Subscribe;
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import com.google.inject.Provides;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.api.events.ScriptEvent;
|
||||||
|
import net.runelite.client.config.ConfigManager;
|
||||||
|
import net.runelite.client.plugins.Plugin;
|
||||||
|
import net.runelite.client.plugins.PluginDescriptor;
|
||||||
|
|
||||||
|
@PluginDescriptor(
|
||||||
|
name = "Camera zoom unlimiter"
|
||||||
|
)
|
||||||
|
@Slf4j
|
||||||
|
public class ZoomPlugin extends Plugin
|
||||||
|
{
|
||||||
|
private static final int INCREASED_RESIZABLE_ZOOM_LIMIT = 70;
|
||||||
|
private static final int INCREASED_FIXED_ZOOM_LIMIT = 95;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private Client client;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private ZoomConfig zoomConfig;
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
ZoomConfig getConfig(ConfigManager configManager)
|
||||||
|
{
|
||||||
|
return configManager.getConfig(ZoomConfig.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onScriptEvent(ScriptEvent event)
|
||||||
|
{
|
||||||
|
if (!zoomConfig.enabled())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (event.getEventName())
|
||||||
|
{
|
||||||
|
case "fixedOuterZoomLimit":
|
||||||
|
popAndReplace(INCREASED_FIXED_ZOOM_LIMIT);
|
||||||
|
break;
|
||||||
|
case "resizableOuterZoomLimit":
|
||||||
|
popAndReplace(INCREASED_RESIZABLE_ZOOM_LIMIT);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void popAndReplace(int newValue)
|
||||||
|
{
|
||||||
|
int[] intStack = client.getIntStack();
|
||||||
|
int intStackSize = client.getIntStackSize();
|
||||||
|
intStack[intStackSize - 1] = newValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -37,6 +37,12 @@
|
|||||||
<name>RuneLite Mixins</name>
|
<name>RuneLite Mixins</name>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
<version>1.7.21</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.runelite.rs</groupId>
|
<groupId>net.runelite.rs</groupId>
|
||||||
<artifactId>api</artifactId>
|
<artifactId>api</artifactId>
|
||||||
|
|||||||
@@ -25,6 +25,8 @@
|
|||||||
package net.runelite.client.callback;
|
package net.runelite.client.callback;
|
||||||
|
|
||||||
import com.google.common.eventbus.EventBus;
|
import com.google.common.eventbus.EventBus;
|
||||||
|
import net.runelite.api.Script;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dummy class to make the mixins to compile.
|
* Dummy class to make the mixins to compile.
|
||||||
@@ -33,5 +35,12 @@ import com.google.common.eventbus.EventBus;
|
|||||||
*/
|
*/
|
||||||
public class Hooks
|
public class Hooks
|
||||||
{
|
{
|
||||||
|
public static Logger log;
|
||||||
|
|
||||||
public static EventBus eventBus;
|
public static EventBus eventBus;
|
||||||
|
|
||||||
|
public static int runeliteExecute(int opcode, Script script, boolean isOne)
|
||||||
|
{
|
||||||
|
throw new RuntimeException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.mixins;
|
||||||
|
|
||||||
|
import com.google.common.hash.HashCode;
|
||||||
|
import com.google.common.hash.Hashing;
|
||||||
|
import com.google.common.io.BaseEncoding;
|
||||||
|
import com.google.common.io.ByteStreams;
|
||||||
|
import com.google.common.io.CharStreams;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import net.runelite.api.mixins.Copy;
|
||||||
|
import net.runelite.api.mixins.Mixin;
|
||||||
|
import net.runelite.api.mixins.Replace;
|
||||||
|
import net.runelite.api.overlay.OverlayIndex;
|
||||||
|
import static net.runelite.client.callback.Hooks.log;
|
||||||
|
import net.runelite.rs.api.RSIndexData;
|
||||||
|
import net.runelite.rs.api.RSIndexDataBase;
|
||||||
|
|
||||||
|
@Mixin(RSIndexDataBase.class)
|
||||||
|
public abstract class RSIndexDataBaseMixin implements RSIndexDataBase
|
||||||
|
{
|
||||||
|
@Copy("getConfigData")
|
||||||
|
abstract byte[] rs$getConfigData(int archiveId, int fileId);
|
||||||
|
|
||||||
|
@Replace("getConfigData")
|
||||||
|
public byte[] rl$getConfigData(int archiveId, int fileId)
|
||||||
|
{
|
||||||
|
byte[] rsData = rs$getConfigData(archiveId, fileId);
|
||||||
|
RSIndexData indexData = (RSIndexData) this;
|
||||||
|
|
||||||
|
if (!OverlayIndex.hasOverlay(indexData.getIndex(), archiveId))
|
||||||
|
{
|
||||||
|
return rsData;
|
||||||
|
}
|
||||||
|
|
||||||
|
InputStream in = getClass().getResourceAsStream("/runelite/" + indexData.getIndex() + "/" + archiveId);
|
||||||
|
if (in == null)
|
||||||
|
{
|
||||||
|
log.warn("Missing overlay data for {}/{}", indexData.getIndex(), archiveId);
|
||||||
|
return rsData;
|
||||||
|
}
|
||||||
|
|
||||||
|
HashCode rsDataHash = Hashing.sha256().hashBytes(rsData);
|
||||||
|
|
||||||
|
String rsHash = BaseEncoding.base16().encode(rsDataHash.asBytes());
|
||||||
|
|
||||||
|
InputStream in2 = getClass().getResourceAsStream("/runelite/" + indexData.getIndex() + "/" + archiveId + ".hash");
|
||||||
|
if (in2 == null)
|
||||||
|
{
|
||||||
|
log.warn("Missing hash file for {}/{}", indexData.getIndex(), archiveId);
|
||||||
|
return rsData;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
String replaceHash = CharStreams.toString(new InputStreamReader(in2));
|
||||||
|
|
||||||
|
if (replaceHash.equals(rsHash))
|
||||||
|
{
|
||||||
|
log.debug("Replacing archive {}/{}",
|
||||||
|
indexData.getIndex(), archiveId);
|
||||||
|
return ByteStreams.toByteArray(in);
|
||||||
|
}
|
||||||
|
|
||||||
|
log.warn("Mismatch in overlaid cache archive hash for {}/{}: {} != {}",
|
||||||
|
indexData.getIndex(), archiveId, replaceHash, rsHash);
|
||||||
|
}
|
||||||
|
catch (IOException ex)
|
||||||
|
{
|
||||||
|
log.warn("error checking hash", ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
return rsData;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@@ -22,36 +22,32 @@
|
|||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
package net.runelite.cache.script.interpreter;
|
package net.runelite.mixins;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import static net.runelite.api.Opcodes.RUNELITE_EXECUTE;
|
||||||
import java.util.List;
|
import net.runelite.api.Script;
|
||||||
|
import net.runelite.api.mixins.Copy;
|
||||||
|
import net.runelite.api.mixins.Mixin;
|
||||||
|
import net.runelite.api.mixins.Replace;
|
||||||
|
import net.runelite.client.callback.Hooks;
|
||||||
|
import net.runelite.rs.api.RSClient;
|
||||||
|
|
||||||
public class Stack
|
@Mixin(RSClient.class)
|
||||||
|
public abstract class VmMixin
|
||||||
{
|
{
|
||||||
private final List<StackContext> stack = new ArrayList<>();
|
@Copy("execute6500")
|
||||||
|
static int rs$execute6500(int opcode, Script script, boolean isOne)
|
||||||
public Stack()
|
|
||||||
{
|
{
|
||||||
|
throw new RuntimeException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Stack(Stack other)
|
@Replace("execute6500")
|
||||||
|
static int rl$execute6500(int opcode, Script script, boolean isOne)
|
||||||
{
|
{
|
||||||
stack.addAll(other.stack);
|
if (opcode == RUNELITE_EXECUTE)
|
||||||
}
|
|
||||||
|
|
||||||
public void push(StackContext ctx)
|
|
||||||
{
|
|
||||||
stack.add(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
public StackContext pop()
|
|
||||||
{
|
|
||||||
if (stack.isEmpty())
|
|
||||||
{
|
{
|
||||||
throw new RuntimeException("stack underflow");
|
return Hooks.runeliteExecute(opcode, script, isOne);
|
||||||
}
|
}
|
||||||
|
return rs$execute6500(opcode, script, isOne);
|
||||||
return stack.remove(stack.size() - 1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
79
runelite-script-assembler-plugin/pom.xml
Normal file
79
runelite-script-assembler-plugin/pom.xml
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
Copyright (c) 2018, Adam <Adam@sigterm.info>
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
-->
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>net.runelite</groupId>
|
||||||
|
<artifactId>runelite-parent</artifactId>
|
||||||
|
<version>1.2.14-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<groupId>net.runelite</groupId>
|
||||||
|
<artifactId>script-assembler-plugin</artifactId>
|
||||||
|
<name>Script Assembler Plugin</name>
|
||||||
|
<packaging>maven-plugin</packaging>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.runelite</groupId>
|
||||||
|
<artifactId>cache</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.runelite</groupId>
|
||||||
|
<artifactId>api</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven</groupId>
|
||||||
|
<artifactId>maven-plugin-api</artifactId>
|
||||||
|
<version>3.0.5</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven.plugin-tools</groupId>
|
||||||
|
<artifactId>maven-plugin-annotations</artifactId>
|
||||||
|
<version>3.4</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-plugin-plugin</artifactId>
|
||||||
|
<version>3.4</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>default-descriptor</id>
|
||||||
|
<phase>process-classes</phase>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,101 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.script;
|
||||||
|
|
||||||
|
import com.google.common.io.Files;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import net.runelite.cache.IndexType;
|
||||||
|
import net.runelite.cache.definitions.ScriptDefinition;
|
||||||
|
import net.runelite.cache.definitions.savers.ScriptSaver;
|
||||||
|
import net.runelite.cache.script.assembler.Assembler;
|
||||||
|
import org.apache.maven.plugin.AbstractMojo;
|
||||||
|
import org.apache.maven.plugin.MojoExecutionException;
|
||||||
|
import org.apache.maven.plugin.MojoFailureException;
|
||||||
|
import org.apache.maven.plugin.logging.Log;
|
||||||
|
import org.apache.maven.plugins.annotations.LifecyclePhase;
|
||||||
|
import org.apache.maven.plugins.annotations.Mojo;
|
||||||
|
import org.apache.maven.plugins.annotations.Parameter;
|
||||||
|
|
||||||
|
@Mojo(
|
||||||
|
name = "assemble",
|
||||||
|
defaultPhase = LifecyclePhase.GENERATE_RESOURCES
|
||||||
|
)
|
||||||
|
public class AssembleMojo extends AbstractMojo
|
||||||
|
{
|
||||||
|
@Parameter(required = true)
|
||||||
|
private File scriptDirectory;
|
||||||
|
|
||||||
|
@Parameter(required = true)
|
||||||
|
private File outputDirectory;
|
||||||
|
|
||||||
|
private final Log log = getLog();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute() throws MojoExecutionException, MojoFailureException
|
||||||
|
{
|
||||||
|
RuneLiteInstructions instructions = new RuneLiteInstructions();
|
||||||
|
instructions.init();
|
||||||
|
|
||||||
|
Assembler assembler = new Assembler(instructions);
|
||||||
|
ScriptSaver saver = new ScriptSaver();
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
File scriptOut = new File(outputDirectory, Integer.toString(IndexType.CLIENTSCRIPT.getNumber()));
|
||||||
|
scriptOut.mkdirs();
|
||||||
|
|
||||||
|
for (File scriptFile : scriptDirectory.listFiles((dir, name) -> name.endsWith(".rs2asm")))
|
||||||
|
{
|
||||||
|
log.debug("Assembling " + scriptFile);
|
||||||
|
|
||||||
|
try (FileInputStream fin = new FileInputStream(scriptFile))
|
||||||
|
{
|
||||||
|
File hashFile = new File(scriptDirectory, Files.getNameWithoutExtension(scriptFile.getName()) + ".hash");
|
||||||
|
if (!hashFile.exists())
|
||||||
|
{
|
||||||
|
throw new MojoExecutionException("Unable to find hash file for " + scriptFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
ScriptDefinition script = assembler.assemble(fin);
|
||||||
|
byte[] packedScript = saver.save(script);
|
||||||
|
|
||||||
|
File targetFile = new File(scriptOut, Integer.toString(script.getId()));
|
||||||
|
Files.write(packedScript, targetFile);
|
||||||
|
|
||||||
|
// Copy hash file
|
||||||
|
Files.copy(hashFile, new File(scriptOut, Integer.toString(script.getId()) + ".hash"));
|
||||||
|
|
||||||
|
++count;
|
||||||
|
}
|
||||||
|
catch (IOException ex)
|
||||||
|
{
|
||||||
|
throw new MojoFailureException("unable to open file", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("Assembled " + count + " scripts");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.script;
|
||||||
|
|
||||||
|
import java.io.DataOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import static java.lang.Integer.parseInt;
|
||||||
|
import org.apache.maven.plugin.AbstractMojo;
|
||||||
|
import org.apache.maven.plugin.MojoExecutionException;
|
||||||
|
import org.apache.maven.plugin.MojoFailureException;
|
||||||
|
import org.apache.maven.plugins.annotations.LifecyclePhase;
|
||||||
|
import org.apache.maven.plugins.annotations.Mojo;
|
||||||
|
import org.apache.maven.plugins.annotations.Parameter;
|
||||||
|
|
||||||
|
@Mojo(
|
||||||
|
name = "build-index",
|
||||||
|
defaultPhase = LifecyclePhase.GENERATE_RESOURCES
|
||||||
|
)
|
||||||
|
public class IndexMojo extends AbstractMojo
|
||||||
|
{
|
||||||
|
@Parameter(required = true)
|
||||||
|
private File archiveOverlayDirectory;
|
||||||
|
|
||||||
|
@Parameter(required = true)
|
||||||
|
private File indexFile;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute() throws MojoExecutionException, MojoFailureException
|
||||||
|
{
|
||||||
|
try (DataOutputStream fout = new DataOutputStream(new FileOutputStream(indexFile)))
|
||||||
|
{
|
||||||
|
for (File indexFolder : archiveOverlayDirectory.listFiles())
|
||||||
|
{
|
||||||
|
if (indexFolder.isDirectory())
|
||||||
|
{
|
||||||
|
int indexId = parseInt(indexFolder.getName());
|
||||||
|
for (File archiveFile : indexFolder.listFiles())
|
||||||
|
{
|
||||||
|
int archiveId;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
archiveId = parseInt(archiveFile.getName());
|
||||||
|
}
|
||||||
|
catch (NumberFormatException ex)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
fout.writeInt(indexId << 16 | archiveId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fout.writeInt(-1);
|
||||||
|
}
|
||||||
|
catch (IOException ex)
|
||||||
|
{
|
||||||
|
throw new MojoExecutionException("error build index file", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.script;
|
||||||
|
|
||||||
|
import static net.runelite.api.Opcodes.RUNELITE_EXECUTE;
|
||||||
|
import net.runelite.cache.script.Instructions;
|
||||||
|
|
||||||
|
public class RuneLiteInstructions extends Instructions
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void init()
|
||||||
|
{
|
||||||
|
super.init();
|
||||||
|
add(RUNELITE_EXECUTE, "runelite_callback", 0, 0, 1, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
70
runelite-scripts/pom.xml
Normal file
70
runelite-scripts/pom.xml
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
Copyright (c) 2018, Adam <Adam@sigterm.info>
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
-->
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>net.runelite</groupId>
|
||||||
|
<artifactId>runelite-parent</artifactId>
|
||||||
|
<version>1.2.14-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<groupId>net.runelite</groupId>
|
||||||
|
<artifactId>scripts</artifactId>
|
||||||
|
<name>RuneLite Scripts</name>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>net.runelite</groupId>
|
||||||
|
<artifactId>script-assembler-plugin</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>assemble</id>
|
||||||
|
<goals>
|
||||||
|
<goal>assemble</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<scriptDirectory>${project.basedir}/scripts</scriptDirectory>
|
||||||
|
<outputDirectory>${project.build.outputDirectory}/runelite</outputDirectory>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>build-index</id>
|
||||||
|
<goals>
|
||||||
|
<goal>build-index</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<archiveOverlayDirectory>${project.build.outputDirectory}/runelite</archiveOverlayDirectory>
|
||||||
|
<indexFile>${project.build.outputDirectory}/runelite/index</indexFile>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
||||||
1
runelite-scripts/scripts/OptionsPanelRebuilder.hash
Normal file
1
runelite-scripts/scripts/OptionsPanelRebuilder.hash
Normal file
@@ -0,0 +1 @@
|
|||||||
|
775947F74263107B801155B8D1DB27DBA42F08CE7A14CB07526C5D88288D89F5
|
||||||
451
runelite-scripts/scripts/OptionsPanelRebuilder.rs2asm
Normal file
451
runelite-scripts/scripts/OptionsPanelRebuilder.rs2asm
Normal file
@@ -0,0 +1,451 @@
|
|||||||
|
.id 909
|
||||||
|
.int_stack_count 2
|
||||||
|
.string_stack_count 0
|
||||||
|
.int_var_count 15
|
||||||
|
.string_var_count 0
|
||||||
|
load_int 73
|
||||||
|
load_int 73
|
||||||
|
iload 1
|
||||||
|
load_int 10551298
|
||||||
|
get_enum_value
|
||||||
|
istore 2
|
||||||
|
load_int 73
|
||||||
|
load_int 73
|
||||||
|
iload 1
|
||||||
|
load_int 10551306
|
||||||
|
get_enum_value
|
||||||
|
istore 3
|
||||||
|
load_int 73
|
||||||
|
load_int 73
|
||||||
|
iload 1
|
||||||
|
load_int 10551301
|
||||||
|
get_enum_value
|
||||||
|
istore 4
|
||||||
|
load_int 73
|
||||||
|
load_int 73
|
||||||
|
iload 1
|
||||||
|
load_int 10551308
|
||||||
|
get_enum_value
|
||||||
|
istore 5
|
||||||
|
load_int 103
|
||||||
|
load_int 105
|
||||||
|
load_int 1135
|
||||||
|
iload 1
|
||||||
|
get_enum_value
|
||||||
|
istore 6
|
||||||
|
load_int 103
|
||||||
|
load_int 105
|
||||||
|
load_int 1136
|
||||||
|
iload 1
|
||||||
|
get_enum_value
|
||||||
|
istore 7
|
||||||
|
load_int 0
|
||||||
|
istore 8
|
||||||
|
load_int 0
|
||||||
|
istore 9
|
||||||
|
load_int 0
|
||||||
|
istore 10
|
||||||
|
load_int 0
|
||||||
|
istore 11
|
||||||
|
load_int 0
|
||||||
|
istore 12
|
||||||
|
load_int 0
|
||||||
|
istore 13
|
||||||
|
get_varbit 4606
|
||||||
|
load_int 0
|
||||||
|
if_icmpne LABEL52
|
||||||
|
jump LABEL198
|
||||||
|
LABEL52:
|
||||||
|
get_varbit 4606
|
||||||
|
load_int 2
|
||||||
|
if_icmpeq LABEL56
|
||||||
|
jump LABEL70
|
||||||
|
LABEL56:
|
||||||
|
load_int 256
|
||||||
|
load_int 180
|
||||||
|
6200
|
||||||
|
load_int 256
|
||||||
|
load_int 180
|
||||||
|
set_zoom_distance
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
6202
|
||||||
|
load_int 50
|
||||||
|
set_camera_focal_point_height
|
||||||
|
jump LABEL83
|
||||||
|
LABEL70:
|
||||||
|
load_int 256
|
||||||
|
load_int 256
|
||||||
|
6200
|
||||||
|
load_int 256
|
||||||
|
load_int 256
|
||||||
|
set_zoom_distance
|
||||||
|
load_int 256
|
||||||
|
load_int 256
|
||||||
|
load_int 256
|
||||||
|
load_int 256
|
||||||
|
6202
|
||||||
|
load_int 50
|
||||||
|
set_camera_focal_point_height
|
||||||
|
LABEL83:
|
||||||
|
iload 2
|
||||||
|
load_int -1
|
||||||
|
if_icmpne LABEL87
|
||||||
|
jump LABEL197
|
||||||
|
LABEL87:
|
||||||
|
iload 3
|
||||||
|
load_int -1
|
||||||
|
if_icmpne LABEL91
|
||||||
|
jump LABEL197
|
||||||
|
LABEL91:
|
||||||
|
get_viewport_size
|
||||||
|
istore 9
|
||||||
|
istore 8
|
||||||
|
iload 8
|
||||||
|
iload 9
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
iload 2
|
||||||
|
widget_put_size_widget
|
||||||
|
iload 8
|
||||||
|
iload 9
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
iload 3
|
||||||
|
widget_put_size_widget
|
||||||
|
iload 4
|
||||||
|
load_int -1
|
||||||
|
if_icmpne LABEL110
|
||||||
|
jump LABEL187
|
||||||
|
LABEL110:
|
||||||
|
iload 5
|
||||||
|
load_int -1
|
||||||
|
if_icmpne LABEL114
|
||||||
|
jump LABEL187
|
||||||
|
LABEL114:
|
||||||
|
iload 0
|
||||||
|
widget_get_width_widget
|
||||||
|
istore 10
|
||||||
|
iload 0
|
||||||
|
widget_get_height_widget
|
||||||
|
istore 11
|
||||||
|
iload 10
|
||||||
|
iload 8
|
||||||
|
isub
|
||||||
|
istore 12
|
||||||
|
iload 11
|
||||||
|
iload 9
|
||||||
|
isub
|
||||||
|
istore 13
|
||||||
|
iload 12
|
||||||
|
load_int 0
|
||||||
|
if_icmplt LABEL132
|
||||||
|
jump LABEL134
|
||||||
|
LABEL132:
|
||||||
|
load_int 0
|
||||||
|
istore 12
|
||||||
|
LABEL134:
|
||||||
|
iload 13
|
||||||
|
load_int 0
|
||||||
|
if_icmplt LABEL138
|
||||||
|
jump LABEL140
|
||||||
|
LABEL138:
|
||||||
|
load_int 0
|
||||||
|
istore 13
|
||||||
|
LABEL140:
|
||||||
|
iload 6
|
||||||
|
iload 12
|
||||||
|
load_int 2
|
||||||
|
idiv
|
||||||
|
isub
|
||||||
|
iload 7
|
||||||
|
iload 13
|
||||||
|
load_int 2
|
||||||
|
idiv
|
||||||
|
isub
|
||||||
|
istore 7
|
||||||
|
istore 6
|
||||||
|
iload 6
|
||||||
|
load_int 0
|
||||||
|
if_icmplt LABEL156
|
||||||
|
jump LABEL158
|
||||||
|
LABEL156:
|
||||||
|
load_int 0
|
||||||
|
istore 6
|
||||||
|
LABEL158:
|
||||||
|
iload 7
|
||||||
|
load_int 0
|
||||||
|
if_icmplt LABEL162
|
||||||
|
jump LABEL164
|
||||||
|
LABEL162:
|
||||||
|
load_int 0
|
||||||
|
istore 7
|
||||||
|
LABEL164:
|
||||||
|
iload 6
|
||||||
|
iload 7
|
||||||
|
load_int 1
|
||||||
|
load_int 1
|
||||||
|
iload 4
|
||||||
|
widget_put_size_widget
|
||||||
|
iload 6
|
||||||
|
iload 7
|
||||||
|
load_int 1
|
||||||
|
load_int 1
|
||||||
|
iload 5
|
||||||
|
widget_put_size_widget
|
||||||
|
iload 1
|
||||||
|
load_int 73
|
||||||
|
load_int 73
|
||||||
|
iload 1
|
||||||
|
load_int 10551307
|
||||||
|
get_enum_value
|
||||||
|
iload 5
|
||||||
|
iload 6
|
||||||
|
iload 7
|
||||||
|
invoke 910
|
||||||
|
jump LABEL197
|
||||||
|
LABEL187:
|
||||||
|
iload 1
|
||||||
|
load_int 73
|
||||||
|
load_int 73
|
||||||
|
iload 1
|
||||||
|
load_int 10551307
|
||||||
|
get_enum_value
|
||||||
|
iload 3
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
invoke 910
|
||||||
|
LABEL197:
|
||||||
|
jump LABEL293
|
||||||
|
LABEL198:
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
6200
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
6202
|
||||||
|
get_varc 73
|
||||||
|
load_int 195
|
||||||
|
load_string "fixedOuterZoomLimit"
|
||||||
|
runelite_callback
|
||||||
|
if_icmpge LABEL210
|
||||||
|
jump LABEL226
|
||||||
|
LABEL210:
|
||||||
|
get_varc 73
|
||||||
|
load_int 700
|
||||||
|
if_icmple LABEL214
|
||||||
|
jump LABEL226
|
||||||
|
LABEL214:
|
||||||
|
get_varc 74
|
||||||
|
load_int 175
|
||||||
|
load_string "resizableOuterZoomLimit"
|
||||||
|
runelite_callback
|
||||||
|
if_icmpge LABEL218
|
||||||
|
jump LABEL226
|
||||||
|
LABEL218:
|
||||||
|
get_varc 74
|
||||||
|
load_int 715
|
||||||
|
if_icmple LABEL222
|
||||||
|
jump LABEL226
|
||||||
|
LABEL222:
|
||||||
|
get_varc 73
|
||||||
|
get_varc 74
|
||||||
|
invoke 42
|
||||||
|
jump LABEL229
|
||||||
|
LABEL226:
|
||||||
|
load_int 256
|
||||||
|
load_int 320
|
||||||
|
invoke 42
|
||||||
|
LABEL229:
|
||||||
|
get_viewport_size
|
||||||
|
istore 9
|
||||||
|
istore 8
|
||||||
|
iload 2
|
||||||
|
load_int -1
|
||||||
|
if_icmpne LABEL236
|
||||||
|
jump LABEL293
|
||||||
|
LABEL236:
|
||||||
|
iload 3
|
||||||
|
load_int -1
|
||||||
|
if_icmpne LABEL240
|
||||||
|
jump LABEL293
|
||||||
|
LABEL240:
|
||||||
|
iload 8
|
||||||
|
iload 9
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
iload 2
|
||||||
|
widget_put_size_widget
|
||||||
|
iload 8
|
||||||
|
iload 9
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
iload 3
|
||||||
|
widget_put_size_widget
|
||||||
|
iload 4
|
||||||
|
load_int -1
|
||||||
|
if_icmpne LABEL256
|
||||||
|
jump LABEL283
|
||||||
|
LABEL256:
|
||||||
|
iload 5
|
||||||
|
load_int -1
|
||||||
|
if_icmpne LABEL260
|
||||||
|
jump LABEL283
|
||||||
|
LABEL260:
|
||||||
|
iload 6
|
||||||
|
iload 7
|
||||||
|
load_int 1
|
||||||
|
load_int 1
|
||||||
|
iload 4
|
||||||
|
widget_put_size_widget
|
||||||
|
iload 6
|
||||||
|
iload 7
|
||||||
|
load_int 1
|
||||||
|
load_int 1
|
||||||
|
iload 5
|
||||||
|
widget_put_size_widget
|
||||||
|
iload 1
|
||||||
|
load_int 73
|
||||||
|
load_int 73
|
||||||
|
iload 1
|
||||||
|
load_int 10551307
|
||||||
|
get_enum_value
|
||||||
|
iload 5
|
||||||
|
iload 6
|
||||||
|
iload 7
|
||||||
|
invoke 910
|
||||||
|
jump LABEL293
|
||||||
|
LABEL283:
|
||||||
|
iload 1
|
||||||
|
load_int 73
|
||||||
|
load_int 73
|
||||||
|
iload 1
|
||||||
|
load_int 10551307
|
||||||
|
get_enum_value
|
||||||
|
iload 3
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
invoke 910
|
||||||
|
LABEL293:
|
||||||
|
load_int 73
|
||||||
|
load_int 73
|
||||||
|
iload 1
|
||||||
|
load_int 10551309
|
||||||
|
get_enum_value
|
||||||
|
istore 14
|
||||||
|
iload 14
|
||||||
|
load_int -1
|
||||||
|
if_icmpne LABEL303
|
||||||
|
jump LABEL347
|
||||||
|
LABEL303:
|
||||||
|
invoke 1972
|
||||||
|
load_int 0
|
||||||
|
if_icmpeq LABEL307
|
||||||
|
jump LABEL341
|
||||||
|
LABEL307:
|
||||||
|
iload 14
|
||||||
|
widget_get_index_widget
|
||||||
|
load_int 1
|
||||||
|
if_icmpeq LABEL312
|
||||||
|
jump LABEL341
|
||||||
|
LABEL312:
|
||||||
|
get_varc 173
|
||||||
|
load_int -2
|
||||||
|
if_icmpeq LABEL316
|
||||||
|
jump LABEL323
|
||||||
|
LABEL316:
|
||||||
|
load_int 512
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
load_int 1
|
||||||
|
iload 14
|
||||||
|
widget_put_size_widget
|
||||||
|
jump LABEL340
|
||||||
|
LABEL323:
|
||||||
|
get_varc 173
|
||||||
|
load_int -3
|
||||||
|
if_icmpeq LABEL327
|
||||||
|
jump LABEL334
|
||||||
|
LABEL327:
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
load_int 1
|
||||||
|
load_int 1
|
||||||
|
iload 14
|
||||||
|
widget_put_size_widget
|
||||||
|
jump LABEL340
|
||||||
|
LABEL334:
|
||||||
|
load_int 512
|
||||||
|
load_int 334
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
iload 14
|
||||||
|
widget_put_size_widget
|
||||||
|
LABEL340:
|
||||||
|
jump LABEL347
|
||||||
|
LABEL341:
|
||||||
|
load_int 512
|
||||||
|
load_int 334
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
iload 14
|
||||||
|
widget_put_size_widget
|
||||||
|
LABEL347:
|
||||||
|
load_int 73
|
||||||
|
load_int 73
|
||||||
|
iload 1
|
||||||
|
load_int 10551311
|
||||||
|
get_enum_value
|
||||||
|
istore 14
|
||||||
|
iload 14
|
||||||
|
load_int -1
|
||||||
|
if_icmpne LABEL357
|
||||||
|
jump LABEL390
|
||||||
|
LABEL357:
|
||||||
|
load_int 73
|
||||||
|
load_int 73
|
||||||
|
iload 1
|
||||||
|
load_int 10551303
|
||||||
|
get_enum_value
|
||||||
|
widget_get_index_widget
|
||||||
|
load_int 1
|
||||||
|
if_icmpeq LABEL366
|
||||||
|
jump LABEL384
|
||||||
|
LABEL366:
|
||||||
|
get_varbit 4692
|
||||||
|
load_int 0
|
||||||
|
if_icmpne LABEL370
|
||||||
|
jump LABEL377
|
||||||
|
LABEL370:
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
load_int 2
|
||||||
|
load_int 0
|
||||||
|
iload 14
|
||||||
|
widget_put_position_widget
|
||||||
|
jump LABEL383
|
||||||
|
LABEL377:
|
||||||
|
load_int 0
|
||||||
|
load_int 36
|
||||||
|
load_int 2
|
||||||
|
load_int 0
|
||||||
|
iload 14
|
||||||
|
widget_put_position_widget
|
||||||
|
LABEL383:
|
||||||
|
jump LABEL390
|
||||||
|
LABEL384:
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
load_int 2
|
||||||
|
load_int 0
|
||||||
|
iload 14
|
||||||
|
widget_put_position_widget
|
||||||
|
LABEL390:
|
||||||
|
iload 0
|
||||||
|
iload 1
|
||||||
|
invoke 920
|
||||||
|
return
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
3DAFC5BFBE17305C5FA503EB6D749299500F9FAF6549309649C3AC5CEC4A8FCC
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
.id 1048
|
||||||
|
.int_stack_count 3
|
||||||
|
.string_stack_count 0
|
||||||
|
.int_var_count 8
|
||||||
|
.string_var_count 0
|
||||||
|
get_varbit 4606
|
||||||
|
load_int 0
|
||||||
|
if_icmpne LABEL4
|
||||||
|
jump LABEL5
|
||||||
|
LABEL4:
|
||||||
|
return
|
||||||
|
LABEL5:
|
||||||
|
load_int 320
|
||||||
|
istore 3
|
||||||
|
load_int 256
|
||||||
|
istore 4
|
||||||
|
iload 1
|
||||||
|
widget_get_width_widget
|
||||||
|
iload 0
|
||||||
|
widget_get_width_widget
|
||||||
|
isub
|
||||||
|
istore 5
|
||||||
|
load_int 0
|
||||||
|
iload 2
|
||||||
|
invoke 1045
|
||||||
|
istore 2
|
||||||
|
iload 1
|
||||||
|
widget_get_width_widget
|
||||||
|
iload 0
|
||||||
|
widget_get_width_widget
|
||||||
|
isub
|
||||||
|
iload 2
|
||||||
|
invoke 1046
|
||||||
|
istore 2
|
||||||
|
load_int 715
|
||||||
|
load_int 175
|
||||||
|
load_string "resizableOuterZoomLimit"
|
||||||
|
runelite_callback
|
||||||
|
isub
|
||||||
|
istore 6
|
||||||
|
load_int 700
|
||||||
|
load_int 195
|
||||||
|
load_string "fixedOuterZoomLimit"
|
||||||
|
runelite_callback
|
||||||
|
isub
|
||||||
|
istore 7
|
||||||
|
iload 2
|
||||||
|
iload 6
|
||||||
|
imul
|
||||||
|
iload 5
|
||||||
|
idiv
|
||||||
|
load_int 175
|
||||||
|
load_string "resizableOuterZoomLimit"
|
||||||
|
runelite_callback
|
||||||
|
iadd
|
||||||
|
istore 3
|
||||||
|
iload 2
|
||||||
|
iload 7
|
||||||
|
imul
|
||||||
|
iload 5
|
||||||
|
idiv
|
||||||
|
load_int 195
|
||||||
|
load_string "fixedOuterZoomLimit"
|
||||||
|
runelite_callback
|
||||||
|
iadd
|
||||||
|
istore 4
|
||||||
|
iload 4
|
||||||
|
iload 3
|
||||||
|
invoke 42
|
||||||
|
return
|
||||||
1
runelite-scripts/scripts/OptionsPanelZoomUpdater.hash
Normal file
1
runelite-scripts/scripts/OptionsPanelZoomUpdater.hash
Normal file
@@ -0,0 +1 @@
|
|||||||
|
91C88AB544E934FB542E358885AB7A0F467D19E03595EDDFC9209FF02BFE5A5F
|
||||||
67
runelite-scripts/scripts/OptionsPanelZoomUpdater.rs2asm
Normal file
67
runelite-scripts/scripts/OptionsPanelZoomUpdater.rs2asm
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
.id 1049
|
||||||
|
.int_stack_count 0
|
||||||
|
.string_stack_count 0
|
||||||
|
.int_var_count 6
|
||||||
|
.string_var_count 0
|
||||||
|
load_int 715
|
||||||
|
load_int 175
|
||||||
|
load_string "resizableOuterZoomLimit"
|
||||||
|
runelite_callback
|
||||||
|
isub
|
||||||
|
istore 0
|
||||||
|
load_int 700
|
||||||
|
load_int 195
|
||||||
|
load_string "fixedOuterZoomLimit"
|
||||||
|
runelite_callback
|
||||||
|
isub
|
||||||
|
istore 1
|
||||||
|
load_int 17104904
|
||||||
|
widget_get_width_widget
|
||||||
|
load_int 17104909
|
||||||
|
widget_get_width_widget
|
||||||
|
isub
|
||||||
|
istore 2
|
||||||
|
load_int 0
|
||||||
|
istore 3
|
||||||
|
load_int 0
|
||||||
|
istore 4
|
||||||
|
get_viewport_size
|
||||||
|
istore 4
|
||||||
|
istore 3
|
||||||
|
load_int 0
|
||||||
|
istore 5
|
||||||
|
iload 3
|
||||||
|
load_int 334
|
||||||
|
if_icmpgt LABEL27
|
||||||
|
jump LABEL36
|
||||||
|
LABEL27:
|
||||||
|
get_varc 74
|
||||||
|
load_int 175
|
||||||
|
load_string "resizableOuterZoomLimit"
|
||||||
|
runelite_callback
|
||||||
|
isub
|
||||||
|
iload 2
|
||||||
|
imul
|
||||||
|
iload 0
|
||||||
|
idiv
|
||||||
|
istore 5
|
||||||
|
jump LABEL44
|
||||||
|
LABEL36:
|
||||||
|
get_varc 73
|
||||||
|
load_int 195
|
||||||
|
load_string "fixedOuterZoomLimit"
|
||||||
|
runelite_callback
|
||||||
|
isub
|
||||||
|
iload 2
|
||||||
|
imul
|
||||||
|
iload 1
|
||||||
|
idiv
|
||||||
|
istore 5
|
||||||
|
LABEL44:
|
||||||
|
iload 5
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
load_int 0
|
||||||
|
load_int 17104909
|
||||||
|
widget_put_position_widget
|
||||||
|
return
|
||||||
1
runelite-scripts/scripts/ScrollWheelZoomHandler.hash
Normal file
1
runelite-scripts/scripts/ScrollWheelZoomHandler.hash
Normal file
@@ -0,0 +1 @@
|
|||||||
|
E9536E0A6FD51C058A40D644FD0AD28A93778FD53873601DCCE04C97DD835BB0
|
||||||
87
runelite-scripts/scripts/ScrollWheelZoomHandler.rs2asm
Normal file
87
runelite-scripts/scripts/ScrollWheelZoomHandler.rs2asm
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
.id 42
|
||||||
|
.int_stack_count 2
|
||||||
|
.string_stack_count 0
|
||||||
|
.int_var_count 6
|
||||||
|
.string_var_count 0
|
||||||
|
get_varbit 4606
|
||||||
|
load_int 0
|
||||||
|
if_icmpne LABEL4
|
||||||
|
jump LABEL5
|
||||||
|
LABEL4:
|
||||||
|
return
|
||||||
|
LABEL5:
|
||||||
|
load_int 700
|
||||||
|
iload 0
|
||||||
|
invoke 1046
|
||||||
|
istore 0
|
||||||
|
load_int 195
|
||||||
|
load_string "fixedOuterZoomLimit"
|
||||||
|
runelite_callback
|
||||||
|
iload 0
|
||||||
|
invoke 1045
|
||||||
|
istore 0
|
||||||
|
load_int 715
|
||||||
|
iload 1
|
||||||
|
invoke 1046
|
||||||
|
istore 1
|
||||||
|
load_int 175
|
||||||
|
load_string "resizableOuterZoomLimit"
|
||||||
|
runelite_callback
|
||||||
|
iload 1
|
||||||
|
invoke 1045
|
||||||
|
istore 1
|
||||||
|
iload 0
|
||||||
|
iload 1
|
||||||
|
set_zoom_distance
|
||||||
|
load_int 0
|
||||||
|
istore 2
|
||||||
|
load_int 0
|
||||||
|
istore 3
|
||||||
|
get_viewport_size
|
||||||
|
istore 3
|
||||||
|
istore 2
|
||||||
|
iload 3
|
||||||
|
load_int 334
|
||||||
|
isub
|
||||||
|
istore 4
|
||||||
|
iload 4
|
||||||
|
load_int 0
|
||||||
|
if_icmplt LABEL39
|
||||||
|
jump LABEL42
|
||||||
|
LABEL39:
|
||||||
|
load_int 0
|
||||||
|
istore 4
|
||||||
|
jump LABEL48
|
||||||
|
LABEL42:
|
||||||
|
iload 4
|
||||||
|
load_int 100
|
||||||
|
if_icmpgt LABEL46
|
||||||
|
jump LABEL48
|
||||||
|
LABEL46:
|
||||||
|
load_int 100
|
||||||
|
istore 4
|
||||||
|
LABEL48:
|
||||||
|
iload 0
|
||||||
|
iload 1
|
||||||
|
iload 0
|
||||||
|
isub
|
||||||
|
iload 4
|
||||||
|
imul
|
||||||
|
load_int 100
|
||||||
|
idiv
|
||||||
|
iadd
|
||||||
|
istore 5
|
||||||
|
load_int 25
|
||||||
|
load_int 25
|
||||||
|
iload 5
|
||||||
|
imul
|
||||||
|
load_int 256
|
||||||
|
idiv
|
||||||
|
iadd
|
||||||
|
set_camera_focal_point_height
|
||||||
|
iload 0
|
||||||
|
iload 1
|
||||||
|
put_varc 74
|
||||||
|
put_varc 73
|
||||||
|
invoke 1049
|
||||||
|
return
|
||||||
@@ -26,7 +26,7 @@ package net.runelite.rs.api;
|
|||||||
|
|
||||||
import net.runelite.mapping.Import;
|
import net.runelite.mapping.Import;
|
||||||
|
|
||||||
public interface RSCacheableNode
|
public interface RSCacheableNode extends RSNode
|
||||||
{
|
{
|
||||||
@Import("next")
|
@Import("next")
|
||||||
RSCacheableNode getNext();
|
RSCacheableNode getNext();
|
||||||
|
|||||||
@@ -436,4 +436,28 @@ public interface RSClient extends RSGameEngine, Client
|
|||||||
|
|
||||||
@Construct
|
@Construct
|
||||||
RSItem createItem();
|
RSItem createItem();
|
||||||
|
|
||||||
|
@Import("intStackSize")
|
||||||
|
@Override
|
||||||
|
int getIntStackSize();
|
||||||
|
|
||||||
|
@Import("intStackSize")
|
||||||
|
@Override
|
||||||
|
void setIntStackSize(int stackSize);
|
||||||
|
|
||||||
|
@Import("intStack")
|
||||||
|
@Override
|
||||||
|
int[] getIntStack();
|
||||||
|
|
||||||
|
@Import("scriptStringStackSize")
|
||||||
|
@Override
|
||||||
|
int getStringStackSize();
|
||||||
|
|
||||||
|
@Import("scriptStringStackSize")
|
||||||
|
@Override
|
||||||
|
void setStringStackSize(int stackSize);
|
||||||
|
|
||||||
|
@Import("scriptStringStack")
|
||||||
|
@Override
|
||||||
|
String[] getStringStack();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@@ -22,9 +22,12 @@
|
|||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
package net.runelite.rs.api;
|
||||||
|
|
||||||
public class If_ICmpEQ extends If
|
import net.runelite.mapping.Import;
|
||||||
|
|
||||||
|
public interface RSIndexData extends RSIndexDataBase
|
||||||
{
|
{
|
||||||
|
@Import("index")
|
||||||
|
int getIndex();
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.rs.api;
|
||||||
|
|
||||||
|
import net.runelite.mapping.Import;
|
||||||
|
|
||||||
|
public interface RSIndexDataBase
|
||||||
|
{
|
||||||
|
@Import("getConfigData")
|
||||||
|
byte[] getConfigData(int archiveId, int fileId);
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018 Abex
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.rs.api;
|
||||||
|
|
||||||
|
import net.runelite.api.Script;
|
||||||
|
import net.runelite.mapping.Import;
|
||||||
|
|
||||||
|
public interface RSScript extends Script, RSCacheableNode
|
||||||
|
{
|
||||||
|
@Import("intOperands")
|
||||||
|
@Override
|
||||||
|
int[] getIntOperands();
|
||||||
|
|
||||||
|
@Import("instructions")
|
||||||
|
@Override
|
||||||
|
int[] getInstructions();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user