diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt b/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt index 3e57fe6ffd..f98d3711cc 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt @@ -22,6 +22,7 @@ import com.unciv.logic.civilization.managers.ReligionState import com.unciv.logic.map.mapgenerator.NaturalWonderGenerator import com.unciv.logic.map.mapgenerator.RiverGenerator import com.unciv.logic.map.mapunit.MapUnit +import com.unciv.logic.map.tile.RoadStatus import com.unciv.logic.map.tile.Tile import com.unciv.logic.map.tile.TileNormalizer import com.unciv.models.UpgradeUnitAction @@ -1073,6 +1074,38 @@ object UniqueTriggerActivation { } } + UniqueType.OneTimeRemoveResourcesFromTile -> { + if (tile == null) return null + if (tile.resource == null) return null + val resourceFilter = unique.params[0] + if (!tile.tileResource.matchesFilter(resourceFilter)) return null + return { + tile.resource = null + tile.resourceAmount = 0 + true + } + } + + UniqueType.OneTimeRemoveImprovementsFromTile -> { + if (tile == null) return null + val tileImprovement = tile.getTileImprovement() + if (tileImprovement == null) return null + val improvementFilter = unique.params[0] + if (!tileImprovement.matchesFilter(improvementFilter)) return null + return { + // Don't remove the improvement if we're just removing the roads + if (improvementFilter != "All Road") { + tile.removeImprovement() + } + + // Remove the roads if desired + if (improvementFilter == "All" || improvementFilter == "All Road") { + tile.removeRoad() + } + true + } + } + UniqueType.OneTimeChangeTerrain -> { if (tile == null) return null val terrain = ruleset.terrains[unique.params[0]] ?: return null diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index 9749342825..038adbee94 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -865,6 +865,8 @@ enum class UniqueType( OneTimeChangeTerrain("Turn this tile into a [terrainName] tile", UniqueTarget.Triggerable), + OneTimeRemoveResourcesFromTile("Remove [resourceFilter] resources from this tile", UniqueTarget.Triggerable), + OneTimeRemoveImprovementsFromTile("Remove [improvementFilter] improvements from this tile", UniqueTarget.Triggerable), UnitsGainPromotion("[mapUnitFilter] units gain the [promotion] promotion", UniqueTarget.Triggerable, docDescription = "Works only with promotions that are valid for the unit's type - or for promotions that do not specify any."), // Not used in Vanilla diff --git a/docs/Modders/uniques.md b/docs/Modders/uniques.md index ecf5962416..e34b704cff 100644 --- a/docs/Modders/uniques.md +++ b/docs/Modders/uniques.md @@ -176,6 +176,16 @@ Simple unique parameters are explained by mouseover. Complex parameters are expl Applicable to: Triggerable +??? example "Remove [resourceFilter] resources from this tile" + Example: "Remove [Strategic] resources from this tile" + + Applicable to: Triggerable + +??? example "Remove [improvementFilter] improvements from this tile" + Example: "Remove [All Road] improvements from this tile" + + Applicable to: Triggerable + ??? example "[mapUnitFilter] units gain the [promotion] promotion" Works only with promotions that are valid for the unit's type - or for promotions that do not specify any. Example: "[Wounded] units gain the [Shock I] promotion"