More on Matchmaking
I’ve written a lot about this before, yet I believe it still deserves more expansion because of how important I think it is. I would also like to broaden my examples, and note where some new games are getting better at this. However I won’t rest happy in this crusade until all online competitive games are getting this right! I thought that the result of the L4D2 poll “why do you rage quit?” was especially telling. The top two were “skill imbalance” and “team disharmony”. And yet this is a game that they designed that does absolutely nothing to fix either of these issues. They can only state weakly that you should “play with your friends” as an excuse. And whilst every new balance patch might be nice, none of this will matter to your average player. Valve, you need to patch in some skill and social matchmaking! Also don’t forget that people who quit individual matches for these reasons are also very likely to quit the game altogether.
Now whilst it’s true from a designer’s perspective that, in most cases, once players have bought the game you’ve “already got their money anyway”; I’m going to assume for now you are a developer wanting to build a long term competitive community around a game. (And of course, there are numerous alternative ways to make a lot of money out of doing this, above and beyond just selling lots of games).
So here’s the formula for success for online competitive multiplayer matching:
Skill grades: 1 to 5.
Win more than 60% (over last x games) and the player rises a skill grade, win less than 40% (over last x games) and the player drops a skill grade.
Quit = Loss.
Have an automatic matching system that matches players of the same skill grade rating, and other necessary stuff like good low-latency connections, depending on the nature of the game.
And really, THAT IS IT.
All these numbers can and should be tailored and varied though as required for a particular game, this is just an example to keep things simple.
Of course, as always, the devil is in the details, so here’s a lot more about how behind the scenes it should work:
How do you determine players starting skill grade?
One simple and effective system is to allow a player to grade him/herself. Alternatively you can start every player at the same point, probably the lowest grade, or a middle grade – so either 1 or 3 in the 5-grade scale used in the example. Both have advantages and disadvantages though; starting all players at 3 may mean new players are more likely to lose a lot at first which may discourage new players – however starting all players at 1 may mean players who really are level 1 players of a game tend to get too many matches against people who are actually too good for them ie: the “real” grade 1 people are forced to play too many “unknown grade” new people. A compromise would be to start everyone at the “below average” grade of 2. The way StarCraft II handles this is a bit of a mystery as it doesn’t display anything to the player until they have played five “placement matches”. I think it likely matches you up against a mid-level player (3) at first, and then immediately adjusts each game based on the result, and then estimates what it thinks your skill grade is based on the first five results only – of course it’s quite likely to get it ‘wrong’ on such a small sample, but it’s better than nothing. Perhaps the ideal would be to base a player’s starting skill grade on a well designed multiplayer ‘trial’ of some kind – which would need to test as many of the same skills as real multiplayer as possible. The trouble is no game’s ever been really successful at designing this kind of trial yet, and even if they were, some players may not like being forced to play such a trial before they get into their first real game. But it need not be that long or arduous – and could always be optional: “Choose your skill grade, or, if you don’t know – let us determine what we think it is based on this trial level” would be a best of both worlds solution.
Team up to defeat Ming
For team-based games, the main added complexity is in determining the ‘win or loss’ for an individual player. The best way to solve this is breaking it down into two components to make a combined “skill grade points score” (rather than just a pure win/loss record) calculated based on: A) did the overall team win or lose, and B) what was the player’s impact on the game. For example In a team FPS game, if a team wins but a player had a negative kill:death ratio, and actually didn’t contribute to the team winning, then they probably shouldn’t be gaining skill grades. There could be many other stats collected by the game to calculate a player’s impact and ability (eg. the medals in Halo Reach). In team games communication and teamwork can also be a big factor though, and it is almost impossible to get measurable ‘contribution’ statistics on this, other than the overall team’s result. The best solution is one SCII uses which is to rank each player-determined team individually. ie: Tom & Fred together have their own team skill grade, Tom & Chris together have a seperate team skill grade, and then Tom & a random person also has it’s own team skill grade. This works great for small team games (like StarCraft II 2v2) and would be fantastic for Halo Reach Arena (4 player teams), Left 4 Dead or most team sports games. For large team games the “medal” way of working out a players contribution maybe the best you could go on, although when you have small teams within a larger team eg: parties within a COD, MAG or Battlefield match, you could look at the impact of those smaller groupings as well as the full team. As most people tend to play with fairly regular teammates, you could still calculate a skill grading for those ‘mini teams’ based on the contribution they tend to make to their overall teams.
In a scored game, you may possibly like to take into account the score differential rather than the raw win/loss. ie: a very close win probably indicates the player is already at their correct skill grade, whereas a win by a large margin could be worth more than a close win towards their next skill grade. However you need to be very careful how this impacts the game. Quitters should always count as losing by the largest margin possible, but also ‘sandbagging’ and other forms of ‘smurfing’ need to be more carefully considered if you use this – even players ‘being nice and letting the other guy win a bit’ would affect this score. So in general it is probably best left alone as, like badly conceived online achievements, it can easily have a negative effect on how people play the game.
Another common type of competitive multiplayer game is the “free for all” such as Bomberman or Smash series, or many boardgames and their videogame style equivalents. Here of course only 1 player out of the 4+ or so “wins” – however again the ‘win or loss’ system should be broken into components for a scoring based on how well the players did in the game. Generally this is not too hard to do as these games tend to be across multiple rounds to win, so you get a final score of 5 -3 -1 -0 between 4 players for example, it’s pretty easy to meter out how much their skill grades should be affected by this result.
The automatic matching system can have far more bells & whistles added as well to improve it beyond pure skill & connection matching – like Halo Reach’s social settings. You will also probably want to allow an expansion of searches so that players can get matched grade:2 vs grade:3 for example, at times – you can always leave this in the hands of player options as to whether they want to take this option though; but with a smaller player pool, or long match times, it may be necessary. Once non-equal skill grade matches are allowed (or enforced) though, again, again you need some kind of ‘skill grade points’ system behind the pure “% wins” score so that wins vs higher graded opponents are worth more, and conversely wins vs lower graded opponents are worth less. Also ideally, as covered before, when the automatic matching system is working to find a match, you should allow the player to do something else within the game whilst waiting. This is especially important for any game with a potentially smaller community (ie: StarCraft II probably doesn’t need to worry about this thanks to it’s own existing audience of StarCraft: Brood War, Warcraft 3 and general Blizzard communities, but most games do) – as it will quickly become even smaller still, as players grow bored of waiting for a match. Ironically the only game around that I know of that does this part pretty well – SFIV – has a relatively large online community and doesn’t really need it – however I think this feature is still useful and should become more important as the game ages and as the playerbase shrinks. It’s already becoming a lot more useful in Super SFIV in fact.
At last we can reveal ourselves to the Jedi
With all these figures of skill grades, skill grade points, win/loss, points won/lost per match etc. you can either choose to show the figures to players, or hide it all, whatever is most appropriate for the title and the playerbase. For example SCII shows you some things, but not others, and I believe it is all done to help incentivise players to play more. It shows you your skill grade and it shows you a “mini leaderboard” of 100 random players within your grade, but this leaderboard is not actually ranked by your skill grade points behind the scenes; it is based on a modified kind of seasonally reset ‘total wins’ (although losses are taken into account a bit) – this incentivices some level of ‘grinding’ from players to play more games. So this leaderboard is essentially a bit ‘fake’ in terms of an actual skill measurement – the system could know you are one of the most skilled in your group, yet not highly ranked due to not having played enough games. Whilst the grinding ‘total wins’ bit may sound like a problem, because it doesn’t affect a players actual skill grade or provide any actual in-game benefits (just out of game benefits, such as Achievements and icons – unlike certain games like COD), and it keeps more players playing more games, and so it is actually beneficial to the overall game and even the health of the matching and skill grading systems. For matchmaking purposes more players is always better, so long as you don’t sacrifice the real skill matching system to get them playing. Other times you may want to explicitly show a player exactly what their skill grade points are; to encourage them to try to improve; although this has to done with care, as it could also cause discouragement whenever a player can see any score “going down” too much. Psychologically people just don’t tend to like that.
However showing some of the ‘real figures’ to players becomes a lot more relevant at the very top end of the skill grades. These players tend to really want a proper actual leaderboard style table to measure themselves against their other top level competition on; and these types of players are likely to be the most dedicated and skilled and less likely to be discouraged by seeing a score go down. In fact they are likely to be encouraged to play more to re-gain any ‘points’ they lose. You can see why this is necessary when StarCraft II, at least in it’s beta, offered no way for the top grade players (Platinum, but now called Diamond I believe) to distinguish themselves from the arbitrarily large amount of ‘top’ platinum grade players. It’s like saying “congratulations, you’ve qualified for the Premier league, but now we’re not going to tell you who won” – understandably there was an outcry in the SCII competitive community because of this. Additional ‘top player only’ tournaments may also be a solution SCII uses (there is talk of an even higher “Pro” skill grade) but the important thing is that these top end levels need to use the true skill grade points to determine things, and not go by any kind of the fake grinding-type of leaderboard, no matter how good that type of leaderboard is for the average player. Essentially you want to tailor the visible scoring available based on the skill of the player – allow weaker and newer players to win ‘little victories’ & avoid discouragement, whilst at the same time give top hardcore players valid goals to strive for. Note that as I’ve covered before though, a player’s skill grade points should always depreciate over time to prevent players who no longer actually play the game to clog up places on a leaderboard – it should be a current leaderboard not an innaccurate ‘historic’ one that most games seem to use.
The reason for the ‘x games’ in the formula above is because people learn, often very quickly at videogames; so someone who loses his first 100 matches shouldn’t have to win the next 150 games to “rank up”. As soon as they are winning a significant amount against people at their skill grade they have become good enough to move up. Note: this is general failing of the ELO system and most skill rankings on XBL – a standard ELO will still be weighting all those previous losses as much as any more recent game, as so it essentially assumes people are relatively static in their skill level & knowledge and only improve slowly over time – but this is not generally the case for video games. Also conversely, a player who hasn’t played a particular game in a long time might have actually lost a lot of their skill or even forgotten a lot of knowledge; and so they should also drop rank far more quickly than normal ELO would allow. Note that x should almost certainly be hidden from players and should vary, and so possibly should the win/loss % or grade points amounts where grade changes can occur. This is to prevent players from attempting to “game” the system… although if done right, no-one should really have any incentive to want to game this system anyway.
An asymmetrical exception
One huge exception you need to look at is games where you have different pieces/characters/races/teams/etc needing somewhat different skill sets & knowledge to master (ie: asymmetrical design). Here you may want to split someone’s skill grade into character-specific grades. This might even be applicable to different maps in some other multiplayer games such as most shooters – especially as new maps are added to a game over time. All you need to then have is separate leaderboards or separate ‘fake mini-leaderboards’ as described earlier for different ‘characters’. A player’s best character should generally be used their ‘overall ranking’ though, although a “master of all” leaderboard might be interesting in some titles. What’s important is not to exclude people from experimenting and learning different ‘characters’ or maps etc by allowing them to be matchmade against fair competition for them with the particular character they are using or map they are on. Any player who’s ever got to a high placing in any leaderboard or ladder system with a particular race/character/team etc understands the dilemma they put themselves in; they will most likely lose a lot if they try something new, and thus lose ranking. And even if the player isn’t bothered about this, the trouble is that it will be detrimental to the skill matching itself, as the experimental player will probably be far weaker than their grade would show with their new characters, but if they change back, they will then inadvertently “smurf” by being too strong at their new lower grade with their better characters. Incidentally, this problem even afflicts StarCraft II to some extent, and is a huge problem in Super SFIV. SSFIV has added a reasonably functional skill & connection matching system which is fantastic, however it only works if you play your best character at all times. I understand this is the standard for Japanese tournaments and such, but it’s not something which a lot of players always want to do all the time.
Back to FPS games and different maps – there may be good alternative ways to handle this; as map knowledge tends to be based on experience. You would still count all of a players results regardless of map, as the skill you are attempting to measure & match on is usually somewhat map-independent anyway, but perhaps you would weight a player’s score lower if they are on a map that they, or their opponents are less familiar with (easily measured with an experience point count of games on a particular map).
Quitting is not the problem – the penalties are
Quits MUST equal a Loss for any system like this to work. I can’t stress this enough and it’s amazing that so many games still can’t handle this simple thing. I’m aware that server-less games such as those run on PSN don’t really have any way to calculate who has quit; but any game designed for the PC with dedicated servers or XBox Live (with arbitration & other game servers, even though individual players host sessions) should always have a way to do this. You simply cannot run competitive multiplayer matchmaking on a system like PSN that doesn’t have this without providing additional systems. In a 1v1 game a player should always be allowed to quit without any other penalty other than counting it as a loss, eg. StarCraft II or SF2:HDR (on 360). In certain long 1v1 games you may want to allow the remaining player to “play it out vs the CPU” if they really want to. This is appropriate for some sports games where players may just enjoy the act of ‘completing’ a match, regardless of how un-competitive it has become, to help it simulate a real sport. But the point is that online video game players are not professionals and are not there for the for entertainment by others, only themselves – and there’s nothing to stop them quitting if they want to. It’s commonplace, and actually sensible to do so in StarCraft II, Magic, or even chess – especially in any game with a slippery slope. All the problems arise when people can quit and ‘get away with it’.
A team-based game where someone quits out has far greater problems though. Whilst that player can be assigned the appropriate loss of skill grade or ranking (which may even be problematic as it could give them a way to game and smurf the system), really if you want players who are losing to stick around, you’ll need to create some incentives, or disincentives outside of the skill ranking system for them to do so. Show players’ “quit game” totals or % on the leaderboards for a team game. Allow players to avoid team games with people that have quit team games in the past via additional matchmaking settings. Put in some kind of points or achievements for even a losing team to grind away at – just don’t do it like COD and attempt to remove most of the reason to compete entirely. If necessary and possible, it’s best to ban quitters from playing team games altogether. The loss of those few players inclined to quit a team game may actually be beneficial to the overall player base. But the presence of a great skill matching system like the one I describe should naturally help to reduce quits anyway – since games should be close and competitive a lot of the time. Games like Left 4 Dead which allow CPU takeovers and other players to join mid-game is another option, but it quickly becomes very hard to calculate any kind of skill grade points whatsoever. It’s not impossible though, and could even be facilitated by a great matchmaking system – imagine if in Left 4 Dead if someone dropped it would pause for a while (in the next safe room?) to allow an equally skill-rated person to join in their place; or the team-based skill grading had different team grades for “playing with CPU teammates” to match people on too, or it could reduce spawn times or other adjustments to keep teams balanced despite people quitting. There’s a variety of ways to help alleviate team quitters; but no matter how effective at dealing with it a game could become – quitting is always going to be very bad for team-based games and needs as much discouragement as possible by design.