Increasing thIncreasing the generation speed of the maps: Phoenician Levant

This was SVN commit r14183.
This commit is contained in:
O.Davoodi 2013-11-15 08:57:32 +00:00
parent 98638a2d2f
commit ca0575e422
8 changed files with 121 additions and 71 deletions

View File

@ -236,7 +236,7 @@ createAreas(
placer,
[terrainPainter, elevationPainter, paintClass(clHill)],
avoidClasses(clPlayer, 20, clHill, 15),
scaleByMapSize(1, 4) * numPlayers
scaleByMapSize(3, 15)
);

View File

@ -1,16 +1,33 @@
RMS.LoadLibrary("rmgen");
const tCity = "desert_city_tile_plaza";
const tDirtMain = ["desert_dirt_persia_1", "desert_dirt_persia_2", "grass_field_dry"];
const tLakebed1 = ["desert_lakebed_dry_b", "desert_lakebed_dry"];
const tLakebed2 = ["desert_lakebed_dry_b", "desert_lakebed_dry", "desert_shore_stones", "desert_shore_stones"];
const tPebbles = "desert_pebbles_rough";
const tCliff = ["desert_cliff_persia_1", "desert_cliff_persia_2"];
const tForestFloor = "medit_grass_field_dry";
const tRocky = "desert_dirt_persia_rocky";
const tRocks = "desert_dirt_persia_rocks";
const tGrass = "grass_field_dry";
const tHill = "desert_cliff_persia_base";
const tCity = "desert_city_tile_pers_dirt";
var random_season = randInt(0,1);
if (random_season) //summer
{
var tDirtMain = ["desert_dirt_persia_1", "desert_dirt_persia_2", "grass_field_dry"];
var tLakebed1 = ["desert_lakebed_dry_b", "desert_lakebed_dry"];
var tLakebed2 = ["desert_lakebed_dry_b", "desert_lakebed_dry", "desert_shore_stones", "desert_shore_stones"];
var tPebbles = "desert_pebbles_rough";
var tCliff = ["desert_cliff_persia_1", "desert_cliff_persia_crumbling"];
var tForestFloor = "medit_grass_field_dry";
var tRocky = "desert_dirt_persia_rocky";
var tRocks = "desert_dirt_persia_rocks";
var tGrass = "grass_field_dry";
var tHill = "desert_cliff_persia_base";
}
else //spring
{
var tDirtMain = ["desert_grass_a", "desert_grass_a", "desert_grass_a", "desert_plants_a"];
var tLakebed1 = ["desert_lakebed_dry_b", "desert_lakebed_dry"];
var tLakebed2 = "desert_grass_a_sand";
var tPebbles = "desert_pebbles_rough";
var tCliff = ["desert_cliff_persia_1", "desert_cliff_persia_crumbling"];
var tForestFloor = "desert_plants_b_persia";
var tRocky = "desert_plants_b_persia";
var tRocks = "desert_plants_a";
var tGrass = "desert_dirt_persia_rocky";
var tHill = "desert_cliff_persia_base";
}
// gaia entities
const oGrapesBush = "gaia/flora_bush_grapes";
@ -60,6 +77,15 @@ var clFood = createTileClass();
var clBaseResource = createTileClass();
var clCP = createTileClass();
for (var ix = 0; ix < mapSize; ix++)
{
for (var iz = 0; iz < mapSize; iz++)
{
var x = ix / (mapSize + 1.0);
var z = iz / (mapSize + 1.0);
placeTerrain(ix, iz, tDirtMain);
}
}
var playerIDs = [];
for (var i = 0; i < numPlayers; i++)
@ -209,30 +235,35 @@ RMS.SetProgress(25);
// create centeral plateau
log("Creating centeral plateau...");
var halfSize = mapSize / 2;
var oRadius = scaleByMapSize(18, 68);
placer = new ClumpPlacer(PI*oRadius*oRadius, 0.6, 0.15, 0, mapSize/2, mapSize/2);
painter = new LayeredPainter([tLakebed2, tLakebed1], [8]);
placer = new ChainPlacer(2, floor(scaleByMapSize(5, 13)), floor(scaleByMapSize(35, 200)), 1, halfSize, halfSize, 0, [floor(oRadius)]);
painter = new LayeredPainter([tLakebed2, tLakebed1], [6]);
var elevationPainter = new SmoothElevationPainter(ELEVATION_MODIFY, -10, 8);
createArea(placer, [painter, elevationPainter, paintClass(clCP)], null);
createArea(placer, [painter, elevationPainter, paintClass(clCP)], avoidClasses(clPlayer, 18));
RMS.SetProgress(30);
// create hills
log("Creating hills...");
placer = new ChainPlacer(1, floor(scaleByMapSize(4, 6)), floor(scaleByMapSize(16, 40)), 0.5);
var terrainPainter = new LayeredPainter(
[tCliff, tHill], // terrains
[2] // widths
);
var elevationPainter = new SmoothElevationPainter(ELEVATION_SET, 22, 2);
createAreas(
placer,
[terrainPainter, elevationPainter, paintClass(clHill)],
avoidClasses(clPlayer, 7, clCP, 5, clHill, 10),
scaleByMapSize(1, 4) * numPlayers * 3
);
var numHills = scaleByMapSize(20, 80)
for (var i = 0; i < numHills; ++i)
{
createMountain(
floor(scaleByMapSize(40, 60)),
floor(scaleByMapSize(3, 4)),
floor(scaleByMapSize(6, 12)),
floor(scaleByMapSize(4, 10)),
avoidClasses(clPlayer, 7, clCP, 5, clHill, floor(scaleByMapSize(18, 25))),
randInt(mapSize),
randInt(mapSize),
tCliff,
clHill,
14
);
}
RMS.SetProgress(35);
@ -299,23 +330,23 @@ log("Creating centeral 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,
stayClasses(clCP, 3),
5*scaleByMapSize(10,30), 100
stayClasses(clCP, 6),
5*scaleByMapSize(5,30), 50
);
// 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,
stayClasses(clCP, 3),
5*scaleByMapSize(10,30), 100
stayClasses(clCP, 6),
5*scaleByMapSize(5,30), 50
);
log("Creating centeral 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,
stayClasses(clCP, 3),
5*scaleByMapSize(10,30), 100
stayClasses(clCP, 6),
5*scaleByMapSize(5,30), 50
);
RMS.SetProgress(60);
@ -392,23 +423,6 @@ createObjectGroups(group, 0,
3 * numPlayers, 50
);
RMS.SetProgress(85);
// create dead trees
log("Creating dead trees...");
var types = [oTamarix]; // some variation
var num = floor(numStragglers / 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(clMetal, 1, clRock, 1), stayClasses(clCP, 2)],
num
);
}
RMS.SetProgress(90);
@ -428,5 +442,20 @@ for (var i = 0; i < types.length; ++i)
);
}
setSunColour(0.733, 0.746, 0.574);
if (!random_season)
setTerrainAmbientColour(0.329412, 0.419608, 0.501961);
setSunColour(1.0, 0.796, 0.374);
setSunElevation(PI / 6);
setSunRotation(-1.86532);
setFogFactor(0.2);
setFogThickness(0.0);
setFogColor(0.852, 0.746, 0.493);
setPPEffect("hdr");
setPPContrast(0.75);
setPPSaturation(0.45);
setPPBloom(0.3);
ExportMap();

