Apply diminishing returns for hull resistance modding to all modules

This commit is contained in:
felixlinker
2018-11-17 01:56:58 +00:00
parent eda61a8e06
commit fbf59219d0
2 changed files with 13 additions and 25 deletions

View File

@@ -41,6 +41,7 @@ export default class Module {
* @return {object} The value of the modification. If it is a numeric value then it is returned as an integer value scaled so that 1.23% == 123 * @return {object} The value of the modification. If it is a numeric value then it is returned as an integer value scaled so that 1.23% == 123
*/ */
getModValue(name, raw) { getModValue(name, raw) {
let baseVal = this[name];
let result = this.mods && this.mods[name] ? this.mods[name] : null; let result = this.mods && this.mods[name] ? this.mods[name] : null;
if ((!raw) && this.blueprint && this.blueprint.special) { if ((!raw) && this.blueprint && this.blueprint.special) {
@@ -51,13 +52,8 @@ export default class Module {
const modification = Modifications.modifications[name]; const modification = Modifications.modifications[name];
const multiplier = modification.type === 'percentage' ? 10000 : 100; const multiplier = modification.type === 'percentage' ? 10000 : 100;
if (name === 'explres' || name === 'kinres' || name === 'thermres' || name === 'causres') { if (name === 'explres' || name === 'kinres' || name === 'thermres' || name === 'causres') {
// Resistance modifications in itself are additive, however their // Apply resistance modding mechanisms to special effects subsequently
// special effects are multiplicative. They affect the overall result result = result + modifierActions[name] * (1 - (this[name] + result / multiplier)) * 100;
// by (special effect resistance) * (damage mult after modification),
// i. e. we need to apply the special effect as a multiplier to the
// overall result and then calculate the difference.
let baseMult = this[name] ? 1 - this[name] : 1;
result = (baseMult - (baseMult - result / multiplier) * (1 - modifierActions[name] / 100)) * multiplier;
} else if (modification.method === 'additive') { } else if (modification.method === 'additive') {
result = result + modifierActions[name] * 100; result = result + modifierActions[name] * 100;
} else if (modification.method === 'overwrite') { } else if (modification.method === 'overwrite') {
@@ -75,15 +71,6 @@ export default class Module {
} }
} }
// Resistance modding for hull reinforcement packages has additional
// diminishing returns implemented. The mod value gets lowered by
// the amount of base resistance the hrp has.
if (!isNaN(result) && this.grp === 'hr' &&
(name === 'kinres' || name === 'thermres' || name === 'explres')) {
let baseRes = this[name];
result = result * (1 - baseRes);
}
// Sanitise the resultant value to 4dp equivalent // Sanitise the resultant value to 4dp equivalent
return isNaN(result) ? result : Math.round(result); return isNaN(result) ? result : Math.round(result);
} }
@@ -108,11 +95,11 @@ export default class Module {
// This special effect modifies the value being set, so we need to revert it prior to storing the value // This special effect modifies the value being set, so we need to revert it prior to storing the value
const modification = Modifications.modifications[name]; const modification = Modifications.modifications[name];
if (name === 'explres' || name === 'kinres' || name === 'thermres' || name === 'causres') { if (name === 'explres' || name === 'kinres' || name === 'thermres' || name === 'causres') {
// Resistance modifications in itself are additive but their let res = (this[name] ? this[name] : 0) + value / 10000;
// experimentals are applied multiplicatively therefor we must handle let experimental = modifierActions[name] / 100;
// them differently here (cf. documentation in getModValue). value = (experimental - res) / (experimental - 1) - this[name];
let baseMult = (this[name] ? 1 - this[name] : 1); value *= 10000;
value = ((baseMult - value / 10000) / (1 - modifierActions[name] / 100) - baseMult) * -10000; // value = ((baseMult - value / 10000) / (1 - modifierActions[name] / 100) - baseMult) * -10000;
} else if (modification.method === 'additive') { } else if (modification.method === 'additive') {
value = value - modifierActions[name]; value = value - modifierActions[name];
} else if (modification.method === 'overwrite') { } else if (modification.method === 'overwrite') {
@@ -177,10 +164,6 @@ export default class Module {
baseValue = 0; baseValue = 0;
} }
modValue = value - baseValue; modValue = value - baseValue;
if (this.grp === 'hr' &&
(name === 'kinres' || name === 'thermres' || name === 'explres')) {
modValue = modValue / (1 - baseValue);
}
} else if (name === 'shieldboost' || name === 'hullboost') { } else if (name === 'shieldboost' || name === 'hullboost') {
modValue = (1 + value) / (1 + baseValue) - 1; modValue = (1 + value) / (1 + baseValue) - 1;
} else { // multiplicative } else { // multiplicative

View File

@@ -505,6 +505,11 @@ export default class Ship {
if (isAbsolute) { if (isAbsolute) {
m.setPretty(name, value, sentfromui); m.setPretty(name, value, sentfromui);
} else { } else {
// Resistance modifiers scale with the base value
if (name == 'kinres' || name == 'thermres' || name == 'causres' || name == 'explres') {
let baseValue = m.get(name, false);
value = (1 - baseValue) * value;
}
m.setModValue(name, value, sentfromui); m.setModValue(name, value, sentfromui);
} }