Elemental Fracture 6.3.6 – Patch Notes

Relaunch your launcher, let it pull 6.3.6, and play.

This one is about fair fights. Until now, the matchmaker built Dominion, Team Deathmatch and Team Clash teams in the order people joined, so whether you got a close game or a stomp came down to luck. Balancing teams by skill was the next thing I wanted to pursue, and 6.3.6 is the first version of it.

Teams are balanced by skill

When the matchmaker forms a Dominion, Team Deathmatch or Team Clash lobby, it now splits the players into two sides using a hidden team rating instead of join order.

I checked it against every team match played so far. For each one, I compared the teams we actually got with the teams the balancer would have made, using only the ratings that existed before that match:

Two limits worth knowing: balancing applies to lobbies the matchmaker forms from the queue, so players who join a match already in progress still fill whichever side has room. And Custom Match and Free for all are never balanced. You pick your own team in Custom Match, and Free for all has no teams.

Parties, uneven teams and 2v1s

Because parties are never split, the party sizes in a lobby decide what splits are possible. Here is what the matchmaker does in the common cases, run through the same code the servers use:

Who is in the lobbyTeams
8 solo players4v4
A party of 3 and 5 solo players4v4: the party plus one solo, against four solos
Two parties of 3 and 2 solo players4v4: each party gets one solo
A party of 3 and a party of 55v3: the only split that keeps both parties whole
3 solo players2v1: someone has to be alone
A party of 2 and 1 solo player2v1: the solo plays alone against the party

Can you ask for a 3v5? Not through the queue. The matchmaker always goes for the evenest teams it can, so a group of 8 made of solos or small parties becomes 4v4. You only get a 3v5 from the queue if a party of 3 and a party of 5 end up as the only two groups in a lobby, and nobody can arrange that. If you want a lopsided game on purpose, make a Custom Match and pick teams there: the host’s picks are never changed and no balancing runs. Custom Match doesn’t give XP or count toward stats, so it’s the place for games played just for fun.

Who plays alone in a 2v1? With three solo players, the matchmaker picks whoever makes the two sides’ average ratings closest. For example, with players rated 864, 1074 and 1096:

Player aloneTheir ratingThe pair’s averageGap
Player A8641085221
Player C1096969127
Player B (chosen)107498094

With a party of 2 and one solo, there is only one possible split: the solo is alone, whatever the ratings.

One thing it doesn’t do yet: it doesn’t give the smaller side any credit for being short a player. In a 2v1 the fairest choice is usually the strongest player alone. In the example above the pick happened to be the second strongest, but with different ratings it could leave a weaker player on their own.

A 2v1 can still become a 2v2. Dominion, Team Deathmatch and Team Clash start their countdown once two players are in. Anyone who joins before the join cutoff goes to the side with fewer players, so a fourth player turns a 2v1 into a 2v2. If nobody else arrives, it stays 2v1 for the whole match.

Uneven games count for less. A 2v1 moves everyone’s rating half as much as an even game (see Uneven teams below). The player who was alone loses half as much for being outnumbered, and the pair gains half as much for winning a fight they were expected to win.

How the rating works

Here is the whole formula. The rating is Glicko-2, the same family of system chess and many team games use. On top of that there is a small performance bonus, a correction for uneven teams, and a starting rating for existing players.

Everyone starts at 1000

A brand new account starts at 1000, with a small nudge for Mage Rank and Class Mastery:

$$r_{\text{start}} = 1000 + 75\,\bigl(0.6\,m + 0.4\,c\bigr)$$

$$m = \min\!\left(1,\ \frac{\text{Mage Rank} - 1}{29}\right) \qquad c = \min\!\left(1,\ \frac{\text{best Class Mastery} - 1}{9}\right)$$

The nudge is at most +75, and it can only go up. Levels measure time played, not skill, so they are only allowed to suggest a starting point.

Every rating also carries an uncertainty (RD). A new account starts at the maximum, 200, which means the system doesn’t know you yet and your first matches move your rating a lot. As you play, RD shrinks toward 85. At that point an even match moves you about ±20. A rating counts as provisional until 8 rated team matches.

Players who were already here

Existing players didn’t have to start from zero: accounts with history get a starting rating built from what they have already played. Four signals go in. Each is pulled toward neutral the less evidence there is behind it:

$$\hat{s} = \operatorname{clamp}(s,\,-1,\,1)\cdot\frac{n}{n + k}$$

where $n$ is the number of matches behind the signal, and:

SignalWhat it measures$k$
$\hat{s}_{\text{wl}}$team-mode win rate against 50%6
$\hat{s}_{\text{impact}}$team-mode performance (see below)6
$\hat{s}_{\text{br}}$share of real players outlasted in Battle Royale8
$\hat{s}_{\text{prog}}$the Mage Rank / Class Mastery factor above(none)

$$x = 0.40\,\hat{s}_{\text{wl}} + 0.35\,\hat{s}_{\text{impact}} + 0.10\,\hat{s}_{\text{br}} + 0.15\,\hat{s}_{\text{prog}}$$

