.

Damage Calculation

Line 1: Line 1:
At first target's resistances and thresholds are calculated.
+
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=
 
=Damage resistance=
 
TargetDR = Armor + Perks<br />
 
TargetDR = Armor + Perks<br />
TargetDR = (TargetDR* (100 - (10 * HitTheGap) + 30*attacker.Param[TRAIT_FINESSE])) / 100<br />
+
TargetDR = (TargetDR* (100 - (10*HitTheGap) + 30*attacker.Param[TRAIT_FINESSE]))/100<br />
 
if (PartialBypass > 0 )
 
if (PartialBypass > 0 )
 
{
 
{
Line 11: Line 14:
 
TargetDR = CLAMP(TargetDR , 0, 100)<br />
 
TargetDR = CLAMP(TargetDR , 0, 100)<br />
  
 
+
=Bypass=
 
+
TargetDT = Armor + Perks<br />
+
TargetDT = (TargetDT * (100 - (10 * HitTheGap) + changeDT)) / 100<br />
+
 
+
 
PartialBypass % = 60 * Decreaed DR WeaponTrait<br />
 
PartialBypass % = 60 * Decreaed DR WeaponTrait<br />
 
PartialBypass += 30 + (30 * (55 - ((21 - L) * L) / 2)) / 45<br />
 
PartialBypass += 30 + (30 * (55 - ((21 - L) * L) / 2)) / 45<br />
Line 25: Line 24:
 
PartialBypass = CLAMP(partialBypass, 0, 100)<br />
 
PartialBypass = CLAMP(partialBypass, 0, 100)<br />
  
 
+
=Damage threshold=
 
+
TargetDT = Armor + Perks<br />
TargetDR += Ammo.DRMod<br />
+
TargetDT = (TargetDT * (100 - (10 * HitTheGap) + changeDT)) / 100<br />
TargetDR = CLAMP(TargetDR , 0, 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 />
Line 48: Line 45:
 
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(target,FTLB_MORE_BLEED);<br />
 +
BleedDmg = rawDmg *  BleedCoEff / 100;<br />
 +
}
  
int toBleed = target.Param[ST_DAMAGE_TO_BLEED_DR] + 10 * target.Perk[PE_PMS];
+
int 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];
+
int 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 );
+
}
+
}
+

Revision as of 13:51, 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

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)

Bypass

PartialBypass % = 60 * Decreaed DR WeaponTrait
PartialBypass += 30 + (30 * (55 - ((21 - L) * L) / 2)) / 45
PartialBypass -= target.Perk[PE_ARMOR_EFFICIENCY] * 15
PartialBypass += 15 * (weaponPerkEff(attack.WeaponPerks, attack.Skill, WP_PIERCING_STRIKE))
PartialBypass += 15 * weaponLegendaryEff(realWeapon,WP_PIERCING_STRIKE)
PartialBypass += GetLeadershipBoost(attacker,FTLB_MORE_ARMOR_BYPASS)
PartialBypass -= GetLeadershipBoost(target,FTLB_LESS_ARMOR_BYPASS)
PartialBypass = CLAMP(partialBypass, 0, 100)

Damage threshold

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

Damage calculation

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

rawMin += BRD - targetDT
rawMin -= rawMin * targetDR / 100
rawMin *= dmgMul / 100
rawMin *= rounds
rawMax += BRD - targetDT
rawMax -= rawMax * targetDR / 100
rawMax *= dmgMul / 100
rawMax *= rounds

rawDmg = Random(rawMin, rawMax)

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(target,FTLB_MORE_BLEED);
BleedDmg = rawDmg * BleedCoEff / 100;
}

int toBleed = target.Param[ST_DAMAGE_TO_BLEED_DR] + 10 * target.Perk[PE_PMS];
int 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