Nomad mode on all random map scripts (except Survival of the Fittest), fixes #3591.
[0ad.git] / binaries / data / mods / public / maps / random / mainland.js
blob1dabe182ea58a5e465a49c5b9c3cb938a097a1c3
1 Engine.LoadLibrary("rmgen");
2 Engine.LoadLibrary("rmbiome");
4 setSelectedBiome();
6 const tMainTerrain = g_Terrains.mainTerrain;
7 const tForestFloor1 = g_Terrains.forestFloor1;
8 const tForestFloor2 = g_Terrains.forestFloor2;
9 const tCliff = g_Terrains.cliff;
10 const tTier1Terrain = g_Terrains.tier1Terrain;
11 const tTier2Terrain = g_Terrains.tier2Terrain;
12 const tTier3Terrain = g_Terrains.tier3Terrain;
13 const tHill = g_Terrains.hill;
14 const tRoad = g_Terrains.road;
15 const tRoadWild = g_Terrains.roadWild;
16 const tTier4Terrain = g_Terrains.tier4Terrain;
18 const oTree1 = g_Gaia.tree1;
19 const oTree2 = g_Gaia.tree2;
20 const oTree3 = g_Gaia.tree3;
21 const oTree4 = g_Gaia.tree4;
22 const oTree5 = g_Gaia.tree5;
23 const oFruitBush = g_Gaia.fruitBush;
24 const oMainHuntableAnimal = g_Gaia.mainHuntableAnimal;
25 const oSecondaryHuntableAnimal = g_Gaia.secondaryHuntableAnimal;
26 const oStoneLarge = g_Gaia.stoneLarge;
27 const oStoneSmall = g_Gaia.stoneSmall;
28 const oMetalLarge = g_Gaia.metalLarge;
30 const aGrass = g_Decoratives.grass;
31 const aGrassShort = g_Decoratives.grassShort;
32 const aRockLarge = g_Decoratives.rockLarge;
33 const aRockMedium = g_Decoratives.rockMedium;
34 const aBushMedium = g_Decoratives.bushMedium;
35 const aBushSmall = g_Decoratives.bushSmall;
37 const pForest1 = [tForestFloor2 + TERRAIN_SEPARATOR + oTree1, tForestFloor2 + TERRAIN_SEPARATOR + oTree2, tForestFloor2];
38 const pForest2 = [tForestFloor1 + TERRAIN_SEPARATOR + oTree4, tForestFloor1 + TERRAIN_SEPARATOR + oTree5, tForestFloor1];
40 InitMap();
42 const numPlayers = getNumPlayers();
44 var clPlayer = createTileClass();
45 var clHill = createTileClass();
46 var clForest = createTileClass();
47 var clDirt = createTileClass();
48 var clRock = createTileClass();
49 var clMetal = createTileClass();
50 var clFood = createTileClass();
51 var clBaseResource = createTileClass();
53 initTerrain(tMainTerrain);
55 placePlayerBases({
56         "PlayerPlacement": playerPlacementCircle(0.35),
57         "PlayerTileClass": clPlayer,
58         "BaseResourceClass": clBaseResource,
59         "CityPatch": {
60                 "outerTerrain": tRoadWild,
61                 "innerTerrain": tRoad
62         },
63         "Chicken": {
64         },
65         "Berries": {
66                 "template": oFruitBush
67         },
68         "Mines": {
69                 "types": [
70                         { "template": oMetalLarge },
71                         { "template": oStoneLarge }
72                 ]
73         },
74         "Trees": {
75                 "template": oTree1,
76                 "count": 5
77         },
78         "Decoratives": {
79                 "template": aGrassShort
80         }
81 });
82 Engine.SetProgress(20);
84 createBumps(avoidClasses(clPlayer, 20));
86 if (randBool())
87         createHills([tCliff, tCliff, tHill], avoidClasses(clPlayer, 20, clHill, 15), clHill, scaleByMapSize(3, 15));
88 else
89         createMountains(tCliff, avoidClasses(clPlayer, 20, clHill, 15), clHill, scaleByMapSize(3, 15));
91 var [forestTrees, stragglerTrees] = getTreeCounts(...rBiomeTreeCount(1));
92 createForests(
93  [tMainTerrain, tForestFloor1, tForestFloor2, pForest1, pForest2],
94  avoidClasses(clPlayer, 20, clForest, 18, clHill, 0),
95  clForest,
96  forestTrees);
98 Engine.SetProgress(50);
100 log("Creating dirt patches...");
101 createLayeredPatches(
102  [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
103  [[tMainTerrain,tTier1Terrain],[tTier1Terrain,tTier2Terrain], [tTier2Terrain,tTier3Terrain]],
104  [1, 1],
105  avoidClasses(clForest, 0, clHill, 0, clDirt, 5, clPlayer, 12),
106  scaleByMapSize(15, 45),
107  clDirt);
109 log("Creating grass patches...");
110 createPatches(
111  [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
112  tTier4Terrain,
113  avoidClasses(clForest, 0, clHill, 0, clDirt, 5, clPlayer, 12),
114  scaleByMapSize(15, 45),
115  clDirt);
116 Engine.SetProgress(55);
118 log("Creating stone mines...");
119 createMines(
121   [new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
122   [new SimpleObject(oStoneSmall, 2,5, 1,3)]
123  ],
124  avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
125  clRock);
127 log("Creating metal mines...");
128 createMines(
130   [new SimpleObject(oMetalLarge, 1,1, 0,4)]
131  ],
132  avoidClasses(clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clHill, 1),
133  clMetal
136 Engine.SetProgress(65);
138 var planetm = 1;
140 if (currentBiome() == "tropic")
141         planetm = 8;
143 createDecoration(
144         [
145                 [new SimpleObject(aRockMedium, 1, 3, 0, 1)],
146                 [new SimpleObject(aRockLarge, 1, 2, 0, 1), new SimpleObject(aRockMedium, 1, 3, 0, 2)],
147                 [new SimpleObject(aGrassShort, 1, 2, 0, 1)],
148                 [new SimpleObject(aGrass, 2, 4, 0, 1.8), new SimpleObject(aGrassShort, 3,6, 1.2, 2.5)],
149                 [new SimpleObject(aBushMedium, 1, 2, 0, 2), new SimpleObject(aBushSmall, 2, 4, 0, 2)]
150         ],
151         [
152                 scaleByMapSize(16, 262),
153                 scaleByMapSize(8, 131),
154                 planetm * scaleByMapSize(13, 200),
155                 planetm * scaleByMapSize(13, 200),
156                 planetm * scaleByMapSize(13, 200)
157         ],
158         avoidClasses(clForest, 0, clPlayer, 0, clHill, 0));
160 Engine.SetProgress(70);
162 createFood(
163         [
164                 [new SimpleObject(oMainHuntableAnimal, 5, 7, 0, 4)],
165                 [new SimpleObject(oSecondaryHuntableAnimal, 2, 3, 0, 2)]
166         ],
167         [
168                 3 * numPlayers,
169                 3 * numPlayers
170         ],
171         avoidClasses(clForest, 0, clPlayer, 20, clHill, 1, clFood, 20),
172         clFood);
174 Engine.SetProgress(75);
176 createFood(
177         [
178                 [new SimpleObject(oFruitBush, 5, 7, 0, 4)]
179         ],
180         [
181                 3 * numPlayers
182         ],
183         avoidClasses(clForest, 0, clPlayer, 20, clHill, 1, clFood, 10),
184         clFood);
186 Engine.SetProgress(85);
188 createStragglerTrees(
189         [oTree1, oTree2, oTree4, oTree3],
190         avoidClasses(clForest, 8, clHill, 1, clPlayer, 12, clMetal, 6, clRock, 6),
191         clForest,
192         stragglerTrees);
194 placePlayersNomad(clPlayer, avoidClasses(clForest, 1, clMetal, 4, clRock, 4, clHill, 4, clFood, 2));
196 ExportMap();