diff --git a/Mage.Sets/src/mage/cards/a/AuroraOfEmrakul.java b/Mage.Sets/src/mage/cards/a/AuroraOfEmrakul.java deleted file mode 100644 index 0ed7789746d..00000000000 --- a/Mage.Sets/src/mage/cards/a/AuroraOfEmrakul.java +++ /dev/null @@ -1,49 +0,0 @@ - -package mage.cards.a; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.common.AttacksTriggeredAbility; -import mage.abilities.effects.common.LoseLifeOpponentsEffect; -import mage.abilities.keyword.DeathtouchAbility; -import mage.abilities.keyword.FlyingAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; - -/** - * - * @author fireshoes - */ -public final class AuroraOfEmrakul extends CardImpl { - - public AuroraOfEmrakul(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},""); - this.subtype.add(SubType.ELDRAZI); - this.subtype.add(SubType.REFLECTION); - this.power = new MageInt(1); - this.toughness = new MageInt(4); - - // this card is the second face of double-faced card - this.nightCard = true; - - // Flying - this.addAbility(FlyingAbility.getInstance()); - - // Deathtouch - this.addAbility(DeathtouchAbility.getInstance()); - - // Whenever Aurora of Emrakul attacks, each opponent loses 3 life. - this.addAbility(new AttacksTriggeredAbility(new LoseLifeOpponentsEffect(3),false)); - } - - private AuroraOfEmrakul(final AuroraOfEmrakul card) { - super(card); - } - - @Override - public AuroraOfEmrakul copy() { - return new AuroraOfEmrakul(this); - } -} diff --git a/Mage.Sets/src/mage/cards/b/BrandedHowler.java b/Mage.Sets/src/mage/cards/b/BrandedHowler.java deleted file mode 100644 index 4aac4619373..00000000000 --- a/Mage.Sets/src/mage/cards/b/BrandedHowler.java +++ /dev/null @@ -1,39 +0,0 @@ -package mage.cards.b; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.common.WerewolfBackTriggeredAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; - -/** - * - * @author fireshoes - */ -public final class BrandedHowler extends CardImpl { - - public BrandedHowler(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(4); - this.color.setRed(true); - - // this card is the second face of double-faced card - this.nightCard = true; - - // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Branded Howler. - this.addAbility(new WerewolfBackTriggeredAbility()); - } - - private BrandedHowler(final BrandedHowler card) { - super(card); - } - - @Override - public BrandedHowler copy() { - return new BrandedHowler(this); - } -} diff --git a/Mage.Sets/src/mage/cards/c/CaptiveWeird.java b/Mage.Sets/src/mage/cards/c/CaptiveWeird.java index 80fd4e22171..c1bcfa2fb5c 100644 --- a/Mage.Sets/src/mage/cards/c/CaptiveWeird.java +++ b/Mage.Sets/src/mage/cards/c/CaptiveWeird.java @@ -1,14 +1,15 @@ package mage.cards.c; -import mage.MageInt; import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.common.TransformIntoSourceTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.ExileTopXMayPlayUntilEffect; import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.keyword.DefenderAbility; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; +import mage.constants.Duration; import mage.constants.SubType; import java.util.UUID; @@ -16,22 +17,33 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class CaptiveWeird extends CardImpl { +public final class CaptiveWeird extends TransformingDoubleFacedCard { public CaptiveWeird(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEIRD}, "{U}", + "Compleated Conjurer", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.PHYREXIAN, SubType.WEIRD}, "UR"); - this.subtype.add(SubType.WEIRD); - this.power = new MageInt(1); - this.toughness = new MageInt(3); - this.secondSideCardClazz = mage.cards.c.CompleatedConjurer.class; + // Captive Weird + this.getLeftHalfCard().setPT(1, 3); // Defender - this.addAbility(DefenderAbility.getInstance()); + this.getLeftHalfCard().addAbility(DefenderAbility.getInstance()); // {3}{R/P}: Transform Captive Weird. Activate only as a sorcery. - this.addAbility(new TransformAbility()); - this.addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{3}{R/P}"))); + this.getLeftHalfCard().addAbility(new ActivateAsSorceryActivatedAbility( + new TransformSourceEffect(), new ManaCostsImpl<>("{3}{R/P}") + )); + + // Compleated Conjurer + this.getRightHalfCard().setPT(3, 3); + + // When this creature transforms into Compleated Conjurer, exile the top card of your library. + // Until the end of your next turn, you may play that card. + this.getRightHalfCard().addAbility(new TransformIntoSourceTriggeredAbility( + new ExileTopXMayPlayUntilEffect(1, Duration.UntilEndOfYourNextTurn) + )); } private CaptiveWeird(final CaptiveWeird card) { diff --git a/Mage.Sets/src/mage/cards/c/CatapultCaptain.java b/Mage.Sets/src/mage/cards/c/CatapultCaptain.java deleted file mode 100644 index 59660863339..00000000000 --- a/Mage.Sets/src/mage/cards/c/CatapultCaptain.java +++ /dev/null @@ -1,53 +0,0 @@ -package mage.cards.c; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.SacrificeTargetCost; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.dynamicvalue.common.SacrificeCostCreaturesToughness; -import mage.abilities.effects.common.LoseLifeTargetEffect; -import mage.constants.SubType; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.filter.StaticFilters; -import mage.target.common.TargetOpponent; - -/** - * - * @author weirddan455 - */ -public final class CatapultCaptain extends CardImpl { - - public CatapultCaptain(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.ZOMBIE); - this.color.setBlack(true); - this.power = new MageInt(2); - this.toughness = new MageInt(6); - - // Back half of Catapult Fodder - this.nightCard = true; - - // {2}{B}, {T}, Sacrifice another creature: Target opponent loses life equal to the sacrificed creature's toughness. - Ability ability = new SimpleActivatedAbility(new LoseLifeTargetEffect(SacrificeCostCreaturesToughness.instance) - .setText("Target opponent loses life equal to the sacrificed creature's toughness"), new ManaCostsImpl<>("{2}{B}")); - ability.addCost(new TapSourceCost()); - ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)); - ability.addTarget(new TargetOpponent()); - this.addAbility(ability); - } - - private CatapultCaptain(final CatapultCaptain card) { - super(card); - } - - @Override - public CatapultCaptain copy() { - return new CatapultCaptain(this); - } -} diff --git a/Mage.Sets/src/mage/cards/c/CatapultFodder.java b/Mage.Sets/src/mage/cards/c/CatapultFodder.java index 97882939d50..99cba995c07 100644 --- a/Mage.Sets/src/mage/cards/c/CatapultFodder.java +++ b/Mage.Sets/src/mage/cards/c/CatapultFodder.java @@ -1,29 +1,36 @@ package mage.cards.c; -import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.dynamicvalue.common.SacrificeCostCreaturesToughness; +import mage.abilities.effects.common.LoseLifeTargetEffect; import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.hint.Hint; import mage.abilities.hint.ValueHint; -import mage.abilities.keyword.TransformAbility; import mage.abilities.triggers.BeginningOfCombatTriggeredAbility; -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.FilterPermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.mageobject.ToughnessGreaterThanPowerPredicate; +import mage.target.common.TargetOpponent; import java.util.UUID; /** * @author weirddan455 */ -public final class CatapultFodder extends CardImpl { +public final class CatapultFodder extends TransformingDoubleFacedCard { private static final FilterPermanent filter = new FilterControlledCreaturePermanent( "you control three or more creatures that each have toughness greater than their power" @@ -39,16 +46,27 @@ public final class CatapultFodder extends CardImpl { ); public CatapultFodder(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.ZOMBIE}, "{2}{B}", + "Catapult Captain", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.ZOMBIE}, "B"); - this.subtype.add(SubType.ZOMBIE); - this.power = new MageInt(1); - this.toughness = new MageInt(5); - this.secondSideCardClazz = mage.cards.c.CatapultCaptain.class; + // Catapult Fodder + this.getLeftHalfCard().setPT(1, 5); // At the beginning of combat on your turn, if you control three or more creatures that each have toughness greater than their power, transform Catapult Fodder. - this.addAbility(new TransformAbility()); - this.addAbility(new BeginningOfCombatTriggeredAbility(new TransformSourceEffect()).withInterveningIf(condition)); + this.getLeftHalfCard().addAbility(new BeginningOfCombatTriggeredAbility(new TransformSourceEffect()).withInterveningIf(condition).addHint(hint)); + + // Catapult Captain + this.getRightHalfCard().setPT(2, 6); + + // {2}{B}, {T}, Sacrifice another creature: Target opponent loses life equal to the sacrificed creature's toughness. + Ability ability = new SimpleActivatedAbility(new LoseLifeTargetEffect(SacrificeCostCreaturesToughness.instance) + .setText("Target opponent loses life equal to the sacrificed creature's toughness"), new ManaCostsImpl<>("{2}{B}")); + ability.addCost(new TapSourceCost()); + ability.addCost(new SacrificeTargetCost(StaticFilters.FILTER_CONTROLLED_ANOTHER_CREATURE)); + ability.addTarget(new TargetOpponent()); + this.getRightHalfCard().addAbility(ability); } private CatapultFodder(final CatapultFodder card) { diff --git a/Mage.Sets/src/mage/cards/c/CecilDarkKnight.java b/Mage.Sets/src/mage/cards/c/CecilDarkKnight.java index f04cf84aa28..b7bc80602c7 100644 --- a/Mage.Sets/src/mage/cards/c/CecilDarkKnight.java +++ b/Mage.Sets/src/mage/cards/c/CecilDarkKnight.java @@ -1,7 +1,7 @@ package mage.cards.c; -import mage.MageInt; import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.DealsDamageSourceTriggeredAbility; import mage.abilities.condition.Condition; import mage.abilities.decorator.ConditionalOneShotEffect; @@ -9,13 +9,17 @@ import mage.abilities.dynamicvalue.common.SavedDamageValue; import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.common.UntapSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilityAllEffect; import mage.abilities.keyword.DeathtouchAbility; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.IndestructibleAbility; +import mage.abilities.keyword.LifelinkAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; +import mage.constants.Duration; import mage.constants.SubType; import mage.constants.SuperType; +import mage.filter.StaticFilters; import mage.game.Controllable; import mage.game.Game; import mage.players.Player; @@ -26,24 +30,21 @@ import java.util.UUID; /** * @author balazskristof */ -public final class CecilDarkKnight extends CardImpl { +public final class CecilDarkKnight extends TransformingDoubleFacedCard { public CecilDarkKnight(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}"); + super(ownerId, setInfo, + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.KNIGHT}, "{B}", + "Cecil, Redeemed Paladin", + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.KNIGHT}, "W"); - this.supertype.add(SuperType.LEGENDARY); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.KNIGHT); - this.power = new MageInt(2); - this.toughness = new MageInt(3); - - this.secondSideCardClazz = mage.cards.c.CecilRedeemedPaladin.class; + // Cecil, Dark Knight + this.getLeftHalfCard().setPT(2, 3); // Deathtouch - this.addAbility(DeathtouchAbility.getInstance()); + this.getLeftHalfCard().addAbility(DeathtouchAbility.getInstance()); // Darkness -- Whenever Cecil deals damage, you lose that much life. Then if your life total is less than or equal to half your starting life total, untap Cecil and transform it. - this.addAbility(new TransformAbility()); Ability ability = new DealsDamageSourceTriggeredAbility(new LoseLifeSourceControllerEffect(SavedDamageValue.MUCH), false).withFlavorWord("Darkness"); ability.addEffect(new ConditionalOneShotEffect( new UntapSourceEffect(), @@ -51,7 +52,19 @@ public final class CecilDarkKnight extends CardImpl { ).addEffect( new TransformSourceEffect(true).concatBy("and") ).concatBy("Then")); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); + + // Cecil, Redeemed Paladin + this.getRightHalfCard().setPT(4, 4); + + // Lifelink + this.getRightHalfCard().addAbility(LifelinkAbility.getInstance()); + + // Protect -- Whenever Cecil attacks, other attacking creatures gain indestructible until end of turn. + this.getRightHalfCard().addAbility(new AttacksTriggeredAbility(new GainAbilityAllEffect( + IndestructibleAbility.getInstance(), Duration.EndOfTurn, + StaticFilters.FILTER_ATTACKING_CREATURES, true + )).withFlavorWord("Protect")); } private CecilDarkKnight(final CecilDarkKnight card) { diff --git a/Mage.Sets/src/mage/cards/c/CecilRedeemedPaladin.java b/Mage.Sets/src/mage/cards/c/CecilRedeemedPaladin.java deleted file mode 100644 index 2e6f4f4999c..00000000000 --- a/Mage.Sets/src/mage/cards/c/CecilRedeemedPaladin.java +++ /dev/null @@ -1,52 +0,0 @@ -package mage.cards.c; - -import java.util.UUID; -import mage.MageInt; -import mage.constants.SubType; -import mage.constants.SuperType; -import mage.filter.StaticFilters; -import mage.abilities.common.AttacksTriggeredAbility; -import mage.abilities.effects.common.continuous.GainAbilityAllEffect; -import mage.abilities.keyword.IndestructibleAbility; -import mage.abilities.keyword.LifelinkAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; - -/** - * @author balazskristof - */ -public final class CecilRedeemedPaladin extends CardImpl { - - public CecilRedeemedPaladin(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.supertype.add(SuperType.LEGENDARY); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.KNIGHT); - this.power = new MageInt(4); - this.toughness = new MageInt(4); - - this.color.setWhite(true); - this.nightCard = true; - - // Lifelink - this.addAbility(LifelinkAbility.getInstance()); - - // Protect -- Whenever Cecil attacks, other attacking creatures gain indestructible until end of turn. - this.addAbility(new AttacksTriggeredAbility(new GainAbilityAllEffect( - IndestructibleAbility.getInstance(), Duration.EndOfTurn, - StaticFilters.FILTER_ATTACKING_CREATURES, true - )).withFlavorWord("Protect")); - } - - private CecilRedeemedPaladin(final CecilRedeemedPaladin card) { - super(card); - } - - @Override - public CecilRedeemedPaladin copy() { - return new CecilRedeemedPaladin(this); - } -} diff --git a/Mage.Sets/src/mage/cards/c/ChaliceOfDeath.java b/Mage.Sets/src/mage/cards/c/ChaliceOfDeath.java deleted file mode 100644 index 7a3263e9c24..00000000000 --- a/Mage.Sets/src/mage/cards/c/ChaliceOfDeath.java +++ /dev/null @@ -1,41 +0,0 @@ - -package mage.cards.c; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.common.LoseLifeTargetEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Zone; -import mage.target.TargetPlayer; - -/** - * - * @author intimidatingant - */ -public final class ChaliceOfDeath extends CardImpl { - - public ChaliceOfDeath(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},""); - - // this card is the second face of double-faced card - this.nightCard = true; - - // {tap}: Target player loses 5 life. - Ability ability = new SimpleActivatedAbility(new LoseLifeTargetEffect(5), new TapSourceCost()); - ability.addTarget(new TargetPlayer()); - this.addAbility(ability); - } - - private ChaliceOfDeath(final ChaliceOfDeath card) { - super(card); - } - - @Override - public ChaliceOfDeath copy() { - return new ChaliceOfDeath(this); - } -} diff --git a/Mage.Sets/src/mage/cards/c/ChaliceOfLife.java b/Mage.Sets/src/mage/cards/c/ChaliceOfLife.java index f809074e503..4a0606729fe 100644 --- a/Mage.Sets/src/mage/cards/c/ChaliceOfLife.java +++ b/Mage.Sets/src/mage/cards/c/ChaliceOfLife.java @@ -6,32 +6,41 @@ import mage.abilities.condition.common.MoreThanStartingLifeTotalCondition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.effects.common.LoseLifeTargetEffect; 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.SubType; +import mage.target.TargetPlayer; import java.util.UUID; /** * @author intimidatingant */ -public final class ChaliceOfLife extends CardImpl { +public final class ChaliceOfLife extends TransformingDoubleFacedCard { public ChaliceOfLife(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); + super(ownerId, setInfo, + new CardType[]{CardType.ARTIFACT}, new SubType[]{}, "{3}", + "Chalice of Death", + new CardType[]{CardType.ARTIFACT}, new SubType[]{}, ""); - this.secondSideCardClazz = mage.cards.c.ChaliceOfDeath.class; - this.addAbility(new TransformAbility()); - - // {tap}: You gain 1 life. Then if you have at least 10 life more than your starting life total, transform Chalice of Life. + // Chalice of Life + // {T}: You gain 1 life. Then if you have at least 10 life more than your starting life total, transform Chalice of Life. Ability ability = new SimpleActivatedAbility(new GainLifeEffect(1), new TapSourceCost()); ability.addEffect(new ConditionalOneShotEffect( new TransformSourceEffect(), MoreThanStartingLifeTotalCondition.TEN, "Then if you have at least 10 life more than your starting life total, transform {this}" )); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); + + // Chalice of Death + // {T}: Target player loses 5 life. + Ability deathAbility = new SimpleActivatedAbility(new LoseLifeTargetEffect(5), new TapSourceCost()); + deathAbility.addTarget(new TargetPlayer()); + this.getRightHalfCard().addAbility(deathAbility); } private ChaliceOfLife(final ChaliceOfLife card) { diff --git a/Mage.Sets/src/mage/cards/c/ChandraFireOfKaladesh.java b/Mage.Sets/src/mage/cards/c/ChandraFireOfKaladesh.java index cbe8871a1aa..2e98d2cdca8 100644 --- a/Mage.Sets/src/mage/cards/c/ChandraFireOfKaladesh.java +++ b/Mage.Sets/src/mage/cards/c/ChandraFireOfKaladesh.java @@ -1,63 +1,79 @@ - package mage.cards.c; -import mage.MageInt; import mage.ObjectColor; import mage.abilities.Ability; +import mage.abilities.LoyaltyAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.SourceDealtDamageCondition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.ExileAndReturnSourceEffect; import mage.abilities.effects.common.UntapSourceEffect; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.*; import mage.filter.FilterSpell; import mage.filter.predicate.mageobject.ColorPredicate; +import mage.game.Game; +import mage.game.command.emblems.ChandraRoaringFlameEmblem; +import mage.players.Player; +import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetPlayerOrPlaneswalker; import mage.watchers.common.DamageDoneWatcher; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; /** * @author LevelX2 */ -public final class ChandraFireOfKaladesh extends CardImpl { +public final class ChandraFireOfKaladesh extends TransformingDoubleFacedCard { private static final FilterSpell filter = new FilterSpell("a red spell"); - - static { - filter.add(new ColorPredicate(ObjectColor.RED)); - } - + static { filter.add(new ColorPredicate(ObjectColor.RED)); } private static final Condition condition = new SourceDealtDamageCondition(3); public ChandraFireOfKaladesh(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}{R}"); - this.supertype.add(SuperType.LEGENDARY); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.SHAMAN); - this.power = new MageInt(2); - this.toughness = new MageInt(2); + super(ownerId, setInfo, + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.SHAMAN}, "{1}{R}{R}", + "Chandra, Roaring Flame", + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.PLANESWALKER}, new SubType[]{SubType.CHANDRA}, "R"); - this.secondSideCardClazz = mage.cards.c.ChandraRoaringFlame.class; + // Chandra, Fire of Kaladesh + this.getLeftHalfCard().setPT(2, 2); // Whenever you cast a red spell, untap Chandra, Fire of Kaladesh. - this.addAbility(new SpellCastControllerTriggeredAbility(new UntapSourceEffect(), filter, false)); + this.getLeftHalfCard().addAbility(new SpellCastControllerTriggeredAbility(new UntapSourceEffect(), filter, false)); - // {T}: Chandra, Fire of Kaladesh deals 1 damage to target player. If Chandra has dealt 3 or more damage this turn, exile her, then return her to the battlefield transformed under her owner's control. - this.addAbility(new TransformAbility()); + // {T}: Chandra, Fire of Kaladesh deals 1 damage to target player or planeswalker. If Chandra has dealt 3 or more damage this turn, exile her, then return her to the battlefield transformed under her owner's control. Ability ability = new SimpleActivatedAbility(new DamageTargetEffect(1), new TapSourceCost()); ability.addEffect(new ConditionalOneShotEffect( new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD_TRANSFORMED, Pronoun.SHE), condition )); ability.addTarget(new TargetPlayerOrPlaneswalker()); - this.addAbility(ability, new DamageDoneWatcher()); + ability.addWatcher(new DamageDoneWatcher()); + this.getLeftHalfCard().addAbility(ability); + + // Chandra, Roaring Flame + this.getRightHalfCard().setStartingLoyalty(4); + + // +1: Chandra, Roaring Flame deals 2 damage to target player or planeswalker. + LoyaltyAbility loyaltyAbility = new LoyaltyAbility(new DamageTargetEffect(2), 1); + loyaltyAbility.addTarget(new TargetPlayerOrPlaneswalker()); + this.getRightHalfCard().addAbility(loyaltyAbility); + + // -2: Chandra, Roaring Flame deals 2 damage to target creature. + loyaltyAbility = new LoyaltyAbility(new DamageTargetEffect(2), -2); + loyaltyAbility.addTarget(new TargetCreaturePermanent()); + this.getRightHalfCard().addAbility(loyaltyAbility); + + // -7: Chandra, Roaring Flame deals 6 damage to each opponent. Each player dealt damage this way gets an emblem with "At the beginning of your upkeep, this emblem deals 3 damage to you." + this.getRightHalfCard().addAbility(new LoyaltyAbility(new ChandraRoaringFlameEmblemEffect(), -7)); } private ChandraFireOfKaladesh(final ChandraFireOfKaladesh card) { @@ -69,3 +85,31 @@ public final class ChandraFireOfKaladesh extends CardImpl { return new ChandraFireOfKaladesh(this); } } + +class ChandraRoaringFlameEmblemEffect extends OneShotEffect { + + ChandraRoaringFlameEmblemEffect() { + super(Outcome.Damage); + this.staticText = "{this} deals 6 damage to each opponent. Each player dealt damage this way gets an emblem with \"At the beginning of your upkeep, this emblem deals 3 damage to you.\""; + } + + private ChandraRoaringFlameEmblemEffect(final ChandraRoaringFlameEmblemEffect effect) { super(effect); } + @Override public ChandraRoaringFlameEmblemEffect copy() { return new ChandraRoaringFlameEmblemEffect(this); } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller == null) { return false; } + List opponentsEmblem = new ArrayList<>(); + for (UUID playerId : game.getOpponents(controller.getId())) { + Player opponent = game.getPlayer(playerId); + if (opponent != null && opponent.damage(6, source, game) > 0) { + opponentsEmblem.add(opponent); + } + } + for (Player opponent : opponentsEmblem) { + game.addEmblem(new ChandraRoaringFlameEmblem(), source.getSourceObject(game), opponent.getId()); + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/c/ChandraRoaringFlame.java b/Mage.Sets/src/mage/cards/c/ChandraRoaringFlame.java deleted file mode 100644 index 9759367aa57..00000000000 --- a/Mage.Sets/src/mage/cards/c/ChandraRoaringFlame.java +++ /dev/null @@ -1,96 +0,0 @@ -package mage.cards.c; - -import mage.abilities.Ability; -import mage.abilities.LoyaltyAbility; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.DamageTargetEffect; -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.game.Game; -import mage.game.command.emblems.ChandraRoaringFlameEmblem; -import mage.players.Player; -import mage.target.common.TargetCreaturePermanent; -import mage.target.common.TargetPlayerOrPlaneswalker; - -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -/** - * @author LevelX2 - */ -public final class ChandraRoaringFlame extends CardImpl { - - public ChandraRoaringFlame(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, ""); - this.supertype.add(SuperType.LEGENDARY); - this.subtype.add(SubType.CHANDRA); - this.color.setRed(true); - - this.nightCard = true; - - this.setStartingLoyalty(4); - - // +1: Chandra, Roaring Flame deals 2 damage to target player. - LoyaltyAbility loyaltyAbility = new LoyaltyAbility(new DamageTargetEffect(2), 1); - loyaltyAbility.addTarget(new TargetPlayerOrPlaneswalker()); - this.addAbility(loyaltyAbility); - - //-2: Chandra, Roaring Flame deals 2 damage to target creature. - loyaltyAbility = new LoyaltyAbility(new DamageTargetEffect(2), -2); - loyaltyAbility.addTarget(new TargetCreaturePermanent()); - this.addAbility(loyaltyAbility); - - //-7: Chandra, Roaring Flame deals 6 damage to each opponent. Each player dealt damage this way gets an emblem with "At the beginning of your upkeep, this emblem deals 3 damage to you." - this.addAbility(new LoyaltyAbility(new ChandraRoaringFlameEmblemEffect(), -7)); - } - - private ChandraRoaringFlame(final ChandraRoaringFlame card) { - super(card); - } - - @Override - public ChandraRoaringFlame copy() { - return new ChandraRoaringFlame(this); - } -} - -class ChandraRoaringFlameEmblemEffect extends OneShotEffect { - - ChandraRoaringFlameEmblemEffect() { - super(Outcome.Damage); - this.staticText = "{this} deals 6 damage to each opponent. Each player dealt damage this way gets an emblem with \"At the beginning of your upkeep, this emblem deals 3 damage to you.\""; - } - - private ChandraRoaringFlameEmblemEffect(final ChandraRoaringFlameEmblemEffect effect) { - super(effect); - } - - @Override - public ChandraRoaringFlameEmblemEffect copy() { - return new ChandraRoaringFlameEmblemEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller == null) { - return false; - } - List opponentsEmblem = new ArrayList<>(); - for (UUID playerId : game.getOpponents(controller.getId())) { - Player opponent = game.getPlayer(playerId); - if (opponent != null && opponent.damage(6, source, game) > 0) { - opponentsEmblem.add(opponent); - } - } - for (Player opponent : opponentsEmblem) { - game.addEmblem(new ChandraRoaringFlameEmblem(), source.getSourceObject(game), opponent.getId()); - } - return false; - } -} diff --git a/Mage.Sets/src/mage/cards/c/ChapelShieldgeist.java b/Mage.Sets/src/mage/cards/c/ChapelShieldgeist.java deleted file mode 100644 index eb0d21c98ca..00000000000 --- a/Mage.Sets/src/mage/cards/c/ChapelShieldgeist.java +++ /dev/null @@ -1,61 +0,0 @@ -package mage.cards.c; - -import mage.MageInt; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; -import mage.abilities.keyword.DisturbAbility; -import mage.abilities.keyword.FirstStrikeAbility; -import mage.abilities.keyword.FlyingAbility; -import mage.abilities.keyword.WardAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.SubType; -import mage.filter.StaticFilters; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class ChapelShieldgeist extends CardImpl { - - public ChapelShieldgeist(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.SPIRIT); - this.subtype.add(SubType.CLERIC); - this.power = new MageInt(2); - this.toughness = new MageInt(1); - this.color.setWhite(true); - this.nightCard = true; - - // Flying - this.addAbility(FlyingAbility.getInstance()); - - // First strike - this.addAbility(FirstStrikeAbility.getInstance()); - - // Each creature you control has ward {1}. - this.addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect( - new WardAbility(new GenericManaCost(1)), Duration.WhileOnBattlefield, - StaticFilters.FILTER_PERMANENT_CREATURE - ).setText("each creature you control has ward {1}. " + - "(Whenever it becomes the target of a spell or ability an opponent controls, " + - "counter it unless that player pays 1.)"))); - - // If Chapel Shieldgeist would be put into a graveyard from anywhere, exile it instead. - this.addAbility(DisturbAbility.makeBackAbility()); - } - - private ChapelShieldgeist(final ChapelShieldgeist card) { - super(card); - } - - @Override - public ChapelShieldgeist copy() { - return new ChapelShieldgeist(this); - } -} diff --git a/Mage.Sets/src/mage/cards/c/ChaplainOfAlms.java b/Mage.Sets/src/mage/cards/c/ChaplainOfAlms.java index a6dd19da76b..85ca185e2b4 100644 --- a/Mage.Sets/src/mage/cards/c/ChaplainOfAlms.java +++ b/Mage.Sets/src/mage/cards/c/ChaplainOfAlms.java @@ -1,39 +1,63 @@ package mage.cards.c; -import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; import mage.abilities.keyword.DisturbAbility; import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.WardAbility; -import mage.cards.CardImpl; 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 TheElk801 */ -public final class ChaplainOfAlms extends CardImpl { +public final class ChaplainOfAlms extends TransformingDoubleFacedCard { public ChaplainOfAlms(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{W}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.CLERIC}, "{W}", + "Chapel Shieldgeist", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.SPIRIT, SubType.CLERIC}, "W"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.CLERIC); - this.power = new MageInt(1); - this.toughness = new MageInt(1); - this.secondSideCardClazz = mage.cards.c.ChapelShieldgeist.class; + // Chaplain of Alms + this.getLeftHalfCard().setPT(1, 1); // First strike - this.addAbility(FirstStrikeAbility.getInstance()); + this.getLeftHalfCard().addAbility(FirstStrikeAbility.getInstance()); // Ward {1} - this.addAbility(new WardAbility(new ManaCostsImpl<>("{1}"))); + this.getLeftHalfCard().addAbility(new WardAbility(new ManaCostsImpl<>("{1}"))); // Disturb {3}{W} - this.addAbility(new DisturbAbility(this, "{3}{W}")); + this.getLeftHalfCard().addAbility(new DisturbAbility(this, "{3}{W}")); + + // Chapel Shieldgeist + this.getRightHalfCard().setPT(2, 1); + + // Flying + this.getRightHalfCard().addAbility(FlyingAbility.getInstance()); + + // First strike + this.getRightHalfCard().addAbility(FirstStrikeAbility.getInstance()); + + // Each creature you control has ward {1}. + this.getRightHalfCard().addAbility(new SimpleStaticAbility(new GainAbilityControlledEffect( + new WardAbility(new GenericManaCost(1)), Duration.WhileOnBattlefield, + StaticFilters.FILTER_PERMANENT_CREATURE + ).setText("each creature you control has ward {1}. " + + "(Whenever it becomes the target of a spell or ability an opponent controls, counter it unless that player pays 1.)"))); + + // If Chapel Shieldgeist would be put into a graveyard from anywhere, exile it instead. + this.getRightHalfCard().addAbility(DisturbAbility.makeBackAbility()); } private ChaplainOfAlms(final ChaplainOfAlms card) { diff --git a/Mage.Sets/src/mage/cards/c/ChildOfThePack.java b/Mage.Sets/src/mage/cards/c/ChildOfThePack.java index ca2629315df..c1754ce6e31 100644 --- a/Mage.Sets/src/mage/cards/c/ChildOfThePack.java +++ b/Mage.Sets/src/mage/cards/c/ChildOfThePack.java @@ -1,13 +1,17 @@ package mage.cards.c; -import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.keyword.DayboundAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.NightboundAbility; +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.game.permanent.token.WolfToken; @@ -16,24 +20,38 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class ChildOfThePack extends CardImpl { +public final class ChildOfThePack extends TransformingDoubleFacedCard { public ChildOfThePack(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{G}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{2}{R}{G}", + "Savage Packmate", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "RG"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.WEREWOLF); - this.power = new MageInt(2); - this.toughness = new MageInt(5); - this.secondSideCardClazz = mage.cards.s.SavagePackmate.class; + // Child of the Pack + this.getLeftHalfCard().setPT(2, 5); // {2}{R}{G}: Create a 2/2 green Wolf creature token. - this.addAbility(new SimpleActivatedAbility( + this.getLeftHalfCard().addAbility(new SimpleActivatedAbility( new CreateTokenEffect(new WolfToken()), new ManaCostsImpl<>("{2}{R}{G}") )); // Daybound - this.addAbility(new DayboundAbility()); + this.getLeftHalfCard().addAbility(new DayboundAbility()); + + // Savage Packmate + this.getRightHalfCard().setPT(5, 5); + + // Trample + this.getRightHalfCard().addAbility(TrampleAbility.getInstance()); + + // Other creatures you control get +1/+0. + this.getRightHalfCard().addAbility(new SimpleStaticAbility(new BoostControlledEffect( + 1, 0, Duration.WhileOnBattlefield, true + ))); + + // Nightbound + this.getRightHalfCard().addAbility(new NightboundAbility()); } private ChildOfThePack(final ChildOfThePack card) { diff --git a/Mage.Sets/src/mage/cards/c/ChosenOfMarkov.java b/Mage.Sets/src/mage/cards/c/ChosenOfMarkov.java index d0d6472ed4e..cd0f5171507 100644 --- a/Mage.Sets/src/mage/cards/c/ChosenOfMarkov.java +++ b/Mage.Sets/src/mage/cards/c/ChosenOfMarkov.java @@ -1,28 +1,25 @@ - package mage.cards.c; -import java.util.UUID; - -import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.common.TapTargetCost; 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.SubType; -import mage.constants.Zone; import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.permanent.TappedPredicate; import mage.target.common.TargetControlledPermanent; +import java.util.UUID; + /** * @author Loki */ -public final class ChosenOfMarkov extends CardImpl { +public final class ChosenOfMarkov extends TransformingDoubleFacedCard { + private static final FilterControlledPermanent filter = new FilterControlledPermanent("untapped Vampire you control"); static { @@ -31,27 +28,28 @@ public final class ChosenOfMarkov extends CardImpl { } public ChosenOfMarkov(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); - this.subtype.add(SubType.HUMAN); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN}, "{2}{B}", + "Markov's Servant", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.VAMPIRE}, "B"); - this.power = new MageInt(2); - this.toughness = new MageInt(2); + // Chosen of Markov + this.getLeftHalfCard().setPT(2, 2); - this.secondSideCardClazz = mage.cards.m.MarkovsServant.class; - - // {tap}, Tap an untapped Vampire you control: Transform Chosen of Markov. - this.addAbility(new TransformAbility()); + // {T}, Tap an untapped Vampire you control: Transform Chosen of Markov. Ability ability = new SimpleActivatedAbility(new TransformSourceEffect(), new TapSourceCost()); ability.addCost(new TapTargetCost(new TargetControlledPermanent(filter))); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); + + // Markov's Servant + this.getRightHalfCard().setPT(4, 4); } private ChosenOfMarkov(final ChosenOfMarkov card) { super(card); } - @Override - public ChosenOfMarkov copy() { + @Override public ChosenOfMarkov copy() { return new ChosenOfMarkov(this); } } diff --git a/Mage.Sets/src/mage/cards/c/CivilizedScholar.java b/Mage.Sets/src/mage/cards/c/CivilizedScholar.java index 9d9315204fe..a0c955d1e80 100644 --- a/Mage.Sets/src/mage/cards/c/CivilizedScholar.java +++ b/Mage.Sets/src/mage/cards/c/CivilizedScholar.java @@ -1,15 +1,20 @@ package mage.cards.c; -import mage.MageInt; import mage.abilities.Ability; +import mage.abilities.TriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.condition.Condition; +import mage.abilities.condition.InvertCondition; +import mage.abilities.condition.common.AttackedThisTurnSourceCondition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.keyword.TransformAbility; +import mage.abilities.effects.common.TapSourceEffect; +import mage.abilities.effects.common.TransformSourceEffect; +import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility; import mage.cards.Card; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.SubType; @@ -22,23 +27,33 @@ import java.util.UUID; /** * @author nantuko */ -public final class CivilizedScholar extends CardImpl { +public final class CivilizedScholar extends TransformingDoubleFacedCard { + + private static final Condition condition = new InvertCondition( + AttackedThisTurnSourceCondition.instance, "{this} didn't attack this turn" + ); public CivilizedScholar(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.ADVISOR); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.ADVISOR}, "{2}{U}", + "Homicidal Brute", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.MUTANT}, "R"); - this.secondSideCardClazz = mage.cards.h.HomicidalBrute.class; + // Civilized Scholar + this.getLeftHalfCard().setPT(0, 1); - this.power = new MageInt(0); - this.toughness = new MageInt(1); - - // {tap}: Draw a card, then discard a card. If a creature card is discarded this way, untap Civilized Scholar, then transform it. + // {T}: Draw a card, then discard a card. If a creature card is discarded this way, untap Civilized Scholar, then transform it. Ability ability = new SimpleActivatedAbility(new DrawCardSourceControllerEffect(1), new TapSourceCost()); ability.addEffect(new CivilizedScholarEffect()); - this.addAbility(new TransformAbility()); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); + + // Homicidal Brute + this.getRightHalfCard().setPT(5, 1); + + // At the beginning of your end step, if Homicidal Brute didn't attack this turn, tap Homicidal Brute, then transform it. + TriggeredAbility bruteAbility = new BeginningOfEndStepTriggeredAbility(new TapSourceEffect()); + bruteAbility.addEffect(new TransformSourceEffect().setText(", then transform it")); + this.getRightHalfCard().addAbility(bruteAbility.withInterveningIf(condition)); } private CivilizedScholar(final CivilizedScholar card) { @@ -51,7 +66,6 @@ public final class CivilizedScholar extends CardImpl { } } - class CivilizedScholarEffect extends OneShotEffect { CivilizedScholarEffect() { diff --git a/Mage.Sets/src/mage/cards/c/ClayFiredBricks.java b/Mage.Sets/src/mage/cards/c/ClayFiredBricks.java index 06cc8042fe6..7a5ca0af04b 100644 --- a/Mage.Sets/src/mage/cards/c/ClayFiredBricks.java +++ b/Mage.Sets/src/mage/cards/c/ClayFiredBricks.java @@ -2,13 +2,19 @@ package mage.cards.c; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; 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.SubType; import mage.filter.StaticFilters; +import mage.game.permanent.token.GnomeToken; import mage.target.common.TargetCardInLibrary; import java.util.UUID; @@ -16,21 +22,33 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class ClayFiredBricks extends CardImpl { +public final class ClayFiredBricks extends TransformingDoubleFacedCard { public ClayFiredBricks(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}{W}"); - this.secondSideCardClazz = mage.cards.c.CosmiumKiln.class; + super(ownerId, setInfo, + new CardType[]{CardType.ARTIFACT}, new SubType[]{}, "{1}{W}", + "Cosmium Kiln", + new CardType[]{CardType.ARTIFACT}, new SubType[]{}, "W"); + + // Clay-Fired Bricks // When Clay-Fired Bricks enters the battlefield, search your library for a basic Plains card, reveal it, put it into your hand, then shuffle. You gain 2 life. Ability ability = new EntersBattlefieldTriggeredAbility( new SearchLibraryPutInHandEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_PLAINS), true) ); ability.addEffect(new GainLifeEffect(2)); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); // Craft with artifact {5}{W}{W} - this.addAbility(new CraftAbility("{5}{W}{W}")); + this.getLeftHalfCard().addAbility(new CraftAbility("{5}{W}{W}")); + + // Cosmium Kiln + + // When Cosmium Kiln enters the battlefield, create two 1/1 colorless Gnome artifact creature tokens. + this.getRightHalfCard().addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new GnomeToken(), 2))); + + // Creatures you control get +1/+1. + this.getRightHalfCard().addAbility(new SimpleStaticAbility(new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield))); } private ClayFiredBricks(final ClayFiredBricks card) { diff --git a/Mage.Sets/src/mage/cards/c/CliveIfritsDominant.java b/Mage.Sets/src/mage/cards/c/CliveIfritsDominant.java index 8a18243df9c..c515b0799ed 100644 --- a/Mage.Sets/src/mage/cards/c/CliveIfritsDominant.java +++ b/Mage.Sets/src/mage/cards/c/CliveIfritsDominant.java @@ -1,54 +1,85 @@ package mage.cards.c; -import mage.MageInt; +import mage.Mana; import mage.abilities.Ability; import mage.abilities.common.ActivateAsSorceryActivatedAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SagaAbility; +import mage.abilities.condition.Condition; +import mage.abilities.condition.common.SourceHasCounterCondition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.decorator.ConditionalOneShotEffect; import mage.abilities.dynamicvalue.common.DevotionCount; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.ExileAndReturnSourceEffect; +import mage.abilities.effects.common.FightTargetSourceEffect; import mage.abilities.effects.common.discard.DiscardHandControllerEffect; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.effects.mana.BasicManaEffect; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.PutCards; -import mage.constants.SubType; -import mage.constants.SuperType; +import mage.cards.TransformingDoubleFacedCard; +import mage.constants.*; +import mage.counters.CounterType; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.target.TargetPermanent; import java.util.UUID; /** * @author TheElk801 */ -public final class CliveIfritsDominant extends CardImpl { +public final class CliveIfritsDominant extends TransformingDoubleFacedCard { + + private static final FilterPermanent filter = new FilterCreaturePermanent("other target creature"); + private static final Condition condition = new SourceHasCounterCondition(CounterType.LORE, 3); public CliveIfritsDominant(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}{R}"); + super(ownerId, setInfo, + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.NOBLE, SubType.WARRIOR}, "{4}{R}{R}", + "Ifrit, Warden of Inferno", + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, new SubType[]{SubType.SAGA, SubType.DEMON}, "R"); - this.supertype.add(SuperType.LEGENDARY); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.NOBLE); - this.subtype.add(SubType.WARRIOR); - this.power = new MageInt(5); - this.toughness = new MageInt(5); - this.secondSideCardClazz = mage.cards.i.IfritWardenOfInferno.class; + // Clive, Ifrit's Dominant + this.getLeftHalfCard().setPT(5, 5); // When Clive enters, you may discard your hand, then draw cards equal to your devotion to red. Ability ability = new EntersBattlefieldTriggeredAbility(new DiscardHandControllerEffect(), true); ability.addEffect(new DrawCardSourceControllerEffect(DevotionCount.R) .setText(", then draw cards equal to your devotion to red")); - this.addAbility(ability.addHint(DevotionCount.R.getHint())); + this.getLeftHalfCard().addAbility(ability.addHint(DevotionCount.R.getHint())); // {4}{R}{R}, {T}: Exile Clive, then return it to the battlefield transformed under its owner's control. Activate only as a sorcery. - this.addAbility(new TransformAbility()); ability = new ActivateAsSorceryActivatedAbility( new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD_TRANSFORMED), new ManaCostsImpl<>("{4}{R}{R}") ); ability.addCost(new TapSourceCost()); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); + + + // Ifrit, Warden of Inferno + this.getRightHalfCard().setPT(9, 9); + + // Saga (chapters) + SagaAbility sagaAbility = new SagaAbility(this.getRightHalfCard()); + + // I -- Lunge -- Ifrit fights up to one other target creature. + sagaAbility.addChapterEffect(this.getRightHalfCard(), SagaChapter.CHAPTER_I, sagaChapterAbility -> { + sagaChapterAbility.addEffect(new FightTargetSourceEffect()); + sagaChapterAbility.addTarget(new TargetPermanent(0, 1, filter)); + sagaChapterAbility.withFlavorWord("Lunge"); + }); + + // II, III -- Brimstone -- Add {R}{R}{R}{R}. If Ifrit has three or more lore counters on it, exile it, then return it to the battlefield (front face up.) + sagaAbility.addChapterEffect(this.getRightHalfCard(), SagaChapter.CHAPTER_II, SagaChapter.CHAPTER_III, sagaChapterAbility -> { + sagaChapterAbility.addEffect(new BasicManaEffect(Mana.RedMana(4))); + sagaChapterAbility.addEffect(new ConditionalOneShotEffect( + new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD), condition, + "If {this} has three or more lore counters on it, exile it, then return it to the battlefield. (front face up.)" + )); + sagaChapterAbility.withFlavorWord("Brimstone"); + }); + this.getRightHalfCard().addAbility(sagaAbility); } private CliveIfritsDominant(final CliveIfritsDominant card) { diff --git a/Mage.Sets/src/mage/cards/c/CloisteredYouth.java b/Mage.Sets/src/mage/cards/c/CloisteredYouth.java index def252da59e..bd8a283dccf 100644 --- a/Mage.Sets/src/mage/cards/c/CloisteredYouth.java +++ b/Mage.Sets/src/mage/cards/c/CloisteredYouth.java @@ -1,34 +1,38 @@ - package mage.cards.c; -import java.util.UUID; - -import mage.MageInt; -import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; import mage.abilities.effects.common.TransformSourceEffect; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility; +import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; +import java.util.UUID; + /** * @author Loki */ -public final class CloisteredYouth extends CardImpl { +public final class CloisteredYouth extends TransformingDoubleFacedCard { public CloisteredYouth(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); - this.subtype.add(SubType.HUMAN); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN}, "{1}{W}", + "Unholy Fiend", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HORROR}, "B"); - this.power = new MageInt(1); - this.toughness = new MageInt(1); - - this.secondSideCardClazz = mage.cards.u.UnholyFiend.class; + // Cloistered Youth + this.getLeftHalfCard().setPT(1, 1); // At the beginning of your upkeep, you may transform Cloistered Youth. - this.addAbility(new TransformAbility()); - this.addAbility(new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect(), true)); + this.getLeftHalfCard().addAbility(new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect(), true)); + + // Unholy Fiend + this.getRightHalfCard().setPT(3, 3); + + // At the beginning of your end step, you lose 1 life. + this.getRightHalfCard().addAbility(new BeginningOfEndStepTriggeredAbility(new LoseLifeSourceControllerEffect(1))); } private CloisteredYouth(final CloisteredYouth card) { diff --git a/Mage.Sets/src/mage/cards/c/CompleatedConjurer.java b/Mage.Sets/src/mage/cards/c/CompleatedConjurer.java deleted file mode 100644 index de01acadbb5..00000000000 --- a/Mage.Sets/src/mage/cards/c/CompleatedConjurer.java +++ /dev/null @@ -1,44 +0,0 @@ -package mage.cards.c; - -import mage.MageInt; -import mage.abilities.common.TransformIntoSourceTriggeredAbility; -import mage.abilities.effects.common.ExileTopXMayPlayUntilEffect; -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 CompleatedConjurer extends CardImpl { - - public CompleatedConjurer(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.PHYREXIAN); - this.subtype.add(SubType.WEIRD); - this.power = new MageInt(3); - this.toughness = new MageInt(3); - this.color.setBlue(true); - this.color.setRed(true); - this.nightCard = true; - - // When this creature transforms into Compleated Conjurer, exile the top card of your library. Until the end of your next turn, you may play that card. - this.addAbility(new TransformIntoSourceTriggeredAbility( - new ExileTopXMayPlayUntilEffect(1, Duration.UntilEndOfYourNextTurn) - )); - } - - private CompleatedConjurer(final CompleatedConjurer card) { - super(card); - } - - @Override - public CompleatedConjurer copy() { - return new CompleatedConjurer(this); - } -} diff --git a/Mage.Sets/src/mage/cards/c/ConcealingCurtains.java b/Mage.Sets/src/mage/cards/c/ConcealingCurtains.java index ced78dc8f37..bb17274ce09 100644 --- a/Mage.Sets/src/mage/cards/c/ConcealingCurtains.java +++ b/Mage.Sets/src/mage/cards/c/ConcealingCurtains.java @@ -1,39 +1,58 @@ package mage.cards.c; -import mage.MageInt; +import mage.abilities.Ability; import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.common.TransformIntoSourceTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.keyword.DefenderAbility; -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.Outcome; import mage.constants.SubType; +import mage.constants.Zone; +import mage.filter.StaticFilters; +import mage.players.Player; +import mage.target.TargetCard; +import mage.target.common.TargetOpponent; import java.util.UUID; /** * @author TheElk801 */ -public final class ConcealingCurtains extends CardImpl { +public final class ConcealingCurtains extends TransformingDoubleFacedCard { public ConcealingCurtains(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{B}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WALL}, "{B}", + "Revealing Eye", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.EYE, SubType.HORROR}, "B"); - this.subtype.add(SubType.WALL); - this.power = new MageInt(0); - this.toughness = new MageInt(4); - this.secondSideCardClazz = mage.cards.r.RevealingEye.class; + // Concealing Curtains + this.getLeftHalfCard().setPT(0, 4); // Defender - this.addAbility(DefenderAbility.getInstance()); + this.getLeftHalfCard().addAbility(DefenderAbility.getInstance()); // {2}{B}: Transform Concealing Curtains. Activate only as a sorcery. - this.addAbility(new TransformAbility()); - this.addAbility(new ActivateAsSorceryActivatedAbility( + this.getLeftHalfCard().addAbility(new ActivateAsSorceryActivatedAbility( new TransformSourceEffect(), new ManaCostsImpl<>("{2}{B}") )); + + // Revealing Eye + this.getRightHalfCard().setPT(3, 4); + + // Menace + this.getRightHalfCard().addAbility(new MenaceAbility(false)); + + // When this creature transforms into Revealing Eye, target opponent reveals their hand. You may choose a nonland card from it. If you do, that player discards that card, then draws a card. + Ability ability = new TransformIntoSourceTriggeredAbility(new RevealingEyeEffect()); + ability.addTarget(new TargetOpponent()); + this.getRightHalfCard().addAbility(ability); } private ConcealingCurtains(final ConcealingCurtains card) { @@ -45,3 +64,43 @@ public final class ConcealingCurtains extends CardImpl { return new ConcealingCurtains(this); } } + +class RevealingEyeEffect extends OneShotEffect { + + RevealingEyeEffect() { + super(Outcome.Discard); + staticText = "target opponent reveals their hand. You may choose a nonland card from it. " + + "If you do, that player discards that card, then draws a card"; + } + + private RevealingEyeEffect(final RevealingEyeEffect effect) { + super(effect); + } + + @Override + public RevealingEyeEffect copy() { + return new RevealingEyeEffect(this); + } + + @Override + public boolean apply(mage.game.Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + Player opponent = game.getPlayer(source.getFirstTarget()); + if (controller == null || opponent == null) { + return false; + } + opponent.revealCards(source, opponent.getHand(), game); + if (opponent.getHand().count(StaticFilters.FILTER_CARD_NON_LAND, game) < 1) { + return true; + } + TargetCard target = new TargetCard(0, 1, Zone.HAND, StaticFilters.FILTER_CARD_NON_LAND); + controller.choose(outcome, opponent.getHand(), target, source, game); + mage.cards.Card card = game.getCard(target.getFirstTarget()); + if (card == null) { + return true; + } + opponent.discard(card, false, source, game); + opponent.drawCards(1, source, game); + return true; + } +} diff --git a/Mage.Sets/src/mage/cards/c/ConduitOfEmrakul.java b/Mage.Sets/src/mage/cards/c/ConduitOfEmrakul.java deleted file mode 100644 index ec2a8fc337e..00000000000 --- a/Mage.Sets/src/mage/cards/c/ConduitOfEmrakul.java +++ /dev/null @@ -1,49 +0,0 @@ -package mage.cards.c; - -import mage.MageInt; -import mage.Mana; -import mage.abilities.common.AttacksTriggeredAbility; -import mage.abilities.common.delayed.AtTheBeginOfMainPhaseDelayedTriggeredAbility; -import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; -import mage.abilities.effects.mana.AddManaToManaPoolSourceControllerEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.TargetController; - -import java.util.UUID; - -/** - * @author LevelX2 - */ -public final class ConduitOfEmrakul extends CardImpl { - - public ConduitOfEmrakul(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - this.subtype.add(SubType.ELDRAZI); - this.subtype.add(SubType.WEREWOLF); - this.power = new MageInt(5); - this.toughness = new MageInt(4); - - // this card is the second face of double-faced card - this.nightCard = true; - - // Whenever Conduit of Emrakul attacks, add {C}{C} at the beginning of your next main phase this turn. - this.addAbility(new AttacksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect( - new AtTheBeginOfMainPhaseDelayedTriggeredAbility( - new AddManaToManaPoolSourceControllerEffect(Mana.GenericMana(2)), false, - TargetController.YOU, AtTheBeginOfMainPhaseDelayedTriggeredAbility.PhaseSelection.NEXT_MAIN_THIS_TURN - ) - ).setText("add {C}{C} at the beginning of your next main phase this turn"), false)); - } - - private ConduitOfEmrakul(final ConduitOfEmrakul card) { - super(card); - } - - @Override - public ConduitOfEmrakul copy() { - return new ConduitOfEmrakul(this); - } -} diff --git a/Mage.Sets/src/mage/cards/c/ConduitOfStorms.java b/Mage.Sets/src/mage/cards/c/ConduitOfStorms.java index 0fdf2d7098f..1e9ea59ceb0 100644 --- a/Mage.Sets/src/mage/cards/c/ConduitOfStorms.java +++ b/Mage.Sets/src/mage/cards/c/ConduitOfStorms.java @@ -1,6 +1,5 @@ package mage.cards.c; -import mage.MageInt; import mage.Mana; import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; @@ -9,9 +8,8 @@ import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.effects.mana.AddManaToManaPoolSourceControllerEffect; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.TargetController; @@ -21,19 +19,19 @@ import java.util.UUID; /** * @author LevelX2 */ -public final class ConduitOfStorms extends CardImpl { +public final class ConduitOfStorms extends TransformingDoubleFacedCard { public ConduitOfStorms(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}"); - this.subtype.add(SubType.WEREWOLF); - this.subtype.add(SubType.HORROR); - this.power = new MageInt(2); - this.toughness = new MageInt(3); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF, SubType.HORROR}, "{2}{R}", + "Conduit of Emrakul", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.ELDRAZI, SubType.WEREWOLF}, ""); - this.secondSideCardClazz = mage.cards.c.ConduitOfEmrakul.class; + // Conduit of Storms + this.getLeftHalfCard().setPT(2, 3); // Whenever Conduit of Storms attacks, add {R} at the beginning of your next main phase this turn. - this.addAbility(new AttacksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect( + this.getLeftHalfCard().addAbility(new AttacksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect( new AtTheBeginOfMainPhaseDelayedTriggeredAbility( new AddManaToManaPoolSourceControllerEffect(Mana.RedMana(1)), false, TargetController.YOU, AtTheBeginOfMainPhaseDelayedTriggeredAbility.PhaseSelection.NEXT_MAIN_THIS_TURN @@ -41,8 +39,18 @@ public final class ConduitOfStorms extends CardImpl { ).setText("add {R} at the beginning of your next main phase this turn"), false)); // {3}{R}{R}: Transform Conduit of Storms. - this.addAbility(new TransformAbility()); - this.addAbility(new SimpleActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{3}{R}{R}"))); + this.getLeftHalfCard().addAbility(new SimpleActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{3}{R}{R}"))); + + // Conduit of Emrakul + this.getRightHalfCard().setPT(5, 4); + + // Whenever Conduit of Emrakul attacks, add {C}{C} at the beginning of your next main phase this turn. + this.getRightHalfCard().addAbility(new AttacksTriggeredAbility(new CreateDelayedTriggeredAbilityEffect( + new AtTheBeginOfMainPhaseDelayedTriggeredAbility( + new AddManaToManaPoolSourceControllerEffect(Mana.GenericMana(2)), false, + TargetController.YOU, AtTheBeginOfMainPhaseDelayedTriggeredAbility.PhaseSelection.NEXT_MAIN_THIS_TURN + ) + ).setText("add {C}{C} at the beginning of your next main phase this turn"), false)); } private ConduitOfStorms(final ConduitOfStorms card) { diff --git a/Mage.Sets/src/mage/cards/c/ConquerorsFoothold.java b/Mage.Sets/src/mage/cards/c/ConquerorsFoothold.java deleted file mode 100644 index aa342858ef5..00000000000 --- a/Mage.Sets/src/mage/cards/c/ConquerorsFoothold.java +++ /dev/null @@ -1,63 +0,0 @@ - -package mage.cards.c; - -import java.util.UUID; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.effects.common.DrawDiscardControllerEffect; -import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; -import mage.abilities.mana.ColorlessManaAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Zone; -import mage.target.common.TargetCardInYourGraveyard; - -/** - * - * @author TheElk801 - */ -public final class ConquerorsFoothold extends CardImpl { - - public ConquerorsFoothold(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); - - this.nightCard = true; - - // {T}: Add {C}. - this.addAbility(new ColorlessManaAbility()); - - // {2}, {T}: Draw a card, then discard a card. - SimpleActivatedAbility ability = new SimpleActivatedAbility( - new DrawDiscardControllerEffect(), - new ManaCostsImpl<>("{2}")); - ability.addCost(new TapSourceCost()); - this.addAbility(ability); - - // {4}, {T}: Draw a card. - SimpleActivatedAbility ability2 = new SimpleActivatedAbility( - new DrawCardSourceControllerEffect(1), - new ManaCostsImpl<>("{4}")); - ability2.addCost(new TapSourceCost()); - this.addAbility(ability2); - - // {6}, {T}: Return target card from your graveyard to your hand. - SimpleActivatedAbility ability3 = new SimpleActivatedAbility( - new ReturnFromGraveyardToHandTargetEffect(), - new ManaCostsImpl<>("{6}")); - ability3.addCost(new TapSourceCost()); - ability3.addTarget(new TargetCardInYourGraveyard()); - this.addAbility(ability3); - } - - private ConquerorsFoothold(final ConquerorsFoothold card) { - super(card); - } - - @Override - public ConquerorsFoothold copy() { - return new ConquerorsFoothold(this); - } -} diff --git a/Mage.Sets/src/mage/cards/c/ConquerorsGalleon.java b/Mage.Sets/src/mage/cards/c/ConquerorsGalleon.java index 7c8bcf607a3..dc788fa0b5a 100644 --- a/Mage.Sets/src/mage/cards/c/ConquerorsGalleon.java +++ b/Mage.Sets/src/mage/cards/c/ConquerorsGalleon.java @@ -1,48 +1,69 @@ package mage.cards.c; -import mage.MageInt; -import mage.constants.Pronoun; import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; -import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; -import mage.abilities.effects.common.ExileAndReturnSourceEffect; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.*; import mage.abilities.keyword.CrewAbility; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.mana.ColorlessManaAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; +import mage.constants.Pronoun; import mage.constants.PutCards; import mage.constants.SubType; +import mage.target.common.TargetCardInYourGraveyard; import java.util.UUID; /** * @author TheElk801 */ -public final class ConquerorsGalleon extends CardImpl { +public final class ConquerorsGalleon extends TransformingDoubleFacedCard { public ConquerorsGalleon(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}"); + super(ownerId, setInfo, + new CardType[]{CardType.ARTIFACT}, new SubType[]{SubType.VEHICLE}, "{4}", + "Conqueror's Foothold", + new CardType[]{CardType.LAND}, new SubType[]{}, ""); - this.subtype.add(SubType.VEHICLE); - this.power = new MageInt(2); - this.toughness = new MageInt(10); + // Conqueror's Galleon + this.getLeftHalfCard().setPT(2, 10); - this.secondSideCardClazz = mage.cards.c.ConquerorsFoothold.class; - - // When Conqueror's Galleon attacks, exile it at the end of combat, then return it to the battlefield transformed under your control. - this.addAbility(new TransformAbility()); - this.addAbility(new AttacksTriggeredAbility( + // When Conqueror's Galleon attacks, exile it at end of combat, then return it to the battlefield transformed under your control. + this.getLeftHalfCard().addAbility(new AttacksTriggeredAbility( new CreateDelayedTriggeredAbilityEffect(new AtTheEndOfCombatDelayedTriggeredAbility( new ExileAndReturnSourceEffect( PutCards.BATTLEFIELD_TRANSFORMED, Pronoun.IT, true ) - )), false, "When {this} attacks, exile it at end of combat, " + - "then return it to the battlefield transformed under your control." + )), false, "When {this} attacks, exile it at end of combat, then return it to the battlefield transformed under your control." )); // Crew 4 - this.addAbility(new CrewAbility(4)); + this.getLeftHalfCard().addAbility(new CrewAbility(4)); + + + // Conqueror's Foothold + // {T}: Add {C}. + this.getRightHalfCard().addAbility(new ColorlessManaAbility()); + + // {2}, {T}: Draw a card, then discard a card. + SimpleActivatedAbility ability = new SimpleActivatedAbility(new DrawDiscardControllerEffect(), new ManaCostsImpl<>("{2}")); + ability.addCost(new TapSourceCost()); + this.getRightHalfCard().addAbility(ability); + + // {4}, {T}: Draw a card. + SimpleActivatedAbility ability2 = new SimpleActivatedAbility(new DrawCardSourceControllerEffect(1), new ManaCostsImpl<>("{4}")); + ability2.addCost(new TapSourceCost()); + this.getRightHalfCard().addAbility(ability2); + + // {6}, {T}: Return target card from your graveyard to your hand. + SimpleActivatedAbility ability3 = new SimpleActivatedAbility(new ReturnFromGraveyardToHandTargetEffect(), new ManaCostsImpl<>("{6}")); + ability3.addCost(new TapSourceCost()); + ability3.addTarget(new TargetCardInYourGraveyard()); + this.getRightHalfCard().addAbility(ability3); } private ConquerorsGalleon(final ConquerorsGalleon card) { diff --git a/Mage.Sets/src/mage/cards/c/ConvictedKiller.java b/Mage.Sets/src/mage/cards/c/ConvictedKiller.java index ed0602e0025..e98aa4030a9 100644 --- a/Mage.Sets/src/mage/cards/c/ConvictedKiller.java +++ b/Mage.Sets/src/mage/cards/c/ConvictedKiller.java @@ -1,40 +1,38 @@ package mage.cards.c; -import java.util.UUID; - -import mage.MageInt; +import mage.abilities.common.WerewolfBackTriggeredAbility; import mage.abilities.common.WerewolfFrontTriggeredAbility; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; +import java.util.UUID; + /** * @author fireshoes */ -public final class ConvictedKiller extends CardImpl { +public final class ConvictedKiller extends TransformingDoubleFacedCard { public ConvictedKiller(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.WEREWOLF); - this.power = new MageInt(2); - this.toughness = new MageInt(2); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WEREWOLF}, "{2}{R}", + "Branded Howler", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.WEREWOLF}, "R"); - this.secondSideCardClazz = mage.cards.b.BrandedHowler.class; + // Convicted Killer + this.getLeftHalfCard().setPT(2, 2); // At the beginning of each upkeep, if no spells were cast last turn, transform Convicted Killer. - this.addAbility(new TransformAbility()); - this.addAbility(new WerewolfFrontTriggeredAbility()); + this.getLeftHalfCard().addAbility(new WerewolfFrontTriggeredAbility()); + + // Branded Howler + this.getRightHalfCard().setPT(4, 4); + + // At the beginning of each upkeep, if a player cast two or more spells last turn, transform Branded Howler. + this.getRightHalfCard().addAbility(new WerewolfBackTriggeredAbility()); } - private ConvictedKiller(final ConvictedKiller card) { - super(card); - } - - @Override - public ConvictedKiller copy() { - return new ConvictedKiller(this); - } + private ConvictedKiller(final ConvictedKiller card) { super(card); } + @Override public ConvictedKiller copy() { return new ConvictedKiller(this); } } diff --git a/Mage.Sets/src/mage/cards/c/CosmiumKiln.java b/Mage.Sets/src/mage/cards/c/CosmiumKiln.java deleted file mode 100644 index 08db82019b9..00000000000 --- a/Mage.Sets/src/mage/cards/c/CosmiumKiln.java +++ /dev/null @@ -1,41 +0,0 @@ -package mage.cards.c; - -import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.effects.common.continuous.BoostControlledEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.game.permanent.token.GnomeToken; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class CosmiumKiln extends CardImpl { - - public CosmiumKiln(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, ""); - - this.nightCard = true; - this.color.setWhite(true); - - // When Cosmium Kiln enters the battlefield, create two 1/1 colorless Gnome artifact creature tokens. - this.addAbility(new EntersBattlefieldTriggeredAbility(new CreateTokenEffect(new GnomeToken(), 2))); - - // Creatures you control get +1/+1. - this.addAbility(new SimpleStaticAbility(new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield))); - } - - private CosmiumKiln(final CosmiumKiln card) { - super(card); - } - - @Override - public CosmiumKiln copy() { - return new CosmiumKiln(this); - } -} diff --git a/Mage.Sets/src/mage/cards/c/CovertCutpurse.java b/Mage.Sets/src/mage/cards/c/CovertCutpurse.java index c9372e1d538..3cd865e93c6 100644 --- a/Mage.Sets/src/mage/cards/c/CovertCutpurse.java +++ b/Mage.Sets/src/mage/cards/c/CovertCutpurse.java @@ -1,12 +1,13 @@ package mage.cards.c; -import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.keyword.DeathtouchAbility; import mage.abilities.keyword.DisturbAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.FlyingAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.TargetController; @@ -20,40 +21,44 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class CovertCutpurse extends CardImpl { - - private static final FilterPermanent filter - = new FilterCreaturePermanent("creature you don't control that was dealt damage this turn"); +public final class CovertCutpurse extends TransformingDoubleFacedCard { + private static final FilterPermanent filter = new FilterCreaturePermanent("creature you don't control that was dealt damage this turn"); static { filter.add(TargetController.NOT_YOU.getControllerPredicate()); filter.add(WasDealtDamageThisTurnPredicate.instance); } public CovertCutpurse(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.ROGUE}, "{2}{B}", + "Covetous Geist", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.SPIRIT, SubType.ROGUE}, "B"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.ROGUE); - this.power = new MageInt(2); - this.toughness = new MageInt(1); - this.secondSideCardClazz = mage.cards.c.CovetousGeist.class; + // Covert Cutpurse + this.getLeftHalfCard().setPT(2, 1); // When Covert Cutpurse enters the battlefield, destroy target creature you don't control that was dealt damage this turn. Ability ability = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect()); ability.addTarget(new TargetPermanent(filter)); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); // Disturb {4}{B} - this.addAbility(new DisturbAbility(this, "{4}{B}")); + this.getLeftHalfCard().addAbility(new DisturbAbility(this, "{4}{B}")); + + // Covetous Geist + this.getRightHalfCard().setPT(2, 2); + + // Flying + this.getRightHalfCard().addAbility(FlyingAbility.getInstance()); + + // Deathtouch + this.getRightHalfCard().addAbility(DeathtouchAbility.getInstance()); + + // If Covetous Geist would be put into a graveyard from anywhere, exile it instead. + this.getRightHalfCard().addAbility(DisturbAbility.makeBackAbility()); } - private CovertCutpurse(final CovertCutpurse card) { - super(card); - } - - @Override - public CovertCutpurse copy() { - return new CovertCutpurse(this); - } + private CovertCutpurse(final CovertCutpurse card) { super(card); } + @Override public CovertCutpurse copy() { return new CovertCutpurse(this); } } diff --git a/Mage.Sets/src/mage/cards/c/CovetousCastaway.java b/Mage.Sets/src/mage/cards/c/CovetousCastaway.java index 1fd63048184..319d6b7d018 100644 --- a/Mage.Sets/src/mage/cards/c/CovetousCastaway.java +++ b/Mage.Sets/src/mage/cards/c/CovetousCastaway.java @@ -1,35 +1,53 @@ package mage.cards.c; -import mage.MageInt; import mage.abilities.common.DiesSourceTriggeredAbility; -import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.MillCardsControllerEffect; +import mage.abilities.effects.common.ShuffleIntoLibraryTargetEffect; import mage.abilities.keyword.DisturbAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.FlyingAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; +import mage.target.common.TargetCardInYourGraveyard; import java.util.UUID; /** * @author TheElk801 */ -public final class CovetousCastaway extends CardImpl { +public final class CovetousCastaway extends TransformingDoubleFacedCard { public CovetousCastaway(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN}, "{1}{U}", + "Ghostly Castigator", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.SPIRIT}, "U"); - this.subtype.add(SubType.HUMAN); - this.power = new MageInt(1); - this.toughness = new MageInt(3); - this.secondSideCardClazz = mage.cards.g.GhostlyCastigator.class; + + // Covetous Castaway + this.getLeftHalfCard().setPT(1, 3); // When Covetous Castaway dies, mill three cards. - this.addAbility(new DiesSourceTriggeredAbility(new MillCardsControllerEffect(3))); + this.getLeftHalfCard().addAbility(new DiesSourceTriggeredAbility(new MillCardsControllerEffect(3))); // Disturb {3}{U}{U} - this.addAbility(new DisturbAbility(this, "{3}{U}{U}")); + this.getLeftHalfCard().addAbility(new DisturbAbility(this, "{3}{U}{U}")); + + // Ghostly Castigator + this.getRightHalfCard().setPT(3, 4); + + // Flying + this.getRightHalfCard().addAbility(FlyingAbility.getInstance()); + + // When Ghostly Castigator enters the battlefield, you may shuffle up to three target cards from your graveyard into your library. + EntersBattlefieldTriggeredAbility ability = new EntersBattlefieldTriggeredAbility(new ShuffleIntoLibraryTargetEffect(), true); + ability.addTarget(new TargetCardInYourGraveyard(0, 3)); + this.getRightHalfCard().addAbility(ability); + + // If Ghostly Castigator would be put into a graveyard from anywhere, exile it instead. + this.getRightHalfCard().addAbility(DisturbAbility.makeBackAbility()); } private CovetousCastaway(final CovetousCastaway card) { diff --git a/Mage.Sets/src/mage/cards/c/CovetousGeist.java b/Mage.Sets/src/mage/cards/c/CovetousGeist.java deleted file mode 100644 index 7dd65c1bb4f..00000000000 --- a/Mage.Sets/src/mage/cards/c/CovetousGeist.java +++ /dev/null @@ -1,47 +0,0 @@ -package mage.cards.c; - -import mage.MageInt; -import mage.abilities.keyword.DeathtouchAbility; -import mage.abilities.keyword.DisturbAbility; -import mage.abilities.keyword.FlyingAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class CovetousGeist extends CardImpl { - - public CovetousGeist(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.SPIRIT); - this.subtype.add(SubType.ROGUE); - this.power = new MageInt(2); - this.toughness = new MageInt(2); - this.color.setBlack(true); - this.nightCard = true; - - // Flying - this.addAbility(FlyingAbility.getInstance()); - - // Deathtouch - this.addAbility(DeathtouchAbility.getInstance()); - - // If Covetous Geist would be put into a graveyard from anywhere, exile it instead. - this.addAbility(DisturbAbility.makeBackAbility()); - } - - private CovetousGeist(final CovetousGeist card) { - super(card); - } - - @Override - public CovetousGeist copy() { - return new CovetousGeist(this); - } -} diff --git a/Mage.Sets/src/mage/cards/c/CryptolithFragment.java b/Mage.Sets/src/mage/cards/c/CryptolithFragment.java index ec264beae69..46c2288f17f 100644 --- a/Mage.Sets/src/mage/cards/c/CryptolithFragment.java +++ b/Mage.Sets/src/mage/cards/c/CryptolithFragment.java @@ -1,18 +1,22 @@ package mage.cards.c; import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; import mage.abilities.common.EntersBattlefieldTappedAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.LifeCompareCondition; import mage.abilities.effects.common.LoseLifeAllPlayersEffect; +import mage.abilities.effects.common.LoseLifeOpponentsEffect; import mage.abilities.effects.common.TransformSourceEffect; -import mage.abilities.keyword.TransformAbility; +import mage.abilities.keyword.DeathtouchAbility; +import mage.abilities.keyword.FlyingAbility; import mage.abilities.mana.AnyColorManaAbility; import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; -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.constants.TargetController; import java.util.UUID; @@ -20,26 +24,39 @@ import java.util.UUID; /** * @author fireshoes */ -public final class CryptolithFragment extends CardImpl { +public final class CryptolithFragment extends TransformingDoubleFacedCard { private static final Condition condition = new LifeCompareCondition(TargetController.EACH_PLAYER, ComparisonType.OR_LESS, 10); public CryptolithFragment(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); - - this.secondSideCardClazz = mage.cards.a.AuroraOfEmrakul.class; + super(ownerId, setInfo, + new CardType[]{CardType.ARTIFACT}, new SubType[]{}, "{3}", + "Aurora of Emrakul", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.ELDRAZI, SubType.REFLECTION}, ""); + // Cryptolith Fragment // Cryptolith Fragment enters the battlefield tapped. - this.addAbility(new EntersBattlefieldTappedAbility()); + this.getLeftHalfCard().addAbility(new EntersBattlefieldTappedAbility()); // {T}: Add one mana of any color. Each player loses 1 life. Ability anyColorManaAbility = new AnyColorManaAbility(); anyColorManaAbility.addEffect(new LoseLifeAllPlayersEffect(1)); - this.addAbility(anyColorManaAbility); + this.getLeftHalfCard().addAbility(anyColorManaAbility); // At the beginning of your upkeep, if each player has 10 or less life, transform Cryptolith Fragment. - this.addAbility(new TransformAbility()); - this.addAbility(new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect()).withInterveningIf(condition)); + this.getLeftHalfCard().addAbility(new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect()).withInterveningIf(condition)); + + // Aurora of Emrakul + this.getRightHalfCard().setPT(1, 4); + + // Flying + this.getRightHalfCard().addAbility(FlyingAbility.getInstance()); + + // Deathtouch + this.getRightHalfCard().addAbility(DeathtouchAbility.getInstance()); + + // Whenever Aurora of Emrakul attacks, each opponent loses 3 life. + this.getRightHalfCard().addAbility(new AttacksTriggeredAbility(new LoseLifeOpponentsEffect(3), false)); } private CryptolithFragment(final CryptolithFragment card) { diff --git a/Mage.Sets/src/mage/cards/c/CrystalFragments.java b/Mage.Sets/src/mage/cards/c/CrystalFragments.java index 145a755ba55..8a84aefb02a 100644 --- a/Mage.Sets/src/mage/cards/c/CrystalFragments.java +++ b/Mage.Sets/src/mage/cards/c/CrystalFragments.java @@ -1,42 +1,65 @@ package mage.cards.c; import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.common.SagaAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.ExileAndReturnSourceEffect; +import mage.abilities.effects.common.PreventAllDamageToAllEffect; +import mage.abilities.effects.common.TapAllEffect; import mage.abilities.effects.common.continuous.BoostEquippedEffect; import mage.abilities.keyword.EquipAbility; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.FlyingAbility; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.PutCards; -import mage.constants.SubType; +import mage.cards.TransformingDoubleFacedCard; +import mage.constants.*; +import mage.filter.StaticFilters; import java.util.UUID; /** * @author TheElk801 */ -public final class CrystalFragments extends CardImpl { +public final class CrystalFragments extends TransformingDoubleFacedCard { public CrystalFragments(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{W}"); - - this.subtype.add(SubType.EQUIPMENT); - this.secondSideCardClazz = mage.cards.s.SummonAlexander.class; + super(ownerId, setInfo, + new CardType[]{CardType.ARTIFACT}, new SubType[]{SubType.EQUIPMENT}, "{W}", + "Summon: Alexander", + new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, new SubType[]{SubType.SAGA, SubType.CONSTRUCT}, "W"); + // Crystal Fragments // Equipped creature gets +1/+1. - this.addAbility(new SimpleStaticAbility(new BoostEquippedEffect(1, 1))); + this.getLeftHalfCard().addAbility(new SimpleStaticAbility(new BoostEquippedEffect(1, 1))); // {5}{W}{W}: Exile this Equipment, then return it to the battlefield transformed under its owner's control. Activate only as a sorcery. - this.addAbility(new TransformAbility()); - this.addAbility(new ActivateAsSorceryActivatedAbility( + this.getLeftHalfCard().addAbility(new ActivateAsSorceryActivatedAbility( new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD_TRANSFORMED), new ManaCostsImpl<>("{5}{W}{W}") )); // Equip {1} - this.addAbility(new EquipAbility(1)); + this.getLeftHalfCard().addAbility(new EquipAbility(1)); + + // Summon: Alexander + this.getRightHalfCard().setPT(4, 3); + + // Saga setup (As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.) + SagaAbility sagaAbility = new SagaAbility(this.getRightHalfCard()).withShowSacText(true); + + // I, II -- Prevent all damage that would be dealt to creatures you control this turn. + sagaAbility.addChapterEffect(this.getRightHalfCard(), SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_II, + chapterAbility -> chapterAbility.addEffect(new PreventAllDamageToAllEffect( + Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES_CONTROLLED + ))); + + // III -- Tap all creatures your opponents control. + sagaAbility.addChapterEffect(this.getRightHalfCard(), SagaChapter.CHAPTER_III, + chapterAbility -> chapterAbility.addEffect(new TapAllEffect(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES))); + + this.getRightHalfCard().addAbility(sagaAbility); + + // Flying + this.getRightHalfCard().addAbility(FlyingAbility.getInstance()); } private CrystalFragments(final CrystalFragments card) { diff --git a/Mage.Sets/src/mage/cards/c/CuriousHomunculus.java b/Mage.Sets/src/mage/cards/c/CuriousHomunculus.java index b78941496aa..eeea1819109 100644 --- a/Mage.Sets/src/mage/cards/c/CuriousHomunculus.java +++ b/Mage.Sets/src/mage/cards/c/CuriousHomunculus.java @@ -1,21 +1,23 @@ package mage.cards.c; -import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.CardsInControllerGraveyardCondition; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; import mage.abilities.effects.common.TransformSourceEffect; +import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect; import mage.abilities.hint.Hint; import mage.abilities.hint.ValueHint; -import mage.abilities.keyword.TransformAbility; +import mage.abilities.keyword.ProwessAbility; import mage.abilities.mana.ConditionalColorlessManaAbility; import mage.abilities.mana.builder.common.InstantOrSorcerySpellManaBuilder; import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; import mage.constants.SubType; +import mage.filter.FilterCard; import mage.filter.StaticFilters; import mage.filter.common.FilterInstantOrSorceryCard; @@ -24,25 +26,35 @@ import java.util.UUID; /** * @author fireshoes */ -public final class CuriousHomunculus extends CardImpl { +public final class CuriousHomunculus extends TransformingDoubleFacedCard { private static final Condition condition = new CardsInControllerGraveyardCondition(3, new FilterInstantOrSorceryCard("instant and/or sorcery cards")); private static final Hint hint = new ValueHint("Instant and sorcery cards in your graveyard", new CardsInControllerGraveyardCount(StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY)); + private static final FilterCard filter = new FilterInstantOrSorceryCard("Instant and sorcery spells"); public CuriousHomunculus(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); - this.subtype.add(SubType.HOMUNCULUS); - this.power = new MageInt(1); - this.toughness = new MageInt(1); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HOMUNCULUS}, "{1}{U}", + "Voracious Reader", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.ELDRAZI, SubType.HOMUNCULUS}, ""); - this.secondSideCardClazz = mage.cards.v.VoraciousReader.class; + // Curious Homunculus + this.getLeftHalfCard().setPT(1, 1); // {T}: Add {C}. Spend this mana only to cast an instant or sorcery spell. - this.addAbility(new ConditionalColorlessManaAbility(new TapSourceCost(), 1, new InstantOrSorcerySpellManaBuilder())); + this.getLeftHalfCard().addAbility(new ConditionalColorlessManaAbility(new TapSourceCost(), 1, new InstantOrSorcerySpellManaBuilder())); // At the beginning of your upkeep, if there are three or more instant and/or sorcery cards in your graveyard, transform Curious Homunculus. - this.addAbility(new TransformAbility()); - this.addAbility(new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect()).withInterveningIf(condition).addHint(hint)); + this.getLeftHalfCard().addAbility(new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect()).withInterveningIf(condition).addHint(hint)); + + // Voracious Reader + this.getRightHalfCard().setPT(3, 4); + + // Prowess + this.getRightHalfCard().addAbility(new ProwessAbility()); + + // Instant and sorcery spells you cast cost {1} less to cast. + this.getRightHalfCard().addAbility(new SimpleStaticAbility(new SpellsCostReductionControllerEffect(filter, 1))); } private CuriousHomunculus(final CuriousHomunculus card) { diff --git a/Mage.Sets/src/mage/cards/c/CurseOfLeeches.java b/Mage.Sets/src/mage/cards/c/CurseOfLeeches.java index 1cbb930c7bd..13c506faebd 100644 --- a/Mage.Sets/src/mage/cards/c/CurseOfLeeches.java +++ b/Mage.Sets/src/mage/cards/c/CurseOfLeeches.java @@ -1,7 +1,6 @@ package mage.cards.c; import mage.abilities.Ability; -import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.ReplacementEffectImpl; import mage.abilities.effects.common.AttachEffect; @@ -9,8 +8,11 @@ import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.LoseLifeTargetEffect; import mage.abilities.keyword.DayboundAbility; import mage.abilities.keyword.EnchantAbility; -import mage.cards.CardImpl; +import mage.abilities.keyword.LifelinkAbility; +import mage.abilities.keyword.NightboundAbility; +import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.*; import mage.game.Game; import mage.game.events.GameEvent; @@ -23,24 +25,24 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class CurseOfLeeches extends CardImpl { +public final class CurseOfLeeches extends TransformingDoubleFacedCard { public CurseOfLeeches(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{B}"); - - this.subtype.add(SubType.AURA); - this.subtype.add(SubType.CURSE); - this.secondSideCardClazz = mage.cards.l.LeechingLurker.class; + super(ownerId, setInfo, + new CardType[]{CardType.ENCHANTMENT}, new SubType[]{SubType.AURA, SubType.CURSE}, "{2}{B}", + "Leeching Lurker", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.LEECH, SubType.HORROR}, "B"); + // Curse of Leeches // Enchant player TargetPlayer auraTarget = new TargetPlayer(); - this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + this.getLeftHalfCard().getSpellAbility().addTarget(auraTarget); + this.getLeftHalfCard().getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); Ability ability = new EnchantAbility(auraTarget); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); // As this permanent transforms into Curse of Leeches, attach it to a player. - this.addAbility(new SimpleStaticAbility(new CurseOfLeechesEffect())); + this.getLeftHalfCard().addAbility(new SimpleStaticAbility(new CurseOfLeechesEffect())); // At the beginning of enchanted player's upkeep, they lose 1 life and you gain 1 life. ability = new BeginningOfUpkeepTriggeredAbility( @@ -48,10 +50,19 @@ public final class CurseOfLeeches extends CardImpl { false ); ability.addEffect(new GainLifeEffect(1).concatBy("and")); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); // Daybound - this.addAbility(new DayboundAbility()); + this.getLeftHalfCard().addAbility(new DayboundAbility()); + + // Leeching Lurker + this.getRightHalfCard().setPT(4, 4); + + // Lifelink + this.getRightHalfCard().addAbility(LifelinkAbility.getInstance()); + + // Nightbound + this.getRightHalfCard().addAbility(new NightboundAbility()); } private CurseOfLeeches(final CurseOfLeeches card) { @@ -75,6 +86,11 @@ class CurseOfLeechesEffect extends ReplacementEffectImpl { super(effect); } + @Override + public CurseOfLeechesEffect copy() { + return new CurseOfLeechesEffect(this); + } + @Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { Player controller = game.getPlayer(source.getControllerId()); @@ -101,9 +117,4 @@ class CurseOfLeechesEffect extends ReplacementEffectImpl { public boolean applies(GameEvent event, Ability source, Game game) { return source.getSourceId().equals(event.getTargetId()); } - - @Override - public CurseOfLeechesEffect copy() { - return new CurseOfLeechesEffect(this); - } } diff --git a/Mage.Sets/src/mage/cards/c/CyclonusCybertronianFighter.java b/Mage.Sets/src/mage/cards/c/CyclonusCybertronianFighter.java deleted file mode 100644 index 1b21a9e9880..00000000000 --- a/Mage.Sets/src/mage/cards/c/CyclonusCybertronianFighter.java +++ /dev/null @@ -1,86 +0,0 @@ -package mage.cards.c; - -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; -import mage.abilities.effects.common.TransformSourceEffect; -import mage.abilities.keyword.FlyingAbility; -import mage.abilities.keyword.LivingMetalAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.SuperType; -import mage.constants.TurnPhase; -import mage.game.Game; -import mage.game.turn.TurnMod; - -import java.util.UUID; - -/** - * @author mllagostera - */ -public final class CyclonusCybertronianFighter extends CardImpl { - - public CyclonusCybertronianFighter(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(5); - this.color.setBlack(true); - this.color.setBlue(true); - this.nightCard = true; - - // Living metal - this.addAbility(new LivingMetalAbility()); - - // Flying - this.addAbility(FlyingAbility.getInstance()); - - // Whenever Cyclonus deals combat damage to a player, convert it. - // If you do, there is an additional beginning phase after this phase. - Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility( - new CyclonusCybertronianFighterEffect(), - false - ); - this.addAbility(ability); - } - - private CyclonusCybertronianFighter(final CyclonusCybertronianFighter card) { - super(card); - } - - @Override - public CyclonusCybertronianFighter copy() { - return new CyclonusCybertronianFighter(this); - } -} - -class CyclonusCybertronianFighterEffect extends TransformSourceEffect { - - CyclonusCybertronianFighterEffect() { - super(); - staticText = "transform it. If you do, there is an additional beginning phase after this phase"; - } - - private CyclonusCybertronianFighterEffect(final CyclonusCybertronianFighterEffect effect) { - super(effect); - } - - @Override - public CyclonusCybertronianFighterEffect copy() { - return new CyclonusCybertronianFighterEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - if (!super.apply(game, source)) { - return false; - } - TurnMod beginning = new TurnMod(game.getState().getActivePlayerId()).withExtraPhase(TurnPhase.BEGINNING); - game.getState().getTurnMods().add(beginning); - return true; - } -} diff --git a/Mage.Sets/src/mage/cards/c/CyclonusTheSaboteur.java b/Mage.Sets/src/mage/cards/c/CyclonusTheSaboteur.java index d5559695d3d..e54ff1cfdbf 100644 --- a/Mage.Sets/src/mage/cards/c/CyclonusTheSaboteur.java +++ b/Mage.Sets/src/mage/cards/c/CyclonusTheSaboteur.java @@ -1,74 +1,109 @@ -package mage.cards.c; - -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; -import mage.abilities.condition.Condition; -import mage.abilities.condition.common.SourceMatchesFilterCondition; -import mage.abilities.decorator.ConditionalOneShotEffect; -import mage.abilities.effects.common.TransformSourceEffect; -import mage.abilities.effects.keyword.ConniveSourceEffect; -import mage.abilities.keyword.FlyingAbility; -import mage.abilities.keyword.MoreThanMeetsTheEyeAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.filter.FilterPermanent; -import mage.filter.predicate.mageobject.PowerPredicate; - -import java.util.UUID; - -/** - * @author mllagostera - */ -public final class CyclonusTheSaboteur extends CardImpl { - - private static final FilterPermanent filter = new FilterPermanent(); - - static { - filter.add(new PowerPredicate(ComparisonType.MORE_THAN,4)); - } - - private static final Condition condition = new SourceMatchesFilterCondition(filter); - - public CyclonusTheSaboteur(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}{U}{B}"); - - this.supertype.add(SuperType.LEGENDARY); - this.subtype.add(SubType.ROBOT); - this.power = new MageInt(2); - this.toughness = new MageInt(5); - this.secondSideCardClazz = mage.cards.c.CyclonusCybertronianFighter.class; - - // More Than Meets the Eye {5}{U}{B} - this.addAbility(new MoreThanMeetsTheEyeAbility(this, "{5}{U}{B}")); - - // Flying - this.addAbility(FlyingAbility.getInstance()); - - // Whenever Cyclonus deals combat damage to a player, it connives. - Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility( - new ConniveSourceEffect("it"), - false, - true - ); - - // Then if Cyclonus's power is 5 or greater, convert it - ability.addEffect((new ConditionalOneShotEffect( - new TransformSourceEffect(), - condition, - "Then if {this}'s power is 5 or greater, convert it." - ))); - - this.addAbility(ability); - } - - private CyclonusTheSaboteur(final CyclonusTheSaboteur card) { - super(card); - } - - @Override - public CyclonusTheSaboteur copy() { - return new CyclonusTheSaboteur(this); - } -} +package mage.cards.c; + +import mage.abilities.Ability; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.condition.Condition; +import mage.abilities.condition.common.SourceMatchesFilterCondition; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.common.TransformSourceEffect; +import mage.abilities.effects.keyword.ConniveSourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.LivingMetalAbility; +import mage.abilities.keyword.MoreThanMeetsTheEyeAbility; +import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; +import mage.constants.*; +import mage.filter.FilterPermanent; +import mage.filter.predicate.mageobject.PowerPredicate; +import mage.game.Game; +import mage.game.turn.TurnMod; + +import java.util.UUID; + +/** + * @author mllagostera + */ +public final class CyclonusTheSaboteur extends TransformingDoubleFacedCard { + + private static final FilterPermanent filter = new FilterPermanent(); + static { filter.add(new PowerPredicate(ComparisonType.MORE_THAN,4)); } + private static final Condition condition = new SourceMatchesFilterCondition(filter); + + public CyclonusTheSaboteur(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, new SubType[]{SubType.ROBOT}, "{2}{U}{B}", + "Cyclonus, Cybertronian Fighter", + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ARTIFACT}, new SubType[]{SubType.VEHICLE}, "UB"); + + // Cyclonus, the Saboteur + this.getLeftHalfCard().setPT(2, 5); + + // More Than Meets the Eye {5}{U}{B} + this.getLeftHalfCard().addAbility(new MoreThanMeetsTheEyeAbility(this, "{5}{U}{B}")); + + // Flying + this.getLeftHalfCard().addAbility(FlyingAbility.getInstance()); + + // Whenever Cyclonus deals combat damage to a player, it connives. Then if Cyclonus's power is 5 or greater, convert it. + Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility( + new ConniveSourceEffect("it"), false, true + ); + ability.addEffect(new ConditionalOneShotEffect( + new TransformSourceEffect(), condition, + "Then if {this}'s power is 5 or greater, convert it." + )); + this.getLeftHalfCard().addAbility(ability); + + // Cyclonus, Cybertronian Fighter + this.getRightHalfCard().setPT(5, 5); + + // Living metal + this.getRightHalfCard().addAbility(new LivingMetalAbility()); + + // Flying + this.getRightHalfCard().addAbility(FlyingAbility.getInstance()); + + // Whenever Cyclonus deals combat damage to a player, transform it. If you do, there is an additional beginning phase after this phase. + Ability abilityBack = new DealsCombatDamageToAPlayerTriggeredAbility( + new CyclonusCybertronianFighterEffect(), + false + ); + this.getRightHalfCard().addAbility(abilityBack); + } + + private CyclonusTheSaboteur(final CyclonusTheSaboteur card) { + super(card); + } + + @Override + public CyclonusTheSaboteur copy() { + return new CyclonusTheSaboteur(this); + } +} + +class CyclonusCybertronianFighterEffect extends TransformSourceEffect { + + CyclonusCybertronianFighterEffect() { + super(); + staticText = "convert it. If you do, there is an additional beginning phase after this phase"; + } + + private CyclonusCybertronianFighterEffect(final CyclonusCybertronianFighterEffect effect) { + super(effect); + } + + @Override + public CyclonusCybertronianFighterEffect copy() { + return new CyclonusCybertronianFighterEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + if (!super.apply(game, source)) { + return false; + } + TurnMod beginning = new TurnMod(game.getState().getActivePlayerId()).withExtraPhase(TurnPhase.BEGINNING); + game.getState().getTurnMods().add(beginning); + return true; + } +} diff --git a/Mage.Sets/src/mage/cards/g/GhostlyCastigator.java b/Mage.Sets/src/mage/cards/g/GhostlyCastigator.java deleted file mode 100644 index bb9f5f62e56..00000000000 --- a/Mage.Sets/src/mage/cards/g/GhostlyCastigator.java +++ /dev/null @@ -1,51 +0,0 @@ -package mage.cards.g; - -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.common.ShuffleIntoLibraryTargetEffect; -import mage.abilities.keyword.DisturbAbility; -import mage.abilities.keyword.FlyingAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.target.common.TargetCardInYourGraveyard; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class GhostlyCastigator extends CardImpl { - - public GhostlyCastigator(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.SPIRIT); - this.power = new MageInt(3); - this.toughness = new MageInt(4); - this.color.setBlue(true); - this.nightCard = true; - - // Flying - this.addAbility(FlyingAbility.getInstance()); - - // When Ghostly Castigator enters the battlefield, you may shuffle up to three target cards from your graveyard into your library. - Ability ability = new EntersBattlefieldTriggeredAbility(new ShuffleIntoLibraryTargetEffect(), true); - ability.addTarget(new TargetCardInYourGraveyard(0, 3)); - this.addAbility(ability); - - // If Ghostly Castigator would be put into a graveyard from anywhere, exile it instead. - this.addAbility(DisturbAbility.makeBackAbility()); - } - - private GhostlyCastigator(final GhostlyCastigator card) { - super(card); - } - - @Override - public GhostlyCastigator copy() { - return new GhostlyCastigator(this); - } -} diff --git a/Mage.Sets/src/mage/cards/i/IfritWardenOfInferno.java b/Mage.Sets/src/mage/cards/i/IfritWardenOfInferno.java deleted file mode 100644 index 25f9b3ccc9f..00000000000 --- a/Mage.Sets/src/mage/cards/i/IfritWardenOfInferno.java +++ /dev/null @@ -1,72 +0,0 @@ -package mage.cards.i; - -import mage.MageInt; -import mage.Mana; -import mage.abilities.common.SagaAbility; -import mage.abilities.condition.Condition; -import mage.abilities.condition.common.SourceHasCounterCondition; -import mage.abilities.decorator.ConditionalOneShotEffect; -import mage.abilities.effects.common.ExileAndReturnSourceEffect; -import mage.abilities.effects.common.FightTargetSourceEffect; -import mage.abilities.effects.mana.BasicManaEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.counters.CounterType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; -import mage.target.TargetPermanent; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class IfritWardenOfInferno extends CardImpl { - - private static final FilterPermanent filter = new FilterCreaturePermanent("other target creature"); - private static final Condition condition = new SourceHasCounterCondition(CounterType.LORE, 3); - - public IfritWardenOfInferno(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, ""); - - this.supertype.add(SuperType.LEGENDARY); - this.subtype.add(SubType.SAGA); - this.subtype.add(SubType.DEMON); - this.power = new MageInt(9); - this.toughness = new MageInt(9); - this.nightCard = true; - this.color.setRed(true); - - // (As this Saga enters and after your draw step, add a lore counter.) - SagaAbility sagaAbility = new SagaAbility(this); - - // I -- Lunge -- Ifrit fights up to one other target creature. - sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_I, ability -> { - ability.addEffect(new FightTargetSourceEffect()); - ability.addTarget(new TargetPermanent(0, 1, filter)); - ability.withFlavorWord("Lunge"); - }); - - // II, III -- Brimstone -- Add {R}{R}{R}{R}. If Ifrit has three or more lore counters on it, exile it, then return it to the battlefield - sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_II, SagaChapter.CHAPTER_III, ability -> { - ability.addEffect(new BasicManaEffect(Mana.RedMana(4))); - ability.addEffect(new ConditionalOneShotEffect( - new ExileAndReturnSourceEffect(PutCards.BATTLEFIELD), condition, - "If {this} has three or more lore counters on it, exile it, " + - "then return it to the battlefield (front face up.)." - )); - ability.withFlavorWord("Brimstone"); - }); - this.addAbility(sagaAbility); - } - - private IfritWardenOfInferno(final IfritWardenOfInferno card) { - super(card); - } - - @Override - public IfritWardenOfInferno copy() { - return new IfritWardenOfInferno(this); - } -} diff --git a/Mage.Sets/src/mage/cards/l/LeechingLurker.java b/Mage.Sets/src/mage/cards/l/LeechingLurker.java deleted file mode 100644 index 1fc7474793a..00000000000 --- a/Mage.Sets/src/mage/cards/l/LeechingLurker.java +++ /dev/null @@ -1,43 +0,0 @@ -package mage.cards.l; - -import mage.MageInt; -import mage.abilities.keyword.LifelinkAbility; -import mage.abilities.keyword.NightboundAbility; -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 LeechingLurker extends CardImpl { - - public LeechingLurker(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.LEECH); - this.subtype.add(SubType.HORROR); - this.power = new MageInt(4); - this.toughness = new MageInt(4); - this.color.setBlack(true); - this.nightCard = true; - - // Lifelink - this.addAbility(LifelinkAbility.getInstance()); - - // Nightbound - this.addAbility(new NightboundAbility()); - } - - private LeechingLurker(final LeechingLurker card) { - super(card); - } - - @Override - public LeechingLurker copy() { - return new LeechingLurker(this); - } -} diff --git a/Mage.Sets/src/mage/cards/m/MarkovsServant.java b/Mage.Sets/src/mage/cards/m/MarkovsServant.java deleted file mode 100644 index 81a62c53563..00000000000 --- a/Mage.Sets/src/mage/cards/m/MarkovsServant.java +++ /dev/null @@ -1,36 +0,0 @@ - -package mage.cards.m; - -import java.util.UUID; -import mage.MageInt; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; - -/** - * - * @author Loki - */ -public final class MarkovsServant extends CardImpl { - - public MarkovsServant(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},null); - this.subtype.add(SubType.VAMPIRE); - this.color.setBlack(true); - - this.power = new MageInt(4); - this.toughness = new MageInt(4); - - this.nightCard = true; - } - - private MarkovsServant(final MarkovsServant card) { - super(card); - } - - @Override - public MarkovsServant copy() { - return new MarkovsServant(this); - } -} diff --git a/Mage.Sets/src/mage/cards/r/RevealingEye.java b/Mage.Sets/src/mage/cards/r/RevealingEye.java deleted file mode 100644 index 284c7eee69b..00000000000 --- a/Mage.Sets/src/mage/cards/r/RevealingEye.java +++ /dev/null @@ -1,96 +0,0 @@ -package mage.cards.r; - -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.TransformIntoSourceTriggeredAbility; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.keyword.MenaceAbility; -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.filter.StaticFilters; -import mage.game.Game; -import mage.players.Player; -import mage.target.TargetCard; -import mage.target.common.TargetCardInHand; -import mage.target.common.TargetOpponent; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class RevealingEye extends CardImpl { - - public RevealingEye(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.EYE); - this.subtype.add(SubType.HORROR); - this.power = new MageInt(3); - this.toughness = new MageInt(4); - this.color.setBlack(true); - this.nightCard = true; - - // Menace - this.addAbility(new MenaceAbility(false)); - - // When this creature transforms into Revealing Eye, target opponent reveals their hand. You may choose a nonland card from it. If you do, that player discards that card, then draws a card. - Ability ability = new TransformIntoSourceTriggeredAbility(new RevealingEyeEffect()); - ability.addTarget(new TargetOpponent()); - this.addAbility(ability); - } - - private RevealingEye(final RevealingEye card) { - super(card); - } - - @Override - public RevealingEye copy() { - return new RevealingEye(this); - } -} - -class RevealingEyeEffect extends OneShotEffect { - - RevealingEyeEffect() { - super(Outcome.Discard); - staticText = "target opponent reveals their hand. You may choose a nonland card from it. " + - "If you do, that player discards that card, then draws a card"; - } - - private RevealingEyeEffect(final RevealingEyeEffect effect) { - super(effect); - } - - @Override - public RevealingEyeEffect copy() { - return new RevealingEyeEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - Player opponent = game.getPlayer(source.getFirstTarget()); - if (controller == null || opponent == null) { - return false; - } - opponent.revealCards(source, opponent.getHand(), game); - if (opponent.getHand().count(StaticFilters.FILTER_CARD_NON_LAND, game) < 1) { - return true; - } - TargetCard target = new TargetCard(0, 1, Zone.HAND, StaticFilters.FILTER_CARD_NON_LAND); - controller.choose(outcome, opponent.getHand(), target, source, game); - Card card = game.getCard(target.getFirstTarget()); - if (card == null) { - return true; - } - opponent.discard(card, false, source, game); - opponent.drawCards(1, source, game); - return true; - } -} diff --git a/Mage.Sets/src/mage/cards/s/SavagePackmate.java b/Mage.Sets/src/mage/cards/s/SavagePackmate.java deleted file mode 100644 index f60351ab25a..00000000000 --- a/Mage.Sets/src/mage/cards/s/SavagePackmate.java +++ /dev/null @@ -1,51 +0,0 @@ -package mage.cards.s; - -import mage.MageInt; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.common.continuous.BoostControlledEffect; -import mage.abilities.keyword.NightboundAbility; -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 SavagePackmate extends CardImpl { - - public SavagePackmate(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.color.setGreen(true); - this.nightCard = true; - - // Trample - this.addAbility(TrampleAbility.getInstance()); - - // Other creatures you control get +1/+0. - this.addAbility(new SimpleStaticAbility(new BoostControlledEffect( - 1, 0, Duration.WhileOnBattlefield, true - ))); - - // Nightbound - this.addAbility(new NightboundAbility()); - } - - private SavagePackmate(final SavagePackmate card) { - super(card); - } - - @Override - public SavagePackmate copy() { - return new SavagePackmate(this); - } -} diff --git a/Mage.Sets/src/mage/cards/s/SummonAlexander.java b/Mage.Sets/src/mage/cards/s/SummonAlexander.java deleted file mode 100644 index 6a752a4b835..00000000000 --- a/Mage.Sets/src/mage/cards/s/SummonAlexander.java +++ /dev/null @@ -1,63 +0,0 @@ -package mage.cards.s; - -import mage.MageInt; -import mage.abilities.common.SagaAbility; -import mage.abilities.effects.common.PreventAllDamageToAllEffect; -import mage.abilities.effects.common.TapAllEffect; -import mage.abilities.keyword.FlyingAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.SagaChapter; -import mage.constants.SubType; -import mage.filter.StaticFilters; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class SummonAlexander extends CardImpl { - - public SummonAlexander(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, ""); - - this.subtype.add(SubType.SAGA); - this.subtype.add(SubType.CONSTRUCT); - this.power = new MageInt(4); - this.toughness = new MageInt(3); - this.nightCard = true; - this.color.setWhite(true); - - // (As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.) - SagaAbility sagaAbility = new SagaAbility(this); - - // I, II -- Prevent all damage that would be dealt to creatures you control this turn. - sagaAbility.addChapterEffect( - this, SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_II, - new PreventAllDamageToAllEffect( - Duration.EndOfTurn, StaticFilters.FILTER_PERMANENT_CREATURES_CONTROLLED - ) - ); - - // III -- Tap all creatures your opponents control. - sagaAbility.addChapterEffect( - this, SagaChapter.CHAPTER_III, - new TapAllEffect(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES) - ); - this.addAbility(sagaAbility.withShowSacText(true)); - - // Flying - this.addAbility(FlyingAbility.getInstance()); - } - - private SummonAlexander(final SummonAlexander card) { - super(card); - } - - @Override - public SummonAlexander copy() { - return new SummonAlexander(this); - } -} diff --git a/Mage.Sets/src/mage/cards/u/UnholyFiend.java b/Mage.Sets/src/mage/cards/u/UnholyFiend.java deleted file mode 100644 index 726ca0db1bb..00000000000 --- a/Mage.Sets/src/mage/cards/u/UnholyFiend.java +++ /dev/null @@ -1,41 +0,0 @@ - -package mage.cards.u; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility; -import mage.abilities.effects.common.LoseLifeSourceControllerEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; - -/** - * - * @author Loki - */ -public final class UnholyFiend extends CardImpl { - - public UnholyFiend(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},""); - this.subtype.add(SubType.HORROR); - - this.color.setBlack(true); - - this.power = new MageInt(3); - this.toughness = new MageInt(3); - - this.nightCard = true; - - this.addAbility(new BeginningOfEndStepTriggeredAbility(new LoseLifeSourceControllerEffect(1))); - } - - private UnholyFiend(final UnholyFiend card) { - super(card); - } - - @Override - public UnholyFiend copy() { - return new UnholyFiend(this); - } -} diff --git a/Mage.Sets/src/mage/sets/DarkAscension.java b/Mage.Sets/src/mage/sets/DarkAscension.java index cdb0d4bb41a..384544abc09 100644 --- a/Mage.Sets/src/mage/sets/DarkAscension.java +++ b/Mage.Sets/src/mage/sets/DarkAscension.java @@ -56,7 +56,6 @@ public final class DarkAscension extends ExpansionSet { cards.add(new SetCardInfo("Burden of Guilt", 4, Rarity.COMMON, mage.cards.b.BurdenOfGuilt.class)); cards.add(new SetCardInfo("Burning Oil", 84, Rarity.UNCOMMON, mage.cards.b.BurningOil.class)); cards.add(new SetCardInfo("Call to the Kindred", 30, Rarity.RARE, mage.cards.c.CallToTheKindred.class)); - cards.add(new SetCardInfo("Chalice of Death", 146, Rarity.UNCOMMON, mage.cards.c.ChaliceOfDeath.class)); cards.add(new SetCardInfo("Chalice of Life", 146, Rarity.UNCOMMON, mage.cards.c.ChaliceOfLife.class)); cards.add(new SetCardInfo("Chant of the Skifsang", 31, Rarity.COMMON, mage.cards.c.ChantOfTheSkifsang.class)); cards.add(new SetCardInfo("Chill of Foreboding", 32, Rarity.UNCOMMON, mage.cards.c.ChillOfForeboding.class)); @@ -139,7 +138,6 @@ public final class DarkAscension extends ExpansionSet { cards.add(new SetCardInfo("Lost in the Woods", 123, Rarity.RARE, mage.cards.l.LostInTheWoods.class)); cards.add(new SetCardInfo("Loyal Cathar", 13, Rarity.COMMON, mage.cards.l.LoyalCathar.class)); cards.add(new SetCardInfo("Markov Blademaster", 96, Rarity.RARE, mage.cards.m.MarkovBlademaster.class)); - cards.add(new SetCardInfo("Markov's Servant", 55, Rarity.COMMON, mage.cards.m.MarkovsServant.class)); cards.add(new SetCardInfo("Markov Warlord", 97, Rarity.UNCOMMON, mage.cards.m.MarkovWarlord.class)); cards.add(new SetCardInfo("Midnight Guard", 14, Rarity.COMMON, mage.cards.m.MidnightGuard.class)); cards.add(new SetCardInfo("Mikaeus, the Unhallowed", 70, Rarity.MYTHIC, mage.cards.m.MikaeusTheUnhallowed.class)); diff --git a/Mage.Sets/src/mage/sets/EldritchMoon.java b/Mage.Sets/src/mage/sets/EldritchMoon.java index 5b9e2d9967f..7facc495808 100644 --- a/Mage.Sets/src/mage/sets/EldritchMoon.java +++ b/Mage.Sets/src/mage/sets/EldritchMoon.java @@ -47,7 +47,6 @@ public final class EldritchMoon extends ExpansionSet { cards.add(new SetCardInfo("Advanced Stitchwing", 49, Rarity.UNCOMMON, mage.cards.a.AdvancedStitchwing.class)); cards.add(new SetCardInfo("Alchemist's Greeting", 116, Rarity.COMMON, mage.cards.a.AlchemistsGreeting.class)); cards.add(new SetCardInfo("Assembled Alphas", 117, Rarity.RARE, mage.cards.a.AssembledAlphas.class)); - cards.add(new SetCardInfo("Aurora of Emrakul", 193, Rarity.UNCOMMON, mage.cards.a.AuroraOfEmrakul.class)); cards.add(new SetCardInfo("Backwoods Survivalists", 150, Rarity.COMMON, mage.cards.b.BackwoodsSurvivalists.class)); cards.add(new SetCardInfo("Bedlam Reveler", 118, Rarity.RARE, mage.cards.b.BedlamReveler.class)); cards.add(new SetCardInfo("Blessed Alliance", 13, Rarity.UNCOMMON, mage.cards.b.BlessedAlliance.class)); @@ -74,7 +73,6 @@ public final class EldritchMoon extends ExpansionSet { cards.add(new SetCardInfo("Collective Brutality", 85, Rarity.RARE, mage.cards.c.CollectiveBrutality.class)); cards.add(new SetCardInfo("Collective Defiance", 123, Rarity.RARE, mage.cards.c.CollectiveDefiance.class)); cards.add(new SetCardInfo("Collective Effort", 17, Rarity.RARE, mage.cards.c.CollectiveEffort.class)); - cards.add(new SetCardInfo("Conduit of Emrakul", 124, Rarity.UNCOMMON, mage.cards.c.ConduitOfEmrakul.class)); cards.add(new SetCardInfo("Conduit of Storms", 124, Rarity.UNCOMMON, mage.cards.c.ConduitOfStorms.class)); cards.add(new SetCardInfo("Contingency Plan", 52, Rarity.COMMON, mage.cards.c.ContingencyPlan.class)); cards.add(new SetCardInfo("Convolute", 53, Rarity.COMMON, mage.cards.c.Convolute.class)); diff --git a/Mage.Sets/src/mage/sets/FinalFantasy.java b/Mage.Sets/src/mage/sets/FinalFantasy.java index 6462b4da628..1015f978a04 100644 --- a/Mage.Sets/src/mage/sets/FinalFantasy.java +++ b/Mage.Sets/src/mage/sets/FinalFantasy.java @@ -98,10 +98,6 @@ public final class FinalFantasy extends ExpansionSet { cards.add(new SetCardInfo("Cecil, Dark Knight", 445, Rarity.RARE, mage.cards.c.CecilDarkKnight.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Cecil, Dark Knight", 525, Rarity.RARE, mage.cards.c.CecilDarkKnight.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Cecil, Dark Knight", 91, Rarity.RARE, mage.cards.c.CecilDarkKnight.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Cecil, Redeemed Paladin", 380, Rarity.RARE, mage.cards.c.CecilRedeemedPaladin.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Cecil, Redeemed Paladin", 445, Rarity.RARE, mage.cards.c.CecilRedeemedPaladin.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Cecil, Redeemed Paladin", 525, Rarity.RARE, mage.cards.c.CecilRedeemedPaladin.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Cecil, Redeemed Paladin", 91, Rarity.RARE, mage.cards.c.CecilRedeemedPaladin.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Chaos, the Endless", 221, Rarity.UNCOMMON, mage.cards.c.ChaosTheEndless.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Chaos, the Endless", 486, Rarity.UNCOMMON, mage.cards.c.ChaosTheEndless.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Choco, Seeker of Paradise", 215, Rarity.RARE, mage.cards.c.ChocoSeekerOfParadise.class, NON_FULL_USE_VARIOUS)); @@ -266,11 +262,6 @@ public final class FinalFantasy extends ExpansionSet { cards.add(new SetCardInfo("Hydaelyn, the Mothercrystal", 434, Rarity.RARE, mage.cards.h.HydaelynTheMothercrystal.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ice Flan", 55, Rarity.COMMON, mage.cards.i.IceFlan.class)); cards.add(new SetCardInfo("Ice Magic", 56, Rarity.COMMON, mage.cards.i.IceMagic.class)); - cards.add(new SetCardInfo("Ifrit, Warden of Inferno", 133, Rarity.MYTHIC, mage.cards.i.IfritWardenOfInferno.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Ifrit, Warden of Inferno", 318, Rarity.MYTHIC, mage.cards.i.IfritWardenOfInferno.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Ifrit, Warden of Inferno", 385, Rarity.MYTHIC, mage.cards.i.IfritWardenOfInferno.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Ifrit, Warden of Inferno", 458, Rarity.MYTHIC, mage.cards.i.IfritWardenOfInferno.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Ifrit, Warden of Inferno", 530, Rarity.MYTHIC, mage.cards.i.IfritWardenOfInferno.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ignis Scientia", 227, Rarity.UNCOMMON, mage.cards.i.IgnisScientia.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ignis Scientia", 492, Rarity.UNCOMMON, mage.cards.i.IgnisScientia.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Il Mheg Pixie", 57, Rarity.UNCOMMON, mage.cards.i.IlMhegPixie.class)); @@ -508,8 +499,6 @@ public final class FinalFantasy extends ExpansionSet { cards.add(new SetCardInfo("Stolen Uniform", 332, Rarity.UNCOMMON, mage.cards.s.StolenUniform.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Stolen Uniform", 75, Rarity.UNCOMMON, mage.cards.s.StolenUniform.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Stuck in Summoner's Sanctum", 76, Rarity.COMMON, mage.cards.s.StuckInSummonersSanctum.class)); - cards.add(new SetCardInfo("Summon: Alexander", 13, Rarity.UNCOMMON, mage.cards.s.SummonAlexander.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Summon: Alexander", 357, Rarity.UNCOMMON, mage.cards.s.SummonAlexander.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Summon: Anima", 120, Rarity.UNCOMMON, mage.cards.s.SummonAnima.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Summon: Anima", 364, Rarity.UNCOMMON, mage.cards.s.SummonAnima.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Summon: Bahamut", 1, Rarity.MYTHIC, mage.cards.s.SummonBahamut.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/FromTheVaultTransform.java b/Mage.Sets/src/mage/sets/FromTheVaultTransform.java index 65e1c1194c4..05dec302c0a 100644 --- a/Mage.Sets/src/mage/sets/FromTheVaultTransform.java +++ b/Mage.Sets/src/mage/sets/FromTheVaultTransform.java @@ -27,7 +27,6 @@ public final class FromTheVaultTransform extends ExpansionSet { 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)); - cards.add(new SetCardInfo("Chandra, Roaring Flame", 6, Rarity.MYTHIC, mage.cards.c.ChandraRoaringFlame.class)); cards.add(new SetCardInfo("Delver of Secrets", 7, Rarity.MYTHIC, mage.cards.d.DelverOfSecrets.class)); cards.add(new SetCardInfo("Insectile Aberration", 7, Rarity.MYTHIC, mage.cards.i.InsectileAberration.class)); cards.add(new SetCardInfo("Elbrus, the Binding Blade", 8, Rarity.MYTHIC, mage.cards.e.ElbrusTheBindingBlade.class)); diff --git a/Mage.Sets/src/mage/sets/Innistrad.java b/Mage.Sets/src/mage/sets/Innistrad.java index 52d076faa51..39ce4a5acb0 100644 --- a/Mage.Sets/src/mage/sets/Innistrad.java +++ b/Mage.Sets/src/mage/sets/Innistrad.java @@ -153,7 +153,6 @@ public final class Innistrad extends ExpansionSet { cards.add(new SetCardInfo("Heretic's Punishment", 147, Rarity.RARE, mage.cards.h.HereticsPunishment.class)); cards.add(new SetCardInfo("Hinterland Harbor", 241, Rarity.RARE, mage.cards.h.HinterlandHarbor.class)); cards.add(new SetCardInfo("Hollowhenge Scavenger", 188, Rarity.UNCOMMON, mage.cards.h.HollowhengeScavenger.class)); - cards.add(new SetCardInfo("Homicidal Brute", 47, Rarity.UNCOMMON, mage.cards.h.HomicidalBrute.class)); cards.add(new SetCardInfo("Howlpack Alpha", 193, Rarity.RARE, mage.cards.h.HowlpackAlpha.class)); cards.add(new SetCardInfo("Howlpack of Estwald", 209, Rarity.COMMON, mage.cards.h.HowlpackOfEstwald.class)); cards.add(new SetCardInfo("Hysterical Blindness", 59, Rarity.COMMON, mage.cards.h.HystericalBlindness.class)); @@ -299,7 +298,6 @@ public final class Innistrad extends ExpansionSet { cards.add(new SetCardInfo("Unbreathing Horde", 121, Rarity.RARE, mage.cards.u.UnbreathingHorde.class)); cards.add(new SetCardInfo("Unburial Rites", 122, Rarity.UNCOMMON, mage.cards.u.UnburialRites.class)); cards.add(new SetCardInfo("Undead Alchemist", 84, Rarity.RARE, mage.cards.u.UndeadAlchemist.class)); - cards.add(new SetCardInfo("Unholy Fiend", 8, Rarity.UNCOMMON, mage.cards.u.UnholyFiend.class)); cards.add(new SetCardInfo("Unruly Mob", 39, Rarity.COMMON, mage.cards.u.UnrulyMob.class)); cards.add(new SetCardInfo("Urgent Exorcism", 40, Rarity.COMMON, mage.cards.u.UrgentExorcism.class)); cards.add(new SetCardInfo("Vampire Interloper", 123, Rarity.COMMON, mage.cards.v.VampireInterloper.class)); diff --git a/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java b/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java index 18686d0afeb..379480897b0 100644 --- a/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java +++ b/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java @@ -95,7 +95,6 @@ public final class InnistradCrimsonVow extends ExpansionSet { 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)); cards.add(new SetCardInfo("Cartographer's Survey", 190, Rarity.UNCOMMON, mage.cards.c.CartographersSurvey.class)); - cards.add(new SetCardInfo("Catapult Captain", 99, Rarity.UNCOMMON, mage.cards.c.CatapultCaptain.class)); cards.add(new SetCardInfo("Catapult Fodder", 99, Rarity.UNCOMMON, mage.cards.c.CatapultFodder.class)); cards.add(new SetCardInfo("Catlike Curiosity", 69, Rarity.UNCOMMON, mage.cards.c.CatlikeCuriosity.class)); cards.add(new SetCardInfo("Cemetery Desecrator", 100, Rarity.MYTHIC, mage.cards.c.CemeteryDesecrator.class, NON_FULL_USE_VARIOUS)); @@ -384,8 +383,6 @@ public final class InnistradCrimsonVow extends ExpansionSet { cards.add(new SetCardInfo("Restless Bloodseeker", 128, Rarity.UNCOMMON, mage.cards.r.RestlessBloodseeker.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Restless Bloodseeker", 295, Rarity.UNCOMMON, mage.cards.r.RestlessBloodseeker.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Retrieve", 215, Rarity.UNCOMMON, mage.cards.r.Retrieve.class)); - cards.add(new SetCardInfo("Revealing Eye", 101, Rarity.RARE, mage.cards.r.RevealingEye.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Revealing Eye", 367, Rarity.RARE, mage.cards.r.RevealingEye.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Riphook Raider", 203, Rarity.COMMON, mage.cards.r.RiphookRaider.class)); cards.add(new SetCardInfo("Rot-Tide Gargantua", 129, Rarity.COMMON, mage.cards.r.RotTideGargantua.class)); cards.add(new SetCardInfo("Runebound Wolf", 176, Rarity.UNCOMMON, mage.cards.r.RuneboundWolf.class)); @@ -395,7 +392,6 @@ public final class InnistradCrimsonVow extends ExpansionSet { cards.add(new SetCardInfo("Rural Recruit", 216, Rarity.COMMON, mage.cards.r.RuralRecruit.class)); cards.add(new SetCardInfo("Sanctify", 33, Rarity.COMMON, mage.cards.s.Sanctify.class)); cards.add(new SetCardInfo("Sanguine Statuette", 177, Rarity.UNCOMMON, mage.cards.s.SanguineStatuette.class)); - cards.add(new SetCardInfo("Savage Packmate", 234, Rarity.UNCOMMON, mage.cards.s.SavagePackmate.class)); cards.add(new SetCardInfo("Savior of Ollenbock", 330, Rarity.MYTHIC, mage.cards.s.SaviorOfOllenbock.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Savior of Ollenbock", 34, Rarity.MYTHIC, mage.cards.s.SaviorOfOllenbock.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Savior of Ollenbock", 352, Rarity.MYTHIC, mage.cards.s.SaviorOfOllenbock.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java b/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java index bd80edda93f..5165cfbd0be 100644 --- a/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java +++ b/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java @@ -107,7 +107,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Candlelit Cavalry", 175, Rarity.COMMON, mage.cards.c.CandlelitCavalry.class)); cards.add(new SetCardInfo("Candletrap", 9, Rarity.COMMON, mage.cards.c.Candletrap.class)); cards.add(new SetCardInfo("Cartographer's Survey", 457, Rarity.UNCOMMON, mage.cards.c.CartographersSurvey.class)); - cards.add(new SetCardInfo("Catapult Captain", 366, Rarity.UNCOMMON, mage.cards.c.CatapultCaptain.class)); cards.add(new SetCardInfo("Catapult Fodder", 366, Rarity.UNCOMMON, mage.cards.c.CatapultFodder.class)); cards.add(new SetCardInfo("Cathar Commando", 10, Rarity.COMMON, mage.cards.c.CatharCommando.class)); cards.add(new SetCardInfo("Cathar's Call", 11, Rarity.UNCOMMON, mage.cards.c.CatharsCall.class)); @@ -123,7 +122,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Champion of the Perished", 91, Rarity.RARE, mage.cards.c.ChampionOfThePerished.class)); cards.add(new SetCardInfo("Chandra, Dressed to Kill", 416, Rarity.MYTHIC, mage.cards.c.ChandraDressedToKill.class)); cards.add(new SetCardInfo("Change of Fortune", 417, Rarity.RARE, mage.cards.c.ChangeOfFortune.class)); - cards.add(new SetCardInfo("Chapel Shieldgeist", 13, Rarity.UNCOMMON, mage.cards.c.ChapelShieldgeist.class)); cards.add(new SetCardInfo("Chaplain of Alms", 13, Rarity.UNCOMMON, mage.cards.c.ChaplainOfAlms.class)); cards.add(new SetCardInfo("Child of the Pack", 501, Rarity.UNCOMMON, mage.cards.c.ChildOfThePack.class)); cards.add(new SetCardInfo("Chill of the Grave", 318, Rarity.COMMON, mage.cards.c.ChillOfTheGrave.class)); @@ -145,7 +143,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Courier Bat", 369, Rarity.COMMON, mage.cards.c.CourierBat.class)); cards.add(new SetCardInfo("Covert Cutpurse", 92, Rarity.UNCOMMON, mage.cards.c.CovertCutpurse.class)); cards.add(new SetCardInfo("Covetous Castaway", 45, Rarity.UNCOMMON, mage.cards.c.CovetousCastaway.class)); - cards.add(new SetCardInfo("Covetous Geist", 92, Rarity.UNCOMMON, mage.cards.c.CovetousGeist.class)); cards.add(new SetCardInfo("Cradle of Safety", 321, Rarity.COMMON, mage.cards.c.CradleOfSafety.class)); cards.add(new SetCardInfo("Crawl from the Cellar", 93, Rarity.COMMON, mage.cards.c.CrawlFromTheCellar.class)); cards.add(new SetCardInfo("Crawling Infestation", 460, Rarity.UNCOMMON, mage.cards.c.CrawlingInfestation.class)); @@ -270,7 +267,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Geistwave", 56, Rarity.COMMON, mage.cards.g.Geistwave.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)); cards.add(new SetCardInfo("Ghoulcaller's Harvest", 225, Rarity.RARE, mage.cards.g.GhoulcallersHarvest.class)); cards.add(new SetCardInfo("Ghoulish Procession", 102, Rarity.UNCOMMON, mage.cards.g.GhoulishProcession.class)); cards.add(new SetCardInfo("Gift of Fangs", 380, Rarity.COMMON, mage.cards.g.GiftOfFangs.class)); @@ -359,7 +355,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Lantern of the Lost", 526, Rarity.UNCOMMON, mage.cards.l.LanternOfTheLost.class)); cards.add(new SetCardInfo("Lanterns' Lift", 333, Rarity.COMMON, mage.cards.l.LanternsLift.class)); cards.add(new SetCardInfo("Larder Zombie", 58, Rarity.COMMON, mage.cards.l.LarderZombie.class)); - cards.add(new SetCardInfo("Leeching Lurker", 94, Rarity.RARE, mage.cards.l.LeechingLurker.class)); cards.add(new SetCardInfo("Lier, Disciple of the Drowned", 59, Rarity.MYTHIC, mage.cards.l.LierDiscipleOfTheDrowned.class)); cards.add(new SetCardInfo("Liesa, Forgotten Archangel", 232, Rarity.RARE, mage.cards.l.LiesaForgottenArchangel.class)); cards.add(new SetCardInfo("Light Up the Night", 146, Rarity.RARE, mage.cards.l.LightUpTheNight.class)); @@ -467,7 +462,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Restless Bloodseeker", 395, Rarity.UNCOMMON, mage.cards.r.RestlessBloodseeker.class)); cards.add(new SetCardInfo("Retrieve", 482, Rarity.UNCOMMON, mage.cards.r.Retrieve.class)); cards.add(new SetCardInfo("Return to Nature", 195, Rarity.COMMON, mage.cards.r.ReturnToNature.class)); - cards.add(new SetCardInfo("Revealing Eye", 368, Rarity.RARE, mage.cards.r.RevealingEye.class)); cards.add(new SetCardInfo("Revenge of the Drowned", 72, Rarity.COMMON, mage.cards.r.RevengeOfTheDrowned.class)); cards.add(new SetCardInfo("Riphook Raider", 470, Rarity.COMMON, mage.cards.r.RiphookRaider.class)); cards.add(new SetCardInfo("Rise of the Ants", 196, Rarity.UNCOMMON, mage.cards.r.RiseOfTheAnts.class)); @@ -486,7 +480,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Sanctify", 300, Rarity.COMMON, mage.cards.s.Sanctify.class)); cards.add(new SetCardInfo("Sanguine Statuette", 444, Rarity.UNCOMMON, mage.cards.s.SanguineStatuette.class)); cards.add(new SetCardInfo("Saryth, the Viper's Fang", 197, Rarity.RARE, mage.cards.s.SarythTheVipersFang.class)); - cards.add(new SetCardInfo("Savage Packmate", 501, Rarity.UNCOMMON, mage.cards.s.SavagePackmate.class)); cards.add(new SetCardInfo("Savior of Ollenbock", 301, Rarity.MYTHIC, mage.cards.s.SaviorOfOllenbock.class)); cards.add(new SetCardInfo("Sawblade Slinger", 484, Rarity.UNCOMMON, mage.cards.s.SawbladeSlinger.class)); cards.add(new SetCardInfo("Scattered Thoughts", 341, Rarity.COMMON, mage.cards.s.ScatteredThoughts.class)); diff --git a/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java b/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java index 20fae733aa7..d96e94aacc7 100644 --- a/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java +++ b/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java @@ -104,7 +104,6 @@ public final class InnistradMidnightHunt extends ExpansionSet { cards.add(new SetCardInfo("Champion of the Perished", 344, Rarity.RARE, mage.cards.c.ChampionOfThePerished.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Champion of the Perished", 385, Rarity.RARE, mage.cards.c.ChampionOfThePerished.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Champion of the Perished", 91, Rarity.RARE, mage.cards.c.ChampionOfThePerished.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Chapel Shieldgeist", 13, Rarity.UNCOMMON, mage.cards.c.ChapelShieldgeist.class)); cards.add(new SetCardInfo("Chaplain of Alms", 13, Rarity.UNCOMMON, mage.cards.c.ChaplainOfAlms.class)); cards.add(new SetCardInfo("Chilling Chronicle", 63, Rarity.UNCOMMON, mage.cards.c.ChillingChronicle.class)); cards.add(new SetCardInfo("Clarion Cathars", 14, Rarity.COMMON, mage.cards.c.ClarionCathars.class)); @@ -118,7 +117,6 @@ public final class InnistradMidnightHunt extends ExpansionSet { cards.add(new SetCardInfo("Corpse Cobble", 214, Rarity.UNCOMMON, mage.cards.c.CorpseCobble.class)); cards.add(new SetCardInfo("Covert Cutpurse", 92, Rarity.UNCOMMON, mage.cards.c.CovertCutpurse.class)); cards.add(new SetCardInfo("Covetous Castaway", 45, Rarity.UNCOMMON, mage.cards.c.CovetousCastaway.class)); - cards.add(new SetCardInfo("Covetous Geist", 92, Rarity.UNCOMMON, mage.cards.c.CovetousGeist.class)); cards.add(new SetCardInfo("Crawl from the Cellar", 93, Rarity.COMMON, mage.cards.c.CrawlFromTheCellar.class)); cards.add(new SetCardInfo("Creeping Inn", 264, Rarity.MYTHIC, mage.cards.c.CreepingInn.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Creeping Inn", 379, Rarity.MYTHIC, mage.cards.c.CreepingInn.class, NON_FULL_USE_VARIOUS)); @@ -212,7 +210,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("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)); cards.add(new SetCardInfo("Ghoulish Procession", 102, Rarity.UNCOMMON, mage.cards.g.GhoulishProcession.class)); @@ -267,8 +264,6 @@ public final class InnistradMidnightHunt extends ExpansionSet { cards.add(new SetCardInfo("Kessig Naturalist", 310, Rarity.UNCOMMON, mage.cards.k.KessigNaturalist.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Lambholt Harrier", 145, Rarity.COMMON, mage.cards.l.LambholtHarrier.class)); cards.add(new SetCardInfo("Larder Zombie", 58, Rarity.COMMON, mage.cards.l.LarderZombie.class)); - cards.add(new SetCardInfo("Leeching Lurker", 345, Rarity.RARE, mage.cards.l.LeechingLurker.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Leeching Lurker", 94, Rarity.RARE, mage.cards.l.LeechingLurker.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Lier, Disciple of the Drowned", 313, Rarity.MYTHIC, mage.cards.l.LierDiscipleOfTheDrowned.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Lier, Disciple of the Drowned", 59, Rarity.MYTHIC, mage.cards.l.LierDiscipleOfTheDrowned.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Liesa, Forgotten Archangel", 232, Rarity.RARE, mage.cards.l.LiesaForgottenArchangel.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/InnistradRemastered.java b/Mage.Sets/src/mage/sets/InnistradRemastered.java index 57eb522bb7e..cccbfe53bc6 100644 --- a/Mage.Sets/src/mage/sets/InnistradRemastered.java +++ b/Mage.Sets/src/mage/sets/InnistradRemastered.java @@ -54,8 +54,6 @@ public class InnistradRemastered extends ExpansionSet { cards.add(new SetCardInfo("Ashmouth Blade", 473, Rarity.UNCOMMON, mage.cards.a.AshmouthBlade.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Asylum Visitor", 371, Rarity.UNCOMMON, mage.cards.a.AsylumVisitor.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Asylum Visitor", 96, Rarity.UNCOMMON, mage.cards.a.AsylumVisitor.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Aurora of Emrakul", 260, Rarity.UNCOMMON, mage.cards.a.AuroraOfEmrakul.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Aurora of Emrakul", 472, Rarity.UNCOMMON, mage.cards.a.AuroraOfEmrakul.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Avacyn, Angel of Hope", 477, Rarity.MYTHIC, mage.cards.a.AvacynAngelOfHope.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Avacyn, Angel of Hope", 482, Rarity.MYTHIC, mage.cards.a.AvacynAngelOfHope.class, FULL_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Avacynian Priest", 12, Rarity.COMMON, mage.cards.a.AvacynianPriest.class, NON_FULL_USE_VARIOUS)); @@ -117,8 +115,6 @@ public class InnistradRemastered extends ExpansionSet { cards.add(new SetCardInfo("Cathars' Crusade", 17, Rarity.RARE, mage.cards.c.CatharsCrusade.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Cathars' Crusade", 337, Rarity.RARE, mage.cards.c.CatharsCrusade.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Cathars' Crusade", 483, Rarity.RARE, mage.cards.c.CatharsCrusade.class, FULL_ART_USE_VARIOUS)); - cards.add(new SetCardInfo("Chalice of Death", 257, Rarity.UNCOMMON, mage.cards.c.ChaliceOfDeath.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Chalice of Death", 471, Rarity.UNCOMMON, mage.cards.c.ChaliceOfDeath.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Chalice of Life", 257, Rarity.UNCOMMON, mage.cards.c.ChaliceOfLife.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Chalice of Life", 471, Rarity.UNCOMMON, mage.cards.c.ChaliceOfLife.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Chandra, Dressed to Kill", 148, Rarity.MYTHIC, mage.cards.c.ChandraDressedToKill.class)); @@ -133,7 +129,6 @@ public class InnistradRemastered extends ExpansionSet { cards.add(new SetCardInfo("Collective Brutality", 375, Rarity.RARE, mage.cards.c.CollectiveBrutality.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Collective Defiance", 149, Rarity.RARE, mage.cards.c.CollectiveDefiance.class)); cards.add(new SetCardInfo("Compelling Deterrence", 57, Rarity.UNCOMMON, mage.cards.c.CompellingDeterrence.class)); - cards.add(new SetCardInfo("Conduit of Emrakul", 150, Rarity.COMMON, mage.cards.c.ConduitOfEmrakul.class)); cards.add(new SetCardInfo("Conduit of Storms", 150, Rarity.COMMON, mage.cards.c.ConduitOfStorms.class)); cards.add(new SetCardInfo("Conjurer's Closet", 259, Rarity.RARE, mage.cards.c.ConjurersCloset.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Conjurer's Closet", 321, Rarity.RARE, mage.cards.c.ConjurersCloset.class, NON_FULL_USE_VARIOUS)); @@ -232,8 +227,6 @@ public class InnistradRemastered extends ExpansionSet { cards.add(new SetCardInfo("Geistcatcher's Rig", 264, Rarity.UNCOMMON, mage.cards.g.GeistcatchersRig.class)); cards.add(new SetCardInfo("Geistlight Snare", 356, Rarity.UNCOMMON, mage.cards.g.GeistlightSnare.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Geistlight Snare", 66, Rarity.UNCOMMON, mage.cards.g.GeistlightSnare.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Ghostly Castigator", 456, Rarity.UNCOMMON, mage.cards.g.GhostlyCastigator.class, RETRO_ART_USE_VARIOUS)); - cards.add(new SetCardInfo("Ghostly Castigator", 58, Rarity.UNCOMMON, mage.cards.g.GhostlyCastigator.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ghoulish Procession", 110, Rarity.UNCOMMON, mage.cards.g.GhoulishProcession.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Ghoulish Procession", 378, Rarity.UNCOMMON, mage.cards.g.GhoulishProcession.class, RETRO_ART_USE_VARIOUS)); cards.add(new SetCardInfo("Ghoultree", 198, Rarity.UNCOMMON, mage.cards.g.Ghoultree.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/Ixalan.java b/Mage.Sets/src/mage/sets/Ixalan.java index d3358afd092..45db997511a 100644 --- a/Mage.Sets/src/mage/sets/Ixalan.java +++ b/Mage.Sets/src/mage/sets/Ixalan.java @@ -74,7 +74,6 @@ public final class Ixalan extends ExpansionSet { cards.add(new SetCardInfo("Cobbled Wings", 233, Rarity.COMMON, mage.cards.c.CobbledWings.class)); cards.add(new SetCardInfo("Colossal Dreadmaw", 180, Rarity.COMMON, mage.cards.c.ColossalDreadmaw.class)); cards.add(new SetCardInfo("Commune with Dinosaurs", 181, Rarity.COMMON, mage.cards.c.CommuneWithDinosaurs.class)); - cards.add(new SetCardInfo("Conqueror's Foothold", 234, Rarity.RARE, mage.cards.c.ConquerorsFoothold.class)); cards.add(new SetCardInfo("Conqueror's Galleon", 234, Rarity.RARE, mage.cards.c.ConquerorsGalleon.class)); cards.add(new SetCardInfo("Contract Killing", 95, Rarity.COMMON, mage.cards.c.ContractKilling.class)); cards.add(new SetCardInfo("Costly Plunder", 96, Rarity.COMMON, mage.cards.c.CostlyPlunder.class)); diff --git a/Mage.Sets/src/mage/sets/IxalanPromos.java b/Mage.Sets/src/mage/sets/IxalanPromos.java index c1342bc6ff5..0a8b4ce8bb8 100644 --- a/Mage.Sets/src/mage/sets/IxalanPromos.java +++ b/Mage.Sets/src/mage/sets/IxalanPromos.java @@ -42,7 +42,6 @@ public class IxalanPromos extends ExpansionSet { cards.add(new SetCardInfo("Captivating Crew", "137s", Rarity.RARE, mage.cards.c.CaptivatingCrew.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Carnage Tyrant", "179p", Rarity.MYTHIC, mage.cards.c.CarnageTyrant.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Carnage Tyrant", "179s", Rarity.MYTHIC, mage.cards.c.CarnageTyrant.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Conqueror's Foothold", "234s", Rarity.RARE, mage.cards.c.ConquerorsFoothold.class)); cards.add(new SetCardInfo("Conqueror's Galleon", "234s", Rarity.RARE, mage.cards.c.ConquerorsGalleon.class)); cards.add(new SetCardInfo("Daring Saboteur", "49s", Rarity.RARE, mage.cards.d.DaringSaboteur.class)); cards.add(new SetCardInfo("Deadeye Tracker", "99p", Rarity.RARE, mage.cards.d.DeadeyeTracker.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/MagicOnlinePromos.java b/Mage.Sets/src/mage/sets/MagicOnlinePromos.java index 4ba0fe4a8b8..108f71c9620 100644 --- a/Mage.Sets/src/mage/sets/MagicOnlinePromos.java +++ b/Mage.Sets/src/mage/sets/MagicOnlinePromos.java @@ -1526,7 +1526,6 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Leaf-Crowned Visionary", 103462, Rarity.RARE, mage.cards.l.LeafCrownedVisionary.class)); cards.add(new SetCardInfo("Leatherback Baloth", 43576, Rarity.UNCOMMON, mage.cards.l.LeatherbackBaloth.class)); cards.add(new SetCardInfo("Ledger Shredder", 99733, Rarity.RARE, mage.cards.l.LedgerShredder.class)); - cards.add(new SetCardInfo("Leeching Lurker", 93988, Rarity.RARE, mage.cards.l.LeechingLurker.class)); cards.add(new SetCardInfo("Legion Angel", 83754, Rarity.RARE, mage.cards.l.LegionAngel.class)); cards.add(new SetCardInfo("Legions to Ashes", 105784, Rarity.RARE, mage.cards.l.LegionsToAshes.class)); cards.add(new SetCardInfo("Leinore, Autumn Sovereign", 94054, Rarity.MYTHIC, mage.cards.l.LeinoreAutumnSovereign.class)); @@ -2219,7 +2218,6 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Retaliator Griffin", 43546, Rarity.RARE, mage.cards.r.RetaliatorGriffin.class)); cards.add(new SetCardInfo("Retriever Phoenix", 90094, Rarity.RARE, mage.cards.r.RetrieverPhoenix.class)); cards.add(new SetCardInfo("Return to Dust", 86104, Rarity.UNCOMMON, mage.cards.r.ReturnToDust.class)); - cards.add(new SetCardInfo("Revealing Eye", 95351, Rarity.RARE, mage.cards.r.RevealingEye.class)); cards.add(new SetCardInfo("Revenant", 32192, Rarity.RARE, mage.cards.r.Revenant.class, RETRO_ART)); cards.add(new SetCardInfo("Reverse Engineer", 64995, Rarity.UNCOMMON, mage.cards.r.ReverseEngineer.class)); cards.add(new SetCardInfo("Revival Experiment", 90220, Rarity.RARE, mage.cards.r.RevivalExperiment.class)); diff --git a/Mage.Sets/src/mage/sets/MagicOrigins.java b/Mage.Sets/src/mage/sets/MagicOrigins.java index 5b3187549d1..b63aa10a45c 100644 --- a/Mage.Sets/src/mage/sets/MagicOrigins.java +++ b/Mage.Sets/src/mage/sets/MagicOrigins.java @@ -72,7 +72,6 @@ public final class MagicOrigins extends ExpansionSet { cards.add(new SetCardInfo("Caves of Koilos", 245, Rarity.RARE, mage.cards.c.CavesOfKoilos.class)); cards.add(new SetCardInfo("Celestial Flare", 8, Rarity.COMMON, mage.cards.c.CelestialFlare.class)); cards.add(new SetCardInfo("Chandra, Fire of Kaladesh", 135, Rarity.MYTHIC, mage.cards.c.ChandraFireOfKaladesh.class)); - cards.add(new SetCardInfo("Chandra, Roaring Flame", 135, Rarity.MYTHIC, mage.cards.c.ChandraRoaringFlame.class)); cards.add(new SetCardInfo("Chandra's Fury", 136, Rarity.COMMON, mage.cards.c.ChandrasFury.class)); cards.add(new SetCardInfo("Chandra's Ignition", 137, Rarity.RARE, mage.cards.c.ChandrasIgnition.class)); cards.add(new SetCardInfo("Charging Griffin", 9, Rarity.COMMON, mage.cards.c.ChargingGriffin.class)); diff --git a/Mage.Sets/src/mage/sets/MagicOriginsPromos.java b/Mage.Sets/src/mage/sets/MagicOriginsPromos.java index b76caff8a79..07480981180 100644 --- a/Mage.Sets/src/mage/sets/MagicOriginsPromos.java +++ b/Mage.Sets/src/mage/sets/MagicOriginsPromos.java @@ -25,7 +25,6 @@ public class MagicOriginsPromos extends ExpansionSet { cards.add(new SetCardInfo("Alhammarret, High Arbiter", "43s", Rarity.RARE, mage.cards.a.AlhammarretHighArbiter.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Chandra's Ignition", "137s", Rarity.RARE, mage.cards.c.ChandrasIgnition.class)); cards.add(new SetCardInfo("Chandra, Fire of Kaladesh", "135s", Rarity.MYTHIC, mage.cards.c.ChandraFireOfKaladesh.class)); - cards.add(new SetCardInfo("Chandra, Roaring Flame", "135s", Rarity.MYTHIC, mage.cards.c.ChandraRoaringFlame.class)); cards.add(new SetCardInfo("Conclave Naturalists", 171, Rarity.UNCOMMON, mage.cards.c.ConclaveNaturalists.class)); cards.add(new SetCardInfo("Dark Petition", "90s", Rarity.RARE, mage.cards.d.DarkPetition.class)); cards.add(new SetCardInfo("Despoiler of Souls", "93s", Rarity.RARE, mage.cards.d.DespoilerOfSouls.class)); diff --git a/Mage.Sets/src/mage/sets/MarchOfTheMachine.java b/Mage.Sets/src/mage/sets/MarchOfTheMachine.java index 9d1e47d4994..6c310936d61 100644 --- a/Mage.Sets/src/mage/sets/MarchOfTheMachine.java +++ b/Mage.Sets/src/mage/sets/MarchOfTheMachine.java @@ -103,7 +103,6 @@ public final class MarchOfTheMachine extends ExpansionSet { cards.add(new SetCardInfo("City on Fire", 363, Rarity.RARE, mage.cards.c.CityOnFire.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Collective Nightmare", 95, Rarity.UNCOMMON, mage.cards.c.CollectiveNightmare.class)); cards.add(new SetCardInfo("Coming In Hot", 136, Rarity.COMMON, mage.cards.c.ComingInHot.class)); - cards.add(new SetCardInfo("Compleated Conjurer", 49, Rarity.UNCOMMON, mage.cards.c.CompleatedConjurer.class)); cards.add(new SetCardInfo("Compleated Huntmaster", 96, Rarity.UNCOMMON, mage.cards.c.CompleatedHuntmaster.class)); cards.add(new SetCardInfo("Complete the Circuit", 351, Rarity.RARE, mage.cards.c.CompleteTheCircuit.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Complete the Circuit", 52, Rarity.RARE, mage.cards.c.CompleteTheCircuit.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/SanDiegoComicCon2015.java b/Mage.Sets/src/mage/sets/SanDiegoComicCon2015.java index f36f6f8a0d8..ebe390ac11f 100644 --- a/Mage.Sets/src/mage/sets/SanDiegoComicCon2015.java +++ b/Mage.Sets/src/mage/sets/SanDiegoComicCon2015.java @@ -21,7 +21,6 @@ public class SanDiegoComicCon2015 extends ExpansionSet { this.hasBasicLands = false; cards.add(new SetCardInfo("Chandra, Fire of Kaladesh", 135, Rarity.MYTHIC, mage.cards.c.ChandraFireOfKaladesh.class)); - cards.add(new SetCardInfo("Chandra, Roaring Flame", 135, Rarity.MYTHIC, mage.cards.c.ChandraRoaringFlame.class)); cards.add(new SetCardInfo("Gideon, Battle-Forged", 23, Rarity.MYTHIC, mage.cards.g.GideonBattleForged.class)); cards.add(new SetCardInfo("Jace, Telepath Unbound", 60, Rarity.MYTHIC, mage.cards.j.JaceTelepathUnbound.class)); cards.add(new SetCardInfo("Jace, Vryn's Prodigy", 60, Rarity.MYTHIC, mage.cards.j.JaceVrynsProdigy.class)); diff --git a/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java b/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java index b8d99947220..e62eef15ef5 100644 --- a/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java +++ b/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java @@ -62,7 +62,6 @@ public final class ShadowsOverInnistrad extends ExpansionSet { cards.add(new SetCardInfo("Bloodmad Vampire", 146, Rarity.COMMON, mage.cards.b.BloodmadVampire.class)); cards.add(new SetCardInfo("Bound by Moonsilver", 7, Rarity.UNCOMMON, mage.cards.b.BoundByMoonsilver.class)); cards.add(new SetCardInfo("Brain in a Jar", 252, Rarity.RARE, mage.cards.b.BrainInAJar.class)); - cards.add(new SetCardInfo("Branded Howler", 149, Rarity.COMMON, mage.cards.b.BrandedHowler.class)); cards.add(new SetCardInfo("Breakneck Rider", 147, Rarity.UNCOMMON, mage.cards.b.BreakneckRider.class)); cards.add(new SetCardInfo("Briarbridge Patrol", 195, Rarity.UNCOMMON, mage.cards.b.BriarbridgePatrol.class)); cards.add(new SetCardInfo("Broken Concentration", 50, Rarity.UNCOMMON, mage.cards.b.BrokenConcentration.class)); diff --git a/Mage.Sets/src/mage/sets/ShadowsOverInnistradRemastered.java b/Mage.Sets/src/mage/sets/ShadowsOverInnistradRemastered.java index 924bea1a9ad..c649fa2fb9f 100644 --- a/Mage.Sets/src/mage/sets/ShadowsOverInnistradRemastered.java +++ b/Mage.Sets/src/mage/sets/ShadowsOverInnistradRemastered.java @@ -41,7 +41,6 @@ public class ShadowsOverInnistradRemastered extends ExpansionSet { cards.add(new SetCardInfo("Arlinn Kord", 230, Rarity.MYTHIC, mage.cards.a.ArlinnKord.class)); cards.add(new SetCardInfo("Ashmouth Blade", 256, Rarity.UNCOMMON, mage.cards.a.AshmouthBlade.class)); cards.add(new SetCardInfo("Assembled Alphas", 141, Rarity.RARE, mage.cards.a.AssembledAlphas.class)); - cards.add(new SetCardInfo("Aurora of Emrakul", 248, Rarity.UNCOMMON, mage.cards.a.AuroraOfEmrakul.class)); cards.add(new SetCardInfo("Avacyn's Judgment", 142, Rarity.RARE, mage.cards.a.AvacynsJudgment.class)); cards.add(new SetCardInfo("Awoken Horror", 95, Rarity.RARE, mage.cards.a.AwokenHorror.class)); cards.add(new SetCardInfo("Bearer of Overwhelming Truths", 59, Rarity.UNCOMMON, mage.cards.b.BearerOfOverwhelmingTruths.class)); @@ -72,7 +71,6 @@ public class ShadowsOverInnistradRemastered extends ExpansionSet { cards.add(new SetCardInfo("Collective Defiance", 148, Rarity.RARE, mage.cards.c.CollectiveDefiance.class)); cards.add(new SetCardInfo("Collective Effort", 19, Rarity.RARE, mage.cards.c.CollectiveEffort.class)); cards.add(new SetCardInfo("Compelling Deterrence", 55, Rarity.UNCOMMON, mage.cards.c.CompellingDeterrence.class)); - cards.add(new SetCardInfo("Conduit of Emrakul", 149, Rarity.COMMON, mage.cards.c.ConduitOfEmrakul.class)); cards.add(new SetCardInfo("Conduit of Storms", 149, Rarity.COMMON, mage.cards.c.ConduitOfStorms.class)); cards.add(new SetCardInfo("Confirm Suspicions", 56, Rarity.RARE, mage.cards.c.ConfirmSuspicions.class)); cards.add(new SetCardInfo("Confront the Unknown", 190, Rarity.COMMON, mage.cards.c.ConfrontTheUnknown.class)); diff --git a/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java b/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java index 5723dfe4319..a8e3a48c9ed 100644 --- a/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java +++ b/Mage.Sets/src/mage/sets/TheLostCavernsOfIxalan.java @@ -130,7 +130,6 @@ public final class TheLostCavernsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Cosmium Blast", 7, Rarity.COMMON, mage.cards.c.CosmiumBlast.class)); cards.add(new SetCardInfo("Cosmium Confluence", 181, Rarity.RARE, mage.cards.c.CosmiumConfluence.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Cosmium Confluence", 379, Rarity.RARE, mage.cards.c.CosmiumConfluence.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Cosmium Kiln", 6, Rarity.UNCOMMON, mage.cards.c.CosmiumKiln.class)); cards.add(new SetCardInfo("Council of Echoes", 51, Rarity.UNCOMMON, mage.cards.c.CouncilOfEchoes.class)); cards.add(new SetCardInfo("Curator of Sun's Creation", 141, Rarity.UNCOMMON, mage.cards.c.CuratorOfSunsCreation.class)); cards.add(new SetCardInfo("Daring Discovery", 142, Rarity.COMMON, mage.cards.d.DaringDiscovery.class)); diff --git a/Mage.Sets/src/mage/sets/Transformers.java b/Mage.Sets/src/mage/sets/Transformers.java index 703a3ac0450..7ea26010c82 100644 --- a/Mage.Sets/src/mage/sets/Transformers.java +++ b/Mage.Sets/src/mage/sets/Transformers.java @@ -21,7 +21,6 @@ public final class Transformers extends ExpansionSet { cards.add(new SetCardInfo("Arcee, Sharpshooter", 7, Rarity.MYTHIC, mage.cards.a.ArceeSharpshooter.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)); cards.add(new SetCardInfo("Flamewar, Brash Veteran", 10, Rarity.MYTHIC, mage.cards.f.FlamewarBrashVeteran.class)); cards.add(new SetCardInfo("Flamewar, Streetwise Operative", 10, Rarity.MYTHIC, mage.cards.f.FlamewarStreetwiseOperative.class)); diff --git a/Mage.Sets/src/mage/sets/XLNTreasureChest.java b/Mage.Sets/src/mage/sets/XLNTreasureChest.java index 0f679ce2357..c8e572008dc 100644 --- a/Mage.Sets/src/mage/sets/XLNTreasureChest.java +++ b/Mage.Sets/src/mage/sets/XLNTreasureChest.java @@ -23,7 +23,6 @@ public class XLNTreasureChest extends ExpansionSet { cards.add(new SetCardInfo("Adanto, the First Fort", 22, Rarity.RARE, mage.cards.a.AdantoTheFirstFort.class)); cards.add(new SetCardInfo("Arguel's Blood Fast", 90, Rarity.RARE, mage.cards.a.ArguelsBloodFast.class)); cards.add(new SetCardInfo("Azcanta, the Sunken Ruin", 74, Rarity.RARE, mage.cards.a.AzcantaTheSunkenRuin.class)); - cards.add(new SetCardInfo("Conqueror's Foothold", 234, Rarity.RARE, mage.cards.c.ConquerorsFoothold.class)); cards.add(new SetCardInfo("Conqueror's Galleon", 234, Rarity.RARE, mage.cards.c.ConquerorsGalleon.class)); cards.add(new SetCardInfo("Dowsing Dagger", 235, Rarity.RARE, mage.cards.d.DowsingDagger.class)); cards.add(new SetCardInfo("Growing Rites of Itlimoc", 191, Rarity.RARE, mage.cards.g.GrowingRitesOfItlimoc.class));