From b1b6bd600e497ab3063cd848deb83bd82d4f2264 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Tue, 14 Jan 2020 20:38:45 +0400 Subject: [PATCH] Improved rules text generation and removed static texts for some cards with effects: * ExileTargetForSourceEffect * ReturnFromExileForSourceEffect * ReturnToBattlefieldUnderOwnerControlTargetEffect * ReturnToBattlefieldUnderYourControlTargetEffect --- .../src/mage/cards/e/EldraziDisplacer.java | 10 ++--- .../src/mage/cards/f/FacelessButcher.java | 15 +++---- .../src/mage/cards/f/FacelessDevourer.java | 15 +++---- Mage.Sets/src/mage/cards/g/Gravegouger.java | 9 ++-- Mage.Sets/src/mage/cards/h/Helvault.java | 13 +++--- .../mage/cards/i/IllusionistsStratagem.java | 18 ++++---- Mage.Sets/src/mage/cards/n/N1Starfighter.java | 20 ++++----- Mage.Sets/src/mage/cards/p/ParallaxTide.java | 9 ++-- Mage.Sets/src/mage/cards/p/Petradon.java | 22 +++++----- Mage.Sets/src/mage/cards/p/Petravark.java | 8 ++-- Mage.Sets/src/mage/cards/r/RuinGhost.java | 9 ++-- .../src/mage/cards/t/ThassaDeepDwelling.java | 2 +- .../common/ExileTargetForSourceEffect.java | 9 ++-- .../ReturnFromExileForSourceEffect.java | 41 ++++++++++++++----- ...tlefieldUnderOwnerControlTargetEffect.java | 4 +- ...ttlefieldUnderYourControlTargetEffect.java | 13 +++++- 16 files changed, 120 insertions(+), 97 deletions(-) diff --git a/Mage.Sets/src/mage/cards/e/EldraziDisplacer.java b/Mage.Sets/src/mage/cards/e/EldraziDisplacer.java index 8618e6afb6..1ccfa5e162 100644 --- a/Mage.Sets/src/mage/cards/e/EldraziDisplacer.java +++ b/Mage.Sets/src/mage/cards/e/EldraziDisplacer.java @@ -1,7 +1,5 @@ - package mage.cards.e; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -19,8 +17,9 @@ import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.AnotherPredicate; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class EldraziDisplacer extends CardImpl { @@ -42,10 +41,9 @@ public final class EldraziDisplacer extends CardImpl { // {2}{C}: Exile another target creature, then return it to the battlefield tapped under its owner's control. Effect effect = new ExileTargetForSourceEffect(); - effect.setText("Exile another target creature"); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl<>("{2}{C}")); - effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(true); - effect.setText(", then return it to the battlefield tapped under its owner's control"); + effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(true) + .withReturnNames("it", "its owner's").concatBy(", then"); ability.addEffect(effect); ability.addTarget(new TargetCreaturePermanent(FILTER)); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/f/FacelessButcher.java b/Mage.Sets/src/mage/cards/f/FacelessButcher.java index 42bc86ffe6..feb68515f4 100644 --- a/Mage.Sets/src/mage/cards/f/FacelessButcher.java +++ b/Mage.Sets/src/mage/cards/f/FacelessButcher.java @@ -1,7 +1,5 @@ - package mage.cards.f; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -19,32 +17,29 @@ import mage.filter.predicate.permanent.AnotherPredicate; import mage.target.Target; import mage.target.TargetPermanent; +import java.util.UUID; + /** - * * @author Temba21 */ public final class FacelessButcher extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); - + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature other than Faceless Butcher"); static { - filter.add(AnotherPredicate.instance); + filter.add(AnotherPredicate.instance); } - public FacelessButcher(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{B}"); this.subtype.add(SubType.NIGHTMARE); this.subtype.add(SubType.HORROR); this.power = new MageInt(2); this.toughness = new MageInt(3); - // When Faceless Butcher enters the battlefield, exile target creature other than Faceless Butcher. Effect effect = new ExileTargetForSourceEffect(); - effect.setText("exile target creature other than {this}"); Ability ability1 = new EntersBattlefieldTriggeredAbility(effect, false); Target target = new TargetPermanent(filter); ability1.addTarget(target); diff --git a/Mage.Sets/src/mage/cards/f/FacelessDevourer.java b/Mage.Sets/src/mage/cards/f/FacelessDevourer.java index 4148034851..143d5ee6df 100644 --- a/Mage.Sets/src/mage/cards/f/FacelessDevourer.java +++ b/Mage.Sets/src/mage/cards/f/FacelessDevourer.java @@ -1,7 +1,5 @@ - package mage.cards.f; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -21,13 +19,14 @@ import mage.filter.predicate.permanent.AnotherPredicate; import mage.target.Target; import mage.target.TargetPermanent; +import java.util.UUID; + /** - * * @author LoneFox */ public final class FacelessDevourer extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another target creature with shadow"); static { filter.add(AnotherPredicate.instance); @@ -35,7 +34,7 @@ public final class FacelessDevourer extends CardImpl { } public FacelessDevourer(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); this.subtype.add(SubType.NIGHTMARE); this.subtype.add(SubType.HORROR); this.power = new MageInt(2); @@ -43,15 +42,17 @@ public final class FacelessDevourer extends CardImpl { // Shadow this.addAbility(ShadowAbility.getInstance()); + // When Faceless Devourer enters the battlefield, exile another target creature with shadow. Effect effect = new ExileTargetForSourceEffect(); - effect.setText("exile another target creature with shadow"); Ability ability = new EntersBattlefieldTriggeredAbility(effect, false); Target target = new TargetPermanent(filter); ability.addTarget(target); this.addAbility(ability); + // When Faceless Devourer leaves the battlefield, return the exiled card to the battlefield under its owner's control. - ability = new LeavesBattlefieldTriggeredAbility(new ReturnFromExileForSourceEffect(Zone.BATTLEFIELD), false); + ability = new LeavesBattlefieldTriggeredAbility(new ReturnFromExileForSourceEffect(Zone.BATTLEFIELD) + .withReturnName("card", "its owner's"), false); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/g/Gravegouger.java b/Mage.Sets/src/mage/cards/g/Gravegouger.java index 970aee44a1..57f99373d0 100644 --- a/Mage.Sets/src/mage/cards/g/Gravegouger.java +++ b/Mage.Sets/src/mage/cards/g/Gravegouger.java @@ -1,7 +1,5 @@ - package mage.cards.g; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -17,14 +15,15 @@ import mage.constants.Zone; import mage.filter.FilterCard; import mage.target.common.TargetCardInASingleGraveyard; +import java.util.UUID; + /** - * * @author LoneFox */ public final class Gravegouger extends CardImpl { public Gravegouger(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); this.subtype.add(SubType.NIGHTMARE); this.subtype.add(SubType.HORROR); this.power = new MageInt(2); @@ -32,10 +31,10 @@ public final class Gravegouger extends CardImpl { // When Gravegouger enters the battlefield, exile up to two target cards from a single graveyard. Effect effect = new ExileTargetForSourceEffect(); - effect.setText("exile up to two target cards from a single graveyard"); Ability ability = new EntersBattlefieldTriggeredAbility(effect, false); ability.addTarget(new TargetCardInASingleGraveyard(0, 2, new FilterCard("cards from a single graveyard"))); this.addAbility(ability); + // When Gravegouger leaves the battlefield, return the exiled cards to their owner's graveyard. this.addAbility(new LeavesBattlefieldTriggeredAbility(new ReturnFromExileForSourceEffect(Zone.GRAVEYARD), false)); } diff --git a/Mage.Sets/src/mage/cards/h/Helvault.java b/Mage.Sets/src/mage/cards/h/Helvault.java index b361d5a7c8..894ac8b4cf 100644 --- a/Mage.Sets/src/mage/cards/h/Helvault.java +++ b/Mage.Sets/src/mage/cards/h/Helvault.java @@ -1,7 +1,5 @@ - package mage.cards.h; -import java.util.UUID; import mage.abilities.common.DiesTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; @@ -18,8 +16,9 @@ import mage.filter.common.FilterCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author North */ public final class Helvault extends CardImpl { @@ -31,19 +30,21 @@ public final class Helvault extends CardImpl { } public Helvault(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); addSuperType(SuperType.LEGENDARY); - // {1}, {tap}: Exile target creature you control. + // {1}, {T}: Exile target creature you control. SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetForSourceEffect(), new GenericManaCost(1)); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetControlledCreaturePermanent()); this.addAbility(ability); - // {7}, {tap}: Exile target creature you don't control. + + // {7}, {T}: Exile target creature you don't control. ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetForSourceEffect(), new GenericManaCost(7)); ability.addCost(new TapSourceCost()); ability.addTarget(new TargetCreaturePermanent(filter)); this.addAbility(ability); + // When Helvault is put into a graveyard from the battlefield, return all cards exiled with it to the battlefield under their owners' control. this.addAbility(new DiesTriggeredAbility(new ReturnFromExileForSourceEffect(Zone.BATTLEFIELD))); } diff --git a/Mage.Sets/src/mage/cards/i/IllusionistsStratagem.java b/Mage.Sets/src/mage/cards/i/IllusionistsStratagem.java index db99519400..cac0578a60 100644 --- a/Mage.Sets/src/mage/cards/i/IllusionistsStratagem.java +++ b/Mage.Sets/src/mage/cards/i/IllusionistsStratagem.java @@ -1,8 +1,5 @@ - package mage.cards.i; -import java.util.UUID; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.ExileTargetForSourceEffect; import mage.abilities.effects.common.ReturnToBattlefieldUnderYourControlTargetEffect; @@ -12,8 +9,9 @@ import mage.constants.CardType; import mage.filter.common.FilterControlledCreaturePermanent; import mage.target.common.TargetControlledCreaturePermanent; +import java.util.UUID; + /** - * * @author Styxo */ public final class IllusionistsStratagem extends CardImpl { @@ -22,13 +20,11 @@ public final class IllusionistsStratagem extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{U}"); // Exile up to two target creatures you control, then return those cards to the battlefield under their owner's control. - this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(0, 2, new FilterControlledCreaturePermanent("creatures you control"), false)); - Effect effect = new ExileTargetForSourceEffect(); - effect.setText("Exile up to two target creatures you control"); - this.getSpellAbility().addEffect(effect); - effect = new ReturnToBattlefieldUnderYourControlTargetEffect(true); - effect.setText(", then return those cards to the battlefield under their owner's control"); - this.getSpellAbility().addEffect(effect); + this.getSpellAbility().addEffect(new ExileTargetForSourceEffect()); + this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(true) + .withReturnNames("those cards", "their owner's").concatBy(", then")); + this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(0, 2, + new FilterControlledCreaturePermanent("creatures you control"), false)); // Draw a card. this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); diff --git a/Mage.Sets/src/mage/cards/n/N1Starfighter.java b/Mage.Sets/src/mage/cards/n/N1Starfighter.java index bd50c4d84f..8455074bbe 100644 --- a/Mage.Sets/src/mage/cards/n/N1Starfighter.java +++ b/Mage.Sets/src/mage/cards/n/N1Starfighter.java @@ -1,12 +1,9 @@ - package mage.cards.n; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.ExileTargetForSourceEffect; import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect; @@ -19,13 +16,14 @@ import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.permanent.AnotherPredicate; import mage.target.common.TargetControlledCreaturePermanent; +import java.util.UUID; + /** - * * @author Styxo */ public final class N1Starfighter extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another creature you control"); + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("another target creature you control"); static { filter.add(AnotherPredicate.instance); @@ -40,12 +38,14 @@ public final class N1Starfighter extends CardImpl { // Spaceflight this.addAbility(SpaceflightAbility.getInstance()); - // Whenever N-1 Starfighter deals combat damage to a player, you may pay {1}{W/U}. If you do, exile another creature you control, then return that card to the battlefield under its owner's control. - Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new DoIfCostPaid(new ExileTargetForSourceEffect(), new ManaCostsImpl("{1}{W/U}")), false); - Effect effect = new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, true); - effect.setText(", then return the card to the battlefield under their owner's control"); - ability.addEffect(effect); + // Whenever N-1 Starfighter deals combat damage to a player, you may pay {1}{W/U}. If you do, + // exile another target creature you control, then return that card to the battlefield under its owner's control. + // P.S. original card have error with missing target word (another target creature) + Ability ability = new DealsCombatDamageToAPlayerTriggeredAbility(new DoIfCostPaid( + new ExileTargetForSourceEffect(), new ManaCostsImpl("{1}{W/U}")), false); + ability.addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, true).concatBy(", then")); ability.addTarget(new TargetControlledCreaturePermanent(filter)); + ability.getRule(); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/p/ParallaxTide.java b/Mage.Sets/src/mage/cards/p/ParallaxTide.java index 3798ec60ab..fe86166b11 100644 --- a/Mage.Sets/src/mage/cards/p/ParallaxTide.java +++ b/Mage.Sets/src/mage/cards/p/ParallaxTide.java @@ -1,7 +1,5 @@ - package mage.cards.p; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.LeavesBattlefieldTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; @@ -16,22 +14,25 @@ import mage.constants.Zone; import mage.counters.CounterType; import mage.target.common.TargetLandPermanent; +import java.util.UUID; + /** - * * @author Plopman */ public final class ParallaxTide extends CardImpl { public ParallaxTide(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{U}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}{U}"); // Fading 5 this.addAbility(new FadingAbility(5, this)); + // Remove a fade counter from Parallax Tide: Exile target land. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetForSourceEffect(), new RemoveCountersSourceCost(CounterType.FADE.createInstance())); ability.addTarget(new TargetLandPermanent()); this.addAbility(ability); + // When Parallax Tide leaves the battlefield, each player returns to the battlefield all cards they own exiled with Parallax Tide. this.addAbility(new LeavesBattlefieldTriggeredAbility(new ReturnFromExileForSourceEffect(Zone.BATTLEFIELD), splitCard)); } diff --git a/Mage.Sets/src/mage/cards/p/Petradon.java b/Mage.Sets/src/mage/cards/p/Petradon.java index ee73e5681b..6aa2f595dc 100644 --- a/Mage.Sets/src/mage/cards/p/Petradon.java +++ b/Mage.Sets/src/mage/cards/p/Petradon.java @@ -1,46 +1,46 @@ - package mage.cards.p; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.LeavesBattlefieldTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.ExileTargetForSourceEffect; import mage.abilities.effects.common.ReturnFromExileForSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; +import mage.constants.SubType; import mage.constants.Zone; +import mage.filter.common.FilterLandPermanent; import mage.target.common.TargetLandPermanent; +import java.util.UUID; + /** - * * @author LoneFox */ public final class Petradon extends CardImpl { public Petradon(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{6}{R}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{6}{R}{R}"); this.subtype.add(SubType.NIGHTMARE); this.subtype.add(SubType.BEAST); this.power = new MageInt(5); this.toughness = new MageInt(6); // When Petradon enters the battlefield, exile two target lands. - Effect effect = new ExileTargetForSourceEffect(); - effect.setText("exile two target lands"); - Ability ability = new EntersBattlefieldTriggeredAbility(effect, false); - ability.addTarget(new TargetLandPermanent(2)); + Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetForSourceEffect(), false); + ability.addTarget(new TargetLandPermanent(2, 2, new FilterLandPermanent("lands"), false)); this.addAbility(ability); + // When Petradon leaves the battlefield, return the exiled cards to the battlefield under their owners' control. - this.addAbility(new LeavesBattlefieldTriggeredAbility(new ReturnFromExileForSourceEffect(Zone.BATTLEFIELD), false)); + this.addAbility(new LeavesBattlefieldTriggeredAbility(new ReturnFromExileForSourceEffect(Zone.BATTLEFIELD) + .withReturnName("cards", "their owners'"), false)); + // {R}: Petradon gets +1/+0 until end of turn. this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{R}"))); } diff --git a/Mage.Sets/src/mage/cards/p/Petravark.java b/Mage.Sets/src/mage/cards/p/Petravark.java index 172191ebc8..57e20586cb 100644 --- a/Mage.Sets/src/mage/cards/p/Petravark.java +++ b/Mage.Sets/src/mage/cards/p/Petravark.java @@ -1,7 +1,5 @@ - package mage.cards.p; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -15,14 +13,15 @@ import mage.constants.SubType; import mage.constants.Zone; import mage.target.common.TargetLandPermanent; +import java.util.UUID; + /** - * * @author LoneFox */ public final class Petravark extends CardImpl { public Petravark(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}"); this.subtype.add(SubType.NIGHTMARE); this.subtype.add(SubType.BEAST); this.power = new MageInt(2); @@ -32,6 +31,7 @@ public final class Petravark extends CardImpl { Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetForSourceEffect(), false); ability.addTarget(new TargetLandPermanent()); this.addAbility(ability); + // When Petravark leaves the battlefield, return the exiled card to the battlefield under its owner's control. this.addAbility(new LeavesBattlefieldTriggeredAbility(new ReturnFromExileForSourceEffect(Zone.BATTLEFIELD), false)); } diff --git a/Mage.Sets/src/mage/cards/r/RuinGhost.java b/Mage.Sets/src/mage/cards/r/RuinGhost.java index f74a2e2f26..a39b2da139 100644 --- a/Mage.Sets/src/mage/cards/r/RuinGhost.java +++ b/Mage.Sets/src/mage/cards/r/RuinGhost.java @@ -1,7 +1,5 @@ - package mage.cards.r; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -17,20 +15,21 @@ import mage.constants.Zone; import mage.filter.common.FilterControlledLandPermanent; import mage.target.TargetPermanent; +import java.util.UUID; + /** - * * @author jeffwadsworth */ public final class RuinGhost extends CardImpl { public RuinGhost(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); this.subtype.add(SubType.SPIRIT); this.power = new MageInt(1); this.toughness = new MageInt(1); - // {W}, {tap}: Exile target land you control, then return it to the battlefield under your control. + // {W}, {T}: Exile target land you control, then return it to the battlefield under your control. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetForSourceEffect(), new ManaCostsImpl("{W")); ability.addCost(new TapSourceCost()); ability.addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(true)); diff --git a/Mage.Sets/src/mage/cards/t/ThassaDeepDwelling.java b/Mage.Sets/src/mage/cards/t/ThassaDeepDwelling.java index 43ef9c402e..41b047baf5 100644 --- a/Mage.Sets/src/mage/cards/t/ThassaDeepDwelling.java +++ b/Mage.Sets/src/mage/cards/t/ThassaDeepDwelling.java @@ -56,7 +56,7 @@ public final class ThassaDeepDwelling extends CardImpl { // At the beginning of your end step, exile up to one other target creature you control, then return that card to the battlefield under your control. Ability ability = new BeginningOfEndStepTriggeredAbility( - new ExileTargetForSourceEffect()/*.setText("exile up to one other target creature you control")*/, + new ExileTargetForSourceEffect(), TargetController.YOU, false ); ability.addEffect(new ReturnToBattlefieldUnderYourControlTargetEffect(true).concatBy(", then")); diff --git a/Mage/src/main/java/mage/abilities/effects/common/ExileTargetForSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ExileTargetForSourceEffect.java index 1ded5be2d4..bee973d554 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ExileTargetForSourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ExileTargetForSourceEffect.java @@ -69,10 +69,13 @@ public class ExileTargetForSourceEffect extends OneShotEffect { return staticText; } - String upToText = ""; + String amountText = ""; if (mode.getTargets().get(0).getMinNumberOfTargets() < mode.getTargets().get(0).getMaxNumberOfTargets()) { - upToText = "up to " + CardUtil.numberToText(mode.getTargets().get(0).getMaxNumberOfTargets()) + " "; + amountText = "up to " + CardUtil.numberToText(mode.getTargets().get(0).getMaxNumberOfTargets()) + " "; + } else if (mode.getTargets().get(0).getMinNumberOfTargets() > 1) { + amountText = CardUtil.numberToText(mode.getTargets().get(0).getMinNumberOfTargets()) + " "; } + String targetText = ""; if (mode.getTargets().get(0).getTargetName().contains("target ")) { targetText = ""; @@ -83,7 +86,7 @@ public class ExileTargetForSourceEffect extends OneShotEffect { if (mode.getTargets().isEmpty()) { return "exile it"; } else { - return "exile " + upToText + targetText + mode.getTargets().get(0).getTargetName(); + return "exile " + amountText + targetText + mode.getTargets().get(0).getTargetName(); } } } diff --git a/Mage/src/main/java/mage/abilities/effects/common/ReturnFromExileForSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ReturnFromExileForSourceEffect.java index 5b12905f39..7bd9d4350e 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ReturnFromExileForSourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ReturnFromExileForSourceEffect.java @@ -1,4 +1,3 @@ - package mage.abilities.effects.common; import mage.MageObject; @@ -14,7 +13,6 @@ import mage.util.CardUtil; import org.apache.log4j.Logger; /** - * * @author BetaSteward_at_googlemail.com */ public class ReturnFromExileForSourceEffect extends OneShotEffect { @@ -22,9 +20,10 @@ public class ReturnFromExileForSourceEffect extends OneShotEffect { private Zone returnToZone; private boolean tapped; private boolean previousZone; + private String returnName = "cards"; + private String returnControlName; /** - * * @param zone Zone the card should return to */ public ReturnFromExileForSourceEffect(Zone zone) { @@ -36,18 +35,28 @@ public class ReturnFromExileForSourceEffect extends OneShotEffect { } /** - * * @param zone * @param tapped * @param previousZone if this is used from a dies leave battlefield or - * destroyed trigger, the exile zone is based on previous zone of the object + * destroyed trigger, the exile zone is based on previous zone of the object */ public ReturnFromExileForSourceEffect(Zone zone, boolean tapped, boolean previousZone) { super(Outcome.PutCardInPlay); this.returnToZone = zone; this.tapped = tapped; this.previousZone = previousZone; - setText(); + + // different default name for zones + switch (zone) { + case BATTLEFIELD: + this.returnControlName = "its owner's"; + break; + default: + this.returnControlName = "their owner's"; + break; + } + + updateText(); } public ReturnFromExileForSourceEffect(final ReturnFromExileForSourceEffect effect) { @@ -55,6 +64,10 @@ public class ReturnFromExileForSourceEffect extends OneShotEffect { this.returnToZone = effect.returnToZone; this.tapped = effect.tapped; this.previousZone = effect.previousZone; + this.returnName = effect.returnName; + this.returnControlName = effect.returnControlName; + + updateText(); } @Override @@ -85,24 +98,30 @@ public class ReturnFromExileForSourceEffect extends OneShotEffect { return false; } - private void setText() { + private void updateText() { StringBuilder sb = new StringBuilder(); - sb.append("return the exiled cards "); + sb.append("return the exiled " + this.returnName + " "); switch (returnToZone) { case BATTLEFIELD: - sb.append("to the battlefield under its owner's control"); + sb.append("to the battlefield under " + this.returnControlName + " control"); if (tapped) { sb.append(" tapped"); } break; case HAND: - sb.append("to their owner's hand"); + sb.append("to " + this.returnControlName + " hand"); break; case GRAVEYARD: - sb.append("to their owner's graveyard"); + sb.append("to " + this.returnControlName + " graveyard"); break; } staticText = sb.toString(); } + public ReturnFromExileForSourceEffect withReturnName(String returnName, String returnControlName) { + this.returnName = returnName; + this.returnControlName = returnControlName; + updateText(); + return this; + } } diff --git a/Mage/src/main/java/mage/abilities/effects/common/ReturnToBattlefieldUnderOwnerControlTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ReturnToBattlefieldUnderOwnerControlTargetEffect.java index 24963b1ee0..db66028de2 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ReturnToBattlefieldUnderOwnerControlTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ReturnToBattlefieldUnderOwnerControlTargetEffect.java @@ -53,8 +53,8 @@ public class ReturnToBattlefieldUnderOwnerControlTargetEffect extends OneShotEff private void updateText() { this.staticText = "return " + this.returnName - + " to the battlefield under " + this.returnUnderControlName + " control" - + (tapped ? " tapped" : ""); + + " to the battlefield" + (tapped ? " tapped" : "") + + " under " + this.returnUnderControlName + " control"; } @Override diff --git a/Mage/src/main/java/mage/abilities/effects/common/ReturnToBattlefieldUnderYourControlTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ReturnToBattlefieldUnderYourControlTargetEffect.java index 547c62063c..25936223dd 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ReturnToBattlefieldUnderYourControlTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ReturnToBattlefieldUnderYourControlTargetEffect.java @@ -23,6 +23,8 @@ public class ReturnToBattlefieldUnderYourControlTargetEffect extends OneShotEffe private boolean fromExileZone; private boolean tapped; private boolean attacking; + private String returnName = "that card"; + private String returnUnderControlName = "your"; public ReturnToBattlefieldUnderYourControlTargetEffect() { this(false); @@ -50,12 +52,14 @@ public class ReturnToBattlefieldUnderYourControlTargetEffect extends OneShotEffe this.fromExileZone = effect.fromExileZone; this.tapped = effect.tapped; this.attacking = effect.attacking; + this.returnName = effect.returnName; + this.returnUnderControlName = effect.returnUnderControlName; updateText(); } private void updateText() { - this.staticText = "return that card to the battlefield under your control" + this.staticText = "return " + returnName + " to the battlefield under " + returnUnderControlName + " control" + (tapped ? " tapped" : "") + (tapped && attacking ? " and" : "") + (attacking ? " attacking" : ""); @@ -111,4 +115,11 @@ public class ReturnToBattlefieldUnderYourControlTargetEffect extends OneShotEffe } return false; } + + public ReturnToBattlefieldUnderYourControlTargetEffect withReturnNames(String returnName, String returnUnderControlName) { + this.returnName = returnName; + this.returnUnderControlName = returnUnderControlName; + updateText(); + return this; + } }