diff --git a/core/src/com/unciv/logic/map/MapUnit.kt b/core/src/com/unciv/logic/map/MapUnit.kt index 47d5d7457c..399a1c2c66 100644 --- a/core/src/com/unciv/logic/map/MapUnit.kt +++ b/core/src/com/unciv/logic/map/MapUnit.kt @@ -132,7 +132,11 @@ class MapUnit { val uniques = ArrayList() val baseUnit = baseUnit() uniques.addAll(baseUnit.uniqueObjects) - uniques.addAll(promotions.promotions.map { currentTile.tileMap.gameInfo.ruleSet.unitPromotions[it]!!.unique }) + + for (promotion in promotions.promotions) { + uniques.addAll(currentTile.tileMap.gameInfo.ruleSet.unitPromotions[promotion]!!.uniqueObjects) + } + tempUniques = uniques ignoresTerrainCost = hasUnique("Ignores terrain cost") diff --git a/core/src/com/unciv/models/ruleset/unit/Promotion.kt b/core/src/com/unciv/models/ruleset/unit/Promotion.kt index 803ef9971b..e25c78f753 100644 --- a/core/src/com/unciv/models/ruleset/unit/Promotion.kt +++ b/core/src/com/unciv/models/ruleset/unit/Promotion.kt @@ -9,14 +9,19 @@ import com.unciv.models.translations.tr class Promotion : INamed{ override lateinit var name: String var prerequisites = listOf() - var effect="" - val unique:Unique by lazy { Unique(effect) } + var effect = "" var unitTypes = listOf() // The json parser wouldn't agree to deserialize this as a list of UnitTypes. =( + var uniques = listOf() + val uniqueObjects: List by lazy { uniques.map { Unique(it) } + Unique(effect) } + fun getDescription(promotionsForUnitType: Collection, forCivilopedia:Boolean=false, ruleSet:Ruleset? = null):String { // we translate it before it goes in to get uniques like "vs units in rough terrain" and after to get "vs city val stringBuilder = StringBuilder() - stringBuilder.appendln(Translations.translateBonusOrPenalty(effect.tr())) + + for (unique in uniques + effect) { + stringBuilder.appendln(Translations.translateBonusOrPenalty(unique)) + } if(prerequisites.isNotEmpty()) { val prerequisitesString: ArrayList = arrayListOf()