mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 10:40:06 -08:00
many the text fixes
This commit is contained in:
parent
8f89253b58
commit
1816c8ad73
99 changed files with 208 additions and 227 deletions
|
|
@ -10,7 +10,6 @@ import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
import mage.constants.Zone;
|
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -24,7 +23,8 @@ public final class AbsoluteGrace extends CardImpl {
|
||||||
|
|
||||||
// All creatures have protection from black.
|
// All creatures have protection from black.
|
||||||
Ability ability = ProtectionAbility.from(ObjectColor.BLACK);
|
Ability ability = ProtectionAbility.from(ObjectColor.BLACK);
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(ability, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES, false)));
|
this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect(ability, Duration.WhileOnBattlefield,
|
||||||
|
StaticFilters.FILTER_PERMANENT_ALL_CREATURES, false)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private AbsoluteGrace(final AbsoluteGrace card) {
|
private AbsoluteGrace(final AbsoluteGrace card) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.a;
|
package mage.cards.a;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -11,7 +10,6 @@ import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
import mage.constants.Zone;
|
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -24,7 +22,8 @@ public final class AbsoluteLaw extends CardImpl {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}");
|
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}");
|
||||||
|
|
||||||
Ability ability = ProtectionAbility.from(ObjectColor.RED);
|
Ability ability = ProtectionAbility.from(ObjectColor.RED);
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAllEffect(ability, Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES, false)));
|
this.addAbility(new SimpleStaticAbility(new GainAbilityAllEffect(ability, Duration.WhileOnBattlefield,
|
||||||
|
StaticFilters.FILTER_PERMANENT_ALL_CREATURES, false)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private AbsoluteLaw(final AbsoluteLaw card) {
|
private AbsoluteLaw(final AbsoluteLaw card) {
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,21 @@
|
||||||
|
|
||||||
package mage.cards.a;
|
package mage.cards.a;
|
||||||
|
|
||||||
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.common.ExileSourceCost;
|
import mage.abilities.costs.common.ExileSourceCost;
|
||||||
import mage.abilities.costs.common.TapSourceCost;
|
import mage.abilities.costs.common.TapSourceCost;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
import mage.cards.*;
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Outcome;
|
import mage.constants.Outcome;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.GameState;
|
|
||||||
import mage.players.PlayerList;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author azra1l <algee2005@gmail.com>
|
* @author azra1l <algee2005@gmail.com>
|
||||||
*/
|
*/
|
||||||
public final class AeonEngine extends CardImpl {
|
public final class AeonEngine extends CardImpl {
|
||||||
|
|
@ -44,9 +42,10 @@ public final class AeonEngine extends CardImpl {
|
||||||
}
|
}
|
||||||
|
|
||||||
class AeonEngineEffect extends OneShotEffect {
|
class AeonEngineEffect extends OneShotEffect {
|
||||||
public AeonEngineEffect() {
|
|
||||||
|
AeonEngineEffect() {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
this.staticText = "Reverse the game turn order.";
|
this.staticText = "Reverse the game's turn order.";
|
||||||
}
|
}
|
||||||
|
|
||||||
private AeonEngineEffect(final AeonEngineEffect effect) {
|
private AeonEngineEffect(final AeonEngineEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ public final class ArcaneSpyglass extends CardImpl {
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new GenericManaCost(2));
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new GenericManaCost(2));
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter)));
|
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter)));
|
||||||
ability.addEffect(new AddCountersSourceEffect(CounterType.CHARGE.createInstance()));
|
ability.addEffect(new AddCountersSourceEffect(CounterType.CHARGE.createInstance()).concatBy("and"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
// Remove three charge counters from Arcane Spyglass: Draw a card.
|
// Remove three charge counters from Arcane Spyglass: Draw a card.
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.a;
|
package mage.cards.a;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -20,10 +19,9 @@ public final class Attunement extends CardImpl {
|
||||||
public Attunement(UUID ownerId, CardSetInfo setInfo) {
|
public Attunement(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{U}");
|
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{U}");
|
||||||
|
|
||||||
|
|
||||||
// Return Attunement to its owner's hand: Draw three cards, then discard four cards.
|
// Return Attunement to its owner's hand: Draw three cards, then discard four cards.
|
||||||
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(3), new ReturnToHandFromBattlefieldSourceCost());
|
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(3), new ReturnToHandFromBattlefieldSourceCost());
|
||||||
ability.addEffect(new DiscardControllerEffect(4));
|
ability.addEffect(new DiscardControllerEffect(4).concatBy(", then"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.a;
|
package mage.cards.a;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -31,7 +30,8 @@ public final class AvacynianMissionaries extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of your end step, if Avacynian Missionaries is equipped, transform it.
|
// At the beginning of your end step, if Avacynian Missionaries is equipped, transform it.
|
||||||
this.addAbility(new TransformAbility());
|
this.addAbility(new TransformAbility());
|
||||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD, new TransformSourceEffect(), TargetController.YOU, EquippedSourceCondition.instance, false));
|
this.addAbility(new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD, new TransformSourceEffect().setText("transform it"),
|
||||||
|
TargetController.YOU, EquippedSourceCondition.instance, false));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.b;
|
package mage.cards.b;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
|
|
@ -12,8 +11,7 @@ import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.SuperType;
|
import mage.constants.SuperType;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.filter.common.FilterControlledPermanent;
|
import mage.filter.StaticFilters;
|
||||||
import mage.target.common.TargetControlledPermanent;
|
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -34,7 +32,7 @@ public final class BarrinMasterWizard extends CardImpl {
|
||||||
|
|
||||||
//{2}, Sacrifice a permanent: Return target creature to its owner's hand.
|
//{2}, Sacrifice a permanent: Return target creature to its owner's hand.
|
||||||
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl<>("{2}"));
|
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl<>("{2}"));
|
||||||
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(new FilterControlledPermanent())));
|
ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_PERMANENT_SHORT_TEXT));
|
||||||
ability.addTarget(new TargetCreaturePermanent());
|
ability.addTarget(new TargetCreaturePermanent());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ public final class BlitzwingAdaptiveAssailant extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of combat on your turn, choose flying or indestructible at random. Blitzwing gains that ability until end of turn.
|
// At the beginning of combat on your turn, choose flying or indestructible at random. Blitzwing gains that ability until end of turn.
|
||||||
this.addAbility(new BeginningOfCombatTriggeredAbility(
|
this.addAbility(new BeginningOfCombatTriggeredAbility(
|
||||||
new BlitzwingCruelTormentorEffect(), TargetController.YOU, false
|
new BlitzwingAdaptiveAssailantEffect(), TargetController.YOU, false
|
||||||
));
|
));
|
||||||
|
|
||||||
// Whenever Blitzwing deals combat damage to a player, convert it.
|
// Whenever Blitzwing deals combat damage to a player, convert it.
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.b;
|
package mage.cards.b;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -20,10 +19,11 @@ public final class Breach extends CardImpl {
|
||||||
public Breach(UUID ownerId, CardSetInfo setInfo) {
|
public Breach(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{B}");
|
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{2}{B}");
|
||||||
|
|
||||||
|
|
||||||
// Target creature gets +2/+0 and gains fear until end of turn.
|
// Target creature gets +2/+0 and gains fear until end of turn.
|
||||||
this.getSpellAbility().addEffect(new BoostTargetEffect(2, 0, Duration.EndOfTurn));
|
this.getSpellAbility().addEffect(new BoostTargetEffect(2, 0, Duration.EndOfTurn)
|
||||||
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(FearAbility.getInstance(), Duration.EndOfTurn));
|
.setText("target creature gets +2/+0"));
|
||||||
|
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(FearAbility.getInstance(), Duration.EndOfTurn)
|
||||||
|
.setText("and gains fear until end of turn"));
|
||||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.b;
|
package mage.cards.b;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -41,7 +40,8 @@ public final class Burnout extends CardImpl {
|
||||||
|
|
||||||
// Draw a card at the beginning of the next turn's upkeep.
|
// Draw a card at the beginning of the next turn's upkeep.
|
||||||
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
|
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
|
||||||
new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false));
|
new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false)
|
||||||
|
.concatBy("<br>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Burnout(final Burnout card) {
|
private Burnout(final Burnout card) {
|
||||||
|
|
@ -56,7 +56,7 @@ public final class Burnout extends CardImpl {
|
||||||
|
|
||||||
class BurnoutCounterTargetEffect extends OneShotEffect {
|
class BurnoutCounterTargetEffect extends OneShotEffect {
|
||||||
|
|
||||||
public BurnoutCounterTargetEffect() {
|
BurnoutCounterTargetEffect() {
|
||||||
super(Outcome.Detriment);
|
super(Outcome.Detriment);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ import java.util.UUID;
|
||||||
public final class CavalcadeOfCalamity extends CardImpl {
|
public final class CavalcadeOfCalamity extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCreaturePermanent filter
|
private static final FilterCreaturePermanent filter
|
||||||
= new FilterCreaturePermanent("creaure you control with power 1 or less");
|
= new FilterCreaturePermanent("creature you control with power 1 or less");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(TargetController.YOU.getControllerPredicate());
|
filter.add(TargetController.YOU.getControllerPredicate());
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ public final class Cindervines extends CardImpl {
|
||||||
// Whenever an opponent casts a noncreature spell, Cindervines deals 1 damage to that player.
|
// Whenever an opponent casts a noncreature spell, Cindervines deals 1 damage to that player.
|
||||||
this.addAbility(new SpellCastOpponentTriggeredAbility(
|
this.addAbility(new SpellCastOpponentTriggeredAbility(
|
||||||
Zone.BATTLEFIELD, new DamageTargetEffect(1, true, "that player"),
|
Zone.BATTLEFIELD, new DamageTargetEffect(1, true, "that player"),
|
||||||
StaticFilters.FILTER_SPELL_NON_CREATURE, false, SetTargetPointer.PLAYER
|
StaticFilters.FILTER_SPELL_A_NON_CREATURE, false, SetTargetPointer.PLAYER
|
||||||
));
|
));
|
||||||
|
|
||||||
// {1}, Sacrifice Cindervines: Destroy target artifact or enchantment. Cindervines deals 2 damage to that permanent's controller.
|
// {1}, Sacrifice Cindervines: Destroy target artifact or enchantment. Cindervines deals 2 damage to that permanent's controller.
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.c;
|
package mage.cards.c;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -11,7 +10,7 @@ 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.target.common.TargetControlledPermanent;
|
import mage.filter.StaticFilters;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|
@ -24,7 +23,7 @@ public final class ClawsOfGix extends CardImpl {
|
||||||
|
|
||||||
//{1}, Sacrifice a permanent: You gain 1 life.
|
//{1}, Sacrifice a permanent: You gain 1 life.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(1), new GenericManaCost(1));
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainLifeEffect(1), new GenericManaCost(1));
|
||||||
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent()));
|
ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_PERMANENT_SHORT_TEXT));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ class CliffsideRescuerEffect extends OneShotEffect {
|
||||||
|
|
||||||
CliffsideRescuerEffect() {
|
CliffsideRescuerEffect() {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
staticText = "Target permanent you control gets protection from each opponent until end of turn.";
|
staticText = "Target permanent you control gains protection from each of your opponents until end of turn.";
|
||||||
}
|
}
|
||||||
|
|
||||||
private CliffsideRescuerEffect(final CliffsideRescuerEffect effect) {
|
private CliffsideRescuerEffect(final CliffsideRescuerEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.c;
|
package mage.cards.c;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -7,7 +6,7 @@ import mage.abilities.keyword.UndauntedAbility;
|
||||||
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.filter.common.FilterNonlandPermanent;
|
import mage.filter.StaticFilters;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|
@ -21,7 +20,7 @@ public final class CoastalBreach extends CardImpl {
|
||||||
// Undaunted
|
// Undaunted
|
||||||
this.addAbility(new UndauntedAbility());
|
this.addAbility(new UndauntedAbility());
|
||||||
// Return all nonland permanents to their owners' hands.
|
// Return all nonland permanents to their owners' hands.
|
||||||
this.getSpellAbility().addEffect(new ReturnToHandFromBattlefieldAllEffect(new FilterNonlandPermanent()));
|
this.getSpellAbility().addEffect(new ReturnToHandFromBattlefieldAllEffect(StaticFilters.FILTER_PERMANENTS_NON_LAND));
|
||||||
}
|
}
|
||||||
|
|
||||||
private CoastalBreach(final CoastalBreach card) {
|
private CoastalBreach(final CoastalBreach card) {
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package mage.cards.c;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.Mode;
|
|
||||||
import mage.abilities.TriggeredAbilityImpl;
|
import mage.abilities.TriggeredAbilityImpl;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
import mage.abilities.costs.common.TapSourceCost;
|
import mage.abilities.costs.common.TapSourceCost;
|
||||||
|
|
@ -86,7 +85,7 @@ class ContestedWarZoneAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "Whenever a creature deals combat damage to you, that creature's controller gains control of {this}";
|
return "Whenever a creature deals combat damage to you, that creature's controller gains control of {this}.";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,12 +24,14 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class ConversionChamber extends CardImpl {
|
public final class ConversionChamber extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterArtifactCard filter = new FilterArtifactCard("artifact card from a graveyard");
|
||||||
|
|
||||||
public ConversionChamber(UUID ownerId, CardSetInfo setInfo) {
|
public ConversionChamber(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
|
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}");
|
||||||
// {2}, {T}: Exile target artifact card from a graveyard. Put a charge counter on Conversion Chamber.
|
// {2}, {T}: Exile target artifact card from a graveyard. Put a charge counter on Conversion Chamber.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new GenericManaCost(2));
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new GenericManaCost(2));
|
||||||
ability.addEffect(new AddCountersSourceEffect(CounterType.CHARGE.createInstance()));
|
ability.addEffect(new AddCountersSourceEffect(CounterType.CHARGE.createInstance()));
|
||||||
ability.addTarget(new TargetCardInGraveyard(new FilterArtifactCard("artifact card from a graveyard")));
|
ability.addTarget(new TargetCardInGraveyard(filter));
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
// {2}, {T}, Remove a charge counter from Conversion Chamber: Create a 3/3 colorless Golem artifact creature token.
|
// {2}, {T}, Remove a charge counter from Conversion Chamber: Create a 3/3 colorless Golem artifact creature token.
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ public final class CorpseCur extends CardImpl {
|
||||||
this.power = new MageInt(2);
|
this.power = new MageInt(2);
|
||||||
this.toughness = new MageInt(2);
|
this.toughness = new MageInt(2);
|
||||||
this.addAbility(InfectAbility.getInstance());
|
this.addAbility(InfectAbility.getInstance());
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect());
|
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect(), true);
|
||||||
ability.addTarget(new TargetCardInYourGraveyard(filter));
|
ability.addTarget(new TargetCardInYourGraveyard(filter));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ class CurseOfBountyEffect extends OneShotEffect {
|
||||||
|
|
||||||
CurseOfBountyEffect() {
|
CurseOfBountyEffect() {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
this.staticText = "untap all nonland permanents you control. Each opponent attacking that player does the same.";
|
this.staticText = "untap all nonland permanents you control. Each opponent attacking that player untaps all nonland permanents they control.";
|
||||||
}
|
}
|
||||||
|
|
||||||
private CurseOfBountyEffect(final CurseOfBountyEffect effect) {
|
private CurseOfBountyEffect(final CurseOfBountyEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ package mage.cards.c;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.TriggeredAbilityImpl;
|
import mage.abilities.TriggeredAbilityImpl;
|
||||||
import mage.abilities.effects.Effect;
|
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
import mage.abilities.effects.common.AttachEffect;
|
import mage.abilities.effects.common.AttachEffect;
|
||||||
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
||||||
|
|
@ -17,7 +16,6 @@ import mage.constants.Zone;
|
||||||
import mage.counters.CounterType;
|
import mage.counters.CounterType;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.events.GameEvent;
|
import mage.game.events.GameEvent;
|
||||||
import mage.game.events.GameEvent.EventType;
|
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
import mage.game.stack.Spell;
|
import mage.game.stack.Spell;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
|
|
@ -59,14 +57,10 @@ public final class CurseOfVengeance extends CardImpl {
|
||||||
|
|
||||||
class CurseOfVengeanceTriggeredAbility extends TriggeredAbilityImpl {
|
class CurseOfVengeanceTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
public CurseOfVengeanceTriggeredAbility() {
|
CurseOfVengeanceTriggeredAbility() {
|
||||||
super(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.SPITE.createInstance(), Outcome.Detriment), false);
|
super(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.SPITE.createInstance(), Outcome.Detriment), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CurseOfVengeanceTriggeredAbility(Effect effect, boolean optional, String text) {
|
|
||||||
super(Zone.BATTLEFIELD, effect, optional);
|
|
||||||
}
|
|
||||||
|
|
||||||
private CurseOfVengeanceTriggeredAbility(final CurseOfVengeanceTriggeredAbility ability) {
|
private CurseOfVengeanceTriggeredAbility(final CurseOfVengeanceTriggeredAbility ability) {
|
||||||
super(ability);
|
super(ability);
|
||||||
}
|
}
|
||||||
|
|
@ -92,7 +86,7 @@ class CurseOfVengeanceTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "Whenever enchanted player casts a spell, put a spite counter on {this}";
|
return "Whenever enchanted player casts a spell, put a spite counter on {this}.";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -103,8 +97,9 @@ class CurseOfVengeanceTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
class CurseOfVengeancePlayerLosesTriggeredAbility extends TriggeredAbilityImpl {
|
class CurseOfVengeancePlayerLosesTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
public CurseOfVengeancePlayerLosesTriggeredAbility() {
|
CurseOfVengeancePlayerLosesTriggeredAbility() {
|
||||||
super(Zone.BATTLEFIELD, new CurseOfVengeanceDrawLifeEffect(), false);
|
super(Zone.BATTLEFIELD, new CurseOfVengeanceDrawLifeEffect(), false);
|
||||||
|
setTriggerPhrase("When enchanted player loses the game, ");
|
||||||
}
|
}
|
||||||
|
|
||||||
private CurseOfVengeancePlayerLosesTriggeredAbility(final CurseOfVengeancePlayerLosesTriggeredAbility ability) {
|
private CurseOfVengeancePlayerLosesTriggeredAbility(final CurseOfVengeancePlayerLosesTriggeredAbility ability) {
|
||||||
|
|
@ -127,16 +122,11 @@ class CurseOfVengeancePlayerLosesTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
return sourceObject != null && sourceObject.isAttachedTo(event.getPlayerId());
|
return sourceObject != null && sourceObject.isAttachedTo(event.getPlayerId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getRule() {
|
|
||||||
return "When enchanted player loses the game, you gain X life and "
|
|
||||||
+ "draw X cards, where X is the number of spite counters on {this}";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class CurseOfVengeanceDrawLifeEffect extends OneShotEffect {
|
class CurseOfVengeanceDrawLifeEffect extends OneShotEffect {
|
||||||
|
|
||||||
public CurseOfVengeanceDrawLifeEffect() {
|
CurseOfVengeanceDrawLifeEffect() {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
staticText = "you gain X life and draw X cards, where X is the "
|
staticText = "you gain X life and draw X cards, where X is the "
|
||||||
+ "number of spite counters on {this}";
|
+ "number of spite counters on {this}";
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.d;
|
package mage.cards.d;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -23,7 +22,7 @@ import mage.filter.predicate.mageobject.AbilityPredicate;
|
||||||
*/
|
*/
|
||||||
public final class DauthiWarlord extends CardImpl {
|
public final class DauthiWarlord extends CardImpl {
|
||||||
|
|
||||||
private static final FilterPermanent filter = new FilterCreaturePermanent("creatures with shadow");
|
private static final FilterPermanent filter = new FilterCreaturePermanent("creatures with shadow on the battlefield");
|
||||||
|
|
||||||
static{
|
static{
|
||||||
filter.add(new AbilityPredicate(ShadowAbility.class));
|
filter.add(new AbilityPredicate(ShadowAbility.class));
|
||||||
|
|
|
||||||
|
|
@ -20,9 +20,10 @@ public final class DenyTheWitch extends CardImpl {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}{U}{B}");
|
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}{U}{B}");
|
||||||
|
|
||||||
// Counter target spell, activated ability, or triggered ability. Its controller loses life equal to the number of creatures you control.
|
// Counter target spell, activated ability, or triggered ability. Its controller loses life equal to the number of creatures you control.
|
||||||
this.getSpellAbility().addEffect(new CounterTargetEffect());
|
this.getSpellAbility().addEffect(new CounterTargetEffect().setText("Counter target spell, activated ability, or triggered ability"));
|
||||||
this.getSpellAbility().addTarget(new TargetStackObject());
|
this.getSpellAbility().addTarget(new TargetStackObject());
|
||||||
this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(CreaturesYouControlCount.instance));
|
this.getSpellAbility().addEffect(new LoseLifeTargetControllerEffect(CreaturesYouControlCount.instance)
|
||||||
|
.setText("Its controller loses life equal to the number of creatures you control"));
|
||||||
this.getSpellAbility().addHint(CreaturesYouControlHint.instance);
|
this.getSpellAbility().addHint(CreaturesYouControlHint.instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ public final class EldraziObligator extends CardImpl {
|
||||||
|
|
||||||
DoIfCostPaid costPaidEffect = new DoIfCostPaid(new GainControlTargetEffect(Duration.EndOfTurn), new ManaCostsImpl<>("{1}{C}"));
|
DoIfCostPaid costPaidEffect = new DoIfCostPaid(new GainControlTargetEffect(Duration.EndOfTurn), new ManaCostsImpl<>("{1}{C}"));
|
||||||
Effect untapEffect = new UntapTargetEffect();
|
Effect untapEffect = new UntapTargetEffect();
|
||||||
untapEffect.setText("untap that creature,");
|
untapEffect.setText(", untap that creature,");
|
||||||
Effect hasteEffect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn);
|
Effect hasteEffect = new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn);
|
||||||
hasteEffect.setText("and it gains haste until end of turn");
|
hasteEffect.setText("and it gains haste until end of turn");
|
||||||
costPaidEffect.addEffect(untapEffect);
|
costPaidEffect.addEffect(untapEffect);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.e;
|
package mage.cards.e;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -36,7 +35,8 @@ public final class Enervate extends CardImpl {
|
||||||
this.getSpellAbility().addTarget(new TargetPermanent(filter));
|
this.getSpellAbility().addTarget(new TargetPermanent(filter));
|
||||||
|
|
||||||
// Draw a card at the beginning of the next turn's upkeep.
|
// Draw a card at the beginning of the next turn's upkeep.
|
||||||
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false));
|
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(
|
||||||
|
new DrawCardSourceControllerEffect(1)), false).concatBy("<br>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Enervate(final Enervate card) {
|
private Enervate(final Enervate card) {
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ class EssenceFluxEffect extends OneShotEffect {
|
||||||
|
|
||||||
EssenceFluxEffect() {
|
EssenceFluxEffect() {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
staticText = "return that card to the battlefield under its owner's control. If it's a Spirit, put a +1/+1 counter on it";
|
staticText = ", then return that card to the battlefield under its owner's control. If it's a Spirit, put a +1/+1 counter on it";
|
||||||
}
|
}
|
||||||
|
|
||||||
private EssenceFluxEffect(final EssenceFluxEffect effect) {
|
private EssenceFluxEffect(final EssenceFluxEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -53,9 +53,9 @@ public final class FatalGrudge extends CardImpl {
|
||||||
|
|
||||||
class FatalGrudgeEffect extends OneShotEffect {
|
class FatalGrudgeEffect extends OneShotEffect {
|
||||||
|
|
||||||
public FatalGrudgeEffect() {
|
FatalGrudgeEffect() {
|
||||||
super(Outcome.Sacrifice);
|
super(Outcome.Sacrifice);
|
||||||
this.staticText = "each opponent chooses a permanent they control that shares a type with the sacrificed permanent and sacrifices it";
|
this.staticText = "each opponent chooses a permanent they control that shares a card type with the sacrificed permanent and sacrifices it";
|
||||||
}
|
}
|
||||||
|
|
||||||
private FatalGrudgeEffect(final FatalGrudgeEffect effect) {
|
private FatalGrudgeEffect(final FatalGrudgeEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ public final class FearsomeTemper extends CardImpl {
|
||||||
Ability grantedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedByTargetSourceEffect(Duration.EndOfTurn), new ManaCostsImpl<>("{2}{R}"));
|
Ability grantedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CantBeBlockedByTargetSourceEffect(Duration.EndOfTurn), new ManaCostsImpl<>("{2}{R}"));
|
||||||
grantedAbility.addTarget(new TargetCreaturePermanent());
|
grantedAbility.addTarget(new TargetCreaturePermanent());
|
||||||
effect = new GainAbilityAttachedEffect(grantedAbility, AttachmentType.AURA, Duration.WhileOnBattlefield);
|
effect = new GainAbilityAttachedEffect(grantedAbility, AttachmentType.AURA, Duration.WhileOnBattlefield);
|
||||||
effect.setText("and has \"{2}{R}: Target creature can't block this creature this turn");
|
effect.setText("and has \"{2}{R}: Target creature can't block this creature this turn.\"");
|
||||||
ability.addEffect(effect);
|
ability.addEffect(effect);
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,8 @@ public final class FeralInstinct extends CardImpl {
|
||||||
|
|
||||||
// Draw a card at the beginning of the next turn's upkeep.
|
// Draw a card at the beginning of the next turn's upkeep.
|
||||||
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
|
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
|
||||||
new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false));
|
new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false)
|
||||||
|
.concatBy("<br>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private FeralInstinct(final FeralInstinct card) {
|
private FeralInstinct(final FeralInstinct card) {
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,8 @@ public final class FeveredStrength extends CardImpl {
|
||||||
|
|
||||||
// Draw a card at the beginning of the next turn's upkeep.
|
// Draw a card at the beginning of the next turn's upkeep.
|
||||||
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
|
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
|
||||||
new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false));
|
new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false)
|
||||||
|
.concatBy("<br>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private FeveredStrength(final FeveredStrength card) {
|
private FeveredStrength(final FeveredStrength card) {
|
||||||
|
|
|
||||||
|
|
@ -28,12 +28,13 @@ public final class Foreshadow extends CardImpl {
|
||||||
|
|
||||||
// Choose a card name, then target opponent puts the top card of their library into their graveyard. If that card has the chosen name, you draw a card.
|
// Choose a card name, then target opponent puts the top card of their library into their graveyard. If that card has the chosen name, you draw a card.
|
||||||
this.getSpellAbility().addEffect(new ChooseACardNameEffect(ChooseACardNameEffect.TypeOfName.ALL));
|
this.getSpellAbility().addEffect(new ChooseACardNameEffect(ChooseACardNameEffect.TypeOfName.ALL));
|
||||||
this.getSpellAbility().addEffect(new ForeshadowEffect().concatBy("then"));
|
this.getSpellAbility().addEffect(new ForeshadowEffect().concatBy(", then"));
|
||||||
this.getSpellAbility().addTarget(new TargetOpponent());
|
this.getSpellAbility().addTarget(new TargetOpponent());
|
||||||
|
|
||||||
// Draw a card at the beginning of the next turn's upkeep.
|
// Draw a card at the beginning of the next turn's upkeep.
|
||||||
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
|
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
|
||||||
new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false));
|
new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false)
|
||||||
|
.concatBy("<br>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Foreshadow(final Foreshadow card) {
|
private Foreshadow(final Foreshadow card) {
|
||||||
|
|
@ -50,7 +51,7 @@ class ForeshadowEffect extends OneShotEffect {
|
||||||
|
|
||||||
ForeshadowEffect() {
|
ForeshadowEffect() {
|
||||||
super(Outcome.DrawCard);
|
super(Outcome.DrawCard);
|
||||||
this.staticText = "target opponent mills a card. If that card has the chosen name, you draw a card";
|
this.staticText = "target opponent mills a card. If a card with the chosen name was milled this way, you draw a card";
|
||||||
}
|
}
|
||||||
|
|
||||||
private ForeshadowEffect(final ForeshadowEffect effect) {
|
private ForeshadowEffect(final ForeshadowEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ public final class Frostling extends CardImpl {
|
||||||
this.power = new MageInt(1);
|
this.power = new MageInt(1);
|
||||||
this.toughness = new MageInt(1);
|
this.toughness = new MageInt(1);
|
||||||
// Sacrifice Frostling: Frostling deals 1 damage to target creature.
|
// Sacrifice Frostling: Frostling deals 1 damage to target creature.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new SacrificeSourceCost());
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1, "it"), new SacrificeSourceCost());
|
||||||
ability.addTarget(new TargetCreaturePermanent());
|
ability.addTarget(new TargetCreaturePermanent());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ public final class GhostLitRaider extends CardImpl {
|
||||||
ability.addTarget(new TargetCreaturePermanent());
|
ability.addTarget(new TargetCreaturePermanent());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
// Channel - {3}{R}, Discard Ghost-Lit Raider: Ghost-Lit Raider deals 4 damage to target creature.
|
// Channel - {3}{R}, Discard Ghost-Lit Raider: Ghost-Lit Raider deals 4 damage to target creature.
|
||||||
Ability ability2 = new ChannelAbility("{3}{R}", new DamageTargetEffect(4));
|
Ability ability2 = new ChannelAbility("{3}{R}", new DamageTargetEffect(4, "it"));
|
||||||
ability2.addTarget(new TargetCreaturePermanent());
|
ability2.addTarget(new TargetCreaturePermanent());
|
||||||
this.addAbility(ability2);
|
this.addAbility(ability2);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,7 @@ class GiftOfDoomEffect extends OneShotEffect {
|
||||||
|
|
||||||
GiftOfDoomEffect() {
|
GiftOfDoomEffect() {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
staticText = "attach it to a creature";
|
staticText = "you may attach it to a creature";
|
||||||
}
|
}
|
||||||
|
|
||||||
private GiftOfDoomEffect(final GiftOfDoomEffect effect) {
|
private GiftOfDoomEffect(final GiftOfDoomEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.g;
|
package mage.cards.g;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -25,7 +24,8 @@ public final class GloriousEnd extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of your next end step, you lose the game.
|
// At the beginning of your next end step, you lose the game.
|
||||||
getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
|
getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
|
||||||
new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new LoseGameSourceControllerEffect(), TargetController.YOU)));
|
new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new LoseGameSourceControllerEffect(), TargetController.YOU))
|
||||||
|
.concatBy("<br>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private GloriousEnd(final GloriousEnd card) {
|
private GloriousEnd(final GloriousEnd card) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.g;
|
package mage.cards.g;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -25,12 +24,11 @@ import mage.target.TargetPermanent;
|
||||||
*/
|
*/
|
||||||
public final class GoblinWizard extends CardImpl {
|
public final class GoblinWizard extends CardImpl {
|
||||||
|
|
||||||
private static final FilterPermanentCard filter = new FilterPermanentCard("Goblin");
|
private static final FilterPermanentCard filterCard = new FilterPermanentCard("a Goblin permanent card");
|
||||||
private static final FilterPermanent goblinPermanent = new FilterPermanent("Goblin");
|
private static final FilterPermanent filter2 = new FilterPermanent(SubType.GOBLIN, "Goblin");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(SubType.GOBLIN.getPredicate());
|
filterCard.add(SubType.GOBLIN.getPredicate());
|
||||||
goblinPermanent.add(SubType.GOBLIN.getPredicate());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public GoblinWizard(UUID ownerId, CardSetInfo setInfo) {
|
public GoblinWizard(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
|
@ -45,13 +43,13 @@ public final class GoblinWizard extends CardImpl {
|
||||||
|
|
||||||
// {tap}: You may put a Goblin permanent card from your hand onto the battlefield.
|
// {tap}: You may put a Goblin permanent card from your hand onto the battlefield.
|
||||||
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
||||||
new PutCardFromHandOntoBattlefieldEffect(filter),
|
new PutCardFromHandOntoBattlefieldEffect(filterCard),
|
||||||
new TapSourceCost()));
|
new TapSourceCost()));
|
||||||
|
|
||||||
// {R}: Target Goblin gains protection from white until end of turn.
|
// {R}: Target Goblin gains protection from white until end of turn.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
||||||
new GainAbilityTargetEffect(ProtectionAbility.from(ObjectColor.WHITE), Duration.EndOfTurn), new ManaCostsImpl<>("{R}"));
|
new GainAbilityTargetEffect(ProtectionAbility.from(ObjectColor.WHITE), Duration.EndOfTurn), new ManaCostsImpl<>("{R}"));
|
||||||
Target target = new TargetPermanent(goblinPermanent);
|
Target target = new TargetPermanent(filter2);
|
||||||
ability.addTarget(target);
|
ability.addTarget(target);
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.g;
|
package mage.cards.g;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -35,7 +34,8 @@ public final class GorillaWarCry extends CardImpl {
|
||||||
this.getSpellAbility().addEffect(effect);
|
this.getSpellAbility().addEffect(effect);
|
||||||
|
|
||||||
// Draw a card at the beginning of the next turn's upkeep.
|
// Draw a card at the beginning of the next turn's upkeep.
|
||||||
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false));
|
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(
|
||||||
|
new DrawCardSourceControllerEffect(1)), false).concatBy("<br>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private GorillaWarCry(final GorillaWarCry card) {
|
private GorillaWarCry(final GorillaWarCry card) {
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.*;
|
import mage.constants.*;
|
||||||
import mage.filter.FilterPermanent;
|
import mage.filter.FilterPermanent;
|
||||||
|
import mage.filter.StaticFilters;
|
||||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||||
import mage.filter.common.FilterCreaturePermanent;
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
import mage.filter.predicate.mageobject.ColorPredicate;
|
import mage.filter.predicate.mageobject.ColorPredicate;
|
||||||
|
|
@ -32,11 +33,12 @@ import java.util.UUID;
|
||||||
public final class GrandArchitect extends CardImpl {
|
public final class GrandArchitect extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCreaturePermanent boostFilter = new FilterCreaturePermanent("blue creatures");
|
private static final FilterCreaturePermanent boostFilter = new FilterCreaturePermanent("blue creatures");
|
||||||
private static final FilterCreaturePermanent targetFilter = new FilterCreaturePermanent("artifact creature");
|
private static final FilterControlledCreaturePermanent tapFilter = new FilterControlledCreaturePermanent("untapped blue creature you control");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
boostFilter.add(new ColorPredicate(ObjectColor.BLUE));
|
boostFilter.add(new ColorPredicate(ObjectColor.BLUE));
|
||||||
targetFilter.add(CardType.ARTIFACT.getPredicate());
|
tapFilter.add(new ColorPredicate(ObjectColor.BLUE));
|
||||||
|
tapFilter.add(TappedPredicate.UNTAPPED);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GrandArchitect(UUID ownerId, CardSetInfo setInfo) {
|
public GrandArchitect(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
|
@ -52,14 +54,11 @@ public final class GrandArchitect extends CardImpl {
|
||||||
|
|
||||||
// {U}: Target artifact creature becomes blue until end of turn.
|
// {U}: Target artifact creature becomes blue until end of turn.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GrandArchitectEffect(), new ManaCostsImpl<>("{U}"));
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GrandArchitectEffect(), new ManaCostsImpl<>("{U}"));
|
||||||
ability.addTarget(new TargetPermanent(targetFilter));
|
ability.addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_CREATURE));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
||||||
// Tap an untapped blue creature you control: Add {C}{C}. Spend this mana only to cast artifact spells or activate abilities of artifacts.
|
// Tap an untapped blue creature you control: Add {C}{C}. Spend this mana only to cast artifact spells or activate abilities of artifacts.
|
||||||
FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped blue creature");
|
this.addAbility(new GrandArchitectManaAbility(tapFilter));
|
||||||
filter.add(new ColorPredicate(ObjectColor.BLUE));
|
|
||||||
filter.add(TappedPredicate.UNTAPPED);
|
|
||||||
this.addAbility(new GrandArchitectManaAbility(filter));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private GrandArchitect(final GrandArchitect card) {
|
private GrandArchitect(final GrandArchitect card) {
|
||||||
|
|
@ -75,7 +74,7 @@ public final class GrandArchitect extends CardImpl {
|
||||||
|
|
||||||
class GrandArchitectEffect extends ContinuousEffectImpl {
|
class GrandArchitectEffect extends ContinuousEffectImpl {
|
||||||
|
|
||||||
public GrandArchitectEffect() {
|
GrandArchitectEffect() {
|
||||||
super(Duration.EndOfTurn, Layer.ColorChangingEffects_5, SubLayer.NA, Outcome.Detriment);
|
super(Duration.EndOfTurn, Layer.ColorChangingEffects_5, SubLayer.NA, Outcome.Detriment);
|
||||||
staticText = "Target artifact creature becomes blue until end of turn";
|
staticText = "Target artifact creature becomes blue until end of turn";
|
||||||
}
|
}
|
||||||
|
|
@ -129,7 +128,7 @@ class GrandArchitectManaAbility extends ActivatedManaAbilityImpl {
|
||||||
|
|
||||||
class GrandArchitectConditionalMana extends ConditionalMana {
|
class GrandArchitectConditionalMana extends ConditionalMana {
|
||||||
|
|
||||||
public GrandArchitectConditionalMana() {
|
GrandArchitectConditionalMana() {
|
||||||
super(Mana.ColorlessMana(2));
|
super(Mana.ColorlessMana(2));
|
||||||
staticText = "Spend this mana only to cast artifact spells or activate abilities of artifacts";
|
staticText = "Spend this mana only to cast artifact spells or activate abilities of artifacts";
|
||||||
addCondition(new GrandArchitectManaCondition());
|
addCondition(new GrandArchitectManaCondition());
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.g;
|
package mage.cards.g;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
|
|
@ -13,7 +12,7 @@ import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.common.FilterArtifactCard;
|
||||||
import mage.target.common.TargetCardInGraveyard;
|
import mage.target.common.TargetCardInGraveyard;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -23,6 +22,8 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class GraveRobbers extends CardImpl {
|
public final class GraveRobbers extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterArtifactCard filter = new FilterArtifactCard("artifact card from a graveyard");
|
||||||
|
|
||||||
public GraveRobbers(UUID ownerId, CardSetInfo setInfo) {
|
public GraveRobbers(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{B}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{B}");
|
||||||
this.subtype.add(SubType.HUMAN);
|
this.subtype.add(SubType.HUMAN);
|
||||||
|
|
@ -33,7 +34,7 @@ public final class GraveRobbers extends CardImpl {
|
||||||
// {B}, {tap}: Exile target artifact card from a graveyard. You gain 2 life.
|
// {B}, {tap}: Exile target artifact card from a graveyard. You gain 2 life.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new ManaCostsImpl<>("{B}"));
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new ManaCostsImpl<>("{B}"));
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD));
|
ability.addTarget(new TargetCardInGraveyard(filter));
|
||||||
ability.addEffect(new GainLifeEffect(2));
|
ability.addEffect(new GainLifeEffect(2));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.g;
|
package mage.cards.g;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -26,7 +25,8 @@ public final class Gravebind extends CardImpl {
|
||||||
getSpellAbility().addTarget(new TargetCreaturePermanent());
|
getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||||
|
|
||||||
// Draw a card at the beginning of the next turn's upkeep.
|
// Draw a card at the beginning of the next turn's upkeep.
|
||||||
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false));
|
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(
|
||||||
|
new DrawCardSourceControllerEffect(1)), false).concatBy("<br>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Gravebind(final Gravebind card) {
|
private Gravebind(final Gravebind card) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.g;
|
package mage.cards.g;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -23,7 +22,7 @@ public final class GripOfTheRoil extends CardImpl {
|
||||||
// Tap target creature. It doesn't untap during its controller's next untap step.
|
// Tap target creature. It doesn't untap during its controller's next untap step.
|
||||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||||
this.getSpellAbility().addEffect(new TapTargetEffect());
|
this.getSpellAbility().addEffect(new TapTargetEffect());
|
||||||
this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect());
|
this.getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect("It"));
|
||||||
|
|
||||||
// Draw a card.
|
// Draw a card.
|
||||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));
|
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));
|
||||||
|
|
|
||||||
|
|
@ -46,14 +46,14 @@ public final class GruulSpellbreaker extends CardImpl {
|
||||||
new GainAbilityControllerEffect(
|
new GainAbilityControllerEffect(
|
||||||
HexproofAbility.getInstance(),
|
HexproofAbility.getInstance(),
|
||||||
Duration.WhileOnBattlefield
|
Duration.WhileOnBattlefield
|
||||||
), MyTurnCondition.instance, "As long as it's your turn, you and"
|
), MyTurnCondition.instance, "As long as it's your turn, you"
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
ability.addEffect(new ConditionalContinuousEffect(
|
ability.addEffect(new ConditionalContinuousEffect(
|
||||||
new GainAbilitySourceEffect(
|
new GainAbilitySourceEffect(
|
||||||
HexproofAbility.getInstance(),
|
HexproofAbility.getInstance(),
|
||||||
Duration.WhileOnBattlefield
|
Duration.WhileOnBattlefield
|
||||||
), MyTurnCondition.instance, "{this} have hexproof."
|
), MyTurnCondition.instance, "and {this} have hexproof."
|
||||||
));
|
));
|
||||||
ability.addHint(MyTurnHint.instance);
|
ability.addHint(MyTurnHint.instance);
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ class HarvestHandReturnTransformedEffect extends OneShotEffect {
|
||||||
|
|
||||||
HarvestHandReturnTransformedEffect() {
|
HarvestHandReturnTransformedEffect() {
|
||||||
super(Outcome.PutCardInPlay);
|
super(Outcome.PutCardInPlay);
|
||||||
this.staticText = "Return {this} to the battlefield transformed under your control";
|
this.staticText = "return it to the battlefield transformed under your control";
|
||||||
}
|
}
|
||||||
|
|
||||||
private HarvestHandReturnTransformedEffect(final HarvestHandReturnTransformedEffect effect) {
|
private HarvestHandReturnTransformedEffect(final HarvestHandReturnTransformedEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@ import mage.target.common.TargetLandPermanent;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author fireshoes
|
* @author fireshoes
|
||||||
*/
|
*/
|
||||||
|
|
@ -27,7 +26,6 @@ public final class Icequake extends CardImpl {
|
||||||
this.getSpellAbility().addEffect(new IcequakeEffect());
|
this.getSpellAbility().addEffect(new IcequakeEffect());
|
||||||
this.getSpellAbility().addTarget(new TargetLandPermanent());
|
this.getSpellAbility().addTarget(new TargetLandPermanent());
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Icequake(final Icequake card) {
|
private Icequake(final Icequake card) {
|
||||||
|
|
@ -42,9 +40,9 @@ public final class Icequake extends CardImpl {
|
||||||
|
|
||||||
class IcequakeEffect extends OneShotEffect {
|
class IcequakeEffect extends OneShotEffect {
|
||||||
|
|
||||||
public IcequakeEffect() {
|
IcequakeEffect() {
|
||||||
super(Outcome.Damage);
|
super(Outcome.Damage);
|
||||||
this.staticText = "Destroy target land.<br>If that land was a snow land, {this} deals 1 damage to that land's controller.";
|
this.staticText = "Destroy target land. If that land was a snow land, {this} deals 1 damage to that land's controller.";
|
||||||
}
|
}
|
||||||
|
|
||||||
private IcequakeEffect(final IcequakeEffect effect) {
|
private IcequakeEffect(final IcequakeEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.filter.FilterPermanent;
|
import mage.filter.FilterPermanent;
|
||||||
import mage.filter.StaticFilters;
|
|
||||||
import mage.filter.common.FilterCreaturePermanent;
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
import mage.filter.predicate.permanent.TokenPredicate;
|
import mage.filter.predicate.permanent.TokenPredicate;
|
||||||
|
|
||||||
|
|
@ -16,11 +15,17 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class IncandescentAria extends CardImpl {
|
public final class IncandescentAria extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterPermanent filter = new FilterCreaturePermanent("nontoken creature");
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter.add(TokenPredicate.FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
public IncandescentAria(UUID ownerId, CardSetInfo setInfo) {
|
public IncandescentAria(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{R}{G}{W}");
|
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{R}{G}{W}");
|
||||||
|
|
||||||
// Incandescent Aria deals 3 damage to each nontoken creature.
|
// Incandescent Aria deals 3 damage to each nontoken creature.
|
||||||
this.getSpellAbility().addEffect(new DamageAllEffect(3, StaticFilters.FILTER_CREATURE_NON_TOKEN));
|
this.getSpellAbility().addEffect(new DamageAllEffect(3, filter));
|
||||||
}
|
}
|
||||||
|
|
||||||
private IncandescentAria(final IncandescentAria card) {
|
private IncandescentAria(final IncandescentAria card) {
|
||||||
|
|
|
||||||
|
|
@ -56,9 +56,9 @@ public final class InsultInjury extends SplitCard {
|
||||||
|
|
||||||
class InsultDoubleDamageEffect extends ReplacementEffectImpl {
|
class InsultDoubleDamageEffect extends ReplacementEffectImpl {
|
||||||
|
|
||||||
public InsultDoubleDamageEffect() {
|
InsultDoubleDamageEffect() {
|
||||||
super(Duration.EndOfTurn, Outcome.Damage);
|
super(Duration.EndOfTurn, Outcome.Damage);
|
||||||
staticText = "If a source you control would deal damage this turn, it deals double that damage to that permanent or player instead.";
|
staticText = "If a source you control would deal damage this turn, it deals double that damage instead.";
|
||||||
}
|
}
|
||||||
|
|
||||||
private InsultDoubleDamageEffect(final InsultDoubleDamageEffect effect) {
|
private InsultDoubleDamageEffect(final InsultDoubleDamageEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ import java.util.UUID;
|
||||||
public final class KjeldoranFrostbeast extends CardImpl {
|
public final class KjeldoranFrostbeast extends CardImpl {
|
||||||
|
|
||||||
private static final FilterPermanent filter
|
private static final FilterPermanent filter
|
||||||
= new FilterCreaturePermanent("creatures blocking or blocked by it");
|
= new FilterCreaturePermanent("creatures blocking or blocked by {this}");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(BlockingOrBlockedBySourcePredicate.EITHER);
|
filter.add(BlockingOrBlockedBySourcePredicate.EITHER);
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ public final class KuonOgreAscendant extends CardImpl {
|
||||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
||||||
Zone.BATTLEFIELD,
|
Zone.BATTLEFIELD,
|
||||||
new FlipSourceEffect(new KuonsEssenceToken()),
|
new FlipSourceEffect(new KuonsEssenceToken()),
|
||||||
TargetController.ANY,
|
TargetController.NEXT,
|
||||||
KuonOgreAscendantCondition.instance, false));
|
KuonOgreAscendantCondition.instance, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ public final class MaelstromDjinn extends CardImpl {
|
||||||
|
|
||||||
// When Maelstrom Djinn is turned face up, put two time counters on it and it gains vanishing.
|
// When Maelstrom Djinn is turned face up, put two time counters on it and it gains vanishing.
|
||||||
Ability ability = new TurnedFaceUpSourceTriggeredAbility(
|
Ability ability = new TurnedFaceUpSourceTriggeredAbility(
|
||||||
new AddCountersSourceEffect(CounterType.TIME.createInstance(2))
|
new AddCountersSourceEffect(CounterType.TIME.createInstance(2)).setText("put two time counters on it")
|
||||||
);
|
);
|
||||||
ability.addEffect(new GainAbilitySourceEffect(
|
ability.addEffect(new GainAbilitySourceEffect(
|
||||||
new VanishingAbility(0), Duration.WhileOnBattlefield
|
new VanishingAbility(0), Duration.WhileOnBattlefield
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.m;
|
package mage.cards.m;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -24,7 +23,7 @@ public final class Metrognome extends CardImpl {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}");
|
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}");
|
||||||
|
|
||||||
// When a spell or ability an opponent controls causes you to discard Metrognome, create four 1/1 colorless Gnome artifact creature tokens.
|
// When a spell or ability an opponent controls causes you to discard Metrognome, create four 1/1 colorless Gnome artifact creature tokens.
|
||||||
this.addAbility(new DiscardedByOpponentTriggeredAbility(new CreateTokenEffect(new GnomeToken(), 4)));
|
this.addAbility(new DiscardedByOpponentTriggeredAbility(new CreateTokenEffect(new GnomeToken(), 4), true));
|
||||||
|
|
||||||
// {4}, {tap}: Create a 1/1 colorless Gnome artifact creature token.
|
// {4}, {tap}: Create a 1/1 colorless Gnome artifact creature token.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new GnomeToken()), new ManaCostsImpl<>("{4}"));
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new GnomeToken()), new ManaCostsImpl<>("{4}"));
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,8 @@ import mage.target.common.TargetCardInGraveyard;
|
||||||
*/
|
*/
|
||||||
public final class MyrWelder extends CardImpl {
|
public final class MyrWelder extends CardImpl {
|
||||||
|
|
||||||
|
private static final FilterArtifactCard filter = new FilterArtifactCard("artifact card from a graveyard");
|
||||||
|
|
||||||
public MyrWelder(UUID ownerId, CardSetInfo setInfo) {
|
public MyrWelder(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}");
|
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}");
|
||||||
this.subtype.add(SubType.MYR);
|
this.subtype.add(SubType.MYR);
|
||||||
|
|
@ -32,7 +34,7 @@ public final class MyrWelder extends CardImpl {
|
||||||
|
|
||||||
// Imprint - {tap}: Exile target artifact card from a graveyard
|
// Imprint - {tap}: Exile target artifact card from a graveyard
|
||||||
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MyrWelderEffect(), new TapSourceCost());
|
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new MyrWelderEffect(), new TapSourceCost());
|
||||||
ability.addTarget(new TargetCardInGraveyard(new FilterArtifactCard("artifact card from a graveyard")));
|
ability.addTarget(new TargetCardInGraveyard(filter));
|
||||||
this.addAbility(ability.setAbilityWord(AbilityWord.IMPRINT));
|
this.addAbility(ability.setAbilityWord(AbilityWord.IMPRINT));
|
||||||
|
|
||||||
// Myr Welder has all activated abilities of all cards exiled with it
|
// Myr Welder has all activated abilities of all cards exiled with it
|
||||||
|
|
@ -53,7 +55,7 @@ public final class MyrWelder extends CardImpl {
|
||||||
|
|
||||||
class MyrWelderEffect extends OneShotEffect {
|
class MyrWelderEffect extends OneShotEffect {
|
||||||
|
|
||||||
public MyrWelderEffect() {
|
MyrWelderEffect() {
|
||||||
super(Outcome.Exile);
|
super(Outcome.Exile);
|
||||||
staticText = "Exile target artifact card from a graveyard";
|
staticText = "Exile target artifact card from a graveyard";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.n;
|
package mage.cards.n;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -49,9 +48,10 @@ public final class NissasJudgment extends CardImpl {
|
||||||
|
|
||||||
class NissasJudgmentEffect extends OneShotEffect {
|
class NissasJudgmentEffect extends OneShotEffect {
|
||||||
|
|
||||||
public NissasJudgmentEffect() {
|
NissasJudgmentEffect() {
|
||||||
super(Outcome.Damage);
|
super(Outcome.Damage);
|
||||||
this.staticText = "Choose up to one target creature an opponent controls. Each creature you control with a +1/+1 counter on it deals damage equal to its power to that creature";
|
this.staticText = "Choose up to one target creature an opponent controls. Each creature you control with a +1/+1 counter on it deals damage equal to its power to that creature";
|
||||||
|
this.concatPrefix = "<br>";
|
||||||
}
|
}
|
||||||
|
|
||||||
private NissasJudgmentEffect(final NissasJudgmentEffect effect) {
|
private NissasJudgmentEffect(final NissasJudgmentEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ import mage.target.common.TargetControlledCreaturePermanent;
|
||||||
*/
|
*/
|
||||||
public final class ONaginata extends CardImpl {
|
public final class ONaginata extends CardImpl {
|
||||||
|
|
||||||
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creature you control with 3 or more power ");
|
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creature with power 3 or greater");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(new PowerPredicate(ComparisonType.MORE_THAN, 2));
|
filter.add(new PowerPredicate(ComparisonType.MORE_THAN, 2));
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ public final class OngoingInvestigation extends CardImpl {
|
||||||
this.addAbility(new DealCombatDamageControlledTriggeredAbility(new InvestigateEffect()));
|
this.addAbility(new DealCombatDamageControlledTriggeredAbility(new InvestigateEffect()));
|
||||||
|
|
||||||
// {1}{G}, Exile a creature card from your graveyard: Investigate. You gain 2 life.
|
// {1}{G}, Exile a creature card from your graveyard: Investigate. You gain 2 life.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new InvestigateEffect(), new ManaCostsImpl<>("{1}{G}"));
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new InvestigateEffect().setText("investigate"), new ManaCostsImpl<>("{1}{G}"));
|
||||||
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(new FilterCreatureCard("a creature card from your graveyard"))));
|
ability.addCost(new ExileFromGraveCost(new TargetCardInYourGraveyard(new FilterCreatureCard("a creature card from your graveyard"))));
|
||||||
ability.addEffect(new GainLifeEffect(2));
|
ability.addEffect(new GainLifeEffect(2));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,8 @@ public final class Portent extends CardImpl {
|
||||||
this.getSpellAbility().addEffect(new PortentEffect());
|
this.getSpellAbility().addEffect(new PortentEffect());
|
||||||
this.getSpellAbility().addTarget(new TargetPlayer());
|
this.getSpellAbility().addTarget(new TargetPlayer());
|
||||||
// Draw a card at the beginning of the next turn's upkeep.
|
// Draw a card at the beginning of the next turn's upkeep.
|
||||||
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1)), false));
|
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(
|
||||||
|
new DrawCardSourceControllerEffect(1)), false).concatBy("<br>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Portent(final Portent card) {
|
private Portent(final Portent card) {
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
|
|
||||||
package mage.cards.p;
|
package mage.cards.p;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import mage.abilities.effects.Effect;
|
|
||||||
import mage.abilities.effects.common.UntapTargetEffect;
|
import mage.abilities.effects.common.UntapTargetEffect;
|
||||||
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
||||||
import mage.abilities.effects.common.continuous.GainControlTargetEffect;
|
import mage.abilities.effects.common.continuous.GainControlTargetEffect;
|
||||||
|
|
@ -31,7 +29,7 @@ public final class PressIntoService extends CardImpl {
|
||||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); // First target is used by Support
|
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); // First target is used by Support
|
||||||
|
|
||||||
this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.EndOfTurn)
|
this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.EndOfTurn)
|
||||||
.setText("Gain control of target creature until end of turn")
|
.setText("Gain control of target creature until end of turn").concatBy("<br>")
|
||||||
.setTargetPointer(new SecondTargetPointer())
|
.setTargetPointer(new SecondTargetPointer())
|
||||||
);
|
);
|
||||||
this.getSpellAbility().addEffect(new UntapTargetEffect()
|
this.getSpellAbility().addEffect(new UntapTargetEffect()
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.q;
|
package mage.cards.q;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -31,7 +30,8 @@ public final class Quagnoth extends CardImpl {
|
||||||
this.addAbility(ShroudAbility.getInstance());
|
this.addAbility(ShroudAbility.getInstance());
|
||||||
|
|
||||||
// When a spell or ability an opponent controls causes you to discard Quagnoth, return it to your hand.
|
// When a spell or ability an opponent controls causes you to discard Quagnoth, return it to your hand.
|
||||||
this.addAbility(new DiscardedByOpponentTriggeredAbility(new ReturnToHandSourceEffect()));
|
this.addAbility(new DiscardedByOpponentTriggeredAbility(new ReturnToHandSourceEffect()
|
||||||
|
.setText("return it to your hand"), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Quagnoth(final Quagnoth card) {
|
private Quagnoth(final Quagnoth card) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.q;
|
package mage.cards.q;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -27,7 +26,8 @@ public final class QuicksilverGargantuan extends CardImpl {
|
||||||
this.toughness = new MageInt(7);
|
this.toughness = new MageInt(7);
|
||||||
|
|
||||||
Ability ability = new EntersBattlefieldAbility(new CopyPermanentEffect(new QuicksilverGargantuanCopyApplier()),
|
Ability ability = new EntersBattlefieldAbility(new CopyPermanentEffect(new QuicksilverGargantuanCopyApplier()),
|
||||||
"You may have {this} enter the battlefield as a copy of any creature on the battlefield, except it's 7/7");
|
true, null, null,
|
||||||
|
"as a copy of any creature on the battlefield, except it's 7/7");
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -48,9 +48,9 @@ public final class RagsRiches extends SplitCard {
|
||||||
|
|
||||||
class RichesEffect extends OneShotEffect {
|
class RichesEffect extends OneShotEffect {
|
||||||
|
|
||||||
public RichesEffect() {
|
RichesEffect() {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
this.staticText = "Each opponent chooses a creature they control. You gain control of each of those creatures.";
|
this.staticText = "Each opponent chooses a creature they control. You gain control of those creatures.";
|
||||||
}
|
}
|
||||||
|
|
||||||
private RichesEffect(final RichesEffect effect) {
|
private RichesEffect(final RichesEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.r;
|
package mage.cards.r;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -33,8 +32,7 @@ public final class RiptideSurvivor extends CardImpl {
|
||||||
this.addAbility(new MorphAbility(this, new ManaCostsImpl<>("{1}{U}{U}")));
|
this.addAbility(new MorphAbility(this, new ManaCostsImpl<>("{1}{U}{U}")));
|
||||||
// When Riptide Survivor is turned face up, discard two cards, then draw three cards.
|
// When Riptide Survivor is turned face up, discard two cards, then draw three cards.
|
||||||
Ability ability = new TurnedFaceUpSourceTriggeredAbility(new DiscardControllerEffect(2));
|
Ability ability = new TurnedFaceUpSourceTriggeredAbility(new DiscardControllerEffect(2));
|
||||||
Effect effect = new DrawCardSourceControllerEffect(3);
|
Effect effect = new DrawCardSourceControllerEffect(3).concatBy(", then");
|
||||||
effect.setText("then draw three cards");
|
|
||||||
ability.addEffect(effect);
|
ability.addEffect(effect);
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
@ -48,4 +46,3 @@ public final class RiptideSurvivor extends CardImpl {
|
||||||
return new RiptideSurvivor(this);
|
return new RiptideSurvivor(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ public final class RocketLauncher extends CardImpl {
|
||||||
new GenericManaCost(2), RocketLauncherCondition.instance);
|
new GenericManaCost(2), RocketLauncherCondition.instance);
|
||||||
ability.addTarget(new TargetAnyTarget());
|
ability.addTarget(new TargetAnyTarget());
|
||||||
ability.addEffect(new CreateDelayedTriggeredAbilityEffect(
|
ability.addEffect(new CreateDelayedTriggeredAbilityEffect(
|
||||||
new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new DestroySourceEffect(true))
|
new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new DestroySourceEffect())
|
||||||
).setText("destroy {this} at the beginning of the next end step"));
|
).setText("destroy {this} at the beginning of the next end step"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ public final class SearingBlood extends CardImpl {
|
||||||
this.getSpellAbility().addEffect(new DamageTargetEffect(2));
|
this.getSpellAbility().addEffect(new DamageTargetEffect(2));
|
||||||
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
|
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
|
||||||
new WhenTargetDiesDelayedTriggeredAbility(
|
new WhenTargetDiesDelayedTriggeredAbility(
|
||||||
new DamageTargetEffect(3, true, "that creature's controller"),
|
new DamageTargetEffect(3, true, "the creature's controller"),
|
||||||
SetTargetPointer.PLAYER
|
SetTargetPointer.PLAYER
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.s;
|
package mage.cards.s;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -40,7 +39,7 @@ public final class ShadowGuildmage extends CardImpl {
|
||||||
// {R}, {tap}: Shadow Guildmage deals 1 damage to any target and 1 damage to you.
|
// {R}, {tap}: Shadow Guildmage deals 1 damage to any target and 1 damage to you.
|
||||||
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl<>("{R}"));
|
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl<>("{R}"));
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addEffect(new DamageControllerEffect(1));
|
ability.addEffect(new DamageControllerEffect(1).setText("and 1 damage to you"));
|
||||||
ability.addTarget(new TargetAnyTarget());
|
ability.addTarget(new TargetAnyTarget());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ public final class SirenOfTheSilentSong extends CardImpl {
|
||||||
// <i>Inspired</i> — Whenever Siren of the Silent Song becomes untapped, each opponent discards a card, then puts the top card of their library into their graveyard.
|
// <i>Inspired</i> — Whenever Siren of the Silent Song becomes untapped, each opponent discards a card, then puts the top card of their library into their graveyard.
|
||||||
Ability ability = new InspiredAbility(new DiscardEachPlayerEffect(TargetController.OPPONENT));
|
Ability ability = new InspiredAbility(new DiscardEachPlayerEffect(TargetController.OPPONENT));
|
||||||
Effect effect = new MillCardsEachPlayerEffect(1, TargetController.OPPONENT);
|
Effect effect = new MillCardsEachPlayerEffect(1, TargetController.OPPONENT);
|
||||||
effect.setText(", then mills a card");
|
effect.setText(", then each opponent mills a card");
|
||||||
ability.addEffect(effect);
|
ability.addEffect(effect);
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
@ -13,9 +12,10 @@ 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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|
@ -27,12 +27,14 @@ public final class Skinwing extends CardImpl {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{4}");
|
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{4}");
|
||||||
this.subtype.add(SubType.EQUIPMENT);
|
this.subtype.add(SubType.EQUIPMENT);
|
||||||
|
|
||||||
// Living Weapom
|
// Living weapon
|
||||||
this.addAbility(new LivingWeaponAbility());
|
this.addAbility(new LivingWeaponAbility());
|
||||||
|
|
||||||
// Equipped creature gets +2/+2 and has flying
|
// Equipped creature gets +2/+2 and has flying
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(2, 2)));
|
Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(2, 2));
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.EQUIPMENT)));
|
ability.addEffect(new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.EQUIPMENT)
|
||||||
|
.setText("and has flying"));
|
||||||
|
this.addAbility(ability);
|
||||||
|
|
||||||
// Equip {6}
|
// Equip {6}
|
||||||
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(6), false));
|
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(6), false));
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ class SleeperAgentChangeControlEffect extends ContinuousEffectImpl {
|
||||||
|
|
||||||
public SleeperAgentChangeControlEffect() {
|
public SleeperAgentChangeControlEffect() {
|
||||||
super(Duration.Custom, Layer.ControlChangingEffects_2, SubLayer.NA, Outcome.GainControl);
|
super(Duration.Custom, Layer.ControlChangingEffects_2, SubLayer.NA, Outcome.GainControl);
|
||||||
staticText = "target opponent gains control of {this}";
|
staticText = "target opponent gains control of it";
|
||||||
}
|
}
|
||||||
|
|
||||||
private SleeperAgentChangeControlEffect(final SleeperAgentChangeControlEffect effect) {
|
private SleeperAgentChangeControlEffect(final SleeperAgentChangeControlEffect effect) {
|
||||||
|
|
@ -79,5 +79,3 @@ class SleeperAgentChangeControlEffect extends ContinuousEffectImpl {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.s;
|
package mage.cards.s;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -32,7 +31,8 @@ public final class Solfatara extends CardImpl {
|
||||||
|
|
||||||
// Draw a card at the beginning of the next turn's upkeep.
|
// Draw a card at the beginning of the next turn's upkeep.
|
||||||
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
|
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(
|
||||||
new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false));
|
new AtTheBeginOfNextUpkeepDelayedTriggeredAbility(new DrawCardSourceControllerEffect(1), Duration.OneUse), false)
|
||||||
|
.concatBy("<br>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Solfatara(final Solfatara card) {
|
private Solfatara(final Solfatara card) {
|
||||||
|
|
@ -47,9 +47,9 @@ public final class Solfatara extends CardImpl {
|
||||||
|
|
||||||
class SolfataraEffect extends ContinuousRuleModifyingEffectImpl {
|
class SolfataraEffect extends ContinuousRuleModifyingEffectImpl {
|
||||||
|
|
||||||
public SolfataraEffect() {
|
SolfataraEffect() {
|
||||||
super(Duration.EndOfTurn, Outcome.Detriment);
|
super(Duration.EndOfTurn, Outcome.Detriment);
|
||||||
staticText = "Target player can't play land cards this turn";
|
staticText = "Target player can't play lands this turn";
|
||||||
}
|
}
|
||||||
|
|
||||||
private SolfataraEffect(final SolfataraEffect effect) {
|
private SolfataraEffect(final SolfataraEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.s;
|
package mage.cards.s;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -42,7 +41,8 @@ public final class StoneHavenOutfitter extends CardImpl {
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, filter, false)));
|
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostAllEffect(1, 1, Duration.WhileOnBattlefield, filter, false)));
|
||||||
|
|
||||||
// Whenever an equipped creature you control dies, draw a card.
|
// Whenever an equipped creature you control dies, draw a card.
|
||||||
this.addAbility(new DiesCreatureTriggeredAbility(new DrawCardSourceControllerEffect(1), false, filter));
|
this.addAbility(new DiesCreatureTriggeredAbility(new DrawCardSourceControllerEffect(1), false, filter)
|
||||||
|
.setTriggerPhrase("Whenever an equipped creature you control dies, "));
|
||||||
}
|
}
|
||||||
|
|
||||||
private StoneHavenOutfitter(final StoneHavenOutfitter card) {
|
private StoneHavenOutfitter(final StoneHavenOutfitter card) {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
|
|
||||||
package mage.cards.s;
|
package mage.cards.s;
|
||||||
|
|
||||||
import java.util.UUID;
|
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;
|
||||||
|
|
@ -15,7 +16,6 @@ import mage.constants.AttachmentType;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.Outcome;
|
import mage.constants.Outcome;
|
||||||
import mage.constants.Zone;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|
@ -31,8 +31,10 @@ public final class Strandwalker extends CardImpl {
|
||||||
this.addAbility(new LivingWeaponAbility());
|
this.addAbility(new LivingWeaponAbility());
|
||||||
|
|
||||||
// Equipped creature gets +2/+4 and has reach.
|
// Equipped creature gets +2/+4 and has reach.
|
||||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(2, 4)));
|
Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(2, 4));
|
||||||
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);
|
||||||
|
|
||||||
// Equip {4}
|
// Equip {4}
|
||||||
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(4), false));
|
this.addAbility(new EquipAbility(Outcome.BoostCreature, new GenericManaCost(4), false));
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ class SummaryJudgementEffect extends OneShotEffect {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
staticText = "{this} deals 3 damage to target tapped creature." +
|
staticText = "{this} deals 3 damage to target tapped creature." +
|
||||||
"<br><i>Addendum</i> — If you cast this spell during your main phase, " +
|
"<br><i>Addendum</i> — If you cast this spell during your main phase, " +
|
||||||
"it deals 5 damage.";
|
"it deals 5 damage instead.";
|
||||||
}
|
}
|
||||||
|
|
||||||
private SummaryJudgementEffect(final SummaryJudgementEffect effect) {
|
private SummaryJudgementEffect(final SummaryJudgementEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ public final class SurviveTheNight extends CardImpl {
|
||||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||||
|
|
||||||
// Investigate.
|
// Investigate.
|
||||||
this.getSpellAbility().addEffect(new InvestigateEffect());
|
this.getSpellAbility().addEffect(new InvestigateEffect().concatBy("<br>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private SurviveTheNight(final SurviveTheNight card) {
|
private SurviveTheNight(final SurviveTheNight card) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.s;
|
package mage.cards.s;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -22,7 +21,7 @@ public final class SymbolOfUnsummoning extends CardImpl {
|
||||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||||
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
|
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
|
||||||
// Draw a card.
|
// Draw a card.
|
||||||
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1));
|
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy("<br>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private SymbolOfUnsummoning(final SymbolOfUnsummoning card) {
|
private SymbolOfUnsummoning(final SymbolOfUnsummoning card) {
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ import mage.watchers.common.AttackedThisTurnWatcher;
|
||||||
public final class TaigamOjutaiMaster extends CardImpl {
|
public final class TaigamOjutaiMaster extends CardImpl {
|
||||||
|
|
||||||
private static final String effectText = "Whenever you cast an instant or sorcery spell from your hand, if {this} attacked this turn, that spell gains rebound.";
|
private static final String effectText = "Whenever you cast an instant or sorcery spell from your hand, if {this} attacked this turn, that spell gains rebound.";
|
||||||
private static final FilterSpell filter = new FilterSpell("Instant, Sorcery, and Dragon spells you control");
|
private static final FilterSpell filter = new FilterSpell("Instant, sorcery, and Dragon spells you control");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(
|
filter.add(
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ public final class TheHauntOfHightower extends CardImpl {
|
||||||
// Whenever The Haunt of Hightower attacks, defending player discards a card.
|
// Whenever The Haunt of Hightower attacks, defending player discards a card.
|
||||||
this.addAbility(new AttacksTriggeredAbility(
|
this.addAbility(new AttacksTriggeredAbility(
|
||||||
new DiscardTargetEffect(1), false,
|
new DiscardTargetEffect(1), false,
|
||||||
"Whenever {this} attacks, defending player discards a card", SetTargetPointer.PLAYER
|
"Whenever {this} attacks, defending player discards a card.", SetTargetPointer.PLAYER
|
||||||
));
|
));
|
||||||
|
|
||||||
// Whenever a card is put into an opponent's graveyard from anywhere, put a +1/+1 counter on The Haunt of Hightower.
|
// Whenever a card is put into an opponent's graveyard from anywhere, put a +1/+1 counter on The Haunt of Hightower.
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ public final class ThornThallid extends CardImpl {
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.SPORE.createInstance()), TargetController.YOU, false));
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.SPORE.createInstance()), TargetController.YOU, false));
|
||||||
// Remove three spore counters from Thorn Thallid: Thorn Thallid deals 1 damage to any target.
|
// Remove three spore counters from Thorn Thallid: Thorn Thallid deals 1 damage to any target.
|
||||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
|
||||||
new DamageTargetEffect(1),
|
new DamageTargetEffect(1, "it"),
|
||||||
new RemoveCountersSourceCost(CounterType.SPORE.createInstance(3)));
|
new RemoveCountersSourceCost(CounterType.SPORE.createInstance(3)));
|
||||||
ability.addTarget(new TargetAnyTarget());
|
ability.addTarget(new TargetAnyTarget());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,8 @@ public final class TidyConclusion extends CardImpl {
|
||||||
// Destroy target creature. You gain 1 life for each artifact you control.
|
// Destroy target creature. You gain 1 life for each artifact you control.
|
||||||
this.getSpellAbility().addEffect(new DestroyTargetEffect());
|
this.getSpellAbility().addEffect(new DestroyTargetEffect());
|
||||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||||
this.getSpellAbility().addEffect(new GainLifeEffect(ArtifactYouControlCount.instance));
|
this.getSpellAbility().addEffect(new GainLifeEffect(ArtifactYouControlCount.instance)
|
||||||
|
.setText("you gain 1 life for each artifact you control"));
|
||||||
this.getSpellAbility().addHint(ArtifactYouControlHint.instance);
|
this.getSpellAbility().addHint(ArtifactYouControlHint.instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ public final class TinderWall extends CardImpl {
|
||||||
this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, Mana.RedMana(2), new SacrificeSourceCost()));
|
this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, Mana.RedMana(2), new SacrificeSourceCost()));
|
||||||
|
|
||||||
// {R}, Sacrifice Tinder Wall: Tinder Wall deals 2 damage to target creature it's blocking.
|
// {R}, Sacrifice Tinder Wall: Tinder Wall deals 2 damage to target creature it's blocking.
|
||||||
Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(2), new ManaCostsImpl<>("{R}"));
|
Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(2, "it"), new ManaCostsImpl<>("{R}"));
|
||||||
ability.addCost(new SacrificeSourceCost());
|
ability.addCost(new SacrificeSourceCost());
|
||||||
ability.addTarget(new TargetPermanent(filter));
|
ability.addTarget(new TargetPermanent(filter));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ public final class TumbleMagnet extends CardImpl {
|
||||||
|
|
||||||
this.addAbility(new EntersBattlefieldAbility(
|
this.addAbility(new EntersBattlefieldAbility(
|
||||||
new AddCountersSourceEffect(CounterType.CHARGE.createInstance(3)),
|
new AddCountersSourceEffect(CounterType.CHARGE.createInstance(3)),
|
||||||
"{this} enters the battlefield with three charge counters on it"
|
"with three charge counters on it"
|
||||||
));
|
));
|
||||||
|
|
||||||
Ability ability = new SimpleActivatedAbility(
|
Ability ability = new SimpleActivatedAbility(
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ public final class UndercitysEmbrace extends CardImpl {
|
||||||
|
|
||||||
// Target opponent sacrifices a creature. If you control a creature with power 4 or greater, you gain 4 life.
|
// Target opponent sacrifices a creature. If you control a creature with power 4 or greater, you gain 4 life.
|
||||||
this.getSpellAbility().addEffect(new SacrificeEffect(
|
this.getSpellAbility().addEffect(new SacrificeEffect(
|
||||||
StaticFilters.FILTER_PERMANENT_A_CREATURE, 1, "target player"
|
StaticFilters.FILTER_PERMANENT_A_CREATURE, 1, "target opponent"
|
||||||
));
|
));
|
||||||
this.getSpellAbility().addTarget(new TargetOpponent());
|
this.getSpellAbility().addTarget(new TargetOpponent());
|
||||||
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.cards.u;
|
package mage.cards.u;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -23,7 +22,8 @@ public final class UnityOfPurpose extends CardImpl {
|
||||||
|
|
||||||
// Untap each creature you control with a +1/+1 counter on it.
|
// Untap each creature you control with a +1/+1 counter on it.
|
||||||
this.getSpellAbility().addEffect(new UntapAllControllerEffect(
|
this.getSpellAbility().addEffect(new UntapAllControllerEffect(
|
||||||
StaticFilters.FILTER_EACH_CONTROLLED_CREATURE_P1P1, "Untap each creature you control with a +1/+1 counter on it"));
|
StaticFilters.FILTER_EACH_CONTROLLED_CREATURE_P1P1, "Untap each creature you control with a +1/+1 counter on it")
|
||||||
|
.concatBy("<br>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private UnityOfPurpose(final UnityOfPurpose card) {
|
private UnityOfPurpose(final UnityOfPurpose card) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
|
|
||||||
|
|
||||||
package mage.cards.u;
|
package mage.cards.u;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -21,8 +19,10 @@ public final class UnnaturalPredation extends CardImpl {
|
||||||
public UnnaturalPredation (UUID ownerId, CardSetInfo setInfo) {
|
public UnnaturalPredation (UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{G}");
|
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{G}");
|
||||||
|
|
||||||
this.getSpellAbility().addEffect(new BoostTargetEffect(1, 1, Duration.EndOfTurn));
|
this.getSpellAbility().addEffect(new BoostTargetEffect(1, 1, Duration.EndOfTurn)
|
||||||
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn));
|
.setText("Target creature gets +1/+1"));
|
||||||
|
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn)
|
||||||
|
.setText("and gains trample until end of turn"));
|
||||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,12 +33,11 @@ public final class VeiledApparition extends CardImpl {
|
||||||
public VeiledApparition(UUID ownerId, CardSetInfo setInfo) {
|
public VeiledApparition(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}");
|
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}");
|
||||||
|
|
||||||
|
|
||||||
// When an opponent casts a spell, if Veiled Apparition is an enchantment, Veiled Apparition becomes a 3/3 Illusion creature with flying and "At the beginning of your upkeep, sacrifice Veiled Apparition unless you pay {1}{U}."
|
// When an opponent casts a spell, if Veiled Apparition is an enchantment, Veiled Apparition becomes a 3/3 Illusion creature with flying and "At the beginning of your upkeep, sacrifice Veiled Apparition unless you pay {1}{U}."
|
||||||
TriggeredAbility ability = new SpellCastOpponentTriggeredAbility(new BecomesCreatureSourceEffect(new VeilApparitionToken(), null, Duration.WhileOnBattlefield),
|
TriggeredAbility ability = new SpellCastOpponentTriggeredAbility(new BecomesCreatureSourceEffect(new VeilApparitionToken(), null, Duration.WhileOnBattlefield),
|
||||||
filter, false);
|
filter, false);
|
||||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new SourceMatchesFilterCondition(StaticFilters.FILTER_PERMANENT_ENCHANTMENT),
|
this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new SourceMatchesFilterCondition(StaticFilters.FILTER_PERMANENT_ENCHANTMENT),
|
||||||
"When an opponent casts a spell, if {this} is an enchantment, {this} becomes a 3/3 Illusion creature with flying and \"At the beginning of your upkeep, sacrifice Veiled Apparition unless you pay {1}{U}."));
|
"When an opponent casts a spell, if {this} is an enchantment, {this} becomes a 3/3 Illusion creature with flying and \"At the beginning of your upkeep, sacrifice Veiled Apparition unless you pay {1}{U}.\""));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ public final class VeiledSentry extends CardImpl {
|
||||||
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
|
||||||
new SpellCastOpponentTriggeredAbility(new VeiledSentryEffect(), false),
|
new SpellCastOpponentTriggeredAbility(new VeiledSentryEffect(), false),
|
||||||
condition, "When an opponent casts a spell, if {this} is an enchantment, " +
|
condition, "When an opponent casts a spell, if {this} is an enchantment, " +
|
||||||
"{this} becomes an Illusion creature with power and toughness equal to that spell's mana value."
|
"{this} becomes an Illusion creature with power and toughness each equal to that spell's mana value."
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ class WelcomeToTheFoldEffect extends GainControlTargetEffect {
|
||||||
|
|
||||||
public WelcomeToTheFoldEffect(Duration duration, boolean fixedControl) {
|
public WelcomeToTheFoldEffect(Duration duration, boolean fixedControl) {
|
||||||
super(duration, fixedControl);
|
super(duration, fixedControl);
|
||||||
staticText = "Gain control of target creature if its toughness is 2 or less. If Welcome to the Fold's madness cost was paid, instead gain control of that creature if its toughness is X or less";
|
staticText = "Gain control of target creature if its toughness is 2 or less. If this spell's madness cost was paid, instead gain control of that creature if its toughness is X or less";
|
||||||
}
|
}
|
||||||
|
|
||||||
private WelcomeToTheFoldEffect(final WelcomeToTheFoldEffect effect) {
|
private WelcomeToTheFoldEffect(final WelcomeToTheFoldEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ public final class Wiitigo extends CardImpl {
|
||||||
|
|
||||||
// Wiitigo enters the battlefield with six +1/+1 counters on it.
|
// Wiitigo enters the battlefield with six +1/+1 counters on it.
|
||||||
this.addAbility(new EntersBattlefieldAbility(
|
this.addAbility(new EntersBattlefieldAbility(
|
||||||
new AddCountersSourceEffect(CounterType.P1P1.createInstance(6))));
|
new AddCountersSourceEffect(CounterType.P1P1.createInstance(6)), "with six +1/+1 counters on it"));
|
||||||
|
|
||||||
// At the beginning of your upkeep, put a +1/+1 counter on Wiitigo if it has blocked or been blocked since your last upkeep. Otherwise, remove a +1/+1 counter from it.
|
// At the beginning of your upkeep, put a +1/+1 counter on Wiitigo if it has blocked or been blocked since your last upkeep. Otherwise, remove a +1/+1 counter from it.
|
||||||
Ability triggeredAbility = new BeginningOfUpkeepTriggeredAbility(
|
Ability triggeredAbility = new BeginningOfUpkeepTriggeredAbility(
|
||||||
|
|
@ -49,7 +49,7 @@ public final class Wiitigo extends CardImpl {
|
||||||
new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)),
|
new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)),
|
||||||
new RemoveCounterSourceEffect(CounterType.P1P1.createInstance(1)),
|
new RemoveCounterSourceEffect(CounterType.P1P1.createInstance(1)),
|
||||||
new BlockedOrBeenBlockedSinceYourLastUpkeepCondition(),
|
new BlockedOrBeenBlockedSinceYourLastUpkeepCondition(),
|
||||||
"put a +1/+1 counter on enchanted creature if it blocked or been blocked since your last "
|
"put a +1/+1 counter on {this} if it has blocked or been blocked since your last "
|
||||||
+ "upkeep. Otherwise, remove a +1/+1 counter from it"),
|
+ "upkeep. Otherwise, remove a +1/+1 counter from it"),
|
||||||
TargetController.YOU,
|
TargetController.YOU,
|
||||||
false);
|
false);
|
||||||
|
|
|
||||||
|
|
@ -2330,7 +2330,7 @@ public class VerifyCardDataTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove unnecessary reminder text
|
// remove unnecessary reminder text
|
||||||
refText = refText.replaceAll("^\\(.+(can be paid with|ransforms from).+\\)\n", "");
|
refText = refText.replaceAll("^\\(.+(can be paid with|ransforms from|represents).+\\)\n", "");
|
||||||
|
|
||||||
// mana ability fix
|
// mana ability fix
|
||||||
// Current implementation makes one Activated Ability per kind of color.
|
// Current implementation makes one Activated Ability per kind of color.
|
||||||
|
|
|
||||||
|
|
@ -226,7 +226,7 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (replaceRuleText && triggerPhrase != null) {
|
if (replaceRuleText && triggerPhrase != null) {
|
||||||
superRule = superRule.replaceFirst("^((?:you may )?sacrifice |put a [^ ]+ counter on |return )?\\{this\\}", "$1it");
|
superRule = superRule.replaceFirst("^((?:you may )?sacrifice |put an? [^ ]+ counter on |return |transform )?\\{this\\}", "$1it");
|
||||||
}
|
}
|
||||||
sb.append(superRule);
|
sb.append(superRule);
|
||||||
if (triggersOnceEachTurn) {
|
if (triggersOnceEachTurn) {
|
||||||
|
|
@ -272,6 +272,8 @@ public abstract class TriggeredAbilityImpl extends AbilityImpl implements Trigge
|
||||||
|| effect instanceof ReturnToHandSourceEffect
|
|| effect instanceof ReturnToHandSourceEffect
|
||||||
|| effect instanceof ShuffleIntoLibrarySourceEffect
|
|| effect instanceof ShuffleIntoLibrarySourceEffect
|
||||||
|| effect instanceof ExileSourceEffect
|
|| effect instanceof ExileSourceEffect
|
||||||
|
|| effect instanceof FlipSourceEffect
|
||||||
|
|| effect instanceof DestroySourceEffect
|
||||||
) ? "When " : "Whenever ");
|
) ? "When " : "Whenever ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ public class BecomesTappedAttachedTriggeredAbility extends TriggeredAbilityImpl
|
||||||
|
|
||||||
public BecomesTappedAttachedTriggeredAbility(Effect effect, String description, boolean isOptional) {
|
public BecomesTappedAttachedTriggeredAbility(Effect effect, String description, boolean isOptional) {
|
||||||
super(Zone.BATTLEFIELD, effect, isOptional);
|
super(Zone.BATTLEFIELD, effect, isOptional);
|
||||||
setTriggerPhrase("Whenever " + description + " becomes tapped, ");
|
setTriggerPhrase(getWhen() + description + " becomes tapped, ");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected BecomesTappedAttachedTriggeredAbility(final BecomesTappedAttachedTriggeredAbility ability) {
|
protected BecomesTappedAttachedTriggeredAbility(final BecomesTappedAttachedTriggeredAbility ability) {
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ public class BlocksSourceTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
public BlocksSourceTriggeredAbility(Effect effect, boolean optional) {
|
public BlocksSourceTriggeredAbility(Effect effect, boolean optional) {
|
||||||
super(Zone.BATTLEFIELD, effect, optional);
|
super(Zone.BATTLEFIELD, effect, optional);
|
||||||
setTriggerPhrase("Whenever {this} blocks, ");
|
setTriggerPhrase("Whenever {this} blocks, ");
|
||||||
|
this.replaceRuleText = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected BlocksSourceTriggeredAbility(final BlocksSourceTriggeredAbility ability) {
|
protected BlocksSourceTriggeredAbility(final BlocksSourceTriggeredAbility ability) {
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,6 @@ package mage.abilities.common;
|
||||||
|
|
||||||
import mage.abilities.TriggeredAbilityImpl;
|
import mage.abilities.TriggeredAbilityImpl;
|
||||||
import mage.abilities.effects.Effect;
|
import mage.abilities.effects.Effect;
|
||||||
import mage.abilities.effects.common.ExileSourceEffect;
|
|
||||||
import mage.abilities.effects.common.SacrificeSourceEffect;
|
|
||||||
import mage.abilities.effects.common.ShuffleIntoLibrarySourceEffect;
|
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.events.DamagedEvent;
|
import mage.game.events.DamagedEvent;
|
||||||
|
|
@ -25,10 +22,7 @@ public class DealsCombatDamageToAPlayerTriggeredAbility extends TriggeredAbility
|
||||||
public DealsCombatDamageToAPlayerTriggeredAbility(Effect effect, boolean optional, boolean setTargetPointer) {
|
public DealsCombatDamageToAPlayerTriggeredAbility(Effect effect, boolean optional, boolean setTargetPointer) {
|
||||||
super(Zone.BATTLEFIELD, effect, optional);
|
super(Zone.BATTLEFIELD, effect, optional);
|
||||||
this.setTargetPointer = setTargetPointer;
|
this.setTargetPointer = setTargetPointer;
|
||||||
boolean textWhen = !optional && (effect instanceof SacrificeSourceEffect
|
setTriggerPhrase(getWhen() + "{this} deals combat damage to a player, ");
|
||||||
|| effect instanceof ShuffleIntoLibrarySourceEffect
|
|
||||||
|| effect instanceof ExileSourceEffect);
|
|
||||||
setTriggerPhrase((textWhen ? "When" : "Whenever") + " {this} deals combat damage to a player, ");
|
|
||||||
this.replaceRuleText = true;
|
this.replaceRuleText = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import mage.abilities.effects.Effect;
|
||||||
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.game.stack.StackObject;
|
import mage.game.stack.StackObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -17,9 +16,10 @@ public class DiscardedByOpponentTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
this(effect, false);
|
this(effect, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DiscardedByOpponentTriggeredAbility(Effect effect, boolean optional) {
|
public DiscardedByOpponentTriggeredAbility(Effect effect, boolean textCardName) {
|
||||||
super(Zone.GRAVEYARD, effect, optional);
|
super(Zone.GRAVEYARD, effect, false);
|
||||||
setTriggerPhrase("When a spell or ability an opponent controls causes you to discard this card, ");
|
setTriggerPhrase("When a spell or ability an opponent controls causes you to discard "
|
||||||
|
+ (textCardName ? "{this}, " : "this card, "));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected DiscardedByOpponentTriggeredAbility(final DiscardedByOpponentTriggeredAbility ability) {
|
protected DiscardedByOpponentTriggeredAbility(final DiscardedByOpponentTriggeredAbility ability) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.abilities.common;
|
package mage.abilities.common;
|
||||||
|
|
||||||
import mage.abilities.TriggeredAbilityImpl;
|
import mage.abilities.TriggeredAbilityImpl;
|
||||||
|
|
@ -18,7 +17,7 @@ public class DrawCardControllerTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
public DrawCardControllerTriggeredAbility(Zone zone, Effect effect, boolean optional) {
|
public DrawCardControllerTriggeredAbility(Zone zone, Effect effect, boolean optional) {
|
||||||
super(zone, effect, optional);
|
super(zone, effect, optional);
|
||||||
setTriggerPhrase("Whenever you draw a card, ");
|
setTriggerPhrase(getWhen() + "you draw a card, ");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected DrawCardControllerTriggeredAbility(final DrawCardControllerTriggeredAbility ability) {
|
protected DrawCardControllerTriggeredAbility(final DrawCardControllerTriggeredAbility ability) {
|
||||||
|
|
|
||||||
|
|
@ -105,6 +105,7 @@ public class Effects extends ArrayList<Effect> {
|
||||||
// add punctuation to very last rule.
|
// add punctuation to very last rule.
|
||||||
if (lastRule != null && lastRule.length() > 3
|
if (lastRule != null && lastRule.length() > 3
|
||||||
&& !lastRule.endsWith(".")
|
&& !lastRule.endsWith(".")
|
||||||
|
&& !lastRule.endsWith("!")
|
||||||
&& !lastRule.endsWith("\"")
|
&& !lastRule.endsWith("\"")
|
||||||
&& !lastRule.endsWith(".]")
|
&& !lastRule.endsWith(".]")
|
||||||
&& !lastRule.startsWith("<b>LEVEL ")
|
&& !lastRule.startsWith("<b>LEVEL ")
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package mage.abilities.effects.common;
|
package mage.abilities.effects.common;
|
||||||
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
|
@ -21,7 +20,7 @@ public class DestroySourceEffect extends OneShotEffect {
|
||||||
public DestroySourceEffect(boolean noRegen) {
|
public DestroySourceEffect(boolean noRegen) {
|
||||||
super(Outcome.DestroyPermanent);
|
super(Outcome.DestroyPermanent);
|
||||||
this.noRegen = noRegen;
|
this.noRegen = noRegen;
|
||||||
staticText = "destroy {this}";
|
staticText = "destroy {this}" + (noRegen ? ". It can't be regenerated" : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected DestroySourceEffect(final DestroySourceEffect effect) {
|
protected DestroySourceEffect(final DestroySourceEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ public class FlipSourceEffect extends OneShotEffect {
|
||||||
public FlipSourceEffect(Token flipToken) {
|
public FlipSourceEffect(Token flipToken) {
|
||||||
super(Outcome.BecomeCreature);
|
super(Outcome.BecomeCreature);
|
||||||
this.flipToken = flipToken;
|
this.flipToken = flipToken;
|
||||||
staticText = "flip it";
|
staticText = "flip {this}";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected FlipSourceEffect(final FlipSourceEffect effect) {
|
protected FlipSourceEffect(final FlipSourceEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ public class CantAttackBlockUnlessPaysSourceEffect extends PayCostToAttackBlockE
|
||||||
public CantAttackBlockUnlessPaysSourceEffect(Cost cost, RestrictType restrictType) {
|
public CantAttackBlockUnlessPaysSourceEffect(Cost cost, RestrictType restrictType) {
|
||||||
super(Duration.WhileOnBattlefield, Outcome.Detriment, restrictType, cost);
|
super(Duration.WhileOnBattlefield, Outcome.Detriment, restrictType, cost);
|
||||||
staticText = "{this} can't " + restrictType.toString() + " unless you " + (cost == null ? "" : cost.getText())
|
staticText = "{this} can't " + restrictType.toString() + " unless you " + (cost == null ? "" : cost.getText())
|
||||||
+ (restrictType == RestrictType.ATTACK ? " <i>(This cost is paid as attackers are declared.)</i>" : "");
|
+ (restrictType == RestrictType.ATTACK ? ". <i>(This cost is paid as attackers are declared.)</i>" : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
public CantAttackBlockUnlessPaysSourceEffect(ManaCosts manaCosts, RestrictType restrictType) {
|
public CantAttackBlockUnlessPaysSourceEffect(ManaCosts manaCosts, RestrictType restrictType) {
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ public class InspiredAbility extends TriggeredAbilityImpl {
|
||||||
setAbilityWord(AbilityWord.INSPIRED);
|
setAbilityWord(AbilityWord.INSPIRED);
|
||||||
}
|
}
|
||||||
setTriggerPhrase("Whenever {this} becomes untapped, ");
|
setTriggerPhrase("Whenever {this} becomes untapped, ");
|
||||||
|
this.replaceRuleText = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected InspiredAbility(final InspiredAbility ability) {
|
protected InspiredAbility(final InspiredAbility ability) {
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,8 @@ public class ProtectionAbility extends StaticAbility {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return "protection from " + filter.getMessage() + (removeAuras ? "" : ". This effect doesn't remove Auras.");
|
return (flavorWord == null ? "protection from " : CardUtil.italicizeWithEmDash(flavorWord) + "Protection from ")
|
||||||
|
+ filter.getMessage() + (removeAuras ? "" : ". This effect doesn't remove Auras.");
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canTarget(MageObject source, Game game) {
|
public boolean canTarget(MageObject source, Game game) {
|
||||||
|
|
@ -125,7 +126,7 @@ public class ProtectionAbility extends StaticAbility {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final String getFilterText(ObjectColor color) {
|
private static String getFilterText(ObjectColor color) {
|
||||||
return CardUtil.concatWithAnd(
|
return CardUtil.concatWithAnd(
|
||||||
color.getColors()
|
color.getColors()
|
||||||
.stream()
|
.stream()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue