powergrid-engine 1.10.0 → 1.12.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.
@@ -0,0 +1,360 @@
1
+ // by John and Cici
2
+ import { GameMap } from './../maps';
3
+
4
+ export enum Regions {
5
+ Pink = 'pink', // NW: Pacific Northwest / Western Canada
6
+ Brown = 'brown', // West: California / Pacific SW / Mountain West
7
+ Orange = 'orange', // SW / Mexico
8
+ Green = 'green', // South: Texas / Deep South / Florida
9
+ Blue = 'blue', // Midwest / Plains / Mid-South
10
+ Yellow = 'yellow', // Great Lakes / Mid-Atlantic
11
+ Red = 'red', // Northeast / Eastern Canada
12
+ }
13
+
14
+ export enum Cities {
15
+ // Pink — Pacific Northwest / Western Canada
16
+ Edmonton = 'Edmonton',
17
+ Calgary = 'Calgary',
18
+ Vancouver = 'Vancouver',
19
+ Seattle = 'Seattle',
20
+ Regina = 'Regina',
21
+ Winnipeg = 'Winnipeg',
22
+ Minneapolis = 'Minneapolis',
23
+
24
+ // Brown — California / Pacific SW / Mountain West
25
+ Portland = 'Portland',
26
+ SanFrancisco = 'San Francisco',
27
+ LosAngeles = 'Los Angeles',
28
+ SanDiego = 'San Diego',
29
+ SaltLakeCity = 'Salt Lake City',
30
+ LasVegas = 'Las Vegas',
31
+ Denver = 'Denver',
32
+
33
+ // Orange — SW / Mexico (includes Mexico City N + Mexico City S metropolis pair)
34
+ Albuquerque = 'Albuquerque',
35
+ Juarez = 'Juarez',
36
+ Chihuahua = 'Chihuahua',
37
+ Monterrey = 'Monterrey',
38
+ Guadalajara = 'Guadalajara',
39
+ MexicoCityN = 'Mexico City N',
40
+ MexicoCityS = 'Mexico City S',
41
+
42
+ // Green — Texas / Deep South / Florida
43
+ SanAntonio = 'San Antonio',
44
+ DallasFortWorth = 'Dallas-Fort Worth',
45
+ Houston = 'Houston',
46
+ NewOrleans = 'New Orleans',
47
+ Atlanta = 'Atlanta',
48
+ Jacksonville = 'Jacksonville',
49
+ Miami = 'Miami',
50
+
51
+ // Blue — Midwest / Plains / Mid-South
52
+ Milwaukee = 'Milwaukee',
53
+ Chicago = 'Chicago',
54
+ KansasCity = 'Kansas City',
55
+ StLouis = 'St. Louis',
56
+ Indianapolis = 'Indianapolis',
57
+ OklahomaCity = 'Oklahoma City',
58
+ Memphis = 'Memphis',
59
+
60
+ // Yellow — Great Lakes / Mid-Atlantic
61
+ Toronto = 'Toronto',
62
+ Detroit = 'Detroit',
63
+ Pittsburgh = 'Pittsburgh',
64
+ Columbus = 'Columbus',
65
+ Nashville = 'Nashville',
66
+ Washington = 'Washington',
67
+ Charlotte = 'Charlotte',
68
+
69
+ // Red — Northeast / Eastern Canada (includes New York N + New York S metropolis pair)
70
+ Quebec = 'Quebec',
71
+ Ottawa = 'Ottawa',
72
+ Montreal = 'Montreal',
73
+ NewYorkN = 'New York N',
74
+ NewYorkS = 'New York S',
75
+ Boston = 'Boston',
76
+ Philadelphia = 'Philadelphia',
77
+ }
78
+
79
+ export const map: GameMap = {
80
+ name: 'North America',
81
+ // Coords authored against the displayed photo (~2000x1716). First-pass
82
+ // estimates from the printed board — verify against the actual map and tune
83
+ // `adjustRatio` / `mapPosition` once we render in the viewer.
84
+ cities: [
85
+ // Pink — Pacific Northwest / Western Canada
86
+ { name: Cities.Edmonton, region: Regions.Pink, x: 325, y: 71 },
87
+ { name: Cities.Calgary, region: Regions.Pink, x: 250, y: 190 },
88
+ { name: Cities.Vancouver, region: Regions.Pink, x: 114, y: 266 },
89
+ { name: Cities.Seattle, region: Regions.Pink, x: 100, y: 387 },
90
+ { name: Cities.Regina, region: Regions.Pink, x: 536, y: 277 },
91
+ { name: Cities.Winnipeg, region: Regions.Pink, x: 830, y: 272 },
92
+ { name: Cities.Minneapolis, region: Regions.Pink, x: 907, y: 486 },
93
+
94
+ // Brown — California / Pacific SW / Mountain West
95
+ { name: Cities.Portland, region: Regions.Brown, x: 122, y: 516 },
96
+ { name: Cities.SanFrancisco, region: Regions.Brown, x: 135, y: 660 },
97
+ { name: Cities.LosAngeles, region: Regions.Brown, x: 160, y: 911 },
98
+ { name: Cities.SanDiego, region: Regions.Brown, x: 223, y: 1007 },
99
+ { name: Cities.SaltLakeCity, region: Regions.Brown, x: 380, y: 555 },
100
+ { name: Cities.LasVegas, region: Regions.Brown, x: 322, y: 760 },
101
+ { name: Cities.Denver, region: Regions.Brown, x: 569, y: 694 },
102
+
103
+ // Orange — SW / Mexico
104
+ { name: Cities.Albuquerque, region: Regions.Orange, x: 539, y: 941 },
105
+ { name: Cities.Juarez, region: Regions.Orange, x: 558, y: 1043 },
106
+ { name: Cities.Chihuahua, region: Regions.Orange, x: 577, y: 1183 },
107
+ { name: Cities.Monterrey, region: Regions.Orange, x: 791, y: 1292 },
108
+ { name: Cities.Guadalajara, region: Regions.Orange, x: 715, y: 1391 },
109
+ { name: Cities.MexicoCityN, region: Regions.Orange, x: 918, y: 1410 },
110
+ { name: Cities.MexicoCityS, region: Regions.Orange, x: 918, y: 1474 },
111
+
112
+ // Green — Texas / Deep South / Florida
113
+ { name: Cities.SanAntonio, region: Regions.Green, x: 767, y: 1172 },
114
+ { name: Cities.DallasFortWorth, region: Regions.Green, x: 850, y: 1020 },
115
+ { name: Cities.Houston, region: Regions.Green, x: 931, y: 1095 },
116
+ { name: Cities.NewOrleans, region: Regions.Green, x: 1126, y: 1095 },
117
+ { name: Cities.Atlanta, region: Regions.Green, x: 1318, y: 1021 },
118
+ { name: Cities.Jacksonville, region: Regions.Green, x: 1398, y: 1109 },
119
+ { name: Cities.Miami, region: Regions.Green, x: 1398, y: 1235 },
120
+
121
+ // Blue — Midwest / Plains / Mid-South
122
+ { name: Cities.Milwaukee, region: Regions.Blue, x: 1165, y: 502 },
123
+ { name: Cities.Chicago, region: Regions.Blue, x: 1148, y: 601 },
124
+ { name: Cities.KansasCity, region: Regions.Blue, x: 825, y: 720 },
125
+ { name: Cities.StLouis, region: Regions.Blue, x: 1047, y: 768 },
126
+ { name: Cities.Indianapolis, region: Regions.Blue, x: 1206, y: 694 },
127
+ { name: Cities.OklahomaCity, region: Regions.Blue, x: 800, y: 870 },
128
+ { name: Cities.Memphis, region: Regions.Blue, x: 1099, y: 938 },
129
+
130
+ // Yellow — Great Lakes / Mid-Atlantic
131
+ { name: Cities.Toronto, region: Regions.Yellow, x: 1488, y: 513 },
132
+ { name: Cities.Detroit, region: Regions.Yellow, x: 1390, y: 590 },
133
+ { name: Cities.Pittsburgh, region: Regions.Yellow, x: 1524, y: 659 },
134
+ { name: Cities.Columbus, region: Regions.Yellow, x: 1398, y: 733 },
135
+ { name: Cities.Nashville, region: Regions.Yellow, x: 1233, y: 826 },
136
+ { name: Cities.Washington, region: Regions.Yellow, x: 1554, y: 829 },
137
+ { name: Cities.Charlotte, region: Regions.Yellow, x: 1480, y: 965 },
138
+
139
+ // Red — Northeast / Eastern Canada
140
+ { name: Cities.Quebec, region: Regions.Red, x: 1911, y: 354 },
141
+ { name: Cities.Ottawa, region: Regions.Red, x: 1653, y: 458 },
142
+ { name: Cities.Montreal, region: Regions.Red, x: 1875, y: 461 },
143
+ { name: Cities.NewYorkN, region: Regions.Red, x: 1730, y: 598 },
144
+ { name: Cities.NewYorkS, region: Regions.Red, x: 1730, y: 648 },
145
+ { name: Cities.Boston, region: Regions.Red, x: 1928, y: 579 },
146
+ { name: Cities.Philadelphia, region: Regions.Red, x: 1724, y: 755 },
147
+ ],
148
+ connections: [
149
+ // Pink — internal
150
+ { nodes: [Cities.Edmonton, Cities.Calgary], cost: 5 },
151
+ { nodes: [Cities.Calgary, Cities.Vancouver], cost: 16 },
152
+ { nodes: [Cities.Vancouver, Cities.Seattle], cost: 4 },
153
+ { nodes: [Cities.Edmonton, Cities.Regina], cost: 15 },
154
+ { nodes: [Cities.Calgary, Cities.Regina], cost: 14 },
155
+ { nodes: [Cities.Vancouver, Cities.Regina], cost: 28 },
156
+ { nodes: [Cities.Regina, Cities.Winnipeg], cost: 11 },
157
+ { nodes: [Cities.Winnipeg, Cities.Minneapolis], cost: 13 },
158
+
159
+ // Pink ↔ Brown
160
+ { nodes: [Cities.Seattle, Cities.Portland], cost: 5 },
161
+ { nodes: [Cities.Regina, Cities.SaltLakeCity], cost: 29 },
162
+ { nodes: [Cities.Regina, Cities.Denver], cost: 24 },
163
+ { nodes: [Cities.Winnipeg, Cities.Denver], cost: 26 },
164
+ { nodes: [Cities.Minneapolis, Cities.Denver], cost: 23 },
165
+
166
+ // Brown — internal
167
+ { nodes: [Cities.Portland, Cities.SanFrancisco], cost: 20 },
168
+ { nodes: [Cities.SanFrancisco, Cities.LosAngeles], cost: 12 },
169
+ { nodes: [Cities.LosAngeles, Cities.SanDiego], cost: 3 },
170
+ { nodes: [Cities.Portland, Cities.SaltLakeCity], cost: 22 },
171
+ { nodes: [Cities.SanFrancisco, Cities.SaltLakeCity], cost: 22 },
172
+ { nodes: [Cities.SanFrancisco, Cities.LasVegas], cost: 16 },
173
+ { nodes: [Cities.SaltLakeCity, Cities.LasVegas], cost: 14 },
174
+ { nodes: [Cities.LasVegas, Cities.LosAngeles], cost: 8 },
175
+ { nodes: [Cities.SaltLakeCity, Cities.Denver], cost: 14 },
176
+ { nodes: [Cities.LasVegas, Cities.Denver], cost: 25 },
177
+
178
+ // Brown ↔ Orange
179
+ { nodes: [Cities.LosAngeles, Cities.Albuquerque], cost: 25 },
180
+ { nodes: [Cities.LasVegas, Cities.Albuquerque], cost: 18 },
181
+ { nodes: [Cities.Denver, Cities.Albuquerque], cost: 12 },
182
+ { nodes: [Cities.SanDiego, Cities.Juarez], cost: 22 },
183
+
184
+ // Orange — internal (Mexico City N ↔ S is the metropolis 0-cost edge;
185
+ // N's external edges are pruned — Dijkstra reaches N via S at zero cost,
186
+ // so build costs are unchanged but the rendered map has fewer parallel lines).
187
+ { nodes: [Cities.Albuquerque, Cities.Juarez], cost: 9 },
188
+ { nodes: [Cities.Juarez, Cities.Chihuahua], cost: 8 },
189
+ { nodes: [Cities.Chihuahua, Cities.Monterrey], cost: 14 },
190
+ { nodes: [Cities.Chihuahua, Cities.Guadalajara], cost: 23 },
191
+ { nodes: [Cities.Monterrey, Cities.Guadalajara], cost: 16 },
192
+ { nodes: [Cities.Monterrey, Cities.MexicoCityS], cost: 17 },
193
+ { nodes: [Cities.Guadalajara, Cities.MexicoCityS], cost: 10 },
194
+ { nodes: [Cities.MexicoCityN, Cities.MexicoCityS], cost: 0 },
195
+
196
+ // Orange ↔ Blue
197
+ { nodes: [Cities.Albuquerque, Cities.OklahomaCity], cost: 18 },
198
+
199
+ // Orange ↔ Green
200
+ { nodes: [Cities.Juarez, Cities.DallasFortWorth], cost: 19 },
201
+ { nodes: [Cities.Juarez, Cities.SanAntonio], cost: 18 },
202
+ { nodes: [Cities.Chihuahua, Cities.SanAntonio], cost: 16 },
203
+ { nodes: [Cities.Monterrey, Cities.SanAntonio], cost: 10 },
204
+
205
+ // Blue — internal
206
+ { nodes: [Cities.Milwaukee, Cities.Chicago], cost: 3 },
207
+ { nodes: [Cities.Chicago, Cities.KansasCity], cost: 16 },
208
+ { nodes: [Cities.Chicago, Cities.StLouis], cost: 9 },
209
+ { nodes: [Cities.Chicago, Cities.Indianapolis], cost: 6 },
210
+ { nodes: [Cities.KansasCity, Cities.StLouis], cost: 8 },
211
+ { nodes: [Cities.StLouis, Cities.Indianapolis], cost: 8 },
212
+ { nodes: [Cities.KansasCity, Cities.OklahomaCity], cost: 10 },
213
+ { nodes: [Cities.KansasCity, Cities.Memphis], cost: 14 },
214
+ { nodes: [Cities.StLouis, Cities.Memphis], cost: 9 },
215
+ { nodes: [Cities.OklahomaCity, Cities.Memphis], cost: 15 },
216
+
217
+ // Blue ↔ Pink
218
+ { nodes: [Cities.Milwaukee, Cities.Minneapolis], cost: 10 },
219
+ { nodes: [Cities.KansasCity, Cities.Minneapolis], cost: 14 },
220
+
221
+ // Blue ↔ Brown
222
+ { nodes: [Cities.KansasCity, Cities.Denver], cost: 19 },
223
+ { nodes: [Cities.OklahomaCity, Cities.Denver], cost: 17 },
224
+
225
+ // Blue ↔ Green
226
+ { nodes: [Cities.OklahomaCity, Cities.DallasFortWorth], cost: 7 },
227
+ { nodes: [Cities.Memphis, Cities.DallasFortWorth], cost: 15 },
228
+ { nodes: [Cities.Memphis, Cities.NewOrleans], cost: 14 },
229
+ { nodes: [Cities.Memphis, Cities.Atlanta], cost: 12 },
230
+
231
+ // Green — internal
232
+ { nodes: [Cities.DallasFortWorth, Cities.SanAntonio], cost: 9 },
233
+ { nodes: [Cities.DallasFortWorth, Cities.Houston], cost: 8 },
234
+ { nodes: [Cities.DallasFortWorth, Cities.NewOrleans], cost: 16 },
235
+ { nodes: [Cities.SanAntonio, Cities.Houston], cost: 6 },
236
+ { nodes: [Cities.Houston, Cities.NewOrleans], cost: 12 },
237
+ { nodes: [Cities.NewOrleans, Cities.Atlanta], cost: 16 },
238
+ { nodes: [Cities.NewOrleans, Cities.Jacksonville], cost: 20 },
239
+ { nodes: [Cities.Atlanta, Cities.Jacksonville], cost: 10 },
240
+ { nodes: [Cities.Jacksonville, Cities.Miami], cost: 12 },
241
+
242
+ // Green ↔ Yellow
243
+ { nodes: [Cities.Atlanta, Cities.Nashville], cost: 9 },
244
+ { nodes: [Cities.Atlanta, Cities.Charlotte], cost: 8 },
245
+ { nodes: [Cities.Jacksonville, Cities.Charlotte], cost: 12 },
246
+
247
+ // Yellow — internal
248
+ { nodes: [Cities.Toronto, Cities.Detroit], cost: 8 },
249
+ { nodes: [Cities.Toronto, Cities.Pittsburgh], cost: 11 },
250
+ { nodes: [Cities.Detroit, Cities.Columbus], cost: 7 },
251
+ { nodes: [Cities.Columbus, Cities.Pittsburgh], cost: 6 },
252
+ { nodes: [Cities.Nashville, Cities.Columbus], cost: 15 },
253
+ { nodes: [Cities.Nashville, Cities.Washington], cost: 22 },
254
+ { nodes: [Cities.Nashville, Cities.Charlotte], cost: 12 },
255
+ { nodes: [Cities.Columbus, Cities.Washington], cost: 12 },
256
+ { nodes: [Cities.Washington, Cities.Pittsburgh], cost: 7 },
257
+ { nodes: [Cities.Washington, Cities.Charlotte], cost: 12 },
258
+
259
+ // Yellow ↔ Blue
260
+ { nodes: [Cities.Detroit, Cities.Chicago], cost: 10 },
261
+ { nodes: [Cities.Columbus, Cities.Chicago], cost: 10 },
262
+ { nodes: [Cities.Columbus, Cities.Indianapolis], cost: 7 },
263
+ { nodes: [Cities.Nashville, Cities.Indianapolis], cost: 9 },
264
+ { nodes: [Cities.Nashville, Cities.StLouis], cost: 9 },
265
+ { nodes: [Cities.Nashville, Cities.Memphis], cost: 7 },
266
+
267
+ // Yellow ↔ Red — NY N parallels are pruned (see Red internal note).
268
+ { nodes: [Cities.Toronto, Cities.Ottawa], cost: 8 },
269
+ { nodes: [Cities.Toronto, Cities.NewYorkS], cost: 14 },
270
+ { nodes: [Cities.Pittsburgh, Cities.NewYorkS], cost: 11 },
271
+ { nodes: [Cities.Pittsburgh, Cities.Philadelphia], cost: 9 },
272
+ { nodes: [Cities.Washington, Cities.Philadelphia], cost: 5 },
273
+
274
+ // Red — internal (New York N ↔ S is the metropolis 0-cost edge;
275
+ // N's external edges are pruned — Dijkstra reaches N via S at zero cost,
276
+ // so build costs are unchanged but the rendered map has fewer parallel lines).
277
+ { nodes: [Cities.Quebec, Cities.Montreal], cost: 5 },
278
+ { nodes: [Cities.Montreal, Cities.Boston], cost: 9 },
279
+ { nodes: [Cities.Ottawa, Cities.Montreal], cost: 3 },
280
+ { nodes: [Cities.Ottawa, Cities.NewYorkS], cost: 13 },
281
+ { nodes: [Cities.Montreal, Cities.NewYorkS], cost: 12 },
282
+ { nodes: [Cities.NewYorkS, Cities.Boston], cost: 7 },
283
+ { nodes: [Cities.NewYorkS, Cities.Philadelphia], cost: 3 },
284
+ { nodes: [Cities.NewYorkN, Cities.NewYorkS], cost: 0 },
285
+ ],
286
+ layout: 'Landscape',
287
+ // First-pass fit for landscape map area (~1100x720) from displayed-photo
288
+ // coord space (~2000x1716). Tune after first render.
289
+ adjustRatio: [0.5, 0.38],
290
+ mapPosition: [70, 50],
291
+ // Slight counterclockwise tilt to keep the pink region out of the power-plant
292
+ // header row at the top of the layout.
293
+ mapRotation: -5,
294
+
295
+ // Resupply table verified with John from the NA refill summary cards.
296
+ // Indexed [resource][playerCount-2][step-1].
297
+ // Note: 2P and 3P rows are intentionally identical on the printed cards.
298
+ resupply: [
299
+ // Coal
300
+ [
301
+ [2, 5, 2], // 2P
302
+ [2, 5, 2], // 3P
303
+ [3, 6, 3], // 4P
304
+ [4, 7, 4], // 5P
305
+ [5, 8, 5], // 6P
306
+ ],
307
+ // Oil
308
+ [
309
+ [3, 1, 3], // 2P
310
+ [3, 1, 3], // 3P
311
+ [3, 2, 4], // 4P
312
+ [4, 2, 5], // 5P
313
+ [5, 3, 6], // 6P
314
+ ],
315
+ // Garbage
316
+ [
317
+ [2, 2, 4], // 2P
318
+ [2, 2, 4], // 3P
319
+ [3, 3, 5], // 4P
320
+ [3, 3, 6], // 5P
321
+ [4, 4, 7], // 6P
322
+ ],
323
+ // Uranium
324
+ [
325
+ [2, 1, 2], // 2P
326
+ [2, 1, 2], // 3P
327
+ [2, 1, 2], // 4P
328
+ [3, 2, 3], // 5P
329
+ [3, 2, 4], // 6P
330
+ ],
331
+ ],
332
+ // North America uses price spaces 1–9, identical per-price slot layout to Europe
333
+ // (verified with John from the printed board):
334
+ // Coal [4,4,4,2,2,2,2,2,2] total 24 market slots
335
+ // Oil [2,2,2,2,2,2,2,2,4] total 20 market slots
336
+ // Garbage [3,3,3,3,3,3,3,3,0] total 24 market slots
337
+ // Uranium [1,1,1,1,1,1,2,2,2] total 12 market slots
338
+ //
339
+ // Oil note: same overflow situation as Europe — 20 market slots but
340
+ // startingSupply keeps 24 cubes in the game. Defer to publisher guidance
341
+ // (Mike's pending question to 2F-Spiele); drop oil supply to 20 if confirmed.
342
+ coalPrices: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9],
343
+ oilPrices: [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9],
344
+ garbagePrices: [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8],
345
+ uraniumPrices: [1, 2, 3, 4, 5, 6, 7, 7, 8, 8, 9, 9],
346
+ // Initial market fill from the rules (coal 2–9, oil 4–9, garbage 3–8, uranium space 9 only):
347
+ // coal = 4+4+2+2+2+2+2+2 = 20
348
+ // oil = 2+2+2+2+2+4 = 14
349
+ // garbage = 3+3+3+3+3+3 = 18
350
+ // uranium = 2 = 2
351
+ startingResources: [20, 14, 18, 2],
352
+ // Total cubes in the game (used cubes return here; refill draws from here).
353
+ startingSupply: [24, 24, 24, 12],
354
+ mapSpecificRules:
355
+ 'The metropolises of New York and Mexico City each consist of 2 cities ' +
356
+ '(New York N / New York S and Mexico City N / Mexico City S) connected by ' +
357
+ 'a 0-cost edge. The official rules cap a player at 1 house per side of a ' +
358
+ 'metropolis; this implementation does not enforce that cap pending publisher ' +
359
+ 'clarification, so a player may build in both sides if they wish.',
360
+ };
@@ -1,3 +1,5 @@
1
+ // by John and Cici
2
+ import { PowerPlantType } from './../gamestate';
1
3
  import { GameMap } from './../maps';
