@elite-dangerous-almanac/core 0.2.6 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/PROVENANCE/i18n/SOURCES.md +84 -22
  2. package/PROVENANCE/ships/SOURCES.md +233 -56
  3. package/README.md +3 -3
  4. package/dist/{chunk-NBLLW7TH.js → chunk-4U7KYQGK.js} +1 -1
  5. package/dist/chunk-A7IVMYNF.js +1 -0
  6. package/dist/chunk-A7IVMYNF.js.map +1 -0
  7. package/dist/{chunk-KPJ77VPS.js → chunk-BJU27V6C.js} +1 -1
  8. package/dist/{chunk-KPJ77VPS.js.map → chunk-BJU27V6C.js.map} +1 -1
  9. package/dist/chunk-C3LLPLLD.js +1 -0
  10. package/dist/chunk-C3LLPLLD.js.map +1 -0
  11. package/dist/chunk-EHFHRQEP.js +1 -0
  12. package/dist/{chunk-LOWDDWDT.js.map → chunk-EHFHRQEP.js.map} +1 -1
  13. package/dist/{chunk-YCGISPDR.js → chunk-ETWMPMZP.js} +1 -1
  14. package/dist/{chunk-S3MONE55.js → chunk-F7VWRDSL.js} +1 -1
  15. package/dist/{chunk-4CBMQULR.js → chunk-FMA36V6A.js} +1 -1
  16. package/dist/{chunk-4CBMQULR.js.map → chunk-FMA36V6A.js.map} +1 -1
  17. package/dist/chunk-M6J7KP7G.js +1 -0
  18. package/dist/chunk-M6J7KP7G.js.map +1 -0
  19. package/dist/chunk-MVBVXK3G.js +1 -0
  20. package/dist/chunk-MVBVXK3G.js.map +1 -0
  21. package/dist/{chunk-ABSDZINM.js → chunk-NZXSIHAW.js} +1 -1
  22. package/dist/{chunk-ABSDZINM.js.map → chunk-NZXSIHAW.js.map} +1 -1
  23. package/dist/chunk-QJECDMQQ.js +1 -0
  24. package/dist/{chunk-LZYHBFJC.js.map → chunk-QJECDMQQ.js.map} +1 -1
  25. package/dist/chunk-T7IQHFQ2.js +1 -0
  26. package/dist/chunk-T7IQHFQ2.js.map +1 -0
  27. package/dist/chunk-TSEDU73T.js +1 -0
  28. package/dist/chunk-TSEDU73T.js.map +1 -0
  29. package/dist/chunk-XRGECU7S.js +1 -0
  30. package/dist/chunk-XRGECU7S.js.map +1 -0
  31. package/dist/{chunk-SDXUPP4P.js → chunk-XSLPWM5N.js} +1 -1
  32. package/dist/{chunk-3CKWT2F3.js → chunk-ZEN5K3GE.js} +1 -1
  33. package/dist/chunk-ZZTDEDXJ.js +1 -0
  34. package/dist/{chunk-FA5JVXVG.js.map → chunk-ZZTDEDXJ.js.map} +1 -1
  35. package/dist/i18n/index.js +1 -1
  36. package/dist/i18n/modules.d.ts +10 -7
  37. package/dist/i18n/modules.js +1 -1
  38. package/dist/i18n/pre-engineered.js +1 -1
  39. package/dist/ships/blueprint-costs.js +1 -1
  40. package/dist/ships/blueprint-journal.js +1 -1
  41. package/dist/ships/build-metrics.js +1 -1
  42. package/dist/ships/engineering-options.d.ts +2 -2
  43. package/dist/ships/engineering-options.js +1 -1
  44. package/dist/ships/engineering.js +1 -1
  45. package/dist/ships/index.d.ts +5 -5
  46. package/dist/ships/index.js +1 -1
  47. package/dist/ships/loadout-calculations.d.ts +11 -2
  48. package/dist/ships/loadout-calculations.js +1 -1
  49. package/dist/ships/loadout-validation.js +1 -1
  50. package/dist/ships/modules-all.d.ts +2 -2
  51. package/dist/ships/modules-all.js +1 -1
  52. package/dist/ships/modules-core.d.ts +3 -3
  53. package/dist/ships/modules-core.js +1 -1
  54. package/dist/ships/modules-hardpoint.d.ts +1 -1
  55. package/dist/ships/modules-internal.d.ts +1 -1
  56. package/dist/ships/modules-internal.js +1 -1
  57. package/dist/ships/modules-utility.d.ts +1 -1
  58. package/dist/ships/modules.d.ts +9 -6
  59. package/dist/ships/modules.js +1 -1
  60. package/dist/ships/pre-engineered-stats.js +1 -1
  61. package/dist/ships/pre-engineered.js +1 -1
  62. package/dist/ships/ship-loadout.d.ts +65 -23
  63. package/dist/ships/ship-loadout.js +1 -1
  64. package/package.json +1 -1
  65. package/dist/chunk-3P455LF4.js +0 -1
  66. package/dist/chunk-3P455LF4.js.map +0 -1
  67. package/dist/chunk-5QSCLEEB.js +0 -1
  68. package/dist/chunk-5QSCLEEB.js.map +0 -1
  69. package/dist/chunk-DCB4COCL.js +0 -1
  70. package/dist/chunk-DCB4COCL.js.map +0 -1
  71. package/dist/chunk-E3AUKPSQ.js +0 -1
  72. package/dist/chunk-E3AUKPSQ.js.map +0 -1
  73. package/dist/chunk-FA5JVXVG.js +0 -1
  74. package/dist/chunk-GISL7YML.js +0 -1
  75. package/dist/chunk-GISL7YML.js.map +0 -1
  76. package/dist/chunk-LOWDDWDT.js +0 -1
  77. package/dist/chunk-LZYHBFJC.js +0 -1
  78. package/dist/chunk-OJC6AUL7.js +0 -1
  79. package/dist/chunk-OJC6AUL7.js.map +0 -1
  80. /package/dist/{chunk-NBLLW7TH.js.map → chunk-4U7KYQGK.js.map} +0 -0
  81. /package/dist/{chunk-YCGISPDR.js.map → chunk-ETWMPMZP.js.map} +0 -0
  82. /package/dist/{chunk-S3MONE55.js.map → chunk-F7VWRDSL.js.map} +0 -0
  83. /package/dist/{chunk-SDXUPP4P.js.map → chunk-XSLPWM5N.js.map} +0 -0
  84. /package/dist/{chunk-3CKWT2F3.js.map → chunk-ZEN5K3GE.js.map} +0 -0
