- Status
- Offline
- Joined
- Mar 3, 2026
- Messages
- 690
- Reaction score
- 457
Anyone else slamming their head against the wall with the latest GoldSrc update? Re-reversing the Steam build is a massive chore when the old-school offsets decide to kick the bucket.
I'm currently trying to port a project using the Valve SDK base, but the typical pointers for cldll_func_t and cl_enginefuncs_s are completely dead on build 10210. Using the regular methods for finding pointers or relying on outdated dumps isn't cutting it anymore.
The Current Mess
Here is the logic structure that was working before the recent patches. If you are building an internal DLL, you probably recognize this setup for grabbing the module offsets:
Verified Offsets for 10210
After some digging in Cheat Engine, I managed to pull a few fresh addresses that still seem to land in the right spot. If you're building a new base, these should help you find your bearings:
Has anyone successfully dumped the full cl_enginefuncs_s for this specific build or found a more stable way to hook the engine pointers? Looking to avoid more BSODs while trying to get the SDK to play nice.
Drop your crash logs below or any tips on sigscanning for this build.
I'm currently trying to port a project using the Valve SDK base, but the typical pointers for cldll_func_t and cl_enginefuncs_s are completely dead on build 10210. Using the regular methods for finding pointers or relying on outdated dumps isn't cutting it anymore.
The Current Mess
Here is the logic structure that was working before the recent patches. If you are building an internal DLL, you probably recognize this setup for grabbing the module offsets:
Code:
#pragma once
#ifndef GAME_H
#define GAME_H
#include <pch.h>
#define BASE_OFFSET(base, offset) (&((char*)base)[offset])
#define MODULE_OFFSET(offset) BASE_OFFSET(this->Module.base, offset)
namespace cstrike
{
namespace Offsets
{
const uintptr_t pClFuncs = 0x122ED60;
const uintptr_t pEngFuncs = 0x136260;
const uintptr_t pGame = 0x6C3A90;
}
class GameModule
{
public:
bool IsValid = false;
mem::module_t Module;
public:
GameModule()
{
}
void Update()
{
}
protected:
bool Setup(std::string module_name)
{
this->Module = mem::in::get_module(module_name);
return this->Module.is_valid();
}
};
class hw : GameModule
{
public:
cldll_func_t* cl_funcs = nullptr;
cldll_func_t o_cl_funcs = {};
CGame* Game = nullptr;
cl_enginefuncs_s* Engfuncs = nullptr;
public:
hw()
{
if (!this->Setup("hw.dll"))
return;
this->Update();
this->IsValid = true;
}
~hw()
{
}
void Update()
{
this->cl_funcs = (cldll_func_t*)MODULE_OFFSET(Offsets::pClFuncs);
memcpy((void*)& this->o_cl_funcs, (void*)this->cl_funcs, sizeof(this->o_cl_funcs));
this->Engfuncs = (cl_enginefuncs_s*)MODULE_OFFSET(Offsets::pEngFuncs);
this->Game = (CGame*)MODULE_OFFSET(Offsets::pGame);
}
};
class client : public GameModule
{
public:
cldll_func_t* cl_funcs = nullptr;
public:
client()
{
if (!this->Setup("client.dll"))
return;
this->Update();
this->IsValid = true;
}
void Update()
{
}
};
}
#endif
Verified Offsets for 10210
After some digging in Cheat Engine, I managed to pull a few fresh addresses that still seem to land in the right spot. If you're building a new base, these should help you find your bearings:
- hw.dll + 0x196E8D — HUD_GetModelInterface
- client.dll + 0x47820 — client.Initialize
- client.dll + 0x47430 — client.F (struct of cldll_func_t)
While these help get the internal logic running, keep in mind that manual offset hardcoding is a one-way trip to Crash City whenever Valve pushes a silent update to the GoldSrc backend. If you're serious about this, you should probably be looking into signature scanning (pattern matching) to find these dynamically rather than checking raw hex in CE every time.
Has anyone successfully dumped the full cl_enginefuncs_s for this specific build or found a more stable way to hook the engine pointers? Looking to avoid more BSODs while trying to get the SDK to play nice.
Drop your crash logs below or any tips on sigscanning for this build.
Last edited by a moderator: