@elite-dangerous-almanac/core 0.1.5 → 0.1.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 (204) hide show
  1. package/PROVENANCE/i18n/SOURCES.md +107 -51
  2. package/PROVENANCE/ships/SOURCES.md +43 -2
  3. package/README.md +11 -5
  4. package/THIRD_PARTY_NOTICES.md +3 -0
  5. package/assets/ships/Adder/gunsight.svg +17 -0
  6. package/assets/ships/Anaconda/gunsight.svg +32 -0
  7. package/assets/ships/Asp/gunsight.svg +26 -0
  8. package/assets/ships/Asp_Scout/gunsight.svg +20 -0
  9. package/assets/ships/BelugaLiner/gunsight.svg +23 -0
  10. package/assets/ships/CobraMkIII/gunsight.svg +20 -0
  11. package/assets/ships/CobraMkIV/gunsight.svg +23 -0
  12. package/assets/ships/CobraMkV/gunsight.svg +23 -0
  13. package/assets/ships/Corsair/gunsight.svg +26 -0
  14. package/assets/ships/Cutter/gunsight.svg +29 -0
  15. package/assets/ships/DiamondBack/gunsight.svg +20 -0
  16. package/assets/ships/DiamondBackXL/gunsight.svg +17 -0
  17. package/assets/ships/Dolphin/gunsight.svg +14 -0
  18. package/assets/ships/Eagle/gunsight.svg +17 -0
  19. package/assets/ships/Empire_Courier/gunsight.svg +17 -0
  20. package/assets/ships/Empire_Eagle/gunsight.svg +17 -0
  21. package/assets/ships/Empire_Trader/gunsight.svg +20 -0
  22. package/assets/ships/Explorer_NX/gunsight.svg +29 -0
  23. package/assets/ships/Federation_Corvette/gunsight.svg +29 -0
  24. package/assets/ships/Federation_Corvette/schematic-bottom.svg +5 -5
  25. package/assets/ships/Federation_Corvette/schematic-top.svg +14 -14
  26. package/assets/ships/Federation_Dropship/gunsight.svg +23 -0
  27. package/assets/ships/Federation_Dropship_MkII/gunsight.svg +20 -0
  28. package/assets/ships/Federation_Gunship/gunsight.svg +29 -0
  29. package/assets/ships/FerDeLance/gunsight.svg +23 -0
  30. package/assets/ships/Hauler/gunsight.svg +11 -0
  31. package/assets/ships/Independant_Trader/gunsight.svg +20 -0
  32. package/assets/ships/Krait_Light/gunsight.svg +20 -0
  33. package/assets/ships/Krait_MkII/gunsight.svg +23 -0
  34. package/assets/ships/LakonMiner/gunsight.svg +32 -0
  35. package/assets/ships/Mamba/gunsight.svg +23 -0
  36. package/assets/ships/Mandalay/gunsight.svg +26 -0
  37. package/assets/ships/MediumTransport01/gunsight.svg +23 -0
  38. package/assets/ships/Orca/gunsight.svg +17 -0
  39. package/assets/ships/PantherMkII/gunsight.svg +38 -0
  40. package/assets/ships/Python/gunsight.svg +23 -0
  41. package/assets/ships/Python_NX/gunsight.svg +26 -0
  42. package/assets/ships/SideWinder/gunsight.svg +14 -0
  43. package/assets/ships/SmallCombat01_NX/gunsight.svg +23 -0
  44. package/assets/ships/Type6/gunsight.svg +14 -0
  45. package/assets/ships/Type7/gunsight.svg +20 -0
  46. package/assets/ships/Type8/gunsight.svg +26 -0
  47. package/assets/ships/Type9/gunsight.svg +23 -0
  48. package/assets/ships/Type9_Military/gunsight.svg +35 -0
  49. package/assets/ships/TypeX/gunsight.svg +26 -0
  50. package/assets/ships/TypeX_2/gunsight.svg +26 -0
  51. package/assets/ships/TypeX_3/gunsight.svg +29 -0
  52. package/assets/ships/Viper/gunsight.svg +20 -0
  53. package/assets/ships/Viper_MkIV/gunsight.svg +20 -0
  54. package/assets/ships/Vulture/gunsight.svg +14 -0
  55. package/dist/chunk-2VPVZELZ.js +1 -0
  56. package/dist/{chunk-MTAGULIO.js.map → chunk-2VPVZELZ.js.map} +1 -1
  57. package/dist/{chunk-6RLMBSXE.js → chunk-4S6WB7QR.js} +1 -1
  58. package/dist/chunk-4TFAZX73.js +1 -0
  59. package/dist/{chunk-EJMNNQIS.js.map → chunk-4TFAZX73.js.map} +1 -1
  60. package/dist/chunk-4ZGUSHTP.js +1 -0
  61. package/dist/{chunk-CTJQPQRA.js.map → chunk-4ZGUSHTP.js.map} +1 -1
  62. package/dist/{chunk-XT6KKGSE.js → chunk-6G6TYW2D.js} +1 -1
  63. package/dist/chunk-AFS6HN3D.js +1 -0
  64. package/dist/chunk-AFS6HN3D.js.map +1 -0
  65. package/dist/{chunk-XN6Q7LWU.js → chunk-CJWFY6OX.js} +1 -1
  66. package/dist/{chunk-UBYO7VZR.js → chunk-DBGXZF7O.js} +1 -1
  67. package/dist/{chunk-H3HMVGEY.js → chunk-EKQCVCMK.js} +1 -1
  68. package/dist/chunk-ELT3FEA4.js +1 -0
  69. package/dist/{chunk-3IMWUYXJ.js.map → chunk-ELT3FEA4.js.map} +1 -1
  70. package/dist/chunk-EXVCRIDP.js +1 -0
  71. package/dist/chunk-EXVCRIDP.js.map +1 -0
  72. package/dist/{chunk-EKWLAHRG.js → chunk-GRSNX36B.js} +1 -1
  73. package/dist/{chunk-EKWLAHRG.js.map → chunk-GRSNX36B.js.map} +1 -1
  74. package/dist/chunk-GVNTKCVF.js +1 -0
  75. package/dist/chunk-GVNTKCVF.js.map +1 -0
  76. package/dist/{chunk-FEER4ERG.js → chunk-IOJXLDJN.js} +1 -1
  77. package/dist/chunk-J42ZXLBL.js +1 -0
  78. package/dist/{chunk-GKDEI2SQ.js.map → chunk-J42ZXLBL.js.map} +1 -1
  79. package/dist/{chunk-PHPLZEFS.js → chunk-JPBMRJFC.js} +1 -1
  80. package/dist/{chunk-PHPLZEFS.js.map → chunk-JPBMRJFC.js.map} +1 -1
  81. package/dist/chunk-KJFUNIIY.js +1 -0
  82. package/dist/{chunk-TFPIPIMU.js.map → chunk-KJFUNIIY.js.map} +1 -1
  83. package/dist/{chunk-QMFBL5XO.js → chunk-LLHGSBPI.js} +1 -1
  84. package/dist/{chunk-QMFBL5XO.js.map → chunk-LLHGSBPI.js.map} +1 -1
  85. package/dist/{chunk-FGNJ7EVM.js → chunk-LZYHBFJC.js} +1 -1
  86. package/dist/{chunk-FGNJ7EVM.js.map → chunk-LZYHBFJC.js.map} +1 -1
  87. package/dist/chunk-M6G3UDTX.js +1 -0
  88. package/dist/chunk-M6G3UDTX.js.map +1 -0
  89. package/dist/{chunk-DLLBARN5.js → chunk-MKGJPVPS.js} +1 -1
  90. package/dist/{chunk-QI22FKBG.js → chunk-Q3QCLNVG.js} +1 -1
  91. package/dist/{chunk-QI22FKBG.js.map → chunk-Q3QCLNVG.js.map} +1 -1
  92. package/dist/chunk-RVIYOHYF.js +1 -0
  93. package/dist/chunk-RVIYOHYF.js.map +1 -0
  94. package/dist/chunk-SD6GNFDX.js +1 -0
  95. package/dist/chunk-SD6GNFDX.js.map +1 -0
  96. package/dist/chunk-SNADUQSJ.js +1 -0
  97. package/dist/chunk-SNADUQSJ.js.map +1 -0
  98. package/dist/chunk-TEOJCBSG.js +1 -0
  99. package/dist/chunk-TEOJCBSG.js.map +1 -0
  100. package/dist/chunk-TW7LUBHD.js +1 -0
  101. package/dist/{chunk-HRVIHQ4A.js.map → chunk-TW7LUBHD.js.map} +1 -1
  102. package/dist/{chunk-O72KI7RP.js → chunk-UHSNB5SV.js} +1 -1
  103. package/dist/chunk-V4C6FIE2.js +1 -0
  104. package/dist/{chunk-TLA6LHLN.js.map → chunk-V4C6FIE2.js.map} +1 -1
  105. package/dist/chunk-VDVFJXX5.js +1 -0
  106. package/dist/{chunk-PNZCLQDJ.js.map → chunk-VDVFJXX5.js.map} +1 -1
  107. package/dist/chunk-Z6XMXMVI.js +1 -0
  108. package/dist/{chunk-2J2UV4ZX.js.map → chunk-Z6XMXMVI.js.map} +1 -1
  109. package/dist/{chunk-VB3XZGIB.js → chunk-ZRG35JSH.js} +1 -1
  110. package/dist/{chunk-77QR33ON.js → chunk-ZZT2PQZ5.js} +1 -1
  111. package/dist/i18n/blueprints.d.ts +2 -1
  112. package/dist/i18n/blueprints.js +1 -1
  113. package/dist/i18n/diagnostics.d.ts +2 -0
  114. package/dist/i18n/diagnostics.js +1 -1
  115. package/dist/i18n/engineering-groups.d.ts +2 -2
  116. package/dist/i18n/engineering-groups.js +1 -1
  117. package/dist/i18n/experimental-effect-descriptions.js +1 -1
  118. package/dist/i18n/experimental-effects.js +1 -1
  119. package/dist/i18n/index.d.ts +32 -1
  120. package/dist/i18n/index.js +1 -1
  121. package/dist/i18n/materials.d.ts +2 -3
  122. package/dist/i18n/materials.js +1 -1
  123. package/dist/i18n/micro-resources.d.ts +2 -3
  124. package/dist/i18n/micro-resources.js +1 -1
  125. package/dist/i18n/module-families.d.ts +32 -0
  126. package/dist/i18n/module-families.js +1 -0
  127. package/dist/i18n/module-families.js.map +1 -0
  128. package/dist/i18n/modules.d.ts +3 -4
  129. package/dist/i18n/modules.js +1 -1
  130. package/dist/i18n/pre-engineered.js +1 -1
  131. package/dist/i18n/ships.js +1 -1
  132. package/dist/i18n/slots.js +1 -1
  133. package/dist/materials/index.js +1 -1
  134. package/dist/materials/materials-all.js +1 -1
  135. package/dist/materials/materials.js +1 -1
  136. package/dist/materials/micro-resources-all.js +1 -1
  137. package/dist/materials/micro-resources.js +1 -1
  138. package/dist/ships/blueprint-costs.d.ts +3 -1
  139. package/dist/ships/blueprint-costs.js +1 -1
  140. package/dist/ships/blueprint-costs.js.map +1 -1
  141. package/dist/ships/blueprints.d.ts +4 -1
  142. package/dist/ships/blueprints.js +1 -1
  143. package/dist/ships/engineering.d.ts +1 -0
  144. package/dist/ships/experimental-effect-costs.d.ts +3 -2
  145. package/dist/ships/experimental-effect-costs.js +1 -1
  146. package/dist/ships/experimental-effect-costs.js.map +1 -1
  147. package/dist/ships/experimental-effects.d.ts +3 -1
  148. package/dist/ships/experimental-effects.js +1 -1
  149. package/dist/ships/gunsights.js +1 -1
  150. package/dist/ships/index.d.ts +7 -5
  151. package/dist/ships/index.js +1 -1
  152. package/dist/ships/loadout-validation.d.ts +1 -0
  153. package/dist/ships/module-capabilities.d.ts +1 -0
  154. package/dist/ships/module-families.d.ts +49 -0
  155. package/dist/ships/module-families.js +1 -0
  156. package/dist/ships/module-families.js.map +1 -0
  157. package/dist/ships/module-limits.d.ts +1 -0
  158. package/dist/ships/modules-all.d.ts +1 -0
  159. package/dist/ships/modules-all.js +1 -1
  160. package/dist/ships/modules-core.d.ts +1 -0
  161. package/dist/ships/modules-core.js +1 -1
  162. package/dist/ships/modules-hardpoint.d.ts +2 -0
  163. package/dist/ships/modules-hardpoint.js +1 -1
  164. package/dist/ships/modules-internal.d.ts +2 -0
  165. package/dist/ships/modules-internal.js +1 -1
  166. package/dist/ships/modules-utility.d.ts +2 -0
  167. package/dist/ships/modules-utility.js +1 -1
  168. package/dist/ships/modules.d.ts +23 -5
  169. package/dist/ships/modules.js +1 -1
  170. package/dist/ships/pre-engineered-stats.d.ts +1 -0
  171. package/dist/ships/pre-engineered-stats.js +1 -1
  172. package/dist/ships/pre-engineered.js +1 -1
  173. package/dist/ships/ship-loadout.d.ts +73 -32
  174. package/dist/ships/ship-loadout.js +1 -1
  175. package/dist/ships/weapons.d.ts +1 -0
  176. package/package.json +9 -1
  177. package/dist/chunk-2J2UV4ZX.js +0 -1
  178. package/dist/chunk-3IMWUYXJ.js +0 -1
  179. package/dist/chunk-CTJQPQRA.js +0 -1
  180. package/dist/chunk-DAQ3PJ4R.js +0 -1
  181. package/dist/chunk-DAQ3PJ4R.js.map +0 -1
  182. package/dist/chunk-E45EDCYH.js +0 -1
  183. package/dist/chunk-E45EDCYH.js.map +0 -1
  184. package/dist/chunk-EJMNNQIS.js +0 -1
  185. package/dist/chunk-GKDEI2SQ.js +0 -1
  186. package/dist/chunk-HRVIHQ4A.js +0 -1
  187. package/dist/chunk-M5IBENCW.js +0 -1
  188. package/dist/chunk-M5IBENCW.js.map +0 -1
  189. package/dist/chunk-MTAGULIO.js +0 -1
  190. package/dist/chunk-PNZCLQDJ.js +0 -1
  191. package/dist/chunk-TFPIPIMU.js +0 -1
  192. package/dist/chunk-TLA6LHLN.js +0 -1
  193. package/dist/chunk-XULHGGG4.js +0 -1
  194. package/dist/chunk-XULHGGG4.js.map +0 -1
  195. /package/dist/{chunk-6RLMBSXE.js.map → chunk-4S6WB7QR.js.map} +0 -0
  196. /package/dist/{chunk-XT6KKGSE.js.map → chunk-6G6TYW2D.js.map} +0 -0
  197. /package/dist/{chunk-XN6Q7LWU.js.map → chunk-CJWFY6OX.js.map} +0 -0
  198. /package/dist/{chunk-UBYO7VZR.js.map → chunk-DBGXZF7O.js.map} +0 -0
  199. /package/dist/{chunk-H3HMVGEY.js.map → chunk-EKQCVCMK.js.map} +0 -0
  200. /package/dist/{chunk-FEER4ERG.js.map → chunk-IOJXLDJN.js.map} +0 -0
  201. /package/dist/{chunk-DLLBARN5.js.map → chunk-MKGJPVPS.js.map} +0 -0
  202. /package/dist/{chunk-O72KI7RP.js.map → chunk-UHSNB5SV.js.map} +0 -0
  203. /package/dist/{chunk-VB3XZGIB.js.map → chunk-ZRG35JSH.js.map} +0 -0
  204. /package/dist/{chunk-77QR33ON.js.map → chunk-ZZT2PQZ5.js.map} +0 -0
