@shipload/sdk 2.0.0-rc14 → 2.0.0-rc16

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
@@ -2212,7 +2212,36 @@ function coordsToLocationId(coords) {
2212
2212
  const id = (x << BigInt(32)) | y;
2213
2213
  return antelope.UInt64.from(id);
2214
2214
  }
2215
+ const TIER_ADJECTIVES = {
2216
+ 1: 'Crude',
2217
+ 2: 'Dense',
2218
+ 3: 'Pure',
2219
+ 4: 'Prime',
2220
+ 5: 'Pristine',
2221
+ 6: 'Radiant',
2222
+ 7: 'Exotic',
2223
+ 8: 'Mythic',
2224
+ 9: 'Cosmic',
2225
+ 10: 'Ascendant',
2226
+ };
2227
+ const CATEGORY_LABELS = {
2228
+ ore: 'Ore',
2229
+ crystal: 'Crystal',
2230
+ gas: 'Gas',
2231
+ regolith: 'Regolith',
2232
+ biomass: 'Biomass',
2233
+ };
2234
+ function tierNumber(tier) {
2235
+ return Number(String(tier).replace(/^t/i, ''));
2236
+ }
2215
2237
  exports.Item = class Item extends antelope.Struct {
2238
+ get displayName() {
2239
+ if (this.name && this.name.length > 0)
2240
+ return this.name;
2241
+ const adj = TIER_ADJECTIVES[tierNumber(this.tier)] ?? 'Unknown';
2242
+ const cat = CATEGORY_LABELS[this.category] ?? 'Resource';
2243
+ return `${adj} ${cat}`;
2244
+ }
2216
2245
  };
