From e8d695d8804a8c5bab6b4261eb5e2fb4297e70c7 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 28 Mar 2024 16:39:41 -0400 Subject: [PATCH] [OTJ] Implement Rattleback Apothecary --- .../mage/cards/r/RattlebackApothecary.java | 85 +++++++++++++++++++ .../mage/sets/OutlawsOfThunderJunction.java | 1 + .../CommittedCrimeTriggeredAbility.java | 1 + 3 files changed, 87 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/r/RattlebackApothecary.java diff --git a/Mage.Sets/src/mage/cards/r/RattlebackApothecary.java b/Mage.Sets/src/mage/cards/r/RattlebackApothecary.java new file mode 100644 index 00000000000..faa601ab198 --- /dev/null +++ b/Mage.Sets/src/mage/cards/r/RattlebackApothecary.java @@ -0,0 +1,85 @@ +package mage.cards.r; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.CommittedCrimeTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.keyword.DeathtouchAbility; +import mage.abilities.keyword.LifelinkAbility; +import mage.abilities.keyword.MenaceAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetControlledCreaturePermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class RattlebackApothecary extends CardImpl { + + public RattlebackApothecary(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); + + this.subtype.add(SubType.GORGON); + this.subtype.add(SubType.WARLOCK); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Deathtouch + this.addAbility(DeathtouchAbility.getInstance()); + + // Whenever you commit a crime, target creature you control gains your choice of menace or lifelink until end of turn. + Ability ability = new CommittedCrimeTriggeredAbility(new RattlebackApothecaryEffect()); + ability.addTarget(new TargetControlledCreaturePermanent()); + this.addAbility(ability); + } + + private RattlebackApothecary(final RattlebackApothecary card) { + super(card); + } + + @Override + public RattlebackApothecary copy() { + return new RattlebackApothecary(this); + } +} + +class RattlebackApothecaryEffect extends OneShotEffect { + + RattlebackApothecaryEffect() { + super(Outcome.Benefit); + staticText = "target creature you control gains your choice of menace or lifelink until end of turn"; + } + + private RattlebackApothecaryEffect(final RattlebackApothecaryEffect effect) { + super(effect); + } + + @Override + public RattlebackApothecaryEffect copy() { + return new RattlebackApothecaryEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player == null) { + return false; + } + Ability ability = player.chooseUse( + outcome, "Choose menace or lifelink", null, + "Menace", "Lifelink", source, game + ) ? new MenaceAbility() : LifelinkAbility.getInstance(); + game.addEffect(new GainAbilityTargetEffect(ability, Duration.EndOfTurn) + .setTargetPointer(getTargetPointer().copy()), source); + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/OutlawsOfThunderJunction.java b/Mage.Sets/src/mage/sets/OutlawsOfThunderJunction.java index c4b8d6902c0..040b6887049 100644 --- a/Mage.Sets/src/mage/sets/OutlawsOfThunderJunction.java +++ b/Mage.Sets/src/mage/sets/OutlawsOfThunderJunction.java @@ -74,6 +74,7 @@ public final class OutlawsOfThunderJunction extends ExpansionSet { cards.add(new SetCardInfo("Plains", 272, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Plan the Heist", 62, Rarity.UNCOMMON, mage.cards.p.PlanTheHeist.class)); cards.add(new SetCardInfo("Rakish Crew", 99, Rarity.UNCOMMON, mage.cards.r.RakishCrew.class)); + cards.add(new SetCardInfo("Rattleback Apothecary", 100, Rarity.UNCOMMON, mage.cards.r.RattlebackApothecary.class)); cards.add(new SetCardInfo("Resilient Roadrunner", 141, Rarity.UNCOMMON, mage.cards.r.ResilientRoadrunner.class)); cards.add(new SetCardInfo("Ruthless Lawbringer", 229, Rarity.UNCOMMON, mage.cards.r.RuthlessLawbringer.class)); cards.add(new SetCardInfo("Scorching Shot", 145, Rarity.UNCOMMON, mage.cards.s.ScorchingShot.class)); diff --git a/Mage/src/main/java/mage/abilities/common/CommittedCrimeTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/CommittedCrimeTriggeredAbility.java index a75c71e26f2..a7cb2c5058f 100644 --- a/Mage/src/main/java/mage/abilities/common/CommittedCrimeTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/CommittedCrimeTriggeredAbility.java @@ -27,6 +27,7 @@ public class CommittedCrimeTriggeredAbility extends TriggeredAbilityImpl { public CommittedCrimeTriggeredAbility(Effect effect, boolean optional) { super(Zone.BATTLEFIELD, effect, optional); + setTriggerPhrase("Whenever you commit a crime, "); } private CommittedCrimeTriggeredAbility(final CommittedCrimeTriggeredAbility ability) {