Neocron resistance calculation and how it really works - Part I
The resistance calculations are one central point in Neocron, but beside the nearings in NSkill not much is really known about it.
For NSkill 2 we are trying to get a better understanding of the formulae used in neocron, and naturaly this includes the way how the damage reductions are done in detail.
- Calculation of the raw damage value
- Each weapontype has a definition which damagetype and how much of that damage will be caused - relatively. This value will be refered as “WeaponTypeEffect” in the following.
- Each weapon has a link to the weapontype and a constant modifier that defines how strong that weapon is within this weapontype, this value will be refered as “WeaponEffect”
- Depending on the character skills and the itemstats a “ItemDamagePercent” is calculated that shows the effectiveness of the specific item. This is the same dmg% shown in the info dialog (allthough containing the hidden decimal fractions)
With this information we can calculate the raw damage a player will do on instant damages:
RawDamage = WeaponTypeEffect * WeaponEffect * dmg%/100
- First possible reduction: PSI Resistance
If the damage cause was a PSI module, then (and only then) the damage will be reduced dependend on the PSI-Resistance skill of the victim. So far so known.The formular used for this reduction is split into two cases (I will refer the result as SkillEffect)
- PSR < 75:
The reduction % is calculated as (PSR / 75.0) * 0.7 * 0.3 * 100 - PSR >= 75:
The reduction % is calculated as (pow((PSR-75) * 0.03125, 0.666) * 0.3 + 0.7) * 0.3 * 100
This SkillEffect is hard-capped at 30%
With PSR = 107 (*) the SkillEffect reaches 30% the first time. Any more points spent in to this skill have absolutely no effect for resisting PSI.So that the damage after the first reduction will be
RawDamage * (1.0 - SkillEffect/100)(*) because in reverse : pow((30 / (100 * 0.3) - 0.7) / 0.3 , 1/0.666) / 0.03125 + 75 = 107
- PSR < 75:
:edit: the PSR Formular >= 75 corrected (transfered faulty from script)
Thanks for pointing that out spiro
:edit: Updated the formular again with something i had overseen.