Freedom is what you do with what's been done to you

Method of estimating player skill in mouse-based games

This article presents a universal method of estimating player skill in mouse-based games. It can be used to implement anti-cheat, statistics and matchmaking.

In a nutshell

Mouse movement, like any pointing device movement, obeys the Fitts’s law:

Fitt's law


  • MT is the average time to complete the movement.
  • a and b are constants that depend on the player and movement device.
  • D is the distance from the starting point to the center of the target.
  • W is the width of the target measured along the axis of motion.

It is possible to record the gameplay and player mouse movements during the game and use nonlinear regression to determine values of a and b for each player. Lower values will indicate higher skill. After that, it will be possible to determine the distribution of values of the entire player base. Then it will be possible to assign a rank for ranges of values and implement matchmaking that will put players with a similar rank together. Also, it would be easy to spot cheaters who will have unusually low values. A system can automatically flag players with such values as cheaters and ban them from the game.

First person shooter example

Mouse aiming is one of the most important skills in first person shooter games. One of the most common types of cheats in such games is aimbot - a script that takes control of the aiming and makes the player extremely hard to defeat. This makes it important to detemine if the player is using aimbot and it can be done using the proposed method.

Here, D is the distance from the crosshair to the center of the enemy hitbox and W is the distance from the center of hitbox to the edge of it along the green line. There are, however, some important considerations. First, players do not stand still so the algorithm should take that into account. Second, it can only be applied in straightforward way to hitscan weapons. Third, the time should start from the point where enemy is visible on the screen and should take into account that several enemies can be at the screen at the same time. Therefore, the following data should be mined during each game frame:

  • Position of all players
  • View angles of all players
  • Teams of all players
  • Hitbox sizes of all players
  • Whether players are visible to each other
  • Mouse button states

So far, I haven’t seen this done in practice.