David Durst's Blog

TL;DR CSGO demo files separately track when flashes are thrown and explode, making it challenging to link the throw and explosion for a single grenade. In this blog post, I'll show that flashbang fuse length is constant, so you can link throws and explosions based on time.

Demo Files Don't Track All Grenade Data

CSGO demo files contain data on when grenades a thrown, explode, when their effects start, and when their effects end. However, the flashbangs lack unique id's to link all these events. It appears that other grenades are more coherently tracked. However, I want to know which flashbang caused which blindness.

One technique to deduplicate grenades is based on timing and player who threw the flashbang. A player can only throw one flashbang at a time. So, if I know the order in which each player threw flashbangs, I can link events based on per-player order. The first explosion, effect start, and effect end are all for the first grenade thrown by a player.

The problem with this technique is that it relies on a constant flash length. Other games modify fuse length based on game state, like whether the flash bounced. I need to show that CSGO flashbangs have a constant fuse length in order to use my per-player timing deduplication technique.

Video Demonstrates Constant Fuse Length

This video demonstrates that all possible game states for the grenade (long throw, short throw, long throw with bounce, short throw with bounce) have the same fuse length. This video goes quickly, so feel free to download it and examine it on a frame-by-frame basis using a video player like mpv.

I measured fuse length in the above video. I define fuse length as time from when the grenade object first appears on the screen until the first frame when the screen becomes white. I measured the time by importing the screen recording into Adobe Premiere Pro and adding a timecode relative to the start of each clip. The video shows that the flashbang always has a fuse length of 1.40 seconds, regardless of the flashbang's game state (like throw type, velocity, or bouncing off a wall).

The third flashbang (short throw without a bounce) deviates by 0.01 seconds. It has a fuse length of 1.39. I consider this within reasonable experimental error.

Request For Feedback

If you have questions or comments about this analysis, please email me at durst@stanford.edu.


  1. DataMaps - DataMaps are an exception to this networked and serialized/non-networked and non-serialized dichotomy. They are serialized but not networked. I believe they are serialized to ensure they can be saved to a file and restored on the same computer. The serialization means they are well organized and easily accessed by programs running with the server. However, the DataMaps are a small subset of game state (i.e. don't contain player head position) and can't be used by post-match demo file-based analyses. These limitations ensure DataMaps are only a footnote for this post. Here is a dump of all DataMaps.