@elite-dangerous-almanac/core 0.1.0-beta.4 → 0.1.0-beta.6

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 (89) hide show
  1. package/PROVENANCE/ships/SOURCES.md +79 -36
  2. package/README.md +6 -2
  3. package/THIRD_PARTY_NOTICES.md +3 -2
  4. package/dist/chunk-4TXQWLIQ.js +1 -0
  5. package/dist/chunk-4TXQWLIQ.js.map +1 -0
  6. package/dist/chunk-BSOIPL4A.js +1 -0
  7. package/dist/{chunk-IHHS5Q5S.js.map → chunk-BSOIPL4A.js.map} +1 -1
  8. package/dist/{chunk-6LUEKHO5.js → chunk-DFJ6ETMY.js} +1 -1
  9. package/dist/{chunk-6LUEKHO5.js.map → chunk-DFJ6ETMY.js.map} +1 -1
  10. package/dist/chunk-FMPRCYKY.js +1 -0
  11. package/dist/chunk-FMPRCYKY.js.map +1 -0
  12. package/dist/chunk-GQ5GX5TB.js +1 -0
  13. package/dist/chunk-GQ5GX5TB.js.map +1 -0
  14. package/dist/chunk-GV7ZKYQN.js +1 -0
  15. package/dist/chunk-GV7ZKYQN.js.map +1 -0
  16. package/dist/chunk-JOTAOI5T.js +1 -0
  17. package/dist/chunk-JOTAOI5T.js.map +1 -0
  18. package/dist/{chunk-PDE4YOFT.js → chunk-LJI7VXJD.js} +1 -1
  19. package/dist/{chunk-PDE4YOFT.js.map → chunk-LJI7VXJD.js.map} +1 -1
  20. package/dist/chunk-MPZGCTRG.js +1 -0
  21. package/dist/chunk-MPZGCTRG.js.map +1 -0
  22. package/dist/{chunk-VQQ6WHAL.js → chunk-PRQELBIC.js} +1 -1
  23. package/dist/{chunk-VZZ2XIRE.js → chunk-SVZARHWP.js} +1 -1
  24. package/dist/chunk-SVZARHWP.js.map +1 -0
  25. package/dist/chunk-T6DP655O.js +1 -0
  26. package/dist/chunk-T6DP655O.js.map +1 -0
  27. package/dist/chunk-TH4S5MVD.js +1 -0
  28. package/dist/{chunk-BNILZXJD.js.map → chunk-TH4S5MVD.js.map} +1 -1
  29. package/dist/chunk-VF2FGQ4B.js +1 -0
  30. package/dist/chunk-VF2FGQ4B.js.map +1 -0
  31. package/dist/chunk-W7XI3WVA.js +1 -0
  32. package/dist/{chunk-T24FTOEU.js.map → chunk-W7XI3WVA.js.map} +1 -1
  33. package/dist/{chunk-GJCB2Z72.js → chunk-XYK6DYVQ.js} +1 -1
  34. package/dist/{chunk-GJCB2Z72.js.map → chunk-XYK6DYVQ.js.map} +1 -1
  35. package/dist/chunk-ZAHNOQGG.js +1 -0
  36. package/dist/chunk-ZAHNOQGG.js.map +1 -0
  37. package/dist/{chunk-L2ZZXEZM.js → chunk-ZJB5UYNE.js} +1 -1
  38. package/dist/{ship-loadout-BAU7scrE.d.ts → ship-loadout-CVRkbZS0.d.ts} +111 -22
  39. package/dist/ships/blueprint-costs.js +1 -1
  40. package/dist/ships/blueprint-journal.js +1 -1
  41. package/dist/ships/decorative-modification-stats.d.ts +109 -0
  42. package/dist/ships/decorative-modification-stats.js +1 -0
  43. package/dist/ships/decorative-modification-stats.js.map +1 -0
  44. package/dist/ships/decorative-modifications.d.ts +4 -2
  45. package/dist/ships/decorative-modifications.js +1 -1
  46. package/dist/ships/engineering-options.d.ts +44 -41
  47. package/dist/ships/engineering-options.js +1 -1
  48. package/dist/ships/engineering.d.ts +15 -12
  49. package/dist/ships/engineering.js +1 -1
  50. package/dist/ships/gunsights.d.ts +111 -0
  51. package/dist/ships/gunsights.js +1 -0
  52. package/dist/ships/gunsights.js.map +1 -0
  53. package/dist/ships/index.d.ts +18 -9
  54. package/dist/ships/index.js +1 -1
  55. package/dist/ships/jump-range.d.ts +50 -7
  56. package/dist/ships/jump-range.js +1 -1
  57. package/dist/ships/module-capabilities.d.ts +3 -3
  58. package/dist/ships/modules-all.js +1 -1
  59. package/dist/ships/modules-hardpoint.js +1 -1
  60. package/dist/ships/modules.d.ts +5 -5
  61. package/dist/ships/modules.js +1 -1
  62. package/dist/ships/pre-engineered-stats.d.ts +5 -3
  63. package/dist/ships/pre-engineered-stats.js +1 -1
  64. package/dist/ships/pre-engineered.d.ts +6 -4
  65. package/dist/ships/pre-engineered.js +1 -1
  66. package/dist/ships/shield-recovery.js +1 -1
  67. package/dist/ships/ship-loadout.d.ts +2 -1
  68. package/dist/ships/ship-loadout.js +1 -1
  69. package/dist/ships/slef.d.ts +2 -2
  70. package/dist/ships/weapons-capacitor.d.ts +71 -0
  71. package/dist/ships/weapons-capacitor.js +1 -0
  72. package/dist/ships/weapons-capacitor.js.map +1 -0
  73. package/dist/ships/weapons.d.ts +3 -2
  74. package/dist/ships/weapons.js +1 -1
  75. package/package.json +13 -1
  76. package/dist/chunk-BNILZXJD.js +0 -1
  77. package/dist/chunk-BUV3MXGK.js +0 -1
  78. package/dist/chunk-BUV3MXGK.js.map +0 -1
  79. package/dist/chunk-DMCFX6VO.js +0 -1
  80. package/dist/chunk-DMCFX6VO.js.map +0 -1
  81. package/dist/chunk-IHHS5Q5S.js +0 -1
  82. package/dist/chunk-KG4EWDZZ.js +0 -1
  83. package/dist/chunk-KG4EWDZZ.js.map +0 -1
  84. package/dist/chunk-T24FTOEU.js +0 -1
  85. package/dist/chunk-TXT2LOZI.js +0 -1
  86. package/dist/chunk-TXT2LOZI.js.map +0 -1
  87. package/dist/chunk-VZZ2XIRE.js.map +0 -1
  88. /package/dist/{chunk-VQQ6WHAL.js.map → chunk-PRQELBIC.js.map} +0 -0
  89. /package/dist/{chunk-L2ZZXEZM.js.map → chunk-ZJB5UYNE.js.map} +0 -0
@@ -15,7 +15,7 @@ Referred to throughout by source name; the pin is here, once.
15
15
  | Odyssey Materials Helper CAPI fixture `application/src/test/resources/parser/capifc/test9.json` | commit `2c652a2349b754f1dde1a58b6daaac5a04e421a6` | 2026-08-09 UTC |
16
16
  | EDCD/Coriolis — the application, for its formulas | commit `68c042ca6e3db62372cbbb2077cf972345511712` | 2026-08-01 UTC |
17
17
  | msarilar/EDEngineer `EDEngineer/Resources/Data/blueprints.json` | SHA-256 `787e6bd0579264d7b4615a281318792cb212285786f4ae07f61ec1cc464cdec0` — read from the branch tip, so pinned by digest | 2026-08-08 UTC |
18
- | Elite Dangerous in-game verification | game version `4.4.0.3`; direct in-game observation | 2026-08-14 UTC |
18
+ | Elite Dangerous in-game verification | game version `4.4.0.3`; direct in-game observation | 2026-08-14 UTC |
19
19
 
20
20
  Every `eddb.js` derivation uses the baseline snapshot unless its catalogue note names
21
21
  the Vessel Hangar snapshot.
@@ -91,18 +91,18 @@ identity from FDevIDs, stats and slots from coriolis-data, joined on `symbol`.
91
91
  omissions. Values are transcribed directly, subject only to the established numeric
92
92
  precision described above.
93
93
 
94
- | Field | Registry value → stored game value |
95
- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
96
- | `baseShieldStrength` | `Type7` 155→156 |
97
- | `masslock` | `Orca` 16→15; `Cutter` 27→26; `Viper_MkIV` 7→8; `Asp_Scout` 8→9; `Mandalay` 11→12; `PantherMkII` 27→25; `LakonMiner` 16→15; `Explorer_NX` 19→21; `SmallCombat01_NX` 10→11; `MediumTransport01` absent→16 |
98
- | `reserveFuelCapacity` | `Mandalay` 0.52→0.5; `PantherMkII` 1.16→1.11; `LakonMiner` 0.77→0.6; `SmallCombat01_NX` 0.57→0.61 |
99
- | `heatCapacity` | `Dolphin` 165→245; `Python_NX` 316→260; `Type8` 226→236; `Mandalay` 250→245; `Corsair` 230→280; `PantherMkII` 250→329; `LakonMiner` 289→300; `Explorer_NX` 250→341; `SmallCombat01_NX` 237→263; `MediumTransport01` absent→279 |
100
- | `heatDissipation` | `Python_NX` 52→52.05; `Type8` 36.5→36.45; `CobraMkV` 40.5→40.63; `Corsair` 52→52.05; `PantherMkII` 62.5→62.45; `LakonMiner` 52.15→52.05; `Explorer_NX` 72.1→71.93; `SmallCombat01_NX` 39.85→37.93; `MediumTransport01` absent→49.35 |
101
- | `maximumSpeed` | `Type9_Military` 179→180; `TypeX_3` 204→200; `CobraMkV` 291→290; `PantherMkII` 181→180; `LakonMiner` 272→270; `SmallCombat01_NX` 271→270 |
102
- | `boost` | `Type9_Military` 219→220; `CobraMkV` 412→410; `LakonMiner` 367→365 |
103
- | `pitch` | `Type9_Military` 20→22; `Krait_MkII` 26→31; `TypeX` 39→38; `TypeX_3` 32→35; `Krait_Light` 26→31; `Mamba` 27→30; `Python_NX` 37.72→37; `CobraMkV` 45.61→45; `SmallCombat01_NX` 51.4→50 |
104
- | `roll` | `Type9_Military` 20→40; `TypeX` 92→90; `Mamba` 80→75; `Python_NX` 92.76→91; `CobraMkV` 121.62→120; `SmallCombat01_NX` 123.36→120 |
105
- | `yaw` | `Python_NX` 12.74→12.5; `CobraMkV` 33.45→33; `SmallCombat01_NX` 24.67→24 |
94
+ | Field | Registry value → stored game value |
95
+ | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
96
+ | `baseShieldStrength` | `Type7` 155→156 |
97
+ | `masslock` | `Orca` 16→15; `Cutter` 27→26; `Viper_MkIV` 7→8; `Asp_Scout` 8→9; `Mandalay` 11→12; `PantherMkII` 27→25; `LakonMiner` 16→15; `Explorer_NX` 19→21; `SmallCombat01_NX` 10→11; `MediumTransport01` absent→16 |
98
+ | `reserveFuelCapacity` | `Mandalay` 0.52→0.5; `PantherMkII` 1.16→1.11; `LakonMiner` 0.77→0.6; `SmallCombat01_NX` 0.57→0.61 |
99
+ | `heatCapacity` | `Dolphin` 165→245; `Python_NX` 316→260; `Type8` 226→236; `Mandalay` 250→245; `Corsair` 230→280; `PantherMkII` 250→329; `LakonMiner` 289→300; `Explorer_NX` 250→341; `SmallCombat01_NX` 237→263; `MediumTransport01` absent→279 |
100
+ | `heatDissipation` | `Python_NX` 52→52.05; `Type8` 36.5→36.45; `CobraMkV` 40.5→40.63; `Corsair` 52→52.05; `PantherMkII` 62.5→62.45; `LakonMiner` 52.15→52.05; `Explorer_NX` 72.1→71.93; `SmallCombat01_NX` 39.85→37.93; `MediumTransport01` absent→49.35 |
101
+ | `maximumSpeed` | `Type9_Military` 179→180; `TypeX_3` 204→200; `CobraMkV` 291→290; `PantherMkII` 181→180; `LakonMiner` 272→270; `SmallCombat01_NX` 271→270 |
102
+ | `boost` | `Type9_Military` 219→220; `CobraMkV` 412→410; `LakonMiner` 367→365 |
103
+ | `pitch` | `Type9_Military` 20→22; `Krait_MkII` 26→31; `TypeX` 39→38; `TypeX_3` 32→35; `Krait_Light` 26→31; `Mamba` 27→30; `Python_NX` 37.72→37; `CobraMkV` 45.61→45; `SmallCombat01_NX` 51.4→50 |
104
+ | `roll` | `Type9_Military` 20→40; `TypeX` 92→90; `Mamba` 80→75; `Python_NX` 92.76→91; `CobraMkV` 121.62→120; `SmallCombat01_NX` 123.36→120 |
105
+ | `yaw` | `Python_NX` 12.74→12.5; `CobraMkV` 33.45→33; `SmallCombat01_NX` 24.67→24 |
106
106
 
107
107
  - **`heatDissipation` is the hull's audited maximum cooling rate.** Coriolis-data carries no
108
108
  dissipation figure at all, and the game shows a player none: it is a community
@@ -127,6 +127,27 @@ identity from FDevIDs, stats and slots from coriolis-data, joined on `symbol`.
127
127
  (`FrameShiftDrive`, `HugeHardpoint1`, `TinyHardpoint2`, `Slot01_Size6`, `Military01`,
128
128
  `PlanetaryApproachSuite`).
129
129
 
130
+ ### Gunsights
131
+
132
+ - **File:** `gunsights.jsonc` (48 player-flyable hulls, 234 weapon hardpoints).
133
+ - **Source:** in-game gunsight observations from the in-game verification snapshot
134
+ pinned above.
135
+ - **Derivation:** each observation is joined to `ships.jsonc` by case-insensitive hull
136
+ symbol. Its hardpoints are joined by exact journal slot key to the hardpoints returned
137
+ by `enumerateSlots`, then written in the existing `Ship.hardpoints` order. One observed
138
+ identity absent from the player-flyable hull catalogue is discarded.
139
+ - **Fields retained:** only the camera-relative horizontal and vertical offsets, in
140
+ metres, as `[horizontalOffsetMetres, verticalOffsetMetres]`. Every observed fixed-weapon
141
+ direction coefficient is exactly zero, so those coefficients carry no information and
142
+ are omitted. Hull identity is already the map key; display names, slot keys and
143
+ hardpoint counts are recoverable from `ships.jsonc`; all other acquisition and
144
+ presentation metadata is unnecessary for projection and is dropped.
145
+ - **Precision:** offsets remain at their observed numeric precision. Exact zero and tiny
146
+ near-zero values both describe centerline mounts; the residuals are numeric precision,
147
+ not meaningful sub-millimetre displacements to interpret or normalize.
148
+ - **Manual corrections:** none. All 48 hulls and all 234 of their hardpoint slot keys join
149
+ one-to-one without correction.
150
+
130
151
  ### Default loadouts
131
152
 
132
153
  - **File:** `default-loadouts.jsonc` (48 hulls, 831 fitted modules).
@@ -358,10 +379,12 @@ FDevIDs, stats from coriolis-data and EDSY, joined on `symbol`.
358
379
  II's `Int_MkIIAgileBoost_Engine_*` thrusters.
359
380
  - **A fuel tank is the one module built for two kinds of mount:** it is `fuelTank`
360
381
  and also fits any optional slot large enough, exactly as the game sells it.
361
- - **`kind` is the engineering family.** The 1028 records mapped by
382
+ - **`kind` is the ordinary engineering-menu family.** The 1026 records mapped by
362
383
  `engineering-options.jsonc` repeat that map's group key in the compact on-disk `kind`
363
- field. The remaining 171 records carry no `kind` because the pinned sources publish
364
- no engineering family for them. The group source, derivation, split
384
+ field. Of the remaining 173 records, 171 carry no `kind` because the pinned sources
385
+ publish no engineering family for them; the fixed Mining Laser and Abrasion Blaster
386
+ omit the family as the in-game correction documented under Engineering options below.
387
+ The group source, derivation, split
365
388
  Guardian families and coverage are documented under Engineering options below; this
366
389
  field is a projection of that map, not a separate classification source.
367
390
  - **Stats source:** coriolis-data `modules/**` for the mechanical, defence, power and
@@ -1323,7 +1346,7 @@ up straight through with no disambiguation at all. Both paths are evidence that
1323
1346
  - **Availability is a property of the module, not of the blueprint.** A Pulse Laser and a
1324
1347
  Rail Gun both take the Efficient blueprint but offer different experimental effects, so
1325
1348
  "which experimentals go with blueprint X" has no single answer. Modules are therefore
1326
- grouped (53 groups covering 1028 engineerable modules) and each group lists the
1349
+ grouped (52 groups covering 1026 ordinary engineering menus) and each group lists the
1327
1350
  `blueprints` and `experimentals` it offers.
1328
1351
  - **Source:** EDSY `eddb.js`, whose module-group tables carry each group's `blueprints`
1329
1352
  and `expeffects` lists and which modules belong to each group, and whose module records
@@ -1331,8 +1354,10 @@ up straight through with no disambiguation at all. Both paths are evidence that
1331
1354
  denials that narrow either list. Second registry: coriolis-data
1332
1355
  `modifications/modules.json`, which carries the same per-group lists keyed by the
1333
1356
  journal `BlueprintName`s this catalogue joins on.
1334
- - **Coverage: every group EDSY's `mtype` table gives a `blueprints:` key.** That is 53
1335
- groups over 1028 modules, including bulkheads (the 241 ship armour records), life
1357
+ - **Coverage: every retained group EDSY's `mtype` table gives a `blueprints:` key.** After
1358
+ the Mining Laser and Abrasion Blaster corrections below, that is 52 groups over 1026
1359
+ modules, including
1360
+ bulkheads (the 241 ship armour records), life
1336
1361
  support, sensors, the Detailed Surface Scanner, cargo racks, refineries, AFMUs, fuel
1337
1362
  scoops, FSD interdictors and boosters, Guardian module and shield reinforcement, the
1338
1363
  four engineerable limpet controllers, chaff, heat sink and caustic sink launchers,
@@ -1359,18 +1384,25 @@ up straight through with no disambiguation at all. Both paths are evidence that
1359
1384
  - **14 modules are absent because upstream denies them every blueprint:** eight AX
1360
1385
  multi-cannons (all but the two gimballed), five of the seven mining tools, and the
1361
1386
  Mk II Plasma Shock Accelerator — which is why `antiXenoMultiCannons` holds 2 of that
1362
- family's 10 modules, `miningToolsLasers` 2 of its 7 and `plasmaAccelerators` 4 of its 5.
1387
+ family's 10 modules and `plasmaAccelerators` 4 of its 5. The other two mining tools
1388
+ are the manually corrected Mining Laser and Abrasion Blaster below, so all seven lack
1389
+ an ordinary menu and the empty `miningToolsLasers` group is not retained.
1363
1390
  The ten plain Module Reinforcement Packages are denied their family's only recipe
1364
1391
  and are absent too, which leaves `moduleReinforcements` holding the ten Guardian
1365
1392
  packages.
1366
- - **The 171 modules absent take no engineering.** Whole families first, both registries
1393
+ - **The 173 modules absent have no ordinary engineering menu.** For 171 this comes from
1394
+ the pinned registries. Whole families first, both registries
1367
1395
  agreeing: fuel tanks, passenger cabins, the repair/recon/research/decontamination and
1368
1396
  multi-limpet controllers, meta-alloy and ordinary module reinforcement, the Pulse Wave
1369
1397
  Analyser, the mining launchers, Shock Cannons, Nanite Torpedo Pylons, fighter and
1370
1398
  vehicle hangars, the docking computers and Supercruise Assist, the module stabilisers,
1371
1399
  the planetary approach suites, the cargo hatch and
1372
1400
  the AX utility modules (Xeno Scanners, Shutdown Field Neutralisers), followed by the
1373
- individually denied modules described above.
1401
+ individually denied modules described above. The other two are the fixed Mining Laser
1402
+ and Abrasion Blaster, corrected from the registry-derived result below. They and the
1403
+ size-5 class-2 Module Reinforcement Package within the registry-derived 171 have no
1404
+ stock menu, but their purchased Mercenary articles remain upgradeable through their
1405
+ bespoke recipes.
1374
1406
  - **EDSY's `_X_` prefix means "not applicable" and is honoured**, not stripped: the
1375
1407
  Detailed Surface Scanner's group lists only `iss_er` (`Sensor_Expanded`), because its
1376
1408
  three other entries are `_X_`-marked. The `Decorative_*` entries on the remote-release
