WIP: Setting ground for a unified random map syntax. Might break some current random maps.

Faster generation.
Better mountains.
Larger forests.
Should make it easier to design/tweak random maps.

This was SVN commit r14620.
This commit is contained in:
O.Davoodi 2014-01-19 06:51:41 +00:00
parent 8845910f9c
commit d06ab6514b
2 changed files with 152 additions and 70 deletions

View File

@ -214,81 +214,17 @@ for (var i = 0; i < numPlayers; i++)
RMS.SetProgress(20);
// create bumps
log("Creating bumps...");
placer = new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1);
painter = new SmoothElevationPainter(ELEVATION_MODIFY, 2, 2);
createAreas(
placer,
painter,
avoidClasses(clPlayer, 20),
scaleByMapSize(100, 200)
);
createBumps()
// create hills
log("Creating hills...");
placer = new ChainPlacer(1, floor(scaleByMapSize(4, 6)), floor(scaleByMapSize(16, 40)), 0.5);
var terrainPainter = new LayeredPainter(
[tMainTerrain, tCliff, tHill], // terrains
[1, 2] // widths
);
var elevationPainter = new SmoothElevationPainter(ELEVATION_SET, 18, 2);
createAreas(
placer,
[terrainPainter, elevationPainter, paintClass(clHill)],
avoidClasses(clPlayer, 20, clHill, 15),
scaleByMapSize(3, 15)
);
// calculate desired number of trees for map (based on size)
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;
}
if (randInt(1,2) == 1)
createHills([tMainTerrain, tCliff, tHill], clHill, avoidClasses(clPlayer, 20, clHill, 15), scaleByMapSize(3, 15))
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);
createMountains(tCliff, clHill, avoidClasses(clPlayer, 20, clHill, 15), scaleByMapSize(3, 15))
// create forests
log("Creating forests...");
var types = [
[[tForestFloor2, tMainTerrain, pForest1], [tForestFloor2, pForest1]],
[[tForestFloor1, tMainTerrain, pForest2], [tForestFloor1, pForest2]]
]; // some variation
createForests([tMainTerrain, tForestFloor1, tForestFloor2, pForest1, pForest2], clForest, avoidClasses(clPlayer, 20, clForest, 18, clHill, 0), 1.0, random_terrain)
if (random_terrain != 6)
{
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, 0.5);
painter = new LayeredPainter(
types[i], // terrains
[2] // widths
);
createAreas(
placer,
[painter, paintClass(clForest)],
avoidClasses(clPlayer, 20, clForest, 18, clHill, 0),
num
);
}
}
RMS.SetProgress(50);
// create dirt patches
@ -418,7 +354,7 @@ RMS.SetProgress(85);
// create straggler trees
log("Creating straggler trees...");
var types = [oTree1, oTree2, oTree4, oTree3]; // some variation
var num = floor(numStragglers / types.length);
var num = floor(g_numStragglerTrees / types.length);
for (var i = 0; i < types.length; ++i)
{
group = new SimpleGroup(

View File

@ -0,0 +1,146 @@
var g_numStragglerTrees = 0
function createBumps(constraint, count, minsize, maxsize, spread, failfraction, elevation)
{
log("Creating bumps...");
constraint = (constraint !== undefined ? constraint : avoidClasses(clPlayer, 20));
minsize = (minsize !== undefined ? minsize : 1);
maxsize = (maxsize !== undefined ? maxsize : floor(scaleByMapSize(4, 6)));
spread = (spread !== undefined ? spread : floor(scaleByMapSize(2, 5)));
failfraction = (failfraction !== undefined ? failfraction : 0);
elevation = (elevation !== undefined ? elevation : 2);
count = (count !== undefined ? count : scaleByMapSize(100, 200));
var placer = new ChainPlacer(minsize, maxsize, spread, failfraction);
var painter = new SmoothElevationPainter(ELEVATION_MODIFY, elevation, 2);
createAreas(
placer,
painter,
constraint,
count
);
}
function createHills(terrainset, tileclass, constraint, count, minsize, maxsize, spread, failfraction, elevation, elevationsmooth)
{
log("Creating hills...");
tileclass = (tileclass !== undefined ? tileclass : clHill);
constraint = (constraint !== undefined ? constraint : avoidClasses(clPlayer, 20, clHill, 15));
count = (count !== undefined ? count : scaleByMapSize(1, 4) * getNumPlayers());
minsize = (minsize !== undefined ? minsize : 1);
maxsize = (maxsize !== undefined ? maxsize : floor(scaleByMapSize(4, 6)));
spread = (spread !== undefined ? spread : floor(scaleByMapSize(16, 40)));
failfraction = (failfraction !== undefined ? failfraction : 0.5);
elevation = (elevation !== undefined ? elevation : 18);
elevationsmooth = (elevationsmooth !== undefined ? elevationsmooth : 2);
var placer = new ChainPlacer(minsize, maxsize, spread, failfraction);
var terrainPainter = new LayeredPainter(
terrainset, // terrains
[1, elevationsmooth] // widths
);
var elevationPainter = new SmoothElevationPainter(ELEVATION_SET, elevation, elevationsmooth);
createAreas(
placer,
[terrainPainter, elevationPainter, paintClass(clHill)],
constraint,
count
);
}
function createMountains(terrain, tileclass, constraint, count, maxHeight, minRadius, maxRadius, numCircles)
{
log("Creating mountains...");
tileclass = (tileclass !== undefined ? tileclass : clHill);
constraint = (constraint !== undefined ? constraint : avoidClasses(clPlayer, 20, clHill, 15));
count = (count !== undefined ? count : scaleByMapSize(1, 4) * getNumPlayers());
maxHeight = (maxHeight !== undefined ? maxHeight : floor(scaleByMapSize(30, 50)));
minRadius = (minRadius !== undefined ? minRadius : floor(scaleByMapSize(3, 4)));
maxRadius = (maxRadius !== undefined ? maxRadius : floor(scaleByMapSize(6, 12)));
numCircles = (numCircles !== undefined ? numCircles : floor(scaleByMapSize(4, 10)));
var numHills = count
for (var i = 0; i < numHills; ++i)
{
createMountain(
maxHeight,
minRadius,
maxRadius,
numCircles,
constraint,
randInt(mapSize),
randInt(mapSize),
terrain,
tileclass,
14
);
}
}
function createForests(terrainset, tileclass, constraint, numMultiplier, biomeID)
{
log("Creating forests...");
tileclass = (tileclass !== undefined ? tileclass : clForest);
constraint = (constraint !== undefined ? constraint : avoidClasses(clPlayer, 20, clForest, 17, clHill, 0));
numMultiplier = (numMultiplier !== undefined ? numMultiplier : 1.0);
biomeID = (biomeID !== undefined ? biomeID : 0);
var tM = terrainset[0]
var tFF1 = terrainset[1]
var tFF2 = terrainset[2]
var tF1 = terrainset[3]
var tF2 = terrainset[4]
if (biomeID == 6)
{
var MIN_TREES = 200 * numMultiplier;
var MAX_TREES = 1250 * numMultiplier;
var P_FOREST = 0;
}
else if (biomeID == 7)
{
var MIN_TREES = 1000 * numMultiplier;
var MAX_TREES = 6000 * numMultiplier;
var P_FOREST = 0.52;
}
else
{
var MIN_TREES = 500 * numMultiplier;
var MAX_TREES = 3000 * numMultiplier;
var P_FOREST = 0.7;
}
var totalTrees = scaleByMapSize(MIN_TREES, MAX_TREES);
var numForest = totalTrees * P_FOREST;
g_numStragglerTrees = totalTrees * (1.0 - P_FOREST);
// create forests
log("Creating forests...");
var types = [
[[tFF2, tM, tF1], [tFF2, tF1]],
[[tFF1, tM, tF2], [tFF1, tF2]]
]; // some variation
if (biomeID != 6)
{
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, 0.5);
painter = new LayeredPainter(
types[i], // terrains
[2] // widths
);
createAreas(
placer,
[painter, paintClass(tileclass)],
constraint,
num
);
}
}
}