implement [EOE] Sami, Wildcat Captain

This commit is contained in:
Susucre 2025-07-09 21:13:11 +02:00
parent 4f4b77d369
commit a75a95a7f1
3 changed files with 101 additions and 0 deletions

View file

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

View file

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

View file

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