diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index d2ef0a58164..885b6ab442d 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -1103,7 +1103,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { if (changeType.startsWith("EACH")) { String[] eachTypes = changeType.substring(5).split(" & "); for (String thisType : eachTypes) { - for (int i = 0; i < changeNum && destination != null; i++) { + for (int i = 0; i < changeNum; i++) { CardCollection thisList = (CardCollection) AbilityUtils.filterListByType(fetchList, thisType, sa); if (!chosenCards.isEmpty()) { thisList.removeAll(chosenCards); @@ -1138,7 +1138,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { // maybe prompt the user if they selected fewer than the maximum possible? } else { // one at a time - for (int i = 0; i < changeNum && destination != null; i++) { + for (int i = 0; i < changeNum; i++) { if (sa.hasParam("DifferentNames")) { for (Card c : chosenCards) { fetchList = CardLists.filter(fetchList, CardPredicates.sharesNameWith(c).negate()); @@ -1252,6 +1252,10 @@ public class ChangeZoneEffect extends SpellAbilityEffect { player.removeController(controlTimestamp); } + if (sa.hasParam("Exactly") && chosenCards.size() < changeNum) { + continue; + } + HiddenOriginChoices choices = new HiddenOriginChoices(); choices.searchedLibrary = searchedLibrary; choices.shuffleMandatory = shuffleMandatory; @@ -1281,7 +1285,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { Player decider = ObjectUtils.firstNonNull(chooser, player); for (final Card c : chosenCards) { - Card movedCard = null; + Card movedCard; final Zone originZone = game.getZoneOf(c); Map moveParams = AbilityKey.newMap(); moveParams.put(AbilityKey.FoundSearchingLibrary, searchedLibrary); @@ -1413,6 +1417,9 @@ public class ChangeZoneEffect extends SpellAbilityEffect { movedCard.addMayLookFaceDownExile(sa.getActivatingPlayer()); } } + else if (destination == null) { + movedCard = c; + } else { movedCard = game.getAction().moveTo(destination, c, 0, sa, moveParams); } diff --git a/forge-gui/res/cardsfolder/b/burning_rune_demon.txt b/forge-gui/res/cardsfolder/b/burning_rune_demon.txt index 8520c561a04..dc3310814a6 100644 --- a/forge-gui/res/cardsfolder/b/burning_rune_demon.txt +++ b/forge-gui/res/cardsfolder/b/burning_rune_demon.txt @@ -4,7 +4,7 @@ Types:Creature Demon Berserker PT:6/6 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your library for exactly two cards not named Burning-Rune Demon that have different names. If you do, reveal those cards. An opponent chooses one of them. Put the chosen card into your hand and the other into your graveyard, then shuffle. -SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Card.!namedBurning-Rune Demon | ChangeNum$ 2 | DifferentNames$ True | RememberChanged$ True | Reveal$ True | Shuffle$ False | AILogic$ Intuition | SubAbility$ DBChoosePlayer +SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Card.!namedBurning-Rune Demon | ChangeNum$ 2 | DifferentNames$ True | Exactly$ True | RememberChanged$ True | Reveal$ True | Shuffle$ False | AILogic$ Intuition | SubAbility$ DBChoosePlayer SVar:DBChoosePlayer:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | ChoiceTitle$ Choose an opponent | SubAbility$ DBChangeZone1 SVar:DBChangeZone1:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Card.IsRemembered | Chooser$ ChosenPlayer | ChangeNum$ 1 | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to be put into the hand of CARDNAME's controller | Shuffle$ False | SubAbility$ DBChangeZone2 | StackDescription$ None SVar:DBChangeZone2:DB$ ChangeZoneAll | Origin$ Library | Destination$ Graveyard | ChangeType$ Card.IsRemembered | Shuffle$ True | StackDescription$ None | SubAbility$ DBCleanup