diff --git a/android/assets/jsons/translations/template.properties b/android/assets/jsons/translations/template.properties index e4719adc68..3858eda58a 100644 --- a/android/assets/jsons/translations/template.properties +++ b/android/assets/jsons/translations/template.properties @@ -930,6 +930,7 @@ due to adopting [policy] = due to discovering [naturalWonder] = due to entering the [eraName] = due to constructing [buildingName] = +due to founding a city = from the ruins = # World Screen UI diff --git a/core/src/com/unciv/logic/city/managers/CityFounder.kt b/core/src/com/unciv/logic/city/managers/CityFounder.kt index d1a966e768..86bf6431e5 100644 --- a/core/src/com/unciv/logic/city/managers/CityFounder.kt +++ b/core/src/com/unciv/logic/city/managers/CityFounder.kt @@ -7,6 +7,8 @@ import com.unciv.logic.civilization.Proximity import com.unciv.logic.civilization.diplomacy.DiplomacyFlags import com.unciv.logic.civilization.managers.ReligionState import com.unciv.models.ruleset.nation.Nation +import com.unciv.models.ruleset.unique.StateForConditionals +import com.unciv.models.ruleset.unique.UniqueTriggerActivation import com.unciv.models.ruleset.unique.UniqueType class CityFounder { @@ -82,6 +84,12 @@ class CityFounder { triggerCitiesSettledNearOtherCiv(city) civInfo.gameInfo.cityDistances.setDirty() + + for (unique in civInfo.getTriggeredUniques(UniqueType.TriggerUponFoundingCity, + StateForConditionals(civInfo, city) + )) + UniqueTriggerActivation.triggerCivwideUnique(unique, civInfo, city, triggerNotificationText = "due to founding a city") + return city } diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt b/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt index f46c1e86b9..cf7f7e47f7 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt @@ -25,12 +25,12 @@ import kotlin.random.Random // Buildings, techs, policies, ancient ruins and promotions can have 'triggered' effects object UniqueTriggerActivation { - /** @return boolean whether an action was successfully performed */ + /** @return whether an action was successfully performed */ fun triggerCivwideUnique( unique: Unique, civInfo: Civilization, city: City? = null, - tile: Tile? = null, + tile: Tile? = city?.getCenterTile(), notification: String? = null, triggerNotificationText: String? = null ): Boolean { @@ -205,8 +205,8 @@ object UniqueTriggerActivation { "in other cities" -> civInfo.cities.asSequence().filter { it != city } else -> civInfo.cities.asSequence().filter { it.matchesFilter(unique.params[1]) } } - for (city in applicableCities) { - city.population.addPopulation(unique.params[0].toInt()) + for (applicableCity in applicableCities) { + applicableCity.population.addPopulation(unique.params[0].toInt()) } if (notification != null && applicableCities.any()) civInfo.addNotification( diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index 70374c38f3..314d2994a2 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -710,6 +710,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: TriggerUponDeclaringFriendship("upon declaring friendship", UniqueTarget.TriggerCondition), TriggerUponEnteringGoldenAge("upon entering a Golden Age", UniqueTarget.TriggerCondition), TriggerUponConqueringCity("upon conquering a city", UniqueTarget.TriggerCondition), + TriggerUponFoundingCity("upon founding a city", UniqueTarget.TriggerCondition), TriggerUponConstructingBuilding("upon constructing [buildingFilter]", UniqueTarget.TriggerCondition), // Not auto cityfiltered, since 'in all cities' can be read 'only if it's in all cities' TriggerUponConstructingBuildingCityFilter("upon constructing [buildingFilter] [cityFilter]", UniqueTarget.TriggerCondition),