.

Damage Calculation

 
(7 intermediate revisions by one user not shown)
Line 1: Line 1:
Damage is calculated as:
+
At first target's resistances and thresholds are calculated.<br />
 +
After that using this values raw damage is calculated. <br />
 +
If it is higher than zero, [[Bleed]] value is counted.<br />
  
 +
 +
=Damage resistance=
 
TargetDR = Armor + Perks<br />
 
TargetDR = Armor + Perks<br />
TargetDR = (TargetDR* (100 - (10 * HitTheGap) + 30*attacker.Param[TRAIT_FINESSE])) / 100
+
TargetDR = (TargetDR* (100 - (10*HitTheGap) + 30*attacker.Param[TRAIT_FINESSE]))/100<br />
 
+
TargetDT = Armor + Perks<br />
+
TargetDT = (TargetDT * (100 - (10 * HitTheGap) + changeDT)) / 100<br />
+
 
+
PartialBypass % = 60 * Decreaed DR WeaponTrait<br />
+
PartialBypass += 30 + (30 * (55 - ((21 - L) * L) / 2)) / 45<br />
+
PartialBypass -= target.Perk[PE_ARMOR_EFFICIENCY] * 15<br />
+
PartialBypass += 15 * (weaponPerkEff(attack.WeaponPerks, attack.Skill, WP_PIERCING_STRIKE))<br />
+
PartialBypass += 15 * weaponLegendaryEff(realWeapon,WP_PIERCING_STRIKE)<br />
+
PartialBypass += GetLeadershipBoost(attacker,FTLB_MORE_ARMOR_BYPASS)<br />
+
PartialBypass -= GetLeadershipBoost(target,FTLB_LESS_ARMOR_BYPASS)<br />
+
PartialBypass = CLAMP(partialBypass, 0, 100)<br />
+
 
+
 
if (PartialBypass > 0 )
 
if (PartialBypass > 0 )
 
{
 
{
 
TargetDR = (TargetDR * (100 - PartialBypass )) / 100;
 
TargetDR = (TargetDR * (100 - PartialBypass )) / 100;
 
}
 
}
 
 
TargetDR += Ammo.DRMod<br />
 
TargetDR += Ammo.DRMod<br />
 
TargetDR = CLAMP(TargetDR , 0, 100)<br />
 
TargetDR = CLAMP(TargetDR , 0, 100)<br />
  
 +
=Bypass=
 +
PartialBypass += 30 + (30 * (55 - ((21 - target.Luck) * target.Luck) / 2)) / 45<br />
 +
PartialBypass -= target.Perk[PE_ARMOR_EFFICIENCY] * 15<br />
 +
PartialBypass += 15 * (weaponPerkEff( WP_PIERCING_STRIKE))<br />
 +
PartialBypass += 15 * weaponLegendaryEff(WP_PIERCING_STRIKE)<br />
 +
PartialBypass += GetLeadershipBoost(attacker,FTLB_MORE_ARMOR_BYPASS)<br />
 +
PartialBypass -= GetLeadershipBoost(target,FTLB_LESS_ARMOR_BYPASS)<br />
 +
PartialBypass = CLAMP(partialBypass, 0, 100)<br />
 +
 +
=Damage threshold=
 +
TargetDT = Armor + Perks<br />
 +
TargetDT = (TargetDT * (100 - (10 * HitTheGap) + changeDT)) / 100<br />
 
TargetDT = (TargetDT * (100 + Ammo.DTMod)) / 100<br />
 
TargetDT = (TargetDT * (100 + Ammo.DTMod)) / 100<br />
 
TargetDT = CLAMP(TargetDT , 0, 9999)<br />
 
TargetDT = CLAMP(TargetDT , 0, 9999)<br />
  
 +
=Damage calculation=
 
DmgMul = DmgMul * Ammo.DmgMul / 100<br />
 
DmgMul = DmgMul * Ammo.DmgMul / 100<br />
 
DmgMul = (DmgMul * bonusDamage) / 100<br />
 
DmgMul = (DmgMul * bonusDamage) / 100<br />
  
 +
rawMin = weapon.minDMG<br />
 
rawMin += BRD - targetDT<br />
 
rawMin += BRD - targetDT<br />
 
rawMin -= rawMin * targetDR / 100<br />
 
rawMin -= rawMin * targetDR / 100<br />
 
rawMin *= dmgMul / 100<br />
 
rawMin *= dmgMul / 100<br />
 
rawMin *= rounds<br />
 
rawMin *= rounds<br />
 +
 +
rawMax = weapon.maxDMG<br />
 
rawMax += BRD - targetDT<br />
 
rawMax += BRD - targetDT<br />
 
rawMax -= rawMax * targetDR / 100<br />
 
rawMax -= rawMax * targetDR / 100<br />
Line 41: Line 47:
 
rawDmg = Random(rawMin, rawMax)<br />
 
rawDmg = Random(rawMin, rawMax)<br />
  
