Nomad mode on all random map scripts (except Survival of the Fittest), fixes #3591.
[0ad.git] / binaries / data / mods / public / maps / random / saharan_oases.js
blob6041df8be0090cc06fc721048a8f2830e4bc4c3c
1 Engine.LoadLibrary("rmgen");
3 const tCity = "desert_city_tile";
4 const tCityPlaza = "desert_city_tile_plaza";
5 const tFineSand = "desert_sand_smooth";
6 const tDirt1 = "desert_dirt_rough_2";
7 const tSandDunes = "desert_sand_dunes_50";
8 const tDirt2 = "desert_dirt_rough";
9 const tDirtCracks = "desert_dirt_cracks";
10 const tShore = "desert_shore_stones";
11 const tWaterDeep = "desert_shore_stones_wet";
12 const tLush = "desert_grass_a";
13 const tSLush = "desert_grass_a_sand";
15 const oGrapeBush = "gaia/flora_bush_grapes";
16 const oCamel = "gaia/fauna_camel";
17 const oGazelle = "gaia/fauna_gazelle";
18 const oGoat = "gaia/fauna_goat";
19 const oStoneLarge = "gaia/geology_stonemine_desert_badlands_quarry";
20 const oStoneSmall = "gaia/geology_stone_desert_small";
21 const oMetalLarge = "gaia/geology_metal_desert_slabs";
22 const oDatePalm = "gaia/flora_tree_date_palm";
23 const oSDatePalm = "gaia/flora_tree_cretan_date_palm_short";
24 const oWoodTreasure = "gaia/special_treasure_wood";
25 const oFoodTreasure = "gaia/special_treasure_food_bin";
27 const aBush1 = "actor|props/flora/bush_desert_a.xml";
28 const aBush2 = "actor|props/flora/bush_desert_dry_a.xml";
29 const aBush3 = "actor|props/flora/bush_medit_sm_dry.xml";
30 const aBush4 = "actor|props/flora/plant_desert_a.xml";
31 const aDecorativeRock = "actor|geology/stone_desert_med.xml";
33 const pForest = [tLush + TERRAIN_SEPARATOR + oDatePalm, tLush + TERRAIN_SEPARATOR + oSDatePalm, tLush];
35 InitMap();
37 const numPlayers = getNumPlayers();
38 const mapSize = getMapSize();
40 var clPlayer = createTileClass();
41 var clForest = createTileClass();
42 var clWater = createTileClass();
43 var clDirt = createTileClass();
44 var clRock = createTileClass();
45 var clMetal = createTileClass();
46 var clFood = createTileClass();
47 var clBaseResource = createTileClass();
48 var clTreasure = createTileClass();
50 var [playerIDs, playerX, playerZ, playerAngle] = playerPlacementCircle(0.35);
52 placePlayerBases({
53         "PlayerPlacement": [playerIDs, playerX, playerZ],
54         "PlayerTileClass": clPlayer,
55         "BaseResourceClass": clBaseResource,
56         "CityPatch": {
57                 "outerTerrain": tCityPlaza,
58                 "innerTerrain": tCity
59         },
60         "Chicken": {
61         },
62         "Berries": {
63                 "template": oGrapeBush
64         },
65         "Mines": {
66                 "types": [
67                         { "template": oMetalLarge },
68                         { "template": oStoneLarge }
69                 ]
70         },
71         "Trees": {
72                 "template": oSDatePalm
73         },
74         "Decoratives": {
75                 "template": aBush1
76         }
77 });
78 Engine.SetProgress(30);
80 log("Creating oases...");
81 for (let i = 0; i < numPlayers; ++i)
82         createArea(
83                 new ClumpPlacer(diskArea(scaleByMapSize(16, 60)) * 0.185,
84                         0.6,
85                         0.15,
86                         0,
87                         mapSize * (0.5 + 0.18 * Math.cos(playerAngle[i]) + scaleByMapSize(1, 4) * Math.cos(playerAngle[i]) / 100),
88                         mapSize * (0.5 + 0.18 * Math.sin(playerAngle[i]) + scaleByMapSize(1, 4) * Math.sin(playerAngle[i]) / 100)),
89                 [
90                         new LayeredPainter(
91                                 [tSLush ,[tLush, pForest], [tLush, pForest], tShore, tShore, tWaterDeep],
92                                 [2, 2, 1, 3, 1]),
93                         new SmoothElevationPainter(ELEVATION_MODIFY, -3, 10),
94                         paintClass(clWater)
95                 ],
96                 null);
97 Engine.SetProgress(50);
99 log("Creating grass patches...");
100 for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)])
101         createAreas(
102                 new ClumpPlacer(size, 0.3, 0.06, 0.5),
103                 [
104                         new LayeredPainter(
105                                 [[tDirt1, tSandDunes], [tSandDunes, tDirt2], [tDirt2, tDirt1]],
106                                 [1, 1]
107                         ),
108                         paintClass(clDirt)
109                 ],
110                 avoidClasses(clForest, 0, clPlayer, 0, clWater, 1, clDirt, 5),
111                 scaleByMapSize(15, 45));
112 Engine.SetProgress(55);
114 log("Creating dirt patches...");
115 for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)])
116         createAreas(
117                 new ClumpPlacer(size, 0.3, 0.06, 0.5),
118                 [
119                         new LayeredPainter(
120                                 [[tDirt2, tDirtCracks], [tDirt2, tFineSand], [tDirtCracks, tFineSand]],
121                                 [1, 1]
122                         ),
123                         paintClass(clDirt)
124                 ],
125                 avoidClasses(clForest, 0, clDirt, 5, clPlayer, 0, clWater, 1),
126                 scaleByMapSize(15, 45));
127 Engine.SetProgress(60);
129 log("Creating stone mines...");
130 var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
131 createObjectGroupsDeprecated(group, 0,
132         avoidClasses(clForest, 1, clPlayer, 26, clRock, 10, clWater, 1),
133         2*scaleByMapSize(4,16), 100
136 log("Creating small stone quarries...");
137 group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
138 createObjectGroupsDeprecated(group, 0,
139         avoidClasses(clForest, 1, clPlayer, 26, clRock, 10, clWater, 1),
140         2*scaleByMapSize(4,16), 100
143 log("Creating metal mines...");
144 group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
145 createObjectGroupsDeprecated(group, 0,
146         avoidClasses(clForest, 1, clPlayer, 26, clMetal, 10, clRock, 5, clWater, 1),
147         2*scaleByMapSize(4,16), 100
150 log("Creating small decorative rocks...");
151 group = new SimpleGroup(
152         [new SimpleObject(aDecorativeRock, 1,3, 0,1)],
153         true
155 createObjectGroupsDeprecated(
156         group, 0,
157         avoidClasses(clWater, 1, clForest, 0, clPlayer, 0),
158         scaleByMapSize(16, 262), 50
161 log("Creating shrubs...");
162 group = new SimpleGroup(
163         [new SimpleObject(aBush2, 1,2, 0,1), new SimpleObject(aBush1, 1,3, 0,2), new SimpleObject(aBush4, 1,2, 0,1), new SimpleObject(aBush3, 1,3, 0,2)],
164         true
166 createObjectGroupsDeprecated(
167         group, 0,
168         avoidClasses(clWater, 1, clPlayer, 0),
169         scaleByMapSize(10, 100), 50
172 log("Creating small decorative rocks on mines...");
173 group = new SimpleGroup(
174         [new SimpleObject(aDecorativeRock, 1,3, 0,1)],
175         true
177 createObjectGroupsDeprecated(
178         group, 0,
179         stayClasses(clRock, 0),
180         5*scaleByMapSize(16, 262), 50
183 group = new SimpleGroup(
184         [new SimpleObject(aDecorativeRock, 1,3, 0,1)],
185         true
187 createObjectGroupsDeprecated(
188         group, 0,
189         stayClasses(clMetal, 0),
190         5*scaleByMapSize(16, 262), 50
193 log("Creating gazelles...");
194 group = new SimpleGroup([new SimpleObject(oGazelle, 5,7, 0,4)], true, clFood);
195 createObjectGroupsDeprecated(group, 0,
196         borderClasses(clWater, 8, 5),
197         6*scaleByMapSize(5,20), 50
200 log("Creating goats...");
201 group = new SimpleGroup([new SimpleObject(oGoat, 2,4, 0,3)], true, clFood);
202 createObjectGroupsDeprecated(group, 0,
203         borderClasses(clWater, 8, 5),
204         5*scaleByMapSize(5,20), 50
207 log("Creating treasures...");
208 group = new SimpleGroup([new SimpleObject(oFoodTreasure, 1,1, 0,2)], true, clTreasure);
209 createObjectGroupsDeprecated(group, 0,
210         borderClasses(clWater, 8, 5),
211         3*scaleByMapSize(5,20), 50
214 group = new SimpleGroup([new SimpleObject(oWoodTreasure, 1,1, 0,2)], true, clTreasure);
215 createObjectGroupsDeprecated(group, 0,
216         borderClasses(clWater, 8, 5),
217         3*scaleByMapSize(5,20), 50
220 log("Creating camels...");
221 group = new SimpleGroup([new SimpleObject(oCamel, 2,4, 0,2)], true, clFood);
222 createObjectGroupsDeprecated(group, 0,
223         borderClasses(clWater, 14, 5),
224         5*scaleByMapSize(5,20), 50
227 placePlayersNomad(clPlayer, avoidClasses(clWater, 4, clForest, 1, clMetal, 4, clRock, 4, clFood, 2, clTreasure, 2));
229 setSkySet("sunny");
230 setSunColor(0.746, 0.718, 0.539);
231 setWaterColor(0, 0.227, 0.843);
232 setWaterTint(0, 0.545, 0.859);
233 setWaterWaviness(1.0);
234 setWaterType("clap");
235 setWaterMurkiness(0.5);
237 ExportMap();