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:
Northmoc
2024-03-06 02:02:22 -05:00
committed by GitHub
parent 3b90a746d3
commit 8c7283d02c
22 changed files with 130 additions and 98 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.)

View File

@@ -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.)

View File

@@ -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.)

View File

@@ -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.

View File

@@ -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.)

View File

@@ -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.)

View File

@@ -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

View File

@@ -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

View File

@@ -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.)

View File

@@ -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.)

View File

@@ -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.)

View File

@@ -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",