$$r_{\text{seed}} = 1000 + 75\,\tanh(2x)$$

A seed can never move you more than 75 from 1000. In practice the widest was about +45. Seeded players still start at the full uncertainty of 200, so the seed only chooses where you start. It never makes the system confident about you.

Battle Royale contributes through one signal only: how many other real players you outlasted. It ignores exiles and damage, because most Battle Royale exiles are bots.

After every team match

Each player is rated against the other team as a whole, reduced to one opponent:

$$r_{\text{opp}} = \frac{1}{N}\sum_{j=1}^{N} r_j \qquad RD_{\text{opp}} = \sqrt{\frac{1}{N}\sum_{j=1}^{N} RD_j^{2}}$$

where the sums run over the $N$ players on the other team.

Then comes the standard Glicko-2 update. Ratings are first moved onto Glicko’s internal scale:

$$\mu = \frac{r - 1000}{173.7178} \qquad \phi = \frac{RD}{173.7178}$$

$$g(\phi) = \frac{1}{\sqrt{1 + 3\phi^{2}/\pi^{2}}}$$

The chance you were expected to win:

$$E = \frac{1}{1 + \exp\!\bigl(-g(\phi_{\text{opp}})\,(\mu - \mu_{\text{opp}})\bigr)}$$

And the update, where $S = 1$ for a win and $0$ for a loss:

$$\mu^{\prime} = \mu + \left(\phi^{\prime}\right)^{2}\,g(\phi_{\text{opp}})\,(S - E)$$

$\phi^{\prime}$ is your updated uncertainty from the Glicko-2 steps, with volatility starting at 0.06, kept between 85 and 200 RD. The effect: beating a stronger team moves you further than beating a weaker one, and a loss you were expected to take costs little.

The performance bonus

On top of the win or loss, you get a small bonus or penalty for how much you contributed, capped at ±5. First, your impact, measured against the average player in that same match:

$$I = 0.45\,\frac{\text{exiles}}{\overline{\text{exiles}}} + 0.25\,\frac{\text{assists}}{\overline{\text{assists}}} + 0.15\,v + 0.15\,\frac{\text{damage}}{\overline{\text{damage}}}$$

Each bar is the average for that match, so $I = 1$ means “average in this match”. Survival $v$ counts in reverse, so being exiled less scores higher:

$$v = \operatorname{clamp}\!\left(2 - \frac{\text{times exiled}}{\overline{\text{times exiled}}},\ 0,\ 2\right)$$

Never exiled scores 2, twice the average scores 0. Then it is measured against what your rating says you should contribute, where $\bar{r}$ is the lobby’s average rating:

$$I_{\text{exp}} = \operatorname{clamp}\!\left(1 + 0.5\,\frac{r - \bar{r}}{400},\ 0.4,\ 2.0\right)$$

$$b = \operatorname{clamp}\!\bigl(10\,(I - I_{\text{exp}}),\ -5,\ 5\bigr)$$

So a lower-rated player who carries harder than expected gains a little even in a loss, and topping the scoreboard in a lobby you already outrate earns nothing extra. The bonus only counts in matches where the stats are player against player. Bot exiles never feed it.

Uneven teams

If one team is short, because someone left or a match started uneven, the result tells us less about skill. So the whole change is scaled down:

$$w = \frac{\min(n_{\text{yours}},\ n_{\text{theirs}})}{\max(n_{\text{yours}},\ n_{\text{theirs}})}$$

So a 3v3 counts fully ($w = 1$), a 3v2 counts $\tfrac{2}{3}$ and a 2v1 counts $\tfrac{1}{2}$:

$$r^{\prime} = r + w\,\bigl(\Delta_{\text{Glicko}} + b\bigr)$$

Being outnumbered no longer costs you a full loss, and the bigger team isn’t paid in full for winning a fight it should win.

Taking a break

If you stop playing, your uncertainty slowly grows back, so the system re-checks you when you return instead of trusting an old number:

$$RD^{\prime} = \min\!\left(200,\ \sqrt{RD^{2} + 34^{2}\cdot t}\right)$$

where $t$ is the number of weeks since your last team match.

Your old arena results are back

While building this I found that a lot of Dominion and Team Clash results never reached your stats. The scoreboard at the end of each match arrived fine, but it was filed under the wrong match, so the match kept only its roster: no teams, no wins or losses, no exiles. 110 results were affected. The server now puts each result on the match it belongs to, and the old ones are recovered automatically.

Your match history, win/loss record and hi-scores for those modes will fill in with results you already earned. For the rating, this raised the number of usable team matches from 42 to 128, which is what made the balancing numbers above possible.

Fixes

Getting started

Already playing? Relaunch the launcher. It pulls 6.3.6 and updates the game and the mods.

New here? Grab the launcher from elefrac.com, make an account with an email and password, sign in, press Play.

See you in the arena. ⚡

← Toutes les notes de patch