1 Engine.LoadLibrary("rmgen");
3 const tGrass = ["tropic_grass_c", "tropic_grass_c", "tropic_grass_c", "tropic_grass_c", "tropic_grass_plants", "tropic_plants", "tropic_plants_b"];
4 const tGrassA = "tropic_plants_c";
5 const tGrassB = "tropic_plants_c";
6 const tGrassC = "tropic_grass_c";
7 const tForestFloor = "tropic_grass_plants";
8 const tCliff = ["tropic_cliff_a", "tropic_cliff_a", "tropic_cliff_a", "tropic_cliff_a_plants"];
9 const tPlants = "tropic_plants";
10 const tRoad = "tropic_citytile_a";
11 const tRoadWild = "tropic_citytile_plants";
12 const tShoreBlend = "tropic_beach_dry_plants";
13 const tShore = "tropic_beach_dry";
14 const tWater = "tropic_beach_wet";
16 const oTree = "gaia/flora_tree_toona";
17 const oPalm = "gaia/flora_tree_palm_tropic";
18 const oStoneLarge = "gaia/geology_stonemine_tropic_quarry";
19 const oStoneSmall = "gaia/geology_stone_tropic_a";
20 const oMetalLarge = "gaia/geology_metal_tropic_slabs";
21 const oFish = "gaia/fauna_fish";
22 const oDeer = "gaia/fauna_deer";
23 const oSheep = "gaia/fauna_tiger";
24 const oBush = "gaia/flora_bush_berry";
26 const aRockLarge = "actor|geology/stone_granite_large.xml";
27 const aRockMedium = "actor|geology/stone_granite_med.xml";
28 const aBush1 = "actor|props/flora/plant_tropic_a.xml";
29 const aBush2 = "actor|props/flora/plant_lg.xml";
30 const aBush3 = "actor|props/flora/plant_tropic_large.xml";
32 const pForestD = [tForestFloor + TERRAIN_SEPARATOR + oTree, tForestFloor];
33 const pForestP = [tForestFloor + TERRAIN_SEPARATOR + oPalm, tForestFloor];
37 const numPlayers = getNumPlayers();
38 const mapSize = getMapSize();
40 var clPlayer = createTileClass();
41 var clHill = createTileClass();
42 var clForest = createTileClass();
43 var clWater = createTileClass();
44 var clDirt = createTileClass();
45 var clRock = createTileClass();
46 var clMetal = createTileClass();
47 var clFood = createTileClass();
48 var clBaseResource = createTileClass();
49 var clMountains = createTileClass();
51 const waterPos = 0.31;
52 const mountainPos = 0.69;
55 "PlayerPlacement": playerPlacementLine(false, 0.55, 0.2),
56 "PlayerTileClass": clPlayer,
57 "BaseResourceClass": clBaseResource,
59 "outerTerrain": tRoadWild,
69 { "template": oMetalLarge },
70 { "template": oStoneLarge }
75 "count": scaleByMapSize(12, 30),
83 Engine.SetProgress(15);
91 "width": 2 * waterPos,
98 "waterFunc": (ix, iz, height, riverFraction) => {
99 addToClass(ix, iz, clWater);
104 new RectPlacer(fractionToTiles(mountainPos), fractionToTiles(0), fractionToTiles(1), fractionToTiles(1)),
105 paintClass(clMountains));
107 log("Creating shores...");
108 for (let i = 0; i < scaleByMapSize(20, 120); ++i)
112 Math.floor(scaleByMapSize(4, 6)),
113 Math.floor(scaleByMapSize(16, 30)),
115 randIntExclusive(0.28 * mapSize, 0.34 * mapSize),
116 randIntExclusive(0.1 * mapSize, 0.9 * mapSize)),
118 new LayeredPainter([tGrass, tGrass], [2]),
119 new SmoothElevationPainter(ELEVATION_SET, 3, 3),
120 unPaintClass(clWater)
124 paintTerrainBasedOnHeight(-6, 1, 1, tWater);
125 paintTerrainBasedOnHeight(1, 2.8, 1, tShoreBlend);
126 paintTerrainBasedOnHeight(0, 1, 1, tShore);
127 paintTileClassBasedOnHeight(-6, 0.5, 1, clWater);
129 Engine.SetProgress(45);
131 log("Creating hills...");
133 new ChainPlacer(1, Math.floor(scaleByMapSize(4, 6)), Math.floor(scaleByMapSize(16, 40)), 0.1),
135 new LayeredPainter([tCliff, tGrass], [3]),
136 new SmoothElevationPainter(ELEVATION_SET, 25, 3),
139 [avoidClasses(clPlayer, 20, clHill, 5, clWater, 2, clBaseResource, 2), stayClasses(clMountains, 0)],
140 scaleByMapSize(5, 40) * numPlayers);
142 log("Creating forests...");
143 var [forestTrees, stragglerTrees] = getTreeCounts(1000, 6000, 0.7);
145 [[tGrass, tGrass, tGrass, tGrass, pForestD], [tGrass, tGrass, tGrass, pForestD]],
146 [[tGrass, tGrass, tGrass, tGrass, pForestP], [tGrass, tGrass, tGrass, pForestP]]
148 var size = forestTrees / (scaleByMapSize(3,6) * numPlayers);
149 var num = Math.floor(size / types.length);
150 for (let type of types)
154 Math.floor(scaleByMapSize(3, 5)),
155 forestTrees / (num * Math.floor(scaleByMapSize(2, 4))),
158 new LayeredPainter(type, [2]),
161 avoidClasses(clPlayer, 20, clForest, 10, clHill, 0, clWater, 8),
164 Engine.SetProgress(70);
166 log("Creating grass patches...");
167 for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)])
169 new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), size, 0.5),
171 new LayeredPainter([tGrassC, tGrassA, tGrassB], [2, 1]),
174 avoidClasses(clWater, 8, clForest, 0, clHill, 0, clPlayer, 12, clDirt, 16),
175 scaleByMapSize(20, 80));
177 for (let size of [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)])
179 new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), size, 0.5),
181 new LayeredPainter([tPlants, tPlants], [1]),
184 avoidClasses(clWater, 8, clForest, 0, clHill, 0, clPlayer, 12, clDirt, 16),
185 scaleByMapSize(20, 80));
187 log("Creating stone mines...");
188 var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
189 createObjectGroupsDeprecated(group, 0,
190 avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
191 scaleByMapSize(4,16), 100
194 log("Creating small stone quarries...");
195 group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
196 createObjectGroupsDeprecated(group, 0,
197 avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
198 scaleByMapSize(4,16), 100
201 log("Creating metal mines...");
202 group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
203 createObjectGroupsDeprecated(group, 0,
204 avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clHill, 1),
205 scaleByMapSize(4,16), 100
208 log("Creating small decorative rocks...");
209 group = new SimpleGroup(
210 [new SimpleObject(aRockMedium, 1,3, 0,1)],
213 createObjectGroupsDeprecated(
215 avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0),
216 3*scaleByMapSize(16, 262), 50
219 log("Creating large decorative rocks...");
220 group = new SimpleGroup(
221 [new SimpleObject(aRockLarge, 1,2, 0,1), new SimpleObject(aRockMedium, 1,3, 0,2)],
224 createObjectGroupsDeprecated(
226 avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0),
227 3*scaleByMapSize(8, 131), 50
230 log("Creating small grass tufts...");
231 group = new SimpleGroup(
232 [new SimpleObject(aBush1, 1,2, 0,1, -Math.PI / 8, Math.PI / 8)]
234 createObjectGroupsDeprecated(group, 0,
235 avoidClasses(clWater, 2, clHill, 2, clPlayer, 2, clDirt, 0),
236 8 * scaleByMapSize(13, 200)
239 Engine.SetProgress(90);
241 log("Creating large grass tufts...");
242 group = new SimpleGroup(
243 [new SimpleObject(aBush2, 2,4, 0,1.8, -Math.PI / 8, Math.PI / 8), new SimpleObject(aBush1, 3,6, 1.2,2.5, -Math.PI / 8, Math.PI / 8)]
245 createObjectGroupsDeprecated(group, 0,
246 avoidClasses(clWater, 3, clHill, 2, clPlayer, 2, clDirt, 1, clForest, 0),
247 8 * scaleByMapSize(13, 200)
250 Engine.SetProgress(95);
252 log("Creating bushes...");
253 group = new SimpleGroup(
254 [new SimpleObject(aBush3, 1,2, 0,2), new SimpleObject(aBush2, 2,4, 0,2)]
256 createObjectGroupsDeprecated(group, 0,
257 avoidClasses(clWater, 1, clHill, 1, clPlayer, 1, clDirt, 1),
258 8 * scaleByMapSize(13, 200), 50
261 Engine.SetProgress(95);
263 createStragglerTrees(
265 avoidClasses(clWater, 5, clForest, 1, clHill, 1, clPlayer, 12, clMetal, 6, clRock, 6),
269 log("Creating deer...");
270 group = new SimpleGroup(
271 [new SimpleObject(oDeer, 5,7, 0,4)],
274 createObjectGroupsDeprecated(group, 0,
275 avoidClasses(clWater, 3, clForest, 0, clPlayer, 10, clHill, 1, clFood, 20),
279 Engine.SetProgress(75);
281 log("Creating berry bush...");
282 group = new SimpleGroup(
283 [new SimpleObject(oBush, 5,7, 0,4)],
286 createObjectGroupsDeprecated(group, 0,
287 avoidClasses(clWater, 6, clForest, 0, clPlayer, 20, clHill, 1, clFood, 10),
288 randIntInclusive(1, 4) * numPlayers + 2, 50
291 log("Creating sheep...");
292 group = new SimpleGroup(
293 [new SimpleObject(oSheep, 2,3, 0,2)],
296 createObjectGroupsDeprecated(group, 0,
297 avoidClasses(clWater, 3, clForest, 0, clPlayer, 22, clHill, 1, clFood, 20),
301 log("Creating fish...");
302 group = new SimpleGroup(
303 [new SimpleObject(oFish, 2,3, 0,2)],
306 createObjectGroupsDeprecated(group, 0,
307 [avoidClasses(clFood, 20), stayClasses(clWater, 6)],
311 placePlayersNomad(clPlayer, avoidClasses(clWater, 4, clHill, 2, clForest, 1, clMetal, 4, clRock, 4, clFood, 2));
313 setSunColor(0.6, 0.6, 0.6);
314 setSunElevation(Math.PI / 3);
316 setWaterColor(0.524,0.734,0.839);
317 setWaterTint(0.369,0.765,0.745);
318 setWaterWaviness(1.0);
319 setWaterType("ocean");
320 setWaterMurkiness(0.35);
323 setFogThickness(0.2);
327 setPPSaturation(0.65);