mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 10:40:06 -08:00
parent
84933f5802
commit
59cf680abc
27 changed files with 485 additions and 793 deletions
|
|
@ -1,123 +0,0 @@
|
||||||
package mage.cards.s;
|
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.Ability;
|
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
|
||||||
import mage.abilities.common.SpellCastOpponentTriggeredAbility;
|
|
||||||
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
|
|
||||||
import mage.abilities.effects.RestrictionEffect;
|
|
||||||
import mage.abilities.keyword.FlyingAbility;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
|
||||||
import mage.constants.*;
|
|
||||||
import mage.filter.FilterSpell;
|
|
||||||
import mage.game.Game;
|
|
||||||
import mage.game.events.GameEvent;
|
|
||||||
import mage.game.permanent.Permanent;
|
|
||||||
import mage.watchers.common.PlayersAttackedThisTurnWatcher;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author notgreat
|
|
||||||
*/
|
|
||||||
public final class SandswirlWanderglyph extends CardImpl {
|
|
||||||
private static final FilterSpell filter = new FilterSpell("a spell during their turn");
|
|
||||||
|
|
||||||
static {
|
|
||||||
filter.add(TargetController.ACTIVE.getControllerPredicate());
|
|
||||||
}
|
|
||||||
public SandswirlWanderglyph(UUID ownerId, CardSetInfo setInfo) {
|
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "");
|
|
||||||
|
|
||||||
this.subtype.add(SubType.GOLEM);
|
|
||||||
this.power = new MageInt(5);
|
|
||||||
this.toughness = new MageInt(3);
|
|
||||||
this.nightCard = true;
|
|
||||||
this.color.setWhite(true);
|
|
||||||
|
|
||||||
// Flying
|
|
||||||
this.addAbility(FlyingAbility.getInstance());
|
|
||||||
|
|
||||||
// Whenever an opponent casts a spell during their turn, they can't attack you or planeswalkers you control this turn.
|
|
||||||
this.addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD,
|
|
||||||
new CantAttackSourcePlayerOrPlaneswalkerThisTurnEffect(), filter, false, SetTargetPointer.PLAYER));
|
|
||||||
|
|
||||||
// Each opponent who attacked you or a planeswalker you control this turn can't cast spells.
|
|
||||||
this.addAbility(new SimpleStaticAbility(new SandswirlWanderglyphCantCastEffect()), new PlayersAttackedThisTurnWatcher());
|
|
||||||
}
|
|
||||||
|
|
||||||
private SandswirlWanderglyph(final SandswirlWanderglyph card) {
|
|
||||||
super(card);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SandswirlWanderglyph copy() {
|
|
||||||
return new SandswirlWanderglyph(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class SandswirlWanderglyphCantCastEffect extends ContinuousRuleModifyingEffectImpl {
|
|
||||||
|
|
||||||
SandswirlWanderglyphCantCastEffect() {
|
|
||||||
super(Duration.WhileOnBattlefield, Outcome.Benefit);
|
|
||||||
staticText = "Each opponent who attacked you or a planeswalker you control this turn can't cast spells";
|
|
||||||
}
|
|
||||||
|
|
||||||
private SandswirlWanderglyphCantCastEffect(final SandswirlWanderglyphCantCastEffect effect) {
|
|
||||||
super(effect);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SandswirlWanderglyphCantCastEffect copy() {
|
|
||||||
return new SandswirlWanderglyphCantCastEffect(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean checksEventType(GameEvent event, Game game) {
|
|
||||||
return event.getType() == GameEvent.EventType.CAST_SPELL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean applies(GameEvent event, Ability source, Game game) {
|
|
||||||
if (game.isActivePlayer(event.getPlayerId()) && game.getOpponents(source.getControllerId()).contains(event.getPlayerId())) {
|
|
||||||
PlayersAttackedThisTurnWatcher watcher = game.getState().getWatcher(PlayersAttackedThisTurnWatcher.class);
|
|
||||||
return watcher != null && watcher.hasPlayerAttackedPlayerOrControlledPlaneswalker(event.getPlayerId(), source.getControllerId());
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
class CantAttackSourcePlayerOrPlaneswalkerThisTurnEffect extends RestrictionEffect {
|
|
||||||
CantAttackSourcePlayerOrPlaneswalkerThisTurnEffect() {
|
|
||||||
super(Duration.EndOfTurn);
|
|
||||||
staticText = "they can't attack you or planeswalkers you control this turn";
|
|
||||||
}
|
|
||||||
|
|
||||||
private CantAttackSourcePlayerOrPlaneswalkerThisTurnEffect(final CantAttackSourcePlayerOrPlaneswalkerThisTurnEffect effect) {
|
|
||||||
super(effect);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CantAttackSourcePlayerOrPlaneswalkerThisTurnEffect copy() {
|
|
||||||
return new CantAttackSourcePlayerOrPlaneswalkerThisTurnEffect(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canAttack(Permanent attacker, UUID defenderId, Ability source, Game game, boolean canUseChooseDialogs) {
|
|
||||||
if (game.getPlayer(defenderId) != null){
|
|
||||||
return !(source.getControllerId().equals(defenderId));
|
|
||||||
}
|
|
||||||
Permanent defender = game.getPermanent(defenderId);
|
|
||||||
if (defender != null && defender.isPlaneswalker()){
|
|
||||||
return !(source.getControllerId().equals(defender.getControllerId()));
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean applies(Permanent permanent, Ability source, Game game) {
|
|
||||||
return permanent.getControllerId().equals(getTargetPointer().getFirst(game, source));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,186 +0,0 @@
|
||||||
package mage.cards.t;
|
|
||||||
|
|
||||||
import mage.abilities.Ability;
|
|
||||||
import mage.abilities.common.SagaAbility;
|
|
||||||
import mage.abilities.effects.AsThoughEffectImpl;
|
|
||||||
import mage.abilities.effects.OneShotEffect;
|
|
||||||
import mage.abilities.effects.ReplacementEffectImpl;
|
|
||||||
import mage.abilities.effects.common.CreateTokenEffect;
|
|
||||||
import mage.abilities.effects.common.ExileSourceAndReturnFaceUpEffect;
|
|
||||||
import mage.cards.Card;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
|
||||||
import mage.constants.*;
|
|
||||||
import mage.filter.StaticFilters;
|
|
||||||
import mage.game.Game;
|
|
||||||
import mage.game.events.GameEvent;
|
|
||||||
import mage.game.events.ZoneChangeEvent;
|
|
||||||
import mage.game.permanent.Permanent;
|
|
||||||
import mage.game.permanent.token.TreasureToken;
|
|
||||||
import mage.players.Player;
|
|
||||||
import mage.target.common.TargetOpponent;
|
|
||||||
import mage.watchers.common.CastFromGraveyardWatcher;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author TheElk801
|
|
||||||
*/
|
|
||||||
public final class TheGreatWork extends CardImpl {
|
|
||||||
|
|
||||||
public TheGreatWork(UUID ownerId, CardSetInfo setInfo) {
|
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "");
|
|
||||||
|
|
||||||
this.subtype.add(SubType.SAGA);
|
|
||||||
this.color.setRed(true);
|
|
||||||
this.nightCard = true;
|
|
||||||
|
|
||||||
// (As this Saga enters and after your draw step, add a lore counter.)
|
|
||||||
SagaAbility sagaAbility = new SagaAbility(this);
|
|
||||||
|
|
||||||
// I -- The Great Work deals 3 damage to target opponent and each creature they control.
|
|
||||||
sagaAbility.addChapterEffect(
|
|
||||||
this, SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_I,
|
|
||||||
new TheGreatWorkEffect(), new TargetOpponent()
|
|
||||||
);
|
|
||||||
|
|
||||||
// II -- Create three Treasure tokens.
|
|
||||||
sagaAbility.addChapterEffect(
|
|
||||||
this, SagaChapter.CHAPTER_II,
|
|
||||||
new CreateTokenEffect(new TreasureToken(), 3)
|
|
||||||
);
|
|
||||||
|
|
||||||
// III -- Until end of turn, you may cast instant and sorcery spells from any graveyard. If a spell cast this way would be put into a graveyard, exile it instead. Exile The Great Work, then return it to the battlefield.
|
|
||||||
sagaAbility.addChapterEffect(
|
|
||||||
this, SagaChapter.CHAPTER_III, new TheGreatWorkCastFromGraveyardEffect(),
|
|
||||||
new TheGreatWorkReplacementEffect(), new ExileSourceAndReturnFaceUpEffect()
|
|
||||||
);
|
|
||||||
this.addAbility(sagaAbility, new CastFromGraveyardWatcher());
|
|
||||||
}
|
|
||||||
|
|
||||||
private TheGreatWork(final TheGreatWork card) {
|
|
||||||
super(card);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TheGreatWork copy() {
|
|
||||||
return new TheGreatWork(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class TheGreatWorkEffect extends OneShotEffect {
|
|
||||||
|
|
||||||
TheGreatWorkEffect() {
|
|
||||||
super(Outcome.Benefit);
|
|
||||||
staticText = "{this} deals 3 damage to target opponent and each creature they control";
|
|
||||||
}
|
|
||||||
|
|
||||||
private TheGreatWorkEffect(final TheGreatWorkEffect effect) {
|
|
||||||
super(effect);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TheGreatWorkEffect copy() {
|
|
||||||
return new TheGreatWorkEffect(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean apply(Game game, Ability source) {
|
|
||||||
Player player = game.getPlayer(getTargetPointer().getFirst(game, source));
|
|
||||||
if (player == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
player.damage(3, source, game);
|
|
||||||
for (Permanent permanent : game.getBattlefield().getActivePermanents(
|
|
||||||
StaticFilters.FILTER_CONTROLLED_CREATURE, player.getId(), source, game
|
|
||||||
)) {
|
|
||||||
permanent.damage(3, source, game);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class TheGreatWorkCastFromGraveyardEffect extends AsThoughEffectImpl {
|
|
||||||
|
|
||||||
TheGreatWorkCastFromGraveyardEffect() {
|
|
||||||
super(AsThoughEffectType.CAST_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit);
|
|
||||||
staticText = "until end of turn, you may cast instant and sorcery spells from any graveyard";
|
|
||||||
}
|
|
||||||
|
|
||||||
private TheGreatWorkCastFromGraveyardEffect(final TheGreatWorkCastFromGraveyardEffect effect) {
|
|
||||||
super(effect);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean apply(Game game, Ability source) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TheGreatWorkCastFromGraveyardEffect copy() {
|
|
||||||
return new TheGreatWorkCastFromGraveyardEffect(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) {
|
|
||||||
Card card = game.getCard(objectId);
|
|
||||||
if (card != null
|
|
||||||
&& affectedControllerId.equals(source.getControllerId())
|
|
||||||
&& StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY.match(card, game)
|
|
||||||
&& Zone.GRAVEYARD.equals(game.getState().getZone(card.getId()))) {
|
|
||||||
game.getState().setValue("TheGreatWork", card);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class TheGreatWorkReplacementEffect extends ReplacementEffectImpl {
|
|
||||||
|
|
||||||
TheGreatWorkReplacementEffect() {
|
|
||||||
super(Duration.EndOfTurn, Outcome.Exile);
|
|
||||||
staticText = "if a spell cast this way would be put into a graveyard, exile it instead";
|
|
||||||
}
|
|
||||||
|
|
||||||
private TheGreatWorkReplacementEffect(final TheGreatWorkReplacementEffect effect) {
|
|
||||||
super(effect);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TheGreatWorkReplacementEffect copy() {
|
|
||||||
return new TheGreatWorkReplacementEffect(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
|
|
||||||
Player controller = game.getPlayer(source.getControllerId());
|
|
||||||
if (controller == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
Card card = (Card) game.getState().getValue("TheGreatWork");
|
|
||||||
if (card != null) {
|
|
||||||
((ZoneChangeEvent) event).setToZone(Zone.EXILED);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean checksEventType(GameEvent event, Game game) {
|
|
||||||
return event.getType() == GameEvent.EventType.ZONE_CHANGE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean applies(GameEvent event, Ability source, Game game) {
|
|
||||||
if (Zone.GRAVEYARD != ((ZoneChangeEvent) event).getToZone()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
Card card = game.getCard(event.getSourceId());
|
|
||||||
if (card == null || (!card.isInstant(game) && !card.isSorcery(game))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
CastFromGraveyardWatcher watcher = game.getState().getWatcher(CastFromGraveyardWatcher.class);
|
|
||||||
return watcher != null
|
|
||||||
&& watcher.spellWasCastFromGraveyard(event.getTargetId(),
|
|
||||||
game.getState().getZoneChangeCounter(event.getTargetId()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,16 +1,21 @@
|
||||||
package mage.cards.u;
|
package mage.cards.u;
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.TransformIntoSourceTriggeredAbility;
|
||||||
import mage.abilities.common.TransformsOrEntersTriggeredAbility;
|
import mage.abilities.common.TransformsOrEntersTriggeredAbility;
|
||||||
|
import mage.abilities.common.WerewolfBackTriggeredAbility;
|
||||||
import mage.abilities.common.WerewolfFrontTriggeredAbility;
|
import mage.abilities.common.WerewolfFrontTriggeredAbility;
|
||||||
|
import mage.abilities.effects.common.FightTargetSourceEffect;
|
||||||
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
import mage.abilities.effects.common.continuous.BoostTargetEffect;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.SuperType;
|
import mage.constants.SuperType;
|
||||||
|
import mage.constants.TargetController;
|
||||||
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
|
import mage.filter.predicate.Predicates;
|
||||||
|
import mage.target.TargetPermanent;
|
||||||
import mage.target.common.TargetCreaturePermanent;
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -18,28 +23,50 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* @author fireshoes
|
* @author fireshoes
|
||||||
*/
|
*/
|
||||||
public final class UlrichOfTheKrallenhorde extends CardImpl {
|
public final class UlrichOfTheKrallenhorde extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
|
private static final FilterCreaturePermanent filter
|
||||||
|
= new FilterCreaturePermanent("non-Werewolf creature you don't control");
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter.add(Predicates.not(SubType.WEREWOLF.getPredicate()));
|
||||||
|
filter.add(TargetController.NOT_YOU.getControllerPredicate());
|
||||||
|
}
|
||||||
|
|
||||||
public UlrichOfTheKrallenhorde(UUID ownerId, CardSetInfo setInfo) {
|
public UlrichOfTheKrallenhorde(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}{G}");
|
super(ownerId, setInfo,
|
||||||
this.supertype.add(SuperType.LEGENDARY);
|
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{3}{R}{G}",
|
||||||
this.subtype.add(SubType.HUMAN);
|
"Ulrich, Uncontested Alpha",
|
||||||
this.subtype.add(SubType.WEREWOLF);
|
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "RG"
|
||||||
this.power = new MageInt(4);
|
);
|
||||||
this.toughness = new MageInt(4);
|
|
||||||
|
|
||||||
this.secondSideCardClazz = mage.cards.u.UlrichUncontestedAlpha.class;
|
// Ulrich of the Krallenhorde
|
||||||
|
this.getLeftHalfCard().setPT(4, 4);
|
||||||
|
|
||||||
// Whenever this creature enters the battlefield or transforms into Ulrich of the Krallenhorde, target creature gets +4/+4 until end of turn.
|
// Whenever this creature enters the battlefield or transforms into Ulrich of the Krallenhorde, target creature gets +4/+4 until end of turn.
|
||||||
Ability ability = new TransformsOrEntersTriggeredAbility(
|
Ability ability = new TransformsOrEntersTriggeredAbility(
|
||||||
new BoostTargetEffect(4, 4), false
|
new BoostTargetEffect(4, 4), false
|
||||||
);
|
);
|
||||||
ability.addTarget(new TargetCreaturePermanent());
|
ability.addTarget(new TargetCreaturePermanent());
|
||||||
this.addAbility(ability);
|
this.getLeftHalfCard().addAbility(ability);
|
||||||
|
|
||||||
// At the beginning of each upkeep, if no spells were cast last turn, transform Ulrich of the Krallenhorde.
|
// At the beginning of each upkeep, if no spells were cast last turn, transform Ulrich of the Krallenhorde.
|
||||||
this.addAbility(new TransformAbility());
|
this.getLeftHalfCard().addAbility(new WerewolfFrontTriggeredAbility());
|
||||||
this.addAbility(new WerewolfFrontTriggeredAbility());
|
|
||||||
|
// Ulrich, Uncontested Alpha
|
||||||
|
this.getRightHalfCard().setPT(6, 6);
|
||||||
|
|
||||||
|
// Whenever this creature transforms into Ulrich, Uncontested Alpha, you may have it fight target non-Werewolf creature you don't control.
|
||||||
|
Ability ability2 = new TransformIntoSourceTriggeredAbility(
|
||||||
|
new FightTargetSourceEffect()
|
||||||
|
.setText("you may have it fight target non-Werewolf creature you don't control"),
|
||||||
|
true, true
|
||||||
|
);
|
||||||
|
ability2.addTarget(new TargetPermanent(filter));
|
||||||
|
this.getRightHalfCard().addAbility(ability2);
|
||||||
|
|
||||||
|
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Ulrich, Uncontested Alpha.
|
||||||
|
this.getRightHalfCard().addAbility(new WerewolfBackTriggeredAbility());
|
||||||
}
|
}
|
||||||
|
|
||||||
private UlrichOfTheKrallenhorde(final UlrichOfTheKrallenhorde card) {
|
private UlrichOfTheKrallenhorde(final UlrichOfTheKrallenhorde card) {
|
||||||
|
|
|
||||||
|
|
@ -1,66 +0,0 @@
|
||||||
package mage.cards.u;
|
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.Ability;
|
|
||||||
import mage.abilities.common.TransformIntoSourceTriggeredAbility;
|
|
||||||
import mage.abilities.common.WerewolfBackTriggeredAbility;
|
|
||||||
import mage.abilities.effects.common.FightTargetSourceEffect;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
|
||||||
import mage.constants.CardType;
|
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.constants.SuperType;
|
|
||||||
import mage.constants.TargetController;
|
|
||||||
import mage.filter.common.FilterCreaturePermanent;
|
|
||||||
import mage.filter.predicate.Predicates;
|
|
||||||
import mage.target.TargetPermanent;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author fireshoes
|
|
||||||
*/
|
|
||||||
public final class UlrichUncontestedAlpha extends CardImpl {
|
|
||||||
|
|
||||||
private static final FilterCreaturePermanent filter
|
|
||||||
= new FilterCreaturePermanent("non-Werewolf creature you don't control");
|
|
||||||
|
|
||||||
static {
|
|
||||||
filter.add(Predicates.not(SubType.WEREWOLF.getPredicate()));
|
|
||||||
filter.add(TargetController.NOT_YOU.getControllerPredicate());
|
|
||||||
}
|
|
||||||
|
|
||||||
public UlrichUncontestedAlpha(UUID ownerId, CardSetInfo setInfo) {
|
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
|
|
||||||
this.supertype.add(SuperType.LEGENDARY);
|
|
||||||
this.subtype.add(SubType.WEREWOLF);
|
|
||||||
this.power = new MageInt(6);
|
|
||||||
this.toughness = new MageInt(6);
|
|
||||||
this.color.setRed(true);
|
|
||||||
this.color.setGreen(true);
|
|
||||||
|
|
||||||
// this card is the second face of double-faced card
|
|
||||||
this.nightCard = true;
|
|
||||||
|
|
||||||
// Whenever this creature transforms into Ulrich, Uncontested Alpha, you may have it fight target non-Werewolf creature you don't control.
|
|
||||||
Ability ability = new TransformIntoSourceTriggeredAbility(
|
|
||||||
new FightTargetSourceEffect()
|
|
||||||
.setText("you may have it fight target non-Werewolf creature you don't control"),
|
|
||||||
true, true
|
|
||||||
);
|
|
||||||
ability.addTarget(new TargetPermanent(filter));
|
|
||||||
this.addAbility(ability);
|
|
||||||
|
|
||||||
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Ulrich, Uncontested Alpha.
|
|
||||||
this.addAbility(new WerewolfBackTriggeredAbility());
|
|
||||||
}
|
|
||||||
|
|
||||||
private UlrichUncontestedAlpha(final UlrichUncontestedAlpha card) {
|
|
||||||
super(card);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public UlrichUncontestedAlpha copy() {
|
|
||||||
return new UlrichUncontestedAlpha(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,48 +0,0 @@
|
||||||
package mage.cards.u;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.effects.common.turn.AddExtraTurnControllerEffect;
|
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.constants.SuperType;
|
|
||||||
import mage.abilities.common.TransformIntoSourceTriggeredAbility;
|
|
||||||
import mage.abilities.keyword.MenaceAbility;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
|
||||||
import mage.constants.CardType;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author balazskristof
|
|
||||||
*/
|
|
||||||
public final class UltimeciaOmnipotent extends CardImpl {
|
|
||||||
|
|
||||||
public UltimeciaOmnipotent(UUID ownerId, CardSetInfo setInfo) {
|
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
|
|
||||||
|
|
||||||
this.supertype.add(SuperType.LEGENDARY);
|
|
||||||
this.subtype.add(SubType.NIGHTMARE);
|
|
||||||
this.subtype.add(SubType.WARLOCK);
|
|
||||||
this.power = new MageInt(7);
|
|
||||||
this.toughness = new MageInt(7);
|
|
||||||
|
|
||||||
this.color.setBlack(true);
|
|
||||||
this.color.setBlue(true);
|
|
||||||
|
|
||||||
this.nightCard = true;
|
|
||||||
|
|
||||||
// Menace
|
|
||||||
this.addAbility(new MenaceAbility());
|
|
||||||
|
|
||||||
// Time Compression -- When this creature transforms into Ultimecia, Omnipotent, take an extra turn after this one.
|
|
||||||
this.addAbility(new TransformIntoSourceTriggeredAbility(new AddExtraTurnControllerEffect()).withFlavorWord("Time Compression"));
|
|
||||||
}
|
|
||||||
|
|
||||||
private UltimeciaOmnipotent(final UltimeciaOmnipotent card) {
|
|
||||||
super(card);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public UltimeciaOmnipotent copy() {
|
|
||||||
return new UltimeciaOmnipotent(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,44 +1,45 @@
|
||||||
package mage.cards.u;
|
package mage.cards.u;
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.common.EntersBattlefieldOrAttacksSourceTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldOrAttacksSourceTriggeredAbility;
|
||||||
|
import mage.abilities.common.TransformIntoSourceTriggeredAbility;
|
||||||
import mage.abilities.costs.CompositeCost;
|
import mage.abilities.costs.CompositeCost;
|
||||||
import mage.abilities.costs.common.ExileFromGraveCost;
|
import mage.abilities.costs.common.ExileFromGraveCost;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.abilities.effects.common.DoIfCostPaid;
|
import mage.abilities.effects.common.DoIfCostPaid;
|
||||||
import mage.abilities.effects.common.TransformSourceEffect;
|
import mage.abilities.effects.common.TransformSourceEffect;
|
||||||
|
import mage.abilities.effects.common.turn.AddExtraTurnControllerEffect;
|
||||||
import mage.abilities.effects.keyword.SurveilEffect;
|
import mage.abilities.effects.keyword.SurveilEffect;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
import mage.abilities.keyword.MenaceAbility;
|
||||||
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.SuperType;
|
import mage.constants.SuperType;
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
|
||||||
import mage.constants.CardType;
|
|
||||||
import mage.target.common.TargetCardInYourGraveyard;
|
import mage.target.common.TargetCardInYourGraveyard;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author balazskristof
|
* @author balazskristof
|
||||||
*/
|
*/
|
||||||
public final class UltimeciaTimeSorceress extends CardImpl {
|
public final class UltimeciaTimeSorceress extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
public UltimeciaTimeSorceress(UUID ownerId, CardSetInfo setInfo) {
|
public UltimeciaTimeSorceress(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}{B}");
|
super(ownerId, setInfo,
|
||||||
|
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WARLOCK}, "{3}{U}{B}",
|
||||||
|
"Ultimecia, Omnipotent",
|
||||||
|
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.NIGHTMARE, SubType.WARLOCK}, "UB"
|
||||||
|
);
|
||||||
|
|
||||||
this.supertype.add(SuperType.LEGENDARY);
|
// Ultimecia, Time Sorceress
|
||||||
this.subtype.add(SubType.HUMAN);
|
this.getLeftHalfCard().setPT(4, 5);
|
||||||
this.subtype.add(SubType.WARLOCK);
|
|
||||||
this.power = new MageInt(4);
|
|
||||||
this.toughness = new MageInt(5);
|
|
||||||
|
|
||||||
this.secondSideCardClazz = mage.cards.u.UltimeciaOmnipotent.class;
|
|
||||||
|
|
||||||
// Whenever Ultimecia enters or attacks, surveil 2.
|
// Whenever Ultimecia enters or attacks, surveil 2.
|
||||||
this.addAbility(new EntersBattlefieldOrAttacksSourceTriggeredAbility(new SurveilEffect(2)));
|
this.getLeftHalfCard().addAbility(new EntersBattlefieldOrAttacksSourceTriggeredAbility(new SurveilEffect(2)));
|
||||||
|
|
||||||
// At the beginning of your end step, you may pay {4}{U}{U}{B}{B} and exile eight cards from your graveyard. If you do, transform Ultimecia.
|
// At the beginning of your end step, you may pay {4}{U}{U}{B}{B} and exile eight cards from your graveyard. If you do, transform Ultimecia.
|
||||||
this.addAbility(new BeginningOfEndStepTriggeredAbility(new DoIfCostPaid(
|
this.getLeftHalfCard().addAbility(new BeginningOfEndStepTriggeredAbility(new DoIfCostPaid(
|
||||||
new TransformSourceEffect(),
|
new TransformSourceEffect(),
|
||||||
new CompositeCost(
|
new CompositeCost(
|
||||||
new ManaCostsImpl<>("{4}{U}{U}{B}{B}"),
|
new ManaCostsImpl<>("{4}{U}{U}{B}{B}"),
|
||||||
|
|
@ -46,7 +47,15 @@ public final class UltimeciaTimeSorceress extends CardImpl {
|
||||||
"{4}{U}{U}{B}{B} and exile eight cards from your graveyard"
|
"{4}{U}{U}{B}{B} and exile eight cards from your graveyard"
|
||||||
)
|
)
|
||||||
)));
|
)));
|
||||||
this.addAbility(new TransformAbility());
|
|
||||||
|
// Ultimecia, Omnipotent
|
||||||
|
this.getRightHalfCard().setPT(7, 7);
|
||||||
|
|
||||||
|
// Menace
|
||||||
|
this.getRightHalfCard().addAbility(new MenaceAbility());
|
||||||
|
|
||||||
|
// Time Compression -- When this creature transforms into Ultimecia, Omnipotent, take an extra turn after this one.
|
||||||
|
this.getRightHalfCard().addAbility(new TransformIntoSourceTriggeredAbility(new AddExtraTurnControllerEffect()).withFlavorWord("Time Compression"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private UltimeciaTimeSorceress(final UltimeciaTimeSorceress card) {
|
private UltimeciaTimeSorceress(final UltimeciaTimeSorceress card) {
|
||||||
|
|
|
||||||
|
|
@ -1,87 +0,0 @@
|
||||||
package mage.cards.u;
|
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.MageObject;
|
|
||||||
import mage.abilities.Ability;
|
|
||||||
import mage.abilities.common.AttacksTriggeredAbility;
|
|
||||||
import mage.abilities.condition.Condition;
|
|
||||||
import mage.abilities.decorator.ConditionalOneShotEffect;
|
|
||||||
import mage.abilities.effects.common.TransformSourceEffect;
|
|
||||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
|
||||||
import mage.abilities.keyword.HasteAbility;
|
|
||||||
import mage.abilities.keyword.IndestructibleAbility;
|
|
||||||
import mage.abilities.keyword.LivingMetalAbility;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
|
||||||
import mage.constants.*;
|
|
||||||
import mage.filter.FilterPermanent;
|
|
||||||
import mage.filter.StaticFilters;
|
|
||||||
import mage.filter.common.FilterAttackingCreature;
|
|
||||||
import mage.game.Game;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author TheElk801
|
|
||||||
*/
|
|
||||||
public final class UltraMagnusArmoredCarrier extends CardImpl {
|
|
||||||
|
|
||||||
public UltraMagnusArmoredCarrier(UUID ownerId, CardSetInfo setInfo) {
|
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "");
|
|
||||||
|
|
||||||
this.supertype.add(SuperType.LEGENDARY);
|
|
||||||
this.subtype.add(SubType.VEHICLE);
|
|
||||||
this.power = new MageInt(4);
|
|
||||||
this.toughness = new MageInt(7);
|
|
||||||
this.color.setRed(true);
|
|
||||||
this.color.setGreen(true);
|
|
||||||
this.color.setWhite(true);
|
|
||||||
this.nightCard = true;
|
|
||||||
|
|
||||||
// Living metal
|
|
||||||
this.addAbility(new LivingMetalAbility());
|
|
||||||
|
|
||||||
// Haste
|
|
||||||
this.addAbility(HasteAbility.getInstance());
|
|
||||||
|
|
||||||
// Formidable -- Whenever Ultra Magnus attacks, attacking creatures you control gain indestructible until end of turn. If those creatures have total power 8 or greater, convert Ultra Magnus.
|
|
||||||
Ability ability = new AttacksTriggeredAbility(new GainAbilityControlledEffect(
|
|
||||||
IndestructibleAbility.getInstance(), Duration.EndOfTurn,
|
|
||||||
StaticFilters.FILTER_ATTACKING_CREATURES
|
|
||||||
));
|
|
||||||
ability.addEffect(new ConditionalOneShotEffect(
|
|
||||||
new TransformSourceEffect(), UltraMagnusArmoredCarrierCondition.instance,
|
|
||||||
"If those creatures have total power 8 or greater, convert {this}"
|
|
||||||
));
|
|
||||||
this.addAbility(ability.setAbilityWord(AbilityWord.FORMIDABLE));
|
|
||||||
}
|
|
||||||
|
|
||||||
private UltraMagnusArmoredCarrier(final UltraMagnusArmoredCarrier card) {
|
|
||||||
super(card);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public UltraMagnusArmoredCarrier copy() {
|
|
||||||
return new UltraMagnusArmoredCarrier(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
enum UltraMagnusArmoredCarrierCondition implements Condition {
|
|
||||||
instance;
|
|
||||||
private static final FilterPermanent filter = new FilterAttackingCreature();
|
|
||||||
|
|
||||||
static {
|
|
||||||
filter.add(TargetController.YOU.getControllerPredicate());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean apply(Game game, Ability source) {
|
|
||||||
return game
|
|
||||||
.getBattlefield()
|
|
||||||
.getActivePermanents(filter, source.getControllerId(), source, game)
|
|
||||||
.stream()
|
|
||||||
.map(MageObject::getPower)
|
|
||||||
.mapToInt(MageInt::getValue)
|
|
||||||
.sum() >= 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,20 +1,26 @@
|
||||||
package mage.cards.u;
|
package mage.cards.u;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.MageInt;
|
||||||
|
import mage.MageObject;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.AttacksTriggeredAbility;
|
import mage.abilities.common.AttacksTriggeredAbility;
|
||||||
import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility;
|
import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility;
|
||||||
|
import mage.abilities.condition.Condition;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
|
import mage.abilities.decorator.ConditionalOneShotEffect;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
import mage.abilities.effects.common.TransformSourceEffect;
|
import mage.abilities.effects.common.TransformSourceEffect;
|
||||||
import mage.abilities.keyword.MoreThanMeetsTheEyeAbility;
|
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||||
import mage.abilities.keyword.WardAbility;
|
import mage.abilities.keyword.*;
|
||||||
import mage.cards.Card;
|
import mage.cards.Card;
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.*;
|
import mage.constants.*;
|
||||||
import mage.filter.FilterCard;
|
import mage.filter.FilterCard;
|
||||||
|
import mage.filter.FilterPermanent;
|
||||||
|
import mage.filter.StaticFilters;
|
||||||
import mage.filter.common.FilterArtifactCard;
|
import mage.filter.common.FilterArtifactCard;
|
||||||
|
import mage.filter.common.FilterAttackingCreature;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
|
|
@ -27,26 +33,46 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class UltraMagnusTactician extends CardImpl {
|
public final class UltraMagnusTactician extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
public UltraMagnusTactician(UUID ownerId, CardSetInfo setInfo) {
|
public UltraMagnusTactician(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{4}{R}{G}{W}");
|
super(ownerId, setInfo,
|
||||||
|
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, new SubType[]{SubType.ROBOT}, "{4}{R}{G}{W}",
|
||||||
|
"Ultra Magnus, Armored Carrier",
|
||||||
|
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ARTIFACT}, new SubType[]{SubType.VEHICLE}, "RGW"
|
||||||
|
);
|
||||||
|
|
||||||
this.supertype.add(SuperType.LEGENDARY);
|
// Ultra Magnus, Tactician
|
||||||
this.subtype.add(SubType.ROBOT);
|
this.getLeftHalfCard().setPT(7, 7);
|
||||||
this.power = new MageInt(7);
|
|
||||||
this.toughness = new MageInt(7);
|
|
||||||
|
|
||||||
this.secondSideCardClazz = mage.cards.u.UltraMagnusArmoredCarrier.class;
|
|
||||||
|
|
||||||
// More Than Meets the Eye {2}{R}{G}{W}
|
// More Than Meets the Eye {2}{R}{G}{W}
|
||||||
this.addAbility(new MoreThanMeetsTheEyeAbility(this, "{2}{R}{G}{W}"));
|
this.getLeftHalfCard().addAbility(new MoreThanMeetsTheEyeAbility(this, "{2}{R}{G}{W}"));
|
||||||
|
|
||||||
// Ward {2}
|
// Ward {2}
|
||||||
this.addAbility(new WardAbility(new ManaCostsImpl<>("{2}"), false));
|
this.getLeftHalfCard().addAbility(new WardAbility(new ManaCostsImpl<>("{2}"), false));
|
||||||
|
|
||||||
// Whenever Ultra Magnus attacks, you may put an artifact creature card from your hand onto the battlefield tapped and attacking. If you do, convert Ultra Magnus at end of combat.
|
// Whenever Ultra Magnus attacks, you may put an artifact creature card from your hand onto the battlefield tapped and attacking. If you do, convert Ultra Magnus at end of combat.
|
||||||
this.addAbility(new AttacksTriggeredAbility(new UltraMagnusTacticianEffect()));
|
this.getLeftHalfCard().addAbility(new AttacksTriggeredAbility(new UltraMagnusTacticianEffect()));
|
||||||
|
|
||||||
|
// Ultra Magnus, Armored Carrier
|
||||||
|
this.getRightHalfCard().setPT(4, 7);
|
||||||
|
|
||||||
|
// Living metal
|
||||||
|
this.getRightHalfCard().addAbility(new LivingMetalAbility());
|
||||||
|
|
||||||
|
// Haste
|
||||||
|
this.getRightHalfCard().addAbility(HasteAbility.getInstance());
|
||||||
|
|
||||||
|
// Formidable -- Whenever Ultra Magnus attacks, attacking creatures you control gain indestructible until end of turn. If those creatures have total power 8 or greater, convert Ultra Magnus.
|
||||||
|
Ability ability = new AttacksTriggeredAbility(new GainAbilityControlledEffect(
|
||||||
|
IndestructibleAbility.getInstance(), Duration.EndOfTurn,
|
||||||
|
StaticFilters.FILTER_ATTACKING_CREATURES
|
||||||
|
));
|
||||||
|
ability.addEffect(new ConditionalOneShotEffect(
|
||||||
|
new TransformSourceEffect(), UltraMagnusArmoredCarrierCondition.instance,
|
||||||
|
"If those creatures have total power 8 or greater, convert {this}"
|
||||||
|
));
|
||||||
|
this.getRightHalfCard().addAbility(ability.setAbilityWord(AbilityWord.FORMIDABLE));
|
||||||
}
|
}
|
||||||
|
|
||||||
private UltraMagnusTactician(final UltraMagnusTactician card) {
|
private UltraMagnusTactician(final UltraMagnusTactician card) {
|
||||||
|
|
@ -109,3 +135,23 @@ class UltraMagnusTacticianEffect extends OneShotEffect {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum UltraMagnusArmoredCarrierCondition implements Condition {
|
||||||
|
instance;
|
||||||
|
private static final FilterPermanent filter = new FilterAttackingCreature();
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter.add(TargetController.YOU.getControllerPredicate());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Game game, Ability source) {
|
||||||
|
return game
|
||||||
|
.getBattlefield()
|
||||||
|
.getActivePermanents(filter, source.getControllerId(), source, game)
|
||||||
|
.stream()
|
||||||
|
.map(MageObject::getPower)
|
||||||
|
.mapToInt(MageInt::getValue)
|
||||||
|
.sum() >= 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,43 +0,0 @@
|
||||||
|
|
||||||
package mage.cards.u;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.Mana;
|
|
||||||
import mage.abilities.costs.common.TapSourceCost;
|
|
||||||
import mage.abilities.mana.SimpleManaAbility;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
|
||||||
import mage.constants.CardType;
|
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.constants.Zone;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author fireshoes
|
|
||||||
*/
|
|
||||||
public final class UlvenwaldAbomination extends CardImpl {
|
|
||||||
|
|
||||||
public UlvenwaldAbomination(UUID ownerId, CardSetInfo setInfo) {
|
|
||||||
super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"");
|
|
||||||
this.subtype.add(SubType.ELDRAZI);
|
|
||||||
this.subtype.add(SubType.WEREWOLF);
|
|
||||||
this.power = new MageInt(4);
|
|
||||||
this.toughness = new MageInt(6);
|
|
||||||
|
|
||||||
// this card is the second face of double-faced card
|
|
||||||
this.nightCard = true;
|
|
||||||
|
|
||||||
// {T}: Add {C}{C}.
|
|
||||||
this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, Mana.ColorlessMana(2), new TapSourceCost()));
|
|
||||||
}
|
|
||||||
|
|
||||||
private UlvenwaldAbomination(final UlvenwaldAbomination card) {
|
|
||||||
super(card);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public UlvenwaldAbomination copy() {
|
|
||||||
return new UlvenwaldAbomination(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,63 +0,0 @@
|
||||||
package mage.cards.u;
|
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.Ability;
|
|
||||||
import mage.abilities.common.SimpleStaticAbility;
|
|
||||||
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
|
||||||
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
|
||||||
import mage.abilities.keyword.HasteAbility;
|
|
||||||
import mage.abilities.keyword.TrampleAbility;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
|
||||||
import mage.constants.CardType;
|
|
||||||
import mage.constants.Duration;
|
|
||||||
import mage.constants.SubType;
|
|
||||||
import mage.filter.StaticFilters;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author TheElk801
|
|
||||||
*/
|
|
||||||
public final class UlvenwaldBehemoth extends CardImpl {
|
|
||||||
|
|
||||||
public UlvenwaldBehemoth(UUID ownerId, CardSetInfo setInfo) {
|
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
|
|
||||||
|
|
||||||
this.subtype.add(SubType.BEAST);
|
|
||||||
this.subtype.add(SubType.HORROR);
|
|
||||||
this.power = new MageInt(8);
|
|
||||||
this.toughness = new MageInt(8);
|
|
||||||
this.color.setGreen(true);
|
|
||||||
this.nightCard = true;
|
|
||||||
|
|
||||||
// Trample
|
|
||||||
this.addAbility(TrampleAbility.getInstance());
|
|
||||||
|
|
||||||
// Haste
|
|
||||||
this.addAbility(HasteAbility.getInstance());
|
|
||||||
|
|
||||||
// Other creatures you control get +1/+1 and have trample and haste.
|
|
||||||
Ability ability = new SimpleStaticAbility(new BoostControlledEffect(
|
|
||||||
1, 1, Duration.WhileOnBattlefield, true
|
|
||||||
));
|
|
||||||
ability.addEffect(new GainAbilityControlledEffect(
|
|
||||||
TrampleAbility.getInstance(), Duration.WhileOnBattlefield,
|
|
||||||
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE
|
|
||||||
).setText("and have trample"));
|
|
||||||
ability.addEffect(new GainAbilityControlledEffect(
|
|
||||||
HasteAbility.getInstance(), Duration.WhileOnBattlefield,
|
|
||||||
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE
|
|
||||||
).setText("and haste"));
|
|
||||||
this.addAbility(ability);
|
|
||||||
}
|
|
||||||
|
|
||||||
private UlvenwaldBehemoth(final UlvenwaldBehemoth card) {
|
|
||||||
super(card);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public UlvenwaldBehemoth copy() {
|
|
||||||
return new UlvenwaldBehemoth(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
|
|
||||||
package mage.cards.u;
|
package mage.cards.u;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.Mana;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
import mage.abilities.costs.common.TapSourceCost;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.abilities.effects.common.TransformSourceEffect;
|
import mage.abilities.effects.common.TransformSourceEffect;
|
||||||
import mage.abilities.keyword.DefenderAbility;
|
import mage.abilities.keyword.DefenderAbility;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
|
||||||
import mage.abilities.mana.GreenManaAbility;
|
import mage.abilities.mana.GreenManaAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.abilities.mana.SimpleManaAbility;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.constants.Zone;
|
import mage.constants.Zone;
|
||||||
|
|
@ -19,26 +19,32 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* @author fireshoes
|
* @author fireshoes
|
||||||
*/
|
*/
|
||||||
public final class UlvenwaldCaptive extends CardImpl {
|
public final class UlvenwaldCaptive extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
public UlvenwaldCaptive(UUID ownerId, CardSetInfo setInfo) {
|
public UlvenwaldCaptive(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}");
|
super(ownerId, setInfo,
|
||||||
this.subtype.add(SubType.WEREWOLF);
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF, SubType.HORROR}, "{1}{G}",
|
||||||
this.subtype.add(SubType.HORROR);
|
"Ulvenwald Abomination",
|
||||||
this.power = new MageInt(1);
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.ELDRAZI, SubType.WEREWOLF}, ""
|
||||||
this.toughness = new MageInt(2);
|
);
|
||||||
|
|
||||||
this.secondSideCardClazz = mage.cards.u.UlvenwaldAbomination.class;
|
// Ulvenwald Captive
|
||||||
|
this.getLeftHalfCard().setPT(1, 2);
|
||||||
|
|
||||||
// Defender
|
// Defender
|
||||||
this.addAbility(DefenderAbility.getInstance());
|
this.getLeftHalfCard().addAbility(DefenderAbility.getInstance());
|
||||||
|
|
||||||
// {T}: Add {G}.
|
// {T}: Add {G}.
|
||||||
this.addAbility(new GreenManaAbility());
|
this.getLeftHalfCard().addAbility(new GreenManaAbility());
|
||||||
|
|
||||||
// {5}{G}{G}: Transform Ulvenwald Captive.
|
// {5}{G}{G}: Transform Ulvenwald Captive.
|
||||||
this.addAbility(new TransformAbility());
|
this.getLeftHalfCard().addAbility(new SimpleActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{5}{G}{G}")));
|
||||||
this.addAbility(new SimpleActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{5}{G}{G}")));
|
|
||||||
|
// Ulvenwald Abomination
|
||||||
|
this.getRightHalfCard().setPT(4, 6);
|
||||||
|
|
||||||
|
// {T}: Add {C}{C}.
|
||||||
|
this.getRightHalfCard().addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, Mana.ColorlessMana(2), new TapSourceCost()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private UlvenwaldCaptive(final UlvenwaldCaptive card) {
|
private UlvenwaldCaptive(final UlvenwaldCaptive card) {
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,12 @@
|
||||||
package mage.cards.u;
|
package mage.cards.u;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
import mage.abilities.common.WerewolfBackTriggeredAbility;
|
||||||
import mage.abilities.common.WerewolfFrontTriggeredAbility;
|
import mage.abilities.common.WerewolfFrontTriggeredAbility;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.cards.CardImpl;
|
import mage.abilities.effects.common.RegenerateSourceEffect;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
|
|
||||||
|
|
@ -13,22 +15,29 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* @author nantuko
|
* @author nantuko
|
||||||
*/
|
*/
|
||||||
public final class UlvenwaldMystics extends CardImpl {
|
public final class UlvenwaldMystics extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
public UlvenwaldMystics(UUID ownerId, CardSetInfo setInfo) {
|
public UlvenwaldMystics(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{G}");
|
super(ownerId, setInfo,
|
||||||
this.subtype.add(SubType.HUMAN);
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.SHAMAN, SubType.WEREWOLF}, "{2}{G}{G}",
|
||||||
this.subtype.add(SubType.SHAMAN);
|
"Ulvenwald Primordials",
|
||||||
this.subtype.add(SubType.WEREWOLF);
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "G"
|
||||||
|
);
|
||||||
|
|
||||||
this.secondSideCardClazz = mage.cards.u.UlvenwaldPrimordials.class;
|
// Ulvenwald Mystics
|
||||||
|
this.getLeftHalfCard().setPT(3, 3);
|
||||||
this.power = new MageInt(3);
|
|
||||||
this.toughness = new MageInt(3);
|
|
||||||
|
|
||||||
// At the beginning of each upkeep, if no spells were cast last turn, transform Ulvenwald Mystics.
|
// At the beginning of each upkeep, if no spells were cast last turn, transform Ulvenwald Mystics.
|
||||||
this.addAbility(new TransformAbility());
|
this.getLeftHalfCard().addAbility(new WerewolfFrontTriggeredAbility());
|
||||||
this.addAbility(new WerewolfFrontTriggeredAbility());
|
|
||||||
|
// Ulvenwald Primordials
|
||||||
|
this.getRightHalfCard().setPT(5, 5);
|
||||||
|
|
||||||
|
// {G}: Regenerate Ulvenwald Primordials.
|
||||||
|
this.getRightHalfCard().addAbility(new SimpleActivatedAbility(new RegenerateSourceEffect(), new ManaCostsImpl<>("{G}")));
|
||||||
|
|
||||||
|
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Ulvenwald Primordials.
|
||||||
|
this.getRightHalfCard().addAbility(new WerewolfBackTriggeredAbility());
|
||||||
}
|
}
|
||||||
|
|
||||||
private UlvenwaldMystics(final UlvenwaldMystics card) {
|
private UlvenwaldMystics(final UlvenwaldMystics card) {
|
||||||
|
|
|
||||||
|
|
@ -1,43 +1,71 @@
|
||||||
package mage.cards.u;
|
package mage.cards.u;
|
||||||
|
|
||||||
import mage.MageInt;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
import mage.abilities.common.SimpleActivatedAbility;
|
||||||
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.abilities.effects.common.TransformSourceEffect;
|
import mage.abilities.effects.common.TransformSourceEffect;
|
||||||
|
import mage.abilities.effects.common.continuous.BoostControlledEffect;
|
||||||
|
import mage.abilities.effects.common.continuous.GainAbilityControlledEffect;
|
||||||
import mage.abilities.keyword.HasteAbility;
|
import mage.abilities.keyword.HasteAbility;
|
||||||
import mage.abilities.keyword.TrampleAbility;
|
import mage.abilities.keyword.TrampleAbility;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
|
import mage.constants.Duration;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
|
import mage.filter.StaticFilters;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class UlvenwaldOddity extends CardImpl {
|
public final class UlvenwaldOddity extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
public UlvenwaldOddity(UUID ownerId, CardSetInfo setInfo) {
|
public UlvenwaldOddity(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}{G}");
|
super(ownerId, setInfo,
|
||||||
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.BEAST}, "{2}{G}{G}",
|
||||||
|
"Ulvenwald Behemoth",
|
||||||
|
new CardType[]{CardType.CREATURE}, new SubType[]{SubType.BEAST, SubType.HORROR}, "G"
|
||||||
|
);
|
||||||
|
|
||||||
this.subtype.add(SubType.BEAST);
|
// Ulvenwald Oddity
|
||||||
this.power = new MageInt(4);
|
this.getLeftHalfCard().setPT(4, 4);
|
||||||
this.toughness = new MageInt(4);
|
|
||||||
this.secondSideCardClazz = mage.cards.u.UlvenwaldBehemoth.class;
|
|
||||||
|
|
||||||
// Trample
|
// Trample
|
||||||
this.addAbility(TrampleAbility.getInstance());
|
this.getLeftHalfCard().addAbility(TrampleAbility.getInstance());
|
||||||
|
|
||||||
// Haste
|
// Haste
|
||||||
this.addAbility(HasteAbility.getInstance());
|
this.getLeftHalfCard().addAbility(HasteAbility.getInstance());
|
||||||
|
|
||||||
// {5}{G}{G}: Transform Ulvenwald Oddity.
|
// {5}{G}{G}: Transform Ulvenwald Oddity.
|
||||||
this.addAbility(new TransformAbility());
|
this.getLeftHalfCard().addAbility(new SimpleActivatedAbility(
|
||||||
this.addAbility(new SimpleActivatedAbility(
|
|
||||||
new TransformSourceEffect(), new ManaCostsImpl<>("{5}{G}{G}")
|
new TransformSourceEffect(), new ManaCostsImpl<>("{5}{G}{G}")
|
||||||
));
|
));
|
||||||
|
|
||||||
|
// Ulvenwald Behemoth
|
||||||
|
this.getRightHalfCard().setPT(8, 8);
|
||||||
|
|
||||||
|
// Trample
|
||||||
|
this.getRightHalfCard().addAbility(TrampleAbility.getInstance());
|
||||||
|
|
||||||
|
// Haste
|
||||||
|
this.getRightHalfCard().addAbility(HasteAbility.getInstance());
|
||||||
|
|
||||||
|
// Other creatures you control get +1/+1 and have trample and haste.
|
||||||
|
Ability ability = new SimpleStaticAbility(new BoostControlledEffect(
|
||||||
|
1, 1, Duration.WhileOnBattlefield, true
|
||||||
|
));
|
||||||
|
ability.addEffect(new GainAbilityControlledEffect(
|
||||||
|
TrampleAbility.getInstance(), Duration.WhileOnBattlefield,
|
||||||
|
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE
|
||||||
|
).setText("and have trample"));
|
||||||
|
ability.addEffect(new GainAbilityControlledEffect(
|
||||||
|
HasteAbility.getInstance(), Duration.WhileOnBattlefield,
|
||||||
|
StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE
|
||||||
|
).setText("and haste"));
|
||||||
|
this.getRightHalfCard().addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
private UlvenwaldOddity(final UlvenwaldOddity card) {
|
private UlvenwaldOddity(final UlvenwaldOddity card) {
|
||||||
|
|
|
||||||
|
|
@ -1,46 +0,0 @@
|
||||||
package mage.cards.u;
|
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.abilities.common.SimpleActivatedAbility;
|
|
||||||
import mage.abilities.common.WerewolfBackTriggeredAbility;
|
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
|
||||||
import mage.abilities.effects.common.RegenerateSourceEffect;
|
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
|
||||||
import mage.constants.CardType;
|
|
||||||
import mage.constants.SubType;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author nantuko
|
|
||||||
*/
|
|
||||||
public final class UlvenwaldPrimordials extends CardImpl {
|
|
||||||
|
|
||||||
public UlvenwaldPrimordials(UUID ownerId, CardSetInfo setInfo) {
|
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "");
|
|
||||||
this.subtype.add(SubType.WEREWOLF);
|
|
||||||
this.color.setGreen(true);
|
|
||||||
|
|
||||||
// this card is the second face of double-faced card
|
|
||||||
this.nightCard = true;
|
|
||||||
|
|
||||||
this.power = new MageInt(5);
|
|
||||||
this.toughness = new MageInt(5);
|
|
||||||
|
|
||||||
// {G}: Regenerate Ulvenwald Primordials.
|
|
||||||
this.addAbility(new SimpleActivatedAbility(new RegenerateSourceEffect(), new ManaCostsImpl<>("{G}")));
|
|
||||||
|
|
||||||
// At the beginning of each upkeep, if a player cast two or more spells last turn, transform Ulvenwald Primordials.
|
|
||||||
this.addAbility(new WerewolfBackTriggeredAbility());
|
|
||||||
}
|
|
||||||
|
|
||||||
private UlvenwaldPrimordials(final UlvenwaldPrimordials card) {
|
|
||||||
super(card);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public UlvenwaldPrimordials copy() {
|
|
||||||
return new UlvenwaldPrimordials(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -2,42 +2,73 @@ package mage.cards.u;
|
||||||
|
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
|
||||||
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
import mage.abilities.common.SpellCastOpponentTriggeredAbility;
|
||||||
import mage.abilities.condition.common.CastFromEverywhereSourceCondition;
|
import mage.abilities.condition.common.CastFromEverywhereSourceCondition;
|
||||||
|
import mage.abilities.effects.ContinuousRuleModifyingEffectImpl;
|
||||||
import mage.abilities.effects.OneShotEffect;
|
import mage.abilities.effects.OneShotEffect;
|
||||||
|
import mage.abilities.effects.RestrictionEffect;
|
||||||
import mage.abilities.keyword.CraftAbility;
|
import mage.abilities.keyword.CraftAbility;
|
||||||
import mage.cards.CardImpl;
|
import mage.abilities.keyword.FlyingAbility;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.cards.Cards;
|
import mage.cards.Cards;
|
||||||
import mage.cards.CardsImpl;
|
import mage.cards.CardsImpl;
|
||||||
import mage.constants.CardType;
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.ComparisonType;
|
import mage.constants.*;
|
||||||
import mage.constants.Outcome;
|
import mage.filter.FilterSpell;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
import mage.filter.common.FilterCreaturePermanent;
|
import mage.filter.common.FilterCreaturePermanent;
|
||||||
import mage.filter.predicate.mageobject.PowerPredicate;
|
import mage.filter.predicate.mageobject.PowerPredicate;
|
||||||
import mage.filter.predicate.permanent.ControllerIdPredicate;
|
import mage.filter.predicate.permanent.ControllerIdPredicate;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
|
import mage.game.events.GameEvent;
|
||||||
import mage.game.permanent.Permanent;
|
import mage.game.permanent.Permanent;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
import mage.target.TargetPermanent;
|
import mage.target.TargetPermanent;
|
||||||
|
import mage.watchers.common.PlayersAttackedThisTurnWatcher;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author notgreat
|
* @author notgreat
|
||||||
*/
|
*/
|
||||||
public final class UnstableGlyphbridge extends CardImpl {
|
public final class UnstableGlyphbridge extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
|
private static final FilterSpell filter = new FilterSpell("a spell during their turn");
|
||||||
|
|
||||||
|
static {
|
||||||
|
filter.add(TargetController.ACTIVE.getControllerPredicate());
|
||||||
|
}
|
||||||
|
|
||||||
public UnstableGlyphbridge(UUID ownerId, CardSetInfo setInfo) {
|
public UnstableGlyphbridge(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}{W}{W}");
|
super(ownerId, setInfo,
|
||||||
this.secondSideCardClazz = mage.cards.s.SandswirlWanderglyph.class;
|
new CardType[]{CardType.ARTIFACT}, new SubType[]{}, "{3}{W}{W}",
|
||||||
|
"Sandswirl Wanderglyph",
|
||||||
|
new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, new SubType[]{SubType.GOLEM}, "W"
|
||||||
|
);
|
||||||
|
|
||||||
|
// Unstable Glyphbridge
|
||||||
// When Unstable Glyphbridge enters the battlefield, if you cast it, for each player, choose a creature with power 2 or less that player controls. Then destroy all creatures except creatures chosen this way.
|
// When Unstable Glyphbridge enters the battlefield, if you cast it, for each player, choose a creature with power 2 or less that player controls. Then destroy all creatures except creatures chosen this way.
|
||||||
this.addAbility(new EntersBattlefieldTriggeredAbility(new UnstableGlyphbridgeEffect())
|
this.getLeftHalfCard().addAbility(new EntersBattlefieldTriggeredAbility(new UnstableGlyphbridgeEffect())
|
||||||
.withInterveningIf(CastFromEverywhereSourceCondition.instance));
|
.withInterveningIf(CastFromEverywhereSourceCondition.instance));
|
||||||
|
|
||||||
// Craft with artifact {3}{W}{W}
|
// Craft with artifact {3}{W}{W}
|
||||||
this.addAbility(new CraftAbility("{3}{W}{W}"));
|
this.getLeftHalfCard().addAbility(new CraftAbility("{3}{W}{W}"));
|
||||||
|
|
||||||
|
// Sandswirl Wanderglyph
|
||||||
|
this.getRightHalfCard().setPT(5, 3);
|
||||||
|
|
||||||
|
// Flying
|
||||||
|
this.getRightHalfCard().addAbility(FlyingAbility.getInstance());
|
||||||
|
|
||||||
|
// Whenever an opponent casts a spell during their turn, they can't attack you or planeswalkers you control this turn.
|
||||||
|
this.getRightHalfCard().addAbility(new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD,
|
||||||
|
new CantAttackSourcePlayerOrPlaneswalkerThisTurnEffect(), filter, false, SetTargetPointer.PLAYER));
|
||||||
|
|
||||||
|
// Each opponent who attacked you or a planeswalker you control this turn can't cast spells.
|
||||||
|
Ability ability = new SimpleStaticAbility(new SandswirlWanderglyphCantCastEffect());
|
||||||
|
ability.addWatcher(new PlayersAttackedThisTurnWatcher());
|
||||||
|
this.getRightHalfCard().addAbility(ability);
|
||||||
}
|
}
|
||||||
|
|
||||||
private UnstableGlyphbridge(final UnstableGlyphbridge card) {
|
private UnstableGlyphbridge(final UnstableGlyphbridge card) {
|
||||||
|
|
@ -97,3 +128,68 @@ class UnstableGlyphbridgeEffect extends OneShotEffect {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class SandswirlWanderglyphCantCastEffect extends ContinuousRuleModifyingEffectImpl {
|
||||||
|
|
||||||
|
SandswirlWanderglyphCantCastEffect() {
|
||||||
|
super(Duration.WhileOnBattlefield, Outcome.Benefit);
|
||||||
|
staticText = "Each opponent who attacked you or a planeswalker you control this turn can't cast spells";
|
||||||
|
}
|
||||||
|
|
||||||
|
private SandswirlWanderglyphCantCastEffect(final SandswirlWanderglyphCantCastEffect effect) {
|
||||||
|
super(effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SandswirlWanderglyphCantCastEffect copy() {
|
||||||
|
return new SandswirlWanderglyphCantCastEffect(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean checksEventType(GameEvent event, Game game) {
|
||||||
|
return event.getType() == GameEvent.EventType.CAST_SPELL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean applies(GameEvent event, Ability source, Game game) {
|
||||||
|
if (game.isActivePlayer(event.getPlayerId()) && game.getOpponents(source.getControllerId()).contains(event.getPlayerId())) {
|
||||||
|
PlayersAttackedThisTurnWatcher watcher = game.getState().getWatcher(PlayersAttackedThisTurnWatcher.class);
|
||||||
|
return watcher != null && watcher.hasPlayerAttackedPlayerOrControlledPlaneswalker(event.getPlayerId(), source.getControllerId());
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class CantAttackSourcePlayerOrPlaneswalkerThisTurnEffect extends RestrictionEffect {
|
||||||
|
CantAttackSourcePlayerOrPlaneswalkerThisTurnEffect() {
|
||||||
|
super(Duration.EndOfTurn);
|
||||||
|
staticText = "they can't attack you or planeswalkers you control this turn";
|
||||||
|
}
|
||||||
|
|
||||||
|
private CantAttackSourcePlayerOrPlaneswalkerThisTurnEffect(final CantAttackSourcePlayerOrPlaneswalkerThisTurnEffect effect) {
|
||||||
|
super(effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CantAttackSourcePlayerOrPlaneswalkerThisTurnEffect copy() {
|
||||||
|
return new CantAttackSourcePlayerOrPlaneswalkerThisTurnEffect(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canAttack(Permanent attacker, UUID defenderId, Ability source, Game game, boolean canUseChooseDialogs) {
|
||||||
|
if (game.getPlayer(defenderId) != null) {
|
||||||
|
return !(source.getControllerId().equals(defenderId));
|
||||||
|
}
|
||||||
|
Permanent defender = game.getPermanent(defenderId);
|
||||||
|
if (defender != null && defender.isPlaneswalker()) {
|
||||||
|
return !(source.getControllerId().equals(defender.getControllerId()));
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean applies(Permanent permanent, Ability source, Game game) {
|
||||||
|
return permanent.getControllerId().equals(getTargetPointer().getFirst(game, source));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,34 @@
|
||||||
package mage.cards.u;
|
package mage.cards.u;
|
||||||
|
|
||||||
import mage.MageInt;
|
|
||||||
import mage.Mana;
|
import mage.Mana;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.ActivateIfConditionActivatedAbility;
|
||||||
|
import mage.abilities.common.SagaAbility;
|
||||||
import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
import mage.abilities.common.SpellCastControllerTriggeredAbility;
|
||||||
import mage.abilities.condition.Condition;
|
import mage.abilities.condition.Condition;
|
||||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||||
import mage.abilities.common.ActivateIfConditionActivatedAbility;
|
import mage.abilities.effects.AsThoughEffectImpl;
|
||||||
|
import mage.abilities.effects.OneShotEffect;
|
||||||
|
import mage.abilities.effects.ReplacementEffectImpl;
|
||||||
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
import mage.abilities.effects.common.DamageTargetEffect;
|
import mage.abilities.effects.common.DamageTargetEffect;
|
||||||
import mage.abilities.effects.common.ExileAndReturnSourceEffect;
|
import mage.abilities.effects.common.ExileAndReturnSourceEffect;
|
||||||
|
import mage.abilities.effects.common.ExileSourceAndReturnFaceUpEffect;
|
||||||
import mage.abilities.effects.mana.BasicManaEffect;
|
import mage.abilities.effects.mana.BasicManaEffect;
|
||||||
import mage.abilities.keyword.FirstStrikeAbility;
|
import mage.abilities.keyword.FirstStrikeAbility;
|
||||||
import mage.abilities.keyword.TransformAbility;
|
import mage.cards.Card;
|
||||||
import mage.cards.CardImpl;
|
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.TransformingDoubleFacedCard;
|
||||||
import mage.constants.*;
|
import mage.constants.*;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
|
import mage.game.events.GameEvent;
|
||||||
|
import mage.game.events.ZoneChangeEvent;
|
||||||
|
import mage.game.permanent.Permanent;
|
||||||
|
import mage.game.permanent.token.TreasureToken;
|
||||||
|
import mage.players.Player;
|
||||||
import mage.target.common.TargetOpponent;
|
import mage.target.common.TargetOpponent;
|
||||||
|
import mage.watchers.common.CastFromGraveyardWatcher;
|
||||||
import mage.watchers.common.SpellsCastWatcher;
|
import mage.watchers.common.SpellsCastWatcher;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
@ -26,20 +37,20 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* @author TheElk801
|
* @author TheElk801
|
||||||
*/
|
*/
|
||||||
public final class Urabrask extends CardImpl {
|
public final class Urabrask extends TransformingDoubleFacedCard {
|
||||||
|
|
||||||
public Urabrask(UUID ownerId, CardSetInfo setInfo) {
|
public Urabrask(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{R}");
|
super(ownerId, setInfo,
|
||||||
|
new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.PHYREXIAN, SubType.PRAETOR}, "{2}{R}{R}",
|
||||||
|
"The Great Work",
|
||||||
|
new SuperType[]{}, new CardType[]{CardType.ENCHANTMENT}, new SubType[]{SubType.SAGA}, "R"
|
||||||
|
);
|
||||||
|
|
||||||
this.supertype.add(SuperType.LEGENDARY);
|
// Urabrask
|
||||||
this.subtype.add(SubType.PHYREXIAN);
|
this.getLeftHalfCard().setPT(4, 4);
|
||||||
this.subtype.add(SubType.PRAETOR);
|
|
||||||
this.power = new MageInt(4);
|
|
||||||
this.toughness = new MageInt(4);
|
|
||||||
this.secondSideCardClazz = mage.cards.t.TheGreatWork.class;
|
|
||||||
|
|
||||||
// First strike
|
// First strike
|
||||||
this.addAbility(FirstStrikeAbility.getInstance());
|
this.getLeftHalfCard().addAbility(FirstStrikeAbility.getInstance());
|
||||||
|
|
||||||
// Whenever you cast an instant or sorcery spell, Urabrask deals 1 damage to target opponent. Add {R}.
|
// Whenever you cast an instant or sorcery spell, Urabrask deals 1 damage to target opponent. Add {R}.
|
||||||
Ability ability = new SpellCastControllerTriggeredAbility(
|
Ability ability = new SpellCastControllerTriggeredAbility(
|
||||||
|
|
@ -47,14 +58,37 @@ public final class Urabrask extends CardImpl {
|
||||||
);
|
);
|
||||||
ability.addEffect(new BasicManaEffect(Mana.RedMana(1)));
|
ability.addEffect(new BasicManaEffect(Mana.RedMana(1)));
|
||||||
ability.addTarget(new TargetOpponent());
|
ability.addTarget(new TargetOpponent());
|
||||||
this.addAbility(ability);
|
this.getLeftHalfCard().addAbility(ability);
|
||||||
|
|
||||||
// {R}: Exile Urabrask, then return it to the battlefield transformed under its owner's control. Activate only as a sorcery and only if you've cast three or more instant and/or sorcery spells this turn.
|
// {R}: Exile Urabrask, then return it to the battlefield transformed under its owner's control. Activate only as a sorcery and only if you've cast three or more instant and/or sorcery spells this turn.
|
||||||
this.addAbility(new TransformAbility());
|
this.getLeftHalfCard().addAbility(new ActivateIfConditionActivatedAbility(
|
||||||
this.addAbility(new ActivateIfConditionActivatedAbility(
|
|
||||||
new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD_TRANSFORMED),
|
new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD_TRANSFORMED),
|
||||||
new ManaCostsImpl<>("{R}"), UrabraskCondition.instance
|
new ManaCostsImpl<>("{R}"), UrabraskCondition.instance
|
||||||
).setTiming(TimingRule.SORCERY));
|
).setTiming(TimingRule.SORCERY));
|
||||||
|
|
||||||
|
// The Great Work
|
||||||
|
// (As this Saga enters and after your draw step, add a lore counter.)
|
||||||
|
SagaAbility sagaAbility = new SagaAbility(this.getRightHalfCard());
|
||||||
|
|
||||||
|
// I -- The Great Work deals 3 damage to target opponent and each creature they control.
|
||||||
|
sagaAbility.addChapterEffect(
|
||||||
|
this.getRightHalfCard(), SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_I,
|
||||||
|
new TheGreatWorkEffect(), new TargetOpponent()
|
||||||
|
);
|
||||||
|
|
||||||
|
// II -- Create three Treasure tokens.
|
||||||
|
sagaAbility.addChapterEffect(
|
||||||
|
this.getRightHalfCard(), SagaChapter.CHAPTER_II,
|
||||||
|
new CreateTokenEffect(new TreasureToken(), 3)
|
||||||
|
);
|
||||||
|
|
||||||
|
// III -- Until end of turn, you may cast instant and sorcery spells from any graveyard. If a spell cast this way would be put into a graveyard, exile it instead. Exile The Great Work, then return it to the battlefield.
|
||||||
|
sagaAbility.addChapterEffect(
|
||||||
|
this.getRightHalfCard(), SagaChapter.CHAPTER_III, new TheGreatWorkCastFromGraveyardEffect(),
|
||||||
|
new TheGreatWorkReplacementEffect(), new ExileSourceAndReturnFaceUpEffect()
|
||||||
|
);
|
||||||
|
sagaAbility.addWatcher(new CastFromGraveyardWatcher());
|
||||||
|
this.getRightHalfCard().addAbility(sagaAbility);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Urabrask(final Urabrask card) {
|
private Urabrask(final Urabrask card) {
|
||||||
|
|
@ -87,3 +121,120 @@ enum UrabraskCondition implements Condition {
|
||||||
return "if you've cast three or more instant and/or sorcery spells this turn";
|
return "if you've cast three or more instant and/or sorcery spells this turn";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class TheGreatWorkEffect extends OneShotEffect {
|
||||||
|
|
||||||
|
TheGreatWorkEffect() {
|
||||||
|
super(Outcome.Benefit);
|
||||||
|
staticText = "{this} deals 3 damage to target opponent and each creature they control";
|
||||||
|
}
|
||||||
|
|
||||||
|
private TheGreatWorkEffect(final TheGreatWorkEffect effect) {
|
||||||
|
super(effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TheGreatWorkEffect copy() {
|
||||||
|
return new TheGreatWorkEffect(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Game game, Ability source) {
|
||||||
|
Player player = game.getPlayer(getTargetPointer().getFirst(game, source));
|
||||||
|
if (player == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
player.damage(3, source, game);
|
||||||
|
for (Permanent permanent : game.getBattlefield().getActivePermanents(
|
||||||
|
StaticFilters.FILTER_CONTROLLED_CREATURE, player.getId(), source, game
|
||||||
|
)) {
|
||||||
|
permanent.damage(3, source, game);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class TheGreatWorkCastFromGraveyardEffect extends AsThoughEffectImpl {
|
||||||
|
|
||||||
|
TheGreatWorkCastFromGraveyardEffect() {
|
||||||
|
super(AsThoughEffectType.CAST_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit);
|
||||||
|
staticText = "until end of turn, you may cast instant and sorcery spells from any graveyard";
|
||||||
|
}
|
||||||
|
|
||||||
|
private TheGreatWorkCastFromGraveyardEffect(final TheGreatWorkCastFromGraveyardEffect effect) {
|
||||||
|
super(effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(Game game, Ability source) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TheGreatWorkCastFromGraveyardEffect copy() {
|
||||||
|
return new TheGreatWorkCastFromGraveyardEffect(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) {
|
||||||
|
Card card = game.getCard(objectId);
|
||||||
|
if (card != null
|
||||||
|
&& affectedControllerId.equals(source.getControllerId())
|
||||||
|
&& StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY.match(card, game)
|
||||||
|
&& Zone.GRAVEYARD.equals(game.getState().getZone(card.getId()))) {
|
||||||
|
game.getState().setValue("TheGreatWork", card);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class TheGreatWorkReplacementEffect extends ReplacementEffectImpl {
|
||||||
|
|
||||||
|
TheGreatWorkReplacementEffect() {
|
||||||
|
super(Duration.EndOfTurn, Outcome.Exile);
|
||||||
|
staticText = "if a spell cast this way would be put into a graveyard, exile it instead";
|
||||||
|
}
|
||||||
|
|
||||||
|
private TheGreatWorkReplacementEffect(final TheGreatWorkReplacementEffect effect) {
|
||||||
|
super(effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TheGreatWorkReplacementEffect copy() {
|
||||||
|
return new TheGreatWorkReplacementEffect(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
|
||||||
|
Player controller = game.getPlayer(source.getControllerId());
|
||||||
|
if (controller == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Card card = (Card) game.getState().getValue("TheGreatWork");
|
||||||
|
if (card != null) {
|
||||||
|
((ZoneChangeEvent) event).setToZone(Zone.EXILED);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean checksEventType(GameEvent event, Game game) {
|
||||||
|
return event.getType() == GameEvent.EventType.ZONE_CHANGE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean applies(GameEvent event, Ability source, Game game) {
|
||||||
|
if (Zone.GRAVEYARD != ((ZoneChangeEvent) event).getToZone()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Card card = game.getCard(event.getSourceId());
|
||||||
|
if (card == null || (!card.isInstant(game) && !card.isSorcery(game))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
CastFromGraveyardWatcher watcher = game.getState().getWatcher(CastFromGraveyardWatcher.class);
|
||||||
|
return watcher != null
|
||||||
|
&& watcher.spellWasCastFromGraveyard(event.getTargetId(),
|
||||||
|
game.getState().getZoneChangeCounter(event.getTargetId()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -235,8 +235,6 @@ public final class EldritchMoon extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Tree of Perdition", 109, Rarity.MYTHIC, mage.cards.t.TreeOfPerdition.class));
|
cards.add(new SetCardInfo("Tree of Perdition", 109, Rarity.MYTHIC, mage.cards.t.TreeOfPerdition.class));
|
||||||
cards.add(new SetCardInfo("Turn Aside", 78, Rarity.COMMON, mage.cards.t.TurnAside.class));
|
cards.add(new SetCardInfo("Turn Aside", 78, Rarity.COMMON, mage.cards.t.TurnAside.class));
|
||||||
cards.add(new SetCardInfo("Ulrich of the Krallenhorde", 191, Rarity.MYTHIC, mage.cards.u.UlrichOfTheKrallenhorde.class));
|
cards.add(new SetCardInfo("Ulrich of the Krallenhorde", 191, Rarity.MYTHIC, mage.cards.u.UlrichOfTheKrallenhorde.class));
|
||||||
cards.add(new SetCardInfo("Ulrich, Uncontested Alpha", 191, Rarity.MYTHIC, mage.cards.u.UlrichUncontestedAlpha.class));
|
|
||||||
cards.add(new SetCardInfo("Ulvenwald Abomination", 175, Rarity.COMMON, mage.cards.u.UlvenwaldAbomination.class));
|
|
||||||
cards.add(new SetCardInfo("Ulvenwald Captive", 175, Rarity.COMMON, mage.cards.u.UlvenwaldCaptive.class));
|
cards.add(new SetCardInfo("Ulvenwald Captive", 175, Rarity.COMMON, mage.cards.u.UlvenwaldCaptive.class));
|
||||||
cards.add(new SetCardInfo("Ulvenwald Observer", 176, Rarity.RARE, mage.cards.u.UlvenwaldObserver.class));
|
cards.add(new SetCardInfo("Ulvenwald Observer", 176, Rarity.RARE, mage.cards.u.UlvenwaldObserver.class));
|
||||||
cards.add(new SetCardInfo("Unsubstantiate", 79, Rarity.UNCOMMON, mage.cards.u.Unsubstantiate.class));
|
cards.add(new SetCardInfo("Unsubstantiate", 79, Rarity.UNCOMMON, mage.cards.u.Unsubstantiate.class));
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,6 @@ public class EldritchMoonPromos extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Thalia, Heretic Cathar", 46, Rarity.RARE, mage.cards.t.ThaliaHereticCathar.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Thalia, Heretic Cathar", 46, Rarity.RARE, mage.cards.t.ThaliaHereticCathar.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Thalia, Heretic Cathar", "46s", Rarity.RARE, mage.cards.t.ThaliaHereticCathar.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Thalia, Heretic Cathar", "46s", Rarity.RARE, mage.cards.t.ThaliaHereticCathar.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Tree of Perdition", "109s", Rarity.MYTHIC, mage.cards.t.TreeOfPerdition.class));
|
cards.add(new SetCardInfo("Tree of Perdition", "109s", Rarity.MYTHIC, mage.cards.t.TreeOfPerdition.class));
|
||||||
cards.add(new SetCardInfo("Ulrich, Uncontested Alpha", "191s", Rarity.MYTHIC, mage.cards.u.UlrichUncontestedAlpha.class));
|
|
||||||
cards.add(new SetCardInfo("Ulrich of the Krallenhorde", "191s", Rarity.MYTHIC, mage.cards.u.UlrichOfTheKrallenhorde.class));
|
cards.add(new SetCardInfo("Ulrich of the Krallenhorde", "191s", Rarity.MYTHIC, mage.cards.u.UlrichOfTheKrallenhorde.class));
|
||||||
cards.add(new SetCardInfo("Ulvenwald Observer", 176, Rarity.RARE, mage.cards.u.UlvenwaldObserver.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Ulvenwald Observer", 176, Rarity.RARE, mage.cards.u.UlvenwaldObserver.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Ulvenwald Observer", "176s", Rarity.RARE, mage.cards.u.UlvenwaldObserver.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Ulvenwald Observer", "176s", Rarity.RARE, mage.cards.u.UlvenwaldObserver.class, NON_FULL_USE_VARIOUS));
|
||||||
|
|
|
||||||
|
|
@ -560,8 +560,6 @@ public final class FinalFantasy extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Ultima, Origin of Oblivion", 2, Rarity.RARE, mage.cards.u.UltimaOriginOfOblivion.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Ultima, Origin of Oblivion", 2, Rarity.RARE, mage.cards.u.UltimaOriginOfOblivion.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Ultima, Origin of Oblivion", 324, Rarity.RARE, mage.cards.u.UltimaOriginOfOblivion.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Ultima, Origin of Oblivion", 324, Rarity.RARE, mage.cards.u.UltimaOriginOfOblivion.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Ultima, Origin of Oblivion", 421, Rarity.RARE, mage.cards.u.UltimaOriginOfOblivion.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Ultima, Origin of Oblivion", 421, Rarity.RARE, mage.cards.u.UltimaOriginOfOblivion.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Ultimecia, Omnipotent", 247, Rarity.UNCOMMON, mage.cards.u.UltimeciaOmnipotent.class, NON_FULL_USE_VARIOUS));
|
|
||||||
cards.add(new SetCardInfo("Ultimecia, Omnipotent", 513, Rarity.UNCOMMON, mage.cards.u.UltimeciaOmnipotent.class, NON_FULL_USE_VARIOUS));
|
|
||||||
cards.add(new SetCardInfo("Ultimecia, Temporal Threat", 441, Rarity.RARE, mage.cards.u.UltimeciaTemporalThreat.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Ultimecia, Temporal Threat", 441, Rarity.RARE, mage.cards.u.UltimeciaTemporalThreat.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Ultimecia, Temporal Threat", 556, Rarity.RARE, mage.cards.u.UltimeciaTemporalThreat.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Ultimecia, Temporal Threat", 556, Rarity.RARE, mage.cards.u.UltimeciaTemporalThreat.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Ultimecia, Time Sorceress", 247, Rarity.UNCOMMON, mage.cards.u.UltimeciaTimeSorceress.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Ultimecia, Time Sorceress", 247, Rarity.UNCOMMON, mage.cards.u.UltimeciaTimeSorceress.class, NON_FULL_USE_VARIOUS));
|
||||||
|
|
|
||||||
|
|
@ -281,7 +281,6 @@ public final class Innistrad extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Tribute to Hunger", 119, Rarity.UNCOMMON, mage.cards.t.TributeToHunger.class));
|
cards.add(new SetCardInfo("Tribute to Hunger", 119, Rarity.UNCOMMON, mage.cards.t.TributeToHunger.class));
|
||||||
cards.add(new SetCardInfo("Typhoid Rats", 120, Rarity.COMMON, mage.cards.t.TyphoidRats.class));
|
cards.add(new SetCardInfo("Typhoid Rats", 120, Rarity.COMMON, mage.cards.t.TyphoidRats.class));
|
||||||
cards.add(new SetCardInfo("Ulvenwald Mystics", 208, Rarity.UNCOMMON, mage.cards.u.UlvenwaldMystics.class));
|
cards.add(new SetCardInfo("Ulvenwald Mystics", 208, Rarity.UNCOMMON, mage.cards.u.UlvenwaldMystics.class));
|
||||||
cards.add(new SetCardInfo("Ulvenwald Primordials", 208, Rarity.UNCOMMON, mage.cards.u.UlvenwaldPrimordials.class));
|
|
||||||
cards.add(new SetCardInfo("Unbreathing Horde", 121, Rarity.RARE, mage.cards.u.UnbreathingHorde.class));
|
cards.add(new SetCardInfo("Unbreathing Horde", 121, Rarity.RARE, mage.cards.u.UnbreathingHorde.class));
|
||||||
cards.add(new SetCardInfo("Unburial Rites", 122, Rarity.UNCOMMON, mage.cards.u.UnburialRites.class));
|
cards.add(new SetCardInfo("Unburial Rites", 122, Rarity.UNCOMMON, mage.cards.u.UnburialRites.class));
|
||||||
cards.add(new SetCardInfo("Undead Alchemist", 84, Rarity.RARE, mage.cards.u.UndeadAlchemist.class));
|
cards.add(new SetCardInfo("Undead Alchemist", 84, Rarity.RARE, mage.cards.u.UndeadAlchemist.class));
|
||||||
|
|
|
||||||
|
|
@ -411,8 +411,6 @@ public final class InnistradCrimsonVow extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Toxrill, the Corrosive", 321, Rarity.MYTHIC, mage.cards.t.ToxrillTheCorrosive.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Toxrill, the Corrosive", 321, Rarity.MYTHIC, mage.cards.t.ToxrillTheCorrosive.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Traveling Minister", 39, Rarity.COMMON, mage.cards.t.TravelingMinister.class));
|
cards.add(new SetCardInfo("Traveling Minister", 39, Rarity.COMMON, mage.cards.t.TravelingMinister.class));
|
||||||
cards.add(new SetCardInfo("Twinblade Geist", 40, Rarity.UNCOMMON, mage.cards.t.TwinbladeGeist.class));
|
cards.add(new SetCardInfo("Twinblade Geist", 40, Rarity.UNCOMMON, mage.cards.t.TwinbladeGeist.class));
|
||||||
cards.add(new SetCardInfo("Ulvenwald Behemoth", 225, Rarity.RARE, mage.cards.u.UlvenwaldBehemoth.class, NON_FULL_USE_VARIOUS));
|
|
||||||
cards.add(new SetCardInfo("Ulvenwald Behemoth", 394, Rarity.RARE, mage.cards.u.UlvenwaldBehemoth.class, NON_FULL_USE_VARIOUS));
|
|
||||||
cards.add(new SetCardInfo("Ulvenwald Oddity", 225, Rarity.RARE, mage.cards.u.UlvenwaldOddity.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Ulvenwald Oddity", 225, Rarity.RARE, mage.cards.u.UlvenwaldOddity.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Ulvenwald Oddity", 394, Rarity.RARE, mage.cards.u.UlvenwaldOddity.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Ulvenwald Oddity", 394, Rarity.RARE, mage.cards.u.UlvenwaldOddity.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Undead Butler", 133, Rarity.UNCOMMON, mage.cards.u.UndeadButler.class));
|
cards.add(new SetCardInfo("Undead Butler", 133, Rarity.UNCOMMON, mage.cards.u.UndeadButler.class));
|
||||||
|
|
|
||||||
|
|
@ -517,7 +517,6 @@ public final class InnistradDoubleFeature extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Triskaidekaphile", 81, Rarity.RARE, mage.cards.t.Triskaidekaphile.class));
|
cards.add(new SetCardInfo("Triskaidekaphile", 81, Rarity.RARE, mage.cards.t.Triskaidekaphile.class));
|
||||||
cards.add(new SetCardInfo("Turn the Earth", 205, Rarity.UNCOMMON, mage.cards.t.TurnTheEarth.class));
|
cards.add(new SetCardInfo("Turn the Earth", 205, Rarity.UNCOMMON, mage.cards.t.TurnTheEarth.class));
|
||||||
cards.add(new SetCardInfo("Twinblade Geist", 307, Rarity.UNCOMMON, mage.cards.t.TwinbladeGeist.class));
|
cards.add(new SetCardInfo("Twinblade Geist", 307, Rarity.UNCOMMON, mage.cards.t.TwinbladeGeist.class));
|
||||||
cards.add(new SetCardInfo("Ulvenwald Behemoth", 492, Rarity.RARE, mage.cards.u.UlvenwaldBehemoth.class));
|
|
||||||
cards.add(new SetCardInfo("Ulvenwald Oddity", 492, Rarity.RARE, mage.cards.u.UlvenwaldOddity.class));
|
cards.add(new SetCardInfo("Ulvenwald Oddity", 492, Rarity.RARE, mage.cards.u.UlvenwaldOddity.class));
|
||||||
cards.add(new SetCardInfo("Unblinking Observer", 82, Rarity.COMMON, mage.cards.u.UnblinkingObserver.class));
|
cards.add(new SetCardInfo("Unblinking Observer", 82, Rarity.COMMON, mage.cards.u.UnblinkingObserver.class));
|
||||||
cards.add(new SetCardInfo("Undead Butler", 400, Rarity.UNCOMMON, mage.cards.u.UndeadButler.class));
|
cards.add(new SetCardInfo("Undead Butler", 400, Rarity.UNCOMMON, mage.cards.u.UndeadButler.class));
|
||||||
|
|
|
||||||
|
|
@ -2890,7 +2890,6 @@ public class MagicOnlinePromos extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Uktabi Orangutan", 36016, Rarity.UNCOMMON, mage.cards.u.UktabiOrangutan.class, RETRO_ART));
|
cards.add(new SetCardInfo("Uktabi Orangutan", 36016, Rarity.UNCOMMON, mage.cards.u.UktabiOrangutan.class, RETRO_ART));
|
||||||
cards.add(new SetCardInfo("Ulamog, the Infinite Gyre", 102345, Rarity.MYTHIC, mage.cards.u.UlamogTheInfiniteGyre.class));
|
cards.add(new SetCardInfo("Ulamog, the Infinite Gyre", 102345, Rarity.MYTHIC, mage.cards.u.UlamogTheInfiniteGyre.class));
|
||||||
cards.add(new SetCardInfo("Ultimate Price", 58269, Rarity.UNCOMMON, mage.cards.u.UltimatePrice.class));
|
cards.add(new SetCardInfo("Ultimate Price", 58269, Rarity.UNCOMMON, mage.cards.u.UltimatePrice.class));
|
||||||
cards.add(new SetCardInfo("Ulvenwald Behemoth", 95421, Rarity.RARE, mage.cards.u.UlvenwaldBehemoth.class));
|
|
||||||
cards.add(new SetCardInfo("Ulvenwald Observer", 61553, Rarity.RARE, mage.cards.u.UlvenwaldObserver.class));
|
cards.add(new SetCardInfo("Ulvenwald Observer", 61553, Rarity.RARE, mage.cards.u.UlvenwaldObserver.class));
|
||||||
cards.add(new SetCardInfo("Ulvenwald Oddity", 95421, Rarity.RARE, mage.cards.u.UlvenwaldOddity.class));
|
cards.add(new SetCardInfo("Ulvenwald Oddity", 95421, Rarity.RARE, mage.cards.u.UlvenwaldOddity.class));
|
||||||
cards.add(new SetCardInfo("Umezawa's Jitte", 36210, Rarity.RARE, mage.cards.u.UmezawasJitte.class));
|
cards.add(new SetCardInfo("Umezawa's Jitte", 36210, Rarity.RARE, mage.cards.u.UmezawasJitte.class));
|
||||||
|
|
|
||||||
|
|
@ -382,9 +382,6 @@ public final class MarchOfTheMachine extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("The Grand Evolution", 213, Rarity.MYTHIC, mage.cards.t.TheGrandEvolution.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("The Grand Evolution", 213, Rarity.MYTHIC, mage.cards.t.TheGrandEvolution.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("The Grand Evolution", 301, Rarity.MYTHIC, mage.cards.t.TheGrandEvolution.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("The Grand Evolution", 301, Rarity.MYTHIC, mage.cards.t.TheGrandEvolution.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("The Grand Evolution", 342, Rarity.MYTHIC, mage.cards.t.TheGrandEvolution.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("The Grand Evolution", 342, Rarity.MYTHIC, mage.cards.t.TheGrandEvolution.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("The Great Work", 169, Rarity.MYTHIC, mage.cards.t.TheGreatWork.class, NON_FULL_USE_VARIOUS));
|
|
||||||
cards.add(new SetCardInfo("The Great Work", 299, Rarity.MYTHIC, mage.cards.t.TheGreatWork.class, NON_FULL_USE_VARIOUS));
|
|
||||||
cards.add(new SetCardInfo("The Great Work", 341, Rarity.MYTHIC, mage.cards.t.TheGreatWork.class, NON_FULL_USE_VARIOUS));
|
|
||||||
cards.add(new SetCardInfo("Thornwood Falls", 274, Rarity.COMMON, mage.cards.t.ThornwoodFalls.class));
|
cards.add(new SetCardInfo("Thornwood Falls", 274, Rarity.COMMON, mage.cards.t.ThornwoodFalls.class));
|
||||||
cards.add(new SetCardInfo("Thrashing Frontliner", 167, Rarity.COMMON, mage.cards.t.ThrashingFrontliner.class));
|
cards.add(new SetCardInfo("Thrashing Frontliner", 167, Rarity.COMMON, mage.cards.t.ThrashingFrontliner.class));
|
||||||
cards.add(new SetCardInfo("Thunderhead Squadron", 81, Rarity.COMMON, mage.cards.t.ThunderheadSquadron.class));
|
cards.add(new SetCardInfo("Thunderhead Squadron", 81, Rarity.COMMON, mage.cards.t.ThunderheadSquadron.class));
|
||||||
|
|
|
||||||
|
|
@ -307,8 +307,6 @@ public class ShadowsOverInnistradRemastered extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("True-Faith Censer", 262, Rarity.COMMON, mage.cards.t.TrueFaithCenser.class));
|
cards.add(new SetCardInfo("True-Faith Censer", 262, Rarity.COMMON, mage.cards.t.TrueFaithCenser.class));
|
||||||
cards.add(new SetCardInfo("Ulrich of the Krallenhorde", 246, Rarity.RARE, mage.cards.u.UlrichOfTheKrallenhorde.class));
|
cards.add(new SetCardInfo("Ulrich of the Krallenhorde", 246, Rarity.RARE, mage.cards.u.UlrichOfTheKrallenhorde.class));
|
||||||
cards.add(new SetCardInfo("Ulrich's Kindred", 182, Rarity.UNCOMMON, mage.cards.u.UlrichsKindred.class));
|
cards.add(new SetCardInfo("Ulrich's Kindred", 182, Rarity.UNCOMMON, mage.cards.u.UlrichsKindred.class));
|
||||||
cards.add(new SetCardInfo("Ulrich, Uncontested Alpha", 246, Rarity.RARE, mage.cards.u.UlrichUncontestedAlpha.class));
|
|
||||||
cards.add(new SetCardInfo("Ulvenwald Abomination", 221, Rarity.COMMON, mage.cards.u.UlvenwaldAbomination.class));
|
|
||||||
cards.add(new SetCardInfo("Ulvenwald Captive", 221, Rarity.COMMON, mage.cards.u.UlvenwaldCaptive.class));
|
cards.add(new SetCardInfo("Ulvenwald Captive", 221, Rarity.COMMON, mage.cards.u.UlvenwaldCaptive.class));
|
||||||
cards.add(new SetCardInfo("Ulvenwald Hydra", 222, Rarity.RARE, mage.cards.u.UlvenwaldHydra.class));
|
cards.add(new SetCardInfo("Ulvenwald Hydra", 222, Rarity.RARE, mage.cards.u.UlvenwaldHydra.class));
|
||||||
cards.add(new SetCardInfo("Ulvenwald Mysteries", 223, Rarity.UNCOMMON, mage.cards.u.UlvenwaldMysteries.class));
|
cards.add(new SetCardInfo("Ulvenwald Mysteries", 223, Rarity.UNCOMMON, mage.cards.u.UlvenwaldMysteries.class));
|
||||||
|
|
|
||||||
|
|
@ -341,8 +341,6 @@ public final class TheLostCavernsOfIxalan extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Saheeli's Lattice", 164, Rarity.UNCOMMON, mage.cards.s.SaheelisLattice.class));
|
cards.add(new SetCardInfo("Saheeli's Lattice", 164, Rarity.UNCOMMON, mage.cards.s.SaheelisLattice.class));
|
||||||
cards.add(new SetCardInfo("Saheeli, the Sun's Brilliance", 239, Rarity.MYTHIC, mage.cards.s.SaheeliTheSunsBrilliance.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Saheeli, the Sun's Brilliance", 239, Rarity.MYTHIC, mage.cards.s.SaheeliTheSunsBrilliance.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Saheeli, the Sun's Brilliance", 308, Rarity.MYTHIC, mage.cards.s.SaheeliTheSunsBrilliance.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Saheeli, the Sun's Brilliance", 308, Rarity.MYTHIC, mage.cards.s.SaheeliTheSunsBrilliance.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Sandswirl Wanderglyph", 358, Rarity.RARE, mage.cards.s.SandswirlWanderglyph.class, NON_FULL_USE_VARIOUS));
|
|
||||||
cards.add(new SetCardInfo("Sandswirl Wanderglyph", 41, Rarity.RARE, mage.cards.s.SandswirlWanderglyph.class, NON_FULL_USE_VARIOUS));
|
|
||||||
cards.add(new SetCardInfo("Sanguine Evangelist", 34, Rarity.RARE, mage.cards.s.SanguineEvangelist.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Sanguine Evangelist", 34, Rarity.RARE, mage.cards.s.SanguineEvangelist.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Sanguine Evangelist", 356, Rarity.RARE, mage.cards.s.SanguineEvangelist.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Sanguine Evangelist", 356, Rarity.RARE, mage.cards.s.SanguineEvangelist.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Scampering Surveyor", 260, Rarity.UNCOMMON, mage.cards.s.ScamperingSurveyor.class));
|
cards.add(new SetCardInfo("Scampering Surveyor", 260, Rarity.UNCOMMON, mage.cards.s.ScamperingSurveyor.class));
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,6 @@ public final class Transformers extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Ratchet, Field Medic", 2, Rarity.MYTHIC, mage.cards.r.RatchetFieldMedic.class));
|
cards.add(new SetCardInfo("Ratchet, Field Medic", 2, Rarity.MYTHIC, mage.cards.r.RatchetFieldMedic.class));
|
||||||
cards.add(new SetCardInfo("Slicer, Hired Muscle", 6, Rarity.MYTHIC, mage.cards.s.SlicerHiredMuscle.class));
|
cards.add(new SetCardInfo("Slicer, Hired Muscle", 6, Rarity.MYTHIC, mage.cards.s.SlicerHiredMuscle.class));
|
||||||
cards.add(new SetCardInfo("Starscream, Power Hungry", 5, Rarity.MYTHIC, mage.cards.s.StarscreamPowerHungry.class));
|
cards.add(new SetCardInfo("Starscream, Power Hungry", 5, Rarity.MYTHIC, mage.cards.s.StarscreamPowerHungry.class));
|
||||||
cards.add(new SetCardInfo("Ultra Magnus, Armored Carrier", 15, Rarity.MYTHIC, mage.cards.u.UltraMagnusArmoredCarrier.class));
|
|
||||||
cards.add(new SetCardInfo("Ultra Magnus, Tactician", 15, Rarity.MYTHIC, mage.cards.u.UltraMagnusTactician.class));
|
cards.add(new SetCardInfo("Ultra Magnus, Tactician", 15, Rarity.MYTHIC, mage.cards.u.UltraMagnusTactician.class));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue