@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.
Files changed (357) hide show
  1. package/LICENSE +48 -0
  2. package/PROVENANCE/SNAPSHOTS.md +36 -0
  3. package/PROVENANCE/astro/SOURCES.md +94 -0
  4. package/PROVENANCE/commodities/SOURCES.md +41 -0
  5. package/PROVENANCE/materials/SOURCES.md +69 -0
  6. package/PROVENANCE/ships/SOURCES.md +1580 -0
  7. package/README.md +148 -0
  8. package/THIRD_PARTY_NOTICES.md +202 -0
  9. package/dist/astro/codex-region-lookup.d.ts +169 -0
  10. package/dist/astro/codex-region-lookup.js +1 -0
  11. package/dist/astro/codex-region-lookup.js.map +1 -0
  12. package/dist/astro/codex-region.d.ts +149 -0
  13. package/dist/astro/codex-region.js +1 -0
  14. package/dist/astro/codex-region.js.map +1 -0
  15. package/dist/astro/galaxy-grid.d.ts +83 -0
  16. package/dist/astro/galaxy-grid.js +1 -0
  17. package/dist/astro/galaxy-grid.js.map +1 -0
  18. package/dist/astro/hand-authored-regions.d.ts +121 -0
  19. package/dist/astro/hand-authored-regions.js +1 -0
  20. package/dist/astro/hand-authored-regions.js.map +1 -0
  21. package/dist/astro/index.d.ts +140 -0
  22. package/dist/astro/index.js +1 -0
  23. package/dist/astro/index.js.map +1 -0
  24. package/dist/astro/mass-code.d.ts +55 -0
  25. package/dist/astro/mass-code.js +1 -0
  26. package/dist/astro/mass-code.js.map +1 -0
  27. package/dist/astro/naming-region-origins.d.ts +4 -0
  28. package/dist/astro/naming-region-origins.js +1 -0
  29. package/dist/astro/naming-region-origins.js.map +1 -0
  30. package/dist/astro/nebulae-all.d.ts +40 -0
  31. package/dist/astro/nebulae-all.js +1 -0
  32. package/dist/astro/nebulae-all.js.map +1 -0
  33. package/dist/astro/nebulae-planetary.d.ts +37 -0
  34. package/dist/astro/nebulae-planetary.js +1 -0
  35. package/dist/astro/nebulae-planetary.js.map +1 -0
  36. package/dist/astro/nebulae-procgen.d.ts +36 -0
  37. package/dist/astro/nebulae-procgen.js +1 -0
  38. package/dist/astro/nebulae-procgen.js.map +1 -0
  39. package/dist/astro/nebulae-real.d.ts +37 -0
  40. package/dist/astro/nebulae-real.js +1 -0
  41. package/dist/astro/nebulae-real.js.map +1 -0
  42. package/dist/astro/nebulae.d.ts +169 -0
  43. package/dist/astro/nebulae.js +1 -0
  44. package/dist/astro/nebulae.js.map +1 -0
  45. package/dist/astro/permit-locked-regions.d.ts +54 -0
  46. package/dist/astro/permit-locked-regions.js +1 -0
  47. package/dist/astro/permit-locked-regions.js.map +1 -0
  48. package/dist/astro/permit-locked-systems.d.ts +74 -0
  49. package/dist/astro/permit-locked-systems.js +1 -0
  50. package/dist/astro/permit-locked-systems.js.map +1 -0
  51. package/dist/astro/permit-locks.d.ts +130 -0
  52. package/dist/astro/permit-locks.js +1 -0
  53. package/dist/astro/permit-locks.js.map +1 -0
  54. package/dist/astro/procedural-system.d.ts +228 -0
  55. package/dist/astro/procedural-system.js +1 -0
  56. package/dist/astro/procedural-system.js.map +1 -0
  57. package/dist/astro/sector-name.d.ts +87 -0
  58. package/dist/astro/sector-name.js +1 -0
  59. package/dist/astro/sector-name.js.map +1 -0
  60. package/dist/astro/system-address-input.d.ts +76 -0
  61. package/dist/astro/system-address-input.js +1 -0
  62. package/dist/astro/system-address-input.js.map +1 -0
  63. package/dist/astro/system-address.d.ts +4 -0
  64. package/dist/astro/system-address.js +1 -0
  65. package/dist/astro/system-address.js.map +1 -0
  66. package/dist/astro/system-name.d.ts +187 -0
  67. package/dist/astro/system-name.js +1 -0
  68. package/dist/astro/system-name.js.map +1 -0
  69. package/dist/chunk-2FHHMYDC.js +1 -0
  70. package/dist/chunk-2FHHMYDC.js.map +1 -0
  71. package/dist/chunk-462OKHXR.js +1 -0
  72. package/dist/chunk-462OKHXR.js.map +1 -0
  73. package/dist/chunk-5H74FKY7.js +1 -0
  74. package/dist/chunk-5H74FKY7.js.map +1 -0
  75. package/dist/chunk-6LUEKHO5.js +1 -0
  76. package/dist/chunk-6LUEKHO5.js.map +1 -0
  77. package/dist/chunk-76XKY2Y2.js +1 -0
  78. package/dist/chunk-76XKY2Y2.js.map +1 -0
  79. package/dist/chunk-7EE5VIHR.js +1 -0
  80. package/dist/chunk-7EE5VIHR.js.map +1 -0
  81. package/dist/chunk-A3NM7SAJ.js +1 -0
  82. package/dist/chunk-A3NM7SAJ.js.map +1 -0
  83. package/dist/chunk-A6XPYSVR.js +1 -0
  84. package/dist/chunk-A6XPYSVR.js.map +1 -0
  85. package/dist/chunk-AA3K5XUE.js +1 -0
  86. package/dist/chunk-AA3K5XUE.js.map +1 -0
  87. package/dist/chunk-AVZI6VKA.js +1 -0
  88. package/dist/chunk-AVZI6VKA.js.map +1 -0
  89. package/dist/chunk-B5TT26XE.js +1 -0
  90. package/dist/chunk-B5TT26XE.js.map +1 -0
  91. package/dist/chunk-BNILZXJD.js +1 -0
  92. package/dist/chunk-BNILZXJD.js.map +1 -0
  93. package/dist/chunk-BRDQUJXV.js +1 -0
  94. package/dist/chunk-BRDQUJXV.js.map +1 -0
  95. package/dist/chunk-BTPV5CIF.js +1 -0
  96. package/dist/chunk-BTPV5CIF.js.map +1 -0
  97. package/dist/chunk-CI3ACMRA.js +1 -0
  98. package/dist/chunk-CI3ACMRA.js.map +1 -0
  99. package/dist/chunk-COE5ADYJ.js +1 -0
  100. package/dist/chunk-COE5ADYJ.js.map +1 -0
  101. package/dist/chunk-CWAX3BSH.js +1 -0
  102. package/dist/chunk-CWAX3BSH.js.map +1 -0
  103. package/dist/chunk-DACZE3HX.js +1 -0
  104. package/dist/chunk-DACZE3HX.js.map +1 -0
  105. package/dist/chunk-DURKO7JU.js +1 -0
  106. package/dist/chunk-DURKO7JU.js.map +1 -0
  107. package/dist/chunk-E45EDCYH.js +1 -0
  108. package/dist/chunk-E45EDCYH.js.map +1 -0
  109. package/dist/chunk-ELIZXUMI.js +1 -0
  110. package/dist/chunk-ELIZXUMI.js.map +1 -0
  111. package/dist/chunk-EYGVDJ2I.js +1 -0
  112. package/dist/chunk-EYGVDJ2I.js.map +1 -0
  113. package/dist/chunk-FGXWVFN6.js +1 -0
  114. package/dist/chunk-FGXWVFN6.js.map +1 -0
  115. package/dist/chunk-GJCB2Z72.js +1 -0
  116. package/dist/chunk-GJCB2Z72.js.map +1 -0
  117. package/dist/chunk-HI7FCS3G.js +1 -0
  118. package/dist/chunk-HI7FCS3G.js.map +1 -0
  119. package/dist/chunk-HKXXFIRI.js +1 -0
  120. package/dist/chunk-HKXXFIRI.js.map +1 -0
  121. package/dist/chunk-HTB52N6S.js +1 -0
  122. package/dist/chunk-HTB52N6S.js.map +1 -0
  123. package/dist/chunk-I7PIDRMU.js +1 -0
  124. package/dist/chunk-I7PIDRMU.js.map +1 -0
  125. package/dist/chunk-IH4NXKVW.js +1 -0
  126. package/dist/chunk-IH4NXKVW.js.map +1 -0
  127. package/dist/chunk-INNFH37U.js +1 -0
  128. package/dist/chunk-INNFH37U.js.map +1 -0
  129. package/dist/chunk-J2PNZQY4.js +1 -0
  130. package/dist/chunk-J2PNZQY4.js.map +1 -0
  131. package/dist/chunk-JQG4C67D.js +1 -0
  132. package/dist/chunk-JQG4C67D.js.map +1 -0
  133. package/dist/chunk-JTQVWIGL.js +1 -0
  134. package/dist/chunk-JTQVWIGL.js.map +1 -0
  135. package/dist/chunk-JWJ7RSZC.js +1 -0
  136. package/dist/chunk-JWJ7RSZC.js.map +1 -0
  137. package/dist/chunk-K3AMV27L.js +1 -0
  138. package/dist/chunk-K3AMV27L.js.map +1 -0
  139. package/dist/chunk-K7F6WC4T.js +1 -0
  140. package/dist/chunk-K7F6WC4T.js.map +1 -0
  141. package/dist/chunk-K7L7SMIR.js +1 -0
  142. package/dist/chunk-K7L7SMIR.js.map +1 -0
  143. package/dist/chunk-KG4EWDZZ.js +1 -0
  144. package/dist/chunk-KG4EWDZZ.js.map +1 -0
  145. package/dist/chunk-KMFUCORC.js +1 -0
  146. package/dist/chunk-KMFUCORC.js.map +1 -0
  147. package/dist/chunk-L2ZZXEZM.js +1 -0
  148. package/dist/chunk-L2ZZXEZM.js.map +1 -0
  149. package/dist/chunk-L747RVPO.js +1 -0
  150. package/dist/chunk-L747RVPO.js.map +1 -0
  151. package/dist/chunk-MFV4VZFP.js +1 -0
  152. package/dist/chunk-MFV4VZFP.js.map +1 -0
  153. package/dist/chunk-NWPK6Q3S.js +1 -0
  154. package/dist/chunk-NWPK6Q3S.js.map +1 -0
  155. package/dist/chunk-PMJG7PHU.js +1 -0
  156. package/dist/chunk-PMJG7PHU.js.map +1 -0
  157. package/dist/chunk-PP2VSA6M.js +1 -0
  158. package/dist/chunk-PP2VSA6M.js.map +1 -0
  159. package/dist/chunk-Q22LXT53.js +1 -0
  160. package/dist/chunk-Q22LXT53.js.map +1 -0
  161. package/dist/chunk-Q5MR36RW.js +1 -0
  162. package/dist/chunk-Q5MR36RW.js.map +1 -0
  163. package/dist/chunk-Q5XOGATC.js +1 -0
  164. package/dist/chunk-Q5XOGATC.js.map +1 -0
  165. package/dist/chunk-QTDBO7R2.js +1 -0
  166. package/dist/chunk-QTDBO7R2.js.map +1 -0
  167. package/dist/chunk-R4OD62HV.js +1 -0
  168. package/dist/chunk-R4OD62HV.js.map +1 -0
  169. package/dist/chunk-RD73TFGS.js +1 -0
  170. package/dist/chunk-RD73TFGS.js.map +1 -0
  171. package/dist/chunk-RIT6MOO5.js +1 -0
  172. package/dist/chunk-RIT6MOO5.js.map +1 -0
  173. package/dist/chunk-RVSXKQHE.js +1 -0
  174. package/dist/chunk-RVSXKQHE.js.map +1 -0
  175. package/dist/chunk-S4DBNX2B.js +1 -0
  176. package/dist/chunk-S4DBNX2B.js.map +1 -0
  177. package/dist/chunk-S4UWCHL6.js +1 -0
  178. package/dist/chunk-S4UWCHL6.js.map +1 -0
  179. package/dist/chunk-SQS7672E.js +1 -0
  180. package/dist/chunk-SQS7672E.js.map +1 -0
  181. package/dist/chunk-TLNHETGC.js +1 -0
  182. package/dist/chunk-TLNHETGC.js.map +1 -0
  183. package/dist/chunk-U6TMCYA6.js +1 -0
  184. package/dist/chunk-U6TMCYA6.js.map +1 -0
  185. package/dist/chunk-V4C6FIE2.js +1 -0
  186. package/dist/chunk-V4C6FIE2.js.map +1 -0
  187. package/dist/chunk-VXVUEF5U.js +1 -0
  188. package/dist/chunk-VXVUEF5U.js.map +1 -0
  189. package/dist/chunk-VZXL5KBR.js +1 -0
  190. package/dist/chunk-VZXL5KBR.js.map +1 -0
  191. package/dist/chunk-VZZ2XIRE.js +1 -0
  192. package/dist/chunk-VZZ2XIRE.js.map +1 -0
  193. package/dist/chunk-WV5YM7H5.js +1 -0
  194. package/dist/chunk-WV5YM7H5.js.map +1 -0
  195. package/dist/chunk-Y2MUIE5W.js +1 -0
  196. package/dist/chunk-Y2MUIE5W.js.map +1 -0
  197. package/dist/chunk-Z43DN4PY.js +1 -0
  198. package/dist/chunk-Z43DN4PY.js.map +1 -0
  199. package/dist/chunk-Z4GTTB7I.js +1 -0
  200. package/dist/chunk-Z4GTTB7I.js.map +1 -0
  201. package/dist/chunk-Z4OUB4SJ.js +1 -0
  202. package/dist/chunk-Z4OUB4SJ.js.map +1 -0
  203. package/dist/chunk-ZFT56QFR.js +1 -0
  204. package/dist/chunk-ZFT56QFR.js.map +1 -0
  205. package/dist/chunk-ZNCXENNB.js +1 -0
  206. package/dist/chunk-ZNCXENNB.js.map +1 -0
  207. package/dist/commodities/commodities-all.d.ts +25 -0
  208. package/dist/commodities/commodities-all.js +1 -0
  209. package/dist/commodities/commodities-all.js.map +1 -0
  210. package/dist/commodities/commodities-rare.d.ts +34 -0
  211. package/dist/commodities/commodities-rare.js +1 -0
  212. package/dist/commodities/commodities-rare.js.map +1 -0
  213. package/dist/commodities/commodities-standard.d.ts +34 -0
  214. package/dist/commodities/commodities-standard.js +1 -0
  215. package/dist/commodities/commodities-standard.js.map +1 -0
  216. package/dist/commodities/commodities.d.ts +142 -0
  217. package/dist/commodities/commodities.js +1 -0
  218. package/dist/commodities/commodities.js.map +1 -0
  219. package/dist/commodities/index.d.ts +30 -0
  220. package/dist/commodities/index.js +1 -0
  221. package/dist/commodities/index.js.map +1 -0
  222. package/dist/galactic-position-shLkm4Qg.d.ts +30 -0
  223. package/dist/materials/index.d.ts +47 -0
  224. package/dist/materials/index.js +1 -0
  225. package/dist/materials/index.js.map +1 -0
  226. package/dist/materials/materials-all.d.ts +26 -0
  227. package/dist/materials/materials-all.js +1 -0
  228. package/dist/materials/materials-all.js.map +1 -0
  229. package/dist/materials/materials-encoded.d.ts +31 -0
  230. package/dist/materials/materials-encoded.js +1 -0
  231. package/dist/materials/materials-encoded.js.map +1 -0
  232. package/dist/materials/materials-manufactured.d.ts +32 -0
  233. package/dist/materials/materials-manufactured.js +1 -0
  234. package/dist/materials/materials-manufactured.js.map +1 -0
  235. package/dist/materials/materials-raw.d.ts +31 -0
  236. package/dist/materials/materials-raw.js +1 -0
  237. package/dist/materials/materials-raw.js.map +1 -0
  238. package/dist/materials/materials.d.ts +277 -0
  239. package/dist/materials/materials.js +1 -0
  240. package/dist/materials/materials.js.map +1 -0
  241. package/dist/materials/micro-resources-all.d.ts +28 -0
  242. package/dist/materials/micro-resources-all.js +1 -0
  243. package/dist/materials/micro-resources-all.js.map +1 -0
  244. package/dist/materials/micro-resources-component.d.ts +29 -0
  245. package/dist/materials/micro-resources-component.js +1 -0
  246. package/dist/materials/micro-resources-component.js.map +1 -0
  247. package/dist/materials/micro-resources-consumable.d.ts +29 -0
  248. package/dist/materials/micro-resources-consumable.js +1 -0
  249. package/dist/materials/micro-resources-consumable.js.map +1 -0
  250. package/dist/materials/micro-resources-data.d.ts +29 -0
  251. package/dist/materials/micro-resources-data.js +1 -0
  252. package/dist/materials/micro-resources-data.js.map +1 -0
  253. package/dist/materials/micro-resources-item.d.ts +29 -0
  254. package/dist/materials/micro-resources-item.js +1 -0
  255. package/dist/materials/micro-resources-item.js.map +1 -0
  256. package/dist/materials/micro-resources.d.ts +136 -0
  257. package/dist/materials/micro-resources.js +1 -0
  258. package/dist/materials/micro-resources.js.map +1 -0
  259. package/dist/ship-loadout-Ba63RDf-.d.ts +1059 -0
  260. package/dist/ships/ammunition.d.ts +107 -0
  261. package/dist/ships/ammunition.js +1 -0
  262. package/dist/ships/ammunition.js.map +1 -0
  263. package/dist/ships/armour.d.ts +134 -0
  264. package/dist/ships/armour.js +1 -0
  265. package/dist/ships/armour.js.map +1 -0
  266. package/dist/ships/blueprint-costs.d.ts +128 -0
  267. package/dist/ships/blueprint-costs.js +1 -0
  268. package/dist/ships/blueprint-costs.js.map +1 -0
  269. package/dist/ships/blueprint-journal.d.ts +116 -0
  270. package/dist/ships/blueprint-journal.js +1 -0
  271. package/dist/ships/blueprint-journal.js.map +1 -0
  272. package/dist/ships/blueprints.d.ts +103 -0
  273. package/dist/ships/blueprints.js +1 -0
  274. package/dist/ships/blueprints.js.map +1 -0
  275. package/dist/ships/decorative-modifications.d.ts +176 -0
  276. package/dist/ships/decorative-modifications.js +1 -0
  277. package/dist/ships/decorative-modifications.js.map +1 -0
  278. package/dist/ships/engineering-options.d.ts +246 -0
  279. package/dist/ships/engineering-options.js +1 -0
  280. package/dist/ships/engineering-options.js.map +1 -0
  281. package/dist/ships/engineering.d.ts +229 -0
  282. package/dist/ships/engineering.js +1 -0
  283. package/dist/ships/engineering.js.map +1 -0
  284. package/dist/ships/experimental-effect-costs.d.ts +56 -0
  285. package/dist/ships/experimental-effect-costs.js +1 -0
  286. package/dist/ships/experimental-effect-costs.js.map +1 -0
  287. package/dist/ships/experimental-effects.d.ts +62 -0
  288. package/dist/ships/experimental-effects.js +1 -0
  289. package/dist/ships/experimental-effects.js.map +1 -0
  290. package/dist/ships/index.d.ts +205 -0
  291. package/dist/ships/index.js +1 -0
  292. package/dist/ships/index.js.map +1 -0
  293. package/dist/ships/jump-range.d.ts +115 -0
  294. package/dist/ships/jump-range.js +1 -0
  295. package/dist/ships/jump-range.js.map +1 -0
  296. package/dist/ships/loadout-calculations.d.ts +109 -0
  297. package/dist/ships/loadout-calculations.js +1 -0
  298. package/dist/ships/loadout-calculations.js.map +1 -0
  299. package/dist/ships/loadout-validation.d.ts +80 -0
  300. package/dist/ships/loadout-validation.js +1 -0
  301. package/dist/ships/loadout-validation.js.map +1 -0
  302. package/dist/ships/module-capabilities.d.ts +205 -0
  303. package/dist/ships/module-capabilities.js +1 -0
  304. package/dist/ships/module-capabilities.js.map +1 -0
  305. package/dist/ships/modules-all.d.ts +43 -0
  306. package/dist/ships/modules-all.js +1 -0
  307. package/dist/ships/modules-all.js.map +1 -0
  308. package/dist/ships/modules-core.d.ts +40 -0
  309. package/dist/ships/modules-core.js +1 -0
  310. package/dist/ships/modules-core.js.map +1 -0
  311. package/dist/ships/modules-hardpoint.d.ts +42 -0
  312. package/dist/ships/modules-hardpoint.js +1 -0
  313. package/dist/ships/modules-hardpoint.js.map +1 -0
  314. package/dist/ships/modules-internal.d.ts +40 -0
  315. package/dist/ships/modules-internal.js +1 -0
  316. package/dist/ships/modules-internal.js.map +1 -0
  317. package/dist/ships/modules-utility.d.ts +40 -0
  318. package/dist/ships/modules-utility.js +1 -0
  319. package/dist/ships/modules-utility.js.map +1 -0
  320. package/dist/ships/modules.d.ts +755 -0
  321. package/dist/ships/modules.js +1 -0
  322. package/dist/ships/modules.js.map +1 -0
  323. package/dist/ships/power.d.ts +168 -0
  324. package/dist/ships/power.js +1 -0
  325. package/dist/ships/power.js.map +1 -0
  326. package/dist/ships/pre-engineered-stats.d.ts +147 -0
  327. package/dist/ships/pre-engineered-stats.js +1 -0
  328. package/dist/ships/pre-engineered-stats.js.map +1 -0
  329. package/dist/ships/pre-engineered.d.ts +215 -0
  330. package/dist/ships/pre-engineered.js +1 -0
  331. package/dist/ships/pre-engineered.js.map +1 -0
  332. package/dist/ships/resistances.d.ts +208 -0
  333. package/dist/ships/resistances.js +1 -0
  334. package/dist/ships/resistances.js.map +1 -0
  335. package/dist/ships/shields.d.ts +221 -0
  336. package/dist/ships/shields.js +1 -0
  337. package/dist/ships/shields.js.map +1 -0
  338. package/dist/ships/ship-loadout.d.ts +16 -0
  339. package/dist/ships/ship-loadout.js +1 -0
  340. package/dist/ships/ship-loadout.js.map +1 -0
  341. package/dist/ships/ships.d.ts +191 -0
  342. package/dist/ships/ships.js +1 -0
  343. package/dist/ships/ships.js.map +1 -0
  344. package/dist/ships/slef.d.ts +318 -0
  345. package/dist/ships/slef.js +1 -0
  346. package/dist/ships/slef.js.map +1 -0
  347. package/dist/ships/slots.d.ts +418 -0
  348. package/dist/ships/slots.js +1 -0
  349. package/dist/ships/slots.js.map +1 -0
  350. package/dist/ships/source-purchase.d.ts +132 -0
  351. package/dist/ships/source-purchase.js +1 -0
  352. package/dist/ships/source-purchase.js.map +1 -0
  353. package/dist/ships/weapons.d.ts +380 -0
  354. package/dist/ships/weapons.js +1 -0
  355. package/dist/ships/weapons.js.map +1 -0
  356. package/dist/system-address-DYsN1qOT.d.ts +313 -0
  357. package/package.json +375 -0
