Merge pull request #9720 from PurpleCrowbar/ashnod-flesh-mechanist

[BRO] Implement Ashnod, Flesh Mechanist
This commit is contained in:
Daniel Bomar 2022-11-02 21:51:39 -05:00 committed by GitHub
commit 7af7654c80
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 125 additions and 112 deletions

View file

@ -18,9 +18,7 @@ import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
import java.util.UUID; import java.util.UUID;
@ -30,13 +28,6 @@ import java.util.UUID;
*/ */
public final class AhnCropInvader extends CardImpl { public final class AhnCropInvader extends CardImpl {
private static final FilterControlledPermanent filter
= new FilterControlledCreaturePermanent("another creature");
static {
filter.add(AnotherPredicate.instance);
}
public AhnCropInvader(UUID ownerId, CardSetInfo setInfo) { public AhnCropInvader(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
@ -63,7 +54,7 @@ public final class AhnCropInvader extends CardImpl {
Ability ability = new SimpleActivatedAbility( Ability ability = new SimpleActivatedAbility(
new BoostSourceEffect(2, 0, Duration.EndOfTurn), new GenericManaCost(1) new BoostSourceEffect(2, 0, Duration.EndOfTurn), new GenericManaCost(1)
); );
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter))); ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -12,8 +12,7 @@ import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
/** /**
@ -22,12 +21,6 @@ import mage.target.common.TargetControlledPermanent;
*/ */
public final class ApocalypseDemon extends CardImpl { public final class ApocalypseDemon extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another creature");
static {
filter.add(AnotherPredicate.instance);
}
public ApocalypseDemon(UUID ownerId, CardSetInfo cardSetInfo) { public ApocalypseDemon(UUID ownerId, CardSetInfo cardSetInfo) {
super(ownerId, cardSetInfo, new CardType[]{CardType.CREATURE}, "{4}{B}{B}"); super(ownerId, cardSetInfo, new CardType[]{CardType.CREATURE}, "{4}{B}{B}");
subtype.add(SubType.DEMON); subtype.add(SubType.DEMON);
@ -39,7 +32,7 @@ public final class ApocalypseDemon extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetBasePowerToughnessSourceEffect(new CardsInControllerGraveyardCount(), Duration.EndOfGame))); this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetBasePowerToughnessSourceEffect(new CardsInControllerGraveyardCount(), Duration.EndOfGame)));
// At the beginning of your upkeep, tap Apocalypse Demon unless you sacrifice another creature. // At the beginning of your upkeep, tap Apocalypse Demon unless you sacrifice another creature.
TapSourceUnlessPaysEffect tapEffect = new TapSourceUnlessPaysEffect(new SacrificeTargetCost(new TargetControlledPermanent(filter))); TapSourceUnlessPaysEffect tapEffect = new TapSourceUnlessPaysEffect(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)));
tapEffect.setText("tap {this} unless you sacrifice another creature."); tapEffect.setText("tap {this} unless you sacrifice another creature.");
this.addAbility(new BeginningOfUpkeepTriggeredAbility(tapEffect, TargetController.YOU, false)); this.addAbility(new BeginningOfUpkeepTriggeredAbility(tapEffect, TargetController.YOU, false));
} }

View file