@@ -1,5 +1,6 @@
1
1
  import { OutfittingModule } from './modules.js';
2
2
  import './engineering-options.js';
3
+ import './module-families.js';
3
4
  import './slots.js';
4
5
 
5
6
  /**
@@ -33,6 +34,7 @@ import './slots.js';
33
34
  * import { INTERNAL_MODULES } from '@elite-dangerous-almanac/core/ships/modules-internal';
34
35
  *
35
36
  * INTERNAL_MODULES.length; // -> 484
37
+ * INTERNAL_MODULES.filter((m) => m.familyId === 'cargoRacks').length; // -> 16
36
38
  * ```
37
39
  */
38
40
  declare const INTERNAL_MODULES: readonly OutfittingModule[];
@@ -1 +1 @@
1
- export{INTERNAL_MODULES}from"../chunk-CTJQPQRA.js"; //# sourceMappingURL=modules-internal.js.map
1
+ export{INTERNAL_MODULES}from"../chunk-4ZGUSHTP.js"; //# sourceMappingURL=modules-internal.js.map
@@ -1,5 +1,6 @@
1
1
  import { OutfittingModule } from './modules.js';
2
2
  import './engineering-options.js';
3
+ import './module-families.js';
3
4
  import './slots.js';
4
5
 
5
6
  /**
@@ -33,6 +34,7 @@ import './slots.js';
33
34
  * import { UTILITY_MODULES } from '@elite-dangerous-almanac/core/ships/modules-utility';
34
35
  *
35
36
  * UTILITY_MODULES.length; // -> 35
37
+ * UTILITY_MODULES.filter((m) => m.familyId === 'shieldBoosters').length; // -> 5
36
38
  * ```
37
39
  */
