diff --git a/forge-game/src/main/java/forge/game/ability/effects/DamagePreventEffectBase.java b/forge-game/src/main/java/forge/game/ability/effects/DamagePreventEffectBase.java index 99446569b3c..b2b72fa9ebb 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DamagePreventEffectBase.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DamagePreventEffectBase.java @@ -28,7 +28,6 @@ public abstract class DamagePreventEffectBase extends SpellAbilityEffect { StringBuilder sb = new StringBuilder("Event$ DamageDone | ActiveZones$ Command | ValidTarget$ "); sb.append((o instanceof Card ? "Card.IsRemembered" : "Player.IsRemembered")); sb.append(" | PreventionEffect$ True | Description$ Prevent the next ").append(numDam).append(" damage."); - String repeffstr = sb.toString(); String effect = "DB$ ReplaceDamage | Amount$ ShieldAmount"; final Card eff = createEffect(sa, player, name, image); @@ -51,9 +50,13 @@ public abstract class DamagePreventEffectBase extends SpellAbilityEffect { } subAbString = TextUtil.fastReplace(subAbString, "ShieldEffectTarget", effTgtString); } - replaceDamage.setSubAbility((AbilitySub) AbilityFactory.getAbility(subAbString, eff)); + AbilitySub subSA = (AbilitySub) AbilityFactory.getAbility(subAbString, eff); + replaceDamage.setSubAbility(subSA); + // Add SpellDescription of PreventionSubAbility to effect description + sb.append(" ").append(subSA.getParam("SpellDescription")); } + String repeffstr = sb.toString(); ReplacementEffect re = ReplacementHandler.parseReplacement(repeffstr, eff, true); re.setOverridingAbility(replaceDamage); eff.addReplacementEffect(re); diff --git a/forge-game/src/main/java/forge/game/ability/effects/ReplaceDamageEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ReplaceDamageEffect.java index 1619901305c..9a5812b09a6 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ReplaceDamageEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ReplaceDamageEffect.java @@ -50,6 +50,7 @@ public class ReplaceDamageEffect extends SpellAbilityEffect { game.getAction().exile(card, null); } else if (!StringUtils.isNumeric(varValue) && card.getSVar(varValue).startsWith("Number$")) { card.setSVar(varValue, "Number$" + prevent); + card.updateAbilityTextForView(); } // Set PreventedDamage SVar for PreventionSubAbility card.setSVar("PreventedDamage", "Number$" + n); diff --git a/forge-game/src/main/java/forge/game/ability/effects/ReplaceSplitDamageEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ReplaceSplitDamageEffect.java index 802e7076ed8..a8ec7574af5 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ReplaceSplitDamageEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ReplaceSplitDamageEffect.java @@ -54,6 +54,7 @@ public class ReplaceSplitDamageEffect extends SpellAbilityEffect { game.getAction().exile(card, null); } else if (!StringUtils.isNumeric(varValue)) { sa.setSVar(varValue, "Number$" + prevent); + card.updateAbilityTextForView(); } Card sourceLKI = (Card) sa.getReplacingObject(AbilityKey.Source); diff --git a/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java b/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java index ef6d5e1b0fc..115b8b0caa7 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java @@ -21,11 +21,14 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import org.apache.commons.lang3.StringUtils; + import forge.game.Game; import forge.game.TriggerReplacementBase; import forge.game.ability.AbilityFactory; import forge.game.ability.AbilityKey; import forge.game.ability.AbilityUtils; +import forge.game.ability.ApiType; import forge.game.card.Card; import forge.game.phase.PhaseType; import forge.game.spellability.SpellAbility; @@ -229,6 +232,30 @@ public abstract class ReplacementEffect extends TriggerReplacementBase { if (desc.contains("EFFECTSOURCE")) { desc = TextUtil.fastReplace(desc, "EFFECTSOURCE", getHostCard().getEffectSource().toString()); } + // Add remaining shield amount + if (mode == ReplacementType.DamageDone) { + SpellAbility repSA = getOverridingAbility(); + if (repSA != null && repSA.getApi() == ApiType.ReplaceDamage && repSA.hasParam("Amount")) { + String varValue = repSA.getParam("Amount"); + if (!StringUtils.isNumeric(varValue)) { + varValue = repSA.getSVar(varValue); + if (varValue.startsWith("Number$")) { + desc += " \nShields remain: " + varValue.substring(7); + } + } + } + if (repSA != null && repSA.getApi() == ApiType.ReplaceSplitDamage) { + String varValue = repSA.getParamOrDefault("VarName", "1"); + if (varValue.equals("1")) { + desc += " \nShields remain: 1"; + } else if (!StringUtils.isNumeric(varValue)) { + varValue = repSA.getSVar(varValue); + if (varValue.startsWith("Number$")) { + desc += " \nShields remain: " + varValue.substring(7); + } + } + } + } return desc; } else { return ""; diff --git a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java index 1e7f83677d8..dcf40ce999d 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java @@ -497,6 +497,7 @@ public class ReplacementHandler { && re.getLayer() == ReplacementLayer.Other && re.hasParam("Prevent") && re.getParam("Prevent").equals("True") && re.hasParam("IsCombat") && re.getParam("IsCombat").equals("True") + && !re.hasParam("ValidSource") && !re.hasParam("ValidTarget") && re.zonesCheck(game.getZoneOf(c))) { list.add(re); }