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..32fa240b 100644
--- a/src/app/shipyard/Calculations.js
+++ b/src/app/shipyard/Calculations.js
@@ -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;