forked from 0ad/0ad
Trivial random map script cleanup.
Remove duplicate comments and add more progress updates. Few whitespace fixes and ternaries. This was SVN commit r18873.
This commit is contained in:
parent
f92279bbef
commit
c1774bc4f2
@ -74,7 +74,6 @@ else
|
||||
const pForest = [tForestFloor + TERRAIN_SEPARATOR + oPine, tForestFloor];
|
||||
|
||||
log("Initializing map...");
|
||||
|
||||
InitMap();
|
||||
|
||||
const numPlayers = getNumPlayers();
|
||||
@ -94,21 +93,18 @@ var clSettlement = createTileClass();
|
||||
|
||||
//cover the ground with the primary terrain chosen in the beginning
|
||||
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, tPrimary);
|
||||
}
|
||||
}
|
||||
|
||||
// randomize player order
|
||||
var playerIDs = [];
|
||||
for (var i = 0; i < numPlayers; i++)
|
||||
{
|
||||
playerIDs.push(i+1);
|
||||
}
|
||||
|
||||
playerIDs = sortPlayers(playerIDs);
|
||||
|
||||
// place players
|
||||
@ -151,7 +147,6 @@ for (var i = 0; i < numPlayers; i++)
|
||||
var painter = new LayeredPainter([tRoadWild, tRoad], [1]);
|
||||
createArea(placer, painter, null);
|
||||
|
||||
// create starting units
|
||||
placeCivDefaultEntities(fx, fz, id);
|
||||
|
||||
placeDefaultChicken(fx, fz, clBaseResource);
|
||||
@ -170,9 +165,8 @@ for (var i = 0; i < numPlayers; i++)
|
||||
// create metal mine
|
||||
var mAngle = bbAngle;
|
||||
while(abs(mAngle - bbAngle) < PI/3)
|
||||
{
|
||||
mAngle = randFloat(0, TWO_PI);
|
||||
}
|
||||
|
||||
var mDist = 12;
|
||||
var mX = round(fx + mDist * cos(mAngle));
|
||||
var mZ = round(fz + mDist * sin(mAngle));
|
||||
@ -219,7 +213,6 @@ for (var i = 0; i < numPlayers; i++)
|
||||
createObjectGroup(group, 0);
|
||||
}
|
||||
}
|
||||
|
||||
RMS.SetProgress(20);
|
||||
|
||||
//place the mountains
|
||||
@ -251,26 +244,19 @@ points.push([round(fractionToTiles(0.5)), round(fractionToTiles(0.5))]);
|
||||
var numPoints = numPlayers * 4 + 1;
|
||||
|
||||
for (var i = 0; i < numPoints; ++i)
|
||||
{
|
||||
edgesConncetedToPoints.push(0);
|
||||
}
|
||||
|
||||
//we are making a planar graph where every edge is a straight line.
|
||||
var possibleEdges = [];
|
||||
|
||||
//add all of the possible combinations
|
||||
for (var i = 0; i < numPoints; ++i)
|
||||
{
|
||||
for (var j = numPlayers; j < numPoints; ++j)
|
||||
{
|
||||
if (j > i)
|
||||
possibleEdges.push([i,j]);
|
||||
}
|
||||
}
|
||||
|
||||
//we need a matrix so that we can prevent the mountain ranges from bocking a player
|
||||
var matrix = [];
|
||||
|
||||
for (var i = 0; i < numPoints; ++i)
|
||||
{
|
||||
matrix.push([]);
|
||||
@ -284,7 +270,7 @@ for (var i = 0; i < numPoints; ++i)
|
||||
}
|
||||
|
||||
//find and place the edges
|
||||
while (possibleEdges.length > 0)
|
||||
while (possibleEdges.length)
|
||||
{
|
||||
var index = randInt(0, possibleEdges.length - 1);
|
||||
|
||||
@ -322,7 +308,6 @@ while (possibleEdges.length > 0)
|
||||
}
|
||||
|
||||
for (var i = 0; i < numPoints; ++i)
|
||||
{
|
||||
if (matrix[selected][i])
|
||||
{
|
||||
if (i == backtree[tree.lastIndexOf(selected)])
|
||||
@ -343,7 +328,6 @@ while (possibleEdges.length > 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!accept)
|
||||
@ -452,7 +436,6 @@ while (possibleEdges.length > 0)
|
||||
paintTerrainBasedOnHeight(3.1, 29, 0, tCliff);
|
||||
paintTerrainBasedOnHeight(29, 30, 3, tSnowLimited);
|
||||
|
||||
// create bumps
|
||||
log("Creating bumps...");
|
||||
placer = new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1);
|
||||
painter = new SmoothElevationPainter(ELEVATION_MODIFY, 2, 2);
|
||||
@ -462,8 +445,8 @@ createAreas(
|
||||
avoidClasses(clPlayer, 10),
|
||||
scaleByMapSize(100, 200)
|
||||
);
|
||||
RMS.SetProgress(40);
|
||||
|
||||
// create hills
|
||||
log("Creating hills...");
|
||||
placer = new ClumpPlacer(scaleByMapSize(40, 150), 0.2, 0.1, 1);
|
||||
var terrainPainter = new LayeredPainter(
|
||||
@ -477,6 +460,7 @@ createAreas(
|
||||
avoidClasses(clPlayer, 20, clHill, 14),
|
||||
scaleByMapSize(10, 80) * numPlayers
|
||||
);
|
||||
RMS.SetProgress(50);
|
||||
|
||||
// calculate desired number of trees for map (based on size)
|
||||
var MIN_TREES = 500;
|
||||
@ -487,7 +471,6 @@ var totalTrees = scaleByMapSize(MIN_TREES, MAX_TREES);
|
||||
var numForest = totalTrees * P_FOREST;
|
||||
var numStragglers = totalTrees * (1.0 - P_FOREST);
|
||||
|
||||
// create forests
|
||||
log("Creating forests...");
|
||||
var types = [
|
||||
[[tForestFloor, tPrimary, pForest], [tForestFloor, pForest]]
|
||||
@ -510,10 +493,8 @@ for (var i = 0; i < types.length; ++i)
|
||||
num
|
||||
);
|
||||
}
|
||||
|
||||
RMS.SetProgress(60);
|
||||
|
||||
// create dirt patches
|
||||
log("Creating dirt patches...");
|
||||
var sizes = [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)];
|
||||
for (var i = 0; i < sizes.length; i++)
|
||||
@ -531,7 +512,6 @@ for (var i = 0; i < sizes.length; i++)
|
||||
);
|
||||
}
|
||||
|
||||
// create grass patches
|
||||
log("Creating grass patches...");
|
||||
var sizes = [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5, 80)];
|
||||
for (var i = 0; i < sizes.length; i++)
|
||||
@ -547,16 +527,14 @@ for (var i = 0; i < sizes.length; i++)
|
||||
}
|
||||
RMS.SetProgress(65);
|
||||
|
||||
|
||||
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
|
||||
log("Creating small stone mines...");
|
||||
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
|
||||
createObjectGroups(group, 0,
|
||||
avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
|
||||
@ -564,16 +542,13 @@ createObjectGroups(group, 0,
|
||||
);
|
||||
|
||||
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
|
||||
);
|
||||
|
||||
RMS.SetProgress(70);
|
||||
|
||||
// create small decorative rocks
|
||||
log("Creating small decorative rocks...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(aRockMedium, 1,3, 0,1)],
|
||||
@ -585,8 +560,6 @@ createObjectGroups(
|
||||
scaleByMapSize(16, 262), 50
|
||||
);
|
||||
|
||||
|
||||
// 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)],
|
||||
@ -597,10 +570,8 @@ createObjectGroups(
|
||||
avoidClasses(clForest, 0, clPlayer, 0, clHill, 0),
|
||||
scaleByMapSize(8, 131), 50
|
||||
);
|
||||
|
||||
RMS.SetProgress(75);
|
||||
|
||||
// create deer
|
||||
log("Creating deer...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(oDeer, 5,7, 0,4)],
|
||||
@ -611,7 +582,6 @@ createObjectGroups(group, 0,
|
||||
3 * numPlayers, 50
|
||||
);
|
||||
|
||||
// create berry bush
|
||||
log("Creating berry bush...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(oBerryBush, 5,7, 0,4)],
|
||||
@ -622,7 +592,6 @@ createObjectGroups(group, 0,
|
||||
randInt(1, 4) * numPlayers + 2, 50
|
||||
);
|
||||
|
||||
// create rabbit
|
||||
log("Creating rabbit...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(oRabbit, 2,3, 0,2)],
|
||||
@ -632,11 +601,8 @@ createObjectGroups(group, 0,
|
||||
avoidClasses(clForest, 0, clPlayer, 10, clHill, 1, clFood, 20),
|
||||
3 * numPlayers, 50
|
||||
);
|
||||
|
||||
RMS.SetProgress(85);
|
||||
|
||||
|
||||
// create straggler trees
|
||||
log("Creating straggler trees...");
|
||||
var types = [oPine, oPine]; // some variation
|
||||
var num = floor(numStragglers / types.length);
|
||||
@ -652,8 +618,6 @@ for (var i = 0; i < types.length; ++i)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
//create small grass tufts
|
||||
log("Creating small grass tufts...");
|
||||
var planetm = 1;
|
||||
|
||||
@ -664,10 +628,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)]
|
||||
@ -676,10 +638,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)]
|
||||
@ -705,6 +665,4 @@ setWaterMurkiness(0.72);
|
||||
setWaterWaviness(2.0);
|
||||
setWaterType("lake");
|
||||
|
||||
// Export map data
|
||||
|
||||
ExportMap();
|
||||
ExportMap();
|
||||
|
@ -2,7 +2,6 @@ RMS.LoadLibrary("rmgen");
|
||||
|
||||
TILE_CENTERED_HEIGHT_MAP = true;
|
||||
|
||||
//random terrain textures
|
||||
var random_terrain = randomizeBiome();
|
||||
|
||||
const tMainTerrain = rBiomeT1();
|
||||
@ -50,15 +49,12 @@ const pForest1 = [tForestFloor2 + TERRAIN_SEPARATOR + oTree1, tForestFloor2 + TE
|
||||
const pForest2 = [tForestFloor1 + TERRAIN_SEPARATOR + oTree4, tForestFloor1 + TERRAIN_SEPARATOR + oTree5, tForestFloor1];
|
||||
|
||||
log("Initializing map...");
|
||||
|
||||
InitMap();
|
||||
|
||||
const numPlayers = getNumPlayers();
|
||||
const mapSize = getMapSize();
|
||||
const mapArea = mapSize*mapSize;
|
||||
|
||||
// create tile classes
|
||||
|
||||
var clPlayer = createTileClass();
|
||||
var clHill = createTileClass();
|
||||
var clForest = createTileClass();
|
||||
@ -70,12 +66,10 @@ var clBaseResource = createTileClass();
|
||||
var clSettlement = createTileClass();
|
||||
var clLand = createTileClass();
|
||||
|
||||
// randomize player order
|
||||
var playerIDs = [];
|
||||
for (var i = 0; i < numPlayers; i++)
|
||||
{
|
||||
playerIDs.push(i+1);
|
||||
}
|
||||
|
||||
playerIDs = sortPlayers(playerIDs);
|
||||
|
||||
// place players
|
||||
@ -121,7 +115,6 @@ for (var i = 0; i < numPlayers; i++)
|
||||
);
|
||||
createArea(placer, [terrainPainter, elevationPainter, paintClass(clPlayer)], null);
|
||||
|
||||
// create starting units
|
||||
placeCivDefaultEntities(fx, fz, id, { 'iberWall': 'towers' });
|
||||
|
||||
placeDefaultChicken(fx, fz, clBaseResource);
|
||||
@ -151,9 +144,8 @@ for (var i = 0; i < numPlayers; i++)
|
||||
// create metal mine
|
||||
var mAngle = bbAngle;
|
||||
while(abs(mAngle - bbAngle) < PI/3)
|
||||
{
|
||||
mAngle = randFloat(0, TWO_PI);
|
||||
}
|
||||
|
||||
var mDist = 12;
|
||||
var mX = round(fx + mDist * cos(mAngle));
|
||||
var mZ = round(fz + mDist * sin(mAngle));
|
||||
@ -201,7 +193,6 @@ for (var i = 0; i < numPlayers; i++)
|
||||
}
|
||||
}
|
||||
|
||||
// create islands
|
||||
log("Creating islands...");
|
||||
placer = new ChainPlacer(floor(scaleByMapSize(4, 8)), floor(scaleByMapSize(8, 14)), floor(scaleByMapSize(25, 60)), 0.07, undefined, undefined, scaleByMapSize(30,70));
|
||||
terrainPainter = new LayeredPainter(
|
||||
@ -216,7 +207,6 @@ createAreas(
|
||||
scaleByMapSize(1, 5)*randInt(5,10)
|
||||
);
|
||||
|
||||
//painting the terrain
|
||||
paintTerrainBasedOnHeight(2.4, 3.4, 3, tMainTerrain);
|
||||
paintTerrainBasedOnHeight(1, 3, 0, tShore);
|
||||
paintTerrainBasedOnHeight(-8, 1, 2, tWater);
|
||||
@ -235,16 +225,13 @@ for (var i = 0; i < numPlayers; i++)
|
||||
createArea(placer, painter, null);
|
||||
}
|
||||
|
||||
// create bumps
|
||||
createBumps([avoidClasses(clPlayer, 10), stayClasses(clLand, 5)]);
|
||||
|
||||
// create hills
|
||||
if (randInt(1,2) == 1)
|
||||
createHills([tMainTerrain, tCliff, tHill], [avoidClasses(clPlayer, 2, clHill, 15), stayClasses(clLand, 0)], clHill, scaleByMapSize(1, 4) * numPlayers);
|
||||
else
|
||||
createMountains(tCliff, [avoidClasses(clPlayer, 2, clHill, 15), stayClasses(clLand, 0)], clHill, scaleByMapSize(1, 4) * numPlayers);
|
||||
|
||||
// create forests
|
||||
createForests(
|
||||
[tMainTerrain, tForestFloor1, tForestFloor2, pForest1, pForest2],
|
||||
[avoidClasses(clPlayer, 20, clForest, 17, clHill, 0), stayClasses(clLand, 4)],
|
||||
@ -252,10 +239,8 @@ createForests(
|
||||
1.0,
|
||||
random_terrain
|
||||
);
|
||||
|
||||
RMS.SetProgress(50);
|
||||
|
||||
// create dirt patches
|
||||
log("Creating dirt patches...");
|
||||
createLayeredPatches(
|
||||
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
|
||||
@ -264,18 +249,15 @@ createLayeredPatches(
|
||||
[avoidClasses(clForest, 0, clHill, 0, clDirt, 3, clPlayer, 12), stayClasses(clLand, 7)]
|
||||
);
|
||||
|
||||
// create grass patches
|
||||
log("Creating grass patches...");
|
||||
createPatches(
|
||||
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
|
||||
tTier4Terrain,
|
||||
[avoidClasses(clForest, 0, clHill, 0, clDirt, 3, clPlayer, 12), stayClasses(clLand, 7)]
|
||||
);
|
||||
|
||||
RMS.SetProgress(55);
|
||||
|
||||
log("Creating stone mines...");
|
||||
// create stone quarries
|
||||
createMines(
|
||||
[
|
||||
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
|
||||
@ -285,7 +267,6 @@ createMines(
|
||||
);
|
||||
|
||||
log("Creating metal mines...");
|
||||
// create large metal quarries
|
||||
createMines(
|
||||
[
|
||||
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
|
||||
@ -293,15 +274,10 @@ createMines(
|
||||
[avoidClasses(clForest, 1, clPlayer, 7, clMetal, 10, clRock, 5, clHill, 1), stayClasses(clLand, 6)],
|
||||
clMetal
|
||||
);
|
||||
|
||||
RMS.SetProgress(65);
|
||||
|
||||
// create decoration
|
||||
var planetm = 1;
|
||||
|
||||
if (random_terrain == g_BiomeTropic)
|
||||
planetm = 8;
|
||||
|
||||
log("Creating decoration...");
|
||||
var planetm = random_terrain == g_BiomeTropic ? 8 : 1;
|
||||
createDecoration
|
||||
(
|
||||
[[new SimpleObject(aRockMedium, 1,3, 0,1)],
|
||||
@ -319,10 +295,9 @@ createDecoration
|
||||
],
|
||||
[avoidClasses(clForest, 0, clPlayer, 0, clHill, 0), stayClasses(clLand, 5)]
|
||||
);
|
||||
|
||||
RMS.SetProgress(70);
|
||||
|
||||
// create animals
|
||||
log("Creating animals...");
|
||||
createFood
|
||||
(
|
||||
[
|
||||
@ -335,8 +310,9 @@ createFood
|
||||
],
|
||||
[avoidClasses(clForest, 0, clPlayer, 1, clHill, 1, clFood, 20), stayClasses(clLand, 3)]
|
||||
);
|
||||
RMS.SetProgress(75);
|
||||
|
||||
// create fruits
|
||||
log("Creating fruits...");
|
||||
createFood
|
||||
(
|
||||
[
|
||||
@ -347,8 +323,9 @@ createFood
|
||||
],
|
||||
[avoidClasses(clForest, 0, clPlayer, 1, clHill, 1, clFood, 10), stayClasses(clLand, 3)]
|
||||
);
|
||||
RMS.SetProgress(80);
|
||||
|
||||
// create fish
|
||||
log("Creating fish...");
|
||||
createFood
|
||||
(
|
||||
[
|
||||
@ -362,12 +339,10 @@ createFood
|
||||
|
||||
RMS.SetProgress(85);
|
||||
|
||||
// create straggler trees
|
||||
log("Creating straggler trees...");
|
||||
var types = [oTree1, oTree2, oTree4, oTree3]; // some variation
|
||||
createStragglerTrees(types, [avoidClasses(clForest, 7, clHill, 1, clPlayer, 3, clMetal, 1, clRock, 1), stayClasses(clLand, 7)]);
|
||||
setWaterWaviness(4.0);
|
||||
setWaterType("ocean");
|
||||
|
||||
// Export map data
|
||||
ExportMap();
|
||||
|
@ -47,15 +47,12 @@ const pForestD = [tGrassDForest + TERRAIN_SEPARATOR + oOak, tGrassDForest + TERR
|
||||
const pForestP = [tGrassPForest + TERRAIN_SEPARATOR + oPine, tGrassPForest + TERRAIN_SEPARATOR + oAleppoPine, tGrassPForest];
|
||||
|
||||
log("Initializing map...");
|
||||
|
||||
InitMap();
|
||||
|
||||
var numPlayers = getNumPlayers();
|
||||
var mapSize = getMapSize();
|
||||
var mapArea = mapSize*mapSize;
|
||||
|
||||
// create tile classes
|
||||
|
||||
var clPlayer = createTileClass();
|
||||
var clHill = createTileClass();
|
||||
var clForest = createTileClass();
|
||||
@ -70,13 +67,10 @@ var clSettlement = createTileClass();
|
||||
// randomize player order
|
||||
var playerIDs = [];
|
||||
for (var i = 0; i < numPlayers; i++)
|
||||
{
|
||||
playerIDs.push(i+1);
|
||||
}
|
||||
playerIDs = sortPlayers(playerIDs);
|
||||
|
||||
// place players
|
||||
|
||||
var playerX = new Array(numPlayers);
|
||||
var playerZ = new Array(numPlayers);
|
||||
var playerAngle = new Array(numPlayers);
|
||||
@ -158,9 +152,8 @@ for (var i = 0; i < numPlayers; i++)
|
||||
// create metal mine
|
||||
var mAngle = bbAngle;
|
||||
while(abs(mAngle - bbAngle) < PI/3)
|
||||
{
|
||||
mAngle = randFloat(0, TWO_PI);
|
||||
}
|
||||
|
||||
var mDist = 12;
|
||||
var mX = round(fx + mDist * cos(mAngle));
|
||||
var mZ = round(fz + mDist * sin(mAngle));
|
||||
@ -207,10 +200,8 @@ for (var i = 0; i < numPlayers; i++)
|
||||
createObjectGroup(group, 0);
|
||||
}
|
||||
}
|
||||
|
||||
RMS.SetProgress(10);
|
||||
|
||||
// create lakes
|
||||
log("Creating lakes...");
|
||||
var numLakes = round(scaleByMapSize(1,4) * numPlayers);
|
||||
placer = new ClumpPlacer(scaleByMapSize(100,250), 0.8, 0.1, 10);
|
||||
@ -225,10 +216,8 @@ var waterAreas = createAreas(
|
||||
avoidClasses(clPlayer, 2, clWater, 20),
|
||||
numLakes
|
||||
);
|
||||
|
||||
RMS.SetProgress(15);
|
||||
|
||||
// create reeds
|
||||
log("Creating reeds...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(aReeds, 5,10, 0,4), new SimpleObject(aLillies, 0,1, 0,4)], true
|
||||
@ -238,10 +227,8 @@ createObjectGroupsByAreas(group, 0,
|
||||
numLakes, 100,
|
||||
waterAreas
|
||||
);
|
||||
|
||||
RMS.SetProgress(20);
|
||||
|
||||
// create fish
|
||||
log("Creating fish...");
|
||||
createObjectGroupsByAreas(
|
||||
new SimpleGroup(
|
||||
@ -256,27 +243,20 @@ createObjectGroupsByAreas(
|
||||
);
|
||||
RMS.SetProgress(25);
|
||||
|
||||
// create bumps
|
||||
createBumps(avoidClasses(clWater, 2, clPlayer, 0));
|
||||
|
||||
RMS.SetProgress(30);
|
||||
|
||||
// create hills
|
||||
log("Creating hills...");
|
||||
createHills([tCliff, tCliff, tHill], avoidClasses(clPlayer, 2, clWater, 5, clHill, 15), clHill, scaleByMapSize(1, 4) * numPlayers);
|
||||
|
||||
RMS.SetProgress(35);
|
||||
|
||||
// create forests
|
||||
createForests(
|
||||
[tGrass, tGrassDForest, tGrassPForest, pForestP, pForestD],
|
||||
avoidClasses(clPlayer, 1, clWater, 3, clForest, 17, clHill, 1),
|
||||
clForest
|
||||
);
|
||||
|
||||
RMS.SetProgress(40);
|
||||
|
||||
// create dirt patches
|
||||
log("Creating dirt patches...");
|
||||
createLayeredPatches(
|
||||
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
|
||||
@ -284,10 +264,8 @@ createLayeredPatches(
|
||||
[1,1],
|
||||
avoidClasses(clWater, 1, clForest, 0, clHill, 0, clDirt, 5, clPlayer, 0)
|
||||
);
|
||||
|
||||
RMS.SetProgress(45);
|
||||
|
||||
// create grass patches
|
||||
log("Creating grass patches...");
|
||||
createLayeredPatches(
|
||||
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
|
||||
@ -295,11 +273,9 @@ createLayeredPatches(
|
||||
[1],
|
||||
avoidClasses(clWater, 1, clForest, 0, clHill, 0, clDirt, 5, clPlayer, 0)
|
||||
);
|
||||
|
||||
RMS.SetProgress(50);
|
||||
|
||||
log("Creating stone mines...");
|
||||
// create stone quarries
|
||||
createMines(
|
||||
[
|
||||
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
|
||||
@ -307,9 +283,9 @@ createMines(
|
||||
],
|
||||
avoidClasses(clWater, 0, clForest, 1, clPlayer, 5, clRock, 10, clHill, 1)
|
||||
);
|
||||
RMS.SetProgress(55);
|
||||
|
||||
log("Creating metal mines...");
|
||||
// create large metal quarries
|
||||
createMines(
|
||||
[
|
||||
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
|
||||
@ -317,10 +293,8 @@ createMines(
|
||||
avoidClasses(clWater, 0, clForest, 1, clPlayer, 5, clMetal, 10, clRock, 5, clHill, 1),
|
||||
clMetal
|
||||
);
|
||||
|
||||
RMS.SetProgress(60);
|
||||
|
||||
//create decoration
|
||||
createDecoration
|
||||
(
|
||||
[[new SimpleObject(aRockMedium, 1,3, 0,1)],
|
||||
@ -338,10 +312,8 @@ createDecoration
|
||||
],
|
||||
avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0)
|
||||
);
|
||||
|
||||
RMS.SetProgress(70);
|
||||
|
||||
// create animals
|
||||
createFood
|
||||
(
|
||||
[
|
||||
@ -354,8 +326,8 @@ createFood
|
||||
],
|
||||
avoidClasses(clWater, 0, clForest, 0, clPlayer, 1, clHill, 1, clFood, 20)
|
||||
);
|
||||
RMS.SetProgress(80);
|
||||
|
||||
// create fruits
|
||||
createFood
|
||||
(
|
||||
[
|
||||
@ -366,14 +338,13 @@ createFood
|
||||
],
|
||||
avoidClasses(clWater, 3, clForest, 0, clPlayer, 20, clHill, 1, clFood, 10)
|
||||
);
|
||||
RMS.SetProgress(85);
|
||||
|
||||
RMS.SetProgress(90);
|
||||
|
||||
// create straggler trees
|
||||
log("Creating metal mines...");
|
||||
var types = [oOak, oOakLarge, oPine, oApple]; // some variation
|
||||
createStragglerTrees(types, avoidClasses(clWater, 1, clForest, 1, clHill, 1, clPlayer, 1, clMetal, 1, clRock, 1));
|
||||
RMS.SetProgress(90);
|
||||
|
||||
// Set environment
|
||||
setSkySet("cirrus");
|
||||
setWaterColor(0.447, 0.412, 0.322); // muddy brown
|
||||
setWaterTint(0.447, 0.412, 0.322); // muddy brown
|
||||
@ -389,5 +360,4 @@ setPPSaturation(0.62);
|
||||
setPPContrast(0.62);
|
||||
setPPBloom(0.3);
|
||||
|
||||
// Export map data
|
||||
ExportMap();
|
||||
|
@ -9,12 +9,10 @@ const tBeachWet = "medit_sand_wet";
|
||||
const tBeachDry = "medit_sand";
|
||||
const tBeachGrass = "medit_rocks_grass";
|
||||
const tBeach = ["medit_rocks_grass","medit_sand", "medit_rocks_grass_shrubs"];
|
||||
//const tBeachBlend = ["medit_rocks_grass","medit_grass_field_dry", "medit_grass_field_brown","medit_rocks_shrubs", "medit_rocks_grass_shrubs"];
|
||||
const tBeachBlend = ["medit_rocks_grass", "medit_rocks_grass_shrubs"];
|
||||
const tBeachCliff = "medit_dirt";
|
||||
const tCity = "medit_city_tile";
|
||||
const tGrassDry = ["medit_grass_field_dry", "medit_grass_field_b"];
|
||||
//const tGrass = ["medit_grass_field_dry", "medit_grass_field_brown", "medit_grass_field_b"];
|
||||
const tGrass = ["medit_rocks_grass", "medit_rocks_grass","medit_dirt","medit_rocks_grass_shrubs"];
|
||||
const tGrassLush = ["grass_temperate_dry_tufts", "medit_grass_flowers"];
|
||||
const tGrassShrubs = "medit_shrubs";
|
||||
@ -70,14 +68,11 @@ const pPoplarForest = [tForestFloor+TERRAIN_SEPARATOR+oLombardyPoplar, tGrass];
|
||||
const pMainForest = [tForestFloor+TERRAIN_SEPARATOR+oCarob, tForestFloor+TERRAIN_SEPARATOR+oBeech, tGrass, tGrass];
|
||||
|
||||
log("Initializing map...");
|
||||
|
||||
InitMap();
|
||||
|
||||
const numPlayers = getNumPlayers();
|
||||
const mapSize = getMapSize();
|
||||
|
||||
// create tile classes
|
||||
|
||||
var clCoral = createTileClass();
|
||||
var clPlayer = createTileClass();
|
||||
var clIsland = createTileClass();
|
||||
@ -94,23 +89,13 @@ var clBaseResource = createTileClass();
|
||||
// randomize player order
|
||||
var playerIDs = [];
|
||||
for (var i = 0; i < numPlayers; i++)
|
||||
{
|
||||
playerIDs.push(i+1);
|
||||
}
|
||||
playerIDs = sortPlayers(playerIDs);
|
||||
|
||||
//array holding starting islands based on number of players
|
||||
var startingPlaces=[[0],[0,3],[0,2,4],[0,1,3,4],[0,1,2,3,4],[0,1,2,3,4,5]];
|
||||
|
||||
//figure out how many spoke islands
|
||||
var numIslands =6;
|
||||
if(numPlayers<6){
|
||||
numIslands=6;
|
||||
}else{
|
||||
numIslands=numPlayers;
|
||||
}
|
||||
|
||||
//figure out coordinates of spoke islands
|
||||
var numIslands = Math.min(6, numPlayers);
|
||||
var islandX = new Array(numIslands);
|
||||
var islandZ = new Array(numIslands);
|
||||
var islandAngle = new Array(numIslands);
|
||||
@ -125,8 +110,8 @@ for (var i=0; i < numIslands; i++)
|
||||
islandZ[i] = 0.5 + 0.39*sin(islandAngle[i]);
|
||||
}
|
||||
|
||||
|
||||
for(var i=0;i<numIslands;i++){
|
||||
for (var i = 0; i < numIslands; ++i)
|
||||
{
|
||||
var radius = scaleByMapSize(15,40);
|
||||
var coral=scaleByMapSize(1,5);
|
||||
var wet = 3;
|
||||
@ -206,9 +191,8 @@ for (var i=0; i < numIslands; i++)
|
||||
// create metal mine
|
||||
var mAngle = bbAngle;
|
||||
while(abs(mAngle - bbAngle) < PI/3)
|
||||
{
|
||||
mAngle = randFloat(0, TWO_PI);
|
||||
}
|
||||
|
||||
var mDist = 12;
|
||||
var mX = round(fx + mDist * cos(mAngle));
|
||||
var mZ = round(fz + mDist * sin(mAngle));
|
||||
@ -240,11 +224,9 @@ for (var i=0; i < numIslands; i++)
|
||||
);
|
||||
createObjectGroup(group, 0, avoidClasses(clBaseResource,2));
|
||||
}
|
||||
RMS.SetProgress(15);
|
||||
|
||||
|
||||
//Populate the islands with the players
|
||||
log("Populating islands ...");
|
||||
|
||||
//nPlayer is the player we are on i is the island we are on
|
||||
var nPlayer=0;
|
||||
for(var i=0;i<numIslands;i++)
|
||||
@ -277,10 +259,9 @@ RMS.SetProgress(15);
|
||||
|
||||
|
||||
// get the x and z in tiles
|
||||
|
||||
var nCenter = floor(scaleByMapSize(1,4));
|
||||
var startAngle = randFloat() * 2 * PI;
|
||||
for (var i=0; i < nCenter; i++)
|
||||
for (var i = 0; i < nCenter; ++i)
|
||||
{
|
||||
var fx=.5;
|
||||
var fz=.5;
|
||||
@ -331,7 +312,6 @@ for (var i=0; i < nCenter; i++)
|
||||
}
|
||||
RMS.SetProgress(30);
|
||||
|
||||
// create bumps
|
||||
log("Creating bumps...");
|
||||
placer = new ClumpPlacer(scaleByMapSize(20, 60), 0.3, 0.06, 1);
|
||||
painter = new SmoothElevationPainter(ELEVATION_MODIFY, 2, 3);
|
||||
@ -342,8 +322,8 @@ createAreasInAreas(
|
||||
scaleByMapSize(25, 75),15,
|
||||
areas
|
||||
);
|
||||
RMS.SetProgress(34);
|
||||
|
||||
// create hills
|
||||
log("Creating hills...");
|
||||
placer = new ClumpPlacer(scaleByMapSize(20, 150), 0.2, 0.1, 1);
|
||||
terrainPainter = new LayeredPainter(
|
||||
@ -358,20 +338,14 @@ createAreasInAreas(
|
||||
scaleByMapSize(5, 30), 15,
|
||||
areas
|
||||
);
|
||||
RMS.SetProgress(38);
|
||||
|
||||
RMS.SetProgress(40);
|
||||
//find all water
|
||||
// Find all water
|
||||
for (var ix = 0; ix < mapSize; ix++)
|
||||
{
|
||||
for (var iz = 0; iz < mapSize; iz++)
|
||||
{
|
||||
if(getHeight(ix,iz)<0){
|
||||
addToClass(ix,iz,clWater);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (getHeight(ix,iz) < 0)
|
||||
addToClass(ix,iz,clWater);
|
||||
|
||||
// create forests
|
||||
log("Creating forests...");
|
||||
var types = [
|
||||
[[tForestFloor, tGrass, pPalmForest], [tForestFloor, pPalmForest]],
|
||||
@ -395,38 +369,32 @@ for (var i = 0; i < types.length; ++i)
|
||||
num, 20, areas
|
||||
);
|
||||
}
|
||||
|
||||
RMS.SetProgress(60);
|
||||
RMS.SetProgress(42);
|
||||
|
||||
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, 1, clForest, 1, clHill, 1, clPlayer, 5, clRock, 1)],
|
||||
scaleByMapSize(4,16), 200, areas
|
||||
);
|
||||
RMS.SetProgress(46);
|
||||
|
||||
// create small stone quarries
|
||||
log("Creating small stone mines...");
|
||||
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
|
||||
createObjectGroupsByAreas(group, 0,
|
||||
[avoidClasses(clWater, 1, clForest, 1, clHill, 1, clPlayer, 5, clRock, 2)],
|
||||
scaleByMapSize(4,16), 200, areas
|
||||
);
|
||||
RMS.SetProgress(70);
|
||||
RMS.SetProgress(50);
|
||||
|
||||
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, 1, clForest, 1, clHill, 1, clPlayer, 5, clMetal, 2, clRock, 1)],
|
||||
scaleByMapSize(4,16), 200, areas
|
||||
);
|
||||
RMS.SetProgress(54);
|
||||
|
||||
RMS.SetProgress(80);
|
||||
|
||||
|
||||
|
||||
//create shrub patches
|
||||
log("Creating shrub patches...");
|
||||
var sizes = [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5, 80)];
|
||||
for (var i = 0; i < sizes.length; i++)
|
||||
@ -440,8 +408,8 @@ for (var i = 0; i < sizes.length; i++)
|
||||
scaleByMapSize(4, 16), 20, areas
|
||||
);
|
||||
}
|
||||
RMS.SetProgress(58);
|
||||
|
||||
//create grass patches
|
||||
log("Creating grass patches...");
|
||||
var sizes = [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5, 80)];
|
||||
for (var i = 0; i < sizes.length; i++)
|
||||
@ -455,8 +423,7 @@ for (var i = 0; i < sizes.length; i++)
|
||||
scaleByMapSize(4, 16), 20, areas
|
||||
);
|
||||
}
|
||||
|
||||
RMS.SetProgress(90);
|
||||
RMS.SetProgress(62);
|
||||
|
||||
log("Creating straggler trees...");
|
||||
// create straggler trees
|
||||
@ -469,9 +436,9 @@ for (var t in trees)
|
||||
scaleByMapSize(2, 38), 50, areas
|
||||
);
|
||||
}
|
||||
RMS.SetProgress(66);
|
||||
|
||||
|
||||
// create straggler cypresses
|
||||
log("Create straggler cypresses...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(oCypress2, 1,3, 0,3), new SimpleObject(oCypress1, 0,2, 0,2)],
|
||||
true
|
||||
@ -480,9 +447,9 @@ createObjectGroupsByAreas(group, 0,
|
||||
avoidClasses(clWater, 2, clForest, 2, clCity, 3, clBaseResource, 1, clRock, 1, clMetal, 1, clPlayer, 1, clHill, 1),
|
||||
scaleByMapSize(5, 75), 50, areas
|
||||
);
|
||||
RMS.SetProgress(70);
|
||||
|
||||
|
||||
// create straggler date palms
|
||||
log("Create straggler date palms...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(oDateS, 1,3, 0,3), new SimpleObject(oDateT, 0,2, 0,2)],
|
||||
true
|
||||
@ -491,9 +458,9 @@ createObjectGroupsByAreas(group, 0,
|
||||
avoidClasses(clWater, 2, clForest, 1, clCity, 0, clBaseResource, 1, clRock, 1, clMetal, 1, clPlayer, 1, clHill, 1),
|
||||
scaleByMapSize(5, 75), 50, areas
|
||||
);
|
||||
RMS.SetProgress(74);
|
||||
|
||||
log("Creating rocks...");
|
||||
// create rocks
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(aRockSmall, 0,3, 0,2), new SimpleObject(aRockMed, 0,2, 0,2),
|
||||
new SimpleObject(aRockLarge, 0,1, 0,2)]
|
||||
@ -502,8 +469,8 @@ createObjectGroups(group, 0,
|
||||
avoidClasses(clWater, 0, clCity, 0),
|
||||
scaleByMapSize(30, 180), 50
|
||||
);
|
||||
RMS.SetProgress(78);
|
||||
|
||||
// create deer
|
||||
log("Creating deer...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(oDeer, 5,7, 0,4)],
|
||||
@ -513,50 +480,48 @@ createObjectGroups(group, 0,
|
||||
avoidClasses(clWater, 5, clForest, 1, clHill, 1, clCity, 10, clMetal, 2, clRock, 2, clFood, 8),
|
||||
3 * numPlayers, 50
|
||||
);
|
||||
|
||||
RMS.SetProgress(95);
|
||||
RMS.SetProgress(82);
|
||||
|
||||
log("Creating berry bushes...");
|
||||
// create berry bushes
|
||||
group = new SimpleGroup([new SimpleObject(oBerryBush, 5,7, 0,3)], true, clFood);
|
||||
createObjectGroups(group, 0,
|
||||
avoidClasses(clWater, 2, clForest, 1, clHill, 1, clCity, 10, clMetal, 2, clRock, 2, clFood, 8),
|
||||
1.5 * numPlayers, 100
|
||||
);
|
||||
RMS.SetProgress(86);
|
||||
|
||||
log("Creating Fish...");
|
||||
// create Fish
|
||||
group = new SimpleGroup([new SimpleObject(oFish, 1,1, 0,3)], true, clFood);
|
||||
createObjectGroups(group, 0,
|
||||
[stayClasses(clWater,1),avoidClasses(clFood, 8)],
|
||||
scaleByMapSize(40,200), 100
|
||||
);
|
||||
RMS.SetProgress(90);
|
||||
|
||||
log("Creating Whales...");
|
||||
// create Whales
|
||||
group = new SimpleGroup([new SimpleObject(oWhale, 1,1, 0,3)], true, clFood);
|
||||
createObjectGroups(group, 0,
|
||||
[stayClasses(clWater,1),avoidClasses(clFood, 8, clPlayer,4,clIsland,4)],
|
||||
scaleByMapSize(10,40), 100
|
||||
);
|
||||
RMS.SetProgress(94);
|
||||
|
||||
log("Creating shipwrecks...");
|
||||
// create shipwreck
|
||||
group = new SimpleGroup([new SimpleObject(oShipwreck, 1,1, 0,3)], true, clFood);
|
||||
createObjectGroups(group, 0,
|
||||
[stayClasses(clWater,1),avoidClasses(clFood, 8)],
|
||||
scaleByMapSize(6,16), 100
|
||||
);
|
||||
RMS.SetProgress(98);
|
||||
|
||||
log("Creating shipwreck debris...");
|
||||
// create shipwreck debris
|
||||
group = new SimpleGroup([new SimpleObject(oShipDebris, 1,2, 0,4)], true, clFood);
|
||||
createObjectGroups(group, 0,
|
||||
[stayClasses(clWater,1),avoidClasses(clFood, 8)],
|
||||
scaleByMapSize(10,20), 100
|
||||
);
|
||||
RMS.SetProgress(99);
|
||||
|
||||
// Adjust environment
|
||||
setSkySet("sunny");
|
||||
setWaterColor(0.2,0.294,0.49);
|
||||
setWaterTint(0.208, 0.659, 0.925);
|
||||
@ -564,5 +529,4 @@ setWaterMurkiness(0.72);
|
||||
setWaterWaviness(3.0);
|
||||
setWaterType("ocean");
|
||||
|
||||
// Export map data
|
||||
ExportMap();
|
||||
|
@ -49,7 +49,6 @@ const pForestP = [tGrassPForest + TERRAIN_SEPARATOR + oOak, tGrassPForest];
|
||||
const WATER_WIDTH = 0.25;
|
||||
|
||||
log("Initializing map...");
|
||||
|
||||
InitMap();
|
||||
|
||||
const numPlayers = getNumPlayers();
|
||||
@ -57,7 +56,6 @@ const mapSize = getMapSize();
|
||||
const mapArea = mapSize*mapSize;
|
||||
|
||||
// create tile classes
|
||||
|
||||
var clPlayer = createTileClass();
|
||||
var clHill = createTileClass();
|
||||
var clForest = createTileClass();
|
||||
@ -73,9 +71,7 @@ var clShallow = createTileClass();
|
||||
// randomize player order
|
||||
var playerIDs = [];
|
||||
for (var i = 0; i < numPlayers; i++)
|
||||
{
|
||||
playerIDs.push(i+1);
|
||||
}
|
||||
playerIDs = primeSortPlayers(sortPlayers(playerIDs));
|
||||
|
||||
// place players
|
||||
@ -206,7 +202,6 @@ for (var i = 0; i < numPlayers; i++)
|
||||
createObjectGroup(group, 0);
|
||||
}
|
||||
}
|
||||
|
||||
RMS.SetProgress(10);
|
||||
|
||||
log("Creating sea");
|
||||
@ -215,7 +210,6 @@ var theta2 = randFloat(0, 1);
|
||||
var seed = randFloat(2,3);
|
||||
var seed2 = randFloat(2,3);
|
||||
for (var ix = 0; ix < mapSize; ix++)
|
||||
{
|
||||
for (var iz = 0; iz < mapSize; iz++)
|
||||
{
|
||||
var x = ix / (mapSize + 1.0);
|
||||
@ -229,45 +223,30 @@ for (var ix = 0; ix < mapSize; ix++)
|
||||
var cu = km*rndRiver(theta+x*0.5*(mapSize/64),seed);
|
||||
var cu2 = km*rndRiver(theta2+x*0.5*(mapSize/64),seed2);
|
||||
|
||||
if ((z > cu + 0.5 - WATER_WIDTH/2) && (z < cu2 + 0.5 + WATER_WIDTH/2))
|
||||
if (z > cu + 0.5 - WATER_WIDTH/2 &&
|
||||
z < cu2 + 0.5 + WATER_WIDTH/2)
|
||||
{
|
||||
var h;
|
||||
if (z < (cu + 0.5 + fadeDist - WATER_WIDTH/2))
|
||||
{
|
||||
h = 3 - 7 * (1 - ((cu + 0.5 + fadeDist - WATER_WIDTH/2) - z)/fadeDist);
|
||||
}
|
||||
else if (z > (cu2 + 0.5 - fadeDist + WATER_WIDTH/2))
|
||||
{
|
||||
h = 3 - 7 * (1 - (z - (cu2 + 0.5 - fadeDist + WATER_WIDTH/2))/fadeDist);
|
||||
}
|
||||
else
|
||||
{
|
||||
h = -4.0;
|
||||
}
|
||||
|
||||
if (h < -1.5)
|
||||
{
|
||||
placeTerrain(ix, iz, tWater);
|
||||
}
|
||||
else
|
||||
{
|
||||
placeTerrain(ix, iz, tShore);
|
||||
}
|
||||
|
||||
setHeight(ix, iz, h);
|
||||
}
|
||||
else
|
||||
{
|
||||
setHeight(ix, iz, 3.1);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
RMS.SetProgress(20);
|
||||
|
||||
log("Creating rivers");
|
||||
|
||||
for (var i = 0; i <= randInt(8, (scaleByMapSize(12,20))); i++)
|
||||
{
|
||||
var cLocation = randFloat(0.05,0.95);
|
||||
@ -313,21 +292,14 @@ passageMaker(round(fractionToTiles(0.2)), round(fractionToTiles(0.75)), round(fr
|
||||
paintTerrainBasedOnHeight(-5, 1, 1, tWater);
|
||||
paintTerrainBasedOnHeight(1, 3, 1, tShore);
|
||||
paintTileClassBasedOnHeight(-6, 0.5, 1, clWater);
|
||||
|
||||
|
||||
RMS.SetProgress(25);
|
||||
|
||||
// create bumps
|
||||
createBumps(avoidClasses(clWater, 5, clPlayer, 20));
|
||||
|
||||
RMS.SetProgress(30);
|
||||
|
||||
// create hills
|
||||
createHills([tCliff, tCliff, tHill], avoidClasses(clPlayer, 20, clHill, 15, clWater, 5), clHill, scaleByMapSize(1, 4) * numPlayers);
|
||||
|
||||
RMS.SetProgress(50);
|
||||
|
||||
// create forests
|
||||
createForests(
|
||||
[tGrass, tGrassDForest, tGrassDForest, pForestD, pForestD],
|
||||
avoidClasses(clPlayer, 20, clForest, 17, clHill, 0, clWater, 6),
|
||||
@ -335,10 +307,8 @@ createForests(
|
||||
1.0,
|
||||
0
|
||||
);
|
||||
|
||||
RMS.SetProgress(70);
|
||||
|
||||
// create dirt patches
|
||||
log("Creating dirt patches...");
|
||||
createLayeredPatches(
|
||||
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
|
||||
@ -347,7 +317,6 @@ createLayeredPatches(
|
||||
avoidClasses(clWater, 1, clForest, 0, clHill, 0, clDirt, 5, clPlayer, 6)
|
||||
);
|
||||
|
||||
// create grass patches
|
||||
log("Creating grass patches...");
|
||||
createPatches(
|
||||
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
|
||||
@ -355,11 +324,9 @@ createPatches(
|
||||
[1],
|
||||
avoidClasses(clWater, 1, clForest, 0, clHill, 0, clDirt, 5, clPlayer, 6)
|
||||
);
|
||||
|
||||
RMS.SetProgress(80);
|
||||
|
||||
log("Creating stone mines...");
|
||||
// create stone quarries
|
||||
createMines(
|
||||
[
|
||||
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
|
||||
@ -369,7 +336,6 @@ createMines(
|
||||
);
|
||||
|
||||
log("Creating metal mines...");
|
||||
// create large metal quarries
|
||||
createMines(
|
||||
[
|
||||
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
|
||||
@ -377,10 +343,8 @@ createMines(
|
||||
avoidClasses(clWater, 2, clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clHill, 2),
|
||||
clMetal
|
||||
);
|
||||
|
||||
RMS.SetProgress(85);
|
||||
|
||||
// create decoration
|
||||
createDecoration
|
||||
(
|
||||
[[new SimpleObject(aRockMedium, 1,3, 0,1)],
|
||||
@ -450,13 +414,10 @@ createFood
|
||||
[avoidClasses(clFood, 6), stayClasses(clWater, 4)]
|
||||
);
|
||||
|
||||
// create straggler trees
|
||||
log("Creating straggler trees...");
|
||||
var types = [oBeech, oPoplar, oApple]; // some variation
|
||||
createStragglerTrees(types, avoidClasses(clWater, 1, clForest, 1, clHill, 1, clPlayer, 8, clMetal, 1, clRock, 1));
|
||||
|
||||
|
||||
|
||||
// Set environment
|
||||
setSkySet("cirrus");
|
||||
setWaterColor(0.114, 0.192, 0.463);
|
||||
@ -473,6 +434,4 @@ setPPSaturation(0.62);
|
||||
setPPContrast(0.62);
|
||||
setPPBloom(0.37);
|
||||
|
||||
|
||||
// Export map data
|
||||
ExportMap();
|
||||
|
@ -47,15 +47,12 @@ const pForestO = [tForestFloor + TERRAIN_SEPARATOR + oOak, tForestFloor];
|
||||
const pForestP = [tForestFloor + TERRAIN_SEPARATOR + oPine, tForestFloor];
|
||||
|
||||
log("Initializing map...");
|
||||
|
||||
InitMap();
|
||||
|
||||
const numPlayers = getNumPlayers();
|
||||
const mapSize = getMapSize();
|
||||
const mapArea = mapSize*mapSize;
|
||||
|
||||
// create tile classes
|
||||
|
||||
var clPlayer = createTileClass();
|
||||
var clHill = createTileClass();
|
||||
var clForest = createTileClass();
|
||||
@ -67,17 +64,14 @@ var clFood = createTileClass();
|
||||
var clBaseResource = createTileClass();
|
||||
var clSettlement = createTileClass();
|
||||
|
||||
|
||||
// randomize player order
|
||||
var playerIDs = [];
|
||||
for (var i = 0; i < numPlayers; i++)
|
||||
{
|
||||
playerIDs.push(i+1);
|
||||
}
|
||||
|
||||
playerIDs = sortPlayers(playerIDs);
|
||||
|
||||
// place players
|
||||
|
||||
var playerX = new Array(numPlayers);
|
||||
var playerZ = new Array(numPlayers);
|
||||
var playerAngle = new Array(numPlayers);
|
||||
@ -189,7 +183,6 @@ for (var i=0; i < numPlayers; i++)
|
||||
placeCustomFortress(playerX[i], playerZ[i], new Fortress("Spahbod", wall), civ, i+1);
|
||||
}
|
||||
|
||||
// create lakes
|
||||
log("Creating lakes...");
|
||||
var numLakes = round(scaleByMapSize(1,4) * numPlayers);
|
||||
var placer = new ClumpPlacer(scaleByMapSize(100,250), 0.8, 0.1, 10);
|
||||
@ -204,10 +197,8 @@ var waterAreas = createAreas(
|
||||
avoidClasses(clPlayer, 7, clWater, 20),
|
||||
numLakes
|
||||
);
|
||||
|
||||
RMS.SetProgress(15);
|
||||
|
||||
// create reeds
|
||||
log("Creating reeds...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(aReeds, 5,10, 0,4), new SimpleObject(aLillies, 0,1, 0,4)], true
|
||||
@ -217,10 +208,8 @@ createObjectGroupsByAreas(group, 0,
|
||||
numLakes, 100,
|
||||
waterAreas
|
||||
);
|
||||
RMS.SetProgress(25);
|
||||
|
||||
RMS.SetProgress(20);
|
||||
|
||||
// create fish
|
||||
log("Creating fish...");
|
||||
createObjectGroupsByAreas(
|
||||
new SimpleGroup(
|
||||
@ -233,19 +222,14 @@ createObjectGroupsByAreas(
|
||||
50,
|
||||
waterAreas
|
||||
);
|
||||
|
||||
RMS.SetProgress(25);
|
||||
|
||||
// create bumps
|
||||
createBumps(avoidClasses(clWater, 2, clPlayer, 5));
|
||||
|
||||
RMS.SetProgress(30);
|
||||
|
||||
// create hills
|
||||
createBumps(avoidClasses(clWater, 2, clPlayer, 5));
|
||||
RMS.SetProgress(35);
|
||||
|
||||
log("Creating hills...");
|
||||
createHills([tCliff, tCliff, tHill], avoidClasses(clPlayer, 5, clWater, 5, clHill, 15), clHill, scaleByMapSize(1, 4) * numPlayers);
|
||||
|
||||
RMS.SetProgress(35);
|
||||
RMS.SetProgress(40);
|
||||
|
||||
// calculate desired number of trees for map (based on size)
|
||||
const MIN_TREES = 500;
|
||||
@ -256,7 +240,6 @@ 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 = [
|
||||
[[tForestFloor, tGrass, pForestD], [tForestFloor, pForestD]],
|
||||
@ -279,10 +262,8 @@ for (var i = 0; i < types.length; ++i)
|
||||
num
|
||||
);
|
||||
}
|
||||
|
||||
RMS.SetProgress(50);
|
||||
|
||||
// create dirt patches
|
||||
log("Creating dirt patches...");
|
||||
createLayeredPatches(
|
||||
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
|
||||
@ -290,21 +271,17 @@ createLayeredPatches(
|
||||
[1,1],
|
||||
avoidClasses(clWater, 1, clForest, 0, clHill, 0, clDirt, 5, clPlayer, 1)
|
||||
);
|
||||
|
||||
RMS.SetProgress(55);
|
||||
|
||||
// create grass patches
|
||||
log("Creating grass patches...");
|
||||
createPatches(
|
||||
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
|
||||
tGrassPatch,
|
||||
avoidClasses(clWater, 1, clForest, 0, clHill, 0, clDirt, 5, clPlayer, 1)
|
||||
);
|
||||
|
||||
RMS.SetProgress(60);
|
||||
|
||||
log("Creating stone mines...");
|
||||
// create stone quarries
|
||||
createMines(
|
||||
[
|
||||
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
|
||||
@ -312,9 +289,9 @@ createMines(
|
||||
],
|
||||
avoidClasses(clWater, 0, clForest, 1, clPlayer, 5, clRock, 10, clHill, 1)
|
||||
);
|
||||
RMS.SetProgress(65);
|
||||
|
||||
log("Creating metal mines...");
|
||||
// create large metal quarries
|
||||
createMines(
|
||||
[
|
||||
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
|
||||
@ -322,10 +299,8 @@ createMines(
|
||||
avoidClasses(clWater, 0, clForest, 1, clPlayer, 5, clMetal, 10, clRock, 5, clHill, 1),
|
||||
clMetal
|
||||
);
|
||||
|
||||
RMS.SetProgress(70);
|
||||
|
||||
//create decoration
|
||||
createDecoration
|
||||
(
|
||||
[[new SimpleObject(aRockMedium, 1,3, 0,1)],
|
||||
@ -343,7 +318,6 @@ createDecoration
|
||||
],
|
||||
avoidClasses(clWater, 0, clForest, 0, clPlayer, 1, clHill, 0)
|
||||
);
|
||||
|
||||
RMS.SetProgress(80);
|
||||
|
||||
// create animals
|
||||
@ -359,6 +333,7 @@ createFood
|
||||
],
|
||||
avoidClasses(clWater, 0, clForest, 0, clPlayer, 6, clHill, 1, clFood, 20)
|
||||
);
|
||||
RMS.SetProgress(85);
|
||||
|
||||
// create fruits
|
||||
createFood
|
||||
@ -374,10 +349,10 @@ createFood
|
||||
|
||||
RMS.SetProgress(90);
|
||||
|
||||
// create straggler trees
|
||||
log("Creating straggler trees...");
|
||||
var types = [oOak, oBeech, oPine]; // some variation
|
||||
createStragglerTrees(types, avoidClasses(clWater, 1, clForest, 1, clHill, 1, clPlayer, 1, clMetal, 1, clRock, 1));
|
||||
RMS.SetProgress(95);
|
||||
|
||||
setSkySet("sunny");
|
||||
setWaterColor(0.157, 0.149, 0.443);
|
||||
@ -394,5 +369,4 @@ setPPContrast(0.56);
|
||||
setPPBloom(0.38);
|
||||
setPPEffect("hdr");
|
||||
|
||||
// Export map data
|
||||
ExportMap();
|
||||
|
@ -73,12 +73,8 @@ var clSettlement = createTileClass();
|
||||
var clLand = createTileClass();
|
||||
|
||||
for (var ix = 0; ix < mapSize; ix++)
|
||||
{
|
||||
for (var iz = 0; iz < mapSize; iz++)
|
||||
{
|
||||
placeTerrain(ix, iz, tMainTerrain);
|
||||
}
|
||||
}
|
||||
|
||||
var fx = fractionToTiles(0.5);
|
||||
var fz = fractionToTiles(0.5);
|
||||
@ -99,18 +95,14 @@ var elevationPainter = new SmoothElevationPainter(
|
||||
);
|
||||
createArea(placer, [terrainPainter, elevationPainter, paintClass(clWater)], null);
|
||||
|
||||
|
||||
|
||||
// randomize player order
|
||||
var playerIDs = [];
|
||||
for (var i = 0; i < numPlayers; i++)
|
||||
{
|
||||
playerIDs.push(i+1);
|
||||
}
|
||||
|
||||
playerIDs = sortPlayers(playerIDs);
|
||||
|
||||
// place players
|
||||
|
||||
var playerX = new Array(numPlayers);
|
||||
var playerZ = new Array(numPlayers);
|
||||
var playerAngle = new Array(numPlayers);
|
||||
@ -150,7 +142,6 @@ for (var i = 0; i < numPlayers; i++)
|
||||
var painter = new LayeredPainter([tRoadWild, tRoad], [1]);
|
||||
createArea(placer, painter, null);
|
||||
|
||||
// create starting units
|
||||
placeCivDefaultEntities(fx, fz, id, { 'iberWall': 'towers' });
|
||||
|
||||
placeDefaultChicken(fx, fz, clBaseResource);
|
||||
@ -169,9 +160,8 @@ for (var i = 0; i < numPlayers; i++)
|
||||
// create metal mine
|
||||
var mAngle = bbAngle;
|
||||
while(abs(mAngle - bbAngle) < PI/3)
|
||||
{
|
||||
mAngle = randFloat(0, TWO_PI);
|
||||
}
|
||||
|
||||
var mDist = 12;
|
||||
var mX = round(fx + mDist * cos(mAngle));
|
||||
var mZ = round(fz + mDist * sin(mAngle));
|
||||
@ -279,7 +269,6 @@ else if ((mapSize == 448)&&(numPlayers <= 6))
|
||||
split = 2;
|
||||
}
|
||||
|
||||
//create rivers
|
||||
log ("Creating rivers...");
|
||||
for (var m = 0; m < numPlayers*split; m++)
|
||||
{
|
||||
@ -396,13 +385,11 @@ for (var i = 0; i < numPlayers; i++)
|
||||
createArea(placer, painter, null);
|
||||
}
|
||||
|
||||
// create hills
|
||||
if (randInt(1,2) == 1)
|
||||
createHills([tMainTerrain, tCliff, tHill], avoidClasses(clPlayer, 20, clHill, 15, clWater, 2), clHill, scaleByMapSize(1, 4) * numPlayers);
|
||||
else
|
||||
createMountains(tCliff, avoidClasses(clPlayer, 20, clHill, 15, clWater, 2), clHill, scaleByMapSize(1, 4) * numPlayers);
|
||||
|
||||
// create forests
|
||||
createForests(
|
||||
[tMainTerrain, tForestFloor1, tForestFloor2, pForest1, pForest2],
|
||||
avoidClasses(clPlayer, 20, clForest, 17, clHill, 0, clWater, 2),
|
||||
@ -413,7 +400,6 @@ createForests(
|
||||
|
||||
RMS.SetProgress(50);
|
||||
|
||||
// create dirt patches
|
||||
log("Creating dirt patches...");
|
||||
createLayeredPatches(
|
||||
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
|
||||
@ -422,7 +408,6 @@ createLayeredPatches(
|
||||
avoidClasses(clWater, 3, clForest, 0, clHill, 0, clDirt, 5, clPlayer, 12)
|
||||
);
|
||||
|
||||
// create grass patches
|
||||
log("Creating grass patches...");
|
||||
createPatches(
|
||||
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
|
||||
@ -433,7 +418,6 @@ createPatches(
|
||||
RMS.SetProgress(55);
|
||||
|
||||
log("Creating stone mines...");
|
||||
// create stone quarries
|
||||
createMines(
|
||||
[
|
||||
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
|
||||
@ -443,7 +427,6 @@ createMines(
|
||||
);
|
||||
|
||||
log("Creating metal mines...");
|
||||
// create large metal quarries
|
||||
createMines(
|
||||
[
|
||||
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
|
||||
|
@ -63,7 +63,6 @@ const pPoplarForest = [tForestFloor+TERRAIN_SEPARATOR+oLombardyPoplar, tGrass];
|
||||
const pMainForest = [tForestFloor+TERRAIN_SEPARATOR+oCarob, tForestFloor+TERRAIN_SEPARATOR+oBeech, tGrass, tGrass];
|
||||
|
||||
log("Initializing map...");
|
||||
|
||||
InitMap();
|
||||
|
||||
const numPlayers = getNumPlayers();
|
||||
@ -71,7 +70,6 @@ const mapSize = getMapSize();
|
||||
const mapArea = mapSize*mapSize;
|
||||
|
||||
// Create classes
|
||||
|
||||
var clWater = createTileClass();
|
||||
var clCliff = createTileClass();
|
||||
var clForest = createTileClass();
|
||||
@ -85,13 +83,9 @@ var clSettlement = createTileClass();
|
||||
// randomize player order
|
||||
var playerIDs = [];
|
||||
for (var i = 0; i < numPlayers; i++)
|
||||
{
|
||||
playerIDs.push(i+1);
|
||||
}
|
||||
playerIDs = sortPlayers(playerIDs);
|
||||
|
||||
// Place players
|
||||
|
||||
log("Creating players...");
|
||||
|
||||
var playerX = new Array(numPlayers+1);
|
||||
@ -195,9 +189,7 @@ for (var ix = 0; ix <= mapSize; ix++)
|
||||
|
||||
// add some higher-frequency noise on land
|
||||
if ( oldH > 0 )
|
||||
{
|
||||
h += (0.4*noise2a.get(x,z) + 0.2*noise2b.get(x,z)) * min(oldH/10.0, 1.0);
|
||||
}
|
||||
|
||||
// create cliff noise
|
||||
if ( h > -10 )
|
||||
@ -218,28 +210,20 @@ for (var ix = 0; ix <= mapSize; ix++)
|
||||
cliffNoise -= 0.59;
|
||||
cliffNoise *= pn;
|
||||
if (cliffNoise > 0)
|
||||
{
|
||||
h += 19 * min(cliffNoise, 0.045) / 0.045;
|
||||
}
|
||||
}
|
||||
|
||||
// set the height
|
||||
setHeight(ix, iz, h);
|
||||
}
|
||||
}
|
||||
|
||||
RMS.SetProgress(15);
|
||||
|
||||
// Paint base terrain
|
||||
|
||||
log("Painting terrain...");
|
||||
|
||||
var noise6 = new Noise2D(scaleByMapSize(10, 40));
|
||||
var noise7 = new Noise2D(scaleByMapSize(20, 80));
|
||||
|
||||
var noise8 = new Noise2D(scaleByMapSize(13, 52));
|
||||
var noise9 = new Noise2D(scaleByMapSize(26, 104));
|
||||
|
||||
var noise10 = new Noise2D(scaleByMapSize(50, 200));
|
||||
|
||||
for (var ix = 0; ix < mapSize; ix++)
|
||||
@ -268,12 +252,8 @@ for (var ix = 0; ix < mapSize; ix++)
|
||||
var maxNx = min(ix+2, mapSize);
|
||||
var maxNz = min(iz+2, mapSize);
|
||||
for (var nx = max(ix-1, 0); nx <= maxNx; nx++)
|
||||
{
|
||||
for (var nz = max(iz-1, 0); nz <= maxNz; nz++)
|
||||
{
|
||||
minAdjHeight = min(minAdjHeight, getHeight(nx, nz));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// choose a terrain based on elevation
|
||||
@ -281,38 +261,22 @@ for (var ix = 0; ix < mapSize; ix++)
|
||||
|
||||
// water
|
||||
if (maxH < -12)
|
||||
{
|
||||
t = tOceanDepths;
|
||||
}
|
||||
else if (maxH < -8.8)
|
||||
{
|
||||
t = tOceanRockDeep;
|
||||
}
|
||||
else if (maxH < -4.7)
|
||||
{
|
||||
t = tOceanCoral;
|
||||
}
|
||||
else if (maxH < -2.8)
|
||||
{
|
||||
t = tOceanRockShallow;
|
||||
}
|
||||
else if (maxH < 0.9 && minH < 0.35)
|
||||
{
|
||||
t = tBeachWet;
|
||||
}
|
||||
else if (maxH < 1.5 && minH < 0.9)
|
||||
{
|
||||
t = tBeachDry;
|
||||
}
|
||||
else if (maxH < 2.3 && minH < 1.3)
|
||||
{
|
||||
t = tBeachGrass;
|
||||
}
|
||||
|
||||
if (minH < 0)
|
||||
{
|
||||
addToClass(ix, iz, clWater);
|
||||
}
|
||||
|
||||
// cliffs
|
||||
if (diffH > 2.9 && minH > -7)
|
||||
@ -320,7 +284,7 @@ for (var ix = 0; ix < mapSize; ix++)
|
||||
t = tCliff;
|
||||
addToClass(ix, iz, clCliff);
|
||||
}
|
||||
else if ((diffH > 2.5 && minH > -5) || ((maxH - minAdjHeight) > 2.9 && minH > 0) )
|
||||
else if (diffH > 2.5 && minH > -5 || maxH - minAdjHeight > 2.9 && minH > 0)
|
||||
{
|
||||
if (minH < -1)
|
||||
t = tCliff;
|
||||
@ -442,9 +406,8 @@ for (var i = 1; i <= numPlayers; i++)
|
||||
// create metal mine
|
||||
var mAngle = bbAngle;
|
||||
while(abs(mAngle - bbAngle) < PI/3)
|
||||
{
|
||||
mAngle = randFloat(0, TWO_PI);
|
||||
}
|
||||
|
||||
var mDist = 12;
|
||||
var mX = round(fx + mDist * cos(mAngle));
|
||||
var mZ = round(fz + mDist * sin(mAngle));
|
||||
@ -478,11 +441,9 @@ for (var i = 1; i <= numPlayers; i++)
|
||||
);
|
||||
createObjectGroup(group, 0, avoidClasses(clBaseResource, 2, clCliff, 0));
|
||||
}
|
||||
|
||||
RMS.SetProgress(40);
|
||||
|
||||
log("Creating bushes...");
|
||||
// create bushes
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(aBushSmall, 0,2, 0,2), new SimpleObject(aBushSmallDry, 0,2, 0,2),
|
||||
new SimpleObject(aBushMed, 0,1, 0,2), new SimpleObject(aBushMedDry, 0,1, 0,2)]
|
||||
@ -491,11 +452,9 @@ createObjectGroups(group, 0,
|
||||
avoidClasses(clWater, 4, clCliff, 2),
|
||||
scaleByMapSize(9, 146), 50
|
||||
);
|
||||
|
||||
RMS.SetProgress(45);
|
||||
|
||||
log("Creating rocks...");
|
||||
// create rocks
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(aRockSmall, 0,3, 0,2), new SimpleObject(aRockMed, 0,2, 0,2),
|
||||
new SimpleObject(aRockLarge, 0,1, 0,2)]
|
||||
@ -504,7 +463,6 @@ createObjectGroups(group, 0,
|
||||
avoidClasses(clWater, 2, clCliff, 1),
|
||||
scaleByMapSize(9, 146), 50
|
||||
);
|
||||
|
||||
RMS.SetProgress(50);
|
||||
|
||||
log("Creating large stone mines...");
|
||||
@ -541,7 +499,6 @@ for (var t in trees)
|
||||
scaleByMapSize(2, 38), 50
|
||||
);
|
||||
}
|
||||
|
||||
RMS.SetProgress(70);
|
||||
|
||||
log("Creating straggler cypresses...");
|
||||
@ -553,21 +510,17 @@ createObjectGroups(group, 0,
|
||||
avoidClasses(clWater, 5, clCliff, 4, clForest, 2, clPlayer, 15, clMetal, 4, clStone, 4),
|
||||
scaleByMapSize(5, 75), 50
|
||||
);
|
||||
|
||||
RMS.SetProgress(80);
|
||||
|
||||
log("Creating sheep...");
|
||||
// create sheep
|
||||
group = new SimpleGroup([new SimpleObject(oSheep, 2,4, 0,2)], true, clFood);
|
||||
createObjectGroups(group, 0,
|
||||
avoidClasses(clWater, 5, clForest, 2, clCliff, 1, clPlayer, 20, clMetal, 4, clStone, 4, clFood, 8),
|
||||
3 * numPlayers, 50
|
||||
);
|
||||
|
||||
RMS.SetProgress(85);
|
||||
|
||||
log("Creating fish...");
|
||||
// create fish
|
||||
var num = scaleByMapSize(4, 16);
|
||||
var offsetX = mapSize * WATER_WIDTH/2;
|
||||
for (var i = 0; i < num; ++i)
|
||||
@ -577,7 +530,6 @@ for (var i = 0; i < num; ++i)
|
||||
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));
|
||||
@ -585,10 +537,8 @@ for (var i = 0; i < num; ++i)
|
||||
group = new SimpleGroup([new SimpleObject(oFish, 1,1, 0,1)], true, clFood, cX, cY);
|
||||
createObjectGroup(group, 0);
|
||||
}
|
||||
|
||||
RMS.SetProgress(90);
|
||||
|
||||
// create deer
|
||||
log("Creating deer...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(oDeer, 5,7, 0,4)],
|
||||
@ -598,11 +548,9 @@ createObjectGroups(group, 0,
|
||||
avoidClasses(clWater, 5, clForest, 2, clCliff, 1, clPlayer, 20, clMetal, 4, clStone, 4, clFood, 8),
|
||||
3 * numPlayers, 50
|
||||
);
|
||||
|
||||
RMS.SetProgress(95);
|
||||
|
||||
log("Creating berry bushes...");
|
||||
// create berry bushes
|
||||
group = new SimpleGroup([new SimpleObject(oBerryBush, 5,7, 0,3)], true, clFood);
|
||||
createObjectGroups(group, 0,
|
||||
avoidClasses(clWater, 5, clForest, 2, clCliff, 1, clPlayer, 20, clMetal, 4, clStone, 4, clFood, 8),
|
||||
@ -617,5 +565,4 @@ setWaterWaviness(2.5);
|
||||
setWaterType("ocean");
|
||||
setWaterMurkiness(0.8);
|
||||
|
||||
// Export map data
|
||||
ExportMap();
|
||||
|
@ -56,7 +56,6 @@ const mapSize = getMapSize();
|
||||
const mapArea = mapSize*mapSize;
|
||||
|
||||
// create tile classes
|
||||
|
||||
var clPlayer = createTileClass();
|
||||
var clHill = createTileClass();
|
||||
var clForest = createTileClass();
|
||||
@ -71,13 +70,11 @@ var clLand = createTileClass();
|
||||
// randomize player order
|
||||
var playerIDs = [];
|
||||
for (var i = 0; i < numPlayers; i++)
|
||||
{
|
||||
playerIDs.push(i+1);
|
||||
}
|
||||
|
||||
playerIDs = sortPlayers(playerIDs);
|
||||
|
||||
// place players
|
||||
|
||||
var playerX = new Array(numPlayers);
|
||||
var playerZ = new Array(numPlayers);
|
||||
var playerAngle = new Array(numPlayers);
|
||||
@ -155,9 +152,8 @@ for (var i = 0; i < numPlayers; i++)
|
||||
// create metal mine
|
||||
var mAngle = bbAngle;
|
||||
while(abs(mAngle - bbAngle) < PI/3)
|
||||
{
|
||||
mAngle = randFloat(0, TWO_PI);
|
||||
}
|
||||
|
||||
var mDist = radius - 4;
|
||||
var mX = round(fx + mDist * cos(mAngle));
|
||||
var mZ = round(fz + mDist * sin(mAngle));
|
||||
@ -209,7 +205,7 @@ for (var i = 0; i < numPlayers; i++)
|
||||
if (dockLocation !== undefined)
|
||||
placeObject(dockLocation[0], dockLocation[1], "structures/" + getCivCode(id-1) + "_dock", id, playerAngle[i] + PI);
|
||||
}
|
||||
|
||||
RMS.SetProgress(15);
|
||||
|
||||
//Create the continent body
|
||||
var fx = fractionToTiles(0.12);
|
||||
@ -228,8 +224,8 @@ var elevationPainter = new SmoothElevationPainter(
|
||||
4 // blend radius
|
||||
);
|
||||
createArea(placer, [terrainPainter, elevationPainter, paintClass(clLand)], avoidClasses(clPlayer, 8));
|
||||
RMS.SetProgress(20);
|
||||
|
||||
// create shore jaggedness
|
||||
log("Creating shore jaggedness...");
|
||||
placer = new ClumpPlacer(scaleByMapSize(15, 80), 0.2, 0.1, 1);
|
||||
terrainPainter = new LayeredPainter(
|
||||
@ -244,13 +240,10 @@ createAreas(
|
||||
scaleByMapSize(20, 150) * 2, 150
|
||||
);
|
||||
|
||||
//painting the terrain
|
||||
paintTerrainBasedOnHeight(1, 3, 0, tShore);
|
||||
paintTerrainBasedOnHeight(-8, 1, 2, tWater);
|
||||
RMS.SetProgress(25);
|
||||
|
||||
RMS.SetProgress(20);
|
||||
|
||||
// create bumps
|
||||
log("Creating bumps...");
|
||||
placer = new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1);
|
||||
painter = new SmoothElevationPainter(ELEVATION_MODIFY, 2, 2);
|
||||
@ -260,8 +253,8 @@ createAreas(
|
||||
[avoidClasses(clPlayer, 10), stayClasses(clLand, 3)],
|
||||
scaleByMapSize(100, 200)
|
||||
);
|
||||
RMS.SetProgress(30);
|
||||
|
||||
// create hills
|
||||
log("Creating hills...");
|
||||
placer = new ClumpPlacer(scaleByMapSize(20, 150), 0.2, 0.1, 1);
|
||||
terrainPainter = new LayeredPainter(
|
||||
@ -275,6 +268,7 @@ createAreas(
|
||||
[avoidClasses(clPlayer, 10, clHill, 15), stayClasses(clLand, 7)],
|
||||
scaleByMapSize(1, 4) * numPlayers
|
||||
);
|
||||
RMS.SetProgress(34);
|
||||
|
||||
// calculate desired number of trees for map (based on size)
|
||||
if (random_terrain == g_BiomeSavanna)
|
||||
@ -300,7 +294,6 @@ var totalTrees = scaleByMapSize(MIN_TREES, MAX_TREES);
|
||||
var numForest = totalTrees * P_FOREST;
|
||||
var numStragglers = totalTrees * (1.0 - P_FOREST);
|
||||
|
||||
// create forests
|
||||
log("Creating forests...");
|
||||
var types = [
|
||||
[[tForestFloor2, tMainTerrain, pForest1], [tForestFloor2, pForest1]],
|
||||
@ -330,9 +323,8 @@ for (var i = 0; i < types.length; ++i)
|
||||
num
|
||||
);
|
||||
}
|
||||
RMS.SetProgress(38);
|
||||
|
||||
RMS.SetProgress(50);
|
||||
// create dirt patches
|
||||
log("Creating dirt patches...");
|
||||
var sizes = [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)];
|
||||
for (var i = 0; i < sizes.length; i++)
|
||||
@ -349,8 +341,8 @@ for (var i = 0; i < sizes.length; i++)
|
||||
scaleByMapSize(15, 45)
|
||||
);
|
||||
}
|
||||
RMS.SetProgress(42);
|
||||
|
||||
// create grass patches
|
||||
log("Creating grass patches...");
|
||||
var sizes = [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5, 80)];
|
||||
for (var i = 0; i < sizes.length; i++)
|
||||
@ -364,23 +356,23 @@ for (var i = 0; i < sizes.length; i++)
|
||||
scaleByMapSize(15, 45)
|
||||
);
|
||||
}
|
||||
RMS.SetProgress(55);
|
||||
|
||||
RMS.SetProgress(46);
|
||||
|
||||
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, 10, clRock, 10, clHill, 1), stayClasses(clLand, 7)],
|
||||
scaleByMapSize(4,16), 100
|
||||
);
|
||||
RMS.SetProgress(50);
|
||||
|
||||
// create small stone quarries
|
||||
log("Creating small stone quarries...");
|
||||
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
|
||||
createObjectGroups(group, 0,
|
||||
[avoidClasses(clForest, 1, clPlayer, 10, clRock, 10, clHill, 1), stayClasses(clLand, 7)],
|
||||
scaleByMapSize(4,16), 100
|
||||
);
|
||||
RMS.SetProgress(54);
|
||||
|
||||
log("Creating metal mines...");
|
||||
// create large metal quarries
|
||||
@ -389,8 +381,7 @@ createObjectGroups(group, 0,
|
||||
[avoidClasses(clForest, 1, clPlayer, 10, clMetal, 10, clRock, 5, clHill, 1), stayClasses(clLand, 7)],
|
||||
scaleByMapSize(4,16), 100
|
||||
);
|
||||
|
||||
RMS.SetProgress(65);
|
||||
RMS.SetProgress(58);
|
||||
|
||||
// create small decorative rocks
|
||||
log("Creating small decorative rocks...");
|
||||
@ -403,7 +394,7 @@ createObjectGroups(
|
||||
[avoidClasses(clForest, 0, clPlayer, 0, clHill, 0), stayClasses(clLand, 6)],
|
||||
scaleByMapSize(16, 262), 50
|
||||
);
|
||||
|
||||
RMS.SetProgress(62);
|
||||
|
||||
// create large decorative rocks
|
||||
log("Creating large decorative rocks...");
|
||||
@ -416,10 +407,8 @@ createObjectGroups(
|
||||
[avoidClasses(clForest, 0, clPlayer, 0, clHill, 0), stayClasses(clLand, 6)],
|
||||
scaleByMapSize(8, 131), 50
|
||||
);
|
||||
RMS.SetProgress(66);
|
||||
|
||||
RMS.SetProgress(70);
|
||||
|
||||
// create deer
|
||||
log("Creating deer...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(oMainHuntableAnimal, 5,7, 0,4)],
|
||||
@ -429,10 +418,8 @@ createObjectGroups(group, 0,
|
||||
[avoidClasses(clForest, 0, clPlayer, 10, clHill, 1, clFood, 20), stayClasses(clLand, 7)],
|
||||
3 * numPlayers, 50
|
||||
);
|
||||
RMS.SetProgress(70);
|
||||
|
||||
RMS.SetProgress(75);
|
||||
|
||||
// create sheep
|
||||
log("Creating sheep...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(oSecondaryHuntableAnimal, 2,3, 0,2)],
|
||||
@ -442,8 +429,8 @@ createObjectGroups(group, 0,
|
||||
[avoidClasses(clForest, 0, clPlayer, 10, clHill, 1, clFood, 20), stayClasses(clLand, 7)],
|
||||
3 * numPlayers, 50
|
||||
);
|
||||
RMS.SetProgress(74);
|
||||
|
||||
// create fruit bush
|
||||
log("Creating fruit bush...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(oFruitBush, 5,7, 0,4)],
|
||||
@ -453,8 +440,8 @@ createObjectGroups(group, 0,
|
||||
[avoidClasses(clForest, 0, clPlayer, 8, clHill, 1, clFood, 20), stayClasses(clLand, 7)],
|
||||
randInt(1, 4) * numPlayers + 2, 50
|
||||
);
|
||||
RMS.SetProgress(78);
|
||||
|
||||
// create fish
|
||||
log("Creating fish...");
|
||||
createObjectGroups(
|
||||
new SimpleGroup([new SimpleObject(oFish, 2,3, 0,2)], true, clFood),
|
||||
@ -462,11 +449,8 @@ createObjectGroups(
|
||||
avoidClasses(clLand, 2, clPlayer, 2, clHill, 0, clFood, 20),
|
||||
25 * numPlayers, 60
|
||||
);
|
||||
RMS.SetProgress(82);
|
||||
|
||||
RMS.SetProgress(85);
|
||||
|
||||
|
||||
// create straggler trees
|
||||
log("Creating straggler trees...");
|
||||
var types = [oTree1, oTree2, oTree4, oTree3]; // some variation
|
||||
var num = floor(numStragglers / types.length);
|
||||
@ -481,6 +465,7 @@ for (var i = 0; i < types.length; ++i)
|
||||
num
|
||||
);
|
||||
}
|
||||
RMS.SetProgress(86);
|
||||
|
||||
var planetm = 1;
|
||||
if (random_terrain==7)
|
||||
@ -496,10 +481,8 @@ createObjectGroups(group, 0,
|
||||
[avoidClasses(clHill, 2, clPlayer, 2, clDirt, 0), stayClasses(clLand, 6)],
|
||||
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)]
|
||||
@ -508,10 +491,8 @@ createObjectGroups(group, 0,
|
||||
[avoidClasses(clHill, 2, clPlayer, 2, clDirt, 1, clForest, 0), stayClasses(clLand, 6)],
|
||||
planetm * scaleByMapSize(13, 200)
|
||||
);
|
||||
RMS.SetProgress(94);
|
||||
|
||||
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)]
|
||||
@ -520,6 +501,7 @@ createObjectGroups(group, 0,
|
||||
[avoidClasses(clHill, 1, clPlayer, 1, clDirt, 1), stayClasses(clLand, 6)],
|
||||
planetm * scaleByMapSize(13, 200), 50
|
||||
);
|
||||
RMS.SetProgress(98);
|
||||
|
||||
random_terrain = randInt(1,3);
|
||||
if (random_terrain == 1)
|
||||
@ -533,5 +515,4 @@ setSunRotation(randFloat(0, TWO_PI));
|
||||
setSunElevation(randFloat(PI/ 5, PI / 3));
|
||||
setWaterWaviness(2);
|
||||
|
||||
// Export map data
|
||||
ExportMap();
|
||||
|
@ -43,15 +43,12 @@ const pForest = [tForestFloor + TERRAIN_SEPARATOR + oDatePalm, tForestFloor + TE
|
||||
const pForestOasis = [tGrass + TERRAIN_SEPARATOR + oDatePalm, tGrass + TERRAIN_SEPARATOR + oSDatePalm, tGrass];
|
||||
|
||||
log("Initializing map...");
|
||||
|
||||
InitMap();
|
||||
|
||||
const numPlayers = getNumPlayers();
|
||||
const mapSize = getMapSize();
|
||||
const mapArea = mapSize*mapSize;
|
||||
|
||||
// create tile classes
|
||||
|
||||
var clPlayer = createTileClass();
|
||||
var clHill1 = createTileClass();
|
||||
var clHill2 = createTileClass();
|
||||
@ -66,9 +63,8 @@ var clBaseResource = createTileClass();
|
||||
// randomize player order
|
||||
var playerIDs = [];
|
||||
for (var i = 0; i < numPlayers; i++)
|
||||
{
|
||||
playerIDs.push(i+1);
|
||||
}
|
||||
|
||||
playerIDs = sortPlayers(playerIDs);
|
||||
|
||||
// place players
|
||||
@ -131,9 +127,8 @@ for (var i = 0; i < numPlayers; i++)
|
||||
// create metal mine
|
||||
var mAngle = bbAngle;
|
||||
while(abs(mAngle - bbAngle) < PI/3)
|
||||
{
|
||||
mAngle = randFloat(0, TWO_PI);
|
||||
}
|
||||
|
||||
var mDist = 11;
|
||||
var mX = round(fx + mDist * cos(mAngle));
|
||||
var mZ = round(fz + mDist * sin(mAngle));
|
||||
@ -166,10 +161,8 @@ for (var i = 0; i < numPlayers; i++)
|
||||
);
|
||||
createObjectGroup(group, 0, avoidClasses(clBaseResource,2));
|
||||
}
|
||||
|
||||
RMS.SetProgress(10);
|
||||
|
||||
// create patches
|
||||
log("Creating dune patches...");
|
||||
placer = new ClumpPlacer(scaleByMapSize(40, 150), 0.2, 0.1, 0);
|
||||
painter = new TerrainPainter(tDunes);
|
||||
@ -177,7 +170,6 @@ createAreas(placer, [painter, paintClass(clPatch)],
|
||||
avoidClasses(clPatch, 2, clPlayer, 0),
|
||||
scaleByMapSize(5, 20)
|
||||
);
|
||||
|
||||
RMS.SetProgress(15);
|
||||
|
||||
log("Creating sand patches...");
|
||||
@ -187,7 +179,6 @@ createAreas(placer, [painter, paintClass(clPatch)],
|
||||
avoidClasses(clPatch, 2, clPlayer, 0),
|
||||
scaleByMapSize(15, 50)
|
||||
);
|
||||
|
||||
RMS.SetProgress(20);
|
||||
|
||||
log("Creating dirt patches...");
|
||||
@ -197,20 +188,17 @@ createAreas(placer, [painter, paintClass(clPatch)],
|
||||
avoidClasses(clPatch, 2, clPlayer, 0),
|
||||
scaleByMapSize(15, 50)
|
||||
);
|
||||
|
||||
RMS.SetProgress(25);
|
||||
|
||||
// create the oasis
|
||||
log("Creating oasis...");
|
||||
var oRadius = scaleByMapSize(14, 40);
|
||||
placer = new ClumpPlacer(PI*oRadius*oRadius, 0.6, 0.15, 0, mapSize/2, mapSize/2);
|
||||
painter = new LayeredPainter([[tSand, pForest], [tGrassSand25, pForestOasis], tGrassSand25, tShore, tWaterDeep], [2, 3, 1, 1]);
|
||||
elevationPainter = new SmoothElevationPainter(ELEVATION_MODIFY, -11, 8);
|
||||
createArea(placer, [painter, elevationPainter, paintClass(clForest)], null);
|
||||
|
||||
RMS.SetProgress(30);
|
||||
|
||||
// create oasis wildlife
|
||||
log("Creating oasis wildlife...");
|
||||
var num = round(PI * oRadius / 8);
|
||||
var constraint = new AndConstraint([borderClasses(clForest, 0, 3), avoidClasses(clForest, 0)]);
|
||||
var halfSize = mapSize/2;
|
||||
@ -253,10 +241,8 @@ for (var i = 0; i < num; ++i)
|
||||
);
|
||||
createObjectGroup(group, 0);
|
||||
}
|
||||
|
||||
RMS.SetProgress(35);
|
||||
|
||||
// create hills
|
||||
log("Creating level 1 hills...");
|
||||
placer = new ClumpPlacer(scaleByMapSize(50,300), 0.25, 0.1, 0.5);
|
||||
var terrainPainter = new LayeredPainter(
|
||||
@ -268,7 +254,6 @@ var hillAreas = createAreas(placer, [terrainPainter, elevationPainter, paintClas
|
||||
avoidClasses(clForest, 3, clPlayer, 0, clHill1, 10),
|
||||
scaleByMapSize(10,20), 100
|
||||
);
|
||||
|
||||
RMS.SetProgress(40);
|
||||
|
||||
log("Creating small level 1 hills...");
|
||||
@ -283,13 +268,9 @@ var tempAreas = createAreas(placer, [terrainPainter, elevationPainter, paintClas
|
||||
scaleByMapSize(15,25), 100
|
||||
);
|
||||
for (var i = 0; i < tempAreas.length; ++i)
|
||||
{
|
||||
hillAreas.push(tempAreas[i]);
|
||||
}
|
||||
|
||||
RMS.SetProgress(45);
|
||||
|
||||
// create decorative rocks for hills
|
||||
log("Creating decorative rocks...");
|
||||
group = new SimpleGroup(
|
||||
[new RandomObject([aDecorativeRock, aBush2, aBush3], 3,8, 0,2)],
|
||||
@ -315,7 +296,6 @@ createAreasInAreas(placer, [terrainPainter, elevationPainter],
|
||||
scaleByMapSize(15,25), 50,
|
||||
hillAreas
|
||||
);
|
||||
|
||||
RMS.SetProgress(55);
|
||||
|
||||
log("Creating level 3 hills...");
|
||||
@ -330,11 +310,8 @@ createAreas(placer, [terrainPainter, elevationPainter],
|
||||
scaleByMapSize(15,25), 50,
|
||||
hillAreas
|
||||
);
|
||||
hillAreas = [];
|
||||
|
||||
RMS.SetProgress(60);
|
||||
|
||||
// create bumps
|
||||
log("Creating bumps...");
|
||||
placer = new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 0);
|
||||
elevationPainter = new SmoothElevationPainter(ELEVATION_MODIFY, 2, 2);
|
||||
@ -369,14 +346,12 @@ createAreas(placer, [painter, paintClass(clForest)],
|
||||
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, 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, 1)],
|
||||
@ -384,7 +359,6 @@ createObjectGroups(group, 0,
|
||||
);
|
||||
|
||||
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, 1)],
|
||||
@ -393,7 +367,6 @@ createObjectGroups(group, 0,
|
||||
|
||||
RMS.SetProgress(80);
|
||||
|
||||
// create gazelles
|
||||
log("Creating gazelles...");
|
||||
group = new SimpleGroup([new SimpleObject(oGazelle, 5,7, 0,4)], true, clFood);
|
||||
createObjectGroups(group, 0,
|
||||
@ -401,7 +374,6 @@ createObjectGroups(group, 0,
|
||||
scaleByMapSize(5,20), 50
|
||||
);
|
||||
|
||||
// create goats
|
||||
log("Creating goats...");
|
||||
group = new SimpleGroup([new SimpleObject(oGoat, 2,4, 0,3)], true, clFood);
|
||||
createObjectGroups(group, 0,
|
||||
@ -409,17 +381,14 @@ createObjectGroups(group, 0,
|
||||
scaleByMapSize(5,20), 50
|
||||
);
|
||||
|
||||
// create camels
|
||||
log("Creating camels...");
|
||||
group = new SimpleGroup([new SimpleObject(oCamel, 2,4, 0,2)], true, clFood);
|
||||
createObjectGroups(group, 0,
|
||||
avoidClasses(clForest, 0, clPlayer, 5, clHill1, 1, clFood, 10),
|
||||
scaleByMapSize(5,20), 50
|
||||
);
|
||||
|
||||
RMS.SetProgress(85);
|
||||
|
||||
// create straggler trees
|
||||
log("Creating straggler trees...");
|
||||
var types = [oDatePalm, oSDatePalm]; // some variation
|
||||
var num = floor(numStragglers / types.length);
|
||||
@ -431,10 +400,8 @@ for (var i = 0; i < types.length; ++i)
|
||||
num
|
||||
);
|
||||
}
|
||||
|
||||
RMS.SetProgress(90);
|
||||
|
||||
// create bushes
|
||||
log("Creating bushes...");
|
||||
group = new SimpleGroup([new RandomObject(aBushes, 2,3, 0,2)]);
|
||||
createObjectGroups(group, 0,
|
||||
@ -442,7 +409,6 @@ createObjectGroups(group, 0,
|
||||
scaleByMapSize(16, 262)
|
||||
);
|
||||
|
||||
// create rocks
|
||||
log("Creating more decorative rocks...");
|
||||
group = new SimpleGroup([new SimpleObject(aDecorativeRock, 1,2, 0,2)]);
|
||||
createObjectGroups(group, 0,
|
||||
@ -457,5 +423,4 @@ setWaterType("clap");
|
||||
setWaterMurkiness(0.75);
|
||||
setWaterHeight(20);
|
||||
|
||||
// Export map data
|
||||
ExportMap();
|
||||
|
@ -276,37 +276,8 @@ createObjectGroups(group, 0,
|
||||
avoidClasses(clWater, 10, clForest, 1, clPlayer, 30, clMetal, 10,clBaseResource, 2, clRock, 10, clHill, 1),
|
||||
scaleByMapSize(6,25), 100
|
||||
);
|
||||
|
||||
RMS.SetProgress(65);
|
||||
|
||||
/*
|
||||
// create small decorative rocks
|
||||
log("Creating small decorative rocks...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(rba5, 1,3, 0,1)],
|
||||
true
|
||||
);
|
||||
createObjectGroups(
|
||||
group, 0,
|
||||
avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0),
|
||||
scaleByMapSize(16, 262), 50
|
||||
);
|
||||
|
||||
|
||||
// create large decorative rocks
|
||||
log("Creating large decorative rocks...");
|
||||
group = new SimpleGroup(
|
||||
[new SimpleObject(rba5, 1,2, 0,1), new SimpleObject(rba5, 1,3, 0,2)],
|
||||
true
|
||||
);
|
||||
createObjectGroups(
|
||||
group, 0,
|
||||
avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0),
|
||||
scaleByMapSize(8, 131), 50
|
||||
);
|
||||
|
||||
RMS.SetProgress(70);
|
||||
*/
|
||||
log("Creating small decorative rocks...");
|
||||
group = new SimpleGroup( [new SimpleObject(aRock, 2,4, 0,2)], true, undefined );
|
||||
createObjectGroups(group, 0, avoidClasses(clWater, 3, clForest, 0, clPlayer, 10, clHill, 1, clFood, 20), 30, scaleByMapSize(10,50) );
|
||||
|
@ -767,32 +767,18 @@ createObjectGroups(group, 0, [avoidClasses(clFood, 15), stayClasses(clWater, 6)]
|
||||
setSunElevation(randFloat(PI/5, PI / 3));
|
||||
setSunRotation(randFloat(0, TWO_PI));
|
||||
|
||||
//var rt = randInt(1,6);
|
||||
//if (rt==1){
|
||||
// setSkySet("stormy");
|
||||
// setSunColor(0.36,0.38,0.45);
|
||||
// setTerrainAmbientColor(0.52,0.575,0.6);
|
||||
// setUnitsAmbientColor(0.52,0.575,0.6);
|
||||
// setSunElevation(PI/7);
|
||||
|
||||
// setWaterTint(0.1, 0.1, 0.2); // muddy brown
|
||||
//} else {
|
||||
setSkySet("cumulus");
|
||||
setSunColor(0.73,0.73,0.65);
|
||||
setTerrainAmbientColor(0.45,0.45,0.50);
|
||||
setUnitsAmbientColor(0.4,0.4,0.4);
|
||||
setWaterColor(0.114, 0.192, 0.463);
|
||||
setWaterTint(0.255, 0.361, 0.651);
|
||||
setWaterWaviness(3.0);
|
||||
setSkySet("cumulus");
|
||||
setSunColor(0.73,0.73,0.65);
|
||||
setTerrainAmbientColor(0.45,0.45,0.50);
|
||||
setUnitsAmbientColor(0.4,0.4,0.4);
|
||||
setWaterColor(0.114, 0.192, 0.463);
|
||||
setWaterTint(0.255, 0.361, 0.651);
|
||||
setWaterWaviness(3.0);
|
||||
setWaterType("ocean");
|
||||
setWaterMurkiness(0.83);
|
||||
//}
|
||||
|
||||
// Export map data
|
||||
setWaterMurkiness(0.83);
|
||||
|
||||
ExportMap();
|
||||
|
||||
|
||||
function getNeighborsHeight(x1, z1)
|
||||
{
|
||||
var toCheck = [ [-1,-1], [-1,0], [-1,1], [0,1], [1,1], [1,0], [1,-1], [0,-1] ];
|
||||
|
@ -25,9 +25,7 @@ ClumpPlacer.prototype.place = function(constraint)
|
||||
{
|
||||
// Preliminary bounds check
|
||||
if (!g_Map.inMapBounds(this.x, this.z) || !constraint.allows(this.x, this.z))
|
||||
{
|
||||
return undefined;
|
||||
}
|
||||
|
||||
var retVec = [];
|
||||
|
||||
@ -45,9 +43,7 @@ ClumpPlacer.prototype.place = function(constraint)
|
||||
var ctrlPts = 1 + Math.floor(1.0/Math.max(this.smoothness,1.0/intPerim));
|
||||
|
||||
if (ctrlPts > radius * 2 * PI)
|
||||
{
|
||||
ctrlPts = Math.floor(radius * 2 * PI) + 1;
|
||||
}
|
||||
|
||||
var noise = new Float32Array(intPerim); //float32
|
||||
var ctrlCoords = new Float32Array(ctrlPts+1); //float32
|
||||
@ -92,8 +88,8 @@ ClumpPlacer.prototype.place = function(constraint)
|
||||
var r = radius * (1 + (1-this.coherence)*noise[p]);
|
||||
var s = sin(th);
|
||||
var c = cos(th);
|
||||
var xx=this.x;
|
||||
var yy=this.z;
|
||||
var xx = this.x;
|
||||
var yy = this.z;
|
||||
|
||||
for (var k=0; k < ceil(r); k++)
|
||||
{
|
||||
@ -102,21 +98,21 @@ ClumpPlacer.prototype.place = function(constraint)
|
||||
if (g_Map.inMapBounds(i, j) && constraint.allows(i, j))
|
||||
{
|
||||
if (!gotRet[i][j])
|
||||
{ // Only include each point once
|
||||
{
|
||||
// Only include each point once
|
||||
gotRet[i][j] = 1;
|
||||
retVec.push(new PointXZ(i, j));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
failed++;
|
||||
}
|
||||
|
||||
xx += s;
|
||||
yy += c;
|
||||
}
|
||||
}
|
||||
|
||||
return ((failed > this.size*this.failFraction) ? undefined : retVec);
|
||||
return failed > this.size * this.failFraction ? undefined : retVec;
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -150,9 +146,7 @@ ChainPlacer.prototype.place = function(constraint)
|
||||
{
|
||||
// Preliminary bounds check
|
||||
if (!g_Map.inMapBounds(this.x, this.z) || !constraint.allows(this.x, this.z))
|
||||
{
|
||||
return undefined;
|
||||
}
|
||||
|
||||
var retVec = [];
|
||||
var size = getMapSize();
|
||||
@ -175,24 +169,19 @@ ChainPlacer.prototype.place = function(constraint)
|
||||
if (this.minRadius > this.maxRadius) this.minRadius = this.maxRadius;
|
||||
|
||||
var edges = [[this.x, this.z]];
|
||||
|
||||
for (var i = 0; i < this.numCircles; ++i)
|
||||
{
|
||||
var point = edges[randInt(edges.length)];
|
||||
var cx = point[0], cz = point[1];
|
||||
|
||||
if (queueEmpty)
|
||||
{
|
||||
var radius = randInt(this.minRadius, this.maxRadius);
|
||||
}
|
||||
else
|
||||
{
|
||||
var radius = this.q.pop();
|
||||
queueEmpty = (this.q.length ? false : true);
|
||||
}
|
||||
|
||||
//log (edges);
|
||||
|
||||
var sx = cx - radius, lx = cx + radius;
|
||||
var sz = cz - radius, lz = cz + radius;
|
||||
|
||||
@ -204,10 +193,7 @@ ChainPlacer.prototype.place = function(constraint)
|
||||
var radius2 = radius * radius;
|
||||
var dx, dz;
|
||||
|
||||
//log (uneval([sx, sz, lx, lz]));
|
||||
|
||||
for (var ix = sx; ix <= lx; ++ix)
|
||||
{
|
||||
for (var iz = sz; iz <= lz; ++ iz)
|
||||
{
|
||||
dx = ix - cx;
|
||||
@ -224,31 +210,22 @@ ChainPlacer.prototype.place = function(constraint)
|
||||
}
|
||||
else if (state >= 0)
|
||||
{
|
||||
//log (uneval(edges));
|
||||
//log (state)
|
||||
var s = edges.splice(state, 1);
|
||||
//log (uneval(s));
|
||||
//log (uneval(edges));
|
||||
gotRet[ix][iz] = -2;
|
||||
|
||||
var edgesLength = edges.length;
|
||||
for (var k = state; k < edges.length; ++k)
|
||||
{
|
||||
--gotRet[edges[k][0]][edges[k][1]];
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
++failed;
|
||||
}
|
||||
|
||||
++count;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (var ix = sx; ix <= lx; ++ix)
|
||||
{
|
||||
for (var iz = sz; iz <= lz; ++ iz)
|
||||
{
|
||||
if (this.fcc)
|
||||
@ -295,12 +272,10 @@ ChainPlacer.prototype.place = function(constraint)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
return ((failed > count*this.failFraction) ? undefined : retVec);
|
||||
return failed > count * this.failFraction ? undefined : retVec;
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -321,9 +296,7 @@ function RectPlacer(x1, z1, x2, z2)
|
||||
this.z2 = z2;
|
||||
|
||||
if (x1 > x2 || z1 > z2)
|
||||
{
|
||||
throw("RectPlacer: incorrect bounds on rect");
|
||||
}
|
||||
}
|
||||
|
||||
RectPlacer.prototype.place = function(constraint)
|
||||
@ -331,29 +304,18 @@ RectPlacer.prototype.place = function(constraint)
|
||||
// Preliminary bounds check
|
||||
if (!g_Map.inMapBounds(this.x1, this.z1) || !constraint.allows(this.x1, this.z1) ||
|
||||
!g_Map.inMapBounds(this.x2, this.z2) || !constraint.allows(this.x2, this.z2))
|
||||
{
|
||||
return undefined;
|
||||
}
|
||||
|
||||
var ret = [];
|
||||
|
||||
var x2 = this.x2;
|
||||
var z2 = this.z2;
|
||||
|
||||
for (var x=this.x1; x < x2; x++)
|
||||
{
|
||||
for (var z=this.z1; z < z2; z++)
|
||||
{
|
||||
if (g_Map.inMapBounds(x, z) && constraint.allows(x, z))
|
||||
{
|
||||
ret.push(new PointXZ(x, z));
|
||||
}
|
||||
else
|
||||
{
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
};
|
||||
@ -414,9 +376,7 @@ SimpleObject.prototype.place = function(cx, cz, player, avoidSelf, constraint, m
|
||||
var fail = false; // reset place failure flag
|
||||
|
||||
if (!g_Map.validT(x, z))
|
||||
{
|
||||
fail = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (avoidSelf)
|
||||
@ -427,21 +387,17 @@ SimpleObject.prototype.place = function(cx, cz, player, avoidSelf, constraint, m
|
||||
var dx = x - resultObjs[i].position.x;
|
||||
var dy = z - resultObjs[i].position.z;
|
||||
|
||||
if ((dx*dx + dy*dy) < 1)
|
||||
{
|
||||
if (dx*dx + dy*dy < 1)
|
||||
fail = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!fail)
|
||||
{
|
||||
if (!constraint.allows(Math.floor(x), Math.floor(z)))
|
||||
{
|
||||
fail = true;
|
||||
}
|
||||
else
|
||||
{ // if we got here, we're good
|
||||
{
|
||||
var angle = randFloat(this.minAngle, this.maxAngle);
|
||||
resultObjs.push(new Entity(this.type, player, x, z, angle));
|
||||
break;
|
||||
@ -511,9 +467,7 @@ RandomObject.prototype.place = function(cx, cz, player, avoidSelf, constraint, m
|
||||
var fail = false; // reset place failure flag
|
||||
|
||||
if (!g_Map.validT(x, z))
|
||||
{
|
||||
fail = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (avoidSelf)
|
||||
@ -524,21 +478,17 @@ RandomObject.prototype.place = function(cx, cz, player, avoidSelf, constraint, m
|
||||
var dx = x - resultObjs[i].position.x;
|
||||
var dy = z - resultObjs[i].position.z;
|
||||
|
||||
if ((dx*dx + dy*dy) < 1)
|
||||
{
|
||||
if (dx*dx + dy*dy < 1)
|
||||
fail = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!fail)
|
||||
{
|
||||
if (!constraint.allows(Math.floor(x), Math.floor(z)))
|
||||
{
|
||||
fail = true;
|
||||
}
|
||||
else
|
||||
{ // if we got here, we're good
|
||||
{
|
||||
var angle = randFloat(this.minAngle, this.maxAngle);
|
||||
|
||||
//Randomly select entity
|
||||
@ -591,15 +541,12 @@ SimpleGroup.prototype.place = function(player, constraint)
|
||||
for (var i = 0; i < length; i++)
|
||||
{
|
||||
var objs = this.elements[i].place(this.x, this.z, player, this.avoidSelf, constraint);
|
||||
|
||||
if (objs === undefined)
|
||||
{ // Failure
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (var j = 0; j < objs.length; ++j)
|
||||
resultObjs.push(objs[j]);
|
||||
}
|
||||
|
||||
for (var j = 0; j < objs.length; ++j)
|
||||
resultObjs.push(objs[j]);
|
||||
}
|
||||
|
||||
// Add placed objects to map
|
||||
|
@ -63,8 +63,6 @@ function createMountains(terrain, constraint, tileclass, count, maxHeight, minRa
|
||||
|
||||
var numHills = count;
|
||||
for (var i = 0; i < numHills; ++i)
|
||||
{
|
||||
|
||||
createMountain(
|
||||
maxHeight,
|
||||
minRadius,
|
||||
@ -77,7 +75,6 @@ function createMountains(terrain, constraint, tileclass, count, maxHeight, minRa
|
||||
tileclass,
|
||||
14
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function createForests(terrainset, constraint, tileclass, numMultiplier, biomeID)
|
||||
@ -113,7 +110,6 @@ function createForests(terrainset, constraint, tileclass, numMultiplier, biomeID
|
||||
var numForest = totalTrees * P_FOREST;
|
||||
g_numStragglerTrees = totalTrees * (1.0 - P_FOREST);
|
||||
|
||||
// create forests
|
||||
log("Creating forests...");
|
||||
var types = [
|
||||
[[tFF2, tM, tF1], [tFF2, tF1]],
|
||||
|
Loading…
Reference in New Issue
Block a user