diff --git a/.gitattributes b/.gitattributes index eb340a4617f..f4d04e693b6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -9937,6 +9937,7 @@ forge-gui/res/cardsfolder/s/scouting_trek.txt -text forge-gui/res/cardsfolder/s/scouts_warning.txt -text forge-gui/res/cardsfolder/s/scrabbling_claws.txt -text forge-gui/res/cardsfolder/s/scragnoth.txt svneol=native#text/plain +forge-gui/res/cardsfolder/s/scrambleverse.txt -text forge-gui/res/cardsfolder/s/scrap.txt svneol=native#text/plain forge-gui/res/cardsfolder/s/scrapbasket.txt svneol=native#text/plain forge-gui/res/cardsfolder/s/scrapdiver_serpent.txt svneol=native#text/plain diff --git a/forge-gui/res/cardsfolder/s/scrambleverse.txt b/forge-gui/res/cardsfolder/s/scrambleverse.txt new file mode 100644 index 00000000000..43294227ec5 --- /dev/null +++ b/forge-gui/res/cardsfolder/s/scrambleverse.txt @@ -0,0 +1,9 @@ +Name:Scrambleverse +ManaCost:6 R R +Types:Sorcery +A:SP$ RepeatEach | Cost$ 6 R R | RecordChoice$ True | ChoosePlayer$ True | Random$ True | RepeatSubAbility$ DBGainControl | RepeatCards$ Permanent.nonLand | SpellDescription$ For each nonland permanent, choose a player at random. Then each player gains control of each permanent for which he or she was chosen. Untap those permanents. +SVar:DBGainControl:DB$ GainControl | NewController$ Player.IsRemembered | AllValid$ Permanent.IsImprinted | Untap$ True +SVar:RemAIDeck:True +SVar:RemRandomDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/scrambleverse.jpg +Oracle:For each nonland permanent, choose a player at random. Then each player gains control of each permanent for which he or she was chosen. Untap those permanents. diff --git a/forge-gui/src/main/java/forge/game/ability/effects/RepeatEachEffect.java b/forge-gui/src/main/java/forge/game/ability/effects/RepeatEachEffect.java index af28391182d..206562f4280 100644 --- a/forge-gui/src/main/java/forge/game/ability/effects/RepeatEachEffect.java +++ b/forge-gui/src/main/java/forge/game/ability/effects/RepeatEachEffect.java @@ -1,10 +1,15 @@ package forge.game.ability.effects; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.Map.Entry; import java.util.Set; +import com.google.common.collect.Lists; + import forge.game.Game; import forge.game.ability.AbilityFactory; import forge.game.ability.AbilityUtils; @@ -17,6 +22,7 @@ import forge.game.spellability.AbilitySub; import forge.game.spellability.SpellAbility; import forge.game.zone.ZoneType; import forge.gui.GuiChoose; +import forge.util.Aggregates; public class RepeatEachEffect extends SpellAbilityEffect { @@ -36,6 +42,7 @@ public class RepeatEachEffect extends SpellAbilityEffect { boolean useImprinted = sa.hasParam("UseImprinted"); boolean loopOverCards = false; + boolean recordChoice = sa.hasParam("RecordChoice"); List repeatCards = null; if (sa.hasParam("RepeatCards")) { @@ -47,7 +54,7 @@ public class RepeatEachEffect extends SpellAbilityEffect { } repeatCards = CardLists.getValidCards(game.getCardsIn(zone), sa.getParam("RepeatCards"), source.getController(), source); - loopOverCards = true; + loopOverCards = !recordChoice; } else if (sa.hasParam("DefinedCards")) { repeatCards = AbilityUtils.getDefinedCards(source, sa.getParam("DefinedCards"), sa); @@ -109,5 +116,32 @@ public class RepeatEachEffect extends SpellAbilityEffect { AbilityUtils.resolve(repeat); } } + if (recordChoice) { + boolean random = sa.hasParam("Random"); + if (sa.hasParam("ChoosePlayer")) { + Map> recordMap = new HashMap>(); + for (Card card : repeatCards) { + Player p; + if (random) { + p = Aggregates.random(game.getPlayers()); + } else { + p = sa.getActivatingPlayer().getController().chooseSinglePlayerForEffect(game.getPlayers(), sa, "Choose a player"); + } + if (recordMap.containsKey(p)) { + recordMap.get(p).add(0, card); + } else { + recordMap.put(p, Lists.newArrayList(card)); + } + } + for (Entry> entry : recordMap.entrySet()) { + // Remember the player and imprint the cards + source.addRemembered(entry.getKey()); + source.getImprinted().addAll(entry.getValue()); + AbilityUtils.resolve(repeat); + source.removeRemembered(entry.getKey()); + source.getImprinted().removeAll(entry.getValue()); + } + } + } } }