View File

@ -106,6 +106,10 @@ for (var i = 0; i < numPlayers; i++)
var ix = floor(fx);
var iz = floor(fz);
addToClass(ix, iz, clPlayer);
addToClass(ix+5, iz, clPlayer);
addToClass(ix, iz+5, clPlayer);
addToClass(ix-5, iz, clPlayer);
addToClass(ix, iz-5, clPlayer);
// create the city patch
var cityRadius = radius/3;
@ -256,7 +260,7 @@ createAreas(
// create hills
log("Creating hills...");
placer = new ClumpPlacer(scaleByMapSize(20, 150), 0.2, 0.1, 1);
placer = new ChainPlacer(1, floor(scaleByMapSize(4, 6)), floor(scaleByMapSize(16, 40)), 0.5);
var terrainPainter = new LayeredPainter(
[tCliff, tHill], // terrains
[2] // widths
@ -280,8 +284,8 @@ var numStragglers = totalTrees * (1.0 - P_FOREST);
// create forests
log("Creating forests...");
var num = scaleByMapSize(10,30);
placer = new ClumpPlacer(numForest / num, 0.15, 0.1, 0.5);
var num = scaleByMapSize(10,42);
placer = new ChainPlacer(1, floor(scaleByMapSize(3, 5)), numForest / (num * floor(scaleByMapSize(2,5))), 0.5);
painter = new TerrainPainter([tForestFloor, pForest]);
createAreas(placer, [painter, paintClass(clForest)],
avoidClasses(clPlayer, 20, clForest, 10, clWater, 1, clHill, 1, clBaseResource, 3),
@ -297,10 +301,10 @@ RMS.SetProgress(50);
// create grass patches
log("Creating grass patches...");
var sizes = [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)];
var sizes = [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)];
for (var i = 0; i < sizes.length; i++)
{
placer = new ClumpPlacer(sizes[i], 0.3, 0.06, 0.5);
placer = new ChainPlacer(1, floor(scaleByMapSize(3, 5)), sizes[i], 0.5);
painter = new LayeredPainter(
[[tGrass,tRocksShrubs],[tRocksShrubs,tRocksGrass], [tRocksGrass,tGrass]], // terrains
[1,1] // widths
@ -317,10 +321,10 @@ RMS.SetProgress(55);
// create dirt patches
log("Creating dirt patches...");
var sizes = [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)];
var sizes = [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)];
for (var i = 0; i < sizes.length; i++)
{
placer = new ClumpPlacer(sizes[i], 0.3, 0.06, 0.5);
placer = new ChainPlacer(1, floor(scaleByMapSize(3, 5)), sizes[i], 0.5);
painter = new LayeredPainter(
[[tDirt,tDirtB],[tDirt,tMainDirt], [tDirtB,tMainDirt]], // terrains
[1,1] // widths
@ -506,5 +510,21 @@ setWaterReflectionTint(0.31,0.769,0.894);
setWaterWaviness(3);
setWaterMurkiness(0.8);
setWaterReflectionTintStrength(0.1);
setTerrainAmbientColour(0.57, 0.58, 0.55);
setUnitsAmbientColour(0.447059, 0.509804, 0.54902);
setSunElevation(0.671884);
setSunRotation(-0.582913);
setFogFactor(0.2);
setFogThickness(0.15);
setFogColor(0.8, 0.7, 0.6);
setPPEffect("hdr");
setPPContrast(0.53);
setPPSaturation(0.47);
setPPBloom(0.52);
// Export map data
ExportMap();

View File

@ -229,7 +229,7 @@ function createObjectGroups(placer, player, constraint, num, retryFactor)
var maxFail = num * retryFactor;
var good = 0;
var bad = 0;
var halfSize = getMapSize()/2;
var halfSize = getMapSize()/2 - 3;
while(good < num && bad <= maxFail)
{
if (isCircularMap())
@ -334,6 +334,7 @@ function createSimpleTerrain(terrain)
function placeObject(x, z, type, player, angle)
{
if (g_Map.validT(x, z, 3))
g_Map.addObject(new Entity(type, player, x, z, angle));
}
@ -341,7 +342,6 @@ function placeTerrain(x, z, terrain)
{
// convert terrain param into terrain object
g_Map.placeTerrain(x, z, createTerrain(terrain));
}
function isCircularMap()

View File

@ -106,13 +106,13 @@ Map.prototype.validT = function(x, z, distance)
{
if (g_MapSettings.CircularMap)
{ // Within map circle
if (distance == undefined)
var halfSize = Math.floor(0.5*this.size);
else
var halfSize = Math.floor(0.5*this.size)-distance;
var dx = (x - halfSize);
var dz = (z - halfSize);
if (distance === undefined)
return Math.round(Math.sqrt(dx*dx + dz*dz)) < halfSize - 1;
else
return Math.round(Math.sqrt(dx*dx + dz*dz)) < halfSize - distance - 1;
}
else
{ // Within map square
@ -197,7 +197,7 @@ Map.prototype.getTerrainObjects = function(x, z)
Map.prototype.setTerrainObject = function(x, z, object)
{
if (!this.validT(x, z))
if (!this.validT(x, z, 2))
{
throw("setTerrainObject: invalid tile position ("+x+", "+z+")");
}

File diff suppressed because one or more lines are too long

View File

@ -612,6 +612,7 @@ SimpleGroup.prototype.place = function(player, constraint)
length = resultObjs.length;
for (var i=0; i < length; i++)
{
if (g_Map.validT(round(resultObjs[i].position.x/CELL_SIZE), round(resultObjs[i].position.z/CELL_SIZE), 3))
g_Map.addObject(resultObjs[i]);
if (this.tileClass !== undefined)

View File

@ -43,7 +43,7 @@ SimpleTerrain.prototype = new Terrain();
SimpleTerrain.prototype.constructor = SimpleTerrain;
SimpleTerrain.prototype.placeNew = function(x, z)
{
if (this.treeType !== undefined)
if (this.treeType !== undefined && g_Map.validT(round(x), round(z), 3))
{
g_Map.terrainObjects[x][z] = new Entity(this.treeType, 0, x+0.5, z+0.5, randFloat()*TWO_PI);
}