From 85d967e5a5565cbdadf3985c803c659ae9dfe98b Mon Sep 17 00:00:00 2001 From: swordshine Date: Sun, 9 Feb 2014 10:39:48 +0000 Subject: [PATCH] - Fixed Eureka so these cards actually start with the activator when resolving --- .../game/ability/effects/MultiplePilesEffect.java | 8 ++++++++ .../forge/game/ability/effects/RepeatEachEffect.java | 11 ++++++++--- forge-gui/res/cardsfolder/e/eureka.txt | 2 +- forge-gui/res/cardsfolder/g/giant_slug.txt | 2 +- forge-gui/res/cardsfolder/h/hypergenesis.txt | 2 +- forge-gui/res/cardsfolder/r/reality_shaping.txt | 2 +- forge-gui/res/cardsfolder/t/thieves_auction.txt | 2 +- 7 files changed, 21 insertions(+), 8 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/MultiplePilesEffect.java b/forge-game/src/main/java/forge/game/ability/effects/MultiplePilesEffect.java index d4746e31942..985f13f6e92 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/MultiplePilesEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/MultiplePilesEffect.java @@ -6,6 +6,8 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import com.google.common.collect.Iterables; + import forge.game.ability.AbilityFactory; import forge.game.ability.AbilityUtils; import forge.game.ability.SpellAbilityEffect; @@ -62,6 +64,12 @@ public class MultiplePilesEffect extends SpellAbilityEffect { final TargetRestrictions tgt = sa.getTargetRestrictions(); final List tgtPlayers = getTargetPlayers(sa); + // starting with the activator + int pSize = tgtPlayers.size(); + Player activator = sa.getActivatingPlayer(); + while (tgtPlayers.contains(activator) && !activator.equals(Iterables.getFirst(tgtPlayers, null))) { + tgtPlayers.add(pSize - 1, tgtPlayers.remove(0)); + } for (final Player p : tgtPlayers) { if ((tgt == null) || p.canBeTargetedBy(sa)) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/RepeatEachEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RepeatEachEffect.java index 6674aae42f3..67df91533d7 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RepeatEachEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RepeatEachEffect.java @@ -8,6 +8,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import forge.game.Game; @@ -88,9 +89,13 @@ public class RepeatEachEffect extends SpellAbilityEffect { if (sa.hasParam("RepeatPlayers")) { final List repeatPlayers = AbilityUtils.getDefinedPlayers(source, sa.getParam("RepeatPlayers"), sa); - boolean optional = false; - if (sa.hasParam("RepeatOptionalForEachPlayer")) { - optional = true; + boolean optional = sa.hasParam("RepeatOptionalForEachPlayer"); + if (sa.hasParam("StartingWithActivator")) { + int size = repeatPlayers.size(); + Player activator = sa.getActivatingPlayer(); + while (!activator.equals(Iterables.getFirst(repeatPlayers, null))) { + repeatPlayers.add(size - 1, repeatPlayers.remove(0)); + } } for (Player p : repeatPlayers) { if (optional && !p.getController().confirmAction(repeat, null, sa.getParam("RepeatOptionalMessage"))) { diff --git a/forge-gui/res/cardsfolder/e/eureka.txt b/forge-gui/res/cardsfolder/e/eureka.txt index c92c4c6a41a..debdec438a2 100644 --- a/forge-gui/res/cardsfolder/e/eureka.txt +++ b/forge-gui/res/cardsfolder/e/eureka.txt @@ -3,7 +3,7 @@ ManaCost:2 G G Types:Sorcery A:SP$ Repeat | Cost$ 2 G G | RepeatSubAbility$ ResetCheck | RepeatCheckSVar$ NumPlayerGiveup | RepeatSVarCompare$ LTTotalPlayer | SubAbility$ DBChangeZoneAll | StackDescription$ SpellDescription | SpellDescription$ Starting with you, each player may put a permanent card from his or her hand onto the battlefield. Repeat this process until no one puts a card onto the battlefield. SVar:ResetCheck:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ Number | Expression$ 0 | SubAbility$ DBRepeatChoice -SVar:DBRepeatChoice:DB$ RepeatEach | RepeatSubAbility$ DBChoice | RepeatPlayers$ Player +SVar:DBRepeatChoice:DB$ RepeatEach | StartingWithActivator$ True | RepeatSubAbility$ DBChoice | RepeatPlayers$ Player SVar:DBChoice:DB$ GenericChoice | Choices$ DBCheckHand,DBNoChange | Defined$ Player.IsRemembered SVar:DBCheckHand:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ CountSVar | Expression$ NumPlayerGiveup/Plus.1 | ConditionCheckSVar$ CheckHand | ConditionSVarCompare$ EQ0 | SubAbility$ DBChoose | SpellDescription$ Choose a permanent to put onto the battlefield SVar:DBChoose:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Permanent.IsNotRemembered+RememberedPlayerCtrl | ChoiceZone$ Hand | Amount$ 1 | RememberChosen$ True | Mandatory$ True | ConditionCheckSVar$ CheckHand | ConditionSVarCompare$ GE1 diff --git a/forge-gui/res/cardsfolder/g/giant_slug.txt b/forge-gui/res/cardsfolder/g/giant_slug.txt index 317f187b2ef..153c126e6f7 100644 --- a/forge-gui/res/cardsfolder/g/giant_slug.txt +++ b/forge-gui/res/cardsfolder/g/giant_slug.txt @@ -5,7 +5,7 @@ PT:1/1 A:AB$ Effect | Cost$ 5 | Duration$ Permanent | Triggers$ ChooseBasicTrig | AILogic$ EndOfOppTurn | Stackable$ False | SVars$ ChooseB,ExileEffect,DBPump | RememberObjects$ Self | SpellDescription$ At the beginning of your next upkeep, choose a basic land type. CARDNAME gains landwalk of the chosen type until the end of that turn. SVar:ChooseBasicTrig:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Command | Execute$ ChooseB | TriggerDescription$ At the beginning of your next upkeep, choose a basic land type. Giant Slug gains landwalk of the chosen type until the end of that turn. SVar:ChooseB:AB$ ChooseType | Cost$ 0 | Defined$ You | Type$ Basic Land | AILogic$ ChosenLandwalk | SubAbility$ DBPump -SVar:DBPump:DB$ Pump | Defined$ Remembered | KW$ ChosenTypewalk | DefinedChosenKW$ Type | SubAbility$ ExileEffect +SVar:DBPump:DB$ Pump | Defined$ Remembered | KW$ ChosenTypewalk | DefinedKW$ ChosenType | SubAbility$ ExileEffect SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:Picture:http://www.wizards.com/global/images/magic/general/giant_slug.jpg Oracle:{5}: At the beginning of your next upkeep, choose a basic land type. Giant Slug gains landwalk of the chosen type until the end of that turn. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/h/hypergenesis.txt b/forge-gui/res/cardsfolder/h/hypergenesis.txt index dc0fd8a8981..bd46ac326ea 100644 --- a/forge-gui/res/cardsfolder/h/hypergenesis.txt +++ b/forge-gui/res/cardsfolder/h/hypergenesis.txt @@ -5,7 +5,7 @@ Colors:green K:Suspend:3:1 G G A:SP$ Repeat | Cost$ 0 | RepeatSubAbility$ ResetCheck | RepeatCheckSVar$ NumPlayerGiveup | RepeatSVarCompare$ LTTotalPlayer | SubAbility$ DBChangeZoneAll | StackDescription$ SpellDescription | SpellDescription$ Starting with you, each player may put an artifact, creature, enchantment, or land card from his or her hand onto the battlefield. Repeat this process until no one puts a card onto the battlefield. SVar:ResetCheck:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ Number | Expression$ 0 | SubAbility$ DBRepeatChoice -SVar:DBRepeatChoice:DB$ RepeatEach | RepeatSubAbility$ DBChoice | RepeatPlayers$ Player +SVar:DBRepeatChoice:DB$ RepeatEach | StartingWithActivator$ True | RepeatSubAbility$ DBChoice | RepeatPlayers$ Player SVar:DBChoice:DB$ GenericChoice | Choices$ DBCheckHand,DBNoChange | Defined$ Player.IsRemembered SVar:DBCheckHand:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ CountSVar | Expression$ NumPlayerGiveup/Plus.1 | ConditionCheckSVar$ CheckHand | ConditionSVarCompare$ EQ0 | SubAbility$ DBChoose | SpellDescription$ Choose an artifact, creature, enchantment, or land card from your hand onto the battlefield SVar:DBChoose:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Artifact.IsNotRemembered+RememberedPlayerCtrl,Creature.IsNotRemembered+RememberedPlayerCtrl,Enchantment.IsNotRemembered+RememberedPlayerCtrl,Land.IsNotRemembered+RememberedPlayerCtrl | ChoiceZone$ Hand | Amount$ 1 | RememberChosen$ True | Mandatory$ True | ConditionCheckSVar$ CheckHand | ConditionSVarCompare$ GE1 diff --git a/forge-gui/res/cardsfolder/r/reality_shaping.txt b/forge-gui/res/cardsfolder/r/reality_shaping.txt index 94bff26e8e5..b88800081ba 100644 --- a/forge-gui/res/cardsfolder/r/reality_shaping.txt +++ b/forge-gui/res/cardsfolder/r/reality_shaping.txt @@ -2,7 +2,7 @@ Name:Reality Shaping ManaCost:no cost Types:Phenomenon T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | TriggerZones$ Command | Execute$ TrigPutFromHand | TriggerDescription$ When you encounter CARDNAME, starting with you, each player may put a permanent card from his or her hand onto the battlefield. (Then planeswalk away from this phenomenon.) -SVar:TrigPutFromHand:AB$ RepeatEach | Cost$ 0 | RepeatPlayers$ Player | RepeatSubAbility$ DBChangeZone | SubAbility$ PWAway +SVar:TrigPutFromHand:AB$ RepeatEach | Cost$ 0 | StartingWithActivator$ True | RepeatPlayers$ Player | RepeatSubAbility$ DBChangeZone | SubAbility$ PWAway SVar:DBChangeZone:DB$ ChangeZone | DefinedPlayer$ Player.IsRemembered | Choser$ Player.IsRemembered | ChangeType$ Permanent | ChangeNum$ 1 | Origin$ Hand | Destination$ Battlefield SVar:PWAway:DB$ Planeswalk | Cost$ 0 SVar:Picture:http://www.wizards.com/global/images/magic/general/reality_shaping.jpg diff --git a/forge-gui/res/cardsfolder/t/thieves_auction.txt b/forge-gui/res/cardsfolder/t/thieves_auction.txt index 6afbdbd2f4c..7fdcebfe0b5 100644 --- a/forge-gui/res/cardsfolder/t/thieves_auction.txt +++ b/forge-gui/res/cardsfolder/t/thieves_auction.txt @@ -3,7 +3,7 @@ ManaCost:4 R R R Types:Sorcery A:SP$ ChangeZoneAll | Cost$ 4 R R R | ChangeType$ Permanent.nonToken | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBRepeatChoose | StackDescription$ SpellDescription | SpellDescription$ Exile all nontoken permanents. Starting with you, each player chooses one of the exiled cards and puts it onto the battlefield tapped under his or her control. Repeat this process until all cards exiled this way have been chosen. SVar:DBRepeatChoose:DB$ Repeat | RepeatSubAbility$ DBRepeat | RepeatDefined$ Remembered | RepeatPresent$ Card -SVar:DBRepeat:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBChoose +SVar:DBRepeat:DB$ RepeatEach | StartingWithActivator$ True | RepeatPlayers$ Player | RepeatSubAbility$ DBChoose SVar:DBChoose:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Card.IsRemembered | ForgetChosen$ True | ChoiceZone$ Exile | SubAbility$ DBGainControl SVar:DBGainControl:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | Defined$ ChosenCard | GainControl$ True | Tapped$ True | NewController$ Player.IsRemembered SVar:RemAIDeck:True