1 Engine.LoadLibrary("rmgen");
3 const tGrass = ["medit_grass_field_a", "medit_grass_field_b"];
4 const tForestFloorC = "medit_plants_dirt";
5 const tForestFloorP = "medit_grass_shrubs";
6 const tGrassA = "medit_grass_field_b";
7 const tGrassB = "medit_grass_field_brown";
8 const tGrassC = "medit_grass_field_dry";
9 const tRoad = "medit_city_tile";
10 const tRoadWild = "medit_city_tile";
11 const tGrassPatch = "medit_grass_shrubs";
12 const tShore = "sand_grass_25";
13 const tWater = "medit_sand_wet";
15 const oPoplar = "gaia/flora_tree_poplar";
16 const oApple = "gaia/flora_tree_apple";
17 const oCarob = "gaia/flora_tree_carob";
18 const oBerryBush = "gaia/flora_bush_berry";
19 const oDeer = "gaia/fauna_deer";
20 const oFish = "gaia/fauna_fish";
21 const oSheep = "gaia/fauna_sheep";
22 const oStoneLarge = "gaia/geology_stonemine_medit_quarry";
23 const oStoneSmall = "gaia/geology_stone_mediterranean";
24 const oMetalLarge = "gaia/geology_metal_mediterranean_slabs";
26 const aGrass = "actor|props/flora/grass_soft_large_tall.xml";
27 const aGrassShort = "actor|props/flora/grass_soft_large.xml";
28 const aReeds = "actor|props/flora/reeds_pond_lush_a.xml";
29 const aLillies = "actor|props/flora/water_lillies.xml";
30 const aRockLarge = "actor|geology/stone_granite_large.xml";
31 const aRockMedium = "actor|geology/stone_granite_med.xml";
32 const aBushMedium = "actor|props/flora/bush_medit_me.xml";
33 const aBushSmall = "actor|props/flora/bush_medit_sm.xml";
35 const pForestP = [tForestFloorP + TERRAIN_SEPARATOR + oPoplar, tForestFloorP];
36 const pForestC = [tForestFloorC + TERRAIN_SEPARATOR + oCarob, tForestFloorC];
40 const numPlayers = getNumPlayers();
41 const mapSize = getMapSize();
43 var clPlayer = createTileClass();
44 var clForest = createTileClass();
45 var clDirt = createTileClass();
46 var clRock = createTileClass();
47 var clMetal = createTileClass();
48 var clFood = createTileClass();
49 var clBaseResource = createTileClass();
50 var clLand = createTileClass();
51 var clRiver = createTileClass();
52 var clShallow = createTileClass();
56 var shallowHeight = -1.5;
59 log("Create the continent body");
60 var continentCenter = new Vector2D(0.5, 0.7);
64 Math.floor(scaleByMapSize(5, 12)),
65 Math.floor(scaleByMapSize(60, 700)),
67 Math.floor(fractionToTiles(continentCenter.x)),
68 Math.floor(fractionToTiles(continentCenter.y)),
70 [Math.floor(mapSize * 0.49)]),
72 new LayeredPainter([tGrass, tGrass, tGrass], [4, 2]),
73 new SmoothElevationPainter(ELEVATION_SET, landHeight, 4),
79 "PlayerPlacement": [primeSortAllPlayers(), ...playerPlacementCustomAngle(
83 i => Math.PI * (-0.46 / numPlayers * (i + i % 2) - (i % 2) / 2))],
84 "PlayerTileClass": clPlayer,
85 "BaseResourceClass": clBaseResource,
88 "outerTerrain": tRoadWild,
94 "template": oBerryBush
98 { "template": oMetalLarge },
99 { "template": oStoneLarge }
107 "template": aGrassShort
110 Engine.SetProgress(20);
114 "constraint": stayClasses(clLand, 0),
122 "waterHeight": waterHeight,
123 "landHeight": shoreHeight,
126 "waterFunc": (ix, iz, height, z) => {
127 addToClass(ix, iz, clRiver);
128 placeTerrain(ix, iz, tWater);
130 if (height < shallowHeight && (
131 z > 0.3 && z < 0.4 ||
132 z > 0.5 && z < 0.6 ||
135 setHeight(ix, iz, shallowHeight);
136 addToClass(ix, iz, clShallow);
141 paintTerrainBasedOnHeight(1, 3, 0, tShore);
142 paintTerrainBasedOnHeight(-8, 1, 2, tWater);
144 createBumps([avoidClasses(clPlayer, 20, clRiver, 1), stayClasses(clLand, 3)]);
146 var [forestTrees, stragglerTrees] = getTreeCounts(500, 3000, 0.7);
148 [tGrass, tForestFloorP, tForestFloorC, pForestC, pForestP],
149 [avoidClasses(clPlayer, 20, clForest, 17, clRiver, 1), stayClasses(clLand, 7)],
153 Engine.SetProgress(50);
155 log("Creating dirt patches...");
156 createLayeredPatches(
157 [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
158 [[tGrass,tGrassA],[tGrassA,tGrassB], [tGrassB,tGrassC]],
160 [avoidClasses(clForest, 0, clDirt, 3, clPlayer, 8, clRiver, 1), stayClasses(clLand, 7)],
161 scaleByMapSize(15, 45),
164 log("Creating grass patches...");
166 [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
168 [avoidClasses(clForest, 0, clDirt, 3, clPlayer, 8, clRiver, 1), stayClasses(clLand, 7)],
169 scaleByMapSize(15, 45),
171 Engine.SetProgress(55);
173 log("Creating stone mines...");
176 [new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
177 [new SimpleObject(oStoneSmall, 2,5, 1,3)]
179 [avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clRiver, 1), stayClasses(clLand, 5)],
182 log("Creating metal mines...");
185 [new SimpleObject(oMetalLarge, 1,1, 0,4)]
187 [avoidClasses(clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clRiver, 1), stayClasses(clLand, 5)],
190 Engine.SetProgress(65);
194 [new SimpleObject(aRockMedium, 1, 3, 0, 1)],
195 [new SimpleObject(aRockLarge, 1, 2, 0, 1), new SimpleObject(aRockMedium, 1, 3, 0, 2)],
196 [new SimpleObject(aGrassShort, 1, 2, 0, 1)],
197 [new SimpleObject(aGrass, 2, 4, 0, 1.8), new SimpleObject(aGrassShort, 3, 6, 1.2, 2.5)],
198 [new SimpleObject(aBushMedium, 1, 2, 0, 2), new SimpleObject(aBushSmall, 2, 4, 0, 2)]
201 scaleByMapSize(16, 262),
202 scaleByMapSize(8, 131),
203 scaleByMapSize(13, 200),
204 scaleByMapSize(13, 200),
205 scaleByMapSize(13, 200)
207 [avoidClasses(clPlayer, 1, clDirt, 1, clRiver, 1), stayClasses(clLand, 6)]);
209 log("Create water decoration in the shallow parts");
212 [new SimpleObject(aReeds, 1, 3, 0, 1)],
213 [new SimpleObject(aLillies, 1, 2, 0, 1)]
216 scaleByMapSize(800, 12800),
217 scaleByMapSize(800, 12800)
219 stayClasses(clShallow, 0));
221 Engine.SetProgress(70);
225 [new SimpleObject(oDeer, 5, 7, 0, 4)],
226 [new SimpleObject(oSheep, 2, 3, 0, 2)]
232 [avoidClasses(clForest, 0, clPlayer, 20, clFood, 20, clRiver, 1), stayClasses(clLand, 3)],
237 [new SimpleObject(oBerryBush, 5, 7, 0, 4)]
240 randIntInclusive(1, 4) * numPlayers + 2
242 [avoidClasses(clForest, 0, clPlayer, 20, clFood, 10, clRiver, 1), stayClasses(clLand, 3)],
247 [new SimpleObject(oFish, 2, 3, 0, 2)]
252 avoidClasses(clLand, 2, clRiver, 1),
255 Engine.SetProgress(85);
257 createStragglerTrees(
258 [oPoplar, oCarob, oApple],
259 [avoidClasses(clForest, 1, clPlayer, 9, clMetal, 6, clRock, 6, clRiver, 1), stayClasses(clLand, 7)],
266 stayClasses(clLand, 4),
267 avoidClasses(clForest, 1, clMetal, 4, clRock, 4, clFood, 2)]));
269 setSkySet("cumulus");
270 setWaterColor(0.2,0.312,0.522);
271 setWaterTint(0.1,0.1,0.8);
272 setWaterWaviness(4.0);
273 setWaterType("lake");
274 setWaterMurkiness(0.73);
277 setFogThickness(0.25);
281 setPPSaturation(0.51);