Index: binaries/data/mods/public/maps/random/bahrain.js =================================================================== --- binaries/data/mods/public/maps/random/bahrain.js +++ binaries/data/mods/public/maps/random/bahrain.js @@ -147,7 +147,7 @@ g_Map.log("Placing players"); let [playerIDs, playerPosition] = createBases( ...playerPlacementRandom( - sortAllPlayers(), + getPlayerIDs(), [ avoidClasses(g_TileClasses.island, 5), stayClasses(g_TileClasses.land, defaultPlayerBaseRadius() / 2) Index: binaries/data/mods/public/maps/random/belgian_uplands.js =================================================================== --- binaries/data/mods/public/maps/random/belgian_uplands.js +++ binaries/data/mods/public/maps/random/belgian_uplands.js @@ -106,7 +106,7 @@ new TileClassPainter(tHeightRange), new HeightConstraint(lowerHeightLimit, upperHeightLimit)); - let players = area && playerPlacementRandom(sortAllPlayers(), stayClasses(tHeightRange, 15), true); + let players = area && playerPlacementRandom(getPlayerIDs(), stayClasses(tHeightRange, 15), true); if (players) { [playerIDs, playerPosition] = players; Index: binaries/data/mods/public/maps/random/corsica.js =================================================================== --- binaries/data/mods/public/maps/random/corsica.js +++ binaries/data/mods/public/maps/random/corsica.js @@ -198,7 +198,6 @@ Engine.SetProgress(30); g_Map.log("Determining player locations"); -var playerIDs = sortAllPlayers(); var playerPosition = []; var playerAngle = []; var p = 0; Index: binaries/data/mods/public/maps/random/dodecanese.js =================================================================== --- binaries/data/mods/public/maps/random/dodecanese.js +++ binaries/data/mods/public/maps/random/dodecanese.js @@ -97,7 +97,7 @@ const bridgeLength = 16; const maxBridges = scaleByMapSize(2, 12); -var [playerIDs, playerPosition] = playerPlacementRandom(sortAllPlayers()); +var [playerIDs, playerPosition] = playerPlacementRandom(getPlayerIDs()); g_Map.log("Creating player islands"); for (let position of playerPosition) Index: binaries/data/mods/public/maps/random/fields_of_meroe.js =================================================================== --- binaries/data/mods/public/maps/random/fields_of_meroe.js +++ binaries/data/mods/public/maps/random/fields_of_meroe.js @@ -173,7 +173,7 @@ [areaPassage]); } -var [playerIDs, playerPosition] = playerPlacementRandom(sortAllPlayers(), avoidClasses(clRiver, 15, clPlayer, 30)); +var [playerIDs, playerPosition] = playerPlacementRandom(getPlayerIDs(), avoidClasses(clRiver, 15, clPlayer, 30)); placePlayerBases({ "PlayerPlacement": [playerIDs, playerPosition], "BaseResourceClass": clBaseResource, Index: binaries/data/mods/public/maps/random/hellas.js =================================================================== --- binaries/data/mods/public/maps/random/hellas.js +++ binaries/data/mods/public/maps/random/hellas.js @@ -79,7 +79,7 @@ var [minLandRatio, maxLandRatio] = mapStyles.filter(mapStyle => mapSize >= mapStyle.minMapSize).sort((a, b) => a.enabled - b.enabled).pop().landRatio; var [minCliffRatio, maxCliffRatio] = [maxLandRatio < 0.75 ? 0 : 0.08, 0.18]; -var playerIDs = sortAllPlayers(); +var playerIDs = getPlayerIDs(); var playerPosition; // Pick a random subset of the heightmap that meets the mapStyle and has space for all players Index: binaries/data/mods/public/maps/random/lower_nubia.js =================================================================== --- binaries/data/mods/public/maps/random/lower_nubia.js +++ binaries/data/mods/public/maps/random/lower_nubia.js @@ -202,7 +202,7 @@ if (!isNomad()) { g_Map.log("Finding player locations"); - [playerIDs, playerPosition] = playerPlacementRandom(sortAllPlayers(), avoidClasses(clWater, scaleByMapSize(8, 12), clCliff, scaleByMapSize(8, 12))); + [playerIDs, playerPosition] = playerPlacementRandom(getPlayerIDs(), avoidClasses(clWater, scaleByMapSize(8, 12), clCliff, scaleByMapSize(8, 12))); g_Map.log("Flatten the initial CC area"); for (let position of playerPosition) Index: binaries/data/mods/public/maps/random/marmara.js =================================================================== --- binaries/data/mods/public/maps/random/marmara.js +++ binaries/data/mods/public/maps/random/marmara.js @@ -123,7 +123,7 @@ g_Map.log("Placing players"); let [playerIDs, playerPosition] = createBases( ...playerPlacementRandom( - sortAllPlayers(), + getPlayerIDs(), [ avoidClasses(g_TileClasses.mountain, 5), stayClasses(g_TileClasses.land, scaleByMapSize(6, 25)) Index: binaries/data/mods/public/maps/random/mediterranean.js =================================================================== --- binaries/data/mods/public/maps/random/mediterranean.js +++ binaries/data/mods/public/maps/random/mediterranean.js @@ -164,7 +164,7 @@ g_Map.log("Finding player positions"); let [playerIDs, playerPosition] = playerPlacementRandom( - sortAllPlayers(), + getPlayerIDs(), [ avoidClasses(g_TileClasses.mountain, 5), stayClasses(g_TileClasses.land, scaleByMapSize(8, 25)) Index: binaries/data/mods/public/maps/random/ngorongoro.js =================================================================== --- binaries/data/mods/public/maps/random/ngorongoro.js +++ binaries/data/mods/public/maps/random/ngorongoro.js @@ -137,7 +137,7 @@ g_Map.log("Placing players"); let [playerIDs, playerPosition] = createBases( ...playerPlacementRandom( - sortAllPlayers(), + getPlayerIDs(), [ avoidClasses( g_TileClasses.mountain, 5, Index: binaries/data/mods/public/maps/random/pompeii.js =================================================================== --- binaries/data/mods/public/maps/random/pompeii.js +++ binaries/data/mods/public/maps/random/pompeii.js @@ -166,7 +166,7 @@ g_Map.log("Placing players"); let [playerIDs, playerPosition] = createBases( ...playerPlacementRandom( - sortAllPlayers(), + getPlayerIDs(), [ avoidClasses(g_TileClasses.mountain, 5), stayClasses(g_TileClasses.land, scaleByMapSize(5, 15)) Index: binaries/data/mods/public/maps/random/red_sea.js =================================================================== --- binaries/data/mods/public/maps/random/red_sea.js +++ binaries/data/mods/public/maps/random/red_sea.js @@ -122,7 +122,7 @@ g_Map.log("Placing players"); let [playerIDs, playerPosition] = createBases( ...playerPlacementRandom( - sortAllPlayers(), + getPlayerIDs(), [ avoidClasses(g_TileClasses.mountain, scaleByMapSize(5, 10)), stayClasses(g_TileClasses.land, defaultPlayerBaseRadius()) Index: binaries/data/mods/public/maps/random/rmgen-common/player.js =================================================================== --- binaries/data/mods/public/maps/random/rmgen-common/player.js +++ binaries/data/mods/public/maps/random/rmgen-common/player.js @@ -456,7 +456,7 @@ let constraint = new StaticConstraint(constraints); let numPlayers = getNumPlayers(); - let playerIDs = shuffleArray(sortAllPlayers()); + let playerIDs = shuffleArray(getPlayerIDs()); let playerPosition = []; for (let i = 0; i < numPlayers; ++i) @@ -496,6 +496,20 @@ } /** + * Get the player IDs + * + * @returns {Array} - an array with sequential integers from 1 to the number of players + */ +function getPlayerIDs() +{ + let playerIDs = []; + for (let i = 0; i < getNumPlayers(); ++i) + playerIDs.push(i+1); + + return playerIDs; +} + +/** * Sorts an array of player IDs by team index. Players without teams come first. * Randomize order for players of the same team. */ @@ -511,10 +525,7 @@ */ function sortAllPlayers() { - let playerIDs = []; - for (let i = 0; i < getNumPlayers(); ++i) - playerIDs.push(i+1); - + const playerIDs = getPlayerIDs(); return sortPlayers(playerIDs); } @@ -651,7 +662,7 @@ ).rotateAround(angle, centerPosition).round(); } - return groupPlayersByArea(new Array(numPlayers).fill(0).map((_p, i) => i + 1), playerPosition); + return groupPlayersByArea(getPlayerIDs(), playerPosition); } /**