From 587df5db166fbbc06f41d36aea6da2f6636d0543 Mon Sep 17 00:00:00 2001 From: "Alex W. Jackson" Date: Sat, 1 Jan 2022 18:13:03 -0500 Subject: [PATCH] [GTC] Fix Wildwood Rebirth and clean up various other cards --- Mage.Sets/src/mage/cards/a/Agoraphobia.java | 2 +- .../src/mage/cards/b/BiomassMutation.java | 4 +- .../src/mage/cards/b/BorborygmosEnraged.java | 6 +-- .../src/mage/cards/c/CourtStreetDenizen.java | 15 +++---- .../src/mage/cards/d/DeathcultRogue.java | 45 +++++-------------- .../mage/cards/f/FoundryStreetDenizen.java | 10 ++--- .../src/mage/cards/h/HandsOfBinding.java | 15 ++----- .../src/mage/cards/i/IvyLaneDenizen.java | 3 +- Mage.Sets/src/mage/cards/m/MarkForDeath.java | 14 ++---- .../src/mage/cards/s/SagesRowDenizen.java | 9 ++-- .../src/mage/cards/s/ShadowAlleyDenizen.java | 3 +- .../src/mage/cards/w/WildwoodRebirth.java | 4 +- 12 files changed, 38 insertions(+), 92 deletions(-) diff --git a/Mage.Sets/src/mage/cards/a/Agoraphobia.java b/Mage.Sets/src/mage/cards/a/Agoraphobia.java index a06d2725efc..fee2c2e1fb5 100644 --- a/Mage.Sets/src/mage/cards/a/Agoraphobia.java +++ b/Mage.Sets/src/mage/cards/a/Agoraphobia.java @@ -33,7 +33,7 @@ public final class Agoraphobia extends CardImpl { // Enchant creature TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.UnboostCreature)); Ability ability = new EnchantAbility(auraTarget.getTargetName()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/b/BiomassMutation.java b/Mage.Sets/src/mage/cards/b/BiomassMutation.java index 9bccb523c1a..0ad4d1fc7db 100644 --- a/Mage.Sets/src/mage/cards/b/BiomassMutation.java +++ b/Mage.Sets/src/mage/cards/b/BiomassMutation.java @@ -9,7 +9,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; 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. 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) { diff --git a/Mage.Sets/src/mage/cards/b/BorborygmosEnraged.java b/Mage.Sets/src/mage/cards/b/BorborygmosEnraged.java index 21384ad2b10..41eb97420b2 100644 --- a/Mage.Sets/src/mage/cards/b/BorborygmosEnraged.java +++ b/Mage.Sets/src/mage/cards/b/BorborygmosEnraged.java @@ -16,7 +16,7 @@ import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; import mage.constants.Zone; -import mage.filter.common.FilterLandCard; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInHand; import mage.target.common.TargetAnyTarget; @@ -39,10 +39,10 @@ public final class BorborygmosEnraged extends CardImpl { 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. - 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 - 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()); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/c/CourtStreetDenizen.java b/Mage.Sets/src/mage/cards/c/CourtStreetDenizen.java index 7c728e6e2fe..cd528de8ece 100644 --- a/Mage.Sets/src/mage/cards/c/CourtStreetDenizen.java +++ b/Mage.Sets/src/mage/cards/c/CourtStreetDenizen.java @@ -1,4 +1,3 @@ - package mage.cards.c; import java.util.UUID; @@ -11,10 +10,9 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.TargetController; import mage.constants.Zone; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; +import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.mageobject.ColorPredicate; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.target.common.TargetCreaturePermanent; @@ -25,13 +23,10 @@ import mage.target.common.TargetCreaturePermanent; */ public final class CourtStreetDenizen extends CardImpl { - private static final FilterPermanent filter = new FilterCreaturePermanent("another white creature"); - private static final FilterCreaturePermanent filterOpponentCreature = new FilterCreaturePermanent("creature an opponent controls"); + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another white creature"); static { filter.add(AnotherPredicate.instance); filter.add(new ColorPredicate(ObjectColor.WHITE)); - filter.add(TargetController.YOU.getControllerPredicate()); - filterOpponentCreature.add(TargetController.OPPONENT.getControllerPredicate()); } public CourtStreetDenizen(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); @@ -42,8 +37,8 @@ public final class CourtStreetDenizen extends CardImpl { this.toughness = new MageInt(2); // 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.addTarget(new TargetCreaturePermanent(filterOpponentCreature)); + Ability ability = new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new TapTargetEffect(), filter, false, null, true); + ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/d/DeathcultRogue.java b/Mage.Sets/src/mage/cards/d/DeathcultRogue.java index cf43f6fa02f..721ea64e062 100644 --- a/Mage.Sets/src/mage/cards/d/DeathcultRogue.java +++ b/Mage.Sets/src/mage/cards/d/DeathcultRogue.java @@ -1,17 +1,15 @@ package mage.cards.d; import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.RestrictionEffect; +import mage.abilities.common.SimpleEvasionAbility; +import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesSourceEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.permanent.Permanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; import java.util.UUID; @@ -20,6 +18,12 @@ import java.util.UUID; */ 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) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U/B}{U/B}"); this.subtype.add(SubType.HUMAN); @@ -29,7 +33,7 @@ public final class DeathcultRogue extends CardImpl { this.toughness = new MageInt(2); // 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); } } - -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); - } -} diff --git a/Mage.Sets/src/mage/cards/f/FoundryStreetDenizen.java b/Mage.Sets/src/mage/cards/f/FoundryStreetDenizen.java index 8542f5d87a7..b8e08a8265c 100644 --- a/Mage.Sets/src/mage/cards/f/FoundryStreetDenizen.java +++ b/Mage.Sets/src/mage/cards/f/FoundryStreetDenizen.java @@ -1,4 +1,3 @@ - package mage.cards.f; import java.util.UUID; @@ -11,10 +10,8 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Duration; -import mage.constants.TargetController; import mage.constants.Zone; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.mageobject.ColorPredicate; import mage.filter.predicate.mageobject.AnotherPredicate; @@ -24,13 +21,12 @@ import mage.filter.predicate.mageobject.AnotherPredicate; */ 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 { filter.add(AnotherPredicate.instance); - filter.add(TargetController.YOU.getControllerPredicate()); filter.add(new ColorPredicate(ObjectColor.RED)); } - + public FoundryStreetDenizen(UUID ownerId, CardSetInfo setInfo) { super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{R}"); this.subtype.add(SubType.GOBLIN); diff --git a/Mage.Sets/src/mage/cards/h/HandsOfBinding.java b/Mage.Sets/src/mage/cards/h/HandsOfBinding.java index 49a8f4265f9..2823bc74225 100644 --- a/Mage.Sets/src/mage/cards/h/HandsOfBinding.java +++ b/Mage.Sets/src/mage/cards/h/HandsOfBinding.java @@ -1,4 +1,3 @@ - package mage.cards.h; import java.util.UUID; @@ -9,7 +8,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.TargetController; -import mage.filter.common.FilterCreaturePermanent; +import mage.filter.StaticFilters; import mage.target.common.TargetCreaturePermanent; /** @@ -18,23 +17,15 @@ import mage.target.common.TargetCreaturePermanent; */ 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) { 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. this.getSpellAbility().addEffect(new TapTargetEffect()); this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect()); - this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE)); //Cipher this.getSpellAbility().addEffect(new CipherEffect()); - - } private HandsOfBinding(final HandsOfBinding card) { @@ -42,7 +33,7 @@ public final class HandsOfBinding extends CardImpl { } @Override - public HandsOfBinding copy() { + public HandsOfBinding copy() { return new HandsOfBinding(this); } } diff --git a/Mage.Sets/src/mage/cards/i/IvyLaneDenizen.java b/Mage.Sets/src/mage/cards/i/IvyLaneDenizen.java index 4257e4b85fb..369ebb50b8b 100644 --- a/Mage.Sets/src/mage/cards/i/IvyLaneDenizen.java +++ b/Mage.Sets/src/mage/cards/i/IvyLaneDenizen.java @@ -1,4 +1,3 @@ - package mage.cards.i; import java.util.UUID; @@ -26,8 +25,8 @@ public final class IvyLaneDenizen extends CardImpl { private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another green creature"); static { - filter.add(new ColorPredicate(ObjectColor.GREEN)); filter.add(AnotherPredicate.instance); + filter.add(new ColorPredicate(ObjectColor.GREEN)); } public IvyLaneDenizen(UUID ownerId, CardSetInfo setInfo) { diff --git a/Mage.Sets/src/mage/cards/m/MarkForDeath.java b/Mage.Sets/src/mage/cards/m/MarkForDeath.java index 218a70375d0..dca7f939d2b 100644 --- a/Mage.Sets/src/mage/cards/m/MarkForDeath.java +++ b/Mage.Sets/src/mage/cards/m/MarkForDeath.java @@ -1,4 +1,3 @@ - package mage.cards.m; import java.util.UUID; @@ -12,7 +11,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Outcome; -import mage.constants.TargetController; +import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.CardIdPredicate; @@ -28,19 +27,12 @@ import mage.target.targetpointer.FixedTarget; */ 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) { 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. 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) { @@ -89,4 +81,4 @@ class MarkForDeathEffect extends OneShotEffect { public MarkForDeathEffect copy() { return new MarkForDeathEffect(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/s/SagesRowDenizen.java b/Mage.Sets/src/mage/cards/s/SagesRowDenizen.java index 9f48bc61023..61a9c84cc97 100644 --- a/Mage.Sets/src/mage/cards/s/SagesRowDenizen.java +++ b/Mage.Sets/src/mage/cards/s/SagesRowDenizen.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -11,9 +10,8 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.constants.TargetController; 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.AnotherPredicate; import mage.target.TargetPlayer; @@ -24,12 +22,11 @@ import mage.target.TargetPlayer; */ 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 { - filter.add(new ColorPredicate(ObjectColor.BLUE)); filter.add(AnotherPredicate.instance); - filter.add(TargetController.YOU.getControllerPredicate()); + filter.add(new ColorPredicate(ObjectColor.BLUE)); } public SagesRowDenizen(UUID ownerId, CardSetInfo setInfo) { diff --git a/Mage.Sets/src/mage/cards/s/ShadowAlleyDenizen.java b/Mage.Sets/src/mage/cards/s/ShadowAlleyDenizen.java index bd6ac80cb2a..82bffd74294 100644 --- a/Mage.Sets/src/mage/cards/s/ShadowAlleyDenizen.java +++ b/Mage.Sets/src/mage/cards/s/ShadowAlleyDenizen.java @@ -1,4 +1,3 @@ - package mage.cards.s; import java.util.UUID; @@ -28,8 +27,8 @@ public final class ShadowAlleyDenizen extends CardImpl { private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another black creature"); static { - filter.add(new ColorPredicate(ObjectColor.BLACK)); filter.add(AnotherPredicate.instance); + filter.add(new ColorPredicate(ObjectColor.BLACK)); } public ShadowAlleyDenizen(UUID ownerId, CardSetInfo setInfo) { diff --git a/Mage.Sets/src/mage/cards/w/WildwoodRebirth.java b/Mage.Sets/src/mage/cards/w/WildwoodRebirth.java index 9bbb50d48e4..3d0922394b8 100644 --- a/Mage.Sets/src/mage/cards/w/WildwoodRebirth.java +++ b/Mage.Sets/src/mage/cards/w/WildwoodRebirth.java @@ -1,10 +1,10 @@ - package mage.cards.w; import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; import java.util.UUID; @@ -19,7 +19,7 @@ public final class WildwoodRebirth extends CardImpl { // Return target creature card from your graveyard to your hand. 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) {