From cff3c54979bebf2a40599ac814a0b42ed72e6e62 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Mon, 5 Jul 2021 17:52:34 -0400 Subject: [PATCH] [AFR] Implemented Spike Pit Trap --- Mage.Sets/src/mage/cards/s/SpikePitTrap.java | 60 +++++++++++++++++++ .../src/mage/cards/t/TheDeckOfManyThings.java | 2 +- .../sets/AdventuresInTheForgottenRealms.java | 1 + .../common/RollDieWithResultTableEffect.java | 17 ++++-- 4 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/s/SpikePitTrap.java diff --git a/Mage.Sets/src/mage/cards/s/SpikePitTrap.java b/Mage.Sets/src/mage/cards/s/SpikePitTrap.java new file mode 100644 index 00000000000..ab8dd0c7a33 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SpikePitTrap.java @@ -0,0 +1,60 @@ +package mage.cards.s; + +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.RollDieWithResultTableEffect; +import mage.abilities.keyword.FlashAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.game.permanent.token.TreasureToken; +import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class SpikePitTrap extends CardImpl { + + public SpikePitTrap(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}"); + + // Flash + this.addAbility(FlashAbility.getInstance()); + + // {5}, {T}, Sacrifice Spike Pit Trap: Choose target creature, then roll a d20. + RollDieWithResultTableEffect effect = new RollDieWithResultTableEffect( + 20, "choose target creature, then roll a d20" + ); + Ability ability = new SimpleActivatedAbility(effect, new GenericManaCost(5)); + ability.addCost(new TapSourceCost()); + ability.addCost(new SacrificeSourceCost()); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + + // 1-9 | Spiked Pit Trap deals 5 damage to that creature. + effect.addTableEntry(1, 9, new DamageTargetEffect( + 5, true, "that creature" + )); + + // 10-20 | Spike Pit Trap deals 5 damage to that creature. Create a Treasure token. + effect.addTableEntry(1, 9, new DamageTargetEffect( + 5, true, "that creature." + ), new CreateTokenEffect(new TreasureToken())); + } + + private SpikePitTrap(final SpikePitTrap card) { + super(card); + } + + @Override + public SpikePitTrap copy() { + return new SpikePitTrap(this); + } +} diff --git a/Mage.Sets/src/mage/cards/t/TheDeckOfManyThings.java b/Mage.Sets/src/mage/cards/t/TheDeckOfManyThings.java index 5a7ab2f11ac..d5bbc7fe1b0 100644 --- a/Mage.Sets/src/mage/cards/t/TheDeckOfManyThings.java +++ b/Mage.Sets/src/mage/cards/t/TheDeckOfManyThings.java @@ -59,7 +59,7 @@ public final class TheDeckOfManyThings extends CardImpl { class TheDeckOfManyThingsEffect extends RollDieWithResultTableEffect { TheDeckOfManyThingsEffect() { - super(20, "roll a d20 and subtract the number of cards in your hand. If the result is 0 or less, discard your hand."); + super(20, "roll a d20 and subtract the number of cards in your hand. If the result is 0 or less, discard your hand"); this.addTableEntry(1, 9, new TheDeckOfManyThingsRandomEffect()); this.addTableEntry(10, 19, new DrawCardSourceControllerEffect(2)); this.addTableEntry(20, 20, new TheDeckOfManyThingsReturnEffect()); diff --git a/Mage.Sets/src/mage/sets/AdventuresInTheForgottenRealms.java b/Mage.Sets/src/mage/sets/AdventuresInTheForgottenRealms.java index d205cf8e99b..bb0793ed3bb 100644 --- a/Mage.Sets/src/mage/sets/AdventuresInTheForgottenRealms.java +++ b/Mage.Sets/src/mage/sets/AdventuresInTheForgottenRealms.java @@ -136,6 +136,7 @@ public final class AdventuresInTheForgottenRealms extends ExpansionSet { cards.add(new SetCardInfo("Shocking Grasp", 72, Rarity.COMMON, mage.cards.s.ShockingGrasp.class)); cards.add(new SetCardInfo("Shortcut Seeker", 73, Rarity.COMMON, mage.cards.s.ShortcutSeeker.class)); cards.add(new SetCardInfo("Soulknife Spy", 75, Rarity.COMMON, mage.cards.s.SoulknifeSpy.class)); + cards.add(new SetCardInfo("Spike Pit Trap", 251, Rarity.COMMON, mage.cards.s.SpikePitTrap.class)); cards.add(new SetCardInfo("Swamp", 270, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Swarming Goblins", 162, Rarity.COMMON, mage.cards.s.SwarmingGoblins.class)); cards.add(new SetCardInfo("Sylvan Shepherd", 206, Rarity.COMMON, mage.cards.s.SylvanShepherd.class)); diff --git a/Mage/src/main/java/mage/abilities/effects/common/RollDieWithResultTableEffect.java b/Mage/src/main/java/mage/abilities/effects/common/RollDieWithResultTableEffect.java index 238055810a9..91ae661d6db 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/RollDieWithResultTableEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/RollDieWithResultTableEffect.java @@ -9,6 +9,7 @@ import mage.abilities.effects.OneShotEffect; import mage.constants.Outcome; import mage.game.Game; import mage.players.Player; +import mage.target.targetpointer.TargetPointer; import mage.util.CardUtil; import java.io.Serializable; @@ -29,7 +30,7 @@ public class RollDieWithResultTableEffect extends OneShotEffect { } public RollDieWithResultTableEffect(int sides) { - this(sides, null); + this(sides, "roll a d" + sides); } public RollDieWithResultTableEffect(int sides, String prefixText) { @@ -75,11 +76,7 @@ public class RollDieWithResultTableEffect extends OneShotEffect { @Override public String getText(Mode mode) { StringBuilder sb = new StringBuilder(); - if (prefixText != null) { - sb.append(prefixText); - } else { - sb.append("roll a d").append(sides).append('.'); - } + sb.append(prefixText).append('.'); for (TableEntry tableEntry : this.resultsTable) { sb.append("
"); if (tableEntry.min == tableEntry.max) { @@ -135,5 +132,13 @@ public class RollDieWithResultTableEffect extends OneShotEffect { public void addTableEntry(int min, int max, Effect... effects) { this.resultsTable.add(new TableEntry(min, max, effects)); } + + @Override + public Effect setTargetPointer(TargetPointer targetPointer) { + for (TableEntry tableEntry : resultsTable) { + tableEntry.effects.setTargetPointer(targetPointer); + } + return super.setTargetPointer(targetPointer); + } }