@ -0,0 +1,66 @@
package mage.cards.a;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.ExileFromGraveCost;
import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.keyword.DeathtouchAbility;
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.game.permanent.token.AshnodZombieToken;
import mage.game.permanent.token.PowerstoneToken;
import mage.target.common.TargetCardInYourGraveyard;
import mage.target.common.TargetControlledPermanent;
import java.util.UUID;
/**
* @author PurpleCrowbar
*/
public final class AshnodFleshMechanist extends CardImpl {
public AshnodFleshMechanist(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}");
this.addSuperType(SuperType.LEGENDARY);
this.subtype.add(SubType.HUMAN, SubType.ARTIFICER);
this.power = new MageInt(1);
this.toughness = new MageInt(1);
// Deathtouch
this.addAbility(DeathtouchAbility.getInstance());
// Whenever Ashnod, Flesh Mechanist attacks, you may sacrifice another creature. If you do, create a tapped Powerstone token.
this.addAbility(new AttacksTriggeredAbility(
new DoIfCostPaid(
new CreateTokenEffect(
new PowerstoneToken(), 1, true, false
), new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE))
), false
));
// {5}, Exile a creature card from your graveyard: Create a tapped 3/3 colorless Zombie artifact creature token.
Ability ability = new SimpleActivatedAbility(
new CreateTokenEffect(new AshnodZombieToken(), 1, true, false), new GenericManaCost(5)
);
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_A)));
this.addAbility(ability);
}
private AshnodFleshMechanist(final AshnodFleshMechanist card) {
super(card);
}
@Override
public AshnodFleshMechanist copy() {
return new AshnodFleshMechanist(this);
}
}

View file

@ -10,9 +10,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
import java.util.UUID; import java.util.UUID;
@ -22,13 +20,6 @@ import java.util.UUID;
*/ */
public final class BloodmistInfiltrator extends CardImpl { public final class BloodmistInfiltrator extends CardImpl {
private static final FilterControlledPermanent filter
= new FilterControlledCreaturePermanent("another creature");
static {
filter.add(AnotherPredicate.instance);
}
public BloodmistInfiltrator(UUID ownerId, CardSetInfo setInfo) { public BloodmistInfiltrator(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
@ -39,7 +30,7 @@ public final class BloodmistInfiltrator extends CardImpl {
// Whenever Bloodmist Infiltrator attacks, you may sacrifice another creature. If you do, Bloodmist Infiltrator can't be blocked this turn. // Whenever Bloodmist Infiltrator attacks, you may sacrifice another creature. If you do, Bloodmist Infiltrator can't be blocked this turn.
this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid( this.addAbility(new AttacksTriggeredAbility(new DoIfCostPaid(
new CantBeBlockedSourceEffect(Duration.EndOfTurn), new CantBeBlockedSourceEffect(Duration.EndOfTurn),
new SacrificeTargetCost(new TargetControlledPermanent(filter)) new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE))
), false)); ), false));
} }

View file

