From f06242ebe11c3d6c679ef7d2424c2fb01b780d51 Mon Sep 17 00:00:00 2001 From: Xander Lenstra <71121390+xlenstra@users.noreply.github.com> Date: Fri, 31 Dec 2021 12:47:52 +0100 Subject: [PATCH] Allowed follower beliefs to have more uniques, merged a unique and globalized some uniques (#5882) --- .../jsons/Civ V - Gods & Kings/Nations.json | 2 +- .../assets/jsons/Civ V - Vanilla/Nations.json | 2 +- core/src/com/unciv/logic/city/CityStats.kt | 8 ++-- .../unciv/models/ruleset/unique/UniqueType.kt | 39 ++++++++++--------- 4 files changed, 27 insertions(+), 24 deletions(-) diff --git a/android/assets/jsons/Civ V - Gods & Kings/Nations.json b/android/assets/jsons/Civ V - Gods & Kings/Nations.json index b904a8e1ad..86f234cdd2 100644 --- a/android/assets/jsons/Civ V - Gods & Kings/Nations.json +++ b/android/assets/jsons/Civ V - Gods & Kings/Nations.json @@ -169,7 +169,7 @@ "innerColor": [239,236,148], "favoredReligion": "Christianity", "uniqueName": "Ancien Régime", - "uniques": ["[+2 Culture] per turn from cities before [Steam Power]"], + "uniques": ["[+2 Culture] [in all cities] "], "cities": ["Paris","Orleans","Lyon","Troyes","Tours","Marseille","Chartres","Avignon","Rouen","Grenoble", "Dijon","Amiens","Cherbourg","Poitiers","Toulouse","Bayonne","Strasbourg","Brest","Bordeaux","Rennes", "Nice","Saint Etienne","Nantes","Reims","Le Mans","Montpellier","Limoges","Nancy","Lille","Caen","Toulon", diff --git a/android/assets/jsons/Civ V - Vanilla/Nations.json b/android/assets/jsons/Civ V - Vanilla/Nations.json index 833563a157..2f5b767c1e 100644 --- a/android/assets/jsons/Civ V - Vanilla/Nations.json +++ b/android/assets/jsons/Civ V - Vanilla/Nations.json @@ -163,7 +163,7 @@ "outerColor": [ 38, 98, 255], "innerColor": [239,236,148], "uniqueName": "Ancien Régime", - "uniques": ["[+2 Culture] per turn from cities before [Steam Power]"], + "uniques": ["[+2 Culture] [in all cities] "], "cities": ["Paris","Orleans","Lyon","Troyes","Tours","Marseille","Chartres","Avignon","Rouen","Grenoble", "Dijon","Amiens","Cherbourg","Poitiers","Toulouse","Bayonne","Strasbourg","Brest","Bordeaux","Rennes", "Nice","Saint Etienne","Nantes","Reims","Le Mans","Montpellier","Limoges","Nancy","Lille","Caen","Toulon", diff --git a/core/src/com/unciv/logic/city/CityStats.kt b/core/src/com/unciv/logic/city/CityStats.kt index b7a6ae24ef..4c3c5db773 100644 --- a/core/src/com/unciv/logic/city/CityStats.kt +++ b/core/src/com/unciv/logic/city/CityStats.kt @@ -211,9 +211,11 @@ class CityStats(val cityInfo: CityInfo) { if (cityInfo.getCenterTile().matchesTerrainFilter(unique.params[1])) addUniqueStats(unique) - for (unique in cityInfo.getMatchingUniques(UniqueType.StatsFromCitiesBefore, cityConditionals)) - if (!cityInfo.civInfo.hasTechOrPolicy(unique.params[1])) - addUniqueStats(unique) + // Deprecated since 3.18.14 + for (unique in cityInfo.getMatchingUniques(UniqueType.StatsFromCitiesBefore, cityConditionals)) + if (!cityInfo.civInfo.hasTechOrPolicy(unique.params[1])) + addUniqueStats(unique) + // renameStatmapKeys(sourceToStats) diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index 6b44e2b396..4e56fd86ae 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -66,26 +66,27 @@ enum class UniqueType(val text:String, vararg targets: UniqueTarget, val flags: // region Stat providing uniques Stats("[stats]", UniqueTarget.Global, UniqueTarget.FollowerBelief, UniqueTarget.Improvement), - StatsPerCity("[stats] [cityFilter]", UniqueTarget.Global), + StatsPerCity("[stats] [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), - StatsFromSpecialist("[stats] from every specialist [cityFilter]", UniqueTarget.Global), + StatsFromSpecialist("[stats] from every specialist [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), - StatsPerPopulation("[stats] per [amount] population [cityFilter]", UniqueTarget.Global), + StatsPerPopulation("[stats] per [amount] population [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), StatsFromXPopulation("[stats] in cities with [amount] or more population", UniqueTarget.Global, UniqueTarget.FollowerBelief), StatsFromCitiesOnSpecificTiles("[stats] in cities on [terrainFilter] tiles", UniqueTarget.Global, UniqueTarget.FollowerBelief), - StatsFromCitiesBefore("[stats] per turn from cities before [tech/policy]", UniqueTarget.Global), + @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), StatsSpendingGreatPeople("[stats] whenever a Great Person is expended", UniqueTarget.Global), - StatsFromTiles("[stats] from [tileFilter] tiles [cityFilter]", 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), - StatPercentBonus("[amount]% [stat]", UniqueTarget.Global), + StatPercentBonus("[amount]% [stat]", UniqueTarget.Global, UniqueTarget.FollowerBelief), BonusStatsFromCityStates("[amount]% [stat] from City-States", UniqueTarget.Global), - StatPercentBonusCities("[amount]% [stat] [cityFilter]", UniqueTarget.Global), + StatPercentBonusCities("[amount]% [stat] [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), @Deprecated("As of 3.17.10", ReplaceWith("[+amount]% [stat] [cityFilter]"), DeprecationLevel.WARNING) StatPercentBonusCitiesDeprecated("+[amount]% [stat] [cityFilter]", UniqueTarget.Global), @Deprecated("As of 3.17.10", ReplaceWith("[+amount]% [stat] [in all cities]"), DeprecationLevel.WARNING) @@ -99,12 +100,10 @@ enum class UniqueType(val text:String, vararg targets: UniqueTarget, val flags: //endregion Stat providing uniques PercentProductionWonders("[amount]% Production when constructing [buildingFilter] wonders [cityFilter]", UniqueTarget.Global, UniqueTarget.Resource, UniqueTarget.FollowerBelief), - PercentProductionBuildings("[amount]% Production when constructing [buildingFilter] buildings [cityFilter]", UniqueTarget.Global), - PercentProductionUnits("[amount]% Production when constructing [baseUnitFilter] units [cityFilter]", UniqueTarget.Global), - - - RemoveAnnexUnhappiness("Remove extra unhappiness from annexed cities", UniqueTarget.Building), - UnhappinessFromPopulationPercentageChange("[amount]% unhappiness from population [cityFilter]", UniqueTarget.Global), + PercentProductionBuildings("[amount]% Production when constructing [buildingFilter] buildings [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), + PercentProductionUnits("[amount]% Production when constructing [baseUnitFilter] units [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), + + UnhappinessFromPopulationPercentageChange("[amount]% unhappiness from population [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), @@ -144,7 +143,7 @@ enum class UniqueType(val text:String, vararg targets: UniqueTarget, val flags: FreeExtraBeliefs("May choose [amount] additional [beliefType] beliefs when [foundingOrEnhancing] a religion", UniqueTarget.Global), FreeExtraAnyBeliefs("May choose [amount] additional belief(s) of any type when [foundingOrEnhancing] a religion", UniqueTarget.Global), - FoodConsumptionBySpecialists("[amount]% food consumption by specialists [cityFilter]", UniqueTarget.Global), + FoodConsumptionBySpecialists("[amount]% food consumption by specialists [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), @Deprecated("As of 3.18.2", ReplaceWith("[-amount]% food consumption by specialists [cityFilter]"), DeprecationLevel.WARNING) FoodConsumptionBySpecialistsDeprecated("-[amount]% food consumption by specialists [cityFilter]", UniqueTarget.Global), @@ -154,8 +153,8 @@ enum class UniqueType(val text:String, vararg targets: UniqueTarget, val flags: // There is potential to merge these - BuyUnitsIncreasingCost("May buy [baseUnitFilter] units for [amount] [stat] [cityFilter] at an increasing price ([amount])", UniqueTarget.Global), - BuyBuildingsIncreasingCost("May buy [buildingFilter] buildings for [amount] [stat] [cityFilter] at an increasing price ([amount])", UniqueTarget.Global), + BuyUnitsIncreasingCost("May buy [baseUnitFilter] units for [amount] [stat] [cityFilter] at an increasing price ([amount])", UniqueTarget.Global, UniqueTarget.FollowerBelief), + BuyBuildingsIncreasingCost("May buy [buildingFilter] buildings for [amount] [stat] [cityFilter] at an increasing price ([amount])", UniqueTarget.Global, UniqueTarget.FollowerBelief), BuyUnitsForAmountStat("May buy [baseUnitFilter] units for [amount] [stat] [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), BuyBuildingsForAmountStat("May buy [buildingFilter] buildings for [amount] [stat] [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), BuyUnitsWithStat("May buy [baseUnitFilter] units with [stat] [cityFilter]", UniqueTarget.Global, UniqueTarget.FollowerBelief), @@ -167,10 +166,11 @@ enum class UniqueType(val text:String, vararg targets: UniqueTarget, val flags: @Deprecated("As of 3.17.9", ReplaceWith ("May buy [baseUnitFilter] units for [amount] [stat] [cityFilter] at an increasing price ([amount]) ")) BuyUnitsIncreasingCostEra("May buy [baseUnitFilter] units for [amount] [stat] [cityFilter] starting from the [era] at an increasing price ([amount])", UniqueTarget.Global), - MayanGainGreatPerson("Receive a free Great Person at the end of every [comment] (every 394 years), after researching [tech]. Each bonus person can only be chosen once.", UniqueTarget.Nation), - MayanCalendarDisplay("Once The Long Count activates, the year on the world screen displays as the traditional Mayan Long Count.", UniqueTarget.Nation), + // This should probably support conditionals, e.g. + MayanGainGreatPerson("Receive a free Great Person at the end of every [comment] (every 394 years), after researching [tech]. Each bonus person can only be chosen once.", UniqueTarget.Global), + MayanCalendarDisplay("Once The Long Count activates, the year on the world screen displays as the traditional Mayan Long Count.", UniqueTarget.Global), - RetainHappinessFromLuxury("Retain [amount]% of the happiness from a luxury after the last copy has been traded away", UniqueTarget.Nation), + RetainHappinessFromLuxury("Retain [amount]% of the happiness from a luxury after the last copy has been traded away", UniqueTarget.Global), EnablesResearchAgreements("Enables Research agreements", UniqueTarget.Global), TriggersVictory("Triggers victory", UniqueTarget.Global), @@ -213,6 +213,7 @@ enum class UniqueType(val text:String, vararg targets: UniqueTarget, val flags: Unsellable("Unsellable", UniqueTarget.Building), + RemoveAnnexUnhappiness("Remove extra unhappiness from annexed cities", UniqueTarget.Building), //endregion