[TSR] various text fixes

This commit is contained in:
Evan Kranzler 2021-03-09 20:01:32 -05:00
parent 2c168856c5
commit 1dfde6d622
37 changed files with 167 additions and 134 deletions

View file

@ -30,7 +30,7 @@ public final class ArcBlade extends CardImpl {
this.getSpellAbility().addEffect(ExileSpellEffect.getInstance());
// with three time counters on it.
Effect effect = new AddCountersSourceEffect(CounterType.TIME.createInstance(), StaticValue.get(3), false, true);
effect.setText("with 3 time counters on it");
effect.setText("with three time counters on it");
this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addTarget(new TargetAnyTarget());

View file

@ -25,7 +25,7 @@ import java.util.UUID;
public final class ArcadesTheStrategist extends CardImpl {
private static final FilterControlledCreaturePermanent filter
= new FilterControlledCreaturePermanent("creature with defender");
= new FilterControlledCreaturePermanent("a creature with defender");
private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent();
static {

View file

@ -32,10 +32,10 @@ public final class BedlamReveler extends CardImpl {
this.toughness = new MageInt(4);
// This spell costs {1} less to cast for each instant and sorcery card in your graveyard.
DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY);
DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_INSTANT_AND_SORCERY);
Ability ability = new SimpleStaticAbility(Zone.ALL, new SpellCostReductionForEachSourceEffect(1, xValue));
ability.setRuleAtTheTop(true);
ability.addHint(new ValueHint("Instant or sourcery card in your graveyard", xValue));
ability.addHint(new ValueHint("Instant and sorcery card in your graveyard", xValue));
this.addAbility(ability);
// Prowess

View file

@ -5,7 +5,7 @@ import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.PreventDamageToTargetEffect;
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
@ -14,7 +14,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.FilterPermanent;
import mage.filter.common.FilterCreaturePlayerOrPlaneswalker;
import mage.target.common.TargetAnyTarget;
@ -27,6 +26,8 @@ import java.util.UUID;
public final class CauterySliver extends CardImpl {
private static final FilterPermanent filter = new FilterPermanent(SubType.SLIVER, "All Slivers");
private static final FilterCreaturePlayerOrPlaneswalker filter2
= new FilterCreaturePlayerOrPlaneswalker("player, planeswalker, or Sliver creature", SubType.SLIVER);
public CauterySliver(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}{W}");
@ -35,21 +36,27 @@ public final class CauterySliver extends CardImpl {
this.toughness = new MageInt(2);
// All Slivers have "{1}, Sacrifice this permanent: This permanent deals 1 damage to any target."
Ability ability1 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl("1"));
ability1.addCost(new SacrificeSourceCost());
ability1.addTarget(new TargetAnyTarget());
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
new GainAbilityAllEffect(ability1, Duration.WhileOnBattlefield, filter,
"All Slivers have \"{1}, Sacrifice this permanent: This permanent deals 1 damage to any target.\"")));
Ability ability = new SimpleActivatedAbility(
new DamageTargetEffect(1, "this permanent"), new GenericManaCost(1)
);
ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetAnyTarget());
this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect(
ability, Duration.WhileOnBattlefield, filter, "All Slivers have \"{1}, " +
"Sacrifice this permanent: This permanent deals 1 damage to any target.\""
)));
// All Slivers have "{1}, Sacrifice this permanent: Prevent the next 1 damage that would be dealt to target Sliver creature or player this turn."
// All Slivers have "{1}, Sacrifice this permanent: Prevent the next 1 damage that would be dealt to target player, planeswalker, or Sliver creature this turn."
Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PreventDamageToTargetEffect(Duration.EndOfTurn, 1), new ManaCostsImpl("1"));
ability2.addCost(new SacrificeSourceCost());
ability2.addTarget(new TargetAnyTarget(new FilterCreatureOrPlayerByType(SubType.SLIVER, "Sliver creature or player")));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
new GainAbilityAllEffect(ability2, Duration.WhileOnBattlefield, filter,
"All Slivers have \"{1}, Sacrifice this permanent: Prevent the next 1 damage that would be dealt to target Sliver creature or player this turn.\"")));
ability = new SimpleActivatedAbility(
new PreventDamageToTargetEffect(Duration.EndOfTurn, 1), new GenericManaCost(1)
);
ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetAnyTarget(filter2));
this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect(
ability, Duration.WhileOnBattlefield, filter, "All Slivers have " +
"\"{1}, Sacrifice this permanent: Prevent the next 1 damage " +
"that would be dealt to target player, planeswalker, or Sliver creature this turn.\""
)));
}
private CauterySliver(final CauterySliver card) {
@ -61,11 +68,3 @@ public final class CauterySliver extends CardImpl {
return new CauterySliver(this);
}
}
class FilterCreatureOrPlayerByType extends FilterCreaturePlayerOrPlaneswalker {
public FilterCreatureOrPlayerByType(SubType subType, String name) {
super(name);
this.getPermanentFilter().add(subType.getPredicate());
}
}

