Fix the two incorrect replacements in rP21434, refs #4950.
[0ad.git] / binaries / data / mods / public / maps / random / archipelago.js
blob38721588a72c748b55dbfe7902f869b477e90b05
1 Engine.LoadLibrary("rmgen");
2 Engine.LoadLibrary("rmgen-common");
3 Engine.LoadLibrary("rmbiome");
5 TILE_CENTERED_HEIGHT_MAP = true;
7 setSelectedBiome();
9 const tMainTerrain = g_Terrains.mainTerrain;
10 const tForestFloor1 = g_Terrains.forestFloor1;
11 const tForestFloor2 = g_Terrains.forestFloor2;
12 const tCliff = g_Terrains.cliff;
13 const tTier1Terrain = g_Terrains.tier1Terrain;
14 const tTier2Terrain = g_Terrains.tier2Terrain;
15 const tTier3Terrain = g_Terrains.tier3Terrain;
16 const tHill = g_Terrains.hill;
17 const tTier4Terrain = g_Terrains.dirt;
18 const tRoad = g_Terrains.road;
19 const tRoadWild = g_Terrains.roadWild;
20 const tShore = g_Terrains.shore;
21 const tWater = g_Terrains.water;
23 const oTree1 = g_Gaia.tree1;
24 const oTree2 = g_Gaia.tree2;
25 const oTree3 = g_Gaia.tree3;
26 const oTree4 = g_Gaia.tree4;
27 const oTree5 = g_Gaia.tree5;
28 const oFruitBush = g_Gaia.fruitBush;
29 const oMainHuntableAnimal = g_Gaia.mainHuntableAnimal;
30 const oFish = g_Gaia.fish;
31 const oSecondaryHuntableAnimal = g_Gaia.secondaryHuntableAnimal;
32 const oStoneLarge = g_Gaia.stoneLarge;
33 const oStoneSmall = g_Gaia.stoneSmall;
34 const oMetalLarge = g_Gaia.metalLarge;
35 const oWoodTreasure = "gaia/treasure/wood";
37 const aGrass = g_Decoratives.grass;
38 const aGrassShort = g_Decoratives.grassShort;
39 const aRockLarge = g_Decoratives.rockLarge;
40 const aRockMedium = g_Decoratives.rockMedium;
41 const aBushMedium = g_Decoratives.bushMedium;
42 const aBushSmall = g_Decoratives.bushSmall;
44 const pForest1 = [tForestFloor2 + TERRAIN_SEPARATOR + oTree1, tForestFloor2 + TERRAIN_SEPARATOR + oTree2, tForestFloor2];
45 const pForest2 = [tForestFloor1 + TERRAIN_SEPARATOR + oTree4, tForestFloor1 + TERRAIN_SEPARATOR + oTree5, tForestFloor1];
47 var heightSeaGround = -5;
48 var heightLand = 3;
49 var heightShore = 1;
51 var g_Map = new RandomMap(heightSeaGround, tWater);
53 const numPlayers = getNumPlayers();
55 var clPlayer = g_Map.createTileClass();
56 var clHill = g_Map.createTileClass();
57 var clForest = g_Map.createTileClass();
58 var clDirt = g_Map.createTileClass();
59 var clRock = g_Map.createTileClass();
60 var clMetal = g_Map.createTileClass();
61 var clFood = g_Map.createTileClass();
62 var clBaseResource = g_Map.createTileClass();
63 var clLand = g_Map.createTileClass();
65 var islandRadius = scaleByMapSize(22, 31);
67 var [playerIDs, playerPosition] = playerPlacementCircle(fractionToTiles(0.35));
69 g_Map.log("Creating player islands");
70 for (let i = 0; i < numPlayers; ++i)
71         createArea(
72                 new ChainPlacer(
73                         2,
74                         Math.floor(scaleByMapSize(5, 10)),
75                         Math.floor(scaleByMapSize(25, 60)),
76                         Infinity,
77                         playerPosition[i],
78                         0,
79                         [Math.floor(islandRadius)]),
80                 new SmoothElevationPainter(ELEVATION_SET, heightLand, 4));
82 g_Map.log("Creating random islands");
83 createAreas(
84         new ChainPlacer(
85                 Math.floor(scaleByMapSize(4, 8)),
86                 Math.floor(scaleByMapSize(8, 14)),
87                 Math.floor(scaleByMapSize(25, 60)),
88                 0.07,
89                 undefined,
90                 scaleByMapSize(30, 70)),
91         [
92                 new SmoothElevationPainter(ELEVATION_SET, heightLand, 4),
93                 new TileClassPainter(clLand)
94         ],
95         null,
96         scaleByMapSize(1, 5) * randIntInclusive(5, 10));
98 paintTerrainBasedOnHeight(heightLand - 0.6, heightLand + 0.4, 3, tMainTerrain);
99 paintTerrainBasedOnHeight(heightShore, heightLand, 0, tShore);
100 paintTerrainBasedOnHeight(heightSeaGround, heightShore, 2, tWater);
102 placePlayerBases({
103         "PlayerPlacement": [playerIDs, playerPosition],
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                         new TileClassPainter(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 g_Map.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 g_Map.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 g_Map.log("Creating stone mines");
177 createMines(
179   [new SimpleObject(oStoneSmall, 0, 2, 0, 4, 0, 2 * Math.PI, 1), new SimpleObject(oStoneLarge, 1, 1, 0, 4, 0, 2 * Math.PI, 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 g_Map.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() == "generic/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 g_Map.ExportMap();