From 7d82b6b1be4d4e144546f62548cb2232057daa55 Mon Sep 17 00:00:00 2001 From: Susucre <34709007+Susucre@users.noreply.github.com> Date: Fri, 18 Aug 2023 15:15:59 +0200 Subject: [PATCH] [WOE] Implement Restless Spire (#10846) --- Mage.Sets/src/mage/cards/r/RestlessSpire.java | 64 +++++++++++++++++++ Mage.Sets/src/mage/sets/WildsOfEldraine.java | 1 + .../BecomesCreatureSourceEffect.java | 12 +++- 3 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 Mage.Sets/src/mage/cards/r/RestlessSpire.java diff --git a/Mage.Sets/src/mage/cards/r/RestlessSpire.java b/Mage.Sets/src/mage/cards/r/RestlessSpire.java new file mode 100644 index 00000000000..6e2fbc1c071 --- /dev/null +++ b/Mage.Sets/src/mage/cards/r/RestlessSpire.java @@ -0,0 +1,64 @@ +package mage.cards.r; + +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.MyTurnCondition; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.effects.keyword.ScryEffect; +import mage.abilities.hint.common.MyTurnHint; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.mana.BlueManaAbility; +import mage.abilities.mana.RedManaAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.game.permanent.token.custom.CreatureToken; + +import java.util.UUID; + +/** + * @author Susucr + */ +public final class RestlessSpire extends CardImpl { + + public RestlessSpire(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); + + // Restless Spire enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + + // {T}: Add {U} or {R}. + this.addAbility(new BlueManaAbility()); + this.addAbility(new RedManaAbility()); + + // {U}{R}: Until end of turn, Restless Spire becomes a 2/1 blue and red Elemental creature with "As long as it's your turn, this creature has first strike". It's still a land. + this.addAbility(new SimpleActivatedAbility(new BecomesCreatureSourceEffect( + new CreatureToken(2, 1, "2/1 blue and red Elemental creature with \"As long as it's your turn, this creature has first strike\"") + .withColor("UR").withSubType(SubType.ELEMENTAL) + .withAbility(new SimpleStaticAbility(new ConditionalContinuousEffect( + new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield), + MyTurnCondition.instance, "As long as it's your turn, this creature has first strike." + )).addHint(MyTurnHint.instance)), + CardType.LAND, Duration.EndOfTurn, true + ), new ManaCostsImpl<>("{U}{R}"))); + + // Whenever Restless Spire attacks, scry 1. + this.addAbility(new AttacksTriggeredAbility(new ScryEffect(1, false), false)); + } + + private RestlessSpire(final RestlessSpire card) { + super(card); + } + + @Override + public RestlessSpire copy() { + return new RestlessSpire(this); + } +} diff --git a/Mage.Sets/src/mage/sets/WildsOfEldraine.java b/Mage.Sets/src/mage/sets/WildsOfEldraine.java index 1678360fd9b..ebb0871dea5 100644 --- a/Mage.Sets/src/mage/sets/WildsOfEldraine.java +++ b/Mage.Sets/src/mage/sets/WildsOfEldraine.java @@ -58,6 +58,7 @@ public final class WildsOfEldraine extends ExpansionSet { cards.add(new SetCardInfo("Realm-Scorcher Hellkite", 145, Rarity.MYTHIC, mage.cards.r.RealmScorcherHellkite.class)); cards.add(new SetCardInfo("Restless Cottage", 258, Rarity.RARE, mage.cards.r.RestlessCottage.class)); cards.add(new SetCardInfo("Restless Fortress", 259, Rarity.RARE, mage.cards.r.RestlessFortress.class)); + cards.add(new SetCardInfo("Restless Spire", 260, Rarity.RARE, mage.cards.r.RestlessSpire.class)); cards.add(new SetCardInfo("Return from the Wilds", 181, Rarity.COMMON, mage.cards.r.ReturnFromTheWilds.class)); cards.add(new SetCardInfo("Rootrider Faun", 182, Rarity.COMMON, mage.cards.r.RootriderFaun.class)); cards.add(new SetCardInfo("Ruby, Daring Tracker", 212, Rarity.UNCOMMON, mage.cards.r.RubyDaringTracker.class)); diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java index 2632ec74224..e2289ffab40 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java @@ -49,10 +49,20 @@ public class BecomesCreatureSourceEffect extends ContinuousEffectImpl { * @param duration Duration for the effect */ public BecomesCreatureSourceEffect(Token token, CardType retainType, Duration duration) { + this(token, retainType, duration, (retainType == CardType.PLANESWALKER || retainType == CardType.CREATURE)); + } + + /** + * @param token Token as blueprint for creature to become + * @param retainType If null, permanent loses its previous types, otherwise retains types with appropriate text + * @param duration Duration for the effect + * @param durationRuleAtStart for text rule generation + */ + public BecomesCreatureSourceEffect(Token token, CardType retainType, Duration duration, boolean durationRuleAtStart) { super(duration, Outcome.BecomeCreature); this.token = token; this.retainType = retainType; - this.durationRuleAtStart = (retainType == CardType.PLANESWALKER || retainType == CardType.CREATURE); + this.durationRuleAtStart = durationRuleAtStart; setText(); this.addDependencyType(DependencyType.BecomeCreature); }