// Copyright 2022 xensik. All rights reserved. // // Use of this source code is governed by a GNU GPLv3 license // that can be found in the LICENSE file. #pragma once #include "utils/xsk/utils.hpp" #include "assembler.hpp" #include "disassembler.hpp" #include "compiler.hpp" #include "decompiler.hpp" #include "resolver.hpp" #include "context.hpp" namespace xsk::gsc::s1c { constexpr std::uint16_t max_string_id = 0xA51D; enum class opcode : std::uint8_t { OP_CastFieldObject = 0x1D, OP_SetLocalVariableFieldCached = 0x1E, OP_plus = 0x1F, OP_RemoveLocalVariables = 0x20, OP_EvalSelfFieldVariableRef = 0x21, OP_ScriptFarMethodChildThreadCall = 0x22, OP_GetGameRef = 0x23, OP_EvalAnimFieldVariable = 0x24, OP_EvalLevelFieldVariableRef = 0x25, OP_GetThisthread = 0x26, OP_greater = 0x27, OP_waittillmatch = 0x28, OP_shift_right = 0x29, OP_dec = 0x2A, OP_JumpOnTrue = 0x2B, OP_bit_or = 0x2C, OP_equality = 0x2D, OP_ClearLocalVariableFieldCached0 = 0x2E, OP_notify = 0x2F, OP_GetVector = 0x30, OP_ScriptChildThreadCallPointer = 0x31, OP_PreScriptCall = 0x32, OP_GetByte = 0x33, OP_ScriptFarMethodThreadCall = 0x34, OP_SetSelfFieldVariableField = 0x35, OP_JumpOnFalseExpr = 0x36, OP_GetUndefined = 0x37, OP_jumpback = 0x38, OP_JumpOnTrueExpr = 0x39, OP_CallBuiltin0 = 0x3A, OP_CallBuiltin1 = 0x3B, OP_CallBuiltin2 = 0x3C, OP_CallBuiltin3 = 0x3D, OP_CallBuiltin4 = 0x3E, OP_CallBuiltin5 = 0x3F, OP_CallBuiltin = 0x40, OP_SetLocalVariableFieldCached0 = 0x41, OP_ClearFieldVariable = 0x42, OP_GetLevel = 0x43, OP_size = 0x44, OP_SafeSetWaittillVariableFieldCached = 0x45, OP_ScriptLocalThreadCall = 0x46, OP_AddArray = 0x47, OP_endon = 0x48, OP_EvalFieldVariable = 0x49, OP_shift_left = 0x4A, OP_EvalLocalArrayRefCached0 = 0x4B, OP_Return = 0x4C, OP_CreateLocalVariable = 0x4D, OP_SafeSetVariableFieldCached0 = 0x4E, OP_GetBuiltinFunction = 0x4F, OP_ScriptLocalMethodCall = 0x50, OP_CallBuiltinMethodPointer = 0x51, OP_ScriptLocalChildThreadCall = 0x52, OP_GetSelfObject = 0x53, OP_GetGame = 0x54, OP_SetLevelFieldVariableField = 0x55, OP_EvalArray = 0x56, OP_GetSelf = 0x57, OP_End = 0x58, OP_EvalSelfFieldVariable = 0x59, OP_less_equal = 0x5A, OP_EvalLocalVariableCached0 = 0x5B, OP_EvalLocalVariableCached1 = 0x5C, OP_EvalLocalVariableCached2 = 0x5D, OP_EvalLocalVariableCached3 = 0x5E, OP_EvalLocalVariableCached4 = 0x5F, OP_EvalLocalVariableCached5 = 0x60, OP_EvalLocalVariableCached = 0x61, OP_EvalNewLocalArrayRefCached0 = 0x62, OP_ScriptMethodChildThreadCallPointer = 0x63, OP_EvalLocalVariableObjectCached = 0x64, OP_ScriptLocalMethodThreadCall = 0x65, OP_GetInteger = 0x66, OP_ScriptMethodCallPointer = 0x67, OP_checkclearparams = 0x68, OP_SetAnimFieldVariableField = 0x69, // ---- = 0x6A, OP_minus = 0x6B, OP_ScriptLocalFunctionCall2 = 0x6C, OP_GetNegUnsignedShort = 0x6D, OP_GetNegByte = 0x6E, OP_SafeCreateVariableFieldCached = 0x6F, OP_greater_equal = 0x70, OP_vector = 0x71, OP_GetBuiltinMethod = 0x72, OP_endswitch = 0x73, OP_ClearArray = 0x74, OP_DecTop = 0x75, OP_CastBool = 0x76, OP_EvalArrayRef = 0x77, OP_SetNewLocalVariableFieldCached0 = 0x78, OP_GetZero = 0x79, OP_wait = 0x7A, OP_waittill = 0x7B, OP_GetIString = 0x7C, OP_ScriptFarFunctionCall = 0x7D, OP_GetAnimObject = 0x7E, OP_GetAnimTree = 0x7F, OP_EvalLocalArrayCached = 0x80, OP_mod = 0x81, OP_ScriptFarThreadCall = 0x82, OP_GetUnsignedShort = 0x83, OP_clearparams = 0x84, OP_ScriptMethodThreadCallPointer = 0x85, OP_ScriptFunctionCallPointer = 0x86, OP_EmptyArray = 0x87, OP_SafeSetVariableFieldCached = 0x88, // ---- = 0x89, OP_EvalFieldVariableRef = 0x8A, OP_ScriptLocalMethodChildThreadCall = 0x8B, // ---- = 0x8C, OP_GetFloat = 0x8D, OP_EvalLocalVariableRefCached = 0x8E, OP_JumpOnFalse = 0x8F, OP_BoolComplement = 0x90, OP_ScriptThreadCallPointer = 0x91, OP_ScriptFarFunctionCall2 = 0x92, OP_less = 0x93, OP_BoolNot = 0x94, OP_waittillFrameEnd = 0x95, OP_waitFrame = 0x96, OP_GetString = 0x97, OP_EvalLevelFieldVariable = 0x98, OP_GetLevelObject = 0x99, OP_inc = 0x9A, OP_CallBuiltinMethod0 = 0x9B, OP_CallBuiltinMethod1 = 0x9C, OP_CallBuiltinMethod2 = 0x9D, OP_CallBuiltinMethod3 = 0x9E, OP_CallBuiltinMethod4 = 0x9F, OP_CallBuiltinMethod5 = 0xA0, OP_CallBuiltinMethod = 0xA1, OP_GetAnim = 0xA2, OP_switch = 0xA3, OP_SetVariableField = 0xA4, OP_divide = 0xA5, OP_GetLocalFunction = 0xA6, OP_ScriptFarChildThreadCall = 0xA7, OP_multiply = 0xA8, OP_ClearLocalVariableFieldCached = 0xA9, OP_EvalAnimFieldVariableRef = 0xAA, OP_EvalLocalArrayRefCached = 0xAB, OP_EvalLocalVariableRefCached0 = 0xAC, OP_bit_and = 0xAD, OP_GetAnimation = 0xAE, OP_GetFarFunction = 0xAF, OP_CallBuiltinPointer = 0xB0, OP_jump = 0xB1, OP_voidCodepos = 0xB2, OP_ScriptFarMethodCall = 0xB3, OP_inequality = 0xB4, OP_ScriptLocalFunctionCall = 0xB5, OP_bit_ex_or = 0xB6, }; auto opcode_size(std::uint8_t id) -> std::uint32_t; } // namespace xsk::gsc::s1c