diff --git a/core/src/com/unciv/logic/map/mapgenerator/MapGenerator.kt b/core/src/com/unciv/logic/map/mapgenerator/MapGenerator.kt index d3da42a1ff..e0b13d19f5 100644 --- a/core/src/com/unciv/logic/map/mapgenerator/MapGenerator.kt +++ b/core/src/com/unciv/logic/map/mapgenerator/MapGenerator.kt @@ -627,10 +627,19 @@ class MapGenerator(val ruleset: Ruleset) { // Checking it.baseTerrain in candidateTerrains to make sure forest does not spawn on desert hill for (tile in tileMap.values.asSequence().filter { it.baseTerrain in candidateTerrains && it.getLastTerrain().name in candidateTerrains }) { + val vegetation = (randomness.getPerlinNoise(tile, vegetationSeed, scale = 3.0, nOctaves = 1) + 1.0) / 2.0 if (vegetation <= tileMap.mapParameters.vegetationRichness) { - val randomVegetation = vegetationTerrains.filter { it.occursOn.contains(tile.getLastTerrain().name) }.random(randomness.RNG) + val possibleVegetation = vegetationTerrains.filter { vegetationTerrain -> + vegetationTerrain.occursOn.contains(tile.getLastTerrain().name) + && vegetationTerrain.getMatchingUniques(UniqueType.TileGenerationConditions).none { + tile.temperature!! < it.params[0].toDouble() || tile.temperature!! > it.params[1].toDouble() + || tile.humidity!! < it.params[2].toDouble() || tile.humidity!! > it.params[3].toDouble() + } + } + if (possibleVegetation.isEmpty()) continue + val randomVegetation = possibleVegetation.random(randomness.RNG) tile.addTerrainFeature(randomVegetation.name) } } diff --git a/core/src/com/unciv/logic/map/mapgenerator/MapRegions.kt b/core/src/com/unciv/logic/map/mapgenerator/MapRegions.kt index 419a75b01a..e98b49af7d 100644 --- a/core/src/com/unciv/logic/map/mapgenerator/MapRegions.kt +++ b/core/src/com/unciv/logic/map/mapgenerator/MapRegions.kt @@ -1445,8 +1445,8 @@ class MapRegions (val ruleset: Ruleset){ !tile.getBaseTerrain().hasUnique(UniqueType.BlocksResources, conditionalTerrain) && !resource.hasUnique(UniqueType.NoNaturalGeneration, conditionalTerrain) && resource.getMatchingUniques(UniqueType.TileGenerationConditions).none { - tile.temperature!! < it.params[0].toDouble() || tile.temperature!! > it.params[1].toDouble() - || tile.humidity!! < it.params[2].toDouble() || tile.humidity!! > it.params[3].toDouble() + tile.temperature!! !in it.params[0].toDouble() .. it.params[1].toDouble() + || tile.humidity!! !in it.params[2].toDouble() .. it.params[3].toDouble() } ) { if (ratioProgress >= 1f &&