diff --git a/Mage.Sets/src/mage/cards/b/BahamutWardenOfLight.java b/Mage.Sets/src/mage/cards/b/BahamutWardenOfLight.java deleted file mode 100644 index ccd8cd3eb2a..00000000000 --- a/Mage.Sets/src/mage/cards/b/BahamutWardenOfLight.java +++ /dev/null @@ -1,71 +0,0 @@ -package mage.cards.b; - -import mage.MageInt; -import mage.abilities.common.SagaAbility; -import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.effects.common.ExileSourceAndReturnFaceUpEffect; -import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; -import mage.abilities.effects.common.counter.AddCountersAllEffect; -import mage.abilities.keyword.FlyingAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.counters.CounterType; -import mage.filter.StaticFilters; -import mage.target.TargetPermanent; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class BahamutWardenOfLight extends CardImpl { - - public BahamutWardenOfLight(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, ""); - - this.supertype.add(SuperType.LEGENDARY); - this.subtype.add(SubType.SAGA); - this.subtype.add(SubType.DRAGON); - this.power = new MageInt(5); - this.toughness = new MageInt(5); - this.nightCard = true; - this.color.setWhite(true); - - // (As this Saga enters and after your draw step, add a lore counter.) - SagaAbility sagaAbility = new SagaAbility(this); - - // I, II -- Wings of Light -- Put a +1/+1 counter on each other creature you control. Those creatures gain flying until end of turn. - sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_II, ability -> { - ability.addEffect(new AddCountersAllEffect( - CounterType.P1P1.createInstance(), StaticFilters.FILTER_OTHER_CONTROLLED_CREATURE - )); - ability.addEffect(new GainAbilityControlledEffect( - FlyingAbility.getInstance(), Duration.EndOfTurn, - StaticFilters.FILTER_CONTROLLED_CREATURE - ).setText("Those creatures gain flying until end of turn")); - ability.withFlavorWord("Wings of Light"); - }); - - // III -- Gigaflare -- Destroy target permanent. Exile Bahamut, then return it to the battlefield. - sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, ability -> { - ability.addEffect(new DestroyTargetEffect()); - ability.addEffect(new ExileSourceAndReturnFaceUpEffect()); - ability.addTarget(new TargetPermanent()); - ability.withFlavorWord("Gigaflare"); - }); - this.addAbility(sagaAbility); - - // Flying - this.addAbility(FlyingAbility.getInstance()); - } - - private BahamutWardenOfLight(final BahamutWardenOfLight card) { - super(card); - } - - @Override - public BahamutWardenOfLight copy() { - return new BahamutWardenOfLight(this); - } -} diff --git a/Mage.Sets/src/mage/cards/b/BearerOfOverwhelmingTruths.java b/Mage.Sets/src/mage/cards/b/BearerOfOverwhelmingTruths.java deleted file mode 100644 index 655b7b2834a..00000000000 --- a/Mage.Sets/src/mage/cards/b/BearerOfOverwhelmingTruths.java +++ /dev/null @@ -1,45 +0,0 @@ - -package mage.cards.b; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; -import mage.abilities.effects.keyword.InvestigateEffect; -import mage.abilities.keyword.ProwessAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; - -/** - * - * @author fireshoes - */ -public final class BearerOfOverwhelmingTruths extends CardImpl { - - public BearerOfOverwhelmingTruths(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},""); - this.subtype.add(SubType.HUMAN, SubType.WIZARD); - this.power = new MageInt(3); - this.toughness = new MageInt(2); - this.color.setBlue(true); - - // this card is the second face of double-faced card - this.nightCard = true; - - // Prowess - this.addAbility(new ProwessAbility()); - - // Whenever Bearer of Overwhelming Truths deals combat damage to a player, investigate. - this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new InvestigateEffect(), false)); - } - - private BearerOfOverwhelmingTruths(final BearerOfOverwhelmingTruths card) { - super(card); - } - - @Override - public BearerOfOverwhelmingTruths copy() { - return new BearerOfOverwhelmingTruths(this); - } -} diff --git a/Mage.Sets/src/mage/cards/c/CleverDistraction.java b/Mage.Sets/src/mage/cards/c/CleverDistraction.java deleted file mode 100644 index 751b419f195..00000000000 --- a/Mage.Sets/src/mage/cards/c/CleverDistraction.java +++ /dev/null @@ -1,68 +0,0 @@ -package mage.cards.c; - -import mage.abilities.Ability; -import mage.abilities.common.AttacksTriggeredAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.TapTargetEffect; -import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; -import mage.abilities.keyword.DisturbAbility; -import mage.abilities.keyword.EnchantAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.AttachmentType; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.SubType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.permanent.DefendingPlayerControlsSourceAttackingPredicate; -import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class CleverDistraction extends CardImpl { - - private static final FilterPermanent filter - = new FilterCreaturePermanent("creature defending player controls"); - - static { - filter.add(DefendingPlayerControlsSourceAttackingPredicate.instance); - } - - public CleverDistraction(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, ""); - - this.subtype.add(SubType.AURA); - this.color.setWhite(true); - this.nightCard = true; - - // Enchant creature - TargetPermanent auraTarget = new TargetCreaturePermanent(); - this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - this.addAbility(new EnchantAbility(auraTarget)); - - // Enchanted creature has "Whenever this creature attacks, tap target creature defending player controls." - Ability ability = new AttacksTriggeredAbility(new TapTargetEffect()) - .setTriggerPhrase("Whenever this creature attacks, "); - ability.addTarget(new TargetPermanent(filter)); - this.addAbility(new SimpleStaticAbility(new GainAbilityAttachedEffect(ability, AttachmentType.AURA))); - - // If Clever Distracting would be put into a graveyard from anywhere, exile it instead. - this.addAbility(DisturbAbility.makeBackAbility()); - } - - private CleverDistraction(final CleverDistraction card) { - super(card); - } - - @Override - public CleverDistraction copy() { - return new CleverDistraction(this); - } -} diff --git a/Mage.Sets/src/mage/cards/d/DaringSleuth.java b/Mage.Sets/src/mage/cards/d/DaringSleuth.java index b6a2e57ab33..765a27080f0 100644 --- a/Mage.Sets/src/mage/cards/d/DaringSleuth.java +++ b/Mage.Sets/src/mage/cards/d/DaringSleuth.java @@ -1,11 +1,12 @@ package mage.cards.d; -import mage.MageInt; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; import mage.abilities.common.SacrificePermanentTriggeredAbility; import mage.abilities.effects.common.TransformSourceEffect; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.effects.keyword.InvestigateEffect; +import mage.abilities.keyword.ProwessAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; import mage.filter.StaticFilters; @@ -15,21 +16,30 @@ import java.util.UUID; /** * @author fireshoes */ -public final class DaringSleuth extends CardImpl { +public final class DaringSleuth extends TransformingDoubleFacedCard { public DaringSleuth(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.ROGUE); - this.power = new MageInt(2); - this.toughness = new MageInt(1); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.ROGUE}, "{1}{U}", + "Bearer of Overwhelming Truths", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WIZARD}, "U"); - this.secondSideCardClazz = mage.cards.b.BearerOfOverwhelmingTruths.class; + // Daring Sleuth + this.getLeftHalfCard().setPT(2, 1); // When you sacrifice a Clue, transform Daring Sleuth. - this.addAbility(new TransformAbility()); - this.addAbility(new SacrificePermanentTriggeredAbility(new TransformSourceEffect(), StaticFilters.FILTER_CONTROLLED_CLUE) - .setTriggerPhrase("When you sacrifice a Clue, ")); + this.getLeftHalfCard().addAbility(new SacrificePermanentTriggeredAbility( + new TransformSourceEffect(), StaticFilters.FILTER_CONTROLLED_CLUE + ).setTriggerPhrase("When you sacrifice a Clue, ")); + + // Bearer of Overwhelming Truths + this.getRightHalfCard().setPT(3, 2); + + // Prowess + this.getRightHalfCard().addAbility(new ProwessAbility()); + + // Whenever Bearer of Overwhelming Truths deals combat damage to a player, investigate. + this.getRightHalfCard().addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new InvestigateEffect(), false)); } private DaringSleuth(final DaringSleuth card) { diff --git a/Mage.Sets/src/mage/cards/d/DaybreakRanger.java b/Mage.Sets/src/mage/cards/d/DaybreakRanger.java index 7aa01edb49f..103813fc60f 100644 --- a/Mage.Sets/src/mage/cards/d/DaybreakRanger.java +++ b/Mage.Sets/src/mage/cards/d/DaybreakRanger.java @@ -1,46 +1,59 @@ package mage.cards.d; -import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.WerewolfBackTriggeredAbility; import mage.abilities.common.WerewolfFrontTriggeredAbility; import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.effects.common.FightTargetSourceEffect; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; import mage.filter.StaticFilters; import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; import java.util.UUID; /** * @author North */ -public final class DaybreakRanger extends CardImpl { +public final class DaybreakRanger extends TransformingDoubleFacedCard { public DaybreakRanger(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.ARCHER); - this.subtype.add(SubType.RANGER); - this.subtype.add(SubType.WEREWOLF); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.ARCHER, SubType.RANGER, SubType.WEREWOLF}, "{2}{G}", + "Nightfall Predator", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "G"); - this.secondSideCardClazz = mage.cards.n.NightfallPredator.class; + // Daybreak Ranger + this.getLeftHalfCard().setPT(2, 2); - this.power = new MageInt(2); - this.toughness = new MageInt(2); - - // {tap}: Daybreak Ranger deals 2 damage to target creature with flying. - Ability activatedAbility = new SimpleActivatedAbility(new DamageTargetEffect(2), new TapSourceCost()); - activatedAbility.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); - this.addAbility(activatedAbility); + // {T}: Daybreak Ranger deals 2 damage to target creature with flying. + Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(2), new TapSourceCost()); + ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_FLYING)); + this.getLeftHalfCard().addAbility(ability); // At the beginning of each upkeep, if no spells were cast last turn, transform Daybreak Ranger. - this.addAbility(new TransformAbility()); - this.addAbility(new WerewolfFrontTriggeredAbility()); + this.getLeftHalfCard().addAbility(new WerewolfFrontTriggeredAbility()); + + // Nightfall Predator + this.getRightHalfCard().setPT(4, 4); + + // {R}, {T}: Nightfall Predator fights target creature. + Ability ability2 = new SimpleActivatedAbility( + new FightTargetSourceEffect().setText("{this} fights target creature. (Each deals damage equal to its power to the other.)"), + new ManaCostsImpl<>("{R}") + ); + ability2.addCost(new TapSourceCost()); + ability2.addTarget(new TargetCreaturePermanent()); + this.getRightHalfCard().addAbility(ability2); + + // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Nightfall Predator. + this.getRightHalfCard().addAbility(new WerewolfBackTriggeredAbility()); } private DaybreakRanger(final DaybreakRanger card) { diff --git a/Mage.Sets/src/mage/cards/d/DeathbonnetHulk.java b/Mage.Sets/src/mage/cards/d/DeathbonnetHulk.java deleted file mode 100644 index a796956ec84..00000000000 --- a/Mage.Sets/src/mage/cards/d/DeathbonnetHulk.java +++ /dev/null @@ -1,93 +0,0 @@ -package mage.cards.d; - -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; -import mage.cards.Card; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.SubType; -import mage.constants.Zone; -import mage.counters.CounterType; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.TargetCard; -import mage.target.common.TargetCardInGraveyard; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class DeathbonnetHulk extends CardImpl { - - public DeathbonnetHulk(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.FUNGUS); - this.subtype.add(SubType.HORROR); - this.power = new MageInt(3); - this.toughness = new MageInt(3); - this.color.setGreen(true); - this.nightCard = true; - - // At the beginning of your upkeep, you may exile a card from a graveyard. If a creature card was exiled this way, put a +1/+1 counter on Deathbonnet Hulk. - this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DeathbonnetHulkEffect())); - } - - private DeathbonnetHulk(final DeathbonnetHulk card) { - super(card); - } - - @Override - public DeathbonnetHulk copy() { - return new DeathbonnetHulk(this); - } -} - -class DeathbonnetHulkEffect extends OneShotEffect { - - DeathbonnetHulkEffect() { - super(Outcome.Benefit); - staticText = "you may exile a card from a graveyard. " + - "If a creature card was exiled this way, put a +1/+1 counter on {this}"; - } - - private DeathbonnetHulkEffect(final DeathbonnetHulkEffect effect) { - super(effect); - } - - @Override - public DeathbonnetHulkEffect copy() { - return new DeathbonnetHulkEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getControllerId()); - if (player == null) { - return false; - } - TargetCard target = new TargetCardInGraveyard(0, 1); - target.withNotTarget(true); - player.choose(outcome, target, source, game); - Card card = game.getCard(target.getFirstTarget()); - if (card == null) { - return false; - } - boolean flag = card.isCreature(game); - player.moveCards(card, Zone.EXILED, source, game); - if (!flag) { - return true; - } - Permanent permanent = source.getSourcePermanentIfItStillExists(game); - if (permanent != null) { - permanent.addCounters(CounterType.P1P1.createInstance(), source.getControllerId(), source, game); - } - return true; - } -} diff --git a/Mage.Sets/src/mage/cards/d/DeathbonnetSprout.java b/Mage.Sets/src/mage/cards/d/DeathbonnetSprout.java index a5ed010d194..77ae57a0c44 100644 --- a/Mage.Sets/src/mage/cards/d/DeathbonnetSprout.java +++ b/Mage.Sets/src/mage/cards/d/DeathbonnetSprout.java @@ -1,55 +1,66 @@ package mage.cards.d; -import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.CardsInControllerGraveyardCondition; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; +import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.MillCardsControllerEffect; import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.hint.Hint; import mage.abilities.hint.ValueHint; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; +import mage.cards.Card; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; +import mage.constants.Outcome; import mage.constants.SubType; +import mage.constants.Zone; +import mage.counters.CounterType; import mage.filter.StaticFilters; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.TargetCard; +import mage.target.common.TargetCardInGraveyard; import java.util.UUID; /** * @author TheElk801 */ -public final class DeathbonnetSprout extends CardImpl { +public final class DeathbonnetSprout extends TransformingDoubleFacedCard { - private static final Condition condition - = new CardsInControllerGraveyardCondition(3, StaticFilters.FILTER_CARD_CREATURE); + private static final Condition condition = new CardsInControllerGraveyardCondition(3, StaticFilters.FILTER_CARD_CREATURE); private static final Hint hint = new ValueHint( "Creature cards in your graveyard", new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURE) ); public DeathbonnetSprout(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.FUNGUS}, "{G}", + "Deathbonnet Hulk", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.FUNGUS, SubType.HORROR}, "G"); - this.subtype.add(SubType.FUNGUS); - this.power = new MageInt(1); - this.toughness = new MageInt(1); - this.secondSideCardClazz = mage.cards.d.DeathbonnetHulk.class; + // Deathbonnet Sprout + this.getLeftHalfCard().setPT(1, 1); // At the beginning of your upkeep, mill a card. Then if there are three or more creature cards in your graveyard, transform Deathbonnet Sprout. - this.addAbility(new TransformAbility()); - Ability ability = new BeginningOfUpkeepTriggeredAbility( - new MillCardsControllerEffect(1) - ); - ability.addEffect(new ConditionalOneShotEffect( - new TransformSourceEffect(), condition, - "Then if there are three or more creature cards in your graveyard, transform {this}" - )); - this.addAbility(ability.addHint(hint)); + Ability ability = new BeginningOfUpkeepTriggeredAbility(new MillCardsControllerEffect(1)); + ability.addEffect(new ConditionalOneShotEffect(new TransformSourceEffect(), condition, + "Then if there are three or more creature cards in your graveyard, transform {this}")); + this.getLeftHalfCard().addAbility(ability.addHint(hint)); + + + // Deathbonnet Hulk + this.getRightHalfCard().setPT(3, 3); + + + // At the beginning of your upkeep, you may exile a card from a graveyard. If a creature card was exiled this way, put a +1/+1 counter on Deathbonnet Hulk. + this.getRightHalfCard().addAbility(new BeginningOfUpkeepTriggeredAbility(new DeathbonnetHulkEffect())); } private DeathbonnetSprout(final DeathbonnetSprout card) { @@ -61,3 +72,44 @@ public final class DeathbonnetSprout extends CardImpl { return new DeathbonnetSprout(this); } } + +class DeathbonnetHulkEffect extends OneShotEffect { + DeathbonnetHulkEffect() { + super(Outcome.Benefit); + staticText = "you may exile a card from a graveyard. If a creature card was exiled this way, put a +1/+1 counter on {this}"; + } + + private DeathbonnetHulkEffect(final DeathbonnetHulkEffect effect) { + super(effect); + } + + @Override + public DeathbonnetHulkEffect copy() { + return new DeathbonnetHulkEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player == null) { + return false; + } + TargetCard target = new TargetCardInGraveyard(0, 1); + target.withNotTarget(true); + player.choose(outcome, target, source, game); + Card card = game.getCard(target.getFirstTarget()); + if (card == null) { + return false; + } + boolean creature = card.isCreature(game); + player.moveCards(card, Zone.EXILED, source, game); + if (!creature) { + return true; + } + Permanent permanent = source.getSourcePermanentIfItStillExists(game); + if (permanent != null) { + permanent.addCounters(CounterType.P1P1.createInstance(), source.getControllerId(), source, game); + } + return true; + } +} diff --git a/Mage.Sets/src/mage/cards/d/DelverOfSecrets.java b/Mage.Sets/src/mage/cards/d/DelverOfSecrets.java index 0b89a031e26..1006315827d 100644 --- a/Mage.Sets/src/mage/cards/d/DelverOfSecrets.java +++ b/Mage.Sets/src/mage/cards/d/DelverOfSecrets.java @@ -1,9 +1,8 @@ package mage.cards.d; -import mage.MageInt; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; -import mage.abilities.keyword.TransformAbility; +import mage.abilities.keyword.FlyingAbility; import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; import mage.cards.*; import mage.constants.CardType; @@ -19,21 +18,25 @@ import java.util.UUID; /** * @author Alvin */ -public final class DelverOfSecrets extends CardImpl { +public final class DelverOfSecrets extends TransformingDoubleFacedCard { public DelverOfSecrets(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.WIZARD); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WIZARD}, "{U}", + "Insectile Aberration", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.INSECT}, "U"); - this.power = new MageInt(1); - this.toughness = new MageInt(1); - - this.secondSideCardClazz = mage.cards.i.InsectileAberration.class; + // Delver of Secrets + this.getLeftHalfCard().setPT(1, 1); // At the beginning of your upkeep, look at the top card of your library. You may reveal that card. If an instant or sorcery card is revealed this way, transform Delver of Secrets. - this.addAbility(new TransformAbility()); - this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DelverOfSecretsEffect())); + this.getLeftHalfCard().addAbility(new BeginningOfUpkeepTriggeredAbility(new DelverOfSecretsEffect())); + + // Insectile Aberration + this.getRightHalfCard().setPT(3, 2); + + // Flying + this.getRightHalfCard().addAbility(FlyingAbility.getInstance()); } private DelverOfSecrets(final DelverOfSecrets card) { @@ -47,10 +50,9 @@ public final class DelverOfSecrets extends CardImpl { } class DelverOfSecretsEffect extends OneShotEffect { - - public DelverOfSecretsEffect() { + DelverOfSecretsEffect() { super(Outcome.Benefit); - this.staticText = "look at the top card of your library. You may reveal that card. " + + staticText = "look at the top card of your library. You may reveal that card. " + "If an instant or sorcery card is revealed this way, transform {this}"; } diff --git a/Mage.Sets/src/mage/cards/d/DennickPiousApprentice.java b/Mage.Sets/src/mage/cards/d/DennickPiousApprentice.java index 55885247a4a..9d6652c5e49 100644 --- a/Mage.Sets/src/mage/cards/d/DennickPiousApprentice.java +++ b/Mage.Sets/src/mage/cards/d/DennickPiousApprentice.java @@ -1,44 +1,58 @@ package mage.cards.d; -import mage.MageInt; +import mage.abilities.common.PutCardIntoGraveFromAnywhereAllTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.CantBeTargetedCardsGraveyardsEffect; +import mage.abilities.effects.keyword.InvestigateEffect; import mage.abilities.keyword.DisturbAbility; +import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.LifelinkAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.SuperType; -import mage.constants.Zone; +import mage.constants.TargetController; +import mage.filter.StaticFilters; import java.util.UUID; /** * @author LePwnerer */ -public final class DennickPiousApprentice extends CardImpl { +public final class DennickPiousApprentice extends TransformingDoubleFacedCard { public DennickPiousApprentice(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}{U}"); + super(ownerId, setInfo, + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.SOLDIER}, "{W}{U}", + "Dennick, Pious Apparition", + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.SPIRIT, SubType.SOLDIER}, "WU"); - this.supertype.add(SuperType.LEGENDARY); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.SOLDIER); - this.power = new MageInt(2); - this.toughness = new MageInt(3); - this.secondSideCardClazz = mage.cards.d.DennickPiousApparition.class; + // Dennick, Pious Apprentice + this.getLeftHalfCard().setPT(2, 3); // Lifelink - this.addAbility(LifelinkAbility.getInstance()); + this.getLeftHalfCard().addAbility(LifelinkAbility.getInstance()); // Cards in graveyards can't be the targets of spells or abilities. - this.addAbility(new SimpleStaticAbility(new CantBeTargetedCardsGraveyardsEffect())); + this.getLeftHalfCard().addAbility(new SimpleStaticAbility(new CantBeTargetedCardsGraveyardsEffect())); // Disturb {2}{W}{U} - this.addAbility(new DisturbAbility(this, "{2}{W}{U}")); + this.getLeftHalfCard().addAbility(new DisturbAbility(this, "{2}{W}{U}")); + // Dennick, Pious Apparition + this.getRightHalfCard().setPT(3, 2); + + // Flying + this.getRightHalfCard().addAbility(FlyingAbility.getInstance()); + + // Whenever one or more creature cards are put into graveyards from anywhere, investigate. This ability triggers only once each turn. + this.getRightHalfCard().addAbility(new PutCardIntoGraveFromAnywhereAllTriggeredAbility( + new InvestigateEffect(1), false, StaticFilters.FILTER_CARD_CREATURE, TargetController.ANY + ).setTriggersLimitEachTurn(1).setTriggerPhrase("Whenever one or more creature cards are put into graveyards from anywhere, ")); + + // If Dennick, Pious Apparition would be put into a graveyard from anywhere, exile it instead. + this.getRightHalfCard().addAbility(DisturbAbility.makeBackAbility()); } private DennickPiousApprentice(final DennickPiousApprentice card) { diff --git a/Mage.Sets/src/mage/cards/d/DepartedSoulkeeper.java b/Mage.Sets/src/mage/cards/d/DepartedSoulkeeper.java deleted file mode 100644 index 2503f1601ba..00000000000 --- a/Mage.Sets/src/mage/cards/d/DepartedSoulkeeper.java +++ /dev/null @@ -1,47 +0,0 @@ -package mage.cards.d; - -import mage.MageInt; -import mage.abilities.common.CanBlockOnlyFlyingAbility; -import mage.abilities.keyword.DisturbAbility; -import mage.abilities.keyword.FlyingAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class DepartedSoulkeeper extends CardImpl { - - public DepartedSoulkeeper(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.SPIRIT); - this.power = new MageInt(3); - this.toughness = new MageInt(1); - this.color.setWhite(true); - this.color.setBlue(true); - this.nightCard = true; - - // Flying - this.addAbility(FlyingAbility.getInstance()); - - // Departed Soulkeeper can block only creatures with flying. - this.addAbility(new CanBlockOnlyFlyingAbility()); - - // If Departed Soulkeeper would be put into a graveyard from anywhere, exile it instead. - this.addAbility(DisturbAbility.makeBackAbility()); - } - - private DepartedSoulkeeper(final DepartedSoulkeeper card) { - super(card); - } - - @Override - public DepartedSoulkeeper copy() { - return new DepartedSoulkeeper(this); - } -} diff --git a/Mage.Sets/src/mage/cards/d/DepravedHarvester.java b/Mage.Sets/src/mage/cards/d/DepravedHarvester.java deleted file mode 100644 index 8a385930f39..00000000000 --- a/Mage.Sets/src/mage/cards/d/DepravedHarvester.java +++ /dev/null @@ -1,39 +0,0 @@ -package mage.cards.d; - -import mage.MageInt; -import mage.abilities.keyword.LifelinkAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class DepravedHarvester extends CardImpl { - - public DepravedHarvester(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.KNIGHT); - this.power = new MageInt(4); - this.toughness = new MageInt(3); - this.color.setBlack(true); - this.nightCard = true; - - // Lifelink - this.addAbility(LifelinkAbility.getInstance()); - } - - private DepravedHarvester(final DepravedHarvester card) { - super(card); - } - - @Override - public DepravedHarvester copy() { - return new DepravedHarvester(this); - } -} diff --git a/Mage.Sets/src/mage/cards/d/DesperateFarmer.java b/Mage.Sets/src/mage/cards/d/DesperateFarmer.java index a0aae4476de..0a111e8b0b9 100644 --- a/Mage.Sets/src/mage/cards/d/DesperateFarmer.java +++ b/Mage.Sets/src/mage/cards/d/DesperateFarmer.java @@ -1,12 +1,10 @@ package mage.cards.d; -import mage.MageInt; import mage.abilities.common.DiesCreatureTriggeredAbility; import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.keyword.LifelinkAbility; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; import mage.filter.StaticFilters; @@ -16,26 +14,30 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class DesperateFarmer extends CardImpl { +public final class DesperateFarmer extends TransformingDoubleFacedCard { public DesperateFarmer(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.PEASANT}, "{2}{B}", + "Depraved Harvester", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.KNIGHT}, "B"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.PEASANT); - this.power = new MageInt(2); - this.toughness = new MageInt(2); - this.secondSideCardClazz = mage.cards.d.DepravedHarvester.class; + // Desperate Farmer + this.getLeftHalfCard().setPT(2, 2); // Lifelink - this.addAbility(LifelinkAbility.getInstance()); + this.getLeftHalfCard().addAbility(LifelinkAbility.getInstance()); // When another creature you control dies, transform Desperate Farmer. - this.addAbility(new TransformAbility()); - this.addAbility(new DiesCreatureTriggeredAbility( - new TransformSourceEffect(), false, - StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE + this.getLeftHalfCard().addAbility(new DiesCreatureTriggeredAbility( + new TransformSourceEffect(), false, StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE ).setTriggerPhrase("When another creature you control dies, ")); + + // Depraved Harvester + this.getRightHalfCard().setPT(4, 3); + + // Lifelink + this.getRightHalfCard().addAbility(LifelinkAbility.getInstance()); } private DesperateFarmer(final DesperateFarmer card) { diff --git a/Mage.Sets/src/mage/cards/d/DevotedGrafkeeper.java b/Mage.Sets/src/mage/cards/d/DevotedGrafkeeper.java index e16068a08a7..76e8fdac5f8 100644 --- a/Mage.Sets/src/mage/cards/d/DevotedGrafkeeper.java +++ b/Mage.Sets/src/mage/cards/d/DevotedGrafkeeper.java @@ -1,14 +1,15 @@ package mage.cards.d; -import mage.MageInt; import mage.abilities.Ability; +import mage.abilities.common.CanBlockOnlyFlyingAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.effects.common.MillCardsControllerEffect; import mage.abilities.effects.common.TapTargetEffect; import mage.abilities.keyword.DisturbAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.FlyingAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SetTargetPointer; import mage.constants.SubType; @@ -21,19 +22,19 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class DevotedGrafkeeper extends CardImpl { +public final class DevotedGrafkeeper extends TransformingDoubleFacedCard { public DevotedGrafkeeper(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}{U}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.PEASANT}, "{W}{U}", + "Departed Soulkeeper", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.SPIRIT}, "WU"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.PEASANT); - this.power = new MageInt(2); - this.toughness = new MageInt(1); - this.secondSideCardClazz = mage.cards.d.DepartedSoulkeeper.class; + // Devoted Grafkeeper + this.getLeftHalfCard().setPT(2, 1); // When Devoted Grafkeeper enters the battlefield, mill two cards. - this.addAbility(new EntersBattlefieldTriggeredAbility(new MillCardsControllerEffect(2))); + this.getLeftHalfCard().addAbility(new EntersBattlefieldTriggeredAbility(new MillCardsControllerEffect(2))); // Whenever you cast a spell from your graveyard, tap target creature you don't control. Ability ability = new SpellCastControllerTriggeredAbility( @@ -41,10 +42,22 @@ public final class DevotedGrafkeeper extends CardImpl { false, SetTargetPointer.NONE, Zone.GRAVEYARD ); ability.addTarget(new TargetPermanent(StaticFilters.FILTER_CREATURE_YOU_DONT_CONTROL)); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); // Disturb {1}{W}{U} - this.addAbility(new DisturbAbility(this, "{1}{W}{U}")); + this.getLeftHalfCard().addAbility(new DisturbAbility(this, "{1}{W}{U}")); + + // Departed Soulkeeper + this.getRightHalfCard().setPT(3, 1); + + // Flying + this.getRightHalfCard().addAbility(FlyingAbility.getInstance()); + + // Departed Soulkeeper can block only creatures with flying. + this.getRightHalfCard().addAbility(new CanBlockOnlyFlyingAbility()); + + // If Departed Soulkeeper would be put into a graveyard from anywhere, exile it instead. + this.getRightHalfCard().addAbility(DisturbAbility.makeBackAbility()); } private DevotedGrafkeeper(final DevotedGrafkeeper card) { diff --git a/Mage.Sets/src/mage/cards/d/DionBahamutsDominant.java b/Mage.Sets/src/mage/cards/d/DionBahamutsDominant.java index 1916be7d1ce..a3e0809935c 100644 --- a/Mage.Sets/src/mage/cards/d/DionBahamutsDominant.java +++ b/Mage.Sets/src/mage/cards/d/DionBahamutsDominant.java @@ -1,6 +1,5 @@ package mage.cards.d; -import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.ActivateAsSorceryActivatedAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -14,10 +13,10 @@ import mage.abilities.effects.common.ExileAndReturnSourceEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.keyword.FlyingAbility; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.*; +import mage.counters.CounterType; import mage.filter.FilterPermanent; import mage.game.permanent.token.WaylayToken; @@ -26,20 +25,18 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class DionBahamutsDominant extends CardImpl { +public final class DionBahamutsDominant extends TransformingDoubleFacedCard { private static final FilterPermanent filter = new FilterPermanent(SubType.KNIGHT, ""); public DionBahamutsDominant(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{W}"); + super(ownerId, setInfo, + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.NOBLE, SubType.KNIGHT}, "{3}{W}", + "Bahamut, Warden of Light", + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, new SubType[]{SubType.SAGA, SubType.DRAGON}, "W"); - this.supertype.add(SuperType.LEGENDARY); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.NOBLE); - this.subtype.add(SubType.KNIGHT); - this.power = new MageInt(3); - this.toughness = new MageInt(3); - this.secondSideCardClazz = mage.cards.b.BahamutWardenOfLight.class; + // Dion, Bahamut's Dominant + this.getLeftHalfCard().setPT(3, 3); // Dragonfire Dive -- During your turn, Dion and other Knights you control have flying. Ability ability = new SimpleStaticAbility(new ConditionalContinuousEffect( @@ -50,18 +47,47 @@ public final class DionBahamutsDominant extends CardImpl { new GainAbilityControlledEffect(FlyingAbility.getInstance(), Duration.WhileOnBattlefield, filter), MyTurnCondition.instance, "and other Knights you control have flying" )); - this.addAbility(ability.withFlavorWord("Dragonfire Dive")); + this.getLeftHalfCard().addAbility(ability.withFlavorWord("Dragonfire Dive")); // When Dion enters, create a 2/2 white Knight creature token. - this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new WaylayToken()))); + this.getLeftHalfCard().addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new WaylayToken()))); // {4}{W}{W}, {T}: Exile Dion, then return it to the battlefield transformed under its owner's control. Activate only as a sorcery. - this.addAbility(new TransformAbility()); - ability = new ActivateAsSorceryActivatedAbility( + Ability ability2 = new ActivateAsSorceryActivatedAbility( new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD_TRANSFORMED), new ManaCostsImpl<>("{4}{W}{W}") ); - ability.addCost(new TapSourceCost()); - this.addAbility(ability); + ability2.addCost(new TapSourceCost()); + this.getLeftHalfCard().addAbility(ability2); + + // Bahamut, Warden of Light + this.getRightHalfCard().setPT(5, 5); + + // (As this Saga enters and after your draw step, add a lore counter.) + mage.abilities.common.SagaAbility sagaAbility = new mage.abilities.common.SagaAbility(this.getRightHalfCard()); + + // I, II -- Wings of Light -- Put a +1/+1 counter on each other creature you control. Those creatures gain flying until end of turn. + sagaAbility.addChapterEffect(this.getRightHalfCard(), SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_II, ability3 -> { + ability3.addEffect(new mage.abilities.effects.common.counter.AddCountersAllEffect( + CounterType.P1P1.createInstance(), mage.filter.StaticFilters.FILTER_OTHER_CONTROLLED_CREATURE + )); + ability3.addEffect(new mage.abilities.effects.common.continuous.GainAbilityControlledEffect( + FlyingAbility.getInstance(), Duration.EndOfTurn, + mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE + ).setText("Those creatures gain flying until end of turn")); + ability3.withFlavorWord("Wings of Light"); + }); + + // III -- Gigaflare -- Destroy target permanent. Exile Bahamut, then return it to the battlefield. + sagaAbility.addChapterEffect(this.getRightHalfCard(), SagaChapter.CHAPTER_III, ability4 -> { + ability4.addEffect(new mage.abilities.effects.common.DestroyTargetEffect()); + ability4.addEffect(new mage.abilities.effects.common.ExileSourceAndReturnFaceUpEffect()); + ability4.addTarget(new mage.target.TargetPermanent()); + ability4.withFlavorWord("Gigaflare"); + }); + this.getRightHalfCard().addAbility(sagaAbility); + + // Flying + this.getRightHalfCard().addAbility(FlyingAbility.getInstance()); } private DionBahamutsDominant(final DionBahamutsDominant card) { diff --git a/Mage.Sets/src/mage/cards/d/DireBlunderbuss.java b/Mage.Sets/src/mage/cards/d/DireBlunderbuss.java deleted file mode 100644 index 3088dada74a..00000000000 --- a/Mage.Sets/src/mage/cards/d/DireBlunderbuss.java +++ /dev/null @@ -1,170 +0,0 @@ -package mage.cards.d; - -import mage.abilities.Ability; -import mage.abilities.common.AttacksTriggeredAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.common.delayed.ReflexiveTriggeredAbility; -import mage.abilities.costs.Cost; -import mage.abilities.costs.SacrificeCost; -import mage.abilities.costs.UseAttachedCost; -import mage.abilities.costs.common.SacrificeTargetCost; -import mage.abilities.effects.ContinuousEffectImpl; -import mage.abilities.effects.common.DamageWithPowerFromSourceToAnotherTargetEffect; -import mage.abilities.effects.common.DoWhenCostPaid; -import mage.abilities.effects.common.continuous.BoostEquippedEffect; -import mage.abilities.keyword.EquipAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.filter.common.FilterControlledArtifactPermanent; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.MageObjectReferencePredicate; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.target.common.TargetCreaturePermanent; -import mage.target.targetpointer.FixedTarget; - -import java.util.UUID; - -/** - * @author Susucr - */ -public final class DireBlunderbuss extends CardImpl { - - public DireBlunderbuss(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, ""); - this.nightCard = true; - - this.subtype.add(SubType.EQUIPMENT); - this.color.setRed(true); - - // Equipped creature gets +3/+0 and has "Whenever this creature attacks, you may sacrifice an artifact other than Dire Blunderbuss. When you do, this creature deals damage equal to its power to target creature" - Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(3, 0)); - ability.addEffect(new DireBlunderbussGainAbilityEffect()); - this.addAbility(ability); - - // Equip {1} - this.addAbility(new EquipAbility(1, false)); - } - - private DireBlunderbuss(final DireBlunderbuss card) { - super(card); - } - - @Override - public DireBlunderbuss copy() { - return new DireBlunderbuss(this); - } -} - -class DireBlunderbussGainAbilityEffect extends ContinuousEffectImpl { - - DireBlunderbussGainAbilityEffect() { - super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility); - staticText = "and has \"Whenever this creature attacks, you may sacrifice an artifact other than {this}. " - + "When you do, this creature deals damage equal to its power to target creature.\""; - } - - protected DireBlunderbussGainAbilityEffect(final DireBlunderbussGainAbilityEffect effect) { - super(effect); - } - - @Override - public DireBlunderbussGainAbilityEffect copy() { - return new DireBlunderbussGainAbilityEffect(this); - } - - @Override - public void init(Ability source, Game game) { - super.init(source, game); - if (getAffectedObjectsSet()) { - Permanent equipment = game.getPermanentOrLKIBattlefield(source.getSourceId()); - if (equipment != null && equipment.getAttachedTo() != null) { - this.setTargetPointer(new FixedTarget(equipment.getAttachedTo(), game.getState().getZoneChangeCounter(equipment.getAttachedTo()))); - } - } - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent permanent = null; - if (getAffectedObjectsSet()) { - permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); - if (permanent == null) { - discard(); - return true; - } - } else { - Permanent equipment = game.getPermanent(source.getSourceId()); - if (equipment != null && equipment.getAttachedTo() != null) { - permanent = game.getPermanentOrLKIBattlefield(equipment.getAttachedTo()); - } - } - if (permanent == null) { - return true; - } - Ability ability = makeAbility(game, source); - ability.getEffects().setValue("attachedPermanent", game.getPermanent(source.getSourceId())); - permanent.addAbility(ability, source.getSourceId(), game); - return true; - } - - protected Ability makeAbility(Game game, Ability source) { - ReflexiveTriggeredAbility reflexive = new ReflexiveTriggeredAbility( - new DamageWithPowerFromSourceToAnotherTargetEffect("this creature"), false - ); - reflexive.addTarget(new TargetCreaturePermanent()); - return new AttacksTriggeredAbility( - new DoWhenCostPaid( - reflexive, new DireBlunderbussSacrificeCost(source, game), - "Sacrifice an artifact other than the equipment?" - ), false - ); - } -} - -class DireBlunderbussSacrificeCost extends UseAttachedCost implements SacrificeCost { - - private final SacrificeTargetCost sacrificeCost; - - DireBlunderbussSacrificeCost(Ability source, Game game) { - super(); - this.setMageObjectReference(source, game); - FilterControlledArtifactPermanent filter = new FilterControlledArtifactPermanent(); - filter.add(Predicates.not(new MageObjectReferencePredicate(this.mageObjectReference))); - this.sacrificeCost = new SacrificeTargetCost(filter); - } - - private DireBlunderbussSacrificeCost(final DireBlunderbussSacrificeCost cost) { - super(cost); - this.sacrificeCost = cost.sacrificeCost.copy(); - } - - @Override - public boolean canPay(Ability ability, Ability source, UUID controllerId, Game game) { - return sacrificeCost.canPay(ability, source, controllerId, game); - } - - @Override - public boolean pay(Ability ability, Game game, Ability source, UUID controllerId, boolean noMana, Cost costToPay) { - if (mageObjectReference == null) { - return false; - } - Permanent permanent = game.getPermanent(source.getSourceId()); - if (permanent == null) { - return paid; - } - paid = sacrificeCost.pay(ability, game, source, controllerId, noMana, costToPay); - return paid; - } - - @Override - public DireBlunderbussSacrificeCost copy() { - return new DireBlunderbussSacrificeCost(this); - } - - @Override - public String getText() { - return "sacrifice an artifact other than " + this.name; - } -} diff --git a/Mage.Sets/src/mage/cards/d/DireFlail.java b/Mage.Sets/src/mage/cards/d/DireFlail.java index 2224c630043..1b2412b1318 100644 --- a/Mage.Sets/src/mage/cards/d/DireFlail.java +++ b/Mage.Sets/src/mage/cards/d/DireFlail.java @@ -1,35 +1,59 @@ package mage.cards.d; +import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.common.delayed.ReflexiveTriggeredAbility; +import mage.abilities.costs.SacrificeCost; +import mage.abilities.costs.UseAttachedCost; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.common.DamageWithPowerFromSourceToAnotherTargetEffect; +import mage.abilities.effects.common.DoWhenCostPaid; import mage.abilities.effects.common.continuous.BoostEquippedEffect; import mage.abilities.keyword.CraftAbility; import mage.abilities.keyword.EquipAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; +import mage.cards.TransformingDoubleFacedCard; +import mage.constants.*; +import mage.filter.common.FilterControlledArtifactPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.MageObjectReferencePredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.common.TargetCreaturePermanent; +import mage.target.targetpointer.FixedTarget; import java.util.UUID; /** * @author Susucr */ -public final class DireFlail extends CardImpl { +public final class DireFlail extends TransformingDoubleFacedCard { public DireFlail(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{R}"); - this.secondSideCardClazz = mage.cards.d.DireBlunderbuss.class; - - this.subtype.add(SubType.EQUIPMENT); + super(ownerId, setInfo, + new CardType[]{CardType.ARTIFACT}, new SubType[]{SubType.EQUIPMENT}, "{R}", + "Dire Blunderbuss", + new CardType[]{CardType.ARTIFACT}, new SubType[]{SubType.EQUIPMENT}, "R"); + // Dire Flail // Equipped creature gets +2/+0. - this.addAbility(new SimpleStaticAbility(new BoostEquippedEffect(2, 0))); + this.getLeftHalfCard().addAbility(new SimpleStaticAbility(new BoostEquippedEffect(2, 0))); // Equip {1} - this.addAbility(new EquipAbility(1, false)); + this.getLeftHalfCard().addAbility(new EquipAbility(1, false)); // Craft with artifact {3}{R}{R} - this.addAbility(new CraftAbility("{3}{R}{R}")); + this.getLeftHalfCard().addAbility(new CraftAbility("{3}{R}{R}")); + + // Dire Blunderbuss + + // Equipped creature gets +3/+0 and has "Whenever this creature attacks, you may sacrifice an artifact other than Dire Blunderbuss. When you do, this creature deals damage equal to its power to target creature" + Ability ability = new SimpleStaticAbility(new BoostEquippedEffect(3, 0)); + ability.addEffect(new DireBlunderbussGainAbilityEffect()); + this.getRightHalfCard().addAbility(ability); + + // Equip {1} + this.getRightHalfCard().addAbility(new EquipAbility(1, false)); } private DireFlail(final DireFlail card) { @@ -41,3 +65,109 @@ public final class DireFlail extends CardImpl { return new DireFlail(this); } } + +class DireBlunderbussGainAbilityEffect extends ContinuousEffectImpl { + + DireBlunderbussGainAbilityEffect() { + super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility); + staticText = "and has \"Whenever this creature attacks, you may sacrifice an artifact other than {this}. " + + "When you do, this creature deals damage equal to its power to target creature.\""; + } + + protected DireBlunderbussGainAbilityEffect(final DireBlunderbussGainAbilityEffect effect) { + super(effect); + } + + @Override + public DireBlunderbussGainAbilityEffect copy() { + return new DireBlunderbussGainAbilityEffect(this); + } + + @Override + public void init(Ability source, Game game) { + super.init(source, game); + if (getAffectedObjectsSet()) { + Permanent equipment = game.getPermanentOrLKIBattlefield(source.getSourceId()); + if (equipment != null && equipment.getAttachedTo() != null) { + this.setTargetPointer(new FixedTarget(equipment.getAttachedTo(), game.getState().getZoneChangeCounter(equipment.getAttachedTo()))); + } + } + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = null; + if (getAffectedObjectsSet()) { + permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); + if (permanent == null) { + discard(); + return true; + } + } else { + Permanent equipment = game.getPermanent(source.getSourceId()); + if (equipment != null && equipment.getAttachedTo() != null) { + permanent = game.getPermanentOrLKIBattlefield(equipment.getAttachedTo()); + } + } + if (permanent == null) { + return true; + } + ReflexiveTriggeredAbility reflexive = new ReflexiveTriggeredAbility( + new DamageWithPowerFromSourceToAnotherTargetEffect("this creature"), false + ); + reflexive.addTarget(new TargetCreaturePermanent()); + Ability grant = new mage.abilities.common.AttacksTriggeredAbility( + new DoWhenCostPaid( + reflexive, new DireBlunderbussSacrificeCost(source, game), + "Sacrifice an artifact other than the equipment?" + ), false + ); + permanent.addAbility(grant, source.getSourceId(), game); + return true; + } +} + +class DireBlunderbussSacrificeCost extends UseAttachedCost implements SacrificeCost { + + private final mage.abilities.costs.common.SacrificeTargetCost sacrificeCost; + private final mage.MageObjectReference mageObjectReference; + + DireBlunderbussSacrificeCost(Ability source, Game game) { + super(); + this.mageObjectReference = new mage.MageObjectReference(source.getSourceObject(game), game); + FilterControlledArtifactPermanent filter = new FilterControlledArtifactPermanent(); + filter.add(Predicates.not(new MageObjectReferencePredicate(this.mageObjectReference))); + this.sacrificeCost = new mage.abilities.costs.common.SacrificeTargetCost(filter); + } + + private DireBlunderbussSacrificeCost(final DireBlunderbussSacrificeCost cost) { + super(cost); + this.sacrificeCost = cost.sacrificeCost.copy(); + this.mageObjectReference = cost.mageObjectReference; + } + + @Override + public boolean canPay(Ability ability, Ability source, UUID controllerId, Game game) { + return sacrificeCost.canPay(ability, source, controllerId, game); + } + + @Override + public boolean pay(Ability ability, Game game, Ability source, UUID controllerId, boolean noMana, mage.abilities.costs.Cost costToPay) { + Permanent equipment = game.getPermanent(source.getSourceId()); + if (equipment == null) { + return paid; + } + paid = sacrificeCost.pay(ability, game, source, controllerId, noMana, costToPay); + return paid; + } + + @Override + public DireBlunderbussSacrificeCost copy() { + return new DireBlunderbussSacrificeCost(this); + } + + @Override + public String getText() { + return "sacrifice an artifact other than " + this.name; + } +} diff --git a/Mage.Sets/src/mage/cards/d/DistractingGeist.java b/Mage.Sets/src/mage/cards/d/DistractingGeist.java index 6d46c46ca82..8baef404c8a 100644 --- a/Mage.Sets/src/mage/cards/d/DistractingGeist.java +++ b/Mage.Sets/src/mage/cards/d/DistractingGeist.java @@ -1,49 +1,67 @@ package mage.cards.d; -import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.AttacksTriggeredAbility; -import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.TapTargetEffect; import mage.abilities.keyword.DisturbAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.EnchantAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; +import mage.constants.AttachmentType; import mage.constants.CardType; +import mage.constants.Outcome; import mage.constants.SubType; import mage.filter.FilterPermanent; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.DefendingPlayerControlsSourceAttackingPredicate; import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; import java.util.UUID; /** * @author TheElk801 */ -public final class DistractingGeist extends CardImpl { +public final class DistractingGeist extends TransformingDoubleFacedCard { - private static final FilterPermanent filter - = new FilterCreaturePermanent("creature defending player controls"); + private static final FilterPermanent filter = new FilterCreaturePermanent("creature defending player controls"); static { filter.add(DefendingPlayerControlsSourceAttackingPredicate.instance); } public DistractingGeist(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.SPIRIT}, "{2}{W}", + "Clever Distraction", + new CardType[]{CardType.ENCHANTMENT}, new SubType[]{SubType.AURA}, "W"); - this.subtype.add(SubType.SPIRIT); - this.power = new MageInt(2); - this.toughness = new MageInt(1); - this.secondSideCardClazz = mage.cards.c.CleverDistraction.class; + // Distracting Geist + this.getLeftHalfCard().setPT(2, 1); // Whenever Distracting Geist attacks, tap target creature defending player controls. Ability ability = new AttacksTriggeredAbility(new TapTargetEffect()); ability.addTarget(new TargetPermanent(filter)); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); // Disturb {4}{W} - this.addAbility(new DisturbAbility(this, "{4}{W}")); + this.getLeftHalfCard().addAbility(new DisturbAbility(this, "{4}{W}")); + + // Clever Distraction + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getRightHalfCard().getSpellAbility().addTarget(auraTarget); + this.getRightHalfCard().getSpellAbility().addEffect(new mage.abilities.effects.common.AttachEffect(Outcome.BoostCreature)); + this.getRightHalfCard().addAbility(new EnchantAbility(auraTarget)); + + // Enchanted creature has "Whenever this creature attacks, tap target creature defending player controls." + Ability ability2 = new AttacksTriggeredAbility(new TapTargetEffect()).setTriggerPhrase("Whenever this creature attacks, "); + ability2.addTarget(new TargetPermanent(filter)); + this.getRightHalfCard().addAbility(new mage.abilities.common.SimpleStaticAbility(new mage.abilities.effects.common.continuous.GainAbilityAttachedEffect(ability2, AttachmentType.AURA))); + + // If Clever Distracting would be put into a graveyard from anywhere, exile it instead. + this.getRightHalfCard().addAbility(DisturbAbility.makeBackAbility()); } private DistractingGeist(final DistractingGeist card) { diff --git a/Mage.Sets/src/mage/cards/d/DormantGrove.java b/Mage.Sets/src/mage/cards/d/DormantGrove.java index 3db92560395..17988a2eea7 100644 --- a/Mage.Sets/src/mage/cards/d/DormantGrove.java +++ b/Mage.Sets/src/mage/cards/d/DormantGrove.java @@ -1,47 +1,58 @@ package mage.cards.d; -import java.util.UUID; - import mage.abilities.Ability; -import mage.abilities.triggers.BeginningOfCombatTriggeredAbility; import mage.abilities.condition.Condition; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.triggers.BeginningOfCombatTriggeredAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; import mage.counters.CounterType; import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.common.TargetControlledCreaturePermanent; +import java.util.UUID; + /** * * @author weirddan455 */ -public final class DormantGrove extends CardImpl { +public final class DormantGrove extends TransformingDoubleFacedCard { public DormantGrove(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{G}"); - - this.secondSideCardClazz = mage.cards.g.GnarledGrovestrider.class; + super(ownerId, setInfo, + new CardType[]{CardType.ENCHANTMENT}, new SubType[]{}, "{3}{G}", + "Gnarled Grovestrider", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.TREEFOLK}, "G"); + // Dormant Grove // At the beginning of combat on your turn, put a +1/+1 counter on target creature you control. // Then if that creature has toughness 6 or greater, transform Dormant Grove. - this.addAbility(new TransformAbility()); - - Ability ability = new BeginningOfCombatTriggeredAbility( - new AddCountersTargetEffect(CounterType.P1P1.createInstance()) - ); + Ability ability = new BeginningOfCombatTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance())); ability.addEffect(new ConditionalOneShotEffect( new TransformSourceEffect(), DormatGroveCondition.instance, "Then if that creature has toughness 6 or greater, transform {this}" )); ability.addTarget(new TargetControlledCreaturePermanent()); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); + + // Gnarled Grovestrider + this.getRightHalfCard().setPT(3, 6); + + // Vigilance + this.getRightHalfCard().addAbility(mage.abilities.keyword.VigilanceAbility.getInstance()); + + // Other creatures you control have vigilance. + this.getRightHalfCard().addAbility(new mage.abilities.common.SimpleStaticAbility(new mage.abilities.effects.common.continuous.GainAbilityControlledEffect( + mage.abilities.keyword.VigilanceAbility.getInstance(), Duration.WhileOnBattlefield, + mage.filter.StaticFilters.FILTER_PERMANENT_CREATURES, true + ))); } private DormantGrove(final DormantGrove card) { diff --git a/Mage.Sets/src/mage/cards/d/DorotheaVengefulVictim.java b/Mage.Sets/src/mage/cards/d/DorotheaVengefulVictim.java index eb57714d748..dd2319d0ce4 100644 --- a/Mage.Sets/src/mage/cards/d/DorotheaVengefulVictim.java +++ b/Mage.Sets/src/mage/cards/d/DorotheaVengefulVictim.java @@ -1,45 +1,63 @@ package mage.cards.d; -import mage.MageInt; import mage.abilities.common.AttacksOrBlocksTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; -import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.SacrificeSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; import mage.abilities.keyword.DisturbAbility; +import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.FlyingAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.SuperType; +import mage.cards.TransformingDoubleFacedCard; +import mage.constants.*; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; import java.util.UUID; /** * @author TheElk801 */ -public final class DorotheaVengefulVictim extends CardImpl { +public final class DorotheaVengefulVictim extends TransformingDoubleFacedCard { public DorotheaVengefulVictim(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}{U}"); + super(ownerId, setInfo, + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.SPIRIT}, "{W}{U}", + "Dorothea's Retribution", + new SuperType[]{}, new CardType[]{CardType.ENCHANTMENT}, new SubType[]{SubType.AURA}, "WU"); - this.supertype.add(SuperType.LEGENDARY); - this.subtype.add(SubType.SPIRIT); - this.power = new MageInt(4); - this.toughness = new MageInt(4); - this.secondSideCardClazz = mage.cards.d.DorotheasRetribution.class; + // Dorothea, Vengeful Victim + this.getLeftHalfCard().setPT(4, 4); // Flying - this.addAbility(FlyingAbility.getInstance()); + this.getLeftHalfCard().addAbility(FlyingAbility.getInstance()); // When Dorothea, Vengeful Victim attacks or blocks, sacrifice it at end of combat. - this.addAbility(new AttacksOrBlocksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect( + this.getLeftHalfCard().addAbility(new AttacksOrBlocksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect( new AtTheEndOfCombatDelayedTriggeredAbility(new SacrificeSourceEffect()) ).setText("sacrifice it at end of combat"), false)); // Disturb {1}{W}{U} - this.addAbility(new DisturbAbility(this, "{1}{W}{U}")); + this.getLeftHalfCard().addAbility(new DisturbAbility(this, "{1}{W}{U}")); + + // Dorothea's Retribution + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getRightHalfCard().getSpellAbility().addTarget(auraTarget); + this.getRightHalfCard().getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + this.getRightHalfCard().addAbility(new EnchantAbility(auraTarget)); + + // Enchanted creature has "Whenever this creature attacks, create a 4/4 white Spirit creature token with flying that's tapped and attacking. Sacrifice that token at end of combat." + this.getRightHalfCard().addAbility(new SimpleStaticAbility(new GainAbilityAttachedEffect( + new mage.abilities.common.AttacksTriggeredAbility(new DorotheasRetributionEffect()).setTriggerPhrase("Whenever this creature attacks, "), + AttachmentType.AURA + ))); + + // If Dorothea's Retribution would be put into a graveyard from anywhere, exile it instead. + this.getRightHalfCard().addAbility(DisturbAbility.makeBackAbility()); } private DorotheaVengefulVictim(final DorotheaVengefulVictim card) { @@ -51,3 +69,32 @@ public final class DorotheaVengefulVictim extends CardImpl { return new DorotheaVengefulVictim(this); } } + +class DorotheasRetributionEffect extends mage.abilities.effects.OneShotEffect { + + DorotheasRetributionEffect() { + super(Outcome.Benefit); + staticText = "create a 4/4 white Spirit creature token with flying that's tapped and attacking. Sacrifice that token at end of combat"; + } + + private DorotheasRetributionEffect(final DorotheasRetributionEffect effect) { + super(effect); + } + + @Override + public DorotheasRetributionEffect copy() { + return new DorotheasRetributionEffect(this); + } + + @Override + public boolean apply(mage.game.Game game, mage.abilities.Ability source) { + mage.game.permanent.token.Token token = new mage.game.permanent.token.DorotheasRetributionSpiritToken(); + token.putOntoBattlefield(1, game, source, source.getControllerId(), true, true); + game.addDelayedTriggeredAbility(new AtTheEndOfCombatDelayedTriggeredAbility( + new mage.abilities.effects.common.SacrificeTargetEffect() + .setTargetPointer(new mage.target.targetpointer.FixedTargets(token, game)) + .setText("sacrifice that token") + ), source); + return true; + } +} diff --git a/Mage.Sets/src/mage/cards/d/DorotheasRetribution.java b/Mage.Sets/src/mage/cards/d/DorotheasRetribution.java deleted file mode 100644 index 688994337d7..00000000000 --- a/Mage.Sets/src/mage/cards/d/DorotheasRetribution.java +++ /dev/null @@ -1,96 +0,0 @@ -package mage.cards.d; - -import mage.abilities.Ability; -import mage.abilities.common.AttacksTriggeredAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.SacrificeTargetEffect; -import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; -import mage.abilities.keyword.DisturbAbility; -import mage.abilities.keyword.EnchantAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.AttachmentType; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.SubType; -import mage.game.Game; -import mage.game.permanent.token.DorotheasRetributionSpiritToken; -import mage.game.permanent.token.Token; -import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; -import mage.target.targetpointer.FixedTargets; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class DorotheasRetribution extends CardImpl { - - public DorotheasRetribution(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, ""); - - this.subtype.add(SubType.AURA); - this.color.setWhite(true); - this.color.setBlue(true); - this.nightCard = true; - - // Enchant creature - TargetPermanent auraTarget = new TargetCreaturePermanent(); - this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - this.addAbility(new EnchantAbility(auraTarget)); - - // Enchanted creature has "Whenever this creature attacks, create a 4/4 white Spirit creature token with flying that's tapped and attacking. Sacrifice that token at end of combat." - this.addAbility(new SimpleStaticAbility(new GainAbilityAttachedEffect( - new AttacksTriggeredAbility(new DorotheasRetributionEffect()) - .setTriggerPhrase("Whenever this creature attacks, "), - AttachmentType.AURA - ))); - - // If Dorothea's Retribution would be put into a graveyard from anywhere, exile it instead. - this.addAbility(DisturbAbility.makeBackAbility()); - } - - private DorotheasRetribution(final DorotheasRetribution card) { - super(card); - } - - @Override - public DorotheasRetribution copy() { - return new DorotheasRetribution(this); - } -} - -class DorotheasRetributionEffect extends OneShotEffect { - - DorotheasRetributionEffect() { - super(Outcome.Benefit); - staticText = "create a 4/4 white Spirit creature token with flying " + - "that's tapped and attacking. Sacrifice that token at end of combat"; - } - - private DorotheasRetributionEffect(final DorotheasRetributionEffect effect) { - super(effect); - } - - @Override - public DorotheasRetributionEffect copy() { - return new DorotheasRetributionEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Token token = new DorotheasRetributionSpiritToken(); - token.putOntoBattlefield(1, game, source, source.getControllerId(), true, true); - game.addDelayedTriggeredAbility(new AtTheEndOfCombatDelayedTriggeredAbility( - new SacrificeTargetEffect() - .setTargetPointer(new FixedTargets(token, game)) - .setText("sacrifice that token") - ), source); - return true; - } -} diff --git a/Mage.Sets/src/mage/cards/d/DowsingDagger.java b/Mage.Sets/src/mage/cards/d/DowsingDagger.java index a5b02e21193..e1325e4438f 100644 --- a/Mage.Sets/src/mage/cards/d/DowsingDagger.java +++ b/Mage.Sets/src/mage/cards/d/DowsingDagger.java @@ -1,18 +1,14 @@ - package mage.cards.d; import mage.abilities.Ability; import mage.abilities.common.DealsDamageToAPlayerAttachedTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.CreateTokenTargetEffect; import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.common.continuous.BoostEquippedEffect; import mage.abilities.keyword.EquipAbility; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; @@ -24,29 +20,32 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class DowsingDagger extends CardImpl { +public final class DowsingDagger extends TransformingDoubleFacedCard { public DowsingDagger(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}"); - - this.subtype.add(SubType.EQUIPMENT); - - this.secondSideCardClazz = mage.cards.l.LostVale.class; + super(ownerId, setInfo, + new CardType[]{CardType.ARTIFACT}, new SubType[]{SubType.EQUIPMENT}, "{2}", + "Lost Vale", + new CardType[]{CardType.LAND}, new SubType[]{}, ""); + // Dowsing Dagger // When Dowsing Dagger enters the battlefield, target opponent creates two 0/2 green Plant creature tokens with defender. Ability ability = new EntersBattlefieldTriggeredAbility(new CreateTokenTargetEffect(new DefenderPlantToken(), 2), false); ability.addTarget(new TargetOpponent()); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); // Equipped creature gets +2/+1. - this.addAbility(new SimpleStaticAbility(new BoostEquippedEffect(2, 1))); + this.getLeftHalfCard().addAbility(new mage.abilities.common.SimpleStaticAbility(new BoostEquippedEffect(2, 1))); // Whenever equipped creature deals combat damage to a player, you may transform Dowsing Dagger. - this.addAbility(new TransformAbility()); - this.addAbility(new DealsDamageToAPlayerAttachedTriggeredAbility(new TransformSourceEffect(), "equipped", true)); + this.getLeftHalfCard().addAbility(new DealsDamageToAPlayerAttachedTriggeredAbility(new TransformSourceEffect(), "equipped", true)); // Equip 2 - this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(2), false)); + this.getLeftHalfCard().addAbility(new EquipAbility(Outcome.AddAbility, new mage.abilities.costs.mana.GenericManaCost(2), false)); + + // Lost Vale + // T: Add three mana of any one color. + this.getRightHalfCard().addAbility(new mage.abilities.mana.SimpleManaAbility(new mage.abilities.effects.mana.AddManaOfAnyColorEffect(3), new mage.abilities.costs.common.TapSourceCost())); } private DowsingDagger(final DowsingDagger card) { diff --git a/Mage.Sets/src/mage/cards/d/DowsingDevice.java b/Mage.Sets/src/mage/cards/d/DowsingDevice.java index d6e3c299bbe..a8dcf8c9663 100644 --- a/Mage.Sets/src/mage/cards/d/DowsingDevice.java +++ b/Mage.Sets/src/mage/cards/d/DowsingDevice.java @@ -10,11 +10,11 @@ import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.hint.common.ArtifactYouControlHint; import mage.abilities.keyword.HasteAbility; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.ComparisonType; +import mage.constants.SubType; import mage.filter.StaticFilters; import mage.target.common.TargetControlledCreaturePermanent; @@ -23,18 +23,20 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class DowsingDevice extends CardImpl { +public final class DowsingDevice extends TransformingDoubleFacedCard { private static final Condition condition = new PermanentsOnTheBattlefieldCondition( StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT, ComparisonType.MORE_THAN, 3 ); public DowsingDevice(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{R}"); - this.secondSideCardClazz = mage.cards.g.GeodeGrotto.class; + super(ownerId, setInfo, + new CardType[]{CardType.ARTIFACT}, new SubType[]{}, "{1}{R}", + "Geode Grotto", + new CardType[]{CardType.LAND}, new SubType[]{SubType.CAVE}, ""); + // Dowsing Device // Whenever Dowsing Device or another artifact you control enters, up to one target creature you control gets +1/+0 and gains haste until end of turn. Then transform Dowsing Device if you control four or more artifacts. - this.addAbility(new TransformAbility()); Ability ability = new EntersBattlefieldThisOrAnotherTriggeredAbility( new BoostTargetEffect(1, 0) .setText("up to one target creature you control gets +1/+0"), @@ -43,11 +45,24 @@ public final class DowsingDevice extends CardImpl { ability.addEffect(new GainAbilityTargetEffect(HasteAbility.getInstance()) .setText("and gains haste until end of turn")); ability.addEffect(new ConditionalOneShotEffect( - new TransformSourceEffect(), condition, "Then " + - "transform {this} if you control four or more artifacts" + new TransformSourceEffect(), condition, "Then transform {this} if you control four or more artifacts" )); ability.addTarget(new TargetControlledCreaturePermanent(0, 1)); - this.addAbility(ability.addHint(ArtifactYouControlHint.instance)); + this.getLeftHalfCard().addAbility(ability.addHint(ArtifactYouControlHint.instance)); + + // Geode Grotto + // {T}: Add {R}. + this.getRightHalfCard().addAbility(new mage.abilities.mana.RedManaAbility()); + + // {2}{R}, {T}: Until end of turn, target creature gains haste and gets +X/+0, where X is the number of artifacts you control. Activate only as a sorcery. + Ability ability2 = new mage.abilities.common.ActivateAsSorceryActivatedAbility(new GainAbilityTargetEffect(HasteAbility.getInstance()) + .setText("Until end of turn, target creature gains haste"), new mage.abilities.costs.mana.ManaCostsImpl<>("{2}{R}")); + ability2.addCost(new mage.abilities.costs.common.TapSourceCost()); + ability2.addEffect(new mage.abilities.effects.common.continuous.BoostTargetEffect( + mage.abilities.dynamicvalue.common.ArtifactYouControlCount.instance, mage.abilities.dynamicvalue.common.StaticValue.get(0) + ).setText("and gets +X/+0, where X is the number of artifacts you control")); + ability2.addTarget(new mage.target.common.TargetCreaturePermanent()); + this.getRightHalfCard().addAbility(ability2.addHint(ArtifactYouControlHint.instance)); } private DowsingDevice(final DowsingDevice card) { diff --git a/Mage.Sets/src/mage/cards/d/DrogskolArmaments.java b/Mage.Sets/src/mage/cards/d/DrogskolArmaments.java deleted file mode 100644 index dd67d25ed9d..00000000000 --- a/Mage.Sets/src/mage/cards/d/DrogskolArmaments.java +++ /dev/null @@ -1,51 +0,0 @@ -package mage.cards.d; - -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.continuous.BoostEnchantedEffect; -import mage.abilities.keyword.DisturbAbility; -import mage.abilities.keyword.EnchantAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.SubType; -import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class DrogskolArmaments extends CardImpl { - - public DrogskolArmaments(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, ""); - - this.subtype.add(SubType.AURA); - this.color.setWhite(true); - this.nightCard = true; - - // Enchant creature - TargetPermanent auraTarget = new TargetCreaturePermanent(); - this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - this.addAbility(new EnchantAbility(auraTarget)); - - // Enchanted creature gets +2/+2. - this.addAbility(new SimpleStaticAbility(new BoostEnchantedEffect(2, 2))); - - // If Drogskol Armaments would be put into a graveyard from anywhere, exile it instead. - this.addAbility(DisturbAbility.makeBackAbility()); - } - - private DrogskolArmaments(final DrogskolArmaments card) { - super(card); - } - - @Override - public DrogskolArmaments copy() { - return new DrogskolArmaments(this); - } -} diff --git a/Mage.Sets/src/mage/cards/d/DrogskolInfantry.java b/Mage.Sets/src/mage/cards/d/DrogskolInfantry.java index c83c5ccffe5..5ff5195f54b 100644 --- a/Mage.Sets/src/mage/cards/d/DrogskolInfantry.java +++ b/Mage.Sets/src/mage/cards/d/DrogskolInfantry.java @@ -1,31 +1,52 @@ package mage.cards.d; -import mage.MageInt; -import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.continuous.BoostEnchantedEffect; import mage.abilities.keyword.DisturbAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.EnchantAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; +import mage.constants.Outcome; import mage.constants.SubType; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; import java.util.UUID; /** * @author TheElk801 */ -public final class DrogskolInfantry extends CardImpl { +public final class DrogskolInfantry extends TransformingDoubleFacedCard { public DrogskolInfantry(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.SPIRIT, SubType.SOLDIER}, "{1}{W}", + "Drogskol Armaments", + new CardType[]{CardType.ENCHANTMENT}, new SubType[]{SubType.AURA}, "W"); - this.subtype.add(SubType.SPIRIT); - this.subtype.add(SubType.SOLDIER); - this.power = new MageInt(2); - this.toughness = new MageInt(2); - this.secondSideCardClazz = mage.cards.d.DrogskolArmaments.class; + // Drogskol Infantry + this.getLeftHalfCard().setPT(2, 2); + + + // Drogskol Armaments + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getRightHalfCard().getSpellAbility().addTarget(auraTarget); + this.getRightHalfCard().getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + this.getRightHalfCard().addAbility(new EnchantAbility(auraTarget)); // Disturb {3}{W} - this.addAbility(new DisturbAbility(this, "{3}{W}")); + // needs to be added after enchant ability to set correct target + this.getLeftHalfCard().addAbility(new DisturbAbility(this, "{3}{W}")); + + // Enchanted creature gets +2/+2. + this.getRightHalfCard().addAbility(new SimpleStaticAbility(new BoostEnchantedEffect(2, 2))); + + // If Drogskol Armaments would be put into a graveyard from anywhere, exile it instead. + this.getRightHalfCard().addAbility(DisturbAbility.makeBackAbility()); } private DrogskolInfantry(final DrogskolInfantry card) { diff --git a/Mage.Sets/src/mage/cards/d/DuskwatchRecruiter.java b/Mage.Sets/src/mage/cards/d/DuskwatchRecruiter.java index 695fb926a45..7ae652dd555 100644 --- a/Mage.Sets/src/mage/cards/d/DuskwatchRecruiter.java +++ b/Mage.Sets/src/mage/cards/d/DuskwatchRecruiter.java @@ -1,45 +1,54 @@ package mage.cards.d; -import java.util.UUID; - -import mage.MageInt; +import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.WerewolfBackTriggeredAbility; import mage.abilities.common.WerewolfFrontTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.LookLibraryAndPickControllerEffect; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.PutCards; import mage.constants.SubType; import mage.filter.StaticFilters; +import java.util.UUID; + /** * @author fireshoes */ -public final class DuskwatchRecruiter extends CardImpl { +public final class DuskwatchRecruiter extends TransformingDoubleFacedCard { public DuskwatchRecruiter(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.WARRIOR); - this.subtype.add(SubType.WEREWOLF); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WARRIOR, SubType.WEREWOLF}, "{1}{G}", + "Krallenhorde Howler", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "G"); - this.secondSideCardClazz = mage.cards.k.KrallenhordeHowler.class; + // Duskwatch Recruiter + this.getLeftHalfCard().setPT(2, 2); - this.power = new MageInt(2); - this.toughness = new MageInt(2); - - // {2}{G}: Look at the top three cards of your library. You may reveal a creature card from among them and put it into your hand. - // Put the rest on the bottom of your library in any order. - this.addAbility(new SimpleActivatedAbility( + // {2}{G}: Look at the top three cards of your library. You may reveal a creature card from among them and put it into your hand. Put the rest on the bottom of your library in any order. + Ability ability = new SimpleActivatedAbility( new LookLibraryAndPickControllerEffect(3, 1, StaticFilters.FILTER_CARD_CREATURE_A, PutCards.HAND, PutCards.BOTTOM_ANY), - new ManaCostsImpl<>("{2}{G}"))); + new ManaCostsImpl<>("{2}{G}") + ); + this.getLeftHalfCard().addAbility(ability); // At the beginning of each upkeep, if no spells were cast last turn, transform Duskwatch Recruiter. - this.addAbility(new TransformAbility()); - this.addAbility(new WerewolfFrontTriggeredAbility()); + this.getLeftHalfCard().addAbility(new WerewolfFrontTriggeredAbility()); + + // Krallenhorde Howler + this.getRightHalfCard().setPT(3, 3); + + // Creature spells you cast cost {1} less to cast. + this.getRightHalfCard().addAbility(new mage.abilities.common.SimpleStaticAbility( + new mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect(new mage.filter.common.FilterCreatureCard("creature spells"), 1) + )); + + // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Krallenhorde Howler. + this.getRightHalfCard().addAbility(new WerewolfBackTriggeredAbility()); } private DuskwatchRecruiter(final DuskwatchRecruiter card) { diff --git a/Mage.Sets/src/mage/cards/g/GeodeGrotto.java b/Mage.Sets/src/mage/cards/g/GeodeGrotto.java deleted file mode 100644 index 9bcf1d2c4c3..00000000000 --- a/Mage.Sets/src/mage/cards/g/GeodeGrotto.java +++ /dev/null @@ -1,55 +0,0 @@ -package mage.cards.g; - -import mage.abilities.Ability; -import mage.abilities.common.ActivateAsSorceryActivatedAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.dynamicvalue.common.ArtifactYouControlCount; -import mage.abilities.dynamicvalue.common.StaticValue; -import mage.abilities.effects.common.continuous.BoostTargetEffect; -import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; -import mage.abilities.hint.common.ArtifactYouControlHint; -import mage.abilities.keyword.HasteAbility; -import mage.abilities.mana.RedManaAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.target.common.TargetCreaturePermanent; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class GeodeGrotto extends CardImpl { - - public GeodeGrotto(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); - - this.subtype.add(SubType.CAVE); - this.nightCard = true; - - // {T}: Add {R}. - this.addAbility(new RedManaAbility()); - - // {2}{R}, {T}: Until end of turn, target creature gains haste and gets +X/+0, where X is the number of artifacts you control. Activate only as a sorcery. - Ability ability = new ActivateAsSorceryActivatedAbility(new GainAbilityTargetEffect(HasteAbility.getInstance()) - .setText("Until end of turn, target creature gains haste"), new ManaCostsImpl<>("{2}{R}")); - ability.addCost(new TapSourceCost()); - ability.addEffect(new BoostTargetEffect( - ArtifactYouControlCount.instance, StaticValue.get(0) - ).setText("and gets +X/+0, where X is the number of artifacts you control")); - ability.addTarget(new TargetCreaturePermanent()); - this.addAbility(ability.addHint(ArtifactYouControlHint.instance)); - } - - private GeodeGrotto(final GeodeGrotto card) { - super(card); - } - - @Override - public GeodeGrotto copy() { - return new GeodeGrotto(this); - } -} diff --git a/Mage.Sets/src/mage/cards/g/GnarledGrovestrider.java b/Mage.Sets/src/mage/cards/g/GnarledGrovestrider.java deleted file mode 100644 index ad4fced764d..00000000000 --- a/Mage.Sets/src/mage/cards/g/GnarledGrovestrider.java +++ /dev/null @@ -1,50 +0,0 @@ -package mage.cards.g; - -import mage.MageInt; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; -import mage.abilities.keyword.VigilanceAbility; -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 weirddan455 - */ -public class GnarledGrovestrider extends CardImpl { - - public GnarledGrovestrider(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - this.subtype.add(SubType.TREEFOLK); - this.color.setGreen(true); - - // Back half of Dormant Grove - this.nightCard = true; - - this.power = new MageInt(3); - this.toughness = new MageInt(6); - - this.addAbility(VigilanceAbility.getInstance()); - - // Other creatures you control have vigilance. - this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect( - VigilanceAbility.getInstance(), Duration.WhileOnBattlefield, - StaticFilters.FILTER_PERMANENT_CREATURES, true - ))); - } - - private GnarledGrovestrider(final GnarledGrovestrider card) { - super(card); - } - - @Override - public GnarledGrovestrider copy() { - return new GnarledGrovestrider(this); - } -} diff --git a/Mage.Sets/src/mage/cards/i/InsectileAberration.java b/Mage.Sets/src/mage/cards/i/InsectileAberration.java deleted file mode 100644 index e946630432c..00000000000 --- a/Mage.Sets/src/mage/cards/i/InsectileAberration.java +++ /dev/null @@ -1,43 +0,0 @@ - -package mage.cards.i; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.keyword.FlyingAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; - -/** - * - * @author Alvin - */ -public final class InsectileAberration extends CardImpl { - - public InsectileAberration(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},""); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.INSECT); - - this.color.setBlue(true); - - // this card is the second face of double-faced card Delver of Secrets - this.nightCard = true; - - this.power = new MageInt(3); - this.toughness = new MageInt(2); - - // Flying - this.addAbility(FlyingAbility.getInstance()); - } - - private InsectileAberration(final InsectileAberration card) { - super(card); - } - - @Override - public InsectileAberration copy() { - return new InsectileAberration(this); - } -} diff --git a/Mage.Sets/src/mage/cards/k/KrallenhordeHowler.java b/Mage.Sets/src/mage/cards/k/KrallenhordeHowler.java deleted file mode 100644 index c57d2e864bb..00000000000 --- a/Mage.Sets/src/mage/cards/k/KrallenhordeHowler.java +++ /dev/null @@ -1,48 +0,0 @@ -package mage.cards.k; - -import mage.MageInt; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.common.WerewolfBackTriggeredAbility; -import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.filter.FilterCard; -import mage.filter.common.FilterCreatureCard; - -import java.util.UUID; - -/** - * @author fireshoes - */ -public final class KrallenhordeHowler extends CardImpl { - - private static final FilterCard FILTER = new FilterCreatureCard("creature spells"); - - public KrallenhordeHowler(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - this.subtype.add(SubType.WEREWOLF); - this.power = new MageInt(3); - this.toughness = new MageInt(3); - this.color.setGreen(true); - - // this card is the second face of double-faced card - this.nightCard = true; - - // Creature spells you cast cost {1} less to cast. - this.addAbility(new SimpleStaticAbility(new SpellsCostReductionControllerEffect(FILTER, 1))); - - // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Krallenhorde Howler. - this.addAbility(new WerewolfBackTriggeredAbility()); - } - - private KrallenhordeHowler(final KrallenhordeHowler card) { - super(card); - } - - @Override - public KrallenhordeHowler copy() { - return new KrallenhordeHowler(this); - } -} diff --git a/Mage.Sets/src/mage/cards/l/LostVale.java b/Mage.Sets/src/mage/cards/l/LostVale.java deleted file mode 100644 index 2936d1430ff..00000000000 --- a/Mage.Sets/src/mage/cards/l/LostVale.java +++ /dev/null @@ -1,34 +0,0 @@ -package mage.cards.l; - -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.mana.AddManaOfAnyColorEffect; -import mage.abilities.mana.SimpleManaAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class LostVale extends CardImpl { - - public LostVale(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); - - this.nightCard = true; - - // T: Add three mana of any one color. - this.addAbility(new SimpleManaAbility(new AddManaOfAnyColorEffect(3), new TapSourceCost())); - } - - private LostVale(final LostVale card) { - super(card); - } - - @Override - public LostVale copy() { - return new LostVale(this); - } -} diff --git a/Mage.Sets/src/mage/cards/n/NightfallPredator.java b/Mage.Sets/src/mage/cards/n/NightfallPredator.java deleted file mode 100644 index 275b43fe3cb..00000000000 --- a/Mage.Sets/src/mage/cards/n/NightfallPredator.java +++ /dev/null @@ -1,57 +0,0 @@ -package mage.cards.n; - -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.common.WerewolfBackTriggeredAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.FightTargetSourceEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.target.common.TargetCreaturePermanent; - -import java.util.UUID; - -/** - * @author North - */ -public final class NightfallPredator extends CardImpl { - - public NightfallPredator(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - this.subtype.add(SubType.WEREWOLF); - - this.color.setGreen(true); - this.power = new MageInt(4); - this.toughness = new MageInt(4); - - // this card is the second face of double-faced card - this.nightCard = true; - - // {R}, {tap}: Nightfall Predator fights target creature. - Ability activatedAbility = new SimpleActivatedAbility( - new FightTargetSourceEffect().setText( - "{this} fights target creature. " + - "(Each deals damage equal to its power to the other.)"), - new ManaCostsImpl<>("{R}") - ); - activatedAbility.addCost(new TapSourceCost()); - activatedAbility.addTarget(new TargetCreaturePermanent()); - this.addAbility(activatedAbility); - - // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Nightfall Predator. - this.addAbility(new WerewolfBackTriggeredAbility()); - } - - private NightfallPredator(final NightfallPredator card) { - super(card); - } - - @Override - public NightfallPredator copy() { - return new NightfallPredator(this); - } -} diff --git a/Mage.Sets/src/mage/sets/FinalFantasy.java b/Mage.Sets/src/mage/sets/FinalFantasy.java index 1015f978a04..911bbdb5bf2 100644 --- a/Mage.Sets/src/mage/sets/FinalFantasy.java +++ b/Mage.Sets/src/mage/sets/FinalFantasy.java @@ -56,10 +56,6 @@ public final class FinalFantasy extends ExpansionSet { cards.add(new SetCardInfo("Astrologian's Planisphere", 46, Rarity.RARE, mage.cards.a.AstrologiansPlanisphere.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Astrologian's Planisphere", 581, Rarity.RARE, mage.cards.a.AstrologiansPlanisphere.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Auron's Inspiration", 8, Rarity.UNCOMMON, mage.cards.a.AuronsInspiration.class)); - cards.add(new SetCardInfo("Bahamut, Warden of Light", 16, Rarity.RARE, mage.cards.b.BahamutWardenOfLight.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Bahamut, Warden of Light", 376, Rarity.RARE, mage.cards.b.BahamutWardenOfLight.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Bahamut, Warden of Light", 428, Rarity.RARE, mage.cards.b.BahamutWardenOfLight.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Bahamut, Warden of Light", 521, Rarity.RARE, mage.cards.b.BahamutWardenOfLight.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Balamb Garden, SeeD Academy", 272, Rarity.RARE, mage.cards.b.BalambGardenSeeDAcademy.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Balamb Garden, SeeD Academy", 354, Rarity.RARE, mage.cards.b.BalambGardenSeeDAcademy.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Balamb T-Rexaur", 173, Rarity.COMMON, mage.cards.b.BalambTRexaur.class)); diff --git a/Mage.Sets/src/mage/sets/FromTheVaultTransform.java b/Mage.Sets/src/mage/sets/FromTheVaultTransform.java index 05dec302c0a..af0f4ecc328 100644 --- a/Mage.Sets/src/mage/sets/FromTheVaultTransform.java +++ b/Mage.Sets/src/mage/sets/FromTheVaultTransform.java @@ -28,7 +28,6 @@ public final class FromTheVaultTransform extends ExpansionSet { cards.add(new SetCardInfo("Brisela, Voice of Nightmares", "5b", Rarity.MYTHIC, mage.cards.b.BriselaVoiceOfNightmares.class)); cards.add(new SetCardInfo("Chandra, Fire of Kaladesh", 6, Rarity.MYTHIC, mage.cards.c.ChandraFireOfKaladesh.class)); cards.add(new SetCardInfo("Delver of Secrets", 7, Rarity.MYTHIC, mage.cards.d.DelverOfSecrets.class)); - cards.add(new SetCardInfo("Insectile Aberration", 7, Rarity.MYTHIC, mage.cards.i.InsectileAberration.class)); cards.add(new SetCardInfo("Elbrus, the Binding Blade", 8, Rarity.MYTHIC, mage.cards.e.ElbrusTheBindingBlade.class)); cards.add(new SetCardInfo("Withengar Unbound", 8, Rarity.MYTHIC, mage.cards.w.WithengarUnbound.class)); cards.add(new SetCardInfo("Garruk Relentless", 9, Rarity.MYTHIC, mage.cards.g.GarrukRelentless.class)); diff --git a/Mage.Sets/src/mage/sets/Innistrad.java b/Mage.Sets/src/mage/sets/Innistrad.java index 39ce4a5acb0..a37d00cdd8c 100644 --- a/Mage.Sets/src/mage/sets/Innistrad.java +++ b/Mage.Sets/src/mage/sets/Innistrad.java @@ -158,7 +158,6 @@ public final class Innistrad extends ExpansionSet { cards.add(new SetCardInfo("Hysterical Blindness", 59, Rarity.COMMON, mage.cards.h.HystericalBlindness.class)); cards.add(new SetCardInfo("Infernal Plunge", 148, Rarity.COMMON, mage.cards.i.InfernalPlunge.class)); cards.add(new SetCardInfo("Inquisitor's Flail", 227, Rarity.UNCOMMON, mage.cards.i.InquisitorsFlail.class)); - cards.add(new SetCardInfo("Insectile Aberration", 51, Rarity.COMMON, mage.cards.i.InsectileAberration.class)); cards.add(new SetCardInfo("Instigator Gang", 149, Rarity.RARE, mage.cards.i.InstigatorGang.class)); cards.add(new SetCardInfo("Intangible Virtue", 19, Rarity.UNCOMMON, mage.cards.i.IntangibleVirtue.class)); cards.add(new SetCardInfo("Into the Maw of Hell", 150, Rarity.UNCOMMON, mage.cards.i.IntoTheMawOfHell.class)); @@ -215,7 +214,6 @@ public final class Innistrad extends ExpansionSet { cards.add(new SetCardInfo("Night Revelers", 153, Rarity.COMMON, mage.cards.n.NightRevelers.class)); cards.add(new SetCardInfo("Night Terrors", 111, Rarity.COMMON, mage.cards.n.NightTerrors.class)); cards.add(new SetCardInfo("Nightbird's Clutches", 154, Rarity.COMMON, mage.cards.n.NightbirdsClutches.class)); - cards.add(new SetCardInfo("Nightfall Predator", 176, Rarity.RARE, mage.cards.n.NightfallPredator.class)); cards.add(new SetCardInfo("Olivia Voldaren", 215, Rarity.MYTHIC, mage.cards.o.OliviaVoldaren.class)); cards.add(new SetCardInfo("One-Eyed Scarecrow", 230, Rarity.COMMON, mage.cards.o.OneEyedScarecrow.class)); cards.add(new SetCardInfo("Orchard Spirit", 198, Rarity.COMMON, mage.cards.o.OrchardSpirit.class)); diff --git a/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java b/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java index 379480897b0..215de75cfc4 100644 --- a/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java +++ b/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java @@ -117,7 +117,6 @@ public final class InnistradCrimsonVow extends ExpansionSet { cards.add(new SetCardInfo("Cipherbound Spirit", 79, Rarity.UNCOMMON, mage.cards.c.CipherboundSpirit.class)); cards.add(new SetCardInfo("Circle of Confinement", 329, Rarity.UNCOMMON, mage.cards.c.CircleOfConfinement.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Circle of Confinement", 7, Rarity.UNCOMMON, mage.cards.c.CircleOfConfinement.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Clever Distraction", 9, Rarity.UNCOMMON, mage.cards.c.CleverDistraction.class)); cards.add(new SetCardInfo("Cloaked Cadet", 192, Rarity.UNCOMMON, mage.cards.c.CloakedCadet.class)); cards.add(new SetCardInfo("Cobbled Lancer", 52, Rarity.UNCOMMON, mage.cards.c.CobbledLancer.class)); cards.add(new SetCardInfo("Concealing Curtains", 101, Rarity.RARE, mage.cards.c.ConcealingCurtains.class, NON_FULL_USE_VARIOUS)); @@ -142,7 +141,6 @@ public final class InnistradCrimsonVow extends ExpansionSet { cards.add(new SetCardInfo("Deathcap Glade", 281, Rarity.RARE, mage.cards.d.DeathcapGlade.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Demonic Bargain", 103, Rarity.RARE, mage.cards.d.DemonicBargain.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Demonic Bargain", 368, Rarity.RARE, mage.cards.d.DemonicBargain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Depraved Harvester", 104, Rarity.COMMON, mage.cards.d.DepravedHarvester.class)); cards.add(new SetCardInfo("Desperate Farmer", 104, Rarity.COMMON, mage.cards.d.DesperateFarmer.class)); cards.add(new SetCardInfo("Dig Up", 197, Rarity.RARE, mage.cards.d.DigUp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dig Up", 387, Rarity.RARE, mage.cards.d.DigUp.class, NON_FULL_USE_VARIOUS)); @@ -158,8 +156,6 @@ public final class InnistradCrimsonVow extends ExpansionSet { cards.add(new SetCardInfo("Dominating Vampire", 407, Rarity.RARE, mage.cards.d.DominatingVampire.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Doomed Dissenter", 106, Rarity.COMMON, mage.cards.d.DoomedDissenter.class)); cards.add(new SetCardInfo("Dormant Grove", 198, Rarity.UNCOMMON, mage.cards.d.DormantGrove.class)); - cards.add(new SetCardInfo("Dorothea's Retribution", 235, Rarity.RARE, mage.cards.d.DorotheasRetribution.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Dorothea's Retribution", 322, Rarity.RARE, mage.cards.d.DorotheasRetribution.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dorothea, Vengeful Victim", 235, Rarity.RARE, mage.cards.d.DorotheaVengefulVictim.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dorothea, Vengeful Victim", 322, Rarity.RARE, mage.cards.d.DorotheaVengefulVictim.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dread Fugue", 107, Rarity.UNCOMMON, mage.cards.d.DreadFugue.class)); @@ -170,7 +166,6 @@ public final class InnistradCrimsonVow extends ExpansionSet { cards.add(new SetCardInfo("Dreamroot Cascade", 282, Rarity.RARE, mage.cards.d.DreamrootCascade.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dreamshackle Geist", 358, Rarity.RARE, mage.cards.d.DreamshackleGeist.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dreamshackle Geist", 58, Rarity.RARE, mage.cards.d.DreamshackleGeist.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Drogskol Armaments", 10, Rarity.COMMON, mage.cards.d.DrogskolArmaments.class)); cards.add(new SetCardInfo("Drogskol Infantry", 10, Rarity.COMMON, mage.cards.d.DrogskolInfantry.class)); cards.add(new SetCardInfo("Dying to Serve", 109, Rarity.RARE, mage.cards.d.DyingToServe.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dying to Serve", 370, Rarity.RARE, mage.cards.d.DyingToServe.class, NON_FULL_USE_VARIOUS)); @@ -221,7 +216,6 @@ public final class InnistradCrimsonVow extends ExpansionSet { cards.add(new SetCardInfo("Glorious Sunrise", 388, Rarity.RARE, mage.cards.g.GloriousSunrise.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Gluttonous Guest", 114, Rarity.COMMON, mage.cards.g.GluttonousGuest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Gluttonous Guest", 292, Rarity.COMMON, mage.cards.g.GluttonousGuest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Gnarled Grovestrider", 198, Rarity.UNCOMMON, mage.cards.g.GnarledGrovestrider.class)); cards.add(new SetCardInfo("Graf Reaver", 115, Rarity.RARE, mage.cards.g.GrafReaver.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Graf Reaver", 371, Rarity.RARE, mage.cards.g.GrafReaver.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Grisly Ritual", 116, Rarity.COMMON, mage.cards.g.GrislyRitual.class)); diff --git a/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java b/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java index 5165cfbd0be..f91cf129ef5 100644 --- a/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java +++ b/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java @@ -130,7 +130,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Circle of Confinement", 274, Rarity.UNCOMMON, mage.cards.c.CircleOfConfinement.class)); cards.add(new SetCardInfo("Clarion Cathars", 14, Rarity.COMMON, mage.cards.c.ClarionCathars.class)); cards.add(new SetCardInfo("Clear Shot", 176, Rarity.UNCOMMON, mage.cards.c.ClearShot.class)); - cards.add(new SetCardInfo("Clever Distraction", 276, Rarity.UNCOMMON, mage.cards.c.CleverDistraction.class)); cards.add(new SetCardInfo("Cloaked Cadet", 459, Rarity.UNCOMMON, mage.cards.c.CloakedCadet.class)); cards.add(new SetCardInfo("Cobbled Lancer", 319, Rarity.UNCOMMON, mage.cards.c.CobbledLancer.class)); cards.add(new SetCardInfo("Component Collector", 43, Rarity.COMMON, mage.cards.c.ComponentCollector.class)); @@ -164,17 +163,13 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Dawnhart Rejuvenator", 180, Rarity.COMMON, mage.cards.d.DawnhartRejuvenator.class)); cards.add(new SetCardInfo("Dawnhart Wardens", 216, Rarity.UNCOMMON, mage.cards.d.DawnhartWardens.class)); cards.add(new SetCardInfo("Daybreak Combatants", 420, Rarity.COMMON, mage.cards.d.DaybreakCombatants.class)); - cards.add(new SetCardInfo("Deathbonnet Hulk", 181, Rarity.UNCOMMON, mage.cards.d.DeathbonnetHulk.class)); cards.add(new SetCardInfo("Deathbonnet Sprout", 181, Rarity.UNCOMMON, mage.cards.d.DeathbonnetSprout.class)); cards.add(new SetCardInfo("Deathcap Glade", 528, Rarity.RARE, mage.cards.d.DeathcapGlade.class)); cards.add(new SetCardInfo("Defend the Celestus", 182, Rarity.UNCOMMON, mage.cards.d.DefendTheCelestus.class)); cards.add(new SetCardInfo("Defenestrate", 95, Rarity.COMMON, mage.cards.d.Defenestrate.class)); cards.add(new SetCardInfo("Delver of Secrets", 47, Rarity.UNCOMMON, mage.cards.d.DelverOfSecrets.class)); cards.add(new SetCardInfo("Demonic Bargain", 370, Rarity.RARE, mage.cards.d.DemonicBargain.class)); - cards.add(new SetCardInfo("Dennick, Pious Apparition", 217, Rarity.RARE, mage.cards.d.DennickPiousApparition.class)); cards.add(new SetCardInfo("Dennick, Pious Apprentice", 217, Rarity.RARE, mage.cards.d.DennickPiousApprentice.class)); - cards.add(new SetCardInfo("Departed Soulkeeper", 218, Rarity.UNCOMMON, mage.cards.d.DepartedSoulkeeper.class)); - cards.add(new SetCardInfo("Depraved Harvester", 371, Rarity.COMMON, mage.cards.d.DepravedHarvester.class)); cards.add(new SetCardInfo("Deserted Beach", 260, Rarity.RARE, mage.cards.d.DesertedBeach.class)); cards.add(new SetCardInfo("Desperate Farmer", 371, Rarity.COMMON, mage.cards.d.DesperateFarmer.class)); cards.add(new SetCardInfo("Devious Cover-Up", 48, Rarity.COMMON, mage.cards.d.DeviousCoverUp.class)); @@ -193,7 +188,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Dominating Vampire", 421, Rarity.RARE, mage.cards.d.DominatingVampire.class)); cards.add(new SetCardInfo("Doomed Dissenter", 373, Rarity.COMMON, mage.cards.d.DoomedDissenter.class)); cards.add(new SetCardInfo("Dormant Grove", 465, Rarity.UNCOMMON, mage.cards.d.DormantGrove.class)); - cards.add(new SetCardInfo("Dorothea's Retribution", 502, Rarity.RARE, mage.cards.d.DorotheasRetribution.class)); cards.add(new SetCardInfo("Dorothea, Vengeful Victim", 502, Rarity.RARE, mage.cards.d.DorotheaVengefulVictim.class)); cards.add(new SetCardInfo("Dread Fugue", 374, Rarity.UNCOMMON, mage.cards.d.DreadFugue.class)); cards.add(new SetCardInfo("Dreadfeast Demon", 375, Rarity.RARE, mage.cards.d.DreadfeastDemon.class)); @@ -201,7 +195,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Dreadlight Monstrosity", 324, Rarity.COMMON, mage.cards.d.DreadlightMonstrosity.class)); cards.add(new SetCardInfo("Dreamroot Cascade", 529, Rarity.RARE, mage.cards.d.DreamrootCascade.class)); cards.add(new SetCardInfo("Dreamshackle Geist", 325, Rarity.RARE, mage.cards.d.DreamshackleGeist.class)); - cards.add(new SetCardInfo("Drogskol Armaments", 277, Rarity.COMMON, mage.cards.d.DrogskolArmaments.class)); cards.add(new SetCardInfo("Drogskol Infantry", 277, Rarity.COMMON, mage.cards.d.DrogskolInfantry.class)); cards.add(new SetCardInfo("Drownyard Amalgam", 50, Rarity.COMMON, mage.cards.d.DrownyardAmalgam.class)); cards.add(new SetCardInfo("Dryad's Revival", 183, Rarity.UNCOMMON, mage.cards.d.DryadsRevival.class)); @@ -273,7 +266,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Gisa, Glorious Resurrector", 103, Rarity.RARE, mage.cards.g.GisaGloriousResurrector.class)); cards.add(new SetCardInfo("Glorious Sunrise", 467, Rarity.RARE, mage.cards.g.GloriousSunrise.class)); cards.add(new SetCardInfo("Gluttonous Guest", 381, Rarity.COMMON, mage.cards.g.GluttonousGuest.class)); - cards.add(new SetCardInfo("Gnarled Grovestrider", 465, Rarity.UNCOMMON, mage.cards.g.GnarledGrovestrider.class)); cards.add(new SetCardInfo("Graf Reaver", 382, Rarity.RARE, mage.cards.g.GrafReaver.class)); cards.add(new SetCardInfo("Grafted Identity", 57, Rarity.RARE, mage.cards.g.GraftedIdentity.class)); cards.add(new SetCardInfo("Graveyard Glutton", 104, Rarity.RARE, mage.cards.g.GraveyardGlutton.class)); @@ -326,7 +318,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Infested Werewolf", 473, Rarity.UNCOMMON, mage.cards.i.InfestedWerewolf.class)); cards.add(new SetCardInfo("Inherited Fiend", 105, Rarity.UNCOMMON, mage.cards.i.InheritedFiend.class)); cards.add(new SetCardInfo("Innocent Traveler", 388, Rarity.UNCOMMON, mage.cards.i.InnocentTraveler.class)); - cards.add(new SetCardInfo("Insectile Aberration", 47, Rarity.UNCOMMON, mage.cards.i.InsectileAberration.class)); cards.add(new SetCardInfo("Inspired Idea", 331, Rarity.RARE, mage.cards.i.InspiredIdea.class)); cards.add(new SetCardInfo("Into the Night", 430, Rarity.UNCOMMON, mage.cards.i.IntoTheNight.class)); cards.add(new SetCardInfo("Intrepid Adversary", 25, Rarity.MYTHIC, mage.cards.i.IntrepidAdversary.class)); diff --git a/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java b/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java index d96e94aacc7..3a27f33eb76 100644 --- a/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java +++ b/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java @@ -137,16 +137,12 @@ public final class InnistradMidnightHunt extends ExpansionSet { cards.add(new SetCardInfo("Dawnhart Rejuvenator", 301, Rarity.COMMON, mage.cards.d.DawnhartRejuvenator.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dawnhart Wardens", 216, Rarity.UNCOMMON, mage.cards.d.DawnhartWardens.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dawnhart Wardens", 308, Rarity.UNCOMMON, mage.cards.d.DawnhartWardens.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Deathbonnet Hulk", 181, Rarity.UNCOMMON, mage.cards.d.DeathbonnetHulk.class)); cards.add(new SetCardInfo("Deathbonnet Sprout", 181, Rarity.UNCOMMON, mage.cards.d.DeathbonnetSprout.class)); cards.add(new SetCardInfo("Defend the Celestus", 182, Rarity.UNCOMMON, mage.cards.d.DefendTheCelestus.class)); cards.add(new SetCardInfo("Defenestrate", 95, Rarity.COMMON, mage.cards.d.Defenestrate.class)); cards.add(new SetCardInfo("Delver of Secrets", 47, Rarity.UNCOMMON, mage.cards.d.DelverOfSecrets.class)); - cards.add(new SetCardInfo("Dennick, Pious Apparition", 217, Rarity.RARE, mage.cards.d.DennickPiousApparition.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Dennick, Pious Apparition", 317, Rarity.RARE, mage.cards.d.DennickPiousApparition.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dennick, Pious Apprentice", 217, Rarity.RARE, mage.cards.d.DennickPiousApprentice.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dennick, Pious Apprentice", 317, Rarity.RARE, mage.cards.d.DennickPiousApprentice.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Departed Soulkeeper", 218, Rarity.UNCOMMON, mage.cards.d.DepartedSoulkeeper.class)); cards.add(new SetCardInfo("Deserted Beach", 260, Rarity.RARE, mage.cards.d.DesertedBeach.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Deserted Beach", 281, Rarity.RARE, mage.cards.d.DesertedBeach.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Devious Cover-Up", 48, Rarity.COMMON, mage.cards.d.DeviousCoverUp.class)); @@ -245,7 +241,6 @@ public final class InnistradMidnightHunt extends ExpansionSet { cards.add(new SetCardInfo("Infernal Grasp", 107, Rarity.UNCOMMON, mage.cards.i.InfernalGrasp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Infernal Grasp", 389, Rarity.UNCOMMON, mage.cards.i.InfernalGrasp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Inherited Fiend", 105, Rarity.UNCOMMON, mage.cards.i.InheritedFiend.class)); - cards.add(new SetCardInfo("Insectile Aberration", 47, Rarity.UNCOMMON, mage.cards.i.InsectileAberration.class)); cards.add(new SetCardInfo("Intrepid Adversary", 25, Rarity.MYTHIC, mage.cards.i.IntrepidAdversary.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Intrepid Adversary", 329, Rarity.MYTHIC, mage.cards.i.IntrepidAdversary.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Island", 270, Rarity.LAND, mage.cards.basiclands.Island.class, FULL_ART_BFZ_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/InnistradRemastered.java b/Mage.Sets/src/mage/sets/InnistradRemastered.java index cccbfe53bc6..f77344b4e22 100644 --- a/Mage.Sets/src/mage/sets/InnistradRemastered.java +++ b/Mage.Sets/src/mage/sets/InnistradRemastered.java @@ -163,7 +163,6 @@ public class InnistradRemastered extends ExpansionSet { cards.add(new SetCardInfo("Demonic Taskmaster", 377, Rarity.UNCOMMON, mage.cards.d.DemonicTaskmaster.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Demonmail Hauberk", 261, Rarity.UNCOMMON, mage.cards.d.DemonmailHauberk.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Demonmail Hauberk", 442, Rarity.UNCOMMON, mage.cards.d.DemonmailHauberk.class, RETRO_ART_USE_VARIOUS)); - cards.add(new SetCardInfo("Depraved Harvester", 105, Rarity.COMMON, mage.cards.d.DepravedHarvester.class)); cards.add(new SetCardInfo("Deranged Assistant", 61, Rarity.COMMON, mage.cards.d.DerangedAssistant.class)); cards.add(new SetCardInfo("Deserted Beach", 276, Rarity.RARE, mage.cards.d.DesertedBeach.class)); cards.add(new SetCardInfo("Desperate Farmer", 105, Rarity.COMMON, mage.cards.d.DesperateFarmer.class)); @@ -295,8 +294,6 @@ public class InnistradRemastered extends ExpansionSet { cards.add(new SetCardInfo("Infernal Grasp", 119, Rarity.UNCOMMON, mage.cards.i.InfernalGrasp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Infernal Grasp", 310, Rarity.UNCOMMON, mage.cards.i.InfernalGrasp.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Infernal Grasp", 385, Rarity.UNCOMMON, mage.cards.i.InfernalGrasp.class,RETRO_ART_USE_VARIOUS)); - cards.add(new SetCardInfo("Insectile Aberration", 457, Rarity.COMMON, mage.cards.i.InsectileAberration.class, RETRO_ART_USE_VARIOUS)); - cards.add(new SetCardInfo("Insectile Aberration", 60, Rarity.COMMON, mage.cards.i.InsectileAberration.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Inspiring Captain", 28, Rarity.COMMON, mage.cards.i.InspiringCaptain.class)); cards.add(new SetCardInfo("Intangible Virtue", 29, Rarity.UNCOMMON, mage.cards.i.IntangibleVirtue.class)); cards.add(new SetCardInfo("Intrepid Provisioner", 205, Rarity.COMMON, mage.cards.i.IntrepidProvisioner.class)); @@ -310,9 +307,6 @@ public class InnistradRemastered extends ExpansionSet { cards.add(new SetCardInfo("Join the Dance", 432, Rarity.UNCOMMON, mage.cards.j.JoinTheDance.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Killing Wave", 121, Rarity.UNCOMMON, mage.cards.k.KillingWave.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Killing Wave", 386, Rarity.UNCOMMON, mage.cards.k.KillingWave.class,RETRO_ART_USE_VARIOUS)); - cards.add(new SetCardInfo("Krallenhorde Howler", 193, Rarity.UNCOMMON, mage.cards.k.KrallenhordeHowler.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Krallenhorde Howler", 323, Rarity.UNCOMMON, mage.cards.k.KrallenhordeHowler.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Krallenhorde Howler", 467, Rarity.UNCOMMON, mage.cards.k.KrallenhordeHowler.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Kruin Outlaw", 161, Rarity.RARE, mage.cards.k.KruinOutlaw.class)); cards.add(new SetCardInfo("Laboratory Maniac", 304, Rarity.UNCOMMON, mage.cards.l.LaboratoryManiac.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Laboratory Maniac", 359, Rarity.UNCOMMON, mage.cards.l.LaboratoryManiac.class, RETRO_ART_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/Ixalan.java b/Mage.Sets/src/mage/sets/Ixalan.java index 45db997511a..ac805618e76 100644 --- a/Mage.Sets/src/mage/sets/Ixalan.java +++ b/Mage.Sets/src/mage/sets/Ixalan.java @@ -178,7 +178,6 @@ public final class Ixalan extends ExpansionSet { cards.add(new SetCardInfo("Lightning Strike", 149, Rarity.UNCOMMON, mage.cards.l.LightningStrike.class)); cards.add(new SetCardInfo("Lookout's Dispersal", 62, Rarity.UNCOMMON, mage.cards.l.LookoutsDispersal.class)); cards.add(new SetCardInfo("Looming Altisaur", 23, Rarity.COMMON, mage.cards.l.LoomingAltisaur.class)); - cards.add(new SetCardInfo("Lost Vale", 235, Rarity.RARE, mage.cards.l.LostVale.class)); cards.add(new SetCardInfo("Lurking Chupacabra", 111, Rarity.UNCOMMON, mage.cards.l.LurkingChupacabra.class)); cards.add(new SetCardInfo("Makeshift Munitions", 151, Rarity.UNCOMMON, mage.cards.m.MakeshiftMunitions.class)); cards.add(new SetCardInfo("Marauding Looter", 225, Rarity.UNCOMMON, mage.cards.m.MaraudingLooter.class)); diff --git a/Mage.Sets/src/mage/sets/IxalanPromos.java b/Mage.Sets/src/mage/sets/IxalanPromos.java index 0a8b4ce8bb8..0c55b5ea44a 100644 --- a/Mage.Sets/src/mage/sets/IxalanPromos.java +++ b/Mage.Sets/src/mage/sets/IxalanPromos.java @@ -81,7 +81,6 @@ public class IxalanPromos extends ExpansionSet { cards.add(new SetCardInfo("Kopala, Warden of Waves", "61p", Rarity.RARE, mage.cards.k.KopalaWardenOfWaves.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Kopala, Warden of Waves", "61s", Rarity.RARE, mage.cards.k.KopalaWardenOfWaves.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Legion's Landing", "22s", Rarity.RARE, mage.cards.l.LegionsLanding.class)); - cards.add(new SetCardInfo("Lost Vale", "235s", Rarity.RARE, mage.cards.l.LostVale.class)); cards.add(new SetCardInfo("Mavren Fein, Dusk Apostle", "24p", Rarity.RARE, mage.cards.m.MavrenFeinDuskApostle.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mavren Fein, Dusk Apostle", "24s", Rarity.RARE, mage.cards.m.MavrenFeinDuskApostle.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Old-Growth Dryads", "199s", Rarity.RARE, mage.cards.o.OldGrowthDryads.class)); diff --git a/Mage.Sets/src/mage/sets/SecretLairDrop.java b/Mage.Sets/src/mage/sets/SecretLairDrop.java index 7829f8faafa..44f8823b6ac 100644 --- a/Mage.Sets/src/mage/sets/SecretLairDrop.java +++ b/Mage.Sets/src/mage/sets/SecretLairDrop.java @@ -724,7 +724,6 @@ public class SecretLairDrop extends ExpansionSet { cards.add(new SetCardInfo("Thought-Knot Seer", 720, Rarity.RARE, mage.cards.t.ThoughtKnotSeer.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Diabolic Tutor", 721, Rarity.RARE, mage.cards.d.DiabolicTutor.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Delver of Secrets", 722, Rarity.RARE, mage.cards.d.DelverOfSecrets.class)); - cards.add(new SetCardInfo("Insectile Aberration", 722, Rarity.RARE, mage.cards.i.InsectileAberration.class)); cards.add(new SetCardInfo("Brainstorm", 723, Rarity.RARE, mage.cards.b.Brainstorm.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Lightning Strike", 724, Rarity.RARE, mage.cards.l.LightningStrike.class)); cards.add(new SetCardInfo("Fleshbag Marauder", 725, Rarity.RARE, mage.cards.f.FleshbagMarauder.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java b/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java index e62eef15ef5..9ab1474d85b 100644 --- a/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java +++ b/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java @@ -55,7 +55,6 @@ public final class ShadowsOverInnistrad extends ExpansionSet { cards.add(new SetCardInfo("Avacyn's Judgment", 145, Rarity.RARE, mage.cards.a.AvacynsJudgment.class)); cards.add(new SetCardInfo("Avacynian Missionaries", 6, Rarity.UNCOMMON, mage.cards.a.AvacynianMissionaries.class)); cards.add(new SetCardInfo("Awoken Horror", 92, Rarity.RARE, mage.cards.a.AwokenHorror.class)); - cards.add(new SetCardInfo("Bearer of Overwhelming Truths", 54, Rarity.UNCOMMON, mage.cards.b.BearerOfOverwhelmingTruths.class)); cards.add(new SetCardInfo("Behind the Scenes", 100, Rarity.UNCOMMON, mage.cards.b.BehindTheScenes.class)); cards.add(new SetCardInfo("Behold the Beyond", 101, Rarity.MYTHIC, mage.cards.b.BeholdTheBeyond.class)); cards.add(new SetCardInfo("Biting Rain", 102, Rarity.UNCOMMON, mage.cards.b.BitingRain.class)); @@ -189,7 +188,6 @@ public final class ShadowsOverInnistrad extends ExpansionSet { cards.add(new SetCardInfo("Kessig Dire Swine", 214, Rarity.COMMON, mage.cards.k.KessigDireSwine.class)); cards.add(new SetCardInfo("Kessig Forgemaster", 169, Rarity.UNCOMMON, mage.cards.k.KessigForgemaster.class)); cards.add(new SetCardInfo("Kindly Stranger", 119, Rarity.UNCOMMON, mage.cards.k.KindlyStranger.class)); - cards.add(new SetCardInfo("Krallenhorde Howler", 203, Rarity.UNCOMMON, mage.cards.k.KrallenhordeHowler.class)); cards.add(new SetCardInfo("Lambholt Pacifist", 215, Rarity.UNCOMMON, mage.cards.l.LambholtPacifist.class)); cards.add(new SetCardInfo("Lamplighter of Selhoff", 72, Rarity.COMMON, mage.cards.l.LamplighterOfSelhoff.class)); cards.add(new SetCardInfo("Lightning Axe", 170, Rarity.UNCOMMON, mage.cards.l.LightningAxe.class)); diff --git a/Mage.Sets/src/mage/sets/ShadowsOverInnistradRemastered.java b/Mage.Sets/src/mage/sets/ShadowsOverInnistradRemastered.java index c649fa2fb9f..6cdd42e309e 100644 --- a/Mage.Sets/src/mage/sets/ShadowsOverInnistradRemastered.java +++ b/Mage.Sets/src/mage/sets/ShadowsOverInnistradRemastered.java @@ -43,7 +43,6 @@ public class ShadowsOverInnistradRemastered extends ExpansionSet { cards.add(new SetCardInfo("Assembled Alphas", 141, Rarity.RARE, mage.cards.a.AssembledAlphas.class)); cards.add(new SetCardInfo("Avacyn's Judgment", 142, Rarity.RARE, mage.cards.a.AvacynsJudgment.class)); cards.add(new SetCardInfo("Awoken Horror", 95, Rarity.RARE, mage.cards.a.AwokenHorror.class)); - cards.add(new SetCardInfo("Bearer of Overwhelming Truths", 59, Rarity.UNCOMMON, mage.cards.b.BearerOfOverwhelmingTruths.class)); cards.add(new SetCardInfo("Bedlam Reveler", 143, Rarity.RARE, mage.cards.b.BedlamReveler.class)); cards.add(new SetCardInfo("Biting Rain", 99, Rarity.UNCOMMON, mage.cards.b.BitingRain.class)); cards.add(new SetCardInfo("Blessed Alliance", 14, Rarity.UNCOMMON, mage.cards.b.BlessedAlliance.class)); @@ -193,7 +192,6 @@ public class ShadowsOverInnistradRemastered extends ExpansionSet { cards.add(new SetCardInfo("Jace's Scrutiny", 78, Rarity.COMMON, mage.cards.j.JacesScrutiny.class)); cards.add(new SetCardInfo("Jace, Unraveler of Secrets", 77, Rarity.MYTHIC, mage.cards.j.JaceUnravelerOfSecrets.class)); cards.add(new SetCardInfo("Kindly Stranger", 107, Rarity.UNCOMMON, mage.cards.k.KindlyStranger.class)); - cards.add(new SetCardInfo("Krallenhorde Howler", 194, Rarity.UNCOMMON, mage.cards.k.KrallenhordeHowler.class)); cards.add(new SetCardInfo("Laboratory Brute", 79, Rarity.COMMON, mage.cards.l.LaboratoryBrute.class)); cards.add(new SetCardInfo("Lightning Axe", 166, Rarity.UNCOMMON, mage.cards.l.LightningAxe.class)); cards.add(new SetCardInfo("Liliana's Elite", 120, Rarity.COMMON, mage.cards.l.LilianasElite.class)); diff --git a/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java b/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java index a8e3a48c9ed..d2c77c86f58 100644 --- a/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java +++ b/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java @@ -149,8 +149,6 @@ public final class TheLostCavernsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Didact Echo", 53, Rarity.COMMON, mage.cards.d.DidactEcho.class)); cards.add(new SetCardInfo("Digsite Conservator", 252, Rarity.UNCOMMON, mage.cards.d.DigsiteConservator.class)); cards.add(new SetCardInfo("Dinotomaton", 144, Rarity.COMMON, mage.cards.d.Dinotomaton.class)); - cards.add(new SetCardInfo("Dire Blunderbuss", 145, Rarity.RARE, mage.cards.d.DireBlunderbuss.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Dire Blunderbuss", 374, Rarity.RARE, mage.cards.d.DireBlunderbuss.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dire Flail", 145, Rarity.RARE, mage.cards.d.DireFlail.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dire Flail", 374, Rarity.RARE, mage.cards.d.DireFlail.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Disruptor Wanderglyph", 253, Rarity.COMMON, mage.cards.d.DisruptorWanderglyph.class)); @@ -180,7 +178,6 @@ public final class TheLostCavernsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Frilled Cave-Wurm", 57, Rarity.COMMON, mage.cards.f.FrilledCaveWurm.class)); cards.add(new SetCardInfo("Fungal Fortitude", 106, Rarity.COMMON, mage.cards.f.FungalFortitude.class)); cards.add(new SetCardInfo("Gargantuan Leech", 107, Rarity.UNCOMMON, mage.cards.g.GargantuanLeech.class)); - cards.add(new SetCardInfo("Geode Grotto", 146, Rarity.UNCOMMON, mage.cards.g.GeodeGrotto.class)); cards.add(new SetCardInfo("Geological Appraiser", 150, Rarity.UNCOMMON, mage.cards.g.GeologicalAppraiser.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Geological Appraiser", 407, Rarity.UNCOMMON, mage.cards.g.GeologicalAppraiser.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Get Lost", 14, Rarity.RARE, mage.cards.g.GetLost.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/XLNTreasureChest.java b/Mage.Sets/src/mage/sets/XLNTreasureChest.java index c8e572008dc..d4268f37d84 100644 --- a/Mage.Sets/src/mage/sets/XLNTreasureChest.java +++ b/Mage.Sets/src/mage/sets/XLNTreasureChest.java @@ -28,7 +28,6 @@ public class XLNTreasureChest extends ExpansionSet { cards.add(new SetCardInfo("Growing Rites of Itlimoc", 191, Rarity.RARE, mage.cards.g.GrowingRitesOfItlimoc.class)); cards.add(new SetCardInfo("Itlimoc, Cradle of the Sun", 191, Rarity.RARE, mage.cards.i.ItlimocCradleOfTheSun.class)); cards.add(new SetCardInfo("Legion's Landing", 22, Rarity.RARE, mage.cards.l.LegionsLanding.class)); - cards.add(new SetCardInfo("Lost Vale", 235, Rarity.RARE, mage.cards.l.LostVale.class)); cards.add(new SetCardInfo("Primal Amulet", 243, Rarity.RARE, mage.cards.p.PrimalAmulet.class)); cards.add(new SetCardInfo("Primal Wellspring", 243, Rarity.RARE, mage.cards.p.PrimalWellspring.class)); cards.add(new SetCardInfo("Search for Azcanta", 74, Rarity.RARE, mage.cards.s.SearchForAzcanta.class));