From fddff49bb99a948fb1d8cdcbe8e5aff5343b3771 Mon Sep 17 00:00:00 2001 From: Tim Mocny Date: Sat, 5 Mar 2022 15:04:15 +0000 Subject: [PATCH] CountersPutEffect allow to handle multiple Defined --- .../ability/effects/CountersPutEffect.java | 35 +++++++++++++------ .../cardsfolder/j/juniper_order_ranger.txt | 4 +-- .../res/cardsfolder/s/serrated_biskelion.txt | 3 +- 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/CountersPutEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CountersPutEffect.java index 7ad3efdcae3..6717189e36f 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CountersPutEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CountersPutEffect.java @@ -69,19 +69,26 @@ public class CountersPutEffect extends SpellAbilityEffect { stringBuilder.append("up to "); } - String type = spellAbility.getParam("CounterType"); - if (amount == 1) { - stringBuilder.append(Lang.startsWithVowel(type) ? "an " : "a "); - } else { - stringBuilder.append(Lang.getNumeral(amount)).append(" "); - } - - stringBuilder.append(CounterType.getType(type).getName().toLowerCase()).append(" counter"); - stringBuilder.append(amount != 1 ? "s" : "").append(divAsChoose || spellAbility.hasParam("DividedRandomly") + final String typeName = CounterType.getType(spellAbility.getParam("CounterType")).getName().toLowerCase(); + stringBuilder.append(Lang.nounWithNumeralExceptOne(amount, + typeName + " counter")); + stringBuilder.append(divAsChoose || spellAbility.hasParam("DividedRandomly") ? " among " : " on "); + // special handling for multiple Defined + if (spellAbility.hasParam("Defined") && spellAbility.getParam("Defined").contains(" & ")) { + String[] def = spellAbility.getParam("Defined").split(" & "); + for (int i = 0; i < def.length; i++) { + stringBuilder.append(AbilityUtils.getDefinedEntities(card, def[i], + spellAbility).toString().replaceAll("[\\[\\]]","")); + if (i + 1 < def.length) { + stringBuilder.append(" and "); + stringBuilder.append(Lang.nounWithNumeralExceptOne(amount, + typeName + " counter")).append(" on "); + } + } // if use targeting we show all targets and corresponding counters - if(spellAbility.usesTargeting()) { + } else if (spellAbility.usesTargeting()) { final List targetCards = SpellAbilityEffect.getTargetCards(spellAbility); for(int i = 0; i < targetCards.size(); i++) { Card targetCard = targetCards.get(i); @@ -182,7 +189,13 @@ public class CountersPutEffect extends SpellAbilityEffect { sa.hasParam("ChoiceOptional"), params)); } } else { - tgtObjects.addAll(getDefinedEntitiesOrTargeted(sa, "Defined")); + if (sa.hasParam("Defined") && sa.getParam("Defined").contains(" & ")) { + for (String def : sa.getParam("Defined").split(" & ")) { + tgtObjects.addAll(AbilityUtils.getDefinedEntities(card, def, sa)); + } + } else { + tgtObjects.addAll(getDefinedEntitiesOrTargeted(sa, "Defined")); + } } if (sa.hasParam("Optional") && !pc.confirmAction diff --git a/forge-gui/res/cardsfolder/j/juniper_order_ranger.txt b/forge-gui/res/cardsfolder/j/juniper_order_ranger.txt index 902b7a91aee..7c3e09bb2dc 100644 --- a/forge-gui/res/cardsfolder/j/juniper_order_ranger.txt +++ b/forge-gui/res/cardsfolder/j/juniper_order_ranger.txt @@ -3,7 +3,7 @@ ManaCost:3 G W Types:Creature Human Knight Ranger PT:2/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever another creature enters the battlefield under your control, put a +1/+1 counter on that creature and a +1/+1 counter on CARDNAME. -SVar:TrigPutCounter:DB$ PutCounter | Defined$ TriggeredCardLKICopy | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBPutCounter -SVar:DBPutCounter:DB$ PutCounter | Defined$ Self.StrictlySelf | CounterType$ P1P1 | CounterNum$ 1 +SVar:TrigPutCounter:DB$ PutCounter | Defined$ TriggeredCardLKICopy & Self | CounterType$ P1P1 SVar:BuffedBy:Creature +DeckHas:Ability$Counters Oracle:Whenever another creature enters the battlefield under your control, put a +1/+1 counter on that creature and a +1/+1 counter on Juniper Order Ranger. diff --git a/forge-gui/res/cardsfolder/s/serrated_biskelion.txt b/forge-gui/res/cardsfolder/s/serrated_biskelion.txt index ea8dd113d02..895a0a7b1ee 100644 --- a/forge-gui/res/cardsfolder/s/serrated_biskelion.txt +++ b/forge-gui/res/cardsfolder/s/serrated_biskelion.txt @@ -2,6 +2,5 @@ Name:Serrated Biskelion ManaCost:3 Types:Artifact Creature Construct PT:2/2 -A:AB$ PutCounter | Cost$ T | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ M1M1 | CounterNum$ 1 | SubAbility$ DBPutCounter | IsCurse$ True | SpellDescription$ Put a -1/-1 counter on target creature and a -1/-1 counter on CARDNAME. -SVar:DBPutCounter:DB$ PutCounter | CounterType$ M1M1 | CounterNum$ 1 +A:AB$ PutCounter | Cost$ T | Defined$ Self & Targeted | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ M1M1 | IsCurse$ True | SpellDescription$ Put a -1/-1 counter on target creature and a -1/-1 counter on CARDNAME. Oracle:{T}: Put a -1/-1 counter on Serrated Biskelion and a -1/-1 counter on target creature.