lots of text fixes

This commit is contained in:
xenohedron 2023-10-12 21:34:58 -04:00
parent 0081279d15
commit 2013895530
142 changed files with 261 additions and 403 deletions

View file

@ -31,8 +31,8 @@ public final class AbundantMaw extends CardImpl {
this.addAbility(new EmergeAbility(this, new ManaCostsImpl<>("{6}{B}"))); this.addAbility(new EmergeAbility(this, new ManaCostsImpl<>("{6}{B}")));
// When you cast Abundant Maw, target opponent loses 3 life and you gain 3 life. // When you cast Abundant Maw, target opponent loses 3 life and you gain 3 life.
Ability ability = new CastSourceTriggeredAbility(new GainLifeEffect(3)); Ability ability = new CastSourceTriggeredAbility(new LoseLifeTargetEffect(3));
ability.addEffect(new LoseLifeTargetEffect(3).concatBy("and")); ability.addEffect(new GainLifeEffect(3).concatBy("and"));
ability.addTarget(new TargetOpponent()); ability.addTarget(new TargetOpponent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -53,7 +53,7 @@ public final class AceFearlessRebel extends CardImpl {
ability, ability,
new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT_AN), new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT_AN),
"Sacrifice an artifact?" "Sacrifice an artifact?"
)).setTriggerPhrase("Nitro-9")); )).withFlavorWord("Nitro-9"));
// Doctor's companion // Doctor's companion
this.addAbility(DoctorsCompanionAbility.getInstance()); this.addAbility(DoctorsCompanionAbility.getInstance());

View file

@ -14,7 +14,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.target.common.TargetCardInHand; import mage.target.common.TargetCardInHand;
@ -34,7 +33,7 @@ public final class AdvancedStitchwing extends CardImpl {
// Flying // Flying
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// {2}{U}, Discard two cards: Return Advanced Stitchwing from your graveyard to the battlefield tapped. // {2}{U}, Discard two cards: Return Advanced Stitchwing from your graveyard to the battlefield tapped.
Ability ability = new SimpleActivatedAbility(Zone.GRAVEYARD, new ReturnSourceFromGraveyardToBattlefieldEffect(true), new ManaCostsImpl<>("{2}{U}")); Ability ability = new SimpleActivatedAbility(Zone.GRAVEYARD, new ReturnSourceFromGraveyardToBattlefieldEffect(true, false), new ManaCostsImpl<>("{2}{U}"));
ability.addCost(new DiscardTargetCost(new TargetCardInHand(2, StaticFilters.FILTER_CARD_CARDS))); ability.addCost(new DiscardTargetCost(new TargetCardInHand(2, StaticFilters.FILTER_CARD_CARDS)));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -24,7 +24,7 @@ public final class Aeolipile extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}"); super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}");
// {1}, {tap}, Sacrifice Aeolipile: Aeolipile deals 2 damage to any target. // {1}, {tap}, Sacrifice Aeolipile: Aeolipile deals 2 damage to any target.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new ManaCostsImpl<>("{1}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2, "it"), new ManaCostsImpl<>("{1}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());

View file

@ -40,7 +40,7 @@ public final class AerieOuphes extends CardImpl {
// Sacrifice Aerie Ouphes: Aerie Ouphes deals damage equal to its power to target creature with flying. // Sacrifice Aerie Ouphes: Aerie Ouphes deals damage equal to its power to target creature with flying.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(new SourcePermanentPowerCount()) Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(new SourcePermanentPowerCount())
.setText("{this} deals damage equal to its power to target creature with flying"), new SacrificeSourceCost()); .setText("it deals damage equal to its power to target creature with flying"), new SacrificeSourceCost());
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(filter));
this.addAbility(ability); this.addAbility(ability);

View file

@ -32,7 +32,7 @@ public final class AncientHydra extends CardImpl {
// Fading 5 // Fading 5
this.addAbility(new FadingAbility(5, this)); this.addAbility(new FadingAbility(5, this));
// {1}, Remove a fade counter from Ancient Hydra: Ancient Hydra deals 1 damage to any target. // {1}, Remove a fade counter from Ancient Hydra: Ancient Hydra deals 1 damage to any target.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl<>("{1}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1, "it"), new ManaCostsImpl<>("{1}"));
ability.addCost(new RemoveCountersSourceCost(CounterType.FADE.createInstance(1))); ability.addCost(new RemoveCountersSourceCost(CounterType.FADE.createInstance(1)));
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());
this.addAbility(ability); this.addAbility(ability);

View file

