Index: ps/trunk/binaries/data/mods/public/maps/random/alpine_lakes.js =================================================================== --- ps/trunk/binaries/data/mods/public/maps/random/alpine_lakes.js +++ ps/trunk/binaries/data/mods/public/maps/random/alpine_lakes.js @@ -251,7 +251,7 @@ if (!lakeAreaLen) break; - chosenPoint = lakeAreas[randInt(lakeAreaLen)]; + chosenPoint = pickRandom(lakeAreas); placer = new ChainPlacer(1, floor(scaleByMapSize(4, 8)), floor(scaleByMapSize(40, 180)), 0.7, chosenPoint[0], chosenPoint[1]); var terrainPainter = new LayeredPainter( Index: ps/trunk/binaries/data/mods/public/maps/random/ardennes_forest.js =================================================================== --- ps/trunk/binaries/data/mods/public/maps/random/ardennes_forest.js +++ ps/trunk/binaries/data/mods/public/maps/random/ardennes_forest.js @@ -396,24 +396,9 @@ explorableArea.points.push(pt); } - if(h > 35) - { - var rnd = randFloat(); - if(g_Map.validT(ix, iz) && rnd < 0.1) - { - var i = randInt(aTrees.length); - placeObject(ix+randFloat(), iz+randFloat(), aTrees[i], 0, randFloat(0, TWO_PI)); - } - } - else if(h < 15 && hillDecoClass.countMembersInRadius(ix, iz, 1) == 0) - { - var rnd = randFloat(); - if(g_Map.validT(ix, iz) && rnd < 0.05) - { - var i = randInt(aTrees.length); - placeObject(ix+randFloat(), iz+randFloat(), aTrees[i], 0, randFloat(0, TWO_PI)); - } - } + if (h > 35 && g_Map.validT(ix, iz) && randFloat(0, 1) < 0.1 || + h < 15 && g_Map.validT(ix, iz) && randFloat(0, 1) < 0.05 && hillDecoClass.countMembersInRadius(ix, iz, 1) == 0) + placeObject(ix + randFloat(0, 1), iz + randFloat(0, 1), pickRandom(aTrees), 0, randFloat(0, 2 * PI)); } } Index: ps/trunk/binaries/data/mods/public/maps/random/caledonian_meadows.js =================================================================== --- ps/trunk/binaries/data/mods/public/maps/random/caledonian_meadows.js +++ ps/trunk/binaries/data/mods/public/maps/random/caledonian_meadows.js @@ -281,7 +281,7 @@ for (let tries = 0; tries < maxTries; ++tries) { - let point = validVertices[randInt(validVertices.length)]; + let point = pickRandom(validVertices); if (placements.every(p => getDistance(p.x, p.y, point.x, point.y) > max(minDistance, p.dist))) { points.push(point); @@ -315,7 +315,7 @@ { let angle = i * dAngle + randFloat(0, dAngle); let dist = randFloat(2, 5); - placeObject(point.x + dist * Math.cos(angle), point.y + dist * Math.sin(angle), decorations[randInt(0, decorations.length - 1)], 0, randFloat(0, TWO_PI)); + placeObject(point.x + dist * Math.cos(angle), point.y + dist * Math.sin(angle), pickRandom(decorations), 0, randFloat(0, 2 * PI)); } } @@ -355,19 +355,19 @@ function placeGrove(point) { - placeObject(point.x, point.y, ["structures/gaul_outpost", "gaia/flora_tree_oak_new"][randInt(0, 1)], 0, randFloat(0, TWO_PI)); - let quantity = randInt(20, 30); + placeObject(point.x, point.y, pickRandom(["structures/gaul_outpost", "gaia/flora_tree_oak_new"]), 0, randFloat(0, 2 * PI)); + let quantity = randIntInclusive(20, 30); let dAngle = TWO_PI / quantity; for (let i = 0; i < quantity; ++i) { - let angle = i * dAngle + randFloat(0, dAngle); + let angle = dAngle * randFloat(i, i+1); let dist = randFloat(2, 5); let objectList = groveEntities; if (i % 3 == 0) objectList = groveActors; let x = point.x + dist * Math.cos(angle); let y = point.y + dist * Math.sin(angle); - placeObject(x, y, objectList[randInt(0, objectList.length - 1)], 0, randFloat(0, TWO_PI)); + placeObject(x, y, pickRandom(objectList), 0, randFloat(0, 2 * PI)); createArea(new ClumpPlacer(5, 1, 1, 1, floor(x), floor(y)), [new TerrainPainter("temp_grass_plants"), paintClass(clGrove)]); } } @@ -388,7 +388,7 @@ { let angle = i * dAngle + randFloat(0, dAngle); let dist = randFloat(1, 3); - placeObject(point.x + dist * Math.cos(angle), point.y + dist * Math.sin(angle), otherEntities[randInt(0, otherEntities.length - 1)], 0, randFloat(0, TWO_PI)); + placeObject(point.x + dist * Math.cos(angle), point.y + dist * Math.sin(angle), pickRandom(otherEntities), 0, randFloat(0, 2 * PI)); } } @@ -418,7 +418,7 @@ objectList = groveActors; x = point.x + dist * Math.cos(angle); y = point.y + dist * Math.sin(angle); - placeObject(x, y, objectList[randInt(0, objectList.length - 1)], 0, randFloat(0, TWO_PI)); + placeObject(x, y, pickRandom(objectList), 0, randFloat(0, 2 * PI)); createArea(new ClumpPlacer(5, 1, 1, 1, floor(x), floor(y)), [new TerrainPainter("temp_grass_plants"), paintClass(clGrove)]); currentAngle += dAngle; } @@ -441,7 +441,7 @@ dist = randFloat(10, 15); x = point.x + dist * Math.cos(angle); y = point.y + dist * Math.sin(angle); - placeObject(x, y, foodEntities[randInt(0, foodEntities.length - 1)], 0, randFloat(0, TWO_PI)); + placeObject(x, y, pickRandom(foodEntities), 0, randFloat(0, 2 * PI)); currentAngle += dAngle; } } @@ -708,17 +708,17 @@ let y = areas[h][t].y; let actor = undefined; - let texture = myBiome[h].texture[randInt(myBiome[h].texture.length)]; + let texture = pickRandom(myBiome[h].texture); if (slopeMap[x][y] < 0.4 * (minSlope[h] + maxSlope[h])) { if (randFloat() < myBiome[h].actor[1]) - actor = myBiome[h].actor[0][randInt(myBiome[h].actor[0].length)]; + actor = pickRandom(myBiome[h].actor[0]); } else { - texture = myBiome[h].textureHS[randInt(myBiome[h].textureHS.length)]; + texture = pickRandom(myBiome[h].textureHS); if (randFloat() < myBiome[h].actorHS[1]) - actor = myBiome[h].actorHS[0][randInt(myBiome[h].actorHS[0].length)]; + actor = pickRandom(myBiome[h].actorHS[0]); } g_Map.setTexture(x, y, texture); if (actor) @@ -747,7 +747,7 @@ if (choice == 1) placeMine(resourceSpots[i], "gaia/geology_metal_temperate_slabs"); if (choice == 2) - placeCustomFortress(resourceSpots[i].x, resourceSpots[i].y, fences[randInt(0, fences.length - 1)], "other", 0, randFloat(0, TWO_PI)); + placeCustomFortress(resourceSpots[i].x, resourceSpots[i].y, pickRandom(fences), "other", 0, randFloat(0, 2 * PI)); if (choice == 3) placeGrove(resourceSpots[i]); if (choice == 4) Index: ps/trunk/binaries/data/mods/public/maps/random/heightmap/heightmap.js =================================================================== --- ps/trunk/binaries/data/mods/public/maps/random/heightmap/heightmap.js +++ ps/trunk/binaries/data/mods/public/maps/random/heightmap/heightmap.js @@ -78,7 +78,7 @@ let startLoc = []; let minDist = Infinity; for (let p = 0; p < numberOfPlayers; ++p) - startLoc.push(validStartLoc[randInt(validStartLoc.length)]); + startLoc.push(pickRandom(validStartLoc)); for (let p1 = 0; p1 < numberOfPlayers - 1; ++p1) { for (let p2 = p1 + 1; p2 < numberOfPlayers; ++p2) @@ -139,7 +139,6 @@ for (let tries = 0; tries < maxTries; ++tries) { - let checkPointIndex = randInt(validPoints.length); let checkPoint = validPoints[checkPointIndex]; if (placements.every(p => getDistance(p.x, p.y, checkPoint.x, checkPoint.y) > minDistance)) @@ -147,7 +146,7 @@ placeObject(checkPoint.x, checkPoint.y, pickRandom(entityList), playerID, randFloat(0, 2*PI)); placements.push(checkPoint); } - + validPoints.splice(checkPointIndex); if (!validPoints.length) break; // No more valid points left Index: ps/trunk/binaries/data/mods/public/maps/random/island_stronghold.js =================================================================== --- ps/trunk/binaries/data/mods/public/maps/random/island_stronghold.js +++ ps/trunk/binaries/data/mods/public/maps/random/island_stronghold.js @@ -265,7 +265,7 @@ if (!landAreaLen) break; - chosenPoint = landAreas[randInt(landAreaLen)]; + chosenPoint = pickRandom(landAreas); // create big islands let placer = new ChainPlacer(floor(scaleByMapSize(4, 8)), floor(scaleByMapSize(8, 14)), floor(scaleByMapSize(25, 60)), 0.07, chosenPoint[0], chosenPoint[1], scaleByMapSize(30, 70)); @@ -308,7 +308,7 @@ if (!landAreaLen) break; - chosenPoint = landAreas[randInt(0, landAreaLen)]; + chosenPoint = pickRandom(landAreas); let placer = new ChainPlacer(floor(scaleByMapSize(4, 7)), floor(scaleByMapSize(7, 10)), floor(scaleByMapSize(16, 40)), 0.07, chosenPoint[0], chosenPoint[1], scaleByMapSize(22, 40)); let terrainPainter = new LayeredPainter( Index: ps/trunk/binaries/data/mods/public/maps/random/islands.js =================================================================== --- ps/trunk/binaries/data/mods/public/maps/random/islands.js +++ ps/trunk/binaries/data/mods/public/maps/random/islands.js @@ -210,7 +210,7 @@ if (!landAreaLen) break; - chosenPoint = landAreas[randInt(landAreaLen)]; + chosenPoint = pickRandom(landAreas); // create big islands placer = new ChainPlacer(floor(scaleByMapSize(4, 8)), floor(scaleByMapSize(8, 14)), floor(scaleByMapSize(25, 60)), 0.07, chosenPoint[0], chosenPoint[1], scaleByMapSize(30,70)); @@ -250,7 +250,7 @@ if (!landAreaLen) break; - chosenPoint = landAreas[randInt(0, landAreaLen)]; + chosenPoint = pickRandom(landAreas); placer = new ChainPlacer(floor(scaleByMapSize(4, 7)), floor(scaleByMapSize(7, 10)), floor(scaleByMapSize(16, 40)), 0.07, chosenPoint[0], chosenPoint[1], scaleByMapSize(22,40)); terrainPainter = new LayeredPainter( Index: ps/trunk/binaries/data/mods/public/maps/random/rmgen/library.js =================================================================== --- ps/trunk/binaries/data/mods/public/maps/random/rmgen/library.js +++ ps/trunk/binaries/data/mods/public/maps/random/rmgen/library.js @@ -144,9 +144,7 @@ */ function randomizePlacerCoordinatesFromAreas(placer, areas) { - let i = randInt(areas.length); - let pt = areas[i].points[randInt(areas[i].points.length)]; - + let pt = pickRandom(pickRandom(areas).points); placer.x = pt.x; placer.z = pt.z; } Index: ps/trunk/binaries/data/mods/public/maps/random/rmgen/misc.js =================================================================== --- ps/trunk/binaries/data/mods/public/maps/random/rmgen/misc.js +++ ps/trunk/binaries/data/mods/public/maps/random/rmgen/misc.js @@ -634,8 +634,7 @@ for (var i = 0; i < numCircles; ++i) { var badPoint = false; - var point = edges[randInt(edges.length)]; - var cx = point[0], cz = point[1]; + var [cx, cz] = pickRandom(edges); if (queueEmpty) { Index: ps/trunk/binaries/data/mods/public/maps/random/rmgen/placer.js =================================================================== --- ps/trunk/binaries/data/mods/public/maps/random/rmgen/placer.js +++ ps/trunk/binaries/data/mods/public/maps/random/rmgen/placer.js @@ -156,9 +156,7 @@ var edges = [[this.x, this.z]]; for (var i = 0; i < this.numCircles; ++i) { - var point = edges[randInt(edges.length)]; - var cx = point[0], cz = point[1]; - + var [cx, cz] = pickRandom(edges); if (queueEmpty) var radius = randInt(this.minRadius, this.maxRadius); else @@ -475,10 +473,7 @@ else { var angle = randFloat(this.minAngle, this.maxAngle); - - //Randomly select entity - var type = this.types[randInt(this.types.length)]; - resultObjs.push(new Entity(type, player, x, z, angle)); + resultObjs.push(new Entity(pickRandom(this.types), player, x, z, angle)); break; } } @@ -569,10 +564,7 @@ RandomGroup.prototype.place = function(player, constraint) { - // Pick one of the object placers at random - var placer = this.elements[randInt(this.elements.length)]; - - var resultObjs = placer.place(this.x, this.z, player, this.avoidSelf, constraint); + var resultObjs = pickRandom(this.elements).place(this.x, this.z, player, this.avoidSelf, constraint); if (resultObjs === undefined) return false; Index: ps/trunk/binaries/data/mods/public/maps/random/rmgen/randombiome.js =================================================================== --- ps/trunk/binaries/data/mods/public/maps/random/rmgen/randombiome.js +++ ps/trunk/binaries/data/mods/public/maps/random/rmgen/randombiome.js @@ -530,22 +530,18 @@ "fruitBush": "gaia/flora_bush_grapes", "chicken": "gaia/fauna_chicken", "fish": "gaia/fauna_fish", + "mainHuntableAnimal": pickRandom([ + "gaia/fauna_wildebeest", + "gaia/fauna_zebra", + "gaia/fauna_giraffe", + "gaia/fauna_elephant_african_bush" + ]), "secondaryHuntableAnimal": "gaia/fauna_gazelle", "stoneLarge": "gaia/geology_stonemine_desert_quarry", "stoneSmall": "gaia/geology_stone_savanna_small", "metalLarge": "gaia/geology_metal_savanna_slabs" }; - var rts = randInt(1,4); - if (rts == 1) - g_Gaia.mainHuntableAnimal = "gaia/fauna_wildebeest"; - else if (rts == 2) - g_Gaia.mainHuntableAnimal = "gaia/fauna_zebra"; - else if (rts == 3) - g_Gaia.mainHuntableAnimal = "gaia/fauna_giraffe"; - else if (rts == 4) - g_Gaia.mainHuntableAnimal = "gaia/fauna_elephant_african_bush"; - g_Decoratives = { "grass": "actor|props/flora/grass_savanna.xml", "grassShort": "actor|props/flora/grass_medit_field.xml", Index: ps/trunk/binaries/data/mods/public/maps/random/rmgen/terrain.js =================================================================== --- ps/trunk/binaries/data/mods/public/maps/random/rmgen/terrain.js +++ ps/trunk/binaries/data/mods/public/maps/random/rmgen/terrain.js @@ -68,5 +68,5 @@ RandomTerrain.prototype.constructor = RandomTerrain; RandomTerrain.prototype.placeNew = function(x, z) { - this.terrains[randInt(this.terrains.length)].placeNew(x, z); + pickRandom(this.terrains).placeNew(x, z); }; Index: ps/trunk/binaries/data/mods/public/maps/random/rmgen2/setup.js =================================================================== --- ps/trunk/binaries/data/mods/public/maps/random/rmgen2/setup.js +++ ps/trunk/binaries/data/mods/public/maps/random/rmgen2/setup.js @@ -78,7 +78,7 @@ */ function pickAmount(amounts) { - var amount = amounts[randInt(amounts.length)]; + let amount = pickRandom(amounts); if (amount in g_Amounts) return g_Amounts[amount]; @@ -91,7 +91,7 @@ */ function pickMix(mixes) { - var mix = mixes[randInt(mixes.length)]; + let mix = pickRandom(mixes); if (mix in g_Mixes) return g_Mixes[mix]; @@ -104,7 +104,7 @@ */ function pickSize(sizes) { - var size = sizes[randInt(sizes.length)]; + let size = pickRandom(sizes); if (size in g_Sizes) return g_Sizes[size]; @@ -310,7 +310,7 @@ formats.push("line"); return { - "setup": formats[randInt(formats.length)], + "setup": pickRandom(formats), "distance": randFloat(0.2, 0.35), "separation": randFloat(0.05, 0.1) }; Index: ps/trunk/binaries/data/mods/public/maps/random/syria.js =================================================================== --- ps/trunk/binaries/data/mods/public/maps/random/syria.js +++ ps/trunk/binaries/data/mods/public/maps/random/syria.js @@ -163,7 +163,7 @@ var tX = round(fx + tDist * cos(tAngle)); var tZ = round(fz + tDist * sin(tAngle)); group = new SimpleGroup( - [new SimpleObject([oPalm, oTamarix][randInt(0,1)], num, num, 0,5)], + [new SimpleObject(pickRandom([oPalm, oTamarix]), num, num, 0,5)], false, clBaseResource, tX, tZ ); createObjectGroup(group, 0, avoidClasses(clBaseResource,2)); Index: ps/trunk/binaries/data/mods/public/maps/random/unknown_nomad.js =================================================================== --- ps/trunk/binaries/data/mods/public/maps/random/unknown_nomad.js +++ ps/trunk/binaries/data/mods/public/maps/random/unknown_nomad.js @@ -1292,17 +1292,13 @@ } if (!placableArea.length) - { for (var mx = 0; mx < mapSize; ++mx) for (var mz = 0; mz < mapSize; ++mz) if (g_Map.getHeight(mx, mz) >= 3 && g_Map.getHeight(mx, mz) <= 3.12) placableArea.push([mx, mz]); - } - var chosen = floor(Math.random()*placableArea.length); - playerX[i] = placableArea[chosen][0]; - playerZ[i] = placableArea[chosen][1]; -} + [playerX[i], playerZ[i]] = pickRandom(placableArea); +} for (var i = 0; i < numPlayers; ++i) { Index: ps/trunk/binaries/data/mods/public/maps/skirmishes/Gallic Fields (3).js =================================================================== --- ps/trunk/binaries/data/mods/public/maps/skirmishes/Gallic Fields (3).js +++ ps/trunk/binaries/data/mods/public/maps/skirmishes/Gallic Fields (3).js @@ -1,9 +1,7 @@ Trigger.prototype.SpawnAndAttack = function() { - var rand = Math.random(); - // randomize spawn points - var spawnPoint = rand > 0.5 ? "B" : "C"; - var intruders = TriggerHelper.SpawnUnitsFromTriggerPoints(spawnPoint, "units/rome_legionnaire_marian", this.attackSize, 0); + var intruders = TriggerHelper.SpawnUnitsFromTriggerPoints( + pickRandom(["B", "C"]), "units/rome_legionnaire_marian", this.attackSize, 0); for (var origin in intruders) {