mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 10:40:06 -08:00
various text fixes
This commit is contained in:
parent
60c8d7254b
commit
58b5bb76f9
107 changed files with 173 additions and 187 deletions
|
|
@ -41,7 +41,7 @@ public final class AcererakTheArchlich extends CardImpl {
|
||||||
this.toughness = new MageInt(5);
|
this.toughness = new MageInt(5);
|
||||||
|
|
||||||
// When Acererak the Archlich enters the battlefield, if you have not completed Tomb of Annihilation, return Acererak the Archlich to its owner's hand and venture into the dungeon.
|
// When Acererak the Archlich enters the battlefield, if you have not completed Tomb of Annihilation, return Acererak the Archlich to its owner's hand and venture into the dungeon.
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandSourceEffect(true))
|
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandSourceEffect(true).setText("return it to its owner's hand"))
|
||||||
.withInterveningIf(AcererakTheArchlichCondition.instance);
|
.withInterveningIf(AcererakTheArchlichCondition.instance);
|
||||||
ability.addEffect(new VentureIntoTheDungeonEffect().concatBy("and"));
|
ability.addEffect(new VentureIntoTheDungeonEffect().concatBy("and"));
|
||||||
ability.addHint(CurrentDungeonHint.instance);
|
ability.addHint(CurrentDungeonHint.instance);
|
||||||
|
|
@ -83,7 +83,7 @@ class AcererakTheArchlichEffect extends OneShotEffect {
|
||||||
AcererakTheArchlichEffect() {
|
AcererakTheArchlichEffect() {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
staticText = "for each opponent, you create a 2/2 black Zombie creature " +
|
staticText = "for each opponent, you create a 2/2 black Zombie creature " +
|
||||||
"token unless that player sacrifices a creature";
|
"token unless that player sacrifices a creature of their choice";
|
||||||
}
|
}
|
||||||
|
|
||||||
private AcererakTheArchlichEffect(final AcererakTheArchlichEffect effect) {
|
private AcererakTheArchlichEffect(final AcererakTheArchlichEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,7 @@ enum AerialSurveyorCondition implements Condition {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "";
|
return "defending player controls more lands than you";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ class AidFromTheCowlEffect extends OneShotEffect {
|
||||||
AidFromTheCowlEffect() {
|
AidFromTheCowlEffect() {
|
||||||
super(Outcome.PutCreatureInPlay);
|
super(Outcome.PutCreatureInPlay);
|
||||||
this.staticText = "reveal the top card of your library. If it's a permanent card, " +
|
this.staticText = "reveal the top card of your library. If it's a permanent card, " +
|
||||||
"you may put it onto the battlefield. Otherwise, you may put that card on the bottom of your library";
|
"you may put it onto the battlefield. Otherwise, you may put it on the bottom of your library";
|
||||||
}
|
}
|
||||||
|
|
||||||
private AidFromTheCowlEffect(final AidFromTheCowlEffect effect) {
|
private AidFromTheCowlEffect(final AidFromTheCowlEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ public final class AlchemistsTalent extends CardImpl {
|
||||||
new SpellCastControllerTriggeredAbility(
|
new SpellCastControllerTriggeredAbility(
|
||||||
new DamagePlayersEffect(AlchemistsTalentValue.instance, TargetController.OPPONENT)
|
new DamagePlayersEffect(AlchemistsTalentValue.instance, TargetController.OPPONENT)
|
||||||
.setText("{this} deals damage equal to that spell's mana value to each opponent"),
|
.setText("{this} deals damage equal to that spell's mana value to each opponent"),
|
||||||
StaticFilters.FILTER_SPELL, false, SetTargetPointer.SPELL
|
StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.SPELL
|
||||||
).withInterveningIf(AlchemistsTalentCondition.instance), 3
|
).withInterveningIf(AlchemistsTalentCondition.instance), 3
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ class AnaBattlemageEffect extends OneShotEffect {
|
||||||
|
|
||||||
AnaBattlemageEffect() {
|
AnaBattlemageEffect() {
|
||||||
super(Outcome.Detriment);
|
super(Outcome.Detriment);
|
||||||
this.staticText = "and it deals damage equal to its power to its controller";
|
this.staticText = "and that creature deals damage equal to its power to its controller";
|
||||||
}
|
}
|
||||||
|
|
||||||
private AnaBattlemageEffect(final AnaBattlemageEffect effect) {
|
private AnaBattlemageEffect(final AnaBattlemageEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ public final class ArchmageAscension extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of each end step, if you drew two or more cards this turn, you may put a quest counter on Archmage Ascension.
|
// At the beginning of each end step, if you drew two or more cards this turn, you may put a quest counter on Archmage Ascension.
|
||||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
||||||
TargetController.EACH_PLAYER, new AddCountersSourceEffect(CounterType.QUEST.createInstance()),
|
TargetController.ANY, new AddCountersSourceEffect(CounterType.QUEST.createInstance()),
|
||||||
true, ArchmageAscensionCondition.instance
|
true, ArchmageAscensionCondition.instance
|
||||||
), new CardsAmountDrawnThisTurnWatcher());
|
), new CardsAmountDrawnThisTurnWatcher());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ class ArdenAngelEffect extends OneShotEffect {
|
||||||
|
|
||||||
ArdenAngelEffect() {
|
ArdenAngelEffect() {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
this.staticText = "roll a four-sided die. If the result is 1, return {this} from your graveyard to the battlefield";
|
this.staticText = "roll a four-sided die. If the result is 1, return this card from your graveyard to the battlefield";
|
||||||
}
|
}
|
||||||
|
|
||||||
private ArdenAngelEffect(final ArdenAngelEffect effect) {
|
private ArdenAngelEffect(final ArdenAngelEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ public final class AsylumVisitor extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of each player's upkeep, if that player has no cards in hand, you draw a card and you lose 1 life.
|
// At the beginning of each player's upkeep, if that player has no cards in hand, you draw a card and you lose 1 life.
|
||||||
Ability ability = new BeginningOfUpkeepTriggeredAbility(
|
Ability ability = new BeginningOfUpkeepTriggeredAbility(
|
||||||
TargetController.ANY, new DrawCardSourceControllerEffect(1, true), false
|
TargetController.EACH_PLAYER, new DrawCardSourceControllerEffect(1, true), false
|
||||||
).withInterveningIf(condition);
|
).withInterveningIf(condition);
|
||||||
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
|
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ public final class AuntiesSnitch extends CardImpl {
|
||||||
|
|
||||||
// Whenever a Goblin or Rogue you control deals combat damage to a player, if Auntie's Snitch is in your graveyard, you may return Auntie's Snitch to your hand.
|
// Whenever a Goblin or Rogue you control deals combat damage to a player, if Auntie's Snitch is in your graveyard, you may return Auntie's Snitch to your hand.
|
||||||
this.addAbility(new DealsDamageToAPlayerAllTriggeredAbility(Zone.GRAVEYARD,
|
this.addAbility(new DealsDamageToAPlayerAllTriggeredAbility(Zone.GRAVEYARD,
|
||||||
new ReturnSourceFromGraveyardToHandEffect().setText("return {this} to your hand"),
|
new ReturnSourceFromGraveyardToHandEffect().setText("return this card to your hand"),
|
||||||
filter, true, SetTargetPointer.NONE, true, false
|
filter, true, SetTargetPointer.NONE, true, false
|
||||||
).withInterveningIf(SourceInGraveyardCondition.instance));
|
).withInterveningIf(SourceInGraveyardCondition.instance));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ public final class BlizzardStrix extends CardImpl {
|
||||||
// When Blizzard Strix enters the battlefield, if you control another snow permanent, exile target permanent other than Blizzard Strix. Return that card to the battlefield under its owner's control at the beginning of the next end step.
|
// When Blizzard Strix enters the battlefield, if you control another snow permanent, exile target permanent other than Blizzard Strix. Return that card to the battlefield under its owner's control at the beginning of the next end step.
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(new ExileReturnBattlefieldNextEndStepTargetEffect()
|
Ability ability = new EntersBattlefieldTriggeredAbility(new ExileReturnBattlefieldNextEndStepTargetEffect()
|
||||||
.setText("exile target permanent other than {this}. Return that card to the " +
|
.setText("exile target permanent other than {this}. Return that card to the " +
|
||||||
"battlefield under its owner's control at the beginning of the next end step"));
|
"battlefield under its owner's control at the beginning of the next end step")).withInterveningIf(condition);
|
||||||
ability.addTarget(new TargetPermanent(filter));
|
ability.addTarget(new TargetPermanent(filter));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package mage.cards.b;
|
package mage.cards.b;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
|
|
@ -18,8 +17,9 @@ import mage.constants.SubType;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
import mage.target.common.TargetCardInGraveyard;
|
import mage.target.common.TargetCardInGraveyard;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author LevelX2
|
* @author LevelX2
|
||||||
*/
|
*/
|
||||||
public final class BloodOperative extends CardImpl {
|
public final class BloodOperative extends CardImpl {
|
||||||
|
|
@ -42,7 +42,7 @@ public final class BloodOperative extends CardImpl {
|
||||||
|
|
||||||
// Whenever you surveil, if Blood Operative is in your graveyard, you may pay 3 life. If you do, return Blood Operative to your hand.
|
// Whenever you surveil, if Blood Operative is in your graveyard, you may pay 3 life. If you do, return Blood Operative to your hand.
|
||||||
this.addAbility(new SurveilTriggeredAbility(Zone.GRAVEYARD, new DoIfCostPaid(
|
this.addAbility(new SurveilTriggeredAbility(Zone.GRAVEYARD, new DoIfCostPaid(
|
||||||
new ReturnSourceFromGraveyardToHandEffect().setText("return {this} to your hand"), new PayLifeCost(3)
|
new ReturnSourceFromGraveyardToHandEffect().setText("return this card to your hand"), new PayLifeCost(3)
|
||||||
)).withInterveningIf(SourceInGraveyardCondition.instance));
|
)).withInterveningIf(SourceInGraveyardCondition.instance));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ public final class BloodchiefAscension extends CardImpl {
|
||||||
|
|
||||||
// Whenever a card is put into an opponent's graveyard from anywhere, if Bloodchief Ascension has three or more quest counters on it, you may have that player lose 2 life. If you do, you gain 2 life.
|
// Whenever a card is put into an opponent's graveyard from anywhere, if Bloodchief Ascension has three or more quest counters on it, you may have that player lose 2 life. If you do, you gain 2 life.
|
||||||
Ability ability = new PutCardIntoGraveFromAnywhereAllTriggeredAbility(
|
Ability ability = new PutCardIntoGraveFromAnywhereAllTriggeredAbility(
|
||||||
new LoseLifeTargetEffect(2), true, StaticFilters.FILTER_CARD_A,
|
new LoseLifeTargetEffect(2).setText("have that player lose 2 life"), true, StaticFilters.FILTER_CARD_A,
|
||||||
TargetController.OPPONENT, SetTargetPointer.PLAYER
|
TargetController.OPPONENT, SetTargetPointer.PLAYER
|
||||||
).withInterveningIf(condition);
|
).withInterveningIf(condition);
|
||||||
ability.addEffect(new GainLifeEffect(2).concatBy("If you do,"));
|
ability.addEffect(new GainLifeEffect(2).concatBy("If you do,"));
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,7 @@ class BorealOutriderEffect extends ReplacementEffectImpl {
|
||||||
|
|
||||||
BorealOutriderEffect() {
|
BorealOutriderEffect() {
|
||||||
super(Duration.EndOfStep, Outcome.BoostCreature);
|
super(Duration.EndOfStep, Outcome.BoostCreature);
|
||||||
|
staticText = "that creature enters with an additional +1/+1 counter on it";
|
||||||
}
|
}
|
||||||
|
|
||||||
private BorealOutriderEffect(BorealOutriderEffect effect) {
|
private BorealOutriderEffect(BorealOutriderEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,7 @@
|
||||||
package mage.cards.b;
|
package mage.cards.b;
|
||||||
|
|
||||||
import mage.abilities.TriggeredAbilityImpl;
|
import mage.abilities.common.DiesCreatureTriggeredAbility;
|
||||||
import mage.abilities.condition.common.SourceInGraveyardCondition;
|
import mage.abilities.condition.common.SourceInGraveyardCondition;
|
||||||
import mage.abilities.effects.Effect;
|
|
||||||
import mage.abilities.effects.common.CreateTokenEffect;
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
import mage.abilities.effects.common.ExileSourceEffect;
|
import mage.abilities.effects.common.ExileSourceEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
|
|
@ -10,24 +9,20 @@ import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.TargetController;
|
import mage.constants.TargetController;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
|
import mage.filter.FilterPermanent;
|
||||||
import mage.filter.common.FilterCreaturePermanent;
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
import mage.filter.predicate.permanent.TokenPredicate;
|
import mage.filter.predicate.permanent.TokenPredicate;
|
||||||
import mage.game.Game;
|
|
||||||
import mage.game.events.GameEvent;
|
|
||||||
import mage.game.events.ZoneChangeEvent;
|
|
||||||
import mage.game.permanent.Permanent;
|
|
||||||
import mage.game.permanent.token.ZombieToken;
|
import mage.game.permanent.token.ZombieToken;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author Plopman
|
* @author Plopman
|
||||||
*/
|
*/
|
||||||
public final class BridgeFromBelow extends CardImpl {
|
public final class BridgeFromBelow extends CardImpl {
|
||||||
|
|
||||||
private static final FilterCreaturePermanent filter1 = new FilterCreaturePermanent("Whenever a nontoken creature is put into your graveyard from the battlefield, ");
|
private static final FilterPermanent filter1 = new FilterCreaturePermanent();
|
||||||
private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("When a creature is put into an opponent's graveyard from the battlefield, ");
|
private static final FilterPermanent filter2 = new FilterCreaturePermanent();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter1.add(TargetController.YOU.getOwnerPredicate());
|
filter1.add(TargetController.YOU.getOwnerPredicate());
|
||||||
|
|
@ -39,11 +34,18 @@ public final class BridgeFromBelow extends CardImpl {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{B}{B}{B}");
|
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{B}{B}{B}");
|
||||||
|
|
||||||
// Whenever a nontoken creature is put into your graveyard from the battlefield, if Bridge from Below is in your graveyard, create a 2/2 black Zombie creature token.
|
// Whenever a nontoken creature is put into your graveyard from the battlefield, if Bridge from Below is in your graveyard, create a 2/2 black Zombie creature token.
|
||||||
this.addAbility(new BridgeFromBelowAbility(new CreateTokenEffect(new ZombieToken()), filter1));
|
this.addAbility(new DiesCreatureTriggeredAbility(
|
||||||
|
Zone.GRAVEYARD, new CreateTokenEffect(new ZombieToken()),
|
||||||
|
false, filter1, false
|
||||||
|
).setTriggerPhrase("Whenever a nontoken creature is put into your graveyard from the battlefield, ")
|
||||||
|
.withInterveningIf(SourceInGraveyardCondition.instance));
|
||||||
|
|
||||||
// When a creature is put into an opponent's graveyard from the battlefield, if Bridge from Below is in your graveyard, exile Bridge from Below.
|
// When a creature is put into an opponent's graveyard from the battlefield, if Bridge from Below is in your graveyard, exile Bridge from Below.
|
||||||
this.addAbility(new BridgeFromBelowAbility(new ExileSourceEffect(), filter2));
|
this.addAbility(new DiesCreatureTriggeredAbility(
|
||||||
|
Zone.GRAVEYARD, new ExileSourceEffect().setText("exile this card"),
|
||||||
|
false, filter2, false
|
||||||
|
).setTriggerPhrase("When a creature is put into an opponent's graveyard from the battlefield, ")
|
||||||
|
.withInterveningIf(SourceInGraveyardCondition.instance));
|
||||||
}
|
}
|
||||||
|
|
||||||
private BridgeFromBelow(final BridgeFromBelow card) {
|
private BridgeFromBelow(final BridgeFromBelow card) {
|
||||||
|
|
@ -55,41 +57,3 @@ public final class BridgeFromBelow extends CardImpl {
|
||||||
return new BridgeFromBelow(this);
|
return new BridgeFromBelow(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class BridgeFromBelowAbility extends TriggeredAbilityImpl {
|
|
||||||
|
|
||||||
private final FilterCreaturePermanent filter;
|
|
||||||
|
|
||||||
BridgeFromBelowAbility(Effect effect, FilterCreaturePermanent filter) {
|
|
||||||
super(Zone.GRAVEYARD, effect, false);
|
|
||||||
this.filter = filter;
|
|
||||||
this.withInterveningIf(SourceInGraveyardCondition.instance);
|
|
||||||
setTriggerPhrase(filter.getMessage());
|
|
||||||
setLeavesTheBattlefieldTrigger(true); // it's not required for Bridge from Below, but better to keep same code style and verify pass
|
|
||||||
}
|
|
||||||
|
|
||||||
private BridgeFromBelowAbility(final BridgeFromBelowAbility ability) {
|
|
||||||
super(ability);
|
|
||||||
this.filter = ability.filter;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BridgeFromBelowAbility copy() {
|
|
||||||
return new BridgeFromBelowAbility(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean checkEventType(GameEvent event, Game game) {
|
|
||||||
return event.getType() == GameEvent.EventType.ZONE_CHANGE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean checkTrigger(GameEvent event, Game game) {
|
|
||||||
Permanent permanent = (Permanent) game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD);
|
|
||||||
if (permanent == null || !((ZoneChangeEvent) event).isDiesEvent()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return filter.match(permanent, controllerId, this, game);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ public final class CleavingSkyrider extends CardImpl {
|
||||||
|
|
||||||
// When Cleaving Skyrider enters the battlefield, if it was kicked, it deals X damage to any target, where X is the number of attacking creatures.
|
// When Cleaving Skyrider enters the battlefield, if it was kicked, it deals X damage to any target, where X is the number of attacking creatures.
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(
|
Ability ability = new EntersBattlefieldTriggeredAbility(
|
||||||
new DamageTargetEffect(xValue, "it")
|
new DamageTargetEffect(xValue, "it").setText("it deals X damage to any target, where X is the number of attacking creatures")
|
||||||
).withInterveningIf(KickedCondition.ONCE);
|
).withInterveningIf(KickedCondition.ONCE);
|
||||||
ability.addTarget(new TargetAnyTarget());
|
ability.addTarget(new TargetAnyTarget());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ public final class CurseOfTheCabal extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of each player's upkeep, if Curse of the Cabal is suspended, that player may sacrifice a permanent. If they do, put two time counters on Curse of the Cabal.
|
// At the beginning of each player's upkeep, if Curse of the Cabal is suspended, that player may sacrifice a permanent. If they do, put two time counters on Curse of the Cabal.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
Zone.EXILED, TargetController.ANY, new CurseOfTheCabalTriggeredAbilityConditionalDelay(), false
|
Zone.EXILED, TargetController.EACH_PLAYER, new CurseOfTheCabalTriggeredAbilityConditionalDelay(), false
|
||||||
).withInterveningIf(SuspendedCondition.instance));
|
).withInterveningIf(SuspendedCondition.instance));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -62,7 +62,7 @@ class CurseOfTheCabalSacrificeEffect extends OneShotEffect {
|
||||||
|
|
||||||
CurseOfTheCabalSacrificeEffect() {
|
CurseOfTheCabalSacrificeEffect() {
|
||||||
super(Outcome.Sacrifice);
|
super(Outcome.Sacrifice);
|
||||||
this.staticText = "Target player sacrifices half the permanents they control, rounded down.";
|
this.staticText = "Target player sacrifices half the permanents they control of their choice, rounded down.";
|
||||||
}
|
}
|
||||||
|
|
||||||
private CurseOfTheCabalSacrificeEffect(final CurseOfTheCabalSacrificeEffect effect) {
|
private CurseOfTheCabalSacrificeEffect(final CurseOfTheCabalSacrificeEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -51,9 +51,9 @@ public final class DarigaazReincarnated extends CardImpl {
|
||||||
this.addAbility(new SimpleStaticAbility(new DarigaazReincarnatedDiesEffect()));
|
this.addAbility(new SimpleStaticAbility(new DarigaazReincarnatedDiesEffect()));
|
||||||
|
|
||||||
// At the beginning of your upkeep, if Darigaaz is exiled with an egg counter on it, remove an egg counter from it. Then if Darigaaz has no egg counters on it, return it to the battlefield.
|
// At the beginning of your upkeep, if Darigaaz is exiled with an egg counter on it, remove an egg counter from it. Then if Darigaaz has no egg counters on it, return it to the battlefield.
|
||||||
Ability ability = new BeginningOfUpkeepTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
Zone.EXILED, TargetController.YOU, new DarigaazReincarnatedReturnEffect(), false
|
Zone.EXILED, TargetController.YOU, new DarigaazReincarnatedReturnEffect(), false
|
||||||
).withInterveningIf(DarigaazReincarnatedCondition.instance);
|
).withInterveningIf(DarigaazReincarnatedCondition.instance));
|
||||||
}
|
}
|
||||||
|
|
||||||
private DarigaazReincarnated(final DarigaazReincarnated card) {
|
private DarigaazReincarnated(final DarigaazReincarnated card) {
|
||||||
|
|
@ -154,6 +154,6 @@ enum DarigaazReincarnatedCondition implements Condition {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "{this} is exiled with an egg counter on it";
|
return "this card is exiled with an egg counter on it";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ public final class DeathSpark extends CardImpl {
|
||||||
// At the beginning of your upkeep, if Death Spark is in your graveyard with a creature card directly above it, you may pay {1}. If you do, return Death Spark to your hand.
|
// At the beginning of your upkeep, if Death Spark is in your graveyard with a creature card directly above it, you may pay {1}. If you do, return Death Spark to your hand.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
Zone.GRAVEYARD, TargetController.YOU,
|
Zone.GRAVEYARD, TargetController.YOU,
|
||||||
new DoIfCostPaid(new ReturnSourceFromGraveyardToHandEffect(), new GenericManaCost(1)), false
|
new DoIfCostPaid(new ReturnSourceFromGraveyardToHandEffect().setText("return this card to your hand"), new GenericManaCost(1)), false
|
||||||
).withInterveningIf(DeathSparkCondition.instance));
|
).withInterveningIf(DeathSparkCondition.instance));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -71,6 +71,6 @@ enum DeathSparkCondition implements Condition {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "{this} is in your graveyard with a creature card directly above it";
|
return "this card is in your graveyard with a creature card directly above it";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ public final class DefenseOfTheHeart extends CardImpl {
|
||||||
// At the beginning of your upkeep, if an opponent controls three or more creatures, sacrifice Defense of the Heart, search your library for up to two creature cards, and put those cards onto the battlefield. Then shuffle your library.
|
// At the beginning of your upkeep, if an opponent controls three or more creatures, sacrifice Defense of the Heart, search your library for up to two creature cards, and put those cards onto the battlefield. Then shuffle your library.
|
||||||
Ability ability = new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceEffect()).withInterveningIf(condition);
|
Ability ability = new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceEffect()).withInterveningIf(condition);
|
||||||
ability.addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(
|
ability.addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(
|
||||||
2, StaticFilters.FILTER_CARD_CREATURES
|
0, 2, StaticFilters.FILTER_CARD_CREATURES
|
||||||
)).concatBy(","));
|
)).concatBy(","));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ package mage.cards.d;
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.EntersBattlefieldAbility;
|
import mage.abilities.common.EntersBattlefieldAbility;
|
||||||
import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldAllTriggeredAbility;
|
||||||
import mage.abilities.condition.common.SourceHasCountersCondition;
|
import mage.abilities.condition.common.SourceHasCountersCondition;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
import mage.abilities.effects.common.counter.AddCounterChoiceSourceEffect;
|
import mage.abilities.effects.common.counter.AddCounterChoiceSourceEffect;
|
||||||
|
|
@ -42,7 +42,7 @@ public class DenryKlinEditorInChief extends CardImpl {
|
||||||
|
|
||||||
// Whenever a nontoken creature you control enters,
|
// Whenever a nontoken creature you control enters,
|
||||||
// if Denry has counters on it, put the same number of each kind of counter on that creature.
|
// if Denry has counters on it, put the same number of each kind of counter on that creature.
|
||||||
this.addAbility(new EntersBattlefieldControlledTriggeredAbility(
|
this.addAbility(new EntersBattlefieldAllTriggeredAbility(
|
||||||
new DenryKlinEditorInChiefCopyCountersEffect(), StaticFilters.FILTER_CONTROLLED_CREATURE_NON_TOKEN
|
new DenryKlinEditorInChiefCopyCountersEffect(), StaticFilters.FILTER_CONTROLLED_CREATURE_NON_TOKEN
|
||||||
).withInterveningIf(SourceHasCountersCondition.instance));
|
).withInterveningIf(SourceHasCountersCondition.instance));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ public final class EarwigSquad extends CardImpl {
|
||||||
|
|
||||||
// When Earwig Squad enters the battlefield, if its prowl cost was paid, search target opponent's library for three cards and exile them. Then that player shuffles their library.
|
// When Earwig Squad enters the battlefield, if its prowl cost was paid, search target opponent's library for three cards and exile them. Then that player shuffles their library.
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(
|
Ability ability = new EntersBattlefieldTriggeredAbility(
|
||||||
new SearchLibraryAndExileTargetEffect(3, true), false
|
new SearchLibraryAndExileTargetEffect(3, false), false
|
||||||
).withInterveningIf(ProwlCostWasPaidCondition.instance);
|
).withInterveningIf(ProwlCostWasPaidCondition.instance);
|
||||||
ability.addTarget(new TargetOpponent());
|
ability.addTarget(new TargetOpponent());
|
||||||
this.addAbility(ability.addHint(ProwlCostWasPaidHint.instance));
|
this.addAbility(ability.addHint(ProwlCostWasPaidHint.instance));
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,11 @@ enum EowynFearlessKnightPredicate implements ObjectSourcePlayerPredicate<Permane
|
||||||
.map(permanent -> permanent.getPower().getValue()
|
.map(permanent -> permanent.getPower().getValue()
|
||||||
< input.getObject().getPower().getValue()).orElse(false);
|
< input.getObject().getPower().getValue()).orElse(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "another Human entered the battlefield under your control this turn";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class EowynFearlessKnightEffect extends OneShotEffect {
|
class EowynFearlessKnightEffect extends OneShotEffect {
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ public final class ErgRaiders extends CardImpl {
|
||||||
// At the beginning of your end step, if Erg Raiders didn't attack this turn, Erg Raiders deals 2 damage to you unless it came under your control this turn.
|
// At the beginning of your end step, if Erg Raiders didn't attack this turn, Erg Raiders deals 2 damage to you unless it came under your control this turn.
|
||||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(new ConditionalOneShotEffect(
|
this.addAbility(new BeginningOfEndStepTriggeredAbility(new ConditionalOneShotEffect(
|
||||||
new DamageControllerEffect(2), ErgRaidersCondition.instance,
|
new DamageControllerEffect(2), ErgRaidersCondition.instance,
|
||||||
"{this} deals 2 damage to you unless it came under your control this turn"
|
"it deals 2 damage to you unless it came under your control this turn"
|
||||||
)).withInterveningIf(condition));
|
)).withInterveningIf(condition));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
import mage.abilities.condition.common.KickedCondition;
|
import mage.abilities.condition.common.KickedCondition;
|
||||||
import mage.abilities.effects.common.ReturnToHandTargetEffect;
|
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
|
||||||
import mage.abilities.keyword.KickerAbility;
|
import mage.abilities.keyword.KickerAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
|
@ -31,9 +31,7 @@ public final class ExcavationElephant extends CardImpl {
|
||||||
this.addAbility(new KickerAbility("{1}{W}"));
|
this.addAbility(new KickerAbility("{1}{W}"));
|
||||||
|
|
||||||
// When Excavation Elephant enters the battlefield, if it was kicked, return target artifact card from your graveyard to your hand.
|
// When Excavation Elephant enters the battlefield, if it was kicked, return target artifact card from your graveyard to your hand.
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(
|
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect()).withInterveningIf(KickedCondition.ONCE);
|
||||||
new ReturnToHandTargetEffect(), false
|
|
||||||
).withInterveningIf(KickedCondition.ONCE);
|
|
||||||
ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD));
|
ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT_FROM_YOUR_GRAVEYARD));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ import mage.abilities.effects.common.UntapTargetEffect;
|
||||||
import mage.abilities.effects.common.discard.DiscardControllerEffect;
|
import mage.abilities.effects.common.discard.DiscardControllerEffect;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.AbilityWord;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
@ -39,8 +40,7 @@ public final class FearOfMissingOut extends CardImpl {
|
||||||
ability = new AttacksFirstTimeTriggeredAbility(new UntapTargetEffect(), false).withInterveningIf(DeliriumCondition.instance);
|
ability = new AttacksFirstTimeTriggeredAbility(new UntapTargetEffect(), false).withInterveningIf(DeliriumCondition.instance);
|
||||||
ability.addTarget(new TargetCreaturePermanent());
|
ability.addTarget(new TargetCreaturePermanent());
|
||||||
ability.addEffect(new AdditionalCombatPhaseEffect());
|
ability.addEffect(new AdditionalCombatPhaseEffect());
|
||||||
ability.addHint(CardTypesInGraveyardCount.YOU.getHint());
|
this.addAbility(ability.setAbilityWord(AbilityWord.DELIRIUM).addHint(CardTypesInGraveyardCount.YOU.getHint()));
|
||||||
this.addAbility(ability);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private FearOfMissingOut(final FearOfMissingOut card) {
|
private FearOfMissingOut(final FearOfMissingOut card) {
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ public final class FoundryHornet extends CardImpl {
|
||||||
// When Foundry Hornet enters the battlefield, if you control a creature with a +1/+1 counter on it, creatures your opponents control get -1/-1 until end of turn.
|
// When Foundry Hornet enters the battlefield, if you control a creature with a +1/+1 counter on it, creatures your opponents control get -1/-1 until end of turn.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new BoostAllEffect(
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new BoostAllEffect(
|
||||||
-1, -1, Duration.EndOfTurn,
|
-1, -1, Duration.EndOfTurn,
|
||||||
StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE, false
|
StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, false
|
||||||
), false).withInterveningIf(condition));
|
), false).withInterveningIf(condition));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import mage.abilities.hint.common.MorbidHint;
|
||||||
import mage.abilities.keyword.ReachAbility;
|
import mage.abilities.keyword.ReachAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.AbilityWord;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
|
|
||||||
|
|
@ -30,7 +31,7 @@ public final class FunnelWebRecluse extends CardImpl {
|
||||||
|
|
||||||
// Morbid — When Funnel-Web Recluse enters the battlefield, if a creature died this turn, investigate.
|
// Morbid — When Funnel-Web Recluse enters the battlefield, if a creature died this turn, investigate.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new InvestigateEffect())
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new InvestigateEffect())
|
||||||
.withInterveningIf(MorbidCondition.instance).addHint(MorbidHint.instance));
|
.withInterveningIf(MorbidCondition.instance).setAbilityWord(AbilityWord.MORBID).addHint(MorbidHint.instance));
|
||||||
}
|
}
|
||||||
|
|
||||||
private FunnelWebRecluse(final FunnelWebRecluse card) {
|
private FunnelWebRecluse(final FunnelWebRecluse card) {
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ import java.util.UUID;
|
||||||
public final class GaeasCourser extends CardImpl {
|
public final class GaeasCourser extends CardImpl {
|
||||||
|
|
||||||
private static final Condition condition
|
private static final Condition condition
|
||||||
= new CardsInControllerGraveyardCondition(3, StaticFilters.FILTER_CARD_CREATURE);
|
= new CardsInControllerGraveyardCondition(3, StaticFilters.FILTER_CARD_CREATURES);
|
||||||
|
|
||||||
public GaeasCourser(UUID ownerId, CardSetInfo setInfo) {
|
public GaeasCourser(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}");
|
||||||
|
|
|
||||||
|
|
@ -29,8 +29,8 @@ public final class GhirapurOrrery extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of each player's upkeep, if that player has no cards in hand, that player draws three cards.
|
// At the beginning of each player's upkeep, if that player has no cards in hand, that player draws three cards.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
TargetController.ANY, new DrawCardTargetEffect(3), false).withInterveningIf(condition)
|
TargetController.EACH_PLAYER, new DrawCardTargetEffect(3), false
|
||||||
);
|
).withInterveningIf(condition));
|
||||||
}
|
}
|
||||||
|
|
||||||
private GhirapurOrrery(final GhirapurOrrery card) {
|
private GhirapurOrrery(final GhirapurOrrery card) {
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import mage.abilities.effects.common.DamageAllControlledTargetEffect;
|
||||||
import mage.abilities.keyword.ReachAbility;
|
import mage.abilities.keyword.ReachAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.AbilityWord;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SetTargetPointer;
|
import mage.constants.SetTargetPointer;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
|
|
@ -35,7 +36,7 @@ public final class GougedZealot extends CardImpl {
|
||||||
new DamageAllControlledTargetEffect(1)
|
new DamageAllControlledTargetEffect(1)
|
||||||
.setText("{this} deals 1 damage to each creature defending player controls"),
|
.setText("{this} deals 1 damage to each creature defending player controls"),
|
||||||
false, null, SetTargetPointer.PLAYER
|
false, null, SetTargetPointer.PLAYER
|
||||||
).withInterveningIf(DeliriumCondition.instance).addHint(CardTypesInGraveyardCount.YOU.getHint()));
|
).withInterveningIf(DeliriumCondition.instance).setAbilityWord(AbilityWord.DELIRIUM).addHint(CardTypesInGraveyardCount.YOU.getHint()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private GougedZealot(final GougedZealot card) {
|
private GougedZealot(final GougedZealot card) {
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
package mage.cards.g;
|
package mage.cards.g;
|
||||||
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
|
||||||
import mage.abilities.condition.Condition;
|
import mage.abilities.condition.Condition;
|
||||||
import mage.abilities.effects.common.CreateTokenTargetEffect;
|
import mage.abilities.effects.common.CreateTokenTargetEffect;
|
||||||
|
import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
|
|
@ -16,7 +16,6 @@ import mage.players.Player;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class GreenerPastures extends CardImpl {
|
public final class GreenerPastures extends CardImpl {
|
||||||
|
|
@ -26,7 +25,7 @@ public final class GreenerPastures extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of each player's upkeep, if that player controls more lands than each other player, the player creates a 1/1 green Saproling creature token.
|
// At the beginning of each player's upkeep, if that player controls more lands than each other player, the player creates a 1/1 green Saproling creature token.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
TargetController.EACH_PLAYER, new CreateTokenTargetEffect(new SaprolingToken()),
|
TargetController.EACH_PLAYER, new CreateTokenTargetEffect(new SaprolingToken()).setText("the player creates a 1/1 green Saproling creature token"),
|
||||||
false
|
false
|
||||||
).withInterveningIf(ActivePlayerMostLandsCondition.instance));
|
).withInterveningIf(ActivePlayerMostLandsCondition.instance));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,9 +27,9 @@ public final class HiredHexblade extends CardImpl {
|
||||||
this.toughness = new MageInt(2);
|
this.toughness = new MageInt(2);
|
||||||
|
|
||||||
// When Hired Hexblade enters the battlefield, if mana from a Treasure was spent to cast it, you draw a card and you lose 1 life.
|
// When Hired Hexblade enters the battlefield, if mana from a Treasure was spent to cast it, you draw a card and you lose 1 life.
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1))
|
Ability ability = new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1, true))
|
||||||
.withInterveningIf(TreasureSpentToCastCondition.instance);
|
.withInterveningIf(TreasureSpentToCastCondition.instance);
|
||||||
ability.addEffect(new LoseLifeSourceControllerEffect(1));
|
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import mage.abilities.effects.common.GainLifeEffect;
|
||||||
import mage.abilities.hint.common.MorbidHint;
|
import mage.abilities.hint.common.MorbidHint;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.AbilityWord;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
|
|
||||||
|
|
@ -26,7 +27,7 @@ public final class HollowhengeScavenger extends CardImpl {
|
||||||
|
|
||||||
// <i>Morbid</i> — When Hollowhenge Scavenger enters the battlefield, if a creature died this turn, you gain 5 life.
|
// <i>Morbid</i> — When Hollowhenge Scavenger enters the battlefield, if a creature died this turn, you gain 5 life.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(5))
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new GainLifeEffect(5))
|
||||||
.withInterveningIf(MorbidCondition.instance).addHint(MorbidHint.instance));
|
.withInterveningIf(MorbidCondition.instance).setAbilityWord(AbilityWord.MORBID).addHint(MorbidHint.instance));
|
||||||
}
|
}
|
||||||
|
|
||||||
private HollowhengeScavenger(final HollowhengeScavenger card) {
|
private HollowhengeScavenger(final HollowhengeScavenger card) {
|
||||||
|
|
|
||||||
|
|
@ -64,8 +64,8 @@ public final class KeeperOfTheAccord extends CardImpl {
|
||||||
|
|
||||||
enum KeeperOfTheAccordCondition implements Condition {
|
enum KeeperOfTheAccordCondition implements Condition {
|
||||||
|
|
||||||
CREATURES(StaticFilters.FILTER_PERMANENT_CREATURE),
|
CREATURES(StaticFilters.FILTER_PERMANENT_CREATURES),
|
||||||
LANDS(StaticFilters.FILTER_LAND);
|
LANDS(StaticFilters.FILTER_LANDS);
|
||||||
|
|
||||||
private final FilterPermanent filter;
|
private final FilterPermanent filter;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ public final class KeldonStrikeTeam extends CardImpl {
|
||||||
HasteAbility.getInstance(), Duration.WhileOnBattlefield,
|
HasteAbility.getInstance(), Duration.WhileOnBattlefield,
|
||||||
StaticFilters.FILTER_CONTROLLED_CREATURE
|
StaticFilters.FILTER_CONTROLLED_CREATURE
|
||||||
), SourceEnteredThisTurnCondition.DID, "as long as {this} " +
|
), SourceEnteredThisTurnCondition.DID, "as long as {this} " +
|
||||||
"entered the battlefield this turn, creatures you control have haste"
|
"entered this turn, creatures you control have haste"
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ import java.util.*;
|
||||||
*/
|
*/
|
||||||
public final class KodamaOfTheEastTree extends CardImpl {
|
public final class KodamaOfTheEastTree extends CardImpl {
|
||||||
|
|
||||||
private static final FilterPermanent filter = new FilterControlledPermanent();
|
private static final FilterPermanent filter = new FilterControlledPermanent("another permanent you control");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(AnotherPredicate.instance);
|
filter.add(AnotherPredicate.instance);
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ public final class LandTax extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of your upkeep, if an opponent controls more lands than you, you may search your library for up to three basic land cards, reveal them, and put them into your hand. If you do, shuffle your library.
|
// At the beginning of your upkeep, if an opponent controls more lands than you, you may search your library for up to three basic land cards, reveal them, and put them into your hand. If you do, shuffle your library.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new SearchLibraryPutInHandEffect(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new SearchLibraryPutInHandEffect(
|
||||||
new TargetCardInLibrary(3, StaticFilters.FILTER_CARD_BASIC_LANDS), true
|
new TargetCardInLibrary(0, 3, StaticFilters.FILTER_CARD_BASIC_LANDS), true
|
||||||
), true).withInterveningIf(condition));
|
), true).withInterveningIf(condition));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ public final class Lifeline extends CardImpl {
|
||||||
// Whenever a creature dies, if another creature is on the battlefield, return the first card to the battlefield under its owner's control at the beginning of the next end step.
|
// Whenever a creature dies, if another creature is on the battlefield, return the first card to the battlefield under its owner's control at the beginning of the next end step.
|
||||||
this.addAbility(new DiesCreatureTriggeredAbility(
|
this.addAbility(new DiesCreatureTriggeredAbility(
|
||||||
new LifelineEffect(), false,
|
new LifelineEffect(), false,
|
||||||
StaticFilters.FILTER_PERMANENT_CREATURE, true
|
StaticFilters.FILTER_PERMANENT_A_CREATURE, true
|
||||||
).withInterveningIf(condition));
|
).withInterveningIf(condition));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import mage.abilities.effects.common.DestroyTargetEffect;
|
||||||
import mage.abilities.hint.common.MorbidHint;
|
import mage.abilities.hint.common.MorbidHint;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.AbilityWord;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
@ -24,7 +25,7 @@ public final class MaliciousAffliction extends CardImpl {
|
||||||
// <i>Morbid</i> — When you cast Malicious Affliction, if a creature died this turn, you may copy Malicious Affliction and may choose a new target for the copy.
|
// <i>Morbid</i> — When you cast Malicious Affliction, if a creature died this turn, you may copy Malicious Affliction and may choose a new target for the copy.
|
||||||
this.addAbility(new CastSourceTriggeredAbility(
|
this.addAbility(new CastSourceTriggeredAbility(
|
||||||
new CopySourceSpellEffect().setText("copy {this} and may choose a new target for the copy"), true
|
new CopySourceSpellEffect().setText("copy {this} and may choose a new target for the copy"), true
|
||||||
).withInterveningIf(MorbidCondition.instance).addHint(MorbidHint.instance).setRuleAtTheTop(true));
|
).withInterveningIf(MorbidCondition.instance).setAbilityWord(AbilityWord.MORBID).addHint(MorbidHint.instance).setRuleAtTheTop(true));
|
||||||
|
|
||||||
// Destroy target nonblack creature.
|
// Destroy target nonblack creature.
|
||||||
this.getSpellAbility().addEffect(new DestroyTargetEffect());
|
this.getSpellAbility().addEffect(new DestroyTargetEffect());
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ public final class MarduWarshrieker extends CardImpl {
|
||||||
// <em>Raid</em> - When Mardu Warshrieker enters the battlefield, if you attacked this turn, add {R}{W}{B}.
|
// <em>Raid</em> - When Mardu Warshrieker enters the battlefield, if you attacked this turn, add {R}{W}{B}.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new AddManaToManaPoolSourceControllerEffect(
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new AddManaToManaPoolSourceControllerEffect(
|
||||||
new Mana(1, 0, 1, 1, 0, 0, 0, 0)
|
new Mana(1, 0, 1, 1, 0, 0, 0, 0)
|
||||||
)).withInterveningIf(RaidCondition.instance).setAbilityWord(AbilityWord.RAID).addHint(RaidHint.instance), new PlayerAttackedWatcher());
|
).setText("add {R}{W}{B}")).withInterveningIf(RaidCondition.instance).setAbilityWord(AbilityWord.RAID).addHint(RaidHint.instance), new PlayerAttackedWatcher());
|
||||||
}
|
}
|
||||||
|
|
||||||
private MarduWarshrieker(final MarduWarshrieker card) {
|
private MarduWarshrieker(final MarduWarshrieker card) {
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ public final class MaskOfIntolerance extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of each player's upkeep, if there are four or more basic land types among lands that player controls, Mask of Intolerance deals 3 damage to that player.
|
// At the beginning of each player's upkeep, if there are four or more basic land types among lands that player controls, Mask of Intolerance deals 3 damage to that player.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
TargetController.ANY, new DamageTargetEffect(3), false
|
TargetController.EACH_PLAYER, new DamageTargetEffect(3, true, "that player"), false
|
||||||
).withInterveningIf(MaskOfIntoleranceCondition.instance).addHint(DomainHint.instance));
|
).withInterveningIf(MaskOfIntoleranceCondition.instance).addHint(DomainHint.instance));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ public final class MastermindPlum extends CardImpl {
|
||||||
// Whenever you cast a spell, if mana from a Treasure was spent to cast it, you draw a card and you lose 1 life.
|
// Whenever you cast a spell, if mana from a Treasure was spent to cast it, you draw a card and you lose 1 life.
|
||||||
ability = new SpellCastControllerTriggeredAbility(
|
ability = new SpellCastControllerTriggeredAbility(
|
||||||
new DrawCardSourceControllerEffect(1, true),
|
new DrawCardSourceControllerEffect(1, true),
|
||||||
StaticFilters.FILTER_SPELL, false, SetTargetPointer.SPELL
|
StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.SPELL
|
||||||
).withInterveningIf(MastermindPlumCondition.instance);
|
).withInterveningIf(MastermindPlumCondition.instance);
|
||||||
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
|
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class MirrorSigilSergeant extends CardImpl {
|
public final class MirrorSigilSergeant extends CardImpl {
|
||||||
|
|
||||||
private static final FilterControlledPermanent filter = new FilterControlledPermanent("you control blue permanent");
|
private static final FilterControlledPermanent filter = new FilterControlledPermanent("you control a blue permanent");
|
||||||
|
|
||||||
static {
|
static {
|
||||||
filter.add(new ColorPredicate(ObjectColor.BLUE));
|
filter.add(new ColorPredicate(ObjectColor.BLUE));
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ public final class MossPitSkeleton extends CardImpl {
|
||||||
class MossPitSkeletonTriggeredAbility extends TriggeredAbilityImpl {
|
class MossPitSkeletonTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
MossPitSkeletonTriggeredAbility() {
|
MossPitSkeletonTriggeredAbility() {
|
||||||
super(Zone.GRAVEYARD, new PutOnLibrarySourceEffect(true).setText("put {this} on top of your library"), true);
|
super(Zone.GRAVEYARD, new PutOnLibrarySourceEffect(true).setText("put this card on top of your library"), true);
|
||||||
this.withInterveningIf(SourceInGraveyardCondition.instance);
|
this.withInterveningIf(SourceInGraveyardCondition.instance);
|
||||||
setTriggerPhrase("Whenever one or more +1/+1 counters are put on a creature you control, ");
|
setTriggerPhrase("Whenever one or more +1/+1 counters are put on a creature you control, ");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,6 @@ enum NetherSpiritCondition implements Condition {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "{this} is the only creature card in your graveyard";
|
return "this card is the only creature card in your graveyard";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ public final class Nihilith extends CardImpl {
|
||||||
|
|
||||||
// Whenever a card is put into an opponent's graveyard from anywhere, if Nihilith is suspended, you may remove a time counter from Nihilith.
|
// Whenever a card is put into an opponent's graveyard from anywhere, if Nihilith is suspended, you may remove a time counter from Nihilith.
|
||||||
this.addAbility(new PutCardIntoGraveFromAnywhereAllTriggeredAbility(
|
this.addAbility(new PutCardIntoGraveFromAnywhereAllTriggeredAbility(
|
||||||
Zone.EXILED, new RemoveCounterSourceEffect(CounterType.TIME.createInstance()), true,
|
Zone.EXILED, new RemoveCounterSourceEffect(CounterType.TIME.createInstance()).setText("remove a time counter from this card"), true,
|
||||||
StaticFilters.FILTER_CARD_A, TargetController.OPPONENT, SetTargetPointer.NONE
|
StaticFilters.FILTER_CARD_A, TargetController.OPPONENT, SetTargetPointer.NONE
|
||||||
).withInterveningIf(SuspendedCondition.instance));
|
).withInterveningIf(SuspendedCondition.instance));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,11 @@ enum OchreJellyCondition implements Condition {
|
||||||
.filter(permanent -> permanent.getCounters(game).getCount(CounterType.P1P1) >= 2)
|
.filter(permanent -> permanent.getCounters(game).getCount(CounterType.P1P1) >= 2)
|
||||||
.isPresent();
|
.isPresent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "it had two or more +1/+1 counters on it";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class OchreJellyEffect extends OneShotEffect {
|
class OchreJellyEffect extends OneShotEffect {
|
||||||
|
|
|
||||||
|
|
@ -89,13 +89,13 @@ class OldGrowthTrollReturnEffect extends OneShotEffect {
|
||||||
|
|
||||||
OldGrowthTrollReturnEffect() {
|
OldGrowthTrollReturnEffect() {
|
||||||
super(Outcome.PutCardInPlay);
|
super(Outcome.PutCardInPlay);
|
||||||
|
staticText = "return it to the battlefield. It's an Aura enchantment with enchant Forest you control " +
|
||||||
|
"and \"Enchanted Forest has '{T}: Add {G}{G}' and '{1}, {T}, Sacrifice this land: " +
|
||||||
|
"Create a tapped 4/4 green Troll Warrior creature token with trample.'\"";
|
||||||
}
|
}
|
||||||
|
|
||||||
private OldGrowthTrollReturnEffect(final OldGrowthTrollReturnEffect effect) {
|
private OldGrowthTrollReturnEffect(final OldGrowthTrollReturnEffect effect) {
|
||||||
super(effect);
|
super(effect);
|
||||||
staticText = "return it to the battlefield. It's an Aura enchantment with enchant Forest you control " +
|
|
||||||
"and \"Enchanted Forest has '{T}: Add {G}{G}' and '{1}, {T}, Sacrifice this land: " +
|
|
||||||
"Create a tapped 4/4 green Troll Warrior creature token with trample.'\"";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ public final class OrvarTheAllForm extends CardImpl {
|
||||||
// Whenever you cast an instant or sorcery spell, if it targets one or more other permanents you control, create a token that's a copy of one of those permanents.
|
// Whenever you cast an instant or sorcery spell, if it targets one or more other permanents you control, create a token that's a copy of one of those permanents.
|
||||||
this.addAbility(new SpellCastControllerTriggeredAbility(
|
this.addAbility(new SpellCastControllerTriggeredAbility(
|
||||||
new OrvarTheAllFormEffect(),
|
new OrvarTheAllFormEffect(),
|
||||||
StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY,
|
StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY,
|
||||||
false, SetTargetPointer.SPELL
|
false, SetTargetPointer.SPELL
|
||||||
).withInterveningIf(OrvarTheAllFormCondition.instance));
|
).withInterveningIf(OrvarTheAllFormCondition.instance));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class OversoldCemetery extends CardImpl {
|
public final class OversoldCemetery extends CardImpl {
|
||||||
|
|
||||||
private static final Condition condition = new CardsInControllerGraveyardCondition(4, StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD);
|
private static final Condition condition = new CardsInControllerGraveyardCondition(4, StaticFilters.FILTER_CARD_CREATURES);
|
||||||
|
|
||||||
public OversoldCemetery(UUID ownerId, CardSetInfo setInfo) {
|
public OversoldCemetery(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}");
|
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}");
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ class PardicDragonEffect extends OneShotEffect {
|
||||||
|
|
||||||
PardicDragonEffect() {
|
PardicDragonEffect() {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
this.staticText = "that player may put a time counter on {this}";
|
this.staticText = "that player may put a time counter on this card";
|
||||||
}
|
}
|
||||||
|
|
||||||
private PardicDragonEffect(final PardicDragonEffect effect) {
|
private PardicDragonEffect(final PardicDragonEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ public final class PaupersCage extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of each opponent's upkeep, if that player has two or fewer cards in hand, Paupers' Cage deals 2 damage to that player.
|
// At the beginning of each opponent's upkeep, if that player has two or fewer cards in hand, Paupers' Cage deals 2 damage to that player.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
TargetController.OPPONENT, new DamageTargetEffect(2), false
|
TargetController.OPPONENT, new DamageTargetEffect(2, true, "that player"), false
|
||||||
).withInterveningIf(condition));
|
).withInterveningIf(condition));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ public final class PhyrexianTotem extends CardImpl {
|
||||||
// Whenever {this} is dealt damage, if it's a creature, sacrifice that many permanents.
|
// Whenever {this} is dealt damage, if it's a creature, sacrifice that many permanents.
|
||||||
this.addAbility(new DealtDamageToSourceTriggeredAbility(
|
this.addAbility(new DealtDamageToSourceTriggeredAbility(
|
||||||
new SacrificeControllerEffect(StaticFilters.FILTER_PERMANENTS, SavedDamageValue.MANY, ""), false
|
new SacrificeControllerEffect(StaticFilters.FILTER_PERMANENTS, SavedDamageValue.MANY, ""), false
|
||||||
).withInterveningIf(PhyrexianTotemCondition.instance));
|
).withInterveningIf(PhyrexianTotemCondition.instance).setTriggerPhrase("Whenever this permanent is dealt damage, "));
|
||||||
}
|
}
|
||||||
|
|
||||||
private PhyrexianTotem(final PhyrexianTotem card) {
|
private PhyrexianTotem(final PhyrexianTotem card) {
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ public final class PlanarCollapse extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of your upkeep, if there are four or more creatures on the battlefield, sacrifice Planar Collapse and destroy all creatures. They can't be regenerated.
|
// At the beginning of your upkeep, if there are four or more creatures on the battlefield, sacrifice Planar Collapse and destroy all creatures. They can't be regenerated.
|
||||||
Ability ability = new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceEffect()).withInterveningIf(condition);
|
Ability ability = new BeginningOfUpkeepTriggeredAbility(new SacrificeSourceEffect()).withInterveningIf(condition);
|
||||||
ability.addEffect(new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_CREATURE, true).concatBy("and"));
|
ability.addEffect(new DestroyAllEffect(StaticFilters.FILTER_PERMANENT_CREATURES, true).concatBy("and"));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ public final class ProgenitorMimic extends CardImpl {
|
||||||
new BeginningOfUpkeepTriggeredAbility(
|
new BeginningOfUpkeepTriggeredAbility(
|
||||||
new CreateTokenCopySourceEffect().setText("create a token that's a copy of this creature")
|
new CreateTokenCopySourceEffect().setText("create a token that's a copy of this creature")
|
||||||
).withInterveningIf(condition)
|
).withInterveningIf(condition)
|
||||||
)).setText("as a copy of any creature on the battlefield except it has " +
|
)).setText("as a copy of any creature on the battlefield, except it has " +
|
||||||
"\"At the beginning of your upkeep, if this creature isn't a token, " +
|
"\"At the beginning of your upkeep, if this creature isn't a token, " +
|
||||||
"create a token that's a copy of this creature.\""), true
|
"create a token that's a copy of this creature.\""), true
|
||||||
));
|
));
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ public final class PyreZombie extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of your upkeep, if Pyre Zombie is in your graveyard, you may pay {1}{B}{B}. If you do, return Pyre Zombie to your hand.
|
// At the beginning of your upkeep, if Pyre Zombie is in your graveyard, you may pay {1}{B}{B}. If you do, return Pyre Zombie to your hand.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD,
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD,
|
||||||
TargetController.YOU, new DoIfCostPaid(new ReturnToHandSourceEffect().setText("return {this} to your hand"), new ManaCostsImpl<>("{1}{B}{B}")),
|
TargetController.YOU, new DoIfCostPaid(new ReturnToHandSourceEffect().setText("return it to your hand"), new ManaCostsImpl<>("{1}{B}{B}")),
|
||||||
false).withInterveningIf(SourceInGraveyardCondition.instance));
|
false).withInterveningIf(SourceInGraveyardCondition.instance));
|
||||||
|
|
||||||
// {1}{R}{R}, Sacrifice Pyre Zombie: Pyre Zombie deals 2 damage to any target.
|
// {1}{R}{R}, Sacrifice Pyre Zombie: Pyre Zombie deals 2 damage to any target.
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ public final class PyrewildShaman extends CardImpl {
|
||||||
|
|
||||||
// Whenever one or more creatures you control deal combat damage to a player, if Pyrewild Shaman is in your graveyard, you may pay {3}. If you do, return Pyrewild Shaman to your hand.
|
// Whenever one or more creatures you control deal combat damage to a player, if Pyrewild Shaman is in your graveyard, you may pay {3}. If you do, return Pyrewild Shaman to your hand.
|
||||||
this.addAbility(new OneOrMoreCombatDamagePlayerTriggeredAbility(Zone.GRAVEYARD, new DoIfCostPaid(
|
this.addAbility(new OneOrMoreCombatDamagePlayerTriggeredAbility(Zone.GRAVEYARD, new DoIfCostPaid(
|
||||||
new ReturnToHandSourceEffect().setText("return {this} to your hand"),
|
new ReturnToHandSourceEffect().setText("return this card to your hand"),
|
||||||
new ManaCostsImpl<>("{3}")
|
new ManaCostsImpl<>("{3}")
|
||||||
), StaticFilters.FILTER_PERMANENT_CREATURES, SetTargetPointer.NONE, false)
|
), StaticFilters.FILTER_PERMANENT_CREATURES, SetTargetPointer.NONE, false)
|
||||||
.withInterveningIf(SourceInGraveyardCondition.instance));
|
.withInterveningIf(SourceInGraveyardCondition.instance));
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,9 @@ public final class QueenMarchesa extends CardImpl {
|
||||||
|
|
||||||
// Deathtouch
|
// Deathtouch
|
||||||
this.addAbility(DeathtouchAbility.getInstance());
|
this.addAbility(DeathtouchAbility.getInstance());
|
||||||
|
|
||||||
// Haste
|
// Haste
|
||||||
|
|
||||||
this.addAbility(HasteAbility.getInstance());
|
this.addAbility(HasteAbility.getInstance());
|
||||||
// When Queen Marchesa enters the battlefield, you become the monarch.
|
// When Queen Marchesa enters the battlefield, you become the monarch.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new BecomesMonarchSourceEffect()).addHint(MonarchHint.instance));
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new BecomesMonarchSourceEffect()).addHint(MonarchHint.instance));
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ public final class RazorPendulum extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of each player’s end step, if that player has 5 or less life, Razor Pendulum deals 2 damage to that player.
|
// At the beginning of each player’s end step, if that player has 5 or less life, Razor Pendulum deals 2 damage to that player.
|
||||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
||||||
TargetController.ANY,
|
TargetController.EACH_PLAYER,
|
||||||
new DamageTargetEffect(2, true, "that player"),
|
new DamageTargetEffect(2, true, "that player"),
|
||||||
false, condition
|
false, condition
|
||||||
).withTargetPointerSet(true));
|
).withTargetPointerSet(true));
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@ class ReservoirKrakenEffect extends OneShotEffect {
|
||||||
|
|
||||||
public ReservoirKrakenEffect() {
|
public ReservoirKrakenEffect() {
|
||||||
super(Outcome.Tap);
|
super(Outcome.Tap);
|
||||||
this.staticText = "any opponent may tap an untapped creature they control. If they do, tap {this} and create a 1/1 blue Fish creature token with \"This creature can't be blocked.\"";
|
this.staticText = "any opponent may tap an untapped creature they control. If they do, tap {this} and create a 1/1 blue Fish creature token with \"This token can't be blocked.\"";
|
||||||
}
|
}
|
||||||
|
|
||||||
private ReservoirKrakenEffect(final ReservoirKrakenEffect effect) {
|
private ReservoirKrakenEffect(final ReservoirKrakenEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -60,8 +60,8 @@ class RetrieverPhoenixEffect extends ReplacementEffectImpl {
|
||||||
|
|
||||||
RetrieverPhoenixEffect() {
|
RetrieverPhoenixEffect() {
|
||||||
super(Duration.WhileInGraveyard, Outcome.PutCreatureInPlay);
|
super(Duration.WhileInGraveyard, Outcome.PutCreatureInPlay);
|
||||||
staticText = "as long as {this} is in your graveyard, if you would learn, " +
|
staticText = "as long as this card is in your graveyard, if you would learn, " +
|
||||||
"you may instead return {this} to the battlefield";
|
"you may instead return this card to the battlefield";
|
||||||
}
|
}
|
||||||
|
|
||||||
private RetrieverPhoenixEffect(final RetrieverPhoenixEffect effect) {
|
private RetrieverPhoenixEffect(final RetrieverPhoenixEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,11 @@ enum RobberOfTheRichAttacksCondition implements Condition {
|
||||||
&& player != null
|
&& player != null
|
||||||
&& controller.getHand().size() < player.getHand().size();
|
&& controller.getHand().size() < player.getHand().size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "defending player has more cards in hand than you";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class RogueAttackedThisTurnCondition implements Condition {
|
class RogueAttackedThisTurnCondition implements Condition {
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import mage.abilities.keyword.FirstStrikeAbility;
|
||||||
import mage.abilities.keyword.TrampleAbility;
|
import mage.abilities.keyword.TrampleAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.AbilityWord;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
|
|
@ -33,7 +34,7 @@ public final class SabertoothOutrider extends CardImpl {
|
||||||
// <i>Formidable</i> — Whenever Sabertooth Outrider attacks, if creatures you control have total power 8 or greater, Sabertooth Outrider gains first strike until end of turn.
|
// <i>Formidable</i> — Whenever Sabertooth Outrider attacks, if creatures you control have total power 8 or greater, Sabertooth Outrider gains first strike until end of turn.
|
||||||
this.addAbility(new AttacksTriggeredAbility(new GainAbilitySourceEffect(
|
this.addAbility(new AttacksTriggeredAbility(new GainAbilitySourceEffect(
|
||||||
FirstStrikeAbility.getInstance(), Duration.EndOfTurn
|
FirstStrikeAbility.getInstance(), Duration.EndOfTurn
|
||||||
)).withInterveningIf(FormidableCondition.instance));
|
)).withInterveningIf(FormidableCondition.instance).setAbilityWord(AbilityWord.FORMIDABLE));
|
||||||
}
|
}
|
||||||
|
|
||||||
private SabertoothOutrider(final SabertoothOutrider card) {
|
private SabertoothOutrider(final SabertoothOutrider card) {
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ public final class SandScout extends CardImpl {
|
||||||
filter.add(SubType.DESERT.getPredicate());
|
filter.add(SubType.DESERT.getPredicate());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Condition condition = new OpponentControlsMoreCondition(StaticFilters.FILTER_LAND);
|
private static final Condition condition = new OpponentControlsMoreCondition(StaticFilters.FILTER_LANDS);
|
||||||
|
|
||||||
public SandScout(UUID ownerId, CardSetInfo setInfo) {
|
public SandScout(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}");
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ public final class ScabClanBerserker extends CardImpl {
|
||||||
this.addAbility(new SpellCastOpponentTriggeredAbility(
|
this.addAbility(new SpellCastOpponentTriggeredAbility(
|
||||||
Zone.BATTLEFIELD,
|
Zone.BATTLEFIELD,
|
||||||
new DamageTargetEffect(2, true, "that player"),
|
new DamageTargetEffect(2, true, "that player"),
|
||||||
StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.PLAYER
|
StaticFilters.FILTER_SPELL_A_NON_CREATURE, false, SetTargetPointer.PLAYER
|
||||||
).withInterveningIf(RenownedSourceCondition.THIS));
|
).withInterveningIf(RenownedSourceCondition.THIS));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ public final class ScoutingHawk extends CardImpl {
|
||||||
filter.add(SubType.PLAINS.getPredicate());
|
filter.add(SubType.PLAINS.getPredicate());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Condition condition = new OpponentControlsMoreCondition(StaticFilters.FILTER_LAND);
|
private static final Condition condition = new OpponentControlsMoreCondition(StaticFilters.FILTER_LANDS);
|
||||||
|
|
||||||
public ScoutingHawk(UUID ownerId, CardSetInfo setInfo) {
|
public ScoutingHawk(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}");
|
||||||
|
|
|
||||||
|
|
@ -41,8 +41,8 @@ public final class ShelteredValley extends CardImpl {
|
||||||
// If Sheltered Valley would enter the battlefield, instead sacrifice each other permanent named Sheltered Valley you control, then put Sheltered Valley onto the battlefield.
|
// If Sheltered Valley would enter the battlefield, instead sacrifice each other permanent named Sheltered Valley you control, then put Sheltered Valley onto the battlefield.
|
||||||
this.addAbility(new SimpleStaticAbility(
|
this.addAbility(new SimpleStaticAbility(
|
||||||
Zone.ALL, new EnterBattlefieldPayCostOrPutGraveyardEffect(new SacrificeAllCost(filter))
|
Zone.ALL, new EnterBattlefieldPayCostOrPutGraveyardEffect(new SacrificeAllCost(filter))
|
||||||
.setText("If {this} would enter the battlefield, instead sacrifice each other " +
|
.setText("If {this} would enter, instead sacrifice each other permanent " +
|
||||||
"permanent named Sheltered Valley you control, then put {this} onto the battlefield.")
|
"named Sheltered Valley you control, then put {this} onto the battlefield.")
|
||||||
));
|
));
|
||||||
|
|
||||||
// At the beginning of your upkeep, if you control three or fewer lands, you gain 1 life.
|
// At the beginning of your upkeep, if you control three or fewer lands, you gain 1 life.
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ public final class ShriekingAffliction extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of each opponent's upkeep, if that player has one or fewer cards in hand, they lose 3 life.
|
// At the beginning of each opponent's upkeep, if that player has one or fewer cards in hand, they lose 3 life.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
Zone.BATTLEFIELD, TargetController.OPPONENT, new LoseLifeTargetEffect(3), false
|
Zone.BATTLEFIELD, TargetController.OPPONENT, new LoseLifeTargetEffect(3).setText("they lose 3 life"), false
|
||||||
).withInterveningIf(condition));
|
).withInterveningIf(condition));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ public final class SidequestPlayBlitzball extends CardImpl {
|
||||||
this.addAbility(new TransformAbility());
|
this.addAbility(new TransformAbility());
|
||||||
ability = new EndOfCombatTriggeredAbility(
|
ability = new EndOfCombatTriggeredAbility(
|
||||||
new TransformSourceEffect(), TargetController.YOU, false
|
new TransformSourceEffect(), TargetController.YOU, false
|
||||||
).withInterveningIf(SidequestPlayBlitzballCondition.instance);
|
).withInterveningIf(SidequestPlayBlitzballCondition.instance).setTriggerPhrase("At the end of combat on your turn, ");
|
||||||
ability.addEffect(new SidequestPlayBlitzballEffect());
|
ability.addEffect(new SidequestPlayBlitzballEffect());
|
||||||
this.addAbility(ability, new SidequestPlayBlitzballWatcher());
|
this.addAbility(ability, new SidequestPlayBlitzballWatcher());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -67,6 +67,7 @@ class SiegeGangLieutenantEffect extends OneShotEffect {
|
||||||
|
|
||||||
SiegeGangLieutenantEffect() {
|
SiegeGangLieutenantEffect() {
|
||||||
super(Outcome.Benefit);
|
super(Outcome.Benefit);
|
||||||
|
staticText = "create two 1/1 red Goblin creature tokens. Those tokens gain haste until end of turn";
|
||||||
}
|
}
|
||||||
|
|
||||||
private SiegeGangLieutenantEffect(final SiegeGangLieutenantEffect effect) {
|
private SiegeGangLieutenantEffect(final SiegeGangLieutenantEffect effect) {
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ public final class Skizzik extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of the end step, if Skizzik wasn't kicked, sacrifice it.
|
// At the beginning of the end step, if Skizzik wasn't kicked, sacrifice it.
|
||||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
||||||
TargetController.NEXT, new SacrificeSourceEffect(), false, condition
|
TargetController.NEXT, new SacrificeSourceEffect().setText("sacrifice it"), false, condition
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ enum SkyclaveShadeCondition implements Condition {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "{this} is in your graveyard and it's your turn";
|
return "this card is in your graveyard and it's your turn";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ import java.util.UUID;
|
||||||
*/
|
*/
|
||||||
public final class SorinOfHouseMarkov extends CardImpl {
|
public final class SorinOfHouseMarkov extends CardImpl {
|
||||||
|
|
||||||
private static final Condition condition = new YouGainedLifeCondition(ComparisonType.OR_GREATER, 3);
|
private static final Condition condition = new YouGainedLifeCondition(ComparisonType.MORE_THAN, 2);
|
||||||
private static final Hint hint = new ConditionHint(condition);
|
private static final Hint hint = new ConditionHint(condition);
|
||||||
|
|
||||||
public SorinOfHouseMarkov(UUID ownerId, CardSetInfo setInfo) {
|
public SorinOfHouseMarkov(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
|
@ -45,7 +45,7 @@ public final class SorinOfHouseMarkov extends CardImpl {
|
||||||
// At the beginning of your postcombat main phase, if you gained 3 or more life this turn, exile Sorin of House Markov, then return him to the battlefield transformed under his owner's control.
|
// At the beginning of your postcombat main phase, if you gained 3 or more life this turn, exile Sorin of House Markov, then return him to the battlefield transformed under his owner's control.
|
||||||
this.addAbility(new TransformAbility());
|
this.addAbility(new TransformAbility());
|
||||||
this.addAbility(new BeginningOfPostcombatMainTriggeredAbility(
|
this.addAbility(new BeginningOfPostcombatMainTriggeredAbility(
|
||||||
new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD_TRANSFORMED, Pronoun.SHE), false
|
new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD_TRANSFORMED, Pronoun.HE), false
|
||||||
).withInterveningIf(condition).addHint(hint), new PlayerGainedLifeWatcher());
|
).withInterveningIf(condition).addHint(hint), new PlayerGainedLifeWatcher());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.CantBlockAbility;
|
import mage.abilities.common.CantBlockAbility;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
import mage.abilities.condition.common.CastFromEverywhereSourceCondition;
|
import mage.abilities.condition.common.CastFromHandSourcePermanentCondition;
|
||||||
import mage.abilities.dynamicvalue.DynamicValue;
|
import mage.abilities.dynamicvalue.DynamicValue;
|
||||||
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
|
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
|
||||||
import mage.abilities.effects.common.DamageTargetEffect;
|
import mage.abilities.effects.common.DamageTargetEffect;
|
||||||
|
|
@ -37,7 +37,7 @@ public final class SoulhunterRakshasa extends CardImpl {
|
||||||
|
|
||||||
// When Soulhunter Rakshasa enters the battlefield, if you cast it from your hand, it deals 1 damage to target opponent for each Swamp you control.
|
// When Soulhunter Rakshasa enters the battlefield, if you cast it from your hand, it deals 1 damage to target opponent for each Swamp you control.
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(xValue))
|
Ability ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(xValue))
|
||||||
.withInterveningIf(CastFromEverywhereSourceCondition.instance);
|
.withInterveningIf(CastFromHandSourcePermanentCondition.instance);
|
||||||
ability.addTarget(new TargetOpponent());
|
ability.addTarget(new TargetOpponent());
|
||||||
this.addAbility(ability, new CastFromHandWatcher());
|
this.addAbility(ability, new CastFromHandWatcher());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ public final class SpiritualSanctuary extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of each player's upkeep, if that player controls a Plains, they gain 1 life.
|
// At the beginning of each player's upkeep, if that player controls a Plains, they gain 1 life.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
TargetController.ANY, new GainLifeTargetEffect(1).setText("they gain 1 life"), false
|
TargetController.EACH_PLAYER, new GainLifeTargetEffect(1).setText("they gain 1 life"), false
|
||||||
).withInterveningIf(condition));
|
).withInterveningIf(condition));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,7 @@ import mage.abilities.keyword.HasteAbility;
|
||||||
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.*;
|
||||||
import mage.constants.Duration;
|
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.constants.SuperType;
|
|
||||||
import mage.target.common.TargetControlledCreaturePermanent;
|
import mage.target.common.TargetControlledCreaturePermanent;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -34,7 +31,7 @@ public final class SurrakTheHuntCaller extends CardImpl {
|
||||||
HasteAbility.getInstance(), Duration.EndOfTurn
|
HasteAbility.getInstance(), Duration.EndOfTurn
|
||||||
)).withInterveningIf(FormidableCondition.instance);
|
)).withInterveningIf(FormidableCondition.instance);
|
||||||
ability.addTarget(new TargetControlledCreaturePermanent());
|
ability.addTarget(new TargetControlledCreaturePermanent());
|
||||||
this.addAbility(ability);
|
this.addAbility(ability.setAbilityWord(AbilityWord.FORMIDABLE));
|
||||||
}
|
}
|
||||||
|
|
||||||
private SurrakTheHuntCaller(final SurrakTheHuntCaller card) {
|
private SurrakTheHuntCaller(final SurrakTheHuntCaller card) {
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
import mage.abilities.condition.common.KickedCondition;
|
import mage.abilities.condition.common.KickedCondition;
|
||||||
import mage.abilities.effects.common.ReturnToHandTargetEffect;
|
import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect;
|
||||||
import mage.abilities.keyword.KickerAbility;
|
import mage.abilities.keyword.KickerAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
|
@ -32,7 +32,7 @@ public final class TazeemRoilmage extends CardImpl {
|
||||||
this.addAbility(new KickerAbility("{4}"));
|
this.addAbility(new KickerAbility("{4}"));
|
||||||
|
|
||||||
// When Tazeem Roilmage enters the battlefield, if it was kicked, return target instant or sorcery card from your graveyard to your hand.
|
// When Tazeem Roilmage enters the battlefield, if it was kicked, return target instant or sorcery card from your graveyard to your hand.
|
||||||
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnToHandTargetEffect()).withInterveningIf(KickedCondition.ONCE);
|
Ability ability = new EntersBattlefieldTriggeredAbility(new ReturnFromGraveyardToHandTargetEffect()).withInterveningIf(KickedCondition.ONCE);
|
||||||
ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY_FROM_YOUR_GRAVEYARD));
|
ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY_FROM_YOUR_GRAVEYARD));
|
||||||
this.addAbility(ability);
|
this.addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ public final class TetsuoImperialChampion extends CardImpl {
|
||||||
static final GreatestAmongPermanentsValue xValue = new GreatestAmongPermanentsValue(GreatestAmongPermanentsValue.Quality.ManaValue, filterEquipment);
|
static final GreatestAmongPermanentsValue xValue = new GreatestAmongPermanentsValue(GreatestAmongPermanentsValue.Quality.ManaValue, filterEquipment);
|
||||||
private static final FilterCard filter = new FilterInstantOrSorceryCard(
|
private static final FilterCard filter = new FilterInstantOrSorceryCard(
|
||||||
"an instant or sorcery spell from your hand with mana value " +
|
"an instant or sorcery spell from your hand with mana value " +
|
||||||
"less than or equal to the highest mana value among Equipment attached to {this}"
|
"less than or equal to the greatest mana value among Equipment attached to {this}"
|
||||||
);
|
);
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
|
@ -62,7 +62,7 @@ public final class TetsuoImperialChampion extends CardImpl {
|
||||||
new DamageTargetEffect(xValue, "it")
|
new DamageTargetEffect(xValue, "it")
|
||||||
.setText("{this} deals damage equal to the greatest mana value " +
|
.setText("{this} deals damage equal to the greatest mana value " +
|
||||||
"among Equipment attached to it to any target")
|
"among Equipment attached to it to any target")
|
||||||
).setTriggerPhrase("Whenever {this} attacks, if it's equipped, ").withInterveningIf(EquippedSourceCondition.instance);
|
).withInterveningIf(EquippedSourceCondition.instance);
|
||||||
ability.addTarget(new TargetAnyTarget());
|
ability.addTarget(new TargetAnyTarget());
|
||||||
|
|
||||||
// * You may cast an instant or sorcery spell from your hand with mana value less than or equal to the greatest mana value among Equipment attached to Tetsuo without paying its mana cost.
|
// * You may cast an instant or sorcery spell from your hand with mana value less than or equal to the greatest mana value among Equipment attached to Tetsuo without paying its mana cost.
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ public final class TinybonesTrinketThief extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of each end step, if an opponent discarded a card this turn, you draw a card and you lose 1 life.
|
// At the beginning of each end step, if an opponent discarded a card this turn, you draw a card and you lose 1 life.
|
||||||
Ability ability = new BeginningOfEndStepTriggeredAbility(
|
Ability ability = new BeginningOfEndStepTriggeredAbility(
|
||||||
TargetController.EACH_PLAYER, new DrawCardSourceControllerEffect(1, true),
|
TargetController.ANY, new DrawCardSourceControllerEffect(1, true),
|
||||||
false, TinybonesTrinketThiefCondition.instance
|
false, TinybonesTrinketThiefCondition.instance
|
||||||
);
|
);
|
||||||
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
|
ability.addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and"));
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package mage.cards.t;
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.condition.Condition;
|
import mage.abilities.condition.Condition;
|
||||||
|
import mage.abilities.condition.common.MetalcraftCondition;
|
||||||
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
|
||||||
import mage.abilities.decorator.ConditionalOneShotEffect;
|
import mage.abilities.decorator.ConditionalOneShotEffect;
|
||||||
import mage.abilities.effects.common.AddContinuousEffectToGame;
|
import mage.abilities.effects.common.AddContinuousEffectToGame;
|
||||||
|
|
@ -14,10 +15,8 @@ import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.ComparisonType;
|
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.filter.StaticFilters;
|
|
||||||
import mage.filter.common.FilterControlledArtifactPermanent;
|
import mage.filter.common.FilterControlledArtifactPermanent;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -30,9 +29,6 @@ public final class ToolcraftExemplar extends CardImpl {
|
||||||
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
|
private static final Condition condition = new PermanentsOnTheBattlefieldCondition(
|
||||||
new FilterControlledArtifactPermanent("you control an artifact")
|
new FilterControlledArtifactPermanent("you control an artifact")
|
||||||
);
|
);
|
||||||
private static final Condition condition2 = new PermanentsOnTheBattlefieldCondition(
|
|
||||||
StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT, ComparisonType.MORE_THAN, 2
|
|
||||||
);
|
|
||||||
|
|
||||||
public ToolcraftExemplar(UUID ownerId, CardSetInfo setInfo) {
|
public ToolcraftExemplar(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}");
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}");
|
||||||
|
|
@ -48,7 +44,7 @@ public final class ToolcraftExemplar extends CardImpl {
|
||||||
)).withInterveningIf(condition);
|
)).withInterveningIf(condition);
|
||||||
ability.addEffect(new ConditionalOneShotEffect(new AddContinuousEffectToGame(
|
ability.addEffect(new ConditionalOneShotEffect(new AddContinuousEffectToGame(
|
||||||
new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn)
|
new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn)
|
||||||
), condition2, "If you control at least 3 artifacts, it also gains first strike until end of turn"));
|
), MetalcraftCondition.instance, "If you control three or more artifacts, it also gains first strike until end of turn"));
|
||||||
this.addAbility(ability.addHint(ArtifactYouControlHint.instance));
|
this.addAbility(ability.addHint(ArtifactYouControlHint.instance));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ public final class UnstoppableSlasher extends CardImpl {
|
||||||
new ReturnSourceFromGraveyardToBattlefieldWithCounterEffect(
|
new ReturnSourceFromGraveyardToBattlefieldWithCounterEffect(
|
||||||
CounterType.STUN.createInstance(2),
|
CounterType.STUN.createInstance(2),
|
||||||
true, true, false, false
|
true, true, false, false
|
||||||
), false
|
).setText("return it to the battlefield tapped under its owner's control with two stun counters on it")
|
||||||
).withInterveningIf(UnstoppableSlasherCondition.instance));
|
).withInterveningIf(UnstoppableSlasherCondition.instance));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ public final class UrborgStalker extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of each player's upkeep, if that player controls a nonblack, nonland permanent, Urborg Stalker deals 1 damage to that player.
|
// At the beginning of each player's upkeep, if that player controls a nonblack, nonland permanent, Urborg Stalker deals 1 damage to that player.
|
||||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||||
TargetController.ANY, new DamageTargetEffect(1, true, "that player"), false
|
TargetController.EACH_PLAYER, new DamageTargetEffect(1, true, "that player"), false
|
||||||
).withInterveningIf(condition));
|
).withInterveningIf(condition));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ public final class VampireSocialite extends CardImpl {
|
||||||
filter, CounterType.P1P1.createInstance(), true
|
filter, CounterType.P1P1.createInstance(), true
|
||||||
), OpponentsLostLifeCondition.instance
|
), OpponentsLostLifeCondition.instance
|
||||||
).setText("as long as an opponent lost life this turn, " +
|
).setText("as long as an opponent lost life this turn, " +
|
||||||
"each other Vampire you control enters the battlefield with an additional +1/+1 counter on it")));
|
"each other Vampire you control enters with an additional +1/+1 counter on it")));
|
||||||
}
|
}
|
||||||
|
|
||||||
private VampireSocialite(final VampireSocialite card) {
|
private VampireSocialite(final VampireSocialite card) {
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ class VengefulPharaohTriggeredAbility extends TriggeredAbilityImpl implements Ba
|
||||||
VengefulPharaohTriggeredAbility() {
|
VengefulPharaohTriggeredAbility() {
|
||||||
super(Zone.GRAVEYARD, new DestroyTargetEffect(), false);
|
super(Zone.GRAVEYARD, new DestroyTargetEffect(), false);
|
||||||
this.addTarget(new TargetAttackingCreature());
|
this.addTarget(new TargetAttackingCreature());
|
||||||
this.addEffect(new PutOnLibrarySourceEffect(true).setText(", then put {this} on top of your library"));
|
this.addEffect(new PutOnLibrarySourceEffect(true).setText(", then put this card on top of your library"));
|
||||||
this.withInterveningIf(SourceInGraveyardCondition.instance);
|
this.withInterveningIf(SourceInGraveyardCondition.instance);
|
||||||
setTriggerPhrase("Whenever combat damage is dealt to you or a planeswalker you control, ");
|
setTriggerPhrase("Whenever combat damage is dealt to you or a planeswalker you control, ");
|
||||||
}
|
}
|
||||||
|
|
@ -95,5 +95,4 @@ class VengefulPharaohTriggeredAbility extends TriggeredAbilityImpl implements Ba
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ import java.util.UUID;
|
||||||
public final class ViconiaDrowApostate extends CardImpl {
|
public final class ViconiaDrowApostate extends CardImpl {
|
||||||
|
|
||||||
private static final Condition condition
|
private static final Condition condition
|
||||||
= new CardsInControllerGraveyardCondition(4, StaticFilters.FILTER_CARD_CREATURE);
|
= new CardsInControllerGraveyardCondition(4, StaticFilters.FILTER_CARD_CREATURES);
|
||||||
private static final Hint hint = new ValueHint(
|
private static final Hint hint = new ValueHint(
|
||||||
"Creature cards in your graveyard",
|
"Creature cards in your graveyard",
|
||||||
new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURE)
|
new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURE)
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ import java.util.UUID;
|
||||||
public final class VoldarenAmbusher extends CardImpl {
|
public final class VoldarenAmbusher extends CardImpl {
|
||||||
|
|
||||||
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(
|
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(
|
||||||
new FilterControlledPermanent(SubType.VAMPIRE, "Vampires you control")
|
new FilterControlledPermanent(SubType.VAMPIRE, "Vampires you control"), null
|
||||||
);
|
);
|
||||||
private static final Hint hint = new ValueHint("Vampires you control", xValue);
|
private static final Hint hint = new ValueHint("Vampires you control", xValue);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,10 @@ public final class VoodooDoll extends CardImpl {
|
||||||
|
|
||||||
// {X}{X}, {T}: Voodoo Doll deals damage equal to the number of pin counters on it to any target. X is the number of pin counters on Voodoo Doll.
|
// {X}{X}, {T}: Voodoo Doll deals damage equal to the number of pin counters on it to any target. X is the number of pin counters on Voodoo Doll.
|
||||||
ability = new SimpleActivatedAbility(
|
ability = new SimpleActivatedAbility(
|
||||||
new DamageTargetEffect(new CountersSourceCount(CounterType.PIN)), new ManaCostsImpl<>("{X}{X}")
|
new DamageTargetEffect(new CountersSourceCount(CounterType.PIN))
|
||||||
|
.setText("{this} deals damage equal to the number of pin counters on it " +
|
||||||
|
"to any target. X is the number of pin counters on {this}"),
|
||||||
|
new ManaCostsImpl<>("{X}{X}")
|
||||||
);
|
);
|
||||||
ability.addCost(new TapSourceCost());
|
ability.addCost(new TapSourceCost());
|
||||||
ability.addTarget(new TargetAnyTarget());
|
ability.addTarget(new TargetAnyTarget());
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
import mage.abilities.hint.common.MorbidHint;
|
import mage.abilities.hint.common.MorbidHint;
|
||||||
import mage.cards.CardImpl;
|
import mage.cards.CardImpl;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.AbilityWord;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.game.permanent.token.ZombieToken;
|
import mage.game.permanent.token.ZombieToken;
|
||||||
|
|
@ -29,7 +30,7 @@ public final class Wakedancer extends CardImpl {
|
||||||
|
|
||||||
// <i>Morbid</i> — When Wakedancer enters the battlefield, if a creature died this turn, create a 2/2 black Zombie creature token.
|
// <i>Morbid</i> — When Wakedancer enters the battlefield, if a creature died this turn, create a 2/2 black Zombie creature token.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new ZombieToken()))
|
this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new ZombieToken()))
|
||||||
.withInterveningIf(MorbidCondition.instance).addHint(MorbidHint.instance));
|
.withInterveningIf(MorbidCondition.instance).setAbilityWord(AbilityWord.MORBID).addHint(MorbidHint.instance));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Wakedancer(final Wakedancer card) {
|
private Wakedancer(final Wakedancer card) {
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ public class WaveOfRats extends CardImpl {
|
||||||
this.addAbility(TrampleAbility.getInstance());
|
this.addAbility(TrampleAbility.getInstance());
|
||||||
|
|
||||||
// When Wave of Rats dies, if it dealt combat damage to a player this turn, return it to the battlefield under its owner’s control.
|
// When Wave of Rats dies, if it dealt combat damage to a player this turn, return it to the battlefield under its owner’s control.
|
||||||
this.addAbility(new DiesSourceTriggeredAbility(new ReturnToBattlefieldUnderOwnerControlSourceEffect())
|
this.addAbility(new DiesSourceTriggeredAbility(new ReturnToBattlefieldUnderOwnerControlSourceEffect().setText("return it to the battlefield under its owner's control"))
|
||||||
.withInterveningIf(WaveOfRatsDealtDamageToPlayerCondition.instance), new DamageDoneWatcher());
|
.withInterveningIf(WaveOfRatsDealtDamageToPlayerCondition.instance), new DamageDoneWatcher());
|
||||||
|
|
||||||
// Blitz {4}{B} (If you cast this spell for its blitz cost, it gains haste and “When this creature dies, draw a card.” Sacrifice it at the beginning of the next end step.)
|
// Blitz {4}{B} (If you cast this spell for its blitz cost, it gains haste and “When this creature dies, draw a card.” Sacrifice it at the beginning of the next end step.)
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ class WitheringWispsActivatedAbility extends ActivatedAbilityImpl {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRule() {
|
public String getRule() {
|
||||||
return super.getRule() + " Activate this ability no more times each turn than the number of snow Swamps you control.";
|
return super.getRule() + " Activate no more times each turn than the number of snow Swamps you control.";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ public final class YshtolaNightsBlessed extends CardImpl {
|
||||||
|
|
||||||
// At the beginning of each end step, if a player lost 4 or more life this turn, you draw a card.
|
// At the beginning of each end step, if a player lost 4 or more life this turn, you draw a card.
|
||||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
||||||
TargetController.ANY, new DrawCardSourceControllerEffect(1),
|
TargetController.ANY, new DrawCardSourceControllerEffect(1, true),
|
||||||
false, YshtolaNightsBlessedCondition.instance
|
false, YshtolaNightsBlessedCondition.instance
|
||||||
).addHint(YshtolaNightsBlessedCondition.getHint()));
|
).addHint(YshtolaNightsBlessedCondition.getHint()));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ public class DiscardedByOpponentTriggeredAbility extends TriggeredAbilityImpl {
|
||||||
|
|
||||||
public DiscardedByOpponentTriggeredAbility(Effect effect) {
|
public DiscardedByOpponentTriggeredAbility(Effect effect) {
|
||||||
super(Zone.GRAVEYARD, effect, false);
|
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 this card, ");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected DiscardedByOpponentTriggeredAbility(final DiscardedByOpponentTriggeredAbility ability) {
|
protected DiscardedByOpponentTriggeredAbility(final DiscardedByOpponentTriggeredAbility ability) {
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ public class EndOfCombatTriggeredAbility extends AtStepTriggeredAbility {
|
||||||
case ANY:
|
case ANY:
|
||||||
return "At end of combat, ";
|
return "At end of combat, ";
|
||||||
case YOU:
|
case YOU:
|
||||||
return "At the end of combat on your turn, ";
|
return "At end of combat on your turn, ";
|
||||||
default:
|
default:
|
||||||
throw new UnsupportedOperationException("Unsupported TargetController in EndOfCombatTriggeredAbility: " + targetController);
|
throw new UnsupportedOperationException("Unsupported TargetController in EndOfCombatTriggeredAbility: " + targetController);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,4 +27,9 @@ public enum AddendumCondition implements Condition {
|
||||||
Spell spell = game.getSpell(source.getSourceId());
|
Spell spell = game.getSpell(source.getSourceId());
|
||||||
return spell != null && !spell.isCopy(); // copies are not casted
|
return spell != null && !spell.isCopy(); // copies are not casted
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "you cast it during your main phase";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,6 @@ public enum SourceAttackingPlayerWithMostLifeCondition implements Condition {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "{this} is attacking the player with the most life or tied for most life";
|
return "it's attacking the player with the most life or tied for most life";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,6 @@ public enum SourceEnteredThisTurnCondition implements Condition {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "{this} " + (flag ? "entered" : "didn't enter") + " the battlefield this turn";
|
return "{this} " + (flag ? "entered" : "didn't enter the battlefield") + " this turn";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,6 @@ public enum SourceInExileCondition implements Condition {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "{this} is exiled";
|
return "this card is exiled";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ public enum SuspendedCondition implements Condition {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "{this} is suspended";
|
return "this card is suspended";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import mage.constants.Outcome;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
import mage.target.targetpointer.FixedTarget;
|
import mage.target.targetpointer.FixedTarget;
|
||||||
|
import mage.util.CardUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by glerman on 20/6/15.
|
* Created by glerman on 20/6/15.
|
||||||
|
|
@ -27,7 +28,7 @@ public class CreateTokenCopySourceEffect extends OneShotEffect {
|
||||||
super(Outcome.PutCreatureInPlay);
|
super(Outcome.PutCreatureInPlay);
|
||||||
this.number = copies;
|
this.number = copies;
|
||||||
this.tapped = tapped;
|
this.tapped = tapped;
|
||||||
staticText = "create " + (copies > 1 ? copies : "a") + " " + (tapped ? "tapped " : "")
|
staticText = "create " + CardUtil.numberToText(copies, "a") + " " + (tapped ? "tapped " : "")
|
||||||
+ (copies > 1 ? "tokens that are" : "token that's") + " a copy of {this}";
|
+ (copies > 1 ? "tokens that are" : "token that's") + " a copy of {this}";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ public class MeldEffect extends OneShotEffect {
|
||||||
this.meldWithName = meldWithName;
|
this.meldWithName = meldWithName;
|
||||||
this.meldIntoName = meldIntoName;
|
this.meldIntoName = meldIntoName;
|
||||||
this.attacking = attacking;
|
this.attacking = attacking;
|
||||||
this.staticText = "exile them, then meld them into " + meldWithName;
|
this.staticText = "exile them, then meld them into " + meldIntoName;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected MeldEffect(final MeldEffect effect) {
|
protected MeldEffect(final MeldEffect effect) {
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue