diff --git a/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/ScriptOpcodesTransformer.java b/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/ScriptOpcodesTransformer.java new file mode 100644 index 0000000000..aa422f83bd --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/ScriptOpcodesTransformer.java @@ -0,0 +1,152 @@ +package net.runelite.deob.deobfuscators.transformers; + +import java.util.ListIterator; +import net.runelite.asm.ClassFile; +import net.runelite.asm.ClassGroup; +import net.runelite.asm.Field; +import net.runelite.asm.Method; +import net.runelite.asm.Type; +import net.runelite.asm.attributes.Code; +import net.runelite.asm.attributes.code.Instruction; +import net.runelite.asm.attributes.code.Instructions; +import net.runelite.asm.attributes.code.instruction.types.PushConstantInstruction; +import net.runelite.asm.attributes.code.instructions.GetStatic; +import net.runelite.asm.attributes.code.instructions.ILoad; +import net.runelite.asm.attributes.code.instructions.IfICmpEq; +import net.runelite.asm.attributes.code.instructions.IfICmpNe; +import net.runelite.asm.attributes.code.instructions.LDC; +import net.runelite.asm.attributes.code.instructions.PutStatic; +import net.runelite.asm.attributes.code.instructions.VReturn; +import net.runelite.asm.pool.Class; +import net.runelite.asm.signature.Signature; +import net.runelite.deob.Transformer; +import net.runelite.deob.deobfuscators.transformers.scriptopcodes.ScriptOpcode; +import org.objectweb.asm.Opcodes; +import static org.objectweb.asm.Opcodes.ACC_FINAL; +import static org.objectweb.asm.Opcodes.ACC_PUBLIC; +import static org.objectweb.asm.Opcodes.ACC_STATIC; + +public class ScriptOpcodesTransformer implements Transformer // robots in disguise +{ + private static final String SCRIPT_OPCODES = "net/runelite/rs/ScriptOpcodes"; + + @Override + public void transform(ClassGroup group) + { + initializeOpcodesClassFile(group); + + for (ClassFile cf : group.getClasses()) + { + if (cf.getName().startsWith("net/runelite/rs")) + { + continue; + } + + for (Method m : cf.getMethods()) + { + if (!m.isStatic()) + { + continue; + } + + if (!m.getDescriptor().getArguments().contains(new Type("LScript;")) && !m.getDescriptor().getArguments().contains(new Type("LScriptEvent;"))) + { + continue; + } + + boolean varIndexIsKnownAnd0 = m.getDescriptor().getArguments().contains(new Type("LScript;")); + + Code code = m.getCode(); + Instructions ins = code.getInstructions(); + ListIterator it = ins.getInstructions().listIterator(); + + Instruction i; + while(it.hasNext()) + { + i = it.next(); + + if (!(i instanceof ILoad) || (varIndexIsKnownAnd0 && ((ILoad) i).getVariableIndex() != 0)) + { + continue; + } + + i = it.next(); + + if (!(i instanceof PushConstantInstruction) || + !(((PushConstantInstruction) i).getConstant() instanceof Number)) + { + continue; + } + + int val = ((Number) ((PushConstantInstruction) i).getConstant()).intValue(); + String name = ScriptOpcode.nameFromID(val); + + i = it.next(); + + if (name == null || !(i instanceof IfICmpNe || i instanceof IfICmpEq)) + { + continue; + } + + it.previous(); + it.previous(); + + net.runelite.asm.pool.Field pool = new net.runelite.asm.pool.Field( + new Class(SCRIPT_OPCODES), + name, + Type.INT + ); + + GetStatic getStatic = new GetStatic(ins, pool); + it.set(getStatic); + } + } + } + } + + private static void initializeOpcodesClassFile(ClassGroup group) + { + ClassFile scriptOpcodes = group.findClass(SCRIPT_OPCODES); + if (scriptOpcodes == null) + { + scriptOpcodes = new ClassFile(group); + scriptOpcodes.setName(SCRIPT_OPCODES); + scriptOpcodes.setSuperName(Type.OBJECT.getInternalName()); + scriptOpcodes.setAccess(Opcodes.ACC_PUBLIC); + group.addClass(scriptOpcodes); + } + else + { + scriptOpcodes.getFields().clear(); + } + + Method clinit = scriptOpcodes.findMethod(""); + if (clinit == null) + { + clinit = new Method(scriptOpcodes, "", new Signature("()V")); + clinit.setStatic(true); + Code code = new Code(clinit); + code.setMaxStack(1); + clinit.setCode(code); + scriptOpcodes.addMethod(clinit); + } + + Code code = clinit.getCode(); + Instructions ins = code.getInstructions(); + + for (ScriptOpcode opcode : ScriptOpcode.values()) + { + Field field = new Field(scriptOpcodes, opcode.name(), Type.INT); + field.setAccessFlags(ACC_PUBLIC | ACC_STATIC | ACC_FINAL); + field.setValue(opcode.opcode); + scriptOpcodes.addField(field); + + LDC ldc = new LDC(ins, opcode.opcode); + PutStatic put = new PutStatic(ins, field); + ins.addInstruction(0, ldc); + ins.addInstruction(1, put); + } + + ins.addInstruction(new VReturn(ins)); + } +} diff --git a/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/scriptopcodes/ScriptOpcode.java b/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/scriptopcodes/ScriptOpcode.java new file mode 100644 index 0000000000..5033c63e43 --- /dev/null +++ b/deobfuscator/src/main/java/net/runelite/deob/deobfuscators/transformers/scriptopcodes/ScriptOpcode.java @@ -0,0 +1,511 @@ +package net.runelite.deob.deobfuscators.transformers.scriptopcodes; + +import com.google.common.collect.ImmutableMap; +import java.util.Map; + +public enum ScriptOpcode +{ + // This class is pretty much the same as net.runelite.cache.script.Opcodes, and should be updated alongside that + + ICONST(0), + GET_VARP(1), + SET_VARP(2), + SCONST(3), + JUMP(6), + IF_ICMPNE(7), + IF_ICMPEQ(8), + IF_ICMPLT(9), + IF_ICMPGT(10), + RETURN(21), + GET_VARBIT(25), + SET_VARBIT(27), + IF_ICMPLE(31), + IF_ICMPGE(32), + ILOAD(33), + ISTORE(34), + SLOAD(35), + SSTORE(36), + JOIN_STRING(37), + POP_INT(38), + POP_STRING(39), + INVOKE(40), + GET_VARC_INT(42), + SET_VARC_INT(43), + DEFINE_ARRAY(44), + GET_ARRAY_INT(45), + SET_ARRAY_INT(46), + GET_VARC_STRING_OLD(47), + SET_VARC_STRING_OLD(48), + GET_VARC_STRING(49), + SET_VARC_STRING(50), + SWITCH(60), + CC_CREATE(100), + CC_DELETE(101), + CC_DELETEALL(102), + CC_FIND(200), + IF_FIND(201), + CC_SETPOSITION(1000), + CC_SETSIZE(1001), + CC_SETHIDE(1003), + CC_SETNOCLICKTHROUGH(1005), + CC_SETSCROLLPOS(1100), + CC_SETCOLOUR(1101), + CC_SETFILL(1102), + CC_SETTRANS(1103), + CC_SETLINEWID(1104), + CC_SETGRAPHIC(1105), + CC_SET2DANGLE(1106), + CC_SETTILING(1107), + CC_SETMODEL(1108), + CC_SETMODELANGLE(1109), + CC_SETMODELANIM(1110), + CC_SETMODELORTHOG(1111), + CC_SETTEXT(1112), + CC_SETTEXTFONT(1113), + CC_SETTEXTALIGN(1114), + CC_SETTEXTSHADOW(1115), + CC_SETOUTLINE(1116), + CC_SETGRAPHICSHADOW(1117), + CC_SETVFLIP(1118), + CC_SETHFLIP(1119), + CC_SETSCROLLSIZE(1120), + CC_RESUME_PAUSEBUTTON(1121), + CC_SETFILLCOLOUR(1123), + CC_SETLINEDIRECTION(1126), + CC_SETOBJECT(1200), + CC_SETNPCHEAD(1201), + CC_SETPLAYERHEAD_SELF(1202), + CC_SETOBJECT_NONUM(1205), + CC_SETOBJECT_ALWAYS_NUM(1212), + CC_SETOP(1300), + CC_SETDRAGGABLE(1301), + CC_SETDRAGGABLEBEHAVIOR(1302), + CC_SETDRAGDEADZONE(1303), + CC_SETDRAGDEADTIME(1304), + CC_SETOPBASE(1305), + CC_SETTARGETVERB(1306), + CC_CLEAROPS(1307), + CC_SETONCLICK(1400), + CC_SETONHOLD(1401), + CC_SETONRELEASE(1402), + CC_SETONMOUSEOVER(1403), + CC_SETONMOUSELEAVE(1404), + CC_SETONDRAG(1405), + CC_SETONTARGETLEAVE(1406), + CC_SETONVARTRANSMIT(1407), + CC_SETONTIMER(1408), + CC_SETONOP(1409), + CC_SETONDRAGCOMPLETE(1410), + CC_SETONCLICKREPEAT(1411), + CC_SETONMOUSEREPEAT(1412), + CC_SETONINVTRANSMIT(1414), + CC_SETONSTATTRANSMIT(1415), + CC_SETONTARGETENTER(1416), + CC_SETONSCROLLWHEEL(1417), + CC_SETONCHATTRANSMIT(1418), + CC_SETONKEY(1419), + CC_SETONFRIENDTRANSMIT(1420), + CC_SETONCLANTRANSMIT(1421), + CC_SETONMISCTRANSMIT(1422), + CC_SETONDIALOGABORT(1423), + CC_SETONSUBCHANGE(1424), + CC_SETONSTOCKTRANSMIT(1425), + CC_SETONRESIZE(1427), + CC_GETX(1500), + CC_GETY(1501), + CC_GETWIDTH(1502), + CC_GETHEIGHT(1503), + CC_GETHIDE(1504), + CC_GETLAYER(1505), + CC_GETSCROLLX(1600), + CC_GETSCROLLY(1601), + CC_GETTEXT(1602), + CC_GETSCROLLWIDTH(1603), + CC_GETSCROLLHEIGHT(1604), + CC_GETMODELZOOM(1605), + CC_GETMODELANGLE_X(1606), + CC_GETMODELANGLE_Z(1607), + CC_GETMODELANGLE_Y(1608), + CC_GETTRANS(1609), + CC_GETCOLOUR(1611), + CC_GETFILLCOLOUR(1612), + CC_GETINVOBJECT(1700), + CC_GETINVCOUNT(1701), + CC_GETID(1702), + CC_GETTARGETMASK(1800), + CC_GETOP(1801), + CC_GETOPBASE(1802), + CC_CALLONRESIZE(1927), + IF_SETPOSITION(2000), + IF_SETSIZE(2001), + IF_SETHIDE(2003), + IF_SETNOCLICKTHROUGH(2005), + IF_SETSCROLLPOS(2100), + IF_SETCOLOUR(2101), + IF_SETFILL(2102), + IF_SETTRANS(2103), + IF_SETLINEWID(2104), + IF_SETGRAPHIC(2105), + IF_SET2DANGLE(2106), + IF_SETTILING(2107), + IF_SETMODEL(2108), + IF_SETMODELANGLE(2109), + IF_SETMODELANIM(2110), + IF_SETMODELORTHOG(2111), + IF_SETTEXT(2112), + IF_SETTEXTFONT(2113), + IF_SETTEXTALIGN(2114), + IF_SETTEXTSHADOW(2115), + IF_SETOUTLINE(2116), + IF_SETGRAPHICSHADOW(2117), + IF_SETVFLIP(2118), + IF_SETHFLIP(2119), + IF_SETSCROLLSIZE(2120), + IF_RESUME_PAUSEBUTTON(2121), + IF_SETFILLCOLOUR(2123), + IF_SETLINEDIRECTION(2126), + IF_SETOBJECT(2200), + IF_SETNPCHEAD(2201), + IF_SETPLAYERHEAD_SELF(2202), + IF_SETOBJECT_NONUM(2205), + IF_SETOBJECT_ALWAYS_NUM(2212), + IF_SETOP(2300), + IF_SETDRAGGABLE(2301), + IF_SETDRAGGABLEBEHAVIOR(2302), + IF_SETDRAGDEADZONE(2303), + IF_SETDRAGDEADTIME(2304), + IF_SETOPBASE(2305), + IF_SETTARGETVERB(2306), + IF_CLEAROPS(2307), + IF_SETOPKEY(2350), + IF_SETOPTKEY(2351), + IF_SETOPKEYRATE(2352), + IF_SETOPTKEYRATE(2353), + IF_SETOPKEYIGNOREHELD(2354), + IF_SETOPTKEYIGNOREHELD(2355), + IF_SETONCLICK(2400), + IF_SETONHOLD(2401), + IF_SETONRELEASE(2402), + IF_SETONMOUSEOVER(2403), + IF_SETONMOUSELEAVE(2404), + IF_SETONDRAG(2405), + IF_SETONTARGETLEAVE(2406), + IF_SETONVARTRANSMIT(2407), + IF_SETONTIMER(2408), + IF_SETONOP(2409), + IF_SETONDRAGCOMPLETE(2410), + IF_SETONCLICKREPEAT(2411), + IF_SETONMOUSEREPEAT(2412), + IF_SETONINVTRANSMIT(2414), + IF_SETONSTATTRANSMIT(2415), + IF_SETONTARGETENTER(2416), + IF_SETONSCROLLWHEEL(2417), + IF_SETONCHATTRANSMIT(2418), + IF_SETONKEY(2419), + IF_SETONFRIENDTRANSMIT(2420), + IF_SETONCLANTRANSMIT(2421), + IF_SETONMISCTRANSMIT(2422), + IF_SETONDIALOGABORT(2423), + IF_SETONSUBCHANGE(2424), + IF_SETONSTOCKTRANSMIT(2425), + IF_SETONRESIZE(2427), + IF_GETX(2500), + IF_GETY(2501), + IF_GETWIDTH(2502), + IF_GETHEIGHT(2503), + IF_GETHIDE(2504), + IF_GETLAYER(2505), + IF_GETSCROLLX(2600), + IF_GETSCROLLY(2601), + IF_GETTEXT(2602), + IF_GETSCROLLWIDTH(2603), + IF_GETSCROLLHEIGHT(2604), + IF_GETMODELZOOM(2605), + IF_GETMODELANGLE_X(2606), + IF_GETMODELANGLE_Z(2607), + IF_GETMODELANGLE_Y(2608), + IF_GETTRANS(2609), + IF_GETCOLOUR(2611), + IF_GETFILLCOLOUR(2612), + IF_GETINVOBJECT(2700), + IF_GETINVCOUNT(2701), + IF_HASSUB(2702), + IF_GETTOP(2706), + IF_GETTARGETMASK(2800), + IF_GETOP(2801), + IF_GETOPBASE(2802), + IF_CALLONRESIZE(2927), + MES(3100), + ANIM(3101), + IF_CLOSE(3103), + RESUME_COUNTDIALOG(3104), + RESUME_NAMEDIALOG(3105), + RESUME_STRINGDIALOG(3106), + OPPLAYER(3107), + IF_DRAGPICKUP(3108), + CC_DRAGPICKUP(3109), + MOUSECAM(3110), + GETREMOVEROOFS(3111), + SETREMOVEROOFS(3112), + OPENURL(3113), + RESUME_OBJDIALOG(3115), + BUG_REPORT(3116), + SETSHIFTCLICKDROP(3117), + SETSHOWMOUSEOVERTEXT(3118), + RENDERSELF(3119), + SETSHOWMOUSECROSS(3125), + SETSHOWLOADINGMESSAGES(3126), + SETTAPTODROP(3127), + GETTAPTODROP(3128), + GETCANVASSIZE(3132), + SETHIDEUSERNAME(3141), + GETHIDEUSERNAME(3142), + SETREMEMBERUSERNAME(3143), + GETREMEMBERUSERNAME(3144), + SOUND_SYNTH(3200), + SOUND_SONG(3201), + SOUND_JINGLE(3202), + CLIENTCLOCK(3300), + INV_GETOBJ(3301), + INV_GETNUM(3302), + INV_TOTAL(3303), + INV_SIZE(3304), + STAT(3305), + STAT_BASE(3306), + STAT_XP(3307), + COORD(3308), + COORDX(3309), + COORDZ(3310), + COORDY(3311), + MAP_MEMBERS(3312), + INVOTHER_GETOBJ(3313), + INVOTHER_GETNUM(3314), + INVOTHER_TOTAL(3315), + STAFFMODLEVEL(3316), + REBOOTTIMER(3317), + MAP_WORLD(3318), + RUNENERGY_VISIBLE(3321), + RUNWEIGHT_VISIBLE(3322), + PLAYERMOD(3323), + WORLDFLAGS(3324), + MOVECOORD(3325), + ENUM_STRING(3400), + ENUM(3408), + ENUM_GETOUTPUTCOUNT(3411), + FRIEND_COUNT(3600), + FRIEND_GETNAME(3601), + FRIEND_GETWORLD(3602), + FRIEND_GETRANK(3603), + FRIEND_SETRANK(3604), + FRIEND_ADD(3605), + FRIEND_DEL(3606), + IGNORE_ADD(3607), + IGNORE_DEL(3608), + FRIEND_TEST(3609), + CLAN_GETCHATDISPLAYNAME(3611), + CLAN_GETCHATCOUNT(3612), + CLAN_GETCHATUSERNAME(3613), + CLAN_GETCHATUSERWORLD(3614), + CLAN_GETCHATUSERRANK(3615), + CLAN_GETCHATMINKICK(3616), + CLAN_KICKUSER(3617), + CLAN_GETCHATRANK(3618), + CLAN_JOINCHAT(3619), + CLAN_LEAVECHAT(3620), + IGNORE_COUNT(3621), + IGNORE_GETNAME(3622), + IGNORE_TEST(3623), + CLAN_ISSELF(3624), + CLAN_GETCHATOWNERNAME(3625), + CLAN_ISFRIEND(3626), + CLAN_ISIGNORE(3627), + STOCKMARKET_GETOFFERTYPE(3903), + STOCKMARKET_GETOFFERITEM(3904), + STOCKMARKET_GETOFFERPRICE(3905), + STOCKMARKET_GETOFFERCOUNT(3906), + STOCKMARKET_GETOFFERCOMPLETEDCOUNT(3907), + STOCKMARKET_GETOFFERCOMPLETEDGOLD(3908), + STOCKMARKET_ISOFFEREMPTY(3910), + STOCKMARKET_ISOFFERSTABLE(3911), + STOCKMARKET_ISOFFERFINISHED(3912), + STOCKMARKET_ISOFFERADDING(3913), + TRADINGPOST_SORTBY_NAME(3914), + TRADINGPOST_SORTBY_PRICE(3915), + TRADINGPOST_SORTFILTERBY_WORLD(3916), + TRADINGPOST_SORTBY_AGE(3917), + TRADINGPOST_SORTBY_COUNT(3918), + TRADINGPOST_GETTOTALOFFERS(3919), + TRADINGPOST_GETOFFERWORLD(3920), + TRADINGPOST_GETOFFERNAME(3921), + TRADINGPOST_GETOFFERPREVIOUSNAME(3922), + TRADINGPOST_GETOFFERAGE(3923), + TRADINGPOST_GETOFFERCOUNT(3924), + TRADINGPOST_GETOFFERPRICE(3925), + TRADINGPOST_GETOFFERITEM(3926), + ADD(4000), + SUB(4001), + MULTIPLY(4002), + DIV(4003), + RANDOM(4004), + RANDOMINC(4005), + INTERPOLATE(4006), + ADDPERCENT(4007), + SETBIT(4008), + CLEARBIT(4009), + TESTBIT(4010), + MOD(4011), + POW(4012), + INVPOW(4013), + AND(4014), + OR(4015), + SCALE(4018), + APPEND_NUM(4100), + APPEND(4101), + APPEND_SIGNNUM(4102), + LOWERCASE(4103), + FROMDATE(4104), + TEXT_GENDER(4105), + TOSTRING(4106), + COMPARE(4107), + PARAHEIGHT(4108), + PARAWIDTH(4109), + TEXT_SWITCH(4110), + ESCAPE(4111), + APPEND_CHAR(4112), + CHAR_ISPRINTABLE(4113), + CHAR_ISALPHANUMERIC(4114), + CHAR_ISALPHA(4115), + CHAR_ISNUMERIC(4116), + STRING_LENGTH(4117), + SUBSTRING(4118), + REMOVETAGS(4119), + STRING_INDEXOF_CHAR(4120), + STRING_INDEXOF_STRING(4121), + OC_NAME(4200), + OC_OP(4201), + OC_IOP(4202), + OC_COST(4203), + OC_STACKABLE(4204), + OC_CERT(4205), + OC_UNCERT(4206), + OC_MEMBERS(4207), + OC_PLACEHOLDER(4208), + OC_UNPLACEHOLDER(4209), + OC_FIND(4210), + OC_FINDNEXT(4211), + OC_FINDRESET(4212), + CHAT_GETFILTER_PUBLIC(5000), + CHAT_SETFILTER(5001), + CHAT_SENDABUSEREPORT(5002), + CHAT_GETHISTORY_BYTYPEANDLINE(5003), + CHAT_GETHISTORY_BYUID(5004), + CHAT_GETFILTER_PRIVATE(5005), + CHAT_SENDPUBLIC(5008), + CHAT_SENDPRIVATE(5009), + CHAT_PLAYERNAME(5015), + CHAT_GETFILTER_TRADE(5016), + CHAT_GETHISTORYLENGTH(5017), + CHAT_GETNEXTUID(5018), + CHAT_GETPREVUID(5019), + DOCHEAT(5020), + CHAT_SETMESSAGEFILTER(5021), + CHAT_GETMESSAGEFILTER(5022), + GETWINDOWMODE(5306), + SETWINDOWMODE(5307), + GETDEFAULTWINDOWMODE(5308), + SETDEFAULTWINDOWMODE(5309), + CAM_FORCEANGLE(5504), + CAM_GETANGLE_XA(5505), + CAM_GETANGLE_YA(5506), + CAM_SETFOLLOWHEIGHT(5530), + CAM_GETFOLLOWHEIGHT(5531), + LOGOUT(5630), + VIEWPORT_SETFOV(6200), + VIEWPORT_SETZOOM(6201), + VIEWPORT_CLAMPFOV(6202), + VIEWPORT_GETEFFECTIVESIZE(6203), + VIEWPORT_GETZOOM(6204), + VIEWPORT_GETFOV(6205), + WORLDLIST_FETCH(6500), + WORLDLIST_START(6501), + WORLDLIST_NEXT(6502), + WORLDLIST_SPECIFIC(6506), + WORLDLIST_SORT(6507), + SETFOLLOWEROPSLOWPRIORITY(6512), + NC_PARAM(6513), + LC_PARAM(6514), + OC_PARAM(6515), + STRUCT_PARAM(6516), + ON_MOBILE(6518), + CLIENTTYPE(6519), + BATTERYLEVEL(6524), + BATTERYCHARGING(6525), + WIFIAVAILABLE(6526), + WORLDMAP_GETMAPNAME(6601), + WORLDMAP_SETMAP(6602), + WORLDMAP_GETZOOM(6603), + WORLDMAP_SETZOOM(6604), + WORLDMAP_ISLOADED(6605), + WORLDMAP_JUMPTODISPLAYCOORD(6606), + WORLDMAP_JUMPTODISPLAYCOORD_INSTANT(6607), + WORLDMAP_JUMPTOSOURCECOORD(6608), + WORLDMAP_JUMPTOSOURCECOORD_INSTANT(6609), + WORLDMAP_GETDISPLAYPOSITION(6610), + WORLDMAP_GETCONFIGORIGIN(6611), + WORLDMAP_GETCONFIGSIZE(6612), + WORLDMAP_GETCONFIGBOUNDS(6613), + WORLDMAP_GETCONFIGZOOM(6614), + WORLDMAP_GETCURRENTMAP(6616), + WORLDMAP_GETDISPLAYCOORD(6617), + WORLDMAP_COORDINMAP(6621), + WORLDMAP_GETSIZE(6622), + WORLDMAP_PERPETUALFLASH(6628), + WORLDMAP_FLASHELEMENT(6629), + WORLDMAP_FLASHELEMENTCATEGORY(6630), + WORLDMAP_STOPCURRENTFLASHES(6631), + WORLDMAP_DISABLEELEMENTS(6632), + WORLDMAP_DISABLEELEMENT(6633), + WORLDMAP_DISABLEELEMENTCATEGORY(6634), + WORLDMAP_GETDISABLEELEMENTS(6635), + WORLDMAP_GETDISABLEELEMENT(6636), + WORLDMAP_GETDISABLEELEMENTCATEGORY(6637), + WORLDMAP_LISTELEMENT_START(6639), + WORLDMAP_LISTELEMENT_NEXT(6640), + MEC_TEXT(6693), + MEC_TEXTSIZE(6694), + MEC_CATEGORY(6695), + MEC_SPRITE(6696); + + public final int opcode; + + ScriptOpcode(int opcode) + { + this.opcode = opcode; + } + + private static final Map map; + + static + { + ImmutableMap.Builder builder = ImmutableMap.builder(); + + for (ScriptOpcode value : values()) + { + builder.put(value.opcode, value); + } + + map = builder.build(); + } + + public static String nameFromID(int opcode) + { + ScriptOpcode op = map.get(opcode); + + if (op == null) + { + return null; + } + + return op.name(); + } +} diff --git a/deobfuscator/src/main/java/net/runelite/deob/updater/UpdateMappings.java b/deobfuscator/src/main/java/net/runelite/deob/updater/UpdateMappings.java index 0201caabb1..bceda1fe1b 100644 --- a/deobfuscator/src/main/java/net/runelite/deob/updater/UpdateMappings.java +++ b/deobfuscator/src/main/java/net/runelite/deob/updater/UpdateMappings.java @@ -31,6 +31,7 @@ import net.runelite.deob.deobfuscators.mapping.AnnotationIntegrityChecker; import net.runelite.deob.deobfuscators.mapping.AnnotationMapper; import net.runelite.deob.deobfuscators.mapping.Mapper; import net.runelite.deob.deobfuscators.mapping.ParallelExecutorMapping; +import net.runelite.deob.deobfuscators.transformers.ScriptOpcodesTransformer; import net.runelite.deob.util.JarUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -72,6 +73,8 @@ public class UpdateMappings ParameterRenamer pr = new ParameterRenamer(group1, group2, mapping); pr.run(); + + new ScriptOpcodesTransformer().transform(group2); } public void save(File out) throws IOException