[AFR] Implemented Spike Pit Trap

This commit is contained in:
Evan Kranzler 2021-07-05 17:52:34 -04:00
parent 5b1a38b426
commit cff3c54979
4 changed files with 73 additions and 7 deletions

View file

@ -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);
}
}

View file

@ -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());

View file

@ -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));

View file

@ -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("<br>");
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);
}
}