diff --git a/Mage.Sets/src/mage/cards/u/UnchartedVoyage.java b/Mage.Sets/src/mage/cards/u/UnchartedVoyage.java new file mode 100644 index 00000000000..6f6163baf2b --- /dev/null +++ b/Mage.Sets/src/mage/cards/u/UnchartedVoyage.java @@ -0,0 +1,36 @@ +package mage.cards.u; + +import mage.abilities.effects.common.PutOnTopOrBottomLibraryTargetEffect; +import mage.abilities.effects.keyword.SurveilEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; + +/** + * @author notgreat + */ +public final class UnchartedVoyage extends CardImpl { + + public UnchartedVoyage(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{3}{U}"); + + // Target creature's owner puts it on their choice of the top or bottom of their library. + this.getSpellAbility().addEffect(new PutOnTopOrBottomLibraryTargetEffect(false, true)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + + // Surveil 1. + this.getSpellAbility().addEffect(new SurveilEffect(1)); + } + + private UnchartedVoyage(final UnchartedVoyage card) { + super(card); + } + + @Override + public UnchartedVoyage copy() { + return new UnchartedVoyage(this); + } +} diff --git a/Mage.Sets/src/mage/sets/Foundations.java b/Mage.Sets/src/mage/sets/Foundations.java index 2736049ef81..c03cd666422 100644 --- a/Mage.Sets/src/mage/sets/Foundations.java +++ b/Mage.Sets/src/mage/sets/Foundations.java @@ -498,6 +498,7 @@ public final class Foundations extends ExpansionSet { cards.add(new SetCardInfo("Twinblade Paladin", 503, Rarity.UNCOMMON, mage.cards.t.TwinbladePaladin.class)); cards.add(new SetCardInfo("Twinflame Tyrant", 97, Rarity.MYTHIC, mage.cards.t.TwinflameTyrant.class)); cards.add(new SetCardInfo("Uncharted Haven", 564, Rarity.COMMON, mage.cards.u.UnchartedHaven.class)); + cards.add(new SetCardInfo("Uncharted Voyage", 53, Rarity.COMMON, mage.cards.u.UnchartedVoyage.class)); cards.add(new SetCardInfo("Undying Malice", 528, Rarity.COMMON, mage.cards.u.UndyingMalice.class)); cards.add(new SetCardInfo("Unflinching Courage", 722, Rarity.UNCOMMON, mage.cards.u.UnflinchingCourage.class)); cards.add(new SetCardInfo("Unsummon", 599, Rarity.COMMON, mage.cards.u.Unsummon.class)); diff --git a/Mage/src/main/java/mage/abilities/effects/common/PutOnTopOrBottomLibraryTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/PutOnTopOrBottomLibraryTargetEffect.java index 73497ca3158..3a9b6e9092c 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/PutOnTopOrBottomLibraryTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/PutOnTopOrBottomLibraryTargetEffect.java @@ -13,15 +13,24 @@ import mage.players.Player; public class PutOnTopOrBottomLibraryTargetEffect extends OneShotEffect { private final boolean textOwnerOf; + private final boolean textTheirChoice; public PutOnTopOrBottomLibraryTargetEffect(boolean textOwnerOf) { super(Outcome.ReturnToHand); this.textOwnerOf = textOwnerOf; + this.textTheirChoice = false; + } + + public PutOnTopOrBottomLibraryTargetEffect(boolean textOwnerOf, boolean textTheirChoice) { + super(Outcome.ReturnToHand); + this.textOwnerOf = textOwnerOf; + this.textTheirChoice = textTheirChoice; } private PutOnTopOrBottomLibraryTargetEffect(final PutOnTopOrBottomLibraryTargetEffect effect) { super(effect); this.textOwnerOf = effect.textOwnerOf; + this.textTheirChoice = effect.textTheirChoice; } @Override @@ -49,6 +58,6 @@ public class PutOnTopOrBottomLibraryTargetEffect extends OneShotEffect { } String targetText = getTargetPointer().describeTargets(mode.getTargets(), "that permanent"); return (textOwnerOf ? "the owner of " + targetText : targetText + "'s owner") + - " puts it on the top or bottom of their library"; + " puts it on " + (textTheirChoice ? "their choice of " : "") + "the top or bottom of their library"; } }