1 RMS.LoadLibrary("rmgen");
3 const tGrass = ["steppe_grass_a", "steppe_grass_b", "steppe_grass_c", "steppe_grass_d"];
4 const tForestFloor = "steppe_grass_c";
5 const tGrassA = "steppe_grass_b";
6 const tGrassB = "steppe_grass_c";
7 const tGrassC = ["steppe_grass_b", "steppe_grass_c", "steppe_grass_d"];
8 const tGrassD = "steppe_grass_a";
9 const tDirt = ["steppe_dirt_a", "steppe_dirt_b"];
10 const tRoad = "road_stones";
11 const tRoadWild = "road_stones";
12 const tShoreBlend = "desert_shore_stones";
13 const tShore = "dirta";
14 const tWater = "desert_sand_wet";
16 const oPoplar = "gaia/flora_tree_poplar_lombardy";
17 const oBush = "gaia/flora_bush_temperate";
18 const oBerryBush = "gaia/flora_bush_berry";
19 const oRabbit = "gaia/fauna_rabbit";
20 const oSheep = "gaia/fauna_sheep";
21 const oStoneLarge = "gaia/geology_stonemine_medit_quarry";
22 const oStoneSmall = "gaia/geology_stone_mediterranean";
23 const oMetalLarge = "gaia/geology_metal_mediterranean_slabs";
25 const aGrass = "actor|props/flora/grass_soft_small_tall.xml";
26 const aGrassShort = "actor|props/flora/grass_soft_large.xml";
27 const aRockLarge = "actor|geology/stone_granite_med.xml";
28 const aRockMedium = "actor|geology/stone_granite_med.xml";
29 const aBushMedium = "actor|props/flora/bush_medit_me.xml";
30 const aBushSmall = "actor|props/flora/bush_medit_sm.xml";
32 const pForest = [tForestFloor + TERRAIN_SEPARATOR + oPoplar, tForestFloor];
36 var numPlayers = getNumPlayers();
37 var mapSize = getMapSize();
38 var mapArea = mapSize*mapSize;
40 var clPlayer = createTileClass();
41 var clHill = createTileClass();
42 var clForest = createTileClass();
43 var clDirt = createTileClass();
44 var clRock = createTileClass();
45 var clMetal = createTileClass();
46 var clFood = createTileClass();
47 var clBaseResource = createTileClass();
48 var clSettlement = createTileClass();
50 var [playerIDs, playerX, playerZ] = radialPlayerPlacement();
52 for (var i = 0; i < numPlayers; i++)
54 var id = playerIDs[i];
55 log("Creating base for player " + id + "...");
57 var radius = scaleByMapSize(15,25);
61 // get the x and z in tiles
62 var fx = fractionToTiles(playerX[i]);
63 var fz = fractionToTiles(playerZ[i]);
66 addCivicCenterAreaToClass(ix, iz, clPlayer);
68 // create the city patch
69 var cityRadius = radius/3;
70 var placer = new ClumpPlacer(PI*cityRadius*cityRadius, 0.6, 0.3, 10, ix, iz);
71 var painter = new LayeredPainter([tRoadWild, tRoad], [1]);
72 createArea(placer, painter, null);
74 placeCivDefaultEntities(fx, fz, id);
76 placeDefaultChicken(fx, fz, clBaseResource);
78 // create berry bushes
79 var bbAngle = randFloat(0, TWO_PI);
81 var bbX = round(fx + bbDist * cos(bbAngle));
82 var bbZ = round(fz + bbDist * sin(bbAngle));
83 var group = new SimpleGroup(
84 [new SimpleObject(oBerryBush, 5,5, 0,3)],
85 true, clBaseResource, bbX, bbZ
87 createObjectGroup(group, 0);
91 while(abs(mAngle - bbAngle) < PI/3)
93 mAngle = randFloat(0, TWO_PI);
96 var mX = round(fx + mDist * cos(mAngle));
97 var mZ = round(fz + mDist * sin(mAngle));
98 group = new SimpleGroup(
99 [new SimpleObject(oMetalLarge, 1,1, 0,0)],
100 true, clBaseResource, mX, mZ
102 createObjectGroup(group, 0);
104 // create stone mines
105 mAngle += randFloat(PI/8, PI/4);
106 mX = round(fx + mDist * cos(mAngle));
107 mZ = round(fz + mDist * sin(mAngle));
108 group = new SimpleGroup(
109 [new SimpleObject(oStoneLarge, 1,1, 0,2)],
110 true, clBaseResource, mX, mZ
112 createObjectGroup(group, 0);
113 var hillSize = PI * radius * radius;
114 // create starting trees
115 var num = floor(hillSize / 100);
116 var tAngle = randFloat(-PI/3, 4*PI/3);
117 var tDist = randFloat(11, 13);
118 var tX = round(fx + tDist * cos(tAngle));
119 var tZ = round(fz + tDist * sin(tAngle));
120 group = new SimpleGroup(
121 [new SimpleObject(oPoplar, num, num, 0,5)],
122 false, clBaseResource, tX, tZ
124 createObjectGroup(group, 0, avoidClasses(clBaseResource,2));
126 placeDefaultDecoratives(fx, fz, aGrassShort, clBaseResource, radius);
131 log("Creating bumps...");
132 placer = new ChainPlacer(1, floor(scaleByMapSize(4, 6)), floor(scaleByMapSize(2, 5)), 0.5);
133 painter = new SmoothElevationPainter(ELEVATION_MODIFY, 2, 2);
137 avoidClasses(clPlayer, 13),
138 scaleByMapSize(300, 800)
141 // calculate desired number of trees for map (based on size)
144 var MAX_TREES = 1000;
147 var totalTrees = scaleByMapSize(MIN_TREES, MAX_TREES);
148 var numForest = totalTrees * P_FOREST;
149 var numStragglers = totalTrees * (1.0 - P_FOREST);
151 log("Creating forests...");
152 var types = [[[tForestFloor, tGrass, pForest], [tForestFloor, pForest]]]; // some variation
154 var size = numForest / (scaleByMapSize(2,8) * numPlayers);
156 var num = 4 * floor(size / types.length);
157 for (var i = 0; i < types.length; ++i)
159 placer = new ChainPlacer(1, floor(scaleByMapSize(2, 3)), 4, 1);
160 painter = new LayeredPainter(
161 types[i], // terrains
166 [painter, paintClass(clForest)],
167 avoidClasses(clPlayer, 13, clForest, 20, clHill, 1),
174 log("Creating grass patches...");
175 createLayeredPatches(
176 [scaleByMapSize(5, 48), scaleByMapSize(6, 84), scaleByMapSize(8, 128)],
177 [[tGrass,tGrassA,tGrassC],[tGrass,tGrassA,tGrassC], [tGrass,tGrassA,tGrassC]],
179 avoidClasses(clForest, 0, clHill, 0, clDirt, 2, clPlayer, 10),
180 scaleByMapSize(50, 70),
184 log("Creating dirt patches...");
185 createLayeredPatches(
186 [scaleByMapSize(5, 32), scaleByMapSize(6, 48), scaleByMapSize(7, 80)],
189 avoidClasses(clForest, 0, clHill, 0, clDirt, 2, clPlayer, 10),
190 scaleByMapSize(50, 90),
196 log("Creating big patches...");
197 createLayeredPatches(
198 [scaleByMapSize(10, 60), scaleByMapSize(15, 90), scaleByMapSize(20, 120)],
201 avoidClasses(clHill, 0, clPlayer, 8),
202 scaleByMapSize(30, 90),
208 log("Creating stone mines...");
209 group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
210 createObjectGroupsDeprecated(group, 0,
211 avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
212 scaleByMapSize(1,4), 100
215 log("Creating small stone quarries...");
216 group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
217 createObjectGroupsDeprecated(group, 0,
218 avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
219 scaleByMapSize(1,4), 100
222 log("Creating metal mines...");
223 group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
224 createObjectGroupsDeprecated(group, 0,
225 avoidClasses(clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clHill, 1),
226 scaleByMapSize(2,8), 100
231 log("Creating small decorative rocks...");
232 group = new SimpleGroup(
233 [new SimpleObject(aRockMedium, 1,3, 0,1)],
236 createObjectGroupsDeprecated(
238 avoidClasses(clForest, 0, clPlayer, 10, clHill, 0),
239 scaleByMapSize(16, 262), 50
242 log("Creating large decorative rocks...");
243 group = new SimpleGroup(
244 [new SimpleObject(aRockLarge, 1,2, 0,1), new SimpleObject(aRockMedium, 1,3, 0,2)],
247 createObjectGroupsDeprecated(
249 avoidClasses(clForest, 0, clPlayer, 10, clHill, 0),
250 scaleByMapSize(8, 131), 50
255 log("Creating rabbits...");
256 group = new SimpleGroup(
257 [new SimpleObject(oRabbit, 5,7, 0,4)],
260 createObjectGroupsDeprecated(group, 0,
261 avoidClasses(clForest, 0, clPlayer, 10, clHill, 1, clFood, 20),
265 log("Creating berry bush...");
266 group = new SimpleGroup(
267 [new SimpleObject(oBerryBush, 5,7, 0,4)],
270 createObjectGroupsDeprecated(group, 0,
271 avoidClasses(clForest, 0, clPlayer, 20, clHill, 1, clFood, 20),
272 randIntInclusive(1, 4) * numPlayers + 2, 50
277 log("Creating sheep...");
278 group = new SimpleGroup(
279 [new SimpleObject(oSheep, 2,3, 0,2)],
282 createObjectGroupsDeprecated(group, 0,
283 avoidClasses(clForest, 0, clPlayer, 10, clHill, 1, clFood, 20),
289 log("Creating straggler trees...");
290 var types = [oBush, oPoplar]; // some variation
291 var num = floor(numStragglers / types.length);
292 for (var i = 0; i < types.length; ++i)
294 group = new SimpleGroup(
295 [new SimpleObject(types[i], 1,1, 0,3)],
298 createObjectGroupsDeprecated(group, 0,
299 avoidClasses(clForest, 1, clHill, 1, clPlayer, 13, clMetal, 6, clRock, 6),
304 log("Creating large grass tufts...");
305 group = new SimpleGroup(
306 [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)]
308 createObjectGroupsDeprecated(group, 0,
309 avoidClasses(clHill, 2, clPlayer, 2, clDirt, 1, clForest, 0),
310 scaleByMapSize(13, 200)
315 log("Creating bushes...");
316 group = new SimpleGroup(
317 [new SimpleObject(aBushMedium, 1,2, 0,2), new SimpleObject(aBushSmall, 2,4, 0,2)]
319 createObjectGroupsDeprecated(group, 0,
320 avoidClasses(clHill, 1, clPlayer, 1, clDirt, 1),
321 scaleByMapSize(13, 200), 50
324 setFogThickness(0.1);
328 setPPSaturation(0.45);