[ZEN] various text fixes

This commit is contained in:
Evan Kranzler 2022-03-08 20:59:01 -05:00
parent ed3d357531
commit caa1b7a8d7
38 changed files with 117 additions and 108 deletions

View file

@ -37,7 +37,7 @@ public final class AetherFigment extends CardImpl {
Ability ability = new EntersBattlefieldAbility( Ability ability = new EntersBattlefieldAbility(
new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)), new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)),
KickedCondition.instance, KickedCondition.instance,
"If {this} was kicked, it enters the battlefield with two +1/+1 counters on it", "If {this} was kicked, it enters the battlefield with two +1/+1 counters on it.",
""); "");
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -36,7 +36,7 @@ public final class BalaGedThief extends CardImpl {
// You choose one of them. That player discards that card. // You choose one of them. That player discards that card.
Ability ability = new AllyEntersBattlefieldTriggeredAbility(new DiscardCardYouChooseTargetEffect(TargetController.ANY, xValue), false); Ability ability = new AllyEntersBattlefieldTriggeredAbility(new DiscardCardYouChooseTargetEffect(TargetController.ANY, xValue), false);
ability.addTarget(new TargetPlayer()); ability.addTarget(new TargetPlayer());
this.addAbility(ability); this.addAbility(ability.setAbilityWord(null));
} }
private BalaGedThief(final BalaGedThief card) { private BalaGedThief(final BalaGedThief card) {

View file

@ -26,7 +26,7 @@ public final class BurstLightning extends CardImpl {
// Burst Lightning deals 2 damage to any target. If Burst Lightning was kicked, it deals 4 damage to that creature or player instead. // Burst Lightning deals 2 damage to any target. If Burst Lightning was kicked, it deals 4 damage to that creature or player instead.
this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addTarget(new TargetAnyTarget());
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new DamageTargetEffect(4), this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new DamageTargetEffect(4),
new DamageTargetEffect(2), KickedCondition.instance, "{this} deals 2 damage to any target. If this spell was kicked, it deals 4 damage to that permanent or player instead")); new DamageTargetEffect(2), KickedCondition.instance, "{this} deals 2 damage to any target. If this spell was kicked, it deals 4 damage instead"));
} }
private BurstLightning(final BurstLightning card) { private BurstLightning(final BurstLightning card) {

View file

@ -1,7 +1,7 @@
package mage.cards.g; package mage.cards.g;
import mage.abilities.Mode; import mage.abilities.Mode;
import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -24,14 +24,15 @@ public final class GrimDiscovery extends CardImpl {
// Choose one or both - // Choose one or both -
this.getSpellAbility().getModes().setMinModes(1); this.getSpellAbility().getModes().setMinModes(1);
this.getSpellAbility().getModes().setMaxModes(2); this.getSpellAbility().getModes().setMaxModes(2);
// Return target creature card from your graveyard to your hand; // Return target creature card from your graveyard to your hand;
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD).withChooseHint("return to hand")); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD).withChooseHint("return to hand"));
// and/or return target land card from your graveyard to your hand. // and/or return target land card from your graveyard to your hand.
Mode mode1 = new Mode(); Mode mode = new Mode(new ReturnFromGraveyardToHandTargetEffect());
mode1.addEffect(new ReturnToHandTargetEffect()); mode.addTarget(new TargetCardInYourGraveyard(filterLandCard).withChooseHint("return to hand"));
mode1.addTarget(new TargetCardInYourGraveyard(filterLandCard).withChooseHint("return to hand")); this.getSpellAbility().addMode(mode);
this.getSpellAbility().addMode(mode1);
} }
private GrimDiscovery(final GrimDiscovery card) { private GrimDiscovery(final GrimDiscovery card) {

View file

@ -1,7 +1,5 @@
package mage.cards.h; package mage.cards.h;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.AllyEntersBattlefieldTriggeredAbility; import mage.abilities.common.AllyEntersBattlefieldTriggeredAbility;
@ -15,8 +13,9 @@ import mage.constants.TargetController;
import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledCreaturePermanent;
import mage.target.TargetPlayer; import mage.target.TargetPlayer;
import java.util.UUID;
/** /**
*
* @author North * @author North
*/ */
public final class HagraDiabolist extends CardImpl { public final class HagraDiabolist extends CardImpl {
@ -29,7 +28,7 @@ public final class HagraDiabolist extends CardImpl {
} }
public HagraDiabolist(UUID ownerId, CardSetInfo setInfo) { public HagraDiabolist(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{B}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}");
this.subtype.add(SubType.OGRE); this.subtype.add(SubType.OGRE);
this.subtype.add(SubType.SHAMAN); this.subtype.add(SubType.SHAMAN);
this.subtype.add(SubType.ALLY); this.subtype.add(SubType.ALLY);
@ -37,9 +36,9 @@ public final class HagraDiabolist extends CardImpl {
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
Ability ability = new AllyEntersBattlefieldTriggeredAbility(new LoseLifeTargetEffect(new PermanentsOnBattlefieldCount(filter)), true); Ability ability = new AllyEntersBattlefieldTriggeredAbility(new LoseLifeTargetEffect(new PermanentsOnBattlefieldCount(filter)).setText("you may have target player lose life equal to the number of Allies you control"), true);
ability.addTarget(new TargetPlayer()); ability.addTarget(new TargetPlayer());
this.addAbility(ability); this.addAbility(ability.setAbilityWord(null));
} }
private HagraDiabolist(final HagraDiabolist card) { private HagraDiabolist(final HagraDiabolist card) {

View file

@ -40,7 +40,7 @@ public final class HighlandBerserker extends CardImpl {
// Whenever Highland Berserker or another Ally enters the battlefield under your control, you may have Ally creatures you control gain first strike until end of turn. // Whenever Highland Berserker or another Ally enters the battlefield under your control, you may have Ally creatures you control gain first strike until end of turn.
Effect effect = new GainAbilityAllEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, filter); Effect effect = new GainAbilityAllEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, filter);
effect.setText("you may have Ally creatures you control gain first strike until end of turn"); effect.setText("you may have Ally creatures you control gain first strike until end of turn");
this.addAbility(new AllyEntersBattlefieldTriggeredAbility(effect, true)); this.addAbility(new AllyEntersBattlefieldTriggeredAbility(effect, true).setAbilityWord(null));
} }
private HighlandBerserker(final HighlandBerserker card) { private HighlandBerserker(final HighlandBerserker card) {

View file

@ -37,7 +37,9 @@ public final class JoragaBard extends CardImpl {
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(4); this.toughness = new MageInt(4);
this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new GainAbilityAllEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn, filter), true)); this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new GainAbilityAllEffect(
VigilanceAbility.getInstance(), Duration.EndOfTurn, filter
).setText("you may have Ally creatures you control gain vigilance until end of turn"), true).setAbilityWord(null));
} }
private JoragaBard(final JoragaBard card) { private JoragaBard(final JoragaBard card) {

View file

@ -35,7 +35,7 @@ public final class KabiraEvangel extends CardImpl {
.setText("choose a color. If you do, Allies you control gain protection " + .setText("choose a color. If you do, Allies you control gain protection " +
"from the chosen color until end of turn."), "from the chosen color until end of turn."),
true true
)); ).setAbilityWord(null));
} }
private KabiraEvangel(final KabiraEvangel card) { private KabiraEvangel(final KabiraEvangel card) {

View file

@ -30,7 +30,7 @@ public final class KazanduBlademaster extends CardImpl {
this.addAbility(FirstStrikeAbility.getInstance()); this.addAbility(FirstStrikeAbility.getInstance());
this.addAbility(VigilanceAbility.getInstance()); this.addAbility(VigilanceAbility.getInstance());
this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true)); this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true).setAbilityWord(null));
} }
private KazanduBlademaster(final KazanduBlademaster card) { private KazanduBlademaster(final KazanduBlademaster card) {

View file

@ -19,7 +19,7 @@ import mage.filter.common.FilterCreaturePermanent;
*/ */
public final class KazuulWarlord extends CardImpl { public final class KazuulWarlord extends CardImpl {
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Ally creatures you control"); private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Ally creature you control");
static { static {
filter.add(SubType.ALLY.getPredicate()); filter.add(SubType.ALLY.getPredicate());
@ -35,7 +35,7 @@ public final class KazuulWarlord extends CardImpl {
this.power = new MageInt(3); this.power = new MageInt(3);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), filter), true)); this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersAllEffect(CounterType.P1P1.createInstance(), filter), true).setAbilityWord(null));
} }
private KazuulWarlord(final KazuulWarlord card) { private KazuulWarlord(final KazuulWarlord card) {

View file

@ -30,7 +30,7 @@ public final class KorHookmaster extends CardImpl {
// When Kor Hookmaster enters the battlefield, tap target creature an opponent controls. // When Kor Hookmaster enters the battlefield, tap target creature an opponent controls.
// That creature doesn't untap during its controller's next untap step. // That creature doesn't untap during its controller's next untap step.
EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new TapTargetEffect()); EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new TapTargetEffect());
ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect()); ability.addEffect(new DontUntapInControllersNextUntapStepTargetEffect("that creature"));
ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE)); ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -1,10 +1,9 @@
package mage.cards.m; package mage.cards.m;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTappedAbility; import mage.abilities.common.EntersBattlefieldTappedAbility;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.CompositeCost;
import mage.abilities.costs.common.RemoveCountersSourceCost; import mage.abilities.costs.common.RemoveCountersSourceCost;
import mage.abilities.costs.common.ReturnToHandFromBattlefieldSourceCost; import mage.abilities.costs.common.ReturnToHandFromBattlefieldSourceCost;
import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapSourceCost;
@ -16,17 +15,17 @@ import mage.abilities.mana.BlueManaAbility;
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.Zone;
import mage.counters.CounterType; import mage.counters.CounterType;
import java.util.UUID;
/** /**
*
* @author jeffwadsworth * @author jeffwadsworth
*/ */
public final class MagosiTheWaterveil extends CardImpl { public final class MagosiTheWaterveil extends CardImpl {
public MagosiTheWaterveil(UUID ownerId, CardSetInfo setInfo) { public MagosiTheWaterveil(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.LAND},""); super(ownerId, setInfo, new CardType[]{CardType.LAND}, "");
// Magosi, the Waterveil enters the battlefield tapped. // Magosi, the Waterveil enters the battlefield tapped.
this.addAbility(new EntersBattlefieldTappedAbility()); this.addAbility(new EntersBattlefieldTappedAbility());
@ -35,17 +34,21 @@ public final class MagosiTheWaterveil extends CardImpl {
this.addAbility(new BlueManaAbility()); this.addAbility(new BlueManaAbility());
// {U}, {T}: Put an eon counter on Magosi, the Waterveil. Skip your next turn. // {U}, {T}: Put an eon counter on Magosi, the Waterveil. Skip your next turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.EON.createInstance()), new ManaCostsImpl("{U}")); Ability ability = new SimpleActivatedAbility(
ability.addEffect(new SkipNextTurnSourceEffect()); new AddCountersSourceEffect(CounterType.EON.createInstance()), new ManaCostsImpl<>("{U}")
);
ability.addEffect(new SkipNextTurnSourceEffect().setText("skip your next turn"));
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
this.addAbility(ability); this.addAbility(ability);
// {T}, Remove an eon counter from Magosi, the Waterveil and return it to its owner's hand: Take an extra turn after this one. // {T}, Remove an eon counter from Magosi, the Waterveil and return it to its owner's hand: Take an extra turn after this one.
Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddExtraTurnControllerEffect(), new TapSourceCost()); Ability ability2 = new SimpleActivatedAbility(new AddExtraTurnControllerEffect(), new TapSourceCost());
ability2.addCost(new RemoveCountersSourceCost(CounterType.EON.createInstance())); ability2.addCost(new CompositeCost(
ability2.addCost(new ReturnToHandFromBattlefieldSourceCost()); new RemoveCountersSourceCost(CounterType.EON.createInstance()),
new ReturnToHandFromBattlefieldSourceCost(),
"remove an eon counter from {this} and return it to its owner's hand"
));
this.addAbility(ability2); this.addAbility(ability2);
} }
private MagosiTheWaterveil(final MagosiTheWaterveil card) { private MagosiTheWaterveil(final MagosiTheWaterveil card) {

View file

@ -29,7 +29,7 @@ public final class MakindiShieldmate extends CardImpl {
this.addAbility(DefenderAbility.getInstance()); this.addAbility(DefenderAbility.getInstance());
this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true)); this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true).setAbilityWord(null));
} }
private MakindiShieldmate(final MakindiShieldmate card) { private MakindiShieldmate(final MakindiShieldmate card) {

View file

@ -19,7 +19,7 @@ import mage.filter.FilterCard;
*/ */
public final class MerfolkWayfinder extends CardImpl { public final class MerfolkWayfinder extends CardImpl {
private static final FilterCard filter = new FilterCard("all Island cards"); private static final FilterCard filter = new FilterCard("Island cards");
static { static {
filter.add(SubType.ISLAND.getPredicate()); filter.add(SubType.ISLAND.getPredicate());

View file

@ -33,7 +33,7 @@ public final class MireBlight extends CardImpl {
Ability ability = new EnchantAbility(auraTarget.getTargetName()); Ability ability = new EnchantAbility(auraTarget.getTargetName());
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 MireBlight(final MireBlight card) { private MireBlight(final MireBlight card) {

View file

@ -39,7 +39,7 @@ public final class MurasaPyromancer extends CardImpl {
Ability ability = new AllyEntersBattlefieldTriggeredAbility(new DamageTargetEffect(new PermanentsOnBattlefieldCount(filter)), true); Ability ability = new AllyEntersBattlefieldTriggeredAbility(new DamageTargetEffect(new PermanentsOnBattlefieldCount(filter)), true);
ability.addTarget(new TargetCreaturePermanent()); ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability); this.addAbility(ability.setAbilityWord(null));
} }

View file

@ -31,7 +31,7 @@ public final class NeedlebiteTrap extends CardImpl {
// Target player loses 5 life and you gain 5 life. // Target player loses 5 life and you gain 5 life.
this.getSpellAbility().addEffect(new LoseLifeTargetEffect(5)); this.getSpellAbility().addEffect(new LoseLifeTargetEffect(5));
this.getSpellAbility().addEffect(new GainLifeEffect(5)); this.getSpellAbility().addEffect(new GainLifeEffect(5).concatBy("and"));
this.getSpellAbility().addTarget(new TargetPlayer()); this.getSpellAbility().addTarget(new TargetPlayer());
} }

View file

@ -26,7 +26,7 @@ public final class NimanaSellSword extends CardImpl {
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true)); this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true).setAbilityWord(null));
} }
private NimanaSellSword(final NimanaSellSword card) { private NimanaSellSword(final NimanaSellSword card) {

View file

@ -38,7 +38,7 @@ public final class NimbusWings extends CardImpl {
this.addAbility(new EnchantAbility(auraTarget.getTargetName())); this.addAbility(new EnchantAbility(auraTarget.getTargetName()));
// Enchanted creature gets +1/+2 and has flying. // Enchanted creature gets +1/+2 and has flying.
SimpleStaticAbility ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1, 2, Duration.WhileOnBattlefield)); SimpleStaticAbility ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1, 2, Duration.WhileOnBattlefield));
ability.addEffect(new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA)); ability.addEffect(new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA).setText("and has flying"));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -31,7 +31,7 @@ public final class ObNixilisTheFallen extends CardImpl {
// Landfall - Whenever a land enters the battlefield under your control, you may have target player lose 3 life. // Landfall - Whenever a land enters the battlefield under your control, you may have target player lose 3 life.
// If you do, put three +1/+1 counters on Ob Nixilis, the Fallen. // If you do, put three +1/+1 counters on Ob Nixilis, the Fallen.
Ability ability = new LandfallAbility(new LoseLifeTargetEffect(3), true); Ability ability = new LandfallAbility(new LoseLifeTargetEffect(3).setText("target player lose 3 life"), true);
ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance(3)).concatBy("If you do,")); ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance(3)).concatBy("If you do,"));
ability.addTarget(new TargetPlayer()); ability.addTarget(new TargetPlayer());
this.addAbility(ability); this.addAbility(ability);

