@elite-dangerous-almanac/core 0.2.12 → 0.2.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/PROVENANCE/galaxy-map/SOURCES.md +47 -0
  2. package/PROVENANCE/ships/SOURCES.md +61 -16
  3. package/README.md +19 -3
  4. package/THIRD_PARTY_NOTICES.md +2 -1
  5. package/dist/{chunk-Q5ALV3DI.js → chunk-3I2I5KG4.js} +1 -1
  6. package/dist/{chunk-7UF4XRIR.js → chunk-ABZPSAIN.js} +1 -1
  7. package/dist/chunk-DAQ3PJ4R.js +1 -0
  8. package/dist/chunk-DAQ3PJ4R.js.map +1 -0
  9. package/dist/{chunk-OSMBAFRW.js → chunk-FMPHK3L5.js} +1 -1
  10. package/dist/{chunk-OSMBAFRW.js.map → chunk-FMPHK3L5.js.map} +1 -1
  11. package/dist/{chunk-XQJERZUS.js → chunk-HWOP7QWK.js} +1 -1
  12. package/dist/chunk-LXHFRBWK.js +1 -0
  13. package/dist/{chunk-UVX7RCMP.js.map → chunk-LXHFRBWK.js.map} +1 -1
  14. package/dist/{chunk-4T3TTYUT.js → chunk-P3DGQUID.js} +1 -1
  15. package/dist/{chunk-4T3TTYUT.js.map → chunk-P3DGQUID.js.map} +1 -1
  16. package/dist/{chunk-25EECUZ2.js → chunk-P5SIDTV5.js} +1 -1
  17. package/dist/{chunk-25EECUZ2.js.map → chunk-P5SIDTV5.js.map} +1 -1
  18. package/dist/{chunk-F44QX47A.js → chunk-Q75JSMU6.js} +1 -1
  19. package/dist/{chunk-F44QX47A.js.map → chunk-Q75JSMU6.js.map} +1 -1
  20. package/dist/chunk-QNHGTVMZ.js +1 -0
  21. package/dist/chunk-QNHGTVMZ.js.map +1 -0
  22. package/dist/{chunk-DEY44PHF.js → chunk-S4BZ64WE.js} +1 -1
  23. package/dist/chunk-S4BZ64WE.js.map +1 -0
  24. package/dist/{chunk-DBJKLXLS.js → chunk-SRPCHXW2.js} +1 -1
  25. package/dist/chunk-T3WRI2U2.js +1 -0
  26. package/dist/chunk-T3WRI2U2.js.map +1 -0
  27. package/dist/{chunk-3GNYPM6J.js → chunk-T6BIFKPU.js} +1 -1
  28. package/dist/{chunk-3GNYPM6J.js.map → chunk-T6BIFKPU.js.map} +1 -1
  29. package/dist/chunk-XCLOOKC2.js +1 -0
  30. package/dist/chunk-XCLOOKC2.js.map +1 -0
  31. package/dist/chunk-Z266X4JF.js +1 -0
  32. package/dist/chunk-Z266X4JF.js.map +1 -0
  33. package/dist/galaxy-map/index.d.ts +35 -0
  34. package/dist/galaxy-map/index.js +1 -0
  35. package/dist/galaxy-map/index.js.map +1 -0
  36. package/dist/galaxy-map/markers.d.ts +93 -0
  37. package/dist/galaxy-map/markers.js +1 -0
  38. package/dist/galaxy-map/markers.js.map +1 -0
  39. package/dist/i18n/index.js +1 -1
  40. package/dist/materials/index.js +1 -1
  41. package/dist/materials/micro-resources-all.js +1 -1
  42. package/dist/materials/micro-resources.js +1 -1
  43. package/dist/ships/armour.js +1 -1
  44. package/dist/ships/build-metrics.js +1 -1
  45. package/dist/ships/index.js +1 -1
  46. package/dist/ships/loadout-validation.d.ts +1 -1
  47. package/dist/ships/loadout-validation.js +1 -1
  48. package/dist/ships/modules-all.js +1 -1
  49. package/dist/ships/modules-hardpoint.js +1 -1
  50. package/dist/ships/modules.d.ts +26 -13
  51. package/dist/ships/modules.js +1 -1
  52. package/dist/ships/pre-engineered-stats.js +1 -1
  53. package/dist/ships/resistances.d.ts +3 -2
  54. package/dist/ships/resistances.js +1 -1
  55. package/dist/ships/shield-capacitor.js +1 -1
  56. package/dist/ships/shields.js +1 -1
  57. package/dist/ships/ship-loadout.js +1 -1
  58. package/dist/ships/weapons.d.ts +2 -0
  59. package/dist/ships/weapons.js +1 -1
  60. package/package.json +13 -3
  61. package/dist/chunk-AAU7OM47.js +0 -1
  62. package/dist/chunk-AAU7OM47.js.map +0 -1
  63. package/dist/chunk-BUQLUEQS.js +0 -1
  64. package/dist/chunk-BUQLUEQS.js.map +0 -1
  65. package/dist/chunk-DEY44PHF.js.map +0 -1
  66. package/dist/chunk-KLC5XT6F.js +0 -1
  67. package/dist/chunk-KLC5XT6F.js.map +0 -1
  68. package/dist/chunk-P6HCQ2YE.js +0 -1
  69. package/dist/chunk-P6HCQ2YE.js.map +0 -1
  70. package/dist/chunk-UVX7RCMP.js +0 -1
  71. /package/dist/{chunk-Q5ALV3DI.js.map → chunk-3I2I5KG4.js.map} +0 -0
  72. /package/dist/{chunk-7UF4XRIR.js.map → chunk-ABZPSAIN.js.map} +0 -0
  73. /package/dist/{chunk-XQJERZUS.js.map → chunk-HWOP7QWK.js.map} +0 -0
  74. /package/dist/{chunk-DBJKLXLS.js.map → chunk-SRPCHXW2.js.map} +0 -0
