diff --git a/Mage.Sets/src/mage/cards/b/BalambGardenAirborne.java b/Mage.Sets/src/mage/cards/b/BalambGardenAirborne.java deleted file mode 100644 index 7b34006109d..00000000000 --- a/Mage.Sets/src/mage/cards/b/BalambGardenAirborne.java +++ /dev/null @@ -1,48 +0,0 @@ -package mage.cards.b; - -import mage.MageInt; -import mage.abilities.common.AttacksTriggeredAbility; -import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.keyword.CrewAbility; -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 java.util.UUID; - -/** - * @author TheElk801 - */ -public final class BalambGardenAirborne extends CardImpl { - - public BalambGardenAirborne(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, ""); - - this.supertype.add(SuperType.LEGENDARY); - this.subtype.add(SubType.VEHICLE); - this.power = new MageInt(5); - this.toughness = new MageInt(4); - this.nightCard = true; - - // Flying - this.addAbility(FlyingAbility.getInstance()); - - // Whenever Balamb Garden attacks, draw a card. - this.addAbility(new AttacksTriggeredAbility(new DrawCardSourceControllerEffect(1))); - - // Crew 1 - this.addAbility(new CrewAbility(1)); - } - - private BalambGardenAirborne(final BalambGardenAirborne card) { - super(card); - } - - @Override - public BalambGardenAirborne copy() { - return new BalambGardenAirborne(this); - } -} diff --git a/Mage.Sets/src/mage/cards/b/BalambGardenSeeDAcademy.java b/Mage.Sets/src/mage/cards/b/BalambGardenSeeDAcademy.java index 723330f7b88..7c45b3ce32c 100644 --- a/Mage.Sets/src/mage/cards/b/BalambGardenSeeDAcademy.java +++ b/Mage.Sets/src/mage/cards/b/BalambGardenSeeDAcademy.java @@ -1,6 +1,7 @@ package mage.cards.b; import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.EntersBattlefieldTappedAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.CostAdjuster; @@ -8,17 +9,20 @@ import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.InfoEffect; import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.hint.Hint; import mage.abilities.hint.ValueHint; -import mage.abilities.keyword.TransformAbility; +import mage.abilities.keyword.CrewAbility; +import mage.abilities.keyword.FlyingAbility; import mage.abilities.mana.BlueManaAbility; import mage.abilities.mana.GreenManaAbility; -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.filter.FilterPermanent; import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; @@ -30,29 +34,39 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class BalambGardenSeeDAcademy extends CardImpl { +public final class BalambGardenSeeDAcademy extends TransformingDoubleFacedCard { public BalambGardenSeeDAcademy(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); - - this.subtype.add(SubType.TOWN); - this.secondSideCardClazz = mage.cards.b.BalambGardenAirborne.class; + super(ownerId, setInfo, + new SuperType[]{}, new CardType[]{CardType.LAND}, new SubType[]{SubType.TOWN}, "", + "Balamb Garden, Airborne", + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ARTIFACT}, new SubType[]{SubType.VEHICLE}, ""); + this.getRightHalfCard().setPT(5, 4); // This land enters tapped. - this.addAbility(new EntersBattlefieldTappedAbility()); + this.getLeftHalfCard().addAbility(new EntersBattlefieldTappedAbility()); // Add {G} or {U}. - this.addAbility(new GreenManaAbility()); - this.addAbility(new BlueManaAbility()); + this.getLeftHalfCard().addAbility(new GreenManaAbility()); + this.getLeftHalfCard().addAbility(new BlueManaAbility()); // {5}{G}{U}, {T}: Transform this land. This ability costs {1} less to activate for each other Town you control. - this.addAbility(new TransformAbility()); Ability ability = new SimpleActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{5}{G}{U}")); ability.addCost(new TapSourceCost()); ability.addEffect(new InfoEffect("This ability costs {1} less to activate for each other Town you control")); - this.addAbility(ability + this.getLeftHalfCard().addAbility(ability .setCostAdjuster(BalambGardenSeeDAcademyAdjuster.instance) .addHint(BalambGardenSeeDAcademyAdjuster.getHint())); + + // Balamb Garden, Airborne + // Flying + this.getRightHalfCard().addAbility(FlyingAbility.getInstance()); + + // Whenever Balamb Garden attacks, draw a card. + this.getRightHalfCard().addAbility(new AttacksTriggeredAbility(new DrawCardSourceControllerEffect(1))); + + // Crew 1 + this.getRightHalfCard().addAbility(new CrewAbility(1)); } private BalambGardenSeeDAcademy(final BalambGardenSeeDAcademy card) { diff --git a/Mage.Sets/src/mage/cards/b/BallistaWatcher.java b/Mage.Sets/src/mage/cards/b/BallistaWatcher.java index 809f160eda2..3ae2e3066ec 100644 --- a/Mage.Sets/src/mage/cards/b/BallistaWatcher.java +++ b/Mage.Sets/src/mage/cards/b/BallistaWatcher.java @@ -1,16 +1,23 @@ package mage.cards.b; -import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.combat.CantBlockTargetEffect; import mage.abilities.keyword.DayboundAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.NightboundAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; import mage.constants.SubType; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; import mage.target.common.TargetAnyTarget; import java.util.UUID; @@ -18,17 +25,16 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class BallistaWatcher extends CardImpl { +public final class BallistaWatcher extends TransformingDoubleFacedCard { public BallistaWatcher(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{R}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.SOLDIER, SubType.WEREWOLF}, "{2}{R}{R}", + "Ballista Wielder", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "R"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.SOLDIER); - this.subtype.add(SubType.WEREWOLF); - this.power = new MageInt(4); - this.toughness = new MageInt(3); - this.secondSideCardClazz = mage.cards.b.BallistaWielder.class; + // Ballista Watcher + this.getLeftHalfCard().setPT(4, 3); // {2}{R}, {T}: Ballista Watcher deals 1 damage to any target. Ability ability = new SimpleActivatedAbility( @@ -36,10 +42,21 @@ public final class BallistaWatcher extends CardImpl { ); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetAnyTarget()); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); // Daybound - this.addAbility(new DayboundAbility()); + this.getLeftHalfCard().addAbility(new DayboundAbility()); + + // Ballista Wielder + this.getRightHalfCard().setPT(5, 5); + + // {2}{R}: Ballista Wielder deals 1 damage to any target. A creature dealt damage this way can't block this turn. + Ability weilderAbility = new SimpleActivatedAbility(new BallistaWielderEffect(), new ManaCostsImpl<>("{2}{R}")); + weilderAbility.addTarget(new TargetAnyTarget()); + this.getRightHalfCard().addAbility(weilderAbility); + + // Nightbound + this.getRightHalfCard().addAbility(new NightboundAbility()); } private BallistaWatcher(final BallistaWatcher card) { @@ -51,3 +68,34 @@ public final class BallistaWatcher extends CardImpl { return new BallistaWatcher(this); } } + +class BallistaWielderEffect extends OneShotEffect { + + BallistaWielderEffect() { + super(Outcome.Benefit); + staticText = "{this} deals 1 damage to any target. A creature dealt damage this way can't block this turn"; + } + + private BallistaWielderEffect(final BallistaWielderEffect effect) { + super(effect); + } + + @Override + public BallistaWielderEffect copy() { + return new BallistaWielderEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); + if (permanent == null) { + Player player = game.getPlayer(getTargetPointer().getFirst(game, source)); + return player != null && player.damage(1, source, game) > 0; + } + if (permanent.damage(1, source, game) <= 0) { + return false; + } + game.addEffect(new CantBlockTargetEffect(Duration.EndOfTurn), source); + return true; + } +} diff --git a/Mage.Sets/src/mage/cards/b/BallistaWielder.java b/Mage.Sets/src/mage/cards/b/BallistaWielder.java deleted file mode 100644 index 81c2dd0ad50..00000000000 --- a/Mage.Sets/src/mage/cards/b/BallistaWielder.java +++ /dev/null @@ -1,85 +0,0 @@ -package mage.cards.b; - -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.combat.CantBlockTargetEffect; -import mage.abilities.keyword.NightboundAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.SubType; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.common.TargetAnyTarget; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class BallistaWielder extends CardImpl { - - public BallistaWielder(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.WEREWOLF); - this.power = new MageInt(5); - this.toughness = new MageInt(5); - this.color.setRed(true); - this.nightCard = true; - - // {2}{R}: Ballista Wielder deals 1 damage to any target. A creature dealt damage this way can't block this turn. - Ability ability = new SimpleActivatedAbility(new BallistaWielderEffect(), new ManaCostsImpl<>("{2}{R}")); - ability.addTarget(new TargetAnyTarget()); - this.addAbility(ability); - - // Nightbound - this.addAbility(new NightboundAbility()); - } - - private BallistaWielder(final BallistaWielder card) { - super(card); - } - - @Override - public BallistaWielder copy() { - return new BallistaWielder(this); - } -} - -class BallistaWielderEffect extends OneShotEffect { - - BallistaWielderEffect() { - super(Outcome.Benefit); - staticText = "{this} deals 1 damage to any target. A creature dealt damage this way can't block this turn"; - } - - private BallistaWielderEffect(final BallistaWielderEffect effect) { - super(effect); - } - - @Override - public BallistaWielderEffect copy() { - return new BallistaWielderEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); - if (permanent == null) { - Player player = game.getPlayer(getTargetPointer().getFirst(game, source)); - return player != null && player.damage(1, source, game) > 0; - } - if (permanent.damage(1, source, game) <= 0) { - return false; - } - game.addEffect(new CantBlockTargetEffect(Duration.EndOfTurn), source); - return true; - } -} diff --git a/Mage.Sets/src/mage/cards/b/BanebladeScoundrel.java b/Mage.Sets/src/mage/cards/b/BanebladeScoundrel.java index 7645832128f..8615e59e7cf 100644 --- a/Mage.Sets/src/mage/cards/b/BanebladeScoundrel.java +++ b/Mage.Sets/src/mage/cards/b/BanebladeScoundrel.java @@ -1,11 +1,13 @@ package mage.cards.b; -import mage.MageInt; import mage.abilities.common.BecomesBlockedSourceTriggeredAbility; +import mage.abilities.common.DiesCreatureTriggeredAbility; +import mage.abilities.effects.common.LoseLifeTargetControllerEffect; import mage.abilities.effects.common.continuous.BoostAllEffect; import mage.abilities.keyword.DayboundAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.NightboundAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; @@ -17,31 +19,47 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class BanebladeScoundrel extends CardImpl { +public final class BanebladeScoundrel extends TransformingDoubleFacedCard { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature blocking {this}"); static { filter.add(BlockingOrBlockedBySourcePredicate.BLOCKING); } public BanebladeScoundrel(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.ROGUE, SubType.WEREWOLF}, "{3}{B}", + "Baneclaw Marauder", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "B"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.ROGUE); - this.subtype.add(SubType.WEREWOLF); - this.power = new MageInt(4); - this.toughness = new MageInt(3); - this.secondSideCardClazz = mage.cards.b.BaneclawMarauder.class; + // Baneblade Scoundrel + this.getLeftHalfCard().setPT(4, 3); // Whenever Baneblade Scoundrel becomes blocked, each creature blocking it gets -1/-1 until end of turn. - this.addAbility(new BecomesBlockedSourceTriggeredAbility(new BoostAllEffect( + this.getLeftHalfCard().addAbility(new BecomesBlockedSourceTriggeredAbility(new BoostAllEffect( -1, -1, Duration.EndOfTurn, filter, false ).setText("each creature blocking it gets -1/-1 until end of turn"), false)); // Daybound - this.addAbility(new DayboundAbility()); + this.getLeftHalfCard().addAbility(new DayboundAbility()); + + // Baneclaw Marauder + this.getRightHalfCard().setPT(5, 4); + + // Whenever Baneclaw Marauder becomes blocked, each creature blocking it gets -1/-1 until end of turn. + this.getRightHalfCard().addAbility(new BecomesBlockedSourceTriggeredAbility(new BoostAllEffect( + -1, -1, Duration.EndOfTurn, filter, false + ).setText("each creature blocking it gets -1/-1 until end of turn"), false)); + + // Whenever a creature blocking Baneclaw Marauder dies, its controller loses 1 life. + this.getRightHalfCard().addAbility(new DiesCreatureTriggeredAbility( + new LoseLifeTargetControllerEffect(1) + .setText("that creature's controller loses 1 life"), + false, filter, true + )); + + // Nightbound + this.getRightHalfCard().addAbility(new NightboundAbility()); } private BanebladeScoundrel(final BanebladeScoundrel card) { diff --git a/Mage.Sets/src/mage/cards/b/BaneclawMarauder.java b/Mage.Sets/src/mage/cards/b/BaneclawMarauder.java deleted file mode 100644 index 668dd16535e..00000000000 --- a/Mage.Sets/src/mage/cards/b/BaneclawMarauder.java +++ /dev/null @@ -1,63 +0,0 @@ -package mage.cards.b; - -import mage.MageInt; -import mage.abilities.common.BecomesBlockedSourceTriggeredAbility; -import mage.abilities.common.DiesCreatureTriggeredAbility; -import mage.abilities.effects.common.LoseLifeTargetControllerEffect; -import mage.abilities.effects.common.continuous.BoostAllEffect; -import mage.abilities.keyword.NightboundAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.SubType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.permanent.BlockingOrBlockedBySourcePredicate; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class BaneclawMarauder extends CardImpl { - - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature blocking {this}"); - - static { - filter.add(BlockingOrBlockedBySourcePredicate.BLOCKING); - } - - public BaneclawMarauder(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.WEREWOLF); - this.power = new MageInt(5); - this.toughness = new MageInt(4); - this.color.setBlack(true); - this.nightCard = true; - - // Whenever Baneclaw Marauder becomes blocked, each creature blocking it gets -1/-1 until end of turn. - this.addAbility(new BecomesBlockedSourceTriggeredAbility(new BoostAllEffect( - -1, -1, Duration.EndOfTurn, filter, false - ).setText("each creature blocking it gets -1/-1 until end of turn"), false)); - - // Whenever a creature blocking Baneclaw Marauder dies, its controller loses 1 life. - this.addAbility(new DiesCreatureTriggeredAbility( - new LoseLifeTargetControllerEffect(1) - .setText("that creature's controller loses 1 life"), - false, filter, true - )); - - // Nightbound - this.addAbility(new NightboundAbility()); - } - - private BaneclawMarauder(final BaneclawMarauder card) { - super(card); - } - - @Override - public BaneclawMarauder copy() { - return new BaneclawMarauder(this); - } -} diff --git a/Mage.Sets/src/mage/cards/b/BefriendingTheMoths.java b/Mage.Sets/src/mage/cards/b/BefriendingTheMoths.java index 23ce37cae8a..5bfa5cc39ce 100644 --- a/Mage.Sets/src/mage/cards/b/BefriendingTheMoths.java +++ b/Mage.Sets/src/mage/cards/b/BefriendingTheMoths.java @@ -6,9 +6,8 @@ import mage.abilities.effects.common.ExileSagaAndReturnTransformedEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; 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.CardType; import mage.constants.SagaChapter; import mage.constants.SubType; @@ -19,20 +18,20 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class BefriendingTheMoths extends CardImpl { +public final class BefriendingTheMoths extends TransformingDoubleFacedCard { public BefriendingTheMoths(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}"); - - this.subtype.add(SubType.SAGA); - this.secondSideCardClazz = mage.cards.i.ImperialMoth.class; + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, new SubType[]{SubType.SAGA}, "{3}{W}", + "Imperial Moth", + new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, new SubType[]{SubType.INSECT}, "W"); + // Befriending the Moths // (As this Saga enters and after your draw step, add a lore counter.) - SagaAbility sagaAbility = new SagaAbility(this); + SagaAbility sagaAbility = new SagaAbility(getLeftHalfCard()); // I, II — Target creature you control gets +1/+1 and gains flying until end of turn. sagaAbility.addChapterEffect( - this, SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_II, + getLeftHalfCard(), SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_II, new Effects( new BoostTargetEffect(1, 1) .setText("target creature you control gets +1/+1"), @@ -42,10 +41,14 @@ public final class BefriendingTheMoths extends CardImpl { ); // III — Exile this Saga, then return it to the battlefield transformed under your control. - this.addAbility(new TransformAbility()); - sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, new ExileSagaAndReturnTransformedEffect()); + sagaAbility.addChapterEffect(getLeftHalfCard(), SagaChapter.CHAPTER_III, new ExileSagaAndReturnTransformedEffect()); + this.getLeftHalfCard().addAbility(sagaAbility); - this.addAbility(sagaAbility); + // Imperial Moth + this.getRightHalfCard().setPT(2, 4); + + // Flying + this.getRightHalfCard().addAbility(FlyingAbility.getInstance()); } private BefriendingTheMoths(final BefriendingTheMoths card) { diff --git a/Mage.Sets/src/mage/cards/b/BeholdTheUnspeakable.java b/Mage.Sets/src/mage/cards/b/BeholdTheUnspeakable.java index c42d0c20e54..bbf412e6f26 100644 --- a/Mage.Sets/src/mage/cards/b/BeholdTheUnspeakable.java +++ b/Mage.Sets/src/mage/cards/b/BeholdTheUnspeakable.java @@ -1,15 +1,19 @@ package mage.cards.b; import mage.abilities.common.SagaAbility; +import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.common.HeckbentCondition; import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.dynamicvalue.common.CardsInControllerHandCount; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.ExileSagaAndReturnTransformedEffect; import mage.abilities.effects.common.continuous.BoostAllEffect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.keyword.ScryEffect; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.TrampleAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SagaChapter; @@ -21,35 +25,49 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class BeholdTheUnspeakable extends CardImpl { +public final class BeholdTheUnspeakable extends TransformingDoubleFacedCard { public BeholdTheUnspeakable(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{U}{U}"); - - this.subtype.add(SubType.SAGA); - this.secondSideCardClazz = mage.cards.v.VisionOfTheUnspeakable.class; + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, new SubType[]{SubType.SAGA}, "{3}{U}{U}", + "Vision of the Unspeakable", + new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, new SubType[]{SubType.SPIRIT}, "U"); + // Behold the Unspeakable // (As this Saga enters and after your draw step, add a lore counter.) - SagaAbility sagaAbility = new SagaAbility(this); + SagaAbility sagaAbility = new SagaAbility(getLeftHalfCard()); // I — Creatures you don't control get -2/-0 until your next turn. - sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_I, new BoostAllEffect( + sagaAbility.addChapterEffect(getLeftHalfCard(), SagaChapter.CHAPTER_I, new BoostAllEffect( -2, 0, Duration.UntilYourNextTurn, StaticFilters.FILTER_CREATURES_YOU_DONT_CONTROL, false )); // II — If you have one or fewer cards in hand, draw four cards. Otherwise, scry 2, then draw two cards. - sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_II, new ConditionalOneShotEffect( + sagaAbility.addChapterEffect(getLeftHalfCard(), SagaChapter.CHAPTER_II, new ConditionalOneShotEffect( new DrawCardSourceControllerEffect(4), new ScryEffect(2), HeckbentCondition.instance, "if you have one or fewer cards in hand, " + "draw four cards. Otherwise, scry 2, then draw two cards" ).addOtherwiseEffect(new DrawCardSourceControllerEffect(2))); // III — Exile this Saga, then return it to the battlefield transformed under your control. - this.addAbility(new TransformAbility()); - sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, new ExileSagaAndReturnTransformedEffect()); + sagaAbility.addChapterEffect(getLeftHalfCard(), SagaChapter.CHAPTER_III, new ExileSagaAndReturnTransformedEffect()); + this.getLeftHalfCard().addAbility(sagaAbility); - this.addAbility(sagaAbility); + // Vision of the Unspeakable + this.getRightHalfCard().setPT(0, 0); + + // Flying + this.getRightHalfCard().addAbility(FlyingAbility.getInstance()); + + // Trample + this.getRightHalfCard().addAbility(TrampleAbility.getInstance()); + + // Vision of the Unspeakable gets +1/+1 for each card in your hand. + this.getRightHalfCard().addAbility(new SimpleStaticAbility(new BoostSourceEffect( + CardsInControllerHandCount.ANY_SINGULAR, + CardsInControllerHandCount.ANY_SINGULAR, + Duration.WhileOnBattlefield + ))); } private BeholdTheUnspeakable(final BeholdTheUnspeakable card) { diff --git a/Mage.Sets/src/mage/cards/b/BelovedBeggar.java b/Mage.Sets/src/mage/cards/b/BelovedBeggar.java index a07558efdd3..6ee16a8e389 100644 --- a/Mage.Sets/src/mage/cards/b/BelovedBeggar.java +++ b/Mage.Sets/src/mage/cards/b/BelovedBeggar.java @@ -1,10 +1,10 @@ package mage.cards.b; -import mage.MageInt; -import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.keyword.DisturbAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.VigilanceAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; @@ -13,20 +13,27 @@ import java.util.UUID; /** * @author weirddan455 */ -public final class BelovedBeggar extends CardImpl { +public final class BelovedBeggar extends TransformingDoubleFacedCard { public BelovedBeggar(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); - - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.PEASANT); - this.power = new MageInt(0); - this.toughness = new MageInt(4); - - this.secondSideCardClazz = mage.cards.g.GenerousSoul.class; + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.PEASANT}, "{1}{W}", + "Generous Soul", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.SPIRIT}, "W"); + this.getLeftHalfCard().setPT(0, 4); + this.getRightHalfCard().setPT(4, 4); // Disturb {4}{W}{W} - this.addAbility(new DisturbAbility(this, "{4}{W}{W}")); + this.getLeftHalfCard().addAbility(new DisturbAbility(this, "{4}{W}{W}")); + + // Generous Soul + // Flying + this.getRightHalfCard().addAbility(FlyingAbility.getInstance()); + + // Vigilance + this.getRightHalfCard().addAbility(VigilanceAbility.getInstance()); + + // If Generous Soul would be put into a graveyard from anywhere, exile it instead. + this.getRightHalfCard().addAbility(DisturbAbility.makeBackAbility()); } private BelovedBeggar(final BelovedBeggar card) { diff --git a/Mage.Sets/src/mage/cards/b/BereavedSurvivor.java b/Mage.Sets/src/mage/cards/b/BereavedSurvivor.java index 463b0716483..28e3e704c72 100644 --- a/Mage.Sets/src/mage/cards/b/BereavedSurvivor.java +++ b/Mage.Sets/src/mage/cards/b/BereavedSurvivor.java @@ -1,37 +1,56 @@ package mage.cards.b; -import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.DiesCreatureTriggeredAbility; +import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; import mage.abilities.effects.common.TransformSourceEffect; -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.FilterCard; import mage.filter.StaticFilters; +import mage.filter.common.FilterCreatureCard; +import mage.filter.predicate.mageobject.ManaValuePredicate; +import mage.target.common.TargetCardInYourGraveyard; import java.util.UUID; /** * @author TheElk801 */ -public final class BereavedSurvivor extends CardImpl { +public final class BereavedSurvivor extends TransformingDoubleFacedCard { + private static final FilterCard filter + = new FilterCreatureCard("creature card with mana value 2 or less from your graveyard"); + + static { + filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 3)); + } public BereavedSurvivor(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.PEASANT}, "{2}{W}", + "Dauntless Avenger", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.SOLDIER}, "W"); - 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.DauntlessAvenger.class; + // Bereaved Survivor + this.getLeftHalfCard().setPT(2, 1); // When another creature you control dies, transform Bereaved Survivor. - this.addAbility(new TransformAbility()); - this.addAbility(new DiesCreatureTriggeredAbility( + this.getLeftHalfCard().addAbility(new DiesCreatureTriggeredAbility( new TransformSourceEffect(), false, StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE ).setTriggerPhrase("When another creature you control dies, ")); + + // Dauntless Avenger + this.getRightHalfCard().setPT(3, 2); + + // Whenever Dauntless Avenger attacks, return target creature card with mana value 2 or less from your graveyard to the battlefield tapped and attacking. + Ability ability = new AttacksTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect(true, true)); + ability.addTarget(new TargetCardInYourGraveyard(filter)); + this.getRightHalfCard().addAbility(ability); } private BereavedSurvivor(final BereavedSurvivor card) { diff --git a/Mage.Sets/src/mage/cards/b/BindingGeist.java b/Mage.Sets/src/mage/cards/b/BindingGeist.java index df255c28543..68c7ed88e96 100644 --- a/Mage.Sets/src/mage/cards/b/BindingGeist.java +++ b/Mage.Sets/src/mage/cards/b/BindingGeist.java @@ -1,15 +1,20 @@ package mage.cards.b; -import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.AttacksTriggeredAbility; -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.effects.common.continuous.BoostTargetEffect; 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 mage.target.common.TargetOpponentsCreaturePermanent; import java.util.UUID; @@ -17,23 +22,38 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class BindingGeist extends CardImpl { +public final class BindingGeist extends TransformingDoubleFacedCard { public BindingGeist(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.SPIRIT}, "{2}{U}", + "Spectral Binding", + new CardType[]{CardType.ENCHANTMENT}, new SubType[]{SubType.AURA}, "U"); - this.subtype.add(SubType.SPIRIT); - this.power = new MageInt(3); - this.toughness = new MageInt(1); - this.secondSideCardClazz = mage.cards.s.SpectralBinding.class; + // Binding Geist + this.getLeftHalfCard().setPT(3, 1); // Whenever Binding Geist attacks, target creature an opponent controls gets -2/-0 until end of turn. Ability ability = new AttacksTriggeredAbility(new BoostTargetEffect(-2, 0)); ability.addTarget(new TargetOpponentsCreaturePermanent()); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); + + // Spectral Binding + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + this.getRightHalfCard().addAbility(new EnchantAbility(auraTarget)); // Disturb {1}{U} - this.addAbility(new DisturbAbility(this, "{1}{U}")); + // needs to be added after right half has spell ability target set + this.getLeftHalfCard().addAbility(new DisturbAbility(this, "{1}{U}")); + + // Enchanted creature gets -2/-0. + this.getRightHalfCard().addAbility(new SimpleStaticAbility(new BoostEnchantedEffect(-2, 0))); + + // If Spectral Binding would be put into a graveyard from anywhere, exile it instead. + this.getRightHalfCard().addAbility(DisturbAbility.makeBackAbility()); } private BindingGeist(final BindingGeist card) { diff --git a/Mage.Sets/src/mage/cards/b/BiolumeEgg.java b/Mage.Sets/src/mage/cards/b/BiolumeEgg.java index 9f5b8140020..83ed25e5abc 100644 --- a/Mage.Sets/src/mage/cards/b/BiolumeEgg.java +++ b/Mage.Sets/src/mage/cards/b/BiolumeEgg.java @@ -1,22 +1,22 @@ package mage.cards.b; -import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SacrificeSourceTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; +import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; +import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect; import mage.abilities.effects.keyword.ScryEffect; import mage.abilities.keyword.DefenderAbility; import mage.abilities.keyword.TransformAbility; 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.cards.TransformingDoubleFacedCard; +import mage.constants.*; +import mage.filter.common.FilterControlledPermanent; import mage.game.Game; import mage.players.Player; @@ -25,28 +25,39 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class BiolumeEgg extends CardImpl { +public final class BiolumeEgg extends TransformingDoubleFacedCard { + + private static final FilterControlledPermanent filter + = new FilterControlledPermanent(SubType.ISLAND, "Islands"); public BiolumeEgg(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.SERPENT, SubType.EGG}, "{2}{U}", + "Biolume Serpent", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.SERPENT}, "U"); - this.subtype.add(SubType.SERPENT); - this.subtype.add(SubType.EGG); - this.power = new MageInt(0); - this.toughness = new MageInt(4); - this.secondSideCardClazz = mage.cards.b.BiolumeSerpent.class; + // Biolume Egg + this.getLeftHalfCard().setPT(0, 4); // Defender - this.addAbility(DefenderAbility.getInstance()); + this.getLeftHalfCard().addAbility(DefenderAbility.getInstance()); // When Biolume Egg enters the battlefield, scry 2. - this.addAbility(new EntersBattlefieldTriggeredAbility(new ScryEffect(2))); + this.getLeftHalfCard().addAbility(new EntersBattlefieldTriggeredAbility(new ScryEffect(2))); // When you sacrifice Biolume Egg, return it to the battlefield transformed under its owner's control at the beginning of the next end step. - this.addAbility(new TransformAbility()); - this.addAbility(new SacrificeSourceTriggeredAbility(new CreateDelayedTriggeredAbilityEffect( + this.getLeftHalfCard().addAbility(new SacrificeSourceTriggeredAbility(new CreateDelayedTriggeredAbilityEffect( new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new BiolumeEggEffect()), true ).setText("return it to the battlefield transformed under its owner's control at the beginning of the next end step"), false, true)); + + // Biolume Serpent + this.getRightHalfCard().setPT(4, 4); + + // Sacrifice two Islands: Biolume Serpent can't be blocked this turn. + this.getRightHalfCard().addAbility(new SimpleActivatedAbility( + new CantBeBlockedSourceEffect(Duration.EndOfTurn), + new SacrificeTargetCost(2, filter) + )); } private BiolumeEgg(final BiolumeEgg card) { diff --git a/Mage.Sets/src/mage/cards/b/BiolumeSerpent.java b/Mage.Sets/src/mage/cards/b/BiolumeSerpent.java deleted file mode 100644 index bcee214b7b3..00000000000 --- a/Mage.Sets/src/mage/cards/b/BiolumeSerpent.java +++ /dev/null @@ -1,50 +0,0 @@ -package mage.cards.b; - -import mage.MageInt; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.SacrificeTargetCost; -import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.SubType; -import mage.filter.common.FilterControlledPermanent; -import mage.target.common.TargetControlledPermanent; -import mage.target.common.TargetSacrifice; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class BiolumeSerpent extends CardImpl { - - private static final FilterControlledPermanent filter - = new FilterControlledPermanent(SubType.ISLAND, "Islands"); - - public BiolumeSerpent(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.SERPENT); - this.power = new MageInt(4); - this.toughness = new MageInt(4); - this.color.setBlue(true); - this.nightCard = true; - - // Sacrifice two Islands: Biolume Serpent can't be blocked this turn. - this.addAbility(new SimpleActivatedAbility( - new CantBeBlockedSourceEffect(Duration.EndOfTurn), - new SacrificeTargetCost(2, filter) - )); - } - - private BiolumeSerpent(final BiolumeSerpent card) { - super(card); - } - - @Override - public BiolumeSerpent copy() { - return new BiolumeSerpent(this); - } -} diff --git a/Mage.Sets/src/mage/cards/b/BirdAdmirer.java b/Mage.Sets/src/mage/cards/b/BirdAdmirer.java index b724b703f26..5eb9664ae7d 100644 --- a/Mage.Sets/src/mage/cards/b/BirdAdmirer.java +++ b/Mage.Sets/src/mage/cards/b/BirdAdmirer.java @@ -1,10 +1,10 @@ package mage.cards.b; -import mage.MageInt; import mage.abilities.keyword.DayboundAbility; +import mage.abilities.keyword.NightboundAbility; import mage.abilities.keyword.ReachAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; @@ -13,23 +13,31 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class BirdAdmirer extends CardImpl { +public final class BirdAdmirer extends TransformingDoubleFacedCard { public BirdAdmirer(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.ARCHER, SubType.WEREWOLF}, "{2}{G}", + "Wing Shredder", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "G"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.ARCHER); - this.subtype.add(SubType.WEREWOLF); - this.power = new MageInt(1); - this.toughness = new MageInt(4); - this.secondSideCardClazz = mage.cards.w.WingShredder.class; + // Bird Admirer + this.getLeftHalfCard().setPT(1, 4); // Reach - this.addAbility(ReachAbility.getInstance()); + this.getLeftHalfCard().addAbility(ReachAbility.getInstance()); // Daybound - this.addAbility(new DayboundAbility()); + this.getLeftHalfCard().addAbility(new DayboundAbility()); + + // Wing Shredder + this.getRightHalfCard().setPT(3, 5); + + // Reach + this.getRightHalfCard().addAbility(ReachAbility.getInstance()); + + // Nightbound + this.getRightHalfCard().addAbility(new NightboundAbility()); } private BirdAdmirer(final BirdAdmirer card) { diff --git a/Mage.Sets/src/mage/cards/b/BlightreaperThallid.java b/Mage.Sets/src/mage/cards/b/BlightreaperThallid.java index a5cd19e5727..2410b9e2b66 100644 --- a/Mage.Sets/src/mage/cards/b/BlightreaperThallid.java +++ b/Mage.Sets/src/mage/cards/b/BlightreaperThallid.java @@ -1,33 +1,48 @@ package mage.cards.b; -import mage.MageInt; import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.common.DiesSourceTriggeredAbility; +import mage.abilities.common.TransformIntoSourceTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.TransformSourceEffect; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.meta.OrTriggeredAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; +import mage.constants.Zone; +import mage.game.permanent.token.PhyrexianSaprolingToken; import java.util.UUID; /** * @author TheElk801 */ -public final class BlightreaperThallid extends CardImpl { +public final class BlightreaperThallid extends TransformingDoubleFacedCard { public BlightreaperThallid(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.FUNGUS}, "{1}{B}", + "Blightsower Thallid", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.PHYREXIAN, SubType.FUNGUS}, "BG"); - this.subtype.add(SubType.FUNGUS); - this.power = new MageInt(2); - this.toughness = new MageInt(2); - this.secondSideCardClazz = mage.cards.b.BlightsowerThallid.class; + // Blightreaper Thallid + this.getLeftHalfCard().setPT(2, 2); // {3}{G/P}: Transform Blightreaper Thallid. Activate only as a sorcery. - this.addAbility(new TransformAbility()); - this.addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{3}{G/P}"))); + this.getLeftHalfCard().addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{3}{G/P}"))); + + // Blightsower Thallid + this.getRightHalfCard().setPT(3, 3); + + // When this creature transforms into Blightsower Thallid or dies, create a 1/1 green Phyrexian Saproling creature token. + this.getRightHalfCard().addAbility(new OrTriggeredAbility( + Zone.BATTLEFIELD, new CreateTokenEffect(new PhyrexianSaprolingToken()), false, + "When this creature transforms into {this} or dies, ", + new TransformIntoSourceTriggeredAbility(null), + new DiesSourceTriggeredAbility(null, false) + )); } private BlightreaperThallid(final BlightreaperThallid card) { diff --git a/Mage.Sets/src/mage/cards/b/BlightsowerThallid.java b/Mage.Sets/src/mage/cards/b/BlightsowerThallid.java deleted file mode 100644 index 62a5dd8ab40..00000000000 --- a/Mage.Sets/src/mage/cards/b/BlightsowerThallid.java +++ /dev/null @@ -1,50 +0,0 @@ -package mage.cards.b; - -import mage.MageInt; -import mage.abilities.common.DiesSourceTriggeredAbility; -import mage.abilities.common.TransformIntoSourceTriggeredAbility; -import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.meta.OrTriggeredAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Zone; -import mage.game.permanent.token.PhyrexianSaprolingToken; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class BlightsowerThallid extends CardImpl { - - public BlightsowerThallid(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.PHYREXIAN); - this.subtype.add(SubType.FUNGUS); - this.power = new MageInt(3); - this.toughness = new MageInt(3); - this.color.setBlack(true); - this.color.setGreen(true); - this.nightCard = true; - - // When this creature transforms into Blightsower Thallid or dies, create a 1/1 green Phyrexian Saproling creature token. - this.addAbility(new OrTriggeredAbility( - Zone.BATTLEFIELD, new CreateTokenEffect(new PhyrexianSaprolingToken()), false, - "When this creature transforms into {this} or dies, ", - new TransformIntoSourceTriggeredAbility(null), - new DiesSourceTriggeredAbility(null, false) - )); - } - - private BlightsowerThallid(final BlightsowerThallid card) { - super(card); - } - - @Override - public BlightsowerThallid copy() { - return new BlightsowerThallid(this); - } -} diff --git a/Mage.Sets/src/mage/cards/b/BlitzwingAdaptiveAssailant.java b/Mage.Sets/src/mage/cards/b/BlitzwingAdaptiveAssailant.java deleted file mode 100644 index bf76a3de6bd..00000000000 --- a/Mage.Sets/src/mage/cards/b/BlitzwingAdaptiveAssailant.java +++ /dev/null @@ -1,83 +0,0 @@ -package mage.cards.b; - -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.triggers.BeginningOfCombatTriggeredAbility; -import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.TransformSourceEffect; -import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; -import mage.abilities.keyword.FlyingAbility; -import mage.abilities.keyword.IndestructibleAbility; -import mage.abilities.keyword.LivingMetalAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.game.Game; -import mage.util.RandomUtil; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class BlitzwingAdaptiveAssailant extends CardImpl { - - public BlitzwingAdaptiveAssailant(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, ""); - - this.supertype.add(SuperType.LEGENDARY); - this.subtype.add(SubType.VEHICLE); - this.power = new MageInt(3); - this.toughness = new MageInt(5); - this.color.setBlack(true); - this.nightCard = true; - - // Living metal - this.addAbility(new LivingMetalAbility()); - - // At the beginning of combat on your turn, choose flying or indestructible at random. Blitzwing gains that ability until end of turn. - this.addAbility(new BeginningOfCombatTriggeredAbility( - new BlitzwingAdaptiveAssailantEffect() - )); - - // Whenever Blitzwing deals combat damage to a player, convert it. - this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility( - new TransformSourceEffect().setText("convert it"), false - )); - } - - private BlitzwingAdaptiveAssailant(final BlitzwingAdaptiveAssailant card) { - super(card); - } - - @Override - public BlitzwingAdaptiveAssailant copy() { - return new BlitzwingAdaptiveAssailant(this); - } -} - -class BlitzwingAdaptiveAssailantEffect extends OneShotEffect { - - BlitzwingAdaptiveAssailantEffect() { - super(Outcome.Benefit); - staticText = "choose flying or indestructible at random. {this} gains that ability until end of turn"; - } - - private BlitzwingAdaptiveAssailantEffect(final BlitzwingAdaptiveAssailantEffect effect) { - super(effect); - } - - @Override - public BlitzwingAdaptiveAssailantEffect copy() { - return new BlitzwingAdaptiveAssailantEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Ability ability = RandomUtil.nextBoolean() ? FlyingAbility.getInstance() : IndestructibleAbility.getInstance(); - game.informPlayers(ability.getRule() + " has been chosen"); - game.addEffect(new GainAbilitySourceEffect(ability, Duration.EndOfTurn), source); - return true; - } -} diff --git a/Mage.Sets/src/mage/cards/b/BlitzwingCruelTormentor.java b/Mage.Sets/src/mage/cards/b/BlitzwingCruelTormentor.java index effa3be1f7a..22583cb96c9 100644 --- a/Mage.Sets/src/mage/cards/b/BlitzwingCruelTormentor.java +++ b/Mage.Sets/src/mage/cards/b/BlitzwingCruelTormentor.java @@ -1,17 +1,24 @@ package mage.cards.b; -import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.TransformSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.IndestructibleAbility; +import mage.abilities.keyword.LivingMetalAbility; import mage.abilities.keyword.MoreThanMeetsTheEyeAbility; -import mage.cards.CardImpl; +import mage.abilities.triggers.BeginningOfCombatTriggeredAbility; +import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.*; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.common.TargetOpponent; +import mage.util.RandomUtil; import mage.watchers.common.PlayerLostLifeWatcher; import java.util.UUID; @@ -19,26 +26,43 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class BlitzwingCruelTormentor extends CardImpl { +public final class BlitzwingCruelTormentor extends TransformingDoubleFacedCard { public BlitzwingCruelTormentor(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{5}{B}"); + super(ownerId, setInfo, + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, new SubType[]{SubType.ROBOT}, "{5}{B}", + "Blitzwing Adaptive Assailant", + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ARTIFACT}, new SubType[]{SubType.VEHICLE}, "B"); - this.supertype.add(SuperType.LEGENDARY); - this.subtype.add(SubType.ROBOT); - this.power = new MageInt(6); - this.toughness = new MageInt(5); - this.secondSideCardClazz = mage.cards.b.BlitzwingAdaptiveAssailant.class; + + // Blitzwing, Cruel Tormentor + this.getLeftHalfCard().setPT(6, 5); // More Than Meets the Eye {3}{B} - this.addAbility(new MoreThanMeetsTheEyeAbility(this, "{3}{B}")); + this.getLeftHalfCard().addAbility(new MoreThanMeetsTheEyeAbility(this, "{3}{B}")); // At the beginning of your end step, target opponent loses life equal to the life that player lost this turn. If no life is lost this way, convert Blitzwing. Ability ability = new BeginningOfEndStepTriggeredAbility( new BlitzwingCruelTormentorEffect() ); ability.addTarget(new TargetOpponent()); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); + + // Blitzwing Adaptive Assailant + this.getRightHalfCard().setPT(3, 5); + + // Living metal + this.getRightHalfCard().addAbility(new LivingMetalAbility()); + + // At the beginning of combat on your turn, choose flying or indestructible at random. Blitzwing gains that ability until end of turn. + this.getRightHalfCard().addAbility(new BeginningOfCombatTriggeredAbility( + new BlitzwingAdaptiveAssailantEffect() + )); + + // Whenever Blitzwing deals combat damage to a player, convert it. + this.getRightHalfCard().addAbility(new DealsCombatDamageToAPlayerTriggeredAbility( + new TransformSourceEffect().setText("convert it"), false + )); } private BlitzwingCruelTormentor(final BlitzwingCruelTormentor card) { @@ -81,3 +105,28 @@ class BlitzwingCruelTormentorEffect extends OneShotEffect { return permanent != null && permanent.transform(source, game); } } + +class BlitzwingAdaptiveAssailantEffect extends OneShotEffect { + + BlitzwingAdaptiveAssailantEffect() { + super(Outcome.Benefit); + staticText = "choose flying or indestructible at random. {this} gains that ability until end of turn"; + } + + private BlitzwingAdaptiveAssailantEffect(final BlitzwingAdaptiveAssailantEffect effect) { + super(effect); + } + + @Override + public BlitzwingAdaptiveAssailantEffect copy() { + return new BlitzwingAdaptiveAssailantEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Ability ability = RandomUtil.nextBoolean() ? FlyingAbility.getInstance() : IndestructibleAbility.getInstance(); + game.informPlayers(ability.getRule() + " has been chosen"); + game.addEffect(new GainAbilitySourceEffect(ability, Duration.EndOfTurn), source); + return true; + } +} diff --git a/Mage.Sets/src/mage/cards/b/BloodlineKeeper.java b/Mage.Sets/src/mage/cards/b/BloodlineKeeper.java index 8cc8653d882..8a0186c8386 100644 --- a/Mage.Sets/src/mage/cards/b/BloodlineKeeper.java +++ b/Mage.Sets/src/mage/cards/b/BloodlineKeeper.java @@ -1,9 +1,8 @@ - package mage.cards.b; -import mage.MageInt; import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.costs.common.TapSourceCost; @@ -11,17 +10,19 @@ import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.TransformSourceEffect; +import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.hint.Hint; import mage.abilities.hint.ValueHint; 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.CardType; import mage.constants.ComparisonType; +import mage.constants.Duration; import mage.constants.SubType; import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledPermanent; +import mage.filter.common.FilterCreaturePermanent; import mage.game.permanent.token.VampireToken; import java.util.UUID; @@ -29,33 +30,46 @@ import java.util.UUID; /** * @author Loki */ -public final class BloodlineKeeper extends CardImpl { +public final class BloodlineKeeper extends TransformingDoubleFacedCard { private static final FilterPermanent filter = new FilterControlledPermanent(SubType.VAMPIRE, "you control five or more Vampires"); private static final Condition condition = new PermanentsOnTheBattlefieldCondition(filter, ComparisonType.MORE_THAN, 4); private static final Hint hint = new ValueHint("Vampires you control", new PermanentsOnBattlefieldCount(filter)); + private static final FilterCreaturePermanent lordOfLineageFilter = new FilterCreaturePermanent(SubType.VAMPIRE, "Vampire creatures"); public BloodlineKeeper(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{B}"); - this.subtype.add(SubType.VAMPIRE); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.VAMPIRE}, "{2}{B}{B}", + "Lord of Lineage", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.VAMPIRE}, "B"); - this.power = new MageInt(3); - this.toughness = new MageInt(3); + // Bloodline Keeper + this.getLeftHalfCard().setPT(3, 3); - this.secondSideCardClazz = mage.cards.l.LordOfLineage.class; - - this.addAbility(FlyingAbility.getInstance()); + // Flying + this.getLeftHalfCard().addAbility(FlyingAbility.getInstance()); // {T}: Create a 2/2 black Vampire creature token with flying. - this.addAbility(new SimpleActivatedAbility(new CreateTokenEffect(new VampireToken()), new TapSourceCost())); + this.getLeftHalfCard().addAbility(new SimpleActivatedAbility(new CreateTokenEffect(new VampireToken()), new TapSourceCost())); // {B}: Transform Bloodline Keeper. Activate this ability only if you control five or more Vampires. - this.addAbility(new TransformAbility()); - this.addAbility(new ActivateIfConditionActivatedAbility( + this.getLeftHalfCard().addAbility(new ActivateIfConditionActivatedAbility( new TransformSourceEffect(), new ManaCostsImpl<>("{B}"), condition ).addHint(hint)); + + // Lord of Lineage + this.getRightHalfCard().setPT(5, 5); + + // Flying + this.getRightHalfCard().addAbility(FlyingAbility.getInstance()); + + // Other Vampire creatures you control get +2/+2. + this.getRightHalfCard().addAbility(new SimpleStaticAbility(new BoostControlledEffect(2, 2, Duration.WhileOnBattlefield, lordOfLineageFilter, true))); + + // {T}: Create a 2/2 black Vampire creature token with flying. + this.getRightHalfCard().addAbility(new SimpleActivatedAbility(new CreateTokenEffect(new VampireToken()), new TapSourceCost())); + } private BloodlineKeeper(final BloodlineKeeper card) { diff --git a/Mage.Sets/src/mage/cards/b/BloodswornKnight.java b/Mage.Sets/src/mage/cards/b/BloodswornKnight.java deleted file mode 100644 index ac11ba87537..00000000000 --- a/Mage.Sets/src/mage/cards/b/BloodswornKnight.java +++ /dev/null @@ -1,65 +0,0 @@ -package mage.cards.b; - -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.costs.common.DiscardCardCost; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.dynamicvalue.DynamicValue; -import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; -import mage.abilities.effects.common.TapSourceEffect; -import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; -import mage.abilities.effects.common.continuous.SetBasePowerToughnessSourceEffect; -import mage.abilities.keyword.IndestructibleAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.StaticFilters; - -import java.util.UUID; - -/** - * @author weirddan455 - */ -public final class BloodswornKnight extends CardImpl { - - private static final DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURES); - - public BloodswornKnight(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.VAMPIRE); - this.subtype.add(SubType.KNIGHT); - this.power = new MageInt(0); - this.toughness = new MageInt(0); - this.color.setBlack(true); - - // Back half of Bloodsworn Squire - this.nightCard = true; - - // Bloodsworn Knight's power and toughness are each equal to the number of creature cards in your graveyard. - this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetBasePowerToughnessSourceEffect(xValue))); - - // {1}{B}, Discard a card: Bloodsworn Knight gains indestructible until end of turn. Tap it. - Ability ability = new SimpleActivatedAbility( - new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn), - new ManaCostsImpl<>("{1}{B}") - ); - ability.addCost(new DiscardCardCost()); - ability.addEffect(new TapSourceEffect().setText("tap it")); - this.addAbility(ability); - } - - private BloodswornKnight(final BloodswornKnight card) { - super(card); - } - - @Override - public BloodswornKnight copy() { - return new BloodswornKnight(this); - } -} diff --git a/Mage.Sets/src/mage/cards/b/BloodswornSquire.java b/Mage.Sets/src/mage/cards/b/BloodswornSquire.java index a13ac16a0a7..024c1363925 100644 --- a/Mage.Sets/src/mage/cards/b/BloodswornSquire.java +++ b/Mage.Sets/src/mage/cards/b/BloodswornSquire.java @@ -1,41 +1,45 @@ package mage.cards.b; -import java.util.UUID; -import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.common.CardsInControllerGraveyardCondition; import mage.abilities.costs.common.DiscardCardCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; import mage.abilities.effects.common.TapSourceEffect; import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.effects.common.continuous.SetBasePowerToughnessSourceEffect; import mage.abilities.keyword.IndestructibleAbility; -import mage.abilities.keyword.TransformAbility; +import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; +import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; +import mage.constants.Zone; import mage.filter.StaticFilters; +import java.util.UUID; + /** * * @author weirddan455 */ -public final class BloodswornSquire extends CardImpl { +public final class BloodswornSquire extends TransformingDoubleFacedCard { + + private static final DynamicValue xValue = new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_CREATURES); public BloodswornSquire(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.VAMPIRE, SubType.SOLDIER}, "{3}{B}", + "Bloodsworn Knight", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.VAMPIRE, SubType.KNIGHT}, "B"); - this.subtype.add(SubType.VAMPIRE); - this.subtype.add(SubType.SOLDIER); - this.power = new MageInt(3); - this.toughness = new MageInt(3); - this.secondSideCardClazz = mage.cards.b.BloodswornKnight.class; - - this.addAbility(new TransformAbility()); + // Bloodsworn Squire + this.getLeftHalfCard().setPT(3, 3); // {1}{B}, Discard a card: Bloodsworn Squire gains indestructible until end of turn. Tap it. Then if there are four or more creature cards in your graveyard, transform Bloodsworn Squire. Ability ability = new SimpleActivatedAbility( @@ -49,7 +53,22 @@ public final class BloodswornSquire extends CardImpl { new CardsInControllerGraveyardCondition(4, StaticFilters.FILTER_CARD_CREATURES), "Then if there are four or more creature cards in your graveyard, transform {this}" )); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); + + // Bloodsworn Knight + this.getRightHalfCard().setPT(0, 0); + + // Bloodsworn Knight's power and toughness are each equal to the number of creature cards in your graveyard. + this.getRightHalfCard().addAbility(new SimpleStaticAbility(Zone.ALL, new SetBasePowerToughnessSourceEffect(xValue))); + + // {1}{B}, Discard a card: Bloodsworn Knight gains indestructible until end of turn. Tap it. + ability = new SimpleActivatedAbility( + new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn), + new ManaCostsImpl<>("{1}{B}") + ); + ability.addCost(new DiscardCardCost()); + ability.addEffect(new TapSourceEffect().setText("tap it")); + this.getRightHalfCard().addAbility(ability); } private BloodswornSquire(final BloodswornSquire card) { diff --git a/Mage.Sets/src/mage/cards/b/BondedHerdbeast.java b/Mage.Sets/src/mage/cards/b/BondedHerdbeast.java index aa422331237..205bd40eae0 100644 --- a/Mage.Sets/src/mage/cards/b/BondedHerdbeast.java +++ b/Mage.Sets/src/mage/cards/b/BondedHerdbeast.java @@ -1,12 +1,11 @@ package mage.cards.b; -import mage.MageInt; import mage.abilities.common.ActivateAsSorceryActivatedAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.TransformSourceEffect; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.MenaceAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; @@ -15,19 +14,25 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class BondedHerdbeast extends CardImpl { +public final class BondedHerdbeast extends TransformingDoubleFacedCard { public BondedHerdbeast(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{G}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.BEAST}, "{4}{G}", + "Plated Kilnbeast", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.PHYREXIAN, SubType.BEAST}, "RG"); - this.subtype.add(SubType.BEAST); - this.power = new MageInt(4); - this.toughness = new MageInt(5); - this.secondSideCardClazz = mage.cards.p.PlatedKilnbeast.class; + // Bonded Herdbeast + this.getLeftHalfCard().setPT(4, 5); // {4}{R/P}: Transform Bonded Herdbeast. Activate only as a sorcery. - this.addAbility(new TransformAbility()); - this.addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{4}{R/P}"))); + this.getLeftHalfCard().addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{4}{R/P}"))); + + // Plated Kilnbeast + this.getRightHalfCard().setPT(7, 5); + + // Menace + this.getRightHalfCard().addAbility(new MenaceAbility()); } private BondedHerdbeast(final BondedHerdbeast card) { diff --git a/Mage.Sets/src/mage/cards/b/BoseijuReachesSkyward.java b/Mage.Sets/src/mage/cards/b/BoseijuReachesSkyward.java index 120cf07a3ab..7e5bc35d11a 100644 --- a/Mage.Sets/src/mage/cards/b/BoseijuReachesSkyward.java +++ b/Mage.Sets/src/mage/cards/b/BoseijuReachesSkyward.java @@ -1,13 +1,17 @@ package mage.cards.b; import mage.abilities.common.SagaAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.dynamicvalue.common.LandsYouControlCount; import mage.abilities.effects.common.ExileSagaAndReturnTransformedEffect; import mage.abilities.effects.common.PutOnLibraryTargetEffect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.ReachAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; +import mage.constants.Duration; import mage.constants.SagaChapter; import mage.constants.SubType; import mage.filter.FilterCard; @@ -21,22 +25,23 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class BoseijuReachesSkyward extends CardImpl { +public final class BoseijuReachesSkyward extends TransformingDoubleFacedCard { private static final FilterCard filter = new FilterBasicCard(SubType.FOREST, "basic Forest cards"); public BoseijuReachesSkyward(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{G}"); - - this.subtype.add(SubType.SAGA); - this.secondSideCardClazz = mage.cards.b.BranchOfBoseiju.class; + super(ownerId, setInfo, + new CardType[]{CardType.ENCHANTMENT}, new SubType[]{SubType.SAGA}, "{3}{G}", + "Branch of Boseiju", + new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, new SubType[]{SubType.PLANT}, "G"); + // Boseiju Reaches Skyward // (As this Saga enters and after your draw step, add a lore counter.) - SagaAbility sagaAbility = new SagaAbility(this); + SagaAbility sagaAbility = new SagaAbility(getLeftHalfCard()); // I — Search your library for up to two basic Forest cards, reveal them, put them into your hand, then shuffle. sagaAbility.addChapterEffect( - this, SagaChapter.CHAPTER_I, + getLeftHalfCard(), SagaChapter.CHAPTER_I, new SearchLibraryPutInHandEffect(new TargetCardInLibrary( 0, 2, filter ), true) @@ -44,16 +49,25 @@ public final class BoseijuReachesSkyward extends CardImpl { // II — Put up to one target land card from your graveyard on top of your library. sagaAbility.addChapterEffect( - this, SagaChapter.CHAPTER_II, SagaChapter.CHAPTER_II, + getLeftHalfCard(), SagaChapter.CHAPTER_II, SagaChapter.CHAPTER_II, new PutOnLibraryTargetEffect(true), new TargetCardInYourGraveyard(0, 1, StaticFilters.FILTER_CARD_LAND_FROM_YOUR_GRAVEYARD) ); // III — Exile this Saga, then return it to the battlefield transformed under your control. - this.addAbility(new TransformAbility()); - sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, new ExileSagaAndReturnTransformedEffect()); + sagaAbility.addChapterEffect(getLeftHalfCard(), SagaChapter.CHAPTER_III, new ExileSagaAndReturnTransformedEffect()); + this.getLeftHalfCard().addAbility(sagaAbility); - this.addAbility(sagaAbility); + // Branch of Boseiju + this.getRightHalfCard().setPT(0, 0); + + // Reach + this.getRightHalfCard().addAbility(ReachAbility.getInstance()); + + // Branch of Boseiju gets +1/+1 for each land you control. + this.getRightHalfCard().addAbility(new SimpleStaticAbility(new BoostSourceEffect( + LandsYouControlCount.instance, LandsYouControlCount.instance, Duration.WhileOnBattlefield + ).setText("{this} gets +1/+1 for each land you control"))); } private BoseijuReachesSkyward(final BoseijuReachesSkyward card) { diff --git a/Mage.Sets/src/mage/cards/b/BraidedNet.java b/Mage.Sets/src/mage/cards/b/BraidedNet.java index 1457bd6054b..c6cb8b39632 100644 --- a/Mage.Sets/src/mage/cards/b/BraidedNet.java +++ b/Mage.Sets/src/mage/cards/b/BraidedNet.java @@ -5,20 +5,28 @@ import mage.abilities.common.EntersBattlefieldAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.RemoveCountersSourceCost; import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.dynamicvalue.common.ArtifactYouControlCount; +import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.RestrictionEffect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.TapTargetEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.hint.common.ArtifactYouControlHint; import mage.abilities.keyword.CraftAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.SubType; import mage.counters.CounterType; import mage.filter.FilterPermanent; import mage.filter.common.FilterNonlandPermanent; import mage.filter.predicate.mageobject.AnotherPredicate; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.players.Player; import mage.target.TargetPermanent; import java.util.UUID; @@ -26,7 +34,7 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class BraidedNet extends CardImpl { +public final class BraidedNet extends TransformingDoubleFacedCard { private static final FilterPermanent filter = new FilterNonlandPermanent("another target nonland permanent"); @@ -35,11 +43,14 @@ public final class BraidedNet extends CardImpl { } public BraidedNet(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{U}"); - this.secondSideCardClazz = mage.cards.b.BraidedQuipu.class; + super(ownerId, setInfo, + new CardType[]{CardType.ARTIFACT}, new SubType[]{}, "{2}{U}", + "Braided Quipu", + new CardType[]{CardType.ARTIFACT}, new SubType[]{}, "U"); + // Braided Net // Braided Net enters the battlefield with three net counters on it. - this.addAbility(new EntersBattlefieldAbility( + this.getLeftHalfCard().addAbility(new EntersBattlefieldAbility( new AddCountersSourceEffect(CounterType.NET.createInstance(3)), "with three net counters on it" )); @@ -49,10 +60,20 @@ public final class BraidedNet extends CardImpl { ability.addCost(new RemoveCountersSourceCost(CounterType.NET.createInstance())); ability.addEffect(new BraidedNetEffect()); ability.addTarget(new TargetPermanent(filter)); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); // Craft with artifact {1}{U} - this.addAbility(new CraftAbility("{1}{U}")); + this.getLeftHalfCard().addAbility(new CraftAbility("{1}{U}")); + + // Braided Quipu + // {3}{U}, {T}: Draw a card for each artifact you control, then put Braided Quipu into its owner's library third from the top. + ability = new SimpleActivatedAbility( + new DrawCardSourceControllerEffect(ArtifactYouControlCount.instance), new ManaCostsImpl<>("{3}{U}") + ); + ability.addCost(new TapSourceCost()); + ability.addEffect(new BraidedQuipuEffect()); + this.getRightHalfCard().addAbility(ability.addHint(ArtifactYouControlHint.instance)); + } private BraidedNet(final BraidedNet card) { @@ -100,3 +121,29 @@ class BraidedNetEffect extends RestrictionEffect { return permanent == null || !permanent.isTapped(); } } + +class BraidedQuipuEffect extends OneShotEffect { + + BraidedQuipuEffect() { + super(Outcome.Benefit); + staticText = ", then put {this} into its owner's library third from the top"; + } + + private BraidedQuipuEffect(final BraidedQuipuEffect effect) { + super(effect); + } + + @Override + public BraidedQuipuEffect copy() { + return new BraidedQuipuEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + Permanent permanent = source.getSourcePermanentIfItStillExists(game); + return player != null + && permanent != null + && player.putCardOnTopXOfLibrary(permanent, game, source, 3, true); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/b/BraidedQuipu.java b/Mage.Sets/src/mage/cards/b/BraidedQuipu.java deleted file mode 100644 index e68735e4d47..00000000000 --- a/Mage.Sets/src/mage/cards/b/BraidedQuipu.java +++ /dev/null @@ -1,74 +0,0 @@ -package mage.cards.b; - -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.dynamicvalue.common.ArtifactYouControlCount; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.hint.common.ArtifactYouControlHint; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class BraidedQuipu extends CardImpl { - - public BraidedQuipu(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, ""); - this.nightCard = true; - this.color.setBlue(true); - - // {3}{U}, {T}: Draw a card for each artifact you control, then put Braided Quipu into its owner's library third from the top. - Ability ability = new SimpleActivatedAbility( - new DrawCardSourceControllerEffect(ArtifactYouControlCount.instance), new ManaCostsImpl<>("{3}{U}") - ); - ability.addCost(new TapSourceCost()); - ability.addEffect(new BraidedQuipuEffect()); - this.addAbility(ability.addHint(ArtifactYouControlHint.instance)); - } - - private BraidedQuipu(final BraidedQuipu card) { - super(card); - } - - @Override - public BraidedQuipu copy() { - return new BraidedQuipu(this); - } -} - -class BraidedQuipuEffect extends OneShotEffect { - - BraidedQuipuEffect() { - super(Outcome.Benefit); - staticText = ", then put {this} into its owner's library third from the top"; - } - - private BraidedQuipuEffect(final BraidedQuipuEffect effect) { - super(effect); - } - - @Override - public BraidedQuipuEffect copy() { - return new BraidedQuipuEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getControllerId()); - Permanent permanent = source.getSourcePermanentIfItStillExists(game); - return player != null - && permanent != null - && player.putCardOnTopXOfLibrary(permanent, game, source, 3, true); - } -} diff --git a/Mage.Sets/src/mage/cards/b/BranchOfBoseiju.java b/Mage.Sets/src/mage/cards/b/BranchOfBoseiju.java deleted file mode 100644 index 7f721738d42..00000000000 --- a/Mage.Sets/src/mage/cards/b/BranchOfBoseiju.java +++ /dev/null @@ -1,47 +0,0 @@ -package mage.cards.b; - -import mage.MageInt; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.dynamicvalue.common.LandsYouControlCount; -import mage.abilities.effects.common.continuous.BoostSourceEffect; -import mage.abilities.keyword.ReachAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.SubType; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class BranchOfBoseiju extends CardImpl { - - public BranchOfBoseiju(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, ""); - - this.subtype.add(SubType.PLANT); - this.power = new MageInt(0); - this.toughness = new MageInt(0); - this.color.setGreen(true); - this.nightCard = true; - - // Reach - this.addAbility(ReachAbility.getInstance()); - - // Branch of Boseiju gets +1/+1 for each land you control. - this.addAbility(new SimpleStaticAbility(new BoostSourceEffect( - LandsYouControlCount.instance, LandsYouControlCount.instance, Duration.WhileOnBattlefield - ).setText("{this} gets +1/+1 for each land you control"))); - } - - private BranchOfBoseiju(final BranchOfBoseiju card) { - super(card); - } - - @Override - public BranchOfBoseiju copy() { - return new BranchOfBoseiju(this); - } -} diff --git a/Mage.Sets/src/mage/cards/b/BrasssTunnelGrinder.java b/Mage.Sets/src/mage/cards/b/BrasssTunnelGrinder.java index 16459284827..1c9bc9ec276 100644 --- a/Mage.Sets/src/mage/cards/b/BrasssTunnelGrinder.java +++ b/Mage.Sets/src/mage/cards/b/BrasssTunnelGrinder.java @@ -1,6 +1,7 @@ package mage.cards.b; import mage.abilities.Ability; +import mage.abilities.common.CastSpellPaidBySourceTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.DescendedThisTurnCondition; @@ -11,16 +12,17 @@ import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.RemoveAllCountersSourceEffect; import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.abilities.keyword.TransformAbility; +import mage.abilities.effects.keyword.DiscoverEffect; +import mage.abilities.mana.RedManaAbility; import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.SuperType; -import mage.constants.TargetController; +import mage.cards.TransformingDoubleFacedCard; +import mage.constants.*; import mage.counters.CounterType; +import mage.filter.FilterSpell; +import mage.filter.predicate.mageobject.PermanentPredicate; import mage.game.Game; +import mage.game.stack.Spell; import mage.players.Player; import mage.watchers.common.DescendedWatcher; @@ -29,21 +31,27 @@ import java.util.UUID; /** * @author Susucr */ -public final class BrasssTunnelGrinder extends CardImpl { +public final class BrasssTunnelGrinder extends TransformingDoubleFacedCard { private static final Condition condition = new SourceHasCounterCondition(CounterType.BORE, 3); + private static final FilterSpell filter = new FilterSpell("a permanent spell"); + + static { + filter.add(PermanentPredicate.instance); + } + public BrasssTunnelGrinder(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}{R}"); - this.secondSideCardClazz = mage.cards.t.TecutlanTheSearingRift.class; - - this.supertype.add(SuperType.LEGENDARY); + super(ownerId, setInfo, + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ARTIFACT}, new SubType[]{}, "{2}{R}", + "Tecutlan, the Searing Rift", + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.LAND}, new SubType[]{SubType.CAVE}, ""); + // Brass's Tunnel-Grinder // When Brass's Tunnel-Grinder enters the battlefield, discard any number of cards, then draw that many cards plus one. - this.addAbility(new EntersBattlefieldTriggeredAbility(new BrasssTunnelGrinderEffect())); + this.getLeftHalfCard().addAbility(new EntersBattlefieldTriggeredAbility(new BrasssTunnelGrinderEffect())); // At the beginning of your end step, if you descended this turn, put a bore counter on Brass's Tunnel-Grinder. Then if there are three or more bore counters on it, remove those counters and transform it. - this.addAbility(new TransformAbility()); Ability ability = new BeginningOfEndStepTriggeredAbility( TargetController.YOU, new AddCountersSourceEffect(CounterType.BORE.createInstance()), false, DescendedThisTurnCondition.instance @@ -53,7 +61,18 @@ public final class BrasssTunnelGrinder extends CardImpl { "Then if there are three or more bore counters on it, remove those counters and transform it" ).addEffect(new TransformSourceEffect())); ability.addHint(DescendedThisTurnCount.getHint()); - this.addAbility(ability, new DescendedWatcher()); + ability.addWatcher(new DescendedWatcher()); + this.getLeftHalfCard().addAbility(ability); + + // Tecutlan, the Searing Rift + // {T}: Add {R}. + this.getRightHalfCard().addAbility(new RedManaAbility()); + + // Whenever you cast a permanent spell using mana produced by Tecutlan, the Searing Rift, discover X, where X is that spell's mana value. + this.getRightHalfCard().addAbility(new CastSpellPaidBySourceTriggeredAbility( + new TecutlanTheSearingRiftEffect(), + filter, true + )); } private BrasssTunnelGrinder(final BrasssTunnelGrinder card) { @@ -94,3 +113,35 @@ class BrasssTunnelGrinderEffect extends OneShotEffect { return true; } } + +class TecutlanTheSearingRiftEffect extends OneShotEffect { + + TecutlanTheSearingRiftEffect() { + super(Outcome.Benefit); + staticText = "discover X, where X is that spell's mana value"; + } + + private TecutlanTheSearingRiftEffect(final TecutlanTheSearingRiftEffect effect) { + super(effect); + } + + @Override + public TecutlanTheSearingRiftEffect copy() { + return new TecutlanTheSearingRiftEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller == null) { + return false; + } + + Spell spell = game.getSpellOrLKIStack(getTargetPointer().getFirst(game, source)); + int mv = spell == null ? 0 : Math.max(0, spell.getManaValue()); + + DiscoverEffect.doDiscover(controller, mv, game, source); + return true; + } + +} diff --git a/Mage.Sets/src/mage/cards/b/BreakneckRider.java b/Mage.Sets/src/mage/cards/b/BreakneckRider.java index fbc0c3322e3..216c81bab3e 100644 --- a/Mage.Sets/src/mage/cards/b/BreakneckRider.java +++ b/Mage.Sets/src/mage/cards/b/BreakneckRider.java @@ -1,31 +1,54 @@ package mage.cards.b; -import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.common.WerewolfBackTriggeredAbility; import mage.abilities.common.WerewolfFrontTriggeredAbility; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.keyword.TrampleAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; +import mage.constants.Duration; import mage.constants.SubType; +import mage.filter.StaticFilters; import java.util.UUID; /** * @author fireshoes */ -public final class BreakneckRider extends CardImpl { +public final class BreakneckRider extends TransformingDoubleFacedCard { public BreakneckRider(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}{R}"); - this.subtype.add(SubType.HUMAN, SubType.SCOUT, SubType.WEREWOLF); - this.power = new MageInt(3); - this.toughness = new MageInt(3); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.SCOUT, SubType.WEREWOLF}, "{1}{R}{R}", + "Neck Breaker", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "R"); - this.secondSideCardClazz = mage.cards.n.NeckBreaker.class; + // Breakneck Rider + this.getLeftHalfCard().setPT(3, 3); // At the beginning of each upkeep, if no spells were cast last turn, transform Breakneck Rider. - this.addAbility(new TransformAbility()); - this.addAbility(new WerewolfFrontTriggeredAbility()); + this.getLeftHalfCard().addAbility(new WerewolfFrontTriggeredAbility()); + + // Neck Breaker + this.getRightHalfCard().setPT(4, 3); + + // Attacking creatures you control get +1/+0 and have trample. + Ability ability = new SimpleStaticAbility(new BoostControlledEffect( + 1, 0, Duration.WhileOnBattlefield, + StaticFilters.FILTER_ATTACKING_CREATURES + )); + ability.addEffect(new GainAbilityControlledEffect( + TrampleAbility.getInstance(), Duration.WhileOnBattlefield, + StaticFilters.FILTER_ATTACKING_CREATURES + ).setText("and have trample")); + this.getRightHalfCard().addAbility(ability); + + // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Neck Breaker. + this.getRightHalfCard().addAbility(new WerewolfBackTriggeredAbility()); } private BreakneckRider(final BreakneckRider card) { diff --git a/Mage.Sets/src/mage/cards/b/BrineComber.java b/Mage.Sets/src/mage/cards/b/BrineComber.java index 084f01247f6..9bcbd692ed0 100644 --- a/Mage.Sets/src/mage/cards/b/BrineComber.java +++ b/Mage.Sets/src/mage/cards/b/BrineComber.java @@ -1,26 +1,28 @@ package mage.cards.b; -import mage.MageInt; +import mage.abilities.common.BecomesTargetAttachedTriggeredAbility; import mage.abilities.common.BecomesTargetSourceTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.keyword.DisturbAbility; +import mage.abilities.keyword.EnchantAbility; import mage.abilities.meta.OrTriggeredAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Zone; +import mage.cards.TransformingDoubleFacedCard; +import mage.constants.*; import mage.filter.FilterSpell; import mage.filter.predicate.other.AuraSpellPredicate; import mage.game.permanent.token.SpiritWhiteToken; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; import java.util.UUID; /** * @author TheElk801 */ -public final class BrineComber extends CardImpl { +public final class BrineComber extends TransformingDoubleFacedCard { private static final FilterSpell filter = new FilterSpell("an Aura spell"); @@ -29,21 +31,40 @@ public final class BrineComber extends CardImpl { } public BrineComber(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{U}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.SPIRIT}, "{1}{W}{U}", + "Brinebound Gift", + new CardType[]{CardType.ENCHANTMENT}, new SubType[]{SubType.AURA}, "WU"); - this.subtype.add(SubType.SPIRIT); - this.power = new MageInt(1); - this.toughness = new MageInt(1); - this.secondSideCardClazz = mage.cards.b.BrineboundGift.class; + // Brine Comber + this.getLeftHalfCard().setPT(1, 1); // Whenever Brine Comber enters the battlefield or becomes the target of an Aura spell, create a 1/1 white Spirit creature token with flying. - this.addAbility(new OrTriggeredAbility(Zone.ALL, new CreateTokenEffect(new SpiritWhiteToken()), false, + this.getLeftHalfCard().addAbility(new OrTriggeredAbility(Zone.ALL, new CreateTokenEffect(new SpiritWhiteToken()), false, "Whenever {this} enters or becomes the target of an Aura spell, ", new EntersBattlefieldTriggeredAbility(null), new BecomesTargetSourceTriggeredAbility(null, filter))); + + // Brinebound Gift + // 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 {W}{U} - this.addAbility(new DisturbAbility(this, "{W}{U}")); + // needs to be added after enchant ability is set for target + this.getLeftHalfCard().addAbility(new DisturbAbility(this, "{W}{U}")); + + // Whenever Brinebound Gift enters the battlefield or enchanted creature becomes the target of an Aura spell, create a 1/1 white Spirit creature token with flying. + this.getRightHalfCard().addAbility(new OrTriggeredAbility(Zone.ALL, new CreateTokenEffect(new SpiritWhiteToken()), false, + "Whenever {this} enters or enchanted creature becomes the target of an Aura spell, ", + new EntersBattlefieldTriggeredAbility(null), + new BecomesTargetAttachedTriggeredAbility(null, filter, SetTargetPointer.NONE, false))); + + // If Brinebound Gift would be put into a graveyard from anywhere, exile it instead. + this.getRightHalfCard().addAbility(DisturbAbility.makeBackAbility()); } private BrineComber(final BrineComber card) { diff --git a/Mage.Sets/src/mage/cards/b/BrineboundGift.java b/Mage.Sets/src/mage/cards/b/BrineboundGift.java deleted file mode 100644 index 254ed7f3601..00000000000 --- a/Mage.Sets/src/mage/cards/b/BrineboundGift.java +++ /dev/null @@ -1,64 +0,0 @@ -package mage.cards.b; - -import mage.abilities.common.BecomesTargetAttachedTriggeredAbility; -import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.keyword.DisturbAbility; -import mage.abilities.keyword.EnchantAbility; -import mage.abilities.meta.OrTriggeredAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.filter.FilterSpell; -import mage.filter.predicate.other.AuraSpellPredicate; -import mage.game.permanent.token.SpiritWhiteToken; -import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class BrineboundGift extends CardImpl { - - private static final FilterSpell filter = new FilterSpell("an Aura spell"); - - static { - filter.add(AuraSpellPredicate.instance); - } - - public BrineboundGift(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)); - - // Whenever Brinebound Gift enters the battlefield or enchanted creature becomes the target of an Aura spell, create a 1/1 white Spirit creature token with flying. - this.addAbility(new OrTriggeredAbility(Zone.ALL, new CreateTokenEffect(new SpiritWhiteToken()), false, - "Whenever {this} enters or enchanted creature becomes the target of an Aura spell, ", - new EntersBattlefieldTriggeredAbility(null), - new BecomesTargetAttachedTriggeredAbility(null, filter, SetTargetPointer.NONE, false))); - - // If Brinebound Gift would be put into a graveyard from anywhere, exile it instead. - this.addAbility(DisturbAbility.makeBackAbility()); - } - - private BrineboundGift(final BrineboundGift card) { - super(card); - } - - @Override - public BrineboundGift copy() { - return new BrineboundGift(this); - } -} diff --git a/Mage.Sets/src/mage/cards/b/BrutalCathar.java b/Mage.Sets/src/mage/cards/b/BrutalCathar.java index bf58c854a03..44ad7a76194 100644 --- a/Mage.Sets/src/mage/cards/b/BrutalCathar.java +++ b/Mage.Sets/src/mage/cards/b/BrutalCathar.java @@ -1,12 +1,15 @@ package mage.cards.b; -import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.TransformsOrEntersTriggeredAbility; +import mage.abilities.costs.common.PayLifeCost; import mage.abilities.effects.common.ExileUntilSourceLeavesEffect; import mage.abilities.keyword.DayboundAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.NightboundAbility; +import mage.abilities.keyword.WardAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; import mage.target.common.TargetOpponentsCreaturePermanent; @@ -16,17 +19,18 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class BrutalCathar extends CardImpl { +public final class BrutalCathar extends TransformingDoubleFacedCard { public BrutalCathar(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.SOLDIER, SubType.WEREWOLF}, "{2}{W}", + "Moonrage Brute", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "R"); + + + // Brutal Cathar + this.getLeftHalfCard().setPT(2, 2); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.SOLDIER); - this.subtype.add(SubType.WEREWOLF); - this.power = new MageInt(2); - this.toughness = new MageInt(2); - this.secondSideCardClazz = mage.cards.m.MoonrageBrute.class; // When this creature enters the battlefield or transforms into Brutal Cathar, exile target creature an opponent controls until this creature leaves the battlefield. Ability ability = new TransformsOrEntersTriggeredAbility( @@ -34,10 +38,22 @@ public final class BrutalCathar extends CardImpl { .setText("exile target creature an opponent controls until this creature leaves the battlefield"), false ).setTriggerPhrase("When this creature enters or transforms into {this}, "); ability.addTarget(new TargetOpponentsCreaturePermanent()); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); // Daybound - this.addAbility(new DayboundAbility()); + this.getLeftHalfCard().addAbility(new DayboundAbility()); + + // Moonrage Brute + this.getRightHalfCard().setPT(3, 3); + + // First strike + this.getRightHalfCard().addAbility(FirstStrikeAbility.getInstance()); + + // Ward—Pay 3 life. + this.getRightHalfCard().addAbility(new WardAbility(new PayLifeCost(3), false)); + + // Nightbound + this.getRightHalfCard().addAbility(new NightboundAbility()); } private BrutalCathar(final BrutalCathar card) { diff --git a/Mage.Sets/src/mage/cards/b/BurlyBreaker.java b/Mage.Sets/src/mage/cards/b/BurlyBreaker.java index da7065a2329..d4d3f353148 100644 --- a/Mage.Sets/src/mage/cards/b/BurlyBreaker.java +++ b/Mage.Sets/src/mage/cards/b/BurlyBreaker.java @@ -1,11 +1,11 @@ package mage.cards.b; -import mage.MageInt; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.keyword.DayboundAbility; +import mage.abilities.keyword.NightboundAbility; import mage.abilities.keyword.WardAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; @@ -14,22 +14,31 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class BurlyBreaker extends CardImpl { +public final class BurlyBreaker extends TransformingDoubleFacedCard { public BurlyBreaker(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{G}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{3}{G}{G}", + "Dire-Strain Demolisher", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "G"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.WEREWOLF); - this.power = new MageInt(6); - this.toughness = new MageInt(5); - this.secondSideCardClazz = mage.cards.d.DireStrainDemolisher.class; + // Burly Breaker + this.getLeftHalfCard().setPT(6, 5); // Ward {1} - this.addAbility(new WardAbility(new ManaCostsImpl<>("{1}"))); + this.getLeftHalfCard().addAbility(new WardAbility(new ManaCostsImpl<>("{1}"))); // Daybound - this.addAbility(new DayboundAbility()); + this.getLeftHalfCard().addAbility(new DayboundAbility()); + + // Dire-Strain Demolisher + this.getRightHalfCard().setPT(8, 7); + + // Ward {3} + this.getRightHalfCard().addAbility(new WardAbility(new ManaCostsImpl<>("{3}"))); + + // Nightbound + this.getRightHalfCard().addAbility(new NightboundAbility()); } private BurlyBreaker(final BurlyBreaker card) { diff --git a/Mage.Sets/src/mage/cards/d/DauntlessAvenger.java b/Mage.Sets/src/mage/cards/d/DauntlessAvenger.java deleted file mode 100644 index 8659565dace..00000000000 --- a/Mage.Sets/src/mage/cards/d/DauntlessAvenger.java +++ /dev/null @@ -1,55 +0,0 @@ -package mage.cards.d; - -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.AttacksTriggeredAbility; -import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.ComparisonType; -import mage.constants.SubType; -import mage.filter.FilterCard; -import mage.filter.common.FilterCreatureCard; -import mage.filter.predicate.mageobject.ManaValuePredicate; -import mage.target.common.TargetCardInYourGraveyard; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class DauntlessAvenger extends CardImpl { - - private static final FilterCard filter - = new FilterCreatureCard("creature card with mana value 2 or less from your graveyard"); - - static { - filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, 3)); - } - - public DauntlessAvenger(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.SOLDIER); - this.power = new MageInt(3); - this.toughness = new MageInt(2); - this.color.setWhite(true); - this.nightCard = true; - - // Whenever Dauntless Avenger attacks, return target creature card with mana value 2 or less from your graveyard to the battlefield tapped and attacking. - Ability ability = new AttacksTriggeredAbility(new ReturnFromGraveyardToBattlefieldTargetEffect(true, true)); - ability.addTarget(new TargetCardInYourGraveyard(filter)); - this.addAbility(ability); - } - - private DauntlessAvenger(final DauntlessAvenger card) { - super(card); - } - - @Override - public DauntlessAvenger copy() { - return new DauntlessAvenger(this); - } -} diff --git a/Mage.Sets/src/mage/cards/d/DireStrainDemolisher.java b/Mage.Sets/src/mage/cards/d/DireStrainDemolisher.java deleted file mode 100644 index abb57f23514..00000000000 --- a/Mage.Sets/src/mage/cards/d/DireStrainDemolisher.java +++ /dev/null @@ -1,43 +0,0 @@ -package mage.cards.d; - -import mage.MageInt; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.keyword.NightboundAbility; -import mage.abilities.keyword.WardAbility; -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 DireStrainDemolisher extends CardImpl { - - public DireStrainDemolisher(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.WEREWOLF); - this.power = new MageInt(8); - this.toughness = new MageInt(7); - this.color.setGreen(true); - this.nightCard = true; - - // Ward {3} - this.addAbility(new WardAbility(new ManaCostsImpl<>("{3}"))); - - // Nightbound - this.addAbility(new NightboundAbility()); - } - - private DireStrainDemolisher(final DireStrainDemolisher card) { - super(card); - } - - @Override - public DireStrainDemolisher copy() { - return new DireStrainDemolisher(this); - } -} diff --git a/Mage.Sets/src/mage/cards/g/GenerousSoul.java b/Mage.Sets/src/mage/cards/g/GenerousSoul.java deleted file mode 100644 index d0d85e6ad79..00000000000 --- a/Mage.Sets/src/mage/cards/g/GenerousSoul.java +++ /dev/null @@ -1,42 +0,0 @@ -package mage.cards.g; - -import mage.MageInt; -import mage.abilities.keyword.DisturbAbility; -import mage.abilities.keyword.FlyingAbility; -import mage.abilities.keyword.VigilanceAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; - -import java.util.UUID; - -public final class GenerousSoul extends CardImpl { - - public GenerousSoul(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.SPIRIT); - this.power = new MageInt(4); - this.toughness = new MageInt(4); - this.color.setWhite(true); - - // This is the back half of Beloved Beggar - this.nightCard = true; - - this.addAbility(FlyingAbility.getInstance()); - this.addAbility(VigilanceAbility.getInstance()); - - // If Generous Soul would be put into a graveyard from anywhere, exile it instead. - this.addAbility(DisturbAbility.makeBackAbility()); - } - - private GenerousSoul(final GenerousSoul card) { - super(card); - } - - @Override - public GenerousSoul copy() { - return new GenerousSoul(this); - } -} diff --git a/Mage.Sets/src/mage/cards/i/ImperialMoth.java b/Mage.Sets/src/mage/cards/i/ImperialMoth.java deleted file mode 100644 index c3d40b92497..00000000000 --- a/Mage.Sets/src/mage/cards/i/ImperialMoth.java +++ /dev/null @@ -1,38 +0,0 @@ -package mage.cards.i; - -import mage.MageInt; -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 ImperialMoth extends CardImpl { - - public ImperialMoth(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, ""); - - this.subtype.add(SubType.INSECT); - this.power = new MageInt(2); - this.toughness = new MageInt(4); - this.color.setWhite(true); - this.nightCard = true; - - // Flying - this.addAbility(FlyingAbility.getInstance()); - } - - private ImperialMoth(final ImperialMoth card) { - super(card); - } - - @Override - public ImperialMoth copy() { - return new ImperialMoth(this); - } -} diff --git a/Mage.Sets/src/mage/cards/l/LordOfLineage.java b/Mage.Sets/src/mage/cards/l/LordOfLineage.java deleted file mode 100644 index 3480656c2d1..00000000000 --- a/Mage.Sets/src/mage/cards/l/LordOfLineage.java +++ /dev/null @@ -1,57 +0,0 @@ -package mage.cards.l; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.effects.common.continuous.BoostControlledEffect; -import mage.abilities.keyword.FlyingAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.game.permanent.token.VampireToken; - -/** - * - * @author Loki - */ -public final class LordOfLineage extends CardImpl { - - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(SubType.VAMPIRE, "Vampire creatures"); - - public LordOfLineage(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - this.subtype.add(SubType.VAMPIRE); - - this.color.setBlack(true); - this.power = new MageInt(5); - this.toughness = new MageInt(5); - - // this card is the second face of double-faced card Bloodline Keeper - this.nightCard = true; - - // Flying - this.addAbility(FlyingAbility.getInstance()); - - // Other Vampire creatures you control get +2/+2. - this.addAbility(new SimpleStaticAbility(new BoostControlledEffect(2, 2, Duration.WhileOnBattlefield, filter, true))); - - // {T}: Create a 2/2 black Vampire creature token with flying. - this.addAbility(new SimpleActivatedAbility(new CreateTokenEffect(new VampireToken()), new TapSourceCost())); - } - - private LordOfLineage(final LordOfLineage card) { - super(card); - } - - @Override - public LordOfLineage copy() { - return new LordOfLineage(this); - } -} diff --git a/Mage.Sets/src/mage/cards/m/MoonrageBrute.java b/Mage.Sets/src/mage/cards/m/MoonrageBrute.java deleted file mode 100644 index 1b9ed12ce72..00000000000 --- a/Mage.Sets/src/mage/cards/m/MoonrageBrute.java +++ /dev/null @@ -1,47 +0,0 @@ -package mage.cards.m; - -import mage.MageInt; -import mage.abilities.costs.common.PayLifeCost; -import mage.abilities.keyword.FirstStrikeAbility; -import mage.abilities.keyword.NightboundAbility; -import mage.abilities.keyword.WardAbility; -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 MoonrageBrute extends CardImpl { - - public MoonrageBrute(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.setRed(true); - this.nightCard = true; - - // First strike - this.addAbility(FirstStrikeAbility.getInstance()); - - // Ward—Pay 3 life. - this.addAbility(new WardAbility(new PayLifeCost(3), false)); - - // Nightbound - this.addAbility(new NightboundAbility()); - } - - private MoonrageBrute(final MoonrageBrute card) { - super(card); - } - - @Override - public MoonrageBrute copy() { - return new MoonrageBrute(this); - } -} diff --git a/Mage.Sets/src/mage/cards/n/NeckBreaker.java b/Mage.Sets/src/mage/cards/n/NeckBreaker.java deleted file mode 100644 index 96ced371e3f..00000000000 --- a/Mage.Sets/src/mage/cards/n/NeckBreaker.java +++ /dev/null @@ -1,57 +0,0 @@ -package mage.cards.n; - -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.common.WerewolfBackTriggeredAbility; -import mage.abilities.effects.common.continuous.BoostControlledEffect; -import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; -import mage.abilities.keyword.TrampleAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.SubType; -import mage.filter.StaticFilters; - -import java.util.UUID; - -/** - * @author fireshoes - */ -public final class NeckBreaker extends CardImpl { - - public NeckBreaker(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - this.subtype.add(SubType.WEREWOLF); - this.power = new MageInt(4); - this.toughness = new MageInt(3); - this.color.setRed(true); - - // this card is the second face of double-faced card - this.nightCard = true; - - // Attacking creatures you control get +1/+0 and have trample. - Ability ability = new SimpleStaticAbility(new BoostControlledEffect( - 1, 0, Duration.WhileOnBattlefield, - StaticFilters.FILTER_ATTACKING_CREATURES - )); - ability.addEffect(new GainAbilityControlledEffect( - TrampleAbility.getInstance(), Duration.WhileOnBattlefield, - StaticFilters.FILTER_ATTACKING_CREATURES - ).setText("and have trample")); - this.addAbility(ability); - - // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Neck Breaker. - this.addAbility(new WerewolfBackTriggeredAbility()); - } - - private NeckBreaker(final NeckBreaker card) { - super(card); - } - - @Override - public NeckBreaker copy() { - return new NeckBreaker(this); - } -} diff --git a/Mage.Sets/src/mage/cards/p/PlatedKilnbeast.java b/Mage.Sets/src/mage/cards/p/PlatedKilnbeast.java deleted file mode 100644 index f0cd80d8980..00000000000 --- a/Mage.Sets/src/mage/cards/p/PlatedKilnbeast.java +++ /dev/null @@ -1,40 +0,0 @@ -package mage.cards.p; - -import mage.MageInt; -import mage.abilities.keyword.MenaceAbility; -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 PlatedKilnbeast extends CardImpl { - - public PlatedKilnbeast(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.PHYREXIAN); - this.subtype.add(SubType.BEAST); - this.power = new MageInt(7); - this.toughness = new MageInt(5); - this.color.setRed(true); - this.color.setGreen(true); - this.nightCard = true; - - // Menace - this.addAbility(new MenaceAbility()); - } - - private PlatedKilnbeast(final PlatedKilnbeast card) { - super(card); - } - - @Override - public PlatedKilnbeast copy() { - return new PlatedKilnbeast(this); - } -} diff --git a/Mage.Sets/src/mage/cards/s/SpectralBinding.java b/Mage.Sets/src/mage/cards/s/SpectralBinding.java deleted file mode 100644 index 89d2a0f443a..00000000000 --- a/Mage.Sets/src/mage/cards/s/SpectralBinding.java +++ /dev/null @@ -1,51 +0,0 @@ -package mage.cards.s; - -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 SpectralBinding extends CardImpl { - - public SpectralBinding(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, ""); - - this.subtype.add(SubType.AURA); - 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 gets -2/-0. - this.addAbility(new SimpleStaticAbility(new BoostEnchantedEffect(-2, 0))); - - // If Spectral Binding would be put into a graveyard from anywhere, exile it instead. - this.addAbility(DisturbAbility.makeBackAbility()); - } - - private SpectralBinding(final SpectralBinding card) { - super(card); - } - - @Override - public SpectralBinding copy() { - return new SpectralBinding(this); - } -} diff --git a/Mage.Sets/src/mage/cards/t/TecutlanTheSearingRift.java b/Mage.Sets/src/mage/cards/t/TecutlanTheSearingRift.java deleted file mode 100644 index f9874232e46..00000000000 --- a/Mage.Sets/src/mage/cards/t/TecutlanTheSearingRift.java +++ /dev/null @@ -1,92 +0,0 @@ -package mage.cards.t; - -import mage.abilities.Ability; -import mage.abilities.common.CastSpellPaidBySourceTriggeredAbility; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.keyword.DiscoverEffect; -import mage.abilities.mana.RedManaAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.SubType; -import mage.constants.SuperType; -import mage.filter.FilterSpell; -import mage.filter.predicate.mageobject.PermanentPredicate; -import mage.game.Game; -import mage.game.stack.Spell; -import mage.players.Player; - -import java.util.UUID; - -/** - * @author Susucr - */ -public final class TecutlanTheSearingRift extends CardImpl { - - private static final FilterSpell filter = new FilterSpell("a permanent spell"); - - static { - filter.add(PermanentPredicate.instance); - } - - public TecutlanTheSearingRift(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); - - this.supertype.add(SuperType.LEGENDARY); - this.subtype.add(SubType.CAVE); - - // (Transforms from Brass's Tunnel-Grinder.) - this.nightCard = true; - - // {T}: Add {R}. - this.addAbility(new RedManaAbility()); - - // Whenever you cast a permanent spell using mana produced by Tecutlan, the Searing Rift, discover X, where X is that spell's mana value. - this.addAbility(new CastSpellPaidBySourceTriggeredAbility( - new TecutlanTheSearingRiftEffect(), - filter, true - )); - } - - private TecutlanTheSearingRift(final TecutlanTheSearingRift card) { - super(card); - } - - @Override - public TecutlanTheSearingRift copy() { - return new TecutlanTheSearingRift(this); - } -} - -class TecutlanTheSearingRiftEffect extends OneShotEffect { - - TecutlanTheSearingRiftEffect() { - super(Outcome.Benefit); - staticText = "discover X, where X is that spell's mana value"; - } - - private TecutlanTheSearingRiftEffect(final TecutlanTheSearingRiftEffect effect) { - super(effect); - } - - @Override - public TecutlanTheSearingRiftEffect copy() { - return new TecutlanTheSearingRiftEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller == null) { - return false; - } - - Spell spell = game.getSpellOrLKIStack(getTargetPointer().getFirst(game, source)); - int mv = spell == null ? 0 : Math.max(0, spell.getManaValue()); - - DiscoverEffect.doDiscover(controller, mv, game, source); - return true; - } - -} \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/v/VisionOfTheUnspeakable.java b/Mage.Sets/src/mage/cards/v/VisionOfTheUnspeakable.java deleted file mode 100644 index 99a77ff529a..00000000000 --- a/Mage.Sets/src/mage/cards/v/VisionOfTheUnspeakable.java +++ /dev/null @@ -1,53 +0,0 @@ -package mage.cards.v; - -import mage.MageInt; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.dynamicvalue.common.CardsInControllerHandCount; -import mage.abilities.effects.common.continuous.BoostSourceEffect; -import mage.abilities.keyword.FlyingAbility; -import mage.abilities.keyword.TrampleAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.SubType; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class VisionOfTheUnspeakable extends CardImpl { - - public VisionOfTheUnspeakable(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, ""); - - this.subtype.add(SubType.SPIRIT); - this.power = new MageInt(0); - this.toughness = new MageInt(0); - this.color.setBlue(true); - this.nightCard = true; - - // Flying - this.addAbility(FlyingAbility.getInstance()); - - // Trample - this.addAbility(TrampleAbility.getInstance()); - - // Vision of the Unspeakable gets +1/+1 for each card in your hand. - this.addAbility(new SimpleStaticAbility(new BoostSourceEffect( - CardsInControllerHandCount.ANY_SINGULAR, - CardsInControllerHandCount.ANY_SINGULAR, - Duration.WhileOnBattlefield - ))); - } - - private VisionOfTheUnspeakable(final VisionOfTheUnspeakable card) { - super(card); - } - - @Override - public VisionOfTheUnspeakable copy() { - return new VisionOfTheUnspeakable(this); - } -} diff --git a/Mage.Sets/src/mage/cards/w/WingShredder.java b/Mage.Sets/src/mage/cards/w/WingShredder.java deleted file mode 100644 index daf016f1dd5..00000000000 --- a/Mage.Sets/src/mage/cards/w/WingShredder.java +++ /dev/null @@ -1,42 +0,0 @@ -package mage.cards.w; - -import mage.MageInt; -import mage.abilities.keyword.NightboundAbility; -import mage.abilities.keyword.ReachAbility; -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 WingShredder extends CardImpl { - - public WingShredder(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(5); - this.color.setGreen(true); - this.nightCard = true; - - // Reach - this.addAbility(ReachAbility.getInstance()); - - // Nightbound - this.addAbility(new NightboundAbility()); - } - - private WingShredder(final WingShredder card) { - super(card); - } - - @Override - public WingShredder copy() { - return new WingShredder(this); - } -} diff --git a/Mage.Sets/src/mage/sets/FinalFantasy.java b/Mage.Sets/src/mage/sets/FinalFantasy.java index 04443dac090..6462b4da628 100644 --- a/Mage.Sets/src/mage/sets/FinalFantasy.java +++ b/Mage.Sets/src/mage/sets/FinalFantasy.java @@ -60,8 +60,6 @@ public final class FinalFantasy extends ExpansionSet { 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, Airborne", 272, Rarity.RARE, mage.cards.b.BalambGardenAirborne.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Balamb Garden, Airborne", 354, Rarity.RARE, mage.cards.b.BalambGardenAirborne.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 5a94231864f..65e1c1194c4 100644 --- a/Mage.Sets/src/mage/sets/FromTheVaultTransform.java +++ b/Mage.Sets/src/mage/sets/FromTheVaultTransform.java @@ -24,7 +24,6 @@ public final class FromTheVaultTransform extends ExpansionSet { cards.add(new SetCardInfo("Arguel's Blood Fast", 2, Rarity.MYTHIC, mage.cards.a.ArguelsBloodFast.class)); cards.add(new SetCardInfo("Arlinn Kord", 3, Rarity.MYTHIC, mage.cards.a.ArlinnKord.class)); cards.add(new SetCardInfo("Bloodline Keeper", 4, Rarity.MYTHIC, mage.cards.b.BloodlineKeeper.class)); - cards.add(new SetCardInfo("Lord of Lineage", 4, Rarity.MYTHIC, mage.cards.l.LordOfLineage.class)); cards.add(new SetCardInfo("Bruna, the Fading Light", 5, Rarity.MYTHIC, mage.cards.b.BrunaTheFadingLight.class)); 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)); diff --git a/Mage.Sets/src/mage/sets/Innistrad.java b/Mage.Sets/src/mage/sets/Innistrad.java index d314bf52825..52d076faa51 100644 --- a/Mage.Sets/src/mage/sets/Innistrad.java +++ b/Mage.Sets/src/mage/sets/Innistrad.java @@ -178,7 +178,6 @@ public final class Innistrad extends ExpansionSet { cards.add(new SetCardInfo("Laboratory Maniac", 61, Rarity.RARE, mage.cards.l.LaboratoryManiac.class)); cards.add(new SetCardInfo("Lantern Spirit", 62, Rarity.UNCOMMON, mage.cards.l.LanternSpirit.class)); cards.add(new SetCardInfo("Liliana of the Veil", 105, Rarity.MYTHIC, mage.cards.l.LilianaOfTheVeil.class)); - cards.add(new SetCardInfo("Lord of Lineage", 90, Rarity.RARE, mage.cards.l.LordOfLineage.class)); cards.add(new SetCardInfo("Lost in the Mist", 63, Rarity.COMMON, mage.cards.l.LostInTheMist.class)); cards.add(new SetCardInfo("Ludevic's Abomination", 64, Rarity.RARE, mage.cards.l.LudevicsAbomination.class)); cards.add(new SetCardInfo("Ludevic's Test Subject", 64, Rarity.RARE, mage.cards.l.LudevicsTestSubject.class)); diff --git a/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java b/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java index 248abd21012..18686d0afeb 100644 --- a/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java +++ b/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java @@ -60,12 +60,10 @@ public final class InnistradCrimsonVow extends ExpansionSet { cards.add(new SetCardInfo("Avabruck Caretaker", 187, Rarity.MYTHIC, mage.cards.a.AvabruckCaretaker.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Avabruck Caretaker", 384, Rarity.MYTHIC, mage.cards.a.AvabruckCaretaker.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ballista Watcher", 143, Rarity.UNCOMMON, mage.cards.b.BallistaWatcher.class)); - cards.add(new SetCardInfo("Ballista Wielder", 143, Rarity.UNCOMMON, mage.cards.b.BallistaWielder.class)); cards.add(new SetCardInfo("Belligerent Guest", 144, Rarity.COMMON, mage.cards.b.BelligerentGuest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Belligerent Guest", 301, Rarity.COMMON, mage.cards.b.BelligerentGuest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Binding Geist", 48, Rarity.COMMON, mage.cards.b.BindingGeist.class)); cards.add(new SetCardInfo("Biolume Egg", 49, Rarity.UNCOMMON, mage.cards.b.BiolumeEgg.class)); - cards.add(new SetCardInfo("Biolume Serpent", 49, Rarity.UNCOMMON, mage.cards.b.BiolumeSerpent.class)); cards.add(new SetCardInfo("Bleed Dry", 94, Rarity.COMMON, mage.cards.b.BleedDry.class)); cards.add(new SetCardInfo("Blood Fountain", 95, Rarity.COMMON, mage.cards.b.BloodFountain.class)); cards.add(new SetCardInfo("Blood Hypnotist", 145, Rarity.UNCOMMON, mage.cards.b.BloodHypnotist.class, NON_FULL_USE_VARIOUS)); @@ -80,8 +78,6 @@ public final class InnistradCrimsonVow extends ExpansionSet { cards.add(new SetCardInfo("Bloodcrazed Socialite", 96, Rarity.COMMON, mage.cards.b.BloodcrazedSocialite.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bloodsoaked Reveler", 128, Rarity.UNCOMMON, mage.cards.b.BloodsoakedReveler.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bloodsoaked Reveler", 295, Rarity.UNCOMMON, mage.cards.b.BloodsoakedReveler.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Bloodsworn Knight", 289, Rarity.UNCOMMON, mage.cards.b.BloodswornKnight.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Bloodsworn Knight", 97, Rarity.UNCOMMON, mage.cards.b.BloodswornKnight.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bloodsworn Squire", 289, Rarity.UNCOMMON, mage.cards.b.BloodswornSquire.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bloodsworn Squire", 97, Rarity.UNCOMMON, mage.cards.b.BloodswornSquire.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bloodtithe Harvester", 232, Rarity.UNCOMMON, mage.cards.b.BloodtitheHarvester.class, NON_FULL_USE_VARIOUS)); @@ -95,7 +91,6 @@ public final class InnistradCrimsonVow extends ExpansionSet { cards.add(new SetCardInfo("Bramble Wurm", 189, Rarity.UNCOMMON, mage.cards.b.BrambleWurm.class)); cards.add(new SetCardInfo("Bride's Gown", 4, Rarity.UNCOMMON, mage.cards.b.BridesGown.class)); cards.add(new SetCardInfo("Brine Comber", 233, Rarity.UNCOMMON, mage.cards.b.BrineComber.class)); - cards.add(new SetCardInfo("Brinebound Gift", 233, Rarity.UNCOMMON, mage.cards.b.BrineboundGift.class)); cards.add(new SetCardInfo("By Invitation Only", 346, Rarity.RARE, mage.cards.b.ByInvitationOnly.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("By Invitation Only", 5, Rarity.RARE, mage.cards.b.ByInvitationOnly.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Cackling Culprit", 28, Rarity.UNCOMMON, mage.cards.c.CacklingCulprit.class)); @@ -427,7 +422,6 @@ public final class InnistradCrimsonVow extends ExpansionSet { cards.add(new SetCardInfo("Sorin the Mirthless", 297, Rarity.MYTHIC, mage.cards.s.SorinTheMirthless.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Sorin the Mirthless", 337, Rarity.MYTHIC, mage.cards.s.SorinTheMirthless.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Soulcipher Board", 79, Rarity.UNCOMMON, mage.cards.s.SoulcipherBoard.class)); - cards.add(new SetCardInfo("Spectral Binding", 48, Rarity.COMMON, mage.cards.s.SpectralBinding.class)); cards.add(new SetCardInfo("Spiked Ripsaw", 220, Rarity.UNCOMMON, mage.cards.s.SpikedRipsaw.class)); cards.add(new SetCardInfo("Splendid Reclamation", 221, Rarity.RARE, mage.cards.s.SplendidReclamation.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Splendid Reclamation", 393, Rarity.RARE, mage.cards.s.SplendidReclamation.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java b/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java index f55d9f62e91..bd80edda93f 100644 --- a/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java +++ b/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java @@ -56,9 +56,7 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Awoken Demon", 100, Rarity.COMMON, mage.cards.a.AwokenDemon.class)); cards.add(new SetCardInfo("Baithook Angler", 42, Rarity.COMMON, mage.cards.b.BaithookAngler.class)); cards.add(new SetCardInfo("Ballista Watcher", 410, Rarity.UNCOMMON, mage.cards.b.BallistaWatcher.class)); - cards.add(new SetCardInfo("Ballista Wielder", 410, Rarity.UNCOMMON, mage.cards.b.BallistaWielder.class)); cards.add(new SetCardInfo("Baneblade Scoundrel", 85, Rarity.UNCOMMON, mage.cards.b.BanebladeScoundrel.class)); - cards.add(new SetCardInfo("Baneclaw Marauder", 85, Rarity.UNCOMMON, mage.cards.b.BaneclawMarauder.class)); cards.add(new SetCardInfo("Bat Whisperer", 86, Rarity.COMMON, mage.cards.b.BatWhisperer.class)); cards.add(new SetCardInfo("Belligerent Guest", 411, Rarity.COMMON, mage.cards.b.BelligerentGuest.class)); cards.add(new SetCardInfo("Beloved Beggar", 3, Rarity.UNCOMMON, mage.cards.b.BelovedBeggar.class)); @@ -66,7 +64,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Bereaved Survivor", 4, Rarity.UNCOMMON, mage.cards.b.BereavedSurvivor.class)); cards.add(new SetCardInfo("Binding Geist", 315, Rarity.COMMON, mage.cards.b.BindingGeist.class)); cards.add(new SetCardInfo("Biolume Egg", 316, Rarity.UNCOMMON, mage.cards.b.BiolumeEgg.class)); - cards.add(new SetCardInfo("Biolume Serpent", 316, Rarity.UNCOMMON, mage.cards.b.BiolumeSerpent.class)); cards.add(new SetCardInfo("Bird Admirer", 169, Rarity.COMMON, mage.cards.b.BirdAdmirer.class)); cards.add(new SetCardInfo("Bladebrand", 87, Rarity.COMMON, mage.cards.b.Bladebrand.class)); cards.add(new SetCardInfo("Bladestitched Skaab", 212, Rarity.UNCOMMON, mage.cards.b.BladestitchedSkaab.class)); @@ -81,7 +78,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Bloodcrazed Socialite", 363, Rarity.COMMON, mage.cards.b.BloodcrazedSocialite.class)); cards.add(new SetCardInfo("Bloodline Culling", 89, Rarity.RARE, mage.cards.b.BloodlineCulling.class)); cards.add(new SetCardInfo("Bloodsoaked Reveler", 395, Rarity.UNCOMMON, mage.cards.b.BloodsoakedReveler.class)); - cards.add(new SetCardInfo("Bloodsworn Knight", 364, Rarity.UNCOMMON, mage.cards.b.BloodswornKnight.class)); cards.add(new SetCardInfo("Bloodsworn Squire", 364, Rarity.UNCOMMON, mage.cards.b.BloodswornSquire.class)); cards.add(new SetCardInfo("Bloodthirsty Adversary", 129, Rarity.MYTHIC, mage.cards.b.BloodthirstyAdversary.class)); cards.add(new SetCardInfo("Bloodtithe Collector", 90, Rarity.UNCOMMON, mage.cards.b.BloodtitheCollector.class)); @@ -99,7 +95,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Bride's Gown", 271, Rarity.UNCOMMON, mage.cards.b.BridesGown.class)); cards.add(new SetCardInfo("Brimstone Vandal", 130, Rarity.COMMON, mage.cards.b.BrimstoneVandal.class)); cards.add(new SetCardInfo("Brine Comber", 500, Rarity.UNCOMMON, mage.cards.b.BrineComber.class)); - cards.add(new SetCardInfo("Brinebound Gift", 500, Rarity.UNCOMMON, mage.cards.b.BrineboundGift.class)); cards.add(new SetCardInfo("Brood Weaver", 173, Rarity.UNCOMMON, mage.cards.b.BroodWeaver.class)); cards.add(new SetCardInfo("Brutal Cathar", 7, Rarity.RARE, mage.cards.b.BrutalCathar.class)); cards.add(new SetCardInfo("Burly Breaker", 174, Rarity.UNCOMMON, mage.cards.b.BurlyBreaker.class)); @@ -166,7 +161,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Curse of Shaken Faith", 134, Rarity.RARE, mage.cards.c.CurseOfShakenFaith.class)); cards.add(new SetCardInfo("Curse of Silence", 15, Rarity.RARE, mage.cards.c.CurseOfSilence.class)); cards.add(new SetCardInfo("Curse of Surveillance", 46, Rarity.RARE, mage.cards.c.CurseOfSurveillance.class)); - cards.add(new SetCardInfo("Dauntless Avenger", 4, Rarity.UNCOMMON, mage.cards.d.DauntlessAvenger.class)); cards.add(new SetCardInfo("Dawnhart Disciple", 463, Rarity.COMMON, mage.cards.d.DawnhartDisciple.class)); cards.add(new SetCardInfo("Dawnhart Geist", 275, Rarity.UNCOMMON, mage.cards.d.DawnhartGeist.class)); cards.add(new SetCardInfo("Dawnhart Mentor", 179, Rarity.UNCOMMON, mage.cards.d.DawnhartMentor.class)); @@ -191,7 +185,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Dig Up", 464, Rarity.RARE, mage.cards.d.DigUp.class)); cards.add(new SetCardInfo("Dire-Strain Anarchist", 448, Rarity.MYTHIC, mage.cards.d.DireStrainAnarchist.class)); cards.add(new SetCardInfo("Dire-Strain Brawler", 203, Rarity.COMMON, mage.cards.d.DireStrainBrawler.class)); - cards.add(new SetCardInfo("Dire-Strain Demolisher", 174, Rarity.UNCOMMON, mage.cards.d.DireStrainDemolisher.class)); cards.add(new SetCardInfo("Dire-Strain Rampage", 219, Rarity.RARE, mage.cards.d.DireStrainRampage.class)); cards.add(new SetCardInfo("Diregraf Horde", 96, Rarity.COMMON, mage.cards.d.DiregrafHorde.class)); cards.add(new SetCardInfo("Diregraf Rebirth", 220, Rarity.UNCOMMON, mage.cards.d.DiregrafRebirth.class)); @@ -275,7 +268,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Geistflame Reservoir", 142, Rarity.RARE, mage.cards.g.GeistflameReservoir.class)); cards.add(new SetCardInfo("Geistlight Snare", 327, Rarity.UNCOMMON, mage.cards.g.GeistlightSnare.class)); cards.add(new SetCardInfo("Geistwave", 56, Rarity.COMMON, mage.cards.g.Geistwave.class)); - cards.add(new SetCardInfo("Generous Soul", 3, Rarity.UNCOMMON, mage.cards.g.GenerousSoul.class)); cards.add(new SetCardInfo("Geralf, Visionary Stitcher", 328, Rarity.RARE, mage.cards.g.GeralfVisionaryStitcher.class)); cards.add(new SetCardInfo("Ghastly Mimicry", 335, Rarity.RARE, mage.cards.g.GhastlyMimicry.class)); cards.add(new SetCardInfo("Ghostly Castigator", 45, Rarity.UNCOMMON, mage.cards.g.GhostlyCastigator.class)); @@ -398,7 +390,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Mischievous Catgeist", 336, Rarity.UNCOMMON, mage.cards.m.MischievousCatgeist.class)); cards.add(new SetCardInfo("Moldgraf Millipede", 476, Rarity.COMMON, mage.cards.m.MoldgrafMillipede.class)); cards.add(new SetCardInfo("Moonlit Ambusher", 479, Rarity.UNCOMMON, mage.cards.m.MoonlitAmbusher.class)); - cards.add(new SetCardInfo("Moonrage Brute", 7, Rarity.RARE, mage.cards.m.MoonrageBrute.class)); cards.add(new SetCardInfo("Moonrager's Slash", 148, Rarity.COMMON, mage.cards.m.MoonragersSlash.class)); cards.add(new SetCardInfo("Moonsilver Key", 255, Rarity.UNCOMMON, mage.cards.m.MoonsilverKey.class)); cards.add(new SetCardInfo("Moonveil Regent", 149, Rarity.MYTHIC, mage.cards.m.MoonveilRegent.class)); @@ -535,7 +526,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Soul-Guide Gryff", 35, Rarity.COMMON, mage.cards.s.SoulGuideGryff.class)); cards.add(new SetCardInfo("Soulcipher Board", 346, Rarity.UNCOMMON, mage.cards.s.SoulcipherBoard.class)); cards.add(new SetCardInfo("Spectral Adversary", 77, Rarity.MYTHIC, mage.cards.s.SpectralAdversary.class)); - cards.add(new SetCardInfo("Spectral Binding", 315, Rarity.COMMON, mage.cards.s.SpectralBinding.class)); cards.add(new SetCardInfo("Spellrune Howler", 160, Rarity.UNCOMMON, mage.cards.s.SpellruneHowler.class)); cards.add(new SetCardInfo("Spellrune Painter", 160, Rarity.UNCOMMON, mage.cards.s.SpellrunePainter.class)); cards.add(new SetCardInfo("Spiked Ripsaw", 487, Rarity.UNCOMMON, mage.cards.s.SpikedRipsaw.class)); @@ -641,7 +631,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Whispering Wizard", 355, Rarity.UNCOMMON, mage.cards.w.WhisperingWizard.class)); cards.add(new SetCardInfo("Wildsong Howler", 472, Rarity.RARE, mage.cards.w.WildsongHowler.class)); cards.add(new SetCardInfo("Willow Geist", 207, Rarity.RARE, mage.cards.w.WillowGeist.class)); - cards.add(new SetCardInfo("Wing Shredder", 169, Rarity.COMMON, mage.cards.w.WingShredder.class)); cards.add(new SetCardInfo("Winged Portent", 356, Rarity.RARE, mage.cards.w.WingedPortent.class)); cards.add(new SetCardInfo("Winterthorn Blessing", 251, Rarity.UNCOMMON, mage.cards.w.WinterthornBlessing.class)); cards.add(new SetCardInfo("Witch's Web", 494, Rarity.COMMON, mage.cards.w.WitchsWeb.class)); diff --git a/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java b/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java index a26e99da8c4..20fae733aa7 100644 --- a/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java +++ b/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java @@ -61,8 +61,6 @@ public final class InnistradMidnightHunt extends ExpansionSet { cards.add(new SetCardInfo("Baithook Angler", 42, Rarity.COMMON, mage.cards.b.BaithookAngler.class)); cards.add(new SetCardInfo("Baneblade Scoundrel", 289, Rarity.UNCOMMON, mage.cards.b.BanebladeScoundrel.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Baneblade Scoundrel", 85, Rarity.UNCOMMON, mage.cards.b.BanebladeScoundrel.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Baneclaw Marauder", 289, Rarity.UNCOMMON, mage.cards.b.BaneclawMarauder.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Baneclaw Marauder", 85, Rarity.UNCOMMON, mage.cards.b.BaneclawMarauder.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bat Whisperer", 86, Rarity.COMMON, mage.cards.b.BatWhisperer.class)); cards.add(new SetCardInfo("Beloved Beggar", 3, Rarity.UNCOMMON, mage.cards.b.BelovedBeggar.class)); cards.add(new SetCardInfo("Benevolent Geist", 336, Rarity.RARE, mage.cards.b.BenevolentGeist.class, NON_FULL_USE_VARIOUS)); @@ -135,7 +133,6 @@ public final class InnistradMidnightHunt extends ExpansionSet { cards.add(new SetCardInfo("Curse of Silence", 326, Rarity.RARE, mage.cards.c.CurseOfSilence.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Curse of Surveillance", 334, Rarity.RARE, mage.cards.c.CurseOfSurveillance.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Curse of Surveillance", 46, Rarity.RARE, mage.cards.c.CurseOfSurveillance.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Dauntless Avenger", 4, Rarity.UNCOMMON, mage.cards.d.DauntlessAvenger.class)); cards.add(new SetCardInfo("Dawnhart Mentor", 179, Rarity.UNCOMMON, mage.cards.d.DawnhartMentor.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dawnhart Mentor", 300, Rarity.UNCOMMON, mage.cards.d.DawnhartMentor.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dawnhart Rejuvenator", 180, Rarity.COMMON, mage.cards.d.DawnhartRejuvenator.class, NON_FULL_USE_VARIOUS)); @@ -158,8 +155,6 @@ public final class InnistradMidnightHunt extends ExpansionSet { cards.add(new SetCardInfo("Devoted Grafkeeper", 218, Rarity.UNCOMMON, mage.cards.d.DevotedGrafkeeper.class)); cards.add(new SetCardInfo("Dire-Strain Brawler", 203, Rarity.COMMON, mage.cards.d.DireStrainBrawler.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dire-Strain Brawler", 305, Rarity.COMMON, mage.cards.d.DireStrainBrawler.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Dire-Strain Demolisher", 174, Rarity.UNCOMMON, mage.cards.d.DireStrainDemolisher.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Dire-Strain Demolisher", 299, Rarity.UNCOMMON, mage.cards.d.DireStrainDemolisher.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dire-Strain Rampage", 219, Rarity.RARE, mage.cards.d.DireStrainRampage.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Dire-Strain Rampage", 370, Rarity.RARE, mage.cards.d.DireStrainRampage.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Diregraf Horde", 96, Rarity.COMMON, mage.cards.d.DiregrafHorde.class)); @@ -217,7 +212,6 @@ public final class InnistradMidnightHunt extends ExpansionSet { cards.add(new SetCardInfo("Geistflame Reservoir", 142, Rarity.RARE, mage.cards.g.GeistflameReservoir.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Geistflame Reservoir", 355, Rarity.RARE, mage.cards.g.GeistflameReservoir.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Geistwave", 56, Rarity.COMMON, mage.cards.g.Geistwave.class)); - cards.add(new SetCardInfo("Generous Soul", 3, Rarity.UNCOMMON, mage.cards.g.GenerousSoul.class)); cards.add(new SetCardInfo("Ghostly Castigator", 45, Rarity.UNCOMMON, mage.cards.g.GhostlyCastigator.class)); cards.add(new SetCardInfo("Ghoulcaller's Harvest", 225, Rarity.RARE, mage.cards.g.GhoulcallersHarvest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ghoulcaller's Harvest", 372, Rarity.RARE, mage.cards.g.GhoulcallersHarvest.class, NON_FULL_USE_VARIOUS)); @@ -299,8 +293,6 @@ public final class InnistradMidnightHunt extends ExpansionSet { cards.add(new SetCardInfo("Memory Deluge", 337, Rarity.RARE, mage.cards.m.MemoryDeluge.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Memory Deluge", 62, Rarity.RARE, mage.cards.m.MemoryDeluge.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Might of the Old Ways", 189, Rarity.COMMON, mage.cards.m.MightOfTheOldWays.class)); - cards.add(new SetCardInfo("Moonrage Brute", 286, Rarity.RARE, mage.cards.m.MoonrageBrute.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Moonrage Brute", 7, Rarity.RARE, mage.cards.m.MoonrageBrute.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Moonrager's Slash", 148, Rarity.COMMON, mage.cards.m.MoonragersSlash.class)); cards.add(new SetCardInfo("Moonsilver Key", 255, Rarity.UNCOMMON, mage.cards.m.MoonsilverKey.class)); cards.add(new SetCardInfo("Moonveil Regent", 149, Rarity.MYTHIC, mage.cards.m.MoonveilRegent.class, NON_FULL_USE_VARIOUS)); @@ -497,8 +489,6 @@ public final class InnistradMidnightHunt extends ExpansionSet { cards.add(new SetCardInfo("Wake to Slaughter", 376, Rarity.RARE, mage.cards.w.WakeToSlaughter.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Willow Geist", 207, Rarity.RARE, mage.cards.w.WillowGeist.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Willow Geist", 366, Rarity.RARE, mage.cards.w.WillowGeist.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Wing Shredder", 169, Rarity.COMMON, mage.cards.w.WingShredder.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Wing Shredder", 298, Rarity.COMMON, mage.cards.w.WingShredder.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Winterthorn Blessing", 251, Rarity.UNCOMMON, mage.cards.w.WinterthornBlessing.class)); cards.add(new SetCardInfo("Wrenn and Seven", 208, Rarity.MYTHIC, mage.cards.w.WrennAndSeven.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Wrenn and Seven", 278, Rarity.MYTHIC, mage.cards.w.WrennAndSeven.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/InnistradRemastered.java b/Mage.Sets/src/mage/sets/InnistradRemastered.java index b41411ef9b3..57eb522bb7e 100644 --- a/Mage.Sets/src/mage/sets/InnistradRemastered.java +++ b/Mage.Sets/src/mage/sets/InnistradRemastered.java @@ -71,8 +71,6 @@ public class InnistradRemastered extends ExpansionSet { cards.add(new SetCardInfo("Bedlam Reveler", 312, Rarity.RARE, mage.cards.b.BedlamReveler.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Biolume Egg", 455, Rarity.UNCOMMON, mage.cards.b.BiolumeEgg.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Biolume Egg", 54, Rarity.UNCOMMON, mage.cards.b.BiolumeEgg.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Biolume Serpent", 455, Rarity.UNCOMMON, mage.cards.b.BiolumeSerpent.class, RETRO_ART_USE_VARIOUS)); - cards.add(new SetCardInfo("Biolume Serpent", 54, Rarity.UNCOMMON, mage.cards.b.BiolumeSerpent.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bladestitched Skaab", 231, Rarity.UNCOMMON, mage.cards.b.BladestitchedSkaab.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bladestitched Skaab", 426, Rarity.UNCOMMON, mage.cards.b.BladestitchedSkaab.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Blazing Torch", 254, Rarity.COMMON, mage.cards.b.BlazingTorch.class)); @@ -336,9 +334,6 @@ public class InnistradRemastered extends ExpansionSet { cards.add(new SetCardInfo("Lightning Mauler", 399, Rarity.UNCOMMON, mage.cards.l.LightningMauler.class,RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Liliana of the Veil", 475, Rarity.MYTHIC, mage.cards.l.LilianaOfTheVeil.class, RETRO_ART)); cards.add(new SetCardInfo("Lingering Souls", 30, Rarity.UNCOMMON, mage.cards.l.LingeringSouls.class)); - cards.add(new SetCardInfo("Lord of Lineage", 327, Rarity.MYTHIC, mage.cards.l.LordOfLineage.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Lord of Lineage", 461, Rarity.MYTHIC, mage.cards.l.LordOfLineage.class, RETRO_ART_USE_VARIOUS)); - cards.add(new SetCardInfo("Lord of Lineage", 98, Rarity.MYTHIC, mage.cards.l.LordOfLineage.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Lumberknot", 206, Rarity.UNCOMMON, mage.cards.l.Lumberknot.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Lumberknot", 414, Rarity.UNCOMMON, mage.cards.l.Lumberknot.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Luminous Phantom", 32, Rarity.COMMON, mage.cards.l.LuminousPhantom.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/KamigawaNeonDynasty.java b/Mage.Sets/src/mage/sets/KamigawaNeonDynasty.java index c340e16170b..23b270e3e64 100644 --- a/Mage.Sets/src/mage/sets/KamigawaNeonDynasty.java +++ b/Mage.Sets/src/mage/sets/KamigawaNeonDynasty.java @@ -88,7 +88,6 @@ public final class KamigawaNeonDynasty extends ExpansionSet { cards.add(new SetCardInfo("Boseiju, Who Endures", 266, Rarity.RARE, mage.cards.b.BoseijuWhoEndures.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Boseiju, Who Endures", 412, Rarity.RARE, mage.cards.b.BoseijuWhoEndures.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Boseiju, Who Endures", 501, Rarity.RARE, mage.cards.b.BoseijuWhoEndures.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Branch of Boseiju", 177, Rarity.UNCOMMON, mage.cards.b.BranchOfBoseiju.class)); cards.add(new SetCardInfo("Brilliant Restoration", 363, Rarity.RARE, mage.cards.b.BrilliantRestoration.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Brilliant Restoration", 434, Rarity.RARE, mage.cards.b.BrilliantRestoration.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Brilliant Restoration", 7, Rarity.RARE, mage.cards.b.BrilliantRestoration.class, NON_FULL_USE_VARIOUS)); @@ -215,7 +214,6 @@ public final class KamigawaNeonDynasty extends ExpansionSet { cards.add(new SetCardInfo("Hinata, Dawn-Crowned", 487, Rarity.RARE, mage.cards.h.HinataDawnCrowned.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Historian's Wisdom", 192, Rarity.UNCOMMON, mage.cards.h.HistoriansWisdom.class)); cards.add(new SetCardInfo("Hotshot Mechanic", 16, Rarity.UNCOMMON, mage.cards.h.HotshotMechanic.class)); - cards.add(new SetCardInfo("Imperial Moth", 4, Rarity.COMMON, mage.cards.i.ImperialMoth.class)); cards.add(new SetCardInfo("Imperial Oath", 17, Rarity.COMMON, mage.cards.i.ImperialOath.class)); cards.add(new SetCardInfo("Imperial Recovery Unit", 18, Rarity.UNCOMMON, mage.cards.i.ImperialRecoveryUnit.class)); cards.add(new SetCardInfo("Imperial Subduer", 19, Rarity.COMMON, mage.cards.i.ImperialSubduer.class, NON_FULL_USE_VARIOUS)); @@ -581,7 +579,6 @@ public final class KamigawaNeonDynasty extends ExpansionSet { cards.add(new SetCardInfo("Vessel of the All-Consuming", 361, Rarity.MYTHIC, mage.cards.v.VesselOfTheAllConsuming.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Vessel of the All-Consuming", 486, Rarity.MYTHIC, mage.cards.v.VesselOfTheAllConsuming.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Virus Beetle", 128, Rarity.COMMON, mage.cards.v.VirusBeetle.class)); - cards.add(new SetCardInfo("Vision of the Unspeakable", 48, Rarity.UNCOMMON, mage.cards.v.VisionOfTheUnspeakable.class)); cards.add(new SetCardInfo("Voltage Surge", 171, Rarity.COMMON, mage.cards.v.VoltageSurge.class)); cards.add(new SetCardInfo("Walking Skyscraper", 263, Rarity.UNCOMMON, mage.cards.w.WalkingSkyscraper.class)); cards.add(new SetCardInfo("Wanderer's Intervention", 41, Rarity.COMMON, mage.cards.w.WanderersIntervention.class)); diff --git a/Mage.Sets/src/mage/sets/MarchOfTheMachine.java b/Mage.Sets/src/mage/sets/MarchOfTheMachine.java index 4bf01eebfe0..9d1e47d4994 100644 --- a/Mage.Sets/src/mage/sets/MarchOfTheMachine.java +++ b/Mage.Sets/src/mage/sets/MarchOfTheMachine.java @@ -71,7 +71,6 @@ public final class MarchOfTheMachine extends ExpansionSet { cards.add(new SetCardInfo("Bladed Battle-Fan", 91, Rarity.COMMON, mage.cards.b.BladedBattleFan.class)); cards.add(new SetCardInfo("Blighted Burgeoning", 177, Rarity.COMMON, mage.cards.b.BlightedBurgeoning.class)); cards.add(new SetCardInfo("Blightreaper Thallid", 92, Rarity.UNCOMMON, mage.cards.b.BlightreaperThallid.class)); - cards.add(new SetCardInfo("Blightsower Thallid", 92, Rarity.UNCOMMON, mage.cards.b.BlightsowerThallid.class)); cards.add(new SetCardInfo("Bloated Processor", 357, Rarity.RARE, mage.cards.b.BloatedProcessor.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bloated Processor", 93, Rarity.RARE, mage.cards.b.BloatedProcessor.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bloodfeather Phoenix", 132, Rarity.RARE, mage.cards.b.BloodfeatherPhoenix.class, NON_FULL_USE_VARIOUS)); @@ -335,7 +334,6 @@ public final class MarchOfTheMachine extends ExpansionSet { cards.add(new SetCardInfo("Plains", 277, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Plains", 282, Rarity.LAND, mage.cards.basiclands.Plains.class, FULL_ART_BFZ_VARIOUS)); cards.add(new SetCardInfo("Plains", 283, Rarity.LAND, mage.cards.basiclands.Plains.class, FULL_ART_BFZ_VARIOUS)); - cards.add(new SetCardInfo("Plated Kilnbeast", 178, Rarity.COMMON, mage.cards.p.PlatedKilnbeast.class)); cards.add(new SetCardInfo("Polukranos Reborn", 200, Rarity.RARE, mage.cards.p.PolukranosReborn.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Polukranos Reborn", 300, Rarity.RARE, mage.cards.p.PolukranosReborn.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Polukranos, Engine of Ruin", 200, Rarity.RARE, mage.cards.p.PolukranosEngineOfRuin.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/SecretLairDrop.java b/Mage.Sets/src/mage/sets/SecretLairDrop.java index 4e818446f2d..7829f8faafa 100644 --- a/Mage.Sets/src/mage/sets/SecretLairDrop.java +++ b/Mage.Sets/src/mage/sets/SecretLairDrop.java @@ -1062,7 +1062,6 @@ public class SecretLairDrop extends ExpansionSet { cards.add(new SetCardInfo("Esika, God of the Tree", 1155, Rarity.MYTHIC, mage.cards.e.EsikaGodOfTheTree.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Archangel Avacyn", 1156, Rarity.MYTHIC, mage.cards.a.ArchangelAvacyn.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bloodline Keeper", 1157, Rarity.RARE, mage.cards.b.BloodlineKeeper.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Lord of Lineage", 1157, Rarity.RARE, mage.cards.l.LordOfLineage.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nicol Bolas, the Ravager", 1158, Rarity.MYTHIC, mage.cards.n.NicolBolasTheRavager.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nicol Bolas, the Arisen", 1158, Rarity.MYTHIC, mage.cards.n.NicolBolasTheArisen.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Westvale Abbey", 1159, Rarity.RARE, mage.cards.w.WestvaleAbbey.class, NON_FULL_USE_VARIOUS)); @@ -1118,7 +1117,6 @@ public class SecretLairDrop extends ExpansionSet { cards.add(new SetCardInfo("Esika, God of the Tree", 1208, Rarity.MYTHIC, mage.cards.e.EsikaGodOfTheTree.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Archangel Avacyn", 1209, Rarity.MYTHIC, mage.cards.a.ArchangelAvacyn.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Bloodline Keeper", 1210, Rarity.RARE, mage.cards.b.BloodlineKeeper.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Lord of Lineage", 1210, Rarity.RARE, mage.cards.l.LordOfLineage.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nicol Bolas, the Ravager", 1211, Rarity.MYTHIC, mage.cards.n.NicolBolasTheRavager.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nicol Bolas, the Arisen", 1211, Rarity.MYTHIC, mage.cards.n.NicolBolasTheArisen.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Westvale Abbey", 1212, Rarity.RARE, mage.cards.w.WestvaleAbbey.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/ShadowsOfThePast.java b/Mage.Sets/src/mage/sets/ShadowsOfThePast.java index fabcac3daa0..3a9b0e6b694 100644 --- a/Mage.Sets/src/mage/sets/ShadowsOfThePast.java +++ b/Mage.Sets/src/mage/sets/ShadowsOfThePast.java @@ -71,7 +71,6 @@ public class ShadowsOfThePast extends ExpansionSet { cards.add(new SetCardInfo("Invisible Stalker", 17, Rarity.UNCOMMON, mage.cards.i.InvisibleStalker.class)); cards.add(new SetCardInfo("Kruin Outlaw", 42, Rarity.RARE, mage.cards.k.KruinOutlaw.class)); cards.add(new SetCardInfo("Lingering Souls", 9, Rarity.UNCOMMON, mage.cards.l.LingeringSouls.class)); - cards.add(new SetCardInfo("Lord of Lineage", 27, Rarity.MYTHIC, mage.cards.l.LordOfLineage.class)); cards.add(new SetCardInfo("Mayor of Avabruck", 53, Rarity.RARE, mage.cards.m.MayorOfAvabruck.class)); cards.add(new SetCardInfo("Mist Raven", 18, Rarity.COMMON, mage.cards.m.MistRaven.class)); cards.add(new SetCardInfo("Moonmist", 54, Rarity.COMMON, mage.cards.m.Moonmist.class)); diff --git a/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java b/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java index 55ed1c0ae22..b8d99947220 100644 --- a/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java +++ b/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java @@ -222,7 +222,6 @@ public final class ShadowsOverInnistrad extends ExpansionSet { cards.add(new SetCardInfo("Nahiri's Machinations", 28, Rarity.UNCOMMON, mage.cards.n.NahirisMachinations.class)); cards.add(new SetCardInfo("Nahiri, the Harbinger", 247, Rarity.MYTHIC, mage.cards.n.NahiriTheHarbinger.class)); cards.add(new SetCardInfo("Nearheath Chaplain", 29, Rarity.UNCOMMON, mage.cards.n.NearheathChaplain.class)); - cards.add(new SetCardInfo("Neck Breaker", 147, Rarity.UNCOMMON, mage.cards.n.NeckBreaker.class)); cards.add(new SetCardInfo("Neglected Heirloom", 260, Rarity.UNCOMMON, mage.cards.n.NeglectedHeirloom.class)); cards.add(new SetCardInfo("Nephalia Moondrakes", 75, Rarity.RARE, mage.cards.n.NephaliaMoondrakes.class)); cards.add(new SetCardInfo("Niblis of Dusk", 76, Rarity.COMMON, mage.cards.n.NiblisOfDusk.class)); diff --git a/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java b/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java index 05d2e4e429f..5723dfe4319 100644 --- a/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java +++ b/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java @@ -82,8 +82,6 @@ public final class TheLostCavernsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Brackish Blunder", 46, Rarity.COMMON, mage.cards.b.BrackishBlunder.class)); cards.add(new SetCardInfo("Braided Net", 360, Rarity.RARE, mage.cards.b.BraidedNet.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Braided Net", 47, Rarity.RARE, mage.cards.b.BraidedNet.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Braided Quipu", 360, Rarity.RARE, mage.cards.b.BraidedQuipu.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Braided Quipu", 47, Rarity.RARE, mage.cards.b.BraidedQuipu.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Brass's Tunnel-Grinder", 135, Rarity.RARE, mage.cards.b.BrasssTunnelGrinder.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Brass's Tunnel-Grinder", 373, Rarity.RARE, mage.cards.b.BrasssTunnelGrinder.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Brazen Blademaster", 136, Rarity.COMMON, mage.cards.b.BrazenBlademaster.class)); @@ -422,8 +420,6 @@ public final class TheLostCavernsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Tarrian's Soulcleaver", 264, Rarity.RARE, mage.cards.t.TarriansSoulcleaver.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Tarrian's Soulcleaver", 389, Rarity.RARE, mage.cards.t.TarriansSoulcleaver.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Tectonic Hazard", 169, Rarity.COMMON, mage.cards.t.TectonicHazard.class)); - cards.add(new SetCardInfo("Tecutlan, the Searing Rift", 135, Rarity.RARE, mage.cards.t.TecutlanTheSearingRift.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Tecutlan, the Searing Rift", 373, Rarity.RARE, mage.cards.t.TecutlanTheSearingRift.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Temple of Civilization", 26, Rarity.MYTHIC, mage.cards.t.TempleOfCivilization.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Temple of Civilization", 314, Rarity.MYTHIC, mage.cards.t.TempleOfCivilization.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Temple of Cultivation", 204, Rarity.MYTHIC, mage.cards.t.TempleOfCultivation.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/Transformers.java b/Mage.Sets/src/mage/sets/Transformers.java index 9dd2356a746..703a3ac0450 100644 --- a/Mage.Sets/src/mage/sets/Transformers.java +++ b/Mage.Sets/src/mage/sets/Transformers.java @@ -20,7 +20,6 @@ public final class Transformers extends ExpansionSet { this.hasBasicLands = false; cards.add(new SetCardInfo("Arcee, Sharpshooter", 7, Rarity.MYTHIC, mage.cards.a.ArceeSharpshooter.class)); - cards.add(new SetCardInfo("Blitzwing, Adaptive Assailant", 4, Rarity.MYTHIC, mage.cards.b.BlitzwingAdaptiveAssailant.class)); cards.add(new SetCardInfo("Blitzwing, Cruel Tormentor", 4, Rarity.MYTHIC, mage.cards.b.BlitzwingCruelTormentor.class)); cards.add(new SetCardInfo("Cyclonus, Cybertronian Fighter", 9, Rarity.MYTHIC, mage.cards.c.CyclonusCybertronianFighter.class)); cards.add(new SetCardInfo("Cyclonus, the Saboteur", 9, Rarity.MYTHIC, mage.cards.c.CyclonusTheSaboteur.class));