[GTC] Fix Wildwood Rebirth and clean up various other cards

This commit is contained in:
Alex W. Jackson 2022-01-01 18:13:03 -05:00
parent 0f0fc3e8b2
commit 587df5db16
12 changed files with 38 additions and 92 deletions

View file

@ -33,7 +33,7 @@ public final class Agoraphobia extends CardImpl {
// Enchant creature // Enchant creature
TargetPermanent auraTarget = new TargetCreaturePermanent(); TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); this.getSpellAbility().addEffect(new AttachEffect(Outcome.UnboostCreature));
Ability ability = new EnchantAbility(auraTarget.getTargetName()); Ability ability = new EnchantAbility(auraTarget.getTargetName());
this.addAbility(ability); this.addAbility(ability);

View file

@ -9,7 +9,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.StaticFilters;
/** /**
* *
@ -23,7 +23,7 @@ public final class BiomassMutation extends CardImpl {
// Creatures you control have base power and toughness X/X until end of turn. // Creatures you control have base power and toughness X/X until end of turn.
DynamicValue variableMana = ManacostVariableValue.REGULAR; DynamicValue variableMana = ManacostVariableValue.REGULAR;
this.getSpellAbility().addEffect(new SetPowerToughnessAllEffect(variableMana, variableMana, Duration.EndOfTurn, new FilterControlledCreaturePermanent("Creatures you control"), true)); this.getSpellAbility().addEffect(new SetPowerToughnessAllEffect(variableMana, variableMana, Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES, true));
} }
private BiomassMutation(final BiomassMutation card) { private BiomassMutation(final BiomassMutation card) {

View file

@ -16,7 +16,7 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.SuperType; import mage.constants.SuperType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterLandCard; import mage.filter.StaticFilters;
import mage.target.common.TargetCardInHand; import mage.target.common.TargetCardInHand;
import mage.target.common.TargetAnyTarget; import mage.target.common.TargetAnyTarget;
@ -39,10 +39,10 @@ public final class BorborygmosEnraged extends CardImpl {
this.addAbility(TrampleAbility.getInstance()); this.addAbility(TrampleAbility.getInstance());
//Whenever Borborygmous Enraged deals combat damage to a player, reveal the top three cards of your library. Put all land cards revealed this way into your hand and the rest into your graveyard. //Whenever Borborygmous Enraged deals combat damage to a player, reveal the top three cards of your library. Put all land cards revealed this way into your hand and the rest into your graveyard.
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new RevealLibraryPutIntoHandEffect(3, new FilterLandCard(), Zone.GRAVEYARD), false, false)); this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new RevealLibraryPutIntoHandEffect(3, StaticFilters.FILTER_CARD_LANDS, Zone.GRAVEYARD), false, false));
//Discard a land card: Borborygmos Enraged deals 3 damage to any target //Discard a land card: Borborygmos Enraged deals 3 damage to any target
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(3), new DiscardTargetCost(new TargetCardInHand(new FilterLandCard()))); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(3), new DiscardTargetCost(new TargetCardInHand(StaticFilters.FILTER_CARD_LAND_A)));
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,4 +1,3 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID; import java.util.UUID;
@ -11,10 +10,9 @@ 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.constants.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.FilterPermanent; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.ColorPredicate; import mage.filter.predicate.mageobject.ColorPredicate;
import mage.filter.predicate.mageobject.AnotherPredicate; import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -25,13 +23,10 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class CourtStreetDenizen extends CardImpl { public final class CourtStreetDenizen extends CardImpl {
private static final FilterPermanent filter = new FilterCreaturePermanent("another white creature"); private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another white creature");
private static final FilterCreaturePermanent filterOpponentCreature = new FilterCreaturePermanent("creature an opponent controls");
static { static {
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
filter.add(new ColorPredicate(ObjectColor.WHITE)); filter.add(new ColorPredicate(ObjectColor.WHITE));
filter.add(TargetController.YOU.getControllerPredicate());
filterOpponentCreature.add(TargetController.OPPONENT.getControllerPredicate());
} }
public CourtStreetDenizen(UUID ownerId, CardSetInfo setInfo) { public CourtStreetDenizen(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}");
@ -42,8 +37,8 @@ public final class CourtStreetDenizen extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Whenever another white creature enters the battlefield under your control, tap target creature an opponent controls. // Whenever another white creature enters the battlefield under your control, tap target creature an opponent controls.
Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new TapTargetEffect(),filter,false,null, true); Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new TapTargetEffect(), filter, false, null, true);
ability.addTarget(new TargetCreaturePermanent(filterOpponentCreature)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,17 +1,15 @@
package mage.cards.d; package mage.cards.d;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.common.SimpleEvasionAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesSourceEffect;
import mage.abilities.effects.RestrictionEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; 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.constants.Zone; import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game; import mage.filter.predicate.Predicates;
import mage.game.permanent.Permanent;
import java.util.UUID; import java.util.UUID;
@ -20,6 +18,12 @@ import java.util.UUID;
*/ */
public final class DeathcultRogue extends CardImpl { public final class DeathcultRogue extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("except by Rogues");
static {
filter.add(Predicates.not(SubType.ROGUE.getPredicate()));
}
public DeathcultRogue(UUID ownerId, CardSetInfo setInfo) { public DeathcultRogue(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U/B}{U/B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U/B}{U/B}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
@ -29,7 +33,7 @@ public final class DeathcultRogue extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Deathcult Rogue can't be blocked except by Rogues. // Deathcult Rogue can't be blocked except by Rogues.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DeathcultRogueRestrictionEffect())); this.addAbility(new SimpleEvasionAbility(new CantBeBlockedByCreaturesSourceEffect(filter, Duration.WhileOnBattlefield)));
} }
@ -42,30 +46,3 @@ public final class DeathcultRogue extends CardImpl {
return new DeathcultRogue(this); return new DeathcultRogue(this);
} }
} }
class DeathcultRogueRestrictionEffect extends RestrictionEffect {
public DeathcultRogueRestrictionEffect() {
super(Duration.WhileOnBattlefield);
staticText = "Deathcult Rogue can't be blocked except by Rogues";
}
public DeathcultRogueRestrictionEffect(final DeathcultRogueRestrictionEffect effect) {
super(effect);
}
@Override
public boolean applies(Permanent permanent, Ability source, Game game) {
return permanent.getId().equals(source.getSourceId());
}
@Override
public boolean canBeBlocked(Permanent attacker, Permanent blocker, Ability source, Game game, boolean canUseChooseDialogs) {
return blocker.hasSubtype(SubType.ROGUE, game);
}
@Override
public DeathcultRogueRestrictionEffect copy() {
return new DeathcultRogueRestrictionEffect(this);
}
}

