@shipload/sdk 1.0.0-next.7 → 1.0.0-next.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/lib/scan.d.ts +52 -0
  2. package/lib/scan.js +162 -0
  3. package/lib/scan.js.map +1 -0
  4. package/lib/scan.m.js +152 -0
  5. package/lib/scan.m.js.map +1 -0
  6. package/lib/shipload.d.ts +5696 -1503
  7. package/lib/shipload.js +20294 -5200
  8. package/lib/shipload.js.map +1 -1
  9. package/lib/shipload.m.js +20371 -5683
  10. package/lib/shipload.m.js.map +1 -1
  11. package/lib/testing.d.ts +1648 -0
  12. package/lib/testing.js +6980 -0
  13. package/lib/testing.js.map +1 -0
  14. package/lib/testing.m.js +6974 -0
  15. package/lib/testing.m.js.map +1 -0
  16. package/package.json +20 -2
  17. package/src/capabilities/craftable.test.ts +82 -0
  18. package/src/capabilities/craftable.ts +82 -0
  19. package/src/capabilities/crafting.test.ts +80 -0
  20. package/src/capabilities/crafting.ts +50 -8
  21. package/src/capabilities/gathering.test.ts +29 -0
  22. package/src/capabilities/gathering.ts +38 -20
  23. package/src/capabilities/hauling.ts +0 -5
  24. package/src/capabilities/index.ts +0 -1
  25. package/src/capabilities/modules.ts +27 -30
  26. package/src/capabilities/movement.ts +1 -1
  27. package/src/capabilities/storage.test.ts +26 -0
  28. package/src/capabilities/storage.ts +22 -7
  29. package/src/contracts/fund.ts +306 -0
  30. package/src/contracts/platform.ts +312 -3
  31. package/src/contracts/server.ts +2661 -466
  32. package/src/contracts/token.ts +170 -0
  33. package/src/contracts.ts +2 -0
  34. package/src/coordinates/address.ts +88 -0
  35. package/src/coordinates/constants.test.ts +15 -0
  36. package/src/coordinates/constants.ts +23 -0
  37. package/src/coordinates/index.ts +15 -0
  38. package/src/coordinates/memo.test.ts +47 -0
  39. package/src/coordinates/memo.ts +20 -0
  40. package/src/coordinates/permutation.ts +77 -0
  41. package/src/coordinates/regions.ts +48 -0
  42. package/src/coordinates/sectors.ts +115 -0
  43. package/src/data/capabilities.ts +49 -18
  44. package/src/data/capability-formulas.ts +26 -14
  45. package/src/data/catalog.test.ts +19 -0
  46. package/src/data/catalog.ts +13 -3
  47. package/src/data/charters.json +396 -0
  48. package/src/data/citizenry-adjectives.json +42 -0
  49. package/src/data/citizenry-nouns.json +50 -0
  50. package/src/data/colors.ts +14 -32
  51. package/src/data/entities.json +421 -15
  52. package/src/data/item-ids.ts +53 -13
  53. package/src/data/items.json +330 -77
  54. package/src/data/kind-registry.json +212 -0
  55. package/src/data/kind-registry.ts +192 -0
  56. package/src/data/metadata.ts +312 -51
  57. package/src/data/recipes-runtime.ts +6 -23
  58. package/src/data/recipes.json +2173 -173
  59. package/src/data/tiers.ts +9 -6
  60. package/src/derivation/build-methods.test.ts +71 -0
  61. package/src/derivation/build-methods.ts +50 -0
  62. package/src/derivation/capabilities.test.ts +348 -0
  63. package/src/derivation/capabilities.ts +707 -0
  64. package/src/derivation/capability-mappings.ts +60 -16
  65. package/src/derivation/crafting.test.ts +17 -0
  66. package/src/derivation/crafting.ts +57 -34
  67. package/src/derivation/index.ts +27 -2
  68. package/src/derivation/recipe-usage.test.ts +88 -0
  69. package/src/derivation/recipe-usage.ts +141 -0
  70. package/src/derivation/reserve-regen.ts +34 -0
  71. package/src/derivation/resources.ts +9 -1
  72. package/src/derivation/rollups.test.ts +55 -0
  73. package/src/derivation/rollups.ts +72 -0
  74. package/src/derivation/stars.test.ts +67 -0
  75. package/src/derivation/stars.ts +25 -0
  76. package/src/derivation/stat-scaling.ts +12 -0
  77. package/src/derivation/stats.ts +6 -6
  78. package/src/derivation/strata.ts +5 -3
  79. package/src/derivation/stratum.ts +26 -22
  80. package/src/derivation/tiers.ts +40 -7
  81. package/src/derivation/upgrades.ts +14 -0
  82. package/src/derivation/wormhole.ts +154 -0
  83. package/src/entities/entity.ts +102 -0
  84. package/src/entities/gamestate.ts +3 -28
  85. package/src/entities/makers.ts +144 -136
  86. package/src/entities/slot-multiplier.ts +43 -0
  87. package/src/entity/hydrate.test.ts +156 -0
  88. package/src/entity/hydrate.ts +86 -0
  89. package/src/errors.ts +21 -16
  90. package/src/format.ts +42 -9
  91. package/src/index-module.ts +411 -32
  92. package/src/influence/ballot.test.ts +103 -0
  93. package/src/influence/ballot.ts +98 -0
  94. package/src/influence/categories.ts +32 -0
  95. package/src/influence/charter-metadata.test.ts +136 -0
  96. package/src/influence/charter-metadata.ts +236 -0
  97. package/src/influence/charters.test.ts +112 -0
  98. package/src/influence/charters.ts +150 -0
  99. package/src/influence/citizenry.ts +38 -0
  100. package/src/influence/civic-shuttle.test.ts +202 -0
  101. package/src/influence/civic-shuttle.ts +142 -0
  102. package/src/influence/civic.test.ts +287 -0
  103. package/src/influence/civic.ts +269 -0
  104. package/src/influence/constants.ts +84 -0
  105. package/src/influence/decay.ts +20 -0
  106. package/src/influence/decomp.ts +95 -0
  107. package/src/influence/demand.ts +106 -0
  108. package/src/influence/duration.ts +101 -0
  109. package/src/influence/index.ts +118 -0
  110. package/src/influence/influence.test.ts +450 -0
  111. package/src/influence/quality.ts +25 -0
  112. package/src/influence/valuation.ts +154 -0
  113. package/src/managers/actions.ts +940 -93
  114. package/src/managers/balances.test.ts +161 -0
  115. package/src/managers/balances.ts +93 -0
  116. package/src/managers/base.ts +10 -2
  117. package/src/managers/cluster.test.ts +39 -0
  118. package/src/managers/cluster.ts +53 -0
  119. package/src/managers/construction-types.ts +80 -0
  120. package/src/managers/construction.ts +453 -0
  121. package/src/managers/context.ts +58 -1
  122. package/src/managers/coordinates.ts +14 -0
  123. package/src/managers/entities.ts +35 -63
  124. package/src/managers/epochs.ts +72 -1
  125. package/src/managers/index.ts +38 -1
  126. package/src/managers/influence.test.ts +56 -0
  127. package/src/managers/influence.ts +425 -0
  128. package/src/managers/jobs.test.ts +80 -0
  129. package/src/managers/jobs.ts +54 -0
  130. package/src/managers/locations.ts +25 -29
  131. package/src/managers/nft.test.ts +21 -0
  132. package/src/managers/nft.ts +110 -0
  133. package/src/managers/players.ts +25 -0
  134. package/src/managers/plot.ts +122 -0
  135. package/src/nft/atomicassets.abi.json +1342 -0
  136. package/src/nft/atomicassets.ts +237 -0
  137. package/src/nft/atomicdata.ts +130 -0
  138. package/src/nft/buildImmutableData.ts +388 -0
  139. package/src/nft/description.ts +222 -100
  140. package/src/nft/index.ts +3 -0
  141. package/src/planner/index.ts +296 -0
  142. package/src/planner/planner.test.ts +459 -0
  143. package/src/receipts.ts +22 -0
  144. package/src/resolution/describe-module.ts +43 -25
  145. package/src/resolution/display-name.ts +39 -11
  146. package/src/resolution/resolve-item.test.ts +48 -0
  147. package/src/resolution/resolve-item.ts +112 -58
  148. package/src/scan/index.ts +244 -0
  149. package/src/scan/scan-wasm.base64.ts +2 -0
  150. package/src/scheduling/accessor.ts +65 -23
  151. package/src/scheduling/availability.test.ts +320 -0
  152. package/src/scheduling/availability.ts +251 -0
  153. package/src/scheduling/cancel.test.ts +550 -0
  154. package/src/scheduling/cancel.ts +254 -0
  155. package/src/scheduling/cluster-stock.test.ts +31 -0
  156. package/src/scheduling/cluster-stock.ts +15 -0
  157. package/src/scheduling/energy.ts +47 -0
  158. package/src/scheduling/epoch.ts +1 -0
  159. package/src/scheduling/idle-resolve.ts +45 -0
  160. package/src/scheduling/jobs.test.ts +49 -0
  161. package/src/scheduling/jobs.ts +137 -0
  162. package/src/scheduling/lane-core.ts +128 -0
  163. package/src/scheduling/lanes.test.ts +250 -0
  164. package/src/scheduling/lanes.ts +227 -0
  165. package/src/scheduling/projection.ts +265 -149
  166. package/src/scheduling/schedule.test.ts +163 -0
  167. package/src/scheduling/schedule.ts +282 -116
  168. package/src/scheduling/task-cargo.test.ts +110 -0
  169. package/src/scheduling/task-cargo.ts +62 -0
  170. package/src/scheduling/task-effects.test.ts +35 -0
  171. package/src/scheduling/task-effects.ts +34 -0
  172. package/src/scheduling/unwrap.test.ts +86 -0
  173. package/src/scheduling/unwrap.ts +190 -0
  174. package/src/shipload.ts +63 -4
  175. package/src/subscriptions/manager.cluster.test.ts +51 -0
  176. package/src/subscriptions/manager.ts +245 -172
  177. package/src/subscriptions/mappers.ts +5 -8
  178. package/src/subscriptions/types.ts +28 -3
  179. package/src/testing/catalog-hash.ts +19 -0
  180. package/src/testing/index.ts +2 -0
  181. package/src/testing/projection-parity.ts +167 -0
  182. package/src/travel/reach.test.ts +86 -0
  183. package/src/travel/reach.ts +34 -0
  184. package/src/travel/route-build.test.ts +63 -0
  185. package/src/travel/route-build.ts +60 -0
  186. package/src/travel/route-planner.ts +288 -0
  187. package/src/travel/route-simulator.ts +170 -0
  188. package/src/travel/travel.ts +190 -123
  189. package/src/types/capabilities.ts +37 -8
  190. package/src/types/entity.ts +3 -3
  191. package/src/types/index.ts +0 -1
  192. package/src/types.ts +81 -23
  193. package/src/utils/cargo.test.ts +14 -0
  194. package/src/utils/cargo.ts +2 -0
  195. package/src/utils/display-name.ts +70 -0
  196. package/src/utils/hash.ts +22 -2
  197. package/src/utils/system.ts +24 -5
  198. package/src/capabilities/loading.ts +0 -8
  199. package/src/entities/container.ts +0 -123
  200. package/src/entities/ship-deploy.ts +0 -295
  201. package/src/entities/ship.ts +0 -221
  202. package/src/entities/warehouse.ts +0 -127
  203. package/src/types/entity-traits.ts +0 -69
