1
0
forked from 0ad/0ad

Polishing the Random Maps: Alpine Valley, Archipelago, Cantabrian Highlands, Canyon, Continent, Corinthian Isthmus, English Channel

This was SVN commit r13619.
This commit is contained in:
O.Davoodi 2013-07-31 10:05:48 +00:00
parent f3823847b0
commit c438a1eb82
9 changed files with 337 additions and 313 deletions

View File

@ -312,6 +312,17 @@ while (possibleEdges.length > 0)
continue;
}
//we don't want ranges that are longer than half of the map's size
if ((((points[possibleEdges[index][0]][0] - points[possibleEdges[index][1]][0]) *
(points[possibleEdges[index][0]][0] - points[possibleEdges[index][1]][0])) +
((points[possibleEdges[index][0]][1] - points[possibleEdges[index][1]][1]) *
(points[possibleEdges[index][0]][1] - points[possibleEdges[index][1]][1]))) >
mapArea)
{
possibleEdges.splice(index,1);
continue;
}
//dfs
var q = [possibleEdges[index][0]];

View File

@ -5,50 +5,50 @@ TILE_CENTERED_HEIGHT_MAP = true;
//random terrain textures
var random_terrain = randomizeBiome();
var tMainTerrain = rBiomeT1();
var tForestFloor1 = rBiomeT2();
var tForestFloor2 = rBiomeT3();
var tCliff = rBiomeT4();
var tTier1Terrain = rBiomeT5();
var tTier2Terrain = rBiomeT6();
var tTier3Terrain = rBiomeT7();
var tHill = rBiomeT8();
var tTier4Terrain = rBiomeT9();
var tRoad = rBiomeT10();
var tRoadWild = rBiomeT11();
var tTier5Terrain = rBiomeT12();
var tShoreBlend = rBiomeT13();
var tShore = rBiomeT14();
var tWater = rBiomeT15();
const tMainTerrain = rBiomeT1();
const tForestFloor1 = rBiomeT2();
const tForestFloor2 = rBiomeT3();
const tCliff = rBiomeT4();
const tTier1Terrain = rBiomeT5();
const tTier2Terrain = rBiomeT6();
const tTier3Terrain = rBiomeT7();
const tHill = rBiomeT8();
const tTier4Terrain = rBiomeT9();
const tRoad = rBiomeT10();
const tRoadWild = rBiomeT11();
const tTier5Terrain = rBiomeT12();
const tShoreBlend = rBiomeT13();
const tShore = rBiomeT14();
const tWater = rBiomeT15();
// gaia entities
var oTree1 = rBiomeE1();
var oTree2 = rBiomeE2();
var oTree3 = rBiomeE3();
var oTree4 = rBiomeE4();
var oTree5 = rBiomeE5();
var oFruitBush = rBiomeE6();
var oChicken = rBiomeE7();
var oMainHuntableAnimal = rBiomeE8();
var oFish = rBiomeE9();
var oSecondaryHuntableAnimal = rBiomeE10();
var oStoneLarge = rBiomeE11();
var oStoneSmall = rBiomeE12();
var oMetalLarge = rBiomeE13();
var oWood = "gaia/special_treasure_wood";
const oTree1 = rBiomeE1();
const oTree2 = rBiomeE2();
const oTree3 = rBiomeE3();
const oTree4 = rBiomeE4();
const oTree5 = rBiomeE5();
const oFruitBush = rBiomeE6();
const oChicken = rBiomeE7();
const oMainHuntableAnimal = rBiomeE8();
const oFish = rBiomeE9();
const oSecondaryHuntableAnimal = rBiomeE10();
const oStoneLarge = rBiomeE11();
const oStoneSmall = rBiomeE12();
const oMetalLarge = rBiomeE13();
const oWood = "gaia/special_treasure_wood";
// decorative props
var aGrass = rBiomeA1();
var aGrassShort = rBiomeA2();
var aReeds = rBiomeA3();
var aLillies = rBiomeA4();
var aRockLarge = rBiomeA5();
var aRockMedium = rBiomeA6();
var aBushMedium = rBiomeA7();
var aBushSmall = rBiomeA8();
const aGrass = rBiomeA1();
const aGrassShort = rBiomeA2();
const aReeds = rBiomeA3();
const aLillies = rBiomeA4();
const aRockLarge = rBiomeA5();
const aRockMedium = rBiomeA6();
const aBushMedium = rBiomeA7();
const aBushSmall = rBiomeA8();
var pForest1 = [tForestFloor2 + TERRAIN_SEPARATOR + oTree1, tForestFloor2 + TERRAIN_SEPARATOR + oTree2, tForestFloor2];
var pForest2 = [tForestFloor1 + TERRAIN_SEPARATOR + oTree4, tForestFloor1 + TERRAIN_SEPARATOR + oTree5, tForestFloor1];
const pForest1 = [tForestFloor2 + TERRAIN_SEPARATOR + oTree1, tForestFloor2 + TERRAIN_SEPARATOR + oTree2, tForestFloor2];
const pForest2 = [tForestFloor1 + TERRAIN_SEPARATOR + oTree4, tForestFloor1 + TERRAIN_SEPARATOR + oTree5, tForestFloor1];
const BUILDING_ANGlE = -PI/4;
// initialize map

View File

@ -29,9 +29,9 @@ const oChicken = "gaia/fauna_chicken";
const oDeer = "gaia/fauna_deer";
const oFish = "gaia/fauna_fish";
const oSheep = "gaia/fauna_sheep";
const oStoneLarge = "gaia/geology_stonemine_medit_quarry";
const oStoneSmall = "gaia/geology_stone_mediterranean";
const oMetalLarge = "gaia/geology_metal_mediterranean_slabs";
const oStoneLarge = "gaia/geology_stonemine_temperate_quarry";
const oStoneSmall = "gaia/geology_stone_temperate";
const oMetalLarge = "gaia/geology_metal_temperate_slabs";
// decorative props
const aGrass = "actor|props/flora/grass_soft_large_tall.xml";
@ -374,7 +374,7 @@ for (var i = 0; i < sizes.length; i++)
scaleByMapSize(15, 45)
);
}
tGrassPatchBlend
RMS.SetProgress(50);
log("Creating stone mines...");

View File