View file

@ -35,7 +35,7 @@ public final class OnduCleric extends CardImpl {
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new GainLifeEffect(new PermanentsOnBattlefieldCount(filter)), true)); this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new GainLifeEffect(new PermanentsOnBattlefieldCount(filter)), true).setAbilityWord(null));
} }
private OnduCleric(final OnduCleric card) { private OnduCleric(final OnduCleric card) {

View file

@ -26,7 +26,7 @@ public final class OranRiefSurvivalist extends CardImpl {
this.power = new MageInt(1); this.power = new MageInt(1);
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true)); this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true).setAbilityWord(null));
} }
private OranRiefSurvivalist(final OranRiefSurvivalist card) { private OranRiefSurvivalist(final OranRiefSurvivalist card) {

View file

@ -1,34 +1,32 @@
package mage.cards.p; package mage.cards.p;
import java.util.UUID;
import mage.abilities.TriggeredAbilityImpl; import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.DoIfCostPaid;
import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect;
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.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;
import java.util.UUID;
/** /**
*
* @author North * @author North
*/ */
public final class PunishingFire extends CardImpl { public final class PunishingFire extends CardImpl {
public PunishingFire(UUID ownerId, CardSetInfo setInfo) { public PunishingFire(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{1}{R}"); super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{R}");
// Punishing Fire deals 2 damage to any target. // Punishing Fire deals 2 damage to any target.
this.getSpellAbility().addEffect(new DamageTargetEffect(2)); this.getSpellAbility().addEffect(new DamageTargetEffect(2));
this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addTarget(new TargetAnyTarget());
// Whenever an opponent gains life, you may pay {R}. If you do, return Punishing Fire from your graveyard to your hand. // Whenever an opponent gains life, you may pay {R}. If you do, return Punishing Fire from your graveyard to your hand.
this.addAbility(new PunishingFireTriggeredAbility()); this.addAbility(new PunishingFireTriggeredAbility());
} }
@ -46,7 +44,7 @@ public final class PunishingFire extends CardImpl {
class PunishingFireTriggeredAbility extends TriggeredAbilityImpl { class PunishingFireTriggeredAbility extends TriggeredAbilityImpl {
public PunishingFireTriggeredAbility() { public PunishingFireTriggeredAbility() {
super(Zone.GRAVEYARD, new DoIfCostPaid(new ReturnToHandSourceEffect(), new ManaCostsImpl("{R}"))); super(Zone.GRAVEYARD, new DoIfCostPaid(new ReturnSourceFromGraveyardToHandEffect(), new ManaCostsImpl<>("{R}")));
} }
public PunishingFireTriggeredAbility(final PunishingFireTriggeredAbility ability) { public PunishingFireTriggeredAbility(final PunishingFireTriggeredAbility ability) {
@ -70,6 +68,6 @@ class PunishingFireTriggeredAbility extends TriggeredAbilityImpl {
@Override @Override
public String getTriggerPhrase() { public String getTriggerPhrase() {
return "Whenever an opponent gains life, " ; return "Whenever an opponent gains life, ";
} }
} }

View file

@ -28,7 +28,7 @@ public final class QuestForTheGemblades extends CardImpl {
// Whenever a creature you control deals combat damage to a creature, you may put a quest counter on Quest for the Gemblades. // Whenever a creature you control deals combat damage to a creature, you may put a quest counter on Quest for the Gemblades.
this.addAbility(new DealsDamageToACreatureAllTriggeredAbility( this.addAbility(new DealsDamageToACreatureAllTriggeredAbility(
new AddCountersSourceEffect(CounterType.QUEST.createInstance()), false, new AddCountersSourceEffect(CounterType.QUEST.createInstance()), true,
StaticFilters.FILTER_CONTROLLED_A_CREATURE, SetTargetPointer.PERMANENT, true StaticFilters.FILTER_CONTROLLED_A_CREATURE, SetTargetPointer.PERMANENT, true
)); ));

View file

@ -1,7 +1,5 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
@ -13,36 +11,35 @@ import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect;
import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.EnchantAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.AttachmentType; import mage.constants.*;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
/** /**
*
* @author North * @author North
*/ */
public final class SavageSilhouette extends CardImpl { public final class SavageSilhouette extends CardImpl {
public SavageSilhouette(UUID ownerId, CardSetInfo setInfo) { public SavageSilhouette(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{G}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}");
this.subtype.add(SubType.AURA); this.subtype.add(SubType.AURA);
// Enchant creature // Enchant creature
TargetPermanent auraTarget = new TargetCreaturePermanent(); TargetPermanent auraTarget = new TargetCreaturePermanent();
this.getSpellAbility().addTarget(auraTarget); this.getSpellAbility().addTarget(auraTarget);
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
Ability ability = new EnchantAbility(auraTarget.getTargetName()); this.addAbility(new EnchantAbility(auraTarget.getTargetName()));
this.addAbility(ability);
// Enchanted creature gets +2/+2 and has "{1}{G}: Regenerate this creature." // Enchanted creature gets +2/+2 and has "{1}{G}: Regenerate this creature."
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new ManaCostsImpl("{1}{G}")); Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 2, Duration.WhileOnBattlefield))); 2, 2, Duration.WhileOnBattlefield
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(ability, AttachmentType.AURA))); ));
ability.addEffect(new GainAbilityAttachedEffect(new SimpleActivatedAbility(
new RegenerateSourceEffect(), new ManaCostsImpl<>("{1}{G}")
), AttachmentType.AURA).setText("and has \"{1}{G}: Regenerate this creature.\""));
this.addAbility(ability);
} }
private SavageSilhouette(final SavageSilhouette card) { private SavageSilhouette(final SavageSilhouette card) {

View file

@ -31,7 +31,7 @@ public final class ScytheTiger extends CardImpl {
this.addAbility(ShroudAbility.getInstance()); this.addAbility(ShroudAbility.getInstance());
// When Scythe Tiger enters the battlefield, sacrifice it unless you sacrifice a land. // When Scythe Tiger enters the battlefield, sacrifice it unless you sacrifice a land.
this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_LAND_SHORT_TEXT))))); this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new SacrificeTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_LAND_SHORT_TEXT))).setText("sacrifice it unless you sacrifice a land")));
} }
private ScytheTiger(final ScytheTiger card) { private ScytheTiger(final ScytheTiger card) {

View file

@ -36,7 +36,7 @@ public final class SeascapeAerialist extends CardImpl {
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new GainAbilityAllEffect(FlyingAbility.getInstance(), Duration.EndOfTurn, filter), true)); this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new GainAbilityAllEffect(FlyingAbility.getInstance(), Duration.EndOfTurn, filter).setText("you may have Ally creatures you control gain flying until end of turn"), true).setAbilityWord(null));
} }
private SeascapeAerialist(final SeascapeAerialist card) { private SeascapeAerialist(final SeascapeAerialist card) {

View file

@ -35,7 +35,7 @@ public final class SorinMarkov extends CardImpl {
// +2: Sorin Markov deals 2 damage to any target and you gain 2 life. // +2: Sorin Markov deals 2 damage to any target and you gain 2 life.
LoyaltyAbility ability1 = new LoyaltyAbility(new DamageTargetEffect(2), 2); LoyaltyAbility ability1 = new LoyaltyAbility(new DamageTargetEffect(2), 2);
ability1.addEffect(new GainLifeEffect(2)); ability1.addEffect(new GainLifeEffect(2).concatBy("and"));
ability1.addTarget(new TargetAnyTarget()); ability1.addTarget(new TargetAnyTarget());
this.addAbility(ability1); this.addAbility(ability1);

View file

@ -6,7 +6,7 @@ import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.costs.CompositeCost; import mage.abilities.costs.CompositeCost;
import mage.abilities.costs.common.RemoveCountersSourceCost; import mage.abilities.costs.common.RemoveCountersSourceCost;
import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.SacrificeSourceCost;
import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -30,7 +30,7 @@ public final class SoulStairExpedition extends CardImpl {
// Remove three quest counters from Soul Stair Expedition and sacrifice it: Return up to two target creature cards from your graveyard to your hand. // Remove three quest counters from Soul Stair Expedition and sacrifice it: Return up to two target creature cards from your graveyard to your hand.
Ability ability = new SimpleActivatedAbility( Ability ability = new SimpleActivatedAbility(
new ReturnToHandTargetEffect(), new ReturnFromGraveyardToHandTargetEffect(),
new CompositeCost( new CompositeCost(
new RemoveCountersSourceCost(CounterType.QUEST.createInstance(3)), new RemoveCountersSourceCost(CounterType.QUEST.createInstance(3)),
new SacrificeSourceCost(), new SacrificeSourceCost(),

View file

@ -1,7 +1,6 @@
package mage.cards.s; package mage.cards.s;
import java.util.UUID; import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.continuous.BoostEquippedEffect; import mage.abilities.effects.common.continuous.BoostEquippedEffect;
@ -12,22 +11,26 @@ import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.AttachmentType; import mage.constants.AttachmentType;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.Zone; import mage.constants.SubType;
import java.util.UUID;
/** /**
*
* @author North * @author North
*/ */
public final class SpidersilkNet extends CardImpl { public final class SpidersilkNet extends CardImpl {
public SpidersilkNet(UUID ownerId, CardSetInfo setInfo) { public SpidersilkNet(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{0}"); super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{0}");
this.subtype.add(SubType.EQUIPMENT); this.subtype.add(SubType.EQUIPMENT);
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(0, 2))); Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(0, 2));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(ReachAbility.getInstance(), AttachmentType.EQUIPMENT))); ability.addEffect(new GainAbilityAttachedEffect(
ReachAbility.getInstance(), AttachmentType.EQUIPMENT
).setText("and has reach"));
this.addAbility(ability);
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(2))); this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(2)));
} }

