Implement rmgen JS logger that measures the time for each procedure and prints logmessages to stdout, fixes #4950.

Allows to identify performance bottlenecks quickly and provides a better
sense of progress when viewing stdout.

This was SVN commit r21073.
This commit is contained in:
elexis
2018-01-30 00:11:11 +00:00
parent 1ba1e86c5e
commit b5b384da48
69 changed files with 948 additions and 875 deletions
@@ -136,7 +136,7 @@ if (randBool())
else
createMountains(tCliff, avoidClasses(clPlayer, 20, clForest, 1, clHill, 15, clWater, 3), clHill, scaleByMapSize(3, 15));
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[[tGrass,tGrassSand50],[tGrassSand50,tGrassSand25], [tGrassSand25,tGrass]],
@@ -147,7 +147,7 @@ createLayeredPatches(
Engine.SetProgress(55);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[tDirt3, tDirt2,[tDirt,tMainDirt], [tDirtCracks,tMainDirt]],
@@ -158,14 +158,14 @@ createLayeredPatches(
Engine.SetProgress(60);
log("Creating undersea bumps...");
g_Map.log("Creating undersea bumps");
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(4, 6)), Math.floor(scaleByMapSize(16, 40)), 0.5),
new SmoothElevationPainter(ELEVATION_SET, heightSeaBump, 3),
stayClasses(clWater, 6),
scaleByMapSize(10, 50));
log("Creating islands...");
g_Map.log("Creating islands");
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(4, 6)), Math.floor(scaleByMapSize(30, 80)), 0.5),
[
@@ -181,7 +181,7 @@ paintTerrainBasedOnHeight(-Infinity, heightSeaGround, Elevation_IncludeMin_Inclu
paintTerrainBasedOnHeight(heightSeaGround, heightCorralsLower, Elevation_ExcludeMin_IncludeMax, tCoralsLower);
paintTerrainBasedOnHeight(heightCorralsLower, heightCorralsUpper, Elevation_ExcludeMin_IncludeMax, tCoralsUpper);
log("Creating island stone mines...");
g_Map.log("Creating island stone mines");
createMines(
[
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
@@ -190,7 +190,7 @@ createMines(
stayClasses(clIsland, 4),
clRock);
log("Creating island metal mines...");
g_Map.log("Creating island metal mines");
createMines(
[
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
@@ -199,7 +199,7 @@ createMines(
clMetal
);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createMines(
[
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
@@ -208,7 +208,7 @@ createMines(
avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clWater, 1, clHill, 1),
clRock);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createMines(
[
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
@@ -96,7 +96,7 @@ Engine.SetProgress(20);
createHills([tDirt2, tCliff, tGrassShrubs], avoidClasses(clPlayer, 35, clForest, 20, clHill, 20, clWater, 2), clHill, scaleByMapSize(5, 8));
Engine.SetProgress(30);
log("Creating water holes...");
g_Map.log("Creating water holes");
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), Math.floor(scaleByMapSize(60, 100)), 5),
[
@@ -120,7 +120,7 @@ createForests(
clForest,
forestTrees);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[[tDirt,tDirt3], [tDirt2,tDirt4]],
@@ -129,7 +129,7 @@ createLayeredPatches(
scaleByMapSize(15, 45),
clDirt);
log("Creating shrubs...");
g_Map.log("Creating shrubs");
createPatches(
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
tGrassShrubs,
@@ -137,7 +137,7 @@ createPatches(
scaleByMapSize(15, 45),
clDirt);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createPatches(
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
tSecondary,
@@ -146,7 +146,7 @@ createPatches(
clDirt);
Engine.SetProgress(60);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createMines(
[
[new SimpleObject(oStoneSmall, 0,2, 0,4)],
@@ -155,7 +155,7 @@ createMines(
avoidClasses(clWater, 4, clForest, 4, clPlayer, 20, clRock, 10, clHill, 4),
clRock);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createMines(
[
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
@@ -177,7 +177,7 @@ createDecoration(
avoidClasses(clWater, 0, clForest, 0, clPlayer, 0, clHill, 0));
Engine.SetProgress(75);
log("Creating giraffes...");
g_Map.log("Creating giraffes");
var group = new SimpleGroup(
[new SimpleObject(oGiraffe, 2,4, 0,4), new SimpleObject(oGiraffe2, 0,2, 0,4)],
true, clFood
@@ -187,7 +187,7 @@ createObjectGroupsDeprecated(group, 0,
scaleByMapSize(4,12), 50
);
log("Creating elephants...");
g_Map.log("Creating elephants");
group = new SimpleGroup(
[new SimpleObject(oElephant, 2,4, 0,4), new SimpleObject(oElephant2, 0,2, 0,4)],
true, clFood
@@ -197,7 +197,7 @@ createObjectGroupsDeprecated(group, 0,
scaleByMapSize(4,12), 50
);
log("Creating lions...");
g_Map.log("Creating lions");
group = new SimpleGroup(
[new SimpleObject(oLion, 0,1, 0,4), new SimpleObject(oLioness, 2,3, 0,4)],
true, clFood
@@ -127,12 +127,11 @@ placePlayerBases({
});
Engine.SetProgress(20);
log("Creating hills...");
createMountains(tCliff, avoidClasses(clPlayer, 20, clHill, 8), clHill, scaleByMapSize(10, 40) * numPlayers, Math.floor(scaleByMapSize(40, 60)), Math.floor(scaleByMapSize(4, 5)), Math.floor(scaleByMapSize(7, 15)), Math.floor(scaleByMapSize(5, 15)));
Engine.SetProgress(30);
log("Creating lakes...");
g_Map.log("Creating lakes");
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(4, 8)), Math.floor(scaleByMapSize(40, 180)), 0.7),
[
@@ -158,7 +157,7 @@ createForests(
Engine.SetProgress(60);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[[tDirt,tHalfSnow], [tHalfSnow,tSnowLimited]],
@@ -167,7 +166,7 @@ createLayeredPatches(
scaleByMapSize(15, 45),
clDirt);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createPatches(
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
tSecondary,
@@ -176,7 +175,7 @@ createPatches(
clDirt);
Engine.SetProgress(65);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createMines(
[
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
@@ -185,7 +184,7 @@ createMines(
avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
clRock);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createMines(
[
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
@@ -178,11 +178,11 @@ MountainRangeBuilder.prototype.PaintCurrentEdge = function()
this.pathplacer.end = this.currentEdgeEnd;
this.pathplacer.width = this.mountainWidth;
log("Creating mountainrange...");
// Creating mountainrange
if (!createArea(this.pathplacer, this.painters, this.constraint))
return false;
log("Creating circular mountains at both ends of that mountainrange...");
// Creating circular mountains at both ends of that mountainrange
for (let point of [this.currentEdgeStart, this.currentEdgeEnd])
createArea(
new ClumpPlacer(diskArea(this.mountainWidth / 2), 0.95, 0.6, 10, point),
@@ -197,8 +197,14 @@ MountainRangeBuilder.prototype.PaintCurrentEdge = function()
*/
MountainRangeBuilder.prototype.CreateMountainRanges = function()
{
g_Map.log("Creating mountainrange with " + this.possibleEdges.length + " possible edges");
let max = this.possibleEdges.length
while (this.possibleEdges.length)
{
Engine.SetProgress(20 + 15 * this.possibleEdges.length / max)
this.index = randIntExclusive(0, this.possibleEdges.length);
this.UpdateCurrentEdge();
this.SetConnectable(false);
@@ -353,7 +359,7 @@ Engine.SetProgress(35);
paintTerrainBasedOnHeight(heightLand + 0.1, snowlineHeight, 0, tCliff);
paintTerrainBasedOnHeight(snowlineHeight, heightMountain, 3, tSnowLimited);
log("Creating bumps...");
g_Map.log("Creating bumps");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetBump, 2),
@@ -361,7 +367,7 @@ createAreas(
scaleByMapSize(100, 200));
Engine.SetProgress(40);
log("Creating hills...");
g_Map.log("Creating hills");
createAreas(
new ClumpPlacer(scaleByMapSize(40, 150), 0.2, 0.1, 1),
[
@@ -374,7 +380,7 @@ createAreas(
);
Engine.SetProgress(50);
log("Creating forests...");
g_Map.log("Creating forests");
var [forestTrees, stragglerTrees] = getTreeCounts(500, 3000, 0.7);
var types = [
[[tForestFloor, tPrimary, pForest], [tForestFloor, pForest]]
@@ -394,7 +400,7 @@ for (let type of types)
num);
Engine.SetProgress(60);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)])
createAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -405,7 +411,7 @@ for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8
avoidClasses(clForest, 0, clHill, 0, clDirt, 5, clPlayer, 12),
scaleByMapSize(15, 45));
log("Creating grass patches...");
g_Map.log("Creating grass patches");
for (let size of [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5, 80)])
createAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -415,21 +421,21 @@ for (let size of [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5
Engine.SetProgress(65);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
scaleByMapSize(4,16), 100
);
log("Creating small stone mines...");
g_Map.log("Creating small stone mines");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
scaleByMapSize(4,16), 100
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clHill, 1),
@@ -437,7 +443,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(70);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockMedium, 1,3, 0,1)],
true
@@ -448,7 +454,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(16, 262), 50
);
log("Creating large decorative rocks...");
g_Map.log("Creating large decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockLarge, 1,2, 0,1), new SimpleObject(aRockMedium, 1,3, 0,2)],
true
@@ -460,7 +466,7 @@ createObjectGroupsDeprecated(
);
Engine.SetProgress(75);
log("Creating deer...");
g_Map.log("Creating deer");
group = new SimpleGroup(
[new SimpleObject(oDeer, 5,7, 0,4)],
true, clFood
@@ -470,7 +476,7 @@ createObjectGroupsDeprecated(group, 0,
3 * numPlayers, 50
);
log("Creating berry bush...");
g_Map.log("Creating berry bush");
group = new SimpleGroup(
[new SimpleObject(oBerryBush, 5,7, 0,4)],
true, clFood
@@ -480,7 +486,7 @@ createObjectGroupsDeprecated(group, 0,
randIntInclusive(1, 4) * numPlayers + 2, 50
);
log("Creating rabbit...");
g_Map.log("Creating rabbit");
group = new SimpleGroup(
[new SimpleObject(oRabbit, 2,3, 0,2)],
true, clFood
@@ -497,7 +503,7 @@ createStragglerTrees(
clForest,
stragglerTrees);
log("Creating small grass tufts...");
g_Map.log("Creating small grass tufts");
var planetm = 1;
group = new SimpleGroup(
@@ -509,7 +515,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(90);
log("Creating large grass tufts...");
g_Map.log("Creating large grass tufts");
group = new SimpleGroup(
[new SimpleObject(aGrass, 2,4, 0,1.8, -Math.PI / 8, Math.PI / 8), new SimpleObject(aGrassShort, 3,6, 1.2,2.5, -Math.PI / 8, Math.PI / 8)]
);
@@ -519,7 +525,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(95);
log("Creating bushes...");
g_Map.log("Creating bushes");
group = new SimpleGroup(
[new SimpleObject(aBushMedium, 1,2, 0,2), new SimpleObject(aBushSmall, 2,4, 0,2)]
);
@@ -74,14 +74,14 @@ placePlayerBases({
Engine.SetProgress(20);
log("Creating bumps...");
g_Map.log("Creating bumps");
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(4, 6)), Math.floor(scaleByMapSize(2, 5)), 0.5),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetBump, 2),
avoidClasses(clPlayer, 13),
scaleByMapSize(300, 800));
log("Creating forests...");
g_Map.log("Creating forests");
var [forestTrees, stragglerTrees] = getTreeCounts(220, 1000, 0.65);
var types = [[[tForestFloor, tGrass, pForest], [tForestFloor, pForest]]];
var size = forestTrees / (scaleByMapSize(2,8) * numPlayers);
@@ -97,7 +97,7 @@ for (let type of types)
num);
Engine.SetProgress(50);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createLayeredPatches(
[scaleByMapSize(5, 48), scaleByMapSize(6, 84), scaleByMapSize(8, 128)],
[[tGrass,tGrassA,tGrassC],[tGrass,tGrassA,tGrassC], [tGrass,tGrassA,tGrassC]],
@@ -106,7 +106,7 @@ createLayeredPatches(
scaleByMapSize(50, 70),
clDirt);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createLayeredPatches(
[scaleByMapSize(5, 32), scaleByMapSize(6, 48), scaleByMapSize(7, 80)],
[tGrassD ,tDirt],
@@ -117,7 +117,7 @@ createLayeredPatches(
Engine.SetProgress(55);
log("Creating big patches...");
g_Map.log("Creating big patches");
createLayeredPatches(
[scaleByMapSize(10, 60), scaleByMapSize(15, 90), scaleByMapSize(20, 120)],
[tGrassB ,tGrassA],
@@ -128,21 +128,21 @@ createLayeredPatches(
Engine.SetProgress(55);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
scaleByMapSize(1,4), 100
);
log("Creating small stone quarries...");
g_Map.log("Creating small stone quarries");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
scaleByMapSize(1,4), 100
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clHill, 1),
@@ -151,7 +151,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(65);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockMedium, 1,3, 0,1)],
true
@@ -162,7 +162,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(16, 262), 50
);
log("Creating large decorative rocks...");
g_Map.log("Creating large decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockLarge, 1,2, 0,1), new SimpleObject(aRockMedium, 1,3, 0,2)],
true
@@ -175,7 +175,7 @@ createObjectGroupsDeprecated(
Engine.SetProgress(70);
log("Creating rabbits...");
g_Map.log("Creating rabbits");
group = new SimpleGroup(
[new SimpleObject(oRabbit, 5,7, 0,4)],
true, clFood
@@ -185,7 +185,7 @@ createObjectGroupsDeprecated(group, 0,
6 * numPlayers, 50
);
log("Creating berry bush...");
g_Map.log("Creating berry bush");
group = new SimpleGroup(
[new SimpleObject(oBerryBush, 5,7, 0,4)],
true, clFood
@@ -197,7 +197,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(75);
log("Creating sheep...");
g_Map.log("Creating sheep");
group = new SimpleGroup(
[new SimpleObject(oSheep, 2,3, 0,2)],
true, clFood
@@ -215,7 +215,7 @@ createStragglerTrees(
clForest,
stragglerTrees);
log("Creating large grass tufts...");
g_Map.log("Creating large grass tufts");
group = new SimpleGroup(
[new SimpleObject(aGrass, 2,4, 0,1.8, -Math.PI / 8, Math.PI / 8), new SimpleObject(aGrassShort, 3,6, 1.2,2.5, -Math.PI / 8, Math.PI / 8)]
);
@@ -226,7 +226,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(95);
log("Creating bushes...");
g_Map.log("Creating bushes");
group = new SimpleGroup(
[new SimpleObject(aBushMedium, 1,2, 0,2), new SimpleObject(aBushSmall, 2,4, 0,2)]
);
@@ -65,7 +65,7 @@ var islandRadius = scaleByMapSize(22, 31);
var [playerIDs, playerPosition] = playerPlacementCircle(fractionToTiles(0.35));
log("Creating player islands...");
g_Map.log("Creating player islands");
for (let i = 0; i < numPlayers; ++i)
createArea(
new ChainPlacer(
@@ -78,7 +78,7 @@ for (let i = 0; i < numPlayers; ++i)
[Math.floor(islandRadius)]),
new SmoothElevationPainter(ELEVATION_SET, heightLand, 4));
log("Creating random islands...");
g_Map.log("Creating random islands");
createAreas(
new ChainPlacer(
Math.floor(scaleByMapSize(4, 8)),
@@ -154,7 +154,7 @@ createForests(
forestTrees);
Engine.SetProgress(50);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[[tMainTerrain,tTier1Terrain],[tTier1Terrain,tTier2Terrain], [tTier2Terrain,tTier3Terrain]],
@@ -163,7 +163,7 @@ createLayeredPatches(
scaleByMapSize(15, 45),
clDirt);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createPatches(
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
tTier4Terrain,
@@ -172,7 +172,7 @@ createPatches(
clDirt);
Engine.SetProgress(55);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createMines(
[
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
@@ -182,7 +182,7 @@ createMines(
clRock
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createMines(
[
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
@@ -93,7 +93,6 @@ placePlayerBases({
});
Engine.SetProgress(20);
log("Creating hills...");
createHills(
[tPrimary, tCliff, tHill],
avoidClasses(
@@ -106,7 +105,7 @@ createHills(
Engine.SetProgress(30);
log("Creating lakes...");
g_Map.log("Creating lakes");
createAreas(
new ChainPlacer(
1,
@@ -123,7 +122,6 @@ createAreas(
Engine.SetProgress(45);
log("Creating bumps...");
createBumps(avoidClasses(clPlayer, 6, clWater, 2), scaleByMapSize(30, 300), 1, 8, 4, 0, 3);
paintTerrainBasedOnHeight(4, 15, 0, tCliff);
@@ -141,7 +139,7 @@ createForests(
forestTrees);
Engine.SetProgress(60);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[[tDirt,tHalfSnow], [tHalfSnow,tSnowLimited]],
@@ -155,7 +153,7 @@ createLayeredPatches(
scaleByMapSize(15, 45),
clDirt);
log("Creating shrubs...");
g_Map.log("Creating shrubs");
createPatches(
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
tSecondary,
@@ -168,7 +166,7 @@ createPatches(
scaleByMapSize(15, 45),
clDirt);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createPatches(
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
tSecondary,
@@ -182,7 +180,7 @@ createPatches(
clDirt);
Engine.SetProgress(65);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createMines(
[
[new SimpleObject(oStoneSmall, 0, 2, 0, 4), new SimpleObject(oStoneLarge, 1, 1, 0, 4)],
@@ -196,7 +194,7 @@ createMines(
clHill, 1),
clRock);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createMines(
[
[new SimpleObject(oMetalLarge, 1, 1, 0, 4)]
@@ -69,7 +69,7 @@ var clFood = g_Map.createTileClass();
var clBaseResource = g_Map.createTileClass();
var clHillDeco = g_Map.createTileClass();
log("Creating the central dip...");
g_Map.log("Creating the central dip");
createArea(
new ClumpPlacer(diskArea(fractionToTiles(0.42)), 0.94, 0.05, 0.1, mapCenter),
[
@@ -158,7 +158,7 @@ placePlayerBases({
// No decoratives
});
log("Marking player territory larger than the city patch...");
g_Map.log("Marking player territory");
for (let i = 0; i < numPlayers; ++i)
createArea(
new ClumpPlacer(250, 0.95, 0.3, 0.1, playerPosition[i]),
@@ -166,7 +166,7 @@ for (let i = 0; i < numPlayers; ++i)
Engine.SetProgress(30);
log("Creating hills...");
g_Map.log("Creating hills");
for (let size of [scaleByMapSize(50, 800), scaleByMapSize(50, 400), scaleByMapSize(10, 30), scaleByMapSize(10, 30)])
{
let mountains = createAreas(
@@ -203,7 +203,7 @@ for (let size of [scaleByMapSize(50, 800), scaleByMapSize(50, 400), scaleByMapSi
if (size > 150 && ravine.length)
{
log("Placing huts in ravines...");
g_Map.log("Placing huts in ravines");
createObjectGroupsByAreasDeprecated(
new RandomGroup(
[
@@ -293,7 +293,7 @@ for (var ix = 0; ix < mapSize; ix++)
Engine.SetProgress(60);
log("Creating forests...");
g_Map.log("Creating forests");
var [forestTrees, stragglerTrees] = getTreeCounts(400, 6000, 0.8);
var [forestTreesJoin, forestTrees] = getTreeCounts(forestTrees, forestTrees, 0.25);
@@ -326,7 +326,7 @@ createAreasInAreas(
Engine.SetProgress(70);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)])
createAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -334,7 +334,7 @@ for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8
avoidClasses(clForest, 0, clHill, 2, clPlayer, 5),
scaleByMapSize(15, 45));
log("Creating chopped forest patches...");
g_Map.log("Creating chopped forest patches");
for (let size of [scaleByMapSize(20, 120)])
createAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -344,7 +344,7 @@ for (let size of [scaleByMapSize(20, 120)])
Engine.SetProgress(75);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
var group = new SimpleGroup([new SimpleObject(oStoneSmall, 1,2, 0,4), new SimpleObject(oStoneLarge, 0,1, 0,4)], true, clRock);
createObjectGroupsByAreasDeprecated(group, 0,
[avoidClasses(clHill, 4, clForest, 2, clPlayer, 20, clRock, 10)],
@@ -352,7 +352,7 @@ createObjectGroupsByAreasDeprecated(group, 0,
[explorableArea]
);
log("Creating small stone mines...");
g_Map.log("Creating small stone mines");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroupsByAreasDeprecated(group, 0,
[avoidClasses(clHill, 4, clForest, 2, clPlayer, 20, clRock, 10)],
@@ -360,7 +360,7 @@ createObjectGroupsByAreasDeprecated(group, 0,
[explorableArea]
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalSmall, 1,2, 0,4), new SimpleObject(oMetalLarge, 0,1, 0,4)], true, clMetal);
createObjectGroupsByAreasDeprecated(group, 0,
[avoidClasses(clHill, 4, clForest, 2, clPlayer, 20, clMetal, 10, clRock, 5)],
@@ -370,7 +370,7 @@ createObjectGroupsByAreasDeprecated(group, 0,
Engine.SetProgress(80);
log("Creating wildlife...");
g_Map.log("Creating wildlife");
group = new SimpleGroup(
[new SimpleObject(oDeer, 5,7, 0,4)],
true, clFood
@@ -403,7 +403,7 @@ createObjectGroupsByAreasDeprecated(group, 0,
Engine.SetProgress(85);
log("Creating berry bush...");
g_Map.log("Creating berry bush");
group = new SimpleGroup(
[new SimpleObject(oBerryBush, 5,7, 0,4)],
true, clFood
@@ -413,7 +413,7 @@ createObjectGroupsDeprecated(group, 0,
randIntInclusive(3, 12) * numPlayers + 2, 50
);
log("Creating decorative props...");
g_Map.log("Creating decorative props");
group = new SimpleGroup(
[
new SimpleObject(aWoodA, 1,2, 0,1),
@@ -433,7 +433,7 @@ createObjectGroupsByAreasDeprecated(
Engine.SetProgress(90);
log("Creating straggler trees...");
g_Map.log("Creating straggler trees");
var types = [oOak, oOakLarge, oPine, oAleppoPine];
var num = Math.floor(stragglerTrees / types.length);
for (let type of types)
@@ -446,7 +446,7 @@ for (let type of types)
Engine.SetProgress(95);
log("Creating grass tufts...");
g_Map.log("Creating grass tufts");
group = new SimpleGroup(
[new SimpleObject(aGrassLarge, 1,2, 0,1, -Math.PI / 8, Math.PI / 8)]
);
@@ -95,7 +95,7 @@ createForests(
Engine.SetProgress(40);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[tGrassDirt,tDirt],
@@ -104,7 +104,7 @@ createLayeredPatches(
scaleByMapSize(15, 45),
clDirt);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createLayeredPatches(
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
[tGrass2,tGrassPatch],
@@ -115,7 +115,7 @@ createLayeredPatches(
Engine.SetProgress(50);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createMines(
[
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
@@ -124,7 +124,7 @@ createMines(
avoidClasses(clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clHill, 2),
clRock);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createMines(
[
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
@@ -176,7 +176,7 @@ createFood(
avoidClasses(clForest, 0, clPlayer, 20, clHill, 1, clFood, 10),
clFood);
log("Creating food treasures...");
g_Map.log("Creating food treasures");
var group = new SimpleGroup(
[new SimpleObject(oFoodTreasure, 2,3, 0,2)],
true, clTreasure
@@ -186,7 +186,7 @@ createObjectGroupsDeprecated(group, 0,
3 * numPlayers, 50
);
log("Creating food treasures...");
g_Map.log("Creating food treasures");
group = new SimpleGroup(
[new SimpleObject(oWoodTreasure, 2,3, 0,2)],
true, clTreasure
@@ -98,7 +98,6 @@ Engine.SetProgress(5);
// - Restart the loop if start positions are invalid or two players are to close to each other
var goodStartPositionsFound = false;
var minDistBetweenPlayers = 16 + mapSize / 16; // Don't set this higher than 25 for tiny maps! It will take forever with 8 players!
var enoughTiles = false;
var tries = 0;
var lowerHeightLimit = textueByHeight[3].upperHeightLimit;
var upperHeightLimit = textueByHeight[6].upperHeightLimit;
@@ -106,7 +105,7 @@ var upperHeightLimit = textueByHeight[6].upperHeightLimit;
while (!goodStartPositionsFound)
{
tries++;
log("Starting giant while loop try " + tries);
g_Map.log("Starting giant while loop try " + tries);
// Generate reliefmap
var myReliefmap = clone(g_Map.height);
@@ -192,16 +191,8 @@ while (!goodStartPositionsFound)
possibleStartPositions = clone(possibleStartPositionsTemp);
if(possibleStartPositions.length > numPlayers)
enoughTiles = true;
else
{
enoughTiles = false;
log("possibleStartPositions.length < numPlayers, possibleStartPositions.length = " + possibleStartPositions.length + ", numPlayers = " + numPlayers);
}
// Find a good start position derivation
if (enoughTiles)
if (possibleStartPositions.length > numPlayers)
{
// Get some random start location derivations. NOTE: Iterating over all possible derivations is just too much (valid points * numPlayers)
var maxTries = 100000;
@@ -242,16 +233,16 @@ while (!goodStartPositionsFound)
if (maxMinDist > minDistBetweenPlayers)
{
goodStartPositionsFound = true;
log("Exiting giant while loop after " + tries + " tries with a minimum player distance of " + maxMinDist);
g_Map.log("Exiting giant while loop after " + tries + " tries with a minimum player distance of " + maxMinDist);
}
else
log("maxMinDist <= " + minDistBetweenPlayers + ", maxMinDist = " + maxMinDist);
g_Map.log("maxMinDist <= " + minDistBetweenPlayers + ", maxMinDist = " + maxMinDist);
}
}
Engine.SetProgress(60);
log("Painting terrain by height and add props...");
g_Map.log("Painting terrain by height and add props");
var propDensity = 1; // 1 means as determined in the loop, less for large maps as set below
if (mapSize > 500)
propDensity = 1/4;
@@ -383,7 +374,7 @@ if (isNomad())
placePlayersNomad(g_Map.createTileClass(), new HeightConstraint(lowerHeightLimit, upperHeightLimit));
else
{
log("Placing players and starting resources...");
g_Map.log("Placing players and starting resources");
let playerIDs = sortAllPlayers();
let resourceDistance = 8;
@@ -91,14 +91,14 @@ placePlayerBases({
});
Engine.SetProgress(15);
log("Creating bumps...");
g_Map.log("Creating bumps");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 50), 0.6, 0.1, 1),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetBump1, 2),
avoidClasses(clPlayer, 13),
scaleByMapSize(300, 800));
log("Creating hills...");
g_Map.log("Creating hills");
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(4, 6)), Math.floor(scaleByMapSize(16, 40)), 0.5),
[
@@ -109,7 +109,7 @@ createAreas(
avoidClasses(clPlayer, 20, clHill, 15, clWater, 0),
scaleByMapSize(1, 4) * numPlayers * 3);
log("Creating marshes...");
g_Map.log("Creating marshes");
for (let i = 0; i < 2; ++i)
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(6, 12)), Math.floor(scaleByMapSize(15, 60)), 0.8),
@@ -121,7 +121,7 @@ for (let i = 0; i < 2; ++i)
avoidClasses(clPlayer, 25, clWater, Math.round(scaleByMapSize(7, 16) * randFloat(0.8, 1.35))),
scaleByMapSize(4, 20));
log("Creating reeds...");
g_Map.log("Creating reeds");
createObjectGroupsDeprecated(
new SimpleGroup(
[
@@ -136,14 +136,14 @@ createObjectGroupsDeprecated(
100);
Engine.SetProgress(40);
log("Creating bumps...");
g_Map.log("Creating bumps");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetBump2, 2),
stayClasses(clWater, 2),
scaleByMapSize(50, 100));
log("Creating mud patches...");
g_Map.log("Creating mud patches");
for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)])
createAreas(
new ChainPlacer(2, Math.floor(scaleByMapSize(3, 6)), size, 1),
@@ -155,7 +155,7 @@ for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8,
scaleByMapSize(15, 45));
Engine.SetProgress(50);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createObjectGroupsDeprecated(
new SimpleGroup(
[
@@ -176,7 +176,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(4, 16),
100);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oMetalLarge, 1, 1, 0, 4)], true, clMetal),
0,
@@ -185,7 +185,7 @@ createObjectGroupsDeprecated(
100);
Engine.SetProgress(60);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(aRockMedium, 1, 3, 0, 1)], true),
0,
@@ -194,7 +194,7 @@ createObjectGroupsDeprecated(
50);
Engine.SetProgress(65);
log("Creating large decorative rocks...");
g_Map.log("Creating large decorative rocks");
createObjectGroupsDeprecated(
new SimpleGroup(
[
@@ -208,7 +208,7 @@ createObjectGroupsDeprecated(
50);
Engine.SetProgress(70);
log("Creating lions...");
g_Map.log("Creating lions");
createObjectGroupsDeprecated(
new SimpleGroup(
[
@@ -222,7 +222,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(4, 12),
50);
log("Creating zebras...");
g_Map.log("Creating zebras");
createObjectGroupsDeprecated(
new SimpleGroup(
[new SimpleObject(oZebra, 4, 6, 0, 4)],
@@ -233,7 +233,7 @@ createObjectGroupsDeprecated(
3 * numPlayers,
50);
log("Creating wildebeest...");
g_Map.log("Creating wildebeest");
createObjectGroupsDeprecated(
new SimpleGroup(
[new SimpleObject(oWildebeest, 2, 4, 0, 4)],
@@ -244,7 +244,7 @@ createObjectGroupsDeprecated(
3 * numPlayers,
50);
log("Creating crocodiles...");
g_Map.log("Creating crocodiles");
createObjectGroupsDeprecated(
new SimpleGroup(
[new SimpleObject(oCrocodile, 2, 3, 0, 4)],
@@ -255,7 +255,7 @@ createObjectGroupsDeprecated(
5 * numPlayers,
200);
log("Creating gazelles...");
g_Map.log("Creating gazelles");
createObjectGroupsDeprecated(
new SimpleGroup(
[new SimpleObject(oGazelle, 4, 6, 0, 4)],
@@ -267,7 +267,7 @@ createObjectGroupsDeprecated(
50);
Engine.SetProgress(75);
log("Creating rabbits...");
g_Map.log("Creating rabbits");
createObjectGroupsDeprecated(
new SimpleGroup(
[new SimpleObject(oRabbit, 6, 8, 0, 2)],
@@ -278,7 +278,7 @@ createObjectGroupsDeprecated(
6 * numPlayers,
50);
log("Creating rhinos...");
g_Map.log("Creating rhinos");
createObjectGroupsDeprecated(
new SimpleGroup(
[new SimpleObject(oRhino, 1, 1, 0, 2)],
@@ -289,7 +289,7 @@ createObjectGroupsDeprecated(
3 * numPlayers,
50);
log("Creating elephants...");
g_Map.log("Creating elephants");
createObjectGroupsDeprecated(
new SimpleGroup(
[new SimpleObject(oElephant, 2, 3, 0, 4), new SimpleObject(oElephantInfant, 1, 1, 0, 4)],
@@ -300,7 +300,7 @@ createObjectGroupsDeprecated(
3 * numPlayers,
50);
log("Creating berry bushes...");
g_Map.log("Creating berry bushes");
createObjectGroupsDeprecated(
new SimpleGroup(
[new SimpleObject(oBerryBush, 5, 7, 0, 4)],
@@ -319,7 +319,7 @@ createStragglerTrees(
scaleByMapSize(60, 500));
Engine.SetProgress(85);
log("Creating small grass tufts...");
g_Map.log("Creating small grass tufts");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(aGrassShort, 1, 2, 0, 1, -Math.PI / 8, Math.PI / 8)]),
0,
@@ -327,7 +327,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(13, 200));
Engine.SetProgress(90);
log("Creating large grass tufts...");
g_Map.log("Creating large grass tufts");
createObjectGroupsDeprecated(
new SimpleGroup([
new SimpleObject(aGrass, 2, 4, 0, 1.8, -Math.PI / 8, Math.PI / 8),
@@ -338,7 +338,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(13, 200));
Engine.SetProgress(95);
log("Creating bushes...");
g_Map.log("Creating bushes");
createObjectGroupsDeprecated(
new SimpleGroup(
[
@@ -350,7 +350,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(13, 200),
50);
log("Creating flowering shrubs...");
g_Map.log("Creating flowering shrubs");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(aShrub, 1, 1, 0, 2)]),
0,
@@ -358,7 +358,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(13, 200),
50);
log("Creating decorative palms...");
g_Map.log("Creating decorative palms");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(aPalm, 1, 3, 0, 2)]),
0,
@@ -366,7 +366,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(13, 200),
50);
log("Creating shrubs,flowers and other decorations...");
g_Map.log("Creating shrubs,flowers and other decorations");
createObjectGroupsDeprecated(
new SimpleGroup(
[
@@ -228,12 +228,12 @@ let heightSeaGround = -MIN_HEIGHT + heightRange.min + averageWaterCoverage * (he
let heightSeaGroundAdjusted = heightSeaGround + MIN_HEIGHT; // Water height in RMGEN
setWaterHeight(heightSeaGround);
log("Generating terrain using diamon-square...");
g_Map.log("Generating terrain using diamon-square");
let medH = (heightRange.min + heightRange.max) / 2;
let initialHeightmap = [[medH, medH], [medH, medH]];
setBaseTerrainDiamondSquare(heightRange.min, heightRange.max, initialHeightmap, 0.8);
log("Apply erosion...");
g_Map.log("Apply erosion");
for (let i = 0; i < 5; ++i)
splashErodeMap(0.1);
@@ -256,7 +256,7 @@ let heighLimits = [
let playerHeight = (heighLimits[4] + heighLimits[5]) / 2; // Average player height
log("Determining height-dependent biome...");
g_Map.log("Determining height-dependent biome");
// Texture and actor presets
let myBiome = [];
myBiome.push({ // 0 Deep water
@@ -318,18 +318,18 @@ myBiome.push({ // 10 Hilltop
let [playerIDs, playerPosition] = sortPlayersByLocation(getStartLocationsByHeightmap({ "min": heighLimits[4], "max": heighLimits[5] }, 1000, 30));
Engine.SetProgress(30);
log("Smooth player locations...");
g_Map.log("Smooth player locations");
for (let p = 0; p < playerIDs.length; ++p)
rectangularSmoothToHeight(playerPosition[p], 35, 35, playerHeight, 0.7);
log("Creating paths...");
g_Map.log("Creating paths");
let tchm = getTileCenteredHeightmap();
let clPath = g_Map.createTileClass();
for (let i = 0; i < playerPosition.length; ++i)
placeRandomPathToHeight(playerPosition[i], playerPosition[(i + 1) % playerPosition.length], playerHeight, clPath, tPath, 4, 4, 0.08, g_Map.height);
Engine.SetProgress(45);
log("Determining resource locations...");
g_Map.log("Determining resource locations");
let avoidPoints = playerPosition.map(pos => pos.clone());
for (let i = 0; i < avoidPoints.length; ++i)
avoidPoints[i].dist = 30;
@@ -382,7 +382,7 @@ for (let h = 0; h < heighLimits.length; ++h)
}
}
log("Painting areas by height and slope...");
g_Map.log("Painting areas by height and slope");
for (let h = 0; h < heighLimits.length; ++h)
for (let point of areas[h])
{
@@ -408,7 +408,7 @@ for (let h = 0; h < heighLimits.length; ++h)
}
Engine.SetProgress(80);
log("Placing players...");
g_Map.log("Placing players");
if (isNomad())
placePlayersNomad(g_Map.createTileClass(), new HeightConstraint(heighLimits[4], heighLimits[5]));
else
@@ -418,7 +418,7 @@ else
placeStartLocationResources(playerPosition[p]);
}
log("Placing resources, farmsteads, groves and camps...");
g_Map.log("Placing resources, farmsteads, groves and camps");
for (let i = 0; i < resourceSpots.length; ++i)
{
let pos = new Vector2D(resourceSpots[i].x, resourceSpots[i].y);
@@ -65,7 +65,7 @@ var playerHillRadius = defaultPlayerBaseRadius() / (isNomad() ? 1.5 : 1);
var [playerIDs, playerPosition, playerAngle] = playerPlacementCircle(fractionToTiles(0.35));
log("Creating player hills and ramps...");
g_Map.log("Creating player hills and ramps");
for (let i = 0; i < numPlayers; ++i)
{
createArea(
@@ -119,7 +119,7 @@ placePlayerBases({
});
Engine.SetProgress(10);
log("Creating lakes...");
g_Map.log("Creating lakes");
var numLakes = Math.round(scaleByMapSize(1,4) * numPlayers);
var waterAreas = createAreas(
new ClumpPlacer(scaleByMapSize(100, 250), 0.8, 0.1, 10),
@@ -133,7 +133,7 @@ var waterAreas = createAreas(
);
Engine.SetProgress(15);
log("Creating reeds...");
g_Map.log("Creating reeds");
var group = new SimpleGroup(
[new SimpleObject(aReeds, 5,10, 0,4), new SimpleObject(aLillies, 0,1, 0,4)], true
);
@@ -144,7 +144,7 @@ createObjectGroupsByAreasDeprecated(group, 0,
);
Engine.SetProgress(20);
log("Creating fish...");
g_Map.log("Creating fish");
createObjectGroupsByAreasDeprecated(
new SimpleGroup(
[new SimpleObject(oFish, 1,1, 0,1)],
@@ -161,7 +161,6 @@ Engine.SetProgress(25);
createBumps(avoidClasses(clWater, 2, clPlayer, 0));
Engine.SetProgress(30);
log("Creating hills...");
createHills([tCliff, tCliff, tHill], avoidClasses(clPlayer, 2, clWater, 5, clHill, 15), clHill, scaleByMapSize(1, 4) * numPlayers);
Engine.SetProgress(35);
@@ -173,7 +172,7 @@ createForests(
forestTrees);
Engine.SetProgress(40);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[[tGrass,tGrassA],[tGrassA,tGrassB], [tGrassB,tGrassC]],
@@ -183,7 +182,7 @@ createLayeredPatches(
clDirt);
Engine.SetProgress(45);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createLayeredPatches(
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
[tGrassPatchBlend, tGrassPatch],
@@ -193,7 +192,7 @@ createLayeredPatches(
clDirt);
Engine.SetProgress(50);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createMines(
[
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
@@ -203,7 +202,7 @@ createMines(
clRock);
Engine.SetProgress(55);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createMines(
[
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
+11 -11
View File
@@ -64,7 +64,7 @@ var playerCanyonRadius = scaleByMapSize(18, 32);
var [playerIDs, playerPosition] = playerPlacementCircle(fractionToTiles(0.35));
log("Reserving space for the players, their initial forests and some less space therein without trees...");
g_Map.log("Reserving space for the players, their initial forests and some less space therein without trees");
for (let i = 0; i < numPlayers; ++i)
for (let j = 1; j <= 2; ++j)
createArea(
@@ -75,7 +75,7 @@ for (let i = 0; i < numPlayers; ++i)
new TileClassPainter(j == 1 || isNomad() ? clLand : clPlayer)
]);
log("Creating center area...");
g_Map.log("Creating center area");
createArea(
new ClumpPlacer(diskArea(fractionToTiles(0.16)), 0.7, 0.1, 10, mapCenter),
[
@@ -88,7 +88,7 @@ createArea(
new ClumpPlacer(150, 0.6, 0.3, 10, mapCenter),
new TileClassPainter(clHill));
log("Creating hills...");
g_Map.log("Creating hills");
for (let i = 0; i < scaleByMapSize(9, 16); ++i)
createArea(
new PathPlacer(
@@ -157,9 +157,9 @@ for (let g = 0; g < scaleByMapSize(5, 30); ++g)
}
}
g_Map.log("Creating paths from players to neighbor and center");
for (let i = 0; i < numPlayers; ++i)
{
log("Creating path from player to center and to neighbor...");
let neighbor = i + 1 < numPlayers ? i + 1 : 0;
for (let position of [playerPosition[neighbor], mapCenter])
createArea(
@@ -179,7 +179,7 @@ for (let i = 0; i < numPlayers; ++i)
]);
}
log("Painting center place...");
g_Map.log("Painting center place");
createArea(
new ClumpPlacer(150, 0.6, 0.3, 10, mapCenter),
new LayeredPainter([tRoad, tRoad], [1]));
@@ -233,7 +233,7 @@ createForests(
Engine.SetProgress(50);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[[tMainTerrain,tTier1Terrain],[tTier1Terrain,tTier2Terrain], [tTier2Terrain,tTier3Terrain]],
@@ -242,7 +242,7 @@ createLayeredPatches(
scaleByMapSize(15, 45),
clDirt);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createPatches(
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
tTier4Terrain,
@@ -250,7 +250,7 @@ createPatches(
scaleByMapSize(15, 45),
clDirt);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createMines(
[
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
@@ -259,7 +259,7 @@ createMines(
[avoidClasses(clForest, 1, clPlayer, 3, clRock, 10, clHill, 1, clHill2, 1), stayClasses(clLand, 2)],
clRock);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createMines(
[
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
@@ -292,7 +292,7 @@ createDecoration(
],
avoidClasses(clForest, 0, clPlayer, 0, clHill, 0));
log("Creating actor trees...");
g_Map.log("Creating actor trees");
var group = new SimpleGroup(
[new SimpleObject(aTree, 1,1, 0,1)],
true
@@ -335,7 +335,7 @@ createStragglerTrees(
clForest,
stragglerTrees);
log("Creating treasures...");
g_Map.log("Creating treasures");
for (let i = 0; i < randIntInclusive(3, 8); ++i)
for (let template of [oFoodTreasure, oWoodTreasure])
g_Map.placeEntityPassable(
@@ -59,7 +59,7 @@ var clFood = g_Map.createTileClass();
var clBaseResource = g_Map.createTileClass();
var clLand = g_Map.createTileClass();
log("Creating continent...");
g_Map.log("Creating continent");
createArea(
new ChainPlacer(
2,
@@ -76,7 +76,7 @@ createArea(
var [playerIDs, playerPosition] = playerPlacementCircle(fractionToTiles(0.25));
log("Ensuring initial player land...");
g_Map.log("Ensuring initial player land");
for (let i = 0; i < numPlayers; ++i)
createArea(
new ChainPlacer(
@@ -143,7 +143,7 @@ createForests(
Engine.SetProgress(50);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[[tMainTerrain,tTier1Terrain],[tTier1Terrain,tTier2Terrain], [tTier2Terrain,tTier3Terrain]],
@@ -152,7 +152,7 @@ createLayeredPatches(
scaleByMapSize(15, 45),
clDirt);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createPatches(
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
tTier4Terrain,
@@ -161,7 +161,7 @@ createPatches(
clDirt);
Engine.SetProgress(55);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createMines(
[
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
@@ -170,7 +170,7 @@ createMines(
[avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clHill, 1), stayClasses(clLand, 6)],
clRock);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createMines(
[
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
@@ -61,7 +61,7 @@ var clBaseResource = g_Map.createTileClass();
var clGrass = g_Map.createTileClass();
var clHill = g_Map.createTileClass();
log("Creating the main river");
g_Map.log("Creating the main river");
var riverAngle = randomAngle();
var riverWidth = scaleByMapSize(15, 70);
var riverStart = new Vector2D(mapCenter.x, 0).rotateAround(riverAngle, mapCenter);
@@ -71,13 +71,13 @@ createArea(
new PathPlacer(riverStart, riverEnd, riverWidth, 0.2, 15 * scaleByMapSize(1, 3), 0.04, 0.01),
new SmoothElevationPainter(ELEVATION_SET, heightSeaGround, 4));
log("Creating small puddles at the map border to ensure players being separated...");
g_Map.log("Creating small puddles at the map border to ensure players being separated");
for (let point of [riverStart, riverEnd])
createArea(
new ClumpPlacer(diskArea(riverWidth / 2), 0.95, 0.6, 10, point),
new SmoothElevationPainter(ELEVATION_SET, heightSeaGround, 4));
log("Creating passage connecting the two riversides...");
g_Map.log("Creating passage connecting the two riversides");
var passageStart = riverStart.rotateAround(Math.PI / 2, mapCenter);
var passageEnd = riverEnd.rotateAround(Math.PI / 2, mapCenter);
createArea(
@@ -143,7 +143,7 @@ if (randBool())
else
createMountains(tCliff, avoidClasses(clPlayer, 20, clForest, 1, clHill, 15, clWater, 3), clHill, scaleByMapSize(3, 15));
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[[tGrass,tGrassSand50],[tGrassSand50,tGrassSand25], [tGrassSand25,tGrass]],
@@ -154,7 +154,7 @@ createLayeredPatches(
Engine.SetProgress(55);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[tDirt3, tDirt2,[tDirt,tMainDirt], [tDirtCracks,tMainDirt]],
@@ -165,7 +165,7 @@ createLayeredPatches(
Engine.SetProgress(60);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createMines(
[
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
@@ -174,7 +174,7 @@ createMines(
avoidClasses(clForest, 4, clPlayer, 15, clRock, 10, clWater, 4, clHill, 4),
clRock);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createMines(
[
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
@@ -81,13 +81,13 @@ var nbBeaches = scaleByMapSize(2, 5);
var nbPassagesLevel1 = scaleByMapSize(4, 8);
var nbPassagesLevel2 = scaleByMapSize(2, 4);
log("Creating Corsica and Sardinia...");
g_Map.log("Creating Corsica and Sardinia");
var swapAngle = randBool() ? Math.PI / 2 : 0;
var islandLocations = [new Vector2D(0.05, 0.05), new Vector2D(0.95, 0.95)].map(v => v.mult(mapSize).rotateAround(-swapAngle, mapCenter));
for (let island = 0; island < 2; ++island)
{
log("Creating island area...");
g_Map.log("Creating island area");
createArea(
new ClumpPlacer(diskArea(radiusIsland), 1, 0.5, 10, islandLocations[island]),
[
@@ -96,7 +96,7 @@ for (let island = 0; island < 2; ++island)
new TileClassPainter(clIsland)
]);
log("Creating subislands...");
g_Map.log("Creating subislands");
for (let i = 0; i < nbSubIsland + 1; ++i)
{
let angle = Math.PI * (island + i / (nbSubIsland * 2)) + swapAngle;
@@ -110,7 +110,7 @@ for (let island = 0; island < 2; ++island)
]);
}
log("Creating creeks...");
g_Map.log("Creating creeks");
for (let i = 0; i < nbCreeks + 1; ++i)
{
let angle = Math.PI * (island + i * (1 / (nbCreeks * 2))) + swapAngle;
@@ -124,7 +124,7 @@ for (let island = 0; island < 2; ++island)
]);
}
log("Creating beaches...");
g_Map.log("Creating beaches");
for (let i = 0; i < nbBeaches + 1; ++i)
{
let angle = Math.PI * (island + (i / (nbBeaches * 2.5)) + 1 / (nbBeaches * 6) + randFloat(-1, 1) / (nbBeaches * 7)) + swapAngle;
@@ -145,17 +145,17 @@ for (let island = 0; island < 2; ++island)
});
}
log("Creating main relief...");
g_Map.log("Creating main relief");
createArea(
new ClumpPlacer(diskArea(radiusIsland), 1, 0.2, 10, islandLocations[island]),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetMainRelief, fractionToTiles(0.45)));
log("Creating first level plateau...");
g_Map.log("Creating first level plateau");
createArea(
new ClumpPlacer(diskArea(radiusLevel1), 0.95, 0.02, 10, islandLocations[island]),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetLevel1, 1));
log("Creating first level passages...");
g_Map.log("Creating first level passages");
for (let i = 0; i <= nbPassagesLevel1; ++i)
{
let angle = Math.PI * (i / 7 + 1 / 9 + island) + swapAngle;
@@ -171,7 +171,7 @@ for (let island = 0; island < 2; ++island)
if (mapSize > 150)
{
log("Creating second level plateau...");
g_Map.log("Creating second level plateau");
createArea(
new ClumpPlacer(diskArea(radiusLevel2), 0.98, 0.04, 10, islandLocations[island]),
[
@@ -179,7 +179,7 @@ for (let island = 0; island < 2; ++island)
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetLevel2, 1)
]);
log("Creating second level passages...");
g_Map.log("Creating second level passages");
for (let i = 0; i < nbPassagesLevel2; ++i)
{
let angle = Math.PI * (i / (2 * nbPassagesLevel2) + 1 / (4 * nbPassagesLevel2) + island) + swapAngle;
@@ -196,7 +196,7 @@ for (let island = 0; island < 2; ++island)
}
Engine.SetProgress(30);
log("Determining player locations...");
g_Map.log("Determining player locations");
var playerIDs = sortAllPlayers();
var playerPosition = [];
var playerAngle = [];
@@ -242,7 +242,7 @@ placePlayerBases({
});
Engine.SetProgress(40);
log("Creating bumps...");
g_Map.log("Creating bumps");
createAreas(
new ClumpPlacer(70, 0.6, 0.1, 4),
[new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetBumps, 3)],
@@ -253,7 +253,7 @@ createAreas(
scaleByMapSize(20, 100),
5);
log("Creating anti bumps...");
g_Map.log("Creating anti bumps");
createAreas(
new ClumpPlacer(120, 0.3, 0.1, 4),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetAntiBumps, 6),
@@ -261,10 +261,10 @@ createAreas(
scaleByMapSize(20, 100),
5);
log("Painting water...");
g_Map.log("Painting water");
paintTileClassBasedOnHeight(-Infinity, 0, Elevation_ExcludeMin_ExcludeMax, clWater);
log("Painting land...");
g_Map.log("Painting land");
for (let mapX = 0; mapX < mapSize; ++mapX)
for (let mapZ = 0; mapZ < mapSize; ++mapZ)
{
@@ -336,7 +336,7 @@ function getCosricaSardiniaTerrain(position)
Engine.SetProgress(65);
log("Creating mines...");
g_Map.log("Creating mines");
for (let mine of [eMetalMine, eStoneMine])
createObjectGroupsDeprecated(
new SimpleGroup(
@@ -360,7 +360,7 @@ for (let mine of [eMetalMine, eStoneMine])
scaleByMapSize(6, 25),
1000);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createAreas(
new ClumpPlacer(20, 0.3, 0.06, 0.5),
[
@@ -374,7 +374,7 @@ createAreas(
clCliffs, 1),
scaleByMapSize(10, 40));
log("Creating forests...");
g_Map.log("Creating forests");
createObjectGroupsDeprecated(
new SimpleGroup(
[
@@ -401,7 +401,7 @@ createObjectGroupsDeprecated(
Engine.SetProgress(75);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
createObjectGroupsDeprecated(
new SimpleGroup(
[
@@ -419,7 +419,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(16, 262),
50);
log("Creating large decorative rocks...");
g_Map.log("Creating large decorative rocks");
var rocksGroup = new SimpleGroup(
[
new SimpleObject(aLargeRock, 1, 2, 0, 1),
@@ -446,7 +446,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(100, 800),
500);
log("Creating decorative plants...");
g_Map.log("Creating decorative plants");
var plantGroups = [
new SimpleGroup(
[
@@ -475,7 +475,7 @@ for (let group of plantGroups)
Engine.SetProgress(80);
log("Creating animals...");
g_Map.log("Creating animals");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(ePig, 2,4, 0,3)]),
0,
@@ -486,7 +486,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(20, 100),
50);
log("Creating fish...");
g_Map.log("Creating fish");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(eFish, 1,2, 0,3)]),
0,
@@ -13,6 +13,7 @@ const tGrassShrubs = "medit_shrubs";
const tCliffShrubs = ["medit_cliff_aegean_shrubs", "medit_cliff_italia_grass","medit_cliff_italia"];
const tCliff = ["medit_cliff_italia", "medit_cliff_italia", "medit_cliff_italia_grass"];
const tForestFloor = "medit_forestfloor_a";
const tWater = "medit_sea_depths";
const oBeech = "gaia/flora_tree_euro_beech";
const oBerryBush = "gaia/flora_bush_berry";
@@ -88,7 +89,7 @@ var playerPosition = [];
function createCycladicArchipelagoIsland(position, tileClass, radius, coralRadius)
{
log("Creating deep ocean rocks...");
// Deep ocean rocks
createArea(
new ClumpPlacer(diskArea(radius + coralRadius), 0.7, 0.1, 10, position),
[
@@ -97,7 +98,7 @@ function createCycladicArchipelagoIsland(position, tileClass, radius, coralRadiu
],
avoidClasses(clCoral, 0, clPlayer, 0));
log("Creating island...");
// Island
areas.push(
createArea(
new ClumpPlacer(diskArea(radius), 0.7, 0.1, 10, position),
@@ -109,7 +110,7 @@ function createCycladicArchipelagoIsland(position, tileClass, radius, coralRadiu
avoidClasses(clPlayer, 0)));
}
log("Creating player islands...");
g_Map.log("Creating player islands");
for (let i = 0; i < islandCount; ++i)
{
let isPlayerIsland = numPlayers >= 6 || i == startingPlaces[numPlayers - 1][nPlayer];
@@ -121,7 +122,7 @@ for (let i = 0; i < islandCount; ++i)
createCycladicArchipelagoIsland(islandPosition[i], isPlayerIsland ? clPlayer : clIsland, islandRadius, scaleByMapSize(1, 5));
}
log("Creating central islands...");
g_Map.log("Creating central islands");
for (let position of centralIslandPosition)
createCycladicArchipelagoIsland(position, clIsland, centralIslandRadius, 2);
@@ -157,7 +158,7 @@ placePlayerBases({
});
Engine.SetProgress(20);
log("Creating bumps...");
g_Map.log("Creating bumps");
createAreasInAreas(
new ClumpPlacer(scaleByMapSize(20, 60), 0.3, 0.06, 1),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetBump, 3),
@@ -167,7 +168,7 @@ createAreasInAreas(
Engine.SetProgress(34);
log("Creating hills...");
g_Map.log("Creating hills");
createAreasInAreas(
new ClumpPlacer(scaleByMapSize(20, 150), 0.2, 0.1, 1),
[
@@ -183,7 +184,7 @@ Engine.SetProgress(38);
paintTileClassBasedOnHeight(-Infinity, 0, Elevation_ExcludeMin_ExcludeMax, clWater);
log("Creating forests...");
g_Map.log("Creating forests");
var forestTypes = [
[[tForestFloor, tGrass, pPalmForest], [tForestFloor, pPalmForest]],
[[tForestFloor, tGrass, pPineForest], [tForestFloor, pPineForest]],
@@ -204,7 +205,7 @@ for (let type of forestTypes)
areas);
Engine.SetProgress(42);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
createObjectGroupsByAreasDeprecated(group, 0,
[avoidClasses(clWater, 1, clForest, 1, clHill, 1, clPlayer, 5, clRock, 6)],
@@ -212,7 +213,7 @@ createObjectGroupsByAreasDeprecated(group, 0,
);
Engine.SetProgress(46);
log("Creating small stone mines...");
g_Map.log("Creating small stone mines");
var group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroupsByAreasDeprecated(group, 0,
[avoidClasses(clWater, 1, clForest, 1, clHill, 1, clPlayer, 5, clRock, 2)],
@@ -220,7 +221,7 @@ createObjectGroupsByAreasDeprecated(group, 0,
);
Engine.SetProgress(50);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroupsByAreasDeprecated(group, 0,
[avoidClasses(clWater, 1, clForest, 1, clHill, 1, clPlayer, 5, clMetal, 6, clRock, 6)],
@@ -228,7 +229,7 @@ createObjectGroupsByAreasDeprecated(group, 0,
);
Engine.SetProgress(54);
log("Creating shrub patches...");
g_Map.log("Creating shrub patches");
for (let size of [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5, 80)])
createAreasInAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -242,7 +243,7 @@ for (let size of [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5
areas);
Engine.SetProgress(58);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
for (let size of [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5, 80)])
createAreasInAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -256,7 +257,7 @@ for (let size of [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5
areas);
Engine.SetProgress(62);
log("Creating straggler trees...");
g_Map.log("Creating straggler trees");
for (let tree of [oCarob, oBeech, oLombardyPoplar, oLombardyPoplar, oPine])
createObjectGroupsByAreasDeprecated(
new SimpleGroup([new SimpleObject(tree, 1,1, 0,1)], true, clForest),
@@ -266,7 +267,7 @@ for (let tree of [oCarob, oBeech, oLombardyPoplar, oLombardyPoplar, oPine])
);
Engine.SetProgress(66);
log("Create straggler cypresses...");
g_Map.log("Create straggler cypresses");
group = new SimpleGroup(
[new SimpleObject(oCypress2, 1,3, 0,3), new SimpleObject(oCypress1, 0,2, 0,2)],
true
@@ -277,7 +278,7 @@ createObjectGroupsByAreasDeprecated(group, 0,
);
Engine.SetProgress(70);
log("Create straggler date palms...");
g_Map.log("Create straggler date palms");
group = new SimpleGroup(
[new SimpleObject(oDateS, 1,3, 0,3), new SimpleObject(oDateT, 0,2, 0,2)],
true
@@ -288,7 +289,7 @@ createObjectGroupsByAreasDeprecated(group, 0,
);
Engine.SetProgress(74);
log("Creating rocks...");
g_Map.log("Creating 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)]
@@ -299,7 +300,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(78);
log("Creating deer...");
g_Map.log("Creating deer");
group = new SimpleGroup(
[new SimpleObject(oDeer, 5,7, 0,4)],
true, clFood
@@ -310,7 +311,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(82);
log("Creating berry bushes...");
g_Map.log("Creating berry bushes");
group = new SimpleGroup([new SimpleObject(oBerryBush, 5,7, 0,3)], true, clFood);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clWater, 2, clForest, 1, clHill, 1, clCity, 10, clMetal, 6, clRock, 2, clFood, 8),
@@ -318,7 +319,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(86);
log("Creating Fish...");
g_Map.log("Creating Fish");
group = new SimpleGroup([new SimpleObject(oFish, 1,1, 0,3)], true, clFood);
createObjectGroupsDeprecated(group, 0,
[stayClasses(clWater,1),avoidClasses(clFood, 8)],
@@ -326,7 +327,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(90);
log("Creating Whales...");
g_Map.log("Creating Whales");
group = new SimpleGroup([new SimpleObject(oWhale, 1,1, 0,3)], true, clFood);
createObjectGroupsDeprecated(group, 0,
[stayClasses(clWater,1),avoidClasses(clFood, 8, clPlayer,4,clIsland,4)],
@@ -334,7 +335,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(94);
log("Creating shipwrecks...");
g_Map.log("Creating shipwrecks");
group = new SimpleGroup([new SimpleObject(oShipwreck, 1,1, 0,3)], true, clFood);
createObjectGroupsDeprecated(group, 0,
[stayClasses(clWater,1),avoidClasses(clFood, 8)],
@@ -342,7 +343,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(98);
log("Creating shipwreck debris...");
g_Map.log("Creating shipwreck debris");
group = new SimpleGroup([new SimpleObject(oShipDebris, 1,2, 0,4)], true, clFood);
createObjectGroupsDeprecated(group, 0,
[stayClasses(clWater,1),avoidClasses(clFood, 8)],
@@ -254,7 +254,7 @@ var fortressDanubiusSpikes = new Fortress(
var gallicCC = mapSize >= smallMapSize;
if (gallicCC)
{
log("Creating gallic villages...");
g_Map.log("Creating gallic villages");
let gaulCityRadius = 12;
let gaulCityBorderDistance = mapSize < mediumMapSize ? 10 : 18;
@@ -397,16 +397,14 @@ Engine.SetProgress(30);
paintTileClassBasedOnHeight(-Infinity, 0.7, Elevation_ExcludeMin_ExcludeMax, clWater);
log("Creating shores...");
g_Map.log("Creating shores");
paintTerrainBasedOnHeight(-Infinity, heightShore, 0, tWater);
paintTerrainBasedOnHeight(heightShore, heightLand, 0, tShore);
Engine.SetProgress(35);
log("Creating bumps...");
createBumps(avoidClasses(clPlayer, 6, clWater, 2, clPath, 1, clGauls, 1), scaleByMapSize(30, 300), 1, 8, 4, 0, 3);
Engine.SetProgress(40);
log("Creating hills...");
if (randBool())
createHills(
[tCliff, tCliff, tCliff],
@@ -431,7 +429,7 @@ createForests(
Engine.SetProgress(50);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[[tGrass, tGrass2],[tGrass2, tGrass3], [tGrass3, tGrass]],
@@ -442,7 +440,7 @@ createLayeredPatches(
Engine.SetProgress(55);
log("Creating islands...");
g_Map.log("Creating islands");
createAreas(
new ChainPlacer(Math.floor(scaleByMapSize(3, 4)), Math.floor(scaleByMapSize(4, 8)), Math.floor(scaleByMapSize(50, 80)), 0.5),
[
@@ -455,13 +453,12 @@ createAreas(
Engine.SetProgress(60);
log("Creating island bumps...");
createBumps(stayClasses(clIsland, 2), scaleByMapSize(50, 400), 1, 8, 4, 0, 3);
log("Paint seabed...");
g_Map.log("Painting seabed");
paintTerrainBasedOnHeight(-20, -3, 3, tSeaDepths);
log("Creating island metal mines...");
g_Map.log("Creating island metal mines");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oMetalLarge, 1, 1, 0, 4)], true, clMetal),
0,
@@ -469,7 +466,7 @@ createObjectGroupsDeprecated(
500,
1);
log("Creating island stone mines...");
g_Map.log("Creating island stone mines");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oStoneLarge, 1, 1, 0, 4)], true, clRock),
0,
@@ -478,7 +475,7 @@ createObjectGroupsDeprecated(
1);
Engine.SetProgress(65);
log("Creating island towers...");
g_Map.log("Creating island towers");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oTower, 1, 1, 0, 4)], true, clTower),
0,
@@ -486,7 +483,7 @@ createObjectGroupsDeprecated(
500,
1);
log("Creating island outposts...");
g_Map.log("Creating island outposts");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oOutpost, 1, 1, 0, 4)], true, clOutpost),
0,
@@ -494,7 +491,7 @@ createObjectGroupsDeprecated(
500,
1);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oMetalLarge, 1, 1, 0, 4)], true, clMetal),
0,
@@ -502,7 +499,7 @@ createObjectGroupsDeprecated(
500,
1);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oStoneLarge, 1, 1, 0, 4)], true, clRock),
0,
@@ -510,7 +507,7 @@ createObjectGroupsDeprecated(
500,
1);
log("Creating stone ruins...");
g_Map.log("Creating stone ruins");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oStoneRuins, 1, 1, 0, 4)], true, clRock),
0,
@@ -519,7 +516,7 @@ createObjectGroupsDeprecated(
1);
Engine.SetProgress(70);
log("Creating decoratives...");
g_Map.log("Creating decoratives");
for (let i = 0; i < 2; ++i)
createDecoration(
[
@@ -553,7 +550,7 @@ for (let i = 0; i < 2; ++i)
[stayClasses(clIsland, 4) , avoidClasses(clForest, 1, clRock, 4, clMetal, 4)]);
Engine.SetProgress(75);
log("Creating fish...");
g_Map.log("Creating fish");
createFood(
[
[new SimpleObject(oFish, 2, 3, 0, 2)]
@@ -566,7 +563,7 @@ createFood(
Engine.SetProgress(80);
log("Creating huntable animals...");
g_Map.log("Creating huntable animals");
createFood(
[
[new SimpleObject(oSheep, 5, 5, 0, 4)],
@@ -585,7 +582,7 @@ createFood(
avoidClasses(clIsland, 2, clFood, 10, clWater, 5, clPlayer, 16, clHill, 2, clGauls, 5, clPath, 1),
clFood);
log("Creating violent animals...");
g_Map.log("Creating violent animals");
if (!isNomad())
createFood(
[
@@ -603,7 +600,7 @@ if (!isNomad())
Engine.SetProgress(85);
log("Creating fruits...");
g_Map.log("Creating fruits");
createFood(
[
[new SimpleObject(oApple, 3, 5, 4, 7)],
@@ -632,7 +629,7 @@ createStragglerTrees(
Engine.SetProgress(95);
log("Creating animals on islands...");
g_Map.log("Creating animals on islands");
createFood(
[
[new SimpleObject(oSheep, 4, 6, 0, 4)],
@@ -649,7 +646,7 @@ createFood(
Engine.SetProgress(98);
log("Creating treasures...");
g_Map.log("Creating treasures");
for (let i = 0; i < randomTreasureCount; ++i)
createObjectGroupsDeprecated(
new SimpleGroup(
@@ -661,7 +658,7 @@ for (let i = 0; i < randomTreasureCount; ++i)
1,
50);
log("Creating gallic decoratives...");
g_Map.log("Creating gallic decoratives");
createDecoration(
[
[new SimpleObject(aBucket, 1, 1, 0, 1)],
@@ -681,7 +678,7 @@ createDecoration(
],
avoidClasses(clForest, 1, clPlayer, 10, clBaseResource, 5, clHill, 1, clFood, 1, clWater, 5, clRock, 4, clMetal, 4, clGauls, 5, clPath, 1));
log("Creating spawn points for ships...");
g_Map.log("Creating spawn points for ships");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(triggerPointShipSpawn, 1, 1, 0, 0)], true, clShip),
0,
@@ -689,7 +686,7 @@ createObjectGroupsDeprecated(
10000,
1000);
log("Creating patrol points for ships...");
g_Map.log("Creating patrol points for ships");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(triggerPointShipPatrol, 1, 1, 0, 0)], true, clShipPatrol),
0,
@@ -697,7 +694,7 @@ createObjectGroupsDeprecated(
10000,
1000);
log("Creating ungarrison points for ships...");
g_Map.log("Creating ungarrison points for ships");
for (let i = 0; i < 2; ++i)
createObjectGroupsDeprecated(
new SimpleGroup(
@@ -712,12 +709,11 @@ for (let i = 0; i < 2; ++i)
20000,
1);
log("Creating patrol points for land attackers...");
clMiddle.add(mapCenter);
log("Creating triggerpoint to allow the triggerscript to determine the river direction...");
g_Map.log("Creating riverdirection triggerpoint");
g_Map.placeEntityAnywhere(triggerPointRiverDirection, 0, Vector2D.add(mapCenter, new Vector2D(0, 1).rotate(startAngle)), randomAngle());
g_Map.log("Creating patrol points for land attackers");
clMiddle.add(mapCenter);
for (let i = 0; i < 2; ++i)
{
createObjectGroupsDeprecated(
@@ -764,7 +760,7 @@ for (let i = 0; i < 2; ++i)
100);
}
log("Creating water logs...");
g_Map.log("Creating water logs");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(aWaterLog, 1, 1, 0, 0)], true, clWaterLog),
0,
@@ -776,7 +772,7 @@ placePlayersNomad(clPlayer, avoidClasses(clWater, 4, clMetal, 4, clRock, 4, clIs
if (randBool(2/3))
{
log("Setting day theme...");
g_Map.log("Setting day theme");
setSkySet("cumulus");
setSunColor(0.9, 0.8, 0.5);
@@ -793,7 +789,7 @@ if (randBool(2/3))
}
else
{
log("Setting night theme...");
g_Map.log("Setting night theme");
setSkySet("dark");
setSunColor(0.4, 0.9, 1.2);
@@ -103,7 +103,7 @@ placePlayerBases({
});
Engine.SetProgress(10);
log("Painting paths...");
g_Map.log("Painting paths");
var pathBlending = numPlayers <= 4;
for (let i = 0; i < numPlayers + (pathBlending ? 1 : 0); ++i)
for (let j = pathBlending ? 0 : i + 1; j < numPlayers + 1; ++j)
@@ -122,7 +122,7 @@ for (let i = 0; i < numPlayers + (pathBlending ? 1 : 0); ++i)
}
Engine.SetProgress(50);
log("Placing expansion resources...");
g_Map.log("Placing expansion resources");
for (let i = 0; i < numPlayers; ++i)
for (let rIndex = 0; rIndex < resourcePerPlayer.length; ++rIndex)
{
@@ -146,11 +146,11 @@ for (let i = 0; i < numPlayers; ++i)
}
Engine.SetProgress(60);
log("Placing temple...");
g_Map.log("Placing temple");
g_Map.placeEntityPassable(templateTemple, 0, mapCenter, randomAngle());
clBaseResource.add(mapCenter);
log("Creating central mountain...");
g_Map.log("Creating central mountain");
createArea(
new ClumpPlacer(Math.square(radiusEC), 1/2, 1/8, 1, mapCenter),
[
@@ -142,7 +142,7 @@ createForests(
forestTrees);
Engine.SetProgress(70);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[[tGrass,tGrassA], tGrassB, [tGrassB,tGrassC]],
@@ -151,7 +151,7 @@ createLayeredPatches(
scaleByMapSize(15, 45),
clDirt);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createPatches(
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
[tGrassPatchBlend, tGrassPatch],
@@ -161,7 +161,7 @@ createPatches(
clDirt);
Engine.SetProgress(80);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createMines(
[
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
@@ -170,7 +170,7 @@ createMines(
avoidClasses(clWater, 2, clForest, 1, clPlayer, 20, clRock, 10, clHill, 2),
clRock);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createMines(
[
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
@@ -78,7 +78,7 @@ var playerMountainSize = defaultPlayerBaseRadius();
var [playerIDs, playerPosition] = playerPlacementCircle(fractionToTiles(0.35));
log("Creating CC mountains...");
g_Map.log("Creating CC mountains");
if (!isNomad())
for (let i = 0; i < numPlayers; ++i)
{
@@ -137,7 +137,7 @@ Engine.SetProgress(15);
createVolcano(mapCenter, clHill, tHillVeryDark, undefined, false, ELEVATION_SET);
Engine.SetProgress(20);
log("Creating lakes...");
g_Map.log("Creating lakes");
createAreas(
new ChainPlacer(5, 6, Math.floor(scaleByMapSize(10, 14)), 0.1),
[
@@ -153,7 +153,7 @@ createBumps(avoidClasses(clPlayer, 0, clHill, 0), scaleByMapSize(50, 300), 1, 10
paintTileClassBasedOnHeight(10, 100, 0, clBumps);
Engine.SetProgress(30);
log("Creating hills...");
g_Map.log("Creating hills");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 150), 0.2, 0.1, 1),
[
@@ -165,7 +165,7 @@ createAreas(
scaleByMapSize(2, 8) * numPlayers);
Engine.SetProgress(35);
log("Creating forests...");
g_Map.log("Creating forests");
var [forestTrees, stragglerTrees] = getTreeCounts(1200, 3000, 0.7);
var types = [
[[tGrassB, tGrassA, pForestD], [tGrassB, pForestD]],
@@ -188,7 +188,7 @@ for (let type of types)
num);
Engine.SetProgress(40);
log("Creating hill patches...");
g_Map.log("Creating hill patches");
for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)])
for (let type of [[tHillMedium1, tHillDark], [tHillDark, tHillMedium2], [tHillMedium1, tHillMedium2]])
createAreas(
@@ -206,7 +206,7 @@ for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8
scaleByMapSize(20, 80));
Engine.SetProgress(45);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createLayeredPatches(
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
[tGrassPatchBlend, tGrassPatch],
@@ -222,7 +222,7 @@ createLayeredPatches(
clDirt);
Engine.SetProgress(50);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createObjectGroupsDeprecated(
new SimpleGroup(
[
@@ -245,7 +245,7 @@ createObjectGroupsDeprecated(
100);
Engine.SetProgress(55);
log("Creating small stone quarries...");
g_Map.log("Creating small stone quarries");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oStoneSmall, 2, 5, 1, 3)], true, clRock),
0,
@@ -262,7 +262,7 @@ createObjectGroupsDeprecated(
100);
Engine.SetProgress(60);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oMetalLarge, 1, 1, 0, 4)], true, clMetal),
0,
@@ -282,7 +282,7 @@ Engine.SetProgress(65);
if (!isNomad())
{
log("Creating towers...");
g_Map.log("Creating towers");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oTower, 1, 1, 0, 4)], true, clTower),
0,
@@ -420,7 +420,7 @@ createStragglerTrees(
Engine.SetProgress(90);
log("Creating straggler bushes...");
g_Map.log("Creating straggler bushes");
createObjectGroupsDeprecated(
new SimpleGroup(
[new SimpleObject(oBush, 1, 3, 0, 3)],
@@ -440,7 +440,7 @@ createObjectGroupsDeprecated(
stragglerTrees);
Engine.SetProgress(95);
log("Creating rain drops...");
g_Map.log("Creating rain drops");
createObjectGroupsDeprecated(
new SimpleGroup(
[new SimpleObject(aRain, 2, 2, 1, 4)],
+8 -11
View File
@@ -66,7 +66,7 @@ const numPlayers = getNumPlayers();
const mapSize = g_Map.getSize();
const mapCenter = g_Map.getCenter();
log("Creating player islands...")
g_Map.log("Creating player islands...")
var [playerIDs, playerPosition] = playerPlacementCircle(fractionToTiles(0.38));
for (let i = 0; i < numPlayers; ++i)
@@ -110,7 +110,7 @@ placePlayerBases({
});
Engine.SetProgress(40);
log("Creating central island...");
g_Map.log("Creating central island");
createArea(
new ChainPlacer(
6,
@@ -167,7 +167,7 @@ for (let m = 0; m < randIntInclusive(8, 17); ++m)
[avoidClasses(clBaseResource, 2, clPlayer, 40), stayClasses(clHill, 6)]);
}
log("Creating center bounty...");
g_Map.log("Creating center bounty");
createObjectGroup(
new SimpleGroup(
[new SimpleObject(oMetalLarge, 3, 6, 25, Math.floor(fractionToTiles(0.25)))],
@@ -186,7 +186,7 @@ createObjectGroup(
0,
[avoidClasses(clBaseResource, 20, clPlayer, 40, clMountain, 4), stayClasses(clHill, 10)]);
log("Creating fish...");
g_Map.log("Creating fish");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oFish, 2, 3, 0, 2)], true, clFood),
0,
@@ -209,7 +209,7 @@ createStragglerTrees(
stragglerTrees);
Engine.SetProgress(65);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
var numb = currentBiome() == "generic/savanna" ? 3 : 1;
for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)])
createAreas(
@@ -221,11 +221,11 @@ for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8,
avoidClasses(clForest, 0, clMountain, 0, clDirt, 5, clPlayer, 10),
numb * scaleByMapSize(15, 45));
log("Painting shorelines...");
g_Map.log("Painting shorelines");
paintTerrainBasedOnHeight(1, heightLand, 0, tMainTerrain);
paintTerrainBasedOnHeight(heightSeaGround, 1, 3, tTier1Terrain);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
for (let size of [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)])
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), size, 0.5),
@@ -233,7 +233,6 @@ for (let size of [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5,
avoidClasses(clForest, 0, clMountain, 0, clDirt, 5, clPlayer, 10),
numb * scaleByMapSize(15, 45));
log("Creating food...");
createFood(
[
[new SimpleObject(oMainHuntableAnimal, 5, 7, 0, 4)],
@@ -255,7 +254,6 @@ createFood(
Engine.SetProgress(85);
log("Creating decoration...");
var planetm = currentBiome() == "generic/tropic" ? 8 : 1;
createDecoration(
[
@@ -274,7 +272,6 @@ createDecoration(
],
avoidClasses(clForest, 2, clPlayer, 20, clMountain, 5, clFood, 1, clBaseResource, 2));
log("Creating water forests...");
var [forestTrees, stragglerTrees] = getTreeCounts(...rBiomeTreeCount(0.1));
createForests(
[tMainTerrain, tForestFloor1, tForestFloor2, pForest1, pForest2],
@@ -282,7 +279,7 @@ createForests(
clForest,
forestTrees);
log("Creating small grass tufts...");
g_Map.log("Creating small grass tufts");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(aGrassShort, 1, 2, 0, 1)]),
0,
@@ -67,12 +67,13 @@ var treasures = [
var [playerIDs, playerPosition] = playerPlacementCircle(fractionToTiles(0.35));
g_Map.log("Creating playerbases);
for (let i = 0; i < numPlayers; ++i)
{
if (isNomad())
break;
log("Creating base for player " + playerIDs[i] + "...");
// CC and units
for (let dist of [6, 8])
{
let ents = getStartingEntities(playerIDs[i]);
@@ -83,7 +84,7 @@ for (let i = 0; i < numPlayers; ++i)
placeStartingEntities(playerPosition[i], playerIDs[i], ents, dist);
}
log("Creating treasure for player " + playerIDs[i] + "...");
// Treasure
let bbAngle = BUILDING_ORIENTATION;
for (let treasure of treasures)
{
@@ -92,7 +93,7 @@ for (let i = 0; i < numPlayers; ++i)
bbAngle += Math.PI / 2;
}
log("Painting ground texture for player " + playerIDs[i] + "...");
// Ground texture
var civ = getCivCode(playerIDs[i]);
var tilesSize = civ == "cart" ? 24 : 22;
const minBoundX = Math.max(0, playerPosition[i].x - tilesSize);
@@ -115,7 +116,7 @@ for (let i = 0; i < numPlayers; ++i)
}
}
log("Placing fortress for player " + playerIDs[i] + "...");
// Fortress
if (civ == "brit" || civ == "gaul" || civ == "iber")
{
var wall = ["gate", "tower", "long",
@@ -135,7 +136,7 @@ for (let i = 0; i < numPlayers; ++i)
placeCustomFortress(playerPosition[i], new Fortress("Spahbod", wall), civ, playerIDs[i], -Math.PI/4);
}
log("Creating lakes...");
g_Map.log("Creating lakes");
var numLakes = Math.round(scaleByMapSize(1,4) * numPlayers);
var waterAreas = createAreas(
new ClumpPlacer(scaleByMapSize(100,250), 0.8, 0.1, 10),
@@ -149,7 +150,7 @@ var waterAreas = createAreas(
Engine.SetProgress(15);
log("Creating reeds...");
g_Map.log("Creating reeds");
createObjectGroupsByAreasDeprecated(
new SimpleGroup([new SimpleObject(aReeds, 5,10, 0,4), new SimpleObject(aLillies, 0,1, 0,4)], true),
0,
@@ -159,7 +160,7 @@ createObjectGroupsByAreasDeprecated(
Engine.SetProgress(25);
log("Creating fish...");
g_Map.log("Creating fish");
createObjectGroupsByAreasDeprecated(
new SimpleGroup(
[new SimpleObject(oFish, 1,1, 0,1)],
@@ -175,11 +176,10 @@ Engine.SetProgress(30);
createBumps(avoidClasses(clWater, 2, clPlayer, 5));
Engine.SetProgress(35);
log("Creating hills...");
createHills([tCliff, tCliff, tHill], avoidClasses(clPlayer, 5, clWater, 5, clHill, 15), clHill, scaleByMapSize(1, 4) * numPlayers);
Engine.SetProgress(40);
log("Creating forests...");
g_Map.log("Creating forests");
var [forestTrees, stragglerTrees] = getTreeCounts(500, 2500, 0.7);
var types = [
[[tForestFloor, tGrass, pForestD], [tForestFloor, pForestD]],
@@ -199,7 +199,7 @@ for (let type of types)
num);
Engine.SetProgress(50);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[[tGrass,tGrassA],[tGrassA,tGrassB], [tGrassB,tGrassC]],
@@ -209,7 +209,7 @@ createLayeredPatches(
clDirt);
Engine.SetProgress(55);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createPatches(
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
tGrassPatch,
@@ -218,7 +218,7 @@ createPatches(
clDirt);
Engine.SetProgress(60);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createMines(
[
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
@@ -228,7 +228,7 @@ createMines(
clRock);
Engine.SetProgress(65);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createMines(
[
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
@@ -4,7 +4,7 @@ Engine.LoadLibrary("rmbiome");
setSelectedBiome();
log("Picking a random elevation with a bias towards lower elevations...");
// Random elevation with a bias towards lower elevations
var randElevation = randIntInclusive(0, 29);
if (randElevation < 25)
randElevation = randIntInclusive(1, 4);
+19 -16
View File
@@ -73,7 +73,7 @@ var radiusCentralHill = fractionToTiles(0.12);
var [playerIDs, playerPosition, playerAngle, startAngle] = playerPlacementCircle(radiusPlayers);
log("Determining number of rivers between players...");
g_Map.log("Determining number of rivers between players");
var split = 1;
if (mapSize == 128 && numPlayers <= 2)
split = 2;
@@ -114,14 +114,14 @@ else if (mapSize == 448)
split = 2;
}
log("Creating big circular lake...");
g_Map.log("Creating big circular lake");
createArea(
new ClumpPlacer(diskArea(radiusCentralLake), 1, 1, 10, mapCenter),
new SmoothElevationPainter(ELEVATION_SET, heightShallow, 4));
g_Map.log("Creating rivers between players");
for (let m = 0; m < numPlayers * split; ++m)
{
log("Creating rivers between players...");
let angle = startAngle + (m + 0.5) * 2 * Math.PI / (numPlayers * split);
let position1 = Vector2D.add(mapCenter, new Vector2D(fractionToTiles(0.15), 0).rotate(-angle));
let position2 = Vector2D.add(mapCenter, new Vector2D(fractionToTiles(0.6), 0).rotate(-angle));
@@ -129,32 +129,35 @@ for (let m = 0; m < numPlayers * split; ++m)
new PathPlacer(position1, position2, scaleByMapSize(14, 40), 0, scaleByMapSize(3, 9), 0.2, 0.05),
new SmoothElevationPainter(ELEVATION_SET, heightSeaGround, 4),
avoidClasses(clPlayer, 5));
}
log("Create path from the island to the center...");
angle = startAngle + m * 2 * Math.PI / (numPlayers * split);
position1 = Vector2D.add(mapCenter, new Vector2D(fractionToTiles(0.05), 0).rotate(-angle));
position2 = Vector2D.add(mapCenter, new Vector2D(fractionToTiles(0.49), 0).rotate(-angle));
g_Map.log("Create path from the island to the center");
for (let m = 0; m < numPlayers * split; ++m)
{
let angle = startAngle + m * 2 * Math.PI / (numPlayers * split);
let position1 = Vector2D.add(mapCenter, new Vector2D(fractionToTiles(0.05), 0).rotate(-angle));
let position2 = Vector2D.add(mapCenter, new Vector2D(fractionToTiles(0.49), 0).rotate(-angle));
createArea(
new PathPlacer(position1, position2, scaleByMapSize(10, 40), 0, scaleByMapSize(3, 9), 0.2, 0.05),
new SmoothElevationPainter(ELEVATION_SET, heightLand, 4));
}
log("Creating ring of land connecting players...");
g_Map.log("Creating ring of land connecting players");
createArea(
new ClumpPlacer(diskArea(radiusCentralRingLand), 1, 1, 10, mapCenter),
new SmoothElevationPainter(ELEVATION_SET, heightRing, 4));
log("Creating ring of water separating the central hill from the ring...");
g_Map.log("Creating inner ring of water");
createArea(
new ClumpPlacer(diskArea(radiusCentralWaterRing), 1, 1, 10, mapCenter),
new SmoothElevationPainter(ELEVATION_SET, heightShallow, 3));
log("Creating central island...");
g_Map.log("Creating central island");
createArea(
new ClumpPlacer(diskArea(radiusCentralIsland), 1, 1, 10, mapCenter),
new SmoothElevationPainter(ELEVATION_SET, heightRing, 3));
log("Creating hill on the central island...");
g_Map.log("Creating hill on the central island");
createArea(
new ClumpPlacer(diskArea(radiusCentralHill), 1, 1, 10, mapCenter),
new SmoothElevationPainter(ELEVATION_SET, heightHill, 8));
@@ -209,7 +212,7 @@ createForests(
Engine.SetProgress(50);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[[tMainTerrain,tTier1Terrain],[tTier1Terrain,tTier2Terrain], [tTier2Terrain,tTier3Terrain]],
@@ -218,7 +221,7 @@ createLayeredPatches(
scaleByMapSize(15, 45),
clDirt);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createPatches(
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
tTier4Terrain,
@@ -227,7 +230,7 @@ createPatches(
clDirt);
Engine.SetProgress(55);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createMines(
[
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
@@ -236,7 +239,7 @@ createMines(
avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
clRock);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createMines(
[
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
@@ -245,7 +248,7 @@ createMines(
clMetal
);
log("Creating fish...");
g_Map.log("Creating fish");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oFish, 1,1, 0,3)], true, clFood),
0,
@@ -58,7 +58,7 @@ var clLand = g_Map.createTileClass();
var clRiver = g_Map.createTileClass();
var clShallow = g_Map.createTileClass();
log("Create the continent body");
g_Map.log("Create the continent body");
var startAngle = randomAngle();
var continentCenter = new Vector2D(fractionToTiles(0.5), fractionToTiles(0.7));
var continentCenterR = continentCenter.clone().rotateAround(startAngle, mapCenter).round()
@@ -153,7 +153,7 @@ createForests(
Engine.SetProgress(50);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[[tGrass,tGrassA],[tGrassA,tGrassB], [tGrassB,tGrassC]],
@@ -162,7 +162,7 @@ createLayeredPatches(
scaleByMapSize(15, 45),
clDirt);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createPatches(
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
tGrassPatch,
@@ -171,7 +171,7 @@ createPatches(
clDirt);
Engine.SetProgress(55);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createMines(
[
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
@@ -180,7 +180,7 @@ createMines(
[avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clRiver, 1), stayClasses(clLand, 5)],
clRock);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createMines(
[
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
@@ -207,7 +207,7 @@ createDecoration(
],
[avoidClasses(clPlayer, 1, clDirt, 1, clRiver, 1), stayClasses(clLand, 6)]);
log("Create water decoration in the shallow parts");
g_Map.log("Create water decoration in the shallow parts");
createDecoration(
[
[new SimpleObject(aReeds, 1, 3, 0, 1)],
@@ -95,7 +95,7 @@ placePlayerBases({
});
Engine.SetProgress(20);
log("Creating the gulf...");
g_Map.log("Creating the gulf");
var gulfLakePositions = [
{ "numCircles": 200, "x": fractionToTiles(0), "radius": fractionToTiles(0.175) },
{ "numCircles": 120, "x": fractionToTiles(0.3), "radius": fractionToTiles(0.2) },
@@ -142,7 +142,7 @@ createForests(
Engine.SetProgress(60);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[[tPrimary,tSecondary],[tSecondary,tHalfSnow], [tHalfSnow,tSnowLimited]],
@@ -151,7 +151,7 @@ createLayeredPatches(
scaleByMapSize(15, 45),
clDirt);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createPatches(
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
tHalfSnow,
@@ -160,7 +160,7 @@ createPatches(
clDirt);
Engine.SetProgress(65);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createMines(
[
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
@@ -169,7 +169,7 @@ createMines(
avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
clRock);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createMines(
[
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
@@ -122,7 +122,7 @@ paintRiver({
});
Engine.SetProgress(20);
log("Creating fish...");
g_Map.log("Creating fish");
for (let i = 0; i < scaleByMapSize(10, 20); ++i)
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oFish, 2, 3, 0, 2)], true, clFood),
@@ -132,7 +132,7 @@ for (let i = 0; i < scaleByMapSize(10, 20); ++i)
50);
Engine.SetProgress(25);
log("Creating bumps...");
g_Map.log("Creating bumps");
createAreas(
new ClumpPlacer(scaleByMapSize(10, 60), 0.3, 0.06, 1),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetBump, 3),
@@ -141,7 +141,7 @@ createAreas(
Engine.SetProgress(30);
log("Creating hills...");
g_Map.log("Creating hills");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 150), 0.2, 0.1, 1),
[
@@ -154,7 +154,7 @@ createAreas(
Engine.SetProgress(35);
log("Creating mainland forests...");
g_Map.log("Creating mainland forests");
var [forestTrees, stragglerTrees] = getTreeCounts(500, 2500, 0.7);
var types = [
[[tGrassDForest, tGrass, pForestD], [tGrassDForest, pForestD]]
@@ -172,7 +172,7 @@ for (let type of types)
num);
Engine.SetProgress(45);
log("Creating highland forests...");
g_Map.log("Creating highland forests");
var types = [
[[tGrassDForest, tGrass, pForestP], [tGrassDForest, pForestP]]
];
@@ -189,7 +189,7 @@ for (let type of types)
num);
Engine.SetProgress(70);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)])
createAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -201,7 +201,7 @@ for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8
scaleByMapSize(15, 45));
Engine.SetProgress(75);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
for (let size of [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5, 80)])
createAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -211,21 +211,21 @@ for (let size of [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5
Engine.SetProgress(80);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clWater, 0, clForest, 1, clPlayer, 20, clRock, 10, clHill, 2)],
scaleByMapSize(4,16), 100
);
log("Creating small stone quarries...");
g_Map.log("Creating small stone quarries");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clWater, 0, clForest, 1, clPlayer, 20, clRock, 10, clHill, 2)],
scaleByMapSize(4,16), 100
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clWater, 0, clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clHill, 2)],
@@ -234,7 +234,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(85);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockMedium, 1,3, 0,1)],
true
@@ -246,7 +246,7 @@ createObjectGroupsDeprecated(
);
Engine.SetProgress(90);
log("Creating large decorative rocks...");
g_Map.log("Creating large decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockLarge, 1,2, 0,1), new SimpleObject(aRockMedium, 1,3, 0,2)],
true
@@ -257,7 +257,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(8, 131), 50
);
log("Creating deer...");
g_Map.log("Creating deer");
group = new SimpleGroup(
[new SimpleObject(oDeer, 5,7, 0,4)],
true, clFood
@@ -267,7 +267,7 @@ createObjectGroupsDeprecated(group, 0,
6 * numPlayers, 50
);
log("Creating sheep...");
g_Map.log("Creating sheep");
group = new SimpleGroup(
[new SimpleObject(oGoat, 2,3, 0,2)],
true, clFood
@@ -277,7 +277,7 @@ createObjectGroupsDeprecated(group, 0,
3 * numPlayers, 50
);
log("Creating berry bush...");
g_Map.log("Creating berry bush");
group = new SimpleGroup(
[new SimpleObject(oBerryBush, 5,7, 0,4)],
true, clFood
@@ -287,7 +287,7 @@ createObjectGroupsDeprecated(group, 0,
randIntInclusive(1, 4) * numPlayers + 2, 50
);
log("Creating boar...");
g_Map.log("Creating boar");
group = new SimpleGroup(
[new SimpleObject(oBoar, 2,3, 0,2)],
true, clFood
@@ -303,7 +303,7 @@ createStragglerTrees(
clForest,
stragglerTrees);
log("Creating small grass tufts...");
g_Map.log("Creating small grass tufts");
group = new SimpleGroup(
[new SimpleObject(aGrassShort, 1,2, 0,1, -Math.PI / 8, Math.PI / 8)]
);
@@ -312,7 +312,7 @@ createObjectGroupsDeprecated(group, 0,
scaleByMapSize(13, 200)
);
log("Creating large grass tufts...");
g_Map.log("Creating large grass tufts");
group = new SimpleGroup(
[new SimpleObject(aGrass, 2,4, 0,1.8, -Math.PI / 8, Math.PI / 8), new SimpleObject(aGrassShort, 3,6, 1.2,2.5, -Math.PI / 8, Math.PI / 8)]
);
@@ -322,7 +322,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(95);
log("Creating bushes...");
g_Map.log("Creating bushes");
group = new SimpleGroup(
[new SimpleObject(aBushMedium, 1,2, 0,2), new SimpleObject(aBushSmall, 2,4, 0,2)]
);
+14 -14
View File
@@ -75,7 +75,7 @@ placePlayerBases({
});
Engine.SetProgress(20);
log("Creating bumps...");
g_Map.log("Creating bumps");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 50), 0.5, 0.08, 1),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetBump, 2),
@@ -83,7 +83,7 @@ createAreas(
scaleByMapSize(300, 800)
);
log("Creating the half dried-up lake...");
g_Map.log("Creating the half dried-up lake");
createArea(
new ChainPlacer(
2,
@@ -99,7 +99,7 @@ createArea(
],
avoidClasses(clPlayer, 2));
log("Creating more shore jaggedness...");
g_Map.log("Creating more shore jaggedness");
createAreas(
new ChainPlacer(2, Math.floor(scaleByMapSize(4, 6)), 3, 1),
[
@@ -116,7 +116,7 @@ paintTerrainBasedOnHeight(-8, 1, 2, tWater);
paintTileClassBasedOnHeight(-6, 0, 1, clWater);
Engine.SetProgress(55);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
for (let i = 0; i < scaleByMapSize(12, 30); ++i)
{
let position = new Vector2D(randIntInclusive(1, mapSize - 1), randIntInclusive(1, mapSize - 1));
@@ -127,7 +127,7 @@ for (let i = 0; i < scaleByMapSize(12, 30); ++i)
}
}
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oMetalLarge, 1, 1, 0, 4)], true, clMetal),
0,
@@ -136,7 +136,7 @@ createObjectGroupsDeprecated(
);
Engine.SetProgress(65);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
createObjectGroupsDeprecated(
new SimpleGroup(
[new SimpleObject(aRock, 1, 3, 0, 3)],
@@ -148,7 +148,7 @@ createObjectGroupsDeprecated(
);
Engine.SetProgress(70);
log("Creating boar...");
g_Map.log("Creating boar");
createObjectGroupsDeprecated(
new SimpleGroup(
[new SimpleObject(oBoar, 1, 2, 0, 4)],
@@ -159,7 +159,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(4, 12), 50
);
log("Creating tigers...");
g_Map.log("Creating tigers");
createObjectGroupsDeprecated(
new SimpleGroup(
[new SimpleObject(oTiger, 2, 2, 0, 4)],
@@ -170,7 +170,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(4, 12), 50
);
log("Creating crocodiles...");
g_Map.log("Creating crocodiles");
createObjectGroupsDeprecated(
new SimpleGroup(
[new SimpleObject(oCrocodile, 2, 4, 0, 4)],
@@ -180,7 +180,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(4, 12), 50
);
log("Creating elephants...");
g_Map.log("Creating elephants");
createObjectGroupsDeprecated(
new SimpleGroup(
[
@@ -194,7 +194,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(4, 12), 50
);
log("Creating rabbits...");
g_Map.log("Creating rabbits");
createObjectGroupsDeprecated(
new SimpleGroup(
[new SimpleObject(oRabbit, 5, 6, 0, 4)],
@@ -215,7 +215,7 @@ createFood(
[avoidClasses(clFood, 20), stayClasses(clWater, 2)],
clFood);
log("Creating berry bush...");
g_Map.log("Creating berry bush");
createObjectGroupsDeprecated(
new SimpleGroup(
[new SimpleObject(oBerryBush, 5, 7, 0, 4)],
@@ -227,7 +227,7 @@ createObjectGroupsDeprecated(
);
Engine.SetProgress(85);
log("Creating trees...");
g_Map.log("Creating trees");
createObjectGroupsDeprecated(
new SimpleGroup(
[new SimpleObject(oTree, 1, 7, 0, 3)],
@@ -238,7 +238,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(70, 500)
);
log("Creating large grass tufts...");
g_Map.log("Creating large grass tufts");
createObjectGroupsDeprecated(
new SimpleGroup(
[new SimpleObject(aBush, 2, 4, 0, 1.8, -Math.PI/8, Math.PI/8)]
@@ -73,6 +73,9 @@ var teamPosition = distributePointsOnCircle(numTeams, startAngle, fractionToTile
var teamRadius = fractionToTiles(0.05);
var teamNo = 0;
g_Map.log("Creating player islands and bases");
for (let i = 0; i < teams.length; ++i)
{
if (!teams[i] || isNomad())
@@ -83,7 +86,6 @@ for (let i = 0; i < teams.length; ++i)
let [playerPosition, playerAngle] = distributePointsOnCircle(teams[i].length, startAngle + 2 * Math.PI / teams[i].length, teamRadius, teamPosition[i]);
playerPosition.forEach(position => position.round());
log("Creating island and starting entities for team " + i);
for (let p = 0; p < teams[i].length; ++p)
{
addCivicCenterAreaToClass(playerPosition[p], clPlayer);
@@ -105,7 +107,7 @@ for (let i = 0; i < teams.length; ++i)
{ "template": oStoneLarge, "angle": mineAngle + Math.PI / 4 }
];
log("Create starting resources for team " + i);
// Mines
for (let p = 0; p < teams[i].length; ++p)
for (let mine of mines)
{
@@ -116,7 +118,7 @@ for (let i = 0; i < teams.length; ++i)
[avoidClasses(clBaseResource, 4, clPlayer, 4), stayClasses(clLand, 5)]);
}
log("Place initial trees for team " + i);
// Trees
for (let p = 0; p < teams[i].length; ++p)
{
let tries = 10;
@@ -149,7 +151,7 @@ for (let i = 0; i < teams.length; ++i)
"baseResourceConstraint": new AndConstraint([avoidClasses(clPlayer, 4), stayClasses(clLand, 5)])
});
log("Creating huntable animals for team " + i + "...");
// Huntable animals
for (let p = 0; p < teams[i].length; ++p)
{
createObjectGroup(
@@ -168,7 +170,7 @@ for (let i = 0; i < teams.length; ++i)
Engine.SetProgress(40);
log("Creating big islands...");
g_Map.log("Creating big islands");
createAreas(
new ChainPlacer(
Math.floor(scaleByMapSize(4, 8) * (isNomad() ? 2 : 1)),
@@ -186,7 +188,7 @@ createAreas(
scaleByMapSize(4, 14) * (isNomad() ? 2 : 1),
1);
log("Creating small islands...");
g_Map.log("Creating small islands");
createAreas(
new ChainPlacer(Math.floor(scaleByMapSize(4, 7)), Math.floor(scaleByMapSize(7, 10)), Math.floor(scaleByMapSize(16, 40)), 0.07, undefined, scaleByMapSize(22, 40)),
[
@@ -200,7 +202,7 @@ createAreas(
Engine.SetProgress(70);
log("Smoothing heightmap...");
g_Map.log("Smoothing heightmap");
for (let i = 0; i < 5; ++i)
globalSmoothHeightmap();
@@ -235,7 +237,7 @@ createForests(
clForest,
forestTrees);
log("Creating hills...");
g_Map.log("Creating hills");
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(4, 6)), Math.floor(scaleByMapSize(16, 40)), 0.5),
[
@@ -278,7 +280,7 @@ createFood(
if (currentBiome() == "generic/desert")
{
log("Creating obelisks");
g_Map.log("Creating obelisks");
let group = new SimpleGroup(
[new SimpleObject(oObelisk, 1, 1, 0, 1)],
true
@@ -290,7 +292,7 @@ if (currentBiome() == "generic/desert")
);
}
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
let numb = currentBiome() == "generic/savanna" ? 3 : 1;
for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)])
createAreas(
@@ -302,7 +304,7 @@ for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8,
[avoidClasses(clForest, 0, clHill, 0, clDirt, 5, clPlayer, 0), stayClasses(clLand, 4)],
numb*scaleByMapSize(15, 45));
log("Creating grass patches...");
g_Map.log("Creating grass patches");
for (let size of [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)])
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), size, 0.5),
@@ -310,7 +312,7 @@ for (let size of [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5,
[avoidClasses(clForest, 0, clHill, 0, clDirt, 5, clPlayer, 0), stayClasses(clLand, 4)],
numb * scaleByMapSize(15, 45));
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
let group = new SimpleGroup(
[new SimpleObject(aRockMedium, 1, 3, 0, 1)],
true
@@ -321,7 +323,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(16, 262), 50
);
log("Creating large decorative rocks...");
g_Map.log("Creating large decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockLarge, 1, 2, 0, 1), new SimpleObject(aRockMedium, 1, 3, 0, 2)],
true
@@ -332,7 +334,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(8, 131), 50
);
log("Creating fish...");
g_Map.log("Creating fish");
group = new SimpleGroup(
[new SimpleObject(oFish, 2, 3, 0, 2)],
true, clFood
@@ -342,7 +344,7 @@ createObjectGroupsDeprecated(group, 0,
25 * numPlayers, 60
);
log("Creating Whales...");
g_Map.log("Creating Whales");
group = new SimpleGroup(
[new SimpleObject(oWhale, 1, 1, 0, 3)],
true, clFood
@@ -352,7 +354,7 @@ createObjectGroupsDeprecated(group, 0,
scaleByMapSize(5, 20), 100
);
log("Creating shipwrecks...");
g_Map.log("Creating shipwrecks");
group = new SimpleGroup(
[new SimpleObject(oShipwreck, 1, 1, 0, 1)],
true, clFood
@@ -362,7 +364,7 @@ createObjectGroupsDeprecated(group, 0,
scaleByMapSize(12, 16), 100
);
log("Creating shipwreck debris...");
g_Map.log("Creating shipwreck debris");
group = new SimpleGroup(
[new SimpleObject(oShipDebris, 1, 1, 0, 1)],
true, clFood
@@ -372,7 +374,7 @@ createObjectGroupsDeprecated(group, 0,
scaleByMapSize(10, 20), 100
);
log("Creating small grass tufts...");
g_Map.log("Creating small grass tufts");
let planetm = currentBiome() == "generic/tropic" ? 8 : 1;
group = new SimpleGroup(
[new SimpleObject(aGrassShort, 1, 2, 0, 1, -Math.PI / 8, Math.PI / 8)]
@@ -384,7 +386,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(95);
log("Creating large grass tufts...");
g_Map.log("Creating large grass tufts");
group = new SimpleGroup(
[new SimpleObject(aGrass, 2, 4, 0, 1.8, -Math.PI / 8, Math.PI / 8), new SimpleObject(aGrassShort, 3, 6, 1.2,2.5, -Math.PI / 8, Math.PI / 8)]
);
@@ -71,7 +71,7 @@ var [playerIDs, playerPosition, playerAngle] = playerPlacementCircle(fractionToT
if (!isNomad())
{
log("Creating player islands and docks...");
g_Map.log("Creating player islands and docks");
for (let i = 0; i < numPlayers; i++)
{
createArea(
@@ -88,7 +88,7 @@ if (!isNomad())
}
}
log("Creating big islands...");
g_Map.log("Creating big islands");
createAreas(
new ChainPlacer(
Math.floor(scaleByMapSize(4, 8)),
@@ -103,7 +103,7 @@ createAreas(
avoidClasses(clLand, scaleByMapSize(8, 12)),
scaleByMapSize(4, 14));
log("Creating small islands...");
g_Map.log("Creating small islands");
createAreas(
new ChainPlacer(
Math.floor(scaleByMapSize(4, 7)),
@@ -159,14 +159,14 @@ placePlayerBases({
}
});
log("Creating bumps...");
g_Map.log("Creating bumps");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetBump, 2),
[avoidClasses(clPlayer, 0), stayClasses(clLand, 3)],
scaleByMapSize(20, 100));
log("Creating hills...");
g_Map.log("Creating hills");
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(4, 6)), Math.floor(scaleByMapSize(16, 40)), 0.5),
[
@@ -177,7 +177,7 @@ createAreas(
[avoidClasses(clPlayer, 2, clHill, 15), stayClasses(clLand, 0)],
scaleByMapSize(4, 13));
log("Creating forests...");
g_Map.log("Creating forests");
var [forestTrees, stragglerTrees] = getTreeCounts(...rBiomeTreeCount(1));
var types = [
[[tForestFloor2, tMainTerrain, pForest1], [tForestFloor2, pForest1]],
@@ -200,7 +200,7 @@ if (currentBiome() != "generic/savanna")
}
Engine.SetProgress(50);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
var numberOfPatches = scaleByMapSize(15, 45) * (currentBiome() == "generic/savanna" ? 3 : 1);
for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)])
createAreas(
@@ -212,7 +212,7 @@ for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8,
[avoidClasses(clForest, 0, clHill, 0, clDirt, 5, clPlayer, 0), stayClasses(clLand, 6)],
numberOfPatches);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
for (let size of [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)])
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), size, 0.5),
@@ -222,21 +222,21 @@ for (let size of [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5,
Engine.SetProgress(55);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0, 2, 0, 4), new SimpleObject(oStoneLarge, 1, 1, 0, 4)], true, clRock);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clForest, 1, clPlayer, 0, clRock, 10, clHill, 1), stayClasses(clLand, 5)],
scaleByMapSize(4,16), 100
);
log("Creating small stone quarries...");
g_Map.log("Creating small stone quarries");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clForest, 1, clPlayer, 0, clRock, 10, clHill, 1), stayClasses(clLand, 5)],
scaleByMapSize(4,16), 100
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clForest, 1, clPlayer, 0, clMetal, 10, clRock, 5, clHill, 1), stayClasses(clLand, 5)],
@@ -245,7 +245,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(65);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockMedium, 1,3, 0,1)],
true
@@ -256,7 +256,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(16, 262), 50
);
log("Creating large decorative rocks...");
g_Map.log("Creating large decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockLarge, 1,2, 0,1), new SimpleObject(aRockMedium, 1,3, 0,2)],
true
@@ -269,7 +269,7 @@ createObjectGroupsDeprecated(
Engine.SetProgress(70);
log("Creating deer...");
g_Map.log("Creating deer");
group = new SimpleGroup(
[new SimpleObject(oMainHuntableAnimal, 5,7, 0,4)],
true, clFood
@@ -281,7 +281,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(75);
log("Creating sheep...");
g_Map.log("Creating sheep");
group = new SimpleGroup(
[new SimpleObject(oSecondaryHuntableAnimal, 2,3, 0,2)],
true, clFood
@@ -291,7 +291,7 @@ createObjectGroupsDeprecated(group, 0,
3 * numPlayers, 50
);
log("Creating fruit bush...");
g_Map.log("Creating fruit bush");
group = new SimpleGroup(
[new SimpleObject(oFruitBush, 5,7, 0,4)],
true, clFood
@@ -301,7 +301,7 @@ createObjectGroupsDeprecated(group, 0,
randIntInclusive(1, 4) * numPlayers + 2, 50
);
log("Creating fish...");
g_Map.log("Creating fish");
group = new SimpleGroup(
[new SimpleObject(oFish, 2,3, 0,2)],
true, clFood
@@ -323,7 +323,7 @@ var planetm = 1;
if (currentBiome() == "generic/tropic")
planetm = 8;
log("Creating small grass tufts...");
g_Map.log("Creating small grass tufts");
group = new SimpleGroup(
[new SimpleObject(aGrassShort, 1,2, 0,1, -Math.PI / 8, Math.PI / 8)]
);
@@ -334,7 +334,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(90);
log("Creating large grass tufts...");
g_Map.log("Creating large grass tufts");
group = new SimpleGroup(
[new SimpleObject(aGrass, 2,4, 0,1.8, -Math.PI / 8, Math.PI / 8), new SimpleObject(aGrassShort, 3,6, 1.2,2.5, -Math.PI / 8, Math.PI / 8)]
);
@@ -345,7 +345,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(95);
log("Creating bushes...");
g_Map.log("Creating bushes");
group = new SimpleGroup(
[new SimpleObject(aBushMedium, 1,2, 0,2), new SimpleObject(aBushSmall, 2,4, 0,2)]
);
+17 -17
View File
@@ -105,7 +105,7 @@ paintRiver({
"meanderShort": 20,
"meanderLong": 0,
"landFunc": (position, shoreDist1, shoreDist2) => {
if (waterPosition + shoreDist1 > mountainPosition)
if (waterPosition - shoreDist2 > mountainPosition)
clMountains.add(position);
},
"waterFunc": (position, height, riverFraction) => {
@@ -113,7 +113,7 @@ paintRiver({
}
});
log("Creating shores...");
g_Map.log("Creating shores");
for (let i = 0; i < scaleByMapSize(20, 120); ++i)
{
let position = new Vector2D(fractionToTiles(randFloat(0.28, 0.34)), fractionToTiles(randFloat(0.1, 0.9))).rotateAround(startAngle - Math.PI / 2, mapCenter).round();
@@ -133,7 +133,7 @@ paintTileClassBasedOnHeight(-6, 0.5, 1, clWater);
Engine.SetProgress(45);
log("Creating hills...");
g_Map.log("Creating hills");
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(4, 6)), Math.floor(scaleByMapSize(16, 40)), 0.1),
[
@@ -144,7 +144,7 @@ createAreas(
[avoidClasses(clPlayer, 20, clHill, 5, clWater, 2, clBaseResource, 2), stayClasses(clMountains, 0)],
scaleByMapSize(5, 40) * numPlayers);
log("Creating forests...");
g_Map.log("Creating forests");
var [forestTrees, stragglerTrees] = getTreeCounts(1000, 6000, 0.7);
var types = [
[[tGrass, tGrass, tGrass, tGrass, pForestD], [tGrass, tGrass, tGrass, pForestD]],
@@ -168,7 +168,7 @@ for (let type of types)
Engine.SetProgress(70);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)])
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), size, 0.5),
@@ -189,28 +189,28 @@ for (let size of [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5,
avoidClasses(clWater, 8, clForest, 0, clHill, 0, clPlayer, 12, clDirt, 16),
scaleByMapSize(20, 80));
log("Creating stone mines...");
g_Map.log("Creating stone mines");
var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
scaleByMapSize(4,16), 100
);
log("Creating small stone quarries...");
g_Map.log("Creating small stone quarries");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
scaleByMapSize(4,16), 100
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clHill, 1),
scaleByMapSize(4,16), 100
);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockMedium, 1,3, 0,1)],
true
@@ -221,7 +221,7 @@ createObjectGroupsDeprecated(
3*scaleByMapSize(16, 262), 50
);
log("Creating large decorative rocks...");
g_Map.log("Creating large decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockLarge, 1,2, 0,1), new SimpleObject(aRockMedium, 1,3, 0,2)],
true
@@ -232,7 +232,7 @@ createObjectGroupsDeprecated(
3*scaleByMapSize(8, 131), 50
);
log("Creating small grass tufts...");
g_Map.log("Creating small grass tufts");
group = new SimpleGroup(
[new SimpleObject(aBush1, 1,2, 0,1, -Math.PI / 8, Math.PI / 8)]
);
@@ -243,7 +243,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(90);
log("Creating large grass tufts...");
g_Map.log("Creating large grass tufts");
group = new SimpleGroup(
[new SimpleObject(aBush2, 2,4, 0,1.8, -Math.PI / 8, Math.PI / 8), new SimpleObject(aBush1, 3,6, 1.2,2.5, -Math.PI / 8, Math.PI / 8)]
);
@@ -254,7 +254,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(95);
log("Creating bushes...");
g_Map.log("Creating bushes");
group = new SimpleGroup(
[new SimpleObject(aBush3, 1,2, 0,2), new SimpleObject(aBush2, 2,4, 0,2)]
);
@@ -271,7 +271,7 @@ createStragglerTrees(
clForest,
stragglerTrees);
log("Creating deer...");
g_Map.log("Creating deer");
group = new SimpleGroup(
[new SimpleObject(oDeer, 5,7, 0,4)],
true, clFood
@@ -283,7 +283,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(75);
log("Creating berry bush...");
g_Map.log("Creating berry bush");
group = new SimpleGroup(
[new SimpleObject(oBush, 5,7, 0,4)],
true, clFood
@@ -293,7 +293,7 @@ createObjectGroupsDeprecated(group, 0,
randIntInclusive(1, 4) * numPlayers + 2, 50
);
log("Creating sheep...");
g_Map.log("Creating sheep");
group = new SimpleGroup(
[new SimpleObject(oSheep, 2,3, 0,2)],
true, clFood
@@ -303,7 +303,7 @@ createObjectGroupsDeprecated(group, 0,
3 * numPlayers, 50
);
log("Creating fish...");
g_Map.log("Creating fish");
group = new SimpleGroup(
[new SimpleObject(oFish, 2,3, 0,2)],
true, clFood
@@ -61,11 +61,11 @@ var clBaseResource = g_Map.createTileClass();
var [playerIDs, playerPosition] = playerPlacementCircle(fractionToTiles(0.35));
log("Preventing water in player territory...");
g_Map.log("Preventing water in player territory");
for (let i = 0; i < numPlayers; ++i)
addCivicCenterAreaToClass(playerPosition[i], clPlayer);
log("Creating the lake...")
g_Map.log("Creating the lake...")
createArea(
new ChainPlacer(
2,
@@ -81,7 +81,7 @@ createArea(
],
avoidClasses(clPlayer, 20));
log("Creating more shore jaggedness...");
g_Map.log("Creating more shore jaggedness");
createAreas(
new ChainPlacer(2, Math.floor(scaleByMapSize(4, 6)), 3, 1),
[
@@ -142,7 +142,7 @@ createForests(
Engine.SetProgress(50);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[[tMainTerrain,tTier1Terrain],[tTier1Terrain,tTier2Terrain], [tTier2Terrain,tTier3Terrain]],
@@ -151,7 +151,7 @@ createLayeredPatches(
scaleByMapSize(15, 45),
clDirt);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createPatches(
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
tTier4Terrain,
@@ -160,7 +160,7 @@ createPatches(
clDirt);
Engine.SetProgress(55);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createMines(
[
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
@@ -169,7 +169,7 @@ createMines(
avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
clRock);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createMines(
[
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
+13 -13
View File
@@ -73,7 +73,7 @@ var clBaseResource = g_Map.createTileClass();
var WATER_WIDTH = 0.1;
var horizontal = randBool();
log("Creating players...");
g_Map.log("Creating players");
var startAngle = randBool() ? 0 : Math.PI / 2;
var playerPosition = playerPlacementLine(startAngle + Math.PI / 2, mapCenter, fractionToTiles(randFloat(0.42, 0.46)));
@@ -120,7 +120,7 @@ for (let x of [mapBounds.left, mapBounds.right])
});
Engine.SetProgress(10);
log("Painting elevation...");
g_Map.log("Painting elevation");
var noise0 = new Noise2D(scaleByMapSize(4, 16));
var noise1 = new Noise2D(scaleByMapSize(8, 32));
var noise2 = new Noise2D(scaleByMapSize(15, 60));
@@ -184,7 +184,7 @@ for (var ix = 0; ix <= mapSize; ix++)
}
Engine.SetProgress(20);
log("Painting terrain...");
g_Map.log("Painting terrain");
var noise6 = new Noise2D(scaleByMapSize(10, 40));
var noise7 = new Noise2D(scaleByMapSize(20, 80));
var noise8 = new Noise2D(scaleByMapSize(13, 52));
@@ -355,7 +355,7 @@ placePlayerBases({
});
Engine.SetProgress(40);
log("Creating bushes...");
g_Map.log("Creating bushes");
var 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)]
@@ -366,7 +366,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(45);
log("Creating rocks...");
g_Map.log("Creating 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)]
@@ -377,20 +377,20 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(50);
log("Creating large stone mines...");
g_Map.log("Creating large stone mines");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clWater, 1, clForest, 4, clPlayer, 40, clRock, 60, clMetal, 10, clCliff, 3),
scaleByMapSize(4,16), 100
);
log("Creating small stone mines...");
g_Map.log("Creating small stone mines");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroups(group, 0,
avoidClasses(clForest, 4, clWater, 1, clPlayer, 40, clRock, 30, clMetal, 10, clCliff, 3),
scaleByMapSize(4,16), 100
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,2)], true, clMetal);
createObjectGroups(group, 0,
avoidClasses(clForest, 4, clWater, 1, clPlayer, 40, clMetal, 50, clCliff, 3),
@@ -406,7 +406,7 @@ createStragglerTrees(
Engine.SetProgress(70);
log("Creating straggler cypresses...");
g_Map.log("Creating straggler cypresses");
group = new SimpleGroup(
[new SimpleObject(oCypress2, 1,3, 0,3), new SimpleObject(oCypress1, 0,2, 0,2)],
true
@@ -417,7 +417,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(80);
log("Creating sheep...");
g_Map.log("Creating sheep");
group = new SimpleGroup([new SimpleObject(oSheep, 2,4, 0,2)], true, clFood);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clWater, 5, clForest, 2, clCliff, 1, clPlayer, 20, clMetal, 6, clRock, 6, clFood, 8),
@@ -425,7 +425,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(85);
log("Creating fish...");
g_Map.log("Creating fish");
createObjectGroups(
new SimpleGroup([new SimpleObject(oFish, 1, 1, 0, 1)], true, clFood),
0,
@@ -438,7 +438,7 @@ createObjectGroups(
Engine.SetProgress(90);
log("Creating deer...");
g_Map.log("Creating deer");
group = new SimpleGroup(
[new SimpleObject(oDeer, 5,7, 0,4)],
true, clFood
@@ -449,7 +449,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(95);
log("Creating berry bushes...");
g_Map.log("Creating berry bushes");
group = new SimpleGroup([new SimpleObject(oBerryBush, 5,7, 0,3)], true, clFood);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clWater, 5, clForest, 2, clCliff, 1, clPlayer, 20, clMetal, 6, clRock, 6, clFood, 8),
@@ -480,7 +480,7 @@ function createSunkenTerrain()
nExp = 0.4;
}
log("Creating central valley...");
g_Map.log("Creating central valley");
createArea(
new ClumpPlacer(diskArea(fractionToTiles(0.29)), 1, 1, 1, mapCenter),
[
@@ -489,7 +489,7 @@ function createSunkenTerrain()
new TileClassPainter(g_TileClasses.valley)
]);
log("Creating central hill...");
g_Map.log("Creating central hill");
createArea(
new ClumpPlacer(diskArea(fractionToTiles(0.21)), 1, 1, 1, mapCenter),
[
@@ -507,7 +507,7 @@ function createSunkenTerrain()
{
let playerPosition = getCoords(0.4, i, 0);
log("Creating path from player to expansion...");
// Path from player to expansion
let expansionPosition = getCoords(expDist, i, expAngle);
createArea(
new PathPlacer(playerPosition, expansionPosition, 12, 0.7, 0.5, 0.1, -1),
@@ -517,7 +517,7 @@ function createSunkenTerrain()
new TileClassPainter(g_TileClasses.step)
]);
log("Creating path from player to the neighbor...");
// Path from player to neighbor
for (let neighborOffset of [-0.5, 0.5])
{
let neighborPosition = getCoords(nRoad, i, neighborOffset);
@@ -531,7 +531,7 @@ function createSunkenTerrain()
]);
}
log("Creating the den of the player...");
// Den
createArea(
new ClumpPlacer(diskArea(fractionToTiles(0.1)) / (isNomad() ? 2 : 1), 0.9, 0.3, 1, playerPosition),
[
@@ -540,7 +540,7 @@ function createSunkenTerrain()
new TileClassPainter(g_TileClasses.valley)
]);
log("Creating the expansion of the player...");
// Expansion
createArea(
new ClumpPlacer(expSize, 0.9, 0.3, 1, expansionPosition),
[
@@ -551,7 +551,7 @@ function createSunkenTerrain()
[avoidClasses(g_TileClasses.settlement, 2)]);
}
log("Creating the expansions between players after the paths were created...");
g_Map.log("Creating the expansions between players");
for (let i = 0; i < numPlayers; ++i)
{
let position = getCoords(nExp, i, 0.5);
@@ -101,14 +101,14 @@ var riverPositions = [
new Vector2D(mapBounds.right - 1, mapCenter.y)
].map(v => v.rotateAround(startAngle, mapCenter));
log("Creating the main river...");
g_Map.log("Creating the main river");
createArea(
new PathPlacer(riverPositions[0], riverPositions[1], scaleByMapSize(10, 20), 0.5, 3 * scaleByMapSize(1, 4), 0.1, 0.01),
new SmoothElevationPainter(ELEVATION_SET, heightSeaGround, 4),
avoidClasses(clPlayer, 4));
Engine.SetProgress(25);
log("Creating small puddles at the map border to ensure players being separated...");
// Creating small puddles at the map border to ensure players being separated
for (let riverPosition of riverPositions)
createArea(
new ClumpPlacer(diskArea(scaleByMapSize(5, 10)), 0.95, 0.6, 10, riverPosition),
@@ -116,7 +116,7 @@ for (let riverPosition of riverPositions)
avoidClasses(clPlayer, 8));
Engine.SetProgress(30);
log("Creating the shallows of the main river...");
g_Map.log("Creating the shallows of the main river");
for (let i = 0; i <= randIntInclusive(3, scaleByMapSize(4, 6)); ++i)
{
let location = fractionToTiles(randFloat(0.15, 0.85));
@@ -153,7 +153,7 @@ paintTileClassBasedOnHeight(-6, 0.5, 1, clWater);
Engine.SetProgress(50);
log("Creating bumps...");
g_Map.log("Creating bumps");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetBump, 2),
@@ -170,7 +170,7 @@ createForests(
forestTrees);
Engine.SetProgress(70);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)])
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), size, 0.5),
@@ -182,7 +182,7 @@ for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8,
scaleByMapSize(15, 45)
);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
for (let size of [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)])
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), size, 0.5),
@@ -192,21 +192,21 @@ for (let size of [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5,
);
Engine.SetProgress(80);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0, 2, 0, 4), new SimpleObject(oStoneLarge, 1, 1, 0, 4)], true, clRock);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clWater, 0, clForest, 1, clPlayer, 15, clRock, 10, clHill, 1)],
scaleByMapSize(4,16), 100
);
log("Creating small stone quarries...");
g_Map.log("Creating small stone quarries");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clWater, 0, clForest, 1, clPlayer, 15, clRock, 10, clHill, 1)],
scaleByMapSize(4,16), 100
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clWater, 0, clForest, 1, clPlayer, 15, clMetal, 10, clRock, 5, clHill, 1)],
@@ -215,7 +215,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(86);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockMedium, 1,3, 0,1)],
true
@@ -226,7 +226,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(16, 262), 50
);
log("Creating large decorative rocks...");
g_Map.log("Creating large decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockLarge, 1,2, 0,1), new SimpleObject(aRockMedium, 1,3, 0,2)],
true
@@ -237,7 +237,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(8, 131), 50
);
log("Creating deer...");
g_Map.log("Creating deer");
group = new SimpleGroup(
[new SimpleObject(oDeer, 5,7, 0,4)],
true, clFood
@@ -247,7 +247,7 @@ createObjectGroupsDeprecated(group, 0,
3 * numPlayers, 50
);
log("Creating rabbits...");
g_Map.log("Creating rabbits");
group = new SimpleGroup(
[new SimpleObject(oRabbit, 2,3, 0,2)],
true, clFood
@@ -257,7 +257,7 @@ createObjectGroupsDeprecated(group, 0,
3 * numPlayers, 50
);
log("Creating berry bush...");
g_Map.log("Creating berry bush");
group = new SimpleGroup(
[new SimpleObject(oBerryBush, 5,7, 0,4)],
true, clFood
@@ -273,7 +273,7 @@ createStragglerTrees(
clForest,
stragglerTrees);
log("Creating small grass tufts...");
g_Map.log("Creating small grass tufts");
group = new SimpleGroup(
[new SimpleObject(aGrassShort, 1,2, 0,1, -Math.PI / 8, Math.PI / 8)]
);
@@ -282,7 +282,7 @@ createObjectGroupsDeprecated(group, 0,
scaleByMapSize(13, 200)
);
log("Creating large grass tufts...");
g_Map.log("Creating large grass tufts");
group = new SimpleGroup(
[new SimpleObject(aGrass, 2,4, 0,1.8, -Math.PI / 8, Math.PI / 8), new SimpleObject(aGrassShort, 3,6, 1.2,2.5, -Math.PI / 8, Math.PI / 8)]
);
@@ -291,7 +291,7 @@ createObjectGroupsDeprecated(group, 0,
scaleByMapSize(13, 200)
);
log("Creating bushes...");
g_Map.log("Creating bushes");
group = new SimpleGroup(
[new SimpleObject(aBushMedium, 1,2, 0,2), new SimpleObject(aBushSmall, 2,4, 0,2)]
);
@@ -300,7 +300,7 @@ createObjectGroupsDeprecated(group, 0,
scaleByMapSize(13, 200), 50
);
log("Creating shallow flora...");
g_Map.log("Creating shallow flora");
group = new SimpleGroup(
[new SimpleObject(aLillies, 1,2, 0,2), new SimpleObject(aReeds, 2,4, 0,2)]
);
@@ -97,7 +97,7 @@ createForests(
Engine.SetProgress(50);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[[tMainTerrain,tTier1Terrain],[tTier1Terrain,tTier2Terrain], [tTier2Terrain,tTier3Terrain]],
@@ -106,7 +106,7 @@ createLayeredPatches(
scaleByMapSize(15, 45),
clDirt);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createPatches(
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
tTier4Terrain,
@@ -115,7 +115,7 @@ createPatches(
clDirt);
Engine.SetProgress(55);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createMines(
[
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
@@ -124,7 +124,7 @@ createMines(
avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
clRock);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createMines(
[
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
@@ -71,7 +71,7 @@ var [playerPosition, playerAngle] = playerPlacementCustomAngle(
mapCenter,
i => startAngle - Math.PI * (i + 1) / (numPlayers + 1));
log("Creating player islands and docks...");
g_Map.log("Creating player islands and docks");
for (let i = 0; i < numPlayers; ++i)
{
createArea(
@@ -126,7 +126,7 @@ placePlayerBases({
});
Engine.SetProgress(15);
log("Create the continent body...");
g_Map.log("Create the continent body");
var continentPosition = Vector2D.add(mapCenter, new Vector2D(0, fractionToTiles(0.38)).rotate(-startAngle)).round()
createArea(
new ClumpPlacer(diskArea(fractionToTiles(0.4)), 0.8, 0.08, 10, continentPosition),
@@ -138,7 +138,7 @@ createArea(
avoidClasses(clIsland, 8));
Engine.SetProgress(20);
log("Creating shore jaggedness...");
g_Map.log("Creating shore jaggedness");
createAreas(
new ClumpPlacer(scaleByMapSize(15, 80), 0.2, 0.1, 1),
[
@@ -157,7 +157,7 @@ paintTerrainBasedOnHeight(1, 3, 0, tShore);
paintTerrainBasedOnHeight(-8, 1, 2, tWater);
Engine.SetProgress(25);
log("Creating bumps...");
g_Map.log("Creating bumps");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetBump, 2),
@@ -166,7 +166,7 @@ createAreas(
);
Engine.SetProgress(30);
log("Creating hills...");
g_Map.log("Creating hills");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 150), 0.2, 0.1, 1),
[
@@ -179,7 +179,7 @@ createAreas(
);
Engine.SetProgress(34);
log("Creating forests...");
g_Map.log("Creating forests");
var [forestTrees, stragglerTrees] = getTreeCounts(...rBiomeTreeCount(1));
var types = [
[[tForestFloor2, tMainTerrain, pForest1], [tForestFloor2, pForest1]],
@@ -201,7 +201,7 @@ for (let type of types)
num);
Engine.SetProgress(38);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)])
createAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -223,7 +223,7 @@ for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8
Engine.SetProgress(42);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
for (let size of [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5, 80)])
createAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -232,7 +232,7 @@ for (let size of [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5
scaleByMapSize(15, 45));
Engine.SetProgress(46);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clForest, 1, clPlayer, 10, clRock, 10, clHill, 1), stayClasses(clLand, 7)],
@@ -240,7 +240,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(50);
log("Creating small stone quarries...");
g_Map.log("Creating small stone quarries");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clForest, 1, clPlayer, 10, clRock, 10, clHill, 1), stayClasses(clLand, 7)],
@@ -248,7 +248,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(54);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clForest, 1, clPlayer, 10, clMetal, 10, clRock, 5, clHill, 1), stayClasses(clLand, 7)],
@@ -256,7 +256,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(58);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockMedium, 1,3, 0,1)],
true
@@ -268,7 +268,7 @@ createObjectGroupsDeprecated(
);
Engine.SetProgress(62);
log("Creating large decorative rocks...");
g_Map.log("Creating large decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockLarge, 1,2, 0,1), new SimpleObject(aRockMedium, 1,3, 0,2)],
true
@@ -280,7 +280,7 @@ createObjectGroupsDeprecated(
);
Engine.SetProgress(66);
log("Creating deer...");
g_Map.log("Creating deer");
group = new SimpleGroup(
[new SimpleObject(oMainHuntableAnimal, 5,7, 0,4)],
true, clFood
@@ -291,7 +291,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(70);
log("Creating sheep...");
g_Map.log("Creating sheep");
group = new SimpleGroup(
[new SimpleObject(oSecondaryHuntableAnimal, 2,3, 0,2)],
true, clFood
@@ -302,7 +302,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(74);
log("Creating fruit bush...");
g_Map.log("Creating fruit bush");
group = new SimpleGroup(
[new SimpleObject(oFruitBush, 5,7, 0,4)],
true, clFood
@@ -313,7 +313,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(78);
log("Creating fish...");
g_Map.log("Creating fish");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oFish, 2,3, 0,2)], true, clFood),
0,
@@ -332,7 +332,7 @@ Engine.SetProgress(86);
var planetm = currentBiome() == "generic/tropic" ? 8 : 1;
log("Creating small grass tufts...");
g_Map.log("Creating small grass tufts");
group = new SimpleGroup(
[new SimpleObject(aGrassShort, 1,2, 0,1, -Math.PI / 8, Math.PI / 8)]
);
@@ -342,7 +342,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(90);
log("Creating large grass tufts...");
g_Map.log("Creating large grass tufts");
group = new SimpleGroup(
[new SimpleObject(aGrass, 2,4, 0,1.8, -Math.PI / 8, Math.PI / 8), new SimpleObject(aGrassShort, 3,6, 1.2,2.5, -Math.PI / 8, Math.PI / 8)]
);
@@ -352,7 +352,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(94);
log("Creating bushes...");
g_Map.log("Creating bushes");
group = new SimpleGroup(
[new SimpleObject(aBushMedium, 1,2, 0,2), new SimpleObject(aBushSmall, 2,4, 0,2)]
);
@@ -99,7 +99,7 @@ placePlayerBases({
});
Engine.SetProgress(10);
log("Creating dune patches...");
g_Map.log("Creating dune patches");
createAreas(
new ClumpPlacer(scaleByMapSize(40, 150), 0.2, 0.1, 0),
[
@@ -110,7 +110,7 @@ createAreas(
scaleByMapSize(5, 20));
Engine.SetProgress(15);
log("Creating sand patches...");
g_Map.log("Creating sand patches");
createAreas(
new ClumpPlacer(scaleByMapSize(25, 100), 0.2, 0.1, 0),
[
@@ -121,7 +121,7 @@ createAreas(
scaleByMapSize(15, 50));
Engine.SetProgress(20);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createAreas(
new ClumpPlacer(scaleByMapSize(25, 100), 0.2, 0.1, 0),
[
@@ -132,7 +132,7 @@ createAreas(
scaleByMapSize(15, 50));
Engine.SetProgress(25);
log("Creating oasis...");
g_Map.log("Creating oasis");
createArea(
new ClumpPlacer(diskArea(oasisRadius), 0.6, 0.15, 0, mapCenter),
[
@@ -143,7 +143,7 @@ createArea(
Engine.SetProgress(30);
log("Creating oasis wildlife...");
g_Map.log("Creating oasis wildlife");
var num = Math.round(Math.PI * oasisRadius / 8);
var constraint = new AndConstraint([borderClasses(clOasis, 0, 3), avoidClasses(clOasis, 0)]);
for (var i = 0; i < num; ++i)
@@ -170,7 +170,7 @@ for (var i = 0; i < num; ++i)
0);
}
log("Creating oasis fish...");
g_Map.log("Creating oasis fish");
constraint = new AndConstraint([borderClasses(clOasis, 15, 0), avoidClasses(clFood, 5)]);
num = Math.round(Math.PI * oasisRadius / 16);
for (var i = 0; i < num; ++i)
@@ -188,7 +188,7 @@ for (var i = 0; i < num; ++i)
}
Engine.SetProgress(35);
log("Creating level 1 hills...");
g_Map.log("Creating level 1 hills");
var hillAreas = createAreas(
new ClumpPlacer(scaleByMapSize(50,300), 0.25, 0.1, 0.5),
[
@@ -201,7 +201,7 @@ var hillAreas = createAreas(
);
Engine.SetProgress(40);
log("Creating small level 1 hills...");
g_Map.log("Creating small level 1 hills");
hillAreas = hillAreas.concat(
createAreas(
new ClumpPlacer(scaleByMapSize(25,150), 0.25, 0.1, 0.5),
@@ -216,7 +216,7 @@ hillAreas = hillAreas.concat(
Engine.SetProgress(45);
log("Creating decorative rocks...");
g_Map.log("Creating decorative rocks");
createObjectGroupsByAreasDeprecated(
new SimpleGroup(
[new RandomObject([aDecorativeRock, aBush2, aBush3], 3, 8, 0, 2)],
@@ -228,7 +228,7 @@ createObjectGroupsByAreasDeprecated(
Engine.SetProgress(50);
log("Creating level 2 hills...");
g_Map.log("Creating level 2 hills");
createAreasInAreas(
new ClumpPlacer(scaleByMapSize(25, 150), 0.25, 0.1, 0),
[
@@ -242,7 +242,7 @@ createAreasInAreas(
Engine.SetProgress(55);
log("Creating level 3 hills...");
g_Map.log("Creating level 3 hills");
createAreas(
new ClumpPlacer(scaleByMapSize(12, 75), 0.25, 0.1, 0),
[
@@ -255,7 +255,7 @@ createAreas(
);
Engine.SetProgress(60);
log("Creating bumps...");
g_Map.log("Creating bumps");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 0),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetBump, 2),
@@ -265,7 +265,7 @@ createAreas(
Engine.SetProgress(65);
log("Creating forests...");
g_Map.log("Creating forests");
var [forestTrees, stragglerTrees] = getTreeCounts(500, 2500, 0.5);
var num = scaleByMapSize(10,30);
createAreas(
@@ -280,7 +280,7 @@ createAreas(
Engine.SetProgress(70);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
var 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);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clOasis, 1, clForest, 1, clPlayer, 10, clRock, 10, clHill1, 1)],
@@ -293,7 +293,7 @@ createObjectGroupsDeprecated(group, 0,
scaleByMapSize(4,16), 100
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4), new RandomObject(aBushes, 2,4, 0,2)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clOasis, 1, clForest, 1, clPlayer, 10, clMetal, 10, clRock, 5, clHill1, 1)],
@@ -302,21 +302,21 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(80);
log("Creating gazelles...");
g_Map.log("Creating gazelles");
group = new SimpleGroup([new SimpleObject(oGazelle, 5,7, 0,4)], true, clFood);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clOasis, 1, clForest, 0, clPlayer, 5, clHill1, 1, clFood, 10),
scaleByMapSize(5,20), 50
);
log("Creating goats...");
g_Map.log("Creating goats");
group = new SimpleGroup([new SimpleObject(oGoat, 2,4, 0,3)], true, clFood);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clOasis, 1, clForest, 0, clPlayer, 5, clHill1, 1, clFood, 10),
scaleByMapSize(5,20), 50
);
log("Creating camels...");
g_Map.log("Creating camels");
group = new SimpleGroup([new SimpleObject(oCamel, 2,4, 0,2)], true, clFood);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clOasis, 1, clForest, 0, clPlayer, 5, clHill1, 1, clFood, 10),
@@ -331,14 +331,14 @@ createStragglerTrees(
stragglerTrees);
Engine.SetProgress(90);
log("Creating bushes...");
g_Map.log("Creating bushes");
group = new SimpleGroup([new RandomObject(aBushes, 2,3, 0,2)]);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clOasis, 1, clHill1, 1, clPlayer, 0, clForest, 0),
scaleByMapSize(16, 262)
);
log("Creating more decorative rocks...");
g_Map.log("Creating more decorative rocks");
group = new SimpleGroup([new SimpleObject(aDecorativeRock, 1,2, 0,2)]);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clOasis, 1, clHill1, 1, clPlayer, 0, clForest, 0),
@@ -93,7 +93,7 @@ paintRiver({
paintTileClassBasedOnHeight(-Infinity, 0.5, Elevation_ExcludeMin_ExcludeMax, clWater);
log("Creating shores...");
g_Map.log("Creating shores");
for (let i = 0; i < scaleByMapSize(20, 120); ++i)
{
let position = new Vector2D(fractionToTiles(randFloat(0.1, 0.9)), fractionToTiles(randFloat(0.67, 0.74))).rotateAround(startAngle, mapCenter).round();
@@ -106,7 +106,7 @@ for (let i = 0; i < scaleByMapSize(20, 120); ++i)
]);
}
log("Creating islands...");
g_Map.log("Creating islands");
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(4, 6)), Math.floor(scaleByMapSize(16, 40)), 0.1),
[
@@ -120,7 +120,7 @@ createAreas(
paintTerrainBasedOnHeight(-6, 1, 1, tWater);
log("Creating lakes...");
g_Map.log("Creating lakes");
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(5, 7)), Math.floor(scaleByMapSize(20, 50)), 0.1),
[
@@ -136,7 +136,7 @@ paintTileClassBasedOnHeight(-6, 0.5, 1, clWater);
Engine.SetProgress(45);
log("Creating hills...");
g_Map.log("Creating hills");
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(4, 6)), Math.floor(scaleByMapSize(16, 40)), 0.1),
[
@@ -148,7 +148,7 @@ createAreas(
scaleByMapSize(1, 4) * numPlayers
);
log("Creating forests...");
g_Map.log("Creating forests");
var [forestTrees, stragglerTrees] = getTreeCounts(100, 625, 0.7);
var types = [
[[tSnowA, tSnowA, tSnowA, tSnowA, pForestD], [tSnowA, tSnowA, tSnowA, pForestD]],
@@ -168,7 +168,7 @@ for (let type of types)
avoidClasses(clPlayer, 20, clForest, 20, clHill, 0, clWater, 8),
num);
log("Creating iceberg...");
g_Map.log("Creating iceberg");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(aIceberg, 0, 2, 0, 4)], true, clRock),
0,
@@ -177,7 +177,7 @@ createObjectGroupsDeprecated(
100);
Engine.SetProgress(70);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)])
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), size, 0.5),
@@ -208,21 +208,21 @@ for (let size of [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5,
clDirt, 16),
scaleByMapSize(20, 80));
log("Creating stone mines...");
g_Map.log("Creating stone mines");
var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0, 2, 0, 4), new SimpleObject(oStoneLarge, 1, 1, 0, 4)], true, clRock);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
scaleByMapSize(8,32), 100
);
log("Creating small stone quarries...");
g_Map.log("Creating small stone quarries");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
scaleByMapSize(8,32), 100
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clHill, 1),
@@ -236,7 +236,7 @@ createStragglerTrees(
clForest,
stragglerTrees);
log("Creating deer...");
g_Map.log("Creating deer");
group = new SimpleGroup(
[new SimpleObject(oWalrus, 5,7, 0,4)],
true, clFood
@@ -248,7 +248,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(75);
log("Creating sheep...");
g_Map.log("Creating sheep");
group = new SimpleGroup(
[new SimpleObject(oArcticWolf, 2,3, 0,2)],
true, clFood
@@ -258,7 +258,7 @@ createObjectGroupsDeprecated(group, 0,
3 * numPlayers, 50
);
log("Creating fish...");
g_Map.log("Creating fish");
group = new SimpleGroup(
[new SimpleObject(oFish, 2,3, 0,2)],
true, clFood
+23 -26
View File
@@ -64,14 +64,12 @@ var forestDistance = scaleByMapSize(6, 20);
var [playerIDs, playerPosition] = playerPlacementCircle(fractionToTiles(0.35));
log("Creating small oasis near the players...")
g_Map.log("Creating small oasis near the players...")
var forestDist = 1.2 * defaultPlayerBaseRadius();
for (let i = 0; i < numPlayers; ++i)
{
// Create starting batches of wood
let forestPosition;
let forestAngle;
do {
forestAngle = Math.PI / 3 * randFloat(1, 2);
forestPosition = Vector2D.add(playerPosition[i], new Vector2D(forestDist, 0).rotate(-forestAngle));
@@ -84,26 +82,25 @@ for (let i = 0; i < numPlayers; ++i)
],
avoidClasses(clBaseResource, 0)));
log("Creating the water patch explaining the forest for player " + playerIDs[i] + "...");
let waterPosition;
let flowerPosition;
let reedsPosition;
do {
let waterAngle = forestAngle + randFloat(1, 5) / 3 * Math.PI;
waterPosition = Vector2D.add(forestPosition, new Vector2D(6, 0).rotate(-waterAngle)).round();
let flowerPosition = Vector2D.add(forestPosition, new Vector2D(3, 0).rotate(-waterAngle)).round();
createObjectGroup(new SimpleGroup([new SimpleObject(aFlower1, 1, 5, 0, 3)], true, undefined, flowerPosition), 0);
let reedsPosition = Vector2D.add(forestPosition, new Vector2D(5, 0).rotate(-waterAngle)).round();
createObjectGroup(new SimpleGroup([new SimpleObject(aReedsA, 1, 3, 0, 0)], true, undefined, reedsPosition), 0);
flowerPosition = Vector2D.add(forestPosition, new Vector2D(3, 0).rotate(-waterAngle)).round();
reedsPosition = Vector2D.add(forestPosition, new Vector2D(5, 0).rotate(-waterAngle)).round();
} while (
!createArea(
new ClumpPlacer(60, 0.9, 0.4, 5, waterPosition),
new ClumpPlacer(diskArea(4.5), 0.9, 0.4, 5, waterPosition),
[
new LayeredPainter([tShore, tWater], [1]),
new SmoothElevationPainter(ELEVATION_SET, heightSeaGround, 3)
],
avoidClasses(clBaseResource, 0)));
createObjectGroup(new SimpleGroup([new SimpleObject(aFlower1, 1, 5, 0, 3)], true, undefined, flowerPosition), 0);
createObjectGroup(new SimpleGroup([new SimpleObject(aReedsA, 1, 3, 0, 0)], true, undefined, reedsPosition), 0);
}
Engine.SetProgress(20);
@@ -137,7 +134,7 @@ placePlayerBases({
});
Engine.SetProgress(30);
log("Creating central oasis...");
g_Map.log("Creating central oasis");
createArea(
new ClumpPlacer(diskArea(forestDistance + shoreDistance + waterRadius), 0.8, 0.2, 10, mapCenter),
[
@@ -148,21 +145,21 @@ createArea(
Engine.SetProgress(40);
log("Creating bumps...");
g_Map.log("Creating bumps");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetBump, 3),
avoidClasses(clPlayer, 10, clBaseResource, 6, clOasis, 4),
scaleByMapSize(30, 70));
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createAreas(
new ClumpPlacer(80, 0.3, 0.06, 1),
new TerrainPainter(tDirt),
avoidClasses(clPlayer, 10, clBaseResource, 6, clOasis, 4, clForest, 4),
scaleByMapSize(15, 50));
log("Creating dunes...");
g_Map.log("Creating dunes");
createAreas(
new ClumpPlacer(120, 0.3, 0.06, 1),
[
@@ -176,7 +173,7 @@ Engine.SetProgress(50);
if (mapSize > 150 && randBool())
{
log("Creating path though the oasis...");
g_Map.log("Creating path though the oasis");
let pathWidth = scaleByMapSize(7, 18);
let points = distributePointsOnCircle(2, randomAngle(), waterRadius + shoreDistance + forestDistance + pathWidth, mapCenter)[0];
createArea(
@@ -187,11 +184,11 @@ if (mapSize > 150 && randBool())
new TileClassPainter(clPassage)
]);
}
log("Creating some straggler trees around the passage...");
g_Map.log("Creating some straggler trees around the passage");
var group = new SimpleGroup([new SimpleObject(ePalmTall, 1,1, 0,0),new SimpleObject(ePalmShort, 1, 2, 1, 2), new SimpleObject(aBushA, 0,2, 1,3)], true, clForest);
createObjectGroupsDeprecated(group, 0, stayClasses(clPassage, 3), scaleByMapSize(60, 250), 100);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
group = new SimpleGroup([new SimpleObject(eStoneMine, 1,1, 0,0),new SimpleObject(ePalmShort, 1,2, 3,3),new SimpleObject(ePalmTall, 0,1, 3,3)
,new SimpleObject(aBushB, 1,1, 2,2), new SimpleObject(aBushA, 0,2, 1,3)], true, clRock);
createObjectGroupsDeprecated(group, 0,
@@ -199,7 +196,7 @@ createObjectGroupsDeprecated(group, 0,
scaleByMapSize(6,25), 100
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(eMetalMine, 1,1, 0,0),new SimpleObject(ePalmShort, 1,2, 2,3),new SimpleObject(ePalmTall, 0,1, 2,2)
,new SimpleObject(aBushB, 1,1, 2,2), new SimpleObject(aBushA, 0,2, 1,3)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
@@ -208,13 +205,13 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(65);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
group = new SimpleGroup( [new SimpleObject(aRock, 2,4, 0,2)], true, undefined );
createObjectGroupsDeprecated(group, 0, avoidClasses(clOasis, 3, clForest, 0, clPlayer, 10, clHill, 1, clFood, 20), 30, scaleByMapSize(10, 50));
Engine.SetProgress(70);
log("Creating camels...");
g_Map.log("Creating camels");
group = new SimpleGroup(
[new SimpleObject(eCamel, 1,2, 0,4)],
true, clFood
@@ -225,7 +222,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(75);
log("Creating gazelles...");
g_Map.log("Creating gazelles");
group = new SimpleGroup(
[new SimpleObject(eGazelle, 2,4, 0,2)],
true, clFood
@@ -236,7 +233,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(85);
log("Creating oasis animals...");
g_Map.log("Creating oasis animals");
for (let i = 0; i < scaleByMapSize(5, 30); ++i)
{
let animalPos = Vector2D.add(mapCenter, new Vector2D(forestDistance + shoreDistance + waterRadius, 0).rotate(randomAngle()));
@@ -256,7 +253,7 @@ for (let i = 0; i < scaleByMapSize(5, 30); ++i)
}
Engine.SetProgress(90);
log("Creating bushes...");
g_Map.log("Creating bushes");
var group = new SimpleGroup(
[new SimpleObject(aBushB, 1,2, 0,2), new SimpleObject(aBushA, 2,4, 0,2)]
);
@@ -270,7 +267,7 @@ var objectsWaterFlora = [
new SimpleObject(aReedsB, 5, 12, 0, 2)
];
log("Creating sand blows and beautifications");
g_Map.log("Creating sand blows and beautifications");
for (var sandx = 0; sandx < mapSize; sandx += 4)
for (var sandz = 0; sandz < mapSize; sandz += 4)
{
@@ -96,7 +96,7 @@ placePlayerBases({
});
Engine.SetProgress(10);
log("Creating rock patches...");
g_Map.log("Creating rock patches");
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(3, 6)), Math.floor(scaleByMapSize(20, 45)), 0),
[
@@ -107,7 +107,7 @@ createAreas(
scaleByMapSize(5, 20));
Engine.SetProgress(15);
log("Creating secondary rock patches...");
g_Map.log("Creating secondary rock patches");
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), Math.floor(scaleByMapSize(15, 40)), 0),
[
@@ -118,7 +118,7 @@ createAreas(
scaleByMapSize(15, 50));
Engine.SetProgress(20);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createAreas(
new ChainPlacer(
1,
@@ -133,7 +133,7 @@ createAreas(
scaleByMapSize(15, 50));
Engine.SetProgress(25);
log("Creating centeral plateau...");
g_Map.log("Creating centeral plateau");
createArea(
new ChainPlacer(
2,
@@ -151,7 +151,7 @@ createArea(
avoidClasses(clPlayer, 18));
Engine.SetProgress(30);
log("Creating hills...");
g_Map.log("Creating hills");
for (let i = 0; i < scaleByMapSize(20, 80); ++i)
createMountain(
Math.floor(scaleByMapSize(40, 60)),
@@ -166,7 +166,7 @@ for (let i = 0; i < scaleByMapSize(20, 80); ++i)
14);
Engine.SetProgress(35);
log("Creating forests...");
g_Map.log("Creating forests");
var [forestTrees, stragglerTrees] = getTreeCounts(500, 2500, 0.7);
var types = [
[[tDirtMain, tForestFloor, pForestO], [tForestFloor, pForestO]],
@@ -193,42 +193,42 @@ for (let type of types)
num);
Engine.SetProgress(50);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
var 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);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clForest, 1, clPlayer, 10, clRock, 10, clHill, 1, clCP, 1)],
scaleByMapSize(2,8), 100
);
log("Creating small stone quarries...");
g_Map.log("Creating small stone quarries");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3), new RandomObject(aBushes, 2,4, 0,2)], true, clRock);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clForest, 1, clPlayer, 10, clRock, 10, clHill, 1, clCP, 1)],
scaleByMapSize(2,8), 100
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4), new RandomObject(aBushes, 2,4, 0,2)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clForest, 1, clPlayer, 10, clMetal, 10, clRock, 5, clHill, 1, clCP, 1)],
scaleByMapSize(2,8), 100
);
log("Creating centeral stone mines...");
g_Map.log("Creating centeral stone mines");
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);
createObjectGroupsDeprecated(group, 0,
stayClasses(clCP, 6),
5*scaleByMapSize(5,30), 50
);
log("Creating small stone quarries...");
g_Map.log("Creating small stone quarries");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3), new RandomObject(aBushes, 2,4, 0,2)], true, clRock);
createObjectGroupsDeprecated(group, 0,
stayClasses(clCP, 6),
5*scaleByMapSize(5,30), 50
);
log("Creating centeral metal mines...");
g_Map.log("Creating centeral metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4), new RandomObject(aBushes, 2,4, 0,2)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
stayClasses(clCP, 6),
@@ -237,7 +237,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(60);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aDecorativeRock, 1,3, 0,1)],
true
@@ -250,7 +250,7 @@ createObjectGroupsDeprecated(
Engine.SetProgress(65);
log("Creating bushes...");
g_Map.log("Creating bushes");
group = new SimpleGroup(
[new SimpleObject(aBush2, 1,2, 0,1), new SimpleObject(aBush1, 1,3, 0,2)],
true
@@ -263,7 +263,7 @@ createObjectGroupsDeprecated(
Engine.SetProgress(70);
log("Creating goat...");
g_Map.log("Creating goat");
group = new SimpleGroup(
[new SimpleObject(oGoat, 5,7, 0,4)],
true, clFood
@@ -273,7 +273,7 @@ createObjectGroupsDeprecated(group, 0,
3 * numPlayers, 50
);
log("Creating sheep...");
g_Map.log("Creating sheep");
group = new SimpleGroup(
[new SimpleObject(oSheep, 2,3, 0,2)],
true, clFood
@@ -283,7 +283,7 @@ createObjectGroupsDeprecated(group, 0,
3 * numPlayers, 50
);
log("Creating grape bush...");
g_Map.log("Creating grape bush");
group = new SimpleGroup(
[new SimpleObject(oGrapesBush, 5,7, 0,4)],
true, clFood
@@ -293,7 +293,7 @@ createObjectGroupsDeprecated(group, 0,
randIntInclusive(1, 4) * numPlayers + 2, 50
);
log("Creating camels...");
g_Map.log("Creating camels");
group = new SimpleGroup(
[new SimpleObject(oCamel, 2,3, 0,2)],
true, clFood
@@ -118,14 +118,14 @@ paintTileClassBasedOnHeight(-Infinity, heightLand, Elevation_ExcludeMin_ExcludeM
paintTerrainBasedOnHeight(-Infinity, heightShore, Elevation_ExcludeMin_ExcludeMax, tWater);
paintTerrainBasedOnHeight(heightShore, heightLand, Elevation_ExcludeMin_ExcludeMax, tShore);
log("Creating bumps...");
g_Map.log("Creating bumps");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetBump, 2),
avoidClasses(clWater, 2, clPlayer, 20),
scaleByMapSize(100, 200));
log("Creating hills...");
g_Map.log("Creating hills");
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(4, 6)), Math.floor(scaleByMapSize(16, 40)), 0.5),
[
@@ -136,7 +136,7 @@ createAreas(
avoidClasses(clPlayer, 20, clForest, 1, clHill, 15, clWater, 0),
scaleByMapSize(1, 4) * numPlayers * 3);
log("Creating forests...");
g_Map.log("Creating forests");
var [forestTrees, stragglerTrees] = getTreeCounts(500, 2500, 0.5);
var num = scaleByMapSize(10,42);
createAreas(
@@ -150,7 +150,7 @@ createAreas(
50);
Engine.SetProgress(50);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)])
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), size, 0.5),
@@ -164,7 +164,7 @@ for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8,
scaleByMapSize(15, 45));
Engine.SetProgress(55);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)])
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), size, 0.5),
@@ -178,7 +178,7 @@ for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8,
scaleByMapSize(15, 45));
Engine.SetProgress(60);
log("Creating cyprus...");
g_Map.log("Creating cyprus");
createAreas(
new ClumpPlacer(diskArea(fractionToTiles(0.08)), 0.2, 0.1, 0.01),
[
@@ -191,7 +191,7 @@ createAreas(
1,
100);
log("Creating cyprus mines...");
g_Map.log("Creating cyprus mines");
var mines = [
new SimpleGroup([new SimpleObject(oStoneSmall, 0, 2, 0, 4), new SimpleObject(oStoneLarge, 1, 1, 0, 4)], true, clRock),
new SimpleGroup([new SimpleObject(oMetalLarge, 1, 1, 0, 4)], true, clMetal),
@@ -207,21 +207,21 @@ for (let mine of mines)
],
scaleByMapSize(4, 16));
log("Creating stone mines...");
g_Map.log("Creating stone mines");
var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clWater, 3, clHill, 1),
scaleByMapSize(4,16), 100
);
log("Creating small stone quarries...");
g_Map.log("Creating small stone quarries");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clWater, 3, clHill, 1),
scaleByMapSize(4,16), 100
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clWater, 3, clHill, 1),
@@ -230,7 +230,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(65);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aDecorativeRock, 1,3, 0,1)],
true
@@ -241,7 +241,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(16, 262), 50
);
log("Creating shrubs...");
g_Map.log("Creating shrubs");
group = new SimpleGroup(
[new SimpleObject(aBush2, 1,2, 0,1), new SimpleObject(aBush1, 1,3, 0,2), new SimpleObject(aBush4, 1,2, 0,1), new SimpleObject(aBush3, 1,3, 0,2)],
true
@@ -253,35 +253,35 @@ createObjectGroupsDeprecated(
);
Engine.SetProgress(70);
log("Creating fish...");
g_Map.log("Creating fish");
group = new SimpleGroup([new SimpleObject(oFish, 1,3, 2,6)], true, clFood);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clIsland, 2, clFood, 10), stayClasses(clWater, 5)],
3*scaleByMapSize(5,20), 50
);
log("Creating sheeps...");
g_Map.log("Creating sheeps");
group = new SimpleGroup([new SimpleObject(oSheep, 5,7, 0,4)], true, clFood);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 0, clPlayer, 7, clWater, 3, clFood, 10, clHill, 1),
scaleByMapSize(5,20), 50
);
log("Creating goats...");
g_Map.log("Creating goats");
group = new SimpleGroup([new SimpleObject(oGoat, 2,4, 0,3)], true, clFood);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 0, clPlayer, 7, clWater, 3, clFood, 10, clHill, 1),
scaleByMapSize(5,20), 50
);
log("Creating deers...");
g_Map.log("Creating deers");
group = new SimpleGroup([new SimpleObject(oDeer, 2,4, 0,2)], true, clFood);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 0, clPlayer, 7, clWater, 3, clFood, 10, clHill, 1),
scaleByMapSize(5,20), 50
);
log("Creating grape bushes...");
g_Map.log("Creating grape bushes");
group = new SimpleGroup(
[new SimpleObject(oGrapeBush, 5,7, 0,4)],
true, clFood
@@ -54,7 +54,7 @@ var treasures = [{
"count": isNomad() ? 16 : 14
}];
log("Creating player markets...");
g_Map.log("Creating player markets");
if (!isNomad())
for (let i = 0; i < numPlayers; ++i)
{
@@ -88,7 +88,7 @@ placePlayerBases({
});
Engine.SetProgress(30);
log("Creating central lake...");
g_Map.log("Creating central lake");
createArea(
new ChainPlacer(
2,
@@ -107,7 +107,7 @@ createArea(
Engine.SetProgress(40);
log("Creating small lakes...");
g_Map.log("Creating small lakes");
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(2, 4)), Math.floor(scaleByMapSize(20, 140)), 0.7),
[
@@ -123,7 +123,6 @@ Engine.SetProgress(50);
createBumps(avoidClasses(clWater, 2, clPlayer, 20));
Engine.SetProgress(60);
log("Creating hills...");
createHills(
[tPrimary, tPrimary, tSecondary],
avoidClasses(clPlayer, 20, clHill, 35),
@@ -131,7 +130,7 @@ createHills(
scaleByMapSize(20, 240));
Engine.SetProgress(65);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[[tDirt,tHalfSnow], [tHalfSnow,tSnowLimited]],
@@ -140,7 +139,7 @@ createLayeredPatches(
scaleByMapSize(15, 45),
clDirt);
log("Creating glacier patches...");
g_Map.log("Creating glacier patches");
createPatches(
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
tSecondary,
@@ -149,7 +148,7 @@ createPatches(
clDirt);
Engine.SetProgress(70);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createMines(
[
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
@@ -158,7 +157,7 @@ log("Creating stone mines...");
avoidClasses(clWater, 3, clPlayer, 20, clRock, 18, clHill, 2),
clRock);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createMines(
[
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
@@ -136,7 +136,7 @@ var terrainPerHeight = [
}
];
log("Creating initial sinusoidal noise...");
g_Map.log("Creating initial sinusoidal noise");
var baseHeights = [];
for (var ix = 0; ix < mapSize; ix++)
{
@@ -186,7 +186,7 @@ placePlayerBases({
});
Engine.SetProgress(30);
log("Creating the pyreneans...");
g_Map.log("Creating the pyreneans");
var mountainVec = new Vector2D(mountainLength, 0).rotate(-startAngle);
var mountainStart = Vector2D.sub(mapCenter, Vector2D.div(mountainVec, 2));
var mountainDirection = mountainVec.clone().normalize();
@@ -239,7 +239,7 @@ function createPyreneans()
}
}
log("Smoothing pyreneans...");
g_Map.log("Smoothing pyreneans");
for (let ix = 1; ix < mapSize - 1; ++ix)
for (let iz = 1; iz < mapSize - 1; ++iz)
{
@@ -253,7 +253,7 @@ for (let ix = 1; ix < mapSize - 1; ++ix)
}
Engine.SetProgress(48);
log("Creating passages...");
g_Map.log("Creating passages");
var passageLocation = 0.35;
var passageVec = mountainDirection.perpendicular().mult(passageLength);
@@ -275,7 +275,7 @@ for (let passLoc of [passageLocation, 1 - passageLocation])
}
Engine.SetProgress(50);
log("Smoothing the mountains...");
g_Map.log("Smoothing the mountains");
for (let ix = 1; ix < mapSize - 1; ++ix)
for (let iz = 1; iz < mapSize - 1; ++iz)
{
@@ -288,7 +288,7 @@ for (let ix = 1; ix < mapSize - 1; ++ix)
}
}
log("Creating oceans...");
g_Map.log("Creating oceans");
for (let ocean of distributePointsOnCircle(2, oceanAngle, fractionToTiles(0.48), mapCenter)[0])
createArea(
new ClumpPlacer(diskArea(fractionToTiles(0.18)), 0.9, 0.05, 10, ocean),
@@ -297,7 +297,7 @@ for (let ocean of distributePointsOnCircle(2, oceanAngle, fractionToTiles(0.48),
new TileClassPainter(clWater)
]);
log("Smoothing around the water...");
g_Map.log("Smoothing around the water");
var smoothDist = 5;
for (let ix = 1; ix < mapSize - 1; ++ix)
for (let iz = 1; iz < mapSize - 1; ++iz)
@@ -321,7 +321,7 @@ for (let ix = 1; ix < mapSize - 1; ++ix)
}
Engine.SetProgress(55);
log("Creating hills...");
g_Map.log("Creating hills");
createAreas(
new ClumpPlacer(scaleByMapSize(60, 120), 0.3, 0.06, 5),
[
@@ -331,7 +331,7 @@ createAreas(
],
avoidClasses(clWater, 5, clPlayer, 20, clBaseResource, 6, clPyrenneans, 2), scaleByMapSize(5, 35));
log("Creating forests...");
g_Map.log("Creating forests");
var types = [[tForestTransition, pForestLandVeryLight, pForestLandLight, pForestLand]];
var size = scaleByMapSize(40, 115) * Math.PI;
var num = Math.floor(scaleByMapSize(8,40) / types.length);
@@ -346,13 +346,13 @@ for (let type of types)
num);
Engine.SetProgress(60);
log("Creating lone trees...");
g_Map.log("Creating lone trees");
var num = scaleByMapSize(80,400);
var group = new SimpleGroup([new SimpleObject(oPine, 1,2, 1,3),new SimpleObject(oBeech, 1,2, 1,3)], true, clForest);
createObjectGroupsDeprecated(group, 0, avoidClasses(clWater, 3, clForest, 1, clPlayer, 8,clPyrenneans, 1), num, 20 );
log("Painting the map...");
g_Map.log("Painting the map");
for (let x = 0; x < mapSize; ++x)
for (let z = 0; z < mapSize; ++z)
{
@@ -385,7 +385,7 @@ function getShoreTerrain(position, height, heightDiff)
return undefined;
}
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
for (let size of [scaleByMapSize(3, 20), scaleByMapSize(5, 40), scaleByMapSize(8, 60)])
createAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -396,7 +396,7 @@ for (let size of [scaleByMapSize(3, 20), scaleByMapSize(5, 40), scaleByMapSize(8
avoidClasses(clWater, 3, clForest, 0, clPyrenneans,5, clHill, 0, clDirt, 5, clPlayer, 6),
scaleByMapSize(15, 45));
log("Creating grass patches...");
g_Map.log("Creating grass patches");
for (let size of [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5, 80)])
createAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -407,60 +407,60 @@ for (let size of [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5
Engine.SetProgress(70);
// making more in dirt areas so as to appear different
log("Creating small grass tufts...");
g_Map.log("Creating small grass tufts");
var group = new SimpleGroup( [new SimpleObject(aGrassShort, 1,2, 0,1, -Math.PI / 8, Math.PI / 8)] );
createObjectGroupsDeprecated(group, 0, avoidClasses(clWater, 2, clHill, 2, clPlayer, 5, clDirt, 0, clPyrenneans,2), scaleByMapSize(13, 200) );
createObjectGroupsDeprecated(group, 0, stayClasses(clDirt,1), scaleByMapSize(13, 200),10);
log("Creating large grass tufts...");
g_Map.log("Creating large grass tufts");
group = new SimpleGroup( [new SimpleObject(aGrass, 2,4, 0,1.8, -Math.PI / 8, Math.PI / 8), new SimpleObject(aGrassShort, 3,6, 1.2,2.5, -Math.PI / 8, Math.PI / 8)] );
createObjectGroupsDeprecated(group, 0, avoidClasses(clWater, 3, clHill, 2, clPlayer, 5, clDirt, 1, clForest, 0, clPyrenneans,2), scaleByMapSize(13, 200) );
createObjectGroupsDeprecated(group, 0, stayClasses(clDirt,1), scaleByMapSize(13, 200),10);
Engine.SetProgress(75);
log("Creating bushes...");
g_Map.log("Creating bushes");
group = new SimpleGroup( [new SimpleObject(aBushMedium, 1,2, 0,2), new SimpleObject(aBushSmall, 2,4, 0,2)] );
createObjectGroupsDeprecated(group, 0, avoidClasses(clWater, 2, clPlayer, 1, clPyrenneans, 1), scaleByMapSize(13, 200), 50 );
Engine.SetProgress(80);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
createObjectGroupsDeprecated(group, 0, avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clRock, 8, clPyrenneans, 1), scaleByMapSize(4,16), 100 );
log("Creating small stone quarries...");
g_Map.log("Creating small stone quarries");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroupsDeprecated(group, 0, avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clRock, 8, clPyrenneans, 1), scaleByMapSize(4,16), 100 );
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroupsDeprecated(group, 0, avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clMetal, 8, clRock, 5, clPyrenneans, 1), scaleByMapSize(4,16), 100 );
Engine.SetProgress(85);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
group = new SimpleGroup( [new SimpleObject(aRockMedium, 1,3, 0,1)], true );
createObjectGroupsDeprecated( group, 0, avoidClasses(clWater, 0, clForest, 0, clPlayer, 0), scaleByMapSize(16, 262), 50 );
log("Creating large decorative rocks...");
g_Map.log("Creating large decorative rocks");
group = new SimpleGroup( [new SimpleObject(aRockLarge, 1,2, 0,1), new SimpleObject(aRockMedium, 1,3, 0,2)], true );
createObjectGroupsDeprecated( group, 0, avoidClasses(clWater, 0, clForest, 0, clPlayer, 0), scaleByMapSize(8, 131), 50 );
Engine.SetProgress(90);
log("Creating deer...");
g_Map.log("Creating deer");
group = new SimpleGroup( [new SimpleObject(oDeer, 5,7, 0,4)], true, clFood );
createObjectGroupsDeprecated(group, 0, avoidClasses(clWater, 3, clForest, 0, clPlayer, 20, clPyrenneans, 1, clFood, 15), 3 * numPlayers, 50 );
log("Creating rabbit...");
g_Map.log("Creating rabbit");
group = new SimpleGroup( [new SimpleObject(oRabbit, 2,3, 0,2)], true, clFood );
createObjectGroupsDeprecated(group, 0, avoidClasses(clWater, 3, clForest, 0, clPlayer, 20, clPyrenneans, 1, clFood,15), 3 * numPlayers, 50 );
log("Creating berry bush...");
g_Map.log("Creating berry bush");
group = new SimpleGroup( [new SimpleObject(oBerryBush, 5,7, 0,4)],true, clFood );
createObjectGroupsDeprecated(group, 0, avoidClasses(clWater, 3, clForest, 0, clPlayer, 20, clPyrenneans, 1, clFood, 10), randIntInclusive(1, 4) * numPlayers + 2, 50);
log("Creating fish...");
g_Map.log("Creating fish");
group = new SimpleGroup( [new SimpleObject(oFish, 2,3, 0,2)], true, clFood );
createObjectGroupsDeprecated(group, 0, [avoidClasses(clFood, 15), stayClasses(clWater, 6)], 20 * numPlayers, 60 );
@@ -80,14 +80,14 @@ placePlayerBases({
});
Engine.SetProgress(15);
log("Creating bumps...");
g_Map.log("Creating bumps");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetBumpLand, 2),
avoidClasses(clPlayer, 13),
scaleByMapSize(300, 800));
log("Creating marshes...");
g_Map.log("Creating marshes");
for (let i = 0; i < 7; ++i)
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(6, 12)), Math.floor(scaleByMapSize(15, 60)), 0.8),
@@ -99,7 +99,7 @@ for (let i = 0; i < 7; ++i)
avoidClasses(clPlayer, 20, clWater, Math.round(scaleByMapSize(7,16)*randFloat(0.8,1.35))),
scaleByMapSize(4,20));
log("Creating reeds...");
g_Map.log("Creating reeds");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(aReeds, 5, 10, 0, 4), new SimpleObject(aLillies, 5, 10, 0, 4)], true),
0,
@@ -107,14 +107,14 @@ createObjectGroupsDeprecated(
scaleByMapSize(400,2000), 100);
Engine.SetProgress(40);
log("Creating bumps...");
g_Map.log("Creating bumps");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetBumpWater, 2),
stayClasses(clWater, 2),
scaleByMapSize(50, 100));
log("Creating forests...");
g_Map.log("Creating forests");
var [forestTrees, stragglerTrees] = getTreeCounts(500, 2500, 0.7);
var types = [
[[tForestFloor, tGrass, pForestD], [tForestFloor, pForestD]],
@@ -133,7 +133,7 @@ for (let type of types)
num);
Engine.SetProgress(50);
log("Creating mud patches...");
g_Map.log("Creating mud patches");
for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)])
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), size, 1),
@@ -144,21 +144,21 @@ for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8,
avoidClasses(clWater, 1, clForest, 0, clDirt, 5, clPlayer, 8),
scaleByMapSize(15, 45));
log("Creating stone mines...");
g_Map.log("Creating stone mines");
var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0, 2, 0, 4), new SimpleObject(oStoneLarge, 1, 1, 0, 4)], true, clRock);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clWater, 0, clForest, 1, clPlayer, 20, clRock, 10)],
scaleByMapSize(4,16), 100
);
log("Creating small stone quarries...");
g_Map.log("Creating small stone quarries");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clWater, 0, clForest, 1, clPlayer, 20, clRock, 10)],
scaleByMapSize(4,16), 100
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clWater, 0, clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5)],
@@ -167,7 +167,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(60);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockMedium, 1,3, 0,1)],
true
@@ -180,7 +180,7 @@ createObjectGroupsDeprecated(
Engine.SetProgress(65);
log("Creating large decorative rocks...");
g_Map.log("Creating large decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockLarge, 1,2, 0,1), new SimpleObject(aRockMedium, 1,3, 0,2)],
true
@@ -193,7 +193,7 @@ createObjectGroupsDeprecated(
Engine.SetProgress(70);
log("Creating deer...");
g_Map.log("Creating deer");
group = new SimpleGroup(
[new SimpleObject(oDeer, 5,7, 0,4)],
true, clFood
@@ -203,7 +203,7 @@ createObjectGroupsDeprecated(group, 0,
6 * numPlayers, 50
);
log("Creating horse...");
g_Map.log("Creating horse");
group = new SimpleGroup(
[new SimpleObject(oHorse, 1,3, 0,4)],
true, clFood
@@ -215,7 +215,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(75);
log("Creating rabbit...");
g_Map.log("Creating rabbit");
group = new SimpleGroup(
[new SimpleObject(oRabbit, 5,7, 0,2)],
true, clFood
@@ -225,7 +225,7 @@ createObjectGroupsDeprecated(group, 0,
6 * numPlayers, 50
);
log("Creating wolf...");
g_Map.log("Creating wolf");
group = new SimpleGroup(
[new SimpleObject(oWolf, 1,3, 0,4)],
true, clFood
@@ -235,7 +235,7 @@ createObjectGroupsDeprecated(group, 0,
3 * numPlayers, 50
);
log("Creating berry bush...");
g_Map.log("Creating berry bush");
group = new SimpleGroup(
[new SimpleObject(oBerryBush, 5,7, 0,4)],
true, clFood
@@ -255,7 +255,7 @@ createStragglerTrees(
Engine.SetProgress(85);
log("Creating small grass tufts...");
g_Map.log("Creating small grass tufts");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(aGrassShort, 1, 2, 0, 1)]),
0,
@@ -264,7 +264,7 @@ createObjectGroupsDeprecated(
Engine.SetProgress(90);
log("Creating large grass tufts...");
g_Map.log("Creating large grass tufts");
createObjectGroupsDeprecated(
new SimpleGroup(
[
@@ -277,7 +277,7 @@ createObjectGroupsDeprecated(
Engine.SetProgress(95);
log("Creating bushes...");
g_Map.log("Creating bushes");
createObjectGroupsDeprecated(
new SimpleGroup(
[
@@ -77,7 +77,7 @@ stripWidthsRight = stripWidthsRight.map(strip => [1 - strip[1], 1 - strip[0]]);
var stripWidths = stripWidthsLeft.concat(stripWidthsRight);
log("Creating strips...");
g_Map.log("Creating strips");
for (let i = 0; i < stripWidths.length; ++i)
{
clStrip[i] = g_Map.createTileClass();
@@ -110,7 +110,7 @@ var playerPosition = playerPlacementLine(startAngle, mapCenter, fractionToTiles(
// Either left vs right or top vs bottom
var playerIDs = randBool() ? sortAllPlayers() : primeSortAllPlayers();
log("Ensuring player territory...");
g_Map.log("Ensuring player territory");
var playerRadius = scaleByMapSize(12, 20);
for (let i = 0; i < numPlayers; ++i)
createArea(
@@ -160,7 +160,7 @@ Engine.SetProgress(40);
if (!isNomad())
{
log("Creating gaia...");
g_Map.log("Creating gaia");
for (let i = 0; i < 2; ++i)
for (let j = 0; j < scaleByMapSize(1, 8); ++j)
createObjectGroupsDeprecated(
@@ -186,7 +186,7 @@ if (!isNomad())
50);
}
log("Creating hills...");
g_Map.log("Creating hills");
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(4, 6)), Math.floor(scaleByMapSize(16, 40)), 0.1),
[
@@ -203,11 +203,10 @@ createAreas(
],
scaleByMapSize(1, 5));
log("Creating bumps...");
createBumps(avoidClasses(clPlayer, 8, clWater, 2), scaleByMapSize(20, 150), 2, 8, 4, 1, 4);
Engine.SetProgress(50);
log("Creating forests...");
g_Map.log("Creating forests");
var [forestTrees, stragglerTrees] = getTreeCounts(1000, 4000, 0.7);
var types = [
[[tGrass, tGrass, tGrass, tGrass, pForestD], [tGrass, tGrass, tGrass, pForestD]],
@@ -251,7 +250,7 @@ createStragglerTrees(
Engine.SetProgress(60);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)])
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), size, 0.5),
@@ -268,7 +267,7 @@ for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8,
clDirt, 16),
scaleByMapSize(20, 80));
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
for (let size of [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)])
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), size, 0.5),
@@ -285,7 +284,7 @@ for (let size of [scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5,
clDirt, 16),
scaleByMapSize(20, 80));
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createObjectGroupsDeprecated(
new SimpleGroup(
[
@@ -305,7 +304,7 @@ createObjectGroupsDeprecated(
9 * scaleByMapSize(1, 4),
100);
log("Creating small stone mines...");
g_Map.log("Creating small stone mines");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oStoneSmall, 2, 5, 1, 3)], true, clRock),
0,
@@ -319,7 +318,7 @@ createObjectGroupsDeprecated(
9 * scaleByMapSize(1, 4),
100);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oMetalLarge, 1, 1, 0, 4)], true, clMetal),
0,
@@ -334,7 +333,7 @@ createObjectGroupsDeprecated(
9 * scaleByMapSize(1, 4),
100);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(aRockMedium, 1, 3, 0, 1)], true),
0,
@@ -348,7 +347,7 @@ createObjectGroupsDeprecated(
3 * scaleByMapSize(16, 262),
50);
log("Creating large decorative rocks...");
g_Map.log("Creating large decorative rocks");
createObjectGroupsDeprecated(
new SimpleGroup([
new SimpleObject(aRockLarge, 1, 2, 0, 1),
@@ -366,7 +365,7 @@ createObjectGroupsDeprecated(
3 * scaleByMapSize(8, 131),
50);
log("Creating small grass tufts...");
g_Map.log("Creating small grass tufts");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(aBush1, 1, 2, 0, 1, -Math.PI / 8, Math.PI / 8)]),
0,
@@ -380,7 +379,7 @@ createObjectGroupsDeprecated(
8 * scaleByMapSize(13, 200));
Engine.SetProgress(70);
log("Creating large grass tufts...");
g_Map.log("Creating large grass tufts");
createObjectGroupsDeprecated(
new SimpleGroup([
new SimpleObject(aBush2, 2, 4, 0, 1.8, -Math.PI / 8, Math.PI / 8),
@@ -398,7 +397,7 @@ log("Creating large grass tufts...");
8 * scaleByMapSize(13, 200));
Engine.SetProgress(85);
log("Creating bushes...");
g_Map.log("Creating bushes");
createObjectGroupsDeprecated(
new SimpleGroup([
new SimpleObject(aBush3, 1, 2, 0, 2),
@@ -412,7 +411,7 @@ log("Creating bushes...");
clDirt, 1),
8 * scaleByMapSize(13, 200), 50);
log("Creating deer...");
g_Map.log("Creating deer");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oDeer, 5, 7, 0, 4)], true, clFood),
0,
@@ -426,7 +425,7 @@ log("Creating deer...");
3 * numPlayers,
50);
log("Creating boar...");
g_Map.log("Creating boar");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oBoar, 2, 4, 0, 4)], true, clFood),
0,
@@ -440,7 +439,7 @@ log("Creating boar...");
3 * numPlayers,
50);
log("Creating tigers...");
g_Map.log("Creating tigers");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oTiger, 1, 1, 0, 4)], true, clFood),
0,
@@ -455,7 +454,7 @@ createObjectGroupsDeprecated(
50);
Engine.SetProgress(95);
log("Creating berry bush...");
g_Map.log("Creating berry bush");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oBush, 5, 7, 0, 4)], true, clFood),
0,
@@ -469,7 +468,7 @@ createObjectGroupsDeprecated(
randIntInclusive(1, 4) * numPlayers + 2,
50);
log("Creating fish...");
g_Map.log("Creating fish");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oFish, 2, 3, 0, 2)], true, clFood),
0,
@@ -97,7 +97,7 @@ placePlayerBases({
}
});
log("Creating central lake...");
g_Map.log("Creating central lake");
createArea(
new ClumpPlacer(diskArea(fractionToTiles(0.075)), 0.7, 0.1, 10, mapCenter),
[
@@ -106,7 +106,7 @@ createArea(
new TileClassPainter(clWater)
]);
log("Creating rivers between opponents...");
g_Map.log("Creating rivers between opponents");
let numRivers = isNomad() ? randIntInclusive(4, 8) : numPlayers;
let rivers = distributePointsOnCircle(numRivers, startAngle + Math.PI / numRivers, fractionToTiles(0.5), mapCenter)[0];
for (let i = 0; i < numRivers; ++i)
@@ -168,7 +168,7 @@ createForests(
Engine.SetProgress(50);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[[tMainTerrain,tTier1Terrain],[tTier1Terrain,tTier2Terrain], [tTier2Terrain,tTier3Terrain]],
@@ -177,7 +177,7 @@ createLayeredPatches(
scaleByMapSize(15, 45),
clDirt);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createPatches(
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
tTier4Terrain,
@@ -186,7 +186,7 @@ createPatches(
clDirt);
Engine.SetProgress(55);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createMines(
[
[new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)],
@@ -195,7 +195,7 @@ createMines(
avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
clRock);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createMines(
[
[new SimpleObject(oMetalLarge, 1,1, 0,4)]
@@ -19,7 +19,8 @@ function setSelectedBiome()
function setBiome(biomeID)
{
log("Setting biome "+ biomeID);
RandomMapLogger.prototype.printDirectly("Setting biome " + biomeID + ".\n");
loadBiomeFile("defaultbiome");
setSkySet(pickRandom(["cirrus", "cumulus", "sunny"]));
@@ -35,7 +35,7 @@ function createForests(terrainSet, constraint, tileClass, treeCount)
}
];
log("Creating forests...");
g_Map.log("Creating forests");
let numberOfForests = Math.floor(treeCount / (scaleByMapSize(3, 6) * getNumPlayers() * forestVariants.length));
for (let forestVariant of forestVariants)
createAreas(
@@ -53,7 +53,7 @@ function createForests(terrainSet, constraint, tileClass, treeCount)
*/
function createStragglerTrees(templateNames, constraint, tileClass, treeCount)
{
log("Creating straggler trees...");
g_Map.log("Creating straggler trees");
for (let templateName of templateNames)
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(templateName, 1, 1, 0, 3)], true, tileClass),
@@ -82,7 +82,6 @@ function createMines(objects, constraint, tileClass, count)
*/
function createStoneMineFormation(position, templateName, terrain, radius = 2.5, count = 8, startAngle = undefined, maxOffset = 1)
{
log("Creating small stone mine circle...");
createArea(
new ChainPlacer(radius / 2, radius, 2, 1, position, undefined, [5]),
new TerrainPainter(terrain));
@@ -102,7 +101,7 @@ function createStoneMineFormation(position, templateName, terrain, radius = 2.5,
*/
function createFood(objects, counts, constraint, tileClass)
{
log("Creating food...");
g_Map.log("Creating food");
for (let i = 0; i < objects.length; ++i)
createObjectGroupsDeprecated(
new SimpleGroup(objects[i], true, tileClass),
@@ -117,7 +116,7 @@ function createFood(objects, counts, constraint, tileClass)
*/
function createDecoration(objects, counts, constraint)
{
log("Creating decoration...");
g_Map.log("Creating decoration");
for (let i = 0; i < objects.length; ++i)
createObjectGroupsDeprecated(
new SimpleGroup(objects[i], true),
@@ -7,7 +7,7 @@
*/
function createBumps(constraint, count, minSize, maxSize, spread, failFraction = 0, elevation = 2)
{
log("Creating bumps...");
g_Map.log("Creating bumps");
createAreas(
new ChainPlacer(
minSize || 1,
@@ -24,7 +24,7 @@ function createBumps(constraint, count, minSize, maxSize, spread, failFraction =
*/
function createHills(terrainset, constraint, tileClass, count, minSize, maxSize, spread, failFraction = 0.5, elevation = 18, elevationSmoothing = 2)
{
log("Creating hills...");
g_Map.log("Creating hills");
createAreas(
new ChainPlacer(
minSize || 1,
@@ -45,7 +45,7 @@ function createHills(terrainset, constraint, tileClass, count, minSize, maxSize,
*/
function createMountains(terrain, constraint, tileClass, count, maxHeight, minRadius, maxRadius, numCircles)
{
log("Creating mountains...");
g_Map.log("Creating mountains");
let mapSize = g_Map.getSize();
for (let i = 0; i < (count || scaleByMapSize(1, 4) * getNumPlayers()); ++i)
@@ -216,7 +216,7 @@ function createMountain(maxHeight, minRadius, maxRadius, numCircles, constraints
*/
function createVolcano(position, tileClass, terrainTexture, lavaTextures, smoke, elevationType)
{
log("Creating volcano...");
g_Map.log("Creating volcano");
let clLava = g_Map.createTileClass();
let layers = [
@@ -332,7 +332,7 @@ function createLayeredPatches(sizes, terrains, terrainWidths, constraint, count,
*/
function paintRiver(args)
{
log("Creating river...");
g_Map.log("Creating river");
// Model the river meandering as the sum of two sine curves.
let meanderShort = fractionToTiles(args.meanderShort / scaleByMapSize(35, 160));
@@ -449,7 +449,7 @@ function rndRiver(f, seed)
*/
function createTributaryRivers(riverAngle, riverCount, riverWidth, heightRiverbed, heightRange, maxAngle, tributaryRiverTileClass, shallowTileClass, constraint)
{
log("Creating tributary rivers...");
g_Map.log("Creating tributary rivers");
let waviness = 0.4;
let smoothness = scaleByMapSize(3, 12);
let offset = 0.1;
@@ -500,6 +500,8 @@ function createTributaryRivers(riverAngle, riverCount, riverWidth, heightRiverbe
// Create shallows
if (shallowTileClass)
{
g_Map.log("Creating shallows in the tributary rivers...");
for (let z of [0.25, 0.75])
createPassage({
"start": new Vector2D(mapBounds.left, fractionToTiles(z)).rotateAround(riverAngle, mapCenter),
@@ -512,6 +514,7 @@ function createTributaryRivers(riverAngle, riverCount, riverWidth, heightRiverbe
"maxHeight": heightShallow,
"tileClass": shallowTileClass
});
}
}
/**
@@ -0,0 +1,45 @@
function RandomMapLogger()
{
this.lastTime = undefined;
this.startTime = Date.now();
this.prefix = ""; // seems noisy
this.printDirectly(
this.prefix +
"Generating " + g_MapSettings.Name +
" of size " + g_MapSettings.Size +
" and " + getNumPlayers() + " players.\n");
}
RandomMapLogger.prototype.printDirectly = function(string)
{
log(string);
print(string);
};
RandomMapLogger.prototype.print = function(string)
{
this.printDuration();
this.printDirectly(this.prefix + string + "...");
this.lastTime = Date.now();
};
RandomMapLogger.prototype.printDuration = function()
{
if (!this.lastTime)
return;
this.printDurationDirectly("", this.lastTime);
this.lastTime = Date.now();
};
RandomMapLogger.prototype.close = function()
{
this.printDuration();
this.printDurationDirectly(this.prefix + "Total map generation time:", this.startTime);
};
RandomMapLogger.prototype.printDurationDirectly = function(text, startTime)
{
this.printDirectly(text + " " + ((Date.now() - startTime) / 1000).toFixed(3) + "s.\n");
};
@@ -133,6 +133,8 @@ function placeStartingWalls(position, playerID, wallType, orientation = BUILDING
*/
function placePlayerBases(playerBaseArgs)
{
g_Map.log("Creating playerbases");
let [playerIDs, playerPosition] = playerBaseArgs.PlayerPlacement;
for (let i = 0; i < getNumPlayers(); ++i)
@@ -151,8 +153,6 @@ function placePlayerBase(playerBaseArgs)
if (isNomad())
return;
log("Creating base for player " + playerBaseArgs.playerID + "...");
placeCivDefaultStartingEntities(playerBaseArgs.playerPosition, playerBaseArgs.playerID, playerBaseArgs.Walls !== undefined ? playerBaseArgs.Walls : true);
if (playerBaseArgs.PlayerTileClass)
@@ -436,6 +436,8 @@ function placePlayersNomad(playerClass, constraints)
if (!isNomad())
return undefined;
g_Map.log("Placing nomad starting units");
let distance = scaleByMapSize(60, 240);
let constraint = new AndConstraint(constraints);
@@ -445,11 +447,10 @@ function placePlayersNomad(playerClass, constraints)
for (let i = 0; i < numPlayers; ++i)
{
log("Determine starting units for player " + playerIDs[i] + "...");
let objects = getStartingEntities(playerIDs[i]).filter(ents => ents.Template.startsWith("units/")).map(
ents => new SimpleObject(ents.Template, ents.Count || 1, ents.Count || 1, 1, 3));
log("Ensure resources for a civic center...");
// Add treasure if too few resources for a civic center
let ccCost = Engine.GetTemplate("structures/" + getCivCode(playerIDs[i]) + "_civil_centre").Cost.Resources;
for (let resourceType in ccCost)
{
@@ -462,7 +463,7 @@ function placePlayersNomad(playerClass, constraints)
objects.push(new SimpleObject(treasureTemplate, count, count, 3, 5));
}
log("Placing player units...");
// Try place these entities at a random location
let group = new SimpleGroup(objects, true, playerClass);
let success = false;
for (let distanceFactor of [1, 1/2, 1/4, 0])
@@ -6,7 +6,7 @@
*/
function RandomMap(baseHeight, baseTerrain)
{
log("Initializing map...");
this.logger = new RandomMapLogger();
// Size must be 0 to 1024, divisible by patches
this.size = g_MapSettings.Size;
@@ -61,6 +61,11 @@ function RandomMap(baseHeight, baseTerrain)
this.entityCount = 150;
}
RandomMap.prototype.log = function(text)
{
this.logger.print(text);
};
/**
* Returns the ID of a texture name.
* Creates a new ID if there isn't one assigned yet.
@@ -378,7 +383,7 @@ RandomMap.prototype.exportEntityList = function()
if (this.terrainEntities[x][z])
this.entities.push(this.terrainEntities[x][z]);
log("Number of entities: " + this.entities.length);
this.logger.printDirectly("Total entities: " + this.entities.length + ".\n")
return this.entities;
};
@@ -427,11 +432,11 @@ RandomMap.prototype.exportTerrainTextures = function()
RandomMap.prototype.ExportMap = function()
{
log("Saving map...");
if (g_Environment.Water.WaterBody.Height === undefined)
g_Environment.Water.WaterBody.Height = SEA_LEVEL - 0.1;
this.logger.close();
Engine.ExportMap({
"entities": this.exportEntityList(),
"height": this.exportHeightData(),
@@ -860,7 +860,8 @@ function placeGenericFortress(center, radius = 20, playerId = 0, style, irregula
}
++tries;
}
log("placeGenericFortress: Reduced overlap to " + minOverlap + " after " + tries + " tries");
log("placeGenericFortress: Reduced overlap to " + minOverlap + " after " + tries + " tries...");
// Place wall
for (let pointIndex = 0; pointIndex < bestPointDerivation.length; ++pointIndex)
@@ -18,6 +18,8 @@ var g_Props = {
*/
function addBluffs(constraint, size, deviation, fill, baseHeight)
{
g_Map.log("Creating bluffs");
var constrastTerrain = g_Terrains.tier2Terrain;
if (currentBiome() == "generic/tropic")
@@ -298,6 +300,8 @@ function addBluffs(constraint, size, deviation, fill, baseHeight)
*/
function addDecoration(constraint, size, deviation, fill)
{
g_Map.log("Creating decoration");
var offset = getRandomDeviation(size, deviation);
var decorations = [
[
@@ -412,6 +416,8 @@ function addElevation(constraint, el)
*/
function addHills(constraint, size, deviation, fill)
{
g_Map.log("Creating hills");
addElevation(constraint, {
"class": g_TileClasses.hill,
"painter": [g_Terrains.mainTerrain, g_Terrains.mainTerrain],
@@ -433,6 +439,8 @@ function addHills(constraint, size, deviation, fill)
*/
function addLakes(constraint, size, deviation, fill)
{
g_Map.log("Creating lakes");
var lakeTile = g_Terrains.water;
if (currentBiome() == "generic/temperate" || currentBiome() == "generic/tropic")
@@ -487,6 +495,8 @@ function addLakes(constraint, size, deviation, fill)
*/
function addLayeredPatches(constraint, size, deviation, fill)
{
g_Map.log("Creating layered patches");
var minRadius = 1;
var maxRadius = Math.floor(scaleByMapSize(3, 5));
var count = fill * scaleByMapSize(15, 45);
@@ -526,6 +536,8 @@ function addLayeredPatches(constraint, size, deviation, fill)
*/
function addMountains(constraint, size, deviation, fill)
{
g_Map.log("Creating mountains");
addElevation(constraint, {
"class": g_TileClasses.mountain,
"painter": [g_Terrains.cliff, g_Terrains.hill],
@@ -547,6 +559,8 @@ function addMountains(constraint, size, deviation, fill)
*/
function addPlateaus(constraint, size, deviation, fill)
{
g_Map.log("Creating plateaus");
var plateauTile = g_Terrains.dirt;
if (currentBiome() == "generic/snowy")
@@ -625,6 +639,8 @@ function addPlateaus(constraint, size, deviation, fill)
*/
function addProps(constraint, size, deviation, fill)
{
g_Map.log("Creating rare actors");
var offset = getRandomDeviation(size, deviation);
var props = [
@@ -667,6 +683,8 @@ function addValleys(constraint, size, deviation, fill, baseHeight)
if (baseHeight < 6)
return;
g_Map.log("Creating valleys");
let minElevation = Math.max(-baseHeight, 1 - baseHeight / (size * (deviation + 1)));
var valleySlope = g_Terrains.tier1Terrain;
@@ -714,6 +732,8 @@ function addValleys(constraint, size, deviation, fill, baseHeight)
*/
function addAnimals(constraint, size, deviation, fill)
{
g_Map.log("Creating animals");
var groupOffset = getRandomDeviation(size, deviation);
var animals = [
@@ -732,6 +752,8 @@ function addAnimals(constraint, size, deviation, fill)
function addBerries(constraint, size, deviation, fill)
{
g_Map.log("Creating berries");
let groupOffset = getRandomDeviation(size, deviation);
createObjectGroupsDeprecated(
@@ -744,6 +766,8 @@ function addBerries(constraint, size, deviation, fill)
function addFish(constraint, size, deviation, fill)
{
g_Map.log("Creating fish");
var groupOffset = getRandomDeviation(size, deviation);
var fishes = [
@@ -765,6 +789,8 @@ function addForests(constraint, size, deviation, fill)
if (currentBiome() == "generic/savanna")
return;
g_Map.log("Creating forests");
let treeTypes = [
[
g_Terrains.forestFloor2 + TERRAIN_SEPARATOR + g_Gaia.tree1,
@@ -811,6 +837,8 @@ function addForests(constraint, size, deviation, fill)
function addMetal(constraint, size, deviation, fill)
{
g_Map.log("Creating metal mines");
var offset = getRandomDeviation(size, deviation);
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(g_Gaia.metalLarge, offset, offset, 0, 4 * offset)], true, g_TileClasses.metal),
@@ -822,6 +850,8 @@ function addMetal(constraint, size, deviation, fill)
function addSmallMetal(constraint, size, mixes, amounts)
{
g_Map.log("Creating small metal mines");
let deviation = getRandomDeviation(size, mixes);
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(g_Gaia.metalSmall, 2 * deviation, 5 * deviation, deviation, 3 * deviation)], true, g_TileClasses.metal),
@@ -836,6 +866,8 @@ function addSmallMetal(constraint, size, mixes, amounts)
*/
function addStone(constraint, size, deviation, fill)
{
g_Map.log("Creating stone mines");
var offset = getRandomDeviation(size, deviation);
var mines = [
@@ -862,6 +894,8 @@ function addStone(constraint, size, deviation, fill)
*/
function addStragglerTrees(constraint, size, deviation, fill)
{
g_Map.log("Creating straggler trees");
// Ensure minimum distribution on african biome
if (currentBiome() == "generic/savanna")
{
@@ -995,6 +1029,8 @@ function unreachableBluff(bb, corners, baseLine, endLine)
*/
function removeBluff(points)
{
g_Map.log("Replacing bluff with plateau");
for (let point of points)
g_TileClasses.mountain.add(point);
}
@@ -121,6 +121,8 @@ function pickSize(sizes)
*/
function addBases(type, distance, groupedDistance, startAngle)
{
g_Map.log("Creating bases");
let playerIDs = sortAllPlayers();
let teamsArray = getTeamsArray();
@@ -82,7 +82,7 @@ placePlayerBases({
});
Engine.SetProgress(30);
log("Creating oases...");
g_Map.log("Creating oases");
var oasisRadius = fractionToTiles(scaleByMapSize(0.19, 0.22));
for (let i = 0; i < numPlayers; ++i)
{
@@ -99,7 +99,7 @@ for (let i = 0; i < numPlayers; ++i)
}
Engine.SetProgress(50);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)])
createAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -114,7 +114,7 @@ for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8
scaleByMapSize(15, 45));
Engine.SetProgress(55);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)])
createAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -129,28 +129,28 @@ for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8
scaleByMapSize(15, 45));
Engine.SetProgress(60);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 1, clPlayer, 26, clRock, 10, clWater, 1),
2*scaleByMapSize(4,16), 100
);
log("Creating small stone quarries...");
g_Map.log("Creating small stone quarries");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 1, clPlayer, 26, clRock, 10, clWater, 1),
2*scaleByMapSize(4,16), 100
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 1, clPlayer, 26, clMetal, 10, clRock, 5, clWater, 1),
2*scaleByMapSize(4,16), 100
);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aDecorativeRock, 1,3, 0,1)],
true
@@ -161,7 +161,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(16, 262), 50
);
log("Creating shrubs...");
g_Map.log("Creating shrubs");
group = new SimpleGroup(
[new SimpleObject(aBush2, 1,2, 0,1), new SimpleObject(aBush1, 1,3, 0,2), new SimpleObject(aBush4, 1,2, 0,1), new SimpleObject(aBush3, 1,3, 0,2)],
true
@@ -172,7 +172,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(10, 100), 50
);
log("Creating small decorative rocks on mines...");
g_Map.log("Creating small decorative rocks on mines");
group = new SimpleGroup(
[new SimpleObject(aDecorativeRock, 1,3, 0,1)],
true
@@ -193,21 +193,21 @@ createObjectGroupsDeprecated(
5*scaleByMapSize(16, 262), 50
);
log("Creating gazelles...");
g_Map.log("Creating gazelles");
group = new SimpleGroup([new SimpleObject(oGazelle, 5,7, 0,4)], true, clFood);
createObjectGroupsDeprecated(group, 0,
borderClasses(clWater, 8, 5),
6*scaleByMapSize(5,20), 50
);
log("Creating goats...");
g_Map.log("Creating goats");
group = new SimpleGroup([new SimpleObject(oGoat, 2,4, 0,3)], true, clFood);
createObjectGroupsDeprecated(group, 0,
borderClasses(clWater, 8, 5),
5*scaleByMapSize(5,20), 50
);
log("Creating treasures...");
g_Map.log("Creating treasures");
group = new SimpleGroup([new SimpleObject(oFoodTreasure, 1,1, 0,2)], true, clTreasure);
createObjectGroupsDeprecated(group, 0,
borderClasses(clWater, 8, 5),
@@ -220,7 +220,7 @@ createObjectGroupsDeprecated(group, 0,
3*scaleByMapSize(5,20), 50
);
log("Creating camels...");
g_Map.log("Creating camels");
group = new SimpleGroup([new SimpleObject(oCamel, 2,4, 0,2)], true, clFood);
createObjectGroupsDeprecated(group, 0,
borderClasses(clWater, 14, 5),
+13 -13
View File
@@ -78,7 +78,7 @@ placePlayerBases({
});
Engine.SetProgress(20);
log("Creating big patches...");
g_Map.log("Creating big patches");
var patches = [tGrass2, tGrass3];
for (var i = 0; i < patches.length; i++)
createAreas(
@@ -87,7 +87,7 @@ for (var i = 0; i < patches.length; i++)
avoidClasses(clPlayer, 10),
scaleByMapSize(5, 20));
log("Creating small patches...");
g_Map.log("Creating small patches");
for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)])
for (let patch of [tDirt1, tDirt2, tDirt3])
createAreas(
@@ -96,7 +96,7 @@ for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8,
avoidClasses(clPlayer, 12),
scaleByMapSize(4, 15));
log("Creating water holes...");
g_Map.log("Creating water holes");
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), Math.floor(scaleByMapSize(20, 60)), 1),
[
@@ -108,7 +108,7 @@ createAreas(
scaleByMapSize(1, 3));
Engine.SetProgress(55);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
for (var i = 0; i < scaleByMapSize(12,30); ++i)
{
let position = new Vector2D(randIntExclusive(0, mapSize), randIntExclusive(0, mapSize));
@@ -119,7 +119,7 @@ for (var i = 0; i < scaleByMapSize(12,30); ++i)
}
}
log("Creating metal mines...");
g_Map.log("Creating metal mines");
var group = new SimpleGroup([new SimpleObject(oMetalLarge, 1, 1, 0, 4)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clPlayer, 20, clMetal, 10, clRock, 8, clWater, 4),
@@ -128,7 +128,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(65);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRock, 1,3, 0,3)],
true
@@ -141,7 +141,7 @@ createObjectGroupsDeprecated(
Engine.SetProgress(70);
log("Creating gazelle...");
g_Map.log("Creating gazelle");
group = new SimpleGroup(
[new SimpleObject(oGazelle, 5,7, 0,4)],
true, clFood
@@ -151,7 +151,7 @@ createObjectGroupsDeprecated(group, 0,
scaleByMapSize(4,12), 50
);
log("Creating zebra...");
g_Map.log("Creating zebra");
group = new SimpleGroup(
[new SimpleObject(oZebra, 5,7, 0,4)],
true, clFood
@@ -161,7 +161,7 @@ createObjectGroupsDeprecated(group, 0,
scaleByMapSize(4,12), 50
);
log("Creating giraffe...");
g_Map.log("Creating giraffe");
group = new SimpleGroup(
[new SimpleObject(oGiraffe, 2,4, 0,4), new SimpleObject(oGiraffeInfant, 0,2, 0,4)],
true, clFood
@@ -171,7 +171,7 @@ createObjectGroupsDeprecated(group, 0,
scaleByMapSize(4,12), 50
);
log("Creating elephants...");
g_Map.log("Creating elephants");
group = new SimpleGroup(
[new SimpleObject(oElephant, 2,4, 0,4), new SimpleObject(oElephantInfant, 0,2, 0,4)],
true, clFood
@@ -181,7 +181,7 @@ createObjectGroupsDeprecated(group, 0,
scaleByMapSize(4,12), 50
);
log("Creating lions...");
g_Map.log("Creating lions");
group = new SimpleGroup(
[new SimpleObject(oLion, 0,1, 0,4), new SimpleObject(oLioness, 2,3, 0,4)],
true, clFood
@@ -191,7 +191,7 @@ createObjectGroupsDeprecated(group, 0,
scaleByMapSize(4,12), 50
);
log("Creating berry bush...");
g_Map.log("Creating berry bush");
group = new SimpleGroup(
[new SimpleObject(oBerryBush, 5,7, 0,4)],
true, clFood
@@ -209,7 +209,7 @@ createStragglerTrees(
clForest,
scaleByMapSize(70, 500));
log("Creating large grass tufts...");
g_Map.log("Creating large grass tufts");
group = new SimpleGroup(
[new SimpleObject(aBush, 2,4, 0,1.8, -Math.PI / 8, Math.PI / 8)]
);
@@ -89,7 +89,7 @@ placePlayerBases({
});
Engine.SetProgress(20);
log("Creating rivers...");
g_Map.log("Creating rivers");
var riverStart = distributePointsOnCircle(numPlayers, startAngle + Math.PI / numPlayers, fractionToTiles(0.15), mapCenter)[0];
var riverEnd = distributePointsOnCircle(numPlayers, startAngle + Math.PI / numPlayers, fractionToTiles(0.49), mapCenter)[0];
@@ -97,7 +97,7 @@ for (let i = 0; i < numPlayers; ++i)
{
let neighborID = (i + 1) % numPlayers;
log("Creating lake near the center...");
// Lake near the center
createArea(
new ClumpPlacer(diskArea(scaleByMapSize(5, 30)), 0.95, 0.6, 10, riverStart[i]),
[
@@ -106,7 +106,7 @@ for (let i = 0; i < numPlayers; ++i)
],
avoidClasses(clPlayer, 5));
log("Creating the river between the players...");
// River between the players
createArea(
new PathPlacer(riverStart[i], riverEnd[i], scaleByMapSize(10, 50), 0.2, 3 * scaleByMapSize(1, 4), 0.2, 0.05),
[
@@ -116,7 +116,7 @@ for (let i = 0; i < numPlayers; ++i)
],
avoidClasses(clPlayer, 5));
log("Creating lake near the map border...");
// Lake near the map border
createArea(
new ClumpPlacer(diskArea(scaleByMapSize(5, 22)), 0.95, 0.6, 10, riverEnd[i]),
[
@@ -125,7 +125,7 @@ for (let i = 0; i < numPlayers; ++i)
],
avoidClasses(clPlayer, 5));
log("Creating shallows between neighbors...");
// Shallows between neighbors
createPassage({
"start": playerPosition[i],
"end": playerPosition[neighborID],
@@ -138,7 +138,7 @@ for (let i = 0; i < numPlayers; ++i)
"tileClass": clShallows
});
log("Creating animals in shallows...");
// Animals in shallows
let shallowPosition = Vector2D.average([playerPosition[i], playerPosition[neighborID]]).round();
let objects = [
new SimpleObject(oWildebeest, 5, 6, 0, 4),
@@ -151,14 +151,14 @@ for (let i = 0; i < numPlayers; ++i)
paintTerrainBasedOnHeight(-6, 2, 1, tWater);
log("Creating bumps...");
g_Map.log("Creating bumps");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetBump, 2),
avoidClasses(clWater, 2, clPlayer, 20),
scaleByMapSize(100, 200));
log("Creating hills...");
g_Map.log("Creating hills");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 150), 0.2, 0.1, 1),
[
@@ -169,7 +169,7 @@ createAreas(
avoidClasses(clPlayer, 20, clHill, 15, clWater, 3),
scaleByMapSize(1, 4) * numPlayers);
log("Creating forests...");
g_Map.log("Creating forests");
var [forestTrees, stragglerTrees] = getTreeCounts(160, 900, 0.02);
var types = [
[[tForestFloor, tGrass, pForest], [tForestFloor, pForest]]
@@ -189,7 +189,7 @@ for (let type of types)
);
Engine.SetProgress(50);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)])
createAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -202,7 +202,7 @@ for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8
avoidClasses(clWater, 3, clForest, 0, clHill, 0, clPlayer, 20),
scaleByMapSize(15, 45));
log("Creating grass patches...");
g_Map.log("Creating grass patches");
for (let size of [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5, 80)])
createAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -211,21 +211,21 @@ for (let size of [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5
scaleByMapSize(15, 45));
Engine.SetProgress(55);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0, 2, 0, 4), new SimpleObject(oStoneLarge, 1, 1, 0, 4)], true, clRock);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
scaleByMapSize(4,16), 100
);
log("Creating small stone quarries...");
g_Map.log("Creating small stone quarries");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clRock, 10, clHill, 1),
scaleByMapSize(4,16), 100
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clWater, 3, clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clHill, 1),
@@ -234,7 +234,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(65);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockMedium, 1,3, 0,1)],
true
@@ -245,7 +245,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(16, 262), 50
);
log("Creating large decorative rocks...");
g_Map.log("Creating large decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockLarge, 1,2, 0,1), new SimpleObject(aRockMedium, 1,3, 0,2)],
true
@@ -258,7 +258,7 @@ createObjectGroupsDeprecated(
Engine.SetProgress(70);
log("Creating wildebeest...");
g_Map.log("Creating wildebeest");
group = new SimpleGroup(
[new SimpleObject(oWildebeest, 5,7, 0,4)],
true, clFood
@@ -270,7 +270,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(75);
log("Creating gazelle...");
g_Map.log("Creating gazelle");
group = new SimpleGroup(
[new SimpleObject(oGazelle, 2,3, 0,2)],
true, clFood
@@ -280,7 +280,7 @@ createObjectGroupsDeprecated(group, 0,
3 * numPlayers, 50
);
log("Creating elephant...");
g_Map.log("Creating elephant");
group = new SimpleGroup(
[new SimpleObject(oElephant, 2,3, 0,2)],
true, clFood
@@ -290,7 +290,7 @@ createObjectGroupsDeprecated(group, 0,
3 * numPlayers, 50
);
log("Creating giraffe...");
g_Map.log("Creating giraffe");
group = new SimpleGroup(
[new SimpleObject(oGiraffe, 2,3, 0,2)],
true, clFood
@@ -300,7 +300,7 @@ createObjectGroupsDeprecated(group, 0,
3 * numPlayers, 50
);
log("Creating zebra...");
g_Map.log("Creating zebra");
group = new SimpleGroup(
[new SimpleObject(oZebra, 2,3, 0,2)],
true, clFood
@@ -310,7 +310,7 @@ createObjectGroupsDeprecated(group, 0,
3 * numPlayers, 50
);
log("Creating fish...");
g_Map.log("Creating fish");
group = new SimpleGroup(
[new SimpleObject(oFish, 2,3, 0,2)],
true, clFood
@@ -320,7 +320,7 @@ createObjectGroupsDeprecated(group, 0,
25 * numPlayers, 60
);
log("Creating berry bush...");
g_Map.log("Creating berry bush");
group = new SimpleGroup(
[new SimpleObject(oBerryBush, 5,7, 0,4)],
true, clFood
@@ -339,7 +339,7 @@ createStragglerTrees(
stragglerTrees);
var planetm = 4;
log("Creating small grass tufts...");
g_Map.log("Creating small grass tufts");
group = new SimpleGroup(
[new SimpleObject(aGrassShort, 1,2, 0,1, -Math.PI / 8, Math.PI / 8)]
);
@@ -350,7 +350,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(90);
log("Creating large grass tufts...");
g_Map.log("Creating large grass tufts");
group = new SimpleGroup(
[new SimpleObject(aGrass, 2,4, 0,1.8, -Math.PI / 8, Math.PI / 8), new SimpleObject(aGrassShort, 3,6, 1.2,2.5, -Math.PI / 8, Math.PI / 8)]
);
@@ -361,7 +361,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(95);
log("Creating bushes...");
g_Map.log("Creating bushes");
group = new SimpleGroup(
[new SimpleObject(aBushMedium, 1,2, 0,2), new SimpleObject(aBushSmall, 2,4, 0,2)]
);
@@ -182,7 +182,7 @@ placePlayerBases({
}
});
log("Creating mines...");
g_Map.log("Creating mines");
for (let [minHeight, maxHeight] of [[heighLimits[3], (heighLimits[4] + heighLimits[3]) / 2], [(heighLimits[5] + heighLimits[6]) / 2, heighLimits[7]]])
for (let [template, tileClass] of [[oStoneLarge, clRock], [oMetalLarge, clMetal]])
createObjectGroups(
@@ -198,7 +198,7 @@ for (let [minHeight, maxHeight] of [[heighLimits[3], (heighLimits[4] + heighLimi
Engine.SetProgress(50);
log("Painting textures...");
g_Map.log("Painting textures");
var betweenShallowAndShore = (heighLimits[3] + heighLimits[2]) / 2;
createArea(
new HeightPlacer(Elevation_IncludeMin_IncludeMax, heighLimits[2], betweenShallowAndShore),
@@ -213,7 +213,7 @@ createArea(
paintTileClassBasedOnHeight(heightRange.min, heighLimits[2], 1, clWater);
Engine.SetProgress(60);
log("Painting paths...");
g_Map.log("Painting paths");
var pathBlending = numPlayers <= 4;
for (let i = 0; i < numPlayers + (pathBlending ? 1 : 0); ++i)
for (let j = pathBlending ? 0 : i + 1; j < numPlayers + 1; ++j)
@@ -232,7 +232,7 @@ for (let i = 0; i < numPlayers + (pathBlending ? 1 : 0); ++i)
}
Engine.SetProgress(75);
log("Creating decoration...");
g_Map.log("Creating decoration");
createDecoration(
[
[new SimpleObject(aRockMedium, 1, 3, 0, 1)],
@@ -252,7 +252,7 @@ createDecoration(
Engine.SetProgress(80);
log("Growing fish...");
g_Map.log("Growing fish");
createFood(
[
[new SimpleObject(oFish, 2, 3, 0, 2)]
@@ -265,7 +265,7 @@ createFood(
Engine.SetProgress(85);
log("Planting reeds...");
g_Map.log("Planting reeds");
var types = [aReeds];
for (let type of types)
createObjectGroupsDeprecated(
@@ -277,7 +277,7 @@ for (let type of types)
Engine.SetProgress(90);
log("Planting trees...");
g_Map.log("Planting trees");
for (var x = 0; x < mapSize; x++)
for (var z = 0;z < mapSize;z++)
{
@@ -104,7 +104,7 @@ function createSnowflakeSearockWithCenter(sizeID)
numIslands = islandID_center + 1;
initIsConnected();
log("Creating central island...");
g_Map.log("Creating central island");
islandPos[islandID_center] = mapCenter;
createIsland(islandID_center, centralIslandRadius, clLand);
@@ -119,18 +119,18 @@ function createSnowflakeSearockWithCenter(sizeID)
let islandID_betweenPlayerAndCenterNeighbor = playerID_neighbor + 2 * numPlayers;
let islandID_tertiary = playerID + 3 * numPlayers;
log("Creating island between the player and their neighbor...");
g_Map.log("Creating island between the player and their neighbor");
isConnected[islandID_betweenPlayers][islandID_player] = 1;
isConnected[islandID_betweenPlayers][islandID_playerNeighbor] = 1;
createIslandAtRadialLocation(playerID, islandID_betweenPlayers, 1, islandBetweenPlayersDist, islandBetweenPlayersRadius);
log("Creating an island between the player and the center...");
g_Map.log("Creating an island between the player and the center");
isConnected[islandID_betweenPlayerAndCenter][islandID_player] = 1;
isConnected[islandID_betweenPlayerAndCenter][islandID_center] = 1;
isConnected[islandID_betweenPlayerAndCenter][islandID_betweenPlayerAndCenterNeighbor] = 1;
createIslandAtRadialLocation(playerID, islandID_betweenPlayerAndCenter, 0, islandBetweenPlayerAndCenterDist, islandBetweenPlayerAndCenterRadius);
log("Creating tertiary island, at the map border...");
g_Map.log("Creating tertiary island, at the map border");
isConnected[islandID_tertiary][islandID_betweenPlayers] = 1;
createIslandAtRadialLocation(playerID, islandID_tertiary, 1, tertiaryIslandDist, tertiaryIslandRadius);
}
@@ -168,7 +168,7 @@ function createSnowflakeSearockTiny()
let islandID_center = numPlayers;
log("Creating central island...");
g_Map.log("Creating central island");
islandPos[islandID_center] = mapCenter;
createIsland(numPlayers, 1, clLand);
@@ -210,7 +210,7 @@ else if (mapSize <= 320)
else
createSnowflakeSearockWithCenter(numPlayers < 6 ? "large1" : "large2");
log("Creating player islands...");
g_Map.log("Creating player islands");
for (let i = 0; i < numPlayers; ++i)
{
islandPos[i] = playerPosition[i];
@@ -252,7 +252,7 @@ placePlayerBases({
});
Engine.SetProgress(30);
log("Creating connectors...");
g_Map.log("Creating connectors");
for (let i = 0; i < numIslands; ++i)
for (let j = 0; j < numIslands; ++j)
if (isConnected[i][j])
@@ -268,7 +268,7 @@ for (let i = 0; i < numIslands; ++i)
"edgeTerrain": tCliff
});
log("Creating forests...");
g_Map.log("Creating forests");
var [forestTrees, stragglerTrees] = getTreeCounts(...rBiomeTreeCount(1));
var types = [
[[tForestFloor2, tMainTerrain, pForest1], [tForestFloor2, pForest1]],
@@ -288,21 +288,21 @@ for (let type of types)
num);
Engine.SetProgress(55);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clForest, 1, clPlayer, 10, clRock, 10), stayClasses(clLand, 5)],
5*scaleByMapSize(4,16), 100
);
log("Creating small stone quarries...");
g_Map.log("Creating small stone quarries");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clForest, 1, clPlayer, 10, clRock, 10), stayClasses(clLand, 5)],
5*scaleByMapSize(4,16), 100
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clForest, 1, clPlayer, 10, clMetal, 10, clRock, 5), stayClasses(clLand, 5)],
@@ -310,7 +310,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(65);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)])
createAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -321,7 +321,7 @@ for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8
[avoidClasses(clForest, 0, clDirt, 5, clPlayer, 12), stayClasses(clLand, 5)],
scaleByMapSize(15, 45));
log("Creating grass patches...");
g_Map.log("Creating grass patches");
for (let size of [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5, 80)])
createAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -329,7 +329,7 @@ for (let size of [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5
[avoidClasses(clForest, 0, clDirt, 5, clPlayer, 12), stayClasses(clLand, 5)],
scaleByMapSize(15, 45));
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockMedium, 1,3, 0,1)],
true
@@ -340,7 +340,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(16, 262), 50
);
log("Creating large decorative rocks...");
g_Map.log("Creating large decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockLarge, 1,2, 0,1), new SimpleObject(aRockMedium, 1,3, 0,2)],
true
@@ -353,7 +353,7 @@ createObjectGroupsDeprecated(
Engine.SetProgress(70);
log("Creating deer...");
g_Map.log("Creating deer");
group = new SimpleGroup(
[new SimpleObject(oMainHuntableAnimal, 5,7, 0,4)],
true, clFood
@@ -365,7 +365,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(75);
log("Creating sheep...");
g_Map.log("Creating sheep");
group = new SimpleGroup(
[new SimpleObject(oSecondaryHuntableAnimal, 2,3, 0,2)],
true, clFood
@@ -375,7 +375,7 @@ createObjectGroupsDeprecated(group, 0,
3 * numPlayers, 50
);
log("Creating fruits...");
g_Map.log("Creating fruits");
group = new SimpleGroup(
[new SimpleObject(oFruitBush, 5,7, 0,4)],
true, clFood
@@ -396,7 +396,7 @@ var planetm = 1;
if (currentBiome() == "generic/tropic")
planetm = 8;
log("Creating small grass tufts...");
g_Map.log("Creating small grass tufts");
group = new SimpleGroup(
[new SimpleObject(aGrassShort, 1,2, 0,1, -Math.PI / 8, Math.PI / 8)]
);
@@ -407,7 +407,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(90);
log("Creating large grass tufts...");
g_Map.log("Creating large grass tufts");
group = new SimpleGroup(
[new SimpleObject(aGrass, 2,4, 0,1.8, -Math.PI / 8, Math.PI / 8), new SimpleObject(aGrassShort, 3,6, 1.2,2.5, -Math.PI / 8, Math.PI / 8)]
);
@@ -417,7 +417,7 @@ createObjectGroupsDeprecated(group, 0,
);
Engine.SetProgress(95);
log("Creating bushes...");
g_Map.log("Creating bushes");
group = new SimpleGroup(
[new SimpleObject(aBushMedium, 1,2, 0,2), new SimpleObject(aBushSmall, 2,4, 0,2)]
);
@@ -56,7 +56,7 @@ var clBaseResource = g_Map.createTileClass();
var clLand = g_Map.createTileClass();
var clWomen = g_Map.createTileClass();
log("Creating central area...");
g_Map.log("Creating central area");
createArea(
new ClumpPlacer(diskArea(fractionToTiles(0.15)), 0.7, 0.1, 10, mapCenter),
[
@@ -71,7 +71,7 @@ var halfway = distributePointsOnCircle(numPlayers, startAngle, fractionToTiles(0
var attacker = distributePointsOnCircle(numPlayers, startAngle, fractionToTiles(0.45), mapCenter)[0].map(v => v.round());
var passage = distributePointsOnCircle(numPlayers, startAngle + Math.PI / numPlayers, fractionToTiles(0.5), mapCenter)[0];
log("Creating player bases and attacker points...");
g_Map.log("Creating player bases, passages, treasure seeker woman and attacker points");
for (let i = 0; i < numPlayers; ++i)
{
placeStartingEntities(playerPosition[i], playerIDs[i], getStartingEntities(playerIDs[i]).filter(ent =>
@@ -83,7 +83,7 @@ for (let i = 0; i < numPlayers; ++i)
"BaseResourceClass": clBaseResource
});
log("Creating passage separating players...");
// Passage between player and neighbor
createArea(
new PathPlacer(mapCenter, passage[i], scaleByMapSize(14, 24), 0.4, scaleByMapSize(3, 9), 0.2, 0.05),
[
@@ -91,16 +91,16 @@ for (let i = 0; i < numPlayers; ++i)
new SmoothElevationPainter(ELEVATION_SET, heightLand, 4)
]);
log("Placing treasure seeker woman...");
// Treasure seeker woman
let femaleLocation = findLocationInDirectionBasedOnHeight(playerPosition[i], mapCenter, -3 , 3.5, 3).round();
clWomen.add(femaleLocation);
g_Map.placeEntityPassable(oTreasureSeeker, playerIDs[i], femaleLocation, playerAngle[i] + Math.PI);
log("Placing attacker spawn point....");
// Attacker spawn point
g_Map.placeEntityAnywhere(aWaypointFlag, 0, attacker[i], Math.PI / 2);
g_Map.placeEntityPassable(triggerPointAttacker, playerIDs[i], attacker[i], Math.PI / 2);
log("Preventing mountains in the area between player and attackers...");
// Preventing mountains in the area between player and attackers at player
addCivicCenterAreaToClass(playerPosition[i], clPlayer);
clPlayer.add(attacker[i]);
clPlayer.add(halfway[i]);
@@ -156,7 +156,7 @@ createHills(
Engine.SetProgress(50);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
createLayeredPatches(
[scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)],
[[tMainTerrain, tTier1Terrain], [tTier1Terrain, tTier2Terrain], [tTier2Terrain, tTier3Terrain]],
@@ -165,7 +165,7 @@ createLayeredPatches(
scaleByMapSize(15, 45),
clDirt);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
createPatches(
[scaleByMapSize(2, 4), scaleByMapSize(3, 7), scaleByMapSize(5, 15)],
tTier4Terrain,
+14 -15
View File
@@ -51,15 +51,14 @@ var clGrass = g_Map.createTileClass();
var [playerIDs, playerPosition] = playerPlacementCircle(fractionToTiles(0.35));
g_Map.log("Creating big grass patches around the playerbases");
for (let i = 0; i < numPlayers; ++i)
{
log("Marking player territory larger than the city patch...");
if (!isNomad())
createArea(
new ClumpPlacer(diskArea(defaultPlayerBaseRadius()), 0.9, 0.5, 10, playerPosition[i]),
new TileClassPainter(clPlayer));
log("Creating big grass patches surrounding the city patches...");
createArea(
new ChainPlacer(
2,
@@ -106,14 +105,14 @@ placePlayerBases({
});
Engine.SetProgress(20);
log("Creating bumps...");
g_Map.log("Creating bumps");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetBump, 2),
avoidClasses(clPlayer, 13),
scaleByMapSize(300, 800));
log("Creating hills...");
g_Map.log("Creating hills");
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(4, 6)), Math.floor(scaleByMapSize(16, 40)), 0.5),
[
@@ -126,7 +125,7 @@ createAreas(
Engine.SetProgress(25);
log("Creating forests...");
g_Map.log("Creating forests");
var [forestTrees, stragglerTrees] = getTreeCounts(400, 2000, 0.7);
var types = [
[[tMainDirt, tForestFloor2, pForestP], [tForestFloor2, pForestP]],
@@ -150,7 +149,7 @@ for (let type of types)
Engine.SetProgress(40);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8, 21)])
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), size, 0.5),
@@ -159,7 +158,7 @@ for (let size of [scaleByMapSize(3, 6), scaleByMapSize(5, 10), scaleByMapSize(8,
scaleByMapSize(50, 90));
Engine.SetProgress(60);
log("Creating big patches...");
g_Map.log("Creating big patches");
for (let size of [scaleByMapSize(6, 30), scaleByMapSize(10, 50), scaleByMapSize(16, 70)])
createAreas(
new ChainPlacer(1, Math.floor(scaleByMapSize(3, 5)), size, 0.5),
@@ -168,28 +167,28 @@ for (let size of [scaleByMapSize(6, 30), scaleByMapSize(10, 50), scaleByMapSize(
scaleByMapSize(30, 90));
Engine.SetProgress(70);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
var 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);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clForest, 1, clPlayer, 10, clRock, 10, clHill, 1, clGrass, 1)],
scaleByMapSize(2,8), 100
);
log("Creating small stone quarries...");
g_Map.log("Creating small stone quarries");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3), new RandomObject(aBushes, 2,4, 0,2)], true, clRock);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clForest, 1, clPlayer, 10, clRock, 10, clHill, 1, clGrass, 1)],
scaleByMapSize(2,8), 100
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4), new RandomObject(aBushes, 2,4, 0,2)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clForest, 1, clPlayer, 10, clMetal, 10, clRock, 5, clHill, 1, clGrass, 1)],
scaleByMapSize(2,8), 100
);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRock, 1,3, 0,1)],
true
@@ -200,7 +199,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(16, 262), 50
);
log("Creating bushes...");
g_Map.log("Creating bushes");
group = new SimpleGroup(
[new SimpleObject(aBushB, 1,2, 0,1), new SimpleObject(aBushA, 1,3, 0,2)],
true
@@ -212,7 +211,7 @@ createObjectGroupsDeprecated(
);
Engine.SetProgress(80);
log("Creating gazelle...");
g_Map.log("Creating gazelle");
group = new SimpleGroup(
[new SimpleObject(oGazelle, 5,7, 0,4)],
true, clFood
@@ -222,7 +221,7 @@ createObjectGroupsDeprecated(group, 0,
3 * numPlayers, 50
);
log("Creating lions...");
g_Map.log("Creating lions");
group = new SimpleGroup(
[new SimpleObject(oLion, 2,3, 0,2)],
true, clFood
@@ -232,7 +231,7 @@ createObjectGroupsDeprecated(group, 0,
3 * numPlayers, 50
);
log("Creating camels...");
g_Map.log("Creating camels");
group = new SimpleGroup(
[new SimpleObject(oCamel, 2,3, 0,2)],
true, clFood
@@ -174,14 +174,14 @@ paintRiver({
});
Engine.SetProgress(40);
log("Creating bumps...");
g_Map.log("Creating bumps");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetBump, 2),
avoidClasses(clWater, 2, clPlayer, 6),
scaleByMapSize(100, 200));
log("Creating ponds...");
g_Map.log("Creating ponds");
var numLakes = Math.round(scaleByMapSize(1, 4) * numPlayers / 2);
var waterAreas = createAreas(
new ClumpPlacer(scaleByMapSize(2, 5) * 50, 0.8, 0.1, 10),
@@ -193,7 +193,7 @@ var waterAreas = createAreas(
avoidClasses(clPlayer, 25, clWater, 20, clPond, 10),
numLakes);
log("Creating reeds...");
g_Map.log("Creating reeds");
createObjectGroupsByAreasDeprecated(
new SimpleGroup([new SimpleObject(aReeds, 1, 3, 0, 1)], true),
0,
@@ -202,7 +202,7 @@ createObjectGroupsByAreasDeprecated(
100,
waterAreas);
log("Creating lillies...");
g_Map.log("Creating lillies");
createObjectGroupsByAreasDeprecated(
new SimpleGroup([new SimpleObject(aLillies, 1, 3, 0, 1)], true),
0,
@@ -211,7 +211,7 @@ createObjectGroupsByAreasDeprecated(
100,
waterAreas);
log("Creating forests...");
g_Map.log("Creating forests");
var [forestTrees, stragglerTrees] = getTreeCounts(700, 3500, 0.5);
var num = scaleByMapSize(10,30);
createAreas(
@@ -226,7 +226,7 @@ createAreas(
Engine.SetProgress(50);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)])
createAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -240,7 +240,7 @@ for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8
scaleByMapSize(15, 45));
Engine.SetProgress(55);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)])
createAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -255,42 +255,42 @@ for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8
Engine.SetProgress(60);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0, 2, 0, 4), new SimpleObject(oStoneLarge, 1, 1, 0, 4)], true, clRock);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clWater, 1, clPond, 1),
scaleByMapSize(4,16), 100
);
log("Creating small stone quarries...");
g_Map.log("Creating small stone quarries");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clWater, 1, clPond, 1),
scaleByMapSize(4,16), 100
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clWater, 1, clPond, 1),
scaleByMapSize(4,16), 100
);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 0,2, 0,4), new SimpleObject(oStoneLarge, 1,1, 0,4)], true, clRock);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clWater, 1, clPond, 1), stayClasses(clDesert, 3)],
scaleByMapSize(6,20), 100
);
log("Creating small stone quarries...");
g_Map.log("Creating small stone quarries");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clForest, 1, clPlayer, 20, clRock, 10, clWater, 1, clPond, 1), stayClasses(clDesert, 3)],
scaleByMapSize(6,20), 100
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
[avoidClasses(clForest, 1, clPlayer, 20, clMetal, 10, clRock, 5, clWater, 1, clPond, 1), stayClasses(clDesert, 3)],
@@ -299,7 +299,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(65);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aDecorativeRock, 1,3, 0,1)],
true
@@ -310,7 +310,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(16, 262), 50
);
log("Creating shrubs...");
g_Map.log("Creating shrubs");
group = new SimpleGroup(
[new SimpleObject(aBush2, 1,2, 0,1), new SimpleObject(aBush1, 1,3, 0,2), new SimpleObject(aBush4, 1,2, 0,1), new SimpleObject(aBush3, 1,3, 0,2)],
true
@@ -322,21 +322,21 @@ createObjectGroupsDeprecated(
);
Engine.SetProgress(70);
log("Creating gazelles...");
g_Map.log("Creating gazelles");
group = new SimpleGroup([new SimpleObject(oGazelle, 5,7, 0,4)], true, clFood);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 0, clPlayer, 20, clWater, 1, clFood, 10, clDesert, 5, clPond, 1),
3*scaleByMapSize(5,20), 50
);
log("Creating goats...");
g_Map.log("Creating goats");
group = new SimpleGroup([new SimpleObject(oGoat, 2,4, 0,3)], true, clFood);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 0, clPlayer, 20, clWater, 1, clFood, 10, clDesert, 5, clPond, 1),
3*scaleByMapSize(5,20), 50
);
log("Creating treasures...");
g_Map.log("Creating treasures");
group = new SimpleGroup([new SimpleObject(oFoodTreasure, 1,1, 0,2)], true, clTreasure);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 0, clPlayer, 20, clWater, 1, clFood, 2, clDesert, 5, clTreasure, 6, clPond, 1),
@@ -349,7 +349,7 @@ createObjectGroupsDeprecated(group, 0,
3*scaleByMapSize(5,20), 50
);
log("Creating camels...");
g_Map.log("Creating camels");
group = new SimpleGroup([new SimpleObject(oCamel, 2,4, 0,2)], true, clFood);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 0, clPlayer, 20, clWater, 1, clFood, 10, clDesert, 5, clTreasure, 2, clPond, 1),
@@ -376,7 +376,7 @@ createStragglerTrees(
clForest,
stragglerTrees);
log("Creating obelisks");
g_Map.log("Creating obelisks");
group = new SimpleGroup(
[new SimpleObject(eObelisk, 1,1, 0,1)],
true
@@ -387,7 +387,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(5, 30), 50
);
log("Creating pyramids");
g_Map.log("Creating pyramids");
group = new SimpleGroup(
[new SimpleObject(ePyramid, 1,1, 0,1)],
true
@@ -141,7 +141,7 @@ function unknownArchipelago()
markPlayerArea("large");
}
log("Creating islands...");
g_Map.log("Creating islands");
let islandSize = diskArea(scaleByMapSize(17, 29));
for (let i = 0; i < numPlayers; ++i)
createArea(
@@ -151,7 +151,7 @@ function unknownArchipelago()
let type = isNomad() ? randIntInclusive(1, 2) : randIntInclusive(1, 3);
if (type == 1)
{
log("Creating archipelago...");
g_Map.log("Creating archipelago");
createAreas(
new ClumpPlacer(islandSize * randFloat(0.8, 1.2), 0.8, 0.1, 10),
[
@@ -161,7 +161,7 @@ function unknownArchipelago()
null,
scaleByMapSize(2, 5) * randIntInclusive(8, 14));
log("Creating shore jaggedness with small puddles...");
g_Map.log("Creating shore jaggedness with small puddles");
createAreas(
new ClumpPlacer(scaleByMapSize(15, 80), 0.2, 0.1, 1),
[
@@ -174,7 +174,7 @@ function unknownArchipelago()
}
else if (type == 2)
{
log("Creating islands...");
g_Map.log("Creating islands");
createAreas(
new ClumpPlacer(islandSize * randFloat(0.6, 1.4), 0.8, 0.1, randFloat(0.0, 0.2)),
[
@@ -184,7 +184,7 @@ function unknownArchipelago()
avoidClasses(clLand, 3, clPlayerTerritory, 3),
scaleByMapSize(6, 10) * randIntInclusive(8, 14));
log("Creating small islands...");
g_Map.log("Creating small islands");
createAreas(
new ClumpPlacer(islandSize * randFloat(0.3, 0.7), 0.8, 0.1, 0.07),
[
@@ -197,7 +197,7 @@ function unknownArchipelago()
}
else if (type == 3)
{
log("Creating tight islands...");
g_Map.log("Creating tight islands");
createAreas(
new ClumpPlacer(islandSize * randFloat(0.8, 1.2), 0.8, 0.1, 10),
[
@@ -218,7 +218,7 @@ function unknownContinent()
if (!isNomad())
{
log("Ensuring player area...");
g_Map.log("Ensuring player area");
[playerIDs, playerPosition] = playerPlacementCircle(fractionToTiles(0.25));
markPlayerArea("small");
@@ -238,7 +238,7 @@ function unknownContinent()
]);
}
log("Creating continent...");
g_Map.log("Creating continent");
createArea(
new ClumpPlacer(diskArea(fractionToTiles(0.38)), 0.9, 0.09, 10, mapCenter),
[
@@ -248,7 +248,7 @@ function unknownContinent()
if (randBool(1/3))
{
log("Creating peninsula (i.e. half the map not being surrounded by water)...");
g_Map.log("Creating peninsula (i.e. half the map not being surrounded by water)");
let angle = randomAngle();
let peninsulaPosition1 = Vector2D.add(mapCenter, new Vector2D(fractionToTiles(0.25), 0).rotate(-angle));
createArea(
@@ -258,7 +258,7 @@ function unknownContinent()
new TileClassPainter(clLand)
]);
log("Remembering to not paint shorelines into the peninsula...");
g_Map.log("Remembering to not paint shorelines into the peninsula");
let peninsulaPosition2 = Vector2D.add(mapCenter, new Vector2D(fractionToTiles(0.35), 0).rotate(-angle));
createArea(
new ClumpPlacer(diskArea(fractionToTiles(0.33)), 0.9, 0.01, 10, peninsulaPosition2),
@@ -308,7 +308,7 @@ function unknownCentralSea()
if (!g_AllowNaval || randBool())
{
log("Creating isthmus (i.e. connecting the two riversides with a big land passage)...");
g_Map.log("Creating isthmus (i.e. connecting the two riversides with a big land passage)");
let [isthmusStart, isthmusEnd] = centralRiverCoordinates(startAngle + Math.PI / 2);
createArea(
new PathPlacer(
@@ -350,14 +350,14 @@ function unknownCentralRiver()
markPlayerArea("large");
}
log("Creating the main river...");
g_Map.log("Creating the main river");
let [coord1, coord2] = centralRiverCoordinates(startAngle);
createArea(
new PathPlacer(coord1, coord2, scaleByMapSize(14, 24), 0.5, scaleByMapSize(3, 12), 0.1, 0.01),
new SmoothElevationPainter(ELEVATION_SET, waterHeight, 4),
avoidClasses(clPlayerTerritory, 4));
log("Creating small water spots at the map border to ensure separation of players...");
g_Map.log("Creating small water spots at the map border to ensure separation of players");
for (let coord of [coord1, coord2])
createArea(
new ClumpPlacer(diskArea(scaleByMapSize(5, 10)), 0.95, 0.6, 10, coord),
@@ -366,7 +366,7 @@ function unknownCentralRiver()
if (!g_AllowNaval || randBool())
{
log("Creating the shallows of the main river...");
g_Map.log("Creating the shallows of the main river");
for (let i = 0; i <= randIntInclusive(1, scaleByMapSize(4, 8)); ++i)
{
let location = fractionToTiles(randFloat(0.15, 0.85));
@@ -418,7 +418,7 @@ function unknownRiversAndLake()
let lake = randBool(3/4);
if (lake)
{
log("Creating lake...");
g_Map.log("Creating lake");
createArea(
new ClumpPlacer(diskArea(fractionToTiles(0.17)), 0.7, 0.1, 10, mapCenter),
[
@@ -432,7 +432,7 @@ function unknownRiversAndLake()
// Don't do this on nomad because the imbalances on the different islands are too drastic
if (!isNomad() && (!lake || randBool(1/3)))
{
log("Creating small rivers separating players...");
g_Map.log("Creating small rivers separating players");
for (let river of distributePointsOnCircle(numPlayers, startAngle + Math.PI / numPlayers, fractionToTiles(0.5), mapCenter)[0])
{
createArea(
@@ -452,7 +452,7 @@ function unknownRiversAndLake()
avoidClasses(clPlayer, 5));
}
log("Creating lake...");
g_Map.log("Creating lake");
createArea(
new ClumpPlacer(diskArea(fractionToTiles(0.04)), 0.7, 0.1, 10, mapCenter),
[
@@ -463,7 +463,7 @@ function unknownRiversAndLake()
if (!isNomad && lake && randBool())
{
log("Creating small central island...");
g_Map.log("Creating small central island");
createArea(
new ClumpPlacer(diskArea(fractionToTiles(0.05)), 0.7, 0.1, 10, mapCenter),
[
@@ -526,7 +526,7 @@ function unknownGulf()
let startAngle = randomAngle();
if (!isNomad())
{
log("Determining player locations...");
g_Map.log("Determining player locations");
playerPosition = playerPlacementCustomAngle(
fractionToTiles(0.35),
@@ -572,7 +572,7 @@ function unknownLakes()
markPlayerArea("large");
}
log("Creating lakes...");
g_Map.log("Creating lakes");
createAreas(
new ClumpPlacer(scaleByMapSize(160, 700), 0.2, 0.1, 1),
[
@@ -605,9 +605,9 @@ function unknownPasses()
else
startAngle = randomAngle();
g_Map.log("Creating a mountain range between neighboring players");
for (let mountain of distributePointsOnCircle(numPlayers, startAngle + Math.PI / numPlayers, fractionToTiles(0.5), mapCenter)[0])
{
log("Creating a mountain range between neighboring players...");
createArea(
new PathPlacer(mapCenter, mountain, scaleByMapSize(14, 24), 0.4, 3 * scaleByMapSize(1, 3), 0.2, 0.05),
[
@@ -617,17 +617,17 @@ function unknownPasses()
],
avoidClasses(clPlayer, 5));
log("Creating small mountain at the map border between the players to ensure separation of players...");
// Small mountain at the map border between the players to ensure separation of players
createArea(
new ClumpPlacer(diskArea(scaleByMapSize(4, 22)), 0.95, 0.6, 10, mountain),
new SmoothElevationPainter(ELEVATION_SET, heightMountain, 0),
avoidClasses(clPlayer, 5));
}
g_Map.log("Creating passages between neighboring players");
let passes = distributePointsOnCircle(numPlayers * 2, startAngle, fractionToTiles(0.35), mapCenter)[0];
for (let i = 0; i < numPlayers; ++i)
{
log("Create passages between neighboring players...");
createArea(
new PathPlacer(
passes[2 * i],
@@ -642,7 +642,7 @@ function unknownPasses()
if (randBool(2/5))
{
log("Create central lake...");
g_Map.log("Create central lake");
createArea(
new ClumpPlacer(diskArea(fractionToTiles(0.1)), 0.7, 0.1, 10, mapCenter),
[
@@ -652,7 +652,7 @@ function unknownPasses()
}
else
{
log("Fill area between the paths...");
g_Map.log("Fill area between the paths");
createArea(
new ClumpPlacer(diskArea(fractionToTiles(0.05)), 0.7, 0.1, 10, mapCenter),
[
@@ -669,7 +669,7 @@ function unknownLowlands()
{
let heightMountain = 30;
log("Creating mountain that is going to separate players...");
g_Map.log("Creating mountain that is going to separate players");
createArea(
new MapBoundsPlacer(),
new ElevationPainter(heightMountain));
@@ -684,7 +684,7 @@ function unknownLowlands()
else
startAngle = randomAngle();
log("Creating valleys enclosed by the mountain...");
g_Map.log("Creating valleys enclosed by the mountain");
let valleys = numPlayers;
if (mapSize >= 128 && numPlayers <= 2 ||
mapSize >= 192 && numPlayers <= 3 ||
@@ -693,9 +693,9 @@ function unknownLowlands()
mapSize >= 448 && numPlayers <= 6)
valleys *= 2;
g_Map.log("Creating player valley");
for (let valley of distributePointsOnCircle(valleys, startAngle, fractionToTiles(0.35), mapCenter)[0])
{
log("Creating player valley...");
createArea(
new ClumpPlacer(diskArea(scaleByMapSize(18, 32)), 0.65, 0.1, 10, valley),
[
@@ -703,7 +703,7 @@ function unknownLowlands()
new TileClassPainter(clLand)
]);
log("Creating passes from player areas to the center...");
// Passage from player to center
createArea(
new PathPlacer(mapCenter, valley, scaleByMapSize(14, 24), 0.4, 3 * scaleByMapSize(1, 3), 0.2, 0.05),
[
@@ -712,7 +712,7 @@ function unknownLowlands()
]);
}
log("Creating the big central area...");
g_Map.log("Creating the big central area");
createArea(
new ClumpPlacer(diskArea(fractionToTiles(0.18)), 0.7, 0.1, 10, mapCenter),
[
@@ -747,7 +747,7 @@ function centralRiverCoordinates(angle)
function createShoreJaggedness(waterHeight, borderClass, shoreDist, inwards = true)
{
log("Creating shore jaggedness...");
g_Map.log("Creating shore jaggedness");
for (let i = 0; i < 2; ++i)
if (i || inwards)
createAreas(
@@ -770,7 +770,7 @@ function createExtensionsOrIslands()
if (rnd == 1)
{
log("Creating islands...");
g_Map.log("Creating islands");
createAreas(
new ClumpPlacer(Math.square(randIntInclusive(scaleByMapSize(8, 15), scaleByMapSize(15, 23))), 0.8, 0.1, randFloat(0, 0.2)),
[
@@ -782,7 +782,7 @@ function createExtensionsOrIslands()
}
else if (rnd == 2)
{
log("Creating extentions...");
g_Map.log("Creating extentions");
createAreas(
new ChainPlacer(Math.floor(scaleByMapSize(4, 7)), Math.floor(scaleByMapSize(7, 10)), Math.floor(scaleByMapSize(16, 40)), 0.07),
[
@@ -830,14 +830,14 @@ function paintUnknownMapBasedOnHeight()
*/
function createUnknownObjects()
{
log("Creating bumps...");
g_Map.log("Creating bumps");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 50), 0.3, 0.06, 1),
new SmoothElevationPainter(ELEVATION_MODIFY, heightOffsetBump, 2),
[avoidClasses(clWater, 2, clPlayer, 10), stayClasses(clLand, 3)],
randIntInclusive(0, scaleByMapSize(1, 2) * 200));
log("Creating hills...");
g_Map.log("Creating hills");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 150), 0.2, 0.1, 1),
[
@@ -850,7 +850,7 @@ function createUnknownObjects()
);
Engine.SetProgress(50);
log("Creating forests...");
g_Map.log("Creating forests");
let [numForest, numStragglers] = getTreeCounts(...rBiomeTreeCount(1));
let types = [
[[tForestFloor2, tMainTerrain, pForest1], [tForestFloor2, pForest1]],
@@ -870,7 +870,7 @@ function createUnknownObjects()
num);
Engine.SetProgress(50);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
let patchCount = (currentBiome() == "generic/savanna" ? 3 : 1) * scaleByMapSize(15, 45);
for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)])
createAreas(
@@ -882,7 +882,7 @@ function createUnknownObjects()
[avoidClasses(clForest, 0, clHill, 2, clDirt, 5, clPlayer, 7), stayClasses(clLand, 4)],
patchCount);
log("Creating grass patches...");
g_Map.log("Creating grass patches");
for (let size of [scaleByMapSize(2, 32), scaleByMapSize(3, 48), scaleByMapSize(5, 80)])
createAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -892,7 +892,7 @@ function createUnknownObjects()
Engine.SetProgress(55);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oStoneSmall, 0, 2, 0, 4), new SimpleObject(oStoneLarge, 1, 1, 0, 4)], true, clRock),
0,
@@ -900,7 +900,7 @@ function createUnknownObjects()
randIntInclusive(scaleByMapSize(2, 9), scaleByMapSize(9, 40)),
100);
log("Creating small stone quarries...");
g_Map.log("Creating small stone quarries");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oStoneSmall, 2, 5, 1, 3)], true, clRock),
0,
@@ -908,7 +908,7 @@ function createUnknownObjects()
randIntInclusive(scaleByMapSize(2, 9),scaleByMapSize(9, 40)),
100);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oMetalLarge, 1, 1, 0, 4)], true, clMetal),
0,
@@ -917,7 +917,7 @@ function createUnknownObjects()
100);
Engine.SetProgress(65);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(aRockMedium, 1, 3, 0, 1)], true),
0,
@@ -925,7 +925,7 @@ function createUnknownObjects()
scaleByMapSize(16, 262),
50);
log("Creating large decorative rocks...");
g_Map.log("Creating large decorative rocks");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(aRockLarge, 1, 2, 0, 1), new SimpleObject(aRockMedium, 1, 3, 0, 2)], true),
0,
@@ -934,7 +934,7 @@ function createUnknownObjects()
50);
Engine.SetProgress(70);
log("Creating deer...");
g_Map.log("Creating deer");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oMainHuntableAnimal, 5, 7, 0, 4)], true, clFood),
0,
@@ -942,7 +942,7 @@ function createUnknownObjects()
randIntInclusive(numPlayers + 3, 5 * numPlayers + 4),
50);
log("Creating berry bush...");
g_Map.log("Creating berry bush");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oFruitBush, 5, 7, 0, 4)], true, clFood),
0,
@@ -951,7 +951,7 @@ function createUnknownObjects()
50);
Engine.SetProgress(75);
log("Creating sheep...");
g_Map.log("Creating sheep");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oSecondaryHuntableAnimal, 2, 3, 0, 2)], true, clFood),
0,
@@ -959,7 +959,7 @@ function createUnknownObjects()
randIntInclusive(numPlayers + 3, 5 * numPlayers + 4),
50);
log("Creating fish...");
g_Map.log("Creating fish");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(oFish, 2, 3, 0, 2)], true, clFood),
0,
@@ -968,7 +968,7 @@ function createUnknownObjects()
60);
Engine.SetProgress(85);
log("Creating straggler trees...");
g_Map.log("Creating straggler trees");
types = [g_Gaia.tree1, g_Gaia.tree2, g_Gaia.tree3, g_Gaia.tree4];
num = Math.floor(numStragglers / types.length);
@@ -981,7 +981,7 @@ function createUnknownObjects()
let planetm = currentBiome() == "generic/tropic" ? 8 : 1;
log("Creating small grass tufts...");
g_Map.log("Creating small grass tufts");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(aGrassShort, 1, 2, 0, 1, -Math.PI / 8, Math.PI / 8)]),
0,
@@ -989,7 +989,7 @@ function createUnknownObjects()
planetm * scaleByMapSize(13, 200));
Engine.SetProgress(90);
log("Creating large grass tufts...");
g_Map.log("Creating large grass tufts");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(aGrass, 2, 4, 0, 1.8, -Math.PI / 8, Math.PI / 8), new SimpleObject(aGrassShort, 3, 6, 1.2, 2.5, -Math.PI / 8, Math.PI / 8)]),
0,
@@ -997,7 +997,7 @@ function createUnknownObjects()
planetm * scaleByMapSize(13, 200));
Engine.SetProgress(95);
log("Creating shallow flora...");
g_Map.log("Creating shallow flora");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(aLillies, 1, 2, 0, 2), new SimpleObject(aReeds, 2, 4, 0, 2)]),
0,
@@ -1005,7 +1005,7 @@ function createUnknownObjects()
60 * scaleByMapSize(13, 200),
80);
log("Creating bushes...");
g_Map.log("Creating bushes");
createObjectGroupsDeprecated(
new SimpleGroup([new SimpleObject(aBushMedium, 1, 2, 0, 2), new SimpleObject(aBushSmall, 2, 4, 0, 2)]),
0,
@@ -63,7 +63,7 @@ Engine.SetProgress(15);
createVolcano(mapCenter, clHill, tCliff, [tLava1, tLava2, tLava3], true, ELEVATION_SET);
Engine.SetProgress(45);
log("Creating hills...");
g_Map.log("Creating hills");
createAreas(
new ClumpPlacer(scaleByMapSize(20, 150), 0.2, 0.1, 1),
[
@@ -75,7 +75,7 @@ createAreas(
scaleByMapSize(2, 8) * numPlayers
);
log("Creating forests...");
g_Map.log("Creating forests");
var [forestTrees, stragglerTrees] = getTreeCounts(200, 1250, 0.7);
var types = [
[[tGrassB, tGrassA, pForestD], [tGrassB, pForestD]],
@@ -95,7 +95,7 @@ for (let type of types)
Engine.SetProgress(70);
log("Creating dirt patches...");
g_Map.log("Creating dirt patches");
for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8, 128)])
createAreas(
new ClumpPlacer(size, 0.3, 0.06, 0.5),
@@ -127,21 +127,21 @@ for (let size of [scaleByMapSize(3, 48), scaleByMapSize(5, 84), scaleByMapSize(8
scaleByMapSize(20, 80)
);
log("Creating stone mines...");
g_Map.log("Creating stone mines");
var group = new SimpleGroup([new SimpleObject(oStoneSmall, 0, 2, 0, 4), new SimpleObject(oStoneLarge, 1, 1, 0, 4)], true, clRock);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 1, clPlayer, 10, clRock, 10, clHill, 1),
scaleByMapSize(4,16), 100
);
log("Creating small stone mines...");
g_Map.log("Creating small stone mines");
group = new SimpleGroup([new SimpleObject(oStoneSmall, 2,5, 1,3)], true, clRock);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 1, clPlayer, 10, clRock, 10, clHill, 1),
scaleByMapSize(4,16), 100
);
log("Creating metal mines...");
g_Map.log("Creating metal mines");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,4)], true, clMetal);
createObjectGroupsDeprecated(group, 0,
avoidClasses(clForest, 1, clPlayer, 10, clMetal, 10, clRock, 5, clHill, 1),
@@ -150,7 +150,7 @@ createObjectGroupsDeprecated(group, 0,
Engine.SetProgress(90);
log("Creating small decorative rocks...");
g_Map.log("Creating small decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockMedium, 1,3, 0,1)],
true
@@ -161,7 +161,7 @@ createObjectGroupsDeprecated(
scaleByMapSize(16, 262), 50
);
log("Creating large decorative rocks...");
g_Map.log("Creating large decorative rocks");
group = new SimpleGroup(
[new SimpleObject(aRockLarge, 1,2, 0,1), new SimpleObject(aRockMedium, 1,3, 0,2)],
true
@@ -493,7 +493,7 @@ let playerHeightRange = { "min" : heighLimits[3], "max" : heighLimits[4] };
let resourceSpotHeightRange = { "min" : (heighLimits[2] + heighLimits[3]) / 2, "max" : (heighLimits[4] + heighLimits[5]) / 2 };
let playerHeight = (playerHeightRange.min + playerHeightRange.max) / 2; // Average player height
log("Chosing starting locations...");
g_Map.log("Chosing starting locations");
let [playerIDs, playerPosition] = sortPlayersByLocation(getStartLocationsByHeightmap(playerHeightRange, 1000, 30));
Engine.SetProgress(30);
@@ -513,9 +513,7 @@ for (let p = 0; p < playerIDs.length; ++p)
*/
let tchm = getTileCenteredHeightmap();
/**
* Divide tiles in areas by height and avoid paths
*/
g_Map.log("Get points per height");
let areas = heighLimits.map(heightLimit => []);
for (let x = 0; x < tchm.length; ++x)
for (let y = 0; y < tchm[0].length; ++y)
@@ -528,14 +526,12 @@ for (let x = 0; x < tchm.length; ++x)
areas[h].push(new Vector2D(x, y));
break;
}
else
minHeight = heighLimits[h];
minHeight = heighLimits[h];
}
}
/**
* Get max slope of each area
*/
g_Map.log("Get slope limits per heightrange");
let slopeMap = getSlopeMap();
let minSlope = [];
let maxSlope = [];
@@ -555,9 +551,7 @@ for (let h = 0; h < heighLimits.length; ++h)
}
}
/**
* Paint areas by height and slope
*/
g_Map.log("Paint areas by height and slope");
for (let h = 0; h < heighLimits.length; ++h)
for (let point of areas[h])
{
@@ -583,7 +577,7 @@ for (let h = 0; h < heighLimits.length; ++h)
}
Engine.SetProgress(80);
log("Placing resources...");
g_Map.log("Placing resources");
let avoidPoints = playerPosition.map(pos => pos.clone());
for (let i = 0; i < avoidPoints.length; ++i)
avoidPoints[i].dist = 30;
@@ -591,7 +585,7 @@ let resourceSpots = getPointsByHeight(resourceSpotHeightRange, avoidPoints).map(
Engine.SetProgress(55);
log("Placing players...");
g_Map.log("Placing players");
if (isNomad())
placePlayersNomad(
g_Map.createTileClass(),
@@ -607,7 +601,7 @@ else
}
let mercenaryCamps = isNomad() ? 0 : Math.ceil(g_Map.size / 256);
log("Maximum number of mercenary camps: " + mercenaryCamps);
g_Map.log("Placing at most " + mercenaryCamps + " mercenary camps");
for (let i = 0; i < resourceSpots.length; ++i)
{
let choice = i % 5;