From 86cbe895be1125f716d816e47a2967f9660bfa77 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Tue, 15 Feb 2022 11:40:47 +0200 Subject: [PATCH] In Civ VI there are certain units available only if a specific building is built, and this was raised as a request by modders as well. (#6160) Instead of expanding the existing 'requires building' unique to units and adding limiters, it's both easier and more generalizable to add conditionals for cities with and without certain buildings to replace the uniques entirely --- .../jsons/Civ V - Gods & Kings/Buildings.json | 4 +-- .../jsons/Civ V - Vanilla/Buildings.json | 4 +-- .../com/unciv/models/ruleset/unique/Unique.kt | 4 +++ .../unciv/models/ruleset/unique/UniqueType.kt | 5 ++++ docs/uniques.md | 26 ++++++++----------- 5 files changed, 24 insertions(+), 19 deletions(-) diff --git a/android/assets/jsons/Civ V - Gods & Kings/Buildings.json b/android/assets/jsons/Civ V - Gods & Kings/Buildings.json index 297300198c..d5715f9652 100644 --- a/android/assets/jsons/Civ V - Gods & Kings/Buildings.json +++ b/android/assets/jsons/Civ V - Gods & Kings/Buildings.json @@ -1048,7 +1048,7 @@ "requiredBuilding": "Factory", "maintenance": 3, "requiredTech": "Ecology", - "uniques": ["Must be next to [Desert]", "Cannot be built with [Nuclear Plant]"] + "uniques": ["Must be next to [Desert]", "Only available "] }, { "name": "Recycling Center", @@ -1073,7 +1073,7 @@ "maintenance": 3, "requiredResource": "Uranium", "requiredTech": "Nuclear Fission", - "uniques": ["Cannot be built with [Solar Plant]"] + "uniques": ["Only available "] }, { "name": "Apollo Program", diff --git a/android/assets/jsons/Civ V - Vanilla/Buildings.json b/android/assets/jsons/Civ V - Vanilla/Buildings.json index 6739d71a0a..6e0203b156 100644 --- a/android/assets/jsons/Civ V - Vanilla/Buildings.json +++ b/android/assets/jsons/Civ V - Vanilla/Buildings.json @@ -917,7 +917,7 @@ "requiredBuilding": "Factory", "maintenance": 3, "requiredTech": "Ecology", - "uniques": ["Must be next to [Desert]", "Cannot be built with [Nuclear Plant]"] + "uniques": ["Must be next to [Desert]", "Only available "] }, { "name": "Nuclear Plant", @@ -927,7 +927,7 @@ "maintenance": 3, "requiredResource": "Uranium", "requiredTech": "Nuclear Fission", - "uniques": ["Cannot be built with [Solar Plant]"] + "uniques": ["Only available "] }, { "name": "Apollo Program", diff --git a/core/src/com/unciv/models/ruleset/unique/Unique.kt b/core/src/com/unciv/models/ruleset/unique/Unique.kt index b34cf2101f..c92807d33b 100644 --- a/core/src/com/unciv/models/ruleset/unique/Unique.kt +++ b/core/src/com/unciv/models/ruleset/unique/Unique.kt @@ -114,6 +114,10 @@ class Unique(val text: String, val sourceObjectType: UniqueTarget? = null, val s UniqueType.ConditionalNoPolicy -> state.civInfo != null && !state.civInfo.policies.isAdopted(condition.params[0]) + UniqueType.ConditionalCityWithBuilding -> + state.cityInfo != null && state.cityInfo.cityConstructions.containsBuildingOrEquivalent(condition.params[0]) + UniqueType.ConditionalCityWithoutBuilding -> + state.cityInfo != null && !state.cityInfo.cityConstructions.containsBuildingOrEquivalent(condition.params[0]) UniqueType.ConditionalSpecialistCount -> state.cityInfo != null && state.cityInfo.population.getNumberOfSpecialists() >= condition.params[0].toInt() UniqueType.ConditionalFollowerCount -> diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index 7a3a40eafa..2f7e879705 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -342,7 +342,10 @@ 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), @@ -587,6 +590,8 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: ConditionalTimedUnique("for [amount] turns", UniqueTarget.Conditional), /////// city conditionals + ConditionalCityWithBuilding("in cities with a [buildingFilter]", UniqueTarget.Conditional), + ConditionalCityWithoutBuilding("in cities without a [buildingFilter]", UniqueTarget.Conditional), ConditionalSpecialistCount("if this city has at least [amount] specialists", UniqueTarget.Conditional), ConditionalFollowerCount("in cities where this religion has at least [amount] followers", UniqueTarget.Conditional), ConditionalWhenGarrisoned("with a garrison", UniqueTarget.Conditional), diff --git a/docs/uniques.md b/docs/uniques.md index 6af7f9bd37..d61cd6aaef 100644 --- a/docs/uniques.md +++ b/docs/uniques.md @@ -381,9 +381,6 @@ Applicable to: Global #### Enables construction of Spaceship parts Applicable to: Global -#### Notified of new Barbarian encampments -Applicable to: Global - #### Enables Open Borders agreements Applicable to: Global @@ -752,16 +749,6 @@ Example: "Cost increases by [20] per owned city" Applicable to: Building -#### Cannot be built with [buildingName] -Example: "Cannot be built with [Library]" - -Applicable to: Building - -#### Requires a [buildingName] in this city -Example: "Requires a [Library] in this city" - -Applicable to: Building - #### Requires a [buildingName] in all cities Example: "Requires a [Library] in all cities" @@ -1391,6 +1378,16 @@ Example: "" Applicable to: Conditional +#### +Example: "" + +Applicable to: Conditional + +#### +Example: "" + +Applicable to: Conditional + #### Example: "" @@ -1572,8 +1569,7 @@ Applicable to: Conditional - "-33% unit upkeep costs" - Deprecated Extremely old - used for auto-updates only, replace with "[-33]% maintenance costs " - "-50% food consumption by specialists" - Deprecated Extremely old - used for auto-updates only, replace with "[-50]% Food consumption by specialists [in all cities]" - "+50% attacking strength for cities with garrisoned units" - Deprecated Extremely old - used for auto-updates only, replace with "[+50]% Strength for cities " - - "Incompatible with [policy/tech/promotion]" - Deprecated as of 3.19.8, replace with "Only available " OR "Only available " OR "Only available " - - "Not displayed as an available construction without [buildingName/tech/resource/policy]" - Deprecated as of 3.19.8, replace with "Only available " OR "Only available " OR "Only available " + - "[stats] with [resource]" - Deprecated as of 3.19.7, replace with "[stats] " - "Not displayed as an available construction unless [buildingName] is built" - Deprecated as of 3.16.11, replace with "Not displayed as an available construction without [buildingName]" - "[stats] once [tech] is discovered" - Deprecated as of 3.17.10 - removed 3.18.19, replace with "[stats] "