@shipload/sdk 0.3.15 → 0.4.0

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/src/goods.ts CHANGED
@@ -7,71 +7,71 @@ const goods: GoodType[] = [
7
7
  id: 1,
8
8
  name: 'FizzGlo',
9
9
  description: 'Pops with flavor! A neon drink that makes your burps glow.',
10
- base_price: 200,
11
- mass: 5000,
12
- },
13
- {
14
- id: 2,
15
- name: 'ZapSnacks',
16
- description: 'Electric taste! Spicy edible energy sparks for a tongue-tingling experience.',
17
- base_price: 300,
18
- mass: 2000,
10
+ base_price: 20,
11
+ mass: 4500,
19
12
  },
13
+ // {
14
+ // id: 2,
15
+ // name: 'ZapSnacks',
16
+ // description: 'Electric taste! Spicy edible energy sparks for a tongue-tingling experience.',
17
+ // base_price: 30,
18
+ // mass: 7000,
19
+ // },
20
20
  {
21
21
  id: 3,
22
22
  name: 'Blob Buddies',
23
23
  description: 'Squishy friends! Clingy, cute and mood-matching pet blobs for every home!',
24
- base_price: 400,
25
- mass: 10000,
24
+ base_price: 40,
25
+ mass: 9500,
26
26
  },
27
27
  {
28
28
  id: 4,
29
29
  name: 'TuneTooth',
30
30
  description: 'Whistle while you eat! Edible instrument treats that play tunes when chewed.',
31
- base_price: 600,
32
- mass: 3000,
31
+ base_price: 60,
32
+ mass: 14000,
33
33
  },
34
34
  {
35
35
  id: 5,
36
36
  name: 'SunPods',
37
37
  description: 'Miniature suns in your pocket providing on-demand light & warmth.',
38
- base_price: 800,
39
- mass: 1000,
40
- },
41
- {
42
- id: 6,
43
- name: 'Fuzzix',
44
- description: 'Pocket-sized quantum fluff generator for instant comfy.',
45
- base_price: 1000,
46
- mass: 4000,
38
+ base_price: 80,
39
+ mass: 19000,
47
40
  },
41
+ // {
42
+ // id: 6,
43
+ // name: 'Fuzzix',
44
+ // description: 'Pocket-sized quantum fluff generator for instant comfy.',
45
+ // base_price: 100,
46
+ // mass: 24000,
47
+ // },
48
48
  {
49
49
  id: 7,
50
50
  name: 'GlowGo',
51
51
  description: 'Ingestible bioluminescent jelly, your inside glows in the dark!',
52
52
  base_price: 140,
53
- mass: 10000,
54
- },
55
- {
56
- id: 8,
57
- name: 'KrackleKaps',
58
- description: 'Capsules packed with tiny firecrackers, spice up meals and parties.',
59
- base_price: 180,
60
- mass: 2000,
53
+ mass: 33500,
61
54
  },
55
+ // {
56
+ // id: 8,
57
+ // name: 'KrackleKaps',
58
+ // description: 'Capsules packed with tiny firecrackers, spice up meals and parties.',
59
+ // base_price: 180,
60
+ // mass: 43500,
61
+ // },
62
62
  {
63
63
  id: 9,
64
64
  name: 'PlasmaMints',
65
65
  description: 'Hypercharged candy giving plasma breath capable of cutting through steel.',
66
66
  base_price: 220,
67
- mass: 500,
67
+ mass: 53500,
68
68
  },
69
69
  {
70
70
  id: 10,
71
71
  name: 'TimeTreats',
72
72
  description: 'Confectionery morsels releasing slow-mo effect over a limited period.',
73
73
  base_price: 250,
74
- mass: 3000,
74
+ mass: 60500,
75
75
  },
76
76
  {
77
77
  id: 11,
@@ -79,28 +79,28 @@ const goods: GoodType[] = [
79
79
  description:
80
80
  'Bottled hyper-fluid quenching thirst across multiple parallel realities simultaneously.',
81
81
  base_price: 300,
82
- mass: 6000,
83
- },
84
- {
85
- id: 12,
86
- name: 'TransmatterTruffles',
87
- description: 'Delectable chocolates instantly teleporting consumers short distances.',
88
- base_price: 350,
89
- mass: 4000,
82
+ mass: 73000,
90
83
  },
84
+ // {
85
+ // id: 12,
86
+ // name: 'TransmatterTruffles',
87
+ // description: 'Delectable chocolates instantly teleporting consumers short distances.',
88
+ // base_price: 350,
89
+ // mass: 85500,
90
+ // },
91
91
  {
92
92
  id: 13,
93
93
  name: 'MemoryGum',
94
94
  description: 'Chewable gum storing or replaying memories while being chewed.',
95
95
  base_price: 400,
96
- mass: 500,
96
+ mass: 97500,
97
97
  },
98
98
  {
99
99
  id: 14,
100
100
  name: 'SymbioSnack',
101
101
  description: 'Edible alien larvae adopting owner’s taste preference upon consumption.',
102
102
  base_price: 500,
103
- mass: 10000,
103
+ mass: 12250,
104
104
  },
105
105
  ]
