diff --git a/Mage.Sets/src/mage/cards/r/RegenerationsRestored.java b/Mage.Sets/src/mage/cards/r/RegenerationsRestored.java new file mode 100644 index 00000000000..3915b3c3c02 --- /dev/null +++ b/Mage.Sets/src/mage/cards/r/RegenerationsRestored.java @@ -0,0 +1,122 @@ +package mage.cards.r; + +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.common.delayed.ReflexiveTriggeredAbility; +import mage.abilities.condition.common.SourceHasCounterCondition; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ExileSourceEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.effects.common.turn.AddExtraTurnControllerEffect; +import mage.abilities.effects.keyword.ScryEffect; +import mage.abilities.keyword.VanishingSacrificeAbility; +import mage.abilities.keyword.VanishingUpkeepAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.events.GameEvent; + +import java.util.UUID; + +/** + * @author Susucr + */ +public final class RegenerationsRestored extends CardImpl { + + public RegenerationsRestored(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}{U}"); + + // Vanishing 12 + Ability ability = new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.TIME.createInstance(12))); + ability.setRuleVisible(false); + this.addAbility(ability); + this.addAbility(new VanishingUpkeepAbility(12)); + this.addAbility(new VanishingSacrificeAbility()); + + // Whenever one or more time counters are removed from Regenerations Restored, scry 1 and you gain 1 life. Then if Regenerations Restored has no time counters on it, exile it. When you do, take an extra turn after this one. + this.addAbility(new RegenerationsRestoredTriggeredAbility()); + } + + private RegenerationsRestored(final RegenerationsRestored card) { + super(card); + } + + @Override + public RegenerationsRestored copy() { + return new RegenerationsRestored(this); + } +} + +class RegenerationsRestoredTriggeredAbility extends TriggeredAbilityImpl { + + RegenerationsRestoredTriggeredAbility() { + super(Zone.BATTLEFIELD, new ScryEffect(1, false)); + this.addEffect(new GainLifeEffect(1).concatBy("and")); + + this.addEffect(new ConditionalOneShotEffect( + new RegenerationsRestoredEffect(), + new SourceHasCounterCondition(CounterType.TIME, 0, 0) + ).concatBy("Then")); + + this.setTriggerPhrase("Whenever one or more time counters are removed from {this}, "); + } + + private RegenerationsRestoredTriggeredAbility(final RegenerationsRestoredTriggeredAbility ability) { + super(ability); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.COUNTERS_REMOVED; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + return event.getAmount() > 0 + && event.getData().equals(CounterType.TIME.getName()) + && event.getTargetId().equals(this.getSourceId()); + } + + @Override + public RegenerationsRestoredTriggeredAbility copy() { + return new RegenerationsRestoredTriggeredAbility(this); + } +} + +class RegenerationsRestoredEffect extends OneShotEffect { + + RegenerationsRestoredEffect() { + super(Outcome.ExtraTurn); + staticText = "exile it. When you do, take an extra turn after this one"; + } + + private RegenerationsRestoredEffect(final RegenerationsRestoredEffect effect) { + super(effect); + } + + @Override + public RegenerationsRestoredEffect copy() { + return new RegenerationsRestoredEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + if (new ExileSourceEffect().apply(game, source)) { + game.fireReflexiveTriggeredAbility( + new ReflexiveTriggeredAbility(new AddExtraTurnControllerEffect(), false) + .setTriggerPhrase("When you do, "), + source + ); + return true; + } + return false; + } + +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/DoctorWho.java b/Mage.Sets/src/mage/sets/DoctorWho.java index e8f5f0d6550..89f8ddc7618 100644 --- a/Mage.Sets/src/mage/sets/DoctorWho.java +++ b/Mage.Sets/src/mage/sets/DoctorWho.java @@ -145,6 +145,7 @@ public final class DoctorWho extends ExpansionSet { cards.add(new SetCardInfo("Propaganda", 219, Rarity.UNCOMMON, mage.cards.p.Propaganda.class)); cards.add(new SetCardInfo("Quantum Misalignment", 52, Rarity.RARE, mage.cards.q.QuantumMisalignment.class)); cards.add(new SetCardInfo("RMS Titanic", 93, Rarity.RARE, mage.cards.r.RMSTitanic.class)); + cards.add(new SetCardInfo("Regenerations Restored", 151, Rarity.RARE, mage.cards.r.RegenerationsRestored.class)); cards.add(new SetCardInfo("Reliquary Tower", 296, Rarity.UNCOMMON, mage.cards.r.ReliquaryTower.class)); cards.add(new SetCardInfo("Renegade Silent", 53, Rarity.UNCOMMON, mage.cards.r.RenegadeSilent.class)); cards.add(new SetCardInfo("Return to Dust", 211, Rarity.UNCOMMON, mage.cards.r.ReturnToDust.class)); diff --git a/Mage/src/main/java/mage/abilities/common/delayed/ReflexiveTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/delayed/ReflexiveTriggeredAbility.java index 6ec2831bc58..68f4629004e 100644 --- a/Mage/src/main/java/mage/abilities/common/delayed/ReflexiveTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/delayed/ReflexiveTriggeredAbility.java @@ -61,6 +61,12 @@ public class ReflexiveTriggeredAbility extends DelayedTriggeredAbility { return condition == null || condition.apply(game, this); } + @Override + public ReflexiveTriggeredAbility setTriggerPhrase(String triggerPhrase) { + super.setTriggerPhrase(triggerPhrase); + return this; + } + @Override public ReflexiveTriggeredAbility copy() { return new ReflexiveTriggeredAbility(this); diff --git a/Mage/src/main/java/mage/abilities/effects/common/ExileSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ExileSourceEffect.java index 3e53601fb1a..f9802f92b6b 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ExileSourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ExileSourceEffect.java @@ -1,8 +1,6 @@ package mage.abilities.effects.common; -import java.util.UUID; - import mage.MageObject; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; @@ -13,6 +11,8 @@ import mage.game.permanent.Permanent; import mage.players.Player; import mage.util.CardUtil; +import java.util.UUID; + /** * @author BetaSteward_at_googlemail.com */ @@ -53,7 +53,7 @@ public class ExileSourceEffect extends OneShotEffect { if (sourceObject instanceof Card) { if (sourceObject instanceof Permanent) { if (!((Permanent) sourceObject).isPhasedIn()) { - return true; + return false; } } UUID exileZoneId = null; @@ -65,7 +65,7 @@ public class ExileSourceEffect extends OneShotEffect { Card sourceCard = (Card) sourceObject; return controller.moveCardsToExile(sourceCard, source, game, true, exileZoneId, exileZoneName); } - return true; + return false; } return false; }