forked from External/mage
various text fixes
This commit is contained in:
parent
a5d2338c5a
commit
a98ff3867c
39 changed files with 153 additions and 116 deletions
|
|
@ -28,7 +28,6 @@ import java.util.List;
|
|||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author ciaccona007
|
||||
*/
|
||||
public final class AbyssalHarvester extends CardImpl {
|
||||
|
|
@ -43,7 +42,7 @@ public final class AbyssalHarvester extends CardImpl {
|
|||
|
||||
public AbyssalHarvester(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{B}");
|
||||
|
||||
|
||||
this.subtype.add(SubType.DEMON);
|
||||
this.subtype.add(SubType.WARLOCK);
|
||||
this.power = new MageInt(3);
|
||||
|
|
@ -68,10 +67,16 @@ public final class AbyssalHarvester extends CardImpl {
|
|||
|
||||
class AbyssalHarvesterEffect extends OneShotEffect {
|
||||
|
||||
public AbyssalHarvesterEffect() {
|
||||
private static final FilterPermanent filter = new FilterControlledPermanent();
|
||||
static {
|
||||
filter.add(TokenPredicate.TRUE);
|
||||
filter.add(SubType.NIGHTMARE.getPredicate());
|
||||
}
|
||||
|
||||
AbyssalHarvesterEffect() {
|
||||
super(Outcome.PutCreatureInPlay);
|
||||
this.staticText = "Exile target creature card from a graveyard that was put there this turn. "
|
||||
+ "Create a token that's a copy of it, except it's a Nightmare in addition to its other types."
|
||||
+ "Create a token that's a copy of it, except it's a Nightmare in addition to its other types. "
|
||||
+ "Then exile all other Nightmare tokens you control";
|
||||
}
|
||||
|
||||
|
|
@ -88,25 +93,24 @@ class AbyssalHarvesterEffect extends OneShotEffect {
|
|||
public boolean apply(Game game, Ability source) {
|
||||
Card card = game.getCard(source.getFirstTarget());
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller != null && card != null) {
|
||||
controller.moveCards(card, Zone.EXILED, source, game); // Also if the move to exile is replaced, the copy takes place
|
||||
CreateTokenCopyTargetEffect effect = new CreateTokenCopyTargetEffect(source.getControllerId(), null, false, 1, false, false, null);
|
||||
effect.setTargetPointer(new FixedTarget(card, game));
|
||||
effect.withAdditionalSubType(SubType.NIGHTMARE);
|
||||
effect.apply(game, source);
|
||||
FilterPermanent filter = new FilterControlledPermanent();
|
||||
filter.add(TokenPredicate.TRUE);
|
||||
filter.add(SubType.NIGHTMARE.getPredicate());
|
||||
List<Permanent> addedTokens = effect.getAddedPermanents();
|
||||
Cards cards = new CardsImpl();
|
||||
for(Permanent permanent : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game)) {
|
||||
if(!addedTokens.contains(permanent)) {
|
||||
cards.add(permanent.getId());
|
||||
}
|
||||
}
|
||||
controller.moveCards(cards, Zone.EXILED, source, game);
|
||||
return true;
|
||||
if (controller == null || card == null) {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
controller.moveCards(card, Zone.EXILED, source, game); // Also if the move to exile is replaced, the copy takes place
|
||||
game.processAction();
|
||||
CreateTokenCopyTargetEffect effect = new CreateTokenCopyTargetEffect(source.getControllerId(), null, false, 1, false, false, null);
|
||||
effect.setTargetPointer(new FixedTarget(card, game));
|
||||
effect.withAdditionalSubType(SubType.NIGHTMARE);
|
||||
effect.apply(game, source);
|
||||
game.processAction();
|
||||
List<Permanent> addedTokens = effect.getAddedPermanents();
|
||||
Cards cards = new CardsImpl();
|
||||
for (Permanent permanent : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game)) {
|
||||
if (!addedTokens.contains(permanent)) {
|
||||
cards.add(permanent.getId());
|
||||
}
|
||||
}
|
||||
controller.moveCards(cards, Zone.EXILED, source, game);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ class AncientGreenwardenEffect extends ReplacementEffectImpl {
|
|||
|
||||
AncientGreenwardenEffect() {
|
||||
super(Duration.WhileOnBattlefield, Outcome.Benefit);
|
||||
staticText = "If a land entering the battlefield causes a triggered ability " +
|
||||
staticText = "If a land entering causes a triggered ability " +
|
||||
"of a permanent you control to trigger, that ability triggers an additional time";
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
package mage.cards.b;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldThisOrAnotherTriggeredAbility;
|
||||
|
|
@ -8,18 +7,23 @@ import mage.abilities.common.SimpleActivatedAbility;
|
|||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
||||
import mage.constants.*;
|
||||
import mage.abilities.keyword.FirstStrikeAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterLandPermanent;
|
||||
import mage.filter.common.FilterControlledLandPermanent;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
import mage.target.common.TargetLandPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -27,10 +31,7 @@ import mage.target.common.TargetLandPermanent;
|
|||
*/
|
||||
public final class BlackPantherWakandanKing extends CardImpl {
|
||||
|
||||
private static final FilterLandPermanent filter = new FilterLandPermanent();
|
||||
static {
|
||||
filter.add(TargetController.YOU.getControllerPredicate());
|
||||
}
|
||||
private static final FilterControlledLandPermanent filter = new FilterControlledLandPermanent();
|
||||
|
||||
public BlackPantherWakandanKing(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{W}");
|
||||
|
|
@ -51,13 +52,13 @@ public final class BlackPantherWakandanKing extends CardImpl {
|
|||
new AddCountersTargetEffect(CounterType.P1P1.createInstance()),
|
||||
StaticFilters.FILTER_PERMANENT_CREATURE, false, true).setTriggerPhrase(
|
||||
"Whenever {this} or another creature you control enters, ");
|
||||
ability.addTarget(new TargetLandPermanent(filter));
|
||||
ability.addTarget(new TargetPermanent(filter));
|
||||
this.addAbility(ability.withFlavorWord("Survey the Realm"));
|
||||
|
||||
// Mine Vibranium — {3}: Move all +1/+1 counters from target land you control onto target creature. If one or
|
||||
// more +1/+1 counters are moved this way, you gain that much life and draw a card.
|
||||
ability = new SimpleActivatedAbility(new BlackPantherWakandanKingEffect(), new GenericManaCost(3));
|
||||
ability.addTarget(new TargetLandPermanent(filter));
|
||||
ability.addTarget(new TargetPermanent(filter));
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability.withFlavorWord("Mine Vibranium"));
|
||||
}
|
||||
|
|
@ -113,4 +114,4 @@ class BlackPantherWakandanKingEffect extends OneShotEffect {
|
|||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,8 +35,7 @@ public final class BloodBurglar extends CardImpl {
|
|||
LifelinkAbility.getInstance(),
|
||||
Duration.WhileOnBattlefield
|
||||
), MyTurnCondition.instance,
|
||||
"As long as it's your turn, "
|
||||
+ "{this} has lifelink."
|
||||
"During your turn, {this} has lifelink."
|
||||
)
|
||||
).addHint(MyTurnHint.instance));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ class BrimazKingOfOreskosEffect extends OneShotEffect {
|
|||
|
||||
BrimazKingOfOreskosEffect() {
|
||||
super(Outcome.Benefit);
|
||||
this.staticText = "create a 1/1 white Cat Soldier creature token with vigilance blocking that creature";
|
||||
this.staticText = "create a 1/1 white Cat Soldier creature token with vigilance that's blocking that creature";
|
||||
}
|
||||
|
||||
private BrimazKingOfOreskosEffect(final BrimazKingOfOreskosEffect effect) {
|
||||
|
|
|
|||
|
|
@ -194,7 +194,7 @@ class CaptainAmericaFirstAvengerCatchEffect extends OneShotEffect {
|
|||
|
||||
CaptainAmericaFirstAvengerCatchEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "attach target Equipment you control to {this}";
|
||||
staticText = "attach up to one target Equipment you control to {this}";
|
||||
}
|
||||
|
||||
private CaptainAmericaFirstAvengerCatchEffect(final CaptainAmericaFirstAvengerCatchEffect effect) {
|
||||
|
|
|
|||
|
|
@ -48,8 +48,9 @@ public final class CatCollector extends CardImpl {
|
|||
|
||||
class CatCollectorTriggeredAbility extends GainLifeFirstTimeTriggeredAbility {
|
||||
|
||||
public CatCollectorTriggeredAbility() {
|
||||
CatCollectorTriggeredAbility() {
|
||||
super(new CreateTokenEffect(new CatToken3()));
|
||||
setTriggerPhrase("Whenever you gain life for the first time during each of your turns, ");
|
||||
}
|
||||
|
||||
private CatCollectorTriggeredAbility(final CatCollectorTriggeredAbility ability) {
|
||||
|
|
@ -66,9 +67,4 @@ class CatCollectorTriggeredAbility extends GainLifeFirstTimeTriggeredAbility {
|
|||
return super.checkTrigger(event, game) && game.isActivePlayer(event.getPlayerId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever you gain life for the first time during each of your turns, "
|
||||
+ "create a 1/1 white Cat creature token";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,9 +69,8 @@ class CherishedHatchlingTriggeredAbility extends DelayedTriggeredAbility {
|
|||
private static Effect getEffectToAdd() {
|
||||
Ability abilityToAdd = new EntersBattlefieldTriggeredAbility(new FightTargetSourceEffect().setText("you may have it fight another target creature"), true);
|
||||
abilityToAdd.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_ANOTHER_TARGET_CREATURE));
|
||||
Effect effect = new GainAbilityTargetEffect(abilityToAdd, Duration.EndOfTurn,
|
||||
"it gains \"When this creature enters the battlefield, you may have it fight another target creature.\"", true);
|
||||
return effect;
|
||||
return new GainAbilityTargetEffect(abilityToAdd, Duration.EndOfTurn,
|
||||
"it gains \"When this creature enters, you may have it fight another target creature.\"", true);
|
||||
}
|
||||
|
||||
private CherishedHatchlingTriggeredAbility(final CherishedHatchlingTriggeredAbility ability) {
|
||||
|
|
|
|||
|
|
@ -31,7 +31,8 @@ public final class CleonMerryChampion extends CardImpl {
|
|||
this.addAbility(DoubleStrikeAbility.getInstance());
|
||||
|
||||
// Heroic -- Whenever you cast a spell that targets Cleon, exile the top card of your library. You may play that card until the end of your next turn.
|
||||
this.addAbility(new HeroicAbility(new ExileTopXMayPlayUntilEffect(1, Duration.UntilEndOfYourNextTurn)));
|
||||
this.addAbility(new HeroicAbility(new ExileTopXMayPlayUntilEffect(1, Duration.UntilEndOfYourNextTurn)
|
||||
.withTextOptions("that card", true)));
|
||||
}
|
||||
|
||||
private CleonMerryChampion(final CleonMerryChampion card) {
|
||||
|
|
|
|||
|
|
@ -1,21 +1,23 @@
|
|||
package mage.cards.d;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.BecomesTappedSourceTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.UntapSourceEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -34,10 +36,7 @@ public final class DionusElvishArchdruid extends CardImpl {
|
|||
this.toughness = new MageInt(3);
|
||||
|
||||
// Elves you control have "Whenever this creature becomes tapped during your turn, untap it and put a +1/+1 counter on it. This ability triggers only once each turn."
|
||||
Ability untapAndGrow = new BecomesTappedSourceTriggeredAbility(new UntapSourceEffect()).setTriggersLimitEachTurn(1);
|
||||
untapAndGrow.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance()));
|
||||
|
||||
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(untapAndGrow,
|
||||
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(new DionusTriggeredAbility(),
|
||||
Duration.WhileOnBattlefield, filter, false)));
|
||||
}
|
||||
|
||||
|
|
@ -50,3 +49,29 @@ public final class DionusElvishArchdruid extends CardImpl {
|
|||
return new DionusElvishArchdruid(this);
|
||||
}
|
||||
}
|
||||
|
||||
class DionusTriggeredAbility extends BecomesTappedSourceTriggeredAbility {
|
||||
|
||||
DionusTriggeredAbility() {
|
||||
super(new UntapSourceEffect().setText("untap it"), false);
|
||||
addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance())
|
||||
.setText("and put a +1/+1 counter on it"));
|
||||
setTriggerPhrase("Whenever this creature becomes tapped during your turn, ");
|
||||
setTriggersLimitEachTurn(1);
|
||||
}
|
||||
|
||||
private DionusTriggeredAbility(final DionusTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DionusTriggeredAbility copy() {
|
||||
return new DionusTriggeredAbility(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
return game.isActivePlayer(this.getControllerId()) && super.checkTrigger(event, game);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package mage.cards.d;
|
||||
|
||||
import mage.abilities.condition.common.KickedCondition;
|
||||
import mage.abilities.decorator.ConditionalOneShotEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
||||
import mage.abilities.keyword.IndestructibleAbility;
|
||||
import mage.abilities.keyword.KickerAbility;
|
||||
|
|
@ -28,7 +27,9 @@ public final class DivineResilience extends CardImpl {
|
|||
this.addAbility(new KickerAbility("{2}{W}"));
|
||||
|
||||
// Target creature you control gains indestructible until end of turn. If this spell was kicked, instead any number of target creatures you control gain indestructible until end of turn.
|
||||
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(IndestructibleAbility.getInstance()));
|
||||
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(IndestructibleAbility.getInstance())
|
||||
.setText("Target creature you control gains indestructible until end of turn. " +
|
||||
"If this spell was kicked, instead any number of target creatures you control gain indestructible until end of turn"));
|
||||
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
|
||||
this.getSpellAbility().setTargetAdjuster(new ConditionalTargetAdjuster(
|
||||
KickedCondition.ONCE,
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ public final class DreadwingScavenger extends CardImpl {
|
|||
));
|
||||
ability.addEffect(new ConditionalContinuousEffect(
|
||||
new GainAbilitySourceEffect(DeathtouchAbility.getInstance()),
|
||||
ThresholdCondition.instance, "and has deathtouch"
|
||||
ThresholdCondition.instance, "and has deathtouch as long as there are seven or more cards in your graveyard"
|
||||
));
|
||||
ability.setAbilityWord(AbilityWord.THRESHOLD);
|
||||
this.addAbility(ability);
|
||||
|
|
|
|||
|
|
@ -59,7 +59,8 @@ public final class DropkickBomber extends CardImpl {
|
|||
// {R}: Until end of turn, another target Goblin you control gains flying and "When this creature deals combat damage, sacrifice it."
|
||||
Ability ability = new SimpleActivatedAbility(
|
||||
Zone.BATTLEFIELD,
|
||||
new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn),
|
||||
new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn)
|
||||
.setText("Until end of turn, another target Goblin you control gains flying"),
|
||||
new ManaCostsImpl<>("{R}")
|
||||
);
|
||||
ability.addEffect(
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ public final class DrownInDreams extends CardImpl {
|
|||
|
||||
// Choose one. If you control a commander as you cast this spell, you may choose both.
|
||||
this.getSpellAbility().getModes().setChooseText(
|
||||
"Choose one. If you control a commander as you cast this spell, you may choose both."
|
||||
"Choose one. If you control a commander as you cast this spell, you may choose both instead."
|
||||
);
|
||||
this.getSpellAbility().getModes().setMoreCondition(2, ControlACommanderCondition.instance);
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import mage.abilities.common.AttacksTriggeredAbility;
|
|||
import mage.abilities.common.EntersBattlefieldTappedAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.DoIfCostPaid;
|
||||
import mage.abilities.effects.common.ReturnToHandTargetEffect;
|
||||
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
|
|
@ -33,7 +33,7 @@ public final class EternalTaskmaster extends CardImpl {
|
|||
|
||||
// Whenever Eternal Taskmaster attacks, you may pay {2}{B}. If you do, return target creature card from your graveyard to your hand.
|
||||
Ability ability = new AttacksTriggeredAbility(new DoIfCostPaid(
|
||||
new ReturnToHandTargetEffect(), new ManaCostsImpl<>("{2}{B}")
|
||||
new ReturnFromGraveyardToHandTargetEffect(), new ManaCostsImpl<>("{2}{B}")
|
||||
), false);
|
||||
ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
|
||||
this.addAbility(ability);
|
||||
|
|
|
|||
|
|
@ -6,9 +6,8 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.counters.CounterType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.target.common.TargetControlledCreaturePermanent;
|
||||
import mage.target.common.TargetOpponentsCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -25,7 +24,7 @@ public final class FellingBlow extends CardImpl {
|
|||
this.getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance()));
|
||||
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
|
||||
this.getSpellAbility().addEffect(new DamageWithPowerFromOneToAnotherTargetEffect("that creature").concatBy("Then"));
|
||||
this.getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_A_CREATURE));
|
||||
this.getSpellAbility().addTarget(new TargetOpponentsCreaturePermanent());
|
||||
}
|
||||
|
||||
private FellingBlow(final FellingBlow card) {
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ public final class FieryAnnihilation extends CardImpl {
|
|||
|
||||
// Fiery Annihilation deals 5 damage to target creature. Exile up to one target Equipment attached to that creature. If that creature would die this turn, exile it instead.
|
||||
this.getSpellAbility().addEffect(new DamageTargetEffect(
|
||||
5, true, "{this}", true
|
||||
5, true, "target creature", true
|
||||
));
|
||||
this.getSpellAbility().addEffect(new ExileTargetEffect()
|
||||
.setTargetPointer(new SecondTargetPointer())
|
||||
|
|
|
|||
|
|
@ -1,21 +1,20 @@
|
|||
|
||||
|
||||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.ComparisonType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.predicate.mageobject.PowerPredicate;
|
||||
import mage.filter.predicate.mageobject.AnotherPredicate;
|
||||
import mage.filter.predicate.mageobject.PowerPredicate;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -23,7 +22,7 @@ import mage.filter.predicate.mageobject.AnotherPredicate;
|
|||
*/
|
||||
public final class GarruksPackleader extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterControlledCreaturePermanent("another creature with power 3 or greater");
|
||||
private static final FilterPermanent filter = new FilterControlledCreaturePermanent("another creature you control with power 3 or greater");
|
||||
static {
|
||||
filter.add(AnotherPredicate.instance);
|
||||
filter.add(new PowerPredicate(ComparisonType.MORE_THAN, 2));
|
||||
|
|
@ -36,7 +35,7 @@ public final class GarruksPackleader extends CardImpl {
|
|||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
|
||||
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
|
||||
Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), filter, true));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ class GiadaFontOfHopeEntersBattlefieldEffect extends ReplacementEffectImpl {
|
|||
|
||||
GiadaFontOfHopeEntersBattlefieldEffect() {
|
||||
super(Duration.WhileOnBattlefield, Outcome.BoostCreature);
|
||||
staticText = "Each other Angel you control enters the battlefield with an additional +1/+1 counter on it for each Angel you already control.";
|
||||
staticText = "Each other Angel you control enters with an additional +1/+1 counter on it for each Angel you already control.";
|
||||
}
|
||||
|
||||
private GiadaFontOfHopeEntersBattlefieldEffect(GiadaFontOfHopeEntersBattlefieldEffect effect) {
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ public final class GoblinBoarders extends CardImpl {
|
|||
// Raid -- This creature enters with a +1/+1 counter on it if you attacked this turn.
|
||||
this.addAbility(new EntersBattlefieldAbility(new ConditionalOneShotEffect(
|
||||
new AddCountersSourceEffect(CounterType.P1P1.createInstance()), RaidCondition.instance, ""
|
||||
), "with a +1/+1 counter on it if a creature died this turn")
|
||||
), "with a +1/+1 counter on it if you attacked this turn")
|
||||
.setAbilityWord(AbilityWord.RAID)
|
||||
.addHint(RaidHint.instance), new PlayerAttackedWatcher());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ public final class GrabThePrize extends CardImpl {
|
|||
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
||||
new DamagePlayersEffect(2, TargetController.OPPONENT),
|
||||
GrabThePrizeCondition.instance,
|
||||
"If the discarded card wasn't a land card, {this} deals two damage to each opponent."));
|
||||
"If the discarded card wasn't a land card, {this} deals 2 damage to each opponent."));
|
||||
}
|
||||
|
||||
private GrabThePrize(final GrabThePrize card) {
|
||||
|
|
@ -57,4 +57,4 @@ enum GrabThePrizeCondition implements Condition {
|
|||
.flatMap(Collection::stream)
|
||||
.anyMatch(card -> !card.isLand(game));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ public final class InfernalVessel extends CardImpl {
|
|||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||
new DiesSourceTriggeredAbility(new InfernalVesselReturnEffect()),
|
||||
InfernalVesselCondition.instance,
|
||||
"if it wasn't a Demon, return it to the battlefield under its owner's control "
|
||||
"When this creature dies, if it wasn't a Demon, return it to the battlefield under its owner's control "
|
||||
+ "with two +1/+1 counters on it. It's a Demon in addition to its other types"
|
||||
));
|
||||
}
|
||||
|
|
@ -81,7 +81,7 @@ class InfernalVesselReturnEffect extends OneShotEffect {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller == null || !(game.getState().getZone(source.getSourceId()) == Zone.GRAVEYARD)) {
|
||||
if (controller == null || game.getState().getZone(source.getSourceId()) != Zone.GRAVEYARD) {
|
||||
return false;
|
||||
}
|
||||
Card card = game.getCard(source.getSourceId());
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package mage.cards.i;
|
|||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
||||
import mage.abilities.effects.common.GainLifeEffect;
|
||||
|
|
@ -14,8 +14,8 @@ import mage.constants.SubType;
|
|||
import mage.constants.Zone;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.predicate.mageobject.PowerPredicate;
|
||||
import mage.filter.predicate.mageobject.AnotherPredicate;
|
||||
import mage.filter.predicate.mageobject.PowerPredicate;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
|
@ -24,7 +24,7 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class InspiringCommander extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterControlledCreaturePermanent("another creature with power 2 or less");
|
||||
private static final FilterPermanent filter = new FilterControlledCreaturePermanent("another creature you control with power 2 or less");
|
||||
|
||||
static {
|
||||
filter.add(AnotherPredicate.instance);
|
||||
|
|
@ -42,7 +42,7 @@ public final class InspiringCommander extends CardImpl {
|
|||
// Whenever another creature with power 2 or less you control enters, you gain 1 life and draw a card.
|
||||
Effect effect1 = new GainLifeEffect(1);
|
||||
Effect effect2 = new DrawCardSourceControllerEffect(1);
|
||||
Ability ability = new EntersBattlefieldControlledTriggeredAbility(
|
||||
Ability ability = new EntersBattlefieldAllTriggeredAbility(
|
||||
Zone.BATTLEFIELD, effect1, filter, false);
|
||||
ability.addEffect(effect2.setText("and draw a card"));
|
||||
this.addAbility(ability);
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ public final class KykarZephyrAwakener extends CardImpl {
|
|||
// Whenever you cast a noncreature spell, choose one --
|
||||
// * Exile another target creature you control. Return it to the battlefield under its owner's control at the beginning of the next end step.
|
||||
Ability ability = new SpellCastControllerTriggeredAbility(
|
||||
new ExileReturnBattlefieldNextEndStepTargetEffect().withTextThatCard(false),
|
||||
new ExileReturnBattlefieldNextEndStepTargetEffect().withTextThatCard(true),
|
||||
StaticFilters.FILTER_SPELL_A_NON_CREATURE, false
|
||||
);
|
||||
ability.addTarget(new TargetPermanent(StaticFilters.FILTER_ANOTHER_TARGET_CREATURE_YOU_CONTROL));
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
|
||||
package mage.cards.m;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.DoIfCostPaid;
|
||||
|
|
@ -12,20 +10,22 @@ import mage.abilities.effects.common.DrawCardSourceControllerEffect;
|
|||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.ComparisonType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.predicate.mageobject.PowerPredicate;
|
||||
import mage.filter.predicate.mageobject.AnotherPredicate;
|
||||
import mage.filter.predicate.mageobject.PowerPredicate;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author Loki
|
||||
*/
|
||||
public final class MentorOfTheMeek extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterControlledCreaturePermanent("another creature with power 2 or less");
|
||||
private static final FilterPermanent filter = new FilterControlledCreaturePermanent("another creature you control with power 2 or less");
|
||||
|
||||
static {
|
||||
filter.add(AnotherPredicate.instance);
|
||||
|
|
@ -42,7 +42,7 @@ public final class MentorOfTheMeek extends CardImpl {
|
|||
|
||||
//Whenever another creature with power 2 or less you control enters, you may pay 1. If you do, draw a card.
|
||||
Effect effect = new DoIfCostPaid(new DrawCardSourceControllerEffect(1), new ManaCostsImpl<>("{1}"));
|
||||
Ability ability = new EntersBattlefieldControlledTriggeredAbility(
|
||||
Ability ability = new EntersBattlefieldAllTriggeredAbility(
|
||||
Zone.BATTLEFIELD, effect, filter, false);
|
||||
this.addAbility(ability);
|
||||
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ public final class MoonCircuitHacker extends CardImpl {
|
|||
);
|
||||
ability.addEffect(new ConditionalOneShotEffect(
|
||||
new DiscardControllerEffect(1), condition,
|
||||
"If you do, discard a card unless {this} entered the battlefield this turn"
|
||||
"If you do, discard a card unless {this} entered this turn"
|
||||
));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ class NabanDeanOfIterationEffect extends ReplacementEffectImpl {
|
|||
|
||||
NabanDeanOfIterationEffect() {
|
||||
super(Duration.WhileOnBattlefield, Outcome.Benefit);
|
||||
staticText = "If a Wizard entering the battlefield under your control causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time";
|
||||
staticText = "If a Wizard entering under your control causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time";
|
||||
}
|
||||
|
||||
private NabanDeanOfIterationEffect(final NabanDeanOfIterationEffect effect) {
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ public final class NaiadOfHiddenCoves extends CardImpl {
|
|||
// As long as it's not your turn, spells you cast cost {1} less to cast.
|
||||
this.addAbility(new SimpleStaticAbility(new ConditionalCostModificationEffect(
|
||||
new SpellsCostReductionControllerEffect(StaticFilters.FILTER_CARD, 1),
|
||||
NotMyTurnCondition.instance, "As long as it's not your turn, " +
|
||||
NotMyTurnCondition.instance, "During turns other than yours, " +
|
||||
"spells you cast cost {1} less to cast."
|
||||
)).addHint(MyTurnHint.instance));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
package mage.cards.r;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount;
|
||||
|
|
@ -12,7 +11,8 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.CardType;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.permanent.token.RatToken;
|
||||
import mage.game.permanent.token.ZombieToken;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -28,7 +28,7 @@ public final class RevengeOfTheRats extends CardImpl {
|
|||
|
||||
// Create a tapped 1/1 black Rat creature token for each creature card in your graveyard.
|
||||
this.getSpellAbility().addEffect(new CreateTokenEffect(new RatToken(), cardsCount, true, false));
|
||||
this.getSpellAbility().addHint(new ValueHint("creature card card in your graveyard", cardsCount));
|
||||
this.getSpellAbility().addHint(new ValueHint("Creature cards in your graveyard", cardsCount));
|
||||
|
||||
// Flashback {2}{B}{B}
|
||||
this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{2}{B}{B}")));
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ public final class ShieldMare extends CardImpl {
|
|||
|
||||
// When Shield Mare enters the battlefield or becomes the target of a spell or ability and opponent controls, you gain 3 life.
|
||||
this.addAbility(new OrTriggeredAbility(Zone.ALL, new GainLifeEffect(3), false,
|
||||
"When {this} enters or becomes the target of a spell or ability an opponent controls, ",
|
||||
"Whenever {this} enters or becomes the target of a spell or ability an opponent controls, ",
|
||||
new EntersBattlefieldTriggeredAbility(null),
|
||||
new BecomesTargetSourceTriggeredAbility(null, StaticFilters.FILTER_SPELL_OR_ABILITY_OPPONENTS)));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ import mage.game.permanent.token.SaprolingToken;
|
|||
* @author Grath
|
||||
*/
|
||||
public final class ShroofusSproutsire extends CardImpl {
|
||||
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(SubType.SAPROLING, "Saproling");
|
||||
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(SubType.SAPROLING, "Saproling you control");
|
||||
|
||||
public ShroofusSproutsire(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}");
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ public final class SkyknightSquire extends CardImpl {
|
|||
));
|
||||
ability.addEffect(new ConditionalContinuousEffect(
|
||||
new AddCardSubTypeSourceEffect(Duration.WhileOnBattlefield, true, SubType.KNIGHT),
|
||||
condition, "and is an Knight in addition to its other types"
|
||||
condition, "and is a Knight in addition to its other types"
|
||||
));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ public final class ThuridMareOfDestiny extends CardImpl {
|
|||
|
||||
// Whenever you cast a Pegasus, Unicorn, or Horse creature spell, copy it.
|
||||
this.addAbility(new SpellCastControllerTriggeredAbility(
|
||||
new CopyTargetStackObjectEffect(true)
|
||||
new CopyTargetStackObjectEffect(false, true, false)
|
||||
.withText("it"),
|
||||
filter, false, SetTargetPointer.SPELL
|
||||
));
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ public final class TriumphOfCruelty extends CardImpl {
|
|||
|
||||
// At the beginning of your upkeep, target opponent discards a card if you control the creature with the greatest power or tied for the greatest power.
|
||||
Ability ability = new BeginningOfUpkeepTriggeredAbility(new ConditionalOneShotEffect(
|
||||
new DiscardTargetEffect(1), ControlsCreatureGreatestPowerCondition.instance));
|
||||
new DiscardTargetEffect(1), ControlsCreatureGreatestPowerCondition.instance).withConditionTextAtEnd(true));
|
||||
ability.addTarget(new TargetOpponent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ public final class TriumphOfFerocity extends CardImpl {
|
|||
// At the beginning of your upkeep, draw a card if you control the creature with the greatest power or tied for the greatest power.
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new ConditionalOneShotEffect(
|
||||
new DrawCardSourceControllerEffect(1), ControlsCreatureGreatestPowerCondition.instance
|
||||
)));
|
||||
).withConditionTextAtEnd(true)));
|
||||
}
|
||||
|
||||
private TriumphOfFerocity(final TriumphOfFerocity card) {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package mage.cards.w;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
|
||||
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
|
|
@ -10,7 +10,7 @@ import mage.constants.CardType;
|
|||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.predicate.mageobject.AbilityPredicate;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -20,7 +20,7 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class WaterkinShaman extends CardImpl {
|
||||
|
||||
private static final FilterPermanent filter = new FilterCreaturePermanent("a creature with flying");
|
||||
private static final FilterPermanent filter = new FilterControlledCreaturePermanent("a creature you control with flying");
|
||||
|
||||
static {
|
||||
filter.add(new AbilityPredicate(FlyingAbility.class));
|
||||
|
|
@ -35,7 +35,7 @@ public final class WaterkinShaman extends CardImpl {
|
|||
this.toughness = new MageInt(1);
|
||||
|
||||
// Whenever a creature with flying you control enters, Waterkin Shaman gets +1/+1 until end of turn.
|
||||
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
|
||||
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
|
||||
new BoostSourceEffect(1, 1, Duration.EndOfTurn), filter
|
||||
));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ public class EntersBattlefieldThisOrAnotherTriggeredAbility extends EntersBattle
|
|||
|
||||
public EntersBattlefieldThisOrAnotherTriggeredAbility(Effect effect, FilterPermanent filter, boolean optional, SetTargetPointer setTargetPointer, boolean onlyControlled) {
|
||||
super(Zone.BATTLEFIELD, effect, new FilterPermanentThisOrAnother(filter, onlyControlled), optional, setTargetPointer);
|
||||
setTriggerPhrase("Whenever " + this.filter.getMessage() + " enters the battlefield" + (onlyControlled ? " under your control, " : ", "));
|
||||
setTriggerPhrase("Whenever " + this.filter.getMessage() + (onlyControlled ? " you control" : "") + " enters, ");
|
||||
}
|
||||
|
||||
protected EntersBattlefieldThisOrAnotherTriggeredAbility(final EntersBattlefieldThisOrAnotherTriggeredAbility ability) {
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ public class ConditionalOneShotEffect extends OneShotEffect {
|
|||
private final Effects effects = new Effects();
|
||||
private final Effects otherwiseEffects = new Effects();
|
||||
private final Condition condition;
|
||||
private boolean withConditionTextAtEnd = false;
|
||||
|
||||
public ConditionalOneShotEffect(OneShotEffect effect, Condition condition) {
|
||||
this(effect, null, condition, null);
|
||||
|
|
@ -57,6 +58,7 @@ public class ConditionalOneShotEffect extends OneShotEffect {
|
|||
this.effects.addAll(effect.effects.copy());
|
||||
this.otherwiseEffects.addAll(effect.otherwiseEffects.copy());
|
||||
this.condition = effect.condition;
|
||||
this.withConditionTextAtEnd = effect.withConditionTextAtEnd;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -81,6 +83,11 @@ public class ConditionalOneShotEffect extends OneShotEffect {
|
|||
return this;
|
||||
}
|
||||
|
||||
public ConditionalOneShotEffect withConditionTextAtEnd(boolean withConditionTextAtEnd) {
|
||||
this.withConditionTextAtEnd = withConditionTextAtEnd;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setValue(String key, Object value) {
|
||||
super.setValue(key, value);
|
||||
|
|
@ -105,8 +112,13 @@ public class ConditionalOneShotEffect extends OneShotEffect {
|
|||
}
|
||||
|
||||
if (otherwiseEffects.isEmpty()) {
|
||||
return "if " + conditionText + ", "
|
||||
+ CardUtil.getTextWithFirstCharLowerCase(effects.getText(mode));
|
||||
if (withConditionTextAtEnd) {
|
||||
return CardUtil.getTextWithFirstCharLowerCase(effects.getText(mode))
|
||||
+ " if " + conditionText;
|
||||
} else {
|
||||
return "if " + conditionText + ", "
|
||||
+ CardUtil.getTextWithFirstCharLowerCase(effects.getText(mode));
|
||||
}
|
||||
}
|
||||
return effects.getText(mode) + ". If " + conditionText + ", "
|
||||
+ CardUtil.getTextWithFirstCharLowerCase(otherwiseEffects.getText(mode));
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ public class KaitoCunningInfiltratorEmblem extends Emblem {
|
|||
super("Emblem Kaito");
|
||||
this.getAbilities().add(new SpellCastAllTriggeredAbility(
|
||||
Zone.COMMAND, new CreateTokenEffect(new NinjaToken2()), new FilterSpell(), false, SetTargetPointer.NONE
|
||||
));
|
||||
).setTriggerPhrase("Whenever a player casts a spell, you "));
|
||||
}
|
||||
|
||||
private KaitoCunningInfiltratorEmblem(final KaitoCunningInfiltratorEmblem card) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue