Basically, there seems to be two distinct competitive experiences: team/clan-based, and individual-based.
- Team/clan-based competition: This was the entire BZFlag league experience for many years, where you play with the same group of teammates each time. Other games have this as well, especially in the context of organized e-sports. This is really the ideal way to play. However, challenges (for BZFlag) are: 1) drops in the player population resulting in fewer players looking for matches; 2) teams based in different time zones who do not play at the same time of day; 3) players being unaware of who else is online and possible matchups that could be formed; and 4) no "tiers" of teams based on skill or rank, so we have teams at opposite ends of the ladder who might match, where reasonably fair odds cannot be achieved.
- Individual-based competition: We have a form of this already, with personal ELO ratings and "mixed official" matches in LU. This is the more casual form of competitive play, especially in other games, where you mostly want an experience where at least everyone is trying their hardest (in theory, haha) and where you can improve your individual skills and/or show them off (with a corresponding reward of a higher relative rank among players). Your rank, reflecting individual skill and general team play skills (rather than your specific team's cohesion), is a potentially useful quick-and-dirty method for identifying relative player strength, which is useful for automatic matchmaking, etc. This does not work well for us now, with complete seasonal resets of player ELO ratings in LU, and few official matches played resulting in almost everyone having close to the base ELO score.
Determining acceptable match conditions
For anything else to be automated, we need to know the following information about players:
- whether they are online
- whether they are available to match (i.e., have not opted for just casual play, have sufficient time without interruptions, etc.)
- the terms under which they are willing to match (e.g., map choices, team sizes, match lengths, and maybe fairness of teams if not divided into tiers)
Once the game has this information, it would be able to provide automated assistance as detailed in the next two sections.
Assisted team/clan-based matchmaking
Matches between organized teams/clans are at-will (that is, everyone needs to agree to the match). A player would tell the client they are opting in to league play (or they could set it to automatically opt in whenever starting the game), at which time the client would suggest matchups between players on different teams. This would happen in the background, while the player waits or plays or observes another game. A non-invasive dialog would indicate matchmaking progress in a corner of the screen:
Once enough players agree to a match, there would be a short delay to give players one last chance to back out, or for other teammates to jump in to make it larger match. Once that delay is over, the players would be transferred over to a new game instance where the match would begin.
Automated individual-based matchmaking
Once a player opts in to individual matchmaking, everything else would be handled automatically and in the background in order to avoid players backing out when they see who their opponents might be. Once a match is arranged, following each involved player's match conditions, there would be that same short delay, after which all players would be transferred over to a new game instance where the match would begin.
These are just some general ideas. There would be a lot of details to iron out, for instance, how to penalize players who back out of a match they don't like, and whether we should allow players to specify their preferred fairness or make it some consistent value, but this would be at least a start.