Matchmaking rules
From Gladiabots Wiki
Ghosts
Every time you play a multiplayer match, the team you deployed becomes a "ghost" that will be used by the matchmaking system. When a match result is known, the league score delta is applied to both the participating ghosts and the player(s) that manually created/joined the match. This way, ghosts score evolves depending on the opponents they meet. The more a ghost "plays", the more accurate its score is.
Matchmaking
Here's what happens when you start a new game:
Rules in red only apply to ranked matches
Rules in blue only apply to unranked matches
- A new ghost is created with your ghost composition and AIs, your current league score (elo) and your XP level
- The system lists the 200 most recent ghosts (only keeping the most recent ghost for each player) matching those conditions:
- League score between <your score -100> and <your score +100>
- The score of the ghost is not lower than his original score minus 50 points. Say a ghost was deployed at 1800. If the ghost goes down to under 1750 it gets disabled.
- Then it removes from this list the ghosts of players you already met during the last 30 minutes
- At this point, there are 2 possible cases:
- Case 1 = the ghost list is empty:
- Retry with -200/+200, -300/+300 and -400/+400 score ranges until it finds at least one valid ghost, else match is pending until someone else joins it
- Your match is pending until someone else joins it
- Case 2 = there are some ghosts remaining:
- Sort the list using these rules (ordered by priority):
- Ghosts from pending matches first
- Ghosts from the closest league first
- Ghosts with closest score first
- Ghosts of players using a different IP first (anti-cheat measure)
- Ghosts of players met the furthest in the past first (never met = the furthest possible)
- Ghosts with the closest league score first.
This list has 50% chances to keep "closest scores that are lower than the deploying player first", say the deploying player has a score of 1500, then only ghosts equal or under 1500 are picked, this even if a opponent has better ghosts in range. The remaining 50% chances are used to keep "closest scores that are higher than the deploying player first". - Most recent ghosts first
- Keep the 10 first of the sorted list (10 "best" ghosts)
- Then pick one of them randomly and join it
- Sort the list using these rules (ordered by priority):
- Case 1 = the ghost list is empty:
Example
Here's an example of the ghost system in action: (asuming the ghost list is initialy empty, all players are in the same league with a similar league score and a different IPs)
- T = 0h00mn > P1 deploys G1
- no ghost available, match is pending
- ghost list: G1
- T = 0h01mn > P2 deploys G2
- matched against G1 (P1 will see the "new" flag on the match)
- ghost list: G1, G2
- T = 0h02mn > P3 deploys G3
- matched against G2 (most recent ghost)
- ghost list: G1, G2, G3
- T = 0h03mn > P3 deploys G3b
- matched against G1 (most recent ghost not already met in the last 30mn)
- ghost list: G1, G2, G3, G3b
- T = 0h04mn > P3 deploys G3c
- no ghost available (fought all the available ghosts in the last 30mn), match pending
- ghost list: G1, G2, G3, G3b, G3c
- T = 0h05mn > P1 deploys G1b
- matched against G3c (most recent ghost)
- ghost list: G1, G2, G3, G3b, G3c, G1b
- T = 0h06mn > P1 deploys G1c
- matched against G2 (most recent ghost not already met in the last 30mn)
- ghost list: G1, G2, G3, G3b, G3c, G1b, G1c
...
- T = 0h40mn > P1 deploys G1d
- matched against G3c (most recent ghost, met more than 30mn ago)
- ghost list: G1, G2, G3, G3b, G3c, G1b, G1c, G1d