forked from 0ad/0ad
Increasing the generation speed of the maps: Islands, Lake.
This was SVN commit r14108.
This commit is contained in:
parent
bb28e0eb70
commit
f88b5be079
@ -1,6 +1,5 @@
|
||||
RMS.LoadLibrary("rmgen");
|
||||
var nh = new Date();
|
||||
var ti = nh.getTime();
|
||||
|
||||
TILE_CENTERED_HEIGHT_MAP = true;
|
||||
//random terrain textures
|
||||
var random_terrain = randomizeBiome();
|
||||
@ -346,7 +345,7 @@ createAreas(
|
||||
placer,
|
||||
[terrainPainter, elevationPainter, paintClass(clHill)],
|
||||
[avoidClasses(clPlayer, 2, clHill, 15), stayClasses(clLand, 0)],
|
||||
scaleByMapSize(8, 25)
|
||||
scaleByMapSize(4, 13)
|
||||
);
|
||||
|
||||
|
||||
@ -355,13 +354,13 @@ if (random_terrain == 6)
|
||||
{
|
||||
var MIN_TREES = 200;
|
||||
var MAX_TREES = 1250;
|
||||
var P_FOREST = 0.02;
|
||||
var P_FOREST = 0;
|
||||
}
|
||||
else if (random_terrain == 7)
|
||||
{
|
||||
var MIN_TREES = 1000;
|
||||
var MAX_TREES = 6000;
|
||||
var P_FOREST = 0.6;
|
||||
var P_FOREST = 0.52;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -380,40 +379,36 @@ var types = [
|
||||
[[tForestFloor1, tMainTerrain, pForest2], [tForestFloor1, pForest2]]
|
||||
]; // some variation
|
||||
|
||||
if (random_terrain == 6)
|
||||
if (random_terrain != 6)
|
||||
{
|
||||
var size = numForest / (0.5 * scaleByMapSize(2,8) * numPlayers);
|
||||
}
|
||||
else
|
||||
{
|
||||
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
|
||||
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, 0, clForest, 10, clHill, 0), stayClasses(clLand, 6)],
|
||||
num
|
||||
);
|
||||
createAreas(
|
||||
placer,
|
||||
[painter, paintClass(clForest)],
|
||||
[avoidClasses(clPlayer, 0, clForest, 10, clHill, 0), stayClasses(clLand, 6)],
|
||||
num
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
RMS.SetProgress(50);
|
||||
// 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)];
|
||||
var numb = 1;
|
||||
if (random_terrain == 6)
|
||||
numb = 3
|
||||
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(
|
||||
[[tMainTerrain,tTier1Terrain],[tTier1Terrain,tTier2Terrain], [tTier2Terrain,tTier3Terrain]], // terrains
|
||||
[1,1] // widths
|
||||
@ -428,10 +423,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(tTier4Terrain);
|
||||
createAreas(
|
||||
placer,
|
||||
@ -612,7 +607,5 @@ else if (random_terrain ==3){
|
||||
setSunRotation(randFloat(0, TWO_PI));
|
||||
setSunElevation(randFloat(PI/ 5, PI / 3));
|
||||
|
||||
nh = new Date();
|
||||
log (nh.getTime() - ti);
|
||||
// Export map data
|
||||
ExportMap();
|
||||
|
@ -124,12 +124,6 @@ for (var i = 0; i < numPlayers; i++)
|
||||
addToClass(ix-5, iz, clPlayer);
|
||||
addToClass(ix, iz-5, clPlayer);
|
||||
|
||||
// create the city patch
|
||||
var cityRadius = radius/3;
|
||||
var placer = new ClumpPlacer(PI*cityRadius*cityRadius, 0.6, 0.3, 10, ix, iz);
|
||||
var painter = new LayeredPainter([tRoadWild, tRoad], [1]);
|
||||
createArea(placer, painter, null);
|
||||
|
||||
// create starting units
|
||||
placeCivDefaultEntities(fx, fz, id, BUILDING_ANGlE);
|
||||
|
||||
@ -221,7 +215,7 @@ iz = round(fz);
|
||||
|
||||
const lSize = sqrt(sqrt(sqrt(scaleByMapSize(1, 6))));
|
||||
|
||||
var placer = new ClumpPlacer(mapArea * 0.09 * lSize, 0.7, 0.1, 10, ix, iz);
|
||||
var placer = new ChainPlacer(2, floor(scaleByMapSize(5, 16)), floor(scaleByMapSize(35, 200)), 1, ix, iz, 0, [floor(mapSize * 0.17 * lSize)]);
|
||||
var terrainPainter = new LayeredPainter(
|
||||
[tShore, tWater, tWater, tWater], // terrains
|
||||
[1, 4, 2] // widths
|
||||
@ -233,22 +227,11 @@ var elevationPainter = new SmoothElevationPainter(
|
||||
);
|
||||
createArea(placer, [terrainPainter, elevationPainter, paintClass(clWater)], avoidClasses(clPlayer, 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, paintClass(clWater)],
|
||||
[avoidClasses(clPlayer, 20), borderClasses(clWater, 6, 4)],
|
||||
scaleByMapSize(7, 130) * 2, 150
|
||||
);
|
||||
|
||||
placer = new ClumpPlacer(scaleByMapSize(15, 80), 0.2, 0.1, 1);
|
||||
// create more shore jaggedness
|
||||
log("Creating more shore jaggedness...");
|
||||
|
||||
placer = new ChainPlacer(2, floor(scaleByMapSize(4, 6)), 3, 1);
|
||||
terrainPainter = new LayeredPainter(
|
||||
[tCliff, tHill], // terrains
|
||||
[2] // widths
|
||||
@ -261,12 +244,27 @@ createAreas(
|
||||
scaleByMapSize(12, 130) * 2, 150
|
||||
);
|
||||
|
||||
|
||||
paintTerrainBasedOnHeight(2.4, 3.4, 3, tMainTerrain);
|
||||
paintTerrainBasedOnHeight(1, 2.4, 0, tShore);
|
||||
paintTerrainBasedOnHeight(-8, 1, 2, tWater);
|
||||
|
||||
paintTileClassBasedOnHeight(-6, 0, 1, clWater)
|
||||
|
||||
for (var i = 0; i < numPlayers; ++i)
|
||||
{
|
||||
var fx = fractionToTiles(playerX[i]);
|
||||
var fz = fractionToTiles(playerZ[i]);
|
||||
var ix = round(fx);
|
||||
var iz = round(fz);
|
||||
|
||||
// create the city patch
|
||||
var cityRadius = radius/3;
|
||||
var placer = new ClumpPlacer(PI*cityRadius*cityRadius, 0.6, 0.3, 10, ix, iz);
|
||||
var painter = new LayeredPainter([tRoadWild, tRoad], [1]);
|
||||
createArea(placer, painter, null);
|
||||
}
|
||||
|
||||
// create bumps
|
||||
log("Creating bumps...");
|
||||
placer = new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1);
|
||||
@ -280,7 +278,7 @@ createAreas(
|
||||
|
||||
// create hills
|
||||
log("Creating hills...");
|
||||
placer = new ClumpPlacer(scaleByMapSize(20, 150), 0.2, 0.1, 1);
|
||||
placer = new ChainPlacer(1, floor(scaleByMapSize(4, 6)), floor(scaleByMapSize(16, 40)), 1);
|
||||
terrainPainter = new LayeredPainter(
|
||||
[tMainTerrain, tCliff, tHill], // terrains
|
||||
[1, 2] // widths
|
||||
@ -299,13 +297,13 @@ if (random_terrain == 6)
|
||||
{
|
||||
var MIN_TREES = 200;
|
||||
var MAX_TREES = 1250;
|
||||
var P_FOREST = 0.02;
|
||||
var P_FOREST = 0;
|
||||
}
|
||||
else if (random_terrain == 7)
|
||||
{
|
||||
var MIN_TREES = 1000;
|
||||
var MAX_TREES = 6000;
|
||||
var P_FOREST = 0.6;
|
||||
var P_FOREST = 0.52;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -324,38 +322,33 @@ var types = [
|
||||
[[tForestFloor1, tMainTerrain, pForest2], [tForestFloor1, pForest2]]
|
||||
]; // some variation
|
||||
|
||||
if (random_terrain == 6)
|
||||
if (random_terrain != 6)
|
||||
{
|
||||
var size = numForest / (0.5 * scaleByMapSize(2,8) * numPlayers);
|
||||
}
|
||||
else
|
||||
{
|
||||
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
|
||||
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, 20, clForest, 10, clHill, 0, clWater, 2),
|
||||
num
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
RMS.SetProgress(50);
|
||||
|
||||
// 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(
|
||||
[[tMainTerrain,tTier1Terrain],[tTier1Terrain,tTier2Terrain], [tTier2Terrain,tTier3Terrain]], // terrains
|
||||
[1,1] // widths
|
||||
@ -370,10 +363,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(tTie4Terrain);
|
||||
createAreas(
|
||||
placer,
|
||||
|
@ -130,10 +130,11 @@ ClumpPlacer.prototype.place = function(constraint)
|
||||
// failfraction: Percentage of place attempts allowed to fail (optional)
|
||||
// x, z: Tile coordinates of placer center (optional)
|
||||
// fcc: Farthest circle center (optional)
|
||||
// q: a list containing numbers. each time if the list still contains values, pops one from the end and uses it as the radius (optional)
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function ChainPlacer(minRadius, maxRadius, numCircles, failFraction, x, z, fcc)
|
||||
function ChainPlacer(minRadius, maxRadius, numCircles, failFraction, x, z, fcc, q)
|
||||
{
|
||||
this.minRadius = minRadius;
|
||||
this.maxRadius = maxRadius;
|
||||
@ -142,6 +143,7 @@ function ChainPlacer(minRadius, maxRadius, numCircles, failFraction, x, z, fcc)
|
||||
this.x = (x !== undefined ? x : -1);
|
||||
this.z = (z !== undefined ? z : -1);
|
||||
this.fcc = (fcc !== undefined ? fcc : 0);
|
||||
this.q = (q !== undefined ? q : []);
|
||||
}
|
||||
|
||||
ChainPlacer.prototype.place = function(constraint)
|
||||
@ -155,6 +157,7 @@ ChainPlacer.prototype.place = function(constraint)
|
||||
var retVec = [];
|
||||
var size = getMapSize();
|
||||
var failed = 0, count = 0;
|
||||
var queueEmpty = (this.q.length ? false : true);
|
||||
|
||||
var gotRet = new Array(size);
|
||||
for (var i = 0; i < size; ++i)
|
||||
@ -178,7 +181,15 @@ ChainPlacer.prototype.place = function(constraint)
|
||||
var point = edges[randInt(edges.length)];
|
||||
var cx = point[0], cz = point[1];
|
||||
|
||||
var radius = randInt(this.minRadius, this.maxRadius);
|
||||
if (queueEmpty)
|
||||
{
|
||||
var radius = randInt(this.minRadius, this.maxRadius);
|
||||
}
|
||||
else
|
||||
{
|
||||
var radius = this.q.pop();
|
||||
queueEmpty = (this.q.length ? false : true);
|
||||
}
|
||||
|
||||
//log (edges);
|
||||
|
||||
|
File diff suppressed because one or more lines are too long
@ -33,11 +33,11 @@ RangeOp.prototype.add = function(pos, amt)
|
||||
RangeOp.prototype.get = function(start, end)
|
||||
{
|
||||
var ret = 0;
|
||||
var i = 1;
|
||||
var i;
|
||||
var nn = this.nn;
|
||||
|
||||
// Count from start to end by powers of 2
|
||||
for (; start+i <= end; i *= 2)
|
||||
for (i = 1; start+i <= end; i *= 2)
|
||||
{
|
||||
if (start & i)
|
||||
{ // For each bit in start
|
||||
|
Loading…
Reference in New Issue
Block a user