View file

@ -31,7 +31,7 @@ public final class CloudshredderSliver extends CardImpl {
Ability ability = new SimpleStaticAbility(new GainAbilityControlledEffect(
FlyingAbility.getInstance(), Duration.WhileOnBattlefield,
StaticFilters.FILTER_PERMANENT_CREATURE_SLIVERS
));
).setText("Sliver creatures you control have flying"));
ability.addEffect(new GainAbilityControlledEffect(
HasteAbility.getInstance(), Duration.WhileOnBattlefield,
StaticFilters.FILTER_PERMANENT_CREATURE_SLIVERS

View file

@ -36,7 +36,7 @@ public final class DreamscapeArtist extends CardImpl {
this.toughness = new MageInt(1);
// {2}{U}, {tap}, Discard a card, Sacrifice a land: Search your library for up to two basic land cards and put them onto the battlefield. Then shuffle your library.
TargetCardInLibrary target = new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LAND);
TargetCardInLibrary target = new TargetCardInLibrary(0, 2, StaticFilters.FILTER_CARD_BASIC_LANDS);
Ability ability = new SimpleActivatedAbility(
Zone.BATTLEFIELD,
new SearchLibraryPutInPlayEffect(target, false, Outcome.PutLandInPlay),

View file

@ -31,7 +31,7 @@ public final class ExquisiteFirecraft extends CardImpl {
// <i>Spell mastery</i> &mdash; If there are two or more instant and/or sorcery cards in your graveyard, Exquisite Firecraft can't be countered.
ContinuousRuleModifyingEffect cantBeCountered = new CantBeCounteredSourceEffect();
ConditionalContinuousRuleModifyingEffect conditionalCantBeCountered = new ConditionalContinuousRuleModifyingEffect(cantBeCountered, SpellMasteryCondition.instance);
conditionalCantBeCountered.setText("<br/>If there are two or more instant and/or sorcery cards in your graveyard, this spell can't be countered");
conditionalCantBeCountered.setText("<br/><i>Spell mastery</i> &mdash; If there are two or more instant and/or sorcery cards in your graveyard, this spell can't be countered");
Ability ability = new SimpleStaticAbility(Zone.STACK, conditionalCantBeCountered);
this.addAbility(ability);
}

View file

@ -35,7 +35,7 @@ public final class FiremawKavu extends CardImpl {
this.addAbility(ability);
// When Firemaw Kavu leaves the battlefield, it deals 4 damage to target creature.
ability = new LeavesBattlefieldTriggeredAbility(new DamageTargetEffect(4), false);
ability = new LeavesBattlefieldTriggeredAbility(new DamageTargetEffect(4, "it"), false);
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability);
}

View file

@ -1,18 +1,16 @@
package mage.cards.g;
import java.util.UUID;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import java.util.UUID;
/**
*
* @author dustinconrad
*/
public final class GaeasAnthem extends CardImpl {
@ -21,7 +19,10 @@ public final class GaeasAnthem extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}{G}");
// Creatures you control get +1/+1.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURE, false)));
this.addAbility(new SimpleStaticAbility(new BoostControlledEffect(
1, 1, Duration.WhileOnBattlefield,
StaticFilters.FILTER_PERMANENT_CREATURES, false
)));
}
private GaeasAnthem(final GaeasAnthem card) {

View file

@ -1,11 +1,9 @@
package mage.cards.g;
import java.util.ArrayList;
import java.util.List;
import mage.Mana;
import mage.ObjectColor;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldAbility;
import mage.abilities.common.AsEntersBattlefieldAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.ContinuousEffectImpl;
import mage.abilities.effects.Effect;
@ -20,12 +18,13 @@ import mage.filter.common.FilterCreaturePermanent;
import mage.filter.common.FilterLandPermanent;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.events.ManaEvent;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.targetpointer.FixedTarget;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
@ -43,7 +42,7 @@ public final class GauntletOfPower extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{5}");
// As Gauntlet of Power enters the battlefield, choose a color.
this.addAbility(new EntersBattlefieldAbility(new ChooseColorEffect(Outcome.Neutral)));
this.addAbility(new AsEntersBattlefieldAbility(new ChooseColorEffect(Outcome.Neutral)));
// Creatures of the chosen color get +1/+1.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GauntletOfPowerBoostEffect()));

View file

@ -53,7 +53,7 @@ public final class GoblinEngineer extends CardImpl {
// {R}, {T}, Sacrifice an artifact: Return target artifact card with converted mana cost 3 or less from your graveyard to the battlefield.
Ability ability = new SimpleActivatedAbility(
new ReturnFromGraveyardToBattlefieldTargetEffect(), new ManaCostsImpl("{R}")
new ReturnFromGraveyardToBattlefieldTargetEffect(false, false), new ManaCostsImpl("{R}")
);
ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter)));