106
106
 
package/src/travel.ts CHANGED
@@ -18,6 +18,7 @@ export function travelplanDuration(travelplan: ServerContract.Types.travel_plan)
18
18
  return UInt32.from(travelplan.flighttime)
19
19
  .adding(travelplan.rechargetime)
20
20
  .adding(travelplan.loadtime)
21
+ .adding(travelplan.masspenalty)
21
22
  }
22
23
 
23
24
  export function distanceTraveled(
@@ -118,17 +119,21 @@ export function travelplan(
118
119
  cargos: ServerContract.Types.cargo_row[],
119
120
  origin: ServerContract.ActionParams.Type.coordinates,
120
121
  destination: ServerContract.ActionParams.Type.coordinates,
121
- recharge: boolean
122
+ recharge: boolean,
123
+ alwaysValid = false
122
124
  ): ServerContract.Types.travel_plan {
123
- const valid = hasSystem(game.config.seed, destination)
124
- if (!valid) {
125
- throw new Error('Invalid destination')
125
+ if (!alwaysValid) {
126
+ const valid = hasSystem(game.config.seed, destination)
127
+ if (!valid) {
128
+ throw new Error('Invalid destination')
129
+ }
126
130
  }
127
131
  const distance = distanceBetweenCoordinates(origin, destination)
128
132
  const mass = calc_ship_mass(ship, cargos) // Total mass of ship_id
129
133
  const loadtime = calc_ship_loadtime(ship, cargos)
130
134
  const flighttime = calc_ship_flighttime(ship, mass, distance)
131
135
  const rechargetime = recharge ? calc_ship_rechargetime(ship) : 0
136
+ const masspenalty = calc_mass_penalty(ship, mass)
132
137
  const energyusage = calc_energyusage(distance, ship.stats.drain) // Energy usage from ship and flighttime
133
138
 
134
139
  return ServerContract.Types.travel_plan.from({
@@ -138,12 +143,23 @@ export function travelplan(
138
143
  loadtime,
139
144
  flighttime,
140
145
  rechargetime,
146
+ masspenalty,
141
147
  // TODO: Remove below, used for debugging
142
148
  energyusage,
143
149
  mass,
144
150
  })
145
151
  }
146
152
 
153
+ export function calc_mass_penalty(ship: ServerContract.Types.ship_row, mass: UInt64Type): UInt32 {
154
+ const current = Number(mass)
155
+ const maximum = Number(ship.stats.maxmass)
156
+ if (mass > ship.stats.maxmass) {
157
+ // 1 second for every 1000 over maxmass
158
+ return UInt32.from((current - maximum) / 1000 / PRECISION)
159
+ }
160
+ return UInt32.from(0)
161
+ }
162
+
147
163
  export function calc_rechargetime(
148
164
  capacity: UInt32Type,
149
165
  energy: UInt32Type,
@@ -170,7 +186,7 @@ export function calc_ship_loadtime(
170
186
  const mass_load = UInt64.from(0)
171
187
  const mass_unload = UInt64.from(0)
172
188
  for (const cargo of cargos) {
173
- const cargo_delta = Number(cargo.quantity) - Number(cargo.loaded)
189
+ const cargo_delta = Number(cargo.owned) - Number(cargo.loaded)
174
190
  if (cargo_delta !== 0) {
175
191
  const good_mass = getGood(cargo.good_id).mass
176
192
  const cargo_mass = good_mass.multiplying(Math.abs(cargo_delta))
@@ -239,7 +255,7 @@ export function calc_ship_mass(
239
255
  }
240
256
 
241
257
  for (const cargo of cargos) {
242
- mass.add(getGood(cargo.good_id).mass.multiplying(cargo.quantity))
258
+ mass.add(getGood(cargo.good_id).mass.multiplying(cargo.owned))
243
259
  }
244
260
 
245
261
  return mass