From 5a2458e638df5523376c752d647eff6f950e9eed Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Sun, 3 Jun 2018 16:40:05 -0400 Subject: [PATCH 1/4] fixed numbering --- Mage.Sets/src/mage/sets/Mirage.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Mage.Sets/src/mage/sets/Mirage.java b/Mage.Sets/src/mage/sets/Mirage.java index fbbd7daa93c..95dc7d86b22 100644 --- a/Mage.Sets/src/mage/sets/Mirage.java +++ b/Mage.Sets/src/mage/sets/Mirage.java @@ -1,4 +1,3 @@ - package mage.sets; import mage.cards.ExpansionSet; @@ -42,7 +41,7 @@ public final class Mirage extends ExpansionSet { cards.add(new SetCardInfo("Auspicious Ancestor", 3, Rarity.RARE, mage.cards.a.AuspiciousAncestor.class)); cards.add(new SetCardInfo("Azimaet Drake", 53, Rarity.COMMON, mage.cards.a.AzimaetDrake.class)); cards.add(new SetCardInfo("Bad River", 324, Rarity.UNCOMMON, mage.cards.b.BadRiver.class)); - cards.add(new SetCardInfo("Barbed Foliage", 105, Rarity.UNCOMMON, mage.cards.b.BarbedFoliage.class)); + cards.add(new SetCardInfo("Barbed Foliage", 207, Rarity.UNCOMMON, mage.cards.b.BarbedFoliage.class)); cards.add(new SetCardInfo("Barbed-Back Wurm", 105, Rarity.UNCOMMON, mage.cards.b.BarbedBackWurm.class)); cards.add(new SetCardInfo("Bay Falcon", 54, Rarity.COMMON, mage.cards.b.BayFalcon.class)); cards.add(new SetCardInfo("Benthic Djinn", 257, Rarity.RARE, mage.cards.b.BenthicDjinn.class)); From 53c7f8b978b7c0c6dae9dd297152123df9d18764 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Sun, 3 Jun 2018 17:04:59 -0400 Subject: [PATCH 2/4] Implemented Ravenous Vampire --- .../src/mage/cards/r/RavenousVampire.java | 63 +++++++++++++++++++ Mage.Sets/src/mage/sets/Mirage.java | 1 + 2 files changed, 64 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/r/RavenousVampire.java diff --git a/Mage.Sets/src/mage/cards/r/RavenousVampire.java b/Mage.Sets/src/mage/cards/r/RavenousVampire.java new file mode 100644 index 00000000000..cb25de6a55f --- /dev/null +++ b/Mage.Sets/src/mage/cards/r/RavenousVampire.java @@ -0,0 +1,63 @@ +package mage.cards.r; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.effects.common.TapSourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.constants.SubType; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.TargetController; +import mage.counters.CounterType; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author TheElk801 + */ +public final class RavenousVampire extends CardImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("a nonartifact creature"); + + static { + filter.add(Predicates.not(new CardTypePredicate(CardType.ARTIFACT))); + } + + public RavenousVampire(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}{B}"); + + this.subtype.add(SubType.VAMPIRE); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // At the beginning of your upkeep, you may sacrifice a nonartifact creature. If you do, put a +1/+1 counter on Ravenous Vampire. If you don't, tap Ravenous Vampire. + this.addAbility(new BeginningOfUpkeepTriggeredAbility( + new DoIfCostPaid( + new AddCountersSourceEffect(CounterType.P1P1.createInstance()), + new TapSourceEffect(), + new SacrificeTargetCost(new TargetControlledCreaturePermanent(filter)) + ), + TargetController.YOU, true + )); + } + + public RavenousVampire(final RavenousVampire card) { + super(card); + } + + @Override + public RavenousVampire copy() { + return new RavenousVampire(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Mirage.java b/Mage.Sets/src/mage/sets/Mirage.java index 95dc7d86b22..7813c1e6c89 100644 --- a/Mage.Sets/src/mage/sets/Mirage.java +++ b/Mage.Sets/src/mage/sets/Mirage.java @@ -225,6 +225,7 @@ public final class Mirage extends ExpansionSet { cards.add(new SetCardInfo("Raging Spirit", 188, Rarity.COMMON, mage.cards.r.RagingSpirit.class)); cards.add(new SetCardInfo("Rampant Growth", 235, Rarity.COMMON, mage.cards.r.RampantGrowth.class)); cards.add(new SetCardInfo("Rashida Scalebane", 35, Rarity.RARE, mage.cards.r.RashidaScalebane.class)); + cards.add(new SetCardInfo("Ravenous Vampire", 136, Rarity.UNCOMMON, mage.cards.r.RavenousVampire.class)); cards.add(new SetCardInfo("Ray of Command", 86, Rarity.COMMON, mage.cards.r.RayOfCommand.class)); cards.add(new SetCardInfo("Reality Ripple", 87, Rarity.COMMON, mage.cards.r.RealityRipple.class)); cards.add(new SetCardInfo("Reckless Embermage", 189, Rarity.RARE, mage.cards.r.RecklessEmbermage.class)); From c9e0598270eae0fb410c476669ae67bdcd07558d Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Sun, 3 Jun 2018 17:29:08 -0400 Subject: [PATCH 3/4] Implemented Pyric Salamander --- .../src/mage/cards/p/PyricSalamander.java | 46 +++++++++++++++++++ Mage.Sets/src/mage/sets/Mirage.java | 1 + 2 files changed, 47 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/p/PyricSalamander.java diff --git a/Mage.Sets/src/mage/cards/p/PyricSalamander.java b/Mage.Sets/src/mage/cards/p/PyricSalamander.java new file mode 100644 index 00000000000..1723b986534 --- /dev/null +++ b/Mage.Sets/src/mage/cards/p/PyricSalamander.java @@ -0,0 +1,46 @@ +package mage.cards.p; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; +import mage.abilities.effects.common.SacrificeSourceEffect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.constants.SubType; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; + +/** + * + * @author TheElk801 + */ +public final class PyricSalamander extends CardImpl { + + public PyricSalamander(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}"); + + this.subtype.add(SubType.SALAMANDER); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {R}: Pyric Salamander gets +1/+0 until end of turn. Sacrifice Pyric Salamander at the beginning of the next end step. + Ability ability = new SimpleActivatedAbility(new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{R}")); + ability.addEffect(new CreateDelayedTriggeredAbilityEffect( + new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new SacrificeSourceEffect()) + ).setText("Sacrifice {this} at the beginning of the next end step")); + } + + public PyricSalamander(final PyricSalamander card) { + super(card); + } + + @Override + public PyricSalamander copy() { + return new PyricSalamander(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Mirage.java b/Mage.Sets/src/mage/sets/Mirage.java index 7813c1e6c89..695982cf5e3 100644 --- a/Mage.Sets/src/mage/sets/Mirage.java +++ b/Mage.Sets/src/mage/sets/Mirage.java @@ -220,6 +220,7 @@ public final class Mirage extends ExpansionSet { cards.add(new SetCardInfo("Psychic Transfer", 85, Rarity.RARE, mage.cards.p.PsychicTransfer.class)); cards.add(new SetCardInfo("Purgatory", 275, Rarity.RARE, mage.cards.p.Purgatory.class)); cards.add(new SetCardInfo("Purraj of Urborg", 135, Rarity.RARE, mage.cards.p.PurrajOfUrborg.class)); + cards.add(new SetCardInfo("Pyric Salamander", 187, Rarity.COMMON, mage.cards.p.PyricSalamander.class)); cards.add(new SetCardInfo("Quirion Elves", 234, Rarity.COMMON, mage.cards.q.QuirionElves.class)); cards.add(new SetCardInfo("Radiant Essence", 276, Rarity.UNCOMMON, mage.cards.r.RadiantEssence.class)); cards.add(new SetCardInfo("Raging Spirit", 188, Rarity.COMMON, mage.cards.r.RagingSpirit.class)); From 0dc14603f680d57c942b8002ca95f9eb2094179e Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Sun, 3 Jun 2018 17:45:18 -0400 Subject: [PATCH 4/4] Implemented Misers' Cage --- .../src/mage/cards/e/EbonyOwlNetsuke.java | 30 ++++--- Mage.Sets/src/mage/cards/m/MisersCage.java | 83 +++++++++++++++++++ .../src/mage/cards/p/PyricSalamander.java | 1 + Mage.Sets/src/mage/sets/Mirage.java | 1 + 4 files changed, 99 insertions(+), 16 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/m/MisersCage.java diff --git a/Mage.Sets/src/mage/cards/e/EbonyOwlNetsuke.java b/Mage.Sets/src/mage/cards/e/EbonyOwlNetsuke.java index 6621659dacf..886a8886a12 100644 --- a/Mage.Sets/src/mage/cards/e/EbonyOwlNetsuke.java +++ b/Mage.Sets/src/mage/cards/e/EbonyOwlNetsuke.java @@ -1,4 +1,3 @@ - package mage.cards.e; import java.util.UUID; @@ -22,13 +21,12 @@ import mage.target.targetpointer.FixedTarget; public final class EbonyOwlNetsuke extends CardImpl { public EbonyOwlNetsuke(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}"); // At the beginning of each opponent's upkeep, if that player has seven or more cards in hand, Ebony Owl Netsuke deals 4 damage to him or her. - this.addAbility(new EbonyOwlNetsukeTriggeredAbility(new DamageTargetEffect(4, true))); + this.addAbility(new EbonyOwlNetsukeTriggeredAbility()); } - public EbonyOwlNetsuke(final EbonyOwlNetsuke card) { super(card); } @@ -40,15 +38,15 @@ public final class EbonyOwlNetsuke extends CardImpl { } class EbonyOwlNetsukeTriggeredAbility extends TriggeredAbilityImpl { - - EbonyOwlNetsukeTriggeredAbility(Effect effect) { - super(Zone.BATTLEFIELD, effect, false); + + EbonyOwlNetsukeTriggeredAbility() { + super(Zone.BATTLEFIELD, new DamageTargetEffect(4), false); } - + EbonyOwlNetsukeTriggeredAbility(final EbonyOwlNetsukeTriggeredAbility ability) { super(ability); } - + @Override public EbonyOwlNetsukeTriggeredAbility copy() { return new EbonyOwlNetsukeTriggeredAbility(this); @@ -58,29 +56,29 @@ class EbonyOwlNetsukeTriggeredAbility extends TriggeredAbilityImpl { public boolean checkEventType(GameEvent event, Game game) { return event.getType() == EventType.UPKEEP_STEP_PRE; } - + @Override public boolean checkTrigger(GameEvent event, Game game) { if (game.getOpponents(controllerId).contains(event.getPlayerId())) { Player player = game.getPlayer(event.getPlayerId()); if (player != null) { - for (Effect effect: getEffects() ) { - effect.setTargetPointer(new FixedTarget(player.getId())); + for (Effect effect : getEffects()) { + effect.setTargetPointer(new FixedTarget(player.getId(), game)); } return true; } } return false; } - + @Override public boolean checkInterveningIfClause(Game game) { Player player = game.getPlayer(game.getActivePlayerId()); return player != null && player.getHand().size() >= 7; - } - + } + @Override public String getRule() { - return "At the beginning of each opponent's upkeep, if that player has seven or more cards in hand, {this} deals 4 damage to him or her."; + return "At the beginning of each opponent's upkeep, if that player has seven or more cards in hand, {this} deals 4 damage to that player"; } } diff --git a/Mage.Sets/src/mage/cards/m/MisersCage.java b/Mage.Sets/src/mage/cards/m/MisersCage.java new file mode 100644 index 00000000000..828d7987085 --- /dev/null +++ b/Mage.Sets/src/mage/cards/m/MisersCage.java @@ -0,0 +1,83 @@ +package mage.cards.m; + +import java.util.UUID; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.players.Player; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author TheElk801 + */ +public final class MisersCage extends CardImpl { + + public MisersCage(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); + + // At the beginning of each opponent's upkeep, if that player has five or more cards in hand, Misers' Cage deals 2 damage to him or her. + this.addAbility(new MisersCageTriggeredAbility()); + } + + public MisersCage(final MisersCage card) { + super(card); + } + + @Override + public MisersCage copy() { + return new MisersCage(this); + } +} + +class MisersCageTriggeredAbility extends TriggeredAbilityImpl { + + MisersCageTriggeredAbility() { + super(Zone.BATTLEFIELD, new DamageTargetEffect(2), false); + } + + MisersCageTriggeredAbility(final MisersCageTriggeredAbility ability) { + super(ability); + } + + @Override + public MisersCageTriggeredAbility copy() { + return new MisersCageTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.UPKEEP_STEP_PRE; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (game.getOpponents(controllerId).contains(event.getPlayerId())) { + Player player = game.getPlayer(event.getPlayerId()); + if (player != null) { + for (Effect effect : getEffects()) { + effect.setTargetPointer(new FixedTarget(player.getId(), game)); + } + return true; + } + } + return false; + } + + @Override + public boolean checkInterveningIfClause(Game game) { + Player player = game.getPlayer(game.getActivePlayerId()); + return player != null && player.getHand().size() >= 5; + } + + @Override + public String getRule() { + return "at the beginning of each opponent’s upkeep, if that player has five or more cards in hand, {this} deals 2 damage to that player"; + } +} diff --git a/Mage.Sets/src/mage/cards/p/PyricSalamander.java b/Mage.Sets/src/mage/cards/p/PyricSalamander.java index 1723b986534..cbfb06d6942 100644 --- a/Mage.Sets/src/mage/cards/p/PyricSalamander.java +++ b/Mage.Sets/src/mage/cards/p/PyricSalamander.java @@ -33,6 +33,7 @@ public final class PyricSalamander extends CardImpl { ability.addEffect(new CreateDelayedTriggeredAbilityEffect( new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new SacrificeSourceEffect()) ).setText("Sacrifice {this} at the beginning of the next end step")); + this.addAbility(ability); } public PyricSalamander(final PyricSalamander card) { diff --git a/Mage.Sets/src/mage/sets/Mirage.java b/Mage.Sets/src/mage/sets/Mirage.java index 695982cf5e3..1ccf58c2320 100644 --- a/Mage.Sets/src/mage/sets/Mirage.java +++ b/Mage.Sets/src/mage/sets/Mirage.java @@ -185,6 +185,7 @@ public final class Mirage extends ExpansionSet { cards.add(new SetCardInfo("Merfolk Seer", 76, Rarity.COMMON, mage.cards.m.MerfolkSeer.class)); cards.add(new SetCardInfo("Mind Harness", 78, Rarity.UNCOMMON, mage.cards.m.MindHarness.class)); cards.add(new SetCardInfo("Mire Shade", 131, Rarity.UNCOMMON, mage.cards.m.MireShade.class)); + cards.add(new SetCardInfo("Misers' Cage", 276, Rarity.RARE, mage.cards.m.MisersCage.class)); cards.add(new SetCardInfo("Mist Dragon", 79, Rarity.RARE, mage.cards.m.MistDragon.class)); cards.add(new SetCardInfo("Moss Diamond", 312, Rarity.UNCOMMON, mage.cards.m.MossDiamond.class)); cards.add(new SetCardInfo("Mountain Valley", 328, Rarity.UNCOMMON, mage.cards.m.MountainValley.class));