@@ -1 +1 @@
1
- import{builtInModuleBySymbol,getModuleBySymbol}from"./chunk-ABSDZINM.js";import{getPreEngineeredVariants}from"./chunk-KPJ77VPS.js";import{ALL_MODULES}from"./chunk-3CKWT2F3.js";import{getBlueprintGrade,getBlueprint,BLUEPRINTS}from"./chunk-AYAKU4YA.js";import{EXPERIMENTAL_EFFECTS,getExperimentalEffect}from"./chunk-77I24V6B.js";import{fieldForLabel,damageTypeForLabel,capabilityValueForLabel,baseStats,computeModifiers,labelsForDamageType,scaleForLabel}from"./chunk-5QSCLEEB.js";import{round6,burstPartOrOne,float32FiringCycle,float32RateOfFire,preciseModifierValue,BURST_PATTERN_LABELS,journalRateOfFire,preciseValueFor}from"./chunk-EFQOUATZ.js";import{resolveBlueprintForModule}from"./chunk-SDXUPP4P.js";import{getBlueprintsForModule,getExperimentalsForModule,getEngineeringGroup}from"./chunk-LOWDDWDT.js";import{normalizeKey}from"./chunk-BKWLI44T.js";import{requireStringIfPresent}from"./chunk-PKWVG2JY.js";import{deepFreeze}from"./chunk-DURKO7JU.js";function scaleDamageComponents(components,baseDamage,effectiveDamage){const scale=baseDamage!==void 0&&baseDamage!==0&&effectiveDamage!==void 0?effectiveDamage/baseDamage:1;return{...components.kinetic===void 0?{}:{kinetic:components.kinetic*scale},...components.thermal===void 0?{}:{thermal:components.thermal*scale},...components.explosive===void 0?{}:{explosive:components.explosive*scale},...components.absolute===void 0?{}:{absolute:components.absolute*scale},...components.antiXeno===void 0?{}:{antiXeno:components.antiXeno*scale},...components.unclassified===void 0?{}:{unclassified:components.unclassified.map(value=>value*scale)}}}function fixedModifierFeatures(modifiers){return modifiers.map(modifier=>({label:modifier.label,method:modifier.method,min:modifier.value,max:modifier.value}))}var FITTED_ITEM="ShipLoadout: fitted module Item";function isNonOutfittingSlot(slotKey){return/^(paintjob|shipname\d+|shipid\d+|bobble\d+|decal\d+|shipkit.+|weaponcolour|enginecolour|vesselvoice|shipcockpit|stringlights)$/i.test(slotKey)}function isCargoHatchSlot(slotKey){return slotKey.toLowerCase()==="cargohatch"}function isBuiltInHullModule(module){return isCargoHatchSlot(module.Slot)&&module.Item.toLowerCase().startsWith("modularcargobaydoor")}function cloneLoadoutModule(module){return{Slot:module.Slot,Item:module.Item,...module.On===void 0?{}:{On:module.On},...module.Priority===void 0?{}:{Priority:module.Priority},...module.Health===void 0?{}:{Health:module.Health},...module.Value===void 0?{}:{Value:module.Value},...module.Engineering===void 0?{}:{Engineering:{BlueprintName:module.Engineering.BlueprintName,Level:module.Engineering.Level,Quality:module.Engineering.Quality,...module.Engineering.ExperimentalEffect===void 0?{}:{ExperimentalEffect:module.Engineering.ExperimentalEffect},...module.Engineering.ExperimentalEffect_Localised===void 0?{}:{ExperimentalEffect_Localised:module.Engineering.ExperimentalEffect_Localised},...module.Engineering.Modifiers===void 0?{}:{Modifiers:module.Engineering.Modifiers.map(modifier=>({...modifier}))}}}}}function matchingKeyIn(keyed,slotKey){if(keyed.has(slotKey))return slotKey;const wanted=slotKey.toLowerCase();for(const key of keyed.keys()){if(key.toLowerCase()===wanted)return key}return null}function ownKeyIn(keyed,canonicalKey){return matchingKeyIn(keyed,canonicalKey)??(keyed.size>0&&[...keyed.keys()].every(key=>key===key.toLowerCase())?canonicalKey.toLowerCase():canonicalKey)}function orderBySlotLayout(values,layout,slotOf){const order=new Map(layout.map((slot,index)=>[slot.key.toLowerCase(),index]));return[...values].sort((left,right)=>(order.get(slotOf(left).toLowerCase())??Number.MAX_SAFE_INTEGER)-(order.get(slotOf(right).toLowerCase())??Number.MAX_SAFE_INTEGER))}function cloneModuleStats(module){try{return deepFreeze(structuredClone(module))}catch(error){if(!(error instanceof Error&&error.name==="DataCloneError"))throw error;return deepFreeze({...module,...module.restrictedToShips===void 0?{}:{restrictedToShips:[...module.restrictedToShips]},...module.limitIncrease===void 0?{}:{limitIncrease:{...module.limitIncrease}},...module.damageDistribution===void 0?{}:{damageDistribution:{...module.damageDistribution}},...module.damageComponents===void 0?{}:{damageComponents:{...module.damageComponents,...module.damageComponents.unclassified===void 0?{}:{unclassified:[...module.damageComponents.unclassified]}}},...module.projectileRange===void 0?{}:{projectileRange:{...module.projectileRange}}})}}var GUARDIAN_WEAPON_GROUPS=/* @__PURE__ */new Set(["guardianGauss","guardianPlasma","guardianShard"]);function missingBaseLabels(stats,base,features,experimental){const contributions=[...features,...experimental??[]];return[...new Set(contributions.map(contribution=>contribution.label).filter(label=>{if(base[label]!==void 0)return false;return fieldForLabel(label,stats)===null}))]}function recipeSignature(blueprintSymbol){const blueprint=getBlueprint(blueprintSymbol);if(!blueprint)return null;const grades=Object.entries(blueprint.grades).map(([grade,{features:features}])=>`${grade}:${features.map(feature=>`${feature.label}/${feature.method??""}`).sort().join(",")}`).sort().join(";");return`${blueprint.name.toLowerCase()}|${grades}`}var isGenericSpelling=blueprintSymbol=>blueprintSymbol.toLowerCase().startsWith("misc_");function isSoldWithBlueprint(item,wanted){return getPreEngineeredVariants(item).some(variant=>variant.acquisition==="mercenary"&&variant.blueprintSymbol.toLowerCase()===wanted)}function blueprintRoutesFor(item){const routes=/* @__PURE__ */new Map;for(const blueprintSymbol of getBlueprintsForModule(item))routes.set(blueprintSymbol,"ordinary");for(const variant of getPreEngineeredVariants(item)){if(variant.acquisition==="mercenary"&&!routes.has(variant.blueprintSymbol)){routes.set(variant.blueprintSymbol,"mercenary")}}return routes}function blueprintAvailableFor(item,blueprintSymbol){const offered=getBlueprintsForModule(item);const asWritten=normalizeKey(blueprintSymbol,"ShipLoadout.applyBlueprint: blueprintSymbol");const resolved=resolveBlueprintForModule(item,blueprintSymbol).trim();const wanted=resolved.toLowerCase();if(offered.some(id=>id.toLowerCase()===wanted))return true;if(isSoldWithBlueprint(item,wanted)||isSoldWithBlueprint(item,asWritten))return true;if(!isGenericSpelling(wanted))return false;const signature=recipeSignature(resolved);if(signature===null)return false;return offered.some(id=>recipeSignature(id)===signature&&!isGenericSpelling(id))}function experimentalAvailableFor(item,experimentalEffectSymbol){const wanted=normalizeKey(experimentalEffectSymbol,"ShipLoadout.applyBlueprint: options.experimentalEffectSymbol");return getExperimentalsForModule(item).some(id=>id.toLowerCase()===wanted)}function primitiveLabelFor(stats,label){if(label==="MaximumRange"&&stats.maximumRange!==void 0)return"Range";if(label==="DamageFalloffRange"&&stats.falloffRange!==void 0){return"FalloffRange"}if(label==="Range"&&stats.scannerRange!==void 0)return"ScannerRange";if(label==="DSS_PatchRadius")return"ProbeRadius";if(label==="FuelScoopRate")return"RefuelRate";if(label==="EnergyPerRegen"&&stats.shieldRegenRate!==void 0){return"DistributorDraw"}return label}function primitiveEngineeringInputsFor(stats,grade,experimental){const canonicalGrade={...grade,features:grade.features.map(feature=>{const label=primitiveLabelFor(stats,feature.label);return label===feature.label?feature:{...feature,label:label}})};if(!experimental)return{grade:canonicalGrade};return{grade:canonicalGrade,experimental:{...experimental,modifiers:experimental.modifiers.map(modifier=>{const label=primitiveLabelFor(stats,modifier.label);return label===modifier.label?modifier:{...modifier,label:label}})}}}function matchesCalculatedModifiers(captured,calculated){if(!captured||captured.length!==calculated.length)return false;const byLabel=new Map(captured.map(modifier=>[modifier.Label.trim().toLowerCase(),modifier]));if(byLabel.size!==captured.length)return false;return calculated.every(expected=>{const actual=byLabel.get(expected.Label.trim().toLowerCase());if(!actual)return false;if(expected.Value!==void 0){return actual.Value!==void 0&&Math.abs(actual.Value-expected.Value)<=1e-5*Math.max(1,Math.abs(expected.Value))}return actual.ValueStr===expected.ValueStr})}function identityArticles(item,engineering){if(engineering.Modifiers!==void 0||typeof engineering.BlueprintName!=="string"){return[]}const wanted=engineering.BlueprintName.trim().toLowerCase();const experimental=engineering.ExperimentalEffect?.trim().toLowerCase();return getPreEngineeredVariants(item).filter(candidate=>candidate.blueprintSymbol.trim().toLowerCase()===wanted&&candidate.grade===engineering.Level&&(candidate.experimentalEffectSymbol===void 0?experimental===void 0&&engineering.ExperimentalEffect_Localised===void 0:candidate.experimentalEffectSymbol.trim().toLowerCase()===experimental))}function unrollableFixedArticle(item,engineering){const matches=identityArticles(item,engineering).filter(candidate=>!blueprintAvailableFor(item,candidate.blueprintSymbol));return matches.length===1?matches[0]:null}function rolledOverFixedArticle(item,engineering){const matches=identityArticles(item,engineering).filter(candidate=>blueprintAvailableFor(item,candidate.blueprintSymbol));return matches.length===1?matches[0]:null}function statesInertModifiers(stats,modifiers){return modifiers.every(modifier=>{if(damageTypeForLabel(modifier.Label)!==null||capabilityValueForLabel(modifier.Label)!==null){return false}const field=fieldForLabel(modifier.Label,stats);return field===null||typeof stats[field]!=="number"})}function ordinaryEngineeringProof(item,engineering,experimental){const recipe=resolveBlueprintForModule(item,engineering.BlueprintName);const fixedCandidate=getPreEngineeredVariants(item).some(candidate=>candidate.acquisition!=="mercenary"&&candidate.blueprintSymbol.trim().toLowerCase()===recipe.trim().toLowerCase());if(!fixedCandidate)return"notFixedCandidate";const grade=getBlueprintGrade(recipe,engineering.Level);const quality=engineering.Quality;const stock=builtInModuleBySymbol(item,FITTED_ITEM);if(!stock||!grade||experimental===null||!Number.isFinite(quality)||quality<0||quality>1){return"unproven"}const current=primitiveEngineeringInputsFor(stock,grade,experimental);if(missingBaseLabels(stock,baseStats(stock),current.grade.features,current.experimental?.modifiers).length>0){return"unproven"}const calculated=journalModifiersFor(stock,computeModifiers(baseStats(stock),current.grade,quality,current.experimental));const damageDistribution=current.experimental?.damageDistribution??current.grade.damageDistribution;if(damageDistribution){for(const type of["kinetic","thermal","explosive","absolute"]){const value=damageDistribution[type];if(value===void 0)continue;const label=labelsForDamageType(type)[0];if(label===void 0)continue;calculated.push({Label:label,Value:value*scaleForLabel(label),OriginalValue:(stock.damageDistribution?.[type]??0)*scaleForLabel(label)})}}return matchesCalculatedModifiers(engineering.Modifiers,calculated)?"proven":"unproven"}function float32DamagePerSecond(damage,rounds,rate,burstRounds,cycle){if(cycle!==void 0&&(rounds!==1||burstRounds!==1)){const damagePerCycle=Math.fround(Math.fround(Math.fround(damage)*Math.fround(rounds))*Math.fround(burstRounds));return Math.fround(damagePerCycle/cycle)}return Math.fround(Math.fround(Math.fround(damage)*Math.fround(rounds))*Math.fround(rate))}var JOURNAL_MODIFIER_ORDER=["CargoCapacity","GuardianModuleResistance","Mass","Integrity","PowerDraw","BootTime","PowerCapacity","HeatEfficiency","FSDOptimalMass","MaxFuelPerJump","FSDHeatRate","EngineOptimalMass","EngineOptPerformance","EngineHeatRate","ShieldGenOptimalMass","ShieldGenStrength","DamagePerSecond","Damage","DistributorDraw","ThermalLoad","ArmourPenetration","MaximumRange","ShotSpeed","RateOfFire","DamageType","$Kinetic;","$Thermal;","$Explosive;","$Absolute;","AmmoClipSize","AmmoMaximum","ReloadTime","Jitter","DamageFalloffRange","DefenceModifierShieldMultiplier","DefenceModifierHealthMultiplier","DefenceModifierHealthAddition","DefenceModifierShieldAddition","RegenRate","BrokenRegenRate","EnergyPerRegen","KineticResistance","ThermicResistance","ExplosiveResistance","CausticResistance","DamageProtection","ModuleDefenceAbsorption","WeaponsCapacity","WeaponsRecharge","EnginesCapacity","EnginesRecharge","SystemsCapacity","SystemsRecharge","ShieldBankSpinUp","ShieldBankDuration","ShieldBankReinforcement","ShieldBankHeat","FSDInterdictorRange","FSDInterdictorFacingLimit","SensorTargetScanAngle","MaxAngle","ScannerTimeToScan","Range","DSS_PatchRadius","FuelScoopRate","FuelCapacity"];var JOURNAL_MODIFIER_RANK=new Map(JOURNAL_MODIFIER_ORDER.map((label,index)=>[label,index]));function sortJournalModifiers(modifiers){return modifiers.map((modifier,index)=>({modifier:modifier,index:index})).sort((a,b)=>(JOURNAL_MODIFIER_RANK.get(a.modifier.Label)??JOURNAL_MODIFIER_ORDER.length)-(JOURNAL_MODIFIER_RANK.get(b.modifier.Label)??JOURNAL_MODIFIER_ORDER.length)||a.index-b.index).map(({modifier:modifier})=>modifier)}function journalModifiersFor(stats,modifiers){const weapon=stats.damage!==void 0;const valueFor=(label,fallback)=>{const modifier=modifiers.find(candidate=>candidate.Label===label);return(modifier&&preciseModifierValue(modifier))??Math.fround(fallback)};const burstTouched=["BurstInterval","BurstSize","BurstRateOfFire"].some(label=>modifiers.some(modifier=>modifier.Label===label));const damageTouched=modifiers.some(modifier=>modifier.Label==="Damage");const rateTouched=burstTouched||modifiers.some(modifier=>modifier.Label==="RateOfFire");let damagePerSecond;let derivedRate;if(weapon&&(damageTouched||rateTouched)){const continuous=stats.burstInterval===void 0&&stats.rateOfFire===void 0;const baseDamage=Math.fround(stats.damage);const effectiveDamage=valueFor("Damage",stats.damage);if(continuous){damagePerSecond={Label:"DamagePerSecond",Value:round6(effectiveDamage),OriginalValue:round6(baseDamage)}}else{const burstRounds=burstPartOrOne(valueFor("BurstSize",stats.burstRounds??1));const burstRate=burstPartOrOne(valueFor("BurstRateOfFire",stats.burstRateOfFire??1));const baseBurstRounds=Math.fround(burstPartOrOne(stats.burstRounds));const baseBurstRate=Math.fround(burstPartOrOne(stats.burstRateOfFire));const baseInterval=stats.burstInterval===void 0?void 0:Math.fround(stats.burstInterval);const baseCycle=baseInterval===void 0?void 0:float32FiringCycle(baseInterval,baseBurstRounds,baseBurstRate);const baseRate=baseInterval!==void 0?float32RateOfFire(baseInterval,baseBurstRounds,baseBurstRate):stats.rateOfFire===void 0?void 0:Math.fround(stats.rateOfFire);const rateModifier=modifiers.find(modifier=>modifier.Label==="RateOfFire");const effectiveRate=rateModifier&&preciseModifierValue(rateModifier);const effectiveInterval=valueFor("BurstInterval",stats.burstInterval??0);const effectiveCycle=effectiveRate===void 0?float32FiringCycle(effectiveInterval,burstRounds,burstRate):void 0;const rate=effectiveRate??(effectiveCycle===void 0?void 0:Math.fround(Math.fround(burstRounds)/effectiveCycle));if(baseRate!==void 0&&rate!==void 0){const stockRounds=Math.fround(stats.roundsPerShot??1);const effectiveRounds=Math.fround(modifiers.find(modifier=>modifier.Label==="Rounds"||modifier.Label==="RoundsPerShot")?.Value??stockRounds);damagePerSecond={Label:"DamagePerSecond",Value:round6(float32DamagePerSecond(effectiveDamage,effectiveRounds,rate,burstRounds,effectiveCycle)),OriginalValue:round6(float32DamagePerSecond(baseDamage,stockRounds,baseRate,baseBurstRounds,baseCycle))};if(burstTouched){derivedRate={Label:"RateOfFire",Value:round6(rate),OriginalValue:round6(baseRate)}}}}}const result=[];for(const modifier of modifiers){const label=modifier.Label;if(weapon&&["BurstInterval","BurstSize","BurstRateOfFire"].includes(label))continue;if(weapon&&label==="Damage"&&stats.rateOfFire===void 0)continue;let journalLabel=label;if(label==="Range"&&stats.maximumRange!==void 0)journalLabel="MaximumRange";else if(label==="FalloffRange"&&stats.falloffRange!==void 0){journalLabel="DamageFalloffRange"}else if(label==="ScannerRange"&&stats.scannerRange!==void 0){journalLabel="Range"}else if(label==="ProbeRadius")journalLabel="DSS_PatchRadius";else if(label==="RefuelRate")journalLabel="FuelScoopRate";else if(label==="DistributorDraw"&&stats.shieldRegenRate!==void 0){journalLabel="EnergyPerRegen"}result.push(journalLabel===label?modifier:{...modifier,Label:journalLabel})}if(damagePerSecond)result.push(damagePerSecond);if(derivedRate){const direct=result.findIndex(modifier=>modifier.Label==="RateOfFire");if(direct>=0)result[direct]=derivedRate;else result.push(derivedRate)}return sortJournalModifiers(result)}function isFinalGuardianWeaponEngineering(item,blueprint){const group=getEngineeringGroup(item);if(group===null||!GUARDIAN_WEAPON_GROUPS.has(group))return false;const resolved=resolveBlueprintForModule(item,blueprint);return getBlueprint(resolved)!==null&&!blueprintAvailableFor(item,blueprint)}function engineerableBase(item,statsOverride){const stats=statsOverride??builtInModuleBySymbol(item,FITTED_ITEM);if(!stats||stats.engineeringLocked)return null;return{stats:stats,base:baseStats(stats)}}function availableBlueprintsFor(item,statsOverride){const engineerable=engineerableBase(item,statsOverride);if(!engineerable)return[];const{stats:stats,base:base}=engineerable;const available=[];for(const[blueprintSymbol,route]of blueprintRoutesFor(item)){const blueprint=BLUEPRINTS[blueprintSymbol];if(!blueprint)continue;const grades=Object.entries(blueprint.grades).filter(([,grade])=>missingBaseLabels(stats,base,grade.features).length===0).map(([grade])=>Number(grade)).filter(Number.isFinite).sort((a,b)=>a-b);if(grades.length>0)available.push({blueprintSymbol:blueprintSymbol,grades:grades,route:route})}return available}function availableExperimentalsFor(item,statsOverride){const engineerable=engineerableBase(item,statsOverride);if(!engineerable)return[];const{stats:stats,base:base}=engineerable;return getExperimentalsForModule(item).filter(experimentalEffectSymbol=>{const effect=EXPERIMENTAL_EFFECTS[experimentalEffectSymbol];return effect!==void 0&&missingBaseLabels(stats,base,effect.modifiers).length===0})}var MAX_ENGINEERING_GRADE=5;function modifiersWithExperimental(variant,experimental){const module=getModuleBySymbol(variant.symbol,ALL_MODULES);const effectName=experimental===void 0?variant.experimentalEffectSymbol:experimental;if(!module||!variant.modifiers?.length&&effectName==null)return null;const effect=effectName==null?void 0:getExperimentalEffect(effectName);if(effectName!==null&&effectName!==void 0&&!effect)return null;return computeModifiers(baseStats(module),fixedModifierFeatures(variant.modifiers??[]),1,effect??void 0)}function getPreEngineeredModifiers(variant){return modifiersWithExperimental(variant)??[]}function journalModifiersWithExperimental(variant,experimental){const module=getModuleBySymbol(variant.symbol,ALL_MODULES);if(!module)return[];const modifiers=journalModifiersFor(module,modifiersWithExperimental(variant,experimental)??[]);const effectName=experimental===void 0?variant.experimentalEffectSymbol:experimental;const damageDistribution=effectName?getExperimentalEffect(effectName)?.damageDistribution:void 0;if(!damageDistribution)return modifiers;for(const type of["kinetic","thermal","explosive","absolute"]){const value=damageDistribution[type];const label=labelsForDamageType(type)[0];if(value===void 0||label===void 0)continue;modifiers.push({Label:label,Value:value*scaleForLabel(label),OriginalValue:(module.damageDistribution?.[type]??0)*scaleForLabel(label)})}return modifiers}function getPreEngineeredJournalModifiers(variant){return journalModifiersWithExperimental(variant)}function sameJournalNumber(actual,expected,base){return Math.abs(actual-expected)<=Math.max(1e-5,Math.abs(base)*1e-4,Math.abs(expected)*1e-6)}function modifierKey(modifier,module){return fieldForLabel(modifier.Label,module)??`label:${normalizeKey(modifier.Label,"identifyPreEngineeredVariant: module.Engineering.Modifiers[].Label")}`}function sameModifier(actual,expected){if(expected.Value!==void 0){return actual.Value!==void 0&&sameJournalNumber(actual.Value,expected.Value,expected.OriginalValue??expected.Value)}return expected.ValueStr!==void 0&&actual.ValueStr!==void 0}function matchesModifierSignature(actualByKey,expected,module){let matched=0;for(const predicted of expected){const actual=actualByKey.get(modifierKey(predicted,module));if(!actual)continue;if(!sameModifier(actual,predicted))return false;matched++}return matched>=Math.max(1,expected.length-1)}function identifyPreEngineeredVariant(module){const engineering=module.Engineering;if(!engineering)return null;requireStringIfPresent(module.Item,"identifyPreEngineeredVariant: module.Item");const stock=getModuleBySymbol(module.Item,ALL_MODULES);if(!stock)return null;const capturedBlueprint=normalizeKey(engineering.BlueprintName,"identifyPreEngineeredVariant: module.Engineering.BlueprintName");const variants=getPreEngineeredVariants(module.Item);const blueprintMatches=variants.filter(candidate=>candidate.blueprintSymbol.toLowerCase()===capturedBlueprint);const blueprintMatch=blueprintMatches.length===1?blueprintMatches[0]:null;const capturedGrade=engineering.Level;if(blueprintMatch?.acquisition==="mercenary"&&Number.isInteger(capturedGrade)&&capturedGrade>=blueprintMatch.grade&&capturedGrade<=MAX_ENGINEERING_GRADE){return blueprintMatch}if(engineering.Modifiers===void 0){const capturedExperimental=normalizeKey(engineering.ExperimentalEffect,"identifyPreEngineeredVariant: module.Engineering.ExperimentalEffect");const identityMatches=blueprintMatches.filter(candidate=>candidate.engineeringLocked===true&&candidate.grade===capturedGrade&&(candidate.experimentalEffectSymbol===void 0?capturedExperimental===void 0&&engineering.ExperimentalEffect_Localised===void 0:candidate.experimentalEffectSymbol.toLowerCase()===capturedExperimental));return identityMatches.length===1?identityMatches[0]:null}if(!engineering.Modifiers?.length)return null;const actualByKey=/* @__PURE__ */new Map;for(const modifier of engineering.Modifiers){actualByKey.set(modifierKey(modifier,stock),modifier)}requireStringIfPresent(engineering.ExperimentalEffect,"identifyPreEngineeredVariant: module.Engineering.ExperimentalEffect");const matches=[];for(const candidate of variants){if(!candidate.modifiers?.length)continue;if(candidate.grade!==engineering.Level)continue;if(candidate.acquisition==="eventReward"&&(engineering.ExperimentalEffect!==void 0||engineering.ExperimentalEffect_Localised!==void 0||capturedBlueprint!==candidate.blueprintSymbol.toLowerCase())){continue}const primitive=modifiersWithExperimental(candidate,engineering.ExperimentalEffect??null);if(!primitive?.length)continue;const matched=matchesModifierSignature(actualByKey,primitive,stock)||matchesModifierSignature(actualByKey,journalModifiersWithExperimental(candidate,engineering.ExperimentalEffect??null),stock);if(matched)matches.push(candidate)}return matches.length===1?matches[0]:null}function unresolvedModifiers(variant){const resolved=new Set(getPreEngineeredModifiers(variant).map(modifier=>modifier.Label));return(variant.modifiers??[]).map(modifier=>modifier.label).filter(label=>!resolved.has(label))}function getPreEngineeredStats(variant){const module=getModuleBySymbol(variant.symbol,ALL_MODULES);if(!module)return null;if(!variant.modifiers?.length&&!variant.engineeringLocked&&variant.experimentalEffectSymbol===void 0)return{...module};const applied=getPreEngineeredModifiers(variant);const resolved={...module,...variant.engineeringLocked?{engineeringLocked:true}:{}};for(const{Label:Label,Value:Value,ValueStr:ValueStr}of applied){const field=fieldForLabel(Label,module);if(field&&field!=="damageDistribution"&&Value!==void 0){Object.assign(resolved,{[field]:Value/scaleForLabel(Label)})}else if(field&&ValueStr!==void 0&&capabilityValueForLabel(Label)!==null){Object.assign(resolved,{[field]:true})}}const experimentalDamageDistribution=variant.experimentalEffectSymbol?getExperimentalEffect(variant.experimentalEffectSymbol)?.damageDistribution:void 0;if(experimentalDamageDistribution){resolved.damageDistribution={...experimentalDamageDistribution};delete resolved.damageComponents}if(resolved.rateOfFire!==void 0&&!applied.some(m=>m.Label==="RateOfFire")&&applied.some(m=>BURST_PATTERN_LABELS.some(label=>label===m.Label))){const rate=journalRateOfFire(preciseValueFor(applied,"BurstInterval")??resolved.burstInterval,preciseValueFor(applied,"BurstSize")??resolved.burstRounds,preciseValueFor(applied,"BurstRateOfFire")??resolved.burstRateOfFire);if(rate!==void 0)resolved.rateOfFire=rate}if(module.damageComponents&&!experimentalDamageDistribution){resolved.damageComponents=scaleDamageComponents(module.damageComponents,module.damage,resolved.damage)}return resolved}export{FITTED_ITEM,availableBlueprintsFor,availableExperimentalsFor,blueprintAvailableFor,blueprintRoutesFor,cloneLoadoutModule,cloneModuleStats,experimentalAvailableFor,getPreEngineeredJournalModifiers,getPreEngineeredModifiers,getPreEngineeredStats,identifyPreEngineeredVariant,isBuiltInHullModule,isCargoHatchSlot,isFinalGuardianWeaponEngineering,isNonOutfittingSlot,journalModifiersFor,matchingKeyIn,missingBaseLabels,orderBySlotLayout,ordinaryEngineeringProof,ownKeyIn,primitiveEngineeringInputsFor,rolledOverFixedArticle,scaleDamageComponents,statesInertModifiers,unresolvedModifiers,unrollableFixedArticle};//# sourceMappingURL=chunk-NBLLW7TH.js.map
1
+ import{builtInModuleBySymbol,getModuleBySymbol}from"./chunk-NZXSIHAW.js";import{getPreEngineeredVariants}from"./chunk-BJU27V6C.js";import{ALL_MODULES}from"./chunk-ZEN5K3GE.js";import{getBlueprintGrade,getBlueprint,BLUEPRINTS}from"./chunk-AYAKU4YA.js";import{EXPERIMENTAL_EFFECTS,getExperimentalEffect}from"./chunk-77I24V6B.js";import{fieldForLabel,damageTypeForLabel,capabilityValueForLabel,baseStats,computeModifiers,labelsForDamageType,scaleForLabel}from"./chunk-A7IVMYNF.js";import{round6,burstPartOrOne,float32FiringCycle,float32RateOfFire,preciseModifierValue,BURST_PATTERN_LABELS,journalRateOfFire,preciseValueFor}from"./chunk-EFQOUATZ.js";import{resolveBlueprintForModule}from"./chunk-XSLPWM5N.js";import{getBlueprintsForModule,getExperimentalsForModule,getEngineeringGroup}from"./chunk-EHFHRQEP.js";import{normalizeKey}from"./chunk-BKWLI44T.js";import{requireStringIfPresent}from"./chunk-PKWVG2JY.js";import{deepFreeze}from"./chunk-DURKO7JU.js";function scaleDamageComponents(components,baseDamage,effectiveDamage){const scale=baseDamage!==void 0&&baseDamage!==0&&effectiveDamage!==void 0?effectiveDamage/baseDamage:1;return{...components.kinetic===void 0?{}:{kinetic:components.kinetic*scale},...components.thermal===void 0?{}:{thermal:components.thermal*scale},...components.explosive===void 0?{}:{explosive:components.explosive*scale},...components.absolute===void 0?{}:{absolute:components.absolute*scale},...components.antiXeno===void 0?{}:{antiXeno:components.antiXeno*scale},...components.unclassified===void 0?{}:{unclassified:components.unclassified.map(value=>value*scale)}}}function fixedModifierFeatures(modifiers){return modifiers.map(modifier=>({label:modifier.label,method:modifier.method,min:modifier.value,max:modifier.value}))}var FITTED_ITEM="ShipLoadout: fitted module Item";function isNonOutfittingSlot(slotKey){return/^(paintjob|shipname\d+|shipid\d+|bobble\d+|decal\d+|shipkit.+|weaponcolour|enginecolour|vesselvoice|shipcockpit|stringlights)$/i.test(slotKey)}function isCargoHatchSlot(slotKey){return slotKey.toLowerCase()==="cargohatch"}function isBuiltInHullModule(module){return isCargoHatchSlot(module.Slot)&&module.Item.toLowerCase().startsWith("modularcargobaydoor")}function cloneLoadoutModule(module){return{Slot:module.Slot,Item:module.Item,...module.On===void 0?{}:{On:module.On},...module.Priority===void 0?{}:{Priority:module.Priority},...module.Health===void 0?{}:{Health:module.Health},...module.Value===void 0?{}:{Value:module.Value},...module.Engineering===void 0?{}:{Engineering:{BlueprintName:module.Engineering.BlueprintName,Level:module.Engineering.Level,Quality:module.Engineering.Quality,...module.Engineering.ExperimentalEffect===void 0?{}:{ExperimentalEffect:module.Engineering.ExperimentalEffect},...module.Engineering.ExperimentalEffect_Localised===void 0?{}:{ExperimentalEffect_Localised:module.Engineering.ExperimentalEffect_Localised},...module.Engineering.Modifiers===void 0?{}:{Modifiers:module.Engineering.Modifiers.map(modifier=>({...modifier}))}}}}}function matchingKeyIn(keyed,slotKey){if(keyed.has(slotKey))return slotKey;const wanted=slotKey.toLowerCase();for(const key of keyed.keys()){if(key.toLowerCase()===wanted)return key}return null}function ownKeyIn(keyed,canonicalKey){return matchingKeyIn(keyed,canonicalKey)??(keyed.size>0&&[...keyed.keys()].every(key=>key===key.toLowerCase())?canonicalKey.toLowerCase():canonicalKey)}function orderBySlotLayout(values,layout,slotOf){const order=new Map(layout.map((slot,index)=>[slot.key.toLowerCase(),index]));return[...values].sort((left,right)=>(order.get(slotOf(left).toLowerCase())??Number.MAX_SAFE_INTEGER)-(order.get(slotOf(right).toLowerCase())??Number.MAX_SAFE_INTEGER))}function cloneModuleStats(module){try{return deepFreeze(structuredClone(module))}catch(error){if(!(error instanceof Error&&error.name==="DataCloneError"))throw error;return deepFreeze({...module,...module.restrictedToShips===void 0?{}:{restrictedToShips:[...module.restrictedToShips]},...module.limitIncrease===void 0?{}:{limitIncrease:{...module.limitIncrease}},...module.damageDistribution===void 0?{}:{damageDistribution:{...module.damageDistribution}},...module.damageComponents===void 0?{}:{damageComponents:{...module.damageComponents,...module.damageComponents.unclassified===void 0?{}:{unclassified:[...module.damageComponents.unclassified]}}},...module.projectileRange===void 0?{}:{projectileRange:{...module.projectileRange}}})}}var GUARDIAN_WEAPON_GROUPS=/* @__PURE__ */new Set(["guardianGauss","guardianPlasma","guardianShard"]);function missingBaseLabels(stats,base,features,experimental){const contributions=[...features,...experimental??[]];return[...new Set(contributions.map(contribution=>contribution.label).filter(label=>{if(base[label]!==void 0)return false;return fieldForLabel(label,stats)===null}))]}function recipeSignature(blueprintSymbol){const blueprint=getBlueprint(blueprintSymbol);if(!blueprint)return null;const grades=Object.entries(blueprint.grades).map(([grade,{features:features}])=>`${grade}:${features.map(feature=>`${feature.label}/${feature.method??""}`).sort().join(",")}`).sort().join(";");return`${blueprint.name.toLowerCase()}|${grades}`}var isGenericSpelling=blueprintSymbol=>blueprintSymbol.toLowerCase().startsWith("misc_");function isSoldWithBlueprint(item,wanted){return getPreEngineeredVariants(item).some(variant=>variant.acquisition==="mercenary"&&variant.blueprintSymbol.toLowerCase()===wanted)}function blueprintRoutesFor(item){const routes=/* @__PURE__ */new Map;for(const blueprintSymbol of getBlueprintsForModule(item))routes.set(blueprintSymbol,"ordinary");for(const variant of getPreEngineeredVariants(item)){if(variant.acquisition==="mercenary"&&!routes.has(variant.blueprintSymbol)){routes.set(variant.blueprintSymbol,"mercenary")}}return routes}function blueprintAvailableFor(item,blueprintSymbol){const offered=getBlueprintsForModule(item);const asWritten=normalizeKey(blueprintSymbol,"ShipLoadout.applyBlueprint: blueprintSymbol");const resolved=resolveBlueprintForModule(item,blueprintSymbol).trim();const wanted=resolved.toLowerCase();if(offered.some(id=>id.toLowerCase()===wanted))return true;if(isSoldWithBlueprint(item,wanted)||isSoldWithBlueprint(item,asWritten))return true;if(!isGenericSpelling(wanted))return false;const signature=recipeSignature(resolved);if(signature===null)return false;return offered.some(id=>recipeSignature(id)===signature&&!isGenericSpelling(id))}function experimentalAvailableFor(item,experimentalEffectSymbol){const wanted=normalizeKey(experimentalEffectSymbol,"ShipLoadout.applyBlueprint: options.experimentalEffectSymbol");return getExperimentalsForModule(item).some(id=>id.toLowerCase()===wanted)}function primitiveLabelFor(stats,label){if(label==="MaximumRange"&&stats.maximumRange!==void 0)return"Range";if(label==="DamageFalloffRange"&&stats.falloffRange!==void 0){return"FalloffRange"}if(label==="Range"&&stats.scannerRange!==void 0)return"ScannerRange";if(label==="DSS_PatchRadius")return"ProbeRadius";if(label==="FuelScoopRate")return"RefuelRate";if(label==="EnergyPerRegen"&&stats.shieldRegenRate!==void 0){return"DistributorDraw"}return label}function primitiveEngineeringInputsFor(stats,grade,experimental){const canonicalGrade={...grade,features:grade.features.map(feature=>{const label=primitiveLabelFor(stats,feature.label);return label===feature.label?feature:{...feature,label:label}})};if(!experimental)return{grade:canonicalGrade};return{grade:canonicalGrade,experimental:{...experimental,modifiers:experimental.modifiers.map(modifier=>{const label=primitiveLabelFor(stats,modifier.label);return label===modifier.label?modifier:{...modifier,label:label}})}}}function matchesCalculatedModifiers(captured,calculated){if(!captured||captured.length!==calculated.length)return false;const byLabel=new Map(captured.map(modifier=>[modifier.Label.trim().toLowerCase(),modifier]));if(byLabel.size!==captured.length)return false;return calculated.every(expected=>{const actual=byLabel.get(expected.Label.trim().toLowerCase());if(!actual)return false;if(expected.Value!==void 0){return actual.Value!==void 0&&Math.abs(actual.Value-expected.Value)<=1e-5*Math.max(1,Math.abs(expected.Value))}return actual.ValueStr===expected.ValueStr})}function identityArticles(item,engineering){if(engineering.Modifiers!==void 0||typeof engineering.BlueprintName!=="string"){return[]}const wanted=engineering.BlueprintName.trim().toLowerCase();const experimental=engineering.ExperimentalEffect?.trim().toLowerCase();return getPreEngineeredVariants(item).filter(candidate=>candidate.blueprintSymbol.trim().toLowerCase()===wanted&&candidate.grade===engineering.Level&&(candidate.experimentalEffectSymbol===void 0?experimental===void 0&&engineering.ExperimentalEffect_Localised===void 0:candidate.experimentalEffectSymbol.trim().toLowerCase()===experimental))}function unrollableFixedArticle(item,engineering){const matches=identityArticles(item,engineering).filter(candidate=>!blueprintAvailableFor(item,candidate.blueprintSymbol));return matches.length===1?matches[0]:null}function rolledOverFixedArticle(item,engineering){const matches=identityArticles(item,engineering).filter(candidate=>blueprintAvailableFor(item,candidate.blueprintSymbol));return matches.length===1?matches[0]:null}function statesInertModifiers(stats,modifiers){return modifiers.every(modifier=>{if(damageTypeForLabel(modifier.Label)!==null||capabilityValueForLabel(modifier.Label)!==null){return false}const field=fieldForLabel(modifier.Label,stats);return field===null||typeof stats[field]!=="number"})}function ordinaryEngineeringProof(item,engineering,experimental){const recipe=resolveBlueprintForModule(item,engineering.BlueprintName);const fixedCandidate=getPreEngineeredVariants(item).some(candidate=>candidate.acquisition!=="mercenary"&&candidate.blueprintSymbol.trim().toLowerCase()===recipe.trim().toLowerCase());if(!fixedCandidate)return"notFixedCandidate";const grade=getBlueprintGrade(recipe,engineering.Level);const quality=engineering.Quality;const stock=builtInModuleBySymbol(item,FITTED_ITEM);if(!stock||!grade||experimental===null||!Number.isFinite(quality)||quality<0||quality>1){return"unproven"}const current=primitiveEngineeringInputsFor(stock,grade,experimental);if(missingBaseLabels(stock,baseStats(stock),current.grade.features,current.experimental?.modifiers).length>0){return"unproven"}const calculated=journalModifiersFor(stock,computeModifiers(baseStats(stock),current.grade,quality,current.experimental));const damageDistribution=current.experimental?.damageDistribution??current.grade.damageDistribution;if(damageDistribution){for(const type of["kinetic","thermal","explosive","absolute"]){const value=damageDistribution[type];if(value===void 0)continue;const label=labelsForDamageType(type)[0];if(label===void 0)continue;calculated.push({Label:label,Value:value*scaleForLabel(label),OriginalValue:(stock.damageDistribution?.[type]??0)*scaleForLabel(label)})}}return matchesCalculatedModifiers(engineering.Modifiers,calculated)?"proven":"unproven"}function float32DamagePerSecond(damage,rounds,rate,burstRounds,cycle){if(cycle!==void 0&&(rounds!==1||burstRounds!==1)){const damagePerCycle=Math.fround(Math.fround(Math.fround(damage)*Math.fround(rounds))*Math.fround(burstRounds));return Math.fround(damagePerCycle/cycle)}return Math.fround(Math.fround(Math.fround(damage)*Math.fround(rounds))*Math.fround(rate))}var JOURNAL_MODIFIER_ORDER=["CargoCapacity","GuardianModuleResistance","Mass","Integrity","PowerDraw","BootTime","PowerCapacity","HeatEfficiency","FSDOptimalMass","MaxFuelPerJump","FSDHeatRate","EngineOptimalMass","EngineOptPerformance","EngineHeatRate","ShieldGenOptimalMass","ShieldGenStrength","DamagePerSecond","Damage","DistributorDraw","ThermalLoad","ArmourPenetration","MaximumRange","ShotSpeed","RateOfFire","DamageType","$Kinetic;","$Thermal;","$Explosive;","$Absolute;","AmmoClipSize","AmmoMaximum","ReloadTime","Jitter","DamageFalloffRange","DefenceModifierShieldMultiplier","DefenceModifierHealthMultiplier","DefenceModifierHealthAddition","DefenceModifierShieldAddition","RegenRate","BrokenRegenRate","EnergyPerRegen","KineticResistance","ThermicResistance","ExplosiveResistance","CausticResistance","DamageProtection","ModuleDefenceAbsorption","WeaponsCapacity","WeaponsRecharge","EnginesCapacity","EnginesRecharge","SystemsCapacity","SystemsRecharge","ShieldBankSpinUp","ShieldBankDuration","ShieldBankReinforcement","ShieldBankHeat","FSDInterdictorRange","FSDInterdictorFacingLimit","SensorTargetScanAngle","MaxAngle","ScannerTimeToScan","Range","DSS_PatchRadius","FuelScoopRate","FuelCapacity"];var JOURNAL_MODIFIER_RANK=new Map(JOURNAL_MODIFIER_ORDER.map((label,index)=>[label,index]));function sortJournalModifiers(modifiers){return modifiers.map((modifier,index)=>({modifier:modifier,index:index})).sort((a,b)=>(JOURNAL_MODIFIER_RANK.get(a.modifier.Label)??JOURNAL_MODIFIER_ORDER.length)-(JOURNAL_MODIFIER_RANK.get(b.modifier.Label)??JOURNAL_MODIFIER_ORDER.length)||a.index-b.index).map(({modifier:modifier})=>modifier)}function journalModifiersFor(stats,modifiers){const weapon=stats.damage!==void 0;const valueFor=(label,fallback)=>{const modifier=modifiers.find(candidate=>candidate.Label===label);return(modifier&&preciseModifierValue(modifier))??Math.fround(fallback)};const burstTouched=["BurstInterval","BurstSize","BurstRateOfFire"].some(label=>modifiers.some(modifier=>modifier.Label===label));const damageTouched=modifiers.some(modifier=>modifier.Label==="Damage");const rateTouched=burstTouched||modifiers.some(modifier=>modifier.Label==="RateOfFire");let damagePerSecond;let derivedRate;if(weapon&&(damageTouched||rateTouched)){const continuous=stats.burstInterval===void 0&&stats.rateOfFire===void 0;const baseDamage=Math.fround(stats.damage);const effectiveDamage=valueFor("Damage",stats.damage);if(continuous){damagePerSecond={Label:"DamagePerSecond",Value:round6(effectiveDamage),OriginalValue:round6(baseDamage)}}else{const burstRounds=burstPartOrOne(valueFor("BurstSize",stats.burstRounds??1));const burstRate=burstPartOrOne(valueFor("BurstRateOfFire",stats.burstRateOfFire??1));const baseBurstRounds=Math.fround(burstPartOrOne(stats.burstRounds));const baseBurstRate=Math.fround(burstPartOrOne(stats.burstRateOfFire));const baseInterval=stats.burstInterval===void 0?void 0:Math.fround(stats.burstInterval);const baseCycle=baseInterval===void 0?void 0:float32FiringCycle(baseInterval,baseBurstRounds,baseBurstRate);const baseRate=baseInterval!==void 0?float32RateOfFire(baseInterval,baseBurstRounds,baseBurstRate):stats.rateOfFire===void 0?void 0:Math.fround(stats.rateOfFire);const rateModifier=modifiers.find(modifier=>modifier.Label==="RateOfFire");const effectiveRate=rateModifier&&preciseModifierValue(rateModifier);const effectiveInterval=valueFor("BurstInterval",stats.burstInterval??0);const effectiveCycle=effectiveRate===void 0?float32FiringCycle(effectiveInterval,burstRounds,burstRate):void 0;const rate=effectiveRate??(effectiveCycle===void 0?void 0:Math.fround(Math.fround(burstRounds)/effectiveCycle));if(baseRate!==void 0&&rate!==void 0){const stockRounds=Math.fround(stats.roundsPerShot??1);const effectiveRounds=Math.fround(modifiers.find(modifier=>modifier.Label==="Rounds"||modifier.Label==="RoundsPerShot")?.Value??stockRounds);damagePerSecond={Label:"DamagePerSecond",Value:round6(float32DamagePerSecond(effectiveDamage,effectiveRounds,rate,burstRounds,effectiveCycle)),OriginalValue:round6(float32DamagePerSecond(baseDamage,stockRounds,baseRate,baseBurstRounds,baseCycle))};if(burstTouched){derivedRate={Label:"RateOfFire",Value:round6(rate),OriginalValue:round6(baseRate)}}}}}const result=[];for(const modifier of modifiers){const label=modifier.Label;if(weapon&&["BurstInterval","BurstSize","BurstRateOfFire"].includes(label))continue;if(weapon&&label==="Damage"&&stats.rateOfFire===void 0)continue;let journalLabel=label;if(label==="Range"&&stats.maximumRange!==void 0)journalLabel="MaximumRange";else if(label==="FalloffRange"&&stats.falloffRange!==void 0){journalLabel="DamageFalloffRange"}else if(label==="ScannerRange"&&stats.scannerRange!==void 0){journalLabel="Range"}else if(label==="ProbeRadius")journalLabel="DSS_PatchRadius";else if(label==="RefuelRate")journalLabel="FuelScoopRate";else if(label==="DistributorDraw"&&stats.shieldRegenRate!==void 0){journalLabel="EnergyPerRegen"}result.push(journalLabel===label?modifier:{...modifier,Label:journalLabel})}if(damagePerSecond)result.push(damagePerSecond);if(derivedRate){const direct=result.findIndex(modifier=>modifier.Label==="RateOfFire");if(direct>=0)result[direct]=derivedRate;else result.push(derivedRate)}return sortJournalModifiers(result)}function isFinalGuardianWeaponEngineering(item,blueprint){const group=getEngineeringGroup(item);if(group===null||!GUARDIAN_WEAPON_GROUPS.has(group))return false;const resolved=resolveBlueprintForModule(item,blueprint);return getBlueprint(resolved)!==null&&!blueprintAvailableFor(item,blueprint)}function engineerableBase(item,statsOverride){const stats=statsOverride??builtInModuleBySymbol(item,FITTED_ITEM);if(!stats||stats.engineeringLocked)return null;return{stats:stats,base:baseStats(stats)}}function availableBlueprintsFor(item,statsOverride){const engineerable=engineerableBase(item,statsOverride);if(!engineerable)return[];const{stats:stats,base:base}=engineerable;const available=[];for(const[blueprintSymbol,route]of blueprintRoutesFor(item)){const blueprint=BLUEPRINTS[blueprintSymbol];if(!blueprint)continue;const grades=Object.entries(blueprint.grades).filter(([,grade])=>missingBaseLabels(stats,base,grade.features).length===0).map(([grade])=>Number(grade)).filter(Number.isFinite).sort((a,b)=>a-b);if(grades.length>0)available.push({blueprintSymbol:blueprintSymbol,grades:grades,route:route})}return available}function availableExperimentalsFor(item,statsOverride){const engineerable=engineerableBase(item,statsOverride);if(!engineerable)return[];const{stats:stats,base:base}=engineerable;return getExperimentalsForModule(item).filter(experimentalEffectSymbol=>{const effect=EXPERIMENTAL_EFFECTS[experimentalEffectSymbol];return effect!==void 0&&missingBaseLabels(stats,base,effect.modifiers).length===0})}var MAX_ENGINEERING_GRADE=5;function modifiersWithExperimental(variant,experimental){const module=getModuleBySymbol(variant.symbol,ALL_MODULES);const effectName=experimental===void 0?variant.experimentalEffectSymbol:experimental;if(!module||!variant.modifiers?.length&&effectName==null)return null;const effect=effectName==null?void 0:getExperimentalEffect(effectName);if(effectName!==null&&effectName!==void 0&&!effect)return null;return computeModifiers(baseStats(module),fixedModifierFeatures(variant.modifiers??[]),1,effect??void 0)}function getPreEngineeredModifiers(variant){return modifiersWithExperimental(variant)??[]}function journalModifiersWithExperimental(variant,experimental){const module=getModuleBySymbol(variant.symbol,ALL_MODULES);if(!module)return[];const modifiers=journalModifiersFor(module,modifiersWithExperimental(variant,experimental)??[]);const effectName=experimental===void 0?variant.experimentalEffectSymbol:experimental;const damageDistribution=effectName?getExperimentalEffect(effectName)?.damageDistribution:void 0;if(!damageDistribution)return modifiers;for(const type of["kinetic","thermal","explosive","absolute"]){const value=damageDistribution[type];const label=labelsForDamageType(type)[0];if(value===void 0||label===void 0)continue;modifiers.push({Label:label,Value:value*scaleForLabel(label),OriginalValue:(module.damageDistribution?.[type]??0)*scaleForLabel(label)})}return modifiers}function getPreEngineeredJournalModifiers(variant){return journalModifiersWithExperimental(variant)}function sameJournalNumber(actual,expected,base){return Math.abs(actual-expected)<=Math.max(1e-5,Math.abs(base)*1e-4,Math.abs(expected)*1e-6)}function modifierKey(modifier,module){return fieldForLabel(modifier.Label,module)??`label:${normalizeKey(modifier.Label,"identifyPreEngineeredVariant: module.Engineering.Modifiers[].Label")}`}function sameModifier(actual,expected){if(expected.Value!==void 0){return actual.Value!==void 0&&sameJournalNumber(actual.Value,expected.Value,expected.OriginalValue??expected.Value)}return expected.ValueStr!==void 0&&actual.ValueStr!==void 0}function matchesModifierSignature(actualByKey,expected,module){let matched=0;for(const predicted of expected){const actual=actualByKey.get(modifierKey(predicted,module));if(!actual)continue;if(!sameModifier(actual,predicted))return false;matched++}return matched>=Math.max(1,expected.length-1)}function identifyPreEngineeredVariant(module){const engineering=module.Engineering;if(!engineering)return null;requireStringIfPresent(module.Item,"identifyPreEngineeredVariant: module.Item");const stock=getModuleBySymbol(module.Item,ALL_MODULES);if(!stock)return null;const capturedBlueprint=normalizeKey(engineering.BlueprintName,"identifyPreEngineeredVariant: module.Engineering.BlueprintName");const variants=getPreEngineeredVariants(module.Item);const blueprintMatches=variants.filter(candidate=>candidate.blueprintSymbol.toLowerCase()===capturedBlueprint);const blueprintMatch=blueprintMatches.length===1?blueprintMatches[0]:null;const capturedGrade=engineering.Level;if(blueprintMatch?.acquisition==="mercenary"&&Number.isInteger(capturedGrade)&&capturedGrade>=blueprintMatch.grade&&capturedGrade<=MAX_ENGINEERING_GRADE){return blueprintMatch}if(engineering.Modifiers===void 0){const capturedExperimental=normalizeKey(engineering.ExperimentalEffect,"identifyPreEngineeredVariant: module.Engineering.ExperimentalEffect");const identityMatches=blueprintMatches.filter(candidate=>candidate.engineeringLocked===true&&candidate.grade===capturedGrade&&(candidate.experimentalEffectSymbol===void 0?capturedExperimental===void 0&&engineering.ExperimentalEffect_Localised===void 0:candidate.experimentalEffectSymbol.toLowerCase()===capturedExperimental));return identityMatches.length===1?identityMatches[0]:null}if(!engineering.Modifiers?.length)return null;const actualByKey=/* @__PURE__ */new Map;for(const modifier of engineering.Modifiers){actualByKey.set(modifierKey(modifier,stock),modifier)}requireStringIfPresent(engineering.ExperimentalEffect,"identifyPreEngineeredVariant: module.Engineering.ExperimentalEffect");const matches=[];for(const candidate of variants){if(!candidate.modifiers?.length)continue;if(candidate.grade!==engineering.Level)continue;if(candidate.acquisition==="eventReward"&&(engineering.ExperimentalEffect!==void 0||engineering.ExperimentalEffect_Localised!==void 0||capturedBlueprint!==candidate.blueprintSymbol.toLowerCase())){continue}const primitive=modifiersWithExperimental(candidate,engineering.ExperimentalEffect??null);if(!primitive?.length)continue;const matched=matchesModifierSignature(actualByKey,primitive,stock)||matchesModifierSignature(actualByKey,journalModifiersWithExperimental(candidate,engineering.ExperimentalEffect??null),stock);if(matched)matches.push(candidate)}return matches.length===1?matches[0]:null}function unresolvedModifiers(variant){const resolved=new Set(getPreEngineeredModifiers(variant).map(modifier=>modifier.Label));return(variant.modifiers??[]).map(modifier=>modifier.label).filter(label=>!resolved.has(label))}function getPreEngineeredStats(variant){const module=getModuleBySymbol(variant.symbol,ALL_MODULES);if(!module)return null;if(!variant.modifiers?.length&&!variant.engineeringLocked&&variant.experimentalEffectSymbol===void 0)return{...module};const applied=getPreEngineeredModifiers(variant);const resolved={...module,...variant.engineeringLocked?{engineeringLocked:true}:{}};for(const{Label:Label,Value:Value,ValueStr:ValueStr}of applied){const field=fieldForLabel(Label,module);if(field&&field!=="damageDistribution"&&Value!==void 0){Object.assign(resolved,{[field]:Value/scaleForLabel(Label)})}else if(field&&ValueStr!==void 0&&capabilityValueForLabel(Label)!==null){Object.assign(resolved,{[field]:true})}}const experimentalDamageDistribution=variant.experimentalEffectSymbol?getExperimentalEffect(variant.experimentalEffectSymbol)?.damageDistribution:void 0;if(experimentalDamageDistribution){resolved.damageDistribution={...experimentalDamageDistribution};delete resolved.damageComponents}if(resolved.rateOfFire!==void 0&&!applied.some(m=>m.Label==="RateOfFire")&&applied.some(m=>BURST_PATTERN_LABELS.some(label=>label===m.Label))){const rate=journalRateOfFire(preciseValueFor(applied,"BurstInterval")??resolved.burstInterval,preciseValueFor(applied,"BurstSize")??resolved.burstRounds,preciseValueFor(applied,"BurstRateOfFire")??resolved.burstRateOfFire);if(rate!==void 0)resolved.rateOfFire=rate}if(module.damageComponents&&!experimentalDamageDistribution){resolved.damageComponents=scaleDamageComponents(module.damageComponents,module.damage,resolved.damage)}return resolved}export{FITTED_ITEM,availableBlueprintsFor,availableExperimentalsFor,blueprintAvailableFor,blueprintRoutesFor,cloneLoadoutModule,cloneModuleStats,experimentalAvailableFor,getPreEngineeredJournalModifiers,getPreEngineeredModifiers,getPreEngineeredStats,identifyPreEngineeredVariant,isBuiltInHullModule,isCargoHatchSlot,isFinalGuardianWeaponEngineering,isNonOutfittingSlot,journalModifiersFor,matchingKeyIn,missingBaseLabels,orderBySlotLayout,ordinaryEngineeringProof,ownKeyIn,primitiveEngineeringInputsFor,rolledOverFixedArticle,scaleDamageComponents,statesInertModifiers,unresolvedModifiers,unrollableFixedArticle};//# sourceMappingURL=chunk-4U7KYQGK.js.map
@@ -0,0 +1 @@
1
+ import{withPreciseModifierValue,round6}from"./chunk-EFQOUATZ.js";var percent=100;var STAT_LABELS=[{label:"Mass",field:"mass"},{label:"Integrity",field:"integrity"},{label:"PowerDraw",field:"powerDraw"},{label:"BootTime",field:"bootTime"},{label:"FSDOptimalMass",field:"optMass"},{label:"EngineOptimalMass",field:"optMass"},{label:"EngineMinimumMass",field:"minMass"},{label:"MaximumMass",field:"maxMass"},{label:"ShieldGenOptimalMass",field:"optMass"},{label:"ShieldGenMinimumMass",field:"minMass"},{label:"ShieldGenMaximumMass",field:"maxMass"},{label:"EngineOptPerformance",field:"optMultiplier",scale:percent},{label:"EngineMinPerformance",field:"minMultiplier",scale:percent},{label:"EngineMaxPerformance",field:"maxMultiplier",scale:percent},{label:"ShieldGenStrength",field:"optMultiplier",scale:percent},{label:"ShieldGenMinStrength",field:"minMultiplier",scale:percent},{label:"ShieldGenMaxStrength",field:"maxMultiplier",scale:percent},{label:"EngineHeatRate",field:"engineHeatRate"},{label:"FSDHeatRate",field:"fsdHeatRate"},{label:"MaxFuelPerJump",field:"maxFuel"},{label:"PowerCapacity",field:"powerCapacity"},{label:"HeatEfficiency",field:"heatEfficiency"},{label:"EnginesCapacity",field:"enginesCapacity"},{label:"EnginesRecharge",field:"enginesRecharge"},{label:"SystemsCapacity",field:"systemsCapacity"},{label:"SystemsRecharge",field:"systemsRecharge"},{label:"WeaponsCapacity",field:"weaponsCapacity"},{label:"WeaponsRecharge",field:"weaponsRecharge"},{label:"RefuelRate",field:"refuelRate"},{label:"FuelScoopRate",field:"refuelRate"},{label:"FuelCapacity",field:"fuelCapacity"},{label:"CargoCapacity",field:"cargoCapacity"},{label:"CabinCapacity",field:"cabinCapacity"},{label:"RegenRate",field:"shieldRegenRate"},{label:"BrokenRegenRate",field:"shieldBrokenRegenRate"},{label:"EnergyPerRegen",field:"distributorDraw"},{label:"ShieldBankReinforcement",field:"shieldBankReinforcement"},{label:"ShieldBankHeat",field:"shieldBankHeat"},{label:"ShieldBankHeat",field:"thermalLoad"},{label:"ShieldBankSpinUp",field:"shieldBankSpinUp"},{label:"ShieldBankDuration",field:"shieldBankDuration"},{label:"ScannerRange",field:"scannerRange"},{label:"SensorTargetScanAngle",field:"scanAngle"},{label:"MaxAngle",field:"scanAngle"},{label:"ScannerTimeToScan",field:"scanTime"},{label:"ProbeRadius",field:"probeRadius"},{label:"DSS_PatchRadius",field:"probeRadius"},{label:"FSDInterdictorFacingLimit",field:"interdictorFacingLimit"},{label:"FSDInterdictorRange",field:"interdictorRange"},{label:"DefenceModifierShieldMultiplier",field:"shieldBoost",scale:percent,multiplierBase:percent},{label:"DefenceModifierHealthMultiplier",field:"hullBoost",scale:percent,multiplierBase:percent},{label:"DefenceModifierHealthAddition",field:"hullReinforcement"},{label:"DefenceModifierShieldAddition",field:"shieldAddition"},{label:"GuardianModuleResistance",field:"guardianZoneResistance",capabilityValue:"Active"},{label:"KineticResistance",field:"kineticResistance",scale:percent,multiplierBase:-percent},{label:"ThermicResistance",field:"thermalResistance",scale:percent,multiplierBase:-percent},{label:"ExplosiveResistance",field:"explosiveResistance",scale:percent,multiplierBase:-percent},{label:"CausticResistance",field:"causticResistance",scale:percent,multiplierBase:-percent},{label:"DamageProtection",field:"moduleProtection",scale:percent},{label:"ModuleDefenceAbsorption",field:"moduleProtection",scale:percent},{label:"Damage",field:"damage"},{label:"Rounds",field:"roundsPerShot",defaultBase:1},{label:"RoundsPerShot",field:"roundsPerShot",defaultBase:1},{label:"RateOfFire",field:"rateOfFire"},{label:"BurstInterval",field:"burstInterval"},{label:"BurstSize",field:"burstRounds",defaultBase:1},{label:"BurstRateOfFire",field:"burstRateOfFire",defaultBase:1},{label:"AmmoClipSize",field:"clipSize"},{label:"AmmoMaximum",field:"ammoMaximum"},{label:"ReloadTime",field:"reloadTime"},{label:"DistributorDraw",field:"distributorDraw"},{label:"ThermalLoad",field:"thermalLoad"},{label:"ArmourPenetration",field:"armourPiercing"},{label:"Range",field:"maximumRange"},{label:"Range",field:"scannerRange"},{label:"MaximumRange",field:"maximumRange"},{label:"FalloffRange",field:"falloffRange"},{label:"DamageFalloffRange",field:"falloffRange"},{label:"ShotSpeed",field:"shotSpeed"},{label:"$Kinetic;",field:"damageDistribution",damageType:"kinetic",scale:percent,defaultBase:0},{label:"$Thermal;",field:"damageDistribution",damageType:"thermal",scale:percent,defaultBase:0},{label:"$Explosive;",field:"damageDistribution",damageType:"explosive",scale:percent,defaultBase:0},{label:"$Absolute;",field:"damageDistribution",damageType:"absolute",scale:percent,defaultBase:0},{label:"Jitter",field:"jitter",defaultBase:0}];var BY_LABEL=(()=>{const entries=/* @__PURE__ */new Map;for(const entry of STAT_LABELS){const forLabel=entries.get(entry.label)??[];forLabel.push(entry);entries.set(entry.label,forLabel)}return entries})();var LABELS_BY_FIELD=(()=>{const labels=/* @__PURE__ */new Map;for(const entry of STAT_LABELS){if(entry.damageType!==void 0)continue;const fieldLabels=labels.get(entry.field)??[];fieldLabels.push(entry.label);labels.set(entry.field,fieldLabels)}return labels})();function baseStats(stats){const base={};for(const{label:label,field:field,damageType:damageType,scale:scale,defaultBase:defaultBase}of STAT_LABELS){if(base[label]!==void 0)continue;const value=damageType===void 0?stats[field]:stats.damageDistribution?.[damageType];if(typeof value==="number")base[label]=value*(scale??1);else if(defaultBase!==void 0&&isWeapon(stats))base[label]=defaultBase}return base}function isWeapon(stats){return stats.damage!==void 0}function fieldForLabel(label,stats){const entries=BY_LABEL.get(label);if(!entries||entries.length===0)return null;if(stats&&entries.length>1){const carried=entries.find(entry=>typeof stats[entry.field]==="number");if(carried)return carried.field}return entries[0].field}function damageTypeForLabel(label){return BY_LABEL.get(label)?.[0]?.damageType??null}function labelsForDamageType(type){return STAT_LABELS.filter(entry=>entry.damageType===type).map(entry=>entry.label)}function scaleForLabel(label){return BY_LABEL.get(label)?.[0]?.scale??1}function multiplierBaseForLabel(label){return BY_LABEL.get(label)?.[0]?.multiplierBase??null}function capabilityValueForLabel(label){return BY_LABEL.get(label)?.[0]?.capabilityValue??null}function labelsForField(field){return LABELS_BY_FIELD.get(field)??[]}var FLOAT32_SCALED_BASE_LABELS=/* @__PURE__ */new Set(["EngineOptPerformance","EngineMinPerformance","EngineMaxPerformance","ShieldGenStrength","ShieldGenMinStrength","ShieldGenMaxStrength"]);function computeModifiers(base,grade,quality=1,experimental){if(!Number.isFinite(quality)||quality<0||quality>1){throw new RangeError(`computeModifiers: quality must be a finite number in [0, 1]`)}const f=Math.fround;const roll=f(quality);const byLabel=/* @__PURE__ */new Map;const add=(label,method,value,stated)=>{const list=byLabel.get(label)??[];list.push({method:method,value:value,stated:stated});byLabel.set(label,list)};const features="features"in grade?grade.features:grade;for(const feature of features){const rolledValue=roll===0?feature.min:roll===1?feature.max:feature.min+(feature.max-feature.min)*roll;const value=feature.method==="overwrite"?rolledValue:roll===0||roll===1?f(rolledValue):f(f(feature.min)+f(f(feature.max-feature.min)*roll));add(feature.label,feature.method,value,feature.min===feature.max||roll===0||roll===1)}const experimentalModifiers=experimental&&"modifiers"in experimental?experimental.modifiers:experimental;for(const e of experimentalModifiers??[]){add(e.label,e.method,e.method==="overwrite"?e.value:f(e.value),true)}const modifiers=[];let clipIsOverwritten=false;for(const[label,contributions]of byLabel){const capabilityValue=capabilityValueForLabel(label);if(capabilityValue!==null){modifiers.push({Label:label,ValueStr:capabilityValue});continue}const baseValue=base[label];const overwrite=contributions.find(c=>c.method==="overwrite");const multiplierBase=multiplierBaseForLabel(label);const original=baseValue===void 0?void 0:float32JournalValue(baseValue,multiplierBase,FLOAT32_SCALED_BASE_LABELS.has(label)?scaleForLabel(label):1);const baseless=original===void 0&&(multiplierBase!==null||overwrite!==void 0||contributions.some(c=>c.method==="additive"));if(original===void 0&&!baseless)continue;let value=original??0;if(multiplierBase===null){for(const c of contributions){if(c.method==="multiplicative")value=f(value*f(1+f(c.value)))}for(const c of contributions){if(c.method==="additive")value=f(value+f(c.value))}}else{let factor=f(1+value/multiplierBase);for(const c of contributions){if(c.method==="overwrite")continue;factor=f(factor*f(1+f(f(c.value)*100/multiplierBase)))}value=f(f(factor-1)*multiplierBase)}if(overwrite)value=overwrite.value;if(label==="AmmoClipSize"){if(overwrite)clipIsOverwritten=true;else if(original!==void 0&&contributions.every(c=>c.stated)){value=snapToStatedWhole(value,original)}}else if(label==="AmmoMaximum"&&!overwrite){value=Math.round(value)}modifiers.push(withPreciseModifierValue({Label:label,Value:round6(value),...original===void 0&&multiplierBase===null?{}:{OriginalValue:round6(original??0)}},value))}const resolved=resolveFalloffFromRange(modifiers,base);return clipIsOverwritten?resolved:roundClipToWholeBursts(resolved,base)}function float32JournalValue(value,multiplierBase,scale){if(multiplierBase===null){return Math.fround(Math.fround(value/scale)*scale)}const factor=Math.fround(1+value/multiplierBase);return Math.fround(Math.fround(factor-1)*multiplierBase)}function roundClipToWholeBursts(modifiers,base){const clip=modifiers.find(m=>m.Label==="AmmoClipSize");if(!clip?.Value||clip.Value===clip.OriginalValue)return modifiers;const burst=modifiers.find(m=>m.Label==="BurstSize")?.Value||base["BurstSize"]||1;const rounded=Math.ceil(clip.Value/burst)*burst;if(rounded===clip.Value)return modifiers;return modifiers.map(m=>m===clip?{...m,Value:rounded}:m)}function snapToStatedWhole(value,base){const whole=Math.round(value);return Math.abs(value-whole)<=Math.abs(base)*5e-4?whole:value}function resolveFalloffFromRange(modifiers,base){const falloff=modifiers.find(m=>m.Label==="FalloffRange");if(!falloff||falloff.Value===void 0)return modifiers;const range=modifiers.find(m=>m.Label==="Range"||m.Label==="MaximumRange")?.Value??base["Range"]??base["MaximumRange"];if(range===void 0){return falloff.Value<=1?modifiers.filter(m=>m!==falloff):modifiers}if(falloff.Value<=1||falloff.Value>range){return modifiers.map(m=>m===falloff?{...m,Value:round6(range)}:m)}return modifiers}function sumMaterials(...lists){const totals=/* @__PURE__ */new Map;for(const list of lists){for(const material of list){const key=material.symbol.toLowerCase();const previous=totals.get(key);totals.set(key,{symbol:previous?.symbol??material.symbol,name:previous?.name??material.name,count:(previous?.count??0)+material.count})}}return[...totals.values()]}export{baseStats,capabilityValueForLabel,computeModifiers,damageTypeForLabel,fieldForLabel,labelsForDamageType,labelsForField,scaleForLabel,sumMaterials};//# sourceMappingURL=chunk-A7IVMYNF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ships/internal/module-stat-labels.ts","../src/ships/engineering.ts"],"names":["withPreciseModifierValue","round6","percent","STAT_LABELS","label","field","scale","multiplierBase","capabilityValue","defaultBase","damageType","BY_LABEL","entries","Map","entry","forLabel","get","push","set","LABELS_BY_FIELD","labels","fieldLabels","baseStats","stats","base","value","damageDistribution","isWeapon","damage","fieldForLabel","length","carried","find","damageTypeForLabel","labelsForDamageType","type","filter","map","scaleForLabel","multiplierBaseForLabel","capabilityValueForLabel","labelsForField","FLOAT32_SCALED_BASE_LABELS","Set","computeModifiers","grade","quality","experimental","Number","isFinite","RangeError","f","Math","fround","roll","byLabel","add","method","stated","list","features","feature","rolledValue","min","max","experimentalModifiers","modifiers","e","clipIsOverwritten","contributions","Label","ValueStr","baseValue","overwrite","c","original","float32JournalValue","has","baseless","some","factor","every","snapToStatedWhole","round","Value","OriginalValue","resolved","resolveFalloffFromRange","roundClipToWholeBursts","clip","m","burst","rounded","ceil","whole","abs","falloff","range","sumMaterials","lists","totals","material","key","symbol","toLowerCase","previous","name","count","values"],"mappings":"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"}
@@ -1 +1 @@
1
- import{filterByKey}from"./chunk-BKWLI44T.js";import{requireStringIfPresent}from"./chunk-PKWVG2JY.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var pre_engineered_default=[{symbol:"Hpt_Mining_AbrBlstr_Fixed_Small",name:"Far-Reaching Abrasion Blaster",blueprintSymbol:"AbrasionBlaster_FarReaching",grade:1,acquisition:"mercenary",mercCoinCost:400},{symbol:"Hpt_CausticMissile_Fixed_Medium",name:"High-Yield Enzyme Missile Rack",blueprintSymbol:"EnzymeMissileRack_HighYield",grade:1,acquisition:"mercenary",mercCoinCost:850},{symbol:"Hpt_Slugshot_Gimbal_Small",name:"Double Screaming Fragment Cannon",blueprintSymbol:"FragmentCannonSmall_DoubleScreaming",grade:1,acquisition:"mercenary",experimentalEffectSymbol:"special_screening_shell",mercCoinCost:800},{symbol:"Hpt_Slugshot_Gimbal_Large",name:"Double Screaming Fragment Cannon",blueprintSymbol:"FragmentCannonLarge_DoubleScreaming",grade:1,acquisition:"mercenary",experimentalEffectSymbol:"special_screening_shell",mercCoinCost:950},{symbol:"Hpt_MiningLaser_Fixed_Small",name:"Long Range Mining Laser",blueprintSymbol:"MiningLaser_LongRange",grade:1,acquisition:"mercenary",experimentalEffectSymbol:"special_incendiary_rounds",mercCoinCost:450},{symbol:"Hpt_MultiCannon_Fixed_Medium",name:"Rapid Phase Multi-Cannon",blueprintSymbol:"MultiCannon_Rapid",grade:1,acquisition:"mercenary",experimentalEffectSymbol:"special_phasing_sequence",mercCoinCost:850},{symbol:"Hpt_Railgun_Fixed_Medium",name:"Enduring Feedback Rail Gun",blueprintSymbol:"RailGun_LongShot",grade:1,acquisition:"mercenary",experimentalEffectSymbol:"special_feedback_cascade_cooled",mercCoinCost:950},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Drag Seeker Missile Rack",blueprintSymbol:"SeekerMissileRack_Drag",grade:1,acquisition:"mercenary",experimentalEffectSymbol:"special_drag_munitions",mercCoinCost:800},{symbol:"Hpt_BasicMissileRack_Fixed_Large",name:"Drag Seeker Missile Rack",blueprintSymbol:"SeekerMissileRack_Drag",grade:1,acquisition:"mercenary",experimentalEffectSymbol:"special_drag_munitions",mercCoinCost:900},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Lightweight Thermal Seeker Missile Rack",blueprintSymbol:"SeekerMissileRack_LightWeightThermal",grade:1,acquisition:"mercenary",experimentalEffectSymbol:"special_thermal_cascade",mercCoinCost:800},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Lockdown Seeker Missile Rack",blueprintSymbol:"SeekerMissileRackMedium_Lockdown",grade:1,acquisition:"mercenary",experimentalEffectSymbol:"special_fsd_interrupt",mercCoinCost:800},{symbol:"Hpt_BasicMissileRack_Fixed_Large",name:"Lockdown Seeker Missile Rack",blueprintSymbol:"SeekerMissileRackLarge_Lockdown",grade:1,acquisition:"mercenary",experimentalEffectSymbol:"special_fsd_interrupt",mercCoinCost:900},{symbol:"Int_CargoRack_Size5_Class1",name:"Extended Cargo Rack",blueprintSymbol:"CargoRackS5C1_Extended",grade:1,acquisition:"mercenary",mercCoinCost:550},{symbol:"Int_CargoRack_Size6_Class1",name:"Extended Cargo Rack",blueprintSymbol:"CargoRackS6C1_Extended",grade:1,acquisition:"mercenary",mercCoinCost:550},{symbol:"Int_DetailedSurfaceScanner_Tiny",name:"Long Range Detailed Surface Scanner",blueprintSymbol:"DetailedSurfaceScanner_LongRange",grade:1,acquisition:"mercenary",mercCoinCost:350},{symbol:"Int_ModuleReinforcement_Size5_Class2",name:"Heavy Duty Module Reinforcement Package",blueprintSymbol:"ModuleReinforcement_HeavyDuty",grade:1,acquisition:"mercenary",mercCoinCost:450},{symbol:"Int_PowerDistributor_Size3_Class2",name:"Support Focused Power Distributor",blueprintSymbol:"PowerDistributorS3C2_SupportFocused",grade:1,acquisition:"mercenary",mercCoinCost:300},{symbol:"Int_PowerDistributor_Size3_Class5",name:"Support Focused Power Distributor",blueprintSymbol:"PowerDistributorS3C5_SupportFocused",grade:1,acquisition:"mercenary",mercCoinCost:350},{symbol:"Int_PowerDistributor_Size4_Class2",name:"Support Focused Power Distributor",blueprintSymbol:"PowerDistributorS4C2_SupportFocused",grade:1,acquisition:"mercenary",mercCoinCost:400},{symbol:"Int_PowerDistributor_Size4_Class5",name:"Support Focused Power Distributor",blueprintSymbol:"PowerDistributorS4C5_SupportFocused",grade:1,acquisition:"mercenary",mercCoinCost:450},{symbol:"Int_PowerDistributor_Size5_Class5",name:"Balanced Power Distributor",blueprintSymbol:"PowerDistributor_Balanced",grade:1,acquisition:"mercenary",mercCoinCost:500},{symbol:"Int_PowerDistributor_Size6_Class5",name:"Support Focused Power Distributor",blueprintSymbol:"PowerDistributorS6C5_SupportFocused",grade:1,acquisition:"mercenary",mercCoinCost:550},{symbol:"Hpt_Mining_AbrBlstr_Fixed_Small",name:"Abrasion Blaster",blueprintSymbol:"Weapon_LongRange",grade:5,acquisition:"communityGoal",modifiers:[{label:"DistributorDraw",method:"multiplicative",value:-.5},{label:"FalloffRange",method:"multiplicative",value:4},{label:"Integrity",method:"multiplicative",value:-.5},{label:"MaximumRange",method:"multiplicative",value:4},{label:"PowerDraw",method:"multiplicative",value:-.5},{label:"ThermalLoad",method:"multiplicative",value:-.5}]},{symbol:"Hpt_CausticMissile_Fixed_Medium",name:"Enzyme Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"communityGoal",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:.75},{label:"AmmoMaximum",method:"multiplicative",value:.25},{label:"Damage",method:"multiplicative",value:.5},{label:"Mass",method:"multiplicative",value:.6},{label:"PowerDraw",method:"multiplicative",value:.2}]},{symbol:"Hpt_Slugshot_Gimbal_Small",name:"Fragment Cannon",blueprintSymbol:"Weapon_DoubleShot",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_screening_shell",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1.6667},{label:"AmmoMaximum",method:"multiplicative",value:.67776},{label:"BurstInterval",method:"multiplicative",value:-.06},{label:"BurstSize",method:"overwrite",value:2},{label:"Mass",method:"multiplicative",value:.6},{label:"MaximumRange",method:"multiplicative",value:-.1},{label:"PowerDraw",method:"multiplicative",value:.2}]},{symbol:"Hpt_Slugshot_Gimbal_Large",name:"Fragment Cannon",blueprintSymbol:"Weapon_DoubleShot",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_screening_shell",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1.6667},{label:"AmmoMaximum",method:"multiplicative",value:.67776},{label:"BurstInterval",method:"multiplicative",value:-.06},{label:"BurstSize",method:"overwrite",value:2},{label:"Mass",method:"multiplicative",value:.6},{label:"MaximumRange",method:"multiplicative",value:-.1},{label:"PowerDraw",method:"multiplicative",value:.2}]},{symbol:"Hpt_Guardian_ShardCannon_Fixed_Medium",name:"Guardian Shard Cannon",blueprintSymbol:"Weapon_LongRange",grade:5,acquisition:"communityGoal",engineeringLocked:true,modifiers:[{label:"ArmourPenetration",method:"multiplicative",value:1.02},{label:"DistributorDraw",method:"multiplicative",value:5.05},{label:"Jitter",method:"additive",value:-3.5},{label:"Mass",method:"multiplicative",value:.5},{label:"MaximumRange",method:"multiplicative",value:4},{label:"PowerDraw",method:"multiplicative",value:1.3},{label:"ShotSpeed",method:"overwrite",value:1258.89},{label:"ThermalLoad",method:"multiplicative",value:15.5}]},{symbol:"Hpt_MultiCannon_Fixed_Medium",name:"Multi-Cannon",blueprintSymbol:"Weapon_RapidFire",grade:1,acquisition:"communityGoal",experimentalEffectSymbol:"special_phasing_sequence",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:3},{label:"AmmoMaximum",method:"overwrite",value:6400},{label:"BurstInterval",method:"overwrite",value:.1},{label:"FalloffRange",method:"multiplicative",value:-.1},{label:"Jitter",method:"additive",value:3},{label:"MaximumRange",method:"multiplicative",value:-.5},{label:"RoundsPerShot",method:"additive",value:2}]},{symbol:"Hpt_Railgun_Fixed_Medium",name:"Rail Gun",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_feedback_cascade_cooled",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"BurstInterval",method:"multiplicative",value:-.61145},{label:"FalloffRange",method:"multiplicative",value:5},{label:"Mass",method:"multiplicative",value:.9},{label:"MaximumRange",method:"multiplicative",value:1},{label:"PowerDraw",method:"multiplicative",value:.65},{label:"ReloadTime",method:"multiplicative",value:.25}]},{symbol:"Hpt_Railgun_Fixed_Medium_Burst",name:"Imperial Hammer Rail Gun",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_super_penetrator",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"BurstInterval",method:"multiplicative",value:-.2635},{label:"Damage",method:"multiplicative",value:-.2},{label:"Mass",method:"multiplicative",value:.7},{label:"PowerDraw",method:"multiplicative",value:.25}]},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Seeker Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:1,acquisition:"communityGoal",experimentalEffectSymbol:"special_drag_munitions",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:2},{label:"AmmoMaximum",method:"multiplicative",value:2},{label:"BurstInterval",method:"multiplicative",value:-.2},{label:"DistributorDraw",method:"overwrite",value:.34},{label:"Mass",method:"multiplicative",value:1.5},{label:"PowerDraw",method:"multiplicative",value:.25}]},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Seeker Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_fsd_interrupt",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"ArmourPenetration",method:"multiplicative",value:.4},{label:"BurstInterval",method:"multiplicative",value:-.1},{label:"Damage",method:"multiplicative",value:.35},{label:"Integrity",method:"multiplicative",value:1},{label:"Mass",method:"multiplicative",value:1.2},{label:"PowerDraw",method:"multiplicative",value:.3},{label:"ThermalLoad",method:"multiplicative",value:-.1}]},{symbol:"Hpt_BasicMissileRack_Fixed_Large",name:"Seeker Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_fsd_interrupt",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"ArmourPenetration",method:"multiplicative",value:.4},{label:"BurstInterval",method:"multiplicative",value:-.1},{label:"Damage",method:"multiplicative",value:.35},{label:"Integrity",method:"multiplicative",value:1},{label:"Mass",method:"multiplicative",value:1.2},{label:"PowerDraw",method:"multiplicative",value:.3},{label:"ThermalLoad",method:"multiplicative",value:-.1}]},{symbol:"Hpt_ElectronicCountermeasure_Tiny",name:"Electronic Countermeasure",blueprintSymbol:"Misc_LightWeight",grade:5,acquisition:"communityGoal",modifiers:[{label:"Integrity",method:"multiplicative",value:1},{label:"Mass",method:"multiplicative",value:-.85},{label:"PowerDraw",method:"multiplicative",value:1}]},{symbol:"Hpt_CrimeScanner_Size0_Class5",name:"Kill Warrant Scanner",blueprintSymbol:"Sensor_FastScan",grade:5,acquisition:"communityGoal",modifiers:[{label:"Integrity",method:"multiplicative",value:-.5},{label:"MaxAngle",method:"multiplicative",value:-.3},{label:"PowerDraw",method:"multiplicative",value:.5},{label:"ScannerRange",method:"multiplicative",value:.65},{label:"ScannerTimeToScan",method:"multiplicative",value:-.8}]},{symbol:"Hpt_CrimeScanner_Size0_Class3",name:"Kill Warrant Scanner",blueprintSymbol:"Sensor_FastScan",grade:5,acquisition:"communityGoal",modifiers:[{label:"Integrity",method:"multiplicative",value:-.5},{label:"MaxAngle",method:"multiplicative",value:-.3},{label:"PowerDraw",method:"multiplicative",value:.5},{label:"ScannerRange",method:"multiplicative",value:.65},{label:"ScannerTimeToScan",method:"multiplicative",value:-.8}]},{symbol:"Hpt_PlasmaPointDefence_Turret_Tiny",name:"Point Defence",blueprintSymbol:"Misc_LightWeight",grade:5,acquisition:"communityGoal",modifiers:[{label:"Integrity",method:"multiplicative",value:-.5},{label:"Mass",method:"multiplicative",value:-.85},{label:"MaximumRange",method:"multiplicative",value:1},{label:"ThermalLoad",method:"multiplicative",value:.05}]},{symbol:"Int_PowerDistributor_Size3_Class5",name:"Power Distributor",blueprintSymbol:"PowerDistributor_PrioritySystems",grade:5,acquisition:"communityGoal",modifiers:[{label:"EnginesCapacity",method:"multiplicative",value:.45},{label:"EnginesRecharge",method:"multiplicative",value:.4},{label:"SystemsCapacity",method:"multiplicative",value:.45},{label:"SystemsRecharge",method:"multiplicative",value:.4},{label:"WeaponsCapacity",method:"multiplicative",value:-.25},{label:"WeaponsRecharge",method:"multiplicative",value:-.2}]},{symbol:"Int_PowerDistributor_Size3_Class2",name:"Power Distributor",blueprintSymbol:"PowerDistributor_PrioritySystems",grade:5,acquisition:"communityGoal",modifiers:[{label:"EnginesCapacity",method:"multiplicative",value:.45},{label:"EnginesRecharge",method:"multiplicative",value:.4},{label:"SystemsCapacity",method:"multiplicative",value:.45},{label:"SystemsRecharge",method:"multiplicative",value:.4},{label:"WeaponsCapacity",method:"multiplicative",value:-.25},{label:"WeaponsRecharge",method:"multiplicative",value:-.2}]},{symbol:"Int_PowerDistributor_Size4_Class5",name:"Power Distributor",blueprintSymbol:"PowerDistributor_PrioritySystems",grade:5,acquisition:"communityGoal",modifiers:[{label:"EnginesCapacity",method:"multiplicative",value:.45},{label:"EnginesRecharge",method:"multiplicative",value:.4},{label:"SystemsCapacity",method:"multiplicative",value:.45},{label:"SystemsRecharge",method:"multiplicative",value:.4},{label:"WeaponsCapacity",method:"multiplicative",value:-.25},{label:"WeaponsRecharge",method:"multiplicative",value:-.2}]},{symbol:"Int_PowerDistributor_Size4_Class2",name:"Power Distributor",blueprintSymbol:"PowerDistributor_PrioritySystems",grade:5,acquisition:"communityGoal",modifiers:[{label:"EnginesCapacity",method:"multiplicative",value:.45},{label:"EnginesRecharge",method:"multiplicative",value:.4},{label:"SystemsCapacity",method:"multiplicative",value:.45},{label:"SystemsRecharge",method:"multiplicative",value:.4},{label:"WeaponsCapacity",method:"multiplicative",value:-.25},{label:"WeaponsRecharge",method:"multiplicative",value:-.2}]},{symbol:"Int_PowerDistributor_Size6_Class5",name:"Power Distributor",blueprintSymbol:"PowerDistributor_PrioritySystems",grade:5,acquisition:"communityGoal",modifiers:[{label:"EnginesCapacity",method:"multiplicative",value:.45},{label:"EnginesRecharge",method:"multiplicative",value:.4},{label:"SystemsCapacity",method:"multiplicative",value:.45},{label:"SystemsRecharge",method:"multiplicative",value:.4},{label:"WeaponsCapacity",method:"multiplicative",value:-.25},{label:"WeaponsRecharge",method:"multiplicative",value:-.2}]},{symbol:"Int_Powerplant_Size3_Class5",name:"Power Plant",blueprintSymbol:"PowerPlant_Armoured",grade:5,acquisition:"communityGoal",modifiers:[{label:"HeatEfficiency",method:"multiplicative",value:.13},{label:"Integrity",method:"multiplicative",value:.95},{label:"Mass",method:"multiplicative",value:.2},{label:"PowerCapacity",method:"multiplicative",value:.52}]},{symbol:"Int_Powerplant_Size3_Class5",name:"Power Plant",blueprintSymbol:"PowerPlant_Boosted",grade:5,acquisition:"communityGoal",modifiers:[{label:"HeatEfficiency",method:"multiplicative",value:.35},{label:"Integrity",method:"multiplicative",value:-.3},{label:"PowerCapacity",method:"multiplicative",value:.6}]},{symbol:"Int_Powerplant_Size4_Class5",name:"Power Plant",blueprintSymbol:"PowerPlant_Boosted",grade:5,acquisition:"communityGoal",modifiers:[{label:"HeatEfficiency",method:"multiplicative",value:.35},{label:"Integrity",method:"multiplicative",value:-.3},{label:"PowerCapacity",method:"multiplicative",value:.6}]},{symbol:"Int_Powerplant_Size5_Class5",name:"Power Plant",blueprintSymbol:"PowerPlant_Boosted",grade:5,acquisition:"communityGoal",modifiers:[{label:"HeatEfficiency",method:"multiplicative",value:.35},{label:"Integrity",method:"overwrite",value:74},{label:"PowerCapacity",method:"multiplicative",value:.6}]},{symbol:"Int_Hyperdrive_Size3_Class5",name:"Frame Shift Drive",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"communityGoal",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Size4_Class5",name:"Frame Shift Drive",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"communityGoal",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Size6_Class5",name:"Frame Shift Drive",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"communityGoal",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_CargoRack_Size5_Class1",name:"Cargo Rack",blueprintSymbol:"CargoRack_IncreasedCapacity",grade:5,acquisition:"communityGoal",modifiers:[{label:"CargoCapacity",method:"multiplicative",value:.34375}]},{symbol:"Int_CargoRack_Size6_Class1",name:"Cargo Rack",blueprintSymbol:"CargoRack_IncreasedCapacity",grade:5,acquisition:"communityGoal",modifiers:[{label:"CargoCapacity",method:"multiplicative",value:.34375}]},{symbol:"Int_ShieldGenerator_Size3_Class5",name:"Shield Generator",blueprintSymbol:"ShieldGenerator_Kinetic",grade:5,acquisition:"communityGoal",modifiers:[{label:"Integrity",method:"multiplicative",value:.2},{label:"KineticResistance",method:"additive",value:.18},{label:"PowerDraw",method:"multiplicative",value:.4},{label:"ThermicResistance",method:"additive",value:.42}]},{symbol:"Hpt_ATDumbfireMissile_Fixed_Medium",name:"AX Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"BurstInterval",method:"multiplicative",value:-.3},{label:"Damage",method:"multiplicative",value:-.03},{label:"DistributorDraw",method:"multiplicative",value:-.2},{label:"Jitter",method:"additive",value:.5},{label:"Mass",method:"multiplicative",value:.7},{label:"PowerDraw",method:"multiplicative",value:.2},{label:"ReloadTime",method:"multiplicative",value:-.45}]},{symbol:"Hpt_ATDumbfireMissile_Fixed_Large",name:"AX Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"BurstInterval",method:"multiplicative",value:-.3},{label:"Damage",method:"multiplicative",value:-.03},{label:"DistributorDraw",method:"multiplicative",value:-.2},{label:"Jitter",method:"additive",value:.5},{label:"Mass",method:"multiplicative",value:.7},{label:"PowerDraw",method:"multiplicative",value:.2},{label:"ReloadTime",method:"multiplicative",value:-.45}]},{symbol:"Hpt_ATMultiCannon_Gimbal_Medium",name:"Enhanced AX Multi-Cannon",blueprintSymbol:"Weapon_Overcharged",grade:5,acquisition:"techBroker",experimentalEffectSymbol:"special_auto_loader",engineeringLocked:true,modifiers:[{label:"Damage",method:"multiplicative",value:.1},{label:"PowerDraw",method:"multiplicative",value:.75},{label:"ThermalLoad",method:"multiplicative",value:3}]},{symbol:"Hpt_ATMultiCannon_Gimbal_Large",name:"Enhanced AX Multi-Cannon",blueprintSymbol:"Weapon_Overcharged",grade:5,acquisition:"techBroker",experimentalEffectSymbol:"special_auto_loader",engineeringLocked:true,modifiers:[{label:"Damage",method:"multiplicative",value:.1},{label:"PowerDraw",method:"multiplicative",value:.75},{label:"ThermalLoad",method:"multiplicative",value:3}]},{symbol:"Hpt_Guardian_GaussCannon_Fixed_Small",name:"Guardian Gauss Cannon",blueprintSymbol:"Weapon_RapidFire",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:3},{label:"AmmoMaximum",method:"multiplicative",value:4},{label:"BurstInterval",method:"multiplicative",value:-.38237},{label:"BurstRateOfFire",method:"overwrite",value:10},{label:"BurstSize",method:"overwrite",value:4},{label:"Damage",method:"multiplicative",value:-.75214},{label:"DistributorDraw",method:"multiplicative",value:-.75},{label:"FalloffRange",method:"multiplicative",value:-.2},{label:"ThermalLoad",method:"multiplicative",value:-.75}]},{symbol:"Hpt_Guardian_GaussCannon_Fixed_Medium",name:"Guardian Gauss Cannon",blueprintSymbol:"Weapon_RapidFire",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:3},{label:"AmmoMaximum",method:"multiplicative",value:4},{label:"BurstInterval",method:"multiplicative",value:-.38237},{label:"BurstRateOfFire",method:"overwrite",value:10},{label:"BurstSize",method:"overwrite",value:4},{label:"Damage",method:"multiplicative",value:-.75214},{label:"DistributorDraw",method:"multiplicative",value:-.75},{label:"FalloffRange",method:"multiplicative",value:-.2},{label:"ThermalLoad",method:"multiplicative",value:-.75}]},{symbol:"Hpt_Guardian_PlasmaLauncher_Fixed_Small",name:"Guardian Plasma Charger",blueprintSymbol:"Weapon_Overcharged",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"overwrite",value:20},{label:"ArmourPenetration",method:"multiplicative",value:.375},{label:"Damage",method:"multiplicative",value:.66},{label:"PowerDraw",method:"multiplicative",value:.3239},{label:"ShotSpeed",method:"multiplicative",value:4},{label:"ThermalLoad",method:"multiplicative",value:.5}]},{symbol:"Hpt_Guardian_PlasmaLauncher_Fixed_Medium",name:"Guardian Plasma Charger",blueprintSymbol:"Weapon_Overcharged",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"overwrite",value:20},{label:"ArmourPenetration",method:"multiplicative",value:.375},{label:"Damage",method:"multiplicative",value:.66},{label:"PowerDraw",method:"multiplicative",value:.3239},{label:"ShotSpeed",method:"multiplicative",value:4},{label:"ThermalLoad",method:"multiplicative",value:.5}]},{symbol:"Hpt_Guardian_ShardCannon_Fixed_Small",name:"Guardian Shard Cannon",blueprintSymbol:"Weapon_LongRange",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"ArmourPenetration",method:"multiplicative",value:1.02},{label:"DistributorDraw",method:"multiplicative",value:4.2769},{label:"FalloffRange",method:"overwrite",value:1500},{label:"Jitter",method:"additive",value:-3.5},{label:"Mass",method:"multiplicative",value:.5},{label:"MaximumRange",method:"overwrite",value:3e3},{label:"PowerDraw",method:"multiplicative",value:1.3},{label:"ShotSpeed",method:"overwrite",value:3568.6},{label:"ThermalLoad",method:"multiplicative",value:15.5}]},{symbol:"Hpt_Guardian_ShardCannon_Fixed_Medium",name:"Guardian Shard Cannon",blueprintSymbol:"Weapon_LongRange",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"ArmourPenetration",method:"multiplicative",value:1.02},{label:"DistributorDraw",method:"overwrite",value:3.43},{label:"FalloffRange",method:"overwrite",value:1500},{label:"Jitter",method:"additive",value:-3.5},{label:"Mass",method:"multiplicative",value:.5},{label:"MaximumRange",method:"overwrite",value:3e3},{label:"PowerDraw",method:"multiplicative",value:1.3},{label:"ShotSpeed",method:"overwrite",value:6299.209},{label:"ThermalLoad",method:"multiplicative",value:15.5}]},{symbol:"Hpt_MiningLaser_Fixed_Small",name:"Mining Laser",blueprintSymbol:"Weapon_LongRange",grade:5,acquisition:"techBroker",experimentalEffectSymbol:"special_incendiary_rounds",modifiers:[{label:"Damage",method:"multiplicative",value:-.05},{label:"DistributorDraw",method:"multiplicative",value:-.5},{label:"FalloffRange",method:"multiplicative",value:7.3333},{label:"Integrity",method:"multiplicative",value:-.5},{label:"MaximumRange",method:"multiplicative",value:4},{label:"PowerDraw",method:"multiplicative",value:-.5},{label:"ThermalLoad",method:"multiplicative",value:-.83}]},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Seeker Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"techBroker",experimentalEffectSymbol:"special_thermal_cascade",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"BurstInterval",method:"multiplicative",value:-.1},{label:"DistributorDraw",method:"multiplicative",value:-.4},{label:"Integrity",method:"multiplicative",value:-.6},{label:"Mass",method:"multiplicative",value:-.9},{label:"PowerDraw",method:"multiplicative",value:-.2}]},{symbol:"Hpt_HeatSinkLauncher_Turret_Tiny",name:"Heat Sink Launcher",blueprintSymbol:"Misc_HeatSinkCapacity",grade:1,acquisition:"techBroker",modifiers:[{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"ReloadTime",method:"multiplicative",value:.75}]},{symbol:"Int_Hyperdrive_Size5_Class5",name:"Frame Shift Drive",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size2_Class5",name:"Frame Shift Drive (SCO)",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size3_Class5",name:"Frame Shift Drive (SCO)",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size4_Class5",name:"Frame Shift Drive (SCO)",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size5_Class5",name:"Frame Shift Drive (SCO)",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size6_Class5",name:"Frame Shift Drive (SCO)",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size7_Class5",name:"Frame Shift Drive (SCO)",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_DetailedSurfaceScanner_Tiny",name:"Detailed Surface Scanner",blueprintSymbol:"Sensor_Expanded",grade:5,acquisition:"techBroker",modifiers:[{label:"DSS_PatchRadius",method:"multiplicative",value:1}]},{symbol:"Hpt_FlakMortar_Turret_Medium",name:"Festive Green Remote Release Flak Launcher",blueprintSymbol:"Decorative_Green",grade:5,acquisition:"eventReward",modifiers:[{label:"Damage",method:"multiplicative",value:-.99}]},{symbol:"Hpt_FlakMortar_Turret_Medium",name:"Festive Red Remote Release Flak Launcher",blueprintSymbol:"Decorative_Red",grade:5,acquisition:"eventReward",modifiers:[{label:"Damage",method:"multiplicative",value:-.99}]},{symbol:"Hpt_FlakMortar_Turret_Medium",name:"Festive Yellow Remote Release Flak Launcher",blueprintSymbol:"Decorative_Yellow",grade:5,acquisition:"eventReward",modifiers:[{label:"Damage",method:"multiplicative",value:-.99}]}];var PRE_ENGINEERED_MODULES=deepFreeze(pre_engineered_default);function getPreEngineeredVariants(symbol){return filterByKey(PRE_ENGINEERED_MODULES,"symbol",symbol,"getPreEngineeredVariants: symbol")}function isPreEngineered(symbol){requireStringIfPresent(symbol,"isPreEngineered: symbol");return getPreEngineeredVariants(symbol).length>0}export{PRE_ENGINEERED_MODULES,getPreEngineeredVariants,isPreEngineered};//# sourceMappingURL=chunk-KPJ77VPS.js.map
1
+ import{filterByKey}from"./chunk-BKWLI44T.js";import{requireStringIfPresent}from"./chunk-PKWVG2JY.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var pre_engineered_default=[{symbol:"Hpt_Mining_AbrBlstr_Fixed_Small",name:"Far-Reaching Abrasion Blaster",blueprintSymbol:"AbrasionBlaster_FarReaching",grade:1,acquisition:"mercenary",mercCoinCost:400},{symbol:"Hpt_CausticMissile_Fixed_Medium",name:"High-Yield Enzyme Missile Rack",blueprintSymbol:"EnzymeMissileRack_HighYield",grade:1,acquisition:"mercenary",mercCoinCost:850},{symbol:"Hpt_Slugshot_Gimbal_Small",name:"Double Screaming Fragment Cannon",blueprintSymbol:"FragmentCannonSmall_DoubleScreaming",grade:1,acquisition:"mercenary",experimentalEffectSymbol:"special_screening_shell",mercCoinCost:800},{symbol:"Hpt_Slugshot_Gimbal_Large",name:"Double Screaming Fragment Cannon",blueprintSymbol:"FragmentCannonLarge_DoubleScreaming",grade:1,acquisition:"mercenary",experimentalEffectSymbol:"special_screening_shell",mercCoinCost:950},{symbol:"Hpt_MiningLaser_Fixed_Small",name:"Long Range Mining Laser",blueprintSymbol:"MiningLaser_LongRange",grade:1,acquisition:"mercenary",experimentalEffectSymbol:"special_incendiary_rounds",mercCoinCost:450},{symbol:"Hpt_MultiCannon_Fixed_Medium",name:"Rapid Phase Multi-Cannon",blueprintSymbol:"MultiCannon_Rapid",grade:1,acquisition:"mercenary",experimentalEffectSymbol:"special_phasing_sequence",mercCoinCost:850},{symbol:"Hpt_Railgun_Fixed_Medium",name:"Enduring Feedback Rail Gun",blueprintSymbol:"RailGun_LongShot",grade:1,acquisition:"mercenary",experimentalEffectSymbol:"special_feedback_cascade_cooled",mercCoinCost:950},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Drag Seeker Missile Rack",blueprintSymbol:"SeekerMissileRack_Drag",grade:1,acquisition:"mercenary",experimentalEffectSymbol:"special_drag_munitions",mercCoinCost:800},{symbol:"Hpt_BasicMissileRack_Fixed_Large",name:"Drag Seeker Missile Rack",blueprintSymbol:"SeekerMissileRack_Drag",grade:1,acquisition:"mercenary",experimentalEffectSymbol:"special_drag_munitions",mercCoinCost:900},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Lightweight Thermal Seeker Missile Rack",blueprintSymbol:"SeekerMissileRack_LightWeightThermal",grade:1,acquisition:"mercenary",experimentalEffectSymbol:"special_thermal_cascade",mercCoinCost:800},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Lockdown Seeker Missile Rack",blueprintSymbol:"SeekerMissileRackMedium_Lockdown",grade:1,acquisition:"mercenary",experimentalEffectSymbol:"special_fsd_interrupt",mercCoinCost:800},{symbol:"Hpt_BasicMissileRack_Fixed_Large",name:"Lockdown Seeker Missile Rack",blueprintSymbol:"SeekerMissileRackLarge_Lockdown",grade:1,acquisition:"mercenary",experimentalEffectSymbol:"special_fsd_interrupt",mercCoinCost:900},{symbol:"Int_CargoRack_Size5_Class1",name:"Extended Cargo Rack",blueprintSymbol:"CargoRackS5C1_Extended",grade:1,acquisition:"mercenary",mercCoinCost:550},{symbol:"Int_CargoRack_Size6_Class1",name:"Extended Cargo Rack",blueprintSymbol:"CargoRackS6C1_Extended",grade:1,acquisition:"mercenary",mercCoinCost:550},{symbol:"Int_DetailedSurfaceScanner_Tiny",name:"Long Range Detailed Surface Scanner",blueprintSymbol:"DetailedSurfaceScanner_LongRange",grade:1,acquisition:"mercenary",mercCoinCost:350},{symbol:"Int_ModuleReinforcement_Size5_Class2",name:"Heavy Duty Module Reinforcement Package",blueprintSymbol:"ModuleReinforcement_HeavyDuty",grade:1,acquisition:"mercenary",mercCoinCost:450},{symbol:"Int_PowerDistributor_Size3_Class2",name:"Support Focused Power Distributor",blueprintSymbol:"PowerDistributorS3C2_SupportFocused",grade:1,acquisition:"mercenary",mercCoinCost:300},{symbol:"Int_PowerDistributor_Size3_Class5",name:"Support Focused Power Distributor",blueprintSymbol:"PowerDistributorS3C5_SupportFocused",grade:1,acquisition:"mercenary",mercCoinCost:350},{symbol:"Int_PowerDistributor_Size4_Class2",name:"Support Focused Power Distributor",blueprintSymbol:"PowerDistributorS4C2_SupportFocused",grade:1,acquisition:"mercenary",mercCoinCost:400},{symbol:"Int_PowerDistributor_Size4_Class5",name:"Support Focused Power Distributor",blueprintSymbol:"PowerDistributorS4C5_SupportFocused",grade:1,acquisition:"mercenary",mercCoinCost:450},{symbol:"Int_PowerDistributor_Size5_Class5",name:"Balanced Power Distributor",blueprintSymbol:"PowerDistributor_Balanced",grade:1,acquisition:"mercenary",mercCoinCost:500},{symbol:"Int_PowerDistributor_Size6_Class5",name:"Support Focused Power Distributor",blueprintSymbol:"PowerDistributorS6C5_SupportFocused",grade:1,acquisition:"mercenary",mercCoinCost:550},{symbol:"Hpt_Mining_AbrBlstr_Fixed_Small",name:"Abrasion Blaster",blueprintSymbol:"Weapon_LongRange",grade:5,acquisition:"communityGoal",modifiers:[{label:"DistributorDraw",method:"multiplicative",value:-.5},{label:"FalloffRange",method:"multiplicative",value:4},{label:"Integrity",method:"multiplicative",value:-.5},{label:"MaximumRange",method:"multiplicative",value:4},{label:"PowerDraw",method:"multiplicative",value:-.5},{label:"ThermalLoad",method:"multiplicative",value:-.5}]},{symbol:"Hpt_CausticMissile_Fixed_Medium",name:"Enzyme Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"communityGoal",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:.75},{label:"AmmoMaximum",method:"multiplicative",value:.25},{label:"Damage",method:"multiplicative",value:.5},{label:"Mass",method:"multiplicative",value:.6},{label:"PowerDraw",method:"multiplicative",value:.2}]},{symbol:"Hpt_Slugshot_Gimbal_Small",name:"Fragment Cannon",blueprintSymbol:"Weapon_DoubleShot",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_screening_shell",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1.6667},{label:"AmmoMaximum",method:"multiplicative",value:.67776},{label:"BurstInterval",method:"multiplicative",value:-.06},{label:"BurstSize",method:"overwrite",value:2},{label:"Mass",method:"multiplicative",value:.6},{label:"MaximumRange",method:"multiplicative",value:-.1},{label:"PowerDraw",method:"multiplicative",value:.2}]},{symbol:"Hpt_Slugshot_Gimbal_Large",name:"Fragment Cannon",blueprintSymbol:"Weapon_DoubleShot",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_screening_shell",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1.6667},{label:"AmmoMaximum",method:"multiplicative",value:.67776},{label:"BurstInterval",method:"multiplicative",value:-.06},{label:"BurstSize",method:"overwrite",value:2},{label:"Mass",method:"multiplicative",value:.6},{label:"MaximumRange",method:"multiplicative",value:-.1},{label:"PowerDraw",method:"multiplicative",value:.2}]},{symbol:"Hpt_Guardian_ShardCannon_Fixed_Medium",name:"Guardian Shard Cannon",blueprintSymbol:"Weapon_LongRange",grade:5,acquisition:"communityGoal",engineeringLocked:true,modifiers:[{label:"ArmourPenetration",method:"multiplicative",value:1.02},{label:"DistributorDraw",method:"multiplicative",value:5.05},{label:"Jitter",method:"additive",value:-3.5},{label:"Mass",method:"multiplicative",value:.5},{label:"MaximumRange",method:"multiplicative",value:4},{label:"PowerDraw",method:"multiplicative",value:1.3},{label:"ShotSpeed",method:"overwrite",value:1258.89},{label:"ThermalLoad",method:"multiplicative",value:15.5}]},{symbol:"Hpt_MultiCannon_Fixed_Medium",name:"Multi-Cannon",blueprintSymbol:"Weapon_RapidFire",grade:1,acquisition:"communityGoal",experimentalEffectSymbol:"special_phasing_sequence",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:3},{label:"AmmoMaximum",method:"overwrite",value:6400},{label:"BurstInterval",method:"overwrite",value:.1},{label:"FalloffRange",method:"multiplicative",value:-.1},{label:"Jitter",method:"additive",value:3},{label:"MaximumRange",method:"multiplicative",value:-.5},{label:"RoundsPerShot",method:"additive",value:2}]},{symbol:"Hpt_Railgun_Fixed_Medium",name:"Rail Gun",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_feedback_cascade_cooled",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"BurstInterval",method:"multiplicative",value:-.61145},{label:"FalloffRange",method:"multiplicative",value:5},{label:"Mass",method:"multiplicative",value:.9},{label:"MaximumRange",method:"multiplicative",value:1},{label:"PowerDraw",method:"multiplicative",value:.65},{label:"ReloadTime",method:"multiplicative",value:.25}]},{symbol:"Hpt_Railgun_Fixed_Medium_Burst",name:"Imperial Hammer Rail Gun",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_super_penetrator",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"BurstInterval",method:"multiplicative",value:-.2635},{label:"Damage",method:"multiplicative",value:-.2},{label:"Mass",method:"multiplicative",value:.7},{label:"PowerDraw",method:"multiplicative",value:.25}]},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Seeker Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:1,acquisition:"communityGoal",experimentalEffectSymbol:"special_drag_munitions",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:2},{label:"AmmoMaximum",method:"multiplicative",value:2},{label:"BurstInterval",method:"multiplicative",value:-.2},{label:"DistributorDraw",method:"overwrite",value:.34},{label:"Mass",method:"multiplicative",value:1.5},{label:"PowerDraw",method:"multiplicative",value:.25}]},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Seeker Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_fsd_interrupt",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"ArmourPenetration",method:"multiplicative",value:.4},{label:"BurstInterval",method:"multiplicative",value:-.1},{label:"Damage",method:"multiplicative",value:.35},{label:"Integrity",method:"multiplicative",value:1},{label:"Mass",method:"multiplicative",value:1.2},{label:"PowerDraw",method:"multiplicative",value:.3},{label:"ThermalLoad",method:"multiplicative",value:-.1}]},{symbol:"Hpt_BasicMissileRack_Fixed_Large",name:"Seeker Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_fsd_interrupt",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"ArmourPenetration",method:"multiplicative",value:.4},{label:"BurstInterval",method:"multiplicative",value:-.1},{label:"Damage",method:"multiplicative",value:.35},{label:"Integrity",method:"multiplicative",value:1},{label:"Mass",method:"multiplicative",value:1.2},{label:"PowerDraw",method:"multiplicative",value:.3},{label:"ThermalLoad",method:"multiplicative",value:-.1}]},{symbol:"Hpt_ElectronicCountermeasure_Tiny",name:"Electronic Countermeasure",blueprintSymbol:"Misc_LightWeight",grade:5,acquisition:"communityGoal",modifiers:[{label:"Integrity",method:"multiplicative",value:1},{label:"Mass",method:"multiplicative",value:-.85},{label:"PowerDraw",method:"multiplicative",value:1}]},{symbol:"Hpt_CrimeScanner_Size0_Class5",name:"Kill Warrant Scanner",blueprintSymbol:"Sensor_FastScan",grade:5,acquisition:"communityGoal",modifiers:[{label:"Integrity",method:"multiplicative",value:-.5},{label:"MaxAngle",method:"multiplicative",value:-.3},{label:"PowerDraw",method:"multiplicative",value:.5},{label:"ScannerRange",method:"multiplicative",value:.65},{label:"ScannerTimeToScan",method:"multiplicative",value:-.8}]},{symbol:"Hpt_CrimeScanner_Size0_Class3",name:"Kill Warrant Scanner",blueprintSymbol:"Sensor_FastScan",grade:5,acquisition:"communityGoal",modifiers:[{label:"Integrity",method:"multiplicative",value:-.5},{label:"MaxAngle",method:"multiplicative",value:-.3},{label:"PowerDraw",method:"multiplicative",value:.5},{label:"ScannerRange",method:"multiplicative",value:.65},{label:"ScannerTimeToScan",method:"multiplicative",value:-.8}]},{symbol:"Hpt_PlasmaPointDefence_Turret_Tiny",name:"Point Defence",blueprintSymbol:"Misc_LightWeight",grade:5,acquisition:"communityGoal",modifiers:[{label:"Integrity",method:"multiplicative",value:-.5},{label:"Mass",method:"multiplicative",value:-.85},{label:"MaximumRange",method:"multiplicative",value:1},{label:"ThermalLoad",method:"multiplicative",value:.05}]},{symbol:"Int_PowerDistributor_Size3_Class5",name:"Power Distributor",blueprintSymbol:"PowerDistributor_PrioritySystems",grade:5,acquisition:"communityGoal",modifiers:[{label:"EnginesCapacity",method:"multiplicative",value:.45},{label:"EnginesRecharge",method:"multiplicative",value:.4},{label:"SystemsCapacity",method:"multiplicative",value:.45},{label:"SystemsRecharge",method:"multiplicative",value:.4},{label:"WeaponsCapacity",method:"multiplicative",value:-.25},{label:"WeaponsRecharge",method:"multiplicative",value:-.2}]},{symbol:"Int_PowerDistributor_Size3_Class2",name:"Power Distributor",blueprintSymbol:"PowerDistributor_PrioritySystems",grade:5,acquisition:"communityGoal",modifiers:[{label:"EnginesCapacity",method:"multiplicative",value:.45},{label:"EnginesRecharge",method:"multiplicative",value:.4},{label:"SystemsCapacity",method:"multiplicative",value:.45},{label:"SystemsRecharge",method:"multiplicative",value:.4},{label:"WeaponsCapacity",method:"multiplicative",value:-.25},{label:"WeaponsRecharge",method:"multiplicative",value:-.2}]},{symbol:"Int_PowerDistributor_Size4_Class5",name:"Power Distributor",blueprintSymbol:"PowerDistributor_PrioritySystems",grade:5,acquisition:"communityGoal",modifiers:[{label:"EnginesCapacity",method:"multiplicative",value:.45},{label:"EnginesRecharge",method:"multiplicative",value:.4},{label:"SystemsCapacity",method:"multiplicative",value:.45},{label:"SystemsRecharge",method:"multiplicative",value:.4},{label:"WeaponsCapacity",method:"multiplicative",value:-.25},{label:"WeaponsRecharge",method:"multiplicative",value:-.2}]},{symbol:"Int_PowerDistributor_Size4_Class2",name:"Power Distributor",blueprintSymbol:"PowerDistributor_PrioritySystems",grade:5,acquisition:"communityGoal",modifiers:[{label:"EnginesCapacity",method:"multiplicative",value:.45},{label:"EnginesRecharge",method:"multiplicative",value:.4},{label:"SystemsCapacity",method:"multiplicative",value:.45},{label:"SystemsRecharge",method:"multiplicative",value:.4},{label:"WeaponsCapacity",method:"multiplicative",value:-.25},{label:"WeaponsRecharge",method:"multiplicative",value:-.2}]},{symbol:"Int_PowerDistributor_Size6_Class5",name:"Power Distributor",blueprintSymbol:"PowerDistributor_PrioritySystems",grade:5,acquisition:"communityGoal",modifiers:[{label:"EnginesCapacity",method:"multiplicative",value:.45},{label:"EnginesRecharge",method:"multiplicative",value:.4},{label:"SystemsCapacity",method:"multiplicative",value:.45},{label:"SystemsRecharge",method:"multiplicative",value:.4},{label:"WeaponsCapacity",method:"multiplicative",value:-.25},{label:"WeaponsRecharge",method:"multiplicative",value:-.2}]},{symbol:"Int_Powerplant_Size3_Class5",name:"Power Plant",blueprintSymbol:"PowerPlant_Armoured",grade:5,acquisition:"communityGoal",modifiers:[{label:"HeatEfficiency",method:"multiplicative",value:.13},{label:"Integrity",method:"multiplicative",value:.95},{label:"Mass",method:"multiplicative",value:.2},{label:"PowerCapacity",method:"multiplicative",value:.52}]},{symbol:"Int_Powerplant_Size3_Class5",name:"Power Plant",blueprintSymbol:"PowerPlant_Boosted",grade:5,acquisition:"communityGoal",modifiers:[{label:"HeatEfficiency",method:"multiplicative",value:.35},{label:"Integrity",method:"multiplicative",value:-.3},{label:"PowerCapacity",method:"multiplicative",value:.6}]},{symbol:"Int_Powerplant_Size4_Class5",name:"Power Plant",blueprintSymbol:"PowerPlant_Boosted",grade:5,acquisition:"communityGoal",modifiers:[{label:"HeatEfficiency",method:"multiplicative",value:.35},{label:"Integrity",method:"multiplicative",value:-.3},{label:"PowerCapacity",method:"multiplicative",value:.6}]},{symbol:"Int_Powerplant_Size5_Class5",name:"Power Plant",blueprintSymbol:"PowerPlant_Boosted",grade:5,acquisition:"communityGoal",modifiers:[{label:"HeatEfficiency",method:"multiplicative",value:.35},{label:"Integrity",method:"overwrite",value:74},{label:"PowerCapacity",method:"multiplicative",value:.6}]},{symbol:"Int_Hyperdrive_Size3_Class5",name:"Frame Shift Drive",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"communityGoal",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Size4_Class5",name:"Frame Shift Drive",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"communityGoal",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Size6_Class5",name:"Frame Shift Drive",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"communityGoal",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_CargoRack_Size5_Class1",name:"Cargo Rack",blueprintSymbol:"CargoRack_IncreasedCapacity",grade:5,acquisition:"communityGoal",modifiers:[{label:"CargoCapacity",method:"multiplicative",value:.34375}]},{symbol:"Int_CargoRack_Size6_Class1",name:"Cargo Rack",blueprintSymbol:"CargoRack_IncreasedCapacity",grade:5,acquisition:"communityGoal",modifiers:[{label:"CargoCapacity",method:"multiplicative",value:.34375}]},{symbol:"Int_ShieldGenerator_Size3_Class5",name:"Shield Generator",blueprintSymbol:"ShieldGenerator_Kinetic",grade:5,acquisition:"communityGoal",modifiers:[{label:"Integrity",method:"multiplicative",value:.2},{label:"KineticResistance",method:"additive",value:.18},{label:"PowerDraw",method:"multiplicative",value:.4},{label:"ThermicResistance",method:"additive",value:.42}]},{symbol:"Hpt_ATDumbfireMissile_Fixed_Medium",name:"Sirius AX Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"BurstInterval",method:"multiplicative",value:-.3},{label:"Damage",method:"multiplicative",value:-.03},{label:"DistributorDraw",method:"multiplicative",value:-.2},{label:"Jitter",method:"additive",value:.5},{label:"Mass",method:"multiplicative",value:.7},{label:"PowerDraw",method:"multiplicative",value:.2},{label:"ReloadTime",method:"multiplicative",value:-.45}]},{symbol:"Hpt_ATDumbfireMissile_Fixed_Large",name:"Sirius AX Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"BurstInterval",method:"multiplicative",value:-.3},{label:"Damage",method:"multiplicative",value:-.03},{label:"DistributorDraw",method:"multiplicative",value:-.2},{label:"Jitter",method:"additive",value:.5},{label:"Mass",method:"multiplicative",value:.7},{label:"PowerDraw",method:"multiplicative",value:.2},{label:"ReloadTime",method:"multiplicative",value:-.45}]},{symbol:"Hpt_ATMultiCannon_Gimbal_Medium",name:"Azimuth Enhanced AX Multi-Cannon",blueprintSymbol:"Weapon_Overcharged",grade:5,acquisition:"techBroker",experimentalEffectSymbol:"special_auto_loader",engineeringLocked:true,modifiers:[{label:"Damage",method:"multiplicative",value:.1},{label:"PowerDraw",method:"multiplicative",value:.75},{label:"ThermalLoad",method:"multiplicative",value:3}]},{symbol:"Hpt_ATMultiCannon_Gimbal_Large",name:"Azimuth Enhanced AX Multi-Cannon",blueprintSymbol:"Weapon_Overcharged",grade:5,acquisition:"techBroker",experimentalEffectSymbol:"special_auto_loader",engineeringLocked:true,modifiers:[{label:"Damage",method:"multiplicative",value:.1},{label:"PowerDraw",method:"multiplicative",value:.75},{label:"ThermalLoad",method:"multiplicative",value:3}]},{symbol:"Hpt_Guardian_GaussCannon_Fixed_Small",name:"Modified Guardian Gauss Cannon",blueprintSymbol:"Weapon_RapidFire",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:3},{label:"AmmoMaximum",method:"multiplicative",value:4},{label:"BurstInterval",method:"multiplicative",value:-.38237},{label:"BurstRateOfFire",method:"overwrite",value:10},{label:"BurstSize",method:"overwrite",value:4},{label:"Damage",method:"multiplicative",value:-.75214},{label:"DistributorDraw",method:"multiplicative",value:-.75},{label:"FalloffRange",method:"multiplicative",value:-.2},{label:"ThermalLoad",method:"multiplicative",value:-.75}]},{symbol:"Hpt_Guardian_GaussCannon_Fixed_Medium",name:"Modified Guardian Gauss Cannon",blueprintSymbol:"Weapon_RapidFire",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:3},{label:"AmmoMaximum",method:"multiplicative",value:4},{label:"BurstInterval",method:"multiplicative",value:-.38237},{label:"BurstRateOfFire",method:"overwrite",value:10},{label:"BurstSize",method:"overwrite",value:4},{label:"Damage",method:"multiplicative",value:-.75214},{label:"DistributorDraw",method:"multiplicative",value:-.75},{label:"FalloffRange",method:"multiplicative",value:-.2},{label:"ThermalLoad",method:"multiplicative",value:-.75}]},{symbol:"Hpt_Guardian_PlasmaLauncher_Fixed_Small",name:"Modified Guardian Plasma Charger",blueprintSymbol:"Weapon_Overcharged",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"overwrite",value:20},{label:"ArmourPenetration",method:"multiplicative",value:.375},{label:"Damage",method:"multiplicative",value:.66},{label:"PowerDraw",method:"multiplicative",value:.3239},{label:"ShotSpeed",method:"multiplicative",value:4},{label:"ThermalLoad",method:"multiplicative",value:.5}]},{symbol:"Hpt_Guardian_PlasmaLauncher_Fixed_Medium",name:"Modified Guardian Plasma Charger",blueprintSymbol:"Weapon_Overcharged",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"overwrite",value:20},{label:"ArmourPenetration",method:"multiplicative",value:.375},{label:"Damage",method:"multiplicative",value:.66},{label:"PowerDraw",method:"multiplicative",value:.3239},{label:"ShotSpeed",method:"multiplicative",value:4},{label:"ThermalLoad",method:"multiplicative",value:.5}]},{symbol:"Hpt_Guardian_ShardCannon_Fixed_Small",name:"Modified Guardian Shard Cannon",blueprintSymbol:"Weapon_LongRange",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"ArmourPenetration",method:"multiplicative",value:1.02},{label:"DistributorDraw",method:"multiplicative",value:4.2769},{label:"FalloffRange",method:"overwrite",value:1500},{label:"Jitter",method:"additive",value:-3.5},{label:"Mass",method:"multiplicative",value:.5},{label:"MaximumRange",method:"overwrite",value:3e3},{label:"PowerDraw",method:"multiplicative",value:1.3},{label:"ShotSpeed",method:"overwrite",value:3568.6},{label:"ThermalLoad",method:"multiplicative",value:15.5}]},{symbol:"Hpt_Guardian_ShardCannon_Fixed_Medium",name:"Modified Guardian Shard Cannon",blueprintSymbol:"Weapon_LongRange",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"ArmourPenetration",method:"multiplicative",value:1.02},{label:"DistributorDraw",method:"overwrite",value:3.43},{label:"FalloffRange",method:"overwrite",value:1500},{label:"Jitter",method:"additive",value:-3.5},{label:"Mass",method:"multiplicative",value:.5},{label:"MaximumRange",method:"overwrite",value:3e3},{label:"PowerDraw",method:"multiplicative",value:1.3},{label:"ShotSpeed",method:"overwrite",value:6299.209},{label:"ThermalLoad",method:"multiplicative",value:15.5}]},{symbol:"Hpt_MiningLaser_Fixed_Small",name:"Mining Laser",blueprintSymbol:"Weapon_LongRange",grade:5,acquisition:"techBroker",experimentalEffectSymbol:"special_incendiary_rounds",modifiers:[{label:"Damage",method:"multiplicative",value:-.05},{label:"DistributorDraw",method:"multiplicative",value:-.5},{label:"FalloffRange",method:"multiplicative",value:7.3333},{label:"Integrity",method:"multiplicative",value:-.5},{label:"MaximumRange",method:"multiplicative",value:4},{label:"PowerDraw",method:"multiplicative",value:-.5},{label:"ThermalLoad",method:"multiplicative",value:-.83}]},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Seeker Missile Rack V1",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"techBroker",experimentalEffectSymbol:"special_thermal_cascade",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"BurstInterval",method:"multiplicative",value:-.1},{label:"DistributorDraw",method:"multiplicative",value:-.4},{label:"Integrity",method:"multiplicative",value:-.6},{label:"Mass",method:"multiplicative",value:-.9},{label:"PowerDraw",method:"multiplicative",value:-.2}]},{symbol:"Hpt_HeatSinkLauncher_Turret_Tiny",name:"Sirius Heat Sink Launcher",blueprintSymbol:"Misc_HeatSinkCapacity",grade:1,acquisition:"techBroker",modifiers:[{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"ReloadTime",method:"multiplicative",value:.75}]},{symbol:"Int_Hyperdrive_Size5_Class5",name:"Frame Shift Drive",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size2_Class5",name:"Frame Shift Drive (SCO) V1",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size3_Class5",name:"Frame Shift Drive (SCO) V1",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size4_Class5",name:"Frame Shift Drive (SCO) V1",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size5_Class5",name:"Frame Shift Drive (SCO) V1",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size6_Class5",name:"Frame Shift Drive (SCO) V1",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size7_Class5",name:"Frame Shift Drive (SCO) V1",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_DetailedSurfaceScanner_Tiny",name:"Detailed Surface Scanner V1",blueprintSymbol:"Sensor_Expanded",grade:5,acquisition:"techBroker",modifiers:[{label:"DSS_PatchRadius",method:"multiplicative",value:1}]},{symbol:"Hpt_FlakMortar_Turret_Medium",name:"Festive Green Remote Release Flak Launcher",blueprintSymbol:"Decorative_Green",grade:5,acquisition:"eventReward",modifiers:[{label:"Damage",method:"multiplicative",value:-.99}]},{symbol:"Hpt_FlakMortar_Turret_Medium",name:"Festive Red Remote Release Flak Launcher",blueprintSymbol:"Decorative_Red",grade:5,acquisition:"eventReward",modifiers:[{label:"Damage",method:"multiplicative",value:-.99}]},{symbol:"Hpt_FlakMortar_Turret_Medium",name:"Festive Yellow Remote Release Flak Launcher",blueprintSymbol:"Decorative_Yellow",grade:5,acquisition:"eventReward",modifiers:[{label:"Damage",method:"multiplicative",value:-.99}]}];var PRE_ENGINEERED_MODULES=deepFreeze(pre_engineered_default);function getPreEngineeredVariants(symbol){return filterByKey(PRE_ENGINEERED_MODULES,"symbol",symbol,"getPreEngineeredVariants: symbol")}function isPreEngineered(symbol){requireStringIfPresent(symbol,"isPreEngineered: symbol");return getPreEngineeredVariants(symbol).length>0}export{PRE_ENGINEERED_MODULES,getPreEngineeredVariants,isPreEngineered};//# sourceMappingURL=chunk-BJU27V6C.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ships/pre-engineered.ts"],"names":["filterByKey","requireStringIfPresent","deepFreeze","pre_engineered_default","symbol","PRE_ENGINEERED_MODULES","getPreEngineeredVariants","isPreEngineered","length"],"mappings":"O,s26BAwKO,IAAMK,uBAA0DH,WACnEC,wBA4BG,SAASG,yBAAyBF,QACrC,OAAOJ,YACHK,uBACA,SACAD,OACA,mCAER,CAkBO,SAASG,gBAAgBH,QAC5BH,uBAAuBG,OAAQ,2BAC/B,OAAOE,yBAAyBF,QAAQI,OAAS,CACrD,QAAAH,uBAAAC,yBAAAC"}
1
+ {"version":3,"sources":["../src/ships/pre-engineered.ts"],"names":["filterByKey","requireStringIfPresent","deepFreeze","pre_engineered_default","symbol","PRE_ENGINEERED_MODULES","getPreEngineeredVariants","isPreEngineered","length"],"mappings":"O,y96BAwKO,IAAMK,uBAA0DH,WACnEC,wBA4BG,SAASG,yBAAyBF,QACrC,OAAOJ,YACHK,uBACA,SACAD,OACA,mCAER,CAkBO,SAASG,gBAAgBH,QAC5BH,uBAAuBG,OAAQ,2BAC/B,OAAOE,yBAAyBF,QAAQI,OAAS,CACrD,QAAAH,uBAAAC,yBAAAC"}
@@ -0,0 +1 @@
1
+ function calculateUnladenMass(hullMass,modules){let value=hullMass;for(const module of modules)value+=module.mass;return value}function calculateCargoCapacity(modules){let value=0;for(const module of modules)value+=module.cargoCapacity??0;return value}function calculatePassengerCapacity(modules){let value=0;for(const module of modules)value+=module.cabinCapacity??0;return value}function calculateFuelCapacity(reserveFuelCapacity,modules){let main=0;for(const module of modules)main+=module.fuelCapacity??0;return Object.freeze({main:main,reserve:reserveFuelCapacity})}export{calculateCargoCapacity,calculateFuelCapacity,calculatePassengerCapacity,calculateUnladenMass};//# sourceMappingURL=chunk-C3LLPLLD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ships/loadout-calculations.ts"],"names":["calculateUnladenMass","hullMass","modules","value","module","mass","calculateCargoCapacity","cargoCapacity","calculatePassengerCapacity","cabinCapacity","calculateFuelCapacity","reserveFuelCapacity","main","fuelCapacity","Object","freeze","reserve"],"mappings":"AAiGO,SAASA,qBACZC,SACAC,SAEA,IAAIC,MAAQF,SACZ,IAAA,MAAWG,UAAUF,QAASC,OAASC,OAAOC,KAC9C,OAAOF,KACX,CAQO,SAASG,uBAAuBJ,SACnC,IAAIC,MAAQ,EACZ,IAAA,MAAWC,UAAUF,QAASC,OAASC,OAAOG,eAAiB,EAC/D,OAAOJ,KACX,CAQO,SAASK,2BAA2BN,SACvC,IAAIC,MAAQ,EACZ,IAAA,MAAWC,UAAUF,QAASC,OAASC,OAAOK,eAAiB,EAC/D,OAAON,KACX,CASO,SAASO,sBACZC,oBACAT,SAEA,IAAIU,KAAO,EACX,IAAA,MAAWR,UAAUF,QAASU,MAAQR,OAAOS,cAAgB,EAC7D,OAAOC,OAAOC,OAAO,CAAEH,UAAMI,QAASL,qBAC1C,QAAAL,uBAAAI,sBAAAF,2BAAAR"}
@@ -0,0 +1 @@
1
+ import{normalizeKey}from"./chunk-BKWLI44T.js";import{requireStringIfPresent}from"./chunk-PKWVG2JY.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var engineering_options_default={groups:{powerPlants:{blueprints:["PowerPlant_Armoured","PowerPlant_Boosted","PowerPlant_Stealth"],experimentals:["special_powerplant_cooled","special_powerplant_highcharge","special_powerplant_lightweight","special_powerplant_toughened"]},guardianPowerPlants:{blueprints:["GuardianModule_Sturdy"],experimentals:[]},thrusters:{blueprints:["Engine_Dirty","Engine_Reinforced","Engine_Tuned"],experimentals:["special_engine_cooled","special_engine_haulage","special_engine_lightweight","special_engine_overloaded","special_engine_toughened"]},frameShiftDrives:{blueprints:["FSD_FastBoot","FSD_LongRange","FSD_Shielded"],experimentals:["special_fsd_cooled","special_fsd_fuelcapacity","special_fsd_heavy","special_fsd_lightweight","special_fsd_toughened"]},powerDistributors:{blueprints:["PowerDistributor_HighCapacity","PowerDistributor_HighFrequency","PowerDistributor_PriorityEngines","PowerDistributor_PrioritySystems","PowerDistributor_PriorityWeapons","PowerDistributor_Shielded"],experimentals:["special_powerdistributor_capacity","special_powerdistributor_efficient","special_powerdistributor_fast","special_powerdistributor_lightweight","special_powerdistributor_toughened"]},guardianPowerDistributors:{blueprints:["GuardianModule_Sturdy"],experimentals:[]},frameShiftDrivesSCO:{blueprints:["FSD_FastBoot","FSD_LongRange","FSD_Shielded"],experimentals:["special_fsd_cooled","special_fsd_fuelcapacity","special_fsd_heavy","special_fsd_lightweight","special_fsd_toughened"]},shieldGenerators:{blueprints:["ShieldGenerator_Kinetic","ShieldGenerator_Optimised","ShieldGenerator_Reinforced","ShieldGenerator_Thermic"],experimentals:["special_shield_efficient","special_shield_health","special_shield_kinetic","special_shield_lightweight","special_shield_regenerative","special_shield_resistive","special_shield_thermic","special_shield_toughened"]},shieldCellBanks:{blueprints:["ShieldCellBank_Rapid","ShieldCellBank_Specialised"],experimentals:["special_shieldcell_efficient","special_shieldcell_gradual","special_shieldcell_lightweight","special_shieldcell_oversized","special_shieldcell_toughened"]},hullReinforcements:{blueprints:["HullReinforcement_Advanced","HullReinforcement_Explosive","HullReinforcement_HeavyDuty","HullReinforcement_Kinetic","HullReinforcement_Thermic"],experimentals:["special_hullreinforcement_chunky","special_hullreinforcement_explosive","special_hullreinforcement_kinetic","special_hullreinforcement_thermic"]},guardianHullReinforcements:{blueprints:["GuardianModule_Sturdy"],experimentals:[]},pulseLasers:{blueprints:["PulseLaser_ThermalPlasmaConversion","Weapon_Efficient","Weapon_Focused","Weapon_LightWeight","Weapon_LongRange","Weapon_Overcharged","Weapon_RapidFire","Weapon_ShortRange","Weapon_Sturdy"],experimentals:["special_concordant_sequence","special_emissive_munitions","special_phasing_sequence","special_scramble_spectrum","special_thermalshock","special_weapon_damage","special_weapon_efficient","special_weapon_lightweight","special_weapon_rateoffire","special_weapon_toughened"]},burstLasers:{blueprints:["BurstLaser_ThermalPlasmaConversion","Weapon_Efficient","Weapon_Focused","Weapon_LightWeight","Weapon_LongRange","Weapon_Overcharged","Weapon_RapidFire","Weapon_ShortRange","Weapon_Sturdy"],experimentals:["special_concordant_sequence","special_distortion_field","special_phasing_sequence","special_scramble_spectrum","special_thermalshock","special_weapon_damage","special_weapon_efficient","special_weapon_lightweight","special_weapon_rateoffire","special_weapon_toughened"]},beamLasers:{blueprints:["BeamLaser_ThermalPlasmaConversion","Weapon_Efficient","Weapon_LightWeight","Weapon_LongRange","Weapon_Overcharged","Weapon_ShortRange","Weapon_Sturdy"],experimentals:["special_concordant_sequence","special_regeneration_sequence","special_thermal_conduit","special_thermal_vent","special_thermalshock","special_weapon_damage","special_weapon_efficient","special_weapon_lightweight","special_weapon_toughened"]},cannons:{blueprints:["Weapon_Efficient","Weapon_HighCapacity","Weapon_LightWeight","Weapon_LongRange","Weapon_Overcharged","Weapon_RapidFire","Weapon_ShortRange","Weapon_Sturdy"],experimentals:["special_auto_loader","special_dispersal_field","special_force_shell","special_high_yield_shell","special_smart_rounds","special_thermal_cascade","special_weapon_damage","special_weapon_efficient","special_weapon_lightweight","special_weapon_rateoffire","special_weapon_toughened"]},fragmentCannons:{blueprints:["Weapon_DoubleShot","Weapon_Efficient","Weapon_HighCapacity","Weapon_LightWeight","Weapon_Overcharged","Weapon_RapidFire","Weapon_Sturdy"],experimentals:["special_blinding_shell","special_corrosive_shell","special_drag_munitions","special_incendiary_rounds","special_screening_shell","special_weapon_damage","special_weapon_efficient","special_weapon_lightweight","special_weapon_rateoffire","special_weapon_toughened"]},multiCannons:{blueprints:["MC_Overcharged","Weapon_Efficient","Weapon_HighCapacity","Weapon_LightWeight","Weapon_LongRange","Weapon_RapidFire","Weapon_ShortRange","Weapon_Sturdy"],experimentals:["special_auto_loader","special_corrosive_shell","special_emissive_munitions","special_incendiary_rounds","special_phasing_sequence","special_smart_rounds","special_thermalshock","special_weapon_damage","special_weapon_efficient","special_weapon_lightweight","special_weapon_rateoffire","special_weapon_toughened"]},plasmaAccelerators:{blueprints:["Weapon_Efficient","Weapon_Focused","Weapon_LightWeight","Weapon_LongRange","Weapon_Overcharged","Weapon_RapidFire","Weapon_ShortRange","Weapon_Sturdy"],experimentals:["special_blinding_shell","special_dispersal_field","special_lock_breaker","special_phasing_sequence","special_plasma_slug","special_thermal_conduit","special_weapon_damage","special_weapon_efficient","special_weapon_lightweight","special_weapon_rateoffire","special_weapon_toughened"]},railGuns:{blueprints:["Weapon_HighCapacity","Weapon_LightWeight","Weapon_LongRange","Weapon_ShortRange","Weapon_Sturdy"],experimentals:["special_feedback_cascade_cooled","special_plasma_slug_cooled","special_super_penetrator","special_super_penetrator_cooled","special_weapon_damage","special_weapon_efficient","special_weapon_lightweight","special_weapon_rateoffire","special_weapon_toughened"]},missiles:{blueprints:["Weapon_HighCapacity","Weapon_LightWeight","Weapon_RapidFire","Weapon_Sturdy"],experimentals:["special_drag_munitions","special_emissive_munitions","special_fsd_interrupt","special_overload_munitions","special_penetrator_munitions","special_thermal_cascade","special_weapon_damage","special_weapon_efficient","special_weapon_lightweight","special_weapon_rateoffire","special_weapon_toughened"]},mines:{blueprints:["Weapon_HighCapacity","Weapon_LightWeight","Weapon_RapidFire","Weapon_Sturdy"],experimentals:["special_choke_canister","special_emissive_munitions","special_overload_munitions","special_radiant_canister","special_reverberating_cascade","special_shiftlock_canister","special_weapon_damage","special_weapon_efficient","special_weapon_lightweight","special_weapon_toughened"]},torpedoes:{blueprints:["Weapon_LightWeight","Weapon_Sturdy"],experimentals:["special_deep_cut_payload","special_mass_lock","special_reverberating_cascade","special_weapon_damage","special_weapon_efficient","special_weapon_lightweight","special_weapon_toughened"]},shieldBoosters:{blueprints:["ShieldBooster_Explosive","ShieldBooster_HeavyDuty","ShieldBooster_Kinetic","ShieldBooster_Resistive","ShieldBooster_Thermic"],experimentals:["special_shieldbooster_chunky","special_shieldbooster_efficient","special_shieldbooster_explosive","special_shieldbooster_kinetic","special_shieldbooster_thermic","special_shieldbooster_toughened"]},bulkheads:{blueprints:["Armour_Advanced","Armour_Explosive","Armour_HeavyDuty","Armour_Kinetic","Armour_Thermic"],experimentals:["special_armour_chunky","special_armour_explosive","special_armour_kinetic","special_armour_thermic"]},lifeSupports:{blueprints:["LifeSupport_LightWeight","LifeSupport_Reinforced","LifeSupport_Shielded"],experimentals:[]},sensors:{blueprints:["Sensor_LightWeight","Sensor_LongRange","Sensor_WideAngle"],experimentals:[]},autoFieldMaintenanceUnits:{blueprints:["AFM_Shielded"],experimentals:[]},collectionLimpets:{blueprints:["CollectionLimpet_LightWeight","CollectionLimpet_Reinforced","CollectionLimpet_Shielded"],experimentals:[]},fsdBoosters:{blueprints:["GuardianModule_Sturdy"],experimentals:[]},fsdInterdictors:{blueprints:["FSDinterdictor_Expanded","FSDinterdictor_LongRange"],experimentals:[]},fuelScoops:{blueprints:["FuelScoop_Efficiency","FuelScoop_Shielded"],experimentals:[]},fuelTransferLimpets:{blueprints:["FuelTransferLimpet_LightWeight","FuelTransferLimpet_Reinforced","FuelTransferLimpet_Shielded"],experimentals:[]},hatchBreakerLimpets:{blueprints:["HatchBreakerLimpet_LightWeight","HatchBreakerLimpet_Reinforced","HatchBreakerLimpet_Shielded"],experimentals:[]},moduleReinforcements:{blueprints:["GuardianModule_Sturdy"],experimentals:[]},prospectingLimpets:{blueprints:["ProspectingLimpet_LightWeight","ProspectingLimpet_Reinforced","ProspectingLimpet_Shielded"],experimentals:[]},refineries:{blueprints:["Refineries_Shielded"],experimentals:[]},shieldReinforcements:{blueprints:["GuardianModule_Sturdy"],experimentals:[]},surfaceScanners:{blueprints:["Sensor_Expanded"],experimentals:[]},chaffLaunchers:{blueprints:["Misc_ChaffCapacity","Misc_LightWeight","Misc_Reinforced","Misc_Shielded"],experimentals:[]},ecms:{blueprints:["Misc_LightWeight","Misc_Reinforced","Misc_Shielded"],experimentals:[]},heatSinkLaunchers:{blueprints:["Misc_HeatSinkCapacity","Misc_LightWeight","Misc_Reinforced","Misc_Shielded"],experimentals:[]},killWarrantScanners:{blueprints:["Misc_LightWeight","Misc_Reinforced","Misc_Shielded","Scanner_LongRange","Scanner_WideAngle","Sensor_FastScan"],experimentals:[]},manifestScanners:{blueprints:["Misc_LightWeight","Misc_Reinforced","Misc_Shielded","Scanner_LongRange","Scanner_WideAngle","Sensor_FastScan"],experimentals:[]},pointDefence:{blueprints:["Misc_LightWeight","Misc_PointDefenseCapacity","Misc_Reinforced","Misc_Shielded"],experimentals:[]},wakeScanners:{blueprints:["Misc_LightWeight","Misc_Reinforced","Misc_Shielded","Scanner_LongRange","Scanner_WideAngle","Sensor_FastScan"],experimentals:[]},guardianGauss:{blueprints:["GuardianModule_Sturdy"],experimentals:[]},guardianPlasma:{blueprints:["GuardianModule_Sturdy"],experimentals:[]},guardianShard:{blueprints:["GuardianModule_Sturdy"],experimentals:[]}},modules:{Int_Powerplant_Size2_Class1:"powerPlants",Int_Powerplant_Size2_Class2:"powerPlants",Int_Powerplant_Size2_Class3:"powerPlants",Int_Powerplant_Size2_Class4:"powerPlants",Int_Powerplant_Size2_Class5:"powerPlants",Int_Powerplant_Size3_Class1:"powerPlants",Int_Powerplant_Size3_Class2:"powerPlants",Int_Powerplant_Size3_Class3:"powerPlants",Int_Powerplant_Size3_Class4:"powerPlants",Int_Powerplant_Size3_Class5:"powerPlants",Int_Powerplant_Size4_Class1:"powerPlants",Int_Powerplant_Size4_Class2:"powerPlants",Int_Powerplant_Size4_Class3:"powerPlants",Int_Powerplant_Size4_Class4:"powerPlants",Int_Powerplant_Size4_Class5:"powerPlants",Int_Powerplant_Size5_Class1:"powerPlants",Int_Powerplant_Size5_Class2:"powerPlants",Int_Powerplant_Size5_Class3:"powerPlants",Int_Powerplant_Size5_Class4:"powerPlants",Int_Powerplant_Size5_Class5:"powerPlants",Int_Powerplant_Size6_Class1:"powerPlants",Int_Powerplant_Size6_Class2:"powerPlants",Int_Powerplant_Size6_Class3:"powerPlants",Int_Powerplant_Size6_Class4:"powerPlants",Int_Powerplant_Size6_Class5:"powerPlants",Int_Powerplant_Size7_Class1:"powerPlants",Int_Powerplant_Size7_Class2:"powerPlants",Int_Powerplant_Size7_Class3:"powerPlants",Int_Powerplant_Size7_Class4:"powerPlants",Int_Powerplant_Size7_Class5:"powerPlants",Int_Powerplant_Size8_Class1:"powerPlants",Int_Powerplant_Size8_Class2:"powerPlants",Int_Powerplant_Size8_Class3:"powerPlants",Int_Powerplant_Size8_Class4:"powerPlants",Int_Powerplant_Size8_Class5:"powerPlants",Int_PowerPlant_Size2_Class1_free:"powerPlants",Int_GuardianPowerplant_Size2:"guardianPowerPlants",Int_GuardianPowerplant_Size3:"guardianPowerPlants",Int_GuardianPowerplant_Size4:"guardianPowerPlants",Int_GuardianPowerplant_Size5:"guardianPowerPlants",Int_GuardianPowerplant_Size6:"guardianPowerPlants",Int_GuardianPowerplant_Size7:"guardianPowerPlants",Int_GuardianPowerplant_Size8:"guardianPowerPlants",Int_Engine_Size2_Class1:"thrusters",Int_Engine_Size2_Class2:"thrusters",Int_Engine_Size2_Class3:"thrusters",Int_Engine_Size2_Class4:"thrusters",Int_Engine_Size2_Class5:"thrusters",Int_Engine_Size3_Class1:"thrusters",Int_Engine_Size3_Class2:"thrusters",Int_Engine_Size3_Class3:"thrusters",Int_Engine_Size3_Class4:"thrusters",Int_Engine_Size3_Class5:"thrusters",Int_Engine_Size4_Class1:"thrusters",Int_Engine_Size4_Class2:"thrusters",Int_Engine_Size4_Class3:"thrusters",Int_Engine_Size4_Class4:"thrusters",Int_Engine_Size4_Class5:"thrusters",Int_Engine_Size5_Class1:"thrusters",Int_Engine_Size5_Class2:"thrusters",Int_Engine_Size5_Class3:"thrusters",Int_Engine_Size5_Class4:"thrusters",Int_Engine_Size5_Class5:"thrusters",Int_Engine_Size6_Class1:"thrusters",Int_Engine_Size6_Class2:"thrusters",Int_Engine_Size6_Class3:"thrusters",Int_Engine_Size6_Class4:"thrusters",Int_Engine_Size6_Class5:"thrusters",Int_Engine_Size7_Class1:"thrusters",Int_Engine_Size7_Class2:"thrusters",Int_Engine_Size7_Class3:"thrusters",Int_Engine_Size7_Class4:"thrusters",Int_Engine_Size7_Class5:"thrusters",Int_Engine_Size8_Class1:"thrusters",Int_Engine_Size8_Class2:"thrusters",Int_Engine_Size8_Class3:"thrusters",Int_Engine_Size8_Class4:"thrusters",Int_Engine_Size8_Class5:"thrusters",Int_Engine_Size2_Class1_free:"thrusters",Int_Engine_Size3_Class5_Fast:"thrusters",Int_Engine_Size2_Class5_Fast:"thrusters",Int_Engine_Size7_Class5_GravityOptimised_MkII:"thrusters",Int_MkIIAgileBoost_Engine_Size5_Class5:"thrusters",Int_Hyperdrive_Size2_Class1:"frameShiftDrives",Int_Hyperdrive_Size2_Class2:"frameShiftDrives",Int_Hyperdrive_Size2_Class3:"frameShiftDrives",Int_Hyperdrive_Size2_Class4:"frameShiftDrives",Int_Hyperdrive_Size2_Class5:"frameShiftDrives",Int_Hyperdrive_Size3_Class1:"frameShiftDrives",Int_Hyperdrive_Size3_Class2:"frameShiftDrives",Int_Hyperdrive_Size3_Class3:"frameShiftDrives",Int_Hyperdrive_Size3_Class4:"frameShiftDrives",Int_Hyperdrive_Size3_Class5:"frameShiftDrives",Int_Hyperdrive_Size4_Class1:"frameShiftDrives",Int_Hyperdrive_Size4_Class2:"frameShiftDrives",Int_Hyperdrive_Size4_Class3:"frameShiftDrives",Int_Hyperdrive_Size4_Class4:"frameShiftDrives",Int_Hyperdrive_Size4_Class5:"frameShiftDrives",Int_Hyperdrive_Size5_Class1:"frameShiftDrives",Int_Hyperdrive_Size5_Class2:"frameShiftDrives",Int_Hyperdrive_Size5_Class3:"frameShiftDrives",Int_Hyperdrive_Size5_Class4:"frameShiftDrives",Int_Hyperdrive_Size5_Class5:"frameShiftDrives",Int_Hyperdrive_Size6_Class1:"frameShiftDrives",Int_Hyperdrive_Size6_Class2:"frameShiftDrives",Int_Hyperdrive_Size6_Class3:"frameShiftDrives",Int_Hyperdrive_Size6_Class4:"frameShiftDrives",Int_Hyperdrive_Size6_Class5:"frameShiftDrives",Int_Hyperdrive_Size7_Class1:"frameShiftDrives",Int_Hyperdrive_Size7_Class2:"frameShiftDrives",Int_Hyperdrive_Size7_Class3:"frameShiftDrives",Int_Hyperdrive_Size7_Class4:"frameShiftDrives",Int_Hyperdrive_Size7_Class5:"frameShiftDrives",Int_Hyperdrive_Size2_Class1_free:"frameShiftDrives",Int_PowerDistributor_Size1_Class1:"powerDistributors",Int_PowerDistributor_Size1_Class2:"powerDistributors",Int_PowerDistributor_Size1_Class3:"powerDistributors",Int_PowerDistributor_Size1_Class4:"powerDistributors",Int_PowerDistributor_Size1_Class5:"powerDistributors",Int_PowerDistributor_Size2_Class1:"powerDistributors",Int_PowerDistributor_Size2_Class2:"powerDistributors",Int_PowerDistributor_Size2_Class3:"powerDistributors",Int_PowerDistributor_Size2_Class4:"powerDistributors",Int_PowerDistributor_Size2_Class5:"powerDistributors",Int_PowerDistributor_Size3_Class1:"powerDistributors",Int_PowerDistributor_Size3_Class2:"powerDistributors",Int_PowerDistributor_Size3_Class3:"powerDistributors",Int_PowerDistributor_Size3_Class4:"powerDistributors",Int_PowerDistributor_Size3_Class5:"powerDistributors",Int_PowerDistributor_Size4_Class1:"powerDistributors",Int_PowerDistributor_Size4_Class2:"powerDistributors",Int_PowerDistributor_Size4_Class3:"powerDistributors",Int_PowerDistributor_Size4_Class4:"powerDistributors",Int_PowerDistributor_Size4_Class5:"powerDistributors",Int_PowerDistributor_Size5_Class1:"powerDistributors",Int_PowerDistributor_Size5_Class2:"powerDistributors",Int_PowerDistributor_Size5_Class3:"powerDistributors",Int_PowerDistributor_Size5_Class4:"powerDistributors",Int_PowerDistributor_Size5_Class5:"powerDistributors",Int_PowerDistributor_Size6_Class1:"powerDistributors",Int_PowerDistributor_Size6_Class2:"powerDistributors",Int_PowerDistributor_Size6_Class3:"powerDistributors",Int_PowerDistributor_Size6_Class4:"powerDistributors",Int_PowerDistributor_Size6_Class5:"powerDistributors",Int_PowerDistributor_Size7_Class1:"powerDistributors",Int_PowerDistributor_Size7_Class2:"powerDistributors",Int_PowerDistributor_Size7_Class3:"powerDistributors",Int_PowerDistributor_Size7_Class4:"powerDistributors",Int_PowerDistributor_Size7_Class5:"powerDistributors",Int_PowerDistributor_Size8_Class1:"powerDistributors",Int_PowerDistributor_Size8_Class2:"powerDistributors",Int_PowerDistributor_Size8_Class3:"powerDistributors",Int_PowerDistributor_Size8_Class4:"powerDistributors",Int_PowerDistributor_Size8_Class5:"powerDistributors",Int_PowerDistributor_Size1_Class1_free:"powerDistributors",Int_GuardianPowerDistributor_Size1:"guardianPowerDistributors",Int_GuardianPowerDistributor_Size2:"guardianPowerDistributors",Int_GuardianPowerDistributor_Size3:"guardianPowerDistributors",Int_GuardianPowerDistributor_Size4:"guardianPowerDistributors",Int_GuardianPowerDistributor_Size5:"guardianPowerDistributors",Int_GuardianPowerDistributor_Size6:"guardianPowerDistributors",Int_GuardianPowerDistributor_Size7:"guardianPowerDistributors",Int_GuardianPowerDistributor_Size8:"guardianPowerDistributors",Int_Hyperdrive_Overcharge_Size5_Class3:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size7_Class3:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size6_Class3:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size4_Class3:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size3_Class3:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size2_Class3:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size2_Class1:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size2_Class2:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size2_Class4:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size2_Class5:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size3_Class1:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size3_Class2:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size3_Class4:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size3_Class5:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size4_Class1:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size4_Class2:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size4_Class4:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size4_Class5:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size5_Class1:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size5_Class2:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size5_Class4:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size5_Class5:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size6_Class1:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size6_Class2:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size6_Class4:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size6_Class5:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size7_Class1:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size7_Class2:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size7_Class4:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size7_Class5:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size8_Class1:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size8_Class2:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size8_Class3:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size8_Class4:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size8_Class5:"frameShiftDrivesSCO",Int_Hyperdrive_Overcharge_Size8_Class5_OverchargeBooster_MkII:"frameShiftDrivesSCO",Int_ShieldGenerator_Size1_Class1:"shieldGenerators",Int_ShieldGenerator_Size1_Class2:"shieldGenerators",Int_ShieldGenerator_Size1_Class3:"shieldGenerators",Int_ShieldGenerator_Size1_Class4:"shieldGenerators",Int_ShieldGenerator_Size1_Class5:"shieldGenerators",Int_ShieldGenerator_Size2_Class1:"shieldGenerators",Int_ShieldGenerator_Size2_Class2:"shieldGenerators",Int_ShieldGenerator_Size2_Class3:"shieldGenerators",Int_ShieldGenerator_Size2_Class4:"shieldGenerators",Int_ShieldGenerator_Size2_Class5:"shieldGenerators",Int_ShieldGenerator_Size3_Class1:"shieldGenerators",Int_ShieldGenerator_Size3_Class2:"shieldGenerators",Int_ShieldGenerator_Size3_Class3:"shieldGenerators",Int_ShieldGenerator_Size3_Class4:"shieldGenerators",Int_ShieldGenerator_Size3_Class5:"shieldGenerators",Int_ShieldGenerator_Size4_Class1:"shieldGenerators",Int_ShieldGenerator_Size4_Class2:"shieldGenerators",Int_ShieldGenerator_Size4_Class3:"shieldGenerators",Int_ShieldGenerator_Size4_Class4:"shieldGenerators",Int_ShieldGenerator_Size4_Class5:"shieldGenerators",Int_ShieldGenerator_Size5_Class1:"shieldGenerators",Int_ShieldGenerator_Size5_Class2:"shieldGenerators",Int_ShieldGenerator_Size5_Class3:"shieldGenerators",Int_ShieldGenerator_Size5_Class4:"shieldGenerators",Int_ShieldGenerator_Size5_Class5:"shieldGenerators",Int_ShieldGenerator_Size6_Class1:"shieldGenerators",Int_ShieldGenerator_Size6_Class2:"shieldGenerators",Int_ShieldGenerator_Size6_Class3:"shieldGenerators",Int_ShieldGenerator_Size6_Class4:"shieldGenerators",Int_ShieldGenerator_Size6_Class5:"shieldGenerators",Int_ShieldGenerator_Size7_Class1:"shieldGenerators",Int_ShieldGenerator_Size7_Class2:"shieldGenerators",Int_ShieldGenerator_Size7_Class3:"shieldGenerators",Int_ShieldGenerator_Size7_Class4:"shieldGenerators",Int_ShieldGenerator_Size7_Class5:"shieldGenerators",Int_ShieldGenerator_Size8_Class1:"shieldGenerators",Int_ShieldGenerator_Size8_Class2:"shieldGenerators",Int_ShieldGenerator_Size8_Class3:"shieldGenerators",Int_ShieldGenerator_Size8_Class4:"shieldGenerators",Int_ShieldGenerator_Size8_Class5:"shieldGenerators",Int_ShieldGenerator_Size2_Class1_free:"shieldGenerators",Int_ShieldGenerator_Size1_Class5_Strong:"shieldGenerators",Int_ShieldGenerator_Size2_Class5_Strong:"shieldGenerators",Int_ShieldGenerator_Size3_Class5_Strong:"shieldGenerators",Int_ShieldGenerator_Size4_Class5_Strong:"shieldGenerators",Int_ShieldGenerator_Size5_Class5_Strong:"shieldGenerators",Int_ShieldGenerator_Size6_Class5_Strong:"shieldGenerators",Int_ShieldGenerator_Size7_Class5_Strong:"shieldGenerators",Int_ShieldGenerator_Size8_Class5_Strong:"shieldGenerators",Int_ShieldGenerator_Size1_Class3_Fast:"shieldGenerators",Int_ShieldGenerator_Size2_Class3_Fast:"shieldGenerators",Int_ShieldGenerator_Size3_Class3_Fast:"shieldGenerators",Int_ShieldGenerator_Size4_Class3_Fast:"shieldGenerators",Int_ShieldGenerator_Size5_Class3_Fast:"shieldGenerators",Int_ShieldGenerator_Size6_Class3_Fast:"shieldGenerators",Int_ShieldGenerator_Size7_Class3_Fast:"shieldGenerators",Int_ShieldGenerator_Size8_Class3_Fast:"shieldGenerators",Int_ShieldCellBank_Size1_Class1:"shieldCellBanks",Int_ShieldCellBank_Size1_Class2:"shieldCellBanks",Int_ShieldCellBank_Size1_Class3:"shieldCellBanks",Int_ShieldCellBank_Size1_Class4:"shieldCellBanks",Int_ShieldCellBank_Size1_Class5:"shieldCellBanks",Int_ShieldCellBank_Size2_Class1:"shieldCellBanks",Int_ShieldCellBank_Size2_Class2:"shieldCellBanks",Int_ShieldCellBank_Size2_Class3:"shieldCellBanks",Int_ShieldCellBank_Size2_Class4:"shieldCellBanks",Int_ShieldCellBank_Size2_Class5:"shieldCellBanks",Int_ShieldCellBank_Size3_Class1:"shieldCellBanks",Int_ShieldCellBank_Size3_Class2:"shieldCellBanks",Int_ShieldCellBank_Size3_Class3:"shieldCellBanks",Int_ShieldCellBank_Size3_Class4:"shieldCellBanks",Int_ShieldCellBank_Size3_Class5:"shieldCellBanks",Int_ShieldCellBank_Size4_Class1:"shieldCellBanks",Int_ShieldCellBank_Size4_Class2:"shieldCellBanks",Int_ShieldCellBank_Size4_Class3:"shieldCellBanks",Int_ShieldCellBank_Size4_Class4:"shieldCellBanks",Int_ShieldCellBank_Size4_Class5:"shieldCellBanks",Int_ShieldCellBank_Size5_Class1:"shieldCellBanks",Int_ShieldCellBank_Size5_Class2:"shieldCellBanks",Int_ShieldCellBank_Size5_Class3:"shieldCellBanks",Int_ShieldCellBank_Size5_Class4:"shieldCellBanks",Int_ShieldCellBank_Size5_Class5:"shieldCellBanks",Int_ShieldCellBank_Size6_Class1:"shieldCellBanks",Int_ShieldCellBank_Size6_Class2:"shieldCellBanks",Int_ShieldCellBank_Size6_Class3:"shieldCellBanks",Int_ShieldCellBank_Size6_Class4:"shieldCellBanks",Int_ShieldCellBank_Size6_Class5:"shieldCellBanks",Int_ShieldCellBank_Size7_Class1:"shieldCellBanks",Int_ShieldCellBank_Size7_Class2:"shieldCellBanks",Int_ShieldCellBank_Size7_Class3:"shieldCellBanks",Int_ShieldCellBank_Size7_Class4:"shieldCellBanks",Int_ShieldCellBank_Size7_Class5:"shieldCellBanks",Int_ShieldCellBank_Size8_Class1:"shieldCellBanks",Int_ShieldCellBank_Size8_Class2:"shieldCellBanks",Int_ShieldCellBank_Size8_Class3:"shieldCellBanks",Int_ShieldCellBank_Size8_Class4:"shieldCellBanks",Int_ShieldCellBank_Size8_Class5:"shieldCellBanks",Int_HullReinforcement_Size1_Class1:"hullReinforcements",Int_HullReinforcement_Size1_Class2:"hullReinforcements",Int_HullReinforcement_Size2_Class1:"hullReinforcements",Int_HullReinforcement_Size2_Class2:"hullReinforcements",Int_HullReinforcement_Size3_Class1:"hullReinforcements",Int_HullReinforcement_Size3_Class2:"hullReinforcements",Int_HullReinforcement_Size4_Class1:"hullReinforcements",Int_HullReinforcement_Size4_Class2:"hullReinforcements",Int_HullReinforcement_Size5_Class1:"hullReinforcements",Int_HullReinforcement_Size5_Class2:"hullReinforcements",Int_GuardianHullReinforcement_Size1_Class1:"guardianHullReinforcements",Int_GuardianHullReinforcement_Size1_Class2:"guardianHullReinforcements",Int_GuardianHullReinforcement_Size2_Class1:"guardianHullReinforcements",Int_GuardianHullReinforcement_Size2_Class2:"guardianHullReinforcements",Int_GuardianHullReinforcement_Size3_Class1:"guardianHullReinforcements",Int_GuardianHullReinforcement_Size3_Class2:"guardianHullReinforcements",Int_GuardianHullReinforcement_Size4_Class1:"guardianHullReinforcements",Int_GuardianHullReinforcement_Size4_Class2:"guardianHullReinforcements",Int_GuardianHullReinforcement_Size5_Class1:"guardianHullReinforcements",Int_GuardianHullReinforcement_Size5_Class2:"guardianHullReinforcements",Hpt_PulseLaser_Fixed_Small:"pulseLasers",Hpt_PulseLaser_Fixed_Medium:"pulseLasers",Hpt_PulseLaser_Fixed_Large:"pulseLasers",Hpt_PulseLaser_Fixed_Huge:"pulseLasers",Hpt_PulseLaser_Gimbal_Small:"pulseLasers",Hpt_PulseLaser_Gimbal_Medium:"pulseLasers",Hpt_PulseLaser_Gimbal_Large:"pulseLasers",Hpt_PulseLaser_Turret_Small:"pulseLasers",Hpt_PulseLaser_Turret_Medium:"pulseLasers",Hpt_PulseLaser_Turret_Large:"pulseLasers",Hpt_PulseLaser_Fixed_Medium_Disruptor:"pulseLasers",Hpt_PulseLaser_Gimbal_Huge:"pulseLasers",Hpt_PulseLaserBurst_Fixed_Small:"burstLasers",Hpt_PulseLaserBurst_Fixed_Medium:"burstLasers",Hpt_PulseLaserBurst_Fixed_Large:"burstLasers",Hpt_PulseLaserBurst_Fixed_Huge:"burstLasers",Hpt_PulseLaserBurst_Gimbal_Small:"burstLasers",Hpt_PulseLaserBurst_Gimbal_Medium:"burstLasers",Hpt_PulseLaserBurst_Gimbal_Large:"burstLasers",Hpt_PulseLaserBurst_Turret_Small:"burstLasers",Hpt_PulseLaserBurst_Turret_Medium:"burstLasers",Hpt_PulseLaserBurst_Turret_Large:"burstLasers",Hpt_PulseLaserBurst_Fixed_Small_Scatter:"burstLasers",Hpt_PulseLaserBurst_Gimbal_Huge:"burstLasers",Hpt_BeamLaser_Fixed_Small:"beamLasers",Hpt_BeamLaser_Fixed_Medium:"beamLasers",Hpt_BeamLaser_Fixed_Large:"beamLasers",Hpt_BeamLaser_Fixed_Huge:"beamLasers",Hpt_BeamLaser_Gimbal_Small:"beamLasers",Hpt_BeamLaser_Gimbal_Medium:"beamLasers",Hpt_BeamLaser_Gimbal_Large:"beamLasers",Hpt_BeamLaser_Turret_Small:"beamLasers",Hpt_BeamLaser_Turret_Medium:"beamLasers",Hpt_BeamLaser_Turret_Large:"beamLasers",Hpt_BeamLaser_Fixed_Small_Heat:"beamLasers",Hpt_BeamLaser_Gimbal_Huge:"beamLasers",Hpt_Cannon_Fixed_Small:"cannons",Hpt_Cannon_Fixed_Medium:"cannons",Hpt_Cannon_Fixed_Large:"cannons",Hpt_Cannon_Fixed_Huge:"cannons",Hpt_Cannon_Gimbal_Small:"cannons",Hpt_Cannon_Gimbal_Medium:"cannons",Hpt_Cannon_Gimbal_Huge:"cannons",Hpt_Cannon_Turret_Small:"cannons",Hpt_Cannon_Turret_Medium:"cannons",Hpt_Cannon_Turret_Large:"cannons",Hpt_Cannon_Gimbal_Large:"cannons",Hpt_Cannon_Gimbal_Medium_Burst:"cannons",Hpt_Slugshot_Fixed_Small:"fragmentCannons",Hpt_Slugshot_Fixed_Medium:"fragmentCannons",Hpt_Slugshot_Fixed_Large:"fragmentCannons",Hpt_Slugshot_Gimbal_Small:"fragmentCannons",Hpt_Slugshot_Gimbal_Medium:"fragmentCannons",Hpt_Slugshot_Turret_Small:"fragmentCannons",Hpt_Slugshot_Turret_Medium:"fragmentCannons",Hpt_Slugshot_Gimbal_Large:"fragmentCannons",Hpt_Slugshot_Turret_Large:"fragmentCannons",Hpt_Slugshot_Fixed_Large_Range:"fragmentCannons",Hpt_MultiCannon_Fixed_Small:"multiCannons",Hpt_MultiCannon_Fixed_Medium:"multiCannons",Hpt_MultiCannon_Fixed_Large:"multiCannons",Hpt_MultiCannon_Fixed_Huge:"multiCannons",Hpt_MultiCannon_Gimbal_Small:"multiCannons",Hpt_MultiCannon_Gimbal_Medium:"multiCannons",Hpt_MultiCannon_Gimbal_Large:"multiCannons",Hpt_MultiCannon_Turret_Small:"multiCannons",Hpt_MultiCannon_Turret_Medium:"multiCannons",Hpt_MultiCannon_Turret_Large:"multiCannons",Hpt_MultiCannon_Fixed_Small_Strong:"multiCannons",Hpt_MultiCannon_Gimbal_Huge:"multiCannons",Hpt_MultiCannon_Fixed_Medium_Advanced:"multiCannons",Hpt_MultiCannon_Fixed_Small_Advanced:"multiCannons",Hpt_PlasmaAccelerator_Fixed_Medium:"plasmaAccelerators",Hpt_PlasmaAccelerator_Fixed_Large:"plasmaAccelerators",Hpt_PlasmaAccelerator_Fixed_Huge:"plasmaAccelerators",Hpt_PlasmaAccelerator_Fixed_Large_Advanced:"plasmaAccelerators",Hpt_Railgun_Fixed_Small:"railGuns",Hpt_Railgun_Fixed_Medium:"railGuns",Hpt_Railgun_Fixed_Medium_Burst:"railGuns",Hpt_BasicMissileRack_Fixed_Small:"missiles",Hpt_BasicMissileRack_Fixed_Medium:"missiles",Hpt_BasicMissileRack_Fixed_Large:"missiles",Hpt_DumbfireMissileRack_Fixed_Small:"missiles",Hpt_DumbfireMissileRack_Fixed_Medium:"missiles",Hpt_DrunkMissileRack_Fixed_Medium:"missiles",Hpt_DumbfireMissileRack_Fixed_Medium_Lasso:"missiles",Hpt_DumbfireMissileRack_Fixed_Large:"missiles",Hpt_DumbfireMissileRack_Fixed_Small_Advanced:"missiles",Hpt_DumbfireMissileRack_Fixed_Medium_Advanced:"missiles",Hpt_MineLauncher_Fixed_Small:"mines",Hpt_MineLauncher_Fixed_Medium:"mines",Hpt_MineLauncher_Fixed_Small_Impulse:"mines",Hpt_AdvancedTorpPylon_Fixed_Small:"torpedoes",Hpt_AdvancedTorpPylon_Fixed_Medium:"torpedoes",Hpt_AdvancedTorpPylon_Fixed_Large:"torpedoes",Hpt_ShieldBooster_Size0_Class1:"shieldBoosters",Hpt_ShieldBooster_Size0_Class2:"shieldBoosters",Hpt_ShieldBooster_Size0_Class3:"shieldBoosters",Hpt_ShieldBooster_Size0_Class4:"shieldBoosters",Hpt_ShieldBooster_Size0_Class5:"shieldBoosters",SideWinder_Armour_Grade1:"bulkheads",SideWinder_Armour_Grade2:"bulkheads",SideWinder_Armour_Grade3:"bulkheads",SideWinder_Armour_Mirrored:"bulkheads",SideWinder_Armour_Reactive:"bulkheads",Eagle_Armour_Grade1:"bulkheads",Eagle_Armour_Grade2:"bulkheads",Eagle_Armour_Grade3:"bulkheads",Eagle_Armour_Mirrored:"bulkheads",Eagle_Armour_Reactive:"bulkheads",Hauler_Armour_Grade1:"bulkheads",Hauler_Armour_Grade2:"bulkheads",Hauler_Armour_Grade3:"bulkheads",Hauler_Armour_Mirrored:"bulkheads",Hauler_Armour_Reactive:"bulkheads",Adder_Armour_Grade1:"bulkheads",Adder_Armour_Grade2:"bulkheads",Adder_Armour_Grade3:"bulkheads",Adder_Armour_Mirrored:"bulkheads",Adder_Armour_Reactive:"bulkheads",Viper_Armour_Grade1:"bulkheads",Viper_Armour_Grade2:"bulkheads",Viper_Armour_Grade3:"bulkheads",Viper_Armour_Mirrored:"bulkheads",Viper_Armour_Reactive:"bulkheads",CobraMkIII_Armour_Grade1:"bulkheads",CobraMkIII_Armour_Grade2:"bulkheads",CobraMkIII_Armour_Grade3:"bulkheads",CobraMkIII_Armour_Mirrored:"bulkheads",CobraMkIII_Armour_Reactive:"bulkheads",Type6_Armour_Grade1:"bulkheads",Type6_Armour_Grade2:"bulkheads",Type6_Armour_Grade3:"bulkheads",Type6_Armour_Mirrored:"bulkheads",Type6_Armour_Reactive:"bulkheads",Dolphin_Armour_Grade1:"bulkheads",Dolphin_Armour_Grade2:"bulkheads",Dolphin_Armour_Grade3:"bulkheads",Dolphin_Armour_Mirrored:"bulkheads",Dolphin_Armour_Reactive:"bulkheads",Type7_Armour_Grade1:"bulkheads",Type7_Armour_Grade2:"bulkheads",Type7_Armour_Grade3:"bulkheads",Type7_Armour_Mirrored:"bulkheads",Type7_Armour_Reactive:"bulkheads",Asp_Armour_Grade1:"bulkheads",Asp_Armour_Grade2:"bulkheads",Asp_Armour_Grade3:"bulkheads",Asp_Armour_Mirrored:"bulkheads",Asp_Armour_Reactive:"bulkheads",Vulture_Armour_Grade1:"bulkheads",Vulture_Armour_Grade2:"bulkheads",Vulture_Armour_Grade3:"bulkheads",Vulture_Armour_Mirrored:"bulkheads",Vulture_Armour_Reactive:"bulkheads",Empire_Trader_Armour_Grade1:"bulkheads",Empire_Trader_Armour_Grade2:"bulkheads",Empire_Trader_Armour_Grade3:"bulkheads",Empire_Trader_Armour_Mirrored:"bulkheads",Empire_Trader_Armour_Reactive:"bulkheads",Federation_Dropship_Armour_Grade1:"bulkheads",Federation_Dropship_Armour_Grade2:"bulkheads",Federation_Dropship_Armour_Grade3:"bulkheads",Federation_Dropship_Armour_Mirrored:"bulkheads",Federation_Dropship_Armour_Reactive:"bulkheads",Orca_Armour_Grade1:"bulkheads",Orca_Armour_Grade2:"bulkheads",Orca_Armour_Grade3:"bulkheads",Orca_Armour_Mirrored:"bulkheads",Orca_Armour_Reactive:"bulkheads",Type9_Armour_Grade1:"bulkheads",Type9_Armour_Grade2:"bulkheads",Type9_Armour_Grade3:"bulkheads",Type9_Armour_Mirrored:"bulkheads",Type9_Armour_Reactive:"bulkheads",Python_Armour_Grade1:"bulkheads",Python_Armour_Grade2:"bulkheads",Python_Armour_Grade3:"bulkheads",Python_Armour_Mirrored:"bulkheads",Python_Armour_Reactive:"bulkheads",BelugaLiner_Armour_Grade1:"bulkheads",BelugaLiner_Armour_Grade2:"bulkheads",BelugaLiner_Armour_Grade3:"bulkheads",BelugaLiner_Armour_Mirrored:"bulkheads",BelugaLiner_Armour_Reactive:"bulkheads",FerDeLance_Armour_Grade1:"bulkheads",FerDeLance_Armour_Grade2:"bulkheads",FerDeLance_Armour_Grade3:"bulkheads",FerDeLance_Armour_Mirrored:"bulkheads",FerDeLance_Armour_Reactive:"bulkheads",Anaconda_Armour_Grade1:"bulkheads",Anaconda_Armour_Grade2:"bulkheads",Anaconda_Armour_Grade3:"bulkheads",Anaconda_Armour_Mirrored:"bulkheads",Anaconda_Armour_Reactive:"bulkheads",Federation_Corvette_Armour_Grade1:"bulkheads",Federation_Corvette_Armour_Grade2:"bulkheads",Federation_Corvette_Armour_Grade3:"bulkheads",Federation_Corvette_Armour_Mirrored:"bulkheads",Federation_Corvette_Armour_Reactive:"bulkheads",Cutter_Armour_Grade1:"bulkheads",Cutter_Armour_Grade2:"bulkheads",Cutter_Armour_Grade3:"bulkheads",Cutter_Armour_Mirrored:"bulkheads",Cutter_Armour_Reactive:"bulkheads",DiamondBack_Armour_Grade1:"bulkheads",DiamondBack_Armour_Grade2:"bulkheads",DiamondBack_Armour_Grade3:"bulkheads",DiamondBack_Armour_Mirrored:"bulkheads",DiamondBack_Armour_Reactive:"bulkheads",Empire_Courier_Armour_Grade1:"bulkheads",Empire_Courier_Armour_Grade2:"bulkheads",Empire_Courier_Armour_Grade3:"bulkheads",Empire_Courier_Armour_Mirrored:"bulkheads",Empire_Courier_Armour_Reactive:"bulkheads",DiamondBackXL_Armour_Grade1:"bulkheads",DiamondBackXL_Armour_Grade2:"bulkheads",DiamondBackXL_Armour_Grade3:"bulkheads",DiamondBackXL_Armour_Mirrored:"bulkheads",DiamondBackXL_Armour_Reactive:"bulkheads",Empire_Eagle_Armour_Grade1:"bulkheads",Empire_Eagle_Armour_Grade2:"bulkheads",Empire_Eagle_Armour_Grade3:"bulkheads",Empire_Eagle_Armour_Mirrored:"bulkheads",Empire_Eagle_Armour_Reactive:"bulkheads",Federation_Dropship_MkII_Armour_Grade1:"bulkheads",Federation_Dropship_MkII_Armour_Grade2:"bulkheads",Federation_Dropship_MkII_Armour_Grade3:"bulkheads",Federation_Dropship_MkII_Armour_Mirrored:"bulkheads",Federation_Dropship_MkII_Armour_Reactive:"bulkheads",Federation_Gunship_Armour_Grade1:"bulkheads",Federation_Gunship_Armour_Grade2:"bulkheads",Federation_Gunship_Armour_Grade3:"bulkheads",Federation_Gunship_Armour_Mirrored:"bulkheads",Federation_Gunship_Armour_Reactive:"bulkheads",Viper_MkIV_Armour_Grade1:"bulkheads",Viper_MkIV_Armour_Grade2:"bulkheads",Viper_MkIV_Armour_Grade3:"bulkheads",Viper_MkIV_Armour_Mirrored:"bulkheads",Viper_MkIV_Armour_Reactive:"bulkheads",CobraMkIV_Armour_Grade1:"bulkheads",CobraMkIV_Armour_Grade2:"bulkheads",CobraMkIV_Armour_Grade3:"bulkheads",CobraMkIV_Armour_Mirrored:"bulkheads",CobraMkIV_Armour_Reactive:"bulkheads",Independant_Trader_Armour_Grade1:"bulkheads",Independant_Trader_Armour_Grade2:"bulkheads",Independant_Trader_Armour_Grade3:"bulkheads",Independant_Trader_Armour_Mirrored:"bulkheads",Independant_Trader_Armour_Reactive:"bulkheads",Asp_Scout_Armour_Grade1:"bulkheads",Asp_Scout_Armour_Grade2:"bulkheads",Asp_Scout_Armour_Grade3:"bulkheads",Asp_Scout_Armour_Mirrored:"bulkheads",Asp_Scout_Armour_Reactive:"bulkheads",Type9_Military_Armour_Grade1:"bulkheads",Type9_Military_Armour_Grade2:"bulkheads",Type9_Military_Armour_Grade3:"bulkheads",Type9_Military_Armour_Mirrored:"bulkheads",Type9_Military_Armour_Reactive:"bulkheads",Krait_MkII_Armour_Grade1:"bulkheads",Krait_MkII_Armour_Grade2:"bulkheads",Krait_MkII_Armour_Grade3:"bulkheads",Krait_MkII_Armour_Mirrored:"bulkheads",Krait_MkII_Armour_Reactive:"bulkheads",TypeX_Armour_Grade1:"bulkheads",TypeX_Armour_Grade2:"bulkheads",TypeX_Armour_Grade3:"bulkheads",TypeX_Armour_Mirrored:"bulkheads",TypeX_Armour_Reactive:"bulkheads",TypeX_2_Armour_Grade1:"bulkheads",TypeX_2_Armour_Grade2:"bulkheads",TypeX_2_Armour_Grade3:"bulkheads",TypeX_2_Armour_Mirrored:"bulkheads",TypeX_2_Armour_Reactive:"bulkheads",TypeX_3_Armour_Grade1:"bulkheads",TypeX_3_Armour_Grade2:"bulkheads",TypeX_3_Armour_Grade3:"bulkheads",TypeX_3_Armour_Mirrored:"bulkheads",TypeX_3_Armour_Reactive:"bulkheads",Krait_Light_Armour_Grade1:"bulkheads",Krait_Light_Armour_Grade2:"bulkheads",Krait_Light_Armour_Grade3:"bulkheads",Krait_Light_Armour_Mirrored:"bulkheads",Krait_Light_Armour_Reactive:"bulkheads",Mamba_Armour_Grade1:"bulkheads",Mamba_Armour_Grade2:"bulkheads",Mamba_Armour_Grade3:"bulkheads",Mamba_Armour_Mirrored:"bulkheads",Mamba_Armour_Reactive:"bulkheads",Python_NX_Armour_Grade1:"bulkheads",Python_NX_Armour_Grade2:"bulkheads",Python_NX_Armour_Grade3:"bulkheads",Python_NX_Armour_Mirrored:"bulkheads",Python_NX_Armour_Reactive:"bulkheads",Type8_Armour_Grade1:"bulkheads",Type8_Armour_Grade2:"bulkheads",Type8_Armour_Grade3:"bulkheads",Type8_Armour_Mirrored:"bulkheads",Type8_Armour_Reactive:"bulkheads",Mandalay_Armour_Grade1:"bulkheads",Mandalay_Armour_Grade2:"bulkheads",Mandalay_Armour_Grade3:"bulkheads",Mandalay_Armour_Mirrored:"bulkheads",Mandalay_Armour_Reactive:"bulkheads",CobraMkV_Armour_Grade1:"bulkheads",CobraMkV_Armour_Grade2:"bulkheads",CobraMkV_Armour_Grade3:"bulkheads",CobraMkV_Armour_Mirrored:"bulkheads",CobraMkV_Armour_Reactive:"bulkheads",Corsair_Armour_Grade1:"bulkheads",Corsair_Armour_Grade2:"bulkheads",Corsair_Armour_Grade3:"bulkheads",Corsair_Armour_Mirrored:"bulkheads",Corsair_Armour_Reactive:"bulkheads",PantherMkII_Armour_Grade1:"bulkheads",PantherMkII_Armour_Grade2:"bulkheads",PantherMkII_Armour_Grade3:"bulkheads",PantherMkII_Armour_Mirrored:"bulkheads",PantherMkII_Armour_Reactive:"bulkheads",LakonMiner_Armour_Grade1:"bulkheads",LakonMiner_Armour_Grade2:"bulkheads",LakonMiner_Armour_Grade3:"bulkheads",LakonMiner_Armour_Mirrored:"bulkheads",LakonMiner_Armour_Reactive:"bulkheads",Explorer_NX_Armour_Grade1:"bulkheads",Explorer_NX_Armour_Grade2:"bulkheads",Explorer_NX_Armour_Grade3:"bulkheads",Explorer_NX_Armour_Mirrored:"bulkheads",Explorer_NX_Armour_Reactive:"bulkheads",Explorer_NX_Armour_Grade1_Default:"bulkheads",SmallCombat01_NX_Armour_Grade1:"bulkheads",SmallCombat01_NX_Armour_Grade2:"bulkheads",SmallCombat01_NX_Armour_Grade3:"bulkheads",SmallCombat01_NX_Armour_Mirrored:"bulkheads",SmallCombat01_NX_Armour_Reactive:"bulkheads",MediumTransport01_Armour_Grade1:"bulkheads",MediumTransport01_Armour_Grade2:"bulkheads",MediumTransport01_Armour_Grade3:"bulkheads",MediumTransport01_Armour_Mirrored:"bulkheads",MediumTransport01_Armour_Reactive:"bulkheads",Int_LifeSupport_Size1_Class1:"lifeSupports",Int_LifeSupport_Size1_Class2:"lifeSupports",Int_LifeSupport_Size1_Class3:"lifeSupports",Int_LifeSupport_Size1_Class4:"lifeSupports",Int_LifeSupport_Size1_Class5:"lifeSupports",Int_LifeSupport_Size2_Class1:"lifeSupports",Int_LifeSupport_Size2_Class2:"lifeSupports",Int_LifeSupport_Size2_Class3:"lifeSupports",Int_LifeSupport_Size2_Class4:"lifeSupports",Int_LifeSupport_Size2_Class5:"lifeSupports",Int_LifeSupport_Size3_Class1:"lifeSupports",Int_LifeSupport_Size3_Class2:"lifeSupports",Int_LifeSupport_Size3_Class3:"lifeSupports",Int_LifeSupport_Size3_Class4:"lifeSupports",Int_LifeSupport_Size3_Class5:"lifeSupports",Int_LifeSupport_Size4_Class1:"lifeSupports",Int_LifeSupport_Size4_Class2:"lifeSupports",Int_LifeSupport_Size4_Class3:"lifeSupports",Int_LifeSupport_Size4_Class4:"lifeSupports",Int_LifeSupport_Size4_Class5:"lifeSupports",Int_LifeSupport_Size5_Class1:"lifeSupports",Int_LifeSupport_Size5_Class2:"lifeSupports",Int_LifeSupport_Size5_Class3:"lifeSupports",Int_LifeSupport_Size5_Class4:"lifeSupports",Int_LifeSupport_Size5_Class5:"lifeSupports",Int_LifeSupport_Size6_Class1:"lifeSupports",Int_LifeSupport_Size6_Class2:"lifeSupports",Int_LifeSupport_Size6_Class3:"lifeSupports",Int_LifeSupport_Size6_Class4:"lifeSupports",Int_LifeSupport_Size6_Class5:"lifeSupports",Int_LifeSupport_Size7_Class1:"lifeSupports",Int_LifeSupport_Size7_Class2:"lifeSupports",Int_LifeSupport_Size7_Class3:"lifeSupports",Int_LifeSupport_Size7_Class4:"lifeSupports",Int_LifeSupport_Size7_Class5:"lifeSupports",Int_LifeSupport_Size8_Class1:"lifeSupports",Int_LifeSupport_Size8_Class2:"lifeSupports",Int_LifeSupport_Size8_Class3:"lifeSupports",Int_LifeSupport_Size8_Class4:"lifeSupports",Int_LifeSupport_Size8_Class5:"lifeSupports",Int_LifeSupport_Size1_Class1_free:"lifeSupports",Int_Sensors_Size1_Class1:"sensors",Int_Sensors_Size1_Class2:"sensors",Int_Sensors_Size1_Class3:"sensors",Int_Sensors_Size1_Class4:"sensors",Int_Sensors_Size1_Class5:"sensors",Int_Sensors_Size2_Class1:"sensors",Int_Sensors_Size2_Class2:"sensors",Int_Sensors_Size2_Class3:"sensors",Int_Sensors_Size2_Class4:"sensors",Int_Sensors_Size2_Class5:"sensors",Int_Sensors_Size3_Class1:"sensors",Int_Sensors_Size3_Class2:"sensors",Int_Sensors_Size3_Class3:"sensors",Int_Sensors_Size3_Class4:"sensors",Int_Sensors_Size3_Class5:"sensors",Int_Sensors_Size4_Class1:"sensors",Int_Sensors_Size4_Class2:"sensors",Int_Sensors_Size4_Class3:"sensors",Int_Sensors_Size4_Class4:"sensors",Int_Sensors_Size4_Class5:"sensors",Int_Sensors_Size5_Class1:"sensors",Int_Sensors_Size5_Class2:"sensors",Int_Sensors_Size5_Class3:"sensors",Int_Sensors_Size5_Class4:"sensors",Int_Sensors_Size5_Class5:"sensors",Int_Sensors_Size6_Class1:"sensors",Int_Sensors_Size6_Class2:"sensors",Int_Sensors_Size6_Class3:"sensors",Int_Sensors_Size6_Class4:"sensors",Int_Sensors_Size6_Class5:"sensors",Int_Sensors_Size7_Class1:"sensors",Int_Sensors_Size7_Class2:"sensors",Int_Sensors_Size7_Class3:"sensors",Int_Sensors_Size7_Class4:"sensors",Int_Sensors_Size7_Class5:"sensors",Int_Sensors_Size8_Class1:"sensors",Int_Sensors_Size8_Class2:"sensors",Int_Sensors_Size8_Class3:"sensors",Int_Sensors_Size8_Class4:"sensors",Int_Sensors_Size8_Class5:"sensors",Int_Sensors_Size1_Class1_free:"sensors",Int_Repairer_Size1_Class1:"autoFieldMaintenanceUnits",Int_Repairer_Size2_Class1:"autoFieldMaintenanceUnits",Int_Repairer_Size3_Class1:"autoFieldMaintenanceUnits",Int_Repairer_Size4_Class1:"autoFieldMaintenanceUnits",Int_Repairer_Size5_Class1:"autoFieldMaintenanceUnits",Int_Repairer_Size6_Class1:"autoFieldMaintenanceUnits",Int_Repairer_Size7_Class1:"autoFieldMaintenanceUnits",Int_Repairer_Size8_Class1:"autoFieldMaintenanceUnits",Int_Repairer_Size1_Class2:"autoFieldMaintenanceUnits",Int_Repairer_Size2_Class2:"autoFieldMaintenanceUnits",Int_Repairer_Size3_Class2:"autoFieldMaintenanceUnits",Int_Repairer_Size4_Class2:"autoFieldMaintenanceUnits",Int_Repairer_Size5_Class2:"autoFieldMaintenanceUnits",Int_Repairer_Size6_Class2:"autoFieldMaintenanceUnits",Int_Repairer_Size7_Class2:"autoFieldMaintenanceUnits",Int_Repairer_Size8_Class2:"autoFieldMaintenanceUnits",Int_Repairer_Size1_Class3:"autoFieldMaintenanceUnits",Int_Repairer_Size2_Class3:"autoFieldMaintenanceUnits",Int_Repairer_Size3_Class3:"autoFieldMaintenanceUnits",Int_Repairer_Size4_Class3:"autoFieldMaintenanceUnits",Int_Repairer_Size5_Class3:"autoFieldMaintenanceUnits",Int_Repairer_Size6_Class3:"autoFieldMaintenanceUnits",Int_Repairer_Size7_Class3:"autoFieldMaintenanceUnits",Int_Repairer_Size8_Class3:"autoFieldMaintenanceUnits",Int_Repairer_Size1_Class4:"autoFieldMaintenanceUnits",Int_Repairer_Size2_Class4:"autoFieldMaintenanceUnits",Int_Repairer_Size3_Class4:"autoFieldMaintenanceUnits",Int_Repairer_Size4_Class4:"autoFieldMaintenanceUnits",Int_Repairer_Size5_Class4:"autoFieldMaintenanceUnits",Int_Repairer_Size6_Class4:"autoFieldMaintenanceUnits",Int_Repairer_Size7_Class4:"autoFieldMaintenanceUnits",Int_Repairer_Size8_Class4:"autoFieldMaintenanceUnits",Int_Repairer_Size1_Class5:"autoFieldMaintenanceUnits",Int_Repairer_Size2_Class5:"autoFieldMaintenanceUnits",Int_Repairer_Size3_Class5:"autoFieldMaintenanceUnits",Int_Repairer_Size4_Class5:"autoFieldMaintenanceUnits",Int_Repairer_Size5_Class5:"autoFieldMaintenanceUnits",Int_Repairer_Size6_Class5:"autoFieldMaintenanceUnits",Int_Repairer_Size7_Class5:"autoFieldMaintenanceUnits",Int_Repairer_Size8_Class5:"autoFieldMaintenanceUnits",Int_DroneControl_Collection_Size1_Class1:"collectionLimpets",Int_DroneControl_Collection_Size1_Class2:"collectionLimpets",Int_DroneControl_Collection_Size1_Class3:"collectionLimpets",Int_DroneControl_Collection_Size1_Class4:"collectionLimpets",Int_DroneControl_Collection_Size1_Class5:"collectionLimpets",Int_DroneControl_Collection_Size3_Class1:"collectionLimpets",Int_DroneControl_Collection_Size3_Class2:"collectionLimpets",Int_DroneControl_Collection_Size3_Class3:"collectionLimpets",Int_DroneControl_Collection_Size3_Class4:"collectionLimpets",Int_DroneControl_Collection_Size3_Class5:"collectionLimpets",Int_DroneControl_Collection_Size5_Class1:"collectionLimpets",Int_DroneControl_Collection_Size5_Class2:"collectionLimpets",Int_DroneControl_Collection_Size5_Class3:"collectionLimpets",Int_DroneControl_Collection_Size5_Class4:"collectionLimpets",Int_DroneControl_Collection_Size5_Class5:"collectionLimpets",Int_DroneControl_Collection_Size7_Class1:"collectionLimpets",Int_DroneControl_Collection_Size7_Class2:"collectionLimpets",Int_DroneControl_Collection_Size7_Class3:"collectionLimpets",Int_DroneControl_Collection_Size7_Class4:"collectionLimpets",Int_DroneControl_Collection_Size7_Class5:"collectionLimpets",Int_GuardianFSDBooster_Size1:"fsdBoosters",Int_GuardianFSDBooster_Size2:"fsdBoosters",Int_GuardianFSDBooster_Size3:"fsdBoosters",Int_GuardianFSDBooster_Size4:"fsdBoosters",Int_GuardianFSDBooster_Size5:"fsdBoosters",Int_FSDInterdictor_Size1_Class1:"fsdInterdictors",Int_FSDInterdictor_Size2_Class1:"fsdInterdictors",Int_FSDInterdictor_Size3_Class1:"fsdInterdictors",Int_FSDInterdictor_Size4_Class1:"fsdInterdictors",Int_FSDInterdictor_Size1_Class2:"fsdInterdictors",Int_FSDInterdictor_Size2_Class2:"fsdInterdictors",Int_FSDInterdictor_Size3_Class2:"fsdInterdictors",Int_FSDInterdictor_Size4_Class2:"fsdInterdictors",Int_FSDInterdictor_Size1_Class3:"fsdInterdictors",Int_FSDInterdictor_Size2_Class3:"fsdInterdictors",Int_FSDInterdictor_Size3_Class3:"fsdInterdictors",Int_FSDInterdictor_Size4_Class3:"fsdInterdictors",Int_FSDInterdictor_Size1_Class4:"fsdInterdictors",Int_FSDInterdictor_Size2_Class4:"fsdInterdictors",Int_FSDInterdictor_Size3_Class4:"fsdInterdictors",Int_FSDInterdictor_Size4_Class4:"fsdInterdictors",Int_FSDInterdictor_Size1_Class5:"fsdInterdictors",Int_FSDInterdictor_Size2_Class5:"fsdInterdictors",Int_FSDInterdictor_Size3_Class5:"fsdInterdictors",Int_FSDInterdictor_Size4_Class5:"fsdInterdictors",Int_FuelScoop_Size1_Class1:"fuelScoops",Int_FuelScoop_Size2_Class1:"fuelScoops",Int_FuelScoop_Size3_Class1:"fuelScoops",Int_FuelScoop_Size4_Class1:"fuelScoops",Int_FuelScoop_Size5_Class1:"fuelScoops",Int_FuelScoop_Size6_Class1:"fuelScoops",Int_FuelScoop_Size7_Class1:"fuelScoops",Int_FuelScoop_Size8_Class1:"fuelScoops",Int_FuelScoop_Size1_Class2:"fuelScoops",Int_FuelScoop_Size2_Class2:"fuelScoops",Int_FuelScoop_Size3_Class2:"fuelScoops",Int_FuelScoop_Size4_Class2:"fuelScoops",Int_FuelScoop_Size5_Class2:"fuelScoops",Int_FuelScoop_Size6_Class2:"fuelScoops",Int_FuelScoop_Size7_Class2:"fuelScoops",Int_FuelScoop_Size8_Class2:"fuelScoops",Int_FuelScoop_Size1_Class3:"fuelScoops",Int_FuelScoop_Size2_Class3:"fuelScoops",Int_FuelScoop_Size3_Class3:"fuelScoops",Int_FuelScoop_Size4_Class3:"fuelScoops",Int_FuelScoop_Size5_Class3:"fuelScoops",Int_FuelScoop_Size6_Class3:"fuelScoops",Int_FuelScoop_Size7_Class3:"fuelScoops",Int_FuelScoop_Size8_Class3:"fuelScoops",Int_FuelScoop_Size1_Class4:"fuelScoops",Int_FuelScoop_Size2_Class4:"fuelScoops",Int_FuelScoop_Size3_Class4:"fuelScoops",Int_FuelScoop_Size4_Class4:"fuelScoops",Int_FuelScoop_Size5_Class4:"fuelScoops",Int_FuelScoop_Size6_Class4:"fuelScoops",Int_FuelScoop_Size7_Class4:"fuelScoops",Int_FuelScoop_Size8_Class4:"fuelScoops",Int_FuelScoop_Size1_Class5:"fuelScoops",Int_FuelScoop_Size2_Class5:"fuelScoops",Int_FuelScoop_Size3_Class5:"fuelScoops",Int_FuelScoop_Size4_Class5:"fuelScoops",Int_FuelScoop_Size5_Class5:"fuelScoops",Int_FuelScoop_Size6_Class5:"fuelScoops",Int_FuelScoop_Size7_Class5:"fuelScoops",Int_FuelScoop_Size8_Class5:"fuelScoops",Int_DroneControl_FuelTransfer_Size1_Class1:"fuelTransferLimpets",Int_DroneControl_FuelTransfer_Size1_Class2:"fuelTransferLimpets",Int_DroneControl_FuelTransfer_Size1_Class3:"fuelTransferLimpets",Int_DroneControl_FuelTransfer_Size1_Class4:"fuelTransferLimpets",Int_DroneControl_FuelTransfer_Size1_Class5:"fuelTransferLimpets",Int_DroneControl_FuelTransfer_Size3_Class1:"fuelTransferLimpets",Int_DroneControl_FuelTransfer_Size3_Class2:"fuelTransferLimpets",Int_DroneControl_FuelTransfer_Size3_Class3:"fuelTransferLimpets",Int_DroneControl_FuelTransfer_Size3_Class4:"fuelTransferLimpets",Int_DroneControl_FuelTransfer_Size3_Class5:"fuelTransferLimpets",Int_DroneControl_FuelTransfer_Size5_Class1:"fuelTransferLimpets",Int_DroneControl_FuelTransfer_Size5_Class2:"fuelTransferLimpets",Int_DroneControl_FuelTransfer_Size5_Class3:"fuelTransferLimpets",Int_DroneControl_FuelTransfer_Size5_Class4:"fuelTransferLimpets",Int_DroneControl_FuelTransfer_Size5_Class5:"fuelTransferLimpets",Int_DroneControl_FuelTransfer_Size7_Class1:"fuelTransferLimpets",Int_DroneControl_FuelTransfer_Size7_Class2:"fuelTransferLimpets",Int_DroneControl_FuelTransfer_Size7_Class3:"fuelTransferLimpets",Int_DroneControl_FuelTransfer_Size7_Class4:"fuelTransferLimpets",Int_DroneControl_FuelTransfer_Size7_Class5:"fuelTransferLimpets",Int_DroneControl_ResourceSiphon:"hatchBreakerLimpets",Int_DroneControl_ResourceSiphon_Size1_Class1:"hatchBreakerLimpets",Int_DroneControl_ResourceSiphon_Size1_Class2:"hatchBreakerLimpets",Int_DroneControl_ResourceSiphon_Size1_Class3:"hatchBreakerLimpets",Int_DroneControl_ResourceSiphon_Size1_Class4:"hatchBreakerLimpets",Int_DroneControl_ResourceSiphon_Size1_Class5:"hatchBreakerLimpets",Int_DroneControl_ResourceSiphon_Size3_Class1:"hatchBreakerLimpets",Int_DroneControl_ResourceSiphon_Size3_Class2:"hatchBreakerLimpets",Int_DroneControl_ResourceSiphon_Size3_Class3:"hatchBreakerLimpets",Int_DroneControl_ResourceSiphon_Size3_Class4:"hatchBreakerLimpets",Int_DroneControl_ResourceSiphon_Size3_Class5:"hatchBreakerLimpets",Int_DroneControl_ResourceSiphon_Size5_Class1:"hatchBreakerLimpets",Int_DroneControl_ResourceSiphon_Size5_Class2:"hatchBreakerLimpets",Int_DroneControl_ResourceSiphon_Size5_Class3:"hatchBreakerLimpets",Int_DroneControl_ResourceSiphon_Size5_Class4:"hatchBreakerLimpets",Int_DroneControl_ResourceSiphon_Size5_Class5:"hatchBreakerLimpets",Int_DroneControl_ResourceSiphon_Size7_Class1:"hatchBreakerLimpets",Int_DroneControl_ResourceSiphon_Size7_Class2:"hatchBreakerLimpets",Int_DroneControl_ResourceSiphon_Size7_Class3:"hatchBreakerLimpets",Int_DroneControl_ResourceSiphon_Size7_Class4:"hatchBreakerLimpets",Int_DroneControl_ResourceSiphon_Size7_Class5:"hatchBreakerLimpets",Int_GuardianModuleReinforcement_Size1_Class1:"moduleReinforcements",Int_GuardianModuleReinforcement_Size1_Class2:"moduleReinforcements",Int_GuardianModuleReinforcement_Size2_Class1:"moduleReinforcements",Int_GuardianModuleReinforcement_Size2_Class2:"moduleReinforcements",Int_GuardianModuleReinforcement_Size3_Class1:"moduleReinforcements",Int_GuardianModuleReinforcement_Size3_Class2:"moduleReinforcements",Int_GuardianModuleReinforcement_Size4_Class1:"moduleReinforcements",Int_GuardianModuleReinforcement_Size4_Class2:"moduleReinforcements",Int_GuardianModuleReinforcement_Size5_Class1:"moduleReinforcements",Int_GuardianModuleReinforcement_Size5_Class2:"moduleReinforcements",Int_DroneControl_Prospector_Size1_Class1:"prospectingLimpets",Int_DroneControl_Prospector_Size1_Class2:"prospectingLimpets",Int_DroneControl_Prospector_Size1_Class3:"prospectingLimpets",Int_DroneControl_Prospector_Size1_Class4:"prospectingLimpets",Int_DroneControl_Prospector_Size1_Class5:"prospectingLimpets",Int_DroneControl_Prospector_Size3_Class1:"prospectingLimpets",Int_DroneControl_Prospector_Size3_Class2:"prospectingLimpets",Int_DroneControl_Prospector_Size3_Class3:"prospectingLimpets",Int_DroneControl_Prospector_Size3_Class4:"prospectingLimpets",Int_DroneControl_Prospector_Size3_Class5:"prospectingLimpets",Int_DroneControl_Prospector_Size5_Class1:"prospectingLimpets",Int_DroneControl_Prospector_Size5_Class2:"prospectingLimpets",Int_DroneControl_Prospector_Size5_Class3:"prospectingLimpets",Int_DroneControl_Prospector_Size5_Class4:"prospectingLimpets",Int_DroneControl_Prospector_Size5_Class5:"prospectingLimpets",Int_DroneControl_Prospector_Size7_Class1:"prospectingLimpets",Int_DroneControl_Prospector_Size7_Class2:"prospectingLimpets",Int_DroneControl_Prospector_Size7_Class3:"prospectingLimpets",Int_DroneControl_Prospector_Size7_Class4:"prospectingLimpets",Int_DroneControl_Prospector_Size7_Class5:"prospectingLimpets",Int_Refinery_Size1_Class1:"refineries",Int_Refinery_Size2_Class1:"refineries",Int_Refinery_Size3_Class1:"refineries",Int_Refinery_Size4_Class1:"refineries",Int_Refinery_Size1_Class2:"refineries",Int_Refinery_Size2_Class2:"refineries",Int_Refinery_Size3_Class2:"refineries",Int_Refinery_Size4_Class2:"refineries",Int_Refinery_Size1_Class3:"refineries",Int_Refinery_Size2_Class3:"refineries",Int_Refinery_Size3_Class3:"refineries",Int_Refinery_Size4_Class3:"refineries",Int_Refinery_Size1_Class4:"refineries",Int_Refinery_Size2_Class4:"refineries",Int_Refinery_Size3_Class4:"refineries",Int_Refinery_Size4_Class4:"refineries",Int_Refinery_Size1_Class5:"refineries",Int_Refinery_Size2_Class5:"refineries",Int_Refinery_Size3_Class5:"refineries",Int_Refinery_Size4_Class5:"refineries",Int_GuardianShieldReinforcement_Size1_Class1:"shieldReinforcements",Int_GuardianShieldReinforcement_Size1_Class2:"shieldReinforcements",Int_GuardianShieldReinforcement_Size2_Class1:"shieldReinforcements",Int_GuardianShieldReinforcement_Size2_Class2:"shieldReinforcements",Int_GuardianShieldReinforcement_Size3_Class1:"shieldReinforcements",Int_GuardianShieldReinforcement_Size3_Class2:"shieldReinforcements",Int_GuardianShieldReinforcement_Size4_Class1:"shieldReinforcements",Int_GuardianShieldReinforcement_Size4_Class2:"shieldReinforcements",Int_GuardianShieldReinforcement_Size5_Class1:"shieldReinforcements",Int_GuardianShieldReinforcement_Size5_Class2:"shieldReinforcements",Int_DetailedSurfaceScanner_Tiny:"surfaceScanners",Hpt_ChaffLauncher_Tiny:"chaffLaunchers",Hpt_ElectronicCountermeasure_Tiny:"ecms",Hpt_HeatSinkLauncher_Turret_Tiny:"heatSinkLaunchers",Hpt_CausticSinkLauncher_Turret_Tiny:"heatSinkLaunchers",Hpt_CrimeScanner_Size0_Class1:"killWarrantScanners",Hpt_CrimeScanner_Size0_Class2:"killWarrantScanners",Hpt_CrimeScanner_Size0_Class3:"killWarrantScanners",Hpt_CrimeScanner_Size0_Class4:"killWarrantScanners",Hpt_CrimeScanner_Size0_Class5:"killWarrantScanners",Hpt_CargoScanner_Size0_Class1:"manifestScanners",Hpt_CargoScanner_Size0_Class2:"manifestScanners",Hpt_CargoScanner_Size0_Class3:"manifestScanners",Hpt_CargoScanner_Size0_Class4:"manifestScanners",Hpt_CargoScanner_Size0_Class5:"manifestScanners",Hpt_PlasmaPointDefence_Turret_Tiny:"pointDefence",Hpt_CloudScanner_Size0_Class1:"wakeScanners",Hpt_CloudScanner_Size0_Class2:"wakeScanners",Hpt_CloudScanner_Size0_Class3:"wakeScanners",Hpt_CloudScanner_Size0_Class4:"wakeScanners",Hpt_CloudScanner_Size0_Class5:"wakeScanners",Hpt_Guardian_GaussCannon_Fixed_Medium:"guardianGauss",Hpt_Guardian_GaussCannon_Fixed_Small:"guardianGauss",Hpt_Guardian_PlasmaLauncher_Fixed_Medium:"guardianPlasma",Hpt_Guardian_PlasmaLauncher_Turret_Medium:"guardianPlasma",Hpt_Guardian_PlasmaLauncher_Fixed_Large:"guardianPlasma",Hpt_Guardian_PlasmaLauncher_Turret_Large:"guardianPlasma",Hpt_Guardian_PlasmaLauncher_Turret_Small:"guardianPlasma",Hpt_Guardian_PlasmaLauncher_Fixed_Small:"guardianPlasma",Hpt_Guardian_ShardCannon_Fixed_Medium:"guardianShard",Hpt_Guardian_ShardCannon_Turret_Medium:"guardianShard",Hpt_Guardian_ShardCannon_Fixed_Large:"guardianShard",Hpt_Guardian_ShardCannon_Turret_Large:"guardianShard",Hpt_Guardian_ShardCannon_Turret_Small:"guardianShard",Hpt_Guardian_ShardCannon_Fixed_Small:"guardianShard"},exclusions:{Hpt_MultiCannon_Fixed_Small:["special_phasing_sequence"],Hpt_MultiCannon_Fixed_Large:["special_phasing_sequence"],Hpt_MultiCannon_Fixed_Huge:["special_phasing_sequence"],Hpt_MultiCannon_Gimbal_Small:["special_phasing_sequence"],Hpt_MultiCannon_Gimbal_Medium:["special_phasing_sequence"],Hpt_MultiCannon_Gimbal_Large:["special_phasing_sequence"],Hpt_MultiCannon_Turret_Small:["special_phasing_sequence"],Hpt_MultiCannon_Turret_Medium:["special_phasing_sequence"],Hpt_MultiCannon_Turret_Large:["special_phasing_sequence"],Hpt_MultiCannon_Fixed_Small_Strong:["special_phasing_sequence"],Hpt_MultiCannon_Gimbal_Huge:["special_phasing_sequence"],Hpt_MultiCannon_Fixed_Medium_Advanced:["special_phasing_sequence"],Hpt_MultiCannon_Fixed_Small_Advanced:["special_phasing_sequence"],Hpt_BasicMissileRack_Fixed_Small:["special_fsd_interrupt","special_penetrator_munitions"],Hpt_BasicMissileRack_Fixed_Medium:["special_penetrator_munitions"],Hpt_BasicMissileRack_Fixed_Large:["special_penetrator_munitions"],Hpt_DumbfireMissileRack_Fixed_Small:["special_drag_munitions"],Hpt_DumbfireMissileRack_Fixed_Medium:["special_drag_munitions"],Hpt_DrunkMissileRack_Fixed_Medium:["special_fsd_interrupt","special_penetrator_munitions"],Hpt_DumbfireMissileRack_Fixed_Medium_Lasso:["special_drag_munitions"],Hpt_DumbfireMissileRack_Fixed_Large:["special_drag_munitions"],Hpt_DumbfireMissileRack_Fixed_Small_Advanced:["special_drag_munitions"],Hpt_DumbfireMissileRack_Fixed_Medium_Advanced:["special_drag_munitions"]}};var DATA=deepFreeze(engineering_options_default);var ENGINEERING_OPTION_GROUPS=DATA.groups;var moduleGroup=new Map(Object.entries(DATA.modules).map(([symbol,group])=>[symbol.toLowerCase(),group]));var moduleExclusions=new Map(Object.entries(DATA.exclusions).map(([symbol,effects])=>[symbol.toLowerCase(),new Set(effects.map(e=>e.toLowerCase()))]));function getEngineeringGroup(symbol){return moduleGroup.get(normalizeKey(symbol,"getEngineeringGroup: symbol"))??null}function getBlueprintsForModule(symbol){requireStringIfPresent(symbol,"getBlueprintsForModule: symbol");const group=getEngineeringGroup(symbol);return group===null?[]:ENGINEERING_OPTION_GROUPS[group].blueprints}function getExperimentalsForModule(symbol){const normalized=normalizeKey(symbol,"getExperimentalsForModule: symbol");const group=moduleGroup.get(normalized);if(group===void 0)return[];const all=ENGINEERING_OPTION_GROUPS[group].experimentals;const excluded=moduleExclusions.get(normalized);return excluded===void 0?all:all.filter(e=>!excluded.has(e.toLowerCase()))}function getExperimentalsForBlueprint(blueprintSymbol){const normalized=normalizeKey(blueprintSymbol,"getExperimentalsForBlueprint: blueprintSymbol");const out=/* @__PURE__ */new Set;for(const group of Object.values(ENGINEERING_OPTION_GROUPS)){if(!group.blueprints.some(b=>b.toLowerCase()===normalized))continue;for(const effect of group.experimentals)out.add(effect)}return[...out].sort()}export{ENGINEERING_OPTION_GROUPS,getBlueprintsForModule,getEngineeringGroup,getExperimentalsForBlueprint,getExperimentalsForModule};//# sourceMappingURL=chunk-EHFHRQEP.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ships/engineering-options.ts"],"names":["normalizeKey","requireStringIfPresent","deepFreeze","engineering_options_default","groups","blueprints","experimentals","modules","exclusions","DATA","ENGINEERING_OPTION_GROUPS","moduleGroup","Map","Object","entries","map","symbol","group","toLowerCase","moduleExclusions","effects","Set","e","getEngineeringGroup","get","getBlueprintsForModule","getExperimentalsForModule","normalized","all","excluded","filter","has","getExperimentalsForBlueprint","blueprintSymbol","out","values","some","b","effect","add","sort"],"mappings":"O,o7zDA8JA,IAAMS,KAA8BP,WAAWC,6BAcxC,IAAMO,0BAETD,KAAKL,OAET,IAAMO,YAAc,IAAIC,IACpBC,OAAOC,QAAQL,KAAKF,SAASQ,IAAI,EAAEC,OAAQC,SAAW,CAACD,OAAOE,cAAeD,SAEjF,IAAME,iBAAmB,IAAIP,IACzBC,OAAOC,QAAQL,KAAKD,YAAYO,IAAI,EAAEC,OAAQI,WAAa,CACvDJ,OAAOE,cACP,IAAIG,IAAID,QAAQL,IAAKO,GAAMA,EAAEJ,mBAiC9B,SAASK,oBAAoBP,QAChC,OAAOL,YAAYa,IAAIxB,aAAagB,OAAQ,iCAAmC,IACnF,CA4CO,SAASS,uBAAuBT,QACnCf,uBAAuBe,OAAQ,kCAC/B,MAAMC,MAAQM,oBAAoBP,QAClC,OAAOC,QAAU,KAAO,GAAKP,0BAA0BO,OAAQZ,UACnE,CAmCO,SAASqB,0BAA0BV,QACtC,MAAMW,WAAa3B,aAAagB,OAAQ,qCACxC,MAAMC,MAAQN,YAAYa,IAAIG,YAC9B,GAAIV,aAAU,EAAW,MAAO,GAChC,MAAMW,IAAMlB,0BAA0BO,OAAQX,cAC9C,MAAMuB,SAAWV,iBAAiBK,IAAIG,YACtC,OAAOE,gBAAa,EAAYD,IAAMA,IAAIE,OAAQR,IAAOO,SAASE,IAAIT,EAAEJ,eAC5E,CAuCO,SAASc,6BAA6BC,iBACzC,MAAMN,WAAa3B,aACfiC,gBACA,iDAEJ,MAAMC,mBAAA,IAAUb,IAChB,IAAA,MAAWJ,SAASJ,OAAOsB,OAAOzB,2BAA4B,CAC1D,IAAKO,MAAMZ,WAAW+B,KAAMC,GAAMA,EAAEnB,gBAAkBS,YAAa,SACnE,IAAA,MAAWW,UAAUrB,MAAMX,cAAe4B,IAAIK,IAAID,OACtD,CACA,MAAO,IAAIJ,KAAKM,MACpB,QAAA9B,0BAAAe,uBAAAF,oBAAAS,6BAAAN"}
1
+ {"version":3,"sources":["../src/ships/engineering-options.ts"],"names":["normalizeKey","requireStringIfPresent","deepFreeze","engineering_options_default","groups","blueprints","experimentals","modules","exclusions","DATA","ENGINEERING_OPTION_GROUPS","moduleGroup","Map","Object","entries","map","symbol","group","toLowerCase","moduleExclusions","effects","Set","e","getEngineeringGroup","get","getBlueprintsForModule","getExperimentalsForModule","normalized","all","excluded","filter","has","getExperimentalsForBlueprint","blueprintSymbol","out","values","some","b","effect","add","sort"],"mappings":"O,yszDA8JA,IAAMS,KAA8BP,WAAWC,6BAcxC,IAAMO,0BAETD,KAAKL,OAET,IAAMO,YAAc,IAAIC,IACpBC,OAAOC,QAAQL,KAAKF,SAASQ,IAAI,EAAEC,OAAQC,SAAW,CAACD,OAAOE,cAAeD,SAEjF,IAAME,iBAAmB,IAAIP,IACzBC,OAAOC,QAAQL,KAAKD,YAAYO,IAAI,EAAEC,OAAQI,WAAa,CACvDJ,OAAOE,cACP,IAAIG,IAAID,QAAQL,IAAKO,GAAMA,EAAEJ,mBAiC9B,SAASK,oBAAoBP,QAChC,OAAOL,YAAYa,IAAIxB,aAAagB,OAAQ,iCAAmC,IACnF,CA4CO,SAASS,uBAAuBT,QACnCf,uBAAuBe,OAAQ,kCAC/B,MAAMC,MAAQM,oBAAoBP,QAClC,OAAOC,QAAU,KAAO,GAAKP,0BAA0BO,OAAQZ,UACnE,CAmCO,SAASqB,0BAA0BV,QACtC,MAAMW,WAAa3B,aAAagB,OAAQ,qCACxC,MAAMC,MAAQN,YAAYa,IAAIG,YAC9B,GAAIV,aAAU,EAAW,MAAO,GAChC,MAAMW,IAAMlB,0BAA0BO,OAAQX,cAC9C,MAAMuB,SAAWV,iBAAiBK,IAAIG,YACtC,OAAOE,gBAAa,EAAYD,IAAMA,IAAIE,OAAQR,IAAOO,SAASE,IAAIT,EAAEJ,eAC5E,CAuCO,SAASc,6BAA6BC,iBACzC,MAAMN,WAAa3B,aACfiC,gBACA,iDAEJ,MAAMC,mBAAA,IAAUb,IAChB,IAAA,MAAWJ,SAASJ,OAAOsB,OAAOzB,2BAA4B,CAC1D,IAAKO,MAAMZ,WAAW+B,KAAMC,GAAMA,EAAEnB,gBAAkBS,YAAa,SACnE,IAAA,MAAWW,UAAUrB,MAAMX,cAAe4B,IAAIK,IAAID,OACtD,CACA,MAAO,IAAIJ,KAAKM,MACpB,QAAA9B,0BAAAe,uBAAAF,oBAAAS,6BAAAN"}