@ -1,55 +1,54 @@
RMS.LoadLibrary("rmgen");
//random terrain textures
var rt = randomizeBiome();
var random_terrain = randomizeBiome();
var tGrass = rBiomeT1();
var tGrassPForest = rBiomeT2();
var tGrassDForest = rBiomeT3();
var tCliff = rBiomeT4();
var tGrassA = rBiomeT5();
var tGrassB = rBiomeT6();
var tGrassC = rBiomeT7();
var tHill = rBiomeT8();
var tDirt = rBiomeT9();
var tRoad = rBiomeT10();
var tRoadWild = rBiomeT11();
var tGrassPatch = rBiomeT12();
var tShoreBlend = rBiomeT13();
var tShore = rBiomeT14();
var tWater = rBiomeT15();
const tMainTerrain = rBiomeT1();
const tForestFloor1 = rBiomeT2();
const tForestFloor2 = rBiomeT3();
const tCliff = rBiomeT4();
const tTier1Terrain = rBiomeT5();
const tTier2Terrain = rBiomeT6();
const tTier3Terrain = rBiomeT7();
const tHill = rBiomeT8();
const tDirt = rBiomeT9();
const tRoad = rBiomeT10();
const tRoadWild = rBiomeT11();
const tTier4Terrain = rBiomeT12();
const tShoreBlend = rBiomeT13();
const tShore = rBiomeT14();
const tWater = rBiomeT15();
// gaia entities
var oOak = rBiomeE1();
var oOakLarge = rBiomeE2();
var oApple = rBiomeE3();
var oPine = rBiomeE4();
var oAleppoPine = rBiomeE5();
var oBerryBush = rBiomeE6();
var oChicken = rBiomeE7();
var oDeer = rBiomeE8();
var oFish = rBiomeE9();
var oSheep = rBiomeE10();
var oStoneLarge = rBiomeE11();
var oStoneSmall = rBiomeE12();
var oMetalLarge = rBiomeE13();
var oWood = "gaia/special_treasure_wood";
var oFood = "gaia/special_treasure_food_bin";
const oTree1 = rBiomeE1();
const oTree2 = rBiomeE2();
const oTree3 = rBiomeE3();
const oTree4 = rBiomeE4();
const oTree5 = rBiomeE5();
const oFruitBush = rBiomeE6();
const oChicken = rBiomeE7();
const oMainHuntableAnimal = rBiomeE8();
const oFish = rBiomeE9();
const oSecondaryHuntableAnimal = rBiomeE10();
const oStoneLarge = rBiomeE11();
const oStoneSmall = rBiomeE12();
const oMetalLarge = rBiomeE13();
const oWood = "gaia/special_treasure_wood";
const oFood = "gaia/special_treasure_food_bin";
// decorative props
var aGrass = rBiomeA1();
var aGrassShort = rBiomeA2();
var aReeds = rBiomeA3();
var aLillies = rBiomeA4();
var aRockLarge = rBiomeA5();
var aRockMedium = rBiomeA6();
var aBushMedium = rBiomeA7();
var aBushSmall = rBiomeA8();
var aTree = rBiomeA9();
const aGrass = rBiomeA1();
const aGrassShort = rBiomeA2();
const aReeds = rBiomeA3();
const aLillies = rBiomeA4();
const aRockLarge = rBiomeA5();
const aRockMedium = rBiomeA6();
const aBushMedium = rBiomeA7();
const aBushSmall = rBiomeA8();
const aTree = rBiomeA9();
var pForestD = [tGrassDForest + TERRAIN_SEPARATOR + oOak, tGrassDForest + TERRAIN_SEPARATOR + oOakLarge, tGrassDForest];
var pForestP = [tGrassPForest + TERRAIN_SEPARATOR + oPine, tGrassPForest + TERRAIN_SEPARATOR + oAleppoPine, tGrassPForest];
const pForest1 = [tForestFloor2 + TERRAIN_SEPARATOR + oTree1, tForestFloor2 + TERRAIN_SEPARATOR + oTree2, tForestFloor2];
const pForest2 = [tForestFloor1 + TERRAIN_SEPARATOR + oTree4, tForestFloor1 + TERRAIN_SEPARATOR + oTree5, tForestFloor1];
const BUILDING_ANGlE = -PI/4;
// initialize map
@ -83,7 +82,7 @@ for (var ix = 0; ix < mapSize; ix++)
{
var x = ix / (mapSize + 1.0);
var z = iz / (mapSize + 1.0);
placeTerrain(ix, iz, tGrass);
placeTerrain(ix, iz, tMainTerrain);
}
}
@ -96,7 +95,7 @@ var lSize = sqrt(sqrt(sqrt(scaleByMapSize(1, 6))));
var placer = new ClumpPlacer(mapArea * 0.065 * lSize, 0.7, 0.1, 10, ix, iz);
var terrainPainter = new LayeredPainter(
[tGrass, tGrass], // terrains
[tMainTerrain, tMainTerrain], // terrains
[3] // widths
);
var elevationPainter = new SmoothElevationPainter(
@ -146,7 +145,7 @@ for (var i = 0; i < numPlayers; i++)
// create the hill
var placer = new ClumpPlacer(hillSize, 0.65, 0.1, 10, ix, iz);
var terrainPainter = new LayeredPainter(
[tGrass, tGrass], // terrains
[tMainTerrain, tMainTerrain], // terrains
[cliffRadius] // widths
);
var elevationPainter = new SmoothElevationPainter(
@ -179,7 +178,7 @@ for (var i = 0; i < numPlayers; i++)
var bbX = round(fx + bbDist * cos(bbAngle));
var bbZ = round(fz + bbDist * sin(bbAngle));
group = new SimpleGroup(
[new SimpleObject(oBerryBush, 5,5, 0,3)],
[new SimpleObject(oFruitBush, 5,5, 0,3)],
true, clBaseResource, bbX, bbZ
);
createObjectGroup(group, 0);
@ -216,7 +215,7 @@ for (var i = 0; i < numPlayers; i++)
var tX = round(fx + tDist * cos(tAngle));
var tZ = round(fz + tDist * sin(tAngle));
group = new SimpleGroup(
[new SimpleObject(oOak, num, num, 0,4)],
[new SimpleObject(oTree1, num, num, 0,4)],
false, clBaseResource, tX, tZ
);
createObjectGroup(group, 0, avoidClasses(clBaseResource,2));
@ -239,7 +238,7 @@ for (var i = 0; i < numPlayers; i++)
// create the city patch
var cityRadius = radius/2;
placer = new ClumpPlacer(PI*cityRadius*cityRadius, 0.6, 0.3, 10, fractionToTiles(playerX[i]), fractionToTiles(playerZ[i]));
var painter = new LayeredPainter([tGrass, tGrass], [1]);
var painter = new LayeredPainter([tMainTerrain, tMainTerrain], [1]);
createArea(placer, [painter, paintClass(clPlayer)], null);
}
@ -256,7 +255,7 @@ for (var i = 0; i < scaleByMapSize(9,16); i++)
var iz2 = randInt(1, mapSize - 1);
var placer = new PathPlacer(ix, iz, ix2, iz2, scaleByMapSize(11,16), 0.4, 3*(scaleByMapSize(1,4)), 0.1, 0);
var terrainPainter = new LayeredPainter(
[tGrass, tGrass], // terrains
[tMainTerrain, tMainTerrain], // terrains
[3] // widths
);
var elevationPainter = new SmoothElevationPainter(
@ -267,14 +266,14 @@ for (var i = 0; i < scaleByMapSize(9,16); i++)
createArea(placer, [terrainPainter, elevationPainter, paintClass(clHill2)], avoidClasses(clPlayer, 6, clHill2, 3, clHill, 2));
}
for (var g = 0; g < scaleByMapSize(10,40); g++)
for (var g = 0; g < scaleByMapSize(5,30); g++)
{
var tx = randInt(1, mapSize - 1);
var tz = randInt(1, mapSize - 1);
placer = new ClumpPlacer(mapArea * 0.01 * lSize, 0.7, 0.1, 10, tx, tz);
terrainPainter = new LayeredPainter(
[tGrass, tGrass], // terrains
[tMainTerrain, tMainTerrain], // terrains
[3] // widths
);
elevationPainter = new SmoothElevationPainter(
@ -312,7 +311,7 @@ for (var g = 0; g < scaleByMapSize(10,40); g++)
var placer = new PathPlacer(tx, tz, mapSize*playerX[p1], mapSize*playerZ[p1], scaleByMapSize(11,17), 0.4, 3*(scaleByMapSize(1,4)), 0.1, 0.1);
var terrainPainter = new LayeredPainter(
[tGrass, tGrass], // terrains
[tMainTerrain, tMainTerrain], // terrains
[3] // widths
);
var elevationPainter = new SmoothElevationPainter(
@ -324,7 +323,7 @@ for (var g = 0; g < scaleByMapSize(10,40); g++)
var placer = new PathPlacer(tx, tz, mapSize*playerX[p2], mapSize*playerZ[p2], scaleByMapSize(11,17), 0.4, 3*(scaleByMapSize(1,4)), 0.1, 0.1);
var terrainPainter = new LayeredPainter(
[tGrass, tGrass], // terrains
[tMainTerrain, tMainTerrain], // terrains
[3] // widths
);
var elevationPainter = new SmoothElevationPainter(
@ -420,7 +419,7 @@ createAreas(
log("Creating hills...");
placer = new ClumpPlacer(scaleByMapSize(20, 150), 0.2, 0.1, 1);
terrainPainter = new LayeredPainter(
[tCliff, tGrass], // terrains
[tCliff, tMainTerrain], // terrains
[2] // widths
);
elevationPainter = new SmoothElevationPainter(ELEVATION_SET, 40, 2);
@ -432,23 +431,23 @@ createAreas(
);
// calculate desired number of trees for map (based on size)
if (rt == 6)
if (random_terrain == 6)
{
var MIN_TREES = 200;
var MAX_TREES = 1250;
var P_FOREST = 0.02;
var MIN_TREES = 200;
var MAX_TREES = 1250;
var P_FOREST = 0.02;
}
else if (rt == 7)
else if (random_terrain == 7)
{
var MIN_TREES = 1000;
var MAX_TREES = 6000;
var P_FOREST = 0.6;
var MIN_TREES = 1000;
var MAX_TREES = 6000;
var P_FOREST = 0.6;
}
else
{
var MIN_TREES = 500;
var MAX_TREES = 3000;
var P_FOREST = 0.7;
var MIN_TREES = 500;
var MAX_TREES = 3000;
var P_FOREST = 0.7;
}
var totalTrees = scaleByMapSize(MIN_TREES, MAX_TREES);
var numForest = totalTrees * P_FOREST;
@ -457,11 +456,11 @@ var numStragglers = totalTrees * (1.0 - P_FOREST);
// create forests
log("Creating forests...");
var types = [
[[tGrassDForest, tGrass, pForestD], [tGrassDForest, pForestD]],
[[tGrassPForest, tGrass, pForestP], [tGrassPForest, pForestP]]
[[tForestFloor2, tMainTerrain, pForest1], [tForestFloor2, pForest1]],
[[tForestFloor1, tMainTerrain, pForest2], [tForestFloor1, pForest2]]
]; // some variation
if (rt == 6)
if (random_terrain == 6)
{
var size = numForest / (0.5 * scaleByMapSize(2,8) * numPlayers);
}
@ -493,7 +492,7 @@ for (var i = 0; i < sizes.length; i++)
{
placer = new ClumpPlacer(sizes[i], 0.3, 0.06, 0.5);
painter = new LayeredPainter(
[[tGrass,tGrassA],[tGrassA,tGrassB], [tGrassB,tGrassC]], // terrains
[[tMainTerrain,tTier1Terrain],[tTier1Terrain,tTier2Terrain], [tTier2Terrain,tTier3Terrain]], // terrains
[1,1] // widths
);
createAreas(
@ -510,7 +509,7 @@ var sizes = [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5, 80)
for (var i = 0; i < sizes.length; i++)
{
placer = new ClumpPlacer(sizes[i], 0.3, 0.06, 0.5);
painter = new TerrainPainter(tGrassPatch);
painter = new TerrainPainter(tTier4Terrain);
createAreas(
placer,
painter,
@ -588,7 +587,7 @@ RMS.SetProgress(70);
// create deer
log("Creating deer...");
group = new SimpleGroup(
[new SimpleObject(oDeer, 5,7, 0,4)],
[new SimpleObject(oMainHuntableAnimal, 5,7, 0,4)],
true, clFood
);
createObjectGroups(group, 0,
@ -596,10 +595,10 @@ createObjectGroups(group, 0,
3 * numPlayers, 50
);
// create berries
log("Creating berries...");
// create fruits
log("Creating fruits...");
group = new SimpleGroup(
[new SimpleObject(oBerryBush, 5,7, 0,4)],
[new SimpleObject(oFruitBush, 5,7, 0,4)],
true, clFood
);
createObjectGroups(group, 0,
@ -612,7 +611,7 @@ RMS.SetProgress(75);
// create sheep
log("Creating sheep...");
group = new SimpleGroup(
[new SimpleObject(oSheep, 2,3, 0,2)],
[new SimpleObject(oSecondaryHuntableAnimal, 2,3, 0,2)],
true, clFood
);
createObjectGroups(group, 0,
@ -625,7 +624,7 @@ RMS.SetProgress(85);
// create straggler trees
log("Creating straggler trees...");
var types = [oOak, oOakLarge, oPine, oApple]; // some variation
var types = [oTree1, oTree2, oTree4, oTree3]; // some variation
var num = floor(numStragglers / types.length);
for (var i = 0; i < types.length; ++i)
{
@ -640,7 +639,7 @@ for (var i = 0; i < types.length; ++i)
}
var planetm = 1;
if (rt==7)
if (random_terrain==7)
{
planetm = 8;
}
@ -690,15 +689,15 @@ for (var i = 0; i < randInt(3,8); i++)
placeObject(fx+randFloat(-7,7), fz+randFloat(-7,7), oFood, 0, randFloat(0, TWO_PI))
}
rt = randInt(1,3)
if (rt==1){
setSkySet("cirrus");
random_terrain = randInt(1,3)
if (random_terrain==1){
setSkySet("cirrus");
}
else if (rt ==2){
setSkySet("cumulus");
else if (random_terrain ==2){
setSkySet("cumulus");
}
else if (rt ==3){
setSkySet("sunny");
else if (random_terrain ==3){
setSkySet("sunny");
}
setSunRotation(randFloat(0, TWO_PI));
setSunElevation(randFloat(PI/ 5, PI / 3));

View File

@ -1,51 +1,51 @@
RMS.LoadLibrary("rmgen");
//random terrain textures
var rt = randomizeBiome();
var random_terrain = randomizeBiome();
var tGrass = rBiomeT1();
var tGrassPForest = rBiomeT2();
var tGrassDForest = rBiomeT3();
var tCliff = rBiomeT4();
var tGrassA = rBiomeT5();
var tGrassB = rBiomeT6();
var tGrassC = rBiomeT7();
var tHill = rBiomeT8();
var tDirt = rBiomeT9();
var tRoad = rBiomeT10();
var tRoadWild = rBiomeT11();
var tGrassPatch = rBiomeT12();
var tShoreBlend = rBiomeT13();
var tShore = rBiomeT14();
var tWater = rBiomeT15();
const tMainTerrain = rBiomeT1();
const tForestFloor1 = rBiomeT2();
const tForestFloor2 = rBiomeT3();
const tCliff = rBiomeT4();
const tTier1Terrain = rBiomeT5();
const tTier2Terrain = rBiomeT6();
const tTier3Terrain = rBiomeT7();
const tHill = rBiomeT8();
const tDirt = rBiomeT9();
const tRoad = rBiomeT10();
const tRoadWild = rBiomeT11();
const tTier4Terrain = rBiomeT12();
const tShoreBlend = rBiomeT13();
const tShore = rBiomeT14();
const tWater = rBiomeT15();
// gaia entities
var oOak = rBiomeE1();
var oOakLarge = rBiomeE2();
var oApple = rBiomeE3();
var oPine = rBiomeE4();
var oAleppoPine = rBiomeE5();
var oBerryBush = rBiomeE6();
var oChicken = rBiomeE7();
var oDeer = rBiomeE8();
var oFish = rBiomeE9();
var oSheep = rBiomeE10();
var oStoneLarge = rBiomeE11();
var oStoneSmall = rBiomeE12();
var oMetalLarge = rBiomeE13();
const oTree1 = rBiomeE1();
const oTree2 = rBiomeE2();
const oTree3 = rBiomeE3();
const oTree4 = rBiomeE4();
const oTree5 = rBiomeE5();
const oFruitBush = rBiomeE6();
const oChicken = rBiomeE7();
const oMainHuntableAnimal = rBiomeE8();
const oFish = rBiomeE9();
const oSecondaryHuntableAnimal = rBiomeE10();
const oStoneLarge = rBiomeE11();
const oStoneSmall = rBiomeE12();
const oMetalLarge = rBiomeE13();
// decorative props
var aGrass = rBiomeA1();
var aGrassShort = rBiomeA2();
var aReeds = rBiomeA3();
var aLillies = rBiomeA4();
var aRockLarge = rBiomeA5();
var aRockMedium = rBiomeA6();
var aBushMedium = rBiomeA7();
var aBushSmall = rBiomeA8();
const aGrass = rBiomeA1();
const aGrassShort = rBiomeA2();
const aReeds = rBiomeA3();
const aLillies = rBiomeA4();
const aRockLarge = rBiomeA5();
const aRockMedium = rBiomeA6();
const aBushMedium = rBiomeA7();
const aBushSmall = rBiomeA8();
var pForestD = [tGrassDForest + TERRAIN_SEPARATOR + oOak, tGrassDForest + TERRAIN_SEPARATOR + oOakLarge, tGrassDForest];
var pForestP = [tGrassPForest + TERRAIN_SEPARATOR + oPine, tGrassPForest + TERRAIN_SEPARATOR + oAleppoPine, tGrassPForest];
const pForest1 = [tForestFloor2 + TERRAIN_SEPARATOR + oTree1, tForestFloor2 + TERRAIN_SEPARATOR + oTree2, tForestFloor2];
const pForest2 = [tForestFloor1 + TERRAIN_SEPARATOR + oTree4, tForestFloor1 + TERRAIN_SEPARATOR + oTree5, tForestFloor1];
const BUILDING_ANGlE = -PI/4;
// initialize map
@ -91,12 +91,12 @@ iz = round(fz);
var placer = new ClumpPlacer(mapArea * 0.45, 0.9, 0.09, 10, ix, iz);
var terrainPainter = new LayeredPainter(
[tWater, tShore, tGrass], // terrains
[4, 2] // widths
[tWater, tMainTerrain], // terrains
[3] // widths
);
var elevationPainter = new SmoothElevationPainter(
ELEVATION_SET, // type
5, // elevation
3, // elevation
4 // blend radius
);
createArea(placer, [terrainPainter, elevationPainter, paintClass(clLand)], null);
@ -173,7 +173,7 @@ for (var i = 0; i < numPlayers; i++)
var bbX = round(fx + bbDist * cos(bbAngle));
var bbZ = round(fz + bbDist * sin(bbAngle));
group = new SimpleGroup(
[new SimpleObject(oBerryBush, 5,5, 0,3)],
[new SimpleObject(oFruitBush, 5,5, 0,3)],
true, clBaseResource, bbX, bbZ
);
createObjectGroup(group, 0);
@ -210,7 +210,7 @@ for (var i = 0; i < numPlayers; i++)
var tX = round(fx + tDist * cos(tAngle));
var tZ = round(fz + tDist * sin(tAngle));
group = new SimpleGroup(
[new SimpleObject(oOak, num, num, 0,3)],
[new SimpleObject(oTree1, num, num, 0,3)],
false, clBaseResource, tX, tZ
);
createObjectGroup(group, 0, avoidClasses(clBaseResource,2));
@ -233,6 +233,24 @@ for (var i = 0; i < numPlayers; i++)
RMS.SetProgress(20);
// create shore jaggedness
log("Creating shore jaggedness...");
placer = new ClumpPlacer(scaleByMapSize(20, 150), 0.2, 0.1, 1);
terrainPainter = new LayeredPainter(
[tCliff, tHill], // terrains
[2] // widths
);
elevationPainter = new SmoothElevationPainter(ELEVATION_SET, -5, 4);
createAreas(
placer,
[terrainPainter, elevationPainter, unPaintClass(clLand)],
[avoidClasses(clPlayer, 20), borderClasses(clLand, 7, 7)],
scaleByMapSize(7, 130) * 2, 150
);
paintTerrainBasedOnHeight(1, 3, 0, tShore);
paintTerrainBasedOnHeight(-8, 1, 2, tWater);
// create bumps
log("Creating bumps...");
placer = new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1);
@ -240,7 +258,7 @@ painter = new SmoothElevationPainter(ELEVATION_MODIFY, 2, 2);
createAreas(
placer,
painter,
[avoidClasses(clWater, 2, clPlayer, 10), stayClasses(clLand, 3)],
[avoidClasses(clWater, 2, clPlayer, 10), stayClasses(clLand, 5)],
scaleByMapSize(100, 200)
);
@ -255,19 +273,19 @@ elevationPainter = new SmoothElevationPainter(ELEVATION_SET, 18, 2);
createAreas(
placer,
[terrainPainter, elevationPainter, paintClass(clHill)],
[avoidClasses(clPlayer, 10, clHill, 15, clBaseResource, 3), stayClasses(clLand, 5)],
[avoidClasses(clPlayer, 20, clHill, 15, clBaseResource, 3), stayClasses(clLand, 5)],
scaleByMapSize(1, 4) * numPlayers
);
// calculate desired number of trees for map (based on size)
if (rt == 6)
if (random_terrain == 6)
{
var MIN_TREES = 200;
var MAX_TREES = 1250;
var P_FOREST = 0.02;
}
else if (rt == 7)
else if (random_terrain == 7)
{
var MIN_TREES = 1000;
var MAX_TREES = 6000;
@ -286,11 +304,11 @@ var numStragglers = totalTrees * (1.0 - P_FOREST);
// create forests
log("Creating forests...");
var types = [
[[tGrassDForest, tGrass, pForestD], [tGrassDForest, pForestD]],
[[tGrassPForest, tGrass, pForestP], [tGrassPForest, pForestP]]
[[tForestFloor2, tMainTerrain, pForest1], [tForestFloor2, pForest1]],
[[tForestFloor1, tMainTerrain, pForest2], [tForestFloor1, pForest2]]
]; // some variation
if (rt == 6)
if (random_terrain == 6)
{
var size = numForest / (0.5 * scaleByMapSize(2,8) * numPlayers);
}
@ -309,7 +327,7 @@ for (var i = 0; i < types.length; ++i)
createAreas(
placer,
[painter, paintClass(clForest)],
[avoidClasses(clPlayer, 6, clForest, 10, clHill, 0, clBaseResource,2), stayClasses(clLand, 7)],
[avoidClasses(clPlayer, 20, clForest, 10, clHill, 0, clBaseResource,2), stayClasses(clLand, 4)],
num
);
}
@ -317,33 +335,33 @@ for (var i = 0; i < types.length; ++i)
RMS.SetProgress(50);
// create dirt patches
log("Creating dirt patches...");
var sizes = [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)];
var sizes = [scaleByMapSize(5, 48), scaleByMapSize(8, 84), scaleByMapSize(13, 128)];
for (var i = 0; i < sizes.length; i++)
{
placer = new ClumpPlacer(sizes[i], 0.3, 0.06, 0.5);
painter = new LayeredPainter(
[[tGrass,tGrassA],[tGrassA,tGrassB], [tGrassB,tGrassC]], // terrains
[[tMainTerrain,tTier1Terrain],[tTier1Terrain,tTier2Terrain], [tTier2Terrain,tTier3Terrain]], // terrains
[1,1] // widths
);
createAreas(
placer,
[painter, paintClass(clDirt)],
[avoidClasses(clForest, 0, clHill, 0, clDirt, 5, clPlayer, 12), stayClasses(clLand, 7)],
[avoidClasses(clForest, 0, clHill, 0, clDirt, 5, clPlayer, 12), stayClasses(clLand, 5)],
scaleByMapSize(15, 45)
);
}
// create grass patches
log("Creating grass patches...");
var sizes = [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5, 80)];
var sizes = [scaleByMapSize(4, 32), scaleByMapSize(6, 48), scaleByMapSize(8, 80)];
for (var i = 0; i < sizes.length; i++)
{
placer = new ClumpPlacer(sizes[i], 0.3, 0.06, 0.5);
painter = new TerrainPainter(tGrassPatch);
painter = new TerrainPainter(tTier4Terrain);
createAreas(
placer,
painter,
[avoidClasses(clForest, 0, clHill, 0, clDirt, 5, clPlayer, 12), stayClasses(clLand, 7)],
[avoidClasses(clForest, 0, clHill, 0, clDirt, 5, clPlayer, 12), stayClasses(clLand, 5)],
scaleByMapSize(15, 45)
);
}
@ -354,14 +372,14 @@ log("Creating stone mines...");
// create large stone quarries
group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
createObjectGroups(group, 0,
[avoidClasses(clForest, 1, clPlayer, 10, clRock, 10, clHill, 1), stayClasses(clLand, 5)],
[avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clHill, 1), stayClasses(clLand, 6)],
scaleByMapSize(4,16), 100
);
// create small stone quarries
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroups(group, 0,
[avoidClasses(clForest, 1, clPlayer, 10, clRock, 10, clHill, 1), stayClasses(clLand, 5)],
[avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clHill, 1), stayClasses(clLand, 6)],
scaleByMapSize(4,16), 100
);
@ -369,7 +387,7 @@ log("Creating metal mines...");
// create large metal quarries
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroups(group, 0,
[avoidClasses(clForest, 1, clPlayer, 10, clMetal, 10, clRock, 5, clHill, 1), stayClasses(clLand, 5)],
[avoidClasses(clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clHill, 1), stayClasses(clLand, 6)],
scaleByMapSize(4,16), 100
);
@ -405,11 +423,11 @@ RMS.SetProgress(70);
// create deer
log("Creating deer...");
group = new SimpleGroup(
[new SimpleObject(oDeer, 5,7, 0,4)],
[new SimpleObject(oMainHuntableAnimal, 5,7, 0,4)],
true, clFood
);
createObjectGroups(group, 0,
[avoidClasses(clWater, 0, clForest, 0, clPlayer, 10, clHill, 1, clFood, 20), stayClasses(clLand, 3)],
[avoidClasses(clWater, 0, clForest, 0, clPlayer, 20, clHill, 1, clFood, 20), stayClasses(clLand, 3)],
3 * numPlayers, 50
);
@ -418,11 +436,22 @@ RMS.SetProgress(75);
// create sheep
log("Creating sheep...");
group = new SimpleGroup(
[new SimpleObject(oSheep, 2,3, 0,2)],
[new SimpleObject(oSecondaryHuntableAnimal, 2,3, 0,2)],
true, clFood
);
createObjectGroups(group, 0,
[avoidClasses(clWater, 0, clForest, 0, clPlayer, 10, clHill, 1, clFood, 20), stayClasses(clLand, 3)],
[avoidClasses(clWater, 0, clForest, 0, clPlayer, 20, clHill, 1, clFood, 20), stayClasses(clLand, 3)],
3 * numPlayers, 50
);
// create fruits
log("Creating fruits...");
group = new SimpleGroup(
[new SimpleObject(oFruitBush, 5,7, 0,4)],
true, clFood
);
createObjectGroups(group, 0,
[avoidClasses(clWater, 0, clForest, 0, clPlayer, 20, clHill, 1, clFood, 20), stayClasses(clLand, 3)],
3 * numPlayers, 50
);
@ -442,7 +471,7 @@ RMS.SetProgress(85);
// create straggler trees
log("Creating straggler trees...");
var types = [oOak, oOakLarge, oPine, oApple]; // some variation
var types = [oTree1, oTree2, oTree4, oTree3]; // some variation
var num = floor(numStragglers / types.length);
for (var i = 0; i < types.length; ++i)
{
@ -457,7 +486,7 @@ for (var i = 0; i < types.length; ++i)
}
var planetm = 1;
if (rt==7)
if (random_terrain==7)
{
planetm = 8;
}
@ -495,14 +524,14 @@ createObjectGroups(group, 0,
planetm * scaleByMapSize(13, 200), 50
);
rt = randInt(1,3)
if (rt==1){
random_terrain = randInt(1,3)
if (random_terrain==1){
setSkySet("cirrus");
}
else if (rt ==2){
else if (random_terrain ==2){
setSkySet("cumulus");
}
else if (rt ==3){
else if (random_terrain ==3){
setSkySet("sunny");
}
setSunRotation(randFloat(0, TWO_PI));

View File

@ -8,10 +8,12 @@ const tHill = ["medit_grass_shrubs", "medit_rocks_grass_shrubs", "medit_rocks_sh
const tMainDirt = "medit_dirt";
const tCliff = "medit_cliff_aegean";
const tForestFloor = "medit_grass_shrubs";
const tGrass = ["medit_grass_shrubs", "medit_rocks_grass_shrubs", "medit_rocks_shrubs", "medit_rocks_grass", "medit_shrubs"];
const tGrass = ["medit_grass_field", "medit_grass_field_a"];
const tGrassSand50 = "medit_grass_field_a";
const tGrassSand25 = "medit_grass_field_b";
const tDirt = "medit_dirt_b";
const tDirt2 = "medit_rocks_grass";
const tDirt3 = "medit_rocks_shrubs";
const tDirtCracks = "medit_dirt_c";
const tShore = "medit_sand";
const tWater = "medit_sand_wet";
@ -42,7 +44,7 @@ const aBushes = [aBush1, aBush2, aBush3, aBush4];
const aDecorativeRock = "actor|geology/stone_granite_med.xml";
// terrain + entity (for painting)
var pForest = [tForestFloor + TERRAIN_SEPARATOR + oDatePalm, tForestFloor + TERRAIN_SEPARATOR + oSDatePalm, tForestFloor];
const pForest = [tForestFloor, tForestFloor + TERRAIN_SEPARATOR + oCarob, tForestFloor + TERRAIN_SEPARATOR + oDatePalm, tForestFloor + TERRAIN_SEPARATOR + oSDatePalm, tForestFloor];
const BUILDING_ANGlE = -PI/4;
@ -50,9 +52,9 @@ log("Initializing map...");
InitMap();
var numPlayers = getNumPlayers();
var mapSize = getMapSize();
var mapArea = mapSize*mapSize;
const numPlayers = getNumPlayers();
const mapSize = getMapSize();
const mapArea = mapSize*mapSize;
// create tile classes
@ -67,11 +69,10 @@ var clBaseResource = createTileClass();
var clSettlement = createTileClass();
var clGrass = createTileClass();
var clHill = createTileClass();
var clIsland = createTileClass();
// create the main river
log("Creating the main river");
var placer = new PathPlacer(fractionToTiles(0.5 + cos(3 * PI / 4)), fractionToTiles(0.5 + sin(3 * PI / 4)), fractionToTiles(0.5 + cos(- PI / 4)), fractionToTiles(0.5 + sin(- PI / 4)), scaleByMapSize(15,70), 0.5, 3*(scaleByMapSize(1,4)), 0.1, 0.01);
var placer = new PathPlacer(fractionToTiles(0.5 + cos(3 * PI / 4)), fractionToTiles(0.5 + sin(3 * PI / 4)), fractionToTiles(0.5 + cos(- PI / 4)), fractionToTiles(0.5 + sin(- PI / 4)), scaleByMapSize(15,70), 0.2, 3*(scaleByMapSize(5,15)), 0.04, 0.01);
var terrainPainter = new LayeredPainter(
[tShore, tWater, tWater], // terrains
[1, 3] // widths
@ -85,12 +86,12 @@ createArea(placer, [terrainPainter, elevationPainter], avoidClasses(clPlayer, 4)
placer = new ClumpPlacer(floor(PI*scaleByMapSize(15,70)*scaleByMapSize(15,70)/4), 0.95, 0.6, 10, fractionToTiles(0.5 + cos(3 * PI / 4))+3, fractionToTiles(0.5 + sin(3 * PI / 4))-3);
var painter = new LayeredPainter([tWater, tWater], [1]);
var elevationPainter = new SmoothElevationPainter(ELEVATION_SET, -4, 0);
var elevationPainter = new SmoothElevationPainter(ELEVATION_SET, -4, 4);
createArea(placer, [painter, elevationPainter], avoidClasses(clPlayer, 8));
placer = new ClumpPlacer(floor(PI*scaleByMapSize(15,70)*scaleByMapSize(15,70)/4), 0.95, 0.6, 10, fractionToTiles(0.5 + cos(- PI / 4))-3, fractionToTiles(0.5 + sin(- PI / 4))+3);
var painter = new LayeredPainter([tWater, tWater], [1]);
var elevationPainter = new SmoothElevationPainter(ELEVATION_SET, -4, 0);
var elevationPainter = new SmoothElevationPainter(ELEVATION_SET, -4, 4);
createArea(placer, [painter, elevationPainter], avoidClasses(clPlayer, 8));
for (var ix = 0; ix < mapSize; ix++)
@ -269,7 +270,7 @@ painter = new SmoothElevationPainter(ELEVATION_MODIFY, 2, 2);
createAreas(
placer,
painter,
avoidClasses(clWater, 2, clPlayer, 6),
avoidClasses(clWater, 2, clPlayer, 20),
scaleByMapSize(100, 200)
);
@ -290,7 +291,7 @@ var num = scaleByMapSize(10,30);
placer = new ClumpPlacer(numForest / num, 0.15, 0.1, 0.5);
painter = new TerrainPainter([tForestFloor, pForest]);
createAreas(placer, [painter, paintClass(clForest)],
avoidClasses(clPlayer, 8, clForest, 10, clWater, 1, clBaseResource, 3),
avoidClasses(clPlayer, 20, clForest, 10, clWater, 1, clBaseResource, 3),
num, 50
);
@ -308,7 +309,7 @@ var elevationPainter = new SmoothElevationPainter(ELEVATION_SET, 16, 2);
createAreas(
placer,
[terrainPainter, elevationPainter, paintClass(clHill)],
avoidClasses(clPlayer, 16, clForest, 1, clHill, 15, clWater, 3),
avoidClasses(clPlayer, 20, clForest, 1, clHill, 15, clWater, 3),
scaleByMapSize(1, 4) * numPlayers
);
@ -328,7 +329,7 @@ for (var i = 0; i < sizes.length; i++)
createAreas(
placer,
[painter, paintClass(clDirt)],
avoidClasses(clForest, 0, clGrass, 5, clPlayer, 10, clWater, 1, clDirt, 5, clHill, 1),
avoidClasses(clForest, 0, clGrass, 2, clPlayer, 10, clWater, 2, clDirt, 2, clHill, 1),
scaleByMapSize(15, 45)
);
}
@ -342,13 +343,13 @@ for (var i = 0; i < sizes.length; i++)
{
placer = new ClumpPlacer(sizes[i], 0.3, 0.06, 0.5);
painter = new LayeredPainter(
[[tDirt,tDirtCracks],[tDirt,tMainDirt], [tDirtCracks,tMainDirt]], // terrains
[1,1] // widths
[tDirt3, tDirt2,[tDirt,tMainDirt], [tDirtCracks,tMainDirt]], // terrains
[1,1,1] // widths
);
createAreas(
placer,
[painter, paintClass(clDirt)],
avoidClasses(clForest, 0, clDirt, 5, clPlayer, 10, clWater, 1, clGrass, 5, clHill, 1),
avoidClasses(clForest, 0, clDirt, 2, clPlayer, 10, clWater, 2, clGrass, 2, clHill, 1),
scaleByMapSize(15, 45)
);
}
@ -361,14 +362,14 @@ log("Creating stone mines...");
// create large stone quarries
group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
createObjectGroups(group, 0,
avoidClasses(clForest, 1, clPlayer, 12, clRock, 10, clWater, 1, clHill, 1),
avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clWater, 1, clHill, 1),
scaleByMapSize(4,16), 100
);
// create small stone quarries
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroups(group, 0,
avoidClasses(clForest, 1, clPlayer, 12, clRock, 10, clWater, 1, clHill, 1),
avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clWater, 1, clHill, 1),
scaleByMapSize(4,16), 100
);
@ -376,7 +377,7 @@ log("Creating metal mines...");
// create large metal quarries
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroups(group, 0,
avoidClasses(clForest, 1, clPlayer, 12, clMetal, 10, clRock, 5, clWater, 1, clHill, 1),
avoidClasses(clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clWater, 1, clHill, 1),
scaleByMapSize(4,16), 100
);
@ -413,7 +414,7 @@ RMS.SetProgress(70);
log("Creating fish...");
group = new SimpleGroup([new SimpleObject(oFish, 1,3, 2,6)], true, clFood);
createObjectGroups(group, 0,
[avoidClasses(clIsland, 2, clFood, 10), stayClasses(clWater, 5)],
[avoidClasses(clFood, 10), stayClasses(clWater, 5)],
3*scaleByMapSize(5,20), 50
);
@ -421,7 +422,7 @@ createObjectGroups(group, 0,
log("Creating sheeps...");
group = new SimpleGroup([new SimpleObject(oSheep, 5,7, 0,4)], true, clFood);
createObjectGroups(group, 0,
avoidClasses(clForest, 0, clPlayer, 7, clWater, 1, clFood, 10, clHill, 1),
avoidClasses(clForest, 0, clPlayer, 20, clWater, 1, clFood, 10, clHill, 1),
scaleByMapSize(5,20), 50
);
@ -429,7 +430,7 @@ createObjectGroups(group, 0,
log("Creating goats...");
group = new SimpleGroup([new SimpleObject(oGoat, 2,4, 0,3)], true, clFood);
createObjectGroups(group, 0,
avoidClasses(clForest, 0, clPlayer, 7, clWater, 1, clFood, 10, clHill, 1),
avoidClasses(clForest, 0, clPlayer, 20, clWater, 1, clFood, 10, clHill, 1),
scaleByMapSize(5,20), 50
);
@ -437,10 +438,21 @@ createObjectGroups(group, 0,
log("Creating deers...");
group = new SimpleGroup([new SimpleObject(oDeer, 2,4, 0,2)], true, clFood);
createObjectGroups(group, 0,
avoidClasses(clForest, 0, clPlayer, 7, clWater, 1, clFood, 10, clHill, 1),
avoidClasses(clForest, 0, clPlayer, 20, clWater, 1, clFood, 10, clHill, 1),
scaleByMapSize(5,20), 50
);
// create berry bush
log("Creating berry bush...");
group = new SimpleGroup(
[new SimpleObject(oBerryBush, 5,7, 0,4)],
true, clFood
);
createObjectGroups(group, 0,
avoidClasses(clWater, 3, clForest, 0, clPlayer, 20, clHill, 1, clFood, 10),
randInt(1, 4) * numPlayers + 2, 50
);
RMS.SetProgress(90);
// create straggler trees

View File

@ -336,7 +336,7 @@ for (var i = 0; i < numPlayers; i++)
createArea(placer, [painter,paintClass(clSettlement),elevationPainter], null);
// create starting units
placeCivDefaultEntities(fx, fz, id, BUILDING_ANGlE);
placeCivDefaultEntities(fx, fz, id, BUILDING_ANGlE, {'iberWall' : false});
// create animals
for (var j = 0; j < 2; ++j)

View File

@ -65,10 +65,10 @@ const aRockSmall = "actor|geology/stone_granite_small.xml";
// terrain + entity (for painting)
var pPalmForest = [tForestFloor+TERRAIN_SEPARATOR+oPalm, tGrass];
var pPineForest = [tForestFloor+TERRAIN_SEPARATOR+oPine, tGrass];
var pPoplarForest = [tForestFloor+TERRAIN_SEPARATOR+oLombardyPoplar, tGrass];
var pMainForest = [tForestFloor+TERRAIN_SEPARATOR+oCarob, tForestFloor+TERRAIN_SEPARATOR+oBeech, tGrass, tGrass];
const pPalmForest = [tForestFloor+TERRAIN_SEPARATOR+oPalm, tGrass];
const pPineForest = [tForestFloor+TERRAIN_SEPARATOR+oPine, tGrass];
const pPoplarForest = [tForestFloor+TERRAIN_SEPARATOR+oLombardyPoplar, tGrass];
const pMainForest = [tForestFloor+TERRAIN_SEPARATOR+oCarob, tForestFloor+TERRAIN_SEPARATOR+oBeech, tGrass, tGrass];
const BUILDING_ANGlE = -PI/4;
@ -78,8 +78,8 @@ log("Initializing map...");
InitMap();
var numPlayers = getNumPlayers();
var mapSize = getMapSize();
const numPlayers = getNumPlayers();
const mapSize = getMapSize();
// create tile classes

View File

@ -1,26 +1,26 @@
RMS.LoadLibrary("rmgen");
// terrain textures
const tGrass = ["temp_grass_clovers"];
const tGrass = ["temp_grass", "temp_grass", "temp_grass_d"];
const tGrassPForest = "temp_plants_bog";
const tGrassDForest = "alpine_dirt_grass_50";
const tCliff = ["temp_cliff_a", "temp_cliff_b"];
const tGrassA = "temp_grass_d";
const tGrassB = "temp_grass_c";
const tGrassC = "temp_grass_clovers_2";
const tGrassDForest = "temp_plants_bog";
const tGrassA = "temp_grass_plants";
const tGrassB = "temp_plants_bog";
const tGrassC = "temp_mud_a";
const tDirt = ["temp_plants_bog", "temp_mud_a"];
const tHill = ["temp_highlands", "temp_grass_long_b"];
const tDirt = ["temp_dirt_gravel", "temp_dirt_gravel_b"];
const tCliff = ["temp_cliff_a", "temp_cliff_b"];
const tRoad = "temp_road";
const tRoadWild = "temp_road_overgrown";
const tGrassPatch = "temp_grass_plants";
const tShoreBlend = "temp_mud_plants";
const tShore = "medit_sand_wet";
const tWater = "medit_sand_wet";
const tGrassPatchBlend = "temp_grass_long_b";
const tGrassPatch = ["temp_grass_d", "temp_grass_clovers"];
const tShoreBlend = "temp_grass_plants";
const tShore = "temp_dirt_gravel";
const tWater = "temp_dirt_gravel_b";
// gaia entities
const oPoplar = "gaia/flora_tree_euro_beech";
const oPalm = "gaia/flora_tree_poplar";
const oBeech = "gaia/flora_tree_euro_beech";
const oPoplar = "gaia/flora_tree_poplar";
const oApple = "gaia/flora_tree_apple";
const oOak = "gaia/flora_tree_oak";
const oBerryBush = "gaia/flora_bush_berry";
@ -44,7 +44,7 @@ const aReeds = "actor|props/flora/reeds_pond_lush_a.xml";
const aLillies = "actor|props/flora/water_lillies.xml";
// terrain + entity (for painting)
const pForestD = [tGrassDForest + TERRAIN_SEPARATOR + oPoplar, tGrassDForest];
const pForestD = [tGrassDForest + TERRAIN_SEPARATOR + oBeech, tGrassDForest];
const pForestP = [tGrassPForest + TERRAIN_SEPARATOR + oOak, tGrassPForest];
const WATER_WIDTH = 0.25;
@ -57,9 +57,9 @@ log("Initializing map...");
InitMap();
var numPlayers = getNumPlayers();
var mapSize = getMapSize();
var mapArea = mapSize*mapSize;
const numPlayers = getNumPlayers();
const mapSize = getMapSize();
const mapArea = mapSize*mapSize;
// create tile classes
@ -73,9 +73,6 @@ var clMetal = createTileClass();
var clFood = createTileClass();
var clBaseResource = createTileClass();
var clSettlement = createTileClass();
var clSea = createTileClass();
var clHighlands = createTileClass();
var clFlatlands = createTileClass();
var clShallow = createTileClass();
// randomize player order
@ -244,25 +241,25 @@ for (var ix = 0; ix < mapSize; ix++)
// add the rough shape of the water
var km = 20/scaleByMapSize(35, 160);
var fadeDist = 0.05;
var fadeDist = 0.02;
var cu = km*rndRiver(theta+x*0.5*(mapSize/64),seed);
var cu2 = km*rndRiver(theta2+x*0.5*(mapSize/64),seed2);
if ((z > cu + 0.5 - WATER_WIDTH/2) && (z < cu + 0.5 + WATER_WIDTH/2))
if ((z > cu + 0.5 - WATER_WIDTH/2) && (z < cu2 + 0.5 + WATER_WIDTH/2))
{
var h;
if (z < (cu + 0.5 + fadeDist - WATER_WIDTH/2))
{
h = 3 - 6 * (1 - ((cu + 0.5 + fadeDist - WATER_WIDTH/2) - z)/fadeDist);
h = 3 - 7 * (1 - ((cu + 0.5 + fadeDist - WATER_WIDTH/2) - z)/fadeDist);
}
else if (z > (cu2 + 0.5 - fadeDist + WATER_WIDTH/2))
{
h = 3 - 6 * (1 - (z - (cu2 + 0.5 - fadeDist + WATER_WIDTH/2))/fadeDist);
h = 3 - 7 * (1 - (z - (cu2 + 0.5 - fadeDist + WATER_WIDTH/2))/fadeDist);
}
else
{
h = -3.0;
h = -4.0;
}
if (h < -1.5)
@ -275,9 +272,6 @@ for (var ix = 0; ix < mapSize; ix++)
}
setHeight(ix, iz, h);
if (h < 0){
addToClass(ix, iz, clSea);
}
}
else
{
@ -341,15 +335,16 @@ for (var i = 0; i <= randInt(8, (scaleByMapSize(12,20))); i++)
[1, 3] // widths);
)
var elevationPainter = new SmoothElevationPainter(ELEVATION_SET, -3, 3);
createArea(placer, [painter, elevationPainter], avoidClasses(clPlayer, 22));
createArea(placer, [painter, elevationPainter], avoidClasses(clPlayer, 23));
}
}
}
passageMaker(fractionToTiles(0.2), fractionToTiles(0.25), fractionToTiles(0.8), fractionToTiles(0.25), scaleByMapSize(4,8), -2, -2, 2, clShallow, undefined, -4);
passageMaker(fractionToTiles(0.2), fractionToTiles(0.75), fractionToTiles(0.8), fractionToTiles(0.75), scaleByMapSize(4,8), -2, -2, 2, clShallow, undefined, -4);
passageMaker(round(fractionToTiles(0.2)), round(fractionToTiles(0.25)), round(fractionToTiles(0.8)), round(fractionToTiles(0.25)), scaleByMapSize(4,8), -2, -2, 2, clShallow, undefined, -4);
passageMaker(round(fractionToTiles(0.2)), round(fractionToTiles(0.75)), round(fractionToTiles(0.8)), round(fractionToTiles(0.75)), scaleByMapSize(4,8), -2, -2, 2, clShallow, undefined, -4);
paintTerrainBasedOnHeight(-5, 2, 1, tWater);
paintTerrainBasedOnHeight(-5, 1, 1, tWater);
paintTerrainBasedOnHeight(1, 3, 1, tShore);
paintTileClassBasedOnHeight(-6, 0.5, 1, clWater)
@ -362,11 +357,11 @@ painter = new SmoothElevationPainter(ELEVATION_MODIFY, 4, 3);
createAreas(
placer,
painter,
stayClasses(clHighlands, 1),
scaleByMapSize(300, 600)
avoidClasses(clWater, 5, clPlayer, 20),
scaleByMapSize(100, 200)
);
RMS.SetProgress(30);
RMS.SetProgress(45);
// create hills
log("Creating hills...");
@ -375,15 +370,15 @@ var terrainPainter = new LayeredPainter(
[tCliff, tHill], // terrains
[2] // widths
);
var elevationPainter = new SmoothElevationPainter(ELEVATION_SET, 12, 2);
var elevationPainter = new SmoothElevationPainter(ELEVATION_SET, 18, 2);
createAreas(
placer,
[terrainPainter, elevationPainter, paintClass(clHill)],
avoidClasses(clSea, 5, clPlayer, 15, clWater, 5, clHill, 15, clHighlands, 5),
avoidClasses(clPlayer, 20, clWater, 5, clHill, 15),
scaleByMapSize(1, 4) * numPlayers
);
RMS.SetProgress(35);
RMS.SetProgress(50);
// calculate desired number of trees for map (based on size)
const MIN_TREES = 500;
@ -411,33 +406,10 @@ for (var i = 0; i < types.length; ++i)
createAreas(
placer,
[painter, paintClass(clForest)],
avoidClasses(clPlayer, 6, clWater, 3, clForest, 10, clHill, 0, clSea, 6, clBaseResource, 3),
avoidClasses(clPlayer, 20, clWater, 6, clForest, 10, clHill, 0, clBaseResource, 3),
num
);
}
RMS.SetProgress(45);
// create highland forests
log("Creating highland forests...");
var types = [
[[tGrassDForest, tGrass, pForestP], [tGrassDForest, pForestP]]
]; // some variation
var size = numForest / (scaleByMapSize(2,8) * numPlayers);
var num = floor(size / types.length);
for (var i = 0; i < types.length; ++i)
{
placer = new ClumpPlacer(numForest / num, 0.1, 0.1, 1);
painter = new LayeredPainter(
types[i], // terrains
[2] // widths
);
createAreas(
placer,
[painter, paintClass(clForest)],
avoidClasses(clPlayer, 6, clWater, 3, clForest, 2, clHill, 0, clSea, 6, clFlatlands, 3),
num
);
}
RMS.SetProgress(70);
@ -448,30 +420,31 @@ for (var i = 0; i < sizes.length; i++)
{
placer = new ClumpPlacer(sizes[i], 0.3, 0.06, 0.5);
painter = new LayeredPainter(
[[tGrass,tGrassA],[tGrassA,tGrassB], [tGrassB,tGrassC]], // terrains
[[tGrass,tGrassA], tGrassB, [tGrassB,tGrassC]], // terrains
[1,1] // widths
);
createAreas(
placer,
[painter, paintClass(clDirt)],
avoidClasses(clWater, 1, clForest, 0, clHill, 0, clDirt, 5, clPlayer, 0, clSea, 0),
avoidClasses(clWater, 1, clForest, 0, clHill, 0, clDirt, 5, clPlayer, 6),
scaleByMapSize(15, 45)
);
}
RMS.SetProgress(75);
// create grass patches
log("Creating grass patches...");
var sizes = [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5, 80)];
for (var i = 0; i < sizes.length; i++)
{
placer = new ClumpPlacer(sizes[i], 0.3, 0.06, 0.5);
painter = new TerrainPainter(tGrassPatch);
painter = new LayeredPainter(
[tGrassPatchBlend, tGrassPatch], // terrains
[1] // widths
);
createAreas(
placer,
painter,
avoidClasses(clWater, 1, clForest, 0, clHill, 0, clDirt, 5, clPlayer, 0, clSea, 0),
avoidClasses(clWater, 1, clForest, 0, clHill, 0, clDirt, 5, clPlayer, 6),
scaleByMapSize(15, 45)
);
}
@ -482,14 +455,14 @@ log("Creating stone mines...");
// create large stone quarries
group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
createObjectGroups(group, 0,
[avoidClasses(clWater, 0, clForest, 1, clPlayer, 5, clRock, 10, clSea, 2, clHill, 2)],
[avoidClasses(clWater, 2, clForest, 1, clPlayer, 20, clRock, 10, clHill, 2)],
scaleByMapSize(4,16), 100
);
// create small stone quarries
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroups(group, 0,
[avoidClasses(clWater, 0, clForest, 1, clPlayer, 5, clRock, 10, clSea, 2, clHill, 2)],
[avoidClasses(clWater, 2, clForest, 1, clPlayer, 20, clRock, 10, clHill, 2)],
scaleByMapSize(4,16), 100
);
@ -497,7 +470,7 @@ log("Creating metal mines...");
// create large metal quarries
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroups(group, 0,
[avoidClasses(clWater, 0, clForest, 1, clPlayer, 5, clMetal, 10, clRock, 5, clSea, 0, clHill, 2)],
[avoidClasses(clWater, 2, clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clHill, 2)],
scaleByMapSize(4,16), 100
);
@ -511,7 +484,7 @@ group = new SimpleGroup(
);
createObjectGroups(
group, 0,
avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0, clSea, 0),
avoidClasses(clWater, 1, clForest, 0, clPlayer, 0, clHill, 0),
scaleByMapSize(16, 262), 50
);
@ -525,7 +498,7 @@ group = new SimpleGroup(
);
createObjectGroups(
group, 0,
avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0, clSea, 0),
avoidClasses(clWater, 1, clForest, 0, clPlayer, 0, clHill, 0),
scaleByMapSize(8, 131), 50
);
@ -537,19 +510,19 @@ group = new SimpleGroup(
true, clFood
);
createObjectGroups(group, 0,
avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0, clFood, 5, clSea, 0, clFlatlands, 0),
avoidClasses(clWater, 1, clForest, 0, clPlayer, 20, clHill, 0, clFood, 5),
6 * numPlayers, 50
);
// create sheep
log("Creating sheep...");
// create goat
log("Creating goat...");
group = new SimpleGroup(
[new SimpleObject(oGoat, 2,3, 0,2)],
true, clFood
);
createObjectGroups(group, 0,
avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0, clFood, 20, clSea, 0),
avoidClasses(clWater, 1, clForest, 0, clPlayer, 20, clHill, 0, clFood, 20),
3 * numPlayers, 50
);
@ -560,14 +533,14 @@ group = new SimpleGroup(
true, clFood
);
createObjectGroups(group, 0,
avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0, clFood, 20, clSea, 0, clFlatlands, 0),
avoidClasses(clWater, 1, clForest, 0, clPlayer, 20, clHill, 0, clFood, 20),
2 * numPlayers, 50
);
// create straggler trees
log("Creating straggler trees...");
var types = [oPoplar, oPalm, oApple]; // some variation
var types = [oBeech, oPoplar, oApple]; // some variation
var num = floor(numStragglers / types.length);
for (var i = 0; i < types.length; ++i)
{
@ -576,7 +549,7 @@ for (var i = 0; i < types.length; ++i)
true, clForest
);
createObjectGroups(group, 0,
avoidClasses(clWater, 1, clForest, 1, clHill, 1, clPlayer, 5, clMetal, 1, clRock, 1, clSea, 1, clHighlands, 25),
avoidClasses(clWater, 1, clForest, 1, clHill, 1, clPlayer, 8, clMetal, 1, clRock, 1),
num
);
}
@ -588,7 +561,7 @@ group = new SimpleGroup(
[new SimpleObject(aGrassShort, 1,2, 0,1, -PI/8,PI/8)]
);
createObjectGroups(group, 0,
avoidClasses(clWater, 2, clHill, 2, clPlayer, 2, clDirt, 0, clSea, 1),
avoidClasses(clWater, 2, clHill, 2, clPlayer, 2, clDirt, 0),
scaleByMapSize(13, 200)
);
@ -599,7 +572,7 @@ group = new SimpleGroup(
[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)]
);
createObjectGroups(group, 0,
avoidClasses(clWater, 3, clHill, 2, clPlayer, 2, clDirt, 1, clForest, 0, clSea, 1),
avoidClasses(clWater, 3, clHill, 2, clPlayer, 2, clDirt, 1, clForest, 0),
scaleByMapSize(13, 200)
);
@ -611,7 +584,7 @@ group = new SimpleGroup(
[new SimpleObject(aBushMedium, 1,2, 0,2), new SimpleObject(aBushSmall, 2,4, 0,2)]
);
createObjectGroups(group, 0,
avoidClasses(clWater, 1, clHill, 1, clPlayer, 1, clDirt, 1, clSea, 1),
avoidClasses(clWater, 1, clHill, 1, clPlayer, 1, clDirt, 1),
scaleByMapSize(13, 200), 50
);