From ac37c57945fdd58204a15db7a04b0bc6735659bc Mon Sep 17 00:00:00 2001 From: Bill Freeman Date: Sat, 31 Oct 2026 15:24:28 -0500 Subject: [PATCH 1/2] CS2 spec, dictionary and changelog: player_status.is_silent_reload Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 1 + docs/datascience/adx/cs2/csds/assets/csds_dictionary.csv | 1 + docs/datascience/adx/cs2/csds/changelog-by-channel.md | 1 + docs/datascience/adx/cs2/csds/changelog.md | 8 ++++++++ docs/datascience/adx/cs2/csds/spec.md | 9 +++++++++ 5 files changed, 20 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d267ee..81eb771 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/). ### Added +- `player_status.is_silent_reload` in the CS2 spec and data dictionary, and in the CS2 changelog under 2026-10-31 (provisional: the date is corrected when the parser release with the column reaches production). - The CS2 spec and data dictionary describe four new channels, `map_ping` (ping-button markers), `player_round_stats` (the game's own per-round scoreboard), `round_facts` (the round-end fun fact) and `vote` (finished team votes), and `tick`'s `host_time_us` and `host_time_sd_us`. Channel counts across the docs go to 55. - `player_command` and `player_subtick_input` in the CS2 spec and data dictionary, and 51 channels in the counts. - `player_personal`'s client-settings columns (`crosshair_code` and the four `viewmodel_*` columns) in the CS2 spec and data dictionary, marked as redacted in the data set. diff --git a/docs/datascience/adx/cs2/csds/assets/csds_dictionary.csv b/docs/datascience/adx/cs2/csds/assets/csds_dictionary.csv index 712d854..94cd1ad 100644 --- a/docs/datascience/adx/cs2/csds/assets/csds_dictionary.csv +++ b/docs/datascience/adx/cs2/csds/assets/csds_dictionary.csv @@ -749,6 +749,7 @@ last_injury_time,DECIMAL,,True,"When the player last took damage, in seconds on is_in_reload,BOOLEAN,,True,The held weapon's reload flag.,Unlike is_reloading it falls as soon as a reload stops; about a third of reloads end early in a weapon switch. Null with no weapon held. From parser 6.0.0.,,,player_status,telemetry reserve_ammo,INTEGER,,True,The held weapon's reserve ammunition.,"Drops by one magazine per completed reload. Null for knives, grenades and equipment, and with no weapon held. From parser 6.0.0.",,,player_status,telemetry deploy_tick,INTEGER,,True,The tick the held weapon was drawn.,Joinable on tick. Null with no weapon held. From parser 6.0.0.,,,player_status,telemetry +is_silent_reload,BOOLEAN,,True,"Whether the held weapon is reloading silently, CS2's hold-to-reload since 2026-09-22.","True only while is_in_reload is, from about a quarter of a second into the reload. Null with no weapon held, and on matches recorded before the 2026-09-22 update.",,,player_status,telemetry second,DECIMAL,,True,,,,,player_status,telemetry player_id_fixed,INTEGER,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,Merged from another channel. Null where no source row matches.,,,player_status,telemetry equipment_value_calc,INTEGER,,True,,,,,player_status,telemetry diff --git a/docs/datascience/adx/cs2/csds/changelog-by-channel.md b/docs/datascience/adx/cs2/csds/changelog-by-channel.md index 44ad5e0..49ca648 100644 --- a/docs/datascience/adx/cs2/csds/changelog-by-channel.md +++ b/docs/datascience/adx/cs2/csds/changelog-by-channel.md @@ -288,6 +288,7 @@ Dates are the day (UTC) a change reached production. ## player_status +- **2026-10-31**, column added: `is_silent_reload`. Boolean, nullable: true while the player's held weapon is reloading silently. CS2's update of 2026-09-22 lets a player reload silently, and more slowly, by holding the reload key. It is true only while the weapon is in a reload (`is_in_reload`), from the moment the game marks the reload silent, about a quarter of a second in. A silent reload's magazine lands up to twice as late as a normal one's. It is null when no weapon is held, and on every match recorded before the 2026-09-22 update, since those demos don't carry the game's flag. Matches processed before this date don't have the column. - **2026-10-21**, column removed: `is_spotted`. **Breaking:** no longer written, so code that reads it breaks. It was the game's own "spotted" flag on each player, and it proved unreliable as a sign of who could see whom: checked against real kills, it was never set for one victim who was being shot, and set only a fraction of a second before another kill. Matches published earlier keep the column. Some later manifests still list it, with origin `replay-deleted` and no data behind it. - **2026-10-14**, columns added: `progress_bar_start`, `progress_bar_duration`, `last_injury_time`, `is_in_reload`, `reserve_ammo`, `deploy_tick`. The player's and the held weapon's own state, all nullable. `progress_bar_start` and `progress_bar_duration` are the defuse progress bar. `progress_bar_start` is when the player's last defuse began, in seconds on the clock of `second`, and keeps that value after the defuse ends. `progress_bar_duration` is the bar's length in seconds while it shows (10, or 5 with a kit) and negative otherwise. CS2 doesn't use the bar for planting. `last_injury_time` is when the player last took damage, on the clock of `second`. Both times are null until first set. `is_in_reload` is the held weapon's reload flag; unlike `is_reloading` it falls as soon as a reload stops, and about a third of reloads end early in a weapon switch. `reserve_ammo` is the held weapon's reserve and drops by one magazine per completed reload; null for knives, grenades and equipment. `deploy_tick` is the tick the held weapon was drawn, joinable on `tick`. - **2026-10-05**, types changed: `player_id_fixed`. An integer in every match, with nulls where no player matched. Before, a match in which any row found no player wrote the column as a double, so its type changed from match to match. diff --git a/docs/datascience/adx/cs2/csds/changelog.md b/docs/datascience/adx/cs2/csds/changelog.md index 573e276..a08fa63 100644 --- a/docs/datascience/adx/cs2/csds/changelog.md +++ b/docs/datascience/adx/cs2/csds/changelog.md @@ -25,6 +25,14 @@ The same changes are listed channel by channel on the removes personal data; and the publisher, which sends matches to Data Exchange. +## 2026-10-31 + +_The parser release after 7.0.1._ + +**Columns added** + +- `player_status.is_silent_reload`: Boolean, nullable: true while the player's held weapon is reloading silently. CS2's update of 2026-09-22 lets a player reload silently, and more slowly, by holding the reload key. It is true only while the weapon is in a reload (`is_in_reload`), from the moment the game marks the reload silent, about a quarter of a second in. A silent reload's magazine lands up to twice as late as a normal one's. It is null when no weapon is held, and on every match recorded before the 2026-09-22 update, since those demos don't carry the game's flag. Matches processed before this date don't have the column. + ## 2026-10-21 _The converter release that stops writing player_status.is_spotted._ diff --git a/docs/datascience/adx/cs2/csds/spec.md b/docs/datascience/adx/cs2/csds/spec.md index 4532b5b..2ed9285 100644 --- a/docs/datascience/adx/cs2/csds/spec.md +++ b/docs/datascience/adx/cs2/csds/spec.md @@ -1329,6 +1329,14 @@ the tick the held weapon was drawn, joinable on `tick`. The game keeps clock; the converter moves them onto the recording's clock with `header.server_start_tick`, hence `replay_fixed`, and keeps no `*_raw` copy. +`is_silent_reload` is true while the held weapon reloads silently. Since CS2's +update of 2026-09-22, a player who holds the reload key reloads silently and +more slowly, and the game marks the weapon. The column is true only while +`is_in_reload` is, from the moment the game marks the reload silent, about a +quarter of a second in. A silent reload's magazine lands up to twice as late as +a normal one's. It is null when no weapon is held, and on matches recorded +before that update, whose demos don't carry the mark. + | Col Name | Type | Nullable | Origin | Dependents | Merge Keys | | ----------------------------- | ------- | -------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | | tick | int32 | False | replay | | | @@ -1376,6 +1384,7 @@ clock; the converter moves them onto the recording's clock with | is_in_reload | bool | True | replay | | | | reserve_ammo | int64 | True | replay | | | | deploy_tick | int64 | True | replay_fixed | | | +| is_silent_reload | bool | True | replay | | | | second | float32 | True | calculated | tick, tick_rate | | | player_id_fixed | int8 | True | merged | | player_id, round, steam_id | | equipment_value_calc | int16 | True | calculated | inv_flashbang, inv_taser, inv_hegrenade, inv_smokegrenade, inv_molotov, inv_decoy, inv_incgrenade, inv_c4, armor, has_defuser, has_helmet, inv_primary, inv_secondary | | From bb40f887f0f3715702a9abb756d000ab0c697e36 Mon Sep 17 00:00:00 2001 From: Bill Freeman Date: Sat, 31 Oct 2026 15:28:59 -0500 Subject: [PATCH 2/2] is_silent_reload: 'while is_in_reload is true' From Copilot's review. Co-Authored-By: Claude Opus 5.5 --- docs/datascience/adx/cs2/csds/assets/csds_dictionary.csv | 2 +- docs/datascience/adx/cs2/csds/spec.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/datascience/adx/cs2/csds/assets/csds_dictionary.csv b/docs/datascience/adx/cs2/csds/assets/csds_dictionary.csv index 94cd1ad..4e409fc 100644 --- a/docs/datascience/adx/cs2/csds/assets/csds_dictionary.csv +++ b/docs/datascience/adx/cs2/csds/assets/csds_dictionary.csv @@ -749,7 +749,7 @@ last_injury_time,DECIMAL,,True,"When the player last took damage, in seconds on is_in_reload,BOOLEAN,,True,The held weapon's reload flag.,Unlike is_reloading it falls as soon as a reload stops; about a third of reloads end early in a weapon switch. Null with no weapon held. From parser 6.0.0.,,,player_status,telemetry reserve_ammo,INTEGER,,True,The held weapon's reserve ammunition.,"Drops by one magazine per completed reload. Null for knives, grenades and equipment, and with no weapon held. From parser 6.0.0.",,,player_status,telemetry deploy_tick,INTEGER,,True,The tick the held weapon was drawn.,Joinable on tick. Null with no weapon held. From parser 6.0.0.,,,player_status,telemetry -is_silent_reload,BOOLEAN,,True,"Whether the held weapon is reloading silently, CS2's hold-to-reload since 2026-09-22.","True only while is_in_reload is, from about a quarter of a second into the reload. Null with no weapon held, and on matches recorded before the 2026-09-22 update.",,,player_status,telemetry +is_silent_reload,BOOLEAN,,True,"Whether the held weapon is reloading silently, CS2's hold-to-reload since 2026-09-22.","True only while is_in_reload is true, from about a quarter of a second into the reload. Null with no weapon held, and on matches recorded before the 2026-09-22 update.",,,player_status,telemetry second,DECIMAL,,True,,,,,player_status,telemetry player_id_fixed,INTEGER,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,Merged from another channel. Null where no source row matches.,,,player_status,telemetry equipment_value_calc,INTEGER,,True,,,,,player_status,telemetry diff --git a/docs/datascience/adx/cs2/csds/spec.md b/docs/datascience/adx/cs2/csds/spec.md index 2ed9285..7a06d1f 100644 --- a/docs/datascience/adx/cs2/csds/spec.md +++ b/docs/datascience/adx/cs2/csds/spec.md @@ -1332,7 +1332,7 @@ clock; the converter moves them onto the recording's clock with `is_silent_reload` is true while the held weapon reloads silently. Since CS2's update of 2026-09-22, a player who holds the reload key reloads silently and more slowly, and the game marks the weapon. The column is true only while -`is_in_reload` is, from the moment the game marks the reload silent, about a +`is_in_reload` is true, from the moment the game marks the reload silent, about a quarter of a second in. A silent reload's magazine lands up to twice as late as a normal one's. It is null when no weapon is held, and on matches recorded before that update, whose demos don't carry the mark.