As I see a difficulty in implementing a system that takes in account MMR and the pip system, without being exploitable, I came up with the idea to introduce more than one match making rating value for every player. Consider following MMR values:
- AMMR = an account wide match making rating, it never resets and validates every ranked game
- CMMR class specific mmr, similar to account mmr just specific for each class
- SMMR a seasonal mmr, resets with every new ranked season and preseason
First two values should be internal, the last one visible for the player only.
I will use the mentioned abbreviation, due to laziness.
How I would use those ratings:
1. SoloQ in a ranked game: The system tries to find 10 players within +/-10% those players average seasonal mmr and within 5 pips of those 10 players. Every minute the range increases by 5% and 1 pip, to a maximum of 35% and 10 pips (= 5 minutes quetime).
2. When 10 people are found the teams are arranged so that the average seasonal mmr of each team is about equal. On the side: You can only avoid class stacking by making specific class builds balanced and unique. The only reason to restrict a class is when that class is stronger than other ones. That should not be the case in a balanced game. In an utopian world with perfect class balance, people should be allowed to switch classes at the start of the game. That imho is also a strategic part, to adjust team setup according to enemies. Or maybe to pick an initial class that you don’t intend to play in order to fool the enemy team.
3. Now when a game ends each players AMMR and CMMR is increased or decreased, comparing each those 2 values individually with the average AMMR of the enemy team.
While the SMMR is increased or decreased by comparing it to the persons (AMMR + CMMR) / 2. That means the AMMR and the CMMR count equally as 50%.
4. When a player reaches the last pip of a division, he can only advance if his SMMR is at a maximum of let’s say 10% below of the average SMMR of every player currently in that division. This might be a very aggressive approach and not a must have if not accepted by the majority. An alternative would be to not give ppl pips when they don’t meet the average SMMR of all players in a division.
Let me explain by way of example:
John starts (pre)season 3 with the default season value of 1k. He is a decent player with an AMMR of 1500.
He starts the soloque as a necro with a CMMR of 1700. The game cannot find another 9 players within 10% and 5 pips in the first minute, so it keeps looking for +/-15% and 6pips. Now following 10 players are found:
P1 John SMMR 1000 this is our example
P2 Bob SMMR 1000 new to season
P3 kitten SMMR 861 a newbie who lost some games
P4 Rob SMMR 1000 new to season
P5 JaabirJalal SMMR 1150 pro player on his way up
P6 RanDom SMMR 1028 a decent player with about 60% winrate
P7 KTHXBYE SMMR 1100 skilled solo player, unable to play in team, blames mates
P8 MesmerIsTooOpFixIt SMMR 930 decent player who gives up fast and is rated below his “skill”
P9 Tom SMMR 970 not a bad player but had close loses at the start of the season
P10 Leeroy SMMR 1060 decent player, had luck and got matched in the better teams at early season
Now the games average SMMR is 1010 at (1009.9) and the teams are arranged like this:
Team Blue: John, JaabirJalal, MesmerIsTooOpFixIt, Rob, Tom; with an average SMMR of 1010 and AMMR of 2372
Team Red: Bob, KTHXBYE, kitten , Leeroy, RanDom; with an average SMMR of 1010 (1009.8) and AMMR of 1345
The game ends and blue wins. John’s AMMR increase by let’s say 1 point since the enemies AMMR is below his own. His CMMR doesn’t increase because it is way above the enemies average AMMR. His SMMR increases by 10 points as his (AMMR + CMMR) / 2 = 1600 and it above his current SMMR, resulting in more points as he is on his way up to his skill level.