I started implementing a party (=team/grouping) system for team matchmaking in the python server in April 2019 after finishing and deploying the ICE adapter. The main goal in my intention here was offering the following:
- - high quality, pre selected maps that require you to play adaptive (could include generated maps)
- no lobby sim
- balanced teams
TMM milestones/parts
There are three technical parts/challenges to matchmaking.
Party system:
Status: Server: done, Client: done, untested
A system to allow players to form groups, invite each other, kick players, preview team and rating, join queues.
Challenges:
Spoiler: show
This is the first thing I started working on, the server sided party system is functional and nearly fully tested. The client sided implementation is present but contains a few bugs at the moment, has an ugly UI and needs a bit more work.
Matchmaking
Status: Server: done (only tested for 1v1), Client: to be implemented, waiting for party system bugfixes
You need to be able to see queues (with timer when the next wave starts), join them as the team leader, be removed when a member leaves your group, be notified and asked to click ready 20 secs before matchmaking starts, and then especially you need to be matched.
Queue system:
Spoiler: show
Matchmaking algorithm:
Another challenge is the actual matchmaking algorithm. After I implemented the party system server sided and started client work on the party system+queue UI, I soon got support from Askaholic (a server dev) who took over all responsibilities of server developement in regards to TMM (I'm just working on the client now). He also implemented matchmaking and matching/queue waves which is actually already being used for 1v1 ladder matchmaking at the moment (with the new client you see the wave timer below the play button).
There is not a lot to be done for this on the client as this is mainly part of the party UI, the only thing to do here is being able to join queues and signal to the server that you're ready once the matching begins. This is the step where I'm currently at.
Launching the game
Status: Euhm, nonexistent, probably a lot of copy pasta from GW code
After a match is found, the game on all clients need to be launched, they need to be sent into an auto lobby (no configuration, game just starts) which needs to be configured by the server. The main challenge here is that this has actually never been done before by FAF. This is currently just in use for ladder, where there are only 2 people. The largest challenge is figuring out how to assign players to teams, transmit their factions, spawn postions and especially figuring out how the heck to even make more than 2 ACUs spawn. A solution for that is only present since a few months due to work on GW (thanks to @Brutus5000).
This shouldn't be too hard to figure out, as it seems to be working fine in the Galactic War test builds.
Discussions
Immediately after I started implementing it, a lot of debate broke loose on slack and zulip, especially about which rating to use. I think there is also a thread on the forums. It revolved mainly around what the goal and the philosophy behind the system was, especially if it should be a global (team game) replacement or if it should be a ladder for multiple players (which I'm not gonna support). In my opinion, TMM should be the main way to play FAF, which is the only way we're going to get the benefit of people getting used to other maps with custom games being an option to play a specific map / mod / featured gamemode / against AI... (think of most other matchmade games). The main point here is especially that we're gonna need enough people using matchmaking to be even able to matchmake.
For discussions on such details not related to actually getting TMM out and working, please go to the discussions thread on TMM.
Galactic War
Nothing new on GW, just wanted to mention this here as GW is basically a glorified team matchmaker (especially when it comes to the launching games part) and therefore is believed by most FAF people as relying on TMM.