Survival Of The Fittest cleanup:
[0ad.git] / binaries / data / mods / public / maps / random / survivalofthefittest.js
blob06b58c9563f9b44fe1fa912bfa3d6d39fcfdb284
1 RMS.LoadLibrary("rmgen");
2 RMS.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 tHill = g_Terrains.hill;
11 const tTier1Terrain = g_Terrains.tier1Terrain;
12 const tTier2Terrain = g_Terrains.tier2Terrain;
13 const tTier3Terrain = g_Terrains.tier3Terrain;
14 const tTier4Terrain = g_Terrains.tier4Terrain;
16 const oTree1 = g_Gaia.tree1;
17 const oTree2 = g_Gaia.tree2;
18 const oTree3 = g_Gaia.tree3;
19 const oTree4 = g_Gaia.tree4;
20 const oTree5 = g_Gaia.tree5;
22 const aGrass = g_Decoratives.grass;
23 const aGrassShort = g_Decoratives.grassShort;
24 const aRockLarge = g_Decoratives.rockLarge;
25 const aRockMedium = g_Decoratives.rockMedium;
26 const aBushMedium = g_Decoratives.bushMedium;
27 const aBushSmall = g_Decoratives.bushSmall;
28 const aWaypointFlag = "actor|props/special/common/waypoint_flag.xml";
30 const pForest1 = [tForestFloor2 + TERRAIN_SEPARATOR + oTree1, tForestFloor2 + TERRAIN_SEPARATOR + oTree2, tForestFloor2];
31 const pForest2 = [tForestFloor1 + TERRAIN_SEPARATOR + oTree4, tForestFloor1 + TERRAIN_SEPARATOR + oTree5, tForestFloor1];
33 const oTreasureSeeker = "skirmish/units/default_support_female_citizen";
35 const triggerPointAttacker = "trigger/trigger_point_A";
36 const triggerPointTreasures = [
37         "trigger/trigger_point_B",
38         "trigger/trigger_point_C",
39         "trigger/trigger_point_D"
42 InitMap();
44 var numPlayers = getNumPlayers();
45 var mapSize = getMapSize();
46 var mapArea = getMapArea();
47 var mapCenter = getMapCenter();
49 var clPlayer = createTileClass();
50 var clHill = createTileClass();
51 var clForest = createTileClass();
52 var clDirt = createTileClass();
53 var clBaseResource = createTileClass();
54 var clLand = createTileClass();
55 var clWomen = createTileClass();
57 initTerrain(tMainTerrain);
59 // Create the main treasure area in the middle of the map
60 createArea(
61         new ClumpPlacer(mapArea * scaleByMapSize(0.065, 0.09), 0.7, 0.1, 10, mapCenter.x, mapCenter.y),
62         [
63                 new LayeredPainter([tMainTerrain, tMainTerrain], [3]),
64                 new SmoothElevationPainter(ELEVATION_SET, 3, 3),
65                 paintClass(clLand)
66         ]);
67 RMS.SetProgress(10);
69 var [playerIDs, playerX, playerZ, playerAngle, startAngle] = radialPlayerPlacement(0.3);
70 var [halfwayX, halfwayZ] = distributePointsOnCircle(numPlayers, startAngle, fractionToTiles(0.375), mapCenter.x, mapCenter.y);
71 var [attackerX, attackerZ] = distributePointsOnCircle(numPlayers, startAngle, fractionToTiles(0.45), mapCenter.x, mapCenter.y);
72 var [passageX, passageZ] = distributePointsOnCircle(numPlayers, startAngle + Math.PI / numPlayers, fractionToTiles(0.5), mapCenter.x, mapCenter.y);
74 log("Creating player bases and attacker points...");
75 for (let  i = 0; i < numPlayers; ++i)
77         let fx = fractionToTiles(playerX[i]);
78         let fz = fractionToTiles(playerZ[i]);
80         placeStartingEntities(fx, fz, playerIDs[i], getStartingEntities(playerIDs[i] - 1).filter(ent =>
81                 ent.Template.indexOf("civil_centre") != -1 || ent.Template.indexOf("infantry") != -1));
83         placeDefaultDecoratives(fx, fz, aGrassShort, clBaseResource, scaleByMapSize(15, 25));
85         log("Creating passage separating players...");
86         createArea(
87                 new PathPlacer(mapCenter.x, mapCenter.y, passageX[i], passageZ[i], scaleByMapSize(14, 24), 0.4, scaleByMapSize(3, 9), 0.2, 0.05),
88                 [
89                         new LayeredPainter([tMainTerrain, tMainTerrain], [1]),
90                         new SmoothElevationPainter(ELEVATION_SET, 3, 4)
91                 ]);
93         log("Placing treasure seeker woman...");
94         let femaleLocation = getTIPIADBON([fx, fz], [mapCenter.x, mapCenter.y], [-3 , 3.5], 1, 3);
95         placeObject(femaleLocation[0], femaleLocation[1], oTreasureSeeker, playerIDs[i], playerAngle[i] + Math.PI);
96         addToClass(Math.floor(femaleLocation[0]), Math.floor(femaleLocation[1]), clWomen);
98         log("Placing attacker spawn point....");
99         placeObject(attackerX[i], attackerZ[i], aWaypointFlag, 0, Math.PI / 2);
100         placeObject(attackerX[i], attackerZ[i], triggerPointAttacker, playerIDs[i], Math.PI / 2);
102         log("Preventing mountains in the area between player and attackers...");
103         addCivicCenterAreaToClass(Math.round(fx), Math.round(fz), clPlayer);
104         addToClass(Math.round(attackerX[i]), Math.round(attackerZ[i]), clPlayer);
105         addToClass(Math.round(halfwayX[i]), Math.round(halfwayZ[i]), clPlayer);
107 RMS.SetProgress(20);
109 paintTerrainBasedOnHeight(3.12, 29, 1, tCliff);
110 paintTileClassBasedOnHeight(3.12, 29, 1, clHill);
112 for (let triggerPointTreasure of triggerPointTreasures)
113         createObjectGroupsDeprecated(
114                 new SimpleGroup([new SimpleObject(triggerPointTreasure, 1, 1, 0, 0)], true, clWomen),
115                 0,
116                 [avoidClasses(clForest, 5, clPlayer, 5, clHill, 5), stayClasses(clLand, 5)],
117                 scaleByMapSize(40, 140), 100
118         );
119 RMS.SetProgress(25);
121 createBumps(stayClasses(clLand, 5));
123 var [forestTrees, stragglerTrees] = getTreeCounts(...rBiomeTreeCount(1));
124 createForests(
125         [tMainTerrain, tForestFloor1, tForestFloor2, pForest1, pForest2],
126         [avoidClasses(clPlayer, 20, clForest, 5, clHill, 0, clBaseResource,2, clWomen, 5), stayClasses(clLand, 4)],
127         clForest,
128         forestTrees);
129 RMS.SetProgress(30);
131 if (randBool())
132         createHills(
133                 [tMainTerrain, tCliff, tHill],
134                 [avoidClasses(clPlayer, 20, clHill, 5, clBaseResource, 3, clWomen, 5), stayClasses(clLand, 5)],
135                 clHill,
136                 scaleByMapSize(10, 60) * numPlayers);
137 else
138         createMountains(
139                 tCliff,
140                 [avoidClasses(clPlayer, 20, clHill, 5, clBaseResource, 3, clWomen, 5), stayClasses(clLand, 5)],
141                 clHill,
142                 scaleByMapSize(10, 60) * numPlayers);
143 RMS.SetProgress(40);
145 createHills(
146         [tCliff, tCliff, tHill],
147         avoidClasses(clPlayer, 20, clHill, 5, clBaseResource, 3, clWomen, 5, clLand, 5),
148         clHill,
149         scaleByMapSize(15, 90) * numPlayers,
150         undefined,
151         undefined,
152         undefined,
153         undefined,
154         55);
156 RMS.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, 5, clPlayer, 12, clWomen, 5), stayClasses(clLand, 5)],
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, 5, clPlayer, 12, clWomen, 5), stayClasses(clLand, 5)],
172         scaleByMapSize(15, 45),
173         clDirt);
175 var planetm = 1;
176 if (currentBiome() == "tropic")
177         planetm = 8;
179 createDecoration(
180         [
181                 [new SimpleObject(aRockMedium, 1, 3, 0, 1)],
182                 [new SimpleObject(aRockLarge, 1, 2, 0, 1), new SimpleObject(aRockMedium, 1, 3, 0, 2)],
183                 [new SimpleObject(aGrassShort, 1, 2, 0, 1, -PI/8, PI/8)],
184                 [new SimpleObject(aGrass, 2,4, 0, 1.8, -PI/8, PI/8), new SimpleObject(aGrassShort, 3,6, 1.2, 2.5, -PI/8, PI/8)],
185                 [new SimpleObject(aBushMedium, 1, 2, 0, 2), new SimpleObject(aBushSmall, 2, 4, 0, 2)]
186         ],
187         [
188                 scaleByMapSize(16, 262),
189                 scaleByMapSize(8, 131),
190                 planetm * scaleByMapSize(13, 200),
191                 planetm * scaleByMapSize(13, 200),
192                 planetm * scaleByMapSize(13, 200)
193         ],
194         [avoidClasses(clForest, 0, clPlayer, 0, clHill, 0), stayClasses(clLand, 5)]
197 createStragglerTrees(
198         [oTree1, oTree2, oTree4, oTree3],
199         [avoidClasses(clForest, 7, clHill, 1, clPlayer, 9), stayClasses(clLand, 7)],
200         clForest,
201         stragglerTrees);
203 ExportMap();