Ticket #4012: map.js2016-6-11rename.patch

File map.js2016-6-11rename.patch, 33.6 KB (added by FeXoR, 8 years ago)

ALTERNATIVE patch also renaming (mv) phoenician_levant.js/json to fix the typo

  • 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 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/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" : false
    10     }
    11 }
    12  No newline at end of file
  • binaries/data/mods/public/maps/random/phoenician_levant.js

     
     1RMS.LoadLibrary("rmgen");
     2
     3//TILE_CENTERED_HEIGHT_MAP = true;
     4
     5const tCity = "medit_city_pavement";
     6const tCityPlaza = "medit_city_pavement";
     7const tHill = ["medit_dirt", "medit_dirt_b", "medit_dirt_c", "medit_rocks_grass", "medit_rocks_grass"];
     8const tMainDirt = "medit_dirt";
     9const tCliff = "medit_cliff_aegean";
     10const tForestFloor = "medit_rocks_shrubs";
     11const tGrass = "medit_rocks_grass";
     12const tRocksShrubs = "medit_rocks_shrubs";
     13const tRocksGrass = "medit_rocks_grass";
     14const tDirt = "medit_dirt_b";
     15const tDirtB = "medit_dirt_c";
     16const tShore = "medit_sand";
     17const tWater = "medit_sand_wet";
     18
     19// gaia entities
     20const oGrapeBush = "gaia/flora_bush_grapes";
     21const oChicken = "gaia/fauna_chicken";
     22const oDeer = "gaia/fauna_deer";
     23const oFish = "gaia/fauna_fish";
     24const oSheep = "gaia/fauna_sheep";
     25const oGoat = "gaia/fauna_goat";
     26const oStoneLarge = "gaia/geology_stonemine_medit_quarry";
     27const oStoneSmall = "gaia/geology_stone_mediterranean";
     28const oMetalLarge = "gaia/geology_metal_mediterranean_slabs";
     29const oDatePalm = "gaia/flora_tree_cretan_date_palm_short";
     30const oSDatePalm = "gaia/flora_tree_cretan_date_palm_tall";
     31const oCarob = "gaia/flora_tree_carob";
     32const oFanPalm = "gaia/flora_tree_medit_fan_palm";
     33const oPoplar = "gaia/flora_tree_poplar_lombardy";
     34const oCypress = "gaia/flora_tree_cypress";
     35
     36// decorative props
     37const aBush1 = "actor|props/flora/bush_medit_sm.xml";
     38const aBush2 = "actor|props/flora/bush_medit_me.xml";
     39const aBush3 = "actor|props/flora/bush_medit_la.xml";
     40const aBush4 = "actor|props/flora/bush_medit_me.xml";
     41const aBushes = [aBush1, aBush2, aBush3, aBush4];
     42const aDecorativeRock = "actor|geology/stone_granite_med.xml";
     43
     44// terrain + entity (for painting)
     45const pForest = [tForestFloor + TERRAIN_SEPARATOR + oDatePalm, tForestFloor + TERRAIN_SEPARATOR + oSDatePalm, tForestFloor + TERRAIN_SEPARATOR + oCarob, tForestFloor, tForestFloor];
     46
     47log("Initializing map...");
     48
     49InitMap();
     50
     51const numPlayers = getNumPlayers();
     52const mapSize = getMapSize();
     53const mapArea = mapSize*mapSize;
     54
     55// create tile classes
     56
     57var clPlayer = createTileClass();
     58var clForest = createTileClass();
     59var clWater = createTileClass();
     60var clDirt = createTileClass();
     61var clRock = createTileClass();
     62var clMetal = createTileClass();
     63var clFood = createTileClass();
     64var clBaseResource = createTileClass();
     65var clSettlement = createTileClass();
     66var clGrass = createTileClass();
     67var clHill = createTileClass();
     68var clIsland = createTileClass();
     69
     70// randomize player order
     71var playerIDs = [];
     72for (var i = 0; i < numPlayers; i++)
     73{
     74    playerIDs.push(i+1);
     75}
     76playerIDs = sortPlayers(playerIDs);
     77
     78// place players
     79
     80var playerX = new Array(numPlayers);
     81var playerZ = new Array(numPlayers);
     82var playerPos = new Array(numPlayers);
     83
     84for (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
     91for (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
     199RMS.SetProgress(30);
     200
     201
     202log("Creating sea");
     203var theta = randFloat(0, 1);
     204var seed = randFloat(2,3);
     205for (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
     247RMS.SetProgress(40);
     248// create bumps
     249log("Creating bumps...");
     250placer = new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1);
     251painter = new SmoothElevationPainter(ELEVATION_MODIFY, 2, 2);
     252createAreas(
     253    placer,
     254    painter,
     255    avoidClasses(clWater, 2, clPlayer, 20),
     256    scaleByMapSize(100, 200)
     257);
     258
     259// create hills
     260log("Creating hills...");
     261placer = new ChainPlacer(1, floor(scaleByMapSize(4, 6)), floor(scaleByMapSize(16, 40)), 0.5);
     262var terrainPainter = new LayeredPainter(
     263    [tCliff, tHill],        // terrains
     264    [2]                             // widths
     265);
     266var elevationPainter = new SmoothElevationPainter(ELEVATION_SET, 15, 2);
     267createAreas(
     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)
     275const MIN_TREES = 500;
     276const MAX_TREES = 2500;
     277const P_FOREST = 0.5;
     278
     279var totalTrees = scaleByMapSize(MIN_TREES, MAX_TREES);
     280var numForest = totalTrees * P_FOREST;
     281var numStragglers = totalTrees * (1.0 - P_FOREST);
     282
     283// create forests
     284log("Creating forests...");
     285var num = scaleByMapSize(10,42);
     286placer = new ChainPlacer(1, floor(scaleByMapSize(3, 5)), numForest / (num * floor(scaleByMapSize(2,5))), 0.5);
     287painter = new TerrainPainter([tForestFloor, pForest]);
     288createAreas(placer, [painter, paintClass(clForest)],
     289    avoidClasses(clPlayer, 20, clForest, 10, clWater, 1, clHill, 1, clBaseResource, 3),
     290    num, 50
     291);
     292
     293RMS.SetProgress(50);
     294
     295
     296
     297
     298
     299
     300// create grass patches
     301log("Creating grass patches...");
     302var sizes = [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)];
     303for (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
     318RMS.SetProgress(55);
     319
     320// create dirt patches
     321log("Creating dirt patches...");
     322var sizes = [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)];
     323for (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
     340RMS.SetProgress(60);
     341
     342// create cyprus
     343log("Creating cyprus...");
     344placer = new ClumpPlacer(4.5 * scaleByMapSize(60, 540), 0.2, 0.1, 0.01);
     345var terrainPainter = new LayeredPainter(
     346    [tShore, tHill],        // terrains
     347    [12]                                // widths
     348);
     349var elevationPainter = new SmoothElevationPainter(ELEVATION_SET, 6, 8);
     350createAreas(
     351    placer,
     352    [terrainPainter, elevationPainter, paintClass(clIsland)],
     353    [stayClasses (clWater, 5)],
     354    1
     355);
     356
     357log("Creating cyprus stone mines...");
     358// create cyprus large stone quarries
     359group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
     360createObjectGroups(group, 0,
     361    stayClasses(clIsland, 9),
     362    14 * scaleByMapSize(4,16), 100
     363);
     364
     365// create cyprus small stone quarries
     366group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
     367createObjectGroups(group, 0,
     368    stayClasses(clIsland, 9),
     369    14 * scaleByMapSize(4,16), 100
     370);
     371
     372log("Creating cyprus metal mines...");
     373// create cyprus large metal quarries
     374group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
     375createObjectGroups(group, 0,
     376    stayClasses(clIsland, 9),
     377    14 * scaleByMapSize(4,16), 100
     378);
     379
     380log("Creating stone mines...");
     381// create large stone quarries
     382group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
     383createObjectGroups(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
     389group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
     390createObjectGroups(group, 0,
     391    avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clWater, 3, clHill, 1),
     392    scaleByMapSize(4,16), 100
     393);
     394
     395log("Creating metal mines...");
     396// create large metal quarries
     397group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
     398createObjectGroups(group, 0,
     399    avoidClasses(clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clWater, 3, clHill, 1),
     400    scaleByMapSize(4,16), 100
     401);
     402
     403RMS.SetProgress(65);
     404
     405// create small decorative rocks
     406log("Creating small decorative rocks...");
     407group = new SimpleGroup(
     408    [new SimpleObject(aDecorativeRock, 1,3, 0,1)],
     409    true
     410);
     411createObjectGroups(
     412    group, 0,
     413    avoidClasses(clWater, 1, clForest, 0, clPlayer, 0, clHill, 1),
     414    scaleByMapSize(16, 262), 50
     415);
     416
     417
     418// create shrubs
     419log("Creating shrubs...");
     420group = 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);
     424createObjectGroups(
     425    group, 0,
     426    avoidClasses(clWater, 3, clPlayer, 0, clHill, 1),
     427    scaleByMapSize(40, 360), 50
     428);
     429
     430RMS.SetProgress(70);
     431
     432// create fish
     433log("Creating fish...");
     434group = new SimpleGroup([new SimpleObject(oFish, 1,3, 2,6)], true, clFood);
     435createObjectGroups(group, 0,
     436    [avoidClasses(clIsland, 2, clFood, 10), stayClasses(clWater, 5)],
     437    3*scaleByMapSize(5,20), 50
     438);
     439
     440// create sheeps
     441log("Creating sheeps...");
     442group = new SimpleGroup([new SimpleObject(oSheep, 5,7, 0,4)], true, clFood);
     443createObjectGroups(group, 0,
     444    avoidClasses(clForest, 0, clPlayer, 7, clWater, 3, clFood, 10, clHill, 1),
     445    scaleByMapSize(5,20), 50
     446);
     447
     448// create goats
     449log("Creating goats...");
     450group = new SimpleGroup([new SimpleObject(oGoat, 2,4, 0,3)], true, clFood);
     451createObjectGroups(group, 0,
     452    avoidClasses(clForest, 0, clPlayer, 7, clWater, 3, clFood, 10, clHill, 1),
     453    scaleByMapSize(5,20), 50
     454);
     455
     456// create deers
     457log("Creating deers...");
     458group = new SimpleGroup([new SimpleObject(oDeer, 2,4, 0,2)], true, clFood);
     459createObjectGroups(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
     465log("Creating grape bushes...");
     466group = new SimpleGroup(
     467    [new SimpleObject(oGrapeBush, 5,7, 0,4)],
     468    true, clFood
     469);
     470createObjectGroups(group, 0,
     471    avoidClasses(clWater, 3, clForest, 0, clPlayer, 15, clHill, 1, clFood, 7),
     472    randInt(1, 4) * numPlayers + 2, 50
     473);
     474
     475RMS.SetProgress(90);
     476
     477// create straggler trees
     478log("Creating straggler trees...");
     479var types = [oDatePalm, oSDatePalm, oCarob, oFanPalm, oPoplar, oCypress];   // some variation
     480var num = floor(numStragglers / types.length);
     481for (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
     490log("Creating straggler trees...");
     491var types = [oDatePalm, oSDatePalm, oCarob, oFanPalm, oPoplar, oCypress];   // some variation
     492var num = 3*floor(numStragglers / types.length);
     493for (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
     503setSkySet("sunny");
     504setSunColor(0.917, 0.828, 0.734);
     505setWaterColor(0.263,0.314,0.631);
     506setWaterTint(0.133, 0.725,0.855);
     507setWaterWaviness(2.0);
     508setWaterType("ocean");
     509setWaterMurkiness(0.8);
     510
     511setTerrainAmbientColor(0.57, 0.58, 0.55);
     512setUnitsAmbientColor(0.447059, 0.509804, 0.54902);
     513
     514setSunElevation(0.671884);
     515setSunRotation(-0.582913);
     516
     517setFogFactor(0.2);
     518setFogThickness(0.15);
     519setFogColor(0.8, 0.7, 0.6);
     520
     521setPPEffect("hdr");
     522setPPContrast(0.53);
     523setPPSaturation(0.47);
     524setPPBloom(0.52);
     525
     526// Export map data
     527ExportMap();
  • 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
     
    8888}
    8989
    9090// Check bounds on tile map
    91 Map.prototype.validT = function(x, z, distance)
     91Map.prototype.validT = function(x, z, distance = 0)
    9292{
    9393    if (g_MapSettings.CircularMap)
    9494    {   // Within map circle
    9595        var halfSize = Math.floor(0.5*this.size);
    9696        var dx = (x - halfSize);
    9797        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;
    10299    }
    103100    else
    104101        // Within map square