diff --git a/src/app/components/AvailableModulesMenu.jsx b/src/app/components/AvailableModulesMenu.jsx
index eac11b58..251c0712 100644
--- a/src/app/components/AvailableModulesMenu.jsx
+++ b/src/app/components/AvailableModulesMenu.jsx
@@ -62,7 +62,8 @@ const GRPCAT = {
'gpp': 'guardian',
'gpc': 'guardian',
'gsrp': 'guardian',
- 'ggc': 'guardian'
+ 'ggc': 'guardian',
+ 'gfsb': 'guardian'
};
// Order here is the order in which items will be shown in the modules menu
const CATEGORIES = {
@@ -91,7 +92,7 @@ const CATEGORIES = {
'experimental': ['axmc', 'axmr', 'rfl', 'xs', 'sfn', 'rcpl'],
// Guardian
- 'guardian': ['gpp', 'gpd', 'gpc', 'ggc', 'gsrp']
+ 'guardian': ['gpp', 'gpd', 'gpc', 'ggc', 'gsrp', 'gfsb']
};
/**
diff --git a/src/app/components/FSDProfile.jsx b/src/app/components/FSDProfile.jsx
index 4a4f2094..bd12fc10 100644
--- a/src/app/components/FSDProfile.jsx
+++ b/src/app/components/FSDProfile.jsx
@@ -57,7 +57,7 @@ export default class FSDProfile extends TranslatedComponent {
*/
_calcMaxRange(ship, fuel, mass) {
// Obtain the maximum range
- return Calc.jumpRange(mass, ship.standard[2].m, Math.min(fuel, ship.standard[2].m.getMaxFuelPerJump()));
+ return Calc.jumpRange(mass, ship.standard[2].m, Math.min(fuel, ship.standard[2].m.getMaxFuelPerJump()), ship);
}
/**
@@ -77,7 +77,7 @@ export default class FSDProfile extends TranslatedComponent {
const maxMass = thrusters.getMaxMass();
const mass = ship.unladenMass + fuel + cargo;
const minRange = 0;
- const maxRange = Calc.jumpRange(minMass + fsd.getMaxFuelPerJump(), fsd, fsd.getMaxFuelPerJump());
+ const maxRange = Calc.jumpRange(minMass + fsd.getMaxFuelPerJump(), fsd, fsd.getMaxFuelPerJump(), ship);
// Add a mark at our current mass
const mark = Math.min(mass, maxMass);
diff --git a/src/app/components/InternalSlot.jsx b/src/app/components/InternalSlot.jsx
index db3d9c81..952f69c9 100644
--- a/src/app/components/InternalSlot.jsx
+++ b/src/app/components/InternalSlot.jsx
@@ -64,6 +64,8 @@ export default class InternalSlot extends Slot {
{ m.getDuration() ?
{translate('duration')}: {formats.f1(m.getDuration())}{u.s}
: null }
{ m.grp === 'scb' ? {translate('cells')}: {formats.int(m.getAmmo() + 1)}
: null }
{ m.grp === 'gsrp' ? {translate('shield addition')}: {formats.int(m.getShieldAddition())}{u.MJ}
: null }
+ { m.grp === 'gfsb' ? {translate('jump addition')}: {formats.int(m.getJumpBoost())}{u.LY}
: null }
+ { m.grp === 'gs' ? {translate('shield addition')}: {formats.int(m.getShieldAddition())}{u.MJ}
: null }
{ m.getShieldReinforcement() ? {translate('shieldreinforcement')}: {formats.f1(m.getDuration() * m.getShieldReinforcement())}{u.MJ}
: null }
{ m.getShieldReinforcement() ? {translate('total')}: {formats.int((m.getAmmo() + 1) * (m.getDuration() * m.getShieldReinforcement()))}{u.MJ}
: null }
{ m.repair ? {translate('repair')}: {m.repair}
: null }
diff --git a/src/app/components/JumpRange.jsx b/src/app/components/JumpRange.jsx
index 2b8f5196..ceba5bc2 100644
--- a/src/app/components/JumpRange.jsx
+++ b/src/app/components/JumpRange.jsx
@@ -61,7 +61,7 @@ export default class JumpRange extends TranslatedComponent {
const fuel = this.state.fuelLevel * ship.fuelCapacity;
// Obtain the jump range
- return Calc.jumpRange(ship.unladenMass + fuel + cargo, fsd, fuel);
+ return Calc.jumpRange(ship.unladenMass + fuel + cargo, fsd, fuel, ship);
}
/**
diff --git a/src/app/components/ShipSummaryTable.jsx b/src/app/components/ShipSummaryTable.jsx
index 22c6d9b3..34f45cda 100644
--- a/src/app/components/ShipSummaryTable.jsx
+++ b/src/app/components/ShipSummaryTable.jsx
@@ -99,11 +99,11 @@ export default class ShipSummaryTable extends TranslatedComponent {
| { canThrust ? {int(ship.calcSpeed(4, ship.fuelCapacity, 0, false))}{u['m/s']} : 0 } |
{ canBoost ? {int(ship.calcSpeed(4, ship.fuelCapacity, 0, true))}{u['m/s']} : 0 } |
- {f2(Calc.jumpRange(ship.unladenMass + ship.standard[2].m.getMaxFuelPerJump(), ship.standard[2].m, ship.standard[2].m.getMaxFuelPerJump()))}{u.LY} |
- {f2(Calc.jumpRange(ship.unladenMass + ship.fuelCapacity, ship.standard[2].m, ship.fuelCapacity))}{u.LY} |
- {f2(Calc.jumpRange(ship.unladenMass + ship.fuelCapacity + ship.cargoCapacity, ship.standard[2].m, ship.fuelCapacity))}{u.LY} |
- {f2(Calc.totalJumpRange(ship.unladenMass + ship.fuelCapacity, ship.standard[2].m, ship.fuelCapacity))}{u.LY} |
- {f2(Calc.totalJumpRange(ship.unladenMass + ship.fuelCapacity + ship.cargoCapacity, ship.standard[2].m, ship.fuelCapacity))}{u.LY} |
+ {f2(Calc.jumpRange(ship.unladenMass + ship.standard[2].m.getMaxFuelPerJump(), ship.standard[2].m, ship.standard[2].m.getMaxFuelPerJump()), ship)}{u.LY} |
+ {f2(Calc.jumpRange(ship.unladenMass + ship.fuelCapacity, ship.standard[2].m, ship.fuelCapacity, ship))}{u.LY} |
+ {f2(Calc.jumpRange(ship.unladenMass + ship.fuelCapacity + ship.cargoCapacity, ship.standard[2].m, ship.fuelCapacity, ship))}{u.LY} |
+ {f2(Calc.totalJumpRange(ship.unladenMass + ship.fuelCapacity, ship.standard[2].m, ship.fuelCapacity, ship))}{u.LY} |
+ {f2(Calc.totalJumpRange(ship.unladenMass + ship.fuelCapacity + ship.cargoCapacity, ship.standard[2].m, ship.fuelCapacity, ship))}{u.LY} |
{int(ship.shield)}{u.MJ} |
{int(ship.armour)} |
{f1(ship.totalDps)} |
diff --git a/src/app/i18n/en.json b/src/app/i18n/en.json
index 2bc67723..9bc1866f 100644
--- a/src/app/i18n/en.json
+++ b/src/app/i18n/en.json
@@ -125,6 +125,7 @@
"gpc": "Guardian Plasma Charger",
"ggc": "Guardian Gauss Cannon",
"gsrp": "Guardian Shield Reinforcement Package",
+ "gfsb": "Guardian Frame Shift Drive Booster",
"psg": "Prismatic Shield Generator",
"pv": "Planetary Vehicle Hangar",
"rf": "Refinery",
@@ -259,6 +260,7 @@
"boosters": "Boosters",
"cells": "Cells",
"shield addition": "Shield Addition",
+ "jump addition": "Jump Addition",
"bulkheads": "Bulkheads",
"reinforcement": "Reinforcement",
"power and costs": "power and costs",
diff --git a/src/app/shipyard/Calculations.js b/src/app/shipyard/Calculations.js
index e7e85f98..84c84647 100644
--- a/src/app/shipyard/Calculations.js
+++ b/src/app/shipyard/Calculations.js
@@ -7,11 +7,20 @@ import Module from './Module';
* @param {object} fsd The FDS object/component with maxfuel, fuelmul, fuelpower, optmass
* @param {number} fuel Optional - The fuel consumed during the jump
* @return {number} Distance in Light Years
+ * @param {object} ship Ship instance
*/
-export function jumpRange(mass, fsd, fuel) {
+export function jumpRange(mass, fsd, fuel, ship) {
const fsdMaxFuelPerJump = fsd instanceof Module ? fsd.getMaxFuelPerJump() : fsd.maxfuel;
const fsdOptimalMass = fsd instanceof Module ? fsd.getOptMass() : fsd.optmass;
- return Math.pow(Math.min(fuel === undefined ? fsdMaxFuelPerJump : fuel, fsdMaxFuelPerJump) / fsd.fuelmul, 1 / fsd.fuelpower) * fsdOptimalMass / mass;
+ let jumpAddition = 0;
+ if (ship) {
+ for (const module of ship.internal) {
+ if (module && module.m && module.m.grp === 'gfsb') {
+ jumpAddition += module.m.getJumpBoost();
+ }
+ }
+ }
+ return (Math.pow(Math.min(fuel === undefined ? fsdMaxFuelPerJump : fuel, fsdMaxFuelPerJump) / fsd.fuelmul, 1 / fsd.fuelpower) * fsdOptimalMass / mass) + jumpAddition;
}
/**
@@ -21,8 +30,9 @@ export function jumpRange(mass, fsd, fuel) {
* @param {object} fsd The FDS object/component with maxfuel, fuelmul, fuelpower, optmass
* @param {number} fuel The total fuel available
* @return {number} Distance in Light Years
+ * @param {object} ship Ship instance
*/
-export function totalJumpRange(mass, fsd, fuel) {
+export function totalJumpRange(mass, fsd, fuel, ship) {
const fsdMaxFuelPerJump = fsd instanceof Module ? fsd.getMaxFuelPerJump() : fsd.maxfuel;
const fsdOptimalMass = fsd instanceof Module ? fsd.getOptMass() : fsd.optmass;
@@ -30,7 +40,7 @@ export function totalJumpRange(mass, fsd, fuel) {
let totalRange = 0;
while (fuelRemaining > 0) {
const fuelForThisJump = Math.min(fuelRemaining, fsdMaxFuelPerJump);
- totalRange += this.jumpRange(mass, fsd, fuelForThisJump);
+ totalRange += this.jumpRange(mass, fsd, fuelForThisJump, ship);
// Mass is reduced
mass -= fuelForThisJump;
fuelRemaining -= fuelForThisJump;
diff --git a/src/app/shipyard/Constants.js b/src/app/shipyard/Constants.js
index 2b3ebd8b..ce3788bb 100755
--- a/src/app/shipyard/Constants.js
+++ b/src/app/shipyard/Constants.js
@@ -53,6 +53,7 @@ export const ModuleGroupToName = {
cc: 'Collector Limpet Controller',
ss: 'Surface Scanner',
gsrp: 'Guardian Shield Reinforcement Packages',
+ gfsb: 'Guardian Frame Shift Drive Booster',
// Hard Points
bl: 'Beam Laser',
diff --git a/src/app/shipyard/Module.js b/src/app/shipyard/Module.js
index 285a9ef4..888d8e27 100755
--- a/src/app/shipyard/Module.js
+++ b/src/app/shipyard/Module.js
@@ -657,6 +657,14 @@ export default class Module {
return this._getModifiedValue('shieldaddition');
}
+ /**
+ * Get the jump range boost for this module, taking in to account modifications
+ * @return {Number} the jump range boost for this module
+ */
+ getJumpBoost() {
+ return this._getModifiedValue('jumpboost');
+ }
+
/**
* Get the piercing for this module, taking in to account modifications
* @return {Number} the piercing for this module
diff --git a/src/app/shipyard/Ship.js b/src/app/shipyard/Ship.js
index 5e21836a..13593187 100755
--- a/src/app/shipyard/Ship.js
+++ b/src/app/shipyard/Ship.js
@@ -151,7 +151,7 @@ export default class Ship {
* @return {Number} Jump range in Light Years
*/
calcLadenRange(massDelta, fuel, fsd) {
- return Calc.jumpRange(this.ladenMass + (massDelta || 0), fsd || this.standard[2].m, fuel);
+ return Calc.jumpRange(this.ladenMass + (massDelta || 0), fsd || this.standard[2].m, fuel, this);
}
/**
@@ -164,7 +164,7 @@ export default class Ship {
calcUnladenRange(massDelta, fuel, fsd) {
fsd = fsd || this.standard[2].m;
let fsdMaxFuelPerJump = fsd instanceof Module ? fsd.getMaxFuelPerJump() : fsd.maxfuel;
- return Calc.jumpRange(this.unladenMass + (massDelta || 0) + Math.min(fsdMaxFuelPerJump, fuel || this.fuelCapacity), fsd || this.standard[2].m, fuel);
+ return Calc.jumpRange(this.unladenMass + (massDelta || 0) + Math.min(fsdMaxFuelPerJump, fuel || this.fuelCapacity), fsd || this.standard[2].m, fuel, this);
}
/**