Unify Caledonian Meadows and Wild Lake player location duplication from rP19704 ...
[0ad.git] / binaries / data / mods / public / maps / random / saharan_oases.js
blobeb83bb7e7e5b08c53492c355c7a34d757391d9a6
1 RMS.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 oWood = "gaia/special_treasure_wood";
25 const oFood = "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 // terrain + entity (for painting)
34 const pForest = [tLush + TERRAIN_SEPARATOR + oDatePalm, tLush + TERRAIN_SEPARATOR + oSDatePalm, tLush];
36 InitMap();
38 const numPlayers = getNumPlayers();
39 const mapSize = getMapSize();
41 var clPlayer = 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 clGrass = createTileClass();
50 var clPond = createTileClass();
51 var clTreasure = createTileClass();
53 var [playerIDs, playerX, playerZ, playerAngle] = radialPlayerPlacement();
55 for (var i = 0; i < numPlayers; i++)
57         var id = playerIDs[i];
58         log("Creating base for player " + id + "...");
60         var radius = scaleByMapSize(15,25);
61         var cliffRadius = 2;
62         var elevation = 20;
64         // get the x and z in tiles
65         var fx = fractionToTiles(playerX[i]);
66         var fz = fractionToTiles(playerZ[i]);
67         var ix = floor(fx);
68         var iz = floor(fz);
69         addToClass(ix, iz, clPlayer);
71         // create the city patch
72         var cityRadius = radius/3;
73         var placer = new ClumpPlacer(PI*cityRadius*cityRadius, 0.6, 0.3, 10, ix, iz);
74         var painter = new LayeredPainter([tCityPlaza, tCity], [1]);
75         createArea(placer, painter, null);
77         placeCivDefaultEntities(fx, fz, id);
79         placeDefaultChicken(fx, fz, clBaseResource);
81         // create berry bushes
82         var bbAngle = randFloat(0, TWO_PI);
83         var bbDist = 12;
84         var bbX = round(fx + bbDist * cos(bbAngle));
85         var bbZ = round(fz + bbDist * sin(bbAngle));
86         var group = new SimpleGroup(
87                 [new SimpleObject(oGrapeBush, 5,5, 0,3)],
88                 true, clBaseResource, bbX, bbZ
89         );
90         createObjectGroup(group, 0);
92         // create metal mine
93         var mAngle = bbAngle;
94         while(abs(mAngle - bbAngle) < PI/3)
95         {
96                 mAngle = randFloat(0, TWO_PI);
97         }
98         var mDist = radius - 5;
99         var mX = round(fx + mDist * cos(mAngle));
100         var mZ = round(fz + mDist * sin(mAngle));
101         group = new SimpleGroup(
102                 [new SimpleObject(oMetalLarge, 1,1, 0,0)],
103                 true, clBaseResource, mX, mZ
104         );
105         createObjectGroup(group, 0);
107         // create stone mines
108         mAngle += randFloat(PI/8, PI/4);
109         mX = round(fx + mDist * cos(mAngle));
110         mZ = round(fz + mDist * sin(mAngle));
111         group = new SimpleGroup(
112                 [new SimpleObject(oStoneLarge, 1,1, 0,2)],
113                 true, clBaseResource, mX, mZ
114         );
115         createObjectGroup(group, 0);
116         var hillSize = PI * radius * radius;
117         // create starting trees
118         var num = floor(hillSize / 100);
119         var tAngle = randFloat(-PI/3, 4*PI/3);
120         var tDist = 12;
121         var tX = round(fx + tDist * cos(tAngle));
122         var tZ = round(fz + tDist * sin(tAngle));
123         group = new SimpleGroup(
124                 [new SimpleObject(oSDatePalm, num, num, 0,5)],
125                 false, clBaseResource, tX, tZ
126         );
127         createObjectGroup(group, 0, avoidClasses(clBaseResource,2));
129         placeDefaultDecoratives(fx, fz, aBush1, clBaseResource, radius);
132 RMS.SetProgress(30);
134 log("Creating oases...");
135 for (let i = 0; i < numPlayers; ++i)
136         createArea(
137                 new ClumpPlacer(diskArea(scaleByMapSize(16, 60)) * 0.185,
138                         0.6,
139                         0.15,
140                         0,
141                         mapSize * (0.5 + 0.18 * Math.cos(playerAngle[i]) + scaleByMapSize(1, 4) * Math.cos(playerAngle[i]) / 100),
142                         mapSize * (0.5 + 0.18 * Math.sin(playerAngle[i]) + scaleByMapSize(1, 4) * Math.sin(playerAngle[i]) / 100)),
143                 [
144                         new LayeredPainter(
145                                 [tSLush ,[tLush, pForest], [tLush, pForest], tShore, tShore, tWaterDeep],
146                                 [2, 2, 1, 3, 1]),
147                         new SmoothElevationPainter(ELEVATION_MODIFY, -3, 10),
148                         paintClass(clWater)
149                 ],
150                 null);
151 RMS.SetProgress(50);
153 log("Creating grass patches...");
154 for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)])
155         createAreas(
156                 new ClumpPlacer(size, 0.3, 0.06, 0.5),
157                 [
158                         new LayeredPainter(
159                                 [[tDirt1, tSandDunes], [tSandDunes, tDirt2], [tDirt2, tDirt1]],
160                                 [1, 1]
161                         ),
162                         paintClass(clDirt)
163                 ],
164                 avoidClasses(clForest, 0, clGrass, 5, clPlayer, 0, clWater, 1, clDirt, 5),
165                 scaleByMapSize(15, 45));
166 RMS.SetProgress(55);
168 log("Creating dirt patches...");
169 for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)])
170         createAreas(
171                 new ClumpPlacer(size, 0.3, 0.06, 0.5),
172                 [
173                         new LayeredPainter(
174                                 [[tDirt2, tDirtCracks], [tDirt2, tFineSand], [tDirtCracks, tFineSand]],
175                                 [1, 1]
176                         ),
177                         paintClass(clDirt)
178                 ],
179                 avoidClasses(clForest, 0, clDirt, 5, clPlayer, 0, clWater, 1, clGrass, 5),
180                 scaleByMapSize(15, 45));
181 RMS.SetProgress(60);
183 log("Creating stone mines...");
184 var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
185 createObjectGroupsDeprecated(group, 0,
186         avoidClasses(clForest, 1, clPlayer, 26, clRock, 10, clWater, 1),
187         2*scaleByMapSize(4,16), 100
190 log("Creating small stone quarries...");
191 group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
192 createObjectGroupsDeprecated(group, 0,
193         avoidClasses(clForest, 1, clPlayer, 26, clRock, 10, clWater, 1),
194         2*scaleByMapSize(4,16), 100
197 log("Creating metal mines...");
198 group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
199 createObjectGroupsDeprecated(group, 0,
200         avoidClasses(clForest, 1, clPlayer, 26, clMetal, 10, clRock, 5, clWater, 1),
201         2*scaleByMapSize(4,16), 100
204 log("Creating small decorative rocks...");
205 group = new SimpleGroup(
206         [new SimpleObject(aDecorativeRock, 1,3, 0,1)],
207         true
209 createObjectGroupsDeprecated(
210         group, 0,
211         avoidClasses(clWater, 1, clForest, 0, clPlayer, 0, clPond, 1),
212         scaleByMapSize(16, 262), 50
215 log("Creating shrubs...");
216 group = new SimpleGroup(
217         [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)],
218         true
220 createObjectGroupsDeprecated(
221         group, 0,
222         avoidClasses(clWater, 1, clPlayer, 0, clPond, 1),
223         scaleByMapSize(10, 100), 50
226 log("Creating small decorative rocks on mines...");
227 group = new SimpleGroup(
228         [new SimpleObject(aDecorativeRock, 1,3, 0,1)],
229         true
231 createObjectGroupsDeprecated(
232         group, 0,
233         stayClasses(clRock, 0),
234         5*scaleByMapSize(16, 262), 50
237 group = new SimpleGroup(
238         [new SimpleObject(aDecorativeRock, 1,3, 0,1)],
239         true
241 createObjectGroupsDeprecated(
242         group, 0,
243         stayClasses(clMetal, 0),
244         5*scaleByMapSize(16, 262), 50
247 log("Creating gazelles...");
248 group = new SimpleGroup([new SimpleObject(oGazelle, 5,7, 0,4)], true, clFood);
249 createObjectGroupsDeprecated(group, 0,
250         borderClasses(clWater, 8, 5),
251         6*scaleByMapSize(5,20), 50
254 log("Creating goats...");
255 group = new SimpleGroup([new SimpleObject(oGoat, 2,4, 0,3)], true, clFood);
256 createObjectGroupsDeprecated(group, 0,
257         borderClasses(clWater, 8, 5),
258         5*scaleByMapSize(5,20), 50
261 log("Creating treasures...");
262 group = new SimpleGroup([new SimpleObject(oFood, 1,1, 0,2)], true, clTreasure);
263 createObjectGroupsDeprecated(group, 0,
264         borderClasses(clWater, 8, 5),
265         3*scaleByMapSize(5,20), 50
268 group = new SimpleGroup([new SimpleObject(oWood, 1,1, 0,2)], true, clTreasure);
269 createObjectGroupsDeprecated(group, 0,
270         borderClasses(clWater, 8, 5),
271         3*scaleByMapSize(5,20), 50
274 log("Creating camels...");
275 group = new SimpleGroup([new SimpleObject(oCamel, 2,4, 0,2)], true, clFood);
276 createObjectGroupsDeprecated(group, 0,
277         borderClasses(clWater, 14, 5),
278         5*scaleByMapSize(5,20), 50
281 setSkySet("sunny");
282 setSunColor(0.746, 0.718, 0.539);
283 setWaterColor(0, 0.227, 0.843);
284 setWaterTint(0, 0.545, 0.859);
285 setWaterWaviness(1.0);
286 setWaterType("clap");
287 setWaterMurkiness(0.5);
289 ExportMap();