Wiki/PvP/ELO & Matchmaking

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.

Starting Rating

Every player begins with a rating of 1000. Rating cannot drop below 0.

Expected Score

The expected score represents the probability that player A beats player B, based on their rating difference:

expectedA = 1 / (1 + 10^((ratingB - ratingA) / 400))

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, the winner’s and loser’s ratings are adjusted symmetrically:

deltaA = round(32 × (scoreA - expectedA)) // scoreA = 1 if win, 0 if loss
newRatingA = max(0, ratingA + deltaA) // rating floor at 0

The K-factor of 32 controls how much each match matters. A higher K-factor means faster rating swings.

Example Calculations

Player APlayer BResultExpectedDeltaNew Rating
10001000A wins50.0%+161016
10001000A loses50.0%-16984
1200800A wins90.9%+31203
1200800A loses90.9%-291171
8001200A wins9.1%+29829
8001200A loses9.1%-3797
15001000A wins94.7%+21502
15001000A loses94.7%-301470

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

ConstantValueDescription
STARTING_RATING1000Initial ELO rating for all players
K_FACTOR32Maximum rating change per match
BRACKET_RANGE25%Rating bracket width for matchmaking
MIN_OPPONENTS_SHOWN10Minimum opponents displayed on the ladder
COOLDOWN_HOURS6Hours before re-challenging the same opponent