diff --git a/android/assets/jsons/Civ V - Vanilla/Buildings.json b/android/assets/jsons/Civ V - Vanilla/Buildings.json index 76abf2c424..fa126cf720 100644 --- a/android/assets/jsons/Civ V - Vanilla/Buildings.json +++ b/android/assets/jsons/Civ V - Vanilla/Buildings.json @@ -301,6 +301,7 @@ "requiredBuilding": "Monument", "maintenance": 2, "hurryCostModifier": 25, + "uniques": ["Destroyed when the city is captured"], "requiredTech": "Drama and Poetry" }, { diff --git a/core/src/com/unciv/logic/city/CityInfo.kt b/core/src/com/unciv/logic/city/CityInfo.kt index 2d2eabc258..8b1b1f700b 100644 --- a/core/src/com/unciv/logic/city/CityInfo.kt +++ b/core/src/com/unciv/logic/city/CityInfo.kt @@ -624,7 +624,8 @@ class CityInfo { fun matchesFilter(filter: String, viewingCiv: CivilizationInfo = civInfo): Boolean { return when (filter) { "in this city" -> true - "in all cities" -> true + "in all cities" -> true // Filtered by the way uniques our found + "in other cities" -> true // Filtered by the way uniques our found "in all coastal cities" -> isCoastal() "in capital" -> isCapital() "in all non-occupied cities" -> !cityStats.hasExtraAnnexUnhappiness() || isPuppet @@ -671,12 +672,16 @@ class CityInfo { // The localUniques might not be filtered when passed as a parameter, so we filter it anyway // The time loss shouldn't be that large I don't think return civInfo.getMatchingUniques(placeholderText, this) + - localUniques.filter { it.placeholderText == placeholderText } + localUniques.filter { + it.placeholderText == placeholderText + && it.params.none { param -> param == "in other cities" } + } } // Matching uniques provided by sources in the city itself fun getLocalMatchingUniques(placeholderText: String): Sequence { - return cityConstructions.builtBuildingUniqueMap.getUniques(placeholderText) + + return cityConstructions.builtBuildingUniqueMap.getUniques(placeholderText) + .filter { it.params.none { param -> param == "in other cities" } } + religion.getMatchingUniques(placeholderText) } diff --git a/core/src/com/unciv/logic/city/CityStats.kt b/core/src/com/unciv/logic/city/CityStats.kt index c20c3cdb3e..d3a21a2e1c 100644 --- a/core/src/com/unciv/logic/city/CityStats.kt +++ b/core/src/com/unciv/logic/city/CityStats.kt @@ -420,7 +420,7 @@ class CityStats(val cityInfo: CityInfo) { newHappinessList["National ability"] = getStatsFromUniques(cityInfo.civInfo.nation.uniqueObjects.asSequence()).happiness - newHappinessList["Wonders"] = getStatsFromUniques(civInfo.getCivWideBuildingUniques()).happiness + newHappinessList["Wonders"] = getStatsFromUniques(civInfo.getCivWideBuildingUniques(cityInfo)).happiness newHappinessList["Religion"] = getStatsFromUniques(cityInfo.religion.getUniques()).happiness @@ -445,7 +445,7 @@ class CityStats(val cityInfo: CityInfo) { newBaseStatList["Buildings"] = cityInfo.cityConstructions.getStats() newBaseStatList["Policies"] = getStatsFromUniques(civInfo.policies.policyUniques.getAllUniques()) newBaseStatList["National ability"] = getStatsFromNationUnique() - newBaseStatList["Wonders"] = getStatsFromUniques(civInfo.getCivWideBuildingUniques()) + newBaseStatList["Wonders"] = getStatsFromUniques(civInfo.getCivWideBuildingUniques(cityInfo)) newBaseStatList["City-States"] = getStatsFromCityStates() newBaseStatList["Religion"] = getStatsFromUniques(cityInfo.religion.getUniques()) @@ -459,7 +459,7 @@ class CityStats(val cityInfo: CityInfo) { newStatPercentBonusList["Policies"] = getStatPercentBonusesFromUniques(currentConstruction, cityInfo.civInfo.policies.policyUniques.getAllUniques()) newStatPercentBonusList["Buildings"] = getStatPercentBonusesFromUniques(currentConstruction, localBuildingUniques) .plus(cityInfo.cityConstructions.getStatPercentBonuses()) // This function is to be deprecated but it'll take a while. - newStatPercentBonusList["Wonders"] = getStatPercentBonusesFromUniques(currentConstruction, cityInfo.civInfo.getCivWideBuildingUniques()) + newStatPercentBonusList["Wonders"] = getStatPercentBonusesFromUniques(currentConstruction, cityInfo.civInfo.getCivWideBuildingUniques(cityInfo)) newStatPercentBonusList["Railroads"] = getStatPercentBonusesFromRailroad() // Name chosen same as tech, for translation, but theoretically independent newStatPercentBonusList["Resources"] = getStatPercentBonusesFromResources(currentConstruction) newStatPercentBonusList["National ability"] = getStatPercentBonusesFromNationUnique(currentConstruction) diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index 5d68fd5ce3..a17e068df4 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -276,9 +276,13 @@ class CivilizationInfo { fun hasResource(resourceName: String): Boolean = getCivResourcesByName()[resourceName]!! > 0 - fun getCivWideBuildingUniques(): Sequence = cities.asSequence().flatMap { - city -> city.getAllUniquesWithNonLocalEffects() - } + fun getCivWideBuildingUniques(cityItIsFor: CityInfo?): Sequence = + cities.asSequence().flatMap { + city -> + if (cityItIsFor != null && city == cityItIsFor) + city.getAllUniquesWithNonLocalEffects().filter { it.params.none { param -> param == "in other cities" } } + else city.getAllUniquesWithNonLocalEffects() + } fun hasUnique(unique: String) = getMatchingUniques(unique).any()