@@ -0,0 +1,47 @@
1
+ # Data sources — `data/galaxy-map/`
2
+
3
+ **Acquired:** 2026-09-20 UTC. **Upstream revision:** unavailable — the game publishes no
4
+ immutable identifier for its interface artwork, so the captures are the evidence.
5
+
6
+ ## Markers
7
+
8
+ - **File:** `markers.jsonc` (one record per galaxy-map marker).
9
+ - **Source:** Frontier Developments plc — bitmap captures of the marker icons the galaxy
10
+ map draws over a system, one PNG per marker.
11
+ - **Derivation:** each record is `{ symbol, color, frameColor }`. `symbol` is a
12
+ kebab-case name for the marker, chosen here rather than taken from the game, which
13
+ exposes no identifier for these icons; it also names the marker's redrawn vector in
14
+ `assets/galaxy-map/`. `color` is the exact RGB value of the capture's dominant opaque
15
+ glyph pixel, written as uppercase `#RRGGBB`. `frameColor` is the same measurement taken
16
+ on the square border.
17
+ - **The captures are not retained, and they carry no checksum.** They are
18
+ Frontier's artwork, and the media-usage rules in `ATTRIBUTIONS.md` cover the redrawn
19
+ vectors this repository ships, not a redistributed copy of the source bitmaps. The
20
+ vectors are drawn from geometric shapes rather than traced, so a capture is not
21
+ recoverable from one. `data/SNAPSHOTS.md` asks for a checksum where the content itself
22
+ cannot be kept, so this is a gap: #59 records what would close it.
23
+
24
+ ### Measuring a capture
25
+
26
+ Read the capture's stored RGB. Do not composite it over a background first: that mixes
27
+ the background into the value, in proportion to how transparent the pixel is.
28
+
29
+ `front-line` is the one capture with no opaque pixel, so the Derivation bullet above
30
+ does not describe it. Its alpha is a flat 198 across the whole canvas, so an alpha-keyed
31
+ measurement returns the canvas rather than the glyph. Both of its colours come from the
32
+ RGB planes, which is where its shape sits.
33
+
34
+ ### Manual corrections
35
+
36
+ None. Every value is a measurement.
37
+
38
+ ### `front-line` is the one marker with two colours
39
+
40
+ The game frames it in `#4A00B5` and draws the arrow inside in `#9418FF`. Every other
41
+ marker frames and draws in one colour, so `frameColor` repeats `color`.
42
+
43
+ ### `station-abandoned` is nearly black on purpose
44
+
45
+ Its `#211C21` is the colour the game uses, not a failed measurement or a transparent
46
+ pixel read by mistake. An abandoned station is drawn dark, and a consumer that treats a
47
+ near-black marker colour as an error would reject a correct record.
@@ -18,6 +18,7 @@ Referred to throughout by source name; the pin is here, once.
18
18
  | Elite Dangerous in-game verification | game version `4.4.0.3`; direct in-game observation | 2026-08-14 UTC |
19
19
  | Elite Dangerous in-game purchase capture | no game version recorded; nine `ModuleBuyAndStore` journal entries from market `128666762`, 17:34-17:37, at a 10% and a 2.5% outfitting discount | 2026-08-30 UTC |
20
20
  | Elite Dangerous in-game outfitting observation | no game version recorded; direct in-game observation that outfitting offers no non-SCO size-8 frame shift drive | 2026-08-30 UTC |
21
+ | Elite Dangerous in-game SCO outfitting observation | no game version recorded; direct in-game observation that outfitting offers no SCO frame shift drive below the size of the mount being outfitted | 2026-09-17 UTC |
21
22
  | Elite Dangerous Large Planetary Vehicle Hangar readings | **unreleased** — observation of the modules an unreleased update adds, plus outfitting and journal `ModuleBuy` readings at a 10% and 2.5% discount | 2026-09-02 UTC |
