first commit
This commit is contained in:
@@ -0,0 +1,886 @@
|
||||
'use strict';
|
||||
|
||||
// ─── Bytecode action opcodes (hex values) ───
|
||||
const ACTION_END = 0x00;
|
||||
const ACTION_NEXTFRAME = 0x04;
|
||||
const ACTION_PREVFRAME = 0x05;
|
||||
const ACTION_PLAY = 0x06;
|
||||
const ACTION_STOP = 0x07;
|
||||
const ACTION_TOGGLEQUALITY = 0x08;
|
||||
const ACTION_STOPSOUNDS = 0x09;
|
||||
const ACTION_ADD = 0x0A;
|
||||
const ACTION_SUBTRACT = 0x0B;
|
||||
const ACTION_MULTIPLY = 0x0C;
|
||||
const ACTION_DIVIDE = 0x0D;
|
||||
const ACTION_EQUAL = 0x0E;
|
||||
const ACTION_LESSTHAN = 0x0F;
|
||||
const ACTION_LOGICALAND = 0x10;
|
||||
const ACTION_LOGICALOR = 0x11;
|
||||
const ACTION_LOGICALNOT = 0x12;
|
||||
const ACTION_STRINGEQ = 0x13;
|
||||
const ACTION_STRINGLENGTH = 0x14;
|
||||
const ACTION_SUBSTRING = 0x15;
|
||||
const ACTION_POP = 0x17;
|
||||
const ACTION_INT = 0x18;
|
||||
const ACTION_GETVARIABLE = 0x1C;
|
||||
const ACTION_SETVARIABLE = 0x1D;
|
||||
const ACTION_SETTARGETEXPRESSION = 0x20;
|
||||
const ACTION_STRINGCONCAT = 0x21;
|
||||
const ACTION_GETPROPERTY = 0x22;
|
||||
const ACTION_SETPROPERTY = 0x23;
|
||||
const ACTION_DUPLICATECLIP = 0x24;
|
||||
const ACTION_REMOVECLIP = 0x25;
|
||||
const ACTION_TRACE = 0x26;
|
||||
const ACTION_STARTDRAGMOVIE = 0x27;
|
||||
const ACTION_STOPDRAGMOVIE = 0x28;
|
||||
const ACTION_STRINGCOMPARE = 0x29;
|
||||
const ACTION_THROW = 0x2A;
|
||||
const ACTION_CASTOP = 0x2B;
|
||||
const ACTION_IMPLEMENTSOP = 0x2C;
|
||||
const ACTION_RANDOM = 0x30;
|
||||
const ACTION_MBLENGTH = 0x31;
|
||||
const ACTION_ORD = 0x32;
|
||||
const ACTION_CHR = 0x33;
|
||||
const ACTION_GETTIMER = 0x34;
|
||||
const ACTION_MBSUBSTRING = 0x35;
|
||||
const ACTION_MBORD = 0x36;
|
||||
const ACTION_MBCHR = 0x37;
|
||||
const ACTION_DELETE = 0x3A;
|
||||
const ACTION_DELETE2 = 0x3B;
|
||||
const ACTION_DEFINELOCAL = 0x3C;
|
||||
const ACTION_CALLFUNCTION = 0x3D;
|
||||
const ACTION_RETURN = 0x3E;
|
||||
const ACTION_MODULO = 0x3F;
|
||||
const ACTION_NEW = 0x40;
|
||||
const ACTION_VAR = 0x41;
|
||||
const ACTION_INITARRAY = 0x42;
|
||||
const ACTION_INITOBJECT = 0x43;
|
||||
const ACTION_TYPEOF = 0x44;
|
||||
const ACTION_TARGETPATH = 0x45;
|
||||
const ACTION_ENUMERATE = 0x46;
|
||||
const ACTION_NEWADD = 0x47;
|
||||
const ACTION_NEWLESSTHAN = 0x48;
|
||||
const ACTION_NEWEQUALS = 0x49;
|
||||
const ACTION_TONUMBER = 0x4A;
|
||||
const ACTION_TOSTRING = 0x4B;
|
||||
const ACTION_DUP = 0x4C;
|
||||
const ACTION_SWAP = 0x4D;
|
||||
const ACTION_GETMEMBER = 0x4E;
|
||||
const ACTION_SETMEMBER = 0x4F;
|
||||
const ACTION_INCREMENT = 0x50;
|
||||
const ACTION_DECREMENT = 0x51;
|
||||
const ACTION_CALLMETHOD = 0x52;
|
||||
const ACTION_NEWMETHOD = 0x53;
|
||||
const ACTION_INSTANCEOF = 0x54;
|
||||
const ACTION_ENUM2 = 0x55;
|
||||
const ACTION_BITWISEAND = 0x60;
|
||||
const ACTION_BITWISEOR = 0x61;
|
||||
const ACTION_BITWISEXOR = 0x62;
|
||||
const ACTION_SHIFTLEFT = 0x63;
|
||||
const ACTION_SHIFTRIGHT = 0x64;
|
||||
const ACTION_SHIFTRIGHT2 = 0x65;
|
||||
const ACTION_STRICTEQ = 0x66;
|
||||
const ACTION_GREATER = 0x67;
|
||||
const ACTION_STRINGGREATER = 0x68;
|
||||
const ACTION_EXTENDS = 0x69;
|
||||
const ACTION_WAITFORFRAME = 0x8A;
|
||||
const ACTION_WAITFORFRAMEEXPRESSION = 0x8D;
|
||||
const ACTION_SETREGISTER = 0x87;
|
||||
const ACTION_CONSTANTPOOL = 0x88;
|
||||
const ACTION_PUSHDATA = 0x96;
|
||||
const ACTION_BRANCHALWAYS = 0x99;
|
||||
const ACTION_GETURL2 = 0x9A;
|
||||
const ACTION_DEFINEFUNCTION = 0x9B;
|
||||
const ACTION_BRANCHIFTRUE = 0x9D;
|
||||
const ACTION_CALLFRAME = 0x9E;
|
||||
const ACTION_GOTOEXPRESSION = 0x9F;
|
||||
const ACTION_GOTOFRAME = 0x81;
|
||||
const ACTION_GETURL = 0x83;
|
||||
const ACTION_SETTARGET = 0x8B;
|
||||
const ACTION_GOTOLABEL = 0x8C;
|
||||
const ACTION_DEFINEFUNCTION2 = 0x8E;
|
||||
const ACTION_TRY = 0x8F;
|
||||
const ACTION_WITH = 0x94;
|
||||
|
||||
// EA-specific opcodes
|
||||
const EA_ACTION56 = 0x56;
|
||||
const EA_ACTION58 = 0x58;
|
||||
const EA_PUSHZERO = 0x59;
|
||||
const EA_PUSHONE = 0x5A;
|
||||
const EA_CALLFUNCTIONPOP = 0x5B;
|
||||
const EA_CALLFUNCTION = 0x5C;
|
||||
const EA_CALLMETHODPOP = 0x5D;
|
||||
const EA_CALLMETHOD = 0x5E;
|
||||
const EA_PUSHTHIS = 0x70;
|
||||
const EA_PUSHGLOBAL = 0x71;
|
||||
const EA_ZEROVARIABLE = 0x72;
|
||||
const EA_PUSHTRUE = 0x73;
|
||||
const EA_PUSHFALSE = 0x74;
|
||||
const EA_PUSHNULL = 0x75;
|
||||
const EA_PUSHUNDEFINED = 0x76;
|
||||
const EA_ACTION77 = 0x77;
|
||||
const EA_PUSHSTRING = 0xA1;
|
||||
const EA_PUSHCONSTANT = 0xA2;
|
||||
const EA_PUSHWORDCONSTANT = 0xA3;
|
||||
const EA_GETSTRINGVAR = 0xA4;
|
||||
const EA_GETSTRINGMEMBER = 0xA5;
|
||||
const EA_SETSTRINGVAR = 0xA6;
|
||||
const EA_SETSTRINGMEMBER = 0xA7;
|
||||
const EA_PUSHVALUEOFVAR = 0xAE;
|
||||
const EA_GETNAMEDMEMBER = 0xAF;
|
||||
const EA_CALLNAMEDFUNCTIONPOP = 0xB0;
|
||||
const EA_CALLNAMEDFUNCTION = 0xB1;
|
||||
const EA_CALLNAMEDMETHODPOP = 0xB2;
|
||||
const EA_CALLNAMEDMETHOD = 0xB3;
|
||||
const EA_PUSHFLOAT = 0xB4;
|
||||
const EA_PUSHBYTE = 0xB5;
|
||||
const EA_PUSHSHORT = 0xB6;
|
||||
const EA_PUSHLONG = 0xB7;
|
||||
const EA_BRANCHIFFALSE = 0xB8;
|
||||
const EA_PUSHREGISTER = 0xB9;
|
||||
|
||||
// ─── Flag enums ───
|
||||
|
||||
const PlaceObjectFlags = {
|
||||
Move: 1,
|
||||
HasCharacter: 2,
|
||||
HasMatrix: 4,
|
||||
HasColorTransform: 8,
|
||||
HasRatio: 16,
|
||||
HasName: 32,
|
||||
HasClipDepth: 64,
|
||||
HasClipAction: 128
|
||||
};
|
||||
|
||||
const ClipEventFlags = {
|
||||
KeyUp: 0x800000,
|
||||
KeyDown: 0x400000,
|
||||
MouseUp: 0x200000,
|
||||
MouseDown: 0x100000,
|
||||
MouseMove: 0x080000,
|
||||
Unload: 0x040000,
|
||||
EnterFrame: 0x020000,
|
||||
Load: 0x010000,
|
||||
DragOver: 0x008000,
|
||||
RollOut: 0x004000,
|
||||
RollOver: 0x002000,
|
||||
ReleaseOutside: 0x001000,
|
||||
Release: 0x000800,
|
||||
Press: 0x000400,
|
||||
DragOut: 0x000200,
|
||||
Data: 0x000100,
|
||||
Construct: 0x000004,
|
||||
KeyPress: 0x000002,
|
||||
Initialize: 0x000001
|
||||
};
|
||||
|
||||
const ButtonRecordFlags = {
|
||||
None: 0,
|
||||
StateUp: 1,
|
||||
StateOver: 2,
|
||||
StateDown: 4,
|
||||
StateHit: 8
|
||||
};
|
||||
|
||||
const ButtonActionFlags = {
|
||||
IdleToOverUp: 1,
|
||||
OverUpToIdle: 2,
|
||||
OverUpToOverDown: 4,
|
||||
OverDownToOverUp: 8,
|
||||
OverDownToOutDown: 16,
|
||||
OutDownToOverDown: 32,
|
||||
IdleToOverDown: 128,
|
||||
OverDownToIdle: 256
|
||||
};
|
||||
|
||||
const ButtonInput = {
|
||||
MouseButton0: 0,
|
||||
Left: 1,
|
||||
Right: 2,
|
||||
Home: 3,
|
||||
End: 4,
|
||||
Insert: 5,
|
||||
Delete: 6,
|
||||
BackSpace: 8,
|
||||
Enter: 13,
|
||||
Unknown: 240
|
||||
};
|
||||
|
||||
const FunctionPreloadFlags = {
|
||||
PreloadExtern: 0x010000,
|
||||
PreloadParent: 0x008000,
|
||||
PreloadRoot: 0x004000,
|
||||
SupressSuper: 0x002000,
|
||||
PreloadSuper: 0x001000,
|
||||
SupressArguments: 0x000800,
|
||||
PreloadArguments: 0x000400,
|
||||
SupressThis: 0x000200,
|
||||
PreloadThis: 0x000100,
|
||||
PreloadGlobal: 0x000001
|
||||
};
|
||||
|
||||
// ─── Action name tables ───
|
||||
// New/shorter style names (default)
|
||||
const ActionNames = [
|
||||
"actionEnd", // 0x00
|
||||
"", // 0x01
|
||||
"", // 0x02
|
||||
"", // 0x03
|
||||
"ActionNextFrame", // 0x04
|
||||
"ActionPrevFrame", // 0x05
|
||||
"play", // 0x06
|
||||
"stop", // 0x07
|
||||
"ActionToggleQuality", // 0x08
|
||||
"ActionStopSounds", // 0x09
|
||||
"ActionAdd", // 0x0A
|
||||
"ActionSubtract", // 0x0B
|
||||
"ActionMultiply", // 0x0C
|
||||
"ActionDivide", // 0x0D
|
||||
"ActionEqual", // 0x0E
|
||||
"ActionLessThan", // 0x0F
|
||||
"ActionLogicalAnd", // 0x10
|
||||
"ActionLogicalOr", // 0x11
|
||||
"ActionLogicalNot", // 0x12
|
||||
"ActionStringEq", // 0x13
|
||||
"ActionStringLength", // 0x14
|
||||
"ActionSubString", // 0x15
|
||||
"", // 0x16
|
||||
"ActionPop", // 0x17
|
||||
"ActionInt", // 0x18
|
||||
"", // 0x19
|
||||
"", // 0x1A
|
||||
"", // 0x1B
|
||||
"ActionGetVariable", // 0x1C
|
||||
"ActionSetVariable", // 0x1D
|
||||
"", // 0x1E
|
||||
"", // 0x1F
|
||||
"ActionSetTargetExpression", // 0x20
|
||||
"ActionStringConcat", // 0x21
|
||||
"ActionGetProperty", // 0x22
|
||||
"ActionSetProperty", // 0x23
|
||||
"ActionDuplicateClip", // 0x24
|
||||
"ActionRemoveClip", // 0x25
|
||||
"ActionTrace", // 0x26
|
||||
"ActionStartDrag", // 0x27
|
||||
"ActionStopDrag", // 0x28
|
||||
"ActionStringCompare", // 0x29
|
||||
"ActionThrow", // 0x2A
|
||||
"ActionCastOp", // 0x2B
|
||||
"ActionImplementsOp", // 0x2C
|
||||
"", // 0x2D
|
||||
"", // 0x2E
|
||||
"", // 0x2F
|
||||
"ActionRandom", // 0x30
|
||||
"ActionMBLength", // 0x31
|
||||
"ActionOrd", // 0x32
|
||||
"ActionChr", // 0x33
|
||||
"ActionGetTimer", // 0x34
|
||||
"ActionMBSubString", // 0x35
|
||||
"ActionMBOrd", // 0x36
|
||||
"ActionMBChr", // 0x37
|
||||
"", // 0x38
|
||||
"", // 0x39
|
||||
"ActionDelete", // 0x3A
|
||||
"ActionDelete2", // 0x3B
|
||||
"ActionDefineLocal", // 0x3C
|
||||
"ActionCallFunction", // 0x3D
|
||||
"ActionReturn", // 0x3E
|
||||
"ActionModulo", // 0x3F
|
||||
"ActionNew", // 0x40
|
||||
"ActionVar", // 0x41
|
||||
"ActionInitArray", // 0x42
|
||||
"ActionInitObject", // 0x43
|
||||
"ActionTypeOf", // 0x44
|
||||
"ActionTargetPath", // 0x45
|
||||
"ActionEnumerate", // 0x46
|
||||
"ActionNewAdd", // 0x47
|
||||
"ActionNewLessThan", // 0x48
|
||||
"ActionNewEquals", // 0x49
|
||||
"ActionToNumber", // 0x4A
|
||||
"ActionToString", // 0x4B
|
||||
"ActionDup", // 0x4C
|
||||
"ActionSwap", // 0x4D
|
||||
"ActionGetMember", // 0x4E
|
||||
"ActionSetMember", // 0x4F
|
||||
"ActionIncrement", // 0x50
|
||||
"ActionDecrement", // 0x51
|
||||
"ActionCallMethod", // 0x52
|
||||
"ActionNewMethod", // 0x53
|
||||
"ActionInstanceOf", // 0x54
|
||||
"ActionEnum2", // 0x55
|
||||
"EAUnknownAction56", // 0x56
|
||||
"", // 0x57
|
||||
"EAUnknownAction58", // 0x58
|
||||
"EAPushZero", // 0x59
|
||||
"EAPushOne", // 0x5A
|
||||
"EACallFunctionPop", // 0x5B
|
||||
"callset", // 0x5C
|
||||
"callmethodpop", // 0x5D
|
||||
"callmethodset", // 0x5E
|
||||
"", // 0x5F
|
||||
"bitand", // 0x60
|
||||
"bitor", // 0x61
|
||||
"xor", // 0x62
|
||||
"lsh", // 0x63
|
||||
"rsh", // 0x64
|
||||
"unsignedrsh", // 0x65
|
||||
"stricteq", // 0x66
|
||||
"gt", // 0x67
|
||||
"strgt", // 0x68
|
||||
"extends", // 0x69
|
||||
"", // 0x6A
|
||||
"", // 0x6B
|
||||
"", // 0x6C
|
||||
"", // 0x6D
|
||||
"", // 0x6E
|
||||
"", // 0x6F
|
||||
"pushthis", // 0x70
|
||||
"pushglobal", // 0x71
|
||||
"zerovar", // 0x72
|
||||
"pushtrue", // 0x73
|
||||
"pushfalse", // 0x74
|
||||
"pushnull", // 0x75
|
||||
"pushundefined", // 0x76
|
||||
"", // 0x77
|
||||
"", // 0x78
|
||||
"", // 0x79
|
||||
"", // 0x7A
|
||||
"", // 0x7B
|
||||
"", // 0x7C
|
||||
"", // 0x7D
|
||||
"", // 0x7E
|
||||
"", // 0x7F
|
||||
"", // 0x80
|
||||
"gotoframe", // 0x81
|
||||
"", // 0x82
|
||||
"geturl", // 0x83
|
||||
"", // 0x84
|
||||
"", // 0x85
|
||||
"", // 0x86
|
||||
"setreg", // 0x87
|
||||
"ActionConstantPool", // 0x88
|
||||
"", // 0x89
|
||||
"waitforframe", // 0x8A
|
||||
"settarget", // 0x8B
|
||||
"gotolabel", // 0x8C
|
||||
"waitforframeexpr", // 0x8D
|
||||
"ActionDefineFunction2", // 0x8E
|
||||
"try", // 0x8F
|
||||
"", // 0x90
|
||||
"", // 0x91
|
||||
"", // 0x92
|
||||
"", // 0x93
|
||||
"with", // 0x94
|
||||
"", // 0x95
|
||||
"pushdata", // 0x96
|
||||
"", // 0x97
|
||||
"", // 0x98
|
||||
"jump", // 0x99
|
||||
"geturl2", // 0x9A
|
||||
"ActionDefineFunction", // 0x9B
|
||||
"", // 0x9C
|
||||
"jumptrue", // 0x9D
|
||||
"callframe", // 0x9E
|
||||
"gotoexpr", // 0x9F
|
||||
"", // 0xA0
|
||||
"pushstr", // 0xA1
|
||||
"pushconst", // 0xA2
|
||||
"pushwconst", // 0xA3
|
||||
"getstrvar", // 0xA4
|
||||
"getstrmember", // 0xA5
|
||||
"setstrvar", // 0xA6
|
||||
"setstrmember", // 0xA7
|
||||
"", // 0xA8
|
||||
"", // 0xA9
|
||||
"", // 0xAA
|
||||
"", // 0xAB
|
||||
"", // 0xAC
|
||||
"", // 0xAD
|
||||
"pushvar", // 0xAE
|
||||
"getnamedmember", // 0xAF
|
||||
"callnamedpop", // 0xB0
|
||||
"callnamedset", // 0xB1
|
||||
"callnamedmethodpop", // 0xB2
|
||||
"callnamedmethodset", // 0xB3
|
||||
"pushfloat", // 0xB4
|
||||
"pushbyte", // 0xB5
|
||||
"pushshort", // 0xB6
|
||||
"pushlong", // 0xB7
|
||||
"jumpfalse", // 0xB8
|
||||
"pushreg" // 0xB9
|
||||
];
|
||||
|
||||
// Old/verbose style names
|
||||
const ActionNames2 = [
|
||||
"ActionEnd", // 0x00
|
||||
"", // 0x01
|
||||
"", // 0x02
|
||||
"", // 0x03
|
||||
"ActionNextFrame", // 0x04
|
||||
"ActionPrevFrame", // 0x05
|
||||
"ActionPlay", // 0x06
|
||||
"ActionStop", // 0x07
|
||||
"ActionToggleQuality", // 0x08
|
||||
"ActionStopSounds", // 0x09
|
||||
"ActionAdd", // 0x0A
|
||||
"ActionSubtract", // 0x0B
|
||||
"ActionMultiply", // 0x0C
|
||||
"ActionDivide", // 0x0D
|
||||
"ActionEqual", // 0x0E
|
||||
"ActionLessThan", // 0x0F
|
||||
"ActionLogicalAnd", // 0x10
|
||||
"ActionLogicalOr", // 0x11
|
||||
"ActionLogicalNot", // 0x12
|
||||
"ActionStringEq", // 0x13
|
||||
"ActionStringLength", // 0x14
|
||||
"ActionSubString", // 0x15
|
||||
"", // 0x16
|
||||
"ActionPop", // 0x17
|
||||
"ActionInt", // 0x18
|
||||
"", // 0x19
|
||||
"", // 0x1A
|
||||
"", // 0x1B
|
||||
"ActionGetVariable", // 0x1C
|
||||
"ActionSetVariable", // 0x1D
|
||||
"", // 0x1E
|
||||
"", // 0x1F
|
||||
"ActionSetTargetExpression", // 0x20
|
||||
"ActionStringConcat", // 0x21
|
||||
"ActionGetProperty", // 0x22
|
||||
"ActionSetProperty", // 0x23
|
||||
"ActionDuplicateClip", // 0x24
|
||||
"ActionRemoveClip", // 0x25
|
||||
"ActionTrace", // 0x26
|
||||
"ActionStartDrag", // 0x27
|
||||
"ActionStopDrag", // 0x28
|
||||
"ActionStringCompare", // 0x29
|
||||
"ActionThrow", // 0x2A
|
||||
"ActionCastOp", // 0x2B
|
||||
"ActionImplementsOp", // 0x2C
|
||||
"", // 0x2D
|
||||
"", // 0x2E
|
||||
"", // 0x2F
|
||||
"ActionRandom", // 0x30
|
||||
"ActionMBLength", // 0x31
|
||||
"ActionOrd", // 0x32
|
||||
"ActionChr", // 0x33
|
||||
"ActionGetTimer", // 0x34
|
||||
"ActionMBSubString", // 0x35
|
||||
"ActionMBOrd", // 0x36
|
||||
"ActionMBChr", // 0x37
|
||||
"", // 0x38
|
||||
"", // 0x39
|
||||
"ActionDelete", // 0x3A
|
||||
"ActionDelete2", // 0x3B
|
||||
"ActionDefineLocal", // 0x3C
|
||||
"ActionCallFunction", // 0x3D
|
||||
"ActionReturn", // 0x3E
|
||||
"ActionModulo", // 0x3F
|
||||
"ActionNew", // 0x40
|
||||
"ActionVar", // 0x41
|
||||
"ActionInitArray", // 0x42
|
||||
"ActionInitObject", // 0x43
|
||||
"ActionTypeOf", // 0x44
|
||||
"ActionTargetPath", // 0x45
|
||||
"ActionEnumerate", // 0x46
|
||||
"ActionNewAdd", // 0x47
|
||||
"ActionNewLessThan", // 0x48
|
||||
"ActionNewEquals", // 0x49
|
||||
"ActionToNumber", // 0x4A
|
||||
"ActionToString", // 0x4B
|
||||
"ActionDup", // 0x4C
|
||||
"ActionSwap", // 0x4D
|
||||
"ActionGetMember", // 0x4E
|
||||
"ActionSetMember", // 0x4F
|
||||
"ActionIncrement", // 0x50
|
||||
"ActionDecrement", // 0x51
|
||||
"ActionCallMethod", // 0x52
|
||||
"ActionNewMethod", // 0x53
|
||||
"ActionInstanceOf", // 0x54
|
||||
"ActionEnum2", // 0x55
|
||||
"EAUnknownAction56", // 0x56
|
||||
"", // 0x57
|
||||
"EAUnknownAction58", // 0x58
|
||||
"EAPushZero", // 0x59
|
||||
"EAPushOne", // 0x5A
|
||||
"EACallFunctionPop", // 0x5B
|
||||
"EACallFunction", // 0x5C
|
||||
"EACAllMethodPop", // 0x5D
|
||||
"EACallMethod", // 0x5E
|
||||
"", // 0x5F
|
||||
"ActionBitwiseAnd", // 0x60
|
||||
"ActionBitwiseOr", // 0x61
|
||||
"ActionBitwiseXor", // 0x62
|
||||
"ActionShiftLeft", // 0x63
|
||||
"ActionShiftRight", // 0x64
|
||||
"ActionShiftRight2", // 0x65
|
||||
"ActionStrictEq", // 0x66
|
||||
"ActionGreater", // 0x67
|
||||
"ActionStringGreater", // 0x68
|
||||
"ActionExtends", // 0x69
|
||||
"", // 0x6A
|
||||
"", // 0x6B
|
||||
"", // 0x6C
|
||||
"", // 0x6D
|
||||
"", // 0x6E
|
||||
"", // 0x6F
|
||||
"EAPushThis", // 0x70
|
||||
"EAPushGlobal", // 0x71
|
||||
"EAZeroVariable", // 0x72
|
||||
"EAPushTrue", // 0x73
|
||||
"EAPushFalse", // 0x74
|
||||
"EAPushNull", // 0x75
|
||||
"EAPushUndefined", // 0x76
|
||||
"", // 0x77
|
||||
"", // 0x78
|
||||
"", // 0x79
|
||||
"", // 0x7A
|
||||
"", // 0x7B
|
||||
"", // 0x7C
|
||||
"", // 0x7D
|
||||
"", // 0x7E
|
||||
"", // 0x7F
|
||||
"", // 0x80
|
||||
"ActionGotoFrame", // 0x81
|
||||
"", // 0x82
|
||||
"ActionGetURL", // 0x83
|
||||
"", // 0x84
|
||||
"", // 0x85
|
||||
"", // 0x86
|
||||
"ActionSetRegister", // 0x87
|
||||
"ActionConstantPool", // 0x88
|
||||
"", // 0x89
|
||||
"ActionWaitForFrame", // 0x8A
|
||||
"ActionSetTarget", // 0x8B
|
||||
"ActionGotoLabel", // 0x8C
|
||||
"ActionWaitForFrameExpression", // 0x8D
|
||||
"ActionDefineFunction2", // 0x8E
|
||||
"ActionTry", // 0x8F
|
||||
"", // 0x90
|
||||
"", // 0x91
|
||||
"", // 0x92
|
||||
"", // 0x93
|
||||
"ActionWith", // 0x94
|
||||
"", // 0x95
|
||||
"ActionPushData", // 0x96
|
||||
"", // 0x97
|
||||
"", // 0x98
|
||||
"ActionBranchAlways", // 0x99
|
||||
"ActionGetURL2", // 0x9A
|
||||
"ActionDefineFunction", // 0x9B
|
||||
"", // 0x9C
|
||||
"ActionBranchIfTrue", // 0x9D
|
||||
"ActionCallFrame", // 0x9E
|
||||
"ActionGotoExpression", // 0x9F
|
||||
"", // 0xA0
|
||||
"EAPushString", // 0xA1
|
||||
"EAPushConstant", // 0xA2
|
||||
"EAPushWordConstant", // 0xA3
|
||||
"EAGetStringVar", // 0xA4
|
||||
"EAGetStringMember", // 0xA5
|
||||
"EASetStringVar", // 0xA6
|
||||
"EASetStringMember", // 0xA7
|
||||
"", // 0xA8
|
||||
"", // 0xA9
|
||||
"", // 0xAA
|
||||
"", // 0xAB
|
||||
"", // 0xAC
|
||||
"", // 0xAD
|
||||
"EAPushValueOfVar", // 0xAE
|
||||
"EAGetNamedMember", // 0xAF
|
||||
"EACallNamedFunctionPop", // 0xB0
|
||||
"EACallNamedFunction", // 0xB1
|
||||
"EACallNamedMethodPop", // 0xB2
|
||||
"EACallNamedMethod", // 0xB3
|
||||
"EAPushFloat", // 0xB4
|
||||
"EAPushByte", // 0xB5
|
||||
"EAPushShort", // 0xB6
|
||||
"EAPushLong", // 0xB7
|
||||
"EABranchIfFalse", // 0xB8
|
||||
"EAPushRegister" // 0xB9
|
||||
];
|
||||
|
||||
// ─── Action alignment table ───
|
||||
// 1 = this action's body needs alignment to 4-byte boundary
|
||||
const ActionAligns = new Array(0xB9 + 1).fill(0);
|
||||
ActionAligns[ACTION_BRANCHALWAYS] = 1;
|
||||
ActionAligns[ACTION_BRANCHIFTRUE] = 1;
|
||||
ActionAligns[EA_BRANCHIFFALSE] = 1;
|
||||
ActionAligns[ACTION_GOTOFRAME] = 1;
|
||||
ActionAligns[ACTION_SETREGISTER] = 1;
|
||||
ActionAligns[ACTION_WITH] = 1;
|
||||
ActionAligns[ACTION_GOTOEXPRESSION] = 1;
|
||||
ActionAligns[ACTION_GETURL] = 1;
|
||||
ActionAligns[ACTION_CONSTANTPOOL] = 1;
|
||||
ActionAligns[ACTION_PUSHDATA] = 1;
|
||||
ActionAligns[ACTION_DEFINEFUNCTION2] = 1;
|
||||
ActionAligns[ACTION_DEFINEFUNCTION] = 1;
|
||||
ActionAligns[EA_PUSHSTRING] = 1;
|
||||
ActionAligns[EA_GETSTRINGVAR] = 1;
|
||||
ActionAligns[EA_GETSTRINGMEMBER] = 1;
|
||||
ActionAligns[EA_SETSTRINGVAR] = 1;
|
||||
ActionAligns[EA_SETSTRINGMEMBER] = 1;
|
||||
ActionAligns[ACTION_SETTARGET] = 1;
|
||||
ActionAligns[ACTION_GOTOLABEL] = 1;
|
||||
|
||||
// ─── Action size table ───
|
||||
// Fixed byte size of each action (0 = unknown/empty, 1 = no additional data)
|
||||
const ActionSizes = [
|
||||
1, // ActionEnd 0x00
|
||||
0, // (empty) 0x01
|
||||
0, // (empty) 0x02
|
||||
0, // (empty) 0x03
|
||||
1, // ActionNextFrame 0x04
|
||||
1, // ActionPrevFrame 0x05
|
||||
1, // ActionPlay 0x06
|
||||
1, // ActionStop 0x07
|
||||
1, // ActionToggleQuality 0x08
|
||||
1, // ActionStopSounds 0x09
|
||||
1, // ActionAdd 0x0A
|
||||
1, // ActionSubtract 0x0B
|
||||
1, // ActionMultiply 0x0C
|
||||
1, // ActionDivide 0x0D
|
||||
1, // ActionEqual 0x0E
|
||||
1, // ActionLessThan 0x0F
|
||||
1, // ActionLogicalAnd 0x10
|
||||
1, // ActionLogicalOr 0x11
|
||||
1, // ActionLogicalNot 0x12
|
||||
1, // ActionStringEq 0x13
|
||||
1, // ActionStringLength 0x14
|
||||
1, // ActionSubString 0x15
|
||||
0, // (empty) 0x16
|
||||
1, // ActionPop 0x17
|
||||
1, // ActionInt 0x18
|
||||
0, // 0x19
|
||||
0, // 0x1A
|
||||
0, // 0x1B
|
||||
1, // ActionGetVariable 0x1C
|
||||
1, // ActionSetVariable 0x1D
|
||||
0, // 0x1E
|
||||
0, // 0x1F
|
||||
1, // ActionSetTargetExpression 0x20
|
||||
1, // ActionStringConcat 0x21
|
||||
1, // ActionGetProperty 0x22
|
||||
1, // ActionSetProperty 0x23
|
||||
1, // ActionDuplicateClip 0x24
|
||||
1, // ActionRemoveClip 0x25
|
||||
1, // ActionTrace 0x26
|
||||
1, // ActionStartDrag 0x27
|
||||
1, // ActionStopDrag 0x28
|
||||
1, // ActionStringCompare 0x29
|
||||
1, // ActionThrow 0x2A
|
||||
1, // ActionCastOp 0x2B
|
||||
1, // ActionImplementsOp 0x2C
|
||||
0, // 0x2D
|
||||
0, // 0x2E
|
||||
0, // 0x2F
|
||||
1, // ActionRandom 0x30
|
||||
1, // ActionMBLength 0x31
|
||||
1, // ActionOrd 0x32
|
||||
1, // ActionChr 0x33
|
||||
1, // ActionGetTimer 0x34
|
||||
1, // ActionMBSubString 0x35
|
||||
1, // ActionMBOrd 0x36
|
||||
1, // ActionMBChr 0x37
|
||||
0, // 0x38
|
||||
0, // 0x39
|
||||
1, // ActionDelete 0x3A
|
||||
1, // ActionDelete2 0x3B
|
||||
1, // ActionDefineLocal 0x3C
|
||||
1, // ActionCallFunction 0x3D
|
||||
1, // ActionReturn 0x3E
|
||||
1, // ActionModulo 0x3F
|
||||
1, // ActionNew 0x40
|
||||
1, // ActionVar 0x41
|
||||
1, // ActionInitArray 0x42
|
||||
1, // ActionInitObject 0x43
|
||||
1, // ActionTypeOf 0x44
|
||||
1, // ActionTargetPath 0x45
|
||||
1, // ActionEnumerate 0x46
|
||||
1, // ActionNewAdd 0x47
|
||||
1, // ActionNewLessThan 0x48
|
||||
1, // ActionNewEquals 0x49
|
||||
1, // ActionToNumber 0x4A
|
||||
1, // ActionToString 0x4B
|
||||
1, // ActionDup 0x4C
|
||||
1, // ActionSwap 0x4D
|
||||
1, // ActionGetMember 0x4E
|
||||
1, // ActionSetMember 0x4F
|
||||
1, // ActionIncrement 0x50
|
||||
1, // ActionDecrement 0x51
|
||||
1, // ActionCallMethod 0x52
|
||||
1, // ActionNewMethod 0x53
|
||||
1, // ActionInstanceOf 0x54
|
||||
1, // ActionEnum2 0x55
|
||||
1, // EAUnknownAction56 0x56
|
||||
0, // 0x57
|
||||
1, // EAUnknownAction58 0x58
|
||||
1, // EAPushZero 0x59
|
||||
1, // EAPushOne 0x5A
|
||||
1, // EACallFunctionPop 0x5B
|
||||
1, // EACallFunction 0x5C
|
||||
1, // EACAllMethodPop 0x5D
|
||||
1, // EACallMethod 0x5E
|
||||
0, // 0x5F
|
||||
1, // ActionBitwiseAnd 0x60
|
||||
1, // ActionBitwiseOr 0x61
|
||||
1, // ActionBitwiseXor 0x62
|
||||
1, // ActionShiftLeft 0x63
|
||||
1, // ActionShiftRight 0x64
|
||||
1, // ActionShiftRight2 0x65
|
||||
1, // ActionStrictEq 0x66
|
||||
1, // ActionGreater 0x67
|
||||
1, // ActionStringGreater 0x68
|
||||
1, // ActionExtends 0x69
|
||||
0, // 0x6A
|
||||
0, // 0x6B
|
||||
0, // 0x6C
|
||||
0, // 0x6D
|
||||
0, // 0x6E
|
||||
0, // 0x6F
|
||||
1, // EAPushThis 0x70
|
||||
1, // EAPushGlobal 0x71
|
||||
1, // EAZeroVariable 0x72
|
||||
1, // EAPushTrue 0x73
|
||||
1, // EAPushFalse 0x74
|
||||
1, // EAPushNull 0x75
|
||||
1, // EAPushUndefined 0x76
|
||||
0, // 0x77
|
||||
0, // 0x78
|
||||
0, // 0x79
|
||||
0, // 0x7A
|
||||
0, // 0x7B
|
||||
0, // 0x7C
|
||||
0, // 0x7D
|
||||
0, // 0x7E
|
||||
0, // 0x7F
|
||||
0, // 0x80
|
||||
5, // ActionGotoFrame 0x81
|
||||
0, // 0x82
|
||||
9, // ActionGetURL 0x83
|
||||
0, // 0x84
|
||||
0, // 0x85
|
||||
0, // 0x86
|
||||
5, // ActionSetRegister 0x87
|
||||
9, // ActionConstantPool 0x88
|
||||
0, // 0x89
|
||||
1, // ActionWaitForFrame 0x8A
|
||||
5, // ActionSetTarget 0x8B
|
||||
5, // ActionGotoLabel 0x8C
|
||||
1, // ActionWaitForFrameExpression 0x8D
|
||||
29, // ActionDefineFunction2 0x8E
|
||||
1, // ActionTry 0x8F
|
||||
0, // 0x90
|
||||
0, // 0x91
|
||||
0, // 0x92
|
||||
0, // 0x93
|
||||
5, // ActionWith 0x94
|
||||
0, // 0x95
|
||||
9, // ActionPushData 0x96
|
||||
0, // 0x97
|
||||
0, // 0x98
|
||||
5, // ActionBranchAlways 0x99
|
||||
1, // ActionGetURL2 0x9A
|
||||
25, // ActionDefineFunction 0x9B
|
||||
0, // 0x9C
|
||||
5, // ActionBranchIfTrue 0x9D
|
||||
1, // ActionCallFrame 0x9E
|
||||
5, // ActionGotoExpression 0x9F
|
||||
0, // 0xA0
|
||||
5, // EAPushString 0xA1
|
||||
2, // EAPushConstant 0xA2
|
||||
3, // EAPushWordConstant 0xA3
|
||||
5, // EAGetStringVar 0xA4
|
||||
5, // EAGetStringMember 0xA5
|
||||
5, // EASetStringVar 0xA6
|
||||
5, // EASetStringMember 0xA7
|
||||
0, // 0xA8
|
||||
0, // 0xA9
|
||||
0, // 0xAA
|
||||
0, // 0xAB
|
||||
0, // 0xAC
|
||||
0, // 0xAD
|
||||
2, // EAPushValueOfVar 0xAE
|
||||
2, // EAGetNamedMember 0xAF
|
||||
2, // EACallNamedFunctionPop 0xB0
|
||||
2, // EACallNamedFunction 0xB1
|
||||
2, // EACallNamedMethodPop 0xB2
|
||||
2, // EACallNamedMethod 0xB3
|
||||
5, // EAPushFloat 0xB4
|
||||
2, // EAPushByte 0xB5
|
||||
3, // EAPushShort 0xB6
|
||||
5, // EAPushLong 0xB7
|
||||
5, // EABranchIfFalse 0xB8
|
||||
2 // EAPushRegister 0xB9
|
||||
];
|
||||
|
||||
// ─── Composed helpers ───
|
||||
|
||||
// Selector string for action nodes that reference constants
|
||||
const CONST_ACTION_SELECTOR = '[action=' + EA_PUSHCONSTANT + '],' +
|
||||
'[action=' + EA_CALLNAMEDFUNCTIONPOP + '],' +
|
||||
'[action=' + EA_CALLNAMEDFUNCTION + '],' +
|
||||
'[action=' + EA_CALLNAMEDMETHODPOP + '],' +
|
||||
'[action=' + EA_CALLNAMEDMETHOD + '],' +
|
||||
'[action=' + EA_PUSHVALUEOFVAR + '],' +
|
||||
'[action=' + EA_GETNAMEDMEMBER + '],' +
|
||||
'[action=' + EA_PUSHWORDCONSTANT + ']';
|
||||
|
||||
// Selector for function-splitting tag names (used in expand)
|
||||
const FUNCTION_SPLITTERS = 'definefunction2,definefunction,constantpool,end';
|
||||
|
||||
// System argument order for definefunction2
|
||||
const SYSTEM_ARGUMENTS = ['this', 'arguments', 'super', '_root', '_parent', '_global', '_extern'];
|
||||
|
||||
// ─── Exports ───
|
||||
module.exports = {
|
||||
// opcodes
|
||||
ACTION_END, ACTION_NEXTFRAME, ACTION_PREVFRAME, ACTION_PLAY, ACTION_STOP,
|
||||
ACTION_TOGGLEQUALITY, ACTION_STOPSOUNDS, ACTION_ADD, ACTION_SUBTRACT,
|
||||
ACTION_MULTIPLY, ACTION_DIVIDE, ACTION_EQUAL, ACTION_LESSTHAN,
|
||||
ACTION_LOGICALAND, ACTION_LOGICALOR, ACTION_LOGICALNOT, ACTION_STRINGEQ,
|
||||
ACTION_STRINGLENGTH, ACTION_SUBSTRING, ACTION_POP, ACTION_INT,
|
||||
ACTION_GETVARIABLE, ACTION_SETVARIABLE, ACTION_SETTARGETEXPRESSION,
|
||||
ACTION_STRINGCONCAT, ACTION_GETPROPERTY, ACTION_SETPROPERTY,
|
||||
ACTION_DUPLICATECLIP, ACTION_REMOVECLIP, ACTION_TRACE,
|
||||
ACTION_STARTDRAGMOVIE, ACTION_STOPDRAGMOVIE, ACTION_STRINGCOMPARE,
|
||||
ACTION_THROW, ACTION_CASTOP, ACTION_IMPLEMENTSOP, ACTION_RANDOM,
|
||||
ACTION_MBLENGTH, ACTION_ORD, ACTION_CHR, ACTION_GETTIMER,
|
||||
ACTION_MBSUBSTRING, ACTION_MBORD, ACTION_MBCHR, ACTION_DELETE,
|
||||
ACTION_DELETE2, ACTION_DEFINELOCAL, ACTION_CALLFUNCTION, ACTION_RETURN,
|
||||
ACTION_MODULO, ACTION_NEW, ACTION_VAR, ACTION_INITARRAY, ACTION_INITOBJECT,
|
||||
ACTION_TYPEOF, ACTION_TARGETPATH, ACTION_ENUMERATE, ACTION_NEWADD,
|
||||
ACTION_NEWLESSTHAN, ACTION_NEWEQUALS, ACTION_TONUMBER, ACTION_TOSTRING,
|
||||
ACTION_DUP, ACTION_SWAP, ACTION_GETMEMBER, ACTION_SETMEMBER,
|
||||
ACTION_INCREMENT, ACTION_DECREMENT, ACTION_CALLMETHOD, ACTION_NEWMETHOD,
|
||||
ACTION_INSTANCEOF, ACTION_ENUM2, ACTION_BITWISEAND, ACTION_BITWISEOR,
|
||||
ACTION_BITWISEXOR, ACTION_SHIFTLEFT, ACTION_SHIFTRIGHT, ACTION_SHIFTRIGHT2,
|
||||
ACTION_STRICTEQ, ACTION_GREATER, ACTION_STRINGGREATER, ACTION_EXTENDS,
|
||||
ACTION_GOTOFRAME, ACTION_GETURL, ACTION_WAITFORFRAME, ACTION_SETTARGET,
|
||||
ACTION_GOTOLABEL, ACTION_WAITFORFRAMEEXPRESSION, ACTION_PUSHDATA,
|
||||
ACTION_BRANCHALWAYS, ACTION_GETURL2, ACTION_DEFINEFUNCTION,
|
||||
ACTION_BRANCHIFTRUE, ACTION_CALLFRAME, ACTION_GOTOEXPRESSION,
|
||||
ACTION_CONSTANTPOOL, ACTION_DEFINEFUNCTION2, ACTION_TRY, ACTION_WITH,
|
||||
ACTION_SETREGISTER,
|
||||
EA_ACTION56, EA_ACTION58, EA_PUSHZERO, EA_PUSHONE,
|
||||
EA_CALLFUNCTIONPOP, EA_CALLFUNCTION, EA_CALLMETHODPOP, EA_CALLMETHOD,
|
||||
EA_PUSHTHIS, EA_PUSHGLOBAL, EA_ZEROVARIABLE, EA_PUSHTRUE, EA_PUSHFALSE,
|
||||
EA_PUSHNULL, EA_PUSHUNDEFINED, EA_ACTION77,
|
||||
EA_PUSHSTRING, EA_PUSHCONSTANT, EA_PUSHWORDCONSTANT,
|
||||
EA_GETSTRINGVAR, EA_GETSTRINGMEMBER, EA_SETSTRINGVAR, EA_SETSTRINGMEMBER,
|
||||
EA_PUSHVALUEOFVAR, EA_GETNAMEDMEMBER,
|
||||
EA_CALLNAMEDFUNCTIONPOP, EA_CALLNAMEDFUNCTION,
|
||||
EA_CALLNAMEDMETHODPOP, EA_CALLNAMEDMETHOD,
|
||||
EA_PUSHFLOAT, EA_PUSHBYTE, EA_PUSHSHORT, EA_PUSHLONG,
|
||||
EA_BRANCHIFFALSE, EA_PUSHREGISTER,
|
||||
|
||||
// flag enums
|
||||
PlaceObjectFlags, ClipEventFlags, ButtonRecordFlags,
|
||||
ButtonActionFlags, ButtonInput, FunctionPreloadFlags,
|
||||
|
||||
// name tables
|
||||
ActionNames, ActionNames2, ActionAligns, ActionSizes,
|
||||
|
||||
// composed helpers
|
||||
CONST_ACTION_SELECTOR, FUNCTION_SPLITTERS, SYSTEM_ARGUMENTS
|
||||
};
|
||||
Reference in New Issue
Block a user