Index: binaries/data/mods/public/maps/random/mainland.js =================================================================== --- binaries/data/mods/public/maps/random/mainland.js +++ binaries/data/mods/public/maps/random/mainland.js @@ -149,11 +149,11 @@ [new SimpleObject(aBushMedium, 1, 2, 0, 2), new SimpleObject(aBushSmall, 2, 4, 0, 2)] ], [ - scaleByMapSize(16, 262), - scaleByMapSize(8, 131), - planetm * scaleByMapSize(13, 200), - planetm * scaleByMapSize(13, 200), - planetm * scaleByMapSize(13, 200) + scaleByMapArea(16), + scaleByMapArea(8), + planetm * scaleByMapArea(13), + planetm * scaleByMapArea(13), + planetm * scaleByMapArea(13) ], avoidClasses(clForest, 0, clPlayer, 0, clHill, 0)); Index: binaries/data/mods/public/maps/random/rmgen/library.js =================================================================== --- binaries/data/mods/public/maps/random/rmgen/library.js +++ binaries/data/mods/public/maps/random/rmgen/library.js @@ -80,6 +80,18 @@ return min + (max - min) * (g_MapSettings.Size - minMapSize) / (maxMapSize - minMapSize); } +function scaleByMapArea(base, reduction = 0, minMapSize = 128) +{ + return g_MapSettings.CircularMap ? + base * ((diskArea(g_MapSettings.Size / 2) - reduction) / (diskArea(minMapSize / 2))) : + base * ((g_MapSettings.Size * g_MapSettings.Size - reduction) / (minMapSize * minMapSize)); +} + +function scaleByMapAreaAndPlayers(base, playerAvoidanceRadius, minMapSize = 128) +{ + return scaleByMapArea(base, getNumPlayers() * diskArea(playerAvoidanceRadius), minMapSize); +} + function randomPositionOnTile(tilePosition) { return Vector2D.add(tilePosition, new Vector2D(randFloat(0, 1), randFloat(0, 1)));