diff --git a/forge-core/src/main/java/forge/card/ColorSet.java b/forge-core/src/main/java/forge/card/ColorSet.java index bb27f0bc88d..0a1cc08ba1f 100644 --- a/forge-core/src/main/java/forge/card/ColorSet.java +++ b/forge-core/src/main/java/forge/card/ColorSet.java @@ -112,6 +112,11 @@ public final class ColorSet implements Comparable, Iterable, Ser return (this.myColor & colormask) == colormask; } + /** this has exactly the colors defined by operand. */ + public boolean hasExactlyColor(final int colormask) { + return this.myColor == colormask; + } + /** this has no other colors except defined by operand. */ public boolean hasNoColorsExcept(final ColorSet other) { return hasNoColorsExcept(other.getColor()); diff --git a/forge-core/src/main/java/forge/card/MagicColor.java b/forge-core/src/main/java/forge/card/MagicColor.java index 37e6294a056..559b9128657 100644 --- a/forge-core/src/main/java/forge/card/MagicColor.java +++ b/forge-core/src/main/java/forge/card/MagicColor.java @@ -25,6 +25,8 @@ public final class MagicColor { public static final byte[] WUBRG = new byte[] { WHITE, BLUE, BLACK, RED, GREEN }; public static final byte[] WUBRGC = new byte[] { WHITE, BLUE, BLACK, RED, GREEN, COLORLESS }; + public static final byte[] COLORPAIR = new byte[] { WHITE | BLUE, BLUE | BLACK, BLACK | RED, RED | GREEN, GREEN |WHITE, + WHITE | BLUE, BLUE | RED, BLACK | GREEN, RED | WHITE, GREEN | BLUE}; /** * Private constructor to prevent instantiation. diff --git a/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java index 381497e77ea..138bcf9460e 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java @@ -1,5 +1,6 @@ package forge.game.ability.effects; +import forge.card.MagicColor; import forge.game.Game; import forge.game.GameActionUtil; import forge.game.GameEntityCounterTable; @@ -9,6 +10,7 @@ import forge.game.card.Card; import forge.game.card.CardCollection; import forge.game.card.CardCollectionView; import forge.game.card.CardLists; +import forge.game.card.CardPredicates; import forge.game.card.CardZoneTable; import forge.game.card.CounterType; import forge.game.player.DelayedReveal; @@ -224,6 +226,20 @@ public class DigEffect extends SpellAbilityEffect { int numChanging = Math.min(destZone1ChangeNum, valid.size()); movedCards = CardLists.getRandomSubList(valid, numChanging); } + else if (sa.hasParam("ForEachColorPair")) { + movedCards = new CardCollection(); + if (p == chooser) { + chooser.getController().tempShowCards(top); + } + for (final byte pair : MagicColor.COLORPAIR) { + Card chosen = chooser.getController().chooseSingleEntityForEffect(CardLists.filter(valid, CardPredicates.isExactlyColor(pair)), + delayedReveal, sa, "Choose one", false, p); + if (chosen != null) { + movedCards.add(chosen); + } + } + chooser.getController().endTempShowCards(); + } else if (allButOne) { movedCards = new CardCollection(valid); String prompt; diff --git a/forge-game/src/main/java/forge/game/card/CardPredicates.java b/forge-game/src/main/java/forge/game/card/CardPredicates.java index 3c049e64788..5d5a415af5c 100644 --- a/forge-game/src/main/java/forge/game/card/CardPredicates.java +++ b/forge-game/src/main/java/forge/game/card/CardPredicates.java @@ -234,6 +234,15 @@ public final class CardPredicates { }; } // getColor() + public static final Predicate isExactlyColor(final byte color) { + return new Predicate() { + @Override + public boolean apply(final Card c) { + return CardUtil.getColors(c).hasExactlyColor(color); + } + }; + } + public static final Predicate isColorless() { return new Predicate() { @Override diff --git a/forge-gui/res/cardsfolder/n/niv_mizzet_reborn.txt b/forge-gui/res/cardsfolder/n/niv_mizzet_reborn.txt new file mode 100644 index 00000000000..14d0c1b23c7 --- /dev/null +++ b/forge-gui/res/cardsfolder/n/niv_mizzet_reborn.txt @@ -0,0 +1,8 @@ +Name:Niv-Mizzet Reborn +ManaCost:W U B R G +Types:Legendary Creature Dragon Avatar +PT:6/6 +K:Flying +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigDig | TriggerDescription$ When CARDNAME enters the battlefield, reveal the top ten cards of your library. For each color pair, choose a card that's exactly those colors from among them. Put the chosen cards into your hand and the rest on the bottom of your library in a random order. +SVar:TrigDig:DB$ Dig | DigNum$ 10 | Reveal$ True | ForEachColorPair$ True | RestRandomOrder$ True +Oracle:Flying\nWhen Niv-Mizzet Reborn enters the battlefield, reveal the top ten cards of your library. For each color pair, choose a card that's exactly those colors from among them. Put the chosen cards into your hand and the rest on the bottom of your library in a random order.