Lua Files
The lua files were introduced in Call of Duty: Black Ops II and it has appeared on every Call of Duty since. It is only available as its own asset type on Ghosts and Advanced Warfare. On Black Ops 2, however, it is stored as a rawfile. This asset is used for the game menus.
struct LuaFile
{
const char *name;
int len;
char strippingType;
const char *buffer;
};The binary data is then passed to the Virtual Machine (VM) to be ran. Now for the header of the binary data.
#define LuaMagic = 0x1B4C7561
struct LuaHeader
{
char magic[8];
char version;
char format;
char swapEndian;
char sizeOfInt;
char sizeOfSize;
char sizeOfLuaN;
char sizeOfNumber;
char numberIntegralCode;
char bytecodeSharingMode;
};Opcodes
| Opcode | Number | Mode | A | B | C |
|---|---|---|---|---|---|
| HKS_OPCODE_GETFIELD | 0x0 | iABC | Used | Register | Constant |
| HKS_OPCODE_TEST | 0x1 | iABC | Used | Not Used | Used |
| HKS_OPCODE_CALL_I | 0x2 | iABC | Used | Used | Used |
| HKS_OPCODE_CALL_C | 0x3 | iABC | Used | Used | Used |
| HKS_OPCODE_EQ | 0x4 | iABC | Not Used | Register/Constant | Register |
| HKS_OPCODE_EQ_BK | 0x5 | iABC | Not Used | Register/Constant | Register |
| HKS_OPCODE_GETGLOBAL | 0x6 | iABx | Used | Constant | Used |
| HKS_OPCODE_MOVE | 0x7 | iABC | Used | Register | Not Used |
| HKS_OPCODE_SELF | 0x8 | iABC | Used | Register | Register |
| HKS_OPCODE_RETURN | 0x9 | iABC | Used | Used | Not Used |
| HKS_OPCODE_GETTABLE_S | 0xa | iABC | Used | Register | Register |
| HKS_OPCODE_GETTABLE_N | 0xb | iABC | Used | Register | Register |
| HKS_OPCODE_GETTABLE | 0xc | iABC | Used | Register | Register |
| HKS_OPCODE_LOADBOOL | 0xd | iABC | Used | Used | Used |
| HKS_OPCODE_TFORLOOP | 0xe | iABC | Used | Not Used | Used |
| HKS_OPCODE_SETFIELD | 0xf | iABC | Used | Constant | Register |
| HKS_OPCODE_SETTABLE_S | 0x10 | iABC | Used | Register/Constant | Register |
| HKS_OPCODE_SETTABLE_S_BK | 0x11 | iABC | Used | Register/Constant | Register |
| HKS_OPCODE_SETTABLE_N | 0x12 | iABC | Used | Register/Constant | Register |
| HKS_OPCODE_SETTABLE_N_BK | 0x13 | iABC | Used | Register/Constant | Register |
| HKS_OPCODE_SETTABLE | 0x14 | iABC | Used | Register/Constant | Register |
| HKS_OPCODE_SETTABLE_BK | 0x15 | iABC | Used | Register/Constant | Register |
| HKS_OPCODE_TAILCALL_I | 0x16 | iABC | Used | Used | Used |
| HKS_OPCODE_TAILCALL_C | 0x17 | iABC | Used | Used | Used |
| HKS_OPCODE_TAILCALL_M | 0x18 | iABC | Used | Used | Used |
| HKS_OPCODE_LOADK | 0x19 | iABx | Used | Constant | Not Used |
| HKS_OPCODE_LOADNIL | 0x1a | iABC | Used | Register | Not Used |
| HKS_OPCODE_SETGLOBAL | 0x1b | iABx | Used | Constant | Not Used |
| HKS_OPCODE_JMP | 0x1c | iAsBx | Not Used | Jump Offset | Not Used |
| HKS_OPCODE_CALL_M | 0x1d | iABC | Used | Used | Used |
| HKS_OPCODE_CALL | 0x1e | iABC | Used | Used | Used |
| HKS_OPCODE_INTRINSIC_INDEX | 0x1f | iABC | Used | Used | Used |
| HKS_OPCODE_INTRINSIC_NEWINDEX | 0x20 | iABC | Used | Used | Used |
| HKS_OPCODE_INTRINSIC_SELF | 0x21 | iABC | Used | Used | Used |
| HKS_OPCODE_INTRINSIC_INDEX_LITERAL | 0x22 | iABC | Used | Used | Used |
| HKS_OPCODE_INTRINSIC_NEWINDEX_LITERAL | 0x23 | iABC | Used | Used | Used |
| HKS_OPCODE_INTRINSIC_SELF_LITERAL | 0x24 | iABC | Used | Used | Used |
| HKS_OPCODE_TAILCALL | 0x25 | iABC | Used | Used | Used |
| HKS_OPCODE_GETUPVAL | 0x26 | iABC | Used | Used | Not Used |
| HKS_OPCODE_SETUPVAL | 0x27 | iABC | Used | Used | Not Used |
| HKS_OPCODE_ADD | 0x28 | iABC | Used | Register/Constant | Register |
| HKS_OPCODE_ADD_BK | 0x29 | iABC | Used | Register/Constant | Register |
| HKS_OPCODE_SUB | 0x2a | iABC | Used | Register/Constant | Register |
| HKS_OPCODE_SUB_BK | 0x2b | iABC | Used | Register/Constant | Register |
| HKS_OPCODE_MUL | 0x2c | iABC | Used | Register/Constant | Register |
| HKS_OPCODE_MUL_BK | 0x2d | iABC | Used | Register/Constant | Register |
| HKS_OPCODE_DIV | 0x2e | iABC | Used | Register/Constant | Register |
| HKS_OPCODE_DIV_BK | 0x2f | iABC | Used | Register/Constant | Register |
| HKS_OPCODE_MOD | 0x30 | iABC | Used | Register/Constant | Register |
| HKS_OPCODE_MOD_BK | 0x31 | iABC | Used | Register/Constant | Register |
| HKS_OPCODE_POW | 0x32 | iABC | Used | Register/Constant | Register |
| HKS_OPCODE_POW_BK | 0x33 | iABC | Used | Register/Constant | Register |
| HKS_OPCODE_NEWTABLE | 0x34 | iABC | Used | Used | Used |
| HKS_OPCODE_UNM | 0x35 | iABC | Used | Register | Not Used |
| HKS_OPCODE_NOT | 0x36 | iABC | Used | Register | Not Used |
| HKS_OPCODE_LEN | 0x37 | iABC | Used | Register | Not Used |
| HKS_OPCODE_LT | 0x38 | iABC | Not Used | Register/Constant | Register |
| HKS_OPCODE_LT_BK | 0x39 | iABC | Not Used | Register/Constant | Register |
| HKS_OPCODE_LE | 0x3a | iABC | Not Used | Register/Constant | Register |
| HKS_OPCODE_LE_BK | 0x3b | iABC | Not Used | Register/Constant | Register |
| HKS_OPCODE_CONCAT | 0x3c | iABC | Used | Used | Used |
| HKS_OPCODE_TESTSET | 0x3d | iABC | Used | Register | Used |
| HKS_OPCODE_FORPREP | 0x3e | iAsBx | Used | Jump Offset | Not Used |
| HKS_OPCODE_FORLOOP | 0x3f | iAsBx | Used | Jump Offset | Not Used |
| HKS_OPCODE_SETLIST | 0x40 | iABC | Used | Used | Jump Offset |
| HKS_OPCODE_CLOSE | 0x41 | iABC | Used | Not Used | Not Used |
| HKS_OPCODE_CLOSURE | 0x42 | iABx | Used | Used | Not Used |
| HKS_OPCODE_VARARG | 0x43 | iABC | Used | Used | Not Used |
| HKS_OPCODE_TAILCALL_I_R1 | 0x44 | iABC | Not Used | Used | Used |
| HKS_OPCODE_CALL_I_R1 | 0x45 | iABC | Not Used | Used | Used |
| HKS_OPCODE_SETUPVAL_R1 | 0x46 | iABC | Used | Used | Not Used |
| HKS_OPCODE_TEST_R1 | 0x47 | iABC | Used | Not Used | Used |
| HKS_OPCODE_NOT_R1 | 0x48 | iABC | Used | Register | Not Used |
| HKS_OPCODE_GETFIELD_R1 | 0x49 | iABC | Used | Register | Constant |
| HKS_OPCODE_SETFIELD_R1 | 0x4a | iABC | Used | Constant | Register |
| HKS_OPCODE_NEWSTRUCT | 0x4b | iABC | Used | Used | Used |
| HKS_OPCODE_DATA | 0x4c | iABx | Not Used | Jump Offset | Not Used |
| HKS_OPCODE_SETSLOTN | 0x4d | iABC | Used | Not Used | Used |
| HKS_OPCODE_SETSLOTI | 0x4e | iABC | Used | Used | Register |
| HKS_OPCODE_SETSLOT | 0x4f | iABC | Used | Used | Register |
| HKS_OPCODE_SETSLOTS | 0x50 | iABC | Used | Used | Register |
| HKS_OPCODE_SETSLOTMT | 0x51 | iABC | Used | Used | Register |
| HKS_OPCODE_CHECKTYPE | 0x52 | iABx | Used | Used | Not Used |
| HKS_OPCODE_CHECKTYPES | 0x53 | iABx | Used | Used | Not Used |
| HKS_OPCODE_GETSLOT | 0x54 | iABC | Used | Register | Used |
| HKS_OPCODE_GETSLOTMT | 0x55 | iABC | Used | Register | Used |
| HKS_OPCODE_SELFSLOT | 0x56 | iABC | Used | Register | Used |
| HKS_OPCODE_SELFSLOTMT | 0x57 | iABC | Used | Register | Used |
| HKS_OPCODE_GETFIELD_MM | 0x58 | iABC | Used | Register | Constant |
| HKS_OPCODE_CHECKTYPE_D | 0x59 | iABx | Used | Used | Not Used |
| HKS_OPCODE_GETSLOT_D | 0x5a | iABC | Used | Register | Used |
| HKS_OPCODE_GETGLOBAL_MEM | 0x5b | iABx | Used | Constant | Used |