diff --git a/docs/datascience/adx/cs2/_category_.yml b/docs/datascience/adx/cs2/_category_.yml new file mode 100644 index 0000000..41847be --- /dev/null +++ b/docs/datascience/adx/cs2/_category_.yml @@ -0,0 +1,4 @@ +--- +label: CS2 Data Sets +collapsible: false +collapsed: false diff --git a/docs/datascience/adx/cs2/csds/.ipynb_checkpoints/Untitled-checkpoint.ipynb b/docs/datascience/adx/cs2/csds/.ipynb_checkpoints/Untitled-checkpoint.ipynb deleted file mode 100644 index 363fcab..0000000 --- a/docs/datascience/adx/cs2/csds/.ipynb_checkpoints/Untitled-checkpoint.ipynb +++ /dev/null @@ -1,6 +0,0 @@ -{ - "cells": [], - "metadata": {}, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/docs/datascience/adx/cs2/csds/README.md b/docs/datascience/adx/cs2/csds/README.md new file mode 100644 index 0000000..5adecea --- /dev/null +++ b/docs/datascience/adx/cs2/csds/README.md @@ -0,0 +1,393 @@ +# PureSkill.gg Competitive CS2 Gameplay + +_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/cs2/csds/Untitled.ipynb b/docs/datascience/adx/cs2/csds/Untitled.ipynb deleted file mode 100644 index 0e870b9..0000000 --- a/docs/datascience/adx/cs2/csds/Untitled.ipynb +++ /dev/null @@ -1,884 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 3, - "id": "be9002d6-c1a7-4d4e-990d-d8f7f3f5d32b", - "metadata": {}, - "outputs": [], - "source": [ - "from io import BytesIO\n", - "from gzip import GzipFile\n", - "import json\n", - "import gzip" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "52bb848f-690b-4fa5-8ed3-4636cf3cded3", - "metadata": {}, - "outputs": [], - "source": [ - "with gzip.open('csds', 'r') as fin:\n", - " data = json.loads(fin.read().decode('utf-8'))" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "6435382f-41bb-4b87-a971-a6341597a777", - "metadata": {}, - "outputs": [], - "source": [ - "channels = data['channels']" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "4db86556-55fe-40dc-b9d8-63da7027cf81", - "metadata": {}, - "outputs": [], - "source": [ - "def print_row(row):\n", - " data=['']\n", - " data.append(row['name'])\n", - " data.append(row['origin'])\n", - " data.append(', '.join(row.get('dependents',[])))\n", - " data.append(', '.join(row.get('mergeKeys',[])))\n", - " data.append('')\n", - " print('|'.join(data))\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "b93b36fa-d917-4d51-a123-a4d4a2139e6f", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "## bomb_action - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|event_type|replay|||\n", - "|player_id|replay|||\n", - "|player_id_pawn|replay|||\n", - "|site_code|replay|||\n", - "|entity_id|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "|player_x_pos|merged||player_id, tick|\n", - "|player_y_pos|merged||player_id, tick|\n", - "|player_z_pos|merged||player_id, tick|\n", - "|player_x_vel|merged||player_id, tick|\n", - "|player_y_vel|merged||player_id, tick|\n", - "|player_z_vel|merged||player_id, tick|\n", - "|player_phi_ang|merged||player_id, tick|\n", - "|player_theta_ang|merged||player_id, tick|\n", - "|player_weapon_code|merged||player_id, tick|\n", - "|player_team_code|merged||player_id, tick|\n", - "|player_tick|merged||player_id, tick|\n", - "|player_player_id|merged||player_id, tick|\n", - "\n", - "## bomb_defuse - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|event_type|replay|||\n", - "|player_id|replay|||\n", - "|has_kit|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "|player_x_pos|merged||player_id, tick|\n", - "|player_y_pos|merged||player_id, tick|\n", - "|player_z_pos|merged||player_id, tick|\n", - "|player_x_vel|merged||player_id, tick|\n", - "|player_y_vel|merged||player_id, tick|\n", - "|player_z_vel|merged||player_id, tick|\n", - "|player_phi_ang|merged||player_id, tick|\n", - "|player_theta_ang|merged||player_id, tick|\n", - "|player_weapon_code|merged||player_id, tick|\n", - "|player_team_code|merged||player_id, tick|\n", - "|player_tick|merged||player_id, tick|\n", - "|player_player_id|merged||player_id, tick|\n", - "\n", - "## bomb_state - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|event_type|replay|||\n", - "|player_id|replay|||\n", - "|site_code|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "|player_x_pos|merged||player_id, tick|\n", - "|player_y_pos|merged||player_id, tick|\n", - "|player_z_pos|merged||player_id, tick|\n", - "|player_x_vel|merged||player_id, tick|\n", - "|player_y_vel|merged||player_id, tick|\n", - "|player_z_vel|merged||player_id, tick|\n", - "|player_phi_ang|merged||player_id, tick|\n", - "|player_theta_ang|merged||player_id, tick|\n", - "|player_weapon_code|merged||player_id, tick|\n", - "|player_team_code|merged||player_id, tick|\n", - "|player_tick|merged||player_id, tick|\n", - "|player_player_id|merged||player_id, tick|\n", - "\n", - "## bot_takeover - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|player_id|replay|||\n", - "|bot_id|replay|||\n", - "|player_index|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "|player_x_pos|merged||player_id, tick|\n", - "|player_y_pos|merged||player_id, tick|\n", - "|player_z_pos|merged||player_id, tick|\n", - "|player_x_vel|merged||player_id, tick|\n", - "|player_y_vel|merged||player_id, tick|\n", - "|player_z_vel|merged||player_id, tick|\n", - "|player_phi_ang|merged||player_id, tick|\n", - "|player_theta_ang|merged||player_id, tick|\n", - "|player_weapon_code|merged||player_id, tick|\n", - "|player_team_code|merged||player_id, tick|\n", - "|player_tick|merged||player_id, tick|\n", - "|player_player_id|merged||player_id, tick|\n", - "\n", - "## grenade_state - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|event_type|replay|||\n", - "|entity_id|replay|||\n", - "|player_id|replay|||\n", - "|x_pos|replay|||\n", - "|y_pos|replay|||\n", - "|z_pos|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "|entity_id_fixed|calculated|round, entity_id, event_type, tick||\n", - "|tick_throw|calculated|round, player_id, weapon_name, tick||\n", - "|player_x_pos|merged||tick_throw, player_id|\n", - "|player_y_pos|merged||tick_throw, player_id|\n", - "|player_z_pos|merged||tick_throw, player_id|\n", - "|player_x_vel|merged||tick_throw, player_id|\n", - "|player_y_vel|merged||tick_throw, player_id|\n", - "|player_z_vel|merged||tick_throw, player_id|\n", - "|player_phi_ang|merged||tick_throw, player_id|\n", - "|player_theta_ang|merged||tick_throw, player_id|\n", - "|player_weapon_code|merged||tick_throw, player_id|\n", - "|player_team_code|merged||tick_throw, player_id|\n", - "\n", - "## header - \n", - "\n", - "|magic|replay|||\n", - "|network_protocol|replay|||\n", - "|server_name|replay|||\n", - "|client_name|replay|||\n", - "|map_name|replay|||\n", - "|game_directory|replay|||\n", - "|fullpackets_version|replay|||\n", - "|allow_clientside_entities|replay|||\n", - "|allow_clientside_particles|replay|||\n", - "|addons|replay|||\n", - "|demo_version_name|replay|||\n", - "|demo_version_guid|replay|||\n", - "|build_num|replay|||\n", - "|game|replay|||\n", - "|magic|replay|||\n", - "|protocol|replay|||\n", - "|network_protocol|replay|||\n", - "|server_name|replay|||\n", - "|client_name|replay|||\n", - "|map_name|replay|||\n", - "|game_directory|replay|||\n", - "|playback_time|replay|||\n", - "|playback_ticks|replay|||\n", - "|playback_frames|replay|||\n", - "|signon_length|replay|||\n", - "|tick_rate|calculated|playback_ticks, playback_time||\n", - "|tick_save_rate|calculated|playback_frames, playback_time||\n", - "|rushb_version|calculated|meta:metadata.rushbVersion||\n", - "|ppp_version|calculated|meta:context.version||\n", - "|match_date|calculated|meta:matchDate||\n", - "|demo_id|calculated-redacted|meta:demoId||\n", - "|sharecode|calculated-redacted|meta:sharecode||\n", - "|platform|calculated|meta:platform||\n", - "|match_type|calculated|meta:matchType||\n", - "|game|calculated|meta:game||\n", - "|second|calculated|tick, tick_rate||\n", - "|t_starters_avg_rank|calculated|is_bot, round, rank, steam_id, team_code||\n", - "|t_starters_avg_wins|calculated|is_bot, round, wins, steam_id, team_code||\n", - "|ct_starters_avg_rank|calculated|is_bot, round, rank, steam_id, team_code||\n", - "|ct_starters_avg_wins|calculated|is_bot, round, wins, steam_id, team_code||\n", - "|ct_starters_score_final|calculated|round_state:ct_score||\n", - "|t_starters_score_final|calculated|round_state:t_score||\n", - "|providence|calculated|metademo:providence||\n", - "|number_of_points|calculated|shape of all data frames||\n", - "\n", - "## item_equip - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|player_id|replay|||\n", - "|item|replay|||\n", - "|def_index|replay|||\n", - "|can_zoom|replay|||\n", - "|has_silencer|replay|||\n", - "|is_silenced|replay|||\n", - "|has_tracers|replay|||\n", - "|weapon_type_code|replay|||\n", - "|is_painted|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "|player_x_pos|merged||player_id, tick|\n", - "|player_y_pos|merged||player_id, tick|\n", - "|player_z_pos|merged||player_id, tick|\n", - "|player_x_vel|merged||player_id, tick|\n", - "|player_y_vel|merged||player_id, tick|\n", - "|player_z_vel|merged||player_id, tick|\n", - "|player_phi_ang|merged||player_id, tick|\n", - "|player_theta_ang|merged||player_id, tick|\n", - "|player_weapon_code|merged||player_id, tick|\n", - "|player_team_code|merged||player_id, tick|\n", - "|player_tick|merged||player_id, tick|\n", - "|player_player_id|merged||player_id, tick|\n", - "\n", - "## item_pickup - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|player_id|replay|||\n", - "|item|replay|||\n", - "|def_index|replay|||\n", - "|is_silent|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "|player_x_pos|merged||player_id, tick|\n", - "|player_y_pos|merged||player_id, tick|\n", - "|player_z_pos|merged||player_id, tick|\n", - "|player_x_vel|merged||player_id, tick|\n", - "|player_y_vel|merged||player_id, tick|\n", - "|player_z_vel|merged||player_id, tick|\n", - "|player_phi_ang|merged||player_id, tick|\n", - "|player_theta_ang|merged||player_id, tick|\n", - "|player_weapon_code|merged||player_id, tick|\n", - "|player_team_code|merged||player_id, tick|\n", - "|player_tick|merged||player_id, tick|\n", - "|player_player_id|merged||player_id, tick|\n", - "\n", - "## molotov_state - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|event_type|replay|||\n", - "|entity_id|replay|||\n", - "|x_pos|replay|||\n", - "|y_pos|replay|||\n", - "|z_pos|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|entity_id_fixed|calculated|round, entity_id, event_type, tick||\n", - "|burn_duration|calculated|second, entity_id_fixed, event_type||\n", - "|was_extinguished_by_smoke|calculated|second, entity_id_fixed, event_type, burn_duration||\n", - "|extinguisher_id|calculated|second, entity_id_fixed, event_type, x_pos, y_pos, z_pos, player_id||\n", - "|extinguisher_id_fixed|calculated|second, entity_id, entity_id_fixed, event_type, x_pos, y_pos, z_pos, player_id_fixed||\n", - "|smoke_entity_id|calculated|second, entity_id, entity_id_fixed, event_type, x_pos, y_pos, z_pos||\n", - "|was_extinguished_by_thrown_smoke|calculated|second, entity_id, entity_id_fixed, event_type, x_pos, y_pos, z_pos||\n", - "|player_id|calculated|event_type, second, round||\n", - "|player_id_fixed|calculated|event_type, second, round||\n", - "|tick_throw|calculated|event_type, second, round||\n", - "|player_x_pos|merged||tick_throw, player_id|\n", - "|player_y_pos|merged||tick_throw, player_id|\n", - "|player_z_pos|merged||tick_throw, player_id|\n", - "|player_x_vel|merged||tick_throw, player_id|\n", - "|player_y_vel|merged||tick_throw, player_id|\n", - "|player_z_vel|merged||tick_throw, player_id|\n", - "|player_phi_ang|merged||tick_throw, player_id|\n", - "|player_theta_ang|merged||tick_throw, player_id|\n", - "|player_weapon_code|merged||tick_throw, player_id|\n", - "|player_team_code|merged||tick_throw, player_id|\n", - "\n", - "## other_death - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|other_type|replay|||\n", - "|attacker_id|replay|||\n", - "|weapon_name|replay|||\n", - "|is_headshot|replay|||\n", - "|penetration_amount|replay|||\n", - "|is_through_smoke|replay|||\n", - "|is_attacker_blind|replay|||\n", - "|is_noscope|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|attacker_id_fixed|merged||attacker_id, round, steam_id|\n", - "|attacker_x_pos|merged||attacker_id, tick|\n", - "|attacker_y_pos|merged||attacker_id, tick|\n", - "|attacker_z_pos|merged||attacker_id, tick|\n", - "|attacker_x_vel|merged||attacker_id, tick|\n", - "|attacker_y_vel|merged||attacker_id, tick|\n", - "|attacker_z_vel|merged||attacker_id, tick|\n", - "|attacker_phi_ang|merged||attacker_id, tick|\n", - "|attacker_theta_ang|merged||attacker_id, tick|\n", - "|attacker_weapon_code|merged||attacker_id, tick|\n", - "|attacker_team_code|merged||attacker_id, tick|\n", - "|attacker_tick|merged||attacker_id, tick|\n", - "|attacker_player_id|merged||attacker_id, tick|\n", - "\n", - "## player_action - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|event_type|replay|||\n", - "|player_id|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "|player_x_pos|merged||player_id, tick|\n", - "|player_y_pos|merged||player_id, tick|\n", - "|player_z_pos|merged||player_id, tick|\n", - "|player_x_vel|merged||player_id, tick|\n", - "|player_y_vel|merged||player_id, tick|\n", - "|player_z_vel|merged||player_id, tick|\n", - "|player_phi_ang|merged||player_id, tick|\n", - "|player_theta_ang|merged||player_id, tick|\n", - "|player_weapon_code|merged||player_id, tick|\n", - "|player_team_code|merged||player_id, tick|\n", - "|player_tick|merged||player_id, tick|\n", - "|player_player_id|merged||player_id, tick|\n", - "\n", - "## player_blind - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|player_id|replay|||\n", - "|entity_id|replay|||\n", - "|attacker_id|replay|||\n", - "|blind_duration|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "|attacker_id_fixed|merged||attacker_id, round, steam_id|\n", - "|player_x_pos|merged||player_id, tick|\n", - "|player_y_pos|merged||player_id, tick|\n", - "|player_z_pos|merged||player_id, tick|\n", - "|player_x_vel|merged||player_id, tick|\n", - "|player_y_vel|merged||player_id, tick|\n", - "|player_z_vel|merged||player_id, tick|\n", - "|player_phi_ang|merged||player_id, tick|\n", - "|player_theta_ang|merged||player_id, tick|\n", - "|player_weapon_code|merged||player_id, tick|\n", - "|player_team_code|merged||player_id, tick|\n", - "|player_tick|merged||player_id, tick|\n", - "|player_player_id|merged||player_id, tick|\n", - "|attacker_x_pos|merged||attacker_id, tick|\n", - "|attacker_y_pos|merged||attacker_id, tick|\n", - "|attacker_z_pos|merged||attacker_id, tick|\n", - "|attacker_x_vel|merged||attacker_id, tick|\n", - "|attacker_y_vel|merged||attacker_id, tick|\n", - "|attacker_z_vel|merged||attacker_id, tick|\n", - "|attacker_phi_ang|merged||attacker_id, tick|\n", - "|attacker_theta_ang|merged||attacker_id, tick|\n", - "|attacker_weapon_code|merged||attacker_id, tick|\n", - "|attacker_team_code|merged||attacker_id, tick|\n", - "|attacker_tick|merged||attacker_id, tick|\n", - "|attacker_player_id|merged||attacker_id, tick|\n", - "\n", - "## player_death - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|player_id|replay|||\n", - "|attacker_id|replay|||\n", - "|assister_id|replay|||\n", - "|weapon_name|replay|||\n", - "|is_headshot|replay|||\n", - "|penetration_amount|replay|||\n", - "|has_replay|replay|||\n", - "|is_flash_assist|replay|||\n", - "|is_through_smoke|replay|||\n", - "|is_attacker_blind|replay|||\n", - "|is_noscope|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "|attacker_id_fixed|merged||attacker_id, round, steam_id|\n", - "|assister_id_fixed|merged||assister_id, round, steam_id|\n", - "|player_x_pos|merged||player_id, tick|\n", - "|player_y_pos|merged||player_id, tick|\n", - "|player_z_pos|merged||player_id, tick|\n", - "|player_x_vel|merged||player_id, tick|\n", - "|player_y_vel|merged||player_id, tick|\n", - "|player_z_vel|merged||player_id, tick|\n", - "|player_phi_ang|merged||player_id, tick|\n", - "|player_theta_ang|merged||player_id, tick|\n", - "|player_weapon_code|merged||player_id, tick|\n", - "|player_team_code|merged||player_id, tick|\n", - "|player_tick|merged||player_id, tick|\n", - "|player_player_id|merged||player_id, tick|\n", - "|attacker_x_pos|merged||attacker_id, tick|\n", - "|attacker_y_pos|merged||attacker_id, tick|\n", - "|attacker_z_pos|merged||attacker_id, tick|\n", - "|attacker_x_vel|merged||attacker_id, tick|\n", - "|attacker_y_vel|merged||attacker_id, tick|\n", - "|attacker_z_vel|merged||attacker_id, tick|\n", - "|attacker_phi_ang|merged||attacker_id, tick|\n", - "|attacker_theta_ang|merged||attacker_id, tick|\n", - "|attacker_weapon_code|merged||attacker_id, tick|\n", - "|attacker_team_code|merged||attacker_id, tick|\n", - "|attacker_tick|merged||attacker_id, tick|\n", - "|attacker_player_id|merged||attacker_id, tick|\n", - "|assister_x_pos|merged||assister_id, tick|\n", - "|assister_y_pos|merged||assister_id, tick|\n", - "|assister_z_pos|merged||assister_id, tick|\n", - "|assister_x_vel|merged||assister_id, tick|\n", - "|assister_y_vel|merged||assister_id, tick|\n", - "|assister_z_vel|merged||assister_id, tick|\n", - "|assister_phi_ang|merged||assister_id, tick|\n", - "|assister_theta_ang|merged||assister_id, tick|\n", - "|assister_weapon_code|merged||assister_id, tick|\n", - "|assister_team_code|merged||assister_id, tick|\n", - "|assister_tick|merged||assister_id, tick|\n", - "|assister_player_id|merged||assister_id, tick|\n", - "\n", - "## player_disconnect - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|player_id|replay|||\n", - "|disconnect_reason|replay|||\n", - "|is_bot|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "\n", - "## player_footstep - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|player_id|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "\n", - "## player_hurt - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|player_id|replay|||\n", - "|attacker_id|replay|||\n", - "|health|replay|||\n", - "|armor|replay|||\n", - "|weapon_name|replay|||\n", - "|health_removed|replay|||\n", - "|armor_removed|replay|||\n", - "|hit_box_code|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "|attacker_id_fixed|merged||attacker_id, round, steam_id|\n", - "|player_x_pos|merged||player_id, tick|\n", - "|player_y_pos|merged||player_id, tick|\n", - "|player_z_pos|merged||player_id, tick|\n", - "|player_x_vel|merged||player_id, tick|\n", - "|player_y_vel|merged||player_id, tick|\n", - "|player_z_vel|merged||player_id, tick|\n", - "|player_phi_ang|merged||player_id, tick|\n", - "|player_theta_ang|merged||player_id, tick|\n", - "|player_weapon_code|merged||player_id, tick|\n", - "|player_team_code|merged||player_id, tick|\n", - "|player_tick|merged||player_id, tick|\n", - "|player_player_id|merged||player_id, tick|\n", - "|attacker_x_pos|merged||attacker_id, tick|\n", - "|attacker_y_pos|merged||attacker_id, tick|\n", - "|attacker_z_pos|merged||attacker_id, tick|\n", - "|attacker_x_vel|merged||attacker_id, tick|\n", - "|attacker_y_vel|merged||attacker_id, tick|\n", - "|attacker_z_vel|merged||attacker_id, tick|\n", - "|attacker_phi_ang|merged||attacker_id, tick|\n", - "|attacker_theta_ang|merged||attacker_id, tick|\n", - "|attacker_weapon_code|merged||attacker_id, tick|\n", - "|attacker_team_code|merged||attacker_id, tick|\n", - "|attacker_tick|merged||attacker_id, tick|\n", - "|attacker_player_id|merged||attacker_id, tick|\n", - "|effective_health_removed|calculated|player_id, round, health||\n", - "\n", - "## player_info - \n", - "\n", - "|round|replay|||\n", - "|tick|replay-deleted|||\n", - "|player_id|replay|||\n", - "|team_code|replay|||\n", - "|wins|replay-capped|||\n", - "|rank|replay|||\n", - "|radar_color_code|replay|||\n", - "|second|calculated-deleted|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "|rank_raw|calculated|player_info:rank||\n", - "|rank_platform|calculated|player_personal:rank||\n", - "\n", - "## player_name - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|player_id|replay|||\n", - "|name_new|replay-redacted|||\n", - "|name_old|replay-redacted|||\n", - "|second|calculated|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "\n", - "## player_personal - \n", - "\n", - "|round|replay|||\n", - "|tick|replay-deleted|||\n", - "|player_id|replay|||\n", - "|player_controller_id|replay|||\n", - "|player_id_pawn|replay|||\n", - "|name|replay-redacted|||\n", - "|clan_tag|replay-redacted|||\n", - "|steam_id|replay-redacted|||\n", - "|second|calculated-deleted|tick, tick_rate||\n", - "|is_bot|calculated|steam_id||\n", - "|player_id_fixed|calculated|steam_id, is_bot||\n", - "\n", - "## player_spawn - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|player_id|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "|player_x_pos|merged||player_id, tick|\n", - "|player_y_pos|merged||player_id, tick|\n", - "|player_z_pos|merged||player_id, tick|\n", - "|player_x_vel|merged||player_id, tick|\n", - "|player_y_vel|merged||player_id, tick|\n", - "|player_z_vel|merged||player_id, tick|\n", - "|player_phi_ang|merged||player_id, tick|\n", - "|player_theta_ang|merged||player_id, tick|\n", - "|player_weapon_code|merged||player_id, tick|\n", - "|player_team_code|merged||player_id, tick|\n", - "|player_tick|merged||player_id, tick|\n", - "|player_player_id|merged||player_id, tick|\n", - "\n", - "## player_status - \n", - "\n", - "|tick|replay|||\n", - "|round|replay|||\n", - "|player_id|replay|||\n", - "|player_controller_id|replay|||\n", - "|armor|replay|||\n", - "|health|replay|||\n", - "|place_name|replay|||\n", - "|inv_primary|replay|||\n", - "|inv_secondary|replay|||\n", - "|inv_flashbang|replay|||\n", - "|inv_taser|replay|||\n", - "|inv_hegrenade|replay|||\n", - "|inv_smokegrenade|replay|||\n", - "|inv_molotov|replay|||\n", - "|inv_decoy|replay|||\n", - "|inv_incgrenade|replay|||\n", - "|inv_c4|replay|||\n", - "|current_equipment_cost|replay|||\n", - "|freezetime_end_equipment_cost|replay|||\n", - "|money|replay|||\n", - "|ping|replay-redacted|||\n", - "|round_start_equipment_cost|replay|||\n", - "|zoom_level|replay|||\n", - "|iron_sight_mode|replay|||\n", - "|burst_mode|replay|||\n", - "|is_silenced|replay|||\n", - "|reload_visually_complete|replay|||\n", - "|weapon_mode|replay|||\n", - "|flash_duration|replay|||\n", - "|flash_max_alpha|replay|||\n", - "|has_c4|replay|||\n", - "|has_defuser|replay|||\n", - "|has_helmet|replay|||\n", - "|is_defusing|replay|||\n", - "|is_fake_player|replay|||\n", - "|is_in_bomb_zone|replay|||\n", - "|is_in_buy_zone|replay|||\n", - "|is_scoped|replay|||\n", - "|is_spotted|replay|||\n", - "|is_walking|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "|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||\n", - "\n", - "## player_vector - \n", - "\n", - "|tick|replay|||\n", - "|round|replay|||\n", - "|player_id|replay|||\n", - "|x_pos|replay|||\n", - "|y_pos|replay|||\n", - "|z_pos|replay|||\n", - "|x_aimpunch|replay|||\n", - "|y_aimpunch|replay|||\n", - "|current_ammo|replay|||\n", - "|weapon_code|replay|||\n", - "|inaccuracy|replay|||\n", - "|last_shot_time|replay|||\n", - "|recoil_index|replay|||\n", - "|phi_ang|replay|||\n", - "|theta_ang|replay|||\n", - "|is_ducked|replay|||\n", - "|is_ducking|replay|||\n", - "|duck_amount|replay|||\n", - "|duck_speed|replay|||\n", - "|fall_velocity|replay|||\n", - "|view_punch_angle_tick|replay|||\n", - "|aim_punch_angle_vel_x|replay|||\n", - "|aim_punch_angle_vel_y|replay|||\n", - "|aim_punch_angle_vel_z|replay|||\n", - "|is_rescuing|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "|team_code|merged||round, player_id|\n", - "|theta_vel|calculated|second, player_id, theta||\n", - "|phi_vel|calculated|second, player_id, phi||\n", - "|ang_vel|calculated|phi_vel, theta_vel||\n", - "|x_vel|calculated|second, x_pos||\n", - "|y_vel|calculated|second, y_pos||\n", - "|z_vel|calculated|second, z_pos||\n", - "|x_vel|calculated|second, x_pos||\n", - "|y_vel|calculated|second, y_pos||\n", - "|z_vel|calculated|second, z_pos||\n", - "|x_vel|calculated|second, x_pos||\n", - "|y_vel|calculated|second, y_pos||\n", - "|z_vel|calculated|second, z_pos||\n", - "|x_vel|calculated|second, x_pos||\n", - "|y_vel|calculated|second, y_pos||\n", - "|z_vel|calculated|second, z_pos||\n", - "|x_vel|calculated|second, x_pos||\n", - "|y_vel|calculated|second, y_pos||\n", - "|z_vel|calculated|second, z_pos||\n", - "|x_vel|calculated|second, x_pos||\n", - "|y_vel|calculated|second, y_pos||\n", - "|z_vel|calculated|second, z_pos||\n", - "|x_vel|calculated|second, x_pos||\n", - "|y_vel|calculated|second, y_pos||\n", - "|z_vel|calculated|second, z_pos||\n", - "|x_vel|calculated|second, x_pos||\n", - "|y_vel|calculated|second, y_pos||\n", - "|z_vel|calculated|second, z_pos||\n", - "|x_vel|calculated|second, x_pos||\n", - "|y_vel|calculated|second, y_pos||\n", - "|z_vel|calculated|second, z_pos||\n", - "|x_vel|calculated|second, x_pos||\n", - "|y_vel|calculated|second, y_pos||\n", - "|z_vel|calculated|second, z_pos||\n", - "|speed_2d|calculated|x_vel, y_vel||\n", - "|movement_angle|calculated|second, x_vel, y_vel||\n", - "|movement_angle_diff|calculated|second, speed_2d, theta_ang, movement_angle||\n", - "\n", - "## round_end - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|winner_team_code|replay|||\n", - "|win_reason_code|replay|||\n", - "|win_reason_message|replay|||\n", - "|legacy_code|replay|||\n", - "|player_count|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "\n", - "## round_mvp - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|player_id|replay|||\n", - "|mvp_reason_code|replay|||\n", - "|music_kit_mvps|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "\n", - "## round_start - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|time_limit|replay|||\n", - "|frag_limit|replay|||\n", - "|objective|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "\n", - "## round_state - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|event_type|replay|||\n", - "|t_score|replay_fixed|||\n", - "|ct_score|replay_fixed|||\n", - "|t_score_raw|replay|||\n", - "|ct_score_raw|replay|||\n", - "|phase|replay|||\n", - "|is_warmup|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "\n", - "## tick - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|previous_phase|calculated|event_type, second||\n", - "|second_since_previous_phase|calculated|second||\n", - "\n", - "## weapon_action - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|event_type|replay|||\n", - "|player_id|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "|player_x_pos|merged||player_id, tick|\n", - "|player_y_pos|merged||player_id, tick|\n", - "|player_z_pos|merged||player_id, tick|\n", - "|player_x_vel|merged||player_id, tick|\n", - "|player_y_vel|merged||player_id, tick|\n", - "|player_z_vel|merged||player_id, tick|\n", - "|player_phi_ang|merged||player_id, tick|\n", - "|player_theta_ang|merged||player_id, tick|\n", - "|player_weapon_code|merged||player_id, tick|\n", - "|player_team_code|merged||player_id, tick|\n", - "|player_tick|merged||player_id, tick|\n", - "|player_player_id|merged||player_id, tick|\n", - "\n", - "## weapon_fire - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|player_id|replay|||\n", - "|player_id_pawn|replay|||\n", - "|weapon_name|replay|||\n", - "|is_silenced|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "|player_x_pos|merged||player_id, tick|\n", - "|player_y_pos|merged||player_id, tick|\n", - "|player_z_pos|merged||player_id, tick|\n", - "|player_x_vel|merged||player_id, tick|\n", - "|player_y_vel|merged||player_id, tick|\n", - "|player_z_vel|merged||player_id, tick|\n", - "|player_phi_ang|merged||player_id, tick|\n", - "|player_theta_ang|merged||player_id, tick|\n", - "|player_weapon_code|merged||player_id, tick|\n", - "|player_team_code|merged||player_id, tick|\n", - "|player_tick|merged||player_id, tick|\n", - "|player_player_id|merged||player_id, tick|\n", - "|missed_molotov|calculated|event_type-molotov_state, second-molotov_state||\n", - "\n", - "## item_remove - \n", - "\n", - "|round|replay|||\n", - "|tick|replay|||\n", - "|player_id|replay|||\n", - "|item|replay|||\n", - "|def_index|replay|||\n", - "|second|calculated|tick, tick_rate||\n", - "|player_id_fixed|merged||player_id, round, steam_id|\n", - "|player_x_pos|merged||player_id, tick|\n", - "|player_y_pos|merged||player_id, tick|\n", - "|player_z_pos|merged||player_id, tick|\n", - "|player_x_vel|merged||player_id, tick|\n", - "|player_y_vel|merged||player_id, tick|\n", - "|player_z_vel|merged||player_id, tick|\n", - "|player_phi_ang|merged||player_id, tick|\n", - "|player_theta_ang|merged||player_id, tick|\n", - "|player_weapon_code|merged||player_id, tick|\n", - "|player_team_code|merged||player_id, tick|\n", - "|player_tick|merged||player_id, tick|\n", - "|player_player_id|merged||player_id, tick|\n", - "\n" - ] - } - ], - "source": [ - "for channel in channels:\n", - " print(\"## \"+channel['channel']+' - ')\n", - " print()\n", - " for column in channel['columns']:\n", - " print_row(column)\n", - " print()" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "7ee5100b-8432-4e23-956c-60e9270e2a68", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "''" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "'.'.join([])\n", - "# Events that trigger this channel: bomb_abort_plant, bomb_begin_plant, bomb_dropped, bomb_pickup, player_given_c4\n", - "\n", - "# | Col Name | Origin | Dependents | Merge Keys |\n", - "# | ------------------ | ---------- | --------------- | -------------------------- |\n", - "# | round | replay | none | none |\n", - "# | tick | replay | none | none |\n", - "# | event_type | replay | none | none |\n", - "# | player_id | replay | none | none |\n", - "# | site_code | replay | none | none |\n", - "# | entity_id | replay | none | none |\n", - "# | second | calculated | tick, tick_rate | none |\n", - "# | player_id_fixed | merged | none | player_id, round, steam_id |\n", - "# | player_x_pos | merged | none | player_id, tick |\n", - "# | player_y_pos | merged | none | player_id, tick |\n", - "# | player_z_pos | merged | none | player_id, tick |\n", - "# | player_x_vel | merged | none | player_id, tick |\n", - "# | player_y_vel | merged | none | player_id, tick |\n", - "# | player_z_vel | merged | none | player_id, tick |\n", - "# | player_phi_ang | merged | none | player_id, tick |\n", - "# | player_theta_ang | merged | none | player_id, tick |\n", - "# | player_weapon_code | merged | none | player_id, tick |\n", - "# | player_team_code | merged | none | player_id, tick |\n", - "# | player_tick | merged | none | player_id, tick |\n", - "# | player_player_id | merged | none | player_id, tick |" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cf351e7d-32bc-4899-a8b5-ffd04d589844", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.2" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/docs/datascience/adx/cs2/csds/_category_.yml b/docs/datascience/adx/cs2/csds/_category_.yml new file mode 100644 index 0000000..acb6a00 --- /dev/null +++ b/docs/datascience/adx/cs2/csds/_category_.yml @@ -0,0 +1,4 @@ +--- +label: Competitive Gameplay +collapsible: true +collapsed: false diff --git a/docs/datascience/adx/cs2/csds/csds b/docs/datascience/adx/cs2/csds/csds deleted file mode 100644 index 91ec364..0000000 Binary files a/docs/datascience/adx/cs2/csds/csds and /dev/null differ diff --git a/docs/datascience/adx/cs2/csds/spec.md b/docs/datascience/adx/cs2/csds/spec.md new file mode 100644 index 0000000..b0f48a5 --- /dev/null +++ b/docs/datascience/adx/cs2/csds/spec.md @@ -0,0 +1,860 @@ +# 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/adx/csgo/_category_.yml b/docs/datascience/adx/csgo/_category_.yml index f020012..690e59a 100644 --- a/docs/datascience/adx/csgo/_category_.yml +++ b/docs/datascience/adx/csgo/_category_.yml @@ -1,4 +1,4 @@ --- label: CS:GO Data Sets -collapsible: false -collapsed: false +collapsible: true +collapsed: true