Skip to content

CCSPlayerController (client)

The server-side controller entity for a CS2 player. One CCSPlayerController exists per connected client for the lifetime of the connection; it persists across rounds. The controller owns a CCSPlayerPawn (the physical in-world representation) which may be recreated each round.

The controller / pawn split mirrors the Source 2 architecture described in the HL2SDK: a lightweight controller manages session-level state (score, team, competitive rank) while the pawn carries per-round physics and animation state. Demo parsers should track m_hPlayerPawn to find the corresponding pawn entity handle each round.

CS2 build 25218825 · Steam date 2026-09-09 · platform windows-x86_64 · cs2_schema.json

Kind: classSize: 2400 bytes (0x960)Alignment: 8 bytesModule: clientBinary: client.dll

Relationships

Inherits from: CBasePlayerController

Same name in another module: CCSPlayerController (server)

Used by (2) as a field type

Inheritance tree
Relationship diagram (10 edges)
classDiagram
    CEntityInstance <|-- C_BaseEntity
    C_BaseEntity <|-- CBasePlayerController
    CBasePlayerController <|-- CCSPlayerController
    CCSPlayerController --> CCSPlayerController_InGameMoneyServices
    CCSPlayerController --> CCSPlayerController_InventoryServices
    CCSPlayerController --> CCSPlayerController_ActionTrackingServices
    CCSPlayerController --> CCSPlayerController_DamageServices
    CCSPlayerController *-- GameTime_t
    CCSPlayerController --> C_CSPlayerPawn
    CCSPlayerController --> C_CSObserverPawn
Inheritance chain, direct subclasses (up to 20) and a few composition edges

Memory layout

170 fields, 68 declared here and 102 inherited. Offsets are absolute from the object base on windows-x86_64.

CEntityInstanceC_BaseEntityCBasePlayerControllerCCSPlayerController

