diff --git a/Mage.Sets/src/mage/cards/c/CacklingCulprit.java b/Mage.Sets/src/mage/cards/c/CacklingCulprit.java deleted file mode 100644 index c3cbc192ecf..00000000000 --- a/Mage.Sets/src/mage/cards/c/CacklingCulprit.java +++ /dev/null @@ -1,53 +0,0 @@ -package mage.cards.c; - -import mage.MageInt; -import mage.abilities.common.DiesThisOrAnotherTriggeredAbility; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.GainLifeEffect; -import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; -import mage.abilities.keyword.DeathtouchAbility; -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 CacklingCulprit extends CardImpl { - - public CacklingCulprit(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.ROGUE); - this.power = new MageInt(3); - this.toughness = new MageInt(5); - this.color.setBlack(true); - this.nightCard = true; - - // Whenever Cackling Culprit or another creature you control dies, you gain 1 life. - this.addAbility(new DiesThisOrAnotherTriggeredAbility( - new GainLifeEffect(1), false, StaticFilters.FILTER_CONTROLLED_CREATURE - )); - - // {1}{B}: Cackling Culprit gains deathtouch until end of turn. - this.addAbility(new SimpleActivatedAbility(new GainAbilitySourceEffect( - DeathtouchAbility.getInstance(), Duration.EndOfTurn - ), new ManaCostsImpl<>("{1}{B}"))); - } - - private CacklingCulprit(final CacklingCulprit card) { - super(card); - } - - @Override - public CacklingCulprit copy() { - return new CacklingCulprit(this); - } -} diff --git a/Mage.Sets/src/mage/cards/g/GlisteningGoremonger.java b/Mage.Sets/src/mage/cards/g/GlisteningGoremonger.java deleted file mode 100644 index aa682247428..00000000000 --- a/Mage.Sets/src/mage/cards/g/GlisteningGoremonger.java +++ /dev/null @@ -1,42 +0,0 @@ -package mage.cards.g; - -import mage.MageInt; -import mage.abilities.common.DiesSourceTriggeredAbility; -import mage.abilities.effects.common.SacrificeOpponentsEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.filter.StaticFilters; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class GlisteningGoremonger extends CardImpl { - - public GlisteningGoremonger(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.subtype.add(SubType.PHYREXIAN); - this.subtype.add(SubType.DEVIL); - this.power = new MageInt(3); - this.toughness = new MageInt(2); - this.color.setBlack(true); - this.color.setRed(true); - this.nightCard = true; - - // When Glistening Goremonger dies, each opponent sacrifices an artifact or creature. - this.addAbility(new DiesSourceTriggeredAbility(new SacrificeOpponentsEffect(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_CREATURE))); - } - - private GlisteningGoremonger(final GlisteningGoremonger card) { - super(card); - } - - @Override - public GlisteningGoremonger copy() { - return new GlisteningGoremonger(this); - } -} diff --git a/Mage.Sets/src/mage/cards/m/MetzaliTowerOfTriumph.java b/Mage.Sets/src/mage/cards/m/MetzaliTowerOfTriumph.java deleted file mode 100644 index 8ff50743a8a..00000000000 --- a/Mage.Sets/src/mage/cards/m/MetzaliTowerOfTriumph.java +++ /dev/null @@ -1,92 +0,0 @@ -package mage.cards.m; - -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.DamagePlayersEffect; -import mage.abilities.mana.AnyColorManaAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.SuperType; -import mage.constants.TargetController; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.util.RandomUtil; -import mage.watchers.common.AttackedThisTurnWatcher; - -import java.util.Objects; -import java.util.UUID; -import java.util.stream.Collectors; - -/** - * @author LevelX2 - */ -public final class MetzaliTowerOfTriumph extends CardImpl { - - public MetzaliTowerOfTriumph(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); - - this.supertype.add(SuperType.LEGENDARY); - this.nightCard = true; - - // (Transforms from Path of Mettle.) - - // {t}: Add one mana of any color. - this.addAbility(new AnyColorManaAbility()); - - // {1}{R}, {T}: Metzali, Tower of Triumph deals 2 damage to each opponent. - Ability ability = new SimpleActivatedAbility(new DamagePlayersEffect(2, TargetController.OPPONENT), new ManaCostsImpl<>("{1}{R}")); - ability.addCost(new TapSourceCost()); - this.addAbility(ability); - - // {2}{W}, {T}: Choose a creature at random that attacked this turn. Destroy that creature. - ability = new SimpleActivatedAbility(new MetzaliTowerOfTriumphEffect(), new ManaCostsImpl<>("{2}{W}")); - ability.addCost(new TapSourceCost()); - this.addAbility(ability); - } - - private MetzaliTowerOfTriumph(final MetzaliTowerOfTriumph card) { - super(card); - } - - @Override - public MetzaliTowerOfTriumph copy() { - return new MetzaliTowerOfTriumph(this); - } - -} - -class MetzaliTowerOfTriumphEffect extends OneShotEffect { - - MetzaliTowerOfTriumphEffect() { - super(Outcome.DestroyPermanent); - this.staticText = "choose a creature at random that attacked this turn. Destroy that creature"; - } - - private MetzaliTowerOfTriumphEffect(final MetzaliTowerOfTriumphEffect effect) { - super(effect); - } - - @Override - public MetzaliTowerOfTriumphEffect copy() { - return new MetzaliTowerOfTriumphEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent permanent = RandomUtil.randomFromCollection( - game.getState() - .getWatcher(AttackedThisTurnWatcher.class) - .getAttackedThisTurnCreatures() - .stream() - .map(mor -> mor.getPermanent(game)) - .filter(Objects::nonNull) - .collect(Collectors.toSet()) - ); - return permanent != null && permanent.destroy(source, game); - } -} diff --git a/Mage.Sets/src/mage/cards/p/PanickedBystander.java b/Mage.Sets/src/mage/cards/p/PanickedBystander.java index fc914a322bb..ddbd9211755 100644 --- a/Mage.Sets/src/mage/cards/p/PanickedBystander.java +++ b/Mage.Sets/src/mage/cards/p/PanickedBystander.java @@ -1,20 +1,20 @@ package mage.cards.p; -import mage.MageInt; +import mage.abilities.Ability; import mage.abilities.common.DiesThisOrAnotherTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.YouGainedLifeCondition; +import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.dynamicvalue.common.ControllerGainedLifeCount; import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.TransformSourceEffect; -import mage.abilities.keyword.TransformAbility; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.DeathtouchAbility; import mage.abilities.triggers.BeginningOfEndStepTriggeredAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.ComparisonType; -import mage.constants.SubType; -import mage.constants.TargetController; +import mage.cards.TransformingDoubleFacedCard; +import mage.constants.*; import mage.filter.StaticFilters; import mage.watchers.common.PlayerGainedLifeWatcher; @@ -23,30 +23,45 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class PanickedBystander extends CardImpl { +public final class PanickedBystander extends TransformingDoubleFacedCard { private static final Condition condition = new YouGainedLifeCondition(ComparisonType.MORE_THAN, 2); public PanickedBystander(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.PEASANT}, "{1}{W}", + "Cackling Culprit", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.ROGUE}, "B" + ); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.PEASANT); - this.power = new MageInt(2); - this.toughness = new MageInt(2); - this.secondSideCardClazz = mage.cards.c.CacklingCulprit.class; + // Panicked Bystander + this.getLeftHalfCard().setPT(2, 2); // Whenever Panicked Bystander or another creature you control dies, you gain 1 life. - this.addAbility(new DiesThisOrAnotherTriggeredAbility( + this.getLeftHalfCard().addAbility(new DiesThisOrAnotherTriggeredAbility( new GainLifeEffect(1), false, StaticFilters.FILTER_CONTROLLED_CREATURE )); // At the beginning of your end step, if you gained 3 or more life this turn, transform Panicked Bystander. - this.addAbility(new TransformAbility()); - this.addAbility(new BeginningOfEndStepTriggeredAbility( + Ability ability = new BeginningOfEndStepTriggeredAbility( TargetController.YOU, new TransformSourceEffect(), false, condition - ).addHint(ControllerGainedLifeCount.getHint()), new PlayerGainedLifeWatcher()); + ).addHint(ControllerGainedLifeCount.getHint()); + ability.addWatcher(new PlayerGainedLifeWatcher()); + this.getLeftHalfCard().addAbility(ability); + + // Cackling Culprit + this.getRightHalfCard().setPT(3, 5); + + // Whenever Cackling Culprit or another creature you control dies, you gain 1 life. + this.getRightHalfCard().addAbility(new DiesThisOrAnotherTriggeredAbility( + new GainLifeEffect(1), false, StaticFilters.FILTER_CONTROLLED_CREATURE + )); + + // {1}{B}: Cackling Culprit gains deathtouch until end of turn. + this.getRightHalfCard().addAbility(new SimpleActivatedAbility(new GainAbilitySourceEffect( + DeathtouchAbility.getInstance(), Duration.EndOfTurn + ), new ManaCostsImpl<>("{1}{B}"))); } private PanickedBystander(final PanickedBystander card) { diff --git a/Mage.Sets/src/mage/cards/p/PathOfMettle.java b/Mage.Sets/src/mage/cards/p/PathOfMettle.java index df91c7112e3..d1b90ba4071 100644 --- a/Mage.Sets/src/mage/cards/p/PathOfMettle.java +++ b/Mage.Sets/src/mage/cards/p/PathOfMettle.java @@ -1,28 +1,39 @@ package mage.cards.p; -import java.util.UUID; - +import mage.abilities.Ability; import mage.abilities.common.AttacksWithCreaturesTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DamageAllEffect; +import mage.abilities.effects.common.DamagePlayersEffect; import mage.abilities.effects.common.TransformSourceEffect; import mage.abilities.keyword.DoubleStrikeAbility; import mage.abilities.keyword.FirstStrikeAbility; import mage.abilities.keyword.HasteAbility; -import mage.abilities.keyword.TransformAbility; import mage.abilities.keyword.VigilanceAbility; -import mage.cards.CardImpl; +import mage.abilities.mana.AnyColorManaAbility; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SuperType; +import mage.cards.TransformingDoubleFacedCard; +import mage.constants.*; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.util.RandomUtil; +import mage.watchers.common.AttackedThisTurnWatcher; + +import java.util.Objects; +import java.util.UUID; +import java.util.stream.Collectors; /** * @author LevelX2 */ -public final class PathOfMettle extends CardImpl { +public final class PathOfMettle extends TransformingDoubleFacedCard { private static final FilterCreaturePermanent filterDamage = new FilterCreaturePermanent("creature that doesn't have first strike, double strike, vigilance, or haste"); private static final FilterCreaturePermanent filterTransform = new FilterCreaturePermanent("creatures that have first strike, double strike, vigilance, and/or haste"); @@ -45,18 +56,32 @@ public final class PathOfMettle extends CardImpl { } public PathOfMettle(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{R}{W}"); - - this.supertype.add(SuperType.LEGENDARY); - - this.secondSideCardClazz = mage.cards.m.MetzaliTowerOfTriumph.class; + super(ownerId, setInfo, + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ENCHANTMENT}, new SubType[]{}, "{R}{W}", + "Metzali, Tower of Triumph", + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.LAND}, new SubType[]{}, "" + ); + // Path of Mettle // When Path of Mettle enters the battlefield, it deals 1 damage to each creature that doesn't have first strike, double strike, vigilance, or haste. - this.addAbility(new EntersBattlefieldTriggeredAbility(new DamageAllEffect(1, "it", filterDamage))); + this.getLeftHalfCard().addAbility(new EntersBattlefieldTriggeredAbility(new DamageAllEffect(1, "it", filterDamage))); // Whenever you attack with at least two creatures that have first strike, double strike, vigilance, and/or haste, transform Path of Mettle. - this.addAbility(new TransformAbility()); - this.addAbility(new AttacksWithCreaturesTriggeredAbility(new TransformSourceEffect(), 2, filterTransform).setTriggerPhrase(triggerPhrase)); + this.getLeftHalfCard().addAbility(new AttacksWithCreaturesTriggeredAbility(new TransformSourceEffect(), 2, filterTransform).setTriggerPhrase(triggerPhrase)); + + // Metzali, Tower of Triumph + // {t}: Add one mana of any color. + this.getRightHalfCard().addAbility(new AnyColorManaAbility()); + + // {1}{R}, {T}: Metzali, Tower of Triumph deals 2 damage to each opponent. + Ability ability = new SimpleActivatedAbility(new DamagePlayersEffect(2, TargetController.OPPONENT), new ManaCostsImpl<>("{1}{R}")); + ability.addCost(new TapSourceCost()); + this.getRightHalfCard().addAbility(ability); + + // {2}{W}, {T}: Choose a creature at random that attacked this turn. Destroy that creature. + ability = new SimpleActivatedAbility(new MetzaliTowerOfTriumphDestroyEffect(), new ManaCostsImpl<>("{2}{W}")); + ability.addCost(new TapSourceCost()); + this.getRightHalfCard().addAbility(ability); } private PathOfMettle(final PathOfMettle card) { @@ -68,3 +93,34 @@ public final class PathOfMettle extends CardImpl { return new PathOfMettle(this); } } + +class MetzaliTowerOfTriumphDestroyEffect extends OneShotEffect { + + MetzaliTowerOfTriumphDestroyEffect() { + super(Outcome.DestroyPermanent); + this.staticText = "choose a creature at random that attacked this turn. Destroy that creature"; + } + + private MetzaliTowerOfTriumphDestroyEffect(final MetzaliTowerOfTriumphDestroyEffect effect) { + super(effect); + } + + @Override + public MetzaliTowerOfTriumphDestroyEffect copy() { + return new MetzaliTowerOfTriumphDestroyEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = RandomUtil.randomFromCollection( + game.getState() + .getWatcher(AttackedThisTurnWatcher.class) + .getAttackedThisTurnCreatures() + .stream() + .map(mor -> mor.getPermanent(game)) + .filter(Objects::nonNull) + .collect(Collectors.toSet()) + ); + return permanent != null && permanent.destroy(source, game); + } +} diff --git a/Mage.Sets/src/mage/cards/p/PiousEvangel.java b/Mage.Sets/src/mage/cards/p/PiousEvangel.java index 1de94395713..54abaf03580 100644 --- a/Mage.Sets/src/mage/cards/p/PiousEvangel.java +++ b/Mage.Sets/src/mage/cards/p/PiousEvangel.java @@ -1,57 +1,69 @@ package mage.cards.p; -import mage.MageInt; import mage.abilities.Ability; +import mage.abilities.common.DiesThisOrAnotherTriggeredAbility; import mage.abilities.common.EntersBattlefieldThisOrAnotherTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeTargetCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; 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.constants.Zone; +import mage.constants.TargetController; import mage.filter.StaticFilters; import mage.filter.common.FilterControlledPermanent; +import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.AnotherPredicate; -import mage.target.common.TargetControlledPermanent; +import mage.target.common.TargetOpponent; import java.util.UUID; /** * @author fireshoes */ -public final class PiousEvangel extends CardImpl { +public final class PiousEvangel extends TransformingDoubleFacedCard { private static final FilterControlledPermanent filter2 = new FilterControlledPermanent("another permanent"); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature you control"); static { filter2.add(AnotherPredicate.instance); + filter.add(TargetController.YOU.getControllerPredicate()); } public PiousEvangel(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.CLERIC); - this.power = new MageInt(2); - this.toughness = new MageInt(2); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.CLERIC}, "{2}{W}", + "Wayward Disciple", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.CLERIC}, "B" + ); - this.secondSideCardClazz = mage.cards.w.WaywardDisciple.class; + // Pious Evangel + this.getLeftHalfCard().setPT(2, 2); // Whenever Pious Evangel or another creature you control enters, you gain 1 life. - this.addAbility(new EntersBattlefieldThisOrAnotherTriggeredAbility(new GainLifeEffect(1), + this.getLeftHalfCard().addAbility(new EntersBattlefieldThisOrAnotherTriggeredAbility(new GainLifeEffect(1), StaticFilters.FILTER_PERMANENT_CREATURE, false, true)); // {2}, {T}, Sacrifice another permanent: Transform Pious Evangel. - this.addAbility(new TransformAbility()); Ability ability = new SimpleActivatedAbility(new TransformSourceEffect(), new GenericManaCost(2)); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeTargetCost(filter2)); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); + + // Wayward Disciple + this.getRightHalfCard().setPT(2, 4); + + // Whenever Wayward Disciple or another creature you control dies, target opponent loses 1 life and you gain 1 life. + Ability abilityBack = new DiesThisOrAnotherTriggeredAbility(new LoseLifeTargetEffect(1), false, filter); + abilityBack.addEffect(new GainLifeEffect(1).concatBy("and")); + abilityBack.addTarget(new TargetOpponent()); + this.getRightHalfCard().addAbility(abilityBack); } private PiousEvangel(final PiousEvangel card) { diff --git a/Mage.Sets/src/mage/cards/p/PolukranosEngineOfRuin.java b/Mage.Sets/src/mage/cards/p/PolukranosEngineOfRuin.java deleted file mode 100644 index a1489a1f9cf..00000000000 --- a/Mage.Sets/src/mage/cards/p/PolukranosEngineOfRuin.java +++ /dev/null @@ -1,65 +0,0 @@ -package mage.cards.p; - -import mage.MageInt; -import mage.abilities.common.DiesThisOrAnotherTriggeredAbility; -import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.keyword.LifelinkAbility; -import mage.abilities.keyword.ReachAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.SuperType; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.permanent.TokenPredicate; -import mage.game.permanent.token.PhyrexianHydraWithLifelinkToken; -import mage.game.permanent.token.PhyrexianHydraWithReachToken; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class PolukranosEngineOfRuin extends CardImpl { - - private static final FilterPermanent filter - = new FilterControlledPermanent(SubType.HYDRA, "nontoken Hydra you control"); - - static { - filter.add(TokenPredicate.FALSE); - } - - public PolukranosEngineOfRuin(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - - this.supertype.add(SuperType.LEGENDARY); - this.subtype.add(SubType.PHYREXIAN); - this.subtype.add(SubType.HYDRA); - this.power = new MageInt(6); - this.toughness = new MageInt(6); - this.color.setWhite(true); - this.color.setGreen(true); - this.nightCard = true; - - // Reach - this.addAbility(ReachAbility.getInstance()); - - // Lifelink - this.addAbility(LifelinkAbility.getInstance()); - - // Whenever Polukranos, Engine of Ruin or another nontoken Hydra you control dies, create a 3/3 green and white Phyrexian Hydra creature token with reach and a 3/3 green and white Phyrexian Hydra creature token with lifelink. - this.addAbility(new DiesThisOrAnotherTriggeredAbility( - new CreateTokenEffect(new PhyrexianHydraWithReachToken()).withAdditionalTokens(new PhyrexianHydraWithLifelinkToken()), false, filter - )); - } - - private PolukranosEngineOfRuin(final PolukranosEngineOfRuin card) { - super(card); - } - - @Override - public PolukranosEngineOfRuin copy() { - return new PolukranosEngineOfRuin(this); - } -} diff --git a/Mage.Sets/src/mage/cards/p/PolukranosReborn.java b/Mage.Sets/src/mage/cards/p/PolukranosReborn.java index 5b28e453528..41de09e41e7 100644 --- a/Mage.Sets/src/mage/cards/p/PolukranosReborn.java +++ b/Mage.Sets/src/mage/cards/p/PolukranosReborn.java @@ -1,39 +1,65 @@ package mage.cards.p; -import mage.MageInt; import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.common.DiesThisOrAnotherTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.TransformSourceEffect; +import mage.abilities.keyword.LifelinkAbility; import mage.abilities.keyword.ReachAbility; -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.SuperType; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.permanent.TokenPredicate; +import mage.game.permanent.token.PhyrexianHydraWithLifelinkToken; +import mage.game.permanent.token.PhyrexianHydraWithReachToken; import java.util.UUID; /** * @author TheElk801 */ -public final class PolukranosReborn extends CardImpl { +public final class PolukranosReborn extends TransformingDoubleFacedCard { + + private static final FilterPermanent filter + = new FilterControlledPermanent(SubType.HYDRA, "nontoken Hydra you control"); + + static { + filter.add(TokenPredicate.FALSE); + } public PolukranosReborn(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{G}{G}{G}"); + super(ownerId, setInfo, + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HYDRA}, "{G}{G}{G}", + "Polukranos, Engine of Ruin", + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.CREATURE}, new SubType[]{SubType.PHYREXIAN, SubType.HYDRA}, "GW"); - this.supertype.add(SuperType.LEGENDARY); - this.subtype.add(SubType.HYDRA); - this.power = new MageInt(4); - this.toughness = new MageInt(5); - this.secondSideCardClazz = mage.cards.p.PolukranosEngineOfRuin.class; + // Polukranos Reborn + this.getLeftHalfCard().setPT(4, 5); // Reach - this.addAbility(ReachAbility.getInstance()); + this.getLeftHalfCard().addAbility(ReachAbility.getInstance()); // {6}{W/P}: Transform Polukranos Reborn. Activate only as a sorcery. - this.addAbility(new TransformAbility()); - this.addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{6}{W/P}"))); + this.getLeftHalfCard().addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{6}{W/P}"))); + + // Polukranos, Engine of Ruin + this.getRightHalfCard().setPT(6, 6); + + // Reach + this.getRightHalfCard().addAbility(ReachAbility.getInstance()); + + // Lifelink + this.getRightHalfCard().addAbility(LifelinkAbility.getInstance()); + + // Whenever Polukranos, Engine of Ruin or another nontoken Hydra you control dies, create a 3/3 green and white Phyrexian Hydra creature token with reach and a 3/3 green and white Phyrexian Hydra creature token with lifelink. + this.getRightHalfCard().addAbility(new DiesThisOrAnotherTriggeredAbility( + new CreateTokenEffect(new PhyrexianHydraWithReachToken()).withAdditionalTokens(new PhyrexianHydraWithLifelinkToken()), false, filter + )); } private PolukranosReborn(final PolukranosReborn card) { diff --git a/Mage.Sets/src/mage/cards/p/PoppetFactory.java b/Mage.Sets/src/mage/cards/p/PoppetFactory.java deleted file mode 100644 index 6f43a33be51..00000000000 --- a/Mage.Sets/src/mage/cards/p/PoppetFactory.java +++ /dev/null @@ -1,101 +0,0 @@ -package mage.cards.p; - -import mage.abilities.Ability; -import mage.abilities.triggers.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.ContinuousEffectImpl; -import mage.abilities.effects.common.TransformSourceEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.filter.FilterPermanent; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.predicate.permanent.TokenPredicate; -import mage.game.Game; -import mage.game.permanent.Permanent; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class PoppetFactory extends CardImpl { - - public PoppetFactory(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, ""); - - this.color.setBlue(true); - this.nightCard = true; - - // Creature tokens you control lose all abilities and have base power and toughness 3/3. - this.addAbility(new SimpleStaticAbility(new PoppetFactoryEffect())); - - // At the beginning of your upkeep, you may transform Poppet Factory. - this.addAbility(new BeginningOfUpkeepTriggeredAbility( - new TransformSourceEffect(), true - )); - } - - private PoppetFactory(final PoppetFactory card) { - super(card); - } - - @Override - public PoppetFactory copy() { - return new PoppetFactory(this); - } -} - -class PoppetFactoryEffect extends ContinuousEffectImpl { - - private static final FilterPermanent filter = new FilterControlledCreaturePermanent(); - - static { - filter.add(TokenPredicate.TRUE); - } - - PoppetFactoryEffect() { - super(Duration.WhileOnBattlefield, Outcome.LoseAbility); - staticText = "creature tokens you control lose all abilities and have base power and toughness 3/3"; - } - - private PoppetFactoryEffect(final PoppetFactoryEffect effect) { - super(effect); - } - - @Override - public PoppetFactoryEffect copy() { - return new PoppetFactoryEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - return false; - } - - @Override - public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { - for (Permanent permanent : game.getBattlefield().getActivePermanents( - filter, source.getControllerId(), source, game - )) { - switch (layer) { - case AbilityAddingRemovingEffects_6: - permanent.removeAllAbilities(source.getSourceId(), game); - break; - case PTChangingEffects_7: - if (sublayer == SubLayer.SetPT_7b) { - permanent.getPower().setModifiedBaseValue(3); - permanent.getToughness().setModifiedBaseValue(3); - } - break; - } - } - return true; - } - - @Override - public boolean hasLayer(Layer layer) { - return layer == Layer.PTChangingEffects_7 - || layer == Layer.AbilityAddingRemovingEffects_6; - } -} diff --git a/Mage.Sets/src/mage/cards/p/PoppetStitcher.java b/Mage.Sets/src/mage/cards/p/PoppetStitcher.java index 00b952d09a7..5fc530c84bf 100644 --- a/Mage.Sets/src/mage/cards/p/PoppetStitcher.java +++ b/Mage.Sets/src/mage/cards/p/PoppetStitcher.java @@ -1,25 +1,27 @@ package mage.cards.p; -import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.common.CreateTokenEffect; 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.BeginningOfUpkeepTriggeredAbility; -import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.ComparisonType; -import mage.constants.SubType; +import mage.cards.TransformingDoubleFacedCard; +import mage.constants.*; import mage.filter.FilterPermanent; import mage.filter.StaticFilters; +import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.permanent.TokenPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; import mage.game.permanent.token.ZombieDecayedToken; import java.util.UUID; @@ -27,7 +29,7 @@ import java.util.UUID; /** * @author TheElk801 */ -public final class PoppetStitcher extends CardImpl { +public final class PoppetStitcher extends TransformingDoubleFacedCard { private static final FilterPermanent filter = new FilterControlledPermanent("you control three or more creature tokens"); @@ -41,25 +43,32 @@ public final class PoppetStitcher extends CardImpl { ); public PoppetStitcher(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.HUMAN, SubType.WIZARD}, "{2}{U}", + "Poppet Factory", + new CardType[]{CardType.ARTIFACT}, new SubType[]{}, "U"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.WIZARD); - this.power = new MageInt(2); - this.toughness = new MageInt(3); - - this.secondSideCardClazz = mage.cards.p.PoppetFactory.class; + // Poppet Stitcher + this.getLeftHalfCard().setPT(2, 3); // Whenever you cast an instant or sorcery spell, create a 2/2 black Zombie creature token with decayed. - this.addAbility(new SpellCastControllerTriggeredAbility( + this.getLeftHalfCard().addAbility(new SpellCastControllerTriggeredAbility( new CreateTokenEffect(new ZombieDecayedToken()), StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false )); // At the beginning of your upkeep, if you control three or more creature tokens, you may transform Poppet Sticher. - this.addAbility(new TransformAbility()); - this.addAbility(new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect(), true) + this.getLeftHalfCard().addAbility(new BeginningOfUpkeepTriggeredAbility(new TransformSourceEffect(), true) .withInterveningIf(condition).addHint(hint)); + + // Poppet Factory + // Creature tokens you control lose all abilities and have base power and toughness 3/3. + this.getRightHalfCard().addAbility(new SimpleStaticAbility(new PoppetFactoryEffect())); + + // At the beginning of your upkeep, you may transform Poppet Factory. + this.getRightHalfCard().addAbility(new BeginningOfUpkeepTriggeredAbility( + new TransformSourceEffect(), true + )); } private PoppetStitcher(final PoppetStitcher card) { @@ -71,3 +80,57 @@ public final class PoppetStitcher extends CardImpl { return new PoppetStitcher(this); } } + +class PoppetFactoryEffect extends ContinuousEffectImpl { + + private static final FilterPermanent filter = new FilterControlledCreaturePermanent(); + + static { + filter.add(TokenPredicate.TRUE); + } + + PoppetFactoryEffect() { + super(Duration.WhileOnBattlefield, Outcome.LoseAbility); + staticText = "creature tokens you control lose all abilities and have base power and toughness 3/3"; + } + + private PoppetFactoryEffect(final PoppetFactoryEffect effect) { + super(effect); + } + + @Override + public PoppetFactoryEffect copy() { + return new PoppetFactoryEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return false; + } + + @Override + public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { + for (Permanent permanent : game.getBattlefield().getActivePermanents( + filter, source.getControllerId(), source, game + )) { + switch (layer) { + case AbilityAddingRemovingEffects_6: + permanent.removeAllAbilities(source.getSourceId(), game); + break; + case PTChangingEffects_7: + if (sublayer == SubLayer.SetPT_7b) { + permanent.getPower().setModifiedBaseValue(3); + permanent.getToughness().setModifiedBaseValue(3); + } + break; + } + } + return true; + } + + @Override + public boolean hasLayer(Layer layer) { + return layer == Layer.PTChangingEffects_7 + || layer == Layer.AbilityAddingRemovingEffects_6; + } +} diff --git a/Mage.Sets/src/mage/cards/p/PrimalAmulet.java b/Mage.Sets/src/mage/cards/p/PrimalAmulet.java index fcf75d1ecbf..d4a7aec5b9e 100644 --- a/Mage.Sets/src/mage/cards/p/PrimalAmulet.java +++ b/Mage.Sets/src/mage/cards/p/PrimalAmulet.java @@ -1,30 +1,40 @@ package mage.cards.p; import mage.abilities.Ability; +import mage.abilities.DelayedTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SpellCastControllerTriggeredAbility; +import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CopyTargetStackObjectEffect; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.mana.AnyColorManaAbility; import mage.cards.CardSetInfo; +import mage.cards.TransformingDoubleFacedCard; import mage.constants.CardType; +import mage.constants.Duration; import mage.constants.Outcome; +import mage.constants.SubType; import mage.counters.CounterType; import mage.filter.FilterCard; import mage.filter.StaticFilters; +import mage.filter.common.FilterInstantOrSorcerySpell; import mage.filter.predicate.Predicates; import mage.game.Game; +import mage.game.events.GameEvent; import mage.game.permanent.Permanent; +import mage.game.stack.Spell; import mage.players.Player; +import mage.target.targetpointer.FixedTarget; import java.util.UUID; /** * @author TheElk801 */ -public final class PrimalAmulet extends CardImpl { +public final class PrimalAmulet extends TransformingDoubleFacedCard { private static final FilterCard filter = new FilterCard("instant and sorcery spells"); @@ -36,20 +46,31 @@ public final class PrimalAmulet extends CardImpl { } public PrimalAmulet(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}"); - this.secondSideCardClazz = mage.cards.p.PrimalWellspring.class; + super(ownerId, setInfo, + new CardType[]{CardType.ARTIFACT}, new SubType[]{}, "{4}", + "Primal Wellspring", + new CardType[]{CardType.LAND}, new SubType[]{}, ""); + // Primal Amulet // Instant and sorcery spells you cast cost {1} less to cast. - this.addAbility(new SimpleStaticAbility(new SpellsCostReductionControllerEffect(filter, 1))); + this.getLeftHalfCard().addAbility(new SimpleStaticAbility(new SpellsCostReductionControllerEffect(filter, 1))); // Whenever you cast an instant or sorcery spell, put a charge counter on Primal Amulet. Then if there are four or more charge counters on it, you may remove those counters and transform it. - this.addAbility(new TransformAbility()); Ability ability = new SpellCastControllerTriggeredAbility( new AddCountersSourceEffect(CounterType.CHARGE.createInstance()), StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false ); ability.addEffect(new PrimalAmuletEffect()); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); + + // Primal Wellspring + // Add one mana of any color. When that mana is spent to cast an instant or sorcery spell, copy that spell and you may choose new targets for the copy. + Ability manaAbility = new AnyColorManaAbility(); + manaAbility.addEffect(new CreateDelayedTriggeredAbilityEffect(new PrimalWellspringTriggeredAbility( + new CopyTargetStackObjectEffect(true) + .setText("copy that spell and you may choose new targets for the copy")) + )); + this.getRightHalfCard().addAbility(manaAbility); } private PrimalAmulet(final PrimalAmulet card) { @@ -94,3 +115,58 @@ class PrimalAmuletEffect extends OneShotEffect { return true; } } + +class PrimalWellspringTriggeredAbility extends DelayedTriggeredAbility { + + private static final FilterInstantOrSorcerySpell filter = new FilterInstantOrSorcerySpell(); + + + public PrimalWellspringTriggeredAbility(Effect effect) { + super(effect, Duration.Custom, true, false); + setTriggerPhrase("When that mana is spent to cast an instant or sorcery spell, "); + } + + private PrimalWellspringTriggeredAbility(final PrimalWellspringTriggeredAbility ability) { + super(ability); + } + + @Override + public PrimalWellspringTriggeredAbility copy() { + return new PrimalWellspringTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.MANA_PAID; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getSourceId().equals(getSourceId())) { + Spell spell = game.getStack().getSpell(event.getTargetId()); + if (spell != null && filter.match(spell, getControllerId(), this, game)) { + for (Effect effect : getEffects()) { + effect.setTargetPointer(new FixedTarget(event.getTargetId())); + } + return true; + } + } + return false; + } + + @Override + public boolean isInactive(Game game) { + if (super.isInactive(game)) { + return true; + } + + // must remove effect on empty mana pool to fix accumulate bug + Player player = game.getPlayer(this.getControllerId()); + if (player == null) { + return true; + } + + // if no mana in pool then it can be discarded + return player.getManaPool().getManaItems().stream().noneMatch(m -> m.getSourceId().equals(getSourceId())); + } +} diff --git a/Mage.Sets/src/mage/cards/p/PrimalWellspring.java b/Mage.Sets/src/mage/cards/p/PrimalWellspring.java deleted file mode 100644 index 024e7274a48..00000000000 --- a/Mage.Sets/src/mage/cards/p/PrimalWellspring.java +++ /dev/null @@ -1,91 +0,0 @@ -package mage.cards.p; - -import mage.abilities.Ability; -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.Effect; -import mage.abilities.effects.common.CopyTargetStackObjectEffect; -import mage.abilities.mana.AnyColorManaAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Zone; -import mage.filter.common.FilterInstantOrSorcerySpell; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.stack.Spell; -import mage.target.targetpointer.FixedTarget; - -import java.util.UUID; - -/** - * @author TheElk801 - */ -public final class PrimalWellspring extends CardImpl { - - public PrimalWellspring(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); - - this.nightCard = true; - - // Add one mana of any color. - Ability ability = new AnyColorManaAbility(); - this.addAbility(ability); - - // When that mana is spent to cast an instant or sorcery spell, copy that spell and you may choose new targets for the copy. - this.addAbility(new PrimalWellspringTriggeredAbility( - ability.getOriginalId(), new CopyTargetStackObjectEffect(true) - .setText("copy that spell and you may choose new targets for the copy") - )); - } - - private PrimalWellspring(final PrimalWellspring card) { - super(card); - } - - @Override - public PrimalWellspring copy() { - return new PrimalWellspring(this); - } -} - -class PrimalWellspringTriggeredAbility extends TriggeredAbilityImpl { - - private static final FilterInstantOrSorcerySpell filter = new FilterInstantOrSorcerySpell(); - - String abilityOriginalId; - - public PrimalWellspringTriggeredAbility(UUID abilityOriginalId, Effect effect) { - super(Zone.ALL, effect, false); - this.abilityOriginalId = abilityOriginalId.toString(); - setTriggerPhrase("When that mana is used to cast an instant or sorcery spell, "); - } - - private PrimalWellspringTriggeredAbility(final PrimalWellspringTriggeredAbility ability) { - super(ability); - this.abilityOriginalId = ability.abilityOriginalId; - } - - @Override - public PrimalWellspringTriggeredAbility copy() { - return new PrimalWellspringTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.MANA_PAID; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - if (event.getData().equals(abilityOriginalId)) { - Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && filter.match(spell, getControllerId(), this, game)) { - for (Effect effect : getEffects()) { - effect.setTargetPointer(new FixedTarget(event.getTargetId())); - } - return true; - } - } - return false; - } -} diff --git a/Mage.Sets/src/mage/cards/p/ProfaneProcession.java b/Mage.Sets/src/mage/cards/p/ProfaneProcession.java index 881bab6e555..5f9011a72f0 100644 --- a/Mage.Sets/src/mage/cards/p/ProfaneProcession.java +++ b/Mage.Sets/src/mage/cards/p/ProfaneProcession.java @@ -1,19 +1,25 @@ - package mage.cards.p; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.condition.Condition; +import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.ExileTargetForSourceEffect; import mage.abilities.effects.common.TransformSourceEffect; -import mage.abilities.keyword.TransformAbility; -import mage.cards.CardImpl; +import mage.abilities.mana.AnyColorManaAbility; +import mage.cards.Card; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SuperType; +import mage.cards.TransformingDoubleFacedCard; +import mage.constants.*; +import mage.filter.StaticFilters; +import mage.game.ExileZone; import mage.game.Game; +import mage.players.Player; +import mage.target.TargetCard; +import mage.target.common.TargetCardInExile; import mage.target.common.TargetCreaturePermanent; import mage.util.CardUtil; @@ -23,24 +29,32 @@ import java.util.UUID; /** * @author LevelX2 */ -public final class ProfaneProcession extends CardImpl { +public final class ProfaneProcession extends TransformingDoubleFacedCard { public ProfaneProcession(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}{B}"); - - this.supertype.add(SuperType.LEGENDARY); - - this.secondSideCardClazz = mage.cards.t.TombOfTheDuskRose.class; + super(ownerId, setInfo, + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.ENCHANTMENT}, new SubType[]{}, "{1}{W}{B}", + "Tomb of the Dusk Rose", + new SuperType[]{SuperType.LEGENDARY}, new CardType[]{CardType.LAND}, new SubType[]{}, ""); + // Profane Procession // {3}{W}{B}: Exile target creature. Then if there are three or more cards exiled with Profane Procession, transform it. - this.addAbility(new TransformAbility()); Ability ability = new SimpleActivatedAbility(new ExileTargetForSourceEffect(), new ManaCostsImpl<>("{3}{W}{B}")); ability.addEffect(new ConditionalOneShotEffect( new TransformSourceEffect(), ProfaneProcessionCondition.instance, "Then if there are three or more cards exiled with {this}, transform it" )); ability.addTarget(new TargetCreaturePermanent()); - this.addAbility(ability); + this.getLeftHalfCard().addAbility(ability); + + // Tomb of the Dusk Rose + // {T}: Add one mana of any color. + this.getRightHalfCard().addAbility(new AnyColorManaAbility()); + + // {2}{W}{B},{T} : Put a creature card exiled with this permanent onto the battlefield under your control. + ability = new SimpleActivatedAbility(new TombOfTheDuskRoseEffect(), new ManaCostsImpl<>("{2}{W}{B}")); + ability.addCost(new TapSourceCost()); + this.getRightHalfCard().addAbility(ability); } private ProfaneProcession(final ProfaneProcession card) { @@ -64,3 +78,37 @@ enum ProfaneProcessionCondition implements Condition { .isPresent(); } } + +class TombOfTheDuskRoseEffect extends OneShotEffect { + + TombOfTheDuskRoseEffect() { + super(Outcome.PutCardInPlay); + this.staticText = "put a creature card exiled with this permanent onto the battlefield under your control"; + } + + private TombOfTheDuskRoseEffect(final TombOfTheDuskRoseEffect effect) { + super(effect); + } + + @Override + public TombOfTheDuskRoseEffect copy() { + return new TombOfTheDuskRoseEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller == null) { + return false; + } + ExileZone exileZone = game.getExile().getExileZone(CardUtil.getExileZoneId(game, source)); + if (exileZone == null || exileZone.count(StaticFilters.FILTER_CARD_CREATURE, game) < 1) { + return false; + } + TargetCard targetCard = new TargetCardInExile(StaticFilters.FILTER_CARD_CREATURE, exileZone.getId()); + targetCard.withNotTarget(true); + controller.choose(outcome, targetCard, source, game); + Card card = game.getCard(targetCard.getFirstTarget()); + return card != null && controller.moveCards(card, Zone.BATTLEFIELD, source, game); + } +} diff --git a/Mage.Sets/src/mage/cards/p/PyreticPrankster.java b/Mage.Sets/src/mage/cards/p/PyreticPrankster.java index 0263319fa17..a8d94117d1f 100644 --- a/Mage.Sets/src/mage/cards/p/PyreticPrankster.java +++ b/Mage.Sets/src/mage/cards/p/PyreticPrankster.java @@ -1,33 +1,40 @@ package mage.cards.p; -import mage.MageInt; import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.common.DiesSourceTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.SacrificeOpponentsEffect; 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.filter.StaticFilters; import java.util.UUID; /** * @author TheElk801 */ -public final class PyreticPrankster extends CardImpl { +public final class PyreticPrankster extends TransformingDoubleFacedCard { public PyreticPrankster(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}"); + super(ownerId, setInfo, + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.DEVIL}, "{1}{R}", + "Glistening Goremonger", + new CardType[]{CardType.CREATURE}, new SubType[]{SubType.PHYREXIAN, SubType.DEVIL}, "BR"); - this.subtype.add(SubType.DEVIL); - this.power = new MageInt(2); - this.toughness = new MageInt(1); - this.secondSideCardClazz = mage.cards.g.GlisteningGoremonger.class; + // Pyretic Prankster + this.getLeftHalfCard().setPT(2, 1); // {3}{B/P}: Transform Pyretic Prankster. Activate only as a sorcery. - this.addAbility(new TransformAbility()); - this.addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{3}{B/P}"))); + this.getLeftHalfCard().addAbility(new ActivateAsSorceryActivatedAbility(new TransformSourceEffect(), new ManaCostsImpl<>("{3}{B/P}"))); + + // Glistening Goremonger + this.getRightHalfCard().setPT(3, 2); + + // When Glistening Goremonger dies, each opponent sacrifices an artifact or creature. + this.getRightHalfCard().addAbility(new DiesSourceTriggeredAbility(new SacrificeOpponentsEffect(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_CREATURE))); } private PyreticPrankster(final PyreticPrankster card) { diff --git a/Mage.Sets/src/mage/cards/t/TombOfTheDuskRose.java b/Mage.Sets/src/mage/cards/t/TombOfTheDuskRose.java deleted file mode 100644 index 46a7ecf9733..00000000000 --- a/Mage.Sets/src/mage/cards/t/TombOfTheDuskRose.java +++ /dev/null @@ -1,91 +0,0 @@ -package mage.cards.t; - -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.mana.AnyColorManaAbility; -import mage.cards.Card; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.SuperType; -import mage.constants.Zone; -import mage.filter.StaticFilters; -import mage.game.ExileZone; -import mage.game.Game; -import mage.players.Player; -import mage.target.TargetCard; -import mage.target.common.TargetCardInExile; -import mage.util.CardUtil; - -import java.util.UUID; - -/** - * @author LevelX2 - */ -public final class TombOfTheDuskRose extends CardImpl { - - public TombOfTheDuskRose(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); - - this.supertype.add(SuperType.LEGENDARY); - - this.nightCard = true; - - // (Transforms from Profane Procession.) - - // {T}: Add one mana of any color. - this.addAbility(new AnyColorManaAbility()); - - // {2}{W}{B},{T} : Put a creature card exiled with this permanent onto the battlefield under your control. - Ability ability = new SimpleActivatedAbility(new TombOfTheDuskRoseEffect(), new ManaCostsImpl<>("{2}{W}{B}")); - ability.addCost(new TapSourceCost()); - this.addAbility(ability); - } - - private TombOfTheDuskRose(final TombOfTheDuskRose card) { - super(card); - } - - @Override - public TombOfTheDuskRose copy() { - return new TombOfTheDuskRose(this); - } -} - -class TombOfTheDuskRoseEffect extends OneShotEffect { - - TombOfTheDuskRoseEffect() { - super(Outcome.PutCardInPlay); - this.staticText = "put a creature card exiled with this permanent onto the battlefield under your control"; - } - - private TombOfTheDuskRoseEffect(final TombOfTheDuskRoseEffect effect) { - super(effect); - } - - @Override - public TombOfTheDuskRoseEffect copy() { - return new TombOfTheDuskRoseEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller == null) { - return false; - } - ExileZone exileZone = game.getExile().getExileZone(CardUtil.getExileZoneId(game, source)); - if (exileZone == null || exileZone.count(StaticFilters.FILTER_CARD_CREATURE, game) < 1) { - return false; - } - TargetCard targetCard = new TargetCardInExile(StaticFilters.FILTER_CARD_CREATURE, exileZone.getId()); - targetCard.withNotTarget(true); - controller.choose(outcome, targetCard, source, game); - Card card = game.getCard(targetCard.getFirstTarget()); - return card != null && controller.moveCards(card, Zone.BATTLEFIELD, source, game); - } -} diff --git a/Mage.Sets/src/mage/cards/w/WaywardDisciple.java b/Mage.Sets/src/mage/cards/w/WaywardDisciple.java deleted file mode 100644 index fc43c45ec88..00000000000 --- a/Mage.Sets/src/mage/cards/w/WaywardDisciple.java +++ /dev/null @@ -1,55 +0,0 @@ -package mage.cards.w; - -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.DiesThisOrAnotherTriggeredAbility; -import mage.abilities.effects.common.GainLifeEffect; -import mage.abilities.effects.common.LoseLifeTargetEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.TargetController; -import mage.filter.common.FilterCreaturePermanent; -import mage.target.common.TargetOpponent; - -import java.util.UUID; - -/** - * @author fireshoes - */ -public final class WaywardDisciple extends CardImpl { - - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature you control"); - - static { - filter.add(TargetController.YOU.getControllerPredicate()); - } - - public WaywardDisciple(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, ""); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.CLERIC); - this.power = new MageInt(2); - this.toughness = new MageInt(4); - this.color.setBlack(true); - - // this card is the second face of double-faced card - this.nightCard = true; - - // Whenever Wayward Disciple or another creature you control dies, target opponent loses 1 life and you gain 1 life. - Ability ability = new DiesThisOrAnotherTriggeredAbility(new LoseLifeTargetEffect(1), false, filter); - ability.addEffect(new GainLifeEffect(1).concatBy("and")); - ability.addTarget(new TargetOpponent()); - this.addAbility(ability); - } - - private WaywardDisciple(final WaywardDisciple card) { - super(card); - } - - @Override - public WaywardDisciple copy() { - return new WaywardDisciple(this); - } -} diff --git a/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java b/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java index 05ae3762c4a..cb36a01e2f7 100644 --- a/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java +++ b/Mage.Sets/src/mage/sets/InnistradCrimsonVow.java @@ -92,7 +92,6 @@ public final class InnistradCrimsonVow extends ExpansionSet { cards.add(new SetCardInfo("Brine Comber", 233, Rarity.UNCOMMON, mage.cards.b.BrineComber.class)); cards.add(new SetCardInfo("By Invitation Only", 346, Rarity.RARE, mage.cards.b.ByInvitationOnly.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("By Invitation Only", 5, Rarity.RARE, mage.cards.b.ByInvitationOnly.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Cackling Culprit", 28, Rarity.UNCOMMON, mage.cards.c.CacklingCulprit.class)); cards.add(new SetCardInfo("Cartographer's Survey", 190, Rarity.UNCOMMON, mage.cards.c.CartographersSurvey.class)); cards.add(new SetCardInfo("Catapult Fodder", 99, Rarity.UNCOMMON, mage.cards.c.CatapultFodder.class)); cards.add(new SetCardInfo("Cemetery Desecrator", 100, Rarity.MYTHIC, mage.cards.c.CemeteryDesecrator.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java b/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java index 835e9de59dd..c967f93d3e5 100644 --- a/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java +++ b/Mage.Sets/src/mage/sets/InnistradDoubleFeature.java @@ -97,7 +97,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Burn Down the House", 131, Rarity.RARE, mage.cards.b.BurnDownTheHouse.class)); cards.add(new SetCardInfo("Burn the Accursed", 132, Rarity.COMMON, mage.cards.b.BurnTheAccursed.class)); cards.add(new SetCardInfo("By Invitation Only", 272, Rarity.RARE, mage.cards.b.ByInvitationOnly.class)); - cards.add(new SetCardInfo("Cackling Culprit", 295, Rarity.UNCOMMON, mage.cards.c.CacklingCulprit.class)); cards.add(new SetCardInfo("Can't Stay Away", 213, Rarity.RARE, mage.cards.c.CantStayAway.class)); cards.add(new SetCardInfo("Candlegrove Witch", 8, Rarity.COMMON, mage.cards.c.CandlegroveWitch.class)); cards.add(new SetCardInfo("Candlelit Cavalry", 175, Rarity.COMMON, mage.cards.c.CandlelitCavalry.class)); @@ -402,7 +401,6 @@ public final class InnistradDoubleFeature extends ExpansionSet { cards.add(new SetCardInfo("Play with Fire", 154, Rarity.UNCOMMON, mage.cards.p.PlayWithFire.class)); cards.add(new SetCardInfo("Plummet", 193, Rarity.COMMON, mage.cards.p.Plummet.class)); cards.add(new SetCardInfo("Pointed Discussion", 393, Rarity.COMMON, mage.cards.p.PointedDiscussion.class)); - cards.add(new SetCardInfo("Poppet Factory", 71, Rarity.MYTHIC, mage.cards.p.PoppetFactory.class)); cards.add(new SetCardInfo("Poppet Stitcher", 71, Rarity.MYTHIC, mage.cards.p.PoppetStitcher.class)); cards.add(new SetCardInfo("Primal Adversary", 194, Rarity.MYTHIC, mage.cards.p.PrimalAdversary.class)); cards.add(new SetCardInfo("Purifying Dragon", 155, Rarity.UNCOMMON, mage.cards.p.PurifyingDragon.class)); diff --git a/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java b/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java index 02ca1cf5864..8589f2fecbb 100644 --- a/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java +++ b/Mage.Sets/src/mage/sets/InnistradMidnightHunt.java @@ -307,8 +307,6 @@ public final class InnistradMidnightHunt extends ExpansionSet { cards.add(new SetCardInfo("Play with Fire", 154, Rarity.UNCOMMON, mage.cards.p.PlayWithFire.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Play with Fire", 390, Rarity.UNCOMMON, mage.cards.p.PlayWithFire.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Plummet", 193, Rarity.COMMON, mage.cards.p.Plummet.class)); - cards.add(new SetCardInfo("Poppet Factory", 339, Rarity.MYTHIC, mage.cards.p.PoppetFactory.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Poppet Factory", 71, Rarity.MYTHIC, mage.cards.p.PoppetFactory.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Poppet Stitcher", 339, Rarity.MYTHIC, mage.cards.p.PoppetStitcher.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Poppet Stitcher", 71, Rarity.MYTHIC, mage.cards.p.PoppetStitcher.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Primal Adversary", 194, Rarity.MYTHIC, mage.cards.p.PrimalAdversary.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/Ixalan.java b/Mage.Sets/src/mage/sets/Ixalan.java index bf19ea0b035..71963129b6a 100644 --- a/Mage.Sets/src/mage/sets/Ixalan.java +++ b/Mage.Sets/src/mage/sets/Ixalan.java @@ -208,7 +208,6 @@ public final class Ixalan extends ExpansionSet { cards.add(new SetCardInfo("Pounce", 200, Rarity.COMMON, mage.cards.p.Pounce.class)); cards.add(new SetCardInfo("Priest of the Wakening Sun", 27, Rarity.RARE, mage.cards.p.PriestOfTheWakeningSun.class)); cards.add(new SetCardInfo("Primal Amulet", 243, Rarity.RARE, mage.cards.p.PrimalAmulet.class)); - cards.add(new SetCardInfo("Primal Wellspring", 243, Rarity.RARE, mage.cards.p.PrimalWellspring.class)); cards.add(new SetCardInfo("Prosperous Pirates", 69, Rarity.COMMON, mage.cards.p.ProsperousPirates.class)); cards.add(new SetCardInfo("Prying Blade", 244, Rarity.COMMON, mage.cards.p.PryingBlade.class)); cards.add(new SetCardInfo("Pterodon Knight", 28, Rarity.COMMON, mage.cards.p.PterodonKnight.class)); diff --git a/Mage.Sets/src/mage/sets/IxalanPromos.java b/Mage.Sets/src/mage/sets/IxalanPromos.java index cd9eca7410c..8b63ffa01c6 100644 --- a/Mage.Sets/src/mage/sets/IxalanPromos.java +++ b/Mage.Sets/src/mage/sets/IxalanPromos.java @@ -85,7 +85,6 @@ public class IxalanPromos extends ExpansionSet { cards.add(new SetCardInfo("Overflowing Insight", "66s", Rarity.MYTHIC, mage.cards.o.OverflowingInsight.class)); cards.add(new SetCardInfo("Priest of the Wakening Sun", "27s", Rarity.RARE, mage.cards.p.PriestOfTheWakeningSun.class)); cards.add(new SetCardInfo("Primal Amulet", "243s", Rarity.RARE, mage.cards.p.PrimalAmulet.class)); - cards.add(new SetCardInfo("Primal Wellspring", "243s", Rarity.RARE, mage.cards.p.PrimalWellspring.class)); cards.add(new SetCardInfo("Rampaging Ferocidon", "154s", Rarity.RARE, mage.cards.r.RampagingFerocidon.class)); cards.add(new SetCardInfo("Regisaur Alpha", "227p", Rarity.RARE, mage.cards.r.RegisaurAlpha.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Regisaur Alpha", "227s", Rarity.RARE, mage.cards.r.RegisaurAlpha.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/MagicOnlinePromos.java b/Mage.Sets/src/mage/sets/MagicOnlinePromos.java index ef623fadde3..ebb225f3913 100644 --- a/Mage.Sets/src/mage/sets/MagicOnlinePromos.java +++ b/Mage.Sets/src/mage/sets/MagicOnlinePromos.java @@ -2043,7 +2043,6 @@ public class MagicOnlinePromos extends ExpansionSet { cards.add(new SetCardInfo("Pollywog Symbiote", 80931, Rarity.UNCOMMON, mage.cards.p.PollywogSymbiote.class)); cards.add(new SetCardInfo("Polukranos, Unchained", 79931, Rarity.MYTHIC, mage.cards.p.PolukranosUnchained.class)); cards.add(new SetCardInfo("Ponder", 35118, Rarity.COMMON, mage.cards.p.Ponder.class, FULL_ART)); - cards.add(new SetCardInfo("Poppet Factory", 93918, Rarity.MYTHIC, mage.cards.p.PoppetFactory.class)); cards.add(new SetCardInfo("Poppet Stitcher", 93918, Rarity.MYTHIC, mage.cards.p.PoppetStitcher.class)); cards.add(new SetCardInfo("Porcuparrot", 80965, Rarity.UNCOMMON, mage.cards.p.Porcuparrot.class)); cards.add(new SetCardInfo("Port Razer", 86068, Rarity.MYTHIC, mage.cards.p.PortRazer.class)); diff --git a/Mage.Sets/src/mage/sets/MarchOfTheMachine.java b/Mage.Sets/src/mage/sets/MarchOfTheMachine.java index 2d34c6b9701..30f3e9845c2 100644 --- a/Mage.Sets/src/mage/sets/MarchOfTheMachine.java +++ b/Mage.Sets/src/mage/sets/MarchOfTheMachine.java @@ -164,7 +164,6 @@ public final class MarchOfTheMachine extends ExpansionSet { cards.add(new SetCardInfo("Glistening Dawn", 187, Rarity.RARE, mage.cards.g.GlisteningDawn.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Glistening Dawn", 371, Rarity.RARE, mage.cards.g.GlisteningDawn.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Glistening Deluge", 107, Rarity.UNCOMMON, mage.cards.g.GlisteningDeluge.class)); - cards.add(new SetCardInfo("Glistening Goremonger", 157, Rarity.COMMON, mage.cards.g.GlisteningGoremonger.class)); cards.add(new SetCardInfo("Gloomfang Mauler", 108, Rarity.COMMON, mage.cards.g.GloomfangMauler.class)); cards.add(new SetCardInfo("Gnottvold Hermit", 188, Rarity.UNCOMMON, mage.cards.g.GnottvoldHermit.class)); cards.add(new SetCardInfo("Golden-Scale Aeronaut", 15, Rarity.COMMON, mage.cards.g.GoldenScaleAeronaut.class)); @@ -303,8 +302,6 @@ public final class MarchOfTheMachine extends ExpansionSet { cards.add(new SetCardInfo("Plains", 283, Rarity.LAND, mage.cards.basiclands.Plains.class, FULL_ART_BFZ_VARIOUS)); cards.add(new SetCardInfo("Polukranos Reborn", 200, Rarity.RARE, mage.cards.p.PolukranosReborn.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Polukranos Reborn", 300, Rarity.RARE, mage.cards.p.PolukranosReborn.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Polukranos, Engine of Ruin", 200, Rarity.RARE, mage.cards.p.PolukranosEngineOfRuin.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Polukranos, Engine of Ruin", 300, Rarity.RARE, mage.cards.p.PolukranosEngineOfRuin.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Portent Tracker", 201, Rarity.COMMON, mage.cards.p.PortentTracker.class)); cards.add(new SetCardInfo("Preening Champion", 73, Rarity.COMMON, mage.cards.p.PreeningChampion.class)); cards.add(new SetCardInfo("Progenitor Exarch", 32, Rarity.RARE, mage.cards.p.ProgenitorExarch.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Sets/src/mage/sets/RivalsOfIxalan.java b/Mage.Sets/src/mage/sets/RivalsOfIxalan.java index 6c7e984848d..a978c5e2fe7 100644 --- a/Mage.Sets/src/mage/sets/RivalsOfIxalan.java +++ b/Mage.Sets/src/mage/sets/RivalsOfIxalan.java @@ -139,7 +139,6 @@ public final class RivalsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Mastermind's Acquisition", 77, Rarity.RARE, mage.cards.m.MastermindsAcquisition.class)); cards.add(new SetCardInfo("Mausoleum Harpy", 78, Rarity.UNCOMMON, mage.cards.m.MausoleumHarpy.class)); cards.add(new SetCardInfo("Merfolk Mistbinder", 164, Rarity.UNCOMMON, mage.cards.m.MerfolkMistbinder.class)); - cards.add(new SetCardInfo("Metzali, Tower of Triumph", 165, Rarity.RARE, mage.cards.m.MetzaliTowerOfTriumph.class)); cards.add(new SetCardInfo("Mist-Cloaked Herald", 43, Rarity.COMMON, mage.cards.m.MistCloakedHerald.class)); cards.add(new SetCardInfo("Moment of Craving", 79, Rarity.COMMON, mage.cards.m.MomentOfCraving.class)); cards.add(new SetCardInfo("Moment of Triumph", 15, Rarity.COMMON, mage.cards.m.MomentOfTriumph.class)); @@ -224,7 +223,6 @@ public final class RivalsOfIxalan extends ExpansionSet { cards.add(new SetCardInfo("Tilonalli's Crown", 120, Rarity.COMMON, mage.cards.t.TilonallisCrown.class)); cards.add(new SetCardInfo("Tilonalli's Summoner", 121, Rarity.RARE, mage.cards.t.TilonallisSummoner.class)); cards.add(new SetCardInfo("Timestream Navigator", 59, Rarity.MYTHIC, mage.cards.t.TimestreamNavigator.class)); - cards.add(new SetCardInfo("Tomb of the Dusk Rose", 166, Rarity.RARE, mage.cards.t.TombOfTheDuskRose.class)); cards.add(new SetCardInfo("Tomb Robber", 87, Rarity.RARE, mage.cards.t.TombRobber.class)); cards.add(new SetCardInfo("Trapjaw Tyrant", 29, Rarity.MYTHIC, mage.cards.t.TrapjawTyrant.class)); cards.add(new SetCardInfo("Traveler's Amulet", 184, Rarity.COMMON, mage.cards.t.TravelersAmulet.class)); diff --git a/Mage.Sets/src/mage/sets/RivalsOfIxalanPromos.java b/Mage.Sets/src/mage/sets/RivalsOfIxalanPromos.java index f66423ec8ec..11f54859518 100644 --- a/Mage.Sets/src/mage/sets/RivalsOfIxalanPromos.java +++ b/Mage.Sets/src/mage/sets/RivalsOfIxalanPromos.java @@ -63,7 +63,6 @@ public class RivalsOfIxalanPromos extends ExpansionSet { cards.add(new SetCardInfo("Kumena, Tyrant of Orazca", "162s", Rarity.MYTHIC, mage.cards.k.KumenaTyrantOfOrazca.class)); cards.add(new SetCardInfo("Mastermind's Acquisition", "77p", Rarity.RARE, mage.cards.m.MastermindsAcquisition.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Mastermind's Acquisition", "77s", Rarity.RARE, mage.cards.m.MastermindsAcquisition.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Metzali, Tower of Triumph", "165s", Rarity.RARE, mage.cards.m.MetzaliTowerOfTriumph.class)); cards.add(new SetCardInfo("Nezahal, Primal Tide", "45p", Rarity.RARE, mage.cards.n.NezahalPrimalTide.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Nezahal, Primal Tide", "45s", Rarity.RARE, mage.cards.n.NezahalPrimalTide.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Paladin of Atonement", "16s", Rarity.RARE, mage.cards.p.PaladinOfAtonement.class)); @@ -101,7 +100,6 @@ public class RivalsOfIxalanPromos extends ExpansionSet { cards.add(new SetCardInfo("Tilonalli's Summoner", "121p", Rarity.RARE, mage.cards.t.TilonallisSummoner.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Tilonalli's Summoner", "121s", Rarity.RARE, mage.cards.t.TilonallisSummoner.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Timestream Navigator", "59s", Rarity.MYTHIC, mage.cards.t.TimestreamNavigator.class)); - cards.add(new SetCardInfo("Tomb of the Dusk Rose", "166s", Rarity.RARE, mage.cards.t.TombOfTheDuskRose.class)); cards.add(new SetCardInfo("Tomb Robber", "87s", Rarity.RARE, mage.cards.t.TombRobber.class)); cards.add(new SetCardInfo("Trapjaw Tyrant", "29s", Rarity.MYTHIC, mage.cards.t.TrapjawTyrant.class)); cards.add(new SetCardInfo("Twilight Prophet", "88s", Rarity.MYTHIC, mage.cards.t.TwilightProphet.class)); diff --git a/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java b/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java index 49fd7fbf3c0..371b1ae3e8c 100644 --- a/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java +++ b/Mage.Sets/src/mage/sets/ShadowsOverInnistrad.java @@ -339,7 +339,6 @@ public final class ShadowsOverInnistrad extends ExpansionSet { cards.add(new SetCardInfo("Voldaren Duelist", 191, Rarity.COMMON, mage.cards.v.VoldarenDuelist.class)); cards.add(new SetCardInfo("Warped Landscape", 280, Rarity.COMMON, mage.cards.w.WarpedLandscape.class)); cards.add(new SetCardInfo("Watcher in the Web", 239, Rarity.COMMON, mage.cards.w.WatcherInTheWeb.class)); - cards.add(new SetCardInfo("Wayward Disciple", 34, Rarity.UNCOMMON, mage.cards.w.WaywardDisciple.class)); cards.add(new SetCardInfo("Weirding Wood", 240, Rarity.UNCOMMON, mage.cards.w.WeirdingWood.class)); cards.add(new SetCardInfo("Welcome to the Fold", 96, Rarity.RARE, mage.cards.w.WelcomeToTheFold.class)); cards.add(new SetCardInfo("Werewolf of Ancient Hunger", 225, Rarity.RARE, mage.cards.w.WerewolfOfAncientHunger.class)); diff --git a/Mage.Sets/src/mage/sets/XLNTreasureChest.java b/Mage.Sets/src/mage/sets/XLNTreasureChest.java index d49ac4f7bc1..a7c1e163508 100644 --- a/Mage.Sets/src/mage/sets/XLNTreasureChest.java +++ b/Mage.Sets/src/mage/sets/XLNTreasureChest.java @@ -27,7 +27,6 @@ public class XLNTreasureChest extends ExpansionSet { cards.add(new SetCardInfo("Growing Rites of Itlimoc", 191, Rarity.RARE, mage.cards.g.GrowingRitesOfItlimoc.class)); cards.add(new SetCardInfo("Legion's Landing", 22, Rarity.RARE, mage.cards.l.LegionsLanding.class)); cards.add(new SetCardInfo("Primal Amulet", 243, Rarity.RARE, mage.cards.p.PrimalAmulet.class)); - cards.add(new SetCardInfo("Primal Wellspring", 243, Rarity.RARE, mage.cards.p.PrimalWellspring.class)); cards.add(new SetCardInfo("Search for Azcanta", 74, Rarity.RARE, mage.cards.s.SearchForAzcanta.class)); cards.add(new SetCardInfo("Spires of Orazca", 249, Rarity.RARE, mage.cards.s.SpiresOfOrazca.class)); cards.add(new SetCardInfo("Spitfire Bastion", 173, Rarity.RARE, mage.cards.s.SpitfireBastion.class));