diff --git a/android/assets/jsons/Civ V - Gods & Kings/TileImprovements.json b/android/assets/jsons/Civ V - Gods & Kings/TileImprovements.json index e3c85db438..4d3b78525b 100644 --- a/android/assets/jsons/Civ V - Gods & Kings/TileImprovements.json +++ b/android/assets/jsons/Civ V - Gods & Kings/TileImprovements.json @@ -281,7 +281,8 @@ { "name": "Ancient ruins", "terrainsCanBeBuiltOn": ["Land"], - "uniques": ["Unpillagable", "Provides a random bonus when entered", "Unbuildable"] + "uniques": ["Unpillagable", "Provides a random bonus when entered", "Unbuildable", + "Does not need removal of [Forest]", "Does not need removal of [Jungle]"] }, { "name": "City ruins", diff --git a/android/assets/jsons/Civ V - Vanilla/TileImprovements.json b/android/assets/jsons/Civ V - Vanilla/TileImprovements.json index 3026ecae53..6868de5ee5 100644 --- a/android/assets/jsons/Civ V - Vanilla/TileImprovements.json +++ b/android/assets/jsons/Civ V - Vanilla/TileImprovements.json @@ -270,7 +270,8 @@ { "name": "Ancient ruins", "terrainsCanBeBuiltOn": ["Land"], - "uniques": ["Unpillagable", "Provides a random bonus when entered", "Unbuildable"] + "uniques": ["Unpillagable", "Provides a random bonus when entered", "Unbuildable", + "Does not need removal of [Forest]", "Does not need removal of [Jungle]"] }, { "name": "City ruins", diff --git a/core/src/com/unciv/logic/map/mapgenerator/MapGenerator.kt b/core/src/com/unciv/logic/map/mapgenerator/MapGenerator.kt index 9cd1939440..7820f78de5 100644 --- a/core/src/com/unciv/logic/map/mapgenerator/MapGenerator.kt +++ b/core/src/com/unciv/logic/map/mapgenerator/MapGenerator.kt @@ -17,6 +17,7 @@ import com.unciv.models.ruleset.unique.Unique import com.unciv.models.ruleset.unique.UniqueType import com.unciv.ui.screens.mapeditorscreen.MapGeneratorSteps import com.unciv.logic.map.tile.TileNormalizer +import com.unciv.models.ruleset.tile.TileImprovement import com.unciv.models.ruleset.unique.StateForConditionals import com.unciv.utils.debug import kotlinx.coroutines.CoroutineScope @@ -353,13 +354,18 @@ class MapGenerator(val ruleset: Ruleset, private val coroutineScope: CoroutineSc val ruinsEquivalents = ruleset.tileImprovements.filter { it.value.isAncientRuinsEquivalent() } if (map.mapParameters.noRuins || ruinsEquivalents.isEmpty() ) return - val suitableTiles = map.values.filter { it.isLand && !it.isImpassible() } + + fun isPlaceable(improvement: TileImprovement, tile: Tile) = + tile.improvementFunctions.canImprovementBeBuiltHere(improvement, stateForConditionals = StateForConditionals.IgnoreConditionals) + + val suitableTiles = map.values.filter { it.isLand && !it.isImpassible() + && ruinsEquivalents.values.any { improvement -> isPlaceable(improvement, it) } } val locations = randomness.chooseSpreadOutLocations( (suitableTiles.size * ruleset.modOptions.constants.ancientRuinCountMultiplier).roundToInt(), suitableTiles, map.mapParameters.mapSize.radius) for (tile in locations) - tile.improvement = ruinsEquivalents.keys.random() + tile.improvement = ruinsEquivalents.values.filter { isPlaceable(it, tile) }.random().name } private fun spreadResources(tileMap: TileMap) {