DamageDealEffect: support "ExcessSVar"

This commit is contained in:
Northmoc
2021-11-10 13:39:43 -05:00
parent 533848f82c
commit a154c6b175

View File

@@ -255,6 +255,16 @@ public class DamageDealEffect extends DamageBaseEffect {
protected void internalDamageDeal(SpellAbility sa, Card sourceLKI, Card c, int dmg, CardDamageMap damageMap) { protected void internalDamageDeal(SpellAbility sa, Card sourceLKI, Card c, int dmg, CardDamageMap damageMap) {
final Card hostCard = sa.getHostCard(); final Card hostCard = sa.getHostCard();
final Player activationPlayer = sa.getActivatingPlayer(); final Player activationPlayer = sa.getActivatingPlayer();
int excess = 0;
int dmgToTarget = 0;
if (sa.hasParam("ExcessDamage") || (sa.hasParam("ExcessSVar"))) {
int lethal = c.getLethalDamage();
if (sourceLKI.hasKeyword(Keyword.DEATHTOUCH)) {
lethal = Math.min(lethal, 1);
}
dmgToTarget = Math.min(lethal, dmg);
excess = dmg - dmgToTarget;
}
if (sa.hasParam("Remove")) { if (sa.hasParam("Remove")) {
c.setDamage(0); c.setDamage(0);
@@ -263,11 +273,6 @@ public class DamageDealEffect extends DamageBaseEffect {
} else { } else {
if (sa.hasParam("ExcessDamage") && (!sa.hasParam("ExcessDamageCondition") || if (sa.hasParam("ExcessDamage") && (!sa.hasParam("ExcessDamageCondition") ||
sourceLKI.isValid(sa.getParam("ExcessDamageCondition").split(","), activationPlayer, hostCard, sa))) { sourceLKI.isValid(sa.getParam("ExcessDamageCondition").split(","), activationPlayer, hostCard, sa))) {
int lethal = c.getLethalDamage();
if (sourceLKI.hasKeyword(Keyword.DEATHTOUCH)) {
lethal = Math.min(lethal, 1);
}
int dmgToTarget = Math.min(lethal, dmg);
damageMap.put(sourceLKI, c, dmgToTarget); damageMap.put(sourceLKI, c, dmgToTarget);
@@ -276,10 +281,13 @@ public class DamageDealEffect extends DamageBaseEffect {
list.addAll(AbilityUtils.getDefinedPlayers(hostCard, sa.getParam("ExcessDamage"), sa)); list.addAll(AbilityUtils.getDefinedPlayers(hostCard, sa.getParam("ExcessDamage"), sa));
if (!list.isEmpty()) { if (!list.isEmpty()) {
damageMap.put(sourceLKI, list.get(0), dmg - dmgToTarget); damageMap.put(sourceLKI, list.get(0), excess);
} }
} else { } else {
damageMap.put(sourceLKI, c, dmg); damageMap.put(sourceLKI, c, dmg);
if (sa.hasParam("ExcessSVar")) {
hostCard.setSVar(sa.getParam("ExcessSVar"), Integer.toString(excess));
}
} }
} }
} }