@@ -8,6 +8,14 @@ export interface StatMapping {
8
8
  stat: string
9
9
  capability: string
10
10
  attribute: string
11
+ source: string // producing module/role, always present
12
+ }
13
+
14
+ export interface CapabilityAttributeRow {
15
+ capability: string
16
+ attribute: string
17
+ description: string
18
+ source?: string // producing module/role; absent when no formula-derived producer exists
11
19
  }
12
20
 
13
21
  export const capabilityNames: string[] = [
@@ -15,57 +23,80 @@ export const capabilityNames: string[] = [
15
23
  'Storage',
16
24
  'Movement',
17
25
  'Energy',
18
- 'Loader',
26
+ 'Loading',
19
27
  'Gathering',
20
28
  'Warp',
21
- 'Crafter',
29
+ 'Crafting',
30
+ 'Build',
22
31
  'Launch',
23
- 'Hauler',
32
+ 'Hauling',
24
33
  ]
25
34
 
26
35
  export const capabilityAttributes: CapabilityAttribute[] = [
27
36
  {capability: 'Hull', attribute: 'mass', description: 'Total mass of the hull'},
28
- {capability: 'Storage', attribute: 'capacity', description: 'Maximum mass that can be stored'},
29
37
  {
30
38
  capability: 'Storage',
31
- attribute: 'bonus',
32
- description: 'Capacity bonus added by an installed Storage module',
39
+ attribute: 'capacity',
40
+ description: 'Cargo capacity added by hulls and installed Cargo Hold modules',
41
+ },
42
+ {
43
+ capability: 'Storage',
44
+ attribute: 'drain',
45
+ description: 'Fixed normal-travel drain contributed by an installed Cargo Hold',
33
46
  },
34
47
  {capability: 'Movement', attribute: 'thrust', description: 'Propulsion force'},
35
- {capability: 'Movement', attribute: 'drain', description: 'Energy consumed per movement'},
36
- {capability: 'Energy', attribute: 'capacity', description: 'Maximum energy storage'},
48
+ {
49
+ capability: 'Movement',
50
+ attribute: 'drain',
51
+ description: 'Total installed energy consumed per tile of normal travel',
52
+ },
53
+ {
54
+ capability: 'Energy',
55
+ attribute: 'capacity',
56
+ description: 'Energy capacity from Power Cores and installed Battery Bank modules',
57
+ },
37
58
  {capability: 'Energy', attribute: 'recharge', description: 'Energy regeneration rate'},
38
- {capability: 'Loader', attribute: 'mass', description: 'Weight of the loader unit itself'},
39
- {capability: 'Loader', attribute: 'thrust', description: 'Loading speed/force'},
59
+ {capability: 'Loading', attribute: 'mass', description: 'Weight of the loader unit itself'},
60
+ {capability: 'Loading', attribute: 'thrust', description: 'Loading speed/force'},
61
+ {
62
+ capability: 'Loading',
63
+ attribute: 'quantity',
64
+ description: 'Number of cargo items moved per load operation',
65
+ },
40
66
  {capability: 'Gathering', attribute: 'yield', description: 'Mass gathered per second'},
41
67
  {capability: 'Gathering', attribute: 'drain', description: 'Energy consumed per gather'},
42
68
  {capability: 'Gathering', attribute: 'depth', description: 'Maximum gather depth'},
43
- {capability: 'Gathering', attribute: 'speed', description: 'Gathering speed/penetration'},
44
69
  {capability: 'Warp', attribute: 'range', description: 'Maximum warp distance'},
45
- {capability: 'Crafter', attribute: 'speed', description: 'Crafting time per item'},
70
+ {capability: 'Crafting', attribute: 'speed', description: 'Crafting time per item'},
46
71
  {
47
- capability: 'Crafter',
72
+ capability: 'Crafting',
48
73
  attribute: 'drain',
49
74
  description: 'Energy consumed per second while crafting',
50
75
  },
51
- {capability: 'Crafter', attribute: 'quality', description: 'Modifier on output quality'},
76
+ {capability: 'Crafting', attribute: 'quality', description: 'Modifier on output quality'},
77
+ {capability: 'Build', attribute: 'speed', description: 'Build progress per second'},
78
+ {
79
+ capability: 'Build',
80
+ attribute: 'drain',
81
+ description: 'Energy consumed per second while building',
82
+ },
52
83
  {capability: 'Launch', attribute: 'range', description: 'Maximum launch distance'},
53
84
  {capability: 'Launch', attribute: 'capacity', description: 'Maximum mass per launch'},
54
85
  {capability: 'Launch', attribute: 'drain', description: 'Energy consumed per launch'},
55
86
  {
56
- capability: 'Hauler',
87
+ capability: 'Hauling',
57
88
  attribute: 'capacity',
58
89
  description: 'Number of targets the haul beam can lock onto simultaneously',
59
90
  },
60
91
  {
61
- capability: 'Hauler',
92
+ capability: 'Hauling',
62
93
  attribute: 'efficiency',
63
94
  description: 'Thrust penalty reduction per hauled target',
64
95
  },
65
96
  {
66
- capability: 'Hauler',
97
+ capability: 'Hauling',
67
98
  attribute: 'drain',
68
- description: 'Energy consumed per target during haul-beam operation',
99
+ description: 'Fixed normal-travel drain contributed by an installed Tractor Beam',
69
100
  },
70
101
  ]
71
102
 
@@ -9,19 +9,21 @@ export type SlotConsumerKind =
9
9
  | 'gatherer'
10
10
  | 'loader'
11
11
  | 'crafter'
12
+ | 'builder'
12
13
  | 'storage'
13
14
  | 'hauler'
14
15
  | 'warp'
16
+ | 'battery'
15
17
  | 'ship-t1'
16
18
  | 'container-t1'
17
19
  | 'warehouse-t1'
20
+ | 'extractor-t1'
18
21
  | 'container-t2'
19
22
 
20
23
  const ENTITY_HULL_SLOTS: Record<number, SlotConsumer> = {
21
24
  0: {capability: 'Storage', attribute: 'capacity'},
22
25
  1: {capability: 'Hull', attribute: 'mass'},
23
26
  2: {capability: 'Storage', attribute: 'capacity'},
24
- 3: {capability: 'Storage', attribute: 'capacity'},
25
27
  }
26
28
 
27
29
  export const SLOT_FORMULAS: Record<SlotConsumerKind, Record<number, SlotConsumer>> = {
@@ -36,33 +38,43 @@ export const SLOT_FORMULAS: Record<SlotConsumerKind, Record<number, SlotConsumer
36
38
  gatherer: {
37
39
  0: {capability: 'Gathering', attribute: 'yield'},
38
40
  1: {capability: 'Gathering', attribute: 'depth'},
39
- 3: {capability: 'Gathering', attribute: 'drain'},
40
- 4: {capability: 'Gathering', attribute: 'speed'},
41
+ 2: {capability: 'Gathering', attribute: 'drain'},
41
42
  },
42
43
  loader: {
43
- 0: {capability: 'Loader', attribute: 'mass'},
44
- 1: {capability: 'Loader', attribute: 'thrust'},
44
+ 0: {capability: 'Loading', attribute: 'mass'},
45
+ 1: {capability: 'Loading', attribute: 'thrust'},
45
46
  },
46
47
  crafter: {
47
- 0: {capability: 'Crafter', attribute: 'speed'},
48
- 1: {capability: 'Crafter', attribute: 'drain'},
48
+ 0: {capability: 'Crafting', attribute: 'speed'},
49
+ 1: {capability: 'Crafting', attribute: 'drain'},
50
+ },
51
+ builder: {
52
+ 0: {capability: 'Build', attribute: 'speed'},
53
+ 1: {capability: 'Build', attribute: 'drain'},
49
54
  },
50
55
  storage: {
51
- 0: {capability: 'Storage', attribute: 'bonus'},
52
- 1: {capability: 'Storage', attribute: 'bonus'},
53
- 2: {capability: 'Storage', attribute: 'bonus'},
54
- 3: {capability: 'Storage', attribute: 'bonus'},
56
+ 0: {capability: 'Storage', attribute: 'capacity'},
57
+ 1: {capability: 'Storage', attribute: 'capacity'},
58
+ 2: {capability: 'Storage', attribute: 'capacity'},
59
+ 3: {capability: 'Storage', attribute: 'capacity'},
55
60
  },
56
61
  hauler: {
57
- 0: {capability: 'Hauler', attribute: 'capacity'},
58
- 1: {capability: 'Hauler', attribute: 'efficiency'},
59
- 2: {capability: 'Hauler', attribute: 'drain'},
62
+ 0: {capability: 'Hauling', attribute: 'capacity'},
63
+ 1: {capability: 'Hauling', attribute: 'efficiency'},
64
+ 2: {capability: 'Hauling', attribute: 'drain'},
60
65
  },
61
66
  warp: {
62
67
  0: {capability: 'Warp', attribute: 'range'},
63
68
  },
69
+ battery: {
70
+ 0: {capability: 'Energy', attribute: 'capacity'},
71
+ 1: {capability: 'Energy', attribute: 'capacity'},
72
+ 2: {capability: 'Energy', attribute: 'capacity'},
73
+ 3: {capability: 'Energy', attribute: 'capacity'},
74
+ },
64
75
  'ship-t1': ENTITY_HULL_SLOTS,
65
76
  'container-t1': ENTITY_HULL_SLOTS,
66
77
  'warehouse-t1': ENTITY_HULL_SLOTS,
78
+ 'extractor-t1': ENTITY_HULL_SLOTS,
67
79
  'container-t2': ENTITY_HULL_SLOTS,
68
80
  }
@@ -0,0 +1,19 @@
1
+ import {describe, expect, test} from 'bun:test'
2
+ import {getItems, itemTypeIndex, typeLabel} from './catalog'
3
+
4
+ describe('itemTypeIndex', () => {
5
+ test('agrees with typeLabel for every item in the catalog', () => {
6
+ for (const item of getItems()) {
7
+ expect(typeLabel(itemTypeIndex(item.id))).toBe(typeLabel(item.type))
8
+ }
9
+ })
10
+
11
+ test('covers every type in the chain enum order', () => {
12
+ const indexes = new Set(getItems().map((item) => itemTypeIndex(item.id)))
13
+ expect([...indexes].sort()).toEqual([0, 1, 2, 3])
14
+ })
15
+
16
+ test('throws for an unknown item', () => {
17
+ expect(() => itemTypeIndex(65535)).toThrow()
18
+ })
19
+ })
@@ -32,12 +32,16 @@ for (const raw of items as any[]) {
32
32
  export const itemIds = Array.from(itemsById.keys())
33
33
 
34
34
  export function getItem(itemId: UInt16Type): Item {
35
- const id = UInt16.from(itemId).toNumber()
36
- const item = itemsById.get(id)
37
- if (!item) throw new Error(`Unknown item id: ${id}`)
35
+ const item = tryGetItem(itemId)
36
+ if (!item) throw new Error(`Unknown item id: ${UInt16.from(itemId).toNumber()}`)
38
37
  return item
39
38
  }
40
39
 
40
+ export function tryGetItem(itemId: UInt16Type): Item | undefined {
41
+ const id = UInt16.from(itemId).toNumber()
42
+ return itemsById.get(id)
43
+ }
44
+
41
45
  export function getItems(): Item[] {
42
46
  return Array.from(itemsById.values())
43
47
  }
@@ -102,6 +106,12 @@ const TYPE_LABEL_BY_STRING: Record<ItemType, string> = {
102
106
 
103
107
  const TYPE_BY_INDEX: ItemType[] = ['resource', 'component', 'module', 'entity']
104
108
 
109
+ export function itemTypeIndex(itemId: UInt16Type): number {
110
+ const index = TYPE_BY_INDEX.indexOf(getItem(itemId).type)
111
+ if (index < 0) throw new Error(`Unknown item type for item ${UInt16.from(itemId).toNumber()}`)
112
+ return index
113
+ }
114
+
105
115
  export function typeLabel(type: ItemType | number): string {
106
116
  if (typeof type === 'number') {
107
117
  const t = TYPE_BY_INDEX[type]
@@ -0,0 +1,396 @@
1
+ {
2
+ "nodes": [
3
+ {
4
+ "nodeId": 10001,
5
+ "cost": "2000000000",
6
+ "prereqs": [],
7
+ "grants": [
8
+ {
9
+ "kind": 4,
10
+ "building": 0,
11
+ "stat": 0,
12
+ "value": 1
13
+ },
14
+ {
15
+ "kind": 3,
16
+ "building": 1,
17
+ "stat": 0,
18
+ "value": 1
19
+ },
20
+ {
21
+ "kind": 1,
22
+ "building": 1,
23
+ "stat": 0,
24
+ "value": 5
25
+ },
26
+ {
27
+ "kind": 2,
28
+ "building": 1,
29
+ "stat": 1,
30
+ "value": 200
31
+ }
32
+ ],
33
+ "exclusionGroup": 0,
34
+ "repeatCap": 0
35
+ },
36
+ {
37
+ "nodeId": 10100201,
38
+ "cost": "800000000",
39
+ "prereqs": [
40
+ 10001
41
+ ],
42
+ "grants": [
43
+ {
44
+ "kind": 2,
45
+ "building": 1,
46
+ "stat": 1,
47
+ "value": 50
48
+ }
49
+ ],
50
+ "exclusionGroup": 0,
51
+ "repeatCap": 0
52
+ },
53
+ {
54
+ "nodeId": 10100202,
55
+ "cost": "1200000000",
56
+ "prereqs": [
57
+ 10100201
58
+ ],
59
+ "grants": [
60
+ {
61
+ "kind": 2,
62
+ "building": 1,
63
+ "stat": 1,
64
+ "value": 50
65
+ }
66
+ ],
67
+ "exclusionGroup": 0,
68
+ "repeatCap": 0
69
+ },
70
+ {
71
+ "nodeId": 10100203,
72
+ "cost": "1600000000",
73
+ "prereqs": [
74
+ 10100202
75
+ ],
76
+ "grants": [
77
+ {
78
+ "kind": 2,
79
+ "building": 1,
80
+ "stat": 1,
81
+ "value": 50
82
+ }
83
+ ],
84
+ "exclusionGroup": 0,
85
+ "repeatCap": 0
86
+ },
87
+ {
88
+ "nodeId": 10100204,
89
+ "cost": "2000000000",
90
+ "prereqs": [
91
+ 10100203
92
+ ],
93
+ "grants": [
94
+ {
95
+ "kind": 2,
96
+ "building": 1,
97
+ "stat": 1,
98
+ "value": 50
99
+ }
100
+ ],
101
+ "exclusionGroup": 0,
102
+ "repeatCap": 0
103
+ },
104
+ {
105
+ "nodeId": 20001,
106
+ "cost": "4000000000",
107
+ "prereqs": [
108
+ 10001
109
+ ],
110
+ "grants": [
111
+ {
112
+ "kind": 4,
113
+ "building": 0,
114
+ "stat": 0,
115
+ "value": 2
116
+ },
117
+ {
118
+ "kind": 3,
119
+ "building": 2,
120
+ "stat": 0,
121
+ "value": 1
122
+ }
123
+ ],
124
+ "exclusionGroup": 0,
125
+ "repeatCap": 0
126
+ },
127
+ {
128
+ "nodeId": 30100001,
129
+ "cost": "3000000000",
130
+ "prereqs": [
131
+ 10001
132
+ ],
133
+ "grants": [
134
+ {
135
+ "kind": 3,
136
+ "building": 3,
137
+ "stat": 0,
138
+ "value": 1
139
+ },
140
+ {
141
+ "kind": 1,
142
+ "building": 3,
143
+ "stat": 0,
144
+ "value": 2
145
+ },
146
+ {
147
+ "kind": 2,
148
+ "building": 3,
149
+ "stat": 2,
150
+ "value": 200
151
+ }
152
+ ],
153
+ "exclusionGroup": 0,
154
+ "repeatCap": 0
155
+ },
156
+ {
157
+ "nodeId": 30100301,
158
+ "cost": "800000000",
159
+ "prereqs": [
160
+ 30100001
161
+ ],
162
+ "grants": [
163
+ {
164
+ "kind": 2,
165
+ "building": 3,
166
+ "stat": 2,
167
+ "value": 50
168
+ }
169
+ ],
170
+ "exclusionGroup": 0,
171
+ "repeatCap": 0
172
+ },
173
+ {
174
+ "nodeId": 30100302,
175
+ "cost": "1200000000",
176
+ "prereqs": [
177
+ 30100301
178
+ ],
179
+ "grants": [
180
+ {
181
+ "kind": 2,
182
+ "building": 3,
183
+ "stat": 2,
184
+ "value": 50
185
+ }
186
+ ],
187
+ "exclusionGroup": 0,
188
+ "repeatCap": 0
189
+ },
190
+ {
191
+ "nodeId": 30100303,
192
+ "cost": "1600000000",
193
+ "prereqs": [
194
+ 30100302
195
+ ],
196
+ "grants": [
197
+ {
198
+ "kind": 2,
199
+ "building": 3,
200
+ "stat": 2,
201
+ "value": 50
202
+ }
203
+ ],
204
+ "exclusionGroup": 0,
205
+ "repeatCap": 0
206
+ },
207
+ {
208
+ "nodeId": 30100304,
209
+ "cost": "2000000000",
210
+ "prereqs": [
211
+ 30100303
212
+ ],
213
+ "grants": [
214
+ {
215
+ "kind": 2,
216
+ "building": 3,
217
+ "stat": 2,
218
+ "value": 50
219
+ }
220
+ ],
221
+ "exclusionGroup": 0,
222
+ "repeatCap": 0
223
+ },
224
+ {
225
+ "nodeId": 40100001,
226
+ "cost": "2500000000",
227
+ "prereqs": [
228
+ 10001
229
+ ],
230
+ "grants": [
231
+ {
232
+ "kind": 3,
233
+ "building": 4,
234
+ "stat": 0,
235
+ "value": 1
236
+ },
237
+ {
238
+ "kind": 1,
239
+ "building": 4,
240
+ "stat": 0,
241
+ "value": 2
242
+ },
243
+ {
244
+ "kind": 2,
245
+ "building": 4,
246
+ "stat": 3,
247
+ "value": 200
248
+ }
249
+ ],
250
+ "exclusionGroup": 0,
251
+ "repeatCap": 0
252
+ },
253
+ {
254
+ "nodeId": 40100101,
255
+ "cost": "1000000000",
256
+ "prereqs": [
257
+ 40100001
258
+ ],
259
+ "grants": [
260
+ {
261
+ "kind": 1,
262
+ "building": 4,
263
+ "stat": 0,
264
+ "value": 1
265
+ },
266
+ {
267
+ "kind": 2,
268
+ "building": 4,
269
+ "stat": 4,
270
+ "value": 200
271
+ }
272
+ ],
273
+ "exclusionGroup": 0,
274
+ "repeatCap": 0
275
+ },
276
+ {
277
+ "nodeId": 40100102,
278
+ "cost": "1500000000",
279
+ "prereqs": [
280
+ 40100101
281
+ ],
282
+ "grants": [
283
+ {
284
+ "kind": 1,
285
+ "building": 4,
286
+ "stat": 0,
287
+ "value": 1
288
+ }
289
+ ],
290
+ "exclusionGroup": 0,
291
+ "repeatCap": 0
292
+ },
293
+ {
294
+ "nodeId": 40100103,
295
+ "cost": "2000000000",
296
+ "prereqs": [
297
+ 40100102
298
+ ],
299
+ "grants": [
300
+ {
301
+ "kind": 1,
302
+ "building": 4,
303
+ "stat": 0,
304
+ "value": 1
305
+ }
306
+ ],
307
+ "exclusionGroup": 0,
308
+ "repeatCap": 0
309
+ },
310
+ {
311
+ "nodeId": 40100104,
312
+ "cost": "2500000000",
313
+ "prereqs": [
314
+ 40100103
315
+ ],
316
+ "grants": [
317
+ {
318
+ "kind": 1,
319
+ "building": 4,
320
+ "stat": 0,
321
+ "value": 1
322
+ }
323
+ ],
324
+ "exclusionGroup": 0,
325
+ "repeatCap": 0
326
+ },
327
+ {
328
+ "nodeId": 40100401,
329
+ "cost": "800000000",
330
+ "prereqs": [
331
+ 40100001
332
+ ],
333
+ "grants": [
334
+ {
335
+ "kind": 2,
336
+ "building": 4,
337
+ "stat": 3,
338
+ "value": 50
339
+ }
340
+ ],
341
+ "exclusionGroup": 0,
342
+ "repeatCap": 0
343
+ },
344
+ {
345
+ "nodeId": 40100402,
346
+ "cost": "1200000000",
347
+ "prereqs": [
348
+ 40100401
349
+ ],
350
+ "grants": [
351
+ {
352
+ "kind": 2,
353
+ "building": 4,
354
+ "stat": 3,
355
+ "value": 50
356
+ }
357
+ ],
358
+ "exclusionGroup": 0,
359
+ "repeatCap": 0
360
+ },
361
+ {
362
+ "nodeId": 40100403,
363
+ "cost": "1600000000",
364
+ "prereqs": [
365
+ 40100402
366
+ ],
367
+ "grants": [
368
+ {
369
+ "kind": 2,
370
+ "building": 4,
371
+ "stat": 3,
372
+ "value": 50
373
+ }
374
+ ],
375
+ "exclusionGroup": 0,
376
+ "repeatCap": 0
377
+ },
378
+ {
379
+ "nodeId": 40100404,
380
+ "cost": "2000000000",
381
+ "prereqs": [
382
+ 40100403
383
+ ],
384
+ "grants": [
385
+ {
386
+ "kind": 2,
387
+ "building": 4,
388
+ "stat": 3,
389
+ "value": 50
390
+ }
391
+ ],
392
+ "exclusionGroup": 0,
393
+ "repeatCap": 0
394
+ }
395
+ ]
396
+ }
@@ -0,0 +1,42 @@
1
+ [
2
+ "Free",
3
+ "Civic",
4
+ "United",
5
+ "Sovereign",
6
+ "Common",
7
+ "Greater",
8
+ "Outer",
9
+ "Inner",
10
+ "New",
11
+ "Old",
12
+ "Grand",
13
+ "High",
14
+ "Deep",
15
+ "Bright",
16
+ "Open",
17
+ "Steadfast",
18
+ "Enduring",
19
+ "Rising",
20
+ "Standing",
21
+ "Unified",
22
+ "Allied",
23
+ "Independent",
24
+ "Provisional",
25
+ "Perpetual",
26
+ "Elder",
27
+ "Prime",
28
+ "Central",
29
+ "Frontier",
30
+ "Distant",
31
+ "Kindred",
32
+ "Mutual",
33
+ "Shared",
34
+ "Reformed",
35
+ "Restored",
36
+ "Second",
37
+ "Orbital",
38
+ "Solar",
39
+ "Verdant",
40
+ "Far",
41
+ "Wayward"
42
+ ]