@shipload/sdk 1.0.0-next.56 → 1.0.0-next.59

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
@@ -3860,14 +3860,13 @@ const ITEM_MASS_CATCHER_T1_PACKED = 10206;
3860
3860
  const ITEM_HUB_T1_PACKED = 10207;
3861
3861
  const ITEM_WORKSHOP_T1_PACKED = 10208;
3862
3862
  const ITEM_CONSTRUCTION_DOCK_T1_PACKED = 10209;
3863
- const ITEM_ROUSTABOUT_T1_PACKED = 10210;
3864
- const ITEM_PROSPECTOR_T1_PACKED = 10211;
3865
- const ITEM_TENDER_T1_PACKED = 10212;
3866
- const ITEM_WRIGHT_T1_PACKED = 10213;
3867
- const ITEM_TUG_T1_PACKED = 10214;
3868
- const ITEM_PORTER_T1_PACKED = 10215;
3869
- const ITEM_WRANGLER_T1_PACKED = 10216;
3870
- const ITEM_DREDGER_T1_PACKED = 10217;
3863
+ const ITEM_ROUSTABOUT_T1A_PACKED = 10210;
3864
+ const ITEM_PROSPECTOR_T1A_PACKED = 10211;
3865
+ const ITEM_TENDER_T1A_PACKED = 10212;
3866
+ const ITEM_WRIGHT_T1A_PACKED = 10213;
3867
+ const ITEM_TUG_T1A_PACKED = 10214;
3868
+ const ITEM_PORTER_T1A_PACKED = 10215;
3869
+ const ITEM_SMITH_T1A_PACKED = 10218;
3871
3870
  const ITEM_PLATE_T2 = 20001;
3872
3871
  const ITEM_FRAME_T2 = 20002;
3873
3872
  const ITEM_PLASMA_CELL_T2 = 20003;
@@ -3881,8 +3880,9 @@ const ITEM_RESIN_T2 = 20010;
3881
3880
  const ITEM_GATHERER_T2 = 20102;
3882
3881
  const ITEM_HAULER_T2 = 20106;
3883
3882
  const ITEM_CONTAINER_T2_PACKED = 20200;
3884
- const ITEM_PROSPECTOR_T2_PACKED = 20210;
3885
- const ITEM_HAULER_SHIP_T2_PACKED = 20211;
3883
+ const ITEM_PROSPECTOR_T2A_PACKED = 20212;
3884
+ const ITEM_PROSPECTOR_T2B_PACKED = 20213;
3885
+ const ITEM_DREDGER_T2A_PACKED = 20214;
3886
3886
 
