From 1887bc149ecf86f9ecd5efdb5f12d2fade3ead71 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Sat, 15 Jun 2019 16:22:48 -0400 Subject: [PATCH] Implemented Chandra, Awakened Inferno --- .../mage/cards/c/ChandraAwakenedInferno.java | 131 ++++++++++++++++++ Mage.Sets/src/mage/sets/CoreSet2020.java | 1 + .../emblems/ChandraAwakenedInfernoEmblem.java | 27 ++++ 3 files changed, 159 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/c/ChandraAwakenedInferno.java create mode 100644 Mage/src/main/java/mage/game/command/emblems/ChandraAwakenedInfernoEmblem.java diff --git a/Mage.Sets/src/mage/cards/c/ChandraAwakenedInferno.java b/Mage.Sets/src/mage/cards/c/ChandraAwakenedInferno.java new file mode 100644 index 00000000000..76591867abb --- /dev/null +++ b/Mage.Sets/src/mage/cards/c/ChandraAwakenedInferno.java @@ -0,0 +1,131 @@ +package mage.cards.c; + +import mage.abilities.Ability; +import mage.abilities.LoyaltyAbility; +import mage.abilities.common.CantBeCounteredAbility; +import mage.abilities.common.PlaneswalkerEntersWithLoyaltyCountersAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.common.PayVariableLoyaltyCost; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DamageAllEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.ExileTargetIfDiesEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.game.Game; +import mage.game.command.emblems.ChandraAwakenedInfernoEmblem; +import mage.target.common.TargetCreatureOrPlaneswalker; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class ChandraAwakenedInferno extends CardImpl { + + private static final FilterPermanent filter = new FilterCreaturePermanent("non-Elemental creature"); + + static { + filter.add(Predicates.not(new SubtypePredicate(SubType.ELEMENTAL))); + } + + public ChandraAwakenedInferno(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, "{4}{R}{R}"); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.CHANDRA); + this.addAbility(new PlaneswalkerEntersWithLoyaltyCountersAbility(6)); + + // This spell can't be countered. + this.addAbility(new CantBeCounteredAbility()); + + // +2: Each opponent gets an emblem with "At the beginning of your upkeep, this emblem deals 1 damage to you." + this.addAbility(new LoyaltyAbility(new ChandraAwakenedInfernoEffect(), 2)); + + // -3: Chandra, Awakened Inferno deals 3 damage to each non-Elemental creature. + this.addAbility(new LoyaltyAbility(new DamageAllEffect(3, filter), -3)); + + // -X: Chandra, Awakened Inferno deals X damage to target creature or planeswalker. If a permanent dealt damage this way would die this turn, exile it instead. + Ability ability = new LoyaltyAbility(new DamageTargetEffect(ChandraAwakenedInfernoXValue.instance)); + ability.addEffect( + new ExileTargetIfDiesEffect() + .setText("If a permanent dealt damage this way would die this turn, exile it instead.") + ); + ability.addTarget(new TargetCreatureOrPlaneswalker()); + this.addAbility(ability); + } + + private ChandraAwakenedInferno(final ChandraAwakenedInferno card) { + super(card); + } + + @Override + public ChandraAwakenedInferno copy() { + return new ChandraAwakenedInferno(this); + } +} + +class ChandraAwakenedInfernoEffect extends OneShotEffect { + + ChandraAwakenedInfernoEffect() { + super(Outcome.Benefit); + staticText = "Each opponent gets an emblem with " + + "\"At the beginning of your upkeep, this emblem deals 1 damage to you.\""; + } + + private ChandraAwakenedInfernoEffect(final ChandraAwakenedInfernoEffect effect) { + super(effect); + } + + @Override + public ChandraAwakenedInfernoEffect copy() { + return new ChandraAwakenedInfernoEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + for (UUID playerId : game.getOpponents(source.getControllerId())) { + game.addEmblem(new ChandraAwakenedInfernoEmblem(), source.getSourceObjectIfItStillExists(game), playerId); + } + return true; + } +} + +enum ChandraAwakenedInfernoXValue implements DynamicValue { + instance; + + @Override + public int calculate(Game game, Ability sourceAbility, Effect effect) { + for (Cost cost : sourceAbility.getCosts()) { + if (cost instanceof PayVariableLoyaltyCost) { + return ((PayVariableLoyaltyCost) cost).getAmount(); + } + } + return 0; + } + + @Override + public DynamicValue copy() { + return instance; + } + + @Override + public String getMessage() { + return ""; + } + + @Override + public String toString() { + return "X"; + } +} diff --git a/Mage.Sets/src/mage/sets/CoreSet2020.java b/Mage.Sets/src/mage/sets/CoreSet2020.java index 35060588e6a..4b2ac0830f9 100644 --- a/Mage.Sets/src/mage/sets/CoreSet2020.java +++ b/Mage.Sets/src/mage/sets/CoreSet2020.java @@ -27,6 +27,7 @@ public final class CoreSet2020 extends ExpansionSet { this.ratioBoosterMythic = 8; this.maxCardNumberInBooster = 280; + cards.add(new SetCardInfo("Chandra, Awakened Inferno", 127, Rarity.MYTHIC, mage.cards.c.ChandraAwakenedInferno.class)); cards.add(new SetCardInfo("Chandra, Novice Pyromancer", 128, Rarity.UNCOMMON, mage.cards.c.ChandraNovicePyromancer.class)); } } diff --git a/Mage/src/main/java/mage/game/command/emblems/ChandraAwakenedInfernoEmblem.java b/Mage/src/main/java/mage/game/command/emblems/ChandraAwakenedInfernoEmblem.java new file mode 100644 index 00000000000..e3908e7d786 --- /dev/null +++ b/Mage/src/main/java/mage/game/command/emblems/ChandraAwakenedInfernoEmblem.java @@ -0,0 +1,27 @@ +package mage.game.command.emblems; + +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.effects.common.DamageControllerEffect; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.game.command.Emblem; + +/** + * @author TheElk801 + */ +public final class ChandraAwakenedInfernoEmblem extends Emblem { + + /** + * Emblem with "At the beginning of your upkeep, this emblem deals 1 damage + * to you." + */ + + public ChandraAwakenedInfernoEmblem() { + setName("Emblem Chandra"); + setExpansionSetCodeForImage("M19"); + this.getAbilities().add(new BeginningOfUpkeepTriggeredAbility( + Zone.COMMAND, new DamageControllerEffect(1, "this emblem"), + TargetController.YOU, false, true + )); + } +}