Developer Diary - Game Stats
In the next release we will be adding the capacity for game servers to send back statistics for analysis by the development team. This is one of the most important features that we have ever added to MBII. Up until now all design decisions and feedback we have had has come from anecdotal evidence and different people often disagree wildly. Gathering statistics will allow these discussions to be data informed rather than relying on different people's often irreconcilable points of view.
To that end, with the next release of MBII libcurl will be a required component for server hosts. For windows users this library will be supplied, pre-packaged in the usual way either via launcher or the manual installations. For Linux server hosts the 32bit libcurl library will need be installed or the game will not load.
What data is being gathered?
Whilst this will be an ever evolving component of MBII we are starting off by gathering the readily accessible but most meaningful data. This is the data which was quick to implement but will give us the biggest capability when it comes assisting decision making in the short term. As time goes on extra pieces of information will be gathered, which could be more of the generic data as the first release is, or highly targeted data to assist with answering specific questions.
The first release will gather the following information:
For each Game:
- Server Name/IP Address
- Game Mode
- Game Duration
- Winning Team
- Are Teams Swapped?
- MBII Version
- GameStats Version
- Game Date and Time
- Progressive Siege Area
- List of Kills (The specific data for this is specified in the "For each Kill section")
- List of Players (The specific data for this is specified in the "For each Player section")
- Client Slot Killed
- Client Slot Killed By
- Client Slot Assisted By
- Time between Assist Damage Dealt and Death
- Location of dead Player
- Location of killer Player
- Location of Assisting Player
- Means of Death
- Means of Assist
- Client Slot
- Player Abilities
- Player Class
What data is not being gathered?
Whilst it is impossible to list every piece of information that is not being gathered, hopefully the following list will show the types of data that are not being gathered and will never be added to the game stats we do gather. These are:
- Any information from the client. All data is gathered from the servers. Only dedicated servers will send data (Where g_dedicated is not 0) - local games will not send data back.
- Any personal information that the server sees - including but not limited to: Player Names, Player IP addresses, Player Scores, any information that could be used to identify a given player.
Analyzing the Data
For the first release we will be looking to analyse the data in two ways. Firstly for game play design and secondly to provide information back to level designers.
From the information gathered level designers will be able to access heat maps for each map built into MBII. A separate heat map will be available for kills, deaths and assists and level designers will be able to access these either at the level for individual games, or for all games played on that individual map. The sort of conclusions that might be drawn from this are:
- Are players generally being killed before they get too close to the objective?
- Are players being killed in an unanticipated place?
- Are there places which are not intended to be reachable which can be exploited for kills?
Gameplay statistics are useful in a huge variety of ways, and how we can analyse the data effectively will be an on going learning activity for us. As a starting point we have reports written which will answer a few basic questions.
- What is the relative popularity of the classes?
- Which abilities are most commonly chosen for each class? At what level are they taken?
- Which builds are very commonly chosen?
- Which weapons are getting the most kills?
- Which weapons are getting the most assists?
Here is what our statistics from a few beta sessions look like - try not to pay attention to the numbers too much as this is a highly skewed group who would have been testing specific other things working their way through development. As an example of how useful the statistics are, you could probably work out which classes they have been doing extra testing on...
All this new functionality requires use of a third party library - in this case we are using libcurl to perform the network functionality. If you are a Windows server owner or a player self hosting on Windows then the required library will be provided by launcher in the flavor of libcurl.dll. For Linux server owners (And anyone self hosting on linux via OpenJK) you will need to install the i386 version of curl in order to start a game.
For Ubuntu/Debian systems:
sudo apt-get install curl:i386
For Older Ubuntu (At least 16.04 and Prior)/Debian
sudo apt-get install libcurl3:i386
For CentOS systems:
sudo yum install libcurl.i686
If this library is not available the following errors will appear in the console output:
Sys_LoadDll(<homepath>/GameData/MBIITest/jampgamei386.so) failed: "libcurl.so.4: cannot open shared object file: No such file or directory" Sys_LoadDll(<executable>/MBII/jampgamei386.so) failed: "<executable>/MBII/jampgamei386.so: cannot open shared object file: Not a directory" Sys_Error: Sys_LoadDll (jampgame) failed dlopen() completely!