Fix the two incorrect replacements in rP21434, refs #4950.
[0ad.git] / binaries / data / mods / public / maps / random / persian_highlands.js
blob1a29fd8b141811164e95d7283a904c2b4603491e
1 Engine.LoadLibrary("rmgen");
2 Engine.LoadLibrary("rmgen-common");
3 Engine.LoadLibrary("rmbiome");
5 if (g_MapSettings.Biome)
6         setSelectedBiome();
7 else
8         // TODO: Replace ugly default for atlas by a dropdown
9         setBiome("persian_highlands/summer");
11 const tDirtMain = g_Terrains.mainTerrain;
12 const tCity = g_Terrains.road;
13 const tCliff = g_Terrains.cliff;
14 const tLakebed1 = g_Terrains.lakebed1;
15 const tLakebed2 = g_Terrains.lakebed2;
16 const tForestFloor = g_Terrains.forestFloor1;
17 const tRocky = g_Terrains.tier1Terrain;
18 const tRocks = g_Terrains.tier2Terrain;
19 const tGrass = g_Terrains.tier3Terrain;
21 const oOak = g_Gaia.tree1;
22 const oGrapesBush = g_Gaia.fruitBush;
23 const oCamel = g_Gaia.mainHuntableAnimal;
24 const oSheep = g_Gaia.secondaryHuntableAnimal;
25 const oGoat = g_Gaia.thirdHuntableAnimal;
26 const oStoneLarge = g_Gaia.stoneLarge;
27 const oStoneSmall = g_Gaia.stoneSmall;
28 const oMetalLarge = g_Gaia.metalLarge;
30 const aDecorativeRock = g_Decoratives.rockMedium;
31 const aBush1 = g_Decoratives.bush1;
32 const aBush2 = g_Decoratives.bush2;
33 const aBush3 = g_Decoratives.bush3;
34 const aBush4 = g_Decoratives.bush4;
35 const aBushes = [aBush1, aBush2, aBush3, aBush4];
37 const pForestO = [tForestFloor + TERRAIN_SEPARATOR + oOak, tForestFloor + TERRAIN_SEPARATOR + oOak, tForestFloor, tDirtMain, tDirtMain];
39 const heightLand = 10;
40 const heightOffsetValley = -10;
42 var g_Map = new RandomMap(heightLand, tDirtMain);
44 const numPlayers = getNumPlayers();
45 const mapSize = g_Map.getSize();
46 const mapCenter = g_Map.getCenter();
48 var clPlayer = g_Map.createTileClass();
49 var clHill = g_Map.createTileClass();
50 var clForest = g_Map.createTileClass();
51 var clPatch = g_Map.createTileClass();
52 var clRock = g_Map.createTileClass();
53 var clMetal = g_Map.createTileClass();
54 var clFood = g_Map.createTileClass();
55 var clBaseResource = g_Map.createTileClass();
56 var clCP = g_Map.createTileClass();
58 placePlayerBases({
59         "PlayerPlacement": playerPlacementCircle(fractionToTiles(0.35)),
60         "BaseResourceClass": clBaseResource,
61         "CityPatch": {
62                 "outerTerrain": tCity,
63                 "innerTerrain": tCity,
64                 "painters": [
65                         new TileClassPainter(clPlayer)
66                 ]
67         },
68         "Chicken": {
69         },
70         "Berries": {
71                 "template": oGrapesBush,
72         },
73         "Mines": {
74                 "types": [
75                         { "template": oMetalLarge },
76                         { "template": oStoneLarge }
77                 ],
78                 "groupElements": shuffleArray(aBushes).map(t => new SimpleObject(t, 1, 1, 3, 4))
79         },
80         "Trees": {
81                 "template": oOak,
82                 "count": 3
83         }
84         // No decoratives
85 });
86 Engine.SetProgress(10);
88 g_Map.log("Creating rock patches");
89 createAreas(
90         new ChainPlacer(1, Math.floor(scaleByMapSize(3, 6)), Math.floor(scaleByMapSize(20, 45)), 0),
91         [
92                 new TerrainPainter(tRocky),
93                 new TileClassPainter(clPatch)
94         ],
95         avoidClasses(clPatch, 2, clPlayer, 0),
96         scaleByMapSize(5, 20));
97 Engine.SetProgress(15);
99 g_Map.log("Creating secondary rock patches");
100 createAreas(
101         new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), Math.floor(scaleByMapSize(15, 40)), 0),
102         [
103                 new TerrainPainter([tRocky, tRocks]),
104                 new TileClassPainter(clPatch)
105         ],
106         avoidClasses(clPatch, 2, clPlayer, 4),
107         scaleByMapSize(15, 50));
108 Engine.SetProgress(20);
110 g_Map.log("Creating dirt patches");
111 createAreas(
112         new ChainPlacer(
113                 1,
114                 Math.floor(scaleByMapSize(3, 5)),
115                 Math.floor(scaleByMapSize(15, 40)),
116                 0),
117         [
118                 new TerrainPainter([tGrass]),
119                 new TileClassPainter(clPatch)
120         ],
121         avoidClasses(clPatch, 2, clPlayer, 4),
122         scaleByMapSize(15, 50));
123 Engine.SetProgress(25);
125 g_Map.log("Creating centeral plateau");
126 createArea(
127         new ChainPlacer(
128                 2,
129                 Math.floor(scaleByMapSize(5, 13)),
130                 Math.floor(scaleByMapSize(35, 200)),
131                 Infinity,
132                 mapCenter,
133                 0,
134                 [Math.floor(scaleByMapSize(18, 68))]),
135         [
136                 new LayeredPainter([tLakebed2, tLakebed1], [6]),
137                 new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetValley, 8),
138                 new TileClassPainter(clCP)
139         ],
140         avoidClasses(clPlayer, 18));
141 Engine.SetProgress(30);
143 g_Map.log("Creating hills");
144 for (let i = 0; i < scaleByMapSize(20, 80); ++i)
145         createMountain(
146                 Math.floor(scaleByMapSize(40, 60)),
147                 Math.floor(scaleByMapSize(3, 4)),
148                 Math.floor(scaleByMapSize(6, 12)),
149                 Math.floor(scaleByMapSize(4, 10)),
150                 avoidClasses(clPlayer, 7, clCP, 5, clHill, Math.floor(scaleByMapSize(18, 25))),
151                 randIntExclusive(0, mapSize),
152                 randIntExclusive(0, mapSize),
153                 tCliff,
154                 clHill,
155                 14);
156 Engine.SetProgress(35);
158 g_Map.log("Creating forests");
159 var [forestTrees, stragglerTrees] = getTreeCounts(500, 2500, 0.7);
160 var types = [
161         [[tDirtMain, tForestFloor, pForestO], [tForestFloor, pForestO]],
162         [[tDirtMain, tForestFloor, pForestO], [tForestFloor, pForestO]]
164 var size = forestTrees / (scaleByMapSize(3,6) * numPlayers);
165 var num = Math.floor(size / types.length);
166 for (let type of types)
167         createAreas(
168                 new ChainPlacer(
169                         Math.floor(scaleByMapSize(1, 2)),
170                         Math.floor(scaleByMapSize(2, 5)),
171                         Math.floor(size / Math.floor(scaleByMapSize(8, 3))),
172                         Infinity),
173                 [
174                         new LayeredPainter(type, [2]),
175                         new TileClassPainter(clForest)
176                 ],
177                 avoidClasses(
178                         clPlayer, 6,
179                         clForest, 10,
180                         clHill, 1,
181                         clCP, 1),
182                 num);
183 Engine.SetProgress(50);
185 g_Map.log("Creating stone mines");
186 createObjectGroupsDeprecated(
187         new SimpleGroup(
188                 [
189                         new SimpleObject(oStoneSmall, 0, 2, 0, 4, 0, 2 * Math.PI, 1),
190                         new SimpleObject(oStoneLarge, 1, 1, 0, 4, 0, 2 * Math.PI, 4),
191                         new RandomObject(aBushes, 2, 4, 0, 2)
192                 ],
193                 true,
194                 clRock),
195         0,
196         [avoidClasses(clForest, 1, clPlayer, 10, clRock, 10, clHill, 1, clCP, 1)],
197         scaleByMapSize(2,8),
198         100);
200 g_Map.log("Creating small stone quarries");
201 createObjectGroupsDeprecated(
202         new SimpleGroup([new SimpleObject(oStoneSmall, 2, 5, 1, 3), new RandomObject(aBushes, 2, 4, 0, 2)], true, clRock),
203         0,
204         [avoidClasses(clForest, 1, clPlayer, 10, clRock, 10, clHill, 1, clCP, 1)],
205         scaleByMapSize(2, 8),
206         100);
208 g_Map.log("Creating metal mines");
209 createObjectGroupsDeprecated(
210         new SimpleGroup([new SimpleObject(oMetalLarge, 1, 1, 0, 4), new RandomObject(aBushes, 2, 4, 0, 2)], true, clMetal),
211         0,
212         [avoidClasses(clForest, 1, clPlayer, 10, clMetal, 10, clRock, 5, clHill, 1, clCP, 1)],
213         scaleByMapSize(2,8),
214         100);
216 g_Map.log("Creating centeral stone mines");
217 createObjectGroupsDeprecated(
218         new SimpleGroup(
219                 [
220                         new SimpleObject(oStoneSmall, 0, 2, 0, 4, 0, 2 * Math.PI, 1),
221                         new SimpleObject(oStoneLarge, 1, 1, 0, 4, 0, 2 * Math.PI, 4),
222                         new RandomObject(aBushes, 2,4, 0,2)
223                 ],
224                 true,
225                 clRock),
226         0,
227         stayClasses(clCP, 6),
228         5*scaleByMapSize(5, 30),
229         50);
231 g_Map.log("Creating small stone quarries");
232 var group = new SimpleGroup([new SimpleObject(oStoneSmall, 2, 5, 1, 3), new RandomObject(aBushes, 2, 4, 0, 2)], true, clRock);
233 createObjectGroupsDeprecated(group, 0,
234         stayClasses(clCP, 6),
235         5*scaleByMapSize(5,30), 50
238 g_Map.log("Creating centeral metal mines");
239 group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4), new RandomObject(aBushes, 2,4, 0,2)], true, clMetal);
240 createObjectGroupsDeprecated(group, 0,
241         stayClasses(clCP, 6),
242         5*scaleByMapSize(5,30), 50
245 Engine.SetProgress(60);
247 g_Map.log("Creating small decorative rocks");
248 group = new SimpleGroup(
249         [new SimpleObject(aDecorativeRock, 1,3, 0,1)],
250         true
252 createObjectGroupsDeprecated(
253         group, 0,
254         avoidClasses(clForest, 0, clPlayer, 0, clHill, 0),
255         scaleByMapSize(16, 262), 50
258 Engine.SetProgress(65);
260 g_Map.log("Creating bushes");
261 group = new SimpleGroup(
262         [new SimpleObject(aBush2, 1,2, 0,1), new SimpleObject(aBush1, 1,3, 0,2)],
263         true
265 createObjectGroupsDeprecated(
266         group, 0,
267         avoidClasses(clForest, 0, clPlayer, 0, clHill, 0),
268         scaleByMapSize(8, 131), 50
271 Engine.SetProgress(70);
273 g_Map.log("Creating goat");
274 group = new SimpleGroup(
275         [new SimpleObject(oGoat, 5,7, 0,4)],
276         true, clFood
278 createObjectGroupsDeprecated(group, 0,
279         avoidClasses(clForest, 0, clPlayer, 1, clHill, 1, clFood, 20, clCP, 2),
280         3 * numPlayers, 50
283 g_Map.log("Creating sheep");
284 group = new SimpleGroup(
285         [new SimpleObject(oSheep, 2,3, 0,2)],
286         true, clFood
288 createObjectGroupsDeprecated(group, 0,
289         avoidClasses(clForest, 0, clPlayer, 1, clHill, 1, clFood, 20, clCP, 2),
290         3 * numPlayers, 50
293 g_Map.log("Creating grape bush");
294 group = new SimpleGroup(
295         [new SimpleObject(oGrapesBush, 5,7, 0,4)],
296         true, clFood
298 createObjectGroupsDeprecated(group, 0,
299         avoidClasses(clForest, 0, clPlayer, 20, clHill, 1, clFood, 10, clCP, 2),
300         randIntInclusive(1, 4) * numPlayers + 2, 50
303 g_Map.log("Creating camels");
304 group = new SimpleGroup(
305         [new SimpleObject(oCamel, 2,3, 0,2)],
306         true, clFood
308 createObjectGroupsDeprecated(group, 0,
309         stayClasses(clCP, 2),
310         3 * numPlayers, 50
313 Engine.SetProgress(90);
315 createStragglerTrees(
316         [oOak],
317         avoidClasses(clForest, 1, clHill, 1, clPlayer, 1, clBaseResource, 6, clMetal, 6, clRock, 6, clCP, 2),
318         clForest,
319         stragglerTrees);
321 placePlayersNomad(clPlayer, avoidClasses(clForest, 1, clMetal, 4, clRock, 4, clHill, 4, clFood, 2));
323 g_Map.ExportMap();