This document briefly describes the telemetry system to be used by Crysis 2 MP. The system is based on the IGameStatistics module. It captures transcripts of the game to an XML file which is uploaded to a central server. Groups of files are later analyzed both by offline tools and web based tools, to provide data such as heat maps and Excel based spreadsheets showing correlation of game events, frequency, or whatever else can be data mined.
The telemetry described here would not be used for player accessible stats, just for development and marketing purposes. If the telemetry servers were taken down, the user would be none the wiser.
Network platforms like XBox Live, Windows Live and PSN provide stats storage and leader boards for players. If you want to access from an external website then we would have to investigate what level of data we can transfer out from those services. It is likely to be very little or nothing. In that case, it could be done using this telemetry solution, and could easily use the same system and the same servers.
The server in a multiplayer game has several statistics hooks both in its C++ and Lua code. These hooks record events and the parameters of those events. For each player it also captures state information, including the players initial loadout (perks and weapons). Currently implemented in C2MP are:
- Weapon load out.
- Weapons: shots fired, fire mode changed, weapon switched.
- Perks load out.
- Damage done to other players, and how it was done.
- Damage taken from other players, and how it was done.
- Kills made against other players.
- Deaths caused by other players.
- Suit mode change events.
- Player position and view direction information.
- Player health.
- Game state information, map, gamemode, play time, etc.
- Platform of server (and potentially each player).
From this set of captured stats, it is possible to data mine information on weapon usage (how long each weapon is equipped for, how much damage was done per weapon), weapon accuracy (shots fired vs shots doing damage) and to correlate events against state, e.g deaths caused against perks currently equipped, or against the current weapon etc.
Technical telemetry is also captured, the following are examples of metrics we currently capture:
- Bandwidth used by session.
- Average FPS.
- Code execution triggers (this code was executed).
We currently upload game play telemetry from the server at the end of a game session to a centralized HTTP server on the network. This server stores the XML output from the game allowing us the developers to run our analysis tools on a wide array of captured data. The server runs on Linux and is based on the Apache web server. It uses PHP and Python scripts to process the telemetry files into session pages showing useful information. Currently it doesn't do any processing of game play stats, but the system and the data is present and adding this should not present a challenge.
Telemetry sending can be enabled or disabled using the g_telemetry_enabled CVar. This allows telemetry sending to be disabled for bandwidth tests (alternatively, tools can be configured to ignore traffic heading to the telemetry server rather than other game clients).
The telemetry is submitted to the server via the ITelemetryCollector interface, which uses CryNetwork's ICryTelemetry interface to talk to the server.
Telemetry files can also be recorded to the local disk. This behavior is controlled by the CVar g_telemetry_transaction_recording. By default it is set to only log to disk when the server is unreachable.
The stats analysis tool is a .NET application which loads all telemetry files in a chosen directory. It displays player positions and other player events at the location they occurred on a minimap of the level. It collates all events from all files for that level allowing visual inspection of event clusters. The display can be switched to a heat map style view for any event. This tool will be used to analyze the files uploaded to the central telemetry server, or locally captured files.
Excel integration and data mining
Alongside the StatTool, there is a suite of data processing scripts written in XQL. These scripts use an XQL interpreter (we are currently using Saxon) to process the XML files and output the results of its processing to another XML file which is loaded and displayed by Excel in a purpose made spreadsheet which goes with the script. These script/spreadsheet pairs are relatively quick to write and can provide answers to questions that hadn't been thought of when the telemetry was initially captured (retrospective data mining). Currently in C2MP a set of a basic script/spreadsheet pairs is used to show weapon usage and correlation of kills against those attributes.