OffsetFieldTypeFromAnnotations
0x8m_iszPrivateVScriptsCUtlSymbolLargeCEntityInstance
0x10m_pEntityCEntityIdentity*CEntityInstanceCEntityIdentity pointer: the entity's identity record (name, class, handle, flags).
0x28m_CScriptComponentCScriptComponent*CEntityInstanceVScript component attached to the entity, when scripted.
0x30m_CBodyComponentCBodyComponent*C_BaseEntity
0x38m_NetworkTransmitComponentCNetworkTransmitComponentC_BaseEntityMNotSaved
0x328m_nLastThinkTickGameTick_tC_BaseEntityMNotSaved
0x330m_pGameSceneNodeCGameSceneNode*C_BaseEntityMNotSaved
0x338m_pRenderComponentCRenderComponent*C_BaseEntityMNotSaved
0x340m_pCollisionCCollisionProperty*C_BaseEntityMNotSaved
0x348m_iMaxHealthint32C_BaseEntityMNotSaved
0x34cm_iHealthint32C_BaseEntity
0x350m_flDamageAccumulatorfloat32C_BaseEntityMNotSaved
0x354m_lifeStateuint8C_BaseEntityMNotSaved
0x355m_bTakesDamageboolC_BaseEntityMNotSaved
0x358m_nTakeDamageFlagsTakeDamageFlags_tC_BaseEntityMNotSaved
0x360m_nPlatformTypeEntityPlatformTypes_tC_BaseEntity
0x361m_ubInterpolationFrameuint8C_BaseEntityMNotSaved
0x364m_hSceneObjectControllerCHandle< C_BaseEntity >C_BaseEntity
0x368m_nNoInterpolationTickint32C_BaseEntityMNotSaved
0x36cm_nVisibilityNoInterpolationTickint32C_BaseEntityMNotSaved
0x370m_flProxyRandomValuefloat32C_BaseEntityMNotSaved
0x374m_iEFlagsint32C_BaseEntityMNotSaved
0x378m_nWaterTypeuint8C_BaseEntityMNotSaved
0x379m_bInterpolateEvenWithNoModelboolC_BaseEntityMNotSaved
0x37am_bPredictionEligibleboolC_BaseEntityMNotSaved
0x37bm_bApplyLayerMatchIDToModelboolC_BaseEntityMNotSaved
0x37cm_tokLayerMatchIDCUtlStringTokenC_BaseEntityMNotSaved
0x380m_nSubclassIDCUtlStringTokenC_BaseEntity
0x390m_nSimulationTickint32C_BaseEntityMNotSaved
0x394m_iCurrentThinkContextint32C_BaseEntityMNotSaved
0x398m_aThinkFunctionsCUtlVector< thinkfunc_t >C_BaseEntityMNotSaved
0x3b0m_bDisabledContextThinksboolC_BaseEntity
0x3b4m_flAnimTimefloat32C_BaseEntityMNotSaved
0x3b8m_flSimulationTimefloat32C_BaseEntityMNotSaved
0x3bcm_nSceneObjectOverrideFlagsuint8C_BaseEntity
0x3bdm_bHasSuccessfullyInterpolatedboolC_BaseEntityMNotSaved
0x3bem_bHasAddedVarsToInterpolationboolC_BaseEntityMNotSaved
0x3bfm_bRenderEvenWhenNotSuccessfullyInterpolatedboolC_BaseEntityMNotSaved
0x3c0m_nInterpolationLatchDirtyFlagsint32[2]C_BaseEntityMNotSaved
0x3c8m_ListEntryuint16[11]C_BaseEntityMNotSaved
0x3e0m_flCreateTimeGameTime_tC_BaseEntityMNotSaved
0x3e4m_EntClientFlagsuint16C_BaseEntityMNotSaved
0x3e6m_bClientSideRagdollboolC_BaseEntityMNotSaved
0x3e7m_iTeamNumuint8C_BaseEntityMNotSaved
0x3e8m_spawnflagsuint32C_BaseEntity
0x3ecm_nNextThinkTickGameTick_tC_BaseEntityMNotSaved
0x3f4m_fFlagsuint32C_BaseEntityMSaveBehavior
0x3f8m_vecAbsVelocityVectorC_BaseEntityMNotSaved
0x404m_vecServerVelocityCNetworkVelocityVectorC_BaseEntityMNotSaved
0x430m_vecVelocityCNetworkVelocityVectorC_BaseEntity
0x510m_vecBaseVelocityVectorC_BaseEntityMNotSaved
0x51cm_hEffectEntityCHandle< C_BaseEntity >C_BaseEntityMNotSaved
0x520m_hOwnerEntityCHandle< C_BaseEntity >C_BaseEntity
0x524m_MoveCollideMoveCollide_tC_BaseEntityMNotSaved
0x525m_MoveTypeMoveType_tC_BaseEntity
0x526m_nActualMoveTypeMoveType_tC_BaseEntity
0x528m_flWaterLevelfloat32C_BaseEntityMNotSaved
0x52cm_fEffectsuint32C_BaseEntityMNotSaved
0x530m_hGroundEntityCHandle< C_BaseEntity >C_BaseEntityMNotSaved
0x534m_nGroundBodyIndexint32C_BaseEntityMNotSaved
0x538m_flFrictionfloat32C_BaseEntityMNotSaved
0x53cm_flElasticityfloat32C_BaseEntityMNotSaved
0x540m_flGravityScalefloat32C_BaseEntityMNotSaved
0x544m_flTimeScalefloat32C_BaseEntityMNotSaved
0x548m_bAnimatedEveryTickboolC_BaseEntityMNotSaved
0x549m_bGravityDisabledboolC_BaseEntity
0x54cm_flNavIgnoreUntilTimeGameTime_tC_BaseEntityMNotSaved
0x550m_hThinkuint16C_BaseEntityMNotSaved
0x560m_fBBoxVisFlagsuint8C_BaseEntityMNotSaved
0x564m_flActualGravityScalefloat32C_BaseEntity
0x568m_bGravityActuallyDisabledboolC_BaseEntity
0x569m_bPredictableboolC_BaseEntityMNotSaved
0x56am_bRenderWithViewModelsboolC_BaseEntity
0x56cm_nFirstPredictableCommandint32C_BaseEntityMNotSaved
0x570m_nLastPredictableCommandint32C_BaseEntityMNotSaved
0x574m_hOldMoveParentCHandle< C_BaseEntity >C_BaseEntityMNotSaved
0x578m_ParticlesCParticlePropertyC_BaseEntityMNotSaved
0x5a8m_vecAngVelocityQAngleC_BaseEntity
0x5b4m_DataChangeEventRefint32C_BaseEntityMNotSaved
0x5b8m_dependenciesCUtlVector< CEntityHandle >C_BaseEntityMNotSaved
0x5d0m_nCreationTickint32C_BaseEntityMNotSaved
0x5e1m_bAnimTimeChangedboolC_BaseEntityMNotSaved
0x5e2m_bSimulationTimeChangedboolC_BaseEntityMNotSaved
0x5f0m_sUniqueHammerIDCUtlStringC_BaseEntityMNotSaved
0x5f8m_nBloodTypeBloodTypeC_BaseEntity
0x608m_CommandContextC_CommandContextCBasePlayerControllerMNotSaved
0x6b0m_nInButtonsWhichAreTogglesuint64CBasePlayerControllerMNotSaved
0x6b8m_nTickBaseuint32CBasePlayerControllerServer tick number at the time of the most-recent usercmd from this client. MNotSaved
0x6bcm_hPawnCHandle< C_BasePlayerPawn >CBasePlayerControllerCHandle to the base pawn currently controlled by this controller.
0x6c0m_bKnownTeamMismatchboolCBasePlayerController
0x6c4m_hPredictedPawnCHandle< C_BasePlayerPawn >CBasePlayerControllerMNotSaved
0x6c8m_nSplitScreenSlotCSplitScreenSlotCBasePlayerControllerMNotSaved
0x6ccm_hSplitOwnerCHandle< CBasePlayerController >CBasePlayerControllerMNotSaved
0x6d0m_hSplitScreenPlayersCUtlVector< CHandle< CBasePlayerController > >CBasePlayerControllerMNotSaved
0x6e8m_bIsHLTVboolCBasePlayerController
0x6ecm_iConnectedPlayerConnectedStateCBasePlayerControllerPlayerConnectedState enum – 0 = Disconnected, 1 = Connected, 2 = Connecting. MNotSaved
0x6f0m_iMostConnectedPlayerConnectedStateCBasePlayerControllerMNotSaved
0x6f4m_iszPlayerNamechar[128]CBasePlayerControllerDisplay name of the player, as reported by Steam (up to 128 bytes, UTF-8). MNotSaved
0x780m_steamIDuint64CBasePlayerController64-bit Steam account ID (SteamID64) of the connected client. MNotSaved
0x788m_bIsLocalPlayerControllerboolCBasePlayerControllerMNotSaved
0x789m_bNoClipEnabledboolCBasePlayerControllerTrue when sv_cheats noclip is active for this player.
0x78cm_iDesiredFOVuint32CBasePlayerControllerField-of-view override requested by the player (0 = use server default).
0x810m_pInGameMoneyServicesCCSPlayerController_InGameMoneyServices*
0x818m_pInventoryServicesCCSPlayerController_InventoryServices*
0x820m_pActionTrackingServicesCCSPlayerController_ActionTrackingServices*
0x828m_pDamageServicesCCSPlayerController_DamageServices*
0x830m_iPinguint32Player's current network round-trip latency, in milliseconds.
0x834m_bHasCommunicationAbuseMutebool
0x838m_uiCommunicationMuteFlagsuint32
0x840m_szCrosshairCodesCUtlSymbolLargeEncoded crosshair configuration string (same format as the cl_crosshair_reticle_* convars share-code).
0x848m_iPendingTeamNumuint8Team number the player will be moved to at the next team-change opportunity.
0x84cm_flForceTeamTimeGameTime_tGameTime after which team-forcing is no longer applied.
0x850m_iCompTeammateColorint32
0x854m_bEverPlayedOnTeamboolTrue once this player has played at least one round as a non-spectator.
0x858m_flPreviousForceJoinTeamTimeGameTime_t
0x860m_szClanCUtlSymbolLargePlayer's clan tag string, displayed next to the name in the scoreboard.
0x868m_sSanitizedPlayerNameCUtlString
0x870m_iCoachingTeamint32Team number this player is coaching (0 if not coaching).
0x878m_nPlayerDominateduint6464-bit bitmask; bit N set means this player is dominating player-slot N.
0x880m_nPlayerDominatingMeuint6464-bit mask of player-slot bits that are currently dominating this player.
0x888m_iCompetitiveRankingint32Player's current Premier/Competitive numeric skill rating.
0x88cm_iCompetitiveWinsint32Total number of ranked wins accumulated on this account.
0x890m_iCompetitiveRankTypeint8Rank type identifier (e.g. 0 = unranked, 11 = Premier, 12 = Competitive).
0x894m_iCompetitiveRankingPredicted_Winint32Predicted rating delta if the match ends in a win for this player.
0x898m_iCompetitiveRankingPredicted_Lossint32Predicted rating delta if the match ends in a loss.
0x89cm_iCompetitiveRankingPredicted_Tieint32Predicted rating delta if the match ends in a tie/draw.
0x8a0m_nEndMatchNextMapVoteint32Index of the map this player has voted for in the end-of-match map vote.
0x8a4m_unActiveQuestIduint16Active operation mission ID for this player (0 if none active).
0x8a8m_rtActiveMissionPerioduint32
0x8acm_nQuestProgressReasonQuestProgress::ReasonReason code for the last quest-progress update sent to this player.
0x8b0m_unPlayerTvControlFlagsuint32
0x8e0m_iDraftIndexint32
0x8e4m_msQueuedModeDisconnectionTimestampuint32
0x8e8m_uiAbandonRecordedReasonuint32
0x8ecm_eNetworkDisconnectionReasonuint32
0x8f0m_bCannotBeKickedbool
0x8f1m_bEverFullyConnectedbool
0x8f2m_bAbandonAllowsSurrenderbool
0x8f3m_bAbandonOffersInstantSurrenderbool
0x8f4m_bDisconnection1MinWarningPrintedbool
0x8f5m_bScoreReportedbool
0x8f8m_nDisconnectionTickint32Server tick at which this player disconnected (used for reconnect grace period).
0x908m_bControllingBotboolTrue when this human controller has taken over a bot pawn.
0x909m_bHasControlledBotThisRoundboolTrue if the player took over a bot at any point this round.
0x90am_bHasBeenControlledByPlayerThisRoundbool
0x90cm_nBotsControlledThisRoundint32
0x910m_bCanControlObservedBotboolTrue when the player is allowed to take control of the bot they are spectating.
0x914m_hPlayerPawnCHandle< C_CSPlayerPawn >CHandle pointing to the player's active CCSPlayerPawn.
0x918m_hObserverPawnCHandle< C_CSObserverPawn >CHandle to the CCSObserverPawn when the player is spectating.
0x91cm_bPawnIsAliveboolTrue while the player's pawn is alive and spawned.
0x920m_iPawnHealthuint32Current health of the pawn, networked to teammates and spectators.
0x924m_iPawnArmorint32Current armor value of the pawn (0–100 for vest, 100+ for helmet).
0x928m_bPawnHasDefuserboolTrue when the pawn is carrying a defuse kit.
0x929m_bPawnHasHelmetboolTrue when the pawn has a full helmet (takes head-shot armor penalty into account).
0x92am_nPawnCharacterDefIndexuint16Item definition index of the character/agent skin equipped on the pawn.
0x92cm_iPawnLifetimeStartint32Server tick on which the current pawn was spawned.
0x930m_iPawnLifetimeEndint32Server tick on which the current pawn died (0 while still alive).
0x934m_iPawnBotDifficultyint32
0x938m_hOriginalControllerOfCurrentPawnCHandle< CCSPlayerController >When a human takes over a bot, this holds a handle back to the original bot controller so the pawn can be returned after the human disconnects.
0x93cm_iScoreint32Lifetime score for this connection (frags minus team-kills, etc.).
0x940m_recentKillQueueuint8[8]Circular buffer of the 8 most-recent enemy kills this round (pawn entity indices).
0x948m_nFirstKilluint8Index within m_recentKillQueue of the oldest valid entry.
0x949m_nKillCountuint8Number of valid entries currently in m_recentKillQueue.
0x94am_bMvpNoMusicboolTrue when the MVP jingle should be suppressed for this player's MVP award.
0x94cm_eMvpReasonint32Reason for the most recent MVP award (enum: 1 = most kills, 2 = bomb defuse, 3 = bomb plant, etc.).
0x950m_iMusicKitIDint32Item definition index of the music kit active for this player.
0x954m_iMusicKitMVPsint32Number of MVPs awarded while this music kit has been equipped (affects music kit stat tracking).
0x958m_iMVPsint32Number of MVP stars the player has earned in the current match.
0x95cm_bIsPlayerNameDirtybool
0x95dm_bFireBulletsSeedSynchronizedboolTrue once the client's bullet-fire PRNG seed has been synchronised with the server.