@ -1,4 +1,3 @@
package mage.cards.a; package mage.cards.a;
import java.util.UUID; import java.util.UUID;
@ -25,7 +24,7 @@ import mage.filter.common.FilterControlledPermanent;
public final class AngelicOverseer extends CardImpl { public final class AngelicOverseer extends CardImpl {
private static final String rule1 = "As long as you control a Human, {this} has hexproof"; private static final String rule1 = "As long as you control a Human, {this} has hexproof";
private static final String rule2 = "and is indestructible"; private static final String rule2 = "and indestructible";
private static final FilterControlledPermanent filter = new FilterControlledPermanent("Human"); private static final FilterControlledPermanent filter = new FilterControlledPermanent("Human");
static { static {

View file

@ -43,7 +43,7 @@ public final class ArixmethesSlumberingIsle extends CardImpl {
// Arixmethes, Slumbering Isle enters the battlefield tapped with five slumber counters on it. // Arixmethes, Slumbering Isle enters the battlefield tapped with five slumber counters on it.
Ability ability = new EntersBattlefieldAbility( Ability ability = new EntersBattlefieldAbility(
new TapSourceEffect(true), false, null, new TapSourceEffect(true), false, null,
"{this} enters the battlefield tapped with five slumber counters on it", null "{this} enters the battlefield tapped with five slumber counters on it.", null
); );
ability.addEffect(new AddCountersSourceEffect(CounterType.SLUMBER.createInstance(5))); ability.addEffect(new AddCountersSourceEffect(CounterType.SLUMBER.createInstance(5)));
this.addAbility(ability); this.addAbility(ability);

View file

@ -35,7 +35,7 @@ public final class ArmageddonClock extends CardImpl {
// {4}: Remove a doom counter from Armageddon Clock. Any player may activate this ability but only during any upkeep step. // {4}: Remove a doom counter from Armageddon Clock. Any player may activate this ability but only during any upkeep step.
ActivatedAbilityImpl ability = new ConditionalActivatedAbility(Zone.BATTLEFIELD, ActivatedAbilityImpl ability = new ConditionalActivatedAbility(Zone.BATTLEFIELD,
new RemoveCounterSourceEffect(CounterType.DOOM.createInstance()), new ManaCostsImpl<>("{4}"), new IsStepCondition(PhaseStep.UPKEEP, false), new RemoveCounterSourceEffect(CounterType.DOOM.createInstance()), new ManaCostsImpl<>("{4}"), new IsStepCondition(PhaseStep.UPKEEP, false),
"Remove a doom counter from {this}. Any player may activate this ability but only during any upkeep step"); "{4}: Remove a doom counter from {this}. Any player may activate this ability but only during any upkeep step.");
ability.setMayActivate(TargetController.ANY); ability.setMayActivate(TargetController.ANY);
this.addAbility(ability); this.addAbility(ability);

View file

@ -1,4 +1,3 @@
package mage.cards.a; package mage.cards.a;
import java.util.UUID; import java.util.UUID;
@ -13,7 +12,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterEnchantmentPermanent; import mage.filter.common.FilterEnchantmentPermanent;
/** /**
@ -26,8 +24,9 @@ public final class AuraFlux extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{U}"); super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{U}");
// Other enchantments have "At the beginning of your upkeep, sacrifice this enchantment unless you pay {2}." // Other enchantments have "At the beginning of your upkeep, sacrifice this enchantment unless you pay {2}."
Ability gainedAbility = new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new GenericManaCost(2)), TargetController.YOU, false); Ability gainedAbility = new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new GenericManaCost(2))
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(gainedAbility, Duration.WhileOnBattlefield, new FilterEnchantmentPermanent("enchantments"), true))); .setText("sacrifice this enchantment unless you pay {2}"), TargetController.YOU, false);
this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect(gainedAbility, Duration.WhileOnBattlefield, new FilterEnchantmentPermanent("enchantments"), true)));
} }
private AuraFlux(final AuraFlux card) { private AuraFlux(final AuraFlux card) {

View file

@ -45,7 +45,7 @@ public final class AvatarOfFury extends CardImpl {
// If an opponent controls seven or more lands, Avatar of Fury costs {6} less to cast. // If an opponent controls seven or more lands, Avatar of Fury costs {6} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.ALL, new SpellCostReductionSourceEffect(6, AvatarOfFuryCondition.instance) this.addAbility(new SimpleStaticAbility(Zone.ALL, new SpellCostReductionSourceEffect(6, AvatarOfFuryCondition.instance)
.setText("if an opponent controls seven or more lands, Avatar of Fury costs {6} less to cast")) .setText("if an opponent controls seven or more lands, this spell costs {6} less to cast"))
.addHint(new ConditionHint(AvatarOfFuryCondition.instance, "Opponent controls seven or more lands")) .addHint(new ConditionHint(AvatarOfFuryCondition.instance, "Opponent controls seven or more lands"))
); );

View file

@ -32,7 +32,7 @@ public final class AvatarOfHope extends CardImpl {
// If you have 3 or less life, Avatar of Hope costs {6} less to cast. // If you have 3 or less life, Avatar of Hope costs {6} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.ALL, new SpellCostReductionSourceEffect(6, AvatarOfHopeCondition.instance) this.addAbility(new SimpleStaticAbility(Zone.ALL, new SpellCostReductionSourceEffect(6, AvatarOfHopeCondition.instance)
.setText("if you have 3 or less life, Avatar of Hope costs {6} less to cast")) .setText("if you have 3 or less life, this spell costs {6} less to cast"))
.addHint(new ConditionHint(AvatarOfHopeCondition.instance)) .addHint(new ConditionHint(AvatarOfHopeCondition.instance))
); );

View file

@ -27,7 +27,7 @@ public final class AvatarOfWill extends CardImpl {
// If an opponent has no cards in hand, Avatar of Will costs {6} less to cast. // If an opponent has no cards in hand, Avatar of Will costs {6} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.ALL, new SpellCostReductionSourceEffect(6, OpponentHasNoCardsInHandCondition.instance) this.addAbility(new SimpleStaticAbility(Zone.ALL, new SpellCostReductionSourceEffect(6, OpponentHasNoCardsInHandCondition.instance)
.setText("If an opponent has no cards in hand, Avatar of Will costs {6} less to cast") .setText("If an opponent has no cards in hand, this spell costs {6} less to cast")
).addHint(new ConditionHint(OpponentHasNoCardsInHandCondition.instance, "Opponent has no cards in hand")) ).addHint(new ConditionHint(OpponentHasNoCardsInHandCondition.instance, "Opponent has no cards in hand"))
); );

View file

@ -34,7 +34,7 @@ public final class BarbarianRing extends CardImpl {
// Threshold - {R}, {T}, Sacrifice Barbarian Ring: Barbarian Ring deals 2 damage to any target. Activate this ability only if seven or more cards are in your graveyard. // Threshold - {R}, {T}, Sacrifice Barbarian Ring: Barbarian Ring deals 2 damage to any target. Activate this ability only if seven or more cards are in your graveyard.
Ability thresholdAbility = new ConditionalActivatedAbility(Zone.BATTLEFIELD, Ability thresholdAbility = new ConditionalActivatedAbility(Zone.BATTLEFIELD,
new DamageTargetEffect(2), new DamageTargetEffect(2, "it"),
new ManaCostsImpl<>("{R}"), new ManaCostsImpl<>("{R}"),
new CardsInControllerGraveyardCondition(7)); new CardsInControllerGraveyardCondition(7));
thresholdAbility.addCost(new TapSourceCost()); thresholdAbility.addCost(new TapSourceCost());

View file

@ -28,7 +28,7 @@ public final class BattlewiseHoplite extends CardImpl {
// Heroic - Whenever you cast a spell that targets Battlewise Hoplite, put a +1/+1 counter on Battlewise Hoplite, then scry 1. // Heroic - Whenever you cast a spell that targets Battlewise Hoplite, put a +1/+1 counter on Battlewise Hoplite, then scry 1.
Ability ability = new HeroicAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance())); Ability ability = new HeroicAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()));
ability.addEffect(new ScryEffect(1, false)); ability.addEffect(new ScryEffect(1, false).concatBy(", then"));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,4 +1,3 @@
package mage.cards.b; package mage.cards.b;
import java.util.UUID; import java.util.UUID;
@ -10,10 +9,9 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.players.Player; import mage.players.Player;
@ -27,7 +25,7 @@ public final class BenefactorsDraught extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{G}");
// Untap all creatures. // Untap all creatures.
this.getSpellAbility().addEffect(new UntapAllEffect(new FilterCreaturePermanent())); this.getSpellAbility().addEffect(new UntapAllEffect(StaticFilters.FILTER_PERMANENT_CREATURES));
// Until end of turn, whenever a creature an opponent controls blocks, draw a card. // Until end of turn, whenever a creature an opponent controls blocks, draw a card.
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new BenefactorsDraughtTriggeredAbility())); this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new BenefactorsDraughtTriggeredAbility()));

View file

@ -1,4 +1,3 @@
package mage.cards.b; package mage.cards.b;
import java.util.UUID; import java.util.UUID;
@ -40,7 +39,7 @@ public final class Bereavement extends CardImpl {
class BereavementTriggeredAbility extends TriggeredAbilityImpl { class BereavementTriggeredAbility extends TriggeredAbilityImpl {
public BereavementTriggeredAbility() { BereavementTriggeredAbility() {
super(Zone.BATTLEFIELD, new DiscardTargetEffect(1)); super(Zone.BATTLEFIELD, new DiscardTargetEffect(1));
} }
@ -72,6 +71,6 @@ class BereavementTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever a green creature dies, its controller discards a card"; return "Whenever a green creature dies, its controller discards a card.";
} }
} }

View file

@ -29,7 +29,7 @@ public final class BlightedGorge extends CardImpl {
// {4}{R}, {T}, Sacrifice Blighted Gorge: Blighted Gorge deals 2 damage to any target. // {4}{R}, {T}, Sacrifice Blighted Gorge: Blighted Gorge deals 2 damage to any target.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new DamageTargetEffect(2), new DamageTargetEffect(2, "it"),
new ManaCostsImpl<>("{4}{R}")); new ManaCostsImpl<>("{4}{R}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());

View file

@ -40,7 +40,7 @@ class BloodMoneyEffect extends OneShotEffect {
BloodMoneyEffect() { BloodMoneyEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "destroy all creatures. For each nontoken creature destroyed this way, create a tapped Treasure token"; staticText = "destroy all creatures. For each nontoken creature destroyed this way, you create a tapped Treasure token";
} }
private BloodMoneyEffect(final BloodMoneyEffect effect) { private BloodMoneyEffect(final BloodMoneyEffect effect) {

View file

@ -43,7 +43,7 @@ public final class BoneDragon extends CardImpl {
// {3}{B}{B}, Exile seven other cards from your graveyard: Return Bone Dragon from your graveyard to the battlefield tapped. // {3}{B}{B}, Exile seven other cards from your graveyard: Return Bone Dragon from your graveyard to the battlefield tapped.
Ability ability = new SimpleActivatedAbility( Ability ability = new SimpleActivatedAbility(
Zone.GRAVEYARD, Zone.GRAVEYARD,
new ReturnSourceFromGraveyardToBattlefieldEffect(true), new ReturnSourceFromGraveyardToBattlefieldEffect(true, false),
new ManaCostsImpl<>("{3}{B}{B}") new ManaCostsImpl<>("{3}{B}{B}")
); );
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(7, filter))); ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(7, filter)));

View file

@ -22,7 +22,7 @@ public final class BoneyardWurm extends CardImpl {
this.subtype.add(SubType.WURM); this.subtype.add(SubType.WURM);
// Boneyard Wurm's power and toughness are each equal to the number of creature cards in your graveyard. // Boneyard Wurm's power and toughness are each equal to the number of creature cards in your graveyard.
DynamicValue value = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURE); DynamicValue value = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURES);
this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetBasePowerToughnessSourceEffect(value))); this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetBasePowerToughnessSourceEffect(value)));
} }

View file

@ -4,15 +4,14 @@ import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.DamageControllerEffect;
import mage.abilities.effects.common.FlipCoinEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome;
import mage.constants.Zone; import mage.constants.Zone;
import mage.game.Game;
import mage.game.permanent.token.DjinnToken; import mage.game.permanent.token.DjinnToken;
import mage.players.Player;
import java.util.UUID; import java.util.UUID;
@ -25,7 +24,10 @@ public final class BottleOfSuleiman extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}");
// {1}, Sacrifice Bottle of Suleiman: Flip a coin. If you lose the flip, Bottle of Suleiman deals 5 damage to you. If you win the flip, create a 5/5 colorless Djinn artifact creature token with flying. // {1}, Sacrifice Bottle of Suleiman: Flip a coin. If you lose the flip, Bottle of Suleiman deals 5 damage to you. If you win the flip, create a 5/5 colorless Djinn artifact creature token with flying.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BottleOfSuleimanEffect(), new GenericManaCost(1)); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new FlipCoinEffect(
new CreateTokenEffect(new DjinnToken()),
new DamageControllerEffect(5)
), new GenericManaCost(1));
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
this.addAbility(ability); this.addAbility(ability);
} }
@ -39,37 +41,3 @@ public final class BottleOfSuleiman extends CardImpl {
return new BottleOfSuleiman(this); return new BottleOfSuleiman(this);
} }
} }
class BottleOfSuleimanEffect extends OneShotEffect {
public BottleOfSuleimanEffect() {
super(Outcome.PutCreatureInPlay);
staticText = "Flip a coin. If you lose the flip, {this} deals 5 damage to you. If you win the flip, create a 5/5 colorless Djinn artifact creature token with flying.";
}
private BottleOfSuleimanEffect(final BottleOfSuleimanEffect effect) {
super(effect);
}
@Override
public BottleOfSuleimanEffect copy() {
return new BottleOfSuleimanEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player you = game.getPlayer(source.getControllerId());
if (you != null) {
if (you.flipCoin(source, game, true)) {
DjinnToken token = new DjinnToken();
token.putOntoBattlefield(1, game, source, source.getControllerId());
return true;
} else {
you.damage(5, source.getSourceId(), source, game);
return true;
}
}
return false;
}
}

View file

@ -42,7 +42,8 @@ public final class BrassTalonChimera extends CardImpl {
// Sacrifice Brass-Talon Chimera: Put a +2/+2 counter on target Chimera creature. It gains first strike. (This effect lasts indefinitely.) // Sacrifice Brass-Talon Chimera: Put a +2/+2 counter on target Chimera creature. It gains first strike. (This effect lasts indefinitely.)
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P2P2.createInstance()), new SacrificeSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P2P2.createInstance()), new SacrificeSourceCost());
ability.addEffect(new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield).setText("It gains first strike. <i>(This effect lasts indefinitely.)</i>")); ability.addEffect(new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield)
.setText("It gains first strike. <i>(This effect lasts indefinitely.)</i>"));
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(filter));
addAbility(ability); addAbility(ability);
} }

View file

@ -1,32 +1,24 @@
package mage.cards.b; package mage.cards.b;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Zone; import mage.filter.StaticFilters;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate; import java.util.UUID;
/** /**
* *
* @author LevelX2 * @author LevelX2
*/ */
public final class BronzebeakMoa extends CardImpl { public final class BronzebeakMoa extends CardImpl {
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another creature under your control");
static {
filter.add(AnotherPredicate.instance);
}
public BronzebeakMoa (UUID ownerId, CardSetInfo setInfo) { public BronzebeakMoa (UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{W}"); super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}{W}");
this.subtype.add(SubType.BIRD); this.subtype.add(SubType.BIRD);
@ -35,8 +27,8 @@ public final class BronzebeakMoa extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Whenever another creature enters the battlefield under your control, Bronzebeak Moa gets +3/+3 until end of turn. // Whenever another creature enters the battlefield under your control, Bronzebeak Moa gets +3/+3 until end of turn.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(Zone.BATTLEFIELD, new BoostSourceEffect(3,3, Duration.EndOfTurn),filter,false)); this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
new BoostSourceEffect(3,3, Duration.EndOfTurn), StaticFilters.FILTER_ANOTHER_CREATURE));
} }
private BronzebeakMoa(final BronzebeakMoa card) { private BronzebeakMoa(final BronzebeakMoa card) {

View file

@ -1,27 +1,31 @@
package mage.cards.b; package mage.cards.b;
import java.util.UUID;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.common.FilterUntappedCreature; import mage.filter.predicate.permanent.TappedPredicate;
import java.util.UUID;
/** /**
* @author noxx * @author noxx
*/ */
public final class BuildersBlessing extends CardImpl { public final class BuildersBlessing extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("untapped creatures");
static {
filter.add(TappedPredicate.UNTAPPED);
}
public BuildersBlessing(UUID ownerId, CardSetInfo setInfo) { public BuildersBlessing(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{W}"); super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{W}");
// Untapped creatures you control get +0/+2. // Untapped creatures you control get +0/+2.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(0, 2, Duration.WhileOnBattlefield, new FilterUntappedCreature("untapped creatures")))); this.addAbility(new SimpleStaticAbility(new BoostControlledEffect(0, 2, Duration.WhileOnBattlefield, filter)));
} }
private BuildersBlessing(final BuildersBlessing card) { private BuildersBlessing(final BuildersBlessing card) {

View file

@ -1,4 +1,3 @@
package mage.cards.b; package mage.cards.b;
import java.util.UUID; import java.util.UUID;
@ -10,7 +9,6 @@ import mage.constants.CardType;
import mage.constants.Zone; import mage.constants.Zone;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.target.common.TargetAnyTarget; import mage.target.common.TargetAnyTarget;
/** /**
@ -38,12 +36,10 @@ public final class BurningVengeance extends CardImpl {
class BurningVengeanceOnCastAbility extends TriggeredAbilityImpl { class BurningVengeanceOnCastAbility extends TriggeredAbilityImpl {
private static final String abilityText = "Whenever you cast a spell from your graveyard, {this} deals 2 damage to any target";
BurningVengeanceOnCastAbility() { BurningVengeanceOnCastAbility() {
super(Zone.BATTLEFIELD, new DamageTargetEffect(2), false); super(Zone.BATTLEFIELD, new DamageTargetEffect(2), false);
TargetAnyTarget target = new TargetAnyTarget(); this.addTarget(new TargetAnyTarget());
this.addTarget(target); setTriggerPhrase("Whenever you cast a spell from your graveyard, ");
} }
private BurningVengeanceOnCastAbility(final BurningVengeanceOnCastAbility ability) { private BurningVengeanceOnCastAbility(final BurningVengeanceOnCastAbility ability) {
@ -65,8 +61,4 @@ class BurningVengeanceOnCastAbility extends TriggeredAbilityImpl {
return new BurningVengeanceOnCastAbility(this); return new BurningVengeanceOnCastAbility(this);
} }
@Override
public String getRule() {
return abilityText;
}
} }

View file

@ -1,29 +1,33 @@
package mage.cards.c; package mage.cards.c;
import java.util.UUID;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.common.FilterUntappedCreature; import mage.filter.predicate.permanent.TappedPredicate;
import java.util.UUID;
/** /**
* *
* @author KholdFuzion * @author KholdFuzion
*/ */
public final class Castle extends CardImpl { public final class Castle extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("untapped creatures");
static {
filter.add(TappedPredicate.UNTAPPED);
}
public Castle(UUID ownerId, CardSetInfo setInfo) { public Castle(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{W}"); super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{W}");
// Untapped creatures you control get +0/+2. // Untapped creatures you control get +0/+2.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(0, 2, Duration.WhileOnBattlefield, new FilterUntappedCreature()))); this.addAbility(new SimpleStaticAbility(new BoostControlledEffect(0, 2, Duration.WhileOnBattlefield, filter)));
} }
private Castle(final Castle card) { private Castle(final Castle card) {

View file

@ -42,7 +42,7 @@ public final class ChamberOfManipulation extends CardImpl {
controlAbility.addTarget(new TargetCreaturePermanent()); controlAbility.addTarget(new TargetCreaturePermanent());
controlAbility.addCost(new DiscardTargetCost(new TargetCardInHand())); controlAbility.addCost(new DiscardTargetCost(new TargetCardInHand()));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(controlAbility, AttachmentType.AURA, this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(controlAbility, AttachmentType.AURA,
Duration.WhileOnBattlefield, "Enchanted land has \"{t}, Discard a card: Gain control of target creature until end of turn.\""))); Duration.WhileOnBattlefield, "Enchanted land has \"{T}, Discard a card: Gain control of target creature until end of turn.\"")));
} }
private ChamberOfManipulation(final ChamberOfManipulation card) { private ChamberOfManipulation(final ChamberOfManipulation card) {

View file

@ -31,7 +31,7 @@ public final class CinderElemental extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {X}{R}, {tap}, Sacrifice Cinder Elemental: Cinder Elemental deals X damage to any target. // {X}{R}, {tap}, Sacrifice Cinder Elemental: Cinder Elemental deals X damage to any target.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.REGULAR), new ManaCostsImpl<>("{X}{R}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.REGULAR, "it"), new ManaCostsImpl<>("{X}{R}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());

View file

@ -43,7 +43,8 @@ public final class ClaimFame extends SplitCard {
// Aftermath // Aftermath
getRightHalfCard().addAbility(new AftermathAbility().setRuleAtTheTop(true)); getRightHalfCard().addAbility(new AftermathAbility().setRuleAtTheTop(true));
// Target creature gets +2/+0 and gains haste until end of turn. // Target creature gets +2/+0 and gains haste until end of turn.
getRightHalfCard().getSpellAbility().addEffect(new BoostTargetEffect(2, 0, Duration.EndOfTurn)); getRightHalfCard().getSpellAbility().addEffect(new BoostTargetEffect(2, 0, Duration.EndOfTurn)
.setText("target creature gets +2/+0"));
getRightHalfCard().getSpellAbility().addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn) getRightHalfCard().getSpellAbility().addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn)
.setText("and gains haste until end of turn")); .setText("and gains haste until end of turn"));
getRightHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); getRightHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent());

View file

@ -32,7 +32,7 @@ public final class CoercivePortal extends CardImpl {
false, false, "<i>Will of the council</i> &mdash; " + false, false, "<i>Will of the council</i> &mdash; " +
"At the beginning of your upkeep, starting with you, each player votes for carnage or homage. " + "At the beginning of your upkeep, starting with you, each player votes for carnage or homage. " +
"If carnage gets more votes, sacrifice {this} and destroy all nonland permanents. " + "If carnage gets more votes, sacrifice {this} and destroy all nonland permanents. " +
"If homage gets more votes or the vote is tied, draw a card" "If homage gets more votes or the vote is tied, draw a card."
)); ));
} }

