From fc51543bab40656148e972b4a68959ec32ce7075 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Sat, 4 Nov 2023 14:28:52 -0400 Subject: [PATCH] [LCI] Implement Visage of Dread / Dread Osseosaur --- .../src/mage/cards/d/DreadOsseosaur.java | 47 +++++++++++++++++++ Mage.Sets/src/mage/cards/v/VisageOfDread.java | 46 ++++++++++++++++++ .../src/mage/sets/TheLostCavernsOfIxalan.java | 2 + 3 files changed, 95 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/d/DreadOsseosaur.java create mode 100644 Mage.Sets/src/mage/cards/v/VisageOfDread.java diff --git a/Mage.Sets/src/mage/cards/d/DreadOsseosaur.java b/Mage.Sets/src/mage/cards/d/DreadOsseosaur.java new file mode 100644 index 00000000000..0eba99659dd --- /dev/null +++ b/Mage.Sets/src/mage/cards/d/DreadOsseosaur.java @@ -0,0 +1,47 @@ +package mage.cards.d; + +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldOrAttacksSourceTriggeredAbility; +import mage.abilities.effects.common.MillCardsControllerEffect; +import mage.abilities.keyword.MenaceAbility; +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 DreadOsseosaur extends CardImpl { + + public DreadOsseosaur(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); + + this.subtype.add(SubType.DINOSAUR); + this.subtype.add(SubType.SKELETON); + this.subtype.add(SubType.HORROR); + this.power = new MageInt(5); + this.toughness = new MageInt(4); + this.nightCard = true; + this.color.setBlack(true); + + // Menace + this.addAbility(new MenaceAbility()); + + // Whenever Dread Osseosaur enters the battlefield or attacks, you may mill two cards. + this.addAbility(new EntersBattlefieldOrAttacksSourceTriggeredAbility( + new MillCardsControllerEffect(2), true + )); + } + + private DreadOsseosaur(final DreadOsseosaur card) { + super(card); + } + + @Override + public DreadOsseosaur copy() { + return new DreadOsseosaur(this); + } +} diff --git a/Mage.Sets/src/mage/cards/v/VisageOfDread.java b/Mage.Sets/src/mage/cards/v/VisageOfDread.java new file mode 100644 index 00000000000..461372f84cf --- /dev/null +++ b/Mage.Sets/src/mage/cards/v/VisageOfDread.java @@ -0,0 +1,46 @@ +package mage.cards.v; + +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetEffect; +import mage.abilities.keyword.CraftAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.filter.StaticFilters; +import mage.target.common.TargetOpponent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class VisageOfDread extends CardImpl { + + public VisageOfDread(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{B}"); + this.secondSideCardClazz = mage.cards.d.DreadOsseosaur.class; + + // When Visage of Dread enters the battlefield, target opponent reveals their hand. You choose an artifact or creature card from it. That player discards that card. + Ability ability = new EntersBattlefieldTriggeredAbility( + new DiscardCardYouChooseTargetEffect(StaticFilters.FILTER_CARD_ARTIFACT_OR_CREATURE) + ); + ability.addTarget(new TargetOpponent()); + this.addAbility(ability); + + // Craft with two creatures {5}{B} + this.addAbility(new CraftAbility( + "{5}{B}", "creatures", "other creatures you control and/or " + + "creature cards in your graveyard", 2, 2, CardType.CREATURE.getPredicate() + )); + } + + private VisageOfDread(final VisageOfDread card) { + super(card); + } + + @Override + public VisageOfDread copy() { + return new VisageOfDread(this); + } +} diff --git a/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java b/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java index 92a0084a851..734989706e5 100644 --- a/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java +++ b/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java @@ -97,6 +97,7 @@ public final class TheLostCavernsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Dire Flail", 145, Rarity.RARE, mage.cards.d.DireFlail.class)); cards.add(new SetCardInfo("Disruptor Wanderglyph", 253, Rarity.COMMON, mage.cards.d.DisruptorWanderglyph.class)); cards.add(new SetCardInfo("Dowsing Device", 146, Rarity.UNCOMMON, mage.cards.d.DowsingDevice.class)); + cards.add(new SetCardInfo("Dread Osseosaur", 129, Rarity.UNCOMMON, mage.cards.d.DreadOsseosaur.class)); cards.add(new SetCardInfo("Dreadmaw's Ire", 147, Rarity.UNCOMMON, mage.cards.d.DreadmawsIre.class)); cards.add(new SetCardInfo("Dusk Rose Reliquary", 10, Rarity.UNCOMMON, mage.cards.d.DuskRoseReliquary.class)); cards.add(new SetCardInfo("Earthshaker Dreadmaw", 183, Rarity.UNCOMMON, mage.cards.e.EarthshakerDreadmaw.class)); @@ -293,6 +294,7 @@ public final class TheLostCavernsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Uchbenbak, the Great Mistake", 242, Rarity.UNCOMMON, mage.cards.u.UchbenbakTheGreatMistake.class)); cards.add(new SetCardInfo("Unlucky Drop", 82, Rarity.COMMON, mage.cards.u.UnluckyDrop.class)); cards.add(new SetCardInfo("Vanguard of the Rose", 42, Rarity.UNCOMMON, mage.cards.v.VanguardOfTheRose.class)); + cards.add(new SetCardInfo("Visage of Dread", 129, Rarity.UNCOMMON, mage.cards.v.VisageOfDread.class)); cards.add(new SetCardInfo("Vito's Inquisitor", 130, Rarity.COMMON, mage.cards.v.VitosInquisitor.class)); cards.add(new SetCardInfo("Vito, Fanatic of Aclazotz", 243, Rarity.MYTHIC, mage.cards.v.VitoFanaticOfAclazotz.class)); cards.add(new SetCardInfo("Volatile Fault", 286, Rarity.UNCOMMON, mage.cards.v.VolatileFault.class));