Jump to content

Using a percentage for armour (discussion)


Recommended Posts

I like the current system :D It's straightforward, and doesn't lead to counter-intuitive cases like a wooden shield absorbing 50% of the blast from a nuclear bomb.

In reality mechanically "dealt damage" (so not considering lasers or nuclear bombs) and the "reduction" of it by other material depends on the force divided through the area it is focused on and the absorbing materials hardiness to be deformed. So for weapons of the 0 A.D. time-frame that would mean piercing weapons might deal less damage to a body but get absorbed much less by armor also. It indeed extremely depends on the angle an attack hits because the absorbing material might be a lot thicker in that direction than it's thickness normal to it's surface. Such complex considerations might be helpful for RPG/H&S games but due to a lot harder balancing it seams unsuitable for RTS games to me.

Besides: It is hardly intuitive that the damage dealt to a catapult is considered when hitting the catapults wooden frame (like it is considered for armor values as it seams). I pretty much doubt that (non-fire) arrows where used to destroy the catapult but to kill the operating crew. So the armor values of catapults against piercing attacks are much to high IMO. On the other hand an axeman could disable a catapult with a single blow by cutting an essential rope. So non-tank mechanical units are quite vulnerable to attacks - that's why they where heavily guarded.

Edited by FeXoR
Link to comment
Share on other sites

Okay, you guys convinced me. Of course there is the difficulty about the method of calculation, but it's not like any player needs to know how it's done, i see now. And if the player ever wants to know how it's done, it'll probably be for complex calculations about if this or that upgrade is better and this kind of players generally have high level maths.

And yes, Warcraft 3 used it, but it didn't use "upgrade 10% of this armor", it was more like "add 1 armor point to every unit with this kind of armor"

And zoot, that is why the attack itself had a damage value range, instead of the absolute value, in wc3. And the percentage simulates the average protection of the armor.

Link to comment
Share on other sites

And yes, Warcraft 3 used it, but it didn't use "upgrade 10% of this armor", it was more like "add 1 armor point to every unit with this kind of armor"

What should "upgrade 10% of this armor" mean? That's what this discussion is about.

In WC3 "add 1 armor point to every unit with this kind of armor" exactly means "reduce the damage compared to the damage done before the upgrade by 8% (to every unit with this kind of armor)" (in our example it would be 10%).

Edited by FeXoR
Link to comment
Share on other sites

And zoot, that is why the attack itself had a damage value range, instead of the absolute value, in wc3. And the percentage simulates the average protection of the armor.

Seems like substituting one simulation for another - the current armor value is also just a "simulated average".

Link to comment
Share on other sites

Sry, zoot, forgot to point out that in general you are right: Armor is more like subtraction than multiplying (with a number smaller than 1) the force of an attack (in context of games referred to as "damage"). How balanced a game is on the other side mainly effects its "playability" IMO and with it the amount of fun playing it grants. So making it "easy" to balance to me is equivalent to making it more fun. I like fun games ^^.

I don't have any objections though if anyone wrote a physics engine and abandon all the game rules that got obsolete with it! I just don't think that will happen...

(On the second thought I can't remember a game based on a physics engine - e.g. total annihilation - that was as much and as long fun to play as games with a more "synthetic" ruleset - like Starcraft, Warcraft 3 or Age of Empires 2: AoK/AoC)

Edited by FeXoR
Link to comment
Share on other sites

I think showing the armor value (that might seam arbitrarily to some PPL) and the percentage damage reduction would be fine for most PPL like:

Armor (Damage reduction)

1 (10%)

2 (19%)

3 (27%)

4 (34%)

5 (41%)

...

Only showing the armor value in the GUI and the percentage damage reduction in the tooltip/mouseover and adding an explanation to the manual would do IMO.

Note that Warcraft 3 was and is a very popular game and uses that as well. Most players are not at all interested how a game works in sense of game rules and are just happy when they works fine. They don't notice/care "why" it is fine in most cases IMO (sorry if I do the gamers wrong but that's my experience).

So focusing on good game rules while making the GUI as informative as possible and explaining them to interested PPL in the manual seams the best way to go for me. The game rules should not depend on the average understanding of math but on the fun PPL have in average playing this game. Most will find out by try how the game "works" anyway rather then calculating everything before actually playing.

I like how it is presented here. Perhaps then, we present the armour techs under the terminology of "levels"? So, even though the game is using percentages, it is presented to the player as:

Pierce Armor Level 1 (10%)

Pierce Armor Level 2 (19%)

etc.

I could definitely support something like this. My main concern was how the exponential system would be presented to the player, and presenting it something like above would pretty much solve everything for me.

Link to comment
Share on other sites

So we'd be limited to 9 levels of armor?

There is no need to stick with integers or we can switch to a 0.95 base to provide more granularity. I think we should just show the percentage in the UI.

As I understand it there would be diminishing returns, but armor level 50 would be essentially the same as armor level 9000.

No, the return remains constant. With 99% armour you take 10 ties less damage than with 90% armour. Each armour point reduces the damage taken by a fixed multiplier. Level 50 would be silly levels of armour strength so enemies would need to deal 200 damage for every hit point reduction. level 9000 armour is absolutely ridiculous needing 10^409 damage for every hit point reduction.

Unless by essentially the same you meant it basically becomes impenetrable beyond a certain point.

Link to comment
Share on other sites

That's another very nice thing with exponential armor increase: There is no limit in armor "level"! And it always reduced the same amount of damage compared to the last level no matter how high it is (of cause only if the accuracy of the calculation allows it. Even integers would give a reasonable accuracy until armor 25 (93%). Changing to float values would be good though).

Level 50 would be silly levels of armour strength so enemies would need to deal 200 damage for every hit point reduction. level 9000 armour is absolutely ridiculous needing 10^409 damage for every hit point reduction.

