various text fixes

This commit is contained in:
theelk801 2025-06-13 13:44:33 -04:00
parent 60c8d7254b
commit 58b5bb76f9
107 changed files with 173 additions and 187 deletions

View file

@ -41,7 +41,7 @@ public final class AcererakTheArchlich extends CardImpl {
this.toughness = new MageInt(5);
// When Acererak the Archlich enters the battlefield, if you have not completed Tomb of Annihilation, return Acererak the Archlich to its owner's hand and venture into the dungeon.
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandSourceEffect(true))
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandSourceEffect(true).setText("return it to its owner's hand"))
.withInterveningIf(AcererakTheArchlichCondition.instance);
ability.addEffect(new VentureIntoTheDungeonEffect().concatBy("and"));
ability.addHint(CurrentDungeonHint.instance);
@ -83,7 +83,7 @@ class AcererakTheArchlichEffect extends OneShotEffect {
AcererakTheArchlichEffect() {
super(Outcome.Benefit);
staticText = "for each opponent, you create a 2/2 black Zombie creature " +
"token unless that player sacrifices a creature";
"token unless that player sacrifices a creature of their choice";
}
private AcererakTheArchlichEffect(final AcererakTheArchlichEffect effect) {

View file

@ -84,7 +84,7 @@ enum AerialSurveyorCondition implements Condition {
@Override
public String toString() {
return "";
return "defending player controls more lands than you";
}
}

View file

@ -50,7 +50,7 @@ class AidFromTheCowlEffect extends OneShotEffect {
AidFromTheCowlEffect() {
super(Outcome.PutCreatureInPlay);
this.staticText = "reveal the top card of your library. If it's a permanent card, " +
"you may put it onto the battlefield. Otherwise, you may put that card on the bottom of your library";
"you may put it onto the battlefield. Otherwise, you may put it on the bottom of your library";
}
private AidFromTheCowlEffect(final AidFromTheCowlEffect effect) {

View file

@ -66,7 +66,7 @@ public final class AlchemistsTalent extends CardImpl {
new SpellCastControllerTriggeredAbility(
new DamagePlayersEffect(AlchemistsTalentValue.instance, TargetController.OPPONENT)
.setText("{this} deals damage equal to that spell's mana value to each opponent"),
StaticFilters.FILTER_SPELL, false, SetTargetPointer.SPELL
StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.SPELL
).withInterveningIf(AlchemistsTalentCondition.instance), 3
)));
}

View file

@ -76,7 +76,7 @@ class AnaBattlemageEffect extends OneShotEffect {
AnaBattlemageEffect() {
super(Outcome.Detriment);
this.staticText = "and it deals damage equal to its power to its controller";
this.staticText = "and that creature deals damage equal to its power to its controller";
}
private AnaBattlemageEffect(final AnaBattlemageEffect effect) {

View file

@ -30,7 +30,7 @@ public final class ArchmageAscension extends CardImpl {
// At the beginning of each end step, if you drew two or more cards this turn, you may put a quest counter on Archmage Ascension.
this.addAbility(new BeginningOfEndStepTriggeredAbility(
TargetController.EACH_PLAYER, new AddCountersSourceEffect(CounterType.QUEST.createInstance()),
TargetController.ANY, new AddCountersSourceEffect(CounterType.QUEST.createInstance()),
true, ArchmageAscensionCondition.instance
), new CardsAmountDrawnThisTurnWatcher());

View file

@ -49,7 +49,7 @@ class ArdenAngelEffect extends OneShotEffect {
ArdenAngelEffect() {
super(Outcome.Benefit);
this.staticText = "roll a four-sided die. If the result is 1, return {this} from your graveyard to the battlefield";
this.staticText = "roll a four-sided die. If the result is 1, return this card from your graveyard to the battlefield";
}
private ArdenAngelEffect(final ArdenAngelEffect effect) {

View file

@ -34,7 +34,7 @@ public final class AsylumVisitor extends CardImpl {
// At the beginning of each player's upkeep, if that player has no cards in hand, you draw a card and you lose 1 life.
Ability ability = new BeginningOfUpkeepTriggeredAbility(
TargetController.ANY, new DrawCardSourceControllerEffect(1, true), false
TargetController.EACH_PLAYER, new DrawCardSourceControllerEffect(1, true), false
).withInterveningIf(condition);
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
this.addAbility(ability);

View file

@ -44,7 +44,7 @@ public final class AuntiesSnitch extends CardImpl {
// Whenever a Goblin or Rogue you control deals combat damage to a player, if Auntie's Snitch is in your graveyard, you may return Auntie's Snitch to your hand.
this.addAbility(new DealsDamageToAPlayerAllTriggeredAbility(Zone.GRAVEYARD,
new ReturnSourceFromGraveyardToHandEffect().setText("return {this} to your hand"),
new ReturnSourceFromGraveyardToHandEffect().setText("return this card to your hand"),
filter, true, SetTargetPointer.NONE, true, false
).withInterveningIf(SourceInGraveyardCondition.instance));
}

View file

@ -52,7 +52,7 @@ public final class BlizzardStrix extends CardImpl {
// When Blizzard Strix enters the battlefield, if you control another snow permanent, exile target permanent other than Blizzard Strix. Return that card to the battlefield under its owner's control at the beginning of the next end step.
Ability ability = new EntersBattlefieldTriggeredAbility(new ExileReturnBattlefieldNextEndStepTargetEffect()
.setText("exile target permanent other than {this}. Return that card to the " +
"battlefield under its owner's control at the beginning of the next end step"));
"battlefield under its owner's control at the beginning of the next end step")).withInterveningIf(condition);
ability.addTarget(new TargetPermanent(filter));
this.addAbility(ability);
}

View file

@ -1,6 +1,5 @@
package mage.cards.b;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
@ -18,8 +17,9 @@ import mage.constants.SubType;
import mage.constants.Zone;
import mage.target.common.TargetCardInGraveyard;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class BloodOperative extends CardImpl {
@ -42,7 +42,7 @@ public final class BloodOperative extends CardImpl {
// Whenever you surveil, if Blood Operative is in your graveyard, you may pay 3 life. If you do, return Blood Operative to your hand.
this.addAbility(new SurveilTriggeredAbility(Zone.GRAVEYARD, new DoIfCostPaid(
new ReturnSourceFromGraveyardToHandEffect().setText("return {this} to your hand"), new PayLifeCost(3)
new ReturnSourceFromGraveyardToHandEffect().setText("return this card to your hand"), new PayLifeCost(3)
)).withInterveningIf(SourceInGraveyardCondition.instance));
}

View file

@ -38,7 +38,7 @@ public final class BloodchiefAscension extends CardImpl {
// Whenever a card is put into an opponent's graveyard from anywhere, if Bloodchief Ascension has three or more quest counters on it, you may have that player lose 2 life. If you do, you gain 2 life.
Ability ability = new PutCardIntoGraveFromAnywhereAllTriggeredAbility(
new LoseLifeTargetEffect(2), true, StaticFilters.FILTER_CARD_A,
new LoseLifeTargetEffect(2).setText("have that player lose 2 life"), true, StaticFilters.FILTER_CARD_A,
TargetController.OPPONENT, SetTargetPointer.PLAYER
).withInterveningIf(condition);
ability.addEffect(new GainLifeEffect(2).concatBy("If you do,"));

View file

@ -69,6 +69,7 @@ class BorealOutriderEffect extends ReplacementEffectImpl {
BorealOutriderEffect() {
super(Duration.EndOfStep, Outcome.BoostCreature);
staticText = "that creature enters with an additional +1/+1 counter on it";
}
private BorealOutriderEffect(BorealOutriderEffect effect) {

View file

@ -1,8 +1,7 @@
package mage.cards.b;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.DiesCreatureTriggeredAbility;
import mage.abilities.condition.common.SourceInGraveyardCondition;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.ExileSourceEffect;
import mage.cards.CardImpl;
@ -10,24 +9,20 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.TokenPredicate;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.ZoneChangeEvent;
import mage.game.permanent.Permanent;
import mage.game.permanent.token.ZombieToken;
import java.util.UUID;
/**
*
* @author Plopman
*/
public final class BridgeFromBelow extends CardImpl {
private static final FilterCreaturePermanent filter1 = new FilterCreaturePermanent("Whenever a nontoken creature is put into your graveyard from the battlefield, ");
private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("When a creature is put into an opponent's graveyard from the battlefield, ");
private static final FilterPermanent filter1 = new FilterCreaturePermanent();
private static final FilterPermanent filter2 = new FilterCreaturePermanent();
static {
filter1.add(TargetController.YOU.getOwnerPredicate());
@ -39,11 +34,18 @@ public final class BridgeFromBelow extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{B}{B}{B}");
// Whenever a nontoken creature is put into your graveyard from the battlefield, if Bridge from Below is in your graveyard, create a 2/2 black Zombie creature token.
this.addAbility(new BridgeFromBelowAbility(new CreateTokenEffect(new ZombieToken()), filter1));
this.addAbility(new DiesCreatureTriggeredAbility(
Zone.GRAVEYARD, new CreateTokenEffect(new ZombieToken()),
false, filter1, false
).setTriggerPhrase("Whenever a nontoken creature is put into your graveyard from the battlefield, ")
.withInterveningIf(SourceInGraveyardCondition.instance));
// When a creature is put into an opponent's graveyard from the battlefield, if Bridge from Below is in your graveyard, exile Bridge from Below.
this.addAbility(new BridgeFromBelowAbility(new ExileSourceEffect(), filter2));
this.addAbility(new DiesCreatureTriggeredAbility(
Zone.GRAVEYARD, new ExileSourceEffect().setText("exile this card"),
false, filter2, false
).setTriggerPhrase("When a creature is put into an opponent's graveyard from the battlefield, ")
.withInterveningIf(SourceInGraveyardCondition.instance));
}
private BridgeFromBelow(final BridgeFromBelow card) {
@ -55,41 +57,3 @@ public final class BridgeFromBelow extends CardImpl {
return new BridgeFromBelow(this);
}
}
class BridgeFromBelowAbility extends TriggeredAbilityImpl {
private final FilterCreaturePermanent filter;
BridgeFromBelowAbility(Effect effect, FilterCreaturePermanent filter) {
super(Zone.GRAVEYARD, effect, false);
this.filter = filter;
this.withInterveningIf(SourceInGraveyardCondition.instance);
setTriggerPhrase(filter.getMessage());
setLeavesTheBattlefieldTrigger(true); // it's not required for Bridge from Below, but better to keep same code style and verify pass
}
private BridgeFromBelowAbility(final BridgeFromBelowAbility ability) {
super(ability);
this.filter = ability.filter;
}
@Override
public BridgeFromBelowAbility copy() {
return new BridgeFromBelowAbility(this);
}
@Override
public boolean checkEventType(GameEvent event, Game game) {
return event.getType() == GameEvent.EventType.ZONE_CHANGE;
}
@Override
public boolean checkTrigger(GameEvent event, Game game) {
Permanent permanent = (Permanent) game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD);
if (permanent == null || !((ZoneChangeEvent) event).isDiesEvent()) {
return false;
}
return filter.match(permanent, controllerId, this, game);
}
}

View file

@ -44,7 +44,7 @@ public final class CleavingSkyrider extends CardImpl {
// When Cleaving Skyrider enters the battlefield, if it was kicked, it deals X damage to any target, where X is the number of attacking creatures.
Ability ability = new EntersBattlefieldTriggeredAbility(
new DamageTargetEffect(xValue, "it")
new DamageTargetEffect(xValue, "it").setText("it deals X damage to any target, where X is the number of attacking creatures")
).withInterveningIf(KickedCondition.ONCE);
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability);

View file

@ -44,7 +44,7 @@ public final class CurseOfTheCabal extends CardImpl {
// At the beginning of each player's upkeep, if Curse of the Cabal is suspended, that player may sacrifice a permanent. If they do, put two time counters on Curse of the Cabal.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
Zone.EXILED, TargetController.ANY, new CurseOfTheCabalTriggeredAbilityConditionalDelay(), false
Zone.EXILED, TargetController.EACH_PLAYER, new CurseOfTheCabalTriggeredAbilityConditionalDelay(), false
).withInterveningIf(SuspendedCondition.instance));
}
@ -62,7 +62,7 @@ class CurseOfTheCabalSacrificeEffect extends OneShotEffect {
CurseOfTheCabalSacrificeEffect() {
super(Outcome.Sacrifice);
this.staticText = "Target player sacrifices half the permanents they control, rounded down.";
this.staticText = "Target player sacrifices half the permanents they control of their choice, rounded down.";
}
private CurseOfTheCabalSacrificeEffect(final CurseOfTheCabalSacrificeEffect effect) {

View file

@ -51,9 +51,9 @@ public final class DarigaazReincarnated extends CardImpl {
this.addAbility(new SimpleStaticAbility(new DarigaazReincarnatedDiesEffect()));
// At the beginning of your upkeep, if Darigaaz is exiled with an egg counter on it, remove an egg counter from it. Then if Darigaaz has no egg counters on it, return it to the battlefield.
Ability ability = new BeginningOfUpkeepTriggeredAbility(
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
Zone.EXILED, TargetController.YOU, new DarigaazReincarnatedReturnEffect(), false
).withInterveningIf(DarigaazReincarnatedCondition.instance);
).withInterveningIf(DarigaazReincarnatedCondition.instance));
}
private DarigaazReincarnated(final DarigaazReincarnated card) {
@ -154,6 +154,6 @@ enum DarigaazReincarnatedCondition implements Condition {
@Override
public String toString() {
return "{this} is exiled with an egg counter on it";
return "this card is exiled with an egg counter on it";
}
}

View file

@ -34,7 +34,7 @@ public final class DeathSpark extends CardImpl {
// At the beginning of your upkeep, if Death Spark is in your graveyard with a creature card directly above it, you may pay {1}. If you do, return Death Spark to your hand.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
Zone.GRAVEYARD, TargetController.YOU,
new DoIfCostPaid(new ReturnSourceFromGraveyardToHandEffect(), new GenericManaCost(1)), false
new DoIfCostPaid(new ReturnSourceFromGraveyardToHandEffect().setText("return this card to your hand"), new GenericManaCost(1)), false
).withInterveningIf(DeathSparkCondition.instance));
}
@ -71,6 +71,6 @@ enum DeathSparkCondition implements Condition {
@Override
public String toString() {
return "{this} is in your graveyard with a creature card directly above it";
return "this card is in your graveyard with a creature card directly above it";
}
}

View file

@ -32,7 +32,7 @@ public final class DefenseOfTheHeart extends CardImpl {
// At the beginning of your upkeep, if an opponent controls three or more creatures, sacrifice Defense of the Heart, search your library for up to two creature cards, and put those cards onto the battlefield. Then shuffle your library.
Ability ability = new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceEffect()).withInterveningIf(condition);
ability.addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(
2, StaticFilters.FILTER_CARD_CREATURES
0, 2, StaticFilters.FILTER_CARD_CREATURES
)).concatBy(","));
this.addAbility(ability);
}

View file

@ -3,7 +3,7 @@ package mage.cards.d;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
import mage.abilities.condition.common.SourceHasCountersCondition;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.counter.AddCounterChoiceSourceEffect;
@ -42,7 +42,7 @@ public class DenryKlinEditorInChief extends CardImpl {
// Whenever a nontoken creature you control enters,
// if Denry has counters on it, put the same number of each kind of counter on that creature.
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
new DenryKlinEditorInChiefCopyCountersEffect(), StaticFilters.FILTER_CONTROLLED_CREATURE_NON_TOKEN
).withInterveningIf(SourceHasCountersCondition.instance));

View file

@ -33,7 +33,7 @@ public final class EarwigSquad extends CardImpl {
// When Earwig Squad enters the battlefield, if its prowl cost was paid, search target opponent's library for three cards and exile them. Then that player shuffles their library.
Ability ability = new EntersBattlefieldTriggeredAbility(
new SearchLibraryAndExileTargetEffect(3, true), false
new SearchLibraryAndExileTargetEffect(3, false), false
).withInterveningIf(ProwlCostWasPaidCondition.instance);
ability.addTarget(new TargetOpponent());
this.addAbility(ability.addHint(ProwlCostWasPaidHint.instance));

View file

@ -76,6 +76,11 @@ enum EowynFearlessKnightPredicate implements ObjectSourcePlayerPredicate<Permane
.map(permanent -> permanent.getPower().getValue()
< input.getObject().getPower().getValue()).orElse(false);
}
@Override
public String toString() {
return "another Human entered the battlefield under your control this turn";
}
}
class EowynFearlessKnightEffect extends OneShotEffect {

View file

@ -35,7 +35,7 @@ public final class ErgRaiders extends CardImpl {
// At the beginning of your end step, if Erg Raiders didn't attack this turn, Erg Raiders deals 2 damage to you unless it came under your control this turn.
this.addAbility(new BeginningOfEndStepTriggeredAbility(new ConditionalOneShotEffect(
new DamageControllerEffect(2), ErgRaidersCondition.instance,
"{this} deals 2 damage to you unless it came under your control this turn"
"it deals 2 damage to you unless it came under your control this turn"
)).withInterveningIf(condition));
}

View file

@ -4,7 +4,7 @@ import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@ -31,9 +31,7 @@ public final class ExcavationElephant extends CardImpl {
this.addAbility(new KickerAbility("{1}{W}"));
// When Excavation Elephant enters the battlefield, if it was kicked, return target artifact card from your graveyard to your hand.
Ability ability = new EntersBattlefieldTriggeredAbility(
new ReturnToHandTargetEffect(), false
).withInterveningIf(KickedCondition.ONCE);
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect()).withInterveningIf(KickedCondition.ONCE);
ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD));
this.addAbility(ability);
}

