1 Engine.LoadLibrary("rmgen");
3 var tCity = "desert_city_tile";
4 var tCityPlaza = "desert_city_tile_plaza";
5 var tFineSand = "desert_sand_smooth";
6 var tForestFloor = "desert_forestfloor_palms";
7 var tGrass = "desert_dirt_rough_2";
8 var tGrassSand50 = "desert_sand_dunes_50";
9 var tGrassSand25 = "desert_dirt_rough";
10 var tDirt = "desert_dirt_rough";
11 var tDirtCracks = "desert_dirt_cracks";
12 var tShore = "desert_sand_wet";
13 var tLush = "desert_grass_a";
14 var tSLush = "desert_grass_a_sand";
15 var tSDry = "desert_plants_b";
17 var oBerryBush = "gaia/flora_bush_berry";
18 var oCamel = "gaia/fauna_camel";
19 var oGazelle = "gaia/fauna_gazelle";
20 var oGoat = "gaia/fauna_goat";
21 var oStoneLarge = "gaia/geology_stonemine_desert_badlands_quarry";
22 var oStoneSmall = "gaia/geology_stone_desert_small";
23 var oMetalLarge = "gaia/geology_metal_desert_slabs";
24 var oDatePalm = "gaia/flora_tree_date_palm";
25 var oSDatePalm = "gaia/flora_tree_cretan_date_palm_short";
26 var eObelisk = "other/obelisk";
27 var ePyramid = "other/pyramid_minor";
28 var oWoodTreasure = "gaia/special_treasure_wood";
29 var oFoodTreasure = "gaia/special_treasure_food_bin";
31 var aBush1 = "actor|props/flora/bush_desert_a.xml";
32 var aBush2 = "actor|props/flora/bush_desert_dry_a.xml";
33 var aBush3 = "actor|props/flora/bush_medit_sm_dry.xml";
34 var aBush4 = "actor|props/flora/plant_desert_a.xml";
35 var aDecorativeRock = "actor|geology/stone_desert_med.xml";
36 var aReeds = "actor|props/flora/reeds_pond_lush_a.xml";
37 var aLillies = "actor|props/flora/water_lillies.xml";
39 var pForest = [tForestFloor + TERRAIN_SEPARATOR + oDatePalm, tForestFloor + TERRAIN_SEPARATOR + oSDatePalm, tForestFloor];
43 var mapSize = getMapSize();
44 var aPlants = mapSize < 256 ?
45 "actor|props/flora/grass_tropical.xml" :
46 "actor|props/flora/grass_tropic_field_tall.xml";
48 var numPlayers = getNumPlayers();
50 var clPlayer = createTileClass();
51 var clForest = createTileClass();
52 var clWater = createTileClass();
53 var clDirt = createTileClass();
54 var clRock = createTileClass();
55 var clMetal = createTileClass();
56 var clFood = createTileClass();
57 var clBaseResource = createTileClass();
58 var clGrass = createTileClass();
59 var clDesert = createTileClass();
60 var clPond = createTileClass();
61 var clShore = createTileClass();
62 var clTreasure = createTileClass();
65 "PlayerPlacement": playerPlacementRiver(0, 0.4),
66 "PlayerTileClass": clPlayer,
67 "BaseResourceClass": clBaseResource,
69 "outerTerrain": tCityPlaza,
75 "template": oBerryBush
79 { "template": oMetalLarge },
80 { "template": oStoneLarge }
84 "template": oDatePalm,
91 Engine.SetProgress(30);
93 const riverTextures = [
95 "left": fractionToTiles(0),
96 "right": fractionToTiles(0.04),
100 "left": fractionToTiles(0.04),
101 "right": fractionToTiles(0.06),
105 "left": fractionToTiles(0.06),
106 "right": fractionToTiles(0.09),
111 const plantFrequency = 2;
127 "waterFunc": (ix, iz, height, riverFraction) => {
129 addToClass(ix, iz, clWater);
130 placeTerrain(ix, iz, tShore);
132 // Place river bushes
133 if (height <= -0.2 || height >= 0.1)
136 if (plantID % plantFrequency == 0)
139 placeObject(ix, iz, aPlants, 0, randFloat(0, 2 * Math.PI));
143 "landFunc": (ix, iz, shoreDist1, shoreDist2) => {
145 if (ix < fractionToTiles(0.25) || ix > fractionToTiles(0.75))
146 addToClass(ix, iz, clDesert);
148 for (let riv of riverTextures)
149 if (riv.left < +shoreDist1 && +shoreDist1 < riv.right ||
150 riv.left < -shoreDist2 && -shoreDist2 < riv.right)
152 placeTerrain(ix, iz, riv.tileClass);
153 addToClass(ix, iz, clShore);
158 Engine.SetProgress(40);
160 log("Creating bumps...");
162 new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1),
163 new SmoothElevationPainter(ELEVATION_MODIFY, 2, 2),
164 avoidClasses(clWater, 2, clPlayer, 6),
165 scaleByMapSize(100, 200));
167 log("Creating ponds...");
168 var numLakes = Math.round(scaleByMapSize(1, 4) * numPlayers / 2);
169 var waterAreas = createAreas(
170 new ClumpPlacer(scaleByMapSize(2, 5) * 50, 0.8, 0.1, 10),
172 new LayeredPainter([tShore, tShore, tShore], [1, 1]),
173 new SmoothElevationPainter(ELEVATION_SET, -7, 4),
176 avoidClasses(clPlayer, 25, clWater, 20, clPond, 10),
180 log("Creating reeds...");
181 createObjectGroupsByAreasDeprecated(
182 new SimpleGroup([new SimpleObject(aReeds, 1, 3, 0, 1)], true),
184 stayClasses(clPond, 1),
189 log("Creating lillies...");
190 createObjectGroupsByAreasDeprecated(
191 new SimpleGroup([new SimpleObject(aLillies, 1, 3, 0, 1)], true),
193 stayClasses(clPond, 1),
200 log("Creating forests...");
201 var [forestTrees, stragglerTrees] = getTreeCounts(700, 3500, 0.5);
202 var num = scaleByMapSize(10,30);
204 new ClumpPlacer(forestTrees / num, 0.15, 0.1, 0.5),
206 new TerrainPainter([pForest, tForestFloor]),
209 avoidClasses(clPlayer, 19, clForest, 4, clWater, 1, clDesert, 5, clPond, 2, clBaseResource, 3),
213 Engine.SetProgress(50);
215 log("Creating grass patches...");
216 for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)])
218 new ClumpPlacer(size, 0.3, 0.06, 0.5),
221 [[tGrass, tGrassSand50], [tGrassSand50, tGrassSand25], [tGrassSand25, tGrass]],
225 avoidClasses(clForest, 0, clGrass, 5, clPlayer, 10, clWater, 1, clDirt, 5, clShore, 1, clPond, 1),
226 scaleByMapSize(15, 45));
227 Engine.SetProgress(55);
229 log("Creating dirt patches...");
230 for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)])
232 new ClumpPlacer(size, 0.3, 0.06, 0.5),
235 [[tDirt, tDirtCracks], [tDirt, tFineSand], [tDirtCracks, tFineSand]],
239 avoidClasses(clForest, 0, clDirt, 5, clPlayer, 10, clWater, 1, clGrass, 5, clShore, 1, clPond, 1),
240 scaleByMapSize(15, 45));
242 Engine.SetProgress(60);
244 log("Creating stone mines...");
245 var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0, 2, 0, 4), new SimpleObject(oStoneLarge, 1, 1, 0, 4)], true, clRock);
246 createObjectGroupsDeprecated(group, 0,
247 avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clWater, 1, clPond, 1),
248 scaleByMapSize(4,16), 100
251 log("Creating small stone quarries...");
252 group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
253 createObjectGroupsDeprecated(group, 0,
254 avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clWater, 1, clPond, 1),
255 scaleByMapSize(4,16), 100
258 log("Creating metal mines...");
259 group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
260 createObjectGroupsDeprecated(group, 0,
261 avoidClasses(clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clWater, 1, clPond, 1),
262 scaleByMapSize(4,16), 100
265 log("Creating stone mines...");
266 group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
267 createObjectGroupsDeprecated(group, 0,
268 [avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clWater, 1, clPond, 1), stayClasses(clDesert, 3)],
269 scaleByMapSize(6,20), 100
272 log("Creating small stone quarries...");
273 group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
274 createObjectGroupsDeprecated(group, 0,
275 [avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clWater, 1, clPond, 1), stayClasses(clDesert, 3)],
276 scaleByMapSize(6,20), 100
279 log("Creating metal mines...");
280 group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
281 createObjectGroupsDeprecated(group, 0,
282 [avoidClasses(clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clWater, 1, clPond, 1), stayClasses(clDesert, 3)],
283 scaleByMapSize(6,20), 100
286 Engine.SetProgress(65);
288 log("Creating small decorative rocks...");
289 group = new SimpleGroup(
290 [new SimpleObject(aDecorativeRock, 1,3, 0,1)],
293 createObjectGroupsDeprecated(
295 avoidClasses(clWater, 1, clForest, 0, clPlayer, 0, clPond, 1),
296 scaleByMapSize(16, 262), 50
299 log("Creating shrubs...");
300 group = new SimpleGroup(
301 [new SimpleObject(aBush2, 1,2, 0,1), new SimpleObject(aBush1, 1,3, 0,2), new SimpleObject(aBush4, 1,2, 0,1), new SimpleObject(aBush3, 1,3, 0,2)],
304 createObjectGroupsDeprecated(
306 avoidClasses(clWater, 1, clPlayer, 0, clPond, 1),
307 scaleByMapSize(20, 180), 50
309 Engine.SetProgress(70);
311 log("Creating gazelles...");
312 group = new SimpleGroup([new SimpleObject(oGazelle, 5,7, 0,4)], true, clFood);
313 createObjectGroupsDeprecated(group, 0,
314 avoidClasses(clForest, 0, clPlayer, 20, clWater, 1, clFood, 10, clDesert, 5, clPond, 1),
315 3*scaleByMapSize(5,20), 50
318 log("Creating goats...");
319 group = new SimpleGroup([new SimpleObject(oGoat, 2,4, 0,3)], true, clFood);
320 createObjectGroupsDeprecated(group, 0,
321 avoidClasses(clForest, 0, clPlayer, 20, clWater, 1, clFood, 10, clDesert, 5, clPond, 1),
322 3*scaleByMapSize(5,20), 50
325 log("Creating treasures...");
326 group = new SimpleGroup([new SimpleObject(oFoodTreasure, 1,1, 0,2)], true, clTreasure);
327 createObjectGroupsDeprecated(group, 0,
328 avoidClasses(clForest, 0, clPlayer, 20, clWater, 1, clFood, 2, clDesert, 5, clTreasure, 6, clPond, 1),
329 3*scaleByMapSize(5,20), 50
332 group = new SimpleGroup([new SimpleObject(oWoodTreasure, 1,1, 0,2)], true, clTreasure);
333 createObjectGroupsDeprecated(group, 0,
334 avoidClasses(clForest, 0, clPlayer, 20, clWater, 1, clFood, 2, clDesert, 5, clTreasure, 6, clPond, 1),
335 3*scaleByMapSize(5,20), 50
338 log("Creating camels...");
339 group = new SimpleGroup([new SimpleObject(oCamel, 2,4, 0,2)], true, clFood);
340 createObjectGroupsDeprecated(group, 0,
341 avoidClasses(clForest, 0, clPlayer, 20, clWater, 1, clFood, 10, clDesert, 5, clTreasure, 2, clPond, 1),
342 3*scaleByMapSize(5,20), 50
345 Engine.SetProgress(90);
347 createStragglerTrees(
348 [oDatePalm, oSDatePalm],
349 avoidClasses(clForest, 0, clWater, 1, clPlayer, 20, clMetal, 6, clDesert, 1, clTreasure, 2, clPond, 1),
353 createStragglerTrees(
354 [oDatePalm, oSDatePalm],
355 avoidClasses(clForest, 0, clWater, 1, clPlayer, 20, clMetal, 6, clTreasure, 2),
357 stragglerTrees / 10);
359 createStragglerTrees(
360 [oDatePalm, oSDatePalm],
361 borderClasses(clPond, 1, 4),
365 log("Creating obelisks");
366 group = new SimpleGroup(
367 [new SimpleObject(eObelisk, 1,1, 0,1)],
370 createObjectGroupsDeprecated(
372 [avoidClasses(clWater, 4, clForest, 3, clPlayer, 20, clMetal, 6, clRock, 2, clPond, 4, clTreasure, 2), stayClasses(clDesert, 3)],
373 scaleByMapSize(5, 30), 50
376 log("Creating pyramids");
377 group = new SimpleGroup(
378 [new SimpleObject(ePyramid, 1,1, 0,1)],
381 createObjectGroupsDeprecated(
383 [avoidClasses(clWater, 7, clForest, 6, clPlayer, 20, clMetal, 5, clRock, 5, clPond, 7, clTreasure, 2), stayClasses(clDesert, 3)],
384 scaleByMapSize(2, 6), 50
387 placePlayersNomad(clPlayer, avoidClasses(clWater, 4, clForest, 1, clMetal, 4, clRock, 4, clFood, 2));
390 setSunColor(0.711, 0.746, 0.574);
391 setWaterColor(0.541,0.506,0.416);
392 setWaterTint(0.694,0.592,0.522);
393 setWaterMurkiness(1);
394 setWaterWaviness(3.0);
395 setWaterType("lake");