View file

@ -14,7 +14,6 @@ import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.common.TargetLandPermanent; import mage.target.common.TargetLandPermanent;
@ -38,7 +37,7 @@ public final class ConsecrateLand extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
// Enchanted land is indestructible and can't be enchanted by other Auras. // Enchanted land is indestructible and can't be enchanted by other Auras.
Ability ability2 = new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(IndestructibleAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield, "Enchanted land is indestructible")); Ability ability2 = new SimpleStaticAbility(new GainAbilityAttachedEffect(IndestructibleAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield, "Enchanted land has indestructible"));
ability2.addEffect(new ConsecrateLandRuleEffect()); ability2.addEffect(new ConsecrateLandRuleEffect());
this.addAbility(ability2); this.addAbility(ability2);
} }

View file

@ -30,7 +30,7 @@ public final class CracklingTriton extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// {2}{R}, Sacrifice Crackling Triton: Crackling Triton deals 2 damage to any target. // {2}{R}, Sacrifice Crackling Triton: Crackling Triton deals 2 damage to any target.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new ManaCostsImpl<>("{2}{R}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2, "it"), new ManaCostsImpl<>("{2}{R}"));
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());
this.addAbility(ability); this.addAbility(ability);

View file

@ -32,7 +32,7 @@ public final class CurseOfOblivion extends CardImpl {
// At the beginning of enchanted player's upkeep, that player exiles two cards from their graveyard. // At the beginning of enchanted player's upkeep, that player exiles two cards from their graveyard.
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new ExileFromZoneTargetEffect( this.addAbility(new BeginningOfUpkeepTriggeredAbility(new ExileFromZoneTargetEffect(
Zone.GRAVEYARD, StaticFilters.FILTER_CARD_CARDS, 2, false Zone.GRAVEYARD, StaticFilters.FILTER_CARD_CARDS, 2, false
).setText("that player exiles two cards from their graveyard"), TargetController.ENCHANTED, false)); ), TargetController.ENCHANTED, false));
} }
private CurseOfOblivion(final CurseOfOblivion card) { private CurseOfOblivion(final CurseOfOblivion card) {

View file

@ -55,7 +55,7 @@ class CurseOfVitalityEffect extends OneShotEffect {
CurseOfVitalityEffect() { CurseOfVitalityEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "gain 2 life. Each opponent attacking that player does the same."; this.staticText = "you gain 2 life. Each opponent attacking that player does the same.";
} }
private CurseOfVitalityEffect(final CurseOfVitalityEffect effect) { private CurseOfVitalityEffect(final CurseOfVitalityEffect effect) {

View file

@ -23,7 +23,7 @@ public final class CyclopeanMummy extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// When Cyclopean Mummy dies, exile it. // When Cyclopean Mummy dies, exile it.
this.addAbility(new DiesSourceTriggeredAbility(new ExileSourceEffect())); this.addAbility(new DiesSourceTriggeredAbility(new ExileSourceEffect().setText("exile it")));
} }
private CyclopeanMummy(final CyclopeanMummy card) { private CyclopeanMummy(final CyclopeanMummy card) {

View file

@ -1,5 +1,3 @@
package mage.cards.d; package mage.cards.d;
import java.util.UUID; import java.util.UUID;
@ -27,8 +25,9 @@ public final class DecimatorWeb extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{4}"); super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{4}");
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new LoseLifeTargetEffect(2), new ManaCostsImpl<>("{4}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new LoseLifeTargetEffect(2), new ManaCostsImpl<>("{4}"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addEffect(new AddCountersTargetEffect(CounterType.POISON.createInstance())); ability.addEffect(new AddCountersTargetEffect(CounterType.POISON.createInstance())
ability.addEffect(new MillCardsTargetEffect(6)); .setText(", gets a poison counter"));
ability.addEffect(new MillCardsTargetEffect(6).setText(", then mills six cards"));
ability.addTarget(new TargetOpponent()); ability.addTarget(new TargetOpponent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -14,11 +14,11 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Outcome;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID; import java.util.UUID;
@ -41,7 +41,7 @@ public final class DelifsCube extends CardImpl {
// {2}, Remove a cube counter from Delif's Cube: Regenerate target creature. // {2}, Remove a cube counter from Delif's Cube: Regenerate target creature.
ability = new SimpleActivatedAbility(new RegenerateTargetEffect(), new GenericManaCost(2)); ability = new SimpleActivatedAbility(new RegenerateTargetEffect(), new GenericManaCost(2));
ability.addCost(new RemoveCountersSourceCost(CounterType.CUBE.createInstance())); ability.addCost(new RemoveCountersSourceCost(CounterType.CUBE.createInstance()));
ability.addTarget(new TargetControlledCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,4 +1,3 @@
package mage.cards.d; package mage.cards.d;
import mage.MageInt; import mage.MageInt;
@ -25,7 +24,7 @@ import java.util.UUID;
* @author noxx * @author noxx
*/ */
public final class DevoutChaplain extends CardImpl { public final class DevoutChaplain extends CardImpl {
private static final FilterControlledPermanent humanFilter = new FilterControlledPermanent("untapped Human you control"); private static final FilterControlledPermanent humanFilter = new FilterControlledPermanent("untapped Humans you control");
static { static {
humanFilter.add(TappedPredicate.UNTAPPED); humanFilter.add(TappedPredicate.UNTAPPED);

View file

@ -32,7 +32,7 @@ public final class DivebomberGriffin extends CardImpl {
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// {tap}, Sacrifice Divebomber Griffin: Divebomber Griffin deals 3 damage to target attacking or blocking creature. // {tap}, Sacrifice Divebomber Griffin: Divebomber Griffin deals 3 damage to target attacking or blocking creature.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(3), new TapSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(3, "it"), new TapSourceCost());
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetCreaturePermanent(new FilterAttackingOrBlockingCreature())); ability.addTarget(new TargetCreaturePermanent(new FilterAttackingOrBlockingCreature()));
this.addAbility(ability); this.addAbility(ability);

View file

@ -56,7 +56,7 @@ class DoomfallEffect extends OneShotEffect {
public DoomfallEffect() { public DoomfallEffect() {
super(Outcome.Exile); super(Outcome.Exile);
this.staticText = "target player exiles a creature they control"; this.staticText = "target opponent exiles a creature they control";
} }
private DoomfallEffect(final DoomfallEffect effect) { private DoomfallEffect(final DoomfallEffect effect) {

View file

@ -23,7 +23,7 @@ import java.util.UUID;
public final class EarlOfSquirrel extends CardImpl { public final class EarlOfSquirrel extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creature tokens you control"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creature tokens you control");
private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("Squirrels you control"); private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("Squirrels");
static { static {
filter.add(TokenPredicate.TRUE); filter.add(TokenPredicate.TRUE);

View file

@ -15,7 +15,6 @@ import mage.constants.Zone;
import mage.game.Game; import mage.game.Game;
import mage.game.events.DamagedPlayerEvent; import mage.game.events.DamagedPlayerEvent;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.events.GameEvent.EventType;
import mage.target.targetpointer.FixedTarget; import mage.target.targetpointer.FixedTarget;
/** /**
@ -80,6 +79,6 @@ class EdricSpymasterOfTrestTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever a creature deals combat damage to one of your opponents, its controller may draw a card"; return "Whenever a creature deals combat damage to one of your opponents, its controller may draw a card.";
} }
} }

View file

@ -6,7 +6,6 @@ import mage.abilities.effects.common.PreventAllDamageToAllEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.TokenPredicate; import mage.filter.predicate.permanent.TokenPredicate;
@ -34,7 +33,7 @@ public final class EmmaraTandris extends CardImpl {
this.toughness = new MageInt(7); this.toughness = new MageInt(7);
// Prevent all damage that would be dealt to creature tokens you control. // Prevent all damage that would be dealt to creature tokens you control.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new PreventAllDamageToAllEffect(Duration.WhileOnBattlefield, StaticFilters.FILTER_CREATURE_TOKENS))); this.addAbility(new SimpleStaticAbility(new PreventAllDamageToAllEffect(Duration.WhileOnBattlefield, filter)));
} }
private EmmaraTandris(final EmmaraTandris card) { private EmmaraTandris(final EmmaraTandris card) {

View file

@ -45,7 +45,7 @@ class EnterTheGodEternalsEffect extends OneShotEffect {
EnterTheGodEternalsEffect() { EnterTheGodEternalsEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "{this} deals 4 damage to target creature and you gain life equal to the damage dealt this way. " staticText = "{this} deals 4 damage to target creature and you gain life equal to the damage dealt this way. "
+ "Target player mills four cards. Amass 4."; + "Target player mills four cards. Amass Zombies 4.";
} }
private EnterTheGodEternalsEffect(final EnterTheGodEternalsEffect effect) { private EnterTheGodEternalsEffect(final EnterTheGodEternalsEffect effect) {

View file

@ -40,7 +40,7 @@ public final class FaerieNoble extends CardImpl {
// Other Faerie creatures you control get +0/+1. // Other Faerie creatures you control get +0/+1.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(0, 1, Duration.WhileOnBattlefield, filter, true))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(0, 1, Duration.WhileOnBattlefield, filter, true)));
// {tap}: Other Faerie creatures you control get +1/+0 until end of turn. // {tap}: Other Faerie creatures you control get +1/+0 until end of turn.
Effect effect = new BoostControlledEffect(1, 0, Duration.WhileOnBattlefield, filter, true); Effect effect = new BoostControlledEffect(1, 0, Duration.EndOfTurn, filter, true);
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new TapSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new TapSourceCost());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,4 +1,3 @@
package mage.cards.f; package mage.cards.f;
import java.util.UUID; import java.util.UUID;
@ -54,7 +53,7 @@ class FatalMutationAbility extends TriggeredAbilityImpl {
public FatalMutationAbility(Effect effect) { public FatalMutationAbility(Effect effect) {
super(Zone.BATTLEFIELD, effect, false); super(Zone.BATTLEFIELD, effect, false);
setTriggerPhrase("Whenever enchanted creature is turned face up, "); setTriggerPhrase("When enchanted creature is turned face up, ");
} }
private FatalMutationAbility(final FatalMutationAbility ability) { private FatalMutationAbility(final FatalMutationAbility ability) {
@ -81,4 +80,3 @@ class FatalMutationAbility extends TriggeredAbilityImpl {
} }
} }

View file

@ -1,25 +1,24 @@
package mage.cards.f; package mage.cards.f;
import java.util.UUID;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.BoostAllEffect;
import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Zone; import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.AbilityPredicate; import mage.filter.predicate.mageobject.AbilityPredicate;
import java.util.UUID;
/** /**
* *
* @author noxx * @author noxx
*/ */
public final class FavorableWinds extends CardImpl { public final class FavorableWinds extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures you control with flying"); private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creatures you control with flying");
static { static {
filter.add(new AbilityPredicate(FlyingAbility.class)); filter.add(new AbilityPredicate(FlyingAbility.class));
@ -29,7 +28,7 @@ public final class FavorableWinds extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{U}"); super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{U}");
// Creatures you control with flying get +1/+1. // Creatures you control with flying get +1/+1.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filter, false))); this.addAbility(new SimpleStaticAbility(new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, filter, false)));
} }
private FavorableWinds(final FavorableWinds card) { private FavorableWinds(final FavorableWinds card) {

View file

@ -37,7 +37,7 @@ public final class FiveAlarmFire extends CardImpl {
//Whenever a creature you control deals combat damage, put a blaze counter on Five-Alarm Fire. //Whenever a creature you control deals combat damage, put a blaze counter on Five-Alarm Fire.
this.addAbility(new FiveAlarmFireTriggeredAbility()); this.addAbility(new FiveAlarmFireTriggeredAbility());
//Remove five blaze counters from Five-Alarm Fire: Five-Alarm Fire deals 5 damage to any target. //Remove five blaze counters from Five-Alarm Fire: Five-Alarm Fire deals 5 damage to any target.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(5), new RemoveCountersSourceCost(CounterType.BLAZE.createInstance(5))); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(5, "it"), new RemoveCountersSourceCost(CounterType.BLAZE.createInstance(5)));
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,4 +1,3 @@
package mage.cards.f; package mage.cards.f;
import java.util.UUID; import java.util.UUID;
@ -24,9 +23,8 @@ public final class FleetfeatherSandals extends CardImpl {
this.subtype.add(SubType.EQUIPMENT); this.subtype.add(SubType.EQUIPMENT);
// Equipped creature has flying and haste. // Equipped creature has flying and haste.
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, Ability ability = new SimpleStaticAbility(new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.EQUIPMENT));
new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA, Duration.WhileInGraveyard)); ability.addEffect(new GainAbilityAttachedEffect(HasteAbility.getInstance(), AttachmentType.EQUIPMENT).setText("and haste"));
ability.addEffect(new GainAbilityAttachedEffect(HasteAbility.getInstance(), AttachmentType.AURA, Duration.WhileInGraveyard));
this.addAbility(ability); this.addAbility(ability);
// Equip {2} // Equip {2}
this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(2))); this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(2)));

View file

@ -36,7 +36,7 @@ public final class FlitterstepEidolon extends CardImpl {
this.addAbility(new CantBeBlockedSourceAbility()); this.addAbility(new CantBeBlockedSourceAbility());
// Enchanted creature gets +1/+1 and can't be blocked. // Enchanted creature gets +1/+1 and can't be blocked.
Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1,1, Duration.WhileOnBattlefield)); Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1,1, Duration.WhileOnBattlefield));
ability.addEffect(new CantBeBlockedAttachedEffect(AttachmentType.AURA)); ability.addEffect(new CantBeBlockedAttachedEffect(AttachmentType.AURA).setText("and can't be blocked"));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -23,7 +23,7 @@ public final class FontOfIre extends CardImpl {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}");
// {3}{R}, Sacrifice Font of Ire: Font of Ire deals 5 damage to target player. // {3}{R}, Sacrifice Font of Ire: Font of Ire deals 5 damage to target player.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(5), new ManaCostsImpl<>("{3}{R}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(5, "it"), new ManaCostsImpl<>("{3}{R}"));
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetPlayerOrPlaneswalker()); ability.addTarget(new TargetPlayerOrPlaneswalker());
this.addAbility(ability); this.addAbility(ability);

View file

@ -34,9 +34,9 @@ public final class FromUnderTheFloorboards extends CardImpl {
// If From Under the Floorboards's madness cost was paid, instead create X of those tokens tapped and you gain X life. // If From Under the Floorboards's madness cost was paid, instead create X of those tokens tapped and you gain X life.
DynamicValue xValue = new FromUnderTheFloorboardsManacostVariableValue(); DynamicValue xValue = new FromUnderTheFloorboardsManacostVariableValue();
Effect effect = new CreateTokenEffect(new ZombieToken(), xValue, true, false); Effect effect = new CreateTokenEffect(new ZombieToken(), xValue, true, false);
effect.setText("Create three 2/2 black Zombie creature tokens tapped and you gain 3 life. If {this} madness cost was paid, instead create X of those tokens tapped and you gain X life"); effect.setText("Create three tapped 2/2 black Zombie creature tokens and you gain 3 life. If this spell's madness cost was paid, instead create X of those tokens");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
this.getSpellAbility().addEffect(new GainLifeEffect(xValue)); this.getSpellAbility().addEffect(new GainLifeEffect(xValue).concatBy("and"));
} }
private FromUnderTheFloorboards(final FromUnderTheFloorboards card) { private FromUnderTheFloorboards(final FromUnderTheFloorboards card) {

View file

@ -1,4 +1,3 @@
package mage.cards.g; package mage.cards.g;
import java.util.UUID; import java.util.UUID;
@ -21,7 +20,9 @@ public final class GerrardsBattleCry extends CardImpl {
public GerrardsBattleCry(UUID ownerId, CardSetInfo setInfo) { public GerrardsBattleCry(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}");
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE, false), new ManaCostsImpl<>("{2}{W}"))); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD,
new BoostControlledEffect(1, 1, Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES, false),
new ManaCostsImpl<>("{2}{W}")));
} }
private GerrardsBattleCry(final GerrardsBattleCry card) { private GerrardsBattleCry(final GerrardsBattleCry card) {

View file

@ -24,7 +24,6 @@ import mage.players.Player;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import mage.target.targetadjustment.TargetAdjuster;
import java.util.UUID; import java.util.UUID;
@ -51,7 +50,7 @@ public final class GiftOfDoom extends CardImpl {
)); ));
ability2.addEffect(new GainAbilityAttachedEffect( ability2.addEffect(new GainAbilityAttachedEffect(
IndestructibleAbility.getInstance(), AttachmentType.AURA IndestructibleAbility.getInstance(), AttachmentType.AURA
)); ).setText("and indestructible"));
this.addAbility(ability2); this.addAbility(ability2);
// MorphSacrifice another creature. // MorphSacrifice another creature.

View file

@ -1,4 +1,3 @@
package mage.cards.g; package mage.cards.g;
import mage.abilities.Ability; import mage.abilities.Ability;
@ -18,7 +17,7 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
@ -44,8 +43,7 @@ public final class GleamOfAuthority extends CardImpl {
this.addAbility(ability); this.addAbility(ability);
// Enchanted creature gets +1/+1 for each +1/+1 counter on other creatures you control // Enchanted creature gets +1/+1 for each +1/+1 counter on other creatures you control
DynamicValue amount = new CountersOnControlledCount(); this.addAbility(new SimpleStaticAbility(new BoostEnchantedEffect(CountersOnControlledCount.instance, CountersOnControlledCount.instance)
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(amount, amount, Duration.WhileOnBattlefield)
.setText("Enchanted creature gets +1/+1 for each +1/+1 counter on other creatures you control.") .setText("Enchanted creature gets +1/+1 for each +1/+1 counter on other creatures you control.")
)); ));
@ -53,7 +51,7 @@ public final class GleamOfAuthority extends CardImpl {
ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(VigilanceAbility.getInstance(), AttachmentType.AURA)); ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(VigilanceAbility.getInstance(), AttachmentType.AURA));
Ability gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BolsterEffect(1), new ManaCostsImpl<>("{W}")); Ability gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BolsterEffect(1), new ManaCostsImpl<>("{W}"));
gainedAbility.addCost(new TapSourceCost()); gainedAbility.addCost(new TapSourceCost());
ability.addEffect(new GainAbilityAttachedEffect(gainedAbility, AttachmentType.AURA).setText("and \"{W}, {T}: Bloster 1.\"")); ability.addEffect(new GainAbilityAttachedEffect(gainedAbility, AttachmentType.AURA).setText("and \"{W}, {T}: Bolster 1.\""));
this.addAbility(ability); this.addAbility(ability);
} }
@ -67,22 +65,14 @@ public final class GleamOfAuthority extends CardImpl {
} }
} }
class CountersOnControlledCount implements DynamicValue { enum CountersOnControlledCount implements DynamicValue {
instance;
static FilterCreaturePermanent filter = new FilterCreaturePermanent();
CountersOnControlledCount() {
}
private CountersOnControlledCount(final CountersOnControlledCount dynamicValue) {
super();
}
@Override @Override
public int calculate(Game game, Ability sourceAbility, Effect effect) { public int calculate(Game game, Ability sourceAbility, Effect effect) {
int count = 0; int count = 0;
Permanent enchantment = game.getPermanent(sourceAbility.getSourceId()); Permanent enchantment = game.getPermanent(sourceAbility.getSourceId());
for (Permanent permanent : game.getState().getBattlefield().getAllActivePermanents(filter, sourceAbility.getControllerId(), game)) { for (Permanent permanent : game.getBattlefield().getAllActivePermanents(StaticFilters.FILTER_PERMANENT_CREATURE, sourceAbility.getControllerId(), game)) {
if (!permanent.getId().equals(enchantment.getAttachedTo())) { if (!permanent.getId().equals(enchantment.getAttachedTo())) {
count += permanent.getCounters(game).getCount(CounterType.P1P1); count += permanent.getCounters(game).getCount(CounterType.P1P1);
} }
@ -92,7 +82,7 @@ class CountersOnControlledCount implements DynamicValue {
@Override @Override
public CountersOnControlledCount copy() { public CountersOnControlledCount copy() {
return new CountersOnControlledCount(this); return instance;
} }
@Override @Override

View file

@ -1,4 +1,3 @@
package mage.cards.g; package mage.cards.g;
import java.util.UUID; import java.util.UUID;
@ -25,7 +24,7 @@ public final class Goblinslide extends CardImpl {
this.addAbility(new SpellCastControllerTriggeredAbility(new DoIfCostPaid( this.addAbility(new SpellCastControllerTriggeredAbility(new DoIfCostPaid(
new CreateTokenEffect(new GoblinToken(true)), new CreateTokenEffect(new GoblinToken(true)),
new GenericManaCost(1)), new GenericManaCost(1)),
StaticFilters.FILTER_SPELL_NON_CREATURE, StaticFilters.FILTER_SPELL_A_NON_CREATURE,
false false
)); ));
} }

View file

@ -20,7 +20,7 @@ import mage.filter.predicate.mageobject.ColorPredicate;
*/ */
public final class GodPharaohsFaithful extends CardImpl { public final class GodPharaohsFaithful extends CardImpl {
private static final FilterSpell filter = new FilterSpell("a blue, black or red spell"); private static final FilterSpell filter = new FilterSpell("a blue, black, or red spell");
static { static {
filter.add(Predicates.or(new ColorPredicate(ObjectColor.BLUE), new ColorPredicate(ObjectColor.BLACK), new ColorPredicate(ObjectColor.RED))); filter.add(Predicates.or(new ColorPredicate(ObjectColor.BLUE), new ColorPredicate(ObjectColor.BLACK), new ColorPredicate(ObjectColor.RED)));
} }

View file

@ -109,6 +109,6 @@ class GroundPounderTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever you roll a 5 or higher on a die, {this} gains trample until end of turn"; return "Whenever you roll a 5 or higher on a die, {this} gains trample until end of turn.";
} }
} }

View file

@ -1,4 +1,3 @@
package mage.cards.g; package mage.cards.g;
import java.util.UUID; import java.util.UUID;
@ -12,7 +11,6 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.constants.Zone;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.permanent.AttackingPredicate; import mage.filter.predicate.permanent.AttackingPredicate;
@ -33,10 +31,9 @@ public final class GruulWarChant extends CardImpl {
// Attacking creatures you control get +1/+0 and have menace. (They can't be blocked except by two or more creatures.) // Attacking creatures you control get +1/+0 and have menace. (They can't be blocked except by two or more creatures.)
Ability ability = new SimpleStaticAbility( Ability ability = new SimpleStaticAbility(new BoostAllEffect(1,0, Duration.WhileOnBattlefield, filter, false));
Zone.BATTLEFIELD, ability.addEffect(new GainAbilityAllEffect(new MenaceAbility(false), Duration.WhileOnBattlefield, filter)
new GainAbilityAllEffect(new MenaceAbility(false), Duration.WhileOnBattlefield, filter)); .setText("and have menace"));
ability.addEffect(new BoostAllEffect(1,0, Duration.WhileOnBattlefield, filter, false));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,12 +1,10 @@
package mage.cards.h; package mage.cards.h;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.BoostAllEffect;
import mage.abilities.effects.common.counter.AddPoisonCounterTargetEffect; import mage.abilities.effects.common.counter.AddPoisonCounterTargetEffect;
import mage.abilities.keyword.InfectAbility; import mage.abilities.keyword.InfectAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -14,9 +12,8 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.constants.Zone;
import mage.filter.FilterSpell; import mage.filter.FilterSpell;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.AbilityPredicate; import mage.filter.predicate.mageobject.AbilityPredicate;
import mage.target.TargetPlayer; import mage.target.TargetPlayer;
@ -26,7 +23,7 @@ import mage.target.TargetPlayer;
*/ */
public final class HandOfThePraetors extends CardImpl { public final class HandOfThePraetors extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures with infect"); private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creatures you control with infect");
private static final FilterSpell filterSpell = new FilterSpell("a creature spell with infect"); private static final FilterSpell filterSpell = new FilterSpell("a creature spell with infect");
static { static {
@ -44,7 +41,7 @@ public final class HandOfThePraetors extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
this.addAbility(InfectAbility.getInstance()); this.addAbility(InfectAbility.getInstance());
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filter, true))); this.addAbility(new SimpleStaticAbility(new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, filter, true)));
SpellCastControllerTriggeredAbility ability = new SpellCastControllerTriggeredAbility(new AddPoisonCounterTargetEffect(1), filterSpell, false); SpellCastControllerTriggeredAbility ability = new SpellCastControllerTriggeredAbility(new AddPoisonCounterTargetEffect(1), filterSpell, false);
ability.addTarget(new TargetPlayer()); ability.addTarget(new TargetPlayer());
this.addAbility(ability); this.addAbility(ability);

View file

@ -1,4 +1,3 @@
package mage.cards.h; package mage.cards.h;
import java.util.UUID; import java.util.UUID;
@ -18,10 +17,9 @@ public final class HarrowingJourney extends CardImpl {
public HarrowingJourney(UUID ownerId, CardSetInfo setInfo) { public HarrowingJourney(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{B}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{4}{B}");
// Target player draws three cards and loses 3 life. // Target player draws three cards and loses 3 life.
this.getSpellAbility().addEffect(new DrawCardTargetEffect(3)); this.getSpellAbility().addEffect(new DrawCardTargetEffect(3));
this.getSpellAbility().addEffect(new LoseLifeTargetEffect(3)); this.getSpellAbility().addEffect(new LoseLifeTargetEffect(3).setText("and loses 3 life"));
this.getSpellAbility().addTarget(new TargetPlayer()); this.getSpellAbility().addTarget(new TargetPlayer());
} }

View file

@ -1,5 +1,3 @@
package mage.cards.h; package mage.cards.h;
import java.util.UUID; import java.util.UUID;
@ -66,7 +64,7 @@ class HiredTorturerEffect extends OneShotEffect {
public HiredTorturerEffect() { public HiredTorturerEffect() {
super(Outcome.Detriment); super(Outcome.Detriment);
staticText = "and reveals a card at random from their hand"; staticText = ", then reveals a card at random from their hand";
} }
private HiredTorturerEffect(final HiredTorturerEffect effect) { private HiredTorturerEffect(final HiredTorturerEffect effect) {

View file

@ -1,4 +1,3 @@
package mage.cards.h; package mage.cards.h;
import java.util.UUID; import java.util.UUID;
@ -18,10 +17,9 @@ public final class HorrifyingRevelation extends CardImpl {
public HorrifyingRevelation(UUID ownerId, CardSetInfo setInfo) { public HorrifyingRevelation(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{B}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{B}");
this.getSpellAbility().addTarget(new TargetPlayer()); this.getSpellAbility().addTarget(new TargetPlayer());
this.getSpellAbility().addEffect(new DiscardTargetEffect(1)); this.getSpellAbility().addEffect(new DiscardTargetEffect(1));
this.getSpellAbility().addEffect(new MillCardsTargetEffect(1)); this.getSpellAbility().addEffect(new MillCardsTargetEffect(1).setText(", then mills a card"));
} }
private HorrifyingRevelation(final HorrifyingRevelation card) { private HorrifyingRevelation(final HorrifyingRevelation card) {

View file

@ -35,7 +35,7 @@ public final class IcatianJavelineers extends CardImpl {
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.JAVELIN.createInstance()), "with a javelin counter on it")); this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.JAVELIN.createInstance()), "with a javelin counter on it"));
// {tap}, Remove a javelin counter from Icatian Javelineers: Icatian Javelineers deals 1 damage to any target. // {tap}, Remove a javelin counter from Icatian Javelineers: Icatian Javelineers deals 1 damage to any target.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new TapSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1, "it"), new TapSourceCost());
ability.addCost(new RemoveCountersSourceCost(CounterType.JAVELIN.createInstance())); ability.addCost(new RemoveCountersSourceCost(CounterType.JAVELIN.createInstance()));
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());
this.addAbility(ability); this.addAbility(ability);

View file

@ -17,7 +17,7 @@ import mage.filter.predicate.mageobject.ColorPredicate;
*/ */
public final class Insight extends CardImpl { public final class Insight extends CardImpl {
private static final FilterSpell filter = new FilterSpell("green spell"); private static final FilterSpell filter = new FilterSpell("a green spell");
static { static {
filter.add(new ColorPredicate(ObjectColor.GREEN)); filter.add(new ColorPredicate(ObjectColor.GREEN));
@ -28,7 +28,7 @@ public final class Insight extends CardImpl {
// Whenever an opponent casts a green spell, you draw a card. // Whenever an opponent casts a green spell, you draw a card.
this.addAbility(new SpellCastOpponentTriggeredAbility(new DrawCardSourceControllerEffect(1), filter, false)); this.addAbility(new SpellCastOpponentTriggeredAbility(new DrawCardSourceControllerEffect(1, "you"), filter, false));
} }
private Insight(final Insight card) { private Insight(final Insight card) {

View file

@ -1,4 +1,3 @@
package mage.cards.i; package mage.cards.i;
import mage.MageInt; import mage.MageInt;
@ -26,7 +25,7 @@ import java.util.UUID;
*/ */
public final class IronHeartChimera extends CardImpl { public final class IronHeartChimera extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Chimera creature you control"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Chimera creature");
static { static {
filter.add(SubType.CHIMERA.getPredicate()); filter.add(SubType.CHIMERA.getPredicate());
@ -44,7 +43,8 @@ public final class IronHeartChimera extends CardImpl {
// Sacrifice Iron-Heart Chimera: Put a +2/+2 counter on target Chimera creature. It gains vigilance. // Sacrifice Iron-Heart Chimera: Put a +2/+2 counter on target Chimera creature. It gains vigilance.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P2P2.createInstance()), new SacrificeSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P2P2.createInstance()), new SacrificeSourceCost());
ability.addEffect(new GainAbilityTargetEffect(VigilanceAbility.getInstance(), Duration.WhileOnBattlefield)); ability.addEffect(new GainAbilityTargetEffect(VigilanceAbility.getInstance(), Duration.WhileOnBattlefield)
.setText("It gains vigilance. <i>(This effect lasts indefinitely.)</i>"));
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(filter));
addAbility(ability); addAbility(ability);
} }

View file

@ -1,7 +1,6 @@
package mage.cards.i; package mage.cards.i;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.OneShotEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -42,11 +41,11 @@ class IronMaidenEffect extends OneShotEffect {
private IronMaidenEffect(final IronMaidenEffect effect) { private IronMaidenEffect(final IronMaidenEffect effect) {
super(effect); super(effect);
this.staticText = "Iron Maiden deals X damage to that player, where X is the number of cards in their hand minus 4";
} }
public IronMaidenEffect() { public IronMaidenEffect() {
super(Outcome.Damage); super(Outcome.Damage);
this.staticText = "{this} deals X damage to that player, where X is the number of cards in their hand minus 4";
} }
@Override @Override

View file

@ -1,4 +1,3 @@
package mage.cards.j; package mage.cards.j;
import java.util.UUID; import java.util.UUID;
@ -10,9 +9,9 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.filter.common.FilterCreaturePermanent; import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.mageobject.AnotherPredicate; import mage.filter.predicate.mageobject.AnotherPredicate;
import mage.target.common.TargetCreaturePermanent; import mage.target.TargetPermanent;
/** /**
* *
@ -20,12 +19,10 @@ import mage.target.common.TargetCreaturePermanent;
*/ */
public final class JadeBearer extends CardImpl { public final class JadeBearer extends CardImpl {
private static final FilterCreaturePermanent filterYourAnotherMerfolk = new FilterCreaturePermanent(); private static final FilterControlledCreaturePermanent filter =
new FilterControlledCreaturePermanent(SubType.MERFOLK, "another target Merfolk you control");
static { static {
filterYourAnotherMerfolk.add(AnotherPredicate.instance); filter.add(AnotherPredicate.instance);
filterYourAnotherMerfolk.add(SubType.MERFOLK.getPredicate());
filterYourAnotherMerfolk.add(TargetController.YOU.getControllerPredicate());
filterYourAnotherMerfolk.setMessage("another " + SubType.MERFOLK.toString() + " you control");
} }
public JadeBearer(UUID ownerId, CardSetInfo setInfo) { public JadeBearer(UUID ownerId, CardSetInfo setInfo) {
@ -38,7 +35,7 @@ public final class JadeBearer extends CardImpl {
// When Jade Bearer enters the battlefield, put a +1/+1 counter on another target Merfolk you control. // When Jade Bearer enters the battlefield, put a +1/+1 counter on another target Merfolk you control.
Ability ability = new EntersBattlefieldTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()), false); Ability ability = new EntersBattlefieldTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()), false);
ability.addTarget(new TargetCreaturePermanent(filterYourAnotherMerfolk)); ability.addTarget(new TargetPermanent(filter));
this.addAbility(ability); this.addAbility(ability);
} }
@ -50,4 +47,4 @@ public final class JadeBearer extends CardImpl {
public JadeBearer copy() { public JadeBearer copy() {
return new JadeBearer(this); return new JadeBearer(this);
} }
} }

View file

@ -28,7 +28,7 @@ public final class JujuBubble extends CardImpl {
// When you play a card, sacrifice Juju Bubble. // When you play a card, sacrifice Juju Bubble.
this.addAbility(new PlayCardTriggeredAbility(TargetController.YOU, Zone.BATTLEFIELD, this.addAbility(new PlayCardTriggeredAbility(TargetController.YOU, Zone.BATTLEFIELD,
new SacrificeSourceEffect(), false)); new SacrificeSourceEffect(), false).setTriggerPhrase("When you play a card, "));
// {2}: You gain 1 life. // {2}: You gain 1 life.
this.addAbility(new SimpleActivatedAbility(new GainLifeEffect(1), new GenericManaCost(2))); this.addAbility(new SimpleActivatedAbility(new GainLifeEffect(1), new GenericManaCost(2)));

View file

@ -1,4 +1,3 @@
package mage.cards.k; package mage.cards.k;
import java.util.UUID; import java.util.UUID;
@ -33,7 +32,7 @@ public final class KarplusanHound extends CardImpl {
Ability ability = new ConditionalInterveningIfTriggeredAbility( Ability ability = new ConditionalInterveningIfTriggeredAbility(
new AttacksTriggeredAbility(new DamageTargetEffect(2), false), new AttacksTriggeredAbility(new DamageTargetEffect(2), false),
new PermanentsOnTheBattlefieldCondition(filter), new PermanentsOnTheBattlefieldCondition(filter),
"if you control a Chandra planeswalker, " "Whenever {this} attacks, if you control a Chandra planeswalker, "
+ "this creature deals 2 damage to any target" + "this creature deals 2 damage to any target"
); );
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());

View file

@ -57,8 +57,7 @@ class KjeldoranEliteGuardEffect extends OneShotEffect {
KjeldoranEliteGuardEffect() { KjeldoranEliteGuardEffect() {
super(Outcome.Neutral); super(Outcome.Neutral);
staticText = "Target creature gets +2/+2 until end of turn. " staticText = "Target creature gets +2/+2 until end of turn. "
+ "When that creature leaves the battlefield this turn, sacrifice Kjeldoran Elite Guard. " + "When that creature leaves the battlefield this turn, sacrifice Kjeldoran Elite Guard.";
+ "Activate only during combat.";
} }
@Override @Override

View file

@ -1,4 +1,3 @@
package mage.cards.l; package mage.cards.l;
import mage.MageInt; import mage.MageInt;
@ -44,7 +43,8 @@ public final class LeadBellyChimera extends CardImpl {
// Sacrifice Lead-Belly Chimera: Put a +2/+2 counter on target Chimera creature. It gains trample. // Sacrifice Lead-Belly Chimera: Put a +2/+2 counter on target Chimera creature. It gains trample.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P2P2.createInstance()), new SacrificeSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.P2P2.createInstance()), new SacrificeSourceCost());
ability.addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield)); ability.addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield)
.setText("It gains trample. <i>(This effect lasts indefinitely.)</i>"));
ability.addTarget(new TargetCreaturePermanent(filter)); ability.addTarget(new TargetCreaturePermanent(filter));
addAbility(ability); addAbility(ability);
} }

View file

@ -29,7 +29,7 @@ import java.util.UUID;
*/ */
public final class LozhanDragonsLegacy extends CardImpl { public final class LozhanDragonsLegacy extends CardImpl {
private static final FilterSpell filter = new FilterSpell("an Adventure spell or Dragon spell"); private static final FilterSpell filter = new FilterSpell("an Adventure or Dragon spell");
private static final FilterPermanentOrPlayer filter2 private static final FilterPermanentOrPlayer filter2
= new FilterAnyTarget("any target that isn't a commander"); = new FilterAnyTarget("any target that isn't a commander");

View file

@ -1,4 +1,3 @@
package mage.cards.m; package mage.cards.m;
import java.util.UUID; import java.util.UUID;
@ -46,8 +45,7 @@ public final class MalakirSoothsayer extends CardImpl {
new TapSourceCost()); new TapSourceCost());
ability.setAbilityWord(AbilityWord.COHORT); ability.setAbilityWord(AbilityWord.COHORT);
ability.addCost(new TapTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, false))); ability.addCost(new TapTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, false)));
Effect effect = new LoseLifeSourceControllerEffect(1); Effect effect = new LoseLifeSourceControllerEffect(1).concatBy("and");
effect.setText("and you lose a life");
ability.addEffect(effect); ability.addEffect(effect);
this.addAbility(ability); this.addAbility(ability);

View file

@ -32,7 +32,7 @@ import mage.game.permanent.Permanent;
*/ */
public final class ManorGargoyle extends CardImpl { public final class ManorGargoyle extends CardImpl {
private static final String rule = "{this} is indestructible as long as it has defender."; private static final String rule = "{this} has indestructible as long as it has defender.";
public ManorGargoyle(UUID ownerId, CardSetInfo setInfo) { public ManorGargoyle(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{5}"); super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{5}");

View file

@ -48,7 +48,7 @@ public final class MiirymSentinelWyrm extends CardImpl {
Zone.BATTLEFIELD, new CreateTokenCopyTargetEffect(true).setIsntLegendary(true), Zone.BATTLEFIELD, new CreateTokenCopyTargetEffect(true).setIsntLegendary(true),
filter, false, SetTargetPointer.PERMANENT, "Whenever another nontoken Dragon " + filter, false, SetTargetPointer.PERMANENT, "Whenever another nontoken Dragon " +
"enters the battlefield under your control, create a token that's a copy of it, " + "enters the battlefield under your control, create a token that's a copy of it, " +
"except the token isn't legendary if that Dragon is legendary." "except the token isn't legendary."
)); ));
} }

