diff --git a/Mage.Sets/src/mage/cards/r/RousingOfSouls.java b/Mage.Sets/src/mage/cards/r/RousingOfSouls.java
index 2741301ba8..8b455ab43f 100644
--- a/Mage.Sets/src/mage/cards/r/RousingOfSouls.java
+++ b/Mage.Sets/src/mage/cards/r/RousingOfSouls.java
@@ -47,7 +47,7 @@ class RousingOfSoulsEffect extends OneShotEffect {
public RousingOfSoulsEffect() {
super(Outcome.Benefit);
- this.staticText = "Parley — Each player reveals the top card of their library. For each nonland card revealed this way, you create a 1/1 white Spirit creature token with flying";
+ this.staticText = "Parley — Each player reveals the top card of their library. For each nonland card revealed this way, you create a 1/1 white Spirit creature token with flying";
}
public RousingOfSoulsEffect(final RousingOfSoulsEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/s/SelvalasCharge.java b/Mage.Sets/src/mage/cards/s/SelvalasCharge.java
index d75a5ca0e4..41d52b62af 100644
--- a/Mage.Sets/src/mage/cards/s/SelvalasCharge.java
+++ b/Mage.Sets/src/mage/cards/s/SelvalasCharge.java
@@ -46,7 +46,7 @@ class SelvalasChargeEffect extends OneShotEffect {
public SelvalasChargeEffect() {
super(Outcome.Benefit);
- this.staticText = "Parley — Each player reveals the top card of their library. For each nonland card revealed this way, you create a 3/3 green Elephant creature token";
+ this.staticText = "Parley — Each player reveals the top card of their library. For each nonland card revealed this way, you create a 3/3 green Elephant creature token";
}
public SelvalasChargeEffect(final SelvalasChargeEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/w/WoodvineElemental.java b/Mage.Sets/src/mage/cards/w/WoodvineElemental.java
index 710eae7d7f..46d2659f0a 100644
--- a/Mage.Sets/src/mage/cards/w/WoodvineElemental.java
+++ b/Mage.Sets/src/mage/cards/w/WoodvineElemental.java
@@ -27,7 +27,7 @@ import mage.players.Player;
*/
public final class WoodvineElemental extends CardImpl {
- static final private String rule = "Parley — Whenever {this} attacks, each player reveals the top card of their library. "
+ static final private String rule = "Parley — Whenever {this} attacks, each player reveals the top card of their library. "
+ "For each nonland card revealed this way, attacking creatures you control get +1/+1 until end of turn. Then each player draws a card.";
public WoodvineElemental(UUID ownerId, CardSetInfo setInfo) {
diff --git a/Mage.Sets/src/mage/cards/w/WoollyRazorback.java b/Mage.Sets/src/mage/cards/w/WoollyRazorback.java
index 101a29b030..d0b5e5ef2e 100644
--- a/Mage.Sets/src/mage/cards/w/WoollyRazorback.java
+++ b/Mage.Sets/src/mage/cards/w/WoollyRazorback.java
@@ -48,7 +48,7 @@ public final class WoollyRazorback extends CardImpl {
new SourceHasCounterCondition(CounterType.ICE), "and it has defender"));
this.addAbility(ability);
// Whenever Woolly Razorback blocks, remove an ice counter from it.
- this.addAbility(new BlocksSourceTriggeredAbility(new RemoveCounterSourceEffect(CounterType.ICE.createInstance()), false));
+ this.addAbility(new BlocksSourceTriggeredAbility(new RemoveCounterSourceEffect(CounterType.ICE.createInstance()).setText("remove an ice counter from it"), false));
}
public WoollyRazorback(final WoollyRazorback card) {
diff --git a/Mage.Sets/src/mage/cards/w/WordsOfWisdom.java b/Mage.Sets/src/mage/cards/w/WordsOfWisdom.java
index a380639980..f5f939d0cf 100644
--- a/Mage.Sets/src/mage/cards/w/WordsOfWisdom.java
+++ b/Mage.Sets/src/mage/cards/w/WordsOfWisdom.java
@@ -24,7 +24,7 @@ public final class WordsOfWisdom extends CardImpl {
// You draw two cards, then each other player draws a card.
- this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2));
+ this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2).setText("you draw two cards"));
this.getSpellAbility().addEffect(new WordsOfWisdomEffect());
}
@@ -42,7 +42,7 @@ class WordsOfWisdomEffect extends OneShotEffect {
public WordsOfWisdomEffect() {
super(Outcome.Detriment);
- this.staticText = "then each other player draws a card";
+ this.staticText = ", then each other player draws a card";
}
public WordsOfWisdomEffect(final WordsOfWisdomEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/w/WormsOfTheEarth.java b/Mage.Sets/src/mage/cards/w/WormsOfTheEarth.java
index 6503ed779f..a3fc5545e8 100644
--- a/Mage.Sets/src/mage/cards/w/WormsOfTheEarth.java
+++ b/Mage.Sets/src/mage/cards/w/WormsOfTheEarth.java
@@ -36,7 +36,7 @@ public final class WormsOfTheEarth extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new WormsOfTheEarthEnterEffect()));
// At the beginning of each upkeep, any player may sacrifice two lands or have Worms of the Earth deal 5 damage to that player. If a player does either, destroy Worms of the Earth.
- this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new WormsOfTheEarthDestroyEffect(), TargetController.ANY, false));
+ this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new WormsOfTheEarthDestroyEffect(), TargetController.EACH_PLAYER, false));
}
public WormsOfTheEarth(final WormsOfTheEarth card) {
diff --git a/Mage.Sets/src/mage/cards/w/WormwoodTreefolk.java b/Mage.Sets/src/mage/cards/w/WormwoodTreefolk.java
index 372e3f6646..07c818aa4b 100644
--- a/Mage.Sets/src/mage/cards/w/WormwoodTreefolk.java
+++ b/Mage.Sets/src/mage/cards/w/WormwoodTreefolk.java
@@ -32,13 +32,13 @@ public final class WormwoodTreefolk extends CardImpl {
// {G}{G}: Wormwood Treefolk gains forestwalk until end of turn and deals 2 damage to you.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new GainAbilitySourceEffect(new ForestwalkAbility(false), Duration.EndOfTurn), new ManaCostsImpl("{G}{G}"));
- ability.addEffect(new DamageControllerEffect(2));
+ ability.addEffect(new DamageControllerEffect(2).setText("and deals 2 damage to you"));
this.addAbility(ability);
// {B}{B}: Wormwood Treefolk gains swampwalk until end of turn and deals 2 damage to you.
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new GainAbilitySourceEffect(new SwampwalkAbility(false), Duration.EndOfTurn), new ManaCostsImpl("{B}{B}"));
- ability.addEffect(new DamageControllerEffect(2));
+ ability.addEffect(new DamageControllerEffect(2).setText("and deals 2 damage to you"));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/w/WrapInFlames.java b/Mage.Sets/src/mage/cards/w/WrapInFlames.java
index 27d80b4fb0..b10f6b78d9 100644
--- a/Mage.Sets/src/mage/cards/w/WrapInFlames.java
+++ b/Mage.Sets/src/mage/cards/w/WrapInFlames.java
@@ -1,7 +1,5 @@
-
package mage.cards.w;
-import java.util.UUID;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.combat.CantBlockTargetEffect;
import mage.cards.CardImpl;
@@ -10,19 +8,19 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.target.common.TargetCreaturePermanent;
+import java.util.UUID;
+
/**
- *
* @author North
*/
public final class WrapInFlames extends CardImpl {
public WrapInFlames(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{R}");
-
+ super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{R}");
// Wrap in Flames deals 1 damage to each of up to three target creatures. Those creatures can't block this turn.
- this.getSpellAbility().addEffect(new DamageTargetEffect(1));
- this.getSpellAbility().addEffect(new CantBlockTargetEffect(Duration.EndOfTurn));
+ this.getSpellAbility().addEffect(new DamageTargetEffect(1).setText("{this} deals 1 damage to each of up to three target creatures."));
+ this.getSpellAbility().addEffect(new CantBlockTargetEffect(Duration.EndOfTurn).setText("Those creatures can't block this turn"));
this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 3));
}
diff --git a/Mage.Sets/src/mage/cards/w/WreckingOgre.java b/Mage.Sets/src/mage/cards/w/WreckingOgre.java
index 3f70285ed1..a8004852e2 100644
--- a/Mage.Sets/src/mage/cards/w/WreckingOgre.java
+++ b/Mage.Sets/src/mage/cards/w/WreckingOgre.java
@@ -1,7 +1,5 @@
-
package mage.cards.w;
-import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.effects.common.continuous.BoostTargetEffect;
@@ -11,17 +9,18 @@ import mage.abilities.keyword.DoubleStrikeAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
-import mage.constants.SubType;
import mage.constants.Duration;
+import mage.constants.SubType;
+
+import java.util.UUID;
/**
- *
* @author Plopman
*/
public final class WreckingOgre extends CardImpl {
public WreckingOgre(UUID ownerId, CardSetInfo setInfo) {
- super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{R}");
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}");
this.subtype.add(SubType.OGRE);
this.subtype.add(SubType.WARRIOR);
@@ -30,9 +29,14 @@ public final class WreckingOgre extends CardImpl {
// Double strike
this.addAbility(DoubleStrikeAbility.getInstance());
+
// Bloodrush - {3}{R}{R}, Discard Wrecking Ogre: Target attacking creature gets +3/+3 and gains double strike until end of turn.
- Ability ability = new BloodrushAbility("{3}{R}{R}", new BoostTargetEffect(3, 3, Duration.EndOfTurn));
- ability.addEffect(new GainAbilityTargetEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn));
+ Ability ability = new BloodrushAbility("{3}{R}{R}", new BoostTargetEffect(
+ 3, 3, Duration.EndOfTurn
+ ).setText("target attacking creature gets +3/+3"));
+ ability.addEffect(new GainAbilityTargetEffect(
+ DoubleStrikeAbility.getInstance(), Duration.EndOfTurn
+ ).setText("and gains double strike until end of turn"));
this.addAbility(ability);
}
diff --git a/Mage.Sets/src/mage/cards/w/WrensRunVanquisher.java b/Mage.Sets/src/mage/cards/w/WrensRunVanquisher.java
index 4eee3a1b6f..d56ec48001 100644
--- a/Mage.Sets/src/mage/cards/w/WrensRunVanquisher.java
+++ b/Mage.Sets/src/mage/cards/w/WrensRunVanquisher.java
@@ -37,7 +37,7 @@ public final class WrensRunVanquisher extends CardImpl {
this.getSpellAbility().addCost(new OrCost(
new RevealTargetFromHandCost(new TargetCardInHand(filter)),
new GenericManaCost(3),
- "reveal a Elf card from your hand or pay {3}"));
+ "reveal an Elf card from your hand or pay {3}"));
// Deathtouch
this.addAbility(DeathtouchAbility.getInstance());
diff --git a/Mage.Sets/src/mage/cards/w/WrexialTheRisenDeep.java b/Mage.Sets/src/mage/cards/w/WrexialTheRisenDeep.java
index f4c5dde4c7..195b6d133a 100644
--- a/Mage.Sets/src/mage/cards/w/WrexialTheRisenDeep.java
+++ b/Mage.Sets/src/mage/cards/w/WrexialTheRisenDeep.java
@@ -109,7 +109,7 @@ class WrexialTheRisenDeepTriggeredAbility extends TriggeredAbilityImpl {
return "Whenever {this} deals combat damage to a player, "
+ "you may cast target instant or sorcery card "
+ "from that player's graveyard without paying its mana cost. "
- + "If that card would be put into a graveyard this turn, exile it instead";
+ + "If that spell would be put into a graveyard this turn, exile it instead";
}
}
@@ -119,7 +119,7 @@ class WrexialTheRisenDeepEffect extends OneShotEffect {
super(Outcome.PlayForFree);
staticText = "you may cast target instant or sorcery card from "
+ "that player's graveyard without paying its mana cost. "
- + "If that card would be put into a graveyard this turn, exile it instead";
+ + "If that spell would be put into a graveyard this turn, exile it instead";
}
public WrexialTheRisenDeepEffect(final WrexialTheRisenDeepEffect effect) {
diff --git a/Mage/src/main/java/mage/abilities/keyword/ChampionAbility.java b/Mage/src/main/java/mage/abilities/keyword/ChampionAbility.java
index 620bd70251..ee8a5f517a 100644
--- a/Mage/src/main/java/mage/abilities/keyword/ChampionAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/ChampionAbility.java
@@ -126,7 +126,7 @@ public class ChampionAbility extends StaticAbility {
@Override
public String getRule() {
StringBuilder sb = new StringBuilder("Champion ").append(objectDescription);
- sb.append("(When this enters the battlefield, sacrifice it unless you exile another ");
+ sb.append(" (When this enters the battlefield, sacrifice it unless you exile another ");
sb.append(objectDescription);
sb.append(" you control. When this leaves the battlefield, that card returns to the battlefield.)");
return sb.toString();
diff --git a/Mage/src/main/java/mage/abilities/keyword/FadingAbility.java b/Mage/src/main/java/mage/abilities/keyword/FadingAbility.java
index 09c2adc224..03d388091c 100644
--- a/Mage/src/main/java/mage/abilities/keyword/FadingAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/FadingAbility.java
@@ -34,7 +34,7 @@ public class FadingAbility extends EntersBattlefieldAbility {
ruleText = "Fading " + fadeCounter
+ (shortRuleText ? ""
: " (This permanent enters the battlefield with " + fadeCounter + " fade counters on it."
- + " At the beginning of your upkeep, remove a fade counter from this permanent. If you can't, sacrifice the permanent.");
+ + " At the beginning of your upkeep, remove a fade counter from this permanent. If you can't, sacrifice the permanent.)");
}
public FadingAbility(final FadingAbility ability) {
diff --git a/Mage/src/main/java/mage/abilities/keyword/ForecastAbility.java b/Mage/src/main/java/mage/abilities/keyword/ForecastAbility.java
index 3c78dc5c45..5cb06f17dc 100644
--- a/Mage/src/main/java/mage/abilities/keyword/ForecastAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/ForecastAbility.java
@@ -1,15 +1,14 @@
package mage.abilities.keyword;
-import mage.abilities.common.LimitedTimesPerTurnActivatedAbility;
+import mage.abilities.ActivatedAbilityImpl;
+import mage.abilities.condition.Condition;
+import mage.abilities.condition.common.IsStepCondition;
import mage.abilities.costs.Cost;
import mage.abilities.costs.common.RevealSourceFromYourHandCost;
import mage.abilities.effects.Effect;
import mage.constants.PhaseStep;
import mage.constants.Zone;
-import mage.game.Game;
-
-import java.util.UUID;
/**
* 702.56. Forecast 702.56a A forecast ability is a special kind of activated
@@ -25,10 +24,14 @@ import java.util.UUID;
*
* @author LevelX2
*/
-public class ForecastAbility extends LimitedTimesPerTurnActivatedAbility {
+public class ForecastAbility extends ActivatedAbilityImpl {
+
+ private static final Condition upkeepCondition = new IsStepCondition(PhaseStep.UPKEEP, true);
public ForecastAbility(Effect effect, Cost cost) {
super(Zone.HAND, effect, cost);
+ this.maxActivationsPerTurn = 1;
+ this.condition = upkeepCondition;
this.addCost(new RevealSourceFromYourHandCost());
}
@@ -41,18 +44,8 @@ public class ForecastAbility extends LimitedTimesPerTurnActivatedAbility {
return new ForecastAbility(this);
}
- @Override
- public ActivationStatus canActivate(UUID playerId, Game game) {
- // May be activated only during the upkeep step of the card's owner
- // Because it can only be activated from a players hand it should be ok to check here with controllerId instead of card.getOwnerId().
- if (!game.isActivePlayer(controllerId) || PhaseStep.UPKEEP != game.getStep().getType()) {
- return ActivationStatus.getFalse();
- }
- return super.canActivate(playerId, game);
- }
-
@Override
public String getRule() {
- return "Forecast — " + super.getRule() + " (Activate this ability only during your upkeep.)";
+ return "Forecast — " + super.getRule() + " (Activate this ability only during your upkeep and only once each turn)";
}
}