mirror of
https://github.com/correl/mage.git
synced 2024-11-29 03:00:12 +00:00
- See b9bee56
This commit is contained in:
parent
5856d0744b
commit
6bd41465d2
4 changed files with 46 additions and 23 deletions
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue