diff --git a/Mage.Sets/src/mage/cards/o/OverlordOfTheFloodpits.java b/Mage.Sets/src/mage/cards/o/OverlordOfTheFloodpits.java new file mode 100644 index 00000000000..ac54cf2aad6 --- /dev/null +++ b/Mage.Sets/src/mage/cards/o/OverlordOfTheFloodpits.java @@ -0,0 +1,46 @@ +package mage.cards.o; + +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldOrAttacksSourceTriggeredAbility; +import mage.abilities.effects.common.DrawDiscardControllerEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.ImpendingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class OverlordOfTheFloodpits extends CardImpl { + + public OverlordOfTheFloodpits(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{3}{U}{U}"); + + this.subtype.add(SubType.AVATAR); + this.subtype.add(SubType.HORROR); + this.power = new MageInt(5); + this.toughness = new MageInt(3); + + // Impending 4--{1}{U}{U} + this.addAbility(new ImpendingAbility("{1}{U}{U}")); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Whenever Overlord of the Floodpits enters or attacks, draw two cards, then discard a card. + this.addAbility(new EntersBattlefieldOrAttacksSourceTriggeredAbility(new DrawDiscardControllerEffect(2, 1))); + } + + private OverlordOfTheFloodpits(final OverlordOfTheFloodpits card) { + super(card); + } + + @Override + public OverlordOfTheFloodpits copy() { + return new OverlordOfTheFloodpits(this); + } +} diff --git a/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java b/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java index 3c0ffc7f76f..9fd9e6eba6a 100644 --- a/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java +++ b/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java @@ -55,6 +55,7 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { cards.add(new SetCardInfo("Mountain", 275, Rarity.LAND, mage.cards.basiclands.Mountain.class, FULL_ART_BFZ_VARIOUS)); cards.add(new SetCardInfo("Murky Sewer", 263, Rarity.COMMON, mage.cards.m.MurkySewer.class)); cards.add(new SetCardInfo("Neglected Manor", 264, Rarity.COMMON, mage.cards.n.NeglectedManor.class)); + cards.add(new SetCardInfo("Overlord of the Floodpits", 68, Rarity.MYTHIC, mage.cards.o.OverlordOfTheFloodpits.class)); cards.add(new SetCardInfo("Patched Plaything", 24, Rarity.UNCOMMON, mage.cards.p.PatchedPlaything.class)); cards.add(new SetCardInfo("Patchwork Beastie", 195, Rarity.UNCOMMON, mage.cards.p.PatchworkBeastie.class)); cards.add(new SetCardInfo("Peculiar Lighthouse", 265, Rarity.COMMON, mage.cards.p.PeculiarLighthouse.class)); @@ -88,5 +89,7 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { cards.add(new SetCardInfo("Veteran Survivor", 40, Rarity.UNCOMMON, mage.cards.v.VeteranSurvivor.class)); cards.add(new SetCardInfo("Winter, Misanthropic Guide", 240, Rarity.RARE, mage.cards.w.WinterMisanthropicGuide.class)); cards.add(new SetCardInfo("Zimone, All-Questioning", 241, Rarity.RARE, mage.cards.z.ZimoneAllQuestioning.class)); + + cards.removeIf(setCardInfo -> setCardInfo.getName().startsWith("Overlord")); } } diff --git a/Mage/src/main/java/mage/abilities/keyword/ImpendingAbility.java b/Mage/src/main/java/mage/abilities/keyword/ImpendingAbility.java new file mode 100644 index 00000000000..a6594965d07 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/keyword/ImpendingAbility.java @@ -0,0 +1,46 @@ +package mage.abilities.keyword; + +import mage.abilities.Ability; +import mage.abilities.costs.AlternativeSourceCostsImpl; +import mage.game.Game; +import mage.util.CardUtil; + +/** + * TODO: Implement this + * + * @author TheElk801 + */ +public class ImpendingAbility extends AlternativeSourceCostsImpl { + + private static final String IMPENDING_KEYWORD = "Impending"; + private static final String IMPENDING_REMINDER = "If you cast this spell for its impending cost, " + + "it enters with %s time counters and isn't a creature until the last is removed. " + + "At the beginning of your end step, remove a time counter from it."; + + public ImpendingAbility(String manaString) { + this(manaString, 4); + } + + public ImpendingAbility(String manaString, int amount) { + super(IMPENDING_KEYWORD + ' ' + amount, String.format(IMPENDING_REMINDER, CardUtil.numberToText(amount)), manaString); + this.setRuleAtTheTop(true); + } + + private ImpendingAbility(final ImpendingAbility ability) { + super(ability); + } + + @Override + public ImpendingAbility copy() { + return new ImpendingAbility(this); + } + + @Override + public boolean isAvailable(Ability source, Game game) { + return true; + } + + public static String getActivationKey() { + return getActivationKey(IMPENDING_KEYWORD); + } +} diff --git a/Utils/keywords.txt b/Utils/keywords.txt index bf7cf91f042..a0fa2e2d0ae 100644 --- a/Utils/keywords.txt +++ b/Utils/keywords.txt @@ -65,6 +65,7 @@ Gift|card| Haste|instance| Hexproof|instance| Hideaway|number| +Impending|manaString| Improvise|new| Indestructible|instance| Infect|instance|