diff --git a/binaries/data/mods/public/maps/random/aegean_sea.js b/binaries/data/mods/public/maps/random/aegean_sea.js index 90f765923c..e2014e9db0 100644 --- a/binaries/data/mods/public/maps/random/aegean_sea.js +++ b/binaries/data/mods/public/maps/random/aegean_sea.js @@ -67,29 +67,13 @@ var clIsland = createTileClass(); var clCorals = createTileClass(); var playerIDs = primeSortAllPlayers(); +var playerPos = placePlayersRiver(); + +var playerX = []; +var playerZ = []; -var playerX = new Array(numPlayers); -var playerZ = new Array(numPlayers); -var playerAngle = new Array(numPlayers); -var playerPos = new Array(numPlayers); -var iop = 0; for (var i = 0; i < numPlayers; i++) { - iop = i - 1; - if (!(numPlayers%2)){ - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1); - } - else - { - if (iop%2) - { - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1); - } - else - { - playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1); - } - } playerZ[i] = playerPos[i]; playerX[i] = 0.2 + 0.6*(i%2); } diff --git a/binaries/data/mods/public/maps/random/corinthian_isthmus.js b/binaries/data/mods/public/maps/random/corinthian_isthmus.js index ea55dc0adb..2012c8b6b5 100644 --- a/binaries/data/mods/public/maps/random/corinthian_isthmus.js +++ b/binaries/data/mods/public/maps/random/corinthian_isthmus.js @@ -113,29 +113,13 @@ paintTerrainBasedOnHeight(2, 5, 1, tGrass); paintTileClassBasedOnHeight(-6, 0.5, 1, clWater); var playerIDs = primeSortAllPlayers(); +var playerPos = placePlayersRiver(); + +var playerX = []; +var playerZ = []; -var playerX = new Array(numPlayers); -var playerZ = new Array(numPlayers); -var playerAngle = new Array(numPlayers); -var playerPos = new Array(numPlayers); -var iop = 0; for (var i = 0; i < numPlayers; i++) { - iop = i - 1; - if (!(numPlayers%2)){ - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1); - } - else - { - if (iop%2) - { - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1); - } - else - { - playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1); - } - } playerZ[i] = Math.sqrt(0.5)*(0.6*(i%2) - 0.8 + playerPos[i]) + 0.5; playerX[i] = Math.sqrt(0.5)*(0.6*(i%2) + 0.2 - playerPos[i]) + 0.5; } diff --git a/binaries/data/mods/public/maps/random/danubius.js b/binaries/data/mods/public/maps/random/danubius.js index afbe001b2f..678736d448 100644 --- a/binaries/data/mods/public/maps/random/danubius.js +++ b/binaries/data/mods/public/maps/random/danubius.js @@ -315,21 +315,14 @@ if (gallicCC) RMS.SetProgress(10); var playerIDs = primeSortAllPlayers(); +var playerPos = placePlayersRiver(); -// Place players var playerX = []; var playerZ = []; + for (let i = 0; i < numPlayers; ++i) { - let iop = i - 1; - - if (numPlayers % 2 == 0) - playerZ[i] = ((iop + Math.abs(iop % 2))/2 + 1) / (numPlayers / 2 + 1); - else if (iop % 2) - playerZ[i] = ((iop + Math.abs(iop % 2))/2 + 1) / (((numPlayers + 1) / 2) + 1); - else - playerZ[i] = (iop/2 + 1) / (((numPlayers - 1) / 2) + 1); - + playerZ[i] = playerPos[i]; playerX[i] = 0.2 + 0.6 * (i % 2); } diff --git a/binaries/data/mods/public/maps/random/english_channel.js b/binaries/data/mods/public/maps/random/english_channel.js index 911f9e9867..662f031037 100644 --- a/binaries/data/mods/public/maps/random/english_channel.js +++ b/binaries/data/mods/public/maps/random/english_channel.js @@ -64,24 +64,13 @@ var clSettlement = createTileClass(); var clShallow = createTileClass(); var playerIDs = primeSortAllPlayers(); +var playerPos = placePlayersRiver(); -// place players var playerX = []; var playerZ = []; -var playerAngle = []; -var playerPos = []; -var iop = 0; for (var i = 0; i < numPlayers; i++) { - iop = i - 1; - if (numPlayers % 2 == 0) - playerPos[i] = ((iop + abs(iop % 2)) / 2 + 1) / ((numPlayers / 2) + 1); - else if (iop % 2 != 0) - playerPos[i] = ((iop + abs(iop % 2)) / 2 + 1) / (((numPlayers + 1) / 2) + 1); - else - playerPos[i] = (iop / 2 + 1) / (((numPlayers - 1) / 2) + 1); - playerZ[i] = 0.2 + 0.6*(i%2); playerX[i] = playerPos[i]; } diff --git a/binaries/data/mods/public/maps/random/lorraine_plain.js b/binaries/data/mods/public/maps/random/lorraine_plain.js index 6bc220f0fe..15208ffa26 100644 --- a/binaries/data/mods/public/maps/random/lorraine_plain.js +++ b/binaries/data/mods/public/maps/random/lorraine_plain.js @@ -59,30 +59,13 @@ var clSettlement = createTileClass(); var clShallow = createTileClass(); var playerIDs = primeSortAllPlayers(); +var playerPos = placePlayersRiver(); + +var playerX = []; +var playerZ = []; -var playerX = new Array(numPlayers); -var playerZ = new Array(numPlayers); -var playerAngle = new Array(numPlayers); -var playerPos = new Array(numPlayers); -var iop = 0; for (var i = 0; i < numPlayers; i++) { - iop = i - 1; - if (!(numPlayers%2)){ - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1); - } - else - { - if (iop%2) - { - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1); - } - else - { - playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1); - } - } - playerZ[i] = 0.25 + 0.5*(i%2); playerX[i] = playerPos[i]; } diff --git a/binaries/data/mods/public/maps/random/rmgen/library.js b/binaries/data/mods/public/maps/random/rmgen/library.js index 247a3b2a20..d88cdf7884 100644 --- a/binaries/data/mods/public/maps/random/rmgen/library.js +++ b/binaries/data/mods/public/maps/random/rmgen/library.js @@ -424,9 +424,9 @@ function radialPlayerPlacement(percentRadius = 0.35) let startAngle = randFloat(0, TWO_PI); - for (let i = 0; i < numPlayers; ++i) + for (let i = 0; i < getNumPlayers(); ++i) { - playerAngle[i] = startAngle + i * TWO_PI / numPlayers; + playerAngle[i] = startAngle + i * TWO_PI / getNumPlayers(); playerX[i] = 0.5 + percentRadius * Math.cos(playerAngle[i]); playerZ[i] = 0.5 + percentRadius * Math.sin(playerAngle[i]); } @@ -434,6 +434,30 @@ function radialPlayerPlacement(percentRadius = 0.35) return [playerIDs, playerX, playerZ, playerAngle, startAngle]; } +/** + * Returns an array of percent numbers indicating the player location on river maps. + * For example [0.2, 0.2, 0.4, 0.4, 0.6, 0.6, 0.8, 0.8] for a 4v4 or + * [0.25, 0.33, 0.5, 0.67, 0.75] for a 2v3. + */ +function placePlayersRiver() +{ + let playerPos = []; + let numPlayers = getNumPlayers(); + let numPlayersEven = numPlayers % 2 == 0; + + for (let i = 0; i < numPlayers; ++i) + { + let currentPlayerEven = i % 2 == 0; + + let offsetDivident = numPlayersEven || currentPlayerEven ? (i + 1) % 2 : 0; + let offsetDivisor = numPlayersEven ? 0 : currentPlayerEven ? +1 : -1; + + playerPos[i] = ((i - 1 + offsetDivident) / 2 + 1) / ((numPlayers + offsetDivisor) / 2 + 1); + } + + return playerPos; +} + function getStartingEntities(player) { let civ = getCivCode(player); diff --git a/binaries/data/mods/public/maps/random/the_nile.js b/binaries/data/mods/public/maps/random/the_nile.js index 14cf97883d..444d408c14 100644 --- a/binaries/data/mods/public/maps/random/the_nile.js +++ b/binaries/data/mods/public/maps/random/the_nile.js @@ -73,25 +73,12 @@ var clShore = createTileClass(); var clTreasure = createTileClass(); var playerIDs = primeSortAllPlayers(); +var playerPos = placePlayersRiver(); +var playerX = []; +var playerZ = []; -// place players -var playerX = new Array(numPlayers); -var playerZ = new Array(numPlayers); -var playerAngle = new Array(numPlayers); -var playerPos = new Array(numPlayers); -var iop = 0; for (var i = 0; i < numPlayers; i++) { - iop = i - 1; - if (numPlayers % 2 == 0) - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1); - else - { - if (iop%2) - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1); - else - playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1); - } playerZ[i] = playerPos[i]; playerX[i] = 0.30 + 0.4*(i%2); } diff --git a/binaries/data/mods/public/maps/random/unknown.js b/binaries/data/mods/public/maps/random/unknown.js index ddf224e4b5..08ff57dcee 100644 --- a/binaries/data/mods/public/maps/random/unknown.js +++ b/binaries/data/mods/public/maps/random/unknown.js @@ -283,60 +283,25 @@ else if (md == 2) //continent else if (md == 3) //central sea { var playerIDs = primeSortAllPlayers(); + var playerPos = placePlayersRiver(); - var playerX = new Array(numPlayers); - var playerZ = new Array(numPlayers); - var playerAngle = new Array(numPlayers); - var playerPos = new Array(numPlayers); - var iop = 0; + var playerX = []; + var playerZ = []; + var playerAngle = []; var mdd1 = randIntInclusive(1,2); if (mdd1 == 1) //vertical - { for (var i = 0; i < numPlayers; i++) { - iop = i - 1; - if (!(numPlayers%2)){ - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1); - } - else - { - if (iop%2) - { - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1); - } - else - { - playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1); - } - } playerZ[i] = playerPos[i]; playerX[i] = 0.2 + 0.6*(i%2); } - } else //horizontal - { for (var i = 0; i < numPlayers; i++) { - iop = i - 1; - if (!(numPlayers%2)){ - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1); - } - else - { - if (iop%2) - { - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1); - } - else - { - playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1); - } - } playerZ[i] = 0.2 + 0.6*(i%2); playerX[i] = playerPos[i]; } - } var WATER_WIDTH = randFloat(0.22,0.3)+scaleByMapSize(1,4)/20; log("Creating sea"); @@ -512,61 +477,25 @@ else if (md == 4) //central river } var playerIDs = primeSortAllPlayers(); + var playerPos = placePlayersRiver(); + + var playerX = []; + var playerZ = []; + var playerAngle = []; - var playerX = new Array(numPlayers); - var playerZ = new Array(numPlayers); - var playerAngle = new Array(numPlayers); - var playerPos = new Array(numPlayers); - var iop = 0; var mdd1 = randIntInclusive(1,2); if (mdd1 == 1) //horizontal - { for (var i = 0; i < numPlayers; i++) { - iop = i - 1; - if (!(numPlayers%2)){ - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1); - } - else - { - if (iop%2) - { - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1); - } - else - { - playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1); - } - } - playerZ[i] = 0.25 + 0.5*(i%2); playerX[i] = playerPos[i]; } - } else //vertical - { for (var i = 0; i < numPlayers; i++) { - iop = i - 1; - if (!(numPlayers%2)){ - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1); - } - else - { - if (iop%2) - { - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1); - } - else - { - playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1); - } - } - playerZ[i] = playerPos[i]; playerX[i] = 0.25 + 0.5*(i%2); } - } log("Creating the main river"); diff --git a/binaries/data/mods/public/maps/random/unknown_land.js b/binaries/data/mods/public/maps/random/unknown_land.js index e0aa01784e..ae90dbea0e 100644 --- a/binaries/data/mods/public/maps/random/unknown_land.js +++ b/binaries/data/mods/public/maps/random/unknown_land.js @@ -149,61 +149,24 @@ if (md == 2) //continent else if (md == 3) //central sea { var playerIDs = primeSortAllPlayers(); - - // place players - var playerX = new Array(numPlayers); - var playerZ = new Array(numPlayers); - var playerAngle = new Array(numPlayers); - var playerPos = new Array(numPlayers); - var iop = 0; + var playerPos = placePlayersRiver(); + var playerX = []; + var playerZ = []; + var playerAngle = []; var mdd1 = randIntInclusive(1,2); if (mdd1 == 1) //vertical - { for (var i = 0; i < numPlayers; i++) { - iop = i - 1; - if (!(numPlayers%2)){ - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1); - } - else - { - if (iop%2) - { - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1); - } - else - { - playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1); - } - } playerZ[i] = playerPos[i]; playerX[i] = 0.2 + 0.6*(i%2); } - } else //horizontal - { for (var i = 0; i < numPlayers; i++) { - iop = i - 1; - if (!(numPlayers%2)){ - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1); - } - else - { - if (iop%2) - { - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1); - } - else - { - playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1); - } - } playerZ[i] = 0.2 + 0.6*(i%2); playerX[i] = playerPos[i]; } - } var WATER_WIDTH = randFloat(0.22,0.3)+scaleByMapSize(1,4)/20; log("Creating sea"); @@ -377,62 +340,25 @@ else if (md == 4) //central river } var playerIDs = primeSortAllPlayers(); + var playerPos = placePlayersRiver(); + + var playerX = []; + var playerZ = []; + var playerAngle = []; - // place players - var playerX = new Array(numPlayers); - var playerZ = new Array(numPlayers); - var playerAngle = new Array(numPlayers); - var playerPos = new Array(numPlayers); - var iop = 0; var mdd1 = randIntInclusive(1,2); if (mdd1 == 1) //horizontal - { for (var i = 0; i < numPlayers; i++) { - iop = i - 1; - if (!(numPlayers%2)){ - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1); - } - else - { - if (iop%2) - { - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1); - } - else - { - playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1); - } - } - playerZ[i] = 0.25 + 0.5*(i%2); playerX[i] = playerPos[i]; } - } else //vertical - { for (var i = 0; i < numPlayers; i++) { - iop = i - 1; - if (!(numPlayers%2)){ - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1); - } - else - { - if (iop%2) - { - playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1); - } - else - { - playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1); - } - } - playerZ[i] = playerPos[i]; playerX[i] = 0.25 + 0.5*(i%2); } - } log("Creating the main river");