From c26bf7a60eaa00020a277a5b87057fc718858a24 Mon Sep 17 00:00:00 2001 From: TRT <> Date: Tue, 5 Apr 2022 15:31:40 +0200 Subject: [PATCH 1/2] Fix cumulative upkeep counters --- .../main/java/forge/game/ability/effects/SacrificeEffect.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java b/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java index abb1ab3d665..54e419d0967 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java @@ -64,12 +64,12 @@ public class SacrificeEffect extends SpellAbilityEffect { table.replaceCounterEffect(game, sa, true); - Cost cumCost = new Cost(sa.getParam("CumulativeUpkeep"), true); Cost payCost = new Cost(ManaCost.ZERO, true); int n = card.getCounters(CounterEnumType.AGE); // multiply cost for (int i = 0; i < n; ++i) { + Cost cumCost = new Cost(sa.getParam("CumulativeUpkeep"), true); payCost.add(cumCost); } From 5d25939070f0275033dd1b34685737a9f1f838ce Mon Sep 17 00:00:00 2001 From: TRT <> Date: Tue, 5 Apr 2022 16:14:26 +0200 Subject: [PATCH 2/2] Update merge logic --- .../java/forge/game/ability/effects/SacrificeEffect.java | 2 +- forge-game/src/main/java/forge/game/cost/Cost.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java b/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java index 54e419d0967..abb1ab3d665 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java @@ -64,12 +64,12 @@ public class SacrificeEffect extends SpellAbilityEffect { table.replaceCounterEffect(game, sa, true); + Cost cumCost = new Cost(sa.getParam("CumulativeUpkeep"), true); Cost payCost = new Cost(ManaCost.ZERO, true); int n = card.getCounters(CounterEnumType.AGE); // multiply cost for (int i = 0; i < n; ++i) { - Cost cumCost = new Cost(sa.getParam("CumulativeUpkeep"), true); payCost.add(cumCost); } diff --git a/forge-game/src/main/java/forge/game/cost/Cost.java b/forge-game/src/main/java/forge/game/cost/Cost.java index 40fde192e8e..272d8ab116a 100644 --- a/forge-game/src/main/java/forge/game/cost/Cost.java +++ b/forge-game/src/main/java/forge/game/cost/Cost.java @@ -900,9 +900,9 @@ public class Cost implements Serializable { StringUtils.isNumeric(part.getAmount()) && StringUtils.isNumeric(other.getAmount())) { String amount = String.valueOf(Integer.parseInt(part.getAmount()) + Integer.parseInt(other.getAmount())); - if (part instanceof CostPutCounter) { // path for Carth - if (other instanceof CostPutCounter && ((CostPutCounter)other).getCounter().is(CounterEnumType.LOYALTY)) { - costParts.add(new CostPutCounter(amount, CounterType.get(CounterEnumType.LOYALTY), part.getType(), part.getTypeDescription())); + if (part instanceof CostPutCounter) { // path for Carth & Cumulative Upkeep + if (other instanceof CostPutCounter && ((CostPutCounter)other).getCounter().equals(((CostPutCounter) part).getCounter())) { + costParts.add(new CostPutCounter(amount, ((CostPutCounter) part).getCounter(), part.getType(), part.getTypeDescription())); } else if (other instanceof CostRemoveCounter && ((CostRemoveCounter)other).counter.is(CounterEnumType.LOYALTY)) { Integer counters = Integer.parseInt(other.getAmount()) - Integer.parseInt(part.getAmount()); // the cost can turn positive if multiple Carth raise it