View file

@ -1,4 +1,3 @@
package mage.cards.f; package mage.cards.f;
import java.util.UUID; import java.util.UUID;
@ -11,10 +10,8 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.ColorPredicate; import mage.filter.predicate.mageobject.ColorPredicate;
import mage.filter.predicate.mageobject.AnotherPredicate; import mage.filter.predicate.mageobject.AnotherPredicate;
@ -24,10 +21,9 @@ import mage.filter.predicate.mageobject.AnotherPredicate;
*/ */
public final class FoundryStreetDenizen extends CardImpl { public final class FoundryStreetDenizen extends CardImpl {
private static final FilterPermanent filter = new FilterCreaturePermanent("another red creature"); private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another red creature");
static { static {
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
filter.add(TargetController.YOU.getControllerPredicate());
filter.add(new ColorPredicate(ObjectColor.RED)); filter.add(new ColorPredicate(ObjectColor.RED));
} }

View file

@ -1,4 +1,3 @@
package mage.cards.h; package mage.cards.h;
import java.util.UUID; import java.util.UUID;
@ -9,7 +8,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -18,23 +17,15 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class HandsOfBinding extends CardImpl { public final class HandsOfBinding extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static{
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public HandsOfBinding (UUID ownerId, CardSetInfo setInfo) { public HandsOfBinding (UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{1}{U}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{1}{U}");
//Tap target creature an opponent controls. That creature doesn't untap during its controller's next untap step. //Tap target creature an opponent controls. That creature doesn't untap during its controller's next untap step.
this.getSpellAbility().addEffect(new TapTargetEffect()); this.getSpellAbility().addEffect(new TapTargetEffect());
this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect()); this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect());
this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); this.getSpellAbility().addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
//Cipher //Cipher
this.getSpellAbility().addEffect(new CipherEffect()); this.getSpellAbility().addEffect(new CipherEffect());
} }
private HandsOfBinding(final HandsOfBinding card) { private HandsOfBinding(final HandsOfBinding card) {
@ -42,7 +33,7 @@ public final class HandsOfBinding extends CardImpl {
} }
@Override @Override
public HandsOfBinding copy() { public HandsOfBinding copy() {
return new HandsOfBinding(this); return new HandsOfBinding(this);
} }
} }

