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