1 Engine.LoadLibrary("rmgen");
2 Engine.LoadLibrary("rmgen2");
3 Engine.LoadLibrary("rmbiome");
8 initTileClasses(["step"]);
10 const topTerrain = g_Terrains.tier2Terrain;
12 const valleyHeight = 0;
13 const pathHeight = 10;
15 const hillHeight = getMapBaseHeight();
17 const mapArea = getMapArea();
18 const numPlayers = getNumPlayers();
19 const startAngle = randFloat(0, 2 * Math.PI);
21 resetTerrain(topTerrain, g_TileClasses.land, hillHeight);
22 Engine.SetProgress(10);
24 addBases("radial", 0.4, randFloat(0.05, 0.1), startAngle);
25 Engine.SetProgress(20);
27 createSunkenTerrain();
28 Engine.SetProgress(30);
32 "func": addLayeredPatches,
34 g_TileClasses.baseResource, 5,
35 g_TileClasses.dirt, 5,
36 g_TileClasses.forest, 2,
37 g_TileClasses.mountain, 2,
38 g_TileClasses.player, 12,
41 "stay": [g_TileClasses.valley, 7],
47 "func": addLayeredPatches,
49 g_TileClasses.baseResource, 5,
50 g_TileClasses.dirt, 5,
51 g_TileClasses.forest, 2,
52 g_TileClasses.mountain, 2,
53 g_TileClasses.player, 12
55 "stay": [g_TileClasses.settlement, 7],
61 "func": addLayeredPatches,
63 g_TileClasses.baseResource, 5,
64 g_TileClasses.dirt, 5,
65 g_TileClasses.forest, 2
67 "stay": [g_TileClasses.player, 1],
73 "func": addDecoration,
75 g_TileClasses.baseResource, 5,
76 g_TileClasses.forest, 2
78 "stay": [g_TileClasses.player, 1],
84 "func": addDecoration,
86 g_TileClasses.baseResource, 5,
87 g_TileClasses.forest, 2,
88 g_TileClasses.mountain, 2,
89 g_TileClasses.player, 12,
92 "stay": [g_TileClasses.valley, 7],
98 "func": addDecoration,
100 g_TileClasses.baseResource, 5,
101 g_TileClasses.forest, 2,
102 g_TileClasses.mountain, 2,
103 g_TileClasses.player, 12
105 "stay": [g_TileClasses.settlement, 7],
108 "amounts": ["normal"]
111 "func": addDecoration,
113 g_TileClasses.baseResource, 5,
114 g_TileClasses.forest, 2,
115 g_TileClasses.mountain, 2,
116 g_TileClasses.player, 12
118 "stay": [g_TileClasses.step, 7],
121 "amounts": ["scarce"]
124 Engine.SetProgress(40);
126 addElements(shuffleArray([
130 g_TileClasses.baseResource, 5,
131 g_TileClasses.berries, 5,
132 g_TileClasses.forest, 3,
133 g_TileClasses.player, 30,
134 g_TileClasses.rock, 10,
135 g_TileClasses.metal, 20
137 "stay": [g_TileClasses.settlement, 7],
145 g_TileClasses.baseResource, 5,
146 g_TileClasses.berries, 5,
147 g_TileClasses.forest, 3,
148 g_TileClasses.player, 10,
149 g_TileClasses.rock, 10,
150 g_TileClasses.metal, 20,
151 g_TileClasses.mountain, 5,
152 g_TileClasses.step, 5
154 "stay": [g_TileClasses.valley, 7],
157 "amounts": g_AllAmounts
162 g_TileClasses.baseResource, 5,
163 g_TileClasses.berries, 5,
164 g_TileClasses.forest, 3,
165 g_TileClasses.player, 30,
166 g_TileClasses.rock, 20,
167 g_TileClasses.metal, 10
169 "stay": [g_TileClasses.settlement, 7],
177 g_TileClasses.baseResource, 5,
178 g_TileClasses.berries, 5,
179 g_TileClasses.forest, 3,
180 g_TileClasses.player, 10,
181 g_TileClasses.rock, 20,
182 g_TileClasses.metal, 10,
183 g_TileClasses.mountain, 5,
184 g_TileClasses.step, 5
186 "stay": [g_TileClasses.valley, 7],
189 "amounts": g_AllAmounts
194 g_TileClasses.baseResource, 5,
195 g_TileClasses.berries, 5,
196 g_TileClasses.forest, 18,
197 g_TileClasses.metal, 3,
198 g_TileClasses.player, 20,
199 g_TileClasses.rock, 3
201 "stay": [g_TileClasses.settlement, 7],
202 "sizes": ["normal", "big"],
209 g_TileClasses.baseResource, 5,
210 g_TileClasses.berries, 3,
211 g_TileClasses.forest, 18,
212 g_TileClasses.metal, 3,
213 g_TileClasses.mountain, 5,
214 g_TileClasses.player, 5,
215 g_TileClasses.rock, 3,
216 g_TileClasses.step, 1
218 "stay": [g_TileClasses.valley, 7],
219 "sizes": ["normal", "big"],
224 Engine.SetProgress(60);
226 addElements(shuffleArray([
230 g_TileClasses.baseResource, 5,
231 g_TileClasses.berries, 30,
232 g_TileClasses.forest, 5,
233 g_TileClasses.metal, 10,
234 g_TileClasses.player, 20,
235 g_TileClasses.rock, 10
237 "stay": [g_TileClasses.settlement, 7],
245 g_TileClasses.baseResource, 5,
246 g_TileClasses.berries, 30,
247 g_TileClasses.forest, 5,
248 g_TileClasses.metal, 10,
249 g_TileClasses.mountain, 5,
250 g_TileClasses.player, 10,
251 g_TileClasses.rock, 10,
252 g_TileClasses.step, 5
254 "stay": [g_TileClasses.valley, 7],
257 "amounts": g_AllAmounts
262 g_TileClasses.animals, 20,
263 g_TileClasses.baseResource, 5,
264 g_TileClasses.forest, 0,
265 g_TileClasses.metal, 1,
266 g_TileClasses.player, 20,
267 g_TileClasses.rock, 1
269 "stay": [g_TileClasses.settlement, 7],
277 g_TileClasses.animals, 20,
278 g_TileClasses.baseResource, 5,
279 g_TileClasses.forest, 0,
280 g_TileClasses.metal, 1,
281 g_TileClasses.mountain, 5,
282 g_TileClasses.player, 10,
283 g_TileClasses.rock, 1,
284 g_TileClasses.step, 5
286 "stay": [g_TileClasses.valley, 7],
289 "amounts": g_AllAmounts
292 "func": addStragglerTrees,
294 g_TileClasses.baseResource, 5,
295 g_TileClasses.berries, 5,
296 g_TileClasses.forest, 7,
297 g_TileClasses.metal, 3,
298 g_TileClasses.player, 12,
299 g_TileClasses.rock, 3
301 "stay": [g_TileClasses.settlement, 7],
307 "func": addStragglerTrees,
309 g_TileClasses.baseResource, 5,
310 g_TileClasses.berries, 5,
311 g_TileClasses.forest, 7,
312 g_TileClasses.metal, 3,
313 g_TileClasses.mountain, 5,
314 g_TileClasses.player, 10,
315 g_TileClasses.rock, 3,
316 g_TileClasses.step, 5
318 "stay": [g_TileClasses.valley, 7],
321 "amounts": ["normal", "many", "tons"]
324 "func": addStragglerTrees,
326 g_TileClasses.player, 10,
327 g_TileClasses.baseResource, 5,
328 g_TileClasses.berries, 5,
329 g_TileClasses.forest, 3,
330 g_TileClasses.metal, 5,
331 g_TileClasses.rock, 5
333 "stay": [g_TileClasses.player, 1],
339 Engine.SetProgress(75);
343 "func": addDecoration,
345 g_TileClasses.baseResource, 5,
346 g_TileClasses.valley, 4,
347 g_TileClasses.player, 4,
348 g_TileClasses.settlement, 4,
349 g_TileClasses.step, 4
351 "stay": [g_TileClasses.land, 2],
357 Engine.SetProgress(80);
363 g_TileClasses.baseResource, 5,
364 g_TileClasses.valley, 4,
365 g_TileClasses.player, 4,
366 g_TileClasses.settlement, 4,
367 g_TileClasses.step, 4
369 "stay": [g_TileClasses.land, 2],
372 "amounts": ["scarce"]
375 Engine.SetProgress(85);
379 "func": addDecoration,
381 g_TileClasses.baseResource, 5,
382 g_TileClasses.player, 4,
383 g_TileClasses.settlement, 4,
384 g_TileClasses.step, 4
386 "stay": [g_TileClasses.mountain, 2],
392 Engine.SetProgress(90);
398 g_TileClasses.baseResource, 5,
399 g_TileClasses.player, 4,
400 g_TileClasses.settlement, 4,
401 g_TileClasses.step, 4
403 "stay": [g_TileClasses.mountain, 2],
406 "amounts": ["scarce"]
409 Engine.SetProgress(95);
412 g_TileClasses.player,
414 new HeightConstraint(valleyHeight, pathHeight),
416 g_TileClasses.forest, 1,
417 g_TileClasses.metal, 4,
418 g_TileClasses.rock, 4,
419 g_TileClasses.animals, 2)
424 function createSunkenTerrain()
426 var base = g_Terrains.mainTerrain;
427 var middle = g_Terrains.dirt;
428 var lower = g_Terrains.tier2Terrain;
429 var road = g_Terrains.road;
431 if (currentBiome() == "snowy")
433 middle = g_Terrains.tier2Terrain;
434 lower = g_Terrains.tier1Terrain;
437 if (currentBiome() == "alpine")
439 middle = g_Terrains.shore;
440 lower = g_Terrains.tier4Terrain;
443 if (currentBiome() == "mediterranean")
445 middle = g_Terrains.tier1Terrain;
446 lower = g_Terrains.forestFloor1;
449 if (currentBiome() == "savanna")
451 middle = g_Terrains.tier2Terrain;
452 lower = g_Terrains.tier4Terrain;
455 if (currentBiome() == "tropic" || currentBiome() == "autumn")
456 road = g_Terrains.roadWild;
458 if (currentBiome() == "autumn")
459 middle = g_Terrains.shore;
461 var expSize = mapArea * 0.015 / (numPlayers / 4);
462 var expDist = 0.1 + numPlayers / 200;
467 expSize = mapArea * 0.015 / 0.8;
480 log("Creating central valley...");
481 let center = Math.floor(fractionToTiles(0.5));
483 new ClumpPlacer(mapArea * 0.26, 1, 1, 1, center, center),
485 new LayeredPainter([g_Terrains.cliff, lower], [3]),
486 new SmoothElevationPainter(ELEVATION_SET, valleyHeight, 3),
487 paintClass(g_TileClasses.valley)
490 log("Creating central hill...");
492 new ClumpPlacer(mapArea * 0.14, 1, 1, 1, center, center),
494 new LayeredPainter([g_Terrains.cliff, topTerrain], [3]),
495 new SmoothElevationPainter(ELEVATION_SET, hillHeight, 3),
496 paintClass(g_TileClasses.mountain)
499 let getCoords = (distance, playerID, playerIDOffset) => {
500 let angle = startAngle + (playerID + playerIDOffset) * 2 * Math.PI / numPlayers;
502 Math.round(fractionToTiles(0.5 + distance * Math.cos(angle))),
503 Math.round(fractionToTiles(0.5 + distance * Math.sin(angle)))
507 for (let i = 0; i < numPlayers; ++i)
509 let playerCoords = getCoords(0.4, i, 0);
511 log("Creating path from player to expansion...");
512 let expansionCoords = getCoords(expDist, i, expAngle);
514 new PathPlacer(...playerCoords, ...expansionCoords, 12, 0.7, 0.5, 0.1, -1),
516 new LayeredPainter([g_Terrains.cliff, middle, road], [3, 4]),
517 new SmoothElevationPainter(ELEVATION_SET, pathHeight, 3),
518 paintClass(g_TileClasses.step)
521 log("Creating path from player to the neighbor...");
522 for (let neighborOffset of [-0.5, 0.5])
524 new PathPlacer(...getCoords(0.47, i, 0), ...getCoords(nRoad, i, neighborOffset), 19, 0.4, 0.5, 0.1, -0.6),
526 new LayeredPainter([g_Terrains.cliff, middle, road], [3, 6]),
527 new SmoothElevationPainter(ELEVATION_SET, pathHeight, 3),
528 paintClass(g_TileClasses.step)
531 log("Creating the den of the player...");
533 new ClumpPlacer(mapArea * 0.03 / (isNomad() ? 2 : 1), 0.9, 0.3, 1, ...playerCoords),
535 new LayeredPainter([g_Terrains.cliff, base], [3]),
536 new SmoothElevationPainter(ELEVATION_SET, denHeight, 3),
537 paintClass(g_TileClasses.valley)
540 log("Creating the expansion of the player...");
542 new ClumpPlacer(expSize, 0.9, 0.3, 1, ...expansionCoords),
544 new LayeredPainter([g_Terrains.cliff, base], [3]),
545 new SmoothElevationPainter(ELEVATION_SET, denHeight, 3),
546 paintClass(g_TileClasses.settlement)
548 [avoidClasses(g_TileClasses.settlement, 2)]);
551 log("Creating the expansions between players after the paths were created...");
552 for (let i = 0; i < numPlayers; ++i)
554 new ClumpPlacer(expSize, 0.9, 0.3, 1, ...getCoords(nExp, i, 0.5)),
556 new LayeredPainter([g_Terrains.cliff, lower], [3]),
557 new SmoothElevationPainter(ELEVATION_SET, valleyHeight, 3),
558 paintClass(g_TileClasses.settlement)