so many text fixes

This commit is contained in:
Evan Kranzler 2017-10-06 22:00:06 -04:00
parent bc2bfba02a
commit 0075535650
70 changed files with 163 additions and 126 deletions

View file

@ -56,7 +56,7 @@ import java.util.*;
*/ */
public class AdmiralBeckettBrass extends CardImpl { public class AdmiralBeckettBrass extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("other Pirates you control"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Pirates you control");
private static final FilterNonlandPermanent filter2 = new FilterNonlandPermanent("nonland permanent controlled by a player who was dealt combat damage by three or more Pirates this turn"); private static final FilterNonlandPermanent filter2 = new FilterNonlandPermanent("nonland permanent controlled by a player who was dealt combat damage by three or more Pirates this turn");
static { static {

View file

@ -49,7 +49,7 @@ import mage.filter.predicate.permanent.ControllerPredicate;
*/ */
public class BellowingAegisaur extends CardImpl { public class BellowingAegisaur extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("each other creature you control"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("other creature you control");
static { static {
filter.add(new ControllerPredicate(TargetController.YOU)); filter.add(new ControllerPredicate(TargetController.YOU));

View file

@ -54,7 +54,7 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public class CaptivatingCrew extends CardImpl { public class CaptivatingCrew extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("target creature an opponent controls"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls");
static { static {
filter.add(new ControllerPredicate(TargetController.OPPONENT)); filter.add(new ControllerPredicate(TargetController.OPPONENT));

View file

@ -53,7 +53,7 @@ import mage.players.Player;
public class DarienKingOfKjeldor extends CardImpl { public class DarienKingOfKjeldor extends CardImpl {
public DarienKingOfKjeldor(UUID ownerId, CardSetInfo setInfo) { public DarienKingOfKjeldor(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{W}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{W}{W}");
addSuperType(SuperType.LEGENDARY); addSuperType(SuperType.LEGENDARY);
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.SOLDIER); this.subtype.add(SubType.SOLDIER);
@ -74,6 +74,7 @@ public class DarienKingOfKjeldor extends CardImpl {
return new DarienKingOfKjeldor(this); return new DarienKingOfKjeldor(this);
} }
} }
class DarienKingOfKjeldorTriggeredAbility extends TriggeredAbilityImpl { class DarienKingOfKjeldorTriggeredAbility extends TriggeredAbilityImpl {
public DarienKingOfKjeldorTriggeredAbility() { public DarienKingOfKjeldorTriggeredAbility() {
@ -105,7 +106,7 @@ class DarienKingOfKjeldorTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever you are dealt damage, you may create that many 1/1 white Soldier creature tokens."; return "Whenever you're dealt damage, you may create that many 1/1 white Soldier creature tokens.";
} }
} }
@ -133,4 +134,4 @@ class DarienKingOfKjeldorEffect extends OneShotEffect {
} }
return false; return false;
} }
} }

View file

@ -65,7 +65,7 @@ import mage.players.Player;
public class DralnusPet extends CardImpl { public class DralnusPet extends CardImpl {
public DralnusPet(UUID ownerId, CardSetInfo setInfo) { public DralnusPet(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{U}");
this.subtype.add(SubType.SHAPESHIFTER); this.subtype.add(SubType.SHAPESHIFTER);
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
@ -77,7 +77,7 @@ public class DralnusPet extends CardImpl {
this.addAbility(new KickerAbility(kickerCosts)); this.addAbility(new KickerAbility(kickerCosts));
// If Dralnu's Pet was kicked, it enters the battlefield with flying and with X +1/+1 counters on it, where X is the discarded card's converted mana cost. // If Dralnu's Pet was kicked, it enters the battlefield with flying and with X +1/+1 counters on it, where X is the discarded card's converted mana cost.
Ability ability = new EntersBattlefieldAbility(new DralnusPetEffect(), KickedCondition.instance, Ability ability = new EntersBattlefieldAbility(new DralnusPetEffect(), KickedCondition.instance,
"If {this} was kicked, it enters the battlefield with flying and with X +1/+1 counters on it, where X is the discarded card's converted mana cost", ""); "If {this} was kicked, it enters the battlefield with flying and with X +1/+1 counters on it, where X is the discarded card's converted mana cost.", "");
ability.addEffect(new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield)); ability.addEffect(new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -84,7 +84,7 @@ public class DreamcallerSiren extends CardImpl {
ability.addTarget(new TargetNonlandPermanent(0, 2, false)); ability.addTarget(new TargetNonlandPermanent(0, 2, false));
this.addAbility(new ConditionalTriggeredAbility(ability, this.addAbility(new ConditionalTriggeredAbility(ability,
new PermanentsOnTheBattlefieldCondition(filter), new PermanentsOnTheBattlefieldCondition(filter),
"when {this} enters the battlefield, if you control another Pirate, tap up to two nonland permanents.")); "when {this} enters the battlefield, if you control another Pirate, tap up to two target nonland permanents."));
} }
public DreamcallerSiren(final DreamcallerSiren card) { public DreamcallerSiren(final DreamcallerSiren card) {

View file

@ -46,7 +46,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
*/ */
public class DroverOfTheMighty extends CardImpl { public class DroverOfTheMighty extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent("a Dinosaur"); private static final FilterPermanent filter = new FilterPermanent("Dinosaur");
static { static {
filter.add(new SubtypePredicate(SubType.DINOSAUR)); filter.add(new SubtypePredicate(SubType.DINOSAUR));

View file

@ -76,7 +76,7 @@ public class FathomFleetCaptain extends CardImpl {
this.addAbility(new ConditionalTriggeredAbility( this.addAbility(new ConditionalTriggeredAbility(
new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new PirateToken()), new GenericManaCost(2)), false), new AttacksTriggeredAbility(new DoIfCostPaid(new CreateTokenEffect(new PirateToken()), new GenericManaCost(2)), false),
new PermanentsOnTheBattlefieldCondition(filter), new PermanentsOnTheBattlefieldCondition(filter),
"Whenever {this} attacks, if you control another nontoken Pirate, you may pay {2}. If you do, creature a 2/2 black Pirate creature token with menace")); "Whenever {this} attacks, if you control another nontoken Pirate, you may pay {2}. If you do, create a 2/2 black Pirate creature token with menace"));
} }
public FathomFleetCaptain(final FathomFleetCaptain card) { public FathomFleetCaptain(final FathomFleetCaptain card) {

View file

@ -48,7 +48,7 @@ import mage.filter.predicate.mageobject.SupertypePredicate;
*/ */
public class FreyalisesRadiance extends CardImpl { public class FreyalisesRadiance extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent(); private static final FilterPermanent filter = new FilterPermanent("snow permanents");
static { static {
filter.add(new SupertypePredicate(SuperType.SNOW)); filter.add(new SupertypePredicate(SuperType.SNOW));

View file

@ -32,6 +32,7 @@ import mage.abilities.dynamicvalue.common.DomainValue;
import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.AbilityWord;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
@ -43,12 +44,12 @@ import mage.target.common.TargetCreaturePermanent;
public class GaeasMight extends CardImpl { public class GaeasMight extends CardImpl {
public GaeasMight(UUID ownerId, CardSetInfo setInfo) { public GaeasMight(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{G}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{G}");
// Domain - Target creature gets +1/+1 until end of turn for each basic land type among lands you control. // Domain - Target creature gets +1/+1 until end of turn for each basic land type among lands you control.
this.getSpellAbility().addEffect(new BoostTargetEffect(new DomainValue(), new DomainValue(), Duration.EndOfTurn)); this.getSpellAbility().addEffect(new BoostTargetEffect(new DomainValue(), new DomainValue(), Duration.EndOfTurn));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().setAbilityWord(AbilityWord.DOMAIN);
} }
public GaeasMight(final GaeasMight card) { public GaeasMight(final GaeasMight card) {

View file

@ -50,7 +50,7 @@ public class HierophantsChalice extends CardImpl {
// When Hierophant's Chalice enters the battlefield, target opponent loses 1 life and you gain 1 life. // When Hierophant's Chalice enters the battlefield, target opponent loses 1 life and you gain 1 life.
Ability ability = new EntersBattlefieldTriggeredAbility(new LoseLifeTargetEffect(1), false); Ability ability = new EntersBattlefieldTriggeredAbility(new LoseLifeTargetEffect(1), false);
ability.addEffect(new GainLifeEffect(1)); ability.addEffect(new GainLifeEffect(1).setText("and you gain one life."));
Target target = new TargetOpponent(); Target target = new TargetOpponent();
ability.addTarget(target); ability.addTarget(target);
this.addAbility(ability); this.addAbility(ability);

View file

@ -74,7 +74,9 @@ public class HuatliDinosaurKnight extends CardImpl {
this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4)); this.addAbility(new PlanswalkerEntersWithLoyalityCountersAbility(4));
// +2: Put two +1/+1 counters on up to one target Dinosaur you control. // +2: Put two +1/+1 counters on up to one target Dinosaur you control.
Ability ability = new LoyaltyAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance(2)), 2); Ability ability = new LoyaltyAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance(2))
.setText("Put two +1/+1 counters on up to one target Dinosaur you control."), 2
);
ability.addTarget(new TargetCreaturePermanent(0, 1, filter, false)); ability.addTarget(new TargetCreaturePermanent(0, 1, filter, false));
this.addAbility(ability); this.addAbility(ability);

View file

@ -40,7 +40,7 @@ import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SuperType; import mage.constants.SuperType;
import static mage.filter.StaticFilters.FILTER_PERMANENT_CREATURES; import mage.filter.StaticFilters;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
/** /**
@ -61,11 +61,11 @@ public class JaceIngeniousMindMage extends CardImpl {
this.addAbility(new LoyaltyAbility(new DrawCardSourceControllerEffect(1), 1)); this.addAbility(new LoyaltyAbility(new DrawCardSourceControllerEffect(1), 1));
// +1: Untap all creatures you control. // +1: Untap all creatures you control.
this.addAbility(new LoyaltyAbility(new UntapAllControllerEffect(FILTER_PERMANENT_CREATURES), 1)); this.addAbility(new LoyaltyAbility(new UntapAllControllerEffect(StaticFilters.FILTER_PERMANENT_CREATURES), 1));
// -9: Gain control of up to three target creatures. // -9: Gain control of up to three target creatures.
Ability ability = new LoyaltyAbility(new GainControlTargetEffect(Duration.Custom), -9); Ability ability = new LoyaltyAbility(new GainControlTargetEffect(Duration.Custom), -9);
ability.addTarget(new TargetCreaturePermanent(0, 3)); ability.addTarget(new TargetCreaturePermanent(0, 3, StaticFilters.FILTER_PERMANENT_CREATURES, false));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -77,7 +77,7 @@ public class JacesSentinel extends CardImpl {
ability.addEffect(new ConditionalContinuousEffect( ability.addEffect(new ConditionalContinuousEffect(
new CantBeBlockedSourceEffect(), new CantBeBlockedSourceEffect(),
new PermanentsOnTheBattlefieldCondition(filter), new PermanentsOnTheBattlefieldCondition(filter),
"and has can't be blocked")); "and can't be blocked"));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -122,6 +122,6 @@ class JokulmorderTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever you play an Island, you may untap {this}"; return "Whenever you play an Island, you may untap {this}.";
} }
} }

View file

@ -28,7 +28,6 @@
package mage.cards.k; package mage.cards.k;
import java.util.UUID; import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.common.PutIntoGraveFromBattlefieldSourceTriggeredAbility; import mage.abilities.common.PutIntoGraveFromBattlefieldSourceTriggeredAbility;
@ -36,7 +35,6 @@ import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.continuous.ControlEnchantedEffect; import mage.abilities.effects.common.continuous.ControlEnchantedEffect;
import mage.abilities.costs.OrCost; import mage.abilities.costs.OrCost;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.MultipliedValue; import mage.abilities.dynamicvalue.MultipliedValue;
import mage.abilities.dynamicvalue.common.CountersSourceCount; import mage.abilities.dynamicvalue.common.CountersSourceCount;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
@ -76,7 +74,9 @@ public class KrovikanWhispers extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ControlEnchantedEffect())); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ControlEnchantedEffect()));
// When Krovikan Whispers is put into a graveyard from the battlefield, you lose 2 life for each age counter on it. // When Krovikan Whispers is put into a graveyard from the battlefield, you lose 2 life for each age counter on it.
this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new LoseLifeSourceControllerEffect(new MultipliedValue(new CountersSourceCount(CounterType.AGE), 2)))); this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new LoseLifeSourceControllerEffect(new MultipliedValue(new CountersSourceCount(CounterType.AGE), 2))
.setText("you lose 2 life for each age counter on it.")
));
} }
public KrovikanWhispers(final KrovikanWhispers card) { public KrovikanWhispers(final KrovikanWhispers card) {
@ -88,4 +88,3 @@ public class KrovikanWhispers extends CardImpl {
return new KrovikanWhispers(this); return new KrovikanWhispers(this);
} }
} }

View file

@ -57,7 +57,7 @@ import mage.target.common.TargetCreatureOrPlayer;
public class LightningStorm extends CardImpl { public class LightningStorm extends CardImpl {
public LightningStorm(UUID ownerId, CardSetInfo setInfo) { public LightningStorm(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{R}{R}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{R}{R}");
// Lightning Storm deals X damage to target creature or player, where X is 3 plus the number of charge counters on it. // Lightning Storm deals X damage to target creature or player, where X is 3 plus the number of charge counters on it.
Effect effect = new DamageTargetEffect(new LightningStormCountCondition(CounterType.CHARGE)); Effect effect = new DamageTargetEffect(new LightningStormCountCondition(CounterType.CHARGE));
@ -67,7 +67,7 @@ public class LightningStorm extends CardImpl {
// Discard a land card: Put two charge counters on Lightning Storm. You may choose a new target for it. Any player may activate this ability but only if Lightning Storm is on the stack. // Discard a land card: Put two charge counters on Lightning Storm. You may choose a new target for it. Any player may activate this ability but only if Lightning Storm is on the stack.
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.STACK, SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.STACK,
new LightningStormAddCounterEffect(), new LightningStormAddCounterEffect(),
new DiscardTargetCost(new TargetCardInHand(new FilterLandCard()))); new DiscardTargetCost(new TargetCardInHand(new FilterLandCard("a land card"))));
ability.setMayActivate(TargetController.ANY); ability.setMayActivate(TargetController.ANY);
ability.addEffect(new InfoEffect("Any player may activate this ability but only if {this} is on the stack")); ability.addEffect(new InfoEffect("Any player may activate this ability but only if {this} is on the stack"));
this.addAbility(ability); this.addAbility(ability);

View file

@ -49,7 +49,7 @@ import mage.target.TargetSpell;
*/ */
public class LookoutsDispersal extends CardImpl { public class LookoutsDispersal extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent(); private static final FilterControlledPermanent filter = new FilterControlledPermanent("a Pirate");
static { static {
filter.add(new SubtypePredicate(SubType.PIRATE)); filter.add(new SubtypePredicate(SubType.PIRATE));

View file

@ -49,7 +49,7 @@ import mage.target.common.TargetCreatureOrPlayer;
*/ */
public class MakeshiftMunitions extends CardImpl { public class MakeshiftMunitions extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("artifact or creature you control"); private static final FilterControlledPermanent filter = new FilterControlledPermanent("artifact or creature");
static { static {
filter.add(Predicates.or( filter.add(Predicates.or(

View file

@ -59,18 +59,18 @@ public class MaliciousAdvice extends CardImpl {
} }
public MaliciousAdvice(UUID ownerId, CardSetInfo setInfo) { public MaliciousAdvice(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{X}{U}{B}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{U}{B}");
// Tap X target artifacts, creatures, and/or lands. You lose X life. // Tap X target artifacts, creatures, and/or lands. You lose X life.
Effect effect = new TapTargetEffect(); Effect effect = new TapTargetEffect();
effect.setText("Tap X target artifacts, creatures, and/or lands"); effect.setText("X target artifacts, creatures, and/or lands");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(new ManacostVariableValue())); this.getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(new ManacostVariableValue()));
} }
@Override @Override
public void adjustTargets(Ability ability, Game game) { public void adjustTargets(Ability ability, Game game) {
if(ability instanceof SpellAbility) { if (ability instanceof SpellAbility) {
ability.getTargets().clear(); ability.getTargets().clear();
ability.addTarget(new TargetPermanent(ability.getManaCostsToPay().getX(), filter)); ability.addTarget(new TargetPermanent(ability.getManaCostsToPay().getX(), filter));
} }

View file

@ -61,7 +61,7 @@ public class MaraudingLooter extends CardImpl {
RaidCondition.instance, RaidCondition.instance,
"<i>Raid</i> &mdash; At the beginning of your end step, " "<i>Raid</i> &mdash; At the beginning of your end step, "
+ "if you attacked with a creature this turn, " + "if you attacked with a creature this turn, "
+ "you may draw a card. If you do, discard a card"); + "you may draw a card. If you do, discard a card.");
this.addAbility(ability, new PlayerAttackedWatcher()); this.addAbility(ability, new PlayerAttackedWatcher());
} }

View file

@ -30,7 +30,6 @@ package mage.cards.m;
import java.util.UUID; import java.util.UUID;
import mage.abilities.Mode; import mage.abilities.Mode;
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.abilities.effects.common.ReturnToHandTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -57,7 +56,7 @@ public class MarchOfTheDrowned extends CardImpl {
// Choose one // Choose one
// &amp;bull; Return target creature card from your graveyard to your hand. // &amp;bull; Return target creature card from your graveyard to your hand.
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(new FilterCreatureCard("creature card from your graveyard"))); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(new FilterCreatureCard("creature card from your graveyard")));
// &amp;bull; Return two target Pirate cards from your graveyard to your hand. // &amp;bull; Return two target Pirate cards from your graveyard to your hand.
Mode mode = new Mode(); Mode mode = new Mode();

View file

@ -46,7 +46,7 @@ import mage.constants.SubType;
public class MercurialKite extends CardImpl { public class MercurialKite extends CardImpl {
public MercurialKite(UUID ownerId, CardSetInfo setInfo) { public MercurialKite(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{U}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}");
this.subtype.add(SubType.BIRD); this.subtype.add(SubType.BIRD);
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
@ -56,7 +56,7 @@ public class MercurialKite extends CardImpl {
// Whenever Mercurial Kite deals combat damage to a creature, tap that creature. That creature doesn't untap during its controller's next untap step. // Whenever Mercurial Kite deals combat damage to a creature, tap that creature. That creature doesn't untap during its controller's next untap step.
Ability ability; Ability ability;
ability = new DealsDamageToACreatureTriggeredAbility(new TapTargetEffect("that creature"), true, false, true); ability = new DealsDamageToACreatureTriggeredAbility(new TapTargetEffect("that creature"), true, false, true);
ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect(". That creature")); ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect("That creature"));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -61,9 +61,9 @@ public class MinotaurTactician extends CardImpl {
filterBlue.add(new ColorPredicate(ObjectColor.BLUE)); filterBlue.add(new ColorPredicate(ObjectColor.BLUE));
} }
static final private String ruleWhite = "{this} gets +1/+1 as long as you control another white creature"; static final private String ruleWhite = "{this} gets +1/+1 as long as you control a white creature";
static final private String ruleBlue = "{this} gets +1/+1 as long as you control another blue creature"; static final private String ruleBlue = "{this} gets +1/+1 as long as you control a blue creature";
public MinotaurTactician(UUID ownerId, CardSetInfo setInfo) { public MinotaurTactician(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}");

View file

@ -58,7 +58,7 @@ public class PhyrexianEtchings extends CardImpl {
// When Phyrexian Etchings is put into a graveyard from the battlefield, you lose 2 life for each age counter on it. // When Phyrexian Etchings is put into a graveyard from the battlefield, you lose 2 life for each age counter on it.
this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new LoseLifeSourceControllerEffect(new MultipliedValue(new CountersSourceCount(CounterType.AGE), 2)) this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new LoseLifeSourceControllerEffect(new MultipliedValue(new CountersSourceCount(CounterType.AGE), 2))
.setText("When {this} is put into a graveyard from the battlefield, you lose 2 life for each age counter on it") .setText("you lose 2 life for each age counter on it")
)); ));
} }

View file

@ -100,7 +100,7 @@ class PhyrexianTyrannyTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever a player draws a card, that player loses 2 life unless he or she pays {2}"; return "Whenever a player draws a card, that player loses 2 life unless he or she pays {2}.";
} }
} }

View file

@ -59,7 +59,7 @@ import mage.target.common.TargetCardInLibrary;
*/ */
public class PriestOfTheWakeningSun extends CardImpl { public class PriestOfTheWakeningSun extends CardImpl {
private static final FilterCard filter = new FilterCard("a Dinosaur card"); private static final FilterCard filter = new FilterCard("Dinosaur card");
static { static {
filter.add(new SubtypePredicate(SubType.DINOSAUR)); filter.add(new SubtypePredicate(SubType.DINOSAUR));

View file

@ -58,7 +58,7 @@ public class RaidersWake extends CardImpl {
// Raid At the beginning of your end step, if you attacked with a creature this turn, target opponent discards a card. // Raid At the beginning of your end step, if you attacked with a creature this turn, target opponent discards a card.
Ability ability = new ConditionalTriggeredAbility( Ability ability = new ConditionalTriggeredAbility(
new BeginningOfEndStepTriggeredAbility(new DiscardTargetEffect(1), TargetController.YOU, false), RaidCondition.instance, new BeginningOfEndStepTriggeredAbility(new DiscardTargetEffect(1), TargetController.YOU, false), RaidCondition.instance,
"<i>Raid</i> - At the beginning of your end step, if you attacked with a creature this turn, target opponent discards a card"); "<i>Raid</i> - At the beginning of your end step, if you attacked with a creature this turn, target opponent discards a card.");
ability.addTarget(new TargetOpponent()); ability.addTarget(new TargetOpponent());
this.addAbility(ability, new PlayerAttackedWatcher()); this.addAbility(ability, new PlayerAttackedWatcher());
} }

View file

@ -45,7 +45,7 @@ import mage.target.common.TargetControlledPermanent;
*/ */
public class RavenGuildInitiate extends CardImpl { public class RavenGuildInitiate extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("a Bird you control"); private static final FilterControlledPermanent filter = new FilterControlledPermanent("a Bird");
static { static {
filter.add(new SubtypePredicate(SubType.BIRD)); filter.add(new SubtypePredicate(SubType.BIRD));

View file

@ -45,7 +45,7 @@ import mage.filter.predicate.mageobject.ColorPredicate;
/** /**
* *
* @author LoneFox * @author LoneFox
*
*/ */
public class RazingSnidd extends CardImpl { public class RazingSnidd extends CardImpl {
@ -56,7 +56,7 @@ public class RazingSnidd extends CardImpl {
} }
public RazingSnidd(UUID ownerId, CardSetInfo setInfo) { public RazingSnidd(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{B}{R}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}{R}");
this.subtype.add(SubType.BEAST); this.subtype.add(SubType.BEAST);
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
@ -64,7 +64,7 @@ public class RazingSnidd extends CardImpl {
// When Razing Snidd enters the battlefield, return a black or red creature you control to its owner's hand. // When Razing Snidd enters the battlefield, return a black or red creature you control to its owner's hand.
this.addAbility(new EntersBattlefieldTriggeredAbility(new ReturnToHandChosenControlledPermanentEffect(filter), false)); this.addAbility(new EntersBattlefieldTriggeredAbility(new ReturnToHandChosenControlledPermanentEffect(filter), false));
// When Razing Snidd enters the battlefield, each player sacrifices a land. // When Razing Snidd enters the battlefield, each player sacrifices a land.
this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeAllEffect(1, new FilterControlledLandPermanent("a land")), false)); this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeAllEffect(1, new FilterControlledLandPermanent("land")), false));
} }
public RazingSnidd(final RazingSnidd card) { public RazingSnidd(final RazingSnidd card) {

View file

@ -52,7 +52,7 @@ import mage.game.permanent.token.DinosaurToken;
*/ */
public class RegisaurAlpha extends CardImpl { public class RegisaurAlpha extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent("other Dinosaurss you control"); private static final FilterPermanent filter = new FilterPermanent("Dinosaurs");
static { static {
filter.add(new SubtypePredicate(SubType.DINOSAUR)); filter.add(new SubtypePredicate(SubType.DINOSAUR));

View file

@ -53,7 +53,7 @@ import mage.game.permanent.token.TreasureToken;
*/ */
public class RevelInRiches extends CardImpl { public class RevelInRiches extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature an opponent controls"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature an opponent controls");
private static final FilterPermanent filter2 = new FilterPermanent("Treasures"); private static final FilterPermanent filter2 = new FilterPermanent("Treasures");
static { static {

View file

@ -60,7 +60,7 @@ public class RiggingRunner extends CardImpl {
// Raid Rigging Runner enters the battlefield with a +1/+1 counter on it if you attacked with a creature this turn. // Raid Rigging Runner enters the battlefield with a +1/+1 counter on it if you attacked with a creature this turn.
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(1), false), this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(1), false),
RaidCondition.instance, RaidCondition.instance,
"<i>Raid</i> &mdash; {this} enters the battlefield with a +1/+1 counter on it if you attacked with a creature this turn", "<i>Raid</i> &mdash; {this} enters the battlefield with a +1/+1 counter on it if you attacked with a creature this turn.",
"{this} enters the battlefield with a +1/+1 counter"), "{this} enters the battlefield with a +1/+1 counter"),
new PlayerAttackedWatcher()); new PlayerAttackedWatcher());
} }

View file

@ -87,7 +87,12 @@ public class RimefeatherOwl extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(new PermanentsOnBattlefieldCount(filter2), Duration.EndOfGame))); this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(new PermanentsOnBattlefieldCount(filter2), Duration.EndOfGame)));
// {1}{snow}: Put an ice counter on target permanent. // {1}{snow}: Put an ice counter on target permanent.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.ICE.createInstance()), new ManaCostsImpl("{1}{S}")); Ability ability = new SimpleActivatedAbility(
Zone.BATTLEFIELD,
new AddCountersTargetEffect(CounterType.ICE.createInstance())
.setText("Put an ice counter on target permanent."),
new ManaCostsImpl("{1}{S}")
);
ability.addTarget(new TargetPermanent()); ability.addTarget(new TargetPermanent());
this.addAbility(ability); this.addAbility(ability);

View file

@ -53,7 +53,7 @@ import mage.target.common.TargetControlledPermanent;
*/ */
public class RuthlessKnave extends CardImpl { public class RuthlessKnave extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("three three Treasures"); private static final FilterControlledPermanent filter = new FilterControlledPermanent("three Treasures");
static { static {
filter.add(new SubtypePredicate(SubType.TREASURE)); filter.add(new SubtypePredicate(SubType.TREASURE));

View file

@ -48,7 +48,7 @@ import mage.target.common.TargetCreaturePermanent;
public class SamitePilgrim extends CardImpl { public class SamitePilgrim extends CardImpl {
public SamitePilgrim(UUID ownerId, CardSetInfo setInfo) { public SamitePilgrim(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.CLERIC); this.subtype.add(SubType.CLERIC);
this.power = new MageInt(1); this.power = new MageInt(1);
@ -57,6 +57,7 @@ public class SamitePilgrim extends CardImpl {
// Domain - {T}: Prevent the next X damage that would be dealt to target creature this turn, where X is the number of basic land types among lands you control. // Domain - {T}: Prevent the next X damage that would be dealt to target creature this turn, where X is the number of basic land types among lands you control.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SamitePilgrimPreventDamageToTargetEffect(), new TapSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SamitePilgrimPreventDamageToTargetEffect(), new TapSourceCost());
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
ability.setAbilityWord(AbilityWord.DOMAIN);
this.addAbility(ability); this.addAbility(ability);
} }
@ -72,7 +73,6 @@ public class SamitePilgrim extends CardImpl {
class SamitePilgrimPreventDamageToTargetEffect extends PreventionEffectImpl { class SamitePilgrimPreventDamageToTargetEffect extends PreventionEffectImpl {
public SamitePilgrimPreventDamageToTargetEffect() { public SamitePilgrimPreventDamageToTargetEffect() {
super(Duration.EndOfTurn, Integer.MAX_VALUE, false, true); super(Duration.EndOfTurn, Integer.MAX_VALUE, false, true);
staticText = "Prevent the next X damage that would be dealt to target creature this turn, where X is the number of basic land types among lands you control."; staticText = "Prevent the next X damage that would be dealt to target creature this turn, where X is the number of basic land types among lands you control.";

View file

@ -47,7 +47,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
*/ */
public class SanctumSeeker extends CardImpl { public class SanctumSeeker extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a Vampire you control attacks"); private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Vampire you control");
static { static {
filter.add(new SubtypePredicate(SubType.VAMPIRE)); filter.add(new SubtypePredicate(SubType.VAMPIRE));

View file

@ -58,7 +58,7 @@ public class ShipwreckLooter extends CardImpl {
Ability ability = new ConditionalTriggeredAbility( Ability ability = new ConditionalTriggeredAbility(
new EntersBattlefieldTriggeredAbility(new DrawDiscardControllerEffect(1, 1, true)), new EntersBattlefieldTriggeredAbility(new DrawDiscardControllerEffect(1, 1, true)),
RaidCondition.instance, RaidCondition.instance,
"<i>Raid</i> - When {this} enters the battlefield,if you attacked with a creature this turn, you may draw a card. If you do, discard a card."); "<i>Raid</i> - When {this} enters the battlefield, if you attacked with a creature this turn, you may draw a card. If you do, discard a card.");
this.addAbility(ability, new PlayerAttackedWatcher()); this.addAbility(ability, new PlayerAttackedWatcher());
} }

View file

@ -69,7 +69,7 @@ class SirensRuseEffect extends ExileTargetForSourceEffect {
SirensRuseEffect() { SirensRuseEffect() {
super(); super();
this.staticText = "Exile target creature you control, then return that card to the battlefield under its owner's control. If a Pirate was exiled this way, draw a card."; this.staticText = "Exile target creature you control, then return that card to the battlefield under its owner's control. If a Pirate was exiled this way, draw a card.";
} }
SirensRuseEffect(final SirensRuseEffect effect) { SirensRuseEffect(final SirensRuseEffect effect) {

View file

@ -37,7 +37,7 @@ import mage.util.CardUtil;
public class SkyshipWeatherlight extends CardImpl { public class SkyshipWeatherlight extends CardImpl {
public SkyshipWeatherlight(UUID ownerId, CardSetInfo setInfo) { public SkyshipWeatherlight(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{4}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}");
addSuperType(SuperType.LEGENDARY); addSuperType(SuperType.LEGENDARY);
// When Skyship Weatherlight enters the battlefield, search your library for any number of artifact and/or creature cards and exile them. Then shuffle your library. // When Skyship Weatherlight enters the battlefield, search your library for any number of artifact and/or creature cards and exile them. Then shuffle your library.
@ -73,7 +73,7 @@ class SkyshipWeatherlightEffect extends SearchEffect {
public SkyshipWeatherlightEffect() { public SkyshipWeatherlightEffect() {
super(new TargetCardInLibrary(0, Integer.MAX_VALUE, filter), Outcome.Neutral); super(new TargetCardInLibrary(0, Integer.MAX_VALUE, filter), Outcome.Neutral);
this.staticText = "search your library for any number of artifact and/or creature cards and remove them from the game. Then shuffle your library"; this.staticText = "search your library for any number of artifact and/or creature cards and exile them. Then shuffle your library";
} }
@ -114,7 +114,7 @@ class SkyshipWeatherlightEffect2 extends OneShotEffect {
public SkyshipWeatherlightEffect2() { public SkyshipWeatherlightEffect2() {
super(Outcome.ReturnToHand); super(Outcome.ReturnToHand);
this.staticText = "Choose a card at random that was removed from the game with {this}. Put that card into your hand"; this.staticText = "Choose a card at random that was exiled with {this}. Put that card into its owner's hand";
} }
public SkyshipWeatherlightEffect2(final SkyshipWeatherlightEffect2 effect) { public SkyshipWeatherlightEffect2(final SkyshipWeatherlightEffect2 effect) {

View file

@ -58,7 +58,7 @@ public class SnappingSailback extends CardImpl {
// Enrage Whenever Snapping Sailback is dealt damage, put a +1/+1 counter on it. // Enrage Whenever Snapping Sailback is dealt damage, put a +1/+1 counter on it.
this.addAbility(new DealtDamageToSourceTriggeredAbility(Zone.BATTLEFIELD, this.addAbility(new DealtDamageToSourceTriggeredAbility(Zone.BATTLEFIELD,
new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)) new AddCountersSourceEffect(CounterType.P1P1.createInstance(1))
.setText("put a +1/+1 counter on it"), false)); .setText("put a +1/+1 counter on it"), false, true));
} }
public SnappingSailback(final SnappingSailback card) { public SnappingSailback(final SnappingSailback card) {

View file

@ -69,7 +69,7 @@ class SpellSwindleEffect extends OneShotEffect {
public SpellSwindleEffect() { public SpellSwindleEffect() {
super(Outcome.Detriment); super(Outcome.Detriment);
staticText = "Counter target spell. Create X colorless Treasure artifact tokens, where X is that spell's converted mana cost. " staticText = "Counter target spell. Create X colorless Treasure artifact tokens, where X is that spell's converted mana cost. "
+ "They have \"{T}, Sacrifice this artifact: Add one mana of any color to your mana pool"; + "They have \"{T}, Sacrifice this artifact: Add one mana of any color to your mana pool\"";
} }
public SpellSwindleEffect(final SpellSwindleEffect effect) { public SpellSwindleEffect(final SpellSwindleEffect effect) {

View file

@ -47,7 +47,7 @@ public class StarOfExtinction extends CardImpl {
// Destroy target land. Star of Extinction deals 20 damage to each creature and each planeswalker. // Destroy target land. Star of Extinction deals 20 damage to each creature and each planeswalker.
this.getSpellAbility().addEffect(new DestroyTargetEffect()); this.getSpellAbility().addEffect(new DestroyTargetEffect());
this.getSpellAbility().addEffect(new DamageAllEffect(20, new FilterCreatureOrPlaneswalkerPermanent("each creature and each planeswalker"))); this.getSpellAbility().addEffect(new DamageAllEffect(20, new FilterCreatureOrPlaneswalkerPermanent("creature and each planeswalker")));
this.getSpellAbility().addTarget(new TargetLandPermanent()); this.getSpellAbility().addTarget(new TargetLandPermanent());
} }

View file

@ -105,6 +105,16 @@ class SunbirdsInvocationTriggeredAbility extends SpellCastControllerTriggeredAbi
public SunbirdsInvocationTriggeredAbility copy() { public SunbirdsInvocationTriggeredAbility copy() {
return new SunbirdsInvocationTriggeredAbility(this); return new SunbirdsInvocationTriggeredAbility(this);
} }
@Override
public String getRule() {
return "Whenever you cast a spell from your hand, "
+ "reveal the top X cards of your library, "
+ "where X is that spell's converted mana cost. "
+ "You may cast a card revealed this way with "
+ "converted mana cost X or less without paying its mana cost."
+ " Put the rest on the bottom of your library in a random order.";
}
} }
class SunbirdsInvocationEffect extends OneShotEffect { class SunbirdsInvocationEffect extends OneShotEffect {

View file

@ -36,7 +36,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.filter.FilterCard; import mage.filter.FilterCard;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.filter.predicate.mageobject.ColorPredicate; import mage.filter.predicate.mageobject.ColorPredicate;
import mage.target.common.TargetCardInHand; import mage.target.common.TargetCardInHand;
@ -47,18 +47,19 @@ import mage.target.common.TargetCardInHand;
public class Sunscour extends CardImpl { public class Sunscour extends CardImpl {
private static final FilterCard filter = new FilterCard("two white cards"); private static final FilterCard filter = new FilterCard("two white cards");
static { static {
filter.add(new ColorPredicate(ObjectColor.WHITE)); filter.add(new ColorPredicate(ObjectColor.WHITE));
} }
public Sunscour(UUID ownerId, CardSetInfo setInfo) { public Sunscour(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{5}{W}{W}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{5}{W}{W}");
// You may exile two white cards from your hand rather than pay Sunscour's mana cost. // You may exile two white cards from your hand rather than pay Sunscour's mana cost.
this.addAbility(new AlternativeCostSourceAbility(new ExileFromHandCost(new TargetCardInHand(2, filter)))); this.addAbility(new AlternativeCostSourceAbility(new ExileFromHandCost(new TargetCardInHand(2, filter))));
// Destroy all creatures. // Destroy all creatures.
this.getSpellAbility().addEffect(new DestroyAllEffect(new FilterCreaturePermanent())); this.getSpellAbility().addEffect(new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_CREATURES));
} }
public Sunscour(final Sunscour card) { public Sunscour(final Sunscour card) {

View file

@ -44,12 +44,12 @@ public class SurgingAether extends CardImpl {
public SurgingAether(UUID ownerId, CardSetInfo setInfo) { public SurgingAether(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{U}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{U}");
// Ripple 4
this.addAbility(new RippleAbility(4));
// Return target permanent to its owner's hand. // Return target permanent to its owner's hand.
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
this.getSpellAbility().addTarget(new TargetPermanent()); this.getSpellAbility().addTarget(new TargetPermanent());
// Ripple 4
this.addAbility(new RippleAbility(4));
} }
public SurgingAether(final SurgingAether card) { public SurgingAether(final SurgingAether card) {

View file

@ -54,7 +54,7 @@ public class TempestCaller extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// When Tempest Caller enters the battlefield, tap all creatures target opponent controls. // When Tempest Caller enters the battlefield, tap all creatures target opponent controls.
Ability ability = new EntersBattlefieldTriggeredAbility(new TapAllTargetPlayerControlsEffect(new FilterCreaturePermanent("creatures target opponent controls"))); Ability ability = new EntersBattlefieldTriggeredAbility(new TapAllTargetPlayerControlsEffect(new FilterCreaturePermanent("creatures")));
ability.addTarget(new TargetOpponent()); ability.addTarget(new TargetOpponent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -43,13 +43,12 @@ import mage.constants.CardType;
public class UrzasGuilt extends CardImpl { public class UrzasGuilt extends CardImpl {
public UrzasGuilt(UUID ownerId, CardSetInfo setInfo) { public UrzasGuilt(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{U}{B}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{U}{B}");
// Each player draws two cards, then discards three cards, then loses 4 life. // Each player draws two cards, then discards three cards, then loses 4 life.
this.getSpellAbility().addEffect(new DrawCardAllEffect(2)); this.getSpellAbility().addEffect(new DrawCardAllEffect(2));
Effect effect = new DiscardEachPlayerEffect(3, false); Effect effect = new DiscardEachPlayerEffect(3, false);
effect.setText("then discards three cards"); effect.setText("then discards three cards,");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
effect = new LoseLifeAllPlayersEffect(4); effect = new LoseLifeAllPlayersEffect(4);
effect.setText("then loses 4 life"); effect.setText("then loses 4 life");

View file

@ -128,6 +128,6 @@ class DrawCardIfCreatureTypeAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever you cast a creature spell of the chosen type, draw a card"; return "Whenever you cast a creature spell of the chosen type, draw a card.";
} }
} }

View file

@ -50,7 +50,7 @@ import mage.constants.Zone;
public class VeldraneOfSengir extends CardImpl { public class VeldraneOfSengir extends CardImpl {
public VeldraneOfSengir(UUID ownerId, CardSetInfo setInfo) { public VeldraneOfSengir(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{B}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{B}{B}");
addSuperType(SuperType.LEGENDARY); addSuperType(SuperType.LEGENDARY);
this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.ROGUE); this.subtype.add(SubType.ROGUE);
@ -58,8 +58,8 @@ public class VeldraneOfSengir extends CardImpl {
this.toughness = new MageInt(5); this.toughness = new MageInt(5);
// {1}{B}{B}: Veldrane of Sengir gets -3/-0 and gains forestwalk until end of turn. // {1}{B}{B}: Veldrane of Sengir gets -3/-0 and gains forestwalk until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(-3, -0, Duration.EndOfTurn), new ManaCostsImpl("{1}{B}{B}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(-3, -0, Duration.EndOfTurn).setText("{this} gets -3/-0"), new ManaCostsImpl("{1}{B}{B}"));
ability.addEffect(new GainAbilitySourceEffect(new ForestwalkAbility(false), Duration.EndOfTurn)); ability.addEffect(new GainAbilitySourceEffect(new ForestwalkAbility(false), Duration.EndOfTurn).setText("and gains forestwalk until end of turn"));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -59,7 +59,7 @@ public class VerdantSunsAvatar extends CardImpl {
this.power = new MageInt(5); this.power = new MageInt(5);
this.toughness = new MageInt(5); this.toughness = new MageInt(5);
// When Verdant Sun's Avatar or another creature enters the battlefield under your control, you gain life equal to that creature's toughness. // Whenever Verdant Sun's Avatar or another creature enters the battlefield under your control, you gain life equal to that creature's toughness.
this.addAbility(new VerdantSunsAvatarTriggeredAbility()); this.addAbility(new VerdantSunsAvatarTriggeredAbility());
} }
@ -104,7 +104,7 @@ class VerdantSunsAvatarTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "When {this} or another creature enters the battlefield under your control, " + super.getRule(); return "Whenever {this} or another creature enters the battlefield under your control, " + super.getRule();
} }
@Override @Override

View file

@ -90,7 +90,7 @@ class VraskaRelicSeekerDestroyEffect extends OneShotEffect {
VraskaRelicSeekerDestroyEffect() { VraskaRelicSeekerDestroyEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "Destroy target artifact, creature, or enchantment. Create a colorless Treasure artifact token with \"{T}, Sacrfice this artifact. Add one mana of any color to your mana pool.\""; this.staticText = "Destroy target artifact, creature, or enchantment. Create a colorless Treasure artifact token with \"{T}, Sacrifice this artifact. Add one mana of any color to your mana pool.\"";
} }
VraskaRelicSeekerDestroyEffect(final VraskaRelicSeekerDestroyEffect effect) { VraskaRelicSeekerDestroyEffect(final VraskaRelicSeekerDestroyEffect effect) {

View file

@ -62,8 +62,14 @@ public class WakerOfTheWilds extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// {X}{G}{G}: Put X +1/+1 counters on target land you control. That land becomes a 0/0 Elemental creature with haste that's still a land. // {X}{G}{G}: Put X +1/+1 counters on target land you control. That land becomes a 0/0 Elemental creature with haste that's still a land.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, Ability ability = new SimpleActivatedAbility(
new AddCountersTargetEffect(CounterType.P1P1.createInstance(0), new ManacostVariableValue()), new ManaCostsImpl("{X}{G}{G}")); Zone.BATTLEFIELD,
new AddCountersTargetEffect(
CounterType.P1P1.createInstance(0),
new ManacostVariableValue()
).setText("Put X +1/+1 counters on target land you control."),
new ManaCostsImpl("{X}{G}{G}")
);
Effect effect = new BecomesCreatureTargetEffect(new WallOfResurgenceToken(), false, true, Duration.Custom); Effect effect = new BecomesCreatureTargetEffect(new WallOfResurgenceToken(), false, true, Duration.Custom);
effect.setText("That land becomes a 0/0 Elemental creature with haste. It's still a land"); effect.setText("That land becomes a 0/0 Elemental creature with haste. It's still a land");
ability.addEffect(effect); ability.addEffect(effect);

View file

@ -69,7 +69,7 @@ public class WaterspoutElemental extends CardImpl {
EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandFromBattlefieldAllEffect(filter)); EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandFromBattlefieldAllEffect(filter));
ability.addEffect(new SkipNextTurnSourceEffect()); ability.addEffect(new SkipNextTurnSourceEffect());
this.addAbility(new ConditionalTriggeredAbility(ability, KickedCondition.instance, this.addAbility(new ConditionalTriggeredAbility(ability, KickedCondition.instance,
"When {this} enters the battlefield, if it was kicked, return all other creatures to their owners' hands and you skip your next turn")); "When {this} enters the battlefield, if it was kicked, return all other creatures to their owners' hands and you skip your next turn."));
} }
public WaterspoutElemental(final WaterspoutElemental card) { public WaterspoutElemental(final WaterspoutElemental card) {

View file

@ -47,7 +47,7 @@ public class CantBlockAbility extends SimpleStaticAbility {
@Override @Override
public String getRule() { public String getRule() {
return "{this} can't block"; return "{this} can't block.";
} }
@Override @Override

View file

@ -25,7 +25,6 @@
* authors and should not be interpreted as representing official policies, either expressed * authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com. * or implied, of BetaSteward_at_googlemail.com.
*/ */
package mage.abilities.condition.common; package mage.abilities.condition.common;
import mage.abilities.Ability; import mage.abilities.Ability;
@ -45,4 +44,8 @@ public enum RaidCondition implements Condition {
PlayerAttackedWatcher watcher = (PlayerAttackedWatcher) game.getState().getWatchers().get(PlayerAttackedWatcher.class.getSimpleName()); PlayerAttackedWatcher watcher = (PlayerAttackedWatcher) game.getState().getWatchers().get(PlayerAttackedWatcher.class.getSimpleName());
return watcher != null && watcher.getNumberOfAttackersCurrentTurn(source.getControllerId()) > 0; return watcher != null && watcher.getNumberOfAttackersCurrentTurn(source.getControllerId()) > 0;
} }
public String toString() {
return "if you attacked with a creature this turn";
}
} }

View file

@ -80,7 +80,6 @@ public class CantBeRegeneratedSourceEffect extends ContinuousRuleModifyingEffect
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("{this} can't be regenerated"); sb.append("{this} can't be regenerated");
if (!duration.toString().isEmpty()) { if (!duration.toString().isEmpty()) {
sb.append(' ');
if (duration == Duration.EndOfTurn) { if (duration == Duration.EndOfTurn) {
sb.append(" this turn"); sb.append(" this turn");
} else { } else {

View file

@ -243,7 +243,7 @@ public class LookLibraryControllerEffect extends OneShotEffect {
sb.append(" cards "); sb.append(" cards ");
} }
sb.append("of your Library"); sb.append("of your library");
if (numberLook == 0) { if (numberLook == 0) {
sb.append(", where {X} is the number of cards ").append(numberOfCards.getMessage()); sb.append(", where {X} is the number of cards ").append(numberOfCards.getMessage());
} }

View file

@ -31,6 +31,7 @@ import mage.abilities.Ability;
import mage.abilities.Mode; import mage.abilities.Mode;
import mage.abilities.effects.PreventionEffectImpl; import mage.abilities.effects.PreventionEffectImpl;
import mage.constants.Duration; import mage.constants.Duration;
import static mage.constants.Duration.EndOfTurn;
import mage.filter.FilterPermanent; import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game; import mage.game.Game;
@ -98,10 +99,19 @@ public class PreventAllDamageByAllPermanentsEffect extends PreventionEffectImpl
sb.append("combat "); sb.append("combat ");
} }
sb.append("damage "); sb.append("damage ");
sb.append(duration.toString()); if (duration == EndOfTurn) {
if (filter != null) { if (filter != null) {
sb.append(" dealt by "); sb.append(filter.getMessage());
sb.append(filter.getMessage()); sb.append(" would deal this turn");
} else {
sb.append("that would be dealt this turn");
}
} else {
sb.append(duration.toString());
if (filter != null) {
sb.append(" dealt by ");
sb.append(filter.getMessage());
}
} }
return sb.toString(); return sb.toString();
} }

View file

@ -31,6 +31,7 @@ import mage.abilities.Ability;
import mage.abilities.Mode; import mage.abilities.Mode;
import mage.abilities.effects.PreventionEffectImpl; import mage.abilities.effects.PreventionEffectImpl;
import mage.constants.Duration; import mage.constants.Duration;
import static mage.constants.Duration.EndOfTurn;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
@ -74,7 +75,12 @@ public class PreventDamageToSourceEffect extends PreventionEffectImpl {
} else { } else {
sb.append("Prevent the next ").append(amountToPrevent).append(" damage that would be dealt to "); sb.append("Prevent the next ").append(amountToPrevent).append(" damage that would be dealt to ");
} }
sb.append("{source} ").append(duration.toString()); sb.append("{source} ");
if (duration == EndOfTurn) {
sb.append("this turn");
} else {
sb.append(duration.toString());
}
return sb.toString(); return sb.toString();
} }
} }

View file

@ -25,7 +25,6 @@
* authors and should not be interpreted as representing official policies, either expressed * authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com. * or implied, of BetaSteward_at_googlemail.com.
*/ */
package mage.abilities.effects.common; package mage.abilities.effects.common;
import java.util.List; import java.util.List;
@ -60,10 +59,10 @@ public class TapAllTargetPlayerControlsEffect extends OneShotEffect {
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(targetPointer.getFirst(game, source)); Player player = game.getPlayer(targetPointer.getFirst(game, source));
if(player != null) { if (player != null) {
filter.add(new ControllerIdPredicate(player.getId())); filter.add(new ControllerIdPredicate(player.getId()));
List<Permanent> permanents = game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game); List<Permanent> permanents = game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game);
for(Permanent p : permanents) { for (Permanent p : permanents) {
p.tap(game); p.tap(game);
} }
return true; return true;
@ -78,9 +77,9 @@ public class TapAllTargetPlayerControlsEffect extends OneShotEffect {
@Override @Override
public String getText(Mode mode) { public String getText(Mode mode) {
if(staticText != null && !staticText.isEmpty()) { if (staticText != null && !staticText.isEmpty()) {
return staticText; return staticText;
} }
return "tap all " + filter.getMessage() + " target player controls"; return "tap all " + filter.getMessage() + " target " + mode.getTargets().get(0).getMessage() + " controls";
} }
} }

View file

@ -31,6 +31,7 @@ import mage.abilities.Ability;
import mage.abilities.effects.RestrictionEffect; import mage.abilities.effects.RestrictionEffect;
import mage.constants.AttachmentType; import mage.constants.AttachmentType;
import mage.constants.Duration; import mage.constants.Duration;
import static mage.constants.Duration.EndOfTurn;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
@ -61,7 +62,9 @@ public class CantBlockAttachedEffect extends RestrictionEffect {
if (!filter.getMessage().equals("creature")) { if (!filter.getMessage().equals("creature")) {
sb.append(' ').append(filter.getMessage()); sb.append(' ').append(filter.getMessage());
} }
if (!duration.toString().isEmpty()) { if (duration == EndOfTurn) {
sb.append("this turn");
} else if (!duration.toString().isEmpty()) {
sb.append(' ').append(duration.toString()); sb.append(' ').append(duration.toString());
} }
staticText = sb.toString(); staticText = sb.toString();

View file

@ -26,7 +26,7 @@ public class BecomesChosenCreatureTypeTargetEffect extends OneShotEffect {
super(Outcome.BoostCreature); super(Outcome.BoostCreature);
this.nonWall = nonWall; this.nonWall = nonWall;
if(nonWall) { if(nonWall) {
staticText = "choose a creature type other than wall. Target creature becomes that type until end of turn"; staticText = "choose a creature type other than Wall. Target creature becomes that type until end of turn";
} }
else { else {
staticText = "target creature becomes the creature type of your choice until end of turn"; staticText = "target creature becomes the creature type of your choice until end of turn";

View file

@ -138,7 +138,6 @@ public class BecomesCreatureAllEffect extends ContinuousEffectImpl {
if (duration.toString() != null && !duration.toString().isEmpty()) { if (duration.toString() != null && !duration.toString().isEmpty()) {
sb.append(duration.toString()).append(", "); sb.append(duration.toString()).append(", ");
} }
sb.append("all ");
sb.append(filter.getMessage()); sb.append(filter.getMessage());
if (duration.toString() != null && duration.toString().isEmpty()) { if (duration.toString() != null && duration.toString().isEmpty()) {
sb.append(" are "); sb.append(" are ");
@ -147,7 +146,7 @@ public class BecomesCreatureAllEffect extends ContinuousEffectImpl {
} }
sb.append(token.getDescription()); sb.append(token.getDescription());
if (type != null && !type.isEmpty()) { if (type != null && !type.isEmpty()) {
sb.append(". They are still ").append(type); sb.append(". They're still ").append(type);
} }
return sb.toString(); return sb.toString();
} }

View file

@ -53,7 +53,7 @@ public class GainAbilityControlledSpellsEffect extends ContinuousEffectImpl {
super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility); super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility);
this.ability = ability; this.ability = ability;
this.filter = filter; this.filter = filter;
staticText = filter.getMessage() + " you cast have " + ability.getRule(); staticText = filter.getMessage() + " you cast have " + ability.getRule() + '.';
} }
public GainAbilityControlledSpellsEffect(final GainAbilityControlledSpellsEffect effect) { public GainAbilityControlledSpellsEffect(final GainAbilityControlledSpellsEffect effect) {

View file

@ -36,6 +36,7 @@ import mage.filter.FilterPermanent;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.players.Player; import mage.players.Player;
import mage.util.CardUtil;
/** /**
* *
@ -82,7 +83,7 @@ public class AddCountersAllEffect extends OneShotEffect {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("put "); sb.append("put ");
if (counter.getCount() > 1) { if (counter.getCount() > 1) {
sb.append(Integer.toString(counter.getCount())).append(' ').append(counter.getName().toLowerCase()).append(" counters on each "); sb.append(CardUtil.numberToText(counter.getCount(), "a")).append(' ').append(counter.getName().toLowerCase()).append(" counters on each ");
} else { } else {
sb.append("a ").append(counter.getName().toLowerCase()).append(" counter on each "); sb.append("a ").append(counter.getName().toLowerCase()).append(" counter on each ");
} }

View file

@ -57,7 +57,7 @@ public class SearchLibraryGraveyardPutInHandEffect extends OneShotEffect {
super(Outcome.Benefit); super(Outcome.Benefit);
this.filter = filter; this.filter = filter;
this.forceToSearchBoth = forceToSearchBoth; this.forceToSearchBoth = forceToSearchBoth;
staticText = "search your library and" + (forceToSearchBoth ? "" : "/or ") + " graveyard for a card named " + filter.getMessage() staticText = "search your library and" + (forceToSearchBoth ? "" : "/or") + " graveyard for a card named " + filter.getMessage()
+ ", reveal it, and put it into your hand. " + (forceToSearchBoth ? "Then shuffle your library" : "If you search your library this way, shuffle it"); + ", reveal it, and put it into your hand. " + (forceToSearchBoth ? "Then shuffle your library" : "If you search your library this way, shuffle it");
} }

View file

@ -25,7 +25,6 @@
* authors and should not be interpreted as representing official policies, either expressed * authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com. * or implied, of BetaSteward_at_googlemail.com.
*/ */
package mage.abilities.keyword; package mage.abilities.keyword;
import mage.constants.Zone; import mage.constants.Zone;
@ -40,7 +39,7 @@ import java.io.ObjectStreamException;
*/ */
public class DeathtouchAbility extends StaticAbility implements MageSingleton { public class DeathtouchAbility extends StaticAbility implements MageSingleton {
private static final DeathtouchAbility instance = new DeathtouchAbility(); private static final DeathtouchAbility instance = new DeathtouchAbility();
private Object readResolve() throws ObjectStreamException { private Object readResolve() throws ObjectStreamException {
return instance; return instance;
@ -56,7 +55,7 @@ public class DeathtouchAbility extends StaticAbility implements MageSingleton {
@Override @Override
public String getRule() { public String getRule() {
return "Deathtouch <i>(Any amount of damage this deals to a creature is enough to destroy it.)</i>"; return "deathtouch";
} }
@Override @Override
@ -64,6 +63,4 @@ public class DeathtouchAbility extends StaticAbility implements MageSingleton {
return instance; return instance;
} }
} }

View file

@ -24,11 +24,9 @@
* The views and conclusions contained in the software and documentation are those of the * The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed * authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com. * or implied, of BetaSteward_at_googlemail.com.
*/ */
package mage.abilities.keyword; package mage.abilities.keyword;
import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.EvasionAbility; import mage.abilities.EvasionAbility;
@ -45,7 +43,7 @@ import java.io.ObjectStreamException;
*/ */
public class FearAbility extends EvasionAbility implements MageSingleton { public class FearAbility extends EvasionAbility implements MageSingleton {
private static final FearAbility instance = new FearAbility(); private static final FearAbility instance = new FearAbility();
private Object readResolve() throws ObjectStreamException { private Object readResolve() throws ObjectStreamException {
return instance; return instance;
@ -61,7 +59,7 @@ public class FearAbility extends EvasionAbility implements MageSingleton {
@Override @Override
public String getRule() { public String getRule() {
return "Fear"; return "fear";
} }
@Override @Override
@ -102,4 +100,4 @@ class FearEffect extends RestrictionEffect implements MageSingleton {
return new FearEffect(this); return new FearEffect(this);
} }
} }

View file

@ -32,15 +32,15 @@ import mage.constants.Zone;
import mage.abilities.StaticAbility; import mage.abilities.StaticAbility;
/** /**
* OLD RULES: * OLD RULES: 700.4. If a permanent is indestructible, rules and effects can't
* 700.4. If a permanent is indestructible, rules and effects can't destroy it. (See rule 701.6, "Destroy.") * destroy it. (See rule 701.6, "Destroy.") Such permanents are not destroyed by
* Such permanents are not destroyed by lethal damage, and they ignore the lethal-damage state-based action * lethal damage, and they ignore the lethal-damage state-based action (see rule
* (see rule 704.5g). Rules or effects may cause an indestructible permanent to be sacrificed, put into a * 704.5g). Rules or effects may cause an indestructible permanent to be
* graveyard, or exiled. # * sacrificed, put into a graveyard, or exiled. #
* *
* 700.4a Although the text "[This permanent] is indestructible" is an ability, actually being * 700.4a Although the text "[This permanent] is indestructible" is an ability,
* indestructible is neither an ability nor a characteristic. It's just something that's true * actually being indestructible is neither an ability nor a characteristic.
* about a permanent. * It's just something that's true about a permanent.
* *
* NEW RULES * NEW RULES
* *
@ -48,10 +48,9 @@ import mage.abilities.StaticAbility;
* *
* *
* *
* *
* @author BetaSteward_at_googlemail.com * @author BetaSteward_at_googlemail.com
*/ */
public class IndestructibleAbility extends StaticAbility { public class IndestructibleAbility extends StaticAbility {
private static final IndestructibleAbility instance; private static final IndestructibleAbility instance;
@ -79,7 +78,7 @@ public class IndestructibleAbility extends StaticAbility {
@Override @Override
public String getRule() { public String getRule() {
return "Indestructible"; return "indestructible";
} }
} }