0ad/binaries/data/mods/public/maps/random/rmgen/utilityfunctions.js

262 lines
8.0 KiB
JavaScript

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, constraint, tileclass, 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, constraint, tileclass, 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, constraint, tileclass, 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)
{
var placer = new ChainPlacer(1, floor(scaleByMapSize(3, 5)), numForest / num, 0.5);
var painter = new LayeredPainter(
types[i], // terrains
[2] // widths
);
createAreas(
placer,
[painter, paintClass(tileclass)],
constraint,
num
);
}
}
}
function createLayeredPatches(sizes, terrainset, twidthset, constraint, count, tileclass, failfraction)
{
tileclass = (tileclass !== undefined ? tileclass : clDirt);
constraint = (constraint !== undefined ? constraint : avoidClasses(clForest, 0, clHill, 0, clDirt, 5, clPlayer, 12));
count = (count !== undefined ? count : scaleByMapSize(15, 45));
failfraction = (failfraction !== undefined ? failfraction : 0.5);
for (var i = 0; i < sizes.length; i++)
{
var placer = new ChainPlacer(1, floor(scaleByMapSize(3, 5)), sizes[i], failfraction);
var painter = new LayeredPainter(
terrainset, // terrains
twidthset // widths
);
createAreas(
placer,
[painter, paintClass(tileclass)],
constraint,
count
);
}
}
function createPatches(sizes, terrain, constraint, count, tileclass, failfraction)
{
tileclass = (tileclass !== undefined ? tileclass : clDirt);
constraint = (constraint !== undefined ? constraint : avoidClasses(clForest, 0, clHill, 0, clDirt, 5, clPlayer, 12));
count = (count !== undefined ? count : scaleByMapSize(15, 45));
failfraction = (failfraction !== undefined ? failfraction : 0.5);
for (var i = 0; i < sizes.length; i++)
{
var placer = new ChainPlacer(1, floor(scaleByMapSize(3, 5)), sizes[i], failfraction);
var painter = new TerrainPainter(terrain)
createAreas(
placer,
[painter, paintClass(tileclass)],
constraint,
count
);
}
}
function createMines(mines, constraint, tileclass, count)
{
tileclass = (tileclass !== undefined ? tileclass : clRock);
constraint = (constraint !== undefined ? constraint : avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clHill, 1));
count = (count !== undefined ? count : scaleByMapSize(4,16));
for (var i = 0; i < mines.length; ++i)
{
var group = new SimpleGroup(mines[i], true, tileclass);
createObjectGroups(group, 0,
constraint,
count, 70
);
}
}
function createDecoration(objects, counts, constraint)
{
log("Creating decoration...");
constraint = (constraint !== undefined ? constraint : avoidClasses(clForest, 0, clPlayer, 0, clHill, 0));
for (var i = 0; i < objects.length; ++i)
{
var group = new SimpleGroup(
objects[i],
true
);
createObjectGroups(
group, 0,
constraint,
counts[i], 5
);
}
}
function createFood(objects, counts, constraint, tileclass)
{
log("Creating food...");
constraint = (constraint !== undefined ? constraint : avoidClasses(clForest, 0, clPlayer, 20, clHill, 1, clFood, 20));
tileclass = (tileclass !== undefined ? tileclass : clFood);
for (var i = 0; i < objects.length; ++i)
{
var group = new SimpleGroup(
objects[i],
true, tileclass
);
createObjectGroups(
group, 0,
constraint,
counts[i], 50
);
}
}
function createStragglerTrees(types, constraint, tileclass)
{
log("Creating straggler trees...");
constraint = (constraint !== undefined ? constraint : avoidClasses(clForest, 8, clHill, 1, clPlayer, 12, clMetal, 1, clRock, 1));
tileclass = (tileclass !== undefined ? tileclass : clForest);
var num = floor(g_numStragglerTrees / types.length);
for (var i = 0; i < types.length; ++i)
{
group = new SimpleGroup(
[new SimpleObject(types[i], 1,1, 0,3)],
true, tileclass
);
createObjectGroups(group, 0,
constraint,
num
);
}
}