if rawDmg > 0 )
+
=Bleed calculation=
{
+
if rawDmg was higher than zero, [[Bleed]] is calculated.
BleedCoEff +=  attack.BleedStr + 20 * weaponPerkEff(attack.WeaponPerks, attack.Skill, WP_BETTER_BLEED);
+
BleedCoEff += 20*weaponLegendaryEff(realWeapon,WP_BETTER_BLEED);
+
  
if (BleedCoEff > 0)
+
BleedCoEff += attack.BleedStr + 20 * weaponPerkEff(WP_BETTER_BLEED);<br />
{
+
BleedCoEff += 20*weaponLegendaryEff(WP_BETTER_BLEED);<br />
BleedCoEff -= GetLeadershipBoost(target,FTLB_LESS_BLEED);
+
if (valid(attacker))
+
BleedCoEff += GetLeadershipBoost(target,FTLB_MORE_BLEED);
+
  
BleedDmg = rawDmg *  BleedCoEff / 100;
+
if (BleedCoEff > 0)
}
+
{<br />
 +
BleedCoEff -= GetLeadershipBoost(target,FTLB_LESS_BLEED);<br />
 +
BleedCoEff += GetLeadershipBoost(attacker,FTLB_MORE_BLEED);<br />
 +
BleedDmg = rawDmg *  BleedCoEff / 100;<br />
 +
}
  
int toBleed = target.Param[ST_DAMAGE_TO_BLEED_DR] + 10 * target.Perk[PE_PMS];
+
toBleed = target.Param[ST_DAMAGE_TO_BLEED_DR] + 10 * target.Perk[PE_PMS];<br />
int mitbd = rawDmg * toBleed / 100 + target.Param[ST_DAMAGE_TO_BLEED_DT];
+
mitbd = rawDmg * toBleed / 100 + target.Param[ST_DAMAGE_TO_BLEED_DT];<br />
if (mitbd > rawDmg )
+
if (mitbd > rawDmg )mitbd = rawDmg ;<br />
mitbd = rawDmg ;
+
rawDmg -= mitbd ;<br />
 
+
BleedDmg += mitbd;<br />
rawDmg -= mitbd ;
+
if (bd > 0)AffectBleed(target, BleedDmg );<br />
BleedDmg += mitbd;
+
+
if (bd > 0)
+
{
+
AffectBleed(target, BleedDmg );
+
}
+
}
+

Latest revision as of 19:01, 7 April 2016

At first target's resistances and thresholds are calculated.
After that using this values raw damage is calculated.
If it is higher than zero, Bleed value is counted.


Contents

[edit] Damage resistance

TargetDR = Armor + Perks
TargetDR = (TargetDR* (100 - (10*HitTheGap) + 30*attacker.Param[TRAIT_FINESSE]))/100
if (PartialBypass > 0 ) { TargetDR = (TargetDR * (100 - PartialBypass )) / 100; } TargetDR += Ammo.DRMod
TargetDR = CLAMP(TargetDR , 0, 100)

[edit] Bypass

PartialBypass += 30 + (30 * (55 - ((21 - target.Luck) * target.Luck) / 2)) / 45
PartialBypass -= target.Perk[PE_ARMOR_EFFICIENCY] * 15
PartialBypass += 15 * (weaponPerkEff( WP_PIERCING_STRIKE))
PartialBypass += 15 * weaponLegendaryEff(WP_PIERCING_STRIKE)
PartialBypass += GetLeadershipBoost(attacker,FTLB_MORE_ARMOR_BYPASS)
PartialBypass -= GetLeadershipBoost(target,FTLB_LESS_ARMOR_BYPASS)
PartialBypass = CLAMP(partialBypass, 0, 100)

[edit] Damage threshold

TargetDT = Armor + Perks
TargetDT = (TargetDT * (100 - (10 * HitTheGap) + changeDT)) / 100
TargetDT = (TargetDT * (100 + Ammo.DTMod)) / 100
TargetDT = CLAMP(TargetDT , 0, 9999)

[edit] Damage calculation

DmgMul = DmgMul * Ammo.DmgMul / 100
DmgMul = (DmgMul * bonusDamage) / 100

rawMin = weapon.minDMG
rawMin += BRD - targetDT
rawMin -= rawMin * targetDR / 100
rawMin *= dmgMul / 100
rawMin *= rounds

rawMax = weapon.maxDMG
rawMax += BRD - targetDT
rawMax -= rawMax * targetDR / 100
rawMax *= dmgMul / 100
rawMax *= rounds

rawDmg = Random(rawMin, rawMax)

[edit] Bleed calculation

if rawDmg was higher than zero, Bleed is calculated.

BleedCoEff += attack.BleedStr + 20 * weaponPerkEff(WP_BETTER_BLEED);
BleedCoEff += 20*weaponLegendaryEff(WP_BETTER_BLEED);

if (BleedCoEff > 0) {
BleedCoEff -= GetLeadershipBoost(target,FTLB_LESS_BLEED);
BleedCoEff += GetLeadershipBoost(attacker,FTLB_MORE_BLEED);
BleedDmg = rawDmg * BleedCoEff / 100;
}

toBleed = target.Param[ST_DAMAGE_TO_BLEED_DR] + 10 * target.Perk[PE_PMS];
mitbd = rawDmg * toBleed / 100 + target.Param[ST_DAMAGE_TO_BLEED_DT];
if (mitbd > rawDmg )mitbd = rawDmg ;
rawDmg -= mitbd ;
BleedDmg += mitbd;
if (bd > 0)AffectBleed(target, BleedDmg );

(Difference between revisions)
Jump to: navigation, search