From b287fc803c73d3ae076c49d726e17e13faa15050 Mon Sep 17 00:00:00 2001 From: salmonik Date: Wed, 4 Nov 2026 11:39:18 +0100 Subject: 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. --- src/netvars.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/netvars.cpp') 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) { g_net.activeweapon < 0) { g_net.activeweapon = (int)(base_off + (uint32_t)poff); } else if (strcmp(pname2, "m_clrRender") == 0 && g_net.clr_render < 0) { - g_net.clr_render = (int)(base_off + (uint32_t)poff); + int off = (int)(base_off + (uint32_t)poff); + // Reject the 0 offset some embedded tables report; the real render + // colour lives well inside C_BaseEntity. + if (off >= 0x20 && off <= 0x2000) + g_net.clr_render = off; } else if (strcmp(pname2, "m_iTeamNum") == 0 && g_net.teamnum < 0) { g_net.teamnum = (int)(base_off + (uint32_t)poff); } else if (strcmp(pname2, "m_vecOrigin") == 0 && g_net.origin < 0) { -- cgit v1.2.3