Go Get
go get -u github.com/markus-wa/demoinfocs-golang/v5/pkg/demoinfocs@v5.3.0
The v6 line is in release candidates; v5 stays the stable line for now.
New Features
- Parse & decrypt encrypted net-messages (e.g. chat messages in Valve matchmaking demos) by @blinkzz in #696 and @akiver in #697
CSVCMsg_EncryptedDatais now a parseable net-message. SetParserConfig.NetMessageDecryptionKeyand the inner message is decrypted and dispatched as if it had been received in plain textdemoinfocs.MatchInfoDecryptionKey(b)extracts the key from thematch730_*.dem.infofile that ships next to Valve matchmaking demos- Two new warning types when the key is missing or a message can't be decrypted:
events.WarnTypeMissingNetMessageDecryptionKey,events.WarnTypeCantReadEncryptedNetMessage
Fixes
- CRASH FIX: demos recorded since the CS2 update of 2026-11-11 parse again by @markus-wa in #767 (#763)
- The update added
uint8fields with thefixed8encoder toCCSPlayerController(m_recentKillQueue,m_nFirstKill,m_nKillCount). They were read as varints, so any value >= 128 consumed an extra byte and desynced the rest of the packet; parsing then died withfatal error: out of memoryinEntity.readFields(or a decode error) - Fields with a
fixed8/fixed16/fixed32encoder are now read as N raw bits, keeping the Go type the base type's varint decoder returns, so property getters such asRankType()don't change type. Backport of #764 and #765 - Demos recorded before the update have no
fixedNfields, so their output doesn't change
- The update added
Equipment.AmmoInMagazine()no longer subtracts them_iClip1offset twice by @markus-wa in #719- On CS2 demos it returned one round too few for every weapon, and an empty magazine underflowed to
4294967295 - ⚠️ Behaviour change: it now returns one more than before. Callers that added
+1downstream must drop it
- On CS2 demos it returned one round too few for every weapon, and an empty magazine underflowed to
GameRules.RoundTime()uses the CS2 property name by @markus-wa in #727- It looked up the CS:GO property
cs_gamerules_data.m_iRoundTime, so it always returnedErrFailedToRetrieveGameRuleon v5 (which parses CS2 demos only). It now returns the round time (e.g.1m55s) - ⚠️ Behaviour change: code that relied on the error to fall back to a default now gets the real value
- It looked up the CS:GO property
Changes
- chore: update protobuf messages
- CI: analyze Go only in CodeQL (@markus-wa in #769), lint v5 changes against the PR base branch (#698), follow the
master→mainrename (#722)
New Contributors
Full Changelog: v5.2.0...v5.3.0