View file

@ -12,6 +12,7 @@ import mage.abilities.effects.common.UntapTargetEffect;
import mage.abilities.effects.common.discard.DiscardControllerEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.target.common.TargetCreaturePermanent;
@ -39,8 +40,7 @@ public final class FearOfMissingOut extends CardImpl {
ability = new AttacksFirstTimeTriggeredAbility(new UntapTargetEffect(), false).withInterveningIf(DeliriumCondition.instance);
ability.addTarget(new TargetCreaturePermanent());
ability.addEffect(new AdditionalCombatPhaseEffect());
ability.addHint(CardTypesInGraveyardCount.YOU.getHint());
this.addAbility(ability);
this.addAbility(ability.setAbilityWord(AbilityWord.DELIRIUM).addHint(CardTypesInGraveyardCount.YOU.getHint()));
}
private FearOfMissingOut(final FearOfMissingOut card) {

View file

@ -45,7 +45,7 @@ public final class FoundryHornet extends CardImpl {
// When Foundry Hornet enters the battlefield, if you control a creature with a +1/+1 counter on it, creatures your opponents control get -1/-1 until end of turn.
this.addAbility(new EntersBattlefieldTriggeredAbility(new BoostAllEffect(
-1, -1, Duration.EndOfTurn,
StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE, false
StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, false
), false).withInterveningIf(condition));
}

View file

@ -8,6 +8,7 @@ import mage.abilities.hint.common.MorbidHint;
import mage.abilities.keyword.ReachAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.SubType;
@ -30,7 +31,7 @@ public final class FunnelWebRecluse extends CardImpl {
// Morbid When Funnel-Web Recluse enters the battlefield, if a creature died this turn, investigate.
this.addAbility(new EntersBattlefieldTriggeredAbility(new InvestigateEffect())
.withInterveningIf(MorbidCondition.instance).addHint(MorbidHint.instance));
.withInterveningIf(MorbidCondition.instance).setAbilityWord(AbilityWord.MORBID).addHint(MorbidHint.instance));
}
private FunnelWebRecluse(final FunnelWebRecluse card) {

View file

@ -19,7 +19,7 @@ import java.util.UUID;
public final class GaeasCourser extends CardImpl {
private static final Condition condition
= new CardsInControllerGraveyardCondition(3, StaticFilters.FILTER_CARD_CREATURE);
= new CardsInControllerGraveyardCondition(3, StaticFilters.FILTER_CARD_CREATURES);
public GaeasCourser(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}");

View file

@ -29,8 +29,8 @@ public final class GhirapurOrrery extends CardImpl {
// At the beginning of each player's upkeep, if that player has no cards in hand, that player draws three cards.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
TargetController.ANY, new DrawCardTargetEffect(3), false).withInterveningIf(condition)
);
TargetController.EACH_PLAYER, new DrawCardTargetEffect(3), false
).withInterveningIf(condition));
}
private GhirapurOrrery(final GhirapurOrrery card) {

View file

@ -8,6 +8,7 @@ import mage.abilities.effects.common.DamageAllControlledTargetEffect;
import mage.abilities.keyword.ReachAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.SetTargetPointer;
import mage.constants.SubType;
@ -35,7 +36,7 @@ public final class GougedZealot extends CardImpl {
new DamageAllControlledTargetEffect(1)
.setText("{this} deals 1 damage to each creature defending player controls"),
false, null, SetTargetPointer.PLAYER
).withInterveningIf(DeliriumCondition.instance).addHint(CardTypesInGraveyardCount.YOU.getHint()));
).withInterveningIf(DeliriumCondition.instance).setAbilityWord(AbilityWord.DELIRIUM).addHint(CardTypesInGraveyardCount.YOU.getHint()));
}
private GougedZealot(final GougedZealot card) {

View file

@ -1,9 +1,9 @@
package mage.cards.g;
import mage.abilities.Ability;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.condition.Condition;
import mage.abilities.effects.common.CreateTokenTargetEffect;
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
@ -16,7 +16,6 @@ import mage.players.Player;
import java.util.UUID;
/**
*
* @author TheElk801
*/
public final class GreenerPastures extends CardImpl {
@ -26,7 +25,7 @@ public final class GreenerPastures extends CardImpl {
// At the beginning of each player's upkeep, if that player controls more lands than each other player, the player creates a 1/1 green Saproling creature token.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
TargetController.EACH_PLAYER, new CreateTokenTargetEffect(new SaprolingToken()),
TargetController.EACH_PLAYER, new CreateTokenTargetEffect(new SaprolingToken()).setText("the player creates a 1/1 green Saproling creature token"),
false
).withInterveningIf(ActivePlayerMostLandsCondition.instance));
}

