[FDN] Uncharted Voyage, add option for "their choice" wording

This commit is contained in:
Steven Knipe 2024-11-05 01:10:36 -08:00
parent 46d3201193
commit f15b3cdb30
3 changed files with 47 additions and 1 deletions

View file

@ -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);
}
}

View file

@ -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("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("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 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("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("Unflinching Courage", 722, Rarity.UNCOMMON, mage.cards.u.UnflinchingCourage.class));
cards.add(new SetCardInfo("Unsummon", 599, Rarity.COMMON, mage.cards.u.Unsummon.class)); cards.add(new SetCardInfo("Unsummon", 599, Rarity.COMMON, mage.cards.u.Unsummon.class));

View file

@ -13,15 +13,24 @@ import mage.players.Player;
public class PutOnTopOrBottomLibraryTargetEffect extends OneShotEffect { public class PutOnTopOrBottomLibraryTargetEffect extends OneShotEffect {
private final boolean textOwnerOf; private final boolean textOwnerOf;
private final boolean textTheirChoice;
public PutOnTopOrBottomLibraryTargetEffect(boolean textOwnerOf) { public PutOnTopOrBottomLibraryTargetEffect(boolean textOwnerOf) {
super(Outcome.ReturnToHand); super(Outcome.ReturnToHand);
this.textOwnerOf = textOwnerOf; 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) { private PutOnTopOrBottomLibraryTargetEffect(final PutOnTopOrBottomLibraryTargetEffect effect) {
super(effect); super(effect);
this.textOwnerOf = effect.textOwnerOf; this.textOwnerOf = effect.textOwnerOf;
this.textTheirChoice = effect.textTheirChoice;
} }
@Override @Override
@ -49,6 +58,6 @@ public class PutOnTopOrBottomLibraryTargetEffect extends OneShotEffect {
} }
String targetText = getTargetPointer().describeTargets(mode.getTargets(), "that permanent"); String targetText = getTargetPointer().describeTargets(mode.getTargets(), "that permanent");
return (textOwnerOf ? "the owner of " + targetText : targetText + "'s owner") + 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";
} }
} }