diff --git a/Mage.Sets/src/mage/cards/b/BaruWurmspeaker.java b/Mage.Sets/src/mage/cards/b/BaruWurmspeaker.java index 29665c5982f..2a2e148d71e 100644 --- a/Mage.Sets/src/mage/cards/b/BaruWurmspeaker.java +++ b/Mage.Sets/src/mage/cards/b/BaruWurmspeaker.java @@ -58,7 +58,7 @@ public final class BaruWurmspeaker extends CardImpl { )); ability.addEffect(new GainAbilityControlledEffect( TrampleAbility.getInstance(), Duration.WhileOnBattlefield, filter2 - )); + ).setText("and have trample")); this.addAbility(ability); // {7}{G}, {T}: Create a 4/4 green Wurm creature token. This ability costs {X} less to activate, whre X is the greatest power among Wurms you control. diff --git a/Mage.Sets/src/mage/cards/c/Chromanticore.java b/Mage.Sets/src/mage/cards/c/Chromanticore.java index 2d50b327e64..bb089e575fe 100644 --- a/Mage.Sets/src/mage/cards/c/Chromanticore.java +++ b/Mage.Sets/src/mage/cards/c/Chromanticore.java @@ -56,7 +56,7 @@ public final class Chromanticore extends CardImpl { effect.setText(", trample"); ability.addEffect(effect); effect = new GainAbilityAttachedEffect(LifelinkAbility.getInstance(), AttachmentType.AURA); - effect.setText("and lifelink"); + effect.setText(", and lifelink"); ability.addEffect(effect); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/f/FallajiWayfarer.java b/Mage.Sets/src/mage/cards/f/FallajiWayfarer.java index 1569485f240..7d5ae19bae4 100644 --- a/Mage.Sets/src/mage/cards/f/FallajiWayfarer.java +++ b/Mage.Sets/src/mage/cards/f/FallajiWayfarer.java @@ -21,7 +21,7 @@ import java.util.UUID; */ public final class FallajiWayfarer extends CardImpl { - private static final FilterCard filter = new FilterCard("multicolored spells you cast"); + private static final FilterCard filter = new FilterCard("multicolored spells"); static { filter.add(MulticoloredPredicate.instance); diff --git a/Mage.Sets/src/mage/cards/h/HonorWornShaku.java b/Mage.Sets/src/mage/cards/h/HonorWornShaku.java index 7cd73f4862c..a21c84042a8 100644 --- a/Mage.Sets/src/mage/cards/h/HonorWornShaku.java +++ b/Mage.Sets/src/mage/cards/h/HonorWornShaku.java @@ -1,8 +1,5 @@ - - package mage.cards.h; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapTargetCost; @@ -17,12 +14,15 @@ import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.permanent.TappedPredicate; import mage.target.common.TargetControlledPermanent; +import java.util.UUID; + /** * @author Loki */ public final class HonorWornShaku extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent("untapped legendary permanent"); + private static final FilterControlledPermanent filter + = new FilterControlledPermanent("untapped legendary permanent you control"); static { filter.add(TappedPredicate.UNTAPPED); @@ -47,5 +47,4 @@ public final class HonorWornShaku extends CardImpl { public HonorWornShaku copy() { return new HonorWornShaku(this); } - } diff --git a/Mage.Sets/src/mage/cards/o/OKagachiVengefulKami.java b/Mage.Sets/src/mage/cards/o/OKagachiVengefulKami.java index 8020208b794..0c7b9eb2bbe 100644 --- a/Mage.Sets/src/mage/cards/o/OKagachiVengefulKami.java +++ b/Mage.Sets/src/mage/cards/o/OKagachiVengefulKami.java @@ -113,7 +113,7 @@ class OKagachiVengefulKamiTriggeredAbility extends TriggeredAbilityImpl { public String getRule() { return "Whenever {this} deals combat damage to a player, " + "if that player attacked you during their last turn, " + - "exile target nonland permanent that player controls"; + "exile target nonland permanent that player controls."; } } diff --git a/Mage.Sets/src/mage/cards/s/ShanidSleepersScourge.java b/Mage.Sets/src/mage/cards/s/ShanidSleepersScourge.java index c3d25608379..ddc34abf20b 100644 --- a/Mage.Sets/src/mage/cards/s/ShanidSleepersScourge.java +++ b/Mage.Sets/src/mage/cards/s/ShanidSleepersScourge.java @@ -5,8 +5,6 @@ import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SpellCastControllerTriggeredAbility; -import mage.abilities.effects.Effect; -import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; @@ -17,12 +15,8 @@ import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.FilterPermanent; import mage.filter.FilterSpell; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AnotherPredicate; -import mage.game.Game; -import mage.players.Player; +import mage.filter.common.FilterLandPermanent; import java.util.UUID; @@ -30,16 +24,15 @@ import java.util.UUID; * @author freaisdead */ public final class ShanidSleepersScourge extends CardImpl { - private static final FilterCreaturePermanent otherLegendaryCreaturesFilter = new FilterCreaturePermanent("other legendary creatures"); + private static final FilterCreaturePermanent otherLegendaryCreaturesFilter = new FilterCreaturePermanent("legendary creatures"); private static final FilterSpell legendarySpellFilter = new FilterSpell("a legendary spell"); - private static final FilterPermanent legendaryLandFilter = new FilterPermanent("a legendary land"); + private static final FilterPermanent legendaryLandFilter = new FilterLandPermanent("a legendary land"); static { otherLegendaryCreaturesFilter.add(SuperType.LEGENDARY.getPredicate()); legendarySpellFilter.add(SuperType.LEGENDARY.getPredicate()); - legendaryLandFilter.add(CardType.LAND.getPredicate()); legendaryLandFilter.add(SuperType.LEGENDARY.getPredicate()); } @@ -62,13 +55,14 @@ public final class ShanidSleepersScourge extends CardImpl { otherLegendaryCreaturesFilter, true))); // Whenever you play a legendary land or cast a legendary spell, you draw a card and you lose 1 life. - this.addAbility(new OrTriggeredAbility(Zone.BATTLEFIELD, - new DrawAndLoseEffect(1, 1), - false, + Ability ability = new OrTriggeredAbility(Zone.BATTLEFIELD, + new DrawCardSourceControllerEffect(1).setText("you draw a card"), false, "Whenever you play a legendary land or cast a legendary spell, ", new EntersBattlefieldControlledTriggeredAbility(Zone.BATTLEFIELD, null, legendaryLandFilter, true), new SpellCastControllerTriggeredAbility(null, legendarySpellFilter, false) - )); + ); + ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and")); + this.addAbility(ability); } private ShanidSleepersScourge(final ShanidSleepersScourge card) { @@ -80,40 +74,3 @@ public final class ShanidSleepersScourge extends CardImpl { return new ShanidSleepersScourge(this); } } - - -class DrawAndLoseEffect extends OneShotEffect { - - DrawAndLoseEffect(int drawAmount, int loseLifeAMount) { - super(Outcome.Benefit); - String cardRule = "a card"; - if (drawAmount > 1) { - cardRule = String.format("%d cards", drawAmount); - } - this.staticText = String.format("draw %s and you lose %d life", cardRule, loseLifeAMount); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller == null) { - return false; - } - - Effect drawEffectController = new DrawCardSourceControllerEffect(1); - drawEffectController.apply(game, source); - Effect drawEffectOpponent = new LoseLifeSourceControllerEffect(1); - drawEffectOpponent.apply(game, source); - - return true; - } - - private DrawAndLoseEffect(final DrawAndLoseEffect effect) { - super(effect); - } - - @Override - public DrawAndLoseEffect copy() { - return new DrawAndLoseEffect(this); - } -} \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/t/TenzaGodosMaul.java b/Mage.Sets/src/mage/cards/t/TenzaGodosMaul.java index 05a093325fb..06e16519006 100644 --- a/Mage.Sets/src/mage/cards/t/TenzaGodosMaul.java +++ b/Mage.Sets/src/mage/cards/t/TenzaGodosMaul.java @@ -1,39 +1,10 @@ -/* - * - * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of BetaSteward_at_googlemail.com. - * - */ package mage.cards.t; -import java.util.UUID; import mage.ObjectColor; +import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.Condition; import mage.abilities.condition.common.AttachedToMatchesFilterCondition; -import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostEquippedEffect; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; @@ -41,20 +12,20 @@ import mage.abilities.keyword.EquipAbility; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.*; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.SuperType; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.ColorPredicate; -import mage.target.common.TargetControlledCreaturePermanent; + +import java.util.UUID; /** * @author LevelX */ - public final class TenzaGodosMaul extends CardImpl { - private static final String rule1 = "As long as it's legendary, it gets an additional +2/+2"; - private static final String rule2 = "As long as it's red, it has trample."; - private static final FilterCreaturePermanent legendaryFilter = new FilterCreaturePermanent("legendary"); private static final FilterCreaturePermanent redFilter = new FilterCreaturePermanent("red"); @@ -63,24 +34,29 @@ public final class TenzaGodosMaul extends CardImpl { redFilter.add(new ColorPredicate(ObjectColor.RED)); } + private static final Condition condition1 = new AttachedToMatchesFilterCondition(legendaryFilter); + private static final Condition condition2 = new AttachedToMatchesFilterCondition(redFilter); + public TenzaGodosMaul(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); addSuperType(SuperType.LEGENDARY); this.subtype.add(SubType.EQUIPMENT); - // Equipped creature gets +1/+1. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(1, 1))); - // As long as it's legendary, it gets an additional +2/+2. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostEquippedEffect(2, 2), - new AttachedToMatchesFilterCondition(legendaryFilter), rule1))); - // As long as it's red, it has trample. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new GainAbilityAttachedEffect(TrampleAbility.getInstance(), AttachmentType.EQUIPMENT), - new AttachedToMatchesFilterCondition(redFilter), rule2))); - // Equip {1} ({1}: Attach to target creature you control. Equip only as a sorcery.) - this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(1), new TargetControlledCreaturePermanent())); + // Equipped creature gets +1/+1. As long as it's legendary, it gets an additional +2/+2. As long as it's red, it has trample. + Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(1, 1)); + ability.addEffect(new ConditionalContinuousEffect( + new BoostEquippedEffect(2, 2), condition1, + "As long as it's legendary, it gets an additional +2/+2" + )); + ability.addEffect(new ConditionalContinuousEffect( + new GainAbilityAttachedEffect( + TrampleAbility.getInstance(), AttachmentType.EQUIPMENT + ), condition2, "As long as it's red, it has trample." + )); + this.addAbility(ability); + // Equip {1} + this.addAbility(new EquipAbility(1)); } private TenzaGodosMaul(final TenzaGodosMaul card) { @@ -92,5 +68,3 @@ public final class TenzaGodosMaul extends CardImpl { return new TenzaGodosMaul(this); } } - - diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index a3605b70419..a6ed06caf7c 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -60,7 +60,7 @@ public class VerifyCardDataTest { private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class); - private static final String FULL_ABILITIES_CHECK_SET_CODE = "DMU"; // check all abilities and output cards with wrong abilities texts; + private static final String FULL_ABILITIES_CHECK_SET_CODE = "DMC"; // 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 ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages diff --git a/Mage/src/main/java/mage/abilities/keyword/ConvokeAbility.java b/Mage/src/main/java/mage/abilities/keyword/ConvokeAbility.java index bb1d8f7c496..48170510ef8 100644 --- a/Mage/src/main/java/mage/abilities/keyword/ConvokeAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/ConvokeAbility.java @@ -93,7 +93,7 @@ public class ConvokeAbility extends SimpleStaticAbility implements AlternateMana @Override public String getRule() { - return "Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)"; + return "convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)"; } @Override diff --git a/Mage/src/main/java/mage/game/permanent/token/HazezonTamarSandWarriorToken.java b/Mage/src/main/java/mage/game/permanent/token/HazezonTamarSandWarriorToken.java index e4beae8f30b..7ca0cc46a05 100644 --- a/Mage/src/main/java/mage/game/permanent/token/HazezonTamarSandWarriorToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/HazezonTamarSandWarriorToken.java @@ -12,7 +12,7 @@ import mage.constants.SubType; public final class HazezonTamarSandWarriorToken extends TokenImpl { public HazezonTamarSandWarriorToken() { - super("Sand Warrior Token", "1/1 Sand Warrior creature tokens that are red, green, and white"); + super("Sand Warrior Token", "1/1 red, green, and white Sand Warrior creature tokens"); cardType.add(CardType.CREATURE); color.setRed(true); color.setGreen(true);