diff --git a/src/app/components/HardpointSlot.jsx b/src/app/components/HardpointSlot.jsx
index 9337dac0..f7678f0c 100644
--- a/src/app/components/HardpointSlot.jsx
+++ b/src/app/components/HardpointSlot.jsx
@@ -79,7 +79,7 @@ export default class HardpointSlot extends Slot {
- { m.getDps() ?
{translate('DPS')}: {formats.round1(m.getDps())} { m.getClip() ? ({formats.round1((m.getClip() * m.getDps() / m.getRoF()) / ((m.getClip() / m.getRoF()) + m.getReload())) }) : null }
: null }
+ { m.getDps() ?
{translate('DPS')}: {formats.round1(m.getDps())} { m.getClip() ? ({formats.round1(m.getSDps()) }) : null }
: null }
{ m.getEps() ?
{translate('EPS')}: {formats.round1(m.getEps())}{u.MW} { m.getClip() ? ({formats.round1((m.getClip() * m.getEps() / m.getRoF()) / ((m.getClip() / m.getRoF()) + m.getReload())) }{u.MW}) : null }
: null }
{ m.getHps() ?
{translate('HPS')}: {formats.round1(m.getHps())} { m.getClip() ? ({formats.round1((m.getClip() * m.getHps() / m.getRoF()) / ((m.getClip() / m.getRoF()) + m.getReload())) }) : null }
: null }
{ m.getDps() && m.getEps() ?
{translate('DPE')}: {formats.f1(m.getDps() / m.getEps())}
: null }
diff --git a/src/app/shipyard/Calculations.js b/src/app/shipyard/Calculations.js
index b72fd0d3..aa62b187 100644
--- a/src/app/shipyard/Calculations.js
+++ b/src/app/shipyard/Calculations.js
@@ -852,7 +852,7 @@ export function _weaponSustainedDps(m, opponent, opponentShields, opponentArmour
weapon.eps = m.getClip() ? (m.getClip() * m.getEps() / m.getRoF()) / ((m.getClip() / m.getRoF()) + m.getReload()) : m.getEps();
// Initial sustained DPS
- let sDps = m.getClip() ? (m.getClip() * m.getDps() / m.getRoF()) / ((m.getClip() / m.getRoF()) + m.getReload()) : m.getDps();
+ let sDps = m.getSDps();
// Take fall-off in to account
const falloff = m.getFalloff();
diff --git a/src/app/shipyard/Module.js b/src/app/shipyard/Module.js
index cc9247ef..81a0187c 100755
--- a/src/app/shipyard/Module.js
+++ b/src/app/shipyard/Module.js
@@ -550,6 +550,27 @@ export default class Module {
return damage * rpshot * rof;
}
+ /**
+ * Get the SDPS for this module, taking into account modifications and special
+ * effects.
+ * @return {Number} The SDPS of this module
+ */
+ getSDps() {
+ let dps = this.getDps();
+ if (this.getClip()) {
+ let clipSize = this.getClip();
+ // If auto-loader is applied, effective clip size will be nearly doubled
+ // as you get one reload for every two shots fired.
+ if (this.blueprint && this.blueprint.special && this.blueprint.special.edname === 'special_auto_loader') {
+ clipSize += clipSize - 1;
+ }
+ let timeToDeplete = clipSize / this.getRoF();
+ return dps * timeToDeplete / (timeToDeplete + this.getReload());
+ } else {
+ return dps;
+ }
+ }
+
/**
* Get the EPS for this module, taking in to account modifications
* @return {Number} the EPS of this module