38
40
  declare const UTILITY_MODULES: readonly OutfittingModule[];
@@ -1 +1 @@
1
- export{UTILITY_MODULES}from"../chunk-3IMWUYXJ.js"; //# sourceMappingURL=modules-utility.js.map
1
+ export{UTILITY_MODULES}from"../chunk-ELT3FEA4.js"; //# sourceMappingURL=modules-utility.js.map
@@ -1,4 +1,5 @@
1
1
  import { EngineeringGroupId } from './engineering-options.js';
2
+ import { OutfittingFamilyId } from './module-families.js';
2
3
  import { ModuleSlot, SlotRestriction } from './slots.js';
3
4
 
4
5
  /**
@@ -43,7 +44,7 @@ import { ModuleSlot, SlotRestriction } from './slots.js';
43
44
  *
44
45
  * @remarks
45
46
  * **This is the one default that costs real bundle weight.** A lookup imported from
46
- * here pulls all four catalogues — 311.9 KiB minified (30.5 KiB gzipped) — since
47
+ * here pulls all four catalogues — 336.5 KiB minified (33.3 KiB gzipped) — since
47
48
  * that is what it falls back to, and passing an explicit catalogue does not undo it.
48
49
  * A build that must carry only one category should import that catalogue and search
49
50
  * it directly:
@@ -200,10 +201,10 @@ interface ProjectileRangeBoundaries {
200
201
  * Identity, classification, fit constraints, and price for one outfitting module.
201
202
  *
202
203
  * @remarks
203
- * The core identity fields (`symbol`, `name`, `category`, `class`, and `rating`) are
204
- * always present. Optional fields describe fit restrictions, purchase entitlement, and
205
- * price. Performance data belongs to {@link OutfittingModuleStats}; the complete flat
206
- * catalogue record is {@link OutfittingModule}.
204
+ * The core identity fields (`symbol`, `name`, `category`, `familyId`, `class`, and `rating`)
205
+ * are always present. Optional fields describe fit restrictions, purchase entitlement,
206
+ * and price. Performance data belongs to {@link OutfittingModuleStats}; the complete
207
+ * flat catalogue record is {@link OutfittingModule}.
207
208
  *
208
209
  * @example
209
210
  * ```ts
@@ -213,6 +214,7 @@ interface ProjectileRangeBoundaries {
213
214
  * symbol: 'CustomBeamLaser',
214
215
  * category: 'hardpoint',
215
216
  * engineeringGroup: 'beamLasers',
217
+ * familyId: 'beamLasers',
216
218
  * name: 'Custom Beam Laser',
217
219
  * class: 2,
218
220
  * rating: 'D',
@@ -239,6 +241,22 @@ interface OutfittingModuleIdentity {
239
241
  * engineering menu. See {@link EngineeringGroupId}.
240
242
  */
241
243
  readonly engineeringGroup: EngineeringGroupId | null;
244
+ /**
245
+ * Stable outfitting family used to group an outfitting list, such as
246
+ * `'cargoRacks'`, `'shieldGenerators'` or `'beamLasers'`. See
247
+ * {@link OutfittingFamilyId}.
248
+ *
249
+ * @remarks
250
+ * Every record carries one, core modules included, so every choice
251
+ * {@link ShipLoadout.modulesForSlot} returns has a family. Closely related variants
252
+ * share it: Bi-Weave and Prismatic generators are `'shieldGenerators'`, Mk II and
253
+ * corrosion-resistant racks are `'cargoRacks'`, and a Powerplay or pre-engineered
254
+ * variant stays with its base weapon's family.
255
+ *
256
+ * {@link OUTFITTING_FAMILIES} gives the canonical English display name;
257
+ * `getOutfittingFamilyName` in `i18n/module-families` gives a localized one.
258
+ */
259
+ readonly familyId: OutfittingFamilyId;
242
260
  /**
243
261
  * The one fixed mount this module fills, when it fills one: `'armour'` or one of
244
262
  * the seven {@link CoreSlotType} core functions.
@@ -1 +1 @@
1
- export{getBulkheadsForShip,getModuleBySymbol,getModulesByName}from"../chunk-QMFBL5XO.js"; //# sourceMappingURL=modules.js.map
1
+ export{getBulkheadsForShip,getModuleBySymbol,getModulesByName}from"../chunk-LLHGSBPI.js"; //# sourceMappingURL=modules.js.map
@@ -2,6 +2,7 @@ import { OutfittingModule } from './modules.js';
2
2
  import { PreEngineeredVariant } from './pre-engineered.js';
3
3
  import { EngineeringModifier, LoadoutModule } from './slef.js';
4
4
  import './engineering-options.js';
5
+ import './module-families.js';
5
6
  import './slots.js';
6
7
 
7
8
  /**
@@ -1 +1 @@
1
- export{getPreEngineeredJournalModifiers,getPreEngineeredModifiers,getPreEngineeredStats,identifyPreEngineeredVariant,unresolvedModifiers}from"../chunk-77QR33ON.js"; //# sourceMappingURL=pre-engineered-stats.js.map
1
+ export{getPreEngineeredJournalModifiers,getPreEngineeredModifiers,getPreEngineeredStats,identifyPreEngineeredVariant,unresolvedModifiers}from"../chunk-ZZT2PQZ5.js"; //# sourceMappingURL=pre-engineered-stats.js.map
@@ -1 +1 @@
1
- export{PRE_ENGINEERED_MODULES,getPreEngineeredVariants,isPreEngineered}from"../chunk-MTAGULIO.js"; //# sourceMappingURL=pre-engineered.js.map
1
+ export{PRE_ENGINEERED_MODULES,getPreEngineeredVariants,isPreEngineered}from"../chunk-2VPVZELZ.js"; //# sourceMappingURL=pre-engineered.js.map
@@ -1,6 +1,7 @@
1
1
  import { ModuleEngineering, LoadoutModule, LoadoutEvent, SlefHeader, Slef } from './slef.js';
2
2
  import { TotalRangeDetails, FrameShiftDriveParams } from './jump-range.js';
3
3
  import { BuildSlot, SlotKind } from './slots.js';
4
+ import { EngineeringMaterial } from './engineering.js';
4
5
  import { OutfittingModule, ProjectileRangeBoundaries } from './modules.js';
5
6
  import { PowerBudget } from './power.js';
6
7
  import { HeatMetrics } from './heat.js';
@@ -17,6 +18,7 @@ import { SourcePurchaseRecord } from './source-purchase.js';
17
18
  import { FuelCapacity, CalculationResult } from './loadout-calculations.js';
18
19
  import { ModuleFitConstraint, LoadoutIssueParams, LoadoutValidation } from './loadout-validation.js';
19
20
  import './engineering-options.js';
21
+ import './module-families.js';
20
22
  import './resistances.js';
21
23
 
22
24
  /**
@@ -442,16 +444,27 @@ interface DistributorOptions {
442
444
  readonly weaponsPips?: number;
443
445
  }
444
446
  /**
445
- * Retail catalogue credits for an assembled build.
446
- *
447
- * @see {@link ShipLoadout.mercCoinCost} for Mercenary purchase prices.
447
+ * Retail catalogue credits for an assembled build, as {@link ShipLoadout.buildCost} prices it.
448
448
  */
