About
Arena Rankings is an automated ratings service for the arena FPS scene. It discovers and downloads match/tournament pages from plusforward.net, parses the results into structured data, and computes Elo and Glicko-2 ratings that are served through this web site, a JSON API, and Discord/Twitch chat bots. The pipeline is game-agnostic and tracks multiple arena shooters side by side โ each with its own leaderboards and ratings.
Elo
Standard Elo with a variable K-factor: how much your rating moves per match depends on your experience and on the tier of the tournament you played.
Base K by experience (games played):
Tournament tier multiplier (on top of base K):
Final K = base K(games) ร tier multiplier. Expected score follows the standard logistic curve
E = 1 / (1 + 10(R_opp โ R)/400), and each match updates
Rโฒ = R + Kยท(score โ E). Everyone starts at 1500. These numbers (the K-factors
and tier multipliers above) are all tunable โ the exact values shown are what this site runs today.
Say Alice (1700 Elo, 150 games played) beats Bob (1500 Elo, 40 games) in a premier tournament:
- Alice: K = 16 ร 2.0 = 32 ยท E = 1/(1+10^(โ200/400)) โ 0.76 โ +32 ร (1 โ 0.76) โ +7.7
- Bob: K = 24 ร 2.0 = 48 ยท E = 1/(1+10^(+200/400)) โ 0.24 โ โ48 ร (0.24 โ 0) โ โ11.5
- Alice โ 1707.7 ยท Bob โ 1488.5
Glicko-2
Glicko-2 is a more careful system. Instead of a single number, every player has three: a rating, a rating deviation (RD) โ how sure we are โ and a volatility โ how consistent they are. It updates once per rating period โ currently monthly โ using all the games in that period at once (based on the Glicko-2 paper). A system constant, ฯ = 1.2, controls how much a player's volatility is allowed to swing between periods (the range is 0.2 = very stable to 1.2 = very volatile).
The constants that describe a player:
What the RD really means:
The lower the RD, the more confident we are in a rating. The leaderboard shows the
cautious lower end (rating โ RD), so an uncertain player can't sit artificially high:
Every game played shrinks the range. Sitting out a month grows it again (back toward 350). Only players with โฅ 30 matches appear on the Glicko-2 leaderboard, so you never see a rating we don't really trust yet.
Alice (1700 ยฑ 40) plays 5 matches this month: wins 3, loses 2, against a field averaging ~1550 with their own RDs. Because Glicko-2 weighs each opponent by their uncertainty, beating a high-RD player moves your rating less than beating a proven one.
Result: rating 1700 โ ~1731, RD 40 โ ~28 (more games = more confidence)
The RD drop matters as much as the rating gain โ after more matches, 1731 is a trusted number, not a hopeful one.
- Leaderboards per game, sortable and filterable, with an as-of date filter that rebuilds the standings as they were on any past day.
- All-time peaks โ every player's single highest Elo and Glicko-2 rating, tracked across the site.
- Player pages โ rating-history charts, map edges (per-map win-rate vs overall, green = overperform / red = underperform), recent matches and VOD links.
- Head-to-head โ direct records between two players, including net rating gained or lost across their meetings and per-map results.
- Rivals โ a player's most frequent and toughest opponents at a glance.
- Rating deltas โ see how much a specific match or tournament moved each player's rating.
- A JSON API (Swagger at
/api/docs). - Discord slash commands and Twitch chat commands for ratings on the go.
Bugs, feature requests and questions are welcome:
- GitHub โ issues & PRs: github.com/datphyr/arena-rankings
- Discord โ datphyr
- Twitch โ datphyr
Match data is sourced from plusforward.net.