Development Update 16

Weeks are passing like crazy! We have been stabilizing and fixing the version. We also added missing mage animations, more cloaks and in general better progression. You can check the gameplay here of all the classes here:

This week, we would like to talk about an important aspect of any player versus player game: matchmaking. This will be a more technical and detailed explaination of our matchmaking system and why we chose to do it this way.

A good matchmaking algorithm will ensure:

  • create a good match, i.e. the players are close to skill so the match will be interesting
  • the match will be found fast enough, i.e. long queue times are very undesired effect
  • will take into account player’s class (so we don’t match two healers in the same 2v2 team)
  • will allow players to play the game even if there are not enough actual players around, i.e. will spawn interesting AIs to play against

These criteria are often opposing each other. For example, waiting longer for a match will result in a better match between players but players generally dislike waiting in queue for more than a minute or two. We tried to balance our matchmaking algorithm taking those factors into account.

Each player’s skill is measured with his matchmaking rating which is hidden for the player. You start with 1500 rating and gain rating when winning and lose it when dropped. We are using a modified chess ELO rating formula for amount of points won. This ensures that winning against a better player awards you more points than winning against a player with lower rating. We added additional key features:

  • when playing in a specific bracket, like 2v2, team’s rating is the average rating from all player’s in the team. Points are awarded based on that rating.
  • we added hidden award points. You start with 300 of them. On each win, you gain more points until those are depleted. This grants you feeling of progression as your rating grows even if you lose as many matches as you have won.
  • when joining in party, your average rating is a bit higher as you typically coordinate via voice

As player (or a party of players) enters a queue, we add him to the list as a matchmaking cluster. Then each matchmaking update, we make the following update every 10 seconds:

  1. Increase the range of cluster by 60, up to a maximum range of 300 (we do not allow matches that differ by more than 300 rating).
  2. For each cluster, find all clusters in its range.
  3. If the wait time of cluster is longer than the one defined by AI matchmaking, fill possible empty spots with AI players.
  4. If there are enough clusters in range to make a match, find the best possible distribution of clusters to team A and team B (if possible). Also take class distribution into account here.
  5. If possible, start the dedicated server and tag player to join the match.

As the main problem with multiplayer games is that there might not be enough players available for matches, we implemented a lot of systems to remedy that:

  • at low MMR (mostly low levels of characters) we automatically fill the empty spots with AI players. We spent some time to make them intelligent to use most abilities. They can also play at different difficulty levels which is controlled by their rating. As your rating is increased, the time you need to stay in queue to get matched against AI players increases until AIs are no longer able to fill the spots as player’s simply outperform them (we did not want to scale their damage, we always want AIs to play the same game as you).
  •  we dynamically lock brackets if not enough players are online. For example, if only 10 players are online, only 2v2 bracket is avaiable and as the number of players is increased to 10, 3v3 also becomes available.
  • we allow to dynamically merged ranked and unranked bracket. This means that if you play ranked game the system will still use matchmaking rating to find a match (possibly against a player joining unranked game) but will also update ranked rating after the end of match. Ranked matches display your ranked rating and are able to grant better awards. This feature is enabled when there are not enough players queueing ranked bracket.
  • we allow to requeue from withing the game after you have won/lost. This decreases the time spent in lobby and increases match frequency.

Some of those parameters have been optimized while playtesting. To get the base statistics we also have done a few matchmaking tests. We have been mostly interested in how the system performs when the number of players is low. Here are statistics for 2v2 bracket if one player with Gaussian distributed rating (mean 1800, spread 300) joins the queue every K seconds (without AI matchmaking):

  • Players that join every 35 seconds will wait 230 seconds on average (spread 140 seconds). As complete match typically lasts 3 minutes, this means approximatelly 10 active players. In this scenario, a lot of players would be partially matched versus AI.
  • Player that joins every 10 seconds will wait 120 seconds on average (spread 100 seconds). As complete match typically lasts 3 minutes, this means approximatelly 30 active players. Low ranked players would be matched versus AI.
  • Players that joins every second will wait approximatelly 40 seconds (spread 33 seconds). As complete match typically lasts 3 minutes, this means approximatelly 200 active players.

You should also note that a better statistics than average queue time value is median value which is significantly lower (but not calculated). This means that very high ranked players will wait for a long time, maybe 10 minutes, while most players will only wait for a minute or less in the worst cast, i.e. with 10 players. Very low ranked player will be matched versus AI almost instantly.

This analysis tells the significance of number of players for a smooth experience. We need as many players as possible in the same bracket so the matchmaking system works. We estimate that the game is playable with only 10 players online (with some long wait times but mostly for really high ranked players). Most importantly, new players will have a smooth experience, mostly matching versus AI players at low levels. The experience is already smooth with 30 players queueing at the same time as we hit less than 2 minutes wait time on average (much less with AI filling the gaps).

I hope this has been useful and not too technical. If you want any more information, feel free to ask! And don’t forget to follow us on Twitter, Facebook and subscribe to our mailing list!