@elite-dangerous-almanac/core 0.1.0-beta.5 → 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 (60) hide show
  1. package/PROVENANCE/ships/SOURCES.md +45 -23
  2. package/README.md +4 -1
  3. package/dist/chunk-4TXQWLIQ.js +1 -0
  4. package/dist/chunk-4TXQWLIQ.js.map +1 -0
  5. package/dist/chunk-BSOIPL4A.js +1 -0
  6. package/dist/{chunk-IHHS5Q5S.js.map → chunk-BSOIPL4A.js.map} +1 -1
  7. package/dist/{chunk-6LUEKHO5.js → chunk-DFJ6ETMY.js} +1 -1
  8. package/dist/{chunk-6LUEKHO5.js.map → chunk-DFJ6ETMY.js.map} +1 -1
  9. package/dist/chunk-GV7ZKYQN.js +1 -0
  10. package/dist/chunk-GV7ZKYQN.js.map +1 -0
  11. package/dist/{chunk-ECBYOHPF.js → chunk-PRQELBIC.js} +1 -1
  12. package/dist/{chunk-VZZ2XIRE.js → chunk-SVZARHWP.js} +1 -1
  13. package/dist/chunk-SVZARHWP.js.map +1 -0
  14. package/dist/chunk-T6DP655O.js +1 -0
  15. package/dist/chunk-T6DP655O.js.map +1 -0
  16. package/dist/chunk-TH4S5MVD.js +1 -0
  17. package/dist/{chunk-BNILZXJD.js.map → chunk-TH4S5MVD.js.map} +1 -1
  18. package/dist/chunk-VF2FGQ4B.js +1 -0
  19. package/dist/chunk-VF2FGQ4B.js.map +1 -0
  20. package/dist/chunk-W7XI3WVA.js +1 -0
  21. package/dist/{chunk-XSFGRMJC.js.map → chunk-W7XI3WVA.js.map} +1 -1
  22. package/dist/{chunk-GJCB2Z72.js → chunk-XYK6DYVQ.js} +1 -1
  23. package/dist/{chunk-GJCB2Z72.js.map → chunk-XYK6DYVQ.js.map} +1 -1
  24. package/dist/{chunk-L2ZZXEZM.js → chunk-ZJB5UYNE.js} +1 -1
  25. package/dist/{ship-loadout-D27yT2y2.d.ts → ship-loadout-CVRkbZS0.d.ts} +35 -9
  26. package/dist/ships/blueprint-costs.js +1 -1
  27. package/dist/ships/blueprint-journal.js +1 -1
  28. package/dist/ships/decorative-modification-stats.d.ts +109 -0
  29. package/dist/ships/decorative-modification-stats.js +1 -0
  30. package/dist/ships/decorative-modification-stats.js.map +1 -0
  31. package/dist/ships/decorative-modifications.d.ts +4 -2
  32. package/dist/ships/decorative-modifications.js +1 -1
  33. package/dist/ships/engineering-options.d.ts +44 -41
  34. package/dist/ships/engineering-options.js +1 -1
  35. package/dist/ships/engineering.d.ts +15 -12
  36. package/dist/ships/engineering.js +1 -1
  37. package/dist/ships/index.d.ts +6 -3
  38. package/dist/ships/index.js +1 -1
  39. package/dist/ships/modules-all.js +1 -1
  40. package/dist/ships/modules-hardpoint.js +1 -1
  41. package/dist/ships/modules.d.ts +2 -2
  42. package/dist/ships/modules.js +1 -1
  43. package/dist/ships/pre-engineered-stats.d.ts +5 -3
  44. package/dist/ships/pre-engineered-stats.js +1 -1
  45. package/dist/ships/pre-engineered.d.ts +6 -4
  46. package/dist/ships/pre-engineered.js +1 -1
  47. package/dist/ships/ship-loadout.d.ts +1 -1
  48. package/dist/ships/ship-loadout.js +1 -1
  49. package/dist/ships/slef.d.ts +2 -2
  50. package/package.json +5 -1
  51. package/dist/chunk-AUHDXSQL.js +0 -1
  52. package/dist/chunk-AUHDXSQL.js.map +0 -1
  53. package/dist/chunk-BNILZXJD.js +0 -1
  54. package/dist/chunk-IHHS5Q5S.js +0 -1
  55. package/dist/chunk-JBR4PTCM.js +0 -1
  56. package/dist/chunk-JBR4PTCM.js.map +0 -1
  57. package/dist/chunk-VZZ2XIRE.js.map +0 -1
  58. package/dist/chunk-XSFGRMJC.js +0 -1
  59. /package/dist/{chunk-ECBYOHPF.js.map → chunk-PRQELBIC.js.map} +0 -0
  60. /package/dist/{chunk-L2ZZXEZM.js.map → chunk-ZJB5UYNE.js.map} +0 -0
@@ -379,10 +379,12 @@ FDevIDs, stats from coriolis-data and EDSY, joined on `symbol`.
379
379
  II's `Int_MkIIAgileBoost_Engine_*` thrusters.
380
380
  - **A fuel tank is the one module built for two kinds of mount:** it is `fuelTank`
381
381
  and also fits any optional slot large enough, exactly as the game sells it.
382
- - **`kind` is the engineering family.** The 1028 records mapped by
382
+ - **`kind` is the ordinary engineering-menu family.** The 1026 records mapped by
383
383
  `engineering-options.jsonc` repeat that map's group key in the compact on-disk `kind`
384
- field. The remaining 171 records carry no `kind` because the pinned sources publish
385
- 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
386
388
  Guardian families and coverage are documented under Engineering options below; this
387
389
  field is a projection of that map, not a separate classification source.
388
390
  - **Stats source:** coriolis-data `modules/**` for the mechanical, defence, power and
@@ -1344,7 +1346,7 @@ up straight through with no disambiguation at all. Both paths are evidence that
1344
1346
  - **Availability is a property of the module, not of the blueprint.** A Pulse Laser and a
1345
1347
  Rail Gun both take the Efficient blueprint but offer different experimental effects, so
1346
1348
  "which experimentals go with blueprint X" has no single answer. Modules are therefore
