ScriptFile Asset

From COD Engine Research
Revision as of 08:43, 26 January 2014 by Aerosoul94 (talk | contribs) (Created page with "__NOTOC__ Category:Assets Category:MW3 Category:Ghosts The scriptfile asset is used on both Modern Warfare 3 and Ghosts. It is Infinity Ward's attempt at protectin...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

The scriptfile asset is used on both Modern Warfare 3 and Ghosts. It is Infinity Ward's attempt at protecting their game scripts from being modified. Compared to Treyarch's scriptparsetree, the scriptfile gives away less information on identifying which game script file it originated from. All unnecessary strings have been removed and file names have even been renamed as number id's.

struct ScriptFile
{
  const char *name;
  int deflatedLen;
  int inflatedLen;
  int codeLen;
  char *data;
  char *code;
};

Data Section

The data section is a zlib compressed section that contains data used by the code section. It's compressed size is equal to deflatedSize and it's uncompressed size is equal to inflatedSize.

Code Section

The code section is the actual compiled game script code.

Operation Codes

Modern Warfare 3

#define OP_End					0
#define OP_Return				1
#define OP_GetUndefined			2
#define OP_GetZero				3
#define OP_GetByte1				4
#define OP_GetByte2				5
#define OP_GetNegByte			6
#define OP_GetUnsignedShort		7
#define OP_GetNegUnsignedShort	8
#define OP_GetInteger			9
 #define OP_opcode10			0xA
 #define OP_opcode11			0xB
#define OP_GetFloat				0xC
#define OP_GetString			0xD
#define OP_GetIString			0xE
#define OP_GetVector			0xF
#define OP_GetLevelObject		0x10
#define OP_GetAnimObject		0x11
#define OP_GetSelf				0x12
#define OP_GetThread			0x13
#define OP_GetLevel				0x14
#define OP_GetGame				0x15
#define OP_GetAnim				0x16
#define OP_GetAnimation			0x17
#define OP_GetGameRef			0x18
#define OP_GetFunction1			0x19
#define OP_GetFunction2			0x1A
#define OP_CreateLocalVariable	0x1B
#define OP_RemoveLocalVariables	0x1C
#define OP_EvalLocalVariableCached0		0x1D
#define OP_EvalLocalVariableCached1		0x1E
#define OP_EvalLocalVariableCached2		0x1F
#define OP_EvalLocalVariableCached3		0x20
#define OP_EvalLocalVariableCached4		0x21
#define OP_EvalLocalVariableCached5		0x22
#define OP_EvalLocalVariableCached		0x23
#define OP_EvalLocalArrayCached			0x24
#define OP_EvalArray					0x25
#define OP_EvalLocalArrayRefCached0		0x26
 #define OP_opcode39       				0x27
#define OP_EvalLocalArrayRefCached		0x28
#define OP_EvalArrayRef				0x29
#define OP_ClearArray				0x2A
#define OP_EmptyArray				0x2B
 #define OP_opcode44				0x2C
#define OP_GetSelfObject			0x2D
#define OP_EvalLevelFieldVariable	0x2E
#define OP_EvalAnimFieldVariable	0x2F
#define OP_EvalSelfFieldVariable	0x30
#define OP_EvalFieldVariable		0x31
#define OP_EvalLevelFieldVariableRef 	0x32
#define OP_EvalAnimFieldVariableRef		0x33
#define OP_EvalSelfFieldVariableRef		0x34
#define OP_EvalFieldVariableRef			0x35
#define OP_ClearFieldVariable			0x36
#define OP_SafeCreateVariableFieldCached	0x37
#define OP_SafeSetVariableFieldCached0		0x38
#define OP_SafeSetVariableFieldCached		0x39
#define OP_SafeSetWaittillVariableFieldCached	0x3A
#define OP_clearparams				0x3B
#define OP_checkclearparams			0x3C
 #define OP_opcode61				0x3D
 #define OP_opcode62				0x3E	// nop
#define OP_EvalLocalVariableRefCached	0x3F
#define OP_SetLevelFieldVariableField	0x40
#define OP_SetVariableField		0x41
 #define OP_opcode66			0x42	// nop
#define OP_SetAnimFieldVariableField	0x43
#define OP_SetSelfFieldVariableField	0x44
 #define OP_opcode69		0x45
 #define OP_opcode70		0x46
 #define OP_opcode71		0x47
 #define OP_opcode72		0x48
 #define OP_opcode72		0x49
#define OP_CallBuiltin0		0x4A
#define OP_CallBuiltin1		0x4B
#define OP_CallBuiltin2		0x4C
#define OP_CallBuiltin3		0x4D
#define OP_CallBuiltin4		0x4E
#define OP_CallBuiltin5		0x4F
#define OP_CallBuiltin		0x50
#define OP_CallBuiltinMethod0	0x51
#define OP_CallBuiltinMethod1	0x52
#define OP_CallBuiltinMethod2	0x53
#define OP_CallBuiltinMethod3	0x54
#define OP_CallBuiltinMethod4	0x55
#define OP_CallBuiltinMethod5	0x56
#define OP_CallBuiltinMethod	0x57
#define OP_wait					0x58
#define OP_waittillFrameEnd		0x59
#define OP_voidCodepos			0x5A
#define OP_ScriptFunctionCall2	0x5B
#define OP_ScriptFunctionCall	0x5C
#define OP_ScriptFunctionCallPointer	0x5D
#define OP_ScriptMethodCall			0x5E
#define OP_ScriptMethodCallPointer	0x5F
#define OP_ScriptThreadCall			0x60
#define OP_PreScriptCall			0x61
#define OP_ScriptFunctionCall2		0x62
#define OP_ScriptFunctionCall		0x63
#define OP_ScriptFunctionCallPointer	0x64
#define OP_ScriptMethodCall				0x65
#define OP_ScriptMethodCallPointer		0x66
#define OP_ScriptThreadCall			0x67
#define OP_PreScriptCall			0x68
 #define OP_opcode105			0x69
 #define OP_opcode106			0x6A
 #define OP_opcode107			0x6B
 #define OP_opcode108			0x6C
 #define OP_opcode109			0x6D
 #define OP_opcode110			0x6E
 #define OP_opcode111			0x6F
 #define OP_opcode112			0x70
 #define OP_opcode113			0x71
 #define OP_opcode114			0x72
 #define OP_opcode115			0x73
 #define OP_opcode116			0x74
#define OP_BoolNot				0x75
#define OP_BoolComplement		0x76
#define OP_JumpOnFalse			0x77
#define OP_JumpOnTrue			0x78
#define OP_JumpOnFalseExpr		0x79
#define OP_JumpOnTrueExpr		0x7A
#define OP_jump				0x7B
#define OP_jumpback			0x7C
#define OP_inc				0x7D
#define OP_dec				0x7E
#define OP_bit_or			0x7F
#define OP_bit_ex_or		0x80
#define OP_bit_and			0x81
#define OP_equality			0x82
#define OP_inequality		0x83
#define OP_less				0x84
#define OP_greater			0x85
#define OP_less_equal		0x86
#define OP_greater_equal	0x87
#define OP_shift_left		0x88
#define OP_shift_right		0x89
#define OP_plus				0x8A
#define OP_minus			0x8B
#define OP_multiply			0x8C
#define OP_divide			0x8F
#define OP_mod				0x8E
#define OP_size				0x8F
 #define OP_opcode144		0x90
#define OP_nop				0x91
#define OP_waittill			0x92
#define OP_notify			0x93
#define OP_endon			0x94
#define OP_voidCodepos		0x95
#define OP_switch			0x96
#define OP_endswitch		0x97
#define OP_vector			0x98