From fb20ac09986a11ce8615890963b92e1dda3110c6 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Sun, 31 Mar 2019 13:32:34 -0400 Subject: [PATCH] Implemented Dreadhorde Invasion --- .../src/mage/cards/d/DreadhordeInvasion.java | 60 +++++++++++++++++++ Mage.Sets/src/mage/sets/WarOfTheSpark.java | 1 + .../effects/keyword/AmassEffect.java | 4 +- 3 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/d/DreadhordeInvasion.java diff --git a/Mage.Sets/src/mage/cards/d/DreadhordeInvasion.java b/Mage.Sets/src/mage/cards/d/DreadhordeInvasion.java new file mode 100644 index 00000000000..9eaa2322669 --- /dev/null +++ b/Mage.Sets/src/mage/cards/d/DreadhordeInvasion.java @@ -0,0 +1,60 @@ +package mage.cards.d; + +import mage.abilities.Ability; +import mage.abilities.common.AttacksAllTriggeredAbility; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.effects.keyword.AmassEffect; +import mage.abilities.keyword.LifelinkAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.PowerPredicate; +import mage.filter.predicate.permanent.TokenPredicate; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class DreadhordeInvasion extends CardImpl { + + private static final FilterCreaturePermanent filter + = new FilterCreaturePermanent(SubType.ZOMBIE, "a Zombie token you control with power 6 or greater"); + + static { + filter.add(new PowerPredicate(ComparisonType.MORE_THAN, 5)); + filter.add(TokenPredicate.instance); + } + + public DreadhordeInvasion(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}"); + + // At the beginning of your upkeep, you lose 1 life and amass 1. + Ability ability = new BeginningOfUpkeepTriggeredAbility( + new LoseLifeSourceControllerEffect(1), TargetController.YOU, false + ); + ability.addEffect(new AmassEffect(1).concatBy("and")); + this.addAbility(ability); + + // Whenever a Zombie token you control with power 6 or greater attacks, it gains lifelink until end of turn. + this.addAbility(new AttacksAllTriggeredAbility( + new GainAbilityTargetEffect( + LifelinkAbility.getInstance(), Duration.EndOfTurn, + "it gains lifelink until end of turn" + ), false, filter, SetTargetPointer.PERMANENT, + false + )); + } + + private DreadhordeInvasion(final DreadhordeInvasion card) { + super(card); + } + + @Override + public DreadhordeInvasion copy() { + return new DreadhordeInvasion(this); + } +} diff --git a/Mage.Sets/src/mage/sets/WarOfTheSpark.java b/Mage.Sets/src/mage/sets/WarOfTheSpark.java index 44a31ee6325..3457a838728 100644 --- a/Mage.Sets/src/mage/sets/WarOfTheSpark.java +++ b/Mage.Sets/src/mage/sets/WarOfTheSpark.java @@ -24,6 +24,7 @@ public final class WarOfTheSpark extends ExpansionSet { this.maxCardNumberInBooster = 264; cards.add(new SetCardInfo("Ajani's Pridemate", 4, Rarity.UNCOMMON, mage.cards.a.AjanisPridemate.class)); + cards.add(new SetCardInfo("Dreadhorde Invasion", 86, Rarity.RARE, mage.cards.d.DreadhordeInvasion.class)); cards.add(new SetCardInfo("Flux Channeler", 52, Rarity.UNCOMMON, mage.cards.f.FluxChanneler.class)); cards.add(new SetCardInfo("Forest", 262, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Forest", 263, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage/src/main/java/mage/abilities/effects/keyword/AmassEffect.java b/Mage/src/main/java/mage/abilities/effects/keyword/AmassEffect.java index 98d4ea01cb1..f1009287dfb 100644 --- a/Mage/src/main/java/mage/abilities/effects/keyword/AmassEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/keyword/AmassEffect.java @@ -37,7 +37,7 @@ public class AmassEffect extends OneShotEffect { public AmassEffect(int amassNumber) { this(new StaticValue(amassNumber)); - staticText = "Amass " + amassNumber + ". (Put " + CardUtil.numberToText(amassNumber) + + staticText = "amass " + amassNumber + ". (Put " + CardUtil.numberToText(amassNumber) + " +1/+1 counter" + (amassNumber > 1 ? "s" : "") + "on an Army you control. If you don’t control one, " + "create a 0/0 black Zombie Army creature token first.)"; @@ -46,7 +46,7 @@ public class AmassEffect extends OneShotEffect { public AmassEffect(DynamicValue amassNumber) { super(Outcome.BoostCreature); this.amassNumber = amassNumber; - staticText = "Amass X, where X is the number of " + amassNumber.getMessage() + ". (Put X +1/+1 counters" + + staticText = "amass X, where X is the number of " + amassNumber.getMessage() + ". (Put X +1/+1 counters" + "on an Army you control. If you don’t control one, " + "create a 0/0 black Zombie Army creature token first.)"; }