ELO & Matchmaking
PvP arena uses an ELO rating system to track skill and match players of similar strength. Wins against stronger opponents yield large gains, losses to weaker ones result in big drops, and draws use a half score.
Starting Rating
Every player begins with a rating of 1,000. Rating cannot drop below 0.
Expected Score
The expected score represents the probability that player A beats player B, based on their rating difference:
When both players have the same rating, expectedA = 0.5 (coin flip). A 400-point advantage gives roughly 91% expected win rate.
Rating Change
After each match, player A receives a score of 1 for a win, 0.5 for a draw, or 0 for a loss. Rating changes are then calculated from the difference between that score and the expected score:
The K-factor of 32 controls how much each match matters. A higher K-factor means faster rating swings.
Example Calculations
| Player A | Player B | Result | Expected | Delta | New Rating |
|---|---|---|---|---|---|
| 1000 | 1000 | A wins | 50.0% | +16 | 1016 |
| 1000 | 1000 | Draw | 50.0% | 0 | 1000 |
| 1000 | 1000 | A loses | 50.0% | -16 | 984 |
| 1200 | 800 | A wins | 90.9% | +3 | 1203 |
| 1200 | 800 | A loses | 90.9% | -29 | 1171 |
| 800 | 1200 | A wins | 9.1% | +29 | 829 |
| 800 | 1200 | A loses | 9.1% | -3 | 797 |
| 1500 | 1000 | A wins | 94.7% | +2 | 1502 |
| 1500 | 1000 | A loses | 94.7% | -30 | 1470 |
Key insight: beating a 1200-rated player from 800 rating grants +29 points (an upset), while beating an 800-rated player from 1200 rating only grants +3 points (expected win).
Matchmaking Bracket
The arena ladder shows opponents within a 25% rating bracket of your current rating. At minimum, 10 opponents are always shown (expanding the bracket if necessary to fill the list).
Constants Reference
| Constant | Value | Description |
|---|---|---|
STARTING_RATING | 1,000 | Initial ELO rating for all players |
K_FACTOR | 32 | Maximum rating change per match |
BRACKET_RANGE | 25% | Rating bracket width for matchmaking |
MIN_OPPONENTS_SHOWN | 10 | Minimum opponents displayed on the ladder |
COOLDOWN_HOURS | 6 | Hours before re-challenging the same opponent |