Tweaks resources in all random maps.

Updates progress steps for random maps.
Latium is not circular, so explicitly set that.
Fixes some weirdness with Atlas random map generation.

This was SVN commit r9470.
This commit is contained in:
historic_bruno 2011-05-06 23:50:30 +00:00
parent f6ffe7f121
commit 0fc0335285
5 changed files with 252 additions and 156 deletions

View File

@ -237,7 +237,7 @@ for (var i = 0; i < numPlayers; i++)
} }
} }
RMS.SetProgress(5); RMS.SetProgress(10);
// create lakes // create lakes
log("Creating lakes..."); log("Creating lakes...");
@ -255,6 +255,8 @@ var waterAreas = createAreas(
numLakes numLakes
); );
RMS.SetProgress(15);
// create reeds // create reeds
log("Creating reeds..."); log("Creating reeds...");
group = new SimpleGroup( group = new SimpleGroup(
@ -266,6 +268,8 @@ createObjectGroupsByAreas(group, 0,
waterAreas waterAreas
); );
RMS.SetProgress(20);
// create fish // create fish
log("Creating fish..."); log("Creating fish...");
group = new SimpleGroup( group = new SimpleGroup(
@ -279,7 +283,7 @@ createObjectGroupsByAreas(group, 0,
); );
waterAreas = []; waterAreas = [];
RMS.SetProgress(22); RMS.SetProgress(25);
// create bumps // create bumps
log("Creating bumps..."); log("Creating bumps...");
@ -292,7 +296,7 @@ createAreas(
scaleByMapSize(100, 200) scaleByMapSize(100, 200)
); );
RMS.SetProgress(25); RMS.SetProgress(30);
// create hills // create hills
log("Creating hills..."); log("Creating hills...");
@ -302,14 +306,14 @@ terrainPainter = new LayeredPainter(
[2] // widths [2] // widths
); );
elevationPainter = new SmoothElevationPainter(ELEVATION_SET, 12, 2); elevationPainter = new SmoothElevationPainter(ELEVATION_SET, 12, 2);
var hillAreas = createAreas( createAreas(
placer, placer,
[terrainPainter, elevationPainter, paintClass(clHill)], [terrainPainter, elevationPainter, paintClass(clHill)],
avoidClasses(clPlayer, 2, clWater, 5, clHill, 15), avoidClasses(clPlayer, 2, clWater, 5, clHill, 15),
scaleByMapSize(1, 4) * numPlayers scaleByMapSize(1, 4) * numPlayers
); );
RMS.SetProgress(30); RMS.SetProgress(35);
// calculate desired number of trees for map (based on size) // calculate desired number of trees for map (based on size)
const MIN_TREES = 500; const MIN_TREES = 500;
@ -340,35 +344,14 @@ for (var i = 0; i < types.length; ++i)
); );
} }
RMS.SetProgress(53); RMS.SetProgress(40);
log("Creating stone mines...");
// create stone
group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,8), new SimpleObject(oStoneLarge, 0,1, 0,8)], true, clRock);
createObjectGroupsByAreas(group, 0,
[avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clRock, 10),
borderClasses(clHill, 1, 4)],
scaleByMapSize(1,4) * numPlayers, 100,
hillAreas
);
log("Creating metal mines...");
// create metal
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,8)], true, clMetal);
createObjectGroupsByAreas(group, 0,
[avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clMetal, 10, clRock, 5),
borderClasses(clHill, 1, 4)],
scaleByMapSize(1,4) * numPlayers, 100,
hillAreas
);
hillAreas = [];
// create dirt patches // create dirt patches
log("Creating dirt patches..."); log("Creating dirt patches...");
var sizes = [0.000183, 0.000321, 0.000458]; var sizes = [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)];
for (var i = 0; i < sizes.length; i++) for (var i = 0; i < sizes.length; i++)
{ {
placer = new ClumpPlacer(mapArea * sizes[i], 0.3, 0.06, 0.5); placer = new ClumpPlacer(sizes[i], 0.3, 0.06, 0.5);
painter = new LayeredPainter( painter = new LayeredPainter(
[[tGrass,tGrassDirt75],[tGrassDirt75,tGrassDirt50], [tGrassDirt50,tGrassDirt25]], // terrains [[tGrass,tGrassDirt75],[tGrassDirt75,tGrassDirt50], [tGrassDirt50,tGrassDirt25]], // terrains
[1,1] // widths [1,1] // widths
@ -381,12 +364,14 @@ for (var i = 0; i < sizes.length; i++)
); );
} }
RMS.SetProgress(45);
// create grass patches // create grass patches
log("Creating grass patches..."); log("Creating grass patches...");
var sizes = [0.000115, 0.000206, 0.000298]; var sizes = [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5, 80)];
for (var i = 0; i < sizes.length; i++) for (var i = 0; i < sizes.length; i++)
{ {
placer = new ClumpPlacer(mapArea * sizes[i], 0.3, 0.06, 0.5); placer = new ClumpPlacer(sizes[i], 0.3, 0.06, 0.5);
painter = new TerrainPainter(tGrassPatch); painter = new TerrainPainter(tGrassPatch);
createAreas( createAreas(
placer, placer,
@ -396,10 +381,35 @@ for (var i = 0; i < sizes.length; i++)
); );
} }
RMS.SetProgress(50);
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)],
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)],
scaleByMapSize(4,16), 100
);
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)],
scaleByMapSize(4,16), 100
);
RMS.SetProgress(60); RMS.SetProgress(60);
// create small decorative rocks // create small decorative rocks
log("Creating large decorative rocks..."); log("Creating small decorative rocks...");
group = new SimpleGroup( group = new SimpleGroup(
[new SimpleObject(aRockMedium, 1,3, 0,1)], [new SimpleObject(aRockMedium, 1,3, 0,1)],
true true
@ -407,9 +417,11 @@ group = new SimpleGroup(
createObjectGroups( createObjectGroups(
group, 0, group, 0,
avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0), avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0),
mapArea/1000, 50 scaleByMapSize(16, 262), 50
); );
RMS.SetProgress(65);
// create large decorative rocks // create large decorative rocks
log("Creating large decorative rocks..."); log("Creating large decorative rocks...");
group = new SimpleGroup( group = new SimpleGroup(
@ -419,9 +431,11 @@ group = new SimpleGroup(
createObjectGroups( createObjectGroups(
group, 0, group, 0,
avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0), avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0),
mapArea/2000, 50 scaleByMapSize(8, 131), 50
); );
RMS.SetProgress(70);
// create deer // create deer
log("Creating deer..."); log("Creating deer...");
group = new SimpleGroup( group = new SimpleGroup(
@ -433,6 +447,8 @@ createObjectGroups(group, 0,
3 * numPlayers, 50 3 * numPlayers, 50
); );
RMS.SetProgress(75);
// create sheep // create sheep
log("Creating sheep..."); log("Creating sheep...");
group = new SimpleGroup( group = new SimpleGroup(
@ -444,6 +460,8 @@ createObjectGroups(group, 0,
3 * numPlayers, 50 3 * numPlayers, 50
); );
RMS.SetProgress(80);
// create straggler trees // create straggler trees
log("Creating straggler trees..."); log("Creating straggler trees...");
var types = [oOak, oOakLarge, oPine, oApple]; // some variation var types = [oOak, oOakLarge, oPine, oApple]; // some variation
@ -452,14 +470,16 @@ for (var i = 0; i < types.length; ++i)
{ {
group = new SimpleGroup( group = new SimpleGroup(
[new SimpleObject(types[i], 1,1, 0,3)], [new SimpleObject(types[i], 1,1, 0,3)],
true true, clForest
); );
createObjectGroups(group, 0, createObjectGroups(group, 0,
avoidClasses(clWater, 1, clForest, 1, clHill, 1, clPlayer, 1), avoidClasses(clWater, 1, clForest, 1, clHill, 1, clPlayer, 1, clMetal, 1, clRock, 1),
num num
); );
} }
RMS.SetProgress(85);
//create small grass tufts //create small grass tufts
log("Creating small grass tufts..."); log("Creating small grass tufts...");
group = new SimpleGroup( group = new SimpleGroup(
@ -467,10 +487,10 @@ group = new SimpleGroup(
); );
createObjectGroups(group, 0, createObjectGroups(group, 0,
avoidClasses(clWater, 2, clHill, 2, clPlayer, 2, clDirt, 0), avoidClasses(clWater, 2, clHill, 2, clPlayer, 2, clDirt, 0),
mapArea * 0.000763 scaleByMapSize(13, 200)
); );
RMS.SetProgress(80); RMS.SetProgress(90);
// create large grass tufts // create large grass tufts
log("Creating large grass tufts..."); log("Creating large grass tufts...");
@ -479,10 +499,10 @@ group = new SimpleGroup(
); );
createObjectGroups(group, 0, createObjectGroups(group, 0,
avoidClasses(clWater, 3, clHill, 2, clPlayer, 2, clDirt, 1, clForest, 0), avoidClasses(clWater, 3, clHill, 2, clPlayer, 2, clDirt, 1, clForest, 0),
mapArea * 0.000763 scaleByMapSize(13, 200)
); );
RMS.SetProgress(87); RMS.SetProgress(95);
// create bushes // create bushes
log("Creating bushes..."); log("Creating bushes...");
@ -491,7 +511,7 @@ group = new SimpleGroup(
); );
createObjectGroups(group, 0, createObjectGroups(group, 0,
avoidClasses(clWater, 1, clHill, 1, clPlayer, 1, clDirt, 1), avoidClasses(clWater, 1, clHill, 1, clPlayer, 1, clDirt, 1),
mapArea * 0.000763, 50 scaleByMapSize(13, 200), 50
); );
// Set environment // Set environment

View File

@ -223,6 +223,8 @@ for (var ix = 0; ix <= mapSize; ix++)
} }
} }
RMS.SetProgress(15);
// Paint base terrain // Paint base terrain
log("Painting terrain..."); log("Painting terrain...");
@ -387,6 +389,8 @@ for (var ix = 0; ix < mapSize; ix++)
} }
} }
RMS.SetProgress(30);
for (var i = 1; i <= numPlayers; i++) for (var i = 1; i <= numPlayers; i++)
{ {
log("Creating base for player " + i + "..."); log("Creating base for player " + i + "...");
@ -398,11 +402,16 @@ for (var i = 1; i <= numPlayers; i++)
var iz = round(fz); var iz = round(fz);
addToClass(ix, iz, clPlayer); addToClass(ix, iz, clPlayer);
// create the city patch // create the city patch, flatten area under TC
var cityRadius = 8; var cityRadius = 8;
var placer = new ClumpPlacer(PI*cityRadius*cityRadius, 0.6, 0.3, 10, ix, iz); 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], [1]);
createArea(placer, painter, null); var elevationPainter = new SmoothElevationPainter(
ELEVATION_SET, // type
5, // elevation
2 // blend radius
);
createArea(placer, [painter, elevationPainter], null);
// get civ specific starting entities // get civ specific starting entities
var civEntities = getStartingEntities(i-1); var civEntities = getStartingEntities(i-1);
@ -488,28 +497,7 @@ for (var i = 1; i <= numPlayers; i++)
createObjectGroup(group, 0, avoidClasses(clBaseResource,2)); createObjectGroup(group, 0, avoidClasses(clBaseResource,2));
} }
log("Creating straggler trees..."); RMS.SetProgress(40);
// create straggler trees
var trees = [oCarob, oBeech, oLombardyPoplar, oLombardyPoplar, oPine];
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),
mapArea/7000, 50
);
}
log("Creating cypress trees...");
// create cypresses
group = new SimpleGroup(
[new SimpleObject(oCypress2, 1,3, 0,3),
new SimpleObject(oCypress1, 0,2, 0,2)]
);
createObjectGroups(group, 0,
avoidClasses(clWater, 4, clCliff, 2, clForest, 1, clPlayer, 15),
mapArea/3500, 50
);
log("Creating bushes..."); log("Creating bushes...");
// create bushes // create bushes
@ -519,9 +507,11 @@ group = new SimpleGroup(
); );
createObjectGroups(group, 0, createObjectGroups(group, 0,
avoidClasses(clWater, 4, clCliff, 2), avoidClasses(clWater, 4, clCliff, 2),
mapArea/1800, 50 scaleByMapSize(9, 146), 50
); );
RMS.SetProgress(45);
log("Creating rocks..."); log("Creating rocks...");
// create rocks // create rocks
group = new SimpleGroup( group = new SimpleGroup(
@ -530,27 +520,63 @@ group = new SimpleGroup(
); );
createObjectGroups(group, 0, createObjectGroups(group, 0,
avoidClasses(clWater, 0, clCliff, 0), avoidClasses(clWater, 0, clCliff, 0),
mapArea/1800, 50 scaleByMapSize(9, 146), 50
); );
RMS.SetProgress(50);
log("Creating stone mines..."); log("Creating stone mines...");
// create stone // create large stone quarries
group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,8), new SimpleObject(oStoneLarge, 0,1, 0,8)], true, clStone); group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clStone);
createObjectGroups(group, 0, createObjectGroups(group, 0,
[avoidClasses(clWater, 0, clForest, 0, clPlayer, 20, clStone, 15), [avoidClasses(clWater, 0, clForest, 1, clPlayer, 20, clStone, 15)],
borderClasses(clCliff, 0, 5)], scaleByMapSize(4,16), 100
scaleByMapSize(1,4) * numPlayers, 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)],
scaleByMapSize(4,16), 100
); );
log("Creating metal mines..."); log("Creating metal mines...");
// create metal // create large metal quarries
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,2)], true, clMetal); group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,2)], true, clMetal);
createObjectGroups(group, 0, createObjectGroups(group, 0,
[avoidClasses(clWater, 0, clForest, 0, clPlayer, 20, clMetal, 15, clStone, 5), [avoidClasses(clWater, 0, clForest, 1, clPlayer, 20, clMetal, 15, clStone, 5),
borderClasses(clCliff, 0, 5)], borderClasses(clCliff, 0, 5)],
scaleByMapSize(1,4) * numPlayers, 100 scaleByMapSize(4,16), 100
); );
RMS.SetProgress(60);
log("Creating straggler trees...");
// create straggler trees
var trees = [oCarob, oBeech, oLombardyPoplar, oLombardyPoplar, oPine];
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),
scaleByMapSize(2, 38), 50
);
}
RMS.SetProgress(70);
// create straggler cypresses
group = new SimpleGroup(
[new SimpleObject(oCypress2, 1,3, 0,3), new SimpleObject(oCypress1, 0,2, 0,2)],
true
);
createObjectGroups(group, 0,
avoidClasses(clWater, 4, clCliff, 2, clForest, 1, clPlayer, 15, clMetal, 1, clStone, 1),
scaleByMapSize(5, 75), 50
);
RMS.SetProgress(80);
log("Creating sheep..."); log("Creating sheep...");
// create sheep // create sheep
group = new SimpleGroup([new SimpleObject(oSheep, 2,4, 0,2)], true, clFood); group = new SimpleGroup([new SimpleObject(oSheep, 2,4, 0,2)], true, clFood);
@ -559,13 +585,30 @@ createObjectGroups(group, 0,
3 * numPlayers, 50 3 * numPlayers, 50
); );
RMS.SetProgress(85);
log("Creating fish..."); log("Creating fish...");
// create fish // create fish
group = new SimpleGroup([new SimpleObject(oFish, 1,1, 0,1)], true, clFood); var num = scaleByMapSize(4, 16);
createObjectGroups(group, 0, var offsetX = mapSize * WATER_WIDTH/2;
[borderClasses(clWater, 7, 0), avoidClasses(clFood, 8, clCliff, 0)], for (var i = 0; i < num; ++i)
3 * numPlayers, 50 {
); var cX = round(offsetX + offsetX/2 * randFloat(-1, 1));
var cY = round((i + 0.5) * mapSize/num);
group = new SimpleGroup([new SimpleObject(oFish, 1,1, 0,1)], true, clFood, cX, cY);
createObjectGroup(group, 0);
}
for (var i = 0; i < num; ++i)
{
var cX = round(mapSize - offsetX + offsetX/2 * randFloat(-1, 1));
var cY = round((i + 0.5) * mapSize/num);
error(cX+" "+cY);
group = new SimpleGroup([new SimpleObject(oFish, 1,1, 0,1)], true, clFood, cX, cY);
createObjectGroup(group, 0);
}
RMS.SetProgress(90);
// create deer // create deer
log("Creating deer..."); log("Creating deer...");
@ -578,6 +621,8 @@ createObjectGroups(group, 0,
3 * numPlayers, 50 3 * numPlayers, 50
); );
RMS.SetProgress(95);
log("Creating berry bushes..."); log("Creating berry bushes...");
// create berry bushes // create berry bushes
group = new SimpleGroup([new SimpleObject(oBerryBush, 5,7, 0,3)], true, clFood); group = new SimpleGroup([new SimpleObject(oBerryBush, 5,7, 0,3)], true, clFood);