View file

@ -57,7 +57,7 @@ class HollowOneReductionEffect extends CostModificationEffectImpl {
public HollowOneReductionEffect() {
super(Duration.WhileOnStack, Outcome.Benefit, CostModificationType.REDUCE_COST);
staticText = "{this} costs {2} less to cast for each card you've cycled or discarded this turn";
staticText = "this spell costs {2} less to cast for each card you've cycled or discarded this turn";
}
protected HollowOneReductionEffect(HollowOneReductionEffect effect) {

View file

@ -64,7 +64,7 @@ class ImperiosaurStaticAbility extends StaticAbility {
@Override
public String getRule() {
return "Spend only mana produced by basic lands to cast {this}.";
return "Spend only mana produced by basic lands to cast this spell.";
}
}

View file

@ -58,7 +58,7 @@ class JhoiraOfTheGhituSuspendEffect extends OneShotEffect {
public JhoiraOfTheGhituSuspendEffect() {
super(Outcome.PutCardInPlay);
this.staticText = "Put four time counters on the exiled card. If it doesn't have suspend, it gains suspend <i>(At the beginning of your upkeep, remove a time counter from that card. When the last is removed, cast it without paying its mana cost. If it's a creature, it has haste.)</i>";
this.staticText = "Put four time counters on the exiled card. If it doesn't have suspend, it gains suspend. <i>(At the beginning of your upkeep, remove a time counter from that card. When the last is removed, cast it without paying its mana cost. If it's a creature, it has haste.)</i>";
}
public JhoiraOfTheGhituSuspendEffect(final JhoiraOfTheGhituSuspendEffect effect) {

View file

@ -31,7 +31,7 @@ public final class KaervekTheMerciless extends CardImpl {
this.toughness = new MageInt(4);
// Whenever an opponent casts a spell, Kaervek the Merciless deals damage to any target equal to that spell's converted mana cost.
Ability ability = new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new KaervekTheMercilessEffect(), StaticFilters.FILTER_SPELL, false, SetTargetPointer.SPELL);
Ability ability = new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new KaervekTheMercilessEffect(), StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.SPELL);
ability.addTarget(new TargetAnyTarget());
this.addAbility(ability);

View file

@ -153,6 +153,6 @@ class LaviniaAzoriusRenegadeTriggeredAbility extends TriggeredAbilityImpl {
@Override
public String getRule() {
return "Whenever an opponent casts a spell, if no mana was spent to cast it, counter that spell";
return "Whenever an opponent casts a spell, if no mana was spent to cast it, counter that spell.";
}
}

View file

@ -41,7 +41,7 @@ public final class NantukoShaman extends CardImpl {
Ability ability = new ConditionalInterveningIfTriggeredAbility(
new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1)),
new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.EQUAL_TO, 0),
"When {this} enters the battlefield, if you control no tapped lands, draw a card");
"When {this} enters the battlefield, if you control no tapped lands, draw a card.");
this.addAbility(ability);
// Suspend 1-{2}{G}{G}