@ -11,9 +11,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.game.permanent.token.TokenImpl; import mage.game.permanent.token.TokenImpl;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
@ -24,13 +22,6 @@ import java.util.UUID;
*/ */
public final class BogardanDragonheart extends CardImpl { public final class BogardanDragonheart extends CardImpl {
private static final FilterControlledPermanent filter
= new FilterControlledCreaturePermanent("another creature");
static {
filter.add(AnotherPredicate.instance);
}
public BogardanDragonheart(UUID ownerId, CardSetInfo setInfo) { public BogardanDragonheart(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}");
@ -43,7 +34,7 @@ public final class BogardanDragonheart extends CardImpl {
this.addAbility(new SimpleActivatedAbility(new BecomesCreatureSourceEffect( this.addAbility(new SimpleActivatedAbility(new BecomesCreatureSourceEffect(
new BogardanDragonheartToken(), null, Duration.EndOfTurn, false, new BogardanDragonheartToken(), null, Duration.EndOfTurn, false,
false, null, null, false false, null, null, false
), new SacrificeTargetCost(new TargetControlledPermanent(filter)))); ), new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE))));
} }
private BogardanDragonheart(final BogardanDragonheart card) { private BogardanDragonheart(final BogardanDragonheart card) {

View file

@ -16,11 +16,9 @@ import mage.constants.CardType;
import mage.constants.ComparisonType; import mage.constants.ComparisonType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.common.FilterCreatureCard; import mage.filter.common.FilterCreatureCard;
import mage.filter.predicate.mageobject.ManaValuePredicate; import mage.filter.predicate.mageobject.ManaValuePredicate;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetCardInYourGraveyard;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
import mage.target.common.TargetOpponentsCreaturePermanent; import mage.target.common.TargetOpponentsCreaturePermanent;
@ -32,14 +30,11 @@ import java.util.UUID;
*/ */
public final class CavalierOfNight extends CardImpl { public final class CavalierOfNight extends CardImpl {
private static final FilterControlledPermanent filter private static final FilterCard filter
= new FilterControlledCreaturePermanent("another creature");
private static final FilterCard filter2
= new FilterCreatureCard("creature card with mana value 3 or less from your graveyard"); = new FilterCreatureCard("creature card with mana value 3 or less from your graveyard");
static { static {
filter.add(AnotherPredicate.instance); filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 4));
filter2.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 4));
} }
public CavalierOfNight(UUID ownerId, CardSetInfo setInfo) { public CavalierOfNight(UUID ownerId, CardSetInfo setInfo) {
@ -59,13 +54,13 @@ public final class CavalierOfNight extends CardImpl {
); );
triggeredAbility.addTarget(new TargetOpponentsCreaturePermanent()); triggeredAbility.addTarget(new TargetOpponentsCreaturePermanent());
this.addAbility(new EntersBattlefieldTriggeredAbility(new DoWhenCostPaid( this.addAbility(new EntersBattlefieldTriggeredAbility(new DoWhenCostPaid(
triggeredAbility, new SacrificeTargetCost(new TargetControlledPermanent(filter)), triggeredAbility, new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)),
"Sacrifice a creature?" "Sacrifice a creature?"
))); )));
// When Cavalier of Night dies, return target creature card with converted mana cost 3 or less from your graveyard to the battlefield. // When Cavalier of Night dies, return target creature card with converted mana cost 3 or less from your graveyard to the battlefield.
Ability ability = new DiesSourceTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect()); Ability ability = new DiesSourceTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect());
ability.addTarget(new TargetCardInYourGraveyard(filter2)); ability.addTarget(new TargetCardInYourGraveyard(filter));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -12,8 +12,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
/** /**
@ -21,12 +20,6 @@ import mage.target.common.TargetControlledPermanent;
*/ */
public final class DemonlordOfAshmouth extends CardImpl { public final class DemonlordOfAshmouth extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(" another creature");
static {
filter.add(AnotherPredicate.instance);
}
public DemonlordOfAshmouth(UUID ownerId, CardSetInfo setInfo) { public DemonlordOfAshmouth(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}{B}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}{B}");
this.subtype.add(SubType.DEMON); this.subtype.add(SubType.DEMON);
@ -37,7 +30,11 @@ public final class DemonlordOfAshmouth extends CardImpl {
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// When Demonlord of Ashmouth enters the battlefield, exile it unless you sacrifice another creature. // When Demonlord of Ashmouth enters the battlefield, exile it unless you sacrifice another creature.
this.addAbility(new EntersBattlefieldTriggeredAbility(new ExileSourceUnlessPaysEffect(new SacrificeTargetCost(new TargetControlledPermanent(filter))))); this.addAbility(new EntersBattlefieldTriggeredAbility(
new ExileSourceUnlessPaysEffect(
new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE))
)
));
this.addAbility(new UndyingAbility()); this.addAbility(new UndyingAbility());
} }

View file

