From f9c05997dd0f52b25d7d60e81e1c3a7594088883 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Sun, 23 Jan 2022 16:03:50 +0200 Subject: [PATCH] Typified some building uniques (#6017) * Typified some building uniques I noticed that the code allows "[stats] from every [buildingFilter]" but the UniqueType was limited to "[stats] from every [buildingName]", so now that that's available we don't actually need the "[stats] from every Wonder" unique :) * buildings-only unique moved to buildings section --- android/assets/jsons/Civ V - Gods & Kings/Beliefs.json | 2 +- .../assets/jsons/Civ V - Gods & Kings/Policies.json | 2 +- android/assets/jsons/Civ V - Vanilla/Policies.json | 2 +- core/src/com/unciv/models/ruleset/Building.kt | 8 ++++---- core/src/com/unciv/models/ruleset/unique/UniqueType.kt | 10 +++++++--- docs/uniques.md | 5 +++++ 6 files changed, 19 insertions(+), 10 deletions(-) diff --git a/android/assets/jsons/Civ V - Gods & Kings/Beliefs.json b/android/assets/jsons/Civ V - Gods & Kings/Beliefs.json index f8081838da..eb6ad43a30 100644 --- a/android/assets/jsons/Civ V - Gods & Kings/Beliefs.json +++ b/android/assets/jsons/Civ V - Gods & Kings/Beliefs.json @@ -138,7 +138,7 @@ { "name": "Divine inspiration", "type": "Follower", - "uniques": ["[+2 Faith] from every Wonder"] + "uniques": ["[+2 Faith] from every [Wonder]"] }, { "name": "Feed the World", diff --git a/android/assets/jsons/Civ V - Gods & Kings/Policies.json b/android/assets/jsons/Civ V - Gods & Kings/Policies.json index 15485b3afe..5fccb2813f 100644 --- a/android/assets/jsons/Civ V - Gods & Kings/Policies.json +++ b/android/assets/jsons/Civ V - Gods & Kings/Policies.json @@ -327,7 +327,7 @@ "policies": [ { "name": "Constitution", - "uniques": ["[+2 Culture] from every Wonder"], + "uniques": ["[+2 Culture] from every [Wonder]"], "row": 1, "column": 1 }, diff --git a/android/assets/jsons/Civ V - Vanilla/Policies.json b/android/assets/jsons/Civ V - Vanilla/Policies.json index cc1adf7dc3..65985fbb59 100644 --- a/android/assets/jsons/Civ V - Vanilla/Policies.json +++ b/android/assets/jsons/Civ V - Vanilla/Policies.json @@ -323,7 +323,7 @@ "policies": [ { "name": "Constitution", - "uniques": ["[+2 Culture] from every Wonder"], + "uniques": ["[+2 Culture] from every [Wonder]"], "row": 1, "column": 1 }, diff --git a/core/src/com/unciv/models/ruleset/Building.kt b/core/src/com/unciv/models/ruleset/Building.kt index 0ffb7b4612..67ea7de63b 100644 --- a/core/src/com/unciv/models/ruleset/Building.kt +++ b/core/src/com/unciv/models/ruleset/Building.kt @@ -180,18 +180,18 @@ class Building : RulesetStatsObject(), INonPerpetualConstruction { stats.add(unique.stats) @Suppress("RemoveRedundantQualifierName") // make it clearer Building inherits Stats - for (unique in uniqueObjects) - if (unique.placeholderText == "[] with []" && civInfo.hasResource(unique.params[1]) + for (unique in getMatchingUniques(UniqueType.StatsWithResource)) + if (civInfo.hasResource(unique.params[1]) && Stats.isStats(unique.params[0])) stats.add(unique.stats) if (!isWonder) - for (unique in city.getMatchingUniques("[] from all [] buildings")) { + for (unique in city.getMatchingUniques(UniqueType.StatsFromBuildings)) { if (matchesFilter(unique.params[1])) stats.add(unique.stats) } else - for (unique in city.getMatchingUniques("[] from every Wonder")) + for (unique in city.getMatchingUniques(UniqueType.StatsFromWondersDeprecated)) stats.add(unique.stats) return stats } diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index 2f1ca504ad..75702f5f97 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -75,14 +75,17 @@ enum class UniqueType(val text:String, vararg targets: UniqueTarget, val flags: StatsFromCitiesOnSpecificTiles("[stats] in cities on [terrainFilter] tiles", UniqueTarget.Global, UniqueTarget.FollowerBelief), @Deprecated("As of 3.18.14", ReplaceWith("[stats] [in all cities] OR [stats] [in all cities] ")) StatsFromCitiesBefore("[stats] per turn from cities before [tech/policy]", UniqueTarget.Global, UniqueTarget.FollowerBelief), - - + StatsFromBuildings("[stats] from all [buildingFilter] buildings", UniqueTarget.Global, UniqueTarget.FollowerBelief), + @Deprecated("As of 3.19.1", ReplaceWith("[stats] from every [Wonder]")) + StatsFromWondersDeprecated("[stats] from every Wonder", UniqueTarget.Global, UniqueTarget.FollowerBelief), StatsSpendingGreatPeople("[stats] whenever a Great Person is expended", UniqueTarget.Global), StatsFromTiles("[stats] from [tileFilter] tiles [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), StatsFromTilesWithout("[stats] from [tileFilter] tiles without [tileFilter] [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), // This is a doozy - StatsFromObject("[stats] from every [tileFilter/specialist/buildingName]", UniqueTarget.Global, UniqueTarget.FollowerBelief), + StatsFromObject("[stats] from every [tileFilter/specialist/buildingFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), + + // Stat percentage boosts StatPercentBonus("[amount]% [stat]", UniqueTarget.Global, UniqueTarget.FollowerBelief), StatPercentFromObject("[amount]% [stat] from every [tileFilter/specialist/buildingName]", UniqueTarget.Global, UniqueTarget.FollowerBelief), @Deprecated("As of 3.18.17", ReplaceWith("[amount]% [stat] from every [tileFilter/specialist/buildingName]")) @@ -277,6 +280,7 @@ enum class UniqueType(val text:String, vararg targets: UniqueTarget, val flags: RequiresAnotherBuilding("Requires a [buildingName] in this city", UniqueTarget.Building), RequiresBuildingInAllCities("Requires a [buildingName] in all cities", UniqueTarget.Building), + StatsWithResource("[stats] with [resource]", UniqueTarget.Building), MustBeOn("Must be on [terrainFilter]", UniqueTarget.Building), diff --git a/docs/uniques.md b/docs/uniques.md index 384bcb452d..1739a7b397 100644 --- a/docs/uniques.md +++ b/docs/uniques.md @@ -46,6 +46,11 @@ Example: "[+1 Gold, +2 Production] in cities on [Grassland] tiles" Applicable to: Global, FollowerBelief +#### [stats] from all [buildingFilter] buildings +Example: "[+1 Gold, +2 Production] from all [buildingFilter] buildings" + +Applicable to: Global, FollowerBelief + #### [stats] whenever a Great Person is expended Example: "[+1 Gold, +2 Production] whenever a Great Person is expended"