Ticket #4012: map.js2016-6-11rename.patch
File map.js2016-6-11rename.patch, 33.6 KB (added by , 8 years ago) |
---|
-
binaries/data/mods/public/maps/random/pheonician_levant.js
1 RMS.LoadLibrary("rmgen");2 3 //TILE_CENTERED_HEIGHT_MAP = true;4 5 const tCity = "medit_city_pavement";6 const tCityPlaza = "medit_city_pavement";7 const tHill = ["medit_dirt", "medit_dirt_b", "medit_dirt_c", "medit_rocks_grass", "medit_rocks_grass"];8 const tMainDirt = "medit_dirt";9 const tCliff = "medit_cliff_aegean";10 const tForestFloor = "medit_rocks_shrubs";11 const tGrass = "medit_rocks_grass";12 const tRocksShrubs = "medit_rocks_shrubs";13 const tRocksGrass = "medit_rocks_grass";14 const tDirt = "medit_dirt_b";15 const tDirtB = "medit_dirt_c";16 const tShore = "medit_sand";17 const tWater = "medit_sand_wet";18 19 // gaia entities20 const oGrapeBush = "gaia/flora_bush_grapes";21 const oChicken = "gaia/fauna_chicken";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";35 36 // decorative props37 const aBush1 = "actor|props/flora/bush_medit_sm.xml";38 const aBush2 = "actor|props/flora/bush_medit_me.xml";39 const aBush3 = "actor|props/flora/bush_medit_la.xml";40 const aBush4 = "actor|props/flora/bush_medit_me.xml";41 const aBushes = [aBush1, aBush2, aBush3, aBush4];42 const aDecorativeRock = "actor|geology/stone_granite_med.xml";43 44 // terrain + entity (for painting)45 const pForest = [tForestFloor + TERRAIN_SEPARATOR + oDatePalm, tForestFloor + TERRAIN_SEPARATOR + oSDatePalm, tForestFloor + TERRAIN_SEPARATOR + oCarob, tForestFloor, tForestFloor];46 47 log("Initializing map...");48 49 InitMap();50 51 const numPlayers = getNumPlayers();52 const mapSize = getMapSize();53 const mapArea = mapSize*mapSize;54 55 // create tile classes56 57 var clPlayer = createTileClass();58 var clForest = createTileClass();59 var clWater = createTileClass();60 var clDirt = createTileClass();61 var clRock = createTileClass();62 var clMetal = createTileClass();63 var clFood = createTileClass();64 var clBaseResource = createTileClass();65 var clSettlement = createTileClass();66 var clGrass = createTileClass();67 var clHill = createTileClass();68 var clIsland = createTileClass();69 70 // randomize player order71 var playerIDs = [];72 for (var i = 0; i < numPlayers; i++)73 {74 playerIDs.push(i+1);75 }76 playerIDs = sortPlayers(playerIDs);77 78 // place players79 80 var playerX = new Array(numPlayers);81 var playerZ = new Array(numPlayers);82 var playerPos = new Array(numPlayers);83 84 for (var i = 0; i < numPlayers; i++)85 {86 playerPos[i] = (i + 1) / (numPlayers + 1);87 playerZ[i] = playerPos[i];88 playerX[i] = 0.66 + 0.2*(i%2)89 }90 91 for (var i = 0; i < numPlayers; i++)92 {93 var id = playerIDs[i];94 log("Creating base for player " + id + "...");95 96 // some constants97 var radius = scaleByMapSize(15,25);98 var cliffRadius = 2;99 var elevation = 20;100 101 // get the x and z in tiles102 var fx = fractionToTiles(playerX[i]);103 var fz = fractionToTiles(playerZ[i]);104 var ix = floor(fx);105 var iz = floor(fz);106 addToClass(ix, iz, clPlayer);107 addToClass(ix+5, iz, clPlayer);108 addToClass(ix, iz+5, clPlayer);109 addToClass(ix-5, iz, clPlayer);110 addToClass(ix, iz-5, clPlayer);111 112 // create the city patch113 var cityRadius = radius/3;114 var placer = new ClumpPlacer(PI*cityRadius*cityRadius, 0.6, 0.3, 10, ix, iz);115 var painter = new LayeredPainter([tCityPlaza, tCity], [1]);116 createArea(placer, painter, null);117 118 // create starting units119 placeCivDefaultEntities(fx, fz, id);120 121 // create animals122 for (var j = 0; j < 2; ++j)123 {124 var aAngle = randFloat(0, TWO_PI);125 var aDist = 7;126 var aX = round(fx + aDist * cos(aAngle));127 var aZ = round(fz + aDist * sin(aAngle));128 var group = new SimpleGroup(129 [new SimpleObject(oChicken, 5,5, 0,2)],130 true, clBaseResource, aX, aZ131 );132 createObjectGroup(group, 0);133 }134 135 // create berry bushes136 var bbAngle = randFloat(0, TWO_PI);137 var bbDist = 12;138 var bbX = round(fx + bbDist * cos(bbAngle));139 var bbZ = round(fz + bbDist * sin(bbAngle));140 group = new SimpleGroup(141 [new SimpleObject(oGrapeBush, 5,5, 0,3)],142 true, clBaseResource, bbX, bbZ143 );144 createObjectGroup(group, 0);145 146 // create metal mine147 var mAngle = bbAngle;148 while(abs(mAngle - bbAngle) < PI/3)149 {150 mAngle = randFloat(0, TWO_PI);151 }152 var mDist = 12;153 var mX = round(fx + mDist * cos(mAngle));154 var mZ = round(fz + mDist * sin(mAngle));155 group = new SimpleGroup(156 [new SimpleObject(oMetalLarge, 1,1, 0,0)],157 true, clBaseResource, mX, mZ158 );159 createObjectGroup(group, 0);160 161 // create stone mines162 mAngle += randFloat(PI/8, PI/4);163 mX = round(fx + mDist * cos(mAngle));164 mZ = round(fz + mDist * sin(mAngle));165 group = new SimpleGroup(166 [new SimpleObject(oStoneLarge, 1,1, 0,2)],167 true, clBaseResource, mX, mZ168 );169 createObjectGroup(group, 0);170 var hillSize = PI * radius * radius;171 // create starting trees172 var num = 2;173 var tAngle = randFloat(-PI/3, 4*PI/3);174 var tDist = randFloat(11, 13);175 var tX = round(fx + tDist * cos(tAngle));176 var tZ = round(fz + tDist * sin(tAngle));177 group = new SimpleGroup(178 [new SimpleObject(oCarob, num, num, 0,5)],179 false, clBaseResource, tX, tZ180 );181 createObjectGroup(group, 0, avoidClasses(clBaseResource,2));182 183 // create grass tufts184 var num = hillSize / 250;185 for (var j = 0; j < num; j++)186 {187 var gAngle = randFloat(0, TWO_PI);188 var gDist = radius - (5 + randInt(7));189 var gX = round(fx + gDist * cos(gAngle));190 var gZ = round(fz + gDist * sin(gAngle));191 group = new SimpleGroup(192 [new SimpleObject(aBush1, 2,5, 0,1, -PI/8,PI/8)],193 false, clBaseResource, gX, gZ194 );195 createObjectGroup(group, 0);196 }197 }198 199 RMS.SetProgress(30);200 201 202 log("Creating sea");203 var theta = randFloat(0, 1);204 var seed = randFloat(2,3);205 for (var ix = 0; ix < mapSize; ix++)206 {207 for (var iz = 0; iz < mapSize; iz++)208 {209 var x = ix / (mapSize + 1.0);210 var z = iz / (mapSize + 1.0);211 212 // add the rough shape of the water213 var km = 20/scaleByMapSize(35, 160);214 var cu = km*rndRiver(theta+z*0.5*(mapSize/64),seed);215 216 var fadeDist = 0.05;217 218 if (x < cu + 0.5)219 {220 var h;221 if (x < (cu + 0.5 + fadeDist))222 {223 h = 1 + 4.0 * (1 - ((cu + 0.5 + fadeDist) - x)/fadeDist);224 }225 else226 {227 h = -3.0;228 }229 230 if (h < -1.5)231 {232 placeTerrain(ix, iz, tWater);233 }234 else235 {236 placeTerrain(ix, iz, tShore);237 }238 239 setHeight(ix, iz, h);240 if (h < 0){241 addToClass(ix, iz, clWater);242 }243 }244 }245 }246 247 RMS.SetProgress(40);248 // create bumps249 log("Creating bumps...");250 placer = new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1);251 painter = new SmoothElevationPainter(ELEVATION_MODIFY, 2, 2);252 createAreas(253 placer,254 painter,255 avoidClasses(clWater, 2, clPlayer, 20),256 scaleByMapSize(100, 200)257 );258 259 // create hills260 log("Creating hills...");261 placer = new ChainPlacer(1, floor(scaleByMapSize(4, 6)), floor(scaleByMapSize(16, 40)), 0.5);262 var terrainPainter = new LayeredPainter(263 [tCliff, tHill], // terrains264 [2] // widths265 );266 var elevationPainter = new SmoothElevationPainter(ELEVATION_SET, 15, 2);267 createAreas(268 placer,269 [terrainPainter, elevationPainter, paintClass(clHill)],270 avoidClasses(clPlayer, 20, clForest, 1, clHill, 15, clWater, 0),271 scaleByMapSize(1, 4) * numPlayers * 3272 );273 274 // calculate desired number of trees for map (based on size)275 const MIN_TREES = 500;276 const MAX_TREES = 2500;277 const P_FOREST = 0.5;278 279 var totalTrees = scaleByMapSize(MIN_TREES, MAX_TREES);280 var numForest = totalTrees * P_FOREST;281 var numStragglers = totalTrees * (1.0 - P_FOREST);282 283 // create forests284 log("Creating forests...");285 var num = scaleByMapSize(10,42);286 placer = new ChainPlacer(1, floor(scaleByMapSize(3, 5)), numForest / (num * floor(scaleByMapSize(2,5))), 0.5);287 painter = new TerrainPainter([tForestFloor, pForest]);288 createAreas(placer, [painter, paintClass(clForest)],289 avoidClasses(clPlayer, 20, clForest, 10, clWater, 1, clHill, 1, clBaseResource, 3),290 num, 50291 );292 293 RMS.SetProgress(50);294 295 296 297 298 299 300 // create grass patches301 log("Creating grass patches...");302 var sizes = [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)];303 for (var i = 0; i < sizes.length; i++)304 {305 placer = new ChainPlacer(1, floor(scaleByMapSize(3, 5)), sizes[i], 0.5);306 painter = new LayeredPainter(307 [[tGrass,tRocksShrubs],[tRocksShrubs,tRocksGrass], [tRocksGrass,tGrass]], // terrains308 [1,1] // widths309 );310 createAreas(311 placer,312 [painter, paintClass(clDirt)],313 avoidClasses(clForest, 0, clGrass, 5, clPlayer, 10, clWater, 4, clDirt, 5, clHill, 1),314 scaleByMapSize(15, 45)315 );316 }317 318 RMS.SetProgress(55);319 320 // create dirt patches321 log("Creating dirt patches...");322 var sizes = [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)];323 for (var i = 0; i < sizes.length; i++)324 {325 placer = new ChainPlacer(1, floor(scaleByMapSize(3, 5)), sizes[i], 0.5);326 painter = new LayeredPainter(327 [[tDirt,tDirtB],[tDirt,tMainDirt], [tDirtB,tMainDirt]], // terrains328 [1,1] // widths329 );330 createAreas(331 placer,332 [painter, paintClass(clDirt)],333 avoidClasses(clForest, 0, clDirt, 5, clPlayer, 10, clWater, 4, clGrass, 5, clHill, 1),334 scaleByMapSize(15, 45)335 );336 }337 338 339 340 RMS.SetProgress(60);341 342 // create cyprus343 log("Creating cyprus...");344 placer = new ClumpPlacer(4.5 * scaleByMapSize(60, 540), 0.2, 0.1, 0.01);345 var terrainPainter = new LayeredPainter(346 [tShore, tHill], // terrains347 [12] // widths348 );349 var elevationPainter = new SmoothElevationPainter(ELEVATION_SET, 6, 8);350 createAreas(351 placer,352 [terrainPainter, elevationPainter, paintClass(clIsland)],353 [stayClasses (clWater, 5)],354 1355 );356 357 log("Creating cyprus stone mines...");358 // create cyprus large stone quarries359 group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);360 createObjectGroups(group, 0,361 stayClasses(clIsland, 9),362 14 * scaleByMapSize(4,16), 100363 );364 365 // create cyprus small stone quarries366 group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);367 createObjectGroups(group, 0,368 stayClasses(clIsland, 9),369 14 * scaleByMapSize(4,16), 100370 );371 372 log("Creating cyprus metal mines...");373 // create cyprus large metal quarries374 group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);375 createObjectGroups(group, 0,376 stayClasses(clIsland, 9),377 14 * scaleByMapSize(4,16), 100378 );379 380 log("Creating stone mines...");381 // create large stone quarries382 group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);383 createObjectGroups(group, 0,384 avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clWater, 3, clHill, 1),385 scaleByMapSize(4,16), 100386 );387 388 // create small stone quarries389 group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);390 createObjectGroups(group, 0,391 avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clWater, 3, clHill, 1),392 scaleByMapSize(4,16), 100393 );394 395 log("Creating metal mines...");396 // create large metal quarries397 group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);398 createObjectGroups(group, 0,399 avoidClasses(clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clWater, 3, clHill, 1),400 scaleByMapSize(4,16), 100401 );402 403 RMS.SetProgress(65);404 405 // create small decorative rocks406 log("Creating small decorative rocks...");407 group = new SimpleGroup(408 [new SimpleObject(aDecorativeRock, 1,3, 0,1)],409 true410 );411 createObjectGroups(412 group, 0,413 avoidClasses(clWater, 1, clForest, 0, clPlayer, 0, clHill, 1),414 scaleByMapSize(16, 262), 50415 );416 417 418 // create shrubs419 log("Creating shrubs...");420 group = new SimpleGroup(421 [new SimpleObject(aBush2, 1,2, 0,1), new SimpleObject(aBush1, 1,3, 0,2), new SimpleObject(aBush4, 1,2, 0,1), new SimpleObject(aBush3, 1,3, 0,2)],422 true423 );424 createObjectGroups(425 group, 0,426 avoidClasses(clWater, 3, clPlayer, 0, clHill, 1),427 scaleByMapSize(40, 360), 50428 );429 430 RMS.SetProgress(70);431 432 // create fish433 log("Creating fish...");434 group = new SimpleGroup([new SimpleObject(oFish, 1,3, 2,6)], true, clFood);435 createObjectGroups(group, 0,436 [avoidClasses(clIsland, 2, clFood, 10), stayClasses(clWater, 5)],437 3*scaleByMapSize(5,20), 50438 );439 440 // create sheeps441 log("Creating sheeps...");442 group = new SimpleGroup([new SimpleObject(oSheep, 5,7, 0,4)], true, clFood);443 createObjectGroups(group, 0,444 avoidClasses(clForest, 0, clPlayer, 7, clWater, 3, clFood, 10, clHill, 1),445 scaleByMapSize(5,20), 50446 );447 448 // create goats449 log("Creating goats...");450 group = new SimpleGroup([new SimpleObject(oGoat, 2,4, 0,3)], true, clFood);451 createObjectGroups(group, 0,452 avoidClasses(clForest, 0, clPlayer, 7, clWater, 3, clFood, 10, clHill, 1),453 scaleByMapSize(5,20), 50454 );455 456 // create deers457 log("Creating deers...");458 group = new SimpleGroup([new SimpleObject(oDeer, 2,4, 0,2)], true, clFood);459 createObjectGroups(group, 0,460 avoidClasses(clForest, 0, clPlayer, 7, clWater, 3, clFood, 10, clHill, 1),461 scaleByMapSize(5,20), 50462 );463 464 // create grape bushes465 log("Creating grape bushes...");466 group = new SimpleGroup(467 [new SimpleObject(oGrapeBush, 5,7, 0,4)],468 true, clFood469 );470 createObjectGroups(group, 0,471 avoidClasses(clWater, 3, clForest, 0, clPlayer, 15, clHill, 1, clFood, 7),472 randInt(1, 4) * numPlayers + 2, 50473 );474 475 RMS.SetProgress(90);476 477 // create straggler trees478 log("Creating straggler trees...");479 var types = [oDatePalm, oSDatePalm, oCarob, oFanPalm, oPoplar, oCypress]; // some variation480 var num = floor(numStragglers / types.length);481 for (var i = 0; i < types.length; ++i)482 {483 group = new SimpleGroup([new SimpleObject(types[i], 1,1, 0,0)], true);484 createObjectGroups(group, 0,485 avoidClasses(clForest, 0, clWater, 1, clPlayer, 8, clMetal, 1, clHill, 1),486 num487 );488 }489 490 log("Creating straggler trees...");491 var types = [oDatePalm, oSDatePalm, oCarob, oFanPalm, oPoplar, oCypress]; // some variation492 var num = 3*floor(numStragglers / types.length);493 for (var i = 0; i < types.length; ++i)494 {495 group = new SimpleGroup([new SimpleObject(types[i], 1,1, 0,0)], true);496 createObjectGroups(group, 0,497 stayClasses(clIsland, 9),498 num499 );500 }501 502 // Set environment503 setSkySet("sunny");504 setSunColor(0.917, 0.828, 0.734);505 setWaterColor(0.263,0.314,0.631);506 setWaterTint(0.133, 0.725,0.855);507 setWaterWaviness(2.0);508 setWaterType("ocean");509 setWaterMurkiness(0.8);510 511 setTerrainAmbientColor(0.57, 0.58, 0.55);512 setUnitsAmbientColor(0.447059, 0.509804, 0.54902);513 514 setSunElevation(0.671884);515 setSunRotation(-0.582913);516 517 setFogFactor(0.2);518 setFogThickness(0.15);519 setFogColor(0.8, 0.7, 0.6);520 521 setPPEffect("hdr");522 setPPContrast(0.53);523 setPPSaturation(0.47);524 setPPBloom(0.52);525 526 // Export map data527 ExportMap(); -
binaries/data/mods/public/maps/random/pheonician_levant.json
1 {2 "settings" : {3 "Name" : "Phoenician Levant",4 "Script" : "pheonician_levant.js",5 "Description" : "Players start in the eastern part of the map while a great sea is located to the west.",6 "BaseTerrain" : ["medit_dirt", "medit_dirt_b", "medit_dirt_c", "medit_rocks_grass", "medit_rocks_grass"],7 "BaseHeight" : 1,8 "Preview" : "phoenician_levant.png",9 "CircularMap" : false10 }11 }12 No newline at end of file -
binaries/data/mods/public/maps/random/phoenician_levant.js
1 RMS.LoadLibrary("rmgen"); 2 3 //TILE_CENTERED_HEIGHT_MAP = true; 4 5 const tCity = "medit_city_pavement"; 6 const tCityPlaza = "medit_city_pavement"; 7 const tHill = ["medit_dirt", "medit_dirt_b", "medit_dirt_c", "medit_rocks_grass", "medit_rocks_grass"]; 8 const tMainDirt = "medit_dirt"; 9 const tCliff = "medit_cliff_aegean"; 10 const tForestFloor = "medit_rocks_shrubs"; 11 const tGrass = "medit_rocks_grass"; 12 const tRocksShrubs = "medit_rocks_shrubs"; 13 const tRocksGrass = "medit_rocks_grass"; 14 const tDirt = "medit_dirt_b"; 15 const tDirtB = "medit_dirt_c"; 16 const tShore = "medit_sand"; 17 const tWater = "medit_sand_wet"; 18 19 // gaia entities 20 const oGrapeBush = "gaia/flora_bush_grapes"; 21 const oChicken = "gaia/fauna_chicken"; 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"; 35 36 // decorative props 37 const aBush1 = "actor|props/flora/bush_medit_sm.xml"; 38 const aBush2 = "actor|props/flora/bush_medit_me.xml"; 39 const aBush3 = "actor|props/flora/bush_medit_la.xml"; 40 const aBush4 = "actor|props/flora/bush_medit_me.xml"; 41 const aBushes = [aBush1, aBush2, aBush3, aBush4]; 42 const aDecorativeRock = "actor|geology/stone_granite_med.xml"; 43 44 // terrain + entity (for painting) 45 const pForest = [tForestFloor + TERRAIN_SEPARATOR + oDatePalm, tForestFloor + TERRAIN_SEPARATOR + oSDatePalm, tForestFloor + TERRAIN_SEPARATOR + oCarob, tForestFloor, tForestFloor]; 46 47 log("Initializing map..."); 48 49 InitMap(); 50 51 const numPlayers = getNumPlayers(); 52 const mapSize = getMapSize(); 53 const mapArea = mapSize*mapSize; 54 55 // create tile classes 56 57 var clPlayer = createTileClass(); 58 var clForest = createTileClass(); 59 var clWater = createTileClass(); 60 var clDirt = createTileClass(); 61 var clRock = createTileClass(); 62 var clMetal = createTileClass(); 63 var clFood = createTileClass(); 64 var clBaseResource = createTileClass(); 65 var clSettlement = createTileClass(); 66 var clGrass = createTileClass(); 67 var clHill = createTileClass(); 68 var clIsland = createTileClass(); 69 70 // randomize player order 71 var playerIDs = []; 72 for (var i = 0; i < numPlayers; i++) 73 { 74 playerIDs.push(i+1); 75 } 76 playerIDs = sortPlayers(playerIDs); 77 78 // place players 79 80 var playerX = new Array(numPlayers); 81 var playerZ = new Array(numPlayers); 82 var playerPos = new Array(numPlayers); 83 84 for (var i = 0; i < numPlayers; i++) 85 { 86 playerPos[i] = (i + 1) / (numPlayers + 1); 87 playerZ[i] = playerPos[i]; 88 playerX[i] = 0.66 + 0.2*(i%2) 89 } 90 91 for (var i = 0; i < numPlayers; i++) 92 { 93 var id = playerIDs[i]; 94 log("Creating base for player " + id + "..."); 95 96 // some constants 97 var radius = scaleByMapSize(15,25); 98 var cliffRadius = 2; 99 var elevation = 20; 100 101 // get the x and z in tiles 102 var fx = fractionToTiles(playerX[i]); 103 var fz = fractionToTiles(playerZ[i]); 104 var ix = floor(fx); 105 var iz = floor(fz); 106 addToClass(ix, iz, clPlayer); 107 addToClass(ix+5, iz, clPlayer); 108 addToClass(ix, iz+5, clPlayer); 109 addToClass(ix-5, iz, clPlayer); 110 addToClass(ix, iz-5, clPlayer); 111 112 // create the city patch 113 var cityRadius = radius/3; 114 var placer = new ClumpPlacer(PI*cityRadius*cityRadius, 0.6, 0.3, 10, ix, iz); 115 var painter = new LayeredPainter([tCityPlaza, tCity], [1]); 116 createArea(placer, painter, null); 117 118 // create starting units 119 placeCivDefaultEntities(fx, fz, id); 120 121 // create animals 122 for (var j = 0; j < 2; ++j) 123 { 124 var aAngle = randFloat(0, TWO_PI); 125 var aDist = 7; 126 var aX = round(fx + aDist * cos(aAngle)); 127 var aZ = round(fz + aDist * sin(aAngle)); 128 var group = new SimpleGroup( 129 [new SimpleObject(oChicken, 5,5, 0,2)], 130 true, clBaseResource, aX, aZ 131 ); 132 createObjectGroup(group, 0); 133 } 134 135 // create berry bushes 136 var bbAngle = randFloat(0, TWO_PI); 137 var bbDist = 12; 138 var bbX = round(fx + bbDist * cos(bbAngle)); 139 var bbZ = round(fz + bbDist * sin(bbAngle)); 140 group = new SimpleGroup( 141 [new SimpleObject(oGrapeBush, 5,5, 0,3)], 142 true, clBaseResource, bbX, bbZ 143 ); 144 createObjectGroup(group, 0); 145 146 // create metal mine 147 var mAngle = bbAngle; 148 while(abs(mAngle - bbAngle) < PI/3) 149 { 150 mAngle = randFloat(0, TWO_PI); 151 } 152 var mDist = 12; 153 var mX = round(fx + mDist * cos(mAngle)); 154 var mZ = round(fz + mDist * sin(mAngle)); 155 group = new SimpleGroup( 156 [new SimpleObject(oMetalLarge, 1,1, 0,0)], 157 true, clBaseResource, mX, mZ 158 ); 159 createObjectGroup(group, 0); 160 161 // create stone mines 162 mAngle += randFloat(PI/8, PI/4); 163 mX = round(fx + mDist * cos(mAngle)); 164 mZ = round(fz + mDist * sin(mAngle)); 165 group = new SimpleGroup( 166 [new SimpleObject(oStoneLarge, 1,1, 0,2)], 167 true, clBaseResource, mX, mZ 168 ); 169 createObjectGroup(group, 0); 170 var hillSize = PI * radius * radius; 171 // create starting trees 172 var num = 2; 173 var tAngle = randFloat(-PI/3, 4*PI/3); 174 var tDist = randFloat(11, 13); 175 var tX = round(fx + tDist * cos(tAngle)); 176 var tZ = round(fz + tDist * sin(tAngle)); 177 group = new SimpleGroup( 178 [new SimpleObject(oCarob, num, num, 0,5)], 179 false, clBaseResource, tX, tZ 180 ); 181 createObjectGroup(group, 0, avoidClasses(clBaseResource,2)); 182 183 // create grass tufts 184 var num = hillSize / 250; 185 for (var j = 0; j < num; j++) 186 { 187 var gAngle = randFloat(0, TWO_PI); 188 var gDist = radius - (5 + randInt(7)); 189 var gX = round(fx + gDist * cos(gAngle)); 190 var gZ = round(fz + gDist * sin(gAngle)); 191 group = new SimpleGroup( 192 [new SimpleObject(aBush1, 2,5, 0,1, -PI/8,PI/8)], 193 false, clBaseResource, gX, gZ 194 ); 195 createObjectGroup(group, 0); 196 } 197 } 198 199 RMS.SetProgress(30); 200 201 202 log("Creating sea"); 203 var theta = randFloat(0, 1); 204 var seed = randFloat(2,3); 205 for (var ix = 0; ix < mapSize; ix++) 206 { 207 for (var iz = 0; iz < mapSize; iz++) 208 { 209 var x = ix / (mapSize + 1.0); 210 var z = iz / (mapSize + 1.0); 211 212 // add the rough shape of the water 213 var km = 20/scaleByMapSize(35, 160); 214 var cu = km*rndRiver(theta+z*0.5*(mapSize/64),seed); 215 216 var fadeDist = 0.05; 217 218 if (x < cu + 0.5) 219 { 220 var h; 221 if (x < (cu + 0.5 + fadeDist)) 222 { 223 h = 1 + 4.0 * (1 - ((cu + 0.5 + fadeDist) - x)/fadeDist); 224 } 225 else 226 { 227 h = -3.0; 228 } 229 230 if (h < -1.5) 231 { 232 placeTerrain(ix, iz, tWater); 233 } 234 else 235 { 236 placeTerrain(ix, iz, tShore); 237 } 238 239 setHeight(ix, iz, h); 240 if (h < 0){ 241 addToClass(ix, iz, clWater); 242 } 243 } 244 } 245 } 246 247 RMS.SetProgress(40); 248 // create bumps 249 log("Creating bumps..."); 250 placer = new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1); 251 painter = new SmoothElevationPainter(ELEVATION_MODIFY, 2, 2); 252 createAreas( 253 placer, 254 painter, 255 avoidClasses(clWater, 2, clPlayer, 20), 256 scaleByMapSize(100, 200) 257 ); 258 259 // create hills 260 log("Creating hills..."); 261 placer = new ChainPlacer(1, floor(scaleByMapSize(4, 6)), floor(scaleByMapSize(16, 40)), 0.5); 262 var terrainPainter = new LayeredPainter( 263 [tCliff, tHill], // terrains 264 [2] // widths 265 ); 266 var elevationPainter = new SmoothElevationPainter(ELEVATION_SET, 15, 2); 267 createAreas( 268 placer, 269 [terrainPainter, elevationPainter, paintClass(clHill)], 270 avoidClasses(clPlayer, 20, clForest, 1, clHill, 15, clWater, 0), 271 scaleByMapSize(1, 4) * numPlayers * 3 272 ); 273 274 // calculate desired number of trees for map (based on size) 275 const MIN_TREES = 500; 276 const MAX_TREES = 2500; 277 const P_FOREST = 0.5; 278 279 var totalTrees = scaleByMapSize(MIN_TREES, MAX_TREES); 280 var numForest = totalTrees * P_FOREST; 281 var numStragglers = totalTrees * (1.0 - P_FOREST); 282 283 // create forests 284 log("Creating forests..."); 285 var num = scaleByMapSize(10,42); 286 placer = new ChainPlacer(1, floor(scaleByMapSize(3, 5)), numForest / (num * floor(scaleByMapSize(2,5))), 0.5); 287 painter = new TerrainPainter([tForestFloor, pForest]); 288 createAreas(placer, [painter, paintClass(clForest)], 289 avoidClasses(clPlayer, 20, clForest, 10, clWater, 1, clHill, 1, clBaseResource, 3), 290 num, 50 291 ); 292 293 RMS.SetProgress(50); 294 295 296 297 298 299 300 // create grass patches 301 log("Creating grass patches..."); 302 var sizes = [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)]; 303 for (var i = 0; i < sizes.length; i++) 304 { 305 placer = new ChainPlacer(1, floor(scaleByMapSize(3, 5)), sizes[i], 0.5); 306 painter = new LayeredPainter( 307 [[tGrass,tRocksShrubs],[tRocksShrubs,tRocksGrass], [tRocksGrass,tGrass]], // terrains 308 [1,1] // widths 309 ); 310 createAreas( 311 placer, 312 [painter, paintClass(clDirt)], 313 avoidClasses(clForest, 0, clGrass, 5, clPlayer, 10, clWater, 4, clDirt, 5, clHill, 1), 314 scaleByMapSize(15, 45) 315 ); 316 } 317 318 RMS.SetProgress(55); 319 320 // create dirt patches 321 log("Creating dirt patches..."); 322 var sizes = [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)]; 323 for (var i = 0; i < sizes.length; i++) 324 { 325 placer = new ChainPlacer(1, floor(scaleByMapSize(3, 5)), sizes[i], 0.5); 326 painter = new LayeredPainter( 327 [[tDirt,tDirtB],[tDirt,tMainDirt], [tDirtB,tMainDirt]], // terrains 328 [1,1] // widths 329 ); 330 createAreas( 331 placer, 332 [painter, paintClass(clDirt)], 333 avoidClasses(clForest, 0, clDirt, 5, clPlayer, 10, clWater, 4, clGrass, 5, clHill, 1), 334 scaleByMapSize(15, 45) 335 ); 336 } 337 338 339 340 RMS.SetProgress(60); 341 342 // create cyprus 343 log("Creating cyprus..."); 344 placer = new ClumpPlacer(4.5 * scaleByMapSize(60, 540), 0.2, 0.1, 0.01); 345 var terrainPainter = new LayeredPainter( 346 [tShore, tHill], // terrains 347 [12] // widths 348 ); 349 var elevationPainter = new SmoothElevationPainter(ELEVATION_SET, 6, 8); 350 createAreas( 351 placer, 352 [terrainPainter, elevationPainter, paintClass(clIsland)], 353 [stayClasses (clWater, 5)], 354 1 355 ); 356 357 log("Creating cyprus stone mines..."); 358 // create cyprus large stone quarries 359 group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock); 360 createObjectGroups(group, 0, 361 stayClasses(clIsland, 9), 362 14 * scaleByMapSize(4,16), 100 363 ); 364 365 // create cyprus small stone quarries 366 group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock); 367 createObjectGroups(group, 0, 368 stayClasses(clIsland, 9), 369 14 * scaleByMapSize(4,16), 100 370 ); 371 372 log("Creating cyprus metal mines..."); 373 // create cyprus large metal quarries 374 group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal); 375 createObjectGroups(group, 0, 376 stayClasses(clIsland, 9), 377 14 * scaleByMapSize(4,16), 100 378 ); 379 380 log("Creating stone mines..."); 381 // create large stone quarries 382 group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock); 383 createObjectGroups(group, 0, 384 avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clWater, 3, clHill, 1), 385 scaleByMapSize(4,16), 100 386 ); 387 388 // create small stone quarries 389 group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock); 390 createObjectGroups(group, 0, 391 avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clWater, 3, clHill, 1), 392 scaleByMapSize(4,16), 100 393 ); 394 395 log("Creating metal mines..."); 396 // create large metal quarries 397 group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal); 398 createObjectGroups(group, 0, 399 avoidClasses(clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clWater, 3, clHill, 1), 400 scaleByMapSize(4,16), 100 401 ); 402 403 RMS.SetProgress(65); 404 405 // create small decorative rocks 406 log("Creating small decorative rocks..."); 407 group = new SimpleGroup( 408 [new SimpleObject(aDecorativeRock, 1,3, 0,1)], 409 true 410 ); 411 createObjectGroups( 412 group, 0, 413 avoidClasses(clWater, 1, clForest, 0, clPlayer, 0, clHill, 1), 414 scaleByMapSize(16, 262), 50 415 ); 416 417 418 // create shrubs 419 log("Creating shrubs..."); 420 group = new SimpleGroup( 421 [new SimpleObject(aBush2, 1,2, 0,1), new SimpleObject(aBush1, 1,3, 0,2), new SimpleObject(aBush4, 1,2, 0,1), new SimpleObject(aBush3, 1,3, 0,2)], 422 true 423 ); 424 createObjectGroups( 425 group, 0, 426 avoidClasses(clWater, 3, clPlayer, 0, clHill, 1), 427 scaleByMapSize(40, 360), 50 428 ); 429 430 RMS.SetProgress(70); 431 432 // create fish 433 log("Creating fish..."); 434 group = new SimpleGroup([new SimpleObject(oFish, 1,3, 2,6)], true, clFood); 435 createObjectGroups(group, 0, 436 [avoidClasses(clIsland, 2, clFood, 10), stayClasses(clWater, 5)], 437 3*scaleByMapSize(5,20), 50 438 ); 439 440 // create sheeps 441 log("Creating sheeps..."); 442 group = new SimpleGroup([new SimpleObject(oSheep, 5,7, 0,4)], true, clFood); 443 createObjectGroups(group, 0, 444 avoidClasses(clForest, 0, clPlayer, 7, clWater, 3, clFood, 10, clHill, 1), 445 scaleByMapSize(5,20), 50 446 ); 447 448 // create goats 449 log("Creating goats..."); 450 group = new SimpleGroup([new SimpleObject(oGoat, 2,4, 0,3)], true, clFood); 451 createObjectGroups(group, 0, 452 avoidClasses(clForest, 0, clPlayer, 7, clWater, 3, clFood, 10, clHill, 1), 453 scaleByMapSize(5,20), 50 454 ); 455 456 // create deers 457 log("Creating deers..."); 458 group = new SimpleGroup([new SimpleObject(oDeer, 2,4, 0,2)], true, clFood); 459 createObjectGroups(group, 0, 460 avoidClasses(clForest, 0, clPlayer, 7, clWater, 3, clFood, 10, clHill, 1), 461 scaleByMapSize(5,20), 50 462 ); 463 464 // create grape bushes 465 log("Creating grape bushes..."); 466 group = new SimpleGroup( 467 [new SimpleObject(oGrapeBush, 5,7, 0,4)], 468 true, clFood 469 ); 470 createObjectGroups(group, 0, 471 avoidClasses(clWater, 3, clForest, 0, clPlayer, 15, clHill, 1, clFood, 7), 472 randInt(1, 4) * numPlayers + 2, 50 473 ); 474 475 RMS.SetProgress(90); 476 477 // create straggler trees 478 log("Creating straggler trees..."); 479 var types = [oDatePalm, oSDatePalm, oCarob, oFanPalm, oPoplar, oCypress]; // some variation 480 var num = floor(numStragglers / types.length); 481 for (var i = 0; i < types.length; ++i) 482 { 483 group = new SimpleGroup([new SimpleObject(types[i], 1,1, 0,0)], true); 484 createObjectGroups(group, 0, 485 avoidClasses(clForest, 0, clWater, 1, clPlayer, 8, clMetal, 1, clHill, 1), 486 num 487 ); 488 } 489 490 log("Creating straggler trees..."); 491 var types = [oDatePalm, oSDatePalm, oCarob, oFanPalm, oPoplar, oCypress]; // some variation 492 var num = 3*floor(numStragglers / types.length); 493 for (var i = 0; i < types.length; ++i) 494 { 495 group = new SimpleGroup([new SimpleObject(types[i], 1,1, 0,0)], true); 496 createObjectGroups(group, 0, 497 stayClasses(clIsland, 9), 498 num 499 ); 500 } 501 502 // Set environment 503 setSkySet("sunny"); 504 setSunColor(0.917, 0.828, 0.734); 505 setWaterColor(0.263,0.314,0.631); 506 setWaterTint(0.133, 0.725,0.855); 507 setWaterWaviness(2.0); 508 setWaterType("ocean"); 509 setWaterMurkiness(0.8); 510 511 setTerrainAmbientColor(0.57, 0.58, 0.55); 512 setUnitsAmbientColor(0.447059, 0.509804, 0.54902); 513 514 setSunElevation(0.671884); 515 setSunRotation(-0.582913); 516 517 setFogFactor(0.2); 518 setFogThickness(0.15); 519 setFogColor(0.8, 0.7, 0.6); 520 521 setPPEffect("hdr"); 522 setPPContrast(0.53); 523 setPPSaturation(0.47); 524 setPPBloom(0.52); 525 526 // Export map data 527 ExportMap(); -
binaries/data/mods/public/maps/random/phoenician_levant.js
-
binaries/data/mods/public/maps/random/phoenician_levant.json
Property changes on: binaries/data/mods/public/maps/random/phoenician_levant.js ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property
1 { 2 "settings" : { 3 "Name" : "Phoenician Levant", 4 "Script" : "phoenician_levant.js", 5 "Description" : "Players start in the eastern part of the map while a great sea is located to the west.", 6 "BaseTerrain" : ["medit_dirt", "medit_dirt_b", "medit_dirt_c", "medit_rocks_grass", "medit_rocks_grass"], 7 "BaseHeight" : 1, 8 "Preview" : "phoenician_levant.png", 9 "CircularMap" : false 10 } 11 } 12 No newline at end of file -
binaries/data/mods/public/maps/random/phoenician_levant.json
-
binaries/data/mods/public/maps/random/rmgen/map.js
Property changes on: binaries/data/mods/public/maps/random/phoenician_levant.json ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property
88 88 } 89 89 90 90 // Check bounds on tile map 91 Map.prototype.validT = function(x, z, distance )91 Map.prototype.validT = function(x, z, distance = 0) 92 92 { 93 93 if (g_MapSettings.CircularMap) 94 94 { // Within map circle 95 95 var halfSize = Math.floor(0.5*this.size); 96 96 var dx = (x - halfSize); 97 97 var dz = (z - halfSize); 98 if (distance === undefined) 99 return Math.round(Math.sqrt(dx*dx + dz*dz)) < halfSize - 1; 100 else 101 return Math.round(Math.sqrt(dx*dx + dz*dz)) < halfSize - distance - 1; 98 return Math.round(Math.sqrt(dx*dx + dz*dz)) < halfSize - distance - 1; 102 99 } 103 100 else 104 101 // Within map square