1347
- 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
1348
1350
  `blueprints` and `experimentals` it offers.
1349
1351
  - **Source:** EDSY `eddb.js`, whose module-group tables carry each group's `blueprints`
1350
1352
  and `expeffects` lists and which modules belong to each group, and whose module records
@@ -1352,8 +1354,10 @@ up straight through with no disambiguation at all. Both paths are evidence that
1352
1354
  denials that narrow either list. Second registry: coriolis-data
1353
1355
  `modifications/modules.json`, which carries the same per-group lists keyed by the
1354
1356
  journal `BlueprintName`s this catalogue joins on.
1355
- - **Coverage: every group EDSY's `mtype` table gives a `blueprints:` key.** That is 53
1356
- 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
1357
1361
  support, sensors, the Detailed Surface Scanner, cargo racks, refineries, AFMUs, fuel
1358
1362
  scoops, FSD interdictors and boosters, Guardian module and shield reinforcement, the
1359
1363
  four engineerable limpet controllers, chaff, heat sink and caustic sink launchers,
@@ -1380,18 +1384,25 @@ up straight through with no disambiguation at all. Both paths are evidence that
1380
1384
  - **14 modules are absent because upstream denies them every blueprint:** eight AX
1381
1385
  multi-cannons (all but the two gimballed), five of the seven mining tools, and the
1382
1386
  Mk II Plasma Shock Accelerator — which is why `antiXenoMultiCannons` holds 2 of that
1383
- 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.
1384
1390
  The ten plain Module Reinforcement Packages are denied their family's only recipe
1385
1391
  and are absent too, which leaves `moduleReinforcements` holding the ten Guardian
1386
1392
  packages.
1387
- - **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
1388
1395
  agreeing: fuel tanks, passenger cabins, the repair/recon/research/decontamination and
1389
1396
  multi-limpet controllers, meta-alloy and ordinary module reinforcement, the Pulse Wave
1390
1397
  Analyser, the mining launchers, Shock Cannons, Nanite Torpedo Pylons, fighter and
1391
1398
  vehicle hangars, the docking computers and Supercruise Assist, the module stabilisers,
1392
1399
  the planetary approach suites, the cargo hatch and
1393
1400
  the AX utility modules (Xeno Scanners, Shutdown Field Neutralisers), followed by the
1394
- 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.
1395
1406
  - **EDSY's `_X_` prefix means "not applicable" and is honoured**, not stripped: the
1396
1407
  Detailed Surface Scanner's group lists only `iss_er` (`Sensor_Expanded`), because its
1397
1408
  three other entries are `_X_`-marked. The `Decorative_*` entries on the remote-release
@@ -1417,14 +1428,14 @@ up straight through with no disambiguation at all. Both paths are evidence that
1417
1428
  the nine further groups it carries a list for —
1418
1429
  20 in all, every one an exact match. Chaff, heat sink, point defence and ECMs keep the
1419
1430
  generic `Misc_*` ids: there coriolis agrees with EDSY.
1420
- - **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
1421
1432
  them at all: the nine Guardian-only groups (`guardianPowerPlants`,
1422
1433
  `guardianPowerDistributors`, `guardianHullReinforcements`, `moduleReinforcements`,
1423
1434
  `shieldReinforcements`, `fsdBoosters`, `guardianGauss`, `guardianPlasma`,
1424
- `guardianShard`), `antiXenoMissileRacks`, `experimentalWeapons`,
1425
- `miningToolsLasers` and `antiXenoMultiCannons`. That is coriolis being
1435
+ `guardianShard`), `antiXenoMissileRacks`, `experimentalWeapons` and
1436
+ `antiXenoMultiCannons`. That is coriolis being
1426
1437
  silent rather than contradicting — its Guardian and anti-xeno groups are empty
1427
- 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
1428
1439
  all of them. The Guardian-weapon menus are independently settled by the in-game
1429
1440
  observations below: stock weapons take Anti-Guardian Zone Resistance alone, while
1430
1441
  the pre-engineered articles are final.
@@ -1454,19 +1465,30 @@ up straight through with no disambiguation at all. Both paths are evidence that
1454
1465
  - **File order is derivable:** `modules` is written group by group in the order `groups`
1455
1466
  declares them, and within a group in module-catalogue order, so a re-derivation from the
1456
1467
  same sources reproduces the file rather than reshuffling it.
1457
- - **`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
1458
1469
  blueprints but not all of its experimental effects: 13 Multi-cannons cannot take Phasing
1459
1470
  Sequence, six dumbfire racks cannot take Drag Munitions, four missile racks are short of
1460
- Penetrator Munitions or FSD Interrupt, and the small fixed Abrasion Blaster takes none
1461
- at all. Upstream these are an exclusion map (with a wildcard for "none of them"); here
1462
- the wildcard is expanded to the explicit list. A module absent from `exclusions` takes
1463
- 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
1464
1473
  that would otherwise be listed here are absent from the catalogue entirely, taking no
1465
- blueprint either.
1466
- - **Kept deliberately:** the Abrasion Blaster stays in `modules` (it has a blueprint) even
1467
- though its experimental list is empty. That distinction carries most of the catalogue:
1468
- 30 of the 53 groups offer no experimental at all, so 388 of the 1028 grouped modules
1469
- 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.
1470
1492
  - **Key form:** the Anti-Guardian blueprint is listed under `GuardianModule_Sturdy`, the id
1471
1493
  a Loadout writes and the one EDSY uses — the same and only spelling `blueprints.jsonc`
1472
1494
  keys it under.
package/README.md CHANGED
@@ -141,7 +141,10 @@ normally writes that id in its `Engineering` block, but a few blueprint aliases
141
141
  collide across module families; `resolveBlueprintForModule` resolves those journal
142
142
  spellings. Functions that ask what engineering a module accepts therefore take the
143
143
  module's `symbol`; functions that look up a recipe, effect or modification take its
144
- `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.
145
148
 
146
149
  Personal-equipment modifications are keyed by their recipe symbol, just as ship
147
150
  blueprints and experimental effects are keyed by `fdname`; there is no second synthetic
