diff --git a/Mage/src/mage/game/GameState.java b/Mage/src/mage/game/GameState.java index 16531d4f4cb..ddc1bb051ad 100644 --- a/Mage/src/mage/game/GameState.java +++ b/Mage/src/mage/game/GameState.java @@ -240,6 +240,7 @@ public class GameState implements Serializable, Copyable { for (Player player: players.values()) { player.reset(); } + stack.reset(game); battlefield.reset(game); effects.apply(game); } diff --git a/Mage/src/mage/game/stack/Spell.java b/Mage/src/mage/game/stack/Spell.java index a5ec7178f39..6d0443e0c62 100644 --- a/Mage/src/mage/game/stack/Spell.java +++ b/Mage/src/mage/game/stack/Spell.java @@ -41,12 +41,16 @@ import mage.MageObject; import mage.ObjectColor; import mage.abilities.Abilities; import mage.abilities.Ability; +import mage.abilities.costs.AlternativeCost; +import mage.abilities.costs.Cost; +import mage.abilities.costs.Costs; import mage.abilities.costs.mana.ManaCost; import mage.abilities.costs.mana.ManaCosts; import mage.abilities.effects.common.ExileSpellEffect; import mage.abilities.keyword.KickerAbility; import mage.cards.Card; import mage.game.events.GameEvent; +import mage.players.ManaPool; import mage.players.Player; import mage.target.Target; import mage.watchers.Watchers; @@ -153,6 +157,28 @@ public class Spell> implements StackObject, Card { card.moveToZone(Zone.GRAVEYARD, sourceId, game, false); } + @Override + public void reset ( Game game ) { + Mana oldPayment = ability.getManaCosts().getPayment(); + ManaPool tmpPool = new ManaPool(); + tmpPool.changeMana(oldPayment); + List oldAltCosts = ability.getAlternativeCosts(); + Costs oldOptionalCosts = ability.getOptionalCosts(); + Costs oldCosts = ability.getCosts(); + + //Get a fresh copy of the spell ability. + ability = card.getSpellAbility().copy(); + + //Reload all the payments for all costs. + ability.getManaCosts().assignPayment(tmpPool); + ability.getAlternativeCosts().clear(); + ability.getAlternativeCosts().addAll(oldAltCosts); + ability.getOptionalCosts().clear(); + ability.getOptionalCosts().addAll(oldOptionalCosts); + ability.getCosts().clear(); + ability.getCosts().addAll(oldCosts); + } + @Override public UUID getSourceId() { return card.getId(); diff --git a/Mage/src/mage/game/stack/SpellStack.java b/Mage/src/mage/game/stack/SpellStack.java index 6e23e68798f..e1a26e55d03 100644 --- a/Mage/src/mage/game/stack/SpellStack.java +++ b/Mage/src/mage/game/stack/SpellStack.java @@ -134,6 +134,12 @@ public class SpellStack extends Stack { return null; } + public void reset ( Game game ) { + for ( StackObject stackObject : this ) { + stackObject.reset(game); + } + } + public SpellStack copy() { return new SpellStack(this); } diff --git a/Mage/src/mage/game/stack/StackObject.java b/Mage/src/mage/game/stack/StackObject.java index b81d86a7b49..041f3355210 100644 --- a/Mage/src/mage/game/stack/StackObject.java +++ b/Mage/src/mage/game/stack/StackObject.java @@ -41,6 +41,7 @@ public interface StackObject extends MageObject { public UUID getControllerId(); public void checkTriggers(GameEvent event, Game game); public void counter(UUID sourceId, Game game); + public void reset ( Game game ); @Override public StackObject copy(); }