@@ -1396,14 +1428,14 @@ up straight through with no disambiguation at all. Both paths are evidence that
1396
1428
  the nine further groups it carries a list for —
1397
1429
  20 in all, every one an exact match. Chaff, heat sink, point defence and ECMs keep the
1398
1430
  generic `Misc_*` ids: there coriolis agrees with EDSY.
1399
- - **13 groups rest on EDSY alone**, because coriolis carries no blueprint list for
1431
+ - **12 retained groups rest on EDSY alone**, because coriolis carries no blueprint list for
1400
1432
  them at all: the nine Guardian-only groups (`guardianPowerPlants`,
1401
1433
  `guardianPowerDistributors`, `guardianHullReinforcements`, `moduleReinforcements`,
1402
1434
  `shieldReinforcements`, `fsdBoosters`, `guardianGauss`, `guardianPlasma`,
1403
- `guardianShard`), `antiXenoMissileRacks`, `experimentalWeapons`,
1404
- `miningToolsLasers` and `antiXenoMultiCannons`. That is coriolis being
1435
+ `guardianShard`), `antiXenoMissileRacks`, `experimentalWeapons` and
1436
+ `antiXenoMultiCannons`. That is coriolis being
1405
1437
  silent rather than contradicting — its Guardian and anti-xeno groups are empty
1406
- objects — but it means the second registry corroborates 40 of the 53 groups, not
1438
+ objects — but it means the second registry corroborates 40 of the 52 groups, not
1407
1439
  all of them. The Guardian-weapon menus are independently settled by the in-game
1408
1440
  observations below: stock weapons take Anti-Guardian Zone Resistance alone, while
1409
1441
  the pre-engineered articles are final.
@@ -1433,19 +1465,30 @@ up straight through with no disambiguation at all. Both paths are evidence that
1433
1465
  - **File order is derivable:** `modules` is written group by group in the order `groups`
1434
1466
  declares them, and within a group in module-catalogue order, so a re-derivation from the
1435
1467
  same sources reproduces the file rather than reshuffling it.
1436
- - **`exclusions` are the exceptions, and they are real.** 24 modules take their group's
1468
+ - **`exclusions` are the exceptions, and they are real.** 23 modules take their group's
1437
1469
  blueprints but not all of its experimental effects: 13 Multi-cannons cannot take Phasing
1438
1470
  Sequence, six dumbfire racks cannot take Drag Munitions, four missile racks are short of
1439
- Penetrator Munitions or FSD Interrupt, and the small fixed Abrasion Blaster takes none
1440
- at all. Upstream these are an exclusion map (with a wildcard for "none of them"); here
1441
- the wildcard is expanded to the explicit list. A module absent from `exclusions` takes
1442
- its whole group's list. Five mining tools
1471
+ Penetrator Munitions or FSD Interrupt. Upstream these are an exclusion map. A module
1472
+ absent from `exclusions` takes its whole group's list. All seven mining tools
1443
1473
  that would otherwise be listed here are absent from the catalogue entirely, taking no
1444
- blueprint either.
1445
- - **Kept deliberately:** the Abrasion Blaster stays in `modules` (it has a blueprint) even
1446
- though its experimental list is empty. That distinction carries most of the catalogue:
1447
- 30 of the 53 groups offer no experimental at all, so 388 of the 1028 grouped modules
1448
- have an empty experimental list while retaining blueprints.
1474
+ ordinary blueprint either.
1475
+ - **The fixed Mining Laser and Abrasion Blaster have no ordinary engineering menu.** Both
1476
+ are removed from `modules`, despite EDSY assigning them to `miningToolsLasers` with
1477
+ `Weapon_LongRange`; the Abrasion Blaster is also removed from `exclusions`, where EDSY
1478
+ denies the group's experimental effect. Direct in-game menu confirmation recorded
1479
+ 2026-08-15 UTC establishes that neither stock article can receive ordinary engineering;
1480
+ there is no immutable revision for an in-game observation. Their `Weapon_LongRange`
1481
+ grade-5 states are separately catalogued reward articles with hand-set modifiers that
1482
+ identify rather than reproduce them. This does not remove the Mercenary routes: both
1483
+ are acquired at grade 1 with bespoke recipes (`MiningLaser_LongRange` and
1484
+ `AbrasionBlaster_FarReaching`), whose sourced grades 2–5 remain applicable through the
1485
+ `pre-engineered.jsonc` purchase records. A re-derivation from EDSY must reapply this
1486
+ correction by dropping both module mappings, the now-empty `miningToolsLasers` group,
1487
+ both projected `kind` fields in `modules-hardpoint.jsonc`, and the Abrasion Blaster's
1488
+ now-unreachable experimental exclusion.
1489
+ - **An empty experimental menu is still distinct from no menu.** 30 of the 52 groups offer
1490
+ no experimental at all, so 387 of the 1026 grouped modules have an empty experimental
1491
+ list while retaining blueprints.
1449
1492
  - **Key form:** the Anti-Guardian blueprint is listed under `GuardianModule_Sturdy`, the id
1450
1493
  a Loadout writes and the one EDSY uses — the same and only spelling `blueprints.jsonc`
1451
1494
  keys it under.
package/README.md CHANGED
@@ -84,6 +84,7 @@ build.powerBudget();
84
84
  build.shieldMetrics();
85
85
  build.armourMetrics();
86
86
  build.weaponMetrics();
87
+ build.weaponsCapacitorMetrics({ weaponsPips: 2 });
87
88
 
