From b661a8dfd2c02bea54d8581ebb35d0fb3267867c Mon Sep 17 00:00:00 2001 From: salmonik Date: Wed, 4 Nov 2026 19:36:24 +0100 Subject: Chams: per-colour alpha and a softer viewmodel additive base - Colour picker gains an optional alpha bar (checkerboard preview, #RRGGBBAA readout); add_color_alpha is used for the chams colours. Chams colours are now r,g,b,a and chams_apply sets $alpha plus MATERIAL_VAR_TRANSLUCENT when alpha < 255. Config stores vis_a / inv_a / vm a. - The additive viewmodel base is now a faint translucent tint (alpha/8) instead of an opaque fill, so additive/Fullbright stay see-through and the viewmodel no longer becomes a solid blob. Fullbright whitening reduced to 25% so blue stays blue instead of turning lavender. --- src/menu.cpp | 50 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 18 deletions(-) (limited to 'src/menu.cpp') diff --git a/src/menu.cpp b/src/menu.cpp index bdb9531..873f5ed 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -64,12 +64,15 @@ FeatureState g_projectiles{true, 0}; // grenade / rocket ESP bool g_proj_fuse = true; bool g_proj_radius = true; FeatureState g_chams{false, 0}; -ChamsGroup g_chams_hostile{true, 3, {255, 60, 60}, true, 3, {255, 60, 60}}; -ChamsGroup g_chams_neutral{true, 3, {220, 220, 220}, false, 3, {220, 220, 220}}; -ChamsGroup g_chams_friendly{true, 3, {60, 255, 60}, false, 3, {60, 255, 60}}; +ChamsGroup g_chams_hostile{true, 3, {255, 60, 60, 255}, true, 3, + {255, 60, 60, 255}}; +ChamsGroup g_chams_neutral{true, 3, {220, 220, 220, 255}, false, 3, + {220, 220, 220, 255}}; +ChamsGroup g_chams_friendly{true, 3, {60, 255, 60, 255}, false, 3, + {60, 255, 60, 255}}; bool g_chams_viewmodel = false; int g_chams_vm_mat = 3; -int g_chams_vm_rgb[3] = {200, 200, 255}; +int g_chams_vm_rgb[4] = {200, 200, 255, 255}; bool g_item_health = true; bool g_item_ammo = true; bool g_item_armor = true; @@ -244,17 +247,18 @@ void config_save() { 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" - "inv=%d\ninv_mat=%d\ninv_r=%d\ninv_g=%d\ninv_b=%d\n", + "vis_a=%d\ninv=%d\ninv_mat=%d\ninv_r=%d\ninv_g=%d\ninv_b=%d\n" + "inv_a=%d\n", name, (int)g.vis_on, g.vis_mat, g.vis_rgb[0], g.vis_rgb[1], - g.vis_rgb[2], (int)g.inv_on, g.inv_mat, g.inv_rgb[0], - g.inv_rgb[1], g.inv_rgb[2]); + g.vis_rgb[2], g.vis_rgb[3], (int)g.inv_on, g.inv_mat, + g.inv_rgb[0], g.inv_rgb[1], g.inv_rgb[2], g.inv_rgb[3]); }; save_chams("chams_hostile", g_chams_hostile); save_chams("chams_neutral", g_chams_neutral); save_chams("chams_friendly", g_chams_friendly); - fprintf(f, "[chams_vm]\non=%d\nmat=%d\nr=%d\ng=%d\nb=%d\n", + fprintf(f, "[chams_vm]\non=%d\nmat=%d\nr=%d\ng=%d\nb=%d\na=%d\n", (int)g_chams_viewmodel, g_chams_vm_mat, g_chams_vm_rgb[0], - g_chams_vm_rgb[1], g_chams_vm_rgb[2]); + g_chams_vm_rgb[1], g_chams_vm_rgb[2], g_chams_vm_rgb[3]); fprintf(f, "[items]\nactive=%d\nbind=%d\nhealth=%d\nammo=%d\n" "armor=%d\nweapons=%d\ncrates=%d\ndistance=%d\nmax_dist=%d\n" "usable=%d\n", @@ -432,11 +436,13 @@ static bool config_load() { if (v > 6) v = 6; g.vis_mat = v; } else if (strcmp(key, "vis_r") == 0 || strcmp(key, "vis_g") == 0 || - strcmp(key, "vis_b") == 0) { + strcmp(key, "vis_b") == 0 || strcmp(key, "vis_a") == 0) { int v = atoi(val); if (v < 0) v = 0; if (v > 255) v = 255; - g.vis_rgb[key[4] == 'r' ? 0 : key[4] == 'g' ? 1 : 2] = v; + int idx = key[4] == 'r' ? 0 : key[4] == 'g' ? 1 + : key[4] == 'b' ? 2 : 3; + g.vis_rgb[idx] = v; } else if (strcmp(key, "inv") == 0) g.inv_on = atoi(val) != 0; else if (strcmp(key, "inv_mat") == 0) { @@ -445,11 +451,13 @@ static bool config_load() { if (v > 6) v = 6; g.inv_mat = v; } else if (strcmp(key, "inv_r") == 0 || strcmp(key, "inv_g") == 0 || - strcmp(key, "inv_b") == 0) { + strcmp(key, "inv_b") == 0 || strcmp(key, "inv_a") == 0) { int v = atoi(val); if (v < 0) v = 0; if (v > 255) v = 255; - g.inv_rgb[key[4] == 'r' ? 0 : key[4] == 'g' ? 1 : 2] = v; + int idx = key[4] == 'r' ? 0 : key[4] == 'g' ? 1 + : key[4] == 'b' ? 2 : 3; + g.inv_rgb[idx] = v; } } if (in_chams_vm) { @@ -461,11 +469,13 @@ static bool config_load() { if (v > 6) v = 6; g_chams_vm_mat = v; } else if (strcmp(key, "r") == 0 || strcmp(key, "g") == 0 || - strcmp(key, "b") == 0) { + strcmp(key, "b") == 0 || strcmp(key, "a") == 0) { int v = atoi(val); if (v < 0) v = 0; if (v > 255) v = 255; - g_chams_vm_rgb[key[0] == 'r' ? 0 : key[0] == 'g' ? 1 : 2] = v; + int idx = key[0] == 'r' ? 0 : key[0] == 'g' ? 1 + : key[0] == 'b' ? 2 : 3; + g_chams_vm_rgb[idx] = v; } } if (in_aim) { @@ -693,14 +703,18 @@ void config_reset_defaults() { g_proj_fuse = true; g_proj_radius = true; g_chams = {false, 0}; - g_chams_hostile = {true, 3, {255, 60, 60}, true, 3, {255, 60, 60}}; - g_chams_neutral = {true, 3, {220, 220, 220}, false, 3, {220, 220, 220}}; - g_chams_friendly = {true, 3, {60, 255, 60}, false, 3, {60, 255, 60}}; + g_chams_hostile = {true, 3, {255, 60, 60, 255}, true, 3, + {255, 60, 60, 255}}; + g_chams_neutral = {true, 3, {220, 220, 220, 255}, false, 3, + {220, 220, 220, 255}}; + g_chams_friendly = {true, 3, {60, 255, 60, 255}, false, 3, + {60, 255, 60, 255}}; g_chams_viewmodel = false; g_chams_vm_mat = 3; g_chams_vm_rgb[0] = 200; g_chams_vm_rgb[1] = 200; g_chams_vm_rgb[2] = 255; + g_chams_vm_rgb[3] = 255; g_item_health = true; g_item_ammo = true; g_item_armor = true; -- cgit v1.2.3