League of Legends is clearly not about peace and love. Each second of the game damage is being generated from various sources. Everyone knows damage. Everyone values damage. Damage is undoubtedly one of the main numbers in League of Legends.

Damage value represents one’s fighting capability and effort put in diminishing enemies’ health bars. It enables, therefore, fighting based comparison between players or teams. Analyzing damage also helps understanding the source of victories and failures. All this undeniably makes damage an utterly important stat for League of Legends analytics. Although, to benefit from intel that damage stats provide it’s key to understand its difficulties and limitations.

Current data-state

Right now, the most common source of data is Riot API. Besides that, there is really not much left. Input-based data collection is extremely inefficient in as complex environment as Summoner’s Rift. Teams and their analysts, fan-made sides, LoL apps etc. all base on Riot API as their only data source. Riot Games in API share some of their in-game data for the public, non-commercial use. However, in regard of professional, accurate analytics it is, to put it mildly, severely lacking.

Riot API damage data is the same as in endgame summary screen: for each player his damage dealt and received, divided into magic/physical damage and separately showing the part dealt to/received from enemy champions. This values concern the whole game. Not only professional analysts can see Riot API shortages but first things first: let’s see how currently damage is presented and analyzed.

Community, including Riot esports broadcasting, in a vast majority use two main damage-based indicators: damage per minute (DMG/M) and damage share (DMG%). Damage per minute is calculated as damage dealt divided by game length. Damage share, on the other hand, is calculated as player’s damage dealt divided by his team’s total damage. Damage per minute can tell how much damage player was able to do whilst eliminating game length factor that direct total damage is biased by. Analysts know that low DMG/M is not always bad and high DMG/M is not always good. It depends on the game “style”. Some games are sheer bloodbaths, some however more strategy-oriented with objective play instead. The former would have high DMG/M and the latter low DMG/M. Here is where damage share comes in handy: it shows how big was player’s contribution to his team’s total damage. If a game was fight-heavy both player’s and total team’s damage should be high.

Analysts recommend that DMG/M and DMG% should be shown together because they complement each other and show fuller picture of one’s damage performance. This is true, but sadly yet far from accurate analytics…

Why are current damage measures not entirely correct

To picture why are current API-based measures concerning damage not precise I will use a few examples that in my opinion are the best way to illustrate their drawbacks.

At first, let’s imagine two similar games in which blue team has only 1 player – AD carry, whereas red team has 5 dummies. In both games AD carry player goes 1v5 and scores 5 kills singlehandedly. At the start of both fights dummies have full health bars. The only difference is that in first game he does so @20 minutes whilst in the second @50 minutes. Dummies @20 minutes have level 11 and @50 minutes – level 18. Games are finished at 51 minutes on the clock. No other damage happen except the two fights. The nature of DMG/M implies that second game’s marksman would have higher DMG/M than the former with both games having similar “style” with only one fight red team being completely butchered in. In this example DMG% in both games for the blue team player would be 100%, correctly equating their impact. Let’s wait with the conclusions for now and move straight to the second example.

The second instance concerns one game, where there are two blue team players: AD carry and a jungler whilst the red team has 5 dummies again. Once more only two fights happen with no other damage throughout the game at all. First TF happen @20 minutes involving jungle player and 5 dummies. He scores 5 kills sweeping entire enemy team 100 to 0. AD carry player did not commit to the fight at all. Second fight happens @50 minutes and involves the AD carry and 5 dummies from the red side. Blue team’s jungler at this moment is AFK at the fountain. AD carry on his own scores 5 kills on the dummies, bringing down their health bars from full to 0 and destroys their nexus. No damage besides those two fights has been dealt this game. Dummies @20 minutes had level 11 with 2k HP and @50 minutes had level 18 with 4k HP. Game ended @51 minutes. Damage summary for this game would be the following:

