diff --git a/core/src/com/unciv/models/ruleset/unique/Conditionals.kt b/core/src/com/unciv/models/ruleset/unique/Conditionals.kt index 30c436494e..3df7ea765f 100644 --- a/core/src/com/unciv/models/ruleset/unique/Conditionals.kt +++ b/core/src/com/unciv/models/ruleset/unique/Conditionals.kt @@ -146,9 +146,17 @@ object Conditionals { UniqueType.ConditionalReligionDisabled -> checkOnGameInfo { !isReligionEnabled() } UniqueType.ConditionalEspionageEnabled -> checkOnGameInfo { isEspionageEnabled() } UniqueType.ConditionalEspionageDisabled -> checkOnGameInfo { !isEspionageEnabled() } - UniqueType.ConditionalTech -> checkOnCiv { tech.isResearched(conditional.params[0]) } - UniqueType.ConditionalNoTech -> checkOnCiv { !tech.isResearched(conditional.params[0]) } - UniqueType.ConditionalWhileResearching -> checkOnCiv { tech.currentTechnologyName() == conditional.params[0] } + UniqueType.ConditionalTech -> checkOnCiv { + val filter = conditional.params[0] + if (filter in gameInfo.ruleset.technologies) tech.isResearched(conditional.params[0]) // fast common case + else tech.researchedTechnologies.any { it.matchesFilter(filter) } + } + UniqueType.ConditionalNoTech -> checkOnCiv { + val filter = conditional.params[0] + if (filter in gameInfo.ruleset.technologies) !tech.isResearched(conditional.params[0]) // fast common case + else tech.researchedTechnologies.none { it.matchesFilter(filter) } + } + UniqueType.ConditionalWhileResearching -> checkOnCiv { tech.currentTechnology()?.matchesFilter(conditional.params[0]) == true } UniqueType.ConditionalAfterPolicyOrBelief -> checkOnCiv { policies.isAdopted(conditional.params[0]) || religionManager.religion?.hasBelief(conditional.params[0]) == true } diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index c1521885f8..98a36b08d4 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -698,9 +698,9 @@ enum class UniqueType( ConditionalIfStartingInEra("if starting in the [era]", UniqueTarget.Conditional), ConditionalFirstCivToResearch("if no other Civilization has researched this", UniqueTarget.Conditional), - ConditionalTech("after discovering [tech]", UniqueTarget.Conditional), - ConditionalNoTech("before discovering [tech]", UniqueTarget.Conditional), - ConditionalWhileResearching("while researching [tech]", UniqueTarget.Conditional, + ConditionalTech("after discovering [techFilter]", UniqueTarget.Conditional), + ConditionalNoTech("before discovering [techFilter]", UniqueTarget.Conditional), + ConditionalWhileResearching("while researching [techFilter]", UniqueTarget.Conditional, docDescription = "This condition is fulfilled while the technology is actively being researched (it is the one research points are added to)"), ConditionalFirstCivToAdopt("if no other Civilization has adopted this", UniqueTarget.Conditional),