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.

Declared differently per platform (#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.

Declared differently per platform (#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.

Resolve it at the call, do not cache it in a global. The address is only the original from the moment the hook exists, and hooks are installed long after these addresses are scanned.

Other macros

MacroExpands 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()

On this page

TypesCBaseEntity_CreateEntityByName_tCBaseEntity_DispatchSpawn_tCBaseEntity_TakeDamageOld_tCBaseModelEntity_SetModel_tCBasePlayerController_SetPawn_tCBasePlayerPawn_SnapViewAngles_tCCSGameRules_TerminateRound_tCPlayer_WeaponServices_Destroy_tLegacyGameEventListener_tCCSPlayerController_SwitchTeam_tCEntityInstance_AcceptInput_tCEntityIOOutput_FireOutputInternal_tCEntitySystem_AddEntityIOEvent_tCGameEntitySystem_FindEntityByClassName_tCGameEntitySystem_FindEntityByName_tCTakeDamageInfo_CTakeDamageInfo_tINetworkMessageProcessingPreFilter_FilterMessage_tCEntityIdentity_AcceptInput_tCCSPlayer_ItemServices_CanAcquire_tCCSPlayerPawnBase_CanMove_tCCSPlayerController_ProcessUserCmd_tCBasePlayerController_OnSimulateUserCommands_tCCSPlayer_MovementServices_AirAccelerate_tCCSPlayer_MovementServices_AirMove_tCCSPlayer_MovementServices_CanUnduck_tCCSPlayer_MovementServices_CategorizePosition_tCCSPlayer_MovementServices_CheckFalling_tCCSPlayer_MovementServices_CheckParameters_tCCSPlayer_MovementServices_CheckVelocity_tCCSPlayer_MovementServices_CheckWater_tCCSPlayer_MovementServices_Duck_tCCSPlayer_MovementServices_Friction_tCCSPlayer_MovementServices_FullWalkMove_tCCSPlayer_MovementServices_LadderMove_tCCSPlayer_MovementServices_MoveInit_tCCSPlayer_MovementServices_PlayerMove_tCCSPlayer_MovementServices_ProcessMovement_tCCSPlayer_MovementServices_SetupMove_tCCSPlayer_MovementServices_TryPlayerMove_tCCSPlayer_MovementServices_WalkMove_tCCSPlayer_MovementServices_WaterMove_tCCSPlayer_MovementServices_GroundAccelerate_tCCSPlayerLegacyJump_OnJump_tCCSPlayerModernJump_OnJump_tCCSPlayerLegacyJump_CheckJumpButton_tCCSPlayerModernJump_CheckJumpButton_tCAttributeList_SetOrAddAttributeValueByName_tCDecoyProjectile_EmitGrenade_tCFlashbangProjectile_EmitGrenade_tCHEGrenadeProjectile_EmitGrenade_tCMolotovProjectile_EmitGrenade_tCSmokeGrenadeProjectile_EmitGrenade_tCCSPlayer_ItemServices_GiveNamedItem_tCCSPlayerPawn_PostThink_tUTIL_Remove_tDispatchParticleEffect_tGetWeaponCSDataFromKey_tCSource2Server_GetNavMeshData_tCLoggingSystem_LogDirect_tCmd_ExecuteCommand_tMethodsCBaseEntity_CreateEntityByNameCBaseEntity_DispatchSpawnCBaseEntity_TakeDamageOldCBaseModelEntity_SetModelCBasePlayerController_SetPawnCBasePlayerPawn_SnapViewAnglesCCSGameRules_TerminateRoundCPlayer_WeaponServices_DestroyLegacyGameEventListenerCCSPlayerController_SwitchTeamCEntityInstance_AcceptInputCEntityIOOutput_FireOutputInternalCEntitySystem_AddEntityIOEventCGameEntitySystem_FindEntityByClassNameCGameEntitySystem_FindEntityByNameCTakeDamageInfo_CTakeDamageInfoINetworkMessageProcessingPreFilter_FilterMessageCEntityIdentity_AcceptInputCCSPlayer_ItemServices_CanAcquireCCSPlayerPawnBase_CanMoveCCSPlayerController_ProcessUserCmdCBasePlayerController_OnSimulateUserCommandsCCSPlayer_MovementServices_AirAccelerateCCSPlayer_MovementServices_AirMoveCCSPlayer_MovementServices_CanUnduckCCSPlayer_MovementServices_CategorizePositionCCSPlayer_MovementServices_CheckFallingCCSPlayer_MovementServices_CheckParametersCCSPlayer_MovementServices_CheckVelocityCCSPlayer_MovementServices_CheckWaterCCSPlayer_MovementServices_DuckCCSPlayer_MovementServices_FrictionCCSPlayer_MovementServices_FullWalkMoveCCSPlayer_MovementServices_GroundAccelerateCCSPlayer_MovementServices_LadderMoveCCSPlayer_MovementServices_MoveInitCCSPlayer_MovementServices_PlayerMoveCCSPlayer_MovementServices_ProcessMovementCCSPlayer_MovementServices_SetupMoveCCSPlayer_MovementServices_TryPlayerMoveCCSPlayer_MovementServices_WalkMoveCCSPlayer_MovementServices_WaterMoveCCSPlayerLegacyJump_OnJumpCCSPlayerModernJump_OnJumpCCSPlayerLegacyJump_CheckJumpButtonCCSPlayerModernJump_CheckJumpButtonCAttributeList_SetOrAddAttributeValueByNameCDecoyProjectile_EmitGrenadeCFlashbangProjectile_EmitGrenadeCHEGrenadeProjectile_EmitGrenadeCMolotovProjectile_EmitGrenadeCSmokeGrenadeProjectile_EmitGrenadeCCSPlayerPawn_PostThinkUTIL_RemoveDispatchParticleEffectGetWeaponCSDataFromKeyCSource2Server_GetNavMeshDataCLoggingSystem_LogDirectCmd_ExecuteCommandCCSPlayer_ItemServices_GiveNamedItemMacrosSOURCE2MOD_ORIGINALOther macros