1 Engine.LoadLibrary("rmgen");
3 TILE_CENTERED_HEIGHT_MAP = true;
5 const tCity = "medit_city_pavement";
6 const tCityPlaza = "medit_city_pavement";
7 const tHill = ["medit_grass_shrubs", "medit_rocks_grass_shrubs", "medit_rocks_shrubs", "medit_rocks_grass", "medit_shrubs"];
8 const tMainDirt = "medit_dirt";
9 const tCliff = "medit_cliff_aegean";
10 const tForestFloor = "medit_grass_shrubs";
11 const tGrass = ["medit_grass_field", "medit_grass_field_a"];
12 const tGrassSand50 = "medit_grass_field_a";
13 const tGrassSand25 = "medit_grass_field_b";
14 const tDirt = "medit_dirt_b";
15 const tDirt2 = "medit_rocks_grass";
16 const tDirt3 = "medit_rocks_shrubs";
17 const tDirtCracks = "medit_dirt_c";
18 const tShore = "medit_sand";
19 const tWater = "medit_sand_wet";
21 const oBerryBush = "gaia/flora_bush_berry";
22 const oDeer = "gaia/fauna_deer";
23 const oFish = "gaia/fauna_fish";
24 const oSheep = "gaia/fauna_sheep";
25 const oGoat = "gaia/fauna_goat";
26 const oStoneLarge = "gaia/geology_stonemine_medit_quarry";
27 const oStoneSmall = "gaia/geology_stone_mediterranean";
28 const oMetalLarge = "gaia/geology_metal_mediterranean_slabs";
29 const oDatePalm = "gaia/flora_tree_cretan_date_palm_short";
30 const oSDatePalm = "gaia/flora_tree_cretan_date_palm_tall";
31 const oCarob = "gaia/flora_tree_carob";
32 const oFanPalm = "gaia/flora_tree_medit_fan_palm";
33 const oPoplar = "gaia/flora_tree_poplar_lombardy";
34 const oCypress = "gaia/flora_tree_cypress";
36 const aBush1 = "actor|props/flora/bush_medit_sm.xml";
37 const aBush2 = "actor|props/flora/bush_medit_me.xml";
38 const aBush3 = "actor|props/flora/bush_medit_la.xml";
39 const aBush4 = "actor|props/flora/bush_medit_me.xml";
40 const aDecorativeRock = "actor|geology/stone_granite_med.xml";
42 const pForest = [tForestFloor, tForestFloor + TERRAIN_SEPARATOR + oCarob, tForestFloor + TERRAIN_SEPARATOR + oDatePalm, tForestFloor + TERRAIN_SEPARATOR + oSDatePalm, tForestFloor];
46 const numPlayers = getNumPlayers();
47 const mapSize = getMapSize();
48 const mapCenter = getMapCenter();
50 var clPlayer = createTileClass();
51 var clForest = createTileClass();
52 var clWater = createTileClass();
53 var clDirt = createTileClass();
54 var clRock = createTileClass();
55 var clMetal = createTileClass();
56 var clFood = createTileClass();
57 var clBaseResource = createTileClass();
58 var clGrass = createTileClass();
59 var clHill = createTileClass();
61 var landHeight = getMapBaseHeight();
64 log("Creating the main river");
65 var riverAngle = randFloat(0, Math.PI);
66 var riverWidth = scaleByMapSize(15, 70);
67 var riverStart = new Vector2D(mapCenter.x, 0).rotateAround(riverAngle, mapCenter);
68 var riverEnd = new Vector2D(mapCenter.x, mapSize).rotateAround(riverAngle, mapCenter);
71 new PathPlacer(riverStart.x, riverStart.y, riverEnd.x, riverEnd.y, riverWidth, 0.2, 15 * scaleByMapSize(1, 3), 0.04, 0.01),
72 new SmoothElevationPainter(ELEVATION_SET, waterHeight, 4),
75 log("Creating small puddles at the map border to ensure players being separated...");
76 for (let point of [riverStart, riverEnd])
78 new ClumpPlacer(Math.floor(diskArea(riverWidth / 2)), 0.95, 0.6, 10, point.x, point.y),
79 new SmoothElevationPainter(ELEVATION_SET, waterHeight, 4),
82 log("Creating passage connecting the two riversides...");
83 var passageStart = riverStart.rotateAround(Math.PI / 2, mapCenter);
84 var passageEnd = riverEnd.rotateAround(Math.PI / 2, mapCenter);
91 scaleByMapSize(10, 30),
93 3 * scaleByMapSize(1, 4),
96 new SmoothElevationPainter(ELEVATION_SET, landHeight, 4),
99 paintTerrainBasedOnHeight(-6, 1, 1, tWater);
100 paintTerrainBasedOnHeight(1, 2, 1, tShore);
101 paintTerrainBasedOnHeight(2, 5, 1, tGrass);
103 paintTileClassBasedOnHeight(-6, 0.5, 1, clWater);
106 "PlayerPlacement": playerPlacementRiver(riverAngle, 0.6),
107 "PlayerTileClass": clPlayer,
108 "BaseResourceClass": clBaseResource,
111 "outerTerrain": tCityPlaza,
112 "innerTerrain": tCity
117 "template": oBerryBush
121 { "template": oMetalLarge },
122 { "template": oStoneLarge }
133 Engine.SetProgress(40);
135 createBumps(avoidClasses(clWater, 2, clPlayer, 20));
137 var [forestTrees, stragglerTrees] = getTreeCounts(500, 3000, 0.7);
139 [tForestFloor, tForestFloor, tForestFloor, pForest, pForest],
140 avoidClasses(clPlayer, 20, clForest, 17, clWater, 2, clBaseResource, 3),
144 Engine.SetProgress(50);
147 createHills([tGrass, tCliff, tHill], avoidClasses(clPlayer, 20, clForest, 1, clHill, 15, clWater, 3), clHill, scaleByMapSize(3, 15));
149 createMountains(tCliff, avoidClasses(clPlayer, 20, clForest, 1, clHill, 15, clWater, 3), clHill, scaleByMapSize(3, 15));
151 log("Creating grass patches...");
152 createLayeredPatches(
153 [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
154 [[tGrass,tGrassSand50],[tGrassSand50,tGrassSand25], [tGrassSand25,tGrass]],
156 avoidClasses(clForest, 0, clGrass, 2, clPlayer, 10, clWater, 2, clDirt, 2, clHill, 1),
157 scaleByMapSize(15, 45),
160 Engine.SetProgress(55);
162 log("Creating dirt patches...");
163 createLayeredPatches(
164 [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
165 [tDirt3, tDirt2,[tDirt,tMainDirt], [tDirtCracks,tMainDirt]],
167 avoidClasses(clForest, 0, clDirt, 2, clPlayer, 10, clWater, 2, clGrass, 2, clHill, 1),
168 scaleByMapSize(15, 45),
171 Engine.SetProgress(60);
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, 4, clPlayer, 15, clRock, 10, clWater, 4, clHill, 4),
182 log("Creating metal mines...");
185 [new SimpleObject(oMetalLarge, 1,1, 0,4)]
187 avoidClasses(clForest, 4, clPlayer, 15, clMetal, 10, clRock, 5, clWater, 4, clHill, 4),
191 Engine.SetProgress(65);
196 new SimpleObject(aDecorativeRock, 1, 3, 0, 1)
199 new SimpleObject(aBush2, 1, 2, 0, 1),
200 new SimpleObject(aBush1, 1, 3, 0, 2),
201 new SimpleObject(aBush4, 1, 2, 0, 1),
202 new SimpleObject(aBush3, 1, 3, 0, 2)
206 scaleByMapSize(16, 262),
207 scaleByMapSize(40, 360)
209 avoidClasses(clWater, 2, clForest, 0, clPlayer, 5, clBaseResource, 6, clHill, 1, clRock, 6, clMetal, 6));
211 Engine.SetProgress(70);
215 [new SimpleObject(oFish, 2, 3, 0, 2)]
218 3 * scaleByMapSize(5, 20)
220 [avoidClasses(clFood, 10), stayClasses(clWater, 5)],
225 [new SimpleObject(oSheep, 5, 7, 0, 4)],
226 [new SimpleObject(oGoat, 2, 4, 0, 3)],
227 [new SimpleObject(oDeer, 2, 4, 0, 2)]
230 scaleByMapSize(5,20),
231 scaleByMapSize(5,20),
234 avoidClasses(clForest, 0, clPlayer, 10, clBaseResource, 6, clWater, 1, clFood, 10, clHill, 1, clRock, 6, clMetal, 6),
239 [new SimpleObject(oBerryBush, 5, 7, 0, 4)]
244 avoidClasses(clWater, 3, clForest, 0, clPlayer, 20, clHill, 1, clFood, 10, clRock, 6, clMetal, 6),
247 Engine.SetProgress(90);
249 createStragglerTrees(
250 [oDatePalm, oSDatePalm, oCarob, oFanPalm, oPoplar, oCypress],
251 avoidClasses(clForest, 1, clWater, 2, clPlayer, 8, clBaseResource, 6, clMetal, 6, clRock, 6, clHill, 1),
255 placePlayersNomad(clPlayer, avoidClasses(clWater, 4, clForest, 1, clMetal, 4, clRock, 4, clHill, 4, clFood, 2));
258 setSunColor(0.917, 0.828, 0.734);
259 setWaterColor(0, 0.501961, 1);
260 setWaterTint(0.501961, 1, 1);
261 setWaterWaviness(2.5);
262 setWaterType("ocean");
263 setWaterMurkiness(0.49);
266 setFogThickness(0.25);
270 setPPSaturation(0.51);