diff --git a/core/src/com/unciv/logic/battle/Battle.kt b/core/src/com/unciv/logic/battle/Battle.kt index 6747de18de..0160d663d0 100644 --- a/core/src/com/unciv/logic/battle/Battle.kt +++ b/core/src/com/unciv/logic/battle/Battle.kt @@ -217,19 +217,25 @@ object Battle { return damageDealt + interceptDamage } - + private fun triggerCombatUniques(attacker: ICombatant, defender: ICombatant, attackedTile: Tile) { val attackerContext = GameContext(attacker.getCivInfo(), ourCombatant = attacker, theirCombatant = defender, tile = attackedTile, combatAction = CombatAction.Attack) if (attacker is MapUnitCombatant) for (unique in attacker.unit.getTriggeredUniques(UniqueType.TriggerUponCombat, attackerContext)) { - UniqueTriggerActivation.triggerUnique(unique, attacker.unit) + val unit = if (unique.params[0] == Constants.targetUnit && defender is MapUnitCombatant) + defender.unit + else attacker.unit + UniqueTriggerActivation.triggerUnique(unique, unit) } val defenderContext = GameContext(defender.getCivInfo(), ourCombatant = defender, theirCombatant = attacker, tile = attackedTile, combatAction = CombatAction.Defend) if (defender is MapUnitCombatant) for (unique in defender.unit.getTriggeredUniques(UniqueType.TriggerUponCombat, defenderContext)) { - UniqueTriggerActivation.triggerUnique(unique, defender.unit) + val unit = if (unique.params[0] == Constants.targetUnit && attacker is MapUnitCombatant) + attacker.unit + else defender.unit + UniqueTriggerActivation.triggerUnique(unique, unit) } } @@ -365,13 +371,21 @@ object Battle { if (attacker is MapUnitCombatant) for (unique in attacker.unit.getTriggeredUniques(UniqueType.TriggerUponLosingHealth) - { it.params[0].toInt() <= defenderDamageDealt }) - UniqueTriggerActivation.triggerUnique(unique, attacker.unit, triggerNotificationText = "due to losing [$defenderDamageDealt] HP") + { it.params[0].toInt() <= defenderDamageDealt }) { + val unit = if (unique.params[0] == Constants.targetUnit && defender is MapUnitCombatant) + defender.unit + else attacker.unit + UniqueTriggerActivation.triggerUnique(unique, unit, triggerNotificationText = "due to losing [$defenderDamageDealt] HP") + } if (defender is MapUnitCombatant) for (unique in defender.unit.getTriggeredUniques(UniqueType.TriggerUponLosingHealth) - { it.params[0].toInt() <= attackerDamageDealt }) - UniqueTriggerActivation.triggerUnique(unique, defender.unit, triggerNotificationText = "due to losing [$attackerDamageDealt] HP") + { it.params[0].toInt() <= attackerDamageDealt }) { + val unit = if (unique.params[0] == Constants.targetUnit && attacker is MapUnitCombatant) + attacker.unit + else defender.unit + UniqueTriggerActivation.triggerUnique(unique, unit, triggerNotificationText = "due to losing [$attackerDamageDealt] HP") + } plunderFromDamage(attacker, defender, attackerDamageDealt) return DamageDealt(attackerDamageDealt, defenderDamageDealt)