Skip to content

CCSGameRules

Singleton entity that holds all CS2 match-level state: phase, round timer, team time-outs, map layout flags, match stats, and end-of-round information. Accessible via the CCSGameRulesProxy entity on the client.

Many fields here are the ground truth for demo-parsing tools (e.g. demoinfocs-golang). Round phase transitions are driven by m_gamePhase and m_bFreezePeriod / m_bWarmupPeriod.

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

Kind: classSize: 70728 bytes (0x11448)Alignment: unspecified (0xff sentinel)Module: serverBinary: server.dll

Relationships

Inherits from: CTeamplayRules

Client counterpart: C_CSGameRules

Used by (1) as a field type

Inheritance tree
Relationship diagram (8 edges)
classDiagram
    CGameRules <|-- CMultiplayRules
    CMultiplayRules <|-- CTeamplayRules
    CTeamplayRules <|-- CCSGameRules
    CCSGameRules *-- GameTime_t
    CCSGameRules --> SpawnPoint
    CCSGameRules --> CCSGameModeRules
    CCSGameRules --> CBaseEntity
    CCSGameRules *-- CRetakeGameRules
Inheritance chain, direct subclasses (up to 20) and a few composition edges

Memory layout

197 fields, 189 declared here and 8 inherited. Offsets are absolute from the object base on windows-x86_64.

CGameRulesCCSGameRules

