Nomad mode on all random map scripts (except Survival of the Fittest), fixes #3591.
[0ad.git] / binaries / data / mods / public / maps / random / archipelago.js
blob48a5115a0cf83bafa0abc733a078363902f9e04d
1 Engine.LoadLibrary("rmgen");
2 Engine.LoadLibrary("rmbiome");
4 TILE_CENTERED_HEIGHT_MAP = true;
6 setSelectedBiome();
8 const tMainTerrain = g_Terrains.mainTerrain;
9 const tForestFloor1 = g_Terrains.forestFloor1;
10 const tForestFloor2 = g_Terrains.forestFloor2;
11 const tCliff = g_Terrains.cliff;
12 const tTier1Terrain = g_Terrains.tier1Terrain;
13 const tTier2Terrain = g_Terrains.tier2Terrain;
14 const tTier3Terrain = g_Terrains.tier3Terrain;
15 const tHill = g_Terrains.hill;
16 const tTier4Terrain = g_Terrains.dirt;
17 const tRoad = g_Terrains.road;
18 const tRoadWild = g_Terrains.roadWild;
19 const tShore = g_Terrains.shore;
20 const tWater = g_Terrains.water;
22 const oTree1 = g_Gaia.tree1;
23 const oTree2 = g_Gaia.tree2;
24 const oTree3 = g_Gaia.tree3;
25 const oTree4 = g_Gaia.tree4;
26 const oTree5 = g_Gaia.tree5;
27 const oFruitBush = g_Gaia.fruitBush;
28 const oMainHuntableAnimal = g_Gaia.mainHuntableAnimal;
29 const oFish = g_Gaia.fish;
30 const oSecondaryHuntableAnimal = g_Gaia.secondaryHuntableAnimal;
31 const oStoneLarge = g_Gaia.stoneLarge;
32 const oStoneSmall = g_Gaia.stoneSmall;
33 const oMetalLarge = g_Gaia.metalLarge;
34 const oWoodTreasure = "gaia/special_treasure_wood";
36 const aGrass = g_Decoratives.grass;
37 const aGrassShort = g_Decoratives.grassShort;
38 const aRockLarge = g_Decoratives.rockLarge;
39 const aRockMedium = g_Decoratives.rockMedium;
40 const aBushMedium = g_Decoratives.bushMedium;
41 const aBushSmall = g_Decoratives.bushSmall;
43 const pForest1 = [tForestFloor2 + TERRAIN_SEPARATOR + oTree1, tForestFloor2 + TERRAIN_SEPARATOR + oTree2, tForestFloor2];
44 const pForest2 = [tForestFloor1 + TERRAIN_SEPARATOR + oTree4, tForestFloor1 + TERRAIN_SEPARATOR + oTree5, tForestFloor1];
46 InitMap();
48 const numPlayers = getNumPlayers();
50 var clPlayer = createTileClass();
51 var clHill = createTileClass();
52 var clForest = createTileClass();
53 var clDirt = createTileClass();
54 var clRock = createTileClass();
55 var clMetal = createTileClass();
56 var clFood = createTileClass();
57 var clBaseResource = createTileClass();
58 var clLand = createTileClass();
60 var landHeight = 3;
61 var shoreHeight = 1;
63 var islandRadius = scaleByMapSize(22, 31);
65 var [playerIDs, playerX, playerZ] = playerPlacementCircle(0.35);
67 log("Creating player islands...");
68 for (let i = 0; i < numPlayers; ++i)
69         createArea(
70                 new ChainPlacer(
71                         2,
72                         Math.floor(scaleByMapSize(5, 10)),
73                         Math.floor(scaleByMapSize(25, 60)),
74                         1,
75                         Math.floor(fractionToTiles(playerX[i])),
76                         Math.floor(fractionToTiles(playerZ[i])),
77                         0,
78                         [Math.floor(islandRadius)]),
79                 new SmoothElevationPainter(ELEVATION_SET, landHeight, 4));
81 log("Creating random islands...");
82 createAreas(
83         new ChainPlacer(
84                 Math.floor(scaleByMapSize(4, 8)),
85                 Math.floor(scaleByMapSize(8, 14)),
86                 Math.floor(scaleByMapSize(25, 60)),
87                 0.07,
88                 undefined,
89                 undefined,
90                 scaleByMapSize(30, 70)),
91         [
92                 new SmoothElevationPainter(ELEVATION_SET, landHeight, 4),
93                 paintClass(clLand)
94         ],
95         null,
96         scaleByMapSize(1, 5) * randIntInclusive(5, 10));
98 paintTerrainBasedOnHeight(landHeight - 0.6, landHeight + 0.4, 3, tMainTerrain);
99 paintTerrainBasedOnHeight(shoreHeight, landHeight, 0, tShore);
100 paintTerrainBasedOnHeight(getMapBaseHeight(), shoreHeight, 2, tWater);
102 placePlayerBases({
103         "PlayerPlacement": [playerIDs, playerX, playerZ],
104         // PlayerTileClass marked below
105         "BaseResourceClass": clBaseResource,
106         "Walls": "towers",
107         "CityPatch": {
108                 "outerTerrain": tRoadWild,
109                 "innerTerrain": tRoad,
110                 "radius": islandRadius / 3,
111                 "painters": [
112                         paintClass(clPlayer)
113                 ]
114         },
115         "Chicken": {
116         },
117         "Berries": {
118                 "template": oFruitBush
119         },
120         "Mines": {
121                 "types": [
122                         { "template": oMetalLarge },
123                         { "template": oStoneLarge }
124                 ]
125         },
126         "Treasures": {
127                 "types": [
128                         {
129                                 "template": oWoodTreasure,
130                                 "count": 14
131                         }
132                 ]
133         },
134         "Trees": {
135                 "template": oTree1,
136                 "count": scaleByMapSize(15, 30)
137         },
138         "Decoratives": {
139                 "template": aGrassShort,
140         }
143 createBumps([avoidClasses(clPlayer, 10), stayClasses(clLand, 5)]);
145 if (randBool())
146         createHills([tMainTerrain, tCliff, tHill], [avoidClasses(clPlayer, 2, clHill, 15), stayClasses(clLand, 0)], clHill, scaleByMapSize(1, 4) * numPlayers);
147 else
148         createMountains(tCliff, [avoidClasses(clPlayer, 2, clHill, 15), stayClasses(clLand, 0)], clHill, scaleByMapSize(1, 4) * numPlayers);
150 var [forestTrees, stragglerTrees] = getTreeCounts(...rBiomeTreeCount(1));
151 createForests(
152  [tMainTerrain, tForestFloor1, tForestFloor2, pForest1, pForest2],
153  [avoidClasses(clPlayer, 20, clForest, 17, clHill, 0), stayClasses(clLand, 4)],
154  clForest,
155  forestTrees);
156 Engine.SetProgress(50);
158 log("Creating dirt patches...");
159 createLayeredPatches(
160  [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
161  [[tMainTerrain,tTier1Terrain],[tTier1Terrain,tTier2Terrain], [tTier2Terrain,tTier3Terrain]],
162  [1,1],
163  [avoidClasses(clForest, 0, clHill, 0, clDirt, 3, clPlayer, 12), stayClasses(clLand, 7)],
164  scaleByMapSize(15, 45),
165  clDirt);
167 log("Creating grass patches...");
168 createPatches(
169  [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
170  tTier4Terrain,
171  [avoidClasses(clForest, 0, clHill, 0, clDirt, 3, clPlayer, 12), stayClasses(clLand, 7)],
172  scaleByMapSize(15, 45),
173  clDirt);
174 Engine.SetProgress(55);
176 log("Creating stone mines...");
177 createMines(
179   [new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
180   [new SimpleObject(oStoneSmall, 2,5, 1,3)]
181  ],
182  [avoidClasses(clForest, 1, clPlayer, 7, clRock, 10, clHill, 1), stayClasses(clLand, 6)],
183  clRock
186 log("Creating metal mines...");
187 createMines(
189   [new SimpleObject(oMetalLarge, 1,1, 0,4)]
190  ],
191  [avoidClasses(clForest, 1, clPlayer, 7, clMetal, 10, clRock, 5, clHill, 1), stayClasses(clLand, 6)],
192  clMetal
194 Engine.SetProgress(65);
196 var planetm = currentBiome() == "tropic" ? 8 : 1;
197 createDecoration(
198         [
199                 [new SimpleObject(aRockMedium, 1, 3, 0, 1)],
200                 [new SimpleObject(aRockLarge, 1, 2, 0, 1), new SimpleObject(aRockMedium, 1, 3, 0, 2)],
201                 [new SimpleObject(aGrassShort, 1, 2, 0, 1)],
202                 [new SimpleObject(aGrass, 2, 4, 0, 1.8), new SimpleObject(aGrassShort, 3, 6, 1.2, 2.5)],
203                 [new SimpleObject(aBushMedium, 1, 2, 0, 2), new SimpleObject(aBushSmall, 2, 4, 0, 2)]
204         ],
205         [
206                 scaleByMapSize(16, 262),
207                 scaleByMapSize(8, 131),
208                 planetm * scaleByMapSize(13, 200),
209                 planetm * scaleByMapSize(13, 200),
210                 planetm * scaleByMapSize(13, 200)
211         ],
212         [avoidClasses(clForest, 0, clPlayer, 0, clHill, 0), stayClasses(clLand, 5)]);
213 Engine.SetProgress(70);
215 createFood(
216         [
217                 [new SimpleObject(oMainHuntableAnimal, 5, 7, 0, 4)],
218                 [new SimpleObject(oSecondaryHuntableAnimal, 2, 3, 0, 2)]
219         ],
220         [
221                 3 * numPlayers,
222                 3 * numPlayers
223         ],
224         [avoidClasses(clForest, 0, clPlayer, 1, clHill, 1, clFood, 20), stayClasses(clLand, 3)],
225         clFood);
227 Engine.SetProgress(75);
229 createFood(
230         [
231                 [new SimpleObject(oFruitBush, 5, 7, 0, 4)]
232         ],
233         [
234                 3 * numPlayers
235         ],
236         [avoidClasses(clForest, 0, clPlayer, 1, clHill, 1, clFood, 10), stayClasses(clLand, 3)],
237         clFood);
239 Engine.SetProgress(80);
241 createFood(
242         [
243                 [new SimpleObject(oFish, 2, 3, 0, 2)]
244         ],
245         [
246                 25 * numPlayers
247         ],
248         avoidClasses(clLand, 3, clPlayer, 2, clFood, 20),
249         clFood);
251 Engine.SetProgress(85);
253 createStragglerTrees(
254         [oTree1, oTree2, oTree4, oTree3],
255         [avoidClasses(clForest, 7, clHill, 1, clPlayer, 3, clMetal, 6, clRock, 6), stayClasses(clLand, 7)],
256         clForest,
257         stragglerTrees);
259 placePlayersNomad(
260         clPlayer,
261         new AndConstraint([
262                 stayClasses(clLand, 4),
263                 avoidClasses(clForest, 1, clMetal, 4, clRock, 4, clHill, 4, clFood, 2)]));
265 setWaterWaviness(4.0);
266 setWaterType("ocean");
268 ExportMap();