Game length Damage to champions DMG/M DMG% Jungler 51 10 000 196 33% AD carry 51 20 000 392 67% TOTAL 51 30 000 588 100%

Both DMG/M and DMG% are significantly higher for the AD carry player than they are for the jungler only because it was later in the game so naturally damage values player can do and which are needed to score kills are much higher. This is unfair for the jungler because his efforts in terms of damage were the same as his teammate’s – both of them brought 5 players’ health bars from 100 to 0.

One last example to add yet more problems on top. To skip the introduction I will pick my first example of two games with an AD carry player and 5 dummies. This time fights happen @50 minutes and both AD carry players have the same build, champion, runes, level – everything. The difference is: dummies in the first game have 6 Chain Vests whilst in the second game they carry 6 Giant’s Belts. The damage score after bringing down all opponent dummies is inappropriately in favor of the second AD carry.

In each of above examples compared players contributed the same. They might have done similar or even identical number of auto attacks to kill the dummies without using any abilities. Time needed to take all the opponents down might have been equal as well. Still, damage measures lean towards specific one:

Dealing damage in later stages of the game Dealing damage to less resist-heavy and more health-heavy targets

Out of doubt, described examples are generated in a vacuum. Real in-game circumstances are much more complex with numerous frequently shifting variables. Regardless, those bias factors are present and influential for the final endgame summary screen score and the damage measurement overall. Right now we all compare players in terms of damage using DMG/M and DMG% not knowing how much the differences represent true effort and how much is it about late game damage and resist/health ratio biases. According to my thesis, scaling champions should benefit in damage measures from having long games, whereas short ones put them in a disadvantage. To take proper conclusions while looking at damage measures they need to base on some point of reference representing the amount of damage that’s achievable given moment.

Halfway solution

At first, I want to introduce my halfway solution to the problem. The reason why to even introduce halfway solution is because it seems easier to implement and use database-wise and in terms of data loading and transformation. In other words it does not require that much work to set up and maintain as well as it occupies relatively little memory space.

What needs to be tracked and reported per minute is each individual player’s damage to champions and both teams’ total health. Then at each minute of the game player’s damage to champions should be divided by enemy team’s health. Obtained value, which I named Minute Health Fractions (MHF), in game’s total would represent how many average 5-men full health bars player was able to take down. Below table is an example of calculations for a one player (values were fabricated at random). It should be repeated for each player and can of course be done for a team in total as well. An accurate, comparable measure would obviously be rather an average of Health Fractions than a sum because a sum would mimic total damage dealt and its game length bias.

Minute Enemy team’s health Player’s damage to champions this minute Total enemy Health Fractions (HF) 1 2500 0 0,00 2 3000 200 0,07 3 3000 650 0,22 4 3400 700 0,21 5 4200 800 0,19 … TOTAL MHF 10,00

I called this approach a halfway solution for a reason. It does overpower the problems classic damage measures are burdened with but it has some of its own. To start with, a minute interval reporting lacks precision. For example, a team could do a 5-men reset – recall to base and spend all their gold on health. If, unfortunately, this happens just before the next minute then this particular minute’s HF would be understated due to a high increase in enemy team’s health that clearly was not an “achievable damage” this minute. What distorts this measure even more is too little connection of the “achievable damage” to one’s lane opponent. An extreme example in this case would be laning against a resist-heavy opponent while the rest of his team would be health-heavy. The early game’s HF for a laner put in this specific situation would be unavoidably not correct.

All in all, this method of calculating Health Fractions, while being a good solution to current damage measures’ problems, has some flaws that can’t be denied. A true analyst will always seek an unquestionably proper analytics kit, therefore I’ve mentioned this approach mostly just as an introduction to a direct solution.

Direct solution

Proper Health Fractions calculation needs to be different than presented above. Instead of per minute reporting, what should be done is capturing each event of a player receiving damage. A table created this way would have a lot of rows: one for each time a minion, monster, turret, player’s auto attack or ability damage any champion in a game. Table should consist of the following columns (for a single game):

