diff --git a/core/src/com/unciv/logic/battle/BattleDamage.kt b/core/src/com/unciv/logic/battle/BattleDamage.kt index 00e2970444..47ba1a6064 100644 --- a/core/src/com/unciv/logic/battle/BattleDamage.kt +++ b/core/src/com/unciv/logic/battle/BattleDamage.kt @@ -43,12 +43,11 @@ object BattleDamage { ) for (unique in combatant.unit.getMatchingUniques( - UniqueType.Strength, conditionalState) - + civInfo.getMatchingUniques(UniqueType.Strength, conditionalState) - ) { + UniqueType.Strength, conditionalState, true)) { modifiers.add(getModifierStringFromUnique(unique), unique.params[0].toInt()) } - for (unique in combatant.unit.getMatchingUniques(UniqueType.StrengthNearCapital)) { + for (unique in combatant.unit.getMatchingUniques(UniqueType.StrengthNearCapital, + checkCivInfoUniques = true)) { if (civInfo.cities.isEmpty()) break val distance = combatant.getTile().aerialDistanceTo(civInfo.getCapital().getCenterTile()) // https://steamcommunity.com/sharedfiles/filedetails/?id=326411722#464287 diff --git a/core/src/com/unciv/logic/city/CityInfo.kt b/core/src/com/unciv/logic/city/CityInfo.kt index 6ed9c13022..8783a969a1 100644 --- a/core/src/com/unciv/logic/city/CityInfo.kt +++ b/core/src/com/unciv/logic/city/CityInfo.kt @@ -752,7 +752,7 @@ class CityInfo { } - fun getMatchingUniquesWithNonLocalEffects(uniqueType: UniqueType, stateForConditionals: StateForConditionals? = null): Sequence { + fun getMatchingUniquesWithNonLocalEffects(uniqueType: UniqueType): Sequence { return cityConstructions.builtBuildingUniqueMap.getUniques(uniqueType) .filter { it.params.none { param -> param == "in this city" } } // Note that we don't query religion here, as those only have local effects diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index f4df4f5237..45d323e551 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -372,7 +372,7 @@ class CivilizationInfo { .map { it.first } .filter { it.isOfType(uniqueType) } ) - yieldAll(getEra().getMatchingUniques(uniqueType)) + yieldAll(getEra().getMatchingUniques(uniqueType, stateForConditionals)) if (religionManager.religion != null) yieldAll(religionManager.religion!!.getFounderUniques().filter { it.isOfType(uniqueType) }) }.filter { diff --git a/core/src/com/unciv/logic/map/MapUnit.kt b/core/src/com/unciv/logic/map/MapUnit.kt index 4388693aa7..73fb59c432 100644 --- a/core/src/com/unciv/logic/map/MapUnit.kt +++ b/core/src/com/unciv/logic/map/MapUnit.kt @@ -223,7 +223,8 @@ class MapUnit { return tempUniques.any { it.placeholderText == unique } } - fun hasUnique(uniqueType: UniqueType, stateForConditionals: StateForConditionals? = null): Boolean { + fun hasUnique(uniqueType: UniqueType, stateForConditionals: StateForConditionals + = StateForConditionals(civInfo, unit=this)): Boolean { return tempUniques.any { it.type == uniqueType && it.conditionalsApply(stateForConditionals) } } @@ -345,8 +346,10 @@ class MapUnit { private fun getVisibilityRange(): Int { var visibilityRange = 2 - if (isEmbarked() && !hasUnique(UniqueType.NormalVisionWhenEmbarked) - && !civInfo.hasUnique(UniqueType.NormalVisionWhenEmbarked)) { + val conditionalState = StateForConditionals(civInfo = civInfo, unit = this) + + if (isEmbarked() && !hasUnique(UniqueType.NormalVisionWhenEmbarked, conditionalState) + && !civInfo.hasUnique(UniqueType.NormalVisionWhenEmbarked, conditionalState)) { return 1 }