diff --git a/src/extension.cpp b/src/extension.cpp index 3011160..1270232 100644 --- a/src/extension.cpp +++ b/src/extension.cpp @@ -39,13 +39,8 @@ IForward *g_pPassFwd = NULL; int gSetCollisionSolverHookId, gShouldCollideHookId; -#if defined(__linux__) && defined(__i386__) -CDetour* PassServerEntityFilterFuncDetour; -__attribute__((regparm(2))) bool (*PassServerEntityFilterFunc_Actual)(const IHandleEntity*, const IHandleEntity*); -__attribute__((regparm(2))) bool PassServerEntityFilterFunc(const IHandleEntity* pTouch, const IHandleEntity* pPass) -#else -DETOUR_DECL_STATIC2( PassServerEntityFilterFunc, bool, const IHandleEntity *, pTouch, const IHandleEntity *, pPass ) -#endif + +DETOUR_CUSTOM_STATIC2( PassServerEntityFilterFunc, bool, const IHandleEntity *, pTouch, const IHandleEntity *, pPass ) { if ( g_pPassFwd->GetFunctionCount() == 0 ) return DETOUR_STATIC_CALL( PassServerEntityFilterFunc )( pTouch, pPass ); diff --git a/src/extension.h b/src/extension.h index ff8e568..ce3faf6 100644 --- a/src/extension.h +++ b/src/extension.h @@ -107,5 +107,21 @@ inline const CBaseEntity *UTIL_EntityFromEntityHandle( const IHandleEntity *pCon return pUnk->GetBaseEntity(); } +#define DETOUR_DECL_STATIC2_REGPARM(name, ret, p1type, p1name, p2type, p2name) \ +ret (*name##_Actual)(p1type, p2type) __attribute__((regparm(2))) = NULL; \ +ret name(p1type p1name, p2type p2name) __attribute__((regparm(2))) + +#define DETOUR_DECL_STATIC2_FASTCALL(name, ret, p1type, p1name, p2type, p2name) \ +ret (__fastcall *name##_Actual)(p1type, p2type) = NULL; \ +ret __fastcall name(p1type p1name, p2type p2name) + + +#if SOURCE_ENGINE == SE_TF2 && defined(PLATFORM_LINUX) && defined(__i386__) + #define DETOUR_CUSTOM_STATIC2 DETOUR_DECL_STATIC2_REGPARM +#elif SOURCE_ENGINE == SE_CSGO && defined(PLATFORM_WINDOWS) + #define DETOUR_CUSTOM_STATIC2 DETOUR_DECL_STATIC2_FASTCALL +#else + #define DETOUR_CUSTOM_STATIC2 DETOUR_DECL_STATIC2 +#endif #endif // _INCLUDE_COLLISIONHOOK_EXTENSION_H_