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)
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)