Nomad mode on all random map scripts (except Survival of the Fittest), fixes #3591.
[0ad.git] / binaries / data / mods / public / maps / random / kerala.js
blobf4a0c92db58acd5b02c75e6118db54db76b89098
1 Engine.LoadLibrary("rmgen");
3 const tGrass = ["tropic_grass_c", "tropic_grass_c", "tropic_grass_c", "tropic_grass_c", "tropic_grass_plants", "tropic_plants", "tropic_plants_b"];
4 const tGrassA = "tropic_plants_c";
5 const tGrassB = "tropic_plants_c";
6 const tGrassC = "tropic_grass_c";
7 const tForestFloor = "tropic_grass_plants";
8 const tCliff = ["tropic_cliff_a", "tropic_cliff_a", "tropic_cliff_a", "tropic_cliff_a_plants"];
9 const tPlants = "tropic_plants";
10 const tRoad = "tropic_citytile_a";
11 const tRoadWild = "tropic_citytile_plants";
12 const tShoreBlend = "tropic_beach_dry_plants";
13 const tShore = "tropic_beach_dry";
14 const tWater = "tropic_beach_wet";
16 const oTree = "gaia/flora_tree_toona";
17 const oPalm = "gaia/flora_tree_palm_tropic";
18 const oStoneLarge = "gaia/geology_stonemine_tropic_quarry";
19 const oStoneSmall = "gaia/geology_stone_tropic_a";
20 const oMetalLarge = "gaia/geology_metal_tropic_slabs";
21 const oFish = "gaia/fauna_fish";
22 const oDeer = "gaia/fauna_deer";
23 const oSheep = "gaia/fauna_tiger";
24 const oBush = "gaia/flora_bush_berry";
26 const aRockLarge = "actor|geology/stone_granite_large.xml";
27 const aRockMedium = "actor|geology/stone_granite_med.xml";
28 const aBush1 = "actor|props/flora/plant_tropic_a.xml";
29 const aBush2 = "actor|props/flora/plant_lg.xml";
30 const aBush3 = "actor|props/flora/plant_tropic_large.xml";
32 const pForestD = [tForestFloor + TERRAIN_SEPARATOR + oTree, tForestFloor];
33 const pForestP = [tForestFloor + TERRAIN_SEPARATOR + oPalm, tForestFloor];
35 InitMap();
37 const numPlayers = getNumPlayers();
38 const mapSize = getMapSize();
40 var clPlayer = createTileClass();
41 var clHill = createTileClass();
42 var clForest = createTileClass();
43 var clWater = createTileClass();
44 var clDirt = createTileClass();
45 var clRock = createTileClass();
46 var clMetal = createTileClass();
47 var clFood = createTileClass();
48 var clBaseResource = createTileClass();
49 var clMountains = createTileClass();
51 const waterPos = 0.31;
52 const mountainPos = 0.69;
54 placePlayerBases({
55         "PlayerPlacement": playerPlacementLine(false, 0.55, 0.2),
56         "PlayerTileClass": clPlayer,
57         "BaseResourceClass": clBaseResource,
58         "CityPatch": {
59                 "outerTerrain": tRoadWild,
60                 "innerTerrain": tRoad
61         },
62         "Chicken": {
63         },
64         "Berries": {
65                 "template": oBush
66         },
67         "Mines": {
68                 "types": [
69                         { "template": oMetalLarge },
70                         { "template": oStoneLarge }
71                 ]
72         },
73         "Trees": {
74                 "template": oTree,
75                 "count": scaleByMapSize(12, 30),
76                 "minDist": 12,
77                 "maxDist": 14,
78                 "minDistGroup": 1,
79                 "maxDistGroup": 3
80         }
81         // No decoratives
82 });
83 Engine.SetProgress(15);
85 paintRiver({
86         "parallel": true,
87         "startX": 0,
88         "startZ": 0,
89         "endX": 0,
90         "endZ": 1,
91         "width": 2 * waterPos,
92         "fadeDist": 0.025,
93         "deviation": 0,
94         "waterHeight": -5,
95         "landHeight": 3,
96         "meanderShort": 20,
97         "meanderLong": 0,
98         "waterFunc": (ix, iz, height, riverFraction) => {
99                 addToClass(ix, iz, clWater);
100         }
103 createArea(
104         new RectPlacer(fractionToTiles(mountainPos), fractionToTiles(0), fractionToTiles(1), fractionToTiles(1)),
105         paintClass(clMountains));
107 log("Creating shores...");
108 for (let i = 0; i < scaleByMapSize(20, 120); ++i)
109         createArea(
110                 new ChainPlacer(
111                         1,
112                         Math.floor(scaleByMapSize(4, 6)),
113                         Math.floor(scaleByMapSize(16, 30)),
114                         1,
115                         randIntExclusive(0.28 * mapSize, 0.34 * mapSize),
116                         randIntExclusive(0.1 * mapSize, 0.9 * mapSize)),
117                 [
118                         new LayeredPainter([tGrass, tGrass], [2]),
119                         new SmoothElevationPainter(ELEVATION_SET, 3, 3),
120                         unPaintClass(clWater)
121                 ],
122                 null);
124 paintTerrainBasedOnHeight(-6, 1, 1, tWater);
125 paintTerrainBasedOnHeight(1, 2.8, 1, tShoreBlend);
126 paintTerrainBasedOnHeight(0, 1, 1, tShore);
127 paintTileClassBasedOnHeight(-6, 0.5, 1, clWater);
129 Engine.SetProgress(45);
131 log("Creating hills...");
132 createAreas(
133         new ChainPlacer(1, Math.floor(scaleByMapSize(4, 6)), Math.floor(scaleByMapSize(16, 40)), 0.1),
134         [
135                 new LayeredPainter([tCliff, tGrass], [3]),
136                 new SmoothElevationPainter(ELEVATION_SET, 25, 3),
137                 paintClass(clHill)
138         ],
139         [avoidClasses(clPlayer, 20, clHill, 5, clWater, 2, clBaseResource, 2), stayClasses(clMountains, 0)],
140         scaleByMapSize(5, 40) * numPlayers);
142 log("Creating forests...");
143 var [forestTrees, stragglerTrees] = getTreeCounts(1000, 6000, 0.7);
144 var types = [
145         [[tGrass, tGrass, tGrass, tGrass, pForestD], [tGrass, tGrass, tGrass, pForestD]],
146         [[tGrass, tGrass, tGrass, tGrass, pForestP], [tGrass, tGrass, tGrass, pForestP]]
148 var size = forestTrees / (scaleByMapSize(3,6) * numPlayers);
149 var num = Math.floor(size / types.length);
150 for (let type of types)
151         createAreas(
152                 new ChainPlacer(
153                         1,
154                         Math.floor(scaleByMapSize(3, 5)),
155                         forestTrees / (num * Math.floor(scaleByMapSize(2, 4))),
156                         0.5),
157                 [
158                         new LayeredPainter(type, [2]),
159                         paintClass(clForest)
160                 ],
161                 avoidClasses(clPlayer, 20, clForest, 10, clHill, 0, clWater, 8),
162                 num);
164 Engine.SetProgress(70);
166 log("Creating grass patches...");
167 for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)])
168         createAreas(
169                 new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), size, 0.5),
170                 [
171                         new LayeredPainter([tGrassC, tGrassA, tGrassB], [2, 1]),
172                         paintClass(clDirt)
173                 ],
174                 avoidClasses(clWater, 8, clForest, 0, clHill, 0, clPlayer, 12, clDirt, 16),
175                 scaleByMapSize(20, 80));
177 for (let size of [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)])
178         createAreas(
179                 new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), size, 0.5),
180                 [
181                         new LayeredPainter([tPlants, tPlants], [1]),
182                         paintClass(clDirt)
183                 ],
184                 avoidClasses(clWater, 8, clForest, 0, clHill, 0, clPlayer, 12, clDirt, 16),
185                 scaleByMapSize(20, 80));
187 log("Creating stone mines...");
188 var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
189 createObjectGroupsDeprecated(group, 0,
190         avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
191         scaleByMapSize(4,16), 100
194 log("Creating small stone quarries...");
195 group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
196 createObjectGroupsDeprecated(group, 0,
197         avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
198         scaleByMapSize(4,16), 100
201 log("Creating metal mines...");
202 group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
203 createObjectGroupsDeprecated(group, 0,
204         avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clHill, 1),
205         scaleByMapSize(4,16), 100
208 log("Creating small decorative rocks...");
209 group = new SimpleGroup(
210         [new SimpleObject(aRockMedium, 1,3, 0,1)],
211         true
213 createObjectGroupsDeprecated(
214         group, 0,
215         avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0),
216         3*scaleByMapSize(16, 262), 50
219 log("Creating large decorative rocks...");
220 group = new SimpleGroup(
221         [new SimpleObject(aRockLarge, 1,2, 0,1), new SimpleObject(aRockMedium, 1,3, 0,2)],
222         true
224 createObjectGroupsDeprecated(
225         group, 0,
226         avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0),
227         3*scaleByMapSize(8, 131), 50
230 log("Creating small grass tufts...");
231 group = new SimpleGroup(
232         [new SimpleObject(aBush1, 1,2, 0,1, -Math.PI / 8, Math.PI / 8)]
234 createObjectGroupsDeprecated(group, 0,
235         avoidClasses(clWater, 2, clHill, 2, clPlayer, 2, clDirt, 0),
236         8 * scaleByMapSize(13, 200)
239 Engine.SetProgress(90);
241 log("Creating large grass tufts...");
242 group = new SimpleGroup(
243         [new SimpleObject(aBush2, 2,4, 0,1.8, -Math.PI / 8, Math.PI / 8), new SimpleObject(aBush1, 3,6, 1.2,2.5, -Math.PI / 8, Math.PI / 8)]
245 createObjectGroupsDeprecated(group, 0,
246         avoidClasses(clWater, 3, clHill, 2, clPlayer, 2, clDirt, 1, clForest, 0),
247         8 * scaleByMapSize(13, 200)
250 Engine.SetProgress(95);
252 log("Creating bushes...");
253 group = new SimpleGroup(
254         [new SimpleObject(aBush3, 1,2, 0,2), new SimpleObject(aBush2, 2,4, 0,2)]
256 createObjectGroupsDeprecated(group, 0,
257         avoidClasses(clWater, 1, clHill, 1, clPlayer, 1, clDirt, 1),
258         8 * scaleByMapSize(13, 200), 50
261 Engine.SetProgress(95);
263 createStragglerTrees(
264         [oTree, oPalm],
265         avoidClasses(clWater, 5, clForest, 1, clHill, 1, clPlayer, 12, clMetal, 6, clRock, 6),
266         clForest,
267         stragglerTrees);
269 log("Creating deer...");
270 group = new SimpleGroup(
271         [new SimpleObject(oDeer, 5,7, 0,4)],
272         true, clFood
274 createObjectGroupsDeprecated(group, 0,
275         avoidClasses(clWater, 3, clForest, 0, clPlayer, 10, clHill, 1, clFood, 20),
276         3 * numPlayers, 50
279 Engine.SetProgress(75);
281 log("Creating berry bush...");
282 group = new SimpleGroup(
283         [new SimpleObject(oBush, 5,7, 0,4)],
284         true, clFood
286 createObjectGroupsDeprecated(group, 0,
287         avoidClasses(clWater, 6, clForest, 0, clPlayer, 20, clHill, 1, clFood, 10),
288         randIntInclusive(1, 4) * numPlayers + 2, 50
291 log("Creating sheep...");
292 group = new SimpleGroup(
293         [new SimpleObject(oSheep, 2,3, 0,2)],
294         true, clFood
296 createObjectGroupsDeprecated(group, 0,
297         avoidClasses(clWater, 3, clForest, 0, clPlayer, 22, clHill, 1, clFood, 20),
298         3 * numPlayers, 50
301 log("Creating fish...");
302 group = new SimpleGroup(
303         [new SimpleObject(oFish, 2,3, 0,2)],
304         true, clFood
306 createObjectGroupsDeprecated(group, 0,
307         [avoidClasses(clFood, 20), stayClasses(clWater, 6)],
308         25 * numPlayers, 60
311 placePlayersNomad(clPlayer, avoidClasses(clWater, 4, clHill, 2, clForest, 1, clMetal, 4, clRock, 4, clFood, 2));
313 setSunColor(0.6, 0.6, 0.6);
314 setSunElevation(Math.PI / 3);
316 setWaterColor(0.524,0.734,0.839);
317 setWaterTint(0.369,0.765,0.745);
318 setWaterWaviness(1.0);
319 setWaterType("ocean");
320 setWaterMurkiness(0.35);
322 setFogFactor(0.4);
323 setFogThickness(0.2);
325 setPPEffect("hdr");
326 setPPContrast(0.7);
327 setPPSaturation(0.65);
328 setPPBloom(0.6);
330 setSkySet("cirrus");
331 ExportMap();