diff --git a/src/client/component/gsc/script_error.cpp b/src/client/component/gsc/script_error.cpp index 5a8b7d04..c581e703 100644 --- a/src/client/component/gsc/script_error.cpp +++ b/src/client/component/gsc/script_error.cpp @@ -1,5 +1,5 @@ #include -/* + #include "loader/component_loader.hpp" #include "game/game.hpp" @@ -326,29 +326,24 @@ namespace gsc public: void post_unpack() override { - scr_emit_function_hook.create(SELECT_VALUE(0x3BD680_b, 0x504660_b), &scr_emit_function_stub); + scr_emit_function_hook.create(0xBFCF90_b, &scr_emit_function_stub); - utils::hook::call(SELECT_VALUE(0x3BD626_b, 0x504606_b), compile_error_stub); // CompileError (LinkFile) - utils::hook::call(SELECT_VALUE(0x3BD672_b, 0x504652_b), compile_error_stub); // ^ - utils::hook::call(SELECT_VALUE(0x3BD75A_b, 0x50473A_b), find_variable_stub); // Scr_EmitFunction + utils::hook::call(0xBFCF3A_b, compile_error_stub); // CompileError (LinkFile) + utils::hook::call(0xBFCF86_b, compile_error_stub); // ^ + utils::hook::call(0xBFD06F_b, find_variable_stub); // Scr_EmitFunction // Restore basic error messages for commonly used scr functions - utils::hook::jump(SELECT_VALUE(0x3C89F0_b, 0x50F9E0_b), scr_get_object); - utils::hook::jump(SELECT_VALUE(0x3C84C0_b, 0x50F560_b), scr_get_const_string); - utils::hook::jump(SELECT_VALUE(0x3C8280_b, 0x50F320_b), scr_get_const_istring); - utils::hook::jump(SELECT_VALUE(0x2D6950_b, 0x452EF0_b), scr_validate_localized_string_ref); - utils::hook::jump(SELECT_VALUE(0x3C8F30_b, 0x50FF20_b), scr_get_vector); - utils::hook::jump(SELECT_VALUE(0x3C8930_b, 0x50F920_b), scr_get_int); - utils::hook::jump(SELECT_VALUE(0x3C87D0_b, 0x50F870_b), scr_get_float); + utils::hook::jump(0xC0BA10_b, scr_get_object); + utils::hook::jump(0xC0B4C0_b, scr_get_const_string); + utils::hook::jump(0xC0B270_b, scr_get_const_istring); // might be wrong address + utils::hook::jump(0xB52210_b, scr_validate_localized_string_ref); + utils::hook::jump(0xC0BF40_b, scr_get_vector); + utils::hook::jump(0xC0B950_b, scr_get_int); + utils::hook::jump(0xC0B7E0_b, scr_get_float); - utils::hook::jump(SELECT_VALUE(0x3C8C10_b, 0x50FC00_b), scr_get_pointer_type); - utils::hook::jump(SELECT_VALUE(0x3C8DE0_b, 0x50FDD0_b), scr_get_type); - utils::hook::jump(SELECT_VALUE(0x3C8E50_b, 0x50FE40_b), scr_get_type_name); - - if (!game::environment::is_sp()) - { - safe_func<0xBA7A0>(); // fix vlobby cac crash - } + utils::hook::jump(0xC0BC00_b, scr_get_pointer_type); + utils::hook::jump(0xC0BDE0_b, scr_get_type); + utils::hook::jump(0xC0BE50_b, scr_get_type_name); } void pre_destroy() override @@ -359,4 +354,3 @@ namespace gsc } REGISTER_COMPONENT(gsc::error) -*/ diff --git a/src/client/component/gsc/script_extension.cpp b/src/client/component/gsc/script_extension.cpp index 6e0aa207..934f48ef 100644 --- a/src/client/component/gsc/script_extension.cpp +++ b/src/client/component/gsc/script_extension.cpp @@ -8,6 +8,7 @@ #include "component/dvars.hpp" #include "component/scripting.hpp" +#include "script_error.hpp" #include "script_extension.hpp" #include "script_loading.hpp" @@ -15,8 +16,8 @@ namespace gsc { - std::uint16_t function_id_start = 0x30A; - std::uint16_t method_id_start = 0x8586; + std::uint16_t function_id_start = 0x326; + std::uint16_t method_id_start = 0x85DB; builtin_function func_table[0x1000]; builtin_method meth_table[0x1000]; @@ -192,25 +193,23 @@ namespace gsc void vm_error_stub(int mark_pos) { -#ifdef FALSE // TODO - const bool dev_script = developer_script ? developer_script->current.enabled : false; -#else - const bool dev_script = true; -#endif + //const bool dev_script = developer_script ? developer_script->current.enabled : false; + bool dev_script = true; + if (!dev_script && !force_error_print) { - utils::hook::invoke(SELECT_VALUE(0x415C90_b, 0x59DDA0_b), mark_pos); + utils::hook::invoke(0x510C80_b, mark_pos); return; } console::warn("*********** script runtime error *************\n"); - const auto opcode_id = *reinterpret_cast(SELECT_VALUE(0xC4015E8_b, 0xB7B8968_b)); + const auto opcode_id = *reinterpret_cast(0x6B22940_b); const std::string error_str = gsc_error_msg.has_value() ? utils::string::va(": %s", gsc_error_msg.value().data()) : ""; - if ((opcode_id >= 0x1A && opcode_id <= 0x20) || (opcode_id >= 0xA9 && opcode_id <= 0xAF)) + if ((opcode_id >= 0x1A && opcode_id <= 0x20) || (opcode_id >= 0xA8 && opcode_id <= 0xAE)) { builtin_call_error(error_str); } @@ -232,7 +231,7 @@ namespace gsc print_callstack(); console::warn("**********************************************\n"); - utils::hook::invoke(SELECT_VALUE(0x415C90_b, 0x59DDA0_b), mark_pos); + utils::hook::invoke(0x510C80_b, mark_pos); } void print(const function_args& args) @@ -328,28 +327,36 @@ namespace gsc public: void post_unpack() override { -#ifdef FALSE // TODO - developer_script = dvars::register_bool("developer_script", false, 0, "Enable developer script comments"); -#endif + //developer_script = dvars::register_bool("developer_script", false, 0, "Enable developer script comments"); + /* utils::hook::set(0xBFD16C_b, 0x1000); // change builtin func count utils::hook::set(0xBFD172_b + 4, static_cast(reverse_b((&func_table)))); // TODO - utils::hook::set(SELECT_VALUE(0x3CB718_b, 0x512778_b) + 4, + utils::hook::set(0xC0E5CE_b + 3, static_cast(reverse_b((&func_table)))); - utils::hook::inject(SELECT_VALUE(0x3BDC28_b, 0x504C58_b) + 3, &func_table); - utils::hook::set(SELECT_VALUE(0x3BDC1E_b, 0x504C4E_b), sizeof(func_table)); + utils::hook::inject(0xBFD5A1_b + 3, &func_table); + utils::hook::set(0xBFD595_b + 2, sizeof(func_table)); - utils::hook::set(SELECT_VALUE(0x3BD882_b, 0x504862_b) + 4, + utils::hook::set(0xBFD182_b + 4, static_cast(reverse_b((&meth_table)))); - utils::hook::set(SELECT_VALUE(0x3CBA3B_b, 0x512A9B_b) + 4, + utils::hook::set(0xC0E8F2_b + 4, // could be wrong.. static_cast(reverse_b(&meth_table))); - utils::hook::inject(SELECT_VALUE(0x3BDC36_b, 0x504C66_b) + 3, &meth_table); - utils::hook::set(SELECT_VALUE(0x3BDC3F_b, 0x504C6F_b), sizeof(meth_table)); + utils::hook::inject(0xBFD5AF_b + 3, &meth_table); + utils::hook::set(0xBFD5B6_b + 2, sizeof(meth_table)); + */ + /* + + TODO: needs replaced with assembly instead + in H1, there was a nullsub (assert?) between the builtin_function and then calling the builtin_function. on IW7, there is no nullsub + and it just calls this directly like function_table[id - 1] instead of builtin_function() (builtin_function being function_table[id-1], just variable) + + */ + /* utils::hook::nop(SELECT_VALUE(0x3CB723_b, 0x512783_b), 8); utils::hook::call(SELECT_VALUE(0x3CB723_b, 0x512783_b), vm_call_builtin_function_stub); @@ -357,9 +364,11 @@ namespace gsc utils::hook::nop(SELECT_VALUE(0x3CBA46_b, 0x512AA6_b), 6); utils::hook::nop(SELECT_VALUE(0x3CBA4E_b, 0x512AAE_b), 2); utils::hook::call(SELECT_VALUE(0x3CBA46_b, 0x512AA6_b), vm_call_builtin_method_stub); + */ - utils::hook::call(SELECT_VALUE(0x3CC9F3_b, 0x513A53_b), vm_error_stub); // LargeLocalResetToMark + utils::hook::call(0xC0F8C1_b, vm_error_stub); // LargeLocalResetToMark + /* if (game::environment::is_dedi()) { function::add("isusingmatchrulesdata", [](const function_args& args) @@ -369,7 +378,6 @@ namespace gsc }); } - /* function::add("print", [](const function_args& args) { print(args); @@ -468,4 +476,4 @@ namespace gsc }; } -REGISTER_COMPONENT(gsc::extension) +//REGISTER_COMPONENT(gsc::extension) diff --git a/src/client/component/gsc/script_loading.cpp b/src/client/component/gsc/script_loading.cpp index 8609f237..3c6d0987 100644 --- a/src/client/component/gsc/script_loading.cpp +++ b/src/client/component/gsc/script_loading.cpp @@ -75,6 +75,8 @@ namespace gsc bool read_raw_script_file(const std::string& name, std::string* data) { + console::debug("[read_raw_script_file] %s\n", name.data()); + if (filesystem::read_file(name, data)) { return true; @@ -117,6 +119,8 @@ namespace gsc return nullptr; } + console::debug("working with %s\n", real_name.data()); + // filter out "GSC rawfiles" that were used for development usage and are not meant for us. // each "GSC rawfile" has a ScriptFile counterpart to be used instead if (game::DB_XAssetExists(game::ASSET_TYPE_SCRIPTFILE, file_name) && @@ -275,9 +279,9 @@ namespace gsc return game::DB_IsXAssetDefault(type, name); } - void load_scripts_stub(void* a1, void* a2) + void load_scripts_stub() { - utils::hook::invoke(0xB50670_b, a1, a2); + utils::hook::invoke(0xB50670_b); if (!game::Com_FrontEndScene_IsActive()) { diff --git a/src/client/component/scripting.cpp b/src/client/component/scripting.cpp index ec4f070f..91c7b5ce 100644 --- a/src/client/component/scripting.cpp +++ b/src/client/component/scripting.cpp @@ -1,6 +1,7 @@ #include #include "loader/component_loader.hpp" +#include "component/gsc/script_extension.hpp" #include "component/gsc/script_loading.hpp" #include "component/scheduler.hpp" #include "component/scripting.hpp" @@ -218,4 +219,4 @@ namespace scripting }; } -REGISTER_COMPONENT(scripting::component) +//REGISTER_COMPONENT(scripting::component) diff --git a/src/client/game/game.cpp b/src/client/game/game.cpp index 83c1819f..1bd22453 100644 --- a/src/client/game/game.cpp +++ b/src/client/game/game.cpp @@ -179,4 +179,19 @@ namespace game Cbuf_AddCall(0, SV_CmdsMP_CheckLoadGame); } } -} \ No newline at end of file +} + +size_t operator"" _b(const size_t ptr) +{ + return game::base_address + ptr; +} + +size_t reverse_b(const size_t ptr) +{ + return ptr - game::base_address; +} + +size_t reverse_b(const void* ptr) +{ + return reverse_b(reinterpret_cast(ptr)); +} diff --git a/src/client/game/game.hpp b/src/client/game/game.hpp index ab503268..0aa4840a 100644 --- a/src/client/game/game.hpp +++ b/src/client/game/game.hpp @@ -58,9 +58,8 @@ namespace game void SV_CmdsMP_RequestMapRestart(bool loadScripts, bool migrate); } -inline uintptr_t operator"" _b(const uintptr_t ptr) -{ - return game::base_address + ptr; -} +size_t operator"" _b(const size_t ptr); +size_t reverse_b(const size_t ptr); +size_t reverse_b(const void* ptr); #include "symbols.hpp" diff --git a/src/client/game/scripting/functions.cpp b/src/client/game/scripting/functions.cpp index bf278442..daf766ee 100644 --- a/src/client/game/scripting/functions.cpp +++ b/src/client/game/scripting/functions.cpp @@ -3,6 +3,7 @@ #include +#include "component/gsc/script_extension.hpp" #include "component/gsc/script_loading.hpp" namespace scripting diff --git a/src/client/game/structs.hpp b/src/client/game/structs.hpp index dc7cb990..0c4d2804 100644 --- a/src/client/game/structs.hpp +++ b/src/client/game/structs.hpp @@ -28,12 +28,6 @@ namespace game FEATURE_TIMESCALE = 69, }; - enum errorParm - { - ERR_FATAL = 0, - ERR_DROP = 1, - }; - enum Sys_Folder { SF_ZONE = 0x0, @@ -3221,221 +3215,6 @@ namespace game BD_NAT_STRICT = 0x3, }; - struct scr_entref_t - { - unsigned short entnum; - unsigned short classnum; - }; - - enum PMem_Stack : __int32 - { - PMEM_STACK_GAME = 0x0, - PMEM_STACK_RENDER_TARGETS = 0x1, - PMEM_STACK_MEM_VIRTUAL = 0x2, - PMEM_STACK_MEMCARD_LARGE_BUFFER = 0x3, - PMEM_STACK_SOUND = 0x4, - PMEM_STACK_STASHED_MEMORY = 0x5, - PMEM_STACK_CINEMATIC = 0x6, - PMEM_STACK_COUNT = 0x7, - }; - - enum PMem_Source - { - PMEM_SOURCE_EXTERNAL = 0x0, - PMEM_SOURCE_DATABASE = 0x1, - PMEM_SOURCE_DEFAULT_LOW = 0x2, - PMEM_SOURCE_DEFAULT_HIGH = 0x3, - PMEM_SOURCE_MOVIE = 0x4, - PMEM_SOURCE_SCRIPT = 0x5, - PMEM_SOURCE_UNK5 = 0x5, - PMEM_SOURCE_UNK6 = 0x6, - PMEM_SOURCE_UNK7 = 0x7, - PMEM_SOURCE_UNK8 = 0x8, - PMEM_SOURCE_CUSTOMIZATION = 0x9, - }; - - enum VariableType - { - VAR_UNDEFINED = 0x0, - VAR_BEGIN_REF = 0x1, - VAR_POINTER = 0x1, - VAR_STRING = 0x2, - VAR_ISTRING = 0x3, - VAR_VECTOR = 0x4, - VAR_END_REF = 0x5, - VAR_FLOAT = 0x5, - VAR_INTEGER = 0x6, - VAR_CODEPOS = 0x7, - VAR_PRECODEPOS = 0x8, - VAR_FUNCTION = 0x9, - VAR_BUILTIN_FUNCTION = 0xA, - VAR_BUILTIN_METHOD = 0xB, - VAR_STACK = 0xC, - VAR_ANIMATION = 0xD, - VAR_PRE_ANIMATION = 0xE, - VAR_THREAD = 0xF, - VAR_NOTIFY_THREAD = 0x10, - VAR_TIME_THREAD = 0x11, - VAR_CHILD_THREAD = 0x12, - VAR_OBJECT = 0x13, - VAR_DEAD_ENTITY = 0x14, - VAR_ENTITY = 0x15, - VAR_ARRAY = 0x16, - VAR_DEAD_THREAD = 0x17, - VAR_COUNT = 0x18, - VAR_FREE = 0x18, - VAR_THREAD_LIST = 0x19, - VAR_ENDON_LIST = 0x1A, - VAR_TOTAL_COUNT = 0x1B, - }; - - struct VariableStackBuffer - { - const char* pos; - unsigned __int16 size; - unsigned __int16 bufLen; - unsigned __int16 localId; - char time; - char buf[1]; - }; - - union VariableUnion - { - int intValue; - unsigned int uintValue; - float floatValue; - unsigned int stringValue; - const float* vectorValue; - const char* codePosValue; - unsigned int pointerValue; - VariableStackBuffer* stackValue; - unsigned int entityOffset; - }; - - struct VariableValue - { - VariableUnion u; - int type; - }; - - struct function_stack_t - { - const char* pos; - unsigned int localId; - unsigned int localVarCount; - VariableValue* top; - VariableValue* startTop; - }; - - struct function_frame_t - { - function_stack_t fs; - int topType; - }; - - struct scrVmPub_t - { - unsigned int* localVars; - VariableValue* maxstack; - int function_count; - function_frame_t* function_frame; - VariableValue* top; - unsigned int inparamcount; - unsigned int outparamcount; - function_frame_t function_frame_start[32]; - VariableValue stack[2048]; - }; - - struct ObjectVariableChildren - { - unsigned __int16 firstChild; - unsigned __int16 lastChild; - }; - - struct ObjectVariableValue_u_f - { - unsigned __int16 prev; - unsigned __int16 next; - }; - - union ObjectVariableValue_u_o_u - { - unsigned __int16 size; - unsigned __int16 entnum; - unsigned __int16 nextEntId; - unsigned __int16 self; - }; - - struct ObjectVariableValue_u_o - { - unsigned __int16 refCount; - ObjectVariableValue_u_o_u u; - }; - - union ObjectVariableValue_w - { - unsigned int type; - unsigned int classnum; - unsigned int notifyName; - unsigned int waitTime; - unsigned int parentLocalId; - }; - - struct ChildVariableValue_u_f - { - unsigned __int16 prev; - unsigned __int16 next; - }; - - union ChildVariableValue_u - { - ChildVariableValue_u_f f; - VariableUnion u; - }; - - struct ChildBucketMatchKeys_keys - { - unsigned __int16 name_hi; - unsigned __int16 parentId; - }; - - union ChildBucketMatchKeys - { - ChildBucketMatchKeys_keys keys; - unsigned int match; - }; - - struct ChildVariableValue - { - ChildVariableValue_u u; - unsigned __int16 next; - char type; - char name_lo; - ChildBucketMatchKeys k; - unsigned __int16 nextSibling; - unsigned __int16 prevSibling; - }; - - union ObjectVariableValue_u - { - ObjectVariableValue_u_f f; - ObjectVariableValue_u_o o; - }; - - struct ObjectVariableValue - { - ObjectVariableValue_u u; - ObjectVariableValue_w w; - }; - - struct scrVarGlob_t - { - ObjectVariableValue objectVariableValue[40960]; - ObjectVariableChildren objectVariableChildren[40960]; - unsigned __int16 childVariableBucket[65536]; - ChildVariableValue childVariableValue[384000]; - }; - #pragma pack(push, 1) struct bdAuthTicket { @@ -3454,4 +3233,231 @@ namespace game #pragma pack(pop) } using namespace demonware; + + enum errorParm + { + ERR_FATAL = 0, + ERR_DROP = 1, + ERR_SERVERDISCONNECT = 2, + ERR_DISCONNECT = 3, + ERR_SCRIPT = 4, + ERR_SCRIPT_DROP = 5, + ERR_LOCALIZATION = 6, + ERR_MAPLOADERRORSUMMARY = 7, + }; + + struct scr_entref_t + { + unsigned short entnum; + unsigned short classnum; + }; + + enum PMem_Stack : __int32 + { + PMEM_STACK_GAME = 0x0, + PMEM_STACK_RENDER_TARGETS = 0x1, + PMEM_STACK_MEM_VIRTUAL = 0x2, + PMEM_STACK_MEMCARD_LARGE_BUFFER = 0x3, + PMEM_STACK_SOUND = 0x4, + PMEM_STACK_STASHED_MEMORY = 0x5, + PMEM_STACK_CINEMATIC = 0x6, + PMEM_STACK_COUNT = 0x7, + }; + + enum PMem_Source + { + PMEM_SOURCE_EXTERNAL = 0x0, + PMEM_SOURCE_DATABASE = 0x1, + PMEM_SOURCE_DEFAULT_LOW = 0x2, + PMEM_SOURCE_DEFAULT_HIGH = 0x3, + PMEM_SOURCE_MOVIE = 0x4, + PMEM_SOURCE_SCRIPT = 0x5, + PMEM_SOURCE_UNK5 = 0x5, + PMEM_SOURCE_UNK6 = 0x6, + PMEM_SOURCE_UNK7 = 0x7, + PMEM_SOURCE_UNK8 = 0x8, + PMEM_SOURCE_CUSTOMIZATION = 0x9, + }; + + enum VariableType + { + VAR_UNDEFINED = 0x0, + VAR_BEGIN_REF = 0x1, + VAR_POINTER = 0x1, + VAR_STRING = 0x2, + VAR_ISTRING = 0x3, + VAR_VECTOR = 0x4, + VAR_END_REF = 0x5, + VAR_FLOAT = 0x5, + VAR_INTEGER = 0x6, + VAR_CODEPOS = 0x7, + VAR_PRECODEPOS = 0x8, + VAR_FUNCTION = 0x9, + VAR_BUILTIN_FUNCTION = 0xA, + VAR_BUILTIN_METHOD = 0xB, + VAR_STACK = 0xC, + VAR_ANIMATION = 0xD, + VAR_PRE_ANIMATION = 0xE, + VAR_THREAD = 0xF, + VAR_NOTIFY_THREAD = 0x10, + VAR_TIME_THREAD = 0x11, + VAR_CHILD_THREAD = 0x12, + VAR_OBJECT = 0x13, + VAR_DEAD_ENTITY = 0x14, + VAR_ENTITY = 0x15, + VAR_ARRAY = 0x16, + VAR_DEAD_THREAD = 0x17, + VAR_COUNT = 0x18, + VAR_FREE = 0x18, + VAR_THREAD_LIST = 0x19, + VAR_ENDON_LIST = 0x1A, + VAR_TOTAL_COUNT = 0x1B, + }; + + struct VariableStackBuffer + { + const char* pos; + unsigned __int16 size; + unsigned __int16 bufLen; + unsigned __int16 localId; + char time; + char buf[1]; + }; + + union VariableUnion + { + int intValue; + unsigned int uintValue; + float floatValue; + unsigned int stringValue; + const float* vectorValue; + const char* codePosValue; + unsigned int pointerValue; + VariableStackBuffer* stackValue; + unsigned int entityOffset; + }; + + struct VariableValue + { + VariableUnion u; + int type; + }; + + struct function_stack_t + { + const char* pos; + unsigned int localId; + unsigned int localVarCount; + VariableValue* top; + VariableValue* startTop; + }; + + struct function_frame_t + { + function_stack_t fs; + int topType; + }; + + struct scrVmPub_t + { + unsigned int* localVars; + VariableValue* maxstack; + int function_count; + function_frame_t* function_frame; + VariableValue* top; + unsigned int inparamcount; + unsigned int outparamcount; + function_frame_t function_frame_start[32]; + VariableValue stack[2048]; + }; + + struct ObjectVariableChildren + { + unsigned __int16 firstChild; + unsigned __int16 lastChild; + }; + + struct ObjectVariableValue_u_f + { + unsigned __int16 prev; + unsigned __int16 next; + }; + + union ObjectVariableValue_u_o_u + { + unsigned __int16 size; + unsigned __int16 entnum; + unsigned __int16 nextEntId; + unsigned __int16 self; + }; + + struct ObjectVariableValue_u_o + { + unsigned __int16 refCount; + ObjectVariableValue_u_o_u u; + }; + + union ObjectVariableValue_w + { + unsigned int type; + unsigned int classnum; + unsigned int notifyName; + unsigned int waitTime; + unsigned int parentLocalId; + }; + + struct ChildVariableValue_u_f + { + unsigned __int16 prev; + unsigned __int16 next; + }; + + union ChildVariableValue_u + { + ChildVariableValue_u_f f; + VariableUnion u; + }; + + struct ChildBucketMatchKeys_keys + { + unsigned __int16 name_hi; + unsigned __int16 parentId; + }; + + union ChildBucketMatchKeys + { + ChildBucketMatchKeys_keys keys; + unsigned int match; + }; + + struct ChildVariableValue + { + ChildVariableValue_u u; + unsigned __int16 next; + char type; + char name_lo; + ChildBucketMatchKeys k; + unsigned __int16 nextSibling; + unsigned __int16 prevSibling; + }; + + union ObjectVariableValue_u + { + ObjectVariableValue_u_f f; + ObjectVariableValue_u_o o; + }; + + struct ObjectVariableValue + { + ObjectVariableValue_u u; + ObjectVariableValue_w w; + }; + + struct scrVarGlob_t + { + ObjectVariableValue objectVariableValue[40960]; + ObjectVariableChildren objectVariableChildren[40960]; + unsigned __int16 childVariableBucket[65536]; + ChildVariableValue childVariableValue[384000]; + }; } diff --git a/src/client/game/symbols.hpp b/src/client/game/symbols.hpp index 80c4c763..377f6bc3 100644 --- a/src/client/game/symbols.hpp +++ b/src/client/game/symbols.hpp @@ -22,8 +22,6 @@ namespace game WEAK symbol Com_Error{ 0xB8D830 }; - WEAK symbol Com_FrontEnd_IsInFrontEnd{ 0x5AE6C0 }; - WEAK symbol Com_Quit_f{ 0xBADC90 }; WEAK symbol Com_FrontEnd_IsInFrontEnd{ 0x5AE6C0 }; @@ -120,6 +118,7 @@ namespace game WEAK symbol FS_FreeFile{ 0xCDE1F0 }; WEAK symbol FS_Printf{ 0xCDD1C0 }; + WEAK symbol GetObjectType{ 0xC059E0 }; WEAK symbol GetVariable{ 0xC05A90 }; WEAK symbol GetNewVariable{ 0xC05660 }; WEAK symbol GetNewArrayVariable{ 0xC054E0 }; @@ -191,10 +190,12 @@ namespace game unsigned int paramcount)> Scr_NotifyId{ 0xC0C2B0 }; WEAK symbol Scr_AllocVector{ 0xC06960 }; WEAK symbol Scr_AddInt{ 0xC0A580 }; + WEAK symbol Scr_CastString{ 0xC06AE0 }; WEAK symbol Scr_ClearOutParams{ 0xC0ABC0 }; WEAK symbol Scr_GetEntityIdRef{ 0xC09050 }; WEAK symbol Scr_SetObjectField{ 0x40B6E0 }; WEAK symbol Scr_GetInt{ 0xC0B950 }; + WEAK symbol Scr_ErrorInternal{ 0xC0AC30 }; WEAK symbol ScrPlace_GetViewPlacement{ 0x9E4090 }; @@ -275,7 +276,9 @@ namespace game WEAK game::symbol pmem_size{ 0x7686A28 }; WEAK game::symbol pmem_buffer{ 0x7686A20 }; + /* WEAK game::symbol g_mem{ 0xD5F26E0, 0xC92E1E0 }; WEAK game::symbol g_scriptmem{ 0xD5F3140, 0xC92EC40 }; WEAK game::symbol g_physmem{ 0xD5F3BA0, 0xC92F6A0 }; + */ } diff --git a/src/client/loader/component_loader.hpp b/src/client/loader/component_loader.hpp index ba28c2e9..bda7570c 100644 --- a/src/client/loader/component_loader.hpp +++ b/src/client/loader/component_loader.hpp @@ -25,11 +25,25 @@ public: installer(const std::string& component_name) { + auto last = component_name.find("::component"); + if (last == std::string::npos) + { + last = component_name.find("::error"); + } + if (last == std::string::npos) + { + last = component_name.find("::extension"); + } + if (last == std::string::npos) + { + last = component_name.find("::loading"); + } + register_component( std::make_unique(), std::string( component_name.begin(), - component_name.begin() + component_name.find("::component") + component_name.begin() + last ) ); }