mirror of
https://github.com/correl/mage.git
synced 2024-11-15 03:00:16 +00:00
[TSR] various text fixes
This commit is contained in:
parent
2c168856c5
commit
1dfde6d622
37 changed files with 167 additions and 134 deletions
|
@ -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());
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -31,7 +31,7 @@ public final class ExquisiteFirecraft extends CardImpl {
|
|||
// <i>Spell mastery</i> — 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> — 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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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()));
|
||||
|
||||
|
|
|
@ -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)));
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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.";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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.";
|
||||
}
|
||||
}
|
|
@ -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}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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")
|
||||
));
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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> — Until end of turn, creatures you control gain Trample");
|
||||
effect.setText("<i>Domain</i> — 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);
|
||||
|
|
|
@ -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 ");
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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("—");
|
||||
rule.append("—").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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue