@elite-dangerous-almanac/core 0.1.0-beta.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/LICENSE +48 -0
- package/PROVENANCE/SNAPSHOTS.md +36 -0
- package/PROVENANCE/astro/SOURCES.md +94 -0
- package/PROVENANCE/commodities/SOURCES.md +41 -0
- package/PROVENANCE/materials/SOURCES.md +69 -0
- package/PROVENANCE/ships/SOURCES.md +1580 -0
- package/README.md +148 -0
- package/THIRD_PARTY_NOTICES.md +202 -0
- package/dist/astro/codex-region-lookup.d.ts +169 -0
- package/dist/astro/codex-region-lookup.js +1 -0
- package/dist/astro/codex-region-lookup.js.map +1 -0
- package/dist/astro/codex-region.d.ts +149 -0
- package/dist/astro/codex-region.js +1 -0
- package/dist/astro/codex-region.js.map +1 -0
- package/dist/astro/galaxy-grid.d.ts +83 -0
- package/dist/astro/galaxy-grid.js +1 -0
- package/dist/astro/galaxy-grid.js.map +1 -0
- package/dist/astro/hand-authored-regions.d.ts +121 -0
- package/dist/astro/hand-authored-regions.js +1 -0
- package/dist/astro/hand-authored-regions.js.map +1 -0
- package/dist/astro/index.d.ts +140 -0
- package/dist/astro/index.js +1 -0
- package/dist/astro/index.js.map +1 -0
- package/dist/astro/mass-code.d.ts +55 -0
- package/dist/astro/mass-code.js +1 -0
- package/dist/astro/mass-code.js.map +1 -0
- package/dist/astro/naming-region-origins.d.ts +4 -0
- package/dist/astro/naming-region-origins.js +1 -0
- package/dist/astro/naming-region-origins.js.map +1 -0
- package/dist/astro/nebulae-all.d.ts +40 -0
- package/dist/astro/nebulae-all.js +1 -0
- package/dist/astro/nebulae-all.js.map +1 -0
- package/dist/astro/nebulae-planetary.d.ts +37 -0
- package/dist/astro/nebulae-planetary.js +1 -0
- package/dist/astro/nebulae-planetary.js.map +1 -0
- package/dist/astro/nebulae-procgen.d.ts +36 -0
- package/dist/astro/nebulae-procgen.js +1 -0
- package/dist/astro/nebulae-procgen.js.map +1 -0
- package/dist/astro/nebulae-real.d.ts +37 -0
- package/dist/astro/nebulae-real.js +1 -0
- package/dist/astro/nebulae-real.js.map +1 -0
- package/dist/astro/nebulae.d.ts +169 -0
- package/dist/astro/nebulae.js +1 -0
- package/dist/astro/nebulae.js.map +1 -0
- package/dist/astro/permit-locked-regions.d.ts +54 -0
- package/dist/astro/permit-locked-regions.js +1 -0
- package/dist/astro/permit-locked-regions.js.map +1 -0
- package/dist/astro/permit-locked-systems.d.ts +74 -0
- package/dist/astro/permit-locked-systems.js +1 -0
- package/dist/astro/permit-locked-systems.js.map +1 -0
- package/dist/astro/permit-locks.d.ts +130 -0
- package/dist/astro/permit-locks.js +1 -0
- package/dist/astro/permit-locks.js.map +1 -0
- package/dist/astro/procedural-system.d.ts +228 -0
- package/dist/astro/procedural-system.js +1 -0
- package/dist/astro/procedural-system.js.map +1 -0
- package/dist/astro/sector-name.d.ts +87 -0
- package/dist/astro/sector-name.js +1 -0
- package/dist/astro/sector-name.js.map +1 -0
- package/dist/astro/system-address-input.d.ts +76 -0
- package/dist/astro/system-address-input.js +1 -0
- package/dist/astro/system-address-input.js.map +1 -0
- package/dist/astro/system-address.d.ts +4 -0
- package/dist/astro/system-address.js +1 -0
- package/dist/astro/system-address.js.map +1 -0
- package/dist/astro/system-name.d.ts +187 -0
- package/dist/astro/system-name.js +1 -0
- package/dist/astro/system-name.js.map +1 -0
- package/dist/chunk-2FHHMYDC.js +1 -0
- package/dist/chunk-2FHHMYDC.js.map +1 -0
- package/dist/chunk-462OKHXR.js +1 -0
- package/dist/chunk-462OKHXR.js.map +1 -0
- package/dist/chunk-5H74FKY7.js +1 -0
- package/dist/chunk-5H74FKY7.js.map +1 -0
- package/dist/chunk-6LUEKHO5.js +1 -0
- package/dist/chunk-6LUEKHO5.js.map +1 -0
- package/dist/chunk-76XKY2Y2.js +1 -0
- package/dist/chunk-76XKY2Y2.js.map +1 -0
- package/dist/chunk-7EE5VIHR.js +1 -0
- package/dist/chunk-7EE5VIHR.js.map +1 -0
- package/dist/chunk-A3NM7SAJ.js +1 -0
- package/dist/chunk-A3NM7SAJ.js.map +1 -0
- package/dist/chunk-A6XPYSVR.js +1 -0
- package/dist/chunk-A6XPYSVR.js.map +1 -0
- package/dist/chunk-AA3K5XUE.js +1 -0
- package/dist/chunk-AA3K5XUE.js.map +1 -0
- package/dist/chunk-AVZI6VKA.js +1 -0
- package/dist/chunk-AVZI6VKA.js.map +1 -0
- package/dist/chunk-B5TT26XE.js +1 -0
- package/dist/chunk-B5TT26XE.js.map +1 -0
- package/dist/chunk-BNILZXJD.js +1 -0
- package/dist/chunk-BNILZXJD.js.map +1 -0
- package/dist/chunk-BRDQUJXV.js +1 -0
- package/dist/chunk-BRDQUJXV.js.map +1 -0
- package/dist/chunk-BTPV5CIF.js +1 -0
- package/dist/chunk-BTPV5CIF.js.map +1 -0
- package/dist/chunk-CI3ACMRA.js +1 -0
- package/dist/chunk-CI3ACMRA.js.map +1 -0
- package/dist/chunk-COE5ADYJ.js +1 -0
- package/dist/chunk-COE5ADYJ.js.map +1 -0
- package/dist/chunk-CWAX3BSH.js +1 -0
- package/dist/chunk-CWAX3BSH.js.map +1 -0
- package/dist/chunk-DACZE3HX.js +1 -0
- package/dist/chunk-DACZE3HX.js.map +1 -0
- package/dist/chunk-DURKO7JU.js +1 -0
- package/dist/chunk-DURKO7JU.js.map +1 -0
- package/dist/chunk-E45EDCYH.js +1 -0
- package/dist/chunk-E45EDCYH.js.map +1 -0
- package/dist/chunk-ELIZXUMI.js +1 -0
- package/dist/chunk-ELIZXUMI.js.map +1 -0
- package/dist/chunk-EYGVDJ2I.js +1 -0
- package/dist/chunk-EYGVDJ2I.js.map +1 -0
- package/dist/chunk-FGXWVFN6.js +1 -0
- package/dist/chunk-FGXWVFN6.js.map +1 -0
- package/dist/chunk-GJCB2Z72.js +1 -0
- package/dist/chunk-GJCB2Z72.js.map +1 -0
- package/dist/chunk-HI7FCS3G.js +1 -0
- package/dist/chunk-HI7FCS3G.js.map +1 -0
- package/dist/chunk-HKXXFIRI.js +1 -0
- package/dist/chunk-HKXXFIRI.js.map +1 -0
- package/dist/chunk-HTB52N6S.js +1 -0
- package/dist/chunk-HTB52N6S.js.map +1 -0
- package/dist/chunk-I7PIDRMU.js +1 -0
- package/dist/chunk-I7PIDRMU.js.map +1 -0
- package/dist/chunk-IH4NXKVW.js +1 -0
- package/dist/chunk-IH4NXKVW.js.map +1 -0
- package/dist/chunk-INNFH37U.js +1 -0
- package/dist/chunk-INNFH37U.js.map +1 -0
- package/dist/chunk-J2PNZQY4.js +1 -0
- package/dist/chunk-J2PNZQY4.js.map +1 -0
- package/dist/chunk-JQG4C67D.js +1 -0
- package/dist/chunk-JQG4C67D.js.map +1 -0
- package/dist/chunk-JTQVWIGL.js +1 -0
- package/dist/chunk-JTQVWIGL.js.map +1 -0
- package/dist/chunk-JWJ7RSZC.js +1 -0
- package/dist/chunk-JWJ7RSZC.js.map +1 -0
- package/dist/chunk-K3AMV27L.js +1 -0
- package/dist/chunk-K3AMV27L.js.map +1 -0
- package/dist/chunk-K7F6WC4T.js +1 -0
- package/dist/chunk-K7F6WC4T.js.map +1 -0
- package/dist/chunk-K7L7SMIR.js +1 -0
- package/dist/chunk-K7L7SMIR.js.map +1 -0
- package/dist/chunk-KG4EWDZZ.js +1 -0
- package/dist/chunk-KG4EWDZZ.js.map +1 -0
- package/dist/chunk-KMFUCORC.js +1 -0
- package/dist/chunk-KMFUCORC.js.map +1 -0
- package/dist/chunk-L2ZZXEZM.js +1 -0
- package/dist/chunk-L2ZZXEZM.js.map +1 -0
- package/dist/chunk-L747RVPO.js +1 -0
- package/dist/chunk-L747RVPO.js.map +1 -0
- package/dist/chunk-MFV4VZFP.js +1 -0
- package/dist/chunk-MFV4VZFP.js.map +1 -0
- package/dist/chunk-NWPK6Q3S.js +1 -0
- package/dist/chunk-NWPK6Q3S.js.map +1 -0
- package/dist/chunk-PMJG7PHU.js +1 -0
- package/dist/chunk-PMJG7PHU.js.map +1 -0
- package/dist/chunk-PP2VSA6M.js +1 -0
- package/dist/chunk-PP2VSA6M.js.map +1 -0
- package/dist/chunk-Q22LXT53.js +1 -0
- package/dist/chunk-Q22LXT53.js.map +1 -0
- package/dist/chunk-Q5MR36RW.js +1 -0
- package/dist/chunk-Q5MR36RW.js.map +1 -0
- package/dist/chunk-Q5XOGATC.js +1 -0
- package/dist/chunk-Q5XOGATC.js.map +1 -0
- package/dist/chunk-QTDBO7R2.js +1 -0
- package/dist/chunk-QTDBO7R2.js.map +1 -0
- package/dist/chunk-R4OD62HV.js +1 -0
- package/dist/chunk-R4OD62HV.js.map +1 -0
- package/dist/chunk-RD73TFGS.js +1 -0
- package/dist/chunk-RD73TFGS.js.map +1 -0
- package/dist/chunk-RIT6MOO5.js +1 -0
- package/dist/chunk-RIT6MOO5.js.map +1 -0
- package/dist/chunk-RVSXKQHE.js +1 -0
- package/dist/chunk-RVSXKQHE.js.map +1 -0
- package/dist/chunk-S4DBNX2B.js +1 -0
- package/dist/chunk-S4DBNX2B.js.map +1 -0
- package/dist/chunk-S4UWCHL6.js +1 -0
- package/dist/chunk-S4UWCHL6.js.map +1 -0
- package/dist/chunk-SQS7672E.js +1 -0
- package/dist/chunk-SQS7672E.js.map +1 -0
- package/dist/chunk-TLNHETGC.js +1 -0
- package/dist/chunk-TLNHETGC.js.map +1 -0
- package/dist/chunk-U6TMCYA6.js +1 -0
- package/dist/chunk-U6TMCYA6.js.map +1 -0
- package/dist/chunk-V4C6FIE2.js +1 -0
- package/dist/chunk-V4C6FIE2.js.map +1 -0
- package/dist/chunk-VXVUEF5U.js +1 -0
- package/dist/chunk-VXVUEF5U.js.map +1 -0
- package/dist/chunk-VZXL5KBR.js +1 -0
- package/dist/chunk-VZXL5KBR.js.map +1 -0
- package/dist/chunk-VZZ2XIRE.js +1 -0
- package/dist/chunk-VZZ2XIRE.js.map +1 -0
- package/dist/chunk-WV5YM7H5.js +1 -0
- package/dist/chunk-WV5YM7H5.js.map +1 -0
- package/dist/chunk-Y2MUIE5W.js +1 -0
- package/dist/chunk-Y2MUIE5W.js.map +1 -0
- package/dist/chunk-Z43DN4PY.js +1 -0
- package/dist/chunk-Z43DN4PY.js.map +1 -0
- package/dist/chunk-Z4GTTB7I.js +1 -0
- package/dist/chunk-Z4GTTB7I.js.map +1 -0
- package/dist/chunk-Z4OUB4SJ.js +1 -0
- package/dist/chunk-Z4OUB4SJ.js.map +1 -0
- package/dist/chunk-ZFT56QFR.js +1 -0
- package/dist/chunk-ZFT56QFR.js.map +1 -0
- package/dist/chunk-ZNCXENNB.js +1 -0
- package/dist/chunk-ZNCXENNB.js.map +1 -0
- package/dist/commodities/commodities-all.d.ts +25 -0
- package/dist/commodities/commodities-all.js +1 -0
- package/dist/commodities/commodities-all.js.map +1 -0
- package/dist/commodities/commodities-rare.d.ts +34 -0
- package/dist/commodities/commodities-rare.js +1 -0
- package/dist/commodities/commodities-rare.js.map +1 -0
- package/dist/commodities/commodities-standard.d.ts +34 -0
- package/dist/commodities/commodities-standard.js +1 -0
- package/dist/commodities/commodities-standard.js.map +1 -0
- package/dist/commodities/commodities.d.ts +142 -0
- package/dist/commodities/commodities.js +1 -0
- package/dist/commodities/commodities.js.map +1 -0
- package/dist/commodities/index.d.ts +30 -0
- package/dist/commodities/index.js +1 -0
- package/dist/commodities/index.js.map +1 -0
- package/dist/galactic-position-shLkm4Qg.d.ts +30 -0
- package/dist/materials/index.d.ts +47 -0
- package/dist/materials/index.js +1 -0
- package/dist/materials/index.js.map +1 -0
- package/dist/materials/materials-all.d.ts +26 -0
- package/dist/materials/materials-all.js +1 -0
- package/dist/materials/materials-all.js.map +1 -0
- package/dist/materials/materials-encoded.d.ts +31 -0
- package/dist/materials/materials-encoded.js +1 -0
- package/dist/materials/materials-encoded.js.map +1 -0
- package/dist/materials/materials-manufactured.d.ts +32 -0
- package/dist/materials/materials-manufactured.js +1 -0
- package/dist/materials/materials-manufactured.js.map +1 -0
- package/dist/materials/materials-raw.d.ts +31 -0
- package/dist/materials/materials-raw.js +1 -0
- package/dist/materials/materials-raw.js.map +1 -0
- package/dist/materials/materials.d.ts +277 -0
- package/dist/materials/materials.js +1 -0
- package/dist/materials/materials.js.map +1 -0
- package/dist/materials/micro-resources-all.d.ts +28 -0
- package/dist/materials/micro-resources-all.js +1 -0
- package/dist/materials/micro-resources-all.js.map +1 -0
- package/dist/materials/micro-resources-component.d.ts +29 -0
- package/dist/materials/micro-resources-component.js +1 -0
- package/dist/materials/micro-resources-component.js.map +1 -0
- package/dist/materials/micro-resources-consumable.d.ts +29 -0
- package/dist/materials/micro-resources-consumable.js +1 -0
- package/dist/materials/micro-resources-consumable.js.map +1 -0
- package/dist/materials/micro-resources-data.d.ts +29 -0
- package/dist/materials/micro-resources-data.js +1 -0
- package/dist/materials/micro-resources-data.js.map +1 -0
- package/dist/materials/micro-resources-item.d.ts +29 -0
- package/dist/materials/micro-resources-item.js +1 -0
- package/dist/materials/micro-resources-item.js.map +1 -0
- package/dist/materials/micro-resources.d.ts +136 -0
- package/dist/materials/micro-resources.js +1 -0
- package/dist/materials/micro-resources.js.map +1 -0
- package/dist/ship-loadout-Ba63RDf-.d.ts +1059 -0
- package/dist/ships/ammunition.d.ts +107 -0
- package/dist/ships/ammunition.js +1 -0
- package/dist/ships/ammunition.js.map +1 -0
- package/dist/ships/armour.d.ts +134 -0
- package/dist/ships/armour.js +1 -0
- package/dist/ships/armour.js.map +1 -0
- package/dist/ships/blueprint-costs.d.ts +128 -0
- package/dist/ships/blueprint-costs.js +1 -0
- package/dist/ships/blueprint-costs.js.map +1 -0
- package/dist/ships/blueprint-journal.d.ts +116 -0
- package/dist/ships/blueprint-journal.js +1 -0
- package/dist/ships/blueprint-journal.js.map +1 -0
- package/dist/ships/blueprints.d.ts +103 -0
- package/dist/ships/blueprints.js +1 -0
- package/dist/ships/blueprints.js.map +1 -0
- package/dist/ships/decorative-modifications.d.ts +176 -0
- package/dist/ships/decorative-modifications.js +1 -0
- package/dist/ships/decorative-modifications.js.map +1 -0
- package/dist/ships/engineering-options.d.ts +246 -0
- package/dist/ships/engineering-options.js +1 -0
- package/dist/ships/engineering-options.js.map +1 -0
- package/dist/ships/engineering.d.ts +229 -0
- package/dist/ships/engineering.js +1 -0
- package/dist/ships/engineering.js.map +1 -0
- package/dist/ships/experimental-effect-costs.d.ts +56 -0
- package/dist/ships/experimental-effect-costs.js +1 -0
- package/dist/ships/experimental-effect-costs.js.map +1 -0
- package/dist/ships/experimental-effects.d.ts +62 -0
- package/dist/ships/experimental-effects.js +1 -0
- package/dist/ships/experimental-effects.js.map +1 -0
- package/dist/ships/index.d.ts +205 -0
- package/dist/ships/index.js +1 -0
- package/dist/ships/index.js.map +1 -0
- package/dist/ships/jump-range.d.ts +115 -0
- package/dist/ships/jump-range.js +1 -0
- package/dist/ships/jump-range.js.map +1 -0
- package/dist/ships/loadout-calculations.d.ts +109 -0
- package/dist/ships/loadout-calculations.js +1 -0
- package/dist/ships/loadout-calculations.js.map +1 -0
- package/dist/ships/loadout-validation.d.ts +80 -0
- package/dist/ships/loadout-validation.js +1 -0
- package/dist/ships/loadout-validation.js.map +1 -0
- package/dist/ships/module-capabilities.d.ts +205 -0
- package/dist/ships/module-capabilities.js +1 -0
- package/dist/ships/module-capabilities.js.map +1 -0
- package/dist/ships/modules-all.d.ts +43 -0
- package/dist/ships/modules-all.js +1 -0
- package/dist/ships/modules-all.js.map +1 -0
- package/dist/ships/modules-core.d.ts +40 -0
- package/dist/ships/modules-core.js +1 -0
- package/dist/ships/modules-core.js.map +1 -0
- package/dist/ships/modules-hardpoint.d.ts +42 -0
- package/dist/ships/modules-hardpoint.js +1 -0
- package/dist/ships/modules-hardpoint.js.map +1 -0
- package/dist/ships/modules-internal.d.ts +40 -0
- package/dist/ships/modules-internal.js +1 -0
- package/dist/ships/modules-internal.js.map +1 -0
- package/dist/ships/modules-utility.d.ts +40 -0
- package/dist/ships/modules-utility.js +1 -0
- package/dist/ships/modules-utility.js.map +1 -0
- package/dist/ships/modules.d.ts +755 -0
- package/dist/ships/modules.js +1 -0
- package/dist/ships/modules.js.map +1 -0
- package/dist/ships/power.d.ts +168 -0
- package/dist/ships/power.js +1 -0
- package/dist/ships/power.js.map +1 -0
- package/dist/ships/pre-engineered-stats.d.ts +147 -0
- package/dist/ships/pre-engineered-stats.js +1 -0
- package/dist/ships/pre-engineered-stats.js.map +1 -0
- package/dist/ships/pre-engineered.d.ts +215 -0
- package/dist/ships/pre-engineered.js +1 -0
- package/dist/ships/pre-engineered.js.map +1 -0
- package/dist/ships/resistances.d.ts +208 -0
- package/dist/ships/resistances.js +1 -0
- package/dist/ships/resistances.js.map +1 -0
- package/dist/ships/shields.d.ts +221 -0
- package/dist/ships/shields.js +1 -0
- package/dist/ships/shields.js.map +1 -0
- package/dist/ships/ship-loadout.d.ts +16 -0
- package/dist/ships/ship-loadout.js +1 -0
- package/dist/ships/ship-loadout.js.map +1 -0
- package/dist/ships/ships.d.ts +191 -0
- package/dist/ships/ships.js +1 -0
- package/dist/ships/ships.js.map +1 -0
- package/dist/ships/slef.d.ts +318 -0
- package/dist/ships/slef.js +1 -0
- package/dist/ships/slef.js.map +1 -0
- package/dist/ships/slots.d.ts +418 -0
- package/dist/ships/slots.js +1 -0
- package/dist/ships/slots.js.map +1 -0
- package/dist/ships/source-purchase.d.ts +132 -0
- package/dist/ships/source-purchase.js +1 -0
- package/dist/ships/source-purchase.js.map +1 -0
- package/dist/ships/weapons.d.ts +380 -0
- package/dist/ships/weapons.js +1 -0
- package/dist/ships/weapons.js.map +1 -0
- package/dist/system-address-DYsN1qOT.d.ts +313 -0
- package/package.json +375 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* **Reading a journal `BlueprintName` against the module it was written for** — the one
|
|
3
|
+
* question that needs the journal-collision catalogue and the engineering menus at the
|
|
4
|
+
* same time.
|
|
5
|
+
*
|
|
6
|
+
* Almost every blueprint id means one recipe wherever it appears, and for those
|
|
7
|
+
* `getBlueprint(id)` is the answer. Three ids are not like that, and this is where that is
|
|
8
|
+
* dealt with. One of the three is `Weapon_Overcharged` on a multi-cannon, so any consumer
|
|
9
|
+
* reading journals from combat ships meets this — it is not the corner case the two scanner
|
|
10
|
+
* ids alone would make it.
|
|
11
|
+
*
|
|
12
|
+
* It lives in its own module because the join depends on both menus and the three
|
|
13
|
+
* colliding journal spellings. Keeping those spellings in a tiny purpose-specific
|
|
14
|
+
* catalogue means this resolver does not load every blueprint grade, modifier and
|
|
15
|
+
* material. `package.test.mjs` guards that package boundary.
|
|
16
|
+
*
|
|
17
|
+
* @packageDocumentation
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* The blueprint whose numbers a module actually rolls when a journal names `blueprint` on
|
|
21
|
+
* it — the same id back, except where the game spells two different recipes alike.
|
|
22
|
+
*
|
|
23
|
+
* **One `BlueprintName`, two recipes.** Long Range and Wide Angle are offered on the
|
|
24
|
+
* internal sensor suite and on the KWS/manifest/wake scanners, and the game writes the
|
|
25
|
+
* same id for both families. The two roll different stats, in opposite directions:
|
|
26
|
+
*
|
|
27
|
+
* | On a sensor suite | On a utility scanner |
|
|
28
|
+
* | --- | --- |
|
|
29
|
+
* | Long Range: `Mass` ×1.20, `ScannerRange` +0…15% | Long Range: `PowerDraw` ×1.10, `ScannerRange` +0…24% |
|
|
30
|
+
* | Wide Angle: `PowerDraw` ×1.10, `ScannerRange` −4% | Wide Angle: `Mass` ×1.20, `ScannerTimeToScan` +10% |
|
|
31
|
+
*
|
|
32
|
+
* (Grade 1 shown; both pairs share their `SensorTargetScanAngle` leg.) `BLUEPRINTS` keys
|
|
33
|
+
* the scanner side under `Scanner_LongRange` / `Scanner_WideAngle`, which is the spelling
|
|
34
|
+
* the scanner menus list — so on a scanner this resolves `Sensor_LongRange` to
|
|
35
|
+
* `Scanner_LongRange`, and folding the id as written would charge the build mass where the
|
|
36
|
+
* game charges power draw.
|
|
37
|
+
*
|
|
38
|
+
* **One `BlueprintName`, two recipes — again, on the multi-cannons.** The game writes
|
|
39
|
+
* `Weapon_Overcharged` for every weapon's Overcharged, but a multi-cannon's also cuts the
|
|
40
|
+
* clip — 3% at grade 1 falling to 15% at grade 5 — which the recipe the other weapons take
|
|
41
|
+
* does not. `BLUEPRINTS` keys the multi-cannon side under `MC_Overcharged`, the spelling
|
|
42
|
+
* the multi-cannon menus list, so on a multi-cannon this resolves `Weapon_Overcharged` to
|
|
43
|
+
* `MC_Overcharged` and folding the id as written would report a clip the build does not
|
|
44
|
+
* have. This is the common case of the three: 70 of the build corpus's 1902 declared
|
|
45
|
+
* entries go through it, against one for the scanners.
|
|
46
|
+
*
|
|
47
|
+
* The clip penalty is folded on a multi-cannon — anti-xeno ones included — and on nothing
|
|
48
|
+
* else. The cannons, fragment cannons and plasma accelerators take no clip leg, which is
|
|
49
|
+
* the game's own answer on all three groups: journal captures of a large gimballed cannon
|
|
50
|
+
* at grade 5, of a medium fragment cannon at grade 4 and of a medium plasma accelerator at
|
|
51
|
+
* grade 1, each rolled under this id, report no `AmmoClipSize` modifier. See
|
|
52
|
+
* [`data/ships/SOURCES.md`](https://github.com/DarkSession/Elite-Dangerous-Almanac/blob/main/data/ships/SOURCES.md)
|
|
53
|
+
* § "Multi-cannon Overcharged" for the captures.
|
|
54
|
+
*
|
|
55
|
+
* **The pairing is global, not repeated per menu.** A purpose-specific catalogue maps
|
|
56
|
+
* each of the three recipe ids to the colliding id the journal writes. This function
|
|
57
|
+
* supplies the half only a menu knows, by asking which mapped recipe *this module is
|
|
58
|
+
* offered*. Keeping one global map avoids repeating aliases on every scanner or
|
|
59
|
+
* multi-cannon group and silently forgetting the next one.
|
|
60
|
+
*
|
|
61
|
+
* Only the module can settle it, which is why this takes one. It resolves **into** a menu
|
|
62
|
+
* and never out of one: a sensor suite's `Sensor_LongRange` is already its own menu's id
|
|
63
|
+
* and comes back unchanged, and asking for `Scanner_LongRange` on a sensor suite returns
|
|
64
|
+
* it unchanged too — unchanged is not the same as offered, and `getBlueprintsForModule`
|
|
65
|
+
* still says a suite does not take it.
|
|
66
|
+
*
|
|
67
|
+
* **Only the numbers differ, not the price.** All three pairs cost the same materials at
|
|
68
|
+
* every grade, so `getBlueprintCost` from `ships/blueprint-costs` needs no module and
|
|
69
|
+
* either spelling bills correctly; cross-catalogue tests hold upstream to that. It is the
|
|
70
|
+
* stat block that has to be resolved.
|
|
71
|
+
*
|
|
72
|
+
* **Not a generic-spelling resolver.** A generic `Misc_*` id — `Misc_Shielded` where a
|
|
73
|
+
* life support's menu says `LifeSupport_Shielded` — comes back as it went in. That pair is
|
|
74
|
+
* one recipe under two spellings, both published with their own numbers, so the id a
|
|
75
|
+
* caller names is the one to roll. This function exists for the case where the id names no
|
|
76
|
+
* recipe the module has: the game never rolls a sensor suite's Long Range on a scanner.
|
|
77
|
+
*
|
|
78
|
+
* @param symbol - A module symbol, e.g. `"Hpt_CloudScanner_Size0_Class5"`.
|
|
79
|
+
* @param fdname - A blueprint catalogue or journal id, matched case-insensitively and
|
|
80
|
+
* trimmed. Colliding journal spellings are resolved against `symbol`.
|
|
81
|
+
* @returns The id to join to `BLUEPRINTS`, in that catalogue's spelling when a journal
|
|
82
|
+
* name resolved, and otherwise `fdname` exactly as it was passed — byte for byte, so a
|
|
83
|
+
* caller who never meets the collision never sees their own spelling rewritten.
|
|
84
|
+
*
|
|
85
|
+
* @throws {TypeError} If `fdname` is not a string, including when it is missing — this
|
|
86
|
+
* returns an id rather than reporting whether one is known, so there is no miss for a
|
|
87
|
+
* nullish one to be. A nullish `symbol` *is* a miss: an unknown module offers no menu,
|
|
88
|
+
* and `fdname` comes back unchanged.
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* import { resolveBlueprintForModule } from '@elite-dangerous-almanac/core/ships/blueprint-journal';
|
|
92
|
+
*
|
|
93
|
+
* // A wake scanner's Long Range is the scanner recipe, whichever way the build spells it.
|
|
94
|
+
* resolveBlueprintForModule('Hpt_CloudScanner_Size0_Class5', 'Sensor_LongRange');
|
|
95
|
+
* // -> 'Scanner_LongRange'
|
|
96
|
+
* resolveBlueprintForModule('Hpt_CloudScanner_Size0_Class5', 'Scanner_LongRange');
|
|
97
|
+
* // -> 'Scanner_LongRange'
|
|
98
|
+
*
|
|
99
|
+
* // The sensor suite keeps its own, and every other module keeps whatever it was given.
|
|
100
|
+
* resolveBlueprintForModule('Int_Sensors_Size4_Class5', 'Sensor_LongRange');
|
|
101
|
+
* // -> 'Sensor_LongRange'
|
|
102
|
+
* resolveBlueprintForModule('Int_Hyperdrive_Size5_Class5', 'FSD_LongRange');
|
|
103
|
+
* // -> 'FSD_LongRange'
|
|
104
|
+
*
|
|
105
|
+
* // A multi-cannon's Overcharged is the multi-cannon recipe, clip penalty and all.
|
|
106
|
+
* resolveBlueprintForModule('Hpt_MultiCannon_Fixed_Medium', 'Weapon_Overcharged');
|
|
107
|
+
* // -> 'MC_Overcharged'
|
|
108
|
+
* resolveBlueprintForModule('Hpt_ATMultiCannon_Gimbal_Medium', 'Weapon_Overcharged');
|
|
109
|
+
* // -> 'MC_Overcharged'
|
|
110
|
+
* resolveBlueprintForModule('Hpt_BeamLaser_Fixed_Small', 'Weapon_Overcharged');
|
|
111
|
+
* // -> 'Weapon_Overcharged'
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
declare function resolveBlueprintForModule(symbol: string, fdname: string): string;
|
|
115
|
+
|
|
116
|
+
export { resolveBlueprintForModule };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{resolveBlueprintForModule}from"../chunk-L2ZZXEZM.js"; //# sourceMappingURL=blueprint-journal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"O"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { Blueprint, BlueprintGrade } from './engineering.js';
|
|
2
|
+
import './slef.js';
|
|
3
|
+
import './modules.js';
|
|
4
|
+
import './engineering-options.js';
|
|
5
|
+
import './slots.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The **blueprint mechanics catalogue** — every engineering blueprint's per-grade stat
|
|
9
|
+
* modifiers, keyed by the blueprint's Frontier `fdname`
|
|
10
|
+
* (as it appears in a journal `Loadout` event's `Engineering.BlueprintName`).
|
|
11
|
+
*
|
|
12
|
+
* Its own module (and data file) so consumers who never engineer a build do not bundle
|
|
13
|
+
* it. Each grade is a {@link BlueprintGrade} — its `features` (feed to
|
|
14
|
+
* {@link computeModifiers} from `./engineering`) and optional converted
|
|
15
|
+
* `damageDistribution`. Read it with {@link getBlueprintGrade}. Material shopping lists
|
|
16
|
+
* live separately in `ships/blueprint-costs`, so build calculations do not bundle them.
|
|
17
|
+
*
|
|
18
|
+
* Keys are Frontier `fdname`s — normally the exact strings a journal `Loadout` event
|
|
19
|
+
* carries in `Engineering.BlueprintName` (e.g. `"FSD_LongRange"`), not the in-game display
|
|
20
|
+
* names. **Three keys collide**: each is a recipe the game writes under an id another
|
|
21
|
+
* record already answers to:
|
|
22
|
+
* `Scanner_LongRange` and `Scanner_WideAngle` are coriolis keys for recipes the game writes
|
|
23
|
+
* as `Sensor_LongRange` / `Sensor_WideAngle`, the ids it also writes for the sensor suites'
|
|
24
|
+
* different recipes of the same name; `MC_Overcharged` is its multi-cannon Overcharged,
|
|
25
|
+
* which cuts the clip by 3–15% where the `Weapon_Overcharged` the game writes for both
|
|
26
|
+
* leaves it alone. `ships/blueprint-journal` keeps those three spellings apart from this
|
|
27
|
+
* full mechanics catalogue and resolves one against a module.
|
|
28
|
+
*
|
|
29
|
+
* A further 25 keys are the **Operations** ids: 21 recipes a module is *sold*
|
|
30
|
+
* carrying (`ships/pre-engineered`) and four Operations recipes a player rolls at an
|
|
31
|
+
* engineer (`ships/engineering-options`). No journal spelling has been observed for those
|
|
32
|
+
* Operations ids — a gap in the evidence, not a claim that the game writes none.
|
|
33
|
+
*
|
|
34
|
+
* **Every recipe is keyed once.** Anti-Guardian Zone Resistance is
|
|
35
|
+
* `GuardianModule_Sturdy`, the id the game writes on Guardian weapons as well as on
|
|
36
|
+
* Guardian modules; the Inara registry's `recipe_guardianmodule_sturdy` and
|
|
37
|
+
* `recipe_guardianweapon_sturdy` are that registry's own spellings of the same recipe and
|
|
38
|
+
* are not keys here.
|
|
39
|
+
* Enumerate the 107 blueprints with `Object.keys(BLUEPRINTS)`.
|
|
40
|
+
*
|
|
41
|
+
* Data from EDCD/coriolis-data (`modifications/blueprints.json`): `features` from the
|
|
42
|
+
* grade with journal Labels resolved via EDSY; see
|
|
43
|
+
* [`data/ships/SOURCES.md`](https://github.com/DarkSession/Elite-Dangerous-Almanac/blob/main/data/ships/SOURCES.md).
|
|
44
|
+
*
|
|
45
|
+
* @packageDocumentation
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Every blueprint, keyed by Frontier `fdname` (e.g. `"FSD_LongRange"`). Each is a
|
|
50
|
+
* {@link Blueprint} — its display `name` and its per-grade `grades`, where each grade
|
|
51
|
+
* carries its `features` (modifiers) and optional converted `damageDistribution`.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```ts
|
|
55
|
+
* import { BLUEPRINTS } from '@elite-dangerous-almanac/core/ships/blueprints';
|
|
56
|
+
*
|
|
57
|
+
* BLUEPRINTS['FSD_LongRange']?.name; // -> 'Increased range'
|
|
58
|
+
* BLUEPRINTS['FSD_LongRange']?.grades['5']?.features; // -> [{ label: 'Integrity', ... }, ...]
|
|
59
|
+
* BLUEPRINTS['BeamLaser_ThermalPlasmaConversion']?.grades['5']?.damageDistribution;
|
|
60
|
+
* // -> { thermal: 0.845, absolute: 0.155 }
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
declare const BLUEPRINTS: Readonly<Record<string, Blueprint>>;
|
|
64
|
+
/**
|
|
65
|
+
* Look up a blueprint by its Frontier `fdname`, case-insensitively.
|
|
66
|
+
*
|
|
67
|
+
* @param fdname - The blueprint id, e.g. `"FSD_LongRange"`.
|
|
68
|
+
* @returns The blueprint (its `name` and `grades`), or `null` if this catalogue stores no
|
|
69
|
+
* blueprint under that id.
|
|
70
|
+
* @remarks
|
|
71
|
+
* **`null` is not always an unknown id.** The game writes a handful of cosmetic
|
|
72
|
+
* transformations in the same `BlueprintName` / `EngineerModifications` field, and they
|
|
73
|
+
* name no recipe — no grade, no materials, and no engineer who applies one.
|
|
74
|
+
* {@link isDecorativeModification} from `ships/decorative-modifications` is what tells one
|
|
75
|
+
* of those apart from an id this library has never heard of. Note that such an id is not a
|
|
76
|
+
* claim that the module is unmodified: read a fitted one's stats from the journal's own
|
|
77
|
+
* `Engineering.Modifiers`.
|
|
78
|
+
* @throws {TypeError} If `fdname` is present and not a string. A nullish
|
|
79
|
+
* `fdname` is a miss, answered the way an unrecognised one is.
|
|
80
|
+
*/
|
|
81
|
+
declare function getBlueprint(fdname: string): Blueprint | null;
|
|
82
|
+
/**
|
|
83
|
+
* Look up one complete grade of a blueprint, case-insensitively.
|
|
84
|
+
*
|
|
85
|
+
* @param fdname - The blueprint id, e.g. `"FSD_LongRange"`.
|
|
86
|
+
* @param grade - The grade, `1`–`5`.
|
|
87
|
+
* @returns The grade record — its modifier `features` and optional converted
|
|
88
|
+
* `damageDistribution` — or `null` if the catalogue holds no such blueprint or grade.
|
|
89
|
+
* See {@link getBlueprint} for what an absent blueprint can mean besides "unknown".
|
|
90
|
+
* @throws {RangeError} If `grade` is not an integer from 1 through 5.
|
|
91
|
+
* @throws {TypeError} If `fdname` is present and not a string. A nullish
|
|
92
|
+
* `fdname` is a miss, answered the way an unrecognised one is.
|
|
93
|
+
* @example
|
|
94
|
+
* ```ts
|
|
95
|
+
* import { getBlueprintGrade } from '@elite-dangerous-almanac/core/ships/blueprints';
|
|
96
|
+
*
|
|
97
|
+
* const grade = getBlueprintGrade('FSD_LongRange', 5);
|
|
98
|
+
* grade?.features; // -> [{ label: 'Integrity', ... }, ...]
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
declare function getBlueprintGrade(fdname: string, grade: number): BlueprintGrade | null;
|
|
102
|
+
|
|
103
|
+
export { BLUEPRINTS, getBlueprint, getBlueprintGrade };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{BLUEPRINTS,getBlueprint,getBlueprintGrade}from"../chunk-Q5MR36RW.js"; //# sourceMappingURL=blueprints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"O"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The **decorative modification catalogue** — the festive transformations the game
|
|
3
|
+
* records in the same field as an engineering blueprint, keyed by the Frontier `fdname`
|
|
4
|
+
* a journal writes (`EngineerModifications` on a `StoredModules` entry,
|
|
5
|
+
* `Engineering.BlueprintName` on a `Loadout` module).
|
|
6
|
+
*
|
|
7
|
+
* **Not engineering.** A decorative modification has no grade, costs no materials, and no
|
|
8
|
+
* engineer offers one. So these ids are **not** in {@link BLUEPRINTS} — there is no recipe
|
|
9
|
+
* to store — and no menu in `ships/engineering-options` lists one, because that catalogue
|
|
10
|
+
* answers what a player may apply. This module is what makes the id resolve to something
|
|
11
|
+
* rather than to nothing.
|
|
12
|
+
*
|
|
13
|
+
* **Not cosmetic-only, either.** A festive launcher fires fireworks rather than flak, and
|
|
14
|
+
* the transformation cuts the module's `Damage` by 99% to match — the one stat any of them
|
|
15
|
+
* moves, carried in {@link DecorativeModification.modifiers}. So a record here is never a
|
|
16
|
+
* claim that the module is unmodified. Feed the modifiers to {@link computeModifiers} to
|
|
17
|
+
* resolve a fitted launcher, the same way a pre-engineered variant's are resolved.
|
|
18
|
+
*
|
|
19
|
+
* Resolving the id is the whole of its job, and it is why it is worth having. A consumer
|
|
20
|
+
* reading a real journal meets `Decorative_Green` on a stored module and needs to tell "an
|
|
21
|
+
* id this library has never heard of" from "an id that is real and names no recipe"; only
|
|
22
|
+
* the second is true here. {@link ShipLoadout.applyBlueprint} reads it for the same
|
|
23
|
+
* reason: it refuses a decorative id, but refuses it by name.
|
|
24
|
+
*
|
|
25
|
+
* Three modifications are known — `Decorative_Green`, `Decorative_Red` and
|
|
26
|
+
* `Decorative_Yellow` — and one module is observed carrying them, the medium turreted
|
|
27
|
+
* Remote Release Flak Launcher (`Hpt_FlakMortar_Turret_Medium`). Enumerate them with
|
|
28
|
+
* `Object.keys(DECORATIVE_MODIFICATIONS)`.
|
|
29
|
+
*
|
|
30
|
+
* Its own module (and data file), a few hundred bytes, so nothing else has to grow to
|
|
31
|
+
* hold three records that belong to none of it.
|
|
32
|
+
*
|
|
33
|
+
* Ids and the module they sit on from a `StoredModules` capture contributed by the
|
|
34
|
+
* repository owner, the `Damage` cut from the same contributor's outfitting panel; EDSY
|
|
35
|
+
* lists the same three transformations and gives them no modifiers, which the cut shows to
|
|
36
|
+
* be an incomplete record. See
|
|
37
|
+
* [`data/ships/SOURCES.md`](https://github.com/DarkSession/Elite-Dangerous-Almanac/blob/main/data/ships/SOURCES.md).
|
|
38
|
+
*
|
|
39
|
+
* @packageDocumentation
|
|
40
|
+
*/
|
|
41
|
+
/**
|
|
42
|
+
* One hand-set stat change a decorative modification arrives with.
|
|
43
|
+
*
|
|
44
|
+
* Deliberately the same shape as {@link PreEngineeredModifier}, and for the same reason: a
|
|
45
|
+
* transformation that arrives on the module is a fixed article, not a roll, so there is no
|
|
46
|
+
* `min`/`max` to bound it. The two are kept as separate types because a festive launcher is
|
|
47
|
+
* not a pre-engineered purchase — but anything that handles one handles the other, and
|
|
48
|
+
* {@link computeModifiers} takes both once each value is read as its own `min` and `max`.
|
|
49
|
+
*/
|
|
50
|
+
interface DecorativeModifier {
|
|
51
|
+
/** Journal Modifier Label, e.g. `"Damage"`. */
|
|
52
|
+
readonly label: string;
|
|
53
|
+
/** How the value applies to the base stat. */
|
|
54
|
+
readonly method: 'multiplicative' | 'additive' | 'overwrite';
|
|
55
|
+
/**
|
|
56
|
+
* The modifier value: a fraction for `multiplicative` (`-0.99` is `−99%`), an absolute
|
|
57
|
+
* delta for `additive`, and the replacement value for `overwrite`.
|
|
58
|
+
*/
|
|
59
|
+
readonly value: number;
|
|
60
|
+
}
|
|
61
|
+
/** One festive transformation a module can carry in place of engineering. */
|
|
62
|
+
interface DecorativeModification {
|
|
63
|
+
/**
|
|
64
|
+
* The festive naming paired with the colour the id spells, e.g. `"Festive Green"`. No
|
|
65
|
+
* registry publishes the outfitting panel's own string for these, so this is what the
|
|
66
|
+
* transformation is known as rather than a sourced label.
|
|
67
|
+
*/
|
|
68
|
+
readonly name: string;
|
|
69
|
+
/**
|
|
70
|
+
* Every module symbol observed carrying this transformation, e.g.
|
|
71
|
+
* `["Hpt_FlakMortar_Turret_Medium"]`. Joins to the module catalogues.
|
|
72
|
+
*
|
|
73
|
+
* This is what has been **seen**, not what the game permits: the list comes from a
|
|
74
|
+
* journal capture, so a module absent from it is one no capture has shown carrying
|
|
75
|
+
* the transformation.
|
|
76
|
+
*/
|
|
77
|
+
readonly modules: readonly string[];
|
|
78
|
+
/**
|
|
79
|
+
* The stat changes the transformation arrives with — for every one of these, a single
|
|
80
|
+
* `Damage` cut of −99%, which is what turns a flak launcher into a firework launcher.
|
|
81
|
+
*
|
|
82
|
+
* Never empty: a decorative modification names no engineering *recipe*, but it is not
|
|
83
|
+
* inert, and reading it as cosmetic-only would overstate a fitted launcher's damage a
|
|
84
|
+
* hundredfold.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```ts
|
|
88
|
+
* import { DECORATIVE_MODIFICATIONS } from '@elite-dangerous-almanac/core/ships/decorative-modifications';
|
|
89
|
+
*
|
|
90
|
+
* DECORATIVE_MODIFICATIONS['Decorative_Green']?.modifiers;
|
|
91
|
+
* // -> [{ label: 'Damage', method: 'multiplicative', value: -0.99 }]
|
|
92
|
+
* // on the medium turreted launcher: 34 damage -> 0.34, 0.17 DPS
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
readonly modifiers: readonly DecorativeModifier[];
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Every decorative modification, keyed by Frontier `fdname` (e.g. `"Decorative_Green"`).
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```ts
|
|
102
|
+
* import { DECORATIVE_MODIFICATIONS } from '@elite-dangerous-almanac/core/ships/decorative-modifications';
|
|
103
|
+
*
|
|
104
|
+
* Object.keys(DECORATIVE_MODIFICATIONS);
|
|
105
|
+
* // -> ['Decorative_Green', 'Decorative_Red', 'Decorative_Yellow']
|
|
106
|
+
* DECORATIVE_MODIFICATIONS['Decorative_Green']?.modules;
|
|
107
|
+
* // -> ['Hpt_FlakMortar_Turret_Medium']
|
|
108
|
+
* DECORATIVE_MODIFICATIONS['Decorative_Green']?.modifiers;
|
|
109
|
+
* // -> [{ label: 'Damage', method: 'multiplicative', value: -0.99 }]
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
declare const DECORATIVE_MODIFICATIONS: Readonly<Record<string, DecorativeModification>>;
|
|
113
|
+
/**
|
|
114
|
+
* Look up a decorative modification by its Frontier `fdname`, case-insensitively.
|
|
115
|
+
*
|
|
116
|
+
* @param fdname - The modification id, e.g. `"Decorative_Green"`.
|
|
117
|
+
* @returns The modification — its `name`, the `modules` observed carrying it and the
|
|
118
|
+
* `modifiers` it arrives with — or `null` if the id is not a decorative modification.
|
|
119
|
+
* @throws {TypeError} If `fdname` is present and not a string. A nullish
|
|
120
|
+
* `fdname` is a miss, answered the way an unrecognised one is.
|
|
121
|
+
* @example
|
|
122
|
+
* ```ts
|
|
123
|
+
* import { getDecorativeModification } from '@elite-dangerous-almanac/core/ships/decorative-modifications';
|
|
124
|
+
*
|
|
125
|
+
* getDecorativeModification('decorative_red')?.name; // -> 'Festive Red'
|
|
126
|
+
* getDecorativeModification('FSD_LongRange'); // -> null
|
|
127
|
+
* ```
|
|
128
|
+
*/
|
|
129
|
+
declare function getDecorativeModification(fdname: string): DecorativeModification | null;
|
|
130
|
+
/**
|
|
131
|
+
* Whether an id names a decorative modification rather than an engineering blueprint.
|
|
132
|
+
*
|
|
133
|
+
* The question to ask of a journal `EngineerModifications` / `BlueprintName` value that
|
|
134
|
+
* {@link getBlueprint} answered `null` for: `true` means the id is real and names no
|
|
135
|
+
* recipe, and only a `false` here leaves "this library does not know the id" as the
|
|
136
|
+
* remaining reading. It does **not** mean the module is unmodified — read
|
|
137
|
+
* {@link DecorativeModification.modifiers} for what it does change.
|
|
138
|
+
*
|
|
139
|
+
* @param fdname - The id to test, matched case-insensitively and trimmed.
|
|
140
|
+
* @returns `true` when {@link getDecorativeModification} would find it.
|
|
141
|
+
* @throws {TypeError} If `fdname` is present and not a string. A nullish
|
|
142
|
+
* `fdname` is a miss, answered the way an unrecognised one is.
|
|
143
|
+
* @example
|
|
144
|
+
* ```ts
|
|
145
|
+
* import { isDecorativeModification } from '@elite-dangerous-almanac/core/ships/decorative-modifications';
|
|
146
|
+
*
|
|
147
|
+
* isDecorativeModification('Decorative_Yellow'); // -> true
|
|
148
|
+
* isDecorativeModification('Weapon_Efficient'); // -> false
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
declare function isDecorativeModification(fdname: string): boolean;
|
|
152
|
+
/**
|
|
153
|
+
* Every decorative modification a module has been observed carrying.
|
|
154
|
+
*
|
|
155
|
+
* Matching is case-insensitive and trims whitespace, so a raw journal value can be passed
|
|
156
|
+
* straight in. A module no capture shows carrying one yields an empty array, never
|
|
157
|
+
* `null`, so the result is always safe to iterate — and an empty answer is "none seen on
|
|
158
|
+
* this module", not "this module cannot have one".
|
|
159
|
+
*
|
|
160
|
+
* @param symbol - A module symbol, e.g. `"Hpt_FlakMortar_Turret_Medium"`.
|
|
161
|
+
* @returns The modification ids, in catalogue order. Join to
|
|
162
|
+
* {@link DECORATIVE_MODIFICATIONS}.
|
|
163
|
+
* @throws {TypeError} If `symbol` is present and not a string. A nullish
|
|
164
|
+
* `symbol` is a miss, answered the way an unrecognised one is.
|
|
165
|
+
* @example
|
|
166
|
+
* ```ts
|
|
167
|
+
* import { getDecorativeModificationsForModule } from '@elite-dangerous-almanac/core/ships/decorative-modifications';
|
|
168
|
+
*
|
|
169
|
+
* getDecorativeModificationsForModule('Hpt_FlakMortar_Turret_Medium');
|
|
170
|
+
* // -> ['Decorative_Green', 'Decorative_Red', 'Decorative_Yellow']
|
|
171
|
+
* getDecorativeModificationsForModule('Hpt_BeamLaser_Fixed_Small'); // -> []
|
|
172
|
+
* ```
|
|
173
|
+
*/
|
|
174
|
+
declare function getDecorativeModificationsForModule(symbol: string): readonly string[];
|
|
175
|
+
|
|
176
|
+
export { DECORATIVE_MODIFICATIONS, type DecorativeModification, type DecorativeModifier, getDecorativeModification, getDecorativeModificationsForModule, isDecorativeModification };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{DECORATIVE_MODIFICATIONS,getDecorativeModification,getDecorativeModificationsForModule,isDecorativeModification}from"../chunk-6LUEKHO5.js"; //# sourceMappingURL=decorative-modifications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"O"}
|