Rating System
Frontier tracks competitive skill using a per-ladder rating system. Two algorithms are available: Glicko-2 (the default) and Showdown K-Scaling. Each ladder can use a different one.
Glicko-2
Section titled “Glicko-2”Developed by Mark Glickman (2013). The algorithm tracks three values per player per ladder:
| Value | What it represents | Default |
|---|---|---|
| Rating (R) | Skill estimate on a 0—9999 scale. | 1500 |
| Rating Deviation (RD) | Uncertainty in the rating. Lower = more confident. | 350 |
| Volatility (sigma) | Expected fluctuation in performance. | 0.06 |
How Rating Changes Work
Section titled “How Rating Changes Work”After each match, the algorithm compares the expected outcome (based on both players’ ratings and RDs) against the actual result (1.0 for a win, 0.0 for a loss). Then it updates all three values for both players.
Bigger rating swings happen when:
- The player’s RD is high (uncertain rating — the system is still learning).
- The opponent’s RD is low (confident opponent — beating a known quantity means more).
- The result is unexpected (upset victories move the needle fast).
Smaller rating swings happen when:
- The player’s RD is low (well-established rating).
- The opponent’s RD is high (uncertain opponent — less informative match).
- The result is expected.
RD and Inactivity
Section titled “RD and Inactivity”RD drifts upward when a player stops playing. The system gets less confident about a dormant player’s skill over time. When they return, their rating moves more aggressively until RD settles back down.
With regular play, RD drops toward rdFloor (default 50), signaling a well-established rating.
Configuration
Section titled “Configuration”rating { algorithm = GLICKO2 startRating = 1500.0 startRD = 350.0 startVolatility = 0.06 tau = 0.5 rdFloor = 50.0 minRating = 0.0 maxRating = 9999.0}| Field | Type | Default | Description |
|---|---|---|---|
startRating | Double | 1500.0 | Initial rating for new players. |
startRD | Double | 350.0 | Initial rating deviation. |
startVolatility | Double | 0.06 | Initial volatility. |
tau | Double | 0.5 | Controls how quickly volatility changes. Higher = more reactive to upsets. Recommended range: 0.3—1.2. |
rdFloor | Double | 50.0 | Minimum RD. Prevents ratings from becoming “too certain.” |
minRating | Double | 0.0 | Floor for the rating value itself. |
maxRating | Double | 9999.0 | Ceiling for the rating value. |
Showdown K-Scaling
Section titled “Showdown K-Scaling”A simpler alternative inspired by Pokemon Showdown’s ladder. Elo-style rating with a K-factor that scales based on games played.
How It Works
Section titled “How It Works”- New players start with a high K-factor (
kMax = 50), so their rating moves quickly. - As they play more games, K decreases linearly toward
kMin = 20overkScalingGames = 20matches. - Established players have smaller rating swings, creating more stable leaderboards.
The K-factor formula:
K = kMax - (kMax - kMin) * min(gamesPlayed, kScalingGames) / kScalingGamesFor a player with 10 games played (defaults): K = 50 - (50 - 20) * 10/20 = 35.
Configuration
Section titled “Configuration”rating { algorithm = SHOWDOWN_K_SCALING startRating = 1500.0 startRD = 350.0 kMax = 50.0 kMin = 20.0 kScalingGames = 20 rdFloor = 50.0 minRating = 0.0 maxRating = 9999.0}| Field | Type | Default | Description |
|---|---|---|---|
kMax | Double | 50.0 | K-factor for brand-new players. Large swings early on. |
kMin | Double | 20.0 | K-factor floor for experienced players. |
kScalingGames | Int | 20 | Number of games over which K scales from max to min. |
Anti-Boost Protection
Section titled “Anti-Boost Protection”Prevents rating farming by repeatedly matching the same opponent. Rating changes are multiplied down for repeat matchups within a time window.
antiBoost { windowHours = 24 match1Multiplier = 1.0 match2Multiplier = 0.5 match3PlusMultiplier = 0.1 blockSameIp = false}| Field | Type | Default | Description |
|---|---|---|---|
windowHours | Int | 24 | Time window for tracking repeated matchups. |
match1Multiplier | Double | 1.0 | Rating change multiplier for the first match against an opponent. Full value. |
match2Multiplier | Double | 0.5 | Second match in the window. Half value. |
match3PlusMultiplier | Double | 0.1 | Third and subsequent matches. 10% value. |
blockSameIp | Boolean | false | Block matchmaking entirely between players on the same IP. |
The multiplier applies to the rating change, not the rating itself:
actualChange = calculatedChange * antiBoostMultipliernewRating = oldRating + actualChangePlayer Stats Tracked
Section titled “Player Stats Tracked”For each player on each ladder, Frontier tracks:
| Stat | Description |
|---|---|
| Rating | Current rating on the ladder. |
| Rating Deviation | Current RD (uncertainty). |
| Volatility | Current volatility (Glicko-2 only). |
| Highest Rating | Peak rating ever achieved. |
| Wins / Losses | Total win and loss counts. |
| Current Win Streak | Consecutive wins (resets on loss). |
| Current Loss Streak | Consecutive losses (resets on win). |
| Best Win Streak | Longest win streak ever achieved. |
| Last Match Timestamp | When the player last played on this ladder. |
Rating Confidence Labels
Section titled “Rating Confidence Labels”Frontier displays a confidence label in GUIs based on the player’s current RD:
| Label | RD Range | Meaning |
|---|---|---|
| Stable | RD ≤ 50 | Rating is well-established. This player has played enough recent matches for a reliable estimate. |
| Uncertain | RD 50—100 | Rating is moderately certain. Could shift noticeably with a few matches. |
| Volatile | RD > 100 | Rating is highly uncertain or provisional. Expect large swings. |
These labels are configurable in messages.conf under rdDescriptions.