View file

@ -27,9 +27,9 @@ public final class HiredHexblade extends CardImpl {
this.toughness = new MageInt(2);
// When Hired Hexblade enters the battlefield, if mana from a Treasure was spent to cast it, you draw a card and you lose 1 life.
Ability ability = new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1))
Ability ability = new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1, true))
.withInterveningIf(TreasureSpentToCastCondition.instance);
ability.addEffect(new LoseLifeSourceControllerEffect(1));
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
this.addAbility(ability);
}

View file

@ -7,6 +7,7 @@ import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.hint.common.MorbidHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.SubType;
@ -26,7 +27,7 @@ public final class HollowhengeScavenger extends CardImpl {
// <i>Morbid</i> &mdash; When Hollowhenge Scavenger enters the battlefield, if a creature died this turn, you gain 5 life.
this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(5))
.withInterveningIf(MorbidCondition.instance).addHint(MorbidHint.instance));
.withInterveningIf(MorbidCondition.instance).setAbilityWord(AbilityWord.MORBID).addHint(MorbidHint.instance));
}
private HollowhengeScavenger(final HollowhengeScavenger card) {

View file

@ -64,8 +64,8 @@ public final class KeeperOfTheAccord extends CardImpl {
enum KeeperOfTheAccordCondition implements Condition {
CREATURES(StaticFilters.FILTER_PERMANENT_CREATURE),
LANDS(StaticFilters.FILTER_LAND);
CREATURES(StaticFilters.FILTER_PERMANENT_CREATURES),
LANDS(StaticFilters.FILTER_LANDS);
private final FilterPermanent filter;

View file

@ -47,7 +47,7 @@ public final class KeldonStrikeTeam extends CardImpl {
HasteAbility.getInstance(), Duration.WhileOnBattlefield,
StaticFilters.FILTER_CONTROLLED_CREATURE
), SourceEnteredThisTurnCondition.DID, "as long as {this} " +
"entered the battlefield this turn, creatures you control have haste"
"entered this turn, creatures you control have haste"
)));
}

