Files
2026-02-02 04:50:13 +01:00

217 lines
4.2 KiB
C++

/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#ifndef LINGODEC_ENUMS_H
#define LINGODEC_ENUMS_H
namespace LingoDec {
enum OpCode {
// single-byte
kOpRet = 0x01,
kOpRetFactory = 0x02,
kOpPushZero = 0x03,
kOpMul = 0x04,
kOpAdd = 0x05,
kOpSub = 0x06,
kOpDiv = 0x07,
kOpMod = 0x08,
kOpInv = 0x09,
kOpJoinStr = 0x0a,
kOpJoinPadStr = 0x0b,
kOpLt = 0x0c,
kOpLtEq = 0x0d,
kOpNtEq = 0x0e,
kOpEq = 0x0f,
kOpGt = 0x10,
kOpGtEq = 0x11,
kOpAnd = 0x12,
kOpOr = 0x13,
kOpNot = 0x14,
kOpContainsStr = 0x15,
kOpContains0Str = 0x16,
kOpGetChunk = 0x17,
kOpHiliteChunk = 0x18,
kOpOntoSpr = 0x19,
kOpIntoSpr = 0x1a,
kOpGetField = 0x1b,
kOpStartTell = 0x1c,
kOpEndTell = 0x1d,
kOpPushList = 0x1e,
kOpPushPropList = 0x1f,
kOpSwap = 0x21,
// multi-byte
kOpPushInt8 = 0x41,
kOpPushArgListNoRet = 0x42,
kOpPushArgList = 0x43,
kOpPushCons = 0x44,
kOpPushSymb = 0x45,
kOpPushVarRef = 0x46,
kOpGetGlobal2 = 0x48,
kOpGetGlobal = 0x49,
kOpGetProp = 0x4a,
kOpGetParam = 0x4b,
kOpGetLocal = 0x4c,
kOpSetGlobal2 = 0x4e,
kOpSetGlobal = 0x4f,
kOpSetProp = 0x50,
kOpSetParam = 0x51,
kOpSetLocal = 0x52,
kOpJmp = 0x53,
kOpEndRepeat = 0x54,
kOpJmpIfZ = 0x55,
kOpLocalCall = 0x56,
kOpExtCall = 0x57,
kOpObjCallV4 = 0x58,
kOpPut = 0x59,
kOpPutChunk = 0x5a,
kOpDeleteChunk = 0x5b,
kOpGet = 0x5c,
kOpSet = 0x5d,
kOpGetMovieProp = 0x5f,
kOpSetMovieProp = 0x60,
kOpGetObjProp = 0x61,
kOpSetObjProp = 0x62,
kOpTellCall = 0x63,
kOpPeek = 0x64,
kOpPop = 0x65,
kOpTheBuiltin = 0x66,
kOpObjCall = 0x67,
kOpPushChunkVarRef = 0x6d,
kOpPushInt16 = 0x6e,
kOpPushInt32 = 0x6f,
kOpGetChainedProp = 0x70,
kOpPushFloat32 = 0x71,
kOpGetTopLevelProp = 0x72,
kOpNewObj = 0x73
};
enum DatumType {
kDatumVoid,
kDatumSymbol,
kDatumVarRef,
kDatumString,
kDatumInt,
kDatumFloat,
kDatumList,
kDatumArgList,
kDatumArgListNoRet,
kDatumPropList
};
enum ChunkExprType {
kChunkChar = 0x01,
kChunkWord = 0x02,
kChunkItem = 0x03,
kChunkLine = 0x04
};
enum PutType {
kPutInto = 0x01,
kPutAfter = 0x02,
kPutBefore = 0x03
};
enum NodeType {
kNoneNode,
kErrorNode,
kTempNode,
kCommentNode,
kLiteralNode,
kBlockNode,
kHandlerNode,
kExitStmtNode,
kInverseOpNode,
kNotOpNode,
kBinaryOpNode,
kChunkExprNode,
kChunkHiliteStmtNode,
kChunkDeleteStmtNode,
kSpriteIntersectsExprNode,
kSpriteWithinExprNode,
kMemberExprNode,
kVarNode,
kAssignmentStmtNode,
kIfStmtNode,
kRepeatWhileStmtNode,
kRepeatWithInStmtNode,
kRepeatWithToStmtNode,
kCaseStmtNode,
kCaseLabelNode,
kOtherwiseNode,
kEndCaseNode,
kTellStmtNode,
kSoundCmdStmtNode,
kPlayCmdStmtNode,
kCallNode,
kObjCallNode,
kObjCallV4Node,
kTheExprNode,
kLastStringChunkExprNode,
kStringChunkCountExprNode,
kMenuPropExprNode,
kMenuItemPropExprNode,
kSoundPropExprNode,
kSpritePropExprNode,
kThePropExprNode,
kObjPropExprNode,
kObjBracketExprNode,
kObjPropIndexExprNode,
kExitRepeatStmtNode,
kNextRepeatStmtNode,
kPutStmtNode,
kWhenStmtNode,
kNewObjNode
};
enum BytecodeTag {
kTagNone,
kTagSkip,
kTagRepeatWhile,
kTagRepeatWithIn,
kTagRepeatWithTo,
kTagRepeatWithDownTo,
kTagNextRepeatTarget,
kTagEndCase
};
enum CaseExpect {
kCaseExpectEnd,
kCaseExpectOr,
kCaseExpectNext,
kCaseExpectOtherwise
};
enum ScriptFlag {
kScriptFlagUnused = (1 << 0x0),
kScriptFlagFuncsGlobal = (1 << 0x1),
kScriptFlagVarsGlobal = (1 << 0x2), // Occurs in event scripts (which have no local vars). Correlated with use of alternate global var opcodes.
kScriptFlagUnk3 = (1 << 0x3),
kScriptFlagFactoryDef = (1 << 0x4),
kScriptFlagUnk5 = (1 << 0x5),
kScriptFlagUnk6 = (1 << 0x6),
kScriptFlagUnk7 = (1 << 0x7),
kScriptFlagHasFactory = (1 << 0x8),
kScriptFlagEventScript = (1 << 0x9),
kScriptFlagEventScript2 = (1 << 0xa),
kScriptFlagUnkB = (1 << 0xb),
kScriptFlagUnkC = (1 << 0xc),
kScriptFlagUnkD = (1 << 0xd),
kScriptFlagUnkE = (1 << 0xe),
kScriptFlagUnkF = (1 << 0xf)
};
enum LiteralType {
kLiteralString = 1,
kLiteralInt = 4,
kLiteralFloat = 9
};
}
#endif // LINGODEC_ENUMS_H