@shipload/sdk 2.0.0-rc14 → 2.0.0-rc15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/shipload.js CHANGED
@@ -2281,21 +2281,21 @@ const PLANET_SUBTYPE_ICY = 3;
2281
2281
  const PLANET_SUBTYPE_OCEAN = 4;
2282
2282
  const PLANET_SUBTYPE_INDUSTRIAL = 5;
2283
2283
  const RESOURCE_CATALOG = [
2284
- { id: 26, tier: 't1' },
2285
- { id: 13, tier: 't2' },
2286
- { id: 24, tier: 't3' },
2287
- { id: 29, tier: 't1' },
2288
- { id: 47, tier: 't2' },
2289
- { id: 79, tier: 't3' },
2290
- { id: 1, tier: 't1' },
2291
- { id: 2, tier: 't2' },
2292
- { id: 18, tier: 't3' },
2293
- { id: 14, tier: 't1' },
2294
- { id: 1000, tier: 't2' },
2295
- { id: 1001, tier: 't3' },
2296
- { id: 6, tier: 't1' },
2297
- { id: 1003, tier: 't2' },
2298
- { id: 1002, tier: 't3' },
2284
+ { id: 101, tier: 't1' },
2285
+ { id: 102, tier: 't2' },
2286
+ { id: 103, tier: 't3' },
2287
+ { id: 201, tier: 't1' },
2288
+ { id: 202, tier: 't2' },
2289
+ { id: 203, tier: 't3' },
2290
+ { id: 301, tier: 't1' },
2291
+ { id: 302, tier: 't2' },
2292
+ { id: 303, tier: 't3' },
2293
+ { id: 401, tier: 't1' },
2294
+ { id: 402, tier: 't2' },
2295
+ { id: 403, tier: 't3' },
2296
+ { id: 501, tier: 't1' },
2297
+ { id: 502, tier: 't2' },
2298
+ { id: 503, tier: 't3' },
2299
2299
  ];
