diff --git a/src/app/components/Offence.jsx b/src/app/components/Offence.jsx index 0898a57f..737303d0 100644 --- a/src/app/components/Offence.jsx +++ b/src/app/components/Offence.jsx @@ -154,11 +154,13 @@ export default class Offence extends TranslatedComponent { let thermalArmourSDps = 0; let totalSEps = 0; + let totalSDps = 0; const rows = []; for (let i = 0; i < damage.length; i++) { const weapon = damage[i]; + totalSDps += weapon.sdps.base.total; totalSEps += weapon.seps; absoluteShieldsSDps += weapon.sdps.shields.absolute; explosiveShieldsSDps += weapon.sdps.shields.explosive; @@ -174,6 +176,12 @@ export default class Offence extends TranslatedComponent { effectivenessShieldsTooltipDetails.push(
{translate('resistance') + ' ' + formats.pct1(weapon.effectiveness.shields.resistance)}
); effectivenessShieldsTooltipDetails.push(
{translate('power distributor') + ' ' + formats.pct1(weapon.effectiveness.shields.sys)}
); + const baseSDpsTooltipDetails = []; + if (weapon.sdps.shields.absolute) baseSDpsTooltipDetails.push(
{translate('absolute') + ' ' + formats.f1(weapon.sdps.base.absolute)}
); + if (weapon.sdps.shields.explosive) baseSDpsTooltipDetails.push(
{translate('explosive') + ' ' + formats.f1(weapon.sdps.base.explosive)}
); + if (weapon.sdps.shields.kinetic) baseSDpsTooltipDetails.push(
{translate('kinetic') + ' ' + formats.f1(weapon.sdps.base.kinetic)}
); + if (weapon.sdps.shields.thermal) baseSDpsTooltipDetails.push(
{translate('thermal') + ' ' + formats.f1(weapon.sdps.base.thermal)}
); + const effectiveShieldsSDpsTooltipDetails = []; if (weapon.sdps.shields.absolute) effectiveShieldsSDpsTooltipDetails.push(
{translate('absolute') + ' ' + formats.f1(weapon.sdps.shields.absolute)}
); if (weapon.sdps.shields.explosive) effectiveShieldsSDpsTooltipDetails.push(
{translate('explosive') + ' ' + formats.f1(weapon.sdps.shields.explosive)}
); @@ -199,6 +207,7 @@ export default class Offence extends TranslatedComponent { {weapon.classRating} {translate(weapon.name)} {weapon.engineering ? ' (' + weapon.engineering + ')' : null } + {formats.f1(weapon.sdps.base.total)} {formats.f1(weapon.sdps.shields.total)} {formats.pct1(weapon.effectiveness.shields.total)} {formats.f1(weapon.sdps.armour.total)} @@ -231,10 +240,12 @@ export default class Offence extends TranslatedComponent { {translate('weapon')} + {translate('overall')} {translate('opponent\'s shields')} {translate('opponent\'s armour')} + {'sdps'} {'sdps'} {'eft'} {'sdps'} @@ -243,6 +254,12 @@ export default class Offence extends TranslatedComponent { {rows} + + ={formats.f1(totalSDps)} + ={formats.f1(totalShieldsSDps)} + + ={formats.f1(totalArmourSDps)} + diff --git a/src/app/shipyard/Calculations.js b/src/app/shipyard/Calculations.js index c330243b..d4912f34 100644 --- a/src/app/shipyard/Calculations.js +++ b/src/app/shipyard/Calculations.js @@ -484,7 +484,7 @@ export function shieldMetrics(ship, sys) { let sgSbExplosiveDmg = diminishDamageMult(sgExplosiveDmg * 0.7, (1 - shieldGenerator.getExplosiveResistance()) * boosterExplDmg); shield.explosive = { generator: sgExplosiveDmg, - boosters: sgSbExplosiveDmg - sgExplosiveDmg, + boosters: sgSbExplosiveDmg / sgExplosiveDmg, sys: (1 - sysResistance), total: sgSbExplosiveDmg * (1 - sysResistance), max: sgSbExplosiveDmg * (1 - maxSysResistance), @@ -495,7 +495,7 @@ export function shieldMetrics(ship, sys) { let sgSbKineticDmg = diminishDamageMult(sgKineticDmg * 0.7, (1 - shieldGenerator.getKineticResistance()) * boosterKinDmg); shield.kinetic = { generator: sgKineticDmg, - boosters: sgSbKineticDmg - sgKineticDmg, + boosters: sgSbKineticDmg / sgKineticDmg, sys: (1 - sysResistance), total: sgSbKineticDmg * (1 - sysResistance), max: sgSbKineticDmg * (1 - maxSysResistance), @@ -506,7 +506,7 @@ export function shieldMetrics(ship, sys) { let sgSbThermalDmg = diminishDamageMult(sgThermalDmg * 0.7, (1 - shieldGenerator.getThermalResistance()) * boosterThermDmg); shield.thermal = { generator: sgThermalDmg, - boosters: sgSbThermalDmg - sgThermalDmg, + boosters: sgSbThermalDmg / sgThermalDmg, sys: (1 - sysResistance), total: sgSbThermalDmg * (1 - sysResistance), max: sgSbThermalDmg * (1 - maxSysResistance), @@ -612,7 +612,7 @@ export function armourMetrics(ship) { let armourReinforcedExplDmg = diminishDamageMult(0.7, (1 - ship.bulkheads.m.getExplosiveResistance()) * hullExplDmg); armour.explosive = { bulkheads: armourExplDmg, - reinforcement: armourReinforcedExplDmg - armourExplDmg, + reinforcement: armourReinforcedExplDmg / armourExplDmg, total: armourReinforcedExplDmg, res: 1 - armourReinforcedExplDmg }; @@ -621,7 +621,7 @@ export function armourMetrics(ship) { let armourReinforcedKinDmg = diminishDamageMult(0.7, (1 - ship.bulkheads.m.getKineticResistance()) * hullKinDmg); armour.kinetic = { bulkheads: armourKinDmg, - reinforcement: armourReinforcedKinDmg - armourKinDmg, + reinforcement: armourReinforcedKinDmg / armourKinDmg, total: armourReinforcedKinDmg, res: 1 - armourReinforcedKinDmg }; @@ -630,7 +630,7 @@ export function armourMetrics(ship) { let armourReinforcedThermDmg = diminishDamageMult(0.7, (1 - ship.bulkheads.m.getThermalResistance()) * hullThermDmg); armour.thermal = { bulkheads: armourThermDmg, - reinforcement: armourReinforcedThermDmg - armourThermDmg, + reinforcement: armourReinforcedThermDmg / armourThermDmg, total: armourReinforcedThermDmg, res: 1 - armourReinforcedThermDmg }; @@ -819,6 +819,13 @@ export function _weaponSustainedDps(m, opponent, opponentShields, opponentArmour const weapon = { eps: 0, damage: { + base: { + absolute: 0, + explosive: 0, + kinetic: 0, + thermal: 0, + total: 0, + }, shields: { absolute: 0, explosive: 0, @@ -863,6 +870,12 @@ export function _weaponSustainedDps(m, opponent, opponentShields, opponentArmour sDps *= dropoff; } + weapon.damage.base.absolute = sDps * m.getDamageDist().A; + weapon.damage.base.explosive = sDps * m.getDamageDist().E; + weapon.damage.base.kinetic = sDps * m.getDamageDist().K; + weapon.damage.base.thermal = sDps * m.getDamageDist().T; + weapon.damage.base.total = sDps; + // Piercing/hardness modifier (for armour only) const armourMultiple = m.getPiercing() >= opponent.hardness ? 1 : m.getPiercing() / opponent.hardness; weapon.effectiveness.armour.hardness = armourMultiple;