View file

@ -42,7 +42,7 @@ public final class TajuruArcher extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
Ability ability = new AllyEntersBattlefieldTriggeredAbility(new DamageTargetEffect(new PermanentsOnBattlefieldCount(filter)), true); Ability ability = new AllyEntersBattlefieldTriggeredAbility(new DamageTargetEffect(new PermanentsOnBattlefieldCount(filter)), true);
ability.addTarget(new TargetCreaturePermanent(filterTarget)); ability.addTarget(new TargetCreaturePermanent(filterTarget));
this.addAbility(ability); this.addAbility(ability.setAbilityWord(null));
} }
private TajuruArcher(final TajuruArcher card) { private TajuruArcher(final TajuruArcher card) {

View file

@ -1,9 +1,8 @@
package mage.cards.t; package mage.cards.t;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.dynamicvalue.DynamicValue;
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect;
import mage.cards.CardImpl; import mage.cards.CardImpl;
@ -14,8 +13,9 @@ import mage.constants.SubType;
import mage.constants.TargetController; import mage.constants.TargetController;
import mage.filter.common.FilterLandPermanent; import mage.filter.common.FilterLandPermanent;
import java.util.UUID;
/** /**
*
* @author North * @author North
*/ */
public final class TimbermawLarva extends CardImpl { public final class TimbermawLarva extends CardImpl {
@ -28,15 +28,18 @@ public final class TimbermawLarva extends CardImpl {
} }
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
public TimbermawLarva(UUID ownerId, CardSetInfo setInfo) { public TimbermawLarva(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{G}"); super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}");
this.subtype.add(SubType.BEAST); this.subtype.add(SubType.BEAST);
this.power = new MageInt(2); this.power = new MageInt(2);
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
PermanentsOnBattlefieldCount value = new PermanentsOnBattlefieldCount(filter); this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(value, value, Duration.EndOfTurn), false)); xValue, xValue, Duration.EndOfTurn, true, "it"
), false));
} }
private TimbermawLarva(final TimbermawLarva card) { private TimbermawLarva(final TimbermawLarva card) {

View file

@ -28,7 +28,7 @@ public final class TuktukGrunts extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
this.addAbility(HasteAbility.getInstance()); this.addAbility(HasteAbility.getInstance());
this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true)); this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true).setAbilityWord(null));
} }
private TuktukGrunts(final TuktukGrunts card) { private TuktukGrunts(final TuktukGrunts card) {

View file

@ -32,8 +32,8 @@ public final class TurntimberRanger extends CardImpl {
// Whenever Turntimber Ranger or another Ally enters the battlefield under your control, you may create a 2/2 green Wolf creature token. If you do, put a +1/+1 counter on Turntimber Ranger. // Whenever Turntimber Ranger or another Ally enters the battlefield under your control, you may create a 2/2 green Wolf creature token. If you do, put a +1/+1 counter on Turntimber Ranger.
Ability ability = new AllyEntersBattlefieldTriggeredAbility(new CreateTokenEffect(new WolfToken()), true); Ability ability = new AllyEntersBattlefieldTriggeredAbility(new CreateTokenEffect(new WolfToken()), true);
ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance())); ability.addEffect(new AddCountersSourceEffect(CounterType.P1P1.createInstance()).concatBy("If you do,"));
this.addAbility(ability); this.addAbility(ability.setAbilityWord(null));
} }
private TurntimberRanger(final TurntimberRanger card) { private TurntimberRanger(final TurntimberRanger card) {

View file

@ -27,7 +27,7 @@ public final class UmaraRaptor extends CardImpl {
this.toughness = new MageInt(1); this.toughness = new MageInt(1);
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true)); this.addAbility(new AllyEntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true).setAbilityWord(null));
} }
private UmaraRaptor(final UmaraRaptor card) { private UmaraRaptor(final UmaraRaptor card) {

View file

@ -1,7 +1,5 @@
package mage.cards.w; package mage.cards.w;
import java.util.UUID;
import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.FlyingAbility;
@ -11,20 +9,24 @@ import mage.constants.CardType;
import mage.constants.Duration; import mage.constants.Duration;
import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent;
import java.util.UUID;
/** /**
*
* @author North * @author North
*/ */
public final class WindborneCharge extends CardImpl { public final class WindborneCharge extends CardImpl {
public WindborneCharge(UUID ownerId, CardSetInfo setInfo) { public WindborneCharge(UUID ownerId, CardSetInfo setInfo) {
super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{2}{W}{W}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{W}{W}");
// Two target creatures you control each get +2/+2 and gain flying until end of turn. // Two target creatures you control each get +2/+2 and gain flying until end of turn.
this.getSpellAbility().addEffect(new BoostTargetEffect(
2, 2, Duration.EndOfTurn
).setText("two target creatures you control each get +2/+2"));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(
FlyingAbility.getInstance(), Duration.EndOfTurn
).setText("and gain flying until end of turn"));
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(2)); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(2));
this.getSpellAbility().addEffect(new BoostTargetEffect(2, 2, Duration.EndOfTurn));
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn));
} }
private WindborneCharge(final WindborneCharge card) { private WindborneCharge(final WindborneCharge card) {

View file

@ -62,7 +62,7 @@ public class VerifyCardDataTest {
private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class);
private static final String FULL_ABILITIES_CHECK_SET_CODE = "MOR"; // check all abilities and output cards with wrong abilities texts; private static final String FULL_ABILITIES_CHECK_SET_CODE = "ZEN"; // check all abilities and output cards with wrong abilities texts;
private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run
private static final boolean ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages private static final boolean ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages

View file

@ -160,17 +160,18 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge
superRule = newRule.toString(); superRule = newRule.toString();
} }
} else if (this.getTargets().isEmpty() } else if (this.getTargets().isEmpty()
|| ruleLow.startsWith("attach")
|| ruleLow.startsWith("counter")
|| ruleLow.startsWith("destroy")
|| ruleLow.startsWith("exchange")
|| ruleLow.startsWith("exile") || ruleLow.startsWith("exile")
|| ruleLow.startsWith("gain") || ruleLow.startsWith("gain")
|| ruleLow.startsWith("destroy") || ruleLow.startsWith("goad")
|| ruleLow.startsWith("return")
|| ruleLow.startsWith("tap")
|| ruleLow.startsWith("untap")
|| ruleLow.startsWith("put") || ruleLow.startsWith("put")
|| ruleLow.startsWith("remove") || ruleLow.startsWith("remove")
|| ruleLow.startsWith("counter") || ruleLow.startsWith("return")
|| ruleLow.startsWith("exchange") || ruleLow.startsWith("tap")
|| ruleLow.startsWith("goad")) { || ruleLow.startsWith("untap")) {
sb.append("you may "); sb.append("you may ");
} else if (!ruleLow.startsWith("its controller may")) { } else if (!ruleLow.startsWith("its controller may")) {
sb.append("you may have "); sb.append("you may have ");