View File

@ -5,6 +5,7 @@
"Description" : "The Italian peninsula", "Description" : "The Italian peninsula",
"BaseTerrain" : ["medit_grass_field_dry", "medit_grass_field_brown", "medit_grass_field_b"], "BaseTerrain" : ["medit_grass_field_dry", "medit_grass_field_brown", "medit_grass_field_b"],
"BaseHeight" : 0, "BaseHeight" : 0,
"CircularMap" : false,
"XXXXXX" : "Optionally define other things here, like we would for a scenario" "XXXXXX" : "Optionally define other things here, like we would for a scenario"
} }
} }

View File

@ -191,7 +191,7 @@ for (var i = 0; i < numPlayers; i++)
createObjectGroup(group, 0, avoidClasses(clBaseResource,1)); createObjectGroup(group, 0, avoidClasses(clBaseResource,1));
} }
RMS.SetProgress(5); RMS.SetProgress(10);
// create patches // create patches
log("Creating dune patches..."); log("Creating dune patches...");
@ -202,6 +202,8 @@ createAreas(placer, [painter, paintClass(clPatch)],
scaleByMapSize(5, 20) scaleByMapSize(5, 20)
); );
RMS.SetProgress(15);
log("Creating sand patches..."); log("Creating sand patches...");
var placer = new ClumpPlacer(scaleByMapSize(25, 100), 0.2, 0.1, 0); var placer = new ClumpPlacer(scaleByMapSize(25, 100), 0.2, 0.1, 0);
var painter = new TerrainPainter([tSand, tFineSand]); var painter = new TerrainPainter([tSand, tFineSand]);
@ -210,7 +212,7 @@ createAreas(placer, [painter, paintClass(clPatch)],
scaleByMapSize(15, 50) scaleByMapSize(15, 50)
); );
RMS.SetProgress(24); RMS.SetProgress(20);
log("Creating dirt patches..."); log("Creating dirt patches...");
placer = new ClumpPlacer(scaleByMapSize(25, 100), 0.2, 0.1, 0); placer = new ClumpPlacer(scaleByMapSize(25, 100), 0.2, 0.1, 0);
@ -220,7 +222,7 @@ createAreas(placer, [painter, paintClass(clPatch)],
scaleByMapSize(15, 50) scaleByMapSize(15, 50)
); );
RMS.SetProgress(32); RMS.SetProgress(25);
// create the oasis // create the oasis
log("Creating oasis..."); log("Creating oasis...");
@ -230,6 +232,8 @@ painter = new LayeredPainter([[tSand, pForest], [tGrassSand25, pForestOasis], tG
elevationPainter = new SmoothElevationPainter(ELEVATION_MODIFY, -11, 8); elevationPainter = new SmoothElevationPainter(ELEVATION_MODIFY, -11, 8);
createArea(placer, [painter, elevationPainter, paintClass(clForest)], null); createArea(placer, [painter, elevationPainter, paintClass(clForest)], null);
RMS.SetProgress(30);
// create oasis wildlife // create oasis wildlife
var num = round(PI * oRadius / 8); var num = round(PI * oRadius / 8);
var constraint = new AndConstraint([borderClasses(clForest, 0, 3), avoidClasses(clForest, 0)]); var constraint = new AndConstraint([borderClasses(clForest, 0, 3), avoidClasses(clForest, 0)]);
@ -274,7 +278,7 @@ for (var i = 0; i < num; ++i)
createObjectGroup(group, 0); createObjectGroup(group, 0);
} }
RMS.SetProgress(51); RMS.SetProgress(35);
// create hills // create hills
log("Creating level 1 hills..."); log("Creating level 1 hills...");
@ -289,6 +293,8 @@ var hillAreas = createAreas(placer, [terrainPainter, elevationPainter, paintClas
scaleByMapSize(10,20), 100 scaleByMapSize(10,20), 100
); );
RMS.SetProgress(40);
log("Creating small level 1 hills..."); log("Creating small level 1 hills...");
placer = new ClumpPlacer(scaleByMapSize(25,150), 0.25, 0.1, 0.5); placer = new ClumpPlacer(scaleByMapSize(25,150), 0.25, 0.1, 0.5);
terrainPainter = new LayeredPainter( terrainPainter = new LayeredPainter(
@ -305,23 +311,7 @@ for (var i = 0; i < tempAreas.length; ++i)
hillAreas.push(tempAreas[i]); hillAreas.push(tempAreas[i]);
} }
RMS.SetProgress(70); RMS.SetProgress(45);
log("Creating stone mines...");
// create stone
group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,8), new SimpleObject(oStoneLarge, 0,1, 0,8), new RandomObject(aBushes, 2,4, 0,2)], true, clRock);
createObjectGroups(group, 0,
[avoidClasses(clForest, 2, clPlayer, 10, clRock, 10, clHill1, 0)],
scaleByMapSize(1,4) * numPlayers, 100
);
log("Creating metal mines...");
// create metal
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,8), new RandomObject(aBushes, 2,4, 0,2)], true, clMetal);
createObjectGroups(group, 0,
[avoidClasses(clForest, 2, clPlayer, 10, clMetal, 10, clRock, 5, clHill1, 0)],
scaleByMapSize(1,4) * numPlayers, 100
);
// create decorative rocks for hills // create decorative rocks for hills
log("Creating decorative rocks..."); log("Creating decorative rocks...");
@ -335,7 +325,7 @@ createObjectGroupsByAreas(group, 0,
hillAreas hillAreas
); );
RMS.SetProgress(81); RMS.SetProgress(50);
log("Creating level 2 hills..."); log("Creating level 2 hills...");
placer = new ClumpPlacer(scaleByMapSize(25,150), 0.25, 0.1, 0); placer = new ClumpPlacer(scaleByMapSize(25,150), 0.25, 0.1, 0);
@ -350,7 +340,7 @@ createAreasInAreas(placer, [terrainPainter, elevationPainter],
hillAreas hillAreas
); );
RMS.SetProgress(91); RMS.SetProgress(55);
log("Creating level 3 hills..."); log("Creating level 3 hills...");
placer = new ClumpPlacer(scaleByMapSize(12, 75), 0.25, 0.1, 0); placer = new ClumpPlacer(scaleByMapSize(12, 75), 0.25, 0.1, 0);
@ -366,6 +356,8 @@ createAreas(placer, [terrainPainter, elevationPainter],
); );
hillAreas = []; hillAreas = [];
RMS.SetProgress(60);
// create bumps // create bumps
log("Creating bumps..."); log("Creating bumps...");
placer = new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 0); placer = new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 0);
@ -377,6 +369,8 @@ createAreas(
scaleByMapSize(100, 200) scaleByMapSize(100, 200)
); );
RMS.SetProgress(65);
// calculate desired number of trees for map (based on size) // calculate desired number of trees for map (based on size)
const MIN_TREES = 500; const MIN_TREES = 500;
const MAX_TREES = 2500; const MAX_TREES = 2500;
@ -396,7 +390,32 @@ createAreas(placer, [painter, paintClass(clForest)],
num, 50 num, 50
); );
RMS.SetProgress(97); RMS.SetProgress(70);
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)],
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)],
scaleByMapSize(4,16), 100
);
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)],
scaleByMapSize(4,16), 100
);
RMS.SetProgress(80);
// create gazelles // create gazelles
log("Creating gazelles..."); log("Creating gazelles...");
@ -422,6 +441,8 @@ createObjectGroups(group, 0,
scaleByMapSize(5,20), 50 scaleByMapSize(5,20), 50
); );
RMS.SetProgress(85);
// create straggler trees // create straggler trees
log("Creating straggler trees..."); log("Creating straggler trees...");
var types = [oDatePalm, oSDatePalm]; // some variation var types = [oDatePalm, oSDatePalm]; // some variation
@ -430,17 +451,19 @@ for (var i = 0; i < types.length; ++i)
{ {
group = new SimpleGroup([new SimpleObject(types[i], 1,1, 0,0)], true); group = new SimpleGroup([new SimpleObject(types[i], 1,1, 0,0)], true);
createObjectGroups(group, 0, createObjectGroups(group, 0,
avoidClasses(clForest, 0, clHill1, 1, clPlayer, 0), avoidClasses(clForest, 0, clHill1, 1, clPlayer, 0, clMetal, 1, clRock, 1),
num num
); );
} }
RMS.SetProgress(90);
// create bushes // create bushes
log("Creating bushes..."); log("Creating bushes...");
group = new SimpleGroup([new RandomObject(aBushes, 2,3, 0,2)]); group = new SimpleGroup([new RandomObject(aBushes, 2,3, 0,2)]);
createObjectGroups(group, 0, createObjectGroups(group, 0,
avoidClasses(clHill1, 1, clPlayer, 0, clForest, 0), avoidClasses(clHill1, 1, clPlayer, 0, clForest, 0),
mapArea/1000 scaleByMapSize(16, 262)
); );
// create rocks // create rocks
@ -448,7 +471,7 @@ log("Creating more decorative rocks...");
group = new SimpleGroup([new SimpleObject(aDecorativeRock, 1,2, 0,2)]); group = new SimpleGroup([new SimpleObject(aDecorativeRock, 1,2, 0,2)]);
createObjectGroups(group, 0, createObjectGroups(group, 0,
avoidClasses(clHill1, 1, clPlayer, 0, clForest, 0), avoidClasses(clHill1, 1, clPlayer, 0, clForest, 0),
mapArea/1000 scaleByMapSize(16, 262)
); );
// Export map data // Export map data

