From 291f88b1f6bd79bef4939829166614f7b659b6f3 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Thu, 25 Jan 2024 20:50:47 -0500 Subject: [PATCH] [MKM] Implement Absolving Lammasu --- .../src/mage/cards/a/AbsolvingLammasu.java | 86 +++++++++++++++++++ .../src/mage/sets/MurdersAtKarlovManor.java | 1 + .../effects/common/SuspectTargetEffect.java | 48 +++++++++++ 3 files changed, 135 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/a/AbsolvingLammasu.java create mode 100644 Mage/src/main/java/mage/abilities/effects/common/SuspectTargetEffect.java diff --git a/Mage.Sets/src/mage/cards/a/AbsolvingLammasu.java b/Mage.Sets/src/mage/cards/a/AbsolvingLammasu.java new file mode 100644 index 00000000000..1ef9094f4ec --- /dev/null +++ b/Mage.Sets/src/mage/cards/a/AbsolvingLammasu.java @@ -0,0 +1,86 @@ +package mage.cards.a; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DiesSourceTriggeredAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.effects.common.SuspectTargetEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.common.TargetOpponentsCreaturePermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class AbsolvingLammasu extends CardImpl { + + public AbsolvingLammasu(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{W}"); + + this.subtype.add(SubType.LAMMASU); + this.power = new MageInt(4); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // When Absolving Lammasu enters the battlefield, all suspected creatures are no longer suspected. + this.addAbility(new EntersBattlefieldTriggeredAbility(new AbsolvingLammasuEffect())); + + // When Absolving Lammasu dies, you gain 3 life and suspect up to one target creature an opponent controls. + Ability ability = new DiesSourceTriggeredAbility(new GainLifeEffect(3)); + ability.addEffect(new SuspectTargetEffect().concatBy("and")); + ability.addTarget(new TargetOpponentsCreaturePermanent(0, 1)); + this.addAbility(ability); + } + + private AbsolvingLammasu(final AbsolvingLammasu card) { + super(card); + } + + @Override + public AbsolvingLammasu copy() { + return new AbsolvingLammasu(this); + } +} + +class AbsolvingLammasuEffect extends OneShotEffect { + + AbsolvingLammasuEffect() { + super(Outcome.Benefit); + staticText = "all suspected creatures are no longer suspected"; + } + + private AbsolvingLammasuEffect(final AbsolvingLammasuEffect effect) { + super(effect); + } + + @Override + public AbsolvingLammasuEffect copy() { + return new AbsolvingLammasuEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + for (Permanent permanent : game.getBattlefield().getActivePermanents( + StaticFilters.FILTER_PERMANENT_CREATURE, + source.getControllerId(), source, game + )) { + if (permanent.isSuspected()) { + permanent.setSuspected(false, game, source); + } + } + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/MurdersAtKarlovManor.java b/Mage.Sets/src/mage/sets/MurdersAtKarlovManor.java index 883ab07b2a3..81a970c9a84 100644 --- a/Mage.Sets/src/mage/sets/MurdersAtKarlovManor.java +++ b/Mage.Sets/src/mage/sets/MurdersAtKarlovManor.java @@ -26,6 +26,7 @@ public final class MurdersAtKarlovManor extends ExpansionSet { this.hasBasicLands = true; this.hasBoosters = false; // temporary + cards.add(new SetCardInfo("Absolving Lammasu", 2, Rarity.UNCOMMON, mage.cards.a.AbsolvingLammasu.class)); cards.add(new SetCardInfo("Agrus Kos, Spirit of Justice", 184, Rarity.MYTHIC, mage.cards.a.AgrusKosSpiritOfJustice.class)); cards.add(new SetCardInfo("Aftermath Analyst", 148, Rarity.UNCOMMON, mage.cards.a.AftermathAnalyst.class)); cards.add(new SetCardInfo("Airtight Alibi", 149, Rarity.COMMON, mage.cards.a.AirtightAlibi.class)); diff --git a/Mage/src/main/java/mage/abilities/effects/common/SuspectTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/SuspectTargetEffect.java new file mode 100644 index 00000000000..5cfd59391e3 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/effects/common/SuspectTargetEffect.java @@ -0,0 +1,48 @@ +package mage.abilities.effects.common; + +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; +import mage.game.Game; +import mage.game.permanent.Permanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public class SuspectTargetEffect extends OneShotEffect { + + public SuspectTargetEffect() { + super(Outcome.Benefit); + } + + private SuspectTargetEffect(final SuspectTargetEffect effect) { + super(effect); + } + + @Override + public SuspectTargetEffect copy() { + return new SuspectTargetEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + for (UUID targetId : getTargetPointer().getTargets(game, source)) { + Permanent permanent = game.getPermanent(targetId); + if (permanent != null) { + permanent.setSuspected(true, game, source); + } + } + return true; + } + + @Override + public String getText(Mode mode) { + if (staticText != null && !staticText.isEmpty()) { + return staticText; + } + return "suspect " + getTargetPointer().describeTargets(mode.getTargets(), "that creature"); + } +}