please discuss armour, defense, and attack ideas here
Posted: Mon Mar 07, 2011 8:42 pm
Minions of DarkGod! There have been many whispers recently regarding the effectiveness and behavior of armour and defense; for example, here, here, and here. For every voice out in the open, there are always ten more whispers in the shadows. Come out now and let us aspire to be the cogs of DarkGod's decision making processes! What else are you aspiring for
? Come discuss armour and defense, and think not only of what you wish to see, but of what you believe DarkGod wishes to see, as that is the only way we may make any progress...
By the way, here's a preview of the most radical thing I propose at the end of this post. It's also perhaps the simplest
On to business...
The main issue with defense and attack, it seems, is that the large majority of situations occur in the tails (5% hit chance or 95% hit chance for melee). This means that small differences in defense or attack in these situations have no effect whatsoever! This probably isn't the desired behavior. To illustrate, a typical high defense (for both players and NPCs) is 30, and the highest defense is around 50 or 60. Attack is usually much larger than this. Even an attack of 80 has the maximum chance of hitting (95%) against a defense of 55 if the target is seen. If the target is invisible, however, then an attack of 80 has the minimum chance of hitting (5%) against a defense of 55. Does this seem right to you? With this in mind, I think my next character will focus on invisibility and defense
Susramanian offered an approach to deal with this issue here. The main idea is to keep what ToME already uses, just soften the tails in a reasonable way. Here is one method using Susramanian's approach:Using this method, hit chances that were formerly between 25%-75% remain basically the same. The tails, however, are better behaved (i.e., "Keep it the same... just better!"). A useful rule of thumb for the tails is that if an attack is four times the defense (atk = 4*def), then there is a 10% chance the attack will miss. Moreover, the tails behave linearly such that if you double the attack, there would be a 5% chance of missing, and if you doubled the defense, there would be a 20% chance of missing. It's worth noting that the converse is also true: if defense is four times the attack (def = 4*atk), there is still a 10% chance of being hit. Also, early game dynamics aren't really affected by this, because there are no tails when both attack and defense are small.
Here is a comparison of the methods when the target is seen (contours every 5%): and here is a comparison of the methods against invisible targets (contours every 5%): Hence, the new method using Susramanian's approach is mostly the same... just better!
Armour is a different beast altogether. It has recently undergone major changes, and it is likely to undergo more major changes in future releases. Thus, the most salient questions at this point are "What should armour do? How should it behave?" It was formerly a flat reduction of physical damage, and it is currently a percentage reduction of physical damage. It may be best to have a combination of these two in some way.
I'll illustrate how I think armour should work (and others please chime in how you think armour should work). If you throw a small rock at a person wearing a leather jerkin, they'll certainly feel it and may get bruised. If you throw several small rocks at the same person, they'll probably get seriously injured
. On the other hand, if a person is wearing voratun plate armour, they probably wouldn't even know a rock was thrown at them but for hearing the *clink* against their armour. This argues for a degree of flat damage reduction from armour. In other words, an attack damage of 9 shouldn't do 3 damage against 100 armour (as currently happens); it should do zero or near zero.
Let's consider the other extreme: an uber-powerful voratun greatmaul versus a leather jerkin and, say, steel plate armour. There may not be a large difference against such a powerful weapon, but there should still be a difference between the two armours. This argues, perhaps, for a percentage reduction of damage when incoming damage is larger or much larger than the armour. Again, this is what is currently implemented.
Current damage taken with armour:And here is a method that behaves as I described above, and it remains similar to what is currently done (i.e., "the same... just better!"):Let's compare by looking at percent damage taken, [ouptut damage]/[input damage], (contours every 10%): This is what I think. What do you think? Love the old system? Love the new system? Think it should be completely different? Let us know!

By the way, here's a preview of the most radical thing I propose at the end of this post. It's also perhaps the simplest

Code: Select all
proposed = damage * (1 - 0.01*resistance*(1 + armour/damage) )
The main issue with defense and attack, it seems, is that the large majority of situations occur in the tails (5% hit chance or 95% hit chance for melee). This means that small differences in defense or attack in these situations have no effect whatsoever! This probably isn't the desired behavior. To illustrate, a typical high defense (for both players and NPCs) is 30, and the highest defense is around 50 or 60. Attack is usually much larger than this. Even an attack of 80 has the maximum chance of hitting (95%) against a defense of 55 if the target is seen. If the target is invisible, however, then an attack of 80 has the minimum chance of hitting (5%) against a defense of 55. Does this seem right to you? With this in mind, I think my next character will focus on invisibility and defense

Susramanian offered an approach to deal with this issue here. The main idea is to keep what ToME already uses, just soften the tails in a reasonable way. Here is one method using Susramanian's approach:
Code: Select all
current(atk,def) = 1 / (1 + exp(-(atk-def)/7) ) // this is 99% equivalent to the current method, and simpler
softener(atk,def) = atk / (atk + def)
hit(atk,def) = 50*( current(atk,def) + softener(atk,def) ) // in percentage, [0,100]
Here is a comparison of the methods when the target is seen (contours every 5%): and here is a comparison of the methods against invisible targets (contours every 5%): Hence, the new method using Susramanian's approach is mostly the same... just better!
Armour is a different beast altogether. It has recently undergone major changes, and it is likely to undergo more major changes in future releases. Thus, the most salient questions at this point are "What should armour do? How should it behave?" It was formerly a flat reduction of physical damage, and it is currently a percentage reduction of physical damage. It may be best to have a combination of these two in some way.
I'll illustrate how I think armour should work (and others please chime in how you think armour should work). If you throw a small rock at a person wearing a leather jerkin, they'll certainly feel it and may get bruised. If you throw several small rocks at the same person, they'll probably get seriously injured

Let's consider the other extreme: an uber-powerful voratun greatmaul versus a leather jerkin and, say, steel plate armour. There may not be a large difference against such a powerful weapon, but there should still be a difference between the two armours. This argues, perhaps, for a percentage reduction of damage when incoming damage is larger or much larger than the armour. Again, this is what is currently implemented.
Current damage taken with armour:
Code: Select all
current = damage * 0.99^armour
Code: Select all
proposed = damage * (0.99 - 0.01*armour/damage)^armour