View file

@ -34,7 +34,7 @@ import java.util.*;
*/
public final class KodamaOfTheEastTree extends CardImpl {
private static final FilterPermanent filter = new FilterControlledPermanent();
private static final FilterPermanent filter = new FilterControlledPermanent("another permanent you control");
static {
filter.add(AnotherPredicate.instance);

View file

@ -24,7 +24,7 @@ public final class LandTax extends CardImpl {
// At the beginning of your upkeep, if an opponent controls more lands than you, you may search your library for up to three basic land cards, reveal them, and put them into your hand. If you do, shuffle your library.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new SearchLibraryPutInHandEffect(
new TargetCardInLibrary(3, StaticFilters.FILTER_CARD_BASIC_LANDS), true
new TargetCardInLibrary(0, 3, StaticFilters.FILTER_CARD_BASIC_LANDS), true
), true).withInterveningIf(condition));
}

View file

@ -36,7 +36,7 @@ public final class Lifeline extends CardImpl {
// Whenever a creature dies, if another creature is on the battlefield, return the first card to the battlefield under its owner's control at the beginning of the next end step.
this.addAbility(new DiesCreatureTriggeredAbility(
new LifelineEffect(), false,
StaticFilters.FILTER_PERMANENT_CREATURE, true
StaticFilters.FILTER_PERMANENT_A_CREATURE, true
).withInterveningIf(condition));
}

View file

@ -7,6 +7,7 @@ import mage.abilities.effects.common.DestroyTargetEffect;
import mage.abilities.hint.common.MorbidHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.filter.StaticFilters;
import mage.target.common.TargetCreaturePermanent;
@ -24,7 +25,7 @@ public final class MaliciousAffliction extends CardImpl {
// <i>Morbid</i> &mdash; When you cast Malicious Affliction, if a creature died this turn, you may copy Malicious Affliction and may choose a new target for the copy.
this.addAbility(new CastSourceTriggeredAbility(
new CopySourceSpellEffect().setText("copy {this} and may choose a new target for the copy"), true
).withInterveningIf(MorbidCondition.instance).addHint(MorbidHint.instance).setRuleAtTheTop(true));
).withInterveningIf(MorbidCondition.instance).setAbilityWord(AbilityWord.MORBID).addHint(MorbidHint.instance).setRuleAtTheTop(true));
// Destroy target nonblack creature.
this.getSpellAbility().addEffect(new DestroyTargetEffect());

View file

@ -31,7 +31,7 @@ public final class MarduWarshrieker extends CardImpl {
// <em>Raid</em> - When Mardu Warshrieker enters the battlefield, if you attacked this turn, add {R}{W}{B}.
this.addAbility(new EntersBattlefieldTriggeredAbility(new AddManaToManaPoolSourceControllerEffect(
new Mana(1, 0, 1, 1, 0, 0, 0, 0)
)).withInterveningIf(RaidCondition.instance).setAbilityWord(AbilityWord.RAID).addHint(RaidHint.instance), new PlayerAttackedWatcher());
).setText("add {R}{W}{B}")).withInterveningIf(RaidCondition.instance).setAbilityWord(AbilityWord.RAID).addHint(RaidHint.instance), new PlayerAttackedWatcher());
}
private MarduWarshrieker(final MarduWarshrieker card) {

View file

@ -24,7 +24,7 @@ public final class MaskOfIntolerance extends CardImpl {
// At the beginning of each player's upkeep, if there are four or more basic land types among lands that player controls, Mask of Intolerance deals 3 damage to that player.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
TargetController.ANY, new DamageTargetEffect(3), false
TargetController.EACH_PLAYER, new DamageTargetEffect(3, true, "that player"), false
).withInterveningIf(MaskOfIntoleranceCondition.instance).addHint(DomainHint.instance));
}

View file

