Nomad mode on all random map scripts (except Survival of the Fittest), fixes #3591.
[0ad.git] / binaries / data / mods / public / maps / random / guadalquivir_river.js
blob29c94d0b69f7a476a0786443c44eb9801d519b84
1 Engine.LoadLibrary("rmgen");
3 const tGrass = ["medit_grass_field_a", "medit_grass_field_b"];
4 const tForestFloorC = "medit_plants_dirt";
5 const tForestFloorP = "medit_grass_shrubs";
6 const tGrassA = "medit_grass_field_b";
7 const tGrassB = "medit_grass_field_brown";
8 const tGrassC = "medit_grass_field_dry";
9 const tRoad = "medit_city_tile";
10 const tRoadWild = "medit_city_tile";
11 const tGrassPatch = "medit_grass_shrubs";
12 const tShore = "sand_grass_25";
13 const tWater = "medit_sand_wet";
15 const oPoplar = "gaia/flora_tree_poplar";
16 const oApple = "gaia/flora_tree_apple";
17 const oCarob = "gaia/flora_tree_carob";
18 const oBerryBush = "gaia/flora_bush_berry";
19 const oDeer = "gaia/fauna_deer";
20 const oFish = "gaia/fauna_fish";
21 const oSheep = "gaia/fauna_sheep";
22 const oStoneLarge = "gaia/geology_stonemine_medit_quarry";
23 const oStoneSmall = "gaia/geology_stone_mediterranean";
24 const oMetalLarge = "gaia/geology_metal_mediterranean_slabs";
26 const aGrass = "actor|props/flora/grass_soft_large_tall.xml";
27 const aGrassShort = "actor|props/flora/grass_soft_large.xml";
28 const aReeds = "actor|props/flora/reeds_pond_lush_a.xml";
29 const aLillies = "actor|props/flora/water_lillies.xml";
30 const aRockLarge = "actor|geology/stone_granite_large.xml";
31 const aRockMedium = "actor|geology/stone_granite_med.xml";
32 const aBushMedium = "actor|props/flora/bush_medit_me.xml";
33 const aBushSmall = "actor|props/flora/bush_medit_sm.xml";
35 const pForestP = [tForestFloorP + TERRAIN_SEPARATOR + oPoplar, tForestFloorP];
36 const pForestC = [tForestFloorC + TERRAIN_SEPARATOR + oCarob, tForestFloorC];
38 InitMap();
40 const numPlayers = getNumPlayers();
41 const mapSize = getMapSize();
43 var clPlayer = createTileClass();
44 var clForest = createTileClass();
45 var clDirt = createTileClass();
46 var clRock = createTileClass();
47 var clMetal = createTileClass();
48 var clFood = createTileClass();
49 var clBaseResource = createTileClass();
50 var clLand = createTileClass();
51 var clRiver = createTileClass();
52 var clShallow = createTileClass();
54 var landHeight = 3;
55 var shoreHeight = 2;
56 var shallowHeight = -1.5;
57 var waterHeight = -3;
59 log("Create the continent body");
60 var continentCenter = new Vector2D(0.5, 0.7);
61 createArea(
62         new ChainPlacer(
63                 2,
64                 Math.floor(scaleByMapSize(5, 12)),
65                 Math.floor(scaleByMapSize(60, 700)),
66                 1,
67                 Math.floor(fractionToTiles(continentCenter.x)),
68                 Math.floor(fractionToTiles(continentCenter.y)),
69                 0,
70                 [Math.floor(mapSize * 0.49)]),
71         [
72                 new LayeredPainter([tGrass, tGrass, tGrass], [4, 2]),
73                 new SmoothElevationPainter(ELEVATION_SET, landHeight, 4),
74                 paintClass(clLand)
75         ],
76         null);
78 placePlayerBases({
79         "PlayerPlacement": [primeSortAllPlayers(), ...playerPlacementCustomAngle(
80                         0.35,
81                         continentCenter.x,
82                         continentCenter.y,
83                         i => Math.PI * (-0.46 / numPlayers * (i + i % 2) - (i % 2) / 2))],
84         "PlayerTileClass": clPlayer,
85         "BaseResourceClass": clBaseResource,
86         "Walls": false,
87         "CityPatch": {
88                 "outerTerrain": tRoadWild,
89                 "innerTerrain": tRoad
90         },
91         "Chicken": {
92         },
93         "Berries": {
94                 "template": oBerryBush
95         },
96         "Mines": {
97                 "types": [
98                         { "template": oMetalLarge },
99                         { "template": oStoneLarge }
100                 ]
101         },
102         "Trees": {
103                 "template": oPoplar,
104                 "count": 2
105         },
106         "Decoratives": {
107                 "template": aGrassShort
108         }
110 Engine.SetProgress(20);
112 paintRiver({
113         "parallel": true,
114         "constraint": stayClasses(clLand, 0),
115         "startX": 0.5,
116         "startZ": 0,
117         "endX": 0.5,
118         "endZ": 1,
119         "width": 0.07,
120         "fadeDist": 0.025,
121         "deviation": 0.0025,
122         "waterHeight": waterHeight,
123         "landHeight": shoreHeight,
124         "meanderShort": 12,
125         "meanderLong": 0,
126         "waterFunc": (ix, iz, height, z) => {
127                 addToClass(ix, iz, clRiver);
128                 placeTerrain(ix, iz, tWater);
130                 if (height < shallowHeight && (
131                                 z > 0.3 && z < 0.4 ||
132                                 z > 0.5 && z < 0.6 ||
133                                 z > 0.7 && z < 0.8))
134                 {
135                         setHeight(ix, iz, shallowHeight);
136                         addToClass(ix, iz, clShallow);
137                 }
138         }
141 paintTerrainBasedOnHeight(1, 3, 0, tShore);
142 paintTerrainBasedOnHeight(-8, 1, 2, tWater);
144 createBumps([avoidClasses(clPlayer, 20, clRiver, 1), stayClasses(clLand, 3)]);
146 var [forestTrees, stragglerTrees] = getTreeCounts(500, 3000, 0.7);
147 createForests(
148  [tGrass, tForestFloorP, tForestFloorC, pForestC, pForestP],
149  [avoidClasses(clPlayer, 20, clForest, 17, clRiver, 1), stayClasses(clLand, 7)],
150  clForest,
151  forestTrees);
153 Engine.SetProgress(50);
155 log("Creating dirt patches...");
156 createLayeredPatches(
157  [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
158  [[tGrass,tGrassA],[tGrassA,tGrassB], [tGrassB,tGrassC]],
159  [1,1],
160  [avoidClasses(clForest, 0, clDirt, 3, clPlayer, 8, clRiver, 1), stayClasses(clLand, 7)],
161  scaleByMapSize(15, 45),
162  clDirt);
164 log("Creating grass patches...");
165 createPatches(
166  [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
167  tGrassPatch,
168  [avoidClasses(clForest, 0, clDirt, 3, clPlayer, 8, clRiver, 1), stayClasses(clLand, 7)],
169  scaleByMapSize(15, 45),
170  clDirt);
171 Engine.SetProgress(55);
173 log("Creating stone mines...");
174 createMines(
176   [new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
177   [new SimpleObject(oStoneSmall, 2,5, 1,3)]
178  ],
179  [avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clRiver, 1), stayClasses(clLand, 5)],
180  clRock);
182 log("Creating metal mines...");
183 createMines(
185   [new SimpleObject(oMetalLarge, 1,1, 0,4)]
186  ],
187  [avoidClasses(clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clRiver, 1), stayClasses(clLand, 5)],
188  clMetal
190 Engine.SetProgress(65);
192 createDecoration(
193         [
194                 [new SimpleObject(aRockMedium, 1, 3, 0, 1)],
195                 [new SimpleObject(aRockLarge, 1, 2, 0, 1), new SimpleObject(aRockMedium, 1, 3, 0, 2)],
196                 [new SimpleObject(aGrassShort, 1, 2, 0, 1)],
197                 [new SimpleObject(aGrass, 2, 4, 0, 1.8), new SimpleObject(aGrassShort, 3, 6, 1.2, 2.5)],
198                 [new SimpleObject(aBushMedium, 1, 2, 0, 2), new SimpleObject(aBushSmall, 2, 4, 0, 2)]
199         ],
200         [
201                 scaleByMapSize(16, 262),
202                 scaleByMapSize(8, 131),
203                 scaleByMapSize(13, 200),
204                 scaleByMapSize(13, 200),
205                 scaleByMapSize(13, 200)
206         ],
207         [avoidClasses(clPlayer, 1, clDirt, 1, clRiver, 1), stayClasses(clLand, 6)]);
209 log("Create water decoration in the shallow parts");
210 createDecoration(
211         [
212                 [new SimpleObject(aReeds, 1, 3, 0, 1)],
213                 [new SimpleObject(aLillies, 1, 2, 0, 1)]
214         ],
215         [
216                 scaleByMapSize(800, 12800),
217                 scaleByMapSize(800, 12800)
218         ],
219         stayClasses(clShallow, 0));
221 Engine.SetProgress(70);
223 createFood(
224         [
225                 [new SimpleObject(oDeer, 5, 7, 0, 4)],
226                 [new SimpleObject(oSheep, 2, 3, 0, 2)]
227         ],
228         [
229                 3 * numPlayers,
230                 3 * numPlayers
231         ],
232         [avoidClasses(clForest, 0, clPlayer, 20, clFood, 20, clRiver, 1), stayClasses(clLand, 3)],
233         clFood);
235 createFood(
236         [
237                 [new SimpleObject(oBerryBush, 5, 7, 0, 4)]
238         ],
239         [
240                 randIntInclusive(1, 4) * numPlayers + 2
241         ],
242         [avoidClasses(clForest, 0, clPlayer, 20, clFood, 10, clRiver, 1), stayClasses(clLand, 3)],
243         clFood);
245 createFood(
246         [
247                 [new SimpleObject(oFish, 2, 3, 0, 2)]
248         ],
249         [
250                 25 * numPlayers
251         ],
252         avoidClasses(clLand, 2, clRiver, 1),
253         clFood);
255 Engine.SetProgress(85);
257 createStragglerTrees(
258         [oPoplar, oCarob, oApple],
259         [avoidClasses(clForest, 1, clPlayer, 9, clMetal, 6, clRock, 6, clRiver, 1), stayClasses(clLand, 7)],
260         clForest,
261         stragglerTrees);
263 placePlayersNomad(
264         clPlayer,
265         new AndConstraint([
266                 stayClasses(clLand, 4),
267                 avoidClasses(clForest, 1, clMetal, 4, clRock, 4, clFood, 2)]));
269 setSkySet("cumulus");
270 setWaterColor(0.2,0.312,0.522);
271 setWaterTint(0.1,0.1,0.8);
272 setWaterWaviness(4.0);
273 setWaterType("lake");
274 setWaterMurkiness(0.73);
276 setFogFactor(0.3);
277 setFogThickness(0.25);
279 setPPEffect("hdr");
280 setPPContrast(0.62);
281 setPPSaturation(0.51);
282 setPPBloom(0.12);
284 ExportMap();