Matchmaking
Frontier’s matchmaking queue pairs players by rating and progressively widens the search the longer someone waits. Tight matches when players are available, no indefinite waits when they’re not.
The Matchmaking Flow
Section titled “The Matchmaking Flow”Here’s what happens from the moment a player hits “queue” to when the battle starts:
- Queue join — The player’s current rating is snapshotted. Their team is validated against the ladder’s format clauses. Validation failure? Can’t join.
- Queue processing — Every
tickIntervalticks (default 20 = once per second), the queue runs:- Timed-out entries are removed (past
defaultQueueTimeoutSeconds). - Remaining players are sorted by wait time, longest first.
- Each player is checked against every other queued player for a valid match.
- Timed-out entries are removed (past
- Rating expansion — The longer a player waits, the wider their acceptable rating range grows (see below).
- Match condition — Two players match when both of their expanded ranges overlap each other’s rating.
- Anti-boost check — If
blockSameIp = true, players on the same IP can’t match. - Arena allocation — An available arena is assigned. No free arenas? The match enters a waiting queue.
- Team preview — If the format has
teamPreview = true, both players see each other’s teams and select leads/picks. - Battle start — Players teleport to the arena and the Cobblemon battle begins.
Queue Configuration
Section titled “Queue Configuration”queue { tickInterval = 20 maxRatingExpansionPerSecond = 10.0 maxRatingExpansionCap = 500.0 defaultQueueTimeoutSeconds = 600}| Field | Type | Default | Description |
|---|---|---|---|
tickInterval | Int | 20 | Queue processing frequency in ticks. 20 = once per second. |
maxRatingExpansionPerSecond | Double | 10.0 | Rating points the search range expands per second of waiting. |
maxRatingExpansionCap | Double | 500.0 | Maximum total expansion. At cap, a 1500-rated player matches anyone from 1000—2000. |
defaultQueueTimeoutSeconds | Int | 600 | Seconds before automatic queue removal (10 minutes). |
Rating Expansion
Section titled “Rating Expansion”Each player’s search range starts at exactly their rating and grows outward every second:
expansion = waitSeconds * maxRatingExpansionPerSecondCapped at maxRatingExpansionCap. With the defaults (maxRatingExpansionPerSecond = 10.0, cap at 500), a player rated 1500 looks like this:
| Wait Time | Expansion | Matchable Range |
|---|---|---|
| 0 seconds | ±0 | 1500 only |
| 10 seconds | ±100 | 1400 — 1600 |
| 30 seconds | ±300 | 1200 — 1800 |
| 50 seconds | ±500 (cap) | 1000 — 2000 |
Match Settings
Section titled “Match Settings”match { teamPreviewSeconds = 30 turnTimerInitial = 150 turnTimerRegenPerTurn = 10 turnTimerMax = 180 declineQueueCooldownSeconds = 30 maxMatchDurationTicks = 36000}| Field | Type | Default | Description |
|---|---|---|---|
teamPreviewSeconds | Int | 30 | Duration of the team preview phase in seconds. |
turnTimerInitial | Int | 150 | Starting turn timer in seconds (2.5 minutes). |
turnTimerRegenPerTurn | Int | 10 | Seconds added back to the timer after each turn. |
turnTimerMax | Int | 180 | Maximum the timer can reach with regen (3 minutes). |
declineQueueCooldownSeconds | Int | 30 | Cooldown applied when a player declines a found match. |
maxMatchDurationTicks | Int | 36000 | Maximum match length in ticks (36000 = 30 minutes). 0 = no limit. |
Turn Timer
Section titled “Turn Timer”Each player gets a chess-clock style timer that ticks down only while it’s their turn to choose a move.
- Starts at
turnTimerInitialseconds (default 150 — two and a half minutes). - Counts down while the player is choosing.
- After each turn,
turnTimerRegenPerTurnseconds are added back, up toturnTimerMax. - Warnings fire at 60, 30, and 10 seconds remaining.
- When the timer hits 0, a random move is selected automatically.
Challenges
Section titled “Challenges”Players can skip the queue entirely with direct challenges:
| Command | What it does |
|---|---|
/ranked challenge <player> <ladder> | Send a challenge to another player on a specific ladder. |
/ranked accept | Accept an incoming challenge. |
/ranked deny | Decline an incoming challenge. |
/ranked togglechallenges | Toggle whether you receive challenge requests. |
Challenges follow the same format rules and use the same arena system as queue matches. Team validation still applies. The one difference: challenges don’t affect anti-boost tracking windows, so repeated friendly matches won’t tank your rating gains on the ladder.
Queue Commands
Section titled “Queue Commands”| Command | What it does |
|---|---|
/ranked queue <ladder> | Join a queue for a specific ladder. |
/ranked queue leave | Leave the queue. |
/ranked queue | Show your current queue status. |
/ranked queue info | Show queue sizes for all ladders. |
/ranked queue info <ladder> | Show queue size for a specific ladder. |