Dota 2 Itemisation for effective hp optimisation

The amount of physical damage a hero can take is determined by the number of hit points (hp) and his or her armour value (armour).

At any time, we are provided with this information when selecting the hero (sylla-bear in mind armour provided or reduced by auras or buffs or debuffs).

The hp and armour value can be used to derive a function for the effective hp (ehp) of a hp / armour combination.

Putting the fun in functions!

# The left hand side is the name of the function. The body of the function is in the {curly} brackets and shows the underlying mathematics. The words in normal brackets are the (inputs) or arguments of the function.

# Calculate the damage reduction provided by the armour value.
# ________________________________________________

damred <- function(armour){ ((0.06 * armour) / (1 + (0.06 * armour)))
  
} 

# The factor by which to times your current hp to get your effective hp given your amour value.
# ________________________________________________
hp.multiplier <- function(armour){ ((1) / (1 - damred(armour)))
                                   
}                              

# Calculates effective hp by multiplying hp.multiplier (armour considered) by current hp.
# ________________________________________________

ehp <- function(hp, armour){ hp * hp.multiplier(armour)
                         
}                 

Given the nested function ehp( ) we can answer specific questions on the always-wonnna-fly.

A case study

For example, say I am carrying as Rotund’jere aka Necrophos, and I am concerned about getting burst down by Rexxar stun into pesky right clicks, should I spend 1100 gold on a vitality booster (+ 250 hp) or 1400 gold on a platemail (+ 10 armour).

I am sitting on 834 hp and 6 armour with treads, wand, basi at level 7. If i subtract my current ehp from my ehp after the item has been purchased then it will reveal how much ehp extra that item is giving me. I can store the output of this in some sensibly named objects like vitality_booster and plate.

# The left hand side is my new hp and armour given the item in question, the right hand side  my current hp and armour.
vitality_booster <- (ehp (hp = 834 + 250, armour = 6) - ehp(hp = 834, armour = 6))
plate <- (ehp (hp = 834, armour = 6 + 10) - ehp(hp = 834, armour = 6))

print(vitality_booster)
## [1] 340
print(plate)
## [1] 500.4

The platemail seems to be a superior choice, however we have ignored the price of the item. How much ehp increase do we get per unit of gold spent?

vitality_booster / 1100
## [1] 0.3090909
plate / 1400
## [1] 0.3574286

The platemail is still a better choice but less resoundingly, given the extra 300 gold investment. Further pontification (I am the pope of pestilence afterall!) suggests that I am likely to get off at least one Death Pulse and the associated 130 hp heal. Compared to the vitality booster this heal gives me:

# Notice how R knows that the left or first argument is the hp and the right is the armour without me specifying with hp = or armour = .
ehp(130, 16) - ehp(130, 6)
## [1] 78

So for every Death Pulse I get off I will survive an extra right click at this stage of the game. Just as I feel confident with my decision I notice Furion dagon an ally… Vit booster it is!

Take away message

Given the ehp( ) function I am sure you are posing lots of interesting questions as well as considering the limitations of this approach. Magic damage is ignored by this kind of reasoning but hopefully combined with years of Dota mastery and decision tools such as this you can make informed decisions about your Dota playstyle.

Who knows, you may even start a trend to envy. Just look at the double ring of protection offlane ranged heroes…

Dota is hard.