Jump to content
Sign in to follow this  
Nescio

Armour computations

Recommended Posts

On 1/10/2020 at 9:34 PM, ValihrAnt said:

4 armor levels is 34% armor, I'm not exactly sure how that would work out to 52% extra hp but maybe I'm missing something. Additionally armor levels don't scale linearly. 4 armor is 34%, level 5 is 41%, level 6 is 47%, 7 is 52% and so on. Normal spear cav have 4 base pierce armor and champ spear cav have 8 pierce armor, that is 34% vs 57% pierce armor. With armor upgrades those percentage differences become smaller.

Don't get fooled by the numbers displayed in the tooltip. Each armour level reduces damage taken by 10% (i.e. ×0.9). Going from level 1 to 2 is just as effective as going from level 41 to 42. It's not linear, it's exponential, (0.9^x):

+1 level is equivalent to 0.9^-1 = +11.1% health
+2 levels is equivalent to 0.9^-2 = +23.5% health
+3 levels is equivalent to 0.9^-3 = +37.2% health
+4 levels is equivalent to 0.9^-4 = +52.4% health
+5 levels is equivalent to 0.9^-5 = +69.4% health
etc.

[EDIT] For future reference:

armour level , damage taken , health equivalent
 x           , 0.9^x        , 1 / (0.9^x)
 0           , 1.000000     ,   100%
 1           , 0.900000     ,   111%
 2           , 0.810000     ,   123%
 3           , 0.729000     ,   137%
 4           , 0.656100     ,   152%
 5           , 0.590490     ,   169%
 6           , 0.531441     ,   188%
 7           , 0.478297     ,   209%
 8           , 0.430467     ,   232%
 9           , 0.387420     ,   258%
10           , 0.348678     ,   287%
11           , 0.313811     ,   319%
12           , 0.282430     ,   354%
13           , 0.254187     ,   393%
14           , 0.228768     ,   437%
15           , 0.205891     ,   486%
16           , 0.185302     ,   540%
17           , 0.166772     ,   600%
18           , 0.150095     ,   666%
19           , 0.135085     ,   740%
20           , 0.121577     ,   823%
21           , 0.109419     ,   914%
22           , 0.098477     ,  1015%
23           , 0.088629     ,  1128%
24           , 0.079766     ,  1254%
25           , 0.071790     ,  1393%
26           , 0.064611     ,  1548%
27           , 0.058150     ,  1720%
28           , 0.052335     ,  1911%
29           , 0.047101     ,  2123%
30           , 0.042391     ,  2359%
31           , 0.038152     ,  2621%
32           , 0.034337     ,  2912%
33           , 0.030903     ,  3236%
34           , 0.027813     ,  3595%
35           , 0.025032     ,  3995%
36           , 0.022528     ,  4439%
37           , 0.020276     ,  4932%
38           , 0.018248     ,  5480%
39           , 0.016423     ,  6089%
40           , 0.014781     ,  6765%
41           , 0.013303     ,  7517%
42           , 0.011973     ,  8352%
43           , 0.010775     ,  9281%
44           , 0.009698     , 10312%
45           , 0.008728     , 11457%
46           , 0.007855     , 12730%
47           , 0.007070     , 14145%
48           , 0.006363     , 15717%
49           , 0.005726     , 17463%
50           , 0.005154     , 19403%
Edited by Nescio
reference table
  • Like 2

Share this post


Link to post
Share on other sites
On 1/11/2020 at 12:28 PM, fatherbushido said:

Can you provide the detailed computation?

It's quite simple. That each armour level means a 10% damage reduction (i.e. a 0.9^x power exponential law) is clear from:

  • A23: simulation/components/Armour.js 53
  • A24: simulation/helpers/Attacking.js 103