View file

@ -1,4 +1,3 @@
package mage.cards.i; package mage.cards.i;
import java.util.UUID; import java.util.UUID;
@ -26,8 +25,8 @@ public final class IvyLaneDenizen extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another green creature"); private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another green creature");
static { static {
filter.add(new ColorPredicate(ObjectColor.GREEN));
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
filter.add(new ColorPredicate(ObjectColor.GREEN));
} }
public IvyLaneDenizen(UUID ownerId, CardSetInfo setInfo) { public IvyLaneDenizen(UUID ownerId, CardSetInfo setInfo) {

View file

@ -1,4 +1,3 @@
package mage.cards.m; package mage.cards.m;
import java.util.UUID; import java.util.UUID;
@ -12,7 +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.Outcome; import mage.constants.Outcome;
import mage.constants.TargetController; import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates; import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardIdPredicate; import mage.filter.predicate.mageobject.CardIdPredicate;
@ -28,19 +27,12 @@ import mage.target.targetpointer.FixedTarget;
*/ */
public final class MarkForDeath extends CardImpl { public final class MarkForDeath extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static {
filter.add(TargetController.OPPONENT.getControllerPredicate());
}
public MarkForDeath(UUID ownerId, CardSetInfo setInfo) { public MarkForDeath(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{R}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{R}");
// Target creature an opponent controls blocks this turn if able. Untap that creature. Other creatures that player controls can't block this turn. // Target creature an opponent controls blocks this turn if able. Untap that creature. Other creatures that player controls can't block this turn.
this.getSpellAbility().addEffect(new MarkForDeathEffect()); this.getSpellAbility().addEffect(new MarkForDeathEffect());
this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); this.getSpellAbility().addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
} }
private MarkForDeath(final MarkForDeath card) { private MarkForDeath(final MarkForDeath card) {

View file

@ -1,4 +1,3 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID; import java.util.UUID;
@ -11,9 +10,8 @@ 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.constants.TargetController;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.ColorPredicate; import mage.filter.predicate.mageobject.ColorPredicate;
import mage.filter.predicate.mageobject.AnotherPredicate; import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.TargetPlayer; import mage.target.TargetPlayer;
@ -24,12 +22,11 @@ import mage.target.TargetPlayer;
*/ */
public final class SagesRowDenizen extends CardImpl { public final class SagesRowDenizen extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another blue creature"); private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another blue creature");
static { static {
filter.add(new ColorPredicate(ObjectColor.BLUE));
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
filter.add(TargetController.YOU.getControllerPredicate()); filter.add(new ColorPredicate(ObjectColor.BLUE));
} }
public SagesRowDenizen(UUID ownerId, CardSetInfo setInfo) { public SagesRowDenizen(UUID ownerId, CardSetInfo setInfo) {

View file

@ -1,4 +1,3 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID; import java.util.UUID;
@ -28,8 +27,8 @@ public final class ShadowAlleyDenizen extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another black creature"); private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another black creature");
static { static {
filter.add(new ColorPredicate(ObjectColor.BLACK));
filter.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
filter.add(new ColorPredicate(ObjectColor.BLACK));
} }
public ShadowAlleyDenizen(UUID ownerId, CardSetInfo setInfo) { public ShadowAlleyDenizen(UUID ownerId, CardSetInfo setInfo) {

View file

@ -1,10 +1,10 @@
package mage.cards.w; package mage.cards.w;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.filter.StaticFilters;
import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID; import java.util.UUID;
@ -19,7 +19,7 @@ public final class WildwoodRebirth extends CardImpl {
// Return target creature card from your graveyard to your hand. // Return target creature card from your graveyard to your hand.
this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard()); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
} }
private WildwoodRebirth(final WildwoodRebirth card) { private WildwoodRebirth(final WildwoodRebirth card) {