From 463abf9b276d3125d0f02a1f124ed96e6e4d8be8 Mon Sep 17 00:00:00 2001 From: Bill Freeman Date: Wed, 26 Aug 2026 23:29:33 -0500 Subject: [PATCH 1/3] Refresh the data science docs, and archive what they replace The published pages described a pipeline two years out of date. The CS2 spec listed 30 channels; the pipeline has published 42 since 2026-08-04. The CS2 dataset page was a find-and-replace of the CS:GO page and still defined CS2 as "Counter-Strike: Global Offensive". The FAQ recommended Python 3.9 and Poetry against a tutorial that now requires 3.14 and uv, pointed at a companion tome dataset last updated in 2022, and said old data may be deleted "at our discretion" when revisions are in fact revoked on a one-year cycle. spec.md and csds_dictionary.csv are generated, not written: the column set, origin, dependents and merge keys come from csgo-ppp's generated reference, which is rendered from a real manifest. Types come from the published manifest where it declares one (227 columns), csgo-rushb's generated column docs (125), the arrow schema measured off 50 real prod matches (284), the same column name resolved elsewhere (118), and the converter source for the eight columns that postdate all of those. Four columns the manifest marks as deleted are excluded. The dataset page, the FAQ and the archive index rest on measurements taken against the production Data Exchange dataset on 2026-08-27: 365 live revisions covering 2025-07-18 onward, 941 revoked; 43 objects per match from 2026-08-04, 31 through 2026-07-31, a mix on 2026-08-02; about 35 MB per match, of which player_vector and player_status are 30 MB. The pages being replaced move under datascience/old/ rather than being deleted, because subscribers hold data that matches them and the retained window still includes revisions the old spec describes. The CS:GO pages keep their original addresses under /datascience/adx/csgo/ so published links still resolve. --- CHANGELOG.md | 17 + docs/datascience/README.md | 118 +- docs/datascience/adx/_category_.yml | 1 + docs/datascience/adx/cs2/csds/README.md | 63 +- .../adx/cs2/csds/assets/csds_dictionary.csv | 1310 +++++++------ docs/datascience/adx/cs2/csds/spec.md | 1699 ++++++++++------- docs/datascience/old/README.md | 54 + .../{adx/csgo => old}/_category_.yml | 3 +- docs/datascience/old/cs2/_category_.yml | 4 + docs/datascience/old/cs2/csds/README.md | 406 ++++ .../{adx/csgo => old/cs2}/csds/_category_.yml | 0 .../old/cs2/csds/assets/csds_dictionary.csv | 643 +++++++ docs/datascience/old/cs2/csds/spec.md | 874 +++++++++ docs/datascience/old/csgo/_category_.yml | 4 + .../{adx => old}/csgo/csds/README.md | 17 + docs/datascience/old/csgo/csds/_category_.yml | 4 + .../csgo/csds/assets/csds_dictionary.csv | 0 .../{adx => old}/csgo/csds/revisions.md | 12 + .../{adx => old}/csgo/csds/spec.md | 14 + docs/datascience/old/datascience-faq.md | 250 +++ docs/datascience/showcase/_category_.yml | 1 + 21 files changed, 4108 insertions(+), 1386 deletions(-) create mode 100644 docs/datascience/old/README.md rename docs/datascience/{adx/csgo => old}/_category_.yml (58%) create mode 100644 docs/datascience/old/cs2/_category_.yml create mode 100644 docs/datascience/old/cs2/csds/README.md rename docs/datascience/{adx/csgo => old/cs2}/csds/_category_.yml (100%) create mode 100644 docs/datascience/old/cs2/csds/assets/csds_dictionary.csv create mode 100644 docs/datascience/old/cs2/csds/spec.md create mode 100644 docs/datascience/old/csgo/_category_.yml rename docs/datascience/{adx => old}/csgo/csds/README.md (97%) create mode 100644 docs/datascience/old/csgo/csds/_category_.yml rename docs/datascience/{adx => old}/csgo/csds/assets/csds_dictionary.csv (100%) rename docs/datascience/{adx => old}/csgo/csds/revisions.md (95%) rename docs/datascience/{adx => old}/csgo/csds/spec.md (99%) create mode 100644 docs/datascience/old/datascience-faq.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 782572b..914a424 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/). ### Changed +- Refresh the data science documentation against the pipeline as it runs today, + and move the pages it replaces into an archive section. + + - The CS2 `spec.md` and `csds_dictionary.csv` are regenerated: 42 channels and + 762 columns, up from 30 channels and 642 columns. Fourteen channels were + added and two (`item_remove`, `player_action`) removed when the published + revisions changed over in early August 2026. Every column now carries a + type, and the spec explains what each `origin` value means. + - The dataset page and the Data Science FAQ are updated: revisions are + retained for about a year rather than kept indefinitely, the tutorial needs + Python 3.14 and uv rather than 3.9 and Poetry, download-cost guidance is + measured rather than estimated in 2022, and the CS2 page no longer describes + CS2 as Counter-Strike: Global Offensive. + - The 2022 FAQ, the 2024 CS2 pages and the CS:GO pages move under + `datascience/old/`. The CS:GO pages keep their original addresses under + `/datascience/adx/csgo/`, so existing links still resolve. + - Harden the deploy workflows: pass the version input through `env:` instead of interpolating it into the shell line; give the dispatch and tag workflows readable run titles; give every job a timeout. - GitHub Actions updated to Node 24 runtimes: `actions/checkout` v5 to v7; `actions/setup-node` v5 to v6. diff --git a/docs/datascience/README.md b/docs/datascience/README.md index f5b0510..fc8d7e8 100644 --- a/docs/datascience/README.md +++ b/docs/datascience/README.md @@ -4,25 +4,31 @@ ### What data is available? -The [PureSkill.gg Competitive CS:GO Gameplay Data Set] contains -Competitive Counter-Strike: Global Offensive (CS:GO) match data -from matchmaking, FACEIT, and other third-parties. +The [PureSkill.gg Competitive Gameplay Data Set] contains +Counter-Strike 2 (CS2) match data from matchmaking, FACEIT, and other +third-parties. Contains full player telemetry and timestamped game events. +A new revision is published every day, and each match in it is 42 data files +plus an index object. + +The data set carried Counter-Strike: Global Offensive (CS:GO) data until CS2 +replaced the game in 2023. Those revisions are no longer retained. The +[archive](./old/) keeps the pages that described them. ### How can I get started? With [the tutorial][tutorial] you will learn how to do some real -CS:GO data science with data from the public data set. +CS2 data science with data from the public data set. Once you complete the tutorial, you may use the same repository to bootstrap you own project! ### Why are you doing this? We want to see the amazing stuff you'll do with it! -Working with AI researchers using CS:GO to solve really hard problems inspired us to -contribute back and unlock this potential for anyone. +Working with AI researchers using Counter-Strike to solve really hard problems inspired us to +contribute back and open this up to anyone. We hope this work can fuel everything from one's first data science experience, to their -next hackathon, school project—all the way to groundbreaking research. +next hackathon, school project, all the way to groundbreaking research. ### Who can use the data? @@ -41,6 +47,16 @@ for using the cloud provider's storage and bandwidth. See the [Cost FAQ](#cost-faq) for details. +### How long is the data kept? + +About a year. A revision is published each day and revoked roughly twelve +months later, so the data set holds a rolling window rather than a growing +archive. As of 2026-08-27 it holds 365 daily revisions covering 2025-07-18 +onward. + +If you need a particular stretch of time, export it rather than assuming it +will still be there. We do not keep a copy you can ask us to restore. + ### Why do I need to subscribe? The [AWS Data Exchange], which is the cloud platform hosting the data set, @@ -74,7 +90,7 @@ in the data set, it is **not traceable back to your player identity**. ### I have more questions? That wasn't a question. -But it's ok, you can reach out in the Dojo channel on [Discord]. +But it's ok, you can ask in the Dojo channel on [Discord]. We want to help you and get your feedback! ## Technical FAQ @@ -83,11 +99,13 @@ We want to help you and get your feedback! - **[PySkill][makenew-pyskill]:** Project skeleton for doing PureSkill.gg data science with Python. + It is also the tutorial. - **[Data Science Developer Kit (DSDK)][dsdk]:** Python library for working with the data. Read csds, create tomes, access data from the ADX, and more. - **[CS:GO Data Science Developer Kit (CSGO DSDK)][csgo-dsdk]:** - Python library with tools specific to CS:GO data science. + Python library with tools specific to Counter-Strike data science. + The name predates CS2; it is the right library for CS2 data. - **[PureSkill.gg Data Science Showcase][datascience-showcase]:** Demonstrations and examples of neat applications of PureSkill.gg data. - **[PureSkill.gg Docs][docs]:** @@ -96,9 +114,7 @@ We want to help you and get your feedback! ### Are the developer tools stable? Mostly. -We don't anticipate majors changes before releasing version 1 of our libraries. -During the initial period following the announcement, we will be working -with early adopters to squash bugs and smooth out the APIs. +We don't anticipate major changes before releasing version 1 of our libraries. Please report any issues on GitHub. Libraries follow the principals of [semver]. @@ -112,25 +128,24 @@ This is a small cosmetic difference, but otherwise, the semantic meaning will fo ### What do I need to use the developer tools? -The minimum [tutorial requirements] are [Python] and [Poetry]. +The minimum [tutorial requirements] are [Python] and [uv]. -### Can I use any version of Python? +### Which version of Python do I need? -No. -For the best experience, we recommend using the latest version of Python 3.9 +The tutorial skeleton requires **Python 3.14 or newer**. +The libraries themselves, `dsdk` and `csgo-dsdk`, support 3.11 and newer, so you +can use them from an older project if you need to. -To install an isolated Python version, -we recommend [pyenv] for Linux and Mac, or [pyenv-win] for Windows. +To install an isolated Python version, [uv] can do it for you with +`uv python install`. [pyenv] for Linux and Mac, or [pyenv-win] for Windows, +also work. -Version 3.10 may work, but many libraries are still lagging behind on full support, -which means installing dependencies may take longer, require additional build tools, or fail. -Additionally, Python 3.10 is not yet supported by all cloud providers, including AWS Lambda. -When 3.10 has wider adoption, we will officially support it, but for now we only test on 3.9. +### Why do I need to use uv to install dependencies? -### Why do I need to use Poetry to install dependencies? - -Poetry guarantees each project runs in an isolated environment with pinned dependencies. +uv guarantees each project runs in an isolated environment with pinned dependencies. This is the only way to ensure reproducible tests and builds. +Earlier versions of the tutorial used [Poetry]; the projects moved to uv and the +lock files are no longer compatible. You can try to use an alternative Python package manager, but we cannot offer support. @@ -160,9 +175,10 @@ data is stored as [Apache Parquet] with additional metadata in [JSON]. > It provides efficient data compression and encoding schemes with enhanced performance to handle complex data in bulk. > Parquet is available in multiple languages including Java, C++, Python, etc... -If you want to use another language, we still recommend stating with the [tutorial]. +If you want to use another language, we still recommend starting with the [tutorial]. This is the easiest way to download the data and create new tomes, which are just more Parquet and JSON files. -Tomes are economical views of the data tailored for specific analyses. +Tomes are economical views of the data tailored for specific analyses, and you +build them yourself from data you have exported. ## Cost FAQ @@ -170,38 +186,46 @@ Tomes are economical views of the data tailored for specific analyses. _FPS Critic Inc., owner of PureSkill.gg, is not liable for any AWS costs you incur._ -[Step 7 of the tutorial] can help you estimate your costs, -We provide those and the estimates below for convenience, +[Step 7 of the tutorial] can help you estimate your costs. +We provide the measurements below for convenience, but we do not guarantee their accuracy or applicability to your AWS account. -TL;DR: It costs about $1.50 to download a day of data, or $4-5 per 1,000 matches. -Downloading tomes is much less expensive. -Tomes contain slices of features across many matches. +Measured on the production data set on 2026-08-27: + +| What | How big | +| ------------------------- | ------------------------------------------------------------ | +| One match | about 35 MB across 43 objects | +| One recent daily revision | 90 to 150 matches, roughly 3 to 5 GB, 4,000 to 6,500 objects | +| The whole retained window | 365 daily revisions | + +Exporting from the AWS Data Exchange writes those objects into an S3 bucket you +own, so you pay per object written and then for storing them. Pulling them out +of AWS afterwards adds data transfer. Check the current [S3 pricing] for your +region before starting a large export; the object count matters as much as the +byte count. ### How should I optimize my costs? The data set is structured to help you control and optimize your costs. -First, it is split into daily revisions which may be downloaded individually. -Second, we maintain a companion tome data set which is very economical. +It is split into daily revisions which may be exported individually, and within +a match the data is split by channel, so you can take only the channels you need. Consider these steps: 1. AWS has a free tier which - may reduce or the eliminate the cost to get started. -2. If you can use available tomes for your project, - don't bother downloading individual match data. - Most tomes cost pennies to download and contain - data for across many matches. -3. If the available tomes are not sufficient for your project, - estimate how much data you actually need by starting with one day. + may reduce or eliminate the cost to get started. +2. **Skip `player_vector` and `player_status` unless you need per-tick + telemetry.** They are about 30 MB of a match's 35 MB. Every other channel put + together is under 2 MB, so a day without them costs roughly a tenth as much. +3. Estimate how much data you actually need by starting with one day. Remember that one revision is one day worth of data. -4. Be careful when downloading a large number of revisions at once. +4. Be careful when exporting a large number of revisions at once. You might go over the free tier part-way though the export process and have difficulty stopping the jobs. We recommend you limit each export batch to one month intervals. -5. If you share a tome generator with us, we may be able to make the tome - for you and share it back to the data set. This would prevent you from - needing to download the entire csds data set which is about 2TB. +5. Once you have exported the data, build a [tome][dsdk] from it. A tome is a + slice of features across many matches, small enough to keep around, and the + tutorial covers making one. ### Where can I get financial support? @@ -215,7 +239,7 @@ Consider these steps: - Talk to us. We can't promise financial support, but we can brainstorm a solution together. [step 7 of the tutorial]: https://github.com/pureskillgg/makenew-pyskill/blob/master/notebooks/tutorial/7%20-%20Getting%20csds%20data%20from%20the%20ADX.ipynb -[pureskill.gg competitive cs:go gameplay data set]: ./adx/csgo/csds/ +[pureskill.gg competitive gameplay data set]: ./adx/cs2/csds/ [tutorial]: https://github.com/pureskillgg/makenew-pyskill/blob/master/README.rst#-start-with-the-tutorial [cc by-nc-sa 4.0]: https://creativecommons.org/licenses/by-nc-sa/4.0/ [aws data exchange]: https://aws.amazon.com/data-exchange/ @@ -232,6 +256,8 @@ Consider these steps: [discord]: https://pureskill.gg/discord [tutorial requirements]: https://github.com/pureskillgg/makenew-pyskill#requirements [python]: https://www.python.org/ +[uv]: https://docs.astral.sh/uv/ [poetry]: https://python-poetry.org/ [pyenv]: https://github.com/pyenv/pyenv [pyenv-win]: https://github.com/pyenv-win/pyenv-win +[s3 pricing]: https://aws.amazon.com/s3/pricing/ diff --git a/docs/datascience/adx/_category_.yml b/docs/datascience/adx/_category_.yml index 0db0da0..c7bb058 100644 --- a/docs/datascience/adx/_category_.yml +++ b/docs/datascience/adx/_category_.yml @@ -1,4 +1,5 @@ --- label: AWS Data Exchange +position: 1 collapsible: true collapsed: false diff --git a/docs/datascience/adx/cs2/csds/README.md b/docs/datascience/adx/cs2/csds/README.md index 06b3ca7..bc7c3a2 100644 --- a/docs/datascience/adx/cs2/csds/README.md +++ b/docs/datascience/adx/cs2/csds/README.md @@ -6,7 +6,13 @@ Competitive Counter-Strike 2 (CS2) match data from matchmaking, FACEIT, and other third-parties. Contains full player telemetry and timestamped game events. These data are extracted from CS2 replay files called demos. -Data for each match is split across 31 files, collectively called csds. +Each match is published as 43 objects, collectively called csds: +42 channel files plus a JSON index object, also named `csds`, that lists them. +The [CSDS Spec](./spec.md) documents every channel and column. + +Revisions through 2026-07-31 carry 31 objects per match instead of 43, and the +2026-08-02 revision holds a mix of both. The +[archived spec](/datascience/old/cs2/csds/spec) describes the older set. Please visit **[docs.pureskill.gg/datascience][datascience docs]** for full introduction to PureSkill.gg data science, @@ -83,11 +89,12 @@ This is a standardized CSV file that catalogues all tables and columns in the da - DSA - Data Subscriber Agreement. Find this in your AWS account under the ADX subscription to this data set. - PII - Personally Identifiable Information. -- channel - One of the 33 files that combine to make a csds object. -- csds - The name given to the collection of 33 files extracted from a CS2 demo. +- channel - One of the 42 data files that combine to make a csds object. +- csds - The name given to the collection of files extracted from a CS2 demo, + and also the name of the JSON index object that lists them. - demo - The name given to the server-recorded stream of event data from a match of CS2. Sometimes ends in the .dem file extension. -- [CS2] - Counter-Strike: Global Offensive. +- [CS2] - Counter-Strike 2. The game created by Valve that is played to generate this dataset. - [Valve] - The company that makes CS2. - [Steam] - The platform created by Valve that CS2 players use to play the game online. @@ -122,17 +129,19 @@ This is a standardized CSV file that catalogues all tables and columns in the da Parsed and processed individual matches of CS2. - **How many instances are there in total?** - Approximately 60,000 matches of CS2 with ~250 added each day. + Each daily revision holds the matches processed that day. + Volume has grown steadily: revisions at the start of the retained window in + July 2025 hold around 12 matches, and recent ones hold between 90 and 150. + A match takes about 35 MB across its 43 objects, so a recent day is roughly + 3 to 5 GB. - **Does the dataset contain all possible instances or is it a sample of instances from a larger set?** - It is a complete picture of all CS2 demos available to PureSkill.gg. - There are [500,000 people playing CS2 at any point in a day][cs2 chart], - and assuming a match takes 1 hour and 10 players, - there are 1.2 million matches played every day. - The dataset here is a subset of those matches played by the larger CS2 community. + It is a complete picture of all CS2 demos available to PureSkill.gg, + which is a small fraction of the matches the wider community plays. + Valve publishes concurrent player counts on the [Steam most played chart][cs2 chart]. - **What data does each instance consist of?** - CS2 demo files are [parsed][demoinfocs-golang] and saved as 33 separate channels. + CS2 demo files are [parsed][demoinfocs-golang] and saved as 42 separate channels. The collection of these channels for a match is called csds. We provide an [open source SDK][makenew-pyskill] to work with the csds data. @@ -145,6 +154,16 @@ This is a standardized CSV file that catalogues all tables and columns in the da and some matches may have been processed using older versions of certain programs. Notably, older matches from the FACEIT platform are missing information about player ranks. + The channel set also changed during the retained window. Revisions through + 2026-07-31 carry 30 channels rather than 42, and the 2026-08-02 revision holds + a mix. Fourteen channels were added: `bullet_damage`, `grenade_bounce`, + `grenade_vector`, `item_dropped`, `item_refund`, `molotov_fire`, + `player_chat`, `player_connect`, `player_inputs`, `player_sound`, + `rank_update`, `score_update`, `team_change` and `world_item_vector`. + Two were removed: `item_remove` and `player_action`. + Read each match's `csds` index object rather than assuming a fixed channel + list. + - **Are relationships between individual instances made explicit?** Since we have anonymized player data, it is not possible to tell if a player in one match is the same as a player in a different match. @@ -172,7 +191,7 @@ This is a standardized CSV file that catalogues all tables and columns in the da - **Does the dataset contain data that, if viewed directly, might be offensive, insulting, threatening, or might otherwise cause anxiety?** Yes, but keep in mind this is all video game data. Out of an abundance of caution, we list these elements of the dataset that may be inappropriate for younger audiences below. - CS2 has a rating by the [ESRB] of [Mature][esrb ratings] for [Blood and Intense Violence][esrb cs2]. + CS2 has a rating by the [ESRB] of [Mature][esrb ratings] for Blood and Intense Violence. CS2 is basically a SWAT team simulator. The game includes realistic weapons, bombs, hostages, terrorists, killing, death, and grenades. There are no player names, text chat, or voice chat data in the dataset. @@ -227,7 +246,9 @@ This is a standardized CSV file that catalogues all tables and columns in the da Cloud processing costs were paid by FPS Critic, Inc. who produces PureSkill.gg. - **Over what timeframe was the data collected?** - 2021-12-01 to present. + Collection began 2021-12-01 and continues daily. + Revisions are retained for about a year, so the data available today begins + 2025-07-18. Earlier revisions have been revoked and emptied. - **Were any ethical review processes conducted?** No. @@ -318,7 +339,10 @@ This is a standardized CSV file that catalogues all tables and columns in the da See the DSA for details. - **When will the dataset be distributed?** - Starting on 2022-05-17 with a one month automatically renewing subscription. + It has been distributed since 2022-05-17, with a one month automatically + renewing subscription and a new revision published every day. + Revisions carried CS:GO data until Counter-Strike 2 replaced the game in 2023; + every revision still retained carries CS2 data. - **Will the dataset be distributed under a copyright or other intellectual property license, and/or under applicable terms of use?** Yes, under the DSA, which has similar terms to the @@ -354,8 +378,10 @@ This is a standardized CSV file that catalogues all tables and columns in the da No - **Will older versions of the dataset continue to be supported/hosted/maintained?** - We may delete old, unusable data at our discretion. - Additionally, we may delete old data to reduce cost. + Revisions are retained for about a year and then revoked and emptied. + As of 2026-08-27 the data set holds 365 daily revisions covering 2025-07-18 + onward. Download what you need rather than assuming a revision will still be + there later. - **If others want to extend/augment/build on/contribute to the dataset, is there a mechanism for them to do so?** Please email [contact@pureskill.gg][email] or reach out on [Discord] @@ -375,16 +401,15 @@ This is a standardized CSV file that catalogues all tables and columns in the da [datasheets for datasets]: https://arxiv.org/abs/1803.09010 [aws]: https://aws.amazon.com/ [adx]: https://aws.amazon.com/data-exchange -[cs2]: https://store.steampowered.com/app/730/CounterStrike_Global_Offensive/ +[cs2]: https://store.steampowered.com/app/730/ [faceit]: https://www.faceit.com/ [steam]: https://steamcommunity.com/ [valve]: https://www.valvesoftware.com/ [makenew-pyskill]: https://github.com/pureskillgg/makenew-pyskill -[cs2 chart]: https://steamcharts.com/app/730 +[cs2 chart]: https://store.steampowered.com/charts/mostplayed [demoinfocs-golang]: https://github.com/markus-wa/demoinfocs-golang [esrb]: https://www.esrb.org [esrb ratings]: https://www.esrb.org/ratings-guide/ -[esrb cs2]: https://www.esrb.org/ratings/100491/Counter-Strike%3A+Global+Offensive [pii_remover]: https://github.com/pureskillgg/csgo-dsdk/blob/master/pureskillgg_csgo_dsdk/scrubber/scrub_pii.py [steam help page on api connections]: https://help.steampowered.com/en/wizard/HelpWithGameIssue/?appid=730&issueid=128 [terms of service]: https://pureskill.gg/site-terms/ diff --git a/docs/datascience/adx/cs2/csds/assets/csds_dictionary.csv b/docs/datascience/adx/cs2/csds/assets/csds_dictionary.csv index 21090eb..6051862 100644 --- a/docs/datascience/adx/cs2/csds/assets/csds_dictionary.csv +++ b/docs/datascience/adx/cs2/csds/assets/csds_dictionary.csv @@ -1,643 +1,763 @@ FieldName,Type,MaxLength,Nullable,Description,Notes,Example,PrimaryKey,TableName,TableDescription -round,DECIMAL,,False,,,,,bomb_action,multi_event -tick,DECIMAL,,False,,,,,bomb_action,multi_event +round,INTEGER,,False,,,,,bomb_action,multi_event +tick,INTEGER,,False,,,,,bomb_action,multi_event event_type,VARCHAR,,False,,,,,bomb_action,multi_event -player_id,DECIMAL,,True,,,,,bomb_action,multi_event -player_id_pawn,DECIMAL,,True,,,,,bomb_action,multi_event -site_code,DECIMAL,,True,,,,,bomb_action,multi_event -entity_id,DECIMAL,,True,,,,,bomb_action,multi_event -second,DECIMAL,,True,,,,,bomb_action,multi_event -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,bomb_action,multi_event -player_x_pos,DECIMAL,,True,asof merge (nearby ticks),,,,bomb_action,multi_event -player_y_pos,DECIMAL,,True,asof merge (nearby ticks),,,,bomb_action,multi_event -player_z_pos,DECIMAL,,True,asof merge (nearby ticks),,,,bomb_action,multi_event -player_x_vel,DECIMAL,,True,asof merge (nearby ticks),,,,bomb_action,multi_event -player_y_vel,DECIMAL,,True,asof merge (nearby ticks),,,,bomb_action,multi_event -player_z_vel,DECIMAL,,True,asof merge (nearby ticks),,,,bomb_action,multi_event -player_phi_ang,DECIMAL,,True,asof merge (nearby ticks),,,,bomb_action,multi_event -player_theta_ang,DECIMAL,,True,asof merge (nearby ticks),,,,bomb_action,multi_event -player_weapon_code,DECIMAL,,True,asof merge (nearby ticks),,,,bomb_action,multi_event -player_team_code,DECIMAL,,True,asof merge (nearby ticks),,,,bomb_action,multi_event -player_tick,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,bomb_action,multi_event -player_player_id,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,bomb_action,multi_event -round,DECIMAL,,False,,,,,bomb_defuse,multi_event -tick,DECIMAL,,False,,,,,bomb_defuse,multi_event +player_id,INTEGER,,True,,,,,bomb_action,multi_event +player_id_pawn,INTEGER,,True,,,,,bomb_action,multi_event +site_code,INTEGER,,True,,,,,bomb_action,multi_event +entity_id,INTEGER,,True,,,,,bomb_action,multi_event +second,DECIMAL,,,,,,,bomb_action,multi_event +player_id_fixed,DECIMAL,,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.,,,bomb_action,multi_event +player_x_pos,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,bomb_action,multi_event +player_y_pos,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,bomb_action,multi_event +player_z_pos,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,bomb_action,multi_event +player_x_vel,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,bomb_action,multi_event +player_y_vel,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,bomb_action,multi_event +player_z_vel,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,bomb_action,multi_event +player_phi_ang,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,bomb_action,multi_event +player_theta_ang,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,bomb_action,multi_event +player_weapon_code,INTEGER,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,bomb_action,multi_event +player_team_code,INTEGER,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,bomb_action,multi_event +round,INTEGER,,False,,,,,bomb_defuse,multi_event +tick,INTEGER,,False,,,,,bomb_defuse,multi_event event_type,VARCHAR,,False,,,,,bomb_defuse,multi_event -player_id,DECIMAL,,False,,,,,bomb_defuse,multi_event -has_kit,DECIMAL,,True,,,,,bomb_defuse,multi_event -second,DECIMAL,,True,,,,,bomb_defuse,multi_event -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,bomb_defuse,multi_event -player_x_pos,DECIMAL,,True,,,,,bomb_defuse,multi_event -player_y_pos,DECIMAL,,True,,,,,bomb_defuse,multi_event -player_z_pos,DECIMAL,,True,,,,,bomb_defuse,multi_event -player_x_vel,DECIMAL,,True,,,,,bomb_defuse,multi_event -player_y_vel,DECIMAL,,True,,,,,bomb_defuse,multi_event -player_z_vel,DECIMAL,,True,,,,,bomb_defuse,multi_event -player_phi_ang,DECIMAL,,True,,,,,bomb_defuse,multi_event -player_theta_ang,DECIMAL,,True,,,,,bomb_defuse,multi_event -player_weapon_code,DECIMAL,,True,,,,,bomb_defuse,multi_event -player_team_code,DECIMAL,,True,,,,,bomb_defuse,multi_event -player_tick,DECIMAL,,True,,May be missing.,,,bomb_defuse,multi_event -player_player_id,DECIMAL,,True,,May be missing.,,,bomb_defuse,multi_event -round,DECIMAL,,False,,,,,bomb_state,multi_event -tick,DECIMAL,,False,,,,,bomb_state,multi_event +player_id,INTEGER,,False,,,,,bomb_defuse,multi_event +has_kit,BOOLEAN,,True,,,,,bomb_defuse,multi_event +second,DECIMAL,,,,,,,bomb_defuse,multi_event +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.,,,bomb_defuse,multi_event +player_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bomb_defuse,multi_event +player_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bomb_defuse,multi_event +player_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bomb_defuse,multi_event +player_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bomb_defuse,multi_event +player_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bomb_defuse,multi_event +player_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bomb_defuse,multi_event +player_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bomb_defuse,multi_event +player_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bomb_defuse,multi_event +player_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,bomb_defuse,multi_event +player_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,bomb_defuse,multi_event +round,INTEGER,,False,,,,,bomb_state,multi_event +tick,INTEGER,,False,,,,,bomb_state,multi_event event_type,VARCHAR,,False,,,,,bomb_state,multi_event -player_id,DECIMAL,,False,,,,,bomb_state,multi_event -site_code,DECIMAL,,True,,,,,bomb_state,multi_event -second,DECIMAL,,True,,,,,bomb_state,multi_event -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,bomb_state,multi_event -player_x_pos,DECIMAL,,True,,,,,bomb_state,multi_event -player_y_pos,DECIMAL,,True,,,,,bomb_state,multi_event -player_z_pos,DECIMAL,,True,,,,,bomb_state,multi_event -player_x_vel,DECIMAL,,True,,,,,bomb_state,multi_event -player_y_vel,DECIMAL,,True,,,,,bomb_state,multi_event -player_z_vel,DECIMAL,,True,,,,,bomb_state,multi_event -player_phi_ang,DECIMAL,,True,,,,,bomb_state,multi_event -player_theta_ang,DECIMAL,,True,,,,,bomb_state,multi_event -player_weapon_code,DECIMAL,,True,,,,,bomb_state,multi_event -player_team_code,DECIMAL,,True,,,,,bomb_state,multi_event -player_tick,DECIMAL,,True,,May be missing.,,,bomb_state,multi_event -player_player_id,DECIMAL,,True,,May be missing.,,,bomb_state,multi_event -round,DECIMAL,,False,,,,,bot_takeover,single_event -tick,DECIMAL,,False,,,,,bot_takeover,single_event -player_id,DECIMAL,,False,,,,,bot_takeover,single_event -bot_id,DECIMAL,,True,,,,,bot_takeover,single_event -player_index,DECIMAL,,False,,,,,bot_takeover,single_event -second,DECIMAL,,True,,,,,bot_takeover,single_event -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,bot_takeover,single_event -player_x_pos,DECIMAL,,True,,,,,bot_takeover,single_event -player_y_pos,DECIMAL,,True,,,,,bot_takeover,single_event -player_z_pos,DECIMAL,,True,,,,,bot_takeover,single_event -player_x_vel,DECIMAL,,True,,,,,bot_takeover,single_event -player_y_vel,DECIMAL,,True,,,,,bot_takeover,single_event -player_z_vel,DECIMAL,,True,,,,,bot_takeover,single_event -player_phi_ang,DECIMAL,,True,,,,,bot_takeover,single_event -player_theta_ang,DECIMAL,,True,,,,,bot_takeover,single_event -player_weapon_code,DECIMAL,,True,,,,,bot_takeover,single_event -player_team_code,DECIMAL,,True,,,,,bot_takeover,single_event -player_tick,DECIMAL,,True,,,,,bot_takeover,single_event -player_player_id,DECIMAL,,True,,,,,bot_takeover,single_event -round,DECIMAL,,False,,,,,grenade_state,multi_event -tick,DECIMAL,,False,,,,,grenade_state,multi_event +player_id,INTEGER,,False,,,,,bomb_state,multi_event +site_code,INTEGER,,True,,,,,bomb_state,multi_event +second,DECIMAL,,,,,,,bomb_state,multi_event +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.,,,bomb_state,multi_event +player_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bomb_state,multi_event +player_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bomb_state,multi_event +player_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bomb_state,multi_event +player_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bomb_state,multi_event +player_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bomb_state,multi_event +player_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bomb_state,multi_event +player_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bomb_state,multi_event +player_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bomb_state,multi_event +player_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,bomb_state,multi_event +player_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,bomb_state,multi_event +round,INTEGER,,False,,,,,bot_takeover,single_event +tick,INTEGER,,False,,,,,bot_takeover,single_event +player_id,INTEGER,,False,,,,,bot_takeover,single_event +player_index,INTEGER,,False,,,,,bot_takeover,single_event +bot_id,INTEGER,,True,,,,,bot_takeover,single_event +is_controlling,BOOLEAN,,False,,,,,bot_takeover,single_event +second,DECIMAL,,,,,,,bot_takeover,single_event +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.,,,bot_takeover,single_event +player_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bot_takeover,single_event +player_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bot_takeover,single_event +player_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bot_takeover,single_event +player_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bot_takeover,single_event +player_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bot_takeover,single_event +player_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bot_takeover,single_event +player_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bot_takeover,single_event +player_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bot_takeover,single_event +player_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,bot_takeover,single_event +player_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,bot_takeover,single_event +round,INTEGER,,False,,,,,bullet_damage,single_event +tick,INTEGER,,False,,,,,bullet_damage,single_event +player_id,INTEGER,,False,,,,,bullet_damage,single_event +attacker_id,INTEGER,,False,,,,,bullet_damage,single_event +distance,DECIMAL,,False,,,,,bullet_damage,single_event +damage_dir_x,DECIMAL,,False,,,,,bullet_damage,single_event +damage_dir_y,DECIMAL,,False,,,,,bullet_damage,single_event +damage_dir_z,DECIMAL,,False,,,,,bullet_damage,single_event +num_penetrations,INTEGER,,False,,,,,bullet_damage,single_event +is_no_scope,BOOLEAN,,False,,,,,bullet_damage,single_event +is_attacker_in_air,BOOLEAN,,False,,,,,bullet_damage,single_event +second,DECIMAL,,,,,,,bullet_damage,single_event +player_id_fixed,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +attacker_id_fixed,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +player_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +player_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +player_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +player_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +player_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +player_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +player_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +player_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +player_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +player_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +attacker_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +attacker_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +attacker_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +attacker_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +attacker_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +attacker_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +attacker_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +attacker_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +attacker_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +attacker_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,bullet_damage,single_event +round,INTEGER,,False,,,,,grenade_bounce,single_event +tick,INTEGER,,False,,,,,grenade_bounce,single_event +entity_id,INTEGER,,False,,,,,grenade_bounce,single_event +player_id,INTEGER,,False,,,,,grenade_bounce,single_event +bounce_nr,INTEGER,,False,,,,,grenade_bounce,single_event +x_pos,DECIMAL,,False,,,,,grenade_bounce,single_event +y_pos,DECIMAL,,False,,,,,grenade_bounce,single_event +z_pos,DECIMAL,,False,,,,,grenade_bounce,single_event +second,DECIMAL,,,,,,,grenade_bounce,single_event +player_id_fixed,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,grenade_bounce,single_event +round,INTEGER,,False,,,,,grenade_state,multi_event +tick,INTEGER,,False,,,,,grenade_state,multi_event event_type,VARCHAR,,False,,,,,grenade_state,multi_event -entity_id,DECIMAL,,False,,,,,grenade_state,multi_event -player_id,DECIMAL,,False,,,,,grenade_state,multi_event +entity_id,INTEGER,,False,,,,,grenade_state,multi_event +player_id,INTEGER,,False,,,,,grenade_state,multi_event x_pos,DECIMAL,,False,,,,,grenade_state,multi_event y_pos,DECIMAL,,False,,,,,grenade_state,multi_event z_pos,DECIMAL,,False,,,,,grenade_state,multi_event -second,DECIMAL,,True,,,,,grenade_state,multi_event -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,grenade_state,multi_event -entity_id_fixed,DECIMAL,,True,,,,,grenade_state,multi_event -tick_throw,DECIMAL,,True,,,,,grenade_state,multi_event -player_x_pos,DECIMAL,,True,,,,,grenade_state,multi_event -player_y_pos,DECIMAL,,True,,,,,grenade_state,multi_event -player_z_pos,DECIMAL,,True,,,,,grenade_state,multi_event -player_x_vel,DECIMAL,,True,,,,,grenade_state,multi_event -player_y_vel,DECIMAL,,True,,,,,grenade_state,multi_event -player_z_vel,DECIMAL,,True,,,,,grenade_state,multi_event -player_phi_ang,DECIMAL,,True,,,,,grenade_state,multi_event -player_theta_ang,DECIMAL,,True,,,,,grenade_state,multi_event -player_weapon_code,DECIMAL,,True,,,,,grenade_state,multi_event -player_team_code,DECIMAL,,True,,,,,grenade_state,multi_event +second,DECIMAL,,,,,,,grenade_state,multi_event +player_id_fixed,DECIMAL,,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.,,,grenade_state,multi_event +entity_id_fixed,INTEGER,,,,,,,grenade_state,multi_event +tick_throw,INTEGER,,,,,,,grenade_state,multi_event +player_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,grenade_state,multi_event +player_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,grenade_state,multi_event +player_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,grenade_state,multi_event +player_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,grenade_state,multi_event +player_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,grenade_state,multi_event +player_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,grenade_state,multi_event +player_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,grenade_state,multi_event +player_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,grenade_state,multi_event +player_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,grenade_state,multi_event +player_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,grenade_state,multi_event +round,INTEGER,,False,,,,,grenade_vector,telemetry +tick,INTEGER,,False,,,,,grenade_vector,telemetry +entity_id,INTEGER,,False,,,,,grenade_vector,telemetry +player_id,INTEGER,,False,,,,,grenade_vector,telemetry +grenade_type_code,INTEGER,,False,,,,,grenade_vector,telemetry +grenade_type,VARCHAR,,False,,,,,grenade_vector,telemetry +x_pos,DECIMAL,,False,,,,,grenade_vector,telemetry +y_pos,DECIMAL,,False,,,,,grenade_vector,telemetry +z_pos,DECIMAL,,False,,,,,grenade_vector,telemetry +second,DECIMAL,,,,,,,grenade_vector,telemetry +player_id_fixed,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,grenade_vector,telemetry magic,VARCHAR,,False,,,,,header,header -network_protocol,DECIMAL,,False,,,,,header,header +network_protocol,INTEGER,,False,,,,,header,header server_name,VARCHAR,,False,,,,,header,header client_name,VARCHAR,,False,,,,,header,header map_name,VARCHAR,,False,,,,,header,header game_directory,VARCHAR,,False,,,,,header,header -fullpackets_version,DECIMAL,,False,,,,,header,header -allow_clientside_entities,DECIMAL,,False,,,,,header,header -allow_clientside_particles,DECIMAL,,False,,,,,header,header +fullpackets_version,INTEGER,,False,,,,,header,header +allow_clientside_entities,BOOLEAN,,False,,,,,header,header +allow_clientside_particles,BOOLEAN,,False,,,,,header,header addons,VARCHAR,,False,,,,,header,header demo_version_name,VARCHAR,,False,,,,,header,header demo_version_guid,VARCHAR,,False,,,,,header,header -build_num,DECIMAL,,False,,,,,header,header +build_num,INTEGER,,False,,,,,header,header game,VARCHAR,,False,,,,,header,header -magic,VARCHAR,,True,,,,,header,header -protocol,DECIMAL,,True,,May be missing.,,,header,header -network_protocol,DECIMAL,,True,,,,,header,header -server_name,VARCHAR,,True,,,,,header,header -client_name,VARCHAR,,True,,,,,header,header -map_name,VARCHAR,,True,,,,,header,header -game_directory,VARCHAR,,True,,,,,header,header -playback_time,DECIMAL,,True,,May be missing.,,,header,header -playback_ticks,DECIMAL,,True,,May be missing.,,,header,header -playback_frames,DECIMAL,,True,,May be missing.,,,header,header -signon_length,DECIMAL,,True,,May be missing.,,,header,header -tick_rate,DECIMAL,,True,,,,,header,header -tick_save_rate,DECIMAL,,True,,,,,header,header -rushb_version,VARCHAR,,True,,,,,header,header -ppp_version,VARCHAR,,True,,,,,header,header -match_date,VARCHAR,,True,,,,,header,header -demo_id,VARCHAR,,True,,,,,header,header -sharecode,VARCHAR,,True,,,,,header,header -platform,VARCHAR,,True,,,,,header,header -match_type,VARCHAR,,True,,,,,header,header -game,VARCHAR,,True,,,,,header,header -second,DECIMAL,,True,,May be missing.,,,header,header -t_starters_avg_rank,DECIMAL,,True,,,,,header,header -t_starters_avg_wins,DECIMAL,,True,,,,,header,header -ct_starters_avg_rank,DECIMAL,,True,,,,,header,header -ct_starters_avg_wins,DECIMAL,,True,,,,,header,header -ct_starters_score_final,DECIMAL,,True,,,,,header,header -t_starters_score_final,DECIMAL,,True,,,,,header,header -providence,VARCHAR,,True,,,,,header,header -number_of_points,DECIMAL,,True,,,,,header,header -round,DECIMAL,,False,,,,,item_equip,single_event -tick,DECIMAL,,False,,,,,item_equip,single_event -player_id,DECIMAL,,False,,,,,item_equip,single_event +is_gotv_recording,BOOLEAN,,False,,,,,header,header +is_wingman,BOOLEAN,,False,,,,,header,header +max_unique_players,INTEGER,,False,,,,,header,header +tick_rate,INTEGER,,,,,,,header,header +tick_save_rate,INTEGER,,,,,,,header,header +rushb_version,VARCHAR,,,,,,,header,header +ppp_version,VARCHAR,,,,,,,header,header +match_date,VARCHAR,,,,,,,header,header +demo_id,VARCHAR,,,,Redacted by the PII scrubber.,,,header,header +sharecode,VARCHAR,,,,Redacted by the PII scrubber.,,,header,header +platform,VARCHAR,,,,,,,header,header +match_type,VARCHAR,,,,,,,header,header +t_starters_avg_rank,DECIMAL,,,,,,,header,header +t_starters_avg_wins,DECIMAL,,,,,,,header,header +ct_starters_avg_rank,DECIMAL,,,,,,,header,header +ct_starters_avg_wins,DECIMAL,,,,,,,header,header +ct_starters_score_final,INTEGER,,,,,,,header,header +t_starters_score_final,INTEGER,,,,,,,header,header +unique_steamids,INTEGER,,,,,,,header,header +providence,VARCHAR,,,,,,,header,header +number_of_points,INTEGER,,,,,,,header,header +round,INTEGER,,False,,,,,item_dropped,single_event +tick,INTEGER,,False,,,,,item_dropped,single_event +player_id,INTEGER,,False,,,,,item_dropped,single_event +entity_id,INTEGER,,False,,,,,item_dropped,single_event +item,VARCHAR,,False,,,,,item_dropped,single_event +def_index,INTEGER,,False,,,,,item_dropped,single_event +x_pos,DECIMAL,,False,,,,,item_dropped,single_event +y_pos,DECIMAL,,False,,,,,item_dropped,single_event +z_pos,DECIMAL,,False,,,,,item_dropped,single_event +reason,VARCHAR,,False,,,,,item_dropped,single_event +second,DECIMAL,,,,,,,item_dropped,single_event +player_id_fixed,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_dropped,single_event +player_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_dropped,single_event +player_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_dropped,single_event +player_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_dropped,single_event +player_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_dropped,single_event +player_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_dropped,single_event +player_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_dropped,single_event +player_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_dropped,single_event +player_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_dropped,single_event +player_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,item_dropped,single_event +player_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,item_dropped,single_event +round,INTEGER,,False,,,,,item_equip,single_event +tick,INTEGER,,False,,,,,item_equip,single_event +player_id,INTEGER,,False,,,,,item_equip,single_event item,VARCHAR,,False,,,,,item_equip,single_event -def_index,DECIMAL,,False,,,,,item_equip,single_event -can_zoom,DECIMAL,,False,,,,,item_equip,single_event -has_silencer,DECIMAL,,False,,,,,item_equip,single_event -is_silenced,DECIMAL,,False,,,,,item_equip,single_event -has_tracers,DECIMAL,,False,,,,,item_equip,single_event -weapon_type_code,DECIMAL,,False,,,,,item_equip,single_event -is_painted,DECIMAL,,False,,,,,item_equip,single_event -second,DECIMAL,,True,,,,,item_equip,single_event -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,item_equip,single_event -player_x_pos,DECIMAL,,True,,,,,item_equip,single_event -player_y_pos,DECIMAL,,True,,,,,item_equip,single_event -player_z_pos,DECIMAL,,True,,,,,item_equip,single_event -player_x_vel,DECIMAL,,True,,,,,item_equip,single_event -player_y_vel,DECIMAL,,True,,,,,item_equip,single_event -player_z_vel,DECIMAL,,True,,,,,item_equip,single_event -player_phi_ang,DECIMAL,,True,,,,,item_equip,single_event -player_theta_ang,DECIMAL,,True,,,,,item_equip,single_event -player_weapon_code,DECIMAL,,True,,,,,item_equip,single_event -player_team_code,DECIMAL,,True,,,,,item_equip,single_event -player_tick,DECIMAL,,True,,May be missing.,,,item_equip,single_event -player_player_id,DECIMAL,,True,,May be missing.,,,item_equip,single_event -round,DECIMAL,,False,,,,,item_pickup,single_event -tick,DECIMAL,,False,,,,,item_pickup,single_event -player_id,DECIMAL,,False,,,,,item_pickup,single_event +def_index,INTEGER,,False,,,,,item_equip,single_event +can_zoom,BOOLEAN,,False,,,,,item_equip,single_event +has_silencer,BOOLEAN,,False,,,,,item_equip,single_event +is_silenced,BOOLEAN,,False,,,,,item_equip,single_event +has_tracers,BOOLEAN,,False,,,,,item_equip,single_event +weapon_type_code,INTEGER,,False,,,,,item_equip,single_event +is_painted,BOOLEAN,,False,,,,,item_equip,single_event +second,DECIMAL,,,,,,,item_equip,single_event +player_id_fixed,DECIMAL,,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.,,,item_equip,single_event +player_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_equip,single_event +player_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_equip,single_event +player_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_equip,single_event +player_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_equip,single_event +player_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_equip,single_event +player_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_equip,single_event +player_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_equip,single_event +player_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_equip,single_event +player_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,item_equip,single_event +player_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,item_equip,single_event +round,INTEGER,,False,,,,,item_pickup,single_event +tick,INTEGER,,False,,,,,item_pickup,single_event +player_id,INTEGER,,False,,,,,item_pickup,single_event item,VARCHAR,,False,,,,,item_pickup,single_event -def_index,DECIMAL,,False,,,,,item_pickup,single_event -is_silent,DECIMAL,,False,,,,,item_pickup,single_event -second,DECIMAL,,True,,,,,item_pickup,single_event -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,item_pickup,single_event -player_x_pos,DECIMAL,,True,,,,,item_pickup,single_event -player_y_pos,DECIMAL,,True,,,,,item_pickup,single_event -player_z_pos,DECIMAL,,True,,,,,item_pickup,single_event -player_x_vel,DECIMAL,,True,,,,,item_pickup,single_event -player_y_vel,DECIMAL,,True,,,,,item_pickup,single_event -player_z_vel,DECIMAL,,True,,,,,item_pickup,single_event -player_phi_ang,DECIMAL,,True,,,,,item_pickup,single_event -player_theta_ang,DECIMAL,,True,,,,,item_pickup,single_event -player_weapon_code,DECIMAL,,True,,,,,item_pickup,single_event -player_team_code,DECIMAL,,True,,,,,item_pickup,single_event -player_tick,DECIMAL,,True,,May be missing.,,,item_pickup,single_event -player_player_id,DECIMAL,,True,,May be missing.,,,item_pickup,single_event -round,DECIMAL,,False,,,,,molotov_state,multi_event -tick,DECIMAL,,False,,,,,molotov_state,multi_event +def_index,INTEGER,,False,,,,,item_pickup,single_event +is_silent,BOOLEAN,,False,,,,,item_pickup,single_event +second,DECIMAL,,,,,,,item_pickup,single_event +player_id_fixed,DECIMAL,,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.,,,item_pickup,single_event +player_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_pickup,single_event +player_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_pickup,single_event +player_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_pickup,single_event +player_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_pickup,single_event +player_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_pickup,single_event +player_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_pickup,single_event +player_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_pickup,single_event +player_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_pickup,single_event +player_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,item_pickup,single_event +player_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,item_pickup,single_event +round,INTEGER,,False,,,,,item_refund,single_event +tick,INTEGER,,False,,,,,item_refund,single_event +player_id,INTEGER,,False,,,,,item_refund,single_event +item,VARCHAR,,False,,,,,item_refund,single_event +def_index,INTEGER,,False,,,,,item_refund,single_event +second,DECIMAL,,,,,,,item_refund,single_event +player_id_fixed,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_refund,single_event +player_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_refund,single_event +player_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_refund,single_event +player_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_refund,single_event +player_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_refund,single_event +player_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_refund,single_event +player_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_refund,single_event +player_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_refund,single_event +player_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,item_refund,single_event +player_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,item_refund,single_event +player_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,item_refund,single_event +round,INTEGER,,False,,,,,molotov_fire,telemetry +tick,INTEGER,,False,,,,,molotov_fire,telemetry +entity_id,INTEGER,,False,,,,,molotov_fire,telemetry +player_id,INTEGER,,False,,,,,molotov_fire,telemetry +fire_index,INTEGER,,False,,,,,molotov_fire,telemetry +x_pos,DECIMAL,,False,,,,,molotov_fire,telemetry +y_pos,DECIMAL,,False,,,,,molotov_fire,telemetry +z_pos,DECIMAL,,False,,,,,molotov_fire,telemetry +is_burning,BOOLEAN,,False,,,,,molotov_fire,telemetry +second,DECIMAL,,,,,,,molotov_fire,telemetry +player_id_fixed,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,molotov_fire,telemetry +entity_id_fixed,INTEGER,,,,,,,molotov_fire,telemetry +round,INTEGER,,False,,,,,molotov_state,multi_event +tick,INTEGER,,False,,,,,molotov_state,multi_event event_type,VARCHAR,,False,,,,,molotov_state,multi_event -entity_id,DECIMAL,,False,,,,,molotov_state,multi_event +entity_id,INTEGER,,False,,,,,molotov_state,multi_event x_pos,DECIMAL,,False,,,,,molotov_state,multi_event y_pos,DECIMAL,,False,,,,,molotov_state,multi_event z_pos,DECIMAL,,False,,,,,molotov_state,multi_event -second,DECIMAL,,True,,,,,molotov_state,multi_event -entity_id_fixed,DECIMAL,,True,,,,,molotov_state,multi_event -burn_duration,DECIMAL,,True,,,,,molotov_state,multi_event -was_extinguished_by_smoke,DECIMAL,,True,,,,,molotov_state,multi_event -extinguisher_id,DECIMAL,,True,,,,,molotov_state,multi_event -extinguisher_id_fixed,DECIMAL,,True,,,,,molotov_state,multi_event -smoke_entity_id,DECIMAL,,True,,,,,molotov_state,multi_event -was_extinguished_by_thrown_smoke,DECIMAL,,True,,May be missing.,,,molotov_state,multi_event -player_id,DECIMAL,,True,,,,,molotov_state,multi_event -player_id_fixed,DECIMAL,,True,,,,,molotov_state,multi_event -tick_throw,DECIMAL,,True,,,,,molotov_state,multi_event -player_x_pos,DECIMAL,,True,,,,,molotov_state,multi_event -player_y_pos,DECIMAL,,True,,,,,molotov_state,multi_event -player_z_pos,DECIMAL,,True,,,,,molotov_state,multi_event -player_x_vel,DECIMAL,,True,,,,,molotov_state,multi_event -player_y_vel,DECIMAL,,True,,,,,molotov_state,multi_event -player_z_vel,DECIMAL,,True,,,,,molotov_state,multi_event -player_phi_ang,DECIMAL,,True,,,,,molotov_state,multi_event -player_theta_ang,DECIMAL,,True,,,,,molotov_state,multi_event -player_weapon_code,DECIMAL,,True,,,,,molotov_state,multi_event -player_team_code,DECIMAL,,True,,,,,molotov_state,multi_event -round,DECIMAL,,False,,,,,other_death,single_event -tick,DECIMAL,,False,,,,,other_death,single_event +second,DECIMAL,,,,,,,molotov_state,multi_event +entity_id_fixed,INTEGER,,,,,,,molotov_state,multi_event +player_id,INTEGER,,,,,,,molotov_state,multi_event +player_id_fixed,INTEGER,,,,,,,molotov_state,multi_event +tick_throw,INTEGER,,,,,,,molotov_state,multi_event +player_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,molotov_state,multi_event +player_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,molotov_state,multi_event +player_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,molotov_state,multi_event +player_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,molotov_state,multi_event +player_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,molotov_state,multi_event +player_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,molotov_state,multi_event +player_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,molotov_state,multi_event +player_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,molotov_state,multi_event +player_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,molotov_state,multi_event +player_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,molotov_state,multi_event +burn_duration,DECIMAL,,,,,,,molotov_state,multi_event +was_extinguished_by_smoke,INTEGER,,,,,,,molotov_state,multi_event +extinguisher_id,INTEGER,,,,,,,molotov_state,multi_event +extinguisher_id_fixed,INTEGER,,,,,,,molotov_state,multi_event +smoke_entity_id,INTEGER,,,,,,,molotov_state,multi_event +smoke_entity_id_fixed,INTEGER,,,,,,,molotov_state,multi_event +was_extinguished_by_thrown_smoke,DECIMAL,,,,,,,molotov_state,multi_event +fraction_extinguished,DECIMAL,,,,,,,molotov_state,multi_event +was_thrown_into_smoke,INTEGER,,,,,,,molotov_state,multi_event +round,INTEGER,,False,,,,,other_death,single_event +tick,INTEGER,,False,,,,,other_death,single_event other_type,VARCHAR,,False,,,,,other_death,single_event -attacker_id,DECIMAL,,True,,,,,other_death,single_event +attacker_id,INTEGER,,True,,,,,other_death,single_event weapon_name,VARCHAR,,False,,,,,other_death,single_event -is_headshot,DECIMAL,,False,,,,,other_death,single_event -penetration_amount,DECIMAL,,False,,,,,other_death,single_event -is_through_smoke,DECIMAL,,True,,,,,other_death,single_event -is_attacker_blind,DECIMAL,,True,,,,,other_death,single_event -is_noscope,DECIMAL,,True,,,,,other_death,single_event -second,DECIMAL,,True,,,,,other_death,single_event -attacker_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,other_death,single_event -attacker_x_pos,DECIMAL,,True,,,,,other_death,single_event -attacker_y_pos,DECIMAL,,True,,,,,other_death,single_event -attacker_z_pos,DECIMAL,,True,,,,,other_death,single_event -attacker_x_vel,DECIMAL,,True,,,,,other_death,single_event -attacker_y_vel,DECIMAL,,True,,,,,other_death,single_event -attacker_z_vel,DECIMAL,,True,,,,,other_death,single_event -attacker_phi_ang,DECIMAL,,True,,,,,other_death,single_event -attacker_theta_ang,DECIMAL,,True,,,,,other_death,single_event -attacker_weapon_code,DECIMAL,,True,,,,,other_death,single_event -attacker_team_code,DECIMAL,,True,,,,,other_death,single_event -attacker_tick,DECIMAL,,True,,May be missing.,,,other_death,single_event -attacker_player_id,DECIMAL,,True,,May be missing.,,,other_death,single_event -round,DECIMAL,,False,,,,,player_action,multi_event -tick,DECIMAL,,False,,,,,player_action,multi_event -event_type,VARCHAR,,False,,,,,player_action,multi_event -player_id,DECIMAL,,False,,,,,player_action,multi_event -second,DECIMAL,,True,,,,,player_action,multi_event -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_action,multi_event -player_x_pos,DECIMAL,,True,,,,,player_action,multi_event -player_y_pos,DECIMAL,,True,,,,,player_action,multi_event -player_z_pos,DECIMAL,,True,,,,,player_action,multi_event -player_x_vel,DECIMAL,,True,,,,,player_action,multi_event -player_y_vel,DECIMAL,,True,,,,,player_action,multi_event -player_z_vel,DECIMAL,,True,,,,,player_action,multi_event -player_phi_ang,DECIMAL,,True,,,,,player_action,multi_event -player_theta_ang,DECIMAL,,True,,,,,player_action,multi_event -player_weapon_code,DECIMAL,,True,,,,,player_action,multi_event -player_team_code,DECIMAL,,True,,,,,player_action,multi_event -player_tick,DECIMAL,,True,,May be missing.,,,player_action,multi_event -player_player_id,DECIMAL,,True,,May be missing.,,,player_action,multi_event -round,DECIMAL,,False,,,,,player_blind,single_event -tick,DECIMAL,,False,,,,,player_blind,single_event -player_id,DECIMAL,,False,,,,,player_blind,single_event -entity_id,DECIMAL,,False,,,,,player_blind,single_event -attacker_id,DECIMAL,,False,,,,,player_blind,single_event +is_headshot,BOOLEAN,,False,,,,,other_death,single_event +penetration_amount,INTEGER,,False,,,,,other_death,single_event +is_through_smoke,BOOLEAN,,True,,,,,other_death,single_event +is_attacker_blind,BOOLEAN,,True,,,,,other_death,single_event +is_noscope,BOOLEAN,,True,,,,,other_death,single_event +second,DECIMAL,,,,,,,other_death,single_event +attacker_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.,,,other_death,single_event +attacker_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,other_death,single_event +attacker_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,other_death,single_event +attacker_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,other_death,single_event +attacker_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,other_death,single_event +attacker_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,other_death,single_event +attacker_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,other_death,single_event +attacker_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,other_death,single_event +attacker_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,other_death,single_event +attacker_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,other_death,single_event +attacker_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,other_death,single_event +round,INTEGER,,False,,,,,player_blind,single_event +tick,INTEGER,,False,,,,,player_blind,single_event +player_id,INTEGER,,False,,,,,player_blind,single_event +entity_id,INTEGER,,False,,,,,player_blind,single_event +attacker_id,INTEGER,,False,,,,,player_blind,single_event blind_duration,DECIMAL,,False,,,,,player_blind,single_event -second,DECIMAL,,True,,,,,player_blind,single_event -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_blind,single_event -attacker_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_blind,single_event -player_x_pos,DECIMAL,,True,,,,,player_blind,single_event -player_y_pos,DECIMAL,,True,,,,,player_blind,single_event -player_z_pos,DECIMAL,,True,,,,,player_blind,single_event -player_x_vel,DECIMAL,,True,,,,,player_blind,single_event -player_y_vel,DECIMAL,,True,,,,,player_blind,single_event -player_z_vel,DECIMAL,,True,,,,,player_blind,single_event -player_phi_ang,DECIMAL,,True,,,,,player_blind,single_event -player_theta_ang,DECIMAL,,True,,,,,player_blind,single_event -player_weapon_code,DECIMAL,,True,,,,,player_blind,single_event -player_team_code,DECIMAL,,True,,,,,player_blind,single_event -player_tick,DECIMAL,,True,,May be missing.,,,player_blind,single_event -player_player_id,DECIMAL,,True,,May be missing.,,,player_blind,single_event -attacker_x_pos,DECIMAL,,True,,,,,player_blind,single_event -attacker_y_pos,DECIMAL,,True,,,,,player_blind,single_event -attacker_z_pos,DECIMAL,,True,,,,,player_blind,single_event -attacker_x_vel,DECIMAL,,True,,,,,player_blind,single_event -attacker_y_vel,DECIMAL,,True,,,,,player_blind,single_event -attacker_z_vel,DECIMAL,,True,,,,,player_blind,single_event -attacker_phi_ang,DECIMAL,,True,,,,,player_blind,single_event -attacker_theta_ang,DECIMAL,,True,,,,,player_blind,single_event -attacker_weapon_code,DECIMAL,,True,,,,,player_blind,single_event -attacker_team_code,DECIMAL,,True,,,,,player_blind,single_event -attacker_tick,DECIMAL,,True,,May be missing.,,,player_blind,single_event -attacker_player_id,DECIMAL,,True,,May be missing.,,,player_blind,single_event -round,DECIMAL,,False,,,,,player_death,single_event -tick,DECIMAL,,False,,,,,player_death,single_event -player_id,DECIMAL,,False,,,,,player_death,single_event -attacker_id,DECIMAL,,True,,,,,player_death,single_event -assister_id,DECIMAL,,True,,,,,player_death,single_event +second,DECIMAL,,,,,,,player_blind,single_event +player_id_fixed,DECIMAL,,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_blind,single_event +attacker_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_blind,single_event +player_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_blind,single_event +player_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_blind,single_event +player_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_blind,single_event +player_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_blind,single_event +player_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_blind,single_event +player_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_blind,single_event +player_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_blind,single_event +player_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_blind,single_event +player_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,player_blind,single_event +player_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,player_blind,single_event +attacker_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_blind,single_event +attacker_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_blind,single_event +attacker_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_blind,single_event +attacker_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_blind,single_event +attacker_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_blind,single_event +attacker_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_blind,single_event +attacker_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_blind,single_event +attacker_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_blind,single_event +attacker_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,player_blind,single_event +attacker_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,player_blind,single_event +round,INTEGER,,False,,,,,player_chat,single_event +tick,INTEGER,,False,,,,,player_chat,single_event +player_id,INTEGER,,False,,,,,player_chat,single_event +text,VARCHAR,,False,,Redacted by the PII scrubber.,,,player_chat,single_event +is_chat_all,BOOLEAN,,True,,,,,player_chat,single_event +second,DECIMAL,,,,,,,player_chat,single_event +player_id_fixed,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_chat,single_event +player_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_chat,single_event +player_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_chat,single_event +player_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_chat,single_event +player_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_chat,single_event +player_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_chat,single_event +player_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_chat,single_event +player_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_chat,single_event +player_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_chat,single_event +player_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,player_chat,single_event +player_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,player_chat,single_event +round,INTEGER,,False,,,,,player_connect,single_event +tick,INTEGER,,False,,,,,player_connect,single_event +player_index,INTEGER,,False,,,,,player_connect,single_event +player_id,INTEGER,,False,,,,,player_connect,single_event +is_bot,BOOLEAN,,False,,,,,player_connect,single_event +second,DECIMAL,,,,,,,player_connect,single_event +player_id_fixed,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_connect,single_event +round,INTEGER,,False,,,,,player_death,single_event +tick,INTEGER,,False,,,,,player_death,single_event +player_id,INTEGER,,False,,,,,player_death,single_event +attacker_id,INTEGER,,True,,,,,player_death,single_event +assister_id,INTEGER,,True,,,,,player_death,single_event weapon_name,VARCHAR,,False,,,,,player_death,single_event -is_headshot,DECIMAL,,False,,,,,player_death,single_event -penetration_amount,DECIMAL,,False,,,,,player_death,single_event -has_replay,DECIMAL,,False,,,,,player_death,single_event -is_flash_assist,DECIMAL,,True,,,,,player_death,single_event -is_through_smoke,DECIMAL,,True,,,,,player_death,single_event -is_attacker_blind,DECIMAL,,True,,,,,player_death,single_event -is_noscope,DECIMAL,,True,,,,,player_death,single_event -second,DECIMAL,,True,,,,,player_death,single_event -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_death,single_event -attacker_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_death,single_event -assister_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_death,single_event -player_x_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -player_y_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -player_z_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -player_x_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -player_y_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -player_z_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -player_phi_ang,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -player_theta_ang,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -player_weapon_code,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -player_team_code,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -player_tick,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,player_death,single_event -player_player_id,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,player_death,single_event -attacker_x_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -attacker_y_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -attacker_z_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -attacker_x_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -attacker_y_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -attacker_z_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -attacker_phi_ang,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -attacker_theta_ang,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -attacker_weapon_code,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -attacker_team_code,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -attacker_tick,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,player_death,single_event -attacker_player_id,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,player_death,single_event -assister_x_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -assister_y_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -assister_z_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -assister_x_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -assister_y_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -assister_z_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -assister_phi_ang,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -assister_theta_ang,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -assister_weapon_code,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -assister_team_code,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event -assister_tick,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,player_death,single_event -assister_player_id,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,player_death,single_event -round,DECIMAL,,False,,,,,player_disconnect,single_event -tick,DECIMAL,,False,,,,,player_disconnect,single_event -player_id,DECIMAL,,False,,,,,player_disconnect,single_event +is_headshot,BOOLEAN,,False,,,,,player_death,single_event +penetration_amount,INTEGER,,False,,,,,player_death,single_event +has_replay,BOOLEAN,,False,,,,,player_death,single_event +is_flash_assist,BOOLEAN,,True,,,,,player_death,single_event +is_through_smoke,BOOLEAN,,True,,,,,player_death,single_event +is_attacker_blind,BOOLEAN,,True,,,,,player_death,single_event +is_noscope,BOOLEAN,,True,,,,,player_death,single_event +second,DECIMAL,,,,,,,player_death,single_event +player_id_fixed,DECIMAL,,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_death,single_event +attacker_id_fixed,DECIMAL,,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. Integer values, written as a double because the column can hold nulls.",,,player_death,single_event +assister_id_fixed,DECIMAL,,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_death,single_event +player_x_pos,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +player_y_pos,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +player_z_pos,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +player_x_vel,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +player_y_vel,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +player_z_vel,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +player_phi_ang,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +player_theta_ang,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +player_weapon_code,INTEGER,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +player_team_code,INTEGER,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +attacker_x_pos,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +attacker_y_pos,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +attacker_z_pos,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +attacker_x_vel,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +attacker_y_vel,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +attacker_z_vel,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +attacker_phi_ang,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +attacker_theta_ang,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +attacker_weapon_code,INTEGER,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +attacker_team_code,INTEGER,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +assister_x_pos,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +assister_y_pos,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +assister_z_pos,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +assister_x_vel,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +assister_y_vel,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +assister_z_vel,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +assister_phi_ang,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +assister_theta_ang,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +assister_weapon_code,INTEGER,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +assister_team_code,INTEGER,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_death,single_event +round,INTEGER,,False,,,,,player_disconnect,single_event +tick,INTEGER,,False,,,,,player_disconnect,single_event +player_id,INTEGER,,False,,,,,player_disconnect,single_event disconnect_reason,VARCHAR,,False,,,,,player_disconnect,single_event -is_bot,DECIMAL,,False,,,,,player_disconnect,single_event -second,DECIMAL,,True,,,,,player_disconnect,single_event -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_disconnect,single_event -round,DECIMAL,,False,,,,,player_footstep,single_event -tick,DECIMAL,,False,,,,,player_footstep,single_event -player_id,DECIMAL,,False,,,,,player_footstep,single_event -second,DECIMAL,,True,,,,,player_footstep,single_event -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_footstep,single_event -round,DECIMAL,,False,,,,,player_hurt,single_event -tick,DECIMAL,,False,,,,,player_hurt,single_event -player_id,DECIMAL,,False,,,,,player_hurt,single_event -attacker_id,DECIMAL,,False,,,,,player_hurt,single_event -health,DECIMAL,,False,,,,,player_hurt,single_event -armor,DECIMAL,,False,,,,,player_hurt,single_event +is_bot,BOOLEAN,,False,,,,,player_disconnect,single_event +second,DECIMAL,,,,,,,player_disconnect,single_event +player_id_fixed,DECIMAL,,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_disconnect,single_event +round,INTEGER,,False,,,,,player_footstep,single_event +tick,INTEGER,,False,,,,,player_footstep,single_event +player_id,INTEGER,,False,,,,,player_footstep,single_event +second,DECIMAL,,,,,,,player_footstep,single_event +player_id_fixed,DECIMAL,,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_footstep,single_event +round,INTEGER,,False,,,,,player_hurt,single_event +tick,INTEGER,,False,,,,,player_hurt,single_event +player_id,INTEGER,,False,,,,,player_hurt,single_event +attacker_id,INTEGER,,False,,,,,player_hurt,single_event +health,INTEGER,,False,,,,,player_hurt,single_event +armor,INTEGER,,False,,,,,player_hurt,single_event weapon_name,VARCHAR,,True,,,,,player_hurt,single_event -health_removed,DECIMAL,,False,,,,,player_hurt,single_event -armor_removed,DECIMAL,,False,,,,,player_hurt,single_event -hit_box_code,DECIMAL,,False,,,,,player_hurt,single_event -second,DECIMAL,,True,,,,,player_hurt,single_event -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_hurt,single_event -attacker_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_hurt,single_event -player_x_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event -player_y_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event -player_z_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event -player_x_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event -player_y_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event -player_z_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event -player_phi_ang,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event -player_theta_ang,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event -player_weapon_code,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event -player_team_code,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event -player_tick,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,player_hurt,single_event -player_player_id,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,player_hurt,single_event -attacker_x_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event -attacker_y_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event -attacker_z_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event -attacker_x_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event -attacker_y_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event -attacker_z_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event -attacker_phi_ang,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event -attacker_theta_ang,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event -attacker_weapon_code,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event -attacker_team_code,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event -attacker_tick,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,player_hurt,single_event -attacker_player_id,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,player_hurt,single_event -effective_health_removed,DECIMAL,,True,,,,,player_hurt,single_event -round,DECIMAL,,False,,,,,player_info,player_info -tick,DECIMAL,,False,,May be missing.,,,player_info,player_info -player_id,DECIMAL,,False,,,,,player_info,player_info -team_code,DECIMAL,,False,,,,,player_info,player_info -wins,DECIMAL,,False, Capped to 2501.,,,,player_info,player_info -rank,DECIMAL,,False,,,,,player_info,player_info -radar_color_code,DECIMAL,,False,,,,,player_info,player_info -second,DECIMAL,,True,,May be missing.,,,player_info,player_info -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_info,player_info -rank_raw,DECIMAL,,True,,,,,player_info,player_info -rank_platform,DECIMAL,,True,,,,,player_info,player_info -round,DECIMAL,,False,,,,,player_name,single_event -tick,DECIMAL,,False,,,,,player_name,single_event -player_id,DECIMAL,,False,,,,,player_name,single_event -name_new,DECIMAL,,False,,,,,player_name,single_event -name_old,DECIMAL,,False,,,,,player_name,single_event -second,DECIMAL,,True,,,,,player_name,single_event -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_name,single_event -round,DECIMAL,,False,,,,,player_personal,player_info -tick,DECIMAL,,False,,May be missing.,,,player_personal,player_info -player_id,DECIMAL,,False,,,,,player_personal,player_info -player_controller_id,DECIMAL,,False,,,,,player_personal,player_info -player_id_pawn,DECIMAL,,False,,,,,player_personal,player_info -name,VARCHAR,,False,,,,,player_personal,player_info -clan_tag,VARCHAR,,False,,,,,player_personal,player_info -steam_id,VARCHAR,,False,,,,,player_personal,player_info -second,DECIMAL,,True,,May be missing.,,,player_personal,player_info -is_bot,DECIMAL,,True,,,,,player_personal,player_info -player_id_fixed,DECIMAL,,True,,,,,player_personal,player_info -round,DECIMAL,,False,,,,,player_spawn,single_event -tick,DECIMAL,,False,,,,,player_spawn,single_event -player_id,DECIMAL,,False,,,,,player_spawn,single_event -second,DECIMAL,,True,,,,,player_spawn,single_event -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_spawn,single_event -player_x_pos,DECIMAL,,True,,,,,player_spawn,single_event -player_y_pos,DECIMAL,,True,,,,,player_spawn,single_event -player_z_pos,DECIMAL,,True,,,,,player_spawn,single_event -player_x_vel,DECIMAL,,True,,,,,player_spawn,single_event -player_y_vel,DECIMAL,,True,,,,,player_spawn,single_event -player_z_vel,DECIMAL,,True,,,,,player_spawn,single_event -player_phi_ang,DECIMAL,,True,,,,,player_spawn,single_event -player_theta_ang,DECIMAL,,True,,,,,player_spawn,single_event -player_weapon_code,DECIMAL,,True,,,,,player_spawn,single_event -player_team_code,DECIMAL,,True,,,,,player_spawn,single_event -player_tick,DECIMAL,,True,,May be missing.,,,player_spawn,single_event -player_player_id,DECIMAL,,True,,May be missing.,,,player_spawn,single_event -tick,DECIMAL,,False,,,,,player_status,telemetry -round,DECIMAL,,False,,,,,player_status,telemetry -player_id,DECIMAL,,False,,,,,player_status,telemetry -player_controller_id,DECIMAL,,False,,,,,player_status,telemetry -armor,DECIMAL,,False,,,,,player_status,telemetry -health,DECIMAL,,False,,,,,player_status,telemetry +health_removed,INTEGER,,False,,,,,player_hurt,single_event +armor_removed,INTEGER,,False,,,,,player_hurt,single_event +hit_box_code,INTEGER,,False,,,,,player_hurt,single_event +second,DECIMAL,,,,,,,player_hurt,single_event +player_id_fixed,DECIMAL,,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_hurt,single_event +attacker_id_fixed,DECIMAL,,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. Integer values, written as a double because the column can hold nulls.",,,player_hurt,single_event +player_x_pos,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_hurt,single_event +player_y_pos,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_hurt,single_event +player_z_pos,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_hurt,single_event +player_x_vel,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_hurt,single_event +player_y_vel,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_hurt,single_event +player_z_vel,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_hurt,single_event +player_phi_ang,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_hurt,single_event +player_theta_ang,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_hurt,single_event +player_weapon_code,INTEGER,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_hurt,single_event +player_team_code,INTEGER,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_hurt,single_event +attacker_x_pos,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_hurt,single_event +attacker_y_pos,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_hurt,single_event +attacker_z_pos,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_hurt,single_event +attacker_x_vel,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_hurt,single_event +attacker_y_vel,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_hurt,single_event +attacker_z_vel,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_hurt,single_event +attacker_phi_ang,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_hurt,single_event +attacker_theta_ang,DECIMAL,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_hurt,single_event +attacker_weapon_code,INTEGER,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_hurt,single_event +attacker_team_code,INTEGER,,True,asof merge (nearby ticks),Merged from another channel. Null where no source row matches.,,,player_hurt,single_event +effective_health_removed,INTEGER,,,,,,,player_hurt,single_event +round,INTEGER,,False,,,,,player_info,player_info +player_id,INTEGER,,False,,,,,player_info,player_info +team_code,INTEGER,,False,,,,,player_info,player_info +wins,INTEGER,,False,,Capped to a maximum value.,,,player_info,player_info +rank,INTEGER,,False,,,,,player_info,player_info +rank_type,INTEGER,,False,,,,,player_info,player_info +radar_color_code,INTEGER,,False,,,,,player_info,player_info +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_info,player_info +rank_raw,INTEGER,,,,,,,player_info,player_info +rank_platform,DECIMAL,,,,,,,player_info,player_info +round,INTEGER,,False,,,,,player_inputs,telemetry +tick,INTEGER,,False,,,,,player_inputs,telemetry +player_id,INTEGER,,False,,,,,player_inputs,telemetry +buttons_mask,INTEGER,,False,,,,,player_inputs,telemetry +button_attack,BOOLEAN,,False,,,,,player_inputs,telemetry +button_attack2,BOOLEAN,,False,,,,,player_inputs,telemetry +button_jump,BOOLEAN,,False,,,,,player_inputs,telemetry +button_duck,BOOLEAN,,False,,,,,player_inputs,telemetry +button_forward,BOOLEAN,,False,,,,,player_inputs,telemetry +button_back,BOOLEAN,,False,,,,,player_inputs,telemetry +button_move_left,BOOLEAN,,False,,,,,player_inputs,telemetry +button_move_right,BOOLEAN,,False,,,,,player_inputs,telemetry +button_turn_left,BOOLEAN,,False,,,,,player_inputs,telemetry +button_turn_right,BOOLEAN,,False,,,,,player_inputs,telemetry +button_use,BOOLEAN,,False,,,,,player_inputs,telemetry +button_reload,BOOLEAN,,False,,,,,player_inputs,telemetry +button_speed,BOOLEAN,,False,,,,,player_inputs,telemetry +button_score,BOOLEAN,,False,,,,,player_inputs,telemetry +button_look_at_weapon,BOOLEAN,,False,,,,,player_inputs,telemetry +button_zoom,BOOLEAN,,False,,,,,player_inputs,telemetry +button_use_or_reload,BOOLEAN,,False,,,,,player_inputs,telemetry +button_joy_auto_sprint,BOOLEAN,,False,,,,,player_inputs,telemetry +second,DECIMAL,,,,,,,player_inputs,telemetry +player_id_fixed,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_inputs,telemetry +player_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_inputs,telemetry +player_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_inputs,telemetry +player_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_inputs,telemetry +player_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_inputs,telemetry +player_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_inputs,telemetry +player_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_inputs,telemetry +player_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_inputs,telemetry +player_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_inputs,telemetry +player_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,player_inputs,telemetry +player_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,player_inputs,telemetry +round,INTEGER,,False,,,,,player_name,single_event +tick,INTEGER,,False,,,,,player_name,single_event +player_id,INTEGER,,False,,,,,player_name,single_event +name_new,VARCHAR,,False,,Redacted by the PII scrubber.,,,player_name,single_event +name_old,VARCHAR,,False,,Redacted by the PII scrubber.,,,player_name,single_event +second,DECIMAL,,,,,,,player_name,single_event +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_name,single_event +round,INTEGER,,False,,,,,player_personal,player_info +player_id,INTEGER,,False,,,,,player_personal,player_info +player_controller_id,INTEGER,,False,,,,,player_personal,player_info +player_id_pawn,INTEGER,,False,,,,,player_personal,player_info +name,VARCHAR,,False,,Redacted by the PII scrubber.,,,player_personal,player_info +clan_tag,VARCHAR,,False,,Redacted by the PII scrubber.,,,player_personal,player_info +steam_id,VARCHAR,,False,,Redacted by the PII scrubber.,,,player_personal,player_info +is_bot,BOOLEAN,,,,,,,player_personal,player_info +player_id_fixed,INTEGER,,,,,,,player_personal,player_info +round,INTEGER,,False,,,,,player_sound,single_event +tick,INTEGER,,False,,,,,player_sound,single_event +player_id,INTEGER,,False,,,,,player_sound,single_event +radius,INTEGER,,False,,,,,player_sound,single_event +duration,DECIMAL,,False,,,,,player_sound,single_event +is_step,BOOLEAN,,False,,,,,player_sound,single_event +second,DECIMAL,,,,,,,player_sound,single_event +player_id_fixed,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_sound,single_event +player_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_sound,single_event +player_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_sound,single_event +player_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_sound,single_event +player_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_sound,single_event +player_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_sound,single_event +player_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_sound,single_event +player_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_sound,single_event +player_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_sound,single_event +player_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,player_sound,single_event +player_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,player_sound,single_event +round,INTEGER,,False,,,,,player_spawn,single_event +tick,INTEGER,,False,,,,,player_spawn,single_event +player_id,INTEGER,,False,,,,,player_spawn,single_event +second,DECIMAL,,,,,,,player_spawn,single_event +player_id_fixed,DECIMAL,,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_spawn,single_event +player_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_spawn,single_event +player_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_spawn,single_event +player_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_spawn,single_event +player_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_spawn,single_event +player_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_spawn,single_event +player_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_spawn,single_event +player_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_spawn,single_event +player_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_spawn,single_event +player_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,player_spawn,single_event +player_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,player_spawn,single_event +tick,INTEGER,,False,,,,,player_status,telemetry +round,INTEGER,,False,,,,,player_status,telemetry +player_id,INTEGER,,False,,,,,player_status,telemetry +player_controller_id,INTEGER,,False,,,,,player_status,telemetry +armor,INTEGER,,False,,,,,player_status,telemetry +health,INTEGER,,False,,,,,player_status,telemetry place_name,VARCHAR,,False,,,,,player_status,telemetry -inv_primary,DECIMAL,,False,,,,,player_status,telemetry -inv_secondary,DECIMAL,,False,,,,,player_status,telemetry -inv_flashbang,DECIMAL,,False,,,,,player_status,telemetry -inv_taser,DECIMAL,,False,,,,,player_status,telemetry -inv_hegrenade,DECIMAL,,False,,,,,player_status,telemetry -inv_smokegrenade,DECIMAL,,False,,,,,player_status,telemetry -inv_molotov,DECIMAL,,False,,,,,player_status,telemetry -inv_decoy,DECIMAL,,False,,,,,player_status,telemetry -inv_incgrenade,DECIMAL,,False,,,,,player_status,telemetry -inv_c4,DECIMAL,,False,,,,,player_status,telemetry -current_equipment_cost,DECIMAL,,False,,,,,player_status,telemetry -freezetime_end_equipment_cost,DECIMAL,,False,,,,,player_status,telemetry -money,DECIMAL,,False,,,,,player_status,telemetry -ping,DECIMAL,,False,,,,,player_status,telemetry -round_start_equipment_cost,DECIMAL,,False,,,,,player_status,telemetry -zoom_level,DECIMAL,,True,,,,,player_status,telemetry -iron_sight_mode,DECIMAL,,True,,,,,player_status,telemetry -burst_mode,DECIMAL,,True,,,,,player_status,telemetry -is_silenced,DECIMAL,,True,,,,,player_status,telemetry -reload_visually_complete,DECIMAL,,True,,,,,player_status,telemetry -weapon_mode,DECIMAL,,True,,,,,player_status,telemetry +inv_primary,INTEGER,,False,,,,,player_status,telemetry +inv_secondary,INTEGER,,False,,,,,player_status,telemetry +inv_flashbang,INTEGER,,False,,,,,player_status,telemetry +inv_taser,INTEGER,,False,,,,,player_status,telemetry +inv_hegrenade,INTEGER,,False,,,,,player_status,telemetry +inv_smokegrenade,INTEGER,,False,,,,,player_status,telemetry +inv_molotov,INTEGER,,False,,,,,player_status,telemetry +inv_decoy,INTEGER,,False,,,,,player_status,telemetry +inv_incgrenade,INTEGER,,False,,,,,player_status,telemetry +inv_c4,INTEGER,,False,,,,,player_status,telemetry +current_equipment_cost,INTEGER,,False,,,,,player_status,telemetry +freezetime_end_equipment_cost,INTEGER,,False,,,,,player_status,telemetry +money,INTEGER,,False,,,,,player_status,telemetry +ping,INTEGER,,False,,Redacted by the PII scrubber.,,,player_status,telemetry +round_start_equipment_cost,INTEGER,,False,,,,,player_status,telemetry +zoom_level,INTEGER,,True,,,,,player_status,telemetry +iron_sight_mode,INTEGER,,True,,,,,player_status,telemetry +burst_mode,BOOLEAN,,True,,,,,player_status,telemetry +is_silenced,BOOLEAN,,True,,,,,player_status,telemetry +weapon_mode,INTEGER,,True,,,,,player_status,telemetry flash_duration,DECIMAL,,False,,,,,player_status,telemetry flash_max_alpha,DECIMAL,,False,,,,,player_status,telemetry -has_c4,DECIMAL,,False,,,,,player_status,telemetry -has_defuser,DECIMAL,,False,,,,,player_status,telemetry -has_helmet,DECIMAL,,False,,,,,player_status,telemetry -is_defusing,DECIMAL,,False,,,,,player_status,telemetry -is_fake_player,DECIMAL,,False,,,,,player_status,telemetry -is_in_bomb_zone,DECIMAL,,False,,,,,player_status,telemetry -is_in_buy_zone,DECIMAL,,False,,,,,player_status,telemetry -is_scoped,DECIMAL,,False,,,,,player_status,telemetry -is_spotted,DECIMAL,,False,,,,,player_status,telemetry -is_walking,DECIMAL,,False,,,,,player_status,telemetry -second,DECIMAL,,True,,,,,player_status,telemetry -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_status,telemetry -equipment_value_calc,DECIMAL,,True,,,,,player_status,telemetry -tick,DECIMAL,,False,,,,,player_vector,telemetry -round,DECIMAL,,False,,,,,player_vector,telemetry -player_id,DECIMAL,,False,,,,,player_vector,telemetry +has_c4,BOOLEAN,,False,,,,,player_status,telemetry +has_defuser,BOOLEAN,,False,,,,,player_status,telemetry +has_helmet,BOOLEAN,,False,,,,,player_status,telemetry +is_defusing,BOOLEAN,,False,,,,,player_status,telemetry +is_fake_player,BOOLEAN,,False,,,,,player_status,telemetry +is_in_bomb_zone,BOOLEAN,,False,,,,,player_status,telemetry +is_in_buy_zone,BOOLEAN,,False,,,,,player_status,telemetry +is_reloading,BOOLEAN,,False,,,,,player_status,telemetry +is_scoped,BOOLEAN,,False,,,,,player_status,telemetry +is_spotted,BOOLEAN,,False,,,,,player_status,telemetry +is_walking,BOOLEAN,,False,,,,,player_status,telemetry +second,DECIMAL,,,,,,,player_status,telemetry +player_id_fixed,DECIMAL,,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,,,,,,,player_status,telemetry +tick,INTEGER,,False,,,,,player_vector,telemetry +round,INTEGER,,False,,,,,player_vector,telemetry +player_id,INTEGER,,False,,,,,player_vector,telemetry x_pos,DECIMAL,,False,,,,,player_vector,telemetry y_pos,DECIMAL,,False,,,,,player_vector,telemetry z_pos,DECIMAL,,False,,,,,player_vector,telemetry -x_aimpunch,DECIMAL,,False,,,,,player_vector,telemetry -y_aimpunch,DECIMAL,,False,,,,,player_vector,telemetry -current_ammo,DECIMAL,,True,,,,,player_vector,telemetry -weapon_code,DECIMAL,,True,,,,,player_vector,telemetry +current_ammo,INTEGER,,True,,,,,player_vector,telemetry +weapon_code,INTEGER,,True,,,,,player_vector,telemetry inaccuracy,DECIMAL,,True,,,,,player_vector,telemetry last_shot_time,DECIMAL,,True,,,,,player_vector,telemetry recoil_index,DECIMAL,,True,,,,,player_vector,telemetry phi_ang,DECIMAL,,False,,,,,player_vector,telemetry theta_ang,DECIMAL,,False,,,,,player_vector,telemetry -is_ducked,DECIMAL,,False,,,,,player_vector,telemetry -is_ducking,DECIMAL,,False,,,,,player_vector,telemetry +is_ducked,BOOLEAN,,False,,,,,player_vector,telemetry +is_ducking,BOOLEAN,,False,,,,,player_vector,telemetry duck_amount,DECIMAL,,False,,,,,player_vector,telemetry duck_speed,DECIMAL,,False,,,,,player_vector,telemetry fall_velocity,DECIMAL,,False,,,,,player_vector,telemetry -view_punch_angle_tick,DECIMAL,,False,,,,,player_vector,telemetry -aim_punch_angle_vel_x,DECIMAL,,False,,,,,player_vector,telemetry -aim_punch_angle_vel_y,DECIMAL,,False,,,,,player_vector,telemetry -aim_punch_angle_vel_z,DECIMAL,,False,,,,,player_vector,telemetry -is_rescuing,DECIMAL,,False,,,,,player_vector,telemetry -second,DECIMAL,,True,,,,,player_vector,telemetry -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_vector,telemetry -team_code,DECIMAL,,True,,,,,player_vector,telemetry -theta_vel,DECIMAL,,True,,,,,player_vector,telemetry -phi_vel,DECIMAL,,True,,,,,player_vector,telemetry -ang_vel,DECIMAL,,True,,,,,player_vector,telemetry -x_vel,DECIMAL,,True,,,,,player_vector,telemetry -y_vel,DECIMAL,,True,,,,,player_vector,telemetry -z_vel,DECIMAL,,True,,,,,player_vector,telemetry -x_vel,DECIMAL,,True,,,,,player_vector,telemetry -y_vel,DECIMAL,,True,,,,,player_vector,telemetry -z_vel,DECIMAL,,True,,,,,player_vector,telemetry -x_vel,DECIMAL,,True,,,,,player_vector,telemetry -y_vel,DECIMAL,,True,,,,,player_vector,telemetry -z_vel,DECIMAL,,True,,,,,player_vector,telemetry -x_vel,DECIMAL,,True,,,,,player_vector,telemetry -y_vel,DECIMAL,,True,,,,,player_vector,telemetry -z_vel,DECIMAL,,True,,,,,player_vector,telemetry -x_vel,DECIMAL,,True,,,,,player_vector,telemetry -y_vel,DECIMAL,,True,,,,,player_vector,telemetry -z_vel,DECIMAL,,True,,,,,player_vector,telemetry -x_vel,DECIMAL,,True,,,,,player_vector,telemetry -y_vel,DECIMAL,,True,,,,,player_vector,telemetry -z_vel,DECIMAL,,True,,,,,player_vector,telemetry -x_vel,DECIMAL,,True,,,,,player_vector,telemetry -y_vel,DECIMAL,,True,,,,,player_vector,telemetry -z_vel,DECIMAL,,True,,,,,player_vector,telemetry -x_vel,DECIMAL,,True,,,,,player_vector,telemetry -y_vel,DECIMAL,,True,,,,,player_vector,telemetry -z_vel,DECIMAL,,True,,,,,player_vector,telemetry -x_vel,DECIMAL,,True,,,,,player_vector,telemetry -y_vel,DECIMAL,,True,,,,,player_vector,telemetry -z_vel,DECIMAL,,True,,,,,player_vector,telemetry -x_vel,DECIMAL,,True,,,,,player_vector,telemetry -y_vel,DECIMAL,,True,,,,,player_vector,telemetry -z_vel,DECIMAL,,True,,,,,player_vector,telemetry -speed_2d,DECIMAL,,True,,,,,player_vector,telemetry -movement_angle,DECIMAL,,True,,,,,player_vector,telemetry -movement_angle_diff,DECIMAL,,True,,,,,player_vector,telemetry -round,DECIMAL,,False,,,,,round_end,single_event -tick,DECIMAL,,False,,,,,round_end,single_event -winner_team_code,DECIMAL,,False,,,,,round_end,single_event -win_reason_code,DECIMAL,,False,,,,,round_end,single_event +view_punch_angle_tick,INTEGER,,False,,,,,player_vector,telemetry +is_rescuing,BOOLEAN,,False,,,,,player_vector,telemetry +second,DECIMAL,,,,,,,player_vector,telemetry +player_id_fixed,DECIMAL,,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_vector,telemetry +team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,player_vector,telemetry +theta_vel,DECIMAL,,,,,,,player_vector,telemetry +phi_vel,DECIMAL,,,,,,,player_vector,telemetry +ang_vel,DECIMAL,,,,,,,player_vector,telemetry +x_vel,DECIMAL,,,,,,,player_vector,telemetry +y_vel,DECIMAL,,,,,,,player_vector,telemetry +z_vel,DECIMAL,,,,,,,player_vector,telemetry +speed_2d,DECIMAL,,,,,,,player_vector,telemetry +movement_angle,DECIMAL,,,,,,,player_vector,telemetry +movement_angle_diff,DECIMAL,,,,,,,player_vector,telemetry +round,INTEGER,,False,,,,,rank_update,single_event +tick,INTEGER,,False,,,,,rank_update,single_event +player_id,INTEGER,,False,,,,,rank_update,single_event +rank_old,INTEGER,,False,,,,,rank_update,single_event +rank_new,INTEGER,,False,,,,,rank_update,single_event +rank_change,DECIMAL,,False,,,,,rank_update,single_event +win_count,INTEGER,,False,,Capped to a maximum value.,,,rank_update,single_event +second,DECIMAL,,,,,,,rank_update,single_event +player_id_fixed,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,rank_update,single_event +player_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,rank_update,single_event +player_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,rank_update,single_event +player_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,rank_update,single_event +player_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,rank_update,single_event +player_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,rank_update,single_event +player_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,rank_update,single_event +player_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,rank_update,single_event +player_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,rank_update,single_event +player_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,rank_update,single_event +player_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,rank_update,single_event +round,INTEGER,,False,,,,,round_end,single_event +tick,INTEGER,,False,,,,,round_end,single_event +winner_team_code,INTEGER,,False,,,,,round_end,single_event +win_reason_code,INTEGER,,False,,,,,round_end,single_event win_reason_message,VARCHAR,,False,,,,,round_end,single_event -legacy_code,DECIMAL,,False,,,,,round_end,single_event -player_count,DECIMAL,,False,,,,,round_end,single_event -second,DECIMAL,,True,,,,,round_end,single_event -round,DECIMAL,,False,,,,,round_mvp,single_event -tick,DECIMAL,,False,,,,,round_mvp,single_event -player_id,DECIMAL,,False,,,,,round_mvp,single_event -mvp_reason_code,DECIMAL,,False,,,,,round_mvp,single_event -music_kit_mvps,DECIMAL,,False,,,,,round_mvp,single_event -second,DECIMAL,,True,,,,,round_mvp,single_event -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,round_mvp,single_event -round,DECIMAL,,False,,,,,round_start,single_event -tick,DECIMAL,,False,,,,,round_start,single_event -time_limit,DECIMAL,,False,,,,,round_start,single_event -frag_limit,DECIMAL,,False,,,,,round_start,single_event -objective,VARCHAR,,False,,,,,round_start,single_event -second,DECIMAL,,True,,,,,round_start,single_event -round,DECIMAL,,False,,,,,round_state,multi_event -tick,DECIMAL,,False,,,,,round_state,multi_event +player_count,INTEGER,,False,,,,,round_end,single_event +second,DECIMAL,,,,,,,round_end,single_event +round,INTEGER,,False,,,,,round_mvp,single_event +tick,INTEGER,,False,,,,,round_mvp,single_event +player_id,INTEGER,,False,,,,,round_mvp,single_event +mvp_count,INTEGER,,False,,,,,round_mvp,single_event +second,DECIMAL,,,,,,,round_mvp,single_event +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.,,,round_mvp,single_event +round,INTEGER,,False,,,,,round_start,single_event +tick,INTEGER,,False,,,,,round_start,single_event +second,DECIMAL,,,,,,,round_start,single_event +round,INTEGER,,False,,,,,round_state,multi_event +tick,INTEGER,,False,,,,,round_state,multi_event event_type,VARCHAR,,False,,,,,round_state,multi_event -t_score,DECIMAL,,False,,,,,round_state,multi_event -ct_score,DECIMAL,,False,,,,,round_state,multi_event -t_score_raw,DECIMAL,,False,,,,,round_state,multi_event -ct_score_raw,DECIMAL,,False,,,,,round_state,multi_event +t_score,INTEGER,,False,,Recomputed by the pipeline; the raw value is in the *_raw column.,,,round_state,multi_event +ct_score,INTEGER,,False,,Recomputed by the pipeline; the raw value is in the *_raw column.,,,round_state,multi_event +t_score_raw,INTEGER,,False,,,,,round_state,multi_event +ct_score_raw,INTEGER,,False,,,,,round_state,multi_event phase,VARCHAR,,False,,,,,round_state,multi_event -is_warmup,DECIMAL,,False,,,,,round_state,multi_event -second,DECIMAL,,True,,,,,round_state,multi_event -round,DECIMAL,,False,,,,,tick,single_event -tick,DECIMAL,,False,,,,,tick,single_event -second,DECIMAL,,True,,,,,tick,single_event -previous_phase,VARCHAR,,True,,,,,tick,single_event -second_since_previous_phase,DECIMAL,,True,,,,,tick,single_event -round,DECIMAL,,False,,,,,weapon_action,multi_event -tick,DECIMAL,,False,,,,,weapon_action,multi_event +is_warmup,BOOLEAN,,False,,,,,round_state,multi_event +second,DECIMAL,,,,,,,round_state,multi_event +round,INTEGER,,False,,,,,score_update,single_event +tick,INTEGER,,False,,,,,score_update,single_event +team_code,INTEGER,,False,,,,,score_update,single_event +old_score,INTEGER,,False,,,,,score_update,single_event +new_score,INTEGER,,False,,,,,score_update,single_event +second,DECIMAL,,,,,,,score_update,single_event +round,INTEGER,,False,,,,,team_change,single_event +tick,INTEGER,,False,,,,,team_change,single_event +player_id,INTEGER,,False,,,,,team_change,single_event +old_team_code,INTEGER,,False,,,,,team_change,single_event +new_team_code,INTEGER,,False,,,,,team_change,single_event +is_bot,BOOLEAN,,False,,,,,team_change,single_event +silent,BOOLEAN,,False,,,,,team_change,single_event +second,DECIMAL,,,,,,,team_change,single_event +player_id_fixed,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,team_change,single_event +player_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,team_change,single_event +player_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,team_change,single_event +player_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,team_change,single_event +player_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,team_change,single_event +player_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,team_change,single_event +player_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,team_change,single_event +player_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,team_change,single_event +player_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,team_change,single_event +player_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,team_change,single_event +player_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,team_change,single_event +round,INTEGER,,False,,,,,tick,telemetry +tick,INTEGER,,False,,,,,tick,telemetry +second,DECIMAL,,,,,,,tick,telemetry +previous_phase,VARCHAR,,,,,,,tick,telemetry +second_since_previous_phase,DECIMAL,,,,,,,tick,telemetry +round,INTEGER,,False,,,,,weapon_action,multi_event +tick,INTEGER,,False,,,,,weapon_action,multi_event event_type,VARCHAR,,False,,,,,weapon_action,multi_event -player_id,DECIMAL,,False,,,,,weapon_action,multi_event -second,DECIMAL,,True,,,,,weapon_action,multi_event -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,weapon_action,multi_event -player_x_pos,DECIMAL,,True,,,,,weapon_action,multi_event -player_y_pos,DECIMAL,,True,,,,,weapon_action,multi_event -player_z_pos,DECIMAL,,True,,,,,weapon_action,multi_event -player_x_vel,DECIMAL,,True,,,,,weapon_action,multi_event -player_y_vel,DECIMAL,,True,,,,,weapon_action,multi_event -player_z_vel,DECIMAL,,True,,,,,weapon_action,multi_event -player_phi_ang,DECIMAL,,True,,,,,weapon_action,multi_event -player_theta_ang,DECIMAL,,True,,,,,weapon_action,multi_event -player_weapon_code,DECIMAL,,True,,,,,weapon_action,multi_event -player_team_code,DECIMAL,,True,,,,,weapon_action,multi_event -player_tick,DECIMAL,,True,,May be missing.,,,weapon_action,multi_event -player_player_id,DECIMAL,,True,,May be missing.,,,weapon_action,multi_event -round,DECIMAL,,False,,,,,weapon_fire,single_event -tick,DECIMAL,,False,,,,,weapon_fire,single_event -player_id,DECIMAL,,False,,,,,weapon_fire,single_event -player_id_pawn,DECIMAL,,False,,,,,weapon_fire,single_event +player_id,INTEGER,,False,,,,,weapon_action,multi_event +second,DECIMAL,,,,,,,weapon_action,multi_event +player_id_fixed,DECIMAL,,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.,,,weapon_action,multi_event +player_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,weapon_action,multi_event +player_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,weapon_action,multi_event +player_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,weapon_action,multi_event +player_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,weapon_action,multi_event +player_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,weapon_action,multi_event +player_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,weapon_action,multi_event +player_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,weapon_action,multi_event +player_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,weapon_action,multi_event +player_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,weapon_action,multi_event +player_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,weapon_action,multi_event +round,INTEGER,,False,,,,,weapon_fire,single_event +tick,INTEGER,,False,,,,,weapon_fire,single_event +player_id,INTEGER,,False,,,,,weapon_fire,single_event +player_id_pawn,INTEGER,,False,,,,,weapon_fire,single_event weapon_name,VARCHAR,,False,,,,,weapon_fire,single_event -is_silenced,DECIMAL,,False,,,,,weapon_fire,single_event -second,DECIMAL,,True,,,,,weapon_fire,single_event -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,weapon_fire,single_event -player_x_pos,DECIMAL,,True,,,,,weapon_fire,single_event -player_y_pos,DECIMAL,,True,,,,,weapon_fire,single_event -player_z_pos,DECIMAL,,True,,,,,weapon_fire,single_event -player_x_vel,DECIMAL,,True,,,,,weapon_fire,single_event -player_y_vel,DECIMAL,,True,,,,,weapon_fire,single_event -player_z_vel,DECIMAL,,True,,,,,weapon_fire,single_event -player_phi_ang,DECIMAL,,True,,,,,weapon_fire,single_event -player_theta_ang,DECIMAL,,True,,,,,weapon_fire,single_event -player_weapon_code,DECIMAL,,True,,,,,weapon_fire,single_event -player_team_code,DECIMAL,,True,,,,,weapon_fire,single_event -player_tick,DECIMAL,,True,,May be missing.,,,weapon_fire,single_event -player_player_id,DECIMAL,,True,,May be missing.,,,weapon_fire,single_event -missed_molotov,DECIMAL,,True,,,,,weapon_fire,single_event -round,DECIMAL,,False,,,,,item_remove,single_event -tick,DECIMAL,,False,,,,,item_remove,single_event -player_id,DECIMAL,,True,,,,,item_remove,single_event -item,DECIMAL,,False,,,,,item_remove,single_event -def_index,DECIMAL,,True,,,,,item_remove,single_event -second,DECIMAL,,True,,,,,item_remove,single_event -player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,item_remove,single_event -player_x_pos,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event -player_y_pos,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event -player_z_pos,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event -player_x_vel,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event -player_y_vel,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event -player_z_vel,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event -player_phi_ang,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event -player_theta_ang,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event -player_weapon_code,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event -player_team_code,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event -player_tick,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event -player_player_id,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event +is_silenced,BOOLEAN,,False,,,,,weapon_fire,single_event +second,DECIMAL,,,,,,,weapon_fire,single_event +player_id_fixed,DECIMAL,,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.,,,weapon_fire,single_event +player_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,weapon_fire,single_event +player_y_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,weapon_fire,single_event +player_z_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,weapon_fire,single_event +player_x_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,weapon_fire,single_event +player_y_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,weapon_fire,single_event +player_z_vel,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,weapon_fire,single_event +player_phi_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,weapon_fire,single_event +player_theta_ang,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,weapon_fire,single_event +player_weapon_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,weapon_fire,single_event +player_team_code,INTEGER,,True,,Merged from another channel. Null where no source row matches.,,,weapon_fire,single_event +missed_molotov,INTEGER,,,,,,,weapon_fire,single_event +round,INTEGER,,False,,,,,world_item_vector,telemetry +tick,INTEGER,,False,,,,,world_item_vector,telemetry +entity_id,INTEGER,,False,,,,,world_item_vector,telemetry +prev_owner_id,INTEGER,,False,,,,,world_item_vector,telemetry +item,VARCHAR,,False,,,,,world_item_vector,telemetry +def_index,INTEGER,,False,,,,,world_item_vector,telemetry +x_pos,DECIMAL,,False,,,,,world_item_vector,telemetry +y_pos,DECIMAL,,False,,,,,world_item_vector,telemetry +z_pos,DECIMAL,,False,,,,,world_item_vector,telemetry +second,DECIMAL,,,,,,,world_item_vector,telemetry diff --git a/docs/datascience/adx/cs2/csds/spec.md b/docs/datascience/adx/cs2/csds/spec.md index c1ecb12..9293e50 100644 --- a/docs/datascience/adx/cs2/csds/spec.md +++ b/docs/datascience/adx/cs2/csds/spec.md @@ -2,860 +2,1109 @@ Documentation for CSDS channels built by FPS Critic, Inc. +One match is published as a JSON index object named `csds` plus one file per +channel, 42 in all, for 43 objects per match. The index lists the channels, +where each one sits, and what columns it declares. Every channel file is +[Apache Parquet], `header` included. + +This document describes the channel set published since 2026-08-04. Revisions +through 2026-07-31 carry an older set of 30 channels, described in the +[archived spec](/datascience/old/cs2/csds/spec); the 2026-08-02 revision holds +a mix of the two. Reading each match's index object rather than assuming a +channel list will keep code working across the change. + +## How to read this + +Each section below is one channel. The heading gives the channel name and its +category, and multi-event channels list the game events that write rows into +them. + +**Origin** says where a column comes from: + +| Origin | Meaning | +| --------------------- | --------------------------------------------------------------------------------------------------- | +| `replay` | Written by the demo parser, straight off the game's own event stream. | +| `replay_fixed` | A parser value the pipeline recomputed. The uncorrected value stays in the matching `*_raw` column. | +| `replay-capped` | A parser value clamped to a maximum. | +| `replay-redacted` | A parser value removed or replaced by the PII scrubber. | +| `calculated` | Derived by the pipeline from the columns named under Dependents. | +| `calculated-redacted` | Derived, then removed or replaced by the PII scrubber. | +| `merged` | Copied in from another channel by joining on the columns named under Merge Keys. | + +**Dependents** names the columns a calculated column is computed from. A +`channel:column` entry points at another channel, and a `meta:` or `metademo:` +entry at match metadata rather than a channel. + +**Merge Keys** names the columns joined on to bring a merged column in. Most +position and velocity columns arrive by an as-of merge against the nearest tick +at or before the event, so they are null when no source row is close enough. + +**Type** is the value type as published. Integers are written as Parquet +`int64` and floats as `double`, because the writer goes through pandas; a +column typed `int` here that can hold nulls therefore arrives as a double, and +the note in the [data dictionary](./assets/csds_dictionary.csv) says so. + +**Nullable** is the value declared in the index object where there is one. +Merged columns are always nullable. It is left blank for calculated columns, +which the index does not declare either way. + +Four columns that older versions of this document listed are no longer +published: `tick` and `second` on `player_info` and on `player_personal`. The +index still names them, marked as deleted, so a reader driven off the index +should skip any column whose origin ends in `-deleted`. + +[apache parquet]: https://parquet.apache.org/ + ## bomb_action - multi_event Events that trigger this channel: bomb_abort_plant, bomb_begin_plant, bomb_dropped, bomb_pickup, player_given_c4 -| Col Name | Origin | Dependents | Merge Keys | -| ------------------ | ---------- | --------------- | -------------------------- | -| round | replay | | | -| tick | replay | | | -| event_type | replay | | | -| player_id | replay | | | -| player_id_pawn | replay | | | -| site_code | replay | | | -| entity_id | replay | | | -| second | calculated | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | -| player_x_pos | merged | | player_id, tick | -| player_y_pos | merged | | player_id, tick | -| player_z_pos | merged | | player_id, tick | -| player_x_vel | merged | | player_id, tick | -| player_y_vel | merged | | player_id, tick | -| player_z_vel | merged | | player_id, tick | -| player_phi_ang | merged | | player_id, tick | -| player_theta_ang | merged | | player_id, tick | -| player_weapon_code | merged | | player_id, tick | -| player_team_code | merged | | player_id, tick | -| player_tick | merged | | player_id, tick | -| player_player_id | merged | | player_id, tick | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ------------------ | ------- | -------- | ---------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| event_type | string | False | replay | | | +| player_id | int32 | True | replay | | | +| player_id_pawn | int | True | replay | | | +| site_code | int32 | True | replay | | | +| entity_id | int32 | True | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | +| player_x_pos | float64 | True | merged | | player_id, tick | +| player_y_pos | float64 | True | merged | | player_id, tick | +| player_z_pos | float64 | True | merged | | player_id, tick | +| player_x_vel | float64 | True | merged | | player_id, tick | +| player_y_vel | float64 | True | merged | | player_id, tick | +| player_z_vel | float64 | True | merged | | player_id, tick | +| player_phi_ang | float64 | True | merged | | player_id, tick | +| player_theta_ang | float64 | True | merged | | player_id, tick | +| player_weapon_code | int | True | merged | | player_id, tick | +| player_team_code | int | True | merged | | player_id, tick | ## bomb_defuse - multi_event Events that trigger this channel: bomb_abort_defuse, bomb_begin_defuse -| Col Name | Origin | Dependents | Merge Keys | -| ------------------ | ---------- | --------------- | -------------------------- | -| round | replay | | | -| tick | replay | | | -| event_type | replay | | | -| player_id | replay | | | -| has_kit | replay | | | -| second | calculated | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | -| player_x_pos | merged | | player_id, tick | -| player_y_pos | merged | | player_id, tick | -| player_z_pos | merged | | player_id, tick | -| player_x_vel | merged | | player_id, tick | -| player_y_vel | merged | | player_id, tick | -| player_z_vel | merged | | player_id, tick | -| player_phi_ang | merged | | player_id, tick | -| player_theta_ang | merged | | player_id, tick | -| player_weapon_code | merged | | player_id, tick | -| player_team_code | merged | | player_id, tick | -| player_tick | merged | | player_id, tick | -| player_player_id | merged | | player_id, tick | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ------------------ | ------- | -------- | ---------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| event_type | string | False | replay | | | +| player_id | int32 | False | replay | | | +| has_kit | bool | True | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | int | True | merged | | player_id, round, steam_id | +| player_x_pos | float64 | True | merged | | player_id, tick | +| player_y_pos | float64 | True | merged | | player_id, tick | +| player_z_pos | float64 | True | merged | | player_id, tick | +| player_x_vel | float64 | True | merged | | player_id, tick | +| player_y_vel | float64 | True | merged | | player_id, tick | +| player_z_vel | float64 | True | merged | | player_id, tick | +| player_phi_ang | float64 | True | merged | | player_id, tick | +| player_theta_ang | float64 | True | merged | | player_id, tick | +| player_weapon_code | int | True | merged | | player_id, tick | +| player_team_code | int | True | merged | | player_id, tick | ## bomb_state - multi_event Events that trigger this channel: bomb_defused, bomb_exploded, bomb_planted -| Col Name | Origin | Dependents | Merge Keys | -| ------------------ | ---------- | --------------- | -------------------------- | -| round | replay | | | -| tick | replay | | | -| event_type | replay | | | -| player_id | replay | | | -| site_code | replay | | | -| second | calculated | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | -| player_x_pos | merged | | player_id, tick | -| player_y_pos | merged | | player_id, tick | -| player_z_pos | merged | | player_id, tick | -| player_x_vel | merged | | player_id, tick | -| player_y_vel | merged | | player_id, tick | -| player_z_vel | merged | | player_id, tick | -| player_phi_ang | merged | | player_id, tick | -| player_theta_ang | merged | | player_id, tick | -| player_weapon_code | merged | | player_id, tick | -| player_team_code | merged | | player_id, tick | -| player_tick | merged | | player_id, tick | -| player_player_id | merged | | player_id, tick | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ------------------ | ------- | -------- | ---------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| event_type | string | False | replay | | | +| player_id | int32 | False | replay | | | +| site_code | int32 | True | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | int | True | merged | | player_id, round, steam_id | +| player_x_pos | float64 | True | merged | | player_id, tick | +| player_y_pos | float64 | True | merged | | player_id, tick | +| player_z_pos | float64 | True | merged | | player_id, tick | +| player_x_vel | float64 | True | merged | | player_id, tick | +| player_y_vel | float64 | True | merged | | player_id, tick | +| player_z_vel | float64 | True | merged | | player_id, tick | +| player_phi_ang | float64 | True | merged | | player_id, tick | +| player_theta_ang | float64 | True | merged | | player_id, tick | +| player_weapon_code | int | True | merged | | player_id, tick | +| player_team_code | int | True | merged | | player_id, tick | ## bot_takeover - single_event Event that triggers this channel: bot_takeover -| Col Name | Origin | Dependents | Merge Keys | -| ------------------ | ---------- | --------------- | -------------------------- | -| round | replay | | | -| tick | replay | | | -| player_id | replay | | | -| bot_id | replay | | | -| player_index | replay | | | -| second | calculated | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | -| player_x_pos | merged | | player_id, tick | -| player_y_pos | merged | | player_id, tick | -| player_z_pos | merged | | player_id, tick | -| player_x_vel | merged | | player_id, tick | -| player_y_vel | merged | | player_id, tick | -| player_z_vel | merged | | player_id, tick | -| player_phi_ang | merged | | player_id, tick | -| player_theta_ang | merged | | player_id, tick | -| player_weapon_code | merged | | player_id, tick | -| player_team_code | merged | | player_id, tick | -| player_tick | merged | | player_id, tick | -| player_player_id | merged | | player_id, tick | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ------------------ | ------- | -------- | ---------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| player_id | int32 | False | replay | | | +| player_index | int32 | False | replay | | | +| bot_id | int32 | True | replay | | | +| is_controlling | bool | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | int | True | merged | | player_id, round, steam_id | +| player_x_pos | float64 | True | merged | | player_id, tick | +| player_y_pos | float64 | True | merged | | player_id, tick | +| player_z_pos | float64 | True | merged | | player_id, tick | +| player_x_vel | float64 | True | merged | | player_id, tick | +| player_y_vel | float64 | True | merged | | player_id, tick | +| player_z_vel | float64 | True | merged | | player_id, tick | +| player_phi_ang | float64 | True | merged | | player_id, tick | +| player_theta_ang | float64 | True | merged | | player_id, tick | +| player_weapon_code | int | True | merged | | player_id, tick | +| player_team_code | int | True | merged | | player_id, tick | + +## bullet_damage - single_event + +Event that triggers this channel: bullet_damage + +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| -------------------- | ------- | -------- | ---------- | --------------- | ---------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| player_id | int | False | replay | | | +| attacker_id | int | False | replay | | | +| distance | float32 | False | replay | | | +| damage_dir_x | float32 | False | replay | | | +| damage_dir_y | float32 | False | replay | | | +| damage_dir_z | float32 | False | replay | | | +| num_penetrations | int32 | False | replay | | | +| is_no_scope | bool | False | replay | | | +| is_attacker_in_air | bool | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | +| attacker_id_fixed | int | True | merged | | attacker_id, round, steam_id | +| player_x_pos | float64 | True | merged | | player_id, tick | +| player_y_pos | float64 | True | merged | | player_id, tick | +| player_z_pos | float64 | True | merged | | player_id, tick | +| player_x_vel | float64 | True | merged | | player_id, tick | +| player_y_vel | float64 | True | merged | | player_id, tick | +| player_z_vel | float64 | True | merged | | player_id, tick | +| player_phi_ang | float64 | True | merged | | player_id, tick | +| player_theta_ang | float64 | True | merged | | player_id, tick | +| player_weapon_code | int | True | merged | | player_id, tick | +| player_team_code | int | True | merged | | player_id, tick | +| attacker_x_pos | float64 | True | merged | | attacker_id, tick | +| attacker_y_pos | float64 | True | merged | | attacker_id, tick | +| attacker_z_pos | float64 | True | merged | | attacker_id, tick | +| attacker_x_vel | float64 | True | merged | | attacker_id, tick | +| attacker_y_vel | float64 | True | merged | | attacker_id, tick | +| attacker_z_vel | float64 | True | merged | | attacker_id, tick | +| attacker_phi_ang | float64 | True | merged | | attacker_id, tick | +| attacker_theta_ang | float64 | True | merged | | attacker_id, tick | +| attacker_weapon_code | int | True | merged | | attacker_id, tick | +| attacker_team_code | int | True | merged | | attacker_id, tick | + +## grenade_bounce - single_event + +Event that triggers this channel: grenade_bounce + +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| --------------- | ------- | -------- | ---------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| entity_id | int32 | False | replay | | | +| player_id | int | False | replay | | | +| bounce_nr | int32 | False | replay | | | +| x_pos | float64 | False | replay | | | +| y_pos | float64 | False | replay | | | +| z_pos | float64 | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | ## grenade_state - multi_event Events that trigger this channel: decoy_detonate, decoy_firing, decoy_started, flashbang_detonate, hegrenade_detonate, smokegrenade_detonate, smokegrenade_expired -| Col Name | Origin | Dependents | Merge Keys | -| ------------------ | ---------- | ----------------------------------- | -------------------------- | -| round | replay | | | -| tick | replay | | | -| event_type | replay | | | -| entity_id | replay | | | -| player_id | replay | | | -| x_pos | replay | | | -| y_pos | replay | | | -| z_pos | replay | | | -| second | calculated | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | -| entity_id_fixed | calculated | round, entity_id, event_type, tick | | -| tick_throw | calculated | round, player_id, weapon_name, tick | | -| player_x_pos | merged | | tick_throw, player_id | -| player_y_pos | merged | | tick_throw, player_id | -| player_z_pos | merged | | tick_throw, player_id | -| player_x_vel | merged | | tick_throw, player_id | -| player_y_vel | merged | | tick_throw, player_id | -| player_z_vel | merged | | tick_throw, player_id | -| player_phi_ang | merged | | tick_throw, player_id | -| player_theta_ang | merged | | tick_throw, player_id | -| player_weapon_code | merged | | tick_throw, player_id | -| player_team_code | merged | | tick_throw, player_id | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ------------------ | ------- | -------- | ---------- | ----------------------------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| event_type | string | False | replay | | | +| entity_id | int32 | False | replay | | | +| player_id | int32 | False | replay | | | +| x_pos | float32 | False | replay | | | +| y_pos | float32 | False | replay | | | +| z_pos | float32 | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | +| entity_id_fixed | int | | calculated | round, entity_id, event_type, tick | | +| tick_throw | int | | calculated | round, player_id, weapon_name, tick | | +| player_x_pos | float64 | True | merged | | tick_throw, player_id | +| player_y_pos | float64 | True | merged | | tick_throw, player_id | +| player_z_pos | float64 | True | merged | | tick_throw, player_id | +| player_x_vel | float64 | True | merged | | tick_throw, player_id | +| player_y_vel | float64 | True | merged | | tick_throw, player_id | +| player_z_vel | float64 | True | merged | | tick_throw, player_id | +| player_phi_ang | float64 | True | merged | | tick_throw, player_id | +| player_theta_ang | float64 | True | merged | | tick_throw, player_id | +| player_weapon_code | int | True | merged | | tick_throw, player_id | +| player_team_code | int | True | merged | | tick_throw, player_id | + +## grenade_vector - telemetry + +Event that triggers this channel: tick_end + +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ----------------- | ------- | -------- | ---------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| entity_id | int32 | False | replay | | | +| player_id | int | False | replay | | | +| grenade_type_code | int32 | False | replay | | | +| grenade_type | string | False | replay | | | +| x_pos | float64 | False | replay | | | +| y_pos | float64 | False | replay | | | +| z_pos | float64 | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | ## header - header -Event that triggers this channel: none - -| Col Name | Origin | Dependents | Merge Keys | -| -------------------------- | ------------------- | ---------------------------------------- | ---------- | -| magic | replay | | | -| network_protocol | replay | | | -| server_name | replay | | | -| client_name | replay | | | -| map_name | replay | | | -| game_directory | replay | | | -| fullpackets_version | replay | | | -| allow_clientside_entities | replay | | | -| allow_clientside_particles | replay | | | -| addons | replay | | | -| demo_version_name | replay | | | -| demo_version_guid | replay | | | -| build_num | replay | | | -| game | replay | | | -| magic | replay | | | -| protocol | replay | | | -| network_protocol | replay | | | -| server_name | replay | | | -| client_name | replay | | | -| map_name | replay | | | -| game_directory | replay | | | -| playback_time | replay | | | -| playback_ticks | replay | | | -| playback_frames | replay | | | -| signon_length | replay | | | -| tick_rate | calculated | playback_ticks, playback_time | | -| tick_save_rate | calculated | playback_frames, playback_time | | -| rushb_version | calculated | meta:metadata.rushbVersion | | -| ppp_version | calculated | meta:context.version | | -| match_date | calculated | meta:matchDate | | -| demo_id | calculated-redacted | meta:demoId | | -| sharecode | calculated-redacted | meta:sharecode | | -| platform | calculated | meta:platform | | -| match_type | calculated | meta:matchType | | -| game | calculated | meta:game | | -| second | calculated | tick, tick_rate | | -| t_starters_avg_rank | calculated | is_bot, round, rank, steam_id, team_code | | -| t_starters_avg_wins | calculated | is_bot, round, wins, steam_id, team_code | | -| ct_starters_avg_rank | calculated | is_bot, round, rank, steam_id, team_code | | -| ct_starters_avg_wins | calculated | is_bot, round, wins, steam_id, team_code | | -| ct_starters_score_final | calculated | round_state:ct_score | | -| t_starters_score_final | calculated | round_state:t_score | | -| providence | calculated | metademo:providence | | -| number_of_points | calculated | shape of all data frames | | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| -------------------------- | ------- | -------- | ------------------- | ---------------------------------------- | ---------- | +| magic | string | False | replay | | | +| network_protocol | int32 | False | replay | | | +| server_name | string | False | replay | | | +| client_name | string | False | replay | | | +| map_name | string | False | replay | | | +| game_directory | string | False | replay | | | +| fullpackets_version | int | False | replay | | | +| allow_clientside_entities | bool | False | replay | | | +| allow_clientside_particles | bool | False | replay | | | +| addons | string | False | replay | | | +| demo_version_name | string | False | replay | | | +| demo_version_guid | string | False | replay | | | +| build_num | int32 | False | replay | | | +| game | string | False | calculated | meta:game | | +| is_gotv_recording | bool | False | replay | | | +| is_wingman | bool | False | replay | | | +| max_unique_players | int | False | replay | | | +| tick_rate | int | | calculated | | | +| tick_save_rate | int | | calculated | | | +| rushb_version | string | | calculated | meta:metadata.rushbVersion | | +| ppp_version | string | | calculated | meta:context.version | | +| match_date | string | | calculated | meta:matchDate | | +| demo_id | string | | calculated-redacted | meta:demoId | | +| sharecode | string | | calculated-redacted | meta:sharecode | | +| platform | string | | calculated | meta:platform | | +| match_type | string | | calculated | meta:matchType | | +| t_starters_avg_rank | float64 | | calculated | is_bot, round, rank, steam_id, team_code | | +| t_starters_avg_wins | float64 | | calculated | is_bot, round, wins, steam_id, team_code | | +| ct_starters_avg_rank | float64 | | calculated | is_bot, round, rank, steam_id, team_code | | +| ct_starters_avg_wins | float64 | | calculated | is_bot, round, wins, steam_id, team_code | | +| ct_starters_score_final | int | | calculated | round_state:ct_score | | +| t_starters_score_final | int | | calculated | round_state:t_score | | +| unique_steamids | int | | calculated | player_personal:steam_id | | +| providence | string | | calculated | metademo:providence | | +| number_of_points | int | | calculated | shape of all data frames | | + +## item_dropped - single_event + +Event that triggers this channel: item_dropped + +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ------------------ | ------- | -------- | ---------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| player_id | int | False | replay | | | +| entity_id | int32 | False | replay | | | +| item | string | False | replay | | | +| def_index | int32 | False | replay | | | +| x_pos | float64 | False | replay | | | +| y_pos | float64 | False | replay | | | +| z_pos | float64 | False | replay | | | +| reason | string | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | +| player_x_pos | float64 | True | merged | | player_id, tick | +| player_y_pos | float64 | True | merged | | player_id, tick | +| player_z_pos | float64 | True | merged | | player_id, tick | +| player_x_vel | float64 | True | merged | | player_id, tick | +| player_y_vel | float64 | True | merged | | player_id, tick | +| player_z_vel | float64 | True | merged | | player_id, tick | +| player_phi_ang | float64 | True | merged | | player_id, tick | +| player_theta_ang | float64 | True | merged | | player_id, tick | +| player_weapon_code | int | True | merged | | player_id, tick | +| player_team_code | int | True | merged | | player_id, tick | ## item_equip - single_event Event that triggers this channel: item_equip -| Col Name | Origin | Dependents | Merge Keys | -| ------------------ | ---------- | --------------- | -------------------------- | -| round | replay | | | -| tick | replay | | | -| player_id | replay | | | -| item | replay | | | -| def_index | replay | | | -| can_zoom | replay | | | -| has_silencer | replay | | | -| is_silenced | replay | | | -| has_tracers | replay | | | -| weapon_type_code | replay | | | -| is_painted | replay | | | -| second | calculated | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | -| player_x_pos | merged | | player_id, tick | -| player_y_pos | merged | | player_id, tick | -| player_z_pos | merged | | player_id, tick | -| player_x_vel | merged | | player_id, tick | -| player_y_vel | merged | | player_id, tick | -| player_z_vel | merged | | player_id, tick | -| player_phi_ang | merged | | player_id, tick | -| player_theta_ang | merged | | player_id, tick | -| player_weapon_code | merged | | player_id, tick | -| player_team_code | merged | | player_id, tick | -| player_tick | merged | | player_id, tick | -| player_player_id | merged | | player_id, tick | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ------------------ | ------- | -------- | ---------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| player_id | int32 | False | replay | | | +| item | string | False | replay | | | +| def_index | int32 | False | replay | | | +| can_zoom | bool | False | replay | | | +| has_silencer | bool | False | replay | | | +| is_silenced | bool | False | replay | | | +| has_tracers | bool | False | replay | | | +| weapon_type_code | int32 | False | replay | | | +| is_painted | bool | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | +| player_x_pos | float64 | True | merged | | player_id, tick | +| player_y_pos | float64 | True | merged | | player_id, tick | +| player_z_pos | float64 | True | merged | | player_id, tick | +| player_x_vel | float64 | True | merged | | player_id, tick | +| player_y_vel | float64 | True | merged | | player_id, tick | +| player_z_vel | float64 | True | merged | | player_id, tick | +| player_phi_ang | float64 | True | merged | | player_id, tick | +| player_theta_ang | float64 | True | merged | | player_id, tick | +| player_weapon_code | int | True | merged | | player_id, tick | +| player_team_code | int | True | merged | | player_id, tick | ## item_pickup - single_event Event that triggers this channel: item_pickup -| Col Name | Origin | Dependents | Merge Keys | -| ------------------ | ---------- | --------------- | -------------------------- | -| round | replay | | | -| tick | replay | | | -| player_id | replay | | | -| item | replay | | | -| def_index | replay | | | -| is_silent | replay | | | -| second | calculated | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | -| player_x_pos | merged | | player_id, tick | -| player_y_pos | merged | | player_id, tick | -| player_z_pos | merged | | player_id, tick | -| player_x_vel | merged | | player_id, tick | -| player_y_vel | merged | | player_id, tick | -| player_z_vel | merged | | player_id, tick | -| player_phi_ang | merged | | player_id, tick | -| player_theta_ang | merged | | player_id, tick | -| player_weapon_code | merged | | player_id, tick | -| player_team_code | merged | | player_id, tick | -| player_tick | merged | | player_id, tick | -| player_player_id | merged | | player_id, tick | - -## item_remove - single_event +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ------------------ | ------- | -------- | ---------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| player_id | int32 | False | replay | | | +| item | string | False | replay | | | +| def_index | int32 | False | replay | | | +| is_silent | bool | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | +| player_x_pos | float64 | True | merged | | player_id, tick | +| player_y_pos | float64 | True | merged | | player_id, tick | +| player_z_pos | float64 | True | merged | | player_id, tick | +| player_x_vel | float64 | True | merged | | player_id, tick | +| player_y_vel | float64 | True | merged | | player_id, tick | +| player_z_vel | float64 | True | merged | | player_id, tick | +| player_phi_ang | float64 | True | merged | | player_id, tick | +| player_theta_ang | float64 | True | merged | | player_id, tick | +| player_weapon_code | int | True | merged | | player_id, tick | +| player_team_code | int | True | merged | | player_id, tick | + +## item_refund - single_event + +Event that triggers this channel: item_refund + +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ------------------ | ------- | -------- | ---------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| player_id | int | False | replay | | | +| item | string | False | replay | | | +| def_index | int32 | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | +| player_x_pos | float64 | True | merged | | player_id, tick | +| player_y_pos | float64 | True | merged | | player_id, tick | +| player_z_pos | float64 | True | merged | | player_id, tick | +| player_x_vel | float64 | True | merged | | player_id, tick | +| player_y_vel | float64 | True | merged | | player_id, tick | +| player_z_vel | float64 | True | merged | | player_id, tick | +| player_phi_ang | float64 | True | merged | | player_id, tick | +| player_theta_ang | float64 | True | merged | | player_id, tick | +| player_weapon_code | int | True | merged | | player_id, tick | +| player_team_code | int | True | merged | | player_id, tick | + +## molotov_fire - telemetry -Event that triggers this channel: item_pickup +Event that triggers this channel: tick_end -Note: This event no longer seems to trigger in CS2. Check inventory data in player_status channel to infer when something is removed. - -| Col Name | Origin | Dependents | Merge Keys | -| ------------------ | ---------- | --------------- | -------------------------- | -| round | replay | | | -| tick | replay | | | -| player_id | replay | | | -| item | replay | | | -| def_index | replay | | | -| second | calculated | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | -| player_x_pos | merged | | player_id, tick | -| player_y_pos | merged | | player_id, tick | -| player_z_pos | merged | | player_id, tick | -| player_x_vel | merged | | player_id, tick | -| player_y_vel | merged | | player_id, tick | -| player_z_vel | merged | | player_id, tick | -| player_phi_ang | merged | | player_id, tick | -| player_theta_ang | merged | | player_id, tick | -| player_weapon_code | merged | | player_id, tick | -| player_team_code | merged | | player_id, tick | -| player_tick | merged | | player_id, tick | -| player_player_id | merged | | player_id, tick | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| --------------- | ------- | -------- | ---------- | ---------------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| entity_id | int32 | False | replay | | | +| player_id | int | False | replay | | | +| fire_index | int32 | False | replay | | | +| x_pos | float64 | False | replay | | | +| y_pos | float64 | False | replay | | | +| z_pos | float64 | False | replay | | | +| is_burning | bool | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | +| entity_id_fixed | int | | calculated | round, entity_id, tick | | ## molotov_state - multi_event Events that trigger this channel: inferno_detonate, inferno_expire, inferno_extinguish, inferno_startburn -| Col Name | Origin | Dependents | Merge Keys | -| -------------------------------- | ---------- | ------------------------------------------------------------------------------------ | --------------------- | -| round | replay | | | -| tick | replay | | | -| event_type | replay | | | -| entity_id | replay | | | -| x_pos | replay | | | -| y_pos | replay | | | -| z_pos | replay | | | -| second | calculated | tick, tick_rate | | -| entity_id_fixed | calculated | round, entity_id, event_type, tick | | -| burn_duration | calculated | second, entity_id_fixed, event_type | | -| was_extinguished_by_smoke | calculated | second, entity_id_fixed, event_type, burn_duration | | -| extinguisher_id | calculated | second, entity_id_fixed, event_type, x_pos, y_pos, z_pos, player_id | | -| extinguisher_id_fixed | calculated | second, entity_id, entity_id_fixed, event_type, x_pos, y_pos, z_pos, player_id_fixed | | -| smoke_entity_id | calculated | second, entity_id, entity_id_fixed, event_type, x_pos, y_pos, z_pos | | -| was_extinguished_by_thrown_smoke | calculated | second, entity_id, entity_id_fixed, event_type, x_pos, y_pos, z_pos | | -| player_id | calculated | event_type, second, round | | -| player_id_fixed | calculated | event_type, second, round | | -| tick_throw | calculated | event_type, second, round | | -| player_x_pos | merged | | tick_throw, player_id | -| player_y_pos | merged | | tick_throw, player_id | -| player_z_pos | merged | | tick_throw, player_id | -| player_x_vel | merged | | tick_throw, player_id | -| player_y_vel | merged | | tick_throw, player_id | -| player_z_vel | merged | | tick_throw, player_id | -| player_phi_ang | merged | | tick_throw, player_id | -| player_theta_ang | merged | | tick_throw, player_id | -| player_weapon_code | merged | | tick_throw, player_id | -| player_team_code | merged | | tick_throw, player_id | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| -------------------------------- | ------- | -------- | ---------- | ------------------------------------------------------------------------------------ | --------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| event_type | string | False | replay | | | +| entity_id | int32 | False | replay | | | +| x_pos | float32 | False | replay | | | +| y_pos | float32 | False | replay | | | +| z_pos | float32 | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| entity_id_fixed | int | | calculated | round, entity_id, event_type, tick | | +| player_id | int | | calculated | event_type, second, round | | +| player_id_fixed | int | | calculated | event_type, second, round | | +| tick_throw | int | | calculated | event_type, second, round | | +| player_x_pos | float64 | True | merged | | tick_throw, player_id | +| player_y_pos | float64 | True | merged | | tick_throw, player_id | +| player_z_pos | float64 | True | merged | | tick_throw, player_id | +| player_x_vel | float64 | True | merged | | tick_throw, player_id | +| player_y_vel | float64 | True | merged | | tick_throw, player_id | +| player_z_vel | float64 | True | merged | | tick_throw, player_id | +| player_phi_ang | float64 | True | merged | | tick_throw, player_id | +| player_theta_ang | float64 | True | merged | | tick_throw, player_id | +| player_weapon_code | int | True | merged | | tick_throw, player_id | +| player_team_code | int | True | merged | | tick_throw, player_id | +| burn_duration | float64 | | calculated | second, entity_id_fixed, event_type | | +| was_extinguished_by_smoke | int | | calculated | second, entity_id_fixed, event_type, burn_duration | | +| extinguisher_id | int | | calculated | second, entity_id_fixed, event_type, x_pos, y_pos, z_pos, player_id | | +| extinguisher_id_fixed | int | | calculated | second, entity_id, entity_id_fixed, event_type, x_pos, y_pos, z_pos, player_id_fixed | | +| smoke_entity_id | int | | calculated | second, entity_id, entity_id_fixed, event_type, x_pos, y_pos, z_pos | | +| smoke_entity_id_fixed | int | | calculated | second, entity_id, entity_id_fixed, event_type, x_pos, y_pos, z_pos | | +| was_extinguished_by_thrown_smoke | float64 | | calculated | second, entity_id, entity_id_fixed, event_type, x_pos, y_pos, z_pos | | +| fraction_extinguished | float64 | | calculated | second, entity_id_fixed, event_type, x_pos, y_pos, z_pos | | +| was_thrown_into_smoke | int | | calculated | second, entity_id_fixed, event_type, x_pos, y_pos, z_pos | | ## other_death - single_event -Events that trigger this channel: other_death - -| Col Name | Origin | Dependents | Merge Keys | -| -------------------- | ---------- | --------------- | ---------------------------- | -| round | replay | | | -| tick | replay | | | -| other_type | replay | | | -| attacker_id | replay | | | -| weapon_name | replay | | | -| is_headshot | replay | | | -| penetration_amount | replay | | | -| is_through_smoke | replay | | | -| is_attacker_blind | replay | | | -| is_noscope | replay | | | -| second | calculated | tick, tick_rate | | -| attacker_id_fixed | merged | | attacker_id, round, steam_id | -| attacker_x_pos | merged | | attacker_id, tick | -| attacker_y_pos | merged | | attacker_id, tick | -| attacker_z_pos | merged | | attacker_id, tick | -| attacker_x_vel | merged | | attacker_id, tick | -| attacker_y_vel | merged | | attacker_id, tick | -| attacker_z_vel | merged | | attacker_id, tick | -| attacker_phi_ang | merged | | attacker_id, tick | -| attacker_theta_ang | merged | | attacker_id, tick | -| attacker_weapon_code | merged | | attacker_id, tick | -| attacker_team_code | merged | | attacker_id, tick | -| attacker_tick | merged | | attacker_id, tick | -| attacker_player_id | merged | | attacker_id, tick | - -## player_action - multi_event - -Events that trigger this channel: inspect_weapon, player_decal, player_jump, silencer_detach - -| Col Name | Origin | Dependents | Merge Keys | -| ------------------ | ---------- | --------------- | -------------------------- | -| round | replay | | | -| tick | replay | | | -| event_type | replay | | | -| player_id | replay | | | -| second | calculated | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | -| player_x_pos | merged | | player_id, tick | -| player_y_pos | merged | | player_id, tick | -| player_z_pos | merged | | player_id, tick | -| player_x_vel | merged | | player_id, tick | -| player_y_vel | merged | | player_id, tick | -| player_z_vel | merged | | player_id, tick | -| player_phi_ang | merged | | player_id, tick | -| player_theta_ang | merged | | player_id, tick | -| player_weapon_code | merged | | player_id, tick | -| player_team_code | merged | | player_id, tick | -| player_tick | merged | | player_id, tick | -| player_player_id | merged | | player_id, tick | +Event that triggers this channel: other_death + +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| -------------------- | ------- | -------- | ---------- | --------------- | ---------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| other_type | string | False | replay | | | +| attacker_id | int32 | True | replay | | | +| weapon_name | string | False | replay | | | +| is_headshot | bool | False | replay | | | +| penetration_amount | int32 | False | replay | | | +| is_through_smoke | bool | True | replay | | | +| is_attacker_blind | bool | True | replay | | | +| is_noscope | bool | True | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| attacker_id_fixed | int | True | merged | | attacker_id, round, steam_id | +| attacker_x_pos | float64 | True | merged | | attacker_id, tick | +| attacker_y_pos | float64 | True | merged | | attacker_id, tick | +| attacker_z_pos | float64 | True | merged | | attacker_id, tick | +| attacker_x_vel | float64 | True | merged | | attacker_id, tick | +| attacker_y_vel | float64 | True | merged | | attacker_id, tick | +| attacker_z_vel | float64 | True | merged | | attacker_id, tick | +| attacker_phi_ang | float64 | True | merged | | attacker_id, tick | +| attacker_theta_ang | float64 | True | merged | | attacker_id, tick | +| attacker_weapon_code | int | True | merged | | attacker_id, tick | +| attacker_team_code | int | True | merged | | attacker_id, tick | ## player_blind - single_event Event that triggers this channel: player_blind -| Col Name | Origin | Dependents | Merge Keys | -| -------------------- | ---------- | --------------- | ---------------------------- | -| round | replay | | | -| tick | replay | | | -| player_id | replay | | | -| entity_id | replay | | | -| attacker_id | replay | | | -| blind_duration | replay | | | -| second | calculated | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | -| attacker_id_fixed | merged | | attacker_id, round, steam_id | -| player_x_pos | merged | | player_id, tick | -| player_y_pos | merged | | player_id, tick | -| player_z_pos | merged | | player_id, tick | -| player_x_vel | merged | | player_id, tick | -| player_y_vel | merged | | player_id, tick | -| player_z_vel | merged | | player_id, tick | -| player_phi_ang | merged | | player_id, tick | -| player_theta_ang | merged | | player_id, tick | -| player_weapon_code | merged | | player_id, tick | -| player_team_code | merged | | player_id, tick | -| player_tick | merged | | player_id, tick | -| player_player_id | merged | | player_id, tick | -| attacker_x_pos | merged | | attacker_id, tick | -| attacker_y_pos | merged | | attacker_id, tick | -| attacker_z_pos | merged | | attacker_id, tick | -| attacker_x_vel | merged | | attacker_id, tick | -| attacker_y_vel | merged | | attacker_id, tick | -| attacker_z_vel | merged | | attacker_id, tick | -| attacker_phi_ang | merged | | attacker_id, tick | -| attacker_theta_ang | merged | | attacker_id, tick | -| attacker_weapon_code | merged | | attacker_id, tick | -| attacker_team_code | merged | | attacker_id, tick | -| attacker_tick | merged | | attacker_id, tick | -| attacker_player_id | merged | | attacker_id, tick | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| -------------------- | ------- | -------- | ---------- | --------------- | ---------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| player_id | int32 | False | replay | | | +| entity_id | int32 | False | replay | | | +| attacker_id | int32 | False | replay | | | +| blind_duration | float32 | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | +| attacker_id_fixed | int | True | merged | | attacker_id, round, steam_id | +| player_x_pos | float64 | True | merged | | player_id, tick | +| player_y_pos | float64 | True | merged | | player_id, tick | +| player_z_pos | float64 | True | merged | | player_id, tick | +| player_x_vel | float64 | True | merged | | player_id, tick | +| player_y_vel | float64 | True | merged | | player_id, tick | +| player_z_vel | float64 | True | merged | | player_id, tick | +| player_phi_ang | float64 | True | merged | | player_id, tick | +| player_theta_ang | float64 | True | merged | | player_id, tick | +| player_weapon_code | int | True | merged | | player_id, tick | +| player_team_code | int | True | merged | | player_id, tick | +| attacker_x_pos | float64 | True | merged | | attacker_id, tick | +| attacker_y_pos | float64 | True | merged | | attacker_id, tick | +| attacker_z_pos | float64 | True | merged | | attacker_id, tick | +| attacker_x_vel | float64 | True | merged | | attacker_id, tick | +| attacker_y_vel | float64 | True | merged | | attacker_id, tick | +| attacker_z_vel | float64 | True | merged | | attacker_id, tick | +| attacker_phi_ang | float64 | True | merged | | attacker_id, tick | +| attacker_theta_ang | float64 | True | merged | | attacker_id, tick | +| attacker_weapon_code | int | True | merged | | attacker_id, tick | +| attacker_team_code | int | True | merged | | attacker_id, tick | + +## player_chat - single_event + +Event that triggers this channel: player_chat + +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ------------------ | ------- | -------- | --------------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| player_id | int | False | replay | | | +| text | string | False | replay-redacted | | | +| is_chat_all | bool | True | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | +| player_x_pos | float64 | True | merged | | player_id, tick | +| player_y_pos | float64 | True | merged | | player_id, tick | +| player_z_pos | float64 | True | merged | | player_id, tick | +| player_x_vel | float64 | True | merged | | player_id, tick | +| player_y_vel | float64 | True | merged | | player_id, tick | +| player_z_vel | float64 | True | merged | | player_id, tick | +| player_phi_ang | float64 | True | merged | | player_id, tick | +| player_theta_ang | float64 | True | merged | | player_id, tick | +| player_weapon_code | int | True | merged | | player_id, tick | +| player_team_code | int | True | merged | | player_id, tick | + +## player_connect - single_event + +Event that triggers this channel: player_connect + +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| --------------- | ------- | -------- | ---------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| player_index | int | False | replay | | | +| player_id | int | False | replay | | | +| is_bot | bool | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | ## player_death - single_event Event that triggers this channel: player_death -| Col Name | Origin | Dependents | Merge Keys | -| -------------------- | ---------- | --------------- | ---------------------------- | -| round | replay | | | -| tick | replay | | | -| player_id | replay | | | -| attacker_id | replay | | | -| assister_id | replay | | | -| weapon_name | replay | | | -| is_headshot | replay | | | -| penetration_amount | replay | | | -| has_replay | replay | | | -| is_flash_assist | replay | | | -| is_through_smoke | replay | | | -| is_attacker_blind | replay | | | -| is_noscope | replay | | | -| second | calculated | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | -| attacker_id_fixed | merged | | attacker_id, round, steam_id | -| assister_id_fixed | merged | | assister_id, round, steam_id | -| player_x_pos | merged | | player_id, tick | -| player_y_pos | merged | | player_id, tick | -| player_z_pos | merged | | player_id, tick | -| player_x_vel | merged | | player_id, tick | -| player_y_vel | merged | | player_id, tick | -| player_z_vel | merged | | player_id, tick | -| player_phi_ang | merged | | player_id, tick | -| player_theta_ang | merged | | player_id, tick | -| player_weapon_code | merged | | player_id, tick | -| player_team_code | merged | | player_id, tick | -| player_tick | merged | | player_id, tick | -| player_player_id | merged | | player_id, tick | -| attacker_x_pos | merged | | attacker_id, tick | -| attacker_y_pos | merged | | attacker_id, tick | -| attacker_z_pos | merged | | attacker_id, tick | -| attacker_x_vel | merged | | attacker_id, tick | -| attacker_y_vel | merged | | attacker_id, tick | -| attacker_z_vel | merged | | attacker_id, tick | -| attacker_phi_ang | merged | | attacker_id, tick | -| attacker_theta_ang | merged | | attacker_id, tick | -| attacker_weapon_code | merged | | attacker_id, tick | -| attacker_team_code | merged | | attacker_id, tick | -| attacker_tick | merged | | attacker_id, tick | -| attacker_player_id | merged | | attacker_id, tick | -| assister_x_pos | merged | | assister_id, tick | -| assister_y_pos | merged | | assister_id, tick | -| assister_z_pos | merged | | assister_id, tick | -| assister_x_vel | merged | | assister_id, tick | -| assister_y_vel | merged | | assister_id, tick | -| assister_z_vel | merged | | assister_id, tick | -| assister_phi_ang | merged | | assister_id, tick | -| assister_theta_ang | merged | | assister_id, tick | -| assister_weapon_code | merged | | assister_id, tick | -| assister_team_code | merged | | assister_id, tick | -| assister_tick | merged | | assister_id, tick | -| assister_player_id | merged | | assister_id, tick | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| -------------------- | ------- | -------- | ---------- | --------------- | ---------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| player_id | int32 | False | replay | | | +| attacker_id | int32 | True | replay | | | +| assister_id | int32 | True | replay | | | +| weapon_name | string | False | replay | | | +| is_headshot | bool | False | replay | | | +| penetration_amount | int32 | False | replay | | | +| has_replay | bool | False | replay | | | +| is_flash_assist | bool | True | replay | | | +| is_through_smoke | bool | True | replay | | | +| is_attacker_blind | bool | True | replay | | | +| is_noscope | bool | True | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | +| attacker_id_fixed | float64 | True | merged | | attacker_id, round, steam_id | +| assister_id_fixed | float64 | True | merged | | assister_id, round, steam_id | +| player_x_pos | float64 | True | merged | | player_id, tick | +| player_y_pos | float64 | True | merged | | player_id, tick | +| player_z_pos | float64 | True | merged | | player_id, tick | +| player_x_vel | float64 | True | merged | | player_id, tick | +| player_y_vel | float64 | True | merged | | player_id, tick | +| player_z_vel | float64 | True | merged | | player_id, tick | +| player_phi_ang | float64 | True | merged | | player_id, tick | +| player_theta_ang | float64 | True | merged | | player_id, tick | +| player_weapon_code | int | True | merged | | player_id, tick | +| player_team_code | int | True | merged | | player_id, tick | +| attacker_x_pos | float64 | True | merged | | attacker_id, tick | +| attacker_y_pos | float64 | True | merged | | attacker_id, tick | +| attacker_z_pos | float64 | True | merged | | attacker_id, tick | +| attacker_x_vel | float64 | True | merged | | attacker_id, tick | +| attacker_y_vel | float64 | True | merged | | attacker_id, tick | +| attacker_z_vel | float64 | True | merged | | attacker_id, tick | +| attacker_phi_ang | float64 | True | merged | | attacker_id, tick | +| attacker_theta_ang | float64 | True | merged | | attacker_id, tick | +| attacker_weapon_code | int | True | merged | | attacker_id, tick | +| attacker_team_code | int | True | merged | | attacker_id, tick | +| assister_x_pos | float64 | True | merged | | assister_id, tick | +| assister_y_pos | float64 | True | merged | | assister_id, tick | +| assister_z_pos | float64 | True | merged | | assister_id, tick | +| assister_x_vel | float64 | True | merged | | assister_id, tick | +| assister_y_vel | float64 | True | merged | | assister_id, tick | +| assister_z_vel | float64 | True | merged | | assister_id, tick | +| assister_phi_ang | float64 | True | merged | | assister_id, tick | +| assister_theta_ang | float64 | True | merged | | assister_id, tick | +| assister_weapon_code | int | True | merged | | assister_id, tick | +| assister_team_code | int | True | merged | | assister_id, tick | ## player_disconnect - single_event Event that triggers this channel: player_disconnect -| Col Name | Origin | Dependents | Merge Keys | -| ----------------- | ---------- | --------------- | -------------------------- | -| round | replay | | | -| tick | replay | | | -| player_id | replay | | | -| disconnect_reason | replay | | | -| is_bot | replay | | | -| second | calculated | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ----------------- | ------- | -------- | ---------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| player_id | int32 | False | replay | | | +| disconnect_reason | string | False | replay | | | +| is_bot | bool | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | ## player_footstep - single_event Event that triggers this channel: player_footstep -| Col Name | Origin | Dependents | Merge Keys | -| --------------- | ---------- | --------------- | -------------------------- | -| round | replay | | | -| tick | replay | | | -| player_id | replay | | | -| second | calculated | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| --------------- | ------- | -------- | ---------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| player_id | int32 | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | ## player_hurt - single_event Event that triggers this channel: player_hurt -| Col Name | Origin | Dependents | Merge Keys | -| ------------------------ | ---------- | ------------------------ | ---------------------------- | -| round | replay | | | -| tick | replay | | | -| player_id | replay | | | -| attacker_id | replay | | | -| health | replay | | | -| armor | replay | | | -| weapon_name | replay | | | -| health_removed | replay | | | -| armor_removed | replay | | | -| hit_box_code | replay | | | -| second | calculated | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | -| attacker_id_fixed | merged | | attacker_id, round, steam_id | -| player_x_pos | merged | | player_id, tick | -| player_y_pos | merged | | player_id, tick | -| player_z_pos | merged | | player_id, tick | -| player_x_vel | merged | | player_id, tick | -| player_y_vel | merged | | player_id, tick | -| player_z_vel | merged | | player_id, tick | -| player_phi_ang | merged | | player_id, tick | -| player_theta_ang | merged | | player_id, tick | -| player_weapon_code | merged | | player_id, tick | -| player_team_code | merged | | player_id, tick | -| player_tick | merged | | player_id, tick | -| player_player_id | merged | | player_id, tick | -| attacker_x_pos | merged | | attacker_id, tick | -| attacker_y_pos | merged | | attacker_id, tick | -| attacker_z_pos | merged | | attacker_id, tick | -| attacker_x_vel | merged | | attacker_id, tick | -| attacker_y_vel | merged | | attacker_id, tick | -| attacker_z_vel | merged | | attacker_id, tick | -| attacker_phi_ang | merged | | attacker_id, tick | -| attacker_theta_ang | merged | | attacker_id, tick | -| attacker_weapon_code | merged | | attacker_id, tick | -| attacker_team_code | merged | | attacker_id, tick | -| attacker_tick | merged | | attacker_id, tick | -| attacker_player_id | merged | | attacker_id, tick | -| effective_health_removed | calculated | player_id, round, health | | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ------------------------ | ------- | -------- | ---------- | ------------------------ | ---------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| player_id | int32 | False | replay | | | +| attacker_id | int32 | False | replay | | | +| health | int32 | False | replay | | | +| armor | int32 | False | replay | | | +| weapon_name | string | True | replay | | | +| health_removed | int32 | False | replay | | | +| armor_removed | int32 | False | replay | | | +| hit_box_code | int32 | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | +| attacker_id_fixed | float64 | True | merged | | attacker_id, round, steam_id | +| player_x_pos | float64 | True | merged | | player_id, tick | +| player_y_pos | float64 | True | merged | | player_id, tick | +| player_z_pos | float64 | True | merged | | player_id, tick | +| player_x_vel | float64 | True | merged | | player_id, tick | +| player_y_vel | float64 | True | merged | | player_id, tick | +| player_z_vel | float64 | True | merged | | player_id, tick | +| player_phi_ang | float64 | True | merged | | player_id, tick | +| player_theta_ang | float64 | True | merged | | player_id, tick | +| player_weapon_code | int | True | merged | | player_id, tick | +| player_team_code | int | True | merged | | player_id, tick | +| attacker_x_pos | float64 | True | merged | | attacker_id, tick | +| attacker_y_pos | float64 | True | merged | | attacker_id, tick | +| attacker_z_pos | float64 | True | merged | | attacker_id, tick | +| attacker_x_vel | float64 | True | merged | | attacker_id, tick | +| attacker_y_vel | float64 | True | merged | | attacker_id, tick | +| attacker_z_vel | float64 | True | merged | | attacker_id, tick | +| attacker_phi_ang | float64 | True | merged | | attacker_id, tick | +| attacker_theta_ang | float64 | True | merged | | attacker_id, tick | +| attacker_weapon_code | int | True | merged | | attacker_id, tick | +| attacker_team_code | int | True | merged | | attacker_id, tick | +| effective_health_removed | int | | calculated | player_id, round, health | | ## player_info - player_info Event that triggers this channel: round_freeze_end -| Col Name | Origin | Dependents | Merge Keys | -| ---------------- | ------------------ | -------------------- | -------------------------- | -| round | replay | | | -| tick | replay-deleted | | | -| player_id | replay | | | -| team_code | replay | | | -| wins | replay-capped | | | -| rank | replay | | | -| radar_color_code | replay | | | -| second | calculated-deleted | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | -| rank_raw | calculated | player_info:rank | | -| rank_platform | calculated | player_personal:rank | | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ---------------- | ------- | -------- | ------------- | -------------------- | -------------------------- | +| round | int | False | replay | | | +| player_id | int | False | replay | | | +| team_code | int32 | False | replay | | | +| wins | int | False | replay-capped | | | +| rank | int | False | replay | | | +| rank_type | int | False | replay | | | +| radar_color_code | int | False | replay | | | +| player_id_fixed | int | True | merged | | player_id, round, steam_id | +| rank_raw | int | | calculated | player_info:rank | | +| rank_platform | float64 | | calculated | player_personal:rank | | + +## player_inputs - telemetry + +Event that triggers this channel: player_buttons_state_update + +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ---------------------- | ------- | -------- | ---------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| player_id | int | False | replay | | | +| buttons_mask | int64 | False | replay | | | +| button_attack | bool | False | replay | | | +| button_attack2 | bool | False | replay | | | +| button_jump | bool | False | replay | | | +| button_duck | bool | False | replay | | | +| button_forward | bool | False | replay | | | +| button_back | bool | False | replay | | | +| button_move_left | bool | False | replay | | | +| button_move_right | bool | False | replay | | | +| button_turn_left | bool | False | replay | | | +| button_turn_right | bool | False | replay | | | +| button_use | bool | False | replay | | | +| button_reload | bool | False | replay | | | +| button_speed | bool | False | replay | | | +| button_score | bool | False | replay | | | +| button_look_at_weapon | bool | False | replay | | | +| button_zoom | bool | False | replay | | | +| button_use_or_reload | bool | False | replay | | | +| button_joy_auto_sprint | bool | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | +| player_x_pos | float64 | True | merged | | player_id, tick | +| player_y_pos | float64 | True | merged | | player_id, tick | +| player_z_pos | float64 | True | merged | | player_id, tick | +| player_x_vel | float64 | True | merged | | player_id, tick | +| player_y_vel | float64 | True | merged | | player_id, tick | +| player_z_vel | float64 | True | merged | | player_id, tick | +| player_phi_ang | float64 | True | merged | | player_id, tick | +| player_theta_ang | float64 | True | merged | | player_id, tick | +| player_weapon_code | int | True | merged | | player_id, tick | +| player_team_code | int | True | merged | | player_id, tick | ## player_name - single_event Event that triggers this channel: player_name -| Col Name | Origin | Dependents | Merge Keys | -| --------------- | --------------- | --------------- | -------------------------- | -| round | replay | | | -| tick | replay | | | -| player_id | replay | | | -| name_new | replay-redacted | | | -| name_old | replay-redacted | | | -| second | calculated | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| --------------- | ------- | -------- | --------------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| player_id | int32 | False | replay | | | +| name_new | string | False | replay-redacted | | | +| name_old | string | False | replay-redacted | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | int | True | merged | | player_id, round, steam_id | ## player_personal - player_info Event that triggers this channel: round_freeze_end -| Col Name | Origin | Dependents | Merge Keys | -| -------------------- | ------------------ | ---------------- | ---------- | -| round | replay | | | -| tick | replay-deleted | | | -| player_id | replay | | | -| player_controller_id | replay | | | -| player_id_pawn | replay | | | -| name | replay-redacted | | | -| clan_tag | replay-redacted | | | -| steam_id | replay-redacted | | | -| second | calculated-deleted | tick, tick_rate | | -| is_bot | calculated | steam_id | | -| player_id_fixed | calculated | steam_id, is_bot | | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| -------------------- | ------ | -------- | --------------- | ---------------- | ---------- | +| round | int | False | replay | | | +| player_id | int | False | replay | | | +| player_controller_id | int | False | replay | | | +| player_id_pawn | int | False | replay | | | +| name | string | False | replay-redacted | | | +| clan_tag | string | False | replay-redacted | | | +| steam_id | string | False | replay-redacted | | | +| is_bot | bool | | calculated | steam_id | | +| player_id_fixed | int | | calculated | steam_id, is_bot | | + +## player_sound - single_event + +Event that triggers this channel: player_sound + +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ------------------ | ------- | -------- | ---------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| player_id | int | False | replay | | | +| radius | int32 | False | replay | | | +| duration | float32 | False | replay | | | +| is_step | bool | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | +| player_x_pos | float64 | True | merged | | player_id, tick | +| player_y_pos | float64 | True | merged | | player_id, tick | +| player_z_pos | float64 | True | merged | | player_id, tick | +| player_x_vel | float64 | True | merged | | player_id, tick | +| player_y_vel | float64 | True | merged | | player_id, tick | +| player_z_vel | float64 | True | merged | | player_id, tick | +| player_phi_ang | float64 | True | merged | | player_id, tick | +| player_theta_ang | float64 | True | merged | | player_id, tick | +| player_weapon_code | int | True | merged | | player_id, tick | +| player_team_code | int | True | merged | | player_id, tick | ## player_spawn - single_event Event that triggers this channel: player_spawn -| Col Name | Origin | Dependents | Merge Keys | -| ------------------ | ---------- | --------------- | -------------------------- | -| round | replay | | | -| tick | replay | | | -| player_id | replay | | | -| second | calculated | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | -| player_x_pos | merged | | player_id, tick | -| player_y_pos | merged | | player_id, tick | -| player_z_pos | merged | | player_id, tick | -| player_x_vel | merged | | player_id, tick | -| player_y_vel | merged | | player_id, tick | -| player_z_vel | merged | | player_id, tick | -| player_phi_ang | merged | | player_id, tick | -| player_theta_ang | merged | | player_id, tick | -| player_weapon_code | merged | | player_id, tick | -| player_team_code | merged | | player_id, tick | -| player_tick | merged | | player_id, tick | -| player_player_id | merged | | player_id, tick | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ------------------ | ------- | -------- | ---------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| player_id | int32 | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | +| player_x_pos | float64 | True | merged | | player_id, tick | +| player_y_pos | float64 | True | merged | | player_id, tick | +| player_z_pos | float64 | True | merged | | player_id, tick | +| player_x_vel | float64 | True | merged | | player_id, tick | +| player_y_vel | float64 | True | merged | | player_id, tick | +| player_z_vel | float64 | True | merged | | player_id, tick | +| player_phi_ang | float64 | True | merged | | player_id, tick | +| player_theta_ang | float64 | True | merged | | player_id, tick | +| player_weapon_code | int | True | merged | | player_id, tick | +| player_team_code | int | True | merged | | player_id, tick | ## player_status - telemetry Event that triggers this channel: tick_end -| Col Name | Origin | Dependents | Merge Keys | -| ----------------------------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | -| tick | replay | | | -| round | replay | | | -| player_id | replay | | | -| player_controller_id | replay | | | -| armor | replay | | | -| health | replay | | | -| place_name | replay | | | -| inv_primary | replay | | | -| inv_secondary | replay | | | -| inv_flashbang | replay | | | -| inv_taser | replay | | | -| inv_hegrenade | replay | | | -| inv_smokegrenade | replay | | | -| inv_molotov | replay | | | -| inv_decoy | replay | | | -| inv_incgrenade | replay | | | -| inv_c4 | replay | | | -| current_equipment_cost | replay | | | -| freezetime_end_equipment_cost | replay | | | -| money | replay | | | -| ping | replay-redacted | | | -| round_start_equipment_cost | replay | | | -| zoom_level | replay | | | -| iron_sight_mode | replay | | | -| burst_mode | replay | | | -| is_silenced | replay | | | -| reload_visually_complete | replay | | | -| weapon_mode | replay | | | -| flash_duration | replay | | | -| flash_max_alpha | replay | | | -| has_c4 | replay | | | -| has_defuser | replay | | | -| has_helmet | replay | | | -| is_defusing | replay | | | -| is_fake_player | replay | | | -| is_in_bomb_zone | replay | | | -| is_in_buy_zone | replay | | | -| is_scoped | replay | | | -| is_spotted | replay | | | -| is_walking | replay | | | -| second | calculated | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | -| equipment_value_calc | 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 | | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ----------------------------- | ------- | -------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | +| tick | int | False | replay | | | +| round | int | False | replay | | | +| player_id | int | False | replay | | | +| player_controller_id | int | False | replay | | | +| armor | int | False | replay | | | +| health | int | False | replay | | | +| place_name | string | False | replay | | | +| inv_primary | int | False | replay | | | +| inv_secondary | int | False | replay | | | +| inv_flashbang | int | False | replay | | | +| inv_taser | int | False | replay | | | +| inv_hegrenade | int | False | replay | | | +| inv_smokegrenade | int | False | replay | | | +| inv_molotov | int | False | replay | | | +| inv_decoy | int | False | replay | | | +| inv_incgrenade | int | False | replay | | | +| inv_c4 | int | False | replay | | | +| current_equipment_cost | int | False | replay | | | +| freezetime_end_equipment_cost | int | False | replay | | | +| money | int | False | replay | | | +| ping | int | False | replay-redacted | | | +| round_start_equipment_cost | int | False | replay | | | +| zoom_level | int | True | replay | | | +| iron_sight_mode | int | True | replay | | | +| burst_mode | bool | True | replay | | | +| is_silenced | bool | True | replay | | | +| weapon_mode | int | True | replay | | | +| flash_duration | float32 | False | replay | | | +| flash_max_alpha | float32 | False | replay | | | +| has_c4 | bool | False | replay | | | +| has_defuser | bool | False | replay | | | +| has_helmet | bool | False | replay | | | +| is_defusing | bool | False | replay | | | +| is_fake_player | bool | False | replay | | | +| is_in_bomb_zone | bool | False | replay | | | +| is_in_buy_zone | bool | False | replay | | | +| is_reloading | bool | False | replay | | | +| is_scoped | bool | False | replay | | | +| is_spotted | bool | False | replay | | | +| is_walking | bool | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | +| equipment_value_calc | int | | 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 | | ## player_vector - telemetry Event that triggers this channel: tick_end -| Col Name | Origin | Dependents | Merge Keys | -| --------------------- | ---------- | ------------------------------------------- | -------------------------- | -| tick | replay | | | -| round | replay | | | -| player_id | replay | | | -| x_pos | replay | | | -| y_pos | replay | | | -| z_pos | replay | | | -| x_aimpunch | replay | | | -| y_aimpunch | replay | | | -| current_ammo | replay | | | -| weapon_code | replay | | | -| inaccuracy | replay | | | -| last_shot_time | replay | | | -| recoil_index | replay | | | -| phi_ang | replay | | | -| theta_ang | replay | | | -| is_ducked | replay | | | -| is_ducking | replay | | | -| duck_amount | replay | | | -| duck_speed | replay | | | -| fall_velocity | replay | | | -| view_punch_angle_tick | replay | | | -| aim_punch_angle_vel_x | replay | | | -| aim_punch_angle_vel_y | replay | | | -| aim_punch_angle_vel_z | replay | | | -| is_rescuing | replay | | | -| second | calculated | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | -| team_code | merged | | round, player_id | -| theta_vel | calculated | second, player_id, theta | | -| phi_vel | calculated | second, player_id, phi | | -| ang_vel | calculated | phi_vel, theta_vel | | -| x_vel | calculated | second, x_pos | | -| y_vel | calculated | second, y_pos | | -| z_vel | calculated | second, z_pos | | -| x_vel | calculated | second, x_pos | | -| y_vel | calculated | second, y_pos | | -| z_vel | calculated | second, z_pos | | -| x_vel | calculated | second, x_pos | | -| y_vel | calculated | second, y_pos | | -| z_vel | calculated | second, z_pos | | -| x_vel | calculated | second, x_pos | | -| y_vel | calculated | second, y_pos | | -| z_vel | calculated | second, z_pos | | -| x_vel | calculated | second, x_pos | | -| y_vel | calculated | second, y_pos | | -| z_vel | calculated | second, z_pos | | -| x_vel | calculated | second, x_pos | | -| y_vel | calculated | second, y_pos | | -| z_vel | calculated | second, z_pos | | -| x_vel | calculated | second, x_pos | | -| y_vel | calculated | second, y_pos | | -| z_vel | calculated | second, z_pos | | -| x_vel | calculated | second, x_pos | | -| y_vel | calculated | second, y_pos | | -| z_vel | calculated | second, z_pos | | -| x_vel | calculated | second, x_pos | | -| y_vel | calculated | second, y_pos | | -| z_vel | calculated | second, z_pos | | -| x_vel | calculated | second, x_pos | | -| y_vel | calculated | second, y_pos | | -| z_vel | calculated | second, z_pos | | -| speed_2d | calculated | x_vel, y_vel | | -| movement_angle | calculated | second, x_vel, y_vel | | -| movement_angle_diff | calculated | second, speed_2d, theta_ang, movement_angle | | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| --------------------- | ------- | -------- | ---------- | ------------------------------------------- | -------------------------- | +| tick | int | False | replay | | | +| round | int | False | replay | | | +| player_id | int | False | replay | | | +| x_pos | float64 | False | replay | | | +| y_pos | float64 | False | replay | | | +| z_pos | float64 | False | replay | | | +| current_ammo | int | True | replay | | | +| weapon_code | int | True | replay | | | +| inaccuracy | float32 | True | replay | | | +| last_shot_time | float32 | True | replay | | | +| recoil_index | float32 | True | replay | | | +| phi_ang | float32 | False | replay | | | +| theta_ang | float32 | False | replay | | | +| is_ducked | bool | False | replay | | | +| is_ducking | bool | False | replay | | | +| duck_amount | float32 | False | replay | | | +| duck_speed | float32 | False | replay | | | +| fall_velocity | float32 | False | replay | | | +| view_punch_angle_tick | int | False | replay | | | +| is_rescuing | bool | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | +| team_code | int | True | merged | | round, player_id | +| theta_vel | float64 | | calculated | second, player_id, theta | | +| phi_vel | float64 | | calculated | second, player_id, phi | | +| ang_vel | float64 | | calculated | phi_vel, theta_vel | | +| x_vel | float64 | | calculated | second, x_pos | | +| y_vel | float64 | | calculated | second, y_pos | | +| z_vel | float64 | | calculated | second, z_pos | | +| speed_2d | float64 | | calculated | x_vel, y_vel | | +| movement_angle | float64 | | calculated | second, x_vel, y_vel | | +| movement_angle_diff | float64 | | calculated | second, speed_2d, theta_ang, movement_angle | | + +## rank_update - single_event + +Event that triggers this channel: rank_update + +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ------------------ | ------- | -------- | ------------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| player_id | int | False | replay | | | +| rank_old | int32 | False | replay | | | +| rank_new | int32 | False | replay | | | +| rank_change | float32 | False | replay | | | +| win_count | int32 | False | replay-capped | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | +| player_x_pos | float64 | True | merged | | player_id, tick | +| player_y_pos | float64 | True | merged | | player_id, tick | +| player_z_pos | float64 | True | merged | | player_id, tick | +| player_x_vel | float64 | True | merged | | player_id, tick | +| player_y_vel | float64 | True | merged | | player_id, tick | +| player_z_vel | float64 | True | merged | | player_id, tick | +| player_phi_ang | float64 | True | merged | | player_id, tick | +| player_theta_ang | float64 | True | merged | | player_id, tick | +| player_weapon_code | int | True | merged | | player_id, tick | +| player_team_code | int | True | merged | | player_id, tick | ## round_end - single_event Event that triggers this channel: round_end -Note: this event is no longer in the .dem files. This channel is inferred from other round events. - -| Col Name | Origin | Dependents | Merge Keys | -| ------------------ | ---------- | --------------- | ---------- | -| round | replay | | | -| tick | replay | | | -| winner_team_code | replay | | | -| win_reason_code | replay | | | -| win_reason_message | replay | | | -| legacy_code | replay | | | -| player_count | replay | | | -| second | calculated | tick, tick_rate | | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ------------------ | ------- | -------- | ---------- | --------------- | ---------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| winner_team_code | int32 | False | replay | | | +| win_reason_code | int32 | False | replay | | | +| win_reason_message | string | False | replay | | | +| player_count | int32 | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | ## round_mvp - single_event Event that triggers this channel: round_mvp -| Col Name | Origin | Dependents | Merge Keys | -| --------------- | ---------- | --------------- | -------------------------- | -| round | replay | | | -| tick | replay | | | -| player_id | replay | | | -| mvp_reason_code | replay | | | -| music_kit_mvps | replay | | | -| second | calculated | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| --------------- | ------- | -------- | ---------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| player_id | int32 | False | replay | | | +| mvp_count | int | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | int | True | merged | | player_id, round, steam_id | -## round_start -single_event +## round_start - single_event Event that triggers this channel: round_start -Note: this event is no longer in the .dem files. This channel is inferred from other round events. - -| Col Name | Origin | Dependents | Merge Keys | -| ---------- | ---------- | --------------- | ---------- | -| round | replay | | | -| tick | replay | | | -| time_limit | replay | | | -| frag_limit | replay | | | -| objective | replay | | | -| second | calculated | tick, tick_rate | | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| -------- | ------- | -------- | ---------- | --------------- | ---------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | ## round_state - multi_event -Events that trigger this channel: cs_round_start_beep, cs_round_final_beep, cs_win_panel_round, cs_pre_restart, round_prestart, round_poststart, round_announce_last_round_half, announce_phase_end, round_announce_final, round_announce_match_point, cs_win_panel_match, begin_new_match, buytime_ended, round_announce_match_start, round_announce_warmup, round_freeze_end, start_halftime, round_officially_ended, round_end - -| Col Name | Origin | Dependents | Merge Keys | -| ------------ | ------------ | --------------- | ---------- | -| round | replay | | | -| tick | replay | | | -| event_type | replay | | | -| t_score | replay_fixed | | | -| ct_score | replay_fixed | | | -| t_score_raw | replay | | | -| ct_score_raw | replay | | | -| phase | replay | | | -| is_warmup | replay | | | -| second | calculated | tick, tick_rate | | - -## tick - single_event +Events that trigger this channel: begin_new_match, bomb_defused, bomb_exploded, bomb_planted, buytime_ended, round_announce_match_start, round_announce_warmup, round_end, round_freeze_end, round_officially_ended, round_start, start_halftime + +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ------------ | ------- | -------- | ------------ | --------------- | ---------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| event_type | string | False | replay | | | +| t_score | int | False | replay_fixed | | | +| ct_score | int | False | replay_fixed | | | +| t_score_raw | int | False | replay | | | +| ct_score_raw | int | False | replay | | | +| phase | string | False | replay | | | +| is_warmup | bool | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | + +## score_update - single_event + +Event that triggers this channel: score_update + +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| --------- | ------- | -------- | ---------- | --------------- | ---------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| team_code | int32 | False | replay | | | +| old_score | int32 | False | replay | | | +| new_score | int32 | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | + +## team_change - single_event + +Event that triggers this channel: player_team + +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ------------------ | ------- | -------- | ---------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| player_id | int | False | replay | | | +| old_team_code | int32 | False | replay | | | +| new_team_code | int32 | False | replay | | | +| is_bot | bool | False | replay | | | +| silent | bool | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | +| player_x_pos | float64 | True | merged | | player_id, tick | +| player_y_pos | float64 | True | merged | | player_id, tick | +| player_z_pos | float64 | True | merged | | player_id, tick | +| player_x_vel | float64 | True | merged | | player_id, tick | +| player_y_vel | float64 | True | merged | | player_id, tick | +| player_z_vel | float64 | True | merged | | player_id, tick | +| player_phi_ang | float64 | True | merged | | player_id, tick | +| player_theta_ang | float64 | True | merged | | player_id, tick | +| player_weapon_code | int | True | merged | | player_id, tick | +| player_team_code | int | True | merged | | player_id, tick | + +## tick - telemetry Event that triggers this channel: tick_end -| Col Name | Origin | Dependents | Merge Keys | -| --------------------------- | ---------- | ------------------ | ---------- | -| round | replay | | | -| tick | replay | | | -| second | calculated | tick, tick_rate | | -| previous_phase | calculated | event_type, second | | -| second_since_previous_phase | calculated | second | | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| --------------------------- | ------- | -------- | ---------- | ------------------ | ---------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| previous_phase | string | | calculated | event_type, second | | +| second_since_previous_phase | float64 | | calculated | second | | ## weapon_action - multi_event Events that trigger this channel: fire_on_empty, reload, zoom, zoom_rifle -| Col Name | Origin | Dependents | Merge Keys | -| ------------------ | ---------- | --------------- | -------------------------- | -| round | replay | | | -| tick | replay | | | -| event_type | replay | | | -| player_id | replay | | | -| second | calculated | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | -| player_x_pos | merged | | player_id, tick | -| player_y_pos | merged | | player_id, tick | -| player_z_pos | merged | | player_id, tick | -| player_x_vel | merged | | player_id, tick | -| player_y_vel | merged | | player_id, tick | -| player_z_vel | merged | | player_id, tick | -| player_phi_ang | merged | | player_id, tick | -| player_theta_ang | merged | | player_id, tick | -| player_weapon_code | merged | | player_id, tick | -| player_team_code | merged | | player_id, tick | -| player_tick | merged | | player_id, tick | -| player_player_id | merged | | player_id, tick | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ------------------ | ------- | -------- | ---------- | --------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| event_type | string | False | replay | | | +| player_id | int32 | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | +| player_x_pos | float64 | True | merged | | player_id, tick | +| player_y_pos | float64 | True | merged | | player_id, tick | +| player_z_pos | float64 | True | merged | | player_id, tick | +| player_x_vel | float64 | True | merged | | player_id, tick | +| player_y_vel | float64 | True | merged | | player_id, tick | +| player_z_vel | float64 | True | merged | | player_id, tick | +| player_phi_ang | float64 | True | merged | | player_id, tick | +| player_theta_ang | float64 | True | merged | | player_id, tick | +| player_weapon_code | int | True | merged | | player_id, tick | +| player_team_code | int | True | merged | | player_id, tick | ## weapon_fire - single_event Event that triggers this channel: weapon_fire -| Col Name | Origin | Dependents | Merge Keys | -| ------------------ | ---------- | ---------------------------------------------- | -------------------------- | -| round | replay | | | -| tick | replay | | | -| player_id | replay | | | -| player_id_pawn | replay | | | -| weapon_name | replay | | | -| is_silenced | replay | | | -| second | calculated | tick, tick_rate | | -| player_id_fixed | merged | | player_id, round, steam_id | -| player_x_pos | merged | | player_id, tick | -| player_y_pos | merged | | player_id, tick | -| player_z_pos | merged | | player_id, tick | -| player_x_vel | merged | | player_id, tick | -| player_y_vel | merged | | player_id, tick | -| player_z_vel | merged | | player_id, tick | -| player_phi_ang | merged | | player_id, tick | -| player_theta_ang | merged | | player_id, tick | -| player_weapon_code | merged | | player_id, tick | -| player_team_code | merged | | player_id, tick | -| player_tick | merged | | player_id, tick | -| player_player_id | merged | | player_id, tick | -| missed_molotov | calculated | event_type-molotov_state, second-molotov_state | | +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ------------------ | ------- | -------- | ---------- | ---------------------------------------------- | -------------------------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| player_id | int32 | False | replay | | | +| player_id_pawn | int32 | False | replay | | | +| weapon_name | string | False | replay | | | +| is_silenced | bool | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | +| player_id_fixed | float64 | True | merged | | player_id, round, steam_id | +| player_x_pos | float64 | True | merged | | player_id, tick | +| player_y_pos | float64 | True | merged | | player_id, tick | +| player_z_pos | float64 | True | merged | | player_id, tick | +| player_x_vel | float64 | True | merged | | player_id, tick | +| player_y_vel | float64 | True | merged | | player_id, tick | +| player_z_vel | float64 | True | merged | | player_id, tick | +| player_phi_ang | float64 | True | merged | | player_id, tick | +| player_theta_ang | float64 | True | merged | | player_id, tick | +| player_weapon_code | int | True | merged | | player_id, tick | +| player_team_code | int | True | merged | | player_id, tick | +| missed_molotov | int | | calculated | event_type-molotov_state, second-molotov_state | | + +## world_item_vector - telemetry + +Event that triggers this channel: tick_end + +| Col Name | Type | Nullable | Origin | Dependents | Merge Keys | +| ------------- | ------- | -------- | ---------- | --------------- | ---------- | +| round | int | False | replay | | | +| tick | int | False | replay | | | +| entity_id | int32 | False | replay | | | +| prev_owner_id | int | False | replay | | | +| item | string | False | replay | | | +| def_index | int32 | False | replay | | | +| x_pos | float64 | False | replay | | | +| y_pos | float64 | False | replay | | | +| z_pos | float64 | False | replay | | | +| second | float64 | | calculated | tick, tick_rate | | diff --git a/docs/datascience/old/README.md b/docs/datascience/old/README.md new file mode 100644 index 0000000..e42e51c --- /dev/null +++ b/docs/datascience/old/README.md @@ -0,0 +1,54 @@ +--- +sidebar_label: About the archive +--- + +# Archive + +Older versions of these pages, kept because subscribers hold data that matches +them. Nothing here describes the data set as it is published today. + +If you downloaded a revision and want to know what its columns meant at the +time, start here. If you want to know what is being published now, start at +[PureSkill.gg Data Science](/datascience/). + +## What is in here + +| Page | Describes | Last current | +| --------------------------------------------------- | ------------------------------------------------------------------------------- | ------------ | +| [Data Science FAQ](./datascience-faq.md) | Python 3.9 and Poetry tooling, 2022 download cost estimates, the CS:GO data set | 2022-07-04 | +| [Competitive CS2 Gameplay](./cs2/csds/README.md) | The CS2 data set at 31 files per match | 2024-02-24 | +| [CSDS Spec (CS2)](./cs2/csds/spec.md) | 30 CS2 channels | 2024-02-24 | +| [Competitive CS:GO Gameplay](./csgo/csds/README.md) | The data set while it carried CS:GO data | 2024-02-24 | +| [CSDS Spec (CS:GO)](./csgo/csds/spec.md) | 32 CS:GO channels | 2024-02-24 | +| [Revision Stats (CS:GO)](./csgo/csds/revisions.md) | CS:GO matches per day | 2022 | + +The three CS:GO pages keep their original addresses under +`/datascience/adx/csgo/`, so links published before the archive was created +still resolve. + +## What changed since + +- **CS:GO data stopped being produced.** Counter-Strike: Global Offensive was + replaced by Counter-Strike 2 in September 2023, and the pipeline no longer + parses CS:GO demos. There is one AWS Data Exchange product throughout; it + carries CS2 data now and retains no CS:GO revisions. Four CS:GO channels have + no CS2 equivalent: `item_remove`, `player_action`, `player_fall` and + `player_interaction`. +- **CS2 went from 30 channels to 42.** Fourteen were added: `bullet_damage`, + `grenade_bounce`, `grenade_vector`, `item_dropped`, `item_refund`, + `molotov_fire`, `player_chat`, `player_connect`, `player_inputs`, + `player_sound`, `rank_update`, `score_update`, `team_change` and + `world_item_vector`. Two were removed: `item_remove` and `player_action`. + Published revisions changed over during the first days of August 2026: + revisions through 2026-07-31 carry the old set, 2026-08-02 holds a mix, and + 2026-08-04 onward carry the new one. +- **Two columns went away.** `player_tick` and `player_player_id` were dropped + from every channel that merged in player position. `tick` and `second` are no + longer published on `player_info` or `player_personal`. +- **The tooling moved.** The tutorial needs Python 3.14 and [uv], not Python 3.9 + and Poetry. +- **Revisions are kept for about a year.** Revisions older than that are + revoked and emptied. The archived pages say old data is deleted "at our + discretion", which understates how regular the pruning now is. + +[uv]: https://docs.astral.sh/uv/ diff --git a/docs/datascience/adx/csgo/_category_.yml b/docs/datascience/old/_category_.yml similarity index 58% rename from docs/datascience/adx/csgo/_category_.yml rename to docs/datascience/old/_category_.yml index 690e59a..22bc10b 100644 --- a/docs/datascience/adx/csgo/_category_.yml +++ b/docs/datascience/old/_category_.yml @@ -1,4 +1,5 @@ --- -label: CS:GO Data Sets +label: Archive +position: 3 collapsible: true collapsed: true diff --git a/docs/datascience/old/cs2/_category_.yml b/docs/datascience/old/cs2/_category_.yml new file mode 100644 index 0000000..7f51a48 --- /dev/null +++ b/docs/datascience/old/cs2/_category_.yml @@ -0,0 +1,4 @@ +--- +label: CS2 Data Sets (archived) +collapsible: true +collapsed: true diff --git a/docs/datascience/old/cs2/csds/README.md b/docs/datascience/old/cs2/csds/README.md new file mode 100644 index 0000000..5ba2c37 --- /dev/null +++ b/docs/datascience/old/cs2/csds/README.md @@ -0,0 +1,406 @@ +--- +sidebar_label: Competitive CS2 Gameplay (archived) +--- + +# PureSkill.gg Competitive CS2 Gameplay + +:::warning Archived page + +This is the CS2 data set page as it stood on 2024-02-24. It describes 31 files per +match; the data set has published 42 channels plus the index object since +August 2026. It is kept as a record for anyone working with data downloaded +before then. The current page is [Competitive CS2 Gameplay](/datascience/adx/cs2/csds/). + +::: + +_This data set is hosted as a [product on the AWS Data Exchange][product page]._ + +Competitive Counter-Strike 2 (CS2) +match data from matchmaking, FACEIT, and other third-parties. +Contains full player telemetry and timestamped game events. +These data are extracted from CS2 replay files called demos. +Data for each match is split across 31 files, collectively called csds. + +Please visit **[docs.pureskill.gg/datascience][datascience docs]** +for full introduction to PureSkill.gg data science, +additional documentation, and a copy of this document. + +## License (CC BY-NC-SA 4.0) + +Please read through the Data Subscriber Agreement (DSA). +The DSA is available on the [Product Page] under the Usage section. + +The key requirements of DSA state you may not use the data for commercial purposes, +you must attribute PureSkill.gg, and you must use the same license for any derived work. +A ["human-readable" summary of the license][cc by-nc-sa 4.0] is provided by Creative Commons, +but this is not a substitute for the DSA. + +## Attribution + +As outlined in the DSA, if you publish a visualization, +video, text summary, or other transformed version of the data, you must provide attribution. +We ask that the shared media contain the text "Data provided by PureSkill.gg." +with that exact capitalization. + +Please let us know if you publish content derived from the data set +by sending an email to [contact@pureskill.gg][email] +or by contacting us on our [Discord]. + +## Pricing Information + +The dataset is provided free of charge. + +Downloading the data set will incur standard AWS usage fees. +FPS Critic Inc., owner of PureSkill.gg, is not liable for any AWS costs you incur. + +## Gaining Access + +We want to understand your amazing project and help you get up and running with the data set. +When you [subscribe to this data product][product page], we will need to approve your subscription request. +Please outline your use case in the request and allow a few days for review. +We may send a follow up email before confirming your request. + +Once approved, you can access the developer channels on [Discord], just let us know your Discord username. + +## Need Help? + +If you have questions, email us at contact@pureskill.gg +or reach out on [Discord]. + +## About PureSkill.gg + +PureSkill.gg provides AI-powered coaching for CS2 players of all ranks +to hone their skills, rank up, and dominate the game. + +- [Website] +- [Discord] +- [YouTube] +- [LinkedIn] +- [Twitter] +- [Facebook] +- [Instagram] + +## Datasheet + +_Based on [Datasheets for Datasets]._ + +### Data Dictionary + +A [Data Dictionary](./assets/csds_dictionary.csv) is available. +This is a standardized CSV file that catalogues all tables and columns in the data set. + +### Glossary + +- [AWS] - Amazon Web Services. +- [ADX] - AWS Data Exchange. +- DSA - Data Subscriber Agreement. + Find this in your AWS account under the ADX subscription to this data set. +- PII - Personally Identifiable Information. +- channel - One of the 33 files that combine to make a csds object. +- csds - The name given to the collection of 33 files extracted from a CS2 demo. +- demo - The name given to the server-recorded stream of event data from a match of CS2. + Sometimes ends in the .dem file extension. +- [CS2] - Counter-Strike: Global Offensive. + The game created by Valve that is played to generate this dataset. +- [Valve] - The company that makes CS2. +- [Steam] - The platform created by Valve that CS2 players use to play the game online. +- [FACEIT] - A third-party platform used to play CS2 online. + +### Motivation + +- **For what purpose was the dataset created?** + For education and machine learning research. + Gameplay data from video games provide a fun and relevant way to learn statistics, programming, and more. Though no specific machine learning problem is defined here, + we provide [open source tooling][makenew-pyskill] to create baseline datasets + that can include some target for supervised learning or an objective for unsupervised learning. + Some example machine learning problems include: + clustering how items are used, building win probability models, + analyzing player movement patterns, decision making around economic purchases, + and finding optimal pathing. + +- **Who created the dataset and on behalf of which entity?** + Ethan Batson, William Robert Freeman, and Evan Sosenko for FPS Critic, Inc., + which produces PureSkill.gg. + +- **Who funded the creation of the dataset?** + FPS Critic, Inc. who produces PureSkill.gg. + +- **Any other comments?** + If you would like to use the dataset for a different purpose, + please reach out to [contact@pureskill.gg][email] or contact us on [Discord]. + +### Composition + +- **What do the instances that comprise the dataset represent?** + Parsed and processed individual matches of CS2. + +- **How many instances are there in total?** + Approximately 60,000 matches of CS2 with ~250 added each day. + +- **Does the dataset contain all possible instances or is it a sample of instances from a larger set?** + It is a complete picture of all CS2 demos available to PureSkill.gg. + There are [500,000 people playing CS2 at any point in a day][cs2 chart], + and assuming a match takes 1 hour and 10 players, + there are 1.2 million matches played every day. + The dataset here is a subset of those matches played by the larger CS2 community. + +- **What data does each instance consist of?** + CS2 demo files are [parsed][demoinfocs-golang] and saved as 33 separate channels. + The collection of these channels for a match is called csds. + We provide an [open source SDK][makenew-pyskill] to work with the csds data. + +- **Is there a label or target associated with each instance?** + No, however we provide an open source tool called [makenew-pyskill] + to easily create a view of these matches with a target for machine learning prediction in mind. + +- **Is any information missing from individual instances?** + We are always improving our processing pipeline, + and some matches may have been processed using older versions of certain programs. + Notably, older matches from the FACEIT platform are missing information about player ranks. + +- **Are relationships between individual instances made explicit?** + Since we have anonymized player data, + it is not possible to tell if a player in one match is the same as a player in a different match. + However, since all the data were uploaded by PureSkill.gg users, an individual may appear in many matches. It is not possible to tell who the PureSkill.gg user is with the data provided. + +- **Are there recommended data splits?** + No, however we provide an open source tool called [makenew-pyskill] + to easily create a view of these matches with a target for machine learning prediction. + One can split the data however appropriate for the task at hand. + +- **Are there any errors, sources of noise, or redundancies in the dataset?** + There may be duplicate matches in the dataset. + These can be deduplicated by comparing calculated values from the header channel. + Within matches, there may be missing ticks and missing events. + These are generally rare and non-disruptive, but could interfere with some calculations. + Any problematic matches can be skipped for most use cases. + +- **Is the dataset self-contained, or does it link to or otherwise rely on external resources?** + Within the dataset, we do not link to external resources. + However, properties of game items, map backgrounds for visualizations, and much more are available online. At present, we do not maintain a current or historical version of such files. + +- **Does the dataset contain data that might be considered confidential?** + No. + +- **Does the dataset contain data that, if viewed directly, might be offensive, insulting, threatening, or might otherwise cause anxiety?** + Yes, but keep in mind this is all video game data. + Out of an abundance of caution, we list these elements of the dataset that may be inappropriate for younger audiences below. + CS2 has a rating by the [ESRB] of [Mature][esrb ratings] for [Blood and Intense Violence][esrb cs2]. + CS2 is basically a SWAT team simulator. + The game includes realistic weapons, bombs, hostages, terrorists, killing, death, and grenades. + There are no player names, text chat, or voice chat data in the dataset. + It is possible to draw offensive pictures by shooting a wall and if visualized, + this may be considered offensive. + +- **Does the dataset relate to people?** + Yes, since most of the data was generated by people. + Some data is generated from bots, but that is rare, + and bot status is known from the `player_personal` channel. + Note that this and other channels do not contain any personal information, + which has been removed using [open source tooling][pii_remover]. + +- **Does the dataset identify any subpopulations?** + Not directly. + However, for CS2 demos from Valve Matchmaking, the server location + is in the name, and one may infer player region (such as US West, South America, or India). + +- **Does the dataset contain data that might be considered sensitive in any way?** + No. + +### Collection Process + +- **How was the data associated with each instance acquired?** + Demos were provided by users of PureSkill.gg. + We automatically acquire demos from Steam and FACEIT. + Automatic demo acquisition requires a user to connect their account to PureSkill.gg. + Some users may manually upload demos into the system. + For manually uploaded demos, we do not know the actual date they were played, + so the match_played date is actually the uploaded date. + The acquisition method is saved under providence (as user or auto) + and the server provider is saved under platform (steam, faceit, or unknown). + Both of these are in the header channel. + From the [Steam help page on API connections] (requires login): + + > You can create game authentication codes to allow third-party websites and applications to manage your game without running the actual game client. Third-party websites and applications can use this authentication code to access your match history, your overall performance in those matches, download replays of your matches, and analyze your gameplay. + +- **What mechanisms or procedures were used to collect the data ?** + The CS2 server records a stream of events from every player and game element into a demo. + We then collect the demo file through the APIs described above or through manual upload. + +- **If the dataset is a sample from a larger set, what was the sampling strategy?** + It is a full sample of data from PureSkill.gg, except for any demos with errors. + This is a subset of the many, many CS2 matches played every day. + It is not guaranteed that this dataset is unbiased because all of the demos come from PureSkill.gg users. + This is mitigated by the fact that generally the 9 other players + in a 10 player match are not PureSkill.gg users. + There are thousands of PureSkill.gg users with valid API connections (required to upload data). + +- **Who was involved in the data collection process and how were they compensated?** + The data was collected through users of the website PureSkill.gg. + Cloud processing costs were paid by FPS Critic, Inc. who produces PureSkill.gg. + +- **Over what timeframe was the data collected?** + 2021-12-01 to present. + +- **Were any ethical review processes conducted?** + No. + +- **Did you collect the data from the individuals in question directly, or obtain it via third parties or other sources?** + PureSkill.gg users must create an account on PureSkill.gg and connect to Steam or FACEIT APIs + from which we download the CS2 demo files. + The user must either login to FACEIT or provide a unique, non-public key to connect to Steam. + Both connections can be revoked at any time. + +- **Were the individuals in question notified about the data collection?** + We must collect a user's CS2 demo files to provide our services, + and they agree to this in the PureSkill.gg [Terms of Service]. + There is data for players that did not agree to our terms of service. + Since the processed data we are providing here do not contain anything identifiable + or that can otherwise be linked back to their Steam account, we include these player's data. + +- **Did the individuals in question consent to the collection and use of their data?** + PureSkill.gg Users agreed to the [Terms of Service] and linked their Steam or FACEIT accounts + which gives us access to their CS2 demo files. + However, people who happen to be playing on the same server did not. + Since the processed data we are providing here do not contain anything identifiable + or that can otherwise be linked back to their Steam account, we include these player's data. + +- **If consent was obtained, were the consenting individuals provided with a mechanism to revoke their consent in the future or for certain uses?** + PureSkill.gg users can disconnect their connections between PureSkill.gg and FACEIT or Steam. + PureSkill.gg complies with GDPR as outlined in our [Privacy Policy] which supports entire account deletion. + +- **Has an analysis of the potential impact of the dataset and its use on data subjects been conducted?** + We have gone through great lengths to prevent any way to identify a person in the dataset. + It should be impossible. + Any attempts to identify people, players' Steam IDs, or online identities + are not permitted. + Therefore it will not impact the data subjects. + +### Preprocessing, Cleaning, and Labeling + +- **Was any preprocessing/cleaning/labeling of the data done?** + Raw CS2 demo files are event streams. + The events and tables can be accessed with a [parser][demoinfocs-golang]. + The CS2 demo files are first processed by our parser, + and the output of the parser is what we call a replay. + The replay is transformed by a Post Parser Processor (PPP) + where we engineer new columns, clean up extraneous round data, and fix certain values. + +- **Was the "raw" data saved in addition to the preprocessed/cleaned/labeled data?** + CS2 demo files are deleted quickly after they are processed. + If we need to add new features based on demos, + we can update the pipeline and new data will contain the new information. + Since new matches are streaming in automatically each day, + it will be sufficient to update that step to create a new dataset with the improved feature. + +- **Is the software used to preprocess/clean/label the instances available?** + Not at present, but we may release this in the future. + +### Uses + +- **Has the dataset been used for any tasks already?** + A similar dataset was used to develop machine learning models and other assessments + for the main service provided by PureSkill.gg, which is automated coaching. + An older, unavailable version of these data were used in + _[Analyzing the Differences between Professional and Amateur Esports through Win Probability]_ by authors Peter Xenopoulos, William Robert Freeman, and Claudio Silva. + +- **Is there a repository that links to any or all papers or systems that use the dataset?** + Not at present, but we may add this later. + +- **What other tasks could the dataset be used for?** + Aside from education and machine learning research, + this could be used to analyze the game itself, + including player tendencies and how they shift over time. + +- **Is there anything about the composition of the dataset or the way it was collected and preprocessed/cleaned/labeled that might impact future uses?** + No. + +- **Are there tasks for which the dataset should not be used?** + It should not be used in any manner that is against the DSA, including but not limited to commercial use and releasing transformed data without attribution. + Subscribers should not attempt to identify any player's Steam ID or online identities, + or to download the source demo file. + +### Distribution + +- **Will the dataset be distributed to third parties outside of the entity on behalf of which the dataset was created?** + The dataset was created using AWS tooling and it will remain there for distribution. + +- **How will the dataset be distributed?** + The data will be distributed on the ADX. + The license permits sharing modified versions of the dataset under a specific license. + See the DSA for details. + +- **When will the dataset be distributed?** + Starting on 2022-05-17 with a one month automatically renewing subscription. + +- **Will the dataset be distributed under a copyright or other intellectual property license, and/or under applicable terms of use?** + Yes, under the DSA, which has similar terms to the + [Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) license][cc by-nc-sa 4.0]. + Note that the DSA is the license, not the Creative Commons website or their generic version of the license. + +- **Have any third parties imposed IP-based or other restrictions on the data associated with the instances?** + We removed all PII or traces back to any Steam ID or online identities. + Steam is the platform used to play CS2, and while a game account may be anonymous, + we have taken great care to remove any possibility of scraping valid Steam IDs or online identifiers + from the data or the ability to download the CS2 demo file. + +- **Do any export controls or other regulatory restrictions apply to the dataset or to individual + instances?** + No. + +### Maintenance + +- **Who will be supporting/hosting/maintaining the dataset?** + FPS Critic, Inc. who produces PureSkill.gg. + +- **How can the owner/curator/manager of the dataset be contacted (e.g., email address)?** + Email [contact@pureskill.gg][email] or reach out on [Discord]. + +- **Is there an erratum?** + Not yet. + +- **Will the dataset be updated?** + The dataset will be updated every day with new data. + +- **If the dataset relates to people, are there applicable limits on the retention of the data + associated with the instances?** + No + +- **Will older versions of the dataset continue to be supported/hosted/maintained?** + We may delete old, unusable data at our discretion. + Additionally, we may delete old data to reduce cost. + +- **If others want to extend/augment/build on/contribute to the dataset, is there a mechanism for them to do so?** + Please email [contact@pureskill.gg][email] or reach out on [Discord] + if you want to extend the provided csds files in any manner. + Subscribers are free to release transformations with restrictions as outlined in the DSA. + +[cc by-nc-sa 4.0]: https://creativecommons.org/licenses/by-nc-sa/4.0/ +[product page]: https://aws.amazon.com/marketplace/pp/prodview-v3o7zrt6okwmo +[discord]: https://pureskill.gg/discord +[website]: https://pureskill.gg/ +[youtube]: https://www.youtube.com/channel/UCmgWqRfvuX94XwbuN9CEu_A +[linkedin]: https://www.linkedin.com/company/itspureskillgg +[twitter]: https://twitter.com/itspureskillgg +[facebook]: https://www.facebook.com/itspureskillgg +[instagram]: https://www.instagram.com/itspureskillgg +[email]: mailto:contact@pureskill.gg +[datasheets for datasets]: https://arxiv.org/abs/1803.09010 +[aws]: https://aws.amazon.com/ +[adx]: https://aws.amazon.com/data-exchange +[cs2]: https://store.steampowered.com/app/730/CounterStrike_Global_Offensive/ +[faceit]: https://www.faceit.com/ +[steam]: https://steamcommunity.com/ +[valve]: https://www.valvesoftware.com/ +[makenew-pyskill]: https://github.com/pureskillgg/makenew-pyskill +[cs2 chart]: https://steamcharts.com/app/730 +[demoinfocs-golang]: https://github.com/markus-wa/demoinfocs-golang +[esrb]: https://www.esrb.org +[esrb ratings]: https://www.esrb.org/ratings-guide/ +[esrb cs2]: https://www.esrb.org/ratings/100491/Counter-Strike%3A+Global+Offensive +[pii_remover]: https://github.com/pureskillgg/csgo-dsdk/blob/master/pureskillgg_csgo_dsdk/scrubber/scrub_pii.py +[steam help page on api connections]: https://help.steampowered.com/en/wizard/HelpWithGameIssue/?appid=730&issueid=128 +[terms of service]: https://pureskill.gg/site-terms/ +[privacy policy]: https://pureskill.gg/privacy-policy/ +[analyzing the differences between professional and amateur esports through win probability]: https://dl.acm.org/doi/abs/10.1145/3485447.3512277 +[datascience docs]: https://docs.pureskill.gg/datascience diff --git a/docs/datascience/adx/csgo/csds/_category_.yml b/docs/datascience/old/cs2/csds/_category_.yml similarity index 100% rename from docs/datascience/adx/csgo/csds/_category_.yml rename to docs/datascience/old/cs2/csds/_category_.yml diff --git a/docs/datascience/old/cs2/csds/assets/csds_dictionary.csv b/docs/datascience/old/cs2/csds/assets/csds_dictionary.csv new file mode 100644 index 0000000..21090eb --- /dev/null +++ b/docs/datascience/old/cs2/csds/assets/csds_dictionary.csv @@ -0,0 +1,643 @@ +FieldName,Type,MaxLength,Nullable,Description,Notes,Example,PrimaryKey,TableName,TableDescription +round,DECIMAL,,False,,,,,bomb_action,multi_event +tick,DECIMAL,,False,,,,,bomb_action,multi_event +event_type,VARCHAR,,False,,,,,bomb_action,multi_event +player_id,DECIMAL,,True,,,,,bomb_action,multi_event +player_id_pawn,DECIMAL,,True,,,,,bomb_action,multi_event +site_code,DECIMAL,,True,,,,,bomb_action,multi_event +entity_id,DECIMAL,,True,,,,,bomb_action,multi_event +second,DECIMAL,,True,,,,,bomb_action,multi_event +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,bomb_action,multi_event +player_x_pos,DECIMAL,,True,asof merge (nearby ticks),,,,bomb_action,multi_event +player_y_pos,DECIMAL,,True,asof merge (nearby ticks),,,,bomb_action,multi_event +player_z_pos,DECIMAL,,True,asof merge (nearby ticks),,,,bomb_action,multi_event +player_x_vel,DECIMAL,,True,asof merge (nearby ticks),,,,bomb_action,multi_event +player_y_vel,DECIMAL,,True,asof merge (nearby ticks),,,,bomb_action,multi_event +player_z_vel,DECIMAL,,True,asof merge (nearby ticks),,,,bomb_action,multi_event +player_phi_ang,DECIMAL,,True,asof merge (nearby ticks),,,,bomb_action,multi_event +player_theta_ang,DECIMAL,,True,asof merge (nearby ticks),,,,bomb_action,multi_event +player_weapon_code,DECIMAL,,True,asof merge (nearby ticks),,,,bomb_action,multi_event +player_team_code,DECIMAL,,True,asof merge (nearby ticks),,,,bomb_action,multi_event +player_tick,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,bomb_action,multi_event +player_player_id,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,bomb_action,multi_event +round,DECIMAL,,False,,,,,bomb_defuse,multi_event +tick,DECIMAL,,False,,,,,bomb_defuse,multi_event +event_type,VARCHAR,,False,,,,,bomb_defuse,multi_event +player_id,DECIMAL,,False,,,,,bomb_defuse,multi_event +has_kit,DECIMAL,,True,,,,,bomb_defuse,multi_event +second,DECIMAL,,True,,,,,bomb_defuse,multi_event +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,bomb_defuse,multi_event +player_x_pos,DECIMAL,,True,,,,,bomb_defuse,multi_event +player_y_pos,DECIMAL,,True,,,,,bomb_defuse,multi_event +player_z_pos,DECIMAL,,True,,,,,bomb_defuse,multi_event +player_x_vel,DECIMAL,,True,,,,,bomb_defuse,multi_event +player_y_vel,DECIMAL,,True,,,,,bomb_defuse,multi_event +player_z_vel,DECIMAL,,True,,,,,bomb_defuse,multi_event +player_phi_ang,DECIMAL,,True,,,,,bomb_defuse,multi_event +player_theta_ang,DECIMAL,,True,,,,,bomb_defuse,multi_event +player_weapon_code,DECIMAL,,True,,,,,bomb_defuse,multi_event +player_team_code,DECIMAL,,True,,,,,bomb_defuse,multi_event +player_tick,DECIMAL,,True,,May be missing.,,,bomb_defuse,multi_event +player_player_id,DECIMAL,,True,,May be missing.,,,bomb_defuse,multi_event +round,DECIMAL,,False,,,,,bomb_state,multi_event +tick,DECIMAL,,False,,,,,bomb_state,multi_event +event_type,VARCHAR,,False,,,,,bomb_state,multi_event +player_id,DECIMAL,,False,,,,,bomb_state,multi_event +site_code,DECIMAL,,True,,,,,bomb_state,multi_event +second,DECIMAL,,True,,,,,bomb_state,multi_event +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,bomb_state,multi_event +player_x_pos,DECIMAL,,True,,,,,bomb_state,multi_event +player_y_pos,DECIMAL,,True,,,,,bomb_state,multi_event +player_z_pos,DECIMAL,,True,,,,,bomb_state,multi_event +player_x_vel,DECIMAL,,True,,,,,bomb_state,multi_event +player_y_vel,DECIMAL,,True,,,,,bomb_state,multi_event +player_z_vel,DECIMAL,,True,,,,,bomb_state,multi_event +player_phi_ang,DECIMAL,,True,,,,,bomb_state,multi_event +player_theta_ang,DECIMAL,,True,,,,,bomb_state,multi_event +player_weapon_code,DECIMAL,,True,,,,,bomb_state,multi_event +player_team_code,DECIMAL,,True,,,,,bomb_state,multi_event +player_tick,DECIMAL,,True,,May be missing.,,,bomb_state,multi_event +player_player_id,DECIMAL,,True,,May be missing.,,,bomb_state,multi_event +round,DECIMAL,,False,,,,,bot_takeover,single_event +tick,DECIMAL,,False,,,,,bot_takeover,single_event +player_id,DECIMAL,,False,,,,,bot_takeover,single_event +bot_id,DECIMAL,,True,,,,,bot_takeover,single_event +player_index,DECIMAL,,False,,,,,bot_takeover,single_event +second,DECIMAL,,True,,,,,bot_takeover,single_event +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,bot_takeover,single_event +player_x_pos,DECIMAL,,True,,,,,bot_takeover,single_event +player_y_pos,DECIMAL,,True,,,,,bot_takeover,single_event +player_z_pos,DECIMAL,,True,,,,,bot_takeover,single_event +player_x_vel,DECIMAL,,True,,,,,bot_takeover,single_event +player_y_vel,DECIMAL,,True,,,,,bot_takeover,single_event +player_z_vel,DECIMAL,,True,,,,,bot_takeover,single_event +player_phi_ang,DECIMAL,,True,,,,,bot_takeover,single_event +player_theta_ang,DECIMAL,,True,,,,,bot_takeover,single_event +player_weapon_code,DECIMAL,,True,,,,,bot_takeover,single_event +player_team_code,DECIMAL,,True,,,,,bot_takeover,single_event +player_tick,DECIMAL,,True,,,,,bot_takeover,single_event +player_player_id,DECIMAL,,True,,,,,bot_takeover,single_event +round,DECIMAL,,False,,,,,grenade_state,multi_event +tick,DECIMAL,,False,,,,,grenade_state,multi_event +event_type,VARCHAR,,False,,,,,grenade_state,multi_event +entity_id,DECIMAL,,False,,,,,grenade_state,multi_event +player_id,DECIMAL,,False,,,,,grenade_state,multi_event +x_pos,DECIMAL,,False,,,,,grenade_state,multi_event +y_pos,DECIMAL,,False,,,,,grenade_state,multi_event +z_pos,DECIMAL,,False,,,,,grenade_state,multi_event +second,DECIMAL,,True,,,,,grenade_state,multi_event +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,grenade_state,multi_event +entity_id_fixed,DECIMAL,,True,,,,,grenade_state,multi_event +tick_throw,DECIMAL,,True,,,,,grenade_state,multi_event +player_x_pos,DECIMAL,,True,,,,,grenade_state,multi_event +player_y_pos,DECIMAL,,True,,,,,grenade_state,multi_event +player_z_pos,DECIMAL,,True,,,,,grenade_state,multi_event +player_x_vel,DECIMAL,,True,,,,,grenade_state,multi_event +player_y_vel,DECIMAL,,True,,,,,grenade_state,multi_event +player_z_vel,DECIMAL,,True,,,,,grenade_state,multi_event +player_phi_ang,DECIMAL,,True,,,,,grenade_state,multi_event +player_theta_ang,DECIMAL,,True,,,,,grenade_state,multi_event +player_weapon_code,DECIMAL,,True,,,,,grenade_state,multi_event +player_team_code,DECIMAL,,True,,,,,grenade_state,multi_event +magic,VARCHAR,,False,,,,,header,header +network_protocol,DECIMAL,,False,,,,,header,header +server_name,VARCHAR,,False,,,,,header,header +client_name,VARCHAR,,False,,,,,header,header +map_name,VARCHAR,,False,,,,,header,header +game_directory,VARCHAR,,False,,,,,header,header +fullpackets_version,DECIMAL,,False,,,,,header,header +allow_clientside_entities,DECIMAL,,False,,,,,header,header +allow_clientside_particles,DECIMAL,,False,,,,,header,header +addons,VARCHAR,,False,,,,,header,header +demo_version_name,VARCHAR,,False,,,,,header,header +demo_version_guid,VARCHAR,,False,,,,,header,header +build_num,DECIMAL,,False,,,,,header,header +game,VARCHAR,,False,,,,,header,header +magic,VARCHAR,,True,,,,,header,header +protocol,DECIMAL,,True,,May be missing.,,,header,header +network_protocol,DECIMAL,,True,,,,,header,header +server_name,VARCHAR,,True,,,,,header,header +client_name,VARCHAR,,True,,,,,header,header +map_name,VARCHAR,,True,,,,,header,header +game_directory,VARCHAR,,True,,,,,header,header +playback_time,DECIMAL,,True,,May be missing.,,,header,header +playback_ticks,DECIMAL,,True,,May be missing.,,,header,header +playback_frames,DECIMAL,,True,,May be missing.,,,header,header +signon_length,DECIMAL,,True,,May be missing.,,,header,header +tick_rate,DECIMAL,,True,,,,,header,header +tick_save_rate,DECIMAL,,True,,,,,header,header +rushb_version,VARCHAR,,True,,,,,header,header +ppp_version,VARCHAR,,True,,,,,header,header +match_date,VARCHAR,,True,,,,,header,header +demo_id,VARCHAR,,True,,,,,header,header +sharecode,VARCHAR,,True,,,,,header,header +platform,VARCHAR,,True,,,,,header,header +match_type,VARCHAR,,True,,,,,header,header +game,VARCHAR,,True,,,,,header,header +second,DECIMAL,,True,,May be missing.,,,header,header +t_starters_avg_rank,DECIMAL,,True,,,,,header,header +t_starters_avg_wins,DECIMAL,,True,,,,,header,header +ct_starters_avg_rank,DECIMAL,,True,,,,,header,header +ct_starters_avg_wins,DECIMAL,,True,,,,,header,header +ct_starters_score_final,DECIMAL,,True,,,,,header,header +t_starters_score_final,DECIMAL,,True,,,,,header,header +providence,VARCHAR,,True,,,,,header,header +number_of_points,DECIMAL,,True,,,,,header,header +round,DECIMAL,,False,,,,,item_equip,single_event +tick,DECIMAL,,False,,,,,item_equip,single_event +player_id,DECIMAL,,False,,,,,item_equip,single_event +item,VARCHAR,,False,,,,,item_equip,single_event +def_index,DECIMAL,,False,,,,,item_equip,single_event +can_zoom,DECIMAL,,False,,,,,item_equip,single_event +has_silencer,DECIMAL,,False,,,,,item_equip,single_event +is_silenced,DECIMAL,,False,,,,,item_equip,single_event +has_tracers,DECIMAL,,False,,,,,item_equip,single_event +weapon_type_code,DECIMAL,,False,,,,,item_equip,single_event +is_painted,DECIMAL,,False,,,,,item_equip,single_event +second,DECIMAL,,True,,,,,item_equip,single_event +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,item_equip,single_event +player_x_pos,DECIMAL,,True,,,,,item_equip,single_event +player_y_pos,DECIMAL,,True,,,,,item_equip,single_event +player_z_pos,DECIMAL,,True,,,,,item_equip,single_event +player_x_vel,DECIMAL,,True,,,,,item_equip,single_event +player_y_vel,DECIMAL,,True,,,,,item_equip,single_event +player_z_vel,DECIMAL,,True,,,,,item_equip,single_event +player_phi_ang,DECIMAL,,True,,,,,item_equip,single_event +player_theta_ang,DECIMAL,,True,,,,,item_equip,single_event +player_weapon_code,DECIMAL,,True,,,,,item_equip,single_event +player_team_code,DECIMAL,,True,,,,,item_equip,single_event +player_tick,DECIMAL,,True,,May be missing.,,,item_equip,single_event +player_player_id,DECIMAL,,True,,May be missing.,,,item_equip,single_event +round,DECIMAL,,False,,,,,item_pickup,single_event +tick,DECIMAL,,False,,,,,item_pickup,single_event +player_id,DECIMAL,,False,,,,,item_pickup,single_event +item,VARCHAR,,False,,,,,item_pickup,single_event +def_index,DECIMAL,,False,,,,,item_pickup,single_event +is_silent,DECIMAL,,False,,,,,item_pickup,single_event +second,DECIMAL,,True,,,,,item_pickup,single_event +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,item_pickup,single_event +player_x_pos,DECIMAL,,True,,,,,item_pickup,single_event +player_y_pos,DECIMAL,,True,,,,,item_pickup,single_event +player_z_pos,DECIMAL,,True,,,,,item_pickup,single_event +player_x_vel,DECIMAL,,True,,,,,item_pickup,single_event +player_y_vel,DECIMAL,,True,,,,,item_pickup,single_event +player_z_vel,DECIMAL,,True,,,,,item_pickup,single_event +player_phi_ang,DECIMAL,,True,,,,,item_pickup,single_event +player_theta_ang,DECIMAL,,True,,,,,item_pickup,single_event +player_weapon_code,DECIMAL,,True,,,,,item_pickup,single_event +player_team_code,DECIMAL,,True,,,,,item_pickup,single_event +player_tick,DECIMAL,,True,,May be missing.,,,item_pickup,single_event +player_player_id,DECIMAL,,True,,May be missing.,,,item_pickup,single_event +round,DECIMAL,,False,,,,,molotov_state,multi_event +tick,DECIMAL,,False,,,,,molotov_state,multi_event +event_type,VARCHAR,,False,,,,,molotov_state,multi_event +entity_id,DECIMAL,,False,,,,,molotov_state,multi_event +x_pos,DECIMAL,,False,,,,,molotov_state,multi_event +y_pos,DECIMAL,,False,,,,,molotov_state,multi_event +z_pos,DECIMAL,,False,,,,,molotov_state,multi_event +second,DECIMAL,,True,,,,,molotov_state,multi_event +entity_id_fixed,DECIMAL,,True,,,,,molotov_state,multi_event +burn_duration,DECIMAL,,True,,,,,molotov_state,multi_event +was_extinguished_by_smoke,DECIMAL,,True,,,,,molotov_state,multi_event +extinguisher_id,DECIMAL,,True,,,,,molotov_state,multi_event +extinguisher_id_fixed,DECIMAL,,True,,,,,molotov_state,multi_event +smoke_entity_id,DECIMAL,,True,,,,,molotov_state,multi_event +was_extinguished_by_thrown_smoke,DECIMAL,,True,,May be missing.,,,molotov_state,multi_event +player_id,DECIMAL,,True,,,,,molotov_state,multi_event +player_id_fixed,DECIMAL,,True,,,,,molotov_state,multi_event +tick_throw,DECIMAL,,True,,,,,molotov_state,multi_event +player_x_pos,DECIMAL,,True,,,,,molotov_state,multi_event +player_y_pos,DECIMAL,,True,,,,,molotov_state,multi_event +player_z_pos,DECIMAL,,True,,,,,molotov_state,multi_event +player_x_vel,DECIMAL,,True,,,,,molotov_state,multi_event +player_y_vel,DECIMAL,,True,,,,,molotov_state,multi_event +player_z_vel,DECIMAL,,True,,,,,molotov_state,multi_event +player_phi_ang,DECIMAL,,True,,,,,molotov_state,multi_event +player_theta_ang,DECIMAL,,True,,,,,molotov_state,multi_event +player_weapon_code,DECIMAL,,True,,,,,molotov_state,multi_event +player_team_code,DECIMAL,,True,,,,,molotov_state,multi_event +round,DECIMAL,,False,,,,,other_death,single_event +tick,DECIMAL,,False,,,,,other_death,single_event +other_type,VARCHAR,,False,,,,,other_death,single_event +attacker_id,DECIMAL,,True,,,,,other_death,single_event +weapon_name,VARCHAR,,False,,,,,other_death,single_event +is_headshot,DECIMAL,,False,,,,,other_death,single_event +penetration_amount,DECIMAL,,False,,,,,other_death,single_event +is_through_smoke,DECIMAL,,True,,,,,other_death,single_event +is_attacker_blind,DECIMAL,,True,,,,,other_death,single_event +is_noscope,DECIMAL,,True,,,,,other_death,single_event +second,DECIMAL,,True,,,,,other_death,single_event +attacker_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,other_death,single_event +attacker_x_pos,DECIMAL,,True,,,,,other_death,single_event +attacker_y_pos,DECIMAL,,True,,,,,other_death,single_event +attacker_z_pos,DECIMAL,,True,,,,,other_death,single_event +attacker_x_vel,DECIMAL,,True,,,,,other_death,single_event +attacker_y_vel,DECIMAL,,True,,,,,other_death,single_event +attacker_z_vel,DECIMAL,,True,,,,,other_death,single_event +attacker_phi_ang,DECIMAL,,True,,,,,other_death,single_event +attacker_theta_ang,DECIMAL,,True,,,,,other_death,single_event +attacker_weapon_code,DECIMAL,,True,,,,,other_death,single_event +attacker_team_code,DECIMAL,,True,,,,,other_death,single_event +attacker_tick,DECIMAL,,True,,May be missing.,,,other_death,single_event +attacker_player_id,DECIMAL,,True,,May be missing.,,,other_death,single_event +round,DECIMAL,,False,,,,,player_action,multi_event +tick,DECIMAL,,False,,,,,player_action,multi_event +event_type,VARCHAR,,False,,,,,player_action,multi_event +player_id,DECIMAL,,False,,,,,player_action,multi_event +second,DECIMAL,,True,,,,,player_action,multi_event +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_action,multi_event +player_x_pos,DECIMAL,,True,,,,,player_action,multi_event +player_y_pos,DECIMAL,,True,,,,,player_action,multi_event +player_z_pos,DECIMAL,,True,,,,,player_action,multi_event +player_x_vel,DECIMAL,,True,,,,,player_action,multi_event +player_y_vel,DECIMAL,,True,,,,,player_action,multi_event +player_z_vel,DECIMAL,,True,,,,,player_action,multi_event +player_phi_ang,DECIMAL,,True,,,,,player_action,multi_event +player_theta_ang,DECIMAL,,True,,,,,player_action,multi_event +player_weapon_code,DECIMAL,,True,,,,,player_action,multi_event +player_team_code,DECIMAL,,True,,,,,player_action,multi_event +player_tick,DECIMAL,,True,,May be missing.,,,player_action,multi_event +player_player_id,DECIMAL,,True,,May be missing.,,,player_action,multi_event +round,DECIMAL,,False,,,,,player_blind,single_event +tick,DECIMAL,,False,,,,,player_blind,single_event +player_id,DECIMAL,,False,,,,,player_blind,single_event +entity_id,DECIMAL,,False,,,,,player_blind,single_event +attacker_id,DECIMAL,,False,,,,,player_blind,single_event +blind_duration,DECIMAL,,False,,,,,player_blind,single_event +second,DECIMAL,,True,,,,,player_blind,single_event +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_blind,single_event +attacker_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_blind,single_event +player_x_pos,DECIMAL,,True,,,,,player_blind,single_event +player_y_pos,DECIMAL,,True,,,,,player_blind,single_event +player_z_pos,DECIMAL,,True,,,,,player_blind,single_event +player_x_vel,DECIMAL,,True,,,,,player_blind,single_event +player_y_vel,DECIMAL,,True,,,,,player_blind,single_event +player_z_vel,DECIMAL,,True,,,,,player_blind,single_event +player_phi_ang,DECIMAL,,True,,,,,player_blind,single_event +player_theta_ang,DECIMAL,,True,,,,,player_blind,single_event +player_weapon_code,DECIMAL,,True,,,,,player_blind,single_event +player_team_code,DECIMAL,,True,,,,,player_blind,single_event +player_tick,DECIMAL,,True,,May be missing.,,,player_blind,single_event +player_player_id,DECIMAL,,True,,May be missing.,,,player_blind,single_event +attacker_x_pos,DECIMAL,,True,,,,,player_blind,single_event +attacker_y_pos,DECIMAL,,True,,,,,player_blind,single_event +attacker_z_pos,DECIMAL,,True,,,,,player_blind,single_event +attacker_x_vel,DECIMAL,,True,,,,,player_blind,single_event +attacker_y_vel,DECIMAL,,True,,,,,player_blind,single_event +attacker_z_vel,DECIMAL,,True,,,,,player_blind,single_event +attacker_phi_ang,DECIMAL,,True,,,,,player_blind,single_event +attacker_theta_ang,DECIMAL,,True,,,,,player_blind,single_event +attacker_weapon_code,DECIMAL,,True,,,,,player_blind,single_event +attacker_team_code,DECIMAL,,True,,,,,player_blind,single_event +attacker_tick,DECIMAL,,True,,May be missing.,,,player_blind,single_event +attacker_player_id,DECIMAL,,True,,May be missing.,,,player_blind,single_event +round,DECIMAL,,False,,,,,player_death,single_event +tick,DECIMAL,,False,,,,,player_death,single_event +player_id,DECIMAL,,False,,,,,player_death,single_event +attacker_id,DECIMAL,,True,,,,,player_death,single_event +assister_id,DECIMAL,,True,,,,,player_death,single_event +weapon_name,VARCHAR,,False,,,,,player_death,single_event +is_headshot,DECIMAL,,False,,,,,player_death,single_event +penetration_amount,DECIMAL,,False,,,,,player_death,single_event +has_replay,DECIMAL,,False,,,,,player_death,single_event +is_flash_assist,DECIMAL,,True,,,,,player_death,single_event +is_through_smoke,DECIMAL,,True,,,,,player_death,single_event +is_attacker_blind,DECIMAL,,True,,,,,player_death,single_event +is_noscope,DECIMAL,,True,,,,,player_death,single_event +second,DECIMAL,,True,,,,,player_death,single_event +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_death,single_event +attacker_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_death,single_event +assister_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_death,single_event +player_x_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +player_y_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +player_z_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +player_x_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +player_y_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +player_z_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +player_phi_ang,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +player_theta_ang,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +player_weapon_code,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +player_team_code,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +player_tick,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,player_death,single_event +player_player_id,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,player_death,single_event +attacker_x_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +attacker_y_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +attacker_z_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +attacker_x_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +attacker_y_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +attacker_z_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +attacker_phi_ang,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +attacker_theta_ang,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +attacker_weapon_code,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +attacker_team_code,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +attacker_tick,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,player_death,single_event +attacker_player_id,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,player_death,single_event +assister_x_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +assister_y_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +assister_z_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +assister_x_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +assister_y_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +assister_z_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +assister_phi_ang,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +assister_theta_ang,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +assister_weapon_code,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +assister_team_code,DECIMAL,,True,asof merge (nearby ticks),,,,player_death,single_event +assister_tick,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,player_death,single_event +assister_player_id,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,player_death,single_event +round,DECIMAL,,False,,,,,player_disconnect,single_event +tick,DECIMAL,,False,,,,,player_disconnect,single_event +player_id,DECIMAL,,False,,,,,player_disconnect,single_event +disconnect_reason,VARCHAR,,False,,,,,player_disconnect,single_event +is_bot,DECIMAL,,False,,,,,player_disconnect,single_event +second,DECIMAL,,True,,,,,player_disconnect,single_event +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_disconnect,single_event +round,DECIMAL,,False,,,,,player_footstep,single_event +tick,DECIMAL,,False,,,,,player_footstep,single_event +player_id,DECIMAL,,False,,,,,player_footstep,single_event +second,DECIMAL,,True,,,,,player_footstep,single_event +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_footstep,single_event +round,DECIMAL,,False,,,,,player_hurt,single_event +tick,DECIMAL,,False,,,,,player_hurt,single_event +player_id,DECIMAL,,False,,,,,player_hurt,single_event +attacker_id,DECIMAL,,False,,,,,player_hurt,single_event +health,DECIMAL,,False,,,,,player_hurt,single_event +armor,DECIMAL,,False,,,,,player_hurt,single_event +weapon_name,VARCHAR,,True,,,,,player_hurt,single_event +health_removed,DECIMAL,,False,,,,,player_hurt,single_event +armor_removed,DECIMAL,,False,,,,,player_hurt,single_event +hit_box_code,DECIMAL,,False,,,,,player_hurt,single_event +second,DECIMAL,,True,,,,,player_hurt,single_event +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_hurt,single_event +attacker_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_hurt,single_event +player_x_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event +player_y_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event +player_z_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event +player_x_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event +player_y_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event +player_z_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event +player_phi_ang,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event +player_theta_ang,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event +player_weapon_code,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event +player_team_code,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event +player_tick,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,player_hurt,single_event +player_player_id,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,player_hurt,single_event +attacker_x_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event +attacker_y_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event +attacker_z_pos,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event +attacker_x_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event +attacker_y_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event +attacker_z_vel,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event +attacker_phi_ang,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event +attacker_theta_ang,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event +attacker_weapon_code,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event +attacker_team_code,DECIMAL,,True,asof merge (nearby ticks),,,,player_hurt,single_event +attacker_tick,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,player_hurt,single_event +attacker_player_id,DECIMAL,,True,asof merge (nearby ticks),May be missing.,,,player_hurt,single_event +effective_health_removed,DECIMAL,,True,,,,,player_hurt,single_event +round,DECIMAL,,False,,,,,player_info,player_info +tick,DECIMAL,,False,,May be missing.,,,player_info,player_info +player_id,DECIMAL,,False,,,,,player_info,player_info +team_code,DECIMAL,,False,,,,,player_info,player_info +wins,DECIMAL,,False, Capped to 2501.,,,,player_info,player_info +rank,DECIMAL,,False,,,,,player_info,player_info +radar_color_code,DECIMAL,,False,,,,,player_info,player_info +second,DECIMAL,,True,,May be missing.,,,player_info,player_info +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_info,player_info +rank_raw,DECIMAL,,True,,,,,player_info,player_info +rank_platform,DECIMAL,,True,,,,,player_info,player_info +round,DECIMAL,,False,,,,,player_name,single_event +tick,DECIMAL,,False,,,,,player_name,single_event +player_id,DECIMAL,,False,,,,,player_name,single_event +name_new,DECIMAL,,False,,,,,player_name,single_event +name_old,DECIMAL,,False,,,,,player_name,single_event +second,DECIMAL,,True,,,,,player_name,single_event +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_name,single_event +round,DECIMAL,,False,,,,,player_personal,player_info +tick,DECIMAL,,False,,May be missing.,,,player_personal,player_info +player_id,DECIMAL,,False,,,,,player_personal,player_info +player_controller_id,DECIMAL,,False,,,,,player_personal,player_info +player_id_pawn,DECIMAL,,False,,,,,player_personal,player_info +name,VARCHAR,,False,,,,,player_personal,player_info +clan_tag,VARCHAR,,False,,,,,player_personal,player_info +steam_id,VARCHAR,,False,,,,,player_personal,player_info +second,DECIMAL,,True,,May be missing.,,,player_personal,player_info +is_bot,DECIMAL,,True,,,,,player_personal,player_info +player_id_fixed,DECIMAL,,True,,,,,player_personal,player_info +round,DECIMAL,,False,,,,,player_spawn,single_event +tick,DECIMAL,,False,,,,,player_spawn,single_event +player_id,DECIMAL,,False,,,,,player_spawn,single_event +second,DECIMAL,,True,,,,,player_spawn,single_event +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_spawn,single_event +player_x_pos,DECIMAL,,True,,,,,player_spawn,single_event +player_y_pos,DECIMAL,,True,,,,,player_spawn,single_event +player_z_pos,DECIMAL,,True,,,,,player_spawn,single_event +player_x_vel,DECIMAL,,True,,,,,player_spawn,single_event +player_y_vel,DECIMAL,,True,,,,,player_spawn,single_event +player_z_vel,DECIMAL,,True,,,,,player_spawn,single_event +player_phi_ang,DECIMAL,,True,,,,,player_spawn,single_event +player_theta_ang,DECIMAL,,True,,,,,player_spawn,single_event +player_weapon_code,DECIMAL,,True,,,,,player_spawn,single_event +player_team_code,DECIMAL,,True,,,,,player_spawn,single_event +player_tick,DECIMAL,,True,,May be missing.,,,player_spawn,single_event +player_player_id,DECIMAL,,True,,May be missing.,,,player_spawn,single_event +tick,DECIMAL,,False,,,,,player_status,telemetry +round,DECIMAL,,False,,,,,player_status,telemetry +player_id,DECIMAL,,False,,,,,player_status,telemetry +player_controller_id,DECIMAL,,False,,,,,player_status,telemetry +armor,DECIMAL,,False,,,,,player_status,telemetry +health,DECIMAL,,False,,,,,player_status,telemetry +place_name,VARCHAR,,False,,,,,player_status,telemetry +inv_primary,DECIMAL,,False,,,,,player_status,telemetry +inv_secondary,DECIMAL,,False,,,,,player_status,telemetry +inv_flashbang,DECIMAL,,False,,,,,player_status,telemetry +inv_taser,DECIMAL,,False,,,,,player_status,telemetry +inv_hegrenade,DECIMAL,,False,,,,,player_status,telemetry +inv_smokegrenade,DECIMAL,,False,,,,,player_status,telemetry +inv_molotov,DECIMAL,,False,,,,,player_status,telemetry +inv_decoy,DECIMAL,,False,,,,,player_status,telemetry +inv_incgrenade,DECIMAL,,False,,,,,player_status,telemetry +inv_c4,DECIMAL,,False,,,,,player_status,telemetry +current_equipment_cost,DECIMAL,,False,,,,,player_status,telemetry +freezetime_end_equipment_cost,DECIMAL,,False,,,,,player_status,telemetry +money,DECIMAL,,False,,,,,player_status,telemetry +ping,DECIMAL,,False,,,,,player_status,telemetry +round_start_equipment_cost,DECIMAL,,False,,,,,player_status,telemetry +zoom_level,DECIMAL,,True,,,,,player_status,telemetry +iron_sight_mode,DECIMAL,,True,,,,,player_status,telemetry +burst_mode,DECIMAL,,True,,,,,player_status,telemetry +is_silenced,DECIMAL,,True,,,,,player_status,telemetry +reload_visually_complete,DECIMAL,,True,,,,,player_status,telemetry +weapon_mode,DECIMAL,,True,,,,,player_status,telemetry +flash_duration,DECIMAL,,False,,,,,player_status,telemetry +flash_max_alpha,DECIMAL,,False,,,,,player_status,telemetry +has_c4,DECIMAL,,False,,,,,player_status,telemetry +has_defuser,DECIMAL,,False,,,,,player_status,telemetry +has_helmet,DECIMAL,,False,,,,,player_status,telemetry +is_defusing,DECIMAL,,False,,,,,player_status,telemetry +is_fake_player,DECIMAL,,False,,,,,player_status,telemetry +is_in_bomb_zone,DECIMAL,,False,,,,,player_status,telemetry +is_in_buy_zone,DECIMAL,,False,,,,,player_status,telemetry +is_scoped,DECIMAL,,False,,,,,player_status,telemetry +is_spotted,DECIMAL,,False,,,,,player_status,telemetry +is_walking,DECIMAL,,False,,,,,player_status,telemetry +second,DECIMAL,,True,,,,,player_status,telemetry +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_status,telemetry +equipment_value_calc,DECIMAL,,True,,,,,player_status,telemetry +tick,DECIMAL,,False,,,,,player_vector,telemetry +round,DECIMAL,,False,,,,,player_vector,telemetry +player_id,DECIMAL,,False,,,,,player_vector,telemetry +x_pos,DECIMAL,,False,,,,,player_vector,telemetry +y_pos,DECIMAL,,False,,,,,player_vector,telemetry +z_pos,DECIMAL,,False,,,,,player_vector,telemetry +x_aimpunch,DECIMAL,,False,,,,,player_vector,telemetry +y_aimpunch,DECIMAL,,False,,,,,player_vector,telemetry +current_ammo,DECIMAL,,True,,,,,player_vector,telemetry +weapon_code,DECIMAL,,True,,,,,player_vector,telemetry +inaccuracy,DECIMAL,,True,,,,,player_vector,telemetry +last_shot_time,DECIMAL,,True,,,,,player_vector,telemetry +recoil_index,DECIMAL,,True,,,,,player_vector,telemetry +phi_ang,DECIMAL,,False,,,,,player_vector,telemetry +theta_ang,DECIMAL,,False,,,,,player_vector,telemetry +is_ducked,DECIMAL,,False,,,,,player_vector,telemetry +is_ducking,DECIMAL,,False,,,,,player_vector,telemetry +duck_amount,DECIMAL,,False,,,,,player_vector,telemetry +duck_speed,DECIMAL,,False,,,,,player_vector,telemetry +fall_velocity,DECIMAL,,False,,,,,player_vector,telemetry +view_punch_angle_tick,DECIMAL,,False,,,,,player_vector,telemetry +aim_punch_angle_vel_x,DECIMAL,,False,,,,,player_vector,telemetry +aim_punch_angle_vel_y,DECIMAL,,False,,,,,player_vector,telemetry +aim_punch_angle_vel_z,DECIMAL,,False,,,,,player_vector,telemetry +is_rescuing,DECIMAL,,False,,,,,player_vector,telemetry +second,DECIMAL,,True,,,,,player_vector,telemetry +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,player_vector,telemetry +team_code,DECIMAL,,True,,,,,player_vector,telemetry +theta_vel,DECIMAL,,True,,,,,player_vector,telemetry +phi_vel,DECIMAL,,True,,,,,player_vector,telemetry +ang_vel,DECIMAL,,True,,,,,player_vector,telemetry +x_vel,DECIMAL,,True,,,,,player_vector,telemetry +y_vel,DECIMAL,,True,,,,,player_vector,telemetry +z_vel,DECIMAL,,True,,,,,player_vector,telemetry +x_vel,DECIMAL,,True,,,,,player_vector,telemetry +y_vel,DECIMAL,,True,,,,,player_vector,telemetry +z_vel,DECIMAL,,True,,,,,player_vector,telemetry +x_vel,DECIMAL,,True,,,,,player_vector,telemetry +y_vel,DECIMAL,,True,,,,,player_vector,telemetry +z_vel,DECIMAL,,True,,,,,player_vector,telemetry +x_vel,DECIMAL,,True,,,,,player_vector,telemetry +y_vel,DECIMAL,,True,,,,,player_vector,telemetry +z_vel,DECIMAL,,True,,,,,player_vector,telemetry +x_vel,DECIMAL,,True,,,,,player_vector,telemetry +y_vel,DECIMAL,,True,,,,,player_vector,telemetry +z_vel,DECIMAL,,True,,,,,player_vector,telemetry +x_vel,DECIMAL,,True,,,,,player_vector,telemetry +y_vel,DECIMAL,,True,,,,,player_vector,telemetry +z_vel,DECIMAL,,True,,,,,player_vector,telemetry +x_vel,DECIMAL,,True,,,,,player_vector,telemetry +y_vel,DECIMAL,,True,,,,,player_vector,telemetry +z_vel,DECIMAL,,True,,,,,player_vector,telemetry +x_vel,DECIMAL,,True,,,,,player_vector,telemetry +y_vel,DECIMAL,,True,,,,,player_vector,telemetry +z_vel,DECIMAL,,True,,,,,player_vector,telemetry +x_vel,DECIMAL,,True,,,,,player_vector,telemetry +y_vel,DECIMAL,,True,,,,,player_vector,telemetry +z_vel,DECIMAL,,True,,,,,player_vector,telemetry +x_vel,DECIMAL,,True,,,,,player_vector,telemetry +y_vel,DECIMAL,,True,,,,,player_vector,telemetry +z_vel,DECIMAL,,True,,,,,player_vector,telemetry +speed_2d,DECIMAL,,True,,,,,player_vector,telemetry +movement_angle,DECIMAL,,True,,,,,player_vector,telemetry +movement_angle_diff,DECIMAL,,True,,,,,player_vector,telemetry +round,DECIMAL,,False,,,,,round_end,single_event +tick,DECIMAL,,False,,,,,round_end,single_event +winner_team_code,DECIMAL,,False,,,,,round_end,single_event +win_reason_code,DECIMAL,,False,,,,,round_end,single_event +win_reason_message,VARCHAR,,False,,,,,round_end,single_event +legacy_code,DECIMAL,,False,,,,,round_end,single_event +player_count,DECIMAL,,False,,,,,round_end,single_event +second,DECIMAL,,True,,,,,round_end,single_event +round,DECIMAL,,False,,,,,round_mvp,single_event +tick,DECIMAL,,False,,,,,round_mvp,single_event +player_id,DECIMAL,,False,,,,,round_mvp,single_event +mvp_reason_code,DECIMAL,,False,,,,,round_mvp,single_event +music_kit_mvps,DECIMAL,,False,,,,,round_mvp,single_event +second,DECIMAL,,True,,,,,round_mvp,single_event +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,round_mvp,single_event +round,DECIMAL,,False,,,,,round_start,single_event +tick,DECIMAL,,False,,,,,round_start,single_event +time_limit,DECIMAL,,False,,,,,round_start,single_event +frag_limit,DECIMAL,,False,,,,,round_start,single_event +objective,VARCHAR,,False,,,,,round_start,single_event +second,DECIMAL,,True,,,,,round_start,single_event +round,DECIMAL,,False,,,,,round_state,multi_event +tick,DECIMAL,,False,,,,,round_state,multi_event +event_type,VARCHAR,,False,,,,,round_state,multi_event +t_score,DECIMAL,,False,,,,,round_state,multi_event +ct_score,DECIMAL,,False,,,,,round_state,multi_event +t_score_raw,DECIMAL,,False,,,,,round_state,multi_event +ct_score_raw,DECIMAL,,False,,,,,round_state,multi_event +phase,VARCHAR,,False,,,,,round_state,multi_event +is_warmup,DECIMAL,,False,,,,,round_state,multi_event +second,DECIMAL,,True,,,,,round_state,multi_event +round,DECIMAL,,False,,,,,tick,single_event +tick,DECIMAL,,False,,,,,tick,single_event +second,DECIMAL,,True,,,,,tick,single_event +previous_phase,VARCHAR,,True,,,,,tick,single_event +second_since_previous_phase,DECIMAL,,True,,,,,tick,single_event +round,DECIMAL,,False,,,,,weapon_action,multi_event +tick,DECIMAL,,False,,,,,weapon_action,multi_event +event_type,VARCHAR,,False,,,,,weapon_action,multi_event +player_id,DECIMAL,,False,,,,,weapon_action,multi_event +second,DECIMAL,,True,,,,,weapon_action,multi_event +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,weapon_action,multi_event +player_x_pos,DECIMAL,,True,,,,,weapon_action,multi_event +player_y_pos,DECIMAL,,True,,,,,weapon_action,multi_event +player_z_pos,DECIMAL,,True,,,,,weapon_action,multi_event +player_x_vel,DECIMAL,,True,,,,,weapon_action,multi_event +player_y_vel,DECIMAL,,True,,,,,weapon_action,multi_event +player_z_vel,DECIMAL,,True,,,,,weapon_action,multi_event +player_phi_ang,DECIMAL,,True,,,,,weapon_action,multi_event +player_theta_ang,DECIMAL,,True,,,,,weapon_action,multi_event +player_weapon_code,DECIMAL,,True,,,,,weapon_action,multi_event +player_team_code,DECIMAL,,True,,,,,weapon_action,multi_event +player_tick,DECIMAL,,True,,May be missing.,,,weapon_action,multi_event +player_player_id,DECIMAL,,True,,May be missing.,,,weapon_action,multi_event +round,DECIMAL,,False,,,,,weapon_fire,single_event +tick,DECIMAL,,False,,,,,weapon_fire,single_event +player_id,DECIMAL,,False,,,,,weapon_fire,single_event +player_id_pawn,DECIMAL,,False,,,,,weapon_fire,single_event +weapon_name,VARCHAR,,False,,,,,weapon_fire,single_event +is_silenced,DECIMAL,,False,,,,,weapon_fire,single_event +second,DECIMAL,,True,,,,,weapon_fire,single_event +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,weapon_fire,single_event +player_x_pos,DECIMAL,,True,,,,,weapon_fire,single_event +player_y_pos,DECIMAL,,True,,,,,weapon_fire,single_event +player_z_pos,DECIMAL,,True,,,,,weapon_fire,single_event +player_x_vel,DECIMAL,,True,,,,,weapon_fire,single_event +player_y_vel,DECIMAL,,True,,,,,weapon_fire,single_event +player_z_vel,DECIMAL,,True,,,,,weapon_fire,single_event +player_phi_ang,DECIMAL,,True,,,,,weapon_fire,single_event +player_theta_ang,DECIMAL,,True,,,,,weapon_fire,single_event +player_weapon_code,DECIMAL,,True,,,,,weapon_fire,single_event +player_team_code,DECIMAL,,True,,,,,weapon_fire,single_event +player_tick,DECIMAL,,True,,May be missing.,,,weapon_fire,single_event +player_player_id,DECIMAL,,True,,May be missing.,,,weapon_fire,single_event +missed_molotov,DECIMAL,,True,,,,,weapon_fire,single_event +round,DECIMAL,,False,,,,,item_remove,single_event +tick,DECIMAL,,False,,,,,item_remove,single_event +player_id,DECIMAL,,True,,,,,item_remove,single_event +item,DECIMAL,,False,,,,,item_remove,single_event +def_index,DECIMAL,,True,,,,,item_remove,single_event +second,DECIMAL,,True,,,,,item_remove,single_event +player_id_fixed,DECIMAL,,True,Calculated from steam_id and player_id in player_personal. Merging done on round and player_id,,,,item_remove,single_event +player_x_pos,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event +player_y_pos,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event +player_z_pos,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event +player_x_vel,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event +player_y_vel,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event +player_z_vel,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event +player_phi_ang,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event +player_theta_ang,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event +player_weapon_code,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event +player_team_code,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event +player_tick,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event +player_player_id,DECIMAL,,True,asof merge (nearby ticks),,,,item_remove,single_event diff --git a/docs/datascience/old/cs2/csds/spec.md b/docs/datascience/old/cs2/csds/spec.md new file mode 100644 index 0000000..743a6b6 --- /dev/null +++ b/docs/datascience/old/cs2/csds/spec.md @@ -0,0 +1,874 @@ +--- +sidebar_label: CSDS Spec (CS2, archived) +--- + +# CSDS Spec + +:::warning Archived page + +This is the CS2 channel spec as it stood on 2024-02-24, covering 30 channels. Twelve +channels have been added since and two columns removed, so use it only to read data +downloaded before August 2026. The current spec is +[CSDS Spec](/datascience/adx/cs2/csds/spec). + +::: + +Documentation for CSDS channels built by FPS Critic, Inc. + +## bomb_action - multi_event + +Events that trigger this channel: bomb_abort_plant, bomb_begin_plant, bomb_dropped, bomb_pickup, player_given_c4 + +| Col Name | Origin | Dependents | Merge Keys | +| ------------------ | ---------- | --------------- | -------------------------- | +| round | replay | | | +| tick | replay | | | +| event_type | replay | | | +| player_id | replay | | | +| player_id_pawn | replay | | | +| site_code | replay | | | +| entity_id | replay | | | +| second | calculated | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | +| player_x_pos | merged | | player_id, tick | +| player_y_pos | merged | | player_id, tick | +| player_z_pos | merged | | player_id, tick | +| player_x_vel | merged | | player_id, tick | +| player_y_vel | merged | | player_id, tick | +| player_z_vel | merged | | player_id, tick | +| player_phi_ang | merged | | player_id, tick | +| player_theta_ang | merged | | player_id, tick | +| player_weapon_code | merged | | player_id, tick | +| player_team_code | merged | | player_id, tick | +| player_tick | merged | | player_id, tick | +| player_player_id | merged | | player_id, tick | + +## bomb_defuse - multi_event + +Events that trigger this channel: bomb_abort_defuse, bomb_begin_defuse + +| Col Name | Origin | Dependents | Merge Keys | +| ------------------ | ---------- | --------------- | -------------------------- | +| round | replay | | | +| tick | replay | | | +| event_type | replay | | | +| player_id | replay | | | +| has_kit | replay | | | +| second | calculated | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | +| player_x_pos | merged | | player_id, tick | +| player_y_pos | merged | | player_id, tick | +| player_z_pos | merged | | player_id, tick | +| player_x_vel | merged | | player_id, tick | +| player_y_vel | merged | | player_id, tick | +| player_z_vel | merged | | player_id, tick | +| player_phi_ang | merged | | player_id, tick | +| player_theta_ang | merged | | player_id, tick | +| player_weapon_code | merged | | player_id, tick | +| player_team_code | merged | | player_id, tick | +| player_tick | merged | | player_id, tick | +| player_player_id | merged | | player_id, tick | + +## bomb_state - multi_event + +Events that trigger this channel: bomb_defused, bomb_exploded, bomb_planted + +| Col Name | Origin | Dependents | Merge Keys | +| ------------------ | ---------- | --------------- | -------------------------- | +| round | replay | | | +| tick | replay | | | +| event_type | replay | | | +| player_id | replay | | | +| site_code | replay | | | +| second | calculated | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | +| player_x_pos | merged | | player_id, tick | +| player_y_pos | merged | | player_id, tick | +| player_z_pos | merged | | player_id, tick | +| player_x_vel | merged | | player_id, tick | +| player_y_vel | merged | | player_id, tick | +| player_z_vel | merged | | player_id, tick | +| player_phi_ang | merged | | player_id, tick | +| player_theta_ang | merged | | player_id, tick | +| player_weapon_code | merged | | player_id, tick | +| player_team_code | merged | | player_id, tick | +| player_tick | merged | | player_id, tick | +| player_player_id | merged | | player_id, tick | + +## bot_takeover - single_event + +Event that triggers this channel: bot_takeover + +| Col Name | Origin | Dependents | Merge Keys | +| ------------------ | ---------- | --------------- | -------------------------- | +| round | replay | | | +| tick | replay | | | +| player_id | replay | | | +| bot_id | replay | | | +| player_index | replay | | | +| second | calculated | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | +| player_x_pos | merged | | player_id, tick | +| player_y_pos | merged | | player_id, tick | +| player_z_pos | merged | | player_id, tick | +| player_x_vel | merged | | player_id, tick | +| player_y_vel | merged | | player_id, tick | +| player_z_vel | merged | | player_id, tick | +| player_phi_ang | merged | | player_id, tick | +| player_theta_ang | merged | | player_id, tick | +| player_weapon_code | merged | | player_id, tick | +| player_team_code | merged | | player_id, tick | +| player_tick | merged | | player_id, tick | +| player_player_id | merged | | player_id, tick | + +## grenade_state - multi_event + +Events that trigger this channel: decoy_detonate, decoy_firing, decoy_started, flashbang_detonate, hegrenade_detonate, smokegrenade_detonate, smokegrenade_expired + +| Col Name | Origin | Dependents | Merge Keys | +| ------------------ | ---------- | ----------------------------------- | -------------------------- | +| round | replay | | | +| tick | replay | | | +| event_type | replay | | | +| entity_id | replay | | | +| player_id | replay | | | +| x_pos | replay | | | +| y_pos | replay | | | +| z_pos | replay | | | +| second | calculated | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | +| entity_id_fixed | calculated | round, entity_id, event_type, tick | | +| tick_throw | calculated | round, player_id, weapon_name, tick | | +| player_x_pos | merged | | tick_throw, player_id | +| player_y_pos | merged | | tick_throw, player_id | +| player_z_pos | merged | | tick_throw, player_id | +| player_x_vel | merged | | tick_throw, player_id | +| player_y_vel | merged | | tick_throw, player_id | +| player_z_vel | merged | | tick_throw, player_id | +| player_phi_ang | merged | | tick_throw, player_id | +| player_theta_ang | merged | | tick_throw, player_id | +| player_weapon_code | merged | | tick_throw, player_id | +| player_team_code | merged | | tick_throw, player_id | + +## header - header + +Event that triggers this channel: none + +| Col Name | Origin | Dependents | Merge Keys | +| -------------------------- | ------------------- | ---------------------------------------- | ---------- | +| magic | replay | | | +| network_protocol | replay | | | +| server_name | replay | | | +| client_name | replay | | | +| map_name | replay | | | +| game_directory | replay | | | +| fullpackets_version | replay | | | +| allow_clientside_entities | replay | | | +| allow_clientside_particles | replay | | | +| addons | replay | | | +| demo_version_name | replay | | | +| demo_version_guid | replay | | | +| build_num | replay | | | +| game | replay | | | +| magic | replay | | | +| protocol | replay | | | +| network_protocol | replay | | | +| server_name | replay | | | +| client_name | replay | | | +| map_name | replay | | | +| game_directory | replay | | | +| playback_time | replay | | | +| playback_ticks | replay | | | +| playback_frames | replay | | | +| signon_length | replay | | | +| tick_rate | calculated | playback_ticks, playback_time | | +| tick_save_rate | calculated | playback_frames, playback_time | | +| rushb_version | calculated | meta:metadata.rushbVersion | | +| ppp_version | calculated | meta:context.version | | +| match_date | calculated | meta:matchDate | | +| demo_id | calculated-redacted | meta:demoId | | +| sharecode | calculated-redacted | meta:sharecode | | +| platform | calculated | meta:platform | | +| match_type | calculated | meta:matchType | | +| game | calculated | meta:game | | +| second | calculated | tick, tick_rate | | +| t_starters_avg_rank | calculated | is_bot, round, rank, steam_id, team_code | | +| t_starters_avg_wins | calculated | is_bot, round, wins, steam_id, team_code | | +| ct_starters_avg_rank | calculated | is_bot, round, rank, steam_id, team_code | | +| ct_starters_avg_wins | calculated | is_bot, round, wins, steam_id, team_code | | +| ct_starters_score_final | calculated | round_state:ct_score | | +| t_starters_score_final | calculated | round_state:t_score | | +| providence | calculated | metademo:providence | | +| number_of_points | calculated | shape of all data frames | | + +## item_equip - single_event + +Event that triggers this channel: item_equip + +| Col Name | Origin | Dependents | Merge Keys | +| ------------------ | ---------- | --------------- | -------------------------- | +| round | replay | | | +| tick | replay | | | +| player_id | replay | | | +| item | replay | | | +| def_index | replay | | | +| can_zoom | replay | | | +| has_silencer | replay | | | +| is_silenced | replay | | | +| has_tracers | replay | | | +| weapon_type_code | replay | | | +| is_painted | replay | | | +| second | calculated | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | +| player_x_pos | merged | | player_id, tick | +| player_y_pos | merged | | player_id, tick | +| player_z_pos | merged | | player_id, tick | +| player_x_vel | merged | | player_id, tick | +| player_y_vel | merged | | player_id, tick | +| player_z_vel | merged | | player_id, tick | +| player_phi_ang | merged | | player_id, tick | +| player_theta_ang | merged | | player_id, tick | +| player_weapon_code | merged | | player_id, tick | +| player_team_code | merged | | player_id, tick | +| player_tick | merged | | player_id, tick | +| player_player_id | merged | | player_id, tick | + +## item_pickup - single_event + +Event that triggers this channel: item_pickup + +| Col Name | Origin | Dependents | Merge Keys | +| ------------------ | ---------- | --------------- | -------------------------- | +| round | replay | | | +| tick | replay | | | +| player_id | replay | | | +| item | replay | | | +| def_index | replay | | | +| is_silent | replay | | | +| second | calculated | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | +| player_x_pos | merged | | player_id, tick | +| player_y_pos | merged | | player_id, tick | +| player_z_pos | merged | | player_id, tick | +| player_x_vel | merged | | player_id, tick | +| player_y_vel | merged | | player_id, tick | +| player_z_vel | merged | | player_id, tick | +| player_phi_ang | merged | | player_id, tick | +| player_theta_ang | merged | | player_id, tick | +| player_weapon_code | merged | | player_id, tick | +| player_team_code | merged | | player_id, tick | +| player_tick | merged | | player_id, tick | +| player_player_id | merged | | player_id, tick | + +## item_remove - single_event + +Event that triggers this channel: item_pickup + +Note: This event no longer seems to trigger in CS2. Check inventory data in player_status channel to infer when something is removed. + +| Col Name | Origin | Dependents | Merge Keys | +| ------------------ | ---------- | --------------- | -------------------------- | +| round | replay | | | +| tick | replay | | | +| player_id | replay | | | +| item | replay | | | +| def_index | replay | | | +| second | calculated | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | +| player_x_pos | merged | | player_id, tick | +| player_y_pos | merged | | player_id, tick | +| player_z_pos | merged | | player_id, tick | +| player_x_vel | merged | | player_id, tick | +| player_y_vel | merged | | player_id, tick | +| player_z_vel | merged | | player_id, tick | +| player_phi_ang | merged | | player_id, tick | +| player_theta_ang | merged | | player_id, tick | +| player_weapon_code | merged | | player_id, tick | +| player_team_code | merged | | player_id, tick | +| player_tick | merged | | player_id, tick | +| player_player_id | merged | | player_id, tick | + +## molotov_state - multi_event + +Events that trigger this channel: inferno_detonate, inferno_expire, inferno_extinguish, inferno_startburn + +| Col Name | Origin | Dependents | Merge Keys | +| -------------------------------- | ---------- | ------------------------------------------------------------------------------------ | --------------------- | +| round | replay | | | +| tick | replay | | | +| event_type | replay | | | +| entity_id | replay | | | +| x_pos | replay | | | +| y_pos | replay | | | +| z_pos | replay | | | +| second | calculated | tick, tick_rate | | +| entity_id_fixed | calculated | round, entity_id, event_type, tick | | +| burn_duration | calculated | second, entity_id_fixed, event_type | | +| was_extinguished_by_smoke | calculated | second, entity_id_fixed, event_type, burn_duration | | +| extinguisher_id | calculated | second, entity_id_fixed, event_type, x_pos, y_pos, z_pos, player_id | | +| extinguisher_id_fixed | calculated | second, entity_id, entity_id_fixed, event_type, x_pos, y_pos, z_pos, player_id_fixed | | +| smoke_entity_id | calculated | second, entity_id, entity_id_fixed, event_type, x_pos, y_pos, z_pos | | +| was_extinguished_by_thrown_smoke | calculated | second, entity_id, entity_id_fixed, event_type, x_pos, y_pos, z_pos | | +| player_id | calculated | event_type, second, round | | +| player_id_fixed | calculated | event_type, second, round | | +| tick_throw | calculated | event_type, second, round | | +| player_x_pos | merged | | tick_throw, player_id | +| player_y_pos | merged | | tick_throw, player_id | +| player_z_pos | merged | | tick_throw, player_id | +| player_x_vel | merged | | tick_throw, player_id | +| player_y_vel | merged | | tick_throw, player_id | +| player_z_vel | merged | | tick_throw, player_id | +| player_phi_ang | merged | | tick_throw, player_id | +| player_theta_ang | merged | | tick_throw, player_id | +| player_weapon_code | merged | | tick_throw, player_id | +| player_team_code | merged | | tick_throw, player_id | + +## other_death - single_event + +Events that trigger this channel: other_death + +| Col Name | Origin | Dependents | Merge Keys | +| -------------------- | ---------- | --------------- | ---------------------------- | +| round | replay | | | +| tick | replay | | | +| other_type | replay | | | +| attacker_id | replay | | | +| weapon_name | replay | | | +| is_headshot | replay | | | +| penetration_amount | replay | | | +| is_through_smoke | replay | | | +| is_attacker_blind | replay | | | +| is_noscope | replay | | | +| second | calculated | tick, tick_rate | | +| attacker_id_fixed | merged | | attacker_id, round, steam_id | +| attacker_x_pos | merged | | attacker_id, tick | +| attacker_y_pos | merged | | attacker_id, tick | +| attacker_z_pos | merged | | attacker_id, tick | +| attacker_x_vel | merged | | attacker_id, tick | +| attacker_y_vel | merged | | attacker_id, tick | +| attacker_z_vel | merged | | attacker_id, tick | +| attacker_phi_ang | merged | | attacker_id, tick | +| attacker_theta_ang | merged | | attacker_id, tick | +| attacker_weapon_code | merged | | attacker_id, tick | +| attacker_team_code | merged | | attacker_id, tick | +| attacker_tick | merged | | attacker_id, tick | +| attacker_player_id | merged | | attacker_id, tick | + +## player_action - multi_event + +Events that trigger this channel: inspect_weapon, player_decal, player_jump, silencer_detach + +| Col Name | Origin | Dependents | Merge Keys | +| ------------------ | ---------- | --------------- | -------------------------- | +| round | replay | | | +| tick | replay | | | +| event_type | replay | | | +| player_id | replay | | | +| second | calculated | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | +| player_x_pos | merged | | player_id, tick | +| player_y_pos | merged | | player_id, tick | +| player_z_pos | merged | | player_id, tick | +| player_x_vel | merged | | player_id, tick | +| player_y_vel | merged | | player_id, tick | +| player_z_vel | merged | | player_id, tick | +| player_phi_ang | merged | | player_id, tick | +| player_theta_ang | merged | | player_id, tick | +| player_weapon_code | merged | | player_id, tick | +| player_team_code | merged | | player_id, tick | +| player_tick | merged | | player_id, tick | +| player_player_id | merged | | player_id, tick | + +## player_blind - single_event + +Event that triggers this channel: player_blind + +| Col Name | Origin | Dependents | Merge Keys | +| -------------------- | ---------- | --------------- | ---------------------------- | +| round | replay | | | +| tick | replay | | | +| player_id | replay | | | +| entity_id | replay | | | +| attacker_id | replay | | | +| blind_duration | replay | | | +| second | calculated | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | +| attacker_id_fixed | merged | | attacker_id, round, steam_id | +| player_x_pos | merged | | player_id, tick | +| player_y_pos | merged | | player_id, tick | +| player_z_pos | merged | | player_id, tick | +| player_x_vel | merged | | player_id, tick | +| player_y_vel | merged | | player_id, tick | +| player_z_vel | merged | | player_id, tick | +| player_phi_ang | merged | | player_id, tick | +| player_theta_ang | merged | | player_id, tick | +| player_weapon_code | merged | | player_id, tick | +| player_team_code | merged | | player_id, tick | +| player_tick | merged | | player_id, tick | +| player_player_id | merged | | player_id, tick | +| attacker_x_pos | merged | | attacker_id, tick | +| attacker_y_pos | merged | | attacker_id, tick | +| attacker_z_pos | merged | | attacker_id, tick | +| attacker_x_vel | merged | | attacker_id, tick | +| attacker_y_vel | merged | | attacker_id, tick | +| attacker_z_vel | merged | | attacker_id, tick | +| attacker_phi_ang | merged | | attacker_id, tick | +| attacker_theta_ang | merged | | attacker_id, tick | +| attacker_weapon_code | merged | | attacker_id, tick | +| attacker_team_code | merged | | attacker_id, tick | +| attacker_tick | merged | | attacker_id, tick | +| attacker_player_id | merged | | attacker_id, tick | + +## player_death - single_event + +Event that triggers this channel: player_death + +| Col Name | Origin | Dependents | Merge Keys | +| -------------------- | ---------- | --------------- | ---------------------------- | +| round | replay | | | +| tick | replay | | | +| player_id | replay | | | +| attacker_id | replay | | | +| assister_id | replay | | | +| weapon_name | replay | | | +| is_headshot | replay | | | +| penetration_amount | replay | | | +| has_replay | replay | | | +| is_flash_assist | replay | | | +| is_through_smoke | replay | | | +| is_attacker_blind | replay | | | +| is_noscope | replay | | | +| second | calculated | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | +| attacker_id_fixed | merged | | attacker_id, round, steam_id | +| assister_id_fixed | merged | | assister_id, round, steam_id | +| player_x_pos | merged | | player_id, tick | +| player_y_pos | merged | | player_id, tick | +| player_z_pos | merged | | player_id, tick | +| player_x_vel | merged | | player_id, tick | +| player_y_vel | merged | | player_id, tick | +| player_z_vel | merged | | player_id, tick | +| player_phi_ang | merged | | player_id, tick | +| player_theta_ang | merged | | player_id, tick | +| player_weapon_code | merged | | player_id, tick | +| player_team_code | merged | | player_id, tick | +| player_tick | merged | | player_id, tick | +| player_player_id | merged | | player_id, tick | +| attacker_x_pos | merged | | attacker_id, tick | +| attacker_y_pos | merged | | attacker_id, tick | +| attacker_z_pos | merged | | attacker_id, tick | +| attacker_x_vel | merged | | attacker_id, tick | +| attacker_y_vel | merged | | attacker_id, tick | +| attacker_z_vel | merged | | attacker_id, tick | +| attacker_phi_ang | merged | | attacker_id, tick | +| attacker_theta_ang | merged | | attacker_id, tick | +| attacker_weapon_code | merged | | attacker_id, tick | +| attacker_team_code | merged | | attacker_id, tick | +| attacker_tick | merged | | attacker_id, tick | +| attacker_player_id | merged | | attacker_id, tick | +| assister_x_pos | merged | | assister_id, tick | +| assister_y_pos | merged | | assister_id, tick | +| assister_z_pos | merged | | assister_id, tick | +| assister_x_vel | merged | | assister_id, tick | +| assister_y_vel | merged | | assister_id, tick | +| assister_z_vel | merged | | assister_id, tick | +| assister_phi_ang | merged | | assister_id, tick | +| assister_theta_ang | merged | | assister_id, tick | +| assister_weapon_code | merged | | assister_id, tick | +| assister_team_code | merged | | assister_id, tick | +| assister_tick | merged | | assister_id, tick | +| assister_player_id | merged | | assister_id, tick | + +## player_disconnect - single_event + +Event that triggers this channel: player_disconnect + +| Col Name | Origin | Dependents | Merge Keys | +| ----------------- | ---------- | --------------- | -------------------------- | +| round | replay | | | +| tick | replay | | | +| player_id | replay | | | +| disconnect_reason | replay | | | +| is_bot | replay | | | +| second | calculated | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | + +## player_footstep - single_event + +Event that triggers this channel: player_footstep + +| Col Name | Origin | Dependents | Merge Keys | +| --------------- | ---------- | --------------- | -------------------------- | +| round | replay | | | +| tick | replay | | | +| player_id | replay | | | +| second | calculated | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | + +## player_hurt - single_event + +Event that triggers this channel: player_hurt + +| Col Name | Origin | Dependents | Merge Keys | +| ------------------------ | ---------- | ------------------------ | ---------------------------- | +| round | replay | | | +| tick | replay | | | +| player_id | replay | | | +| attacker_id | replay | | | +| health | replay | | | +| armor | replay | | | +| weapon_name | replay | | | +| health_removed | replay | | | +| armor_removed | replay | | | +| hit_box_code | replay | | | +| second | calculated | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | +| attacker_id_fixed | merged | | attacker_id, round, steam_id | +| player_x_pos | merged | | player_id, tick | +| player_y_pos | merged | | player_id, tick | +| player_z_pos | merged | | player_id, tick | +| player_x_vel | merged | | player_id, tick | +| player_y_vel | merged | | player_id, tick | +| player_z_vel | merged | | player_id, tick | +| player_phi_ang | merged | | player_id, tick | +| player_theta_ang | merged | | player_id, tick | +| player_weapon_code | merged | | player_id, tick | +| player_team_code | merged | | player_id, tick | +| player_tick | merged | | player_id, tick | +| player_player_id | merged | | player_id, tick | +| attacker_x_pos | merged | | attacker_id, tick | +| attacker_y_pos | merged | | attacker_id, tick | +| attacker_z_pos | merged | | attacker_id, tick | +| attacker_x_vel | merged | | attacker_id, tick | +| attacker_y_vel | merged | | attacker_id, tick | +| attacker_z_vel | merged | | attacker_id, tick | +| attacker_phi_ang | merged | | attacker_id, tick | +| attacker_theta_ang | merged | | attacker_id, tick | +| attacker_weapon_code | merged | | attacker_id, tick | +| attacker_team_code | merged | | attacker_id, tick | +| attacker_tick | merged | | attacker_id, tick | +| attacker_player_id | merged | | attacker_id, tick | +| effective_health_removed | calculated | player_id, round, health | | + +## player_info - player_info + +Event that triggers this channel: round_freeze_end + +| Col Name | Origin | Dependents | Merge Keys | +| ---------------- | ------------------ | -------------------- | -------------------------- | +| round | replay | | | +| tick | replay-deleted | | | +| player_id | replay | | | +| team_code | replay | | | +| wins | replay-capped | | | +| rank | replay | | | +| radar_color_code | replay | | | +| second | calculated-deleted | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | +| rank_raw | calculated | player_info:rank | | +| rank_platform | calculated | player_personal:rank | | + +## player_name - single_event + +Event that triggers this channel: player_name + +| Col Name | Origin | Dependents | Merge Keys | +| --------------- | --------------- | --------------- | -------------------------- | +| round | replay | | | +| tick | replay | | | +| player_id | replay | | | +| name_new | replay-redacted | | | +| name_old | replay-redacted | | | +| second | calculated | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | + +## player_personal - player_info + +Event that triggers this channel: round_freeze_end + +| Col Name | Origin | Dependents | Merge Keys | +| -------------------- | ------------------ | ---------------- | ---------- | +| round | replay | | | +| tick | replay-deleted | | | +| player_id | replay | | | +| player_controller_id | replay | | | +| player_id_pawn | replay | | | +| name | replay-redacted | | | +| clan_tag | replay-redacted | | | +| steam_id | replay-redacted | | | +| second | calculated-deleted | tick, tick_rate | | +| is_bot | calculated | steam_id | | +| player_id_fixed | calculated | steam_id, is_bot | | + +## player_spawn - single_event + +Event that triggers this channel: player_spawn + +| Col Name | Origin | Dependents | Merge Keys | +| ------------------ | ---------- | --------------- | -------------------------- | +| round | replay | | | +| tick | replay | | | +| player_id | replay | | | +| second | calculated | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | +| player_x_pos | merged | | player_id, tick | +| player_y_pos | merged | | player_id, tick | +| player_z_pos | merged | | player_id, tick | +| player_x_vel | merged | | player_id, tick | +| player_y_vel | merged | | player_id, tick | +| player_z_vel | merged | | player_id, tick | +| player_phi_ang | merged | | player_id, tick | +| player_theta_ang | merged | | player_id, tick | +| player_weapon_code | merged | | player_id, tick | +| player_team_code | merged | | player_id, tick | +| player_tick | merged | | player_id, tick | +| player_player_id | merged | | player_id, tick | + +## player_status - telemetry + +Event that triggers this channel: tick_end + +| Col Name | Origin | Dependents | Merge Keys | +| ----------------------------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | +| tick | replay | | | +| round | replay | | | +| player_id | replay | | | +| player_controller_id | replay | | | +| armor | replay | | | +| health | replay | | | +| place_name | replay | | | +| inv_primary | replay | | | +| inv_secondary | replay | | | +| inv_flashbang | replay | | | +| inv_taser | replay | | | +| inv_hegrenade | replay | | | +| inv_smokegrenade | replay | | | +| inv_molotov | replay | | | +| inv_decoy | replay | | | +| inv_incgrenade | replay | | | +| inv_c4 | replay | | | +| current_equipment_cost | replay | | | +| freezetime_end_equipment_cost | replay | | | +| money | replay | | | +| ping | replay-redacted | | | +| round_start_equipment_cost | replay | | | +| zoom_level | replay | | | +| iron_sight_mode | replay | | | +| burst_mode | replay | | | +| is_silenced | replay | | | +| reload_visually_complete | replay | | | +| weapon_mode | replay | | | +| flash_duration | replay | | | +| flash_max_alpha | replay | | | +| has_c4 | replay | | | +| has_defuser | replay | | | +| has_helmet | replay | | | +| is_defusing | replay | | | +| is_fake_player | replay | | | +| is_in_bomb_zone | replay | | | +| is_in_buy_zone | replay | | | +| is_scoped | replay | | | +| is_spotted | replay | | | +| is_walking | replay | | | +| second | calculated | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | +| equipment_value_calc | 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 | | + +## player_vector - telemetry + +Event that triggers this channel: tick_end + +| Col Name | Origin | Dependents | Merge Keys | +| --------------------- | ---------- | ------------------------------------------- | -------------------------- | +| tick | replay | | | +| round | replay | | | +| player_id | replay | | | +| x_pos | replay | | | +| y_pos | replay | | | +| z_pos | replay | | | +| x_aimpunch | replay | | | +| y_aimpunch | replay | | | +| current_ammo | replay | | | +| weapon_code | replay | | | +| inaccuracy | replay | | | +| last_shot_time | replay | | | +| recoil_index | replay | | | +| phi_ang | replay | | | +| theta_ang | replay | | | +| is_ducked | replay | | | +| is_ducking | replay | | | +| duck_amount | replay | | | +| duck_speed | replay | | | +| fall_velocity | replay | | | +| view_punch_angle_tick | replay | | | +| aim_punch_angle_vel_x | replay | | | +| aim_punch_angle_vel_y | replay | | | +| aim_punch_angle_vel_z | replay | | | +| is_rescuing | replay | | | +| second | calculated | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | +| team_code | merged | | round, player_id | +| theta_vel | calculated | second, player_id, theta | | +| phi_vel | calculated | second, player_id, phi | | +| ang_vel | calculated | phi_vel, theta_vel | | +| x_vel | calculated | second, x_pos | | +| y_vel | calculated | second, y_pos | | +| z_vel | calculated | second, z_pos | | +| x_vel | calculated | second, x_pos | | +| y_vel | calculated | second, y_pos | | +| z_vel | calculated | second, z_pos | | +| x_vel | calculated | second, x_pos | | +| y_vel | calculated | second, y_pos | | +| z_vel | calculated | second, z_pos | | +| x_vel | calculated | second, x_pos | | +| y_vel | calculated | second, y_pos | | +| z_vel | calculated | second, z_pos | | +| x_vel | calculated | second, x_pos | | +| y_vel | calculated | second, y_pos | | +| z_vel | calculated | second, z_pos | | +| x_vel | calculated | second, x_pos | | +| y_vel | calculated | second, y_pos | | +| z_vel | calculated | second, z_pos | | +| x_vel | calculated | second, x_pos | | +| y_vel | calculated | second, y_pos | | +| z_vel | calculated | second, z_pos | | +| x_vel | calculated | second, x_pos | | +| y_vel | calculated | second, y_pos | | +| z_vel | calculated | second, z_pos | | +| x_vel | calculated | second, x_pos | | +| y_vel | calculated | second, y_pos | | +| z_vel | calculated | second, z_pos | | +| x_vel | calculated | second, x_pos | | +| y_vel | calculated | second, y_pos | | +| z_vel | calculated | second, z_pos | | +| speed_2d | calculated | x_vel, y_vel | | +| movement_angle | calculated | second, x_vel, y_vel | | +| movement_angle_diff | calculated | second, speed_2d, theta_ang, movement_angle | | + +## round_end - single_event + +Event that triggers this channel: round_end + +Note: this event is no longer in the .dem files. This channel is inferred from other round events. + +| Col Name | Origin | Dependents | Merge Keys | +| ------------------ | ---------- | --------------- | ---------- | +| round | replay | | | +| tick | replay | | | +| winner_team_code | replay | | | +| win_reason_code | replay | | | +| win_reason_message | replay | | | +| legacy_code | replay | | | +| player_count | replay | | | +| second | calculated | tick, tick_rate | | + +## round_mvp - single_event + +Event that triggers this channel: round_mvp + +| Col Name | Origin | Dependents | Merge Keys | +| --------------- | ---------- | --------------- | -------------------------- | +| round | replay | | | +| tick | replay | | | +| player_id | replay | | | +| mvp_reason_code | replay | | | +| music_kit_mvps | replay | | | +| second | calculated | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | + +## round_start -single_event + +Event that triggers this channel: round_start + +Note: this event is no longer in the .dem files. This channel is inferred from other round events. + +| Col Name | Origin | Dependents | Merge Keys | +| ---------- | ---------- | --------------- | ---------- | +| round | replay | | | +| tick | replay | | | +| time_limit | replay | | | +| frag_limit | replay | | | +| objective | replay | | | +| second | calculated | tick, tick_rate | | + +## round_state - multi_event + +Events that trigger this channel: cs_round_start_beep, cs_round_final_beep, cs_win_panel_round, cs_pre_restart, round_prestart, round_poststart, round_announce_last_round_half, announce_phase_end, round_announce_final, round_announce_match_point, cs_win_panel_match, begin_new_match, buytime_ended, round_announce_match_start, round_announce_warmup, round_freeze_end, start_halftime, round_officially_ended, round_end + +| Col Name | Origin | Dependents | Merge Keys | +| ------------ | ------------ | --------------- | ---------- | +| round | replay | | | +| tick | replay | | | +| event_type | replay | | | +| t_score | replay_fixed | | | +| ct_score | replay_fixed | | | +| t_score_raw | replay | | | +| ct_score_raw | replay | | | +| phase | replay | | | +| is_warmup | replay | | | +| second | calculated | tick, tick_rate | | + +## tick - single_event + +Event that triggers this channel: tick_end + +| Col Name | Origin | Dependents | Merge Keys | +| --------------------------- | ---------- | ------------------ | ---------- | +| round | replay | | | +| tick | replay | | | +| second | calculated | tick, tick_rate | | +| previous_phase | calculated | event_type, second | | +| second_since_previous_phase | calculated | second | | + +## weapon_action - multi_event + +Events that trigger this channel: fire_on_empty, reload, zoom, zoom_rifle + +| Col Name | Origin | Dependents | Merge Keys | +| ------------------ | ---------- | --------------- | -------------------------- | +| round | replay | | | +| tick | replay | | | +| event_type | replay | | | +| player_id | replay | | | +| second | calculated | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | +| player_x_pos | merged | | player_id, tick | +| player_y_pos | merged | | player_id, tick | +| player_z_pos | merged | | player_id, tick | +| player_x_vel | merged | | player_id, tick | +| player_y_vel | merged | | player_id, tick | +| player_z_vel | merged | | player_id, tick | +| player_phi_ang | merged | | player_id, tick | +| player_theta_ang | merged | | player_id, tick | +| player_weapon_code | merged | | player_id, tick | +| player_team_code | merged | | player_id, tick | +| player_tick | merged | | player_id, tick | +| player_player_id | merged | | player_id, tick | + +## weapon_fire - single_event + +Event that triggers this channel: weapon_fire + +| Col Name | Origin | Dependents | Merge Keys | +| ------------------ | ---------- | ---------------------------------------------- | -------------------------- | +| round | replay | | | +| tick | replay | | | +| player_id | replay | | | +| player_id_pawn | replay | | | +| weapon_name | replay | | | +| is_silenced | replay | | | +| second | calculated | tick, tick_rate | | +| player_id_fixed | merged | | player_id, round, steam_id | +| player_x_pos | merged | | player_id, tick | +| player_y_pos | merged | | player_id, tick | +| player_z_pos | merged | | player_id, tick | +| player_x_vel | merged | | player_id, tick | +| player_y_vel | merged | | player_id, tick | +| player_z_vel | merged | | player_id, tick | +| player_phi_ang | merged | | player_id, tick | +| player_theta_ang | merged | | player_id, tick | +| player_weapon_code | merged | | player_id, tick | +| player_team_code | merged | | player_id, tick | +| player_tick | merged | | player_id, tick | +| player_player_id | merged | | player_id, tick | +| missed_molotov | calculated | event_type-molotov_state, second-molotov_state | | diff --git a/docs/datascience/old/csgo/_category_.yml b/docs/datascience/old/csgo/_category_.yml new file mode 100644 index 0000000..167255c --- /dev/null +++ b/docs/datascience/old/csgo/_category_.yml @@ -0,0 +1,4 @@ +--- +label: CS:GO Data Sets (archived) +collapsible: true +collapsed: true diff --git a/docs/datascience/adx/csgo/csds/README.md b/docs/datascience/old/csgo/csds/README.md similarity index 97% rename from docs/datascience/adx/csgo/csds/README.md rename to docs/datascience/old/csgo/csds/README.md index 5a9a9e4..cc2d172 100644 --- a/docs/datascience/adx/csgo/csds/README.md +++ b/docs/datascience/old/csgo/csds/README.md @@ -1,5 +1,22 @@ +--- +sidebar_label: Competitive CS:GO Gameplay (archived) +slug: /datascience/adx/csgo/csds/ +--- + # PureSkill.gg Competitive CS:GO Gameplay +:::warning Archived page + +No new CS:GO data is produced. Counter-Strike: Global Offensive was replaced by +Counter-Strike 2 in September 2023, and the pipeline stopped parsing CS:GO demos +once the last of them had been processed. The AWS Data Exchange product this +page describes is the same one that now carries CS2 data, and it no longer +retains any CS:GO revisions. This page is kept for subscribers working with +CS:GO data they already hold. The current page is +[Competitive CS2 Gameplay](/datascience/adx/cs2/csds/). + +::: + _This data set is hosted as a [product on the AWS Data Exchange][product page]._ Competitive Counter-Strike: Global Offensive (CS:GO) diff --git a/docs/datascience/old/csgo/csds/_category_.yml b/docs/datascience/old/csgo/csds/_category_.yml new file mode 100644 index 0000000..acb6a00 --- /dev/null +++ b/docs/datascience/old/csgo/csds/_category_.yml @@ -0,0 +1,4 @@ +--- +label: Competitive Gameplay +collapsible: true +collapsed: false diff --git a/docs/datascience/adx/csgo/csds/assets/csds_dictionary.csv b/docs/datascience/old/csgo/csds/assets/csds_dictionary.csv similarity index 100% rename from docs/datascience/adx/csgo/csds/assets/csds_dictionary.csv rename to docs/datascience/old/csgo/csds/assets/csds_dictionary.csv diff --git a/docs/datascience/adx/csgo/csds/revisions.md b/docs/datascience/old/csgo/csds/revisions.md similarity index 95% rename from docs/datascience/adx/csgo/csds/revisions.md rename to docs/datascience/old/csgo/csds/revisions.md index 6237bec..f6ca145 100644 --- a/docs/datascience/adx/csgo/csds/revisions.md +++ b/docs/datascience/old/csgo/csds/revisions.md @@ -1,5 +1,17 @@ +--- +sidebar_label: Revision Stats (CS:GO, archived) +slug: /datascience/adx/csgo/csds/revisions +--- + # Revision Stats +:::warning Archived page + +These counts are for the CS:GO data set, which is no longer published. They were +last measured in 2022 and are kept as a record. + +::: + ## Number of Matches Per Day Here is an _estimate_ of how many matches are in each day. diff --git a/docs/datascience/adx/csgo/csds/spec.md b/docs/datascience/old/csgo/csds/spec.md similarity index 99% rename from docs/datascience/adx/csgo/csds/spec.md rename to docs/datascience/old/csgo/csds/spec.md index 3b2377f..126b804 100644 --- a/docs/datascience/adx/csgo/csds/spec.md +++ b/docs/datascience/old/csgo/csds/spec.md @@ -1,5 +1,19 @@ +--- +sidebar_label: CSDS Spec (CS:GO, archived) +slug: /datascience/adx/csgo/csds/spec +--- + # CSDS Spec +:::warning Archived page + +This spec describes the CS:GO channels, which are no longer published. Several of +them (`item_remove`, `player_action`, `player_fall`, `player_interaction`) have no +CS2 equivalent. For the data set still being published, see +[CSDS Spec](/datascience/adx/cs2/csds/spec). + +::: + Documentation for CSDS channels built by FPS Critic, Inc. ## bomb_action - multi_event diff --git a/docs/datascience/old/datascience-faq.md b/docs/datascience/old/datascience-faq.md new file mode 100644 index 0000000..a0c5e89 --- /dev/null +++ b/docs/datascience/old/datascience-faq.md @@ -0,0 +1,250 @@ +--- +sidebar_label: Data Science FAQ (archived) +--- + +# PureSkill.gg Data Science + +:::warning Archived page + +This is the Data Science FAQ as it stood on 2022-07-04. It recommends Python 3.9 +and Poetry, quotes 2022 download costs, and describes a CS:GO data set that is no +longer published. It is kept as a record. The current FAQ is +[PureSkill.gg Data Science](/datascience/). + +::: + +## FAQ + +### What data is available? + +The [PureSkill.gg Competitive CS:GO Gameplay Data Set] contains +Competitive Counter-Strike: Global Offensive (CS:GO) match data +from matchmaking, FACEIT, and other third-parties. +Contains full player telemetry and timestamped game events. + +### How can I get started? + +With [the tutorial][tutorial] you will learn how to do some real +CS:GO data science with data from the public data set. +Once you complete the tutorial, you may use the same repository to bootstrap you own project! + +### Why are you doing this? + +We want to see the amazing stuff you'll do with it! +Working with AI researchers using CS:GO to solve really hard problems inspired us to +contribute back and unlock this potential for anyone. + +We hope this work can fuel everything from one's first data science experience, to their +next hackathon, school project—all the way to groundbreaking research. + +### Who can use the data? + +Anyone with a use case that adheres to the license. + +The full license is presented and agreed to when you subscribe to the data set, +but it's basically the [CC BY-NC-SA 4.0] license, which means you +may not use the data for commercial purposes, you must attribute PureSkill.gg, +and you must use the same license for any derived work. + +### Does it cost money? + +The data set is released for free, however, the process +of exporting the data will incur standard AWS fees +for using the cloud provider's storage and bandwidth. + +See the [Cost FAQ](#cost-faq) for details. + +### Why do I need to subscribe? + +The [AWS Data Exchange], which is the cloud platform hosting the data set, +requires users to subscribe for access to hosted data products. +On subscribing, you must agree to our version of the [CC BY-NC-SA 4.0] license. +The subscription to PureSkill.gg data is always free. + +### Are you selling my data? + +Absolutely not! +The data set is free and for the community. +We hope the data will be used for cool stuff, +and for future improvements to Coach! + +### Does this mean everyone will know how n00b I am? + +Nope! Not from here at least. +All player data is [thoroughly anonymized][anonymization]: +it is impossible to determine a player's identity, virtual or otherwise. + +### Can I opt-out? + +Currently we do not provide a way for users of PureSkill.gg to opt-out +of inclusion in the data set. +You may, however, ask for your account to be deleted, +which will stop inclusion of future matches. + +Please note that even though your match data is +in the data set, it is **not traceable back to your player identity**. + +### I have more questions? + +That wasn't a question. +But it's ok, you can reach out in the Dojo channel on [Discord]. +We want to help you and get your feedback! + +## Technical FAQ + +### What are the developer tools? + +- **[PySkill][makenew-pyskill]:** + Project skeleton for doing PureSkill.gg data science with Python. +- **[Data Science Developer Kit (DSDK)][dsdk]:** + Python library for working with the data. + Read csds, create tomes, access data from the ADX, and more. +- **[CS:GO Data Science Developer Kit (CSGO DSDK)][csgo-dsdk]:** + Python library with tools specific to CS:GO data science. +- **[PureSkill.gg Data Science Showcase][datascience-showcase]:** + Demonstrations and examples of neat applications of PureSkill.gg data. +- **[PureSkill.gg Docs][docs]:** + This website. + +### Are the developer tools stable? + +Mostly. +We don't anticipate majors changes before releasing version 1 of our libraries. +During the initial period following the announcement, we will be working +with early adopters to squash bugs and smooth out the APIs. +Please report any issues on GitHub. + +Libraries follow the principals of [semver]. +Beta releases may see breaking API changes before their final release, while release candidates +will avoid this unless absolutely necessary. + +Python projects use the [PEP 440] standard version format +of `1.2.3` for stable releases, `1.2.3b0` for beta releases, +and `1.2.3rc0` for release candidates. +This is a small cosmetic difference, but otherwise, the semantic meaning will follow [semver]. + +### What do I need to use the developer tools? + +The minimum [tutorial requirements] are [Python] and [Poetry]. + +### Can I use any version of Python? + +No. +For the best experience, we recommend using the latest version of Python 3.9 + +To install an isolated Python version, +we recommend [pyenv] for Linux and Mac, or [pyenv-win] for Windows. + +Version 3.10 may work, but many libraries are still lagging behind on full support, +which means installing dependencies may take longer, require additional build tools, or fail. +Additionally, Python 3.10 is not yet supported by all cloud providers, including AWS Lambda. +When 3.10 has wider adoption, we will officially support it, but for now we only test on 3.9. + +### Why do I need to use Poetry to install dependencies? + +Poetry guarantees each project runs in an isolated environment with pinned dependencies. +This is the only way to ensure reproducible tests and builds. + +You can try to use an alternative Python package manager, +but we cannot offer support. + +### Can I use my favorite editor or IDE? + +Yes. +If your editor or IDE integrates with Python, +ensure you refer to its documentation for using it with Python virtual environments. + +### Can I contribute? + +Yes! Please use [Discord] or GitHub issues. +We will consider additional forums like GitHub Discussions +as the community grows. + +To contribute code or documentation, +please open a corresponding issue first before opening a pull request. +When contributing obvious fixes, you may open a pull request directly. + +### Can I use $favorite_language? + +Yes! The current provided tooling is in Python, but all of the underlying +data is stored as [Apache Parquet] with additional metadata in [JSON]. + +> Apache Parquet is an open source, column-oriented data file format designed for efficient data storage and retrieval. +> It provides efficient data compression and encoding schemes with enhanced performance to handle complex data in bulk. +> Parquet is available in multiple languages including Java, C++, Python, etc... + +If you want to use another language, we still recommend stating with the [tutorial]. +This is the easiest way to download the data and create new tomes, which are just more Parquet and JSON files. +Tomes are economical views of the data tailored for specific analyses. + +## Cost FAQ + +### How much will AWS charge me? + +_FPS Critic Inc., owner of PureSkill.gg, is not liable for any AWS costs you incur._ + +[Step 7 of the tutorial] can help you estimate your costs, +We provide those and the estimates below for convenience, +but we do not guarantee their accuracy or applicability to your AWS account. + +TL;DR: It costs about $1.50 to download a day of data, or $4-5 per 1,000 matches. +Downloading tomes is much less expensive. +Tomes contain slices of features across many matches. + +### How should I optimize my costs? + +The data set is structured to help you control and optimize your costs. +First, it is split into daily revisions which may be downloaded individually. +Second, we maintain a companion tome data set which is very economical. + +Consider these steps: + +1. AWS has a free tier which + may reduce or the eliminate the cost to get started. +2. If you can use available tomes for your project, + don't bother downloading individual match data. + Most tomes cost pennies to download and contain + data for across many matches. +3. If the available tomes are not sufficient for your project, + estimate how much data you actually need by starting with one day. + Remember that one revision is one day worth of data. +4. Be careful when downloading a large number of revisions at once. + You might go over the free tier part-way though the export process + and have difficulty stopping the jobs. + We recommend you limit each export batch to one month intervals. +5. If you share a tome generator with us, we may be able to make the tome + for you and share it back to the data set. This would prevent you from + needing to download the entire csds data set which is about 2TB. + +### Where can I get financial support? + +- If you are a student, ask your department or advisor if they can support you. +- If you are a professional data scientist, ask your organization + if they can fund this as a hackathon project or self-guided learning project. +- Ask AWS for credits. + Your company, organization, university, or department may + have a relationship with AWS. + If not, talk to your AWS account manager and they may help you get some credits. +- Talk to us. We can't promise financial support, but we can brainstorm a solution together. + +[step 7 of the tutorial]: https://github.com/pureskillgg/makenew-pyskill/blob/master/notebooks/tutorial/7%20-%20Getting%20csds%20data%20from%20the%20ADX.ipynb +[pureskill.gg competitive cs:go gameplay data set]: /datascience/adx/csgo/csds/ +[tutorial]: https://github.com/pureskillgg/makenew-pyskill/blob/master/README.rst#-start-with-the-tutorial +[cc by-nc-sa 4.0]: https://creativecommons.org/licenses/by-nc-sa/4.0/ +[aws data exchange]: https://aws.amazon.com/data-exchange/ +[anonymization]: https://github.com/pureskillgg/csgo-dsdk/blob/master/pureskillgg_csgo_dsdk/scrubber/scrub_pii.py +[apache parquet]: https://parquet.apache.org/ +[json]: https://www.json.org/ +[dsdk]: https://github.com/pureskillgg/dsdk +[csgo-dsdk]: https://github.com/pureskillgg/csgo-dsdk +[docs]: https://github.com/pureskillgg/docs +[makenew-pyskill]: https://github.com/pureskillgg/makenew-pyskill +[datascience-showcase]: https://github.com/pureskillgg/datascience-showcase +[semver]: https://semver.org/ +[pep 440]: https://peps.python.org/pep-0440/ +[discord]: https://pureskill.gg/discord +[tutorial requirements]: https://github.com/pureskillgg/makenew-pyskill#requirements +[python]: https://www.python.org/ +[poetry]: https://python-poetry.org/ +[pyenv]: https://github.com/pyenv/pyenv +[pyenv-win]: https://github.com/pyenv-win/pyenv-win diff --git a/docs/datascience/showcase/_category_.yml b/docs/datascience/showcase/_category_.yml index 5b8d65e..90ae133 100644 --- a/docs/datascience/showcase/_category_.yml +++ b/docs/datascience/showcase/_category_.yml @@ -1,4 +1,5 @@ --- label: Data Science Showcase +position: 2 collapsible: false collapsed: false From 9b32f60a5464efc181a37b1266e920993b5856a9 Mon Sep 17 00:00:00 2001 From: Bill Freeman Date: Wed, 26 Aug 2026 23:35:17 -0500 Subject: [PATCH 2/3] Act on the Copilot review Three typos carried over from the 2022 FAQ, now that the text around them is being rewritten anyway: "bootstrap you own project", "principals of semver", "part-way though the export process". The archived CS2 banner claimed the page describes 31 files per match. The page says 31 in the intro and 33 in the glossary, which is one of the reasons it is being replaced, so the banner now says that rather than picking one number and reading as a contradiction against the text right below it. --- docs/datascience/README.md | 6 +++--- docs/datascience/old/cs2/csds/README.md | 10 ++++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/docs/datascience/README.md b/docs/datascience/README.md index fc8d7e8..02ee907 100644 --- a/docs/datascience/README.md +++ b/docs/datascience/README.md @@ -19,7 +19,7 @@ replaced the game in 2023. Those revisions are no longer retained. The With [the tutorial][tutorial] you will learn how to do some real CS2 data science with data from the public data set. -Once you complete the tutorial, you may use the same repository to bootstrap you own project! +Once you complete the tutorial, you may use the same repository to bootstrap your own project! ### Why are you doing this? @@ -117,7 +117,7 @@ Mostly. We don't anticipate major changes before releasing version 1 of our libraries. Please report any issues on GitHub. -Libraries follow the principals of [semver]. +Libraries follow the principles of [semver]. Beta releases may see breaking API changes before their final release, while release candidates will avoid this unless absolutely necessary. @@ -220,7 +220,7 @@ Consider these steps: 3. Estimate how much data you actually need by starting with one day. Remember that one revision is one day worth of data. 4. Be careful when exporting a large number of revisions at once. - You might go over the free tier part-way though the export process + You might go over the free tier part-way through the export process and have difficulty stopping the jobs. We recommend you limit each export batch to one month intervals. 5. Once you have exported the data, build a [tome][dsdk] from it. A tome is a diff --git a/docs/datascience/old/cs2/csds/README.md b/docs/datascience/old/cs2/csds/README.md index 5ba2c37..880bcd4 100644 --- a/docs/datascience/old/cs2/csds/README.md +++ b/docs/datascience/old/cs2/csds/README.md @@ -6,10 +6,12 @@ sidebar_label: Competitive CS2 Gameplay (archived) :::warning Archived page -This is the CS2 data set page as it stood on 2024-02-24. It describes 31 files per -match; the data set has published 42 channels plus the index object since -August 2026. It is kept as a record for anyone working with data downloaded -before then. The current page is [Competitive CS2 Gameplay](/datascience/adx/cs2/csds/). +This is the CS2 data set page as it stood on 2024-02-24. It is internally +inconsistent about how many files a match is, saying 31 above and 33 in the +glossary; 31 was the right answer at the time. Since 2026-08-04 a match is 43 +objects, 42 channels plus the index. This page is kept as a record for anyone +working with data downloaded before then. The current page is +[Competitive CS2 Gameplay](/datascience/adx/cs2/csds/). ::: From cfc31f4c12030d5167772a42c2a170f4a3a4b622 Mon Sep 17 00:00:00 2001 From: Bill Freeman Date: Sat, 29 Aug 2026 16:18:09 -0500 Subject: [PATCH 3/3] Act on the second Copilot review The datasheet still said "There are no player names, text chat, or voice chat data in the dataset." That was true when it was written and is not true now: player_chat exists, and the scrubber overwrites values rather than dropping columns. Read off csgo-dsdk scrub_pii.py, redaction is four different operations, so the spec and the dictionary now say which one each column got: names and chat text become the literal string "redacted", steam_id becomes a per-match alias, ping becomes 0, and wins and win_count are clamped at 2501. The chat rows survive, so the data shows that somebody typed in a round and not what they typed. Voice data is genuinely absent. Three places keyed the archive to when a subscriber downloaded data. A pre-August revision is still retained and still exportable today, so that sends exactly the affected reader to the wrong page. They now key off the revision: through 2026-07-31 the archived pages apply, 2026-08-02 is mixed, 2026-08-04 onward is current. The archived spec banner also said twelve channels were added and two columns removed. It is fourteen channels added and two channels removed, item_remove and player_action, for a net twelve. The FAQ claimed every match is 42 files without qualifying it, contradicting the data set page two clicks away. --- docs/datascience/README.md | 6 +++-- docs/datascience/adx/cs2/csds/README.md | 8 ++++++- .../adx/cs2/csds/assets/csds_dictionary.csv | 22 +++++++++---------- docs/datascience/adx/cs2/csds/spec.md | 15 ++++++++++--- docs/datascience/old/README.md | 14 +++++++----- docs/datascience/old/cs2/csds/README.md | 11 ++++++---- docs/datascience/old/cs2/csds/spec.md | 13 +++++++---- 7 files changed, 58 insertions(+), 31 deletions(-) diff --git a/docs/datascience/README.md b/docs/datascience/README.md index 02ee907..a4dea15 100644 --- a/docs/datascience/README.md +++ b/docs/datascience/README.md @@ -8,8 +8,10 @@ The [PureSkill.gg Competitive Gameplay Data Set] contains Counter-Strike 2 (CS2) match data from matchmaking, FACEIT, and other third-parties. Contains full player telemetry and timestamped game events. -A new revision is published every day, and each match in it is 42 data files -plus an index object. +A new revision is published every day. In revisions from 2026-08-04 onward, +each match is 42 data files plus an index object; revisions still retained from +before then carry 30 data files per match. The +[data set page](./adx/cs2/csds/) covers the change. The data set carried Counter-Strike: Global Offensive (CS:GO) data until CS2 replaced the game in 2023. Those revisions are no longer retained. The diff --git a/docs/datascience/adx/cs2/csds/README.md b/docs/datascience/adx/cs2/csds/README.md index bc7c3a2..f6cd598 100644 --- a/docs/datascience/adx/cs2/csds/README.md +++ b/docs/datascience/adx/cs2/csds/README.md @@ -194,7 +194,13 @@ This is a standardized CSV file that catalogues all tables and columns in the da CS2 has a rating by the [ESRB] of [Mature][esrb ratings] for Blood and Intense Violence. CS2 is basically a SWAT team simulator. The game includes realistic weapons, bombs, hostages, terrorists, killing, death, and grenades. - There are no player names, text chat, or voice chat data in the dataset. + Player names and chat messages are overwritten before publication rather than + dropped, so the channels carrying them are present and their rows are intact. + `player_name.name_new`, `player_name.name_old`, `player_personal.name`, + `player_personal.clan_tag` and `player_chat.text` each hold the literal string + `redacted` in every row. `player_chat` therefore tells you that somebody typed + in a given round, and nothing about what they typed. + There is no voice chat data anywhere in the dataset. It is possible to draw offensive pictures by shooting a wall and if visualized, this may be considered offensive. diff --git a/docs/datascience/adx/cs2/csds/assets/csds_dictionary.csv b/docs/datascience/adx/cs2/csds/assets/csds_dictionary.csv index 6051862..78b1160 100644 --- a/docs/datascience/adx/cs2/csds/assets/csds_dictionary.csv +++ b/docs/datascience/adx/cs2/csds/assets/csds_dictionary.csv @@ -169,8 +169,8 @@ tick_save_rate,INTEGER,,,,,,,header,header rushb_version,VARCHAR,,,,,,,header,header ppp_version,VARCHAR,,,,,,,header,header match_date,VARCHAR,,,,,,,header,header -demo_id,VARCHAR,,,,Redacted by the PII scrubber.,,,header,header -sharecode,VARCHAR,,,,Redacted by the PII scrubber.,,,header,header +demo_id,VARCHAR,,,,"Every value is replaced with the literal string ""redacted"".",,,header,header +sharecode,VARCHAR,,,,"Every value is replaced with the literal string ""redacted"".",,,header,header platform,VARCHAR,,,,,,,header,header match_type,VARCHAR,,,,,,,header,header t_starters_avg_rank,DECIMAL,,,,,,,header,header @@ -359,7 +359,7 @@ attacker_team_code,INTEGER,,True,,Merged from another channel. Null where no sou round,INTEGER,,False,,,,,player_chat,single_event tick,INTEGER,,False,,,,,player_chat,single_event player_id,INTEGER,,False,,,,,player_chat,single_event -text,VARCHAR,,False,,Redacted by the PII scrubber.,,,player_chat,single_event +text,VARCHAR,,False,,"Every value is replaced with the literal string ""redacted"". The chat rows themselves are kept, so you can see that a player typed in a round without seeing what they typed.",,,player_chat,single_event is_chat_all,BOOLEAN,,True,,,,,player_chat,single_event second,DECIMAL,,,,,,,player_chat,single_event player_id_fixed,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,player_chat,single_event @@ -476,7 +476,7 @@ effective_health_removed,INTEGER,,,,,,,player_hurt,single_event round,INTEGER,,False,,,,,player_info,player_info player_id,INTEGER,,False,,,,,player_info,player_info team_code,INTEGER,,False,,,,,player_info,player_info -wins,INTEGER,,False,,Capped to a maximum value.,,,player_info,player_info +wins,INTEGER,,False,,Values above 2500 are replaced with 2501.,,,player_info,player_info rank,INTEGER,,False,,,,,player_info,player_info rank_type,INTEGER,,False,,,,,player_info,player_info radar_color_code,INTEGER,,False,,,,,player_info,player_info @@ -520,17 +520,17 @@ player_team_code,INTEGER,,True,,Merged from another channel. Null where no sourc round,INTEGER,,False,,,,,player_name,single_event tick,INTEGER,,False,,,,,player_name,single_event player_id,INTEGER,,False,,,,,player_name,single_event -name_new,VARCHAR,,False,,Redacted by the PII scrubber.,,,player_name,single_event -name_old,VARCHAR,,False,,Redacted by the PII scrubber.,,,player_name,single_event +name_new,VARCHAR,,False,,"Every value is replaced with the literal string ""redacted"".",,,player_name,single_event +name_old,VARCHAR,,False,,"Every value is replaced with the literal string ""redacted"".",,,player_name,single_event second,DECIMAL,,,,,,,player_name,single_event 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_name,single_event round,INTEGER,,False,,,,,player_personal,player_info player_id,INTEGER,,False,,,,,player_personal,player_info player_controller_id,INTEGER,,False,,,,,player_personal,player_info player_id_pawn,INTEGER,,False,,,,,player_personal,player_info -name,VARCHAR,,False,,Redacted by the PII scrubber.,,,player_personal,player_info -clan_tag,VARCHAR,,False,,Redacted by the PII scrubber.,,,player_personal,player_info -steam_id,VARCHAR,,False,,Redacted by the PII scrubber.,,,player_personal,player_info +name,VARCHAR,,False,,"Every value is replaced with the literal string ""redacted"".",,,player_personal,player_info +clan_tag,VARCHAR,,False,,"Every value is replaced with the literal string ""redacted"".",,,player_personal,player_info +steam_id,VARCHAR,,False,,"Replaced with a per-match alias: A, B, C and so on. The alias means nothing outside its own match.",,,player_personal,player_info is_bot,BOOLEAN,,,,,,,player_personal,player_info player_id_fixed,INTEGER,,,,,,,player_personal,player_info round,INTEGER,,False,,,,,player_sound,single_event @@ -586,7 +586,7 @@ inv_c4,INTEGER,,False,,,,,player_status,telemetry current_equipment_cost,INTEGER,,False,,,,,player_status,telemetry freezetime_end_equipment_cost,INTEGER,,False,,,,,player_status,telemetry money,INTEGER,,False,,,,,player_status,telemetry -ping,INTEGER,,False,,Redacted by the PII scrubber.,,,player_status,telemetry +ping,INTEGER,,False,,Replaced with 0.,,,player_status,telemetry round_start_equipment_cost,INTEGER,,False,,,,,player_status,telemetry zoom_level,INTEGER,,True,,,,,player_status,telemetry iron_sight_mode,INTEGER,,True,,,,,player_status,telemetry @@ -647,7 +647,7 @@ player_id,INTEGER,,False,,,,,rank_update,single_event rank_old,INTEGER,,False,,,,,rank_update,single_event rank_new,INTEGER,,False,,,,,rank_update,single_event rank_change,DECIMAL,,False,,,,,rank_update,single_event -win_count,INTEGER,,False,,Capped to a maximum value.,,,rank_update,single_event +win_count,INTEGER,,False,,Values above 2500 are replaced with 2501.,,,rank_update,single_event second,DECIMAL,,,,,,,rank_update,single_event player_id_fixed,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,rank_update,single_event player_x_pos,DECIMAL,,True,,Merged from another channel. Null where no source row matches.,,,rank_update,single_event diff --git a/docs/datascience/adx/cs2/csds/spec.md b/docs/datascience/adx/cs2/csds/spec.md index 9293e50..9c1f9dc 100644 --- a/docs/datascience/adx/cs2/csds/spec.md +++ b/docs/datascience/adx/cs2/csds/spec.md @@ -25,12 +25,21 @@ them. | --------------------- | --------------------------------------------------------------------------------------------------- | | `replay` | Written by the demo parser, straight off the game's own event stream. | | `replay_fixed` | A parser value the pipeline recomputed. The uncorrected value stays in the matching `*_raw` column. | -| `replay-capped` | A parser value clamped to a maximum. | -| `replay-redacted` | A parser value removed or replaced by the PII scrubber. | +| `replay-capped` | A parser value clamped at the top, so an unusually high number cannot single a player out. | +| `replay-redacted` | A parser value overwritten by the PII scrubber. | | `calculated` | Derived by the pipeline from the columns named under Dependents. | -| `calculated-redacted` | Derived, then removed or replaced by the PII scrubber. | +| `calculated-redacted` | Derived, then overwritten by the PII scrubber. | | `merged` | Copied in from another channel by joining on the columns named under Merge Keys. | +Redaction is not one operation, and the redacted columns are still there. Names +and chat text become the literal string `redacted`, `player_personal.steam_id` +becomes a per-match alias (`A`, `B`, `C` and so on) that means nothing outside +its own match, and `player_status.ping` becomes `0`. The rows are untouched, so +`player_chat` still tells you that somebody typed in a given round, without +telling you what they typed. There is no voice data anywhere in the data set. +The [data dictionary](./assets/csds_dictionary.csv) says which treatment each +column got. + **Dependents** names the columns a calculated column is computed from. A `channel:column` entry points at another channel, and a `meta:` or `metademo:` entry at match metadata rather than a channel. diff --git a/docs/datascience/old/README.md b/docs/datascience/old/README.md index e42e51c..4cfd847 100644 --- a/docs/datascience/old/README.md +++ b/docs/datascience/old/README.md @@ -4,12 +4,14 @@ sidebar_label: About the archive # Archive -Older versions of these pages, kept because subscribers hold data that matches -them. Nothing here describes the data set as it is published today. - -If you downloaded a revision and want to know what its columns meant at the -time, start here. If you want to know what is being published now, start at -[PureSkill.gg Data Science](/datascience/). +Older versions of these pages, kept because the retained window still contains +revisions they describe. Nothing here describes the data set as it is published +today. + +Which page you need depends on the revision, not on when you downloaded it: a +revision from 2026-07-31 is still retained, still exportable today, and still +described by the archived spec. If you want to know what is being published +now, start at [PureSkill.gg Data Science](/datascience/). ## What is in here diff --git a/docs/datascience/old/cs2/csds/README.md b/docs/datascience/old/cs2/csds/README.md index 880bcd4..e1931db 100644 --- a/docs/datascience/old/cs2/csds/README.md +++ b/docs/datascience/old/cs2/csds/README.md @@ -8,10 +8,13 @@ sidebar_label: Competitive CS2 Gameplay (archived) This is the CS2 data set page as it stood on 2024-02-24. It is internally inconsistent about how many files a match is, saying 31 above and 33 in the -glossary; 31 was the right answer at the time. Since 2026-08-04 a match is 43 -objects, 42 channels plus the index. This page is kept as a record for anyone -working with data downloaded before then. The current page is -[Competitive CS2 Gameplay](/datascience/adx/cs2/csds/). +glossary; 31 was the right answer at the time. + +It describes revisions through 2026-07-31, which are still retained and can +still be exported today, so which page you need depends on the revision rather +than on when you downloaded it. From 2026-08-04 a match is 43 objects, 42 +channels plus the index, covered by the current +[Competitive CS2 Gameplay](/datascience/adx/cs2/csds/) page. ::: diff --git a/docs/datascience/old/cs2/csds/spec.md b/docs/datascience/old/cs2/csds/spec.md index 743a6b6..b39a8bc 100644 --- a/docs/datascience/old/cs2/csds/spec.md +++ b/docs/datascience/old/cs2/csds/spec.md @@ -6,10 +6,15 @@ sidebar_label: CSDS Spec (CS2, archived) :::warning Archived page -This is the CS2 channel spec as it stood on 2024-02-24, covering 30 channels. Twelve -channels have been added since and two columns removed, so use it only to read data -downloaded before August 2026. The current spec is -[CSDS Spec](/datascience/adx/cs2/csds/spec). +This is the CS2 channel spec as it stood on 2024-02-24, covering the 30 channels +published at the time. Fourteen channels have been added since and two removed +(`item_remove` and `player_action`), leaving 42. + +Which spec you need depends on the revision, not on when you downloaded it. This +one describes revisions through 2026-07-31, which are still retained and can +still be exported today. Revisions from 2026-08-04 onward are described by the +current [CSDS Spec](/datascience/adx/cs2/csds/spec). The 2026-08-02 revision +holds a mix of both. :::