88
89
  build.toSlefString({
89
90
  header: { appName: 'MyApp', appVersion: '1.0.0' },
@@ -93,7 +94,7 @@ build.toSlefString({
93
94
  `ShipLoadout` imports every ship and module catalogue so it can resolve any build.
94
95
  When only one calculation is required, use the data-free leaf modules under
95
96
  `ships/jump-range`, `ships/power`, `ships/shields`, `ships/armour`, `ships/weapons`,
96
- `ships/ammunition`, `ships/heat` or `ships/resistances`.
97
+ `ships/weapons-capacitor`, `ships/ammunition`, `ships/heat` or `ships/resistances`.
97
98
 
98
99
  `build.validation` reports validity and operational completeness. Potentially incomplete
99
100
  aggregates are nullable and have a diagnostic counterpart (`cargoCapacityResult`,
@@ -140,7 +141,10 @@ normally writes that id in its `Engineering` block, but a few blueprint aliases
140
141
  collide across module families; `resolveBlueprintForModule` resolves those journal
141
142
  spellings. Functions that ask what engineering a module accepts therefore take the
142
143
  module's `symbol`; functions that look up a recipe, effect or modification take its
143
- `fdname`.
144
+ `fdname`. `getDecorativeModifiers` takes both identities to reconstruct the
145
+ journal-style stat block of a fitted decorative transformation;
146
+ `unresolvedDecorativeModifiers` reports any authored labels the module catalogue could
147
+ not compute.
144
148
 
145
149
  Personal-equipment modifications are keyed by their recipe symbol, just as ship
146
150
  blueprints and experimental effects are keyed by `fdname`; there is no second synthetic
@@ -32,8 +32,9 @@ a verbatim copy produced at build time — edit this file, never the copy.
32
32
  (our own implementation) from it: the power budget and its priority groups; loaded speed,
33
33
  boost and rotation through the thruster-mass and ENG-pip curves; shield strength and its
34
34
  mass curve; shield collapse delay, regeneration and SYS-capacitor recovery timing; armour
35
- hit points; resistance stacking with its diminishing returns; and weapon DPS / capacitor
36
- draw / heat. It credits the original Frontier-forum research the formulas come from.
35
+ hit points; resistance stacking with its diminishing returns; weapon DPS / capacitor
36
+ draw / heat; and WEP-pip recharge with weapons-capacitor endurance. It credits the
37
+ original Frontier-forum research the formulas come from.
37
38
  - **The heat model** — the equilibrium heat level a thermal load settles at, how heat
38
39
  moves towards it over time, and the multiplier a drained weapons capacitor puts on a
39
40
  weapon's thermal load — is ported as fact from EDSY's `edsy.js`
@@ -0,0 +1 @@
1
+ function fixedModifierFeatures(modifiers){return modifiers.map(modifier=>({label:modifier.label,method:modifier.method,min:modifier.value,max:modifier.value}))}export{fixedModifierFeatures};//# sourceMappingURL=chunk-4TXQWLIQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ships/internal/fixed-modifier-features.ts"],"names":["fixedModifierFeatures","modifiers","map","modifier","label","method","min","value","max"],"mappings":"AAgBO,SAASA,sBACZC,WAEA,OAAOA,UAAUC,IAAKC,WAAA,CAClBC,MAAOD,SAASC,MAChBC,OAAQF,SAASE,OACjBC,IAAKH,SAASI,MACdC,IAAKL,SAASI,QAEtB,QAAAP"}
@@ -0,0 +1 @@
1
+ import{buildModuleCatalogue}from"./chunk-E45EDCYH.js";var modules_hardpoint_default=[{symbol:"Hpt_PulseLaser_Fixed_Small",kind:"pulseLasers",name:"Pulse Laser",mount:"Fixed",class:1,rating:"F",mass:2,integrity:40,powerDraw:.39,bootTime:0,damage:2.05,damageDistribution:{thermal:1},rateOfFire:3.846154,burstInterval:.26,distributorDraw:.3,thermalLoad:.33,armourPiercing:20,maximumRange:3e3,falloffRange:500,cost:2200},{symbol:"Hpt_PulseLaser_Fixed_Medium",kind:"pulseLasers",name:"Pulse Laser",mount:"Fixed",class:2,rating:"E",mass:4,integrity:51,powerDraw:.6,bootTime:0,damage:3.5,damageDistribution:{thermal:1},rateOfFire:3.448276,burstInterval:.29,distributorDraw:.5,thermalLoad:.56,armourPiercing:35,maximumRange:3e3,falloffRange:500,cost:17600},{symbol:"Hpt_PulseLaser_Fixed_Large",kind:"pulseLasers",name:"Pulse Laser",mount:"Fixed",class:3,rating:"D",mass:8,integrity:64,powerDraw:.9,bootTime:0,damage:5.98,damageDistribution:{thermal:1},rateOfFire:3.030303,burstInterval:.33,distributorDraw:.86,thermalLoad:.96,armourPiercing:52,maximumRange:3e3,falloffRange:500,cost:70400},{symbol:"Hpt_PulseLaser_Fixed_Huge",kind:"pulseLasers",name:"Pulse Laser",mount:"Fixed",class:4,rating:"A",mass:16,integrity:80,powerDraw:1.33,bootTime:0,damage:10.24,damageDistribution:{thermal:1},rateOfFire:2.631579,burstInterval:.38,distributorDraw:1.48,thermalLoad:1.64,armourPiercing:65,maximumRange:3e3,falloffRange:500,cost:177600},{symbol:"Hpt_PulseLaser_Gimbal_Small",kind:"pulseLasers",name:"Pulse Laser",mount:"Gimballed",class:1,rating:"G",mass:2,integrity:40,powerDraw:.39,bootTime:0,damage:1.56,damageDistribution:{thermal:1},rateOfFire:4,burstInterval:.25,distributorDraw:.31,thermalLoad:.31,armourPiercing:20,maximumRange:3e3,falloffRange:500,cost:6600},{symbol:"Hpt_PulseLaser_Gimbal_Medium",kind:"pulseLasers",name:"Pulse Laser",mount:"Gimballed",class:2,rating:"F",mass:4,integrity:51,powerDraw:.6,bootTime:0,damage:2.68,damageDistribution:{thermal:1},rateOfFire:3.571429,burstInterval:.28,distributorDraw:.54,thermalLoad:.54,armourPiercing:35,maximumRange:3e3,falloffRange:500,cost:35400},{symbol:"Hpt_PulseLaser_Gimbal_Large",kind:"pulseLasers",name:"Pulse Laser",mount:"Gimballed",class:3,rating:"E",mass:8,integrity:64,powerDraw:.92,bootTime:0,damage:4.58,damageDistribution:{thermal:1},rateOfFire:3.225806,burstInterval:.31,distributorDraw:.92,thermalLoad:.92,armourPiercing:52,maximumRange:3e3,falloffRange:500,cost:140600},{symbol:"Hpt_PulseLaser_Turret_Small",kind:"pulseLasers",name:"Pulse Laser",mount:"Turreted",class:1,rating:"G",mass:2,integrity:40,powerDraw:.38,bootTime:0,damage:1.19,damageDistribution:{thermal:1},rateOfFire:3.333333,burstInterval:.3,distributorDraw:.19,thermalLoad:.19,armourPiercing:20,maximumRange:3e3,falloffRange:500,cost:26e3},{symbol:"Hpt_PulseLaser_Turret_Medium",kind:"pulseLasers",name:"Pulse Laser",mount:"Turreted",class:2,rating:"F",mass:4,integrity:51,powerDraw:.58,bootTime:0,damage:2.05,damageDistribution:{thermal:1},rateOfFire:3.030303,burstInterval:.33,distributorDraw:.33,thermalLoad:.33,armourPiercing:35,maximumRange:3e3,falloffRange:500,cost:132800},{symbol:"Hpt_PulseLaser_Turret_Large",kind:"pulseLasers",name:"Pulse Laser",mount:"Turreted",class:3,rating:"F",mass:8,integrity:64,powerDraw:.89,bootTime:0,damage:3.5,damageDistribution:{thermal:1},rateOfFire:2.702703,burstInterval:.37,distributorDraw:.56,thermalLoad:.56,armourPiercing:52,maximumRange:3e3,falloffRange:500,cost:400400},{symbol:"Hpt_PulseLaserBurst_Fixed_Small",kind:"burstLasers",name:"Burst Laser",mount:"Fixed",class:1,rating:"F",mass:2,integrity:40,powerDraw:.65,bootTime:0,damage:1.72,damageDistribution:{thermal:1},rateOfFire:4.736842,burstInterval:.5,burstRounds:3,burstRateOfFire:15,distributorDraw:.25,thermalLoad:.38,armourPiercing:20,maximumRange:3e3,falloffRange:500,cost:4400},{symbol:"Hpt_PulseLaserBurst_Fixed_Medium",kind:"burstLasers",name:"Burst Laser",mount:"Fixed",class:2,rating:"E",mass:4,integrity:40,powerDraw:1.05,bootTime:0,damage:3.53,damageDistribution:{thermal:1},rateOfFire:3.695409,burstInterval:.63,burstRounds:3,burstRateOfFire:11,distributorDraw:.5,thermalLoad:.78,armourPiercing:35,maximumRange:3e3,falloffRange:500,cost:23e3},{symbol:"Hpt_PulseLaserBurst_Fixed_Large",kind:"burstLasers",name:"Burst Laser",mount:"Fixed",class:3,rating:"D",mass:8,integrity:64,powerDraw:1.66,bootTime:0,damage:7.73,damageDistribution:{thermal:1},rateOfFire:2.68886,burstInterval:.83,burstRounds:3,burstRateOfFire:7,distributorDraw:1.11,thermalLoad:1.7,armourPiercing:52,maximumRange:3e3,falloffRange:500,cost:140400},{symbol:"Hpt_PulseLaserBurst_Fixed_Huge",kind:"burstLasers",name:"Burst Laser",mount:"Fixed",class:4,rating:"E",mass:16,integrity:80,powerDraw:2.58,bootTime:0,damage:20.61,damageDistribution:{thermal:1},rateOfFire:1.565217,burstInterval:1.25,burstRounds:3,burstRateOfFire:3,distributorDraw:2.98,thermalLoad:4.53,armourPiercing:65,maximumRange:3e3,falloffRange:500,cost:281600},{symbol:"Hpt_PulseLaserBurst_Gimbal_Small",kind:"burstLasers",name:"Burst Laser",mount:"Gimballed",class:1,rating:"G",mass:2,integrity:40,powerDraw:.64,bootTime:0,damage:1.22,damageDistribution:{thermal:1},rateOfFire:5.284974,burstInterval:.45,burstRounds:3,burstRateOfFire:17,distributorDraw:.24,thermalLoad:.34,armourPiercing:20,maximumRange:3e3,falloffRange:500,cost:8600},{symbol:"Hpt_PulseLaserBurst_Gimbal_Medium",kind:"burstLasers",name:"Burst Laser",mount:"Gimballed",class:2,rating:"F",mass:4,integrity:40,powerDraw:1.04,bootTime:0,damage:2.45,damageDistribution:{thermal:1},rateOfFire:4.202586,burstInterval:.56,burstRounds:3,burstRateOfFire:13,distributorDraw:.49,thermalLoad:.67,armourPiercing:35,maximumRange:3e3,falloffRange:500,cost:48500},{symbol:"Hpt_PulseLaserBurst_Gimbal_Large",kind:"burstLasers",name:"Burst Laser",mount:"Gimballed",class:3,rating:"E",mass:8,integrity:64,powerDraw:1.65,bootTime:0,damage:5.16,damageDistribution:{thermal:1},rateOfFire:3.218117,burstInterval:.71,burstRounds:3,burstRateOfFire:9,distributorDraw:1.03,thermalLoad:1.42,armourPiercing:52,maximumRange:3e3,falloffRange:500,cost:281600},{symbol:"Hpt_PulseLaserBurst_Turret_Small",kind:"burstLasers",name:"Burst Laser",mount:"Turreted",class:1,rating:"G",mass:2,integrity:40,powerDraw:.6,bootTime:0,damage:.87,damageDistribution:{thermal:1},rateOfFire:4.79798,burstInterval:.52,burstRounds:3,burstRateOfFire:19,distributorDraw:.139,thermalLoad:.19,armourPiercing:20,maximumRange:3e3,falloffRange:500,cost:52800},{symbol:"Hpt_PulseLaserBurst_Turret_Medium",kind:"burstLasers",name:"Burst Laser",mount:"Turreted",class:2,rating:"F",mass:4,integrity:40,powerDraw:.98,bootTime:0,damage:1.72,damageDistribution:{thermal:1},rateOfFire:3.930131,burstInterval:.63,burstRounds:3,burstRateOfFire:15,distributorDraw:.275,thermalLoad:.38,armourPiercing:35,maximumRange:3e3,falloffRange:500,cost:162800},{symbol:"Hpt_PulseLaserBurst_Turret_Large",kind:"burstLasers",name:"Burst Laser",mount:"Turreted",class:3,rating:"E",mass:8,integrity:64,powerDraw:1.57,bootTime:0,damage:3.53,damageDistribution:{thermal:1},rateOfFire:3.119093,burstInterval:.78,burstRounds:3,burstRateOfFire:11,distributorDraw:.56,thermalLoad:.78,armourPiercing:52,maximumRange:3e3,falloffRange:500,cost:800400},{symbol:"Hpt_BeamLaser_Fixed_Small",kind:"beamLasers",name:"Beam Laser",mount:"Fixed",class:1,rating:"E",mass:2,integrity:40,powerDraw:.62,bootTime:0,damage:9.82,damageDistribution:{thermal:1},distributorDraw:1.94,thermalLoad:3.53,armourPiercing:18,maximumRange:3e3,falloffRange:600,cost:37430},{symbol:"Hpt_BeamLaser_Fixed_Medium",kind:"beamLasers",name:"Beam Laser",mount:"Fixed",class:2,rating:"D",mass:4,integrity:51,powerDraw:1.01,bootTime:0,damage:15.96,damageDistribution:{thermal:1},distributorDraw:3.16,thermalLoad:5.11,armourPiercing:35,maximumRange:3e3,falloffRange:600,cost:299520},{symbol:"Hpt_BeamLaser_Fixed_Large",kind:"beamLasers",name:"Beam Laser",mount:"Fixed",class:3,rating:"C",mass:8,integrity:64,powerDraw:1.62,bootTime:0,damage:25.78,damageDistribution:{thermal:1},distributorDraw:5.1,thermalLoad:7.22,armourPiercing:50,maximumRange:3e3,falloffRange:600,cost:1177600},{symbol:"Hpt_BeamLaser_Fixed_Huge",kind:"beamLasers",name:"Beam Laser",mount:"Fixed",class:4,rating:"A",mass:16,integrity:80,powerDraw:2.61,bootTime:0,damage:41.38,damageDistribution:{thermal:1},distributorDraw:8.19,thermalLoad:9.93,armourPiercing:60,maximumRange:3e3,falloffRange:600,cost:2396160},{symbol:"Hpt_BeamLaser_Gimbal_Small",kind:"beamLasers",name:"Beam Laser",mount:"Gimballed",class:1,rating:"E",mass:2,integrity:40,powerDraw:.6,bootTime:0,damage:7.68,damageDistribution:{thermal:1},distributorDraw:2.11,thermalLoad:3.65,armourPiercing:18,maximumRange:3e3,falloffRange:600,cost:74650},{symbol:"Hpt_BeamLaser_Gimbal_Medium",kind:"beamLasers",name:"Beam Laser",mount:"Gimballed",class:2,rating:"D",mass:4,integrity:51,powerDraw:1,bootTime:0,damage:12.52,damageDistribution:{thermal:1},distributorDraw:3.44,thermalLoad:5.32,armourPiercing:35,maximumRange:3e3,falloffRange:600,cost:500600},{symbol:"Hpt_BeamLaser_Gimbal_Large",kind:"beamLasers",name:"Beam Laser",mount:"Gimballed",class:3,rating:"C",mass:8,integrity:64,powerDraw:1.6,bootTime:0,damage:20.3,damageDistribution:{thermal:1},distributorDraw:5.58,thermalLoad:7.61,armourPiercing:50,maximumRange:3e3,falloffRange:600,cost:2396160},{symbol:"Hpt_BeamLaser_Turret_Small",kind:"beamLasers",name:"Beam Laser",mount:"Turreted",class:1,rating:"F",mass:2,integrity:40,powerDraw:.57,bootTime:0,damage:5.4,damageDistribution:{thermal:1},distributorDraw:1.32,thermalLoad:2.4,armourPiercing:18,maximumRange:3e3,falloffRange:600,cost:5e5},{symbol:"Hpt_BeamLaser_Turret_Medium",kind:"beamLasers",name:"Beam Laser",mount:"Turreted",class:2,rating:"E",mass:4,integrity:51,powerDraw:.93,bootTime:0,damage:8.83,damageDistribution:{thermal:1},distributorDraw:2.16,thermalLoad:3.53,armourPiercing:35,maximumRange:3e3,falloffRange:600,cost:2099900},{symbol:"Hpt_BeamLaser_Turret_Large",kind:"beamLasers",name:"Beam Laser",mount:"Turreted",class:3,rating:"D",mass:8,integrity:64,powerDraw:1.51,bootTime:0,damage:14.36,damageDistribution:{thermal:1},distributorDraw:3.51,thermalLoad:5.11,armourPiercing:50,maximumRange:3e3,falloffRange:600,cost:19399600},{symbol:"Hpt_Cannon_Fixed_Small",kind:"cannons",name:"Cannon",mount:"Fixed",class:1,rating:"D",mass:2,integrity:40,powerDraw:.34,bootTime:0,damage:22.5,damageDistribution:{kinetic:1},rateOfFire:.5,burstInterval:2,clipSize:6,ammoMaximum:120,reloadTime:3,distributorDraw:.46,thermalLoad:1.38,armourPiercing:35,maximumRange:3e3,falloffRange:3e3,shotSpeed:1200,cost:21100},{symbol:"Hpt_Cannon_Fixed_Medium",kind:"cannons",name:"Cannon",mount:"Fixed",class:2,rating:"D",mass:4,integrity:51,powerDraw:.49,bootTime:0,damage:36.875,damageDistribution:{kinetic:1},rateOfFire:.460829,burstInterval:2.17,clipSize:6,ammoMaximum:120,reloadTime:3,distributorDraw:.7,thermalLoad:2.11,armourPiercing:50,maximumRange:3500,falloffRange:3500,shotSpeed:1051.051025,cost:168430},{symbol:"Hpt_Cannon_Fixed_Large",kind:"cannons",name:"Cannon",mount:"Fixed",class:3,rating:"C",mass:8,integrity:64,powerDraw:.67,bootTime:0,damage:55.625,damageDistribution:{kinetic:1},rateOfFire:.420168,burstInterval:2.38,clipSize:6,ammoMaximum:120,reloadTime:3,distributorDraw:1.07,thermalLoad:3.2,armourPiercing:70,maximumRange:4e3,falloffRange:4e3,shotSpeed:959.232605,cost:675200},{symbol:"Hpt_Cannon_Fixed_Huge",kind:"cannons",name:"Cannon",mount:"Fixed",class:4,rating:"B",mass:16,integrity:80,powerDraw:.92,bootTime:0,damage:83.125,damageDistribution:{kinetic:1},rateOfFire:.380228,burstInterval:2.63,clipSize:6,ammoMaximum:120,reloadTime:3,distributorDraw:1.61,thermalLoad:4.83,armourPiercing:90,maximumRange:4500,falloffRange:4500,shotSpeed:900,cost:2700800},{symbol:"Hpt_Cannon_Gimbal_Small",kind:"cannons",name:"Cannon",mount:"Gimballed",class:1,rating:"E",mass:2,integrity:40,powerDraw:.38,bootTime:0,damage:15.92,damageDistribution:{kinetic:1},rateOfFire:.520833,burstInterval:1.92,clipSize:5,ammoMaximum:100,reloadTime:4,distributorDraw:.48,thermalLoad:1.25,armourPiercing:35,maximumRange:3e3,falloffRange:3e3,shotSpeed:1e3,cost:42200},{symbol:"Hpt_Cannon_Gimbal_Medium",kind:"cannons",name:"Cannon",mount:"Gimballed",class:2,rating:"D",mass:4,integrity:51,powerDraw:.54,bootTime:0,damage:25.53,damageDistribution:{kinetic:1},rateOfFire:.480769,burstInterval:2.08,clipSize:5,ammoMaximum:100,reloadTime:4,distributorDraw:.75,thermalLoad:1.92,armourPiercing:50,maximumRange:3500,falloffRange:3500,shotSpeed:875,cost:337600},{symbol:"Hpt_Cannon_Gimbal_Huge",kind:"cannons",name:"Cannon",mount:"Gimballed",class:4,rating:"B",mass:16,integrity:80,powerDraw:1.03,bootTime:0,damage:56.59,damageDistribution:{kinetic:1},rateOfFire:.4,burstInterval:2.5,clipSize:5,ammoMaximum:100,reloadTime:4,distributorDraw:1.72,thermalLoad:4.43,armourPiercing:90,maximumRange:4500,falloffRange:4500,shotSpeed:750,cost:5401600},{symbol:"Hpt_Cannon_Turret_Small",kind:"cannons",name:"Cannon",mount:"Turreted",class:1,rating:"F",mass:2,integrity:40,powerDraw:.32,bootTime:0,damage:12.77,damageDistribution:{kinetic:1},rateOfFire:.4329,burstInterval:2.31,clipSize:5,ammoMaximum:100,reloadTime:4,distributorDraw:.22,thermalLoad:.67,armourPiercing:35,maximumRange:3e3,falloffRange:3e3,shotSpeed:1e3,cost:506400},{symbol:"Hpt_Cannon_Turret_Medium",kind:"cannons",name:"Cannon",mount:"Turreted",class:2,rating:"E",mass:4,integrity:51,powerDraw:.45,bootTime:0,damage:19.79,damageDistribution:{kinetic:1},rateOfFire:.4,burstInterval:2.5,clipSize:5,ammoMaximum:100,reloadTime:4,distributorDraw:.34,thermalLoad:1.03,armourPiercing:50,maximumRange:3500,falloffRange:3500,shotSpeed:875,cost:4051200},{symbol:"Hpt_Cannon_Turret_Large",kind:"cannons",name:"Cannon",mount:"Turreted",class:3,rating:"D",mass:8,integrity:64,powerDraw:.64,bootTime:0,damage:30.34,damageDistribution:{kinetic:1},rateOfFire:.367647,burstInterval:2.72,clipSize:5,ammoMaximum:100,reloadTime:4,distributorDraw:.53,thermalLoad:1.58,armourPiercing:70,maximumRange:4e3,falloffRange:4e3,shotSpeed:800,cost:16204800},{symbol:"Hpt_Slugshot_Fixed_Small",kind:"fragmentCannons",name:"Fragment Cannon",mount:"Fixed",class:1,rating:"E",mass:2,integrity:40,powerDraw:.45,bootTime:0,damage:1.43,damageDistribution:{kinetic:1},roundsPerShot:12,rateOfFire:5.555556,burstInterval:.18,clipSize:3,ammoMaximum:180,reloadTime:5,distributorDraw:.21,thermalLoad:.41,armourPiercing:20,maximumRange:2e3,falloffRange:1800,shotSpeed:667,jitter:5,cost:36e3},{symbol:"Hpt_Slugshot_Fixed_Medium",kind:"fragmentCannons",name:"Fragment Cannon",mount:"Fixed",class:2,rating:"A",mass:4,integrity:51,powerDraw:.74,bootTime:0,damage:2.985,damageDistribution:{kinetic:1},roundsPerShot:12,rateOfFire:5,burstInterval:.2,clipSize:3,ammoMaximum:180,reloadTime:5,distributorDraw:.37,thermalLoad:.74,armourPiercing:30,maximumRange:2e3,falloffRange:1800,shotSpeed:667,jitter:5,cost:291840},{symbol:"Hpt_Slugshot_Fixed_Large",kind:"fragmentCannons",name:"Fragment Cannon",mount:"Fixed",class:3,rating:"C",mass:8,integrity:64,powerDraw:1.02,bootTime:0,damage:4.57,damageDistribution:{kinetic:1},roundsPerShot:12,rateOfFire:4.545455,burstInterval:.22,clipSize:3,ammoMaximum:180,reloadTime:5,distributorDraw:.57,thermalLoad:1.13,armourPiercing:45,maximumRange:2e3,falloffRange:1800,shotSpeed:667,jitter:5,cost:1167360},{symbol:"Hpt_Slugshot_Gimbal_Small",kind:"fragmentCannons",name:"Fragment Cannon",mount:"Gimballed",class:1,rating:"E",mass:2,integrity:40,powerDraw:.59,bootTime:0,damage:1.01,damageDistribution:{kinetic:1},roundsPerShot:12,rateOfFire:5.882353,burstInterval:.17,clipSize:3,ammoMaximum:180,reloadTime:5,distributorDraw:.26,thermalLoad:.44,armourPiercing:20,maximumRange:2e3,falloffRange:1800,shotSpeed:667,jitter:5,cost:54720},{symbol:"Hpt_Slugshot_Gimbal_Medium",kind:"fragmentCannons",name:"Fragment Cannon",mount:"Gimballed",class:2,rating:"D",mass:4,integrity:51,powerDraw:1.03,bootTime:0,damage:2.274,damageDistribution:{kinetic:1},roundsPerShot:12,rateOfFire:5.263158,burstInterval:.19,clipSize:3,ammoMaximum:180,reloadTime:5,distributorDraw:.49,thermalLoad:.84,armourPiercing:30,maximumRange:2e3,falloffRange:1800,shotSpeed:667,jitter:5,cost:437760},{symbol:"Hpt_Slugshot_Turret_Small",kind:"fragmentCannons",name:"Fragment Cannon",mount:"Turreted",class:1,rating:"E",mass:2,integrity:40,powerDraw:.42,bootTime:0,damage:.69,damageDistribution:{kinetic:1},roundsPerShot:12,rateOfFire:4.761905,burstInterval:.21,clipSize:3,ammoMaximum:180,reloadTime:5,distributorDraw:.1,thermalLoad:.2,armourPiercing:20,maximumRange:2e3,falloffRange:1800,shotSpeed:667,jitter:5,cost:182400},{symbol:"Hpt_Slugshot_Turret_Medium",kind:"fragmentCannons",name:"Fragment Cannon",mount:"Turreted",class:2,rating:"D",mass:4,integrity:51,powerDraw:.79,bootTime:0,damage:1.67,damageDistribution:{kinetic:1},roundsPerShot:12,rateOfFire:4.347826,burstInterval:.23,clipSize:3,ammoMaximum:180,reloadTime:5,distributorDraw:.21,thermalLoad:.41,armourPiercing:30,maximumRange:2e3,falloffRange:1800,shotSpeed:667,jitter:5,cost:1459200},{symbol:"Hpt_MultiCannon_Fixed_Small",kind:"multiCannons",name:"Multi-Cannon",mount:"Fixed",class:1,rating:"F",mass:2,integrity:40,powerDraw:.28,bootTime:0,damage:1.12,damageDistribution:{kinetic:1},rateOfFire:7.692308,burstInterval:.13,clipSize:100,ammoMaximum:2100,reloadTime:4,distributorDraw:.06,thermalLoad:.09,armourPiercing:22,maximumRange:4e3,falloffRange:2e3,shotSpeed:1600,cost:9500},{symbol:"Hpt_MultiCannon_Fixed_Medium",kind:"multiCannons",name:"Multi-Cannon",mount:"Fixed",class:2,rating:"E",mass:4,integrity:51,powerDraw:.46,bootTime:0,damage:2.19,damageDistribution:{kinetic:1},rateOfFire:7.142857,burstInterval:.14,clipSize:100,ammoMaximum:2100,reloadTime:4,distributorDraw:.11,thermalLoad:.18,armourPiercing:37,maximumRange:4e3,falloffRange:2e3,shotSpeed:1600,cost:38e3},{symbol:"Hpt_MultiCannon_Fixed_Large",kind:"multiCannons",name:"Multi-Cannon",mount:"Fixed",class:3,rating:"C",mass:8,integrity:64,powerDraw:.64,bootTime:0,damage:3.925,damageDistribution:{kinetic:1},rateOfFire:5.882353,burstInterval:.17,clipSize:100,ammoMaximum:2100,reloadTime:4,distributorDraw:.18,thermalLoad:.28,armourPiercing:54,maximumRange:4e3,falloffRange:2e3,shotSpeed:1600,cost:140400},{symbol:"Hpt_MultiCannon_Fixed_Huge",kind:"multiCannons",name:"Multi-Cannon",mount:"Fixed",class:4,rating:"A",mass:16,integrity:80,powerDraw:.73,bootTime:0,damage:4.625,damageDistribution:{kinetic:1},roundsPerShot:2,rateOfFire:3.030303,burstInterval:.33,clipSize:100,ammoMaximum:2100,reloadTime:4,distributorDraw:.24,thermalLoad:.39,armourPiercing:68,maximumRange:4e3,falloffRange:2e3,shotSpeed:1600,cost:1177600},{symbol:"Hpt_MultiCannon_Gimbal_Small",kind:"multiCannons",name:"Multi-Cannon",mount:"Gimballed",class:1,rating:"G",mass:2,integrity:40,powerDraw:.37,bootTime:0,damage:.82,damageDistribution:{kinetic:1},rateOfFire:8.333333,burstInterval:.12,clipSize:90,ammoMaximum:2100,reloadTime:5,distributorDraw:.07,thermalLoad:.1,armourPiercing:22,maximumRange:4e3,falloffRange:2e3,shotSpeed:1600,cost:14250},{symbol:"Hpt_MultiCannon_Gimbal_Medium",kind:"multiCannons",name:"Multi-Cannon",mount:"Gimballed",class:2,rating:"F",mass:4,integrity:51,powerDraw:.64,bootTime:0,damage:1.64,damageDistribution:{kinetic:1},rateOfFire:7.692308,burstInterval:.13,clipSize:90,ammoMaximum:2100,reloadTime:5,distributorDraw:.14,thermalLoad:.2,armourPiercing:37,maximumRange:4e3,falloffRange:2e3,shotSpeed:1600,cost:57e3},{symbol:"Hpt_MultiCannon_Gimbal_Large",kind:"multiCannons",name:"Multi-Cannon",mount:"Gimballed",class:3,rating:"C",mass:8,integrity:64,powerDraw:.97,bootTime:0,damage:2.84,damageDistribution:{kinetic:1},rateOfFire:6.666667,burstInterval:.15,clipSize:90,ammoMaximum:2100,reloadTime:5,distributorDraw:.25,thermalLoad:.34,armourPiercing:54,maximumRange:4e3,falloffRange:2e3,shotSpeed:1600,cost:578436},{symbol:"Hpt_MultiCannon_Turret_Small",kind:"multiCannons",name:"Multi-Cannon",mount:"Turreted",class:1,rating:"G",mass:2,integrity:40,powerDraw:.26,bootTime:0,damage:.56,damageDistribution:{kinetic:1},rateOfFire:7.142857,burstInterval:.14,clipSize:90,ammoMaximum:2100,reloadTime:4,distributorDraw:.03,thermalLoad:.04,armourPiercing:22,maximumRange:4e3,falloffRange:2e3,shotSpeed:1600,cost:81600},{symbol:"Hpt_MultiCannon_Turret_Medium",kind:"multiCannons",name:"Multi-Cannon",mount:"Turreted",class:2,rating:"F",mass:4,integrity:51,powerDraw:.5,bootTime:0,damage:1.17,damageDistribution:{kinetic:1},rateOfFire:6.25,burstInterval:.16,clipSize:90,ammoMaximum:2100,reloadTime:4,distributorDraw:.06,thermalLoad:.09,armourPiercing:37,maximumRange:4e3,falloffRange:2e3,shotSpeed:1600,cost:1292800},{symbol:"Hpt_MultiCannon_Turret_Large",kind:"multiCannons",name:"Multi-Cannon",mount:"Turreted",class:3,rating:"E",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:8,integrity:64,powerDraw:.86,bootTime:0,damage:2.23,damageDistribution:{kinetic:1},rateOfFire:5.263158,burstInterval:.19,clipSize:90,ammoMaximum:2100,reloadTime:4,distributorDraw:.16,thermalLoad:.19,armourPiercing:54,maximumRange:4e3,falloffRange:2e3,shotSpeed:1600,cost:3794600},{symbol:"Hpt_PlasmaAccelerator_Fixed_Medium",kind:"plasmaAccelerators",name:"Plasma Accelerator",mount:"Fixed",class:2,rating:"C",mass:4,integrity:51,powerDraw:1.43,bootTime:0,damage:54.3,damageDistribution:{kinetic:.2,thermal:.2,absolute:.6},rateOfFire:.330033,burstInterval:3.03,clipSize:5,ammoMaximum:100,reloadTime:6,distributorDraw:8.65,thermalLoad:15.58,armourPiercing:100,maximumRange:3500,falloffRange:2e3,shotSpeed:875,cost:834200},{symbol:"Hpt_PlasmaAccelerator_Fixed_Large",kind:"plasmaAccelerators",name:"Plasma Accelerator",mount:"Fixed",class:3,rating:"B",mass:8,integrity:64,powerDraw:1.97,bootTime:0,damage:83.4,damageDistribution:{kinetic:.2,thermal:.2,absolute:.6},rateOfFire:.289855,burstInterval:3.45,clipSize:5,ammoMaximum:100,reloadTime:6,distributorDraw:13.6,thermalLoad:21.75,armourPiercing:100,maximumRange:3500,falloffRange:2e3,shotSpeed:875,cost:3051200},{symbol:"Hpt_PlasmaAccelerator_Fixed_Huge",kind:"plasmaAccelerators",name:"Plasma Accelerator",mount:"Fixed",class:4,rating:"A",mass:16,integrity:80,powerDraw:2.63,bootTime:0,damage:125.25,damageDistribution:{kinetic:.2,thermal:.2,absolute:.6},rateOfFire:.25,burstInterval:4,clipSize:5,ammoMaximum:100,reloadTime:6,distributorDraw:21.04,thermalLoad:29.46,armourPiercing:100,maximumRange:3500,falloffRange:2e3,shotSpeed:875,cost:13793600},{symbol:"Hpt_Railgun_Fixed_Small",kind:"railGuns",name:"Rail Gun",mount:"Fixed",class:1,rating:"D",mass:2,integrity:40,powerDraw:1.15,bootTime:0,damage:23.34,damageDistribution:{kinetic:.3333333333333333,thermal:.6666666666666666},rateOfFire:1.587302,burstInterval:.63,chargeTime:1.2,clipSize:1,ammoMaximum:80,reloadTime:1,distributorDraw:2.69,thermalLoad:12,armourPiercing:100,maximumRange:3e3,falloffRange:1e3,cost:51600},{symbol:"Hpt_Railgun_Fixed_Medium",kind:"railGuns",name:"Rail Gun",mount:"Fixed",class:2,rating:"B",mass:4,integrity:51,powerDraw:1.63,bootTime:0,damage:41.53,damageDistribution:{kinetic:.3333333333333333,thermal:.6666666666666666},rateOfFire:1.204819,burstInterval:.83,chargeTime:1.2,clipSize:1,ammoMaximum:80,reloadTime:1,distributorDraw:5.11,thermalLoad:20,armourPiercing:100,maximumRange:3e3,falloffRange:1e3,cost:412800},{symbol:"Hpt_BasicMissileRack_Fixed_Small",kind:"missiles",name:"Seeker Missile Rack",mount:"Fixed",guidance:"Seeker",class:1,rating:"B",mass:2,integrity:40,powerDraw:.6,bootTime:0,damage:40,damageDistribution:{explosive:1},rateOfFire:.333333,burstInterval:3,clipSize:6,ammoMaximum:6,reloadTime:12,distributorDraw:.24,thermalLoad:3.6,armourPiercing:60,shotSpeed:625,cost:72600},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",kind:"missiles",name:"Seeker Missile Rack",mount:"Fixed",guidance:"Seeker",class:2,rating:"B",mass:4,integrity:51,powerDraw:1.2,bootTime:0,damage:40,damageDistribution:{explosive:1},rateOfFire:.333333,burstInterval:3,clipSize:6,ammoMaximum:18,reloadTime:12,distributorDraw:.24,thermalLoad:3.6,armourPiercing:60,shotSpeed:625,cost:512400},{symbol:"Hpt_BasicMissileRack_Fixed_Large",kind:"missiles",name:"Seeker Missile Rack",mount:"Fixed",guidance:"Seeker",class:3,rating:"A",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:8,integrity:64,powerDraw:1.62,bootTime:0,damage:40,damageDistribution:{explosive:1},rateOfFire:.333333,burstInterval:3,clipSize:6,ammoMaximum:36,reloadTime:12,distributorDraw:.24,thermalLoad:3.6,armourPiercing:60,shotSpeed:625,cost:1471030},{symbol:"Hpt_MineLauncher_Fixed_Small",kind:"mines",name:"Mine Launcher",mount:"Fixed",class:1,rating:"I",mass:2,integrity:40,powerDraw:.4,bootTime:0,damage:44,damageDistribution:{thermal:.5,explosive:.5},rateOfFire:1,burstInterval:1,clipSize:1,ammoMaximum:36,reloadTime:2,distributorDraw:0,thermalLoad:5,armourPiercing:60,cost:24260},{symbol:"Hpt_MineLauncher_Fixed_Medium",kind:"mines",name:"Mine Launcher",mount:"Fixed",class:2,rating:"I",mass:4,integrity:51,powerDraw:.4,bootTime:0,damage:44,damageDistribution:{thermal:.5,explosive:.5},rateOfFire:1,burstInterval:1,clipSize:3,ammoMaximum:72,reloadTime:6.6,distributorDraw:0,thermalLoad:7.5,armourPiercing:60,cost:294080},{symbol:"Hpt_AdvancedTorpPylon_Fixed_Small",kind:"torpedoes",name:"Torpedo Pylon",mount:"Fixed",guidance:"Seeker",class:1,rating:"I",mass:2,integrity:40,powerDraw:.4,bootTime:0,damage:120,damageDistribution:{explosive:1},rateOfFire:1,burstInterval:1,clipSize:1,ammoMaximum:1,reloadTime:5,distributorDraw:0,thermalLoad:45,armourPiercing:1e4,shotSpeed:250,cost:11200},{symbol:"Hpt_AdvancedTorpPylon_Fixed_Medium",kind:"torpedoes",name:"Torpedo Pylon",mount:"Fixed",guidance:"Seeker",class:2,rating:"I",mass:4,integrity:51,powerDraw:.4,bootTime:0,damage:120,damageDistribution:{explosive:1},rateOfFire:1,burstInterval:1,clipSize:2,ammoMaximum:2,reloadTime:5,distributorDraw:0,thermalLoad:50,armourPiercing:1e4,shotSpeed:250,cost:44800},{symbol:"Hpt_AdvancedTorpPylon_Fixed_Large",kind:"torpedoes",name:"Torpedo Pylon",mount:"Fixed",guidance:"Seeker",class:3,rating:"I",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:8,integrity:64,powerDraw:.6,bootTime:0,damage:120,damageDistribution:{explosive:1},rateOfFire:1,burstInterval:1,clipSize:4,ammoMaximum:4,reloadTime:5,distributorDraw:0,thermalLoad:55,armourPiercing:1e4,shotSpeed:250,cost:157960},{symbol:"Hpt_MiningLaser_Fixed_Small",name:"Mining Laser",mount:"Fixed",class:1,rating:"D",mass:2,integrity:40,powerDraw:.5,bootTime:0,damage:2,damageDistribution:{thermal:1},distributorDraw:1.5,thermalLoad:2,armourPiercing:18,maximumRange:500,falloffRange:300,cost:6800},{symbol:"Hpt_MiningLaser_Fixed_Medium",name:"Mining Laser",mount:"Fixed",class:2,rating:"D",mass:2,integrity:51,powerDraw:.75,bootTime:0,damage:4,damageDistribution:{thermal:1},distributorDraw:3,thermalLoad:4,armourPiercing:18,maximumRange:500,falloffRange:300,cost:22576},{symbol:"Hpt_DumbfireMissileRack_Fixed_Small",kind:"missiles",name:"Missile Rack",mount:"Fixed",guidance:"Dumbfire",class:1,rating:"B",mass:2,integrity:40,powerDraw:.4,bootTime:0,damage:50,damageDistribution:{explosive:1},rateOfFire:.5,burstInterval:2,clipSize:8,ammoMaximum:16,reloadTime:5,distributorDraw:.24,thermalLoad:3.6,armourPiercing:60,shotSpeed:750,cost:32175},{symbol:"Hpt_DumbfireMissileRack_Fixed_Medium",kind:"missiles",name:"Missile Rack",mount:"Fixed",guidance:"Dumbfire",class:2,rating:"B",mass:4,integrity:51,powerDraw:1.2,bootTime:0,damage:50,damageDistribution:{explosive:1},rateOfFire:.5,burstInterval:2,clipSize:12,ammoMaximum:48,reloadTime:5,distributorDraw:.24,thermalLoad:3.6,armourPiercing:60,shotSpeed:750,cost:240400},{symbol:"Hpt_Cannon_Gimbal_Large",kind:"cannons",name:"Cannon",mount:"Gimballed",class:3,rating:"C",mass:8,integrity:64,powerDraw:.75,bootTime:0,damage:37.421001,damageDistribution:{kinetic:1},rateOfFire:.440529,burstInterval:2.27,clipSize:5,ammoMaximum:100,reloadTime:4,distributorDraw:1.14,thermalLoad:2.93,armourPiercing:70,maximumRange:4e3,falloffRange:4e3,shotSpeed:800,cost:1350400},{symbol:"Hpt_Slugshot_Gimbal_Large",kind:"fragmentCannons",name:"Fragment Cannon",mount:"Gimballed",class:3,rating:"C",mass:8,integrity:64,powerDraw:1.55,bootTime:0,damage:3.77,damageDistribution:{kinetic:1},roundsPerShot:12,rateOfFire:4.761905,burstInterval:.21,clipSize:3,ammoMaximum:180,reloadTime:5,distributorDraw:.81,thermalLoad:1.4,armourPiercing:45,maximumRange:2e3,falloffRange:1800,shotSpeed:667,jitter:5,cost:1751040},{symbol:"Hpt_Slugshot_Turret_Large",kind:"fragmentCannons",name:"Fragment Cannon",mount:"Turreted",class:3,rating:"C",mass:8,integrity:64,powerDraw:1.29,bootTime:0,damage:2.985,damageDistribution:{kinetic:1},roundsPerShot:12,rateOfFire:4,burstInterval:.25,clipSize:3,ammoMaximum:180,reloadTime:5,distributorDraw:.37,thermalLoad:.74,armourPiercing:45,maximumRange:2e3,falloffRange:1800,shotSpeed:667,jitter:5,cost:5836800},{symbol:"Hpt_PlasmaAccelerator_Fixed_Large_Advanced",kind:"plasmaAccelerators",name:"Advanced Plasma Accelerator",mount:"Fixed",class:3,rating:"B",entitlement:"ELITE_SPECIFIC_V_POWER_200050",mass:8,integrity:64,powerDraw:1.97,bootTime:0,damage:34.4,damageDistribution:{kinetic:.2,thermal:.2,absolute:.6},rateOfFire:.833333,burstInterval:1.2,clipSize:20,ammoMaximum:300,reloadTime:6,distributorDraw:5.5,thermalLoad:11,armourPiercing:100,maximumRange:3500,falloffRange:2e3,shotSpeed:875,cost:4119120},{symbol:"Hpt_MiningLaser_Fixed_Small_Advanced",name:"Mining Lance",mount:"Fixed",class:1,rating:"D",entitlement:"ELITE_SPECIFIC_V_POWER_200120",mass:2,integrity:40,powerDraw:.7,bootTime:0,damage:8,damageDistribution:{thermal:1},distributorDraw:1.75,thermalLoad:6,armourPiercing:18,maximumRange:2e3,falloffRange:500,cost:13600},{symbol:"Hpt_Railgun_Fixed_Medium_Burst",kind:"railGuns",name:"Imperial Hammer Rail Gun",mount:"Fixed",class:2,rating:"B",entitlement:"ELITE_SPECIFIC_V_POWER_200010",mass:4,integrity:51,powerDraw:1.63,bootTime:0,damage:15,damageDistribution:{kinetic:.3333333333333333,thermal:.6666666666666666},rateOfFire:4.090909,burstInterval:.4,burstRounds:3,burstRateOfFire:6,chargeTime:1.2,clipSize:3,ammoMaximum:240,reloadTime:1.2,distributorDraw:2,thermalLoad:11,armourPiercing:100,maximumRange:3e3,falloffRange:1e3,cost:619200},{symbol:"Hpt_PulseLaser_Fixed_Medium_Disruptor",kind:"pulseLasers",name:"Pulse Disruptor Laser",mount:"Fixed",class:2,rating:"E",entitlement:"ELITE_SPECIFIC_V_POWER_200070",mass:4,integrity:51,powerDraw:.7,bootTime:0,damage:2.8,damageDistribution:{thermal:1},rateOfFire:1.666667,burstInterval:.6,distributorDraw:.9,thermalLoad:1,armourPiercing:35,falloffRange:500,cost:26400},{symbol:"Hpt_Slugshot_Fixed_Large_Range",kind:"fragmentCannons",name:"Pacifier Frag-Cannon",mount:"Fixed",class:3,rating:"C",entitlement:"ELITE_SPECIFIC_V_POWER_200140",mass:8,integrity:64,powerDraw:1.02,bootTime:0,damage:3.96,damageDistribution:{kinetic:1},roundsPerShot:12,rateOfFire:4.545455,burstInterval:.22,clipSize:3,ammoMaximum:180,reloadTime:5,distributorDraw:.57,thermalLoad:1.13,armourPiercing:45,maximumRange:3e3,falloffRange:2800,shotSpeed:1e3,jitter:1.7,cost:1751040},{symbol:"Hpt_DrunkMissileRack_Fixed_Medium",kind:"missiles",name:"Pack-Hound Missile Rack",mount:"Fixed",guidance:"Swarm",class:2,rating:"B",entitlement:"ELITE_SPECIFIC_V_POWER_200080",mass:4,integrity:51,powerDraw:1.2,bootTime:0,damage:7.5,damageDistribution:{explosive:1},roundsPerShot:4,rateOfFire:2,burstInterval:.5,clipSize:12,ammoMaximum:120,reloadTime:5,distributorDraw:.24,thermalLoad:3.6,armourPiercing:60,shotSpeed:600,cost:768600},{symbol:"Hpt_MultiCannon_Fixed_Small_Strong",kind:"multiCannons",name:"Enforcer Cannon",mount:"Fixed",class:1,rating:"F",entitlement:"ELITE_SPECIFIC_V_POWER_200090",mass:2,integrity:40,powerDraw:.28,bootTime:0,damage:2.85,damageDistribution:{kinetic:1},rateOfFire:4.347826,burstInterval:.23,clipSize:60,ammoMaximum:1e3,reloadTime:4,distributorDraw:.12,thermalLoad:.18,armourPiercing:30,maximumRange:4500,falloffRange:3e3,shotSpeed:1800,cost:13980},{symbol:"Hpt_BeamLaser_Fixed_Small_Heat",kind:"beamLasers",name:"Retributor Beam Laser",mount:"Fixed",class:1,rating:"E",entitlement:"ELITE_SPECIFIC_V_POWER_200060",mass:2,integrity:40,powerDraw:.62,bootTime:0,damage:4.91,damageDistribution:{thermal:1},distributorDraw:2.52,thermalLoad:2.7,armourPiercing:18,maximumRange:3e3,falloffRange:800,cost:56150},{symbol:"Hpt_MineLauncher_Fixed_Small_Impulse",kind:"mines",name:"Shock Mine Launcher",mount:"Fixed",class:1,rating:"I",mass:2,integrity:40,powerDraw:.4,bootTime:0,damage:32,damageDistribution:{thermal:.5,explosive:.5},rateOfFire:1,burstInterval:1,clipSize:1,ammoMaximum:36,reloadTime:2,distributorDraw:0,thermalLoad:5,armourPiercing:60,cost:36390},{symbol:"Hpt_PulseLaserBurst_Fixed_Small_Scatter",kind:"burstLasers",name:"Cytoscrambler Burst Laser",mount:"Fixed",class:1,rating:"F",entitlement:"ELITE_SPECIFIC_V_POWER_200030",mass:2,integrity:40,powerDraw:.8,bootTime:0,damage:3.6,damageDistribution:{thermal:1},rateOfFire:7.619048,burstInterval:.7,burstRounds:8,burstRateOfFire:20,distributorDraw:.31,thermalLoad:.28,armourPiercing:1,maximumRange:1e3,falloffRange:600,jitter:1.7,cost:8800},{symbol:"Hpt_BeamLaser_Gimbal_Huge",kind:"beamLasers",name:"Beam Laser",mount:"Gimballed",class:4,rating:"A",mass:16,integrity:80,powerDraw:2.57,bootTime:0,damage:32.68,damageDistribution:{thermal:1},distributorDraw:8.99,thermalLoad:10.62,armourPiercing:60,maximumRange:3e3,falloffRange:600,cost:8746160},{symbol:"Hpt_PulseLaser_Gimbal_Huge",kind:"pulseLasers",name:"Pulse Laser",mount:"Gimballed",class:4,rating:"A",mass:16,integrity:80,powerDraw:1.37,bootTime:0,damage:7.82,damageDistribution:{thermal:1},rateOfFire:2.777778,burstInterval:.36,distributorDraw:1.56,thermalLoad:1.56,armourPiercing:65,maximumRange:3e3,falloffRange:500,cost:877600},{symbol:"Hpt_MultiCannon_Gimbal_Huge",kind:"multiCannons",name:"Multi-Cannon",mount:"Gimballed",class:4,rating:"A",mass:16,integrity:80,powerDraw:1.22,bootTime:0,damage:3.46,damageDistribution:{kinetic:1},roundsPerShot:2,rateOfFire:3.367003,burstInterval:.297,clipSize:90,ammoMaximum:2100,reloadTime:5,distributorDraw:.37,thermalLoad:.51,armourPiercing:68,maximumRange:4e3,falloffRange:2e3,shotSpeed:1600,cost:6377600},{symbol:"Hpt_PulseLaserBurst_Gimbal_Huge",kind:"burstLasers",name:"Burst Laser",mount:"Gimballed",class:4,rating:"E",mass:16,integrity:64,powerDraw:2.59,bootTime:0,damage:12.09,damageDistribution:{thermal:1},rateOfFire:2.142857,burstInterval:1,burstRounds:3,burstRateOfFire:5,distributorDraw:2.41,thermalLoad:3.33,armourPiercing:65,maximumRange:3e3,falloffRange:500,cost:1245600},{symbol:"Hpt_DumbfireMissileRack_Fixed_Medium_Lasso",kind:"missiles",name:"Rocket Propelled FSD Disruptor",mount:"Fixed",guidance:"Dumbfire",class:2,rating:"B",entitlement:"ELITE_SPECIFIC_V_POWER_200100",mass:4,integrity:51,powerDraw:1.2,bootTime:0,damage:40,damageDistribution:{explosive:1},rateOfFire:.333333,burstInterval:3,clipSize:12,ammoMaximum:48,reloadTime:5,distributorDraw:.24,thermalLoad:3.6,armourPiercing:60,shotSpeed:750,cost:1951040},{symbol:"Hpt_MiningLaser_Turret_Small",name:"Mining Laser",mount:"Turreted",class:1,rating:"D",mass:2,integrity:40,powerDraw:.5,bootTime:0,damage:2,damageDistribution:{thermal:1},distributorDraw:1.5,thermalLoad:2,armourPiercing:18,maximumRange:500,falloffRange:300,cost:9400},{symbol:"Hpt_MiningLaser_Turret_Medium",name:"Mining Laser",mount:"Turreted",class:2,rating:"D",mass:2,integrity:51,powerDraw:.75,bootTime:0,damage:4,damageDistribution:{thermal:1},distributorDraw:3,thermalLoad:4,armourPiercing:18,maximumRange:500,falloffRange:300,cost:32576},{symbol:"Hpt_FlakMortar_Fixed_Medium",name:"Remote Release Flak Launcher",mount:"Fixed",class:2,rating:"B",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:4,integrity:51,powerDraw:1.2,bootTime:0,damage:34,damageDistribution:{explosive:1},rateOfFire:.5,burstInterval:2,clipSize:1,ammoMaximum:32,reloadTime:2,distributorDraw:.24,thermalLoad:3.6,armourPiercing:60,falloffRange:1e5,shotSpeed:550,cost:261800},{symbol:"Hpt_ATDumbfireMissile_Fixed_Medium",kind:"antiXenoMissileRacks",name:"AX Missile Rack",mount:"Fixed",guidance:"Dumbfire",class:2,rating:"B",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:4,integrity:51,powerDraw:1.2,bootTime:0,damage:27,damageDistribution:{explosive:1,antiXeno:1.5925925925925926},rateOfFire:.5,burstInterval:2,clipSize:8,ammoMaximum:64,reloadTime:5,distributorDraw:.14,thermalLoad:2.4,armourPiercing:60,shotSpeed:750,cost:540900,damageComponents:{explosive:27,antiXeno:43},projectileRange:{maximumBoundary:0,falloffBoundary:1e5}},{symbol:"Hpt_ATDumbfireMissile_Fixed_Large",kind:"antiXenoMissileRacks",name:"AX Missile Rack",mount:"Fixed",guidance:"Dumbfire",class:3,rating:"A",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:8,integrity:64,powerDraw:1.62,bootTime:0,damage:27,damageDistribution:{explosive:1,antiXeno:1.5925925925925926},rateOfFire:.5,burstInterval:2,clipSize:12,ammoMaximum:128,reloadTime:5,distributorDraw:.24,thermalLoad:3.6,armourPiercing:60,shotSpeed:750,cost:1352250,damageComponents:{explosive:27,antiXeno:43},projectileRange:{maximumBoundary:0,falloffBoundary:1e5}},{symbol:"Hpt_ATMultiCannon_Fixed_Medium",name:"AX Multi-Cannon",mount:"Fixed",class:2,rating:"E",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:4,integrity:51,powerDraw:.46,bootTime:0,damage:1.12,damageDistribution:{kinetic:1,antiXeno:1.9553571428571426},rateOfFire:7.142857,burstInterval:.14,clipSize:100,ammoMaximum:2100,reloadTime:4,distributorDraw:.11,thermalLoad:.18,armourPiercing:17,maximumRange:4e3,falloffRange:2e3,shotSpeed:1600,cost:379e3,damageComponents:{kinetic:1.12,antiXeno:2.19}},{symbol:"Hpt_ATMultiCannon_Fixed_Large",name:"AX Multi-Cannon",mount:"Fixed",class:3,rating:"C",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:8,integrity:64,powerDraw:.64,bootTime:0,damage:2.19,damageDistribution:{kinetic:1,antiXeno:1.7922374429223744},rateOfFire:5.882353,burstInterval:.17,clipSize:100,ammoMaximum:2100,reloadTime:4,distributorDraw:.18,thermalLoad:.28,armourPiercing:33,maximumRange:4e3,falloffRange:2e3,shotSpeed:1600,cost:1181500,damageComponents:{kinetic:2.19,antiXeno:3.925}},{symbol:"Hpt_ATDumbfireMissile_Turret_Medium",name:"AX Missile Rack",mount:"Turreted",guidance:"Dumbfire",class:2,rating:"B",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:4,integrity:51,powerDraw:1.2,bootTime:0,damage:20,damageDistribution:{explosive:1,antiXeno:1.85},rateOfFire:.5,burstInterval:2,clipSize:8,ammoMaximum:64,reloadTime:5,distributorDraw:.08,thermalLoad:1.5,armourPiercing:60,shotSpeed:750,cost:2022700,damageComponents:{explosive:20,antiXeno:37},projectileRange:{maximumBoundary:5e3,falloffBoundary:1e5}},{symbol:"Hpt_ATDumbfireMissile_Turret_Large",name:"AX Missile Rack",mount:"Turreted",guidance:"Dumbfire",class:3,rating:"A",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:8,integrity:64,powerDraw:1.75,bootTime:0,damage:20,damageDistribution:{explosive:1,antiXeno:1.85},rateOfFire:.5,burstInterval:2,clipSize:12,ammoMaximum:128,reloadTime:5,distributorDraw:.14,thermalLoad:1.9,armourPiercing:60,shotSpeed:750,cost:4056750,damageComponents:{explosive:20,antiXeno:37},projectileRange:{maximumBoundary:5e3,falloffBoundary:1e5}},{symbol:"Hpt_FlakMortar_Turret_Medium",name:"Remote Release Flak Launcher",mount:"Turreted",class:2,rating:"B",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:4,integrity:51,powerDraw:1.2,bootTime:0,damage:34,damageDistribution:{explosive:1},rateOfFire:.5,burstInterval:2,clipSize:1,ammoMaximum:32,reloadTime:2,distributorDraw:.24,thermalLoad:3.6,armourPiercing:60,falloffRange:1e5,shotSpeed:550,cost:1259200},{symbol:"Hpt_ATMultiCannon_Turret_Medium",name:"AX Multi-Cannon",mount:"Turreted",class:2,rating:"F",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:4,integrity:51,powerDraw:.5,bootTime:0,damage:.56,damageDistribution:{kinetic:1,antiXeno:2.089285714285714},rateOfFire:6.25,burstInterval:.16,clipSize:90,ammoMaximum:2100,reloadTime:4,distributorDraw:.06,thermalLoad:.09,armourPiercing:17,maximumRange:4e3,falloffRange:2e3,shotSpeed:1600,cost:1826500,damageComponents:{kinetic:.56,antiXeno:1.17}},{symbol:"Hpt_ATMultiCannon_Turret_Large",name:"AX Multi-Cannon",mount:"Turreted",class:3,rating:"E",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:8,integrity:64,powerDraw:.64,bootTime:0,damage:1.12,damageDistribution:{kinetic:1,antiXeno:1.9553571428571426},rateOfFire:6.25,burstInterval:.16,clipSize:90,ammoMaximum:2100,reloadTime:4,distributorDraw:.06,thermalLoad:.09,armourPiercing:33,maximumRange:4e3,falloffRange:2e3,shotSpeed:1600,cost:3821600,damageComponents:{kinetic:1.12,antiXeno:2.19}},{symbol:"Hpt_Guardian_GaussCannon_Fixed_Medium",kind:"guardianGauss",name:"Guardian Gauss Cannon",mount:"Fixed",class:2,rating:"B",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_GUARDIAN_GAUSS_FIXED_MEDIUM",mass:4,integrity:42,powerDraw:2.61,bootTime:0,damage:38.5,damageDistribution:{thermal:1,antiXeno:1},rateOfFire:1.204819,burstInterval:.83,burstRounds:1,clipSize:1,ammoMaximum:80,reloadTime:1,distributorDraw:7.2,thermalLoad:25,armourPiercing:140,maximumRange:3e3,falloffRange:1500,cost:543801,damageComponents:{thermal:38.5,antiXeno:38.5}},{symbol:"Hpt_CausticMissile_Fixed_Medium",kind:"experimentalWeapons",name:"Enzyme Missile Rack",mount:"Fixed",guidance:"Dumbfire",class:2,rating:"B",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_CAUSTIC_MEDIUM",mass:4,integrity:51,powerDraw:1.2,bootTime:0,damage:5,damageDistribution:{explosive:.8,unclassified:.2},rateOfFire:.5,burstInterval:2,clipSize:8,ammoMaximum:64,reloadTime:5,distributorDraw:.08,thermalLoad:1.5,armourPiercing:60,shotSpeed:750,cost:480501,damageComponents:{explosive:4,unclassified:[1]}},{symbol:"Hpt_FlechetteLauncher_Fixed_Medium",name:"Remote Release Flechette Launcher",mount:"Fixed",class:2,rating:"B",entitlement:"ELITE_HORIZONS_V_FLECHETTE_FIXED_MEDIUM",mass:4,integrity:51,powerDraw:1.2,bootTime:0,damage:13,damageDistribution:{kinetic:1},rateOfFire:.5,burstInterval:2,clipSize:1,ammoMaximum:72,reloadTime:2,distributorDraw:.24,thermalLoad:3.6,armourPiercing:80,shotSpeed:550,cost:353761},{symbol:"Hpt_FlechetteLauncher_Turret_Medium",name:"Remote Release Flechette Launcher",mount:"Turreted",class:2,rating:"B",entitlement:"ELITE_HORIZONS_V_FLECHETTE_TURRET_MEDIUM",mass:4,integrity:51,powerDraw:1.2,bootTime:0,damage:13,damageDistribution:{kinetic:1},rateOfFire:.5,burstInterval:2,clipSize:1,ammoMaximum:72,reloadTime:2,distributorDraw:.24,thermalLoad:3.6,armourPiercing:70,shotSpeed:550,cost:1279200},{symbol:"Hpt_Guardian_PlasmaLauncher_Fixed_Medium",kind:"guardianPlasma",name:"Guardian Plasma Charger",mount:"Fixed",class:2,rating:"B",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_GUARDIAN_PLASMA_FIXED_MEDIUM",mass:4,integrity:42,powerDraw:2.13,bootTime:0,damage:2.5,damageDistribution:{absolute:1,antiXeno:1},rateOfFire:5,burstInterval:.2,clipSize:15,ammoMaximum:200,reloadTime:3,distributorDraw:1.25,thermalLoad:5.21,armourPiercing:80,maximumRange:3e3,falloffRange:1e3,shotSpeed:1200,cost:567761,damageComponents:{absolute:2.5,antiXeno:2.5}},{symbol:"Hpt_Guardian_PlasmaLauncher_Turret_Medium",kind:"guardianPlasma",name:"Guardian Plasma Charger",mount:"Turreted",class:2,rating:"E",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_GUARDIAN_PLASMA_TURRET_MEDIUM",mass:4,integrity:42,powerDraw:2.01,bootTime:0,damage:2,damageDistribution:{absolute:1,antiXeno:1},rateOfFire:5,burstInterval:.2,clipSize:15,ammoMaximum:200,reloadTime:3,distributorDraw:1.4,thermalLoad:5.8,armourPiercing:80,maximumRange:3e3,falloffRange:1e3,shotSpeed:1200,cost:1659200,damageComponents:{absolute:2,antiXeno:2}},{symbol:"Hpt_Guardian_ShardCannon_Fixed_Medium",kind:"guardianShard",name:"Guardian Shard Cannon",mount:"Fixed",class:2,rating:"A",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_GUARDIAN_SHARD_FIXED_MEDIUM",mass:4,integrity:42,powerDraw:1.21,bootTime:0,damage:3.7235,damageDistribution:{thermal:1,antiXeno:1},roundsPerShot:12,rateOfFire:1.666667,burstInterval:.6,clipSize:5,ammoMaximum:180,reloadTime:5,distributorDraw:.65,thermalLoad:1.2,armourPiercing:45,maximumRange:1700,falloffRange:1700,shotSpeed:1133.333374,jitter:5,cost:507761,damageComponents:{thermal:3.7235,antiXeno:3.7235}},{symbol:"Hpt_Guardian_ShardCannon_Turret_Medium",kind:"guardianShard",name:"Guardian Shard Cannon",mount:"Turreted",class:2,rating:"D",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_GUARDIAN_SHARD_TURRET_MEDIUM",mass:4,integrity:42,powerDraw:1.16,bootTime:0,damage:2.17,damageDistribution:{thermal:1,antiXeno:1},roundsPerShot:12,rateOfFire:1.666667,burstInterval:.6,clipSize:5,ammoMaximum:180,reloadTime:5,distributorDraw:.57,thermalLoad:1.09,armourPiercing:45,maximumRange:1700,falloffRange:1700,shotSpeed:1133,jitter:5,cost:1767001,damageComponents:{thermal:2.17,antiXeno:2.17}},{symbol:"Hpt_PlasmaShockCannon_Fixed_Medium",name:"Shock Cannon",mount:"Fixed",class:2,rating:"D",entitlement:"ELITE_HORIZONS_V_PLASMASHOCK_FIXED_MEDIUM",mass:4,integrity:51,powerDraw:.57,bootTime:0,damage:12.96,damageDistribution:{kinetic:1},rateOfFire:7.843137,burstInterval:.1275,clipSize:16,ammoMaximum:880,reloadTime:6,distributorDraw:.47,thermalLoad:1.8,armourPiercing:40,maximumRange:3e3,falloffRange:2500,shotSpeed:1200,cost:367501},{symbol:"Hpt_PlasmaShockCannon_Gimbal_Medium",name:"Shock Cannon",mount:"Gimballed",class:2,rating:"D",entitlement:"ELITE_HORIZONS_V_PLASMASHOCK_GIMBAL_MEDIUM",mass:4,integrity:51,powerDraw:.61,bootTime:0,damage:10.21,damageDistribution:{kinetic:1},rateOfFire:7.843137,burstInterval:.1275,clipSize:16,ammoMaximum:880,reloadTime:6,distributorDraw:.58,thermalLoad:2.1,armourPiercing:40,maximumRange:3e3,falloffRange:2500,shotSpeed:1200,cost:565200},{symbol:"Hpt_PlasmaShockCannon_Turret_Medium",name:"Shock Cannon",mount:"Turreted",class:2,rating:"E",entitlement:"ELITE_HORIZONS_V_PLASMASHOCK_TURRET_MEDIUM",mass:4,integrity:51,powerDraw:.5,bootTime:0,damage:8.96,damageDistribution:{kinetic:1},rateOfFire:7.843137,burstInterval:.1275,clipSize:16,ammoMaximum:880,reloadTime:6,distributorDraw:.39,thermalLoad:1.24,armourPiercing:40,maximumRange:3e3,falloffRange:2500,shotSpeed:1200,jitter:0,cost:1359200},{symbol:"Hpt_Guardian_ShardCannon_Fixed_Large",kind:"guardianShard",name:"Guardian Shard Cannon",mount:"Fixed",class:3,rating:"C",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_GUARDIAN_SHARD_FIXED_LARGE",mass:8,integrity:51,powerDraw:1.68,bootTime:0,damage:5.225,damageDistribution:{thermal:1,antiXeno:1},roundsPerShot:12,rateOfFire:1.666667,burstInterval:.6,clipSize:5,ammoMaximum:180,reloadTime:5,distributorDraw:1.4,thermalLoad:2.2,armourPiercing:60,maximumRange:1700,falloffRange:1700,shotSpeed:1133,jitter:5,cost:1461350,damageComponents:{thermal:5.225,antiXeno:5.225}},{symbol:"Hpt_Guardian_ShardCannon_Turret_Large",kind:"guardianShard",name:"Guardian Shard Cannon",mount:"Turreted",class:3,rating:"D",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_GUARDIAN_SHARD_TURRET_LARGE",mass:8,integrity:51,powerDraw:1.39,bootTime:0,damage:3.1,damageDistribution:{thermal:1,antiXeno:1},roundsPerShot:12,rateOfFire:1.666667,burstInterval:.6,clipSize:5,ammoMaximum:180,reloadTime:5,distributorDraw:1.2,thermalLoad:1.98,armourPiercing:60,maximumRange:1700,falloffRange:1700,shotSpeed:1133,jitter:5,cost:5865026,damageComponents:{thermal:3.1,antiXeno:3.1}},{symbol:"Hpt_PlasmaShockCannon_Fixed_Large",name:"Shock Cannon",mount:"Fixed",class:3,rating:"C",entitlement:"ELITE_HORIZONS_V_PLASMASHOCK_FIXED_LARGE",mass:8,integrity:64,powerDraw:.89,bootTime:0,damage:18.14,damageDistribution:{kinetic:1},rateOfFire:7.843137,burstInterval:.1275,clipSize:16,ammoMaximum:880,reloadTime:6,distributorDraw:.92,thermalLoad:2.66,armourPiercing:60,maximumRange:3e3,falloffRange:2500,shotSpeed:1200,jitter:0,cost:1015750},{symbol:"Hpt_PlasmaShockCannon_Gimbal_Large",name:"Shock Cannon",mount:"Gimballed",class:3,rating:"C",entitlement:"ELITE_HORIZONS_V_PLASMASHOCK_GIMBAL_LARGE",mass:8,integrity:64,powerDraw:.89,bootTime:0,damage:14.87,damageDistribution:{kinetic:1},rateOfFire:7.843137,burstInterval:.1275,clipSize:16,ammoMaximum:880,reloadTime:6,distributorDraw:1.07,thermalLoad:3.12,armourPiercing:60,maximumRange:3e3,falloffRange:2500,shotSpeed:1200,cost:2249050},{symbol:"Hpt_PlasmaShockCannon_Turret_Large",name:"Shock Cannon",mount:"Turreted",class:3,rating:"D",entitlement:"ELITE_HORIZONS_V_PLASMASHOCK_TURRET_LARGE",mass:8,integrity:64,powerDraw:.64,bootTime:0,damage:12.26,damageDistribution:{kinetic:1},rateOfFire:7.843137,burstInterval:.1275,clipSize:16,ammoMaximum:880,reloadTime:6,distributorDraw:.79,thermalLoad:2.2,armourPiercing:60,maximumRange:3e3,falloffRange:2500,shotSpeed:1200,cost:6050201},{symbol:"Hpt_Guardian_PlasmaLauncher_Fixed_Large",kind:"guardianPlasma",name:"Guardian Plasma Charger",mount:"Fixed",class:3,rating:"C",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_GUARDIAN_PLASMA_FIXED_LARGE",mass:8,integrity:51,powerDraw:3.1,bootTime:0,damage:3.5,damageDistribution:{absolute:1,antiXeno:1},rateOfFire:5,burstInterval:.2,clipSize:15,ammoMaximum:200,reloadTime:3,distributorDraw:2.42,thermalLoad:6.15,armourPiercing:95,maximumRange:3e3,falloffRange:1e3,shotSpeed:1200,cost:1423301,damageComponents:{absolute:3.5,antiXeno:3.5}},{symbol:"Hpt_Guardian_PlasmaLauncher_Turret_Large",kind:"guardianPlasma",name:"Guardian Plasma Charger",mount:"Turreted",class:3,rating:"D",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_GUARDIAN_PLASMA_TURRET_LARGE",mass:8,integrity:51,powerDraw:2.53,bootTime:0,damage:3,damageDistribution:{absolute:1,antiXeno:1},rateOfFire:5,burstInterval:.2,clipSize:15,ammoMaximum:200,reloadTime:3,distributorDraw:2.6,thermalLoad:6.4,armourPiercing:95,maximumRange:3e3,falloffRange:1e3,shotSpeed:1200,cost:5495200,damageComponents:{absolute:3,antiXeno:3}},{symbol:"Hpt_DumbfireMissileRack_Fixed_Large",kind:"missiles",name:"Missile Rack",mount:"Fixed",guidance:"Dumbfire",class:3,rating:"A",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:8,integrity:64,powerDraw:1.62,bootTime:0,damage:50,damageDistribution:{explosive:1},rateOfFire:.5,burstInterval:2,clipSize:12,ammoMaximum:96,reloadTime:5,distributorDraw:.24,thermalLoad:3.6,armourPiercing:60,shotSpeed:750,cost:1021500},{symbol:"Hpt_PlasmaShockCannon_Turret_Small",name:"Shock Cannon",mount:"Turreted",class:1,rating:"F",entitlement:"ELITE_HORIZONS_V_PLASMASHOCK_TURRET_SMALL",mass:2,integrity:40,powerDraw:.54,bootTime:0,damage:4.47,damageDistribution:{kinetic:1},rateOfFire:7.843137,burstInterval:.1275,clipSize:16,ammoMaximum:880,reloadTime:6,distributorDraw:.21,thermalLoad:.69,armourPiercing:25,maximumRange:3e3,falloffRange:2500,shotSpeed:1200,cost:364e3},{symbol:"Hpt_PlasmaShockCannon_Gimbal_Small",name:"Shock Cannon",mount:"Gimballed",class:1,rating:"E",entitlement:"ELITE_HORIZONS_V_PLASMASHOCK_GIMBAL_SMALL",mass:2,integrity:40,powerDraw:.47,bootTime:0,damage:6.91,damageDistribution:{kinetic:1},rateOfFire:7.843137,burstInterval:.1275,clipSize:16,ammoMaximum:880,reloadTime:6,distributorDraw:.39,thermalLoad:1.45,armourPiercing:25,maximumRange:3e3,falloffRange:2500,shotSpeed:1200,cost:137501},{symbol:"Hpt_PlasmaShockCannon_Fixed_Small",name:"Shock Cannon",mount:"Fixed",class:1,rating:"D",entitlement:"ELITE_HORIZONS_V_PLASMASHOCK_FIXED_SMALL",mass:2,integrity:40,powerDraw:.41,bootTime:0,damage:8.64,damageDistribution:{kinetic:1},rateOfFire:7.843137,burstInterval:.1275,clipSize:16,ammoMaximum:880,reloadTime:6,distributorDraw:.27,thermalLoad:1.14,armourPiercing:25,maximumRange:3e3,falloffRange:2500,shotSpeed:1200,cost:65941},{symbol:"Hpt_Guardian_PlasmaLauncher_Turret_Small",kind:"guardianPlasma",name:"Guardian Plasma Charger",mount:"Turreted",class:1,rating:"F",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_GUARDIAN_PLASMA_TURRET_SMALL",mass:2,integrity:34,powerDraw:1.6,bootTime:0,damage:1,damageDistribution:{absolute:1,antiXeno:1},rateOfFire:5,burstInterval:.2,clipSize:15,ammoMaximum:200,reloadTime:3,distributorDraw:.8,thermalLoad:5.01,armourPiercing:65,maximumRange:3e3,falloffRange:1e3,shotSpeed:1200,cost:484050,damageComponents:{absolute:1,antiXeno:1}},{symbol:"Hpt_Guardian_PlasmaLauncher_Fixed_Small",kind:"guardianPlasma",name:"Guardian Plasma Charger",mount:"Fixed",class:1,rating:"D",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_GUARDIAN_PLASMA_FIXED_SMALL",mass:2,integrity:34,powerDraw:1.4,bootTime:0,damage:1.5,damageDistribution:{absolute:1,antiXeno:1},rateOfFire:5,burstInterval:.2,clipSize:15,ammoMaximum:200,reloadTime:3,distributorDraw:.68,thermalLoad:4.21,armourPiercing:65,maximumRange:3e3,falloffRange:1e3,shotSpeed:1200,cost:176500,damageComponents:{absolute:1.5,antiXeno:1.5}},{symbol:"Hpt_Guardian_ShardCannon_Turret_Small",kind:"guardianShard",name:"Guardian Shard Cannon",mount:"Turreted",class:1,rating:"F",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_GUARDIAN_SHARD_TURRET_SMALL",mass:2,integrity:34,powerDraw:.72,bootTime:0,damage:1.01,damageDistribution:{thermal:1,antiXeno:1},roundsPerShot:12,rateOfFire:1.666667,burstInterval:.6,clipSize:5,ammoMaximum:180,reloadTime:5,distributorDraw:.36,thermalLoad:.58,armourPiercing:30,maximumRange:1700,falloffRange:1700,shotSpeed:1133,jitter:5,cost:502e3,damageComponents:{thermal:1.01,antiXeno:1.01}},{symbol:"Hpt_Guardian_ShardCannon_Fixed_Small",kind:"guardianShard",name:"Guardian Shard Cannon",mount:"Fixed",class:1,rating:"D",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_GUARDIAN_SHARD_FIXED_SMALL",mass:2,integrity:34,powerDraw:.87,bootTime:0,damage:1.82,damageDistribution:{thermal:1,antiXeno:1},roundsPerShot:12,rateOfFire:1.666667,burstInterval:.6,clipSize:5,ammoMaximum:180,reloadTime:5,distributorDraw:.42,thermalLoad:.69,armourPiercing:30,maximumRange:1700,falloffRange:1700,shotSpeed:1133,jitter:5,cost:151650,damageComponents:{thermal:1.82,antiXeno:1.82}},{symbol:"Hpt_Guardian_GaussCannon_Fixed_Small",kind:"guardianGauss",name:"Guardian Gauss Cannon",mount:"Fixed",class:1,rating:"D",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_GUARDIAN_GAUSS_FIXED_SMALL",mass:2,integrity:40,powerDraw:1.91,bootTime:0,damage:22,damageDistribution:{thermal:1,antiXeno:1},rateOfFire:1.204819,burstInterval:.83,clipSize:1,ammoMaximum:80,reloadTime:1,distributorDraw:3.8,thermalLoad:15,armourPiercing:140,maximumRange:3e3,falloffRange:1500,cost:167250,damageComponents:{thermal:22,antiXeno:22}},{symbol:"Hpt_Mining_SubSurfDispMisle_Fixed_Small",name:"Sub-Surface Displacement Missile",mount:"Fixed",guidance:"Seeker",class:1,rating:"B",mass:2,integrity:40,powerDraw:.42,bootTime:0,damage:5,damageDistribution:{explosive:1},rateOfFire:.5,burstInterval:2,clipSize:1,ammoMaximum:32,reloadTime:2,distributorDraw:.18,thermalLoad:2.25,armourPiercing:25,shotSpeed:550,cost:12600,projectileRange:{maximumBoundary:0,falloffBoundary:1e5}},{symbol:"Hpt_Mining_SubSurfDispMisle_Turret_Small",name:"Sub-Surface Displacement Missile",mount:"Turreted",guidance:"Seeker",class:1,rating:"B",mass:2,integrity:40,powerDraw:.53,bootTime:0,damage:5,damageDistribution:{explosive:1},rateOfFire:.5,burstInterval:2,clipSize:1,ammoMaximum:32,reloadTime:2,distributorDraw:.16,thermalLoad:2.25,armourPiercing:25,shotSpeed:550,cost:38750,projectileRange:{maximumBoundary:0,falloffBoundary:1e5}},{symbol:"Hpt_Mining_SubSurfDispMisle_Fixed_Medium",name:"Sub-Surface Displacement Missile",mount:"Fixed",guidance:"Seeker",class:2,rating:"B",mass:4,integrity:51,powerDraw:1.01,bootTime:0,damage:5,damageDistribution:{explosive:1},rateOfFire:.5,burstInterval:2,clipSize:1,ammoMaximum:96,reloadTime:2,distributorDraw:.21,thermalLoad:2.9,armourPiercing:25,shotSpeed:550,cost:122170,projectileRange:{maximumBoundary:0,falloffBoundary:1e5}},{symbol:"Hpt_Mining_SubSurfDispMisle_Turret_Medium",name:"Sub-Surface Displacement Missile",mount:"Turreted",guidance:"Seeker",class:2,rating:"B",mass:4,integrity:51,powerDraw:.93,bootTime:0,damage:5,damageDistribution:{explosive:1},rateOfFire:.5,burstInterval:2,clipSize:1,ammoMaximum:96,reloadTime:2,distributorDraw:.18,thermalLoad:2.9,armourPiercing:25,shotSpeed:550,cost:381750,projectileRange:{maximumBoundary:0,falloffBoundary:1e5}},{symbol:"Hpt_Mining_AbrBlstr_Fixed_Small",name:"Abrasion Blaster",mount:"Fixed",class:1,rating:"D",mass:2,integrity:40,powerDraw:.34,bootTime:0,damage:4,damageDistribution:{thermal:1},rateOfFire:5,burstInterval:.2,clipSize:1,reloadTime:0,distributorDraw:2,thermalLoad:2,armourPiercing:18,maximumRange:1e3,falloffRange:1e3,shotSpeed:667,cost:9700},{symbol:"Hpt_Mining_AbrBlstr_Turret_Small",name:"Abrasion Blaster",mount:"Turreted",class:1,rating:"D",mass:2,integrity:40,powerDraw:.47,bootTime:0,damage:4,damageDistribution:{thermal:1},rateOfFire:5,burstInterval:.2,clipSize:1,reloadTime:0,distributorDraw:2,thermalLoad:1.8,armourPiercing:18,maximumRange:1e3,falloffRange:1e3,shotSpeed:667,cost:27480},{symbol:"Hpt_Mining_SeismChrgWarhd_Fixed_Medium",name:"Seismic Charge Launcher",mount:"Fixed",guidance:"Seeker",class:2,rating:"B",mass:4,integrity:51,powerDraw:1.2,bootTime:0,damage:15,damageDistribution:{explosive:1},rateOfFire:1,burstInterval:1,clipSize:1,ammoMaximum:72,reloadTime:1,distributorDraw:.24,thermalLoad:3.6,armourPiercing:35,shotSpeed:350,cost:153110,projectileRange:{maximumBoundary:0,falloffBoundary:1e5}},{symbol:"Hpt_Mining_SeismChrgWarhd_Turret_Medium",name:"Seismic Charge Launcher",mount:"Turreted",guidance:"Seeker",class:2,rating:"B",mass:4,integrity:51,powerDraw:1.2,bootTime:0,damage:15,damageDistribution:{explosive:1},rateOfFire:1,burstInterval:1,clipSize:1,ammoMaximum:72,reloadTime:1,distributorDraw:.24,thermalLoad:3.6,armourPiercing:35,shotSpeed:350,cost:445570,projectileRange:{maximumBoundary:0,falloffBoundary:1e5}},{symbol:"Hpt_MultiCannon_Fixed_Medium_Advanced",kind:"multiCannons",name:"Advanced Multi-Cannon",mount:"Fixed",class:2,rating:"E",mass:4,integrity:51,powerDraw:.46,bootTime:0,damage:2.19,damageDistribution:{kinetic:1},rateOfFire:7.142857,burstInterval:.14,clipSize:100,ammoMaximum:2100,reloadTime:4,distributorDraw:.11,thermalLoad:.18,armourPiercing:37,maximumRange:4e3,falloffRange:2e3,shotSpeed:1600,cost:38e3},{symbol:"Hpt_MultiCannon_Fixed_Small_Advanced",kind:"multiCannons",name:"Advanced Multi-Cannon",mount:"Fixed",class:1,rating:"F",mass:2,integrity:40,powerDraw:.28,bootTime:0,damage:1.12,damageDistribution:{kinetic:1},rateOfFire:7.692308,burstInterval:.13,clipSize:100,ammoMaximum:2100,reloadTime:4,distributorDraw:.06,thermalLoad:.09,armourPiercing:22,maximumRange:4e3,falloffRange:2e3,shotSpeed:1600,cost:9500},{symbol:"Hpt_DumbfireMissileRack_Fixed_Small_Advanced",kind:"missiles",name:"Advanced Missile Rack",mount:"Fixed",guidance:"Dumbfire",class:1,rating:"B",mass:2,integrity:40,powerDraw:.4,bootTime:0,damage:50,damageDistribution:{explosive:1},rateOfFire:.5,burstInterval:2,clipSize:8,ammoMaximum:64,reloadTime:5,distributorDraw:.24,thermalLoad:3.6,armourPiercing:60,shotSpeed:750,cost:32180},{symbol:"Hpt_DumbfireMissileRack_Fixed_Medium_Advanced",kind:"missiles",name:"Advanced Missile Rack",mount:"Fixed",guidance:"Dumbfire",class:2,rating:"B",mass:4,integrity:51,powerDraw:1.2,bootTime:0,damage:50,damageDistribution:{explosive:1},rateOfFire:.5,burstInterval:2,clipSize:12,ammoMaximum:64,reloadTime:5,distributorDraw:.24,thermalLoad:3.6,armourPiercing:60,shotSpeed:750,cost:1471030},{symbol:"Hpt_ATDumbfireMissile_Fixed_Large_V2",name:"Enhanced AX Missile Rack",mount:"Fixed",guidance:"Dumbfire",class:3,rating:"B",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:8,integrity:64,powerDraw:1.72,bootTime:0,damage:27,damageDistribution:{explosive:1,antiXeno:1.8518518518518519},rateOfFire:.5,burstInterval:2,clipSize:12,ammoMaximum:128,reloadTime:5,distributorDraw:.24,thermalLoad:3.6,armourPiercing:60,shotSpeed:1250,cost:1703835,damageComponents:{explosive:27,antiXeno:50}},{symbol:"Hpt_ATMultiCannon_Fixed_Medium_V2",name:"Enhanced AX Multi-Cannon",mount:"Fixed",class:2,rating:"D",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:4,integrity:51,powerDraw:.48,bootTime:0,damage:1.12,damageDistribution:{kinetic:1,antiXeno:2.446428571428571},rateOfFire:7.142857,burstInterval:.14,clipSize:100,ammoMaximum:2100,reloadTime:4,distributorDraw:.11,thermalLoad:.18,armourPiercing:17,maximumRange:4e3,falloffRange:2e3,shotSpeed:4e3,cost:455077,damageComponents:{kinetic:1.12,antiXeno:2.74}},{symbol:"Hpt_ATDumbfireMissile_Fixed_Medium_V2",name:"Enhanced AX Missile Rack",mount:"Fixed",guidance:"Dumbfire",class:2,rating:"D",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:4,integrity:51,powerDraw:1.3,bootTime:0,damage:27,damageDistribution:{explosive:1,antiXeno:1.8518518518518519},rateOfFire:.5,burstInterval:2,clipSize:8,ammoMaximum:64,reloadTime:5,distributorDraw:.14,thermalLoad:2.4,armourPiercing:60,shotSpeed:1250,cost:681534,damageComponents:{explosive:27,antiXeno:50}},{symbol:"Hpt_ATDumbfireMissile_Turret_Large_V2",name:"Enhanced AX Missile Rack",mount:"Turreted",guidance:"Dumbfire",class:3,rating:"D",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:8,integrity:64,powerDraw:1.85,bootTime:0,damage:20,damageDistribution:{explosive:1,antiXeno:2.2},rateOfFire:.5,burstInterval:2,clipSize:12,ammoMaximum:128,reloadTime:5,distributorDraw:.14,thermalLoad:1.9,armourPiercing:60,shotSpeed:1250,cost:5347534,damageComponents:{explosive:20,antiXeno:44}},{symbol:"Hpt_ATDumbfireMissile_Turret_Medium_V2",name:"Enhanced AX Missile Rack",mount:"Turreted",guidance:"Dumbfire",class:2,rating:"E",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:4,integrity:51,powerDraw:1.3,bootTime:0,damage:20,damageDistribution:{explosive:1,antiXeno:2.2},rateOfFire:.5,burstInterval:2,clipSize:8,ammoMaximum:64,reloadTime:5,distributorDraw:.08,thermalLoad:1.5,armourPiercing:60,shotSpeed:1250,cost:2666286,damageComponents:{explosive:20,antiXeno:44}},{symbol:"Hpt_ATMultiCannon_Fixed_Large_V2",name:"Enhanced AX Multi-Cannon",mount:"Fixed",class:3,rating:"B",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:8,integrity:64,powerDraw:.69,bootTime:0,damage:2.19,damageDistribution:{kinetic:1,antiXeno:2.1118721461187215},rateOfFire:5.882353,burstInterval:.17,clipSize:100,ammoMaximum:2100,reloadTime:4,distributorDraw:.18,thermalLoad:.28,armourPiercing:33,maximumRange:4e3,falloffRange:2e3,shotSpeed:4e3,cost:1360322,damageComponents:{kinetic:2.19,antiXeno:4.625}},{symbol:"Hpt_ATMultiCannon_Turret_Large_V2",name:"Enhanced AX Multi-Cannon",mount:"Turreted",class:3,rating:"D",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:8,integrity:64,powerDraw:.69,bootTime:0,damage:1.12,damageDistribution:{kinetic:1,antiXeno:2.446428571428571},rateOfFire:6.25,burstInterval:.16,clipSize:90,ammoMaximum:2100,reloadTime:4,distributorDraw:.06,thermalLoad:.09,armourPiercing:33,maximumRange:4e3,falloffRange:2e3,shotSpeed:4e3,cost:4588709,damageComponents:{kinetic:1.12,antiXeno:2.74}},{symbol:"Hpt_ATMultiCannon_Turret_Medium_V2",name:"Enhanced AX Multi-Cannon",mount:"Turreted",class:2,rating:"E",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:4,integrity:51,powerDraw:.52,bootTime:0,damage:.56,damageDistribution:{kinetic:1,antiXeno:2.614285714285714},rateOfFire:6.25,burstInterval:.16,clipSize:90,ammoMaximum:2100,reloadTime:4,distributorDraw:.06,thermalLoad:.09,armourPiercing:17,maximumRange:4e3,falloffRange:2e3,shotSpeed:4e3,cost:2193297,damageComponents:{kinetic:.56,antiXeno:1.464}},{symbol:"Hpt_ATMultiCannon_Gimbal_Large",kind:"antiXenoMultiCannons",name:"Enhanced AX Multi-Cannon",mount:"Gimballed",class:3,rating:"C",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:8,integrity:64,powerDraw:.64,bootTime:0,damage:2.19,damageDistribution:{kinetic:1,antiXeno:1.7922374429223744},rateOfFire:5.882353,burstInterval:.17,clipSize:100,ammoMaximum:2100,reloadTime:4,distributorDraw:.18,thermalLoad:.28,armourPiercing:33,maximumRange:4e3,falloffRange:2e3,shotSpeed:4e3,cost:2390460,damageComponents:{kinetic:2.19,antiXeno:3.925}},{symbol:"Hpt_ATMultiCannon_Gimbal_Medium",kind:"antiXenoMultiCannons",name:"Enhanced AX Multi-Cannon",mount:"Gimballed",class:2,rating:"E",limitGroup:"experimentalWeapon",entitlement:"ELITE_HORIZONS_V_PLANETARY_LANDINGS",mass:4,integrity:51,powerDraw:.46,bootTime:0,damage:1.12,damageDistribution:{kinetic:1,antiXeno:1.9553571428571426},rateOfFire:7.142857,burstInterval:.14,clipSize:100,ammoMaximum:2100,reloadTime:4,distributorDraw:.11,thermalLoad:.18,armourPiercing:17,maximumRange:4e3,falloffRange:2e3,shotSpeed:4e3,cost:1197644,damageComponents:{kinetic:1.12,antiXeno:2.19}},{symbol:"Hpt_Human_Extraction_Fixed_Medium",name:"Sub-Surface Extraction Missile",mount:"Fixed",guidance:"Seeker",class:2,rating:"B",mass:4,integrity:50,powerDraw:1,bootTime:0,damage:5,damageDistribution:{explosive:1},rateOfFire:.5,burstInterval:2,clipSize:1,ammoMaximum:96,reloadTime:2,distributorDraw:.21,thermalLoad:2.9,armourPiercing:25,shotSpeed:550,cost:822091},{symbol:"Hpt_ATVentDisruptorPylon_Fixed_Medium",name:"Guardian Nanite Torpedo Pylon",mount:"Fixed",class:2,rating:"I",mass:3,integrity:50,powerDraw:.4,bootTime:0,guardianZoneResistance:true,damage:0,damageDistribution:{explosive:1},rateOfFire:.5,burstInterval:2,clipSize:1,ammoMaximum:64,reloadTime:3,distributorDraw:0,thermalLoad:35,shotSpeed:1e3,cost:843170},{symbol:"Hpt_ATVentDisruptorPylon_Fixed_Large",name:"Guardian Nanite Torpedo Pylon",mount:"Fixed",class:3,rating:"I",mass:5,integrity:80,powerDraw:.7,bootTime:0,guardianZoneResistance:true,damage:0,damageDistribution:{explosive:1},rateOfFire:.5,burstInterval:2,clipSize:1,ammoMaximum:125,reloadTime:3,distributorDraw:0,thermalLoad:35,shotSpeed:1e3,cost:1627419},{symbol:"Hpt_Cannon_Gimbal_Medium_Burst",kind:"cannons",name:"Concord Cannon",mount:"Gimballed",class:2,rating:"D",entitlement:"ELITE_SPECIFIC_V_POWER_200130",mass:4,integrity:51,powerDraw:.64,bootTime:0,damage:14.63,damageDistribution:{kinetic:1},rateOfFire:1.086957,burstInterval:2.26,burstRounds:3,burstRateOfFire:4,clipSize:9,ammoMaximum:300,reloadTime:4,distributorDraw:.75,thermalLoad:1.92,armourPiercing:42,maximumRange:3500,falloffRange:3500,shotSpeed:1300,cost:314620},{symbol:"Hpt_MiningToolV2_Fixed_Large",name:"Mining Volley Repeater",mount:"Fixed",class:3,rating:"C",mass:8,integrity:61,powerDraw:1.5,restrictedToShips:["LakonMiner"],bootTime:0,damage:.3,damageDistribution:{thermal:1},rateOfFire:20,burstInterval:.05,burstRounds:1,clipSize:1,ammoMaximum:1,reloadTime:4,distributorDraw:.3,thermalLoad:.4,armourPiercing:18,maximumRange:500,falloffRange:500,shotSpeed:167,cost:149910},{symbol:"Hpt_MkIIPlasmaShockAutocannon_Fixed_Large",name:"Mk II Plasma Shock Accelerator",mount:"Fixed",class:3,rating:"B",mass:8,integrity:64,powerDraw:1.51,bootTime:0,damage:13.94,damageDistribution:{unclassified:1},rateOfFire:7.844016,burstInterval:.4028,burstRounds:4,burstRateOfFire:28,clipSize:18,ammoMaximum:0,reloadTime:5,distributorDraw:.92,thermalLoad:1.66,armourPiercing:60,maximumRange:3e3,falloffRange:2500,shotSpeed:1200,cost:3051200,damageComponents:{unclassified:[13.94]}}];var HARDPOINT_MODULES=buildModuleCatalogue(modules_hardpoint_default,"hardpoint");export{HARDPOINT_MODULES};//# sourceMappingURL=chunk-BSOIPL4A.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ships/modules-hardpoint.ts"],"names":["buildModuleCatalogue","modules_hardpoint_default","HARDPOINT_MODULES"],"mappings":"O,+0jEAuCO,IAAME,kBAAiDF,qBAC1DC,0BACA,oBACJC"}
1
+ {"version":3,"sources":["../src/ships/modules-hardpoint.ts"],"names":["buildModuleCatalogue","modules_hardpoint_default","HARDPOINT_MODULES"],"mappings":"O,6xjEAuCO,IAAME,kBAAiDF,qBAC1DC,0BACA,oBACJC"}
@@ -1 +1 @@
1
- import{findByRawKey,normalizeKey}from"./chunk-S4DBNX2B.js";import{requireStringIfPresent}from"./chunk-B5TT26XE.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var decorative_modifications_default={Decorative_Green:{name:"Festive Green",modules:["Hpt_FlakMortar_Turret_Medium"],modifiers:[{label:"Damage",method:"multiplicative",value:-.99}]},Decorative_Red:{name:"Festive Red",modules:["Hpt_FlakMortar_Turret_Medium"],modifiers:[{label:"Damage",method:"multiplicative",value:-.99}]},Decorative_Yellow:{name:"Festive Yellow",modules:["Hpt_FlakMortar_Turret_Medium"],modifiers:[{label:"Damage",method:"multiplicative",value:-.99}]}};var DECORATIVE_MODIFICATIONS=deepFreeze(decorative_modifications_default);function getDecorativeModification(fdname){return findByRawKey(DECORATIVE_MODIFICATIONS,fdname,"getDecorativeModification: fdname")}function isDecorativeModification(fdname){requireStringIfPresent(fdname,"isDecorativeModification: fdname");return getDecorativeModification(fdname)!==null}function getDecorativeModificationsForModule(symbol){const wanted=normalizeKey(symbol,"getDecorativeModificationsForModule: symbol");return Object.entries(DECORATIVE_MODIFICATIONS).filter(([,record])=>record.modules.some(m=>m.toLowerCase()===wanted)).map(([id])=>id)}export{DECORATIVE_MODIFICATIONS,getDecorativeModification,getDecorativeModificationsForModule,isDecorativeModification};//# sourceMappingURL=chunk-6LUEKHO5.js.map
1
+ import{findByRawKey,normalizeKey}from"./chunk-S4DBNX2B.js";import{requireStringIfPresent}from"./chunk-B5TT26XE.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var decorative_modifications_default={Decorative_Green:{name:"Festive Green",modules:["Hpt_FlakMortar_Turret_Medium"],modifiers:[{label:"Damage",method:"multiplicative",value:-.99}]},Decorative_Red:{name:"Festive Red",modules:["Hpt_FlakMortar_Turret_Medium"],modifiers:[{label:"Damage",method:"multiplicative",value:-.99}]},Decorative_Yellow:{name:"Festive Yellow",modules:["Hpt_FlakMortar_Turret_Medium"],modifiers:[{label:"Damage",method:"multiplicative",value:-.99}]}};var DECORATIVE_MODIFICATIONS=deepFreeze(decorative_modifications_default);function getDecorativeModification(fdname){return findByRawKey(DECORATIVE_MODIFICATIONS,fdname,"getDecorativeModification: fdname")}function isDecorativeModification(fdname){requireStringIfPresent(fdname,"isDecorativeModification: fdname");return getDecorativeModification(fdname)!==null}function getDecorativeModificationsForModule(symbol){const wanted=normalizeKey(symbol,"getDecorativeModificationsForModule: symbol");return Object.entries(DECORATIVE_MODIFICATIONS).filter(([,record])=>record.modules.some(m=>m.toLowerCase()===wanted)).map(([id])=>id)}export{DECORATIVE_MODIFICATIONS,getDecorativeModification,getDecorativeModificationsForModule,isDecorativeModification};//# sourceMappingURL=chunk-DFJ6ETMY.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ships/decorative-modifications.ts"],"names":["findByRawKey","normalizeKey","requireStringIfPresent","deepFreeze","decorative_modifications_default","modules","DECORATIVE_MODIFICATIONS","getDecorativeModification","fdname","isDecorativeModification","getDecorativeModificationsForModule","symbol","wanted","Object","entries","filter","record","some","m","toLowerCase","map","id"],"mappings":"O,gnBAuHO,IAAMM,yBACTH,WAAWC,kCAkBR,SAASG,0BAA0BC,QACtC,OAAOR,aAAaM,yBAA0BE,OAAQ,oCAC1D,CAuBO,SAASC,yBAAyBD,QACrCN,uBAAuBM,OAAQ,oCAC/B,OAAOD,0BAA0BC,UAAY,IACjD,CAwBO,SAASE,oCAAoCC,QAChD,MAAMC,OAASX,aAAaU,OAAQ,+CACpC,OAAOE,OAAOC,QAAQR,0BACjBS,OAAO,EAAC,CAAGC,UAAYA,OAAOX,QAAQY,KAAMC,GAAMA,EAAEC,gBAAkBP,SACtEQ,IAAI,EAAEC,MAAQA,GACvB,QAAAf,yBAAAC,0BAAAG,oCAAAD"}
1
+ {"version":3,"sources":["../src/ships/decorative-modifications.ts"],"names":["findByRawKey","normalizeKey","requireStringIfPresent","deepFreeze","decorative_modifications_default","modules","DECORATIVE_MODIFICATIONS","getDecorativeModification","fdname","isDecorativeModification","getDecorativeModificationsForModule","symbol","wanted","Object","entries","filter","record","some","m","toLowerCase","map","id"],"mappings":"O,gnBAyHO,IAAMM,yBACTH,WAAWC,kCAkBR,SAASG,0BAA0BC,QACtC,OAAOR,aAAaM,yBAA0BE,OAAQ,oCAC1D,CAuBO,SAASC,yBAAyBD,QACrCN,uBAAuBM,OAAQ,oCAC/B,OAAOD,0BAA0BC,UAAY,IACjD,CAwBO,SAASE,oCAAoCC,QAChD,MAAMC,OAASX,aAAaU,OAAQ,+CACpC,OAAOE,OAAOC,QAAQR,0BACjBS,OAAO,EAAC,CAAGC,UAAYA,OAAOX,QAAQY,KAAMC,GAAMA,EAAEC,gBAAkBP,SACtEQ,IAAI,EAAEC,MAAQA,GACvB,QAAAf,yBAAAC,0BAAAG,oCAAAD"}
@@ -0,0 +1 @@
1
+ import{capacitorRechargeAtPips}from"./chunk-JOTAOI5T.js";function requireFiniteNonNegative(scope,name,value){if(!Number.isFinite(value)||value<0){throw new RangeError(`${scope}: ${name} must be a finite non-negative number`)}}function weaponsCapacitorMetrics(input){const scope="weaponsCapacitorMetrics";const weaponsPips=input.weaponsPips??4;if(!Number.isFinite(weaponsPips)||weaponsPips<0||weaponsPips>4){throw new RangeError(`${scope}: weaponsPips must be a finite number from 0 to 4`)}for(const field of["weaponsCapacity","weaponsRecharge","sustainedEnergyPerSecond"]){requireFiniteNonNegative(scope,field,input[field])}const rechargeRate=capacitorRechargeAtPips(input.weaponsRecharge,weaponsPips);const netDrainRate=Math.max(0,input.sustainedEnergyPerSecond-rechargeRate);return{weaponsPips:weaponsPips,capacity:input.weaponsCapacity,rechargeRate:rechargeRate,sustainedEnergyPerSecond:input.sustainedEnergyPerSecond,netDrainRate:netDrainRate,timeToDrain:netDrainRate===0?Infinity:input.weaponsCapacity/netDrainRate}}export{weaponsCapacitorMetrics};//# sourceMappingURL=chunk-FMPRCYKY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ships/weapons-capacitor.ts"],"names":["capacitorRechargeAtPips","requireFiniteNonNegative","scope","name","value","Number","isFinite","RangeError","weaponsCapacitorMetrics","input","weaponsPips","field","rechargeRate","weaponsRecharge","netDrainRate","Math","max","sustainedEnergyPerSecond","capacity","weaponsCapacity","timeToDrain","Infinity"],"mappings":"O,kDAmDA,SAASC,yBAAyBC,MAAeC,KAAcC,OAC3D,IAAKC,OAAOC,SAASF,QAAUA,MAAQ,EAAG,CACtC,MAAM,IAAIG,WAAW,GAAGL,UAAUC,4CACtC,CACJ,CAwBO,SAASK,wBAAwBC,OACpC,MAAMP,MAAQ,0BACd,MAAMQ,YAAcD,MAAMC,aAAe,EACzC,IAAKL,OAAOC,SAASI,cAAgBA,YAAc,GAAKA,YAAc,EAAG,CACrE,MAAM,IAAIH,WAAW,GAAGL,yDAC5B,CACA,IAAA,MAAWS,QAAS,CAChB,kBACA,kBACA,4BACQ,CACRV,yBAAyBC,MAAOS,MAAOF,MAAME,OACjD,CAEA,MAAMC,aAAeZ,wBAAwBS,MAAMI,gBAAiBH,aACpE,MAAMI,aAAeC,KAAKC,IAAI,EAAGP,MAAMQ,yBAA2BL,cAClE,MAAO,CACHF,wBACAQ,SAAUT,MAAMU,gBAChBP,0BACAK,yBAA0BR,MAAMQ,yBAChCH,0BACAM,YAAaN,eAAiB,EAAIO,SAAWZ,MAAMU,gBAAkBL,aAE7E,QAAAN"}
@@ -0,0 +1 @@
1
+ var MAX_TOTAL_RANGE_JUMPS=1e5;function requireNonNegative(scope,name,value){if(!Number.isFinite(value)||value<0){throw new RangeError(`${scope}: ${name} must be a finite non-negative number`)}}function requirePositive(scope,name,value){if(!Number.isFinite(value)||value<=0){throw new RangeError(`${scope}: fsd.${name} must be a finite positive number`)}}function validateFsd(scope,fsd){requirePositive(scope,"optMass",fsd.optMass);requireNonNegative(scope,"fsd.maxFuel",fsd.maxFuel);requirePositive(scope,"fuelMul",fsd.fuelMul);requirePositive(scope,"fuelPower",fsd.fuelPower);if(fsd.jumpBoost!==void 0){requireNonNegative(scope,"fsd.jumpBoost",fsd.jumpBoost)}}function frameShiftDriveMassFactorUnchecked(mass,fuel,fsd){return fsd.optMass/(mass+fuel)}function singleJumpRangeUnchecked(mass,fuel,fsd,scope){const burn=Math.min(fuel,fsd.maxFuel);if(burn<=0||mass+fuel<=0)return 0;const base=Math.pow(burn/fsd.fuelMul,1/fsd.fuelPower)*frameShiftDriveMassFactorUnchecked(mass,fuel,fsd);const range=base+(fsd.jumpBoost??0);if(!Number.isFinite(range)){throw new RangeError(`${scope}: parameters produce a non-finite range`)}return range}function frameShiftDriveMassFactor(mass,fuel,fsd){const scope="frameShiftDriveMassFactor";requireNonNegative(scope,"mass",mass);requireNonNegative(scope,"fuel",fuel);requirePositive(scope,"optMass",fsd.optMass);if(mass+fuel<=0){throw new RangeError(`${scope}: mass plus fuel must be positive`)}return frameShiftDriveMassFactorUnchecked(mass,fuel,fsd)}function singleJumpRange(mass,fuel,fsd){const scope="singleJumpRange";requireNonNegative(scope,"mass",mass);requireNonNegative(scope,"fuel",fuel);validateFsd(scope,fsd);return singleJumpRangeUnchecked(mass,fuel,fsd,scope)}function fuelPerJump(distance,mass,fuel,fsd){const scope="fuelPerJump";requireNonNegative(scope,"distance",distance);requireNonNegative(scope,"mass",mass);requireNonNegative(scope,"fuel",fuel);validateFsd(scope,fsd);if(distance<=0)return 0;const burn=Math.min(fuel,fsd.maxFuel);const maxDistance=singleJumpRangeUnchecked(mass,fuel,fsd,scope);if(maxDistance<=0)return 0;const cost=Math.pow(distance/maxDistance,fsd.fuelPower)*burn;return Math.min(cost,burn)}function totalRange(mass,fuel,fsd){const scope="totalRange";requireNonNegative(scope,"mass",mass);requireNonNegative(scope,"fuel",fuel);validateFsd(scope,fsd);if(fsd.maxFuel<=0)return{range:0,jumps:0};const jumps=fuel>0?Math.max(1,Math.ceil(fuel/fsd.maxFuel)):0;if(!Number.isFinite(jumps)||jumps>MAX_TOTAL_RANGE_JUMPS){throw new RangeError(`${scope}: fuel and fsd.maxFuel require more than ${MAX_TOTAL_RANGE_JUMPS} jumps`)}let range=0;let remaining=fuel;for(let i=0;i<jumps;i++){range+=singleJumpRangeUnchecked(mass,remaining,fsd,scope);if(!Number.isFinite(range)){throw new RangeError(`${scope}: parameters produce a non-finite total range`)}remaining=Math.max(0,remaining-fsd.maxFuel)}return{range:range,jumps:jumps}}export{frameShiftDriveMassFactor,fuelPerJump,singleJumpRange,totalRange};//# sourceMappingURL=chunk-GQ5GX5TB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ships/jump-range.ts"],"names":["MAX_TOTAL_RANGE_JUMPS","requireNonNegative","scope","name","value","Number","isFinite","RangeError","requirePositive","validateFsd","fsd","optMass","maxFuel","fuelMul","fuelPower","jumpBoost","frameShiftDriveMassFactorUnchecked","mass","fuel","singleJumpRangeUnchecked","burn","Math","min","base","pow","range","frameShiftDriveMassFactor","singleJumpRange","fuelPerJump","distance","maxDistance","cost","totalRange","jumps","max","ceil","remaining","i"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import{fixedModifierFeatures}from"./chunk-4TXQWLIQ.js";import{getModuleBySymbol}from"./chunk-PRQELBIC.js";import{ALL_MODULES}from"./chunk-W7XI3WVA.js";import{computeModifiers,baseStats}from"./chunk-SVZARHWP.js";import{getDecorativeModification}from"./chunk-DFJ6ETMY.js";import{requireStringIfPresent}from"./chunk-B5TT26XE.js";function resolveDecorativeModification(symbol,fdname,entryPoint){requireStringIfPresent(symbol,`${entryPoint}: symbol`);requireStringIfPresent(fdname,`${entryPoint}: fdname`);const modification=getDecorativeModification(fdname);if(!modification)return null;const module=getModuleBySymbol(symbol,ALL_MODULES);if(!module)return null;return{modification:modification,modifiers:computeModifiers(baseStats(module),fixedModifierFeatures(modification.modifiers))}}function getDecorativeModifiers(symbol,fdname){return resolveDecorativeModification(symbol,fdname,"getDecorativeModifiers")?.modifiers??null}function unresolvedDecorativeModifiers(symbol,fdname){const resolved=resolveDecorativeModification(symbol,fdname,"unresolvedDecorativeModifiers");if(!resolved)return null;const labels=new Set(resolved.modifiers.map(modifier=>modifier.Label));return resolved.modification.modifiers.map(modifier=>modifier.label).filter(label=>!labels.has(label))}export{getDecorativeModifiers,unresolvedDecorativeModifiers};//# sourceMappingURL=chunk-GV7ZKYQN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ships/decorative-modification-stats.ts"],"names":["fixedModifierFeatures","getModuleBySymbol","ALL_MODULES","computeModifiers","baseStats","getDecorativeModification","requireStringIfPresent","resolveDecorativeModification","symbol","fdname","entryPoint","modification","module","modifiers","getDecorativeModifiers","unresolvedDecorativeModifiers","resolved","labels","Set","map","modifier","Label","label","filter","has"],"mappings":"O,+TAuCA,SAASO,8BACLC,OACAC,OACAC,YAEAJ,uBAAuBE,OAAQ,GAAGE,sBAClCJ,uBAAuBG,OAAQ,GAAGC,sBAElC,MAAMC,aAAeN,0BAA0BI,QAC/C,IAAKE,aAAc,OAAO,KAC1B,MAAMC,OAASX,kBAAkBO,OAAQN,aACzC,IAAKU,OAAQ,OAAO,KACpB,MAAO,CACHD,0BACAE,UAAWV,iBACPC,UAAUQ,QACVZ,sBAAsBW,aAAaE,YAG/C,CAiDO,SAASC,uBACZN,OACAC,QAEA,OACIF,8BAA8BC,OAAQC,OAAQ,2BAA2BI,WAAa,IAE9F,CAsCO,SAASE,8BAA8BP,OAAgBC,QAC1D,MAAMO,SAAWT,8BAA8BC,OAAQC,OAAQ,iCAC/D,IAAKO,SAAU,OAAO,KACtB,MAAMC,OAAS,IAAIC,IAAIF,SAASH,UAAUM,IAAKC,UAAaA,SAASC,QACrE,OAAOL,SAASL,aAAaE,UACxBM,IAAKC,UAAaA,SAASE,OAC3BC,OAAQD,QAAWL,OAAOO,IAAIF,OACvC,QAAAR,uBAAAC"}
@@ -0,0 +1 @@
1
+ function capacitorRechargeAtPips(ratedRecharge,pips){return ratedRecharge*Math.pow(pips/4,1.1)}export{capacitorRechargeAtPips};//# sourceMappingURL=chunk-JOTAOI5T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ships/internal/capacitor-recharge.ts"],"names":["capacitorRechargeAtPips","ratedRecharge","pips","Math","pow"],"mappings":"AAWO,SAASA,wBAAwBC,cAAuBC,MAC3D,OAAOD,cAAgBE,KAAKC,IAAIF,KAAO,EAAG,IAC9C,QAAAF"}
@@ -1 +1 @@
1
- function combinedRateOfFire(weapon){const interval=weapon.burstInterval;if(interval===void 0||interval<=0)return void 0;const burst=weapon.burstRounds&&weapon.burstRounds>0?weapon.burstRounds:1;const burstRate=weapon.burstRateOfFire&&weapon.burstRateOfFire>0?weapon.burstRateOfFire:1;const cycle=(burst>1?(burst-1)/burstRate:0)+interval;return cycle>0?burst/cycle:void 0}var ZERO_SPLIT={kinetic:0,thermal:0,explosive:0,absolute:0,antiXeno:0};function splitDamage(damage,distribution){if(!distribution)return{...ZERO_SPLIT,absolute:damage};return{kinetic:damage*(distribution.kinetic??0),thermal:damage*(distribution.thermal??0),explosive:damage*(distribution.explosive??0),absolute:damage*(distribution.absolute??0),...(distribution.unclassified??0)===0?{}:{unclassified:damage*distribution.unclassified},antiXeno:damage*(distribution.antiXeno??0)}}function splitComponents(damage,components){const unclassified=(components.unclassified??[]).reduce((sum,value)=>sum+value,0);const conventional=(components.kinetic??0)+(components.thermal??0)+(components.explosive??0)+(components.absolute??0)+unclassified;if(conventional<=0)return{...ZERO_SPLIT,absolute:damage};const scale=damage/conventional;return{kinetic:(components.kinetic??0)*scale,thermal:(components.thermal??0)*scale,explosive:(components.explosive??0)*scale,absolute:(components.absolute??0)*scale,...unclassified===0?{}:{unclassified:unclassified*scale},antiXeno:(components.antiXeno??0)*scale}}function sustainedFireFactor(weapon){const rateOfFire=weapon.rateOfFire;const clip=weapon.clipSize===void 0?void 0:Math.ceil(weapon.clipSize);if(!rateOfFire||!clip||clip<=0)return 1;const burst=weapon.burstRounds&&weapon.burstRounds>0?weapon.burstRounds:1;const burstRate=weapon.burstRateOfFire&&weapon.burstRateOfFire>0?weapon.burstRateOfFire:1;const reload=weapon.reloadTime??0;const cycle=(clip-burst)/rateOfFire+(burst-1)/burstRate+reload;if(cycle<=0)return 1;const sustainedRate=clip/cycle;return Math.min(1,sustainedRate/rateOfFire)}function damagePerSecond(weapon){const damage=weapon.damage??0;const rounds=weapon.roundsPerShot&&weapon.roundsPerShot>0?weapon.roundsPerShot:1;return damage*rounds*(weapon.rateOfFire??1)}function sustainedDamagePerSecond(weapon){return damagePerSecond(weapon)*sustainedFireFactor(weapon)}function energyPerSecond(weapon){return(weapon.distributorDraw??0)*(weapon.rateOfFire??1)}function heatPerSecond(weapon){return(weapon.thermalLoad??0)*(weapon.rateOfFire??1)}function damageFalloff(weapon,metres){const maximum=weapon.maximumRange;if(maximum!==void 0&&metres>maximum)return 0;const falloff=weapon.falloffRange;if(falloff===void 0||maximum===void 0||metres<=falloff)return 1;const taper=maximum-falloff;if(taper<=0)return 1;return Math.max(0,1-(metres-falloff)/taper)}function armourPiercingFactor(armourPiercing,hardness){if(!Number.isFinite(armourPiercing)||armourPiercing<0){throw new RangeError("armourPiercingFactor: armour piercing must be a finite non-negative number")}if(!Number.isFinite(hardness)||hardness<0){throw new RangeError("armourPiercingFactor: hardness must be a finite non-negative number")}if(hardness===0)return 1;return Math.min(1,armourPiercing/hardness)}function weaponMetrics(weapon){const continuous=weapon.rateOfFire===void 0;const rateOfFire=weapon.rateOfFire??1;const factor=sustainedFireFactor(weapon);const dps=damagePerSecond(weapon);const sdps=dps*factor;const eps=energyPerSecond(weapon);const hps=heatPerSecond(weapon);const rounds=weapon.roundsPerShot&&weapon.roundsPerShot>0?weapon.roundsPerShot:1;return{damagePerShot:(weapon.damage??0)*rounds,rateOfFire:rateOfFire,sustainedRateOfFire:rateOfFire*factor,damagePerSecond:dps,sustainedDamagePerSecond:sdps,energyPerSecond:eps,sustainedEnergyPerSecond:eps*factor,heatPerSecond:hps,sustainedHeatPerSecond:hps*factor,thermalLoad:weapon.thermalLoad??0,powerDraw:weapon.powerDraw??0,damageByType:weapon.damageComponents?splitComponents(dps,weapon.damageComponents):splitDamage(dps,weapon.damageDistribution),sustainedDamageByType:weapon.damageComponents?splitComponents(sdps,weapon.damageComponents):splitDamage(sdps,weapon.damageDistribution),continuous:continuous}}function sumWeaponMetrics(metrics){const damageByType=emptyDamageSplitAccumulator();const sustainedDamageByType=emptyDamageSplitAccumulator();let damagePerSecond2=0;let sustainedDamagePerSecond2=0;let energyPerSecond2=0;let sustainedEnergyPerSecond=0;let heatPerSecond2=0;let sustainedHeatPerSecond=0;let thermalLoad=0;let powerDraw=0;for(const metric of metrics){damagePerSecond2+=metric.damagePerSecond;sustainedDamagePerSecond2+=metric.sustainedDamagePerSecond;energyPerSecond2+=metric.energyPerSecond;sustainedEnergyPerSecond+=metric.sustainedEnergyPerSecond;heatPerSecond2+=metric.heatPerSecond;sustainedHeatPerSecond+=metric.sustainedHeatPerSecond;thermalLoad+=metric.thermalLoad;powerDraw+=metric.powerDraw;addDamageSplit(damageByType,metric.damageByType);addDamageSplit(sustainedDamageByType,metric.sustainedDamageByType)}return{damagePerSecond:damagePerSecond2,sustainedDamagePerSecond:sustainedDamagePerSecond2,energyPerSecond:energyPerSecond2,sustainedEnergyPerSecond:sustainedEnergyPerSecond,heatPerSecond:heatPerSecond2,sustainedHeatPerSecond:sustainedHeatPerSecond,thermalLoad:thermalLoad,powerDraw:powerDraw,damageByType:finishDamageSplit(damageByType),sustainedDamageByType:finishDamageSplit(sustainedDamageByType)}}function emptyDamageSplitAccumulator(){return{kinetic:0,thermal:0,explosive:0,absolute:0,unclassified:0,antiXeno:0}}function addDamageSplit(total,split){total.kinetic+=split.kinetic;total.thermal+=split.thermal;total.explosive+=split.explosive;total.absolute+=split.absolute;total.unclassified+=split.unclassified??0;total.antiXeno+=split.antiXeno}function finishDamageSplit(total){const{unclassified:unclassified,...classified}=total;return unclassified===0?classified:{...classified,unclassified:unclassified}}export{armourPiercingFactor,combinedRateOfFire,damageFalloff,damagePerSecond,energyPerSecond,heatPerSecond,splitDamage,sumWeaponMetrics,sustainedDamagePerSecond,sustainedFireFactor,weaponMetrics};//# sourceMappingURL=chunk-PDE4YOFT.js.map
1
+ function combinedRateOfFire(weapon){const interval=weapon.burstInterval;if(interval===void 0||interval<=0)return void 0;const burst=weapon.burstRounds&&weapon.burstRounds>0?weapon.burstRounds:1;const burstRate=weapon.burstRateOfFire&&weapon.burstRateOfFire>0?weapon.burstRateOfFire:1;const cycle=(burst>1?(burst-1)/burstRate:0)+interval;return cycle>0?burst/cycle:void 0}var ZERO_SPLIT={kinetic:0,thermal:0,explosive:0,absolute:0,antiXeno:0};function splitDamage(damage,distribution){if(!distribution)return{...ZERO_SPLIT,absolute:damage};return{kinetic:damage*(distribution.kinetic??0),thermal:damage*(distribution.thermal??0),explosive:damage*(distribution.explosive??0),absolute:damage*(distribution.absolute??0),...(distribution.unclassified??0)===0?{}:{unclassified:damage*distribution.unclassified},antiXeno:damage*(distribution.antiXeno??0)}}function splitComponents(damage,components){const unclassified=(components.unclassified??[]).reduce((sum,value)=>sum+value,0);const conventional=(components.kinetic??0)+(components.thermal??0)+(components.explosive??0)+(components.absolute??0)+unclassified;if(conventional<=0)return{...ZERO_SPLIT,absolute:damage};const scale=damage/conventional;return{kinetic:(components.kinetic??0)*scale,thermal:(components.thermal??0)*scale,explosive:(components.explosive??0)*scale,absolute:(components.absolute??0)*scale,...unclassified===0?{}:{unclassified:unclassified*scale},antiXeno:(components.antiXeno??0)*scale}}function sustainedFireFactor(weapon){const rateOfFire=weapon.rateOfFire;const clip=weapon.clipSize===void 0?void 0:Math.ceil(weapon.clipSize);if(!rateOfFire||!clip||clip<=0)return 1;const burst=weapon.burstRounds&&weapon.burstRounds>0?weapon.burstRounds:1;const burstRate=weapon.burstRateOfFire&&weapon.burstRateOfFire>0?weapon.burstRateOfFire:1;const reload=weapon.reloadTime??0;const cycle=(clip-burst)/rateOfFire+(burst-1)/burstRate+reload;if(cycle<=0)return 1;const sustainedRate=clip/cycle;return Math.min(1,sustainedRate/rateOfFire)}function damagePerSecond(weapon){const damage=weapon.damage??0;const rounds=weapon.roundsPerShot&&weapon.roundsPerShot>0?weapon.roundsPerShot:1;return damage*rounds*(weapon.rateOfFire??1)}function sustainedDamagePerSecond(weapon){return damagePerSecond(weapon)*sustainedFireFactor(weapon)}function energyPerSecond(weapon){return(weapon.distributorDraw??0)*(weapon.rateOfFire??1)}function heatPerSecond(weapon){return(weapon.thermalLoad??0)*(weapon.rateOfFire??1)}function damageFalloff(weapon,metres){const maximum=weapon.maximumRange;if(maximum!==void 0&&metres>maximum)return 0;const falloff=weapon.falloffRange;if(falloff===void 0||maximum===void 0||metres<=falloff)return 1;const taper=maximum-falloff;if(taper<=0)return 1;return Math.max(0,1-(metres-falloff)/taper)}function armourPiercingFactor(armourPiercing,hardness){if(!Number.isFinite(armourPiercing)||armourPiercing<0){throw new RangeError("armourPiercingFactor: armour piercing must be a finite non-negative number")}if(!Number.isFinite(hardness)||hardness<0){throw new RangeError("armourPiercingFactor: hardness must be a finite non-negative number")}if(hardness===0)return 1;return Math.min(1,armourPiercing/hardness)}function weaponMetrics(weapon){const continuous=weapon.rateOfFire===void 0;const rateOfFire=weapon.rateOfFire??1;const factor=sustainedFireFactor(weapon);const dps=damagePerSecond(weapon);const sdps=dps*factor;const eps=energyPerSecond(weapon);const hps=heatPerSecond(weapon);const rounds=weapon.roundsPerShot&&weapon.roundsPerShot>0?weapon.roundsPerShot:1;return{damagePerShot:(weapon.damage??0)*rounds,rateOfFire:rateOfFire,sustainedRateOfFire:rateOfFire*factor,damagePerSecond:dps,sustainedDamagePerSecond:sdps,energyPerSecond:eps,sustainedEnergyPerSecond:eps*factor,heatPerSecond:hps,sustainedHeatPerSecond:hps*factor,thermalLoad:weapon.thermalLoad??0,powerDraw:weapon.powerDraw??0,damageByType:weapon.damageComponents?splitComponents(dps,weapon.damageComponents):splitDamage(dps,weapon.damageDistribution),sustainedDamageByType:weapon.damageComponents?splitComponents(sdps,weapon.damageComponents):splitDamage(sdps,weapon.damageDistribution),continuous:continuous}}function sumWeaponMetrics(metrics){const damageByType=emptyDamageSplitAccumulator();const sustainedDamageByType=emptyDamageSplitAccumulator();let damagePerSecond2=0;let sustainedDamagePerSecond2=0;let energyPerSecond2=0;let sustainedEnergyPerSecond=0;let heatPerSecond2=0;let sustainedHeatPerSecond=0;let thermalLoad=0;let powerDraw=0;for(const metric of metrics){damagePerSecond2+=metric.damagePerSecond;sustainedDamagePerSecond2+=metric.sustainedDamagePerSecond;energyPerSecond2+=metric.energyPerSecond;sustainedEnergyPerSecond+=metric.sustainedEnergyPerSecond;heatPerSecond2+=metric.heatPerSecond;sustainedHeatPerSecond+=metric.sustainedHeatPerSecond;thermalLoad+=metric.thermalLoad;powerDraw+=metric.powerDraw;addDamageSplit(damageByType,metric.damageByType);addDamageSplit(sustainedDamageByType,metric.sustainedDamageByType)}return{damagePerSecond:damagePerSecond2,sustainedDamagePerSecond:sustainedDamagePerSecond2,energyPerSecond:energyPerSecond2,sustainedEnergyPerSecond:sustainedEnergyPerSecond,heatPerSecond:heatPerSecond2,sustainedHeatPerSecond:sustainedHeatPerSecond,thermalLoad:thermalLoad,powerDraw:powerDraw,damageByType:finishDamageSplit(damageByType),sustainedDamageByType:finishDamageSplit(sustainedDamageByType)}}function emptyDamageSplitAccumulator(){return{kinetic:0,thermal:0,explosive:0,absolute:0,unclassified:0,antiXeno:0}}function addDamageSplit(total,split){total.kinetic+=split.kinetic;total.thermal+=split.thermal;total.explosive+=split.explosive;total.absolute+=split.absolute;total.unclassified+=split.unclassified??0;total.antiXeno+=split.antiXeno}function finishDamageSplit(total){const{unclassified:unclassified,...classified}=total;return unclassified===0?classified:{...classified,unclassified:unclassified}}export{armourPiercingFactor,combinedRateOfFire,damageFalloff,damagePerSecond,energyPerSecond,heatPerSecond,splitDamage,sumWeaponMetrics,sustainedDamagePerSecond,sustainedFireFactor,weaponMetrics};//# sourceMappingURL=chunk-LJI7VXJD.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ships/weapons.ts"],"names":["combinedRateOfFire","weapon","interval","burstInterval","burst","burstRounds","burstRate","burstRateOfFire","cycle","ZERO_SPLIT","kinetic","thermal","explosive","absolute","antiXeno","splitDamage","damage","distribution","unclassified","splitComponents","components","reduce","sum","value","conventional","scale","sustainedFireFactor","rateOfFire","clip","clipSize","Math","ceil","reload","reloadTime","sustainedRate","min","damagePerSecond","rounds","roundsPerShot","sustainedDamagePerSecond","energyPerSecond","distributorDraw","heatPerSecond","thermalLoad","damageFalloff","metres","maximum","maximumRange","falloff","falloffRange","taper","max","armourPiercingFactor","armourPiercing","hardness","Number","isFinite","RangeError","weaponMetrics","continuous","factor","dps","sdps","eps","hps","damagePerShot","sustainedRateOfFire","sustainedEnergyPerSecond","sustainedHeatPerSecond","powerDraw","damageByType","damageComponents","damageDistribution","sustainedDamageByType","sumWeaponMetrics","metrics","emptyDamageSplitAccumulator","metric","addDamageSplit","finishDamageSplit","total","split","classified"],"mappings":"AAoPO,SAASA,mBAAmBC,QAC/B,MAAMC,SAAWD,OAAOE,cACxB,GAAID,gBAAa,GAAaA,UAAY,EAAG,YAAO,EACpD,MAAME,MAAQH,OAAOI,aAAeJ,OAAOI,YAAc,EAAIJ,OAAOI,YAAc,EAIlF,MAAMC,UACFL,OAAOM,iBAAmBN,OAAOM,gBAAkB,EAAIN,OAAOM,gBAAkB,EACpF,MAAMC,OAASJ,MAAQ,GAAKA,MAAQ,GAAKE,UAAY,GAAKJ,SAC1D,OAAOM,MAAQ,EAAIJ,MAAQI,WAAQ,CACvC,CAEA,IAAMC,WAA0B,CAC5BC,QAAS,EACTC,QAAS,EACTC,UAAW,EACXC,SAAU,EACVC,SAAU,GAkBP,SAASC,YAAYC,OAAgBC,cACxC,IAAKA,aAAc,MAAO,IAAKR,WAAYI,SAAUG,QACrD,MAAO,CACHN,QAASM,QAAUC,aAAaP,SAAW,GAC3CC,QAASK,QAAUC,aAAaN,SAAW,GAC3CC,UAAWI,QAAUC,aAAaL,WAAa,GAC/CC,SAAUG,QAAUC,aAAaJ,UAAY,OACxCI,aAAaC,cAAgB,KAAO,EACnC,CAAA,EACA,CAAEA,aAAcF,OAASC,aAAaC,cAC5CJ,SAAUE,QAAUC,aAAaH,UAAY,GAErD,CAEA,SAASK,gBAAgBH,OAAgBI,YACrC,MAAMF,cAAgBE,WAAWF,cAAgB,IAAIG,OAAO,CAACC,IAAKC,QAAUD,IAAMC,MAAO,GACzF,MAAMC,cACDJ,WAAWV,SAAW,IACtBU,WAAWT,SAAW,IACtBS,WAAWR,WAAa,IACxBQ,WAAWP,UAAY,GACxBK,aACJ,GAAIM,cAAgB,EAAG,MAAO,IAAKf,WAAYI,SAAUG,QACzD,MAAMS,MAAQT,OAASQ,aACvB,MAAO,CACHd,SAAUU,WAAWV,SAAW,GAAKe,MACrCd,SAAUS,WAAWT,SAAW,GAAKc,MACrCb,WAAYQ,WAAWR,WAAa,GAAKa,MACzCZ,UAAWO,WAAWP,UAAY,GAAKY,SACnCP,eAAiB,EAAI,CAAA,EAAK,CAAEA,aAAcA,aAAeO,OAC7DX,UAAWM,WAAWN,UAAY,GAAKW,MAE/C,CAyBO,SAASC,oBAAoBzB,QAChC,MAAM0B,WAAa1B,OAAO0B,WAK1B,MAAMC,KAAO3B,OAAO4B,gBAAa,OAAY,EAAYC,KAAKC,KAAK9B,OAAO4B,UAC1E,IAAKF,aAAeC,MAAQA,MAAQ,EAAG,OAAO,EAC9C,MAAMxB,MAAQH,OAAOI,aAAeJ,OAAOI,YAAc,EAAIJ,OAAOI,YAAc,EAClF,MAAMC,UACFL,OAAOM,iBAAmBN,OAAOM,gBAAkB,EAAIN,OAAOM,gBAAkB,EACpF,MAAMyB,OAAS/B,OAAOgC,YAAc,EAEpC,MAAMzB,OAASoB,KAAOxB,OAASuB,YAAcvB,MAAQ,GAAKE,UAAY0B,OACtE,GAAIxB,OAAS,EAAG,OAAO,EACvB,MAAM0B,cAAgBN,KAAOpB,MAC7B,OAAOsB,KAAKK,IAAI,EAAGD,cAAgBP,WACvC,CASO,SAASS,gBAAgBnC,QAC5B,MAAMe,OAASf,OAAOe,QAAU,EAChC,MAAMqB,OAASpC,OAAOqC,eAAiBrC,OAAOqC,cAAgB,EAAIrC,OAAOqC,cAAgB,EACzF,OAAOtB,OAASqB,QAAUpC,OAAO0B,YAAc,EACnD,CAQO,SAASY,yBAAyBtC,QACrC,OAAOmC,gBAAgBnC,QAAUyB,oBAAoBzB,OACzD,CASO,SAASuC,gBAAgBvC,QAC5B,OAAQA,OAAOwC,iBAAmB,IAAMxC,OAAO0B,YAAc,EACjE,CAQO,SAASe,cAAczC,QAC1B,OAAQA,OAAO0C,aAAe,IAAM1C,OAAO0B,YAAc,EAC7D,CAqBO,SAASiB,cAAc3C,OAAqB4C,QAC/C,MAAMC,QAAU7C,OAAO8C,aACvB,GAAID,eAAY,GAAaD,OAASC,QAAS,OAAO,EACtD,MAAME,QAAU/C,OAAOgD,aACvB,GAAID,eAAY,GAAaF,eAAY,GAAaD,QAAUG,QAAS,OAAO,EAChF,MAAME,MAAQJ,QAAUE,QACxB,GAAIE,OAAS,EAAG,OAAO,EACvB,OAAOpB,KAAKqB,IAAI,EAAG,GAAKN,OAASG,SAAWE,MAChD,CAqBO,SAASE,qBAAqBC,eAAwBC,UACzD,IAAKC,OAAOC,SAASH,iBAAmBA,eAAiB,EAAG,CACxD,MAAM,IAAII,WACN,6EAER,CACA,IAAKF,OAAOC,SAASF,WAAaA,SAAW,EAAG,CAC5C,MAAM,IAAIG,WAAW,sEACzB,CACA,GAAIH,WAAa,EAAG,OAAO,EAC3B,OAAOxB,KAAKK,IAAI,EAAGkB,eAAiBC,SACxC,CAoBO,SAASI,cAAczD,QAC1B,MAAM0D,WAAa1D,OAAO0B,kBAAe,EACzC,MAAMA,WAAa1B,OAAO0B,YAAc,EACxC,MAAMiC,OAASlC,oBAAoBzB,QACnC,MAAM4D,IAAMzB,gBAAgBnC,QAC5B,MAAM6D,KAAOD,IAAMD,OACnB,MAAMG,IAAMvB,gBAAgBvC,QAC5B,MAAM+D,IAAMtB,cAAczC,QAC1B,MAAMoC,OAASpC,OAAOqC,eAAiBrC,OAAOqC,cAAgB,EAAIrC,OAAOqC,cAAgB,EAEzF,MAAO,CACH2B,eAAgBhE,OAAOe,QAAU,GAAKqB,OACtCV,sBACAuC,oBAAqBvC,WAAaiC,OAClCxB,gBAAiByB,IACjBtB,yBAA0BuB,KAC1BtB,gBAAiBuB,IACjBI,yBAA0BJ,IAAMH,OAChClB,cAAesB,IACfI,uBAAwBJ,IAAMJ,OAC9BjB,YAAa1C,OAAO0C,aAAe,EACnC0B,UAAWpE,OAAOoE,WAAa,EAC/BC,aAAcrE,OAAOsE,iBACfpD,gBAAgB0C,IAAK5D,OAAOsE,kBAC5BxD,YAAY8C,IAAK5D,OAAOuE,oBAC9BC,sBAAuBxE,OAAOsE,iBACxBpD,gBAAgB2C,KAAM7D,OAAOsE,kBAC7BxD,YAAY+C,KAAM7D,OAAOuE,oBAC/Bb,sBAER,CAiBO,SAASe,iBAAiBC,SAC7B,MAAML,aAAeM,8BACrB,MAAMH,sBAAwBG,8BAC9B,IAAIxC,iBAAkB,EACtB,IAAIG,0BAA2B,EAC/B,IAAIC,iBAAkB,EACtB,IAAI2B,yBAA2B,EAC/B,IAAIzB,eAAgB,EACpB,IAAI0B,uBAAyB,EAC7B,IAAIzB,YAAc,EAClB,IAAI0B,UAAY,EAEhB,IAAA,MAAWQ,UAAUF,QAAS,CAC1BvC,kBAAmByC,OAAOzC,gBAC1BG,2BAA4BsC,OAAOtC,yBACnCC,kBAAmBqC,OAAOrC,gBAC1B2B,0BAA4BU,OAAOV,yBACnCzB,gBAAiBmC,OAAOnC,cACxB0B,wBAA0BS,OAAOT,uBACjCzB,aAAekC,OAAOlC,YACtB0B,WAAaQ,OAAOR,UACpBS,eAAeR,aAAcO,OAAOP,cACpCQ,eAAeL,sBAAuBI,OAAOJ,sBACjD,CAEA,MAAO,CACHrC,gBAAAA,iBACAG,yBAAAA,0BACAC,gBAAAA,iBACA2B,kDACAzB,cAAAA,eACA0B,8CACAzB,wBACA0B,oBACAC,aAAcS,kBAAkBT,cAChCG,sBAAuBM,kBAAkBN,uBAEjD,CAWA,SAASG,8BACL,MAAO,CAAElE,QAAS,EAAGC,QAAS,EAAGC,UAAW,EAAGC,SAAU,EAAGK,aAAc,EAAGJ,SAAU,EAC3F,CAEA,SAASgE,eAAeE,MAA+BC,OACnDD,MAAMtE,SAAWuE,MAAMvE,QACvBsE,MAAMrE,SAAWsE,MAAMtE,QACvBqE,MAAMpE,WAAaqE,MAAMrE,UACzBoE,MAAMnE,UAAYoE,MAAMpE,SACxBmE,MAAM9D,cAAgB+D,MAAM/D,cAAgB,EAC5C8D,MAAMlE,UAAYmE,MAAMnE,QAC5B,CAEA,SAASiE,kBAAkBC,OACvB,MAAM9D,aAAEA,gBAAiBgE,YAAeF,MACxC,OAAO9D,eAAiB,EAAIgE,WAAa,IAAKA,WAAYhE,0BAC9D,QAAAkC,qBAAApD,mBAAA4C,cAAAR,gBAAAI,gBAAAE,cAAA3B,YAAA2D,iBAAAnC,yBAAAb,oBAAAgC"}
1
+ {"version":3,"sources":["../src/ships/weapons.ts"],"names":["combinedRateOfFire","weapon","interval","burstInterval","burst","burstRounds","burstRate","burstRateOfFire","cycle","ZERO_SPLIT","kinetic","thermal","explosive","absolute","antiXeno","splitDamage","damage","distribution","unclassified","splitComponents","components","reduce","sum","value","conventional","scale","sustainedFireFactor","rateOfFire","clip","clipSize","Math","ceil","reload","reloadTime","sustainedRate","min","damagePerSecond","rounds","roundsPerShot","sustainedDamagePerSecond","energyPerSecond","distributorDraw","heatPerSecond","thermalLoad","damageFalloff","metres","maximum","maximumRange","falloff","falloffRange","taper","max","armourPiercingFactor","armourPiercing","hardness","Number","isFinite","RangeError","weaponMetrics","continuous","factor","dps","sdps","eps","hps","damagePerShot","sustainedRateOfFire","sustainedEnergyPerSecond","sustainedHeatPerSecond","powerDraw","damageByType","damageComponents","damageDistribution","sustainedDamageByType","sumWeaponMetrics","metrics","emptyDamageSplitAccumulator","metric","addDamageSplit","finishDamageSplit","total","split","classified"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import{capacitorRechargeAtPips}from"./chunk-JOTAOI5T.js";var phaseTime=(megajoules,rate,draw,capacity,recharge)=>{if(megajoules<=0)return 0;if(rate<=0)return Infinity;if(draw<=0)return megajoules/rate;const drain=rate*draw-recharge;if(drain<=0)return megajoules/rate;const capacitorLifetime=capacity/drain;const beforeEmpty=capacitorLifetime*rate;if(megajoules<=beforeEmpty)return megajoules/rate;if(recharge<=0)return Infinity;return capacitorLifetime+(megajoules-beforeEmpty)/(recharge/draw)};var requireFiniteNonNegative=(name,value)=>{if(!Number.isFinite(value)||value<0){throw new RangeError(`shieldRecovery: ${name} must be a finite non-negative number`)}};function shieldRecovery(input){const pips=input.systemsPips??4;if(!Number.isFinite(pips)||pips<0||pips>4){throw new RangeError("shieldRecovery: systemsPips must be a finite number from 0 to 4")}for(const field of["strength","regenRate","brokenRegenRate","distributorDraw","systemsCapacity","systemsRecharge"]){requireFiniteNonNegative(field,input[field])}const recharge=capacitorRechargeAtPips(input.systemsRecharge,pips);const half=input.strength/2;return{regenRate:input.regenRate,brokenRegenRate:input.brokenRegenRate,recoveryTime:16+phaseTime(half,input.brokenRegenRate,input.distributorDraw,input.systemsCapacity,recharge),regenTime:phaseTime(half,input.regenRate,input.distributorDraw,input.systemsCapacity,recharge)}}function cellBankSummary(banks){const metrics=banks.map(bank=>Object.freeze({slot:bank.slot,symbol:bank.symbol,reinforcement:bank.reinforcementRate*bank.duration,cells:bank.cells,spinUp:bank.spinUp,duration:bank.duration,heat:bank.heat}));return Object.freeze({banks:Object.freeze(metrics),totalRestorable:metrics.reduce((sum,bank)=>sum+bank.reinforcement*bank.cells,0),totalCells:metrics.reduce((sum,bank)=>sum+bank.cells,0)})}export{cellBankSummary,shieldRecovery};//# sourceMappingURL=chunk-MPZGCTRG.js.map