3887
3887
  var recipes = [
3888
3888
  {
@@ -5512,126 +5512,31 @@ var recipes = [
5512
5512
  sourceSubclass: 10210
5513
5513
  },
5514
5514
  {
5515
- outputItemId: 10216,
5516
- outputMass: 3600000,
5517
- inputs: [
5518
- {
5519
- itemId: 10005,
5520
- quantity: 150
5521
- },
5522
- {
5523
- itemId: 10002,
5524
- quantity: 150
5525
- },
5526
- {
5527
- itemId: 10010,
5528
- quantity: 150
5529
- },
5530
- {
5531
- itemId: 10009,
5532
- quantity: 150
5533
- },
5534
- {
5535
- itemId: 10004,
5536
- quantity: 150
5537
- },
5538
- {
5539
- itemId: 10211,
5540
- quantity: 1
5541
- }
5542
- ],
5543
- statSlots: [
5544
- {
5545
- sources: [
5546
- {
5547
- inputIndex: 0,
5548
- statIndex: 0
5549
- },
5550
- {
5551
- inputIndex: 5,
5552
- statIndex: 0
5553
- }
5554
- ]
5555
- },
5556
- {
5557
- sources: [
5558
- {
5559
- inputIndex: 1,
5560
- statIndex: 0
5561
- },
5562
- {
5563
- inputIndex: 5,
5564
- statIndex: 1
5565
- }
5566
- ]
5567
- },
5568
- {
5569
- sources: [
5570
- {
5571
- inputIndex: 2,
5572
- statIndex: 0
5573
- },
5574
- {
5575
- inputIndex: 5,
5576
- statIndex: 2
5577
- }
5578
- ]
5579
- },
5580
- {
5581
- sources: [
5582
- {
5583
- inputIndex: 3,
5584
- statIndex: 0
5585
- },
5586
- {
5587
- inputIndex: 5,
5588
- statIndex: 3
5589
- }
5590
- ]
5591
- },
5592
- {
5593
- sources: [
5594
- {
5595
- inputIndex: 4,
5596
- statIndex: 0
5597
- },
5598
- {
5599
- inputIndex: 5,
5600
- statIndex: 4
5601
- }
5602
- ]
5603
- }
5604
- ],
5605
- blendWeights: [
5606
- ],
5607
- sourceSubclass: 10211
5608
- },
5609
- {
5610
- outputItemId: 10217,
5611
- outputMass: 3600000,
5515
+ outputItemId: 10218,
5516
+ outputMass: 2400000,
5612
5517
  inputs: [
5613
5518
  {
5614
5519
  itemId: 10005,
5615
- quantity: 150
5520
+ quantity: 100
5616
5521
  },
5617
5522
  {
5618
5523
  itemId: 10002,
5619
- quantity: 150
5524
+ quantity: 100
5620
5525
  },
5621
5526
  {
5622
5527
  itemId: 10010,
5623
- quantity: 150
5528
+ quantity: 100
5624
5529
  },
5625
5530
  {
5626
5531
  itemId: 10009,
5627
- quantity: 150
5532
+ quantity: 100
5628
5533
  },
5629
5534
  {
5630
5535
  itemId: 10004,
5631
- quantity: 150
5536
+ quantity: 100
5632
5537
  },
5633
5538
  {
5634
- itemId: 10211,
5539
+ itemId: 10210,
5635
5540
  quantity: 1
5636
5541
  }
5637
5542
  ],
@@ -5699,7 +5604,7 @@ var recipes = [
5699
5604
  ],
5700
5605
  blendWeights: [
5701
5606
  ],
5702
- sourceSubclass: 10211
5607
+ sourceSubclass: 10210
5703
5608
  },
5704
5609
  {
5705
5610
  outputItemId: 20001,
@@ -6297,8 +6202,103 @@ var recipes = [
6297
6202
  sourceSubclass: 10200
6298
6203
  },
6299
6204
  {
6300
- outputItemId: 20210,
6301
- outputMass: 3840000,
6205
+ outputItemId: 20212,
6206
+ outputMass: 4320000,
6207
+ inputs: [
6208
+ {
6209
+ itemId: 20001,
6210
+ quantity: 200
6211
+ },
6212
+ {
6213
+ itemId: 20008,
6214
+ quantity: 200
6215
+ },
6216
+ {
6217
+ itemId: 20007,
6218
+ quantity: 200
6219
+ },
6220
+ {
6221
+ itemId: 20003,
6222
+ quantity: 200
6223
+ },
6224
+ {
6225
+ itemId: 20006,
6226
+ quantity: 200
6227
+ },
6228
+ {
6229
+ itemId: 10211,
6230
+ quantity: 1
6231
+ }
6232
+ ],
6233
+ statSlots: [
6234
+ {
6235
+ sources: [
6236
+ {
6237
+ inputIndex: 0,
6238
+ statIndex: 0
6239
+ },
6240
+ {
6241
+ inputIndex: 5,
6242
+ statIndex: 0
6243
+ }
6244
+ ]
6245
+ },
6246
+ {
6247
+ sources: [
6248
+ {
6249
+ inputIndex: 1,
6250
+ statIndex: 0
6251
+ },
6252
+ {
6253
+ inputIndex: 5,
6254
+ statIndex: 1
6255
+ }
6256
+ ]
6257
+ },
6258
+ {
6259
+ sources: [
6260
+ {
6261
+ inputIndex: 2,
6262
+ statIndex: 0
6263
+ },
6264
+ {
6265
+ inputIndex: 5,
6266
+ statIndex: 2
6267
+ }
6268
+ ]
6269
+ },
6270
+ {
6271
+ sources: [
6272
+ {
6273
+ inputIndex: 3,
6274
+ statIndex: 0
6275
+ },
6276
+ {
6277
+ inputIndex: 5,
6278
+ statIndex: 3
6279
+ }
6280
+ ]
6281
+ },
6282
+ {
6283
+ sources: [
6284
+ {
6285
+ inputIndex: 4,
6286
+ statIndex: 0
6287
+ },
6288
+ {
6289
+ inputIndex: 5,
6290
+ statIndex: 4
6291
+ }
6292
+ ]
6293
+ }
6294
+ ],
6295
+ blendWeights: [
6296
+ ],
6297
+ sourceSubclass: 10211
6298
+ },
6299
+ {
6300
+ outputItemId: 20213,
6301
+ outputMass: 5760000,
6302
6302
  inputs: [
6303
6303
  {
6304
6304
  itemId: 20005,
@@ -6321,7 +6321,7 @@ var recipes = [
6321
6321
  quantity: 150
6322
6322
  },
6323
6323
  {
6324
- itemId: 10211,
6324
+ itemId: 20212,
6325
6325
  quantity: 1
6326
6326
  }
6327
6327
  ],
@@ -6389,11 +6389,11 @@ var recipes = [
6389
6389
  ],
6390
6390
  blendWeights: [
6391
6391
  ],
6392
- sourceSubclass: 10211
6392
+ sourceSubclass: 20212
6393
6393
  },
6394
6394
  {
6395
- outputItemId: 20211,
6396
- outputMass: 3840000,
6395
+ outputItemId: 20214,
6396
+ outputMass: 5760000,
6397
6397
  inputs: [
6398
6398
  {
6399
6399
  itemId: 20005,
@@ -6416,7 +6416,7 @@ var recipes = [
6416
6416
  quantity: 150
6417
6417
  },
6418
6418
  {
6419
- itemId: 10214,
6419
+ itemId: 20212,
6420
6420
  quantity: 1
6421
6421
  }
6422
6422
  ],
@@ -6484,7 +6484,7 @@ var recipes = [
6484
6484
  ],
6485
6485
  blendWeights: [
6486
6486
  ],
6487
- sourceSubclass: 10214
6487
+ sourceSubclass: 20212
6488
6488
  }
6489
6489
  ];
6490
6490
 
@@ -6719,7 +6719,7 @@ var entities = [
6719
6719
  maxTier: 1
6720
6720
  }
6721
6721
  ],
6722
- baseHullmass: 3600000
6722
+ baseHullmass: 4000000
6723
6723
  },
6724
6724
  {
6725
6725
  entityItemId: 10212,
@@ -6740,7 +6740,7 @@ var entities = [
6740
6740
  maxTier: 1
6741
6741
  }
6742
6742
  ],
6743
- baseHullmass: 3600000
6743
+ baseHullmass: 4000000
6744
6744
  },
6745
6745
  {
6746
6746
  entityItemId: 10213,
@@ -6761,7 +6761,7 @@ var entities = [
6761
6761
  maxTier: 1
6762
6762
  }
6763
6763
  ],
6764
- baseHullmass: 4400000
6764
+ baseHullmass: 4000000
6765
6765
  },
6766
6766
  {
6767
6767
  entityItemId: 10214,
@@ -6782,7 +6782,7 @@ var entities = [
6782
6782
  maxTier: 1
6783
6783
  }
6784
6784
  ],
6785
- baseHullmass: 4400000
6785
+ baseHullmass: 4000000
6786
6786
  },
6787
6787
  {
6788
6788
  entityItemId: 10215,
@@ -6803,28 +6803,23 @@ var entities = [
6803
6803
  maxTier: 1
6804
6804
  }
6805
6805
  ],
6806
- baseHullmass: 5000000
6806
+ baseHullmass: 4000000
6807
6807
  },