22
23
 
23
24
  Every `eddb.js` derivation uses the baseline snapshot unless its catalogue note names
@@ -434,17 +435,29 @@ FDevIDs, stats from coriolis-data and EDSY, joined on `symbol`.
434
435
  in the symbol and the display name.
435
436
  - **Derivation:** the symbol family is the classification, exactly as it is for `slot`
436
437
  above, and it is applied once here so that consumers read a datum instead of
437
- matching `Int_Hyperdrive_Overcharge` themselves — which a pre-engineered or fitted
438
- article's symbol does not always let them do. Stored as a sparse flag rather than a
439
- `true`/`false` pair on every drive, following `alwaysPowered` and
440
- `guardianZoneResistance`.
441
- - **Nothing else is derived from it.** The two lines share every jump constant this
442
- catalogue carries (`optMass`, `maxFuel`, `fuelMul`, `fuelPower`, and the
443
- `fsdHeatRate`, which is a function of a drive's size alone — 10, 14, 18, 27, 37, 43
444
- and 50 for sizes 2 to 8, identical on the plain and SCO lines at every size), so no
445
- calculation reads the flag; the
446
- overcharged supercruise behaviour the drives are named for has no published figures
447
- and none are stored.
438
+ matching `Int_Hyperdrive_Overcharge` themselves. Every record carrying the flag has
439
+ `Overcharge` in its symbol today and no other record does, so the two agree; stating
440
+ the capability keeps that agreement from being something a consumer has to rely on.
441
+ Stored as a sparse flag rather than a `true`/`false` pair on every drive, following
442
+ `alwaysPowered` and `guardianZoneResistance`.
443
+ - **The two lines share every jump constant this catalogue carries** — `optMass`,
444
+ `maxFuel`, `fuelMul`, `fuelPower`, and the `fsdHeatRate`, which is a function of a
445
+ drive's size alone: 10, 14, 18, 27, 37, 43 and 50 for sizes 2 to 8, and where both
446
+ lines offer a size they state the same value. The overcharged supercruise behaviour
447
+ the drives are named for has no published figures and none are stored. The plain line
448
+ runs from size 2 to 7 and the SCO line from 2 to 8, so size 8 is stated on the SCO
449
+ line alone.
450
+ - **An SCO drive is sold only at the size of the mount being outfitted.** Outfitting
451
+ offers a class-4 SCO drive for a class-4 frame shift drive mount and not for a
452
+ class-5 one, where it does offer a class-4 plain drive — an SCO drive cannot be
453
+ underfitted.
454
+ - **Source:** Elite Dangerous in-game SCO outfitting observation, pinned above.
455
+ - **Derivation:** none; the observation is recorded as stated. No catalogue field
456
+ carries it — the drives are exactly the records `supercruiseOvercharge` already
457
+ marks, and every one of them states a `class` matching the `Size` token in its
458
+ symbol, so the flag and the class are together sufficient to state the rule.
459
+ Neither registry source carries a field stating such a restriction, so the
460
+ observation is the only evidence for it.
448
461
  - **`cabinCapacity` — a passenger cabin's berths.** The `passengerCabins` records
449
462
  carry it; every other record in all four catalogues omits it, and no cabin carries a
450
463
  zero. It is the module's own seat count, not the ship's.
@@ -732,10 +745,11 @@ the armour modules, blueprint grade rolls and crafting costs remain unverified t
732
745
  It also did not unambiguously settle the shield-generator resistances, shield-booster
733
746
  properties or probe radius. Those values are not changed on guesswork. For the
734
747
  anti-xeno, Guardian and special weapons whose damage observed in-game does not reduce honestly
735
- to one conventional scalar, `damageComponents` preserves the exact amounts. The two
736
- channel types not established by in-game verification remain `unclassified`. The
737
- projectile-limited hardpoints carry their boundary parameters observed in-game in
738
- `projectileRange`; those parameters are not presented as effective ranges.
748
+ to one conventional scalar, `damageComponents` preserves the exact amounts. It read the
749
+ Enzyme Missile Rack's two channels as amounts without settling the minor one's type; that
750
+ type is caustic, and the note below records the correction. The projectile-limited
751
+ hardpoints carry their boundary parameters observed in-game in `projectileRange`; those
752
+ parameters are not presented as effective ranges.
739
753
 
740
754
  **A journal capture is a third source, and it reaches fields in-game verification does
741
755
  not.** Every engineered module in a `Loadout` states its own _unmodified_ value beside
@@ -847,7 +861,7 @@ Resource Siphon, the corrections are:
847
861
  | Beam Laser, Cannon, Fragment Cannon, Multi-Cannon, Plasma Accelerator, Rail Gun, Shock Cannon and Point Defence records | damage / thermal load | `damage` and `thermalLoad` read from the module panel per symbol |