@ -51,7 +51,7 @@ public final class MastermindPlum extends CardImpl {
// Whenever you cast a spell, if mana from a Treasure was spent to cast it, you draw a card and you lose 1 life.
ability = new SpellCastControllerTriggeredAbility(
new DrawCardSourceControllerEffect(1, true),
StaticFilters.FILTER_SPELL, false, SetTargetPointer.SPELL
StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.SPELL
).withInterveningIf(MastermindPlumCondition.instance);
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
this.addAbility(ability);

View file

@ -21,7 +21,7 @@ import java.util.UUID;
*/
public final class MirrorSigilSergeant extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("you control blue permanent");
private static final FilterControlledPermanent filter = new FilterControlledPermanent("you control a blue permanent");
static {
filter.add(new ColorPredicate(ObjectColor.BLUE));

View file

@ -59,7 +59,7 @@ public final class MossPitSkeleton extends CardImpl {
class MossPitSkeletonTriggeredAbility extends TriggeredAbilityImpl {
MossPitSkeletonTriggeredAbility() {
super(Zone.GRAVEYARD, new PutOnLibrarySourceEffect(true).setText("put {this} on top of your library"), true);
super(Zone.GRAVEYARD, new PutOnLibrarySourceEffect(true).setText("put this card on top of your library"), true);
this.withInterveningIf(SourceInGraveyardCondition.instance);
setTriggerPhrase("Whenever one or more +1/+1 counters are put on a creature you control, ");
}

View file

@ -60,6 +60,6 @@ enum NetherSpiritCondition implements Condition {
@Override
public String toString() {
return "{this} is the only creature card in your graveyard";
return "this card is the only creature card in your graveyard";
}
}

View file

@ -34,7 +34,7 @@ public final class Nihilith extends CardImpl {
// Whenever a card is put into an opponent's graveyard from anywhere, if Nihilith is suspended, you may remove a time counter from Nihilith.
this.addAbility(new PutCardIntoGraveFromAnywhereAllTriggeredAbility(
Zone.EXILED, new RemoveCounterSourceEffect(CounterType.TIME.createInstance()), true,
Zone.EXILED, new RemoveCounterSourceEffect(CounterType.TIME.createInstance()).setText("remove a time counter from this card"), true,
StaticFilters.FILTER_CARD_A, TargetController.OPPONENT, SetTargetPointer.NONE
).withInterveningIf(SuspendedCondition.instance));
}

View file

@ -69,6 +69,11 @@ enum OchreJellyCondition implements Condition {
.filter(permanent -> permanent.getCounters(game).getCount(CounterType.P1P1) >= 2)
.isPresent();
}
@Override
public String toString() {
return "it had two or more +1/+1 counters on it";
}
}
class OchreJellyEffect extends OneShotEffect {

View file

@ -89,13 +89,13 @@ class OldGrowthTrollReturnEffect extends OneShotEffect {
OldGrowthTrollReturnEffect() {
super(Outcome.PutCardInPlay);
staticText = "return it to the battlefield. It's an Aura enchantment with enchant Forest you control " +
"and \"Enchanted Forest has '{T}: Add {G}{G}' and '{1}, {T}, Sacrifice this land: " +
"Create a tapped 4/4 green Troll Warrior creature token with trample.'\"";
}
private OldGrowthTrollReturnEffect(final OldGrowthTrollReturnEffect effect) {
super(effect);
staticText = "return it to the battlefield. It's an Aura enchantment with enchant Forest you control " +
"and \"Enchanted Forest has '{T}: Add {G}{G}' and '{1}, {T}, Sacrifice this land: " +
"Create a tapped 4/4 green Troll Warrior creature token with trample.'\"";
}
@Override

View file

@ -55,7 +55,7 @@ public final class OrvarTheAllForm extends CardImpl {
// Whenever you cast an instant or sorcery spell, if it targets one or more other permanents you control, create a token that's a copy of one of those permanents.
this.addAbility(new SpellCastControllerTriggeredAbility(
new OrvarTheAllFormEffect(),
StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY,
StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY,
false, SetTargetPointer.SPELL
).withInterveningIf(OrvarTheAllFormCondition.instance));

View file

@ -18,7 +18,7 @@ import java.util.UUID;
*/
public final class OversoldCemetery extends CardImpl {
private static final Condition condition = new CardsInControllerGraveyardCondition(4, StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD);
private static final Condition condition = new CardsInControllerGraveyardCondition(4, StaticFilters.FILTER_CARD_CREATURES);
public OversoldCemetery(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}");

View file

@ -65,7 +65,7 @@ class PardicDragonEffect extends OneShotEffect {
PardicDragonEffect() {
super(Outcome.Benefit);
this.staticText = "that player may put a time counter on {this}";
this.staticText = "that player may put a time counter on this card";
}
private PardicDragonEffect(final PardicDragonEffect effect) {

View file

@ -24,7 +24,7 @@ public final class PaupersCage extends CardImpl {
// At the beginning of each opponent's upkeep, if that player has two or fewer cards in hand, Paupers' Cage deals 2 damage to that player.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
TargetController.OPPONENT, new DamageTargetEffect(2), false
TargetController.OPPONENT, new DamageTargetEffect(2, true, "that player"), false
).withInterveningIf(condition));
}

View file

@ -41,7 +41,7 @@ public final class PhyrexianTotem extends CardImpl {
// Whenever {this} is dealt damage, if it's a creature, sacrifice that many permanents.
this.addAbility(new DealtDamageToSourceTriggeredAbility(
new SacrificeControllerEffect(StaticFilters.FILTER_PERMANENTS, SavedDamageValue.MANY, ""), false
).withInterveningIf(PhyrexianTotemCondition.instance));
).withInterveningIf(PhyrexianTotemCondition.instance).setTriggerPhrase("Whenever this permanent is dealt damage, "));
}
private PhyrexianTotem(final PhyrexianTotem card) {

View file

@ -30,7 +30,7 @@ public final class PlanarCollapse extends CardImpl {
// At the beginning of your upkeep, if there are four or more creatures on the battlefield, sacrifice Planar Collapse and destroy all creatures. They can't be regenerated.
Ability ability = new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceEffect()).withInterveningIf(condition);
ability.addEffect(new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_CREATURE, true).concatBy("and"));
ability.addEffect(new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_CREATURES, true).concatBy("and"));
this.addAbility(ability);
}

View file

@ -45,7 +45,7 @@ public final class ProgenitorMimic extends CardImpl {
new BeginningOfUpkeepTriggeredAbility(
new CreateTokenCopySourceEffect().setText("create a token that's a copy of this creature")
).withInterveningIf(condition)
)).setText("as a copy of any creature on the battlefield except it has " +
)).setText("as a copy of any creature on the battlefield, except it has " +
"\"At the beginning of your upkeep, if this creature isn't a token, " +
"create a token that's a copy of this creature.\""), true
));

View file

@ -34,7 +34,7 @@ public final class PyreZombie extends CardImpl {
// At the beginning of your upkeep, if Pyre Zombie is in your graveyard, you may pay {1}{B}{B}. If you do, return Pyre Zombie to your hand.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD,
TargetController.YOU, new DoIfCostPaid(new ReturnToHandSourceEffect().setText("return {this} to your hand"), new ManaCostsImpl<>("{1}{B}{B}")),
TargetController.YOU, new DoIfCostPaid(new ReturnToHandSourceEffect().setText("return it to your hand"), new ManaCostsImpl<>("{1}{B}{B}")),
false).withInterveningIf(SourceInGraveyardCondition.instance));
// {1}{R}{R}, Sacrifice Pyre Zombie: Pyre Zombie deals 2 damage to any target.

View file

