summaryrefslogtreecommitdiffstats
path: root/src/hl2h.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/hl2h.cpp25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/hl2h.cpp b/src/hl2h.cpp
index 1460577..c51d35e 100644
--- a/src/hl2h.cpp
+++ b/src/hl2h.cpp
@@ -467,7 +467,8 @@ static void hkdSrvRandomSeed(int seed) {
467} 467}
468 468
469static void install_seed_hook() { 469static void install_seed_hook() {
470 if (g_seed_hook_installed || !g_server.valid()) 470 static bool failed = false;
471 if (g_seed_hook_installed || failed || !g_server.valid())
471 return; 472 return;
472 g_srv_base = g_server.ranges[0].lo; 473 g_srv_base = g_server.ranges[0].lo;
473 uintptr_t slot = g_srv_base + 0xce1348; // R_386_JUMP_SLOT RandomSeed 474 uintptr_t slot = g_srv_base + 0xce1348; // R_386_JUMP_SLOT RandomSeed
@@ -478,7 +479,9 @@ static void install_seed_hook() {
478 if (!g_real_random_seed) 479 if (!g_real_random_seed)
479 g_real_random_seed = (void (*)(int))dlsym(RTLD_DEFAULT, "RandomSeed"); 480 g_real_random_seed = (void (*)(int))dlsym(RTLD_DEFAULT, "RandomSeed");
480 if (!g_real_random_seed) { 481 if (!g_real_random_seed) {
482 failed = true;
481 logf("seed hook: real RandomSeed not found"); 483 logf("seed hook: real RandomSeed not found");
484 toastf(TOAST_WARN, "Spread seed hook unavailable");
482 return; 485 return;
483 } 486 }
484 mprotect((void *)(slot & ~(uintptr_t)0xFFF), 0x1000, 487 mprotect((void *)(slot & ~(uintptr_t)0xFFF), 0x1000,
@@ -808,6 +811,7 @@ static void *setup_thread(void *) {
808 } 811 }
809 if (!g_client.valid() || !g_engine.valid()) { 812 if (!g_client.valid() || !g_engine.valid()) {
810 logf("client.so/engine.so never appeared"); 813 logf("client.so/engine.so never appeared");
814 toastf(TOAST_ERROR, "client.so/engine.so not found; hl2hake inactive");
811 return nullptr; 815 return nullptr;
812 } 816 }
813 logf("client.so: %d mapped range(s), %s", (int)g_client.ranges.size(), 817 logf("client.so: %d mapped range(s), %s", (int)g_client.ranges.size(),
@@ -822,6 +826,7 @@ static void *setup_thread(void *) {
822 auto ef = (CreateInterfaceFn)dlsym(eh, "CreateInterface"); 826 auto ef = (CreateInterfaceFn)dlsym(eh, "CreateInterface");
823 if (!cf || !ef) { 827 if (!cf || !ef) {
824 logf("CreateInterface not found"); 828 logf("CreateInterface not found");
829 toastf(TOAST_ERROR, "CreateInterface not found; hl2hake inactive");
825 return nullptr; 830 return nullptr;
826 } 831 }
827 832
@@ -840,6 +845,7 @@ static void *setup_thread(void *) {
840 logf("interfaces unresolved: VClient017=%p VClientEntityList003=%p " 845 logf("interfaces unresolved: VClient017=%p VClientEntityList003=%p "
841 "VEngineClient014=%p", 846 "VEngineClient014=%p",
842 g_iface.client, g_iface.entitylist, g_iface.engine); 847 g_iface.client, g_iface.entitylist, g_iface.engine);
848 toastf(TOAST_ERROR, "Game interfaces unresolved; hl2hake inactive");
843 return nullptr; 849 return nullptr;
844 } 850 }
845 logf("interfaces: VClient017=%p VClientEntityList003=%p " 851 logf("interfaces: VClient017=%p VClientEntityList003=%p "
@@ -856,12 +862,27 @@ static void *setup_thread(void *) {
856 g_iface.engineserver, g_iface.debugoverlay, g_iface.enginetrace); 862 g_iface.engineserver, g_iface.debugoverlay, g_iface.enginetrace);
857 863
858 resolve_netvars(); 864 resolve_netvars();
859 if (!find_input_global()) 865 if (!g_net.ok())
866 toastf(TOAST_ERROR, "Netvars incomplete; features may be disabled");
867 else if (g_net.absvelocity < 0)
868 toastf(TOAST_WARN, "Jumpbug assist disabled: velocity netvar missing");
869 if (!g_iface.engineserver)
870 toastf(TOAST_WARN, "Server interfaces missing; jumpbug/spread limited");
871 if (!g_iface.debugoverlay)
872 toastf(TOAST_WARN, "Debug overlay missing; ESP projection uses fallback");
873 if (!g_iface.enginetrace)
874 toastf(TOAST_WARN, "Engine trace missing; vischeck fails open");
875
876 if (!find_input_global()) {
877 toastf(TOAST_ERROR, "Input hook failed; movement features disabled");
860 return nullptr; 878 return nullptr;
879 }
861 880
862 init_conmsg(); 881 init_conmsg();
863 install_hook(); 882 install_hook();
864 install_menu(); 883 install_menu();
884 if (g_surface)
885 toastf(TOAST_INFO, "hl2hake loaded - Insert opens the menu");
865 return nullptr; 886 return nullptr;
866} 887}
867 888