848
862
  | Advanced Plasma Accelerator, Imperial Hammer, Shock Cannons and Mk II Plasma Shock Accelerator | burst interval / combined rate of fire | exact cycle values derived with the catalogue's documented formula |
849
863
  | mining, utility and Guardian hardpoints | clip, distributor draw, reload, jitter, falloff and maximum range | observed values per symbol |
850
- | anti-xeno, Guardian and special weapons | scalar, distribution and exact damage components | one component record per weapon |
864
+ | anti-xeno, Guardian and special weapons | scalar, distribution and exact damage components | a component record wherever the damage needs more than a share |
851
865
  | AX missiles, subsurface displacement missiles and seismic charge launchers | projectile boundary parameters; misleading ordinary ranges absent | `projectileRange` stored; `maximumRange` and `falloffRange` absent |
852
866
 
853
867
  In-game verification gives the integer thruster/FSD masses, 1.1/1.2 enhanced-thruster
@@ -879,6 +893,37 @@ EDSY's 40 / 70. The catalogue stores the displayed values without further deriva
879
893
  applies the same correction to their exact thermal and anti-xeno components. The two
880
894
  panel readings have no upstream immutable revision.
881
895
 
896
+ **The Mk II Plasma Shock Accelerator's damage type is Plasma, and it is stored as
897
+ `absolute`.** Plasma is a type of its own, not a second name for absolute damage, and the
898
+ stored share is not a claim that Frontier calls the channel absolute. What the two types
899
+ share is the only property a damage calculation reads from either: nothing resists them.
900
+ No shield generator, armour or hull reinforcement carries a Plasma resistance any more
901
+ than it carries an absolute one, so the whole of this weapon's output lands whatever the
902
+ target has fitted, and a share stored as `absolute` computes its effect exactly. The same
903
+ reading already stores the Operations Plasma conversion's Plasma share as `absolute`,
904
+ under "Engineering (blueprints and experimental effects)" below. What the storage costs is
905
+ the distinction itself, which is why it is written down here: should Frontier ever give a
906
+ defensive module a Plasma resistance, the two types stop agreeing, and this weapon and
907
+ that blueprint are the records to revisit.
908
+
909
+ Its `damageComponents` record goes with the `unclassified` spelling it replaces.
910
+ `damageComponents` preserves amounts a fractional split cannot state honestly — an
911
+ anti-xeno overlay, or a channel whose type is not established — and one conventional type
912
+ at the full scalar is neither.
913
+
914
+ **The Enzyme Missile Rack's minor damage channel is Caustic.** Of the 5 damage its round
915
+ carries, 4 are explosive and 1 is caustic. The amounts are what in-game verification
916
+ established; the minor channel's type it did not, and the share was stored as
917
+ `unclassified` for exactly as long as that was the whole of what was known. The type is
918
+ caustic, and the catalogue's own vocabulary says so twice over: Frontier's symbol for the
919
+ weapon is `Hpt_CausticMissile_Fixed_Medium`, and the enzyme it delivers is the damage the
920
+ Caustic Sink Launcher exists to shed. This is not the Mk II's situation above. Caustic is
921
+ a type the defensive side of the catalogue already names — `causticResistance` on the
922
+ armour and hull reinforcement records meets it, and it is one of the four resistances a build carries —
923
+ so the spelling decides whether a defender's caustic resistance reaches this weapon's
924
+ minor channel at all. `unclassified` would have kept it out of that arithmetic on a point
925
+ the game does settle.
926
+
882
927
  **Values that look wrong and are not.** Three records break the pattern their family
883
928
  follows and are confirmed outright by EDSY. Recorded so the "breaks its family's curve"
884
929
  heuristic does not keep rediscovering them:
package/README.md CHANGED
@@ -31,7 +31,7 @@ Use a feature barrel when a bundler will tree-shake it:
31
31
  import { ProceduralSystem } from '@elite-dangerous-almanac/core/astro';
