extensions/sdktools/vglobals.cpp
changeset 3221 ca0e525dcf86
parent 3027 0f90dd9754ca
child 3333 e247490894a1
     1.1 --- a/extensions/sdktools/vglobals.cpp	Mon Apr 04 13:37:29 2011 -0400
     1.2 +++ b/extensions/sdktools/vglobals.cpp	Mon Apr 04 13:44:19 2011 -0400
     1.3 @@ -39,29 +39,28 @@
     1.4  {
     1.5  	g_EntList = gamehelpers->GetGlobalEntityList();
     1.6  
     1.7 -	char *addr;
     1.8 +	/*
     1.9 +	 * g_pGameRules
    1.10 +	 *
    1.11 +	 * First try to lookup pointer directly for platforms with symbols.
    1.12 +	 * If symbols aren't present (Windows or stripped Linux/Mac), 
    1.13 +	 * attempt find via CreateGameRulesObject + offset
    1.14 +	 */
    1.15  
    1.16 -#ifdef PLATFORM_WINDOWS
    1.17 -	/* g_pGameRules */
    1.18 -	if (!g_pGameConf->GetMemSig("CreateGameRulesObject", (void **)&addr) || !addr)
    1.19 -	{
    1.20 -		return;
    1.21 -	}
    1.22 -
    1.23 -	int offset;
    1.24 -	if (!g_pGameConf->GetOffset("g_pGameRules", &offset) || !offset)
    1.25 +	char *addr;
    1.26 +	if (g_pGameConf->GetMemSig("g_pGameRules", (void **)&addr) && addr)
    1.27  	{
    1.28 -		return;
    1.29 +		g_pGameRules = reinterpret_cast<void **>(addr);
    1.30  	}
    1.31 -	g_pGameRules = *reinterpret_cast<void ***>(addr + offset);
    1.32 -#elif defined PLATFORM_LINUX || defined PLATFORM_APPLE
    1.33 -	/* g_pGameRules */
    1.34 -	if (!g_pGameConf->GetMemSig("g_pGameRules", (void **)&addr) || !addr)
    1.35 +	else if (g_pGameConf->GetMemSig("CreateGameRulesObject", (void **)&addr) && addr)
    1.36  	{
    1.37 -		return;
    1.38 +		int offset;
    1.39 +		if (!g_pGameConf->GetOffset("g_pGameRules", &offset) || !offset)
    1.40 +		{
    1.41 +			return;
    1.42 +		}
    1.43 +		g_pGameRules = *reinterpret_cast<void ***>(addr + offset);
    1.44  	}
    1.45 -	g_pGameRules = reinterpret_cast<void **>(addr);
    1.46 -#endif
    1.47  }
    1.48  
    1.49  size_t UTIL_StringToSignature(const char *str, char buffer[], size_t maxlength)