That's not necessarily true. If damage scales the same way per upgrade this would work too. Just the hitpoints would look poor compared to the extreme damage that would be dealt then. Still units would need the same amount of hits to kill each other due to the extreme damage reduction on the other hand.

Edited by FeXoR
Link to comment
Share on other sites

No, the return remains constant.

Perhaps I'm misunderstanding, but using FeXoR's suggested formula:

damagereduction(armor) = round(100 * (1 - pow(0.9, armor)))

If we translate to JS and plug in the numbers:

damagereduction(50) = Math.round(100 * (1 - Math.pow(0.9, 50))) = 99

(link)

damagereduction(9000) = Math.round(100 * (1 - Math.pow(0.9, 9000))) = 100

(link)

Or if we use armor level 51:

damagereduction(51) = Math.round(100 * (1 - Math.pow(0.9, 51))) = 100

(link)

100% damage reduction for armor level 51 versus 100% damage reduction for armor level 9000 is what I mean by "essentially the same". Of course one can always discuss whether more than 50 levels are needed, but it's a valid point that there is a limit.

Edited by zoot
Link to comment
Share on other sites

zoot, it's the math.round that does that. As said in the last post integers (for percentage damage reduction) give only sane values up to armor 25 or so. If the calculated damage reduction is not rounded but changed to float, however, it will work much further (about 5 times as much armor per additional decimal precision so 32 bit float values would allow 2M armor [5 ^((2^32)^0.1) ~= 2649998]).

Armor 101 reduces the damage compared with armor 100 by the same amount than armor 1 would compared to armor 0 - the unit gets 10% less damage:

Armor 0: 0.9^0 = 1

Armor 1: 0.9^1 = 0.9

Compare armor 1 to armor 0: 0.9 / 1 = 0.9 <- gets 10% less damage than before.

Armor 10: 0.9^10 = 0,3486784401

Armor 11: 0.9^11 = 0,31381059609

Compare armor 11 to armor 10: 0,31381059609 / 0,3486784401 = 0.9 <- gets 10% less damage than before (Though the % damage reduction only changes by 3.5 percent points but that's exactly the idea)

And it will be the same for armor 101 compared to 100.

Edited by FeXoR
Link to comment
Share on other sites

  • 2 weeks later...

I have a crazy idea

why not have the percentile be a hit/miss chance instead of percentage damage taken.

seems kind of silly for some armored soldier to get run through with a spear and take 50% damage from it. I feel like a chance between all or nothing would better reflect a realistic combat mechanic

I feel like this sort of thing would work well with formations too where it's blocking oncoming attacks but is vulnerable to rear attacks

  • Like 1
Link to comment
Share on other sites

I have a crazy idea

why not have the percentile be a hit/miss chance instead of percentage damage taken.

seems kind of silly for some armored soldier to get run through with a spear and take 50% damage from it. I feel like a chance between all or nothing would better reflect a realistic combat mechanic

I feel like this sort of thing would work well with formations too where it's blocking oncoming attacks but is vulnerable to rear attacks

See http://www.wildfiregames.com/forum/index.php?showtopic=14516

I'm also in favor of this idea, but perhaps it belongs in Part 2 so we can get the details sorted out a bit better. Also, it really depends on proper formations and perhaps larger numbers of units than 300.

Link to comment
Share on other sites

  • 4 weeks later...

I have a patch for exponential armor at #1908. It implements the formula and makes a couple of GUI changes to show both the armor level and the percent reduction. It does not change any unit stats though, so if you do test it, expect some of the stats to be a little weird (mostly that everything has slightly higher armor than it should).

Link to comment
Share on other sites

  • 2 months later...

alpha123: Thanks for this patch!

Any drawback in performance to speak of?

Now that exponential armor is in I'd recommend to do the same for damage upgrades.

Damage would be then calculated like: BaseDamage * 1.2 ^ numberOfDamageUpgrades

(Again 1.2 is just an example and could be any number greater than 1. It should just be slightly greater though)

This is a lot less needed then the armor upgrade change but has the following advantages:

- Balancing will be a lot easier because everything scales independent on the number of upgrades

- An upgrade effects all units (this upgrade applies to) the same. (This only is true if floats would be used for damage and health but using floats only for the calculation of health loss while base damage and health stay integers would be fine as well)

What to keep in mind:

- It still might be good to scale up base damage and health by a factor of 10. That way we'd get at least another decimal point precision (while keeping base damage and health as integers). That is not really needed though as you can see below.

- I chose 1.2 as a basis because a damage upgrade is than stronger than an armor upgrade (To be equally strong it would have to be 1/0.9 = 1.11...). That way battles become more rapid with the game time (after 5 damage and armor upgrades combat will become about 1,5 times as fast/deadly). As is now (absolute damage upgrades and exponential armor upgrades) battles will take longer later in game.

- Although base damage could stay integer it might be good to show the damage in the GUI with 2 decimal point numbers. In the bottom center of the screen (with one unit type selected) just 1 value could be shown e.g. if a unit type got 7 base damage and 1 armor upgrade effects this unit type it could say "8.4 Damage". In the mouse-over a simplified calculation (with base damage + damage gained by upgrades) could be shown like "7 + 1.4 Damage" while in the manual the exact formula could be mentioned with an example for a unit type (or for all units a detailed description with a table or the calculation for all possible upgrades and the resulting damage e.g. "1 Damage Upgrade: 7 * 1.2^1 = 7 + 1.4 = 8.4, 2 Damage Upgrades: 7 * 1.2 ^ 2 = 7 + 1.4 + 1.68 = 10.08 and so on).

For me a main reason why I'd like to have this is because I like consistency ;)

Edited by FeXoR
Link to comment
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.

 Share

×
×
  • Create New...