home documents terms contact shop (coming soon!)

Matchmaking Configuration

Edit

Configure how players are matched together.

Matchmaking is split into two locations:

  • Global settings (matchmaking.yaml) - Recent opponent avoidance
  • Per-format settings (season_presets/*.yml) - ELO range rules per format

Recent Opponent Avoidance (Global)

Prevent the same players from battling repeatedly. This applies to all formats:

# matchmaking.yaml
recentOpponentAvoidance:
  enabled: true
  avoidCount: 3
  expirationSeconds: 300
  relaxAfterSeconds: 120
  minimumQueueSize: 4
SettingDefaultDescription
avoidCount3Number of recent opponents to avoid
expirationSeconds300How long opponents stay on avoid list
relaxAfterSeconds120Seconds before rules relax (longer queue)
minimumQueueSize4Don’t avoid if queue has fewer players

How Avoidance Works

  1. Player A battles Player B
  2. Both players are added to each other’s avoid list
  3. For the next 5 minutes (300 seconds), they won’t be matched again
  4. After 2 minutes (120 seconds), avoidance relaxes if queue has 4+ players
  5. Avoid list entry expires after 5 minutes
Relaxation Behavior

When the queue is small, waiting for a perfect match takes too long. The relaxation feature helps:

Before relaxation (first 2 minutes):

  • Strict avoidance enforced
  • Players wait longer for matches

After relaxation (2+ minutes, 4+ players):

  • Avoidance rules relaxed
  • Faster matching at cost of rematches

Example scenario:

  1. Player A and B battle
  2. Both rejoin queue immediately
  3. After 30 seconds, system won’t match them again
  4. After 2 minutes with 4+ players queued, system may match them again
  5. After 5 minutes, avoid entry expires completely

Per-Format Matchmaking (Season Presets)

ELO range settings are configured per-format in season presets:

# season_presets/default.yml
singles:
  matchmaking:
    enforceEloRange: true
    initialRange: 200
    expansionDelay: 30
    expansionRate: 50
    maxMultiplier: 3.0
    immediateMatchRange: 100
Matchmaking Settings Explained
SettingDefaultDescription
enforceEloRangetrueRequire similar ratings to match
initialRange200Starting ELO range for matching
expansionDelay30Seconds before range expands
expansionRate50ELO points added per expansion
maxMultiplier3.0Max range = initialRange × multiplier
immediateMatchRange100Instant match if within this range

How range expansion works:

  1. Player (1500 ELO) joins queue
  2. System looks for opponents in 1500 ± 200 (1300-1700)
  3. After 30 seconds: expands to 1500 ± 250
  4. After 60 seconds: expands to 1500 ± 300
  5. Max range: 1500 ± 600 (200 × 3.0)

Immediate match:

  • If two players are within 100 ELO, they match instantly
  • No waiting for better matches

Format-Specific Settings

Each format can have different matchmaking rules:

# season_presets/default.yml
singles:
  enabled: true
  matchmaking:
    enforceEloRange: true
    initialRange: 200
    expansionDelay: 30
    maxMultiplier: 3.0

doubles:
  enabled: true
  matchmaking:
    enforceEloRange: true
    initialRange: 150      # Tighter range for Doubles
    expansionDelay: 20     # Faster expansion
    maxMultiplier: 2.5     # Lower maximum

triples:
  enabled: true
  matchmaking:
    enforceEloRange: false  # Disabled for Triples

When to Disable ELO Enforcement

Set enforceEloRange: false for:

  • Smaller player bases
  • Casual formats
  • Testing environments

Trade-off: Faster matches vs. less balanced matchups

Tuning Tips

GoalSetting Change
Faster matchesDecrease expansionDelay, increase expansionRate
More balanced matchesIncrease initialRange, decrease maxMultiplier
Reduce rematchesIncrease avoidCount, expirationSeconds
Faster matching in small queuesDecrease minimumQueueSize

See Also