@elite-dangerous-almanac/core 0.1.7 → 0.2.0
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/i18n/SOURCES.md +2 -2
- package/PROVENANCE/ships/SOURCES.md +29 -9
- package/README.md +54 -40
- package/dist/astro/galaxy-grid.js +1 -1
- package/dist/astro/index.d.ts +1 -1
- package/dist/astro/index.js +1 -1
- package/dist/astro/naming-region-origins.d.ts +1 -1
- package/dist/astro/naming-region-origins.js +1 -1
- package/dist/astro/nebulae.d.ts +2 -2
- package/dist/astro/permit-locks.d.ts +2 -1
- package/dist/astro/permit-locks.js +1 -1
- package/dist/astro/procedural-system.d.ts +2 -1
- package/dist/astro/procedural-system.js +1 -1
- package/dist/astro/sector-name.d.ts +2 -1
- package/dist/astro/sector-name.js +1 -1
- package/dist/astro/system-address.d.ts +1 -1
- package/dist/astro/system-name.d.ts +14 -9
- package/dist/astro/system-name.js +1 -1
- package/dist/chunk-2W5MW376.js +1 -0
- package/dist/chunk-2W5MW376.js.map +1 -0
- package/dist/{chunk-VZZUNSDF.js → chunk-4KJ7CR74.js} +1 -1
- package/dist/{chunk-VZZUNSDF.js.map → chunk-4KJ7CR74.js.map} +1 -1
- package/dist/{chunk-6EUVIZAS.js → chunk-4QYTVSNR.js} +1 -1
- package/dist/{chunk-EKQCVCMK.js → chunk-5ZVYRX6Z.js} +1 -1
- package/dist/{chunk-EKQCVCMK.js.map → chunk-5ZVYRX6Z.js.map} +1 -1
- package/dist/chunk-6GJHUWMO.js +1 -0
- package/dist/chunk-6GJHUWMO.js.map +1 -0
- package/dist/chunk-6L56LWTT.js +1 -0
- package/dist/chunk-6L56LWTT.js.map +1 -0
- package/dist/{chunk-GQ5GX5TB.js → chunk-6O4NRRSB.js} +1 -1
- package/dist/chunk-6O4NRRSB.js.map +1 -0
- package/dist/{chunk-WNGQ3IAM.js → chunk-6UNAD74Z.js} +1 -1
- package/dist/{chunk-WNGQ3IAM.js.map → chunk-6UNAD74Z.js.map} +1 -1
- package/dist/{chunk-JPBMRJFC.js → chunk-77I24V6B.js} +1 -1
- package/dist/chunk-77I24V6B.js.map +1 -0
- package/dist/chunk-7ATBEOVC.js +1 -0
- package/dist/chunk-7ATBEOVC.js.map +1 -0
- package/dist/chunk-7TQ2X6Q3.js +1 -0
- package/dist/chunk-7TQ2X6Q3.js.map +1 -0
- package/dist/{chunk-6EPYVBAX.js → chunk-A6OINYNP.js} +1 -1
- package/dist/{chunk-Q3QCLNVG.js → chunk-AYAKU4YA.js} +1 -1
- package/dist/chunk-AYAKU4YA.js.map +1 -0
- package/dist/chunk-B7EYTZRK.js +1 -0
- package/dist/chunk-B7EYTZRK.js.map +1 -0
- package/dist/{chunk-EBAHNZ36.js → chunk-CIULJH3G.js} +1 -1
- package/dist/{chunk-EBAHNZ36.js.map → chunk-CIULJH3G.js.map} +1 -1
- package/dist/{chunk-SNADUQSJ.js → chunk-CJK2IBI2.js} +1 -1
- package/dist/{chunk-SNADUQSJ.js.map → chunk-CJK2IBI2.js.map} +1 -1
- package/dist/{chunk-DYPOL3CI.js → chunk-CJQ37JII.js} +1 -1
- package/dist/chunk-CJQ37JII.js.map +1 -0
- package/dist/chunk-D6YEHR5S.js +1 -0
- package/dist/chunk-D6YEHR5S.js.map +1 -0
- package/dist/{chunk-Z6XMXMVI.js → chunk-DBDCOHI4.js} +1 -1
- package/dist/chunk-DBDCOHI4.js.map +1 -0
- package/dist/{chunk-AFVYCQWL.js → chunk-DCB4COCL.js} +1 -1
- package/dist/{chunk-AFVYCQWL.js.map → chunk-DCB4COCL.js.map} +1 -1
- package/dist/{chunk-CJWFY6OX.js → chunk-DSMLYA2M.js} +1 -1
- package/dist/{chunk-CJWFY6OX.js.map → chunk-DSMLYA2M.js.map} +1 -1
- package/dist/{chunk-UXBCLFGU.js → chunk-DWRNXUAX.js} +1 -1
- package/dist/{chunk-UXBCLFGU.js.map → chunk-DWRNXUAX.js.map} +1 -1
- package/dist/{chunk-UHSNB5SV.js → chunk-EVJ32UF3.js} +1 -1
- package/dist/{chunk-UHSNB5SV.js.map → chunk-EVJ32UF3.js.map} +1 -1
- package/dist/chunk-EVW4Z4CB.js +1 -0
- package/dist/chunk-EVW4Z4CB.js.map +1 -0
- package/dist/{chunk-4S6WB7QR.js → chunk-FF2X4K5P.js} +1 -1
- package/dist/chunk-FF2X4K5P.js.map +1 -0
- package/dist/chunk-FYVPZBXN.js +1 -0
- package/dist/chunk-FYVPZBXN.js.map +1 -0
- package/dist/{chunk-QTZPA2FR.js → chunk-GLWPSVFV.js} +1 -1
- package/dist/chunk-GLWPSVFV.js.map +1 -0
- package/dist/chunk-GZYPQIO2.js +1 -0
- package/dist/chunk-GZYPQIO2.js.map +1 -0
- package/dist/chunk-H47K3UWG.js +1 -0
- package/dist/chunk-H47K3UWG.js.map +1 -0
- package/dist/chunk-JGOAQLYW.js +1 -0
- package/dist/chunk-JGOAQLYW.js.map +1 -0
- package/dist/{chunk-JWWYAMGD.js → chunk-MGRDB2BZ.js} +1 -1
- package/dist/{chunk-JWWYAMGD.js.map → chunk-MGRDB2BZ.js.map} +1 -1
- package/dist/{chunk-MKGJPVPS.js → chunk-MRTTQYT5.js} +1 -1
- package/dist/{chunk-MKGJPVPS.js.map → chunk-MRTTQYT5.js.map} +1 -1
- package/dist/chunk-MTJ4MS7W.js +1 -0
- package/dist/chunk-MTJ4MS7W.js.map +1 -0
- package/dist/chunk-NIURLW2F.js +1 -0
- package/dist/chunk-NIURLW2F.js.map +1 -0
- package/dist/chunk-OLKNYGGT.js +1 -0
- package/dist/chunk-OLKNYGGT.js.map +1 -0
- package/dist/{chunk-UXFMVZAY.js → chunk-OVUHQEH5.js} +1 -1
- package/dist/{chunk-UXFMVZAY.js.map → chunk-OVUHQEH5.js.map} +1 -1
- package/dist/chunk-OYFMHDYT.js +1 -0
- package/dist/chunk-OYFMHDYT.js.map +1 -0
- package/dist/chunk-OYR5HUQZ.js +1 -0
- package/dist/chunk-OYR5HUQZ.js.map +1 -0
- package/dist/{chunk-LLHGSBPI.js → chunk-PA5EITW5.js} +1 -1
- package/dist/{chunk-LLHGSBPI.js.map → chunk-PA5EITW5.js.map} +1 -1
- package/dist/chunk-PL75RTA2.js +1 -0
- package/dist/{chunk-2VPVZELZ.js.map → chunk-PL75RTA2.js.map} +1 -1
- package/dist/chunk-PY5L6WC5.js +1 -0
- package/dist/chunk-PY5L6WC5.js.map +1 -0
- package/dist/{chunk-W6EPHHTS.js → chunk-Q2L75GSI.js} +1 -1
- package/dist/chunk-Q2L75GSI.js.map +1 -0
- package/dist/chunk-QJ7GB6FF.js +1 -0
- package/dist/chunk-QJ7GB6FF.js.map +1 -0
- package/dist/chunk-QTAMQ6ME.js +1 -0
- package/dist/chunk-QTAMQ6ME.js.map +1 -0
- package/dist/{chunk-VDVFJXX5.js → chunk-QY3L5BKN.js} +1 -1
- package/dist/{chunk-FMPRCYKY.js → chunk-RRYBSAPX.js} +1 -1
- package/dist/chunk-RRYBSAPX.js.map +1 -0
- package/dist/{chunk-J42ZXLBL.js → chunk-T62GO4AA.js} +1 -1
- package/dist/chunk-T62GO4AA.js.map +1 -0
- package/dist/{chunk-E3BRVGJJ.js → chunk-TBZJIQ5P.js} +1 -1
- package/dist/{chunk-E3BRVGJJ.js.map → chunk-TBZJIQ5P.js.map} +1 -1
- package/dist/chunk-V3AEUBHV.js +1 -0
- package/dist/chunk-V3AEUBHV.js.map +1 -0
- package/dist/chunk-VYDQHPY2.js +1 -0
- package/dist/chunk-VYDQHPY2.js.map +1 -0
- package/dist/chunk-XUHAPOM6.js +1 -0
- package/dist/chunk-XUHAPOM6.js.map +1 -0
- package/dist/chunk-Y6KJJMIM.js +1 -0
- package/dist/chunk-Y6KJJMIM.js.map +1 -0
- package/dist/chunk-YXPZ7QQB.js +1 -0
- package/dist/chunk-YXPZ7QQB.js.map +1 -0
- package/dist/{chunk-Y6UZWNP4.js → chunk-ZCEAPJDH.js} +1 -1
- package/dist/{chunk-Y6UZWNP4.js.map → chunk-ZCEAPJDH.js.map} +1 -1
- package/dist/commodities/commodities.d.ts +20 -10
- package/dist/commodities/commodities.js +1 -1
- package/dist/commodities/index.d.ts +15 -4
- package/dist/commodities/index.js +1 -1
- package/dist/equipment/index.js +1 -1
- package/dist/equipment/modification-costs.d.ts +2 -1
- package/dist/equipment/modification-costs.js.map +1 -1
- package/dist/equipment/modification-journal.js +1 -1
- package/dist/equipment/modifications.d.ts +2 -1
- package/dist/equipment/modifications.js +1 -1
- package/dist/equipment/suits.d.ts +6 -3
- package/dist/equipment/suits.js +1 -1
- package/dist/equipment/upgrade-costs.d.ts +8 -4
- package/dist/equipment/upgrade-costs.js +1 -1
- package/dist/equipment/upgrade-costs.js.map +1 -1
- package/dist/equipment/weapons.d.ts +13 -5
- package/dist/equipment/weapons.js +1 -1
- package/dist/i18n/blueprints.d.ts +6 -6
- package/dist/i18n/blueprints.js +1 -1
- package/dist/i18n/diagnostics.d.ts +1 -13
- package/dist/i18n/engineering-groups.d.ts +1 -0
- package/dist/i18n/engineering-groups.js +1 -1
- package/dist/i18n/experimental-effect-descriptions.d.ts +4 -3
- package/dist/i18n/experimental-effect-descriptions.js +1 -1
- package/dist/i18n/experimental-effects.d.ts +5 -4
- package/dist/i18n/experimental-effects.js +1 -1
- package/dist/i18n/index.d.ts +1 -13
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/pre-engineered.d.ts +7 -6
- package/dist/i18n/pre-engineered.js +1 -1
- package/dist/materials/index.d.ts +16 -4
- package/dist/materials/index.js +1 -1
- package/dist/materials/materials.d.ts +36 -19
- package/dist/materials/materials.js +1 -1
- package/dist/materials/micro-resources.d.ts +18 -7
- package/dist/materials/micro-resources.js +1 -1
- package/dist/ships/armour.d.ts +20 -4
- package/dist/ships/armour.js +1 -1
- package/dist/ships/blueprint-costs.d.ts +20 -17
- package/dist/ships/blueprint-costs.js +1 -1
- package/dist/ships/blueprint-journal.d.ts +9 -8
- package/dist/ships/blueprint-journal.js +1 -1
- package/dist/ships/blueprints.d.ts +14 -12
- package/dist/ships/blueprints.js +1 -1
- package/dist/ships/build-metrics.d.ts +1061 -0
- package/dist/ships/build-metrics.js +1 -0
- package/dist/ships/build-metrics.js.map +1 -0
- package/dist/ships/distributor.d.ts +10 -3
- package/dist/ships/distributor.js +1 -1
- package/dist/ships/engineering-options.d.ts +8 -6
- package/dist/ships/engineering-options.js +1 -1
- package/dist/ships/engineering.d.ts +2 -16
- package/dist/ships/engineering.js +1 -1
- package/dist/ships/experimental-effect-costs.d.ts +5 -5
- package/dist/ships/experimental-effect-costs.js +1 -1
- package/dist/ships/experimental-effects.d.ts +9 -8
- package/dist/ships/experimental-effects.js +1 -1
- package/dist/ships/heat.d.ts +7 -2
- package/dist/ships/heat.js +1 -1
- package/dist/ships/index.d.ts +34 -22
- package/dist/ships/index.js +1 -1
- package/dist/ships/jump-range.d.ts +10 -3
- package/dist/ships/jump-range.js +1 -1
- package/dist/ships/loadout-calculations.d.ts +1 -1
- package/dist/ships/loadout-calculations.js +1 -1
- package/dist/ships/mobility-capacitor.d.ts +90 -0
- package/dist/ships/mobility-capacitor.js +1 -0
- package/dist/ships/mobility-capacitor.js.map +1 -0
- package/dist/ships/mobility.d.ts +41 -17
- package/dist/ships/mobility.js +1 -1
- package/dist/ships/modules-all.js +1 -1
- package/dist/ships/modules-core.js +1 -1
- package/dist/ships/modules.d.ts +27 -1
- package/dist/ships/modules.js +1 -1
- package/dist/ships/power.d.ts +12 -5
- package/dist/ships/power.js +1 -1
- package/dist/ships/pre-engineered-stats.d.ts +10 -8
- package/dist/ships/pre-engineered-stats.js +1 -1
- package/dist/ships/pre-engineered.d.ts +6 -6
- package/dist/ships/pre-engineered.js +1 -1
- package/dist/ships/resistances.d.ts +2 -2
- package/dist/ships/resistances.js +1 -1
- package/dist/ships/shield-capacitor.d.ts +133 -0
- package/dist/ships/shield-capacitor.js +1 -0
- package/dist/ships/shield-capacitor.js.map +1 -0
- package/dist/ships/shield-recovery.d.ts +16 -2
- package/dist/ships/shield-recovery.js +1 -1
- package/dist/ships/shields.d.ts +86 -28
- package/dist/ships/shields.js +1 -1
- package/dist/ships/ship-loadout.d.ts +100 -671
- package/dist/ships/ship-loadout.js +1 -1
- package/dist/ships/ships.d.ts +7 -6
- package/dist/ships/ships.js +1 -1
- package/dist/ships/slef.d.ts +11 -9
- package/dist/ships/slef.js +1 -1
- package/dist/ships/source-purchase.d.ts +2 -1
- package/dist/ships/source-purchase.js +1 -1
- package/dist/ships/weapons-capacitor.d.ts +10 -3
- package/dist/ships/weapons-capacitor.js +1 -1
- package/dist/ships/weapons.d.ts +22 -6
- package/dist/ships/weapons.js +1 -1
- package/dist/{system-address-DYsN1qOT.d.ts → system-address-cyJaeZIS.d.ts} +2 -1
- package/package.json +17 -2
- package/dist/chunk-24INI4U7.js +0 -1
- package/dist/chunk-24INI4U7.js.map +0 -1
- package/dist/chunk-2FHHMYDC.js +0 -1
- package/dist/chunk-2FHHMYDC.js.map +0 -1
- package/dist/chunk-2TW4ZBI3.js +0 -1
- package/dist/chunk-2TW4ZBI3.js.map +0 -1
- package/dist/chunk-2VPVZELZ.js +0 -1
- package/dist/chunk-4S6WB7QR.js.map +0 -1
- package/dist/chunk-DVL5RBKX.js +0 -1
- package/dist/chunk-DVL5RBKX.js.map +0 -1
- package/dist/chunk-DYPOL3CI.js.map +0 -1
- package/dist/chunk-EXVCRIDP.js +0 -1
- package/dist/chunk-EXVCRIDP.js.map +0 -1
- package/dist/chunk-FGXWVFN6.js +0 -1
- package/dist/chunk-FGXWVFN6.js.map +0 -1
- package/dist/chunk-FMPRCYKY.js.map +0 -1
- package/dist/chunk-G3265B27.js +0 -1
- package/dist/chunk-G3265B27.js.map +0 -1
- package/dist/chunk-GQ5GX5TB.js.map +0 -1
- package/dist/chunk-IOJXLDJN.js +0 -1
- package/dist/chunk-IOJXLDJN.js.map +0 -1
- package/dist/chunk-IYU4WLFM.js +0 -1
- package/dist/chunk-IYU4WLFM.js.map +0 -1
- package/dist/chunk-J42ZXLBL.js.map +0 -1
- package/dist/chunk-JPBMRJFC.js.map +0 -1
- package/dist/chunk-LJI7VXJD.js +0 -1
- package/dist/chunk-LJI7VXJD.js.map +0 -1
- package/dist/chunk-OCND33TO.js +0 -1
- package/dist/chunk-OCND33TO.js.map +0 -1
- package/dist/chunk-P2QOL63K.js +0 -1
- package/dist/chunk-P2QOL63K.js.map +0 -1
- package/dist/chunk-Q3QCLNVG.js.map +0 -1
- package/dist/chunk-QTZPA2FR.js.map +0 -1
- package/dist/chunk-RLUS76LZ.js +0 -1
- package/dist/chunk-RLUS76LZ.js.map +0 -1
- package/dist/chunk-TEOJCBSG.js +0 -1
- package/dist/chunk-TEOJCBSG.js.map +0 -1
- package/dist/chunk-TMMGS6TC.js +0 -1
- package/dist/chunk-TMMGS6TC.js.map +0 -1
- package/dist/chunk-W6EPHHTS.js.map +0 -1
- package/dist/chunk-Z6XMXMVI.js.map +0 -1
- package/dist/chunk-ZNCXENNB.js +0 -1
- package/dist/chunk-ZNCXENNB.js.map +0 -1
- package/dist/chunk-ZZT2PQZ5.js +0 -1
- package/dist/chunk-ZZT2PQZ5.js.map +0 -1
- /package/dist/{chunk-6EUVIZAS.js.map → chunk-4QYTVSNR.js.map} +0 -0
- /package/dist/{chunk-6EPYVBAX.js.map → chunk-A6OINYNP.js.map} +0 -0
- /package/dist/{chunk-VDVFJXX5.js.map → chunk-QY3L5BKN.js.map} +0 -0
|
@@ -53,7 +53,7 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
|
|
|
53
53
|
- **Derivation:** each of the 107 current keys and its English name comes from
|
|
54
54
|
`data/ships/blueprints.jsonc`. Names remain keyed per blueprint because a single
|
|
55
55
|
English phrase can have different grammatical translations for different module
|
|
56
|
-
families. The Frontier
|
|
56
|
+
families. The Frontier symbol joins case-insensitively to the in-game modification
|
|
57
57
|
name table, which supplies every locale for the 90 recipes it names. The remaining 17
|
|
58
58
|
are ids this repository keys separately because their numbers differ, where the game
|
|
59
59
|
offers only the generic recipe's menu entry and so publishes only its name: each takes
|
|
@@ -82,7 +82,7 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
|
|
|
82
82
|
- **EDSY revision:** commit `e446fbe6e4597dea7ab0bd3105b9a36642388040`;
|
|
83
83
|
database version `424009901`, last-modified marker `20260810`.
|
|
84
84
|
- **Derivation:** each of the 86 current keys and its English name comes from
|
|
85
|
-
`data/ships/experimental-effects.jsonc`. The Frontier
|
|
85
|
+
`data/ships/experimental-effects.jsonc`. The Frontier symbol joins directly to
|
|
86
86
|
EDSY's `expeffect.fdname`; that record's id selects an explicit `expeffect-<id>` entry
|
|
87
87
|
from each language file.
|
|
88
88
|
- **Coverage:** English covers all 86 effects; EDSY covers 84 in German and 85 each in
|
|
@@ -397,6 +397,24 @@ FDevIDs, stats from coriolis-data and EDSY, joined on `symbol`.
|
|
|
397
397
|
`passengerCabins` and `vesselHangars`. Guardian and AX weapons retain their distinct
|
|
398
398
|
family where their function differs. A core record's family follows from its `slot`,
|
|
399
399
|
which is on every one of them, so the two never disagree.
|
|
400
|
+
- **`supercruiseOvercharge` — the SCO drive line.** The 36
|
|
401
|
+
`Int_Hyperdrive_Overcharge_*` records carry `true`; the 36 plain drives of the same
|
|
402
|
+
sizes and ratings, and every other record in all four catalogues, omit it.
|
|
403
|
+
- **Source:** FDevIDs `outfitting.csv`, which sells the two drive lines under distinct
|
|
404
|
+
symbol families and names the Overcharge one `Frame Shift Drive (SCO)`. No registry
|
|
405
|
+
publishes a field for the capability: coriolis-data and EDSY both leave it implicit
|
|
406
|
+
in the symbol and the display name.
|
|
407
|
+
- **Derivation:** the symbol family is the classification, exactly as it is for `slot`
|
|
408
|
+
above, and it is applied once here so that consumers read a datum instead of
|
|
409
|
+
matching `Int_Hyperdrive_Overcharge` themselves — which a pre-engineered or fitted
|
|
410
|
+
article's symbol does not always let them do. Stored as a sparse flag rather than a
|
|
411
|
+
`true`/`false` pair on all 72 drives, following `alwaysPowered` and
|
|
412
|
+
`guardianZoneResistance`.
|
|
413
|
+
- **Nothing else is derived from it.** The two lines share every jump constant this
|
|
414
|
+
catalogue carries (`optMass`, `maxFuel`, `fuelMul`, `fuelPower`, and the
|
|
415
|
+
size-determined `fsdHeatRate` above), so no calculation reads the flag; the
|
|
416
|
+
overcharged supercruise behaviour the drives are named for has no published figures
|
|
417
|
+
and none are stored.
|
|
400
418
|
|
|
401
419
|
### `module-families.jsonc` — the family ids and their English names
|
|
402
420
|
|
|
@@ -550,7 +568,7 @@ Thirteen stored fields supply the base values referenced by engineering recipes:
|
|
|
550
568
|
7, identical between the plain and SCO lines at every size — and the size-8 SCO drives
|
|
551
569
|
are 50, so the size-8 plain drives take 50. Stated as derivation, not as a reading.
|
|
552
570
|
The Mk II supercharge-optimised size-8 SCO drive is **not** among them: EDSY publishes
|
|
553
|
-
its `fsdheat: 50` outright, spelling the
|
|
571
|
+
its `fsdheat: 50` outright, spelling the symbol
|
|
554
572
|
`Int_Hyperdrive_Overcharge_Size8_Class5_Overchargebooster_MkII` where the outfitting
|
|
555
573
|
registry this catalogue is keyed on capitalises the `B`. The case-insensitive source
|
|
556
574
|
join makes it a reading.
|
|
@@ -1175,7 +1193,7 @@ up straight through with no disambiguation at all. Both paths are evidence that
|
|
|
1175
1193
|
general alias mechanism: it says "the game writes this recipe as X", nothing about
|
|
1176
1194
|
equivalence, and contains exactly these three records. EDSY publishes the sensor-suite
|
|
1177
1195
|
and utility-scanner recipes as separate rows with different modifiers but the same
|
|
1178
|
-
journal
|
|
1196
|
+
journal symbols; its journal importer resolves them by module type. Coriolis supplies the
|
|
1179
1197
|
distinct stored recipe keys. The multi-cannon split is detailed under Engineering
|
|
1180
1198
|
options.
|
|
1181
1199
|
- **Blueprint source:** EDCD/coriolis-data,
|
|
@@ -1282,7 +1300,7 @@ up straight through with no disambiguation at all. Both paths are evidence that
|
|
|
1282
1300
|
is absent for the same reason. That index is the whole evidence for the negative half
|
|
1283
1301
|
of the claim: it is a completeness reading of one listing, not 197 pages checked one
|
|
1284
1302
|
by one. Acquired 2026-08-22 UTC; the pages are live and expose no immutable revision.
|
|
1285
|
-
- **Every row is joined to its
|
|
1303
|
+
- **Every row is joined to its blueprint symbol by its own material recipe, not by name.** Inara
|
|
1286
1304
|
publishes one page per recipe, keyed by its display name; each of the 18 pages' per-grade
|
|
1287
1305
|
material lists was compared against `blueprint-costs.jsonc` before its Merc-Coin figures
|
|
1288
1306
|
were taken, and all 25 rows agree on every grade, every material and every count. That is what
|
|
@@ -1499,12 +1517,12 @@ up straight through with no disambiguation at all. Both paths are evidence that
|
|
|
1499
1517
|
the journal `BlueprintName` this catalogue joins on, so life support lists
|
|
1500
1518
|
`LifeSupport_LightWeight`, an AFMU `AFM_Shielded`, a fuel scoop `FuelScoop_Shielded`,
|
|
1501
1519
|
a refinery `Refineries_Shielded` and each limpet controller its own. **This is not
|
|
1502
|
-
cosmetic for the scanners:** EDSY's `scan_lr` and `cs_lr` share the
|
|
1520
|
+
cosmetic for the scanners:** EDSY's `scan_lr` and `cs_lr` share the symbol
|
|
1503
1521
|
`Sensor_LongRange`, but `Scanner_LongRange` is a different recipe (power draw, not
|
|
1504
1522
|
mass; a larger range roll), so the utility scanners take the `Scanner_*` ids for Long
|
|
1505
1523
|
Range and Wide Angle where the sensor suites take the `Sensor_*` ones. (Their other
|
|
1506
1524
|
four ids are unaffected: `Sensor_FastScan` and the generic `Misc_*` trio, exactly as
|
|
1507
|
-
coriolis has them.) The shared
|
|
1525
|
+
coriolis has them.) The shared symbol is not a defect in EDSY's table, and §Scanner
|
|
1508
1526
|
Long Range and Wide Angle below is what follows from that. Eleven groups carry a
|
|
1509
1527
|
substitution; the substituted lists are then checked against coriolis's own, as are
|
|
1510
1528
|
the nine further groups it carries a list for —
|
|
@@ -1628,7 +1646,7 @@ up straight through with no disambiguation at all. Both paths are evidence that
|
|
|
1628
1646
|
`MC_Overcharged`; other weapon menus list
|
|
1629
1647
|
`Weapon_Overcharged`. Coriolis `modifications/modules.json` assigns the first key to
|
|
1630
1648
|
multi-cannons and the second to six other weapon groups, while
|
|
1631
|
-
`modifications/blueprints.json` gives both the journal
|
|
1649
|
+
`modifications/blueprints.json` gives both the journal symbol
|
|
1632
1650
|
`Weapon_Overcharged`. The recipes differ only in the `AmmoClipSize` reduction carried
|
|
1633
1651
|
by `MC_Overcharged` (−3% at grade 1 through −15% at grade 5).
|
|
1634
1652
|
`modifications/blueprints.json` was acquired 2026-08-07 UTC and has SHA-256
|
|
@@ -1718,7 +1736,8 @@ up straight through with no disambiguation at all. Both paths are evidence that
|
|
|
1718
1736
|
distributor, hull-reinforcement, module-reinforcement, shield-reinforcement or
|
|
1719
1737
|
FSD-booster reward variants, so the absence of an `Int_Guardian*` row is deliberate. The
|
|
1720
1738
|
catalogue's seven Guardian rows are all weapons (Gauss, Plasma and Shard), each with a
|
|
1721
|
-
`
|
|
1739
|
+
`blueprintSymbol` and no `experimentalEffectSymbol`. Source: maintainer confirmation
|
|
1740
|
+
recorded 2026-08-12
|
|
1722
1741
|
UTC; there is no immutable upstream revision.
|
|
1723
1742
|
- **Records:** pair a base module `symbol` with its published pre-engineered identity:
|
|
1724
1743
|
`{ symbol, name, blueprint, grade, acquisition }`, plus any sourced stat block and
|
|
@@ -1778,8 +1797,9 @@ up straight through with no disambiguation at all. Both paths are evidence that
|
|
|
1778
1797
|
under Engineering options.
|
|
1779
1798
|
- **A reward variant is not reproducible by engineering the same blueprint.** Alongside
|
|
1780
1799
|
its blueprint and effect, each reward carries hand-set modifier overrides no blueprint
|
|
1781
|
-
grants — that is what makes it a reward rather than a shortcut. The `
|
|
1782
|
-
`grade` / `
|
|
1800
|
+
grants — that is what makes it a reward rather than a shortcut. The `blueprintSymbol` /
|
|
1801
|
+
`grade` / `experimentalEffectSymbol` recorded here **identify** the variant; they are not
|
|
1802
|
+
a recipe
|
|
1783
1803
|
that recreates it. The ordinary blueprint material recipe does not price the reward.
|
|
1784
1804
|
- **Two community-goal rewards are not stored:** the size-5 and size-6 Corrosion
|
|
1785
1805
|
Resistant Cargo Racks carry no engineering at all. They already exist as ordinary
|
package/README.md
CHANGED
|
@@ -111,33 +111,40 @@ Address inputs accept `bigint`, safe integer `number` values and decimal strings
|
|
|
111
111
|
Addresses are returned as `bigint`.
|
|
112
112
|
|
|
113
113
|
```ts
|
|
114
|
+
import { BuildMetrics } from '@elite-dangerous-almanac/core/ships/build-metrics';
|
|
114
115
|
import { ShipLoadout } from '@elite-dangerous-almanac/core/ships/ship-loadout';
|
|
115
116
|
|
|
116
117
|
declare const slefJsonString: string;
|
|
117
118
|
|
|
118
119
|
const build = ShipLoadout.fromSlef(slefJsonString);
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
120
|
+
const metrics = BuildMetrics.of(build);
|
|
121
|
+
metrics.maxJumpRange();
|
|
122
|
+
metrics.powerBudget();
|
|
123
|
+
metrics.shieldMetrics();
|
|
124
|
+
metrics.armourMetrics();
|
|
125
|
+
metrics.weaponMetrics();
|
|
126
|
+
metrics.weaponsCapacitorMetrics({ weaponsPips: 2 });
|
|
125
127
|
|
|
126
128
|
build.toSlefString({
|
|
127
129
|
header: { appName: 'MyApp', appVersion: '1.0.0' },
|
|
128
130
|
});
|
|
129
131
|
```
|
|
130
132
|
|
|
131
|
-
`ShipLoadout`
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
`ships/
|
|
133
|
+
`ShipLoadout` holds and edits a build; `BuildMetrics` calculates over one, so an
|
|
134
|
+
outfitting editor need not import the calculations. Both import every ship and module
|
|
135
|
+
catalogue so they can resolve any build. When only one calculation is required, use the
|
|
136
|
+
data-free leaf modules under `ships/jump-range`, `ships/power`, `ships/shields`,
|
|
137
|
+
`ships/shield-capacitor`, `ships/armour`, `ships/weapons`, `ships/weapons-capacitor`,
|
|
138
|
+
`ships/mobility`, `ships/mobility-capacitor`, `ships/ammunition`, `ships/heat` or
|
|
139
|
+
`ships/resistances`.
|
|
135
140
|
|
|
136
|
-
`build.validation` reports validity and operational completeness. `cargoCapacity`,
|
|
141
|
+
`build.validation()` reports validity and operational completeness. `cargoCapacity`,
|
|
137
142
|
`fuelCapacity` and `unladenMass` always have an answer, because no article the
|
|
138
|
-
catalogue cannot weigh reaches a build; the metrics that depend on build state
|
|
139
|
-
(`mobilityMetrics`, `
|
|
140
|
-
|
|
143
|
+
catalogue cannot weigh reaches a build; the eight metrics that depend on build state
|
|
144
|
+
(`mobilityMetrics`, `mobilityCapacitorMetrics`, `shieldMetrics`,
|
|
145
|
+
`shieldCapacitorMetrics`, `shieldRecovery`, `heatMetrics`, `distributorMetrics` and
|
|
146
|
+
`standardLoad`) are nullable and each has a `…Result` counterpart naming what is
|
|
147
|
+
missing, switched off, shed or unpowered. `parseSlef`
|
|
141
148
|
is strict; `inspectSlef` is the tolerant importer for mixed files and returns indexed
|
|
142
149
|
diagnostics instead of silently dropping entries.
|
|
143
150
|
|
|
@@ -177,44 +184,51 @@ getEngineeringGroupName('frameShiftDrives', 'de'); // -> null
|
|
|
177
184
|
|
|
178
185
|
The functions return an explicit source value verbatim, so a source-backed spelling may
|
|
179
186
|
happen to equal English; the library itself never supplies an English fallback. The
|
|
180
|
-
catalogues carry English, French, German, Russian and Spanish, each stored
|
|
181
|
-
language tag: a regional or script subtag is dropped (`de-DE` → `de`), and
|
|
182
|
-
language returns `null`.
|
|
187
|
+
catalogues carry English, French, German, Portuguese, Russian and Spanish, each stored
|
|
188
|
+
under a bare language tag: a regional or script subtag is dropped (`de-DE` → `de`), and
|
|
189
|
+
any other language returns `null`.
|
|
183
190
|
|
|
184
191
|
The same contract covers ship manufacturers, pre-engineered variant names, engineering
|
|
185
192
|
group names, experimental-effect descriptions, loadout-slot and restriction labels, and
|
|
186
193
|
structured loadout, calculation, SLEF and edit messages. A family whose accepted source
|
|
187
194
|
currently supplies only English returns `null` for every non-English locale.
|
|
188
195
|
|
|
189
|
-
Registry lookups ignore case and surrounding whitespace.
|
|
190
|
-
module lookups
|
|
191
|
-
|
|
192
|
-
|
|
196
|
+
Registry lookups ignore case and surrounding whitespace. The material, commodity and
|
|
197
|
+
module lookups that resolve one record by symbol or name search their complete registry
|
|
198
|
+
by default and accept an optional catalogue to narrow it; the filters that return a
|
|
199
|
+
subset (`materialsInCategory`, `commoditiesInCategory` and their siblings) take no
|
|
200
|
+
catalogue, since filtering their result costs nothing and passing one narrows nothing a
|
|
201
|
+
consumer could not narrow themselves. Nebula queries require an explicit catalogue so
|
|
202
|
+
the large combined dataset is never an implicit dependency.
|
|
193
203
|
|
|
194
204
|
`symbol` is Frontier's item id for a hull, module, suit, handheld weapon, material,
|
|
195
|
-
micro-resource or commodity. Ship engineering
|
|
196
|
-
blueprint recipe,
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
form a relation from the base module: after resolving a module by type
|
|
201
|
-
`getPreEngineeredVariants` lists the fixed articles associated with its
|
|
202
|
-
caller can inspect each variant's `
|
|
203
|
-
`Decorative_*` launchers whose −99% damage modifier is part of the
|
|
204
|
-
than a generally applicable recipe.
|
|
205
|
-
article and writes its corresponding
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
205
|
+
micro-resource or commodity. Ship engineering ids live in a space of their own: a
|
|
206
|
+
`blueprintSymbol` names a blueprint recipe, a fixed variant's identity included, and an
|
|
207
|
+
`experimentalEffectSymbol` names an experimental effect. The journal normally writes
|
|
208
|
+
both in its `Engineering` block, but a few blueprint aliases collide across module
|
|
209
|
+
families; `resolveBlueprintForModule` resolves those journal spellings. Pre-engineered
|
|
210
|
+
variants instead form a relation from the base module: after resolving a module by type
|
|
211
|
+
or name, `getPreEngineeredVariants` lists the fixed articles associated with its
|
|
212
|
+
`symbol`, and the caller can inspect each variant's `blueprintSymbol` identity. Those
|
|
213
|
+
include the grade-5 `Decorative_*` launchers whose −99% damage modifier is part of the
|
|
214
|
+
awarded article rather than a generally applicable recipe.
|
|
215
|
+
`ShipLoadout.setPreEngineeredVariant` fits the fixed article and writes its corresponding
|
|
216
|
+
journal block.
|
|
217
|
+
|
|
218
|
+
Personal-equipment modifications are keyed by their own recipe symbol, the way ship
|
|
219
|
+
blueprints and experimental effects are keyed by theirs; neither place invents a second
|
|
220
|
+
synthetic id. The journal omits the technology suffix from three weapon modification
|
|
221
|
+
families, so `resolvePersonalModificationForWeapon` resolves those spellings against the
|
|
222
|
+
weapon before joining to `PERSONAL_MODIFICATIONS` or `PERSONAL_MODIFICATION_COSTS`.
|
|
223
|
+
Material shopping lists live on the separate `equipment/modification-costs` subpath and
|
|
224
|
+
consume the
|
|
213
225
|
micro-resource symbols from the `materials` feature area.
|
|
214
226
|
|
|
215
227
|
## Important behavior
|
|
216
228
|
|
|
217
|
-
- Exported catalogues are deeply frozen
|
|
229
|
+
- Exported catalogues are deeply frozen, and so is every calculation result — nested
|
|
230
|
+
records and lists included — so nothing a consumer does can mutate a shared singleton
|
|
231
|
+
or a figure it handed back.
|
|
218
232
|
- Slot keys come from the game and are not reliably derivable from position. Enumerate
|
|
219
233
|
them with `ShipLoadout.slots()` or `enumerateSlots`.
|
|
220
234
|
- Resistances are fractions, not percentages.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{GALAXY_ORIGIN,SECTOR_EDGE_LY,sectorGridPositionFromGalacticPosition,sectorNameFromGalacticPosition}from"../chunk-
|
|
1
|
+
export{GALAXY_ORIGIN,SECTOR_EDGE_LY,sectorGridPositionFromGalacticPosition,sectorNameFromGalacticPosition}from"../chunk-4QYTVSNR.js"; //# sourceMappingURL=galaxy-grid.js.map
|
package/dist/astro/index.d.ts
CHANGED
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
export { ProceduralSystem } from './procedural-system.js';
|
|
126
126
|
export { G as GalacticPosition } from '../galactic-position-shLkm4Qg.js';
|
|
127
127
|
export { BoxelLetters, IsProceduralSystemNameOptions, SystemNameParts, boxelCodeToLetters, canonicalizeSystemName, formatSystemName, isProceduralSystemName, lettersToBoxelCode, parseSystemName } from './system-name.js';
|
|
128
|
-
export { A as AbsoluteBoxel, D as DecodedAddress, N as NamingRegionOrigin, S as SECTOR_INTERNAL_SIZE, a as absoluteBoxelToBoxelCode, b as boxelCodeToAbsoluteBoxel, c as boxelInternalSize, d as decodeModSystemAddress, e as decodeSystemAddress, f as encodeModSystemAddress, g as encodeSystemAddress, h as getHandAuthoredRegionOrigin, r as resolveNamingRegionOrigin } from '../system-address-
|
|
128
|
+
export { A as AbsoluteBoxel, D as DecodedAddress, N as NamingRegionOrigin, S as SECTOR_INTERNAL_SIZE, a as absoluteBoxelToBoxelCode, b as boxelCodeToAbsoluteBoxel, c as boxelInternalSize, d as decodeModSystemAddress, e as decodeSystemAddress, f as encodeModSystemAddress, g as encodeSystemAddress, h as getHandAuthoredRegionOrigin, r as resolveNamingRegionOrigin } from '../system-address-cyJaeZIS.js';
|
|
129
129
|
export { SystemAddressInput, toSystemAddress, tryToSystemAddress } from './system-address-input.js';
|
|
130
130
|
export { SectorGridPosition, canonicalizeSectorName, sectorGridPositionFromName, sectorNameFromGridPosition } from './sector-name.js';
|
|
131
131
|
export { GALAXY_ORIGIN, SECTOR_EDGE_LY, sectorGridPositionFromGalacticPosition, sectorNameFromGalacticPosition } from './galaxy-grid.js';
|
package/dist/astro/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{getNebulaByName,nearestNebulae,nebulaeWithin}from"../chunk-L7CLUYZ6.js";export{isPermitLockedSystemName,permitLockForSystemName}from"../chunk-
|
|
1
|
+
export{getNebulaByName,nearestNebulae,nebulaeWithin}from"../chunk-L7CLUYZ6.js";export{isPermitLockedSystemName,permitLockForSystemName}from"../chunk-CIULJH3G.js";export{PERMIT_LOCKED_SYSTEMS,permitLockedSystemForAddress,permitLockedSystemForName}from"../chunk-BMT3U46U.js";export{ProceduralSystem}from"../chunk-TBZJIQ5P.js";export{boxelCodeToLetters,canonicalizeSystemName,formatSystemName,isProceduralSystemName,lettersToBoxelCode,parseSystemName}from"../chunk-7ATBEOVC.js";export{PERMIT_LOCKED_REGIONS,isPermitLockedRegionName,permitLockedRegionForSystemName}from"../chunk-NLBUKXNV.js";export{CODEX_REGIONS,getCodexRegion,getCodexRegionByName}from"../chunk-ADLVPKUV.js";export{GALAXY_ORIGIN,SECTOR_EDGE_LY,sectorGridPositionFromGalacticPosition,sectorNameFromGalacticPosition}from"../chunk-4QYTVSNR.js";export{HAND_AUTHORED_REGIONS,findHandAuthoredRegionAt}from"../chunk-AVZI6VKA.js";export{BASE_BOXEL_LY,MASS_CODE_COUNT,boxelEdgeLy,massCodeToSizeClass,sizeClassToMassCode}from"../chunk-POZTXBSN.js";export{getHandAuthoredRegionOrigin,resolveNamingRegionOrigin}from"../chunk-DWRNXUAX.js";export{SECTOR_INTERNAL_SIZE,absoluteBoxelToBoxelCode,boxelCodeToAbsoluteBoxel,boxelInternalSize,decodeModSystemAddress,decodeSystemAddress,encodeModSystemAddress,encodeSystemAddress}from"../chunk-DI5RXSJR.js";export{toSystemAddress,tryToSystemAddress}from"../chunk-NEEFT7WH.js";export{canonicalizeSectorName,sectorGridPositionFromName,sectorNameFromGridPosition}from"../chunk-H47K3UWG.js"; export{PROCGEN_NEBULAE}from"../chunk-K7F6WC4T.js";export{REAL_NEBULAE}from"../chunk-HI7FCS3G.js"; //# sourceMappingURL=index.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { N as NamingRegionOrigin, S as SECTOR_INTERNAL_SIZE, h as getHandAuthoredRegionOrigin, r as resolveNamingRegionOrigin } from '../system-address-
|
|
1
|
+
export { N as NamingRegionOrigin, S as SECTOR_INTERNAL_SIZE, h as getHandAuthoredRegionOrigin, r as resolveNamingRegionOrigin } from '../system-address-cyJaeZIS.js';
|
|
2
2
|
import './system-name.js';
|
|
3
3
|
import './sector-name.js';
|
|
4
4
|
import './system-address-input.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{getHandAuthoredRegionOrigin,resolveNamingRegionOrigin}from"../chunk-
|
|
1
|
+
export{getHandAuthoredRegionOrigin,resolveNamingRegionOrigin}from"../chunk-DWRNXUAX.js";export{SECTOR_INTERNAL_SIZE}from"../chunk-DI5RXSJR.js"; //# sourceMappingURL=naming-region-origins.js.map
|
package/dist/astro/nebulae.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ import { G as GalacticPosition } from '../galactic-position-shLkm4Qg.js';
|
|
|
18
18
|
* | --- | --- | --- | --- | --- |
|
|
19
19
|
* | `./nebulae-real` | `REAL_NEBULAE` | 180 | 16.4 KiB | 5.3 KiB |
|
|
20
20
|
* | `./nebulae-procgen` | `PROCGEN_NEBULAE` | 166 | 16.4 KiB | 5.7 KiB |
|
|
21
|
-
* | `./nebulae-planetary` | `PLANETARY_NEBULAE` | 5489 | 399.
|
|
21
|
+
* | `./nebulae-planetary` | `PLANETARY_NEBULAE` | 5489 | 399.4 KiB | 116.0 KiB |
|
|
22
22
|
* | `./nebulae-all` | `ALL_NEBULAE` | 5835 | 431.7 KiB | 126.5 KiB |
|
|
23
23
|
*
|
|
24
24
|
* Importing a query function from here costs nothing but the function: pass in
|
|
@@ -83,7 +83,7 @@ interface Nebula {
|
|
|
83
83
|
*
|
|
84
84
|
* @remarks
|
|
85
85
|
* Resolve it to a name with `getCodexRegion` from `./codex-region` — that
|
|
86
|
-
* costs ~9
|
|
86
|
+
* costs ~9 KiB of region metadata rather than the ~208 KiB lookup grid
|
|
87
87
|
* `findCodexRegionAt` needs.
|
|
88
88
|
*/
|
|
89
89
|
readonly regionId: number;
|
|
@@ -112,7 +112,8 @@ declare function permitLockForSystemName(name: string): PermitLock | null;
|
|
|
112
112
|
* the yes/no. Use that function instead when you want to tell the commander *which*
|
|
113
113
|
* permit they are missing.
|
|
114
114
|
*
|
|
115
|
-
* @param name - A system name in any casing,
|
|
115
|
+
* @param name - A system name in any casing, with optional surrounding whitespace,
|
|
116
|
+
* e.g. `"vega"`.
|
|
116
117
|
* @returns `true` if the name matches a permit-locked system or region.
|
|
117
118
|
* @throws {TypeError} If `name` is present and not a string. A nullish
|
|
118
119
|
* `name` is a miss, answered the way an unrecognised one is.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{isPermitLockedSystemName,permitLockForSystemName}from"../chunk-
|
|
1
|
+
export{isPermitLockedSystemName,permitLockForSystemName}from"../chunk-CIULJH3G.js";export{PERMIT_LOCKED_SYSTEMS,permitLockedSystemForAddress,permitLockedSystemForName}from"../chunk-BMT3U46U.js";export{PERMIT_LOCKED_REGIONS,isPermitLockedRegionName,permitLockedRegionForSystemName}from"../chunk-NLBUKXNV.js"; //# sourceMappingURL=permit-locks.js.map
|
|
@@ -87,7 +87,8 @@ declare class ProceduralSystem {
|
|
|
87
87
|
* Unknown naming regions and out-of-range address fields are rejected here rather
|
|
88
88
|
* than creating an object whose address getter fails later.
|
|
89
89
|
*
|
|
90
|
-
* @param name - A system name in any casing,
|
|
90
|
+
* @param name - A system name in any casing, with optional surrounding
|
|
91
|
+
* whitespace, e.g. `blae eock kc-c d0`.
|
|
91
92
|
* @returns The system, or `null` when `name` is not a **procedurally named**
|
|
92
93
|
* system. Hand-named systems (`Sol`, `Maia`, `Shinrarta Dezhra`) have no
|
|
93
94
|
* algorithmic address and so yield `null` too — that is a "not covered by the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{ProceduralSystem}from"../chunk-
|
|
1
|
+
export{ProceduralSystem}from"../chunk-TBZJIQ5P.js"; //# sourceMappingURL=procedural-system.js.map
|
|
@@ -78,7 +78,8 @@ declare function sectorGridPositionFromName(name: string): SectorGridPosition |
|
|
|
78
78
|
* Re-derive a sector name's canonical casing by round-tripping it through the
|
|
79
79
|
* grid, e.g. `blae eock` → `Blae Eock`. Returns `null` for non-procedural names.
|
|
80
80
|
*
|
|
81
|
-
* @param name - A procedural sector name in any casing
|
|
81
|
+
* @param name - A procedural sector name in any casing, with optional surrounding
|
|
82
|
+
* whitespace. A nullish one answers `null`,
|
|
82
83
|
* matching {@link sectorGridPositionFromName}.
|
|
83
84
|
* @throws {TypeError} If `name` is present and not a string.
|
|
84
85
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{canonicalizeSectorName,sectorGridPositionFromName,sectorNameFromGridPosition}from"../chunk-
|
|
1
|
+
export{canonicalizeSectorName,sectorGridPositionFromName,sectorNameFromGridPosition}from"../chunk-H47K3UWG.js"; //# sourceMappingURL=sector-name.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import './system-name.js';
|
|
2
|
-
export { A as AbsoluteBoxel, D as DecodedAddress, S as SECTOR_INTERNAL_SIZE, a as absoluteBoxelToBoxelCode, b as boxelCodeToAbsoluteBoxel, c as boxelInternalSize, d as decodeModSystemAddress, e as decodeSystemAddress, f as encodeModSystemAddress, g as encodeSystemAddress } from '../system-address-
|
|
2
|
+
export { A as AbsoluteBoxel, D as DecodedAddress, S as SECTOR_INTERNAL_SIZE, a as absoluteBoxelToBoxelCode, b as boxelCodeToAbsoluteBoxel, c as boxelInternalSize, d as decodeModSystemAddress, e as decodeSystemAddress, f as encodeModSystemAddress, g as encodeSystemAddress } from '../system-address-cyJaeZIS.js';
|
|
3
3
|
import './sector-name.js';
|
|
4
4
|
export { SystemAddressInput } from './system-address-input.js';
|
|
@@ -111,13 +111,16 @@ declare function boxelCodeToLetters(boxelCode: number): BoxelLetters;
|
|
|
111
111
|
* well-formed procedural system name.
|
|
112
112
|
*
|
|
113
113
|
* @remarks
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
114
|
+
* Surrounding whitespace is trimmed off the name before it is parsed, so it never
|
|
115
|
+
* reaches `regionName` either (`parseSystemName(' synuefe … ').regionName === 'synuefe'`).
|
|
116
|
+
* Beyond that, parsing does **not** canonicalize casing: `regionName` is captured
|
|
117
|
+
* verbatim from the input. The letters and mass code become numeric indices, so
|
|
118
|
+
* re-formatting them is always canonical, but the region is not — use
|
|
119
|
+
* {@link canonicalizeSystemName} (or build a {@link ProceduralSystem} via
|
|
120
|
+
* `ProceduralSystem.fromName`) if you need the region re-cased too.
|
|
121
|
+
*
|
|
122
|
+
* @param name - A system name in any casing, with optional surrounding whitespace,
|
|
123
|
+
* e.g. `blae eock kc-c d0`.
|
|
121
124
|
* @returns The parsed parts, or `null` if the name is malformed. A nullish `name`
|
|
122
125
|
* answers `null` too: this parser tolerates an absent name, deliberately, so a caller
|
|
123
126
|
* can hand it a field that may not be there. `ProceduralSystem.fromName` is the stricter
|
|
@@ -149,7 +152,7 @@ declare function formatSystemName(parts: SystemNameParts): string;
|
|
|
149
152
|
* Unknown region strings are left untouched so syntactic parsing remains separate
|
|
150
153
|
* from address encodability.
|
|
151
154
|
*
|
|
152
|
-
* @param name - A system name in any casing.
|
|
155
|
+
* @param name - A system name in any casing, with optional surrounding whitespace.
|
|
153
156
|
* @returns The canonically-cased name, or `null` if it is not a system name — including
|
|
154
157
|
* a nullish `name`, which {@link parseSystemName} tolerates on this path too.
|
|
155
158
|
* @throws {TypeError} If `name` is present and not a string.
|
|
@@ -167,7 +170,8 @@ interface IsProceduralSystemNameOptions {
|
|
|
167
170
|
/**
|
|
168
171
|
* Whether a string is a well-formed procedural system name.
|
|
169
172
|
*
|
|
170
|
-
* @param name - The candidate name
|
|
173
|
+
* @param name - The candidate name, in any casing and with optional surrounding
|
|
174
|
+
* whitespace.
|
|
171
175
|
* @param options - See {@link IsProceduralSystemNameOptions}.
|
|
172
176
|
* @returns `true` when the name parses as a procedural system name. A hand-named
|
|
173
177
|
* system (`Sol`, `Maia`) is `false`: it is a real system, just not a procedural name. A
|
|
@@ -178,6 +182,7 @@ interface IsProceduralSystemNameOptions {
|
|
|
178
182
|
* import { isProceduralSystemName } from '@elite-dangerous-almanac/core/astro/system-name';
|
|
179
183
|
*
|
|
180
184
|
* isProceduralSystemName('Blae Eock KC-C d0'); // -> true
|
|
185
|
+
* isProceduralSystemName(' Blae Eock KC-C d0\n'); // -> true
|
|
181
186
|
* isProceduralSystemName('Pleiades Sector HR-W d1-79'); // -> true
|
|
182
187
|
* isProceduralSystemName('Pleiades Sector HR-W d1-79', { strict: true }); // -> false
|
|
183
188
|
* ```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{boxelCodeToLetters,canonicalizeSystemName,formatSystemName,isProceduralSystemName,lettersToBoxelCode,parseSystemName}from"../chunk-
|
|
1
|
+
export{boxelCodeToLetters,canonicalizeSystemName,formatSystemName,isProceduralSystemName,lettersToBoxelCode,parseSystemName}from"../chunk-7ATBEOVC.js"; //# sourceMappingURL=system-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function assertEquipmentGrade(grade,functionName){if(!Number.isInteger(grade)||grade<1||grade>5){throw new RangeError(`${functionName}: grade must be an integer in [1, 5]`)}}export{assertEquipmentGrade};//# sourceMappingURL=chunk-2W5MW376.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/equipment/internal/equipment-grade.ts"],"names":["assertEquipmentGrade","grade","functionName","Number","isInteger","RangeError"],"mappings":"AAiBO,SAASA,qBACZC,MACAC,cAEA,IAAKC,OAAOC,UAAUH,QAAUA,MAAQ,GAAKA,MAAQ,EAAG,CACpD,MAAM,IAAII,WAAW,GAAGH,mDAC5B,CACJ,QAAAF"}
|
|
@@ -1 +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){for(const[index,bank]of banks.entries()){if(typeof bank.powered!=="boolean"){throw new TypeError(`cellBankSummary: banks[${index}].powered must be a boolean`)}}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,powered:bank.powered}));return Object.freeze({banks:Object.freeze(metrics),totalRestorable:metrics.reduce((sum,bank)=>sum+(bank.powered?bank.reinforcement*bank.cells:0),0),totalCells:metrics.reduce((sum,bank)=>sum+(bank.powered?bank.cells:0),0)})}export{cellBankSummary,shieldRecovery};//# sourceMappingURL=chunk-
|
|
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 Object.freeze({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){for(const[index,bank]of banks.entries()){if(typeof bank.powered!=="boolean"){throw new TypeError(`cellBankSummary: banks[${index}].powered must be a boolean`)}}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,powered:bank.powered}));return Object.freeze({banks:Object.freeze(metrics),totalRestorable:metrics.reduce((sum,bank)=>sum+(bank.powered?bank.reinforcement*bank.cells:0),0),totalCells:metrics.reduce((sum,bank)=>sum+(bank.powered?bank.cells:0),0)})}export{cellBankSummary,shieldRecovery};//# sourceMappingURL=chunk-4KJ7CR74.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ships/shield-recovery.ts"],"names":["capacitorRechargeAtPips","phaseTime","megajoules","rate","draw","capacity","recharge","Infinity","drain","capacitorLifetime","beforeEmpty","requireFiniteNonNegative","name","value","Number","isFinite","RangeError","shieldRecovery","input","pips","systemsPips","field","systemsRecharge","half","strength","regenRate","brokenRegenRate","recoveryTime","distributorDraw","systemsCapacity","regenTime","cellBankSummary","banks","index","bank","entries","powered","TypeError","metrics","map","
|
|
1
|
+
{"version":3,"sources":["../src/ships/shield-recovery.ts"],"names":["capacitorRechargeAtPips","phaseTime","megajoules","rate","draw","capacity","recharge","Infinity","drain","capacitorLifetime","beforeEmpty","requireFiniteNonNegative","name","value","Number","isFinite","RangeError","shieldRecovery","input","pips","systemsPips","field","systemsRecharge","half","strength","Object","freeze","regenRate","brokenRegenRate","recoveryTime","distributorDraw","systemsCapacity","regenTime","cellBankSummary","banks","index","bank","entries","powered","TypeError","metrics","map","slot","symbol","reinforcement","reinforcementRate","duration","cells","spinUp","heat","totalRestorable","reduce","sum","totalCells"],"mappings":"O,kDA0GA,IAAMC,UAAY,CACdC,WACAC,KACAC,KACAC,SACAC,YAEA,GAAIJ,YAAc,EAAG,OAAO,EAC5B,GAAIC,MAAQ,EAAG,OAAOI,SACtB,GAAIH,MAAQ,EAAG,OAAOF,WAAaC,KACnC,MAAMK,MAAQL,KAAOC,KAAOE,SAC5B,GAAIE,OAAS,EAAG,OAAON,WAAaC,KACpC,MAAMM,kBAAoBJ,SAAWG,MACrC,MAAME,YAAcD,kBAAoBN,KACxC,GAAID,YAAcQ,YAAa,OAAOR,WAAaC,KACnD,GAAIG,UAAY,EAAG,OAAOC,SAC1B,OAAOE,mBAAqBP,WAAaQ,cAAgBJ,SAAWF,OAGxE,IAAMO,yBAA2B,CAACC,KAAcC,SAC5C,IAAKC,OAAOC,SAASF,QAAUA,MAAQ,EAAG,CACtC,MAAM,IAAIG,WAAW,mBAAmBJ,4CAC5C,GAoBG,SAASK,eAAeC,OAC3B,MAAMC,KAAOD,MAAME,aAAe,EAClC,IAAKN,OAAOC,SAASI,OAASA,KAAO,GAAKA,KAAO,EAAG,CAChD,MAAM,IAAIH,WAAW,kEACzB,CACA,IAAA,MAAWK,QAAS,CAChB,WACA,YACA,kBACA,kBACA,kBACA,mBACQ,CACRV,yBAAyBU,MAAOH,MAAMG,OAC1C,CACA,MAAMf,SAAWN,wBAAwBkB,MAAMI,gBAAiBH,MAChE,MAAMI,KAAOL,MAAMM,SAAW,EAC9B,OAAOC,OAAOC,OAAO,CACjBC,UAAWT,MAAMS,UACjBC,gBAAiBV,MAAMU,gBACvBC,aACI,GACA5B,UACIsB,KACAL,MAAMU,gBACNV,MAAMY,gBACNZ,MAAMa,gBACNzB,UAER0B,UAAW/B,UACPsB,KACAL,MAAMS,UACNT,MAAMY,gBACNZ,MAAMa,gBACNzB,WAGZ,CAmBO,SAAS2B,gBAAgBC,OAC5B,IAAA,MAAYC,MAAOC,QAASF,MAAMG,UAAW,CACzC,UAAWD,KAAKE,UAAY,UAAW,CACnC,MAAM,IAAIC,UAAU,0BAA0BJ,mCAClD,CACJ,CACA,MAAMK,QAAUN,MAAMO,IAAKL,MACvBX,OAAOC,OAAO,CACVgB,KAAMN,KAAKM,KACXC,OAAQP,KAAKO,OACbC,cAAeR,KAAKS,kBAAoBT,KAAKU,SAC7CC,MAAOX,KAAKW,MACZC,OAAQZ,KAAKY,OACbF,SAAUV,KAAKU,SACfG,KAAMb,KAAKa,KACXX,QAASF,KAAKE,WAGtB,OAAOb,OAAOC,OAAO,CACjBQ,MAAOT,OAAOC,OAAOc,SACrBU,gBAAiBV,QAAQW,OACrB,CAACC,IAAKhB,OAASgB,KAAOhB,KAAKE,QAAUF,KAAKQ,cAAgBR,KAAKW,MAAQ,GACvE,GAEJM,WAAYb,QAAQW,OAAO,CAACC,IAAKhB,OAASgB,KAAOhB,KAAKE,QAAUF,KAAKW,MAAQ,GAAI,IAEzF,QAAAd,gBAAAhB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{sectorNameFromGridPosition}from"./chunk-
|
|
1
|
+
import{sectorNameFromGridPosition}from"./chunk-H47K3UWG.js";import{describeValue}from"./chunk-PKWVG2JY.js";var GALAXY_ORIGIN=Object.freeze({x:-49985,y:-40985,z:-24105});var SECTOR_EDGE_LY=1280;function sectorGridPositionFromGalacticPosition(position){const sector={sectorX:Math.floor((position.x-GALAXY_ORIGIN.x)/SECTOR_EDGE_LY),sectorY:Math.floor((position.y-GALAXY_ORIGIN.y)/SECTOR_EDGE_LY),sectorZ:Math.floor((position.z-GALAXY_ORIGIN.z)/SECTOR_EDGE_LY)};for(const v of[sector.sectorX,sector.sectorY,sector.sectorZ]){if(!Number.isInteger(v)||v<0||v>127){throw new RangeError(`Galactic position outside the sector grid: ${describeValue(position)}`)}}return sector}function sectorNameFromGalacticPosition(position){return sectorNameFromGridPosition(sectorGridPositionFromGalacticPosition(position))}export{GALAXY_ORIGIN,SECTOR_EDGE_LY,sectorGridPositionFromGalacticPosition,sectorNameFromGalacticPosition};//# sourceMappingURL=chunk-4QYTVSNR.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getLocalizedName,createLocalizedNameIndex}from"./chunk-RVIYOHYF.js";var engineering_group_names_default={powerPlants:{en:"Power Plants",pt:"Geradores de Energia",ru:"Силовые установки"},guardianPowerPlants:{en:"Guardian Power Plants"},thrusters:{en:"Thrusters",pt:"Propulsores",ru:"Маневровые двигатели"},frameShiftDrives:{en:"Frame Shift Drives",pt:"Motores de Distorção de Fase",ru:"Рамочно-сместительные двигатели"},powerDistributors:{en:"Power Distributors",pt:"Distribuidores de Energia",ru:"Распределители питания"},guardianPowerDistributors:{en:"Guardian Power Distributors"},frameShiftDrivesSCO:{en:"Frame Shift Drives (SCO)"},shieldGenerators:{en:"Shield Generators",pt:"Geradores de Escudo",ru:"Щитогенератор"},shieldCellBanks:{en:"Shield Cell Banks",pt:"Bancos de Célula de Escudo",ru:"Щитонакопитель"},hullReinforcements:{en:"Hull Reinforcements",pt:"Reforços de Casco",ru:"Наборы для усиления корпуса"},guardianHullReinforcements:{en:"Guardian Hull Reinforcements"},pulseLasers:{en:"Pulse Lasers",pt:"Lasers de Pulso",ru:"Импульсные лазеры"},burstLasers:{en:"Burst Lasers",pt:"Lasers de Rajada",ru:"Пульсирующие лазеры"},beamLasers:{en:"Beam Lasers",pt:"Lasers Contínuos",ru:"Пучковые лазеры"},cannons:{en:"Cannons",pt:"Canhões",ru:"Пушки"},fragmentCannons:{en:"Fragment Cannons",pt:"Canhões de Fragmentos",ru:"Залповые орудия"},multiCannons:{en:"Multi-Cannons",pt:"Canhões de Repetição",ru:"Многоствольные орудия"},plasmaAccelerators:{en:"Plasma Accelerators",pt:"Aceleradores de Plasma",ru:"Ускорители плазмы"},railGuns:{en:"Rail Guns",pt:"Canhões Elétricos",ru:"Рельсотроны"},missiles:{en:"Missiles",pt:"Mísseis",ru:"Ракеты"},mines:{en:"Mines",pt:"Minas",ru:"Мины"},torpedoes:{en:"Torpedoes",pt:"Torpedos",ru:"Торпеды"},shieldBoosters:{en:"Shield Boosters",pt:"Potenciadores de Escudo",ru:"Усилители щита"},bulkheads:{en:"Bulkheads",pt:"Blindagem",ru:"Переборки"},lifeSupports:{en:"Life Supports",pt:"Suportes de Vida",ru:"Системы жизнеобеспечения"},sensors:{en:"Sensors",pt:"Sensores",ru:"Сенсоры"},autoFieldMaintenanceUnits:{en:"Auto Field-Maintenance Units",pt:"Unidades de Automanutenção em Campo",ru:"Блоки АПР"},collectionLimpets:{en:"Collection Limpets",pt:"Drones Coletores",ru:"Контроллеры дронов-сборщиков"},fsdBoosters:{en:"FSD Boosters",pt:"Potenciadores de MDD",ru:"Ускорители FSD Стражей"},fsdInterdictors:{en:"FSD Interdictors",pt:"Interditores de MDD",ru:"Перехватчики FSD"},fuelScoops:{en:"Fuel Scoops",pt:"Coletores de Combustível",ru:"Топливозаборники"},fuelTransferLimpets:{en:"Fuel Transfer Limpets",pt:"Drones de Combustível",ru:"Контроллеры дронов-заправщиков"},hatchBreakerLimpets:{en:"Hatch Breaker Limpets",pt:"Drones Quebra-Escotilha",ru:"Контроллеры дронов-взломщиков трюмов"},moduleReinforcements:{en:"Module Reinforcements",pt:"Reforços de Módulo",ru:"Наборы для усиления модулей"},prospectingLimpets:{en:"Prospecting Limpets",pt:"Drones Prospectores",ru:"Контроллеры дронов-геологоразведчиков"},refineries:{en:"Refineries",pt:"Refinarias",ru:"Очистители"},shieldReinforcements:{en:"Shield Reinforcements",pt:"Reforços de Escudo",ru:"Усилители щита"},surfaceScanners:{en:"Surface Scanners",pt:"Scanners de Superfície",ru:"Подробные сканеры поверхности"},chaffLaunchers:{en:"Chaff Launchers",pt:"Lançadores de Chaff",ru:"Разбрасыватели дипольных отражателей"},ecms:{en:"ECMs",pt:"CMEs",ru:"ЭПД"},heatSinkLaunchers:{en:"Heat Sink Launchers",pt:"Lançadores de Dissapador Térmico",ru:"Теплоотводные катапульты"},killWarrantScanners:{en:"Kill Warrant Scanners",pt:"Scanners de Registro Criminal",ru:"Сканеры преступников"},manifestScanners:{en:"Manifest Scanners",pt:"Scanners de Manifesto",ru:"Сканеры содержимого"},pointDefence:{en:"Point Defence",pt:"Defesa de Ponto",ru:"Точечная оборона"},wakeScanners:{en:"Wake Scanners",pt:"Scanners de Rastro",ru:"Сканеры следа FSD"},guardianGauss:{en:"Exp - Guardian Gauss",pt:"Exp - Gauss Guardian",ru:"Экс - Пушки Гаусса Стражей"},guardianPlasma:{en:"Exp - Guardian Plasma",pt:"Exp - Plasma Guardian",ru:"Экс - Плазменные пушки Стражей"},guardianShard:{en:"Exp - Guardian Shard",pt:"Exp - Fragmentos Guardian",ru:"Экс - Осколочные орудия Стражей"}};var NAMES=/* @__PURE__ */createLocalizedNameIndex(engineering_group_names_default);function getEngineeringGroupName(groupId,locale){return getLocalizedName(NAMES,groupId,locale,"getEngineeringGroupName","groupId")}export{getEngineeringGroupName};//# sourceMappingURL=chunk-
|
|
1
|
+
import{getLocalizedName,createLocalizedNameIndex}from"./chunk-RVIYOHYF.js";var engineering_group_names_default={powerPlants:{en:"Power Plants",pt:"Geradores de Energia",ru:"Силовые установки"},guardianPowerPlants:{en:"Guardian Power Plants"},thrusters:{en:"Thrusters",pt:"Propulsores",ru:"Маневровые двигатели"},frameShiftDrives:{en:"Frame Shift Drives",pt:"Motores de Distorção de Fase",ru:"Рамочно-сместительные двигатели"},powerDistributors:{en:"Power Distributors",pt:"Distribuidores de Energia",ru:"Распределители питания"},guardianPowerDistributors:{en:"Guardian Power Distributors"},frameShiftDrivesSCO:{en:"Frame Shift Drives (SCO)"},shieldGenerators:{en:"Shield Generators",pt:"Geradores de Escudo",ru:"Щитогенератор"},shieldCellBanks:{en:"Shield Cell Banks",pt:"Bancos de Célula de Escudo",ru:"Щитонакопитель"},hullReinforcements:{en:"Hull Reinforcements",pt:"Reforços de Casco",ru:"Наборы для усиления корпуса"},guardianHullReinforcements:{en:"Guardian Hull Reinforcements"},pulseLasers:{en:"Pulse Lasers",pt:"Lasers de Pulso",ru:"Импульсные лазеры"},burstLasers:{en:"Burst Lasers",pt:"Lasers de Rajada",ru:"Пульсирующие лазеры"},beamLasers:{en:"Beam Lasers",pt:"Lasers Contínuos",ru:"Пучковые лазеры"},cannons:{en:"Cannons",pt:"Canhões",ru:"Пушки"},fragmentCannons:{en:"Fragment Cannons",pt:"Canhões de Fragmentos",ru:"Залповые орудия"},multiCannons:{en:"Multi-Cannons",pt:"Canhões de Repetição",ru:"Многоствольные орудия"},plasmaAccelerators:{en:"Plasma Accelerators",pt:"Aceleradores de Plasma",ru:"Ускорители плазмы"},railGuns:{en:"Rail Guns",pt:"Canhões Elétricos",ru:"Рельсотроны"},missiles:{en:"Missiles",pt:"Mísseis",ru:"Ракеты"},mines:{en:"Mines",pt:"Minas",ru:"Мины"},torpedoes:{en:"Torpedoes",pt:"Torpedos",ru:"Торпеды"},shieldBoosters:{en:"Shield Boosters",pt:"Potenciadores de Escudo",ru:"Усилители щита"},bulkheads:{en:"Bulkheads",pt:"Blindagem",ru:"Переборки"},lifeSupports:{en:"Life Supports",pt:"Suportes de Vida",ru:"Системы жизнеобеспечения"},sensors:{en:"Sensors",pt:"Sensores",ru:"Сенсоры"},autoFieldMaintenanceUnits:{en:"Auto Field-Maintenance Units",pt:"Unidades de Automanutenção em Campo",ru:"Блоки АПР"},collectionLimpets:{en:"Collection Limpets",pt:"Drones Coletores",ru:"Контроллеры дронов-сборщиков"},fsdBoosters:{en:"FSD Boosters",pt:"Potenciadores de MDD",ru:"Ускорители FSD Стражей"},fsdInterdictors:{en:"FSD Interdictors",pt:"Interditores de MDD",ru:"Перехватчики FSD"},fuelScoops:{en:"Fuel Scoops",pt:"Coletores de Combustível",ru:"Топливозаборники"},fuelTransferLimpets:{en:"Fuel Transfer Limpets",pt:"Drones de Combustível",ru:"Контроллеры дронов-заправщиков"},hatchBreakerLimpets:{en:"Hatch Breaker Limpets",pt:"Drones Quebra-Escotilha",ru:"Контроллеры дронов-взломщиков трюмов"},moduleReinforcements:{en:"Module Reinforcements",pt:"Reforços de Módulo",ru:"Наборы для усиления модулей"},prospectingLimpets:{en:"Prospecting Limpets",pt:"Drones Prospectores",ru:"Контроллеры дронов-геологоразведчиков"},refineries:{en:"Refineries",pt:"Refinarias",ru:"Очистители"},shieldReinforcements:{en:"Shield Reinforcements",pt:"Reforços de Escudo",ru:"Усилители щита"},surfaceScanners:{en:"Surface Scanners",pt:"Scanners de Superfície",ru:"Подробные сканеры поверхности"},chaffLaunchers:{en:"Chaff Launchers",pt:"Lançadores de Chaff",ru:"Разбрасыватели дипольных отражателей"},ecms:{en:"ECMs",pt:"CMEs",ru:"ЭПД"},heatSinkLaunchers:{en:"Heat Sink Launchers",pt:"Lançadores de Dissapador Térmico",ru:"Теплоотводные катапульты"},killWarrantScanners:{en:"Kill Warrant Scanners",pt:"Scanners de Registro Criminal",ru:"Сканеры преступников"},manifestScanners:{en:"Manifest Scanners",pt:"Scanners de Manifesto",ru:"Сканеры содержимого"},pointDefence:{en:"Point Defence",pt:"Defesa de Ponto",ru:"Точечная оборона"},wakeScanners:{en:"Wake Scanners",pt:"Scanners de Rastro",ru:"Сканеры следа FSD"},guardianGauss:{en:"Exp - Guardian Gauss",pt:"Exp - Gauss Guardian",ru:"Экс - Пушки Гаусса Стражей"},guardianPlasma:{en:"Exp - Guardian Plasma",pt:"Exp - Plasma Guardian",ru:"Экс - Плазменные пушки Стражей"},guardianShard:{en:"Exp - Guardian Shard",pt:"Exp - Fragmentos Guardian",ru:"Экс - Осколочные орудия Стражей"}};var NAMES=/* @__PURE__ */createLocalizedNameIndex(engineering_group_names_default);function getEngineeringGroupName(groupId,locale){return getLocalizedName(NAMES,groupId,locale,"getEngineeringGroupName","groupId")}export{getEngineeringGroupName};//# sourceMappingURL=chunk-5ZVYRX6Z.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/i18n/engineering-groups.ts"],"names":["getLocalizedName","createLocalizedNameIndex","engineering_group_names_default","NAMES","getEngineeringGroupName","groupId","locale"],"mappings":"O,siIASA,IAAMG,qBAAAF,yBAAiDC,
|
|
1
|
+
{"version":3,"sources":["../src/i18n/engineering-groups.ts"],"names":["getLocalizedName","createLocalizedNameIndex","engineering_group_names_default","NAMES","getEngineeringGroupName","groupId","locale"],"mappings":"O,siIASA,IAAMG,qBAAAF,yBAAiDC,iCAmBhD,SAASE,wBAAwBC,QAAiBC,QACrD,OAAON,iBAAiBG,MAAOE,QAASC,OAAQ,0BAA2B,UAC/E,QAAAF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{assertEquipmentGrade}from"./chunk-2W5MW376.js";import{findInKeyIndex,createKeyIndex}from"./chunk-BKWLI44T.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var weapons_default=[{symbol:"wpn_s_pistol_kinetic_sauto",name:"Karma P-15",upgradeGroup:"karma",class:"pistol",slot:"secondary",damageType:"kinetic",fireMode:"semi-automatic",rateOfFire:10,magazineSize:24,reserveAmmo:120,headshotMultiplier:2,effectiveRange:25,grades:{1:{damage:1.4,modificationSlots:0},2:{damage:1.8,modificationSlots:1},3:{damage:2.4,modificationSlots:2},4:{damage:3.8,modificationSlots:3},5:{damage:4.1,modificationSlots:4}},engineeringType:"kinetic"},{symbol:"wpn_m_assaultrifle_kinetic_fauto",name:"Karma AR-50",upgradeGroup:"karma",class:"rifle",slot:"primary",damageType:"kinetic",fireMode:"automatic",rateOfFire:9.5,magazineSize:50,reserveAmmo:200,headshotMultiplier:2,effectiveRange:50,grades:{1:{damage:1,modificationSlots:0},2:{damage:1.2,modificationSlots:1},3:{damage:1.6,modificationSlots:2},4:{damage:2.2,modificationSlots:3},5:{damage:2.8,modificationSlots:4}},engineeringType:"kinetic"},{symbol:"wpn_m_submachinegun_kinetic_fauto",name:"Karma C-44",upgradeGroup:"karma",class:"carbine",slot:"primary",damageType:"kinetic",fireMode:"automatic",rateOfFire:13.3,magazineSize:45,reserveAmmo:360,headshotMultiplier:2,effectiveRange:25,grades:{1:{damage:.6,modificationSlots:0},2:{damage:.9,modificationSlots:1},3:{damage:1.1,modificationSlots:2},4:{damage:1.5,modificationSlots:3},5:{damage:1.9,modificationSlots:4}},engineeringType:"kinetic"},{symbol:"wpn_m_launcher_rocket_sauto",name:"Karma L-6",upgradeGroup:"karma",class:"launcher",slot:"primary",damageType:"explosive",fireMode:"automatic",rateOfFire:1,magazineSize:2,reserveAmmo:8,headshotMultiplier:1,effectiveRange:300,grades:{1:{damage:40,modificationSlots:0},2:{damage:52.4,modificationSlots:1},3:{damage:69.2,modificationSlots:2},4:{damage:90,modificationSlots:3},5:{damage:119.2,modificationSlots:4}},engineeringType:"kinetic"},{symbol:"wpn_m_assaultrifle_laser_fauto",name:"TK Aphelion",upgradeGroup:"takada",class:"rifle",slot:"primary",damageType:"thermal",fireMode:"automatic",rateOfFire:5.7,magazineSize:25,reserveAmmo:150,headshotMultiplier:1,effectiveRange:70,grades:{1:{damage:1.6,modificationSlots:0},2:{damage:2.1,modificationSlots:1},3:{damage:2.7,modificationSlots:2},4:{damage:3.6,modificationSlots:3},5:{damage:4.7,modificationSlots:4}},engineeringType:"laser"},{symbol:"wpn_m_submachinegun_laser_fauto",name:"TK Eclipse",upgradeGroup:"takada",class:"carbine",slot:"primary",damageType:"thermal",fireMode:"automatic",rateOfFire:10,magazineSize:45,reserveAmmo:280,headshotMultiplier:1,effectiveRange:25,grades:{1:{damage:.9,modificationSlots:0},2:{damage:1.1,modificationSlots:1},3:{damage:1.5,modificationSlots:2},4:{damage:1.9,modificationSlots:3},5:{damage:2.5,modificationSlots:4}},engineeringType:"laser"},{symbol:"wpn_s_pistol_laser_sauto",name:"TK Zenith",upgradeGroup:"takada",class:"pistol",slot:"secondary",damageType:"thermal",fireMode:"burst",rateOfFire:5.7,magazineSize:18,reserveAmmo:90,headshotMultiplier:1,effectiveRange:35,grades:{1:{damage:1.7,modificationSlots:0},2:{damage:2.2,modificationSlots:1},3:{damage:2.9,modificationSlots:2},4:{damage:3.8,modificationSlots:3},5:{damage:5,modificationSlots:4}},engineeringType:"laser"},{symbol:"wpn_m_sniper_plasma_charged",name:"Manticore Executioner",upgradeGroup:"manticore",class:"sniper",slot:"primary",damageType:"plasma",fireMode:"semi-automatic",rateOfFire:.8,magazineSize:3,reserveAmmo:30,headshotMultiplier:3,effectiveRange:100,grades:{1:{damage:15,modificationSlots:0},2:{damage:19.6,modificationSlots:1},3:{damage:26,modificationSlots:2},4:{damage:34,modificationSlots:3},5:{damage:44.7,modificationSlots:4}},engineeringType:"plasma"},{symbol:"wpn_s_pistol_plasma_charged",name:"Manticore Tormentor",upgradeGroup:"manticore",class:"pistol",slot:"secondary",damageType:"plasma",fireMode:"semi-automatic",rateOfFire:1.7,magazineSize:6,reserveAmmo:72,headshotMultiplier:2,effectiveRange:15,grades:{1:{damage:7.5,modificationSlots:0},2:{damage:9.8,modificationSlots:1},3:{damage:13,modificationSlots:2},4:{damage:17,modificationSlots:3},5:{damage:22.4,modificationSlots:4}},engineeringType:"plasma"},{symbol:"wpn_m_shotgun_plasma_doublebarrel",name:"Manticore Intimidator",upgradeGroup:"manticore",class:"shotgun",slot:"primary",damageType:"plasma",fireMode:"semi-automatic",rateOfFire:1.3,magazineSize:2,reserveAmmo:24,headshotMultiplier:1.5,effectiveRange:7,grades:{1:{damage:1.8,modificationSlots:0},2:{damage:2.3,modificationSlots:1},3:{damage:3,modificationSlots:2},4:{damage:4,modificationSlots:3},5:{damage:5.2,modificationSlots:4}},engineeringType:"plasma"},{symbol:"wpn_m_assaultrifle_plasma_fauto",name:"Manticore Oppressor",upgradeGroup:"manticore",class:"rifle",slot:"primary",damageType:"plasma",fireMode:"automatic",rateOfFire:6.7,magazineSize:50,reserveAmmo:300,headshotMultiplier:1.5,effectiveRange:35,grades:{1:{damage:1.1,modificationSlots:0},2:{damage:1.4,modificationSlots:1},3:{damage:1.9,modificationSlots:2},4:{damage:2.5,modificationSlots:3},5:{damage:3.275,modificationSlots:4}},engineeringType:"plasma"}];var PERSONAL_WEAPONS=deepFreeze(weapons_default);var BY_SYMBOL=/* @__PURE__ */createKeyIndex(PERSONAL_WEAPONS,"symbol");var BY_NAME=/* @__PURE__ */createKeyIndex(PERSONAL_WEAPONS,"name");function getPersonalWeaponBySymbol(symbol){return findInKeyIndex(BY_SYMBOL,symbol,"getPersonalWeaponBySymbol: symbol")}function getPersonalWeaponByName(name){return findInKeyIndex(BY_NAME,name,"getPersonalWeaponByName: name")}function getPersonalWeaponGrade(weapon,grade){assertEquipmentGrade(grade,"getPersonalWeaponGrade");return weapon.grades[String(grade)]??null}export{PERSONAL_WEAPONS,getPersonalWeaponByName,getPersonalWeaponBySymbol,getPersonalWeaponGrade};//# sourceMappingURL=chunk-6GJHUWMO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/equipment/weapons.ts"],"names":["assertEquipmentGrade","findInKeyIndex","createKeyIndex","deepFreeze","weapons_default","symbol","name","grades","PERSONAL_WEAPONS","BY_SYMBOL","BY_NAME","getPersonalWeaponBySymbol","getPersonalWeaponByName","getPersonalWeaponGrade","weapon","grade","String"],"mappings":"O,uiKA+EO,IAAMQ,iBAA8CL,WACvDC,iBAGJ,IAAMK,yBAA4BP,eAAeM,iBAAkB,UACnE,IAAME,uBAA0BR,eAAeM,iBAAkB,QAgB1D,SAASG,0BAA0BN,QACtC,OAAOJ,eAAeQ,UAAWJ,OAAQ,oCAC7C,CAgBO,SAASO,wBAAwBN,MACpC,OAAOL,eAAeS,QAASJ,KAAM,gCACzC,CAkBO,SAASO,uBACZC,OACAC,OAEAf,qBAAqBe,MAAO,0BAC5B,OAAOD,OAAOP,OAAOS,OAAOD,SAAkC,IAClE,QAAAP,iBAAAI,wBAAAD,0BAAAE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{capacitorRechargeAtPips}from"./chunk-JOTAOI5T.js";import{systemsResistance,mapDamageTypes,effectiveHitPoints}from"./chunk-JGOAQLYW.js";import{requirePips}from"./chunk-QJ7GB6FF.js";var DAMAGE_TYPES=["kinetic","thermal","explosive","caustic"];function requireFiniteNonNegative(scope,name,value){if(!Number.isFinite(value)||value<0){throw new RangeError(`${scope}: ${name} must be a finite non-negative number`)}}function shieldCapacitorMetrics(input){const scope="shieldCapacitorMetrics";const systemsPips=input.systemsPips??4;requirePips(scope,"systemsPips",systemsPips);for(const field of["strength","systemsCapacity","systemsRecharge"]){requireFiniteNonNegative(scope,field,input[field])}const resistances=input.resistances;if(typeof resistances!=="object"||resistances===null){throw new TypeError(`${scope}: resistances must carry the four damage types`)}for(const type of DAMAGE_TYPES){if(!Number.isFinite(input.resistances[type])){throw new RangeError(`${scope}: resistances.${type} must be a finite number`)}}const sysResistance=systemsResistance(systemsPips);const effectiveResistances=Object.freeze(mapDamageTypes(type=>1-(1-input.resistances[type])*(1-sysResistance)));return Object.freeze({systemsPips:systemsPips,capacity:input.systemsCapacity,rechargeRate:capacitorRechargeAtPips(input.systemsRecharge,systemsPips),systemsResistance:sysResistance,effectiveResistances:effectiveResistances,effectiveHitPoints:Object.freeze(effectiveHitPoints(input.strength,effectiveResistances))})}export{shieldCapacitorMetrics};//# sourceMappingURL=chunk-6L56LWTT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ships/shield-capacitor.ts"],"names":["capacitorRechargeAtPips","systemsResistance","mapDamageTypes","effectiveHitPoints","requirePips","DAMAGE_TYPES","requireFiniteNonNegative","scope","name","value","Number","isFinite","RangeError","shieldCapacitorMetrics","input","systemsPips","field","resistances","TypeError","type","sysResistance","effectiveResistances","Object","freeze","capacity","systemsCapacity","rechargeRate","systemsRecharge","strength"],"mappings":"O,oLAwGA,IAAMK,aAAsC,CAAC,UAAW,UAAW,YAAa,WAEhF,SAASC,yBAAyBC,MAAeC,KAAcC,OAC3D,IAAKC,OAAOC,SAASF,QAAUA,MAAQ,EAAG,CACtC,MAAM,IAAIG,WAAW,GAAGL,UAAUC,4CACtC,CACJ,CAuCO,SAASK,uBAAuBC,OACnC,MAAMP,MAAQ,yBACd,MAAMQ,YAAcD,MAAMC,aAAe,EAGzCX,YAAYG,MAAO,cAAeQ,aAClC,IAAA,MAAWC,QAAS,CAAC,WAAY,kBAAmB,mBAA6B,CAC7EV,yBAAyBC,MAAOS,MAAOF,MAAME,OACjD,CACA,MAAMC,YAAuBH,MAAMG,YACnC,UAAWA,cAAgB,UAAYA,cAAgB,KAAM,CACzD,MAAM,IAAIC,UAAU,GAAGX,sDAC3B,CACA,IAAA,MAAWY,QAAQd,aAAc,CAC7B,IAAKK,OAAOC,SAASG,MAAMG,YAAYE,OAAQ,CAC3C,MAAM,IAAIP,WAAW,GAAGL,sBAAsBY,+BAClD,CACJ,CAEA,MAAMC,cAAgBnB,kBAAkBc,aAExC,MAAMM,qBAA0CC,OAAOC,OACnDrB,eAAgBiB,MAAS,GAAK,EAAIL,MAAMG,YAAYE,QAAU,EAAIC,iBAEtE,OAAOE,OAAOC,OAAO,CACjBR,wBACAS,SAAUV,MAAMW,gBAChBC,aAAc1B,wBAAwBc,MAAMa,gBAAiBZ,aAC7Dd,kBAAmBmB,cACnBC,0CACAlB,mBAAoBmB,OAAOC,OAAOpB,mBAAmBW,MAAMc,SAAUP,wBAE7E,QAAAR"}
|
|
@@ -1 +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-
|
|
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 Object.freeze({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 Object.freeze({range:range,jumps:jumps})}export{frameShiftDriveMassFactor,fuelPerJump,singleJumpRange,totalRange};//# sourceMappingURL=chunk-6O4NRRSB.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","Object","freeze","jumps","max","ceil","remaining","i"],"mappings":"AA+DA,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,OAAOqB,OAAOC,OAAO,CAAET,MAAO,EAAGU,MAAO,IAC9D,MAAMA,MAAQjB,KAAO,EAAIG,KAAKe,IAAI,EAAGf,KAAKgB,KAAKnB,KAAOR,IAAIE,UAAY,EACtE,IAAKP,OAAOC,SAAS6B,QAAUA,MAAQnC,sBAAuB,CAC1D,MAAM,IAAIO,WACN,GAAGL,iDAAiDF,8BAE5D,CACA,IAAIyB,MAAQ,EACZ,IAAIa,UAAYpB,KAChB,IAAA,IAASqB,EAAI,EAAGA,EAAIJ,MAAOI,IAAK,CAC5Bd,OAASN,yBAAyBF,KAAMqB,UAAW5B,IAAKR,OACxD,IAAKG,OAAOC,SAASmB,OAAQ,CACzB,MAAM,IAAIlB,WAAW,GAAGL,qDAC5B,CACAoC,UAAYjB,KAAKe,IAAI,EAAGE,UAAY5B,IAAIE,QAC5C,CACA,OAAOqB,OAAOC,OAAO,CAAET,YAAOU,aAClC,QAAAT,0BAAAE,YAAAD,gBAAAK"}
|