ISource2ModAddresses
Resolved engine-function accessors for Source2Mod.
Exposes pre-resolved function pointers for common engine operations. Module inspection, pattern scanning, symbol lookup, and pointer arithmetic are available via ISource2ModModule and ISource2ModMemory.
Provides access to pre-resolved engine function pointers.
For module inspection, pattern scanning, and pointer arithmetic use ISource2ModModule and ISource2ModMemory instead.
Interface id ISource2ModAddresses001 (SOURCE2MOD_ADDRESSES_INTERFACE) · Global g_pSource2ModAddresses · Header source2mod/ISource2ModAddresses.h
Types
CBaseEntity_CreateEntityByName_t
using CBaseEntity_CreateEntityByName_t = CBaseEntity* (FASTCALL*)(const char*, int);Creates an entity by classname.
CBaseEntity_DispatchSpawn_t
using CBaseEntity_DispatchSpawn_t = void (FASTCALL*)(CBaseEntity*, CEntityKeyValues*);Dispatches spawn on an entity.
CBaseEntity_TakeDamageOld_t
using CBaseEntity_TakeDamageOld_t = int64_t (FASTCALL*)(CBaseEntity* pThis, CTakeDamageInfo* pInfo, CTakeDamageResult* pResult);CBaseEntity::TakeDamageOld -- the game's own asserts name it so.
CBaseModelEntity_SetModel_t
using CBaseModelEntity_SetModel_t = void (FASTCALL*)(CBaseModelEntity*, const char*);Sets model on entity.
CBasePlayerController_SetPawn_t
using CBasePlayerController_SetPawn_t = void (FASTCALL*)(CBasePlayerController*, CBasePlayerPawn*, bool, bool, bool, bool);Assigns pawn to player controller.
CBasePlayerPawn_SnapViewAngles_t
using CBasePlayerPawn_SnapViewAngles_t = void (FASTCALL*)(CBasePlayerPawn*, QAngle*);Snaps a pawn's view angles, as the engine does on teleport.
CCSGameRules_TerminateRound_t
using CCSGameRules_TerminateRound_t = void (FASTCALL*)(CCSGameRules* pThis, float flDelay, uint32 nReason, uint32* pnTeamId);
using CCSGameRules_TerminateRound_t = void (FASTCALL*)(CCSGameRules* pThis, uint32 nReason, uint32* pnTeamId, float flDelay);CCSGameRules::TerminateRound
The delay and the reason swap places between platforms, and the winning team goes in as a pointer -- null when there is none, which is the ordinary case. SwiftlyS2 splits it the same way; getting this wrong on Linux means the game reads the reason as the delay.
#ifdef _WIN32); the first line is the Windows form, the second the Linux one.CPlayer_WeaponServices_Destroy_t
using CPlayer_WeaponServices_Destroy_t = void (FASTCALL*)(CPlayer_WeaponServices*, CBasePlayerWeapon*);Destroys weapon from player pawn.
LegacyGameEventListener_t
using LegacyGameEventListener_t = IGameEventListener2* (FASTCALL*)(CPlayerSlot);Retrieves legacy game event listener.
CCSPlayerController_SwitchTeam_t
using CCSPlayerController_SwitchTeam_t = void (FASTCALL*)(CCSPlayerController*, int nTeam);Switches player team. The team is read as a full int.
CEntityInstance_AcceptInput_t
using CEntityInstance_AcceptInput_t = bool (FASTCALL*)(CEntityInstance*, const char*, CEntityInstance*, CEntityInstance*, const variant_t&);Accepts entity input. Interns the name and forwards to CEntityIdentity::AcceptInput, returning its result.
CEntityIOOutput_FireOutputInternal_t
using CEntityIOOutput_FireOutputInternal_t = void (FASTCALL*)(CEntityIOOutput*, CEntityInstance*, CEntityInstance*, void*, float, void*, void*);Fires entity output internally.
CEntitySystem_AddEntityIOEvent_t
using CEntitySystem_AddEntityIOEvent_t = void (FASTCALL*)(CEntitySystem*, CEntityInstance*, const char*, CEntityInstance*, CEntityInstance*, const variant_t&, float, void*, void*);Adds entity IO event.
CGameEntitySystem_FindEntityByClassName_t
using CGameEntitySystem_FindEntityByClassName_t = CBaseEntity* (FASTCALL*)(CEntitySystem*, CEntityInstance*, const char*);Finds entity by classname.
CGameEntitySystem_FindEntityByName_t
using CGameEntitySystem_FindEntityByName_t = CBaseEntity* (FASTCALL*)(CEntitySystem*, CEntityInstance*, const char*, CEntityInstance*, CEntityInstance*, CEntityInstance*, IEntityFindFilter*);Finds entity by name.
CTakeDamageInfo_CTakeDamageInfo_t
using CTakeDamageInfo_CTakeDamageInfo_t = void (FASTCALL*)(CTakeDamageInfo* pThis, CBaseEntity* pInflictor, CBaseEntity* pAttacker, CBaseEntity* pAbility, const Vector* vecDamageForce, const Vector* vecDamagePosition, float flDamage, int bitsDamageType, int iCustomDamage, void* a10);Constructs CTakeDamageInfo with valid members.
INetworkMessageProcessingPreFilter_FilterMessage_t
using INetworkMessageProcessingPreFilter_FilterMessage_t = bool (THISCALL*)(INetworkMessageProcessingPreFilter* pThis, const CNetMessage* pData, INetChannel* pChannel);CEntityIdentity_AcceptInput_t
using CEntityIdentity_AcceptInput_t = bool (FASTCALL*)(CEntityIdentity* pThis, CUtlSymbolLarge* pInputName, CEntityInstance* pActivator, CEntityInstance* pCaller, variant_t* pValue, void* a6, void* a7);CEntityIdentity::AcceptInput -- the identity-side entry point.
Takes the input name already interned: CEntityInstance::AcceptInput looks it up and passes a pointer to the symbol, not the string. a6/a7 point at objects the caller builds on its stack.
CCSPlayer_ItemServices_CanAcquire_t
using CCSPlayer_ItemServices_CanAcquire_t = int64_t (FASTCALL*)(CCSPlayer_ItemServices* pThis, CEconItemView* pItem, int nAcquireMethod, void* a4);CCSPlayer_ItemServices::CanAcquire -- returns an AcquireResult.
CCSPlayerPawnBase_CanMove_t
using CCSPlayerPawnBase_CanMove_t = bool (FASTCALL*)(CCSPlayerPawnBase* pThis);CCSPlayerPawnBase::CanMove -- a CCSPlayerPawnBase virtual; false while frozen, defusing, etc.
CCSPlayerController_ProcessUserCmd_t
using CCSPlayerController_ProcessUserCmd_t = void* (FASTCALL*)(CCSPlayerController* pThis, void* pUserCmds, int nNumCmds, bool bPaused, float flMargin);CCSPlayerController::ProcessUserCmd
CBasePlayerController_OnSimulateUserCommands_t
using CBasePlayerController_OnSimulateUserCommands_t = void (FASTCALL*)(CBasePlayerController* pThis);CBasePlayerController::OnSimulateUserCommands
CCSPlayer_MovementServices_AirAccelerate_t
using CCSPlayer_MovementServices_AirAccelerate_t = void (FASTCALL*)(CCSPlayer_MovementServices* pThis, CMoveData* pMove, Vector* pWishDirection, float flWishSpeed, float flAcceleration);CCSPlayer_MovementServices_AirMove_t
using CCSPlayer_MovementServices_AirMove_t = void (FASTCALL*)(CCSPlayer_MovementServices* pThis, CMoveData* pMove);CCSPlayer_MovementServices_CanUnduck_t
using CCSPlayer_MovementServices_CanUnduck_t = bool (FASTCALL*)(CCSPlayer_MovementServices* pThis, CMoveData* pMove);CCSPlayer_MovementServices_CategorizePosition_t
using CCSPlayer_MovementServices_CategorizePosition_t = void (FASTCALL*)(CCSPlayer_MovementServices* pThis, CMoveData* pMove, bool bStayOnGround);CCSPlayer_MovementServices_CheckFalling_t
using CCSPlayer_MovementServices_CheckFalling_t = void (FASTCALL*)(CCSPlayer_MovementServices* pThis, CMoveData* pMove);CCSPlayer_MovementServices_CheckParameters_t
using CCSPlayer_MovementServices_CheckParameters_t = void (FASTCALL*)(CCSPlayer_MovementServices* pThis, CMoveData* pMove);CCSPlayer_MovementServices_CheckVelocity_t
using CCSPlayer_MovementServices_CheckVelocity_t = void (FASTCALL*)(CCSPlayer_MovementServices* pThis, CMoveData* pMove, void* a3);CCSPlayer_MovementServices_CheckWater_t
using CCSPlayer_MovementServices_CheckWater_t = bool (FASTCALL*)(CCSPlayer_MovementServices* pThis, CMoveData* pMove);CCSPlayer_MovementServices_Duck_t
using CCSPlayer_MovementServices_Duck_t = void (FASTCALL*)(CCSPlayer_MovementServices* pThis, CMoveData* pMove);CCSPlayer_MovementServices_Friction_t
using CCSPlayer_MovementServices_Friction_t = void (FASTCALL*)(CCSPlayer_MovementServices* pThis, CMoveData* pMove);CCSPlayer_MovementServices_FullWalkMove_t
using CCSPlayer_MovementServices_FullWalkMove_t = void (FASTCALL*)(CCSPlayer_MovementServices* pThis, CMoveData* pMove, bool bGround);CCSPlayer_MovementServices_LadderMove_t
using CCSPlayer_MovementServices_LadderMove_t = bool (FASTCALL*)(CCSPlayer_MovementServices* pThis, CMoveData* pMove);CCSPlayer_MovementServices_MoveInit_t
using CCSPlayer_MovementServices_MoveInit_t = bool (FASTCALL*)(CCSPlayer_MovementServices* pThis, CMoveData* pMove);CCSPlayer_MovementServices_PlayerMove_t
using CCSPlayer_MovementServices_PlayerMove_t = void (FASTCALL*)(CCSPlayer_MovementServices* pThis, CMoveData* pMove);CCSPlayer_MovementServices_ProcessMovement_t
using CCSPlayer_MovementServices_ProcessMovement_t = void (FASTCALL*)(CCSPlayer_MovementServices* pThis, CMoveData* pMove);CCSPlayer_MovementServices_SetupMove_t
using CCSPlayer_MovementServices_SetupMove_t = void (FASTCALL*)(CCSPlayer_MovementServices* pThis, CUserCmd* pCmd, CMoveData* pMove);CCSPlayer_MovementServices_TryPlayerMove_t
using CCSPlayer_MovementServices_TryPlayerMove_t = void (FASTCALL*)(CCSPlayer_MovementServices* pThis, CMoveData* pMove, Vector* pFirstDest, CGameTrace* pFirstTrace, bool* pbIsSurfing);CCSPlayer_MovementServices_WalkMove_t
using CCSPlayer_MovementServices_WalkMove_t = void (FASTCALL*)(CCSPlayer_MovementServices* pThis, CMoveData* pMove);CCSPlayer_MovementServices_WaterMove_t
using CCSPlayer_MovementServices_WaterMove_t = void (FASTCALL*)(CCSPlayer_MovementServices* pThis, CMoveData* pMove);CCSPlayer_MovementServices_GroundAccelerate_t
using CCSPlayer_MovementServices_GroundAccelerate_t = void (FASTCALL*)(CCSPlayer_MovementServices* pThis, CMoveData* pMove, float flFrameTime, Vector* pWishDirection, float flWishSpeed, float flAcceleration);
using CCSPlayer_MovementServices_GroundAccelerate_t = void (FASTCALL*)(CCSPlayer_MovementServices* pThis, CMoveData* pMove, Vector* pWishDirection, float flFrameTime, float flWishSpeed, float flAcceleration);CCSPlayer_MovementServices::GroundAccelerate
The wish direction and the frame time swap places between platforms.
#ifdef _WIN32); the first line is the Windows form, the second the Linux one.CCSPlayerLegacyJump_OnJump_t
using CCSPlayerLegacyJump_OnJump_t = void (FASTCALL*)(CCSPlayerLegacyJump* pThis, CMoveData* pMove);Members of the jump components, not of the movement services: the movement services call them on m_LegacyJump / m_ModernJump.
Which pair is live depends on the sv_jump_impulse-era cvars; the modern and legacy paths are separate functions in the binary.
CCSPlayerModernJump_OnJump_t
using CCSPlayerModernJump_OnJump_t = void (FASTCALL*)(CCSPlayerModernJump* pThis, CMoveData* pMove);CCSPlayerLegacyJump_CheckJumpButton_t
using CCSPlayerLegacyJump_CheckJumpButton_t = void (FASTCALL*)(CCSPlayerLegacyJump* pThis, CMoveData* pMove);CCSPlayerModernJump_CheckJumpButton_t
using CCSPlayerModernJump_CheckJumpButton_t = void (FASTCALL*)(CCSPlayerModernJump* pThis, CMoveData* pMove);CAttributeList_SetOrAddAttributeValueByName_t
using CAttributeList_SetOrAddAttributeValueByName_t = void (FASTCALL*)(CAttributeList* pThis, const char* pszAttributeName, float flValue);CAttributeList::SetOrAddAttributeValueByName
CDecoyProjectile_EmitGrenade_t
using CDecoyProjectile_EmitGrenade_t = CDecoyProjectile* (FASTCALL*)(Vector* pPosition, QAngle* pAngle, Vector* pVelocity, Vector* pAngVelocity, CBaseEntity* pOwner, uint32_t nItemDefIndex);C<Type>Projectile::EmitGrenade -- spawns a live grenade.
The fourth argument (pAngVelocity) is never read on either platform -- every variant overwrites that register before touching it -- but it keeps its slot, so pass anything (the helpers pass the velocity again). Smoke takes one extra int the others do not have.
CFlashbangProjectile_EmitGrenade_t
using CFlashbangProjectile_EmitGrenade_t = CFlashbangProjectile* (FASTCALL*)(Vector* pPosition, QAngle* pAngle, Vector* pVelocity, Vector* pAngVelocity, CBaseEntity* pOwner, uint32_t nItemDefIndex);CHEGrenadeProjectile_EmitGrenade_t
using CHEGrenadeProjectile_EmitGrenade_t = CHEGrenadeProjectile* (FASTCALL*)(Vector* pPosition, QAngle* pAngle, Vector* pVelocity, Vector* pAngVelocity, CBaseEntity* pOwner, uint32_t nItemDefIndex);CMolotovProjectile_EmitGrenade_t
using CMolotovProjectile_EmitGrenade_t = CMolotovProjectile* (FASTCALL*)(Vector* pPosition, QAngle* pAngle, Vector* pVelocity, Vector* pAngVelocity, CBaseEntity* pOwner, uint32_t nItemDefIndex);CSmokeGrenadeProjectile_EmitGrenade_t
using CSmokeGrenadeProjectile_EmitGrenade_t = CSmokeGrenadeProjectile* (FASTCALL*)(Vector* pPosition, QAngle* pAngle, Vector* pVelocity, Vector* pAngVelocity, CBaseEntity* pOwner, uint32_t nItemDefIndex, int a7);CCSPlayer_ItemServices_GiveNamedItem_t
using CCSPlayer_ItemServices_GiveNamedItem_t = CBasePlayerWeapon* (FASTCALL*)(CCSPlayer_ItemServices* pThis, const char* pszItem, int nSubType, CEconItemView* pScriptItem, bool bForce, void* a6);CCSPlayer_ItemServices::GiveNamedItem -- the full implementation.
The GiveNamedItem vtable slots are thunks into this one: the plain one passes (name, 0, nullptr, false, nullptr), the bool-returning one forwards its own bool as bForce and tests the result. Hooking this catches every give, virtual or not.
CCSPlayerPawn_PostThink_t
using CCSPlayerPawn_PostThink_t = void (FASTCALL*)(CCSPlayerPawn* pThis);CCSPlayerPawn::PostThink -- virtual, takes nothing but the pawn.
UTIL_Remove_t
using UTIL_Remove_t = void (FASTCALL*)(CEntityInstance* pEntity);UTIL_Remove -- queues the entity for deletion; null is ignored.
DispatchParticleEffect_t
using DispatchParticleEffect_t = void (FASTCALL*)(const char* pszParticleName, int nAttachType, CBaseEntity* pEntity, uint8 nAttachmentPoint, uint32 nAttachmentNameToken, bool bResetAllParticlesOnEntity, int nSplitScreenPlayerSlot, IRecipientFilter* pFilter, uint8 nFlags);DispatchParticleEffect
The attachment name is a 32-bit string token (it arrives in r8d), not the CUtlSymbolLarge older ports declare. A null filter sends to everyone. The last byte seeds the effect's flag byte; pass 0.
GetWeaponCSDataFromKey_t
using GetWeaponCSDataFromKey_t = CCSWeaponBaseVData* (FASTCALL*)(int nWeaponType, const char* pszKey);GetWeaponCSDataFromKey -- looks a weapon's VData up by its key ("weapon_ak47"). nWeaponType -1 accepts any type; any other value returns null when the found data is of a different type.
CSource2Server_GetNavMeshData_t
using CSource2Server_GetNavMeshData_t = bool (FASTCALL*)(ISource2Server* pThis, CNavData* pNavMeshData);CSource2Server::GetNavMeshData -- ISource2Server vtable slot 32.
The game's implementation ignores the out argument and only reports whether a nav mesh is loaded (g_pNavMesh != null); CCSNavArea reads that global out of its body.
CLoggingSystem_LogDirect_t
using CLoggingSystem_LogDirect_t = LoggingResponse_t (FASTCALL*)(CLoggingSystem* pThis, LoggingChannelID_t nChannelID, LoggingSeverity_t nSeverity, const LoggingRareOptions_t* pRareOptions, const LoggingMetaData_t* pMetaData, Color color, const char* pszMessage);CLoggingSystem::LogDirect (tier0) -- the member behind LoggingSystem_LogDirect.
Cmd_ExecuteCommand_t
using Cmd_ExecuteCommand_t = void (FASTCALL*)(void* pThis, int nTarget, CPlayerSlot nSlot, ConCommandRef hCommand, const CCommand* pArgs);Cmd_ExecuteCommand (engine2) -- runs one parsed command.
The first argument is the engine's command-buffer owner, not a CCommand: the deferred-command loop passes itself there. The target is a CommandTarget_t and the command goes in by value, as ICvar::DispatchConCommand takes it.
Methods
CBaseEntity_CreateEntityByName
virtual CBaseEntity_CreateEntityByName_t CBaseEntity_CreateEntityByName() = 0;Creates an entity by classname.
CBaseEntity_DispatchSpawn
virtual CBaseEntity_DispatchSpawn_t CBaseEntity_DispatchSpawn() = 0;Dispatches spawn on an entity.
CBaseEntity_TakeDamageOld
virtual CBaseEntity_TakeDamageOld_t CBaseEntity_TakeDamageOld() = 0;CBaseEntity::TakeDamageOld -- the game's own asserts name it so.
CBaseModelEntity_SetModel
virtual CBaseModelEntity_SetModel_t CBaseModelEntity_SetModel() = 0;Sets model on entity.
CBasePlayerController_SetPawn
virtual CBasePlayerController_SetPawn_t CBasePlayerController_SetPawn() = 0;Assigns pawn to player controller.
CBasePlayerPawn_SnapViewAngles
virtual CBasePlayerPawn_SnapViewAngles_t CBasePlayerPawn_SnapViewAngles() = 0;Snaps a pawn's view angles, as the engine does on teleport.
CCSGameRules_TerminateRound
virtual CCSGameRules_TerminateRound_t CCSGameRules_TerminateRound() = 0;CCSGameRules::TerminateRound
CPlayer_WeaponServices_Destroy
virtual CPlayer_WeaponServices_Destroy_t CPlayer_WeaponServices_Destroy() = 0;Destroys weapon from player pawn.
LegacyGameEventListener
virtual LegacyGameEventListener_t LegacyGameEventListener() = 0;Retrieves legacy game event listener.
CCSPlayerController_SwitchTeam
virtual CCSPlayerController_SwitchTeam_t CCSPlayerController_SwitchTeam() = 0;Switches player team. The team is read as a full int.
CEntityInstance_AcceptInput
virtual CEntityInstance_AcceptInput_t CEntityInstance_AcceptInput() = 0;Accepts entity input. Interns the name and forwards to CEntityIdentity::AcceptInput, returning its result.
CEntityIOOutput_FireOutputInternal
virtual CEntityIOOutput_FireOutputInternal_t CEntityIOOutput_FireOutputInternal() = 0;Fires entity output internally.
CEntitySystem_AddEntityIOEvent
virtual CEntitySystem_AddEntityIOEvent_t CEntitySystem_AddEntityIOEvent() = 0;Adds entity IO event.
CGameEntitySystem_FindEntityByClassName
virtual CGameEntitySystem_FindEntityByClassName_t CGameEntitySystem_FindEntityByClassName() = 0;Finds entity by classname.
CGameEntitySystem_FindEntityByName
virtual CGameEntitySystem_FindEntityByName_t CGameEntitySystem_FindEntityByName() = 0;Finds entity by name.
CTakeDamageInfo_CTakeDamageInfo
virtual CTakeDamageInfo_CTakeDamageInfo_t CTakeDamageInfo_CTakeDamageInfo() = 0;Constructs CTakeDamageInfo with valid members.
INetworkMessageProcessingPreFilter_FilterMessage
virtual INetworkMessageProcessingPreFilter_FilterMessage_t INetworkMessageProcessingPreFilter_FilterMessage() = 0;CEntityIdentity_AcceptInput
virtual CEntityIdentity_AcceptInput_t CEntityIdentity_AcceptInput() = 0;CEntityIdentity::AcceptInput -- the identity-side entry point.
CCSPlayer_ItemServices_CanAcquire
virtual CCSPlayer_ItemServices_CanAcquire_t CCSPlayer_ItemServices_CanAcquire() = 0;CCSPlayer_ItemServices::CanAcquire -- returns an AcquireResult.
CCSPlayerPawnBase_CanMove
virtual CCSPlayerPawnBase_CanMove_t CCSPlayerPawnBase_CanMove() = 0;CCSPlayerPawnBase::CanMove -- a CCSPlayerPawnBase virtual; false while frozen, defusing, etc.
CCSPlayerController_ProcessUserCmd
virtual CCSPlayerController_ProcessUserCmd_t CCSPlayerController_ProcessUserCmd() = 0;CCSPlayerController::ProcessUserCmd
CBasePlayerController_OnSimulateUserCommands
virtual CBasePlayerController_OnSimulateUserCommands_t CBasePlayerController_OnSimulateUserCommands() = 0;CBasePlayerController::OnSimulateUserCommands
CCSPlayer_MovementServices_AirAccelerate
virtual CCSPlayer_MovementServices_AirAccelerate_t CCSPlayer_MovementServices_AirAccelerate() = 0;CCSPlayer_MovementServices_AirMove
virtual CCSPlayer_MovementServices_AirMove_t CCSPlayer_MovementServices_AirMove() = 0;CCSPlayer_MovementServices_CanUnduck
virtual CCSPlayer_MovementServices_CanUnduck_t CCSPlayer_MovementServices_CanUnduck() = 0;CCSPlayer_MovementServices_CategorizePosition
virtual CCSPlayer_MovementServices_CategorizePosition_t CCSPlayer_MovementServices_CategorizePosition() = 0;CCSPlayer_MovementServices_CheckFalling
virtual CCSPlayer_MovementServices_CheckFalling_t CCSPlayer_MovementServices_CheckFalling() = 0;CCSPlayer_MovementServices_CheckParameters
virtual CCSPlayer_MovementServices_CheckParameters_t CCSPlayer_MovementServices_CheckParameters() = 0;CCSPlayer_MovementServices_CheckVelocity
virtual CCSPlayer_MovementServices_CheckVelocity_t CCSPlayer_MovementServices_CheckVelocity() = 0;CCSPlayer_MovementServices_CheckWater
virtual CCSPlayer_MovementServices_CheckWater_t CCSPlayer_MovementServices_CheckWater() = 0;CCSPlayer_MovementServices_Duck
virtual CCSPlayer_MovementServices_Duck_t CCSPlayer_MovementServices_Duck() = 0;CCSPlayer_MovementServices_Friction
virtual CCSPlayer_MovementServices_Friction_t CCSPlayer_MovementServices_Friction() = 0;CCSPlayer_MovementServices_FullWalkMove
virtual CCSPlayer_MovementServices_FullWalkMove_t CCSPlayer_MovementServices_FullWalkMove() = 0;CCSPlayer_MovementServices_GroundAccelerate
virtual CCSPlayer_MovementServices_GroundAccelerate_t CCSPlayer_MovementServices_GroundAccelerate() = 0;CCSPlayer_MovementServices::GroundAccelerate
CCSPlayer_MovementServices_LadderMove
virtual CCSPlayer_MovementServices_LadderMove_t CCSPlayer_MovementServices_LadderMove() = 0;CCSPlayer_MovementServices_MoveInit
virtual CCSPlayer_MovementServices_MoveInit_t CCSPlayer_MovementServices_MoveInit() = 0;CCSPlayer_MovementServices_PlayerMove
virtual CCSPlayer_MovementServices_PlayerMove_t CCSPlayer_MovementServices_PlayerMove() = 0;CCSPlayer_MovementServices_ProcessMovement
virtual CCSPlayer_MovementServices_ProcessMovement_t CCSPlayer_MovementServices_ProcessMovement() = 0;CCSPlayer_MovementServices_SetupMove
virtual CCSPlayer_MovementServices_SetupMove_t CCSPlayer_MovementServices_SetupMove() = 0;CCSPlayer_MovementServices_TryPlayerMove
virtual CCSPlayer_MovementServices_TryPlayerMove_t CCSPlayer_MovementServices_TryPlayerMove() = 0;CCSPlayer_MovementServices_WalkMove
virtual CCSPlayer_MovementServices_WalkMove_t CCSPlayer_MovementServices_WalkMove() = 0;CCSPlayer_MovementServices_WaterMove
virtual CCSPlayer_MovementServices_WaterMove_t CCSPlayer_MovementServices_WaterMove() = 0;CCSPlayerLegacyJump_OnJump
virtual CCSPlayerLegacyJump_OnJump_t CCSPlayerLegacyJump_OnJump() = 0;Members of the jump components, not of the movement services: the movement services call them on m_LegacyJump / m_ModernJump.
CCSPlayerModernJump_OnJump
virtual CCSPlayerModernJump_OnJump_t CCSPlayerModernJump_OnJump() = 0;CCSPlayerLegacyJump_CheckJumpButton
virtual CCSPlayerLegacyJump_CheckJumpButton_t CCSPlayerLegacyJump_CheckJumpButton() = 0;CCSPlayerModernJump_CheckJumpButton
virtual CCSPlayerModernJump_CheckJumpButton_t CCSPlayerModernJump_CheckJumpButton() = 0;CAttributeList_SetOrAddAttributeValueByName
virtual CAttributeList_SetOrAddAttributeValueByName_t CAttributeList_SetOrAddAttributeValueByName() = 0;CAttributeList::SetOrAddAttributeValueByName
CDecoyProjectile_EmitGrenade
virtual CDecoyProjectile_EmitGrenade_t CDecoyProjectile_EmitGrenade() = 0;C<Type>Projectile::EmitGrenade -- spawns a live grenade.
CFlashbangProjectile_EmitGrenade
virtual CFlashbangProjectile_EmitGrenade_t CFlashbangProjectile_EmitGrenade() = 0;CHEGrenadeProjectile_EmitGrenade
virtual CHEGrenadeProjectile_EmitGrenade_t CHEGrenadeProjectile_EmitGrenade() = 0;CMolotovProjectile_EmitGrenade
virtual CMolotovProjectile_EmitGrenade_t CMolotovProjectile_EmitGrenade() = 0;CSmokeGrenadeProjectile_EmitGrenade
virtual CSmokeGrenadeProjectile_EmitGrenade_t CSmokeGrenadeProjectile_EmitGrenade() = 0;CCSPlayerPawn_PostThink
virtual CCSPlayerPawn_PostThink_t CCSPlayerPawn_PostThink() = 0;CCSPlayerPawn::PostThink -- virtual, takes nothing but the pawn.
UTIL_Remove
virtual UTIL_Remove_t UTIL_Remove() = 0;UTIL_Remove -- queues the entity for deletion; null is ignored.
DispatchParticleEffect
virtual DispatchParticleEffect_t DispatchParticleEffect() = 0;DispatchParticleEffect
GetWeaponCSDataFromKey
virtual GetWeaponCSDataFromKey_t GetWeaponCSDataFromKey() = 0;GetWeaponCSDataFromKey -- looks a weapon's VData up by its key ("weapon_ak47"). nWeaponType -1 accepts any type; any other value returns null when the found data is of a different type.
CSource2Server_GetNavMeshData
virtual CSource2Server_GetNavMeshData_t CSource2Server_GetNavMeshData() = 0;CSource2Server::GetNavMeshData -- ISource2Server vtable slot 32.
CLoggingSystem_LogDirect
virtual CLoggingSystem_LogDirect_t CLoggingSystem_LogDirect() = 0;CLoggingSystem::LogDirect (tier0) -- the member behind LoggingSystem_LogDirect.
Cmd_ExecuteCommand
virtual Cmd_ExecuteCommand_t Cmd_ExecuteCommand() = 0;Cmd_ExecuteCommand (engine2) -- runs one parsed command.
CCSPlayer_ItemServices_GiveNamedItem
virtual CCSPlayer_ItemServices_GiveNamedItem_t CCSPlayer_ItemServices_GiveNamedItem() = 0;CCSPlayer_ItemServices::GiveNamedItem -- the full implementation.
Macros
SOURCE2MOD_ORIGINAL
#define SOURCE2MOD_ORIGINAL(fn) reinterpret_cast<decltype(fn)>(KHook::FindOriginal(reinterpret_cast<void*>(fn)))Calls a function from this interface, bypassing any inline hooks on it.
The SDK's schema helpers do the same through their HookChain argument (ISource2ModTypes.h); this is for calling an ADDR_* function directly.
The ADDR_* macros below hand back the address the signature scan found, which is what you want to hook. It is not always what you want to call: once any plugin inline-hooks one of these functions, its first bytes are a jump into the detour, so calling it runs the whole Pre/Post chain. That is right when you are standing in for the game -- a plugin dealing damage as if a weapon fired wants the chain -- and wrong when you are asking for the function itself, e.g. an admin command, where another plugin's rules have no business vetoing what the server was told to do.
Wrap the call in this when you mean the latter:
SOURCE2MOD_ORIGINAL(ADDR_TAKE_DAMAGE_OLD())(pPawn, &info, &result);Signature-blind, so it works whatever prototype you hold and however the plugin that hooked it declared its hook -- the two routinely disagree, and TerminateRound is the standing example: the hook declares (CCSGameRules, RoundEndReason, float, void*, uint8_t) where this interface's typedef says (CCSGameRules*, uint32, uint32*, float). Unhooked functions come back unchanged (KHook::FindOriginal hands the address back as is), so this is always safe to apply.
Other macros
| Macro | Expands to |
|---|---|
ADDR_CREATE_ENTITY_BY_NAME() | g_pSource2ModAddresses->CBaseEntity_CreateEntityByName() |
ADDR_DISPATCH_SPAWN() | g_pSource2ModAddresses->CBaseEntity_DispatchSpawn() |
ADDR_TAKE_DAMAGE_OLD() | g_pSource2ModAddresses->CBaseEntity_TakeDamageOld() |
ADDR_SET_MODEL() | g_pSource2ModAddresses->CBaseModelEntity_SetModel() |
ADDR_SET_PAWN() | g_pSource2ModAddresses->CBasePlayerController_SetPawn() |
ADDR_SNAP_VIEW_ANGLES() | g_pSource2ModAddresses->CBasePlayerPawn_SnapViewAngles() |
ADDR_TERMINATE_ROUND() | g_pSource2ModAddresses->CCSGameRules_TerminateRound() |
ADDR_WEAPON_SERVICES_DESTROY() | g_pSource2ModAddresses->CPlayer_WeaponServices_Destroy() |
ADDR_LEGACY_GAME_EVENT_LISTENER() | g_pSource2ModAddresses->LegacyGameEventListener() |
ADDR_SWITCH_TEAM() | g_pSource2ModAddresses->CCSPlayerController_SwitchTeam() |
ADDR_ACCEPT_INPUT() | g_pSource2ModAddresses->CEntityInstance_AcceptInput() |
ADDR_FIRE_OUTPUT_INTERNAL() | g_pSource2ModAddresses->CEntityIOOutput_FireOutputInternal() |
ADDR_ADD_ENTITY_IO_EVENT() | g_pSource2ModAddresses->CEntitySystem_AddEntityIOEvent() |
ADDR_FIND_ENTITY_BY_CLASSNAME() | g_pSource2ModAddresses->CGameEntitySystem_FindEntityByClassName() |
ADDR_FIND_ENTITY_BY_NAME() | g_pSource2ModAddresses->CGameEntitySystem_FindEntityByName() |
ADDR_TAKE_DAMAGE_INFO() | g_pSource2ModAddresses->CTakeDamageInfo_CTakeDamageInfo() |
ADDR_FILTER_MESSAGE() | g_pSource2ModAddresses->INetworkMessageProcessingPreFilter_FilterMessage() |
ADDR_IDENTITY_ACCEPT_INPUT() | g_pSource2ModAddresses->CEntityIdentity_AcceptInput() |
ADDR_CAN_ACQUIRE() | g_pSource2ModAddresses->CCSPlayer_ItemServices_CanAcquire() |
ADDR_CAN_MOVE() | g_pSource2ModAddresses->CCSPlayerPawnBase_CanMove() |
ADDR_PROCESS_USER_CMD() | g_pSource2ModAddresses->CCSPlayerController_ProcessUserCmd() |
ADDR_ON_SIMULATE_USER_COMMANDS() | g_pSource2ModAddresses->CBasePlayerController_OnSimulateUserCommands() |
ADDR_AIR_ACCELERATE() | g_pSource2ModAddresses->CCSPlayer_MovementServices_AirAccelerate() |
ADDR_AIR_MOVE() | g_pSource2ModAddresses->CCSPlayer_MovementServices_AirMove() |
ADDR_CAN_UNDUCK() | g_pSource2ModAddresses->CCSPlayer_MovementServices_CanUnduck() |
ADDR_CATEGORIZE_POSITION() | g_pSource2ModAddresses->CCSPlayer_MovementServices_CategorizePosition() |
ADDR_CHECK_FALLING() | g_pSource2ModAddresses->CCSPlayer_MovementServices_CheckFalling() |
ADDR_CHECK_PARAMETERS() | g_pSource2ModAddresses->CCSPlayer_MovementServices_CheckParameters() |
ADDR_CHECK_VELOCITY() | g_pSource2ModAddresses->CCSPlayer_MovementServices_CheckVelocity() |
ADDR_CHECK_WATER() | g_pSource2ModAddresses->CCSPlayer_MovementServices_CheckWater() |
ADDR_DUCK() | g_pSource2ModAddresses->CCSPlayer_MovementServices_Duck() |
ADDR_FRICTION() | g_pSource2ModAddresses->CCSPlayer_MovementServices_Friction() |
ADDR_FULL_WALK_MOVE() | g_pSource2ModAddresses->CCSPlayer_MovementServices_FullWalkMove() |
ADDR_GROUND_ACCELERATE() | g_pSource2ModAddresses->CCSPlayer_MovementServices_GroundAccelerate() |
ADDR_LADDER_MOVE() | g_pSource2ModAddresses->CCSPlayer_MovementServices_LadderMove() |
ADDR_MOVE_INIT() | g_pSource2ModAddresses->CCSPlayer_MovementServices_MoveInit() |
ADDR_PLAYER_MOVE() | g_pSource2ModAddresses->CCSPlayer_MovementServices_PlayerMove() |
ADDR_PROCESS_MOVEMENT() | g_pSource2ModAddresses->CCSPlayer_MovementServices_ProcessMovement() |
ADDR_SETUP_MOVE() | g_pSource2ModAddresses->CCSPlayer_MovementServices_SetupMove() |
ADDR_TRY_PLAYER_MOVE() | g_pSource2ModAddresses->CCSPlayer_MovementServices_TryPlayerMove() |
ADDR_WALK_MOVE() | g_pSource2ModAddresses->CCSPlayer_MovementServices_WalkMove() |
ADDR_WATER_MOVE() | g_pSource2ModAddresses->CCSPlayer_MovementServices_WaterMove() |
ADDR_ON_JUMP_LEGACY() | g_pSource2ModAddresses->CCSPlayerLegacyJump_OnJump() |
ADDR_ON_JUMP_MODERN() | g_pSource2ModAddresses->CCSPlayerModernJump_OnJump() |
ADDR_CHECK_JUMP_BUTTON_LEGACY() | g_pSource2ModAddresses->CCSPlayerLegacyJump_CheckJumpButton() |
ADDR_CHECK_JUMP_BUTTON_MODERN() | g_pSource2ModAddresses->CCSPlayerModernJump_CheckJumpButton() |
ADDR_SET_OR_ADD_ATTRIBUTE() | g_pSource2ModAddresses->CAttributeList_SetOrAddAttributeValueByName() |
ADDR_EMIT_DECOY() | g_pSource2ModAddresses->CDecoyProjectile_EmitGrenade() |
ADDR_EMIT_FLASHBANG() | g_pSource2ModAddresses->CFlashbangProjectile_EmitGrenade() |
ADDR_EMIT_HEGRENADE() | g_pSource2ModAddresses->CHEGrenadeProjectile_EmitGrenade() |
ADDR_EMIT_MOLOTOV() | g_pSource2ModAddresses->CMolotovProjectile_EmitGrenade() |
ADDR_EMIT_SMOKE() | g_pSource2ModAddresses->CSmokeGrenadeProjectile_EmitGrenade() |
ADDR_POST_THINK() | g_pSource2ModAddresses->CCSPlayerPawn_PostThink() |
ADDR_UTIL_REMOVE() | g_pSource2ModAddresses->UTIL_Remove() |
ADDR_DISPATCH_PARTICLE_EFFECT() | g_pSource2ModAddresses->DispatchParticleEffect() |
ADDR_GET_WEAPON_CS_DATA_FROM_KEY() | g_pSource2ModAddresses->GetWeaponCSDataFromKey() |
ADDR_GET_NAV_MESH_DATA() | g_pSource2ModAddresses->CSource2Server_GetNavMeshData() |
ADDR_LOG_DIRECT() | g_pSource2ModAddresses->CLoggingSystem_LogDirect() |
ADDR_CMD_EXECUTE_COMMAND() | g_pSource2ModAddresses->Cmd_ExecuteCommand() |
ADDR_GIVE_NAMED_ITEM() | g_pSource2ModAddresses->CCSPlayer_ItemServices_GiveNamedItem() |