
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