Protection is a positive increase in resistance and is calculated using the following:
total protection[attack_types] += ((100-current protection) x additional resistance) / 100
so if a player has 30 fire resistance and casts the spell Protection from Fire and gains 60 more fire resistance, their total protection would be:
total protection[fire] = 30 + ((100-30) x 60)/100 total protection[fire] = 30 + 42 = 72
As can be seen, the more sources of protection a character has, the less partial resistance each item affords. It is therefore impossible to reach 100 protection without an item that grants 100 protection. Protection cannot exceed 100.
the same formula applies (in reverse) for vulnerability:
total vulnerability[attack_types] -= ((100-current vulnerability) x additional vulnerability) / 100
so if a player has -5 resistance from their god and -15 resistance from their weapon:
total vulnerability[fire] = -5 - ((100-5) x 15)/100 total vulnerability[fire] = -5 - 14.25 = -19
As can be seen, the more sources of vulnerability a character has, the less partial resistance each item affords. It is therefore impossible to reach 100 vulnerability without an item that grants 100 vulnerability. Vulnerability cannot exceed 100.
Resistance is the total protection minus the total vulnerability:
total resistance[fire] = total protection[fire] - total vulnerability[fire]
Combining the above scenario, our player has:
total resistance[fire] = 72 - 19 total resistance[fire] = 53
It should be noted that vulnerability cannot be easily overcome by additional resistance and can have a significant impact even from small total vulnerabilities.