1
0
forked from mirrors/0ad

Increasing the generation speed of the maps: Alpine Lakes

This was SVN commit r14131.
This commit is contained in:
Spahbod
2013-11-10 17:29:40 +00:00
parent a96ed190a5
commit a2477f9d40
3 changed files with 102 additions and 52 deletions
@@ -241,7 +241,7 @@ RMS.SetProgress(20);
// create hills
log("Creating hills...");
placer = new ClumpPlacer(scaleByMapSize(40, 150), 0.2, 0.1, 1);
placer = new ChainPlacer(1, floor(scaleByMapSize(4, 6)), floor(scaleByMapSize(16, 40)), 0.5);
var terrainPainter = new LayeredPainter(
[tCliff, tSnowLimited], // terrains
[2] // widths
@@ -254,21 +254,56 @@ createAreas(
scaleByMapSize(10, 80) * numPlayers
);
var lakeAreas = [];
var playerConstraint = new AvoidTileClassConstraint(clPlayer, 20);
var waterConstraint = new AvoidTileClassConstraint(clWater, 8);
for (var x = 0; x < mapSize; ++x)
for (var z = 0; z < mapSize; ++z)
if (playerConstraint.allows(x, z) && waterConstraint.allows(x, z))
lakeAreas.push([x, z]);
var chosenPoint;
var lakeAreaLen;
// create lakes
log("Creating lakes...");
placer = new ClumpPlacer(scaleByMapSize(160, 700), 0.2, 0.1, 1);
terrainPainter = new LayeredPainter(
[tShore, tWater, tWater], // terrains
[1, 3] // widths
);
elevationPainter = new SmoothElevationPainter(ELEVATION_SET, -5, 5);
createAreas(
placer,
[terrainPainter, elevationPainter, paintClass(clWater)],
avoidClasses(clPlayer, 20, clWater, 8),
scaleByMapSize(5, 16)
);
var numLakes = scaleByMapSize(5, 16)
for (var i = 0; i < numLakes; ++i)
{
lakeAreaLen = lakeAreas.length;
if (!lakeAreaLen)
break;
chosenPoint = lakeAreas[randInt(0, lakeAreaLen)];
placer = new ChainPlacer(1, floor(scaleByMapSize(4, 8)), floor(scaleByMapSize(40, 180)), 0.7, chosenPoint[0], chosenPoint[1]);
terrainPainter = new LayeredPainter(
[tShore, tWater, tWater], // terrains
[1, 3] // widths
);
elevationPainter = new SmoothElevationPainter(ELEVATION_SET, -5, 5);
var newLake = createAreas(
placer,
[terrainPainter, elevationPainter, paintClass(clWater)],
avoidClasses(clPlayer, 20, clWater, 8),
1, 1
);
if (newLake !== undefined)
{
var temp = []
for (var j = 0; j < lakeAreaLen; ++j)
{
var x = lakeAreas[j][0], z = lakeAreas[j][1];
if (playerConstraint.allows(x, z) && waterConstraint.allows(x, z))
temp.push([x, z]);
}
lakeAreas = temp;
}
}
paintTerrainBasedOnHeight(3, 17, 0, tCliff);
paintTerrainBasedOnHeight(17, 20, 3, tSnowLimited);
@@ -284,10 +319,24 @@ createAreas(
);
// calculate desired number of trees for map (based on size)
var MIN_TREES = 500;
var MAX_TREES = 3000;
var P_FOREST = 0.7;
if (random_terrain == 6)
{
var MIN_TREES = 200;
var MAX_TREES = 1250;
var P_FOREST = 0;
}
else if (random_terrain == 7)
{
var MIN_TREES = 1000;
var MAX_TREES = 6000;
var P_FOREST = 0.52;
}
else
{
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;
var numStragglers = totalTrees * (1.0 - P_FOREST);
@@ -298,32 +347,33 @@ var types = [
[[tForestFloor, tPrimary, pForest], [tForestFloor, pForest]]
]; // some variation
var size = numForest / (scaleByMapSize(2,8) * numPlayers);
var num = floor(size / types.length);
for (var i = 0; i < types.length; ++i)
if (random_terrain != 6)
{
placer = new ClumpPlacer(numForest / num, 0.1, 0.1, 1);
painter = new LayeredPainter(
types[i], // terrains
[2] // widths
var size = numForest / (scaleByMapSize(3,6) * numPlayers);
var num = floor(size / types.length);
for (var i = 0; i < types.length; ++i)
{
placer = new ChainPlacer(1, floor(scaleByMapSize(3, 5)), numForest / (num * floor(scaleByMapSize(2,5))), 0.5);
painter = new LayeredPainter(
types[i], // terrains
[2] // widths
);
createAreas(
placer,
[painter, paintClass(clForest)],
avoidClasses(clPlayer, 20, clForest, 10, clHill, 0, clWater, 2),
num
);
createAreas(
placer,
[painter, paintClass(clForest)],
avoidClasses(clPlayer, 12, clForest, 10, clHill, 0, clWater, 2),
num
);
}
}
RMS.SetProgress(60);
// create dirt patches
log("Creating dirt patches...");
var sizes = [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)];
var sizes = [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)];
for (var i = 0; i < sizes.length; i++)
{
placer = new ClumpPlacer(sizes[i], 0.3, 0.06, 0.5);
placer = new ChainPlacer(1, floor(scaleByMapSize(3, 5)), sizes[i], 0.5);
painter = new LayeredPainter(
[[tDirt,tHalfSnow], [tHalfSnow,tSnowLimited]], // terrains
[2] // widths
@@ -338,10 +388,10 @@ for (var i = 0; i < sizes.length; i++)
// create grass patches
log("Creating grass patches...");
var sizes = [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5, 80)];
var sizes = [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)];
for (var i = 0; i < sizes.length; i++)
{
placer = new ClumpPlacer(sizes[i], 0.3, 0.06, 0.5);
placer = new ChainPlacer(1, floor(scaleByMapSize(3, 5)), sizes[i], 0.5);
painter = new TerrainPainter(tSecondary);
createAreas(
placer,
@@ -89,7 +89,7 @@ var fz = fractionToTiles(0.5);
ix = round(fx);
iz = round(fz);
var placer = new ChainPlacer(2, floor(scaleByMapSize(5, 16)), floor(scaleByMapSize(40, 400)), 1, ix, iz, 0, [floor(mapSize * 0.3)]);
var placer = new ChainPlacer(2, floor(scaleByMapSize(5, 12)), floor(scaleByMapSize(60, 700)), 1, ix, iz, 0, [floor(mapSize * 0.33)]);
var terrainPainter = new LayeredPainter(
[tMainTerrain, tMainTerrain], // terrains
[3] // widths
@@ -144,7 +144,7 @@ for (var i = 0; i < numPlayers; i++)
addToClass(ix-5, iz, clPlayer);
addToClass(ix, iz-5, clPlayer);
var placer = new ChainPlacer(2, floor(scaleByMapSize(4, 11)), floor(scaleByMapSize(5, 20)), 1, ix, iz, 0, [floor(scaleByMapSize(30, 50))]);
var placer = new ChainPlacer(2, floor(scaleByMapSize(5, 9)), floor(scaleByMapSize(5, 20)), 1, ix, iz, 0, [floor(scaleByMapSize(23, 50))]);
var elevationPainter = new SmoothElevationPainter(
ELEVATION_SET, // type
3, // elevation
@@ -240,18 +240,18 @@ for (var i = 0; i < numPlayers; i++)
}
RMS.SetProgress(20);
/*
// create shore jaggedness
log("Creating shore jaggedness...");
placer = new ChainPlacer(2, floor(scaleByMapSize(4, 6)), 3, 1);
placer = new ChainPlacer(2, floor(scaleByMapSize(6, 8)), 3, 1);
elevationPainter = new SmoothElevationPainter(ELEVATION_SET, -5, 4);
createAreas(
placer,
[elevationPainter, unPaintClass(clLand)],
[avoidClasses(clPlayer, 20), borderClasses(clLand, 7, 7)],
[avoidClasses(clPlayer, 20), borderClasses(clLand, 4, 4)],
scaleByMapSize(25, 180) * 2, 150
);
*/
paintTerrainBasedOnHeight(3, 4, 3, tMainTerrain);
paintTerrainBasedOnHeight(1, 3, 0, tShore);
paintTerrainBasedOnHeight(-8, 1, 2, tWater);
@@ -227,20 +227,20 @@ var landConstraint = new AvoidTileClassConstraint(clLand, floor(scaleByMapSize(1
for (var x = 0; x < mapSize; ++x)
for (var z = 0; z < mapSize; ++z)
if (playerConstraint.allows(x, z) && landConstraint.allows(x, z))
landAreas.unshift([x, z]);
landAreas.push([x, z]);
var chosenPoint;
var landAreLen;
var landAreaLen;
log("Creating big islands...");
var numIslands = scaleByMapSize(4, 14)
for (var i = 0; i < numIslands; ++i)
{
landAreLen = landAreas.length;
if (!landAreLen)
landAreaLen = landAreas.length;
if (!landAreaLen)
break;
chosenPoint = landAreas[randInt(0, landAreLen)];
chosenPoint = landAreas[randInt(0, landAreaLen)];
// create big islands
placer = new ChainPlacer(floor(scaleByMapSize(4, 8)), floor(scaleByMapSize(8, 14)), floor(scaleByMapSize(25, 60)), 0.07, chosenPoint[0], chosenPoint[1], scaleByMapSize(30,70));
@@ -259,7 +259,7 @@ for (var i = 0; i < numIslands; ++i)
if (newIsland !== undefined)
{
var temp = []
for (var j = 0; j < landAreLen; ++j)
for (var j = 0; j < landAreaLen; ++j)
{
var x = landAreas[j][0], z = landAreas[j][1];
if (playerConstraint.allows(x, z) && landConstraint.allows(x, z))
@@ -276,11 +276,11 @@ log("Creating small islands...");
numIslands = scaleByMapSize(6, 18)*scaleByMapSize(1,3)
for (var i = 0; i < numIslands; ++i)
{
landAreLen = landAreas.length;
if (!landAreLen)
landAreaLen = landAreas.length;
if (!landAreaLen)
break;
chosenPoint = landAreas[randInt(0, landAreLen)];
chosenPoint = landAreas[randInt(0, landAreaLen)];
placer = new ChainPlacer(floor(scaleByMapSize(4, 7)), floor(scaleByMapSize(7, 10)), floor(scaleByMapSize(16, 40)), 0.07, chosenPoint[0], chosenPoint[1], scaleByMapSize(22,40));
terrainPainter = new LayeredPainter(
@@ -297,7 +297,7 @@ for (var i = 0; i < numIslands; ++i)
if (newIsland !== undefined)
{
var temp = []
for (var j = 0; j < landAreLen; ++j)
for (var j = 0; j < landAreaLen; ++j)
{
var x = landAreas[j][0], z = landAreas[j][1];
if (playerConstraint.allows(x, z) && landConstraint.allows(x, z))