@elite-dangerous-almanac/core 0.1.8 → 0.2.1
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 +34 -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-37JIMWLK.js +1 -0
- package/dist/chunk-37JIMWLK.js.map +1 -0
- package/dist/chunk-4CBMQULR.js +1 -0
- package/dist/{chunk-4ZGUSHTP.js.map → chunk-4CBMQULR.js.map} +1 -1
- package/dist/{chunk-6EUVIZAS.js → chunk-4QYTVSNR.js} +1 -1
- package/dist/chunk-5VWACBTN.js +1 -0
- package/dist/chunk-5VWACBTN.js.map +1 -0
- 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-65FZECUX.js +1 -0
- package/dist/chunk-65FZECUX.js.map +1 -0
- package/dist/chunk-6BFQIYGZ.js +1 -0
- package/dist/chunk-6BFQIYGZ.js.map +1 -0
- package/dist/chunk-6GJHUWMO.js +1 -0
- package/dist/chunk-6GJHUWMO.js.map +1 -0
- package/dist/chunk-6HA2YIKW.js +1 -0
- package/dist/chunk-6HA2YIKW.js.map +1 -0
- package/dist/{chunk-7EE5VIHR.js → chunk-6HMIF2RJ.js} +1 -1
- package/dist/chunk-6S36AVA4.js +1 -0
- package/dist/chunk-6S36AVA4.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-6WTUY6ZX.js +1 -0
- package/dist/chunk-6WTUY6ZX.js.map +1 -0
- package/dist/{chunk-JPBMRJFC.js → chunk-77I24V6B.js} +1 -1
- package/dist/chunk-77I24V6B.js.map +1 -0
- package/dist/chunk-77TT4K53.js +1 -0
- package/dist/chunk-7ATBEOVC.js +1 -0
- package/dist/chunk-7ATBEOVC.js.map +1 -0
- package/dist/chunk-A4QKXXZD.js +1 -0
- package/dist/chunk-A4QKXXZD.js.map +1 -0
- package/dist/{chunk-6EPYVBAX.js → chunk-A6OINYNP.js} +1 -1
- package/dist/chunk-AAE4KZ2V.js +1 -0
- package/dist/chunk-AAE4KZ2V.js.map +1 -0
- package/dist/{chunk-Q5XOGATC.js → chunk-AIEC3LBT.js} +1 -1
- package/dist/{chunk-QY3L5BKN.js → chunk-APEG4ZER.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-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-F44QX47A.js +1 -0
- package/dist/chunk-F44QX47A.js.map +1 -0
- package/dist/{chunk-EVJ32UF3.js → chunk-FA5JVXVG.js} +1 -1
- package/dist/{chunk-EVJ32UF3.js.map → chunk-FA5JVXVG.js.map} +1 -1
- package/dist/{chunk-4S6WB7QR.js → chunk-FF2X4K5P.js} +1 -1
- package/dist/chunk-FF2X4K5P.js.map +1 -0
- package/dist/chunk-GGQMIQPC.js +1 -0
- package/dist/chunk-GGQMIQPC.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-EYGVDJ2I.js → chunk-GMTAFUAG.js} +1 -1
- package/dist/{chunk-Z43DN4PY.js → chunk-GTEHRZPN.js} +1 -1
- package/dist/{chunk-Z43DN4PY.js.map → chunk-GTEHRZPN.js.map} +1 -1
- package/dist/chunk-H47K3UWG.js +1 -0
- package/dist/chunk-H47K3UWG.js.map +1 -0
- package/dist/{chunk-PA5EITW5.js → chunk-HUYYGTRM.js} +1 -1
- package/dist/{chunk-PA5EITW5.js.map → chunk-HUYYGTRM.js.map} +1 -1
- package/dist/{chunk-HKXXFIRI.js → chunk-ITKZKREP.js} +1 -1
- package/dist/chunk-IWFQ4ZKF.js +1 -0
- package/dist/chunk-IWFQ4ZKF.js.map +1 -0
- package/dist/{chunk-Y6UZWNP4.js → chunk-J7BM5NGK.js} +1 -1
- package/dist/{chunk-Y6UZWNP4.js.map → chunk-J7BM5NGK.js.map} +1 -1
- package/dist/chunk-JET673E5.js +1 -0
- package/dist/chunk-JET673E5.js.map +1 -0
- package/dist/chunk-JMAXSXXQ.js +1 -0
- package/dist/chunk-JMAXSXXQ.js.map +1 -0
- package/dist/chunk-JO52LYO3.js +1 -0
- package/dist/chunk-M2TCZKRT.js +1 -0
- package/dist/chunk-M2TCZKRT.js.map +1 -0
- package/dist/chunk-M4FZRDAH.js +1 -0
- package/dist/chunk-M4FZRDAH.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-OJC6AUL7.js +1 -0
- package/dist/chunk-OJC6AUL7.js.map +1 -0
- package/dist/chunk-OLKNYGGT.js +1 -0
- package/dist/chunk-OLKNYGGT.js.map +1 -0
- package/dist/chunk-PL75RTA2.js +1 -0
- package/dist/{chunk-2VPVZELZ.js.map → chunk-PL75RTA2.js.map} +1 -1
- package/dist/chunk-Q5ALV3DI.js +1 -0
- package/dist/chunk-Q5ALV3DI.js.map +1 -0
- package/dist/{chunk-SQS7672E.js → chunk-Q6YDPREF.js} +1 -1
- package/dist/chunk-SG6YLUQ4.js +1 -0
- package/dist/chunk-SG6YLUQ4.js.map +1 -0
- package/dist/{chunk-OVUHQEH5.js → chunk-T4MKUKYS.js} +1 -1
- package/dist/{chunk-OVUHQEH5.js.map → chunk-T4MKUKYS.js.map} +1 -1
- 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-VEEBJFJ7.js +1 -0
- package/dist/chunk-VEEBJFJ7.js.map +1 -0
- package/dist/{chunk-L747RVPO.js → chunk-VQJXRPYI.js} +1 -1
- package/dist/{chunk-L747RVPO.js.map → chunk-VQJXRPYI.js.map} +1 -1
- package/dist/chunk-VTMCSCXV.js +1 -0
- package/dist/chunk-VTMCSCXV.js.map +1 -0
- package/dist/chunk-XQJERZUS.js +1 -0
- package/dist/chunk-XQJERZUS.js.map +1 -0
- package/dist/commodities/commodities-all.js +1 -1
- package/dist/commodities/commodities-rare.js +1 -1
- package/dist/commodities/commodities-standard.js +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-all.js +1 -1
- package/dist/materials/materials-encoded.js +1 -1
- package/dist/materials/materials-manufactured.js +1 -1
- package/dist/materials/materials-raw.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 +35 -23
- 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/loadout-validation.d.ts +111 -5
- package/dist/ships/loadout-validation.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 +29 -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-internal.js +1 -1
- package/dist/ships/modules.d.ts +21 -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 +20 -13
- 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 +176 -815
- 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 +5 -2
- 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-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-3BM5BHI3.js +0 -1
- package/dist/chunk-3BM5BHI3.js.map +0 -1
- package/dist/chunk-4S6WB7QR.js.map +0 -1
- package/dist/chunk-4ZGUSHTP.js +0 -1
- package/dist/chunk-6BO5JJNI.js +0 -1
- package/dist/chunk-6BO5JJNI.js.map +0 -1
- package/dist/chunk-B4ZSTOM4.js +0 -1
- package/dist/chunk-B4ZSTOM4.js.map +0 -1
- package/dist/chunk-CX7B67OI.js +0 -1
- package/dist/chunk-CX7B67OI.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-FGXWVFN6.js +0 -1
- package/dist/chunk-FGXWVFN6.js.map +0 -1
- package/dist/chunk-FMPRCYKY.js +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 +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-JQG4C67D.js +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-V4C6FIE2.js +0 -1
- package/dist/chunk-VZZUNSDF.js +0 -1
- package/dist/chunk-VZZUNSDF.js.map +0 -1
- package/dist/chunk-W6EPHHTS.js +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-6EUVIZAS.js.map → chunk-4QYTVSNR.js.map} +0 -0
- /package/dist/{chunk-7EE5VIHR.js.map → chunk-6HMIF2RJ.js.map} +0 -0
- /package/dist/{chunk-JQG4C67D.js.map → chunk-77TT4K53.js.map} +0 -0
- /package/dist/{chunk-6EPYVBAX.js.map → chunk-A6OINYNP.js.map} +0 -0
- /package/dist/{chunk-Q5XOGATC.js.map → chunk-AIEC3LBT.js.map} +0 -0
- /package/dist/{chunk-QY3L5BKN.js.map → chunk-APEG4ZER.js.map} +0 -0
- /package/dist/{chunk-EYGVDJ2I.js.map → chunk-GMTAFUAG.js.map} +0 -0
- /package/dist/{chunk-HKXXFIRI.js.map → chunk-ITKZKREP.js.map} +0 -0
- /package/dist/{chunk-V4C6FIE2.js.map → chunk-JO52LYO3.js.map} +0 -0
- /package/dist/{chunk-SQS7672E.js.map → chunk-Q6YDPREF.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
|
|
@@ -415,6 +415,29 @@ FDevIDs, stats from coriolis-data and EDSY, joined on `symbol`.
|
|
|
415
415
|
size-determined `fsdHeatRate` above), so no calculation reads the flag; the
|
|
416
416
|
overcharged supercruise behaviour the drives are named for has no published figures
|
|
417
417
|
and none are stored.
|
|
418
|
+
- **`grantOnly` — the articles that arrive granted rather than sold.** Fifteen records
|
|
419
|
+
carry `true`: the nine `*_free` starter fittings (power plant, thrusters, drive, life
|
|
420
|
+
support, distributor, sensors, fuel tank, shield generator, cargo rack) and the six
|
|
421
|
+
`*_Free` Vessel Hangars. Every other record omits it, and nothing carries `false`.
|
|
422
|
+
- **Source:** Frontier's own symbol naming, and for the six hangars the pinned CAPI
|
|
423
|
+
response, which lists them `bundle: true` under the grant tokens
|
|
424
|
+
`ELITE_V_MKIFIGHTERBAY_FREE` / `ELITE_V_MKIIFIGHTERBAY_FREE` — see "Records sourced
|
|
425
|
+
outside the baseline registries" below, which also reads that response's zero as the
|
|
426
|
+
bundle charge rather than a purchase price. No registry publishes a field for
|
|
427
|
+
"offered in outfitting": coriolis-data and EDSY carry these records beside the sold
|
|
428
|
+
ones.
|
|
429
|
+
- **Derivation:** the `_free` / `_Free` symbol family is the classification, applied
|
|
430
|
+
once here so a consumer reads a datum instead of matching the suffix — the same rule
|
|
431
|
+
`slot` and `supercruiseOvercharge` follow above. Each starter record is its priced
|
|
432
|
+
twin bar the price (§Prices), so a screen offering both would show one article twice,
|
|
433
|
+
once unpriced.
|
|
434
|
+
- **It is not a statement about price, and the flag is not extended on a missing one.**
|
|
435
|
+
Eleven further records carry no `cost` — the five size-8 drives, the three Mk II
|
|
436
|
+
Vessel Hangars, the two unsold Corrosion Resistant Cargo Racks and the 1B shield
|
|
437
|
+
generator — and none is flagged. The two racks are the closest case and still fail
|
|
438
|
+
the rule: no source states them as a hull or bundle grant, and each is its own
|
|
439
|
+
identity at a capacity no other rack carries, not a second identity for something a
|
|
440
|
+
station already sells.
|
|
418
441
|
|
|
419
442
|
### `module-families.jsonc` — the family ids and their English names
|
|
420
443
|
|
|
@@ -568,7 +591,7 @@ Thirteen stored fields supply the base values referenced by engineering recipes:
|
|
|
568
591
|
7, identical between the plain and SCO lines at every size — and the size-8 SCO drives
|
|
569
592
|
are 50, so the size-8 plain drives take 50. Stated as derivation, not as a reading.
|
|
570
593
|
The Mk II supercharge-optimised size-8 SCO drive is **not** among them: EDSY publishes
|
|
571
|
-
its `fsdheat: 50` outright, spelling the
|
|
594
|
+
its `fsdheat: 50` outright, spelling the symbol
|
|
572
595
|
`Int_Hyperdrive_Overcharge_Size8_Class5_Overchargebooster_MkII` where the outfitting
|
|
573
596
|
registry this catalogue is keyed on capitalises the `B`. The case-insensitive source
|
|
574
597
|
join makes it a reading.
|
|
@@ -1193,7 +1216,7 @@ up straight through with no disambiguation at all. Both paths are evidence that
|
|
|
1193
1216
|
general alias mechanism: it says "the game writes this recipe as X", nothing about
|
|
1194
1217
|
equivalence, and contains exactly these three records. EDSY publishes the sensor-suite
|
|
1195
1218
|
and utility-scanner recipes as separate rows with different modifiers but the same
|
|
1196
|
-
journal
|
|
1219
|
+
journal symbols; its journal importer resolves them by module type. Coriolis supplies the
|
|
1197
1220
|
distinct stored recipe keys. The multi-cannon split is detailed under Engineering
|
|
1198
1221
|
options.
|
|
1199
1222
|
- **Blueprint source:** EDCD/coriolis-data,
|
|
@@ -1300,7 +1323,7 @@ up straight through with no disambiguation at all. Both paths are evidence that
|
|
|
1300
1323
|
is absent for the same reason. That index is the whole evidence for the negative half
|
|
1301
1324
|
of the claim: it is a completeness reading of one listing, not 197 pages checked one
|
|
1302
1325
|
by one. Acquired 2026-08-22 UTC; the pages are live and expose no immutable revision.
|
|
1303
|
-
- **Every row is joined to its
|
|
1326
|
+
- **Every row is joined to its blueprint symbol by its own material recipe, not by name.** Inara
|
|
1304
1327
|
publishes one page per recipe, keyed by its display name; each of the 18 pages' per-grade
|
|
1305
1328
|
material lists was compared against `blueprint-costs.jsonc` before its Merc-Coin figures
|
|
1306
1329
|
were taken, and all 25 rows agree on every grade, every material and every count. That is what
|
|
@@ -1517,12 +1540,12 @@ up straight through with no disambiguation at all. Both paths are evidence that
|
|
|
1517
1540
|
the journal `BlueprintName` this catalogue joins on, so life support lists
|
|
1518
1541
|
`LifeSupport_LightWeight`, an AFMU `AFM_Shielded`, a fuel scoop `FuelScoop_Shielded`,
|
|
1519
1542
|
a refinery `Refineries_Shielded` and each limpet controller its own. **This is not
|
|
1520
|
-
cosmetic for the scanners:** EDSY's `scan_lr` and `cs_lr` share the
|
|
1543
|
+
cosmetic for the scanners:** EDSY's `scan_lr` and `cs_lr` share the symbol
|
|
1521
1544
|
`Sensor_LongRange`, but `Scanner_LongRange` is a different recipe (power draw, not
|
|
1522
1545
|
mass; a larger range roll), so the utility scanners take the `Scanner_*` ids for Long
|
|
1523
1546
|
Range and Wide Angle where the sensor suites take the `Sensor_*` ones. (Their other
|
|
1524
1547
|
four ids are unaffected: `Sensor_FastScan` and the generic `Misc_*` trio, exactly as
|
|
1525
|
-
coriolis has them.) The shared
|
|
1548
|
+
coriolis has them.) The shared symbol is not a defect in EDSY's table, and §Scanner
|
|
1526
1549
|
Long Range and Wide Angle below is what follows from that. Eleven groups carry a
|
|
1527
1550
|
substitution; the substituted lists are then checked against coriolis's own, as are
|
|
1528
1551
|
the nine further groups it carries a list for —
|
|
@@ -1646,7 +1669,7 @@ up straight through with no disambiguation at all. Both paths are evidence that
|
|
|
1646
1669
|
`MC_Overcharged`; other weapon menus list
|
|
1647
1670
|
`Weapon_Overcharged`. Coriolis `modifications/modules.json` assigns the first key to
|
|
1648
1671
|
multi-cannons and the second to six other weapon groups, while
|
|
1649
|
-
`modifications/blueprints.json` gives both the journal
|
|
1672
|
+
`modifications/blueprints.json` gives both the journal symbol
|
|
1650
1673
|
`Weapon_Overcharged`. The recipes differ only in the `AmmoClipSize` reduction carried
|
|
1651
1674
|
by `MC_Overcharged` (−3% at grade 1 through −15% at grade 5).
|
|
1652
1675
|
`modifications/blueprints.json` was acquired 2026-08-07 UTC and has SHA-256
|
|
@@ -1736,7 +1759,8 @@ up straight through with no disambiguation at all. Both paths are evidence that
|
|
|
1736
1759
|
distributor, hull-reinforcement, module-reinforcement, shield-reinforcement or
|
|
1737
1760
|
FSD-booster reward variants, so the absence of an `Int_Guardian*` row is deliberate. The
|
|
1738
1761
|
catalogue's seven Guardian rows are all weapons (Gauss, Plasma and Shard), each with a
|
|
1739
|
-
`
|
|
1762
|
+
`blueprintSymbol` and no `experimentalEffectSymbol`. Source: maintainer confirmation
|
|
1763
|
+
recorded 2026-08-12
|
|
1740
1764
|
UTC; there is no immutable upstream revision.
|
|
1741
1765
|
- **Records:** pair a base module `symbol` with its published pre-engineered identity:
|
|
1742
1766
|
`{ symbol, name, blueprint, grade, acquisition }`, plus any sourced stat block and
|
|
@@ -1796,8 +1820,9 @@ up straight through with no disambiguation at all. Both paths are evidence that
|
|
|
1796
1820
|
under Engineering options.
|
|
1797
1821
|
- **A reward variant is not reproducible by engineering the same blueprint.** Alongside
|
|
1798
1822
|
its blueprint and effect, each reward carries hand-set modifier overrides no blueprint
|
|
1799
|
-
grants — that is what makes it a reward rather than a shortcut. The `
|
|
1800
|
-
`grade` / `
|
|
1823
|
+
grants — that is what makes it a reward rather than a shortcut. The `blueprintSymbol` /
|
|
1824
|
+
`grade` / `experimentalEffectSymbol` recorded here **identify** the variant; they are not
|
|
1825
|
+
a recipe
|
|
1801
1826
|
that recreates it. The ordinary blueprint material recipe does not price the reward.
|
|
1802
1827
|
- **Two community-goal rewards are not stored:** the size-5 and size-6 Corrosion
|
|
1803
1828
|
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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{requireFiniteNonNegative}from"./chunk-65FZECUX.js";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 Object.freeze({...ZERO_SPLIT,absolute:damage});return Object.freeze({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 Object.freeze({...ZERO_SPLIT,absolute:damage});const scale=damage/conventional;return Object.freeze({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){requireFiniteNonNegative("armourPiercingFactor","armour piercing",armourPiercing);requireFiniteNonNegative("armourPiercingFactor","hardness",hardness);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 Object.freeze({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 Object.freeze({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 Object.freeze(unclassified===0?classified:{...classified,unclassified:unclassified})}export{armourPiercingFactor,combinedRateOfFire,damageFalloff,damagePerSecond,energyPerSecond,heatPerSecond,splitDamage,sumWeaponMetrics,sustainedDamagePerSecond,sustainedFireFactor,weaponMetrics};//# sourceMappingURL=chunk-37JIMWLK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ships/weapons.ts"],"names":["requireFiniteNonNegative","combinedRateOfFire","weapon","interval","burstInterval","burst","burstRounds","burstRate","burstRateOfFire","cycle","ZERO_SPLIT","kinetic","thermal","explosive","absolute","antiXeno","splitDamage","damage","distribution","Object","freeze","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","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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"}
|