View file

@ -1,7 +1,5 @@
package mage.cards.s;
import java.util.UUID;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.common.TurnedFaceUpAllTriggeredAbility;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
@ -10,13 +8,13 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.card.FaceDownPredicate;
import java.util.UUID;
/**
*
* @author LevelX2
*/
public final class SecretPlans extends CardImpl {
@ -28,15 +26,18 @@ public final class SecretPlans extends CardImpl {
}
public SecretPlans(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{G}{U}");
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}{U}");
// Face-down creatures you control get +0/+1.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(0,1, Duration.WhileOnBattlefield, filter)));
this.addAbility(new SimpleStaticAbility(new BoostControlledEffect(
0, 1, Duration.WhileOnBattlefield, filter
)));
// Whenever a permanent you control is turned face up, draw a card.
this.addAbility(new TurnedFaceUpAllTriggeredAbility(new DrawCardSourceControllerEffect(1), new FilterControlledPermanent()));
this.addAbility(new TurnedFaceUpAllTriggeredAbility(
new DrawCardSourceControllerEffect(1),
StaticFilters.FILTER_CONTROLLED_A_PERMANENT
));
}
private SecretPlans(final SecretPlans card) {

View file

@ -1,7 +1,5 @@
package mage.cards.s;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.Mode;
@ -13,21 +11,30 @@ import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.counters.CounterType;
import mage.filter.common.FilterPermanentOrSuspendedCard;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.common.TargetPermanentOrSuspendedCard;
import java.util.UUID;
/**
*
* @author L_J
*/
public final class ShivanSandMage extends CardImpl {
private static final FilterPermanentOrSuspendedCard filter
= new FilterPermanentOrSuspendedCard("permanent with a time counter on it or suspended card");
static {
filter.getPermanentFilter().add(CounterType.TIME.getPredicate());
}
public ShivanSandMage(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}{R}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{R}");
this.subtype.add(SubType.VIASHINO);
this.subtype.add(SubType.SHAMAN);
this.power = new MageInt(3);
@ -39,9 +46,8 @@ public final class ShivanSandMage extends CardImpl {
ability.addTarget(new TargetPermanentOrSuspendedCard());
// Put two time counters on target permanent with a time counter on it or suspended card.
Mode mode = new Mode();
mode.addEffect(new ShivanSandMageEffect(true));
mode.addTarget(new TargetPermanentOrSuspendedCard());
Mode mode = new Mode(new ShivanSandMageEffect(true));
mode.addTarget(new TargetPermanentOrSuspendedCard(filter, false));
ability.addMode(mode);
ability.getModes().addMode(mode);
this.addAbility(ability);
@ -61,20 +67,20 @@ public final class ShivanSandMage extends CardImpl {
}
class ShivanSandMageEffect extends OneShotEffect {
private final boolean addCounters;
public ShivanSandMageEffect(boolean addCounters) {
ShivanSandMageEffect(boolean addCounters) {
super(Outcome.Benefit);
this.addCounters = addCounters;
if (addCounters) {
this.staticText = "put two time counters on target permanent or suspended card";
this.staticText = "put two time counters on target permanent with a time counter on it or suspended card";
} else {
this.staticText = "remove two time counters from target permanent or suspended card";
}
}
public ShivanSandMageEffect(final ShivanSandMageEffect effect) {
private ShivanSandMageEffect(final ShivanSandMageEffect effect) {
super(effect);
this.addCounters = effect.addCounters;
}

View file

@ -36,7 +36,7 @@ public final class SidewinderSliver extends CardImpl {
// All Sliver creatures have flanking.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD,
new GainAbilityAllEffect(new FlankingAbility(), Duration.WhileOnBattlefield, filter, false)
.setText("all Slivers have flanking")
.setText("all Sliver creatures have flanking")
));
}

View file

@ -1,7 +1,5 @@
package mage.cards.s;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.SacrificeSourceEffect;
@ -11,8 +9,9 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.filter.StaticFilters;
import java.util.UUID;
/**
*
* @author nigelzor
*/
public final class SkitteringMonstrosity extends CardImpl {
@ -24,7 +23,10 @@ public final class SkitteringMonstrosity extends CardImpl {
this.toughness = new MageInt(5);
// When you cast a creature spell, sacrifice Skittering Monstrosity.
this.addAbility(new SpellCastControllerTriggeredAbility(new SacrificeSourceEffect(), StaticFilters.FILTER_SPELL_A_CREATURE, false));
this.addAbility(new SpellCastControllerTriggeredAbility(
new SacrificeSourceEffect(), StaticFilters.FILTER_SPELL_A_CREATURE,
false, "When you cast a creature spell, sacrifice {this}."
));
}
private SkitteringMonstrosity(final SkitteringMonstrosity card) {

View file

@ -1,7 +1,5 @@
package mage.cards.s;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.DiesCreatureTriggeredAbility;
@ -10,27 +8,24 @@ import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DamagePlayersEffect;
import mage.abilities.effects.common.GainLifeEffect;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.SuperType;
import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterControlledPermanent;
import mage.game.permanent.token.SaprolingToken;
import java.util.UUID;
/**
*
* @author TheElk801
*/
public final class SlimefootTheStowaway extends CardImpl {
private static final FilterControlledPermanent filter = new FilterControlledPermanent("a Saproling you control");
static {
filter.add(SubType.SAPROLING.getPredicate());
}
private static final FilterControlledPermanent filter
= new FilterControlledPermanent(SubType.SAPROLING, "a Saproling you control");
public SlimefootTheStowaway(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{G}");
@ -41,12 +36,14 @@ public final class SlimefootTheStowaway extends CardImpl {
this.toughness = new MageInt(3);
// Whenever a Saproling you control dies, Slimefoot, the Stowaway deals 1 damage to each opponent and you gain 1 life.
Ability ability = new DiesCreatureTriggeredAbility(new DamagePlayersEffect(1, TargetController.OPPONENT), false, filter);
ability.addEffect(new GainLifeEffect(1));
Ability ability = new DiesCreatureTriggeredAbility(
new DamagePlayersEffect(1, TargetController.OPPONENT), false, filter
);
ability.addEffect(new GainLifeEffect(1).concatBy("and"));
this.addAbility(ability);
// {4}: Create a 1/1 green Saproling creature token.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new SaprolingToken()), new ManaCostsImpl("{4}")));
this.addAbility(new SimpleActivatedAbility(new CreateTokenEffect(new SaprolingToken()), new ManaCostsImpl("{4}")));
}
private SlimefootTheStowaway(final SlimefootTheStowaway card) {

View file

@ -1,7 +1,6 @@
package mage.cards.s;
import java.util.UUID;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.AttackingCreatureCount;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
@ -12,18 +11,25 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/**
*
* @author escplan9 (Derek Monturo - dmontur1 at gmail dot com)
*/
public final class StrengthInNumbers extends CardImpl {
private static final DynamicValue xValue = new AttackingCreatureCount();
public StrengthInNumbers(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{G}");
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}");
// Until end of turn, target creature gains trample and gets +X/+X, where X is the number of attacking creatures.
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn));
this.getSpellAbility().addEffect(new BoostTargetEffect(new AttackingCreatureCount("the number of attacking creatures"), new AttackingCreatureCount(), Duration.EndOfTurn, true));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(
TrampleAbility.getInstance(), Duration.EndOfTurn
).setText("Until end of turn, target creature gains trample"));
this.getSpellAbility().addEffect(new BoostTargetEffect(
xValue, xValue, Duration.EndOfTurn, true
).setText("and gets +X/+X, where X is the number of attacking creatures"));
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
}

View file

@ -23,7 +23,7 @@ import mage.filter.predicate.mageobject.PowerPredicate;
*/
public final class TemurAscendancy extends CardImpl {
final private static FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with power 4 or greater");
final private static FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature with power 4 or greater");
static {
filter.add(new PowerPredicate(ComparisonType.MORE_THAN, 3));
}

View file

@ -47,7 +47,7 @@ public final class ThelonOfHavenwood extends CardImpl {
// {B}{G}, Exile a Fungus card from a graveyard: Put a spore counter on each Fungus on the battlefield.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersAllEffect(CounterType.SPORE.createInstance(), filterPermanent), new ManaCostsImpl<>("{B}{G}"));
ability.addCost(new ExileFromGraveCost(new TargetCardInASingleGraveyard(1, 1, filterCard)));
ability.addCost(new ExileFromGraveCost(new TargetCardInASingleGraveyard(1, 1, filterCard), "exile a Fungus card from a graveyard"));
this.addAbility(ability);
}

View file

@ -24,7 +24,7 @@ import mage.game.permanent.token.SaprolingToken;
*/
public final class TheloniteHermit extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Saproling creatures");
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("All Saprolings");
static {
filter.add(SubType.SAPROLING.getPredicate());

View file

@ -1,7 +1,5 @@
package mage.cards.t;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.Mode;
@ -13,21 +11,30 @@ import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.counters.CounterType;
import mage.filter.common.FilterPermanentOrSuspendedCard;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.target.common.TargetPermanentOrSuspendedCard;
import java.util.UUID;
/**
*
* @author L_J
*/
public final class Timebender extends CardImpl {
private static final FilterPermanentOrSuspendedCard filter
= new FilterPermanentOrSuspendedCard("permanent with a time counter on it or suspended card");
static {
filter.getPermanentFilter().add(CounterType.TIME.getPredicate());
}
public Timebender(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{U}");
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}");
this.subtype.add(SubType.HUMAN);
this.subtype.add(SubType.WIZARD);
this.power = new MageInt(1);
@ -42,9 +49,8 @@ public final class Timebender extends CardImpl {
ability.addTarget(new TargetPermanentOrSuspendedCard());
// Put two time counters on target permanent with a time counter on it or suspended card.
Mode mode = new Mode();
mode.addEffect(new TimebenderEffect(true));
mode.addTarget(new TargetPermanentOrSuspendedCard());
Mode mode = new Mode(new TimebenderEffect(true));
mode.addTarget(new TargetPermanentOrSuspendedCard(filter, false));
ability.addMode(mode);
ability.getModes().addMode(mode);
this.addAbility(ability);
@ -62,20 +68,20 @@ public final class Timebender extends CardImpl {
}
class TimebenderEffect extends OneShotEffect {
private final boolean addCounters;
public TimebenderEffect(boolean addCounters) {
TimebenderEffect(boolean addCounters) {
super(Outcome.Benefit);
this.addCounters = addCounters;
if (addCounters) {
this.staticText = "put two time counters on target permanent or suspended card";
this.staticText = "put two time counters on target permanent with a time counter on it or suspended card";
} else {
this.staticText = "remove two time counters from target permanent or suspended card";
}
}
public TimebenderEffect(final TimebenderEffect effect) {
private TimebenderEffect(final TimebenderEffect effect) {
super(effect);
this.addCounters = effect.addCounters;
}

View file

@ -25,7 +25,7 @@ public final class TrompTheDomains extends CardImpl {
// Domain - Until end of turn, creatures you control gain trample and get +1/+1 for each basic land type among lands you control.
Effect effect = new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn);
effect.setText("<i>Domain</i> &mdash; Until end of turn, creatures you control gain Trample");
effect.setText("<i>Domain</i> &mdash; Until end of turn, creatures you control gain trample");
this.getSpellAbility().addEffect(effect);
DynamicValue domain = new DomainValue();
effect = new BoostControlledEffect(domain, domain, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, false);

View file

@ -7,9 +7,9 @@ import java.util.List;
* @author noxx
*/
public class CompoundAbility extends AbilitiesImpl<Ability> {
private String ruleText;
public CompoundAbility(Ability... abilities) {
this(null, abilities);
}
@ -31,11 +31,13 @@ public class CompoundAbility extends AbilitiesImpl<Ability> {
}
StringBuilder sb = new StringBuilder();
List<String> rules = super.getRules(null,false);
List<String> rules = super.getRules(null, false);
for (int index = 0; index < rules.size(); index++) {
if (index > 0) {
if (index < rules.size() - 1) {
sb.append(", ");
} else if (rules.size() > 2) {
sb.append(", and ");
} else {
sb.append(" and ");
}

View file

@ -1,9 +1,6 @@
package mage.abilities.costs.common;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.costs.Cost;
import mage.abilities.costs.CostImpl;
@ -19,8 +16,11 @@ import mage.target.common.TargetCardInYourGraveyard;
import mage.target.targetpointer.FixedTargets;
import mage.util.CardUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
*
* @author nantuko
*/
public class ExileFromGraveCost extends CostImpl {
@ -39,7 +39,7 @@ public class ExileFromGraveCost extends CostImpl {
+ ' ' + target.getTargetName();
} else {
this.text = "exile "
+ (target.getTargetName().startsWith("card ") ? "a ":"")
+ (target.getTargetName().startsWith("card ") ? "a " : "")
+ target.getTargetName();
}
if (!this.text.endsWith(" from your graveyard")) {
@ -53,6 +53,12 @@ public class ExileFromGraveCost extends CostImpl {
this.text = text;
}
public ExileFromGraveCost(TargetCardInASingleGraveyard target, String text) {
target.setNotTarget(true);
this.addTarget(target);
this.text = text;
}
public ExileFromGraveCost(TargetCardInASingleGraveyard target) {
target.setNotTarget(true);
this.addTarget(target);

View file

@ -1,8 +1,5 @@
package mage.abilities.effects.common;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.StaticValue;
@ -16,6 +13,10 @@ import mage.players.Player;
import mage.target.TargetPermanent;
import mage.util.CardUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
* All opponents have to sacrifice [amount] permanents that match the [filter].
*
@ -82,17 +83,16 @@ public class SacrificeOpponentsEffect extends OneShotEffect {
StringBuilder sb = new StringBuilder();
sb.append("each opponent sacrifices ");
if (amount.toString().equals("X")) {
sb.append(amount.toString());
sb.append(amount.toString()).append(' ');
} else {
if (amount.toString().equals("1")) {
if (!filter.getMessage().startsWith("a ") && !filter.getMessage().startsWith("an ")) {
sb.append('a');
sb.append("a ");
}
} else {
sb.append(CardUtil.numberToText(amount.toString()));
sb.append(CardUtil.numberToText(amount.toString())).append(' ');
}
}
sb.append(' ');
sb.append(filter.getMessage());
staticText = sb.toString();
}

View file

@ -9,6 +9,7 @@ import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.target.common.TargetCardInLibrary;
import mage.util.CardUtil;
/**
* @author BetaSteward_at_googlemail.com
@ -47,11 +48,11 @@ public class CyclingAbility extends ActivatedAbilityImpl {
public String getRule() {
StringBuilder rule = new StringBuilder(this.text);
if (cost instanceof ManaCost) {
rule.append(' ');
rule.append(' ').append(cost.getText());
} else {
rule.append("&mdash;");
rule.append("&mdash;").append(CardUtil.getTextWithFirstCharUpperCase(cost.getText())).append('.');
}
rule.append(cost.getText()).append(" <i>(").append(super.getRule(true)).append(")</i>");
rule.append(" <i>(").append(super.getRule(true)).append(")</i>");
return rule.toString();
}
}

View file

@ -1,4 +1,3 @@
package mage.abilities.keyword;
import mage.abilities.TriggeredAbilityImpl;
@ -15,7 +14,6 @@ import mage.game.events.GameEvent;
import java.util.UUID;
/**
*
* @author Backfir3
*/
public class EchoAbility extends TriggeredAbilityImpl {
@ -117,6 +115,9 @@ public class EchoAbility extends TriggeredAbilityImpl {
if (echoCosts != null) {
sb.append(echoCosts.getText());
}
if (!manaEcho) {
sb.append('.');
}
}
sb.append(" <i>(At the beginning of your upkeep, if this came under your control since the beginning of your last upkeep, sacrifice it unless you pay its echo cost.)</i>");
return sb.toString();

View file

@ -298,6 +298,12 @@ public final class StaticFilters {
FILTER_CONTROLLED_PERMANENT.setLockedFilter(true);
}
public static final FilterControlledPermanent FILTER_CONTROLLED_A_PERMANENT = new FilterControlledPermanent("a permanent you control");
static {
FILTER_CONTROLLED_A_PERMANENT.setLockedFilter(true);
}
public static final FilterControlledPermanent FILTER_CONTROLLED_PERMANENT_ARTIFACT = new FilterControlledArtifactPermanent();
static {

View file

@ -14,7 +14,7 @@ import java.util.Arrays;
public final class AssemblyWorkerToken extends TokenImpl {
public AssemblyWorkerToken() {
super("Assembly-Worker", "2/2 Assembly-Worker artifact creature");
super("Assembly-Worker", "2/2 colorless Assembly-Worker artifact creature token");
cardType.add(CardType.ARTIFACT);
cardType.add(CardType.CREATURE);
subtype.add(SubType.ASSEMBLY_WORKER);

View file

@ -14,7 +14,7 @@ import java.util.Arrays;
public final class LlanowarElvesToken extends TokenImpl {
public LlanowarElvesToken() {
super("Llanowar Elves", "1/1 green Elf Druid creature token named Llanowar Elves with \"{T}: Add {G}.\"");
super("Llanowar Elves", "1/1 green Elf Druid creature token named Llanowar Elves. It has \"{T}: Add {G}.\"");
cardType.add(CardType.CREATURE);
color.setGreen(true);
subtype.add(SubType.ELF);

View file

@ -14,7 +14,7 @@ import java.util.Arrays;
public final class MetallicSliverToken extends TokenImpl {
public MetallicSliverToken() {
super("Metallic Sliver", "1/1 colorless Sliver creature token named Metallic Sliver");
super("Metallic Sliver", "1/1 colorless Sliver artifact creature token named Metallic Sliver");
cardType.add(CardType.CREATURE);
cardType.add(CardType.ARTIFACT);
subtype.add(SubType.SLIVER);