From 074e315c8550712dce0c7b530a90eee6aca29e63 Mon Sep 17 00:00:00 2001 From: salmonik Date: Wed, 4 Nov 2026 23:26:53 +0100 Subject: Add grenade trajectory, RPG armour priority, empty chargers, mega gravity gun - Projectiles gets a "Grenade trajectory" toggle. While a frag grenade is held, simulate the weapon_frag throw (1200 u/s forward + 120 z, player velocity, gravity 600) and trace each step with a new trace_solid_segment(); reflect on impact, stop on a slow upward-normal hit, and draw the path, landing cross and a 300-unit blast ring. Verified on :99 (arcs, bounces off the tunnel wall, lands). - With the RPG equipped, armoured NPCs (striders, gunships, dropships, hunter-choppers) sort before normal enemies during target acquisition. Added helicopter/chopper to the ARMORED model list. - Empty health/suit chargers are hidden: read m_iJuice from the server datamap (0 = depleted, -1 = unreadable/fail open). - The citadel supercharged gravity gun (d3_citadel_03, d3_citadel_04, d3_breen_01 via IVEngineClient::GetLevelName) is treated as a normal weapon, so the melee aimbot no longer restricts it to VULNERABLE NPCs. --- src/menu.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/menu.cpp') diff --git a/src/menu.cpp b/src/menu.cpp index 873f5ed..1064365 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -63,6 +63,7 @@ FeatureState g_skybox{false, 0}; // skybox.png image override FeatureState g_projectiles{true, 0}; // grenade / rocket ESP bool g_proj_fuse = true; bool g_proj_radius = true; +bool g_proj_traj = true; FeatureState g_chams{false, 0}; ChamsGroup g_chams_hostile{true, 3, {255, 60, 60, 255}, true, 3, {255, 60, 60, 255}}; @@ -241,9 +242,10 @@ void config_save() { g_fog_start, g_fog_end, (int)g_fog_skybox, (int)g_fog_disable); fprintf(f, "[skybox]\nactive=%d\nbind=%d\n", g_skybox.active, g_skybox.bind); - fprintf(f, "[projectiles]\nactive=%d\nbind=%d\nfuse=%d\nradius=%d\n", + fprintf(f, "[projectiles]\nactive=%d\nbind=%d\nfuse=%d\nradius=%d\n" + "trajectory=%d\n", g_projectiles.active, g_projectiles.bind, (int)g_proj_fuse, - (int)g_proj_radius); + (int)g_proj_radius, (int)g_proj_traj); fprintf(f, "[chams]\nactive=%d\nbind=%d\n", g_chams.active, g_chams.bind); auto save_chams = [&](const char *name, const ChamsGroup &g) { fprintf(f, "[%s]\nvis=%d\nvis_mat=%d\nvis_r=%d\nvis_g=%d\nvis_b=%d\n" @@ -425,6 +427,8 @@ static bool config_load() { g_proj_fuse = atoi(val) != 0; else if (strcmp(key, "radius") == 0) g_proj_radius = atoi(val) != 0; + else if (strcmp(key, "trajectory") == 0) + g_proj_traj = atoi(val) != 0; } if (chams_grp) { ChamsGroup &g = *chams_grp; @@ -702,6 +706,7 @@ void config_reset_defaults() { g_projectiles = {true, 0}; g_proj_fuse = true; g_proj_radius = true; + g_proj_traj = true; g_chams = {false, 0}; g_chams_hostile = {true, 3, {255, 60, 60, 255}, true, 3, {255, 60, 60, 255}}; -- cgit v1.2.3