View file

@ -34,7 +34,7 @@ public final class MizziumTank extends CardImpl {
// Whenever you cast a noncreature spell, Mizzium Tank becomes an artifact creature and gets +1/+1 until end of turn. // Whenever you cast a noncreature spell, Mizzium Tank becomes an artifact creature and gets +1/+1 until end of turn.
Ability ability = new SpellCastControllerTriggeredAbility(new AddCardTypeSourceEffect( Ability ability = new SpellCastControllerTriggeredAbility(new AddCardTypeSourceEffect(
Duration.EndOfTurn, CardType.ARTIFACT, CardType.CREATURE Duration.EndOfTurn, CardType.ARTIFACT, CardType.CREATURE
).setText("{this} becomes an artifact creature"), StaticFilters.FILTER_SPELL_NON_CREATURE, false); ).setText("{this} becomes an artifact creature"), StaticFilters.FILTER_SPELL_A_NON_CREATURE, false);
ability.addEffect(new BoostSourceEffect( ability.addEffect(new BoostSourceEffect(
1, 1, Duration.EndOfTurn 1, 1, Duration.EndOfTurn
).setText("and gets +1/+1 until end of turn")); ).setText("and gets +1/+1 until end of turn"));

View file

@ -28,7 +28,7 @@ public final class MoggFanatic extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// Sacrifice Mogg Fanatic: Mogg Fanatic deals 1 damage to any target. // Sacrifice Mogg Fanatic: Mogg Fanatic deals 1 damage to any target.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new SacrificeSourceCost()); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1, "it"), new SacrificeSourceCost());
ability.addTarget(new TargetAnyTarget()); ability.addTarget(new TargetAnyTarget());
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,4 +1,3 @@
package mage.cards.m; package mage.cards.m;
import java.util.UUID; import java.util.UUID;
@ -32,7 +31,8 @@ public final class MortalWound extends CardImpl {
Ability ability = new EnchantAbility(auraTarget); Ability ability = new EnchantAbility(auraTarget);
this.addAbility(ability); this.addAbility(ability);
// When enchanted creature is dealt damage, destroy it. // When enchanted creature is dealt damage, destroy it.
this.addAbility(new DealtDamageAttachedTriggeredAbility(new DestroyAttachedToEffect("it"), false)); this.addAbility(new DealtDamageAttachedTriggeredAbility(new DestroyAttachedToEffect("it"), false)
.setTriggerPhrase("When enchanted creature is dealt damage, "));
} }
private MortalWound(final MortalWound card) { private MortalWound(final MortalWound card) {

View file

@ -22,7 +22,8 @@ public final class Mugging extends CardImpl {
// Mugging deals 2 damage to target creature. That creature can't block this turn. // Mugging deals 2 damage to target creature. That creature can't block this turn.
this.getSpellAbility().addEffect(new DamageTargetEffect(2)); this.getSpellAbility().addEffect(new DamageTargetEffect(2));
this.getSpellAbility().addEffect(new CantBlockTargetEffect(Duration.EndOfTurn)); this.getSpellAbility().addEffect(new CantBlockTargetEffect(Duration.EndOfTurn)
.setText("That creature can't block this turn"));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
} }

View file

@ -1,9 +1,8 @@
package mage.cards.m; package mage.cards.m;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -33,7 +32,7 @@ public final class MummyParamount extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// Whenever another Zombie enters the battlefield under your control, Mummy Paramount gets +1/+1 until end of turn. // Whenever another Zombie enters the battlefield under your control, Mummy Paramount gets +1/+1 until end of turn.
this.addAbility(new EntersBattlefieldAllTriggeredAbility(new BoostSourceEffect(1, 1, Duration.EndOfTurn), filter)); this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new BoostSourceEffect(1, 1, Duration.EndOfTurn), filter));
} }
private MummyParamount(final MummyParamount card) { private MummyParamount(final MummyParamount card) {

View file

@ -26,7 +26,7 @@ public final class NissasRevelation extends CardImpl {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{5}{G}{G}"); super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{5}{G}{G}");
// Scry 5, then reveal the top card of your library. If it's a creature card, you draw cards equal to its power and you gain life equal to its toughness. // Scry 5, then reveal the top card of your library. If it's a creature card, you draw cards equal to its power and you gain life equal to its toughness.
this.getSpellAbility().addEffect(new ScryEffect(5)); this.getSpellAbility().addEffect(new ScryEffect(5, false));
this.getSpellAbility().addEffect(new NissasRevelationEffect()); this.getSpellAbility().addEffect(new NissasRevelationEffect());
} }

