diff --git a/Mage.Sets/src/mage/cards/b/Bladebrand.java b/Mage.Sets/src/mage/cards/b/Bladebrand.java
index 472d4cc8092..737bd290b20 100644
--- a/Mage.Sets/src/mage/cards/b/Bladebrand.java
+++ b/Mage.Sets/src/mage/cards/b/Bladebrand.java
@@ -26,7 +26,7 @@ public final class Bladebrand extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// Draw a card.
- this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
+ this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
"));
}
private Bladebrand(final Bladebrand card) {
diff --git a/Mage.Sets/src/mage/cards/f/FalkenrathPitFighter.java b/Mage.Sets/src/mage/cards/f/FalkenrathPitFighter.java
index 8309aefdfc5..48587739a13 100644
--- a/Mage.Sets/src/mage/cards/f/FalkenrathPitFighter.java
+++ b/Mage.Sets/src/mage/cards/f/FalkenrathPitFighter.java
@@ -24,7 +24,7 @@ import java.util.UUID;
*/
public final class FalkenrathPitFighter extends CardImpl {
- private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.VAMPIRE);
+ private static final FilterControlledPermanent filter = new FilterControlledPermanent(SubType.VAMPIRE, "Vampire");
public FalkenrathPitFighter(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}");
diff --git a/Mage.Sets/src/mage/cards/j/JackOLantern.java b/Mage.Sets/src/mage/cards/j/JackOLantern.java
index 0ef4aae1f98..99d3651b684 100644
--- a/Mage.Sets/src/mage/cards/j/JackOLantern.java
+++ b/Mage.Sets/src/mage/cards/j/JackOLantern.java
@@ -1,15 +1,15 @@
package mage.cards.j;
-import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.ExileSourceFromGraveCost;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.GenericManaCost;
+import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.ExileTargetEffect;
-import mage.abilities.mana.SimpleManaAbility;
+import mage.abilities.mana.AnyColorManaAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@@ -35,7 +35,7 @@ public final class JackOLantern extends CardImpl {
this.addAbility(ability);
// {1}, Exile Jack-o'-Lantern from your graveyard: Add one mana of any color.
- ability = new SimpleManaAbility(Zone.GRAVEYARD, Mana.AnyMana(1), new GenericManaCost(1));
+ ability = new AnyColorManaAbility(Zone.GRAVEYARD, new GenericManaCost(1), StaticValue.get(1), false);
ability.addCost(new ExileSourceFromGraveCost());
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/k/KatildaDawnhartPrime.java b/Mage.Sets/src/mage/cards/k/KatildaDawnhartPrime.java
index 7f2294002c3..1a80e57098b 100644
--- a/Mage.Sets/src/mage/cards/k/KatildaDawnhartPrime.java
+++ b/Mage.Sets/src/mage/cards/k/KatildaDawnhartPrime.java
@@ -1,8 +1,5 @@
package mage.cards.k;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
import mage.MageInt;
import mage.Mana;
import mage.ObjectColor;
@@ -16,11 +13,11 @@ import mage.abilities.effects.common.counter.AddCountersAllEffect;
import mage.abilities.effects.mana.ManaEffect;
import mage.abilities.keyword.ProtectionAbility;
import mage.abilities.mana.ActivatedManaAbilityImpl;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
import mage.choices.Choice;
import mage.choices.ChoiceImpl;
import mage.constants.*;
-import mage.cards.CardImpl;
-import mage.cards.CardSetInfo;
import mage.counters.CounterType;
import mage.filter.FilterPermanent;
import mage.filter.StaticFilters;
@@ -29,14 +26,17 @@ import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
/**
- *
* @author weirddan455
*/
public final class KatildaDawnhartPrime extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent(SubType.WEREWOLF, "Werewolves");
- private static final FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent(SubType.HUMAN, "Human creatures you control");
+ private static final FilterPermanent filter2 = new FilterControlledCreaturePermanent(SubType.HUMAN, "Human creatures");
public KatildaDawnhartPrime(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{W}");
@@ -51,10 +51,16 @@ public final class KatildaDawnhartPrime extends CardImpl {
this.addAbility(new ProtectionAbility(filter));
// Human creatures you control have "{T}: Add one mana of any of this creature's colors."
- this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(new KatildaDawnhartPrimeManaAbility(), Duration.WhileOnBattlefield, filter2)));
+ this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
+ new KatildaDawnhartPrimeManaAbility(), Duration.WhileOnBattlefield, filter2
+ )));
// {4}{G}{W}, {T}: Put a +1/+1 counter on each creature you control.
- this.addAbility(new SimpleActivatedAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), StaticFilters.FILTER_CONTROLLED_CREATURE), new ManaCostsImpl<>("{4}{G}{W}")));
+ Ability ability = new SimpleActivatedAbility(new AddCountersAllEffect(
+ CounterType.P1P1.createInstance(), StaticFilters.FILTER_CONTROLLED_CREATURE
+ ), new ManaCostsImpl<>("{4}{G}{W}"));
+ ability.addCost(new TapSourceCost());
+ this.addAbility(ability);
}
private KatildaDawnhartPrime(final KatildaDawnhartPrime card) {
diff --git a/Mage.Sets/src/mage/cards/m/MightOfTheOldWays.java b/Mage.Sets/src/mage/cards/m/MightOfTheOldWays.java
index e56f49a0142..a340f3c8182 100644
--- a/Mage.Sets/src/mage/cards/m/MightOfTheOldWays.java
+++ b/Mage.Sets/src/mage/cards/m/MightOfTheOldWays.java
@@ -9,6 +9,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
+import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
@@ -22,6 +23,7 @@ public final class MightOfTheOldWays extends CardImpl {
// Target creature gets +2/+2 until end of turn.
this.getSpellAbility().addEffect(new BoostTargetEffect(2, 2));
+ this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// Coven — Then if you control three or more creatures with different powers, draw a card.
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
diff --git a/Mage.Sets/src/mage/cards/o/OdricsOutrider.java b/Mage.Sets/src/mage/cards/o/OdricsOutrider.java
index 1a8a042d803..28c5a7ef0db 100644
--- a/Mage.Sets/src/mage/cards/o/OdricsOutrider.java
+++ b/Mage.Sets/src/mage/cards/o/OdricsOutrider.java
@@ -9,6 +9,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.counters.CounterType;
+import mage.filter.StaticFilters;
import mage.target.common.TargetControlledCreaturePermanent;
import java.util.UUID;
@@ -28,7 +29,8 @@ public final class OdricsOutrider extends CardImpl {
// Whenever Odric's Outrider or another creature you control dies, put a +1/+1 counter on target creature you control.
Ability ability = new DiesThisOrAnotherCreatureTriggeredAbility(
- new AddCountersTargetEffect(CounterType.P1P1.createInstance()), false
+ new AddCountersTargetEffect(CounterType.P1P1.createInstance()),
+ false, StaticFilters.FILTER_CONTROLLED_CREATURE
);
ability.addTarget(new TargetControlledCreaturePermanent());
this.addAbility(ability);
diff --git a/Mage.Sets/src/mage/cards/o/OldStickfingers.java b/Mage.Sets/src/mage/cards/o/OldStickfingers.java
index 09c0cc178d3..64bf0dbb52a 100644
--- a/Mage.Sets/src/mage/cards/o/OldStickfingers.java
+++ b/Mage.Sets/src/mage/cards/o/OldStickfingers.java
@@ -33,7 +33,7 @@ public final class OldStickfingers extends CardImpl {
this.addAbility(new CastSourceTriggeredAbility(new OldStickfingersEffect()));
// Old Stickfingers' power and toughness are equal to the number of creature cards in your graveyard.
- DynamicValue value = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURE);
+ DynamicValue value = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURES);
this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(value, Duration.EndOfGame)));
}
diff --git a/Mage.Sets/src/mage/cards/r/RootcoilCreeper.java b/Mage.Sets/src/mage/cards/r/RootcoilCreeper.java
index 5439d14ac18..248b8e5a938 100644
--- a/Mage.Sets/src/mage/cards/r/RootcoilCreeper.java
+++ b/Mage.Sets/src/mage/cards/r/RootcoilCreeper.java
@@ -33,7 +33,7 @@ import java.util.UUID;
*/
public final class RootcoilCreeper extends CardImpl {
- private static final FilterCard filter = new FilterOwnedCard("card with flashback you own in exile");
+ private static final FilterCard filter = new FilterOwnedCard("card with flashback you own from exile");
static {
filter.add(new AbilityPredicate(FlashbackAbility.class));
@@ -51,10 +51,16 @@ public final class RootcoilCreeper extends CardImpl {
this.addAbility(new AnyColorManaAbility());
// {T}: Add two mana of any one color. Spend this mana only to cast spells from your graveyard.
- this.addAbility(new ConditionalAnyColorManaAbility(2, new RootcoilCreeperManaBuilder()));
+ this.addAbility(new ConditionalAnyColorManaAbility(
+ new TapSourceCost(), 2, new RootcoilCreeperManaBuilder(), true
+ ));
// {G}{U}, {T}, Exile Rootcoil Creeper: Return target card with flashback you own in exile to your hand.
- Ability ability = new SimpleActivatedAbility(new ReturnToHandTargetEffect(), new ManaCostsImpl<>("{G}{U}"));
+ Ability ability = new SimpleActivatedAbility(
+ new ReturnToHandTargetEffect()
+ .setText("return target card with flashback you own in exile to your hand"),
+ new ManaCostsImpl<>("{G}{U}")
+ );
ability.addCost(new TapSourceCost());
ability.addCost(new ExileSourceCost());
ability.addTarget(new TargetCardInExile(filter));
diff --git a/Mage.Sets/src/mage/cards/s/SarythTheVipersFang.java b/Mage.Sets/src/mage/cards/s/SarythTheVipersFang.java
index be8a2d116e7..37ca2031495 100644
--- a/Mage.Sets/src/mage/cards/s/SarythTheVipersFang.java
+++ b/Mage.Sets/src/mage/cards/s/SarythTheVipersFang.java
@@ -18,6 +18,7 @@ import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.common.FilterUntappedCreature;
import mage.filter.predicate.Predicates;
+import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.filter.predicate.permanent.TappedPredicate;
import mage.target.TargetPermanent;
@@ -28,8 +29,8 @@ import java.util.UUID;
*/
public final class SarythTheVipersFang extends CardImpl {
- private static final FilterPermanent filterTapped = new FilterControlledCreaturePermanent("tapped creatures you control");
- private static final FilterPermanent filterAbility = new FilterControlledPermanent("creature or land you control");
+ private static final FilterPermanent filterTapped = new FilterControlledCreaturePermanent("tapped creatures");
+ private static final FilterPermanent filterAbility = new FilterControlledPermanent("another target creature or land you control");
static {
filterTapped.add(TappedPredicate.TAPPED);
@@ -37,6 +38,7 @@ public final class SarythTheVipersFang extends CardImpl {
CardType.CREATURE.getPredicate(),
CardType.LAND.getPredicate()
));
+ filterAbility.add(AnotherPredicate.instance);
}
public SarythTheVipersFang(UUID ownerId, CardSetInfo setInfo) {
diff --git a/Mage.Sets/src/mage/cards/s/SlaughterSpecialist.java b/Mage.Sets/src/mage/cards/s/SlaughterSpecialist.java
index 2546bfbe793..6987cc67ef9 100644
--- a/Mage.Sets/src/mage/cards/s/SlaughterSpecialist.java
+++ b/Mage.Sets/src/mage/cards/s/SlaughterSpecialist.java
@@ -38,7 +38,7 @@ public final class SlaughterSpecialist extends CardImpl {
// Whenever a creature an opponent controls dies, put a +1/+1 counter on Slaughter Specialist.
this.addAbility(new DiesCreatureTriggeredAbility(
new AddCountersSourceEffect(CounterType.P1P1.createInstance()),
- false, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE
+ false, StaticFilters.FILTER_OPPONENTS_PERMANENT_A_CREATURE
));
}
diff --git a/Mage.Sets/src/mage/cards/s/SlogurkTheOverslime.java b/Mage.Sets/src/mage/cards/s/SlogurkTheOverslime.java
index 292337f839e..11f66bc3273 100644
--- a/Mage.Sets/src/mage/cards/s/SlogurkTheOverslime.java
+++ b/Mage.Sets/src/mage/cards/s/SlogurkTheOverslime.java
@@ -12,7 +12,10 @@ import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
-import mage.constants.*;
+import mage.constants.CardType;
+import mage.constants.SubType;
+import mage.constants.SuperType;
+import mage.constants.TargetController;
import mage.counters.CounterType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterLandCard;
@@ -27,7 +30,7 @@ public final class SlogurkTheOverslime extends CardImpl {
public SlogurkTheOverslime(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{U}");
-
+
this.addSuperType(SuperType.LEGENDARY);
this.subtype.add(SubType.OOZE);
this.power = new MageInt(3);
@@ -43,8 +46,10 @@ public final class SlogurkTheOverslime extends CardImpl {
));
// Remove three +1/+1 counters from Slogurk: Return it to its owner's hand.
- this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandSourceEffect(),
- new RemoveCountersSourceCost(CounterType.P1P1.createInstance(3))));
+ this.addAbility(new SimpleActivatedAbility(
+ new ReturnToHandSourceEffect().setText("return it to its owner's hand"),
+ new RemoveCountersSourceCost(CounterType.P1P1.createInstance(3))
+ ));
// When Slogurk leaves the battlefield, return up to three target land cards from your graveyard to your hand.
Ability ability = new LeavesBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()
diff --git a/Mage.Sets/src/mage/cards/s/Startle.java b/Mage.Sets/src/mage/cards/s/Startle.java
index 58d3d8fe40f..c9ba316a270 100644
--- a/Mage.Sets/src/mage/cards/s/Startle.java
+++ b/Mage.Sets/src/mage/cards/s/Startle.java
@@ -25,7 +25,7 @@ public final class Startle extends CardImpl {
this.getSpellAbility().addEffect(new CreateTokenEffect(new ZombieDecayedToken()));
// Draw a card.
- this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
+ this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("
"));
}
private Startle(final Startle card) {
diff --git a/Mage.Sets/src/mage/cards/t/TeferiWhoSlowsTheSunset.java b/Mage.Sets/src/mage/cards/t/TeferiWhoSlowsTheSunset.java
index bcbbc31e51c..995228baba4 100644
--- a/Mage.Sets/src/mage/cards/t/TeferiWhoSlowsTheSunset.java
+++ b/Mage.Sets/src/mage/cards/t/TeferiWhoSlowsTheSunset.java
@@ -5,6 +5,7 @@ import mage.abilities.LoyaltyAbility;
import mage.abilities.common.PlaneswalkerEntersWithLoyaltyCountersAbility;
import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.GetEmblemEffect;
import mage.abilities.effects.common.LookLibraryAndPickControllerEffect;
import mage.cards.CardImpl;
@@ -13,11 +14,10 @@ import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.constants.SuperType;
-import mage.filter.FilterCard;
+import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.command.emblems.TeferiWhoSlowsTheSunsetEmblem;
import mage.game.permanent.Permanent;
-import mage.players.Player;
import mage.target.Target;
import mage.target.common.TargetArtifactPermanent;
import mage.target.common.TargetCreaturePermanent;
@@ -39,13 +39,17 @@ public final class TeferiWhoSlowsTheSunset extends CardImpl {
// +1: Choose up to one target artifact, up to one target creature, and up to one target land. Untap the chosen permanents you control. Tap the chosen permanents you don't control. You gain 2 life.
Ability ability = new LoyaltyAbility(new TeferiWhoSlowsTheSunsetEffect(), 1);
+ ability.addEffect(new GainLifeEffect(2));
ability.addTarget(new TargetArtifactPermanent());
ability.addTarget(new TargetCreaturePermanent());
ability.addTarget(new TargetLandPermanent());
this.addAbility(ability);
// −2: Look at the top three cards of your library. Put one of them into your hand and the rest on the bottom of your library in any order.
- this.addAbility(new LoyaltyAbility(new LookLibraryAndPickControllerEffect(StaticValue.get(3), false, StaticValue.get(1), new FilterCard("card"), false, false), -2));
+ this.addAbility(new LoyaltyAbility(new LookLibraryAndPickControllerEffect(
+ StaticValue.get(3), false, StaticValue.get(1),
+ StaticFilters.FILTER_CARD, false, false
+ ), -2));
// −7: You get an emblem with "Untap all permanents you control during each opponent's untap step" and "You draw a card during each opponent's draw step."
this.addAbility(new LoyaltyAbility(new GetEmblemEffect(new TeferiWhoSlowsTheSunsetEmblem()), -7));
@@ -67,7 +71,7 @@ class TeferiWhoSlowsTheSunsetEffect extends OneShotEffect {
super(Outcome.Benefit);
staticText = "Choose up to one target artifact, up to one target creature, and up to one target land. " +
"Untap the chosen permanents you control. " +
- "Tap the chosen permanents you don't control. ";
+ "Tap the chosen permanents you don't control.";
}
private TeferiWhoSlowsTheSunsetEffect(final TeferiWhoSlowsTheSunsetEffect effect) {
@@ -81,19 +85,17 @@ class TeferiWhoSlowsTheSunsetEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
- Player player = game.getPlayer(source.getControllerId());
for (Target target : source.getTargets()) {
Permanent targetPermanent = game.getPermanent(target.getFirstTarget());
- if (targetPermanent != null) {
- if (targetPermanent.getControllerId() == player.getId()) {
- targetPermanent.untap(game);
- } else {
- targetPermanent.tap(source, game);
- }
+ if (targetPermanent == null) {
+ continue;
+ }
+ if (targetPermanent.isControlledBy(source.getControllerId())) {
+ targetPermanent.untap(game);
+ } else {
+ targetPermanent.tap(source, game);
}
}
-
- player.gainLife(2, game, source);
return true;
}
}
diff --git a/Mage.Sets/src/mage/cards/t/TheMeathookMassacre.java b/Mage.Sets/src/mage/cards/t/TheMeathookMassacre.java
index def254de989..0401c6a7366 100644
--- a/Mage.Sets/src/mage/cards/t/TheMeathookMassacre.java
+++ b/Mage.Sets/src/mage/cards/t/TheMeathookMassacre.java
@@ -43,7 +43,7 @@ public final class TheMeathookMassacre extends CardImpl {
// Whenever a creature an opponent controls dies, you gain 1 life.
this.addAbility(new DiesCreatureTriggeredAbility(
new GainLifeEffect(1), false,
- StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE
+ StaticFilters.FILTER_OPPONENTS_PERMANENT_A_CREATURE
));
}
diff --git a/Mage.Sets/src/mage/cards/t/ThermoAlchemist.java b/Mage.Sets/src/mage/cards/t/ThermoAlchemist.java
index ecf22e35355..5eb60808170 100644
--- a/Mage.Sets/src/mage/cards/t/ThermoAlchemist.java
+++ b/Mage.Sets/src/mage/cards/t/ThermoAlchemist.java
@@ -1,9 +1,6 @@
-
package mage.cards.t;
-import java.util.UUID;
import mage.MageInt;
-import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.costs.common.TapSourceCost;
@@ -15,17 +12,17 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.TargetController;
-import mage.constants.Zone;
-import mage.filter.common.FilterInstantOrSorcerySpell;
+import mage.filter.StaticFilters;
+
+import java.util.UUID;
/**
- *
* @author LevelX2
*/
public final class ThermoAlchemist extends CardImpl {
public ThermoAlchemist(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.SHAMAN);
this.power = new MageInt(0);
@@ -33,11 +30,16 @@ public final class ThermoAlchemist extends CardImpl {
// Defender
this.addAbility(DefenderAbility.getInstance());
+
// {T}: Thermo-Alchemist deals 1 damage to each opponent.
- Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamagePlayersEffect(1, TargetController.OPPONENT), new TapSourceCost());
- this.addAbility(ability);
+ this.addAbility(new SimpleActivatedAbility(
+ new DamagePlayersEffect(1, TargetController.OPPONENT), new TapSourceCost()
+ ));
+
// Whenever you cast an instant or sorcery spell, untap Thermo-Alchemist.
- this.addAbility(new SpellCastControllerTriggeredAbility(new UntapSourceEffect(), new FilterInstantOrSorcerySpell(), false));
+ this.addAbility(new SpellCastControllerTriggeredAbility(
+ new UntapSourceEffect(), StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false
+ ));
}
private ThermoAlchemist(final ThermoAlchemist card) {
diff --git a/Mage.Sets/src/mage/cards/w/WinterthornBlessing.java b/Mage.Sets/src/mage/cards/w/WinterthornBlessing.java
index 1f7fdb490c7..e1d11051f50 100644
--- a/Mage.Sets/src/mage/cards/w/WinterthornBlessing.java
+++ b/Mage.Sets/src/mage/cards/w/WinterthornBlessing.java
@@ -30,7 +30,7 @@ public final class WinterthornBlessing extends CardImpl {
this.getSpellAbility().addTarget(new TargetPermanent(0, 1, StaticFilters.FILTER_CREATURE_YOU_DONT_CONTROL));
this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance()).setTargetPointer(new FirstTargetPointer()));
this.getSpellAbility().addEffect(new TapTargetEffect().setTargetPointer(new SecondTargetPointer()).setText("tap up to one target creature you don't control"));
- this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect().setTargetPointer(new SecondTargetPointer()).setText("that creature doesn't untap during its controller's next untap step"));
+ this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect().setTargetPointer(new SecondTargetPointer()).setText(", and that creature doesn't untap during its controller's next untap step"));
// Flashback {1}{G}{U}
this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{1}{G}{U}")));
diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java
index bb32451f2ea..b6c610ef3e1 100644
--- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java
+++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java
@@ -58,7 +58,7 @@ public class VerifyCardDataTest {
private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class);
- private static final String FULL_ABILITIES_CHECK_SET_CODE = "AFR"; // check all abilities and output cards with wrong abilities texts;
+ private static final String FULL_ABILITIES_CHECK_SET_CODE = "MID"; // check all abilities and output cards with wrong abilities texts;
private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run
private static final boolean ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages
diff --git a/Mage/src/main/java/mage/abilities/common/DiesThisOrAnotherCreatureTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/DiesThisOrAnotherCreatureTriggeredAbility.java
index 1fc842ee8b7..bccded75fcf 100644
--- a/Mage/src/main/java/mage/abilities/common/DiesThisOrAnotherCreatureTriggeredAbility.java
+++ b/Mage/src/main/java/mage/abilities/common/DiesThisOrAnotherCreatureTriggeredAbility.java
@@ -4,7 +4,8 @@ import mage.MageObject;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.effects.Effect;
import mage.constants.Zone;
-import mage.filter.common.FilterCreaturePermanent;
+import mage.filter.FilterPermanent;
+import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.ZoneChangeEvent;
@@ -14,14 +15,14 @@ import mage.game.events.ZoneChangeEvent;
*/
public class DiesThisOrAnotherCreatureTriggeredAbility extends TriggeredAbilityImpl {
- protected FilterCreaturePermanent filter;
+ protected FilterPermanent filter;
private boolean applyFilterOnSource = false;
public DiesThisOrAnotherCreatureTriggeredAbility(Effect effect, boolean optional) {
- this(effect, optional, new FilterCreaturePermanent());
+ this(effect, optional, StaticFilters.FILTER_PERMANENT_CREATURE);
}
- public DiesThisOrAnotherCreatureTriggeredAbility(Effect effect, boolean optional, FilterCreaturePermanent filter) {
+ public DiesThisOrAnotherCreatureTriggeredAbility(Effect effect, boolean optional, FilterPermanent filter) {
super(Zone.ALL, effect, optional); // Needs "ALL" if the source itself should trigger or multiple (incl. source go to grave)
this.filter = filter;
}
@@ -63,7 +64,7 @@ public class DiesThisOrAnotherCreatureTriggeredAbility extends TriggeredAbilityI
}
return false;
}
-
+
@Override
public boolean isInUseableZone(Game game, MageObject source, GameEvent event) {
return TriggeredAbilityImpl.isInUseableZoneDiesTrigger(this, event, game);
@@ -71,6 +72,6 @@ public class DiesThisOrAnotherCreatureTriggeredAbility extends TriggeredAbilityI
@Override
public String getTriggerPhrase() {
- return "Whenever {this} or another " + filter.getMessage() + " dies, " ;
+ return "Whenever {this} or another " + filter.getMessage() + " dies, ";
}
}
diff --git a/Mage/src/main/java/mage/abilities/costs/common/DiscardHandCost.java b/Mage/src/main/java/mage/abilities/costs/common/DiscardHandCost.java
index ec4c6a7c9fe..74dbc145f3b 100644
--- a/Mage/src/main/java/mage/abilities/costs/common/DiscardHandCost.java
+++ b/Mage/src/main/java/mage/abilities/costs/common/DiscardHandCost.java
@@ -44,6 +44,6 @@ public class DiscardHandCost extends CostImpl {
@Override
public String getText() {
- return "Discard your hand";
+ return "discard your hand";
}
}
\ No newline at end of file
diff --git a/Mage/src/main/java/mage/abilities/effects/common/ReturnToHandChosenControlledPermanentEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ReturnToHandChosenControlledPermanentEffect.java
index 0af04bc69fe..1f7e6ae523e 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/ReturnToHandChosenControlledPermanentEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/ReturnToHandChosenControlledPermanentEffect.java
@@ -38,8 +38,9 @@ public class ReturnToHandChosenControlledPermanentEffect extends ReturnToHandCho
@Override
protected String getText() {
- StringBuilder sb = new StringBuilder("return ");
+ StringBuilder sb = new StringBuilder("return");
if (!filter.getMessage().startsWith("another")) {
+ sb.append(' ');
if(filter.getMessage().startsWith("a")){
sb.append("an");
}
diff --git a/Mage/src/main/java/mage/abilities/mana/AnyColorManaAbility.java b/Mage/src/main/java/mage/abilities/mana/AnyColorManaAbility.java
index 1dc32fb3834..942fcded4b6 100644
--- a/Mage/src/main/java/mage/abilities/mana/AnyColorManaAbility.java
+++ b/Mage/src/main/java/mage/abilities/mana/AnyColorManaAbility.java
@@ -1,17 +1,18 @@
package mage.abilities.mana;
-import java.util.ArrayList;
-import java.util.List;
import mage.Mana;
import mage.abilities.costs.Cost;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.effects.Effect;
-import mage.abilities.effects.mana.ManaEffect;
import mage.abilities.effects.mana.AddManaOfAnyColorEffect;
+import mage.abilities.effects.mana.ManaEffect;
import mage.constants.Zone;
import mage.game.Game;
+import java.util.ArrayList;
+import java.util.List;
+
public class AnyColorManaAbility extends ActivatedManaAbilityImpl {
public AnyColorManaAbility() {
@@ -28,14 +29,17 @@ public class AnyColorManaAbility extends ActivatedManaAbilityImpl {
}
/**
- *
* @param cost
* @param netAmount dynamic value used during available mana calculation to
* set the max possible amount the source can produce
* @param setFlag
*/
public AnyColorManaAbility(Cost cost, DynamicValue netAmount, boolean setFlag) {
- super(Zone.BATTLEFIELD, new AddManaOfAnyColorEffect(1, netAmount, setFlag), cost);
+ this(Zone.BATTLEFIELD, cost, netAmount, setFlag);
+ }
+
+ public AnyColorManaAbility(Zone zone, Cost cost, DynamicValue netAmount, boolean setFlag) {
+ super(zone, new AddManaOfAnyColorEffect(1, netAmount, setFlag), cost);
this.netMana.add(new Mana(0, 0, 0, 0, 0, 0, 1, 0));
}
diff --git a/Mage/src/main/java/mage/filter/StaticFilters.java b/Mage/src/main/java/mage/filter/StaticFilters.java
index 4b66c81727b..c0717cec1f2 100644
--- a/Mage/src/main/java/mage/filter/StaticFilters.java
+++ b/Mage/src/main/java/mage/filter/StaticFilters.java
@@ -389,6 +389,13 @@ public final class StaticFilters {
FILTER_OPPONENTS_PERMANENT_CREATURE.setLockedFilter(true);
}
+ public static final FilterCreaturePermanent FILTER_OPPONENTS_PERMANENT_A_CREATURE = new FilterCreaturePermanent("a creature an opponent controls");
+
+ static {
+ FILTER_OPPONENTS_PERMANENT_A_CREATURE.add(TargetController.OPPONENT.getControllerPredicate());
+ FILTER_OPPONENTS_PERMANENT_A_CREATURE.setLockedFilter(true);
+ }
+
public static final FilterPermanent FILTER_OPPONENTS_PERMANENT_ARTIFACT = new FilterPermanent("artifact an opponent controls");
static {
@@ -447,7 +454,7 @@ public final class StaticFilters {
FILTER_CONTROLLED_ANOTHER_CREATURE.setLockedFilter(true);
}
- public static final FilterControlledCreaturePermanent FILTER_CONTROLLED_UNTAPPED_CREATURES = new FilterControlledCreaturePermanent("untapped creature you control");
+ public static final FilterControlledCreaturePermanent FILTER_CONTROLLED_UNTAPPED_CREATURES = new FilterControlledCreaturePermanent("untapped creatures you control");
static {
FILTER_CONTROLLED_UNTAPPED_CREATURES.add(TappedPredicate.UNTAPPED);
diff --git a/Mage/src/main/java/mage/game/permanent/token/ConsumingBlobToken.java b/Mage/src/main/java/mage/game/permanent/token/ConsumingBlobToken.java
index d3d113fc666..c64de225556 100644
--- a/Mage/src/main/java/mage/game/permanent/token/ConsumingBlobToken.java
+++ b/Mage/src/main/java/mage/game/permanent/token/ConsumingBlobToken.java
@@ -16,7 +16,7 @@ import mage.game.Game;
public final class ConsumingBlobToken extends TokenImpl {
public ConsumingBlobToken() {
- super("Ooze", "green Ooze creature token with \"This creature's power is equal to the number of card types among cards in your graveyard and its toughness is equal to that number plus 1.\"");
+ super("Ooze", "green Ooze creature token with \"This creature's power is equal to the number of card types among cards in your graveyard and its toughness is equal to that number plus 1\".");
setOriginalExpansionSetCode("MID");
cardType.add(CardType.CREATURE);
subtype.add(SubType.OOZE);