@ -17,11 +17,8 @@ import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.common.FilterCreatureCard; import mage.filter.common.FilterCreatureCard;
import mage.filter.predicate.mageobject.ManaValuePredicate; import mage.filter.predicate.mageobject.ManaValuePredicate;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.game.Game; import mage.game.Game;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
@ -35,12 +32,6 @@ public final class FiendArtisan extends CardImpl {
private static final DynamicValue xValue private static final DynamicValue xValue
= new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURE); = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURE);
private static final FilterControlledPermanent filter
= new FilterControlledCreaturePermanent("another creature");
static {
filter.add(AnotherPredicate.instance);
}
public FiendArtisan(UUID ownerId, CardSetInfo setInfo) { public FiendArtisan(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B/G}{B/G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B/G}{B/G}");
@ -59,7 +50,7 @@ public final class FiendArtisan extends CardImpl {
Zone.BATTLEFIELD, new FiendArtisanEffect(), new ManaCostsImpl<>("{X}{B/G}") Zone.BATTLEFIELD, new FiendArtisanEffect(), new ManaCostsImpl<>("{X}{B/G}")
); );
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter))); ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -15,7 +15,7 @@ import mage.abilities.keyword.MorphAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate; import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.game.Game; import mage.game.Game;
@ -35,12 +35,6 @@ import static mage.constants.Outcome.Benefit;
*/ */
public final class GiftOfDoom extends CardImpl { public final class GiftOfDoom extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent();
static {
filter.add(AnotherPredicate.instance);
}
public GiftOfDoom(UUID ownerId, CardSetInfo setInfo) { public GiftOfDoom(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{4}{B}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{4}{B}");
@ -65,7 +59,7 @@ public final class GiftOfDoom extends CardImpl {
// MorphSacrifice another creature. // MorphSacrifice another creature.
this.addAbility(new MorphAbility(new SacrificeTargetCost( this.addAbility(new MorphAbility(new SacrificeTargetCost(
new TargetControlledPermanent(filter) new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)
))); )));
// As Gift of Doom is turned face up, you may attach it to a creature. // As Gift of Doom is turned face up, you may attach it to a creature.

View file

@ -4,7 +4,6 @@ import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.ActivatedAbilityImpl; import mage.abilities.ActivatedAbilityImpl;
import mage.abilities.common.ActivateAsSorceryActivatedAbility;
import mage.abilities.costs.Cost; import mage.abilities.costs.Cost;
import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.costs.common.SacrificeTargetCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
@ -16,9 +15,7 @@ import mage.constants.*;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
/** /**
@ -27,13 +24,6 @@ import mage.target.common.TargetControlledPermanent;
*/ */
public final class UndercityNecrolisk extends CardImpl { public final class UndercityNecrolisk extends CardImpl {
private static final FilterControlledPermanent filter
= new FilterControlledCreaturePermanent("another creature");
static {
filter.add(AnotherPredicate.instance);
}
public UndercityNecrolisk(UUID ownerId, CardSetInfo setInfo) { public UndercityNecrolisk(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}");
@ -50,7 +40,7 @@ public final class UndercityNecrolisk extends CardImpl {
new GenericManaCost(1) new GenericManaCost(1)
); );
ability.addCost(new SacrificeTargetCost( ability.addCost(new SacrificeTargetCost(
new TargetControlledPermanent(filter) new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)
)); ));
// It gains menace until end of turn. Activate this ability only any time you could cast a sorcery. // It gains menace until end of turn. Activate this ability only any time you could cast a sorcery.
ability.addEffect(new GainAbilitySourceEffect( ability.addEffect(new GainAbilitySourceEffect(

View file

@ -11,9 +11,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
import java.util.UUID; import java.util.UUID;
@ -23,12 +21,6 @@ import java.util.UUID;
*/ */
public final class UndercityScavenger extends CardImpl { public final class UndercityScavenger extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledCreaturePermanent("another creature");
static {
filter.add(AnotherPredicate.instance);
}
public UndercityScavenger(UUID ownerId, CardSetInfo setInfo) { public UndercityScavenger(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}");
@ -40,7 +32,7 @@ public final class UndercityScavenger extends CardImpl {
// When Undercity Scavenger enters the battlefield, you may sacrifice another creature. If you do, put two +1/+1 counters on Undercity Scavenger, then scry 2. // When Undercity Scavenger enters the battlefield, you may sacrifice another creature. If you do, put two +1/+1 counters on Undercity Scavenger, then scry 2.
this.addAbility(new EntersBattlefieldTriggeredAbility(new DoIfCostPaid( this.addAbility(new EntersBattlefieldTriggeredAbility(new DoIfCostPaid(
new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)), new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)),
new SacrificeTargetCost(new TargetControlledPermanent(filter)) new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE))
).addEffect(new ScryEffect(2).concatBy(", then")))); ).addEffect(new ScryEffect(2).concatBy(", then"))));
} }

View file

@ -12,9 +12,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.game.permanent.token.GoatToken; import mage.game.permanent.token.GoatToken;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
@ -25,13 +23,6 @@ import java.util.UUID;
*/ */
public final class WoeStrider extends CardImpl { public final class WoeStrider extends CardImpl {
private static final FilterControlledPermanent filter
= new FilterControlledCreaturePermanent("another creature");
static {
filter.add(AnotherPredicate.instance);
}
public WoeStrider(UUID ownerId, CardSetInfo setInfo) { public WoeStrider(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}");
@ -44,7 +35,7 @@ public final class WoeStrider extends CardImpl {
// Sacrifice another creature: Scry 1. // Sacrifice another creature: Scry 1.
this.addAbility(new SimpleActivatedAbility( this.addAbility(new SimpleActivatedAbility(
new ScryEffect(1, false), new SacrificeTargetCost(new TargetControlledPermanent(filter)) new ScryEffect(1, false), new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE))
)); ));
// Escape{3}{B}{B}, Exile four other cards from your graveyard. // Escape{3}{B}{B}, Exile four other cards from your graveyard.

View file

@ -31,6 +31,7 @@ public final class TheBrothersWar extends ExpansionSet {
cards.add(new SetCardInfo("Argivian Avenger", 232, Rarity.UNCOMMON, mage.cards.a.ArgivianAvenger.class)); cards.add(new SetCardInfo("Argivian Avenger", 232, Rarity.UNCOMMON, mage.cards.a.ArgivianAvenger.class));
cards.add(new SetCardInfo("Argoth, Sanctum of Nature", "256a", Rarity.RARE, mage.cards.a.ArgothSanctumOfNature.class)); cards.add(new SetCardInfo("Argoth, Sanctum of Nature", "256a", Rarity.RARE, mage.cards.a.ArgothSanctumOfNature.class));
cards.add(new SetCardInfo("Argothian Opportunist", 167, Rarity.COMMON, mage.cards.a.ArgothianOpportunist.class)); cards.add(new SetCardInfo("Argothian Opportunist", 167, Rarity.COMMON, mage.cards.a.ArgothianOpportunist.class));
cards.add(new SetCardInfo("Ashnod, Flesh Mechanist", 84, Rarity.RARE, mage.cards.a.AshnodFleshMechanist.class));
cards.add(new SetCardInfo("Ashnod's Harvester", 117, Rarity.UNCOMMON, mage.cards.a.AshnodsHarvester.class)); cards.add(new SetCardInfo("Ashnod's Harvester", 117, Rarity.UNCOMMON, mage.cards.a.AshnodsHarvester.class));
cards.add(new SetCardInfo("Audacity", 169, Rarity.UNCOMMON, mage.cards.a.Audacity.class)); cards.add(new SetCardInfo("Audacity", 169, Rarity.UNCOMMON, mage.cards.a.Audacity.class));
cards.add(new SetCardInfo("Autonomous Assembler", 34, Rarity.RARE, mage.cards.a.AutonomousAssembler.class)); cards.add(new SetCardInfo("Autonomous Assembler", 34, Rarity.RARE, mage.cards.a.AutonomousAssembler.class));

View file

@ -0,0 +1,30 @@
package mage.game.permanent.token;
import mage.MageInt;
import mage.constants.CardType;
import mage.constants.SubType;
/**
* @author PurpleCrowbar
*/
public final class AshnodZombieToken extends TokenImpl {
public AshnodZombieToken() {
super("Zombie Token", "3/3 colorless Zombie artifact creature token");
cardType.add(CardType.ARTIFACT);
cardType.add(CardType.CREATURE);
subtype.add(SubType.ZOMBIE);
power = new MageInt(3);
toughness = new MageInt(3);
setOriginalExpansionSetCode("BRO");
}
public AshnodZombieToken(final AshnodZombieToken token) {
super(token);
}
public AshnodZombieToken copy() {
return new AshnodZombieToken(this);
}
}