1 Engine.LoadLibrary("rmgen");
3 const tSnowA = ["polar_snow_b"];
4 const tSnowB = "polar_ice_snow";
5 const tSnowC = "polar_ice";
6 const tSnowD = "polar_snow_a";
7 const tForestFloor = "polar_tundra_snow";
8 const tCliff = "polar_snow_rocks";
9 const tSnowE = ["polar_snow_glacial"];
10 const tRoad = "new_alpine_citytile";
11 const tRoadWild = "new_alpine_citytile";
12 const tShoreBlend = "alpine_shore_rocks_icy";
13 const tShore = "alpine_shore_rocks";
14 const tWater = "alpine_shore_rocks";
16 const oPine = "gaia/flora_tree_pine_w";
17 const oStoneLarge = "gaia/geology_stonemine_alpine_quarry";
18 const oStoneSmall = "gaia/geology_stone_alpine_a";
19 const oMetalLarge = "gaia/geology_metal_alpine_slabs";
20 const oFish = "gaia/fauna_fish";
21 const oWalrus = "gaia/fauna_walrus";
22 const oArcticWolf = "gaia/fauna_arctic_wolf";
24 const aIceberg = "actor|props/special/eyecandy/iceberg.xml";
26 const pForestD = [tForestFloor + TERRAIN_SEPARATOR + oPine, tForestFloor, tForestFloor];
27 const pForestS = [tForestFloor + TERRAIN_SEPARATOR + oPine, tForestFloor, tForestFloor, tForestFloor];
31 const numPlayers = getNumPlayers();
32 const mapSize = getMapSize();
34 var clPlayer = createTileClass();
35 var clHill = createTileClass();
36 var clForest = createTileClass();
37 var clWater = createTileClass();
38 var clIsland = createTileClass();
39 var clDirt = createTileClass();
40 var clRock = createTileClass();
41 var clMetal = createTileClass();
42 var clFood = createTileClass();
43 var clBaseResource = createTileClass();
46 "PlayerPlacement": playerPlacementLine(true, 0.45, 0.2),
47 "PlayerTileClass": clPlayer,
48 "BaseResourceClass": clBaseResource,
50 "outerTerrain": tRoadWild,
53 // No chicken, no berries
56 { "template": oMetalLarge },
57 { "template": oStoneLarge }
62 "count": scaleByMapSize(12, 30),
66 Engine.SetProgress(15);
75 "fadeDist": tilesToFraction(8),
81 "waterFunc": (ix, iz, height, riverFraction) => {
82 addToClass(ix, iz, clWater);
84 "landFunc": (ix, iz, shoreDist1, shoreDist2) => {
85 if (getHeight(ix, iz) < 0.5)
86 addToClass(ix, iz, clWater);
90 log("Creating shores...");
91 for (var i = 0; i < scaleByMapSize(20,120); i++)
95 Math.floor(scaleByMapSize(4, 6)),
96 Math.floor(scaleByMapSize(16, 30)),
98 randIntExclusive(0.1 * mapSize, 0.9 * mapSize),
99 randIntExclusive(0.67 * mapSize, 0.74 * mapSize)),
101 new LayeredPainter([tSnowA, tSnowA], [2]),
102 new SmoothElevationPainter(ELEVATION_SET, 3, 3), unPaintClass(clWater)
106 log("Creating islands...");
108 new ChainPlacer(1, Math.floor(scaleByMapSize(4, 6)), Math.floor(scaleByMapSize(16, 40)), 0.1),
110 new LayeredPainter([tSnowA, tSnowA], [3]),
111 new SmoothElevationPainter(ELEVATION_SET, 3, 3),
112 paintClass(clIsland),
113 unPaintClass(clWater)
115 stayClasses(clWater, 7),
116 scaleByMapSize(10, 80)
119 paintTerrainBasedOnHeight(-6, 1, 1, tWater);
121 log("Creating lakes...");
123 new ChainPlacer(1, Math.floor(scaleByMapSize(5, 7)), Math.floor(scaleByMapSize(20, 50)), 0.1),
125 new LayeredPainter([tShoreBlend, tShore, tWater], [1, 1]),
126 new SmoothElevationPainter(ELEVATION_SET, -4, 3),
129 avoidClasses(clPlayer, 20, clWater, 20),
130 Math.round(scaleByMapSize(1, 4) * numPlayers));
132 paintTerrainBasedOnHeight(1, 2.8, 1, tShoreBlend);
133 paintTileClassBasedOnHeight(-6, 0.5, 1, clWater);
135 Engine.SetProgress(45);
137 log("Creating hills...");
139 new ChainPlacer(1, Math.floor(scaleByMapSize(4, 6)), Math.floor(scaleByMapSize(16, 40)), 0.1),
141 new LayeredPainter([tCliff, tSnowA], [3]),
142 new SmoothElevationPainter(ELEVATION_SET, 25, 3),
145 avoidClasses(clPlayer, 20, clHill, 15, clWater, 2, clBaseResource, 2),
146 scaleByMapSize(1, 4) * numPlayers
149 log("Creating forests...");
150 var [forestTrees, stragglerTrees] = getTreeCounts(100, 625, 0.7);
152 [[tSnowA, tSnowA, tSnowA, tSnowA, pForestD], [tSnowA, tSnowA, tSnowA, pForestD]],
153 [[tSnowA, tSnowA, tSnowA, tSnowA, pForestS], [tSnowA, tSnowA, tSnowA, pForestS]]
156 var size = forestTrees / (scaleByMapSize(3,6) * numPlayers);
158 var num = Math.floor(size / types.length);
159 for (let type of types)
161 new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), forestTrees / (num * Math.floor(scaleByMapSize(2, 4))), 1),
163 new LayeredPainter(type, [2]),
166 avoidClasses(clPlayer, 20, clForest, 20, clHill, 0, clWater, 8),
169 log("Creating iceberg...");
170 createObjectGroupsDeprecated(
171 new SimpleGroup([new SimpleObject(aIceberg, 0, 2, 0, 4)], true, clRock),
173 [avoidClasses(clRock, 6), stayClasses(clWater, 4)],
174 scaleByMapSize(4, 16),
176 Engine.SetProgress(70);
178 log("Creating dirt patches...");
179 for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)])
181 new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), size, 0.5),
183 new LayeredPainter([tSnowD, tSnowB, tSnowC], [2, 1]),
192 scaleByMapSize(20, 80));
194 for (let size of [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)])
196 new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), size, 0.5),
198 new LayeredPainter([tSnowE, tSnowE], [1]),
207 scaleByMapSize(20, 80));
209 log("Creating stone mines...");
210 var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0, 2, 0, 4), new SimpleObject(oStoneLarge, 1, 1, 0, 4)], true, clRock);
211 createObjectGroupsDeprecated(group, 0,
212 avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
213 scaleByMapSize(8,32), 100
216 log("Creating small stone quarries...");
217 group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
218 createObjectGroupsDeprecated(group, 0,
219 avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
220 scaleByMapSize(8,32), 100
223 log("Creating metal mines...");
224 group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
225 createObjectGroupsDeprecated(group, 0,
226 avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clHill, 1),
227 scaleByMapSize(8,32), 100
229 Engine.SetProgress(95);
231 createStragglerTrees(
233 avoidClasses(clWater, 5, clForest, 1, clHill, 1, clPlayer, 12, clMetal, 6, clRock, 6),
237 log("Creating deer...");
238 group = new SimpleGroup(
239 [new SimpleObject(oWalrus, 5,7, 0,4)],
242 createObjectGroupsDeprecated(group, 0,
243 avoidClasses(clWater, 3, clForest, 0, clPlayer, 20, clHill, 1, clFood, 20),
247 Engine.SetProgress(75);
249 log("Creating sheep...");
250 group = new SimpleGroup(
251 [new SimpleObject(oArcticWolf, 2,3, 0,2)],
254 createObjectGroupsDeprecated(group, 0,
255 avoidClasses(clWater, 3, clForest, 0, clPlayer, 20, clHill, 1, clFood, 20),
259 log("Creating fish...");
260 group = new SimpleGroup(
261 [new SimpleObject(oFish, 2,3, 0,2)],
264 createObjectGroupsDeprecated(group, 0,
265 [avoidClasses(clFood, 20), stayClasses(clWater, 6)],
269 placePlayersNomad(clPlayer, avoidClasses(clWater, 4, clForest, 1, clMetal, 4, clRock, 4, clHill, 4, clFood, 2, clIsland, 4));
271 setSunColor(0.6, 0.6, 0.6);
272 setSunElevation(Math.PI/ 6);
274 setWaterColor(0.02, 0.17, 0.52);
275 setWaterTint(0.494, 0.682, 0.808);
276 setWaterMurkiness(0.82);
277 setWaterWaviness(0.5);
278 setWaterType("ocean");
281 setFogThickness(0.09);
282 setPPSaturation(0.28);