diff --git a/android/assets/jsons/Civ V - Vanilla/TileImprovements.json b/android/assets/jsons/Civ V - Vanilla/TileImprovements.json index 73429f917d..f6a7a8b1f8 100644 --- a/android/assets/jsons/Civ V - Vanilla/TileImprovements.json +++ b/android/assets/jsons/Civ V - Vanilla/TileImprovements.json @@ -84,11 +84,11 @@ // Military improvement { - name: "Fort", - terrainsCanBeBuiltOn: ["Plains","Grassland","Desert","Hill","Tundra","Snow"], - turnsToBuild: 6, - techRequired: "Engineering", - uniques: ["Gives a defensive bonus of 50%"] + "name": "Fort", + "terrainsCanBeBuiltOn": ["Plains","Grassland","Desert","Hill","Tundra","Snow"], + "turnsToBuild": 6, + "techRequired": "Engineering", + "uniques": ["Gives a defensive bonus of [50]%"] }, // Transportation @@ -171,7 +171,7 @@ }, { "name": "Citadel", - "uniques": ["Gives a defensive bonus of 100%", "Deal 30 damage to adjacent enemy units", "Great Improvement"] + "uniques": ["Gives a defensive bonus of [100]%", "Deal 30 damage to adjacent enemy units", "Great Improvement"] // TODO (G&K): adds every tile around it to your territory }, @@ -181,7 +181,7 @@ "uniqueTo": "Polynesia", "culture": 1, "turnsToBuild": 4, - "uniques": ["+1 additional Culture for each adjacent Moai","Can only be built on Coastal tiles"], + "uniques": ["[+1 Culture] for each adjacent [Moai]", "Can only be built on Coastal tiles"], "techRequired": "Construction", "improvingTech": "Flight", "improvingTechStats": {"gold": 1} @@ -192,7 +192,7 @@ "terrainsCanBeBuiltOn": ["Hill"], "food": 1, "turnsToBuild": 7, - "uniques": ["+1 food for each adjacent Mountain", "Cannot be built on bonus resource"], + "uniques": ["[+1 Food] for each adjacent [Mountain]", "Cannot be built on bonus resource"], "techRequired": "Construction", "improvingTech": "Fertilizer", "improvingTechStats": {"food":1} diff --git a/core/src/com/unciv/logic/map/TileInfo.kt b/core/src/com/unciv/logic/map/TileInfo.kt index 2b5e6aa0e1..a82c12b928 100644 --- a/core/src/com/unciv/logic/map/TileInfo.kt +++ b/core/src/com/unciv/logic/map/TileInfo.kt @@ -251,10 +251,13 @@ open class TileInfo { && observingCiv.hasUnique("Tile yield from Great Improvements +100%")) stats.add(improvement) // again, for the double effect - if (improvement.uniques.contains("+1 additional Culture for each adjacent Moai")) - stats.culture += neighbors.count { it.improvement == "Moai" } - if (improvement.uniques.contains("+1 food for each adjacent Mountain")) - stats.food += neighbors.count { it.baseTerrain == Constants.mountain } + for(unique in improvement.uniqueObjects) + if (unique.placeholderText == "[] for each adjacent []") { + val adjacent = unique.params[1] + val numberOfBonuses = neighbors.count { it.improvement == adjacent + || it.baseTerrain==adjacent || it.terrainFeature==adjacent } + stats.add(Stats.parse(unique.params[0]).times(numberOfBonuses.toFloat())) + } return stats } @@ -370,11 +373,9 @@ open class TileInfo { var defenceBonus = getDefensiveBonus() val tileImprovement = getTileImprovement() if (tileImprovement != null) { - defenceBonus += when { - tileImprovement.hasUnique("Gives a defensive bonus of 50%") -> 0.5f - tileImprovement.hasUnique("Gives a defensive bonus of 100%") -> 1.0f - else -> 0.0f - } + for (unique in tileImprovement.uniqueObjects) + if (unique.placeholderText == "Gives a defensive bonus of []%") + defenceBonus += unique.params[0].toFloat() / 100 } if (defenceBonus != 0.0f) { var defencePercentString = (defenceBonus * 100).toInt().toString() + "%" diff --git a/core/src/com/unciv/models/ruleset/tile/TileImprovement.kt b/core/src/com/unciv/models/ruleset/tile/TileImprovement.kt index aaad9f5199..317f396e4e 100644 --- a/core/src/com/unciv/models/ruleset/tile/TileImprovement.kt +++ b/core/src/com/unciv/models/ruleset/tile/TileImprovement.kt @@ -2,6 +2,7 @@ package com.unciv.models.ruleset.tile import com.unciv.logic.civilization.CivilizationInfo import com.unciv.models.ruleset.Ruleset +import com.unciv.models.ruleset.Unique import com.unciv.models.translations.tr import com.unciv.models.stats.NamedStats import com.unciv.models.stats.Stats @@ -22,6 +23,7 @@ class TileImprovement : NamedStats() { var improvingTechStats: Stats? = null var uniqueTo:String? = null var uniques = ArrayList() + val uniqueObjects:List by lazy { uniques.map { Unique(it) } } val turnsToBuild: Int = 0 // This is the base cost.