Now health is fundamentally the amount of damage that can be taken. Therefore reducing the damage taken by a factor z is equivalent to increasing the health by a factor 1/z = z^-1. (If every hit inflicts only half the damage, then it'll take twice as long to kill the unit; if the damage per hit remains unchanged but the unit's health is doubled, then it'll also take twice as long to kill the unit.) One additional armour level means ×0.9 (i.e. -10%) damage, which is equivalent to 1/0.9 = 1.11111, i.e. +11.1% health.

The tooltip, however, displays not the percentage of damage taken, but the percentage of damage resisted, hence (1 - 0.9^x) × 100%, which is merely another way of stating the same thing.

The reason 0 A.D. has both armour and health, is because there are different damage types, and entities can have different armour levels for each type. Nonetheless, all auras and technologies currently in game affect all armour levels equally (which is not mandatory), therefore those are basically equivalent to health increases. I'd personally prefer +4 armour levels over +50% health, though, since higher maximum health means the unit takes longer to heal or regenerate.

Edited by Nescio
exponential
  • Like 1

Share this post


Link to post
Share on other sites

Thanks that's that part I wanted to be detailed:

15 minutes ago, Nescio said:

Now health is fundamentally the amount of damage that can be taken. Therefore reducing the damage taken by a factor z is equivalent to increasing the health by a factor 1/z = z^-1. (If every hit inflicts only half the damage, then it'll take twice as long to kill the unit; if the damage per hit remains unchanged but the unit's health is doubled, then it'll also take twice as long to kill the unit.)

I didn't understand what you mean by "+11.1% health". And even after reading the answer I am still unable to formulate it properly.

 

Edited by fatherbushido

Share this post


Link to post
Share on other sites
13 minutes ago, fatherbushido said:

Thanks that's that part I wanted to be detailed:

I didn't understand what you mean by "+11.1% health". And even after reading the answer I am still unable to formulate it properly.

 

Would it make it easier if we'd say that health and armour together result in “survivability”? Or phrase it as time = health / damage?

Share this post


Link to post
Share on other sites
On 1/10/2020 at 10:31 PM, Nescio said:

+1 level is equivalent to 0.9^-1 = +11.1% health

On 1/11/2020 at 1:05 PM, Nescio said:

Now health is fundamentally the amount of damage that can be taken. Therefore reducing the damage taken by a factor z is equivalent to increasing the health by a factor 1/z = z^-1. (If every hit inflicts only half the damage, then it'll take twice as long to kill the unit; if the damage per hit remains unchanged but the unit's health is doubled, then it'll also take twice as long to kill the unit.)

On 1/11/2020 at 1:37 PM, Nescio said:

Would it make it easier if we'd say that health and armour together result in “survivability”? Or phrase it as time = health / damage?

On 1/11/2020 at 1:41 PM, fatherbushido said:

Yes that's it.

Just to precise, when I say "that's it", I mean that you got my wonder. But I am still not convinced.

As a simple situation, let's take Health 50, Attack 52 and an Armour passing from 0 to 1. How can we give a sense to "+11.1% health"?

In fact, the explanation in parentheses has some flaws.

Edited by fatherbushido
dashing false things

Share this post


Link to post
Share on other sites
4 hours ago, fatherbushido said:

Just to precise, when I say "that's it", I mean that you got my wonder. But I am still not convinced.

As a simple situation, let's take Health 50, Attack 52 and an Armour passing from 0 to 1. How can we give a sense to "+11.1% health"?

In fact, the explanation in parentheses has some flaws.

An unit with 50 health and 0 armour would take 52 damage, i.e. -2 health left, thus killed in one hit.

An unit with 50 health and 1 armour would take 0.9×50=46.8 damage, i.e. 3.2 health left, thus surviving the first hit.

An unit with 50/0.9=55.555 health and 0 armour would take 52 damage, i.e. 3.555 health left, same result as above.

Share this post


Link to post
Share on other sites
2 minutes ago, Nescio said:

An unit with 50 health and 0 armour would take 52 damage, i.e. -2 health left, thus killed in one hit.

An unit with 50 health and 1 armour would take 0.9×50=46.8 damage, i.e. 3.2 health left, thus surviving the first hit.

An unit with 50/0.9=55.555 health and 0 armour would take 52 damage, i.e. 3.555 health left, same result as above.

Sure, excuse me, why did I wrote the thing above?

 

Share this post


Link to post
Share on other sites
Quote

why did I wrote the thing above?

Ah yes I recall. I wanted to make it clear something about the meaning of health - that was the whole purpose of our discussion - but I was a bit sick that week so I explained myself badly :confused:.

We work in an isolated context where there is attack of a given value, armour/armor of a given level and health of a given value.

I incurred an attack of value A. What is the benefit on my health H of having  +1 armor? My current hp is multiplied by (H-0.9A) / (H-A) (if A<H).

Is that true? Perhaps. Is that relevant? I don't think so.

What is the benefit on the total amount of attack I can handle of having  +1 armor? The total amount of attack I can handle is multiplied by 1/0.9.

The total health is the total amount of attack I can handle when I have 0 armor. So adding one more level is the same as keeping that level and multiplying the total health by 1/0.9.

That's what Nescio wrote above and which is relevant for us.

Tell me if there are flaws somewhere.

(Now that I write it I recall to have tried to convince someone in the lobby during an hour about that and failing at it - end of my life.)

PS: @Nescio while you are here, have you a nice way to write ("1/0.9." where "." has different meanings)?

Share this post


Link to post
Share on other sites
3 hours ago, fatherbushido said:

(Now that I write it I recall to have tried to convince someone in the lobby during an hour about that and failing at it - end of my life.)

PS: @Nescio while you are here, have you a nice way to write ("1/0.9." where "." has different meanings)?

Perhaps another way to try to explain it is by looking at the attack rate. Most people will agree an attack with 60 damage per hit and a reload time of 4 seconds is equivalent to 15 damage per second. Stating that reducing the reload time by a factor x is equivalent to increasing the damage by a factor 1/x ought to be uncontroversial; e.g. -10% reload time has the same effect as +11.1% damage.

Armour and health function in much the same way as attack time and damage. A reduction in time means an increase in total damage; likewise a reduction in damage per hit means an increase in damage (hits) it can take; e.g. +1 armour (i.e. -10% damage taken) has the same effect as +11.1% health (i.e. damage it can take in total).

Edited by Nescio
Thanks, Stan!

Share this post


Link to post
Share on other sites

Because armour is a power exponential law, differences in armour levels are more consequential then they might seem. Take, for example, the house; the tooltip shows us: Armour: 20 hack (88%), 30 pierce (96%), 3 crush (27%), which although true is somewhat misleading. The difference in hack and pierce is 10 levels, between hack and crush 17 levels, and between pierce and crush 27 levels. Another way of phrasing this is that 1 crush damage is equivalent to 6 hack damage or 17.2 pierce damage.

I doubt many people would have guessed this from the current tooltip, so maybe we should have a tooltip that displays armour-health equivalents (i.e. the total amount of attack damage it can take).

Edited by Nescio
exponential
  • Like 1

Share this post


Link to post
Share on other sites

Oh right, I've found the thread. Thanks for writing it down, I honestly think there isn't more than like 5 players who know what the numbers really mean.

On a side note, I've been with this game for so long that I even remember when this OP armor system got introduced.

  • Like 1

Share this post


Link to post
Share on other sites
19 minutes ago, Nescio said:

Because armour is a power law

Just because you said it 3 times and you like precise things, I think it's more common to say an exponential law here to not have confusion with power law like production time in function of batch size for example.

Well that's my last useless comment of the day!

Edited by fatherbushido

Share this post


Link to post
Share on other sites
4 minutes ago, fatherbushido said:

Just because you said it 3 times and you like precise things, I think it's more common to say an exponential law here to not have confusion with power law like production time in function of batch size for example.

Well that's my last useless comment of the day!

You're completely right, I've now corrected it, thanks for pointing that out!

Share this post


Link to post
Share on other sites

About tooltips, there were discussions long time ago with mainly two schools (and people switching from one to the other):

- emergent behavior with a lot of stats (damage types, spread, ...) in the templates.

- gameplay orientated templates (hard counters, classes).

The idea with the first thing is that you don't have to learn how to play while in the second you just learn the basic rules of the game.

A simple example is with the spread:

- a stat which vaguely do something we could call "physical". Firing in a zone with some kind of spatial distribution then checking if there is something at that place...

- a stat with just the probably to hit. Then if you have decide to hit, it hits.

Showing the first thing in the tooltip appears completely useless.

Showing the second thing in the tooltip appears completely useful.

At some point, there was some kind of hybrid design with diverging intents. I really think that in such kind of game, you should not display all those stats in the tooltips and keeping them in some kind of encyclopedia, structure tree, hardcore extra tooltips panel or whatever.

50 minutes ago, Boudica said:

I honestly think there isn't more than like 5 players who know what the numbers really mean.

;-)

And that's a really interesting comment because you will find more than 5k players complaining about that stat!

  • Like 1

Share this post


Link to post
Share on other sites
2 hours ago, Nescio said:

Because armour is a power exponential law, differences in armour levels are more consequential then they might seem. Take, for example, the house; the tooltip shows us: Armour: 20 hack (88%), 30 pierce (96%), 3 crush (27%), which although true is somewhat misleading. The difference in hack and pierce is 10 levels, between hack and crush 17 levels, and between pierce and crush 27 levels. Another way of phrasing this is that 1 crush damage is equivalent to 6 hack damage or 17.2 pierce damage.

I doubt many people would have guessed this from the current tooltip, so maybe we should have a tooltip that displays armour-health equivalents (i.e. the total amount of attack damage it can take).

1 hour ago, Boudica said:

I don't know what thread this should have been in but thanks for making this table anyway. I've done these computations many times in my head. Also I doubt that there are many people that have an idea what the armor levels means. Even the basic explanation that an extra armor level blocks 10% of the damage could help. This system is much better than simple subtraction, which forces you to make a minimum damage of 1 (I think that's how it was in AoE). However, it's harder to present it clearly to the player.

1 hour ago, Boudica said:

Oh right, I've found the thread. Thanks for writing it down, I honestly think there isn't more than like 5 players who know what the numbers really mean.

On a side note, I've been with this game for so long that I even remember when this OP armor system got introduced.

1 hour ago, fatherbushido said:

;-)

And that's a really interesting comment because you will find more than 5k players complaining about that stat!

Since I'm evidently not the only one, I've decided to write a mod to display “armour-health equivalents” (i.e. the amount of damage they can take) instead of armour and health in the in-game tooltips:

1228591842_Screenshotfrom2020-01-1717-45-48.thumb.png.fb87024c0e308ce5341acfbf1135b1a4.png

What I did was replace the A24 gui/common/tooltips.js getArmorTooltip function with:

Spoiler

function getArmorTooltip(template)
{
	if (!template.armour || !template.health)
		return "";

	return sprintf(translate("%(label)s %(details)s"), {
		"label": headerFont(translate("Armour-health equivalents:\n  ")),
		"details":
			Object.keys(template.armour).map(
				dmgType => sprintf(translate("%(damage)s %(damageType)s"), {
					"damage": Math.round(template.health / Math.pow(0.9, template.armour[dmgType])),
					"damageType": unitFont(translateWithContext("damage type", dmgType))
				})
			).join(commaFont(translate(", ")))
	});
}

Do you think it is an improvement?

Edited by Nescio
spoiler
  • Like 1
  • Thanks 1

Share this post


Link to post
Share on other sites

This feels exactly like the value you wanted to know if you're a pro. And like one that should probably stay hidden from you if you aren't. ;)

I mean, those numbers seem as high and arbitrary as they seem useful. Not sure what could be done about it.

Anyway, great job!

  • Confused 1

Share this post


Link to post
Share on other sites
10 hours ago, Boudica said:

And like one that should probably stay hidden from you if you aren't. 

Exactly!

Though it can be useful for people attempting to “balance” the game (@borg-, @Stockfish, @ValihrAnt, @wowgetoffyourcellphone, etc.).

11 hours ago, Boudica said:

I mean, those numbers seem as high and arbitrary as they seem useful. Not sure what could be done about it.

Normalize them? Use a log? There are possibilities, though I'm not sure they'll make things clearer. The high and arbitrary numbers are at least the anount of attack damage required to destroy the entity.

Share this post


Link to post
Share on other sites

Just showing randomly to say that would be cool that the engine could support both armour calculation designs (not at the same time). But maybe is a hella work (classical AoE armour and exponential levels)

Share this post


Link to post
Share on other sites

Why do all games appear black in multiplayer when enabling this mod? What does fgod, autociv and others do differently to be able to join games that don't have their mod?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...