mirror of
https://github.com/correl/mage.git
synced 2024-12-26 03:00:11 +00:00
[ARB] various text fixes
This commit is contained in:
parent
3833d7bab3
commit
1582321d26
35 changed files with 377 additions and 383 deletions
|
@ -1,7 +1,5 @@
|
|||
|
||||
package mage.cards.a;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
|
@ -14,33 +12,35 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.SuperType;
|
||||
import mage.filter.common.FilterLandPermanent;
|
||||
import mage.filter.predicate.Predicates;
|
||||
import mage.filter.predicate.permanent.ControllerIdPredicate;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.target.TargetPlayer;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author North
|
||||
*/
|
||||
public final class Anathemancer extends CardImpl {
|
||||
|
||||
public Anathemancer(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{R}");
|
||||
this.subtype.add(SubType.ZOMBIE);
|
||||
this.subtype.add(SubType.WIZARD);
|
||||
|
||||
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// When Anathemancer enters the battlefield, it deals damage to target player equal to the number of nonbasic lands that player controls.
|
||||
EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(new AnathemancerCount(), "it"));
|
||||
EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(
|
||||
new DamageTargetEffect(AnathemancerCount.instance, "it")
|
||||
.setText("it deals damage to target player equal to the number of nonbasic lands that player controls")
|
||||
);
|
||||
ability.addTarget(new TargetPlayer());
|
||||
this.addAbility(ability);
|
||||
|
||||
// Unearth {5}{B}{R}
|
||||
this.addAbility(new UnearthAbility(new ManaCostsImpl("{5}{B}{R}")));
|
||||
this.addAbility(new UnearthAbility(new ManaCostsImpl<>("{5}{B}{R}")));
|
||||
}
|
||||
|
||||
private Anathemancer(final Anathemancer card) {
|
||||
|
@ -53,29 +53,29 @@ public final class Anathemancer extends CardImpl {
|
|||
}
|
||||
}
|
||||
|
||||
class AnathemancerCount implements DynamicValue {
|
||||
enum AnathemancerCount implements DynamicValue {
|
||||
instance;
|
||||
|
||||
@Override
|
||||
public int calculate(Game game, Ability sourceAbility, Effect effect) {
|
||||
if (sourceAbility.getFirstTarget() == null) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
FilterLandPermanent filter = new FilterLandPermanent();
|
||||
filter.add(Predicates.not(SuperType.BASIC.getPredicate()));
|
||||
filter.add(new ControllerIdPredicate(sourceAbility.getFirstTarget()));
|
||||
|
||||
return game.getBattlefield().count(filter, sourceAbility.getSourceId(), sourceAbility.getControllerId(), game);
|
||||
return game.getBattlefield().count(
|
||||
StaticFilters.FILTER_LANDS_NONBASIC,
|
||||
sourceAbility.getFirstTarget(),
|
||||
sourceAbility.getControllerId(), game
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AnathemancerCount copy() {
|
||||
return new AnathemancerCount();
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "1";
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,11 +1,7 @@
|
|||
|
||||
package mage.cards.b;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.CycleTriggeredAbility;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.common.CycleOrDiesTriggeredAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.keyword.CyclingAbility;
|
||||
|
@ -15,27 +11,25 @@ import mage.constants.CardType;
|
|||
import mage.constants.SubType;
|
||||
import mage.game.permanent.token.SoldierToken;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public final class BantSojourners extends CardImpl {
|
||||
|
||||
public BantSojourners(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}{W}{U}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{W}{U}");
|
||||
this.subtype.add(SubType.HUMAN, SubType.SOLDIER);
|
||||
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
// When you cycle Bant Sojourners or it dies, you may create a 1/1 white Soldier creature token.
|
||||
Ability ability1 = new CycleTriggeredAbility(new CreateTokenEffect(new SoldierToken()), true);
|
||||
Ability ability2 = new DiesSourceTriggeredAbility(new CreateTokenEffect(new SoldierToken()), true);
|
||||
this.addAbility(ability1);
|
||||
this.addAbility(ability2);
|
||||
|
||||
this.addAbility(new CycleOrDiesTriggeredAbility(new CreateTokenEffect(new SoldierToken()), true));
|
||||
|
||||
// Cycling {2}{W}
|
||||
this.addAbility(new CyclingAbility(new ManaCostsImpl("{2}{W}")));
|
||||
this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}{W}")));
|
||||
}
|
||||
|
||||
private BantSojourners(final BantSojourners card) {
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
|
||||
package mage.cards.b;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.ShuffleIntoLibrarySourceEffect;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
import mage.abilities.keyword.TrampleAbility;
|
||||
|
@ -13,16 +10,16 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.constants.Zone;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public final class BlitzHellion extends CardImpl {
|
||||
|
||||
public BlitzHellion(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}{G}");
|
||||
this.subtype.add(SubType.HELLION);
|
||||
this.power = new MageInt(7);
|
||||
this.toughness = new MageInt(7);
|
||||
|
@ -34,9 +31,11 @@ public final class BlitzHellion extends CardImpl {
|
|||
this.addAbility(HasteAbility.getInstance());
|
||||
|
||||
// At the beginning of the end step, Blitz Hellion's owner shuffles it into their library.
|
||||
Effect effect = new ShuffleIntoLibrarySourceEffect();
|
||||
effect.setText("{this}'s owner shuffles it into their library.");
|
||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.ANY, null, false));
|
||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(
|
||||
new ShuffleIntoLibrarySourceEffect()
|
||||
.setText("{this}'s owner shuffles it into their library."),
|
||||
TargetController.NEXT, false
|
||||
));
|
||||
}
|
||||
|
||||
private BlitzHellion(final BlitzHellion card) {
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
|
||||
|
||||
package mage.cards.c;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
|
||||
import mage.abilities.keyword.TrampleAbility;
|
||||
|
@ -12,22 +9,26 @@ import mage.constants.CardType;
|
|||
import mage.constants.Duration;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Loki
|
||||
*/
|
||||
public final class ColossalMight extends CardImpl {
|
||||
|
||||
public ColossalMight (UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{R}{G}");
|
||||
|
||||
public ColossalMight(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{R}{G}");
|
||||
|
||||
this.getSpellAbility().addEffect(new BoostTargetEffect(
|
||||
4, 2, Duration.EndOfTurn
|
||||
).setText("target creature gets +4/+2"));
|
||||
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(
|
||||
TrampleAbility.getInstance(), Duration.EndOfTurn
|
||||
).setText("and gains trample until end of turn"));
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||
this.getSpellAbility().addEffect(new BoostTargetEffect(4, 2, Duration.EndOfTurn));
|
||||
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn));
|
||||
}
|
||||
|
||||
public ColossalMight (final ColossalMight card) {
|
||||
public ColossalMight(final ColossalMight card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
|
@ -35,5 +36,4 @@ public final class ColossalMight extends CardImpl {
|
|||
public ColossalMight copy() {
|
||||
return new ColossalMight(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,41 +1,36 @@
|
|||
|
||||
package mage.cards.d;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.SacrificeSourceCost;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityAllEffect;
|
||||
import mage.abilities.keyword.IndestructibleAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Zone;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author North
|
||||
*/
|
||||
public final class DauntlessEscort extends CardImpl {
|
||||
|
||||
public DauntlessEscort(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}{W}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{W}");
|
||||
this.subtype.add(SubType.RHINO);
|
||||
this.subtype.add(SubType.SOLDIER);
|
||||
|
||||
|
||||
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Sacrifice Dauntless Escort: Creatures you control are indestructible this turn.
|
||||
Effect effect = new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES, false);
|
||||
effect.setText("Creatures you control are indestructible this turn");
|
||||
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new SacrificeSourceCost()));
|
||||
this.addAbility(new SimpleActivatedAbility(new GainAbilityAllEffect(
|
||||
IndestructibleAbility.getInstance(), Duration.EndOfTurn,
|
||||
StaticFilters.FILTER_CONTROLLED_CREATURES, false
|
||||
), new SacrificeSourceCost()));
|
||||
}
|
||||
|
||||
private DauntlessEscort(final DauntlessEscort card) {
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
|
||||
package mage.cards.d;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.DiesCreatureTriggeredAbility;
|
||||
|
@ -13,31 +11,33 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.counters.CounterType;
|
||||
import mage.target.common.TargetAnyTarget;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public final class DeathbringerThoctar extends CardImpl {
|
||||
|
||||
public DeathbringerThoctar(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{B}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B}{R}");
|
||||
this.subtype.add(SubType.ZOMBIE);
|
||||
this.subtype.add(SubType.BEAST);
|
||||
|
||||
|
||||
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Whenever another creature dies, you may put a +1/+1 counter on Deathbringer Thoctar.
|
||||
this.addAbility(new DiesCreatureTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true, true));
|
||||
this.addAbility(new DiesCreatureTriggeredAbility(
|
||||
new AddCountersSourceEffect(CounterType.P1P1.createInstance()), true, true
|
||||
));
|
||||
|
||||
// Remove a +1/+1 counter from Deathbringer Thoctar: Deathbringer Thoctar deals 1 damage to any target.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new RemoveCountersSourceCost(CounterType.P1P1.createInstance()));
|
||||
Ability ability = new SimpleActivatedAbility(
|
||||
new DamageTargetEffect(1, "it"),
|
||||
new RemoveCountersSourceCost(CounterType.P1P1.createInstance())
|
||||
);
|
||||
ability.addTarget(new TargetAnyTarget());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
|
||||
package mage.cards.d;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
|
@ -13,8 +11,9 @@ import mage.constants.SubType;
|
|||
import mage.constants.TargetController;
|
||||
import mage.game.permanent.token.DragonBroodmotherDragonToken;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class DragonBroodmother extends CardImpl {
|
||||
|
@ -30,7 +29,10 @@ public final class DragonBroodmother extends CardImpl {
|
|||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// At the beginning of each upkeep, create a 1/1 red and green Dragon creature token with flying and devour 2. (As the token enters the battlefield, you may sacrifice any number of creatures. It enters the battlefield with twice that many +1/+1 counters on it.)
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(new CreateTokenEffect(new DragonBroodmotherDragonToken()), TargetController.ANY, false));
|
||||
this.addAbility(new BeginningOfUpkeepTriggeredAbility(
|
||||
new CreateTokenEffect(new DragonBroodmotherDragonToken()),
|
||||
TargetController.EACH_PLAYER, false
|
||||
));
|
||||
}
|
||||
|
||||
private DragonBroodmother(final DragonBroodmother card) {
|
||||
|
@ -41,5 +43,4 @@ public final class DragonBroodmother extends CardImpl {
|
|||
public DragonBroodmother copy() {
|
||||
return new DragonBroodmother(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
|
||||
package mage.cards.e;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.CycleTriggeredAbility;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.common.CycleOrDiesTriggeredAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.MayTapOrUntapTargetEffect;
|
||||
import mage.abilities.keyword.CyclingAbility;
|
||||
|
@ -15,33 +12,28 @@ import mage.constants.CardType;
|
|||
import mage.constants.SubType;
|
||||
import mage.target.TargetPermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public final class EsperSojourners extends CardImpl {
|
||||
|
||||
public EsperSojourners(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT,CardType.CREATURE},"{W}{U}{B}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{W}{U}{B}");
|
||||
|
||||
this.subtype.add(SubType.VEDALKEN);
|
||||
this.subtype.add(SubType.WIZARD);
|
||||
|
||||
|
||||
|
||||
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// When you cycle Esper Sojourners or it dies, you may tap or untap target permanent.
|
||||
Ability ability1 = new CycleTriggeredAbility(new MayTapOrUntapTargetEffect());
|
||||
Ability ability2 = new DiesSourceTriggeredAbility(new MayTapOrUntapTargetEffect());
|
||||
ability1.addTarget(new TargetPermanent());
|
||||
ability2.addTarget(new TargetPermanent());
|
||||
this.addAbility(ability1);
|
||||
this.addAbility(ability2);
|
||||
|
||||
Ability ability = new CycleOrDiesTriggeredAbility(new MayTapOrUntapTargetEffect(), false);
|
||||
ability.addTarget(new TargetPermanent());
|
||||
this.addAbility(ability);
|
||||
|
||||
// Cycling {2}{U}
|
||||
this.addAbility(new CyclingAbility(new ManaCostsImpl("{2}{U}")));
|
||||
this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}{U}")));
|
||||
}
|
||||
|
||||
private EsperSojourners(final EsperSojourners card) {
|
||||
|
|
|
@ -28,10 +28,6 @@ public final class EtherwroughtPage extends CardImpl {
|
|||
public EtherwroughtPage(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{1}{W}{U}{B}");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// At the beginning of your upkeep, choose one - You gain 2 life; or look at the top card of your library, then you may put that card into your graveyard; or each opponent loses 1 life.
|
||||
Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new GainLifeEffect(2), TargetController.YOU, false);
|
||||
|
||||
|
@ -46,7 +42,6 @@ public final class EtherwroughtPage extends CardImpl {
|
|||
ability.addMode(mode1);
|
||||
|
||||
this.addAbility(ability);
|
||||
|
||||
}
|
||||
|
||||
private EtherwroughtPage(final EtherwroughtPage card) {
|
||||
|
@ -63,7 +58,7 @@ class EtherwroughtPageEffect extends OneShotEffect {
|
|||
|
||||
public EtherwroughtPageEffect() {
|
||||
super(Outcome.DrawCard);
|
||||
this.staticText = "or look at the top card of your library, then you may put that card into your graveyard";
|
||||
this.staticText = "look at the top card of your library. You may put that card into your graveyard";
|
||||
}
|
||||
|
||||
public EtherwroughtPageEffect(final EtherwroughtPageEffect effect) {
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
|
||||
package mage.cards.f;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.effects.common.DestroyAllEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
|
@ -11,29 +9,27 @@ import mage.filter.predicate.Predicates;
|
|||
import mage.filter.predicate.permanent.BlockedPredicate;
|
||||
import mage.filter.predicate.permanent.BlockingPredicate;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public final class FightToTheDeath extends CardImpl {
|
||||
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("all blocking creatures and all blocked creatures");
|
||||
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("blocking creatures and all blocked creatures");
|
||||
|
||||
static {
|
||||
filter.add(Predicates.or(
|
||||
BlockingPredicate.instance,
|
||||
BlockedPredicate.instance));
|
||||
BlockedPredicate.instance
|
||||
));
|
||||
}
|
||||
|
||||
public FightToTheDeath(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{R}{W}");
|
||||
|
||||
|
||||
|
||||
super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{R}{W}");
|
||||
|
||||
// Destroy all blocking creatures and all blocked creatures.
|
||||
this.getSpellAbility().addEffect(new DestroyAllEffect(filter));
|
||||
|
||||
}
|
||||
|
||||
private FightToTheDeath(final FightToTheDeath card) {
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
|
||||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
|
@ -10,31 +8,31 @@ import mage.abilities.keyword.HasteAbility;
|
|||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public final class GiantAmbushBeetle extends CardImpl {
|
||||
|
||||
public GiantAmbushBeetle(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{B/G}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B/G}{R}");
|
||||
this.subtype.add(SubType.INSECT);
|
||||
|
||||
|
||||
|
||||
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Haste
|
||||
this.addAbility(HasteAbility.getInstance());
|
||||
|
||||
|
||||
// When Giant Ambush Beetle enters the battlefield, you may have target creature block it this turn if able.
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new MustBeBlockedByTargetSourceEffect(Duration.EndOfTurn), true);
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(
|
||||
new MustBeBlockedByTargetSourceEffect(Duration.EndOfTurn)
|
||||
.setText("target creature block it this turn if able"), true
|
||||
);
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
|
||||
package mage.cards.g;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.CycleOrDiesTriggeredAbility;
|
||||
import mage.abilities.common.CycleTriggeredAbility;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.ExileTargetEffect;
|
||||
import mage.abilities.keyword.CyclingAbility;
|
||||
|
@ -13,36 +11,29 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.target.common.TargetCardInASingleGraveyard;
|
||||
import mage.target.common.TargetCardInGraveyard;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public final class GrixisSojourners extends CardImpl {
|
||||
|
||||
public GrixisSojourners(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}{B}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{B}{R}");
|
||||
this.subtype.add(SubType.ZOMBIE);
|
||||
this.subtype.add(SubType.OGRE);
|
||||
|
||||
|
||||
|
||||
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// When you cycle Grixis Sojourners or it dies, you may exile target card from a graveyard.
|
||||
Ability ability1 = new CycleTriggeredAbility(new ExileTargetEffect(), true);
|
||||
Ability ability2 = new DiesSourceTriggeredAbility(new ExileTargetEffect(), true);
|
||||
ability1.addTarget(new TargetCardInASingleGraveyard(1, 1, new FilterCard()));
|
||||
ability2.addTarget(new TargetCardInASingleGraveyard(1, 1, new FilterCard()));
|
||||
this.addAbility(ability1);
|
||||
this.addAbility(ability2);
|
||||
|
||||
Ability ability = new CycleOrDiesTriggeredAbility(new ExileTargetEffect(), true);
|
||||
ability.addTarget(new TargetCardInGraveyard());
|
||||
this.addAbility(ability);
|
||||
|
||||
// Cycling {2}{B}
|
||||
this.addAbility(new CyclingAbility(new ManaCostsImpl("{2}{B}")));
|
||||
this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}{B}")));
|
||||
}
|
||||
|
||||
private GrixisSojourners(final GrixisSojourners card) {
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
|
||||
package mage.cards.i;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
||||
import mage.abilities.effects.common.SacrificeSourceEffect;
|
||||
|
@ -11,27 +9,25 @@ import mage.cards.CardSetInfo;
|
|||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public final class IllusoryDemon extends CardImpl {
|
||||
|
||||
public IllusoryDemon(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}{B}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{B}");
|
||||
this.subtype.add(SubType.DEMON);
|
||||
this.subtype.add(SubType.ILLUSION);
|
||||
|
||||
|
||||
|
||||
this.power = new MageInt(4);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
|
||||
// When you cast a spell, sacrifice Illusory Demon.
|
||||
this.addAbility(new SpellCastControllerTriggeredAbility(new SacrificeSourceEffect(), false));
|
||||
this.addAbility(new SpellCastControllerTriggeredAbility(new SacrificeSourceEffect(), false).setTriggerPhrase("When you cast a spell, "));
|
||||
}
|
||||
|
||||
private IllusoryDemon(final IllusoryDemon card) {
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
|
||||
package mage.cards.j;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.CycleTriggeredAbility;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.common.CycleOrDiesTriggeredAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.DamageTargetEffect;
|
||||
import mage.abilities.keyword.CyclingAbility;
|
||||
|
@ -15,33 +12,28 @@ import mage.constants.CardType;
|
|||
import mage.constants.SubType;
|
||||
import mage.target.common.TargetAnyTarget;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public final class JundSojourners extends CardImpl {
|
||||
|
||||
public JundSojourners(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{B}{R}{G}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}{R}{G}");
|
||||
this.subtype.add(SubType.VIASHINO);
|
||||
this.subtype.add(SubType.SHAMAN);
|
||||
|
||||
|
||||
|
||||
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// When you cycle Jund Sojourners or it dies, you may have it deal 1 damage to any target.
|
||||
Ability ability1 = new CycleTriggeredAbility(new DamageTargetEffect(1));
|
||||
Ability ability2 = new DiesSourceTriggeredAbility(new DamageTargetEffect(1));
|
||||
ability1.addTarget(new TargetAnyTarget());
|
||||
ability2.addTarget(new TargetAnyTarget());
|
||||
this.addAbility(ability1);
|
||||
this.addAbility(ability2);
|
||||
|
||||
Ability ability = new CycleOrDiesTriggeredAbility(new DamageTargetEffect(1)
|
||||
.setText("you may have it deal 1 damage to any target"), true);
|
||||
ability.addTarget(new TargetAnyTarget());
|
||||
this.addAbility(ability);
|
||||
|
||||
// Cycling {2}{R}
|
||||
this.addAbility(new CyclingAbility(new ManaCostsImpl("{2}{R}")));
|
||||
this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}{R}")));
|
||||
}
|
||||
|
||||
private JundSojourners(final JundSojourners card) {
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
|
||||
package mage.cards.k;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
|
||||
|
@ -16,27 +14,28 @@ import mage.constants.CardType;
|
|||
import mage.constants.SubType;
|
||||
import mage.game.permanent.token.GoblinToken;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public final class KathariBomber extends CardImpl {
|
||||
|
||||
public KathariBomber(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{R}");
|
||||
this.subtype.add(SubType.BIRD);
|
||||
this.subtype.add(SubType.SHAMAN);
|
||||
|
||||
|
||||
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
// Flying
|
||||
this.addAbility(FlyingAbility.getInstance());
|
||||
|
||||
// When Kathari Bomber deals combat damage to a player, create two 1/1 red Goblin creature tokens and sacrifice Kathari Bomber.
|
||||
Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new CreateTokenEffect(new GoblinToken(), 2), false);
|
||||
ability.addEffect(new SacrificeSourceEffect());
|
||||
Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(
|
||||
new CreateTokenEffect(new GoblinToken(), 2), false
|
||||
).setTriggerPhrase("When {this} deals combat damage to a player, ");
|
||||
ability.addEffect(new SacrificeSourceEffect().concatBy("and"));
|
||||
this.addAbility(ability);
|
||||
|
||||
// Unearth {3}{B}{R}
|
||||
|
|
|
@ -1,42 +1,48 @@
|
|||
|
||||
package mage.cards.k;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.AttacksTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.abilities.hint.Hint;
|
||||
import mage.abilities.hint.ValueHint;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.predicate.permanent.TappedPredicate;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Loki
|
||||
*/
|
||||
public final class KnotvinePaladin extends CardImpl {
|
||||
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped creature you control");
|
||||
|
||||
private static final FilterPermanent filter
|
||||
= new FilterControlledCreaturePermanent("untapped creature you control");
|
||||
|
||||
static {
|
||||
filter.add(TappedPredicate.UNTAPPED);
|
||||
}
|
||||
|
||||
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
|
||||
private static final Hint hint = new ValueHint("Untapped creatures you control", xValue);
|
||||
|
||||
public KnotvinePaladin(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{G}{W}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{W}");
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.KNIGHT);
|
||||
|
||||
|
||||
|
||||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(new PermanentsOnBattlefieldCount(filter), new PermanentsOnBattlefieldCount(filter), Duration.EndOfTurn), false));
|
||||
this.addAbility(new AttacksTriggeredAbility(new BoostSourceEffect(
|
||||
xValue, xValue, Duration.EndOfTurn, true, "it"
|
||||
), false).addHint(hint));
|
||||
}
|
||||
|
||||
private KnotvinePaladin(final KnotvinePaladin card) {
|
||||
|
|
|
@ -1,36 +1,36 @@
|
|||
|
||||
package mage.cards.l;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount;
|
||||
import mage.abilities.effects.common.CreateTokenEffect;
|
||||
import mage.abilities.effects.common.LoseLifeTargetEffect;
|
||||
import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect;
|
||||
import mage.abilities.hint.Hint;
|
||||
import mage.abilities.hint.ValueHint;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterControlledCreaturePermanent;
|
||||
import mage.filter.FilterPermanent;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.game.permanent.token.ZombieWizardToken;
|
||||
import mage.target.TargetPlayer;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Loki
|
||||
*/
|
||||
public final class LichLordOfUnx extends CardImpl {
|
||||
|
||||
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Zombies you control");
|
||||
|
||||
static {
|
||||
filter.add(SubType.ZOMBIE.getPredicate());
|
||||
}
|
||||
private static final FilterPermanent filter = new FilterControlledPermanent(SubType.ZOMBIE);
|
||||
private static final DynamicValue xValue = new PermanentsOnBattlefieldCount(filter);
|
||||
private static final Hint hint = new ValueHint("Zombies you control", xValue);
|
||||
|
||||
public LichLordOfUnx(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{B}");
|
||||
|
@ -40,13 +40,21 @@ public final class LichLordOfUnx extends CardImpl {
|
|||
this.power = new MageInt(2);
|
||||
this.toughness = new MageInt(2);
|
||||
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new ZombieWizardToken()), new ManaCostsImpl("{U}{B}"));
|
||||
Ability ability = new SimpleActivatedAbility(
|
||||
new CreateTokenEffect(new ZombieWizardToken()), new ManaCostsImpl<>("{U}{B}")
|
||||
);
|
||||
ability.addCost(new TapSourceCost());
|
||||
this.addAbility(ability);
|
||||
ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new LoseLifeTargetEffect(new PermanentsOnBattlefieldCount(filter)), new ManaCostsImpl("{U}{U}{B}{B}"));
|
||||
ability.addEffect(new PutLibraryIntoGraveTargetEffect(new PermanentsOnBattlefieldCount(filter, 1)));
|
||||
|
||||
ability = new SimpleActivatedAbility(
|
||||
new LoseLifeTargetEffect(xValue)
|
||||
.setText("target player loses X life"),
|
||||
new ManaCostsImpl<>("{U}{U}{B}{B}")
|
||||
);
|
||||
ability.addEffect(new PutLibraryIntoGraveTargetEffect(xValue)
|
||||
.setText("and mills X cards, where X is the number of Zombies you control"));
|
||||
ability.addTarget(new TargetPlayer());
|
||||
this.addAbility(ability);
|
||||
this.addAbility(ability.addHint(hint));
|
||||
}
|
||||
|
||||
private LichLordOfUnx(final LichLordOfUnx card) {
|
||||
|
@ -57,5 +65,4 @@ public final class LichLordOfUnx extends CardImpl {
|
|||
public LichLordOfUnx copy() {
|
||||
return new LichLordOfUnx(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
package mage.cards.l;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
|
||||
import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
|
||||
import mage.abilities.dynamicvalue.DynamicValue;
|
||||
import mage.abilities.dynamicvalue.common.CountersSourceCount;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.DamagePlayersEffect;
|
||||
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
|
||||
import mage.abilities.keyword.FearAbility;
|
||||
import mage.abilities.keyword.HasteAbility;
|
||||
|
@ -17,8 +16,6 @@ import mage.constants.Outcome;
|
|||
import mage.constants.SubType;
|
||||
import mage.constants.TargetController;
|
||||
import mage.counters.CounterType;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
@ -27,12 +24,12 @@ import java.util.UUID;
|
|||
*/
|
||||
public final class LightningReaver extends CardImpl {
|
||||
|
||||
private static final DynamicValue xValue = new CountersSourceCount(CounterType.CHARGE);
|
||||
|
||||
public LightningReaver(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}{R}");
|
||||
this.subtype.add(SubType.ZOMBIE);
|
||||
this.subtype.add(SubType.BEAST);
|
||||
|
||||
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
|
@ -41,10 +38,12 @@ public final class LightningReaver extends CardImpl {
|
|||
this.addAbility(FearAbility.getInstance());
|
||||
|
||||
// Whenever Lightning Reaver deals combat damage to a player, put a charge counter on it.
|
||||
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new AddCountersSourceEffect(CounterType.CHARGE.createInstance()), false));
|
||||
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new AddCountersSourceEffect(CounterType.CHARGE.createInstance()).setText("put a charge counter on it"), false));
|
||||
|
||||
// At the beginning of your end step, Lightning Reaver deals damage equal to the number of charge counters on it to each opponent.
|
||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(new DamageOpponentsEffect(), TargetController.YOU, false));
|
||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(new DamagePlayersEffect(
|
||||
Outcome.Damage, xValue, TargetController.OPPONENT
|
||||
).setText("{this} deals damage equal to the number of charge counters on it to each opponent"), TargetController.YOU, false));
|
||||
}
|
||||
|
||||
private LightningReaver(final LightningReaver card) {
|
||||
|
@ -56,32 +55,3 @@ public final class LightningReaver extends CardImpl {
|
|||
return new LightningReaver(this);
|
||||
}
|
||||
}
|
||||
|
||||
class DamageOpponentsEffect extends OneShotEffect {
|
||||
|
||||
public DamageOpponentsEffect() {
|
||||
super(Outcome.Damage);
|
||||
staticText = "Lightning Reaver deals damage equal to the number of charge counters on it to each opponent";
|
||||
}
|
||||
|
||||
public DamageOpponentsEffect(final DamageOpponentsEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
DynamicValue amount = new CountersSourceCount(CounterType.CHARGE);
|
||||
for (UUID playerId : game.getOpponents(source.getControllerId())) {
|
||||
Player player = game.getPlayer(playerId);
|
||||
if (player != null) {
|
||||
player.damage(amount.calculate(game, source, this), source.getSourceId(), source, game);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DamageOpponentsEffect copy() {
|
||||
return new DamageOpponentsEffect(this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
|
||||
|
||||
package mage.cards.m;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||
|
@ -10,32 +7,32 @@ import mage.abilities.keyword.HasteAbility;
|
|||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.common.FilterCreaturePermanent;
|
||||
import mage.constants.SubType;
|
||||
import mage.filter.StaticFilters;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Loki
|
||||
*/
|
||||
public final class MadrushCyclops extends CardImpl {
|
||||
|
||||
public MadrushCyclops (UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}{R}{G}");
|
||||
public MadrushCyclops(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{R}{G}");
|
||||
this.subtype.add(SubType.CYCLOPS);
|
||||
this.subtype.add(SubType.WARRIOR);
|
||||
|
||||
|
||||
|
||||
this.power = new MageInt(3);
|
||||
this.toughness = new MageInt(4);
|
||||
|
||||
|
||||
// Creatures you control have haste.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield, new FilterCreaturePermanent())));
|
||||
this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect(
|
||||
HasteAbility.getInstance(), Duration.WhileOnBattlefield,
|
||||
StaticFilters.FILTER_PERMANENT_CREATURES
|
||||
)));
|
||||
}
|
||||
|
||||
public MadrushCyclops (final MadrushCyclops card) {
|
||||
public MadrushCyclops(final MadrushCyclops card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
|
@ -43,5 +40,4 @@ public final class MadrushCyclops extends CardImpl {
|
|||
public MadrushCyclops copy() {
|
||||
return new MadrushCyclops(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
|
||||
|
||||
package mage.cards.m;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.effects.common.AttachEffect;
|
||||
|
@ -12,38 +9,36 @@ import mage.abilities.keyword.EnchantAbility;
|
|||
import mage.abilities.keyword.FlyingAbility;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AttachmentType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Duration;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.constants.*;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Loki
|
||||
*/
|
||||
public final class MagefireWings extends CardImpl {
|
||||
|
||||
public MagefireWings (UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{U}{R}");
|
||||
public MagefireWings(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}{R}");
|
||||
this.subtype.add(SubType.AURA);
|
||||
|
||||
|
||||
|
||||
TargetPermanent auraTarget = new TargetCreaturePermanent();
|
||||
this.getSpellAbility().addTarget(auraTarget);
|
||||
this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature));
|
||||
Ability ability = new EnchantAbility(auraTarget.getTargetName());
|
||||
this.addAbility(ability);
|
||||
this.addAbility(new EnchantAbility(auraTarget.getTargetName()));
|
||||
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(2, 0, Duration.WhileOnBattlefield)));
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA)));
|
||||
Ability ability = new SimpleStaticAbility(new BoostEnchantedEffect(
|
||||
2, 0, Duration.WhileOnBattlefield
|
||||
));
|
||||
ability.addEffect(new GainAbilityAttachedEffect(
|
||||
FlyingAbility.getInstance(), AttachmentType.AURA
|
||||
).setText("and has flying"));
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
public MagefireWings (final MagefireWings card) {
|
||||
public MagefireWings(final MagefireWings card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
|
@ -51,5 +46,4 @@ public final class MagefireWings extends CardImpl {
|
|||
public MagefireWings copy() {
|
||||
return new MagefireWings(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
|
||||
package mage.cards.n;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.CycleTriggeredAbility;
|
||||
import mage.abilities.common.DiesSourceTriggeredAbility;
|
||||
import mage.abilities.common.CycleOrDiesTriggeredAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
||||
import mage.abilities.keyword.CyclingAbility;
|
||||
|
@ -16,33 +13,29 @@ import mage.constants.SubType;
|
|||
import mage.counters.CounterType;
|
||||
import mage.target.common.TargetCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public final class NayaSojourners extends CardImpl {
|
||||
|
||||
public NayaSojourners(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{R}{G}{W}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{G}{W}");
|
||||
this.subtype.add(SubType.ELF);
|
||||
this.subtype.add(SubType.SHAMAN);
|
||||
|
||||
|
||||
|
||||
|
||||
this.power = new MageInt(5);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// When you cycle Naya Sojourners or it dies, you may put a +1/+1 counter on target creature.
|
||||
Ability ability1 = new CycleTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()));
|
||||
Ability ability2 = new DiesSourceTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()));
|
||||
ability1.addTarget(new TargetCreaturePermanent());
|
||||
ability2.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability1);
|
||||
this.addAbility(ability2);
|
||||
|
||||
Ability ability = new CycleOrDiesTriggeredAbility(
|
||||
new AddCountersTargetEffect(CounterType.P1P1.createInstance()), true
|
||||
);
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
|
||||
// Cycling {2}{G}
|
||||
this.addAbility(new CyclingAbility(new ManaCostsImpl("{2}{G}")));
|
||||
this.addAbility(new CyclingAbility(new ManaCostsImpl<>("{2}{G}")));
|
||||
}
|
||||
|
||||
private NayaSojourners(final NayaSojourners card) {
|
||||
|
|
|
@ -1,42 +1,39 @@
|
|||
|
||||
|
||||
package mage.cards.n;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageInt;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||
import mage.abilities.effects.common.PutOnLibraryTargetEffect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.cards.CardImpl;
|
||||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.SubType;
|
||||
import mage.target.Target;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.game.permanent.Permanent;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.target.common.TargetControlledCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Loki
|
||||
*/
|
||||
public final class NulltreadGargantuan extends CardImpl {
|
||||
|
||||
public NulltreadGargantuan (UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{G}{U}");
|
||||
public NulltreadGargantuan(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{U}");
|
||||
this.subtype.add(SubType.BEAST);
|
||||
|
||||
|
||||
this.power = new MageInt(5);
|
||||
this.toughness = new MageInt(6);
|
||||
|
||||
// When Nulltread Gargantuan enters the battlefield, put a creature you control on top of its owner's library.
|
||||
Ability ability = new EntersBattlefieldTriggeredAbility(new PutOnLibraryTargetEffect(true), false);
|
||||
Target target = new TargetControlledCreaturePermanent();
|
||||
target.setNotTarget(true);
|
||||
ability.addTarget(target);
|
||||
this.addAbility(ability);
|
||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new NulltreadGargantuanEffect()));
|
||||
}
|
||||
|
||||
public NulltreadGargantuan (final NulltreadGargantuan card) {
|
||||
public NulltreadGargantuan(final NulltreadGargantuan card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
|
@ -44,5 +41,36 @@ public final class NulltreadGargantuan extends CardImpl {
|
|||
public NulltreadGargantuan copy() {
|
||||
return new NulltreadGargantuan(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class NulltreadGargantuanEffect extends OneShotEffect {
|
||||
|
||||
NulltreadGargantuanEffect() {
|
||||
super(Outcome.UnboostCreature);
|
||||
staticText = "put a creature you control on top of its owner's library";
|
||||
}
|
||||
|
||||
private NulltreadGargantuanEffect(final NulltreadGargantuanEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NulltreadGargantuanEffect copy() {
|
||||
return new NulltreadGargantuanEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player player = game.getPlayer(source.getControllerId());
|
||||
if (player == null || !game.getState().getBattlefield().contains(
|
||||
StaticFilters.FILTER_CONTROLLED_CREATURE, source, game, 1
|
||||
)) {
|
||||
return false;
|
||||
}
|
||||
TargetPermanent target = new TargetControlledCreaturePermanent();
|
||||
target.setNotTarget(true);
|
||||
player.choose(outcome, target, source.getSourceId(), game);
|
||||
Permanent permanent = game.getPermanent(target.getFirstTarget());
|
||||
return permanent != null && player.putCardsOnTopOfLibrary(permanent, game, source, false);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -129,7 +129,7 @@ class SenTripletsPlayFromOpponentsHandEffect extends AsThoughEffectImpl {
|
|||
|
||||
public SenTripletsPlayFromOpponentsHandEffect() {
|
||||
super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit);
|
||||
staticText = "You may play cards from that player's hand this turn";
|
||||
staticText = "You may play lands and cast spells from that player's hand this turn";
|
||||
}
|
||||
|
||||
public SenTripletsPlayFromOpponentsHandEffect(final SenTripletsPlayFromOpponentsHandEffect effect) {
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
|
||||
package mage.cards.s;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.BlocksAttachedTriggeredAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
|
@ -14,13 +13,13 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.AttachmentType;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.SubType;
|
||||
import mage.constants.Outcome;
|
||||
import mage.constants.Zone;
|
||||
import mage.constants.SubType;
|
||||
import mage.target.common.TargetControlledCreaturePermanent;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public final class ShieldOfTheRighteous extends CardImpl {
|
||||
|
@ -30,11 +29,16 @@ public final class ShieldOfTheRighteous extends CardImpl {
|
|||
this.subtype.add(SubType.EQUIPMENT);
|
||||
|
||||
// Equipped creature gets +0/+2 and has vigilance.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(0, 2)));
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(VigilanceAbility.getInstance(), AttachmentType.EQUIPMENT)));
|
||||
Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(0, 2));
|
||||
ability.addEffect(new GainAbilityAttachedEffect(
|
||||
VigilanceAbility.getInstance(), AttachmentType.EQUIPMENT
|
||||
).setText("and has vigilance"));
|
||||
|
||||
// Whenever equipped creature blocks a creature, that creature doesn't untap during its controller's next untap step.
|
||||
this.addAbility(new BlocksAttachedTriggeredAbility(new DontUntapInControllersNextUntapStepTargetEffect("that creature"), "equipped", false, false, true));
|
||||
this.addAbility(new BlocksAttachedTriggeredAbility(
|
||||
new DontUntapInControllersNextUntapStepTargetEffect("that creature"),
|
||||
"equipped", false, false, true
|
||||
));
|
||||
|
||||
// Equip {2}
|
||||
this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(2), new TargetControlledCreaturePermanent()));
|
||||
|
|
|
@ -83,6 +83,6 @@ class SigilCaptainTriggeredAbility extends TriggeredAbilityImpl {
|
|||
|
||||
@Override
|
||||
public String getRule() {
|
||||
return "Whenever a creature enters the battlefield under your control, if that creature is 1/1, put two +1/+1 counters on it";
|
||||
return "Whenever a creature enters the battlefield under your control, if that creature is 1/1, put two +1/+1 counters on it.";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
|
||||
package mage.cards.s;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.DelayedTriggeredAbility;
|
||||
import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.SacrificeTargetEffect;
|
||||
|
@ -21,8 +18,9 @@ import mage.game.permanent.Permanent;
|
|||
import mage.target.common.TargetCreaturePermanent;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public final class SlaveOfBolas extends CardImpl {
|
||||
|
@ -31,9 +29,11 @@ public final class SlaveOfBolas extends CardImpl {
|
|||
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{U/R}{B}");
|
||||
|
||||
// Gain control of target creature. Untap that creature. It gains haste until end of turn. Sacrifice it at the beginning of the next end step.
|
||||
this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.EndOfTurn));
|
||||
this.getSpellAbility().addEffect(new GainControlTargetEffect(Duration.Custom));
|
||||
this.getSpellAbility().addEffect(new UntapTargetEffect().setText("Untap that creature"));
|
||||
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance(), Duration.EndOfTurn).setText("It gains haste until end of turn"));
|
||||
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(
|
||||
HasteAbility.getInstance(), Duration.EndOfTurn
|
||||
).setText("It gains haste until end of turn"));
|
||||
this.getSpellAbility().addEffect(new SlaveOfBolasEffect());
|
||||
this.getSpellAbility().addTarget(new TargetCreaturePermanent());
|
||||
}
|
||||
|
@ -67,13 +67,13 @@ class SlaveOfBolasEffect extends OneShotEffect {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Permanent permanent = game.getPermanent(source.getFirstTarget());
|
||||
if (permanent != null) {
|
||||
SacrificeTargetEffect sacrificeEffect = new SacrificeTargetEffect("sacrifice this", source.getControllerId());
|
||||
sacrificeEffect.setTargetPointer(new FixedTarget(permanent, game));
|
||||
DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(sacrificeEffect);
|
||||
game.addDelayedTriggeredAbility(delayedAbility, source);
|
||||
return true;
|
||||
if (permanent == null) {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(
|
||||
new SacrificeTargetEffect("sacrifice this", source.getControllerId())
|
||||
.setTargetPointer(new FixedTarget(permanent, game))
|
||||
), source);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ public final class StunSniper extends CardImpl {
|
|||
this.toughness = new MageInt(1);
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new GenericManaCost(1));
|
||||
ability.addCost(new TapSourceCost());
|
||||
ability.addEffect(new TapTargetEffect());
|
||||
ability.addEffect(new TapTargetEffect().setText("tap that creature"));
|
||||
ability.addTarget(new TargetCreaturePermanent());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
|
|
@ -11,7 +11,9 @@ import mage.cards.CardImpl;
|
|||
import mage.cards.CardSetInfo;
|
||||
import mage.constants.CardType;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.filter.common.FilterControlledArtifactPermanent;
|
||||
import mage.filter.common.FilterControlledPermanent;
|
||||
import mage.target.common.TargetControlledPermanent;
|
||||
|
||||
/**
|
||||
|
@ -20,14 +22,14 @@ import mage.target.common.TargetControlledPermanent;
|
|||
*/
|
||||
public final class TimeSieve extends CardImpl {
|
||||
|
||||
private static final FilterControlledPermanent filter=new FilterControlledArtifactPermanent("artifacts");
|
||||
public TimeSieve(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{U}{B}");
|
||||
|
||||
// {tap}, Sacrifice five artifacts: Take an extra turn after this one.
|
||||
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddExtraTurnControllerEffect(), new TapSourceCost());
|
||||
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(5, 5, new FilterControlledArtifactPermanent("five artifacts"), true)));
|
||||
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(5, filter)));
|
||||
this.addAbility(ability);
|
||||
|
||||
}
|
||||
|
||||
private TimeSieve(final TimeSieve card) {
|
||||
|
|
|
@ -1,12 +1,9 @@
|
|||
|
||||
package mage.cards.u;
|
||||
|
||||
import java.util.UUID;
|
||||
import mage.MageObjectReference;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.TriggeredAbilityImpl;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.costs.mana.GenericManaCost;
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostEquippedEffect;
|
||||
|
@ -23,29 +20,31 @@ import mage.game.events.ZoneChangeEvent;
|
|||
import mage.game.permanent.Permanent;
|
||||
import mage.game.permanent.token.ZombieToken;
|
||||
import mage.players.Player;
|
||||
import mage.target.common.TargetControlledCreaturePermanent;
|
||||
import mage.target.targetpointer.FixedTarget;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jeffwadsworth
|
||||
*/
|
||||
public final class UnscytheKillerOfKings extends CardImpl {
|
||||
|
||||
public UnscytheKillerOfKings(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{U}{B}{B}{R}");
|
||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{U}{B}{B}{R}");
|
||||
addSuperType(SuperType.LEGENDARY);
|
||||
this.subtype.add(SubType.EQUIPMENT);
|
||||
|
||||
// Equipped creature gets +3/+3 and has first strike.
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(3, 3)));
|
||||
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FirstStrikeAbility.getInstance(), AttachmentType.EQUIPMENT)));
|
||||
Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(3, 3));
|
||||
ability.addEffect(new GainAbilityAttachedEffect(
|
||||
FirstStrikeAbility.getInstance(), AttachmentType.EQUIPMENT
|
||||
).setText("and has first strike"));
|
||||
|
||||
// Whenever a creature dealt damage by equipped creature this turn dies, you may exile that card. If you do, create a 2/2 black Zombie creature token.
|
||||
this.addAbility(new UnscytheKillerOfKingsTriggeredAbility(new UnscytheEffect()));
|
||||
|
||||
// Equip {2}
|
||||
this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(2), new TargetControlledCreaturePermanent()));
|
||||
this.addAbility(new EquipAbility(2));
|
||||
}
|
||||
|
||||
private UnscytheKillerOfKings(final UnscytheKillerOfKings card) {
|
||||
|
@ -80,25 +79,23 @@ class UnscytheKillerOfKingsTriggeredAbility extends TriggeredAbilityImpl {
|
|||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
if (((ZoneChangeEvent) event).isDiesEvent()) {
|
||||
ZoneChangeEvent zEvent = (ZoneChangeEvent) event;
|
||||
if (zEvent.getTarget().isCreature(game)) { // target token can't create Zombie
|
||||
Permanent equipment = game.getPermanent(getSourceId());
|
||||
// the currently equiped creature must have done damage to the dying creature
|
||||
if (equipment != null && equipment.getAttachedTo() != null) {
|
||||
boolean damageDealt = false;
|
||||
for (MageObjectReference mor : zEvent.getTarget().getDealtDamageByThisTurn()) {
|
||||
if (mor.refersTo(equipment.getAttachedTo(), game)) {
|
||||
damageDealt = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (damageDealt) {
|
||||
Effect effect = this.getEffects().get(0);
|
||||
effect.setTargetPointer(new FixedTarget(event.getTargetId()));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (!((ZoneChangeEvent) event).isDiesEvent()) {
|
||||
return false;
|
||||
}
|
||||
ZoneChangeEvent zEvent = (ZoneChangeEvent) event;
|
||||
if (!zEvent.getTarget().isCreature(game)) {
|
||||
return false;
|
||||
} // target token can't create Zombie
|
||||
Permanent equipment = game.getPermanent(getSourceId());
|
||||
// the currently equiped creature must have done damage to the dying creature
|
||||
if (equipment == null || equipment.getAttachedTo() == null) {
|
||||
return false;
|
||||
}
|
||||
boolean damageDealt = false;
|
||||
for (MageObjectReference mor : zEvent.getTarget().getDealtDamageByThisTurn()) {
|
||||
if (mor.refersTo(equipment.getAttachedTo(), game)) {
|
||||
getEffects().setTargetPointer(new FixedTarget(event.getTargetId(), game));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
@ -106,7 +103,7 @@ class UnscytheKillerOfKingsTriggeredAbility extends TriggeredAbilityImpl {
|
|||
|
||||
@Override
|
||||
public String getTriggerPhrase() {
|
||||
return "Whenever a creature dealt damage by equipped creature this turn dies, " ;
|
||||
return "Whenever a creature dealt damage by equipped creature this turn dies, ";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -129,14 +126,14 @@ class UnscytheEffect extends OneShotEffect {
|
|||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player controller = game.getPlayer(source.getControllerId());
|
||||
if (controller != null) {
|
||||
Card card = game.getCard(targetPointer.getFirst(game, source));
|
||||
if (card != null && game.getState().getZone(card.getId()) == Zone.GRAVEYARD && controller.moveCardToExileWithInfo(card, null, "", source, game, Zone.GRAVEYARD, true)) {
|
||||
ZombieToken zombie = new ZombieToken();
|
||||
return zombie.putOntoBattlefield(1, game, source, source.getControllerId());
|
||||
}
|
||||
return true;
|
||||
if (controller == null) {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
Card card = game.getCard(targetPointer.getFirst(game, source));
|
||||
if (card != null && game.getState().getZone(card.getId()) == Zone.GRAVEYARD && controller.moveCardToExileWithInfo(card, null, "", source, game, Zone.GRAVEYARD, true)) {
|
||||
ZombieToken zombie = new ZombieToken();
|
||||
return zombie.putOntoBattlefield(1, game, source, source.getControllerId());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ public final class VengefulRebirth extends CardImpl {
|
|||
this.getSpellAbility().addEffect(new VengefulRebirthEffect());
|
||||
|
||||
// Exile Vengeful Rebirth.
|
||||
this.getSpellAbility().addEffect(new ExileSpellEffect());
|
||||
this.getSpellAbility().addEffect(new ExileSpellEffect().concatBy("<br>"));
|
||||
}
|
||||
|
||||
private VengefulRebirth(final VengefulRebirth card) {
|
||||
|
|
|
@ -62,7 +62,7 @@ public class VerifyCardDataTest {
|
|||
|
||||
private static final Logger logger = Logger.getLogger(VerifyCardDataTest.class);
|
||||
|
||||
private static final String FULL_ABILITIES_CHECK_SET_CODE = "CON"; // check all abilities and output cards with wrong abilities texts;
|
||||
private static final String FULL_ABILITIES_CHECK_SET_CODE = "ARB"; // check all abilities and output cards with wrong abilities texts;
|
||||
private static final boolean AUTO_FIX_SAMPLE_DECKS = false; // debug only: auto-fix sample decks by test_checkSampleDecks test run
|
||||
private static final boolean ONLY_TEXT = false; // use when checking text locally, suppresses unnecessary checks and output messages
|
||||
|
||||
|
@ -83,7 +83,7 @@ public class VerifyCardDataTest {
|
|||
private static final String SKIP_LIST_WRONG_CARD_NUMBERS = "WRONG_CARD_NUMBERS";
|
||||
private static final String SKIP_LIST_SAMPLE_DECKS = "SAMPLE_DECKS";
|
||||
private static final List<String> evergreenKeywords = Arrays.asList(
|
||||
"flying", "lifelink", "menace", "trample", "haste", "first strike", "hexproof",
|
||||
"flying", "lifelink", "menace", "trample", "haste", "first strike", "hexproof", "fear",
|
||||
"deathtouch", "double strike", "indestructible", "reach", "flash", "defender", "vigilance",
|
||||
"plainswalk", "islandwalk", "swampwalk", "mountainwalk", "forestwalk"
|
||||
);
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
package mage.abilities.common;
|
||||
|
||||
import mage.abilities.effects.Effect;
|
||||
import mage.abilities.keyword.CyclingAbility;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.Game;
|
||||
import mage.game.events.GameEvent;
|
||||
import mage.game.events.ZoneChangeEvent;
|
||||
import mage.game.stack.StackObject;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public class CycleOrDiesTriggeredAbility extends ZoneChangeTriggeredAbility {
|
||||
|
||||
public CycleOrDiesTriggeredAbility(Effect effect, boolean optional) {
|
||||
super(Zone.ALL, effect, "When you cycle {this} or it dies, ", optional);
|
||||
}
|
||||
|
||||
public CycleOrDiesTriggeredAbility(CycleOrDiesTriggeredAbility ability) {
|
||||
super(ability);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkEventType(GameEvent event, Game game) {
|
||||
return event.getType() == GameEvent.EventType.ACTIVATED_ABILITY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkTrigger(GameEvent event, Game game) {
|
||||
if (!event.getSourceId().equals(this.getSourceId())) {
|
||||
return false;
|
||||
}
|
||||
if (((ZoneChangeEvent) event).isDiesEvent()) {
|
||||
return true;
|
||||
}
|
||||
StackObject object = game.getStack().getStackObject(event.getSourceId());
|
||||
return object != null && object.getStackAbility() instanceof CyclingAbility;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CycleOrDiesTriggeredAbility copy() {
|
||||
return new CycleOrDiesTriggeredAbility(this);
|
||||
}
|
||||
}
|
|
@ -86,7 +86,11 @@ public class DealsDamageToAPlayerAttachedTriggeredAbility extends TriggeredAbili
|
|||
|
||||
@Override
|
||||
public String getTriggerPhrase() {
|
||||
StringBuilder sb = new StringBuilder("Whenever ").append(attachedDescription);
|
||||
StringBuilder sb = new StringBuilder("Whenever ");
|
||||
sb.append(attachedDescription);
|
||||
if (!attachedDescription.endsWith("creature")) {
|
||||
sb.append(" creature");
|
||||
}
|
||||
sb.append(" deals");
|
||||
if (onlyCombat) {
|
||||
sb.append(" combat");
|
||||
|
|
|
@ -37,7 +37,7 @@ public class PreventAllDamageToAllEffect extends PreventionEffectImpl {
|
|||
public PreventAllDamageToAllEffect(Duration duration, FilterPermanentOrPlayer filter, boolean onlyCombat) {
|
||||
super(duration, Integer.MAX_VALUE, onlyCombat, false);
|
||||
this.filter = filter;
|
||||
staticText = "Prevent all "
|
||||
staticText = "prevent all "
|
||||
+ (onlyCombat ? "combat " : "")
|
||||
+ "damage that would be dealt to "
|
||||
+ filter.getMessage()
|
||||
|
|
|
@ -22,7 +22,7 @@ public class MustBeBlockedByTargetSourceEffect extends RequirementEffect {
|
|||
|
||||
public MustBeBlockedByTargetSourceEffect(Duration duration) {
|
||||
super(duration);
|
||||
staticText = "Target creature blocks {this} this turn if able";
|
||||
staticText = "target creature blocks {this} this turn if able";
|
||||
}
|
||||
|
||||
public MustBeBlockedByTargetSourceEffect(final MustBeBlockedByTargetSourceEffect effect) {
|
||||
|
|
Loading…
Reference in a new issue