Shield resistances caps introduced

This commit is contained in:
Felix Linker
2018-07-20 12:00:53 +02:00
committed by felixlinker
parent f36edfe98d
commit a8c44fddca
2 changed files with 38 additions and 23 deletions

View File

@@ -102,11 +102,11 @@ export default class Defence extends TranslatedComponent {
// Add effective shield from resistances // Add effective shield from resistances
const rawMj = shield.generator + shield.boosters + shield.cells; const rawMj = shield.generator + shield.boosters + shield.cells;
const explosiveMj = rawMj / (shield.explosive.generator * shield.explosive.boosters) - rawMj; const explosiveMj = rawMj / shield.explosive.total - rawMj;
if (explosiveMj != 0) effectiveShieldExplosiveTt.push(<div key='resistance'>{translate('resistance') + ' ' + formats.int(explosiveMj)}{units.MJ}</div>); if (explosiveMj != 0) effectiveShieldExplosiveTt.push(<div key='resistance'>{translate('resistance') + ' ' + formats.int(explosiveMj)}{units.MJ}</div>);
const kineticMj = rawMj / (shield.kinetic.generator * shield.kinetic.boosters) - rawMj; const kineticMj = rawMj / shield.kinetic.total - rawMj;
if (kineticMj != 0) effectiveShieldKineticTt.push(<div key='resistance'>{translate('resistance') + ' ' + formats.int(kineticMj)}{units.MJ}</div>); if (kineticMj != 0) effectiveShieldKineticTt.push(<div key='resistance'>{translate('resistance') + ' ' + formats.int(kineticMj)}{units.MJ}</div>);
const thermalMj = rawMj / (shield.thermal.generator * shield.thermal.boosters) - rawMj; const thermalMj = rawMj / shield.thermal.total - rawMj;
if (thermalMj != 0) effectiveShieldThermalTt.push(<div key='resistance'>{translate('resistance') + ' ' + formats.int(thermalMj)}{units.MJ}</div>); if (thermalMj != 0) effectiveShieldThermalTt.push(<div key='resistance'>{translate('resistance') + ' ' + formats.int(thermalMj)}{units.MJ}</div>);
// Add effective shield from power distributor SYS pips // Add effective shield from power distributor SYS pips

View File

@@ -397,11 +397,6 @@ export function shieldMetrics(ship, sys) {
// res.kin = kinDim + overage; // res.kin = kinDim + overage;
// boosterKinDmg = kinDim + overage; // boosterKinDmg = kinDim + overage;
// } // }
// Apply diminishing returns
// boosterExplDmg = boosterExplDmg > 0.7 ? boosterExplDmg : 0.7 - (0.7 - boosterExplDmg) / 2;
// boosterKinDmg = boosterKinDmg > 0.7 ? boosterKinDmg : 0.7 - (0.7 - boosterKinDmg) / 2;
// boosterThermDmg = boosterThermDmg > 0.7 ? boosterThermDmg : 0.7 - (0.7 - boosterThermDmg) / 2;
// res.therm = res.therm > 0.7 ? res.therm : 0.7 - (0.7 - res.therm) / 2;
let shieldAddition = 0; let shieldAddition = 0;
if (ship) { if (ship) {
for (const module of ship.internal) { for (const module of ship.internal) {
@@ -485,31 +480,37 @@ export function shieldMetrics(ship, sys) {
max: 1 - maxSysResistance max: 1 - maxSysResistance
}; };
let sgExplosiveDmg = 1 - shieldGenerator.getExplosiveResistance();
let sgSbExplosiveDmg = diminishDamageMult(sgExplosiveDmg * 0.7, (1 - shieldGenerator.getExplosiveResistance()) * boosterExplDmg);
shield.explosive = { shield.explosive = {
generator: 1 - shieldGenerator.getExplosiveResistance(), generator: sgExplosiveDmg,
boosters: boosterExplDmg, boosters: sgSbExplosiveDmg - sgExplosiveDmg,
sys: (1 - sysResistance), sys: (1 - sysResistance),
total: (1 - shieldGenerator.getExplosiveResistance()) * boosterExplDmg * (1 - sysResistance), total: sgSbExplosiveDmg * (1 - sysResistance),
max: (1 - shieldGenerator.getExplosiveResistance()) * boosterExplDmg * (1 - maxSysResistance), max: sgSbExplosiveDmg * (1 - maxSysResistance),
res: 1 - boosterExplDmg res: 1 - sgSbExplosiveDmg
}; };
let sgKineticDmg = 1 - shieldGenerator.getKineticResistance();
let sgSbKineticDmg = diminishDamageMult(sgKineticDmg * 0.7, (1 - shieldGenerator.getKineticResistance()) * boosterKinDmg);
shield.kinetic = { shield.kinetic = {
generator: 1 - shieldGenerator.getKineticResistance(), generator: sgKineticDmg,
boosters: boosterKinDmg, boosters: sgSbKineticDmg - sgKineticDmg,
sys: (1 - sysResistance), sys: (1 - sysResistance),
total: (1 - shieldGenerator.getKineticResistance()) * boosterKinDmg * (1 - sysResistance), total: sgSbKineticDmg * (1 - sysResistance),
max: (1 - shieldGenerator.getKineticResistance()) * boosterKinDmg * (1 - maxSysResistance), max: sgSbKineticDmg * (1 - maxSysResistance),
res: 1 - boosterKinDmg res: 1 - sgSbKineticDmg
}; };
let sgThermalDmg = 1 - shieldGenerator.getThermalResistance();
let sgSbThermalDmg = diminishDamageMult(sgThermalDmg * 0.7, (1 - shieldGenerator.getThermalResistance()) * boosterThermDmg);
shield.thermal = { shield.thermal = {
generator: 1 - shieldGenerator.getThermalResistance(), generator: sgThermalDmg,
boosters: boosterThermDmg, boosters: sgSbThermalDmg - sgThermalDmg,
sys: (1 - sysResistance), sys: (1 - sysResistance),
total: (1 - shieldGenerator.getThermalResistance()) * boosterThermDmg * (1 - sysResistance), total: sgSbThermalDmg * (1 - sysResistance),
max: (1 - shieldGenerator.getThermalResistance()) * boosterThermDmg * (1 - maxSysResistance), max: sgSbThermalDmg * (1 - maxSysResistance),
res: 1 - boosterThermDmg res: 1 - sgSbThermalDmg
}; };
} }
return shield; return shield;
@@ -959,3 +960,17 @@ export function timeToDeplete(amount, dps, eps, capacity, recharge) {
} }
} }
} }
/**
* Applies diminishing returns to resistances.
* @param {number} baseDamageMult The base resistance up to which no diminishing returns are applied.
* @param {number} damageMult Resistance as damage multiplier
* @returns {number} Actual damage multiplier
*/
export function diminishDamageMult(diminishFrom, damageMult) {
if (damageMult > diminishFrom) {
return damageMult;
} else {
return (diminishFrom / 2) + 0.5 * damageMult;
}
}