One or two cookies are stored for analysis.

David Buckley

Experiments » Automatic Player Modelling Using Hardware Input

Aim

This research hopes to predict interesting features about a player based only on their interactions with a mouse and keyboard to a first-person shooter. Such a model, which could predict skill, preference or emotion, would be of use over different games where inputs are similar, and provide insight into how players interact with the game.

Description

How the experiment was prepared and conducted

Players were asked to play several game sessions and provide feedback in order to construct models of players. Games were played on Red Eclipse, an open-source first-person shooter, for which a tutorial was provided.

Each game, slowed down to 80% regular speed, lasted 3 minutes, using a variety of bot difficulties and maps. The minimum and maximum bot difficulties were set one of six non-overlapping ranges of 10 from 40 to 100, e.g. 40 - 50, 50 - 60 and 60 - 70. The map was set to one of the following:

Instrumentation

The game was instrumented in order to produce a log file for each game played. A single log file consists of a header, series of game events and footer. The first of these, the header, contains meta information about the game and player, for instance their user name and what map they are playing on. The footer then consists of the final map time and the scoreboard for the game.

An example log file can be found here. A full description of game instrumentation or the modified source code itself may be added at a later date.

Publications

Information

Data

The data accumulated from the experiment and the associated python classes.

Python Classes

Python Data Files

Using the data

The data files are in Python, and assume a familiarity with this language. However, to get people started, some basic examples of the files in use have been listed here:

Load game files
Assuming games unzipped to datadir
> from game import loadGames
> games = loadGames('datadir', True)
Load user files
Assuming users saved in datadir
> from game import loadUsers
> users = loadUsers('datadir/users')
Find users who didn't play the map 'wet'
> wetGames = [x for x in games if x.mapName == 'wet']
> playedWet = set([x.userId for x in wetGames])
> userIds = set([x.userId for x in users])
// The list of users that didn't play the map wet.
> [x for x in users if x.userId in (userIds - playedWet)]
Count games for each user
> userIds = [x.userId for x in games]
> from collections import Counter
> gamesPlayed = Counter(userIds)
// Print the number of games played by user 0
> gamesPlayed[0]