forked from 0ad/0ad
WIP: Completing the unified random map syntax.
This was SVN commit r14621.
This commit is contained in:
parent
d06ab6514b
commit
6036b48c1d
@ -214,210 +214,121 @@ for (var i = 0; i < numPlayers; i++)
|
||||
RMS.SetProgress(20);
|
||||
|
||||
// create bumps
|
||||
createBumps()
|
||||
createBumps();
|
||||
|
||||
// create hills
|
||||
if (randInt(1,2) == 1)
|
||||
createHills([tMainTerrain, tCliff, tHill], clHill, avoidClasses(clPlayer, 20, clHill, 15), scaleByMapSize(3, 15))
|
||||
createHills([tMainTerrain, tCliff, tHill], avoidClasses(clPlayer, 20, clHill, 15), clHill, scaleByMapSize(3, 15));
|
||||
else
|
||||
createMountains(tCliff, clHill, avoidClasses(clPlayer, 20, clHill, 15), scaleByMapSize(3, 15))
|
||||
createMountains(tCliff, avoidClasses(clPlayer, 20, clHill, 15), clHill, scaleByMapSize(3, 15));
|
||||
|
||||
// create forests
|
||||
createForests([tMainTerrain, tForestFloor1, tForestFloor2, pForest1, pForest2], clForest, avoidClasses(clPlayer, 20, clForest, 18, clHill, 0), 1.0, random_terrain)
|
||||
createForests(
|
||||
[tMainTerrain, tForestFloor1, tForestFloor2, pForest1, pForest2],
|
||||
avoidClasses(clPlayer, 20, clForest, 18, clHill, 0),
|
||||
clForest,
|
||||
1.0,
|
||||
random_terrain
|
||||
);
|
||||
|
||||
RMS.SetProgress(50);
|
||||
|
||||
// create dirt patches
|
||||
log("Creating dirt patches...");
|
||||
var sizes = [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)];
|
||||
for (var i = 0; i < sizes.length; i++)
|
||||
{
|
||||
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
|
||||
);
|
||||
createAreas(
|
||||
placer,
|
||||
[painter, paintClass(clDirt)],
|
||||
avoidClasses(clForest, 0, clHill, 0, clDirt, 5, clPlayer, 12),
|
||||
scaleByMapSize(15, 45)
|
||||
);
|
||||
}
|
||||
createLayeredPatches(
|
||||
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
|
||||
[[tMainTerrain,tTier1Terrain],[tTier1Terrain,tTier2Terrain], [tTier2Terrain,tTier3Terrain]],
|
||||
[1,1]
|
||||
);
|
||||
|
||||
// create grass patches
|
||||
log("Creating grass patches...");
|
||||
var sizes = [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)];
|
||||
for (var i = 0; i < sizes.length; i++)
|
||||
{
|
||||
placer = new ChainPlacer(1, floor(scaleByMapSize(3, 5)), sizes[i], 0.5);
|
||||
painter = new TerrainPainter(tTie4Terrain);
|
||||
createAreas(
|
||||
placer,
|
||||
painter,
|
||||
avoidClasses(clForest, 0, clHill, 0, clDirt, 5, clPlayer, 12),
|
||||
scaleByMapSize(15, 45)
|
||||
);
|
||||
}
|
||||
createPatches(
|
||||
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
|
||||
tTie4Terrain
|
||||
);
|
||||
|
||||
RMS.SetProgress(55);
|
||||
|
||||
|
||||
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, 20, clRock, 10, 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, 20, clRock, 10, clHill, 1),
|
||||
scaleByMapSize(4,16), 100
|
||||
);
|
||||
// create stone quarries
|
||||
createMines(
|
||||
[
|
||||
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
|
||||
[new SimpleObject(oStoneSmall, 2,5, 1,3)]
|
||||
]
|
||||
)
|
||||
|
||||
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, 20, clMetal, 10, clRock, 5, clHill, 1),
|
||||
scaleByMapSize(4,16), 100
|
||||
);
|
||||
createMines(
|
||||
[
|
||||
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
|
||||
],
|
||||
avoidClasses(clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clHill, 1),
|
||||
clMetal
|
||||
)
|
||||
|
||||
RMS.SetProgress(65);
|
||||
|
||||
// create small decorative rocks
|
||||
log("Creating small decorative rocks...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(aRockMedium, 1,3, 0,1)],
|
||||
true
|
||||
);
|
||||
createObjectGroups(
|
||||
group, 0,
|
||||
avoidClasses(clForest, 0, clPlayer, 0, clHill, 0),
|
||||
scaleByMapSize(16, 262), 50
|
||||
);
|
||||
// create decoration
|
||||
var planetm = 1;
|
||||
|
||||
if (random_terrain==7)
|
||||
planetm = 8;
|
||||
|
||||
// create large decorative rocks
|
||||
log("Creating large decorative rocks...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(aRockLarge, 1,2, 0,1), new SimpleObject(aRockMedium, 1,3, 0,2)],
|
||||
true
|
||||
);
|
||||
createObjectGroups(
|
||||
group, 0,
|
||||
avoidClasses(clForest, 0, clPlayer, 0, clHill, 0),
|
||||
scaleByMapSize(8, 131), 50
|
||||
createDecoration
|
||||
(
|
||||
[[new SimpleObject(aRockMedium, 1,3, 0,1)],
|
||||
[new SimpleObject(aRockLarge, 1,2, 0,1), new SimpleObject(aRockMedium, 1,3, 0,2)],
|
||||
[new SimpleObject(aGrassShort, 1,2, 0,1, -PI/8,PI/8)],
|
||||
[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)],
|
||||
[new SimpleObject(aBushMedium, 1,2, 0,2), new SimpleObject(aBushSmall, 2,4, 0,2)]
|
||||
],
|
||||
[
|
||||
scaleByMapSize(16, 262),
|
||||
scaleByMapSize(8, 131),
|
||||
planetm * scaleByMapSize(13, 200),
|
||||
planetm * scaleByMapSize(13, 200),
|
||||
planetm * scaleByMapSize(13, 200)
|
||||
]
|
||||
);
|
||||
|
||||
RMS.SetProgress(70);
|
||||
|
||||
// create deer
|
||||
log("Creating deer...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(oMainHuntableAnimal, 5,7, 0,4)],
|
||||
true, clFood
|
||||
);
|
||||
createObjectGroups(group, 0,
|
||||
avoidClasses(clForest, 0, clPlayer, 20, clHill, 1, clFood, 20),
|
||||
3 * numPlayers, 50
|
||||
// create animals
|
||||
createFood
|
||||
(
|
||||
[
|
||||
[new SimpleObject(oMainHuntableAnimal, 5,7, 0,4)],
|
||||
[new SimpleObject(oSecondaryHuntableAnimal, 2,3, 0,2)]
|
||||
],
|
||||
[
|
||||
3 * numPlayers,
|
||||
3 * numPlayers
|
||||
]
|
||||
);
|
||||
|
||||
RMS.SetProgress(75);
|
||||
|
||||
// create fruits
|
||||
log("Creating fruits...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(oFruitBush, 5,7, 0,4)],
|
||||
true, clFood
|
||||
);
|
||||
createObjectGroups(group, 0,
|
||||
avoidClasses(clForest, 0, clPlayer, 20, clHill, 1, clFood, 10),
|
||||
3 * numPlayers, 50
|
||||
);
|
||||
|
||||
// create sheep
|
||||
log("Creating sheep...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(oSecondaryHuntableAnimal, 2,3, 0,2)],
|
||||
true, clFood
|
||||
);
|
||||
createObjectGroups(group, 0,
|
||||
avoidClasses(clForest, 0, clPlayer, 20, clHill, 1, clFood, 20),
|
||||
3 * numPlayers, 50
|
||||
createFood
|
||||
(
|
||||
[
|
||||
[new SimpleObject(oFruitBush, 5,7, 0,4)]
|
||||
],
|
||||
[
|
||||
3 * numPlayers
|
||||
],
|
||||
avoidClasses(clForest, 0, clPlayer, 20, clHill, 1, clFood, 10)
|
||||
);
|
||||
|
||||
RMS.SetProgress(85);
|
||||
|
||||
// create straggler trees
|
||||
log("Creating straggler trees...");
|
||||
var types = [oTree1, oTree2, oTree4, oTree3]; // some variation
|
||||
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, clForest
|
||||
);
|
||||
createObjectGroups(group, 0,
|
||||
avoidClasses(clForest, 8, clHill, 1, clPlayer, 12, clMetal, 1, clRock, 1),
|
||||
num
|
||||
);
|
||||
}
|
||||
|
||||
var planetm = 1;
|
||||
if (random_terrain==7)
|
||||
{
|
||||
planetm = 8;
|
||||
}
|
||||
//create small grass tufts
|
||||
log("Creating small grass tufts...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(aGrassShort, 1,2, 0,1, -PI/8,PI/8)]
|
||||
);
|
||||
createObjectGroups(group, 0,
|
||||
avoidClasses(clHill, 2, clPlayer, 2, clDirt, 0),
|
||||
planetm * scaleByMapSize(13, 200)
|
||||
);
|
||||
|
||||
RMS.SetProgress(90);
|
||||
|
||||
// create large grass tufts
|
||||
log("Creating large grass tufts...");
|
||||
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(clHill, 2, clPlayer, 2, clDirt, 1, clForest, 0),
|
||||
planetm * scaleByMapSize(13, 200)
|
||||
);
|
||||
|
||||
RMS.SetProgress(95);
|
||||
|
||||
// create bushes
|
||||
log("Creating bushes...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(aBushMedium, 1,2, 0,2), new SimpleObject(aBushSmall, 2,4, 0,2)]
|
||||
);
|
||||
createObjectGroups(group, 0,
|
||||
avoidClasses(clHill, 1, clPlayer, 1, clDirt, 1),
|
||||
planetm * scaleByMapSize(13, 200), 50
|
||||
);
|
||||
|
||||
random_terrain = randInt(1,3)
|
||||
if (random_terrain==1){
|
||||
setSkySet("cirrus");
|
||||
}
|
||||
else if (random_terrain ==2){
|
||||
setSkySet("cumulus");
|
||||
}
|
||||
else if (random_terrain ==3){
|
||||
setSkySet("sunny");
|
||||
}
|
||||
setSunRotation(randFloat(0, TWO_PI));
|
||||
setSunElevation(randFloat(PI/ 5, PI / 3));
|
||||
createStragglerTrees(types);
|
||||
|
||||
// Export map data
|
||||
|
||||
|
File diff suppressed because one or more lines are too long
@ -21,7 +21,7 @@ function createBumps(constraint, count, minsize, maxsize, spread, failfraction,
|
||||
);
|
||||
}
|
||||
|
||||
function createHills(terrainset, tileclass, constraint, count, minsize, maxsize, spread, failfraction, elevation, elevationsmooth)
|
||||
function createHills(terrainset, constraint, tileclass, count, minsize, maxsize, spread, failfraction, elevation, elevationsmooth)
|
||||
{
|
||||
log("Creating hills...");
|
||||
|
||||
@ -49,7 +49,7 @@ function createHills(terrainset, tileclass, constraint, count, minsize, maxsize,
|
||||
);
|
||||
}
|
||||
|
||||
function createMountains(terrain, tileclass, constraint, count, maxHeight, minRadius, maxRadius, numCircles)
|
||||
function createMountains(terrain, constraint, tileclass, count, maxHeight, minRadius, maxRadius, numCircles)
|
||||
{
|
||||
log("Creating mountains...");
|
||||
|
||||
@ -80,7 +80,7 @@ function createMountains(terrain, tileclass, constraint, count, maxHeight, minRa
|
||||
}
|
||||
}
|
||||
|
||||
function createForests(terrainset, tileclass, constraint, numMultiplier, biomeID)
|
||||
function createForests(terrainset, constraint, tileclass, numMultiplier, biomeID)
|
||||
{
|
||||
log("Creating forests...");
|
||||
|
||||
@ -143,4 +143,120 @@ function createForests(terrainset, tileclass, constraint, numMultiplier, biomeID
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user