Fix the two incorrect replacements in rP21434, refs #4950.
[0ad.git] / binaries / data / mods / public / maps / random / african_plains.js
blobbd0bd3e3cd40b428ea26bff3faf5cc5bfec3a728
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;
42 var heightLand = 2;
43 var heightCliff = 3;
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();
60 placePlayerBases({
61         "PlayerPlacement": playerPlacementCircle(fractionToTiles(0.35)),
62         "PlayerTileClass": clPlayer,
63         "BaseResourceClass": clBaseResource,
64         "CityPatch": {
65                 "outerTerrain": tPrimary,
66                 "innerTerrain": tCitytiles
67         },
68         "Chicken": {
69         },
70         "Berries": {
71                 "template": oBerryBush
72         },
73         "Mines": {
74                 "types": [
75                         {
76                                 "template": oMetalLarge
77                         },
78                         {
79                                 "type": "stone_formation",
80                                 "template": oStoneSmall,
81                                 "terrain": tDirt4
82                         }
83                 ]
84         },
85         "Trees": {
86                 "template": oBaobab,
87                 "count": scaleByMapSize(3, 12),
88                 "minDistGroup": 2,
89                 "maxDistGroup": 6,
90                 "minDist": 15,
91                 "maxDist": 16
92         }
93         // No decoratives
94 });
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");
101 createAreas(
102         new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), Math.floor(scaleByMapSize(60, 100)), Infinity),
103         [
104                 new LayeredPainter([tShore, tWater], [1]),
105                 new SmoothElevationPainter(ELEVATION_SET, heightSeaGround, 7),
106                 new TileClassPainter(clWater)
107         ],
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);
118 createForests(
119         [tPrimary, tForestFloor, tForestFloor, pForest, pForest],
120         avoidClasses(clPlayer, 20, clForest, 20, clHill, 0, clWater, 2),
121         clForest,
122         forestTrees);
124 g_Map.log("Creating dirt patches");
125 createLayeredPatches(
126         [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
127         [[tDirt,tDirt3], [tDirt2,tDirt4]],
128         [2],
129         avoidClasses(clWater, 3, clForest, 0, clHill, 0, clDirt, 5, clPlayer, 12),
130         scaleByMapSize(15, 45),
131         clDirt);
133 g_Map.log("Creating shrubs");
134 createPatches(
135         [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
136         tGrassShrubs,
137         avoidClasses(clWater, 3, clForest, 0, clHill, 0, clDirt, 5, clPlayer, 12),
138         scaleByMapSize(15, 45),
139         clDirt);
141 g_Map.log("Creating grass patches");
142 createPatches(
143         [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
144         tSecondary,
145         avoidClasses(clWater, 3, clForest, 0, clHill, 0, clDirt, 5, clPlayer, 12),
146         scaleByMapSize(15, 45),
147         clDirt);
148 Engine.SetProgress(60);
150 g_Map.log("Creating stone mines");
151 createMines(
152         [
153                 [new SimpleObject(oStoneSmall, 0, 2, 0, 4)],
154                 [new SimpleObject(oStoneSmall, 2, 5, 1, 3)]
155         ],
156         avoidClasses(clWater, 4, clForest, 4, clPlayer, 20, clRock, 10, clHill, 4),
157         clRock);
159 g_Map.log("Creating metal mines");
160 createMines(
161         [
162                 [new SimpleObject(oMetalLarge, 1,1, 0,4)]
163         ],
164         avoidClasses(clWater, 4, clForest, 4, clPlayer, 20, clMetal, 18, clRock, 5, clHill, 4),
165         clMetal
167 Engine.SetProgress(70);
169 createDecoration(
170         [
171                 [new SimpleObject(aBush, 1,3, 0,1)],
172                 [new SimpleObject(aRock, 1,2, 0,1)]
173         ],
174         [
175                 scaleByMapSize(8, 131),
176                 scaleByMapSize(8, 131)
177         ],
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)],
184         true, clFood
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)],
194         true, clFood
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)],
204         true, clFood
206 createObjectGroupsDeprecated(group, 0,
207         avoidClasses(clWater, 3, clPlayer, 20, clFood, 11, clHill, 4),
208         scaleByMapSize(4,12), 50
211 createFood(
212         [
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)]
218         ],
219         [
220                 3 * numPlayers,
221                 3 * numPlayers,
222                 3 * numPlayers,
223                 3 * numPlayers,
224                 3 * numPlayers,
225         ],
226         avoidClasses(clFood, 20, clWater, 5, clHill, 2, clPlayer, 16),
227         clFood);
229 createFood(
230         [
231                 [new SimpleObject(oCrocodile, 2, 3, 0, 3)]
232         ],
233         [
234                 3 * numPlayers,
235         ],
236         stayClasses(clWater, 6),
237         clFood);
239 createFood(
240         [
241                 [new SimpleObject(oBerryBush, 5, 7, 0, 4)]
242         ],
243         [
244                 randIntInclusive(1, 4) * numPlayers + 2
245         ],
246         avoidClasses(clWater, 3, clForest, 2, clPlayer, 20, clHill, 3, clFood, 10),
247         clFood);
249 createFood(
250         [
251                 [new SimpleObject(oFish, 2, 3, 0, 2)]
252         ],
253         [
254                 15 * numPlayers
255         ],
256         [avoidClasses(clFood, 20), stayClasses(clWater, 6)],
257         clFood);
258 Engine.SetProgress(85);
260 createStragglerTrees(
261         [oBaobab],
262         avoidClasses(clWater, 5, clForest, 2, clHill, 3, clPlayer, 12, clMetal, 4, clRock, 4),
263         clForest,
264         stragglerTrees);
266 placePlayersNomad(clPlayer, avoidClasses(clWater, 4, clForest, 1, clMetal, 4, clRock, 4, clHill, 4, clFood, 2));
268 setPPEffect("hdr");
269 setPPSaturation(0.48);
270 setPPContrast(0.53);
271 setPPBloom(0.12);
273 setFogThickness(0.25);
274 setFogFactor(0.25);
275 setFogColor(0.8, 0.7, 0.5);
277 setSkySet("sunny");
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);
284 setWaterWaviness(0);
285 setWaterType("clap");
287 g_Map.ExportMap();