OffsetFieldTypeFromAnnotations
0x8__m_pChainEntityCNetworkVarChainerCGameRulesMNotSaved
0x30m_szQuestNamechar[128]CGameRules
0xb0m_nQuestPhaseint32CGameRules
0xb4m_nLastMatchTimeuint32CGameRules
0xb8m_nLastMatchTime_MatchID64uint64CGameRules
0xc0m_nTotalPausedTicksint32CGameRules
0xc4m_nPauseStartTickint32CGameRules
0xc8m_bGamePausedboolCGameRules
0xd8m_bFreezePeriodboolTrue during the buy phase (freeze time) at the start of each round.
0xd9m_bWarmupPeriodboolTrue while the pre-match warmup is active.
0xdcm_fWarmupPeriodEndGameTime_tGameTime at which the warmup period ends and the first round begins.
0xe0m_fWarmupPeriodStartGameTime_tGameTime at which the current warmup period started.
0xe4m_bTerroristTimeOutActiveboolTrue while the Terrorist team's tactical time-out is in progress.
0xe5m_bCTTimeOutActiveboolTrue while the Counter-Terrorist team's tactical time-out is in progress.
0xe8m_flTerroristTimeOutRemainingfloat32Seconds remaining in the active Terrorist time-out.
0xecm_flCTTimeOutRemainingfloat32Seconds remaining in the active CT time-out.
0xf0m_nTerroristTimeOutsint32Number of tactical time-outs the T-side has used so far in the match.
0xf4m_nCTTimeOutsint32Number of tactical time-outs the CT-side has used so far in the match.
0xf8m_bTechnicalTimeOutboolTrue during a technical pause (admin-issued, not team time-out).
0xf9m_bMatchWaitingForResumeboolTrue when the match is paused and waiting for both teams to confirm resumption.
0xfcm_iFreezeTimeint32Freeze-time duration in seconds (mirrors mp_freezetime convar value).
0x100m_iRoundTimeint32Round time limit in seconds (mirrors mp_roundtime_* convar value).
0x104m_fMatchStartTimefloat32Unix-epoch float of when the match (not the round) began.
0x108m_fRoundStartTimeGameTime_tGameTime at which the current round's freeze time ended and play started.
0x10cm_flRestartRoundTimeGameTime_tGameTime at which the current round will be force-restarted by the server (0 = no pending restart).
0x110m_bGameRestartboolTrue in the brief window between a restart being triggered and the new round spawning.
0x114m_flGameStartTimefloat32GameTime at which the first live round of the match started (after all warmup/knife rounds).
0x118m_timeUntilNextPhaseStartsfloat32Countdown in seconds until the next phase (round, half, overtime) begins; drives the on-screen timer.
0x11cm_gamePhaseint32Game-phase enum: 1 = First Half, 2 = Second Half, 3 = Pre-overtime, 4 = Overtime, 5 = Game Over.
0x120m_totalRoundsPlayedint32Total number of rounds completed since the match started (all phases combined).
0x124m_nRoundsPlayedThisPhaseint32Number of rounds played in the current phase (half/overtime period).
0x128m_nOvertimePlayingint32Number of overtime periods played so far (0 = regulation).
0x12cm_iHostagesRemainingint32Number of hostages that have not yet been rescued or killed.
0x130m_bAnyHostageReachedboolTrue once any hostage has reached the rescue zone this round.
0x131m_bMapHasBombTargetboolTrue when the map has at least one bomb-plant zone (bombsite entity).
0x132m_bMapHasRescueZoneboolTrue when the map has at least one hostage rescue zone.
0x133m_bMapHasBuyZoneboolTrue when the map has at least one buy zone.
0x134m_bIsQueuedMatchmakingboolTrue when the server is running a matchmaking (Valve-hosted) game rather than a community server.
0x138m_nQueuedMatchmakingModeint32Matchmaking mode identifier (0 = casual, 1 = competitive, etc.).
0x13cm_bIsValveDSboolTrue when the server is an official Valve dedicated server.
0x13dm_bLogoMapboolTrue when the server is running a workshop or demo map that does not count for match records.
0x13em_bPlayAllStepSoundsOnServerbool
0x140m_iSpectatorSlotCountint32Number of spectator slots available on this server.
0x144m_MatchDeviceint32Platform/device identifier for the match (used by Valve matchmaking for stats reporting).
0x148m_bHasMatchStartedboolTrue from the moment the first live round begins; remains true until the match ends.
0x14cm_nNextMapInMapgroupint32Index within the server's map-group of the map that will be played next.
0x150m_szTournamentEventNamechar[512]Display name of the tournament/event shown in the HUD scoreboard (up to 512 bytes).
0x350m_szTournamentEventStagechar[512]Stage label for the tournament event (e.g. 'Grand Final', 'Quarterfinal').
0x550m_szMatchStatTxtchar[512]Match-stats summary text displayed in the scoreboard (tournament use).
0x750m_szTournamentPredictionsTxtchar[512]
0x950m_nTournamentPredictionsPctint32
0x954m_flCMMItemDropRevealStartTimeGameTime_tGameTime at which the post-match item-drop reveal animation begins.
0x958m_flCMMItemDropRevealEndTimeGameTime_tGameTime at which the post-match item-drop reveal animation ends.
0x95cm_bIsDroppingItemsboolTrue while the post-match item-drop animation is playing.
0x95dm_bIsQuestEligibleboolTrue when the current match is eligible for operation mission progress.
0x95em_bIsHltvActiveboolTrue when at least one GOTV/HLTV spectator slot is connected.
0x95fm_bBombPlantedboolTrue while the planted bomb entity is active and ticking.
0x960m_arrProhibitedItemIndicesuint16[100]Array of up to 100 item-definition indices that are prohibited from being used in this match (e.g. tournament bans).
0xa28m_arrTournamentActiveCasterAccountsuint32[4]
0xa38m_numBestOfMapsint32Best-of-N series length configured for this match (e.g. 1, 3, 5).
0xa3cm_nHalloweenMaskListSeedint32
0xa40m_bBombDroppedboolTrue while the bomb (C4) is lying on the ground, not carried by any player.
0xa44m_iRoundWinStatusint32Which team won the most-recently completed round (0 = not over, 2 = Terrorist win, 3 = CT win).
0xa48m_eRoundWinReasonint32RoundWinReason_t enum: 1 = target bombed, 7 = bomb defused, 8 = all T killed, 9 = hostage rescued, etc.
0xa4cm_bTCantBuyboolTrue when the Terrorist team is currently locked out of purchasing weapons.
0xa4dm_bCTCantBuyboolTrue when the Counter-Terrorist team is currently locked out of purchasing weapons.
0xa50m_iMatchStats_RoundResultsint32[30]Array of 30 round-result codes (one per round slot) used to fill the scoreboard half-time panel.
0xac8m_iMatchStats_PlayersAlive_CTint32[30]Array of 30 values – number of CT players alive at the end of each round.
0xb40m_iMatchStats_PlayersAlive_Tint32[30]Array of 30 values – number of T players alive at the end of each round.
0xbb8m_TeamRespawnWaveTimesfloat32[32]
0xc38m_flNextRespawnWaveGameTime_t[32]
0xcb8m_vMinimapMinsVectorWSWorld-space minimum corner of the minimap bounding box.
0xcc4m_vMinimapMaxsVectorWSWorld-space maximum corner of the minimap bounding box.
0xcd0m_MinimapVerticalSectionHeightsfloat32[8]Array of 8 height values dividing the map into vertical sections for the radar's floor-switching feature.
0xcf0m_ullLocalMatchIDuint64
0xcf8m_nEndMatchMapGroupVoteTypesint32[10]Array of 10 vote-type codes for the end-of-match map vote options.
0xd20m_nEndMatchMapGroupVoteOptionsint32[10]Array of 10 map-group option indices corresponding to the vote types.
0xd48m_nEndMatchMapVoteWinnerint32Index of the winning map-vote option (-1 while voting is in progress).
0xd4cm_iNumConsecutiveCTLosesint32Number of consecutive rounds the CT side has lost; drives the loss-bonus economy.
0xd50m_iNumConsecutiveTerroristLosesint32Number of consecutive rounds the T side has lost; drives the loss-bonus economy.
0xd70m_bHasHostageBeenTouchedbool
0xd74m_flIntermissionStartTimeGameTime_t
0xd78m_flIntermissionEndTimeGameTime_t
0xd7cm_bLevelInitializedbool
0xd80m_iTotalRoundsPlayedint32
0xd84m_iUnBalancedRoundsint32
0xd88m_endMatchOnRoundResetbool
0xd89m_endMatchOnThinkbool
0xd8cm_iNumTerroristint32
0xd90m_iNumCTint32
0xd94m_iNumSpawnableTerroristint32
0xd98m_iNumSpawnableCTint32
0xda0m_arrSelectedHostageSpawnIndicesCUtlVector< int32 >
0xdb8m_nSpawnPointsRandomSeedint32
0xdbcm_bFirstConnectedbool
0xdbdm_bCompleteResetbool
0xdbem_bPickNewTeamsOnResetbool
0xdbfm_bScrambleTeamsOnRestartbool
0xdc0m_bSwapTeamsOnRestartbool
0xdc8m_nEndMatchTiedVotesCUtlVector< int32 >
0xde4m_bNeedToAskPlayersForContinueVotebool
0xde8m_numQueuedMatchmakingAccountsuint32
0xdecm_fAvgPlayerRankfloat32
0xdf0m_pQueuedMatchmakingReservationStringchar*
0xdf8m_numTotalTournamentDropsuint32
0xdfcm_numSpectatorsCountMaxuint32
0xe00m_numSpectatorsCountMaxTVuint32
0xe04m_numSpectatorsCountMaxLnkuint32
0xe10m_nCTsAliveAtFreezetimeEndint32
0xe14m_nTerroristsAliveAtFreezetimeEndint32
0xe18m_bForceTeamChangeSilentbool
0xe19m_bLoadingRoundBackupDatabool
0xe50m_nMatchInfoShowTypeint32
0xe54m_flMatchInfoDecidedTimefloat32
0xe70mTeamDMLastWinningTeamNumberint32
0xe74mTeamDMLastThinkTimefloat32
0xe78m_flTeamDMLastAnnouncementTimefloat32
0xe7cm_iAccountTerroristint32
0xe80m_iAccountCTint32
0xe84m_iSpawnPointCount_Terroristint32
0xe88m_iSpawnPointCount_CTint32
0xe8cm_iMaxNumTerroristsint32
0xe90m_iMaxNumCTsint32
0xe94m_iLoserBonusMostRecentTeamint32
0xe98m_tmNextPeriodicThinkfloat32
0xe9cm_bVoiceWonMatchBragFiredbool
0xea0m_fWarmupNextChatNoticeTimefloat32
0xea8m_iHostagesRescuedint32
0xeacm_iHostagesTouchedint32
0xeb0m_flNextHostageAnnouncementfloat32
0xeb4m_bNoTerroristsKilledbool
0xeb5m_bNoCTsKilledbool
0xeb6m_bNoEnemiesKilledbool
0xeb7m_bCanDonateWeaponsbool
0xebcm_firstKillTimefloat32
0xec4m_firstBloodTimefloat32
0xee0m_hostageWasInjuredbool
0xee1m_hostageWasKilledbool
0xef0m_bVoteCalledbool
0xef1m_bServerVoteOnResetbool
0xef4m_flVoteCheckThrottlefloat32
0xef8m_bBuyTimeEndedbool
0xefcm_nLastFreezeEndBeepint32
0xf00m_bTargetBombedbool
0xf01m_bBombDefusedbool
0xf02m_bMapHasBombZonebool
0xf50m_vecMainCTSpawnPosVectorWS
0xf60m_CTSpawnPointsMasterListCUtlVector< CHandle< SpawnPoint > >
0xf78m_TerroristSpawnPointsMasterListCUtlVector< CHandle< SpawnPoint > >
0xf90m_bRespawningAllRespawnablePlayersbool
0xf94m_iNextCTSpawnPointint32
0xf98m_flCTSpawnPointUsedTimefloat32
0xf9cm_iNextTerroristSpawnPointint32
0xfa0m_flTerroristSpawnPointUsedTimefloat32
0xfa8m_CTSpawnPointsCUtlVector< CHandle< SpawnPoint > >
0xfc0m_TerroristSpawnPointsCUtlVector< CHandle< SpawnPoint > >
0xfd8m_bIsUnreservedGameServerbool
0xfdcm_fAutobalanceDisplayTimefloat32
0x1018m_bAllowWeaponSwitchbool
0x1019m_bRoundTimeWarningTriggeredbool
0x101cm_phaseChangeAnnouncementTimeGameTime_t
0x1020m_fNextUpdateTeamClanNamesTimefloat32
0x1024m_flLastThinkTimeGameTime_t
0x1028m_fAccumulatedRoundOffDamagefloat32
0x102cm_nShorthandedBonusLastEvalRoundint32
0x1078m_nMatchAbortedEarlyReasonint32Reason code for an early match abort (0 = not aborted, non-zero codes map to abandonment reasons).
0x107cm_bHasTriggeredRoundStartMusicbool
0x107dm_bSwitchingTeamsAtRoundResetbool
0x1098m_pGameModeRulesCCSGameModeRules*Polymorphic pointer to CCSGameModeRules (sub-classed for Arms Race, Deathmatch, etc.).
0x10a0m_BtGlobalBlackboardKeyValues3
0x1138m_hPlayerResourceCHandle< CBaseEntity >
0x1140m_RetakeRulesCRetakeGameRulesCRetakeGameRules struct holding all Retakes-mode specific state.
0x1330m_arrTeamUniqueKillWeaponsMatchCUtlVector< int32 >[4]
0x1390m_bTeamLastKillUsedUniqueWeaponMatchbool[4]
0x13b8m_nMatchEndCountuint8Incremented each time a match-end event fires; clients trigger their match-end UI on the change.
0x13bcm_nTTeamIntroVariantint32Variant index for the Terrorist team intro cinematic sequence.
0x13c0m_nCTTeamIntroVariantint32Variant index for the CT team intro cinematic sequence.
0x13c4m_bTeamIntroPeriodboolTrue while the pre-round team-intro cinematic is playing.
0x13c8m_fTeamIntroPeriodEndGameTime_t
0x13ccm_bPlayedTeamIntroVObool
0x13d0m_iRoundEndWinnerTeamint32Team number of the team that won the most-recently ended round.
0x13d4m_eRoundEndReasonint32RoundEndReason_t enum describing how the round ended (bomb exploded, time ran out, all enemies eliminated, etc.).
0x13d8m_bRoundEndShowTimerDefendboolTrue when the end-of-round panel should show a 'defend' timer countdown.
0x13dcm_iRoundEndTimerTimeint32Remaining time in seconds shown in the round-end countdown panel.
0x13e0m_sRoundEndFunFactTokenCUtlStringLocalization token for the fun-fact string shown in the round-end panel.
0x13e8m_iRoundEndFunFactPlayerSlotCPlayerSlotPlayer slot of the player featured in the fun-fact message.
0x13ecm_iRoundEndFunFactData1int32First numeric argument substituted into the fun-fact localization string.
0x13f0m_iRoundEndFunFactData2int32Second numeric argument substituted into the fun-fact localization string.
0x13f4m_iRoundEndFunFactData3int32Third numeric argument substituted into the fun-fact localization string.
0x13f8m_sRoundEndMessageCUtlStringCustom message string displayed in the round-end overlay (tournament use).
0x1400m_iRoundEndPlayerCountint32
0x1404m_bRoundEndNoMusicboolTrue when the end-of-round music stinger should be suppressed.
0x1408m_iRoundEndLegacyint32
0x140cm_nRoundEndCountuint8Incremented each time a round-end event fires; clients trigger round-end UI on the change.
0x1410m_iRoundStartRoundNumberint32The round number associated with the most-recent round-start event.
0x1414m_nRoundStartCountuint8Incremented each time a round-start event fires; clients initialize per-round state on the change.
0x5420m_flLastPerfSampleTimefloat64