1 Engine.LoadLibrary("rmgen");
2 Engine.LoadLibrary("rmgen-common");
4 var tPrimary = "savanna_grass_a";
5 var tForestFloor = "savanna_forestfloor_a";
6 var tCliff = ["savanna_cliff_a", "savanna_cliff_a_red", "savanna_cliff_b", "savanna_cliff_b_red"];
7 var tSecondary = "savanna_grass_b";
8 var tGrassShrubs = "savanna_shrubs_a";
9 var tDirt = "savanna_dirt_a";
10 var tDirt2 = "savanna_dirt_a_red";
11 var tDirt3 = "savanna_dirt_b";
12 var tDirt4 = "savanna_dirt_rocks_a";
13 var tCitytiles = "savanna_tile_a";
14 var tShore = "savanna_riparian_bank";
15 var tWater = "savanna_riparian_wet";
17 var oBaobab = "gaia/flora_tree_baobab";
18 var oPalm = "gaia/flora_tree_senegal_date_palm";
19 var oBerryBush = "gaia/flora_bush_berry";
20 var oWildebeest = "gaia/fauna_wildebeest";
21 var oZebra = "gaia/fauna_zebra";
22 var oRhino = "gaia/fauna_rhino";
23 var oLion = "gaia/fauna_lion";
24 var oLioness = "gaia/fauna_lioness";
25 var oHawk = "gaia/fauna_hawk";
26 var oGiraffe = "gaia/fauna_giraffe";
27 var oGiraffe2 = "gaia/fauna_giraffe_infant";
28 var oGazelle = "gaia/fauna_gazelle";
29 var oElephant = "gaia/fauna_elephant_african_bush";
30 var oElephant2 = "gaia/fauna_elephant_african_infant";
31 var oCrocodile = "gaia/fauna_crocodile";
32 var oFish = "gaia/fauna_fish";
33 var oStoneSmall = "gaia/geology_stone_savanna_small";
34 var oMetalLarge = "gaia/geology_metal_savanna_slabs";
36 var aBush = "actor|props/flora/bush_medit_sm_dry.xml";
37 var aRock = "actor|geology/stone_savanna_med.xml";
39 const pForest = [tForestFloor + TERRAIN_SEPARATOR + oPalm, tForestFloor];
41 var heightSeaGround = -5;
45 var g_Map = new RandomMap(heightLand, tPrimary);
47 const numPlayers = getNumPlayers();
48 const mapSize = g_Map.getSize();
50 var clPlayer = g_Map.createTileClass();
51 var clHill = g_Map.createTileClass();
52 var clForest = g_Map.createTileClass();
53 var clWater = g_Map.createTileClass();
54 var clDirt = g_Map.createTileClass();
55 var clRock = g_Map.createTileClass();
56 var clMetal = g_Map.createTileClass();
57 var clFood = g_Map.createTileClass();
58 var clBaseResource = g_Map.createTileClass();
61 "PlayerPlacement": playerPlacementCircle(fractionToTiles(0.35)),
62 "PlayerTileClass": clPlayer,
63 "BaseResourceClass": clBaseResource,
65 "outerTerrain": tPrimary,
66 "innerTerrain": tCitytiles
71 "template": oBerryBush
76 "template": oMetalLarge
79 "type": "stone_formation",
80 "template": oStoneSmall,
87 "count": scaleByMapSize(3, 12),
95 Engine.SetProgress(20);
97 createHills([tDirt2, tCliff, tGrassShrubs], avoidClasses(clPlayer, 35, clForest, 20, clHill, 20, clWater, 2), clHill, scaleByMapSize(5, 8));
98 Engine.SetProgress(30);
100 g_Map.log("Creating water holes");
102 new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), Math.floor(scaleByMapSize(60, 100)), Infinity),
104 new LayeredPainter([tShore, tWater], [1]),
105 new SmoothElevationPainter(ELEVATION_SET, heightSeaGround, 7),
106 new TileClassPainter(clWater)
108 avoidClasses(clPlayer, 22, clWater, 8, clHill, 2),
109 scaleByMapSize(2, 5));
111 Engine.SetProgress(45);
113 paintTerrainBasedOnHeight(heightCliff, Infinity, 0, tCliff);
115 createBumps(avoidClasses(clWater, 2, clPlayer, 20));
117 var [forestTrees, stragglerTrees] = getTreeCounts(500, 3000, 0.7);
119 [tPrimary, tForestFloor, tForestFloor, pForest, pForest],
120 avoidClasses(clPlayer, 20, clForest, 20, clHill, 0, clWater, 2),
124 g_Map.log("Creating dirt patches");
125 createLayeredPatches(
126 [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
127 [[tDirt,tDirt3], [tDirt2,tDirt4]],
129 avoidClasses(clWater, 3, clForest, 0, clHill, 0, clDirt, 5, clPlayer, 12),
130 scaleByMapSize(15, 45),
133 g_Map.log("Creating shrubs");
135 [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
137 avoidClasses(clWater, 3, clForest, 0, clHill, 0, clDirt, 5, clPlayer, 12),
138 scaleByMapSize(15, 45),
141 g_Map.log("Creating grass patches");
143 [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
145 avoidClasses(clWater, 3, clForest, 0, clHill, 0, clDirt, 5, clPlayer, 12),
146 scaleByMapSize(15, 45),
148 Engine.SetProgress(60);
150 g_Map.log("Creating stone mines");
153 [new SimpleObject(oStoneSmall, 0, 2, 0, 4)],
154 [new SimpleObject(oStoneSmall, 2, 5, 1, 3)]
156 avoidClasses(clWater, 4, clForest, 4, clPlayer, 20, clRock, 10, clHill, 4),
159 g_Map.log("Creating metal mines");
162 [new SimpleObject(oMetalLarge, 1,1, 0,4)]
164 avoidClasses(clWater, 4, clForest, 4, clPlayer, 20, clMetal, 18, clRock, 5, clHill, 4),
167 Engine.SetProgress(70);
171 [new SimpleObject(aBush, 1,3, 0,1)],
172 [new SimpleObject(aRock, 1,2, 0,1)]
175 scaleByMapSize(8, 131),
176 scaleByMapSize(8, 131)
178 avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0));
179 Engine.SetProgress(75);
181 g_Map.log("Creating giraffes");
182 var group = new SimpleGroup(
183 [new SimpleObject(oGiraffe, 2,4, 0,4), new SimpleObject(oGiraffe2, 0,2, 0,4)],
186 createObjectGroupsDeprecated(group, 0,
187 avoidClasses(clWater, 3, clPlayer, 20, clFood, 11, clHill, 4),
188 scaleByMapSize(4,12), 50
191 g_Map.log("Creating elephants");
192 group = new SimpleGroup(
193 [new SimpleObject(oElephant, 2,4, 0,4), new SimpleObject(oElephant2, 0,2, 0,4)],
196 createObjectGroupsDeprecated(group, 0,
197 avoidClasses(clWater, 3, clPlayer, 20, clFood, 11, clHill, 4),
198 scaleByMapSize(4,12), 50
201 g_Map.log("Creating lions");
202 group = new SimpleGroup(
203 [new SimpleObject(oLion, 0,1, 0,4), new SimpleObject(oLioness, 2,3, 0,4)],
206 createObjectGroupsDeprecated(group, 0,
207 avoidClasses(clWater, 3, clPlayer, 20, clFood, 11, clHill, 4),
208 scaleByMapSize(4,12), 50
213 [new SimpleObject(oHawk, 1, 1, 0, 3)],
214 [new SimpleObject(oGazelle, 3, 5, 0, 3)],
215 [new SimpleObject(oZebra, 3, 5, 0, 3)],
216 [new SimpleObject(oWildebeest, 4, 6, 0, 3)],
217 [new SimpleObject(oRhino, 1, 1, 0, 3)]
226 avoidClasses(clFood, 20, clWater, 5, clHill, 2, clPlayer, 16),
231 [new SimpleObject(oCrocodile, 2, 3, 0, 3)]
236 stayClasses(clWater, 6),
241 [new SimpleObject(oBerryBush, 5, 7, 0, 4)]
244 randIntInclusive(1, 4) * numPlayers + 2
246 avoidClasses(clWater, 3, clForest, 2, clPlayer, 20, clHill, 3, clFood, 10),
251 [new SimpleObject(oFish, 2, 3, 0, 2)]
256 [avoidClasses(clFood, 20), stayClasses(clWater, 6)],
258 Engine.SetProgress(85);
260 createStragglerTrees(
262 avoidClasses(clWater, 5, clForest, 2, clHill, 3, clPlayer, 12, clMetal, 4, clRock, 4),
266 placePlayersNomad(clPlayer, avoidClasses(clWater, 4, clForest, 1, clMetal, 4, clRock, 4, clHill, 4, clFood, 2));
269 setPPSaturation(0.48);
273 setFogThickness(0.25);
275 setFogColor(0.8, 0.7, 0.5);
278 setSunRotation(randomAngle());
279 setSunElevation(Math.PI * randFloat(1/4, 1/2));
281 setWaterColor(0.223, 0.247, 0.2); // dark majestic blue
282 setWaterTint(0.462, 0.756, 0.566); // light blue
283 setWaterMurkiness(5.92);
285 setWaterType("clap");