DEV Community

milkmaster7
milkmaster7

Posted on

How We Built an ELO Rating System for 1v1 Esports Matches

1v1 ELO for Esports

RaiseGG is a competitive gaming platform where players stake USDC on 1v1 matches in CS2, Dota 2, and Deadlock. We needed a fair ranking system.

The Algorithm

Standard ELO with esports modifications:

const K = 32 // Base K-factor
const expectedScore = 1 / (1 + Math.pow(10, (opponentElo - playerElo) / 400))
const newElo = playerElo + K * (actualScore - expectedScore)
Enter fullscreen mode Exit fullscreen mode

Our Modifications

Stake-Weighted K-Factor

Higher stakes = more ELO at risk. A $20 match matters more than a $1 match.

Game-Specific Adjustments

CS2 1v1s are more volatile than Dota 2 1v1s, so K-factors differ by game.

Placement Matches

New players get a higher K-factor for their first 10 matches to quickly reach their true skill level.

City Rankings

Players belong to cities. City ELO is the average of top 10 players from that city. Creates regional rivalries.

Results

After thousands of matches, the system produces stable rankings where:

  • Top players consistently beat lower-ranked opponents
  • Upsets happen but don't wildly swing rankings
  • New players reach their true rank within ~15 matches

Check the leaderboards: raisegg.gg


Have you implemented ELO or similar rating systems? What edge cases did you hit?

Top comments (0)