Table of Contents
- Multiplayer stats
- Calculated by game
- [TR] Tetra Rating
- [GLIXARE] GLIXARE
- [S1 TR] Season 1-like Tetra Rating
- [GLICKO] GLICKO-2 rating
- [RD] Rating deviation
- [WR] Win Rate
- [APM] Attack per Minute
- [PPS] Pieces per Second
- [VS] Versus Score
- Calculated by using fancy math
- [APP] Attack per Piece
- [VS/APM] Versus Score per Attack per Minute
- [DS/S] Downstack per Second
- [DS/P] Downstack per Piece
- [APP + DS/P] Summary of Attack per Piece and Downstack per Piece
- [Cheese] Cheese Index
- [GbE] Garbage Efficiency
- [wAPP] Weighted Attack per Piece
- [Area] Area
- [Est. TR] Estimated Tetra Rating (Outdated for Season 2)
- Playstyle calculations
- Singleplayer stats
[!WARNING] Page under (not active) development.
Players always wanted to improve their skill level. And some people was so obsessed with it, they tried to calculate their skill, using numbers of actions counted by game (ex. placed pieces, passed time, number of inputs, garbage lines) and fancy math.
In TETR.IO, there is a variety of stats. But what are they all mean? Let's figure that's out.
Multiplayer stats
Calculated by game
[TR] Tetra Rating
Main metric, that supposed to show the true skill of player. In second season of Tetra League, osk (or that one particular League of Legends player idk) invented their own (yet proprietary) formula. Publicly known, that median was moved from 12500 to 10000 TR, leaving a lot more space for higher ranks to climb. It does not depends on GLIXARE anymore. Also was noticed, that RD have heavier impact on your rating, than before.
[GLIXARE] GLIXARE
GLIXARE shows your chance of winning against average player (which is considered to have 1500 GLICKO with 350 RD). It's based on GLICKO-2 win probability equation. More info you can found here.
[S1 TR] Season 1-like Tetra Rating
Formula, that was used for the first season of Tetra League. It's based on GLIXARE. So, S1 TR actually shows your chance of winning against average player, which is considered to have 1500 GLICKO with 350 RD (= 12500 S1 TR). Before GLIXARE being added as a stat for Tetra League, TR was calculated with this formula:
S1 TR = 25000 / (1 + 10^(((1500 - GLICKO) * pi / sqrt(3 * ln(10)^2 * RD^2 + 2500 * (64 * pi^2 + 147 * ln(10)^2)))))
The only differences from GLIXARE formula is that 25000 was 10000 in GLIXARE formula and whole equation was rounded and divided on 100.
But now, with GLIXARE available, calculation become much simplier:
S1 TR = GLIXARE * 250
The biggest problem with this formula that it's not linear, those difference in skill between 10k and 12k TR players will be significantly lower, than between 24900 and 24990 TR. Hence, my personal opinion, that it's only useful in building leaderboards, since it takes player's RD into account, unlike leaderboard, based on GLICKO.
[GLICKO] GLICKO-2 rating
Whole GLICKO-2 rating system is a method of assessing a player's strength in competitive games. It described with a bunch of difficult formulas (look here for them), but basically, after each TL match you gain/lose somewhere around rating difference, adjusted with RD. If you win a player with glicko being a lot bigger, than yours, you gain a lot of glicko. If you lose to a player with glicko being a lot bigger, than yours, you lose only a small amount of glicko. Vise versa with a player with glicko, being a lot smaller, than yours.
GLICKO-2 system also has a system constant, responsible for "change in volatility over time". So, yeah, each player has hidden variable, called "volatility", which is high if you successfully compete against higher rated players (or vise versa), and low if you play "on your rating". The value of constant, most likely, was left unchanged (default in KenanY/glicko2-lite implementation - 0.5).
[RD] Rating deviation
That number tells, how the rating system uncertain about player rating. It goes down every played match on some amount, that calculated very weirdly (OR goes up, if glicko difference between players is too big) and goes up by 1 each day after week of inactivity (if RD less, than 350).
RD also has a soft floor of 60 RD, but it's possible to get lower RD by playing big amount of games. If your RD higher, than 100, your rank gets hidden.
[WR] Win Rate
Very very old and inaccurate way to determine players skill. It's just a ratio of wins to played games.
[APM] Attack per Minute
That one is easy to understand. It's just a ratio of attack (sent + cancelled lines) to time (minutes). The only problem is — it's still may be not accurate, since you can send 20 attack in 5 seconds with opener and then have no skill to play midgame, having in total, let's say, 120 APM, or just play good midgame without opener and be really strong opponent with same 120 APM.
[PPS] Pieces per Second
That's also easy. It's a measurement of speed. It's just a ratio of placed pieces to time (seconds). The faster you place pieces, the bigger it is.
[VS] Versus Score
That metric was invented by garbo, accepted by osk and promoted in game, as "general indicator of skill". It calculated with this formula:
VS = [ ( attack + garbage lines cleared ) / pieces ] * PPS * 100
, where constant of 100 here is just for scale.
That metric encourages player for using garbage lines in attacks, as well, as playing efficiently.
Calculated by using fancy math
Only the metrics listed above are available for calculations.
[APP] Attack per Piece
That's a ratio of attack to number of placed pieces. Basically, an efficiency metric.
[VS/APM] Versus Score per Attack per Minute
That's a ratio of versus score to attack per minute. By looking at this metric, you can quickly tell if player is opener main (has low vs/apm) or inf. downstacker (high vs/apm). Minimum possible value is 5/3 VS/APM
[DS/S] Downstack per Second
That metric shows, how fast you clearing garbage lines
DS/S = (VS / 100) - (APM / 60)
DS/S = [ ( attack + garbage lines cleared ) / pieces ] * PPS - APS
, where APS is attack per second
I found a dependence from VS/APM 5/3 VS/APM = 0 DS/S
[DS/P] Downstack per Piece
That metric shows, how efficiently you clearing garbage lines
DS/P = DS/S / PPS
5/3 VS/APM = 0 DS/P
but who cares?
[APP + DS/P] Summary of Attack per Piece and Downstack per Piece
It's literary what is called. Efficiency metric + Downstack metric = Ultimate efficiency metric (???)
[Cheese] Cheese Index
Invented by kerrmunism.
Cheese = (DS/P * 150) + ((VS/APM - 2) * 50) + (0.6 - APP) * 125
As you can see in this formula, Cheese goes up if you downstacking a lot and not attacking at all and it goes down if you play efficiently. This metric can be negative, that's the main reason why i can't compare it with average value.
[GbE] Garbage Efficiency
Invented by Zepheniah and Dragonboy.
GbE = ((APP * DS/S) / PPS) * 2
That formula shows, how efficiently you using garbage in your attacks.
[wAPP] Weighted Attack per Piece
Invented by Wertj.
wAPP = APP - 5 * tan(radians((Cheese / -30) + 1))
Kinda like APP, but Cheese inflates it
[Area] Area
Area = APM * 1 + PPS * 45 + VS * 0.444 + APP * 185 + DS/S * 175 + DS/P * 450 + GbE * 315
It's literary an area of the vs radar graph, but without the Cheese and VS/APM sections
[Est. TR] Estimated Tetra Rating (Outdated for Season 2)
That's a very messy formula based on statistical analysis, that's tries to estimate players TR only based on APM, PPS and VS (actually, also based on some calculated stats above, but they also based on those three metrics).
First, we need to calculate srarea
, which is very similar to Area formula, but has different weights:
srarea = (apm * 0) + (pps * 135) + (vs * 0) + (app * 290) + (dss * 0) + (dsp * 700) + (gbe * 0)
Than, based on that, we calculating our statrank
(with use of arbitrary numbers and trigonometry yaaaay 🥳):
statrank = 11.2 * atan((srarea - 93) / 130) + 1
If statrank
for some reason became equal or lower, than 0 — assuming, that is equal to 0.001.
And then, we calculating temporary variable, that will be used for calculation of estimated glicko:
ntemp = pps*(150+(((vs/apm) - 1.66)*35))+app*290+dsp*700
Now, estimated glicko:
estglicko = 0.000013*pow(ntemp, 3) - 0.0196 *pow(ntemp, 2) + (12.645*ntemp)-1005.4
And finally — estimated TR:
esttr = 25000 / (1 + pow(10, (((1500-estglicko)*pi)/sqrt(((3*pow(ln10, 2))*pow(60, 2))+(2500*((64*pow(pi,2))+(147*pow(ln10, 2))))))))
It's very flawed, since it's enough to get 25K Est. TR by simply playing at 5 PPS with 1 APM.
Playstyle calculations
This is another mess of formulas, that tries to tell, based on your stats, which playstyle you most likely have. Mostly used for building a playstyle radar graph (horoscope).
In game of competitive 4-block stacking game, community brought out 4 main playstyles: Opener, Plonk, Stride and Inf. DS.
Opener — usual for Opener mains. They heavily rely on openers or loops and rarely use garbage for their own attacks. Some of them rely on it that hard, that they can't even play well in midgame — phase, that comes after when opener ends.
Plonk — usual for Plonkers. Those players heavily rely on opponent, who can send him clean garbage. They use that garbage for their own attacks, playing slowly, and then sending big spike on their opponent.
Stride — usual for Striders. The only thing they can do — play fast. They don't distinct Tetra League from 40 Lines.
Infinite Downstack — usual for Infinite Downstackers. They don't send big attacks, they don't go fast. Their only target — clear lines.
Usualy, your playstyle is mixture of those 4 playstyles.
But, before even computing these playstyles, we should calculate normalized stats. What it is? Who cares, it only used for playstyle calculations.
nmapm = ((apm / srarea) / ((0.069 * pow(1.0017, (pow(statrank, 5) / 4700))) + statrank / 360)) - 1
nmpps = ((pps / srarea) / (0.0084264 * pow(2.14, (-2 * (statrank / 2.7 + 1.03))) - statrank / 5750 + 0.0067)) - 1
nmapp = (app / (0.1368803292 * pow(1.0024, (pow(statrank, 5) / 2800)) + statrank / 54)) - 1
nmdsp = (dsp / (0.02136327583 * pow(14, ((statrank - 14.75) / 3.9)) + statrank / 152 + 0.022)) - 1
nmgbe = (gbe / (statrank / 350 + 0.005948424455 * pow(3.8, ((statrank - 6.1) / 4)) + 0.006)) - 1
nmvsapm = (vsapm / (-pow(((statrank - 16) / 36), 2) + 2.133)) - 1
Do notice, that srarea
and statrank
was calculated back in Est. TR calculation process. Now, i bringing in: playstyle formulas.
opener = ((nmapm + nmpps * 0.75 + nmvsapm * -10 + nmapp * 0.75 + nmdsp * -0.25) / 3.5) + 0.5
plonk = ((nmgbe + nmapp + nmdsp * 0.75 + nmpps * -1) / 2.73) + 0.5
stride = ((nmapm * -0.25 + nmpps + nmapp * -2 + nmdsp * -0.5) * 0.79) + 0.5
infds = ((nmdsp + nmapp * -0.75 + nmapm * 0.5 + nmvsapm * 1.5 + nmpps * 0.5) * 0.9) + 0.5
Are those calculations accurate? Depends on what we accept for APM, PPS and VS values. Round stats — probably. Averages of 10 last games — i don't think so, since your playstyle can vary depending on your opponent and skill.
Since those values usually very small (between 0 and 1), Tetra Stats shows them as percentiles. But that doesn't mean that you can't have, for example, opener >1.
Singleplayer stats
In singleplayer player can't send garbage (except zen)(engine still count attack anyway). So, in 40 lines, blitz, zen and custom game we stick with these metrics:
Score
TETR.IO is using a guideline scoring system with additions, which rewards player for actions, that is impossible to do in guideline 4-block stacking games. Player gets rewarded for every lineclear, harddrop and softdrop. Softdrop gives +1 point for every passed cell, while harddrop — +2 per cell. Lineclears rewards listed in the following table:
Lineclear | Score |
---|---|
Single | 100 * Level |
Double | 300 * Level |
Triple | 500 * Level |
Quad | 800 * Level |
Penta | 1200 * Level |
Penta+ | (1200 + 400 * (Lines - 5)) * Level |
T-spin zero | 400 * Level |
T-spin single | 800 * Level |
T-spin double | 1200 * Level |
T-spin triple | 1600 * Level |
T-spin quad | 2600 * Level |
T-spin penta | 3200 * Level |
T-spin penta+ | (3200 + 600 * (Lines - 5)) * Level |
Mini T-spin zero | 100 * Level |
Mini T-spin single | 200 * Level |
Mini T-spin double | 400 * Level |
Perfect Clear | 3500 * Level |
Where Lines means lines cleared by given lineclear. Combo adds 50 * (Combo - 1) * level
to the lineclear score and active BtB — +50% to the lineclear score.
Score per piece
Ratio of score on placed pieces. Efficiency metric for singleplayer modes
Finesse
Finesse by itself is a technique that helps you reduce your keypresses per piece placed, that requires you to place pieces by using least possible amount of inputs. todo... i have finesse tables from tetrio.js
Finesse faults
also todo...
Finesse precentage
A ratio of pieces, placed with good finesse on total placed pieces.
[KP/P] Key presses per piece
Ratio of inputs (or key presses) on placed pieces. Efficiency metric in terms of finesse.