From c137827e965f0f2dbd97ceadaaa9d080326979ec Mon Sep 17 00:00:00 2001 From: Federico Cecchetto Date: Wed, 25 May 2022 23:56:10 +0200 Subject: [PATCH] SP Support --- src/client/component/auth.cpp | 6 +- src/client/component/colors.cpp | 2 +- src/client/component/command.cpp | 4 +- src/client/component/demonware.cpp | 5 + src/client/component/dvars.cpp | 32 ++-- src/client/component/fps.cpp | 43 +++-- src/client/component/logfile.cpp | 4 +- src/client/component/scheduler.cpp | 15 +- src/client/component/scripting.cpp | 14 +- src/client/component/splash.cpp | 6 +- src/client/component/ui_scripting.cpp | 16 +- src/client/game/game.cpp | 12 ++ src/client/game/game.hpp | 2 + src/client/game/scripting/functions.cpp | 4 +- src/client/game/symbols.hpp | 215 ++++++++++++------------ 15 files changed, 215 insertions(+), 165 deletions(-) diff --git a/src/client/component/auth.cpp b/src/client/component/auth.cpp index 44d9003b..21ede068 100644 --- a/src/client/component/auth.cpp +++ b/src/client/component/auth.cpp @@ -234,9 +234,9 @@ namespace auth // Patch steam id bit check if (game::environment::is_sp()) { - utils::hook::jump(0x4FA1B3_b, 0x4FA21A_b); - utils::hook::jump(0x4FB272_b, 0x4FB2B7_b); - utils::hook::jump(0x4FB781_b, 0x4FB7D3_b); + utils::hook::jump(0x4FA1B3_b, 0x4FA21A_b, true); + utils::hook::jump(0x4FB272_b, 0x4FB2B7_b, true); + utils::hook::jump(0x4FB781_b, 0x4FB7D3_b, true); } else { diff --git a/src/client/component/colors.cpp b/src/client/component/colors.cpp index 551ec07f..02443de9 100644 --- a/src/client/component/colors.cpp +++ b/src/client/component/colors.cpp @@ -173,7 +173,7 @@ namespace colors } // force new colors - utils::hook::jump(SELECT_VALUE(0x0, 0x6C9460_b), rb_lookup_color_stub, true); + utils::hook::jump(SELECT_VALUE(0x5B17E0_b, 0x6C9460_b), rb_lookup_color_stub, true); // add colors add(0, 0, 0); // 0 - Black diff --git a/src/client/component/command.cpp b/src/client/component/command.cpp index 88084175..e9bb1668 100644 --- a/src/client/component/command.cpp +++ b/src/client/component/command.cpp @@ -514,11 +514,11 @@ namespace command else { parse_commandline_hook.create(0x157D50_b, parse_commandline_stub); - utils::hook::jump(0x4E9F40_b, dvar_command_stub, true); - add_commands_mp(); } + utils::hook::jump(SELECT_VALUE(0x3A7C80_b, 0x4E9F40_b), dvar_command_stub, true); + add_commands_generic(); } diff --git a/src/client/component/demonware.cpp b/src/client/component/demonware.cpp index 632a2422..35bccd4d 100644 --- a/src/client/component/demonware.cpp +++ b/src/client/component/demonware.cpp @@ -538,6 +538,11 @@ namespace demonware void post_load() override { + if (game::environment::is_sp()) + { + return; + } + server_thread = utils::thread::create_named_thread("Demonware", server_main); } diff --git a/src/client/component/dvars.cpp b/src/client/component/dvars.cpp index 8b6b5770..cb2a6914 100644 --- a/src/client/component/dvars.cpp +++ b/src/client/component/dvars.cpp @@ -467,21 +467,25 @@ namespace dvars public: void post_unpack() override { - dvar_register_bool_hook.create(SELECT_VALUE(0x0, 0x182340_b), &dvar_register_bool); - dvar_register_bool_hashed_hook.create(SELECT_VALUE(0x0, 0x182420_b), &dvar_register_bool_hashed); - dvar_register_float_hook.create(SELECT_VALUE(0x0, 0x1827F0_b), &dvar_register_float); - dvar_register_float_hashed_hook.create(SELECT_VALUE(0x0, 0x182900_b), &dvar_register_float_hashed); - dvar_register_int_hook.create(SELECT_VALUE(0x0, 0x182A10_b), &dvar_register_int); - dvar_register_int_hashed_hook.create(SELECT_VALUE(0x0, 0x182AF0_b), &dvar_register_int_hashed); - dvar_register_string_hook.create(SELECT_VALUE(0x0, 0x182BD0_b), &dvar_register_string); - dvar_register_vector2_hook.create(SELECT_VALUE(0x0, 0x182CB0_b), &dvar_register_vector2); - dvar_register_vector3_hook.create(SELECT_VALUE(0x0, 0x182DB0_b), &dvar_register_vector3); + dvar_register_bool_hook.create(SELECT_VALUE(0x419220_b, 0x182340_b), &dvar_register_bool); + dvar_register_float_hook.create(SELECT_VALUE(0x4195F0_b, 0x1827F0_b), &dvar_register_float); + dvar_register_int_hook.create(SELECT_VALUE(0x419700_b, 0x182A10_b), &dvar_register_int); + dvar_register_string_hook.create(SELECT_VALUE(0x4197E0_b, 0x182BD0_b), &dvar_register_string); + dvar_register_vector2_hook.create(SELECT_VALUE(0x4198C0_b, 0x182CB0_b), &dvar_register_vector2); + dvar_register_vector3_hook.create(SELECT_VALUE(0x419A00_b, 0x182DB0_b), &dvar_register_vector3); - dvar_set_bool_hook.create(SELECT_VALUE(0x0, 0x185520_b), &dvar_set_bool); - dvar_set_float_hook.create(SELECT_VALUE(0x0, 0x185AA0_b), &dvar_set_float); - dvar_set_int_hook.create(SELECT_VALUE(0x0, 0x185D10_b), &dvar_set_int); - dvar_set_string_hook.create(SELECT_VALUE(0x0, 0x186080_b), &dvar_set_string); - dvar_set_from_string_hook.create(SELECT_VALUE(0x0, 0x185C60_b), &dvar_set_from_string); + if (!game::environment::is_sp()) + { + dvar_register_bool_hashed_hook.create(SELECT_VALUE(0x0, 0x182420_b), &dvar_register_bool_hashed); + dvar_register_float_hashed_hook.create(SELECT_VALUE(0x0, 0x182900_b), &dvar_register_float_hashed); + dvar_register_int_hashed_hook.create(SELECT_VALUE(0x0, 0x182AF0_b), &dvar_register_int_hashed); + } + + dvar_set_bool_hook.create(SELECT_VALUE(0x41B820_b, 0x185520_b), &dvar_set_bool); + dvar_set_float_hook.create(SELECT_VALUE(0x41BC60_b, 0x185AA0_b), &dvar_set_float); + dvar_set_int_hook.create(SELECT_VALUE(0x41BEE0_b, 0x185D10_b), &dvar_set_int); + dvar_set_string_hook.create(SELECT_VALUE(0x41C0F0_b, 0x186080_b), &dvar_set_string); + dvar_set_from_string_hook.create(SELECT_VALUE(0x41BE20_b, 0x185C60_b), &dvar_set_from_string); } }; } diff --git a/src/client/component/fps.cpp b/src/client/component/fps.cpp index 795b1071..a2523ca3 100644 --- a/src/client/component/fps.cpp +++ b/src/client/component/fps.cpp @@ -15,6 +15,8 @@ namespace fps { namespace { + utils::hook::detour sub_5D6810_hook; + game::dvar_t* cg_drawfps; game::dvar_t* cg_drawping; @@ -131,6 +133,12 @@ namespace fps cg_drawfps = dvars::register_int("cg_drawFps", 0, 0, 2, game::DVAR_FLAG_SAVED, "Draw frames per second"); return cg_drawfps; } + + void sub_5D6810_stub() + { + perf_update(); + sub_5D6810_hook.invoke(); + } } int get_fps() @@ -153,21 +161,32 @@ namespace fps // fps setup cg_perf.perf_start = std::chrono::high_resolution_clock::now(); - utils::hook::jump(SELECT_VALUE(0, 0x343847_b), utils::hook::assemble([](utils::hook::assembler& a) + if (game::environment::is_mp()) { - a.pushad64(); - a.call_aligned(perf_update); - a.popad64(); + utils::hook::jump(SELECT_VALUE(0, 0x343847_b), utils::hook::assemble([](utils::hook::assembler& a) + { + a.pushad64(); + a.call_aligned(perf_update); + a.popad64(); - a.call(0x702250_b); - a.mov(edx, 3); - a.xor_(ecx, ecx); - a.jmp(0x343853_b); - }), true); + a.call(0x702250_b); + a.mov(edx, 3); + a.xor_(ecx, ecx); + a.jmp(0x343853_b); + }), true); - // Don't register cg_drawfps - utils::hook::nop(0x31D74F_b, 0x1C); - utils::hook::nop(0x31D76F_b, 0x7); + // Don't register cg_drawfps + utils::hook::nop(0x31D74F_b, 0x1C); + utils::hook::nop(0x31D76F_b, 0x7); + } + else + { + sub_5D6810_hook.create(0x5D6810_b, sub_5D6810_stub); + + // Don't register cg_drawfps + utils::hook::nop(0x15C97D_b, 0x20); + utils::hook::nop(0x15C9A1_b, 0x7); + } scheduler::loop(cg_draw_fps, scheduler::pipeline::renderer); diff --git a/src/client/component/logfile.cpp b/src/client/component/logfile.cpp index e728716c..2e2b3e4f 100644 --- a/src/client/component/logfile.cpp +++ b/src/client/component/logfile.cpp @@ -207,7 +207,7 @@ namespace logfile a.inc(r14); a.mov(dword_ptr(rbp, 0xA4), r15d); - a.jmp(SELECT_VALUE(0x0, 0x5111B3_b)); + a.jmp(SELECT_VALUE(0x3CA153_b, 0x5111B3_b)); a.bind(replace); @@ -282,7 +282,7 @@ namespace logfile public: void post_unpack() override { - utils::hook::jump(SELECT_VALUE(0x0, 0x5111A5_b), utils::hook::assemble(vm_execute_stub), true); + utils::hook::jump(SELECT_VALUE(0x3CA145_b, 0x5111A5_b), utils::hook::assemble(vm_execute_stub), true); if (game::environment::is_sp()) { diff --git a/src/client/component/scheduler.cpp b/src/client/component/scheduler.cpp index a5ef6f97..ac97bec6 100644 --- a/src/client/component/scheduler.cpp +++ b/src/client/component/scheduler.cpp @@ -125,6 +125,7 @@ namespace scheduler { execute(pipeline::lui); } + hks_frame_hook.invoke(); } } @@ -194,22 +195,22 @@ namespace scheduler void post_unpack() override { - utils::hook::jump(SELECT_VALUE(0, 0x6A6300_b), utils::hook::assemble([](utils::hook::assembler& a) + utils::hook::jump(SELECT_VALUE(0x581FB0_b, 0x6A6300_b), utils::hook::assemble([](utils::hook::assembler& a) { a.pushad64(); a.call_aligned(r_end_frame_stub); a.popad64(); a.sub(rsp, 0x28); - a.call(0x6A5C20_b); - a.mov(rax, 0xEAB4308_b); + a.call(SELECT_VALUE(0x581840_b, 0x6A5C20_b)); + a.mov(rax, SELECT_VALUE(0x1182A680_b, 0xEAB4308_b)); a.mov(rax, qword_ptr(rax)); - a.jmp(0x6A6310_b); + a.jmp(SELECT_VALUE(0x581FC0_b, 0x6A6310_b)); }), true); - g_run_frame_hook.create(SELECT_VALUE(0x0, 0x417940_b), scheduler::server_frame_stub); - main_frame_hook.create(SELECT_VALUE(0x0, 0x3438B0_b), scheduler::main_frame_stub); - hks_frame_hook.create(SELECT_VALUE(0x0, 0x2792E0_b), scheduler::hks_frame_stub); + g_run_frame_hook.create(SELECT_VALUE(0x2992E0_b, 0x417940_b), scheduler::server_frame_stub); + main_frame_hook.create(SELECT_VALUE(0x1B1DF0_b, 0x3438B0_b), scheduler::main_frame_stub); + hks_frame_hook.create(SELECT_VALUE(0x1028D0_b, 0x2792E0_b), scheduler::hks_frame_stub); } void pre_destroy() override diff --git a/src/client/component/scripting.cpp b/src/client/component/scripting.cpp index fdb8bae6..efb81f41 100644 --- a/src/client/component/scripting.cpp +++ b/src/client/component/scripting.cpp @@ -167,24 +167,24 @@ namespace scripting public: void post_unpack() override { - vm_notify_hook.create(SELECT_VALUE(0x0, 0x514560_b), vm_notify_stub); + vm_notify_hook.create(SELECT_VALUE(0x3CD500_b, 0x514560_b), vm_notify_stub); - scr_add_class_field_hook.create(SELECT_VALUE(0x0, 0x50AE20_b), scr_add_class_field_stub); + scr_add_class_field_hook.create(SELECT_VALUE(0x3C3CE0_b, 0x50AE20_b), scr_add_class_field_stub); - scr_set_thread_position_hook.create(SELECT_VALUE(0x0, 0x504870_b), scr_set_thread_position_stub); - process_script_hook.create(SELECT_VALUE(0x0, 0x50E340_b), process_script_stub); + scr_set_thread_position_hook.create(SELECT_VALUE(0x3BD890_b, 0x504870_b), scr_set_thread_position_stub); + process_script_hook.create(SELECT_VALUE(0x3C7200_b, 0x50E340_b), process_script_stub); sl_get_canonical_string_hook.create(game::SL_GetCanonicalString, sl_get_canonical_string_stub); if (!game::environment::is_sp()) { - scr_load_level_hook.create(SELECT_VALUE(0x0, 0x450FC0_b), scr_load_level_stub); + scr_load_level_hook.create(0x450FC0_b, scr_load_level_stub); } else { - vm_execute_hook.create(SELECT_VALUE(0x0, 0x5110E0_b), vm_execute_stub); + vm_execute_hook.create(0x3CA080_b, vm_execute_stub); } - g_shutdown_game_hook.create(SELECT_VALUE(0x0, 0x422F30_b), g_shutdown_game_stub); + g_shutdown_game_hook.create(SELECT_VALUE(0x2A5130_b, 0x422F30_b), g_shutdown_game_stub); scheduler::loop([]() { diff --git a/src/client/component/splash.cpp b/src/client/component/splash.cpp index 37b0e417..79e48824 100644 --- a/src/client/component/splash.cpp +++ b/src/client/component/splash.cpp @@ -30,9 +30,9 @@ namespace splash void post_unpack() override { // Disable native splash screen - utils::hook::set(SELECT_VALUE(0, 0x5BDF20_b), 0xC3); - utils::hook::jump(SELECT_VALUE(0, 0x5BE1D0_b), destroy_stub, true); - utils::hook::jump(SELECT_VALUE(0, 0x5BE210_b), destroy_stub, true); + utils::hook::set(SELECT_VALUE(0x462B90_b, 0x5BDF20_b), 0xC3); + utils::hook::jump(SELECT_VALUE(0x462E40_b, 0x5BE1D0_b), destroy_stub, true); + utils::hook::jump(SELECT_VALUE(0x462E80_b, 0x5BE210_b), destroy_stub, true); } void pre_destroy() override diff --git a/src/client/component/ui_scripting.cpp b/src/client/component/ui_scripting.cpp index ff810c86..385ed0fc 100644 --- a/src/client/component/ui_scripting.cpp +++ b/src/client/component/ui_scripting.cpp @@ -218,7 +218,7 @@ namespace ui_scripting setup_functions(); - lua["print"] = function(reinterpret_cast(0x209EB0_b)); + lua["print"] = function(reinterpret_cast(SELECT_VALUE(0x93490_b, 0x209EB0_b))); lua["table"]["unpack"] = lua["unpack"]; lua["luiglobals"] = lua; @@ -370,22 +370,22 @@ namespace ui_scripting void post_unpack() override { - if (!game::environment::is_mp()) + if (game::environment::is_dedi()) { return; } db_find_xasset_header_hook.create(game::DB_FindXAssetHeader, db_find_xasset_header_stub); - hks_load_hook.create(0x22C180_b, hks_load_stub); + hks_load_hook.create(SELECT_VALUE(0xB46F0_b, 0x22C180_b), hks_load_stub); - hks_package_require_hook.create(0x214040_b, hks_package_require_stub); - hks_start_hook.create(0x27A790_b, hks_start_stub); - hks_shutdown_hook.create(0x2707C0_b, hks_shutdown_stub); + hks_package_require_hook.create(SELECT_VALUE(0x90070_b, 0x214040_b), hks_package_require_stub); + hks_start_hook.create(SELECT_VALUE(0x103C50_b, 0x27A790_b), hks_start_stub); + hks_shutdown_hook.create(SELECT_VALUE(0xFB370_b, 0x2707C0_b), hks_shutdown_stub); command::add("lui_restart", []() { - utils::hook::invoke(0x2707C0_b); - utils::hook::invoke(0x27BEC0_b); + utils::hook::invoke(SELECT_VALUE(0xFB370_b, 0x2707C0_b)); + utils::hook::invoke(SELECT_VALUE(0x1052C0_b, 0x27BEC0_b)); }); } }; diff --git a/src/client/game/game.cpp b/src/client/game/game.cpp index 5399905d..0b63ccc2 100644 --- a/src/client/game/game.cpp +++ b/src/client/game/game.cpp @@ -53,6 +53,18 @@ namespace game } } + void Cbuf_AddText(int local_client_num, int controller_index, const char* cmd) + { + if (game::environment::is_sp()) + { + sp::Cbuf_AddText(local_client_num, cmd); + } + else + { + mp::Cbuf_AddText(local_client_num, controller_index, cmd); + } + } + namespace environment { launcher::mode mode = launcher::mode::none; diff --git a/src/client/game/game.hpp b/src/client/game/game.hpp index 0d261d36..ceb95690 100644 --- a/src/client/game/game.hpp +++ b/src/client/game/game.hpp @@ -70,6 +70,8 @@ namespace game bool VirtualLobby_Loaded(); void SV_GameSendServerCommand(int clientNum, svscmd_type type, const char* text); + + void Cbuf_AddText(int local_client_num, int controller_index, const char* cmd); } uintptr_t operator"" _b(const uintptr_t ptr); diff --git a/src/client/game/scripting/functions.cpp b/src/client/game/scripting/functions.cpp index 32dd6865..b4d67cb6 100644 --- a/src/client/game/scripting/functions.cpp +++ b/src/client/game/scripting/functions.cpp @@ -59,8 +59,8 @@ namespace scripting script_function get_function_by_index(const unsigned index) { - static const auto function_table = SELECT_VALUE(0x14B1D1B90, 0xAC83820_b); - static const auto method_table = SELECT_VALUE(0x14B1D33A0, 0xAC85070_b); + static const auto function_table = SELECT_VALUE(0xB8CC510_b, 0xAC83820_b); + static const auto method_table = SELECT_VALUE(0xB8CDD60_b, 0xAC85070_b); if (index < 0x30A) { diff --git a/src/client/game/symbols.hpp b/src/client/game/symbols.hpp index eec460e9..cf725731 100644 --- a/src/client/game/symbols.hpp +++ b/src/client/game/symbols.hpp @@ -13,14 +13,23 @@ namespace game WEAK symbol AddRefToObject{0x3C1F40, 0x5090D0}; WEAK symbol RemoveRefToObject{0x3C3950, 0x50AAE0}; WEAK symbol AllocThread{0x3C22B0, 0x509440}; - WEAK symbol AllocVariable{0x0, 0x0}; + WEAK symbol AllocVariable{0x3C2310, 0x5094A0}; + + namespace sp + { + WEAK symbol Cbuf_AddText{0x3764A0, 0x0}; + } + + namespace mp + { + WEAK symbol Cbuf_AddText{0x0, 0x1CF480}; + } - WEAK symbol Cbuf_AddText{0x3764A0, 0x1CF480}; WEAK symbol Cbuf_ExecuteBufferInternal{0x3765B0, 0x155BC0}; WEAK symbol Conbuf_AppendText{0x0, 0x0}; WEAK symbol ConcatArgs{0x296420, 0x413050}; - WEAK symbol Cmd_ExecuteSingleCommand{0x0, 0x156E90}; + WEAK symbol Cmd_ExecuteSingleCommand{0x376FF0, 0x156E90}; WEAK symbol Cmd_AddCommandInternal{0x376A40, 0x156880}; WEAK symbol Cmd_RemoveCommand{0x377670, 0x157690}; WEAK symbol Cmd_TokenizeString{0x377790, 0x0}; // not a function @@ -48,7 +57,7 @@ namespace game WEAK symbol CG_GetWeaponDisplayName{0x0, 0x0}; - WEAK symbol CL_IsCgameInitialized{0x0, 0x33C640}; + WEAK symbol CL_IsCgameInitialized{0x1A3210, 0x33C640}; WEAK symbol CL_VirtualLobbyShutdown{0x0, 0x0}; WEAK symbol Dvar_SetCommand{0x41BAD0, 0x1857D0}; @@ -61,116 +70,115 @@ namespace game DvarSetSource)> Dvar_SetFromStringByNameFromSource{0x41BD90, 0x185BD0}; WEAK symbol Dvar_RegisterBool{0x0, 0x182340}; + unsigned int flags)> Dvar_RegisterBool{0x419220, 0x182340}; WEAK symbol Dvar_RegisterInt{0x0, 0x182A10}; + unsigned int flags)> Dvar_RegisterInt{0x419700, 0x182A10}; WEAK symbol Dvar_RegisterFloat{0x0, 0x1827F0}; + float max, unsigned int flags)> Dvar_RegisterFloat{0x4195F0, 0x1827F0}; WEAK symbol Dvar_RegisterFloatHashed{0x0, 0x182900}; WEAK symbol Dvar_RegisterString{0x0, 0x182BD0}; + unsigned int flags)> Dvar_RegisterString{0x4197E0, 0x182BD0}; WEAK symbol Dvar_RegisterVec4{0x0, 0x183010}; + float w, float min, float max, unsigned int flags)> Dvar_RegisterVec4{0x419C60, 0x183010}; - WEAK symbol FS_ReadFile{0x0, 0x1EC690}; - WEAK symbol FS_FreeFile{0x0, 0x59E2F0}; - WEAK symbol FS_Startup{0x0, 0x0}; - WEAK symbol FS_AddLocalizedGameDirectory{0x0, 0x1878F0}; + WEAK symbol FS_ReadFile{0x40E280, 0x1EC690}; + WEAK symbol FS_FreeFile{0x40E270, 0x59E2F0}; + WEAK symbol FS_Startup{0x40D890, 0x0}; + WEAK symbol FS_AddLocalizedGameDirectory{0x40B1E0, 0x1878F0}; - WEAK symbol GetVariable{0x0, 0x50A8D0}; - WEAK symbol GetNewVariable{0x0, 0x50A4F0}; - WEAK symbol GetNewArrayVariable{0x0, 0x50A370}; - WEAK symbol GScr_LoadConsts{0x0, 0x468F40}; - WEAK symbol FindVariable{0x0, 0x509F90}; - WEAK symbol FindEntityId{0x0, 0x509E90}; - WEAK symbol RemoveVariableValue{0x0, 0x50AC90}; + WEAK symbol GetVariable{0x3C3740, 0x50A8D0}; + WEAK symbol GetNewVariable{0x3C3360, 0x50A4F0}; + WEAK symbol GetNewArrayVariable{0x3C31E0, 0x50A370}; + WEAK symbol FindVariable{0x3C2E00, 0x509F90}; + WEAK symbol FindEntityId{0x3C2D00, 0x509E90}; + WEAK symbol RemoveVariableValue{0x3C3B00, 0x50AC90}; WEAK symbol GetEntityFieldValue{0x0, 0x50E2E0}; + int entnum, int offset)> GetEntityFieldValue{0x3C71A0, 0x50E2E0}; - WEAK symbol generateHashValue{0x0, 0x183F80}; + WEAK symbol generateHashValue{0x11FEA0, 0x183F80}; - WEAK symbol G_Glass_Update{0x0, 0x417940}; + WEAK symbol G_Glass_Update{0x2992E0, 0x417940}; WEAK symbol G_GetClientScore{0x0, 0x0}; - WEAK symbol G_GetWeaponForName{0x0, 0x461180}; + WEAK symbol G_GetWeaponForName{0x4B18D0, 0x461180}; WEAK symbol G_GivePlayerWeapon{0x0, 0x461600}; + int startInAltMode, int, int, int, char, ...)> G_GivePlayerWeapon{0x2F24F0, 0x461600}; WEAK symbol G_InitializeAmmo{0x0, 0x41C170}; WEAK symbol G_SelectWeapon{0x0, 0x462560}; - WEAK symbol G_TakePlayerWeapon{0x0, 0x462770}; + WEAK symbol G_TakePlayerWeapon{0x2F3050, 0x462770}; - WEAK symbol I_CleanStr{0x0, 0x5AF2E0}; + WEAK symbol I_CleanStr{0x4293E0, 0x5AF2E0}; - WEAK symbol Key_KeynumToString{0x0, 0x199990}; + WEAK symbol Key_KeynumToString{0x1AC410, 0x199990}; WEAK symbol Live_SyncOnlineDataFlags{0x0, 0x1A5C10}; - WEAK symbol Material_RegisterHandle{0x0, 0x692360}; + WEAK symbol Material_RegisterHandle{0x56EA20, 0x692360}; - WEAK symbol NetadrToSockadr{0x0, 0x59E580}; - WEAK symbol NET_OutOfBandPrint{0x0, 0x4F1EB0}; + WEAK symbol NetadrToSockadr{0x416580, 0x59E580}; + WEAK symbol NET_OutOfBandPrint{0x3AA550, 0x4F1EB0}; WEAK symbol NET_SendLoopPacket{0x0, 0x4F2070}; WEAK symbol NET_StringToAdr{0x0, 0x4F2150}; WEAK symbol R_AddCmdDrawStretchPic{0x0, 0x33B2B0}; + float* color, Material* material)> R_AddCmdDrawStretchPic{0x1A29A0, 0x33B2B0}; WEAK symbol R_RegisterFont{0x55C4E0, 0x67F630}; - WEAK symbol R_TextWidth{0x0, 0x67F8F0}; - WEAK symbol R_GetFontHeight{0x0, 0x67F710}; - WEAK symbol R_DrawSomething{0x0, 0x67ECE0}; + WEAK symbol R_TextWidth{0x55C7A0, 0x67F8F0}; + WEAK symbol R_GetFontHeight{0x55C5C0, 0x67F710}; + WEAK symbol R_GetSomething{0x55BB90, 0x67ECE0}; WEAK symbol R_SyncRenderThread{0x0, 0x0}; WEAK symbol H1_AddBaseDrawTextCmd{0x0, 0x6A3080}; + void* style_unk)> H1_AddBaseDrawTextCmd{0x57EA60, 0x6A3080}; #define R_AddCmdDrawText(TXT, MC, F, X, Y, XS, YS, R, C, S) \ - H1_AddBaseDrawTextCmd(TXT, MC, F, game::R_GetFontHeight(F), X, Y, XS, YS, R, C, S,-1, 0, game::R_DrawSomething(S)) + H1_AddBaseDrawTextCmd(TXT, MC, F, game::R_GetFontHeight(F), X, Y, XS, YS, R, C, S, -1, 0, game::R_GetSomething(S)) #define R_AddCmdDrawTextWithCursor(TXT, MC, F, UNK, X, Y, XS, YS, R, C, S, CP, CC) \ - H1_AddBaseDrawTextCmd(TXT, MC, F, game::R_GetFontHeight(F), X, Y, XS, YS, R, C, S, CP, CC, game::R_DrawSomething(S)) + H1_AddBaseDrawTextCmd(TXT, MC, F, game::R_GetFontHeight(F), X, Y, XS, YS, R, C, S, CP, CC, game::R_GetSomething(S)) WEAK symbol Image_Setup{0x0, 0x0}; WEAK symbol VM_Execute{0x0, 0x510EB0}; + unsigned int paramcount)> VM_Execute{0x3C9E50, 0x510EB0}; WEAK symbol Scr_NotifyId{0x0, 0x510340}; - WEAK symbol Scr_AllocVector{0x0, 0x50B330}; - WEAK symbol Scr_GetFloat{0x0, 0x50F870}; - WEAK symbol Scr_GetString{0x0, 0x50FCB0}; + unsigned int paramcount)> Scr_NotifyId{0x3C92E0, 0x510340}; + WEAK symbol Scr_AllocVector{0x3C42D0, 0x50B330}; + WEAK symbol Scr_GetFloat{0x3C87D0, 0x50F870}; + WEAK symbol Scr_GetString{0x3C8CC0, 0x50FCB0}; WEAK symbol Scr_GetNumParam{0x0, 0x50F9D0}; - WEAK symbol Scr_ClearOutParams{0x0, 0x50F070}; - WEAK symbol Scr_GetEntityIdRef{0x0, 0x50D8E0}; - WEAK symbol Scr_GetEntityId{0x0, 0x50D830}; - WEAK symbol Scr_SetObjectField{0x0, 0x459CD0}; + WEAK symbol Scr_ClearOutParams{0x3C7EF0, 0x50F070}; + WEAK symbol Scr_GetEntityIdRef{0x3C6760, 0x50D8E0}; + WEAK symbol Scr_GetEntityId{0x3C66B0, 0x50D830}; + WEAK symbol Scr_SetObjectField{0x2E8FC0, 0x459CD0}; - WEAK symbol ScrPlace_GetViewPlacement{0x0, 0x362840}; + WEAK symbol ScrPlace_GetViewPlacement{0x1BCED0, 0x362840}; WEAK symbol - DB_EnumXAssets_Internal{0x0, 0x394C60}; + DB_EnumXAssets_Internal{0x1F0BF0, 0x394C60}; WEAK symbol DB_GetXAssetName{0x0, 0x366140}; WEAK symbol DB_GetXAssetTypeSize{0x0, 0x0}; WEAK symbol DB_FindXAssetHeader{0x0, 0x3950C0}; + int createDefault)> DB_FindXAssetHeader{0x1F1120, 0x3950C0}; WEAK symbol LUI_OpenMenu{0x0, 0x1E1210}; - WEAK symbol LUI_EnterCriticalSection{0x0, 0x2669B0}; - WEAK symbol LUI_LeaveCriticalSection{0x0, 0x26BDC0}; + int a3, int a4, unsigned int a5)> LUI_OpenMenu{0x3F20A0, 0x1E1210}; + WEAK symbol LUI_EnterCriticalSection{0xF19A0, 0x2669B0}; + WEAK symbol LUI_LeaveCriticalSection{0xF6C40, 0x26BDC0}; - WEAK symbol Menu_IsMenuOpenAndVisible{0x0, 0x389F70}; + WEAK symbol Menu_IsMenuOpenAndVisible{0x4F43C0, 0x389F70}; - WEAK symbol SL_FindString{0x0, 0x507FD0}; - WEAK symbol SL_GetString{0x0, 0x5083A0}; - WEAK symbol SL_ConvertToString{0x0, 0x507CD0}; - WEAK symbol SL_GetCanonicalString{0x0, 0x504A00}; + WEAK symbol SL_FindString{0x3C0F50, 0x507FD0}; + WEAK symbol SL_GetString{0x3C1210, 0x5083A0}; + WEAK symbol SL_ConvertToString{0x3C0C50, 0x507CD0}; + WEAK symbol SL_GetCanonicalString{0x3BDA20, 0x504A00}; WEAK symbol SV_DirectConnect{0x0, 0x54DBF0}; - WEAK symbol SV_Cmd_ArgvBuffer{0x0, 0x1CAC60}; - WEAK symbol SV_Cmd_TokenizeString{0x0, 0x1CACE0}; - WEAK symbol SV_Cmd_EndTokenizedString{0x0, 0x1CACA0}; + WEAK symbol SV_Cmd_ArgvBuffer{0x377D40, 0x1CAC60}; + WEAK symbol SV_Cmd_TokenizeString{0x377DC0, 0x1CACE0}; + WEAK symbol SV_Cmd_EndTokenizedString{0x377D80, 0x1CACA0}; WEAK symbol SV_AddBot{0x0, 0x54D4F0}; WEAK symbol SV_BotIsBot{0x0, 0x53B6D0}; @@ -191,59 +199,58 @@ namespace game WEAK symbol Sys_ShowConsole{0x0, 0x0}; WEAK symbol Sys_Error{0x0, 0x0}; WEAK symbol - Sys_BuildAbsPath{0x0, 0x0}; - WEAK symbol Sys_Milliseconds{0x0, 0x5BDDF0}; - WEAK symbol Sys_IsDatabaseReady2{0x0, 0x4F79C0}; + Sys_BuildAbsPath{0x42C330, 0x0}; + WEAK symbol Sys_Milliseconds{0x462B30, 0x5BDDF0}; + WEAK symbol Sys_IsDatabaseReady2{0x3AB100, 0x4F79C0}; WEAK symbol Sys_SendPacket{0x0, 0x5BDA90}; WEAK symbol Sys_FileExists{0x0, 0x0}; WEAK symbol UI_GetMapDisplayName{0x0, 0x4DDEE0}; WEAK symbol UI_GetGameTypeDisplayName{0x0, 0x4DD8C0}; - WEAK symbol UI_RunMenuScript{0x0, 0x1E35B0}; - WEAK symbol UI_TextWidth{0x0, 0x0}; + WEAK symbol UI_RunMenuScript{0x3F3AA0, 0x1E35B0}; + WEAK symbol UI_TextWidth{0x3F5D90, 0x0}; - WEAK symbol UI_SafeTranslateString{0x0, 0x4E8BC0}; + WEAK symbol UI_SafeTranslateString{0x3840A0, 0x4E8BC0}; - WEAK symbol longjmp{0x0, 0x826710}; - WEAK symbol _setjmp{0x0, 0x8A3190}; + WEAK symbol longjmp{0x6DCA90, 0x826710}; + WEAK symbol _setjmp{0x758980, 0x8A3190}; /*************************************************************** * Variables **************************************************************/ - WEAK symbol sv_cmd_args{0x0, 0x2ED1EB0}; + WEAK symbol sv_cmd_args{0xB48FF90, 0x2ED1EB0}; - WEAK symbol g_script_error_level{0x0, 0xB7AC1A4}; - WEAK symbol g_script_error{0x0, 0xB7AC2C0}; + WEAK symbol g_script_error_level{0xC3FD358, 0xB7AC1A4}; + WEAK symbol g_script_error{0xC3FD470, 0xB7AC2C0}; - WEAK symbol levelEntityId{0x0, 0xB1100B0}; - WEAK symbol gameEntityId{0x0, 0xB1100B4}; + WEAK symbol levelEntityId{0xBD58DA0, 0xB1100B0}; + WEAK symbol gameEntityId{0xBD58DA4, 0xB1100B4}; WEAK symbol command_whitelist{0x115ADF0, 0x10ACB70}; - WEAK symbol cmd_functions{0x0, 0x344DF18}; - WEAK symbol cmd_args{0x0, 0x2ED1E00}; + WEAK symbol cmd_functions{0xB490038, 0x344DF18}; + WEAK symbol cmd_args{0xB48FEE0, 0x2ED1E00}; WEAK symbol g_poolSize{0x0, 0x0}; - WEAK symbol g_classMap{0x0, 0x0}; - WEAK symbol scr_VarGlob{0x0, 0xB138180}; - WEAK symbol scr_VmPub{0x0, 0xB7AE3C0}; - WEAK symbol scr_function_stack{0x0, 0xB7B8940}; + WEAK symbol scr_VarGlob{0xBD80E00, 0xB138180}; + WEAK symbol scr_VmPub{0xC3F4E20, 0xB7AE3C0}; + WEAK symbol scr_function_stack{0xC4015C0, 0xB7B8940}; WEAK symbol gfxDrawMethod{0x0, 0x0}; - WEAK symbol dvarCount{0x0, 0x2999C34}; - WEAK symbol dvarPool{0x0, 0x344DF20}; + WEAK symbol dvarCount{0xC90E550, 0x2999C34}; + WEAK symbol dvarPool{0xC90E560, 0x344DF20}; - WEAK symbol DB_XAssetPool{0x0, 0x10B4460}; - WEAK symbol g_assetNames{0x0, 0x10B30D0}; + WEAK symbol DB_XAssetPool{0xEC9FB0, 0x10B4460}; + WEAK symbol g_assetNames{0x991BA0, 0x10B30D0}; - WEAK symbol keyCatchers{0x0, 0x2EC82C4}; - WEAK symbol playerKeys{0x0, 0x2999E1C}; + WEAK symbol keyCatchers{0x252AF70, 0x2EC82C4}; + WEAK symbol playerKeys{0x2395B0C, 0x2999E1C}; - WEAK symbol query_socket{0x0, 0xC9DCD38}; + WEAK symbol query_socket{0xD64D3F8, 0xC9DCD38}; - WEAK symbol threadIds{0x0, 0x0}; + WEAK symbol threadIds{0xB896210, 0xAC80740}; namespace mp { @@ -263,27 +270,27 @@ namespace game namespace sp { - WEAK symbol g_entities{0x0, 0x0}; + WEAK symbol g_entities{0x56E74D0, 0x0}; } namespace hks { - WEAK symbol lua_state{0, 0x36647F8}; - WEAK symbol hksi_lua_pushlstring{0, 0x79800}; - WEAK symbol hks_obj_getfield{0, 0x22CB90}; - WEAK symbol hks_obj_settable{0, 0x22DDB0}; - WEAK symbol hks_obj_gettable{0, 0x22D070}; - WEAK symbol vm_call_internal{0, 0x25D2F0}; - WEAK symbol Hashtable_Create{0, 0x21B030}; + WEAK symbol lua_state{0x1F0E408, 0x36647F8}; + WEAK symbol hksi_lua_pushlstring{0x62E60, 0x79800}; + WEAK symbol hks_obj_getfield{0xB5100, 0x22CB90}; + WEAK symbol hks_obj_settable{0xB6320, 0x22DDB0}; + WEAK symbol hks_obj_gettable{0xB55E0, 0x22D070}; + WEAK symbol vm_call_internal{0xE5E40, 0x25D2F0}; + WEAK symbol Hashtable_Create{0xA3570, 0x21B030}; WEAK symbol cclosure_Create{0, 0x21B250}; - WEAK symbol hksi_luaL_ref{0, 0x236CC0}; - WEAK symbol hksi_luaL_unref{0, 0x22FC40}; + int internal_, int profilerTreatClosureAsFunc)> cclosure_Create{0xA3790, 0x21B250}; + WEAK symbol hksi_luaL_ref{0xB7F90, 0x236CC0}; + WEAK symbol hksi_luaL_unref{0xB8130, 0x22FC40}; WEAK symbol hksi_hksL_loadbuffer{0, 0x22E620}; - WEAK symbol hksi_lua_getinfo{0, 0x22FFE0}; - WEAK symbol hksi_lua_getstack{0, 0x2302B0}; - WEAK symbol hksi_luaL_error{0, 0x22F930}; - WEAK symbol typenames{0, 0x10AD750}; + unsigned __int64 sz, const char* name)> hksi_hksL_loadbuffer{0xB6B90, 0x22E620}; + WEAK symbol hksi_lua_getinfo{0xB84D0, 0x22FFE0}; + WEAK symbol hksi_lua_getstack{0xB87A0, 0x2302B0}; + WEAK symbol hksi_luaL_error{0xBF120, 0x22F930}; + WEAK symbol typenames{0x98CD20, 0x10AD750}; } }