This commit is contained in:
jeffwadsworth 2019-12-27 09:55:25 -06:00
parent 5856d0744b
commit 6bd41465d2
4 changed files with 46 additions and 23 deletions

View file

@ -1,4 +1,3 @@
package mage.cards.h; package mage.cards.h;
import java.util.UUID; import java.util.UUID;
@ -32,9 +31,11 @@ public final class HarnessTheStorm extends CardImpl {
public HarnessTheStorm(UUID ownerId, CardSetInfo setInfo) { public HarnessTheStorm(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}"); super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}");
// Whenever you cast an instant or sorcery spell from your hand, you may cast target card with the same name as that spell from your graveyard. // Whenever you cast an instant or sorcery spell from your hand, you may cast
// target card with the same name as that spell from your graveyard.
this.addAbility(new HarnessTheStormTriggeredAbility(new HarnessTheStormEffect(), this.addAbility(new HarnessTheStormTriggeredAbility(new HarnessTheStormEffect(),
new FilterInstantOrSorcerySpell("an instant or sorcery spell from your hand"), false), new CastFromHandWatcher()); new FilterInstantOrSorcerySpell("an instant or sorcery spell from your hand"),
false), new CastFromHandWatcher());
} }
public HarnessTheStorm(final HarnessTheStorm card) { public HarnessTheStorm(final HarnessTheStorm card) {
@ -87,7 +88,8 @@ class HarnessTheStormEffect extends OneShotEffect {
public HarnessTheStormEffect() { public HarnessTheStormEffect() {
super(Outcome.Benefit); super(Outcome.Benefit);
this.staticText = "you may cast target card with the same name as that spell from your graveyard. <i>(you still pay its costs.)</i>"; this.staticText = "you may cast target card with the same name as that "
+ "spell from your graveyard. <i>(you still pay its costs.)</i>";
} }
public HarnessTheStormEffect(final HarnessTheStormEffect effect) { public HarnessTheStormEffect(final HarnessTheStormEffect effect) {
@ -106,8 +108,11 @@ class HarnessTheStormEffect extends OneShotEffect {
if (controller != null) { if (controller != null) {
Card card = controller.getGraveyard().get(getTargetPointer().getFirst(game, source), game); Card card = controller.getGraveyard().get(getTargetPointer().getFirst(game, source), game);
if (card != null) { if (card != null) {
if (controller.chooseUse(outcome, "Cast " + card.getIdName() + " from your graveyard?", source, game)) { if (controller.chooseUse(outcome.Benefit, "Cast " + card.getIdName() + " from your graveyard?", source, game)) {
controller.cast(card.getSpellAbility(), game, false, new MageObjectReference(source.getSourceObject(game), game)); game.getState().setValue("PlayFromNotOwnHandZone" + card.getId(), Boolean.TRUE);
controller.cast(controller.chooseAbilityForCast(card, game, false),
game, false, new MageObjectReference(source.getSourceObject(game), game));
game.getState().setValue("PlayFromNotOwnHandZone" + card.getId(), null);
} }
} }
return true; return true;

View file

@ -1,4 +1,3 @@
package mage.cards.m; package mage.cards.m;
import java.util.UUID; import java.util.UUID;
@ -38,7 +37,8 @@ public final class MindleechMass extends CardImpl {
// Trample // Trample
this.addAbility(TrampleAbility.getInstance()); this.addAbility(TrampleAbility.getInstance());
// Whenever Mindleech Mass deals combat damage to a player, you may look at that player's hand. If you do, you may cast a nonland card in it without paying that card's mana cost. // Whenever Mindleech Mass deals combat damage to a player, you may look at that
// player's hand. If you do, you may cast a nonland card in it without paying that card's mana cost.
this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new MindleechMassEffect(), true, true)); this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new MindleechMassEffect(), true, true));
} }
@ -56,7 +56,8 @@ class MindleechMassEffect extends OneShotEffect {
public MindleechMassEffect() { public MindleechMassEffect() {
super(Outcome.PlayForFree); super(Outcome.PlayForFree);
this.staticText = "you may look at that player's hand. If you do, you may cast a nonland card in it without paying that card's mana cost"; this.staticText = "you may look at that player's hand. If you do, "
+ "you may cast a nonland card in it without paying that card's mana cost";
} }
public MindleechMassEffect(final MindleechMassEffect effect) { public MindleechMassEffect(final MindleechMassEffect effect) {
@ -82,7 +83,10 @@ class MindleechMassEffect extends OneShotEffect {
if (controller.chooseTarget(Outcome.PlayForFree, cardsInHand, target, source, game)) { if (controller.chooseTarget(Outcome.PlayForFree, cardsInHand, target, source, game)) {
Card card = game.getCard(target.getFirstTarget()); Card card = game.getCard(target.getFirstTarget());
if (card != null) { if (card != null) {
controller.cast(card.getSpellAbility(), game, true, new MageObjectReference(source.getSourceObject(game), game)); game.getState().setValue("PlayFromNotOwnHandZone" + card.getId(), Boolean.TRUE);
controller.cast(controller.chooseAbilityForCast(card, game, true),
game, true, new MageObjectReference(source.getSourceObject(game), game));
game.getState().setValue("PlayFromNotOwnHandZone" + card.getId(), null);
} }
} }
} }

View file

@ -1,4 +1,3 @@
package mage.cards.p; package mage.cards.p;
import java.util.UUID; import java.util.UUID;
@ -84,7 +83,7 @@ class PanopticMirrorExileEffect extends OneShotEffect {
} }
TargetCardInHand target = new TargetCardInHand(filter); TargetCardInHand target = new TargetCardInHand(filter);
if (player.choose(this.outcome, target, source.getSourceId(), game)) { if (player.choose(outcome.PlayForFree, target, source.getSourceId(), game)) {
Card card = game.getCard(target.getFirstTarget()); Card card = game.getCard(target.getFirstTarget());
if (card != null) { if (card != null) {
card.moveToExile(CardUtil.getCardExileZoneId(game, source), "Panoptic Mirror", source.getSourceId(), game); card.moveToExile(CardUtil.getCardExileZoneId(game, source), "Panoptic Mirror", source.getSourceId(), game);
@ -103,7 +102,7 @@ class PanopticMirrorCastEffect extends OneShotEffect {
public PanopticMirrorCastEffect() { public PanopticMirrorCastEffect() {
super(Outcome.ReturnToHand); super(Outcome.ReturnToHand);
this.staticText = "you may copy a card exiled with Panoptic Mirror. If you do, you may cast the copy without paying its mana cost"; this.staticText = "you may copy a card exiled with {this}. If you do, you may cast the copy without paying its mana cost";
} }
public PanopticMirrorCastEffect(final PanopticMirrorCastEffect effect) { public PanopticMirrorCastEffect(final PanopticMirrorCastEffect effect) {
@ -122,7 +121,10 @@ class PanopticMirrorCastEffect extends OneShotEffect {
if (PanopticMirror == null) { if (PanopticMirror == null) {
PanopticMirror = (Permanent) game.getLastKnownInformation(source.getSourceId(), Zone.BATTLEFIELD); PanopticMirror = (Permanent) game.getLastKnownInformation(source.getSourceId(), Zone.BATTLEFIELD);
} }
if (PanopticMirror != null && PanopticMirror.getImprinted() != null && !PanopticMirror.getImprinted().isEmpty() && controller != null) { if (PanopticMirror != null
&& PanopticMirror.getImprinted() != null
&& !PanopticMirror.getImprinted().isEmpty()
&& controller != null) {
CardsImpl cards = new CardsImpl(); CardsImpl cards = new CardsImpl();
for (UUID uuid : PanopticMirror.getImprinted()) { for (UUID uuid : PanopticMirror.getImprinted()) {
Card card = game.getCard(uuid); Card card = game.getCard(uuid);
@ -145,8 +147,11 @@ class PanopticMirrorCastEffect extends OneShotEffect {
} }
if (cardToCopy != null) { if (cardToCopy != null) {
Card copy = game.copyCard(cardToCopy, source, source.getControllerId()); Card copy = game.copyCard(cardToCopy, source, source.getControllerId());
if (controller.chooseUse(outcome, "Cast the copied card without paying mana cost?", source, game)) { if (controller.chooseUse(outcome.PlayForFree, "Cast the copied card without paying mana cost?", source, game)) {
return controller.cast(copy.getSpellAbility(), game, true, new MageObjectReference(source.getSourceObject(game), game)); game.getState().setValue("PlayFromNotOwnHandZone" + copy.getId(), Boolean.TRUE);
controller.cast(controller.chooseAbilityForCast(copy, game, true),
game, true, new MageObjectReference(source.getSourceObject(game), game));
game.getState().setValue("PlayFromNotOwnHandZone" + copy.getId(), null);
} }
} }
return true; return true;

View file

@ -1,4 +1,3 @@
package mage.cards.v; package mage.cards.v;
import java.util.UUID; import java.util.UUID;
@ -29,7 +28,8 @@ public final class VillainousWealth extends CardImpl {
public VillainousWealth(UUID ownerId, CardSetInfo setInfo) { public VillainousWealth(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{B}{G}{U}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{B}{G}{U}");
// Target opponent exiles the top X cards of their library. You may cast any number of nonland cards with converted mana cost X or less from among them without paying their mana cost. // Target opponent exiles the top X cards of their library. You may cast any number of nonland cards
// with converted mana cost X or less from among them without paying their mana cost.
this.getSpellAbility().addTarget(new TargetOpponent()); this.getSpellAbility().addTarget(new TargetOpponent());
this.getSpellAbility().addEffect(new VillainousWealthEffect()); this.getSpellAbility().addEffect(new VillainousWealthEffect());
@ -49,7 +49,9 @@ class VillainousWealthEffect extends OneShotEffect {
public VillainousWealthEffect() { public VillainousWealthEffect() {
super(Outcome.PlayForFree); super(Outcome.PlayForFree);
this.staticText = "Target opponent exiles the top X cards of their library. You may cast any number of nonland cards with converted mana cost X or less from among them without paying their mana cost"; this.staticText = "Target opponent exiles the top X cards of their library. "
+ "You may cast any number of nonland cards with converted mana cost X "
+ "or less from among them without paying their mana cost";
} }
public VillainousWealthEffect(final VillainousWealthEffect effect) { public VillainousWealthEffect(final VillainousWealthEffect effect) {
@ -74,7 +76,8 @@ class VillainousWealthEffect extends OneShotEffect {
Cards cardsToExile = new CardsImpl(); Cards cardsToExile = new CardsImpl();
cardsToExile.addAll(player.getLibrary().getTopCards(game, source.getManaCostsToPay().getX())); cardsToExile.addAll(player.getLibrary().getTopCards(game, source.getManaCostsToPay().getX()));
controller.moveCards(cardsToExile, Zone.EXILED, source, game); controller.moveCards(cardsToExile, Zone.EXILED, source, game);
if (controller.chooseUse(Outcome.PlayForFree, "Cast cards exiled with " + mageObject.getLogName() + " without paying its mana cost?", source, game)) { if (controller.chooseUse(Outcome.PlayForFree, "Cast cards exiled with " + mageObject.getLogName()
+ " without paying its mana cost?", source, game)) {
OuterLoop: OuterLoop:
while (cardsToExile.count(filter, game) > 0) { while (cardsToExile.count(filter, game) > 0) {
if (!controller.canRespond()) { if (!controller.canRespond()) {
@ -82,11 +85,17 @@ class VillainousWealthEffect extends OneShotEffect {
} }
TargetCardInExile target = new TargetCardInExile(0, 1, filter, exileId, false); TargetCardInExile target = new TargetCardInExile(0, 1, filter, exileId, false);
target.setNotTarget(true); target.setNotTarget(true);
while (cardsToExile.count(filter, game) > 0 && controller.choose(Outcome.PlayForFree, cardsToExile, target, game)) { while (cardsToExile.count(filter, game) > 0
&& controller.choose(Outcome.PlayForFree, cardsToExile, target, game)) {
Card card = game.getCard(target.getFirstTarget()); Card card = game.getCard(target.getFirstTarget());
if (card != null) { if (card != null) {
controller.cast(card.getSpellAbility(), game, true, new MageObjectReference(source.getSourceObject(game), game)); game.getState().setValue("PlayFromNotOwnHandZone" + card.getId(), Boolean.TRUE);
cardsToExile.remove(card); Boolean cardWasCast = controller.cast(controller.chooseAbilityForCast(card, game, true),
game, true, new MageObjectReference(source.getSourceObject(game), game));
game.getState().setValue("PlayFromNotOwnHandZone" + card.getId(), null);
if (cardWasCast) {
cardsToExile.remove(card);
}
} else { } else {
break OuterLoop; break OuterLoop;
} }