From f53fb229161e5900dbe37df0715da7930534afa2 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Fri, 28 Jun 2024 15:27:30 -0400 Subject: [PATCH] [DSK] Implement Cursed Recording --- .../src/mage/cards/c/CursedRecording.java | 59 +++++++++++++++++++ .../src/mage/sets/DuskmournHouseOfHorror.java | 1 + .../RemoveAllCountersSourceEffect.java | 45 -------------- 3 files changed, 60 insertions(+), 45 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/c/CursedRecording.java delete mode 100644 Mage/src/main/java/mage/abilities/effects/common/counter/RemoveAllCountersSourceEffect.java diff --git a/Mage.Sets/src/mage/cards/c/CursedRecording.java b/Mage.Sets/src/mage/cards/c/CursedRecording.java new file mode 100644 index 00000000000..88940a3b06c --- /dev/null +++ b/Mage.Sets/src/mage/cards/c/CursedRecording.java @@ -0,0 +1,59 @@ +package mage.cards.c; + +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SpellCastControllerTriggeredAbility; +import mage.abilities.common.delayed.CopyNextSpellDelayedTriggeredAbility; +import mage.abilities.condition.Condition; +import mage.abilities.condition.common.SourceHasCounterCondition; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; +import mage.abilities.effects.common.DamageControllerEffect; +import mage.abilities.effects.common.RemoveAllCountersSourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.counters.CounterType; +import mage.filter.StaticFilters; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class CursedRecording extends CardImpl { + + private static final Condition condition = new SourceHasCounterCondition(CounterType.TIME, 7); + + public CursedRecording(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{R}{R}"); + + // Whenever you cast an instant or sorcery spell, put a time counter on Cursed Recording. Then if there are seven or more time counters on it, remove those counters and it deals 20 damage to you. + Ability ability = new SpellCastControllerTriggeredAbility( + new AddCountersSourceEffect(CounterType.TIME.createInstance()), + StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, true + ); + ability.addEffect(new ConditionalOneShotEffect( + new RemoveAllCountersSourceEffect(CounterType.TIME), + condition, "then if there are seven or more time counters on it, " + + "remove those counters and it deals 20 damage to you" + ).addEffect(new DamageControllerEffect(20))); + this.addAbility(ability); + + // {T}: When you next cast an instant or sorcery spell this turn, copy that spell. You may choose new targets for the copy. + this.addAbility(new SimpleActivatedAbility( + new CreateDelayedTriggeredAbilityEffect(new CopyNextSpellDelayedTriggeredAbility()), new TapSourceCost() + )); + } + + private CursedRecording(final CursedRecording card) { + super(card); + } + + @Override + public CursedRecording copy() { + return new CursedRecording(this); + } +} diff --git a/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java b/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java index 6c705ea0a03..fd9e83c21df 100644 --- a/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java +++ b/Mage.Sets/src/mage/sets/DuskmournHouseOfHorror.java @@ -21,6 +21,7 @@ public final class DuskmournHouseOfHorror extends ExpansionSet { this.hasBasicLands = true; this.hasBoosters = false; // temporary + cards.add(new SetCardInfo("Cursed Recording", 131, Rarity.RARE, mage.cards.c.CursedRecording.class)); cards.add(new SetCardInfo("Enduring Tenacity", 95, Rarity.RARE, mage.cards.e.EnduringTenacity.class)); cards.add(new SetCardInfo("Forest", 276, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Island", 273, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage/src/main/java/mage/abilities/effects/common/counter/RemoveAllCountersSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/counter/RemoveAllCountersSourceEffect.java deleted file mode 100644 index 4624f665633..00000000000 --- a/Mage/src/main/java/mage/abilities/effects/common/counter/RemoveAllCountersSourceEffect.java +++ /dev/null @@ -1,45 +0,0 @@ - -package mage.abilities.effects.common.counter; - -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; -import mage.constants.Outcome; -import mage.counters.CounterType; -import mage.game.Game; -import mage.game.permanent.Permanent; - -/** - * - * @author TheElk801 - */ -public class RemoveAllCountersSourceEffect extends OneShotEffect { - - private final CounterType counterType; - - public RemoveAllCountersSourceEffect(CounterType counterType) { - super(Outcome.Neutral); - this.counterType = counterType; - staticText = "remove all " + counterType.getName() + " counters from {this}."; - } - - public RemoveAllCountersSourceEffect(RemoveAllCountersSourceEffect effect) { - super(effect); - this.counterType = effect.counterType; - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent permanent = source.getSourcePermanentIfItStillExists(game); - if (permanent != null) { - int count = permanent.getCounters(game).getCount(counterType); - permanent.removeCounters(counterType.getName(), count, source, game); - return true; - } - return false; - } - - @Override - public RemoveAllCountersSourceEffect copy() { - return new RemoveAllCountersSourceEffect(this); - } -}