From 9988764d4db86952641d7869e3629ce313f9a417 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Sun, 26 Feb 2023 22:11:23 +0200 Subject: [PATCH] Added 'trigger upon losing over X HP in single attack' --- core/src/com/unciv/logic/battle/Battle.kt | 10 ++++++++++ core/src/com/unciv/models/ruleset/unique/UniqueType.kt | 1 + 2 files changed, 11 insertions(+) diff --git a/core/src/com/unciv/logic/battle/Battle.kt b/core/src/com/unciv/logic/battle/Battle.kt index d0010ed988..fc6298fdf6 100644 --- a/core/src/com/unciv/logic/battle/Battle.kt +++ b/core/src/com/unciv/logic/battle/Battle.kt @@ -366,6 +366,16 @@ object Battle { val defenderDamageDealt = attackerHealthBefore - attacker.getHealth() val attackerDamageDealt = defenderHealthBefore - defender.getHealth() + if (attacker is MapUnitCombatant) + for (unique in attacker.unit.getTriggeredUniques(UniqueType.TriggerUponPromotion)) + if (unique.conditionals.any { it.params[0].toInt() <= defenderDamageDealt }) + UniqueTriggerActivation.triggerUnitwideUnique(unique, attacker.unit) + + if (defender is MapUnitCombatant) + for (unique in defender.unit.getTriggeredUniques(UniqueType.TriggerUponPromotion)) + if (unique.conditionals.any { it.params[0].toInt() <= attackerDamageDealt }) + UniqueTriggerActivation.triggerUnitwideUnique(unique, defender.unit) + plunderFromDamage(attacker, defender, attackerDamageDealt) return DamageDealt(attackerDamageDealt, defenderDamageDealt) } diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index 5562f4599c..5ea3d5360f 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -735,6 +735,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: TriggerUponDefeatingUnit("upon defeating a [mapUnitFilter] unit", UniqueTarget.UnitTriggerCondition), TriggerUponDefeat("upon being defeated", UniqueTarget.UnitTriggerCondition), TriggerUponPromotion("upon being promoted", UniqueTarget.UnitTriggerCondition), + TriggerUponLosingHealth("upon losing at least [amount] HP in a single attack", UniqueTarget.UnitTriggerCondition), //endregion