diff --git a/Mage.Sets/src/mage/cards/s/SamiWildcatCaptain.java b/Mage.Sets/src/mage/cards/s/SamiWildcatCaptain.java new file mode 100644 index 00000000000..d5a9e61d041 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SamiWildcatCaptain.java @@ -0,0 +1,56 @@ +package mage.cards.s; + +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continuous.GainAbilityControlledSpellsEffect; +import mage.abilities.keyword.AffinityForArtifactsAbility; +import mage.abilities.keyword.DoubleStrikeAbility; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.filter.StaticFilters; +import mage.filter.common.FilterNonlandCard; + +import java.util.UUID; + +/** + * @author Susucr + */ +public final class SamiWildcatCaptain extends CardImpl { + + private static final FilterNonlandCard filter = new FilterNonlandCard("Spells you cast"); + + public SamiWildcatCaptain(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}{W}"); + + this.supertype.add(SuperType.LEGENDARY); + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.ARTIFICER); + this.subtype.add(SubType.ROGUE); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Double strike + this.addAbility(DoubleStrikeAbility.getInstance()); + + // Vigilance + this.addAbility(VigilanceAbility.getInstance()); + + // Spells you cast have affinity for artifacts. + this.addAbility(new SimpleStaticAbility(new GainAbilityControlledSpellsEffect( + new AffinityForArtifactsAbility(), StaticFilters.FILTER_CARD_NON_LAND + ))); + } + + private SamiWildcatCaptain(final SamiWildcatCaptain card) { + super(card); + } + + @Override + public SamiWildcatCaptain copy() { + return new SamiWildcatCaptain(this); + } +} diff --git a/Mage.Sets/src/mage/sets/EdgeOfEternities.java b/Mage.Sets/src/mage/sets/EdgeOfEternities.java index fe9c5bf7569..52f2ef4e2df 100644 --- a/Mage.Sets/src/mage/sets/EdgeOfEternities.java +++ b/Mage.Sets/src/mage/sets/EdgeOfEternities.java @@ -110,6 +110,8 @@ public final class EdgeOfEternities extends ExpansionSet { cards.add(new SetCardInfo("Sacred Foundry", 282, Rarity.RARE, mage.cards.s.SacredFoundry.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sacred Foundry", 377, Rarity.RARE, mage.cards.s.SacredFoundry.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sami, Ship's Engineer", 225, Rarity.UNCOMMON, mage.cards.s.SamiShipsEngineer.class)); + cards.add(new SetCardInfo("Sami, Wildcat Captain", 226, Rarity.MYTHIC, mage.cards.s.SamiWildcatCaptain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sami, Wildcat Captain", 301, Rarity.MYTHIC, mage.cards.s.SamiWildcatCaptain.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Shattered Wings", 206, Rarity.COMMON, mage.cards.s.ShatteredWings.class)); cards.add(new SetCardInfo("Singularity Rupture", 228, Rarity.RARE, mage.cards.s.SingularityRupture.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Singularity Rupture", 350, Rarity.RARE, mage.cards.s.SingularityRupture.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/eoe/SamiWildcatCaptainTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/eoe/SamiWildcatCaptainTest.java new file mode 100644 index 00000000000..6649ea3e9eb --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/eoe/SamiWildcatCaptainTest.java @@ -0,0 +1,43 @@ +package org.mage.test.cards.single.eoe; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * @author Susucr + */ +public class SamiWildcatCaptainTest extends CardTestPlayerBase { + + /** + * {@link mage.cards.s.SamiWildcatCaptain Sami, Wildcat Captain} {4}{R}{W} + * Legendary Creature — Human Artificer Rogue + * Double strike, vigilance + * Spells you cast have affinity for artifacts. (They cost {1} less to cast for each artifact you control.) + * 4/4 + */ + private static final String sami = "Sami, Wildcat Captain"; + + @Test + public void test_Simple() { + addCard(Zone.BATTLEFIELD, playerA, sami); + addCard(Zone.BATTLEFIELD, playerA, "Chrome Steed"); // Artifact + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); + addCard(Zone.HAND, playerA, "Mountain", 1); + addCard(Zone.HAND, playerA, "Arcane Encyclopedia"); // {3} Artifact + addCard(Zone.HAND, playerA, "Fearless Halberdier"); // {2}{R} + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Arcane Encyclopedia", true); + playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mountain"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Fearless Halberdier"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + setStrictChooseMode(true); + execute(); + + assertTappedCount("Mountain", true, 3); + assertPermanentCount(playerA, "Arcane Encyclopedia", 1); + assertPermanentCount(playerA, "Fearless Halberdier", 1); + } +}