2217
2246
  tslib.__decorate([
2218
2247
  antelope.Struct.field(antelope.UInt16)
@@ -2281,21 +2310,21 @@ const PLANET_SUBTYPE_ICY = 3;
2281
2310
  const PLANET_SUBTYPE_OCEAN = 4;
2282
2311
  const PLANET_SUBTYPE_INDUSTRIAL = 5;
2283
2312
  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' },
2313
+ { id: 101, tier: 't1' },
2314
+ { id: 102, tier: 't2' },
2315
+ { id: 103, tier: 't3' },
2316
+ { id: 201, tier: 't1' },
2317
+ { id: 202, tier: 't2' },
2318
+ { id: 203, tier: 't3' },
2319
+ { id: 301, tier: 't1' },
2320
+ { id: 302, tier: 't2' },
2321
+ { id: 303, tier: 't3' },
2322
+ { id: 401, tier: 't1' },
2323
+ { id: 402, tier: 't2' },
2324
+ { id: 403, tier: 't3' },
2325
+ { id: 501, tier: 't1' },
2326
+ { id: 502, tier: 't2' },
2327
+ { id: 503, tier: 't3' },
2299
2328
  ];
2300
2329
  function getDepthThreshold(tier) {
2301
2330
  switch (tier) {
@@ -2352,14 +2381,14 @@ function getResourceWeight(itemId, stratum) {
2352
2381
  return 10;
2353
2382
  }
2354
2383
  }
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];
2384
+ const ASTEROID_RESOURCES = [101, 102, 103, 201, 202];
2385
+ const NEBULA_RESOURCES = [202, 203, 301, 302, 303];
2386
+ const GAS_GIANT_RESOURCES = [301, 302, 303, 401, 501];
2387
+ const ROCKY_RESOURCES = [101, 102, 103, 401, 402, 403, 503];
2388
+ const TERRESTRIAL_RESOURCES = [201, 202, 401, 402, 501, 502, 503];
2389
+ const ICY_RESOURCES = [101, 301, 302, 401, 403, 501, 502];
2390
+ const OCEAN_RESOURCES = [201, 203, 301, 303, 501, 502, 503];
2391
+ const INDUSTRIAL_RESOURCES = [101, 102, 103, 201, 203, 402, 403];
2363
2392
  function getLocationCandidates(locationType, subtype) {
2364
2393
  if (locationType === 2)
2365
2394
  return ASTEROID_RESOURCES;
@@ -4780,139 +4809,139 @@ class BaseManager {
4780
4809
 
4781
4810
  var itemsData = [
4782
4811
  {
4783
- id: 26,
4784
- name: "Iron",
4785
- description: "A versatile metal used in hulls and structures.",
4812
+ id: 101,
4813
+ name: "",
4814
+ description: "",
4786
4815
  mass: 30000,
4787
- category: "metal",
4816
+ category: "ore",
4788
4817
  tier: "t1",
4789
- color: "#B7410E"
4818
+ color: "#C26D3F"
4790
4819
  },
4791
4820
  {
4792
- id: 13,
4793
- name: "Aluminum",
4794
- description: "A lightweight metal for structural components.",
4821
+ id: 102,
4822
+ name: "",
4823
+ description: "",
4795
4824
  mass: 27000,
4796
- category: "metal",
4825
+ category: "ore",
4797
4826
  tier: "t2",
4798
- color: "#A8B5C2"
4827
+ color: "#C26D3F"
4799
4828
  },
4800
4829
  {
4801
- id: 24,
4802
- name: "Chromium",
4803
- description: "A hard, corrosion-resistant alloy metal.",
4830
+ id: 103,
4831
+ name: "",
4832
+ description: "",
4804
4833
  mass: 52000,
4805
- category: "metal",
4834
+ category: "ore",
4806
4835
  tier: "t3",
4807
- color: "#D4E6F1"
4836
+ color: "#C26D3F"
4808
4837
  },
4809
4838
  {
4810
- id: 29,
4811
- name: "Copper",
4812
- description: "A conductive metal for electronics and wiring.",
4839
+ id: 201,
4840
+ name: "",
4841
+ description: "",
4813
4842
  mass: 40000,
4814
- category: "precious",
4843
+ category: "crystal",
4815
4844
  tier: "t1",
4816
- color: "#B87333"
4845
+ color: "#4ADBFF"
4817
4846
  },
4818
4847
  {
4819
- id: 47,
4820
- name: "Silver",
4821
- description: "A high-conductivity metal for precision components.",
4848
+ id: 202,
4849
+ name: "",
4850
+ description: "",
4822
4851
  mass: 55000,
4823
- category: "precious",
4852
+ category: "crystal",
4824
4853
  tier: "t2",
4825
- color: "#C0C0C0"
4854
+ color: "#4ADBFF"
4826
4855
  },
4827
4856
  {
4828
- id: 79,
4829
- name: "Gold",
4830
- description: "A corrosion-proof metal for advanced electronics.",
4857
+ id: 203,
4858
+ name: "",
4859
+ description: "",
4831
4860
  mass: 70000,
4832
- category: "precious",
4861
+ category: "crystal",
4833
4862
  tier: "t3",
4834
- color: "#FFD700"
4863
+ color: "#4ADBFF"
4835
4864
  },
4836
4865
  {
4837
- id: 1,
4838
- name: "Hydrogen",
4839
- description: "A lightweight gas used for fuel cells and propulsion.",
4866
+ id: 301,
4867
+ name: "",
4868
+ description: "",
4840
4869
  mass: 15000,
4841
4870
  category: "gas",
4842
4871
  tier: "t1",
4843
- color: "#7EC8E3"
4872
+ color: "#B8E4A0"
4844
4873
  },
4845
4874
  {
4846
- id: 2,
4847
- name: "Helium",
4848
- description: "An inert noble gas used in energy systems.",
4875
+ id: 302,
4876
+ name: "",
4877
+ description: "",
4849
4878
  mass: 2000,
4850
4879
  category: "gas",
4851
4880
  tier: "t2",
4852
- color: "#F5E6CC"
4881
+ color: "#B8E4A0"
4853
4882
  },
4854
4883
  {
4855
- id: 18,
4856
- name: "Argon",
4857
- description: "A noble gas used in industrial and energy applications.",
4884
+ id: 303,
4885
+ name: "",
4886
+ description: "",
4858
4887
  mass: 8000,
4859
4888
  category: "gas",
4860
4889
  tier: "t3",
4861
- color: "#9B59B6"
4890
+ color: "#B8E4A0"
4862
4891
  },
4863
4892
  {
4864
- id: 14,
4865
- name: "Silicon",
4866
- description: "A semiconductor used in sensors and computing.",
4893
+ id: 401,
4894
+ name: "",
4895
+ description: "",
4867
4896
  mass: 22000,
4868
- category: "mineral",
4897
+ category: "regolith",
4869
4898
  tier: "t1",
4870
- color: "#B8A9C9"
4899
+ color: "#C4A57B"
4871
4900
  },
4872
4901
  {
4873
- id: 1000,
4874
- name: "Quartz",
4875
- description: "A crystalline mineral for sensors and optics.",
4902
+ id: 402,
4903
+ name: "",
4904
+ description: "",
4876
4905
  mass: 35000,
4877
- category: "mineral",
4906
+ category: "regolith",
4878
4907
  tier: "t2",
4879
- color: "#E8D5B7"
4908
+ color: "#C4A57B"
4880
4909
  },
4881
4910
  {
4882
- id: 1001,
4883
- name: "Sapphire",
4884
- description: "A precious crystal for precision instruments.",
4911
+ id: 403,
4912
+ name: "",
4913
+ description: "",
4885
4914
  mass: 45000,
4886
- category: "mineral",
4915
+ category: "regolith",
4887
4916
  tier: "t3",
4888
- color: "#0F52BA"
4917
+ color: "#C4A57B"
4889
4918
  },
4890
4919
  {
4891
- id: 6,
4892
- name: "Carbon",
4893
- description: "A versatile element for life support and coatings.",
4920
+ id: 501,
4921
+ name: "",
4922
+ description: "",
4894
4923
  mass: 15000,
4895
- category: "organic",
4924
+ category: "biomass",
4896
4925
  tier: "t1",
4897
- color: "#4A4A4A"
4926
+ color: "#5A8B3E"
4898
4927
  },
4899
4928
  {
4900
- id: 1003,
4901
- name: "Biomass",
4902
- description: "Organic matter for life support systems.",
4929
+ id: 502,
4930
+ name: "",
4931
+ description: "",
4903
4932
  mass: 30000,
4904
- category: "organic",
4933
+ category: "biomass",
4905
4934
  tier: "t2",
4906
- color: "#8B4513"
4935
+ color: "#5A8B3E"
4907
4936
  },
4908
4937
  {
4909
- id: 1002,
4910
- name: "Resin",
4911
- description: "A fossilized organic compound for coatings and sealants.",
4938
+ id: 503,
4939
+ name: "",
4940
+ description: "",
4912
4941
  mass: 25000,
4913
- category: "organic",
4942
+ category: "biomass",
4914
4943
  tier: "t3",
4915
- color: "#DAA520"
4944
+ color: "#5A8B3E"
4916
4945
  }
4917
4946
  ];
4918
4947
 
@@ -4980,38 +5009,38 @@ const components = [
4980
5009
  {
4981
5010
  id: ITEM_HULL_PLATES,
4982
5011
  name: 'Hull Plates',
4983
- description: 'Structural plating formed from metal. Used in hulls, containers, and frames.',
5012
+ description: 'Structural plating formed from ore. Used in hulls, containers, and frames.',
4984
5013
  color: '#7B8D9E',
4985
5014
  mass: 50000,
4986
5015
  stats: [
4987
- { key: 'strength', source: 'metal' },
4988
- { key: 'density', source: 'metal' },
5016
+ { key: 'strength', source: 'ore' },
5017
+ { key: 'density', source: 'ore' },
4989
5018
  ],
4990
- recipe: [{ category: 'metal', quantity: 15 }],
5019
+ recipe: [{ category: 'ore', quantity: 15 }],
4991
5020
  usedIn: [
4992
5021
  { type: 'entity', name: 'Container' },
4993
- { type: 'entity', name: 'Warehouse T1' },
4994
- { type: 'entity', name: 'Ship T1' },
5022
+ { type: 'entity', name: 'Warehouse' },
5023
+ { type: 'entity', name: 'Ship' },
4995
5024
  ],
4996
5025
  },
4997
5026
  {
4998
5027
  id: ITEM_CARGO_LINING,
4999
5028
  name: 'Cargo Lining',
5000
- description: 'Precision-formed composite lining for cargo storage. Combines precious metal shaping with organic sealing.',
5001
- color: '#D4A843',
5029
+ description: 'Composite lining formed from fine regolith bound in biomass polymer. Dense enough to seal cargo holds, flexible enough to absorb vibration.',
5030
+ color: '#C4A57B',
5002
5031
  mass: 30000,
5003
5032
  stats: [
5004
- { key: 'ductility', source: 'precious' },
5005
- { key: 'purity', source: 'organic' },
5033
+ { key: 'fineness', source: 'regolith' },
5034
+ { key: 'saturation', source: 'biomass' },
5006
5035
  ],
5007
5036
  recipe: [
5008
- { category: 'precious', quantity: 6 },
5009
- { category: 'organic', quantity: 14 },
5037
+ { category: 'regolith', quantity: 10 },
5038
+ { category: 'biomass', quantity: 20 },
5010
5039
  ],
5011
5040
  usedIn: [
5012
5041
  { type: 'entity', name: 'Container' },
5013
- { type: 'entity', name: 'Warehouse T1' },
5014
- { type: 'entity', name: 'Ship T1' },
5042
+ { type: 'module', name: 'Loader' },
5043
+ { type: 'module', name: 'Storage' },
5015
5044
  ],
5016
5045
  },
5017
5046
  {
@@ -5030,73 +5059,76 @@ const components = [
5030
5059
  {
5031
5060
  id: ITEM_POWER_CELL,
5032
5061
  name: 'Power Cell',
5033
- description: 'Crystalline energy storage matrix formed from resonant minerals.',
5034
- color: '#7B5AE8',
5062
+ description: 'Crystalline energy storage matrix. Resonant lattices retain and release charge.',
5063
+ color: '#4ADBFF',
5035
5064
  mass: 30000,
5036
5065
  stats: [
5037
- { key: 'resonance', source: 'mineral' },
5038
- { key: 'clarity', source: 'mineral' },
5066
+ { key: 'resonance', source: 'crystal' },
5067
+ { key: 'reflectivity', source: 'crystal' },
5068
+ ],
5069
+ recipe: [{ category: 'crystal', quantity: 20 }],
5070
+ usedIn: [
5071
+ { type: 'module', name: 'Generator' },
5072
+ { type: 'module', name: 'Hauler' },
5039
5073
  ],
5040
- recipe: [{ category: 'mineral', quantity: 20 }],
5041
- usedIn: [{ type: 'module', name: 'Generator' }],
5042
5074
  },
5043
5075
  {
5044
5076
  id: ITEM_MATTER_CONDUIT,
5045
5077
  name: 'Matter Conduit',
5046
- description: 'Heavy-duty metal shaft used in gathering equipment.',
5078
+ description: 'Heavy-duty ore shaft used in gathering equipment.',
5047
5079
  color: '#7B8D9E',
5048
5080
  mass: 50000,
5049
5081
  stats: [
5050
- { key: 'strength', source: 'metal' },
5051
- { key: 'tolerance', source: 'metal' },
5082
+ { key: 'strength', source: 'ore' },
5083
+ { key: 'tolerance', source: 'ore' },
5052
5084
  ],
5053
- recipe: [{ category: 'metal', quantity: 15 }],
5085
+ recipe: [{ category: 'ore', quantity: 15 }],
5054
5086
  usedIn: [{ type: 'module', name: 'Gatherer' }],
5055
5087
  },
5056
5088
  {
5057
5089
  id: ITEM_SURVEY_PROBE,
5058
5090
  name: 'Survey Probe',
5059
- description: 'Precious metal sensor array for deep resource detection.',
5060
- color: '#D4A843',
5091
+ description: 'Crystal-lattice sensor array for deep resource detection.',
5092
+ color: '#4ADBFF',
5061
5093
  mass: 30000,
5062
5094
  stats: [
5063
- { key: 'conductivity', source: 'precious' },
5064
- { key: 'reflectivity', source: 'precious' },
5095
+ { key: 'conductivity', source: 'crystal' },
5096
+ { key: 'reflectivity', source: 'crystal' },
5065
5097
  ],
5066
- recipe: [{ category: 'precious', quantity: 10 }],
5098
+ recipe: [{ category: 'crystal', quantity: 10 }],
5067
5099
  usedIn: [{ type: 'module', name: 'Gatherer' }],
5068
5100
  },
5069
5101
  {
5070
5102
  id: ITEM_CARGO_ARM,
5071
5103
  name: 'Cargo Arm',
5072
- description: 'Flexible organic composite arm for cargo handling.',
5073
- color: '#6B8E5A',
5104
+ description: 'Flexible biomass composite arm for cargo handling.',
5105
+ color: '#5A8B3E',
5074
5106
  mass: 30000,
5075
5107
  stats: [
5076
- { key: 'plasticity', source: 'organic' },
5077
- { key: 'insulation', source: 'organic' },
5108
+ { key: 'plasticity', source: 'biomass' },
5109
+ { key: 'insulation', source: 'biomass' },
5078
5110
  ],
5079
- recipe: [{ category: 'organic', quantity: 32 }],
5111
+ recipe: [{ category: 'biomass', quantity: 32 }],
5080
5112
  usedIn: [{ type: 'module', name: 'Loader' }],
5081
5113
  },
5082
5114
  {
5083
5115
  id: ITEM_TOOL_BIT,
5084
5116
  name: 'Tool Bit',
5085
- description: 'Dense mineral cutting head for manufacturing operations.',
5086
- color: '#B8A9C9',
5117
+ description: 'Dense regolith cutting head for manufacturing operations.',
5118
+ color: '#C4A57B',
5087
5119
  mass: 30000,
5088
5120
  stats: [
5089
- { key: 'hardness', source: 'mineral' },
5090
- { key: 'clarity', source: 'mineral' },
5121
+ { key: 'hardness', source: 'regolith' },
5122
+ { key: 'composition', source: 'regolith' },
5091
5123
  ],
5092
- recipe: [{ category: 'mineral', quantity: 20 }],
5124
+ recipe: [{ category: 'regolith', quantity: 20 }],
5093
5125
  usedIn: [{ type: 'module', name: 'Manufacturing' }],
5094
5126
  },
5095
5127
  {
5096
5128
  id: ITEM_REACTION_CHAMBER,
5097
5129
  name: 'Reaction Chamber',
5098
5130
  description: 'Gas-pressurized vessel for controlled manufacturing reactions.',
5099
- color: '#7EC8E3',
5131
+ color: '#B8E4A0',
5100
5132
  mass: 50000,
5101
5133
  stats: [
5102
5134
  { key: 'reactivity', source: 'gas' },
@@ -5108,48 +5140,48 @@ const components = [
5108
5140
  {
5109
5141
  id: ITEM_FOCUSING_ARRAY,
5110
5142
  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',
5143
+ description: "Precision-formed crystal lens array. Routes the haul beam's energy efficiently to the target lock.",
5144
+ color: '#4ADBFF',
5113
5145
  mass: 40000,
5114
5146
  stats: [
5115
- { key: 'conductivity', source: 'precious' },
5116
- { key: 'ductility', source: 'precious' },
5147
+ { key: 'conductivity', source: 'crystal' },
5148
+ { key: 'resonance', source: 'crystal' },
5117
5149
  ],
5118
- recipe: [{ category: 'precious', quantity: 25 }],
5119
- usedIn: [{ type: 'module', name: 'Hauler Module T1' }],
5150
+ recipe: [{ category: 'crystal', quantity: 25 }],
5151
+ usedIn: [{ type: 'module', name: 'Hauler' }],
5120
5152
  },
5121
5153
  {
5122
5154
  id: ITEM_HULL_PLATES_T2,
5123
5155
  name: 'Hull Plates T2',
5124
- description: 'Advanced structural plating reinforced with tier 2 metals.',
5156
+ description: 'Advanced structural plating reinforced with tier 2 ore.',
5125
5157
  color: '#9BADB8',
5126
5158
  mass: 50000,
5127
5159
  stats: [
5128
- { key: 'strength', source: 'metal' },
5129
- { key: 'density', source: 'metal' },
5160
+ { key: 'strength', source: 'ore' },
5161
+ { key: 'density', source: 'ore' },
5130
5162
  ],
5131
5163
  recipe: [
5132
5164
  { itemId: ITEM_HULL_PLATES, quantity: 2 },
5133
- { category: 'metal', quantity: 15 },
5165
+ { category: 'ore', quantity: 15 },
5134
5166
  ],
5135
- usedIn: [{ type: 'entity', name: 'Container T2' }],
5167
+ usedIn: [{ type: 'entity', name: 'Container' }],
5136
5168
  },
5137
5169
  {
5138
5170
  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,
5171
+ name: 'Cargo Lining',
5172
+ description: 'Advanced composite lining reinforced with tier 2 regolith and biomass polymer.',
5173
+ color: '#C4A57B',
5174
+ mass: 45000,
5143
5175
  stats: [
5144
- { key: 'ductility', source: 'precious' },
5145
- { key: 'purity', source: 'organic' },
5176
+ { key: 'fineness', source: 'regolith' },
5177
+ { key: 'saturation', source: 'biomass' },
5146
5178
  ],
5147
5179
  recipe: [
5148
5180
  { itemId: ITEM_CARGO_LINING, quantity: 2 },
5149
- { category: 'precious', quantity: 6 },
5150
- { category: 'organic', quantity: 14 },
5181
+ { category: 'regolith', quantity: 5 },
5182
+ { category: 'biomass', quantity: 10 },
5151
5183
  ],
5152
- usedIn: [{ type: 'entity', name: 'Container T2' }],
5184
+ usedIn: [{ type: 'entity', name: 'Container' }],
5153
5185
  },
5154
5186
  ];
5155
5187
  const entityRecipes = [
@@ -5166,13 +5198,13 @@ const entityRecipes = [
5166
5198
  stats: [
5167
5199
  { key: 'strength', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'strength' },
5168
5200
  { 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' },
5201
+ { key: 'fineness', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'fineness' },
5202
+ { key: 'saturation', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'saturation' },
5171
5203
  ],
5172
5204
  },
5173
5205
  {
5174
5206
  id: 'ship-t1',
5175
- name: 'Ship T1',
5207
+ name: 'Ship',
5176
5208
  description: 'General-purpose vessel with 5 module slots.',
5177
5209
  color: '#4AE898',
5178
5210
  packedItemId: ITEM_SHIP_T1_PACKED,
@@ -5183,8 +5215,8 @@ const entityRecipes = [
5183
5215
  stats: [
5184
5216
  { key: 'strength', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'strength' },
5185
5217
  { 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' },
5218
+ { key: 'fineness', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'fineness' },
5219
+ { key: 'saturation', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'saturation' },
5188
5220
  ],
5189
5221
  moduleSlots: [
5190
5222
  { type: MODULE_ANY },
@@ -5196,7 +5228,7 @@ const entityRecipes = [
5196
5228
  },
5197
5229
  {
5198
5230
  id: 'warehouse-t1',
5199
- name: 'Warehouse T1',
5231
+ name: 'Warehouse',
5200
5232
  description: 'Massive stationary storage facility with a single loader module slot.',
5201
5233
  color: '#EAB308',
5202
5234
  packedItemId: ITEM_WAREHOUSE_T1_PACKED,
@@ -5207,8 +5239,8 @@ const entityRecipes = [
5207
5239
  stats: [
5208
5240
  { key: 'strength', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'strength' },
5209
5241
  { 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' },
5242
+ { key: 'fineness', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'fineness' },
5243
+ { key: 'saturation', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'saturation' },
5212
5244
  ],
5213
5245
  moduleSlots: [
5214
5246
  { type: MODULE_LOADER, label: 'Loader' },
@@ -5220,7 +5252,7 @@ const entityRecipes = [
5220
5252
  },
5221
5253
  {
5222
5254
  id: 'container-t2',
5223
- name: 'Container T2',
5255
+ name: 'Container',
5224
5256
  description: 'Advanced cargo container with improved capacity formulas.',
5225
5257
  color: '#9BADB8',
5226
5258
  packedItemId: ITEM_CONTAINER_T2_PACKED,
@@ -5231,8 +5263,12 @@ const entityRecipes = [
5231
5263
  stats: [
5232
5264
  { key: 'strength', sourceComponentId: ITEM_HULL_PLATES_T2, sourceStatKey: 'strength' },
5233
5265
  { 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' },
5266
+ { key: 'fineness', sourceComponentId: ITEM_CARGO_LINING_T2, sourceStatKey: 'fineness' },
5267
+ {
5268
+ key: 'saturation',
5269
+ sourceComponentId: ITEM_CARGO_LINING_T2,
5270
+ sourceStatKey: 'saturation',
5271
+ },
5236
5272
  ],
5237
5273
  },
5238
5274
  ];
@@ -5253,14 +5289,14 @@ const moduleRecipes = [
5253
5289
  {
5254
5290
  id: 'generator-t1',
5255
5291
  name: 'Generator',
5256
- description: 'Basic energy system. Stores and recharges energy from resonant minerals.',
5257
- color: '#7B5AE8',
5292
+ description: 'Basic energy system. Stores and recharges energy from resonant crystals.',
5293
+ color: '#4ADBFF',
5258
5294
  itemId: ITEM_GENERATOR_T1,
5259
5295
  moduleType: MODULE_GENERATOR,
5260
5296
  recipe: [{ itemId: ITEM_POWER_CELL, quantity: 5 }],
5261
5297
  stats: [
5262
5298
  { key: 'resonance', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'resonance' },
5263
- { key: 'clarity', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'clarity' },
5299
+ { key: 'reflectivity', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'reflectivity' },
5264
5300
  ],
5265
5301
  },
5266
5302
  {
@@ -5298,7 +5334,7 @@ const moduleRecipes = [
5298
5334
  id: 'loader-t1',
5299
5335
  name: 'Loader',
5300
5336
  description: 'Basic cargo handling system. Loads and unloads cargo with articulated arms.',
5301
- color: '#6B8E5A',
5337
+ color: '#5A8B3E',
5302
5338
  itemId: ITEM_LOADER_T1,
5303
5339
  moduleType: MODULE_LOADER,
5304
5340
  recipe: [
@@ -5306,7 +5342,7 @@ const moduleRecipes = [
5306
5342
  { itemId: ITEM_CARGO_ARM, quantity: 3 },
5307
5343
  ],
5308
5344
  stats: [
5309
- { key: 'ductility', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'ductility' },
5345
+ { key: 'fineness', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'fineness' },
5310
5346
  { key: 'plasticity', sourceComponentId: ITEM_CARGO_ARM, sourceStatKey: 'plasticity' },
5311
5347
  ],
5312
5348
  },
@@ -5314,7 +5350,7 @@ const moduleRecipes = [
5314
5350
  id: 'manufacturing-t1',
5315
5351
  name: 'Manufacturing',
5316
5352
  description: 'Basic crafting system. Processes materials using reaction chambers and cutting tools.',
5317
- color: '#7EC8E3',
5353
+ color: '#B8E4A0',
5318
5354
  itemId: ITEM_MANUFACTURING_T1,
5319
5355
  moduleType: MODULE_CRAFTER,
5320
5356
  recipe: [
@@ -5327,7 +5363,7 @@ const moduleRecipes = [
5327
5363
  sourceComponentId: ITEM_REACTION_CHAMBER,
5328
5364
  sourceStatKey: 'reactivity',
5329
5365
  },
5330
- { key: 'clarity', sourceComponentId: ITEM_TOOL_BIT, sourceStatKey: 'clarity' },
5366
+ { key: 'composition', sourceComponentId: ITEM_TOOL_BIT, sourceStatKey: 'composition' },
5331
5367
  ],
5332
5368
  },
5333
5369
  {
@@ -5343,16 +5379,16 @@ const moduleRecipes = [
5343
5379
  ],
5344
5380
  stats: [
5345
5381
  { 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' },
5382
+ { key: 'density', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'density' },
5383
+ { key: 'fineness', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'fineness' },
5384
+ { key: 'saturation', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'saturation' },
5349
5385
  ],
5350
5386
  },
5351
5387
  {
5352
5388
  id: 'hauler-t1',
5353
- name: 'Hauler Module T1',
5389
+ name: 'Hauler',
5354
5390
  description: 'Projects a haul beam to lock onto and transport containers or warehouses through group travel.',
5355
- color: '#D4A843',
5391
+ color: '#4ADBFF',
5356
5392
  itemId: ITEM_HAULER_T1,
5357
5393
  moduleType: MODULE_HAULER,
5358
5394
  recipe: [
@@ -5361,13 +5397,12 @@ const moduleRecipes = [
5361
5397
  ],
5362
5398
  stats: [
5363
5399
  { key: 'resonance', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'resonance' },
5400
+ { key: 'reflectivity', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'reflectivity' },
5364
5401
  {
5365
5402
  key: 'conductivity',
5366
5403
  sourceComponentId: ITEM_FOCUSING_ARRAY,
5367
5404
  sourceStatKey: 'conductivity',
5368
5405
  },
5369
- { key: 'clarity', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'clarity' },
5370
- { key: 'ductility', sourceComponentId: ITEM_FOCUSING_ARRAY, sourceStatKey: 'ductility' },
5371
5406
  ],
5372
5407
  },
5373
5408
  ];
@@ -5428,7 +5463,7 @@ function getComponentsForStat(statKey) {
5428
5463
  return components.filter((c) => c.stats.some((s) => s.key === statKey));
5429
5464
  }
5430
5465
 
5431
- const METAL_STATS = [
5466
+ const ORE_STATS = [
5432
5467
  {
5433
5468
  key: 'strength',
5434
5469
  label: 'Strength',
@@ -5449,24 +5484,24 @@ const METAL_STATS = [
5449
5484
  inverted: true,
5450
5485
  },
5451
5486
  ];
5452
- const PRECIOUS_STATS = [
5487
+ const CRYSTAL_STATS = [
5453
5488
  {
5454
5489
  key: 'conductivity',
5455
5490
  label: 'Conductivity',
5456
5491
  abbreviation: 'CON',
5457
- purpose: 'Efficiency of energy/signal transfer',
5492
+ purpose: 'Efficiency of energy/signal transfer through crystalline lattice',
5458
5493
  },
5459
5494
  {
5460
- key: 'ductility',
5461
- label: 'Ductility',
5462
- abbreviation: 'DUC',
5463
- purpose: 'Ability to be worked into fine, precise shapes',
5495
+ key: 'resonance',
5496
+ label: 'Resonance',
5497
+ abbreviation: 'RES',
5498
+ purpose: 'Frequency tuning and piezoelectric response storage and amplification',
5464
5499
  },
5465
5500
  {
5466
5501
  key: 'reflectivity',
5467
5502
  label: 'Reflectivity',
5468
5503
  abbreviation: 'REF',
5469
- purpose: 'Surface quality for heat management and precision optics',
5504
+ purpose: 'Optical refraction and reflection lenses, mirrors, focus',
5470
5505
  },
5471
5506
  ];
5472
5507
  const GAS_STATS = [
@@ -5489,52 +5524,52 @@ const GAS_STATS = [
5489
5524
  purpose: 'Heat capacity for thermal management',
5490
5525
  },
5491
5526
  ];
5492
- const MINERAL_STATS = [
5527
+ const REGOLITH_STATS = [
5493
5528
  {
5494
- key: 'resonance',
5495
- label: 'Resonance',
5496
- abbreviation: 'RES',
5497
- purpose: 'Energy field interaction storage, focusing, projection',
5529
+ key: 'composition',
5530
+ label: 'Composition',
5531
+ abbreviation: 'COM',
5532
+ purpose: 'Mineral/metal mixdrives sensor, chip, and optic crafting quality',
5498
5533
  },
5499
5534
  {
5500
5535
  key: 'hardness',
5501
5536
  label: 'Hardness',
5502
5537
  abbreviation: 'HRD',
5503
- purpose: 'Resistance to wear — cutting surfaces, penetration',
5538
+ purpose: 'Particle hardness — cutting surfaces, abrasives, wear resistance',
5504
5539
  },
5505
5540
  {
5506
- key: 'clarity',
5507
- label: 'Clarity',
5508
- abbreviation: 'CLR',
5509
- purpose: 'Crystalline perfectionprecision optics',
5541
+ key: 'fineness',
5542
+ label: 'Fineness',
5543
+ abbreviation: 'FIN',
5544
+ purpose: 'Grain sizefine powder for smooth composites and sintering',
5510
5545
  },
5511
5546
  ];
5512
- const ORGANIC_STATS = [
5547
+ const BIOMASS_STATS = [
5513
5548
  {
5514
5549
  key: 'plasticity',
5515
5550
  label: 'Plasticity',
5516
5551
  abbreviation: 'PLA',
5517
- purpose: 'Ease of reshaping speeds processing',
5552
+ purpose: 'Flexibility and deformation under load',
5518
5553
  },
5519
5554
  {
5520
5555
  key: 'insulation',
5521
5556
  label: 'Insulation',
5522
5557
  abbreviation: 'INS',
5523
- purpose: 'Energy containment reduces energy loss',
5558
+ purpose: 'Thermal and electrical blocking capacity',
5524
5559
  },
5525
5560
  {
5526
- key: 'purity',
5527
- label: 'Purity',
5528
- abbreviation: 'PUR',
5529
- purpose: 'Biological cleanliness better composites and lubricants',
5561
+ key: 'saturation',
5562
+ label: 'Saturation',
5563
+ abbreviation: 'SAT',
5564
+ purpose: 'Concentration of useful organic compounds per unit',
5530
5565
  },
5531
5566
  ];
5532
5567
  const STAT_MAP = {
5533
- metal: METAL_STATS,
5534
- precious: PRECIOUS_STATS,
5568
+ ore: ORE_STATS,
5569
+ crystal: CRYSTAL_STATS,
5535
5570
  gas: GAS_STATS,
5536
- mineral: MINERAL_STATS,
5537
- organic: ORGANIC_STATS,
5571
+ regolith: REGOLITH_STATS,
5572
+ biomass: BIOMASS_STATS,
5538
5573
  };
5539
5574
  function getStatDefinitions(category) {
5540
5575
  return STAT_MAP[category];
@@ -5773,11 +5808,11 @@ function decodeStackStats(itemId, stats) {
5773
5808
  return { stat1: decodeStat(s, 0), stat2: decodeStat(s, 1), stat3: decodeStat(s, 2) };
5774
5809
  }
5775
5810
  const categoryItemMass = {
5776
- metal: 30000,
5777
- precious: 40000,
5811
+ ore: 30000,
5812
+ crystal: 40000,
5778
5813
  gas: 15000,
5779
- mineral: 22000,
5780
- organic: 15000,
5814
+ regolith: 22000,
5815
+ biomass: 15000,
5781
5816
  };
5782
5817
  function computeInputMass(itemId, itemType) {
5783
5818
  if (itemType === 'component') {
@@ -5915,7 +5950,7 @@ function synthesizeItem(id, source) {
5915
5950
  name: source.name,
5916
5951
  description: source.description,
5917
5952
  mass: source.mass,
5918
- category: 'metal',
5953
+ category: 'ore',
5919
5954
  tier: 't1',
5920
5955
  color: source.color,
5921
5956
  });
@@ -6897,7 +6932,7 @@ class EntityInventory extends Types.cargo_item {
6897
6932
  return this.item;
6898
6933
  }
6899
6934
  get name() {
6900
- return this.item.name;
6935
+ return this.item.displayName;
6901
6936
  }
6902
6937
  get unitMass() {
6903
6938
  return this.item.mass;
@@ -7097,10 +7132,10 @@ class Ship extends Types.entity_info {
7097
7132
  function computeShipHullCapabilities(stats) {
7098
7133
  const density = stats.density ?? 500;
7099
7134
  const strength = stats.strength ?? 500;
7100
- const ductility = stats.ductility ?? 500;
7101
- const purity = stats.purity ?? 500;
7135
+ const fineness = stats.fineness ?? 500;
7136
+ const saturation = stats.saturation ?? 500;
7102
7137
  const hullmass = 25000 + 75 * density;
7103
- const statSum = strength + ductility + purity;
7138
+ const statSum = strength + fineness + saturation;
7104
7139
  const exponent = statSum / 2997.0;
7105
7140
  const capacity = Math.floor(1000000 * Math.pow(10, exponent));
7106
7141
  return { hullmass, capacity };
@@ -7115,10 +7150,10 @@ function computeEngineCapabilities(stats) {
7115
7150
  }
7116
7151
  function computeGeneratorCapabilities(stats) {
7117
7152
  const res = stats.resonance ?? 500;
7118
- const clr = stats.clarity ?? 500;
7153
+ const ref = stats.reflectivity ?? 500;
7119
7154
  return {
7120
7155
  capacity: 300 + Math.floor(res / 6),
7121
- recharge: 1 + Math.floor((clr * 3) / 1000),
7156
+ recharge: 1 + Math.floor((ref * 3) / 1000),
7122
7157
  };
7123
7158
  }
7124
7159
  function computeGathererCapabilities(stats) {
@@ -7134,47 +7169,47 @@ function computeGathererCapabilities(stats) {
7134
7169
  };
7135
7170
  }
7136
7171
  function computeLoaderCapabilities(stats) {
7137
- const duc = stats.ductility ?? 500;
7172
+ const fin = stats.fineness ?? 500;
7138
7173
  const pla = stats.plasticity ?? 500;
7139
7174
  return {
7140
- mass: Math.max(200, 2000 - Math.floor(duc * 2)),
7175
+ mass: Math.max(200, 2000 - Math.floor(fin * 2)),
7141
7176
  thrust: 1 + Math.floor(pla / 500),
7142
7177
  quantity: 1,
7143
7178
  };
7144
7179
  }
7145
7180
  function computeManufacturingCapabilities(stats) {
7146
7181
  const rea = stats.reactivity ?? 500;
7147
- const clr = stats.clarity ?? 500;
7182
+ const com = stats.composition ?? 500;
7148
7183
  return {
7149
7184
  speed: 100 + Math.floor((rea * 4) / 5),
7150
- drain: Math.max(5, 30 - Math.floor(clr / 33)),
7185
+ drain: Math.max(5, 30 - Math.floor(com / 33)),
7151
7186
  };
7152
7187
  }
7153
7188
  function computeHaulerCapabilities(stats) {
7154
7189
  const res = stats.resonance ?? 500;
7155
7190
  const con = stats.conductivity ?? 500;
7156
- const clr = stats.clarity ?? 500;
7191
+ const ref = stats.reflectivity ?? 500;
7157
7192
  return {
7158
7193
  capacity: Math.max(1, 1 + Math.floor(res / 400)),
7159
7194
  efficiency: 2000 + con * 6,
7160
- drain: Math.max(3, 15 - Math.floor(clr / 80)),
7195
+ drain: Math.max(3, 15 - Math.floor(ref / 80)),
7161
7196
  };
7162
7197
  }
7163
7198
  function computeStorageCapabilities(stats, baseCapacity) {
7164
7199
  const strength = stats.strength ?? 500;
7165
- const ductility = stats.ductility ?? 500;
7166
- const purity = stats.purity ?? 500;
7167
- const statSum = strength + ductility + purity;
7200
+ const fineness = stats.fineness ?? 500;
7201
+ const saturation = stats.saturation ?? 500;
7202
+ const statSum = strength + fineness + saturation;
7168
7203
  const capacityBonus = Math.floor((baseCapacity * (10 + Math.floor((statSum * 10) / 2997))) / 100);
7169
7204
  return { capacityBonus };
7170
7205
  }
7171
7206
  function computeWarehouseHullCapabilities(stats) {
7172
7207
  const density = stats.density ?? 500;
7173
7208
  const strength = stats.strength ?? 500;
7174
- const ductility = stats.ductility ?? 500;
7175
- const purity = stats.purity ?? 500;
7209
+ const fineness = stats.fineness ?? 500;
7210
+ const saturation = stats.saturation ?? 500;
7176
7211
  const hullmass = 25000 + 75 * density;
7177
- const statSum = strength + ductility + purity;
7212
+ const statSum = strength + fineness + saturation;
7178
7213
  const exponent = statSum / 2997.0;
7179
7214
  const capacity = Math.floor(20000000 * Math.pow(10, exponent));
7180
7215
  return { hullmass, capacity };
@@ -7384,10 +7419,10 @@ class Container extends Types.entity_info {
7384
7419
  function computeContainerCapabilities(stats) {
7385
7420
  const density = stats['density'] ?? 500;
7386
7421
  const strength = stats['strength'] ?? 500;
7387
- const ductility = stats['ductility'] ?? 500;
7388
- const purity = stats['purity'] ?? 500;
7422
+ const fineness = stats['fineness'] ?? 500;
7423
+ const saturation = stats['saturation'] ?? 500;
7389
7424
  const hullmass = 25000 + 75 * density;
7390
- const statSum = strength + ductility + purity;
7425
+ const statSum = strength + fineness + saturation;
7391
7426
  const exponent = statSum / 2997;
7392
7427
  const capacity = Math.floor(1000000 * Math.pow(10, exponent));
7393
7428
  return { hullmass, capacity };
@@ -7395,10 +7430,10 @@ function computeContainerCapabilities(stats) {
7395
7430
  function computeContainerT2Capabilities(stats) {
7396
7431
  const strength = stats['strength'] ?? 0;
7397
7432
  const density = stats['density'] ?? 0;
7398
- const ductility = stats['ductility'] ?? 0;
7399
- const purity = stats['purity'] ?? 0;
7433
+ const fineness = stats['fineness'] ?? 0;
7434
+ const saturation = stats['saturation'] ?? 0;
7400
7435
  const hullmass = 20000 + 50 * density;
7401
- const statSum = strength + ductility + purity;
7436
+ const statSum = strength + fineness + saturation;
7402
7437
  const exponent = statSum / 2500;
7403
7438
  const capacity = Math.floor(1500000 * Math.pow(10, exponent));
7404
7439
  return { hullmass, capacity };
@@ -8127,11 +8162,11 @@ function computeHaulerDrain(distance, drain, haulCount) {
8127
8162
  }
8128
8163
 
8129
8164
  const categoryColors = {
8130
- metal: '#5B9BD5',
8131
- precious: '#D4A843',
8132
- gas: '#7EC8E3',
8133
- mineral: '#B8A9C9',
8134
- organic: '#6B8E5A',
8165
+ ore: '#C26D3F',
8166
+ crystal: '#4ADBFF',
8167
+ gas: '#B8E4A0',
8168
+ regolith: '#C4A57B',
8169
+ biomass: '#5A8B3E',
8135
8170
  };
8136
8171
  const tierColors = {
8137
8172
  t1: '#8b8b8b',
@@ -8148,18 +8183,18 @@ const tierLabels = {
8148
8183
  t5: 'Legendary',
8149
8184
  };
8150
8185
  const categoryIcons = {
8151
- metal: '⬡',
8152
- precious: '◈',
8186
+ ore: '⬡',
8187
+ crystal: '◈',
8153
8188
  gas: '◎',
8154
- mineral: '',
8155
- organic: '❋',
8189
+ regolith: '',
8190
+ biomass: '❋',
8156
8191
  };
8157
8192
  const categoryIconShapes = {
8158
- metal: 'hex',
8159
- precious: 'diamond',
8193
+ ore: 'hex',
8194
+ crystal: 'diamond',
8160
8195
  gas: 'circle',
8161
- mineral: 'square',
8162
- organic: 'star',
8196
+ regolith: 'square',
8197
+ biomass: 'star',
8163
8198
  };
8164
8199
  const componentIcon = '▣';
8165
8200
  const moduleIcon = '⬢';
@@ -8233,39 +8268,39 @@ function isCraftedItem(id) {
8233
8268
 
8234
8269
  const categories = [
8235
8270
  {
8236
- id: 'metal',
8237
- name: 'Metals',
8238
- label: 'Metal',
8239
- description: 'Structural, strong, heavy — hulls, frames, load-bearing components',
8240
- color: categoryColors.metal,
8271
+ id: 'ore',
8272
+ name: 'Ore',
8273
+ label: 'Ore',
8274
+ description: 'Structural metal-bearing rock — hulls, frames, load-bearing components',
8275
+ color: categoryColors.ore,
8241
8276
  },
8242
8277
  {
8243
- id: 'precious',
8244
- name: 'Precious Metals',
8245
- label: 'Precious Metal',
8246
- description: 'Conductive, corrosion-resistantelectronics, energy systems, precision components',
8247
- color: categoryColors.precious,
8278
+ id: 'crystal',
8279
+ name: 'Crystal',
8280
+ label: 'Crystal',
8281
+ description: 'Crystalline latticeconductors, energy storage, resonant systems',
8282
+ color: categoryColors.crystal,
8248
8283
  },
8249
8284
  {
8250
8285
  id: 'gas',
8251
- name: 'Gases',
8286
+ name: 'Gas',
8252
8287
  label: 'Gas',
8253
- description: 'Energy, fuel, volatile/reactive — propulsion, thermal processing, chemical reactions',
8288
+ description: 'Atmospheric volatile — propulsion, thermal processing, chemical reactions',
8254
8289
  color: categoryColors.gas,
8255
8290
  },
8256
8291
  {
8257
- id: 'mineral',
8258
- name: 'Minerals',
8259
- label: 'Mineral',
8260
- description: 'Crystalline, hard, precise — sensors, optics, energy storage, cutting surfaces',
8261
- color: categoryColors.mineral,
8292
+ id: 'regolith',
8293
+ name: 'Regolith',
8294
+ label: 'Regolith',
8295
+ description: 'Surface mineral dust — sensors, optics, computation, cutting surfaces',
8296
+ color: categoryColors.regolith,
8262
8297
  },
8263
8298
  {
8264
- id: 'organic',
8265
- name: 'Organics',
8266
- label: 'Organic',
8267
- description: 'Adaptive, biological, polymer — insulation, composites, bio-processes',
8268
- color: categoryColors.organic,
8299
+ id: 'biomass',
8300
+ name: 'Biomass',
8301
+ label: 'Biomass',
8302
+ description: 'Organic polymer — insulation, composites, bio-processes',
8303
+ color: categoryColors.biomass,
8269
8304
  },
8270
8305
  ];
8271
8306
  function getCategoryInfo(id) {
@@ -8731,7 +8766,7 @@ function resolveResource(id, stats) {
8731
8766
  }
8732
8767
  return {
8733
8768
  itemId: id,
8734
- name: String(item.name),
8769
+ name: item.displayName,
8735
8770
  icon: categoryIcons[cat] ?? '⬡',
8736
8771
  abbreviation: null,
8737
8772
  category: cat,
@@ -8747,14 +8782,14 @@ function resolveComponent(id, stats) {
8747
8782
  if (stats !== undefined) {
8748
8783
  const decoded = decodeCraftedItemStats(id, toBigStats(stats));
8749
8784
  resolvedStats = Object.entries(decoded).map(([key, value]) => {
8750
- const allDefs = getStatDefinitions('metal')
8751
- .concat(getStatDefinitions('precious'))
8785
+ const allDefs = getStatDefinitions('ore')
8786
+ .concat(getStatDefinitions('crystal'))
8752
8787
  .concat(getStatDefinitions('gas'))
8753
- .concat(getStatDefinitions('mineral'))
8754
- .concat(getStatDefinitions('organic'));
8788
+ .concat(getStatDefinitions('regolith'))
8789
+ .concat(getStatDefinitions('biomass'));
8755
8790
  const def = allDefs.find((d) => d.key === key);
8756
8791
  const statDef = comp.stats.find((s) => s.key === key);
8757
- const cat = (statDef?.source ?? 'metal');
8792
+ const cat = (statDef?.source ?? 'ore');
8758
8793
  return {
8759
8794
  key,
8760
8795
  label: def?.label ?? key,
@@ -8845,9 +8880,9 @@ function computeCapabilityGroup(moduleType, stats) {
8845
8880
  }
8846
8881
  case MODULE_STORAGE: {
8847
8882
  const str = stats.strength ?? 500;
8848
- const duc = stats.ductility ?? 500;
8849
- const pur = stats.purity ?? 500;
8850
- const statSum = str + duc + pur;
8883
+ const fin = stats.fineness ?? 500;
8884
+ const sat = stats.saturation ?? 500;
8885
+ const statSum = str + fin + sat;
8851
8886
  const pct = 10 + Math.floor((statSum * 10) / 2997);
8852
8887
  return { capability: 'Storage', attributes: [{ label: 'Capacity Bonus', value: pct }] };
8853
8888
  }
@@ -9136,25 +9171,25 @@ function computeBaseCapacityWarehouse(stats) {
9136
9171
  const computeEngineThrust = (vol) => 400 + idiv(vol * 3, 4);
9137
9172
  const computeEngineDrain = (thm) => Math.max(30, 50 - idiv(thm, 70));
9138
9173
  const computeGeneratorCap = (res) => 300 + idiv(res, 6);
9139
- const computeGeneratorRech = (clr) => 1 + idiv(clr * 3, 1000);
9174
+ const computeGeneratorRech = (ref) => 1 + idiv(ref * 3, 1000);
9140
9175
  const computeGathererYield = (str) => 200 + str;
9141
9176
  const computeGathererDrain = (con) => Math.max(250, 1250 - idiv(con * 25, 20));
9142
9177
  const computeGathererDepth = (tol) => 200 + idiv(tol * 3, 2);
9143
9178
  const computeGathererSpeed = (ref) => 100 + idiv(ref * 4, 5);
9144
- const computeLoaderMass = (duc) => Math.max(200, 2000 - duc * 2);
9179
+ const computeLoaderMass = (fin) => Math.max(200, 2000 - fin * 2);
9145
9180
  const computeLoaderThrust = (pla) => 1 + idiv(pla, 500);
9146
9181
  const computeCrafterSpeed = (rea) => 100 + idiv(rea * 4, 5);
9147
- const computeCrafterDrain = (clr) => Math.max(5, 30 - idiv(clr, 33));
9182
+ const computeCrafterDrain = (com) => Math.max(5, 30 - idiv(com, 33));
9148
9183
  function entityDisplayName(itemId) {
9149
9184
  switch (itemId) {
9150
9185
  case ITEM_SHIP_T1_PACKED:
9151
- return 'Ship T1';
9186
+ return 'Ship';
9152
9187
  case ITEM_WAREHOUSE_T1_PACKED:
9153
- return 'Warehouse T1';
9188
+ return 'Warehouse';
9154
9189
  case ITEM_CONTAINER_T1_PACKED:
9155
- return 'Container T1';
9190
+ return 'Container';
9156
9191
  case ITEM_CONTAINER_T2_PACKED:
9157
- return 'Container T2';
9192
+ return 'Container';
9158
9193
  default:
9159
9194
  return 'Entity';
9160
9195
  }
@@ -9162,17 +9197,17 @@ function entityDisplayName(itemId) {
9162
9197
  function moduleDisplayName(itemId) {
9163
9198
  switch (itemId) {
9164
9199
  case ITEM_ENGINE_T1:
9165
- return 'Engine T1';
9200
+ return 'Engine';
9166
9201
  case ITEM_GENERATOR_T1:
9167
- return 'Generator T1';
9202
+ return 'Generator';
9168
9203
  case ITEM_GATHERER_T1:
9169
- return 'Gatherer T1';
9204
+ return 'Gatherer';
9170
9205
  case ITEM_LOADER_T1:
9171
- return 'Loader T1';
9206
+ return 'Loader';
9172
9207
  case ITEM_MANUFACTURING_T1:
9173
- return 'Manufacturing T1';
9208
+ return 'Manufacturing';
9174
9209
  case ITEM_STORAGE_T1:
9175
- return 'Storage T1';
9210
+ return 'Storage';
9176
9211
  default:
9177
9212
  return 'Module';
9178
9213
  }
@@ -9194,8 +9229,8 @@ function formatModuleLine(slot, itemId, stats) {
9194
9229
  }
9195
9230
  case MODULE_GENERATOR: {
9196
9231
  const res = decodeStat(stats, 0);
9197
- const clr = decodeStat(stats, 1);
9198
- out += ` Capacity ${computeGeneratorCap(res)} Recharge ${computeGeneratorRech(clr)}`;
9232
+ const ref = decodeStat(stats, 1);
9233
+ out += ` Capacity ${computeGeneratorCap(res)} Recharge ${computeGeneratorRech(ref)}`;
9199
9234
  break;
9200
9235
  }
9201
9236
  case MODULE_GATHERER: {
@@ -9207,22 +9242,22 @@ function formatModuleLine(slot, itemId, stats) {
9207
9242
  break;
9208
9243
  }
9209
9244
  case MODULE_LOADER: {
9210
- const duc = decodeStat(stats, 0);
9245
+ const fin = decodeStat(stats, 0);
9211
9246
  const pla = decodeStat(stats, 1);
9212
- out += ` Mass ${computeLoaderMass(duc)} Thrust ${computeLoaderThrust(pla)}`;
9247
+ out += ` Mass ${computeLoaderMass(fin)} Thrust ${computeLoaderThrust(pla)}`;
9213
9248
  break;
9214
9249
  }
9215
9250
  case MODULE_CRAFTER: {
9216
9251
  const rea = decodeStat(stats, 0);
9217
- const clr = decodeStat(stats, 1);
9218
- out += ` Speed ${computeCrafterSpeed(rea)} Drain ${computeCrafterDrain(clr)}`;
9252
+ const com = decodeStat(stats, 1);
9253
+ out += ` Speed ${computeCrafterSpeed(rea)} Drain ${computeCrafterDrain(com)}`;
9219
9254
  break;
9220
9255
  }
9221
9256
  case MODULE_STORAGE: {
9222
9257
  const str = decodeStat(stats, 0);
9223
- const duc = decodeStat(stats, 1);
9224
- const pur = decodeStat(stats, 2);
9225
- const sum = str + duc + pur;
9258
+ const fin = decodeStat(stats, 2);
9259
+ const sat = decodeStat(stats, 3);
9260
+ const sum = str + fin + sat;
9226
9261
  const pct = 10 + idiv(sum * 10, 2997);
9227
9262
  out += ` +${pct}% capacity`;
9228
9263
  break;
@@ -9282,8 +9317,43 @@ var index = /*#__PURE__*/Object.freeze({
9282
9317
  buildEntityDescription: buildEntityDescription
9283
9318
  });
9284
9319
 
9320
+ function formatMass(kg) {
9321
+ const t = kg / 1000;
9322
+ const fixed = t.toFixed(2);
9323
+ const trimmed = fixed.replace(/\.?0+$/, '');
9324
+ return `${trimmed} t`;
9325
+ }
9326
+ function formatMassDelta(kg) {
9327
+ if (kg === 0)
9328
+ return '0 t';
9329
+ const sign = kg > 0 ? '+' : '-';
9330
+ return `${sign}${formatMass(Math.abs(kg))}`;
9331
+ }
9332
+
9333
+ function displayName(resolved) {
9334
+ if (resolved.itemType === 'resource') {
9335
+ const adj = TIER_ADJECTIVES[tierNumber(resolved.tier)] ?? 'Unknown';
9336
+ const cat = resolved.category ? CATEGORY_LABELS[resolved.category] : 'Resource';
9337
+ return `${adj} ${cat}`;
9338
+ }
9339
+ return resolved.name;
9340
+ }
9341
+ function describeItem(resolved, opts) {
9342
+ const massFmt = opts?.formatMass ?? formatMass;
9343
+ const mass = massFmt(resolved.mass);
9344
+ const tier = `T${tierNumber(resolved.tier)}`;
9345
+ if (resolved.itemType === 'resource') {
9346
+ const cat = resolved.category ? CATEGORY_LABELS[resolved.category] : 'Resource';
9347
+ const header = `${tier} ${cat}`;
9348
+ const stats = resolved.stats?.map((s) => `${s.label} ${s.value}`).join(', ');
9349
+ return [header, stats, mass].filter(Boolean).join(' · ');
9350
+ }
9351
+ return `${tier} ${resolved.name} · ${mass}`;
9352
+ }
9353
+
9285
9354
  exports.ActionsManager = ActionsManager;
9286
9355
  exports.BASE_ORBITAL_MASS = BASE_ORBITAL_MASS;
9356
+ exports.CATEGORY_LABELS = CATEGORY_LABELS;
9287
9357
  exports.COMMIT_ALREADY_SET = COMMIT_ALREADY_SET;
9288
9358
  exports.COMMIT_CANNOT_MATCH = COMMIT_CANNOT_MATCH;
9289
9359
  exports.COMMIT_NOT_SET = COMMIT_NOT_SET;
@@ -9406,6 +9476,7 @@ exports.ScheduleAccessor = ScheduleAccessor;
9406
9476
  exports.ServerContract = server;
9407
9477
  exports.Ship = Ship;
9408
9478
  exports.Shipload = Shipload;
9479
+ exports.TIER_ADJECTIVES = TIER_ADJECTIVES;
9409
9480
  exports.TIER_ROLL_MAX = TIER_ROLL_MAX;
9410
9481
  exports.TRAVEL_MAX_DURATION = TRAVEL_MAX_DURATION;
9411
9482
  exports.WAREHOUSE_ALREADY_AT_LOCATION = WAREHOUSE_ALREADY_AT_LOCATION;
@@ -9511,6 +9582,7 @@ exports.deriveLocationSize = deriveLocationSize;
9511
9582
  exports.deriveLocationStatic = deriveLocationStatic;
9512
9583
  exports.deriveResourceStats = deriveResourceStats;
9513
9584
  exports.deriveStratum = deriveStratum;
9585
+ exports.describeItem = describeItem;
9514
9586
  exports.describeModule = describeModule;
9515
9587
  exports.describeModuleForItem = describeModuleForItem;
9516
9588
  exports.describeModuleForSlot = describeModuleForSlot;
@@ -9519,6 +9591,7 @@ exports.deserializeComponent = deserializeComponent;
9519
9591
  exports.deserializeEntity = deserializeEntity;
9520
9592
  exports.deserializeModule = deserializeModule;
9521
9593
  exports.deserializeResource = deserializeResource;
9594
+ exports.displayName = displayName;
9522
9595
  exports.distanceBetweenCoordinates = distanceBetweenCoordinates;
9523
9596
  exports.distanceBetweenPoints = distanceBetweenPoints;
9524
9597
  exports.encodeGatheredCargoStats = encodeGatheredCargoStats;
@@ -9529,6 +9602,8 @@ exports.entityRecipes = entityRecipes;
9529
9602
  exports.estimateDealTravelTime = estimateDealTravelTime;
9530
9603
  exports.estimateTravelTime = estimateTravelTime;
9531
9604
  exports.findNearbyPlanets = findNearbyPlanets;
9605
+ exports.formatMass = formatMass;
9606
+ exports.formatMassDelta = formatMassDelta;
9532
9607
  exports.formatModuleLine = formatModuleLine;
9533
9608
  exports.getAllCraftableItems = getAllCraftableItems;
9534
9609
  exports.getCapabilityAttributes = getCapabilityAttributes;
@@ -9617,6 +9692,7 @@ exports.stacksEqual = stacksEqual;
9617
9692
  exports.statMappings = statMappings;
9618
9693
  exports.tierColors = tierColors;
9619
9694
  exports.tierLabels = tierLabels;
9695
+ exports.tierNumber = tierNumber;
9620
9696
  exports.toLocation = toLocation;
9621
9697
  exports.validateSchedule = validateSchedule;
9622
9698
  //# sourceMappingURL=shipload.js.map