6808
6808
  {
6809
- entityItemId: 10216,
6809
+ entityItemId: 10218,
6810
6810
  slots: [
6811
6811
  {
6812
6812
  type: "generator",
6813
- outputPct: 90,
6813
+ outputPct: 85,
6814
6814
  maxTier: 1
6815
6815
  },
6816
6816
  {
6817
6817
  type: "engine",
6818
- outputPct: 90,
6819
- maxTier: 1
6820
- },
6821
- {
6822
- type: "gatherer",
6823
- outputPct: 100,
6818
+ outputPct: 85,
6824
6819
  maxTier: 1
6825
6820
  },
6826
6821
  {
6827
- type: "gatherer",
6822
+ type: "crafter",
6828
6823
  outputPct: 100,
6829
6824
  maxTier: 1
6830
6825
  }
@@ -6832,53 +6827,48 @@ var entities = [
6832
6827
  baseHullmass: 4000000
6833
6828
  },
6834
6829
  {
6835
- entityItemId: 10217,
6830
+ entityItemId: 20200,
6831
+ slots: [
6832
+ ],
6833
+ baseHullmass: 100000
6834
+ },
6835
+ {
6836
+ entityItemId: 20212,
6836
6837
  slots: [
6837
6838
  {
6838
6839
  type: "generator",
6839
6840
  outputPct: 90,
6840
- maxTier: 1
6841
+ maxTier: 2
6841
6842
  },
6842
6843
  {
6843
6844
  type: "engine",
6844
6845
  outputPct: 90,
6845
- maxTier: 1
6846
+ maxTier: 2
6846
6847
  },
6847
6848
  {
6848
6849
  type: "gatherer",
6849
6850
  outputPct: 100,
6850
- maxTier: 1
6851
- },
6852
- {
6853
- type: "storage",
6854
- outputPct: 100,
6855
- maxTier: 1
6851
+ maxTier: 2
6856
6852
  }
6857
6853
  ],
6858
- baseHullmass: 4800000
6859
- },
6860
- {
6861
- entityItemId: 20200,
6862
- slots: [
6863
- ],
6864
- baseHullmass: 100000
6854
+ baseHullmass: 5920000
6865
6855
  },
6866
6856
  {
6867
- entityItemId: 20210,
6857
+ entityItemId: 20213,
6868
6858
  slots: [
6869
6859
  {
6870
6860
  type: "generator",
6871
- outputPct: 100,
6861
+ outputPct: 95,
6872
6862
  maxTier: 2
6873
6863
  },
6874
6864
  {
6875
- type: "generator",
6876
- outputPct: 100,
6865
+ type: "engine",
6866
+ outputPct: 95,
6877
6867
  maxTier: 2
6878
6868
  },
6879
6869
  {
6880
- type: "engine",
6881
- outputPct: 100,
6870
+ type: "aux",
6871
+ outputPct: 95,
6882
6872
  maxTier: 2
6883
6873
  },
6884
6874
  {
@@ -6887,33 +6877,33 @@ var entities = [
6887
6877
  maxTier: 2
6888
6878
  }
6889
6879
  ],
6890
- baseHullmass: 5760000
6880
+ baseHullmass: 7360000
6891
6881
  },
6892
6882
  {
6893
- entityItemId: 20211,
6883
+ entityItemId: 20214,
6894
6884
  slots: [
6895
6885
  {
6896
6886
  type: "generator",
6897
- outputPct: 100,
6887
+ outputPct: 95,
6898
6888
  maxTier: 2
6899
6889
  },
6900
6890
  {
6901
6891
  type: "engine",
6902
- outputPct: 100,
6892
+ outputPct: 95,
6903
6893
  maxTier: 2
6904
6894
  },
6905
6895
  {
6906
- type: "hauler",
6896
+ type: "gatherer",
6907
6897
  outputPct: 100,
6908
6898
  maxTier: 2
6909
6899
  },
6910
6900
  {
6911
- type: "hauler",
6901
+ type: "storage",
6912
6902
  outputPct: 100,
6913
6903
  maxTier: 2
6914
6904
  }
6915
6905
  ],
6916
- baseHullmass: 7040000
6906
+ baseHullmass: 7360000
6917
6907
  }
6918
6908
  ];
6919
6909
 
@@ -7542,14 +7532,8 @@ var items = [
7542
7532
  tier: 1
7543
7533
  },
7544
7534
  {
7545
- id: 10216,
7546
- mass: 3600000,
7547
- type: "entity",
7548
- tier: 1
7549
- },
7550
- {
7551
- id: 10217,
7552
- mass: 3600000,
7535
+ id: 10218,
7536
+ mass: 2400000,
7553
7537
  type: "entity",
7554
7538
  tier: 1
7555
7539
  },
@@ -7634,14 +7618,20 @@ var items = [
7634
7618
  tier: 2
7635
7619
  },
7636
7620
  {
7637
- id: 20210,
7638
- mass: 3840000,
7621
+ id: 20212,
7622
+ mass: 4320000,
7639
7623
  type: "entity",
7640
7624
  tier: 2
7641
7625
  },
7642
7626
  {
7643
- id: 20211,
7644
- mass: 3840000,
7627
+ id: 20213,
7628
+ mass: 5760000,
7629
+ type: "entity",
7630
+ tier: 2
7631
+ },
7632
+ {
7633
+ id: 20214,
7634
+ mass: 5760000,
7645
7635
  type: "entity",
7646
7636
  tier: 2
7647
7637
  }
@@ -7919,14 +7909,9 @@ const itemMetadata = {
7919
7909
  description: 'A cargo ship built around a large storage hold. The extra mass makes it slower than a Roustabout.',
7920
7910
  color: '#4AE898',
7921
7911
  },
7922
- 10216: {
7923
- name: 'Wrangler',
7924
- description: 'A heavy gathering ship with two gathering rigs, so it mines faster.',
7925
- color: '#4AE898',
7926
- },
7927
- 10217: {
7928
- name: 'Dredger',
7929
- description: 'A gathering ship with its own storage hold, so it can keep mining before it has to offload.',
7912
+ 10218: {
7913
+ name: 'Smith',
7914
+ description: 'A crafting ship. One engine, one power core, and a fabricator for crafting away from home.',
7930
7915
  color: '#4AE898',
7931
7916
  },
7932
7917
  20001: {
@@ -7994,14 +7979,19 @@ const itemMetadata = {
7994
7979
  description: 'Advanced cargo container with improved capacity formulas.',
7995
7980
  color: '#9BADB8',
7996
7981
  },
7997
- 20210: {
7982
+ 20212: {
7998
7983
  name: 'Prospector',
7999
- description: 'Advanced exploration vessel with tiered engine, power core, and limpet bay slots.',
7984
+ description: 'The tier 2 Prospector. The same three systems, ready for tier 2 modules.',
8000
7985
  color: '#4AE898',
8001
7986
  },
8002
- 20211: {
8003
- name: 'Tug',
8004
- description: 'Advanced towing vessel with tiered engine, generator, and tractor beam slots.',
7987
+ 20213: {
7988
+ name: 'Prospector',
7989
+ description: 'A tier 2 Prospector with an auxiliary system for extra power, mobility, or endurance.',
7990
+ color: '#4AE898',
7991
+ },
7992
+ 20214: {
7993
+ name: 'Dredger',
7994
+ description: 'A gathering ship that stores what it digs. Its limpet bay works alongside a cargo hold.',
8005
7995
  color: '#4AE898',
8006
7996
  },
8007
7997
  };
@@ -8013,8 +8003,7 @@ const entityMetadata = {
8013
8003
  10213: { moduleSlotLabels: ['Power Core', 'Engine', 'Assembly Arm'] },
8014
8004
  10214: { moduleSlotLabels: ['Power Core', 'Engine', 'Tractor Beam'] },
8015
8005
  10215: { moduleSlotLabels: ['Power Core', 'Engine', 'Cargo Hold'] },
8016
- 10216: { moduleSlotLabels: ['Power Core', 'Engine', 'Limpet Bay', 'Limpet Bay'] },
8017
- 10217: { moduleSlotLabels: ['Power Core', 'Engine', 'Limpet Bay', 'Cargo Hold'] },
8006
+ 10218: { moduleSlotLabels: ['Power Core', 'Engine', 'Fabricator'] },
8018
8007
  10202: {
8019
8008
  moduleSlotLabels: ['Shuttle Bay', 'Cargo Hold', 'Cargo Hold', 'Cargo Hold', 'Cargo Hold'],
8020
8009
  },
@@ -8026,8 +8015,9 @@ const entityMetadata = {
8026
8015
  moduleSlotLabels: ['Fabricator', 'Fabricator', 'Fabricator', 'Fabricator', 'Fabricator'],
8027
8016
  },
8028
8017
  10209: { moduleSlotLabels: ['Power Core', 'Assembly Arm'] },
8029
- 20210: { moduleSlotLabels: ['Power Core', 'Power Core', 'Engine', 'Limpet Bay'] },
8030
- 20211: { moduleSlotLabels: ['Power Core', 'Engine', 'Tractor Beam', 'Tractor Beam'] },
8018
+ 20212: { moduleSlotLabels: ['Power Core', 'Engine', 'Limpet Bay'] },
8019
+ 20213: { moduleSlotLabels: ['Power Core', 'Engine', 'Auxiliary System', 'Limpet Bay'] },
8020
+ 20214: { moduleSlotLabels: ['Power Core', 'Engine', 'Limpet Bay', 'Cargo Hold'] },
8031
8021
  };
8032
8022
  for (const item of items) {
8033
8023
  if (!itemMetadata[item.id]) {
@@ -10971,14 +10961,9 @@ var templates = [
10971
10961
  displayLabel: "Porter"
10972
10962
  },
10973
10963
  {
10974
- itemId: 10216,
10975
- kind: "ship",
10976
- displayLabel: "Wrangler"
10977
- },
10978
- {
10979
- itemId: 10217,
10964
+ itemId: 10218,
10980
10965
  kind: "ship",
10981
- displayLabel: "Dredger"
10966
+ displayLabel: "Smith"
10982
10967
  },
10983
10968
  {
10984
10969
  itemId: 10202,
@@ -11031,14 +11016,19 @@ var templates = [
11031
11016
  displayLabel: ""
11032
11017
  },
11033
11018
  {
11034
- itemId: 20210,
11019
+ itemId: 20212,
11035
11020
  kind: "ship",
11036
11021
  displayLabel: "Prospector"
11037
11022
  },
11038
11023
  {
11039
- itemId: 20211,
11024
+ itemId: 20213,
11040
11025
  kind: "ship",
11041
- displayLabel: "Tug"
11026
+ displayLabel: "Prospector"
11027
+ },
11028
+ {
11029
+ itemId: 20214,
11030
+ kind: "ship",
11031
+ displayLabel: "Dredger"
11042
11032
  }
11043
11033
  ];
11044
11034
  var kindRegistryJson = {
@@ -12632,6 +12622,24 @@ function keyForRecipeInputStat(recipe, inputIndex, statIndex) {
12632
12622
  const innerKeys = getItemStatKeys(input.itemId);
12633
12623
  return innerKeys[statIndex] ?? '';
12634
12624
  }
12625
+ function usedInputStatKeys(outputItemId) {
12626
+ const recipe = getRecipe(outputItemId);
12627
+ if (!recipe)
12628
+ return [];
12629
+ const usedIdx = recipe.inputs.map(() => new Set());
12630
+ for (const slot of recipe.statSlots) {
12631
+ for (const src of slot.sources) {
12632
+ usedIdx[src.inputIndex]?.add(src.statIndex);
12633
+ }
12634
+ }
12635
+ return recipe.inputs.map((input, i) => {
12636
+ const keys = getItemStatKeys(input.itemId);
12637
+ return [...usedIdx[i]]
12638
+ .sort((a, b) => a - b)
12639
+ .map((idx) => keys[idx] ?? '')
12640
+ .filter(Boolean);
12641
+ });
12642
+ }
12635
12643
  function decodeCraftedItemStats(itemId, stats) {
12636
12644
  const keys = getItemStatKeys(itemId);
12637
12645
  const result = {};
@@ -13425,7 +13433,13 @@ const MODULE_STORAGE = 8;
13425
13433
  const MODULE_HAULER = 9;
13426
13434
  const MODULE_BATTERY = 10;
13427
13435
  const MODULE_BUILDER = 12;
13436
+ const MODULE_AUX = 13;
13428
13437
  function moduleAccepts(slotType, moduleType) {
13438
+ if (slotType === MODULE_AUX) {
13439
+ return (moduleType === MODULE_GENERATOR ||
13440
+ moduleType === MODULE_ENGINE ||
13441
+ moduleType === MODULE_BATTERY);
13442
+ }
13429
13443
  return slotType === MODULE_ANY || slotType === moduleType;
13430
13444
  }
13431
13445
  function getModuleCapabilityType(itemId) {
@@ -13487,6 +13501,8 @@ function moduleSlotTypeToCode(slotType) {
13487
13501
  return MODULE_HAULER;
13488
13502
  case 'battery':
13489
13503
  return MODULE_BATTERY;
13504
+ case 'aux':
13505
+ return MODULE_AUX;
13490
13506
  default:
13491
13507
  return MODULE_ANY;
13492
13508
  }
@@ -16477,22 +16493,20 @@ function entityDisplayName(itemId) {
16477
16493
  switch (itemId) {
16478
16494
  case ITEM_SHIP_T1_PACKED:
16479
16495
  return 'Ship';
16480
- case ITEM_ROUSTABOUT_T1_PACKED:
16496
+ case ITEM_ROUSTABOUT_T1A_PACKED:
16481
16497
  return 'Roustabout';
16482
- case ITEM_PROSPECTOR_T1_PACKED:
16498
+ case ITEM_PROSPECTOR_T1A_PACKED:
16483
16499
  return 'Prospector';
16484
- case ITEM_TENDER_T1_PACKED:
16500
+ case ITEM_TENDER_T1A_PACKED:
16485
16501
  return 'Tender';
16486
- case ITEM_TUG_T1_PACKED:
16502
+ case ITEM_TUG_T1A_PACKED:
16487
16503
  return 'Tug';
16488
- case ITEM_PORTER_T1_PACKED:
16504
+ case ITEM_PORTER_T1A_PACKED:
16489
16505
  return 'Porter';
16490
- case ITEM_WRANGLER_T1_PACKED:
16491
- return 'Wrangler';
16492
- case ITEM_WRIGHT_T1_PACKED:
16506
+ case ITEM_WRIGHT_T1A_PACKED:
16493
16507
  return 'Wright';
16494
- case ITEM_DREDGER_T1_PACKED:
16495
- return 'Dredger';
16508
+ case ITEM_SMITH_T1A_PACKED:
16509
+ return 'Smith';
16496
16510
  case ITEM_WAREHOUSE_T1_PACKED:
16497
16511
  return 'Warehouse';
16498
16512
  case ITEM_EXTRACTOR_T1_PACKED:
@@ -16505,10 +16519,12 @@ function entityDisplayName(itemId) {
16505
16519
  return 'Container';
16506
16520
  case ITEM_CONTAINER_T2_PACKED:
16507
16521
  return 'Container';
16508
- case ITEM_PROSPECTOR_T2_PACKED:
16522
+ case ITEM_PROSPECTOR_T2A_PACKED:
16509
16523
  return 'Prospector';
16510
- case ITEM_HAULER_SHIP_T2_PACKED:
16511
- return 'Tug';
16524
+ case ITEM_PROSPECTOR_T2B_PACKED:
16525
+ return 'Prospector';
16526
+ case ITEM_DREDGER_T2A_PACKED:
16527
+ return 'Dredger';
16512
16528
  default:
16513
16529
  return 'Entity';
16514
16530
  }
@@ -18878,6 +18894,18 @@ function composeIdleResolve(blocker, action, actions, now, lookupCounterpart) {
18878
18894
  return [...ids.map((id) => actions.resolve(id)), action];
18879
18895
  }
18880
18896
 
18897
+ const INCOMING_COUPLING_KINDS = new Set([exports.HoldKind.PUSH, exports.HoldKind.GATHER, exports.HoldKind.FLIGHT]);
18898
+ function isIncomingCouplingKind(kind) {
18899
+ return INCOMING_COUPLING_KINDS.has(kind);
18900
+ }
18901
+ function calcCounterpartDelivery(task, coupling) {
18902
+ if (!isIncomingCouplingKind(coupling.kind.toNumber()))
18903
+ return [];
18904
+ if (task.type.toNumber() === exports.TaskType.CRAFT) {
18905
+ return task.cargo.length === 0 ? [] : [task.cargo[task.cargo.length - 1]];
18906
+ }
18907
+ return task.cargo;
18908
+ }
18881
18909
  function taskCargoEffect(task) {
18882
18910
  switch (task.type.toNumber()) {
18883
18911
  case exports.TaskType.LOAD:
@@ -18885,6 +18913,7 @@ function taskCargoEffect(task) {
18885
18913
  case exports.TaskType.UNDEPLOY:
18886
18914
  return { added: task.cargo, removed: [] };
18887
18915
  case exports.TaskType.UNLOAD:
18916
+ case exports.TaskType.UPGRADE:
18888
18917
  return { added: [], removed: task.cargo };
18889
18918
  case exports.TaskType.GATHER:
18890
18919
  return task.couplings.length > 0
@@ -18901,19 +18930,23 @@ function taskCargoEffect(task) {
18901
18930
  return { added: [], removed: [] };
18902
18931
  }
18903
18932
  }
18904
- function cargoKey(item) {
18905
- const base = `${item.item_id.toNumber()}:${item.stats.toString()}`;
18906
- const modules = item.modules ?? [];
18907
- const entityId = item.entity_id?.toString();
18908
- const normalizedEntityId = entityId && entityId !== '0' ? entityId : '';
18933
+ function refKey(itemId, stats, modules, entityId) {
18934
+ const base = `${itemId}:${stats.toString()}`;
18935
+ const normalizedEntityId = entityId !== '0' ? entityId : '';
18909
18936
  if (modules.length === 0 && normalizedEntityId === '')
18910
18937
  return base;
18911
18938
  return `${base}:modules=${JSON.stringify(modules)}:entity=${normalizedEntityId}`;
18912
18939
  }
18940
+ function cargoKey(item) {
18941
+ return refKey(item.item_id.toNumber(), BigInt(item.stats.toString()), item.modules ?? [], item.entity_id?.toString() ?? '');
18942
+ }
18943
+ function cargoInputKey(input) {
18944
+ return refKey(input.itemId, input.stats, input.modules ?? [], '');
18945
+ }
18913
18946
  function cargoQuantity(item) {
18914
18947
  return BigInt(item.quantity.toString());
18915
18948
  }
18916
- function projectedCargoAvailableAt(entity, at) {
18949
+ function projectedCargoAvailableAt(entity, at, incoming = []) {
18917
18950
  const avail = new Map();
18918
18951
  for (const item of entity.cargo) {
18919
18952
  const key = cargoKey(item);
@@ -18928,6 +18961,14 @@ function projectedCargoAvailableAt(entity, at) {
18928
18961
  avail.set(key, (avail.get(key) ?? 0n) + cargoQuantity(item));
18929
18962
  }
18930
18963
  }
18964
+ for (const src of incoming) {
18965
+ if (src.until.getTime() >= at.getTime())
18966
+ continue;
18967
+ for (const item of src.items) {
18968
+ const key = cargoKey(item);
18969
+ avail.set(key, (avail.get(key) ?? 0n) + cargoQuantity(item));
18970
+ }
18971
+ }
18931
18972
  for (const ordered of tasks) {
18932
18973
  for (const item of taskCargoEffect(ordered.task).removed) {
18933
18974
  const key = cargoKey(item);
@@ -18938,17 +18979,40 @@ function projectedCargoAvailableAt(entity, at) {
18938
18979
  }
18939
18980
  return avail;
18940
18981
  }
18941
- function cargoReadyAt(entity, inputItemIds) {
18942
- let readyMs = 0;
18982
+ function cargoReadyAt(entity, inputs, incoming = []) {
18983
+ const demand = new Map();
18984
+ for (const input of inputs) {
18985
+ const key = cargoInputKey(input);
18986
+ demand.set(key, (demand.get(key) ?? 0n) + BigInt(input.quantity));
18987
+ }
18988
+ const candidates = [0];
18943
18989
  for (const ordered of orderedTasks(entity)) {
18944
18990
  for (const item of taskCargoEffect(ordered.task).added) {
18945
- if (inputItemIds.includes(item.item_id.toNumber())) {
18946
- readyMs = Math.max(readyMs, ordered.completesAt.getTime());
18991
+ if (demand.has(cargoKey(item))) {
18992
+ candidates.push(ordered.completesAt.getTime());
18947
18993
  break;
18948
18994
  }
18949
18995
  }
18950
18996
  }
18951
- return new Date(readyMs);
18997
+ for (const src of incoming) {
18998
+ if (src.items.some((item) => demand.has(cargoKey(item)))) {
18999
+ candidates.push(src.until.getTime());
19000
+ }
19001
+ }
19002
+ candidates.sort((a, b) => a - b);
19003
+ for (const candidateMs of candidates) {
19004
+ const available = projectedCargoAvailableAt(entity, new Date(candidateMs + 1), incoming);
19005
+ let sufficient = true;
19006
+ for (const [key, quantity] of demand) {
19007
+ if ((available.get(key) ?? 0n) < quantity) {
19008
+ sufficient = false;
19009
+ break;
19010
+ }
19011
+ }
19012
+ if (sufficient)
19013
+ return new Date(candidateMs);
19014
+ }
19015
+ return new Date(candidates[candidates.length - 1]);
18952
19016
  }
18953
19017
  function availableForItem(avail, itemId) {
18954
19018
  const prefix = `${itemId}:`;
@@ -18967,6 +19031,7 @@ exports.CancelBlockReason = void 0;
18967
19031
  CancelBlockReason["DONE"] = "DONE";
18968
19032
  CancelBlockReason["CONTAINS_LINKED_TASK"] = "CONTAINS_LINKED_TASK";
18969
19033
  CancelBlockReason["WOULD_STRAND"] = "WOULD_STRAND";
19034
+ CancelBlockReason["WOULD_STRAND_COUNTERPART"] = "WOULD_STRAND_COUNTERPART";
18970
19035
  CancelBlockReason["WOULD_OVERFILL"] = "WOULD_OVERFILL";
18971
19036
  CancelBlockReason["NOT_OWNER"] = "NOT_OWNER";
18972
19037
  })(exports.CancelBlockReason || (exports.CancelBlockReason = {}));
@@ -18977,14 +19042,16 @@ function postCancelEntity(entity, laneKey, fromTaskIndex) {
18977
19042
  lane.schedule.tasks = lane.schedule.tasks.slice(0, fromTaskIndex);
18978
19043
  return clone;
18979
19044
  }
18980
- function feasibleAfterCancel(post) {
18981
- const ordered = orderedTasks(post);
19045
+ function queueFeasible(entity, incoming = []) {
19046
+ const ordered = orderedTasks(entity);
18982
19047
  const base = new Map();
18983
- for (const c of post.cargo ?? []) {
19048
+ for (const c of entity.cargo ?? []) {
18984
19049
  const k = cargoKey(c);
18985
19050
  base.set(k, (base.get(k) ?? 0) + c.quantity.toNumber());
18986
19051
  }
18987
- const isConsumer = (t) => t.type.toNumber() === exports.TaskType.CRAFT || t.type.toNumber() === exports.TaskType.UNLOAD;
19052
+ const isConsumer = (t) => t.type.toNumber() === exports.TaskType.CRAFT ||
19053
+ t.type.toNumber() === exports.TaskType.UNLOAD ||
19054
+ t.type.toNumber() === exports.TaskType.UPGRADE;
18988
19055
  for (const self of ordered) {
18989
19056
  if (!isConsumer(self.task))
18990
19057
  continue;
@@ -18996,6 +19063,13 @@ function feasibleAfterCancel(post) {
18996
19063
  map.set(cargoKey(out), (map.get(cargoKey(out)) ?? 0) + out.quantity.toNumber());
18997
19064
  }
18998
19065
  }
19066
+ for (const src of incoming) {
19067
+ if (src.until.getTime() >= self.completesAt.getTime())
19068
+ continue;
19069
+ for (const item of src.items) {
19070
+ map.set(cargoKey(item), (map.get(cargoKey(item)) ?? 0) + item.quantity.toNumber());
19071
+ }
19072
+ }
18999
19073
  for (const other of ordered) {
19000
19074
  if (other === self)
19001
19075
  continue;
@@ -19009,6 +19083,11 @@ function feasibleAfterCancel(post) {
19009
19083
  return false;
19010
19084
  }
19011
19085
  }
19086
+ return true;
19087
+ }
19088
+ function feasibleAfterCancel(post) {
19089
+ if (!queueFeasible(post))
19090
+ return false;
19012
19091
  try {
19013
19092
  validateSchedule(post);
19014
19093
  }
@@ -19066,6 +19145,35 @@ function cancelEligibility(entity, laneKey, fromTaskIndex, input) {
19066
19145
  const post = postCancelEntity(entity, laneKey, fromTaskIndex);
19067
19146
  if (!feasibleAfterCancel(post))
19068
19147
  return block(exports.CancelBlockReason.WOULD_STRAND);
19148
+ const releasedByCounterpart = new Map();
19149
+ for (const i of taskIndices) {
19150
+ for (const c of tasks[i].couplings ?? []) {
19151
+ if (!isIncomingCouplingKind(c.kind.toNumber()))
19152
+ continue;
19153
+ const id = c.counterpart.entity_id.toString();
19154
+ const entry = releasedByCounterpart.get(id) ?? {
19155
+ counterpart: c.counterpart,
19156
+ holdIds: new Set(),
19157
+ };
19158
+ entry.holdIds.add(c.hold.toString());
19159
+ releasedByCounterpart.set(id, entry);
19160
+ }
19161
+ }
19162
+ for (const [counterpartId, released] of releasedByCounterpart) {
19163
+ const counterpart = input.counterparts?.get(counterpartId);
19164
+ if (!counterpart)
19165
+ continue;
19166
+ const incoming = (input.counterpartIncoming?.get(counterpartId) ?? []).filter((src) => !released.holdIds.has(src.holdId));
19167
+ if (!queueFeasible(counterpart, incoming)) {
19168
+ return {
19169
+ ok: false,
19170
+ blockedReason: exports.CancelBlockReason.WOULD_STRAND_COUNTERPART,
19171
+ blockedByCounterpart: released.counterpart,
19172
+ range,
19173
+ effects: { ...EMPTY_EFFECTS },
19174
+ };
19175
+ }
19176
+ }
19069
19177
  const effects = { refunds: [], releasedHolds: [], abandonsRunning: false };
19070
19178
  let energyForfeited = 0;
19071
19179
  for (const i of taskIndices) {
@@ -19215,7 +19323,24 @@ function receiveFits(dest, item, now) {
19215
19323
  return peak <= capacity;
19216
19324
  }
19217
19325
 
19218
- function maxCraftable(entity, recipe, crafterSpeed, now) {
19326
+ function itemReadyAt(entity, itemIds, incoming) {
19327
+ let readyMs = 0;
19328
+ for (const ordered of orderedTasks(entity)) {
19329
+ for (const item of taskCargoEffect(ordered.task).added) {
19330
+ if (itemIds.includes(item.item_id.toNumber())) {
19331
+ readyMs = Math.max(readyMs, ordered.completesAt.getTime());
19332
+ break;
19333
+ }
19334
+ }
19335
+ }
19336
+ for (const src of incoming) {
19337
+ if (src.items.some((item) => itemIds.includes(item.item_id.toNumber()))) {
19338
+ readyMs = Math.max(readyMs, src.until.getTime());
19339
+ }
19340
+ }
19341
+ return new Date(readyMs);
19342
+ }
19343
+ function maxCraftable(entity, recipe, crafterSpeed, now, incoming = []) {
19219
19344
  if (recipe.inputs.length === 0)
19220
19345
  return 0;
19221
19346
  const perUnitMass = recipe.inputs.reduce((sum, input) => sum + getItem(input.itemId).mass * input.quantity, 0);
@@ -19223,9 +19348,9 @@ function maxCraftable(entity, recipe, crafterSpeed, now) {
19223
19348
  const crafterLane = workerLaneKey(entity.modules, 'crafter', entity.lanes ?? []);
19224
19349
  const naiveCompletesAt = candidateLaneCompletesAt(entity, crafterLane, perUnitDuration, now);
19225
19350
  const laneStartMs = naiveCompletesAt.getTime() - perUnitDuration * 1000;
19226
- const readyMs = cargoReadyAt(entity, recipe.inputs.map((input) => input.itemId)).getTime();
19351
+ const readyMs = itemReadyAt(entity, recipe.inputs.map((input) => input.itemId), incoming).getTime();
19227
19352
  const completesAt = new Date(Math.max(laneStartMs, readyMs) + perUnitDuration * 1000);
19228
- const availability = projectedCargoAvailableAt(entity, completesAt);
19353
+ const availability = projectedCargoAvailableAt(entity, completesAt, incoming);
19229
19354
  let maxUnits;
19230
19355
  for (const input of recipe.inputs) {
19231
19356
  if (input.quantity <= 0)
@@ -20090,6 +20215,16 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
20090
20215
  ],
20091
20216
  };
20092
20217
  }
20218
+ case MODULE_BUILDER: {
20219
+ const caps = computeBuilderCapabilities(stats);
20220
+ return {
20221
+ capability: 'Build',
20222
+ attributes: [
20223
+ { label: 'Speed', value: caps.speed },
20224
+ { label: 'Drain', value: toWholeEnergy$1(caps.drain) },
20225
+ ],
20226
+ };
20227
+ }
20093
20228
  case MODULE_HAULER: {
20094
20229
  const caps = computeHaulerCapabilities(stats, tier);
20095
20230
  return {
@@ -21068,7 +21203,7 @@ exports.ITEM_CRYSTAL_T7 = ITEM_CRYSTAL_T7;
21068
21203
  exports.ITEM_CRYSTAL_T8 = ITEM_CRYSTAL_T8;
21069
21204
  exports.ITEM_CRYSTAL_T9 = ITEM_CRYSTAL_T9;
21070
21205
  exports.ITEM_DOES_NOT_EXIST = ITEM_DOES_NOT_EXIST;
21071
- exports.ITEM_DREDGER_T1_PACKED = ITEM_DREDGER_T1_PACKED;
21206
+ exports.ITEM_DREDGER_T2A_PACKED = ITEM_DREDGER_T2A_PACKED;
21072
21207
  exports.ITEM_ENGINE_T1 = ITEM_ENGINE_T1;
21073
21208
  exports.ITEM_EXTRACTOR_T1_PACKED = ITEM_EXTRACTOR_T1_PACKED;
21074
21209
  exports.ITEM_FACTORY_T1_PACKED = ITEM_FACTORY_T1_PACKED;
@@ -21087,7 +21222,6 @@ exports.ITEM_GAS_T9 = ITEM_GAS_T9;
21087
21222
  exports.ITEM_GATHERER_T1 = ITEM_GATHERER_T1;
21088
21223
  exports.ITEM_GATHERER_T2 = ITEM_GATHERER_T2;
21089
21224
  exports.ITEM_GENERATOR_T1 = ITEM_GENERATOR_T1;
21090
- exports.ITEM_HAULER_SHIP_T2_PACKED = ITEM_HAULER_SHIP_T2_PACKED;
21091
21225
  exports.ITEM_HAULER_T1 = ITEM_HAULER_T1;
21092
21226
  exports.ITEM_HAULER_T2 = ITEM_HAULER_T2;
21093
21227
  exports.ITEM_HUB_T1_PACKED = ITEM_HUB_T1_PACKED;
@@ -21114,9 +21248,10 @@ exports.ITEM_PLATE = ITEM_PLATE;
21114
21248
  exports.ITEM_PLATE_T2 = ITEM_PLATE_T2;
21115
21249
  exports.ITEM_POLYMER = ITEM_POLYMER;
21116
21250
  exports.ITEM_POLYMER_T2 = ITEM_POLYMER_T2;
21117
- exports.ITEM_PORTER_T1_PACKED = ITEM_PORTER_T1_PACKED;
21118
- exports.ITEM_PROSPECTOR_T1_PACKED = ITEM_PROSPECTOR_T1_PACKED;
21119
- exports.ITEM_PROSPECTOR_T2_PACKED = ITEM_PROSPECTOR_T2_PACKED;
21251
+ exports.ITEM_PORTER_T1A_PACKED = ITEM_PORTER_T1A_PACKED;
21252
+ exports.ITEM_PROSPECTOR_T1A_PACKED = ITEM_PROSPECTOR_T1A_PACKED;
21253
+ exports.ITEM_PROSPECTOR_T2A_PACKED = ITEM_PROSPECTOR_T2A_PACKED;
21254
+ exports.ITEM_PROSPECTOR_T2B_PACKED = ITEM_PROSPECTOR_T2B_PACKED;
21120
21255
  exports.ITEM_REACTOR = ITEM_REACTOR;
21121
21256
  exports.ITEM_REACTOR_T2 = ITEM_REACTOR_T2;
21122
21257
  exports.ITEM_REGOLITH_T1 = ITEM_REGOLITH_T1;
@@ -21133,13 +21268,14 @@ exports.ITEM_RESIN = ITEM_RESIN;
21133
21268
  exports.ITEM_RESIN_T2 = ITEM_RESIN_T2;
21134
21269
  exports.ITEM_RESONATOR = ITEM_RESONATOR;
21135
21270
  exports.ITEM_RESONATOR_T2 = ITEM_RESONATOR_T2;
21136
- exports.ITEM_ROUSTABOUT_T1_PACKED = ITEM_ROUSTABOUT_T1_PACKED;
21271
+ exports.ITEM_ROUSTABOUT_T1A_PACKED = ITEM_ROUSTABOUT_T1A_PACKED;
21137
21272
  exports.ITEM_SENSOR = ITEM_SENSOR;
21138
21273
  exports.ITEM_SENSOR_T2 = ITEM_SENSOR_T2;
21139
21274
  exports.ITEM_SHIP_T1_PACKED = ITEM_SHIP_T1_PACKED;
21275
+ exports.ITEM_SMITH_T1A_PACKED = ITEM_SMITH_T1A_PACKED;
21140
21276
  exports.ITEM_STORAGE_T1 = ITEM_STORAGE_T1;
21141
- exports.ITEM_TENDER_T1_PACKED = ITEM_TENDER_T1_PACKED;
21142
- exports.ITEM_TUG_T1_PACKED = ITEM_TUG_T1_PACKED;
21277
+ exports.ITEM_TENDER_T1A_PACKED = ITEM_TENDER_T1A_PACKED;
21278
+ exports.ITEM_TUG_T1A_PACKED = ITEM_TUG_T1A_PACKED;
21143
21279
  exports.ITEM_TYPE_COMPONENT = ITEM_TYPE_COMPONENT;
21144
21280
  exports.ITEM_TYPE_ENTITY = ITEM_TYPE_ENTITY;
21145
21281
  exports.ITEM_TYPE_MODULE = ITEM_TYPE_MODULE;
@@ -21147,8 +21283,7 @@ exports.ITEM_TYPE_RESOURCE = ITEM_TYPE_RESOURCE;
21147
21283
  exports.ITEM_WAREHOUSE_T1_PACKED = ITEM_WAREHOUSE_T1_PACKED;
21148
21284
  exports.ITEM_WARP_T1 = ITEM_WARP_T1;
21149
21285
  exports.ITEM_WORKSHOP_T1_PACKED = ITEM_WORKSHOP_T1_PACKED;
21150
- exports.ITEM_WRANGLER_T1_PACKED = ITEM_WRANGLER_T1_PACKED;
21151
- exports.ITEM_WRIGHT_T1_PACKED = ITEM_WRIGHT_T1_PACKED;
21286
+ exports.ITEM_WRIGHT_T1A_PACKED = ITEM_WRIGHT_T1A_PACKED;
21152
21287
  exports.InventoryAccessor = InventoryAccessor;
21153
21288
  exports.JOB_QUEUE_CAP = JOB_QUEUE_CAP;
21154
21289
  exports.LANE_BARRIER = LANE_BARRIER;
@@ -21166,6 +21301,7 @@ exports.MIN_ORBITAL_ALTITUDE = MIN_ORBITAL_ALTITUDE;
21166
21301
  exports.MIN_TRANSFER_DISTANCE_ORBITAL_VESSEL = MIN_TRANSFER_DISTANCE_ORBITAL_VESSEL;
21167
21302
  exports.MIN_TRANSFER_DISTANCE_PLANETARY_STRUCTURE = MIN_TRANSFER_DISTANCE_PLANETARY_STRUCTURE;
21168
21303
  exports.MODULE_ANY = MODULE_ANY;
21304
+ exports.MODULE_AUX = MODULE_AUX;
21169
21305
  exports.MODULE_BATTERY = MODULE_BATTERY;
21170
21306
  exports.MODULE_BUILDER = MODULE_BUILDER;
21171
21307
  exports.MODULE_CARGO_NOT_FOUND = MODULE_CARGO_NOT_FOUND;
@@ -21276,6 +21412,7 @@ exports.buildModuleImmutable = buildModuleImmutable;
21276
21412
  exports.buildResourceImmutable = buildResourceImmutable;
21277
21413
  exports.calcCargoItemMass = calcCargoItemMass;
21278
21414
  exports.calcCargoMass = calcCargoMass;
21415
+ exports.calcCounterpartDelivery = calcCounterpartDelivery;
21279
21416
  exports.calcEnergyUsage = calcEnergyUsage;
21280
21417
  exports.calcStacksMass = calcStacksMass;
21281
21418
  exports.calc_acceleration = calc_acceleration;
@@ -21319,8 +21456,10 @@ exports.capsHasLoaders = capsHasLoaders;
21319
21456
  exports.capsHasMass = capsHasMass;
21320
21457
  exports.capsHasMovement = capsHasMovement;
21321
21458
  exports.capsHasStorage = capsHasStorage;
21459
+ exports.cargoInputKey = cargoInputKey;
21322
21460
  exports.cargoItem = cargoItem;
21323
21461
  exports.cargoItemToStack = cargoItemToStack;
21462
+ exports.cargoKey = cargoKey;
21324
21463
  exports.cargoReadyAt = cargoReadyAt;
21325
21464
  exports.cargoRef = cargoRef;
21326
21465
  exports.cargoUtils = cargoUtils;
@@ -21601,6 +21740,7 @@ exports.toLocation = toLocation;
21601
21740
  exports.typeLabel = typeLabel;
21602
21741
  exports.unwrapLoadDuration = unwrapLoadDuration;
21603
21742
  exports.unwrapTransitDuration = unwrapTransitDuration;
21743
+ exports.usedInputStatKeys = usedInputStatKeys;
21604
21744
  exports.validateDisplayName = validateDisplayName;
21605
21745
  exports.validateSchedule = validateSchedule;
21606
21746
  exports.workerLaneKey = workerLaneKey;