Nomad mode on all random map scripts (except Survival of the Fittest), fixes #3591.
[0ad.git] / binaries / data / mods / public / maps / random / botswanan_haven.js
blobc84ce11d479c04c3679d3ccb4854b303e7a4a565
1 Engine.LoadLibrary("rmgen");
3 const tGrassA = "savanna_shrubs_a_wetseason";
4 const tGrassB = "savanna_shrubs_a";
5 const tCliff = "savanna_cliff_a";
6 const tHill = "savanna_grass_a_wetseason";
7 const tMud = "savanna_mud_a";
8 const tShoreBlend = "savanna_grass_b_wetseason";
9 const tShore = "savanna_riparian_wet";
10 const tWater = "savanna_mud_a";
11 const tCityTile = "savanna_tile_a";
13 const oBush = "gaia/flora_bush_temperate";
14 const oBaobab = "gaia/flora_tree_baobab";
15 const oToona = "gaia/flora_tree_toona";
16 const oBerryBush = "gaia/flora_bush_berry";
17 const oGazelle = "gaia/fauna_gazelle";
18 const oZebra = "gaia/fauna_zebra";
19 const oWildebeest = "gaia/fauna_wildebeest";
20 const oLion = "gaia/fauna_lion";
21 const oRhino = "gaia/fauna_rhino";
22 const oCrocodile = "gaia/fauna_crocodile";
23 const oElephant = "gaia/fauna_elephant_north_african";
24 const oElephantInfant = "gaia/fauna_elephant_african_infant";
25 const oLioness = "gaia/fauna_lioness";
26 const oRabbit = "gaia/fauna_rabbit";
27 const oStoneLarge = "gaia/geology_stonemine_temperate_quarry";
28 const oStoneSmall = "gaia/geology_stone_savanna_small";
29 const oMetalLarge = "gaia/geology_metal_savanna_slabs";
31 const aGrass = "actor|props/flora/grass_field_lush_tall.xml";
32 const aGrass2 = "actor|props/flora/grass_tropic_field_tall.xml";
33 const aGrassShort = "actor|props/flora/grass_soft_large.xml";
34 const aRockLarge = "actor|geology/stone_granite_med.xml";
35 const aRockMedium = "actor|geology/stone_granite_med.xml";
36 const aReeds = "actor|props/flora/reeds_pond_lush_a.xml";
37 const aReeds2 = "actor|props/flora/reeds_pond_lush_b.xml";
38 const aLillies = "actor|props/flora/water_lillies.xml";
39 const aBushMedium = "actor|props/flora/bush_tropic_b.xml";
40 const aBushSmall = "actor|props/flora/bush_tropic_a.xml";
41 const aShrub = "actor|props/flora/shrub_tropic_plant_flower.xml";
42 const aFlower = "actor|props/flora/flower_bright.xml";
43 const aPalm = "actor|props/flora/shrub_fanpalm.xml";
45 InitMap();
47 const numPlayers = getNumPlayers();
49 var clPlayer = createTileClass();
50 var clHill = createTileClass();
51 var clWater = createTileClass();
52 var clDirt = createTileClass();
53 var clRock = createTileClass();
54 var clMetal = createTileClass();
55 var clForest = createTileClass();
56 var clFood = createTileClass();
57 var clBaseResource = createTileClass();
59 placePlayerBases({
60         "PlayerPlacement": playerPlacementCircle(0.35),
61         "PlayerTileClass": clPlayer,
62         "BaseResourceClass": clBaseResource,
63         "CityPatch": {
64                 "outerTerrain": tCityTile,
65                 "innerTerrain": tCityTile
66         },
67         "Chicken": {
68         },
69         "Berries": {
70                 "template": oBerryBush
71         },
72         "Mines": {
73                 "types": [
74                         { "template": oMetalLarge },
75                         { "template": oStoneLarge }
76                 ]
77         },
78         "Trees": {
79                 "template": oBaobab
80         },
81         "Decoratives": {
82                 "template": aGrassShort
83         }
84 });
85 Engine.SetProgress(15);
87 log("Creating bumps...");
88 createAreas(
89         new ClumpPlacer(scaleByMapSize(20, 50), 0.6, 0.1, 1),
90         new SmoothElevationPainter(ELEVATION_MODIFY, 2, 2),
91         avoidClasses(clPlayer, 13),
92         scaleByMapSize(300, 800));
94 log("Creating hills...");
95 createAreas(
96         new ChainPlacer(1, Math.floor(scaleByMapSize(4, 6)), Math.floor(scaleByMapSize(16, 40)), 0.5),
97         [
98                 new LayeredPainter([tCliff, tHill], [2]),
99                 new SmoothElevationPainter(ELEVATION_SET, 15, 2),
100                 paintClass(clHill)
101         ],
102         avoidClasses(clPlayer, 20, clHill, 15, clWater, 0),
103         scaleByMapSize(1, 4) * numPlayers * 3);
105 log("Creating marshes...");
106 for (let i = 0; i < 2; ++i)
107         createAreas(
108                 new ChainPlacer(1, Math.floor(scaleByMapSize(6, 12)), Math.floor(scaleByMapSize(15, 60)), 0.8),
109                 [
110                         new LayeredPainter([tShoreBlend, tShore, tWater], [1, 1]),
111                         new SmoothElevationPainter(ELEVATION_SET, -2, 3),
112                         paintClass(clWater)
113                 ],
114                 avoidClasses(clPlayer, 25, clWater, Math.round(scaleByMapSize(7, 16) * randFloat(0.8, 1.35))),
115                 scaleByMapSize(4, 20));
117 log("Creating reeds...");
118 createObjectGroupsDeprecated(
119         new SimpleGroup(
120                 [
121                         new SimpleObject(aReeds, 20, 40, 0, 4),
122                         new SimpleObject(aReeds2, 20, 40, 0, 4),
123                         new SimpleObject(aLillies, 10, 30, 0, 4)
124                 ],
125                 true),
126         0,
127         stayClasses(clWater, 1),
128         scaleByMapSize(400, 1000),
129         100);
130 Engine.SetProgress(40);
132 log("Creating bumps...");
133 createAreas(
134         new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1),
135         new SmoothElevationPainter(ELEVATION_MODIFY, 1, 2),
136         stayClasses(clWater, 2),
137         scaleByMapSize(50, 100));
139 log("Creating mud patches...");
140 for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)])
141         createAreas(
142                 new ChainPlacer(2, Math.floor(scaleByMapSize(3, 6)), size, 1),
143                 [
144                         new LayeredPainter([tGrassA, tGrassB, tMud], [1, 1]),
145                         paintClass(clDirt)
146                 ],
147                 avoidClasses(clWater, 1, clHill, 0, clDirt, 5, clPlayer, 8),
148                 scaleByMapSize(15, 45));
149 Engine.SetProgress(50);
151 log("Creating stone mines...");
152 createObjectGroupsDeprecated(
153         new SimpleGroup(
154                 [
155                         new SimpleObject(oStoneSmall, 0, 2, 0, 4),
156                         new SimpleObject(oStoneLarge, 1, 1, 0, 4)
157                 ],
158                 true,
159                 clRock),
160         0,
161         [avoidClasses(clWater, 0, clPlayer, 20, clRock, 10, clHill, 1)],
162         scaleByMapSize(4, 16),
163         100);
165 createObjectGroupsDeprecated(
166         new SimpleGroup([new SimpleObject(oStoneSmall, 2, 5, 1, 3)], true, clRock),
167         0,
168         [avoidClasses(clWater, 0, clPlayer, 20, clRock, 10, clHill, 1)],
169         scaleByMapSize(4, 16),
170         100);
172 log("Creating metal mines...");
173 createObjectGroupsDeprecated(
174         new SimpleGroup([new SimpleObject(oMetalLarge, 1, 1, 0, 4)], true, clMetal),
175         0,
176         [avoidClasses(clWater, 0, clPlayer, 20, clMetal, 10, clRock, 5, clHill, 1)],
177         scaleByMapSize(4, 16),
178         100);
179 Engine.SetProgress(60);
181 log("Creating small decorative rocks...");
182 createObjectGroupsDeprecated(
183         new SimpleGroup([new SimpleObject(aRockMedium, 1, 3, 0, 1)], true),
184         0,
185         avoidClasses(clPlayer, 1),
186         scaleByMapSize(16, 262),
187         50);
188 Engine.SetProgress(65);
190 log("Creating large decorative rocks...");
191 createObjectGroupsDeprecated(
192         new SimpleGroup(
193                 [
194                         new SimpleObject(aRockLarge, 1, 2, 0, 1),
195                         new SimpleObject(aRockMedium, 1, 3, 0, 2)
196                 ],
197                 true),
198         0,
199         avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0),
200         scaleByMapSize(8, 131),
201         50);
202 Engine.SetProgress(70);
204 log("Creating lions...");
205 createObjectGroupsDeprecated(
206         new SimpleGroup(
207                 [
208                         new SimpleObject(oLion, 0, 1, 0, 4),
209                         new SimpleObject(oLioness, 2, 3, 0, 4)
210                 ],
211                 true,
212                 clFood),
213         0,
214         avoidClasses(clWater, 1, clPlayer, 20, clFood, 11, clHill, 1),
215         scaleByMapSize(4, 12),
216         50);
218 log("Creating zebras...");
219 createObjectGroupsDeprecated(
220         new SimpleGroup(
221                 [new SimpleObject(oZebra, 4, 6, 0, 4)],
222                 true,
223                 clFood),
224         0,
225         avoidClasses(clWater, 0, clForest, 0, clPlayer, 20, clHill, 1, clFood, 13),
226         3 * numPlayers,
227         50);
229 log("Creating wildebeest...");
230 createObjectGroupsDeprecated(
231         new SimpleGroup(
232                 [new SimpleObject(oWildebeest, 2, 4, 0, 4)],
233                 true,
234                 clFood),
235         0,
236         avoidClasses(clWater, 0, clForest, 0, clPlayer, 20, clHill, 1, clFood, 13),
237         3 * numPlayers,
238         50);
240 log("Creating crocodiles...");
241 createObjectGroupsDeprecated(
242         new SimpleGroup(
243                 [new SimpleObject(oCrocodile, 2, 3, 0, 4)],
244                 true,
245                 clFood),
246         0,
247         [avoidClasses(clForest, 0, clPlayer, 20, clHill, 1, clFood, 13), stayClasses(clWater, 3)],
248         5 * numPlayers,
249         200);
251 log("Creating gazelles...");
252 createObjectGroupsDeprecated(
253         new SimpleGroup(
254                 [new SimpleObject(oGazelle, 4, 6, 0, 4)],
255                 true,
256                 clFood),
257         0,
258         avoidClasses(clWater, 0, clForest, 0, clPlayer, 20, clHill, 1, clFood, 13),
259         3 * numPlayers,
260         50);
261 Engine.SetProgress(75);
263 log("Creating rabbits...");
264 createObjectGroupsDeprecated(
265         new SimpleGroup(
266                 [new SimpleObject(oRabbit, 6, 8, 0, 2)],
267                 true,
268                 clFood),
269         0,
270         avoidClasses(clWater, 0, clForest, 0, clPlayer, 20, clHill, 1, clFood, 13),
271         6 * numPlayers,
272         50);
274 log("Creating rhinos...");
275 createObjectGroupsDeprecated(
276         new SimpleGroup(
277                 [new SimpleObject(oRhino, 1, 1, 0, 2)],
278                 true,
279                 clFood),
280         0,
281         avoidClasses(clWater, 0, clForest, 0, clPlayer, 20, clHill, 1, clFood, 13),
282         3 * numPlayers,
283         50);
285 log("Creating elephants...");
286 createObjectGroupsDeprecated(
287         new SimpleGroup(
288                 [new SimpleObject(oElephant, 2, 3, 0, 4), new SimpleObject(oElephantInfant, 1, 1, 0, 4)],
289                 true,
290                 clFood),
291         0,
292         avoidClasses(clWater, 0, clForest, 0, clPlayer, 20, clHill, 1, clFood, 13),
293         3 * numPlayers,
294         50);
296 log("Creating berry bushes...");
297 createObjectGroupsDeprecated(
298         new SimpleGroup(
299                 [new SimpleObject(oBerryBush, 5, 7, 0, 4)],
300                 true,
301                 clFood),
302         0,
303         avoidClasses(clWater, 3, clForest, 0, clPlayer, 20, clHill, 1, clFood, 10),
304         randIntInclusive(1, 4) * numPlayers + 2,
305         50);
306 Engine.SetProgress(80);
308 createStragglerTrees(
309         [oToona, oBaobab, oBush, oBush],
310         avoidClasses(clForest, 1, clWater, 1, clHill, 1, clPlayer, 13, clMetal, 1, clRock, 1),
311         clForest,
312         scaleByMapSize(60, 500));
313 Engine.SetProgress(85);
315 log("Creating small grass tufts...");
316 createObjectGroupsDeprecated(
317         new SimpleGroup([new SimpleObject(aGrassShort, 1, 2, 0, 1, -Math.PI / 8, Math.PI / 8)]),
318         0,
319         avoidClasses(clWater, 2, clPlayer, 13, clDirt, 0),
320         scaleByMapSize(13, 200));
321 Engine.SetProgress(90);
323 log("Creating large grass tufts...");
324 createObjectGroupsDeprecated(
325         new SimpleGroup([
326                 new SimpleObject(aGrass, 2, 4, 0, 1.8, -Math.PI / 8, Math.PI / 8),
327                 new SimpleObject(aGrassShort, 3, 6, 1.2, 2.5, -Math.PI / 8, Math.PI / 8)
328         ]),
329         0,
330         avoidClasses(clWater, 3, clPlayer, 13, clDirt, 1, clForest, 0),
331         scaleByMapSize(13, 200));
332 Engine.SetProgress(95);
334 log("Creating bushes...");
335 createObjectGroupsDeprecated(
336         new SimpleGroup(
337         [
338                 new SimpleObject(aBushMedium, 1, 2, 0, 2),
339                 new SimpleObject(aBushSmall, 2, 4, 0, 2)
340         ]),
341         0,
342         avoidClasses(clWater, 1, clPlayer, 13, clDirt, 1),
343         scaleByMapSize(13, 200),
344         50);
346 log("Creating flowering shrubs...");
347 createObjectGroupsDeprecated(
348         new SimpleGroup([new SimpleObject(aShrub, 1, 1, 0, 2)]),
349         0,
350         avoidClasses(clWater, 1, clPlayer, 13, clDirt, 1),
351         scaleByMapSize(13, 200),
352         50);
354 log("Creating decorative palms...");
355 createObjectGroupsDeprecated(
356         new SimpleGroup([new SimpleObject(aPalm, 1, 3, 0, 2)]),
357         0,
358         avoidClasses(clWater, 2, clPlayer, 12, clDirt, 1),
359         scaleByMapSize(13, 200),
360         50);
362 log("Creating shrubs,flowers and other decorations...");
363 createObjectGroupsDeprecated(
364         new SimpleGroup(
365                 [
366                         new SimpleObject(aFlower, 0, 6, 0, 2),
367                         new SimpleObject(aGrass2, 2, 5, 0, 2)
368                 ]),
369         0,
370         avoidClasses(clWater, 1, clHill, 1, clPlayer, 13, clDirt, 1),
371         scaleByMapSize(13, 200),
372         50);
374 placePlayersNomad(clPlayer, avoidClasses(clWater, 4, clForest, 1, clMetal, 4, clRock, 4, clHill, 4, clFood, 2));
376 setSkySet("cirrus");
377 setWaterColor(0.553, 0.635, 0.345);
378 setWaterTint(0.161, 0.514, 0.635);
379 setWaterMurkiness(0.8);
380 setWaterWaviness(1.0);
381 setWaterType("clap");
383 setFogThickness(0.25);
384 setFogFactor(0.6);
386 setPPEffect("hdr");
387 setPPSaturation(0.44);
388 setPPBloom(0.3);
390 ExportMap();