From 8dfc147bb1937a833d16b7b0a52fe5f13078d9f5 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Thu, 30 Jul 2020 19:05:07 +0300 Subject: [PATCH] Added civ-wide per-building stat bonus --- .../jsons/Civ V - Vanilla/Buildings.json | 2 +- .../jsons/Civ V - Vanilla/Policies.json | 3 +++ core/src/com/unciv/models/ruleset/Building.kt | 23 ++++++++++--------- .../translations/TranslationFileWriter.kt | 2 ++ 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/android/assets/jsons/Civ V - Vanilla/Buildings.json b/android/assets/jsons/Civ V - Vanilla/Buildings.json index 1f496e9c44..c54ec54352 100644 --- a/android/assets/jsons/Civ V - Vanilla/Buildings.json +++ b/android/assets/jsons/Civ V - Vanilla/Buildings.json @@ -831,7 +831,7 @@ "gold": 6, "greatPersonPoints": {"gold": 1}, "isWonder": true, - "uniques": ["+1 happiness, +2 culture and +3 gold from every Castle", + "uniques": ["[+1 Happiness, +2 Culture, +3 Gold] from every [Castle]", "Must have an owned mountain within 2 tiles"], "requiredTech": "Railroad", "quote": "'...the location is one of the most beautiful to be found, holy and unapproachable, a worthy temple for the divine friend who has brought salvation and true blessing to the world.' - King Ludwig II of Bavaria" diff --git a/android/assets/jsons/Civ V - Vanilla/Policies.json b/android/assets/jsons/Civ V - Vanilla/Policies.json index 78260e6f17..a87ca75a3a 100644 --- a/android/assets/jsons/Civ V - Vanilla/Policies.json +++ b/android/assets/jsons/Civ V - Vanilla/Policies.json @@ -154,10 +154,13 @@ "name": "Piety", "era": "Classical era", "effect": "Building time of culture buildings reduced by 15%", + "uniques": ["Production cost of [Culture] buildings reduced by [15]%"], "policies": [ { "name": "Organized Religion", "effect": "+1 happiness for each monument, temple and monastery", + "uniques": ["[+1 happiness] from every [Monument]","[+1 happiness] from every [Temple]", + "[+1 happiness] from every [Monastery]"] "row": 1, "column": 2 }, diff --git a/core/src/com/unciv/models/ruleset/Building.kt b/core/src/com/unciv/models/ruleset/Building.kt index 4c2d31bfd1..7f4c321dbf 100644 --- a/core/src/com/unciv/models/ruleset/Building.kt +++ b/core/src/com/unciv/models/ruleset/Building.kt @@ -137,8 +137,11 @@ class Building : NamedStats(), IConstruction{ val adoptedPolicies = civInfo.policies.adoptedPolicies val baseBuildingName = getBaseBuilding(civInfo.gameInfo.ruleSet).name - if (adoptedPolicies.contains("Organized Religion") && cultureBuildings.contains(baseBuildingName )) - stats.happiness += 1 + for(unique in civInfo.getMatchingUniques("[] from every []")) { + val placeholderParams = unique.getPlaceholderParameters() + if (placeholderParams[1] != baseBuildingName) continue + stats.add(Stats.parse(placeholderParams[0])) + } if (adoptedPolicies.contains("Free Religion") && cultureBuildings.contains(baseBuildingName )) stats.culture += 1f @@ -155,13 +158,6 @@ class Building : NamedStats(), IConstruction{ if (adoptedPolicies.contains("Constitution") && isWonder) stats.culture += 2f - if (baseBuildingName == "Castle" - && civInfo.hasUnique("+1 happiness, +2 culture and +3 gold from every Castle")){ - stats.happiness+=1 - stats.culture+=2 - stats.gold+=3 - } - if (adoptedPolicies.contains("Police State") && baseBuildingName == "Courthouse") stats.happiness += 3 @@ -196,8 +192,13 @@ class Building : NamedStats(), IConstruction{ override fun getProductionCost(civInfo: CivilizationInfo): Int { var productionCost = cost.toFloat() - if (!isWonder && culture != 0f && civInfo.policies.hasEffect("Building time of culture buildings reduced by 15%")) - productionCost *= 0.85f + if(!isWonder) + for(unique in civInfo.getMatchingUniques("Production cost of [] buildings reduced by []%")){ + val placeholderParams = unique.getPlaceholderParameters() + val stat = Stat.valueOf(placeholderParams[0]) + if(this.isStatRelated(stat)) + productionCost *= (1f - placeholderParams[1].toFloat()/100) + } if (name == "Courthouse" && civInfo.policies.hasEffect("+3 Happiness from every Courthouse. Build Courthouses in half the usual time.")) productionCost *= 0.5f diff --git a/core/src/com/unciv/models/translations/TranslationFileWriter.kt b/core/src/com/unciv/models/translations/TranslationFileWriter.kt index 933b247e67..7adcd14910 100644 --- a/core/src/com/unciv/models/translations/TranslationFileWriter.kt +++ b/core/src/com/unciv/models/translations/TranslationFileWriter.kt @@ -14,6 +14,7 @@ import com.unciv.models.ruleset.tile.TileImprovement import com.unciv.models.ruleset.tile.TileResource import com.unciv.models.ruleset.unit.BaseUnit import com.unciv.models.ruleset.unit.Promotion +import com.unciv.models.stats.Stat import com.unciv.models.stats.Stats import com.unciv.ui.worldscreen.unit.UnitActions import java.lang.reflect.Field @@ -201,6 +202,7 @@ object TranslationFileWriter { for(parameter in parameters) { val parameterName = when { parameter.toIntOrNull() != null -> "amount" + Stat.values().any { it.name == parameter } -> "stat" RulesetCache.getBaseRuleset().terrains.containsKey(parameter) -> "terrain" RulesetCache.getBaseRuleset().units.containsKey(parameter) -> "unit" RulesetCache.getBaseRuleset().tileImprovements.containsKey(parameter) -> "tileImprovement"