From c1919a15dab7eaad5658c8d100f75cc6b348121d Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 6 Apr 2023 09:21:58 -0400 Subject: [PATCH] [MOM] Implement Herbology Instructor / Malady Invoker --- .../src/mage/cards/h/HerbologyInstructor.java | 47 ++++++++++++++++ Mage.Sets/src/mage/cards/m/MaladyInvoker.java | 55 +++++++++++++++++++ .../src/mage/sets/MarchOfTheMachine.java | 2 + 3 files changed, 104 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/h/HerbologyInstructor.java create mode 100644 Mage.Sets/src/mage/cards/m/MaladyInvoker.java diff --git a/Mage.Sets/src/mage/cards/h/HerbologyInstructor.java b/Mage.Sets/src/mage/cards/h/HerbologyInstructor.java new file mode 100644 index 00000000000..826ab7f6688 --- /dev/null +++ b/Mage.Sets/src/mage/cards/h/HerbologyInstructor.java @@ -0,0 +1,47 @@ +package mage.cards.h; + +import mage.MageInt; +import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.effects.common.TransformSourceEffect; +import mage.abilities.keyword.TransformAbility; +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 HerbologyInstructor extends CardImpl { + + public HerbologyInstructor(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); + + this.subtype.add(SubType.TREEFOLK); + this.subtype.add(SubType.DRUID); + this.power = new MageInt(1); + this.toughness = new MageInt(3); + this.secondSideCardClazz = mage.cards.m.MaladyInvoker.class; + + // When Herbology Instructor enters the battlefield, you gain 3 life. + this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(3))); + + // {6}{B/P}: Transform Herbology Instructor. Activate only as a sorcery. + this.addAbility(new TransformAbility()); + this.addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{6}{B/P}"))); + } + + private HerbologyInstructor(final HerbologyInstructor card) { + super(card); + } + + @Override + public HerbologyInstructor copy() { + return new HerbologyInstructor(this); + } +} diff --git a/Mage.Sets/src/mage/cards/m/MaladyInvoker.java b/Mage.Sets/src/mage/cards/m/MaladyInvoker.java new file mode 100644 index 00000000000..d8fbb4f0616 --- /dev/null +++ b/Mage.Sets/src/mage/cards/m/MaladyInvoker.java @@ -0,0 +1,55 @@ +package mage.cards.m; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.TransformIntoSourceTriggeredAbility; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.SignInversionDynamicValue; +import mage.abilities.dynamicvalue.common.SourcePermanentPowerCount; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.target.common.TargetOpponentsCreaturePermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class MaladyInvoker extends CardImpl { + + private static final DynamicValue xValue + = new SignInversionDynamicValue(new SourcePermanentPowerCount(false)); + + public MaladyInvoker(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); + + this.subtype.add(SubType.PHYREXIAN); + this.subtype.add(SubType.TREEFOLK); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + this.color.setBlack(true); + this.color.setGreen(true); + this.nightCard = true; + + // When this creature transforms into Malady Invoker, target creature an opponent controls gets -0/-X until end of turn, where X is Malady Invoker's power. + Ability ability = new TransformIntoSourceTriggeredAbility(new BoostTargetEffect( + StaticValue.get(0), xValue, Duration.EndOfTurn + ).setText("target creature an opponent controls gets -0/-X until end of turn, where X is {this}'s power")); + ability.addTarget(new TargetOpponentsCreaturePermanent()); + this.addAbility(ability); + } + + private MaladyInvoker(final MaladyInvoker card) { + super(card); + } + + @Override + public MaladyInvoker copy() { + return new MaladyInvoker(this); + } +} diff --git a/Mage.Sets/src/mage/sets/MarchOfTheMachine.java b/Mage.Sets/src/mage/sets/MarchOfTheMachine.java index a34f610ae3c..1900ed4af9c 100644 --- a/Mage.Sets/src/mage/sets/MarchOfTheMachine.java +++ b/Mage.Sets/src/mage/sets/MarchOfTheMachine.java @@ -98,6 +98,7 @@ public final class MarchOfTheMachine extends ExpansionSet { cards.add(new SetCardInfo("Harried Artisan", 143, Rarity.UNCOMMON, mage.cards.h.HarriedArtisan.class)); cards.add(new SetCardInfo("Heliod, the Radiant Dawn", 17, Rarity.RARE, mage.cards.h.HeliodTheRadiantDawn.class)); cards.add(new SetCardInfo("Heliod, the Warped Eclipse", 17, Rarity.RARE, mage.cards.h.HeliodTheWarpedEclipse.class)); + cards.add(new SetCardInfo("Herbology Instructor", 189, Rarity.UNCOMMON, mage.cards.h.HerbologyInstructor.class)); cards.add(new SetCardInfo("Ichor Drinker", 111, Rarity.COMMON, mage.cards.i.IchorDrinker.class)); cards.add(new SetCardInfo("Infected Defector", 18, Rarity.COMMON, mage.cards.i.InfectedDefector.class)); cards.add(new SetCardInfo("Injector Crocodile", 329, Rarity.COMMON, mage.cards.i.InjectorCrocodile.class)); @@ -116,6 +117,7 @@ public final class MarchOfTheMachine extends ExpansionSet { cards.add(new SetCardInfo("Kor Halberd", 27, Rarity.COMMON, mage.cards.k.KorHalberd.class)); cards.add(new SetCardInfo("Kroxa and Kunoros", 245, Rarity.MYTHIC, mage.cards.k.KroxaAndKunoros.class)); cards.add(new SetCardInfo("Lithomantic Barrage", 152, Rarity.UNCOMMON, mage.cards.l.LithomanticBarrage.class)); + cards.add(new SetCardInfo("Malady Invoker", 189, Rarity.UNCOMMON, mage.cards.m.MaladyInvoker.class)); cards.add(new SetCardInfo("Marauding Dreadship", 153, Rarity.COMMON, mage.cards.m.MaraudingDreadship.class)); cards.add(new SetCardInfo("Marshal of Zhalfir", 246, Rarity.UNCOMMON, mage.cards.m.MarshalOfZhalfir.class)); cards.add(new SetCardInfo("Meeting of Minds", 66, Rarity.COMMON, mage.cards.m.MeetingOfMinds.class));