Event no. Event time Victim (only champions, specified player) Damage source from the following list: Minion Monster Turret Champion/Player (specified) Other (e.g. self-damaging abilities) Damage value Victim’s total health (at the event’s exact time) Health Fractions calculated as 5 / 6

To report damage dealt for a specific player sum up 7th column value having 4th column filtered by this player. I called this measure Health Fractions Dealt (HF+). Similar measure concerning damage received can be created as well. To do that a player should be filtered in 3rd column. Calculated this way Health Fractions Taken (HF-) can be farther narrowed to a specific damage source, e.g. only damage received from champions using 4th column.

Both HF+ and HF- (game totals) possess the game-length bias similar to total damage value. Therefore, I recommend for HF+ and HF- to be replacing a raw damage value in damage measures. Consequently, instead of DMG/M and DMG% we should use HF+/M with HF+%. Additionally, we can put HF-/M with HF-% alongside to analyze damage-receiving as well.

Unlike MHF, HF+ is not based on total enemy team’s health but concern an actual victim’s health. This means that damaging squishy targets is much more “valuable” than scratching tanks. One more way to describe HF+ is that it represents a sum of target champion health bars (fractions of them) analyzed player was able to diminish. Bursting down half of a tank’s health in terms of HF+ is worth the same as half of a squishy target (0,5 HF+) even though directly it is a lot more health. Although mentioned equation can raise some doubts, I will still insist on that it is the proper way to look at damage and its influence to the game. Why would taking down half of carries health be worth less fighting-wise than doing the same to a tank? Taking down squishes is both less frequent (carries position themselves no to die too easily) and more impactful (getting rid of a damage dealer is way more beneficial than taking down a tank), thus should be highlighted. Assassins will finally be able to prove their worth in damage stats.

Other damage-based measures to be used

I would like to introduce one more idea that in my opinion can be useful in League of Legends damage analytics as it reveals useful information that right now is not quite achievable. The issue it is related to has been already described above – resistances bias to damage. At this stage of the article it should be clear that standard damage measures will not give a proper answer whether champion tanked a lot of damage or not, mostly due to resistances bias. We could use HF-/M and HF-% but it does not tell the whole story. When having low HF- as a tank it is still uncertain whether that comes from health or resistances. Distinguishing between those two factors is mostly useful for assessing builds.

My recommendation to solve this problem is to alongside standard “effective” damage, report “ineffective” damage. Ineffective damage means counting how much damage was released to The Rift. We know that there is a formula in League of Legends for receiving damage which includes resistances. Ineffective damage overcomes this calculation and says: this is the amount of damage a target would receive when having no resistances. Just like true damage – a whole clip to the chest.

Having distinction between effective and ineffective damage enables numerous new ways of analyzing damage by neglecting resistances bias. Simple effective/ineffective damage ratio can alone stand for an answer if tank’s and damage dealer’s builds were chosen correctly. As a team stat it can alert when a team was heavily countered due to being too much physical or magic damage oriented. Maybe even another Health Fractions stats should be calculated using ineffective damage so that it would reveal really active damage dealers who have been shut down due to questionable build or comp.

For sure there are many more ways of using this statistic. It’s pretty neat.

Final thoughts

Esports has a head start over traditional sports in terms of analytics. It does not need any motion capture, GPS technologies or whatsoever to get the necessary data. Everything is digital thus can be obtained from the records. We truly need a complete and extensive data warehouse from which comprehensive, effective and progress-oriented analytics will just come out naturally.

My goal with this article was to mark out that damage measures we use are biased and we should replace them with more appropriate ones. Sure, it is easier as it is now. First, Riot would have to enable such calculations. Second, everyone would have to understand new, more complex measurement. Third, work on replacing current know-how. Despite all that, to me it is still worth. In essence, it is a decision between pretending it’s okay and facing the bitter truth.