Fix unreachable resources on random maps by Spahbod (fixes #1078)

This was SVN commit r10875.
This commit is contained in:
Jonathan Waller 2012-01-05 14:27:42 +00:00
parent c2c4e23f27
commit 240142346b
4 changed files with 55 additions and 49 deletions

View File

@ -355,7 +355,7 @@ for (var i = 0; i < types.length; ++i)
createAreas(
placer,
[painter, paintClass(clForest)],
avoidClasses(clPlayer, 1, clWater, 3, clForest, 10, clHill, 0),
avoidClasses(clPlayer, 1, clWater, 3, clForest, 10, clHill, 1),
num
);
}
@ -403,14 +403,14 @@ 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(clWater, 0, clForest, 1, clPlayer, 5, clRock, 10)],
[avoidClasses(clWater, 0, clForest, 1, clPlayer, 5, 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(clWater, 0, clForest, 1, clPlayer, 5, clRock, 10)],
[avoidClasses(clWater, 0, clForest, 1, clPlayer, 5, clRock, 10, clHill, 1)],
scaleByMapSize(4,16), 100
);
@ -418,7 +418,7 @@ log("Creating metal mines...");
// create large metal quarries
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroups(group, 0,
[avoidClasses(clWater, 0, clForest, 1, clPlayer, 5, clMetal, 10, clRock, 5)],
[avoidClasses(clWater, 0, clForest, 1, clPlayer, 5, clMetal, 10, clRock, 5, clHill, 1)],
scaleByMapSize(4,16), 100
);
@ -459,7 +459,7 @@ group = new SimpleGroup(
true, clFood
);
createObjectGroups(group, 0,
avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0, clFood, 20),
avoidClasses(clWater, 0, clForest, 0, clPlayer, 1, clHill, 1, clFood, 20),
3 * numPlayers, 50
);
@ -472,7 +472,7 @@ group = new SimpleGroup(
true, clFood
);
createObjectGroups(group, 0,
avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0, clFood, 20),
avoidClasses(clWater, 0, clForest, 0, clPlayer, 1, clHill, 1, clFood, 20),
3 * numPlayers, 50
);

View File

@ -428,7 +428,7 @@ for (var i = 0; i < types.length; ++i)
createAreasInAreas(
placer,
[painter, paintClass(clForest)],
avoidClasses(clCity, 1, clWater, 3, clForest, 3, clHill, 0),
avoidClasses(clCity, 1, clWater, 3, clForest, 3, clHill, 1),
num, 20, areas
);
}
@ -439,14 +439,14 @@ 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);
createObjectGroupsByAreas(group, 0,
[avoidClasses(clWater, 0, clForest, 0, clHill, 0, clPlayer, 5, clRock, 1)],
[avoidClasses(clWater, 1, clForest, 1, clHill, 1, clPlayer, 5, clRock, 1)],
scaleByMapSize(4,16), 200, areas
);
// create small stone quarries
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroupsByAreas(group, 0,
[avoidClasses(clWater, 0, clForest, 0, clHill, 0, clPlayer, 5, clRock, 2)],
[avoidClasses(clWater, 1, clForest, 1, clHill, 1, clPlayer, 5, clRock, 2)],
scaleByMapSize(4,16), 200, areas
);
RMS.SetProgress(70);
@ -455,7 +455,7 @@ log("Creating metal mines...");
// create large metal quarries
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroupsByAreas(group, 0,
[avoidClasses(clWater, 0, clForest, 0, clHill, 0, clPlayer, 5, clMetal, 2, clRock, 1)],
[avoidClasses(clWater, 1, clForest, 1, clHill, 1, clPlayer, 5, clMetal, 2, clRock, 1)],
scaleByMapSize(4,16), 200, areas
);
@ -502,7 +502,7 @@ for (var t in trees)
{
group = new SimpleGroup([new SimpleObject(trees[t], 1,1, 0,1)], true, clForest);
createObjectGroupsByAreas(group, 0,
avoidClasses(clWater, 2, clForest, 2, clCity, 3, clBaseResource, 1, clRock, 1, clMetal, 1),
avoidClasses(clWater, 2, clForest, 2, clCity, 3, clBaseResource, 1, clRock, 1, clMetal, 1, clPlayer, 1, clHill, 1),
scaleByMapSize(2, 38), 50, areas
);
}
@ -514,7 +514,7 @@ group = new SimpleGroup(
true
);
createObjectGroupsByAreas(group, 0,
avoidClasses(clWater, 2, clForest, 2, clCity, 3, clBaseResource, 1, clRock, 1, clMetal, 1),
avoidClasses(clWater, 2, clForest, 2, clCity, 3, clBaseResource, 1, clRock, 1, clMetal, 1, clPlayer, 1, clHill, 1),
scaleByMapSize(5, 75), 50, areas
);
@ -525,7 +525,7 @@ group = new SimpleGroup(
true
);
createObjectGroupsByAreas(group, 0,
avoidClasses(clWater, 2, clForest, 1, clCity, 0, clBaseResource, 1, clRock, 1, clMetal, 1),
avoidClasses(clWater, 2, clForest, 1, clCity, 0, clBaseResource, 1, clRock, 1, clMetal, 1, clPlayer, 1, clHill, 1),
scaleByMapSize(5, 75), 50, areas
);

