From 3422e161ada01731d1be86ebaf970f124fce6cb1 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Fri, 8 Jul 2022 15:48:33 +0300 Subject: [PATCH] Removed deprecated uniques --- .../automation/ChooseBeliefsAutomation.kt | 50 ++++---- core/src/com/unciv/logic/battle/Battle.kt | 12 -- .../com/unciv/logic/battle/BattleDamage.kt | 8 +- core/src/com/unciv/logic/city/CityInfo.kt | 4 +- core/src/com/unciv/logic/city/CityStats.kt | 18 --- .../logic/civilization/CivilizationInfo.kt | 1 - .../unciv/logic/civilization/PolicyManager.kt | 22 ---- .../unciv/logic/civilization/TechManager.kt | 13 +- .../src/com/unciv/logic/map/UnitPromotions.kt | 5 - core/src/com/unciv/models/ruleset/Building.kt | 41 ------- .../com/unciv/models/ruleset/unique/Unique.kt | 4 - .../ruleset/unique/UniqueTriggerActivation.kt | 9 -- .../unciv/models/ruleset/unique/UniqueType.kt | 113 +++++++++--------- .../com/unciv/models/ruleset/unit/BaseUnit.kt | 26 ---- .../ui/pickerscreens/TechPickerScreen.kt | 7 -- .../com/unciv/uniques/GlobalUniquesTests.kt | 3 +- .../unciv/uniques/TriggeredUniquesTests.kt | 5 - 17 files changed, 86 insertions(+), 255 deletions(-) diff --git a/core/src/com/unciv/logic/automation/ChooseBeliefsAutomation.kt b/core/src/com/unciv/logic/automation/ChooseBeliefsAutomation.kt index 704e99c6d1..c7d61be6a3 100644 --- a/core/src/com/unciv/logic/automation/ChooseBeliefsAutomation.kt +++ b/core/src/com/unciv/logic/automation/ChooseBeliefsAutomation.kt @@ -13,10 +13,10 @@ import kotlin.math.pow import kotlin.random.Random object ChooseBeliefsAutomation { - + fun rateBelief(civInfo: CivilizationInfo, belief: Belief): Float { var score = 0f - + for (city in civInfo.cities) { for (tile in city.getCenterTile().getTilesInDistance(3)) { val tileScore = beliefBonusForTile(belief, tile, city) @@ -24,29 +24,29 @@ object ChooseBeliefsAutomation { city.workedTiles.contains(tile.position) -> 8 tile.getCity() == city -> 5 else -> 3 - } * (Random.nextFloat() * 0.05f + 0.975f) + } * (Random.nextFloat() * 0.05f + 0.975f) } - + score += beliefBonusForCity(civInfo, belief, city) * (Random.nextFloat() * 0.1f + 0.95f) } - + score += beliefBonusForPlayer(civInfo, belief) * (Random.nextFloat() * 0.3f + 0.85f) // All of these Random.nextFloat() don't exist in the original, but I've added them to make things a bit more random. - + if (belief.type == BeliefType.Pantheon) score *= 0.9f - + return score } - + private fun beliefBonusForTile(belief: Belief, tile: TileInfo, city: CityInfo): Float { var bonusYield = 0f for (unique in belief.uniqueObjects) { when (unique.type) { UniqueType.StatsFromObject -> if (tile.matchesFilter(unique.params[1])) bonusYield += unique.stats.values.sum() - UniqueType.StatsFromTilesWithout -> + UniqueType.StatsFromTilesWithout -> if (city.matchesFilter(unique.params[3]) && tile.matchesFilter(unique.params[1]) && !tile.matchesFilter(unique.params[2]) @@ -57,7 +57,7 @@ object ChooseBeliefsAutomation { } return bonusYield } - + private fun beliefBonusForCity(civInfo: CivilizationInfo, belief: Belief, city: CityInfo): Float { var score = 0f val ruleSet = civInfo.gameInfo.ruleSet @@ -75,16 +75,16 @@ object ChooseBeliefsAutomation { UniqueType.PercentProductionWonders -> unique.params[0].toFloat() / 3f UniqueType.PercentProductionUnits -> unique.params[0].toFloat() / 3f UniqueType.StatsFromCitiesOnSpecificTiles -> - if (city.getCenterTile().matchesFilter(unique.params[1])) - unique.stats.values.sum() // Modified by personality + if (city.getCenterTile().matchesFilter(unique.params[1])) + unique.stats.values.sum() // Modified by personality else 0f UniqueType.StatsFromObject -> when { ruleSet.buildings.containsKey(unique.params[1]) -> { - unique.stats.values.sum() / + unique.stats.values.sum() / if (ruleSet.buildings[unique.params[1]]!!.isWonder) 2f else 1f - + } ruleSet.specialists.containsKey(unique.params[1]) -> { unique.stats.values.sum() * @@ -93,14 +93,12 @@ object ChooseBeliefsAutomation { } else -> 0f } - UniqueType.StatsFromXPopulation -> - unique.stats.values.sum() // Modified by personality UniqueType.StatsFromTradeRoute -> unique.stats.values.sum() * if (city.isConnectedToCapital()) 2f else 1f - UniqueType.StatPercentFromReligionFollowers -> - min(unique.params[0].toFloat() * city.population.population, unique.params[2].toFloat()) + UniqueType.StatPercentFromReligionFollowers -> + min(unique.params[0].toFloat() * city.population.population, unique.params[2].toFloat()) UniqueType.StatsPerCity -> if (city.matchesFilter(unique.params[1])) unique.stats.values.sum() @@ -108,10 +106,10 @@ object ChooseBeliefsAutomation { else -> 0f } } - + return score } - + private fun beliefBonusForPlayer(civInfo: CivilizationInfo, belief: Belief): Float { var score = 0f val amountOfEnhancedReligions = civInfo.religionManager.amountOfFoundableReligions() @@ -124,8 +122,8 @@ object ChooseBeliefsAutomation { amountOfEnhancedReligions < 33 -> 2f amountOfEnhancedReligions < 66 -> 1f else -> 1/2f - } - + } + for (unique in belief.uniqueObjects) { val modifier = if (unique.conditionals.any { it.type == UniqueType.ConditionalOurUnit && it.params[0] == civInfo.religionManager.getGreatProphetEquivalent() }) 1/2f @@ -137,9 +135,9 @@ object ChooseBeliefsAutomation { if (civInfo.wantsToFocusOn(Victory.Focus.Military)) 2f else 1f UniqueType.BuyUnitsForAmountStat, UniqueType.BuyBuildingsForAmountStat -> - if (civInfo.religionManager.religion != null + if (civInfo.religionManager.religion != null && civInfo.religionManager.religion!!.getFollowerUniques() - .any { it.type == unique.type } + .any { it.type == unique.type } ) 0f // This is something completely different from the original, but I have no idea // what happens over there @@ -173,13 +171,13 @@ object ChooseBeliefsAutomation { UniqueType.SpreadReligionStrength -> unique.params[0].toInt() / goodLateModifier UniqueType.FaithCostOfGreatProphetChange -> - unique.params[0].toInt() / goodLateModifier / 2f + unique.params[0].toInt() / goodLateModifier / 2f UniqueType.BuyBuildingsDiscount, UniqueType.BuyItemsDiscount, UniqueType.BuyUnitsDiscount -> unique.params[2].toInt() / goodLateModifier else -> 0f } } - + return score } } diff --git a/core/src/com/unciv/logic/battle/Battle.kt b/core/src/com/unciv/logic/battle/Battle.kt index 92bfdac83c..208c912213 100644 --- a/core/src/com/unciv/logic/battle/Battle.kt +++ b/core/src/com/unciv/logic/battle/Battle.kt @@ -791,18 +791,6 @@ object Battle { } else if (Random().nextFloat() < 0.5f && !tile.terrainFeatures.contains("Fallout")) { tile.addTerrainFeature("Fallout") } - if (!tile.terrainHasUnique(UniqueType.DestroyableByNukes)) return - - // Deprecated as of 3.19.19 -- If removed, the two successive `if`s above should be merged - val destructionChance = if (tile.terrainHasUnique(UniqueType.ResistsNukes)) 0.25f - else 0.5f - if (Random().nextFloat() < destructionChance) { - for (terrainFeature in tile.terrainFeatureObjects) - if (terrainFeature.hasUnique(UniqueType.DestroyableByNukes)) - tile.removeTerrainFeature(terrainFeature.name) - tile.addTerrainFeature("Fallout") - } - // } } diff --git a/core/src/com/unciv/logic/battle/BattleDamage.kt b/core/src/com/unciv/logic/battle/BattleDamage.kt index a61fe9a26a..d96a2c4919 100644 --- a/core/src/com/unciv/logic/battle/BattleDamage.kt +++ b/core/src/com/unciv/logic/battle/BattleDamage.kt @@ -114,7 +114,7 @@ object BattleDamage { modifiers.add(getTileSpecificModifiers(attacker, defender.getTile())) if (attacker.unit.isEmbarked() - && !(attacker.unit.hasUnique(UniqueType.AttackAcrossCoast)) || attacker.unit.hasUnique(UniqueType.AttackFromSea)) + && !(attacker.unit.hasUnique(UniqueType.AttackAcrossCoast))) modifiers["Landing"] = -50 // Land Melee Unit attacking to Water @@ -153,12 +153,6 @@ object BattleDamage { } } - for (unique in attacker.getCivInfo().getMatchingUniques(UniqueType.TimedAttackStrength)) { - if (attacker.matchesCategory(unique.params[1])) { - modifiers.add("Temporary Bonus", unique.params[0].toInt()) - } - } - } return modifiers diff --git a/core/src/com/unciv/logic/city/CityInfo.kt b/core/src/com/unciv/logic/city/CityInfo.kt index 42c3cdc81c..c2d16321da 100644 --- a/core/src/com/unciv/logic/city/CityInfo.kt +++ b/core/src/com/unciv/logic/city/CityInfo.kt @@ -506,9 +506,7 @@ class CityInfo : IsPartOfGameInfoSerialization { fun getGreatPersonPercentageBonus(): Int{ var allGppPercentageBonus = 0 - for (unique in getMatchingUniques(UniqueType.GreatPersonPointPercentage) - + getMatchingUniques(UniqueType.GreatPersonPointPercentageDeprecated) - ) { + for (unique in getMatchingUniques(UniqueType.GreatPersonPointPercentage)) { if (!matchesFilter(unique.params[1])) continue allGppPercentageBonus += unique.params[0].toInt() } diff --git a/core/src/com/unciv/logic/city/CityStats.kt b/core/src/com/unciv/logic/city/CityStats.kt index 9036527c67..f3874aa84b 100644 --- a/core/src/com/unciv/logic/city/CityStats.kt +++ b/core/src/com/unciv/logic/city/CityStats.kt @@ -94,9 +94,6 @@ class CityStats(val cityInfo: CityInfo) { val percentageStats = Stats() for (unique in cityInfo.getMatchingUniques(UniqueType.StatPercentFromTradeRoutes)) percentageStats[Stat.valueOf(unique.params[1])] += unique.params[0].toFloat() - // Deprecated as of 3.19.19 - if (civInfo.hasUnique(UniqueType.GoldBonusFromTradeRoutesDeprecated)) percentageStats[Stat.Gold] += 25f // Machu Picchu speciality - // for ((stat) in stats) { stats[stat] *= percentageStats[stat].toPercent() } @@ -250,10 +247,6 @@ class CityStats(val cityInfo: CityInfo) { sourceToStats.addStats(unique.stats.times(amountOfEffects), getSourceNameForUnique(unique), unique.sourceObjectName ?: "") } - for (unique in cityInfo.getMatchingUniques(UniqueType.StatsFromXPopulation)) - if (cityInfo.population.population >= unique.params[1].toInt()) - addUniqueStats(unique) - for (unique in cityInfo.getMatchingUniques(UniqueType.StatsFromCitiesOnSpecificTiles)) if (cityInfo.getCenterTile().matchesTerrainFilter(unique.params[1])) addUniqueStats(unique) @@ -417,17 +410,6 @@ class CityStats(val cityInfo: CityInfo) { if (cityInfo.matchesFilter(unique.params[2])) unhappinessFromCitizens += (unique.params[0].toFloat() / 100f) * cityInfo.population.getPopulationFilterAmount(unique.params[1]) - // Deprecated as of 3.19.19 - for (unique in cityInfo.getMatchingUniques(UniqueType.UnhappinessFromSpecialistsPercentageChange)) { - if (cityInfo.matchesFilter(unique.params[1])) - unhappinessFromCitizens += unique.params[0].toFloat() / 100f * cityInfo.population.getNumberOfSpecialists() - } - - for (unique in cityInfo.getMatchingUniques(UniqueType.UnhappinessFromPopulationPercentageChange)) - if (cityInfo.matchesFilter(unique.params[1])) - unhappinessFromCitizens += unique.params[0].toFloat() / 100f * cityInfo.population.population - // - if (hasExtraAnnexUnhappiness()) unhappinessFromCitizens *= 2f diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index cbafaee3c7..8e4e2458bd 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -810,7 +810,6 @@ class CivilizationInfo : IsPartOfGameInfoSerialization { policies.civInfo = this if (policies.adoptedPolicies.size > 0 && policies.numberOfAdoptedPolicies == 0) policies.numberOfAdoptedPolicies = policies.adoptedPolicies.count { !Policy.isBranchCompleteByName(it) } - policies.setTransients() questManager.civInfo = this questManager.setTransients() diff --git a/core/src/com/unciv/logic/civilization/PolicyManager.kt b/core/src/com/unciv/logic/civilization/PolicyManager.kt index c0924c9eb3..d66bf66a78 100644 --- a/core/src/com/unciv/logic/civilization/PolicyManager.kt +++ b/core/src/com/unciv/logic/civilization/PolicyManager.kt @@ -8,8 +8,6 @@ import com.unciv.models.ruleset.PolicyBranch import com.unciv.models.ruleset.unique.UniqueMap import com.unciv.models.ruleset.unique.UniqueTriggerActivation import com.unciv.models.ruleset.unique.UniqueType -import com.unciv.models.translations.equalsPlaceholderText -import com.unciv.models.translations.getPlaceholderParameters import com.unciv.ui.utils.extensions.toPercent import kotlin.math.pow import kotlin.math.roundToInt @@ -100,22 +98,6 @@ class PolicyManager : IsPartOfGameInfoSerialization { @Suppress("MemberVisibilityCanBePrivate") fun getPolicyByName(name: String): Policy = getRulesetPolicies()[name]!! - fun setTransients() { - for (policyName in adoptedPolicies) addPolicyToTransients( - getPolicyByName(policyName) - ) - } - - private fun addPolicyToTransients(policy: Policy) { - for (unique in policy.uniqueObjects) { - // Should be deprecated together with TimedAttackStrength so - // I'm putting this here so the compiler will complain if we don't - val rememberToDeprecate = UniqueType.TimedAttackStrength - if (!unique.text.contains(turnCountRegex)) - policyUniques.addUnique(unique) - } - } - fun addCulture(culture: Int) { val couldAdoptPolicyBefore = canAdoptPolicy() storedCulture += culture @@ -166,9 +148,6 @@ class PolicyManager : IsPartOfGameInfoSerialization { if (policy.policyBranchType == PolicyBranchType.BranchComplete) return false if (!getAdoptedPolicies().containsAll(policy.requires!!)) return false if (checkEra && civInfo.gameInfo.ruleSet.eras[policy.branch.era]!!.eraNumber > civInfo.getEraNumber()) return false - if (policy.getMatchingUniques(UniqueType.IncompatibleWith) - .any { adoptedPolicies.contains(it.params[0]) } - ) return false if (policy.uniqueObjects.filter { it.type == UniqueType.OnlyAvailableWhen } .any { !it.conditionalsApply(civInfo) }) return false return true @@ -198,7 +177,6 @@ class PolicyManager : IsPartOfGameInfoSerialization { } adoptedPolicies.add(policy.name) - addPolicyToTransients(policy) if (!branchCompletion) { val branch = policy.branch diff --git a/core/src/com/unciv/logic/civilization/TechManager.kt b/core/src/com/unciv/logic/civilization/TechManager.kt index 9bbf615f26..c6414902b3 100644 --- a/core/src/com/unciv/logic/civilization/TechManager.kt +++ b/core/src/com/unciv/logic/civilization/TechManager.kt @@ -134,9 +134,6 @@ class TechManager : IsPartOfGameInfoSerialization { if (tech.uniqueObjects.any { it.type == UniqueType.OnlyAvailableWhen && !it.conditionalsApply(civInfo) }) return false - if (tech.getMatchingUniques(UniqueType.IncompatibleWith).any { isResearched(it.params[0]) }) - return false - if (isResearched(tech.name) && !tech.isContinuallyResearchable()) return false @@ -381,15 +378,11 @@ class TechManager : IsPartOfGameInfoSerialization { } private fun updateTransientBooleans() { - val wayfinding = civInfo.hasUnique(UniqueType.EmbarkAndEnterOcean) - unitsCanEmbark = wayfinding || - civInfo.hasUnique(UniqueType.LandUnitEmbarkation) + unitsCanEmbark = civInfo.hasUnique(UniqueType.LandUnitEmbarkation) val enterOceanUniques = civInfo.getMatchingUniques(UniqueType.UnitsMayEnterOcean) allUnitsCanEnterOcean = enterOceanUniques.any { it.params[0] == "All" } - embarkedUnitsCanEnterOcean = wayfinding || - allUnitsCanEnterOcean || - enterOceanUniques.any { it.params[0] == "Embarked" } || - civInfo.hasUnique(UniqueType.EmbarkedUnitsMayEnterOcean) + embarkedUnitsCanEnterOcean = allUnitsCanEnterOcean || + enterOceanUniques.any { it.params[0] == "Embarked" } specificUnitsCanEnterOcean = enterOceanUniques.any { it.params[0] != "All" && it.params[0] != "Embarked" } movementSpeedOnRoads = if (civInfo.hasUnique(UniqueType.RoadMovementSpeed)) diff --git a/core/src/com/unciv/logic/map/UnitPromotions.kt b/core/src/com/unciv/logic/map/UnitPromotions.kt index 1b77546d3d..8d6ac6afc9 100644 --- a/core/src/com/unciv/logic/map/UnitPromotions.kt +++ b/core/src/com/unciv/logic/map/UnitPromotions.kt @@ -97,11 +97,6 @@ class UnitPromotions : IsPartOfGameInfoSerialization { .asSequence() .filter { unit.type.name in it.unitTypes && it.name !in promotions } .filter { it.prerequisites.isEmpty() || it.prerequisites.any { p->p in promotions } } - .filter { - it.getMatchingUniques(UniqueType.IncompatibleWith).all { - unique -> !promotions.contains(unique.params[0]) - } - } .filter { promotion -> promotion.uniqueObjects .none { it.type == UniqueType.OnlyAvailableWhen && !it.conditionalsApply(StateForConditionals(unit.civInfo, unit = unit)) } diff --git a/core/src/com/unciv/models/ruleset/Building.kt b/core/src/com/unciv/models/ruleset/Building.kt index 005ddfaa5e..580dd6f803 100644 --- a/core/src/com/unciv/models/ruleset/Building.kt +++ b/core/src/com/unciv/models/ruleset/Building.kt @@ -484,14 +484,6 @@ class Building : RulesetStatsObject(), INonPerpetualConstruction { if (!unique.conditionalsApply(civInfo, cityConstructions.cityInfo)) rejectionReasons.add(RejectionReason.ShouldNotBeDisplayed) - UniqueType.NotDisplayedWithout -> - if (unique.params[0] in ruleSet.tileResources && !civInfo.hasResource(unique.params[0]) - || unique.params[0] in ruleSet.buildings && !cityConstructions.containsBuildingOrEquivalent(unique.params[0]) - || unique.params[0] in ruleSet.technologies && !civInfo.tech.isResearched(unique.params[0]) - || unique.params[0] in ruleSet.policies && !civInfo.policies.isAdopted(unique.params[0]) - ) - rejectionReasons.add(RejectionReason.ShouldNotBeDisplayed) - UniqueType.EnablesNuclearWeapons -> if (!cityConstructions.cityInfo.civInfo.gameInfo.gameParameters.nuclearWeaponsEnabled) rejectionReasons.add(RejectionReason.DisabledBySetting) @@ -542,40 +534,12 @@ class Building : RulesetStatsObject(), INonPerpetualConstruction { if (civInfo.civConstructions.countConstructedObjects(this) >= unique.params[0].toInt()) rejectionReasons.add(RejectionReason.MaxNumberBuildable) - // This should be deprecated and replaced with the already-existing "only available when" unique, see above - UniqueType.UnlockedWith, UniqueType.Requires -> { - val filter = unique.params[0] - when { - ruleSet.technologies.contains(filter) -> - if (!civInfo.tech.isResearched(filter)) - rejectionReasons.add(RejectionReason.RequiresTech.toInstance(unique.text)) - ruleSet.policies.contains(filter) -> - if (!civInfo.policies.isAdopted(filter)) - rejectionReasons.add(RejectionReason.RequiresPolicy.toInstance(unique.text)) - ruleSet.eras.contains(filter) -> - if (civInfo.getEraNumber() < ruleSet.eras[filter]!!.eraNumber) - rejectionReasons.add(RejectionReason.UnlockedWithEra.toInstance(unique.text)) - ruleSet.buildings.contains(filter) -> - if (civInfo.cities.none { it.cityConstructions.containsBuildingOrEquivalent(filter) }) - rejectionReasons.add(RejectionReason.RequiresBuildingInSomeCity.toInstance(unique.text)) - } - } - // To be replaced with `Only available ` UniqueType.SpaceshipPart -> { if (!civInfo.hasUnique(UniqueType.EnablesConstructionOfSpaceshipParts)) rejectionReasons.add(RejectionReason.RequiresBuildingInSomeCity.toInstance("Apollo project not built!")) } - UniqueType.RequiresAnotherBuilding -> { - val filter = unique.params[0] - if (civInfo.gameInfo.ruleSet.buildings.containsKey(filter) && !cityConstructions.containsBuildingOrEquivalent(filter)) - rejectionReasons.add( - // replace with civ-specific building for user - RejectionReason.RequiresBuildingInThisCity.toInstance("Requires a [${civInfo.getEquivalentBuilding(filter)}] in this city") - ) - } - UniqueType.RequiresBuildingInSomeCities -> { val buildingName = unique.params[0] val numberOfCitiesRequired = unique.params[1].toInt() @@ -664,11 +628,6 @@ class Building : RulesetStatsObject(), INonPerpetualConstruction { rejectionReasons.add(RejectionReason.RequiresBuildingInThisCity.toInstance("Requires a [${civInfo.getEquivalentBuilding(requiredBuilding!!)}] in this city")) } - val cannotBeBuiltWithUnique = uniqueObjects - .firstOrNull { it.isOfType(UniqueType.CannotBeBuiltWith) } - if (cannotBeBuiltWithUnique != null && cityConstructions.containsBuildingOrEquivalent(cannotBeBuiltWithUnique.params[0])) - rejectionReasons.add(RejectionReason.CannotBeBuiltWith.toInstance(cannotBeBuiltWithUnique.text)) - for ((resource, amount) in getResourceRequirements()) if (civInfo.getCivResourcesByName()[resource]!! < amount) { rejectionReasons.add(RejectionReason.ConsumesResources.toInstance(resource.getConsumesAmountString(amount))) diff --git a/core/src/com/unciv/models/ruleset/unique/Unique.kt b/core/src/com/unciv/models/ruleset/unique/Unique.kt index 76dcc50353..1441c6110a 100644 --- a/core/src/com/unciv/models/ruleset/unique/Unique.kt +++ b/core/src/com/unciv/models/ruleset/unique/Unique.kt @@ -179,10 +179,6 @@ class Unique(val text: String, val sourceObjectType: UniqueTarget? = null, val s state.cityInfo != null && !state.cityInfo.cityConstructions.containsBuildingOrEquivalent(condition.params[0]) UniqueType.ConditionalPopulationFilter -> state.cityInfo != null && state.cityInfo.population.getPopulationFilterAmount(condition.params[1]) >= condition.params[0].toInt() - UniqueType.ConditionalSpecialistCount -> - state.cityInfo != null && state.cityInfo.population.getNumberOfSpecialists() >= condition.params[0].toInt() - UniqueType.ConditionalFollowerCount -> - state.cityInfo != null && state.cityInfo.religion.getFollowersOfMajorityReligion() >= condition.params[0].toInt() UniqueType.ConditionalWhenGarrisoned -> state.cityInfo != null && state.cityInfo.getCenterTile().militaryUnit != null && state.cityInfo.getCenterTile().militaryUnit!!.canGarrison() diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt b/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt index 90d46efc6b..ebcf5ff835 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt @@ -248,15 +248,6 @@ object UniqueTriggerActivation { return true } - TimedAttackStrength -> { - val temporaryUnique = TemporaryUnique(unique, unique.params[2].toInt()) - civInfo.temporaryUniques.add(temporaryUnique) - if (notification != null) { - civInfo.addNotification(notification, NotificationIcon.War) - } - return true - } - OneTimeRevealEntireMap -> { if (notification != null) { civInfo.addNotification(notification, LocationAction(tile?.position), NotificationIcon.Scout) diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index c0f1214ff3..4954260b35 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -4,8 +4,6 @@ import com.unciv.Constants import com.unciv.models.ruleset.Ruleset import com.unciv.models.translations.getPlaceholderParameters import com.unciv.models.translations.getPlaceholderText -import kotlin.collections.ArrayList -import kotlin.collections.HashSet /** inheritsFrom means that all such uniques are acceptable as well. * For example, all Global uniques are acceptable for Nations, Eras, etc. */ @@ -80,9 +78,6 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: StatsFromSpecialist("[stats] from every specialist [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), StatsPerPopulation("[stats] per [amount] population [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), - // ToDo: Reword to `[stats] ` for consistency with other conditionals - @Deprecated("as of 3.19.19", ReplaceWith("[stats] ")) - StatsFromXPopulation("[stats] in cities with [amount] or more population", UniqueTarget.Global, UniqueTarget.FollowerBelief), StatsFromCitiesOnSpecificTiles("[stats] in cities on [terrainFilter] tiles", UniqueTarget.Global, UniqueTarget.FollowerBelief), StatsFromBuildings("[stats] from all [buildingFilter] buildings", UniqueTarget.Global, UniqueTarget.FollowerBelief), @@ -103,8 +98,6 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: StatPercentFromReligionFollowers("[relativeAmount]% [stat] from every follower, up to [relativeAmount]%", UniqueTarget.FollowerBelief), BonusStatsFromCityStates("[relativeAmount]% [stat] from City-States", UniqueTarget.Global), StatPercentFromTradeRoutes("[relativeAmount]% [stat] from Trade Routes", UniqueTarget.Global), - @Deprecated("as of 3.19.19", ReplaceWith("[+25]% [Gold] from Trade Routes")) - GoldBonusFromTradeRoutesDeprecated("Gold from all trade routes +25%", UniqueTarget.Global), NullifiesStat("Nullifies [stat] [cityFilter]", UniqueTarget.Global), NullifiesGrowth("Nullifies Growth [cityFilter]", UniqueTarget.Global), @@ -160,8 +153,6 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: GainFreeBuildings("Gain a free [buildingName] [cityFilter]", UniqueTarget.Global), GreatPersonPointPercentage("[relativeAmount]% Great Person generation [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), - @Deprecated("As of 3.19.19", ReplaceWith("[relativeAmount]% Great Person generation [cityFilter]")) - GreatPersonPointPercentageDeprecated("[relativeAmount]% great person generation [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), DisablesReligion("Starting in this era disables religion", UniqueTarget.Era), FreeExtraBeliefs("May choose [amount] additional [beliefType] beliefs when [foundingOrEnhancing] a religion", UniqueTarget.Global), @@ -171,10 +162,6 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: StatsSpendingGreatPeople("[stats] whenever a Great Person is expended", UniqueTarget.Global), UnhappinessFromPopulationTypePercentageChange("[relativeAmount]% Unhappiness from [populationFilter] [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), - @Deprecated("As of 3.19.19", ReplaceWith("[relativeAmount]% Unhappiness from [Population] [cityFilter]")) - UnhappinessFromPopulationPercentageChange("[relativeAmount]% unhappiness from population [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), - @Deprecated("As of 3.19.19", ReplaceWith("[relativeAmount]% Unhappiness from [Specialists] [cityFilter]")) - UnhappinessFromSpecialistsPercentageChange("[relativeAmount]% unhappiness from specialists [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), FoodConsumptionBySpecialists("[relativeAmount]% Food consumption by specialists [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), HappinessPer2Policies("Provides 1 happiness per 2 additional social policies adopted", UniqueTarget.Global), ExcessHappinessToGlobalStat("[relativeAmount]% of excess happiness converted to [stat]", UniqueTarget.Global), @@ -292,20 +279,12 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: // ToDo: make per unit and use unit filters? LandUnitEmbarkation("Enables embarkation for land units", UniqueTarget.Global), UnitsMayEnterOcean("Enables [mapUnitFilter] units to enter ocean tiles", UniqueTarget.Global), - @Deprecated("as of 3.19.13", ReplaceWith("Enables [Embarked] units to enter ocean tiles ")) - EmbarkedUnitsMayEnterOcean("Enables embarked units to enter ocean tiles", UniqueTarget.Global), - @Deprecated("as of 3.19.9", ReplaceWith("Enables embarkation for land units \", \"Enables [All] units to enter ocean tiles ")) - EmbarkAndEnterOcean("Can embark and move over Coasts and Oceans immediately", UniqueTarget.Global), PopulationLossFromNukes("Population loss from nuclear attacks [relativeAmount]% [cityFilter]", UniqueTarget.Global), NaturalReligionSpreadStrength("[relativeAmount]% Natural religion spread [cityFilter]", UniqueTarget.FollowerBelief, UniqueTarget.Global), ReligionSpreadDistance("Religion naturally spreads to cities [amount] tiles away", UniqueTarget.Global, UniqueTarget.FollowerBelief), - @Deprecated("as of 3.19.8", ReplaceWith("Only available " + - "\" OR \"Only available " + - "\" OR \"Only available ")) - IncompatibleWith("Incompatible with [policy/tech/promotion]", UniqueTarget.Policy, UniqueTarget.Tech, UniqueTarget.Promotion), StartingTech("Starting tech", UniqueTarget.Tech), StartsWithTech("Starts with [tech]", UniqueTarget.Nation), StartsWithPolicy("Starts with [policy] adopted", UniqueTarget.Nation), @@ -334,24 +313,6 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: // Meant to be used together with conditionals, like "Only available " OnlyAvailableWhen("Only available", UniqueTarget.Unit, UniqueTarget.Building, UniqueTarget.Improvement, UniqueTarget.Policy, UniqueTarget.Tech, UniqueTarget.Promotion), - @Deprecated("as of 3.19.8", ReplaceWith("Only available \"" + - " OR \"Only available \"" + - " OR \"Only available \"" + - " OR \"Only available ")) - NotDisplayedWithout("Not displayed as an available construction without [buildingName/tech/resource/policy]", UniqueTarget.Building, UniqueTarget.Unit), - - @Deprecated("as of 3.19.12", ReplaceWith("Only available \"" + - " OR \"Only available \"" + - " OR \"Only available \"" + - " OR \"Only available ")) - UnlockedWith("Unlocked with [buildingName/tech/era/policy]", UniqueTarget.Building, UniqueTarget.Unit), - - - @Deprecated("as of 3.19.12", ReplaceWith("Only available \"" + - " OR \"Only available \"" + - " OR \"Only available \"" + - " OR \"Only available ")) - Requires("Requires [buildingName/tech/era/policy]", UniqueTarget.Building, UniqueTarget.Unit), ConvertFoodToProductionWhenConstructed("Excess Food converted to Production when under construction", UniqueTarget.Building, UniqueTarget.Unit), RequiresPopulation("Requires at least [amount] population", UniqueTarget.Building, UniqueTarget.Unit), @@ -366,10 +327,6 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: CostIncreasesPerCity("Cost increases by [amount] per owned city", UniqueTarget.Building), - @Deprecated("as of 3.19.9", ReplaceWith("Only available ")) - CannotBeBuiltWith("Cannot be built with [buildingName]", UniqueTarget.Building), - @Deprecated("as of 3.19.9", ReplaceWith("Only available ")) - RequiresAnotherBuilding("Requires a [buildingName] in this city", UniqueTarget.Building), RequiresBuildingInAllCities("Requires a [buildingName] in all cities", UniqueTarget.Building), RequiresBuildingInSomeCities("Requires a [buildingName] in at least [amount] cities", UniqueTarget.Building), CanOnlyBeBuiltInCertainCities("Can only be built [cityFilter]", UniqueTarget.Building), @@ -469,16 +426,12 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: DefenceBonusWhenEmbarked("Defense bonus when embarked", UniqueTarget.Unit, UniqueTarget.Global), @Deprecated("as of 4.0.3", ReplaceWith("Defense bonus when embarked ")) DefenceBonusWhenEmbarkedCivwide("Embarked units can defend themselves", UniqueTarget.Global), - @Deprecated("as of 3.19.8", ReplaceWith("Eliminates combat penalty for attacking across a coast")) - AttackFromSea("Eliminates combat penalty for attacking from the sea", UniqueTarget.Unit), AttackAcrossCoast("Eliminates combat penalty for attacking across a coast", UniqueTarget.Unit), AttackOnSea("May attack when embarked", UniqueTarget.Unit), AttackAcrossRiver("Eliminates combat penalty for attacking over a river", UniqueTarget.Unit), NoSight("No Sight", UniqueTarget.Unit), CanSeeOverObstacles("Can see over obstacles", UniqueTarget.Unit), - @Deprecated("as of 3.19.19", ReplaceWith("[+4] Sight\", \"Can see over obstacles")) - SixTilesAlwaysVisible("6 tiles in every direction always visible", UniqueTarget.Unit), CarryAirUnits("Can carry [amount] [mapUnitFilter] units", UniqueTarget.Unit), CarryExtraAirUnits("Can carry [amount] extra [mapUnitFilter] units", UniqueTarget.Unit), @@ -602,10 +555,6 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: RareFeature("Rare feature", UniqueTarget.Terrain), DestroyableByNukesChance("[amount]% Chance to be destroyed by nukes", UniqueTarget.Terrain), - @Deprecated("as of 3.19.19", ReplaceWith("[25]% Chance to be destroyed by nukes")) - ResistsNukes("Resistant to nukes", UniqueTarget.Terrain), - @Deprecated("as of 3.19.19", ReplaceWith("[50]% Chance to be destroyed by nukes")) - DestroyableByNukes("Can be destroyed by nukes", UniqueTarget.Terrain), FreshWater(Constants.freshWater, UniqueTarget.Terrain), RoughTerrain("Rough terrain", UniqueTarget.Terrain), @@ -683,10 +632,6 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: ConditionalCityWithBuilding("in cities with a [buildingFilter]", UniqueTarget.Conditional), ConditionalCityWithoutBuilding("in cities without a [buildingFilter]", UniqueTarget.Conditional), ConditionalPopulationFilter("in cities with at least [amount] [populationFilter]", UniqueTarget.Conditional), - @Deprecated("as of 3.19.19", ReplaceWith("in cities with at least [amount] [Specialists]")) - ConditionalSpecialistCount("if this city has at least [amount] specialists", UniqueTarget.Conditional), - @Deprecated("as of 3.19.19", ReplaceWith("in cities with at least [amount] [Followers of the Majority Religion]")) - ConditionalFollowerCount("in cities where this religion has at least [amount] followers", UniqueTarget.Conditional), ConditionalWhenGarrisoned("with a garrison", UniqueTarget.Conditional), /////// unit conditionals @@ -754,8 +699,6 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: SkipPromotion("Doing so will consume this opportunity to choose a Promotion", UniqueTarget.Promotion), UnitsGainPromotion("[mapUnitFilter] units gain the [promotion] promotion", UniqueTarget.Triggerable), // Not used in Vanilla - @Deprecated("as of 3.19.8", ReplaceWith("[+amount]% Strength ")) - TimedAttackStrength("+[amount]% attack strength to all [mapUnitFilter] units for [amount2] turns", UniqueTarget.Global), // used in Policy FreeStatBuildings("Provides the cheapest [stat] building in your first [amount] cities for free", UniqueTarget.Triggerable), // used in Policy FreeSpecificBuildings("Provides a [buildingName] in your first [amount] cities for free", UniqueTarget.Triggerable), // used in Policy @@ -774,6 +717,62 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: // endregion // region DEPRECATED AND REMOVED + @Deprecated("as of 3.19.8", ReplaceWith("Eliminates combat penalty for attacking across a coast"), DeprecationLevel.ERROR) + AttackFromSea("Eliminates combat penalty for attacking from the sea", UniqueTarget.Unit), + @Deprecated("as of 3.19.19", ReplaceWith("[+4] Sight\", \"Can see over obstacles"), DeprecationLevel.ERROR) + SixTilesAlwaysVisible("6 tiles in every direction always visible", UniqueTarget.Unit), + @Deprecated("as of 3.19.19", ReplaceWith("[25]% Chance to be destroyed by nukes"), DeprecationLevel.ERROR) + ResistsNukes("Resistant to nukes", UniqueTarget.Terrain), + @Deprecated("as of 3.19.19", ReplaceWith("[50]% Chance to be destroyed by nukes"), DeprecationLevel.ERROR) + DestroyableByNukes("Can be destroyed by nukes", UniqueTarget.Terrain), + @Deprecated("as of 3.19.19", ReplaceWith("in cities with at least [amount] [Specialists]"), DeprecationLevel.ERROR) + ConditionalSpecialistCount("if this city has at least [amount] specialists", UniqueTarget.Conditional), + @Deprecated("as of 3.19.19", ReplaceWith("in cities with at least [amount] [Followers of the Majority Religion]"), DeprecationLevel.ERROR) + ConditionalFollowerCount("in cities where this religion has at least [amount] followers", UniqueTarget.Conditional), + @Deprecated("as of 3.19.8", ReplaceWith("[+amount]% Strength "), DeprecationLevel.ERROR) + TimedAttackStrength("+[amount]% attack strength to all [mapUnitFilter] units for [amount2] turns", UniqueTarget.Global), // used in Policy + @Deprecated("as of 3.19.13", ReplaceWith("Enables [Embarked] units to enter ocean tiles "), DeprecationLevel.ERROR) + EmbarkedUnitsMayEnterOcean("Enables embarked units to enter ocean tiles", UniqueTarget.Global), + @Deprecated("as of 3.19.9", ReplaceWith("Enables embarkation for land units \", \"Enables [All] units to enter ocean tiles "), DeprecationLevel.ERROR) + EmbarkAndEnterOcean("Can embark and move over Coasts and Oceans immediately", UniqueTarget.Global), + @Deprecated("As of 3.19.19", ReplaceWith("[relativeAmount]% Unhappiness from [Population] [cityFilter]"), DeprecationLevel.ERROR) + UnhappinessFromPopulationPercentageChange("[relativeAmount]% unhappiness from population [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), + @Deprecated("As of 3.19.19", ReplaceWith("[relativeAmount]% Unhappiness from [Specialists] [cityFilter]"), DeprecationLevel.ERROR) + UnhappinessFromSpecialistsPercentageChange("[relativeAmount]% unhappiness from specialists [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), + @Deprecated("As of 3.19.19", ReplaceWith("[relativeAmount]% Great Person generation [cityFilter]"), DeprecationLevel.ERROR) + GreatPersonPointPercentageDeprecated("[relativeAmount]% great person generation [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), + @Deprecated("as of 3.19.19", ReplaceWith("[+25]% [Gold] from Trade Routes"), DeprecationLevel.ERROR) + GoldBonusFromTradeRoutesDeprecated("Gold from all trade routes +25%", UniqueTarget.Global), + // ToDo: Reword to `[stats] ` for consistency with other conditionals + @Deprecated("as of 3.19.19", ReplaceWith("[stats] "), DeprecationLevel.ERROR) + StatsFromXPopulation("[stats] in cities with [amount] or more population", UniqueTarget.Global, UniqueTarget.FollowerBelief), + @Deprecated("as of 3.19.8", ReplaceWith("Only available " + + "\" OR \"Only available " + + "\" OR \"Only available "), DeprecationLevel.ERROR) + IncompatibleWith("Incompatible with [policy/tech/promotion]", UniqueTarget.Policy, UniqueTarget.Tech, UniqueTarget.Promotion), + @Deprecated("as of 3.19.8", ReplaceWith("Only available \"" + + " OR \"Only available \"" + + " OR \"Only available \"" + + " OR \"Only available "), DeprecationLevel.ERROR) + NotDisplayedWithout("Not displayed as an available construction without [buildingName/tech/resource/policy]", UniqueTarget.Building, UniqueTarget.Unit), + + @Deprecated("as of 3.19.12", ReplaceWith("Only available \"" + + " OR \"Only available \"" + + " OR \"Only available \"" + + " OR \"Only available "), DeprecationLevel.ERROR) + UnlockedWith("Unlocked with [buildingName/tech/era/policy]", UniqueTarget.Building, UniqueTarget.Unit), + + + @Deprecated("as of 3.19.12", ReplaceWith("Only available \"" + + " OR \"Only available \"" + + " OR \"Only available \"" + + " OR \"Only available "), DeprecationLevel.ERROR) + Requires("Requires [buildingName/tech/era/policy]", UniqueTarget.Building, UniqueTarget.Unit), + @Deprecated("as of 3.19.9", ReplaceWith("Only available "), DeprecationLevel.ERROR) + CannotBeBuiltWith("Cannot be built with [buildingName]", UniqueTarget.Building), + @Deprecated("as of 3.19.9", ReplaceWith("Only available "), DeprecationLevel.ERROR) + RequiresAnotherBuilding("Requires a [buildingName] in this city", UniqueTarget.Building), + @Deprecated("as of 4.1.0", ReplaceWith("[+15]% Strength bonus for [Military] units within [2] tiles"), DeprecationLevel.ERROR) BonusForUnitsInRadius("Bonus for units in 2 tile radius 15%", UniqueTarget.Unit), diff --git a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt index 17dac036a7..31e3869670 100644 --- a/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt +++ b/core/src/com/unciv/models/ruleset/unit/BaseUnit.kt @@ -370,13 +370,6 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction { UniqueType.OnlyAvailableWhen -> if (!unique.conditionalsApply(civInfo, cityConstructions.cityInfo)) rejectionReasons.add(RejectionReason.ShouldNotBeDisplayed) - UniqueType.NotDisplayedWithout -> { - val filter = unique.params[0] - if (filter in civInfo.gameInfo.ruleSet.tileResources && !civInfo.hasResource(filter) - || filter in civInfo.gameInfo.ruleSet.buildings && !cityConstructions.containsBuildingOrEquivalent(filter)) - rejectionReasons.add(RejectionReason.ShouldNotBeDisplayed) - } - UniqueType.RequiresPopulation -> if (unique.params[0].toInt() > cityConstructions.cityInfo.population.population) rejectionReasons.add(RejectionReason.PopulationRequirement.toInstance(unique.text)) @@ -413,25 +406,6 @@ class BaseUnit : RulesetObject(), INonPerpetualConstruction { UniqueType.Unbuildable -> rejectionReasons.add(RejectionReason.Unbuildable) - // This should be deprecated and replaced with the already-existing "only available when" unique, see above - UniqueType.UnlockedWith, UniqueType.Requires -> { - val filter = unique.params[0] - when { - ruleSet.technologies.contains(filter) -> - if (!civInfo.tech.isResearched(filter)) - rejectionReasons.add(RejectionReason.RequiresTech.toInstance(unique.text)) - ruleSet.policies.contains(filter) -> - if (!civInfo.policies.isAdopted(filter)) - rejectionReasons.add(RejectionReason.RequiresPolicy.toInstance(unique.text)) - ruleSet.eras.contains(filter) -> - if (civInfo.getEraNumber() < ruleSet.eras[filter]!!.eraNumber) - rejectionReasons.add(RejectionReason.UnlockedWithEra.toInstance(unique.text)) - ruleSet.buildings.contains(filter) -> - if (civInfo.cities.none { it.cityConstructions.containsBuildingOrEquivalent(filter) }) - rejectionReasons.add(RejectionReason.RequiresBuildingInSomeCity.toInstance(unique.text)) - } - } - UniqueType.FoundCity -> if (civInfo.isCityState() || civInfo.isOneCityChallenger()) rejectionReasons.add(RejectionReason.NoSettlerForOneCityPlayers) diff --git a/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt index 0d65b55962..017a94f63b 100644 --- a/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/TechPickerScreen.kt @@ -17,7 +17,6 @@ import com.unciv.ui.civilopedia.CivilopediaScreen import com.unciv.ui.images.ImageGetter import com.unciv.ui.popup.ToastPopup import com.unciv.ui.utils.Fonts -import com.unciv.ui.utils.KeyCharAndCode import com.unciv.ui.utils.extensions.addBorder import com.unciv.ui.utils.extensions.colorFromRGB import com.unciv.ui.utils.extensions.darken @@ -270,12 +269,6 @@ class TechPickerScreen( val pathToTech = civTech.getRequiredTechsToDestination(tech) for (requiredTech in pathToTech) { - for (unique in requiredTech.getMatchingUniques(UniqueType.IncompatibleWith)) - if (civTech.isResearched(unique.params[0])) { - rightSideButton.setText(unique.text.tr()) - rightSideButton.disable() - return - } for (unique in requiredTech.uniqueObjects .filter { it.type == UniqueType.OnlyAvailableWhen && !it.conditionalsApply(civInfo) }) { rightSideButton.setText(unique.text.tr()) diff --git a/tests/src/com/unciv/uniques/GlobalUniquesTests.kt b/tests/src/com/unciv/uniques/GlobalUniquesTests.kt index 506bcc9381..5146984c43 100644 --- a/tests/src/com/unciv/uniques/GlobalUniquesTests.kt +++ b/tests/src/com/unciv/uniques/GlobalUniquesTests.kt @@ -5,7 +5,6 @@ import com.badlogic.gdx.math.Vector2 import com.unciv.Constants import com.unciv.logic.map.RoadStatus import com.unciv.models.ruleset.BeliefType -import com.unciv.models.ruleset.tile.TileImprovement import com.unciv.models.stats.Stats import com.unciv.testing.GdxTestRunner import com.unciv.ui.worldscreen.unit.UnitActions @@ -82,7 +81,7 @@ class GlobalUniquesTests { val civInfo = game.addCiv() val tile = game.setTileFeatures(Vector2(0f,0f), Constants.desert) val cityInfo = game.addCity(civInfo, tile, true, initialPopulation = 2) - val building = game.createBuilding("[+3 Gold] in cities with [3] or more population") + val building = game.createBuilding("[+3 Gold] ") cityInfo.cityConstructions.addBuilding(building.name) diff --git a/tests/src/com/unciv/uniques/TriggeredUniquesTests.kt b/tests/src/com/unciv/uniques/TriggeredUniquesTests.kt index 6655029ebc..7e7ae72d1f 100644 --- a/tests/src/com/unciv/uniques/TriggeredUniquesTests.kt +++ b/tests/src/com/unciv/uniques/TriggeredUniquesTests.kt @@ -13,11 +13,6 @@ import org.junit.runner.RunWith @RunWith(GdxTestRunner::class) class TriggeredUniquesTests { - /** - * Autocracy Complete was [UniqueType.TimedAttackStrength] - * Now: [UniqueType.Strength], ConditionalAttacking, ConditionalOurUnit, [UniqueType.ConditionalTimedUnique] - */ - private val game = TestGame().apply { makeHexagonalMap(2) } private val civInfo = game.addCiv() private val policy =