2300
2300
  function getDepthThreshold(tier) {
2301
2301
  switch (tier) {
@@ -2352,14 +2352,14 @@ function getResourceWeight(itemId, stratum) {
2352
2352
  return 10;
2353
2353
  }
2354
2354
  }
2355
- const ASTEROID_RESOURCES = [26, 13, 24, 29, 47];
2356
- const NEBULA_RESOURCES = [47, 79, 1, 2, 18];
2357
- const GAS_GIANT_RESOURCES = [1, 2, 18, 14, 6];
2358
- const ROCKY_RESOURCES = [26, 13, 24, 14, 1000, 1001, 1002];
2359
- const TERRESTRIAL_RESOURCES = [29, 47, 14, 1000, 6, 1003, 1002];
2360
- const ICY_RESOURCES = [26, 1, 2, 14, 1001, 6, 1003];
2361
- const OCEAN_RESOURCES = [29, 79, 1, 18, 6, 1003, 1002];
2362
- const INDUSTRIAL_RESOURCES = [26, 13, 24, 29, 79, 1000, 1001];
2355
+ const ASTEROID_RESOURCES = [101, 102, 103, 201, 202];
2356
+ const NEBULA_RESOURCES = [202, 203, 301, 302, 303];
2357
+ const GAS_GIANT_RESOURCES = [301, 302, 303, 401, 501];
2358
+ const ROCKY_RESOURCES = [101, 102, 103, 401, 402, 403, 503];
2359
+ const TERRESTRIAL_RESOURCES = [201, 202, 401, 402, 501, 502, 503];
2360
+ const ICY_RESOURCES = [101, 301, 302, 401, 403, 501, 502];
2361
+ const OCEAN_RESOURCES = [201, 203, 301, 303, 501, 502, 503];
2362
+ const INDUSTRIAL_RESOURCES = [101, 102, 103, 201, 203, 402, 403];
2363
2363
  function getLocationCandidates(locationType, subtype) {
2364
2364
  if (locationType === 2)
2365
2365
  return ASTEROID_RESOURCES;
@@ -4780,139 +4780,139 @@ class BaseManager {
4780
4780
 
4781
4781
  var itemsData = [
4782
4782
  {
4783
- id: 26,
4784
- name: "Iron",
4785
- description: "A versatile metal used in hulls and structures.",
4783
+ id: 101,
4784
+ name: "",
4785
+ description: "",
4786
4786
  mass: 30000,
4787
- category: "metal",
4787
+ category: "ore",
4788
4788
  tier: "t1",
4789
- color: "#B7410E"
4789
+ color: "#C26D3F"
4790
4790
  },
4791
4791
  {
4792
- id: 13,
4793
- name: "Aluminum",
4794
- description: "A lightweight metal for structural components.",
4792
+ id: 102,
4793
+ name: "",
4794
+ description: "",
4795
4795
  mass: 27000,
4796
- category: "metal",
4796
+ category: "ore",
4797
4797
  tier: "t2",
4798
- color: "#A8B5C2"
4798
+ color: "#C26D3F"
4799
4799
  },
4800
4800
  {
4801
- id: 24,
4802
- name: "Chromium",
4803
- description: "A hard, corrosion-resistant alloy metal.",
4801
+ id: 103,
4802
+ name: "",
4803
+ description: "",
4804
4804
  mass: 52000,
4805
- category: "metal",
4805
+ category: "ore",
4806
4806
  tier: "t3",
4807
- color: "#D4E6F1"
4807
+ color: "#C26D3F"
4808
4808
  },
4809
4809
  {
4810
- id: 29,
4811
- name: "Copper",
4812
- description: "A conductive metal for electronics and wiring.",
4810
+ id: 201,
4811
+ name: "",
4812
+ description: "",
4813
4813
  mass: 40000,
4814
- category: "precious",
4814
+ category: "crystal",
4815
4815
  tier: "t1",
4816
- color: "#B87333"
4816
+ color: "#4ADBFF"
4817
4817
  },
4818
4818
  {
4819
- id: 47,
4820
- name: "Silver",
4821
- description: "A high-conductivity metal for precision components.",
4819
+ id: 202,
4820
+ name: "",
4821
+ description: "",
4822
4822
  mass: 55000,
4823
- category: "precious",
4823
+ category: "crystal",
4824
4824
  tier: "t2",
4825
- color: "#C0C0C0"
4825
+ color: "#4ADBFF"
4826
4826
  },
4827
4827
  {
4828
- id: 79,
4829
- name: "Gold",
4830
- description: "A corrosion-proof metal for advanced electronics.",
4828
+ id: 203,
4829
+ name: "",
4830
+ description: "",
4831
4831
  mass: 70000,
4832
- category: "precious",
4832
+ category: "crystal",
4833
4833
  tier: "t3",
4834
- color: "#FFD700"
4834
+ color: "#4ADBFF"
4835
4835
  },
4836
4836
  {
4837
- id: 1,
4838
- name: "Hydrogen",
4839
- description: "A lightweight gas used for fuel cells and propulsion.",
4837
+ id: 301,
4838
+ name: "",
4839
+ description: "",
4840
4840
  mass: 15000,
4841
4841
  category: "gas",
4842
4842
  tier: "t1",
4843
- color: "#7EC8E3"
4843
+ color: "#B8E4A0"
4844
4844
  },
4845
4845
  {
4846
- id: 2,
4847
- name: "Helium",
4848
- description: "An inert noble gas used in energy systems.",
4846
+ id: 302,
4847
+ name: "",
4848
+ description: "",
4849
4849
  mass: 2000,
4850
4850
  category: "gas",
4851
4851
  tier: "t2",
4852
- color: "#F5E6CC"
4852
+ color: "#B8E4A0"
4853
4853
  },
4854
4854
  {
4855
- id: 18,
4856
- name: "Argon",
4857
- description: "A noble gas used in industrial and energy applications.",
4855
+ id: 303,
4856
+ name: "",
4857
+ description: "",
4858
4858
  mass: 8000,
4859
4859
  category: "gas",
4860
4860
  tier: "t3",
4861
- color: "#9B59B6"
4861
+ color: "#B8E4A0"
4862
4862
  },
4863
4863
  {
4864
- id: 14,
4865
- name: "Silicon",
4866
- description: "A semiconductor used in sensors and computing.",
4864
+ id: 401,
4865
+ name: "",
4866
+ description: "",
4867
4867
  mass: 22000,
4868
- category: "mineral",
4868
+ category: "regolith",
4869
4869
  tier: "t1",
4870
- color: "#B8A9C9"
4870
+ color: "#C4A57B"
4871
4871
  },
4872
4872
  {
4873
- id: 1000,
4874
- name: "Quartz",
4875
- description: "A crystalline mineral for sensors and optics.",
4873
+ id: 402,
4874
+ name: "",
4875
+ description: "",
4876
4876
  mass: 35000,
4877
- category: "mineral",
4877
+ category: "regolith",
4878
4878
  tier: "t2",
4879
- color: "#E8D5B7"
4879
+ color: "#C4A57B"
4880
4880
  },
4881
4881
  {
4882
- id: 1001,
4883
- name: "Sapphire",
4884
- description: "A precious crystal for precision instruments.",
4882
+ id: 403,
4883
+ name: "",
4884
+ description: "",
4885
4885
  mass: 45000,
4886
- category: "mineral",
4886
+ category: "regolith",
4887
4887
  tier: "t3",
4888
- color: "#0F52BA"
4888
+ color: "#C4A57B"
4889
4889
  },
4890
4890
  {
4891
- id: 6,
4892
- name: "Carbon",
4893
- description: "A versatile element for life support and coatings.",
4891
+ id: 501,
4892
+ name: "",
4893
+ description: "",
4894
4894
  mass: 15000,
4895
- category: "organic",
4895
+ category: "biomass",
4896
4896
  tier: "t1",
4897
- color: "#4A4A4A"
4897
+ color: "#5A8B3E"
4898
4898
  },
4899
4899
  {
4900
- id: 1003,
4901
- name: "Biomass",
4902
- description: "Organic matter for life support systems.",
4900
+ id: 502,
4901
+ name: "",
4902
+ description: "",
4903
4903
  mass: 30000,
4904
- category: "organic",
4904
+ category: "biomass",
4905
4905
  tier: "t2",
4906
- color: "#8B4513"
4906
+ color: "#5A8B3E"
4907
4907
  },
4908
4908
  {
4909
- id: 1002,
4910
- name: "Resin",
4911
- description: "A fossilized organic compound for coatings and sealants.",
4909
+ id: 503,
4910
+ name: "",
4911
+ description: "",
4912
4912
  mass: 25000,
4913
- category: "organic",
4913
+ category: "biomass",
4914
4914
  tier: "t3",
4915
- color: "#DAA520"
4915
+ color: "#5A8B3E"
4916
4916
  }
4917
4917
  ];
4918
4918
 
@@ -4980,38 +4980,38 @@ const components = [
4980
4980
  {
4981
4981
  id: ITEM_HULL_PLATES,
4982
4982
  name: 'Hull Plates',
4983
- description: 'Structural plating formed from metal. Used in hulls, containers, and frames.',
4983
+ description: 'Structural plating formed from ore. Used in hulls, containers, and frames.',
4984
4984
  color: '#7B8D9E',
4985
4985
  mass: 50000,
4986
4986
  stats: [
4987
- { key: 'strength', source: 'metal' },
4988
- { key: 'density', source: 'metal' },
4987
+ { key: 'strength', source: 'ore' },
4988
+ { key: 'density', source: 'ore' },
4989
4989
  ],
4990
- recipe: [{ category: 'metal', quantity: 15 }],
4990
+ recipe: [{ category: 'ore', quantity: 15 }],
4991
4991
  usedIn: [
4992
4992
  { type: 'entity', name: 'Container' },
4993
- { type: 'entity', name: 'Warehouse T1' },
4994
- { type: 'entity', name: 'Ship T1' },
4993
+ { type: 'entity', name: 'Warehouse' },
4994
+ { type: 'entity', name: 'Ship' },
4995
4995
  ],
4996
4996
  },
4997
4997
  {
4998
4998
  id: ITEM_CARGO_LINING,
4999
4999
  name: 'Cargo Lining',
5000
- description: 'Precision-formed composite lining for cargo storage. Combines precious metal shaping with organic sealing.',
5001
- color: '#D4A843',
5000
+ description: 'Composite lining formed from fine regolith bound in biomass polymer. Dense enough to seal cargo holds, flexible enough to absorb vibration.',
5001
+ color: '#C4A57B',
5002
5002
  mass: 30000,
5003
5003
  stats: [
5004
- { key: 'ductility', source: 'precious' },
5005
- { key: 'purity', source: 'organic' },
5004
+ { key: 'fineness', source: 'regolith' },
5005
+ { key: 'saturation', source: 'biomass' },
5006
5006
  ],
5007
5007
  recipe: [
5008
- { category: 'precious', quantity: 6 },
5009
- { category: 'organic', quantity: 14 },
5008
+ { category: 'regolith', quantity: 10 },
5009
+ { category: 'biomass', quantity: 20 },
5010
5010
  ],
5011
5011
  usedIn: [
5012
5012
  { type: 'entity', name: 'Container' },
5013
- { type: 'entity', name: 'Warehouse T1' },
5014
- { type: 'entity', name: 'Ship T1' },
5013
+ { type: 'module', name: 'Loader' },
5014
+ { type: 'module', name: 'Storage' },
5015
5015
  ],
5016
5016
  },
5017
5017
  {
@@ -5030,73 +5030,76 @@ const components = [
5030
5030
  {
5031
5031
  id: ITEM_POWER_CELL,
5032
5032
  name: 'Power Cell',
5033
- description: 'Crystalline energy storage matrix formed from resonant minerals.',
5034
- color: '#7B5AE8',
5033
+ description: 'Crystalline energy storage matrix. Resonant lattices retain and release charge.',
5034
+ color: '#4ADBFF',
5035
5035
  mass: 30000,
5036
5036
  stats: [
5037
- { key: 'resonance', source: 'mineral' },
5038
- { key: 'clarity', source: 'mineral' },
5037
+ { key: 'resonance', source: 'crystal' },
5038
+ { key: 'reflectivity', source: 'crystal' },
5039
+ ],
5040
+ recipe: [{ category: 'crystal', quantity: 20 }],
5041
+ usedIn: [
5042
+ { type: 'module', name: 'Generator' },
5043
+ { type: 'module', name: 'Hauler' },
5039
5044
  ],
5040
- recipe: [{ category: 'mineral', quantity: 20 }],
5041
- usedIn: [{ type: 'module', name: 'Generator' }],
5042
5045
  },
5043
5046
  {
5044
5047
  id: ITEM_MATTER_CONDUIT,
5045
5048
  name: 'Matter Conduit',
5046
- description: 'Heavy-duty metal shaft used in gathering equipment.',
5049
+ description: 'Heavy-duty ore shaft used in gathering equipment.',
5047
5050
  color: '#7B8D9E',
5048
5051
  mass: 50000,
5049
5052
  stats: [
5050
- { key: 'strength', source: 'metal' },
5051
- { key: 'tolerance', source: 'metal' },
5053
+ { key: 'strength', source: 'ore' },
5054
+ { key: 'tolerance', source: 'ore' },
5052
5055
  ],
5053
- recipe: [{ category: 'metal', quantity: 15 }],
5056
+ recipe: [{ category: 'ore', quantity: 15 }],
5054
5057
  usedIn: [{ type: 'module', name: 'Gatherer' }],
5055
5058
  },
5056
5059
  {
5057
5060
  id: ITEM_SURVEY_PROBE,
5058
5061
  name: 'Survey Probe',
5059
- description: 'Precious metal sensor array for deep resource detection.',
5060
- color: '#D4A843',
5062
+ description: 'Crystal-lattice sensor array for deep resource detection.',
5063
+ color: '#4ADBFF',
5061
5064
  mass: 30000,
5062
5065
  stats: [
5063
- { key: 'conductivity', source: 'precious' },
5064
- { key: 'reflectivity', source: 'precious' },
5066
+ { key: 'conductivity', source: 'crystal' },
5067
+ { key: 'reflectivity', source: 'crystal' },
5065
5068
  ],
5066
- recipe: [{ category: 'precious', quantity: 10 }],
5069
+ recipe: [{ category: 'crystal', quantity: 10 }],
5067
5070
  usedIn: [{ type: 'module', name: 'Gatherer' }],
5068
5071
  },
5069
5072
  {
5070
5073
  id: ITEM_CARGO_ARM,
5071
5074
  name: 'Cargo Arm',
5072
- description: 'Flexible organic composite arm for cargo handling.',
5073
- color: '#6B8E5A',
5075
+ description: 'Flexible biomass composite arm for cargo handling.',
5076
+ color: '#5A8B3E',
5074
5077
  mass: 30000,
5075
5078
  stats: [
5076
- { key: 'plasticity', source: 'organic' },
5077
- { key: 'insulation', source: 'organic' },
5079
+ { key: 'plasticity', source: 'biomass' },
5080
+ { key: 'insulation', source: 'biomass' },
5078
5081
  ],
5079
- recipe: [{ category: 'organic', quantity: 32 }],
5082
+ recipe: [{ category: 'biomass', quantity: 32 }],
5080
5083
  usedIn: [{ type: 'module', name: 'Loader' }],
5081
5084
  },
5082
5085
  {
5083
5086
  id: ITEM_TOOL_BIT,
5084
5087
  name: 'Tool Bit',
5085
- description: 'Dense mineral cutting head for manufacturing operations.',
5086
- color: '#B8A9C9',
5088
+ description: 'Dense regolith cutting head for manufacturing operations.',
5089
+ color: '#C4A57B',
5087
5090
  mass: 30000,
5088
5091
  stats: [
5089
- { key: 'hardness', source: 'mineral' },
5090
- { key: 'clarity', source: 'mineral' },
5092
+ { key: 'hardness', source: 'regolith' },
5093
+ { key: 'composition', source: 'regolith' },
5091
5094
  ],
5092
- recipe: [{ category: 'mineral', quantity: 20 }],
5095
+ recipe: [{ category: 'regolith', quantity: 20 }],
5093
5096
  usedIn: [{ type: 'module', name: 'Manufacturing' }],
5094
5097
  },
5095
5098
  {
5096
5099
  id: ITEM_REACTION_CHAMBER,
5097
5100
  name: 'Reaction Chamber',
5098
5101
  description: 'Gas-pressurized vessel for controlled manufacturing reactions.',
5099
- color: '#7EC8E3',
5102
+ color: '#B8E4A0',
5100
5103
  mass: 50000,
5101
5104
  stats: [
5102
5105
  { key: 'reactivity', source: 'gas' },
@@ -5108,48 +5111,48 @@ const components = [
5108
5111
  {
5109
5112
  id: ITEM_FOCUSING_ARRAY,
5110
5113
  name: 'Focusing Array',
5111
- description: "Precision-formed precious-metal lens array. Routes the haul beam's energy efficiently to the target lock.",
5112
- color: '#D4A843',
5114
+ description: "Precision-formed crystal lens array. Routes the haul beam's energy efficiently to the target lock.",
5115
+ color: '#4ADBFF',
5113
5116
  mass: 40000,
5114
5117
  stats: [
5115
- { key: 'conductivity', source: 'precious' },
5116
- { key: 'ductility', source: 'precious' },
5118
+ { key: 'conductivity', source: 'crystal' },
5119
+ { key: 'resonance', source: 'crystal' },
5117
5120
  ],
5118
- recipe: [{ category: 'precious', quantity: 25 }],
5119
- usedIn: [{ type: 'module', name: 'Hauler Module T1' }],
5121
+ recipe: [{ category: 'crystal', quantity: 25 }],
5122
+ usedIn: [{ type: 'module', name: 'Hauler' }],
5120
5123
  },
5121
5124
  {
5122
5125
  id: ITEM_HULL_PLATES_T2,
5123
5126
  name: 'Hull Plates T2',
5124
- description: 'Advanced structural plating reinforced with tier 2 metals.',
5127
+ description: 'Advanced structural plating reinforced with tier 2 ore.',
5125
5128
  color: '#9BADB8',
5126
5129
  mass: 50000,
5127
5130
  stats: [
5128
- { key: 'strength', source: 'metal' },
5129
- { key: 'density', source: 'metal' },
5131
+ { key: 'strength', source: 'ore' },
5132
+ { key: 'density', source: 'ore' },
5130
5133
  ],
5131
5134
  recipe: [
5132
5135
  { itemId: ITEM_HULL_PLATES, quantity: 2 },
5133
- { category: 'metal', quantity: 15 },
5136
+ { category: 'ore', quantity: 15 },
5134
5137
  ],
5135
- usedIn: [{ type: 'entity', name: 'Container T2' }],
5138
+ usedIn: [{ type: 'entity', name: 'Container' }],
5136
5139
  },
5137
5140
  {
5138
5141
  id: ITEM_CARGO_LINING_T2,
5139
- name: 'Cargo Lining T2',
5140
- description: 'Advanced composite lining with improved storage properties.',
5141
- color: '#E0B84D',
5142
- mass: 30000,
5142
+ name: 'Cargo Lining',
5143
+ description: 'Advanced composite lining reinforced with tier 2 regolith and biomass polymer.',
5144
+ color: '#C4A57B',
5145
+ mass: 45000,
5143
5146
  stats: [
5144
- { key: 'ductility', source: 'precious' },
5145
- { key: 'purity', source: 'organic' },
5147
+ { key: 'fineness', source: 'regolith' },
5148
+ { key: 'saturation', source: 'biomass' },
5146
5149
  ],
5147
5150
  recipe: [
5148
5151
  { itemId: ITEM_CARGO_LINING, quantity: 2 },
5149
- { category: 'precious', quantity: 6 },
5150
- { category: 'organic', quantity: 14 },
5152
+ { category: 'regolith', quantity: 5 },
5153
+ { category: 'biomass', quantity: 10 },
5151
5154
  ],
5152
- usedIn: [{ type: 'entity', name: 'Container T2' }],
5155
+ usedIn: [{ type: 'entity', name: 'Container' }],
5153
5156
  },
5154
5157
  ];
5155
5158
  const entityRecipes = [
@@ -5166,13 +5169,13 @@ const entityRecipes = [
5166
5169
  stats: [
5167
5170
  { key: 'strength', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'strength' },
5168
5171
  { key: 'density', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'density' },
5169
- { key: 'ductility', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'ductility' },
5170
- { key: 'purity', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'purity' },
5172
+ { key: 'fineness', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'fineness' },
5173
+ { key: 'saturation', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'saturation' },
5171
5174
  ],
5172
5175
  },
5173
5176
  {
5174
5177
  id: 'ship-t1',
5175
- name: 'Ship T1',
5178
+ name: 'Ship',
5176
5179
  description: 'General-purpose vessel with 5 module slots.',
5177
5180
  color: '#4AE898',
5178
5181
  packedItemId: ITEM_SHIP_T1_PACKED,
@@ -5183,8 +5186,8 @@ const entityRecipes = [
5183
5186
  stats: [
5184
5187
  { key: 'strength', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'strength' },
5185
5188
  { key: 'density', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'density' },
5186
- { key: 'ductility', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'ductility' },
5187
- { key: 'purity', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'purity' },
5189
+ { key: 'fineness', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'fineness' },
5190
+ { key: 'saturation', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'saturation' },
5188
5191
  ],
5189
5192
  moduleSlots: [
5190
5193
  { type: MODULE_ANY },
@@ -5196,7 +5199,7 @@ const entityRecipes = [
5196
5199
  },
5197
5200
  {
5198
5201
  id: 'warehouse-t1',
5199
- name: 'Warehouse T1',
5202
+ name: 'Warehouse',
5200
5203
  description: 'Massive stationary storage facility with a single loader module slot.',
5201
5204
  color: '#EAB308',
5202
5205
  packedItemId: ITEM_WAREHOUSE_T1_PACKED,
@@ -5207,8 +5210,8 @@ const entityRecipes = [
5207
5210
  stats: [
5208
5211
  { key: 'strength', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'strength' },
5209
5212
  { key: 'density', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'density' },
5210
- { key: 'ductility', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'ductility' },
5211
- { key: 'purity', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'purity' },
5213
+ { key: 'fineness', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'fineness' },
5214
+ { key: 'saturation', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'saturation' },
5212
5215
  ],
5213
5216
  moduleSlots: [
5214
5217
  { type: MODULE_LOADER, label: 'Loader' },
@@ -5220,7 +5223,7 @@ const entityRecipes = [
5220
5223
  },
5221
5224
  {
5222
5225
  id: 'container-t2',
5223
- name: 'Container T2',
5226
+ name: 'Container',
5224
5227
  description: 'Advanced cargo container with improved capacity formulas.',
5225
5228
  color: '#9BADB8',
5226
5229
  packedItemId: ITEM_CONTAINER_T2_PACKED,
@@ -5231,8 +5234,12 @@ const entityRecipes = [
5231
5234
  stats: [
5232
5235
  { key: 'strength', sourceComponentId: ITEM_HULL_PLATES_T2, sourceStatKey: 'strength' },
5233
5236
  { key: 'density', sourceComponentId: ITEM_HULL_PLATES_T2, sourceStatKey: 'density' },
5234
- { key: 'ductility', sourceComponentId: ITEM_CARGO_LINING_T2, sourceStatKey: 'ductility' },
5235
- { key: 'purity', sourceComponentId: ITEM_CARGO_LINING_T2, sourceStatKey: 'purity' },
5237
+ { key: 'fineness', sourceComponentId: ITEM_CARGO_LINING_T2, sourceStatKey: 'fineness' },
5238
+ {
5239
+ key: 'saturation',
5240
+ sourceComponentId: ITEM_CARGO_LINING_T2,
5241
+ sourceStatKey: 'saturation',
5242
+ },
5236
5243
  ],
5237
5244
  },
5238
5245
  ];
@@ -5253,14 +5260,14 @@ const moduleRecipes = [
5253
5260
  {
5254
5261
  id: 'generator-t1',
5255
5262
  name: 'Generator',
5256
- description: 'Basic energy system. Stores and recharges energy from resonant minerals.',
5257
- color: '#7B5AE8',
5263
+ description: 'Basic energy system. Stores and recharges energy from resonant crystals.',
5264
+ color: '#4ADBFF',
5258
5265
  itemId: ITEM_GENERATOR_T1,
5259
5266
  moduleType: MODULE_GENERATOR,
5260
5267
  recipe: [{ itemId: ITEM_POWER_CELL, quantity: 5 }],
5261
5268
  stats: [
5262
5269
  { key: 'resonance', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'resonance' },
5263
- { key: 'clarity', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'clarity' },
5270
+ { key: 'reflectivity', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'reflectivity' },
5264
5271
  ],
5265
5272
  },
5266
5273
  {
@@ -5298,7 +5305,7 @@ const moduleRecipes = [
5298
5305
  id: 'loader-t1',
5299
5306
  name: 'Loader',
5300
5307
  description: 'Basic cargo handling system. Loads and unloads cargo with articulated arms.',
5301
- color: '#6B8E5A',
5308
+ color: '#5A8B3E',
5302
5309
  itemId: ITEM_LOADER_T1,
5303
5310
  moduleType: MODULE_LOADER,
5304
5311
  recipe: [
@@ -5306,7 +5313,7 @@ const moduleRecipes = [
5306
5313
  { itemId: ITEM_CARGO_ARM, quantity: 3 },
5307
5314
  ],
5308
5315
  stats: [
5309
- { key: 'ductility', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'ductility' },
5316
+ { key: 'fineness', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'fineness' },
5310
5317
  { key: 'plasticity', sourceComponentId: ITEM_CARGO_ARM, sourceStatKey: 'plasticity' },
5311
5318
  ],
5312
5319
  },
@@ -5314,7 +5321,7 @@ const moduleRecipes = [
5314
5321
  id: 'manufacturing-t1',
5315
5322
  name: 'Manufacturing',
5316
5323
  description: 'Basic crafting system. Processes materials using reaction chambers and cutting tools.',
5317
- color: '#7EC8E3',
5324
+ color: '#B8E4A0',
5318
5325
  itemId: ITEM_MANUFACTURING_T1,
5319
5326
  moduleType: MODULE_CRAFTER,
5320
5327
  recipe: [
@@ -5327,7 +5334,7 @@ const moduleRecipes = [
5327
5334
  sourceComponentId: ITEM_REACTION_CHAMBER,
5328
5335
  sourceStatKey: 'reactivity',
5329
5336
  },
5330
- { key: 'clarity', sourceComponentId: ITEM_TOOL_BIT, sourceStatKey: 'clarity' },
5337
+ { key: 'composition', sourceComponentId: ITEM_TOOL_BIT, sourceStatKey: 'composition' },
5331
5338
  ],
5332
5339
  },
5333
5340
  {
@@ -5343,16 +5350,16 @@ const moduleRecipes = [
5343
5350
  ],
5344
5351
  stats: [
5345
5352
  { key: 'strength', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'strength' },
5346
- { key: 'ductility', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'ductility' },
5347
- { key: 'purity', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'purity' },
5348
- { key: 'density', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'density' },
5353
+ { key: 'density', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'density' },
5354
+ { key: 'fineness', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'fineness' },
5355
+ { key: 'saturation', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'saturation' },
5349
5356
  ],
5350
5357
  },
5351
5358
  {
5352
5359
  id: 'hauler-t1',
5353
- name: 'Hauler Module T1',
5360
+ name: 'Hauler',
5354
5361
  description: 'Projects a haul beam to lock onto and transport containers or warehouses through group travel.',
5355
- color: '#D4A843',
5362
+ color: '#4ADBFF',
5356
5363
  itemId: ITEM_HAULER_T1,
5357
5364
  moduleType: MODULE_HAULER,
5358
5365
  recipe: [
@@ -5361,13 +5368,12 @@ const moduleRecipes = [
5361
5368
  ],
5362
5369
  stats: [
5363
5370
  { key: 'resonance', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'resonance' },
5371
+ { key: 'reflectivity', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'reflectivity' },
5364
5372
  {
5365
5373
  key: 'conductivity',
5366
5374
  sourceComponentId: ITEM_FOCUSING_ARRAY,
5367
5375
  sourceStatKey: 'conductivity',
5368
5376
  },
5369
- { key: 'clarity', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'clarity' },
5370
- { key: 'ductility', sourceComponentId: ITEM_FOCUSING_ARRAY, sourceStatKey: 'ductility' },
5371
5377
  ],
5372
5378
  },
5373
5379
  ];
@@ -5428,7 +5434,7 @@ function getComponentsForStat(statKey) {
5428
5434
  return components.filter((c) => c.stats.some((s) => s.key === statKey));
5429
5435
  }
5430
5436
 
5431
- const METAL_STATS = [
5437
+ const ORE_STATS = [
5432
5438
  {
5433
5439
  key: 'strength',
5434
5440
  label: 'Strength',
@@ -5449,24 +5455,24 @@ const METAL_STATS = [
5449
5455
  inverted: true,
5450
5456
  },
5451
5457
  ];
5452
- const PRECIOUS_STATS = [
5458
+ const CRYSTAL_STATS = [
5453
5459
  {
5454
5460
  key: 'conductivity',
5455
5461
  label: 'Conductivity',
5456
5462
  abbreviation: 'CON',
5457
- purpose: 'Efficiency of energy/signal transfer',
5463
+ purpose: 'Efficiency of energy/signal transfer through crystalline lattice',
5458
5464
  },
5459
5465
  {
5460
- key: 'ductility',
5461
- label: 'Ductility',
5462
- abbreviation: 'DUC',
5463
- purpose: 'Ability to be worked into fine, precise shapes',
5466
+ key: 'resonance',
5467
+ label: 'Resonance',
5468
+ abbreviation: 'RES',
5469
+ purpose: 'Frequency tuning and piezoelectric response storage and amplification',
5464
5470
  },
5465
5471
  {
5466
5472
  key: 'reflectivity',
5467
5473
  label: 'Reflectivity',
5468
5474
  abbreviation: 'REF',
5469
- purpose: 'Surface quality for heat management and precision optics',
5475
+ purpose: 'Optical refraction and reflection lenses, mirrors, focus',
5470
5476
  },
5471
5477
  ];
5472
5478
  const GAS_STATS = [
@@ -5489,52 +5495,52 @@ const GAS_STATS = [
5489
5495
  purpose: 'Heat capacity for thermal management',
5490
5496
  },
5491
5497
  ];
5492
- const MINERAL_STATS = [
5498
+ const REGOLITH_STATS = [
5493
5499
  {
5494
- key: 'resonance',
5495
- label: 'Resonance',
5496
- abbreviation: 'RES',
5497
- purpose: 'Energy field interaction storage, focusing, projection',
5500
+ key: 'composition',
5501
+ label: 'Composition',
5502
+ abbreviation: 'COM',
5503
+ purpose: 'Mineral/metal mixdrives sensor, chip, and optic crafting quality',
5498
5504
  },
5499
5505
  {
5500
5506
  key: 'hardness',
5501
5507
  label: 'Hardness',
5502
5508
  abbreviation: 'HRD',
5503
- purpose: 'Resistance to wear — cutting surfaces, penetration',
5509
+ purpose: 'Particle hardness — cutting surfaces, abrasives, wear resistance',
5504
5510
  },
5505
5511
  {
5506
- key: 'clarity',
5507
- label: 'Clarity',
5508
- abbreviation: 'CLR',
5509
- purpose: 'Crystalline perfectionprecision optics',
5512
+ key: 'fineness',
5513
+ label: 'Fineness',
5514
+ abbreviation: 'FIN',
5515
+ purpose: 'Grain sizefine powder for smooth composites and sintering',
5510
5516
  },
5511
5517
  ];
5512
- const ORGANIC_STATS = [
5518
+ const BIOMASS_STATS = [
5513
5519
  {
5514
5520
  key: 'plasticity',
5515
5521
  label: 'Plasticity',
5516
5522
  abbreviation: 'PLA',
5517
- purpose: 'Ease of reshaping speeds processing',
5523
+ purpose: 'Flexibility and deformation under load',
5518
5524
  },
5519
5525
  {
5520
5526
  key: 'insulation',
5521
5527
  label: 'Insulation',
5522
5528
  abbreviation: 'INS',
5523
- purpose: 'Energy containment reduces energy loss',
5529
+ purpose: 'Thermal and electrical blocking capacity',
5524
5530
  },
5525
5531
  {
5526
- key: 'purity',
5527
- label: 'Purity',
5528
- abbreviation: 'PUR',
5529
- purpose: 'Biological cleanliness better composites and lubricants',
5532
+ key: 'saturation',
5533
+ label: 'Saturation',
5534
+ abbreviation: 'SAT',
5535
+ purpose: 'Concentration of useful organic compounds per unit',
5530
5536
  },
5531
5537
  ];
5532
5538
  const STAT_MAP = {
5533
- metal: METAL_STATS,
5534
- precious: PRECIOUS_STATS,
5539
+ ore: ORE_STATS,
5540
+ crystal: CRYSTAL_STATS,
5535
5541
  gas: GAS_STATS,
5536
- mineral: MINERAL_STATS,
5537
- organic: ORGANIC_STATS,
5542
+ regolith: REGOLITH_STATS,
5543
+ biomass: BIOMASS_STATS,
5538
5544
  };
5539
5545
  function getStatDefinitions(category) {
5540
5546
  return STAT_MAP[category];
@@ -5773,11 +5779,11 @@ function decodeStackStats(itemId, stats) {
5773
5779
  return { stat1: decodeStat(s, 0), stat2: decodeStat(s, 1), stat3: decodeStat(s, 2) };
5774
5780
  }
5775
5781
  const categoryItemMass = {
5776
- metal: 30000,
5777
- precious: 40000,
5782
+ ore: 30000,
5783
+ crystal: 40000,
5778
5784
  gas: 15000,
5779
- mineral: 22000,
5780
- organic: 15000,
5785
+ regolith: 22000,
5786
+ biomass: 15000,
5781
5787
  };
5782
5788
  function computeInputMass(itemId, itemType) {
5783
5789
  if (itemType === 'component') {
@@ -5915,7 +5921,7 @@ function synthesizeItem(id, source) {
5915
5921
  name: source.name,
5916
5922
  description: source.description,
5917
5923
  mass: source.mass,
5918
- category: 'metal',
5924
+ category: 'ore',
5919
5925
  tier: 't1',
5920
5926
  color: source.color,
5921
5927
  });
@@ -7097,10 +7103,10 @@ class Ship extends Types.entity_info {
7097
7103
  function computeShipHullCapabilities(stats) {
7098
7104
  const density = stats.density ?? 500;
7099
7105
  const strength = stats.strength ?? 500;
7100
- const ductility = stats.ductility ?? 500;
7101
- const purity = stats.purity ?? 500;
7106
+ const fineness = stats.fineness ?? 500;
7107
+ const saturation = stats.saturation ?? 500;
7102
7108
  const hullmass = 25000 + 75 * density;
7103
- const statSum = strength + ductility + purity;
7109
+ const statSum = strength + fineness + saturation;
7104
7110
  const exponent = statSum / 2997.0;
7105
7111
  const capacity = Math.floor(1000000 * Math.pow(10, exponent));
7106
7112
  return { hullmass, capacity };
@@ -7115,10 +7121,10 @@ function computeEngineCapabilities(stats) {
7115
7121
  }
7116
7122
  function computeGeneratorCapabilities(stats) {
7117
7123
  const res = stats.resonance ?? 500;
7118
- const clr = stats.clarity ?? 500;
7124
+ const ref = stats.reflectivity ?? 500;
7119
7125
  return {
7120
7126
  capacity: 300 + Math.floor(res / 6),
7121
- recharge: 1 + Math.floor((clr * 3) / 1000),
7127
+ recharge: 1 + Math.floor((ref * 3) / 1000),
7122
7128
  };
7123
7129
  }
7124
7130
  function computeGathererCapabilities(stats) {
@@ -7134,47 +7140,47 @@ function computeGathererCapabilities(stats) {
7134
7140
  };
7135
7141
  }
7136
7142
  function computeLoaderCapabilities(stats) {
7137
- const duc = stats.ductility ?? 500;
7143
+ const fin = stats.fineness ?? 500;
7138
7144
  const pla = stats.plasticity ?? 500;
7139
7145
  return {
7140
- mass: Math.max(200, 2000 - Math.floor(duc * 2)),
7146
+ mass: Math.max(200, 2000 - Math.floor(fin * 2)),
7141
7147
  thrust: 1 + Math.floor(pla / 500),
7142
7148
  quantity: 1,
7143
7149
  };
7144
7150
  }
7145
7151
  function computeManufacturingCapabilities(stats) {
7146
7152
  const rea = stats.reactivity ?? 500;
7147
- const clr = stats.clarity ?? 500;
7153
+ const com = stats.composition ?? 500;
7148
7154
  return {
7149
7155
  speed: 100 + Math.floor((rea * 4) / 5),
7150
- drain: Math.max(5, 30 - Math.floor(clr / 33)),
7156
+ drain: Math.max(5, 30 - Math.floor(com / 33)),
7151
7157
  };
7152
7158
  }
7153
7159
  function computeHaulerCapabilities(stats) {
7154
7160
  const res = stats.resonance ?? 500;
7155
7161
  const con = stats.conductivity ?? 500;
7156
- const clr = stats.clarity ?? 500;
7162
+ const ref = stats.reflectivity ?? 500;
7157
7163
  return {
7158
7164
  capacity: Math.max(1, 1 + Math.floor(res / 400)),
7159
7165
  efficiency: 2000 + con * 6,
7160
- drain: Math.max(3, 15 - Math.floor(clr / 80)),
7166
+ drain: Math.max(3, 15 - Math.floor(ref / 80)),
7161
7167
  };
7162
7168
  }
7163
7169
  function computeStorageCapabilities(stats, baseCapacity) {
7164
7170
  const strength = stats.strength ?? 500;
7165
- const ductility = stats.ductility ?? 500;
7166
- const purity = stats.purity ?? 500;
7167
- const statSum = strength + ductility + purity;
7171
+ const fineness = stats.fineness ?? 500;
7172
+ const saturation = stats.saturation ?? 500;
7173
+ const statSum = strength + fineness + saturation;
7168
7174
  const capacityBonus = Math.floor((baseCapacity * (10 + Math.floor((statSum * 10) / 2997))) / 100);
7169
7175
  return { capacityBonus };
7170
7176
  }
7171
7177
  function computeWarehouseHullCapabilities(stats) {
7172
7178
  const density = stats.density ?? 500;
7173
7179
  const strength = stats.strength ?? 500;
7174
- const ductility = stats.ductility ?? 500;
7175
- const purity = stats.purity ?? 500;
7180
+ const fineness = stats.fineness ?? 500;
7181
+ const saturation = stats.saturation ?? 500;
7176
7182
  const hullmass = 25000 + 75 * density;
7177
- const statSum = strength + ductility + purity;
7183
+ const statSum = strength + fineness + saturation;
7178
7184
  const exponent = statSum / 2997.0;
7179
7185
  const capacity = Math.floor(20000000 * Math.pow(10, exponent));
7180
7186
  return { hullmass, capacity };
@@ -7384,10 +7390,10 @@ class Container extends Types.entity_info {
7384
7390
  function computeContainerCapabilities(stats) {
7385
7391
  const density = stats['density'] ?? 500;
7386
7392
  const strength = stats['strength'] ?? 500;
7387
- const ductility = stats['ductility'] ?? 500;
7388
- const purity = stats['purity'] ?? 500;
7393
+ const fineness = stats['fineness'] ?? 500;
7394
+ const saturation = stats['saturation'] ?? 500;
7389
7395
  const hullmass = 25000 + 75 * density;
7390
- const statSum = strength + ductility + purity;
7396
+ const statSum = strength + fineness + saturation;
7391
7397
  const exponent = statSum / 2997;
7392
7398
  const capacity = Math.floor(1000000 * Math.pow(10, exponent));
7393
7399
  return { hullmass, capacity };
@@ -7395,10 +7401,10 @@ function computeContainerCapabilities(stats) {
7395
7401
  function computeContainerT2Capabilities(stats) {
7396
7402
  const strength = stats['strength'] ?? 0;
7397
7403
  const density = stats['density'] ?? 0;
7398
- const ductility = stats['ductility'] ?? 0;
7399
- const purity = stats['purity'] ?? 0;
7404
+ const fineness = stats['fineness'] ?? 0;
7405
+ const saturation = stats['saturation'] ?? 0;
7400
7406
  const hullmass = 20000 + 50 * density;
7401
- const statSum = strength + ductility + purity;
7407
+ const statSum = strength + fineness + saturation;
7402
7408
  const exponent = statSum / 2500;
7403
7409
  const capacity = Math.floor(1500000 * Math.pow(10, exponent));
7404
7410
  return { hullmass, capacity };
@@ -8127,11 +8133,11 @@ function computeHaulerDrain(distance, drain, haulCount) {
8127
8133
  }
8128
8134
 
8129
8135
  const categoryColors = {
8130
- metal: '#5B9BD5',
8131
- precious: '#D4A843',
8132
- gas: '#7EC8E3',
8133
- mineral: '#B8A9C9',
8134
- organic: '#6B8E5A',
8136
+ ore: '#C26D3F',
8137
+ crystal: '#4ADBFF',
8138
+ gas: '#B8E4A0',
8139
+ regolith: '#C4A57B',
8140
+ biomass: '#5A8B3E',
8135
8141
  };
8136
8142
  const tierColors = {
8137
8143
  t1: '#8b8b8b',
@@ -8148,18 +8154,18 @@ const tierLabels = {
8148
8154
  t5: 'Legendary',
8149
8155
  };
8150
8156
  const categoryIcons = {
8151
- metal: '⬡',
8152
- precious: '◈',
8157
+ ore: '⬡',
8158
+ crystal: '◈',
8153
8159
  gas: '◎',
8154
- mineral: '',
8155
- organic: '❋',
8160
+ regolith: '',
8161
+ biomass: '❋',
8156
8162
  };
8157
8163
  const categoryIconShapes = {
8158
- metal: 'hex',
8159
- precious: 'diamond',
8164
+ ore: 'hex',
8165
+ crystal: 'diamond',
8160
8166
  gas: 'circle',
8161
- mineral: 'square',
8162
- organic: 'star',
8167
+ regolith: 'square',
8168
+ biomass: 'star',
8163
8169
  };
8164
8170
  const componentIcon = '▣';
8165
8171
  const moduleIcon = '⬢';
@@ -8233,39 +8239,39 @@ function isCraftedItem(id) {
8233
8239
 
8234
8240
  const categories = [
8235
8241
  {
8236
- id: 'metal',
8237
- name: 'Metals',
8238
- label: 'Metal',
8239
- description: 'Structural, strong, heavy — hulls, frames, load-bearing components',
8240
- color: categoryColors.metal,
8242
+ id: 'ore',
8243
+ name: 'Ore',
8244
+ label: 'Ore',
8245
+ description: 'Structural metal-bearing rock — hulls, frames, load-bearing components',
8246
+ color: categoryColors.ore,
8241
8247
  },
8242
8248
  {
8243
- id: 'precious',
8244
- name: 'Precious Metals',
8245
- label: 'Precious Metal',
8246
- description: 'Conductive, corrosion-resistantelectronics, energy systems, precision components',
8247
- color: categoryColors.precious,
8249
+ id: 'crystal',
8250
+ name: 'Crystal',
8251
+ label: 'Crystal',
8252
+ description: 'Crystalline latticeconductors, energy storage, resonant systems',
8253
+ color: categoryColors.crystal,
8248
8254
  },
8249
8255
  {
8250
8256
  id: 'gas',
8251
- name: 'Gases',
8257
+ name: 'Gas',
8252
8258
  label: 'Gas',
8253
- description: 'Energy, fuel, volatile/reactive — propulsion, thermal processing, chemical reactions',
8259
+ description: 'Atmospheric volatile — propulsion, thermal processing, chemical reactions',
8254
8260
  color: categoryColors.gas,
8255
8261
  },
8256
8262
  {
8257
- id: 'mineral',
8258
- name: 'Minerals',
8259
- label: 'Mineral',
8260
- description: 'Crystalline, hard, precise — sensors, optics, energy storage, cutting surfaces',
8261
- color: categoryColors.mineral,
8263
+ id: 'regolith',
8264
+ name: 'Regolith',
8265
+ label: 'Regolith',
8266
+ description: 'Surface mineral dust — sensors, optics, computation, cutting surfaces',
8267
+ color: categoryColors.regolith,
8262
8268
  },
8263
8269
  {
8264
- id: 'organic',
8265
- name: 'Organics',
8266
- label: 'Organic',
8267
- description: 'Adaptive, biological, polymer — insulation, composites, bio-processes',
8268
- color: categoryColors.organic,
8270
+ id: 'biomass',
8271
+ name: 'Biomass',
8272
+ label: 'Biomass',
8273
+ description: 'Organic polymer — insulation, composites, bio-processes',
8274
+ color: categoryColors.biomass,
8269
8275
  },
8270
8276
  ];
8271
8277
  function getCategoryInfo(id) {
@@ -8747,14 +8753,14 @@ function resolveComponent(id, stats) {
8747
8753
  if (stats !== undefined) {
8748
8754
  const decoded = decodeCraftedItemStats(id, toBigStats(stats));
8749
8755
  resolvedStats = Object.entries(decoded).map(([key, value]) => {
8750
- const allDefs = getStatDefinitions('metal')
8751
- .concat(getStatDefinitions('precious'))
8756
+ const allDefs = getStatDefinitions('ore')
8757
+ .concat(getStatDefinitions('crystal'))
8752
8758
  .concat(getStatDefinitions('gas'))
8753
- .concat(getStatDefinitions('mineral'))
8754
- .concat(getStatDefinitions('organic'));
8759
+ .concat(getStatDefinitions('regolith'))
8760
+ .concat(getStatDefinitions('biomass'));
8755
8761
  const def = allDefs.find((d) => d.key === key);
8756
8762
  const statDef = comp.stats.find((s) => s.key === key);
8757
- const cat = (statDef?.source ?? 'metal');
8763
+ const cat = (statDef?.source ?? 'ore');
8758
8764
  return {
8759
8765
  key,
8760
8766
  label: def?.label ?? key,
@@ -8845,9 +8851,9 @@ function computeCapabilityGroup(moduleType, stats) {
8845
8851
  }
8846
8852
  case MODULE_STORAGE: {
8847
8853
  const str = stats.strength ?? 500;
8848
- const duc = stats.ductility ?? 500;
8849
- const pur = stats.purity ?? 500;
8850
- const statSum = str + duc + pur;
8854
+ const fin = stats.fineness ?? 500;
8855
+ const sat = stats.saturation ?? 500;
8856
+ const statSum = str + fin + sat;
8851
8857
  const pct = 10 + Math.floor((statSum * 10) / 2997);
8852
8858
  return { capability: 'Storage', attributes: [{ label: 'Capacity Bonus', value: pct }] };
8853
8859
  }
@@ -9136,25 +9142,25 @@ function computeBaseCapacityWarehouse(stats) {
9136
9142
  const computeEngineThrust = (vol) => 400 + idiv(vol * 3, 4);
9137
9143
  const computeEngineDrain = (thm) => Math.max(30, 50 - idiv(thm, 70));
9138
9144
  const computeGeneratorCap = (res) => 300 + idiv(res, 6);
9139
- const computeGeneratorRech = (clr) => 1 + idiv(clr * 3, 1000);
9145
+ const computeGeneratorRech = (ref) => 1 + idiv(ref * 3, 1000);
9140
9146
  const computeGathererYield = (str) => 200 + str;
9141
9147
  const computeGathererDrain = (con) => Math.max(250, 1250 - idiv(con * 25, 20));
9142
9148
  const computeGathererDepth = (tol) => 200 + idiv(tol * 3, 2);
9143
9149
  const computeGathererSpeed = (ref) => 100 + idiv(ref * 4, 5);
9144
- const computeLoaderMass = (duc) => Math.max(200, 2000 - duc * 2);
9150
+ const computeLoaderMass = (fin) => Math.max(200, 2000 - fin * 2);
9145
9151
  const computeLoaderThrust = (pla) => 1 + idiv(pla, 500);
9146
9152
  const computeCrafterSpeed = (rea) => 100 + idiv(rea * 4, 5);
9147
- const computeCrafterDrain = (clr) => Math.max(5, 30 - idiv(clr, 33));
9153
+ const computeCrafterDrain = (com) => Math.max(5, 30 - idiv(com, 33));
9148
9154
  function entityDisplayName(itemId) {
9149
9155
  switch (itemId) {
9150
9156
  case ITEM_SHIP_T1_PACKED:
9151
- return 'Ship T1';
9157
+ return 'Ship';
9152
9158
  case ITEM_WAREHOUSE_T1_PACKED:
9153
- return 'Warehouse T1';
9159
+ return 'Warehouse';
9154
9160
  case ITEM_CONTAINER_T1_PACKED:
9155
- return 'Container T1';
9161
+ return 'Container';
9156
9162
  case ITEM_CONTAINER_T2_PACKED:
9157
- return 'Container T2';
9163
+ return 'Container';
9158
9164
  default:
9159
9165
  return 'Entity';
9160
9166
  }
@@ -9162,17 +9168,17 @@ function entityDisplayName(itemId) {
9162
9168
  function moduleDisplayName(itemId) {
9163
9169
  switch (itemId) {
9164
9170
  case ITEM_ENGINE_T1:
9165
- return 'Engine T1';
9171
+ return 'Engine';
9166
9172
  case ITEM_GENERATOR_T1:
9167
- return 'Generator T1';
9173
+ return 'Generator';
9168
9174
  case ITEM_GATHERER_T1:
9169
- return 'Gatherer T1';
9175
+ return 'Gatherer';
9170
9176
  case ITEM_LOADER_T1:
9171
- return 'Loader T1';
9177
+ return 'Loader';
9172
9178
  case ITEM_MANUFACTURING_T1:
9173
- return 'Manufacturing T1';
9179
+ return 'Manufacturing';
9174
9180
  case ITEM_STORAGE_T1:
9175
- return 'Storage T1';
9181
+ return 'Storage';
9176
9182
  default:
9177
9183
  return 'Module';
9178
9184
  }
@@ -9194,8 +9200,8 @@ function formatModuleLine(slot, itemId, stats) {
9194
9200
  }
9195
9201
  case MODULE_GENERATOR: {
9196
9202
  const res = decodeStat(stats, 0);
9197
- const clr = decodeStat(stats, 1);
9198
- out += ` Capacity ${computeGeneratorCap(res)} Recharge ${computeGeneratorRech(clr)}`;
9203
+ const ref = decodeStat(stats, 1);
9204
+ out += ` Capacity ${computeGeneratorCap(res)} Recharge ${computeGeneratorRech(ref)}`;
9199
9205
  break;
9200
9206
  }
9201
9207
  case MODULE_GATHERER: {
@@ -9207,22 +9213,22 @@ function formatModuleLine(slot, itemId, stats) {
9207
9213
  break;
9208
9214
  }
9209
9215
  case MODULE_LOADER: {
9210
- const duc = decodeStat(stats, 0);
9216
+ const fin = decodeStat(stats, 0);
9211
9217
  const pla = decodeStat(stats, 1);
9212
- out += ` Mass ${computeLoaderMass(duc)} Thrust ${computeLoaderThrust(pla)}`;
9218
+ out += ` Mass ${computeLoaderMass(fin)} Thrust ${computeLoaderThrust(pla)}`;
9213
9219
  break;
9214
9220
  }
9215
9221
  case MODULE_CRAFTER: {
9216
9222
  const rea = decodeStat(stats, 0);
9217
- const clr = decodeStat(stats, 1);
9218
- out += ` Speed ${computeCrafterSpeed(rea)} Drain ${computeCrafterDrain(clr)}`;
9223
+ const com = decodeStat(stats, 1);
9224
+ out += ` Speed ${computeCrafterSpeed(rea)} Drain ${computeCrafterDrain(com)}`;
9219
9225
  break;
9220
9226
  }
9221
9227
  case MODULE_STORAGE: {
9222
9228
  const str = decodeStat(stats, 0);
9223
- const duc = decodeStat(stats, 1);
9224
- const pur = decodeStat(stats, 2);
9225
- const sum = str + duc + pur;
9229
+ const fin = decodeStat(stats, 2);
9230
+ const sat = decodeStat(stats, 3);
9231
+ const sum = str + fin + sat;
9226
9232
  const pct = 10 + idiv(sum * 10, 2997);
9227
9233
  out += ` +${pct}% capacity`;
9228
9234
  break;
@@ -9282,6 +9288,63 @@ var index = /*#__PURE__*/Object.freeze({
9282
9288
  buildEntityDescription: buildEntityDescription
9283
9289
  });
9284
9290
 
9291
+ function formatMass(kg) {
9292
+ const t = kg / 1000;
9293
+ const fixed = t.toFixed(2);
9294
+ const trimmed = fixed.replace(/\.?0+$/, '');
9295
+ return `${trimmed} t`;
9296
+ }
9297
+ function formatMassDelta(kg) {
9298
+ if (kg === 0)
9299
+ return '0 t';
9300
+ const sign = kg > 0 ? '+' : '-';
9301
+ return `${sign}${formatMass(Math.abs(kg))}`;
9302
+ }
9303
+
9304
+ const TIER_ADJECTIVES = {
9305
+ 1: 'Crude',
9306
+ 2: 'Dense',
9307
+ 3: 'Pure',
9308
+ 4: 'Prime',
9309
+ 5: 'Pristine',
9310
+ 6: 'Radiant',
9311
+ 7: 'Exotic',
9312
+ 8: 'Mythic',
9313
+ 9: 'Cosmic',
9314
+ 10: 'Ascendant',
9315
+ };
9316
+ const CATEGORY_LABELS = {
9317
+ ore: 'Ore',
9318
+ crystal: 'Crystal',
9319
+ gas: 'Gas',
9320
+ regolith: 'Regolith',
9321
+ biomass: 'Biomass',
9322
+ };
9323
+ function tierNumber(tier) {
9324
+ return Number(String(tier).replace(/^t/i, ''));
9325
+ }
9326
+ function displayName(resolved) {
9327
+ if (resolved.itemType === 'resource') {
9328
+ const tierNum = tierNumber(resolved.tier);
9329
+ const adj = TIER_ADJECTIVES[tierNum] ?? 'Unknown';
9330
+ const cat = resolved.category ? CATEGORY_LABELS[resolved.category] : 'Resource';
9331
+ return `${adj} ${cat}`;
9332
+ }
9333
+ return resolved.name;
9334
+ }
9335
+ function describeItem(resolved, opts) {
9336
+ const massFmt = opts?.formatMass ?? formatMass;
9337
+ const mass = massFmt(resolved.mass);
9338
+ const tier = `T${tierNumber(resolved.tier)}`;
9339
+ if (resolved.itemType === 'resource') {
9340
+ const cat = resolved.category ? CATEGORY_LABELS[resolved.category] : 'Resource';
9341
+ const header = `${tier} ${cat}`;
9342
+ const stats = resolved.stats?.map((s) => `${s.label} ${s.value}`).join(', ');
9343
+ return [header, stats, mass].filter(Boolean).join(' · ');
9344
+ }
9345
+ return `${tier} ${resolved.name} · ${mass}`;
9346
+ }
9347
+
9285
9348
  exports.ActionsManager = ActionsManager;
9286
9349
  exports.BASE_ORBITAL_MASS = BASE_ORBITAL_MASS;
9287
9350
  exports.COMMIT_ALREADY_SET = COMMIT_ALREADY_SET;
@@ -9511,6 +9574,7 @@ exports.deriveLocationSize = deriveLocationSize;
9511
9574
  exports.deriveLocationStatic = deriveLocationStatic;
9512
9575
  exports.deriveResourceStats = deriveResourceStats;
9513
9576
  exports.deriveStratum = deriveStratum;
9577
+ exports.describeItem = describeItem;
9514
9578
  exports.describeModule = describeModule;
9515
9579
  exports.describeModuleForItem = describeModuleForItem;
9516
9580
  exports.describeModuleForSlot = describeModuleForSlot;
@@ -9519,6 +9583,7 @@ exports.deserializeComponent = deserializeComponent;
9519
9583
  exports.deserializeEntity = deserializeEntity;
9520
9584
  exports.deserializeModule = deserializeModule;
9521
9585
  exports.deserializeResource = deserializeResource;
9586
+ exports.displayName = displayName;
9522
9587
  exports.distanceBetweenCoordinates = distanceBetweenCoordinates;
9523
9588
  exports.distanceBetweenPoints = distanceBetweenPoints;
9524
9589
  exports.encodeGatheredCargoStats = encodeGatheredCargoStats;
@@ -9529,6 +9594,8 @@ exports.entityRecipes = entityRecipes;
9529
9594
  exports.estimateDealTravelTime = estimateDealTravelTime;
9530
9595
  exports.estimateTravelTime = estimateTravelTime;
9531
9596
  exports.findNearbyPlanets = findNearbyPlanets;
9597
+ exports.formatMass = formatMass;
9598
+ exports.formatMassDelta = formatMassDelta;
9532
9599
  exports.formatModuleLine = formatModuleLine;
9533
9600
  exports.getAllCraftableItems = getAllCraftableItems;
9534
9601
  exports.getCapabilityAttributes = getCapabilityAttributes;