View File

@ -337,35 +337,41 @@ for (var ix = 0; ix < mapSize; ix++)
addToClass(ix, iz, clCliff);
}
// forests
if (diffH < 1 && minH > 1)
if (minH >= 7)
{
var forestNoise = (noise6.get(x,z) + 0.5*noise7.get(x,z)) / 1.5 * pn - 0.59;
// Thin out trees a bit
if (forestNoise > 0 && randFloat() < 0.5)
addToClass(ix, iz, clCliff);
}
// forests
if (getHeight(ix, iz) <11){
if (diffH < 2 && minH > 1)
{
if (minH > 5)
var forestNoise = (noise6.get(x,z) + 0.5*noise7.get(x,z)) / 1.5 * pn - 0.59;
// Thin out trees a bit
if (forestNoise > 0 && randFloat() < 0.5)
{
var typeNoise = noise10.get(x,z);
if (typeNoise < 0.43 && forestNoise < 0.05)
t = pPoplarForest;
else if (typeNoise < 0.63)
t = pMainForest;
else
t = pPineForest;
addToClass(ix, iz, clForest);
}
else if (minH < 3)
{
t = pPalmForest;
addToClass(ix, iz, clForest);
if (minH < 11 && minH >= 4)
{
var typeNoise = noise10.get(x,z);
if (typeNoise < 0.43 && forestNoise < 0.05)
t = pPoplarForest;
else if (typeNoise < 0.63)
t = pMainForest;
else
t = pPineForest;
addToClass(ix, iz, clForest);
}
else if (minH < 4)
{
t = pPalmForest;
addToClass(ix, iz, clForest);
}
}
}
}
// grass variations
if (t == tGrass)
{
@ -414,9 +420,9 @@ for (var i = 1; i <= numPlayers; i++)
addToClass(ix, iz, clPlayer);
// create the city patch, flatten area under TC
var cityRadius = 8;
var cityRadius = 11;
var placer = new ClumpPlacer(PI*cityRadius*cityRadius, 0.6, 0.3, 10, ix, iz);
var painter = new LayeredPainter([tGrass, tCity], [1]);
var painter = new LayeredPainter([tGrass, tCity], [4]);
var elevationPainter = new SmoothElevationPainter(
ELEVATION_SET, // type
5, // elevation
@ -481,7 +487,7 @@ for (var i = 1; i <= numPlayers; i++)
{
mAngle = randFloat(0, TWO_PI);
}
var mDist = 15;
var mDist = 12;
var mX = round(fx + mDist * cos(mAngle));
var mZ = round(fz + mDist * sin(mAngle));
group = new SimpleGroup(
@ -530,7 +536,7 @@ group = new SimpleGroup(
new SimpleObject(aRockLarge, 0,1, 0,2)]
);
createObjectGroups(group, 0,
avoidClasses(clWater, 0, clCliff, 0),
avoidClasses(clWater, 2, clCliff, 1),
scaleByMapSize(9, 146), 50
);
@ -540,14 +546,14 @@ 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, clStone);
createObjectGroups(group, 0,
[avoidClasses(clWater, 0, clForest, 1, clPlayer, 20, clStone, 15)],
[avoidClasses(clWater, 1, clForest, 1, clPlayer, 20, clStone, 15, clCliff, 3)],
scaleByMapSize(4,16), 100
);
// create small stone quarries
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clStone);
createObjectGroups(group, 0,
[avoidClasses(clWater, 0, clForest, 1, clPlayer, 20, clStone, 15)],
[avoidClasses(clWater, 0, clForest, 1, clPlayer, 20, clStone, 15, clCliff, 3)],
scaleByMapSize(4,16), 100
);
@ -555,7 +561,7 @@ log("Creating metal mines...");
// create large metal quarries
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,2)], true, clMetal);
createObjectGroups(group, 0,
[avoidClasses(clWater, 0, clForest, 1, clPlayer, 20, clMetal, 15, clStone, 5),
[avoidClasses(clWater, 0, clForest, 1, clPlayer, 20, clMetal, 15, clStone, 5, clCliff, 3),
borderClasses(clCliff, 0, 5)],
scaleByMapSize(4,16), 100
);
@ -569,7 +575,7 @@ for (var t in trees)
{
group = new SimpleGroup([new SimpleObject(trees[t], 1,1, 0,1)], true, clForest);
createObjectGroups(group, 0,
avoidClasses(clWater, 5, clCliff, 0, clForest, 1, clPlayer, 15, clMetal, 1, clStone, 1),
avoidClasses(clWater, 5, clCliff, 4, clForest, 1, clPlayer, 15, clMetal, 1, clStone, 1),
scaleByMapSize(2, 38), 50
);
}
@ -582,7 +588,7 @@ group = new SimpleGroup(
true
);
createObjectGroups(group, 0,
avoidClasses(clWater, 4, clCliff, 2, clForest, 1, clPlayer, 15, clMetal, 1, clStone, 1),
avoidClasses(clWater, 4, clCliff, 4, clForest, 1, clPlayer, 15, clMetal, 1, clStone, 1),
scaleByMapSize(5, 75), 50
);

View File

@ -407,14 +407,14 @@ 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), new RandomObject(aBushes, 2,4, 0,2)], true, clRock);
createObjectGroups(group, 0,
[avoidClasses(clForest, 1, clPlayer, 10, clRock, 10, clHill1, 0)],
[avoidClasses(clForest, 1, clPlayer, 10, clRock, 10, clHill1, 1)],
scaleByMapSize(4,16), 100
);
// create small stone quarries
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3), new RandomObject(aBushes, 2,4, 0,2)], true, clRock);
createObjectGroups(group, 0,
[avoidClasses(clForest, 1, clPlayer, 10, clRock, 10, clHill1, 0)],
[avoidClasses(clForest, 1, clPlayer, 10, clRock, 10, clHill1, 1)],
scaleByMapSize(4,16), 100
);
@ -422,7 +422,7 @@ log("Creating metal mines...");
// create large metal quarries
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4), new RandomObject(aBushes, 2,4, 0,2)], true, clMetal);
createObjectGroups(group, 0,
[avoidClasses(clForest, 1, clPlayer, 10, clMetal, 10, clRock, 5, clHill1, 0)],
[avoidClasses(clForest, 1, clPlayer, 10, clMetal, 10, clRock, 5, clHill1, 1)],
scaleByMapSize(4,16), 100
);
@ -462,7 +462,7 @@ for (var i = 0; i < types.length; ++i)
{
group = new SimpleGroup([new SimpleObject(types[i], 1,1, 0,0)], true);
createObjectGroups(group, 0,
avoidClasses(clForest, 0, clHill1, 1, clPlayer, 0, clMetal, 1, clRock, 1),
avoidClasses(clForest, 0, clHill1, 1, clPlayer, 4, clMetal, 1, clRock, 1),
num
);
}