View File

@ -105,39 +105,38 @@ function setDefaults(defs, obj)
} }
// Read civ data and player defaults // Read civ data and player defaults
function getStartingData() function loadCivData()
{ {
// Load civilization data // Load civilization data
if (!Atlas.State.CivData) Atlas.State.CivData = [];
{ Atlas.State.CivNames = [];
Atlas.State.CivData = []; Atlas.State.CivCodes = [];
Atlas.State.CivNames = [];
Atlas.State.CivCodes = []; var dataArray = Atlas.Message.GetCivData().data;
if (dataArray)
var dataArray = Atlas.Message.GetCivData().data; { // parse JSON strings into objects
if (dataArray) for (var i = 0; i < dataArray.length; ++i)
{ // parse JSON strings into objects {
for (var i = 0; i < dataArray.length; ++i) var civ = JSON.parse(dataArray[i]);
if (civ)
{ {
var civ = JSON.parse(dataArray[i]); Atlas.State.CivData.push(civ);
if (civ) Atlas.State.CivNames.push(civ.Name);
{ Atlas.State.CivCodes.push(civ.Code);
Atlas.State.CivData.push(civ);
Atlas.State.CivNames.push(civ.Name);
Atlas.State.CivCodes.push(civ.Code);
}
} }
} }
} }
}
function loadPlayerDefaults()
{
// Load player default data (names, civs, colors, etc) // Load player default data (names, civs, colors, etc)
if (!Atlas.State.PlayerDefaults) Atlas.State.PlayerDefaults = [];
var rawData = Atlas.Message.GetPlayerDefaults().defaults;
if(rawData)
{ {
var rawData = Atlas.Message.GetPlayerDefaults().defaults; Atlas.State.PlayerDefaults = JSON.parse(rawData).PlayerData;
if(rawData)
{
Atlas.State.PlayerDefaults = JSON.parse(rawData).PlayerData;
}
} }
} }
@ -363,16 +362,14 @@ function init(window)
var rmsPanel = new wxPanel(window, -1); var rmsPanel = new wxPanel(window, -1);
var rmsSizer = new wxStaticBoxSizer(new wxStaticBox(rmsPanel, -1, 'Random map'), wxOrientation.VERTICAL); var rmsSizer = new wxStaticBoxSizer(new wxStaticBox(rmsPanel, -1, 'Random map'), wxOrientation.VERTICAL);
var scriptNames = [];
var scriptData = [];
boxSizer = new wxBoxSizer(wxOrientation.HORIZONTAL); boxSizer = new wxBoxSizer(wxOrientation.HORIZONTAL);
var rmsChoice = new wxChoice(rmsPanel, -1, wxDefaultPosition, wxDefaultSize, scriptNames); var rmsChoice = new wxChoice(rmsPanel, -1, wxDefaultPosition, wxDefaultSize, []);
rmsChoice.toolTip = "Select the random map script to run"; rmsChoice.toolTip = "Select the random map script to run";
function loadScriptChoices() function loadScriptChoices()
{ {
// Reload RMS data // Reload RMS data
scriptNames = []; Atlas.State.scriptNames = [];
scriptData = []; Atlas.State.scriptData = [];
// Get array of RMS data // Get array of RMS data
var rawData = Atlas.Message.GetRMSData().data; var rawData = Atlas.Message.GetRMSData().data;
@ -382,14 +379,14 @@ function init(window)
var data = JSON.parse(rawData[i]); var data = JSON.parse(rawData[i]);
if (data && data.settings) if (data && data.settings)
{ {
scriptData.push(data); Atlas.State.scriptData.push(data);
scriptNames.push(data.settings.Name); Atlas.State.scriptNames.push(data.settings.Name);
} }
} }
// Add script names to choice control // Add script names to choice control
rmsChoice.clear(); rmsChoice.clear();
rmsChoice.append(scriptNames); rmsChoice.append(Atlas.State.scriptNames);
rmsChoice.selection = 0; rmsChoice.selection = 0;
} }
boxSizer.add(rmsChoice, 1, wxAlignment.CENTER_VERTICAL); boxSizer.add(rmsChoice, 1, wxAlignment.CENTER_VERTICAL);
@ -424,7 +421,7 @@ function init(window)
var selection = rmsChoice.selection; var selection = rmsChoice.selection;
if (selection != -1) if (selection != -1)
{ {
var RMSData = scriptData[selection].settings; var RMSData = Atlas.State.scriptData[selection].settings;
if (RMSData) if (RMSData)
{ {
if (useRandomCtrl.value) if (useRandomCtrl.value)
@ -432,22 +429,17 @@ function init(window)
generateRandomSeed(); generateRandomSeed();
} }
// Base terrains must be array // Copy RMS data to map settings
var terrainArray = []; for (var prop in RMSData)
if (RMSData.BaseTerrain instanceof Array)
{ {
terrainArray = RMSData.BaseTerrain; Atlas.State.mapSettings.settings[prop] = RMSData[prop];
}
else
{ // Add string to array
terrainArray.push(RMSData.BaseTerrain);
} }
// Complete map settings // Complete map settings
Atlas.State.mapSettings.settings.Seed = Atlas.State.Seed ? Atlas.State.Seed : 0; Atlas.State.mapSettings.settings.Seed = Atlas.State.Seed ? Atlas.State.Seed : 0;
Atlas.State.mapSettings.settings.Size = sizeTiles[sizeChoice.selection]; Atlas.State.mapSettings.settings.Size = sizeTiles[sizeChoice.selection];
Atlas.State.mapSettings.settings.BaseTerrain = terrainArray;
Atlas.State.mapSettings.settings.BaseHeight = RMSData.BaseHeight; // TODO: Would be nice to have some sort of busy notification here
// Generate map // Generate map
var ret = Atlas.Message.GenerateMap(RMSData.Script, JSON.stringify(Atlas.State.mapSettings.settings)); var ret = Atlas.Message.GenerateMap(RMSData.Script, JSON.stringify(Atlas.State.mapSettings.settings));
@ -514,15 +506,30 @@ function init(window)
{ {
if (!g_externalNotify) if (!g_externalNotify)
{ {
// If we don't have civ data or player defaults yet, get those // We have to do these steps here, because the simulation is not
getStartingData(); // initialized when this script is first loaded
// If we don't have civ data, load those
if (!Atlas.State.CivData)
{
loadCivData();
}
// If we don't have default player data, load those
if (!Atlas.State.PlayerDefaults)
{
loadPlayerDefaults();
}
// If we don't have RMS data yet, load those
if (!Atlas.State.scriptData)
{
loadScriptChoices();
}
// Load map settings from engine // Load map settings from engine
getMapSettings(); getMapSettings();
// Load RMS names from engine
loadScriptChoices();
// Update UI controls // Update UI controls
updateMapName(); updateMapName();
updateMapDesc(); updateMapDesc();