diff --git a/.gitattributes b/.gitattributes index 8abadf8d9cd..97839350e36 100644 --- a/.gitattributes +++ b/.gitattributes @@ -10212,6 +10212,7 @@ res/cardsfolder/s/sparksmith.txt svneol=native#text/plain res/cardsfolder/s/sparkspitter.txt svneol=native#text/plain res/cardsfolder/s/sparring_collar.txt -text res/cardsfolder/s/sparring_golem.txt svneol=native#text/plain +res/cardsfolder/s/spatial_merging.txt -text res/cardsfolder/s/spawn_of_rix_maadi.txt -text res/cardsfolder/s/spawning_breath.txt svneol=native#text/plain res/cardsfolder/s/spawning_pit.txt svneol=native#text/plain diff --git a/res/cardsfolder/s/spatial_merging.txt b/res/cardsfolder/s/spatial_merging.txt new file mode 100644 index 00000000000..f052b723eeb --- /dev/null +++ b/res/cardsfolder/s/spatial_merging.txt @@ -0,0 +1,8 @@ +Name:Spatial Merging +ManaCost:no cost +Types:Phenomenon +T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | TriggerZones$ Command | Execute$ TrigDig | TriggerDescription$ When you encounter CARDNAME, reveal cards from the top of your planar deck until you reveal two plane cards. Simultaneously planeswalk to both of them. Put all other cards revealed this way on the bottom of your planar deck in any order. +SVar:TrigDig:DB$ DigUntil | Amount$ 2 | Valid$ Plane | DigZone$ PlanarDeck | RememberFound$ True | FoundDestination$ PlanarDeck | RevealedDestination$ PlanarDeck | RevealedLibraryPosition$ -1 | SubAbility$ DBPWTo +SVar:DBPWTo:DB$ Planeswalk | Defined$ Remembered | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SetInfo:PC2 Common \ No newline at end of file diff --git a/src/main/java/forge/card/ability/effects/DigUntilEffect.java b/src/main/java/forge/card/ability/effects/DigUntilEffect.java index fae2b14a05c..b0836a92257 100644 --- a/src/main/java/forge/card/ability/effects/DigUntilEffect.java +++ b/src/main/java/forge/card/ability/effects/DigUntilEffect.java @@ -97,13 +97,14 @@ public class DigUntilEffect extends SpellAbilityEffect { final int foundLibPos = AbilityUtils.calculateAmount(host, sa.getParam("FoundLibraryPosition"), sa); final ZoneType revealedDest = ZoneType.smartValueOf(sa.getParam("RevealedDestination")); final int revealedLibPos = AbilityUtils.calculateAmount(host, sa.getParam("RevealedLibraryPosition"), sa); - + final ZoneType digSite = sa.hasParam("DigZone") ? ZoneType.smartValueOf(sa.getParam("DigZone")) : ZoneType.Library; + for (final Player p : getTargetPlayers(sa)) { if ((tgt == null) || p.canBeTargetedBy(sa)) { final List found = new ArrayList(); final List revealed = new ArrayList(); - final PlayerZone library = p.getZone(ZoneType.Library); + final PlayerZone library = p.getZone(digSite); final int maxToDig = maxRevealed != null ? maxRevealed : library.size(); diff --git a/src/main/java/forge/card/ability/effects/PlaneswalkEffect.java b/src/main/java/forge/card/ability/effects/PlaneswalkEffect.java index e1f8283e417..f8be7507c95 100644 --- a/src/main/java/forge/card/ability/effects/PlaneswalkEffect.java +++ b/src/main/java/forge/card/ability/effects/PlaneswalkEffect.java @@ -22,8 +22,6 @@ public class PlaneswalkEffect extends SpellAbilityEffect { public void resolve(SpellAbility sa) { GameState game = sa.getActivatingPlayer().getGame(); - System.out.println("AF Planeswalking!"); - for(Player p : game.getPlayers()) { p.leaveCurrentPlane(); diff --git a/src/main/java/forge/game/GameAction.java b/src/main/java/forge/game/GameAction.java index d498adbc4dc..245f2d73c7c 100644 --- a/src/main/java/forge/game/GameAction.java +++ b/src/main/java/forge/game/GameAction.java @@ -736,6 +736,8 @@ public class GameAction { case Exile: return this.exile(c); case Ante: return this.moveTo(c.getOwner().getZone(ZoneType.Ante), c); case Command: return this.moveTo(c.getOwner().getZone(ZoneType.Command), c); + case PlanarDeck: return this.moveTo(c.getOwner().getZone(ZoneType.PlanarDeck), c); + case SchemeDeck: return this.moveTo(c.getOwner().getZone(ZoneType.SchemeDeck), c); default: return this.moveToStack(c); } } diff --git a/src/main/java/forge/game/player/Player.java b/src/main/java/forge/game/player/Player.java index 2fba2637423..9d078583d95 100644 --- a/src/main/java/forge/game/player/Player.java +++ b/src/main/java/forge/game/player/Player.java @@ -2954,7 +2954,7 @@ public class Player extends GameEntity implements Comparable { * Then runs triggers. */ public void planeswalk() - { + { planeswalkTo(Arrays.asList(getZone(ZoneType.PlanarDeck).get(0))); } @@ -2966,12 +2966,18 @@ public class Player extends GameEntity implements Comparable { */ public void planeswalkTo(final List destinations) { - currentPlanes = destinations; + System.out.println(this.getName() + ": planeswalk to " + destinations.toString()); + currentPlanes.addAll(destinations); for(Card c : currentPlanes) { getZone(ZoneType.PlanarDeck).remove(c); getZone(ZoneType.Command).add(c); - } + } + + //DBG + //System.out.println("CurrentPlanes: " + currentPlanes); + //System.out.println("ActivePlanes: " + game.getActivePlanes()); + //System.out.println("CommandPlanes: " + getZone(ZoneType.Command).getCards()); game.setActivePlanes(currentPlanes); //Run PlaneswalkedTo triggers here. @@ -2985,7 +2991,7 @@ public class Player extends GameEntity implements Comparable { * Puts my currently active planes, if any, at the bottom of my planar deck. */ public void leaveCurrentPlane() - { + { if(!currentPlanes.isEmpty()) { //Run PlaneswalkedFrom triggers here. @@ -2994,12 +3000,17 @@ public class Player extends GameEntity implements Comparable { game.getTriggerHandler().runTrigger(TriggerType.PlaneswalkedFrom, runParams,false); for(Card c : currentPlanes) { - getZone(ZoneType.Command).remove(c); + game.getZoneOf(c).remove(c); c.clearControllers(); getZone(ZoneType.PlanarDeck).add(c); } currentPlanes.clear(); } + + //DBG + //System.out.println("CurrentPlanes: " + currentPlanes); + //System.out.println("ActivePlanes: " + game.getActivePlanes()); + //System.out.println("CommandPlanes: " + getZone(ZoneType.Command).getCards()); } /** diff --git a/src/main/java/forge/game/zone/MagicStack.java b/src/main/java/forge/game/zone/MagicStack.java index 53a958201dc..0caebdf95e5 100644 --- a/src/main/java/forge/game/zone/MagicStack.java +++ b/src/main/java/forge/game/zone/MagicStack.java @@ -869,7 +869,9 @@ public class MagicStack extends MyObservable implements Iterable { stackTARs.clear(); boolean isFirst = true; - for (final SpellAbilityStackInstance spell : stack) { + for (int i = 0;i