diff --git a/.gitattributes b/.gitattributes index 4bf51dfff66..096e0b7e24d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -12267,6 +12267,7 @@ forge-gui/res/cardsfolder/s/soul_ransom.txt -text forge-gui/res/cardsfolder/s/soul_reap.txt -text forge-gui/res/cardsfolder/s/soul_rend.txt svneol=native#text/plain forge-gui/res/cardsfolder/s/soul_scourge.txt svneol=native#text/plain +forge-gui/res/cardsfolder/s/soul_sculptor.txt -text forge-gui/res/cardsfolder/s/soul_seizer_ghastly_haunting.txt -text forge-gui/res/cardsfolder/s/soul_shepherd.txt svneol=native#text/plain forge-gui/res/cardsfolder/s/soul_shred.txt svneol=native#text/plain diff --git a/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java b/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java index 057a9f827ba..cb291e2942c 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java @@ -299,6 +299,8 @@ public class AnimateEffect extends AnimateEffectBase { } } else if (sa.hasParam("UntilControllerNextUntap")) { game.getUntap().addUntil(c.getController(), unanimate); + } else if (sa.hasParam("UntilAPlayerCastSpell")) { + game.getStack().addCastCommand(sa.getParam("UntilAPlayerCastSpell"), unanimate); } else if (sa.hasParam("UntilYourNextTurn")) { game.getCleanup().addUntil(source.getController(), unanimate); } else { diff --git a/forge-game/src/main/java/forge/game/zone/MagicStack.java b/forge-game/src/main/java/forge/game/zone/MagicStack.java index 275172e0bb5..72b5dacc32b 100644 --- a/forge-game/src/main/java/forge/game/zone/MagicStack.java +++ b/forge-game/src/main/java/forge/game/zone/MagicStack.java @@ -19,6 +19,9 @@ package forge.game.zone; import com.esotericsoftware.minlog.Log; import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; + +import forge.GameCommand; import forge.card.mana.ManaCost; import forge.game.Game; import forge.game.GameLogEntryType; @@ -46,6 +49,7 @@ import forge.game.trigger.Trigger; import forge.game.trigger.TriggerType; import java.util.*; +import java.util.Map.Entry; import java.util.concurrent.LinkedBlockingDeque; @@ -71,6 +75,7 @@ public class MagicStack /* extends MyObservable */ implements Iterable thisTurnCast = new ArrayList(); private List lastTurnCast = new ArrayList(); private Card curResolvingCard = null; + private final HashMap> commandList = new HashMap>(); private final Game game; @@ -399,6 +404,7 @@ public class MagicStack /* extends MyObservable */ implements Iterable> ev : this.commandList.entrySet()) { + if (cast.isType(ev.getKey())) { + this.execute(ev.getValue()); + } + } + } + + private void execute(final List c) { + final int length = c.size(); + for (int i = 0; i < length; i++) { + c.remove(0).run(); + } + } + /** * Checks if is resolving. * diff --git a/forge-gui/res/cardsfolder/s/soul_sculptor.txt b/forge-gui/res/cardsfolder/s/soul_sculptor.txt new file mode 100644 index 00000000000..c046c254d52 --- /dev/null +++ b/forge-gui/res/cardsfolder/s/soul_sculptor.txt @@ -0,0 +1,8 @@ +Name:Soul Sculptor +ManaCost:2 W +Types:Creature Human +PT:1/1 +A:AB$ Animate | Cost$ 1 W T | ValidTgts$ Creature | Types$ Enchantment | RemoveAllAbilities$ True | OverwriteTypes$ True | KeepSupertypes$ True | UntilAPlayerCastSpell$ Creature | SpellDescription$ Target creature becomes an enchantment and loses all abilities until a player casts a creature spell. +SVar:RemAIDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/soul_sculptor.jpg +Oracle:{1}{W}, {T}: Target creature becomes an enchantment and loses all abilities until a player casts a creature spell.