summaryrefslogtreecommitdiffstats
path: root/src/netvars.cpp
diff options
context:
space:
mode:
authorsalmonik <salmonik@tuta.io>2026-11-04 11:39:18 +0100
committersalmonik <salmonik@tuta.io>2026-11-04 11:39:18 +0100
commitb287fc803c73d3ae076c49d726e17e13faa15050 (patch)
tree0e962adff452973119293345a643f6601a7c2c60 /src/netvars.cpp
parentProps: match the studio model name format (diff)
downloadhl2h-b287fc803c73d3ae076c49d726e17e13faa15050.tar.gz
hl2h-b287fc803c73d3ae076c49d726e17e13faa15050.zip
Props: disable StudioRender hooks, fix m_clrRender offset
Hooking IStudioRender's draw/setter slots made matched props render the error material and then crashed the material system ("debug/modelstats has bad reference count 0 when being bound"). Keep the hook code for reference but do not install it. Fix the m_clrRender netvar resolution: the walk picked an embedded table entry at offset 0, so the earlier entity writes stomped entity vtables. Only accept offsets inside C_BaseEntity (0x20..0x2000), then write the prop colour there for models/props entities. Restore white when disabled.
Diffstat (limited to '')
-rw-r--r--src/netvars.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/netvars.cpp b/src/netvars.cpp
index 4578e52..8043674 100644
--- a/src/netvars.cpp
+++ b/src/netvars.cpp
@@ -93,7 +93,11 @@ static void collect_netvars(uintptr_t table, uintptr_t base_off, int depth) {
93 g_net.activeweapon < 0) { 93 g_net.activeweapon < 0) {
94 g_net.activeweapon = (int)(base_off + (uint32_t)poff); 94 g_net.activeweapon = (int)(base_off + (uint32_t)poff);
95 } else if (strcmp(pname2, "m_clrRender") == 0 && g_net.clr_render < 0) { 95 } else if (strcmp(pname2, "m_clrRender") == 0 && g_net.clr_render < 0) {
96 g_net.clr_render = (int)(base_off + (uint32_t)poff); 96 int off = (int)(base_off + (uint32_t)poff);
97 // Reject the 0 offset some embedded tables report; the real render
98 // colour lives well inside C_BaseEntity.
99 if (off >= 0x20 && off <= 0x2000)
100 g_net.clr_render = off;
97 } else if (strcmp(pname2, "m_iTeamNum") == 0 && g_net.teamnum < 0) { 101 } else if (strcmp(pname2, "m_iTeamNum") == 0 && g_net.teamnum < 0) {
98 g_net.teamnum = (int)(base_off + (uint32_t)poff); 102 g_net.teamnum = (int)(base_off + (uint32_t)poff);
99 } else if (strcmp(pname2, "m_vecOrigin") == 0 && g_net.origin < 0) { 103 } else if (strcmp(pname2, "m_vecOrigin") == 0 && g_net.origin < 0) {