449
- interface RetailCredits {
449
+ interface BuildCredits {
450
+ /**
451
+ * Priced hull and modules together, in credits.
452
+ *
453
+ * A Mercenary article is bought with Merc Coin and has no credit price at all, but it
454
+ * is counted here at the catalogue list price of the stock module it is built on, and
455
+ * again in {@link BuildCost.mercCoins} at what it actually cost. Subtract the stock
456
+ * module's price to quote credits a shop would really ask.
457
+ */
458
+ readonly total: number;
450
459
  /** Bare hull list price in credits. */
451
460
  readonly hull: number;
452
461
  /** Sum of every priced fitted module, in credits. A lower bound when `unpriced` is non-empty. */
453
462
  readonly modules: number;
454
- /** Five percent of the priced hull and modules, truncated to credits. */
463
+ /**
464
+ * Five percent of `total`, truncated to credits: what insurance bills to rebuild the
465
+ * fit at catalogue prices. For what a capture said its own rebuy was, read
466
+ * {@link ShipLoadout.rebuy}.
467
+ */
455
468
  readonly rebuy: number;
456
469
  /** Fitted modules that could not be priced from the catalogue. */
457
470
  readonly unpriced: readonly {
@@ -459,6 +472,34 @@ interface RetailCredits {
459
472
  readonly symbol: string;
460
473
  }[];
461
474
  }
475
+ /**
476
+ * What an assembled build costs to own, in all three currencies the game charges for it.
477
+ *
478
+ * Every figure prices the **current fit** from the catalogues rather than reporting what a
479
+ * capture said was paid; for the latter read {@link ShipLoadout.sourcePurchase}.
480
+ */
481
+ interface BuildCost {
482
+ /** Shop credits for the hull and its fitted modules. */
483
+ readonly credits: BuildCredits;
484
+ /**
485
+ * Merc Coin billed by the build: every Mercenary article's shop price plus every
486
+ * blueprint's currency cost, including ordinary engineering-menu recipes that charge it.
487
+ * A Mercenary article's blueprint is charged only above the grade it was sold at.
488
+ */
489
+ readonly mercCoins: number;
490
+ /**
491
+ * What the build's blueprints and experimental effects consume, one entry per distinct
492
+ * material, counts summed across modules.
493
+ *
494
+ * Pre-engineered articles arrive engineered, so only what a player still has to roll on
495
+ * top of one is charged. A fixed reward carries no craft recipe at all and contributes
496
+ * nothing, and so does a modification whose recipe the catalogues do not price — a
497
+ * capture may name a blueprint or effect no registry lists, and an unpriceable
498
+ * modification is silently absent rather than reported the way
499
+ * {@link BuildCredits.unpriced} reports an unpriceable module.
500
+ */
501
+ readonly materials: readonly EngineeringMaterial[];
502
+ }
462
503
  /** One fitted weapon and what it does, as {@link ShipLoadout.weaponMetrics} reports it. */
463
504
  interface FittedWeaponMetrics {
464
505
  /** The hardpoint's slot key, e.g. `"LargeHardpoint1"`. */
@@ -762,13 +803,14 @@ declare class ShipLoadout {
762
803
  * unknown — including after an edit or import normalization discarded an import's
763
804
  * figure, since no catalogue records what a replaced module was bought for. Unlike
764
805
  * mass and capacity it is not recomputed from what remains; {@link sourcePurchase}
765
- * keeps the captured figure and {@link retailCredits} prices the current fit.
806
+ * keeps the captured figure and {@link buildCost} prices the current fit.
766
807
  */
767
808
  get modulesValue(): number | null;
768
809
  /**
769
810
  * Insurance rebuy cost in credits represented by the build, or `null` if
770
811
  * unknown. Discarded by an edit or by import normalization for the same reason as
771
- * {@link modulesValue}, and likewise kept by {@link sourcePurchase}.
812
+ * {@link modulesValue}, and likewise kept by {@link sourcePurchase};
813
+ * {@link buildCost} rebuys the current fit at catalogue prices instead.
772
814
  */
773
815
  get rebuy(): number | null;
774
816
  /**
@@ -1572,34 +1614,33 @@ declare class ShipLoadout {
1572
1614
  */
1573
1615
  cellBanks(): CellBankSummary;
1574
1616
  /**
1575
- * Price this build from current catalogue list prices without creating a journal event.
1617
+ * Price the whole build from the catalogues: shop credits, Merc Coin and the
1618
+ * engineering materials its modifications consume.
1619
+ *
1620
+ * No modification is charged twice. A Mercenary article arrives at the grade it was sold at,
1621
+ * so only the climb above that grade bills materials and further Merc Coin, and an
1622
+ * experimental effect the article came with is free while one added on top is not. A
1623
+ * fixed reward article — festive, Guardian, community-goal — identifies a recipe it
1624
+ * was never rolled from, so it contributes no materials at all.
1576
1625
  *
1577
- * @returns Hull, module and five-percent rebuy credits. `modules` and `rebuy` remain
1578
- * lower bounds when {@link RetailCredits.unpriced} is non-empty; built-in hull fittings are free.
1626
+ * @returns A frozen {@link BuildCost}. `credits.modules`, `credits.total` and
1627
+ * `credits.rebuy` are lower bounds while {@link BuildCredits.unpriced} is non-empty;
1628
+ * built-in hull fittings are free rather than unpriced.
1629
+ * @remarks
1630
+ * This is the one place `ShipLoadout` reads the material and Merc Coin cost
1631
+ * catalogues, which is why the facade carries them; import
1632
+ * {@link ships/blueprint-costs!getBlueprintCost | getBlueprintCost} and
1633
+ * {@link ships/experimental-effect-costs!getExperimentalEffectCost | getExperimentalEffectCost}
1634
+ * directly to price one recipe without a build.
1579
1635
  * @example
1580
1636
  * ```ts
1581
1637
  * import { ShipLoadout } from '@elite-dangerous-almanac/core/ships/ship-loadout';
1582
1638
  *
1583
- * ShipLoadout.default('Anaconda').retailCredits().hull; // -> 142456440
1639
+ * const build = ShipLoadout.default('Anaconda');
1640
+ * build.buildCost().credits.hull; // -> 142456440
1641
+ * build.applyBlueprint('FrameShiftDrive', 'FSD_LongRange', { grade: 5 });
1642
+ * build.buildCost().materials.find((material) => material.symbol === 'Arsenic')?.count; // -> 5
1584
1643
  * ```
1585
- * @see {@link mercCoinCost} for Mercenary purchase prices.
1586
- */
1587
- retailCredits(): RetailCredits;
1588
- /**
1589
- * Total the Merc Coin prices of the Mercenary articles fitted to this build.
1590
- *
1591
- * @returns The total in Merc Coin, or `0` when no fitted article is a Mercenary
1592
- * purchase. Credit prices and rebuy remain available from {@link retailCredits}.
1593
- * @remarks
1594
- * The total counts both articles fitted through {@link setPreEngineeredVariant} and
1595
- * purchases implied by applying their Mercenary-only blueprint through
1596
- * {@link applyBlueprint}. The blueprint identifies the purchase at grade 1 and after
1597
- * later upgrades; the current grade does not change the original shop price.
1598
- *
1599
- * Purchases only. Engineering an article above the grade it was sold at costs further
1600
- * Merc Coin per roll, which
1601
- * {@link ships/blueprint-costs!getBlueprintCost | getBlueprintCost} reports as
1602
- * `mercCoins` beside the materials for the same climb.
1603
1644
  * @example
1604
1645
  * ```ts
1605
1646
  * import { getPreEngineeredVariants } from '@elite-dangerous-almanac/core/ships/pre-engineered';
@@ -1609,10 +1650,10 @@ declare class ShipLoadout {
1609
1650
  * .find((candidate) => candidate.acquisition === 'mercenary')!;
1610
1651
  * const build = ShipLoadout.default('Python')
1611
1652
  * .setPreEngineeredVariant('MediumHardpoint1', variant);
1612
- * build.mercCoinCost(); // -> 950
1653
+ * build.buildCost().mercCoins; // -> 950
1613
1654
  * ```
1614
1655
  */
1615
- mercCoinCost(): number;
1656
+ buildCost(): BuildCost;
1616
1657
  /**
1617
1658
  * The build's armour: hull hit points, the bulkhead and reinforcement each
1618
1659
  * contribute, and the effective resistances.
@@ -1704,4 +1745,4 @@ declare class ShipLoadout {
1704
1745
  distributorMetrics(options?: DistributorOptions): DistributorMetrics | null;
1705
1746
  }
1706
1747
 
1707
- export { type ApplyBlueprintOptions, type AvailableBlueprint, type BuildWeaponMetrics, type DefenceOptions, type DistributorOptions, type EngineeringNormalizationCode, type EngineeringNormalizationResult, type EngineeringNormalizationUnchanged, type EngineeringNormalizationUnsupported, type EngineeringNormalized, type ExperimentalEffectMutationCode, type ExperimentalEffectMutationResult, type ExperimentalEffectUnchanged, type ExperimentalEffectUnsupported, type ExperimentalEffectUpdated, type FittedModule, type FittedWeaponMetrics, type FixedMountRepairResult, type ImmovableReason, type JumpOptions, type JumpRangeSummary, LoadoutEditError, type LoadoutEditErrorCode, type LoadoutExportOptions, type LoadoutImportOutcome, type LoadoutSlot, type MobilityOptions, type RetailCredits, ShipLoadout, type SlefExportOptions, type StandardLoad, type StandardLoadInputs, type WeaponsOptions };
1748
+ export { type ApplyBlueprintOptions, type AvailableBlueprint, type BuildCost, type BuildCredits, type BuildWeaponMetrics, type DefenceOptions, type DistributorOptions, type EngineeringNormalizationCode, type EngineeringNormalizationResult, type EngineeringNormalizationUnchanged, type EngineeringNormalizationUnsupported, type EngineeringNormalized, type ExperimentalEffectMutationCode, type ExperimentalEffectMutationResult, type ExperimentalEffectUnchanged, type ExperimentalEffectUnsupported, type ExperimentalEffectUpdated, type FittedModule, type FittedWeaponMetrics, type FixedMountRepairResult, type ImmovableReason, type JumpOptions, type JumpRangeSummary, LoadoutEditError, type LoadoutEditErrorCode, type LoadoutExportOptions, type LoadoutImportOutcome, type LoadoutSlot, type MobilityOptions, ShipLoadout, type SlefExportOptions, type StandardLoad, type StandardLoadInputs, type WeaponsOptions };
@@ -1 +1 @@
1
- export{LoadoutEditError,ShipLoadout}from"../chunk-XULHGGG4.js"; //# sourceMappingURL=ship-loadout.js.map
1
+ export{LoadoutEditError,ShipLoadout}from"../chunk-EXVCRIDP.js"; //# sourceMappingURL=ship-loadout.js.map
@@ -1,5 +1,6 @@
1
1
  import { DamageDistribution, DamageComponents, ProjectileRangeBoundaries } from './modules.js';
2
2
  import './engineering-options.js';
3
+ import './module-families.js';
3
4
  import './slots.js';
4
5
 
5
6
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elite-dangerous-almanac/core",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "Elite Dangerous static data and calculations: astronomy, ships and outfitting, personal equipment and engineering, materials, and market commodities.",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -220,6 +220,10 @@
220
220
  "types": "./dist/i18n/modules.d.ts",
221
221
  "import": "./dist/i18n/modules.js"
222
222
  },
223
+ "./i18n/module-families": {
224
+ "types": "./dist/i18n/module-families.d.ts",
225
+ "import": "./dist/i18n/module-families.js"
226
+ },
223
227
  "./i18n/pre-engineered": {
224
228
  "types": "./dist/i18n/pre-engineered.d.ts",
225
229
  "import": "./dist/i18n/pre-engineered.js"
@@ -357,6 +361,10 @@
357
361
  "types": "./dist/ships/module-capabilities.d.ts",
358
362
  "import": "./dist/ships/module-capabilities.js"
359
363
  },
364
+ "./ships/module-families": {
365
+ "types": "./dist/ships/module-families.d.ts",
366
+ "import": "./dist/ships/module-families.js"
367
+ },
360
368
  "./ships/module-limits": {
361
369
  "types": "./dist/ships/module-limits.d.ts",
362
370
  "import": "./dist/ships/module-limits.js"
@@ -1 +0,0 @@
1
- import{getLocalizedName,createLocalizedNameIndex}from"./chunk-M5IBENCW.js";var blueprint_names_default={AbrasionBlaster_FarReaching:{en:"Abrasion Blaster — Far-reaching"},AFM_Shielded:{en:"Shielded"},Armour_Advanced:{en:"Lightweight",de:"Leichte Panzerung",es:"Blindaje ligero",fr:"Blindage léger",pt:"Blindagem Leve",ru:"Броня из легких сплавов"},Armour_Explosive:{en:"Blast resistant",de:"Detonationsresistente Panzerung",es:"Blindaje resistente a explosiones",fr:"Blindage anti-explosions",pt:"Blindagem de resistência a Explosões",ru:"Взрывостойкая обшивка"},Armour_HeavyDuty:{en:"Heavy duty",de:"Schwere Panzerung",es:"Blindaje de alta resistencia",fr:"Blindage lourd",pt:"Blindagem Pesada",ru:"Толстая броня"},Armour_Kinetic:{en:"Kinetic resistant",de:"Kinetikresistente Panzerung",es:"Blindaje de resistencia cinética",fr:"Blindage anti-cinétique",pt:"Blindagem de Resistência Cinética",ru:"Противокинетическая броня"},Armour_Thermic:{en:"Thermal resistant",de:"Thermalresistente Panzerung",es:"Blindaje de resistencia térmica",fr:"Blindage antithermique",pt:"Blindagem de Resistência Térmica",ru:"Термостойкая броня"},BeamLaser_ThermalPlasmaConversion:{en:"Beam Laser — Plasma conversion"},BurstLaser_ThermalPlasmaConversion:{en:"Burst Laser — Plasma conversion"},CargoRack_IncreasedCapacity:{en:"Expanded Cargo Rack"},CargoRackS5C1_Extended:{en:"Cargo Rack — Extended"},CargoRackS6C1_Extended:{en:"Cargo Rack — Extended"},CollectionLimpet_LightWeight:{en:"Lightweight"},CollectionLimpet_Reinforced:{en:"Reinforced"},CollectionLimpet_Shielded:{en:"Shielded"},DetailedSurfaceScanner_LongRange:{en:"Detailed Surface Scanner — Long range detailed"},Engine_Dirty:{en:"Dirty",de:"Aggressives Antriebstuning",es:"Modificación de motor sucio",fr:"Optimisation de réacteur détériorante",pt:"Ajuste de Motor Sujo",ru:"«Грязная» донастройка двигателя"},Engine_Reinforced:{en:"Reinforced",de:"Antriebsstärkung",es:"Fortalecimiento de motor",fr:"Renforcement du réacteur",pt:"Reforçamento do Motor",ru:"Усиление двигателя"},Engine_Tuned:{en:"Clean",de:"Ausgewogenes Antriebstuning",es:"Modificación de motor limpio",fr:"Optimisation de réacteur propre",pt:"Ajuste de Motor Limpo",ru:"«Чистая» донастройка двигателя"},EnzymeMissileRack_HighYield:{en:"Enzyme Missile Rack — High-yield"},FragmentCannonLarge_DoubleScreaming:{en:"Fragment Cannon — Double screaming"},FragmentCannonSmall_DoubleScreaming:{en:"Fragment Cannon — Double screaming"},FSD_FastBoot:{en:"Faster boot sequence",de:"Schnellere FSA-Ladesequenz",es:"Secuencia de inicio de MDD rápida",fr:"Démarrage accéléré du réacteur FSD",pt:"Sequência de Inicialização do MDD Mais Rápida",ru:"Последовательность быстрого запуска FSD"},FSD_LongRange:{en:"Increased range",de:"Erhöhte FSA-Reichweite",es:"Aumento de alcance de MDD",fr:"Portée FSD améliorée",pt:"Alcance do MDD Aumentado",ru:"Увеличенная дальность FSD"},FSD_Shielded:{en:"Shielded",de:"Abgeschirmter FSA",es:"MDD blindado",fr:"FSD protégé",pt:"MDD Protegido",ru:"Защищенный FSD"},FSDinterdictor_Expanded:{en:"Expanded capture arc",es:"Arco de captura de interdictor de MDD extendido",fr:"Intercepteur FSD à angle de capture augmenté",pt:"Arco de Captura do Interditor de MDD Expandido",ru:"FSD-перехватчик с расширенной дугой захвата"},FSDinterdictor_LongRange:{en:"Long range",de:"Ferndistanz-FSA-Unterbrecher",es:"Interdictor de MDD de largo alcance",fr:"Intercepteur FSD longue portée",pt:"Interditor de MDD de Longo Alcance",ru:"FSD-перехватчик большой дальности"},FuelScoop_Efficiency:{en:"Fuel Scoop — Scoop rate enhanced"},FuelScoop_Shielded:{en:"Shielded"},FuelTransferLimpet_LightWeight:{en:"Lightweight"},FuelTransferLimpet_Reinforced:{en:"Reinforced"},FuelTransferLimpet_Shielded:{en:"Shielded"},GuardianModule_Sturdy:{en:"Anti-Guardian Zone Resistance"},HatchBreakerLimpet_LightWeight:{en:"Lightweight"},HatchBreakerLimpet_Reinforced:{en:"Reinforced"},HatchBreakerLimpet_Shielded:{en:"Shielded"},HullReinforcement_Advanced:{en:"Lightweight",de:"Leichtgewicht-Rumpfhüllenverstärkung",es:"Refuerzo estructural aligerado",fr:"Renforcement de coque ultraléger",pt:"Reforço de Casco Leve",ru:"Легкое усиление корпуса"},HullReinforcement_Explosive:{en:"Blast resistant",de:"Detonationsresistente Rumpfhüllenverstärkung",es:"Refuerzo estructural de resistencia explosiva",fr:"Renforcement de coque anti-explosions",pt:"Reforço de Casco Resistente à Explosão",ru:"Взрывостойкое усиление корпуса"},HullReinforcement_HeavyDuty:{en:"Heavy duty",de:"Schwere Rumpfhüllenverstärkung",es:"Refuerzo estructural de alta resistencia",fr:"Renforcement de coque lourd",pt:"Reforço de Casco Pesado",ru:"Надежное усиление корпуса"},HullReinforcement_Kinetic:{en:"Kinetic resistant",de:"Kinetikresistente Rumpfhüllenverstärkung",es:"Refuerzo estructural de resistencia cinética",fr:"Renforcement de coque anti-cinétique",pt:"Reforço de Casco Resistência Cinética",ru:"Противокинетическое усиление корпуса"},HullReinforcement_Thermic:{en:"Thermal resistant",de:"Thermalresistente Rumpfhüllenverstärkung",es:"Refuerzo estructural de resistencia térmica",fr:"Renforcement de coque antithermique",pt:"Reforço de Casco Resistência Térmica",ru:"Термостойкое усиление корпуса"},LifeSupport_LightWeight:{en:"Lightweight"},LifeSupport_Reinforced:{en:"Reinforced"},LifeSupport_Shielded:{en:"Shielded"},MC_Overcharged:{en:"Overcharged"},MiningLaser_LongRange:{en:"Mining Laser — Long range"},Misc_ChaffCapacity:{en:"Ammo capacity",de:"Düppel-Munitionskapazität",es:"Capacidad de munición de señuelos",fr:"Capacité du chargeur du lanceur de paillettes",pt:"Capacidade de Munição de Chaff",ru:"Вместимость припасов дипольного отражателя"},Misc_HeatSinkCapacity:{en:"Ammo capacity",de:"Kühlkörper-Munitionskapazität",es:"Capacidad de munición de eyector de calor",fr:"Capacité du chargeur de l'éjecteur de dissipateur thermique",pt:"Capacidade de Munição de Dissipador Térmico",ru:"Вместимость припасов теплоотвода"},Misc_LightWeight:{en:"Lightweight",es:"Ligero misceláneo",fr:"Divers - allégement",pt:"Qualquer Leve",ru:"Облегченное прочее"},Misc_PointDefenseCapacity:{en:"Ammo capacity",de:"Punktverteidigung-Munitionskapazität",es:"Capacidad de munición de defensa de punto",fr:"Capacité du chargeur de la défense ponctuelle",pt:"Capacidade de Munição de Defesa de Ponto",ru:"Вместимость припасов точечной обороны"},Misc_Reinforced:{en:"Reinforced",es:"Reforzado misceláneo",fr:"Divers - renforcement",pt:"Qualquer Reforçado",ru:"Усиленное прочее"},Misc_Shielded:{en:"Shielded",es:"Blindado misceláneo",fr:"Divers - protection",pt:"Qualquer Protegido",ru:"Защищенное прочее"},ModuleReinforcement_HeavyDuty:{en:"Module Reinforcement Package — Heavy duty"},MultiCannon_Rapid:{en:"Multi-cannon — Rapid phase"},PowerDistributor_Balanced:{en:"Power Distributor — Balanced"},PowerDistributor_HighCapacity:{en:"High charge capacity",de:"Hochleistungsfähiger Energieverteiler",es:"Distribuidor de energía de alta capacidad de carga",fr:"Répartiteur de puissance à capacité accrue",pt:"Distribuidor de Energia de Alta Capacidade",ru:"Высокоемкий распределитель питания"},PowerDistributor_HighFrequency:{en:"Charge enhanced",de:"Ladungsoptimierter Energieverteiler",es:"Distribuidor de energía de carga mejorada",fr:"Répartiteur de puissance rapide",pt:"Distribuidor de Energia de Recarga Melhorada",ru:"Быстрозаряжающийся распределитель питания"},PowerDistributor_PriorityEngines:{en:"Engine focused",de:"Antriebsfokussierter Energieverteiler",es:"Distribuidor de energía orientado a motor",fr:"Répartiteur de puissance optimisé Moteur",pt:"Distribuidor de Energia com Foco nos Motores",ru:"Распределитель питания на двигатель"},PowerDistributor_PrioritySystems:{en:"System focused",de:"Systemfokussierter Energieverteiler",es:"Distribuidor de energía orientado a sistemas",fr:"Répartiteur de puissance optimisé Systèmes",pt:"Distribuidor de Energia com Foco nos Sistemas",ru:"Распределитель питания на систему"},PowerDistributor_PriorityWeapons:{en:"Weapon focused",de:"Waffenfokussierter Energieverteiler",es:"Distribuidor de energía orientado a armas",fr:"Répartiteur de puissance optimisé Armes",pt:"Distribuidor de Energia com Foco nas Armas",ru:"Распределитель питания на орудия"},PowerDistributor_Shielded:{en:"Shielded",de:"Abgeschirmter Energieverteiler",es:"Distribuidor de energía blindado",fr:"Répartiteur de puissance protégé",pt:"Distribuidor de Energia Protegido",ru:"Защищенный распределитель питания"},PowerDistributorS3C2_SupportFocused:{en:"Power Distributor — Support focused"},PowerDistributorS3C5_SupportFocused:{en:"Power Distributor — Support focused"},PowerDistributorS4C2_SupportFocused:{en:"Power Distributor — Support focused"},PowerDistributorS4C5_SupportFocused:{en:"Power Distributor — Support focused"},PowerDistributorS6C5_SupportFocused:{en:"Power Distributor — Support focused"},PowerPlant_Armoured:{en:"Armoured",de:"Kraftwerkpanzerung",es:"Núcleo de energía blindado",fr:"Générateur blindé",pt:"Gerador de Energia Blindado",ru:"Бронированная силовая установка"},PowerPlant_Boosted:{en:"Overcharged",de:"Überladungskraftwerk",es:"Núcleo de energía sobrecargado",fr:"Générateur surchargé",pt:"Gerador de Energia Sobrecarregado",ru:"Усиленная силовая установка"},PowerPlant_Stealth:{en:"Low emissions",de:"Emissionsoptimiertes Kraftwerk",es:"Núcleo de energía de bajas emisiones",fr:"Générateur à faibles émissions",pt:"Gerador de Energia de Baixa Emissão",ru:"Силовая установка с малым излучением"},ProspectingLimpet_LightWeight:{en:"Lightweight"},ProspectingLimpet_Reinforced:{en:"Reinforced"},ProspectingLimpet_Shielded:{en:"Shielded"},PulseLaser_ThermalPlasmaConversion:{en:"Pulse Laser — Plasma conversion"},RailGun_LongShot:{en:"Rail Gun — Enduring feedback"},Refineries_Shielded:{en:"Shielded"},Scanner_LongRange:{en:"Long range"},Scanner_WideAngle:{en:"Wide angle"},SeekerMissileRack_Drag:{en:"Seeker Missile Rack — Drag"},SeekerMissileRack_LightWeightThermal:{en:"Seeker Missile Rack — Lightweight thermal"},SeekerMissileRackLarge_Lockdown:{en:"Seeker Missile Rack — Lockdown"},SeekerMissileRackMedium_Lockdown:{en:"Seeker Missile Rack — Lockdown"},Sensor_Expanded:{en:"Expanded Probe Scanning Radius",de:"Erweiterter Sonden-Scanradius",es:"Radio de escaneo de sonda ampliado",fr:"Rayon d'analyse de sonde augmenté",pt:"Expansão do raio de escaneamento da sonda",ru:"Увеличение радиуса сканирования зондов"},Sensor_FastScan:{en:"Fast scan",de:"Schnellscanner",es:"Escáner rápido",fr:"Détecteur analyse rapide",pt:"Scanner Rápido",ru:"Быстрый сканер"},Sensor_LightWeight:{en:"Lightweight",de:"Leichter Scanner",es:"Escáner ligero",fr:"Détecteur allégé",pt:"Scanner Leve",ru:"Облегченный сканер"},Sensor_LongRange:{en:"Long range",de:"Ferndistanzscanner",es:"Escáner de largo alcance",fr:"Détecteur à longue portée",pt:"Scanner de longa distância",ru:"Сканер дальнего действия"},Sensor_WideAngle:{en:"Wide angle",de:"Weitwinkelscanner",es:"Escáner de estelas de ángulo amplio",fr:"Détecteur grand-angle",pt:"Scanner de Ângulo Amplo",ru:"Широкоугольный сканер"},ShieldBooster_Explosive:{en:"Blast resistant",de:"Detonationsresistenter Schild-Booster",es:"Potenciador de escudos de resistencia explosiva",fr:"Survolteur de bouclier anti-explosions",pt:"Potenciador de Escudo Resistência à Explosão",ru:"Взрывостойкий усилитель щита"},ShieldBooster_HeavyDuty:{en:"Heavy duty",de:"Schwerer Schild-Booster",es:"Potenciador de escudos de alta resistencia",fr:"Survolteur de bouclier lourd",pt:"Potenciador de escudo Pesado",ru:"Надежный усилитель щита"},ShieldBooster_Kinetic:{en:"Kinetic resistant",de:"Kinetikresistenter Schild-Booster",es:"Potenciador de escudos de resistencia cinética",fr:"Survolteur de bouclier anti-cinétique",pt:"Potenciador de Escudo de Resistência Cinética",ru:"Противокинетический усилитель щита"},ShieldBooster_Resistive:{en:"Resistance augmented",de:"Widerstandsverstärkter Schild-Booster",es:"Potenciador de escudos de resistencia aumentada",fr:"Survolteur de bouclier à résistance améliorée",pt:"Potenciador de Escudo com Resistência Aumentada",ru:"Усилитель щита с универсальной защитой"},ShieldBooster_Thermic:{en:"Thermal resistant",de:"Thermalresistenter Schild-Booster",es:"Potenciador de escudos de resistencia térmica",fr:"Survolteur de bouclier antithermique",pt:"Potenciador de Escudo de Resistência Térmica",ru:"Термостойкий усилитель щита"},ShieldCellBank_Rapid:{en:"Rapid charge",de:"Schnell aufladende Schildzellenbank",es:"Acumulador de células de escudo de recarga rápida",fr:"Réserve de cellules d'énergie à chargement rapide",pt:"Carga Rápida do Banco de Célula de Escudo",ru:"Щитонакопитель быстрой зарядки"},ShieldCellBank_Specialised:{en:"Specialised",de:"Spezielle Schildzellenbank",es:"Acumulador de células de escudo especializado",fr:"Réserve de cellules d'énergie spécialisées",pt:"Banco de Célula de Escudo Especializado",ru:"Адаптивный щитонакопитель"},ShieldGenerator_Kinetic:{en:"Kinetic resistant",de:"Kinetikresistente Schilde",es:"Escudos de resistencia cinética",fr:"Bouclier anti-cinétique",pt:"Escudos com Resistência Cinética",ru:"Противокинетические щиты"},ShieldGenerator_Optimised:{en:"Enhanced low power",de:"Verbesserte Niedrigenergieschilde",es:"Escudos mejorados de baja energía",fr:"Bouclier amélioré à consommation réduite",pt:"Escudos de Baixo Consumo, Aprimorados",ru:"Усиленные энергосберегающие щиты"},ShieldGenerator_Reinforced:{en:"Reinforced",de:"Verstärkte Schilde",es:"Escudos reforzados",fr:"Bouclier renforcé",pt:"Escudos Reforçados",ru:"Усиленные щиты"},ShieldGenerator_Thermic:{en:"Thermal resistant",de:"Thermalresistente Schilde",es:"Escudos de resistencia térmica",fr:"Bouclier antithermique",pt:"Escudos de Resistência Térmica",ru:"Термостойкие щиты"},Weapon_DoubleShot:{en:"Double shot",de:"Doppelschuss",es:"Doble disparo",fr:"Tir double",pt:"Tiro Duplo",ru:"Двойной выстрел"},Weapon_Efficient:{en:"Efficient",de:"Waffeneffizienz",es:"Arma eficiente",fr:"Arme efficace",pt:"Arma Eficiente",ru:"Эффективное орудие"},Weapon_Focused:{en:"Focused",de:"Waffenfokus",es:"Arma concentrada",fr:"Arme concentrée",pt:"Arma com Foco",ru:"Точное орудие"},Weapon_HighCapacity:{en:"High capacity",de:"Hochleistungsmagazin",es:"Cargador de alta capacidad",fr:"Chargeur grande capacité",pt:"Cartucho de Alta Capacidade",ru:"Вместительный магазин"},Weapon_LightWeight:{en:"Lightweight",de:"Leichtgewichtgeschütz",es:"Anclaje ligero",fr:"Support ultraléger",pt:"Encaixe Leve",ru:"Легкое крепление"},Weapon_LongRange:{en:"Long range",de:"Ferndistanzwaffe",es:"Arma de largo alcance",fr:"Arme à longue portée",pt:"Arma de longa distância",ru:"Дальнобойное орудие"},Weapon_Overcharged:{en:"Overcharged",de:"Überladungswaffe",es:"Arma sobrecargada",fr:"Arme surchargée",pt:"Arma Sobrecarregada",ru:"Усиленное орудие"},Weapon_RapidFire:{en:"Rapid fire",de:"Schnellfeuermodifikation",es:"Modificación de tiro rápido",fr:"Modification de cadence rapide",pt:"Modificação de Disparo Rápido",ru:"Улучшение скорострельности"},Weapon_ShortRange:{en:"Short range",de:"Kurzdistanzblaster",es:"Destructor de corto alcance",fr:"Tir à courte portée",pt:"Disparo de Curto Alcance",ru:"Бластер малого радиуса действия"},Weapon_Sturdy:{en:"Sturdy",de:"Robustes Gestell",es:"Anclaje robusto",fr:"Support robuste",pt:"Encaixe Robusto",ru:"Прочное крепление"}};var BLUEPRINT_NAMES=/* @__PURE__ */createLocalizedNameIndex(blueprint_names_default);function getBlueprintName(fdname,locale){return getLocalizedName(BLUEPRINT_NAMES,fdname,locale,"getBlueprintName","fdname")}export{getBlueprintName};//# sourceMappingURL=chunk-2J2UV4ZX.js.map
@@ -1 +0,0 @@
1
- import{buildModuleCatalogue}from"./chunk-E45EDCYH.js";var modules_utility_default=[{symbol:"Hpt_ChaffLauncher_Tiny",kind:"chaffLaunchers",name:"Chaff Launcher",class:0,rating:"I",mass:1.3,integrity:20,powerDraw:.2,bootTime:0,alwaysPowered:true,rateOfFire:1,burstInterval:1,clipSize:1,ammoMaximum:10,reloadTime:10,distributorDraw:4,thermalLoad:4,cost:8500},{symbol:"Hpt_ElectronicCountermeasure_Tiny",kind:"ecms",name:"Electronic Countermeasure",class:0,rating:"F",mass:1.3,integrity:20,powerDraw:.2,bootTime:0,reloadTime:10,thermalLoad:4,maximumRange:3e3,cost:12500},{symbol:"Hpt_HeatSinkLauncher_Turret_Tiny",kind:"heatSinkLaunchers",name:"Heat Sink Launcher",class:0,rating:"I",mass:1.3,integrity:45,powerDraw:.2,bootTime:0,alwaysPowered:true,rateOfFire:.2,burstInterval:5,clipSize:1,ammoMaximum:2,reloadTime:10,distributorDraw:2,cost:3500},{symbol:"Hpt_PlasmaPointDefence_Turret_Tiny",kind:"pointDefence",name:"Point Defence",class:0,rating:"I",mass:.5,integrity:30,powerDraw:.2,bootTime:0,alwaysPowered:true,damage:.2,damageDistribution:{kinetic:1},rateOfFire:10,burstInterval:.2,burstRounds:4,burstRateOfFire:15,clipSize:12,ammoMaximum:1e4,reloadTime:.4,thermalLoad:.07,maximumRange:2500,shotSpeed:1e3,jitter:1.5,cost:18550},{symbol:"Hpt_CargoScanner_Size0_Class1",kind:"manifestScanners",name:"Cargo Scanner",class:0,rating:"E",exclusionGroup:"cargoScanner",mass:1.3,integrity:32,powerDraw:.2,bootTime:3,scannerRange:2e3,scanAngle:15,scanTime:10,cost:13544},{symbol:"Hpt_CargoScanner_Size0_Class2",kind:"manifestScanners",name:"Cargo Scanner",class:0,rating:"D",exclusionGroup:"cargoScanner",mass:1.3,integrity:24,powerDraw:.4,bootTime:3,scannerRange:2500,scanAngle:15,scanTime:10,cost:40633},{symbol:"Hpt_CargoScanner_Size0_Class3",kind:"manifestScanners",name:"Cargo Scanner",class:0,rating:"C",exclusionGroup:"cargoScanner",mass:1.3,integrity:40,powerDraw:.8,bootTime:3,scannerRange:3e3,scanAngle:15,scanTime:10,cost:121899},{symbol:"Hpt_CargoScanner_Size0_Class4",kind:"manifestScanners",name:"Cargo Scanner",class:0,rating:"B",exclusionGroup:"cargoScanner",mass:1.3,integrity:56,powerDraw:1.6,bootTime:3,scannerRange:3500,scanAngle:15,scanTime:10,cost:365698},{symbol:"Hpt_CargoScanner_Size0_Class5",kind:"manifestScanners",name:"Cargo Scanner",class:0,rating:"A",exclusionGroup:"cargoScanner",mass:1.3,integrity:48,powerDraw:3.2,bootTime:3,scannerRange:4e3,scanAngle:15,scanTime:10,cost:1097095},{symbol:"Hpt_CloudScanner_Size0_Class1",kind:"wakeScanners",name:"Frame Shift Wake Scanner",class:0,rating:"E",exclusionGroup:"frameShiftWakeScanner",mass:1.3,integrity:32,powerDraw:.2,bootTime:1,scannerRange:2e3,scanAngle:15,scanTime:10,cost:13544},{symbol:"Hpt_CloudScanner_Size0_Class2",kind:"wakeScanners",name:"Frame Shift Wake Scanner",class:0,rating:"D",exclusionGroup:"frameShiftWakeScanner",mass:1.3,integrity:24,powerDraw:.4,bootTime:1,scannerRange:2500,scanAngle:15,scanTime:10,cost:40633},{symbol:"Hpt_CloudScanner_Size0_Class3",kind:"wakeScanners",name:"Frame Shift Wake Scanner",class:0,rating:"C",exclusionGroup:"frameShiftWakeScanner",mass:1.3,integrity:40,powerDraw:.8,bootTime:1,scannerRange:3e3,scanAngle:15,scanTime:10,cost:121899},{symbol:"Hpt_CloudScanner_Size0_Class4",kind:"wakeScanners",name:"Frame Shift Wake Scanner",class:0,rating:"B",exclusionGroup:"frameShiftWakeScanner",mass:1.3,integrity:56,powerDraw:1.6,bootTime:1,scannerRange:3500,scanAngle:15,scanTime:10,cost:365698},{symbol:"Hpt_CloudScanner_Size0_Class5",kind:"wakeScanners",name:"Frame Shift Wake Scanner",class:0,rating:"A",exclusionGroup:"frameShiftWakeScanner",mass:1.3,integrity:48,powerDraw:3.2,bootTime:1,scannerRange:4e3,scanAngle:15,scanTime:10,cost:1097095},{symbol:"Hpt_CrimeScanner_Size0_Class1",kind:"killWarrantScanners",name:"Kill Warrant Scanner",class:0,rating:"E",exclusionGroup:"killWarrantScanner",mass:1.3,integrity:32,powerDraw:.2,bootTime:2,scannerRange:2e3,scanAngle:15,scanTime:10,cost:13544},{symbol:"Hpt_CrimeScanner_Size0_Class2",kind:"killWarrantScanners",name:"Kill Warrant Scanner",class:0,rating:"D",exclusionGroup:"killWarrantScanner",mass:1.3,integrity:24,powerDraw:.4,bootTime:2,scannerRange:2500,scanAngle:15,scanTime:10,cost:40633},{symbol:"Hpt_CrimeScanner_Size0_Class3",kind:"killWarrantScanners",name:"Kill Warrant Scanner",class:0,rating:"C",exclusionGroup:"killWarrantScanner",mass:1.3,integrity:40,powerDraw:.8,bootTime:2,scannerRange:3e3,scanAngle:15,scanTime:10,cost:121899},{symbol:"Hpt_CrimeScanner_Size0_Class4",kind:"killWarrantScanners",name:"Kill Warrant Scanner",class:0,rating:"B",exclusionGroup:"killWarrantScanner",mass:1.3,integrity:56,powerDraw:1.6,bootTime:2,scannerRange:3500,scanAngle:15,scanTime:10,cost:365698},{symbol:"Hpt_CrimeScanner_Size0_Class5",kind:"killWarrantScanners",name:"Kill Warrant Scanner",class:0,rating:"A",exclusionGroup:"killWarrantScanner",mass:1.3,integrity:48,powerDraw:3.2,bootTime:2,scannerRange:4e3,scanAngle:15,scanTime:10,cost:1097095},{symbol:"Hpt_ShieldBooster_Size0_Class1",kind:"shieldBoosters",name:"Shield Booster",class:0,rating:"E",mass:.5,integrity:25,powerDraw:.2,bootTime:0,shieldBoost:.04,kineticResistance:0,thermalResistance:0,explosiveResistance:0,alwaysPowered:true,cost:1e4},{symbol:"Hpt_ShieldBooster_Size0_Class2",kind:"shieldBoosters",name:"Shield Booster",class:0,rating:"D",mass:1,integrity:35,powerDraw:.5,bootTime:0,shieldBoost:.08,kineticResistance:0,thermalResistance:0,explosiveResistance:0,alwaysPowered:true,cost:23e3},{symbol:"Hpt_ShieldBooster_Size0_Class3",kind:"shieldBoosters",name:"Shield Booster",class:0,rating:"C",mass:2,integrity:40,powerDraw:.7,bootTime:0,shieldBoost:.12,kineticResistance:0,thermalResistance:0,explosiveResistance:0,alwaysPowered:true,cost:53e3},{symbol:"Hpt_ShieldBooster_Size0_Class4",kind:"shieldBoosters",name:"Shield Booster",class:0,rating:"B",mass:3,integrity:45,powerDraw:1,bootTime:0,shieldBoost:.16,kineticResistance:0,thermalResistance:0,explosiveResistance:0,alwaysPowered:true,cost:122e3},{symbol:"Hpt_ShieldBooster_Size0_Class5",kind:"shieldBoosters",name:"Shield Booster",class:0,rating:"A",mass:3.5,integrity:48,powerDraw:1.2,bootTime:0,shieldBoost:.2,kineticResistance:0,thermalResistance:0,explosiveResistance:0,alwaysPowered:true,cost:281e3},{symbol:"Hpt_AntiUnknownShutdown_Tiny",name:"Shutdown Field Neutraliser",class:0,rating:"F",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:1.3,integrity:35,powerDraw:.2,bootTime:0,alwaysPowered:true,maximumRange:3e3,cost:63e3},{symbol:"Hpt_XenoScanner_Basic_Tiny",name:"Xeno Scanner",class:0,rating:"E",exclusionGroup:"experimentalUtility",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:1.3,integrity:56,powerDraw:.2,bootTime:2,scannerRange:500,scanAngle:23,scanTime:10,cost:365698},{symbol:"Hpt_XenoScannerMk2_Basic_Tiny",name:"Enhanced Xeno Scanner",class:0,rating:"C",exclusionGroup:"experimentalUtility",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:1.3,integrity:56,powerDraw:.8,bootTime:2,scannerRange:2e3,scanAngle:23,scanTime:10,cost:745948},{symbol:"Hpt_MRAScanner_Size0_Class1",name:"Pulse Wave Analyser",class:0,rating:"E",exclusionGroup:"pulseWaveAnalyser",mass:1.3,integrity:32,powerDraw:.2,bootTime:3,scannerRange:12e3,scanAngle:15,scanTime:3,cost:13544},{symbol:"Hpt_MRAScanner_Size0_Class2",name:"Pulse Wave Analyser",class:0,rating:"D",exclusionGroup:"pulseWaveAnalyser",mass:1.3,integrity:24,powerDraw:.4,bootTime:3,scannerRange:15e3,scanAngle:15,scanTime:3,cost:40633},{symbol:"Hpt_MRAScanner_Size0_Class3",name:"Pulse Wave Analyser",class:0,rating:"C",exclusionGroup:"pulseWaveAnalyser",mass:1.3,integrity:40,powerDraw:.8,bootTime:3,scannerRange:18e3,scanAngle:15,scanTime:3,cost:121899},{symbol:"Hpt_MRAScanner_Size0_Class4",name:"Pulse Wave Analyser",class:0,rating:"B",exclusionGroup:"pulseWaveAnalyser",mass:1.3,integrity:56,powerDraw:1.6,bootTime:3,scannerRange:21e3,scanAngle:15,scanTime:3,cost:365698},{symbol:"Hpt_MRAScanner_Size0_Class5",name:"Pulse Wave Analyser",class:0,rating:"A",exclusionGroup:"pulseWaveAnalyser",mass:1.3,integrity:48,powerDraw:3.2,bootTime:3,scannerRange:24e3,scanAngle:15,scanTime:3,cost:1097095},{symbol:"Hpt_CausticSinkLauncher_Turret_Tiny",kind:"heatSinkLaunchers",name:"Caustic Sink Launcher",class:0,rating:"I",mass:1.7,integrity:45,powerDraw:.6,bootTime:0,alwaysPowered:true,rateOfFire:.2,burstInterval:5,clipSize:1,ammoMaximum:5,reloadTime:10,distributorDraw:2,cost:5e4},{symbol:"Hpt_AntiUnknownShutdown_Tiny_V2",name:"Thargoid Pulse Neutraliser",class:0,rating:"E",mass:3,integrity:70,powerDraw:.4,bootTime:0,alwaysPowered:true,maximumRange:0,cost:15e4},{symbol:"Hpt_XenoScanner_Advanced_Tiny",name:"Pulse Wave Xeno Scanner",class:0,rating:"C",exclusionGroup:"experimentalUtility",mass:3,integrity:100,powerDraw:1,bootTime:2,scannerRange:1e3,scanAngle:23,scanTime:10,cost:85e4}];var UTILITY_MODULES=buildModuleCatalogue(modules_utility_default,"utility");export{UTILITY_MODULES};//# sourceMappingURL=chunk-3IMWUYXJ.js.map