View file

@ -69,7 +69,7 @@ public final class NoMercy extends CardImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever a creature deals damage to you, destroy it"; return "Whenever a creature deals damage to you, destroy it.";
} }
} }

View file

@ -36,7 +36,7 @@ public final class NoxiousGhoul extends CardImpl {
// Whenever Noxious Ghoul or another Zombie enters the battlefield, all non-Zombie creatures get -1/-1 until end of turn. // Whenever Noxious Ghoul or another Zombie enters the battlefield, all non-Zombie creatures get -1/-1 until end of turn.
this.addAbility(new EntersBattlefieldThisOrAnotherTriggeredAbility(new BoostAllEffect( this.addAbility(new EntersBattlefieldThisOrAnotherTriggeredAbility(new BoostAllEffect(
-1, -1, Duration.EndOfTurn, filter, false -1, -1, Duration.EndOfTurn, filter, false
), filter2, false, true)); ), filter2));
} }
private NoxiousGhoul(final NoxiousGhoul card) { private NoxiousGhoul(final NoxiousGhoul card) {

View file

@ -1,4 +1,3 @@
package mage.cards.o; package mage.cards.o;
import java.util.UUID; import java.util.UUID;
@ -6,7 +5,6 @@ import mage.MageInt;
import mage.abilities.costs.common.ExertSourceCost; import mage.abilities.costs.common.ExertSourceCost;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.effects.mana.AddManaOfAnyColorEffect; import mage.abilities.effects.mana.AddManaOfAnyColorEffect;
import mage.abilities.effects.mana.ManaEffect;
import mage.abilities.mana.AnyColorManaAbility; import mage.abilities.mana.AnyColorManaAbility;
import mage.abilities.mana.SimpleManaAbility; import mage.abilities.mana.SimpleManaAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -33,7 +31,7 @@ public final class OasisRitualist extends CardImpl {
this.addAbility(new AnyColorManaAbility()); this.addAbility(new AnyColorManaAbility());
// {T}, Exert Oasis Ritualist: Add two mana of any one color to your manna pool. // {T}, Exert Oasis Ritualist: Add two mana of any one color to your manna pool.
SimpleManaAbility ability = new SimpleManaAbility(Zone.BATTLEFIELD, SimpleManaAbility ability = new SimpleManaAbility(Zone.BATTLEFIELD,
(ManaEffect) new AddManaOfAnyColorEffect(2).setText("Add two mana of any one color to your manna pool. <i> (An exerted creature won't untap during your next untap step.)</i>"), new AddManaOfAnyColorEffect(2).setText("Add two mana of any one color. <i>(An exerted creature won't untap during your next untap step.)</i>"),
new TapSourceCost()); new TapSourceCost());
ability.addCost(new ExertSourceCost()); ability.addCost(new ExertSourceCost());
this.addAbility(ability); this.addAbility(ability);

View file

@ -41,9 +41,9 @@ public final class OketrasLastMercy extends CardImpl {
class OketrasLastMercyEffect extends OneShotEffect { class OketrasLastMercyEffect extends OneShotEffect {
public OketrasLastMercyEffect() { OketrasLastMercyEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
staticText = "Your life total becomes your starting life total"; staticText = "Your life total becomes equal to your starting life total";
} }
private OketrasLastMercyEffect(final OketrasLastMercyEffect effect) { private OketrasLastMercyEffect(final OketrasLastMercyEffect effect) {

View file

@ -41,8 +41,7 @@ public final class OraclesInsight extends CardImpl {
// Enchanted creature has "{T}: Scry 1, then draw a card." // Enchanted creature has "{T}: Scry 1, then draw a card."
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ScryEffect(1, false), new TapSourceCost()); ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ScryEffect(1, false), new TapSourceCost());
Effect effect = new DrawCardSourceControllerEffect(1); Effect effect = new DrawCardSourceControllerEffect(1).concatBy(", then");
effect.setText("then draw a card");
ability.addEffect(effect); ability.addEffect(effect);
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(ability, AttachmentType.AURA, Duration.WhileOnBattlefield))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(ability, AttachmentType.AURA, Duration.WhileOnBattlefield)));
} }

View file

@ -28,7 +28,7 @@ public final class PainKami extends CardImpl {
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.REGULAR), new ManaCostsImpl<>("{X}{R}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(ManacostVariableValue.REGULAR, "it"), new ManaCostsImpl<>("{X}{R}"));
ability.addCost(new SacrificeSourceCost()); ability.addCost(new SacrificeSourceCost());
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);

View file

@ -22,7 +22,7 @@ public final class PharikasCure extends CardImpl {
// Pharika's Cure deals 2 damage to target creature and you gain 2 life. // Pharika's Cure deals 2 damage to target creature and you gain 2 life.
this.getSpellAbility().addEffect(new DamageTargetEffect(2)); this.getSpellAbility().addEffect(new DamageTargetEffect(2));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addEffect(new GainLifeEffect(2)); this.getSpellAbility().addEffect(new GainLifeEffect(2).concatBy("and"));
} }
private PharikasCure(final PharikasCure card) { private PharikasCure(final PharikasCure card) {

View file

@ -36,7 +36,7 @@ public final class PharikasMender extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// When Pharika's Mender enters the battlefield, you may return target creature or enchantment card from your graveyard to your hand. // When Pharika's Mender enters the battlefield, you may return target creature or enchantment card from your graveyard to your hand.
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect()); Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), true);
Target target = new TargetCardInYourGraveyard(filter); Target target = new TargetCardInYourGraveyard(filter);
ability.addTarget(target); ability.addTarget(target);
this.addAbility(ability); this.addAbility(ability);

