diff options
| author | salmonik <salmonik@tuta.io> | 2026-11-04 11:39:18 +0100 |
|---|---|---|
| committer | salmonik <salmonik@tuta.io> | 2026-11-04 11:39:18 +0100 |
| commit | b287fc803c73d3ae076c49d726e17e13faa15050 (patch) | |
| tree | 0e962adff452973119293345a643f6601a7c2c60 /src/netvars.cpp | |
| parent | Props: match the studio model name format (diff) | |
| download | hl2h-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 'src/netvars.cpp')
| -rw-r--r-- | src/netvars.cpp | 6 |
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) { |