2
4
 
3
5
  export enum Regions {
@@ -100,6 +102,80 @@ export const map: GameMap = {
100
102
  { name: Cities.Bergen, region: Regions.Red, x: 68, y: 586 },
101
103
  { name: Cities.Stavanger, region: Regions.Red, x: 72, y: 647 },
102
104
  ],
105
+ layout: 'Portrait',
106
+ adjustRatio: [1.2, 1.0],
107
+ mapPosition: [80, 30],
108
+ startingResources: [18, 18, 12, 6],
109
+ resupply: [
110
+ // Coal
111
+ [
112
+ [2, 4, 3], // 2P
113
+ [3, 4, 4], // 3P
114
+ [4, 5, 5], // 4P
115
+ [4, 5, 6], // 5P
116
+ [6, 8, 5], // 6P
117
+ ],
118
+ // Oil
119
+ [
120
+ [1, 2, 3],
121
+ [2, 2, 3],
122
+ [2, 3, 4],
123
+ [3, 4, 5],
124
+ [4, 5, 6],
125
+ ],
126
+ // Garbage
127
+ [
128
+ [1, 2, 3],
129
+ [1, 2, 3],
130
+ [2, 3, 4],
131
+ [3, 3, 5],
132
+ [3, 5, 6],
133
+ ],
134
+ // Uranium
135
+ [
136
+ [1, 2, 2],
137
+ [1, 2, 2],
138
+ [2, 3, 2],
139
+ [2, 4, 3],
140
+ [2, 4, 4],
141
+ ],
142
+ ],
143
+ regionalPowerPlants: {
144
+ [Regions.Orange]: [
145
+ // Denmark
146
+ { number: 19, type: PowerPlantType.Oil, cost: 2, citiesPowered: 4 },
147
+ { number: 26, type: PowerPlantType.Coal, cost: 3, citiesPowered: 5 },
148
+ ],
149
+ [Regions.Red]: [
150
+ // Norway
151
+ { number: 7, type: PowerPlantType.Wind, cost: 0, citiesPowered: 1 },
152
+ { number: 46, type: PowerPlantType.Wind, cost: 0, citiesPowered: 6 },
153
+ ],
154
+ [Regions.Purple]: [
155
+ // Sweden South
156
+ { number: 10, type: PowerPlantType.Uranium, cost: 2, citiesPowered: 3 },
157
+ { number: 39, type: PowerPlantType.Wind, cost: 0, citiesPowered: 5 },
158
+ ],
159
+ [Regions.Yellow]: [
160
+ // Sweden North
161
+ { number: 21, type: PowerPlantType.Wind, cost: 0, citiesPowered: 2 },
162
+ { number: 25, type: PowerPlantType.Uranium, cost: 1, citiesPowered: 4 },
163
+ ],
164
+ [Regions.Brown]: [
165
+ // Finland
166
+ { number: 32, type: PowerPlantType.Garbage, cost: 2, citiesPowered: 6 },
167
+ { number: 44, type: PowerPlantType.Uranium, cost: 1, citiesPowered: 7 },
168
+ ],
169
+ [Regions.Pink]: [
170
+ // Baltic States
171
+ { number: 18, type: PowerPlantType.Coal, cost: 1, citiesPowered: 3 },
172
+ { number: 22, type: PowerPlantType.Wind, cost: 0, citiesPowered: 3 },
173
+ ],
174
+ },
175
+ mapSpecificRules:
176
+ 'Nuclear plants may only be purchased by players with at least one city in Sweden, Finland, or the Baltic States. ' +
177
+ 'Players with cities only in Norway or Denmark may not bid on or buy nuclear plants. ' +
178
+ 'Resources start at: coal 3 Elektro, oil 3 Elektro, garbage 5 Elektro, uranium 7 Elektro.',
103
179
  connections: [
104
180
  { nodes: [Cities.Bood, Cities.Tromso], cost: 17 },
105
181
  { nodes: [Cities.Tromso, Cities.Oulu], cost: 25 },