32
32
  ```
33
33
 
34
- There is no package-wide root entry; choose one of the six feature areas or a leaf.
34
+ There is no package-wide root entry; choose a feature area or a leaf.
35
35
 
36
36
  Use leaf subpaths to avoid evaluating unrelated data modules in native ESM:
37
37
 
@@ -43,7 +43,7 @@ import { ShipLoadout } from '@elite-dangerous-almanac/core/ships/ship-loadout';
43
43
  The heavyweight module registries, planetary/combined nebula catalogues and codex-region
44
44
  coordinate lookup are only exported from their leaf subpaths, not the feature barrels.
45
45
 
46
- The package has six feature areas:
46
+ The package covers these feature areas:
47
47
 
48
48
  - `astro`: procedural names, id64 addresses, regions, nebulae, permit locks, and scanned
49
49
  bodies with their physics;
@@ -53,7 +53,9 @@ The package has six feature areas:
53
53
  - `i18n`: sparse localized catalogue names, descriptions, slot labels and structured
54
54
  diagnostic messages;
55
55
  - `materials`: ship engineering materials and Odyssey micro resources;
56
- - `commodities`: standard and rare market goods.
56
+ - `commodities`: standard and rare market goods;
57
+ - `galaxy-map`: the galaxy map's location markers and the colours the game draws them
58
+ in.
57
59
 
58
60
  ## Ship assets
59
61
 
@@ -98,6 +100,20 @@ foreign or media elements, links, external references, or CSS `url()` values. Th
98
100
  content guarantee applies to the unmodified package files; applications remain
99
101
  responsible for any transformations or user-supplied replacements.
100
102
 
103
+ ## Galaxy-map marker assets
104
+
105
+ The `galaxy-map` catalogue reports each marker's colours, and one SVG per marker holds
106
+ the icon. The package does not carry those files. They live in the repository, at
107
+ [`assets/galaxy-map/<symbol>.svg`](https://github.com/DarkSession/Elite-Dangerous-Almanac/tree/main/assets/galaxy-map),
108
+ where `<symbol>` is the exact symbol the catalogue returns. Copy them into your own
109
+ asset directory.
110
+
111
+ Every shape in an asset paints with `currentColor`, and the root `<svg>` carries the
112
+ marker's own colour. A host that embeds the file inline therefore recolours it with one
113
+ CSS `color` declaration, and one that loads it with `<img>` keeps the game's colour.
114
+ `front-line.svg` is the exception: its frame holds the frame colour as a literal, which
115
+ no `color` declaration reaches.
116
+
101
117
  ## Examples
102
118
 
103
119
  ```ts
@@ -156,7 +156,8 @@ a verbatim copy produced at build time — edit this file, never the copy.
156
156
  **CC BY-SA 3.0**) — how the Corrosion Resistant Cargo Racks are obtained, which is why
157
157
  two of them carry no list price.
158
158
  - **Frontier Developments plc** — the game itself, the ship models represented by the