@@ -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{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"}
@@ -1 +1 @@
1
- import{ALL_MODULES}from"./chunk-XSFGRMJC.js";import{findInKeyIndex,findByKey,filterByKey,createKeyIndex}from"./chunk-S4DBNX2B.js";var MODULES_BY_SYMBOL=/* @__PURE__ */createKeyIndex(ALL_MODULES,"symbol");function builtInModuleBySymbol(symbol,label){return findInKeyIndex(MODULES_BY_SYMBOL,symbol,label)}function getModuleBySymbol(symbol,modules=ALL_MODULES){return modules===ALL_MODULES?builtInModuleBySymbol(symbol,"getModuleBySymbol: symbol"):findByKey(modules,"symbol",symbol,"getModuleBySymbol: symbol")}function getModulesByName(name,modules=ALL_MODULES){return filterByKey(modules,"name",name,"getModulesByName: name")}function getBulkheadsForShip(ship,modules=ALL_MODULES){return filterByKey(modules,"ship",ship,"getBulkheadsForShip: ship")}export{builtInModuleBySymbol,getBulkheadsForShip,getModuleBySymbol,getModulesByName};//# sourceMappingURL=chunk-ECBYOHPF.js.map
1
+ import{ALL_MODULES}from"./chunk-W7XI3WVA.js";import{findInKeyIndex,findByKey,filterByKey,createKeyIndex}from"./chunk-S4DBNX2B.js";var MODULES_BY_SYMBOL=/* @__PURE__ */createKeyIndex(ALL_MODULES,"symbol");function builtInModuleBySymbol(symbol,label){return findInKeyIndex(MODULES_BY_SYMBOL,symbol,label)}function getModuleBySymbol(symbol,modules=ALL_MODULES){return modules===ALL_MODULES?builtInModuleBySymbol(symbol,"getModuleBySymbol: symbol"):findByKey(modules,"symbol",symbol,"getModuleBySymbol: symbol")}function getModulesByName(name,modules=ALL_MODULES){return filterByKey(modules,"name",name,"getModulesByName: name")}function getBulkheadsForShip(ship,modules=ALL_MODULES){return filterByKey(modules,"ship",ship,"getBulkheadsForShip: ship")}export{builtInModuleBySymbol,getBulkheadsForShip,getModuleBySymbol,getModulesByName};//# sourceMappingURL=chunk-PRQELBIC.js.map
@@ -1 +1 @@
1
- var percent=100;var STAT_LABELS=[{label:"Mass",field:"mass"},{label:"Integrity",field:"integrity"},{label:"PowerDraw",field:"powerDraw"},{label:"BootTime",field:"bootTime"},{label:"FSDOptimalMass",field:"optMass"},{label:"EngineOptimalMass",field:"optMass"},{label:"EngineMinimumMass",field:"minMass"},{label:"MaximumMass",field:"maxMass"},{label:"ShieldGenOptimalMass",field:"optMass"},{label:"ShieldGenMinimumMass",field:"minMass"},{label:"ShieldGenMaximumMass",field:"maxMass"},{label:"EngineOptPerformance",field:"optMultiplier",scale:percent},{label:"EngineMinPerformance",field:"minMultiplier",scale:percent},{label:"EngineMaxPerformance",field:"maxMultiplier",scale:percent},{label:"ShieldGenStrength",field:"optMultiplier",scale:percent},{label:"ShieldGenMinStrength",field:"minMultiplier",scale:percent},{label:"ShieldGenMaxStrength",field:"maxMultiplier",scale:percent},{label:"EngineHeatRate",field:"engineHeatRate"},{label:"FSDHeatRate",field:"fsdHeatRate"},{label:"MaxFuelPerJump",field:"maxFuel"},{label:"PowerCapacity",field:"powerCapacity"},{label:"HeatEfficiency",field:"heatEfficiency"},{label:"EnginesCapacity",field:"enginesCapacity"},{label:"EnginesRecharge",field:"enginesRecharge"},{label:"SystemsCapacity",field:"systemsCapacity"},{label:"SystemsRecharge",field:"systemsRecharge"},{label:"WeaponsCapacity",field:"weaponsCapacity"},{label:"WeaponsRecharge",field:"weaponsRecharge"},{label:"RefuelRate",field:"refuelRate"},{label:"FuelScoopRate",field:"refuelRate"},{label:"FuelCapacity",field:"fuelCapacity"},{label:"CargoCapacity",field:"cargoCapacity"},{label:"RegenRate",field:"shieldRegenRate"},{label:"BrokenRegenRate",field:"shieldBrokenRegenRate"},{label:"EnergyPerRegen",field:"distributorDraw"},{label:"ShieldBankReinforcement",field:"shieldBankReinforcement"},{label:"ShieldBankHeat",field:"shieldBankHeat"},{label:"ShieldBankHeat",field:"thermalLoad"},{label:"ShieldBankSpinUp",field:"shieldBankSpinUp"},{label:"ShieldBankDuration",field:"shieldBankDuration"},{label:"ScannerRange",field:"scannerRange"},{label:"SensorTargetScanAngle",field:"scanAngle"},{label:"MaxAngle",field:"scanAngle"},{label:"ScannerTimeToScan",field:"scanTime"},{label:"ProbeRadius",field:"probeRadius"},{label:"DSS_PatchRadius",field:"probeRadius"},{label:"FSDInterdictorFacingLimit",field:"interdictorFacingLimit"},{label:"FSDInterdictorRange",field:"interdictorRange"},{label:"DefenceModifierShieldMultiplier",field:"shieldBoost",scale:percent,multiplierBase:percent},{label:"DefenceModifierHealthMultiplier",field:"hullBoost",scale:percent,multiplierBase:percent},{label:"DefenceModifierHealthAddition",field:"hullReinforcement"},{label:"DefenceModifierShieldAddition",field:"shieldAddition"},{label:"GuardianModuleResistance",field:"guardianZoneResistance",capabilityValue:"Active"},{label:"KineticResistance",field:"kineticResistance",scale:percent,multiplierBase:-percent},{label:"ThermicResistance",field:"thermalResistance",scale:percent,multiplierBase:-percent},{label:"ExplosiveResistance",field:"explosiveResistance",scale:percent,multiplierBase:-percent},{label:"CausticResistance",field:"causticResistance",scale:percent,multiplierBase:-percent},{label:"DamageProtection",field:"moduleProtection",scale:percent},{label:"ModuleDefenceAbsorption",field:"moduleProtection",scale:percent},{label:"Damage",field:"damage"},{label:"Rounds",field:"roundsPerShot",defaultBase:1},{label:"RoundsPerShot",field:"roundsPerShot",defaultBase:1},{label:"RateOfFire",field:"rateOfFire"},{label:"BurstInterval",field:"burstInterval"},{label:"BurstSize",field:"burstRounds",defaultBase:1},{label:"BurstRateOfFire",field:"burstRateOfFire",defaultBase:1},{label:"AmmoClipSize",field:"clipSize"},{label:"AmmoMaximum",field:"ammoMaximum"},{label:"ReloadTime",field:"reloadTime"},{label:"DistributorDraw",field:"distributorDraw"},{label:"ThermalLoad",field:"thermalLoad"},{label:"ArmourPenetration",field:"armourPiercing"},{label:"Range",field:"maximumRange"},{label:"Range",field:"scannerRange"},{label:"MaximumRange",field:"maximumRange"},{label:"FalloffRange",field:"falloffRange"},{label:"DamageFalloffRange",field:"falloffRange"},{label:"ShotSpeed",field:"shotSpeed"},{label:"$Kinetic;",field:"damageDistribution",damageType:"kinetic",scale:percent,defaultBase:0},{label:"$Thermal;",field:"damageDistribution",damageType:"thermal",scale:percent,defaultBase:0},{label:"$Explosive;",field:"damageDistribution",damageType:"explosive",scale:percent,defaultBase:0},{label:"$Absolute;",field:"damageDistribution",damageType:"absolute",scale:percent,defaultBase:0},{label:"Jitter",field:"jitter",defaultBase:0}];var BY_LABEL=(()=>{const entries=/* @__PURE__ */new Map;for(const entry of STAT_LABELS){const forLabel=entries.get(entry.label)??[];forLabel.push(entry);entries.set(entry.label,forLabel)}return entries})();var LABELS_BY_FIELD=(()=>{const labels=/* @__PURE__ */new Map;for(const entry of STAT_LABELS){if(entry.damageType!==void 0)continue;const fieldLabels=labels.get(entry.field)??[];fieldLabels.push(entry.label);labels.set(entry.field,fieldLabels)}return labels})();function baseStats(stats){const base={};for(const{label:label,field:field,damageType:damageType,scale:scale,defaultBase:defaultBase}of STAT_LABELS){if(base[label]!==void 0)continue;const value=damageType===void 0?stats[field]:stats.damageDistribution?.[damageType];if(typeof value==="number")base[label]=value*(scale??1);else if(defaultBase!==void 0&&isWeapon(stats))base[label]=defaultBase}return base}function isWeapon(stats){return stats.damage!==void 0}function fieldForLabel(label,stats){const entries=BY_LABEL.get(label);if(!entries||entries.length===0)return null;if(stats&&entries.length>1){const carried=entries.find(entry=>typeof stats[entry.field]==="number");if(carried)return carried.field}return entries[0].field}function damageTypeForLabel(label){return BY_LABEL.get(label)?.[0]?.damageType??null}function labelsForDamageType(type){return STAT_LABELS.filter(entry=>entry.damageType===type).map(entry=>entry.label)}function scaleForLabel(label){return BY_LABEL.get(label)?.[0]?.scale??1}function multiplierBaseForLabel(label){return BY_LABEL.get(label)?.[0]?.multiplierBase??null}function capabilityValueForLabel(label){return BY_LABEL.get(label)?.[0]?.capabilityValue??null}function labelsForField(field){return LABELS_BY_FIELD.get(field)??[]}var round6=n=>Math.round(n*1e6)/1e6;function computeModifiers(base,grade,quality=1,experimental){if(!Number.isFinite(quality)||quality<0||quality>1){throw new RangeError(`computeModifiers: quality must be a finite number in [0, 1]`)}const roll=quality;const byLabel=/* @__PURE__ */new Map;const add=(label,method,value,stated)=>{const list=byLabel.get(label)??[];list.push({method:method,value:value,stated:stated});byLabel.set(label,list)};const features="features"in grade?grade.features:grade;for(const f of features){add(f.label,f.method,f.min+(f.max-f.min)*roll,f.min===f.max||roll===0||roll===1)}const experimentalModifiers=experimental&&"modifiers"in experimental?experimental.modifiers:experimental;for(const e of experimentalModifiers??[])add(e.label,e.method,e.value,true);const modifiers=[];let clipIsOverwritten=false;for(const[label,contributions]of byLabel){const capabilityValue=capabilityValueForLabel(label);if(capabilityValue!==null){modifiers.push({Label:label,ValueStr:capabilityValue});continue}const original=base[label];const overwrite=contributions.find(c=>c.method==="overwrite");const multiplierBase=multiplierBaseForLabel(label);const baseless=original===void 0&&(multiplierBase!==null||overwrite!==void 0||contributions.some(c=>c.method==="additive"));if(original===void 0&&!baseless)continue;let value=original??0;if(multiplierBase===null){for(const c of contributions)if(c.method==="multiplicative")value*=1+c.value;for(const c of contributions)if(c.method==="additive")value+=c.value}else{let factor=1+value/multiplierBase;for(const c of contributions){if(c.method==="overwrite")continue;factor*=1+c.value*100/multiplierBase}value=(factor-1)*multiplierBase}if(overwrite)value=overwrite.value;if(label==="AmmoClipSize"){if(overwrite)clipIsOverwritten=true;else if(original!==void 0&&contributions.every(c=>c.stated)){value=snapToStatedWhole(value,original)}}else if(label==="AmmoMaximum"&&!overwrite){value=Math.round(value)}modifiers.push({Label:label,Value:round6(value),...original===void 0&&multiplierBase===null?{}:{OriginalValue:original??0}})}const resolved=resolveFalloffFromRange(modifiers,base);return clipIsOverwritten?resolved:roundClipToWholeBursts(resolved,base)}function roundClipToWholeBursts(modifiers,base){const clip=modifiers.find(m=>m.Label==="AmmoClipSize");if(!clip?.Value||clip.Value===clip.OriginalValue)return modifiers;const burst=modifiers.find(m=>m.Label==="BurstSize")?.Value||base["BurstSize"]||1;const rounded=Math.ceil(clip.Value/burst)*burst;if(rounded===clip.Value)return modifiers;return modifiers.map(m=>m===clip?{...m,Value:rounded}:m)}function snapToStatedWhole(value,base){const whole=Math.round(value);return Math.abs(value-whole)<=Math.abs(base)*5e-4?whole:value}function resolveFalloffFromRange(modifiers,base){const falloff=modifiers.find(m=>m.Label==="FalloffRange");if(!falloff||falloff.Value===void 0)return modifiers;const range=modifiers.find(m=>m.Label==="Range"||m.Label==="MaximumRange")?.Value??base["Range"]??base["MaximumRange"];if(range===void 0){return falloff.Value<=1?modifiers.filter(m=>m!==falloff):modifiers}if(falloff.Value<=1||falloff.Value>range){return modifiers.map(m=>m===falloff?{...m,Value:round6(range)}:m)}return modifiers}function rollsForGrade(grade){if(!Number.isInteger(grade)||grade<1||grade>5){throw new RangeError(`rollsForGrade: grade must be an integer in [1, 5]`)}return grade}function sumMaterials(...lists){const totals=/* @__PURE__ */new Map;for(const list of lists){for(const material of list){const key=material.symbol.toLowerCase();const previous=totals.get(key);totals.set(key,{symbol:previous?.symbol??material.symbol,name:previous?.name??material.name,count:(previous?.count??0)+material.count})}}return[...totals.values()]}export{baseStats,capabilityValueForLabel,computeModifiers,damageTypeForLabel,fieldForLabel,labelsForDamageType,labelsForField,rollsForGrade,scaleForLabel,sumMaterials};//# sourceMappingURL=chunk-VZZ2XIRE.js.map
1
+ var percent=100;var STAT_LABELS=[{label:"Mass",field:"mass"},{label:"Integrity",field:"integrity"},{label:"PowerDraw",field:"powerDraw"},{label:"BootTime",field:"bootTime"},{label:"FSDOptimalMass",field:"optMass"},{label:"EngineOptimalMass",field:"optMass"},{label:"EngineMinimumMass",field:"minMass"},{label:"MaximumMass",field:"maxMass"},{label:"ShieldGenOptimalMass",field:"optMass"},{label:"ShieldGenMinimumMass",field:"minMass"},{label:"ShieldGenMaximumMass",field:"maxMass"},{label:"EngineOptPerformance",field:"optMultiplier",scale:percent},{label:"EngineMinPerformance",field:"minMultiplier",scale:percent},{label:"EngineMaxPerformance",field:"maxMultiplier",scale:percent},{label:"ShieldGenStrength",field:"optMultiplier",scale:percent},{label:"ShieldGenMinStrength",field:"minMultiplier",scale:percent},{label:"ShieldGenMaxStrength",field:"maxMultiplier",scale:percent},{label:"EngineHeatRate",field:"engineHeatRate"},{label:"FSDHeatRate",field:"fsdHeatRate"},{label:"MaxFuelPerJump",field:"maxFuel"},{label:"PowerCapacity",field:"powerCapacity"},{label:"HeatEfficiency",field:"heatEfficiency"},{label:"EnginesCapacity",field:"enginesCapacity"},{label:"EnginesRecharge",field:"enginesRecharge"},{label:"SystemsCapacity",field:"systemsCapacity"},{label:"SystemsRecharge",field:"systemsRecharge"},{label:"WeaponsCapacity",field:"weaponsCapacity"},{label:"WeaponsRecharge",field:"weaponsRecharge"},{label:"RefuelRate",field:"refuelRate"},{label:"FuelScoopRate",field:"refuelRate"},{label:"FuelCapacity",field:"fuelCapacity"},{label:"CargoCapacity",field:"cargoCapacity"},{label:"RegenRate",field:"shieldRegenRate"},{label:"BrokenRegenRate",field:"shieldBrokenRegenRate"},{label:"EnergyPerRegen",field:"distributorDraw"},{label:"ShieldBankReinforcement",field:"shieldBankReinforcement"},{label:"ShieldBankHeat",field:"shieldBankHeat"},{label:"ShieldBankHeat",field:"thermalLoad"},{label:"ShieldBankSpinUp",field:"shieldBankSpinUp"},{label:"ShieldBankDuration",field:"shieldBankDuration"},{label:"ScannerRange",field:"scannerRange"},{label:"SensorTargetScanAngle",field:"scanAngle"},{label:"MaxAngle",field:"scanAngle"},{label:"ScannerTimeToScan",field:"scanTime"},{label:"ProbeRadius",field:"probeRadius"},{label:"DSS_PatchRadius",field:"probeRadius"},{label:"FSDInterdictorFacingLimit",field:"interdictorFacingLimit"},{label:"FSDInterdictorRange",field:"interdictorRange"},{label:"DefenceModifierShieldMultiplier",field:"shieldBoost",scale:percent,multiplierBase:percent},{label:"DefenceModifierHealthMultiplier",field:"hullBoost",scale:percent,multiplierBase:percent},{label:"DefenceModifierHealthAddition",field:"hullReinforcement"},{label:"DefenceModifierShieldAddition",field:"shieldAddition"},{label:"GuardianModuleResistance",field:"guardianZoneResistance",capabilityValue:"Active"},{label:"KineticResistance",field:"kineticResistance",scale:percent,multiplierBase:-percent},{label:"ThermicResistance",field:"thermalResistance",scale:percent,multiplierBase:-percent},{label:"ExplosiveResistance",field:"explosiveResistance",scale:percent,multiplierBase:-percent},{label:"CausticResistance",field:"causticResistance",scale:percent,multiplierBase:-percent},{label:"DamageProtection",field:"moduleProtection",scale:percent},{label:"ModuleDefenceAbsorption",field:"moduleProtection",scale:percent},{label:"Damage",field:"damage"},{label:"Rounds",field:"roundsPerShot",defaultBase:1},{label:"RoundsPerShot",field:"roundsPerShot",defaultBase:1},{label:"RateOfFire",field:"rateOfFire"},{label:"BurstInterval",field:"burstInterval"},{label:"BurstSize",field:"burstRounds",defaultBase:1},{label:"BurstRateOfFire",field:"burstRateOfFire",defaultBase:1},{label:"AmmoClipSize",field:"clipSize"},{label:"AmmoMaximum",field:"ammoMaximum"},{label:"ReloadTime",field:"reloadTime"},{label:"DistributorDraw",field:"distributorDraw"},{label:"ThermalLoad",field:"thermalLoad"},{label:"ArmourPenetration",field:"armourPiercing"},{label:"Range",field:"maximumRange"},{label:"Range",field:"scannerRange"},{label:"MaximumRange",field:"maximumRange"},{label:"FalloffRange",field:"falloffRange"},{label:"DamageFalloffRange",field:"falloffRange"},{label:"ShotSpeed",field:"shotSpeed"},{label:"$Kinetic;",field:"damageDistribution",damageType:"kinetic",scale:percent,defaultBase:0},{label:"$Thermal;",field:"damageDistribution",damageType:"thermal",scale:percent,defaultBase:0},{label:"$Explosive;",field:"damageDistribution",damageType:"explosive",scale:percent,defaultBase:0},{label:"$Absolute;",field:"damageDistribution",damageType:"absolute",scale:percent,defaultBase:0},{label:"Jitter",field:"jitter",defaultBase:0}];var BY_LABEL=(()=>{const entries=/* @__PURE__ */new Map;for(const entry of STAT_LABELS){const forLabel=entries.get(entry.label)??[];forLabel.push(entry);entries.set(entry.label,forLabel)}return entries})();var LABELS_BY_FIELD=(()=>{const labels=/* @__PURE__ */new Map;for(const entry of STAT_LABELS){if(entry.damageType!==void 0)continue;const fieldLabels=labels.get(entry.field)??[];fieldLabels.push(entry.label);labels.set(entry.field,fieldLabels)}return labels})();function baseStats(stats){const base={};for(const{label:label,field:field,damageType:damageType,scale:scale,defaultBase:defaultBase}of STAT_LABELS){if(base[label]!==void 0)continue;const value=damageType===void 0?stats[field]:stats.damageDistribution?.[damageType];if(typeof value==="number")base[label]=value*(scale??1);else if(defaultBase!==void 0&&isWeapon(stats))base[label]=defaultBase}return base}function isWeapon(stats){return stats.damage!==void 0}function fieldForLabel(label,stats){const entries=BY_LABEL.get(label);if(!entries||entries.length===0)return null;if(stats&&entries.length>1){const carried=entries.find(entry=>typeof stats[entry.field]==="number");if(carried)return carried.field}return entries[0].field}function damageTypeForLabel(label){return BY_LABEL.get(label)?.[0]?.damageType??null}function labelsForDamageType(type){return STAT_LABELS.filter(entry=>entry.damageType===type).map(entry=>entry.label)}function scaleForLabel(label){return BY_LABEL.get(label)?.[0]?.scale??1}function multiplierBaseForLabel(label){return BY_LABEL.get(label)?.[0]?.multiplierBase??null}function capabilityValueForLabel(label){return BY_LABEL.get(label)?.[0]?.capabilityValue??null}function labelsForField(field){return LABELS_BY_FIELD.get(field)??[]}var PRECISE_VALUE=/* @__PURE__ */Symbol("precise engineering modifier value");function withPreciseModifierValue(modifier,value){Object.defineProperty(modifier,PRECISE_VALUE,{value:value});return modifier}function preciseModifierValue(modifier){return modifier[PRECISE_VALUE]??modifier.Value}var round6=n=>{const rounded=Math.round(n*1e6)/1e6;return Object.is(rounded,-0)?0:rounded};var FLOAT32_SCALED_BASE_LABELS=/* @__PURE__ */new Set(["EngineOptPerformance","EngineMinPerformance","EngineMaxPerformance","ShieldGenStrength","ShieldGenMinStrength","ShieldGenMaxStrength"]);function computeModifiers(base,grade,quality=1,experimental){if(!Number.isFinite(quality)||quality<0||quality>1){throw new RangeError(`computeModifiers: quality must be a finite number in [0, 1]`)}const f=Math.fround;const roll=f(quality);const byLabel=/* @__PURE__ */new Map;const add=(label,method,value,stated)=>{const list=byLabel.get(label)??[];list.push({method:method,value:value,stated:stated});byLabel.set(label,list)};const features="features"in grade?grade.features:grade;for(const feature of features){const rolledValue=roll===0?feature.min:roll===1?feature.max:feature.min+(feature.max-feature.min)*roll;const value=feature.method==="overwrite"?rolledValue:roll===0||roll===1?f(rolledValue):f(f(feature.min)+f(f(feature.max-feature.min)*roll));add(feature.label,feature.method,value,feature.min===feature.max||roll===0||roll===1)}const experimentalModifiers=experimental&&"modifiers"in experimental?experimental.modifiers:experimental;for(const e of experimentalModifiers??[]){add(e.label,e.method,e.method==="overwrite"?e.value:f(e.value),true)}const modifiers=[];let clipIsOverwritten=false;for(const[label,contributions]of byLabel){const capabilityValue=capabilityValueForLabel(label);if(capabilityValue!==null){modifiers.push({Label:label,ValueStr:capabilityValue});continue}const baseValue=base[label];const overwrite=contributions.find(c=>c.method==="overwrite");const multiplierBase=multiplierBaseForLabel(label);const original=baseValue===void 0?void 0:float32JournalValue(baseValue,multiplierBase,FLOAT32_SCALED_BASE_LABELS.has(label)?scaleForLabel(label):1);const baseless=original===void 0&&(multiplierBase!==null||overwrite!==void 0||contributions.some(c=>c.method==="additive"));if(original===void 0&&!baseless)continue;let value=original??0;if(multiplierBase===null){for(const c of contributions){if(c.method==="multiplicative")value=f(value*f(1+f(c.value)))}for(const c of contributions){if(c.method==="additive")value=f(value+f(c.value))}}else{let factor=f(1+value/multiplierBase);for(const c of contributions){if(c.method==="overwrite")continue;factor=f(factor*f(1+f(f(c.value)*100/multiplierBase)))}value=f(f(factor-1)*multiplierBase)}if(overwrite)value=overwrite.value;if(label==="AmmoClipSize"){if(overwrite)clipIsOverwritten=true;else if(original!==void 0&&contributions.every(c=>c.stated)){value=snapToStatedWhole(value,original)}}else if(label==="AmmoMaximum"&&!overwrite){value=Math.round(value)}modifiers.push(withPreciseModifierValue({Label:label,Value:round6(value),...original===void 0&&multiplierBase===null?{}:{OriginalValue:round6(original??0)}},value))}const resolved=resolveFalloffFromRange(modifiers,base);return clipIsOverwritten?resolved:roundClipToWholeBursts(resolved,base)}function float32JournalValue(value,multiplierBase,scale){if(multiplierBase===null){return Math.fround(Math.fround(value/scale)*scale)}const factor=Math.fround(1+value/multiplierBase);return Math.fround(Math.fround(factor-1)*multiplierBase)}function roundClipToWholeBursts(modifiers,base){const clip=modifiers.find(m=>m.Label==="AmmoClipSize");if(!clip?.Value||clip.Value===clip.OriginalValue)return modifiers;const burst=modifiers.find(m=>m.Label==="BurstSize")?.Value||base["BurstSize"]||1;const rounded=Math.ceil(clip.Value/burst)*burst;if(rounded===clip.Value)return modifiers;return modifiers.map(m=>m===clip?{...m,Value:rounded}:m)}function snapToStatedWhole(value,base){const whole=Math.round(value);return Math.abs(value-whole)<=Math.abs(base)*5e-4?whole:value}function resolveFalloffFromRange(modifiers,base){const falloff=modifiers.find(m=>m.Label==="FalloffRange");if(!falloff||falloff.Value===void 0)return modifiers;const range=modifiers.find(m=>m.Label==="Range"||m.Label==="MaximumRange")?.Value??base["Range"]??base["MaximumRange"];if(range===void 0){return falloff.Value<=1?modifiers.filter(m=>m!==falloff):modifiers}if(falloff.Value<=1||falloff.Value>range){return modifiers.map(m=>m===falloff?{...m,Value:round6(range)}:m)}return modifiers}function rollsForGrade(grade){if(!Number.isInteger(grade)||grade<1||grade>5){throw new RangeError(`rollsForGrade: grade must be an integer in [1, 5]`)}return grade}function sumMaterials(...lists){const totals=/* @__PURE__ */new Map;for(const list of lists){for(const material of list){const key=material.symbol.toLowerCase();const previous=totals.get(key);totals.set(key,{symbol:previous?.symbol??material.symbol,name:previous?.name??material.name,count:(previous?.count??0)+material.count})}}return[...totals.values()]}export{baseStats,capabilityValueForLabel,computeModifiers,damageTypeForLabel,fieldForLabel,labelsForDamageType,labelsForField,preciseModifierValue,rollsForGrade,scaleForLabel,sumMaterials};//# sourceMappingURL=chunk-SVZARHWP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ships/internal/module-stat-labels.ts","../src/ships/internal/engineering-precision.ts","../src/ships/engineering.ts"],"names":["percent","STAT_LABELS","label","field","scale","multiplierBase","capabilityValue","defaultBase","damageType","BY_LABEL","entries","Map","entry","forLabel","get","push","set","LABELS_BY_FIELD","labels","fieldLabels","baseStats","stats","base","value","damageDistribution","isWeapon","damage","fieldForLabel","length","carried","find","damageTypeForLabel","labelsForDamageType","type","filter","map","scaleForLabel","multiplierBaseForLabel","capabilityValueForLabel","labelsForField","PRECISE_VALUE","Symbol","withPreciseModifierValue","modifier","Object","defineProperty","preciseModifierValue","Value","round6","n","rounded","Math","round","is","FLOAT32_SCALED_BASE_LABELS","Set","computeModifiers","grade","quality","experimental","Number","isFinite","RangeError","f","fround","roll","byLabel","add","method","stated","list","features","feature","rolledValue","min","max","experimentalModifiers","modifiers","e","clipIsOverwritten","contributions","Label","ValueStr","baseValue","overwrite","c","original","float32JournalValue","has","baseless","some","factor","every","snapToStatedWhole","OriginalValue","resolved","resolveFalloffFromRange","roundClipToWholeBursts","clip","m","burst","ceil","whole","abs","falloff","range","rollsForGrade","isInteger","sumMaterials","lists","totals","material","key","symbol","toLowerCase","previous","name","count","values"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import{combinedRateOfFire}from"./chunk-LJI7VXJD.js";import{getPreEngineeredVariants}from"./chunk-XYK6DYVQ.js";import{getExperimentalEffect}from"./chunk-PMJG7PHU.js";import{fixedModifierFeatures}from"./chunk-4TXQWLIQ.js";import{getModuleBySymbol}from"./chunk-PRQELBIC.js";import{ALL_MODULES}from"./chunk-W7XI3WVA.js";import{fieldForLabel,scaleForLabel,capabilityValueForLabel,computeModifiers,baseStats}from"./chunk-SVZARHWP.js";import{normalizeKey}from"./chunk-S4DBNX2B.js";import{requireStringIfPresent}from"./chunk-B5TT26XE.js";function scaleDamageComponents(components,baseDamage,effectiveDamage){const scale=baseDamage!==void 0&&baseDamage!==0&&effectiveDamage!==void 0?effectiveDamage/baseDamage:1;return{...components.kinetic===void 0?{}:{kinetic:components.kinetic*scale},...components.thermal===void 0?{}:{thermal:components.thermal*scale},...components.explosive===void 0?{}:{explosive:components.explosive*scale},...components.absolute===void 0?{}:{absolute:components.absolute*scale},...components.antiXeno===void 0?{}:{antiXeno:components.antiXeno*scale},...components.unclassified===void 0?{}:{unclassified:components.unclassified.map(value=>value*scale)}}}function modifiersWithExperimental(variant,experimental){const module=getModuleBySymbol(variant.symbol,ALL_MODULES);const effectName=experimental??variant.experimental;if(!module||!variant.modifiers?.length&&effectName===void 0)return null;const effect=effectName===void 0?void 0:getExperimentalEffect(effectName);if(effectName!==void 0&&!effect)return null;return computeModifiers(baseStats(module),fixedModifierFeatures(variant.modifiers??[]),1,effect??void 0)}function getPreEngineeredModifiers(variant){return modifiersWithExperimental(variant)??[]}function sameJournalNumber(actual,expected){return Math.abs(actual-expected)<=Math.max(1e-5,Math.abs(expected)*1e-6)}function modifierKey(modifier,module){return fieldForLabel(modifier.Label,module)??`label:${normalizeKey(modifier.Label,"identifyPreEngineeredVariant: module.Engineering.Modifiers[].Label")}`}function sameModifier(actual,expected){if(expected.Value!==void 0){return actual.Value!==void 0&&sameJournalNumber(actual.Value,expected.Value)}return expected.ValueStr!==void 0&&actual.ValueStr!==void 0}function identifyPreEngineeredVariant(module){const engineering=module.Engineering;if(!engineering?.Modifiers?.length)return null;requireStringIfPresent(module.Item,"identifyPreEngineeredVariant: module.Item");const stock=getModuleBySymbol(module.Item,ALL_MODULES);if(!stock)return null;const actualByKey=/* @__PURE__ */new Map;for(const modifier of engineering.Modifiers){actualByKey.set(modifierKey(modifier,stock),modifier)}const capturedExperimental=normalizeKey(engineering.ExperimentalEffect,"identifyPreEngineeredVariant: module.Engineering.ExperimentalEffect");const matches=[];for(const candidate of getPreEngineeredVariants(module.Item)){if(!candidate.modifiers?.length)continue;if(candidate.experimental!==void 0&&candidate.experimental.toLowerCase()!==capturedExperimental){continue}const expected=modifiersWithExperimental(candidate,engineering.ExperimentalEffect);if(!expected?.length)continue;let matched=0;let disagrees=false;for(const predicted of expected){const actual=actualByKey.get(modifierKey(predicted,stock));if(!actual)continue;if(!sameModifier(actual,predicted)){disagrees=true;break}matched++}if(!disagrees&&matched>=Math.max(1,expected.length-1))matches.push(candidate)}return matches.length===1?matches[0]:null}function unresolvedModifiers(variant){const resolved=new Set(getPreEngineeredModifiers(variant).map(modifier=>modifier.Label));return(variant.modifiers??[]).map(modifier=>modifier.label).filter(label=>!resolved.has(label))}function getPreEngineeredStats(variant){const module=getModuleBySymbol(variant.symbol,ALL_MODULES);if(!module)return null;if(!variant.modifiers?.length&&!variant.engineeringLocked&&variant.experimental===void 0)return module;const modifiers=variant.modifiers??[];const resolved={...module,...variant.engineeringLocked?{engineeringLocked:true}:{}};for(const{Label:Label,Value:Value,ValueStr:ValueStr}of getPreEngineeredModifiers(variant)){const field=fieldForLabel(Label,module);if(field&&field!=="damageDistribution"&&Value!==void 0){Object.assign(resolved,{[field]:Value/scaleForLabel(Label)})}else if(field&&ValueStr!==void 0&&capabilityValueForLabel(Label)!==null){Object.assign(resolved,{[field]:true})}}const experimentalDamageDistribution=variant.experimental?getExperimentalEffect(variant.experimental)?.damageDistribution:void 0;if(experimentalDamageDistribution){resolved.damageDistribution={...experimentalDamageDistribution};delete resolved.damageComponents}if(resolved.rateOfFire!==void 0&&!modifiers.some(m=>m.label==="RateOfFire")&&modifiers.some(m=>m.label==="BurstSize"||m.label==="BurstRateOfFire"||m.label==="BurstInterval")){const rate=combinedRateOfFire(resolved);if(rate!==void 0)resolved.rateOfFire=rate}if(module.damageComponents&&!experimentalDamageDistribution){resolved.damageComponents=scaleDamageComponents(module.damageComponents,module.damage,resolved.damage)}return resolved}export{getPreEngineeredModifiers,getPreEngineeredStats,identifyPreEngineeredVariant,scaleDamageComponents,unresolvedModifiers};//# sourceMappingURL=chunk-T6DP655O.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ships/internal/damage-components.ts","../src/ships/pre-engineered-stats.ts"],"names":["combinedRateOfFire","getPreEngineeredVariants","getExperimentalEffect","fixedModifierFeatures","getModuleBySymbol","ALL_MODULES","fieldForLabel","scaleForLabel","capabilityValueForLabel","computeModifiers","baseStats","normalizeKey","requireStringIfPresent","scaleDamageComponents","components","baseDamage","effectiveDamage","scale","kinetic","thermal","explosive","absolute","antiXeno","unclassified","map","value","modifiersWithExperimental","variant","experimental","module","symbol","effectName","modifiers","length","effect","getPreEngineeredModifiers","sameJournalNumber","actual","expected","Math","abs","max","modifierKey","modifier","Label","sameModifier","Value","ValueStr","identifyPreEngineeredVariant","engineering","Engineering","Modifiers","Item","stock","actualByKey","Map","set","capturedExperimental","ExperimentalEffect","matches","candidate","toLowerCase","matched","disagrees","predicted","get","push","unresolvedModifiers","resolved","Set","label","filter","has","getPreEngineeredStats","engineeringLocked","field","Object","assign","experimentalDamageDistribution","damageDistribution","damageComponents","rateOfFire","some","m","rate","damage"],"mappings":"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"}