mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
Merge branch 'master' into code-cleanup
# Conflicts: # forge-game/src/main/java/forge/game/ability/effects/ManifestBaseEffect.java
This commit is contained in:
@@ -1398,7 +1398,7 @@ public abstract class GameState {
|
||||
c.setTurnInZone(turn);
|
||||
} else if (info.equals("IsToken")) {
|
||||
c.setGamePieceType(GamePieceType.TOKEN);
|
||||
} else if (info.equals("ClassLevel:")) {
|
||||
} else if (info.startsWith("ClassLevel:")) {
|
||||
c.setClassLevel(Integer.parseInt(info.substring(info.indexOf(':') + 1)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,6 +114,7 @@ public enum SpellApiToAi {
|
||||
.put(ApiType.Mana, ManaAi.class)
|
||||
.put(ApiType.ManaReflected, CannotPlayAi.class)
|
||||
.put(ApiType.Manifest, ManifestAi.class)
|
||||
.put(ApiType.ManifestDread, ManifestAi.class)
|
||||
.put(ApiType.Meld, MeldAi.class)
|
||||
.put(ApiType.Mill, MillAi.class)
|
||||
.put(ApiType.MoveCounter, CountersMoveAi.class)
|
||||
|
||||
@@ -148,12 +148,6 @@ public class DamageDealAi extends DamageAiBase {
|
||||
String logic = sa.getParamOrDefault("AILogic", "");
|
||||
if ("DiscardLands".equals(logic)) {
|
||||
dmg = 2;
|
||||
} else if ("OpponentHasCreatures".equals(logic)) {
|
||||
for (Player opp : ai.getOpponents()) {
|
||||
if (!opp.getCreaturesInPlay().isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else if (logic.startsWith("ProcRaid.")) {
|
||||
if (ai.getGame().getPhaseHandler().isPlayerTurn(ai) && ai.getGame().getPhaseHandler().getPhase().isBefore(PhaseType.COMBAT_DECLARE_BLOCKERS)) {
|
||||
for (Card potentialAtkr : ai.getCreaturesInPlay()) {
|
||||
|
||||
@@ -44,20 +44,6 @@ public class RepeatEachAi extends SpellAbilityAi {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else if ("OpponentHasCreatures".equals(logic)) { //TODO convert this to NeedsToPlayVar
|
||||
for (Player opp : aiPlayer.getOpponents()) {
|
||||
if (!opp.getCreaturesInPlay().isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
} else if ("OpponentHasMultipleCreatures".equals(logic)) {
|
||||
for (Player opp : aiPlayer.getOpponents()) {
|
||||
if (opp.getCreaturesInPlay().size() > 1) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
} else if ("AllPlayerLoseLife".equals(logic)) {
|
||||
final Card source = sa.getHostCard();
|
||||
SpellAbility repeat = sa.getAdditionalAbility("RepeatSubAbility");
|
||||
|
||||
@@ -137,6 +137,7 @@ public enum AbilityKey {
|
||||
Targets("Targets"),
|
||||
Token("Token"),
|
||||
TokenNum("TokenNum"),
|
||||
Valiant("Valiant"),
|
||||
Vehicle("Vehicle"),
|
||||
Won("Won"),
|
||||
|
||||
|
||||
@@ -116,6 +116,7 @@ public enum ApiType {
|
||||
Mana (ManaEffect.class),
|
||||
ManaReflected (ManaReflectedEffect.class),
|
||||
Manifest (ManifestEffect.class),
|
||||
ManifestDread (ManifestDreadEffect.class),
|
||||
Meld (MeldEffect.class),
|
||||
Mill (MillEffect.class),
|
||||
MoveCounter (CountersMoveEffect.class),
|
||||
|
||||
@@ -61,7 +61,7 @@ public abstract class SpellAbilityEffect {
|
||||
// prelude for when this is root ability
|
||||
if (!(sa instanceof AbilitySub)) {
|
||||
sb.append(sa.getHostCard()).append(" -");
|
||||
if (sa.getHostCard().hasPromisedGift()) {
|
||||
if (sa.getHostCard().hasPromisedGift() && sa.hasAdditionalAbility("GiftAbility")) {
|
||||
sb.append(" Gift ").
|
||||
append(sa.getAdditionalAbility("GiftAbility").getParam("GiftDescription")).
|
||||
append(" to ").append(sa.getHostCard().getPromisedGift()).append(". ");
|
||||
|
||||
@@ -253,6 +253,10 @@ public class CopyPermanentEffect extends TokenEffectBase {
|
||||
|
||||
if (sa.hasParam("ForEach")) {
|
||||
for (Player p : AbilityUtils.getDefinedPlayers(host, sa.getParam("ForEach"), sa)) {
|
||||
if (sa.hasParam("OptionalForEach") && !activator.getController().confirmAction(sa, null,
|
||||
Localizer.getInstance().getMessage("lblCopyPermanentConfirm") + " (" + p + ")", null)) {
|
||||
continue;
|
||||
}
|
||||
Card proto = getProtoType(sa, c, controller);
|
||||
proto.addRemembered(p);
|
||||
tokenTable.put(controller, proto, numCopies);
|
||||
|
||||
@@ -40,7 +40,7 @@ public class DigEffect extends SpellAbilityEffect {
|
||||
|
||||
String verb = " looks at ";
|
||||
if (sa.hasParam("DestinationZone") && sa.getParam("DestinationZone").equals("Exile") &&
|
||||
numToDig == numToChange) {
|
||||
numToDig == numToChange) {
|
||||
verb = " exiles ";
|
||||
} else if (sa.hasParam("Reveal") && sa.getParam("Reveal").equals("True")) {
|
||||
verb = " reveals ";
|
||||
@@ -79,7 +79,7 @@ public class DigEffect extends SpellAbilityEffect {
|
||||
sb.append(" They ").append(sa.hasParam("Optional") ? "may " : "").append(verb2);
|
||||
if (sa.hasParam("ChangeValid")) {
|
||||
String what = sa.hasParam("ChangeValidDesc") ? sa.getParam("ChangeValidDesc") :
|
||||
sa.getParam("ChangeValid");
|
||||
sa.getParam("ChangeValid");
|
||||
if (!StringUtils.containsIgnoreCase(what, "card")) {
|
||||
what = what + " card";
|
||||
}
|
||||
@@ -90,7 +90,7 @@ public class DigEffect extends SpellAbilityEffect {
|
||||
sb.append(sa.hasParam("ExileFaceDown") ? "face down " : "");
|
||||
if (sa.hasParam("WithCounters") || sa.hasParam("ExileWithCounters")) {
|
||||
String ctr = sa.hasParam("WithCounters") ? sa.getParam("WithCounters") :
|
||||
sa.getParam("ExileWithCounters");
|
||||
sa.getParam("ExileWithCounters");
|
||||
sb.append("with a ");
|
||||
sb.append(CounterType.getType(ctr).getName().toLowerCase());
|
||||
sb.append(" counter on it. They ");
|
||||
@@ -125,7 +125,6 @@ public class DigEffect extends SpellAbilityEffect {
|
||||
final boolean anyNumber = sa.hasParam("AnyNumber");
|
||||
|
||||
final boolean optional = sa.hasParam("Optional");
|
||||
final boolean noMove = sa.hasParam("NoMove");
|
||||
final boolean skipReorder = sa.hasParam("SkipReorder");
|
||||
|
||||
// A hack for cards like Explorer's Scope that need to ensure that a card is revealed to the player activating the ability
|
||||
@@ -188,37 +187,20 @@ public class DigEffect extends SpellAbilityEffect {
|
||||
DelayedReveal delayedReveal = null;
|
||||
boolean hasRevealed = true;
|
||||
if (sa.hasParam("Reveal") && "True".equalsIgnoreCase(sa.getParam("Reveal"))) {
|
||||
game.getAction().reveal(top, p, false);
|
||||
game.getAction().reveal(top, p, false);
|
||||
}
|
||||
else if (sa.hasParam("RevealOptional")) {
|
||||
String question = TextUtil.concatWithSpace(Localizer.getInstance().getMessage("lblReveal") + ":", TextUtil.addSuffix(Lang.joinHomogenous(top),"?"));
|
||||
|
||||
hasRevealed = p.getController().confirmAction(sa, null, question, null);
|
||||
hasRevealed = p.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblRevealCardToOtherPlayers"), null);
|
||||
if (hasRevealed) {
|
||||
game.getAction().reveal(top, p);
|
||||
}
|
||||
}
|
||||
else if (sa.hasParam("RevealValid")) {
|
||||
final String revealValid = sa.getParam("RevealValid");
|
||||
final CardCollection toReveal = CardLists.getValidCards(top, revealValid, cont, host, sa);
|
||||
if (!toReveal.isEmpty()) {
|
||||
game.getAction().reveal(toReveal, cont);
|
||||
if (sa.hasParam("RememberRevealed")) {
|
||||
host.addRemembered(toReveal);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!sa.hasParam("NoLooking")) {
|
||||
// show the user the revealed cards
|
||||
delayedReveal = new DelayedReveal(top, srcZone, PlayerView.get(p), CardTranslation.getTranslatedName(host.getName()) + " - " + Localizer.getInstance().getMessage("lblLookingCardIn") + " ");
|
||||
|
||||
if (noMove) {
|
||||
// Let the activating player see the cards even if they're not moved
|
||||
game.getAction().revealTo(top, activator);
|
||||
}
|
||||
}
|
||||
|
||||
if (sa.hasParam("RememberRevealed") && !sa.hasParam("RevealValid") && hasRevealed) {
|
||||
if (sa.hasParam("RememberRevealed") && hasRevealed) {
|
||||
host.addRemembered(top);
|
||||
}
|
||||
if (sa.hasParam("ImprintRevealed") && hasRevealed) {
|
||||
@@ -233,270 +215,269 @@ public class DigEffect extends SpellAbilityEffect {
|
||||
host.setChosenPlayer(chooser);
|
||||
}
|
||||
}
|
||||
if (!noMove) {
|
||||
CardCollection movedCards;
|
||||
rest.addAll(top);
|
||||
CardCollection valid;
|
||||
if (!changeValid.isEmpty()) {
|
||||
if (changeValid.contains("ChosenType")) {
|
||||
changeValid = changeValid.replace("ChosenType", host.getChosenType());
|
||||
}
|
||||
valid = CardLists.getValidCards(top, changeValid, cont, host, sa);
|
||||
if (totalCMC) {
|
||||
valid = CardLists.getValidCards(valid, "Card.cmcLE" + totcmc, cont, host, sa);
|
||||
}
|
||||
} else if (totalCMC) {
|
||||
valid = CardLists.getValidCards(top, "Card.cmcLE" + totcmc, cont, host, sa);
|
||||
} else {
|
||||
// If all the cards are valid choices, no need for a separate reveal dialog to the chooser. pfps??
|
||||
if (p == chooser && destZone1ChangeNum > 1) {
|
||||
delayedReveal = null;
|
||||
}
|
||||
valid = top;
|
||||
}
|
||||
|
||||
if (forceRevealToController) {
|
||||
// Force revealing the card to the player activating the ability (e.g. Explorer's Scope)
|
||||
game.getAction().revealTo(top, activator);
|
||||
delayedReveal = null; // top is already seen by the player, do not reveal twice
|
||||
CardCollection movedCards;
|
||||
rest.addAll(top);
|
||||
CardCollection valid;
|
||||
if (!changeValid.isEmpty()) {
|
||||
if (changeValid.contains("ChosenType")) {
|
||||
changeValid = changeValid.replace("ChosenType", host.getChosenType());
|
||||
}
|
||||
|
||||
// Optional abilities that use a dialog box to prompt the user to skip the ability (e.g. Explorer's Scope, Quest for Ula's Temple)
|
||||
if (optional && mayBeSkipped && !valid.isEmpty()) {
|
||||
String prompt = optionalAbilityPrompt != null ? optionalAbilityPrompt : Localizer.getInstance().getMessage("lblWouldYouLikeProceedWithOptionalAbility") + " " + host + "?\n\n(" + sa.getDescription() + ")";
|
||||
if (!p.getController().confirmAction(sa, null, TextUtil.fastReplace(prompt, "CARDNAME", CardTranslation.getTranslatedName(host.getName())), null)) {
|
||||
return;
|
||||
}
|
||||
valid = CardLists.getValidCards(top, changeValid, cont, host, sa);
|
||||
if (totalCMC) {
|
||||
valid = CardLists.getValidCards(valid, "Card.cmcLE" + totcmc, cont, host, sa);
|
||||
}
|
||||
} else if (totalCMC) {
|
||||
valid = CardLists.getValidCards(top, "Card.cmcLE" + totcmc, cont, host, sa);
|
||||
} else {
|
||||
// If all the cards are valid choices, no need for a separate reveal dialog to the chooser. pfps??
|
||||
if (p == chooser && destZone1ChangeNum > 1) {
|
||||
delayedReveal = null;
|
||||
}
|
||||
valid = top;
|
||||
}
|
||||
|
||||
if (changeAll) {
|
||||
movedCards = new CardCollection(valid);
|
||||
} else if (sa.hasParam("RandomChange")) {
|
||||
int numChanging = Math.min(destZone1ChangeNum, valid.size());
|
||||
movedCards = CardLists.getRandomSubList(valid, numChanging);
|
||||
} else if (totalCMC) {
|
||||
movedCards = new CardCollection();
|
||||
if (p == chooser) {
|
||||
chooser.getController().tempShowCards(top);
|
||||
if (forceRevealToController) {
|
||||
// Force revealing the card to the player activating the ability (e.g. Explorer's Scope)
|
||||
game.getAction().revealTo(top, activator);
|
||||
delayedReveal = null; // top is already seen by the player, do not reveal twice
|
||||
}
|
||||
|
||||
// Optional abilities that use a dialog box to prompt the user to skip the ability (e.g. Explorer's Scope, Quest for Ula's Temple)
|
||||
if (optional && mayBeSkipped && !valid.isEmpty()) {
|
||||
String prompt = optionalAbilityPrompt != null ? optionalAbilityPrompt : Localizer.getInstance().getMessage("lblWouldYouLikeProceedWithOptionalAbility") + " " + host + "?\n\n(" + sa.getDescription() + ")";
|
||||
if (!p.getController().confirmAction(sa, null, TextUtil.fastReplace(prompt, "CARDNAME", CardTranslation.getTranslatedName(host.getName())), null)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (changeAll) {
|
||||
movedCards = new CardCollection(valid);
|
||||
} else if (sa.hasParam("RandomChange")) {
|
||||
int numChanging = Math.min(destZone1ChangeNum, valid.size());
|
||||
movedCards = CardLists.getRandomSubList(valid, numChanging);
|
||||
} else if (totalCMC) {
|
||||
movedCards = new CardCollection();
|
||||
if (p == chooser) {
|
||||
chooser.getController().tempShowCards(top);
|
||||
}
|
||||
if (valid.isEmpty()) {
|
||||
chooser.getController().notifyOfValue(sa, null,
|
||||
Localizer.getInstance().getMessage("lblNoValidCards"));
|
||||
}
|
||||
while (!valid.isEmpty() && (anyNumber || movedCards.size() < destZone1ChangeNum)) {
|
||||
Card chosen = chooser.getController().chooseSingleEntityForEffect(valid, delayedReveal, sa,
|
||||
Localizer.getInstance().getMessage("lblChooseOne"), anyNumber || optional, p, null);
|
||||
if (chosen == null) {
|
||||
//if they can and did choose nothing, we're done here
|
||||
break;
|
||||
}
|
||||
if (valid.isEmpty()) {
|
||||
chooser.getController().notifyOfValue(sa, null,
|
||||
Localizer.getInstance().getMessage("lblNoValidCards"));
|
||||
}
|
||||
while (!valid.isEmpty() && (anyNumber || movedCards.size() < destZone1ChangeNum)) {
|
||||
Card chosen = chooser.getController().chooseSingleEntityForEffect(valid, delayedReveal, sa,
|
||||
Localizer.getInstance().getMessage("lblChooseOne"), anyNumber || optional, p, null);
|
||||
if (chosen == null) {
|
||||
//if they can and did choose nothing, we're done here
|
||||
break;
|
||||
}
|
||||
movedCards.add(chosen);
|
||||
valid.remove(chosen);
|
||||
totcmc = totcmc - chosen.getCMC();
|
||||
valid = CardLists.getValidCards(valid, "Card.cmcLE" + totcmc, cont, host, sa);
|
||||
}
|
||||
chooser.getController().endTempShowCards();
|
||||
if (!movedCards.isEmpty()) {
|
||||
game.getAction().reveal(movedCards, chooser, true,
|
||||
Localizer.getInstance().getMessage("lblPlayerPickedChosen",
|
||||
chooser.getName(), ""));
|
||||
}
|
||||
} else if (sa.hasParam("ForEachColorPair")) {
|
||||
movedCards = new CardCollection();
|
||||
if (p == chooser) {
|
||||
chooser.getController().tempShowCards(top);
|
||||
}
|
||||
for (final byte pair : MagicColor.COLORPAIR) {
|
||||
Card chosen = chooser.getController().chooseSingleEntityForEffect(CardLists.filter(valid,
|
||||
CardPredicates.isExactlyColor(pair)), delayedReveal, sa,
|
||||
Localizer.getInstance().getMessage("lblChooseOne"), false, p, null);
|
||||
if (chosen != null) {
|
||||
movedCards.add(chosen);
|
||||
valid.remove(chosen);
|
||||
totcmc = totcmc - chosen.getCMC();
|
||||
valid = CardLists.getValidCards(valid, "Card.cmcLE" + totcmc, cont, host, sa);
|
||||
}
|
||||
chooser.getController().endTempShowCards();
|
||||
if (!movedCards.isEmpty()) {
|
||||
game.getAction().reveal(movedCards, chooser, true,
|
||||
Localizer.getInstance().getMessage("lblPlayerPickedChosen",
|
||||
chooser.getName(), ""));
|
||||
}
|
||||
chooser.getController().endTempShowCards();
|
||||
if (!movedCards.isEmpty()) {
|
||||
game.getAction().reveal(movedCards, chooser, true, Localizer.getInstance().getMessage("lblPlayerPickedChosen", chooser.getName(), ""));
|
||||
}
|
||||
} else {
|
||||
String prompt;
|
||||
|
||||
if (sa.hasParam("PrimaryPrompt")) {
|
||||
prompt = sa.getParam("PrimaryPrompt");
|
||||
} else {
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseCardsPutIntoZone", destZone1.getTranslatedName());
|
||||
if (destZone1.equals(ZoneType.Library)) {
|
||||
if (!destZone2.equals(ZoneType.Library) && destZone1ChangeNum == 1) {
|
||||
if (libraryPosition == 0) {
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseACardToLeaveTargetLibraryTop", p.getName());
|
||||
} else {
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseACardLeaveTarget", p.getName(), destZone1.getTranslatedName());
|
||||
}
|
||||
} else if (libraryPosition == -1) {
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseCardPutOnTargetLibraryBottom", p.getName());
|
||||
} else if (libraryPosition == 0) {
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseCardPutOnTargetLibraryTop", p.getName());
|
||||
}
|
||||
}
|
||||
} else if (sa.hasParam("ForEachColorPair")) {
|
||||
movedCards = new CardCollection();
|
||||
if (p == chooser) {
|
||||
}
|
||||
|
||||
movedCards = new CardCollection();
|
||||
if (valid.isEmpty()) {
|
||||
chooser.getController().notifyOfValue(sa, null, Localizer.getInstance().getMessage("lblNoValidCards"));
|
||||
} else {
|
||||
if (p == chooser) { // the digger can still see all the dug cards when choosing
|
||||
chooser.getController().tempShowCards(top);
|
||||
}
|
||||
for (final byte pair : MagicColor.COLORPAIR) {
|
||||
Card chosen = chooser.getController().chooseSingleEntityForEffect(CardLists.filter(valid,
|
||||
CardPredicates.isExactlyColor(pair)), delayedReveal, sa,
|
||||
Localizer.getInstance().getMessage("lblChooseOne"), false, p, null);
|
||||
if (chosen != null) {
|
||||
movedCards.add(chosen);
|
||||
}
|
||||
|
||||
int max = anyNumber ? valid.size() : Math.min(valid.size(), destZone1ChangeNum);
|
||||
int min = (anyNumber || optional) ? 0 : max;
|
||||
if (max > 0) { // if max is 0 don't make a choice
|
||||
movedCards.addAll(chooser.getController().chooseEntitiesForEffect(valid, min, max, delayedReveal, sa, prompt, p, null));
|
||||
}
|
||||
|
||||
chooser.getController().endTempShowCards();
|
||||
if (!movedCards.isEmpty()) {
|
||||
game.getAction().reveal(movedCards, chooser, true, Localizer.getInstance().getMessage("lblPlayerPickedChosen", chooser.getName(), ""));
|
||||
}
|
||||
}
|
||||
|
||||
if (!changeValid.isEmpty() && !sa.hasParam("ExileFaceDown") && !sa.hasParam("NoReveal")) {
|
||||
game.getAction().reveal(movedCards, chooser, true, Localizer.getInstance().getMessage("lblPlayerPickedCardFrom", chooser.getName()));
|
||||
}
|
||||
}
|
||||
if (sa.hasParam("ForgetOtherRemembered")) {
|
||||
host.clearRemembered();
|
||||
}
|
||||
Collections.reverse(movedCards);
|
||||
|
||||
if (destZone1.equals(ZoneType.Battlefield) || destZone1.equals(ZoneType.Library)) {
|
||||
if (sa.hasParam("GainControl")) {
|
||||
// for Cybership
|
||||
movedCards = (CardCollection) activator.getController().orderMoveToZoneList(rest, destZone2, sa);
|
||||
} else {
|
||||
String prompt;
|
||||
movedCards = (CardCollection) GameActionUtil.orderCardsByTheirOwners(game, movedCards, destZone1, sa);
|
||||
}
|
||||
}
|
||||
|
||||
if (sa.hasParam("PrimaryPrompt")) {
|
||||
prompt = sa.getParam("PrimaryPrompt");
|
||||
} else {
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseCardsPutIntoZone", destZone1.getTranslatedName());
|
||||
if (destZone1.equals(ZoneType.Library)) {
|
||||
if (!destZone2.equals(ZoneType.Library) && destZone1ChangeNum == 1) {
|
||||
if (libraryPosition == 0) {
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseACardToLeaveTargetLibraryTop", p.getName());
|
||||
} else {
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseACardLeaveTarget", p.getName(), destZone1.getTranslatedName());
|
||||
}
|
||||
} else if (libraryPosition == -1) {
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseCardPutOnTargetLibraryBottom", p.getName());
|
||||
} else if (libraryPosition == 0) {
|
||||
prompt = Localizer.getInstance().getMessage("lblChooseCardPutOnTargetLibraryTop", p.getName());
|
||||
}
|
||||
}
|
||||
|
||||
for (Card c : movedCards) {
|
||||
Map<AbilityKey, Object> moveParams = AbilityKey.newMap();
|
||||
AbilityKey.addCardZoneTableParams(moveParams, zoneMovements);
|
||||
|
||||
if (destZone1.equals(ZoneType.Library) || destZone1.equals(ZoneType.PlanarDeck) || destZone1.equals(ZoneType.SchemeDeck)) {
|
||||
c = game.getAction().moveTo(destZone1, c, libraryPosition, sa, AbilityKey.newMap());
|
||||
} else {
|
||||
if (destZone1.equals(ZoneType.Exile) && !c.canExiledBy(sa, true)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
movedCards = new CardCollection();
|
||||
if (valid.isEmpty()) {
|
||||
chooser.getController().notifyOfValue(sa, null, Localizer.getInstance().getMessage("lblNoValidCards"));
|
||||
} else {
|
||||
if (p == chooser) { // the digger can still see all the dug cards when choosing
|
||||
chooser.getController().tempShowCards(top);
|
||||
}
|
||||
|
||||
int max = anyNumber ? valid.size() : Math.min(valid.size(), destZone1ChangeNum);
|
||||
int min = (anyNumber || optional) ? 0 : max;
|
||||
if (max > 0) { // if max is 0 don't make a choice
|
||||
movedCards.addAll(chooser.getController().chooseEntitiesForEffect(valid, min, max, delayedReveal, sa, prompt, p, null));
|
||||
}
|
||||
|
||||
chooser.getController().endTempShowCards();
|
||||
if (sa.hasParam("Tapped")) {
|
||||
c.setTapped(true);
|
||||
}
|
||||
|
||||
if (!changeValid.isEmpty() && !sa.hasParam("ExileFaceDown") && !sa.hasParam("NoReveal")) {
|
||||
game.getAction().reveal(movedCards, chooser, true, Localizer.getInstance().getMessage("lblPlayerPickedCardFrom", chooser.getName()));
|
||||
if (sa.hasParam("FaceDown")) {
|
||||
c.turnFaceDown(true);
|
||||
CardFactoryUtil.setFaceDownState(c, sa);
|
||||
}
|
||||
if (destZone1.equals(ZoneType.Battlefield)) {
|
||||
moveParams.put(AbilityKey.SimultaneousETB, movedCards);
|
||||
if (sa.hasParam("GainControl")) {
|
||||
c.setController(activator, game.getNextTimestamp());
|
||||
}
|
||||
if (sa.hasParam("WithCounters")) {
|
||||
final int numCtr = AbilityUtils.calculateAmount(host,
|
||||
sa.getParamOrDefault("WithCountersAmount", "1"), sa);
|
||||
|
||||
GameEntityCounterTable table = new GameEntityCounterTable();
|
||||
table.put(activator, c, CounterType.getType(sa.getParam("WithCounters")), numCtr);
|
||||
moveParams.put(AbilityKey.CounterTable, table);
|
||||
}
|
||||
}
|
||||
if (sa.hasAdditionalAbility("AnimateSubAbility")) {
|
||||
// need LKI before Animate does apply
|
||||
moveParams.put(AbilityKey.CardLKI, CardCopyService.getLKICopy(c));
|
||||
|
||||
final SpellAbility animate = sa.getAdditionalAbility("AnimateSubAbility");
|
||||
host.addRemembered(c);
|
||||
AbilityUtils.resolve(animate);
|
||||
host.removeRemembered(c);
|
||||
animate.setSVar("unanimateTimestamp", String.valueOf(game.getTimestamp()));
|
||||
}
|
||||
c = game.getAction().moveTo(c.getController().getZone(destZone1), c, sa, moveParams);
|
||||
if (destZone1.equals(ZoneType.Battlefield)) {
|
||||
if (addToCombat(c, sa, "Attacking", "Blocking")) {
|
||||
combatChanged = true;
|
||||
}
|
||||
} else if (destZone1.equals(ZoneType.Exile)) {
|
||||
if (sa.hasParam("ExileWithCounters")) {
|
||||
c.addCounter(CounterType.getType(sa.getParam("ExileWithCounters")), 1, activator, counterTable);
|
||||
}
|
||||
handleExiledWith(c, sa);
|
||||
}
|
||||
}
|
||||
|
||||
if (sa.hasParam("ExileFaceDown")) {
|
||||
c.turnFaceDown(true);
|
||||
}
|
||||
if (sa.hasParam("WithMayLook")) {
|
||||
c.addMayLookFaceDownExile(activator);
|
||||
}
|
||||
if (sa.hasParam("Imprint")) {
|
||||
host.addImprintedCard(c);
|
||||
}
|
||||
if (sa.hasParam("ForgetOtherRemembered")) {
|
||||
host.clearRemembered();
|
||||
}
|
||||
Collections.reverse(movedCards);
|
||||
|
||||
if (destZone1.equals(ZoneType.Battlefield) || destZone1.equals(ZoneType.Library)) {
|
||||
if (sa.hasParam("GainControl")) {
|
||||
// for Cybership
|
||||
movedCards = (CardCollection) activator.getController().orderMoveToZoneList(rest, destZone2, sa);
|
||||
} else {
|
||||
movedCards = (CardCollection) GameActionUtil.orderCardsByTheirOwners(game, movedCards, destZone1, sa);
|
||||
}
|
||||
if (remZone1) {
|
||||
host.addRemembered(c);
|
||||
}
|
||||
rest.remove(c);
|
||||
}
|
||||
|
||||
// now, move the rest to destZone2
|
||||
if (!rest.isEmpty() && (!sa.hasParam("DestZone2Optional") || p.getController().confirmAction(sa, null,
|
||||
Localizer.getInstance().getMessage("lblDoYouWantPutCardToZone",
|
||||
destZone2.getTranslatedName()), null))) {
|
||||
if (destZone2 == ZoneType.Library || destZone2 == ZoneType.PlanarDeck
|
||||
|| destZone2 == ZoneType.SchemeDeck || destZone2 == ZoneType.Graveyard) {
|
||||
CardCollection afterOrder = rest;
|
||||
if (sa.hasParam("RestRandomOrder")) {
|
||||
CardLists.shuffle(afterOrder);
|
||||
} else if (!skipReorder && rest.size() > 1) {
|
||||
if (destZone2 == ZoneType.Graveyard) {
|
||||
afterOrder = (CardCollection) GameActionUtil.orderCardsByTheirOwners(game, rest, destZone2, sa);
|
||||
} else {
|
||||
afterOrder = (CardCollection) chooser.getController().orderMoveToZoneList(rest, destZone2, sa);
|
||||
}
|
||||
}
|
||||
if (libraryPosition2 != -1) {
|
||||
// Closest to top
|
||||
Collections.reverse(afterOrder);
|
||||
}
|
||||
|
||||
for (Card c : movedCards) {
|
||||
Map<AbilityKey, Object> moveParams = AbilityKey.newMap();
|
||||
AbilityKey.addCardZoneTableParams(moveParams, zoneMovements);
|
||||
for (final Card c : afterOrder) {
|
||||
Map<AbilityKey, Object> moveParams = AbilityKey.newMap();
|
||||
AbilityKey.addCardZoneTableParams(moveParams, zoneMovements);
|
||||
|
||||
if (destZone1.equals(ZoneType.Library) || destZone1.equals(ZoneType.PlanarDeck) || destZone1.equals(ZoneType.SchemeDeck)) {
|
||||
c = game.getAction().moveTo(destZone1, c, libraryPosition, sa, AbilityKey.newMap());
|
||||
} else {
|
||||
if (destZone1.equals(ZoneType.Exile) && !c.canExiledBy(sa, true)) {
|
||||
Card m = game.getAction().moveTo(destZone2, c, libraryPosition2, sa, moveParams);
|
||||
if (remZone2) {
|
||||
host.addRemembered(m);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// just move them randomly
|
||||
for (Card c : rest) {
|
||||
Map<AbilityKey, Object> moveParams = AbilityKey.newMap();
|
||||
AbilityKey.addCardZoneTableParams(moveParams, zoneMovements);
|
||||
|
||||
if (destZone2 == ZoneType.Exile && !c.canExiledBy(sa, true)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (sa.hasParam("Tapped")) {
|
||||
c.setTapped(true);
|
||||
}
|
||||
if (sa.hasParam("FaceDown")) {
|
||||
c.turnFaceDown(true);
|
||||
CardFactoryUtil.setFaceDownState(c, sa);
|
||||
}
|
||||
if (destZone1.equals(ZoneType.Battlefield)) {
|
||||
moveParams.put(AbilityKey.SimultaneousETB, movedCards);
|
||||
if (sa.hasParam("GainControl")) {
|
||||
c.setController(activator, game.getNextTimestamp());
|
||||
}
|
||||
if (sa.hasParam("WithCounters")) {
|
||||
final int numCtr = AbilityUtils.calculateAmount(host,
|
||||
sa.getParamOrDefault("WithCountersAmount", "1"), sa);
|
||||
|
||||
GameEntityCounterTable table = new GameEntityCounterTable();
|
||||
table.put(activator, c, CounterType.getType(sa.getParam("WithCounters")), numCtr);
|
||||
moveParams.put(AbilityKey.CounterTable, table);
|
||||
}
|
||||
}
|
||||
if (sa.hasAdditionalAbility("AnimateSubAbility")) {
|
||||
// need LKI before Animate does apply
|
||||
moveParams.put(AbilityKey.CardLKI, CardCopyService.getLKICopy(c));
|
||||
|
||||
final SpellAbility animate = sa.getAdditionalAbility("AnimateSubAbility");
|
||||
host.addRemembered(c);
|
||||
AbilityUtils.resolve(animate);
|
||||
host.removeRemembered(c);
|
||||
animate.setSVar("unanimateTimestamp", String.valueOf(game.getTimestamp()));
|
||||
}
|
||||
c = game.getAction().moveTo(c.getController().getZone(destZone1), c, sa, moveParams);
|
||||
if (destZone1.equals(ZoneType.Battlefield)) {
|
||||
if (addToCombat(c, sa, "Attacking", "Blocking")) {
|
||||
combatChanged = true;
|
||||
}
|
||||
} else if (destZone1.equals(ZoneType.Exile)) {
|
||||
c = game.getAction().moveTo(destZone2, c, sa, moveParams);
|
||||
if (destZone2 == ZoneType.Exile) {
|
||||
if (sa.hasParam("ExileWithCounters")) {
|
||||
c.addCounter(CounterType.getType(sa.getParam("ExileWithCounters")), 1, activator, counterTable);
|
||||
}
|
||||
handleExiledWith(c, sa);
|
||||
}
|
||||
}
|
||||
|
||||
if (sa.hasParam("ExileFaceDown")) {
|
||||
c.turnFaceDown(true);
|
||||
}
|
||||
if (sa.hasParam("WithMayLook")) {
|
||||
c.addMayLookFaceDownExile(activator);
|
||||
}
|
||||
if (sa.hasParam("Imprint")) {
|
||||
host.addImprintedCard(c);
|
||||
}
|
||||
if (sa.hasParam("ForgetOtherRemembered")) {
|
||||
host.clearRemembered();
|
||||
}
|
||||
if (remZone1) {
|
||||
host.addRemembered(c);
|
||||
}
|
||||
rest.remove(c);
|
||||
}
|
||||
|
||||
// now, move the rest to destZone2
|
||||
if (!rest.isEmpty() && (!sa.hasParam("DestZone2Optional") || p.getController().confirmAction(sa, null,
|
||||
Localizer.getInstance().getMessage("lblDoYouWantPutCardToZone",
|
||||
destZone2.getTranslatedName()), null))) {
|
||||
if (destZone2 == ZoneType.Library || destZone2 == ZoneType.PlanarDeck
|
||||
|| destZone2 == ZoneType.SchemeDeck || destZone2 == ZoneType.Graveyard) {
|
||||
CardCollection afterOrder = rest;
|
||||
if (sa.hasParam("RestRandomOrder")) {
|
||||
CardLists.shuffle(afterOrder);
|
||||
} else if (!skipReorder && rest.size() > 1) {
|
||||
if (destZone2 == ZoneType.Graveyard) {
|
||||
afterOrder = (CardCollection) GameActionUtil.orderCardsByTheirOwners(game, rest, destZone2, sa);
|
||||
} else {
|
||||
afterOrder = (CardCollection) chooser.getController().orderMoveToZoneList(rest, destZone2, sa);
|
||||
}
|
||||
}
|
||||
if (libraryPosition2 != -1) {
|
||||
// Closest to top
|
||||
Collections.reverse(afterOrder);
|
||||
}
|
||||
|
||||
for (final Card c : afterOrder) {
|
||||
Map<AbilityKey, Object> moveParams = AbilityKey.newMap();
|
||||
AbilityKey.addCardZoneTableParams(moveParams, zoneMovements);
|
||||
|
||||
Card m = game.getAction().moveTo(destZone2, c, libraryPosition2, sa, moveParams);
|
||||
if (remZone2) {
|
||||
host.addRemembered(m);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// just move them randomly
|
||||
for (Card c : rest) {
|
||||
Map<AbilityKey, Object> moveParams = AbilityKey.newMap();
|
||||
AbilityKey.addCardZoneTableParams(moveParams, zoneMovements);
|
||||
|
||||
if (destZone2 == ZoneType.Exile && !c.canExiledBy(sa, true)) {
|
||||
continue;
|
||||
}
|
||||
c = game.getAction().moveTo(destZone2, c, sa, moveParams);
|
||||
if (destZone2 == ZoneType.Exile) {
|
||||
if (sa.hasParam("ExileWithCounters")) {
|
||||
c.addCounter(CounterType.getType(sa.getParam("ExileWithCounters")), 1, activator, counterTable);
|
||||
}
|
||||
handleExiledWith(c, sa);
|
||||
if (remZone2) {
|
||||
host.addRemembered(c);
|
||||
}
|
||||
host.addRemembered(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,79 +20,69 @@ public abstract class ManifestBaseEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
public void resolve(SpellAbility sa) {
|
||||
final Card source = sa.getHostCard();
|
||||
final Player activator = sa.getActivatingPlayer();
|
||||
final Game game = source.getGame();
|
||||
// Usually a number leaving possibility for X, Sacrifice X land: Manifest X creatures.
|
||||
final int amount = sa.hasParam("Amount") ? AbilityUtils.calculateAmount(source, sa.getParam("Amount"), sa) : 1;
|
||||
final int times = sa.hasParam("Times") ? AbilityUtils.calculateAmount(source, sa.getParam("Times"), sa) : 1;
|
||||
|
||||
for (int i = 0; i < times; i++) {
|
||||
for (final Player p : getTargetPlayers(sa, "DefinedPlayer")) {
|
||||
CardCollection tgtCards;
|
||||
Card toGrave = null;
|
||||
boolean fromLibrary = false;
|
||||
if (sa.hasParam("Choices") || sa.hasParam("ChoiceZone")) {
|
||||
ZoneType choiceZone = ZoneType.Hand;
|
||||
if (sa.hasParam("ChoiceZone")) {
|
||||
choiceZone = ZoneType.smartValueOf(sa.getParam("ChoiceZone"));
|
||||
fromLibrary = choiceZone.equals(ZoneType.Library);
|
||||
}
|
||||
CardCollectionView choices = p.getCardsIn(choiceZone);
|
||||
if (sa.hasParam("Choices")) {
|
||||
choices = CardLists.getValidCards(choices, sa.getParam("Choices"), activator, source, sa);
|
||||
}
|
||||
if (choices.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
for (final Player p : getTargetPlayers(sa, "DefinedPlayer")) {
|
||||
manifestLoop(sa, p, amount);
|
||||
}
|
||||
}
|
||||
|
||||
String title = sa.hasParam("ChoiceTitle") ? sa.getParam("ChoiceTitle") : getDefaultMessage() + " ";
|
||||
protected void manifestLoop(SpellAbility sa, Player p, final int amount) {
|
||||
|
||||
tgtCards = new CardCollection(p.getController().chooseCardsForEffect(choices, sa, title, amount, amount, false, null));
|
||||
} else if (sa.hasParam("Dread")) {
|
||||
tgtCards = p.getTopXCardsFromLibrary(2);
|
||||
if (!tgtCards.isEmpty()) {
|
||||
Card manifest = p.getController().chooseSingleEntityForEffect(tgtCards, sa, getDefaultMessage(), null);
|
||||
tgtCards.remove(manifest);
|
||||
toGrave = tgtCards.isEmpty() ? null : tgtCards.getFirst();
|
||||
tgtCards = new CardCollection(manifest);
|
||||
}
|
||||
fromLibrary = true;
|
||||
} else if ("TopOfLibrary".equals(sa.getParamOrDefault("Defined", "TopOfLibrary"))) {
|
||||
tgtCards = p.getTopXCardsFromLibrary(amount);
|
||||
fromLibrary = true;
|
||||
} else {
|
||||
tgtCards = getTargetCards(sa);
|
||||
if (tgtCards.allMatch(CardPredicates.inZone(ZoneType.Library))) {
|
||||
fromLibrary = true;
|
||||
}
|
||||
}
|
||||
final Card source = sa.getHostCard();
|
||||
final Player activator = sa.getActivatingPlayer();
|
||||
final Game game = source.getGame();
|
||||
|
||||
if (sa.hasParam("Shuffle")) {
|
||||
CardLists.shuffle(tgtCards);
|
||||
}
|
||||
|
||||
if (fromLibrary) {
|
||||
for (Card c : tgtCards) {
|
||||
// CR 701.34d If an effect instructs a player to manifest multiple cards from their library, those cards are manifested one at a time.
|
||||
Map<AbilityKey, Object> moveParams = AbilityKey.newMap();
|
||||
CardZoneTable triggerList = AbilityKey.addCardZoneTableParams(moveParams, sa);
|
||||
internalEffect(c, p, sa, moveParams);
|
||||
if (sa.hasParam("Dread") && toGrave != null) {
|
||||
game.getAction().moveToGraveyard(toGrave, sa, moveParams);
|
||||
toGrave = null;
|
||||
}
|
||||
triggerList.triggerChangesZoneAll(game, sa);
|
||||
}
|
||||
} else {
|
||||
// manifest from other zones should be done at the same time
|
||||
Map<AbilityKey, Object> moveParams = AbilityKey.newMap();
|
||||
CardZoneTable triggerList = AbilityKey.addCardZoneTableParams(moveParams, sa);
|
||||
for (Card c : tgtCards) {
|
||||
internalEffect(c, p, sa, moveParams);
|
||||
}
|
||||
triggerList.triggerChangesZoneAll(game, sa);
|
||||
}
|
||||
CardCollection tgtCards;
|
||||
boolean fromLibrary = false;
|
||||
if (sa.hasParam("Choices") || sa.hasParam("ChoiceZone")) {
|
||||
ZoneType choiceZone = ZoneType.Hand;
|
||||
if (sa.hasParam("ChoiceZone")) {
|
||||
choiceZone = ZoneType.smartValueOf(sa.getParam("ChoiceZone"));
|
||||
fromLibrary = choiceZone.equals(ZoneType.Library);
|
||||
}
|
||||
CardCollectionView choices = p.getCardsIn(choiceZone);
|
||||
if (sa.hasParam("Choices")) {
|
||||
choices = CardLists.getValidCards(choices, sa.getParam("Choices"), activator, source, sa);
|
||||
}
|
||||
if (choices.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
String title = sa.hasParam("ChoiceTitle") ? sa.getParam("ChoiceTitle") : getDefaultMessage() + " ";
|
||||
|
||||
tgtCards = new CardCollection(p.getController().chooseCardsForEffect(choices, sa, title, amount, amount, false, null));
|
||||
} else if ("TopOfLibrary".equals(sa.getParamOrDefault("Defined", "TopOfLibrary"))) {
|
||||
tgtCards = p.getTopXCardsFromLibrary(amount);
|
||||
fromLibrary = true;
|
||||
} else {
|
||||
tgtCards = getTargetCards(sa);
|
||||
if (tgtCards.allMatch(CardPredicates.inZone(ZoneType.Library))) {
|
||||
fromLibrary = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (sa.hasParam("Shuffle")) {
|
||||
CardLists.shuffle(tgtCards);
|
||||
}
|
||||
|
||||
if (fromLibrary) {
|
||||
for (Card c : tgtCards) {
|
||||
// CR 701.34d If an effect instructs a player to manifest multiple cards from their library, those cards are manifested one at a time.
|
||||
Map<AbilityKey, Object> moveParams = AbilityKey.newMap();
|
||||
CardZoneTable triggerList = AbilityKey.addCardZoneTableParams(moveParams, sa);
|
||||
internalEffect(c, p, sa, moveParams);
|
||||
triggerList.triggerChangesZoneAll(game, sa);
|
||||
}
|
||||
} else {
|
||||
// manifest from other zones should be done at the same time
|
||||
Map<AbilityKey, Object> moveParams = AbilityKey.newMap();
|
||||
CardZoneTable triggerList = AbilityKey.addCardZoneTableParams(moveParams, sa);
|
||||
for (Card c : tgtCards) {
|
||||
internalEffect(c, p, sa, moveParams);
|
||||
}
|
||||
triggerList.triggerChangesZoneAll(game, sa);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.card.CardZoneTable;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.trigger.TriggerType;
|
||||
|
||||
public class ManifestDreadEffect extends ManifestEffect {
|
||||
@Override
|
||||
protected void manifestLoop(SpellAbility sa, Player p, final int amount) {
|
||||
final Game game = p.getGame();
|
||||
for (int i = 0; i < amount; i++) {
|
||||
CardCollection tgtCards = p.getTopXCardsFromLibrary(2);
|
||||
Card manifest = null;
|
||||
Card toGrave = null;
|
||||
if (!tgtCards.isEmpty()) {
|
||||
manifest = p.getController().chooseSingleEntityForEffect(tgtCards, sa, getDefaultMessage(), null);
|
||||
tgtCards.remove(manifest);
|
||||
toGrave = tgtCards.isEmpty() ? null : tgtCards.getFirst();
|
||||
|
||||
// CR 701.34d If an effect instructs a player to manifest multiple cards from their library, those cards are manifested one at a time.
|
||||
Map<AbilityKey, Object> moveParams = AbilityKey.newMap();
|
||||
CardZoneTable triggerList = AbilityKey.addCardZoneTableParams(moveParams, sa);
|
||||
internalEffect(manifest, p, sa, moveParams);
|
||||
if (toGrave != null) {
|
||||
toGrave = game.getAction().moveToGraveyard(toGrave, sa, moveParams);
|
||||
}
|
||||
triggerList.triggerChangesZoneAll(game, sa);
|
||||
}
|
||||
Map<AbilityKey, Object> runParams = AbilityKey.mapFromPlayer(p);
|
||||
runParams.put(AbilityKey.Card, toGrave);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.ManifestDread, runParams, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,10 +9,11 @@ import forge.game.spellability.SpellAbility;
|
||||
import forge.util.Localizer;
|
||||
|
||||
public class ManifestEffect extends ManifestBaseEffect {
|
||||
|
||||
@Override
|
||||
protected String getDefaultMessage() {
|
||||
return Localizer.getInstance().getMessage("lblChooseCardToManifest");
|
||||
}
|
||||
@Override
|
||||
protected Card internalEffect(Card c, Player p, SpellAbility sa, Map<AbilityKey, Object> moveParams) {
|
||||
final Card source = sa.getHostCard();
|
||||
Card rem = c.manifest(p, sa, moveParams);
|
||||
|
||||
@@ -18,11 +18,16 @@ import forge.util.TextUtil;
|
||||
import java.util.Map;
|
||||
|
||||
public class MillEffect extends SpellAbilityEffect {
|
||||
|
||||
@Override
|
||||
public void resolve(SpellAbility sa) {
|
||||
final Card source = sa.getHostCard();
|
||||
final Game game = source.getGame();
|
||||
final int numCards = sa.hasParam("NumCards") ? AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("NumCards"), sa) : 1;
|
||||
final int numCards = sa.hasParam("NumCards") ? AbilityUtils.calculateAmount(source, sa.getParam("NumCards"), sa) : 1;
|
||||
|
||||
if (numCards <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (sa.hasParam("ForgetOtherRemembered")) {
|
||||
source.clearRemembered();
|
||||
|
||||
@@ -17,8 +17,7 @@ public class ScryEffect extends SpellAbilityEffect {
|
||||
protected String getStackDescription(SpellAbility sa) {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
|
||||
final List<Player> players = Lists.newArrayList(); // players really affected
|
||||
players.addAll(getTargetPlayers(sa));
|
||||
final List<Player> players = getTargetPlayers(sa);
|
||||
sb.append(Lang.joinHomogenous(players)).append(" ");
|
||||
|
||||
int num = 1;
|
||||
|
||||
@@ -186,7 +186,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars, ITr
|
||||
private boolean startsGameInPlay = false;
|
||||
private boolean drawnThisTurn = false;
|
||||
private boolean foughtThisTurn = false;
|
||||
private boolean becameTargetThisTurn = false;
|
||||
private boolean becameTargetThisTurn, valiant = false;
|
||||
private boolean enlistedThisCombat = false;
|
||||
private boolean startedTheTurnUntapped = false;
|
||||
private boolean cameUnderControlSinceLastUpkeep = true; // for Echo
|
||||
@@ -3698,6 +3698,12 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars, ITr
|
||||
public void setBecameTargetThisTurn(boolean becameTargetThisTurn0) {
|
||||
becameTargetThisTurn = becameTargetThisTurn0;
|
||||
}
|
||||
public boolean isValiant() {
|
||||
return valiant;
|
||||
}
|
||||
public void setValiant(boolean v) {
|
||||
valiant = v;
|
||||
}
|
||||
|
||||
public boolean hasStartedTheTurnUntapped() {
|
||||
return startedTheTurnUntapped;
|
||||
@@ -7197,6 +7203,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars, ITr
|
||||
setRegeneratedThisTurn(0);
|
||||
resetShieldCount();
|
||||
setBecameTargetThisTurn(false);
|
||||
setValiant(false);
|
||||
setFoughtThisTurn(false);
|
||||
turnedFaceUpThisTurn = false;
|
||||
clearMustBlockCards();
|
||||
|
||||
@@ -1414,7 +1414,7 @@ public class CardFactoryUtil {
|
||||
inst.addTrigger(trigger);
|
||||
} else if (keyword.startsWith("Impending")) {
|
||||
// Remove Time counter trigger
|
||||
final String endTrig = "Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | IsPresent$ Card.Self+counters_GE1_TIME" +
|
||||
final String endTrig = "Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | IsPresent$ Card.Self+impended+counters_GE1_TIME" +
|
||||
" | Secondary$ True | TriggerDescription$ At the beginning of your end step, remove a time counter from it.";
|
||||
|
||||
final String remove = "DB$ RemoveCounter | Defined$ Self | CounterType$ TIME | CounterNum$ 1";
|
||||
@@ -1552,7 +1552,7 @@ public class CardFactoryUtil {
|
||||
final String actualTrigger = "Mode$ Attacks | ValidCard$ Card.Self | Secondary$ True"
|
||||
+ " | TriggerDescription$ Myriad (" + inst.getReminderText() + ")";
|
||||
|
||||
final String copyStr = "DB$ CopyPermanent | Defined$ Self | TokenTapped$ True | Optional$ True | TokenAttacking$ RememberedPlayer & Valid Planeswalker.ControlledBy Remembered"
|
||||
final String copyStr = "DB$ CopyPermanent | Defined$ Self | TokenTapped$ True | OptionalForEach$ True | TokenAttacking$ RememberedPlayer & Valid Planeswalker.ControlledBy Remembered"
|
||||
+ "| ForEach$ OppNonDefendingPlayer | AtEOT$ ExileCombat | CleanupForEach$ True";
|
||||
|
||||
final SpellAbility copySA = AbilityFactory.getAbility(copyStr, card);
|
||||
@@ -2353,17 +2353,7 @@ public class CardFactoryUtil {
|
||||
final String effect = "DB$ PutCounter | Defined$ ReplacedCard | CounterType$ TIME | CounterNum$ " + m
|
||||
+ " | ETB$ True | SpellDescription$ " + desc;
|
||||
|
||||
SpellAbility repAb = AbilityFactory.getAbility(effect, card);
|
||||
|
||||
String staticEffect = "DB$ Effect | StaticAbilities$ NoCreature | ExileOnCounter$ TIME | Duration$ UntilHostLeavesPlay";
|
||||
|
||||
String staticNoCreature = "Mode$ Continuous | Affected$ Card.EffectSource+counters_GE1_TIME | RemoveType$ Creature | Description$ EFFECTSOURCE isn't a creature.";
|
||||
|
||||
AbilitySub effectAb = (AbilitySub)AbilityFactory.getAbility(staticEffect, card);
|
||||
effectAb.setSVar("NoCreature", staticNoCreature);
|
||||
repAb.setSubAbility(effectAb);
|
||||
|
||||
final ReplacementEffect re = createETBReplacement(card, ReplacementLayer.Other, repAb, false, true, intrinsic, "Card.Self+impended", "");
|
||||
final ReplacementEffect re = createETBReplacement(card, ReplacementLayer.Other, effect, false, true, intrinsic, "Card.Self+impended", "");
|
||||
|
||||
inst.addReplacement(re);
|
||||
} else if (keyword.equals("Jump-start")) {
|
||||
@@ -3997,6 +3987,9 @@ public class CardFactoryUtil {
|
||||
String effect = "Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.withoutHorsemanship | Secondary$ True " +
|
||||
" | Description$ Horsemanship (" + inst.getReminderText() + ")";
|
||||
inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic));
|
||||
} else if (keyword.startsWith("Impending")) {
|
||||
String effect = "Mode$ Continuous | Affected$ Card.Self+impended+counters_GE1_TIME | RemoveType$ Creature | Secondary$ True";
|
||||
inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic));
|
||||
} else if (keyword.equals("Intimidate")) {
|
||||
String effect = "Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.nonArtifact+!SharesColorWith | Secondary$ True " +
|
||||
" | Description$ Intimidate (" + inst.getReminderText() + ")";
|
||||
|
||||
@@ -302,7 +302,7 @@ public class ManaCostBeingPaid {
|
||||
sc.xCount = sc.totalCount;
|
||||
}
|
||||
// nothing more left in otherSubtract
|
||||
return;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -322,7 +322,7 @@ public class ManaCostBeingPaid {
|
||||
sc.xCount = sc.totalCount;
|
||||
}
|
||||
// nothing more left in otherSubtract
|
||||
return;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -342,7 +342,7 @@ public class ManaCostBeingPaid {
|
||||
sc.xCount = sc.totalCount;
|
||||
}
|
||||
// nothing more left in otherSubtract
|
||||
return;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -362,7 +362,7 @@ public class ManaCostBeingPaid {
|
||||
sc.xCount = sc.totalCount;
|
||||
}
|
||||
// nothing more left in otherSubtract
|
||||
return;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -384,7 +384,7 @@ public class ManaCostBeingPaid {
|
||||
sc.xCount = sc.totalCount;
|
||||
}
|
||||
// nothing more left in otherSubtract
|
||||
return;
|
||||
break;
|
||||
}
|
||||
} else if (sc.xCount > 0) { // X part that can only be paid by specific color
|
||||
if (otherSubtract >= sc.xCount) {
|
||||
@@ -398,7 +398,7 @@ public class ManaCostBeingPaid {
|
||||
sc.totalCount -= otherSubtract;
|
||||
sc.xCount -= otherSubtract;
|
||||
// nothing more left in otherSubtract
|
||||
return;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,11 +21,11 @@ public class PlayerProperty {
|
||||
|
||||
public static boolean playerHasProperty(Player player, String property, Player sourceController, Card source, CardTraitBase spellAbility) {
|
||||
Game game = player.getGame();
|
||||
if (property.endsWith("Activator")) {
|
||||
sourceController = spellAbility.getHostCard().getController();
|
||||
property = property.substring(0, property.length() - 9);
|
||||
}
|
||||
if (property.equals("You")) {
|
||||
if (property.equals("Activator")) {
|
||||
if (!player.equals(spellAbility.getHostCard().getController())) {
|
||||
return false;
|
||||
}
|
||||
} else if (property.equals("You")) {
|
||||
if (!player.equals(sourceController)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -60,6 +60,7 @@ public abstract class ReplacementEffect extends TriggerReplacementBase {
|
||||
private boolean hasRun = false;
|
||||
|
||||
private List<ReplacementEffect> otherChoices = null;
|
||||
private ReplacementEffectView view = null;
|
||||
|
||||
/**
|
||||
* Gets the id.
|
||||
@@ -109,6 +110,15 @@ public abstract class ReplacementEffect extends TriggerReplacementBase {
|
||||
}
|
||||
}
|
||||
|
||||
public ReplacementEffectView getView() {
|
||||
if (view == null)
|
||||
view = new ReplacementEffectView(this);
|
||||
else {
|
||||
view.updateHostCard(this);
|
||||
view.updateDescription(this);
|
||||
}
|
||||
return view;
|
||||
}
|
||||
/**
|
||||
* Sets the checks for run.
|
||||
*
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
package forge.game.replacement;
|
||||
|
||||
import forge.game.card.CardView;
|
||||
import forge.game.card.IHasCardView;
|
||||
import forge.trackable.TrackableObject;
|
||||
import forge.trackable.TrackableProperty;
|
||||
import forge.trackable.Tracker;
|
||||
|
||||
public class ReplacementEffectView extends TrackableObject implements IHasCardView {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
ReplacementEffectView(ReplacementEffect re) {
|
||||
this(re, re.getHostCard() == null || re.getHostCard().getGame() == null ? null : re.getHostCard().getGame().getTracker());
|
||||
}
|
||||
|
||||
ReplacementEffectView(ReplacementEffect re, Tracker tracker) {
|
||||
super(re.getId(), tracker);
|
||||
updateHostCard(re);
|
||||
updateDescription(re);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CardView getCardView() {
|
||||
return this.getHostCard();
|
||||
}
|
||||
|
||||
public CardView getHostCard() {
|
||||
return get(TrackableProperty.RE_HostCard);
|
||||
}
|
||||
|
||||
void updateHostCard(ReplacementEffect re) {
|
||||
set(TrackableProperty.RE_HostCard, CardView.get(re.getHostCard()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return this.getDescription();
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return get(TrackableProperty.RE_Description);
|
||||
}
|
||||
|
||||
void updateDescription(ReplacementEffect re) {
|
||||
set(TrackableProperty.RE_Description, re.getDescription());
|
||||
}
|
||||
}
|
||||
@@ -144,9 +144,6 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView {
|
||||
view.updateTargetPlayers(this);
|
||||
view.updateText(this);
|
||||
|
||||
// Run BecomesTargetTrigger
|
||||
Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.SourceSA, ability);
|
||||
Set<GameObject> distinctObjects = Sets.newHashSet();
|
||||
for (final GameObject tgt : target) {
|
||||
if (oldTarget != null && oldTarget.contains(tgt)) {
|
||||
@@ -157,16 +154,22 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView {
|
||||
continue;
|
||||
}
|
||||
|
||||
Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.SourceSA, ability);
|
||||
if (tgt instanceof Card && !((Card) tgt).hasBecomeTargetThisTurn()) {
|
||||
runParams.put(AbilityKey.FirstTime, null);
|
||||
((Card) tgt).setBecameTargetThisTurn(true);
|
||||
}
|
||||
if (tgt instanceof Card && !((Card) tgt).isValiant() && cause.getController().equals(((Card) tgt).getController())) {
|
||||
runParams.put(AbilityKey.Valiant, null);
|
||||
((Card) tgt).setValiant(true);
|
||||
}
|
||||
runParams.put(AbilityKey.Target, tgt);
|
||||
getSourceCard().getGame().getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams, false);
|
||||
}
|
||||
// Only run BecomesTargetOnce when at least one target is changed
|
||||
if (!distinctObjects.isEmpty()) {
|
||||
runParams = AbilityKey.newMap();
|
||||
Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.SourceSA, ability);
|
||||
runParams.put(AbilityKey.Targets, distinctObjects);
|
||||
runParams.put(AbilityKey.Cause, cause);
|
||||
|
||||
@@ -62,6 +62,7 @@ public class StaticAbility extends CardTraitBase implements IIdentifiable, Clone
|
||||
private int mayPlayTurn = 0;
|
||||
|
||||
private SpellAbility payingTrigSA;
|
||||
private StaticAbilityView view = null;
|
||||
|
||||
@Override
|
||||
public final int getId() {
|
||||
@@ -231,6 +232,16 @@ public class StaticAbility extends CardTraitBase implements IIdentifiable, Clone
|
||||
this.setCardState(state);
|
||||
}
|
||||
|
||||
public StaticAbilityView getView() {
|
||||
if (view == null)
|
||||
view = new StaticAbilityView(this);
|
||||
else {
|
||||
view.updateHostCard(this);
|
||||
view.updateDescription(this);
|
||||
}
|
||||
return view;
|
||||
}
|
||||
|
||||
public final CardCollectionView applyContinuousAbilityBefore(final StaticAbilityLayer layer, final CardCollectionView preList) {
|
||||
if (!shouldApplyContinuousAbility(layer, false)) {
|
||||
return null;
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
package forge.game.staticability;
|
||||
|
||||
import forge.game.card.CardView;
|
||||
import forge.game.card.IHasCardView;
|
||||
import forge.trackable.TrackableObject;
|
||||
import forge.trackable.TrackableProperty;
|
||||
import forge.trackable.Tracker;
|
||||
|
||||
public class StaticAbilityView extends TrackableObject implements IHasCardView {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
StaticAbilityView(StaticAbility st) {
|
||||
this(st, st.getHostCard() == null || st.getHostCard().getGame() == null ? null : st.getHostCard().getGame().getTracker());
|
||||
}
|
||||
|
||||
StaticAbilityView(StaticAbility st, Tracker tracker) {
|
||||
super(st.getId(), tracker);
|
||||
updateHostCard(st);
|
||||
updateDescription(st);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CardView getCardView() {
|
||||
return this.getHostCard();
|
||||
}
|
||||
|
||||
public CardView getHostCard() {
|
||||
return get(TrackableProperty.ST_HostCard);
|
||||
}
|
||||
|
||||
void updateHostCard(StaticAbility st) {
|
||||
set(TrackableProperty.ST_HostCard, CardView.get(st.getHostCard()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return this.getDescription();
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return get(TrackableProperty.ST_Description);
|
||||
}
|
||||
|
||||
void updateDescription(StaticAbility st) {
|
||||
set(TrackableProperty.ST_Description, st.toString());
|
||||
}
|
||||
}
|
||||
@@ -77,6 +77,12 @@ public class TriggerBecomesTarget extends Trigger {
|
||||
}
|
||||
}
|
||||
|
||||
if (hasParam("Valiant")) {
|
||||
if (!runParams.containsKey(AbilityKey.Valiant)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package forge.game.trigger;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
public class TriggerManifestDread extends Trigger {
|
||||
|
||||
public TriggerManifestDread(Map<String, String> params, Card host, boolean intrinsic) {
|
||||
super(params, host, intrinsic);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean performTest(Map<AbilityKey, Object> runParams) {
|
||||
if (!matchesValidParam("ValidPlayer", runParams.get(AbilityKey.Player))) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTriggeringObjects(SpellAbility sa, Map<AbilityKey, Object> runParams) {
|
||||
sa.setTriggeringObject(AbilityKey.NewCard, runParams.get(AbilityKey.Card));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImportantStackObjects(SpellAbility sa) {
|
||||
// TODO Auto-generated method stub
|
||||
return "";
|
||||
}
|
||||
|
||||
}
|
||||
@@ -139,6 +139,9 @@ public class TriggerSpellAbilityCastOrCopy extends Trigger {
|
||||
if (!matchesValidParam("ValidSA", spellAbility)) {
|
||||
return false;
|
||||
}
|
||||
if (!matchesValidParam("ValidSAonCard", spellAbility, cast)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (hasParam("TargetsValid")) {
|
||||
SpellAbility sa = spellAbility;
|
||||
|
||||
@@ -97,6 +97,7 @@ public enum TriggerType {
|
||||
LosesGame(TriggerLosesGame.class),
|
||||
ManaAdded(TriggerManaAdded.class),
|
||||
ManaExpend(TriggerManaExpend.class),
|
||||
ManifestDread(TriggerManifestDread.class),
|
||||
Mentored(TriggerMentored.class),
|
||||
Milled(TriggerMilled.class),
|
||||
MilledOnce(TriggerMilledOnce.class),
|
||||
|
||||
@@ -441,13 +441,11 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
|
||||
// Create a new object, since the triggers aren't happening right away
|
||||
List<TargetChoices> chosenTargets = sp.getAllTargetChoices();
|
||||
if (!chosenTargets.isEmpty()) {
|
||||
runParams = AbilityKey.newMap();
|
||||
SpellAbility s = sp;
|
||||
if (si != null) {
|
||||
s = si.getSpellAbility();
|
||||
chosenTargets = s.getAllTargetChoices();
|
||||
}
|
||||
runParams.put(AbilityKey.SourceSA, s);
|
||||
Set<GameObject> distinctObjects = Sets.newHashSet();
|
||||
for (final TargetChoices tc : chosenTargets) {
|
||||
for (final GameObject tgt : tc) {
|
||||
@@ -457,14 +455,22 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
|
||||
continue;
|
||||
}
|
||||
|
||||
runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.SourceSA, s);
|
||||
if (tgt instanceof Card && !((Card) tgt).hasBecomeTargetThisTurn()) {
|
||||
runParams.put(AbilityKey.FirstTime, null);
|
||||
((Card) tgt).setBecameTargetThisTurn(true);
|
||||
}
|
||||
if (tgt instanceof Card && !((Card) tgt).isValiant() && activator.equals(((Card) tgt).getController())) {
|
||||
runParams.put(AbilityKey.Valiant, null);
|
||||
((Card) tgt).setValiant(true);
|
||||
}
|
||||
runParams.put(AbilityKey.Target, tgt);
|
||||
game.getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams, false);
|
||||
}
|
||||
}
|
||||
runParams = AbilityKey.newMap();
|
||||
runParams.put(AbilityKey.SourceSA, s);
|
||||
runParams.put(AbilityKey.Targets, distinctObjects);
|
||||
runParams.put(AbilityKey.Cause, s.getHostCard());
|
||||
game.getTriggerHandler().runTrigger(TriggerType.BecomesTargetOnce, runParams, false);
|
||||
|
||||
@@ -241,6 +241,14 @@ public enum TrackableProperty {
|
||||
CanPlay(TrackableTypes.BooleanType),
|
||||
PromptIfOnlyPossibleAbility(TrackableTypes.BooleanType),
|
||||
|
||||
//ReplacementEffectView
|
||||
RE_HostCard(TrackableTypes.CardViewType),
|
||||
RE_Description(TrackableTypes.StringType),
|
||||
|
||||
//StaticAbilityView
|
||||
ST_HostCard(TrackableTypes.CardViewType),
|
||||
ST_Description(TrackableTypes.StringType),
|
||||
|
||||
//HasBackSide
|
||||
BackSideName(TrackableTypes.StringType),
|
||||
HasBackSide(TrackableTypes.BooleanType),
|
||||
|
||||
@@ -431,10 +431,12 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
|
||||
Map<Comparable<?>, Pile> piles = new TreeMap<>();
|
||||
for (ItemInfo itemInfo : group.items) {
|
||||
Comparable<?> key = groupPileBy.fnSort.apply(itemInfo);
|
||||
if (!piles.containsKey(key)) {
|
||||
if (key != null && !piles.containsKey(key)) {
|
||||
piles.put(key, new Pile());
|
||||
}
|
||||
piles.get(key).items.add(itemInfo);
|
||||
Pile p = key == null ? null : piles.getOrDefault(key, null);
|
||||
if (p != null)
|
||||
p.items.add(itemInfo);
|
||||
}
|
||||
group.piles.clear();
|
||||
group.piles.addAll(piles.values());
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Agatha of the Vile Cauldron
|
||||
ManaCost:R G
|
||||
Types:Legendary Creature Human Warlock
|
||||
PT:1/1
|
||||
S:Mode$ ReduceCost | ValidCard$ Creature.YouCtrl | Type$ Ability | Amount$ X | MinMana$ 1 | AffectedZone$ Battlefield | Description$ Activated abilities of creatures you control cost X less to activate, where X is CARDNAME's power. This effect can't reduce the mana in that cost to less than one mana.
|
||||
S:Mode$ ReduceCost | ValidCard$ Creature.YouCtrl | Type$ Ability | Amount$ X | MinMana$ 1 | AffectedZone$ Battlefield | Description$ Activated abilities of creatures you control cost {X} less to activate, where X is CARDNAME's power. This effect can't reduce the mana in that cost to less than one mana.
|
||||
A:AB$ PumpAll | Cost$ 4 R G | ValidCards$ Creature.YouCtrl+StrictlyOther | NumAtt$ +1 | NumDef$ +1 | KW$ Trample & Haste | SpellDescription$ Other creatures you control get +1/+1 and gain trample and haste until end of turn.
|
||||
SVar:X:Count$CardPower
|
||||
Oracle:Activated abilities of creatures you control cost X less to activate, where X is Agatha of the Vile Cauldron's power. This effect can't reduce the mana in that cost to less than one mana.\n{4}{R}{G}: Other creatures you control get +1/+1 and gain trample and haste until end of turn.
|
||||
Oracle:Activated abilities of creatures you control cost {X} less to activate, where X is Agatha of the Vile Cauldron's power. This effect can't reduce the mana in that cost to less than one mana.\n{4}{R}{G}: Other creatures you control get +1/+1 and gain trample and haste until end of turn.
|
||||
|
||||
@@ -8,7 +8,7 @@ T:Mode$ ChangesZoneAll | TriggerZones$ Battlefield | ValidCards$ Cat.Other+YouCt
|
||||
SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBReturn
|
||||
SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | Transformed$ True | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
DeckHas:Ability$Token
|
||||
DeckHas:Ability$Sacrifice|Token
|
||||
AlternateMode:DoubleFaced
|
||||
Oracle:When Ajani, Nacatl Pariah enters, create a 2/1 white Cat Warrior creature token.\nWhenever one or more other Cats you control die, you may exile Ajani, then return him to the battlefield transformed under his owner's control.
|
||||
|
||||
@@ -24,11 +24,7 @@ A:AB$ Token | Cost$ AddCounter<0/LOYALTY> | TokenAmount$ 1 | TokenScript$ w_2_1_
|
||||
SVar:DBImmediateTrig1:DB$ ImmediateTrigger | TriggerAmount$ Remembered$Amount | ConditionPresent$ Permanent.Red+YouCtrl+Other | Execute$ TrigDamage | TriggerDescription$ When you do, if you control a red permanent other than CARDNAME, he deals damage equal to the number of creatures you control to any target.
|
||||
SVar:TrigDamage:DB$ DealDamage | NumDmg$ X | ValidTgts$ Any | ConditionPresent$ Permanent.Red+YouCtrl+Other | SubAbility$ DBCleanup | TgtPrompt$ Select any valid target | SpellDescription$ CARDNAME deals damage equal to the number of creatures you control to any target.
|
||||
SVar:X:Count$Valid Creature.YouCtrl
|
||||
A:AB$ RepeatEach | Cost$ SubCounter<4/LOYALTY> | Planeswalker$ True | Ultimate$ True | RepeatPlayers$ Opponent | RepeatSubAbility$ ChooseArtf | SubAbility$ SacAllOthers | SpellDescription$ Each opponent chooses an artifact, a creature, an enchantment, and a planeswalker from among the nonland permanents they control, then sacrifices the rest.
|
||||
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$ ChoosePwkr | RememberChosen$ True | Mandatory$ True
|
||||
SVar:ChoosePwkr:DB$ ChooseCard | Defined$ Remembered | Amount$ 1 | Choices$ Planeswalker.nonLand+RememberedPlayerCtrl | ChoiceTitle$ Choose a land to keep | RememberChosen$ True | Mandatory$ True
|
||||
SVar:SacAllOthers:DB$ SacrificeAll | ValidCards$ Permanent.nonLand+OppCtrl+IsNotRemembered | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
A:AB$ ChooseCard | Cost$ SubCounter<4/LOYALTY> | Planeswalker$ True | Ultimate$ True | Defined$ Opponent | Choices$ Permanent.nonLand | ChooseEach$ Artifact & Creature & Enchantment & Planeswalker | ControlledByPlayer$ Chooser | Mandatory$ True | Reveal$ True | SubAbility$ SacAllOthers | StackDescription$ SpellDescription | SpellDescription$ Each opponent chooses an artifact, a creature, an enchantment, and a planeswalker from among the nonland permanents they control, then sacrifices the rest.
|
||||
SVar:SacAllOthers:DB$ SacrificeAll | ValidCards$ Permanent.nonLand+OppCtrl+nonChosenCard | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True
|
||||
Oracle:[+2]: Put a +1/+1 counter on each Cat you control.\n[0]: Create a 2/1 white Cat Warrior creature token. When you do, if you control a red permanent other than Ajani, Nacatl Avenger, he deals damage equal to the number of creatures you control to any target.\n[-4]: Each opponent chooses an artifact, a creature, an enchantment and a planeswalker from among the nonland permanents they control, then sacrifices the rest.
|
||||
|
||||
@@ -2,7 +2,8 @@ Name:All Shall Smolder in My Wake
|
||||
ManaCost:no cost
|
||||
Types:Scheme
|
||||
T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ Ignite | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, destroy up to one target artifact, up to one target enchantment, and up to one target nonbasic land.
|
||||
SVar:Ignite:DB$ Destroy | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Artifact | TgtPrompt$ Select target artifact to destroy | SubAbility$ Burn
|
||||
SVar:Burn:DB$ Destroy | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Enchantment | TgtPrompt$ Select target enchantment to destroy | SubAbility$ Smolder
|
||||
SVar:Smolder:DB$ Destroy | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Land.nonBasic | TgtPrompt$ Select target nonbasic land to destroy
|
||||
SVar:Ignite:DB$ Pump | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Artifact | TgtPrompt$ Select target artifact to destroy | AILogic$ Destroy | IsCurse$ True | SubAbility$ Burn
|
||||
SVar:Burn:DB$ Pump | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Enchantment | TgtPrompt$ Select target enchantment to destroy | AILogic$ Destroy | IsCurse$ True | SubAbility$ Smolder
|
||||
SVar:Smolder:DB$ Pump | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Land.nonBasic | TgtPrompt$ Select target nonbasic land to destroy | AILogic$ Destroy | IsCurse$ True | SubAbility$ Burninate
|
||||
SVar:Burninate:DB$ Destroy | Defined$ Targeted
|
||||
Oracle:When you set this scheme in motion, destroy up to one target artifact, up to one target enchantment, and up to one target nonbasic land.
|
||||
|
||||
@@ -3,8 +3,9 @@ ManaCost:3 B B
|
||||
Types:Creature Demon
|
||||
PT:5/4
|
||||
K:Flying
|
||||
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ Opponent | TriggerZones$ Battlefield | Execute$ TrigChoose | TriggerDescription$ At the beginning of each opponent's end step, that player chooses up to two creature they control, then sacrifices the rest.
|
||||
SVar:TrigChoose:DB$ ChooseCard | Defined$ TriggeredPlayer | MinAmount$ 0 | Amount$ 2 | TargetControls$ True | Choices$ Creature | ChoiceTitle$ Choose up to two creatures | SubAbility$ DBSacrificeAll
|
||||
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ Opponent | TriggerZones$ Battlefield | Execute$ TrigChoose | TriggerDescription$ At the beginning of each opponent's end step, that player chooses up to two creatures they control, then sacrifices the rest.
|
||||
SVar:TrigChoose:DB$ ChooseCard | Defined$ TriggeredPlayer | MinAmount$ 0 | Amount$ 2 | TargetControls$ True | Choices$ Creature | ChoiceTitle$ Choose up to two creatures to keep | Reveal$ True | SubAbility$ DBSacrificeAll
|
||||
SVar:DBSacrificeAll:DB$ SacrificeAll | ValidCards$ Creature.nonChosenCard | Controller$ TriggeredPlayer | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True
|
||||
DeckHas:Ability$Sacrifice
|
||||
Oracle:Flying\nAt the beginning of each opponent's end step, that player chooses up to two creatures they control, then sacrifices the rest.
|
||||
|
||||
@@ -6,4 +6,5 @@ SVar:DBChooseSac:DB$ ChooseCard | Choices$ Card.IsRemembered | Defined$ Targeted
|
||||
SVar:DBSac:DB$ SacrificeAll | Defined$ ChosenCard | SubAbility$ DBBounce | StackDescription$ None
|
||||
SVar:DBBounce:DB$ ChangeZone | Defined$ Remembered | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBCleanup | StackDescription$ None
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
DeckHas:Ability$Sacrifice
|
||||
Oracle:Choose two target creatures controlled by the same player. Their controller chooses and sacrifices one of them. Return the other to its owner's hand.
|
||||
|
||||
@@ -4,5 +4,5 @@ Types:Ongoing Scheme
|
||||
S:Mode$ ReduceCost | EffectZone$ Command | ValidCard$ Card | Type$ Spell | Activator$ You | Amount$ 1 | Description$ Spells you cast cost {1} less to cast.
|
||||
T:Mode$ Phase | Phase$ End Of Turn | ValidPlayer$ Player.Opponent | Execute$ Abandon | TriggerZones$ Command | CheckSVar$ X | SVarCompare$ GE4 | TriggerDescription$ At the beginning of your opponents' end step, if they cast four or more spells this turn, abandon this scheme.
|
||||
SVar:Abandon:DB$ Abandon
|
||||
SVar:X:Count$ThisTurnCast_Card.YouDontCtrl
|
||||
SVar:X:Count$ThisTurnCast_Card.ActivePlayerCtrl
|
||||
Oracle:(An ongoing scheme remains face up until it's abandoned.)\nSpells you cast cost {1} less to cast.\nAt the beginning of your opponents' end step, if they cast four or more spells this turn, abandon this scheme.
|
||||
|
||||
@@ -4,7 +4,7 @@ Types:Creature Bird
|
||||
PT:2/1
|
||||
K:Flying
|
||||
K:etbCounter:P1P1:1:CheckSVar$ Morbid:CARDNAME enters with a +1/+1 counter on it if a creature died this turn.
|
||||
SVar:Morbid:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature
|
||||
SVar:Morbid:Count$Morbid.1.0
|
||||
K:Plot:1 B
|
||||
DeckHas:Ability$Counters
|
||||
Oracle:Flying\nBlacksnag Buzzard enters with a +1/+1 counter on it if a creature died this turn.\nPlot {1}{B} (You may pay {1}{B} and exile this card from your hand. Cast it as a sorcery on a later turn without paying its mana cost. Plot only as a sorcery.)
|
||||
|
||||
@@ -4,6 +4,6 @@ Types:Creature Beast
|
||||
PT:3/3
|
||||
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | CheckSVar$ Morbid | SVarCompare$ GE1 | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of your end step, if a creature died this turn, put a +1/+1 counter on CARDNAME.
|
||||
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
|
||||
SVar:Morbid:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature
|
||||
SVar:Morbid:Count$Morbid.1.0
|
||||
DeckHas:Ability$Counters
|
||||
Oracle:At the beginning of your end step, if a creature died this turn, put a +1/+1 counter on Bulette.
|
||||
|
||||
@@ -11,6 +11,6 @@ ALTERNATE
|
||||
Name:Release
|
||||
ManaCost:4 R W
|
||||
Types:Sorcery
|
||||
A:SP$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBSac | SpellDescription$ Each player sacrifices an artifact, a creature, an enchantment, a land, and a planeswalker.
|
||||
SVar:DBSac:DB$ Sacrifice | Defined$ Player.IsRemembered | SacValid$ Artifact & Creature & Enchantment & Land & Planeswalker | SacEachValid$ True
|
||||
A:SP$ Sacrifice | Defined$ Player | SacValid$ Artifact & Creature & Enchantment & Land & Planeswalker | SacEachValid$ True | SpellDescription$ Each player sacrifices an artifact, a creature, an enchantment, a land, and a planeswalker.
|
||||
DeckHas:Ability$Sacrifice
|
||||
Oracle:Each player sacrifices an artifact, a creature, an enchantment, a land, and a planeswalker.\nFuse (You may cast one or both halves of this card from your hand.)
|
||||
|
||||
@@ -5,8 +5,8 @@ PT:6/6
|
||||
K:First Strike
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBChoice | TriggerDescription$ When CARDNAME enters, target opponent may have you draw three cards. If the player doesn't, you mill three cards, then CARDNAME deals damage to that player equal to the total mana value of those cards.
|
||||
SVar:DBChoice:DB$ GenericChoice | ValidTgts$ Opponent | Choices$ CombustDraw,CombustDamage | AILogic$ CombustibleGearhulk
|
||||
SVar:CombustDraw:DB$ Draw | Defined$ You | NumCards$ 3 | SpellDescription$ Controller draws three cards
|
||||
SVar:CombustDamage:DB$ Mill | Defined$ You | NumCards$ 3 | RememberMilled$ True | SubAbility$ DamageOpponent | SpellDescription$ Controller mills three cards, then CARDNAME deals damage to you equal to their total mana value.
|
||||
SVar:CombustDraw:DB$ Draw | Defined$ You | NumCards$ 3 | SpellDescription$ CARDNAME's controller draws three cards.
|
||||
SVar:CombustDamage:DB$ Mill | Defined$ You | NumCards$ 3 | RememberMilled$ True | SubAbility$ DamageOpponent | SpellDescription$ CARDNAME's controller mills three cards, then it deals damage to you equal to the total mana value of those cards.
|
||||
SVar:DamageOpponent:DB$ DealDamage | Defined$ ParentTarget | NumDmg$ X | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
SVar:X:Remembered$SumCMC
|
||||
|
||||
@@ -3,14 +3,11 @@ ManaCost:3 R W
|
||||
Types:Legendary Creature Human Soldier
|
||||
PT:5/3
|
||||
T:Mode$ AttackersDeclared | AttackingPlayer$ You | Execute$ TrigDig | TriggerZones$ Battlefield | TriggerDescription$ Whenever you attack, spells you cast from exile this turn cost {X} less to cast, where X is the number of players being attacked. Exile the top X cards of your library. Until end of turn, you may cast spells from among those exiled cards.
|
||||
SVar:TrigDig:DB$ Dig | DigNum$ X | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBStoreNum
|
||||
SVar:DBStoreNum:DB$ StoreSVar | SVar$ Y | Type$ Calculate | Expression$ X | SubAbility$ DBEffect
|
||||
SVar:DBEffect:DB$ Effect | StaticAbilities$ ReduceCost,STPlay | RememberObjects$ Remembered | SubAbility$ DBCleanup
|
||||
SVar:ReduceCost:Mode$ ReduceCost | EffectZone$ Command | ValidCard$ Card.wasCastFromExile | Type$ Spell | Activator$ You | Amount$ Y | Description$ Spells you cast from exile this turn cost {X} less to cast, where X is the number of players you attacked.
|
||||
SVar:TrigDig:DB$ Dig | DigNum$ X | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBEffect
|
||||
SVar:DBEffect:DB$ Effect | StaticAbilities$ ReduceCost,STPlay | RememberObjects$ Remembered | SetChosenNumber$ X | SubAbility$ DBCleanup
|
||||
SVar:ReduceCost:Mode$ ReduceCost | EffectZone$ Command | ValidCard$ Card.wasCastFromExile | Type$ Spell | Activator$ You | Amount$ ChosenNumber | Description$ Spells you cast from exile this turn cost {X} less to cast, where X is the number of players you attacked.
|
||||
SVar:STPlay:Mode$ Continuous | Affected$ Card.IsRemembered+nonLand | EffectZone$ Command | AffectedZone$ Exile | MayPlay$ True | Description$ Until end of turn, you may cast spells from among those exiled cards.
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | SubAbility$ DBResetNum
|
||||
SVar:DBResetNum:DB$ StoreSVar | SVar$ Y | Type$ Number | Expression$ 0
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
SVar:X:TriggeredPlayersAttackedTarget$Amount
|
||||
SVar:Y:Number$0
|
||||
DeckHints:Keyword$Encore|Myriad
|
||||
Oracle:Whenever you attack, spells you cast from exile this turn cost {X} less to cast, where X is the number of players being attacked. Exile the top X cards of your library. Until end of turn, you may cast spells from among those exiled cards.
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
Name:Covetous Elegy
|
||||
ManaCost:4 W B
|
||||
Types:Sorcery
|
||||
A:SP$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBChooseSac | SubAbility$ DBSac | SpellDescription$ Each player chooses up to two creatures they control, then sacrifices the rest. Then you create a tapped Treasure token for each creature your opponents control.
|
||||
SVar:DBChooseSac:DB$ ChooseCard | Defined$ Remembered | Choices$ Creature.RememberedPlayerCtrl | Amount$ 2 | ChoiceTitle$ Choose two creatures not to be sacrificed | RememberChosen$ True
|
||||
SVar:DBSac:DB$ SacrificeAll | ValidCards$ Creature.IsNotRemembered | SubAbility$ DBToken
|
||||
SVar:DBToken:DB$ Token | TokenScript$ c_a_treasure_sac | TokenAmount$ X | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
A:SP$ ChooseCard | Defined$ Player | Choices$ Creature | ControlledByPlayer$ Chooser | MinAmount$ 0 | Amount$ 2 | ChoiceTitle$ Choose up to two creatures to keep | Reveal$ True | SubAbility$ SacAllOthers | StackDescription$ SpellDescription | SpellDescription$ Each player chooses up to two creatures they control, then sacrifices the rest. Then you create a tapped Treasure token for each creature your opponents control.
|
||||
SVar:SacAllOthers:DB$ SacrificeAll | ValidCards$ Creature.nonChosenCard | SubAbility$ DBToken
|
||||
SVar:DBToken:DB$ Token | TokenScript$ c_a_treasure_sac | TokenAmount$ X
|
||||
SVar:X:Count$Valid Creature.OppCtrl
|
||||
AI:RemoveDeck:All
|
||||
DeckHas:Ability$Token|Sacrifice & Type$Treasure
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
Name:Crackling Doom
|
||||
ManaCost:R W B
|
||||
Types:Instant
|
||||
A:SP$ DealDamage | Defined$ Player.Opponent | NumDmg$ 2 | SubAbility$ DBRepeat | AILogic$ OpponentHasCreatures | SpellDescription$ CARDNAME deals 2 damage to each opponent. Each opponent sacrifices a creature with the greatest power among creatures that player controls.
|
||||
A:SP$ DealDamage | Defined$ Player.Opponent | NumDmg$ 2 | SubAbility$ DBRepeat | SpellDescription$ CARDNAME deals 2 damage to each opponent. Each opponent sacrifices a creature with the greatest power among creatures that player controls.
|
||||
SVar:DBRepeat:DB$ RepeatEach | RepeatPlayers$ Player.Opponent | RepeatSubAbility$ DBChooseCard | SubAbility$ DBSac
|
||||
SVar:DBChooseCard:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.greatestPowerControlledByRemembered | ChoiceTitle$ Choose a creature you control with the greatest power | Mandatory$ True | RememberChosen$ True
|
||||
SVar:DBChooseCard:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.greatestPowerControlledByRemembered | ChoiceTitle$ Choose a creature you control with the greatest power | Mandatory$ True | Reveal$ True | RememberChosen$ True
|
||||
SVar:DBSac:DB$ SacrificeAll | ValidCards$ Card.IsRemembered | SubAbility$ DBCleanup | StackDescription$ Each opponent sacrifices a creature with the greatest power among creatures they control.
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
SVar:NeedsToPlay:Creature.OppCtrl
|
||||
Oracle:Crackling Doom deals 2 damage to each opponent. Each opponent sacrifices a creature with the greatest power among creatures that player controls.
|
||||
|
||||
@@ -3,6 +3,6 @@ ManaCost:2 U
|
||||
Types:Instant
|
||||
A:SP$ Pump | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Choose up to one target creature each opponent controls | TargetMin$ 0 | TargetMax$ OneEach | TargetsForEachPlayer$ True | SubAbility$ DBRepeat | SpellDescription$ For each opponent, choose up to one target creature that player controls, then return that creature to its owner's hand unless its controller has you draw a card.
|
||||
SVar:DBRepeat:DB$ RepeatEach | DefinedCards$ Targeted | RepeatSubAbility$ DBReturn
|
||||
SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Battlefield | Destination$ Hand | UnlessCost$ Draw<1/Player.YouActivator> | UnlessPayer$ RememberedController
|
||||
SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Battlefield | Destination$ Hand | UnlessCost$ Draw<1/Player.Activator> | UnlessPayer$ RememberedController
|
||||
SVar:OneEach:PlayerCountOpponents$Amount
|
||||
Oracle:For each opponent, choose up to one target creature that player controls, then return that creature to its owner's hand unless its controller has you draw a card.
|
||||
|
||||
@@ -6,7 +6,7 @@ T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | E
|
||||
A:AB$ Destroy | ValidTgts$ Land | TgtPrompt$ Select target land. | Cost$ T | SpellDescription$ Destroy target land.
|
||||
SVar:DBTap:DB$ Tap | Defined$ Self | UnlessCost$ B B B | UnlessPayer$ You | UnlessResolveSubs$ WhenNotPaid | SubAbility$ DBChooseOpponent
|
||||
SVar:DBChooseOpponent:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | ChoiceTitle$ Choose an opponent | SubAbility$ DBChooseLand
|
||||
SVar:DBChooseLand:DB$ ChooseCard | Defined$ ChosenPlayer | Choices$ Land.YouCtrl | Mandatory$ True | ChoiceTitle$ Select a land for opponent to sacrifice | SubAbility$ DBSacLand
|
||||
SVar:DBChooseLand:DB$ ChooseCard | Defined$ ChosenPlayer | Choices$ Land.YouCtrl | Mandatory$ True | Reveal$ True | ChoiceTitle$ Select a land for opponent to sacrifice | SubAbility$ DBSacLand
|
||||
SVar:DBSacLand:DB$ SacrificeAll | Defined$ ChosenCard
|
||||
SVar:PlayMain1:FALSE
|
||||
DeckHas:Ability$Sacrifice
|
||||
|
||||
@@ -2,9 +2,9 @@ Name:Divine Reckoning
|
||||
ManaCost:2 W W
|
||||
Types:Sorcery
|
||||
K:Flashback:5 W W
|
||||
A:SP$ RepeatEach | AILogic$ OpponentHasMultipleCreatures | RepeatPlayers$ Player | RepeatSubAbility$ DBChoose | SubAbility$ DBDestroyAll | SpellDescription$ Each player chooses a creature they control. Destroy the rest.
|
||||
SVar:DBChoose:DB$ ChooseCard | Defined$ Remembered | Amount$ 1 | Choices$ Creature.RememberedPlayerCtrl | Mandatory$ True | RememberChosen$ True
|
||||
SVar:DBDestroyAll:DB$ DestroyAll | ValidCards$ Creature.IsNotRemembered | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
A:SP$ ChooseCard | Defined$ Player | Amount$ 1 | Choices$ Creature | ControlledByPlayer$ Chooser | Mandatory$ True | SubAbility$ DBDestroyAll | SpellDescription$ Each player chooses a creature they control. Destroy the rest.
|
||||
SVar:DBDestroyAll:DB$ DestroyAll | ValidCards$ Creature.!ChosenCard
|
||||
AI:RemoveDeck:All
|
||||
SVar:NeedsToPlayVar:Z GE2
|
||||
SVar:Z:Count$Valid Creature.OppCtrl
|
||||
Oracle:Each player chooses a creature they control. Destroy the rest.\nFlashback {5}{W}{W} (You may cast this card from your graveyard for its flashback cost. Then exile it.)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Name:Doomsday
|
||||
ManaCost:B B B
|
||||
Types:Sorcery
|
||||
A:SP$ ChangeZone | Origin$ Graveyard,Library | Destination$ Library | ChangeType$ Card | ChangeNum$ 5 | SubAbility$ DBChangeZone | RememberChanged$ True | Mandatory$ True | SpellDescription$ Search your library and graveyard for five cards and exile the rest. Put the chosen cards on top of your library in any order. You lose half your life, rounded up.
|
||||
A:SP$ ChangeZone | Origin$ Graveyard,Library | Destination$ Library | ChangeType$ Card | ChangeNum$ 5 | Shuffle$ False | SubAbility$ DBChangeZone | RememberChanged$ True | Mandatory$ True | SpellDescription$ Search your library and graveyard for five cards and exile the rest. Put the chosen cards on top of your library in any order. You lose half your life, rounded up.
|
||||
SVar:DBChangeZone:DB$ ChangeZoneAll | Defined$ You | Origin$ Graveyard,Library | Destination$ Exile | ChangeType$ Card.IsNotRemembered | SubAbility$ DBDig
|
||||
SVar:DBDig:DB$ RearrangeTopOfLibrary | Defined$ You | NumCards$ X | SubAbility$ DBLoseLife
|
||||
SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ Y | SubAbility$ DBCleanup
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:3 R G
|
||||
Types:Legendary Artifact
|
||||
T:Mode$ AttackersDeclared | AttackingPlayer$ You | Execute$ TrigScry | TriggerZones$ Battlefield | TriggerDescription$ Whenever you attack, scry 2, then you may reveal the top card of your library. If it's a creature card, put it onto the battlefield tapped and attacking. Until your next turn, it gains trample if you control a Dwarf and hexproof if you control an Elf.
|
||||
SVar:TrigScry:DB$ Scry | ScryNum$ 2 | SubAbility$ DBDig
|
||||
SVar:DBDig:DB$ Dig | DigNum$ 1 | ChangeNum$ All | Optional$ True | Reveal$ True | ChangeValid$ Creature | DestinationZone$ Battlefield | Tapped$ True | Attacking$ True | RememberChanged$ True | SubAbility$ DBPumpTrample
|
||||
SVar:DBDig:DB$ Dig | DigNum$ 1 | ChangeNum$ All | RevealOptional$ True | RememberRevealed$ True | ChangeValid$ Creature.IsRemembered | DestinationZone$ Battlefield | Tapped$ True | Attacking$ True | SubAbility$ DBPumpTrample
|
||||
SVar:DBPumpTrample:DB$ Pump | Defined$ Remembered | KW$ Trample | Duration$ UntilYourNextTurn | ConditionPresent$ Dwarf.YouCtrl | SubAbility$ DBPumpHexproof
|
||||
SVar:DBPumpHexproof:DB$ Pump | Defined$ Remembered | KW$ Hexproof | Duration$ UntilYourNextTurn | ConditionPresent$ Elf.YouCtrl | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
|
||||
@@ -4,7 +4,7 @@ Types:Creature Mouse Warrior
|
||||
PT:2/2
|
||||
K:Haste
|
||||
K:Prowess
|
||||
T:Mode$ BecomesTarget | ValidTarget$ Card.Self | ValidSource$ SpellAbility.YouCtrl | TriggerZones$ Battlefield | FirstTime$ True | Execute$ TrigExile | TriggerDescription$ Valiant — Whenever CARDNAME becomes the target of a spell or ability you control for the first time each turn, exile the top card of your library. Until end of turn, you may play that card.
|
||||
T:Mode$ BecomesTarget | ValidTarget$ Card.Self | ValidSource$ SpellAbility.YouCtrl | TriggerZones$ Battlefield | Valiant$ True | Execute$ TrigExile | TriggerDescription$ Valiant — Whenever CARDNAME becomes the target of a spell or ability you control for the first time each turn, exile the top card of your library. Until end of turn, you may play that card.
|
||||
SVar:TrigExile:DB$ Dig | Defined$ You | DigNum$ 1 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBEffect
|
||||
SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ Play | SubAbility$ DBCleanup | ExileOnMoved$ Exile
|
||||
SVar:Play:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may play remembered card.
|
||||
|
||||
@@ -5,6 +5,6 @@ PT:2/4
|
||||
K:Flying
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | CheckSVar$ Morbid | SVarCompare$ GE1 | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters, if a creature died this turn, create a 1/1 white Spirit creature token with flying.
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ w_1_1_spirit_flying | TokenOwner$ You
|
||||
SVar:Morbid:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature
|
||||
SVar:Morbid:Count$Morbid.1.0
|
||||
DeckHas:Ability$Token
|
||||
Oracle:Flying\nWhen Emissary of the Sleepless enters, if a creature died this turn, create a 1/1 white Spirit creature token with flying.
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:2 B B
|
||||
Types:Instant
|
||||
S:Mode$ AlternativeCost | ValidSA$ Spell.Self | EffectZone$ All | Cost$ Sac<1/Creature.Black+nonToken/a nontoken black creature> | Description$ You may sacrifice a nontoken black creature rather than pay this spell's mana cost.
|
||||
A:SP$ RepeatEach | RepeatPlayers$ Player.Opponent | RepeatSubAbility$ DBChooseCard | SubAbility$ DBSacAll | SpellDescription$ Each opponent sacrifices a creature or planeswalker with the greatest mana value among creatures and planeswalkers they control.
|
||||
SVar:DBChooseCard:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.RememberedPlayerCtrl+cmcEQX,Planeswalker.RememberedPlayerCtrl+cmcEQX | ChoiceTitle$ Choose a creature or planeswalker with the greatest mana value among creatures and planeswalkers you control | Mandatory$ True | RememberChosen$ True
|
||||
SVar:DBChooseCard:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.RememberedPlayerCtrl+cmcEQX,Planeswalker.RememberedPlayerCtrl+cmcEQX | ChoiceTitle$ Choose a creature or planeswalker with the greatest mana value among creatures and planeswalkers you control | Mandatory$ True | Reveal$ True | RememberChosen$ True
|
||||
SVar:X:Count$Valid Creature.RememberedPlayerCtrl,Planeswalker.RememberedPlayerCtrl$GreatestCMC
|
||||
SVar:DBSacAll:DB$ SacrificeAll | ValidCards$ Card.IsRemembered | SubAbility$ DBCleanup
|
||||
SVar:DBCleanupChosen:DB$ Cleanup | ClearChosenPlayer$ True
|
||||
|
||||
@@ -3,6 +3,6 @@ ManaCost:W
|
||||
Types:Creature Mouse Soldier
|
||||
PT:1/2
|
||||
K:Offspring:2
|
||||
T:Mode$ BecomesTarget | ValidTarget$ Card.Self | ValidSource$ SpellAbility.YouCtrl | TriggerZones$ Battlefield | FirstTime$ True | Execute$ TrigPumpAll | TriggerDescription$ Valiant — Whenever this creature becomes the target of a spell or ability you control for the first time each turn, Mice you control get +1/+0 until end of turn.
|
||||
T:Mode$ BecomesTarget | ValidTarget$ Card.Self | ValidSource$ SpellAbility.YouCtrl | TriggerZones$ Battlefield | Valiant$ True | Execute$ TrigPumpAll | TriggerDescription$ Valiant — Whenever this creature becomes the target of a spell or ability you control for the first time each turn, Mice you control get +1/+0 until end of turn.
|
||||
SVar:TrigPumpAll:DB$ PumpAll | ValidCards$ Mouse.YouCtrl | NumAtt$ 1
|
||||
Oracle:Offspring {2} (You may pay an additional {2} as you cast this spell. If you do, when this creature enters, create a 1/1 token copy of it.)\nValiant — Whenever this creature becomes the target of a spell or ability you control for the first time each turn, Mice you control get +1/+0 until end of turn.
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:2 G
|
||||
Types:Instant
|
||||
A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Hand | TgtPrompt$ Select target permanent card in your graveyard | ValidTgts$ Permanent.YouOwn | SubAbility$ DBToken | StackDescription$ SpellDescription | SpellDescription$ Return target permanent card from your graveyard to your hand. If a creature died this turn, create two 1/1 green Saproling creature tokens.
|
||||
SVar:DBToken:DB$ Token | TokenAmount$ 2 | TokenScript$ g_1_1_saproling | TokenOwner$ You | ConditionCheckSVar$ Morbid | ConditionSVarCompare$ GE1
|
||||
SVar:Morbid:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature
|
||||
SVar:Morbid:Count$Morbid.1.0
|
||||
DeckHints:Type$Fungus
|
||||
DeckHas:Ability$Token
|
||||
Oracle:Return target permanent card from your graveyard to your hand. If a creature died this turn, create two 1/1 green Saproling creature tokens.
|
||||
|
||||
@@ -5,6 +5,6 @@ PT:3/5
|
||||
K:Reach
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | CheckSVar$ Morbid | SVarCompare$ GE1 | Execute$ TrigInvestigate | TriggerDescription$ Morbid — When CARDNAME enters, if a creature died this turn, investigate. (Create a colorless Clue artifact token with "{2}, Sacrifice this artifact: Draw a card.")
|
||||
SVar:TrigInvestigate:DB$ Investigate
|
||||
SVar:Morbid:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature
|
||||
SVar:Morbid:Count$Morbid.1.0
|
||||
DeckHas:Ability$Investigate|Token
|
||||
Oracle:Reach\nMorbid — When Funnel-Web Recluse enters, if a creature died this turn, investigate. (Create a colorless Clue artifact token with "{2}, Sacrifice this artifact: Draw a card.")
|
||||
|
||||
@@ -8,7 +8,7 @@ SVar:DBPump:DB$ Pump | Defined$ ChosenCard | KW$ Lifelink
|
||||
SVar:DBMurder:DB$ DestroyAll | ValidCards$ Creature.powerLE2 | SpellDescription$ Destroy each creature with power 2 or less.
|
||||
SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ChangeNum$ 2 | ChangeType$ Creature.YouOwn | SelectPrompt$ Select up to two creature cards from your graveyard to return to your hand | Hidden$ True | StackDescription$ {p:You} returns up to two creature cards from their graveyard to their hand. | SpellDescription$ Return up to two creature cards from your graveyard to your hand.
|
||||
SVar:DBSacrifice:DB$ RepeatEach | RepeatPlayers$ Player.Opponent | RepeatSubAbility$ DBChooseCard | SubAbility$ DBSac | SpellDescription$ Each opponent sacrifices a creature with the highest power among creatures they control.
|
||||
SVar:DBChooseCard:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.greatestPowerControlledByRemembered | ChoiceTitle$ Choose a creature you control with the greatest power | Mandatory$ True | RememberChosen$ True
|
||||
SVar:DBChooseCard:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.greatestPowerControlledByRemembered | ChoiceTitle$ Choose a creature you control with the greatest power | Mandatory$ True | Reveal$ True | RememberChosen$ True
|
||||
SVar:DBSac:DB$ SacrificeAll | ValidCards$ Card.IsRemembered | SubAbility$ DBCleanup | StackDescription$ Each opponent sacrifices a creature with the greatest power among creatures they control.
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
DeckHas:Ability$Sacrifice|LifeGain|Counters & Keyword$Lifelink
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
Name:Global Ruin
|
||||
ManaCost:4 W
|
||||
Types:Sorcery
|
||||
A:SP$ ChooseCard | Defined$ Player | EachBasicType$ Controlled | SubAbility$ DBDestroy | SpellDescription$ Each player chooses from the lands they control a land of each basic land type, then sacrifices the rest. | StackDescription$ SpellDescription
|
||||
A:SP$ ChooseCard | Defined$ Player | EachBasicType$ Controlled | Reveal$ True | SubAbility$ DBDestroy | SpellDescription$ Each player chooses from the lands they control a land of each basic land type, then sacrifices the rest. | StackDescription$ SpellDescription
|
||||
SVar:DBDestroy:DB$ SacrificeAll | ValidCards$ Land.nonChosenCard | StackDescription$ None
|
||||
AI:RemoveDeck:Random
|
||||
DeckHas:Ability$Sacrifice
|
||||
Oracle:Each player chooses from the lands they control a land of each basic land type, then sacrifices the rest.
|
||||
|
||||
@@ -4,7 +4,7 @@ Types:Legendary Creature Insect
|
||||
PT:1/2
|
||||
K:Deathtouch
|
||||
T:Mode$ ChangesZone | Origin$ Graveyard | Destination$ Battlefield | ValidCard$ Card.Self,Creature.YouCtrl | Execute$ TrigTransform | TriggerZones$ Battlefield | TriggerDescription$ When CARDNAME or another creature you control enters, if it entered from your graveyard or you cast it from your graveyard, you may pay {G}. If you do, exile NICKNAME, then return it to the battlefield transformed under its owner's control.
|
||||
T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self+wasCastFromYourGraveyardByYou,Creature.YouCtrl+wasCastFromYourGraveyardByYou | Execute$ TrigTransform | TriggerZones$ Battlefield | Secondary$ True | TriggerDescription$ When CARDNAME enters, if it entered from your graveyard or you cast it from your graveyard, you may pay {G}. If you do, exile NICKNAME, then return it to the battlefield transformed under its owner's control.
|
||||
T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self+wasCastFromYourGraveyardByYou,Creature.YouCtrl+wasCastFromYourGraveyardByYou | Execute$ TrigTransform | TriggerZones$ Battlefield | Secondary$ True | TriggerDescription$ When CARDNAME or another creature you control enters, if it entered from your graveyard or you cast it from your graveyard, you may pay {G}. If you do, exile NICKNAME, then return it to the battlefield transformed under its owner's control.
|
||||
SVar:TrigTransform:AB$ ChangeZone | Cost$ G | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBReturn
|
||||
SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | Transformed$ True | ForgetOtherRemembered$ True | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
@@ -22,7 +22,7 @@ A:AB$ Token | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | TokenAmount$ 1
|
||||
SVar:DBMill:DB$ Mill | Defined$ You | NumCards$ 2 | RememberMilled$ True | SubAbility$ DBPutCounter
|
||||
SVar:DBPutCounter:DB$ PutCounter | Defined$ Imprinted | CounterType$ Deathtouch | CounterNum$ 1 | ConditionDefined$ Remembered | ConditionPresent$ Card.Black | ConditionCompare$ EQ1 | SubAbility$ DBCleanup
|
||||
A:AB$ Destroy | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | ValidTgts$ Artifact,Enchantment | TgtPrompt$ Select target artifact or enchantment | SpellDescription$ Destroy target artifact or enchantment.
|
||||
A:AB$ CopyPermanent | Cost$ SubCounter<6/LOYALTY> | Planeswalker$ True | Ultimate$ True | Defined$ ValidGraveyard Creature.YouOwn | SetPower$ 1 | SetToughness$ 1 | SetColor$ Black & Green | SetCreatureTypes$ Insect | AILogic$ DuplicatePerms | SpellDescription$ For each creature card in your graveyard, create a token that's a copy of it, except it's a 1/1 black and green Insect.
|
||||
A:AB$ CopyPermanent | Cost$ SubCounter<6/LOYALTY> | Planeswalker$ True | Ultimate$ True | Defined$ ValidGraveyard Creature.YouOwn | SetPower$ 1 | SetToughness$ 1 | SetColor$ Black,Green | SetCreatureTypes$ Insect | AILogic$ DuplicatePerms | SpellDescription$ For each creature card in your graveyard, create a token that's a copy of it, except it's a 1/1 black and green Insect.
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True
|
||||
DeckHas:Ability$Token|Mill
|
||||
Oracle:[+1]: Create a 1/1 black and green Insect creature token, then mill two cards. Put a deathtouch counter on the token if a black card was milled this way.\n[-2]: Destroy target artifact or enchantment.\n[-6]: For each creature card in your graveyard, create a token that's a copy of it, except it's a 1/1 black and green Insect.
|
||||
|
||||
@@ -3,5 +3,5 @@ ManaCost:2 B B
|
||||
Types:Sorcery
|
||||
A:SP$ Discard | ValidTgts$ Player | Mode$ TgtChoose | NumCards$ 2 | ConditionCheckSVar$ Morbid | ConditionSVarCompare$ EQ0 | SubAbility$ MorbidDiscard | SpellDescription$ Target player discards two cards.
|
||||
SVar:MorbidDiscard:DB$ Discard | Defined$ Targeted | Mode$ RevealYouChoose | NumCards$ 2 | ConditionCheckSVar$ Morbid | ConditionSVarCompare$ GE1 | SpellDescription$ Morbid — If a creature died this turn, instead that player reveals their hand, you choose two cards from it, then that player discards those cards.
|
||||
SVar:Morbid:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature
|
||||
SVar:Morbid:Count$Morbid.1.0
|
||||
Oracle:Target player discards two cards.\nMorbid — If a creature died this turn, instead that player reveals their hand, you choose two cards from it, then that player discards those cards.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Heartfire Hero
|
||||
ManaCost:R
|
||||
Types:Creature Mouse Soldier
|
||||
PT:1/1
|
||||
T:Mode$ BecomesTarget | ValidTarget$ Card.Self | ValidSource$ SpellAbility.YouCtrl | TriggerZones$ Battlefield | FirstTime$ True | Execute$ TrigCounter | TriggerDescription$ Valiant — Whenever CARDNAME becomes the target of a spell or ability you control for the first time each turn, put a +1/+1 counter on it.
|
||||
T:Mode$ BecomesTarget | ValidTarget$ Card.Self | ValidSource$ SpellAbility.YouCtrl | TriggerZones$ Battlefield | Valiant$ True | Execute$ TrigCounter | TriggerDescription$ Valiant — Whenever CARDNAME becomes the target of a spell or ability you control for the first time each turn, put a +1/+1 counter on it.
|
||||
SVar:TrigCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
|
||||
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDamageDies | TriggerDescription$ When CARDNAME dies, it deals damage equal to its power to each opponent.
|
||||
SVar:TrigDamageDies:DB$ DealDamage | Defined$ Opponent | NumDmg$ X
|
||||
|
||||
@@ -4,5 +4,5 @@ Types:Creature Elemental
|
||||
PT:4/5
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | CheckSVar$ Morbid | SVarCompare$ GE1 | Execute$ TrigGainLife | TriggerDescription$ Morbid — When CARDNAME enters, if a creature died this turn, you gain 5 life.
|
||||
SVar:TrigGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 5
|
||||
SVar:Morbid:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature
|
||||
SVar:Morbid:Count$Morbid.1.0
|
||||
Oracle:Morbid — When Hollowhenge Scavenger enters, if a creature died this turn, you gain 5 life.
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:1 U U
|
||||
Types:Legendary Creature Human Wizard Advisor
|
||||
PT:2/4
|
||||
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | CheckSVar$ X | SVarCompare$ GE1 | Execute$ TrigDig | TriggerDescription$ At the beginning of your end step, if you've cast a noncreature spell this turn, reveal the top five cards of your library. For each card type among noncreature spells you've cast this turn, you may put a card of that type from among the revealed cards into your hand. Put the rest on the bottom of your library in a random order.
|
||||
SVar:TrigDig:DB$ Dig | DigNum$ 5 | Reveal$ True | NoMove$ True | RememberRevealed$ True | SubAbility$ DBRepeatEach
|
||||
SVar:TrigDig:DB$ PeekAndReveal | PeekAmount$ 5 | NoPeek$ True | RememberRevealed$ True | SubAbility$ DBRepeatEach
|
||||
SVar:DBRepeatEach:DB$ RepeatEach | RepeatTypesFrom$ ThisTurnCast_Card.nonCreature+YouCtrl+sharesCardTypeWith Remembered | RepeatSubAbility$ ChooseCard | SubAbility$ DBChangeZoneAll
|
||||
SVar:ChooseCard:DB$ ChooseCard | Choices$ Card.IsRemembered+ChosenType | ImprintChosen$ True | ForgetChosen$ True | ChoiceTitle$ You may choose a card of this type to put into your hand | ChoiceTitleAppend$ ChosenType | ChoiceZone$ Library
|
||||
SVar:DBChangeZoneAll:DB$ ChangeZone | Defined$ Imprinted | Origin$ Library | Destination$ Hand | SubAbility$ DBRestRandomOrder
|
||||
|
||||
@@ -4,4 +4,5 @@ Types:Sorcery
|
||||
A:SP$ Pump | ValidTgts$ Creature | TgtPrompt$ Choose two target creatures controlled by the same player | TargetMin$ 2 | TargetMax$ 2 | TargetUnique$ True | TargetsWithSameController$ True | IsCurse$ True | SubAbility$ DBChooseSac | StackDescription$ SpellDescription | SpellDescription$ Choose two target creatures controlled by the same player. That player sacrifices one of them.
|
||||
SVar:DBChooseSac:DB$ ChooseCard | DefinedCards$ Targeted | Defined$ TargetedController | ChoiceTitle$ Choose one to sacrifice | SubAbility$ DBSac | StackDescription$ None | AILogic$ WorstCard
|
||||
SVar:DBSac:DB$ SacrificeAll | Defined$ ChosenCard | StackDescription$ None
|
||||
DeckHas:Ability$Sacrifice
|
||||
Oracle:Choose two target creatures controlled by the same player. That player sacrifices one of them.
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:B R
|
||||
Types:Battle Siege
|
||||
Defense:4
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacrifice | TriggerDescription$ When CARDNAME enters, target player sacrifices a creature or planeswalker and loses 1 life.
|
||||
SVar:TrigSacrifice:DB$ Sacrifice | ValidTgts$ Player | SacValid$ Creature,Planeswalker | SacMessage$ Creature or Planeswalker | SubAbility$ DBLoseLife
|
||||
SVar:TrigSacrifice:DB$ Sacrifice | ValidTgts$ Player | SacValid$ Creature,Planeswalker | SacMessage$ creature or planeswalker | SubAbility$ DBLoseLife
|
||||
SVar:DBLoseLife:DB$ LoseLife | Defined$ TargetedPlayer | LifeAmount$ 1
|
||||
DeckHas:Ability$Sacrifice|Counters
|
||||
AlternateMode:DoubleFaced
|
||||
|
||||
@@ -2,8 +2,9 @@ Name:Isolated Watchtower
|
||||
ManaCost:no cost
|
||||
Types:Land
|
||||
A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}.
|
||||
A:AB$ Scry | Cost$ 2 T | ScryNum$ 1 | SubAbility$ DBReveal | CheckSVar$ X | SVarCompare$ GEY | SpellDescription$ Scry 1, then you may reveal the top card of your library. If a basic land card is revealed this way, put it onto the battlefield tapped. Activate only if an opponent controls at least two more lands than you.
|
||||
SVar:DBReveal:DB$ Dig | Optional$ True | DigNum$ 1 | Reveal$ True | ChangeValid$ Land.Basic | DestinationZone$ Battlefield | Tapped$ True | DestinationZone2$ Library | LibraryPosition2$ 0
|
||||
A:AB$ Scry | Cost$ 2 T | ScryNum$ 1 | SubAbility$ DBReveal | CheckSVar$ X | SVarCompare$ GEY | StackDescription$ REP Scry_{p:You} scries & you may_they may & your_their & put_{p:You} puts & . Activate only if an opponent controls at least two more lands than you._. | SpellDescription$ Scry 1, then you may reveal the top card of your library. If a basic land card is revealed this way, put it onto the battlefield tapped. Activate only if an opponent controls at least two more lands than you.
|
||||
SVar:DBReveal:DB$ Dig | DigNum$ 1 | RevealOptional$ True | RememberRevealed$ True | ChangeValid$ Land.Basic+IsRemembered | ChangeNum$ All | DestinationZone$ Battlefield | Tapped$ True | DestinationZone2$ Library | LibraryPosition2$ 0 | SubAbility$ DBCleanup | StackDescription$ None
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
SVar:X:PlayerCountOpponents$HighestValid Land.YouCtrl
|
||||
SVar:Y:Count$Valid Land.YouCtrl/Plus.2
|
||||
Oracle:{T}: Add {C}.\n{2}, {T}: Scry 1, then you may reveal the top card of your library. If a basic land card is revealed this way, put it onto the battlefield tapped. Activate only if an opponent controls at least two more lands than you.
|
||||
|
||||
@@ -3,8 +3,8 @@ ManaCost:3 R R
|
||||
Types:Creature Human Soldier
|
||||
PT:3/3
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChooseThree | TriggerDescription$ When CARDNAME enters, each player sacrifices all lands they control except for three.
|
||||
SVar:TrigChooseThree:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBChoose | SubAbility$ DBSacrificeAll
|
||||
SVar:DBChoose:DB$ ChooseCard | Amount$ 3 | Defined$ Remembered | Choices$ Land.RememberedPlayerCtrl | ChoiceZone$ Battlefield | RememberChosen$ True | ChoiceTitle$ Choose three lands that would not be sacrificed
|
||||
SVar:DBSacrificeAll:DB$ SacrificeAll | ValidCards$ Land.IsNotRemembered | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
SVar:TrigChooseThree:DB$ ChooseCard | Defined$ Player | Choices$ Land | ControlledByPlayer$ Chooser | Amount$ 3 | ChoiceTitle$ Choose three lands to keep | Mandatory$ True | Reveal$ True | SubAbility$ SacAllOthers
|
||||
SVar:DBSacrificeAll:DB$ SacrificeAll | ValidCards$ Land.nonChosenCard | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True
|
||||
DeckHas:Ability$Sacrifice
|
||||
Oracle:When Keldon Firebombers enters, each player sacrifices all lands they control except for three.
|
||||
|
||||
@@ -11,4 +11,5 @@ SVar:X:Count$xPaid
|
||||
SVar:Y:SVar$X/Times.Z
|
||||
SVar:Z:Count$Valid Creature.RememberedPlayerCtrl+IsRemembered
|
||||
AI:RemoveDeck:All
|
||||
DeckHas:Ability$Sacrifice
|
||||
Oracle:For each creature, its controller sacrifices it unless they pay X life.
|
||||
|
||||
@@ -6,11 +6,9 @@ T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$
|
||||
SVar:TrigDraw:DB$ Draw
|
||||
A:AB$ Token | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | TokenScript$ b_2_2_zombie | SpellDescription$ Create a 2/2 black Zombie creature token.
|
||||
A:AB$ Sacrifice | Cost$ SubCounter<4/LOYALTY> | Planeswalker$ True | Amount$ 2 | SacValid$ Creature | Defined$ Player | SpellDescription$ Each player sacrifices two creatures.
|
||||
A:AB$ RepeatEach | Cost$ SubCounter<9/LOYALTY> | Planeswalker$ True | Ultimate$ True | RepeatPlayers$ Opponent | RepeatSubAbility$ ChoosePerms | SubAbility$ SacAllOthers | SpellDescription$ Each opponent chooses a permanent they control of each permanent type and sacrifices the rest.
|
||||
SVar:ChoosePerms:DB$ RepeatEach | RepeatTypesFrom$ Permanent.RememberedPlayerCtrl | ChooseOrder$ RememberedPlayer | RepeatSubAbility$ ChooseCard
|
||||
SVar:ChooseCard:DB$ ChooseCard | Defined$ RememberedPlayer | Choices$ Card.ChosenType+RememberedPlayerCtrl | ChoiceTitle$ Choose a card of this type to keep | ChoiceTitleAppend$ ChosenType | RememberChosen$ True | Mandatory$ True
|
||||
SVar:SacAllOthers:DB$ SacrificeAll | ValidCards$ Permanent.IsNotRemembered+OppCtrl | SubAbility$ DBCleanup | StackDescription$ None
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True
|
||||
A:AB$ ChooseCard | Cost$ SubCounter<9/LOYALTY> | Planeswalker$ True | Ultimate$ True | Defined$ Opponent | Choices$ Permanent | ChooseEach$ Artifact & Battle & Creature & Enchantment & Land & Planeswalker | ControlledByPlayer$ Chooser | Mandatory$ True | Reveal$ True | SubAbility$ SacAllOthers | StackDescription$ SpellDescription | SpellDescription$ Each opponent chooses a permanent they control of each permanent type and sacrifices the rest.
|
||||
SVar:SacAllOthers:DB$ SacrificeAll | ValidCards$ Permanent.nonChosenCard+OppCtrl | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True
|
||||
DeckHas:Ability$Token|Sacrifice & Type$Zombie
|
||||
SVar:PlayMain1:TRUE
|
||||
Oracle:Whenever a creature you control dies, draw a card.\n[+1]: Create a 2/2 black Zombie creature token.\n[-4]: Each player sacrifices two creatures.\n[-9]: Each opponent chooses a permanent they control of each permanent type and sacrifices the rest.
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
Name:Limited Resources
|
||||
ManaCost:W
|
||||
Types:Enchantment
|
||||
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ DBRepeatResources | TriggerDescription$ When CARDNAME enters, each player chooses five lands they control and sacrifices the rest.
|
||||
SVar:DBRepeatResources:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ CardChoice
|
||||
SVar:CardChoice:DB$ ChooseCard | Defined$ Remembered | Amount$ 5 | Choices$ Land.RememberedPlayerCtrl | ChoiceTitle$ Choose a land | RememberChosen$ True | SubAbility$ SacRest
|
||||
SVar:SacRest:DB$ SacrificeAll | ValidCards$ Land.RememberedPlayerCtrl+IsNotRemembered | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ DBCardChoice | TriggerDescription$ When CARDNAME enters, each player chooses five lands they control and sacrifices the rest.
|
||||
SVar:DBCardChoice:DB$ ChooseCard | Defined$ Player | Choices$ Land | ControlledByPlayer$ Chooser | Amount$ 5 | ChoiceTitle$ Choose five lands to keep | Mandatory$ True | Reveal$ True | SubAbility$ SacRest
|
||||
SVar:SacRest:DB$ SacrificeAll | ValidCards$ Land.nonChosenCard | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True
|
||||
S:Mode$ CantPlayLand | IsPresent$ Land | PresentCompare$ GE10 | Description$ Players can't play lands as long as ten or more lands are on the battlefield.
|
||||
SVar:NonStackingEffect:True
|
||||
AI:RemoveDeck:All
|
||||
AI:RemoveDeck:Random
|
||||
DeckHas:Ability$Sacrifice
|
||||
Oracle:When Limited Resources enters, each player chooses five lands they control and sacrifices the rest.\nPlayers can't play lands as long as ten or more lands are on the battlefield.
|
||||
|
||||
@@ -4,5 +4,5 @@ Types:Instant
|
||||
A:SP$ Destroy | ValidTgts$ Creature.nonBlack | TgtPrompt$ Select target nonblack creature | SpellDescription$ Destroy target nonblack creature.
|
||||
T:Mode$ SpellCast | ValidCard$ Card.Self | Execute$ TrigCopy | CheckSVar$ Morbid | SVarCompare$ GE1 | OptionalDecider$ You | TriggerDescription$ Morbid — When you cast this spell, if a creature died this turn, you may copy CARDNAME and may choose a new target for the copy.
|
||||
SVar:TrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | MayChooseTarget$ True
|
||||
SVar:Morbid:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature
|
||||
SVar:Morbid:Count$Morbid.1.0
|
||||
Oracle:Morbid — When you cast this spell, if a creature died this turn, you may copy Malicious Affliction and may choose a new target for the copy.\nDestroy target nonblack creature.
|
||||
|
||||
@@ -4,5 +4,5 @@ Types:Creature Spirit
|
||||
PT:4/4
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | CheckSVar$ Morbid | SVarCompare$ GE1 | Execute$ TrigPump | TriggerDescription$ Morbid — When CARDNAME enters, if a creature died this turn, target creature gets -4/-4 until end of turn.
|
||||
SVar:TrigPump:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | IsCurse$ True | NumAtt$ -4 | NumDef$ -4
|
||||
SVar:Morbid:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature
|
||||
SVar:Morbid:Count$Morbid.1.0
|
||||
Oracle:Morbid — When Morkrut Banshee enters, if a creature died this turn, target creature gets -4/-4 until end of turn.
|
||||
|
||||
@@ -3,6 +3,6 @@ ManaCost:2 W
|
||||
Types:Creature Mouse Soldier
|
||||
PT:3/2
|
||||
K:Flash
|
||||
T:Mode$ BecomesTarget | ValidTarget$ Card.Self | ValidSource$ SpellAbility.YouCtrl | TriggerZones$ Battlefield | FirstTime$ True | Execute$ TrigTap | TriggerDescription$ Valiant — Whenever CARDNAME becomes the target of a spell or ability you control for the first time each turn, tap target creature an opponent controls.
|
||||
T:Mode$ BecomesTarget | ValidTarget$ Card.Self | ValidSource$ SpellAbility.YouCtrl | TriggerZones$ Battlefield | Valiant$ True | Execute$ TrigTap | TriggerDescription$ Valiant — Whenever CARDNAME becomes the target of a spell or ability you control for the first time each turn, tap target creature an opponent controls.
|
||||
SVar:TrigTap:DB$ Tap | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Choose target creature an opponent controls.
|
||||
Oracle:Flash\nValiant — Whenever Mouse Trapper becomes the target of a spell or ability you control for the first time each turn, tap target creature an opponent controls.
|
||||
|
||||
@@ -5,6 +5,6 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ w_1_1_spirit_flying | TokenOwner$ You
|
||||
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | CheckSVar$ Morbid | SVarCompare$ GE1 | Execute$ DBCopy | TriggerDescription$ Morbid — At the beginning of your end step, if a creature died this turn, populate. (Create a token that's a copy of a creature token you control.)
|
||||
SVar:DBCopy:DB$ CopyPermanent | Choices$ Creature.token+YouCtrl | NumCopies$ 1 | Populate$ True
|
||||
SVar:Morbid:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature
|
||||
SVar:Morbid:Count$Morbid.1.0
|
||||
DeckHas:Ability$Token & Type$Spirit
|
||||
Oracle:When Muster the Departed enters, create a 1/1 white Spirit creature token with flying.\nMorbid — At the beginning of your end step, if a creature died this turn, populate. (Create a token that's a copy of a creature token you control.)
|
||||
|
||||
@@ -6,7 +6,7 @@ SVar:OneOppSac:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | SubA
|
||||
SVar:DBSac:DB$ Sacrifice | Defined$ ChosenPlayer | SacValid$ Creature | SubAbility$ DBCleanupChosen
|
||||
SVar:EachOppSac:DB$ Sacrifice | Defined$ Player.Opponent | SacValid$ Creature | StackDescription$ SpellDescription | SpellDescription$ 10—19 VERT Each opponent sacrifices a creature.
|
||||
SVar:SacTopPower:DB$ RepeatEach | RepeatPlayers$ Player.Opponent | RepeatSubAbility$ DBChooseCard | SubAbility$ DBSacAll | StackDescription$ SpellDescription | SpellDescription$ 20 VERT Each opponent sacrifices a creature with the greatest power among creatures that player controls.
|
||||
SVar:DBChooseCard:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.greatestPowerControlledByRemembered | ChoiceTitle$ Choose a creature you control with the greatest power | Mandatory$ True | RememberChosen$ True
|
||||
SVar:DBChooseCard:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.greatestPowerControlledByRemembered | ChoiceTitle$ Choose a creature you control with the greatest power | Mandatory$ True | Reveal$ True | RememberChosen$ True
|
||||
SVar:DBSacAll:DB$ SacrificeAll | ValidCards$ Card.IsRemembered | SubAbility$ DBCleanup
|
||||
SVar:DBCleanupChosen:DB$ Cleanup | ClearChosenPlayer$ True
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Nettle Guard
|
||||
ManaCost:1 W
|
||||
Types:Creature Mouse Soldier
|
||||
PT:3/1
|
||||
T:Mode$ BecomesTarget | ValidTarget$ Card.Self | ValidSource$ SpellAbility.YouCtrl | TriggerZones$ Battlefield | FirstTime$ True | Execute$ TrigPump | TriggerDescription$ Valiant — Whenever CARDNAME becomes the target of a spell or ability you control for the first time each turn, it gets +0/+2 until end of turn.
|
||||
T:Mode$ BecomesTarget | ValidTarget$ Card.Self | ValidSource$ SpellAbility.YouCtrl | TriggerZones$ Battlefield | Valiant$ True | Execute$ TrigPump | TriggerDescription$ Valiant — Whenever CARDNAME becomes the target of a spell or ability you control for the first time each turn, it gets +0/+2 until end of turn.
|
||||
SVar:TrigPump:DB$ Pump | Defined$ Self | NumDef$ 2
|
||||
A:AB$ Destroy | Cost$ 1 Sac<1/CARDNAME> | ValidTgts$ Artifact,Enchantment | TgtPrompt$ Select target artifact or enchantment | SpellDescription$ Destroy target artifact or enchantment.
|
||||
Oracle:Valiant — Whenever Nettle Guard becomes the target of a spell or ability you control for the first time each turn, it gets +0/+2 until end of turn.\n{1}, Sacrifice Nettle Guard: Destroy target artifact or enchantment.
|
||||
|
||||
@@ -2,8 +2,7 @@ Name:No One Will Hear Your Cries
|
||||
ManaCost:no cost
|
||||
Types:Scheme
|
||||
T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ TrigChoose | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, each opponent chooses a creature they control, then sacrifices the rest.
|
||||
SVar:TrigChoose:DB$ RepeatEach | RepeatPlayers$ Player.Opponent | RepeatSubAbility$ ChooseCreature | SubAbility$ DBSacrificeAll
|
||||
SVar:ChooseCreature:DB$ ChooseCard | Defined$ Remembered | Amount$ 1 | Choices$ Creature.RememberedPlayerCtrl | ChoiceTitle$ Choose a creature | Mandatory$ True
|
||||
SVar:TrigChoose:DB$ ChooseCard | Defined$ Opponent | Choices$ Creature | ControlledByPlayer$ Chooser | ChoiceTitle$ Choose a creature to keep | Mandatory$ True | Reveal$ True | SubAbility$ DBSacrificeAll
|
||||
SVar:DBSacrificeAll:DB$ SacrificeAll | ValidCards$ Creature.nonChosenCard+OppCtrl | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True
|
||||
Oracle:When you set this scheme in motion, each opponent chooses a creature they control, then sacrifices the rest.
|
||||
|
||||
@@ -5,7 +5,7 @@ PT:3/4
|
||||
K:Flying
|
||||
T:Mode$ Phase | Phase$ End of Turn | CheckSVar$ Morbid | SVarCompare$ GE1 | TriggerZones$ Battlefield | Execute$ TrigFood | TriggerDescription$ At the beginning of each end step, if a creature died this turn, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.")
|
||||
SVar:TrigFood:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_food_sac | TokenOwner$ You
|
||||
SVar:Morbid:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature
|
||||
SVar:Morbid:Count$Morbid.1.0
|
||||
A:AB$ Pump | Cost$ 2 B Sac<1/Creature.Other;Artifact/another creature or artifact> | Defined$ Self | NumAtt$ 2 | NumDef$ 2 | SpellDescription$ CARDNAME gets +2/+2 until end of turn.
|
||||
DeckHas:Ability$Token|Sacrifice & Type$Food|Artifact
|
||||
DeckHints:Ability$Sacrifice
|
||||
|
||||
@@ -5,8 +5,8 @@ T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefiel
|
||||
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ INFLUENCE | CounterNum$ 1 | SubAbility$ DBScry
|
||||
SVar:DBScry:DB$ Scry | ScryNum$ 2 | SubAbility$ DBChoice
|
||||
SVar:DBChoice:DB$ GenericChoice | ValidTgts$ Opponent | Choices$ CombustDraw,CombustDamage | AILogic$ CombustibleGearhulk
|
||||
SVar:CombustDraw:DB$ Draw | Defined$ You | NumCards$ 1 | SpellDescription$ Controller draws a card
|
||||
SVar:CombustDamage:DB$ Mill | Defined$ You | NumCards$ X | RememberMilled$ True | SubAbility$ DamageOpponent | SpellDescription$ Controller mills X cards, where X is the number of influence counters on CARDNAME, and that player loses life equal to the total mana value of those cards.
|
||||
SVar:CombustDraw:DB$ Draw | Defined$ You | NumCards$ 1 | SpellDescription$ CARDNAME's controller draws a card.
|
||||
SVar:CombustDamage:DB$ Mill | Defined$ You | NumCards$ X | RememberMilled$ True | SubAbility$ DamageOpponent | SpellDescription$ CARDNAME's controller mills X cards, where X is the number of influence counters on it, and you lose life equal to the total mana value of those cards.
|
||||
SVar:DamageOpponent:DB$ LoseLife | Defined$ ParentTarget | LifeAmount$ Y | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
SVar:X:Count$CardCounters.INFLUENCE
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
Name:Perilous Predicament
|
||||
ManaCost:4 B
|
||||
Types:Instant
|
||||
A:SP$ RepeatEach | AILogic$ OpponentHasMultipleCreatures | RepeatPlayers$ Opponent | RepeatSubAbility$ DBChoose | SubAbility$ DBSacAll | SpellDescription$ Each opponent sacrifices an artifact creature and a nonartifact creature.
|
||||
SVar:DBChoose:DB$ ChooseCard | Defined$ Remembered | Amount$ 1 | Choices$ Creature.Artifact+RememberedPlayerCtrl | Mandatory$ True | RememberChosen$ True | ChoiceTitle$ Choose target artifact creature | AILogic$ WorstCard | SubAbility$ DBChoose2
|
||||
SVar:DBChoose2:DB$ ChooseCard | Defined$ Remembered | Amount$ 1 | Choices$ Creature.nonArtifact+IsNotRemembered+RememberedPlayerCtrl | Mandatory$ True | RememberChosen$ True | ChoiceTitle$ Choose target nonartifact creature | AILogic$ WorstCard
|
||||
SVar:DBSacAll:DB$ SacrificeAll | ValidCards$ Permanent.IsRemembered | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
A:SP$ Sacrifice | Defined$ Opponent | SacValid$ Creature.Artifact & Creature.nonArtifact | AILogic$ WorstCard | Mandatory$ True | SacEachValid$ True | SpellDescription$ Each opponent sacrifices an artifact creature and a nonartifact creature.
|
||||
SVar:NeedsToPlayVar:Z GE2
|
||||
SVar:Z:SVar$Z1/Plus.Z2
|
||||
SVar:Z1:Count$Valid Creature.nonArtifact+OppCtrl/LimitMax.1
|
||||
SVar:Z2:Count$Valid Creature.Artifact+OppCtrl/LimitMax.1
|
||||
DeckHas:Ability$Sacrifice
|
||||
Oracle:Each opponent sacrifices an artifact creature and a nonartifact creature.
|
||||
|
||||
@@ -4,7 +4,7 @@ Types:Artifact Creature Phyrexian Dreadnought
|
||||
PT:12/12
|
||||
K:Trample
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ ChooseCreatures | TriggerDescription$ When CARDNAME enters, sacrifice it unless you sacrifice any number of creatures with total power 12 or greater.
|
||||
SVar:ChooseCreatures:DB$ ChooseCard | Defined$ You | Amount$ X | MinAmount$ 0 | Choices$ Creature.YouCtrl | ChoiceTitle$ Sacrifice any number of creatures with total power 12 or greater. | ChoiceZone$ Battlefield | RememberChosen$ True | SubAbility$ SacrificeSelf
|
||||
SVar:ChooseCreatures:DB$ ChooseCard | Defined$ You | Amount$ X | MinAmount$ 0 | Choices$ Creature.YouCtrl | ChoiceTitle$ Sacrifice any number of creatures with total power 12 or greater. | ChoiceZone$ Battlefield | Reveal$ True | RememberChosen$ True | SubAbility$ SacrificeSelf
|
||||
SVar:SacrificeSelf:DB$ Sacrifice | ConditionCheckSVar$ TotalPower | ConditionSVarCompare$ LT12 | SubAbility$ SacrificeCreatures
|
||||
SVar:SacrificeCreatures:DB$ SacrificeAll | Defined$ Remembered | ConditionCheckSVar$ TotalPower | ConditionSVarCompare$ GE12 | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
@@ -13,4 +13,5 @@ SVar:X:Count$Valid Creature.YouCtrl
|
||||
AI:RemoveDeck:Random
|
||||
SVar:NeedsToPlayVar:Y GE12
|
||||
SVar:Y:Count$SumPower_Creature.YouCtrl+notnamedPhyrexian Dreadnought
|
||||
DeckHas:Ability$Sacrifice
|
||||
Oracle:Trample\nWhen Phyrexian Dreadnought enters, sacrifice it unless you sacrifice any number of creatures with total power 12 or greater.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Name:Phyrexian Portal
|
||||
ManaCost:3
|
||||
Types:Artifact
|
||||
A:AB$ Dig | Cost$ 3 | ValidTgts$ Opponent | Defined$ You | DigNum$ 10 | RememberRevealed$ True | NoLooking$ True | NoMove$ True | Choser$ Targeted | ConditionCheckSVar$ X | ConditionSVarCompare$ GE10 | SubAbility$ DBTwoPiles | SpellDescription$ If your library has ten or more cards in it, target opponent looks at the top ten cards of your library and separates them into two face-down piles. Exile one of those piles. Search the other pile for a card, put it into your hand, then shuffle the rest of that pile into your library. | StackDescription$ SpellDescription
|
||||
A:AB$ PeekAndReveal | Cost$ 3 | ValidTgts$ Opponent | Defined$ You | PeekAmount$ 10 | RememberPeeked$ True | NoPeek$ True | NoReveal$ True | ConditionCheckSVar$ X | ConditionSVarCompare$ GE10 | SubAbility$ DBTwoPiles | SpellDescription$ If your library has ten or more cards in it, target opponent looks at the top ten cards of your library and separates them into two face-down piles. Exile one of those piles. Search the other pile for a card, put it into your hand, then shuffle the rest of that pile into your library. | StackDescription$ SpellDescription
|
||||
SVar:DBTwoPiles:DB$ TwoPiles | Defined$ You | DefinedCards$ Remembered | Separator$ Targeted | FaceDown$ True | ConditionCheckSVar$ X | ConditionSVarCompare$ GE10 | ChosenPile$ DBHand | UnchosenPile$ DBExile
|
||||
SVar:DBHand:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Card | ChangeNum$ 1 | ChooseFromDefined$ Remembered | Mandatory$ True | Shuffle$ True
|
||||
SVar:DBExile:DB$ ChangeZone | Defined$ Remembered | Origin$ Library | Destination$ Exile
|
||||
|
||||
@@ -8,7 +8,7 @@ SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 2
|
||||
A:AB$ LoseLife | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | Defined$ You | LifeAmount$ 1 | SubAbility$ DBDig | SpellDescription$ You lose 1 life. Look at the top three cards of your library. Put one of them into your hand and the rest into your graveyard.
|
||||
SVar:DBDig:DB$ Dig | DigNum$ 3 | ChangeNum$ 1 | NoReveal$ True | DestinationZone2$ Graveyard | StackDescription$ {p:You} looks at the top three cards of their library. {p:You} puts one of them into their hand and the rest into their graveyard.
|
||||
A:AB$ RepeatEach | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | RepeatPlayers$ Opponent | RepeatSubAbility$ DBChooseCard | SubAbility$ DBSac | SpellDescription$ Each opponent sacrifices a creature with the greatest power among creatures that player controls.
|
||||
SVar:DBChooseCard:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.greatestPowerControlledByRemembered | ChoiceTitle$ Choose a creature you control with the greatest power | Mandatory$ True | RememberChosen$ True
|
||||
SVar:DBChooseCard:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.greatestPowerControlledByRemembered | ChoiceTitle$ Choose a creature you control with the greatest power | Mandatory$ True | Reveal$ True | RememberChosen$ True
|
||||
SVar:DBSac:DB$ SacrificeAll | ValidCards$ Card.IsRemembered | SubAbility$ DBCleanup | StackDescription$ Each opponent sacrifices a creature with the greatest power among creatures they control.
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True
|
||||
A:AB$ Repeat | Cost$ SubCounter<8/LOYALTY> | Planeswalker$ True | Ultimate$ True | RepeatSubAbility$ TrigDiscard | MaxRepeat$ 7 | StackDescription$ SpellDescription | SpellDescription$ Each opponent may discard a card. If they don't, they lose 3 life. Repeat this process six more times.
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
Name:Quest for Ula's Temple
|
||||
ManaCost:U
|
||||
Types:Enchantment
|
||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigDig | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ At the beginning of your upkeep, you may look at the top card of your library. If it's a creature card, you may reveal it and put a quest counter on Quest for CARDNAME.
|
||||
SVar:TrigDig:DB$ Dig | DigNum$ 1 | DestinationZone$ Library | LibraryPosition$ 0 | LibraryPosition2$ 0 | SubAbility$ TrigDig2
|
||||
SVar:TrigDig2:DB$ Dig | DigNum$ 1 | ChangeNum$ All | RevealValid$ Creature | ChangeValid$ Creature | Optional$ True | PromptToSkipOptionalAbility$ True | OptionalAbilityPrompt$ Would you like to reveal the creature and put a quest counter on CARDNAME? | DestinationZone$ Library | LibraryPosition$ 0 | LibraryPosition2$ 0 | RememberChanged$ True | AILogic$ AlwaysConfirm | SubAbility$ DBPutCounter
|
||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigPeek | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ At the beginning of your upkeep, you may look at the top card of your library. If it's a creature card, you may reveal it and put a quest counter on Quest for CARDNAME.
|
||||
SVar:TrigPeek:DB$ PeekAndReveal | RevealValid$ Creature | RevealOptional$ True | RememberRevealed$ True | SubAbility$ DBPutCounter
|
||||
SVar:DBPutCounter:DB$ PutCounter | CounterType$ QUEST | CounterNum$ 1 | Defined$ Self | ConditionDefined$ Remembered | ConditionPresent$ Creature | ConditionCompare$ EQ1 | SubAbility$ DBCleanup
|
||||
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ Player | Execute$ TrigChangeZone | OptionalDecider$ You | TriggerZones$ Battlefield | IsPresent$ Card.Self+counters_GE3_QUEST | PresentCompare$ EQ1 | TriggerDescription$ At the beginning of each end step, if there are three or more quest counters on CARDNAME, you may put a Kraken, Leviathan, Octopus, or Serpent creature card from your hand onto the battlefield.
|
||||
SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature.Kraken,Creature.Leviathan,Creature.Octopus,Creature.Serpent | ChangeNum$ 1 | Hidden$ True
|
||||
|
||||
@@ -11,8 +11,7 @@ Name:Riches
|
||||
ManaCost:5 U U
|
||||
Types:Sorcery
|
||||
K:Aftermath
|
||||
A:SP$ RepeatEach | AILogic$ OpponentHasCreatures | RepeatPlayers$ Player.Opponent | RepeatSubAbility$ ChooseCreature | SubAbility$ StealChosen | SpellDescription$ Each opponent chooses a creature they control. You gain control of those creatures.
|
||||
SVar:ChooseCreature:DB$ ChooseCard | Defined$ Remembered | Amount$ 1 | Choices$ Creature.RememberedPlayerCtrl | ChoiceTitle$ Choose a creature to be stolen | AILogic$ WorstCard | RememberChosen$ True | Mandatory$ True
|
||||
SVar:StealChosen:DB$ GainControl | AllValid$ Permanent.IsRemembered | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
A:SP$ ChooseCard | Defined$ Opponent | Mandatory$ True | Amount$ 1 | Choices$ Creature | ControlledByPlayer$ Chooser | ChoiceTitle$ Choose a creature to be stolen | AILogic$ WorstCard | Mandatory$ True | SubAbility$ StealChosen | SpellDescription$ Each opponent chooses a creature they control. You gain control of those creatures.
|
||||
SVar:StealChosen:DB$ GainControl | AllValid$ Permanent.ChosenCard
|
||||
SVar:NeedsToPlay:Creature.OppCtrl
|
||||
Oracle:Aftermath (Cast this spell only from your graveyard. Then exile it.)\nEach opponent chooses a creature they control. You gain control of those creatures.
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
Name:Razia's Purification
|
||||
ManaCost:4 R W
|
||||
Types:Sorcery
|
||||
A:SP$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBChooseSac | SubAbility$ DBSac | SpellDescription$ Each player chooses three permanents they control, then sacrifices the rest.
|
||||
SVar:DBChooseSac:DB$ ChooseCard | Defined$ Remembered | Choices$ Permanent.RememberedPlayerCtrl | Amount$ 3 | ChoiceTitle$ Choose three cards not to be sacrificed | RememberChosen$ True | Mandatory$ True
|
||||
SVar:DBSac:DB$ SacrificeAll | ValidCards$ Permanent.IsNotRemembered | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
A:SP$ ChooseCard | Defined$ Player | Choices$ Permanent | ControlledByPlayer$ Chooser | Amount$ 3 | ChoiceTitle$ Choose three permanents to keep | Mandatory$ True | Reveal$ True | SubAbility$ DBSac | StackDescription$ SpellDescription | SpellDescription$ Each player chooses three permanents they control, then sacrifices the rest.
|
||||
SVar:DBSac:DB$ SacrificeAll | ValidCards$ Permanent.nonChosenCard
|
||||
DeckHas:Ability$Sacrifice
|
||||
AI:RemoveDeck:All
|
||||
Oracle:Each player chooses three permanents they control, then sacrifices the rest.
|
||||
|
||||
@@ -5,5 +5,5 @@ PT:6/6
|
||||
K:Flying
|
||||
T:Mode$ Phase | Phase$ End of Turn | CheckSVar$ Morbid | SVarCompare$ GE1 | TriggerZones$ Battlefield | Execute$ TrigDestroy | TriggerDescription$ Morbid — At the beginning of each end step, if a creature died this turn, destroy target non-demon creature.
|
||||
SVar:TrigDestroy:DB$ Destroy | ValidTgts$ Creature.nonDemon | TgtPrompt$ Select target non-Demon creature
|
||||
SVar:Morbid:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature
|
||||
SVar:Morbid:Count$Morbid.1.0
|
||||
Oracle:Flying\nMorbid — At the beginning of each end step, if a creature died this turn, destroy target non-Demon creature.
|
||||
|
||||
@@ -2,17 +2,11 @@ Name:Regna's Sanction
|
||||
ManaCost:3 W
|
||||
Types:Sorcery
|
||||
A:SP$ AssignGroup | Defined$ Player | Choices$ FriendRepeat,FoeRepeat | AILogic$ FriendOrFoe | SpellDescription$ For each player, choose friend or foe. Each friend puts a +1/+1 counter on each creature they control. Each foe chooses one untapped creature they control, then taps the rest.
|
||||
SVar:FriendRepeat:DB$ RepeatEach | RepeatPlayers$ Remembered | RepeatSubAbility$ DBPutCounter | ClearRememberedBeforeLoop$ True | StackDescription$ Each friend puts a +1/+1 counter on each creature they control. | SpellDescription$ Friend puts a +1/+1 counter on each creature they control.
|
||||
SVar:DBPutCounter:DB$ PutCounterAll | ValidCards$ Creature.RememberedPlayerCtrl | CounterType$ P1P1 | CounterNum$ 1 | Placer$ Remembered
|
||||
SVar:FoeRepeat:DB$ RepeatEach | AILogic$ OpponentHasMultipleCreatures | RepeatPlayers$ Remembered | ClearRememberedBeforeLoop$ True | RepeatSubAbility$ DBChoose | SubAbility$ DBTapAll | StackDescription$ Each foe chooses one untapped creature they control, then taps the rest. | SpellDescription$ Foe chooses one untapped creature they control, then taps the rest.
|
||||
SVar:DBChoose:DB$ ChooseCard | Defined$ Remembered | Amount$ 1 | Choices$ Creature.untapped+RememberedPlayerCtrl | Mandatory$ True | RememberChosen$ True | SubAbility$ DBImprint
|
||||
# Need to imprint all non remembered cards
|
||||
SVar:DBImprint:DB$ Pump | ImprintCards$ Valid Creature.IsNotRemembered+RememberedPlayerCtrl | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True
|
||||
SVar:DBTapAll:DB$ TapAll | ValidCards$ Creature.IsImprinted | TapperController$ True | SubAbility$ DBCleanupAll
|
||||
SVar:DBCleanupAll:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True | ClearChosenCard$ True
|
||||
SVar:FriendRepeat:DB$ PutCounterAll | ValidCards$ Creature.RememberedPlayerCtrl | CounterType$ P1P1 | CounterNum$ 1 | Placer$ Controller | SpellDescription$ Each friend puts a +1/+1 counter on each creature they control.
|
||||
SVar:FoeRepeat:DB$ ChooseCard | Defined$ Remembered | Choices$ Creature.untapped | ControlledByPlayer$ Chooser | Amount$ 1 | ChoiceTitle$ Choose one creature to keep untapped | Mandatory$ True | Reveal$ True | SubAbility$ DBTapAll | SpellDescription$ Each foe chooses one untapped creature they control, then taps the rest.
|
||||
SVar:DBTapAll:DB$ TapAll | ValidCards$ Creature.nonChosenCard+RememberedPlayerCtrl | TapperController$ True
|
||||
SVar:NeedsToPlayVar:Z GE3
|
||||
SVar:Z:SVar$Z1/Plus.Z2
|
||||
SVar:Z1:Count$Valid Creature.YourTeamCtrl+inZoneBattlefield
|
||||
SVar:Z2:Count$Valid Creature.OppCtrl+inZoneBattlefield+untapped
|
||||
SVar:Z1:Count$Valid Creature.YourTeamCtrl
|
||||
SVar:Z2:Count$Valid Creature.OppCtrl+untapped
|
||||
Oracle:For each player, choose friend or foe. Each friend puts a +1/+1 counter on each creature they control. Each foe chooses one untapped creature they control, then taps the rest.
|
||||
|
||||
@@ -12,5 +12,5 @@ Name:Development
|
||||
ManaCost:3 U R
|
||||
Types:Instant
|
||||
A:SP$ Repeat | RepeatSubAbility$ DBToken | MaxRepeat$ 3 | StackDescription$ SpellDescription | SpellDescription$ Create a 3/1 red Elemental creature token unless any opponent has you draw a card. Repeat this process two more times.
|
||||
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ r_3_1_elemental | TokenOwner$ You | UnlessPayer$ Player.Opponent | UnlessCost$ Draw<1/Player.YouActivator> | UnlessAI$ MorePowerful
|
||||
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ r_3_1_elemental | TokenOwner$ You | UnlessPayer$ Player.Opponent | UnlessCost$ Draw<1/Player.Activator> | UnlessAI$ MorePowerful
|
||||
Oracle:Create a 3/1 red Elemental creature token unless any opponent has you draw a card. Repeat this process two more times.
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
Name:Revival Experiment
|
||||
ManaCost:4 B G
|
||||
Types:Sorcery
|
||||
A:SP$ RepeatEach | RepeatTypesFrom$ Permanent.YouOwn | TypesFromZone$ Graveyard | RepeatSubAbility$ ChooseCard | SubAbility$ DBReturn | SpellDescription$ For each permanent type, return up to one card of that type from your graveyard to the battlefield.
|
||||
SVar:ChooseCard:DB$ ChooseCard | Choices$ Card.ChosenType+YouOwn | ChoiceZone$ Graveyard | ChoiceTitle$ Choose up to one card of this type to return | ChoiceTitleAppend$ ChosenType | RememberChosen$ True
|
||||
SVar:DBReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ Remembered | RememberChanged$ True | ForgetOtherRemembered$ True | SubAbility$ DBLoseLife
|
||||
SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ X | SubAbility$ DBChange | StackDescription$ SpellDescription | SubAbility$ DBExile | SpellDescription$ You lose 3 life for each card returned this way.
|
||||
SVar:DBExile:DB$ ChangeZone | Origin$ Stack | Destination$ Exile | SubAbility$ DBCleanup | SpellDescription$ Exile CARDNAME.
|
||||
A:SP$ ChooseCard | Defined$ You | Choices$ Card.Permanent+YouOwn | ChoiceZone$ Graveyard | ChooseEach$ Artifact & Battle & Creature & Enchantment & Land & Planeswalker | ControlledByPlayer$ Chooser | MinAmount$ 0 | Amount$ 1 | Reveal$ True | RememberChosen$ True | SubAbility$ DBReturn | StackDescription$ REP return_{p:You} returns & from your_from their & You lose_{p:You} loses & Exile_{p:You} exiles | SpellDescription$ For each permanent type, return up to one card of that type from your graveyard to the battlefield. You lose 3 life for each card returned this way. Exile CARDNAME.
|
||||
SVar:DBReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ Remembered | RememberChanged$ True | ForgetOtherRemembered$ True | SubAbility$ DBLoseLife | StackDescription$ None
|
||||
SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ X | SubAbility$ DBChange | SubAbility$ DBExile | StackDescription$ None
|
||||
SVar:DBExile:DB$ ChangeZone | Origin$ Stack | Destination$ Exile | SubAbility$ DBCleanup | StackDescription$ None
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True
|
||||
SVar:X:Remembered$Amount/Times.3
|
||||
DeckHas:Ability$Graveyard
|
||||
|
||||
@@ -4,7 +4,7 @@ Types:Creature Zombie Rogue
|
||||
PT:4/3
|
||||
T:Mode$ ChangesZone | Origin$ Any | CheckSVar$ Morbid | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters, if a creature died this turn, create a 2/2 blue and black Zombie Rogue creature token.
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ ub_2_2_zombie_rogue | TokenOwner$ You
|
||||
SVar:Morbid:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature
|
||||
SVar:Morbid:Count$Morbid.1.0
|
||||
DeckHas:Ability$Token & Type$Zombie|Rogue & Color$Blue
|
||||
K:Plot:2 B
|
||||
Oracle:When Rictus Robber enters, if a creature died this turn, create a 2/2 blue and black Zombie Rogue creature token.\nPlot {2}{B} (You may pay {2}{B} and exile this card from your hand. Cast it as a sorcery on a later turn without paying its mana cost. Plot only as a sorcery.)
|
||||
|
||||
@@ -5,4 +5,5 @@ A:SP$ Pump | ValidTgts$ Creature | TgtPrompt$ Choose two target creatures contro
|
||||
SVar:DBChooseSac:DB$ ChooseCard | Choices$ Card.IsRemembered | Defined$ TargetedController | ChoiceTitle$ Choose one to sacrifice | SubAbility$ DBSac | StackDescription$ None | AILogic$ WorstCard
|
||||
SVar:DBSac:DB$ SacrificeAll | Defined$ ChosenCard | SubAbility$ DBCleanup | StackDescription$ None
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
DeckHas:Ability$Sacrifice
|
||||
Oracle:Choose two target creatures controlled by the same player. That player sacrifices one of them.
|
||||
|
||||
@@ -5,6 +5,6 @@ PT:3/3
|
||||
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | CheckSVar$ Morbid | SVarCompare$ GE1 | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of your end step, if a creature died this turn, put a +1/+1 counter on CARDNAME and untap it.
|
||||
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBUntap
|
||||
SVar:DBUntap:DB$ Untap | Defined$ Self
|
||||
SVar:Morbid:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature
|
||||
SVar:Morbid:Count$Morbid.1.0
|
||||
DeckHas:Ability$Counters
|
||||
Oracle:At the beginning of your end step, if a creature died this turn, put a +1/+1 counter on Sabertooth Mauler and untap it.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Saw in Half
|
||||
ManaCost:2 B
|
||||
Types:Instant
|
||||
A:SP$ Destroy | ValidTgts$ Creature | TgtPrompt$ Select target creature | SubAbility$ DBCopy | RememberLKI$ True | SpellDescription$ Destroy target creature.
|
||||
SVar:DBCopy:DB$ CopyPermanent | Defined$ Remembered | NumCopies$ 2 | Controller$ TargetedController | SetPower$ dX | SetToughness$ dY | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 | SubAbility$ DBCleanup | StackDescription$ SpellDescription | SpellDescription$ If that creature dies this way, its controller creates two tokens that are copies of that creature, except their base power is half that creature's power and their base toughness is half that creature's toughness. Round up each time.
|
||||
SVar:DBCopy:DB$ CopyPermanent | Defined$ RememberedLKI | NumCopies$ 2 | Controller$ TargetedController | SetPower$ dX | SetToughness$ dY | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 | SubAbility$ DBCleanup | StackDescription$ SpellDescription | SpellDescription$ If that creature dies this way, its controller creates two tokens that are copies of that creature, except their base power is half that creature's power and their base toughness is half that creature's toughness. Round up each time.
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
SVar:X:Remembered$Amount
|
||||
SVar:dX:RememberedLKI$CardPower/HalfUp
|
||||
|
||||
@@ -4,7 +4,7 @@ Types:Creature Mouse Soldier
|
||||
PT:3/2
|
||||
K:Vigilance
|
||||
K:Haste
|
||||
T:Mode$ BecomesTarget | ValidTarget$ Card.Self | ValidSource$ SpellAbility.YouCtrl | TriggerZones$ Battlefield | FirstTime$ True | Execute$ TrigCounter | TriggerDescription$ Valiant — Whenever CARDNAME becomes the target of a spell or ability you control for the first time each turn, put a +1/+1 counter on it.
|
||||
T:Mode$ BecomesTarget | ValidTarget$ Card.Self | ValidSource$ SpellAbility.YouCtrl | TriggerZones$ Battlefield | Valiant$ True | Execute$ TrigCounter | TriggerDescription$ Valiant — Whenever CARDNAME becomes the target of a spell or ability you control for the first time each turn, put a +1/+1 counter on it.
|
||||
SVar:TrigCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
|
||||
DeckHas:Ability$Counters
|
||||
Oracle:Vigilance, haste\nValiant — Whenever Seedglaive Mentor becomes the target of a spell or ability you control for the first time each turn, put a +1/+1 counter on it.
|
||||
|
||||
@@ -4,7 +4,7 @@ Types:Creature Demon
|
||||
PT:8/4
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigRepeat | TriggerDescription$ When CARDNAME enters, each opponent sacrifices a creature with the greatest power among creatures they control. You gain life equal to the greatest power among creatures sacrificed this way.
|
||||
SVar:TrigRepeat:DB$ RepeatEach | RepeatPlayers$ Player.Opponent | RepeatSubAbility$ DBChooseCard | SubAbility$ DBSac
|
||||
SVar:DBChooseCard:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.greatestPowerControlledByRemembered | ChoiceTitle$ Choose a creature you control with the greatest power | Mandatory$ True | ImprintChosen$ True | AILogic$ WorstCard
|
||||
SVar:DBChooseCard:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.greatestPowerControlledByRemembered | ChoiceTitle$ Choose a creature you control with the greatest power | Mandatory$ True | Reveal$ True | ImprintChosen$ True | AILogic$ WorstCard
|
||||
SVar:DBSac:DB$ SacrificeAll | ValidCards$ Card.IsImprinted | RememberSacrificed$ True | SubAbility$ DBLifeGain
|
||||
SVar:DBLifeGain:DB$ GainLife | Defined$ You | LifeAmount$ X | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True | ClearChosenCard$ True
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
Name:Single Combat
|
||||
ManaCost:3 W W
|
||||
Types:Sorcery
|
||||
A:SP$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBChoose | SubAbility$ SacAllOthers | SpellDescription$ Each player chooses a creature or planeswalker they control, then sacrifices the rest. Players can't cast creature or planeswalker spells until the end of your next turn.
|
||||
SVar:DBChoose:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature,Planeswalker | TargetControls$ True | Mandatory$ True | RememberChosen$ True
|
||||
SVar:SacAllOthers:DB$ SacrificeAll | ValidCards$ Creature.IsNotRemembered,Planeswalker.IsNotRemembered | SubAbility$ DBEffect
|
||||
SVar:DBEffect:DB$ Effect | StaticAbilities$ STCantBeCast | Duration$ UntilTheEndOfYourNextTurn | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True
|
||||
A:SP$ ChooseCard | Defined$ Player | Choices$ Creature,Planeswalker | ControlledByPlayer$ Chooser | ChoiceTitle$ Choose a creature or planeswalker to keep | Mandatory$ True | Reveal$ True | SubAbility$ SacAllOthers | StackDescription$ SpellDescription | SpellDescription$ Each player chooses a creature or planeswalker they control, then sacrifices the rest. Players can't cast creature or planeswalker spells until the end of your next turn.
|
||||
SVar:SacAllOthers:DB$ SacrificeAll | ValidCards$ Creature.nonChosenCard,Planeswalker.nonChosenCard | SubAbility$ DBEffect
|
||||
SVar:DBEffect:DB$ Effect | StaticAbilities$ STCantBeCast | Duration$ UntilTheEndOfYourNextTurn
|
||||
SVar:STCantBeCast:Mode$ CantBeCast | EffectZone$ Command | ValidCard$ Creature,Planeswalker | Description$ Players can't cast creature or planeswalker spells.
|
||||
AI:RemoveDeck:All
|
||||
DeckHas:Ability$Sacrifice
|
||||
Oracle:Each player chooses a creature or planeswalker they control, then sacrifices the rest. Players can't cast creature or planeswalker spells until the end of your next turn.
|
||||
|
||||
@@ -3,5 +3,5 @@ ManaCost:1 B
|
||||
Types:Creature Human Cleric
|
||||
PT:1/2
|
||||
A:AB$ Token | Cost$ T tapXType<2/Creature> | CheckSVar$ Morbid | SVarCompare$ GE1 | TokenAmount$ 1 | TokenScript$ b_5_5_demon_flying | TokenOwner$ You | CostDesc$ Morbid — {T}, Tap two untapped creatures you control: | SpellDescription$ Create a 5/5 black Demon creature token with flying. Activate only if a creature died this turn.
|
||||
SVar:Morbid:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature
|
||||
SVar:Morbid:Count$Morbid.1.0
|
||||
Oracle:Morbid — {T}, Tap two untapped creatures you control: Create a 5/5 black Demon creature token with flying. Activate only if a creature died this turn.
|
||||
|
||||
@@ -2,8 +2,9 @@ Name:Slaughter the Strong
|
||||
ManaCost:1 W W
|
||||
Types:Sorcery
|
||||
A:SP$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ ChooseCrtr | SubAbility$ SacAllOthers | SpellDescription$ Each player chooses any number of creatures they control with total power 4 or less, then sacrifices all other creatures they control.
|
||||
SVar:ChooseCrtr:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.RememberedPlayerCtrl | WithTotalPower$ 4 | RememberChosen$ True | AILogic$ NegativePowerFirst
|
||||
SVar:ChooseCrtr:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.RememberedPlayerCtrl | WithTotalPower$ 4 | Reveal$ True | RememberChosen$ True | AILogic$ NegativePowerFirst
|
||||
SVar:SacAllOthers:DB$ SacrificeAll | ValidCards$ Creature.IsNotRemembered | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
AI:RemoveDeck:All
|
||||
DeckHas:Ability$Sacrifice
|
||||
Oracle:Each player chooses any number of creatures they control with total power 4 or less, then sacrifices all other creatures they control.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Soul Shatter
|
||||
ManaCost:2 B
|
||||
Types:Instant
|
||||
A:SP$ RepeatEach | RepeatPlayers$ Player.Opponent | RepeatSubAbility$ DBChoose | SubAbility$ DBSac | StackDescription$ Each opponent | SpellDescription$ Each opponent sacrifices a creature or planeswalker with the highest mana value among creatures and planeswalkers they control.
|
||||
SVar:DBChoose:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.RememberedPlayerCtrl+cmcEQX,Planeswalker.RememberedPlayerCtrl+cmcEQX | ChoiceTitle$ Choose a creature or planeswalker with the highest mana value to sacrifice | Mandatory$ True | RememberChosen$ True
|
||||
SVar:DBChoose:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.RememberedPlayerCtrl+cmcEQX,Planeswalker.RememberedPlayerCtrl+cmcEQX | ChoiceTitle$ Choose a creature or planeswalker with the highest mana value to sacrifice | Mandatory$ True | Reveal$ True | RememberChosen$ True
|
||||
SVar:DBSac:DB$ SacrificeAll | ValidCards$ Card.IsRemembered | SubAbility$ DBCleanup | StackDescription$ sacrifices a creature or planeswalker with the highest mana value among creatures and planeswalkers they control.
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
SVar:X:Count$Valid Creature.RememberedPlayerCtrl,Planeswalker.RememberedPlayerCtrl$GreatestCMC
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Name:Stick Together
|
||||
ManaCost:3 W W
|
||||
Types:Sorcery
|
||||
A:SP$ ChooseCard | Defined$ Player | ChooseEach$ Party | SubAbility$ SacAllOthers | StackDescription$ SpellDescription | SpellDescription$ Each player chooses a party from among creatures they control,
|
||||
A:SP$ ChooseCard | Defined$ Player | Choices$ Creature | ChooseEach$ Party | Reveal$ True | 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.)
|
||||
DeckHas:Ability$Sacrifice
|
||||
DeckHints:Ability$Party
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:4 B
|
||||
Types:Instant
|
||||
A:SP$ Charm | MinCharmNum$ 1 | CharmNum$ Count$Compare Y GE1.2.1 | Choices$ DBOppSac,DBExile | AdditionalDescription$ . If you control a commander as you cast this spell, you may choose both.
|
||||
SVar:DBOppSac:DB$ RepeatEach | RepeatPlayers$ Player.Opponent | RepeatSubAbility$ DBChooseCard | SubAbility$ DBSac | SpellDescription$ Each opponent sacrifices a creature they control with the greatest power.
|
||||
SVar:DBChooseCard:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.greatestPowerControlledByRemembered | ChoiceTitle$ Choose a creature you control with the greatest power | Mandatory$ True | RememberChosen$ True
|
||||
SVar:DBChooseCard:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.greatestPowerControlledByRemembered | ChoiceTitle$ Choose a creature you control with the greatest power | Mandatory$ True | Reveal$ True | RememberChosen$ True
|
||||
SVar:DBSac:DB$ SacrificeAll | ValidCards$ Card.IsRemembered | SubAbility$ DBCleanup | StackDescription$ None
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True
|
||||
SVar:DBExile:DB$ ChangeZoneAll | ChangeType$ Card.OppCtrl | Origin$ Graveyard | Destination$ Exile | RememberChanged$ True | SubAbility$ DBToken | SpellDescription$ Exile all cards from all opponents' graveyards, then create X 0/1 black Thrull creature tokens, where X is the greatest power among creature cards exiled this way.
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user