159
- shared vector illustrations, the official
159
+ shared vector illustrations, the galaxy-map marker artwork redrawn as the shared
160
+ vector markers in `assets/galaxy-map/`, the official
160
161
  [Elite Dangerous Gamestore](https://www.elitedangerous.com/store/) product names used
161
162
  to correct the four Karma and three TK handheld weapons, and its published statements:
162
163
  the [media-usage rules](https://forums.frontier.co.uk/threads/elite-dangerous-media-usage-rules.510879/)
@@ -1 +1 @@
1
- import{mapDamageTypes,stackArmourResistance,effectiveHitPoints}from"./chunk-F44QX47A.js";var reinforcementResistances=(sources,type)=>sources.map(source=>source[`${type}Resistance`]??0);function armourMetrics(input){const bulkhead=input.bulkhead??{};const reinforcements=input.reinforcements??[];const moduleReinforcements=input.moduleReinforcements??[];const bulkheads=input.baseArmour*(1+(bulkhead.hullBoost??0));const reinforcement=reinforcements.reduce((sum,pack)=>sum+(pack.hullReinforcement??0)+input.baseArmour*(pack.hullBoost??0),0);const hitPoints=bulkheads+reinforcement;const resistances=Object.freeze(mapDamageTypes(type=>stackArmourResistance(bulkhead[`${type}Resistance`]??0,reinforcementResistances(reinforcements,type))));return Object.freeze({hitPoints:hitPoints,bulkheads:bulkheads,reinforcement:reinforcement,resistances:resistances,effectiveHitPoints:Object.freeze(effectiveHitPoints(hitPoints,resistances)),moduleArmour:moduleReinforcements.reduce((sum,pack)=>sum+(pack.integrity??0),0),moduleProtection:1-moduleReinforcements.reduce((product,pack)=>product*(1-(pack.moduleProtection??0)),1)})}export{armourMetrics};//# sourceMappingURL=chunk-Q5ALV3DI.js.map
1
+ import{mapDamageTypes,stackArmourResistance,effectiveHitPoints}from"./chunk-Q75JSMU6.js";var reinforcementResistances=(sources,type)=>sources.map(source=>source[`${type}Resistance`]??0);function armourMetrics(input){const bulkhead=input.bulkhead??{};const reinforcements=input.reinforcements??[];const moduleReinforcements=input.moduleReinforcements??[];const bulkheads=input.baseArmour*(1+(bulkhead.hullBoost??0));const reinforcement=reinforcements.reduce((sum,pack)=>sum+(pack.hullReinforcement??0)+input.baseArmour*(pack.hullBoost??0),0);const hitPoints=bulkheads+reinforcement;const resistances=Object.freeze(mapDamageTypes(type=>stackArmourResistance(bulkhead[`${type}Resistance`]??0,reinforcementResistances(reinforcements,type))));return Object.freeze({hitPoints:hitPoints,bulkheads:bulkheads,reinforcement:reinforcement,resistances:resistances,effectiveHitPoints:Object.freeze(effectiveHitPoints(hitPoints,resistances)),moduleArmour:moduleReinforcements.reduce((sum,pack)=>sum+(pack.integrity??0),0),moduleProtection:1-moduleReinforcements.reduce((product,pack)=>product*(1-(pack.moduleProtection??0)),1)})}export{armourMetrics};//# sourceMappingURL=chunk-3I2I5KG4.js.map
@@ -1 +1 @@
1
- import{ALL_MICRO_RESOURCES}from"./chunk-KLC5XT6F.js";import{findInKeyIndex,findByKey,filterByKey,createKeyIndex}from"./chunk-BKWLI44T.js";var MICRO_RESOURCES_BY_SYMBOL=/* @__PURE__ */createKeyIndex(ALL_MICRO_RESOURCES,"symbol");var MICRO_RESOURCES_BY_NAME=/* @__PURE__ */createKeyIndex(ALL_MICRO_RESOURCES,"name");function getMicroResourceBySymbol(symbol,microResources=ALL_MICRO_RESOURCES){return microResources===ALL_MICRO_RESOURCES?findInKeyIndex(MICRO_RESOURCES_BY_SYMBOL,symbol,"getMicroResourceBySymbol: symbol"):findByKey(microResources,"symbol",symbol,"getMicroResourceBySymbol: symbol")}function getMicroResourceByName(name,microResources=ALL_MICRO_RESOURCES){return microResources===ALL_MICRO_RESOURCES?findInKeyIndex(MICRO_RESOURCES_BY_NAME,name,"getMicroResourceByName: name"):findByKey(microResources,"name",name,"getMicroResourceByName: name")}function microResourcesInCategory(category){return filterByKey(ALL_MICRO_RESOURCES,"category",category,"microResourcesInCategory: category")}export{getMicroResourceByName,getMicroResourceBySymbol,microResourcesInCategory};//# sourceMappingURL=chunk-7UF4XRIR.js.map
1
+ import{ALL_MICRO_RESOURCES}from"./chunk-DAQ3PJ4R.js";import{findInKeyIndex,findByKey,filterByKey,createKeyIndex}from"./chunk-BKWLI44T.js";var MICRO_RESOURCES_BY_SYMBOL=/* @__PURE__ */createKeyIndex(ALL_MICRO_RESOURCES,"symbol");var MICRO_RESOURCES_BY_NAME=/* @__PURE__ */createKeyIndex(ALL_MICRO_RESOURCES,"name");function getMicroResourceBySymbol(symbol,microResources=ALL_MICRO_RESOURCES){return microResources===ALL_MICRO_RESOURCES?findInKeyIndex(MICRO_RESOURCES_BY_SYMBOL,symbol,"getMicroResourceBySymbol: symbol"):findByKey(microResources,"symbol",symbol,"getMicroResourceBySymbol: symbol")}function getMicroResourceByName(name,microResources=ALL_MICRO_RESOURCES){return microResources===ALL_MICRO_RESOURCES?findInKeyIndex(MICRO_RESOURCES_BY_NAME,name,"getMicroResourceByName: name"):findByKey(microResources,"name",name,"getMicroResourceByName: name")}function microResourcesInCategory(category){return filterByKey(ALL_MICRO_RESOURCES,"category",category,"microResourcesInCategory: category")}export{getMicroResourceByName,getMicroResourceBySymbol,microResourcesInCategory};//# sourceMappingURL=chunk-ABZPSAIN.js.map
@@ -0,0 +1 @@
1
+ import{COMPONENT_MICRO_RESOURCES}from"./chunk-HTB52N6S.js";import{CONSUMABLE_MICRO_RESOURCES}from"./chunk-K7L7SMIR.js";import{DATA_MICRO_RESOURCES}from"./chunk-GVLDFJEY.js";import{ITEM_MICRO_RESOURCES}from"./chunk-WHWFKHV3.js";var ALL_MICRO_RESOURCES=Object.freeze([...COMPONENT_MICRO_RESOURCES,...CONSUMABLE_MICRO_RESOURCES,...DATA_MICRO_RESOURCES,...ITEM_MICRO_RESOURCES]);export{ALL_MICRO_RESOURCES};//# sourceMappingURL=chunk-DAQ3PJ4R.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/materials/micro-resources-all.ts"],"names":["COMPONENT_MICRO_RESOURCES","CONSUMABLE_MICRO_RESOURCES","DATA_MICRO_RESOURCES","ITEM_MICRO_RESOURCES","ALL_MICRO_RESOURCES","Object","freeze"],"mappings":"O,4NA6BO,IAAMI,oBAAgDC,OAAOC,OAAO,IACpEN,6BACAC,8BACAC,wBACAC,8BACNC"}
@@ -1 +1 @@
1
- import{ALL_MODULES}from"./chunk-UVX7RCMP.js";import{findInKeyIndex,findByKey,filterByKey,createKeyIndex}from"./chunk-BKWLI44T.js";var MODULES_BY_SYMBOL=/* @__PURE__ */createKeyIndex(ALL_MODULES,"symbol");function builtInModuleBySymbol(symbol,label){return findInKeyIndex(MODULES_BY_SYMBOL,symbol,label)}function getModuleBySymbol(symbol,modules=ALL_MODULES){return modules===ALL_MODULES?builtInModuleBySymbol(symbol,"getModuleBySymbol: symbol"):findByKey(modules,"symbol",symbol,"getModuleBySymbol: symbol")}function getModulesByName(name,modules=ALL_MODULES){return filterByKey(modules,"name",name,"getModulesByName: name")}function getBulkheadsForShip(ship,modules=ALL_MODULES){return filterByKey(modules,"ship",ship,"getBulkheadsForShip: ship")}export{builtInModuleBySymbol,getBulkheadsForShip,getModuleBySymbol,getModulesByName};//# sourceMappingURL=chunk-OSMBAFRW.js.map
1
+ import{ALL_MODULES}from"./chunk-LXHFRBWK.js";import{findInKeyIndex,findByKey,filterByKey,createKeyIndex}from"./chunk-BKWLI44T.js";var MODULES_BY_SYMBOL=/* @__PURE__ */createKeyIndex(ALL_MODULES,"symbol");function builtInModuleBySymbol(symbol,label){return findInKeyIndex(MODULES_BY_SYMBOL,symbol,label)}function getModuleBySymbol(symbol,modules=ALL_MODULES){return modules===ALL_MODULES?builtInModuleBySymbol(symbol,"getModuleBySymbol: symbol"):findByKey(modules,"symbol",symbol,"getModuleBySymbol: symbol")}function getModulesByName(name,modules=ALL_MODULES){return filterByKey(modules,"name",name,"getModulesByName: name")}function getBulkheadsForShip(ship,modules=ALL_MODULES){return filterByKey(modules,"ship",ship,"getBulkheadsForShip: ship")}export{builtInModuleBySymbol,getBulkheadsForShip,getModuleBySymbol,getModulesByName};//# sourceMappingURL=chunk-FMPHK3L5.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ships/internal/module-symbol-index.ts","../src/ships/modules.ts"],"names":["ALL_MODULES","findInKeyIndex","findByKey","filterByKey","createKeyIndex","MODULES_BY_SYMBOL","builtInModuleBySymbol","symbol","label","getModuleBySymbol","modules","getModulesByName","name","getBulkheadsForShip","ship"],"mappings":"O,2HAMA,IAAMK,iCAAoCD,eAAeJ,YAAa,UAS/D,SAASM,sBAAsBC,OAAgBC,OAClD,OAAOP,eAAeI,kBAAmBE,OAAQC,MACrD,CC62BO,SAASC,kBACZF,OACAG,QAAuCV,aAEvC,OAAOU,UAAYV,YACbM,sBAAsBC,OAAQ,6BAC9BL,UAAUQ,QAAS,SAAUH,OAAQ,4BAC/C,CAoBO,SAASI,iBACZC,KACAF,QAAuCV,aAEvC,OAAOG,YAAYO,QAAS,OAAQE,KAAM,yBAC9C,CA8BO,SAASC,oBACZC,KACAJ,QAAuCV,aAEvC,OAAOG,YAAYO,QAAS,OAAQI,KAAM,4BAC9C,QAAAR,sBAAAO,oBAAAJ,kBAAAE"}
1
+ {"version":3,"sources":["../src/ships/internal/module-symbol-index.ts","../src/ships/modules.ts"],"names":["ALL_MODULES","findInKeyIndex","findByKey","filterByKey","createKeyIndex","MODULES_BY_SYMBOL","builtInModuleBySymbol","symbol","label","getModuleBySymbol","modules","getModulesByName","name","getBulkheadsForShip","ship"],"mappings":"O,2HAMA,IAAMK,iCAAoCD,eAAeJ,YAAa,UAS/D,SAASM,sBAAsBC,OAAgBC,OAClD,OAAOP,eAAeI,kBAAmBE,OAAQC,MACrD,CC03BO,SAASC,kBACZF,OACAG,QAAuCV,aAEvC,OAAOU,UAAYV,YACbM,sBAAsBC,OAAQ,6BAC9BL,UAAUQ,QAAS,SAAUH,OAAQ,4BAC/C,CAoBO,SAASI,iBACZC,KACAF,QAAuCV,aAEvC,OAAOG,YAAYO,QAAS,OAAQE,KAAM,yBAC9C,CA8BO,SAASC,oBACZC,KACAJ,QAAuCV,aAEvC,OAAOG,YAAYO,QAAS,OAAQI,KAAM,4BAC9C,QAAAR,sBAAAO,oBAAAJ,kBAAAE"}
@@ -1 +1 @@
1
- import{capacitorRechargeAtPips}from"./chunk-JOTAOI5T.js";import{systemsResistance,mapDamageTypes,effectiveHitPoints}from"./chunk-F44QX47A.js";import{requirePips,requireFiniteNonNegative}from"./chunk-65FZECUX.js";var DAMAGE_TYPES=["kinetic","thermal","explosive","caustic"];function shieldCapacitorMetrics(input){const scope="shieldCapacitorMetrics";const systemsPips=input.systemsPips??4;requirePips(scope,"systemsPips",systemsPips);for(const field of["strength","systemsCapacity","systemsRecharge"]){requireFiniteNonNegative(scope,field,input[field])}const resistances=input.resistances;if(typeof resistances!=="object"||resistances===null){throw new TypeError(`${scope}: resistances must carry the four damage types`)}for(const type of DAMAGE_TYPES){if(!Number.isFinite(input.resistances[type])){throw new RangeError(`${scope}: resistances.${type} must be a finite number`)}}const sysResistance=systemsResistance(systemsPips);const effectiveResistances=Object.freeze(mapDamageTypes(type=>1-(1-input.resistances[type])*(1-sysResistance)));return Object.freeze({systemsPips:systemsPips,capacity:input.systemsCapacity,rechargeRate:capacitorRechargeAtPips(input.systemsRecharge,systemsPips),systemsResistance:sysResistance,effectiveResistances:effectiveResistances,effectiveHitPoints:Object.freeze(effectiveHitPoints(input.strength,effectiveResistances))})}export{shieldCapacitorMetrics};//# sourceMappingURL=chunk-XQJERZUS.js.map
1
+ import{capacitorRechargeAtPips}from"./chunk-JOTAOI5T.js";import{systemsResistance,mapDamageTypes,effectiveHitPoints}from"./chunk-Q75JSMU6.js";import{requirePips,requireFiniteNonNegative}from"./chunk-65FZECUX.js";var DAMAGE_TYPES=["kinetic","thermal","explosive","caustic"];function shieldCapacitorMetrics(input){const scope="shieldCapacitorMetrics";const systemsPips=input.systemsPips??4;requirePips(scope,"systemsPips",systemsPips);for(const field of["strength","systemsCapacity","systemsRecharge"]){requireFiniteNonNegative(scope,field,input[field])}const resistances=input.resistances;if(typeof resistances!=="object"||resistances===null){throw new TypeError(`${scope}: resistances must carry the four damage types`)}for(const type of DAMAGE_TYPES){if(!Number.isFinite(input.resistances[type])){throw new RangeError(`${scope}: resistances.${type} must be a finite number`)}}const sysResistance=systemsResistance(systemsPips);const effectiveResistances=Object.freeze(mapDamageTypes(type=>1-(1-input.resistances[type])*(1-sysResistance)));return Object.freeze({systemsPips:systemsPips,capacity:input.systemsCapacity,rechargeRate:capacitorRechargeAtPips(input.systemsRecharge,systemsPips),systemsResistance:sysResistance,effectiveResistances:effectiveResistances,effectiveHitPoints:Object.freeze(effectiveHitPoints(input.strength,effectiveResistances))})}export{shieldCapacitorMetrics};//# sourceMappingURL=chunk-HWOP7QWK.js.map
@@ -0,0 +1 @@
1
+ import{INTERNAL_MODULES}from"./chunk-7Y5EK2VO.js";import{UTILITY_MODULES}from"./chunk-PKKBYBL4.js";import{CORE_MODULES}from"./chunk-ZZTDEDXJ.js";import{HARDPOINT_MODULES}from"./chunk-P3DGQUID.js";var ALL_MODULES=Object.freeze([...CORE_MODULES,...INTERNAL_MODULES,...HARDPOINT_MODULES,...UTILITY_MODULES]);export{ALL_MODULES};//# sourceMappingURL=chunk-LXHFRBWK.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ships/modules-all.ts"],"names":["CORE_MODULES","HARDPOINT_MODULES","INTERNAL_MODULES","UTILITY_MODULES","ALL_MODULES","Object","freeze"],"mappings":"O,6LAyCO,IAAMI,YAA2CC,OAAOC,OAAO,IAC/DN,gBACAE,oBACAD,qBACAE,yBACNC"}
1
+ {"version":3,"sources":["../src/ships/modules-all.ts"],"names":["INTERNAL_MODULES","UTILITY_MODULES","CORE_MODULES","HARDPOINT_MODULES","ALL_MODULES","Object","freeze"],"mappings":"O,6LAyCO,IAAMI,YAA2CC,OAAOC,OAAO,IAC/DJ,gBACAF,oBACAG,qBACAF,yBACNG"}