View file

@ -108,6 +108,6 @@ class PolisCrusherTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getRule() { public String getRule() {
return "Whenever {this} deals combat damage to a player," return "Whenever {this} deals combat damage to a player,"
+ " if {this} is monstrous, destroy target enchantment that player controls"; + " if {this} is monstrous, destroy target enchantment that player controls.";
} }
} }

View file

@ -1,4 +1,3 @@
package mage.cards.p; package mage.cards.p;
import java.util.UUID; import java.util.UUID;
@ -8,7 +7,6 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.game.stack.StackObject; import mage.game.stack.StackObject;
import mage.players.Player; import mage.players.Player;
@ -23,9 +21,8 @@ public final class PsychicStrike extends CardImpl {
public PsychicStrike(UUID ownerId, CardSetInfo setInfo) { public PsychicStrike(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{U}{B}"); super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{U}{B}");
// Counter target spell. Its controller puts the top two cards of their library into their graveyard. // Counter target spell. Its controller puts the top two cards of their library into their graveyard.
this.getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_SPELL)); this.getSpellAbility().addTarget(new TargetSpell());
this.getSpellAbility().addEffect(new PsychicStrikeEffect()); this.getSpellAbility().addEffect(new PsychicStrikeEffect());
} }
@ -41,9 +38,9 @@ public final class PsychicStrike extends CardImpl {
class PsychicStrikeEffect extends OneShotEffect { class PsychicStrikeEffect extends OneShotEffect {
public PsychicStrikeEffect() { PsychicStrikeEffect() {
super(Outcome.Detriment); super(Outcome.Detriment);
staticText = "Counter target spell. Its controller puts the top two cards of their library into their graveyard"; staticText = "Counter target spell. Its controller mills two cards";
} }
private PsychicStrikeEffect(final PsychicStrikeEffect effect) { private PsychicStrikeEffect(final PsychicStrikeEffect effect) {

View file

@ -22,7 +22,7 @@ public final class PurgeTheProfane extends CardImpl {
// Target opponent discards two cards and you gain 2 life. // Target opponent discards two cards and you gain 2 life.
this.getSpellAbility().addEffect(new DiscardTargetEffect(2)); this.getSpellAbility().addEffect(new DiscardTargetEffect(2));
this.getSpellAbility().addTarget(new TargetOpponent()); this.getSpellAbility().addTarget(new TargetOpponent());
this.getSpellAbility().addEffect(new GainLifeEffect(2)); this.getSpellAbility().addEffect(new GainLifeEffect(2).concatBy("and"));
} }
private PurgeTheProfane(final PurgeTheProfane card) { private PurgeTheProfane(final PurgeTheProfane card) {

View file

@ -1,10 +1,9 @@
package mage.cards.r; package mage.cards.r;
import java.util.UUID; import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.dynamicvalue.common.StaticValue;
import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect;
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
import mage.abilities.keyword.TrampleAbility; import mage.abilities.keyword.TrampleAbility;
@ -35,8 +34,10 @@ public final class RagebloodShaman extends CardImpl {
// Trample // Trample
this.addAbility(TrampleAbility.getInstance()); this.addAbility(TrampleAbility.getInstance());
// Other Minotaur creatures you control get +1/+1 and have trample. // Other Minotaur creatures you control get +1/+1 and have trample.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(StaticValue.get(1), StaticValue.get(1), Duration.WhileOnBattlefield, filter, true))); Ability ability = new SimpleStaticAbility(new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filter, true));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield, filter, true))); ability.addEffect(new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.WhileOnBattlefield, filter, true)
.setText("and have trample"));
this.addAbility(ability);
} }
private RagebloodShaman(final RagebloodShaman card) { private RagebloodShaman(final RagebloodShaman card) {

View file

@ -1,4 +1,3 @@
package mage.cards.r; package mage.cards.r;
import java.util.UUID; import java.util.UUID;
@ -28,7 +27,6 @@ public final class RaidersSpoils extends CardImpl {
public RaidersSpoils(UUID ownerId, CardSetInfo setInfo) { public RaidersSpoils(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{B}"); super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{B}");
// Creatures you control get +1/+0. // Creatures you control get +1/+0.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 0, Duration.WhileOnBattlefield))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 0, Duration.WhileOnBattlefield)));
@ -50,6 +48,7 @@ class RaidersSpoilsTriggeredAbility extends TriggeredAbilityImpl {
RaidersSpoilsTriggeredAbility() { RaidersSpoilsTriggeredAbility() {
super(Zone.BATTLEFIELD, new DoIfCostPaid(new DrawCardSourceControllerEffect(1), new PayLifeCost(1)), false); super(Zone.BATTLEFIELD, new DoIfCostPaid(new DrawCardSourceControllerEffect(1), new PayLifeCost(1)), false);
setTriggerPhrase("Whenever a Warrior you control deals combat damage to a player, ");
} }
private RaidersSpoilsTriggeredAbility(final RaidersSpoilsTriggeredAbility ability) { private RaidersSpoilsTriggeredAbility(final RaidersSpoilsTriggeredAbility ability) {
@ -75,9 +74,5 @@ class RaidersSpoilsTriggeredAbility extends TriggeredAbilityImpl {
} }
return false; return false;
} }
@Override
public String getRule() {
return "Whenever a Warrior you control deals combat damage to a player, you may pay 1 life. If you do, draw a card";
}
} }

View file

@ -43,7 +43,7 @@ public final class RasputinDreamweaver extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
// Rasputin Dreamweaver enters the battlefield with seven dream counters on it. // Rasputin Dreamweaver enters the battlefield with seven dream counters on it.
this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.DREAM.createInstance(7)), "seven dream counters on it")); this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.DREAM.createInstance(7)), "with seven dream counters on it"));
// Remove a dream counter from Rasputin: Add {C}. // Remove a dream counter from Rasputin: Add {C}.
this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, Mana.ColorlessMana(1), this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, Mana.ColorlessMana(1),