@ -30,7 +30,7 @@ public final class PyrewildShaman extends CardImpl {
// Whenever one or more creatures you control deal combat damage to a player, if Pyrewild Shaman is in your graveyard, you may pay {3}. If you do, return Pyrewild Shaman to your hand.
this.addAbility(new OneOrMoreCombatDamagePlayerTriggeredAbility(Zone.GRAVEYARD, new DoIfCostPaid(
new ReturnToHandSourceEffect().setText("return {this} to your hand"),
new ReturnToHandSourceEffect().setText("return this card to your hand"),
new ManaCostsImpl<>("{3}")
), StaticFilters.FILTER_PERMANENT_CREATURES, SetTargetPointer.NONE, false)
.withInterveningIf(SourceInGraveyardCondition.instance));

View file

@ -36,7 +36,9 @@ public final class QueenMarchesa extends CardImpl {
// Deathtouch
this.addAbility(DeathtouchAbility.getInstance());
// Haste
this.addAbility(HasteAbility.getInstance());
// When Queen Marchesa enters the battlefield, you become the monarch.
this.addAbility(new EntersBattlefieldTriggeredAbility(new BecomesMonarchSourceEffect()).addHint(MonarchHint.instance));

View file

@ -24,7 +24,7 @@ public final class RazorPendulum extends CardImpl {
// At the beginning of each players end step, if that player has 5 or less life, Razor Pendulum deals 2 damage to that player.
this.addAbility(new BeginningOfEndStepTriggeredAbility(
TargetController.ANY,
TargetController.EACH_PLAYER,
new DamageTargetEffect(2, true, "that player"),
false, condition
).withTargetPointerSet(true));

View file

@ -68,7 +68,7 @@ class ReservoirKrakenEffect extends OneShotEffect {
public ReservoirKrakenEffect() {
super(Outcome.Tap);
this.staticText = "any opponent may tap an untapped creature they control. If they do, tap {this} and create a 1/1 blue Fish creature token with \"This creature can't be blocked.\"";
this.staticText = "any opponent may tap an untapped creature they control. If they do, tap {this} and create a 1/1 blue Fish creature token with \"This token can't be blocked.\"";
}
private ReservoirKrakenEffect(final ReservoirKrakenEffect effect) {

View file

@ -60,8 +60,8 @@ class RetrieverPhoenixEffect extends ReplacementEffectImpl {
RetrieverPhoenixEffect() {
super(Duration.WhileInGraveyard, Outcome.PutCreatureInPlay);
staticText = "as long as {this} is in your graveyard, if you would learn, " +
"you may instead return {this} to the battlefield";
staticText = "as long as this card is in your graveyard, if you would learn, " +
"you may instead return this card to the battlefield";
}
private RetrieverPhoenixEffect(final RetrieverPhoenixEffect effect) {

View file

@ -74,6 +74,11 @@ enum RobberOfTheRichAttacksCondition implements Condition {
&& player != null
&& controller.getHand().size() < player.getHand().size();
}
@Override
public String toString() {
return "defending player has more cards in hand than you";
}
}
class RogueAttackedThisTurnCondition implements Condition {

View file

@ -9,6 +9,7 @@ import mage.abilities.keyword.FirstStrikeAbility;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
@ -33,7 +34,7 @@ public final class SabertoothOutrider extends CardImpl {
// <i>Formidable</i> &mdash; Whenever Sabertooth Outrider attacks, if creatures you control have total power 8 or greater, Sabertooth Outrider gains first strike until end of turn.
this.addAbility(new AttacksTriggeredAbility(new GainAbilitySourceEffect(
FirstStrikeAbility.getInstance(), Duration.EndOfTurn
)).withInterveningIf(FormidableCondition.instance));
)).withInterveningIf(FormidableCondition.instance).setAbilityWord(AbilityWord.FORMIDABLE));
}
private SabertoothOutrider(final SabertoothOutrider card) {

View file

@ -30,7 +30,7 @@ public final class SandScout extends CardImpl {
filter.add(SubType.DESERT.getPredicate());
}
private static final Condition condition = new OpponentControlsMoreCondition(StaticFilters.FILTER_LAND);
private static final Condition condition = new OpponentControlsMoreCondition(StaticFilters.FILTER_LANDS);
public SandScout(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");

View file

@ -38,7 +38,7 @@ public final class ScabClanBerserker extends CardImpl {
this.addAbility(new SpellCastOpponentTriggeredAbility(
Zone.BATTLEFIELD,
new DamageTargetEffect(2, true, "that player"),
StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.PLAYER
StaticFilters.FILTER_SPELL_A_NON_CREATURE, false, SetTargetPointer.PLAYER
).withInterveningIf(RenownedSourceCondition.THIS));
}

View file

@ -29,7 +29,7 @@ public final class ScoutingHawk extends CardImpl {
filter.add(SubType.PLAINS.getPredicate());
}
private static final Condition condition = new OpponentControlsMoreCondition(StaticFilters.FILTER_LAND);
private static final Condition condition = new OpponentControlsMoreCondition(StaticFilters.FILTER_LANDS);
public ScoutingHawk(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");

View file

@ -41,8 +41,8 @@ public final class ShelteredValley extends CardImpl {
// If Sheltered Valley would enter the battlefield, instead sacrifice each other permanent named Sheltered Valley you control, then put Sheltered Valley onto the battlefield.
this.addAbility(new SimpleStaticAbility(
Zone.ALL, new EnterBattlefieldPayCostOrPutGraveyardEffect(new SacrificeAllCost(filter))
.setText("If {this} would enter the battlefield, instead sacrifice each other " +
"permanent named Sheltered Valley you control, then put {this} onto the battlefield.")
.setText("If {this} would enter, instead sacrifice each other permanent " +
"named Sheltered Valley you control, then put {this} onto the battlefield.")
));
// At the beginning of your upkeep, if you control three or fewer lands, you gain 1 life.

View file

@ -26,7 +26,7 @@ public final class ShriekingAffliction extends CardImpl {
// At the beginning of each opponent's upkeep, if that player has one or fewer cards in hand, they lose 3 life.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
Zone.BATTLEFIELD, TargetController.OPPONENT, new LoseLifeTargetEffect(3), false
Zone.BATTLEFIELD, TargetController.OPPONENT, new LoseLifeTargetEffect(3).setText("they lose 3 life"), false
).withInterveningIf(condition));
}

View file

@ -48,7 +48,7 @@ public final class SidequestPlayBlitzball extends CardImpl {
this.addAbility(new TransformAbility());
ability = new EndOfCombatTriggeredAbility(
new TransformSourceEffect(), TargetController.YOU, false
).withInterveningIf(SidequestPlayBlitzballCondition.instance);
).withInterveningIf(SidequestPlayBlitzballCondition.instance).setTriggerPhrase("At the end of combat on your turn, ");
ability.addEffect(new SidequestPlayBlitzballEffect());
this.addAbility(ability, new SidequestPlayBlitzballWatcher());
}

View file

@ -67,6 +67,7 @@ class SiegeGangLieutenantEffect extends OneShotEffect {
SiegeGangLieutenantEffect() {
super(Outcome.Benefit);
staticText = "create two 1/1 red Goblin creature tokens. Those tokens gain haste until end of turn";
}
private SiegeGangLieutenantEffect(final SiegeGangLieutenantEffect effect) {

View file

@ -42,7 +42,7 @@ public final class Skizzik extends CardImpl {
// At the beginning of the end step, if Skizzik wasn't kicked, sacrifice it.
this.addAbility(new BeginningOfEndStepTriggeredAbility(
TargetController.NEXT, new SacrificeSourceEffect(), false, condition
TargetController.NEXT, new SacrificeSourceEffect().setText("sacrifice it"), false, condition
));
}

View file

@ -69,7 +69,7 @@ enum SkyclaveShadeCondition implements Condition {
@Override
public String toString() {
return "{this} is in your graveyard and it's your turn";
return "this card is in your graveyard and it's your turn";
}
}

View file

@ -22,7 +22,7 @@ import java.util.UUID;
*/
public final class SorinOfHouseMarkov extends CardImpl {
private static final Condition condition = new YouGainedLifeCondition(ComparisonType.OR_GREATER, 3);
private static final Condition condition = new YouGainedLifeCondition(ComparisonType.MORE_THAN, 2);
private static final Hint hint = new ConditionHint(condition);
public SorinOfHouseMarkov(UUID ownerId, CardSetInfo setInfo) {
@ -45,7 +45,7 @@ public final class SorinOfHouseMarkov extends CardImpl {
// At the beginning of your postcombat main phase, if you gained 3 or more life this turn, exile Sorin of House Markov, then return him to the battlefield transformed under his owner's control.
this.addAbility(new TransformAbility());
this.addAbility(new BeginningOfPostcombatMainTriggeredAbility(
new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD_TRANSFORMED, Pronoun.SHE), false
new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD_TRANSFORMED, Pronoun.HE), false
).withInterveningIf(condition).addHint(hint), new PlayerGainedLifeWatcher());
}

View file

@ -4,7 +4,7 @@ import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.CantBlockAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.CastFromEverywhereSourceCondition;
import mage.abilities.condition.common.CastFromHandSourcePermanentCondition;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.DamageTargetEffect;
@ -37,7 +37,7 @@ public final class SoulhunterRakshasa extends CardImpl {
// When Soulhunter Rakshasa enters the battlefield, if you cast it from your hand, it deals 1 damage to target opponent for each Swamp you control.
Ability ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(xValue))
.withInterveningIf(CastFromEverywhereSourceCondition.instance);
.withInterveningIf(CastFromHandSourcePermanentCondition.instance);
ability.addTarget(new TargetOpponent());
this.addAbility(ability, new CastFromHandWatcher());
}

View file

@ -31,7 +31,7 @@ public final class SpiritualSanctuary extends CardImpl {
// At the beginning of each player's upkeep, if that player controls a Plains, they gain 1 life.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
TargetController.ANY, new GainLifeTargetEffect(1).setText("they gain 1 life"), false
TargetController.EACH_PLAYER, new GainLifeTargetEffect(1).setText("they gain 1 life"), false
).withInterveningIf(condition));
}

View file

@ -8,10 +8,7 @@ import mage.abilities.keyword.HasteAbility;
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.*;
import mage.target.common.TargetControlledCreaturePermanent;
import java.util.UUID;
@ -34,7 +31,7 @@ public final class SurrakTheHuntCaller extends CardImpl {
HasteAbility.getInstance(), Duration.EndOfTurn
)).withInterveningIf(FormidableCondition.instance);
ability.addTarget(new TargetControlledCreaturePermanent());
this.addAbility(ability);
this.addAbility(ability.setAbilityWord(AbilityWord.FORMIDABLE));
}
private SurrakTheHuntCaller(final SurrakTheHuntCaller card) {

View file

@ -4,7 +4,7 @@ import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.KickedCondition;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.abilities.keyword.KickerAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
@ -32,7 +32,7 @@ public final class TazeemRoilmage extends CardImpl {
this.addAbility(new KickerAbility("{4}"));
// When Tazeem Roilmage enters the battlefield, if it was kicked, return target instant or sorcery card from your graveyard to your hand.
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()).withInterveningIf(KickedCondition.ONCE);
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect()).withInterveningIf(KickedCondition.ONCE);
ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY_FROM_YOUR_GRAVEYARD));
this.addAbility(ability);
}

View file

@ -40,7 +40,7 @@ public final class TetsuoImperialChampion extends CardImpl {
static final GreatestAmongPermanentsValue xValue = new GreatestAmongPermanentsValue(GreatestAmongPermanentsValue.Quality.ManaValue, filterEquipment);
private static final FilterCard filter = new FilterInstantOrSorceryCard(
"an instant or sorcery spell from your hand with mana value " +
"less than or equal to the highest mana value among Equipment attached to {this}"
"less than or equal to the greatest mana value among Equipment attached to {this}"
);
static {
@ -62,7 +62,7 @@ public final class TetsuoImperialChampion extends CardImpl {
new DamageTargetEffect(xValue, "it")
.setText("{this} deals damage equal to the greatest mana value " +
"among Equipment attached to it to any target")
).setTriggerPhrase("Whenever {this} attacks, if it's equipped, ").withInterveningIf(EquippedSourceCondition.instance);
).withInterveningIf(EquippedSourceCondition.instance);
ability.addTarget(new TargetAnyTarget());
// * You may cast an instant or sorcery spell from your hand with mana value less than or equal to the greatest mana value among Equipment attached to Tetsuo without paying its mana cost.

View file

@ -37,7 +37,7 @@ public final class TinybonesTrinketThief extends CardImpl {
// At the beginning of each end step, if an opponent discarded a card this turn, you draw a card and you lose 1 life.
Ability ability = new BeginningOfEndStepTriggeredAbility(
TargetController.EACH_PLAYER, new DrawCardSourceControllerEffect(1, true),
TargetController.ANY, new DrawCardSourceControllerEffect(1, true),
false, TinybonesTrinketThiefCondition.instance
);
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));

View file

@ -3,6 +3,7 @@ package mage.cards.t;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.MetalcraftCondition;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.decorator.ConditionalOneShotEffect;
import mage.abilities.effects.common.AddContinuousEffectToGame;
@ -14,10 +15,8 @@ import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.ComparisonType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledArtifactPermanent;
import java.util.UUID;
@ -30,9 +29,6 @@ public final class ToolcraftExemplar extends CardImpl {
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
new FilterControlledArtifactPermanent("you control an artifact")
);
private static final Condition condition2 = new PermanentsOnTheBattlefieldCondition(
StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT, ComparisonType.MORE_THAN, 2
);
public ToolcraftExemplar(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}");
@ -48,7 +44,7 @@ public final class ToolcraftExemplar extends CardImpl {
)).withInterveningIf(condition);
ability.addEffect(new ConditionalOneShotEffect(new AddContinuousEffectToGame(
new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn)
), condition2, "If you control at least 3 artifacts, it also gains first strike until end of turn"));
), MetalcraftCondition.instance, "If you control three or more artifacts, it also gains first strike until end of turn"));
this.addAbility(ability.addHint(ArtifactYouControlHint.instance));
}

View file

@ -42,7 +42,7 @@ public final class UnstoppableSlasher extends CardImpl {
new ReturnSourceFromGraveyardToBattlefieldWithCounterEffect(
CounterType.STUN.createInstance(2),
true, true, false, false
), false
).setText("return it to the battlefield tapped under its owner's control with two stun counters on it")
).withInterveningIf(UnstoppableSlasherCondition.instance));
}

View file

@ -41,7 +41,7 @@ public final class UrborgStalker extends CardImpl {
// At the beginning of each player's upkeep, if that player controls a nonblack, nonland permanent, Urborg Stalker deals 1 damage to that player.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
TargetController.ANY, new DamageTargetEffect(1, true, "that player"), false
TargetController.EACH_PLAYER, new DamageTargetEffect(1, true, "that player"), false
).withInterveningIf(condition));
}

View file

@ -52,7 +52,7 @@ public final class VampireSocialite extends CardImpl {
filter, CounterType.P1P1.createInstance(), true
), OpponentsLostLifeCondition.instance
).setText("as long as an opponent lost life this turn, " +
"each other Vampire you control enters the battlefield with an additional +1/+1 counter on it")));
"each other Vampire you control enters with an additional +1/+1 counter on it")));
}
private VampireSocialite(final VampireSocialite card) {

View file

@ -56,7 +56,7 @@ class VengefulPharaohTriggeredAbility extends TriggeredAbilityImpl implements Ba
VengefulPharaohTriggeredAbility() {
super(Zone.GRAVEYARD, new DestroyTargetEffect(), false);
this.addTarget(new TargetAttackingCreature());
this.addEffect(new PutOnLibrarySourceEffect(true).setText(", then put {this} on top of your library"));
this.addEffect(new PutOnLibrarySourceEffect(true).setText(", then put this card on top of your library"));
this.withInterveningIf(SourceInGraveyardCondition.instance);
setTriggerPhrase("Whenever combat damage is dealt to you or a planeswalker you control, ");
}
@ -95,5 +95,4 @@ class VengefulPharaohTriggeredAbility extends TriggeredAbilityImpl implements Ba
}
return false;
}
}

View file

@ -25,7 +25,7 @@ import java.util.UUID;
public final class ViconiaDrowApostate extends CardImpl {
private static final Condition condition
= new CardsInControllerGraveyardCondition(4, StaticFilters.FILTER_CARD_CREATURE);
= new CardsInControllerGraveyardCondition(4, StaticFilters.FILTER_CARD_CREATURES);
private static final Hint hint = new ValueHint(
"Creature cards in your graveyard",
new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURE)

View file

@ -25,7 +25,7 @@ import java.util.UUID;
public final class VoldarenAmbusher extends CardImpl {
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(
new FilterControlledPermanent(SubType.VAMPIRE, "Vampires you control")
new FilterControlledPermanent(SubType.VAMPIRE, "Vampires you control"), null
);
private static final Hint hint = new ValueHint("Vampires you control", xValue);

View file

@ -49,7 +49,10 @@ public final class VoodooDoll extends CardImpl {
// {X}{X}, {T}: Voodoo Doll deals damage equal to the number of pin counters on it to any target. X is the number of pin counters on Voodoo Doll.
ability = new SimpleActivatedAbility(
new DamageTargetEffect(new CountersSourceCount(CounterType.PIN)), new ManaCostsImpl<>("{X}{X}")
new DamageTargetEffect(new CountersSourceCount(CounterType.PIN))
.setText("{this} deals damage equal to the number of pin counters on it " +
"to any target. X is the number of pin counters on {this}"),
new ManaCostsImpl<>("{X}{X}")
);
ability.addCost(new TapSourceCost());
ability.addTarget(new TargetAnyTarget());

View file

@ -7,6 +7,7 @@ import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.hint.common.MorbidHint;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.game.permanent.token.ZombieToken;
@ -29,7 +30,7 @@ public final class Wakedancer extends CardImpl {
// <i>Morbid</i> &mdash; When Wakedancer enters the battlefield, if a creature died this turn, create a 2/2 black Zombie creature token.
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new ZombieToken()))
.withInterveningIf(MorbidCondition.instance).addHint(MorbidHint.instance));
.withInterveningIf(MorbidCondition.instance).setAbilityWord(AbilityWord.MORBID).addHint(MorbidHint.instance));
}
private Wakedancer(final Wakedancer card) {

View file

@ -33,7 +33,7 @@ public class WaveOfRats extends CardImpl {
this.addAbility(TrampleAbility.getInstance());
// When Wave of Rats dies, if it dealt combat damage to a player this turn, return it to the battlefield under its owners control.
this.addAbility(new DiesSourceTriggeredAbility(new ReturnToBattlefieldUnderOwnerControlSourceEffect())
this.addAbility(new DiesSourceTriggeredAbility(new ReturnToBattlefieldUnderOwnerControlSourceEffect().setText("return it to the battlefield under its owner's control"))
.withInterveningIf(WaveOfRatsDealtDamageToPlayerCondition.instance), new DamageDoneWatcher());
// Blitz {4}{B} (If you cast this spell for its blitz cost, it gains haste and When this creature dies, draw a card. Sacrifice it at the beginning of the next end step.)

View file

@ -71,7 +71,7 @@ class WitheringWispsActivatedAbility extends ActivatedAbilityImpl {
@Override
public String getRule() {
return super.getRule() + " Activate this ability no more times each turn than the number of snow Swamps you control.";
return super.getRule() + " Activate no more times each turn than the number of snow Swamps you control.";
}
@Override

View file

@ -48,7 +48,7 @@ public final class YshtolaNightsBlessed extends CardImpl {
// At the beginning of each end step, if a player lost 4 or more life this turn, you draw a card.
this.addAbility(new BeginningOfEndStepTriggeredAbility(
TargetController.ANY, new DrawCardSourceControllerEffect(1),
TargetController.ANY, new DrawCardSourceControllerEffect(1, true),
false, YshtolaNightsBlessedCondition.instance
).addHint(YshtolaNightsBlessedCondition.getHint()));

View file

@ -14,7 +14,7 @@ public class DiscardedByOpponentTriggeredAbility extends TriggeredAbilityImpl {
public DiscardedByOpponentTriggeredAbility(Effect effect) {
super(Zone.GRAVEYARD, effect, false);
setTriggerPhrase("When a spell or ability an opponent controls causes you to discard this card");
setTriggerPhrase("When a spell or ability an opponent controls causes you to discard this card, ");
}
protected DiscardedByOpponentTriggeredAbility(final DiscardedByOpponentTriggeredAbility ability) {

View file

@ -40,7 +40,7 @@ public class EndOfCombatTriggeredAbility extends AtStepTriggeredAbility {
case ANY:
return "At end of combat, ";
case YOU:
return "At the end of combat on your turn, ";
return "At end of combat on your turn, ";
default:
throw new UnsupportedOperationException("Unsupported TargetController in EndOfCombatTriggeredAbility: " + targetController);
}

View file

@ -27,4 +27,9 @@ public enum AddendumCondition implements Condition {
Spell spell = game.getSpell(source.getSourceId());
return spell != null && !spell.isCopy(); // copies are not casted
}
@Override
public String toString() {
return "you cast it during your main phase";
}
}

View file

@ -31,6 +31,6 @@ public enum SourceAttackingPlayerWithMostLifeCondition implements Condition {
@Override
public String toString() {
return "{this} is attacking the player with the most life or tied for most life";
return "it's attacking the player with the most life or tied for most life";
}
}

View file

@ -25,6 +25,6 @@ public enum SourceEnteredThisTurnCondition implements Condition {
@Override
public String toString() {
return "{this} " + (flag ? "entered" : "didn't enter") + " the battlefield this turn";
return "{this} " + (flag ? "entered" : "didn't enter the battlefield") + " this turn";
}
}

View file

@ -20,6 +20,6 @@ public enum SourceInExileCondition implements Condition {
@Override
public String toString() {
return "{this} is exiled";
return "this card is exiled";
}
}

View file

@ -43,7 +43,6 @@ public enum SuspendedCondition implements Condition {
@Override
public String toString() {
return "{this} is suspended";
return "this card is suspended";
}
}

View file

@ -6,6 +6,7 @@ import mage.constants.Outcome;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.targetpointer.FixedTarget;
import mage.util.CardUtil;
/**
* Created by glerman on 20/6/15.
@ -27,7 +28,7 @@ public class CreateTokenCopySourceEffect extends OneShotEffect {
super(Outcome.PutCreatureInPlay);
this.number = copies;
this.tapped = tapped;
staticText = "create " + (copies > 1 ? copies : "a") + " " + (tapped ? "tapped " : "")
staticText = "create " + CardUtil.numberToText(copies, "a") + " " + (tapped ? "tapped " : "")
+ (copies > 1 ? "tokens that are" : "token that's") + " a copy of {this}";
}

View file

@ -41,7 +41,7 @@ public class MeldEffect extends OneShotEffect {
this.meldWithName = meldWithName;
this.meldIntoName = meldIntoName;
this.attacking = attacking;
this.staticText = "exile them, then meld them into " + meldWithName;
this.staticText = "exile them, then meld them into " + meldIntoName;
}
protected MeldEffect(final MeldEffect effect) {

Some files were not shown because too many files have changed in this diff Show more