📐 Core ELO Formula

The system uses the standard ELO rating algorithm — the same one used in chess rankings worldwide. Every player starts at 1500 MMR, and ratings range from 0 to 3000.

Step 1 — Expected Score

Before a match, each player's probability of winning is calculated based on the rating gap between them:

$$E_A = \frac{1}{1 + 10^{(R_B - R_A) \,/\, 400}}$$

Where $R_A$ is Player A's rating and $R_B$ is Player B's rating.

What does this mean?
  • If two players have equal ratings, each has a 50% expected score.
  • A 200-point gap gives the higher-rated player ~76% expected.
  • A 400-point gap gives the higher-rated player ~91% expected.

Step 2 — Rating Update

After the match, ratings adjust based on the surprise factor — how unexpected the result was:

$$R'_A = R_A + K \times (S_A - E_A)$$

Where $S_A$ = 1 for a win, 0 for a loss, and K = 64 (the sensitivity factor that controls how much ratings change per match).

Key takeaways:
  • Upset win (beating a higher-rated player) → big rating gain
  • Expected win (beating a lower-rated player) → small rating gain
  • Expected loss (losing to a higher-rated player) → small rating drop
  • Upset loss (losing to a lower-rated player) → big rating drop

🏆 Margin of Victory (MoV)

Multiplier

The score difference matters! A blowout win rewards you more than a nail-biting close game. The system applies a linear multiplier based on the point difference, scaling up to a maximum of 2.0x for a 21-0 shutout.

The Math

$$M = 1 + \frac{|S_A - S_B| - 1}{20}$$

The base rating change is multiplied by this $M$ value. This guarantees that a close 1-point win still gives you the standard ELO rating, while blowing someone out gives you a gentle bonus up to double the rating.

Score Point Diff Multiplier Impact
21 - 20 1 1.00x Standard rating exchange
21 - 16 5 1.20x Slightly boosts exchange
21 - 11 10 1.45x Moderate boost to exchange
21 - 6 15 1.70x Heavy boost to exchange
21 - 0 21 2.00x Double rating exchange

⏳ 90-Day Decay Window

Golf Handicap Style

This is the key differentiator from standard ELO — our system works like a golf handicap. Only matches from the last 90 days count toward your rating.

How It Works

When a new match is recorded, all player ratings are recalculated from scratch:

1
Every player resets to 1500
2
All matches within the 90-day window are replayed chronologically
3
Ratings accumulate match-by-match as if playing them fresh
4
Matches older than 90 days are excluded — they no longer affect ratings

What This Means in Practice

😴

Player Stops Playing

Their old wins gradually "fall off" and their rating drifts back toward 1500

🔥

Player on a Hot Streak

Recent wins weight heavily since they're all within the active window

📉

Bad Month 3+ Months Ago

Those losses no longer affect their current rating — clean slate!

🆕

New Player

Starts at 1500 and their rating adjusts quickly with their first few matches

💡 Real Examples

Example 1 — Expected Result

Alex 1600 MMR
beats
Sam 1400 MMR

Alex was expected to win (~76% chance), so the rating change is small:

Alex: +15
Sam: -15

Example 2 — Upset!

Sam 1400 MMR
beats
Alex 1600 MMR

Sam was the underdog (~24% chance), so the upset creates a big swing:

Sam: +49
Alex: -49

Example 3 — Even Match

Jordan 1500 MMR
beats
Casey 1500 MMR

A coin-flip match (50/50), so the change is moderate:

Jordan: +32
Casey: -32

📊 Quick Reference

Parameter Value What It Means
Rating Range 0 – 3000 Ratings can never go below 0 or above 3000
Starting Rating 1500 All new players begin at the midpoint
K-Factor 64 How much ratings can change per match (higher = more volatile)
Decay Window 90 days Only the last 90 days of matches count toward your rating
Max Gain (per match) +64 Winning when you had ~0% chance of winning
Max Loss (per match) -64 Losing when you had ~100% chance of winning