mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
WHO: caught_in_a_parallel_universe.txt + support (#4093)
* WHO: caught_in_a_parallel_universe.txt + support * coward_killer.txt tidy * human_time_lord_meta_crisis + support * more tweaks for grenzos_rebuttal and similar
This commit is contained in:
@@ -3,7 +3,7 @@ package forge.game.ability.effects;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Sets;
|
import forge.game.Direction;
|
||||||
import forge.game.player.DelayedReveal;
|
import forge.game.player.DelayedReveal;
|
||||||
import forge.game.player.PlayerView;
|
import forge.game.player.PlayerView;
|
||||||
import forge.util.CardTranslation;
|
import forge.util.CardTranslation;
|
||||||
@@ -59,7 +59,7 @@ public class ChooseCardEffect extends SpellAbilityEffect {
|
|||||||
final Card host = sa.getHostCard();
|
final Card host = sa.getHostCard();
|
||||||
final Player activator = sa.getActivatingPlayer();
|
final Player activator = sa.getActivatingPlayer();
|
||||||
final Game game = activator.getGame();
|
final Game game = activator.getGame();
|
||||||
CardCollection chosen = new CardCollection();
|
CardCollection allChosen = new CardCollection();
|
||||||
|
|
||||||
final List<Player> tgtPlayers = getDefinedPlayersOrTargeted(sa);
|
final List<Player> tgtPlayers = getDefinedPlayersOrTargeted(sa);
|
||||||
|
|
||||||
@@ -100,9 +100,22 @@ public class ChooseCardEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
boolean revealTitle = (sa.hasParam("RevealTitle"));
|
boolean revealTitle = (sa.hasParam("RevealTitle"));
|
||||||
for (Player p : tgtPlayers) {
|
for (Player p : tgtPlayers) {
|
||||||
|
CardCollectionView pChoices = choices;
|
||||||
|
CardCollection chosen = new CardCollection();
|
||||||
if (!p.isInGame()) {
|
if (!p.isInGame()) {
|
||||||
p = getNewChooser(sa, activator, p);
|
p = getNewChooser(sa, activator, p);
|
||||||
}
|
}
|
||||||
|
if (sa.hasParam("ControlledByPlayer")) {
|
||||||
|
final String param = sa.getParam("ControlledByPlayer");
|
||||||
|
if (param.equals("Chooser")) {
|
||||||
|
pChoices = CardLists.filterControlledBy(pChoices, p);
|
||||||
|
} else if (param.equals("Left") || param.equals("Right")) {
|
||||||
|
pChoices = CardLists.filterControlledBy(pChoices, game.getNextPlayerAfter(p,
|
||||||
|
Direction.valueOf(param)));
|
||||||
|
} else {
|
||||||
|
pChoices = CardLists.filterControlledBy(pChoices, AbilityUtils.getDefinedPlayers(host, param, sa));
|
||||||
|
}
|
||||||
|
}
|
||||||
boolean dontRevealToOwner = true;
|
boolean dontRevealToOwner = true;
|
||||||
if (sa.hasParam("EachBasicType")) {
|
if (sa.hasParam("EachBasicType")) {
|
||||||
// Get all lands,
|
// Get all lands,
|
||||||
@@ -123,16 +136,17 @@ public class ChooseCardEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (sa.hasParam("ChooseParty")) {
|
} else if (sa.hasParam("ChooseEach")) {
|
||||||
Set<String> partyTypes = Sets.newHashSet("Cleric", "Rogue", "Warrior", "Wizard");
|
final String s = sa.getParam("ChooseEach");
|
||||||
for (final String type : partyTypes) {
|
final String[] types = s.equals("Party") ? new String[]{"Cleric","Thief","Warrior","Wizard"}
|
||||||
CardCollection valids = CardLists.filter(p.getCardsIn(ZoneType.Battlefield),
|
: s.split(" & ");
|
||||||
CardPredicates.isType(type));
|
for (final String type : types) {
|
||||||
valids.removeAll(chosen);
|
CardCollection valids = CardLists.filter(pChoices, CardPredicates.isType(type));
|
||||||
if (!valids.isEmpty()) {
|
if (!valids.isEmpty()) {
|
||||||
final String prompt = Localizer.getInstance().getMessage("lblChoose") + " " +
|
final String prompt = Localizer.getInstance().getMessage("lblChoose") + " " +
|
||||||
Lang.nounWithNumeralExceptOne(1, type);
|
Lang.nounWithNumeralExceptOne(1, type);
|
||||||
Card c = p.getController().chooseSingleEntityForEffect(valids, sa, prompt, true, null);
|
Card c = p.getController().chooseSingleEntityForEffect(valids, sa, prompt,
|
||||||
|
!sa.hasParam("Mandatory"), null);
|
||||||
if (c != null) {
|
if (c != null) {
|
||||||
chosen.add(c);
|
chosen.add(c);
|
||||||
}
|
}
|
||||||
@@ -168,9 +182,9 @@ public class ChooseCardEffect extends SpellAbilityEffect {
|
|||||||
CardCollection chosenPool = new CardCollection();
|
CardCollection chosenPool = new CardCollection();
|
||||||
String title = Localizer.getInstance().getMessage("lblChooseCreature");
|
String title = Localizer.getInstance().getMessage("lblChooseCreature");
|
||||||
Card choice = null;
|
Card choice = null;
|
||||||
while (!choices.isEmpty() && chosenPool.size() < validAmount) {
|
while (!pChoices.isEmpty() && chosenPool.size() < validAmount) {
|
||||||
boolean optional = chosenPool.size() >= minAmount;
|
boolean optional = chosenPool.size() >= minAmount;
|
||||||
CardCollection creature = (CardCollection) choices;
|
CardCollection creature = (CardCollection) pChoices;
|
||||||
if (!chosenPool.isEmpty()) {
|
if (!chosenPool.isEmpty()) {
|
||||||
title = Localizer.getInstance().getMessage("lblChooseCreatureWithDiffPower");
|
title = Localizer.getInstance().getMessage("lblChooseCreatureWithDiffPower");
|
||||||
}
|
}
|
||||||
@@ -180,7 +194,7 @@ public class ChooseCardEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
chosenPool.add(choice);
|
chosenPool.add(choice);
|
||||||
restrict = restrict + (restrict.contains(".") ? "+powerNE" : ".powerNE") + choice.getNetPower();
|
restrict = restrict + (restrict.contains(".") ? "+powerNE" : ".powerNE") + choice.getNetPower();
|
||||||
choices = CardLists.getValidCards(choices, restrict, activator, host, sa);
|
pChoices = CardLists.getValidCards(pChoices, restrict, activator, host, sa);
|
||||||
}
|
}
|
||||||
if (choice != null) {
|
if (choice != null) {
|
||||||
chosenPool.add(choice);
|
chosenPool.add(choice);
|
||||||
@@ -189,7 +203,7 @@ public class ChooseCardEffect extends SpellAbilityEffect {
|
|||||||
} else if (sa.hasParam("EachDifferentPower")) {
|
} else if (sa.hasParam("EachDifferentPower")) {
|
||||||
List<Integer> powers = new ArrayList<>();
|
List<Integer> powers = new ArrayList<>();
|
||||||
CardCollection chosenPool = new CardCollection();
|
CardCollection chosenPool = new CardCollection();
|
||||||
for (Card c : choices) {
|
for (Card c : pChoices) {
|
||||||
int pow = c.getNetPower();
|
int pow = c.getNetPower();
|
||||||
if (!powers.contains(pow)) {
|
if (!powers.contains(pow)) {
|
||||||
powers.add(c.getNetPower());
|
powers.add(c.getNetPower());
|
||||||
@@ -200,7 +214,7 @@ public class ChooseCardEffect extends SpellAbilityEffect {
|
|||||||
re = re + (re.contains(".") ? "+powerEQ" : ".powerEQ");
|
re = re + (re.contains(".") ? "+powerEQ" : ".powerEQ");
|
||||||
for (int i : powers) {
|
for (int i : powers) {
|
||||||
String restrict = re + i;
|
String restrict = re + i;
|
||||||
CardCollection valids = CardLists.getValidCards(choices, restrict, activator, host, sa);
|
CardCollection valids = CardLists.getValidCards(pChoices, restrict, activator, host, sa);
|
||||||
Card choice = p.getController().chooseSingleEntityForEffect(valids, sa,
|
Card choice = p.getController().chooseSingleEntityForEffect(valids, sa,
|
||||||
Localizer.getInstance().getMessage("lblChooseCreatureWithXPower", i), false, null);
|
Localizer.getInstance().getMessage("lblChooseCreatureWithXPower", i), false, null);
|
||||||
chosenPool.add(choice);
|
chosenPool.add(choice);
|
||||||
@@ -209,17 +223,17 @@ public class ChooseCardEffect extends SpellAbilityEffect {
|
|||||||
} else if (sa.hasParam("ControlAndNot")) {
|
} else if (sa.hasParam("ControlAndNot")) {
|
||||||
String title = sa.hasParam("ChoiceTitle") ? sa.getParam("ChoiceTitle") : Localizer.getInstance().getMessage("lblChooseCreature");
|
String title = sa.hasParam("ChoiceTitle") ? sa.getParam("ChoiceTitle") : Localizer.getInstance().getMessage("lblChooseCreature");
|
||||||
// Targeted player (p) chooses N creatures that belongs to them
|
// Targeted player (p) chooses N creatures that belongs to them
|
||||||
CardCollection tgtPlayerCtrl = CardLists.filterControlledBy(choices, p);
|
CardCollection tgtPlayerCtrl = CardLists.filterControlledBy(pChoices, p);
|
||||||
chosen.addAll(p.getController().chooseCardsForEffect(tgtPlayerCtrl, sa, title + " " + "you control", minAmount, validAmount,
|
chosen.addAll(p.getController().chooseCardsForEffect(tgtPlayerCtrl, sa, title + " " + "you control", minAmount, validAmount,
|
||||||
!sa.hasParam("Mandatory"), null));
|
!sa.hasParam("Mandatory"), null));
|
||||||
// Targeted player (p) chooses N creatures that don't belong to them
|
// Targeted player (p) chooses N creatures that don't belong to them
|
||||||
CardCollection notTgtPlayerCtrl = new CardCollection(choices);
|
CardCollection notTgtPlayerCtrl = new CardCollection(pChoices);
|
||||||
notTgtPlayerCtrl.removeAll(tgtPlayerCtrl);
|
notTgtPlayerCtrl.removeAll(tgtPlayerCtrl);
|
||||||
chosen.addAll(p.getController().chooseCardsForEffect(notTgtPlayerCtrl, sa, title + " " + "you don't control", minAmount, validAmount,
|
chosen.addAll(p.getController().chooseCardsForEffect(notTgtPlayerCtrl, sa, title + " " + "you don't control", minAmount, validAmount,
|
||||||
!sa.hasParam("Mandatory"), null));
|
!sa.hasParam("Mandatory"), null));
|
||||||
} else if (sa.hasParam("AtRandom") && !choices.isEmpty()) {
|
} else if (sa.hasParam("AtRandom") && !pChoices.isEmpty()) {
|
||||||
// don't pass FCollection for direct modification, the Set part would get messed up
|
// don't pass FCollection for direct modification, the Set part would get messed up
|
||||||
chosen = new CardCollection(Aggregates.random(choices, validAmount));
|
chosen = new CardCollection(Aggregates.random(pChoices, validAmount));
|
||||||
dontRevealToOwner = false;
|
dontRevealToOwner = false;
|
||||||
} else {
|
} else {
|
||||||
String title = sa.hasParam("ChoiceTitle") ? sa.getParam("ChoiceTitle") : Localizer.getInstance().getMessage("lblChooseaCard") + " ";
|
String title = sa.hasParam("ChoiceTitle") ? sa.getParam("ChoiceTitle") : Localizer.getInstance().getMessage("lblChooseaCard") + " ";
|
||||||
@@ -252,7 +266,7 @@ public class ChooseCardEffect extends SpellAbilityEffect {
|
|||||||
DelayedReveal delayedReveal = new DelayedReveal(shown, ZoneType.Library, PlayerView.get(searched),
|
DelayedReveal delayedReveal = new DelayedReveal(shown, ZoneType.Library, PlayerView.get(searched),
|
||||||
CardTranslation.getTranslatedName(host.getName()) + " - " +
|
CardTranslation.getTranslatedName(host.getName()) + " - " +
|
||||||
Localizer.getInstance().getMessage("lblLookingCardIn") + " ");
|
Localizer.getInstance().getMessage("lblLookingCardIn") + " ");
|
||||||
Card choice = p.getController().chooseSingleEntityForEffect(choices, delayedReveal, sa, title,
|
Card choice = p.getController().chooseSingleEntityForEffect(pChoices, delayedReveal, sa, title,
|
||||||
!sa.hasParam("Mandatory"), p, null);
|
!sa.hasParam("Mandatory"), p, null);
|
||||||
if (choice == null) {
|
if (choice == null) {
|
||||||
return;
|
return;
|
||||||
@@ -263,7 +277,7 @@ public class ChooseCardEffect extends SpellAbilityEffect {
|
|||||||
p.removeController(controlTimestamp);
|
p.removeController(controlTimestamp);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
chosen.addAll(p.getController().chooseCardsForEffect(choices, sa, title, minAmount, validAmount,
|
chosen.addAll(p.getController().chooseCardsForEffect(pChoices, sa, title, minAmount, validAmount,
|
||||||
!sa.hasParam("Mandatory"), null));
|
!sa.hasParam("Mandatory"), null));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -271,26 +285,30 @@ public class ChooseCardEffect extends SpellAbilityEffect {
|
|||||||
game.getAction().reveal(chosen, p, dontRevealToOwner, revealTitle ? sa.getParam("RevealTitle") :
|
game.getAction().reveal(chosen, p, dontRevealToOwner, revealTitle ? sa.getParam("RevealTitle") :
|
||||||
Localizer.getInstance().getMessage("lblChosenCards") + " ", !revealTitle);
|
Localizer.getInstance().getMessage("lblChosenCards") + " ", !revealTitle);
|
||||||
}
|
}
|
||||||
|
if (sa.hasParam("ChosenMap")) {
|
||||||
|
host.addToChosenMap(p, chosen);
|
||||||
|
}
|
||||||
|
allChosen.addAll(chosen);
|
||||||
}
|
}
|
||||||
if (sa.hasParam("Reveal") && sa.hasParam("SecretlyChoose")) {
|
if (sa.hasParam("Reveal") && sa.hasParam("SecretlyChoose")) {
|
||||||
for (final Player p : tgtPlayers) {
|
for (final Player p : tgtPlayers) {
|
||||||
game.getAction().reveal(chosen, p, true, revealTitle ?
|
game.getAction().reveal(allChosen, p, true, revealTitle ?
|
||||||
sa.getParam("RevealTitle") : Localizer.getInstance().getMessage("lblChosenCards") + " ",
|
sa.getParam("RevealTitle") : Localizer.getInstance().getMessage("lblChosenCards") + " ",
|
||||||
!revealTitle);
|
!revealTitle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
host.setChosenCards(chosen);
|
host.setChosenCards(allChosen);
|
||||||
if (sa.hasParam("ForgetOtherRemembered")) {
|
if (sa.hasParam("ForgetOtherRemembered")) {
|
||||||
host.clearRemembered();
|
host.clearRemembered();
|
||||||
}
|
}
|
||||||
if (sa.hasParam("RememberChosen")) {
|
if (sa.hasParam("RememberChosen")) {
|
||||||
host.addRemembered(chosen);
|
host.addRemembered(allChosen);
|
||||||
}
|
}
|
||||||
if (sa.hasParam("ForgetChosen")) {
|
if (sa.hasParam("ForgetChosen")) {
|
||||||
host.removeRemembered(chosen);
|
host.removeRemembered(allChosen);
|
||||||
}
|
}
|
||||||
if (sa.hasParam("ImprintChosen")) {
|
if (sa.hasParam("ImprintChosen")) {
|
||||||
host.addImprintedCards(chosen);
|
host.addImprintedCards(allChosen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,6 +106,7 @@ public class CopyPermanentEffect extends TokenEffectBase {
|
|||||||
final Player activator = sa.getActivatingPlayer();
|
final Player activator = sa.getActivatingPlayer();
|
||||||
final Game game = host.getGame();
|
final Game game = host.getGame();
|
||||||
boolean useZoneTable = true;
|
boolean useZoneTable = true;
|
||||||
|
boolean chosenMap = "ChosenMap".equals(sa.getParam("Defined"));
|
||||||
CardZoneTable triggerList = sa.getChangeZoneTable();
|
CardZoneTable triggerList = sa.getChangeZoneTable();
|
||||||
if (triggerList == null) {
|
if (triggerList == null) {
|
||||||
triggerList = new CardZoneTable();
|
triggerList = new CardZoneTable();
|
||||||
@@ -130,6 +131,8 @@ public class CopyPermanentEffect extends TokenEffectBase {
|
|||||||
List<Player> controllers = Lists.newArrayList();
|
List<Player> controllers = Lists.newArrayList();
|
||||||
if (sa.hasParam("Controller")) {
|
if (sa.hasParam("Controller")) {
|
||||||
controllers = AbilityUtils.getDefinedPlayers(host, sa.getParam("Controller"), sa);
|
controllers = AbilityUtils.getDefinedPlayers(host, sa.getParam("Controller"), sa);
|
||||||
|
} else if (chosenMap) {
|
||||||
|
controllers.addAll(host.getChosenMap().keySet());
|
||||||
}
|
}
|
||||||
if (controllers.isEmpty()) {
|
if (controllers.isEmpty()) {
|
||||||
controllers.add(activator);
|
controllers.add(activator);
|
||||||
@@ -223,6 +226,12 @@ public class CopyPermanentEffect extends TokenEffectBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (chosenMap) {
|
||||||
|
if (sa.hasParam("ChosenMapIndex")) {
|
||||||
|
final int index = Integer.valueOf(sa.getParam("ChosenMapIndex"));
|
||||||
|
if (index >= host.getChosenMap().get(controller).size()) continue;
|
||||||
|
tgtCards.add(host.getChosenMap().get(controller).get(index));
|
||||||
|
} else tgtCards = host.getChosenMap().get(controller);
|
||||||
} else {
|
} else {
|
||||||
tgtCards = getDefinedCardsOrTargeted(sa);
|
tgtCards = getDefinedCardsOrTargeted(sa);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ public class CountersPutAllEffect extends SpellAbilityEffect {
|
|||||||
final Card host = sa.getHostCard();
|
final Card host = sa.getHostCard();
|
||||||
final Player activator = sa.getActivatingPlayer();
|
final Player activator = sa.getActivatingPlayer();
|
||||||
final CounterType type = CounterType.getType(sa.getParam("CounterType"));
|
final CounterType type = CounterType.getType(sa.getParam("CounterType"));
|
||||||
final int counterAmount = AbilityUtils.calculateAmount(host, sa.getParamOrDefault("CounterNum", "1"), sa);
|
int counterAmount = AbilityUtils.calculateAmount(host, sa.getParamOrDefault("CounterNum", "1"), sa);
|
||||||
final String valid = sa.getParam("ValidCards");
|
final String valid = sa.getParam("ValidCards");
|
||||||
final ZoneType zone = sa.hasParam("ValidZone") ? ZoneType.smartValueOf(sa.getParam("ValidZone")) : ZoneType.Battlefield;
|
final ZoneType zone = sa.hasParam("ValidZone") ? ZoneType.smartValueOf(sa.getParam("ValidZone")) : ZoneType.Battlefield;
|
||||||
final Game game = activator.getGame();
|
final Game game = activator.getGame();
|
||||||
@@ -63,11 +63,13 @@ public class CountersPutAllEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Player placer = activator;
|
Player placer = activator;
|
||||||
boolean placerPerCard = false;
|
String placerPerCard = "";
|
||||||
if (sa.hasParam("Placer")) {
|
if (sa.hasParam("Placer")) {
|
||||||
final String pstr = sa.getParam("Placer");
|
final String pstr = sa.getParam("Placer");
|
||||||
if (pstr.contains("Controller")) {
|
if (pstr.equals("Controller")) {
|
||||||
placerPerCard = true;
|
placerPerCard = "Controller";
|
||||||
|
} else if (pstr.equals("Owner")) {
|
||||||
|
placerPerCard = "Owner";
|
||||||
} else {
|
} else {
|
||||||
placer = AbilityUtils.getDefinedPlayers(host, pstr, sa).get(0);
|
placer = AbilityUtils.getDefinedPlayers(host, pstr, sa).get(0);
|
||||||
}
|
}
|
||||||
@@ -75,8 +77,17 @@ public class CountersPutAllEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
GameEntityCounterTable table = new GameEntityCounterTable();
|
GameEntityCounterTable table = new GameEntityCounterTable();
|
||||||
for (final Card tgtCard : cards) {
|
for (final Card tgtCard : cards) {
|
||||||
if (placerPerCard) {
|
if (placerPerCard.equals("Controller")) {
|
||||||
placer = tgtCard.getController();
|
placer = tgtCard.getController();
|
||||||
|
} else if (placerPerCard.equals("Owner")) {
|
||||||
|
placer = tgtCard.getOwner();
|
||||||
|
}
|
||||||
|
if (sa.hasParam("AmountByChosenMap")) {
|
||||||
|
final String[] parse = sa.getParam("AmountByChosenMap").split(" INDEX ");
|
||||||
|
final int index = parse.length > 1 ? Integer.valueOf(parse[1]) : 0;
|
||||||
|
if (index >= host.getChosenMap().get(placer).size()) continue;
|
||||||
|
final Card chosen = host.getChosenMap().get(placer).get(index);
|
||||||
|
counterAmount = AbilityUtils.xCount(chosen, parse[0], sa);
|
||||||
}
|
}
|
||||||
tgtCard.addCounter(type, counterAmount, placer, table);
|
tgtCard.addCounter(type, counterAmount, placer, table);
|
||||||
}
|
}
|
||||||
@@ -97,7 +108,7 @@ public class CountersPutAllEffect extends SpellAbilityEffect {
|
|||||||
AbilityUtils.calculateAmount(host, sa.getParam("CounterNum2"), sa) : counterAmount;
|
AbilityUtils.calculateAmount(host, sa.getParam("CounterNum2"), sa) : counterAmount;
|
||||||
|
|
||||||
for (final Card tgtCard : cards) {
|
for (final Card tgtCard : cards) {
|
||||||
if (placerPerCard) {
|
if (placerPerCard.equals("Controller")) {
|
||||||
placer = tgtCard.getController();
|
placer = tgtCard.getController();
|
||||||
}
|
}
|
||||||
tgtCard.addCounter(type2, counterAmount2, placer, table);
|
tgtCard.addCounter(type2, counterAmount2, placer, table);
|
||||||
|
|||||||
@@ -113,6 +113,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|
|||||||
private Map<Long, CardCollection> mustBlockCards = Maps.newHashMap();
|
private Map<Long, CardCollection> mustBlockCards = Maps.newHashMap();
|
||||||
private List<Card> blockedThisTurn = Lists.newArrayList();
|
private List<Card> blockedThisTurn = Lists.newArrayList();
|
||||||
private List<Card> blockedByThisTurn = Lists.newArrayList();
|
private List<Card> blockedByThisTurn = Lists.newArrayList();
|
||||||
|
private Map<Player, CardCollection> chosenMap = Maps.newHashMap();
|
||||||
|
|
||||||
private CardCollection untilLeavesBattlefield = new CardCollection();
|
private CardCollection untilLeavesBattlefield = new CardCollection();
|
||||||
|
|
||||||
@@ -1162,6 +1163,13 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|
|||||||
imprintedCards = view.clearCards(imprintedCards, TrackableProperty.ImprintedCards);
|
imprintedCards = view.clearCards(imprintedCards, TrackableProperty.ImprintedCards);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final void addToChosenMap(final Player p, final CardCollection chosen) {
|
||||||
|
chosenMap.put(p, chosen);
|
||||||
|
}
|
||||||
|
public final Map<Player, CardCollection> getChosenMap() {
|
||||||
|
return chosenMap;
|
||||||
|
}
|
||||||
|
|
||||||
public final CardCollectionView getExiledCards() {
|
public final CardCollectionView getExiledCards() {
|
||||||
return CardCollection.getView(exiledCards);
|
return CardCollection.getView(exiledCards);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1076,24 +1076,6 @@ public class CardProperty {
|
|||||||
if (!card.wasMilled()) {
|
if (!card.wasMilled()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (property.startsWith("ControlledByPlayerInTheDirection")) {
|
|
||||||
final String restrictions = property.split("ControlledByPlayerInTheDirection_")[1];
|
|
||||||
final String[] res = restrictions.split("_");
|
|
||||||
final Direction direction = Direction.valueOf(res[0]);
|
|
||||||
Player p = null;
|
|
||||||
if (res.length > 1) {
|
|
||||||
for (Player pl : game.getPlayers()) {
|
|
||||||
if (pl.isValid(res[1], sourceController, source, spellAbility)) {
|
|
||||||
p = pl;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
p = sourceController;
|
|
||||||
}
|
|
||||||
if (p == null || !controller.equals(game.getNextPlayerAfter(p, direction))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else if (property.equals("hasABasicLandType")) {
|
} else if (property.equals("hasABasicLandType")) {
|
||||||
if (!card.hasABasicLandType()) {
|
if (!card.hasABasicLandType()) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -5,6 +5,6 @@ PT:3/3
|
|||||||
T:Mode$ RingTemptsYou | ValidCard$ Creature.YouCtrl+Other | TriggerZones$ Battlefield | Execute$ TrigPutCounters | TriggerDescription$ Whenever the Ring tempts you, if you chose a creature other than CARDNAME as your Ring-bearer, put your choice of a counter from among first strike, vigilance, deathtouch, and lifelink on NICKNAME.
|
T:Mode$ RingTemptsYou | ValidCard$ Creature.YouCtrl+Other | TriggerZones$ Battlefield | Execute$ TrigPutCounters | TriggerDescription$ Whenever the Ring tempts you, if you chose a creature other than CARDNAME as your Ring-bearer, put your choice of a counter from among first strike, vigilance, deathtouch, and lifelink on NICKNAME.
|
||||||
SVar:TrigPutCounters:DB$ PutCounter | CounterType$ First Strike,Vigilance,Deathtouch,Lifelink | Defined$ Self
|
SVar:TrigPutCounters:DB$ PutCounter | CounterType$ First Strike,Vigilance,Deathtouch,Lifelink | Defined$ Self
|
||||||
T:Mode$ CounterPlayerAddedAll | ValidObject$ Card.Self+inRealZoneBattlefield | TriggerZones$ Battlefield | ValidSource$ You | Execute$ TrigPutCountersOther | TriggerDescription$ Whenever you put one or more counters on NICKNAME, put one of each of those kinds of counters on up to one other target creature.
|
T:Mode$ CounterPlayerAddedAll | ValidObject$ Card.Self+inRealZoneBattlefield | TriggerZones$ Battlefield | ValidSource$ You | Execute$ TrigPutCountersOther | TriggerDescription$ Whenever you put one or more counters on NICKNAME, put one of each of those kinds of counters on up to one other target creature.
|
||||||
SVar:TrigPutCountersOther:DB$ PutCounter | Placer$ TriggeredSource | TriggeredCounterMap$ True | CounterMapValues$ 1 | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target other creature | ValidTgts$ Creature.Other
|
SVar:TrigPutCountersOther:DB$ PutCounter | Placer$ TriggeredSource | TriggeredCounterMap$ True | CounterMapValues$ 1 | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one other target creature | ValidTgts$ Creature.Other
|
||||||
DeckHas:Ability$Counters
|
DeckHas:Ability$Counters
|
||||||
Oracle:Whenever the Ring tempts you, if you chose a creature other than Aragorn, Company Leader as your Ring-bearer, put your choice of a counter from among first strike, vigilance, deathtouch, and lifelink on Aragorn.\nWhenever you put one or more counters on Aragorn, put one of each of those kinds of counters on up to one other target creature.
|
Oracle:Whenever the Ring tempts you, if you chose a creature other than Aragorn, Company Leader as your Ring-bearer, put your choice of a counter from among first strike, vigilance, deathtouch, and lifelink on Aragorn.\nWhenever you put one or more counters on Aragorn, put one of each of those kinds of counters on up to one other target creature.
|
||||||
|
|||||||
@@ -1,12 +1,8 @@
|
|||||||
Name:Cataclysm
|
Name:Cataclysm
|
||||||
ManaCost:2 W W
|
ManaCost:2 W W
|
||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ RepeatEach | Cost$ 2 W W | RepeatPlayers$ Player | RepeatSubAbility$ ChooseArtf | SubAbility$ SacAllOthers | SpellDescription$ Each player chooses from among the permanents they control an artifact, a creature, an enchantment, and a land, then sacrifices the rest.
|
A:SP$ ChooseCard | Defined$ Player | Choices$ Permanent | ChooseEach$ Artifact & Creature & Enchantment & Land | ControlledByPlayer$ Chooser | Mandatory$ True | Reveal$ True | SubAbility$ SacAllOthers | StackDescription$ SpellDescription | SpellDescription$ Each player chooses from among the permanents they control an artifact, a creature, an enchantment, and a land, then sacrifices the rest.
|
||||||
SVar:ChooseArtf:DB$ ChooseCard | Defined$ Remembered | Amount$ 1 | Choices$ Artifact.RememberedPlayerCtrl | ChoiceTitle$ Choose an artifact to keep | SubAbility$ ChooseCrtr | RememberChosen$ True | Mandatory$ True
|
SVar:SacAllOthers:DB$ SacrificeAll | ValidCards$ Permanent.nonChosenCard
|
||||||
SVar:ChooseCrtr:DB$ ChooseCard | Defined$ Remembered | Amount$ 1 | Choices$ Creature.RememberedPlayerCtrl | ChoiceTitle$ Choose a creature to keep | SubAbility$ ChooseEnch | RememberChosen$ True | Mandatory$ True
|
|
||||||
SVar:ChooseEnch:DB$ ChooseCard | Defined$ Remembered | Amount$ 1 | Choices$ Enchantment.RememberedPlayerCtrl | ChoiceTitle$ Choose an enchantment to keep | SubAbility$ ChooseLand | RememberChosen$ True | Mandatory$ True
|
|
||||||
SVar:ChooseLand:DB$ ChooseCard | Defined$ Remembered | Amount$ 1 | Choices$ Land.RememberedPlayerCtrl | ChoiceTitle$ Choose a land to keep | RememberChosen$ True | Mandatory$ True
|
|
||||||
SVar:SacAllOthers:DB$ SacrificeAll | ValidCards$ Permanent.IsNotRemembered | SubAbility$ DBCleanup
|
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
|
DeckHas:Ability$Sacrifice
|
||||||
Oracle:Each player chooses from among the permanents they control an artifact, a creature, an enchantment, and a land, then sacrifices the rest.
|
Oracle:Each player chooses from among the permanents they control an artifact, a creature, an enchantment, and a land, then sacrifices the rest.
|
||||||
|
|||||||
@@ -3,13 +3,10 @@ ManaCost:3 W W
|
|||||||
Types:Artifact Creature Construct
|
Types:Artifact Creature Construct
|
||||||
PT:4/5
|
PT:4/5
|
||||||
K:Vigilance
|
K:Vigilance
|
||||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigCataclysm | TriggerDescription$ When CARDNAME enters the battlefield, each player chooses an artifact, a creature, an enchantment, and a planeswalker from among the nonland permanents they control, then sacrifices the rest.
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChoose | TriggerDescription$ When CARDNAME enters the battlefield, each player chooses an artifact, a creature, an enchantment, and a planeswalker from among the nonland permanents they control, then sacrifices the rest.
|
||||||
SVar:TrigCataclysm:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ ChooseArtf | SubAbility$ SacAllOthers
|
SVar:TrigChoose:DB$ ChooseCard | Defined$ Player | Choices$ Permanent.nonLand | ChooseEach$ Artifact & Creature & Enchantment & Planeswalker | ControlledByPlayer$ Chooser | Reveal$ True | Mandatory$ True
|
||||||
SVar:ChooseArtf:DB$ ChooseCard | Defined$ Remembered | Amount$ 1 | Choices$ Artifact.nonLand+RememberedPlayerCtrl | ChoiceTitle$ Choose an artifact to keep | SubAbility$ ChooseCrtr | RememberChosen$ True | Mandatory$ True
|
SVar:SacAllOthers:DB$ SacrificeAll | ValidCards$ Permanent.nonLand+nonChosenCard | SubAbility$ DBCleanup
|
||||||
SVar:ChooseCrtr:DB$ ChooseCard | Defined$ Remembered | Amount$ 1 | Choices$ Creature.nonLand+RememberedPlayerCtrl | ChoiceTitle$ Choose a creature to keep | SubAbility$ ChooseEnch | RememberChosen$ True | Mandatory$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True
|
||||||
SVar:ChooseEnch:DB$ ChooseCard | Defined$ Remembered | Amount$ 1 | Choices$ Enchantment.nonLand+RememberedPlayerCtrl | ChoiceTitle$ Choose an enchantment to keep | SubAbility$ ChoosePW | RememberChosen$ True | Mandatory$ True
|
|
||||||
SVar:ChoosePW:DB$ ChooseCard | Defined$ Remembered | Amount$ 1 | Choices$ Planeswalker.nonLand+RememberedPlayerCtrl | ChoiceTitle$ Choose a Planeswalker to keep | RememberChosen$ True | Mandatory$ True
|
|
||||||
SVar:SacAllOthers:DB$ SacrificeAll | ValidCards$ Permanent.nonLand+IsNotRemembered | SubAbility$ DBCleanup
|
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
|
DeckHas:Ability$Sacrifice
|
||||||
Oracle:Vigilance\nWhen Cataclysmic Gearhulk enters the battlefield, each player chooses an artifact, a creature, an enchantment, and a planeswalker from among the nonland permanents they control, then sacrifices the rest.
|
Oracle:Vigilance\nWhen Cataclysmic Gearhulk enters the battlefield, each player chooses an artifact, a creature, an enchantment, and a planeswalker from among the nonland permanents they control, then sacrifices the rest.
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
Name:Coward
|
Name:Coward
|
||||||
ManaCost:1 R
|
ManaCost:1 R
|
||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ Pump | ValidTgts$ Creature | KW$ HIDDEN CARDNAME can't block. | IsCurse$ True | SubAbility$ DBAnimate | SpellDescription$ Target creature can't block this turn and becomes a Coward in addition to its other types until end of turn.
|
A:SP$ Animate | ValidTgts$ Creature | HiddenKeywords$ CARDNAME can't block. | Types$ Coward | IsCurse$ True | SubAbility$ DBTimeTravel | StackDescription$ REP Target creature_{c:Targeted} | SpellDescription$ Target creature can't block this turn and becomes a Coward in addition to its other types until end of turn.
|
||||||
SVar:DBAnimate:DB$ Animate | Defined$ Targeted | Types$ Coward | SubAbility$ DBTimeTravel
|
|
||||||
SVar:DBTimeTravel:DB$ TimeTravel | SpellDescription$ Time Travel.
|
SVar:DBTimeTravel:DB$ TimeTravel | SpellDescription$ Time Travel.
|
||||||
AlternateMode:Split
|
AlternateMode:Split
|
||||||
Oracle:Target creature can't block this turn and becomes a Coward in addition to its other types until end of turn.\nTime travel.
|
Oracle:Target creature can't block this turn and becomes a Coward in addition to its other types until end of turn.\nTime travel.
|
||||||
@@ -12,7 +11,7 @@ ALTERNATE
|
|||||||
Name:Killer
|
Name:Killer
|
||||||
ManaCost:2 R R
|
ManaCost:2 R R
|
||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ DealDamage | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 3 | DamageMap$ True | SubAbility$ DamageSame | SpellDescription$ CARDNAME deals 3 damage to target creature and each other creature that shares a creature type with it.
|
A:SP$ DealDamage | ValidTgts$ Creature | NumDmg$ 3 | DamageMap$ True | SubAbility$ DamageSame | StackDescription$ REP target creature_{c:Targeted} | SpellDescription$ CARDNAME deals 3 damage to target creature and each other creature that shares a creature type with it.
|
||||||
SVar:DamageSame:DB$ DamageAll | ValidCards$ Creature.NotDefinedTargeted+sharesCreatureTypeWith Targeted | ValidDescription$ each other creature that shares a creature type with it | NumDmg$ 3 | SubAbility$ DBDamageResolve
|
SVar:DamageSame:DB$ DamageAll | ValidCards$ Creature.NotDefinedTargeted+sharesCreatureTypeWith Targeted | NumDmg$ 3 | SubAbility$ DBDamageResolve | StackDescription$ None
|
||||||
SVar:DBDamageResolve:DB$ DamageResolve
|
SVar:DBDamageResolve:DB$ DamageResolve
|
||||||
Oracle:Killer deals 3 damage to target creature and each other creature that shares a creature type with it.
|
Oracle:Killer deals 3 damage to target creature and each other creature that shares a creature type with it.
|
||||||
|
|||||||
@@ -1,12 +1,9 @@
|
|||||||
Name:Grenzo's Rebuttal
|
Name:Grenzo's Rebuttal
|
||||||
ManaCost:4 R R
|
ManaCost:4 R R
|
||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ Token | Cost$ 4 R R | TokenAmount$ 1 | TokenScript$ r_4_4_ogre | TokenOwner$ You | SubAbility$ DBRepeat | SpellDescription$ Create a 4/4 red Ogre creature token. Starting with you, each player chooses an artifact, a creature, and a land from among the permanents controlled by the player to their left. Destroy each permanent chosen this way.
|
A:SP$ Token | TokenScript$ r_4_4_ogre | SubAbility$ DBChoose | SpellDescription$ Create a 4/4 red Ogre creature token.
|
||||||
SVar:DBRepeat:DB$ RepeatEach | RepeatPlayers$ Player | StartingWithActivator$ True | RepeatSubAbility$ DBChooseArtifact | SubAbility$ DBDestroy
|
SVar:DBChoose:DB$ ChooseCard | Defined$ Player | ChooseEach$ Artifact & Creature & Land | ControlledByPlayer$ Left | Mandatory$ True | SubAbility$ DBDestroy | StackDescription$ REP you_{p:You} | SpellDescription$ Starting with you, each player chooses an artifact, a creature, and a land from among the permanents controlled by the player to their left.
|
||||||
SVar:DBChooseArtifact:DB$ ChooseCard | Defined$ Remembered | Choices$ Artifact.ControlledByPlayerInTheDirection_Left_Player.IsRemembered | Mandatory$ True | ChoiceTitle$ Choose a artifact | SubAbility$ DBChooseCreature | RememberChosen$ True
|
SVar:DBDestroy:DB$ Destroy | Defined$ ChosenCard | SubAbility$ DBCleanup | StackDescription$ SpellDescription | SpellDescription$ Destroy each permanent chosen this way.
|
||||||
SVar:DBChooseCreature:DB$ ChooseCard | Defined$ Remembered | Choices$ Creature.ControlledByPlayerInTheDirection_Left_Player.IsRemembered | ChoiceTitle$ Choose a creature | Mandatory$ True | SubAbility$ DBChooseLand | RememberChosen$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True
|
||||||
SVar:DBChooseLand:DB$ ChooseCard | Defined$ Remembered | Choices$ Land.ControlledByPlayerInTheDirection_Left_Player.IsRemembered | ChoiceTitle$ Choose a land | Mandatory$ True | RememberChosen$ True
|
DeckHas:Ability$Token & Type$Ogre
|
||||||
SVar:DBDestroy:DB$ Destroy | Defined$ Remembered | SubAbility$ DBCleanup
|
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
|
||||||
AI:RemoveDeck:All
|
|
||||||
Oracle:Create a 4/4 red Ogre creature token. Starting with you, each player chooses an artifact, a creature, and a land from among the permanents controlled by the player to their left. Destroy each permanent chosen this way.
|
Oracle:Create a 4/4 red Ogre creature token. Starting with you, each player chooses an artifact, a creature, and a land from among the permanents controlled by the player to their left. Destroy each permanent chosen this way.
|
||||||
|
|||||||
@@ -5,6 +5,6 @@ T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ TrigDig | TriggerDescri
|
|||||||
SVar:TrigDig:DB$ DigUntil | Amount$ 5 | Valid$ Plane | DigZone$ PlanarDeck | ImprintFound$ True | RememberRevealed$ True | FoundDestination$ PlanarDeck | RevealedDestination$ PlanarDeck | SubAbility$ DBPutOnTop
|
SVar:TrigDig:DB$ DigUntil | Amount$ 5 | Valid$ Plane | DigZone$ PlanarDeck | ImprintFound$ True | RememberRevealed$ True | FoundDestination$ PlanarDeck | RevealedDestination$ PlanarDeck | SubAbility$ DBPutOnTop
|
||||||
SVar:DBPutOnTop:DB$ ChangeZone | ChangeType$ Card.IsImprinted | Origin$ PlanarDeck | Destination$ PlanarDeck | LibraryPosition$ 0 | ForgetChanged$ True | SubAbility$ DBRestOnBottom
|
SVar:DBPutOnTop:DB$ ChangeZone | ChangeType$ Card.IsImprinted | Origin$ PlanarDeck | Destination$ PlanarDeck | LibraryPosition$ 0 | ForgetChanged$ True | SubAbility$ DBRestOnBottom
|
||||||
SVar:DBRestOnBottom:DB$ ChangeZone | Defined$ Remembered | Origin$ PlanarDeck | Destination$ PlanarDeck | LibraryPosition$ -1 | RandomOrder$ True | SubAbility$ Replaneswalk
|
SVar:DBRestOnBottom:DB$ ChangeZone | Defined$ Remembered | Origin$ PlanarDeck | Destination$ PlanarDeck | LibraryPosition$ -1 | RandomOrder$ True | SubAbility$ Replaneswalk
|
||||||
SVar:Replaneswalk:DB$ Planeswalk | Cost$ 0 | SubAbility$ DBCleanup
|
SVar:Replaneswalk:DB$ Planeswalk | SubAbility$ DBCleanup
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True
|
||||||
Oracle:When you encounter Interplanar Tunnel, reveal cards from the top of your planar deck until you reveal five plane cards. Put a plane card from among them on top of your planar deck, then put the rest of the revealed cards on the bottom in a random order. (Then planeswalk away from this phenomenon.)
|
Oracle:When you encounter Interplanar Tunnel, reveal cards from the top of your planar deck until you reveal five plane cards. Put a plane card from among them on top of your planar deck, then put the rest of the revealed cards on the bottom in a random order. (Then planeswalk away from this phenomenon.)
|
||||||
|
|||||||
@@ -11,5 +11,5 @@ SVar:ChangePermanent:DB$ ChangeZoneAll | ChangeType$ Artifact.IsRemembered,Creat
|
|||||||
SVar:ChangeEnchantment:DB$ ChangeZoneAll | ChangeType$ Enchantment.IsRemembered | Origin$ Library | Destination$ Battlefield | ForgetChanged$ True | SubAbility$ GotoBottom
|
SVar:ChangeEnchantment:DB$ ChangeZoneAll | ChangeType$ Enchantment.IsRemembered | Origin$ Library | Destination$ Battlefield | ForgetChanged$ True | SubAbility$ GotoBottom
|
||||||
SVar:GotoBottom:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Library | Destination$ Library | LibraryPosition$ -1 | SubAbility$ DBCleanup
|
SVar:GotoBottom:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Library | Destination$ Library | LibraryPosition$ -1 | SubAbility$ DBCleanup
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | SubAbility$ PWAway
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | SubAbility$ PWAway
|
||||||
SVar:PWAway:DB$ Planeswalk | Cost$ 0
|
SVar:PWAway:DB$ Planeswalk
|
||||||
Oracle:When you encounter Morphic Tide, each player shuffles all permanents they own into their library, then reveals that many cards from the top of their library. Each player puts all artifact, creature, land, and planeswalker cards revealed this way onto the battlefield, then does the same for enchantment cards, then puts all cards revealed this way that weren't put onto the battlefield on the bottom of their library in any order. (Then planeswalk away from this phenomenon.)
|
Oracle:When you encounter Morphic Tide, each player shuffles all permanents they own into their library, then reveals that many cards from the top of their library. Each player puts all artifact, creature, land, and planeswalker cards revealed this way onto the battlefield, then does the same for enchantment cards, then puts all cards revealed this way that weren't put onto the battlefield on the bottom of their library in any order. (Then planeswalk away from this phenomenon.)
|
||||||
|
|||||||
@@ -3,5 +3,5 @@ ManaCost:no cost
|
|||||||
Types:Phenomenon
|
Types:Phenomenon
|
||||||
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ Epiphany | TriggerDescription$ When you encounter CARDNAME, each player draws four cards. (Then planeswalk away from this phenomenon)
|
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ Epiphany | TriggerDescription$ When you encounter CARDNAME, each player draws four cards. (Then planeswalk away from this phenomenon)
|
||||||
SVar:Epiphany:DB$ Draw | Defined$ Player | NumCards$ 4 | SubAbility$ PWAway | SpellDescription$ Each player draws four cards.
|
SVar:Epiphany:DB$ Draw | Defined$ Player | NumCards$ 4 | SubAbility$ PWAway | SpellDescription$ Each player draws four cards.
|
||||||
SVar:PWAway:DB$ Planeswalk | Cost$ 0
|
SVar:PWAway:DB$ Planeswalk
|
||||||
Oracle:When you encounter Mutual Epiphany, each player draws four cards. (Then planeswalk away from this phenomenon.)
|
Oracle:When you encounter Mutual Epiphany, each player draws four cards. (Then planeswalk away from this phenomenon.)
|
||||||
|
|||||||
@@ -1,17 +1,11 @@
|
|||||||
Name:Mythos of Snapdax
|
Name:Mythos of Snapdax
|
||||||
ManaCost:2 W W
|
ManaCost:2 W W
|
||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ RepeatEach | Cost$ 2 W W | ConditionManaSpent$ B R | RepeatPlayers$ Player | RepeatSubAbility$ ChooseArtfYou | SubAbility$ AllChoose | SpellDescription$ Each player chooses an artifact, a creature, an enchantment, and a planeswalker from among the nonland permanents they control, then sacrifices the rest. If {B}{R} was spent to cast this spell, you choose the permanents for each player instead.
|
A:SP$ RepeatEach | ConditionManaSpent$ B R | RepeatPlayers$ Player | RepeatSubAbility$ YouChoose | SubAbility$ AllChoose | SpellDescription$ Each player chooses an artifact, a creature, an enchantment, and a planeswalker from among the nonland permanents they control, then sacrifices the rest. If {B}{R} was spent to cast this spell, you choose the permanents for each player instead.
|
||||||
SVar:ChooseArtfYou:DB$ ChooseCard | Defined$ You | Amount$ 1 | Choices$ Artifact.nonLand+RememberedPlayerCtrl | ChoiceTitle$ Choose an artifact to keep | SubAbility$ ChooseCrtrYou | RememberChosen$ True | Mandatory$ True
|
SVar:YouChoose:DB$ ChooseCard | Defined$ You | Choices$ Permanent.nonLand | ChooseEach$ Artifact & Creature & Enchantment & Planeswalker | ControlledByPlayer$ Remembered | Reveal$ True | RememberChosen$ True | Mandatory$ True
|
||||||
SVar:ChooseCrtrYou:DB$ ChooseCard | Defined$ You | Amount$ 1 | Choices$ Creature.nonLand+RememberedPlayerCtrl | ChoiceTitle$ Choose a creature to keep | SubAbility$ ChooseEnchYou | RememberChosen$ True | Mandatory$ True
|
SVar:AllChoose:DB$ ChooseCard | ConditionManaNotSpent$ B R | Defined$ Player | Choices$ Permanent.nonLand | ChooseEach$ Artifact & Creature & Enchantment & Planeswalker | ControlledByPlayer$ Chooser | Reveal$ True | Mandatory$ True | RememberChosen$ True | SubAbility$ SacAllOthers
|
||||||
SVar:ChooseEnchYou:DB$ ChooseCard | Defined$ You | Amount$ 1 | Choices$ Enchantment.nonLand+RememberedPlayerCtrl | ChoiceTitle$ Choose an enchantment to keep | SubAbility$ ChooseWalkYou | RememberChosen$ True | Mandatory$ True
|
|
||||||
SVar:ChooseWalkYou:DB$ ChooseCard | Defined$ You | Amount$ 1 | Choices$ Planeswalker.RememberedPlayerCtrl | ChoiceTitle$ Choose a planeswalker to keep | RememberChosen$ True | Mandatory$ True
|
|
||||||
SVar:AllChoose:DB$ RepeatEach | ConditionManaNotSpent$ B R | RepeatPlayers$ Player | RepeatSubAbility$ ChooseArtf | SubAbility$ SacAllOthers
|
|
||||||
SVar:ChooseArtf:DB$ ChooseCard | Defined$ Remembered | Amount$ 1 | Choices$ Artifact.nonLand+RememberedPlayerCtrl | ChoiceTitle$ Choose an artifact to keep | SubAbility$ ChooseCrtr | RememberChosen$ True | Mandatory$ True
|
|
||||||
SVar:ChooseCrtr:DB$ ChooseCard | Defined$ Remembered | Amount$ 1 | Choices$ Creature.nonLand+RememberedPlayerCtrl | ChoiceTitle$ Choose a creature to keep | SubAbility$ ChooseEnch | RememberChosen$ True | Mandatory$ True
|
|
||||||
SVar:ChooseEnch:DB$ ChooseCard | Defined$ Remembered | Amount$ 1 | Choices$ Enchantment.nonLand+RememberedPlayerCtrl | ChoiceTitle$ Choose an enchantment to keep | SubAbility$ ChooseWalk | RememberChosen$ True | Mandatory$ True
|
|
||||||
SVar:ChooseWalk:DB$ ChooseCard | Defined$ Remembered | Amount$ 1 | Choices$ Planeswalker.RememberedPlayerCtrl | ChoiceTitle$ Choose a planeswalker to keep | RememberChosen$ True | Mandatory$ True
|
|
||||||
SVar:SacAllOthers:DB$ SacrificeAll | ValidCards$ Permanent.nonLand+IsNotRemembered | SubAbility$ DBCleanup | StackDescription$ None
|
SVar:SacAllOthers:DB$ SacrificeAll | ValidCards$ Permanent.nonLand+IsNotRemembered | SubAbility$ DBCleanup | StackDescription$ None
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
|
DeckHas:Ability$Sacrifice
|
||||||
Oracle:Each player chooses an artifact, a creature, an enchantment, and a planeswalker from among the nonland permanents they control, then sacrifices the rest. If {B}{R} was spent to cast this spell, you choose the permanents for each player instead.
|
Oracle:Each player chooses an artifact, a creature, an enchantment, and a planeswalker from among the nonland permanents they control, then sacrifices the rest. If {B}{R} was spent to cast this spell, you choose the permanents for each player instead.
|
||||||
|
|||||||
@@ -3,5 +3,5 @@ ManaCost:no cost
|
|||||||
Types:Phenomenon
|
Types:Phenomenon
|
||||||
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ Disaster | TriggerDescription$ When you encounter CARDNAME, destroy all creatures. (Then planeswalk away from this phenomenon)
|
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ Disaster | TriggerDescription$ When you encounter CARDNAME, destroy all creatures. (Then planeswalk away from this phenomenon)
|
||||||
SVar:Disaster:DB$ DestroyAll | ValidCards$ Creature | SubAbility$ PWAway
|
SVar:Disaster:DB$ DestroyAll | ValidCards$ Creature | SubAbility$ PWAway
|
||||||
SVar:PWAway:DB$ Planeswalk | Cost$ 0
|
SVar:PWAway:DB$ Planeswalk
|
||||||
Oracle:When you encounter Planewide Disaster, destroy all creatures. (Then planeswalk away from this phenomenon.)
|
Oracle:When you encounter Planewide Disaster, destroy all creatures. (Then planeswalk away from this phenomenon.)
|
||||||
|
|||||||
@@ -4,5 +4,5 @@ Types:Phenomenon
|
|||||||
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ TrigPutFromHand | TriggerDescription$ When you encounter CARDNAME, starting with you, each player may put a permanent card from their hand onto the battlefield. (Then planeswalk away from this phenomenon.)
|
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ TrigPutFromHand | TriggerDescription$ When you encounter CARDNAME, starting with you, each player may put a permanent card from their hand onto the battlefield. (Then planeswalk away from this phenomenon.)
|
||||||
SVar:TrigPutFromHand:DB$ RepeatEach | StartingWithActivator$ True | RepeatPlayers$ Player | RepeatSubAbility$ DBChangeZone | SubAbility$ PWAway
|
SVar:TrigPutFromHand:DB$ RepeatEach | StartingWithActivator$ True | RepeatPlayers$ Player | RepeatSubAbility$ DBChangeZone | SubAbility$ PWAway
|
||||||
SVar:DBChangeZone:DB$ ChangeZone | DefinedPlayer$ Player.IsRemembered | Choser$ Player.IsRemembered | ChangeType$ Permanent | ChangeNum$ 1 | Origin$ Hand | Destination$ Battlefield
|
SVar:DBChangeZone:DB$ ChangeZone | DefinedPlayer$ Player.IsRemembered | Choser$ Player.IsRemembered | ChangeType$ Permanent | ChangeNum$ 1 | Origin$ Hand | Destination$ Battlefield
|
||||||
SVar:PWAway:DB$ Planeswalk | Cost$ 0
|
SVar:PWAway:DB$ Planeswalk
|
||||||
Oracle:When you encounter Reality Shaping, starting with you, each player may put a permanent card from their hand onto the battlefield. (Then planeswalk away from this phenomenon.)
|
Oracle:When you encounter Reality Shaping, starting with you, each player may put a permanent card from their hand onto the battlefield. (Then planeswalk away from this phenomenon.)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ ManaCost:3 W W
|
|||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ ChooseCard | Choices$ Creature.YouCtrl | ChoiceDesc$ creature they control | Mandatory$ True | ChoiceTitle$ Choose a creature you control | RememberChosen$ True | ImprintChosen$ True | SubAbility$ DBRepeatEach | SpellDescription$ Choose a creature you control, then each opponent chooses a creature they control with equal or lesser power.
|
A:SP$ ChooseCard | Choices$ Creature.YouCtrl | ChoiceDesc$ creature they control | Mandatory$ True | ChoiceTitle$ Choose a creature you control | RememberChosen$ True | ImprintChosen$ True | SubAbility$ DBRepeatEach | SpellDescription$ Choose a creature you control, then each opponent chooses a creature they control with equal or lesser power.
|
||||||
SVar:DBRepeatEach:DB$ RepeatEach | RepeatPlayers$ Opponent | RepeatSubAbility$ DBChooseCard | SubAbility$ DBChangeZoneAll | StackDescription$ Then each opponent chooses a creature they control with equal or lesser power.
|
SVar:DBRepeatEach:DB$ RepeatEach | RepeatPlayers$ Opponent | RepeatSubAbility$ DBChooseCard | SubAbility$ DBChangeZoneAll | StackDescription$ Then each opponent chooses a creature they control with equal or lesser power.
|
||||||
SVar:DBChooseCard:DB$ ChooseCard | Defined$ Remembered | Choices$ Creature.RememberedPlayerCtrl+powerLEX | Mandatory$ True | AILogic$ BestCard | ChoiceTitle$ Choose a creature you control with equal or lesser power | RememberChosen$ True
|
SVar:DBChooseCard:DB$ ChooseCard | Defined$ Remembered | Choices$ Creature.RememberedPlayerCtrl+powerLEX | Mandatory$ True | ChoiceTitle$ Choose a creature you control with equal or lesser power | RememberChosen$ True
|
||||||
SVar:X:Imprinted$CardPower
|
SVar:X:Imprinted$CardPower
|
||||||
SVar:DBChangeZoneAll:DB$ ChangeZoneAll | ConditionDefined$ Imprinted | ConditionPresent$ Creature | Origin$ Battlefield | Destination$ Exile | ChangeType$ Creature.IsNotRemembered | SubAbility$ DBCleanup | SpellDescription$ If you chose a creature this way, exile each creature not chosen by any player this way.
|
SVar:DBChangeZoneAll:DB$ ChangeZoneAll | ConditionDefined$ Imprinted | ConditionPresent$ Creature | Origin$ Battlefield | Destination$ Exile | ChangeType$ Creature.IsNotRemembered | SubAbility$ DBCleanup | SpellDescription$ If you chose a creature this way, exile each creature not chosen by any player this way.
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True | ClearChosenCard$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True | ClearChosenCard$ True
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
Name:Stick Together
|
Name:Stick Together
|
||||||
ManaCost:3 W W
|
ManaCost:3 W W
|
||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ ChooseCard | Defined$ Player | ChooseParty$ True | SubAbility$ SacAllOthers | StackDescription$ SpellDescription | SpellDescription$ Each player chooses a party from among creatures they control,
|
A:SP$ ChooseCard | Defined$ Player | ChooseEach$ Party | SubAbility$ SacAllOthers | StackDescription$ SpellDescription | SpellDescription$ Each player chooses a party from among creatures they control,
|
||||||
SVar:SacAllOthers:DB$ SacrificeAll | ValidCards$ Creature.nonChosenCard | StackDescription$ then sacrifices the rest. | SpellDescription$ then sacrifices the rest. (To choose a party, choose up to one each of Cleric, Rogue, Warrior, and Wizard.)
|
SVar:SacAllOthers:DB$ SacrificeAll | ValidCards$ Creature.nonChosenCard | StackDescription$ then sacrifices the rest. | SpellDescription$ then sacrifices the rest. (To choose a party, choose up to one each of Cleric, Rogue, Warrior, and Wizard.)
|
||||||
|
DeckHas:Ability$Sacrifice
|
||||||
DeckHints:Ability$Party
|
DeckHints:Ability$Party
|
||||||
DeckNeeds:Type$Cleric|Rogue|Warrior|Wizard
|
DeckNeeds:Type$Cleric|Rogue|Warrior|Wizard
|
||||||
AI:RemoveDeck:Random
|
AI:RemoveDeck:Random
|
||||||
|
|||||||
@@ -3,5 +3,5 @@ ManaCost:no cost
|
|||||||
Types:Phenomenon
|
Types:Phenomenon
|
||||||
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ TrigReverse | TriggerDescription$ When you encounter CARDNAME, reverse the game's turn order. (For example, if play had proceeded clockwise around the table, it now goes counterclockwise. Then planeswalk away from this phenomenon.)
|
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ TrigReverse | TriggerDescription$ When you encounter CARDNAME, reverse the game's turn order. (For example, if play had proceeded clockwise around the table, it now goes counterclockwise. Then planeswalk away from this phenomenon.)
|
||||||
SVar:TrigReverse:DB$ ReverseTurnOrder | SubAbility$ PWAway
|
SVar:TrigReverse:DB$ ReverseTurnOrder | SubAbility$ PWAway
|
||||||
SVar:PWAway:DB$ Planeswalk | Cost$ 0
|
SVar:PWAway:DB$ Planeswalk
|
||||||
Oracle:When you encounter Time Distortion, reverse the game's turn order. (For example, if play had proceeded clockwise around the table, it now goes counterclockwise. Then planeswalk away from this phenomenon.)
|
Oracle:When you encounter Time Distortion, reverse the game's turn order. (For example, if play had proceeded clockwise around the table, it now goes counterclockwise. Then planeswalk away from this phenomenon.)
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
Name:Caught in a Parallel Universe
|
||||||
|
ManaCost:no cost
|
||||||
|
Types:Phenomenon
|
||||||
|
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ TrigChooseCard | TriggerDescription$ When you encounter CARDNAME, each player chooses a creature controlled by the player to their left. Each player creates a token that's a copy of the creature they chose, except it has menace. (Then planeswalk away from this phenomenon.)
|
||||||
|
SVar:TrigChooseCard:DB$ ChooseCard | Defined$ Player | Choices$ Creature | ControlledByPlayer$ Left | ChoiceTitle$ Choose a creature controlled by the player to your left | Reveal$ True | Mandatory$ True | ChosenMap$ True | SubAbility$ DBClone
|
||||||
|
SVar:DBClone:DB$ CopyPermanent | Defined$ ChosenMap | AddKeywords$ Menace | SubAbility$ DBPlaneswalk
|
||||||
|
SVar:DBPlaneswalk:DB$ Planeswalk
|
||||||
|
DeckHas:Ability$Token
|
||||||
|
Oracle:When you encounter Caught in a Parallel Universe, each player chooses a creature controlled by the player to their left. Each player creates a token that's a copy of the creature they chose, except it has menace. (Then planeswalk away from this phenomenon.)
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
Name:Human-Time Lord Meta-Crisis
|
||||||
|
ManaCost:no cost
|
||||||
|
Types:Phenomenon
|
||||||
|
T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ TrigChooseCard | TriggerDescription$ When you encounter CARDNAME, each player chooses one or two creatures they control. Each player creates a token that's a copy of the first creature they chose, except it isn't legendary. Then each player who chose a second creature puts a number of +1/+1 counters on the token they created equal to the power of the second creature they chose. (Then planeswalk away from this phenomenon.)
|
||||||
|
SVar:TrigChooseCard:DB$ ChooseCard | Defined$ Player | Choices$ Creature | ControlledByPlayer$ Chooser | ChoiceTitle$ Choose one or two creatures you control | Reveal$ True | MinAmount$ 1 | Amount$ 2 | Mandatory$ True | ChosenMap$ True | SubAbility$ DBClone
|
||||||
|
SVar:DBClone:DB$ CopyPermanent | Defined$ ChosenMap | ChosenMapIndex$ 0 | NonLegendary$ True | RememberTokens$ True | SubAbility$ DBPutCountersAll
|
||||||
|
SVar:DBPutCountersAll:DB$ PutCounterAll | Placer$ Owner | ValidCards$ Card.IsRemembered | CounterType$ P1P1 | AmountByChosenMap$ Count$CardPower INDEX 1 | SubAbility$ DBPlaneswalk
|
||||||
|
SVar:DBPlaneswalk:DB$ Planeswalk | SubAbility$ DBCleanup
|
||||||
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
|
DeckHas:Ability$Token|Counters
|
||||||
|
DeckHints:Type$Legendary
|
||||||
|
Oracle:When you encounter Human-Time Lord Meta-Crisis, each player chooses one or two creatures they control. Each player creates a token that's a copy of the first creature they chose, except it isn't legendary. Then each player who chose a second creature puts a number of +1/+1 counters on the token they created equal to the power of the second creature they chose. (Then planeswalk away from this phenomenon.)
|
||||||
@@ -504,8 +504,7 @@ public final class CardScriptParser {
|
|||||||
"sharesCreatureTypeWith", "sharesCardTypeWith", "sharesLandTypeWith",
|
"sharesCreatureTypeWith", "sharesCardTypeWith", "sharesLandTypeWith",
|
||||||
"sharesNameWith", "doesNotShareNameWith",
|
"sharesNameWith", "doesNotShareNameWith",
|
||||||
"sharesControllerWith", "sharesOwnerWith",
|
"sharesControllerWith", "sharesOwnerWith",
|
||||||
"ThisTurnEntered", "ControlledByPlayerInTheDirection",
|
"ThisTurnEntered", "sharesTypeWith", "hasKeyword", "with",
|
||||||
"sharesTypeWith", "hasKeyword", "with",
|
|
||||||
"greatestPowerControlledBy", "greatestCMCControlledBy",
|
"greatestPowerControlledBy", "greatestCMCControlledBy",
|
||||||
"power", "toughness", "cmc", "totalPT", "counters", "non",
|
"power", "toughness", "cmc", "totalPT", "counters", "non",
|
||||||
"RememberMap", "wasCastFrom", "wasNotCastFrom", "set",
|
"RememberMap", "wasCastFrom", "wasNotCastFrom", "set",
|
||||||
|
|||||||
Reference in New Issue
Block a user