diff --git a/forge-game/src/main/java/forge/game/ability/effects/TwoPilesEffect.java b/forge-game/src/main/java/forge/game/ability/effects/TwoPilesEffect.java index 116a1ab8f95..96cb9afbcea 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/TwoPilesEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/TwoPilesEffect.java @@ -2,6 +2,7 @@ package forge.game.ability.effects; import java.util.List; +import com.google.common.collect.Lists; import forge.game.ability.AbilityUtils; import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; @@ -97,9 +98,17 @@ public class TwoPilesEffect extends SpellAbilityEffect { } // first, separate the cards into piles - final CardCollectionView pile1 = separator.getController().chooseCardsForEffect(pool, sa, title, 0, size, false, null); - final CardCollection pile2 = new CardCollection(pool); - pile2.removeAll(pile1); + final CardCollectionView pile1; + final CardCollection pile2; + if (sa.hasParam("DefinedPiles")) { + final String[] def = sa.getParam("DefinedPiles").split(",", 2); + pile1 = AbilityUtils.getDefinedCards(card, def[0], sa); + pile2 = AbilityUtils.getDefinedCards(card, def[1], sa); + } else { + pile1 = separator.getController().chooseCardsForEffect(pool, sa, title, 0, size, false, null); + pile2 = new CardCollection(pool); + pile2.removeAll(pile1); + } if (isLeftRightPile) { pile1WasChosen = true; @@ -151,32 +160,37 @@ public class TwoPilesEffect extends SpellAbilityEffect { // take action on the chosen pile if (sa.hasParam("ChosenPile")) { - if (card.hasRemembered()) { - card.clearRemembered(); - } + List tempRemembered = Lists.newArrayList(card.getRemembered()); + card.removeRemembered(tempRemembered); card.addRemembered(chosenPile); SpellAbility sub = sa.getAdditionalAbility("ChosenPile"); if (sub != null) { AbilityUtils.resolve(sub); } - card.clearRemembered(); + card.removeRemembered(chosenPile); + card.addRemembered(tempRemembered); } // take action on the unchosen pile if (sa.hasParam("UnchosenPile")) { - if (card.hasRemembered()) { - card.clearRemembered(); - } + List tempRemembered = Lists.newArrayList(card.getRemembered()); + card.removeRemembered(tempRemembered); card.addRemembered(unchosenPile); SpellAbility sub = sa.getAdditionalAbility("UnchosenPile"); if (sub != null) { AbilityUtils.resolve(sub); } - card.clearRemembered(); + card.removeRemembered(unchosenPile); + card.addRemembered(tempRemembered); } } } - } // end twoPiles resolve + if (!sa.hasParam("KeepRemembered")) { + // prior to addition of "DefinedPiles" param, TwoPilesEffect cleared remembered objects in the + // Chosen/Unchosen subability resolutions, so this preserves that + card.clearRemembered(); + } + } }