Ticket #4354: artic_tundra.js

File artic_tundra.js, 9.8 KB (added by FeXoR, 7 years ago)

Fixed version of arctic_tundra.js - still a warning about undefined var "counts"

Line 
1RMS.LoadLibrary("rmgen");
2
3
4{
5 setFogThickness(0.56);
6 setFogFactor(0.6);
7
8 setPPEffect("hdr");
9 setPPSaturation(0.48);
10 setPPContrast(0.53);
11 setPPBloom(0.12);
12
13 var tPrimary = ["polar_ice_snow"];
14 var tForestFloor = "polar_grass_snow";
15 var tCliff = ["polar_cliff_a", "polar_cliff_b", "polar_cliff_snow"];
16 var tSecondary = "polar_tundra";
17 var tHalfSnow = ["polar_grass_snow", "ice_dirt"];
18 var tSnowLimited = ["polar_snow_rocks", "polar_ice"];
19 var tDirt = "ice_dirt";
20 var tRoad = "polar_ice_b";
21 var tRoadWild = "polar_tundra_snow";
22 var tShore = "polar_snow_a";
23 var tWater = "polar_ice_c";
24 var tHill = "polar_snow_rocks";
25
26 // gaia entities
27 var oBush = "gaia/flora_bush_badlands";
28 var oBerryBush = "gaia/flora_bush_berry";
29 var oChicken = "gaia/fauna_chicken";
30 var oWolf = "gaia/fauna_wolf_snow";
31 var oWhaleFin = "gaia/fauna_whale_fin";
32 var oWhaleHumpback = "gaia/fauna_whale_humpback";
33 var oFish = "gaia/fauna_fish";
34 var oStoneLarge = "gaia/geology_stonemine_alpine_quarry";
35 var oStoneSmall = "gaia/geology_stone_alpine_a";
36 var oMetalLarge = "gaia/geology_metal_alpine_slabs";
37
38 // decorative props
39 var aRockLarge = "actor|geology/stone_granite_med.xml";
40 var aRockMedium = "actor|geology/stone_granite_med.xml";
41 var aIceberg = "actor|props/special/eyecandy/iceberg.xml";
42}
43
44//other constants
45const pForest = [tForestFloor + TERRAIN_SEPARATOR + oBush, tForestFloor];
46
47// initialize map
48log("Initializing map...");
49
50InitMap();
51
52const numPlayers = getNumPlayers();
53const mapSize = getMapSize();
54const mapArea = mapSize*mapSize;
55
56// create tile classes
57var clPlayer = createTileClass();
58var clHill = createTileClass();
59var clForest = createTileClass();
60var clWater = createTileClass();
61var clDirt = createTileClass();
62var clRock = createTileClass();
63var clMetal = createTileClass();
64var clFood = createTileClass();
65var clBaseResource = createTileClass();
66var clSettlement = createTileClass();
67
68//cover the ground with the primary terrain chosen in the beginning
69for (var ix = 0; ix < mapSize; ix++)
70{
71 for (var iz = 0; iz < mapSize; iz++)
72 {
73 var x = ix / (mapSize + 1.0);
74 var z = iz / (mapSize + 1.0);
75 placeTerrain(ix, iz, tPrimary);
76 }
77}
78
79// randomize player order
80var playerIDs = [];
81for (var i = 0; i < numPlayers; i++)
82{
83 playerIDs.push(i+1);
84}
85playerIDs = sortPlayers(playerIDs);
86
87// place players
88var playerX = new Array(numPlayers);
89var playerZ = new Array(numPlayers);
90var playerAngle = new Array(numPlayers);
91
92var startAngle = randFloat(0, TWO_PI);
93for (var i = 0; i < numPlayers; i++)
94{
95 playerAngle[i] = startAngle + i*TWO_PI/numPlayers;
96 playerX[i] = 0.5 + 0.35*cos(playerAngle[i]);
97 playerZ[i] = 0.5 + 0.35*sin(playerAngle[i]);
98}
99
100for (var i = 0; i < numPlayers; i++)
101{
102 var id = playerIDs[i];
103 log("Creating base for player " + id + "...");
104
105 // some constants
106 var radius = scaleByMapSize(15,25);
107 var cliffRadius = 2;
108 var elevation = 20;
109
110 // get the x and z in tiles
111 var fx = fractionToTiles(playerX[i]);
112 var fz = fractionToTiles(playerZ[i]);
113 var ix = round(fx);
114 var iz = round(fz);
115 addToClass(ix, iz, clPlayer);
116 addToClass(ix+5, iz, clPlayer);
117 addToClass(ix, iz+5, clPlayer);
118 addToClass(ix-5, iz, clPlayer);
119 addToClass(ix, iz-5, clPlayer);
120
121 // create the city patch
122 var cityRadius = radius/3;
123 var placer = new ClumpPlacer(PI*cityRadius*cityRadius, 0.6, 0.3, 10, ix, iz);
124 var painter = new LayeredPainter([tRoadWild, tRoad], [1]);
125 createArea(placer, painter, null);
126
127 // create starting units
128 placeCivDefaultEntities(fx, fz, id);
129
130 // create animals
131 for (var j = 0; j < 2; ++j)
132 {
133 var aAngle = randFloat(0, TWO_PI);
134 var aDist = 7;
135 var aX = round(fx + aDist * cos(aAngle));
136 var aZ = round(fz + aDist * sin(aAngle));
137 var group = new SimpleGroup(
138 [new SimpleObject(oChicken, 5,5, 0,2)],
139 true, clBaseResource, aX, aZ
140 );
141 createObjectGroup(group, 0);
142 }
143
144 // create berry bushes
145 var bbAngle = randFloat(0, TWO_PI);
146 var bbDist = 12;
147 var bbX = round(fx + bbDist * cos(bbAngle));
148 var bbZ = round(fz + bbDist * sin(bbAngle));
149 group = new SimpleGroup(
150 [new SimpleObject(oBerryBush, 5,5, 0,3)],
151 true, clBaseResource, bbX, bbZ
152 );
153 createObjectGroup(group, 0);
154
155 // create metal mine
156 var mAngle = bbAngle;
157 while(abs(mAngle - bbAngle) < PI/3)
158 {
159 mAngle = randFloat(0, TWO_PI);
160 }
161 var mDist = 12;
162 var mX = round(fx + mDist * cos(mAngle));
163 var mZ = round(fz + mDist * sin(mAngle));
164 group = new SimpleGroup(
165 [new SimpleObject(oMetalLarge, 1,1, 0,0)],
166 true, clBaseResource, mX, mZ
167 );
168 createObjectGroup(group, 0);
169
170 // create stone mines
171 mAngle += randFloat(PI/8, PI/4);
172 mX = round(fx + mDist * cos(mAngle));
173 mZ = round(fz + mDist * sin(mAngle));
174 group = new SimpleGroup(
175 [new SimpleObject(oStoneLarge, 1,1, 0,2)],
176 true, clBaseResource, mX, mZ
177 );
178 createObjectGroup(group, 0);
179 var hillSize = PI * radius * radius;
180
181 // create wood
182 var bbAngle = randFloat(0, TWO_PI);
183 var bbDist = 13;
184 var bbX = round(fx + bbDist * cos(bbAngle));
185 var bbZ = round(fz + bbDist * sin(bbAngle));
186 group = new SimpleGroup(
187 [new SimpleObject("gaia/special_treasure_wood", 14,14, 0,3)],
188 true, clBaseResource, bbX, bbZ
189 );
190 createObjectGroup(group, 0);
191};
192
193RMS.SetProgress(20);
194
195// create hills
196 createHills([tPrimary, tCliff, tHill], avoidClasses(clPlayer, 20, clForest, 20, clHill, 35, clWater, 2), clHill, scaleByMapSize(1, 240));
197
198RMS.SetProgress(30);
199
200var lakeAreas = [];
201var playerConstraint = new AvoidTileClassConstraint(clPlayer, 20);
202var waterConstraint = new AvoidTileClassConstraint(clWater, 8);
203
204for (var x = 0; x < mapSize; ++x)
205 for (var z = 0; z < mapSize; ++z)
206 if (playerConstraint.allows(x, z) && waterConstraint.allows(x, z))
207 lakeAreas.push([x, z]);
208
209var chosenPoint;
210var lakeAreaLen;
211
212// create lakes
213log("Creating lakes...");
214
215var numLakes = scaleByMapSize(10, 16)
216for (var i = 0; i < numLakes; ++i)
217{
218 lakeAreaLen = lakeAreas.length;
219 if (!lakeAreaLen)
220 break;
221
222 chosenPoint = lakeAreas[randInt(lakeAreaLen)];
223
224 placer = new ChainPlacer(1, floor(scaleByMapSize(4, 8)), floor(scaleByMapSize(40, 180)), 0.7, chosenPoint[0], chosenPoint[1]);
225 var terrainPainter = new LayeredPainter(
226 [tShore, tWater, tWater], // terrains
227 [1, 3] // widths
228 );
229 var elevationPainter = new SmoothElevationPainter(ELEVATION_SET, -5, 5);
230 var newLake = createAreas(
231 placer,
232 [terrainPainter, elevationPainter, paintClass(clWater)],
233 avoidClasses(clPlayer, 20),
234 1, 1
235 );
236
237 if (newLake && newLake.length)
238 {
239 var n = 0;
240 for (var j = 0; j < lakeAreaLen; ++j)
241 {
242 var x = lakeAreas[j][0], z = lakeAreas[j][1];
243 if (playerConstraint.allows(x, z) && waterConstraint.allows(x, z))
244 lakeAreas[n++] = lakeAreas[j];
245 }
246 lakeAreas.length = n;
247 }
248
249}
250
251RMS.SetProgress(45);
252
253paintTerrainBasedOnHeight(3, floor(scaleByMapSize(20, 40)), 0, tCliff);
254paintTerrainBasedOnHeight(floor(scaleByMapSize(20, 40)), 100, 3, tSnowLimited);
255
256// create bumps
257createBumps(avoidClasses(clWater, 2, clPlayer, 20));
258
259// create forests
260createForests(
261 [tSecondary, tForestFloor, tForestFloor, pForest, pForest],
262 avoidClasses(clPlayer, 20, clForest, 22, clHill, 20, clWater, 2),
263 clForest,
264 1.0
265);
266
267RMS.SetProgress(60);
268
269// create dirt patches
270log("Creating dirt patches...");
271createLayeredPatches(
272 [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
273 [[tDirt,tHalfSnow], [tHalfSnow,tSnowLimited]],
274 [2],
275 avoidClasses(clWater, 3, clForest, 0, clHill, 0, clDirt, 5, clPlayer, 12)
276);
277
278// create shrubs
279log("Creating shrubs...");
280createPatches(
281 [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
282 tSecondary,
283 avoidClasses(clWater, 3, clForest, 0, clHill, 0, clDirt, 5, clPlayer, 12)
284);
285
286RMS.SetProgress(65);
287
288log("Creating stone mines...");
289// create stone quarries
290createMines(
291 [
292 [new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
293 [new SimpleObject(oStoneSmall, 2,5, 1,3)]
294 ],
295 avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clRock, 18, clHill, 1)
296)
297
298log("Creating metal mines...");
299// create large metal quarries
300createMines(
301 [
302 [new SimpleObject(oMetalLarge, 1,1, 0,4)]
303 ],
304 avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clMetal, 18, clRock, 5, clHill, 1),
305 clMetal
306)
307
308RMS.SetProgress(70);
309
310// create land decoration
311createDecoration
312(
313 [[new SimpleObject(aRockMedium, 1,3, 0,1)],
314 [new SimpleObject(aRockLarge, 1,2, 0,1), new SimpleObject(aRockMedium, 1,3, 0,1)]
315 ],
316 [
317 scaleByMapSize(16, 262),
318 scaleByMapSize(8, 131),
319 ],
320 avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0)
321);
322
323// create water decoration
324createDecoration
325(
326 [[new SimpleObject(aIceberg, 1,2, 0,1)]
327 ],
328 [
329 scaleByMapSize(8, 131)
330 ],
331 stayClasses(clWater, 6)
332);
333
334
335RMS.SetProgress(75);
336
337// create animals
338createFood
339(
340 [
341 [new SimpleObject(oWolf, 5,7, 0,4)],
342 [new SimpleObject(oWhaleFin, 1,2, 0,1)],
343 [new SimpleObject(oWhaleHumpback, 1,2, 0,1)]
344 ],
345 [
346 3 * numPlayers,
347 3 * numPlayers
348 ],
349 [avoidClasses(clFood, 20), stayClasses(clWater, 6)]
350);
351
352// create fruits
353createFood
354(
355 [
356 [new SimpleObject(oBerryBush, 5,7, 0,4)]
357 ],
358 [
359 randInt(1, 4) * numPlayers + 2
360 ],
361 avoidClasses(clWater, 3, clForest, 0, clPlayer, 20, clHill, 1, clFood, 10)
362);
363
364// create fish
365createFood
366(
367 [
368 [new SimpleObject(oFish, 2,3, 0,2)]
369 ],
370 [
371 15 * numPlayers
372 ],
373 [avoidClasses(clFood, 20), stayClasses(clWater, 6)]
374);
375
376RMS.SetProgress(85);
377
378// create straggler trees
379var types = [oBush];
380createStragglerTrees(types, avoidClasses(clWater, 5, clForest, 3, clHill, 1, clPlayer, 12, clMetal, 1, clRock, 1));
381
382var random_var = randInt(1,5)
383
384if (random_var==1)
385 setSkySet("cirrus");
386else if (random_var ==2)
387 setSkySet("cumulus");
388else if (random_var ==3)
389 setSkySet("sunny");
390else if (random_var ==4)
391 setSkySet("overcast");
392else if (random_var ==3)
393 setSkySet("rain");
394
395
396setSunRotation(randFloat(0, TWO_PI));
397setSunElevation(randFloat(PI/ 4, PI / 2));
398setWaterColor(0.0, 0.047, 0.286); // dark majestic blue
399setWaterTint(0.462, 0.756, 0.866); // light blue
400setWaterMurkiness(0.92);
401setWaterWaviness(1.0);
402setWaterType("clap");
403
404// Export map data
405ExportMap();