- ✨ #373: Added support for streaming GOTV broadcasts over HTTP
- Upgrade packages
- 🐛 #364: Fixed incorrect C4/kevlar/assault suit equipment ID in
DemoFile#itemPurchase
event
- 🐛 #361: Fixed stream ending mid-parse when reading from a Gunzip stream
- ✨ Added
DemoFile#warning
event- Emitted when a non-fatal error occurs during parsing, e.g. when an encrypted message cannot be read
- ✨ The
dumpfile
example now tries to read the decryption key from a.dem.info
file that lives alongside the.dem
file - 🐛 15-byte encryption keys are now correctly padded to 16 bytes
- ✨ Added
DemoFile#molotovDetonate
event - ✨ Added
DemoFile#grenadeTrajectory
event - ✨ Added
DemoFile#itemPurchase
event - 🐛 Fixed some entities not having the right class (e.g. incendiary grenades).
This could manifest asPlayer#weapons
not containing all items owned by the player. - ⚡
DemoFile#currentTick
is now-1
before parsing begins
- 🐛 Fixed
EntityHandle#isValid
always returningtrue
- ✨ Added
paintKit
annotation toplayer_death
game event - 🐛
Entities#getByUserId
et al returning invalid data when passed IDs of disconnected players - 🐛
Entities#players
sometimes returning players that are not fully connected - 🐛
Player#position
returning the incorrect position for non-local players in POV demos - ✨ Added
Player#isRecordingDemo
- true if this player is recording the demo from their POV - ✨ Added
oldUserData
to the string table update event - ⚡ Deprecated
DemoFile#playerSlot
- splitscreen slot is unused for PC games
- 🐛 Fixed reliable temporary entities not triggering the
tempents
event
- ✨ #19: Support streaming demos
- ✨ Added
Entities#getByAccountId
to get player entities by Steam account ID - ✨ Added
Entities#getBySteam64Id
to get player entities by 64-bit Steam ID - ✨ Added more annotations to game events:
item_equip
: addeditemDefinition: IItemDefinition
item_pickup
: addeditemDefinition: IItemDefinition
item_remove
: addeditemDefinition: IItemDefinition
items_gifted
: addedentity: Player
other_death
: addeditemDefinition: IItemDefinition | null
,originalOwner: Player | null
player_death
: addeditemDefinition: IItemDefinition | null
,originalOwner: Player | null
tournament_reward
: addeditemDefinition: IItemDefinition
,entity: Player
- ⚡ Added
Networkable#toJSON
that serialises the entity as a string. Example:#123(CCSPlayer)
Prior to this change, serialisingNetworkable
objects would result in a TypeError due to a circular reference.
- ⚡ Incorporate latest CSGO protobufs
- ⚡ Improved performance of
Entities#getByUserId
- ✨ Added various annotations to game events.
This will reduce friction when converting user IDs/entity indexes to actual entities.bomb_begindefuse
: addedplayer: Player
bomb_beginplant
: addedplayer: Player
bomb_defused
: addedplayer: Player
bomb_dropped
: addedplayer: Player
,entity: BaseEntity<CC4>
bomb_exploded
: addedplayer: Player
bomb_pickup
: addedplayer: Player
bomb_planted
: addedplayer: Player
bot_takeover
: addedplayer: Player
,bot: Player
cs_win_panel_round
: addedplayer: Player
decoy_detonate
: addedplayer: Player
,entity: BaseEntity<CDecoyProjectile>
decoy_started
: addedplayer: Player
,entity: BaseEntity<CDecoyProjectile>
defuser_dropped
: addedentity: BaseEntity
defuser_pickup
: addedentity: BaseEntity
,player: Player
flashbang_detonate
: addedplayer: Player
,entity: BaseEntity<CBaseCSGrenadeProjectile>
hostage_hurt
: addedplayer: Player
,entity: BaseEntity<CHostage>
hostage_killed
: addedplayer: Player
,entity: BaseEntity<CHostage>
hostage_rescued
: addedplayer: Player
,entity: BaseEntity<CHostage>
inferno_expire
: addedentity: BaseEntity<CInferno>
inferno_startburn
: addedentity: BaseEntity<CInferno>
item_equip
: addedplayer: Player
item_pickup
: addedplayer: Player
item_remove
: addedplayer: Player
other_death
: addedvictim: BaseEntity
,attackerEntity: Player
player_blind
: addedplayer: Player
,attackerEntity: Player
,entity: BaseEntity<CBaseCSGrenadeProjectile>
player_changename
: addedplayer: Player
player_chat
: addedplayer: Player
player_connect_full
: addedplayer: Player
player_death
: addedplayer: Player
,attackerEntity: Player
,assisterEntity: BaseEntity
player_disconnect
: addedplayer: Player
player_falldamage
: addedplayer: Player
player_footstep
: addedplayer: Player
player_hurt
: addedplayer: Player
,attackerEntity: Player
player_info
: addedplayer: Player
player_jump
: addedplayer: Player
player_spawn
: addedplayer: Player
player_team
: addedplayer: Player
round_mvp
: addedplayer: Player
smokegrenade_detonate
: addedplayer: Player
,entity: BaseEntity<CSmokeGrenadeProjectile>
smokegrenade_expired
: addedplayer: Player
,entity: BaseEntity<CSmokeGrenadeProjectile>
weapon_fire
: addedplayer: Player
weapon_fire_on_empty
: addedplayer: Player
weapon_outofammo
: addedplayer: Player
weapon_reload
: addedplayer: Player
weapon_zoom
: addedplayer: Player
- ✨ #322: Support encrypted data (e.g. chat from public matchmaking)
- ⚡ Incorporate latest CSGO protobufs and item data
- ⚡ #295: Emit
Entities#create
andEntities#postcreate
at the same time. (Entities#postcreate
is now deprecated.)
- ⚡ Incorporate latest CSGO protobufs
- ✨ Add
Weapon#quality
to represent an item's quality - ✨ Add
cancel
method toDemoFile#start
event to cancel any further parsing.
- ✨ #164: Add CUserCmd parsing on in-eye/perspective demos
- ✨ Updated protobuf definitions
- ⚡ Setup protobufs to automatically regenerate every week
- ⚡ Migrated to use ts-proto
- ✨ #72: Added full support for in-eye/perspective demos
- ✨ Added
Networkable#isDormant
:true
if entity is outside of PVS (and so is not updated) - 🐛 Fixed unnecessary entity deletion/recreation events
- ⚡
Entities#change
now batches all changes for a given entity into a single event - ⚡
Entities#entities
is now aMap<entity index, Networkable>
instead of a sparse array - ⚡
Entities#instanceBaselines
renamed toEntities#staticBaselines
- ⚡ Removed dependency on
lodash
- 🐛 #154: Fixed TypeScript compilation errors
- ⚡ Updated type definitions
- ✨ #187: Add
Player#crosshairInfo
for grabbing player crosshair settings - ⚡ Only generate type definitions for events that are logged to GOTV demos
- ⚡ Upgrade to TypeScript 3.9.7
- ⚡ Setup continuous delivery pipeline
- 🐛 #172: Don't report
RangeError
exceptions as errors when demo file has not been recorded completely
- ⚡ #170: Cache
Player#steamId64
result (thanks @thecatontheflat)
- ⚡ #156: Added
error
event to demofile when parsing fails - ⚡ #156: Don't emit
tickend
on error
- ✨ #152: Updated event definitions
- ✨ #148: Added
Player#isControllingBot
(thanks @akiver) - 🐛 #147: Fix
Team#members
returning null players (thanks @akiver) - 🐛 #154: Fix
EventEmitter
TypeScript compilation error
- ✨ Update item definitions
- ✨ #128: Add
Weapon#clipAmmo
,Weapon#reserveAmmo
andWeapon#ownerAmmo
- 🐛 #65: Fixed tick/time calculations on demos with incomplete headers
- 🐛 Fix .js protobuf files not being compiled
- ✨ #115: TypeScript definitions are now available (thanks to @akiver)
- ✨ #122: Update item definitions
- ⚡ #112: Removed reference to
ts-assert-exists
- ⚡ #112: Moved some package dependencies to be devDependencies (thanks @razor-x)
- 🐛 #106: Fixed Cannot read property 'm_iPrimaryAmmoType' of undefined
- ⚡ Add source maps to dist
.js
files
- 🐛 #101: Fixed player resource indexing one-off error
- 🐛 #98: Fixed Steam 64 IDs being invalid
- ⚡ Removed
process.emitWarning
on parsing error. UseIDemoEndEvent#error
instead. - 🐛 #95: Fixed array decoding bug which made demos made after the Danger Zone update unparseable (thanks @JeffreyLimbacher)
- ✨ #56: Ported to TypeScript!
- ✨ Added
Networkable
type, which is the new base class of all entities - ✨
BaseEntity
is now only the base class of renderable entities - ⚡ Removed
BaseEntity#velocity
- ⚡ User messages are now listened without the 'CS_UM_' prefix
- ⚡ String tables are now no longer initialised to their maximum size, instead they grow as needed
- 🐛 #86: Fixed
Cannot read property 'messageToObject' of undefined
on some game events - 🐛 Fixed error when trying to parse svc_EntityMsg messages
- 🐛 Fixed #80, #78: Resource properties returning
undefined
- ✨ Added
DemoFile#tickRate
- ✨ Added support for MP5SD (thanks @thorebear)
- ✨ Added
BaseEntity#handle
- ✨ Added
BaseEntity#modelName
- Name of the model that should be rendered for this entity. (e.g. 'models/Weapons/w_eq_smokegrenade_thrown.mdl')
- ✨ Added
BaseEntity#velocity
,BaseEntity#speed
. - ✨ Improved
dumpfile.js
example to be more through. - ⚡ #69:
Player#allSpotters
andPlayer#allSpotted
now only returns alive players.
- ⚡ #62: Fix entity position calculation. Use cell coordinates to determine entity positions.
- ⚡ #58: Entities are now removed at
tickend
, after events are fired. This means the grenade entity can be accessed in flashbang_detonate and decoy_detonate.
- ✨ Added
Entities#weapons
(thanks @thorebear)
- ✨ Added
Player#matchStats
to represent player performance on a per-round basis
- ✨ #11: Fixed malformed demos resulting in an exception. Added
error
property to theDemoFile#end
event - ⚡ #52:
GameRules#roundNumber
has been renamed toGameRules#roundsPlayed
- the old name is available for backwards compatibility
- 🐛 #43: Fixed parsing of string tables updates for tables with fixed userdata sizes
- ✨ Added
Player#cashSpendTotal
andPlayer#cashSpendThisRound
- 🐛 #31: Fixed
DemoFile#currentTime
returning the wrong game time
- 🐛 #11: Fixed parse error when a 'stop' command is missing from the demo file
- ✨ Added
Weapon
entity class to represent in-game items (thanks @pedrofornaza)
- ✨ Added
Player#score
,Player#mvps
andPlayer#clanTag
(thanks @derpalmer)
- 🐛 Fix exception when calling
DemoFile#cancel
(thanks @derpalmer)
- 🐛 Revert accidental bit-buffer upgrade
- ✨ Added
Player#steam64Id
for easy access to Steam64 ID (thanks @derpalmer)
- 🐛 Fixed exception in
Player#isAlive
Major update
- Added new
Player
,Team
andGameRules
entities - Added
DemoFile#conVars
for accessing console variables and listening for changes - Updated
dumpfile.js
example to be more representative of real-world usage
- 🐛 Fixed
Entity#getProp
exception when a prop is updated that is not part of the entity baseline
Major update
- The library now support Browserify and the compiled bundle can be included in web browsers
- Added DemoFile#progress event that indicates what percentage of the demo file has been parsed
- Removed dependency on the
pace
library
- ✨ Added entities
isHandleSet
to determine if a networked entity handle is set (the game uses(1 << 21) - 1
to mean empty)
- ✨ Added entities
getByHandle
to find an entity from a given networked entity handle (e.g., from m_hMyWeapons)
- ✨ Added entities
baselineupdate
event which is fired whenever theinstancebaseline
string table is updated with new properties.
- ✨ The
dem_StringTables
command, which holds additional string table data on client-side recorded demos, is now parsed - ⚡ String table
postcreate
is now fired aftersvc_CreateStringTable
anddem_StringTables
are parsed
- ✨ Added entities
datatablesready
event which is fired when data tables have been parsed.
- ✨ Added entity
postcreate
event which is fired after an entity has been created and all of its properties parsed.
- ✨ Added string table
postcreate
event which is fired after a new stringtable's entries have been populated
- 🐛 Fixed retrieving properties on entities whose server class has no instance baseline
- ✨ Instance baselines are now parsed and used by
Entity#getProp
- 🐛 Fixed stringtable updates affecting all entries in the table
- 📇 Removed
node-protobuf
un-used dependency
- ⚡ Each tick is now parsed on a separate process tick.
- ⚡ Game event callbacks are now fired at the end of the tick.
- 🐛 Fixed Vector props decoding to
undefined
.
- 🎉 Initial release.