View file

@ -1,18 +1,18 @@
package mage.cards.r; package mage.cards.r;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ExertCreatureControllerTriggeredAbility; import mage.abilities.common.ExertCreatureControllerTriggeredAbility;
import mage.abilities.effects.Effect; import mage.abilities.effects.common.DamagePlayersEffect;
import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.GainLifeEffect;
import mage.abilities.effects.common.LoseLifeOpponentsEffect;
import mage.abilities.keyword.ExertAbility; import mage.abilities.keyword.ExertAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType; import mage.constants.SubType;
import mage.constants.TargetController;
import java.util.UUID;
/** /**
* *
@ -32,12 +32,8 @@ public final class ResoluteSurvivors extends CardImpl {
this.addAbility(new ExertAbility(null, false)); this.addAbility(new ExertAbility(null, false));
// Whenever you exert a creature, Resolute Survivors deals 1 damage to each opponent and you gain 1 life. // Whenever you exert a creature, Resolute Survivors deals 1 damage to each opponent and you gain 1 life.
Effect effect = new LoseLifeOpponentsEffect(1); Ability ability = new ExertCreatureControllerTriggeredAbility(new DamagePlayersEffect(1, TargetController.OPPONENT));
effect.setText("Whenever you exert a creature, {this} deals 1 damage to each opponent"); ability.addEffect(new GainLifeEffect(1).concatBy("and"));
Ability ability = new ExertCreatureControllerTriggeredAbility(effect);
effect = new GainLifeEffect(1);
effect.setText("and you gain 1 life");
ability.addEffect(effect);
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -35,7 +35,7 @@ public final class ReverentMantra extends CardImpl {
// Choose a color. All creatures gain protection from the chosen color until end of turn. // Choose a color. All creatures gain protection from the chosen color until end of turn.
this.getSpellAbility().addEffect(new GainProtectionFromColorAllEffect( this.getSpellAbility().addEffect(new GainProtectionFromColorAllEffect(
Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURE Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_ALL_CREATURES
)); ));
} }

View file

@ -1,4 +1,3 @@
package mage.cards.r; package mage.cards.r;
import java.util.UUID; import java.util.UUID;
@ -49,9 +48,10 @@ public final class RhonassMonument extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
// Whenever you cast a creature spell, target creature you control gets +2/+2 and gains trample until end of turn. // Whenever you cast a creature spell, target creature you control gets +2/+2 and gains trample until end of turn.
Ability ability = new SpellCastControllerTriggeredAbility(new BoostTargetEffect(2, 2, Duration.EndOfTurn), filter2, false); Ability ability = new SpellCastControllerTriggeredAbility(new BoostTargetEffect(2, 2, Duration.EndOfTurn)
.setText("target creature you control gets +2/+2"), filter2, false);
Effect effect = new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn); Effect effect = new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn);
effect.setText(" and gains trample until end of turn"); effect.setText("and gains trample until end of turn");
ability.addEffect(effect); ability.addEffect(effect);
ability.addTarget(new TargetControlledCreaturePermanent()); ability.addTarget(new TargetControlledCreaturePermanent());
this.addAbility(ability); this.addAbility(ability);

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