[VOW] Implemented Cipherbound Spirit

This commit is contained in:
Evan Kranzler 2021-11-10 09:26:41 -05:00
parent 23b0dbe425
commit 81428811fe
3 changed files with 126 additions and 0 deletions

View file

@ -0,0 +1,50 @@
package mage.cards.c;
import mage.MageInt;
import mage.abilities.common.CanBlockOnlyFlyingAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.DrawDiscardControllerEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class CipherboundSpirit extends CardImpl {
public CipherboundSpirit(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
this.subtype.add(SubType.SPIRIT);
this.power = new MageInt(3);
this.toughness = new MageInt(2);
this.color.setBlue(true);
this.nightCard = true;
// Flying
this.addAbility(FlyingAbility.getInstance());
// Cipherbound Spirit can block only creatures with flying.
this.addAbility(new CanBlockOnlyFlyingAbility());
// {3}{U}: Draw two cards, then discard a card.
this.addAbility(new SimpleActivatedAbility(
new DrawDiscardControllerEffect(2, 1), new ManaCostsImpl<>("{3}{U}")
));
}
private CipherboundSpirit(final CipherboundSpirit card) {
super(card);
}
@Override
public CipherboundSpirit copy() {
return new CipherboundSpirit(this);
}
}

View file

@ -0,0 +1,74 @@
package mage.cards.s;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.PutCardIntoGraveFromAnywhereAllTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.SourceHasCounterCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.common.LookLibraryAndPickControllerEffect;
import mage.abilities.effects.common.TransformSourceEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.effects.common.counter.RemoveCounterSourceEffect;
import mage.abilities.keyword.TransformAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.StaticFilters;
import java.util.UUID;
/**
* @author TheElk801
*/
public final class SoulcipherBoard extends CardImpl {
private static final Condition condition = new SourceHasCounterCondition(CounterType.OMEN, 0);
public SoulcipherBoard(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{U}");
this.secondSideCardClazz = mage.cards.c.CipherboundSpirit.class;
// Soulcipher Board enters the battlefield with three omen counters on it.
this.addAbility(new EntersBattlefieldAbility(
new AddCountersSourceEffect(CounterType.OMEN.createInstance(3)),
"with three omen counters on it"
));
// {1}{U}, {T}: Look at the top two cards of your library. Put one of them into your graveyard.
Ability ability = new SimpleActivatedAbility(new LookLibraryAndPickControllerEffect(
StaticValue.get(2), false, StaticValue.get(1), StaticFilters.FILTER_CARD,
Zone.LIBRARY, true, false, false, Zone.GRAVEYARD, false
).setText("look at the top two cards of your library. Put one of them into your graveyard"), new ManaCostsImpl<>("{1}{U}"));
ability.addCost(new TapSourceCost());
this.addAbility(ability);
// Whenever a creature card is put into your graveyard from anywhere, remove an omen counter from Soulcipher Board. Then if it has no omen counters on it, transform it.
this.addAbility(new TransformAbility());
ability = new PutCardIntoGraveFromAnywhereAllTriggeredAbility(
new RemoveCounterSourceEffect(CounterType.OMEN.createInstance()),
false, StaticFilters.FILTER_CARD_CREATURE_A, TargetController.YOU
);
ability.addEffect(new ConditionalOneShotEffect(
new TransformSourceEffect(), condition,
"Then if it has no omen counters on it, transform it"
));
this.addAbility(ability);
}
private SoulcipherBoard(final SoulcipherBoard card) {
super(card);
}
@Override
public SoulcipherBoard copy() {
return new SoulcipherBoard(this);
}
}

View file

@ -79,6 +79,7 @@ public final class InnistradCrimsonVow extends ExpansionSet {
cards.add(new SetCardInfo("Change of Fortune", 150, Rarity.RARE, mage.cards.c.ChangeOfFortune.class));
cards.add(new SetCardInfo("Child of the Pack", 234, Rarity.UNCOMMON, mage.cards.c.ChildOfThePack.class));
cards.add(new SetCardInfo("Chill of the Grave", 51, Rarity.COMMON, mage.cards.c.ChillOfTheGrave.class));
cards.add(new SetCardInfo("Cipherbound Spirit", 79, Rarity.UNCOMMON, mage.cards.c.CipherboundSpirit.class));
cards.add(new SetCardInfo("Circle of Confinement", 7, Rarity.UNCOMMON, mage.cards.c.CircleOfConfinement.class));
cards.add(new SetCardInfo("Clever Distraction", 9, Rarity.UNCOMMON, mage.cards.c.CleverDistraction.class));
cards.add(new SetCardInfo("Cloaked Cadet", 192, Rarity.UNCOMMON, mage.cards.c.CloakedCadet.class));
@ -266,6 +267,7 @@ public final class InnistradCrimsonVow extends ExpansionSet {
cards.add(new SetCardInfo("Skywarp Skaab", 78, Rarity.COMMON, mage.cards.s.SkywarpSkaab.class));
cards.add(new SetCardInfo("Snarling Wolf", 219, Rarity.COMMON, mage.cards.s.SnarlingWolf.class));
cards.add(new SetCardInfo("Sorin the Mirthless", 131, Rarity.MYTHIC, mage.cards.s.SorinTheMirthless.class));
cards.add(new SetCardInfo("Soulcipher Board", 79, Rarity.UNCOMMON, mage.cards.s.SoulcipherBoard.class));
cards.add(new SetCardInfo("Spectral Binding", 48, Rarity.COMMON, mage.cards.s.SpectralBinding.class));
cards.add(new SetCardInfo("Spiked Ripsaw", 220, Rarity.UNCOMMON, mage.cards.s.SpikedRipsaw.class));
cards.add(new SetCardInfo("Splendid Reclamation", 221, Rarity.RARE, mage.cards.s.SplendidReclamation.class));