diff --git a/src/client/component/fov.cpp b/src/client/component/fov.cpp index ca28020a..29385c14 100644 --- a/src/client/component/fov.cpp +++ b/src/client/component/fov.cpp @@ -18,8 +18,6 @@ namespace fov game::dvar_t* cg_fovScale; game::dvar_t* cg_use_fov_comp; - utils::hook::detour cg_view_calc_fov_compensation_hook; - float cg_view_calc_fov_compensation_stub(game::cg_s* blob) { if (!cg_use_fov_comp->current.enabled) @@ -27,7 +25,7 @@ namespace fov return 0.0f; } - return cg_view_calc_fov_compensation_hook.invoke(blob); + return utils::hook::invoke(0x140889B60, blob); } } @@ -63,7 +61,8 @@ namespace fov // disable FOV compensation by default cg_use_fov_comp = game::Dvar_RegisterBool("cg_use_fov_comp", false, game::DVAR_FLAG_SAVED, "Use FOV offset compensation for the viewmodel"); - cg_view_calc_fov_compensation_hook.create(0x140889B60, cg_view_calc_fov_compensation_stub); + utils::hook::call(0x140186FC4, cg_view_calc_fov_compensation_stub); + utils::hook::call(0x1408D5940, cg_view_calc_fov_compensation_stub); // patch max fov values utils::hook::inject(0x14087E08B + 4, &max_fov); diff --git a/src/client/component/gameplay.cpp b/src/client/component/gameplay.cpp index 022554e9..d6f12116 100644 --- a/src/client/component/gameplay.cpp +++ b/src/client/component/gameplay.cpp @@ -16,13 +16,11 @@ namespace gameplay { namespace { - utils::hook::detour stuck_in_client_hook; - void stuck_in_client_stub(void* entity) { if (dvars::bg_playerEjection->current.enabled) { - stuck_in_client_hook.invoke(entity); + utils::hook::invoke(0x140AFD9B0, entity); } } @@ -144,7 +142,7 @@ namespace gameplay { // Implement ejection dvar dvars::bg_playerEjection = game::Dvar_RegisterBool("bg_playerEjection", true, game::DVAR_FLAG_REPLICATED, "Flag whether player ejection is on or off"); - stuck_in_client_hook.create(0x140AFD9B0, stuck_in_client_stub); + utils::hook::call(0x140AFA739, stuck_in_client_stub); // Implement bounces dvar dvars::bg_bounces = game::Dvar_RegisterBool("bg_bounces", false, game::DVAR_FLAG_REPLICATED, "Enables bounces"); diff --git a/src/client/component/intro.cpp b/src/client/component/intro.cpp index 38866bfe..afcb552f 100644 --- a/src/client/component/intro.cpp +++ b/src/client/component/intro.cpp @@ -9,8 +9,6 @@ namespace intro { namespace { - utils::hook::detour cinematic_start_playback_hook; - void cinematic_start_playback(const char* name, const int playbackFlags, const int startOffsetMsec, const bool fillerBink, const int pauseState) { @@ -26,7 +24,7 @@ namespace intro } } - cinematic_start_playback_hook.invoke(name, playbackFlags, startOffsetMsec, fillerBink, pauseState); + utils::hook::invoke(0x140DD6A10, name, playbackFlags, startOffsetMsec, fillerBink, pauseState); } } @@ -35,7 +33,8 @@ namespace intro public: void post_unpack() override { - cinematic_start_playback_hook.create(0x140DD6A10, cinematic_start_playback); + utils::hook::call(0x140DD69FF, cinematic_start_playback); + utils::hook::call(0x140DD69CF, cinematic_start_playback); } }; } diff --git a/src/client/component/network.cpp b/src/client/component/network.cpp index 36974bf3..cea11644 100644 --- a/src/client/component/network.cpp +++ b/src/client/component/network.cpp @@ -58,7 +58,6 @@ namespace network namespace { - utils::hook::detour cl_dispatch_connectionless_packet_hook; bool cl_dispatch_connectionless_packet_stub(int client_num, game::netadr_s* from, game::msg_t* msg, int time) { if (handle_command(from, game::Cmd_Argv(0), msg)) @@ -66,7 +65,7 @@ namespace network return true; } - return cl_dispatch_connectionless_packet_hook.invoke(client_num, from, msg, time); + return utils::hook::invoke(0x1409B2250, client_num, from, msg, time); } int dw_send_to_stub(const int length, const char* data, game::netadr_s* to) @@ -310,7 +309,7 @@ namespace network utils::hook::jump(0x140D93D70, dw_recv_from_stub); // intercept command handling - cl_dispatch_connectionless_packet_hook.create(0x1409B2250, cl_dispatch_connectionless_packet_stub); + utils::hook::call(0x1403572B7, cl_dispatch_connectionless_packet_stub); // handle xuid without secure connection utils::hook::nop(0x140C53315, 2); diff --git a/src/client/component/party.cpp b/src/client/component/party.cpp index f032acc9..1ea0d9b6 100644 --- a/src/client/component/party.cpp +++ b/src/client/component/party.cpp @@ -483,13 +483,6 @@ namespace party utils::hook::invoke(0x140341430, 0, cmd); // CL_Main_AddReliableCommand } - utils::hook::detour cl_prepare_for_map_restart_hook; - void cl_prepare_for_map_restart_stub(const char* mapname, const char* gametype) - { - cl_prepare_for_map_restart_hook.invoke(mapname, gametype); - } - - utils::hook::detour cl_initialize_gamestate_hook; void cl_initialize_gamestate_stub(int local_client_num) { if (!game::Com_IsAnyLocalServerRunning()) @@ -497,7 +490,7 @@ namespace party send_user_info(); } - cl_initialize_gamestate_hook.invoke(local_client_num); + utils::hook::invoke(0x1409B2FA0, local_client_num); } } @@ -718,8 +711,7 @@ namespace party // enable custom kick reason in GScr_KickPlayer utils::hook::set(0x140B5377E, 0xEB); - cl_prepare_for_map_restart_hook.create(0x1409B3FE0, cl_prepare_for_map_restart_stub); - cl_initialize_gamestate_hook.create(0x1409B2FA0, cl_initialize_gamestate_stub); + utils::hook::call(0x1409B70A1, cl_initialize_gamestate_stub); command::add("senduserinfo", []() { diff --git a/src/client/component/patches.cpp b/src/client/component/patches.cpp index 029d97a4..d0459330 100644 --- a/src/client/component/patches.cpp +++ b/src/client/component/patches.cpp @@ -17,10 +17,8 @@ namespace patches { utils::hook::detour com_register_common_dvars_hook; utils::hook::detour com_game_mode_supports_feature_hook; - utils::hook::detour cg_set_client_dvar_from_server_hook; utils::hook::detour live_get_map_index_hook; utils::hook::detour content_do_we_have_content_pack_hook; - utils::hook::detour init_network_dvars_hook; std::string get_login_username() { @@ -168,7 +166,7 @@ namespace patches if (result) { std::string index_str = std::to_string(index); - return cg_set_client_dvar_from_server_hook.invoke(client_num, cgame_glob, index_str.data(), value); + return utils::hook::invoke(0x140856D70, client_num, cgame_glob, index_str.data(), value); } } @@ -252,7 +250,7 @@ namespace patches content_do_we_have_content_pack_hook.create(0x140CE8550, content_do_we_have_content_pack_stub); // make setclientdvar behave like older games - cg_set_client_dvar_from_server_hook.create(0x140856D70, cg_set_client_dvar_from_server_stub); + utils::hook::call(0x14084A136, cg_set_client_dvar_from_server_stub); utils::hook::call(0x140B0A9BB, get_client_dvar_checksum); // setclientdvar utils::hook::call(0x140B0ACD7, get_client_dvar_checksum); // setclientdvars utils::hook::call(0x140B0A984, get_client_dvar); // setclientdvar @@ -266,7 +264,7 @@ namespace patches utils::hook::call(0x140B7CF11, cbuf_execute_buffer_internal_stub); // don't register every replicated dvar as a network dvar - init_network_dvars_hook.create(0x140B7A920, init_network_dvars_stub); + utils::hook::jump(0x140B7A920, init_network_dvars_stub); // some [data validation] anti tamper thing that kills performance dvars::override::register_int("dvl", 0, 0, 0, game::DVAR_FLAG_READ); diff --git a/src/client/component/profile_infos.cpp b/src/client/component/profile_infos.cpp index 2dd1cb7d..2071a7f3 100644 --- a/src/client/component/profile_infos.cpp +++ b/src/client/component/profile_infos.cpp @@ -207,22 +207,11 @@ namespace profile_infos }); } - namespace - { - utils::hook::detour session_unregister_remote_player_hook; - void session_unregister_remote_player_stub(game::SessionData* session, const int slot) - { - session_unregister_remote_player_hook.invoke(session, slot); - } - } - class component final : public component_interface { public: void post_unpack() override { - session_unregister_remote_player_hook.create(0x140C73970, session_unregister_remote_player_stub); - //dvars::override::register_int("playercard_cache_validity_life", 5000, 0, 3600000, 0x0); // 5sec network::on("profileInfo", [](const game::netadr_s& client_addr, const std::string_view& data) diff --git a/src/client/component/renderer.cpp b/src/client/component/renderer.cpp index 0d41660e..59785550 100644 --- a/src/client/component/renderer.cpp +++ b/src/client/component/renderer.cpp @@ -13,7 +13,6 @@ namespace renderer namespace { utils::hook::detour r_init_draw_method_hook; - utils::hook::detour r_update_front_end_dvar_options_hook; int get_fullbright_technique() { @@ -49,7 +48,7 @@ namespace renderer gfxdrawmethod(); } - return r_update_front_end_dvar_options_hook.invoke(); + return utils::hook::invoke(0x140E28B60); } } @@ -65,8 +64,8 @@ namespace renderer dvars::r_fullbright = game::Dvar_RegisterInt("r_fullbright", 0, 0, 2, game::DVAR_FLAG_SAVED, "Toggles rendering without lighting"); - r_init_draw_method_hook.create(0x140DE9260, &r_init_draw_method_stub); - r_update_front_end_dvar_options_hook.create(0x140E28B60, &r_update_front_end_dvar_options_stub); + r_init_draw_method_hook.create(0x140DE9260, r_init_draw_method_stub); + utils::hook::call(0x140E264B3, r_update_front_end_dvar_options_stub); } }; } diff --git a/src/client/component/scheduler.cpp b/src/client/component/scheduler.cpp index c5f19bce..d235aeee 100644 --- a/src/client/component/scheduler.cpp +++ b/src/client/component/scheduler.cpp @@ -86,10 +86,6 @@ namespace scheduler volatile bool kill = false; std::thread thread; task_pipeline pipelines[pipeline::count]; - utils::hook::detour r_end_frame_hook; - utils::hook::detour g_run_frame_hook; - utils::hook::detour main_frame_hook; - utils::hook::detour hks_frame_hook; void execute(const pipeline type) { @@ -100,12 +96,12 @@ namespace scheduler void r_end_frame_stub() { execute(pipeline::renderer); - r_end_frame_hook.invoke(); + utils::hook::invoke(0x140E267B0); } void server_frame_stub() { - g_run_frame_hook.invoke(); + utils::hook::invoke(0x140B15E20); execute(pipeline::server); } @@ -116,7 +112,7 @@ namespace scheduler execute(pipeline::main); }); - return main_frame_hook.invoke(); + return utils::hook::invoke(0x140B8E2D0); } void hks_frame_stub() @@ -126,7 +122,7 @@ namespace scheduler { execute(pipeline::lui); } - hks_frame_hook.invoke(); + utils::hook::invoke(0x140613440); } } @@ -196,10 +192,11 @@ namespace scheduler void post_unpack() override { - r_end_frame_hook.create(0x140E267B0, scheduler::r_end_frame_stub); - g_run_frame_hook.create(0x140B15E20, scheduler::server_frame_stub); - main_frame_hook.create(0x140B8E2D0, scheduler::main_frame_stub); - hks_frame_hook.create(0x140613440, scheduler::hks_frame_stub); + utils::hook::call(0x14034728C, scheduler::r_end_frame_stub); + utils::hook::call(0x14048A7B9, scheduler::server_frame_stub); // sp call + utils::hook::call(0x140B21941, scheduler::server_frame_stub); // mp call + utils::hook::call(0x140B8E272, scheduler::main_frame_stub); + utils::hook::call(0x1406173C2, scheduler::hks_frame_stub); } void pre_destroy() override