diff --git a/Mage.Sets/src/mage/cards/d/DovinHandOfControl.java b/Mage.Sets/src/mage/cards/d/DovinHandOfControl.java new file mode 100644 index 00000000000..52d646b5d07 --- /dev/null +++ b/Mage.Sets/src/mage/cards/d/DovinHandOfControl.java @@ -0,0 +1,90 @@ +package mage.cards.d; + +import mage.abilities.Ability; +import mage.abilities.LoyaltyAbility; +import mage.abilities.SpellAbility; +import mage.abilities.common.PlaneswalkerEntersWithLoyaltyCountersAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.PreventDamageByTargetEffect; +import mage.abilities.effects.common.PreventDamageToTargetEffect; +import mage.abilities.effects.common.cost.CostModificationEffectImpl; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.target.TargetPermanent; +import mage.util.CardUtil; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class DovinHandOfControl extends CardImpl { + + public DovinHandOfControl(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{2}{W/U}"); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.DOVIN); + this.addAbility(new PlaneswalkerEntersWithLoyaltyCountersAbility(5)); + + // Artifact, instant, and sorcery spells your opponents cast cost {1} more to cast. + this.addAbility(new SimpleStaticAbility(new DovinHandOfControlEffect())); + + // -1: Until your next turn, prevent all damage that would be dealt to and dealt by target permanent an opponent controls. + Ability ability = new LoyaltyAbility(new PreventDamageToTargetEffect( + Duration.UntilYourNextTurn + ).setText("Until your next turn, prevent all damage that would be dealt to"), -1); + ability.addEffect(new PreventDamageByTargetEffect( + Duration.UntilYourNextTurn + ).setText("and dealt by target permanent an opponent controls")); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT)); + this.addAbility(ability); + } + + private DovinHandOfControl(final DovinHandOfControl card) { + super(card); + } + + @Override + public DovinHandOfControl copy() { + return new DovinHandOfControl(this); + } +} + +class DovinHandOfControlEffect extends CostModificationEffectImpl { + + DovinHandOfControlEffect() { + super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.INCREASE_COST); + staticText = "Artifact, instant, and sorcery spells your opponents cast cost {1} more to cast"; + } + + private DovinHandOfControlEffect(DovinHandOfControlEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source, Ability abilityToModify) { + SpellAbility spellAbility = (SpellAbility) abilityToModify; + CardUtil.adjustCost(spellAbility, -1); + return true; + } + + @Override + public boolean applies(Ability abilityToModify, Ability source, Game game) { + Card card = game.getCard(abilityToModify.getId()); + if (card == null || (!card.isInstantOrSorcery() && !card.isArtifact()) + || game.getOpponents(source.getControllerId()).contains(abilityToModify.getControllerId())) { + return false; + } + return true; + } + + @Override + public DovinHandOfControlEffect copy() { + return new DovinHandOfControlEffect(this); + } +} diff --git a/Mage.Sets/src/mage/sets/WarOfTheSpark.java b/Mage.Sets/src/mage/sets/WarOfTheSpark.java index 67c0c976fc3..f3592b9c4a5 100644 --- a/Mage.Sets/src/mage/sets/WarOfTheSpark.java +++ b/Mage.Sets/src/mage/sets/WarOfTheSpark.java @@ -53,6 +53,7 @@ public final class WarOfTheSpark extends ExpansionSet { cards.add(new SetCardInfo("Demolish", 123, Rarity.COMMON, mage.cards.d.Demolish.class)); cards.add(new SetCardInfo("Devouring Hellion", 124, Rarity.UNCOMMON, mage.cards.d.DevouringHellion.class)); cards.add(new SetCardInfo("Dovin's Veto", 193, Rarity.UNCOMMON, mage.cards.d.DovinsVeto.class)); + cards.add(new SetCardInfo("Dovin, Hand of Control", 229, Rarity.UNCOMMON, mage.cards.d.DovinHandOfControl.class)); cards.add(new SetCardInfo("Dreadhorde Arcanist", 125, Rarity.RARE, mage.cards.d.DreadhordeArcanist.class)); cards.add(new SetCardInfo("Dreadhorde Butcher", 194, Rarity.RARE, mage.cards.d.DreadhordeButcher.class)); cards.add(new SetCardInfo("Dreadhorde Invasion", 86, Rarity.RARE, mage.cards.d.DreadhordeInvasion.class));