@@ -0,0 +1,246 @@
1
+ /**
2
+ * **Engineering options** — which blueprints and which experimental effects a given
3
+ * module can actually take.
4
+ *
5
+ * Availability is a property of the **module**, not of the blueprint. A Pulse Laser
6
+ * accepts the Efficient blueprint and a Rail Gun does not, and the two offer different
7
+ * experimental effects even where their blueprints overlap; asking "what can I put on
8
+ * this module?" is the question the game actually answers. So modules are grouped, and
9
+ * each group lists what it offers.
10
+ *
11
+ * The catalogue groups 1028 of the 1199 modules — every module upstream allows a recipe
12
+ * on. The other 171 take no engineering: whole families (fuel tanks, passenger cabins,
13
+ * the repair, recon, research, decontamination and multi-limpet controllers, meta-alloy
14
+ * and ordinary module reinforcement, the Pulse Wave Analyser, the mining launchers, Shock
15
+ * Cannons, Nanite Torpedo Pylons, fighter and vehicle hangars, docking computers and
16
+ * Supercruise Assist, the module stabilisers, the planetary approach suites, the cargo
17
+ * hatch and the AX utility modules), plus the individual
18
+ * modules upstream denies every blueprint — every anti-xeno multi-cannon but the two
19
+ * gimballed, both Enhanced anti-xeno missile racks and every turreted plain one, five of
20
+ * the seven mining tools, the remote-release launchers and the Mk II Plasma Shock
21
+ * Accelerator.
22
+ *
23
+ * **A group is one menu.** Where the same kind of module comes in two flavours with
24
+ * different menus, they are two groups: a Guardian Power Plant takes only Anti-Guardian
25
+ * Zone Resistance and an ordinary one takes only the ordinary recipes, so `powerPlants`
26
+ * and `guardianPowerPlants` are separate — likewise the distributors and the hull
27
+ * reinforcement packages. The Guardian half of each pair takes **no experimental effect**:
28
+ * Anti-Guardian Zone Resistance is the whole menu, and it has no experimental slot. The
29
+ * other Guardian module families — FSD boosters, module and shield reinforcement — are the
30
+ * same. There are no pre-engineered Guardian module reward variants. Guardian **weapons**
31
+ * are different: their menus are that one recipe too, but an ordinary weapon recipe on a
32
+ * Guardian weapon identifies a final purchase rather than an engineer roll —
33
+ * `ships/pre-engineered` carries those, and they accept no further engineering.
34
+ *
35
+ * It has its own module and data file so a consumer who only reads menus pays for
36
+ * nothing else.
37
+ * Everything returned joins straight to `BLUEPRINTS` and `EXPERIMENTAL_EFFECTS`, neither
38
+ * of which this module pulls in. That is why reading a journal `BlueprintName` against a
39
+ * module — `resolveBlueprintForModule`, which needs a menu and the small journal-collision
40
+ * catalogue — lives in `ships/blueprint-journal` rather than here.
41
+ *
42
+ * **This catalogue is also the gate.** {@link ShipLoadout.applyBlueprint} refuses a recipe
43
+ * this module does not offer for that module, so "what can I put on this?" and "may I put
44
+ * this on it?" cannot answer differently — they read the same menu. A `ShipLoadout`
45
+ * therefore carries this module's weight whether or not the consumer calls it. This is a
46
+ * deliberate tradeoff: the editor and the menu use one catalogue, so their answers cannot
47
+ * drift. The gate makes three accommodations beyond the menu, in the
48
+ * order it applies them: a journal id
49
+ * the game writes for two different recipes, which `ships/blueprint-journal` settles by
50
+ * reading this menu against the journal-collision catalogue; an Operations key belonging to a
51
+ * non-final module sold already engineered, which no menu lists, and
52
+ * `ships/pre-engineered` resolves per module; and a build that spells a modification
53
+ * generically — `Misc_LightWeight` where the menu lists `LifeSupport_LightWeight`, which
54
+ * {@link getBlueprintsForModule} describes.
55
+ *
56
+ * @packageDocumentation
57
+ */
58
+ /**
59
+ * A stable identifier for an engineerable module's gameplay family.
60
+ *
61
+ * @remarks
62
+ * These are the keys of {@link ENGINEERING_OPTION_GROUPS}. They are more precise than
63
+ * an outfitting category: a category says which store tab a module appears under, while
64
+ * an engineering-group id identifies the family whose stats and engineering menu it
65
+ * shares. Guardian variants use separate ids when their menus differ.
66
+ *
67
+ * An outfitting module with no published engineering family carries
68
+ * `engineeringGroup: null`; do not infer a group from its symbol. This explicit absence
69
+ * distinguishes an unclassified module from an unknown id.
70
+ *
71
+ * @example
72
+ * ```ts
73
+ * import type { EngineeringGroupId } from '@elite-dangerous-almanac/core/ships/engineering-options';
74
+ *
75
+ * const family: EngineeringGroupId = 'frameShiftDrives';
76
+ * ```
77
+ */
78
+ type EngineeringGroupId = 'powerPlants' | 'guardianPowerPlants' | 'thrusters' | 'frameShiftDrives' | 'powerDistributors' | 'guardianPowerDistributors' | 'frameShiftDrivesSCO' | 'shieldGenerators' | 'shieldCellBanks' | 'hullReinforcements' | 'guardianHullReinforcements' | 'pulseLasers' | 'burstLasers' | 'beamLasers' | 'cannons' | 'fragmentCannons' | 'multiCannons' | 'plasmaAccelerators' | 'railGuns' | 'missiles' | 'mines' | 'torpedoes' | 'miningToolsLasers' | 'antiXenoMultiCannons' | 'shieldBoosters' | 'bulkheads' | 'lifeSupports' | 'sensors' | 'autoFieldMaintenanceUnits' | 'cargoRacks' | 'collectionLimpets' | 'fsdBoosters' | 'fsdInterdictors' | 'fuelScoops' | 'fuelTransferLimpets' | 'hatchBreakerLimpets' | 'moduleReinforcements' | 'prospectingLimpets' | 'refineries' | 'shieldReinforcements' | 'surfaceScanners' | 'chaffLaunchers' | 'ecms' | 'heatSinkLaunchers' | 'killWarrantScanners' | 'manifestScanners' | 'pointDefence' | 'wakeScanners' | 'experimentalWeapons' | 'antiXenoMissileRacks' | 'guardianGauss' | 'guardianPlasma' | 'guardianShard';
79
+ /** What one group of modules can be engineered with. */
80
+ interface EngineeringOptionGroup {
81
+ /** Display name of the module group, e.g. `"Beam Lasers"`. */
82
+ readonly name: string;
83
+ /** Blueprint ids the group accepts. Join to `BLUEPRINTS`. */
84
+ readonly blueprints: readonly string[];
85
+ /** Experimental-effect ids the group accepts. Join to `EXPERIMENTAL_EFFECTS`. */
86
+ readonly experimentals: readonly string[];
87
+ }
88
+ /**
89
+ * Every module group that can be engineered, keyed by a stable group id
90
+ * (e.g. `"beamLasers"`, `"powerDistributors"`).
91
+ *
92
+ * @example
93
+ * ```ts
94
+ * import { ENGINEERING_OPTION_GROUPS } from '@elite-dangerous-almanac/core/ships/engineering-options';
95
+ *
96
+ * ENGINEERING_OPTION_GROUPS['beamLasers'].name; // -> 'Beam Lasers'
97
+ * ENGINEERING_OPTION_GROUPS['beamLasers'].experimentals.length; // -> 9
98
+ * ```
99
+ */
100
+ declare const ENGINEERING_OPTION_GROUPS: Readonly<Record<EngineeringGroupId, EngineeringOptionGroup>>;
101
+ /**
102
+ * The group id a module is engineered as, or `null` when this catalogue does not group
103
+ * it.
104
+ *
105
+ * `null` means **"no source gives this module a recipe"**, which for the 171 ungrouped
106
+ * modules is the same as "cannot be engineered" — the families and the individually
107
+ * denied modules listed in the module overview above. This is the catalogue's answer,
108
+ * not a claim that the game forbids engineering. The build corpus contains one contrary
109
+ * case: the Mk II Plasma Shock Accelerator is denied every blueprint upstream but appears
110
+ * engineered on both large hardpoints of a community build.
111
+ *
112
+ * @param symbol - A module symbol, e.g. `"Hpt_BeamLaser_Fixed_Small"`.
113
+ * @returns The group id, or `null` when the module is not in the catalogue.
114
+ *
115
+ * @throws {TypeError} If `symbol` is present and not a string. A nullish
116
+ * `symbol` is a miss, answered the way an unrecognised one is.
117
+ * @example
118
+ * ```ts
119
+ * import { getEngineeringGroup } from '@elite-dangerous-almanac/core/ships/engineering-options';
120
+ *
121
+ * getEngineeringGroup('Hpt_BeamLaser_Fixed_Small'); // -> 'beamLasers'
122
+ * getEngineeringGroup('Int_CargoRack_Size2_Class1'); // -> 'cargoRacks'
123
+ *
124
+ * // Not listed — no registry gives a fuel tank a blueprint.
125
+ * getEngineeringGroup('Int_FuelTank_Size3_Class3'); // -> null
126
+ * ```
127
+ */
128
+ declare function getEngineeringGroup(symbol: string): EngineeringGroupId | null;
129
+ /**
130
+ * Every blueprint a module can be engineered with.
131
+ *
132
+ * Matching is case-insensitive and trims whitespace. A module this catalogue does not
133
+ * group yields an empty array, never `null`, so the result is always safe to iterate —
134
+ * see {@link getEngineeringGroup} for what an empty answer claims.
135
+ *
136
+ * **One recipe, two journal ids.** Where a modification applies to several module
137
+ * families the game writes a family-specific `BlueprintName`, and `BLUEPRINTS` carries
138
+ * both that and the generic spelling — a life support's Lightweight is
139
+ * `LifeSupport_LightWeight` here and `Misc_LightWeight` in an EDSY-authored build. The
140
+ * family-specific id is the one listed, so compare ids with that in mind: the two are the
141
+ * same recipe. `Sensor_LongRange` and `Scanner_LongRange` are **not** such a pair — those
142
+ * are two different recipes rolling different stats, and the utility scanners list the
143
+ * `Scanner_*` ones where the sensor suites list the `Sensor_*` ones. The game writes
144
+ * `Sensor_LongRange` for both all the same, so a journal id has to be read against the
145
+ * module it sits on: `resolveBlueprintForModule` in `ships/blueprint-journal` is that
146
+ * lookup. `MC_Overcharged` is the third of that kind and the one most consumers will meet:
147
+ * the multi-cannon menus — ordinary and anti-xeno — list it rather than the
148
+ * `Weapon_Overcharged` every other weapon menu lists, because a multi-cannon's Overcharged
149
+ * also cuts the clip by 3–15% — and the game writes `Weapon_Overcharged` for both.
150
+ *
151
+ * Anti-Guardian Zone Resistance is neither: the game writes `GuardianModule_Sturdy` — on
152
+ * Guardian weapons as well as modules — every group here lists that id, and `BLUEPRINTS`
153
+ * keys the recipe under it alone.
154
+ *
155
+ * @param symbol - A module symbol.
156
+ * @returns Blueprint ids, sorted. Join to `BLUEPRINTS`.
157
+ *
158
+ * @throws {TypeError} If `symbol` is present and not a string. A nullish
159
+ * `symbol` is a miss, answered the way an unrecognised one is.
160
+ * @example
161
+ * ```ts
162
+ * import { getBlueprintsForModule } from '@elite-dangerous-almanac/core/ships/engineering-options';
163
+ *
164
+ * getBlueprintsForModule('Hpt_BeamLaser_Fixed_Small');
165
+ * // -> ['BeamLaser_ThermalPlasmaConversion', 'Weapon_Efficient', 'Weapon_LightWeight', ...]
166
+ *
167
+ * getBlueprintsForModule('Int_LifeSupport_Size4_Class2');
168
+ * // -> ['LifeSupport_LightWeight', 'LifeSupport_Reinforced', 'LifeSupport_Shielded']
169
+ * ```
170
+ */
171
+ declare function getBlueprintsForModule(symbol: string): readonly string[];
172
+ /**
173
+ * Every experimental effect a module can take — its group's list, minus the effects
174
+ * that particular module is excluded from.
175
+ *
176
+ * Most modules take their whole group's list, but 24 are exceptions: 13 Multi-cannons
177
+ * cannot take Phasing Sequence, six dumbfire racks cannot take Drag Munitions, four
178
+ * missile racks are short of Penetrator Munitions or FSD Interrupt, and the small fixed
179
+ * Abrasion Blaster takes blueprints but no experimental at all. Those are applied here,
180
+ * so the result is the exact set for this module.
181
+ *
182
+ * **An empty array is the common answer, and it usually means "blueprints only".** 388
183
+ * of the 1028 grouped modules have no experimental slot: 387 sit in the 30 of 53 groups
184
+ * that offer none — life support, sensors, the limpet controllers, the utility scanners,
185
+ * and every Guardian group, weapons and modules alike — and the Abrasion Blaster is
186
+ * excluded from its group's only effect. An ungrouped module answers empty too;
187
+ * {@link getEngineeringGroup} tells the two apart: it is `null` only for that one.
188
+ *
189
+ * @param symbol - A module symbol.
190
+ * @returns Experimental-effect ids. Join to `EXPERIMENTAL_EFFECTS`.
191
+ *
192
+ * @throws {TypeError} If `symbol` is present and not a string. A nullish
193
+ * `symbol` is a miss, answered the way an unrecognised one is.
194
+ * @example
195
+ * ```ts
196
+ * import { getExperimentalsForModule } from '@elite-dangerous-almanac/core/ships/engineering-options';
197
+ *
198
+ * getExperimentalsForModule('Hpt_MultiCannon_Fixed_Medium').length; // -> 12
199
+ *
200
+ * // The small Multi-cannon is one effect short — no Phasing Sequence.
201
+ * getExperimentalsForModule('Hpt_MultiCannon_Fixed_Small').length; // -> 11
202
+ *
203
+ * // Grouped, so it has blueprints — but it takes no experimental.
204
+ * getExperimentalsForModule('Hpt_Mining_AbrBlstr_Fixed_Small'); // -> []
205
+ * ```
206
+ */
207
+ declare function getExperimentalsForModule(symbol: string): readonly string[];
208
+ /**
209
+ * Every experimental effect that can be paired with a blueprint, across all the module
210
+ * groups that accept it.
211
+ *
212
+ * Because availability is per module, this is the **union**: engineering a Rail Gun with
213
+ * `Weapon_LongRange` does not offer every effect listed here, only its own group's. Use
214
+ * {@link getExperimentalsForModule} once you know the module — that is the exact answer.
215
+ *
216
+ * The groups name 86 of the 107 blueprints in `BLUEPRINTS`, and the other 21 are all
217
+ * accounted for: they are the Operations keys of modules sold already engineered rather
218
+ * than offered in a menu (see `ships/pre-engineered`). All 21 answer `[]` here exactly
219
+ * as an unknown id would, so read this function's empty answer with
220
+ * {@link getExperimentalsForModule} rather than as a claim about the recipe.
221
+ *
222
+ * Four Operations keys **are** named by a group, because they are recipes a player applies
223
+ * rather than a purchase: the Merc-Coin blueprints published with a full grade 1–5,
224
+ * `FuelScoop_Efficiency` and the three lasers' `PulseLaser_ThermalPlasmaConversion`,
225
+ * `BurstLaser_ThermalPlasmaConversion` and
226
+ * `BeamLaser_ThermalPlasmaConversion`. Anti-Guardian Zone Resistance answers `[]`, and there
227
+ * that is the exact answer rather
228
+ * than a miss: it has no experimental slot, on any of the nine groups that offer it.
229
+ *
230
+ * @param fdname - A blueprint recipe `fdname`, e.g. `"Weapon_Efficient"`.
231
+ * @returns Experimental-effect ids, sorted and de-duplicated; empty when no group names
232
+ * the blueprint, or when its groups take no experimental.
233
+ *
234
+ * @throws {TypeError} If `fdname` is present and not a string. A nullish
235
+ * `fdname` is a miss, answered the way an unrecognised one is.
236
+ * @example
237
+ * ```ts
238
+ * import { getExperimentalsForBlueprint } from '@elite-dangerous-almanac/core/ships/engineering-options';
239
+ *
240
+ * getExperimentalsForBlueprint('FSD_LongRange');
241
+ * // -> ['special_fsd_cooled', 'special_fsd_fuelcapacity', 'special_fsd_heavy', ...]
242
+ * ```
243
+ */
244
+ declare function getExperimentalsForBlueprint(fdname: string): readonly string[];
245
+
246
+ export { ENGINEERING_OPTION_GROUPS, type EngineeringGroupId, type EngineeringOptionGroup, getBlueprintsForModule, getEngineeringGroup, getExperimentalsForBlueprint, getExperimentalsForModule };
@@ -0,0 +1 @@
1
+ export{ENGINEERING_OPTION_GROUPS,getBlueprintsForModule,getEngineeringGroup,getExperimentalsForBlueprint,getExperimentalsForModule}from"../chunk-BNILZXJD.js"; //# sourceMappingURL=engineering-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"O"}
@@ -0,0 +1,229 @@
1
+ import { EngineeringModifier } from './slef.js';
2
+ import { DamageDistribution } from './modules.js';
3
+ import './engineering-options.js';
4
+ import './slots.js';
5
+
6
+ /**
7
+ * The **engineering calculator** — data-free maths that turns a blueprint (grade +
8
+ * quality) and an optional experimental effect into journal-style stat modifiers.
9
+ *
10
+ * A blueprint feature bounds a modifier by the engineering **quality** roll
11
+ * (`v = min + (max − min) · quality`); an experimental effect adds a fixed
12
+ * contribution. Each contribution names a journal Modifier **Label** and an apply
13
+ * **method**, and {@link computeModifiers} folds every contribution to a Label onto a
14
+ * base value:
15
+ *
16
+ * - `multiplicative` — `final = base · Π(1 + v)` (percentage modifiers compound)
17
+ * - `additive` — `final = base + Σ v` (flat reinforcement)
18
+ * - `overwrite` — `final = v` (the value replaces the base)
19
+ *
20
+ * A capability-granting label is the non-numeric exception: Anti-Guardian Zone
21
+ * Resistance produces `{ Label: 'GuardianModuleResistance', ValueStr: 'Active' }` and
22
+ * effective module stats expose the granted boolean. Its source's displayed `+100%` is
23
+ * not folded as a number.
24
+ *
25
+ * A handful of stats are **percentages of a multiplier** and compound on that
26
+ * multiplier instead, whichever method the recipe names: hull boost and shield boost on
27
+ * `1 + v`, and the four resistances on their damage multiplier `1 − v`. That is why a
28
+ * `+80%` bulkhead engineered by a `+32%` blueprint reads `137.6%` and not `105.6%`, and
29
+ * why a `−20%` kinetic resistance with `+5%` becomes `−14%`.
30
+ *
31
+ * @remarks
32
+ * Every feature names the stat it actually changes. Frontier's own Rapid Fire and High
33
+ * Capacity recipes shorten the **fire interval** (`BurstInterval`) rather than raising
34
+ * the rate of fire, so that is the label they carry; a weapon's combined `rateOfFire`
35
+ * follows from the interval and the burst pattern via `combinedRateOfFire` in
36
+ * `./weapons`. `ShipLoadout` and `getPreEngineeredStats` recompute it for you.
37
+ *
38
+ * The catalogues live in `./blueprints` and `./experimental-effects`; this module
39
+ * holds no data. It is what {@link ShipLoadout.applyBlueprint} uses under the hood.
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * import { computeModifiers } from '@elite-dangerous-almanac/core/ships/engineering';
44
+ * import { getBlueprintGrade } from '@elite-dangerous-almanac/core/ships/blueprints';
45
+ * import { getExperimentalEffect } from '@elite-dangerous-almanac/core/ships/experimental-effects';
46
+ *
47
+ * const mods = computeModifiers(
48
+ * { FSDOptimalMass: 4670 },
49
+ * getBlueprintGrade('FSD_LongRange', 5)!,
50
+ * 1,
51
+ * getExperimentalEffect('special_fsd_heavy')!,
52
+ * );
53
+ * // -> [{ Label: 'FSDOptimalMass', Value: 7528.04, OriginalValue: 4670 }]
54
+ * ```
55
+ *
56
+ * @packageDocumentation
57
+ */
58
+
59
+ /** How a modifier value is applied to a base stat. */
60
+ type ModifierMethod = 'multiplicative' | 'additive' | 'overwrite';
61
+ /** One stat a blueprint grade modifies, bounded by the quality roll. */
62
+ interface BlueprintFeature {
63
+ /**
64
+ * The Modifier Label the stat is known by, e.g. `"FSDOptimalMass"`, `"Mass"`.
65
+ *
66
+ * @remarks
67
+ * These are the journal's own labels, with one deliberate exception: the recipes
68
+ * that shorten a weapon's fire interval carry `"BurstInterval"`, the stat they
69
+ * change, where a journal reports the resulting `"RateOfFire"` instead. See
70
+ * [`data/ships/SOURCES.md`](https://github.com/DarkSession/Elite-Dangerous-Almanac/blob/main/data/ships/SOURCES.md).
71
+ * `"GuardianModuleResistance"` is the other non-scalar case: it grants the
72
+ * `guardianZoneResistance` capability, and its displayed bounds are not arithmetic.
73
+ */
74
+ readonly label: string;
75
+ /** How the value applies. */
76
+ readonly method: ModifierMethod;
77
+ /** Modifier value at quality `0` (the worst roll). */
78
+ readonly min: number;
79
+ /** Modifier value at quality `1` (the best roll). */
80
+ readonly max: number;
81
+ }
82
+ /** One stat an experimental effect modifies (a fixed contribution). */
83
+ interface ExperimentalContribution {
84
+ /** The journal Modifier Label. */
85
+ readonly label: string;
86
+ /** How the value applies. */
87
+ readonly method: ModifierMethod;
88
+ /** The contribution value (a fraction for percentage modifiers). */
89
+ readonly value: number;
90
+ }
91
+ /**
92
+ * One material an engineering step consumes — a blueprint grade's per-roll cost, an
93
+ * experimental effect's per-application cost, or a summed total from {@link sumMaterials}.
94
+ */
95
+ interface EngineeringMaterial {
96
+ /**
97
+ * The material's Frontier symbol, e.g. `"ChemicalManipulators"` — the key into the
98
+ * `materials` domain (`getMaterialBySymbol`) for its own grade and category.
99
+ */
100
+ readonly symbol: string;
101
+ /** Display name, e.g. `"Chemical Manipulators"`. */
102
+ readonly name: string;
103
+ /** How many of this material the step consumes. */
104
+ readonly count: number;
105
+ }
106
+ /** One grade of a blueprint — the modifiers it applies to a module. */
107
+ interface BlueprintGrade {
108
+ /** The stat modifiers this grade applies (feed to {@link computeModifiers}). */
109
+ readonly features: readonly BlueprintFeature[];
110
+ /**
111
+ * Fixed damage-type split produced at this grade, when the blueprint converts a
112
+ * weapon's damage. Shares are fractions (`0.155` = 15.5%); absent types deal no
113
+ * damage after conversion.
114
+ */
115
+ readonly damageDistribution?: DamageDistribution;
116
+ }
117
+ /**
118
+ * One experimental (special) effect — the stat modifiers and qualitative behavior it
119
+ * applies. An experimental effect is applied in one step, unlike a blueprint whose
120
+ * grades are rolled up to.
121
+ */
122
+ interface ExperimentalEffect {
123
+ /** The in-game display name, e.g. `"Mass Manager"`, `"Auto Loader"`. */
124
+ readonly name: string;
125
+ /**
126
+ * The stat contributions this effect applies (feed to {@link computeModifiers}).
127
+ *
128
+ * @remarks
129
+ * May be **empty** for a purely qualitative effect — one whose game behavior is a
130
+ * gameplay flag with no numeric magnitude the data exposes (e.g. Auto Loader
131
+ * reloading while firing, Smart Rounds sparing untargeted ships). Such an effect
132
+ * still carries a human-readable {@link ExperimentalEffect.description}.
133
+ *
134
+ * A damage-type conversion is represented separately by
135
+ * {@link ExperimentalEffect.damageDistribution}, because a split is a nested record
136
+ * rather than a scalar contribution.
137
+ */
138
+ readonly modifiers: readonly ExperimentalContribution[];
139
+ /**
140
+ * Fixed damage-type split produced by the effect, when it converts a weapon's damage.
141
+ * Shares are fractions (`0.5` = 50%); absent types deal no damage after conversion.
142
+ */
143
+ readonly damageDistribution?: DamageDistribution;
144
+ /**
145
+ * A short human-readable note on what the effect does in game — present on effects
146
+ * whose behavior is not fully captured by {@link ExperimentalEffect.modifiers}
147
+ * (chiefly the qualitative weapon-combat effects with no numeric magnitude).
148
+ */
149
+ readonly description?: string;
150
+ }
151
+ /** A blueprint's grades, keyed by grade number as a string (`"1"`–`"5"`). */
152
+ type BlueprintGrades = Readonly<Record<string, BlueprintGrade>>;
153
+ /**
154
+ * One engineering blueprint — its in-game display name and its per-grade data.
155
+ *
156
+ * @remarks
157
+ * A blueprint is keyed in {@link BLUEPRINTS} by its Frontier `fdname`; this is the record
158
+ * that key maps to. Each member of `grades` carries modifier `features` and an optional
159
+ * converted damage distribution (a blueprint need not define every grade `1`–`5`). A
160
+ * journal id shared by two recipes is resolved against the fitted module by
161
+ * `resolveBlueprintForModule` in `ships/blueprint-journal`.
162
+ */
163
+ interface Blueprint {
164
+ /** The in-game display name, e.g. `"Increased range"`, `"Fuel Scoop — Scoop rate enhanced"`. */
165
+ readonly name: string;
166
+ /** The blueprint's grades, keyed by grade number as a string (`"1"`–`"5"`). */
167
+ readonly grades: BlueprintGrades;
168
+ }
169
+ /**
170
+ * Compute the journal-style modifiers a blueprint (and optional experimental effect)
171
+ * produce on a module's base stats.
172
+ *
173
+ * @param base - The module's base stat values, keyed by journal Modifier Label (only
174
+ * the labels present here can be modified — a contribution to an absent stat is
175
+ * skipped). Two labels are also *read* without being modified: `Range` resolves Long
176
+ * Range's falloff flag, and `BurstSize` rounds an engineered clip to whole bursts, so a
177
+ * partial `base` gets a plain round-up on a weapon that fires in bursts.
178
+ * @param grade - A complete blueprint grade (from {@link getBlueprintGrade}). A raw
179
+ * feature list is also accepted for callers synthesising modifiers without a catalogue
180
+ * record.
181
+ * @param quality - The engineering system's shared quality roll, `0`–`1`. Defaults
182
+ * to `1` (best roll). Legacy-engineered modules advanced each attribute independently and
183
+ * cannot be reconstructed from their single reported quality; import their journal-stated
184
+ * modifiers instead.
185
+ * @param experimental - A complete experimental effect (from
186
+ * {@link getExperimentalEffect}), if any. A raw contribution list is also accepted for
187
+ * callers synthesising effects without a catalogue record.
188
+ * @returns One {@link EngineeringModifier} per modified label. Numeric stats carry the
189
+ * computed `Value` and `OriginalValue`; a granted capability carries `ValueStr`.
190
+ * @throws {RangeError} If `quality` is not a finite number in `[0, 1]`.
191
+ */
192
+ declare function computeModifiers(base: Readonly<Record<string, number>>, grade: BlueprintGrade | readonly BlueprintFeature[], quality?: number, experimental?: ExperimentalEffect | readonly ExperimentalContribution[]): EngineeringModifier[];
193
+ /**
194
+ * The number of engineering rolls to complete a single blueprint grade: grade `N` takes
195
+ * `N` rolls (grade 1 → 1 roll, grade 2 → 2 rolls, … grade 5 → 5 rolls). Each roll at a
196
+ * grade consumes that grade's materials, so the total to engineer a module *up to* a
197
+ * grade is the running sum of `rollsForGrade(g) ·` (grade `g`'s materials) for every
198
+ * grade `g` up to the target — what
199
+ * {@link ships/blueprint-costs!getBlueprintCost | getBlueprintCost} computes.
200
+ *
201
+ * @param grade - The blueprint grade, `1`–`5`.
202
+ * @returns The rolls to complete that grade (equal to the grade number).
203
+ * @throws {RangeError} If `grade` is not an integer from 1 through 5.
204
+ */
205
+ declare function rollsForGrade(grade: number): number;
206
+ /**
207
+ * Combine several material lists into one, summing the counts of any material that
208
+ * appears in more than one list (matched by `symbol`, case-insensitively). Use it to
209
+ * fold a blueprint's cost together with an experimental effect's — the two data modules
210
+ * stay decoupled, so pass in whichever lists you have:
211
+ *
212
+ * @example
213
+ * ```ts
214
+ * import { getBlueprintCost } from '@elite-dangerous-almanac/core/ships/blueprint-costs';
215
+ * import { sumMaterials } from '@elite-dangerous-almanac/core/ships/engineering';
216
+ * import { getExperimentalEffectCost } from '@elite-dangerous-almanac/core/ships/experimental-effect-costs';
217
+ *
218
+ * sumMaterials(
219
+ * getBlueprintCost('FSD_LongRange', 5)!,
220
+ * getExperimentalEffectCost('special_fsd_heavy')!,
221
+ * );
222
+ * ```
223
+ *
224
+ * @param lists - The material lists to merge; each may be empty.
225
+ * @returns One entry per distinct material, in first-seen order, with summed counts.
226
+ */
227
+ declare function sumMaterials(...lists: readonly (readonly EngineeringMaterial[])[]): EngineeringMaterial[];
228
+
229
+ export { type Blueprint, type BlueprintFeature, type BlueprintGrade, type BlueprintGrades, type EngineeringMaterial, type ExperimentalContribution, type ExperimentalEffect, type ModifierMethod, computeModifiers, rollsForGrade, sumMaterials };
@@ -0,0 +1 @@
1
+ export{computeModifiers,rollsForGrade,sumMaterials}from"../chunk-VZZ2XIRE.js";//# sourceMappingURL=engineering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"O"}
@@ -0,0 +1,56 @@
1
+ import { EngineeringMaterial } from './engineering.js';
2
+ import './slef.js';
3
+ import './modules.js';
4
+ import './engineering-options.js';
5
+ import './slots.js';
6
+
7
+ /**
8
+ * The **experimental-effect cost catalogue** — one-application material shopping lists
9
+ * kept separate from effect mechanics so calculating or editing a build does not bundle
10
+ * them.
11
+ *
12
+ * The matching stat modifiers and qualitative descriptions live in
13
+ * `ships/experimental-effects`.
14
+ *
15
+ * Data from EDSY (`eddb.js` `expeffect`), with combat-effect costs from the Inara
16
+ * registry; see [`data/ships/SOURCES.md`](https://github.com/DarkSession/Elite-Dangerous-Almanac/blob/main/data/ships/SOURCES.md).
17
+ *
18
+ * @packageDocumentation
19
+ */
20
+
21
+ /**
22
+ * Every experimental effect's one-application material list, keyed by Frontier `fdname`.
23
+ *
24
+ * @remarks
25
+ * Its ids exactly match `EXPERIMENTAL_EFFECTS` from `ships/experimental-effects`. The
26
+ * catalogues are separate runtime payloads so a mechanics-only consumer pays for neither
27
+ * material names nor counts.
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * import { EXPERIMENTAL_EFFECT_COSTS } from '@elite-dangerous-almanac/core/ships/experimental-effect-costs';
32
+ *
33
+ * EXPERIMENTAL_EFFECT_COSTS['special_fsd_heavy'];
34
+ * // -> [{ symbol: 'DisruptedWakeEchoes', name: 'Atypical Disrupted Wake Echoes', count: 5 }, ...]
35
+ * ```
36
+ */
37
+ declare const EXPERIMENTAL_EFFECT_COSTS: Readonly<Record<string, readonly EngineeringMaterial[]>>;
38
+ /**
39
+ * Look up an experimental effect's one-application material cost.
40
+ *
41
+ * @param fdname - The effect id, e.g. `"special_fsd_heavy"`, matched
42
+ * case-insensitively after trimming surrounding whitespace.
43
+ * @returns The frozen material list, or `null` if the effect is unknown.
44
+ * @throws {TypeError} If `fdname` is present and not a string. A nullish
45
+ * `fdname` is a miss, answered the way an unrecognised one is.
46
+ * @example
47
+ * ```ts
48
+ * import { getExperimentalEffectCost } from '@elite-dangerous-almanac/core/ships/experimental-effect-costs';
49
+ *
50
+ * getExperimentalEffectCost('special_fsd_heavy');
51
+ * // -> [{ symbol: 'DisruptedWakeEchoes', ... }, ...]
52
+ * ```
53
+ */
54
+ declare function getExperimentalEffectCost(fdname: string): readonly EngineeringMaterial[] | null;
55
+
56
+ export { EXPERIMENTAL_EFFECT_COSTS, getExperimentalEffectCost };
@@ -0,0 +1 @@
1
+ import{findByRawKey}from"../chunk-S4DBNX2B.js"; import{deepFreeze}from"../chunk-DURKO7JU.js";var experimental_effect_costs_default={special_concordant_sequence:[{symbol:"FocusCrystals",name:"Focus Crystals",count:5},{symbol:"EmbeddedFirmware",name:"Modified Embedded Firmware",count:3},{symbol:"Zirconium",name:"Zirconium",count:1}],special_weapon_toughened:[{symbol:"MechanicalScrap",name:"Mechanical Scrap",count:5},{symbol:"CompactComposites",name:"Compact Composites",count:5},{symbol:"Vanadium",name:"Vanadium",count:3}],special_emissive_munitions:[{symbol:"MechanicalEquipment",name:"Mechanical Equipment",count:4},{symbol:"EmissionData",name:"Unexpected Emission Data",count:3},{symbol:"HeatExchangers",name:"Heat Exchangers",count:3},{symbol:"Manganese",name:"Manganese",count:3}],special_feedback_cascade_cooled:[{symbol:"SymmetricKeys",name:"Open Symmetric Keys",count:5},{symbol:"ShieldEmitters",name:"Shield Emitters",count:5},{symbol:"FilamentComposites",name:"Filament Composites",count:5}],special_weapon_efficient:[{symbol:"MechanicalScrap",name:"Mechanical Scrap",count:5},{symbol:"HybridCapacitors",name:"Hybrid Capacitors",count:3},{symbol:"EmbeddedFirmware",name:"Modified Embedded Firmware",count:1}],special_incendiary_rounds:[{symbol:"HeatConductionWiring",name:"Heat Conduction Wiring",count:5},{symbol:"Phosphorus",name:"Phosphorus",count:5},{symbol:"Sulphur",name:"Sulphur",count:5},{symbol:"PhaseAlloys",name:"Phase Alloys",count:3}],special_weapon_rateoffire:[{symbol:"MechanicalScrap",name:"Mechanical Scrap",count:5},{symbol:"FocusCrystals",name:"Focus Crystals",count:4},{symbol:"ConductivePolymers",name:"Conductive Polymers",count:2},{symbol:"ConfigurableComponents",name:"Configurable Components",count:2}],special_weapon_damage:[{symbol:"MechanicalScrap",name:"Mechanical Scrap",count:5},{symbol:"MechanicalComponents",name:"Mechanical Components",count:3},{symbol:"Ruthenium",name:"Ruthenium",count:1}],special_plasma_slug_cooled:[{symbol:"HeatExchangers",name:"Heat Exchangers",count:3},{symbol:"EmbeddedFirmware",name:"Modified Embedded Firmware",count:2},{symbol:"RefinedFocusCrystals",name:"Refined Focus Crystals",count:2},{symbol:"Mercury",name:"Mercury",count:4}],special_weapon_lightweight:[{symbol:"SalvagedAlloys",name:"Salvaged Alloys",count:5},{symbol:"Carbon",name:"Carbon",count:5},{symbol:"Tin",name:"Tin",count:1}],special_super_penetrator_cooled:[{symbol:"ProtoLightAlloys",name:"Proto Light Alloys",count:3},{symbol:"RefinedFocusCrystals",name:"Refined Focus Crystals",count:3},{symbol:"Zirconium",name:"Zirconium",count:3},{symbol:"ShieldDensityReports",name:"Untypical Shield Scans",count:5}],special_shieldbooster_explosive:[{symbol:"ShieldSoakAnalysis",name:"Inconsistent Shield Soak Analysis",count:5},{symbol:"HeatResistantCeramics",name:"Heat Resistant Ceramics",count:3},{symbol:"HeatDispersionPlate",name:"Heat Dispersion Plate",count:3},{symbol:"Selenium",name:"Selenium",count:2}],special_shieldbooster_toughened:[{symbol:"ShieldCycleRecordings",name:"Distorted Shield Cycle Recordings",count:5},{symbol:"GalvanisingAlloys",name:"Galvanising Alloys",count:3},{symbol:"ShieldEmitters",name:"Shield Emitters",count:3}],special_shieldbooster_efficient:[{symbol:"ShieldSoakAnalysis",name:"Inconsistent Shield Soak Analysis",count:5},{symbol:"SecurityFirmware",name:"Security Firmware Patch",count:3},{symbol:"FocusCrystals",name:"Focus Crystals",count:3},{symbol:"Niobium",name:"Niobium",count:3}],special_shieldbooster_kinetic:[{symbol:"ScanArchives",name:"Unidentified Scan Archives",count:5},{symbol:"ShieldingSensors",name:"Shielding Sensors",count:3},{symbol:"ShieldPatternAnalysis",name:"Aberrant Shield Pattern Analysis",count:2}],special_shieldbooster_chunky:[{symbol:"ShieldDensityReports",name:"Untypical Shield Scans",count:3},{symbol:"CompactComposites",name:"Compact Composites",count:5},{symbol:"Cadmium",name:"Cadmium",count:2}],special_shieldbooster_thermic:[{symbol:"BulkScanData",name:"Anomalous Bulk Scan Data",count:5},{symbol:"ConductiveCeramics",name:"Conductive Ceramics",count:3},{symbol:"HeatVanes",name:"Heat Vanes",count:3}],special_armour_kinetic:[{symbol:"CompactComposites",name:"Compact Composites",count:5},{symbol:"HighDensityComposites",name:"High Density Composites",count:3},{symbol:"Zirconium",name:"Zirconium",count:3}],special_armour_chunky:[{symbol:"CompactComposites",name:"Compact Composites",count:5},{symbol:"MechanicalEquipment",name:"Mechanical Equipment",count:3},{symbol:"Molybdenum",name:"Molybdenum",count:2}],special_armour_explosive:[{symbol:"HeatConductionWiring",name:"Heat Conduction Wiring",count:5},{symbol:"HighDensityComposites",name:"High Density Composites",count:3},{symbol:"Niobium",name:"Niobium",count:1}],special_armour_thermic:[{symbol:"CompactComposites",name:"Compact Composites",count:5},{symbol:"HeatDispersionPlate",name:"Heat Dispersion Plate",count:3},{symbol:"ThermicAlloys",name:"Thermic Alloys",count:2}],special_powerplant_toughened:[{symbol:"GridResistors",name:"Grid Resistors",count:5},{symbol:"Vanadium",name:"Vanadium",count:3},{symbol:"FedProprietaryComposites",name:"Proprietary Composites",count:1}],special_powerplant_highcharge:[{symbol:"GridResistors",name:"Grid Resistors",count:5},{symbol:"Vanadium",name:"Vanadium",count:3},{symbol:"PolymerCapacitors",name:"Polymer Capacitors",count:1}],special_powerplant_lightweight:[{symbol:"GridResistors",name:"Grid Resistors",count:5},{symbol:"Vanadium",name:"Vanadium",count:3},{symbol:"ProtoLightAlloys",name:"Proto Light Alloys",count:1}],special_powerplant_cooled:[{symbol:"GridResistors",name:"Grid Resistors",count:5},{symbol:"Vanadium",name:"Vanadium",count:3},{symbol:"HeatVanes",name:"Heat Vanes",count:1}],special_engine_toughened:[{symbol:"Iron",name:"Iron",count:5},{symbol:"HybridCapacitors",name:"Hybrid Capacitors",count:3},{symbol:"FedProprietaryComposites",name:"Proprietary Composites",count:1}],special_engine_overloaded:[{symbol:"Iron",name:"Iron",count:5},{symbol:"HybridCapacitors",name:"Hybrid Capacitors",count:3},{symbol:"SecurityFirmware",name:"Security Firmware Patch",count:1}],special_engine_haulage:[{symbol:"Iron",name:"Iron",count:5},{symbol:"HybridCapacitors",name:"Hybrid Capacitors",count:3},{symbol:"SecurityFirmware",name:"Security Firmware Patch",count:1}],special_engine_lightweight:[{symbol:"Iron",name:"Iron",count:5},{symbol:"HybridCapacitors",name:"Hybrid Capacitors",count:3},{symbol:"ProtoLightAlloys",name:"Proto Light Alloys",count:1}],special_engine_cooled:[{symbol:"Iron",name:"Iron",count:5},{symbol:"HybridCapacitors",name:"Hybrid Capacitors",count:3},{symbol:"HeatVanes",name:"Heat Vanes",count:1}],special_fsd_fuelcapacity:[{symbol:"DisruptedWakeEchoes",name:"Atypical Disrupted Wake Echoes",count:5},{symbol:"GalvanisingAlloys",name:"Galvanising Alloys",count:3},{symbol:"HyperspaceTrajectories",name:"Eccentric Hyperspace Trajectories",count:1}],special_fsd_toughened:[{symbol:"DisruptedWakeEchoes",name:"Atypical Disrupted Wake Echoes",count:5},{symbol:"GalvanisingAlloys",name:"Galvanising Alloys",count:3},{symbol:"ConfigurableComponents",name:"Configurable Components",count:1}],special_fsd_heavy:[{symbol:"DisruptedWakeEchoes",name:"Atypical Disrupted Wake Echoes",count:5},{symbol:"GalvanisingAlloys",name:"Galvanising Alloys",count:3},{symbol:"HyperspaceTrajectories",name:"Eccentric Hyperspace Trajectories",count:1}],special_fsd_lightweight:[{symbol:"DisruptedWakeEchoes",name:"Atypical Disrupted Wake Echoes",count:5},{symbol:"GalvanisingAlloys",name:"Galvanising Alloys",count:3},{symbol:"ProtoLightAlloys",name:"Proto Light Alloys",count:1}],special_fsd_cooled:[{symbol:"DisruptedWakeEchoes",name:"Atypical Disrupted Wake Echoes",count:5},{symbol:"GalvanisingAlloys",name:"Galvanising Alloys",count:3},{symbol:"HeatVanes",name:"Heat Vanes",count:1},{symbol:"GridResistors",name:"Grid Resistors",count:3}],special_powerdistributor_capacity:[{symbol:"Phosphorus",name:"Phosphorus",count:5},{symbol:"HeatResistantCeramics",name:"Heat Resistant Ceramics",count:3},{symbol:"Cadmium",name:"Cadmium",count:1}],special_powerdistributor_toughened:[{symbol:"Phosphorus",name:"Phosphorus",count:5},{symbol:"HeatResistantCeramics",name:"Heat Resistant Ceramics",count:3},{symbol:"FedProprietaryComposites",name:"Proprietary Composites",count:1}],special_powerdistributor_efficient:[{symbol:"Phosphorus",name:"Phosphorus",count:5},{symbol:"HeatResistantCeramics",name:"Heat Resistant Ceramics",count:3},{symbol:"ConductivePolymers",name:"Conductive Polymers",count:1}],special_powerdistributor_lightweight:[{symbol:"Phosphorus",name:"Phosphorus",count:5},{symbol:"HeatResistantCeramics",name:"Heat Resistant Ceramics",count:3},{symbol:"ProtoLightAlloys",name:"Proto Light Alloys",count:1}],special_powerdistributor_fast:[{symbol:"Phosphorus",name:"Phosphorus",count:5},{symbol:"HeatResistantCeramics",name:"Heat Resistant Ceramics",count:3},{symbol:"SecurityFirmware",name:"Security Firmware Patch",count:1}],special_hullreinforcement_kinetic:[{symbol:"TemperedAlloys",name:"Tempered Alloys",count:5},{symbol:"Zirconium",name:"Zirconium",count:3},{symbol:"Carbon",name:"Carbon",count:5},{symbol:"HighDensityComposites",name:"High Density Composites",count:3}],special_hullreinforcement_chunky:[{symbol:"CompactComposites",name:"Compact Composites",count:5},{symbol:"Molybdenum",name:"Molybdenum",count:3},{symbol:"Ruthenium",name:"Ruthenium",count:2}],special_hullreinforcement_explosive:[{symbol:"HeatConductionWiring",name:"Heat Conduction Wiring",count:5},{symbol:"ShieldingSensors",name:"Shielding Sensors",count:3},{symbol:"Tungsten",name:"Tungsten",count:3}],special_hullreinforcement_thermic:[{symbol:"HeatConductionWiring",name:"Heat Conduction Wiring",count:5},{symbol:"HeatDispersionPlate",name:"Heat Dispersion Plate",count:3},{symbol:"ProtoLightAlloys",name:"Proto Light Alloys",count:1},{symbol:"Zinc",name:"Zinc",count:4}],special_shieldcell_oversized:[{symbol:"ChemicalStorageUnits",name:"Chemical Storage Units",count:5},{symbol:"Chromium",name:"Chromium",count:3},{symbol:"PolymerCapacitors",name:"Polymer Capacitors",count:1}],special_shieldcell_toughened:[{symbol:"ChemicalStorageUnits",name:"Chemical Storage Units",count:5},{symbol:"Chromium",name:"Chromium",count:3},{symbol:"Yttrium",name:"Yttrium",count:1}],special_shieldcell_efficient:[{symbol:"ChemicalStorageUnits",name:"Chemical Storage Units",count:5},{symbol:"Chromium",name:"Chromium",count:3},{symbol:"ConductivePolymers",name:"Conductive Polymers",count:1}],special_shieldcell_gradual:[{symbol:"ChemicalStorageUnits",name:"Chemical Storage Units",count:5},{symbol:"Chromium",name:"Chromium",count:3},{symbol:"ConfigurableComponents",name:"Configurable Components",count:1}],special_shieldcell_lightweight:[{symbol:"ChemicalStorageUnits",name:"Chemical Storage Units",count:5},{symbol:"Chromium",name:"Chromium",count:3},{symbol:"ProtoLightAlloys",name:"Proto Light Alloys",count:1}],special_shield_toughened:[{symbol:"WornShieldEmitters",name:"Worn Shield Emitters",count:5},{symbol:"UncutFocusCrystals",name:"Flawed Focus Crystals",count:3},{symbol:"ConfigurableComponents",name:"Configurable Components",count:1}],special_shield_regenerative:[{symbol:"WornShieldEmitters",name:"Worn Shield Emitters",count:5},{symbol:"UncutFocusCrystals",name:"Flawed Focus Crystals",count:3},{symbol:"CompoundShielding",name:"Compound Shielding",count:1}],special_shield_kinetic:[{symbol:"WornShieldEmitters",name:"Worn Shield Emitters",count:5},{symbol:"UncutFocusCrystals",name:"Flawed Focus Crystals",count:3},{symbol:"DecodedEmissionData",name:"Decoded Emission Data",count:1}],special_shield_health:[{symbol:"WornShieldEmitters",name:"Worn Shield Emitters",count:5},{symbol:"UncutFocusCrystals",name:"Flawed Focus Crystals",count:3},{symbol:"ConductivePolymers",name:"Conductive Polymers",count:1}],special_shield_efficient:[{symbol:"WornShieldEmitters",name:"Worn Shield Emitters",count:5},{symbol:"UncutFocusCrystals",name:"Flawed Focus Crystals",count:3},{symbol:"ConductivePolymers",name:"Conductive Polymers",count:1}],special_shield_resistive:[{symbol:"WornShieldEmitters",name:"Worn Shield Emitters",count:5},{symbol:"UncutFocusCrystals",name:"Flawed Focus Crystals",count:3},{symbol:"ShieldPatternAnalysis",name:"Aberrant Shield Pattern Analysis",count:1}],special_shield_lightweight:[{symbol:"WornShieldEmitters",name:"Worn Shield Emitters",count:5},{symbol:"UncutFocusCrystals",name:"Flawed Focus Crystals",count:3},{symbol:"ProtoLightAlloys",name:"Proto Light Alloys",count:1}],special_shield_thermic:[{symbol:"WornShieldEmitters",name:"Worn Shield Emitters",count:5},{symbol:"UncutFocusCrystals",name:"Flawed Focus Crystals",count:3},{symbol:"HeatVanes",name:"Heat Vanes",count:1}],special_auto_loader:[{symbol:"MechanicalEquipment",name:"Mechanical Equipment",count:4},{symbol:"MechanicalComponents",name:"Mechanical Components",count:3},{symbol:"HighDensityComposites",name:"High Density Composites",count:3}],special_corrosive_shell:[{symbol:"ChemicalStorageUnits",name:"Chemical Storage Units",count:5},{symbol:"PrecipitatedAlloys",name:"Precipitated Alloys",count:4},{symbol:"Arsenic",name:"Arsenic",count:3}],special_blinding_shell:[{symbol:"MechanicalScrap",name:"Mechanical Scrap",count:5},{symbol:"Manganese",name:"Manganese",count:4},{symbol:"HybridCapacitors",name:"Hybrid Capacitors",count:5},{symbol:"MechanicalComponents",name:"Mechanical Components",count:5}],special_dispersal_field:[{symbol:"ConductiveComponents",name:"Conductive Components",count:5},{symbol:"HybridCapacitors",name:"Hybrid Capacitors",count:5},{symbol:"ArchivedEmissionData",name:"Irregular Emission Data",count:5},{symbol:"WornShieldEmitters",name:"Worn Shield Emitters",count:5}],special_drag_munitions:[{symbol:"Carbon",name:"Carbon",count:5},{symbol:"GridResistors",name:"Grid Resistors",count:5},{symbol:"Molybdenum",name:"Molybdenum",count:2}],special_force_shell:[{symbol:"MechanicalScrap",name:"Mechanical Scrap",count:5},{symbol:"Zinc",name:"Zinc",count:5},{symbol:"PhaseAlloys",name:"Phase Alloys",count:3},{symbol:"HeatConductionWiring",name:"Heat Conduction Wiring",count:3}],special_fsd_interrupt:[{symbol:"WakeSolutions",name:"Strange Wake Solutions",count:3},{symbol:"FSDTelemetry",name:"Anomalous FSD Telemetry",count:5},{symbol:"MechanicalEquipment",name:"Mechanical Equipment",count:5},{symbol:"ConfigurableComponents",name:"Configurable Components",count:3}],special_high_yield_shell:[{symbol:"MechanicalScrap",name:"Mechanical Scrap",count:5},{symbol:"ProtoLightAlloys",name:"Proto Light Alloys",count:3},{symbol:"ChemicalManipulators",name:"Chemical Manipulators",count:3},{symbol:"Nickel",name:"Nickel",count:5}],special_distortion_field:[{symbol:"UncutFocusCrystals",name:"Flawed Focus Crystals",count:5},{symbol:"ShieldCycleRecordings",name:"Distorted Shield Cycle Recordings",count:5},{symbol:"DisruptedWakeEchoes",name:"Atypical Disrupted Wake Echoes",count:5}],special_choke_canister:[{symbol:"Sulphur",name:"Sulphur",count:5},{symbol:"Phosphorus",name:"Phosphorus",count:5},{symbol:"ChemicalDistillery",name:"Chemical Distillery",count:3},{symbol:"ElectrochemicalArrays",name:"Electrochemical Arrays",count:3}],special_mass_lock:[{symbol:"MechanicalEquipment",name:"Mechanical Equipment",count:5},{symbol:"HighDensityComposites",name:"High Density Composites",count:3},{symbol:"ShieldPatternAnalysis",name:"Aberrant Shield Pattern Analysis",count:3}],special_overload_munitions:[{symbol:"FilamentComposites",name:"Filament Composites",count:5},{symbol:"EncryptionCodes",name:"Tagged Encryption Codes",count:4},{symbol:"ShieldPatternAnalysis",name:"Aberrant Shield Pattern Analysis",count:2},{symbol:"Germanium",name:"Germanium",count:3}],special_penetrator_munitions:[{symbol:"GalvanisingAlloys",name:"Galvanising Alloys",count:5},{symbol:"ElectrochemicalArrays",name:"Electrochemical Arrays",count:3},{symbol:"Zirconium",name:"Zirconium",count:3}],special_deep_cut_payload:[{symbol:"MechanicalComponents",name:"Mechanical Components",count:3},{symbol:"Tungsten",name:"Tungsten",count:3},{symbol:"BulkScanData",name:"Anomalous Bulk Scan Data",count:5},{symbol:"Selenium",name:"Selenium",count:3}],special_phasing_sequence:[{symbol:"FocusCrystals",name:"Focus Crystals",count:5},{symbol:"ShieldPatternAnalysis",name:"Aberrant Shield Pattern Analysis",count:3},{symbol:"Niobium",name:"Niobium",count:3},{symbol:"ConfigurableComponents",name:"Configurable Components",count:3}],special_plasma_slug:[{symbol:"HeatExchangers",name:"Heat Exchangers",count:3},{symbol:"EmbeddedFirmware",name:"Modified Embedded Firmware",count:2},{symbol:"RefinedFocusCrystals",name:"Refined Focus Crystals",count:2},{symbol:"Mercury",name:"Mercury",count:4}],special_radiant_canister:[{symbol:"Polonium",name:"Polonium",count:1},{symbol:"PhaseAlloys",name:"Phase Alloys",count:3},{symbol:"HeatDispersionPlate",name:"Heat Dispersion Plate",count:4}],special_regeneration_sequence:[{symbol:"RefinedFocusCrystals",name:"Refined Focus Crystals",count:3},{symbol:"ShieldingSensors",name:"Shielding Sensors",count:4},{symbol:"ShieldFrequencyData",name:"Peculiar Shield Frequency Data",count:1}],special_reverberating_cascade:[{symbol:"ConfigurableComponents",name:"Configurable Components",count:2},{symbol:"ScanDatabanks",name:"Classified Scan Databanks",count:3},{symbol:"FilamentComposites",name:"Filament Composites",count:4},{symbol:"Chromium",name:"Chromium",count:4}],special_scramble_spectrum:[{symbol:"CrystalShards",name:"Crystal Shards",count:5},{symbol:"ShieldDensityReports",name:"Untypical Shield Scans",count:3},{symbol:"ScrambledEmissionData",name:"Exceptional Scrambled Emission Data",count:5}],special_screening_shell:[{symbol:"MechanicalScrap",name:"Mechanical Scrap",count:5},{symbol:"ShieldCycleRecordings",name:"Distorted Shield Cycle Recordings",count:5},{symbol:"ConsumerFirmware",name:"Modified Consumer Firmware",count:5},{symbol:"Niobium",name:"Niobium",count:3}],special_shiftlock_canister:[{symbol:"TemperedAlloys",name:"Tempered Alloys",count:5},{symbol:"WakeSolutions",name:"Strange Wake Solutions",count:3},{symbol:"SalvagedAlloys",name:"Salvaged Alloys",count:5}],special_smart_rounds:[{symbol:"MechanicalScrap",name:"Mechanical Scrap",count:5},{symbol:"SecurityFirmware",name:"Security Firmware Patch",count:3},{symbol:"DecodedEmissionData",name:"Decoded Emission Data",count:3},{symbol:"ScanDatabanks",name:"Classified Scan Databanks",count:3}],special_super_penetrator:[{symbol:"ProtoLightAlloys",name:"Proto Light Alloys",count:3},{symbol:"RefinedFocusCrystals",name:"Refined Focus Crystals",count:3},{symbol:"Zirconium",name:"Zirconium",count:3},{symbol:"ShieldDensityReports",name:"Untypical Shield Scans",count:5}],special_lock_breaker:[{symbol:"Selenium",name:"Selenium",count:5},{symbol:"SecurityFirmware",name:"Security Firmware Patch",count:3},{symbol:"AdaptiveEncryptors",name:"Adaptive Encryptors Capture",count:1}],special_thermal_cascade:[{symbol:"HeatConductionWiring",name:"Heat Conduction Wiring",count:5},{symbol:"HybridCapacitors",name:"Hybrid Capacitors",count:4},{symbol:"HighDensityComposites",name:"High Density Composites",count:3},{symbol:"Phosphorus",name:"Phosphorus",count:5}],special_thermal_conduit:[{symbol:"HeatDispersionPlate",name:"Heat Dispersion Plate",count:5},{symbol:"Sulphur",name:"Sulphur",count:5},{symbol:"TemperedAlloys",name:"Tempered Alloys",count:5}],special_thermalshock:[{symbol:"UncutFocusCrystals",name:"Flawed Focus Crystals",count:5},{symbol:"HeatResistantCeramics",name:"Heat Resistant Ceramics",count:3},{symbol:"ConductiveComponents",name:"Conductive Components",count:3},{symbol:"Tungsten",name:"Tungsten",count:3}],special_thermal_vent:[{symbol:"UncutFocusCrystals",name:"Flawed Focus Crystals",count:5},{symbol:"ConductivePolymers",name:"Conductive Polymers",count:3},{symbol:"PrecipitatedAlloys",name:"Precipitated Alloys",count:3}]};var EXPERIMENTAL_EFFECT_COSTS=deepFreeze(experimental_effect_costs_default);function getExperimentalEffectCost(fdname){return findByRawKey(EXPERIMENTAL_EFFECT_COSTS,fdname,"getExperimentalEffectCost: fdname")}export{EXPERIMENTAL_EFFECT_COSTS,getExperimentalEffectCost};//# sourceMappingURL=experimental-effect-costs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ships/experimental-effect-costs.ts"],"names":["findByRawKey","deepFreeze","experimental_effect_costs_default","EXPERIMENTAL_EFFECT_COSTS","getExperimentalEffectCost","fdname"],"mappings":"O,45mBAmCO,IAAMG,0BACTF,WAAWC,mCAkBR,SAASE,0BAA0BC,QACtC,OAAOL,aAAaG,0BAA2BE,OAAQ,oCAC3D,QAAAF,0BAAAC"}