diff --git a/.gitignore b/.gitignore index 1f0dde4c51f..e3c0d798518 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ .vscode/settings.json .vscode/launch.json +.factorypath # Ignore NetBeans config files diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java index 811e283cfdf..89e61975f24 100644 --- a/forge-ai/src/main/java/forge/ai/AiController.java +++ b/forge-ai/src/main/java/forge/ai/AiController.java @@ -1819,7 +1819,7 @@ public class AiController { // AI would play everything. But limits to one copy of (Leyline of Singularity) and (Gemstone Caverns) List result = Lists.newArrayList(); - for(SpellAbility sa : usableFromOpeningHand) { + for (SpellAbility sa : usableFromOpeningHand) { // Is there a better way for the AI to decide this? if (doTrigger(sa, false)) { result.add(sa); @@ -1830,7 +1830,7 @@ public class AiController { SpellAbility saGemstones = null; List toRemove = Lists.newArrayList(); - for(SpellAbility sa : result) { + for (SpellAbility sa : result) { String srcName = sa.getHostCard().getName(); if ("Gemstone Caverns".equals(srcName)) { if (saGemstones == null) @@ -2227,11 +2227,11 @@ public class AiController { private boolean checkAiSpecificRestrictions(final SpellAbility sa) { // AI-specific restrictions specified as activation parameters in spell abilities - + if (sa.hasParam("AILifeThreshold")) { return player.getLife() > Integer.parseInt(sa.getParam("AILifeThreshold")); } - + return true; } diff --git a/forge-ai/src/main/java/forge/ai/AiCostDecision.java b/forge-ai/src/main/java/forge/ai/AiCostDecision.java index 4c8a9d9f98a..8058d6d973c 100644 --- a/forge-ai/src/main/java/forge/ai/AiCostDecision.java +++ b/forge-ai/src/main/java/forge/ai/AiCostDecision.java @@ -354,7 +354,6 @@ public class AiCostDecision extends CostDecisionMakerBase { return PaymentDecision.number(c); } - @Override public PaymentDecision visit(CostPutCardToLib cost) { if (cost.payCostFromSource()) { diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtil.java b/forge-ai/src/main/java/forge/ai/ComputerUtil.java index e921f42fbda..cbbde47a278 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtil.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtil.java @@ -331,11 +331,14 @@ public class ComputerUtil { } public static Card getCardPreference(final Player ai, final Card activate, final String pref, final CardCollection typeList) { + return getCardPreference(ai, activate, pref, typeList, null); + } + public static Card getCardPreference(final Player ai, final Card activate, final String pref, final CardCollection typeList, SpellAbility sa) { final Game game = ai.getGame(); String prefDef = ""; if (activate != null) { prefDef = activate.getSVar("AIPreference"); - final String[] prefGroups = activate.getSVar("AIPreference").split("\\|"); + final String[] prefGroups = prefDef.split("\\|"); for (String prefGroup : prefGroups) { final String[] prefValid = prefGroup.trim().split("\\$"); if (prefValid[0].equals(pref) && !prefValid[1].startsWith("Special:")) { @@ -346,8 +349,8 @@ public class ComputerUtil { for (String validItem : prefValid[1].split(",")) { final CardCollection prefList = CardLists.getValidCards(typeList, validItem, activate.getController(), activate, null); - int threshold = getAIPreferenceParameter(activate, "CreatureEvalThreshold"); - int minNeeded = getAIPreferenceParameter(activate, "MinCreaturesBelowThreshold"); + int threshold = getAIPreferenceParameter(activate, "CreatureEvalThreshold", sa); + int minNeeded = getAIPreferenceParameter(activate, "MinCreaturesBelowThreshold", sa); if (threshold != -1) { List toRemove = Lists.newArrayList(); @@ -390,7 +393,7 @@ public class ComputerUtil { final CardCollection sacMeList = CardLists.filter(typeList, new Predicate() { @Override public boolean apply(final Card c) { - return (c.hasSVar("SacMe") && (Integer.parseInt(c.getSVar("SacMe")) == priority)); + return c.hasSVar("SacMe") && (Integer.parseInt(c.getSVar("SacMe")) == priority); } }); if (!sacMeList.isEmpty()) { @@ -419,6 +422,7 @@ public class ComputerUtil { if (!nonCreatures.isEmpty()) { return ComputerUtilCard.getWorstAI(nonCreatures); } else if (!typeList.isEmpty()) { + // TODO make sure survival is possible in case the creature blocks a trampler return ComputerUtilCard.getWorstAI(typeList); } } @@ -505,7 +509,7 @@ public class ComputerUtil { return null; } - public static int getAIPreferenceParameter(final Card c, final String paramName) { + public static int getAIPreferenceParameter(final Card c, final String paramName, SpellAbility sa) { if (!c.hasSVar("AIPreferenceParams")) { return -1; } @@ -520,7 +524,21 @@ public class ComputerUtil { case "CreatureEvalThreshold": // Threshold of 150 is just below the level of a 1/1 mana dork or a 2/2 baseline creature with no keywords if (paramName.equals(parName)) { - return Integer.parseInt(parValue); + int num = 0; + try { + num = Integer.parseInt(parValue); + } catch (NumberFormatException nfe) { + String[] valParts = StringUtils.split(parValue, "/"); + CardCollection foundCards = AbilityUtils.getDefinedCards(c, valParts[0], sa); + if (!foundCards.isEmpty()) { + num = ComputerUtilCard.evaluateCreature(foundCards.get(0)); + } + valParts[0] = Integer.toString(num); + if (valParts.length > 1) { + num = AbilityUtils.doXMath(num, valParts[1], c, sa); + } + } + return num; } break; case "MinCreaturesBelowThreshold": @@ -543,9 +561,8 @@ public class ComputerUtil { typeList = CardLists.filter(typeList, CardPredicates.canBeSacrificedBy(ability)); - if ((target != null) && target.getController() == ai) { - typeList.remove(target); // don't sacrifice the card we're pumping - } + // don't sacrifice the card we're pumping + typeList = ComputerUtilCost.paymentChoicesWithoutTargets(typeList, ability, ai); if (typeList.size() < amount) { return null; @@ -573,9 +590,8 @@ public class ComputerUtil { final Card target, final int amount, SpellAbility sa) { CardCollection typeList = CardLists.getValidCards(ai.getCardsIn(zone), type.split(";"), activate.getController(), activate, sa); - if ((target != null) && target.getController() == ai) { - typeList.remove(target); // don't exile the card we're pumping - } + // don't exile the card we're pumping + typeList = ComputerUtilCost.paymentChoicesWithoutTargets(typeList, sa, ai); if (typeList.size() < amount) { return null; @@ -594,9 +610,8 @@ public class ComputerUtil { final Card target, final int amount, SpellAbility sa) { CardCollection typeList = CardLists.getValidCards(ai.getCardsIn(zone), type.split(";"), activate.getController(), activate, sa); - if ((target != null) && target.getController() == ai) { - typeList.remove(target); // don't move the card we're pumping - } + // don't move the card we're pumping + typeList = ComputerUtilCost.paymentChoicesWithoutTargets(typeList, sa, ai); if (typeList.size() < amount) { return null; @@ -718,12 +733,10 @@ public class ComputerUtil { } public static CardCollection chooseReturnType(final Player ai, final String type, final Card activate, final Card target, final int amount, SpellAbility sa) { - final CardCollection typeList = - CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), type.split(";"), activate.getController(), activate, sa); - if ((target != null) && target.getController() == ai) { - // don't bounce the card we're pumping - typeList.remove(target); - } + CardCollection typeList = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), type.split(";"), activate.getController(), activate, sa); + + // don't bounce the card we're pumping + typeList = ComputerUtilCost.paymentChoicesWithoutTargets(typeList, sa, ai); if (typeList.size() < amount) { return new CardCollection(); @@ -743,7 +756,7 @@ public class ComputerUtil { CardCollection remaining = new CardCollection(cardlist); final CardCollection sacrificed = new CardCollection(); final Card host = source.getHostCard(); - final int considerSacThreshold = getAIPreferenceParameter(host, "CreatureEvalThreshold"); + final int considerSacThreshold = getAIPreferenceParameter(host, "CreatureEvalThreshold", source); if ("OpponentOnly".equals(source.getParam("AILogic"))) { if(!source.getActivatingPlayer().isOpponentOf(ai)) { @@ -3026,6 +3039,6 @@ public class ComputerUtil { } } return false; - } + } diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java index 532764b0b1f..468da12f98d 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java @@ -8,6 +8,8 @@ import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; @@ -20,6 +22,7 @@ import forge.game.card.CardCollection; import forge.game.card.CardCollectionView; import forge.game.card.CardFactoryUtil; import forge.game.card.CardLists; +import forge.game.card.CardPredicates; import forge.game.card.CardPredicates.Presets; import forge.game.card.CardUtil; import forge.game.card.CounterEnumType; @@ -270,7 +273,10 @@ public class ComputerUtilCost { } final CardCollection sacList = new CardCollection(); - final CardCollection typeList = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), type.split(";"), source.getController(), source, sourceAbility); + CardCollection typeList = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), type.split(";"), source.getController(), source, sourceAbility); + + // don't sacrifice the card we're pumping + typeList = paymentChoicesWithoutTargets(typeList, sourceAbility, ai); int count = 0; while (count < amount) { @@ -320,11 +326,14 @@ public class ComputerUtilCost { } final CardCollection sacList = new CardCollection(); - final CardCollection typeList = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), type.split(";"), source.getController(), source, sourceAbility); + CardCollection typeList = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), type.split(";"), source.getController(), source, sourceAbility); + + // don't sacrifice the card we're pumping + typeList = paymentChoicesWithoutTargets(typeList, sourceAbility, ai); int count = 0; while (count < amount) { - Card prefCard = ComputerUtil.getCardPreference(ai, source, "SacCost", typeList); + Card prefCard = ComputerUtil.getCardPreference(ai, source, "SacCost", typeList, sourceAbility); if (prefCard == null) { return false; } @@ -407,7 +416,7 @@ public class ComputerUtilCost { * @return true, if successful */ public static boolean checkSacrificeCost(final Player ai, final Cost cost, final Card source, final SpellAbility sourceAbility) { - return checkSacrificeCost(ai, cost, source, sourceAbility,true); + return checkSacrificeCost(ai, cost, source, sourceAbility, true); } /** @@ -420,8 +429,8 @@ public class ComputerUtilCost { * @param cost * @return a boolean. */ + @Deprecated public static boolean shouldPayCost(final Player ai, final Card hostCard, final Cost cost) { - for (final CostPart part : cost.getCostParts()) { if (part instanceof CostPayLife) { if (!ai.cantLoseForZeroOrLessLife()) { @@ -741,4 +750,12 @@ public class ComputerUtilCost { } return ObjectUtils.defaultIfNull(val, 0); } + + public static CardCollection paymentChoicesWithoutTargets(Iterable choices, SpellAbility source, Player ai) { + if (source.usesTargeting()) { + final CardCollection targets = new CardCollection(source.getTargets().getTargetCards()); + choices = Iterables.filter(choices, Predicates.not(Predicates.and(CardPredicates.isController(ai), Predicates.in(targets)))); + } + return new CardCollection(choices); + } } diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java b/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java index 3ffa79ca748..a1a3168b5ed 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java @@ -788,7 +788,6 @@ public class ComputerUtilMana { String manaProduced = ignoreColor || ignoreType ? MagicColor.toShortString(toPay.getColorMask()) : predictManafromSpellAbility(saPayment, ai, toPay); - // System.out.println(manaProduced); payMultipleMana(cost, manaProduced, ai); // remove from available lists @@ -1072,7 +1071,6 @@ public class ComputerUtilMana { getComboManaChoice(ai, saPayment, sa, cost); } else if (saPayment.getApi() == ApiType.ManaReflected) { - //System.out.println("Evaluate reflected mana of: " + saPayment.getHostCard()); Set reflected = CardUtil.getReflectableManaColors(saPayment); for (byte c : MagicColor.WUBRG) { @@ -1281,7 +1279,7 @@ public class ComputerUtilMana { final AbilityManaPart abMana = manaAb.getManaPart(); if (abMana.isComboMana()) { - int amount = manaAb.hasParam("Amount") ? AbilityUtils.calculateAmount(source, manaAb.getParam("Amount"), saRoot) : 1; + int amount = manaAb.hasParam("Amount") ? AbilityUtils.calculateAmount(source, manaAb.getParam("Amount"), manaAb) : 1; final ManaCostBeingPaid testCost = new ManaCostBeingPaid(cost); final String[] comboColors = abMana.getComboColors().split(" "); for (int nMana = 1; nMana <= amount; nMana++) { @@ -1301,7 +1299,7 @@ public class ComputerUtilMana { if (!testCost.isPaid()) { // Loop over combo colors for (String color : comboColors) { - if (satisfiesColorChoice(abMana, choiceString, choice) && testCost.isAnyPartPayableWith(ManaAtom.fromName(color), ai.getManaPool())) { + if (satisfiesColorChoice(abMana, choiceString, choice) && testCost.needsColor(ManaAtom.fromName(color), ai.getManaPool())) { payMultipleMana(testCost, color, ai); if (nMana != 1) { choiceString.append(" "); diff --git a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java index e1cd8b7da92..97dc8521d78 100644 --- a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java +++ b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java @@ -137,6 +137,23 @@ public class PlayerControllerAi extends PlayerController { return new HashMap<>(); } + @Override + public Map specifyManaCombo(SpellAbility sa, ColorSet colorSet, int manaAmount, boolean different) { + Map result = new HashMap<>(); + for (int i = 0; i < manaAmount; ++i) { + Byte chosen = chooseColor("", sa, colorSet); + if (result.containsKey(chosen)) { + result.put(chosen, result.get(chosen) + 1); + } else { + result.put(chosen, 1); + } + if (different) { + colorSet = ColorSet.fromMask(colorSet.getColor() - chosen); + } + } + return result; + } + @Override public Integer announceRequirements(SpellAbility ability, String announce) { // For now, these "announcements" are made within the AI classes of the appropriate SA effects diff --git a/forge-ai/src/main/java/forge/ai/SpellAbilityAi.java b/forge-ai/src/main/java/forge/ai/SpellAbilityAi.java index cab5c81ed2a..adcfe9728cd 100644 --- a/forge-ai/src/main/java/forge/ai/SpellAbilityAi.java +++ b/forge-ai/src/main/java/forge/ai/SpellAbilityAi.java @@ -289,7 +289,6 @@ public abstract class SpellAbilityAi { if (sa.isSpell() && !sa.isBuyBackAbility()) { return false; } - return phase.is(PhaseType.END_OF_TURN) && phase.getNextTurn().equals(ai); } diff --git a/forge-ai/src/main/java/forge/ai/ability/AttachAi.java b/forge-ai/src/main/java/forge/ai/ability/AttachAi.java index 90051e1cde9..05a76410082 100644 --- a/forge-ai/src/main/java/forge/ai/ability/AttachAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/AttachAi.java @@ -984,7 +984,7 @@ public class AttachAi extends SpellAbilityAi { List targets = new ArrayList<>(); final TargetRestrictions tgt = sa.getTargetRestrictions(); if (tgt == null) { - targets = AbilityUtils.getDefinedObjects(sa.getHostCard(), sa.getParam("Defined"), sa); + targets = AbilityUtils.getDefinedObjects(card, sa.getParam("Defined"), sa); } else { AttachAi.attachPreference(sa, tgt, mandatory); targets = sa.getTargets(); @@ -1344,7 +1344,7 @@ public class AttachAi extends SpellAbilityAi { CardCollection list = null; if (tgt == null) { - list = AbilityUtils.getDefinedCards(sa.getHostCard(), sa.getParam("Defined"), sa); + list = AbilityUtils.getDefinedCards(attachSource, sa.getParam("Defined"), sa); } else { list = CardLists.getValidCards(aiPlayer.getGame().getCardsIn(tgt.getZone()), tgt.getValidTgts(), sa.getActivatingPlayer(), attachSource, sa); diff --git a/forge-ai/src/main/java/forge/ai/ability/ChooseCardAi.java b/forge-ai/src/main/java/forge/ai/ability/ChooseCardAi.java index edf02ab304b..5a53f738a26 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChooseCardAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChooseCardAi.java @@ -246,7 +246,6 @@ public class ChooseCardAi extends SpellAbilityAi { return true; } }); - System.out.println("Tangle Wire" + options + " - " + betterList); if (!betterList.isEmpty()) { choice = betterList.get(0); } else { diff --git a/forge-ai/src/main/java/forge/ai/ability/ControlGainAi.java b/forge-ai/src/main/java/forge/ai/ability/ControlGainAi.java index 5358f6e670d..bbe277b07f0 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ControlGainAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ControlGainAi.java @@ -68,7 +68,6 @@ import forge.util.Aggregates; public class ControlGainAi extends SpellAbilityAi { @Override protected boolean canPlayAI(final Player ai, final SpellAbility sa) { - final List lose = Lists.newArrayList(); if (sa.hasParam("LoseControl")) { diff --git a/forge-ai/src/main/java/forge/ai/ability/CountersMoveAi.java b/forge-ai/src/main/java/forge/ai/ability/CountersMoveAi.java index 3c931b7df66..32e995d7f70 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CountersMoveAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CountersMoveAi.java @@ -29,7 +29,6 @@ import forge.util.collect.FCollection; public class CountersMoveAi extends SpellAbilityAi { @Override protected boolean checkApiLogic(final Player ai, final SpellAbility sa) { - if (sa.usesTargeting()) { sa.resetTargets(); if (!moveTgtAI(ai, sa)) { @@ -83,8 +82,7 @@ public class CountersMoveAi extends SpellAbilityAi { return true; } - // something you can't block, try to reduce its - // attack + // something you can't block, try to reduce its attack if (!ComputerUtilCard.canBeBlockedProfitably(ai, cpy)) { return true; } @@ -119,7 +117,6 @@ public class CountersMoveAi extends SpellAbilityAi { @Override protected boolean doTriggerAINoCost(final Player ai, SpellAbility sa, boolean mandatory) { - if (sa.usesTargeting()) { sa.resetTargets(); @@ -237,7 +234,6 @@ public class CountersMoveAi extends SpellAbilityAi { } private boolean moveTgtAI(final Player ai, final SpellAbility sa) { - final Card host = sa.getHostCard(); final Game game = ai.getGame(); final String type = sa.getParam("CounterType"); @@ -283,8 +279,7 @@ public class CountersMoveAi extends SpellAbilityAi { // cant use substract on Copy srcCardCpy.setCounters(cType, srcCardCpy.getCounters(cType) - amount); - // do not steal a P1P1 from Undying if it would die - // this way + // do not steal a P1P1 from Undying if it would die this way if (cType != null && cType.is(CounterEnumType.P1P1) && srcCardCpy.getNetToughness() <= 0) { return srcCardCpy.getCounters(cType) > 0 || !card.hasKeyword(Keyword.UNDYING) || card.isToken(); } @@ -373,8 +368,13 @@ public class CountersMoveAi extends SpellAbilityAi { } Card lki = CardUtil.getLKICopy(src); - lki.clearCounters(); - // go for opponent when value implies debuff + if (cType == null) { + lki.clearCounters(); + } + else { + lki.setCounters(cType, 0); + } + // go for opponent when higher value implies debuff if (ComputerUtilCard.evaluateCreature(src) > ComputerUtilCard.evaluateCreature(lki)) { List aiList = CardLists.filterControlledBy(tgtCards, ai); if (!aiList.isEmpty()) { @@ -419,6 +419,12 @@ public class CountersMoveAi extends SpellAbilityAi { return true; } } + final boolean isMandatoryTrigger = (sa.isTrigger() && !sa.isOptionalTrigger()) + || (sa.getRootAbility().isTrigger() && !sa.getRootAbility().isOptionalTrigger()); + if (!isMandatoryTrigger) { + // no good target + return false; + } } // move counter to opponents creature but only if you can not steal them diff --git a/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java b/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java index c3b3c130950..a7639d5b81e 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java @@ -64,11 +64,9 @@ public class CountersPutAi extends SpellAbilityAi { */ @Override protected boolean willPayCosts(Player ai, SpellAbility sa, Cost cost, Card source) { - final String type = sa.getParam("CounterType"); final String aiLogic = sa.getParamOrDefault("AILogic", ""); - // TODO Auto-generated method stub if (!super.willPayCosts(ai, sa, cost, source)) { return false; } @@ -225,8 +223,7 @@ public class CountersPutAi extends SpellAbilityAi { } if (sa.canTarget(ai)) { - // don't target itself when its forced to add poison - // counters too + // don't target itself when its forced to add poison counters too if (!ai.getCounters().isEmpty()) { if (!eachExisting || ai.getPoisonCounters() < 5) { sa.getTargets().add(ai); @@ -480,7 +477,6 @@ public class CountersPutAi extends SpellAbilityAi { list = CardLists.filter(list, new Predicate() { @Override public boolean apply(final Card c) { - // don't put the counter on the dead creature if (sacSelf && c.equals(source)) { return false; @@ -493,6 +489,8 @@ public class CountersPutAi extends SpellAbilityAi { Card sacTarget = ComputerUtil.getCardPreference(ai, source, "SacCost", list); // this card is planned to be sacrificed during cost payment, so don't target it // (otherwise the AI can cheat by activating this SA and not paying the sac cost, e.g. Extruder) + // TODO needs update if amount > 1 gets printed, + // maybe also check putting the counter on that exact creature is more important than sacrificing it (though unlikely?) list.remove(sacTarget); } @@ -617,7 +615,7 @@ public class CountersPutAi extends SpellAbilityAi { // Instant +1/+1 if (type.equals("P1P1") && !SpellAbilityAi.isSorcerySpeed(sa)) { if (!(ph.getNextTurn() == ai && ph.is(PhaseType.END_OF_TURN) && abCost.isReusuableResource())) { - return false; // only if next turn and cost is reusable + return false; // only if next turn and cost is reusable } } } diff --git a/forge-ai/src/main/java/forge/ai/ability/CountersPutOrRemoveAi.java b/forge-ai/src/main/java/forge/ai/ability/CountersPutOrRemoveAi.java index e0f53792b5a..e0d54abb964 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CountersPutOrRemoveAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CountersPutOrRemoveAi.java @@ -195,7 +195,6 @@ public class CountersPutOrRemoveAi extends SpellAbilityAi { */ @Override public CounterType chooseCounterType(List options, SpellAbility sa, Map params) { - if (options.size() > 1) { final Player ai = sa.getActivatingPlayer(); final Game game = ai.getGame(); diff --git a/forge-ai/src/main/java/forge/ai/ability/CountersRemoveAi.java b/forge-ai/src/main/java/forge/ai/ability/CountersRemoveAi.java index 82527015d51..698f9a83cca 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CountersRemoveAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CountersRemoveAi.java @@ -81,7 +81,6 @@ public class CountersRemoveAi extends SpellAbilityAi { */ @Override protected boolean checkApiLogic(Player ai, SpellAbility sa) { - final String type = sa.getParam("CounterType"); if (sa.usesTargeting()) { diff --git a/forge-ai/src/main/java/forge/ai/ability/DamageAllAi.java b/forge-ai/src/main/java/forge/ai/ability/DamageAllAi.java index 4d1203b61c1..08580950746 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DamageAllAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DamageAllAi.java @@ -46,7 +46,7 @@ public class DamageAllAi extends SpellAbilityAi { int x = -1; final String damage = sa.getParam("NumDmg"); - int dmg = AbilityUtils.calculateAmount(sa.getHostCard(), damage, sa); + int dmg = AbilityUtils.calculateAmount(source, damage, sa); if (damage.equals("X") && sa.getSVar(damage).equals("Count$Converge")) { dmg = ComputerUtilMana.getConvergeCount(sa, ai); } @@ -202,7 +202,7 @@ public class DamageAllAi extends SpellAbilityAi { dmg = ComputerUtilCost.getMaxXValue(sa, ai); sa.setXManaCostPaid(dmg); } else { - dmg = AbilityUtils.calculateAmount(sa.getHostCard(), damage, sa); + dmg = AbilityUtils.calculateAmount(source, damage, sa); } if (sa.hasParam("ValidPlayers")) { @@ -286,7 +286,7 @@ public class DamageAllAi extends SpellAbilityAi { dmg = ComputerUtilCost.getMaxXValue(sa, ai); sa.setXManaCostPaid(dmg); } else { - dmg = AbilityUtils.calculateAmount(sa.getHostCard(), damage, sa); + dmg = AbilityUtils.calculateAmount(source, damage, sa); } if (sa.hasParam("ValidPlayers")) { diff --git a/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java b/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java index 8c2df450d8b..fc08cab9ceb 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java @@ -39,6 +39,7 @@ import forge.game.keyword.Keyword; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; import forge.game.player.Player; +import forge.game.player.PlayerCollection; import forge.game.spellability.AbilitySub; import forge.game.spellability.SpellAbility; import forge.game.spellability.TargetChoices; @@ -52,10 +53,9 @@ public class DamageDealAi extends DamageAiBase { @Override public boolean chkAIDrawback(SpellAbility sa, Player ai) { final String damage = sa.getParam("NumDmg"); - int dmg = AbilityUtils.calculateAmount(sa.getHostCard(), damage, sa); - final String logic = sa.getParam("AILogic"); - Card source = sa.getHostCard(); + int dmg = AbilityUtils.calculateAmount(source, damage, sa); + final String logic = sa.getParam("AILogic"); if ("MadSarkhanDigDmg".equals(logic)) { return SpecialCardAi.SarkhanTheMad.considerDig(ai, sa); @@ -105,7 +105,7 @@ public class DamageDealAi extends DamageAiBase { final String sourceName = ComputerUtilAbility.getAbilitySourceName(sa); final String damage = sa.getParam("NumDmg"); - int dmg = AbilityUtils.calculateAmount(sa.getHostCard(), damage, sa); + int dmg = AbilityUtils.calculateAmount(source, damage, sa); if (damage.equals("X")) { if (sa.getSVar(damage).equals("Count$xPaid") || sourceName.equals("Crater's Claws")) { @@ -531,7 +531,7 @@ public class DamageDealAi extends DamageAiBase { && "P1P1".equals(sa.getParent().getParam("CounterType"))) { // assuming the SA parent is of PutCounter type. Perhaps it's possible to predict counter multipliers here somehow? final String amountStr = sa.getParent().getParamOrDefault("CounterNum", "1"); - final int amount = AbilityUtils.calculateAmount(sa.getHostCard(), amountStr, sa); + final int amount = AbilityUtils.calculateAmount(source, amountStr, sa); dmg += amount; } @@ -844,7 +844,7 @@ public class DamageDealAi extends DamageAiBase { // this is for Triggered targets that are mandatory final boolean noPrevention = sa.hasParam("NoPrevention"); final boolean divided = sa.isDividedAsYouChoose(); - final Player opp = ai.getWeakestOpponent(); + PlayerCollection opps = ai.getOpponents(); while (sa.canAddMoreTarget()) { if (tgt.canTgtPlaneswalker()) { @@ -872,13 +872,17 @@ public class DamageDealAi extends DamageAiBase { } } - if (sa.canTarget(opp)) { - if (sa.getTargets().add(opp)) { - if (divided) { - sa.addDividedAllocation(opp, dmg); - break; + if (!opps.isEmpty()) { + Player opp = opps.getFirst(); + opps.remove(opp); + if (sa.canTarget(opp)) { + if (sa.getTargets().add(opp)) { + if (divided) { + sa.addDividedAllocation(opp, dmg); + break; + } + continue; } - continue; } } diff --git a/forge-ai/src/main/java/forge/ai/ability/DrawAi.java b/forge-ai/src/main/java/forge/ai/ability/DrawAi.java index 722de88e01d..6b91b0fe46b 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DrawAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DrawAi.java @@ -244,7 +244,7 @@ public class DrawAi extends SpellAbilityAi { int numCards = 1; if (sa.hasParam("NumCards")) { - numCards = AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("NumCards"), sa); + numCards = AbilityUtils.calculateAmount(source, sa.getParam("NumCards"), sa); } boolean xPaid = false; diff --git a/forge-ai/src/main/java/forge/ai/ability/FightAi.java b/forge-ai/src/main/java/forge/ai/ability/FightAi.java index df9cd2ce740..f93c625b14b 100644 --- a/forge-ai/src/main/java/forge/ai/ability/FightAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/FightAi.java @@ -67,8 +67,7 @@ public class FightAi extends SpellAbilityAi { for (Card humanCreature : humCreatures) { if (ComputerUtilCombat.getDamageToKill(humanCreature) <= fighter1.getNetPower() && humanCreature.getNetPower() < ComputerUtilCombat.getDamageToKill(fighter1)) { - // todo: check min/max targets; see if we picked the best - // matchup + // todo: check min/max targets; see if we picked the best matchup sa.getTargets().add(humanCreature); return true; } else if (humanCreature.getSVar("Targeting").equals("Dies")) { @@ -85,8 +84,7 @@ public class FightAi extends SpellAbilityAi { for (Card aiCreature : aiCreatures) { if (ComputerUtilCombat.getDamageToKill(humanCreature) <= aiCreature.getNetPower() && humanCreature.getNetPower() < ComputerUtilCombat.getDamageToKill(aiCreature)) { - // todo: check min/max targets; see if we picked the - // best matchup + // todo: check min/max targets; see if we picked the best matchup sa.getTargets().add(humanCreature); sa.getTargets().add(aiCreature); return true; diff --git a/forge-ai/src/main/java/forge/ai/ability/LifeSetAi.java b/forge-ai/src/main/java/forge/ai/ability/LifeSetAi.java index cbf94b08d48..b8f9b8cab61 100644 --- a/forge-ai/src/main/java/forge/ai/ability/LifeSetAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/LifeSetAi.java @@ -114,7 +114,7 @@ public class LifeSetAi extends SpellAbilityAi { sa.setXManaCostPaid(xPay); amount = xPay; } else { - amount = AbilityUtils.calculateAmount(sa.getHostCard(), amountStr, sa); + amount = AbilityUtils.calculateAmount(source, amountStr, sa); } // special cases when amount can't be calculated without targeting first diff --git a/forge-ai/src/main/java/forge/ai/ability/MustBlockAi.java b/forge-ai/src/main/java/forge/ai/ability/MustBlockAi.java index 9e1ecdeb558..36d271634d3 100644 --- a/forge-ai/src/main/java/forge/ai/ability/MustBlockAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/MustBlockAi.java @@ -78,7 +78,7 @@ public class MustBlockAi extends SpellAbilityAi { Card attacker = null; if (sa.hasParam("DefinedAttacker")) { - final List cards = AbilityUtils.getDefinedCards(sa.getHostCard(), sa.getParam("DefinedAttacker"), sa); + final List cards = AbilityUtils.getDefinedCards(source, sa.getParam("DefinedAttacker"), sa); if (cards.isEmpty()) { return false; } diff --git a/forge-ai/src/main/java/forge/ai/ability/PermanentAi.java b/forge-ai/src/main/java/forge/ai/ability/PermanentAi.java index d1590ea8be2..19def40580f 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PermanentAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/PermanentAi.java @@ -33,7 +33,6 @@ public class PermanentAi extends SpellAbilityAi { */ @Override protected boolean checkPhaseRestrictions(final Player ai, final SpellAbility sa, final PhaseHandler ph) { - final Card card = sa.getHostCard(); if (card.hasKeyword("MayFlashSac") && !ai.couldCastSorcery(sa)) { @@ -51,7 +50,6 @@ public class PermanentAi extends SpellAbilityAi { */ @Override protected boolean checkApiLogic(final Player ai, final SpellAbility sa) { - final Card card = sa.getHostCard(); final Game game = ai.getGame(); diff --git a/forge-ai/src/main/java/forge/ai/ability/PermanentCreatureAi.java b/forge-ai/src/main/java/forge/ai/ability/PermanentCreatureAi.java index 2426fb01c01..479f964478b 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PermanentCreatureAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/PermanentCreatureAi.java @@ -58,7 +58,6 @@ public class PermanentCreatureAi extends PermanentAi { */ @Override protected boolean checkPhaseRestrictions(final Player ai, final SpellAbility sa, final PhaseHandler ph) { - final Card card = sa.getHostCard(); final Game game = ai.getGame(); diff --git a/forge-ai/src/main/java/forge/ai/ability/PermanentNoncreatureAi.java b/forge-ai/src/main/java/forge/ai/ability/PermanentNoncreatureAi.java index 69fc5f3b324..be358b2b6ea 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PermanentNoncreatureAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/PermanentNoncreatureAi.java @@ -27,7 +27,6 @@ public class PermanentNoncreatureAi extends PermanentAi { */ @Override protected boolean checkApiLogic(final Player ai, final SpellAbility sa) { - if (!super.checkApiLogic(ai, sa)) return false; diff --git a/forge-ai/src/main/java/forge/ai/ability/PlayAi.java b/forge-ai/src/main/java/forge/ai/ability/PlayAi.java index 06cf5c6c084..cfd1c82ce58 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PlayAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/PlayAi.java @@ -63,7 +63,7 @@ public class PlayAi extends SpellAbilityAi { return false; } } else if (!sa.hasParam("Valid")) { - cards = AbilityUtils.getDefinedCards(sa.getHostCard(), sa.getParam("Defined"), sa); + cards = AbilityUtils.getDefinedCards(source, sa.getParam("Defined"), sa); if (cards.isEmpty()) { return false; } diff --git a/forge-ai/src/main/java/forge/ai/ability/ProtectAi.java b/forge-ai/src/main/java/forge/ai/ability/ProtectAi.java index 60084d0b8e6..96c02164ee5 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ProtectAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ProtectAi.java @@ -202,11 +202,10 @@ public class ProtectAi extends SpellAbilityAi { sa.resetTargets(); CardCollection list = getProtectCreatures(ai, sa); - list = CardLists.getValidCards(list, tgt.getValidTgts(), sa.getActivatingPlayer(), sa.getHostCard(), sa); + list = CardLists.getValidCards(list, tgt.getValidTgts(), sa.getActivatingPlayer(), source, sa); if (game.getStack().isEmpty()) { - // If the cost is tapping, don't activate before declare - // attack/block + // If the cost is tapping, don't activate before declare attack/block if (sa.getPayCosts().hasTapCost()) { if (game.getPhaseHandler().getPhase().isBefore(PhaseType.COMBAT_DECLARE_ATTACKERS) && game.getPhaseHandler().isPlayerTurn(ai)) { @@ -341,7 +340,7 @@ public class ProtectAi extends SpellAbilityAi { sa.getTargets().add(c); } - if (sa.getTargets().size() < tgt.getMinTargets(sa.getHostCard(), sa)) { + if (sa.getTargets().size() < tgt.getMinTargets(source, sa)) { sa.resetTargets(); return false; } diff --git a/forge-ai/src/main/java/forge/ai/ability/PumpAi.java b/forge-ai/src/main/java/forge/ai/ability/PumpAi.java index 782ab272dc8..5582a1d16dc 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PumpAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/PumpAi.java @@ -540,8 +540,7 @@ public class PumpAi extends PumpAiBase { list = CardLists.getValidCards(list, tgt.getValidTgts(), ai, source, sa); if (game.getStack().isEmpty()) { - // If the cost is tapping, don't activate before declare - // attack/block + // If the cost is tapping, don't activate before declare attack/block if (sa.getPayCosts().hasTapCost()) { if (game.getPhaseHandler().getPhase().isBefore(PhaseType.COMBAT_DECLARE_ATTACKERS) && game.getPhaseHandler().isPlayerTurn(ai)) { diff --git a/forge-ai/src/main/java/forge/ai/ability/PumpAllAi.java b/forge-ai/src/main/java/forge/ai/ability/PumpAllAi.java index 744d3e05a2f..da96861d9a5 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PumpAllAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/PumpAllAi.java @@ -73,8 +73,8 @@ public class PumpAllAi extends PumpAiBase { return true; } - final int power = AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("NumAtt"), sa); - final int defense = AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("NumDef"), sa); + final int power = AbilityUtils.calculateAmount(source, sa.getParam("NumAtt"), sa); + final int defense = AbilityUtils.calculateAmount(source, sa.getParam("NumDef"), sa); final List keywords = sa.hasParam("KW") ? Arrays.asList(sa.getParam("KW").split(" & ")) : new ArrayList<>(); final PhaseType phase = game.getPhaseHandler().getPhase(); diff --git a/forge-ai/src/main/java/forge/ai/ability/SacrificeAi.java b/forge-ai/src/main/java/forge/ai/ability/SacrificeAi.java index 36d0fa484c6..c977ba3c209 100644 --- a/forge-ai/src/main/java/forge/ai/ability/SacrificeAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/SacrificeAi.java @@ -23,7 +23,6 @@ public class SacrificeAi extends SpellAbilityAi { @Override protected boolean canPlayAI(Player ai, SpellAbility sa) { - return sacrificeTgtAI(ai, sa); } diff --git a/forge-ai/src/main/java/forge/ai/ability/SkipPhaseAi.java b/forge-ai/src/main/java/forge/ai/ability/SkipPhaseAi.java index d72eedd0249..608e91a3f82 100644 --- a/forge-ai/src/main/java/forge/ai/ability/SkipPhaseAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/SkipPhaseAi.java @@ -1,5 +1,6 @@ package forge.ai.ability; +import forge.ai.AiAttackController; import forge.ai.SpellAbilityAi; import forge.game.player.Player; import forge.game.player.PlayerActionConfirmMode; @@ -8,16 +9,33 @@ import forge.game.spellability.SpellAbility; public class SkipPhaseAi extends SpellAbilityAi { @Override protected boolean canPlayAI(Player aiPlayer, SpellAbility sa) { - return true; + return targetPlayer(aiPlayer, sa, false); } @Override protected boolean doTriggerAINoCost(Player aiPlayer, SpellAbility sa, boolean mandatory) { - return mandatory || canPlayAI(aiPlayer, sa); + return targetPlayer(aiPlayer, sa, mandatory); } @Override public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) { return true; } + + public boolean targetPlayer(Player ai, SpellAbility sa, boolean mandatory) { + if (sa.usesTargeting()) { + final Player opp = AiAttackController.choosePreferredDefenderPlayer(ai); + sa.resetTargets(); + if (sa.canTarget(opp)) { + sa.getTargets().add(opp); + } + else if (mandatory && sa.canTarget(ai)) { + sa.getTargets().add(ai); + } + else { + return false; + } + } + return true; + } } diff --git a/forge-ai/src/main/java/forge/ai/ability/SkipTurnAi.java b/forge-ai/src/main/java/forge/ai/ability/SkipTurnAi.java index 14cae9165fc..fb7f3415e1a 100644 --- a/forge-ai/src/main/java/forge/ai/ability/SkipTurnAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/SkipTurnAi.java @@ -1,6 +1,5 @@ package forge.ai.ability; - import forge.ai.SpellAbilityAi; import forge.game.player.Player; import forge.game.spellability.SpellAbility; diff --git a/forge-ai/src/main/java/forge/ai/ability/TokenAi.java b/forge-ai/src/main/java/forge/ai/ability/TokenAi.java index bd9bffded98..08a58824a6b 100644 --- a/forge-ai/src/main/java/forge/ai/ability/TokenAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/TokenAi.java @@ -50,7 +50,6 @@ public class TokenAi extends SpellAbilityAi { @Override protected boolean checkPhaseRestrictions(final Player ai, final SpellAbility sa, final PhaseHandler ph) { - final Card source = sa.getHostCard(); // Planeswalker-related flags boolean pwMinus = false; diff --git a/forge-core/src/main/java/forge/token/TokenDb.java b/forge-core/src/main/java/forge/token/TokenDb.java index 421b12f16d2..049e7699e47 100644 --- a/forge-core/src/main/java/forge/token/TokenDb.java +++ b/forge-core/src/main/java/forge/token/TokenDb.java @@ -24,7 +24,7 @@ public class TokenDb implements ITokenDatabase { // colors_power_toughness_cardtypes_sub_types_keywords // Some examples: - // c_3_3_a_wurm_lifelink + // c_3_3_a_phyrexian_wurm_lifelink // w_2_2_knight_first_strike // The image names should be the same as the script name + _set diff --git a/forge-game/src/main/java/forge/game/ForgeScript.java b/forge-game/src/main/java/forge/game/ForgeScript.java index bdf433a80e4..a92d4772e17 100644 --- a/forge-game/src/main/java/forge/game/ForgeScript.java +++ b/forge-game/src/main/java/forge/game/ForgeScript.java @@ -125,7 +125,6 @@ public class ForgeScript { } - public static boolean spellAbilityHasProperty(SpellAbility sa, String property, Player sourceController, Card source, CardTraitBase spellAbility) { if (property.equals("ManaAbility")) { diff --git a/forge-game/src/main/java/forge/game/GameEntity.java b/forge-game/src/main/java/forge/game/GameEntity.java index 06610ed59b3..dfc5d9a329c 100644 --- a/forge-game/src/main/java/forge/game/GameEntity.java +++ b/forge-game/src/main/java/forge/game/GameEntity.java @@ -205,7 +205,6 @@ public abstract class GameEntity extends GameObject implements IIdentifiable { public boolean canBeAttached(final Card attach) { return canBeAttached(attach, false); } - public boolean canBeAttached(final Card attach, boolean checkSBA) { // master mode if (!attach.isAttachment() || attach.isCreature() || equals(attach)) { @@ -250,7 +249,6 @@ public abstract class GameEntity extends GameObject implements IIdentifiable { } protected boolean canBeEnchantedBy(final Card aura) { - SpellAbility sa = aura.getFirstAttachSpell(); TargetRestrictions tgt = null; if (sa != null) { @@ -263,7 +261,6 @@ public abstract class GameEntity extends GameObject implements IIdentifiable { public boolean hasProtectionFrom(final Card source) { return hasProtectionFrom(source, false); } - public abstract boolean hasProtectionFrom(final Card source, final boolean checkSBA); // Counters! @@ -280,7 +277,6 @@ public abstract class GameEntity extends GameObject implements IIdentifiable { Integer value = counters.get(counterName); return value == null ? 0 : value; } - public final int getCounters(final CounterEnumType counterType) { return getCounters(CounterType.get(counterType)); } @@ -292,7 +288,6 @@ public abstract class GameEntity extends GameObject implements IIdentifiable { counters.put(counterType, num); } } - public void setCounters(final CounterEnumType counterType, final Integer num) { setCounters(CounterType.get(counterType), num); } diff --git a/forge-game/src/main/java/forge/game/Match.java b/forge-game/src/main/java/forge/game/Match.java index c8c22588bbc..6177720f34f 100644 --- a/forge-game/src/main/java/forge/game/Match.java +++ b/forge-game/src/main/java/forge/game/Match.java @@ -349,7 +349,7 @@ public class Match { if (!lostOwnership.isEmpty()) { List lostPaperOwnership = new ArrayList<>(); - for(Card c : lostOwnership) { + for (Card c : lostOwnership) { lostPaperOwnership.add((PaperCard)c.getPaperCard()); } outcome.addAnteLost(registered, lostPaperOwnership); @@ -357,7 +357,7 @@ public class Match { if (!gainedOwnership.isEmpty()) { List gainedPaperOwnership = new ArrayList<>(); - for(Card c : gainedOwnership) { + for (Card c : gainedOwnership) { gainedPaperOwnership.add((PaperCard)c.getPaperCard()); } outcome.addAnteWon(registered, gainedPaperOwnership); diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index dc6ad094dd8..87e8d638540 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -1286,8 +1286,7 @@ public class AbilityUtils { SpellAbility s = null; - // TODO - this probably needs to be fleshed out a bit, but the basics - // work + // TODO - this probably needs to be fleshed out a bit, but the basics work if (defined.equals("Self") && sa instanceof SpellAbility) { s = (SpellAbility)sa; } @@ -2731,7 +2730,6 @@ public class AbilityUtils { return doXMath(powers.size(), expr, c, ctb); } - if (sq[0].startsWith("MostProminentCreatureType")) { String restriction = l[0].split(" ")[1]; CardCollection list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), restriction, player, c, ctb); diff --git a/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java b/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java index 7928d57ff2b..3cdd63bf904 100644 --- a/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java +++ b/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java @@ -617,8 +617,29 @@ public abstract class SpellAbilityEffect { combat.addBlocker(attacker, c); combat.orderAttackersForDamageAssignment(c); + { + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Attacker, attacker); + runParams.put(AbilityKey.Blocker, c); + game.getTriggerHandler().runTrigger(TriggerType.AttackerBlockedByCreature, runParams, false); + } + { + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Attackers, attacker); + game.getTriggerHandler().runTrigger(TriggerType.AttackerBlockedOnce, runParams, false); + } + // Run triggers for new blocker and add it to damage assignment order if (!wasBlocked) { + final CardCollection blockers = combat.getBlockers(attacker); + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Attacker, attacker); + runParams.put(AbilityKey.Blockers, blockers); + runParams.put(AbilityKey.NumBlockers, blockers.size()); + runParams.put(AbilityKey.Defender, combat.getDefenderByAttacker(attacker)); + runParams.put(AbilityKey.DefendingPlayer, combat.getDefenderPlayerByAttacker(attacker)); + game.getTriggerHandler().runTrigger(TriggerType.AttackerBlocked, runParams, false); + combat.setBlocked(attacker, true); combat.addBlockerToDamageAssignmentOrder(attacker, c); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/AnimateAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/AnimateAllEffect.java index 10bb5c57ba9..44d7d2cbd43 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/AnimateAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/AnimateAllEffect.java @@ -59,6 +59,9 @@ public class AnimateAllEffect extends AnimateEffectBase { if (types.hasSubtype("ChosenType")) { types.clear(); types.add(host.getChosenType()); + } else if (types.hasSubtype("ChosenType2")) { + types.clear(); + types.add(host.getChosenType2()); } final List keywords = new ArrayList<>(); @@ -125,7 +128,7 @@ public class AnimateAllEffect extends AnimateEffectBase { } CardCollectionView list; - + if (!sa.usesTargeting() && !sa.hasParam("Defined")) { list = game.getCardsIn(ZoneType.Battlefield); } else { diff --git a/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java b/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java index 2bb8cf9c569..9b09ca23032 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java @@ -71,6 +71,9 @@ public class AnimateEffect extends AnimateEffectBase { if (types.hasSubtype("ChosenType")) { types.clear(); types.add(source.getChosenType()); + } else if (types.hasSubtype("ChosenType2")) { + types.clear(); + types.add(source.getChosenType2()); } final List keywords = Lists.newArrayList(); @@ -227,7 +230,7 @@ public class AnimateEffect extends AnimateEffectBase { } // allow SVar substitution for keywords for (int i = 0; i < keywords.size(); i++) { - final String k = keywords.get(i); + final String k = keywords.get(i); if (sa.hasSVar(k)) { keywords.add("\"" + k + "\""); keywords.remove(k); diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index 5e903cfbc13..5ed22a22f26 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -291,7 +291,6 @@ public class ChangeZoneEffect extends SpellAbilityEffect { * @return a {@link java.lang.String} object. */ private static String changeKnownOriginStackDescription(final SpellAbility sa) { - final StringBuilder sb = new StringBuilder(); final Card host = sa.getHostCard(); @@ -1047,7 +1046,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { // only multi-select if player can select more than one if (changeNum > 1 && allowMultiSelect(decider, sa)) { List selectedCards; - if (! sa.hasParam("SelectPrompt")) { + if (!sa.hasParam("SelectPrompt")) { // new default messaging for multi select if (fetchList.size() > changeNum) { //Select up to %changeNum cards from %players %origin diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChooseTypeEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChooseTypeEffect.java index 36b0acf9f67..2bfb5c1bbb0 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChooseTypeEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChooseTypeEffect.java @@ -65,7 +65,7 @@ public class ChooseTypeEffect extends SpellAbilityEffect { for (final Player p : tgtPlayers) { if ((tgt == null) || p.canBeTargetedBy(sa)) { String choice = p.getController().chooseSomeType(type, sa, validTypes, invalidTypes); - if (!sa.hasParam("Secondary")) { + if (!sa.hasParam("ChooseType2")) { card.setChosenType(choice); } else { card.setChosenType2(choice); diff --git a/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java index 5d4ff084e57..d82cef7699f 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java @@ -143,7 +143,7 @@ public class CloneEffect extends SpellAbilityEffect { tgtCard.updateStateForView(); // when clone is itself, cleanup from old abilities - if (host.equals(tgtCard)) { + if (host.equals(tgtCard) && !sa.hasParam("ImprintRememberedNoCleanup")) { tgtCard.clearImprintedCards(); tgtCard.clearRemembered(); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ControlPlayerEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ControlPlayerEffect.java index 4dbdcee1100..7bdd8ae23cd 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ControlPlayerEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ControlPlayerEffect.java @@ -4,13 +4,14 @@ import java.util.List; import forge.GameCommand; import forge.game.Game; +import forge.game.ability.AbilityUtils; import forge.game.ability.SpellAbilityEffect; import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.util.Lang; import forge.util.TextUtil; -/** +/** * TODO: Write javadoc for this type. * */ @@ -18,16 +19,18 @@ public class ControlPlayerEffect extends SpellAbilityEffect { @Override protected String getStackDescription(SpellAbility sa) { - + List tgtPlayers = getTargetPlayers(sa); return TextUtil.concatWithSpace(sa.getActivatingPlayer().toString(),"controls", Lang.joinHomogenous(tgtPlayers),"during their next turn"); } - + @SuppressWarnings("serial") @Override public void resolve(SpellAbility sa) { final Player activator = sa.getActivatingPlayer(); final Game game = activator.getGame(); + final Player controller = sa.hasParam("Controller") ? AbilityUtils.getDefinedPlayers( + sa.getHostCard(), sa.getParam("Controller"), sa).get(0) : activator; List tgtPlayers = getTargetPlayers(sa); @@ -37,13 +40,13 @@ public class ControlPlayerEffect extends SpellAbilityEffect { @Override public void run() { // CR 800.4b - if (activator.hasLost()) { + if (controller.hasLost()) { return; } long ts = game.getNextTimestamp(); - pTarget.addController(ts, activator); - + pTarget.addController(ts, controller); + // on following cleanup release control game.getEndOfTurn().addUntil(new GameCommand() { @Override diff --git a/forge-game/src/main/java/forge/game/ability/effects/CopySpellAbilityEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CopySpellAbilityEffect.java index ea4cf2586e5..0d1c59228d6 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CopySpellAbilityEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CopySpellAbilityEffect.java @@ -73,10 +73,8 @@ public class CopySpellAbilityEffect extends SpellAbilityEffect { controllers = AbilityUtils.getDefinedPlayers(card, sa.getParam("Controller"), sa); } - final List tgtSpells = getTargetSpells(sa); - if (tgtSpells.size() == 0 || amount == 0) { return; } diff --git a/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java index de281569434..d2d1c5eecaa 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java @@ -193,7 +193,7 @@ public class CounterEffect extends SpellAbilityEffect { params.put(AbilityKey.StackSi, si); String destination = srcSA.hasParam("Destination") ? srcSA.getParam("Destination") : tgtSA.isAftermath() ? "Exile" : "Graveyard"; - if (srcSA.hasParam("DestinationChoice")) {//Hinder + if (srcSA.hasParam("DestinationChoice")) { //Hinder List pos = Arrays.asList(srcSA.getParam("DestinationChoice").split(",")); destination = srcSA.getActivatingPlayer().getController().chooseSomeType(Localizer.getInstance().getMessage("lblRemoveDestination"), tgtSA, pos, null); } @@ -211,7 +211,6 @@ public class CounterEffect extends SpellAbilityEffect { } else if (destination.equals("Battlefield")) { if (tgtSA instanceof SpellPermanent) { Card c = tgtSA.getHostCard(); - System.out.println(c + " is SpellPermanent"); c.setController(srcSA.getActivatingPlayer(), 0); game.getAction().moveToPlay(c, srcSA.getActivatingPlayer(), srcSA, params); } else { diff --git a/forge-game/src/main/java/forge/game/ability/effects/CountersMoveEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CountersMoveEffect.java index d636a43cdbd..a7fc037f994 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CountersMoveEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CountersMoveEffect.java @@ -147,8 +147,7 @@ public class CountersMoveEffect extends SpellAbilityEffect { Map countersToAdd = Maps.newHashMap(); for (Card src : srcCards) { - // rule 121.5: If the first and second objects are the same object, nothing - // happens + // rule 121.5: If the first and second objects are the same object, nothing happens if (src.equals(dest)) { continue; } @@ -199,8 +198,7 @@ public class CountersMoveEffect extends SpellAbilityEffect { boolean updateSource = false; for (final Card dest : tgtCards) { - // rule 121.5: If the first and second objects are the same object, nothing - // happens + // rule 121.5: If the first and second objects are the same object, nothing happens if (source.equals(dest)) { continue; } @@ -262,8 +260,7 @@ public class CountersMoveEffect extends SpellAbilityEffect { for (final Card dest : tgtCards) { if (null != dest) { - // rule 121.5: If the first and second objects are the same object, nothing - // happens + // rule 121.5: If the first and second objects are the same object, nothing happens if (source.equals(dest)) { continue; } @@ -329,8 +326,7 @@ public class CountersMoveEffect extends SpellAbilityEffect { final PlayerController pc = player.getController(); final Game game = host.getGame(); - // rule 121.5: If the first and second objects are the same object, nothing - // happens + // rule 121.5: If the first and second objects are the same object, nothing happens if (src.equals(dest)) { return; } diff --git a/forge-game/src/main/java/forge/game/ability/effects/DigUntilEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DigUntilEffect.java index cbe19e79a5b..fa8dd58e4b8 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DigUntilEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DigUntilEffect.java @@ -173,26 +173,25 @@ public class DigUntilEffect extends SpellAbilityEffect { if (optionalFound && !p.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblDoYouWantPutCardToZone", foundDest.getTranslatedName()))) { continue; + } + Card m = null; + if (sa.hasParam("GainControl") && foundDest.equals(ZoneType.Battlefield)) { + c.setController(sa.getActivatingPlayer(), game.getNextTimestamp()); + m = game.getAction().moveTo(c.getController().getZone(foundDest), c, sa); + if (sa.hasParam("Tapped")) { + c.setTapped(true); + } + if (addToCombat(c, c.getController(), sa, "Attacking", "Blocking")) { + combatChanged = true; + } + } else if (sa.hasParam("NoMoveFound") && foundDest.equals(ZoneType.Library)) { + //Don't do anything } else { - Card m = null; - if (sa.hasParam("GainControl") && foundDest.equals(ZoneType.Battlefield)) { - c.setController(sa.getActivatingPlayer(), game.getNextTimestamp()); - m = game.getAction().moveTo(c.getController().getZone(foundDest), c, sa); - if (sa.hasParam("Tapped")) { - c.setTapped(true); - } - if (addToCombat(c, c.getController(), sa, "Attacking", "Blocking")) { - combatChanged = true; - } - } else if (sa.hasParam("NoMoveFound") && foundDest.equals(ZoneType.Library)) { - //Don't do anything - } else { - m = game.getAction().moveTo(foundDest, c, foundLibPos, sa); - } - revealed.remove(c); - if (m != null && !origin.equals(m.getZone().getZoneType())) { - table.put(origin, m.getZone().getZoneType(), m); - } + m = game.getAction().moveTo(foundDest, c, foundLibPos, sa); + } + revealed.remove(c); + if (m != null && !origin.equals(m.getZone().getZoneType())) { + table.put(origin, m.getZone().getZoneType(), m); } } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/EffectEffect.java b/forge-game/src/main/java/forge/game/ability/effects/EffectEffect.java index 44a1097eb3e..04471bed67a 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/EffectEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/EffectEffect.java @@ -247,9 +247,12 @@ public class EffectEffect extends SpellAbilityEffect { } // Set Chosen Type - if (!hostCard.getChosenType().isEmpty()) { + if (hostCard.hasChosenType()) { eff.setChosenType(hostCard.getChosenType()); } + if (hostCard.hasChosenType2()) { + eff.setChosenType2(hostCard.getChosenType2()); + } // Set Chosen name if (!hostCard.getNamedCard().isEmpty()) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/FightEffect.java b/forge-game/src/main/java/forge/game/ability/effects/FightEffect.java index 0570993af24..47c042d245a 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/FightEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/FightEffect.java @@ -65,19 +65,18 @@ public class FightEffect extends DamageBaseEffect { if (isOptional && !controller.getController().confirmAction(sa, null, Localizer.getInstance().getMessage("lblWouldYouLikeFight", CardTranslation.getTranslatedName(fighters.get(0).getName()), CardTranslation.getTranslatedName(fighters.get(1).getName())))) { return; - } else { - dealDamage(sa, fighters.get(0), fighters.get(1)); - - for (Card c : fighters) { - final Map runParams = AbilityKey.newMap(); - runParams.put(AbilityKey.Fighter, c); - game.getTriggerHandler().runTrigger(TriggerType.Fight, runParams, false); - } - - final Map runParams = AbilityKey.newMap(); - runParams.put(AbilityKey.Fighters, fighters); - game.getTriggerHandler().runTrigger(TriggerType.FightOnce, runParams, false); } + + dealDamage(sa, fighters.get(0), fighters.get(1)); + + for (Card c : fighters) { + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Fighter, c); + game.getTriggerHandler().runTrigger(TriggerType.Fight, runParams, false); + } + + final Map runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Fighters, fighters); } private static List getFighters(SpellAbility sa) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/ImmediateTriggerEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ImmediateTriggerEffect.java index fa30bbe8fe8..16d97edd34d 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ImmediateTriggerEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ImmediateTriggerEffect.java @@ -58,8 +58,8 @@ public class ImmediateTriggerEffect extends SpellAbilityEffect { Card lki = CardUtil.getLKICopy(gameCard); lki.clearControllers(); lki.setOwner(sa.getActivatingPlayer()); - // if this trigger is part of ETBReplacement it shouldn't run with LKI from incomplete zone change (Wall of Stolen Identity) - final Card trigHost = sa.getRootAbility().getReplacementEffect() != null && sa.getRootAbility().getReplacementEffect().getMode().equals(ReplacementType.Moved) ? gameCard : lki; + // if this trigger is part of ETBReplacement it shouldn't run with LKI from incomplete zone change (Mimic Vat + Wall of Stolen Identity) + final Card trigHost = sa.getRootAbility().getReplacementEffect() != null && sa.getRootAbility().getReplacementEffect().getMode().equals(ReplacementType.Moved) && gameCard.getZone() == null ? gameCard : lki; final Trigger immediateTrig = TriggerHandler.parseTrigger(mapParams, trigHost, sa.isIntrinsic(), null); immediateTrig.setSpawningAbility(sa.copy(lki, sa.getActivatingPlayer(), true)); diff --git a/forge-game/src/main/java/forge/game/ability/effects/ManaEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ManaEffect.java index 73f1edd0db6..537d7011279 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ManaEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ManaEffect.java @@ -3,6 +3,7 @@ package forge.game.ability.effects; import static forge.util.TextUtil.toManaString; import java.util.List; +import java.util.Map; import org.apache.commons.lang3.StringUtils; @@ -61,34 +62,51 @@ public class ManaEffect extends SpellAbilityEffect { String[] colorsNeeded = express.isEmpty() ? null : express.split(" "); boolean differentChoice = abMana.getOrigProduced().contains("Different"); ColorSet fullOptions = colorOptions; - for (int nMana = 0; nMana < amount; nMana++) { - String choice = ""; - if (colorsNeeded != null && colorsNeeded.length > nMana) { // select from express choices if possible - colorOptions = ColorSet - .fromMask(fullOptions.getColor() & ManaAtom.fromName(colorsNeeded[nMana])); - } - if (colorOptions.isColorless() && colorsProduced.length > 0) { - // If we just need generic mana, no reason to ask the controller for a choice, - // just use the first possible color. - choice = colorsProduced[differentChoice ? nMana : 0]; - } else { - byte chosenColor = p.getController().chooseColor(Localizer.getInstance().getMessage("lblSelectManaProduce"), sa, - differentChoice && (colorsNeeded == null || colorsNeeded.length <= nMana) ? fullOptions : colorOptions); - if (chosenColor == 0) - throw new RuntimeException("ManaEffect::resolve() /*combo mana*/ - " + p + " color mana choice is empty for " + card.getName()); - - if (differentChoice) { - fullOptions = ColorSet.fromMask(fullOptions.getColor() - chosenColor); + // Use specifyManaCombo if possible + if (colorsNeeded == null && amount > 1 && !sa.hasParam("TwoEach")) { + Map choices = p.getController().specifyManaCombo(sa, colorOptions, amount, differentChoice); + for (Map.Entry e : choices.entrySet()) { + Byte chosenColor = e.getKey(); + String choice = MagicColor.toShortString(chosenColor); + Integer count = e.getValue(); + while (count > 0) { + if (choiceString.length() > 0) { + choiceString.append(" "); + } + choiceString.append(choice); + --count; } - choice = MagicColor.toShortString(chosenColor); } + } else { + for (int nMana = 0; nMana < amount; nMana++) { + String choice = ""; + if (colorsNeeded != null && colorsNeeded.length > nMana) { // select from express choices if possible + colorOptions = ColorSet + .fromMask(fullOptions.getColor() & ManaAtom.fromName(colorsNeeded[nMana])); + } + if (colorOptions.isColorless() && colorsProduced.length > 0) { + // If we just need generic mana, no reason to ask the controller for a choice, + // just use the first possible color. + choice = colorsProduced[differentChoice ? nMana : 0]; + } else { + byte chosenColor = p.getController().chooseColor(Localizer.getInstance().getMessage("lblSelectManaProduce"), sa, + differentChoice && (colorsNeeded == null || colorsNeeded.length <= nMana) ? fullOptions : colorOptions); + if (chosenColor == 0) + throw new RuntimeException("ManaEffect::resolve() /*combo mana*/ - " + p + " color mana choice is empty for " + card.getName()); - if (nMana > 0) { - choiceString.append(" "); - } - choiceString.append(choice); - if (sa.hasParam("TwoEach")) { - choiceString.append(" ").append(choice); + if (differentChoice) { + fullOptions = ColorSet.fromMask(fullOptions.getColor() - chosenColor); + } + choice = MagicColor.toShortString(chosenColor); + } + + if (nMana > 0) { + choiceString.append(" "); + } + choiceString.append(choice); + if (sa.hasParam("TwoEach")) { + choiceString.append(" ").append(choice); + } } } @@ -128,7 +146,7 @@ public class ManaEffect extends SpellAbilityEffect { if (type.equals("EnchantedManaCost")) { Card enchanted = card.getEnchantingCard(); - if (enchanted == null ) + if (enchanted == null ) continue; StringBuilder sb = new StringBuilder(); @@ -234,7 +252,7 @@ public class ManaEffect extends SpellAbilityEffect { * a {@link forge.card.spellability.AbilityMana} object. * @param af * a {@link forge.game.ability.AbilityFactory} object. - * + * * @return a {@link java.lang.String} object. */ diff --git a/forge-game/src/main/java/forge/game/ability/effects/RevealEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RevealEffect.java index 4dea92f1a35..cb8602ca2cb 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RevealEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RevealEffect.java @@ -59,7 +59,7 @@ public class RevealEffect extends SpellAbilityEffect { if (valid.isEmpty()) continue; - if( cnt > valid.size() ) + if (cnt > valid.size()) cnt = valid.size(); int min = cnt; diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 47a1e8260fe..75b1ac7f966 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -1240,7 +1240,6 @@ public class Card extends GameEntity implements Comparable, IHasSVars { public final boolean hasTrigger(final Trigger t) { return currentState.hasTrigger(t); } - public final boolean hasTrigger(final int id) { return currentState.hasTrigger(id); } @@ -1495,7 +1494,6 @@ public class Card extends GameEntity implements Comparable, IHasSVars { public boolean removeCounterTimestamp(CounterType counterType) { return removeCounterTimestamp(counterType, true); } - public boolean removeCounterTimestamp(CounterType counterType, boolean updateView) { Long old = counterTypeTimestamps.remove(counterType); if (old != null) { @@ -1581,6 +1579,14 @@ public class Card extends GameEntity implements Comparable, IHasSVars { } } + public final int sumAllCounters() { + int count = 0; + for (final Integer value2 : counters.values()) { + count += value2; + } + return count; + } + public final String getSVar(final String var) { return currentState.getSVar(var); } @@ -1611,18 +1617,9 @@ public class Card extends GameEntity implements Comparable, IHasSVars { currentState.removeSVar(var); } - public final int sumAllCounters() { - int count = 0; - for (final Integer value2 : counters.values()) { - count += value2; - } - return count; - } - public final int getTurnInZone() { return turnInZone; } - public final void setTurnInZone(final int turn) { turnInZone = turn; } @@ -1630,7 +1627,6 @@ public class Card extends GameEntity implements Comparable, IHasSVars { public final Player getTurnInController() { return turnInController; } - public final void setTurnInController(final Player p) { turnInController = p; } @@ -1638,7 +1634,6 @@ public class Card extends GameEntity implements Comparable, IHasSVars { public final void setManaCost(final ManaCost s) { currentState.setManaCost(s); } - public final ManaCost getManaCost() { return currentState.getManaCost(); } diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index 416fd57c25b..060db0f2008 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -1273,7 +1273,7 @@ public class CardFactoryUtil { sbTrig.append("Living Weapon (").append(inst.getReminderText()).append(")"); final StringBuilder sbGerm = new StringBuilder(); - sbGerm.append("DB$ Token | TokenAmount$ 1 | TokenScript$ b_0_0_germ |TokenOwner$ You | RememberTokens$ True"); + sbGerm.append("DB$ Token | TokenAmount$ 1 | TokenScript$ b_0_0_phyrexian_germ |TokenOwner$ You | RememberTokens$ True"); final SpellAbility saGerm = AbilityFactory.getAbility(sbGerm.toString(), card); diff --git a/forge-game/src/main/java/forge/game/card/CardUtil.java b/forge-game/src/main/java/forge/game/card/CardUtil.java index f6181cdf596..69bee0fc573 100644 --- a/forge-game/src/main/java/forge/game/card/CardUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardUtil.java @@ -221,9 +221,9 @@ public final class CardUtil { newCopy.getCurrentState().copyFrom(in.getState(in.getFaceupCardStateName()), true); if (in.isFaceDown()) { - // prevent StackDescription from revealing face - newCopy.setName(in.toString()); newCopy.turnFaceDownNoUpdate(); + // prevent StackDescription from revealing face + newCopy.updateStateForView(); } if (in.isAdventureCard() && in.getFaceupCardStateName().equals(CardStateName.Original)) { @@ -275,7 +275,7 @@ public final class CardUtil { newCopy.addRemembered(in.getRemembered()); newCopy.addImprintedCards(in.getImprintedCards()); - for(Table.Cell cl : in.getEtbCounters()) { + for (Table.Cell cl : in.getEtbCounters()) { newCopy.addEtbCounter(cl.getColumnKey(), cl.getValue(), cl.getRowKey()); } diff --git a/forge-game/src/main/java/forge/game/combat/Combat.java b/forge-game/src/main/java/forge/game/combat/Combat.java index aaddc15cd7b..857b0738076 100644 --- a/forge-game/src/main/java/forge/game/combat/Combat.java +++ b/forge-game/src/main/java/forge/game/combat/Combat.java @@ -6,12 +6,12 @@ * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ @@ -59,7 +59,7 @@ import forge.util.collect.FCollectionView; *

* Combat class. *

- * + * * @author Forge * @version $Id$ */ @@ -78,7 +78,7 @@ public class Combat { private Map lkiCache = Maps.newHashMap(); private CardDamageMap damageMap = new CardDamageMap(); - // List holds creatures who have dealt 1st strike damage to disallow them deal damage on regular basis (unless they have double-strike KW) + // List holds creatures who have dealt 1st strike damage to disallow them deal damage on regular basis (unless they have double-strike KW) private CardCollection combatantsThatDealtFirstStrikeDamage = new CardCollection(); public Combat(final Player attacker) { @@ -110,7 +110,7 @@ public class Combat { for (Entry entry : combat.blockedBands.entries()) { blockedBands.put(bandsMap.get(entry.getKey()), map.map(entry.getValue())); } - + for (Entry entry : combat.attackersOrderedForDamageAssignment.entrySet()) { attackersOrderedForDamageAssignment.put(map.map(entry.getKey()), map.mapCollection(entry.getValue())); } @@ -277,7 +277,7 @@ public class Combat { } } return null; - } + } public final Player getDefenderPlayerByAttacker(final Card c) { GameEntity defender = getDefenderByAttacker(c); @@ -300,10 +300,10 @@ public class Combat { return ab; } } - CombatLki lki = lkiCache.get(c); + CombatLki lki = lkiCache.get(c); return lki == null || !lki.isAttacker ? null : lki.getFirstBand(); } - + public final AttackingBand getBandOfAttackerNotNull(final Card c) { AttackingBand band = getBandOfAttacker(c); if (band == null) { @@ -314,8 +314,8 @@ public class Combat { public final List getAttackingBands() { return Lists.newArrayList(attackedByBands.values()); - } - + } + /** * Checks if a card is attacking, returns true if the card was attacking when it left the battlefield */ @@ -333,7 +333,7 @@ public class Combat { } return false; } - + /** * Checks if a card is currently attacking, returns false if the card is not currently attacking, even if its LKI was. */ @@ -355,7 +355,7 @@ public class Combat { } public final CardCollection getBlockers(final Card card) { - // If requesting the ordered blocking list pass true, directly. + // If requesting the ordered blocking list pass true, directly. AttackingBand band = getBandOfAttacker(card); Collection blockers = blockedBands.get(band); return blockers == null ? new CardCollection() : new CardCollection(blockers); @@ -456,7 +456,7 @@ public class Combat { } /** If there are multiple blockers, the Attacker declares the Assignment Order */ - public void orderBlockersForDamageAssignment() { // this method performs controller's role + public void orderBlockersForDamageAssignment() { // this method performs controller's role List> blockersNeedManualOrdering = new ArrayList<>(); for (AttackingBand band : attackedByBands.values()) { if (band.isEmpty()) continue; @@ -475,15 +475,15 @@ public class Combat { } } } - - // brought this out of iteration on bands to avoid concurrency problems + + // brought this out of iteration on bands to avoid concurrency problems for (Pair pair : blockersNeedManualOrdering) { orderBlockersForDamageAssignment(pair.getLeft(), pair.getRight()); } } - + /** If there are multiple blockers, the Attacker declares the Assignment Order */ - public void orderBlockersForDamageAssignment(Card attacker, CardCollection blockers) { // this method performs controller's role + public void orderBlockersForDamageAssignment(Card attacker, CardCollection blockers) { // this method performs controller's role if (blockers.size() <= 1) { blockersOrderedForDamageAssignment.put(attacker, new CardCollection(blockers)); return; @@ -513,7 +513,7 @@ public class Combat { * Add a blocker to the damage assignment order of an attacker. The * relative order of creatures already blocking the attacker may not be * changed. Performs controller's role. - * + * * @param attacker the attacking creature. * @param blocker the blocking creature. */ @@ -527,7 +527,7 @@ public class Combat { blockersOrderedForDamageAssignment.put(attacker, orderedBlockers); } } - + public void orderAttackersForDamageAssignment() { // this method performs controller's role // If there are multiple blockers, the Attacker declares the Assignment Order for (final Card blocker : getAllBlockers()) { @@ -538,7 +538,7 @@ public class Combat { public void orderAttackersForDamageAssignment(Card blocker) { // this method performs controller's role CardCollection attackers = getAttackersBlockedBy(blocker); // They need a reverse map here: Blocker => List - + Player blockerCtrl = blocker.getController(); CardCollection orderedAttacker = attackers.size() <= 1 ? attackers : blockerCtrl.getController().orderAttackers(blocker, attackers); @@ -549,11 +549,11 @@ public class Combat { // removes references to this attacker from all indices and orders public void unregisterAttacker(final Card c, AttackingBand ab) { blockersOrderedForDamageAssignment.remove(c); - + Collection blockers = blockedBands.get(ab); if (blockers != null) { for (Card b : blockers) { - // Clear removed attacker from assignment order + // Clear removed attacker from assignment order if (attackersOrderedForDamageAssignment.containsKey(b)) { attackersOrderedForDamageAssignment.get(b).remove(c); } @@ -655,7 +655,7 @@ public class Combat { } return true; } - + // Call this method right after turn-based action of declare blockers has been performed public final void fireTriggersForUnblockedAttackers(final Game game) { boolean bFlag = false; @@ -698,7 +698,7 @@ public class Combat { if (!dealDamageThisPhase(blocker, firstStrikeDamage)) { continue; } - + if (firstStrikeDamage) { combatantsThatDealtFirstStrikeDamage.add(blocker); } @@ -737,7 +737,7 @@ public class Combat { if (!dealDamageThisPhase(attacker, firstStrikeDamage)) { continue; } - + if (firstStrikeDamage) { combatantsThatDealtFirstStrikeDamage.add(attacker); } @@ -750,7 +750,7 @@ public class Combat { if (damageDealt <= 0) { continue; } - + AttackingBand band = getBandOfAttacker(attacker); if (band == null) { continue; @@ -764,6 +764,13 @@ public class Combat { CardTranslation.getTranslatedName(attacker.getName())))); boolean trampler = attacker.hasKeyword(Keyword.TRAMPLE); orderedBlockers = blockersOrderedForDamageAssignment.get(attacker); + boolean assignCombatDamageToCreature = ((orderedBlockers == null || orderedBlockers.isEmpty()) && + getDefendersCreatures().size() > 0 && + attacker.hasKeyword("If CARDNAME is unblocked, you may have it assign its combat damage to " + + "a creature defending player controls.") && + attacker.getController().getController().confirmAction(null, null, + Localizer.getInstance().getMessage("lblAssignCombatDamageToCreature", + CardTranslation.getTranslatedName(attacker.getName())))); if (divideCombatDamageAsChoose) { if (orderedBlockers == null || orderedBlockers.isEmpty()) { orderedBlockers = getDefendersCreatures(); @@ -790,7 +797,11 @@ public class Combat { defender = getDefenderPlayerByAttacker(attacker); } if (orderedBlockers == null || orderedBlockers.isEmpty()) { - if (trampler || !band.isBlocked()) { // this is called after declare blockers, no worries 'bout nulls in isBlocked + if (assignCombatDamageToCreature) { + Card chosen = attacker.getController().getController().chooseCardsForEffect(getDefendersCreatures(), + null, Localizer.getInstance().getMessage("lblChooseCreature"), 1, 1, false, null).get(0); + damageMap.put(attacker, chosen, damageDealt); + } else if (trampler || !band.isBlocked()) { // this is called after declare blockers, no worries 'bout nulls in isBlocked damageMap.put(attacker, defender, damageDealt); } // No damage happens if blocked but no blockers left } @@ -827,7 +838,7 @@ public class Combat { } // for return assignedDamage; } - + private final boolean dealDamageThisPhase(Card combatant, boolean firstStrikeDamage) { // During first strike damage, double strike and first strike deal damage // During regular strike damage, double strike and anyone who hasn't dealt damage deal damage @@ -885,7 +896,7 @@ public class Combat { public boolean isPlayerAttacked(Player who) { for (GameEntity defender : attackedByBands.keySet()) { Card defenderAsCard = defender instanceof Card ? (Card)defender : null; - if ((null != defenderAsCard && defenderAsCard.getController() != who) || + if ((null != defenderAsCard && defenderAsCard.getController() != who) || (null == defenderAsCard && defender != who)) { continue; // defender is not related to player 'who' } diff --git a/forge-game/src/main/java/forge/game/cost/CostPartMana.java b/forge-game/src/main/java/forge/game/cost/CostPartMana.java index cdc958d7962..19d7d609d93 100644 --- a/forge-game/src/main/java/forge/game/cost/CostPartMana.java +++ b/forge-game/src/main/java/forge/game/cost/CostPartMana.java @@ -112,13 +112,11 @@ public class CostPartMana extends CostPart { @Override public boolean isUndoable() { return true; } - @Override public final String toString() { return cost.toString(); } - @Override public final boolean canPay(final SpellAbility ability, final Player payer) { // For now, this will always return true. But this should probably be diff --git a/forge-game/src/main/java/forge/game/cost/PaymentDecision.java b/forge-game/src/main/java/forge/game/cost/PaymentDecision.java index 743a4160d2e..bb0e7c2bb51 100644 --- a/forge-game/src/main/java/forge/game/cost/PaymentDecision.java +++ b/forge-game/src/main/java/forge/game/cost/PaymentDecision.java @@ -58,7 +58,6 @@ public class PaymentDecision { return res; } - public static PaymentDecision number(int c) { return new PaymentDecision(c); } @@ -77,7 +76,6 @@ public class PaymentDecision { return new PaymentDecision(null, manas, null, null, null); } - /* (non-Javadoc) * @see java.lang.Object#toString() */ diff --git a/forge-game/src/main/java/forge/game/keyword/Keyword.java b/forge-game/src/main/java/forge/game/keyword/Keyword.java index d2b3dd41127..fe9dd404b4e 100644 --- a/forge-game/src/main/java/forge/game/keyword/Keyword.java +++ b/forge-game/src/main/java/forge/game/keyword/Keyword.java @@ -100,7 +100,7 @@ public enum Keyword { LANDWALK("Landwalk", KeywordWithType.class, false, "This creature is unblockable as long as defending player controls a %s."), LEVEL_UP("Level up", KeywordWithCost.class, false, "%s: Put a level counter on this. Level up only as a sorcery."), LIFELINK("Lifelink", SimpleKeyword.class, true, "Damage dealt by this creature also causes its controller to gain that much life."), - LIVING_WEAPON("Living weapon", SimpleKeyword.class, true, "When this Equipment enters the battlefield, create a 0/0 black Germ creature token, then attach this to it."), + LIVING_WEAPON("Living Weapon", SimpleKeyword.class, true, "When this Equipment enters the battlefield, create a 0/0 black Phyrexian Germ creature token, then attach this to it."), MADNESS("Madness", KeywordWithCost.class, false, "If you discard this card, discard it into exile. When you do, cast it for %s or put it into your graveyard."), MELEE("Melee", SimpleKeyword.class, false, "Whenever this creature attacks, it gets +1/+1 until end of turn for each opponent you attacked this combat."), MENTOR("Mentor", SimpleKeyword.class, false, "Whenever this creature attacks, put a +1/+1 counter on target attacking creature with lesser power."), diff --git a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java index 2f0199a2499..b80e6f3732b 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -505,7 +505,7 @@ public class PhaseHandler implements java.io.Serializable { eventEndCombat = new GameEventCombatEnded(attackers, blockers); } endCombat(); - for(Player player : game.getPlayers()) { + for (Player player : game.getPlayers()) { player.resetCombatantsThisCombat(); } diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index b8ad6e0576f..d28579534ac 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -430,7 +430,6 @@ public class Player extends GameEntity implements Comparable { public boolean isOpponentOf(Player other) { return other != this && other != null && (other.teamNumber < 0 || other.teamNumber != teamNumber); } - public boolean isOpponentOf(String other) { Player otherPlayer = null; for (Player p : game.getPlayers()) { @@ -474,9 +473,7 @@ public class Player extends GameEntity implements Comparable { public final boolean gainLife(int lifeGain, final Card source) { return gainLife(lifeGain, source, null); } - public final boolean gainLife(int lifeGain, final Card source, final SpellAbility sa) { - // Run any applicable replacement effects. final Map repParams = AbilityKey.mapFromAffected(this); repParams.put(AbilityKey.LifeGained, lifeGain); @@ -544,7 +541,6 @@ public class Player extends GameEntity implements Comparable { public final int loseLife(final int toLose) { return loseLife(toLose, false); } - public final int loseLife(final int toLose, final boolean manaBurn) { int lifeLost = 0; if (!canLoseLife()) { @@ -870,7 +866,6 @@ public class Player extends GameEntity implements Comparable { public final int addCounter(final CounterType counterType, final int n, final Player source, final SpellAbility cause, final boolean applyMultiplier, GameEntityCounterTable table) { return addCounter(counterType, n, source, cause, applyMultiplier, true, table); } - @Override public int addCounter(CounterType counterType, int n, final Player source, final SpellAbility cause, boolean applyMultiplier, boolean fireEvents, GameEntityCounterTable table) { int addAmount = n; @@ -1000,7 +995,6 @@ public class Player extends GameEntity implements Comparable { public final void addChangedKeywords(final String[] addKeywords, final String[] removeKeywords, final Long timestamp) { addChangedKeywords(ImmutableList.copyOf(addKeywords), ImmutableList.copyOf(removeKeywords), timestamp); } - public final void addChangedKeywords(final List addKeywords, final List removeKeywords, final Long timestamp) { // if the key already exists - merge entries KeywordsChange cks = null; @@ -1050,8 +1044,6 @@ public class Player extends GameEntity implements Comparable { public final void removeKeyword(final String keyword) { removeKeyword(keyword, true); } - - public final void removeKeyword(final String keyword, final boolean allInstances) { boolean keywordRemoved = false; @@ -1082,7 +1074,6 @@ public class Player extends GameEntity implements Comparable { public final boolean hasKeyword(final String keyword) { return keywords.contains(keyword); } - @Override public final boolean hasKeyword(final Keyword keyword) { return keywords.contains(keyword); @@ -1172,7 +1163,6 @@ public class Player extends GameEntity implements Comparable { public boolean hasProtectionFrom(final Card source, final boolean checkSBA) { return hasProtectionFrom(source, checkSBA, false); } - public boolean hasProtectionFrom(final Card source, final boolean checkSBA, final boolean damageSource) { final boolean colorlessDamage = damageSource && source.hasKeyword("Colorless Damage Source"); for (KeywordInterface ki : keywords) { @@ -1638,6 +1628,7 @@ public class Player extends GameEntity implements Comparable { public final int getNumDiscardedThisTurn() { return numDiscardedThisTurn; } + public final void resetNumDiscardedThisTurn() { numDiscardedThisTurn = 0; } @@ -1925,7 +1916,6 @@ public class Player extends GameEntity implements Comparable { public boolean hasTappedLandForManaThisTurn() { return tappedLandForManaThisTurn; } - public void setTappedLandForManaThisTurn(boolean tappedLandForManaThisTurn) { this.tappedLandForManaThisTurn = tappedLandForManaThisTurn; } @@ -2004,7 +1994,6 @@ public class Player extends GameEntity implements Comparable { boolean isAnyOppLoseProof = false; for (Player p : game.getPlayers()) { if (p == this || p.getOutcome() != null) { - continue; // except self and already dead } isAnyOppLoseProof |= p.hasKeyword("You can't lose the game."); @@ -2083,7 +2072,6 @@ public class Player extends GameEntity implements Comparable { public final boolean hasRevolt() { return revolt; } - public final void setRevolt(final boolean val) { revolt = val; } @@ -2143,7 +2131,6 @@ public class Player extends GameEntity implements Comparable { public final void setLibrarySearched(final int l) { numLibrarySearchedOwn = l; } - public final int getLibrarySearched() { return numLibrarySearchedOwn; } @@ -2167,7 +2154,6 @@ public class Player extends GameEntity implements Comparable { @Override public final boolean isValid(final String restriction, final Player sourceController, final Card source, CardTraitBase spellAbility) { - final String[] incR = restriction.split("\\.", 2); if (incR[0].equals("Opponent")) { @@ -2320,6 +2306,7 @@ public class Player extends GameEntity implements Comparable { public final void resetSpellCastThisGame() { spellsCastThisGame = 0; } + public final int getLifeGainedByTeamThisTurn() { return lifeGainedByTeamThisTurn; } @@ -2647,7 +2634,6 @@ public class Player extends GameEntity implements Comparable { public int getStartingHandSize() { return startingHandSize; } - public void setStartingHandSize(int shs) { startingHandSize = shs; } @@ -2687,7 +2673,6 @@ public class Player extends GameEntity implements Comparable { * Puts my currently active planes, if any, at the bottom of my planar deck. */ public void leaveCurrentPlane() { - final Map runParams = AbilityKey.newMap(); runParams.put(AbilityKey.Cards, new CardCollection(currentPlanes)); game.getTriggerHandler().runTrigger(TriggerType.PlaneswalkedFrom, runParams, false); @@ -2746,11 +2731,9 @@ public class Player extends GameEntity implements Comparable { public CardCollectionView getInboundTokens() { return inboundTokens; } - public void addInboundToken(Card c) { inboundTokens.add(c); } - public void removeInboundToken(Card c) { inboundTokens.remove(c); } @@ -2791,7 +2774,6 @@ public class Player extends GameEntity implements Comparable { ColorSet identity = ColorSet.fromMask(ci); return identity; } - public ColorSet getNotCommanderColorID() { if (commanders.isEmpty()) { return null; @@ -2804,7 +2786,6 @@ public class Player extends GameEntity implements Comparable { Integer cast = commanderCast.get(commander); return cast == null ? 0 : cast.intValue(); } - public void incCommanderCast(Card commander) { commanderCast.put(commander, getCommanderCast(commander) + 1); getView().updateCommanderCast(this, commander); @@ -2842,9 +2823,11 @@ public class Player extends GameEntity implements Comparable { public void setExtraTurnCount(final int val) { view.setExtraTurnCount(val); } + public void setHasPriority(final boolean val) { view.setHasPriority(val); } + public boolean isAI() { return view.isAI(); } @@ -3137,7 +3120,6 @@ public class Player extends GameEntity implements Comparable { public CardCollectionView getLostOwnership() { return lostOwnership; } - public CardCollectionView getGainedOwnership() { return gainedOwnership; } @@ -3209,6 +3191,7 @@ public class Player extends GameEntity implements Comparable { this.updateZoneForView(com); } } + public void updateKeywordCardAbilityText() { if(getKeywordCard() == null) return; @@ -3252,10 +3235,10 @@ public class Player extends GameEntity implements Comparable { keywordEffect = null; } } + public boolean hasBlessing() { return blessingEffect != null; } - public void setBlessing(boolean bless) { // no need to to change if ((blessingEffect != null) == bless) { @@ -3357,7 +3340,6 @@ public class Player extends GameEntity implements Comparable { getView().updateAdditionalVote(this); getGame().fireEvent(new GameEventPlayerStatsChanged(this, false)); } - public void removeAdditionalVote(long timestamp) { if (additionalVotes.remove(timestamp) != null) { getView().updateAdditionalVote(this); @@ -3420,7 +3402,6 @@ public class Player extends GameEntity implements Comparable { public Set getControlVote() { return controlVotes; } - public void setControlVote(Set value) { controlVotes.clear(); controlVotes.addAll(value); diff --git a/forge-game/src/main/java/forge/game/player/PlayerController.java b/forge-game/src/main/java/forge/game/player/PlayerController.java index 6a94b3e4ccb..a11be5b4fdd 100644 --- a/forge-game/src/main/java/forge/game/player/PlayerController.java +++ b/forge-game/src/main/java/forge/game/player/PlayerController.java @@ -48,9 +48,9 @@ import forge.item.PaperCard; import forge.util.ITriggerEvent; import forge.util.collect.FCollectionView; -/** +/** * A prototype for player controller class - * + * * Handles phase skips for now. */ public abstract class PlayerController { @@ -109,21 +109,22 @@ public abstract class PlayerController { public abstract Map assignCombatDamage(Card attacker, CardCollectionView blockers, int damageDealt, GameEntity defender, boolean overrideOrder); public abstract Map divideShield(Card effectSource, Map affected, int shieldAmount); + public abstract Map specifyManaCombo(SpellAbility sa, ColorSet colorSet, int manaAmount, boolean different); public abstract Integer announceRequirements(SpellAbility ability, String announce); public abstract CardCollectionView choosePermanentsToSacrifice(SpellAbility sa, int min, int max, CardCollectionView validTargets, String message); public abstract CardCollectionView choosePermanentsToDestroy(SpellAbility sa, int min, int max, CardCollectionView validTargets, String message); public abstract TargetChoices chooseNewTargetsFor(SpellAbility ability, Predicate filter, boolean optional); - public abstract boolean chooseTargetsFor(SpellAbility currentAbility); // this is bad a function for it assigns targets to sa inside its body + public abstract boolean chooseTargetsFor(SpellAbility currentAbility); // this is bad a function for it assigns targets to sa inside its body // Specify a target of a spell (Spellskite) public abstract Pair chooseTarget(SpellAbility sa, List> allTargets); - // Q: why is there min/max and optional at once? A: This is to handle cases like 'choose 3 to 5 cards or none at all' + // Q: why is there min/max and optional at once? A: This is to handle cases like 'choose 3 to 5 cards or none at all' public abstract CardCollectionView chooseCardsForEffect(CardCollectionView sourceList, SpellAbility sa, String title, int min, int max, boolean isOptional, Map params); - + public final T chooseSingleEntityForEffect(FCollectionView optionList, SpellAbility sa, String title, Map params) { return chooseSingleEntityForEffect(optionList, null, sa, title, false, null, params); } - public final T chooseSingleEntityForEffect(FCollectionView optionList, SpellAbility sa, String title, boolean isOptional, Map params) { return chooseSingleEntityForEffect(optionList, null, sa, title, isOptional, null, params); } + public final T chooseSingleEntityForEffect(FCollectionView optionList, SpellAbility sa, String title, boolean isOptional, Map params) { return chooseSingleEntityForEffect(optionList, null, sa, title, isOptional, null, params); } public abstract T chooseSingleEntityForEffect(FCollectionView optionList, DelayedReveal delayedReveal, SpellAbility sa, String title, boolean isOptional, Player relatedPlayer, Map params); public abstract List chooseSpellAbilitiesForEffect(List spells, SpellAbility sa, String title, int num, Map params); @@ -209,7 +210,7 @@ public abstract class PlayerController { public final boolean chooseBinary(SpellAbility sa, String question, BinaryChoiceType kindOfChoice) { return chooseBinary(sa, question, kindOfChoice, (Boolean) null); } public abstract boolean chooseBinary(SpellAbility sa, String question, BinaryChoiceType kindOfChoice, Boolean defaultChioce); public boolean chooseBinary(SpellAbility sa, String question, BinaryChoiceType kindOfChoice, Map params) { return chooseBinary(sa, question, kindOfChoice); } - + public abstract boolean chooseFlipResult(SpellAbility sa, Player flipper, boolean[] results, boolean call); public abstract Card chooseProtectionShield(GameEntity entityBeingDamaged, List options, Map choiceMap); @@ -260,7 +261,7 @@ public abstract class PlayerController { public abstract String chooseCardName(SpellAbility sa, Predicate cpp, String valid, String message); public abstract String chooseCardName(SpellAbility sa, List faces, String message); - // better to have this odd method than those if playerType comparison in ChangeZone + // better to have this odd method than those if playerType comparison in ChangeZone public abstract Card chooseSingleCardForZoneChange(ZoneType destination, List origin, SpellAbility sa, CardCollection fetchList, DelayedReveal delayedReveal, String selectPrompt, boolean isOptional, Player decider); public abstract List chooseCardsForZoneChange(ZoneType destination, List origin, SpellAbility sa, CardCollection fetchList, int min, int max, DelayedReveal delayedReveal, String selectPrompt, Player decider); diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceDiscard.java b/forge-game/src/main/java/forge/game/replacement/ReplaceDiscard.java index 8caf443f447..42baa247551 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceDiscard.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceDiscard.java @@ -44,7 +44,6 @@ public class ReplaceDiscard extends ReplacementEffect { */ @Override public boolean canReplace(Map runParams) { - if (!matchesValidParam("ValidPlayer", runParams.get(AbilityKey.Affected))) { return false; } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceMoved.java b/forge-game/src/main/java/forge/game/replacement/ReplaceMoved.java index 7ee18b00973..4d9b3bbb264 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceMoved.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceMoved.java @@ -28,7 +28,6 @@ public class ReplaceMoved extends ReplacementEffect { */ @Override public boolean canReplace(Map runParams) { - if (!matchesValidParam("ValidCard", runParams.get(AbilityKey.Affected))) { return false; } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java index dc963073153..32d828a85ee 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java @@ -281,7 +281,7 @@ public class ReplacementHandler { // Updated Replacements need to be logged elsewhere because its otherwise in the wrong order if (res != ReplacementResult.Updated) { String message = chosenRE.getDescription(); - if ( !StringUtils.isEmpty(message)) + if (!StringUtils.isEmpty(message)) if (chosenRE.getHostCard() != null) { message = TextUtil.fastReplace(message, "CARDNAME", chosenRE.getHostCard().getName()); } diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java index 509d9c6d65d..a96884aaeb4 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java @@ -385,7 +385,6 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit manaPart = manaPart0; } - // Spell, and Ability, and other Ability objects override this method public abstract boolean canPlay(); diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerDiscarded.java b/forge-game/src/main/java/forge/game/trigger/TriggerDiscarded.java index f7a107009d4..ab1762f3b1d 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerDiscarded.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerDiscarded.java @@ -73,7 +73,6 @@ public class TriggerDiscarded extends Trigger { return true; } - /** {@inheritDoc} */ @Override public final void setTriggeringObjects(final SpellAbility sa, Map runParams) { diff --git a/forge-game/src/main/java/forge/game/trigger/WrappedAbility.java b/forge-game/src/main/java/forge/game/trigger/WrappedAbility.java index bade2975b81..189ea22af57 100644 --- a/forge-game/src/main/java/forge/game/trigger/WrappedAbility.java +++ b/forge-game/src/main/java/forge/game/trigger/WrappedAbility.java @@ -10,11 +10,14 @@ import com.google.common.collect.Maps; import forge.card.mana.ManaCost; import forge.game.Game; +import forge.game.GameEntityCounterTable; import forge.game.ability.AbilityKey; import forge.game.ability.ApiType; import forge.game.card.Card; import forge.game.card.CardCollection; +import forge.game.card.CardDamageMap; import forge.game.card.CardState; +import forge.game.card.CardZoneTable; import forge.game.cost.Cost; import forge.game.player.Player; import forge.game.spellability.Ability; @@ -505,6 +508,39 @@ public class WrappedAbility extends Ability { // TODO: CardCollection } + @Override + public CardDamageMap getDamageMap() { + return sa.getDamageMap(); + } + @Override + public CardDamageMap getPreventMap() { + return sa.getPreventMap(); + } + @Override + public GameEntityCounterTable getCounterTable() { + return sa.getCounterTable(); + } + @Override + public CardZoneTable getChangeZoneTable() { + return sa.getChangeZoneTable(); + } + @Override + public void setDamageMap(final CardDamageMap map) { + sa.setDamageMap(map); + } + @Override + public void setPreventMap(final CardDamageMap map) { + sa.setPreventMap(map); + } + @Override + public void setCounterTable(final GameEntityCounterTable table) { + sa.setCounterTable(table); + } + @Override + public void setChangeZoneTable(final CardZoneTable table) { + sa.setChangeZoneTable(table); + } + public boolean isAlternativeCost(AlternativeCost ac) { return sa.isAlternativeCost(ac); } diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java b/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java index ea712979fd9..e798031de07 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java @@ -279,7 +279,7 @@ public final class CMatchUI } } - private SkinImage getPlayerAvatar(final PlayerView p, final int defaultIndex) { + public SkinImage getPlayerAvatar(final PlayerView p, final int defaultIndex) { if (avatarImages.containsKey(p.getLobbyPlayerName())) { return ImageCache.getIcon(avatarImages.get(p.getLobbyPlayerName())); } @@ -1029,13 +1029,13 @@ public final class CMatchUI } @Override - public Map assignGenericAmount(final CardView effectSource, final Map target, + public Map assignGenericAmount(final CardView effectSource, final Map target, final int amount, final boolean atLeastOne, final String amountLabel) { if (amount <= 0) { return Collections.emptyMap(); } - final AtomicReference> result = new AtomicReference<>(); + final AtomicReference> result = new AtomicReference<>(); FThreads.invokeInEdtAndWait(new Runnable() { @Override public void run() { diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/VAssignCombatDamage.java b/forge-gui-desktop/src/main/java/forge/screens/match/VAssignCombatDamage.java index 987d866d720..cde47c463b2 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/VAssignCombatDamage.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/VAssignCombatDamage.java @@ -44,11 +44,13 @@ import forge.toolbox.FButton; import forge.toolbox.FLabel; import forge.toolbox.FScrollPane; import forge.toolbox.FSkin; +import forge.toolbox.FSkin.SkinImage; import forge.toolbox.FSkin.SkinnedPanel; import forge.util.Localizer; import forge.util.TextUtil; import forge.view.FDialog; import forge.view.arcane.CardPanel; +import forge.view.arcane.MiscCardPanel; import net.miginfocom.swing.MigLayout; /** @@ -116,21 +118,28 @@ public class VAssignCombatDamage { private final MouseAdapter mad = new MouseAdapter() { @Override public void mouseEntered(final MouseEvent evt) { - CardView source = ((CardPanel) evt.getSource()).getCard(); - if (!damage.containsKey(source)) source = null; // to get player instead of fake card + SkinnedPanel panel = (SkinnedPanel)evt.getSource(); + CardView source = null; + if (panel instanceof CardPanel) { + source = ((CardPanel)panel).getCard(); + } final FSkin.Colors brdrColor = VAssignCombatDamage.this.canAssignTo(source) ? FSkin.Colors.CLR_ACTIVE : FSkin.Colors.CLR_INACTIVE; - ((CardPanel) evt.getSource()).setBorder(new FSkin.LineSkinBorder(FSkin.getColor(brdrColor), 2)); + panel.setBorder(new FSkin.LineSkinBorder(FSkin.getColor(brdrColor), 2)); } @Override public void mouseExited(final MouseEvent evt) { - ((CardPanel) evt.getSource()).setBorder((Border)null); + ((SkinnedPanel) evt.getSource()).setBorder((Border)null); } @Override public void mousePressed(final MouseEvent evt) { - CardView source = ((CardPanel) evt.getSource()).getCard(); // will be NULL for player + SkinnedPanel panel = (SkinnedPanel)evt.getSource(); + CardView source = null; + if (panel instanceof CardPanel) { + source = ((CardPanel)panel).getCard(); + } boolean meta = evt.isControlDown(); boolean isLMB = SwingUtilities.isLeftMouseButton(evt); @@ -192,14 +201,7 @@ public class VAssignCombatDamage { final DamageTarget dt = new DamageTarget(null, new FLabel.Builder().text("0").fontSize(18).fontAlign(SwingConstants.CENTER).build()); damage.put(null, dt); defenders.add(dt); - CardView fakeCard = null; - if (defender instanceof CardView) { - fakeCard = (CardView)defender; - } else if (defender instanceof PlayerView) { - final PlayerView p = (PlayerView)defender; - fakeCard = new CardView(-1, null, defender.toString(), p, matchUI.getAvatarImage(p.getLobbyPlayerName())); - } - addPanelForDefender(pnlDefenders, fakeCard); + addPanelForDefender(pnlDefenders, defender); } // Add "opponent placeholder" card if trample allowed @@ -257,12 +259,21 @@ public class VAssignCombatDamage { * @param pnlDefenders * @param defender */ - private void addPanelForDefender(final JPanel pnlDefenders, final CardView defender) { - final CardPanel cp = new CardPanel(matchUI, defender); - cp.setCardBounds(0, 0, 105, 150); - cp.setOpaque(true); - pnlDefenders.add(cp, "w 145px!, h 170px!, gap 5px 5px 3px 3px, ax center"); - cp.addMouseListener(mad); + private void addPanelForDefender(final JPanel pnlDefenders, final GameEntityView defender) { + if (defender instanceof CardView) { + final CardPanel cp = new CardPanel(matchUI, (CardView)defender); + cp.setCardBounds(0, 0, 105, 150); + cp.setOpaque(true); + pnlDefenders.add(cp, "w 145px!, h 170px!, gap 5px 5px 3px 3px, ax center"); + cp.addMouseListener(mad); + } else if (defender instanceof PlayerView) { + final PlayerView p = (PlayerView)defender; + SkinImage playerAvatar = matchUI.getPlayerAvatar(p, 0); + final MiscCardPanel mp = new MiscCardPanel(matchUI, p.getName(), playerAvatar); + mp.setCardBounds(0, 0, 105, 150); + pnlDefenders.add(mp, "w 145px!, h 170px!, gap 5px 5px 3px 3px, ax center"); + mp.addMouseListener(mad); + } } /** diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/VAssignGenericAmount.java b/forge-gui-desktop/src/main/java/forge/screens/match/VAssignGenericAmount.java index b2ee1fd8784..6e140c7575c 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/VAssignGenericAmount.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/VAssignGenericAmount.java @@ -34,27 +34,26 @@ import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import javax.swing.border.Border; -import forge.game.GameEntityView; +import forge.card.MagicColor; import forge.game.card.CardView; import forge.game.player.PlayerView; import forge.gui.SOverlayUtils; +import forge.localinstance.skin.FSkinProp; import forge.toolbox.FButton; import forge.toolbox.FLabel; import forge.toolbox.FScrollPane; import forge.toolbox.FSkin; +import forge.toolbox.FSkin.SkinImage; import forge.toolbox.FSkin.SkinnedPanel; import forge.util.Localizer; import forge.util.TextUtil; import forge.view.FDialog; import forge.view.arcane.CardPanel; +import forge.view.arcane.MiscCardPanel; import net.miginfocom.swing.MigLayout; /** - * Assembles Swing components of assign damage dialog. - * - * This needs a JDialog to maintain a modal state. - * Without the modal state, the PhaseHandler automatically - * moves forward to phase Main2 without assigning damage. + * Assembles Swing components of assign generic amount dialog. * *

(V at beginning of class name denotes a view class.) */ @@ -72,17 +71,18 @@ public class VAssignGenericAmount { private final String lblAmount; private final JLabel lblTotalAmount; + private final boolean atLeastOne; // Label Buttons private final FButton btnOK = new FButton(localizer.getMessage("lblOk")); private final FButton btnReset = new FButton(localizer.getMessage("lblReset")); private static class AssignTarget { - public final GameEntityView entity; + public final Object entity; public final JLabel label; public final int max; public int amount; - public AssignTarget(final GameEntityView e, final JLabel lbl, int max0) { + public AssignTarget(final Object e, final JLabel lbl, int max0) { entity = e; label = lbl; max = max0; @@ -91,38 +91,40 @@ public class VAssignGenericAmount { } private final List targetsList = new ArrayList<>(); - private final Map targetsMap = new HashMap<>(); + private final Map targetsMap = new HashMap<>(); // Mouse actions private final MouseAdapter mad = new MouseAdapter() { @Override public void mouseEntered(final MouseEvent evt) { - ((CardPanel) evt.getSource()).setBorder(new FSkin.LineSkinBorder(FSkin.getColor(FSkin.Colors.CLR_ACTIVE), 2)); + ((SkinnedPanel) evt.getSource()).setBorder(new FSkin.LineSkinBorder(FSkin.getColor(FSkin.Colors.CLR_ACTIVE), 2)); } @Override public void mouseExited(final MouseEvent evt) { - ((CardPanel) evt.getSource()).setBorder((Border)null); + ((SkinnedPanel) evt.getSource()).setBorder((Border)null); } @Override public void mousePressed(final MouseEvent evt) { - CardView source = ((CardPanel) evt.getSource()).getCard(); // will be NULL for player + SkinnedPanel panel = (SkinnedPanel)evt.getSource(); + AssignTarget at = targetsMap.get(panel); boolean meta = evt.isControlDown(); boolean isLMB = SwingUtilities.isLeftMouseButton(evt); boolean isRMB = SwingUtilities.isRightMouseButton(evt); if ( isLMB || isRMB) - assignAmountTo(source, meta, isLMB); + assignAmountTo(at, meta, isLMB); } }; - public VAssignGenericAmount(final CMatchUI matchUI, final CardView effectSource, final Map targets, final int amount, final boolean atLeastOne, final String amountLabel) { + public VAssignGenericAmount(final CMatchUI matchUI, final CardView effectSource, final Map targets, final int amount, final boolean atLeastOne, final String amountLabel) { this.matchUI = matchUI; dlg.setTitle(localizer.getMessage("lbLAssignAmountForEffect", amountLabel, effectSource.toString())); totalAmountToAssign = amount; + this.atLeastOne = atLeastOne; lblAmount = amountLabel; lblTotalAmount = new FLabel.Builder().text(localizer.getMessage("lblTotalAmountText", lblAmount)).build(); @@ -153,7 +155,7 @@ public class VAssignGenericAmount { final FScrollPane scrTargets = new FScrollPane(pnlTargets, false); // Top row of cards... - for (final Map.Entry e : targets.entrySet()) { + for (final Map.Entry e : targets.entrySet()) { int maxAmount = e.getValue() != null ? e.getValue() : amount; final AssignTarget at = new AssignTarget(e.getKey(), new FLabel.Builder().text("0").fontSize(18).fontAlign(SwingConstants.CENTER).build(), maxAmount); addPanelForTarget(pnlTargets, at); @@ -161,13 +163,17 @@ public class VAssignGenericAmount { // ... bottom row of labels. for (final AssignTarget l : targetsList) { - pnlTargets.add(l.label, "w 145px!, h 30px!, gap 5px 5px 0 5px"); + if (l.entity instanceof Byte) { + pnlTargets.add(l.label, "w 100px!, h 30px!, gap 5px 5px 0 5px"); + } else { + pnlTargets.add(l.label, "w 145px!, h 30px!, gap 5px 5px 0 5px"); + } } btnOK.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { finish(); } }); btnReset.addActionListener(new ActionListener() { - @Override public void actionPerformed(ActionEvent arg0) { resetAssignedAmount(); initialAssignAmount(atLeastOne); } }); + @Override public void actionPerformed(ActionEvent arg0) { resetAssignedAmount(); initialAssignAmount(); } }); // Final UI layout pnlMain.setLayout(new MigLayout("insets 0, gap 0, wrap 2, ax center")); @@ -185,7 +191,7 @@ public class VAssignGenericAmount { pnlMain.getRootPane().setDefaultButton(btnOK); - initialAssignAmount(atLeastOne); + initialAssignAmount(); SOverlayUtils.showOverlay(); dlg.setUndecorated(true); @@ -197,26 +203,47 @@ public class VAssignGenericAmount { } private void addPanelForTarget(final JPanel pnlTargets, final AssignTarget at) { - CardView cv = null; if (at.entity instanceof CardView) { - cv = (CardView)at.entity; + final CardPanel cp = new CardPanel(matchUI, (CardView)at.entity); + cp.setCardBounds(0, 0, 105, 150); + cp.setOpaque(true); + pnlTargets.add(cp, "w 145px!, h 170px!, gap 5px 5px 3px 3px, ax center"); + cp.addMouseListener(mad); + targetsMap.put(cp, at); } else if (at.entity instanceof PlayerView) { final PlayerView p = (PlayerView)at.entity; - cv = new CardView(-1, null, at.entity.toString(), p, matchUI.getAvatarImage(p.getLobbyPlayerName())); - } else { - return; + SkinImage playerAvatar = matchUI.getPlayerAvatar(p, 0); + final MiscCardPanel mp = new MiscCardPanel(matchUI, p.getName(), playerAvatar); + mp.setCardBounds(0, 0, 105, 150); + pnlTargets.add(mp, "w 145px!, h 170px!, gap 5px 5px 3px 3px, ax center"); + mp.addMouseListener(mad); + targetsMap.put(mp, at); + } else if (at.entity instanceof Byte) { + SkinImage manaSymbol; + Byte color = (Byte) at.entity; + if (color == MagicColor.WHITE) { + manaSymbol = FSkin.getImage(FSkinProp.IMG_MANA_W); + } else if (color == MagicColor.BLUE) { + manaSymbol = FSkin.getImage(FSkinProp.IMG_MANA_U); + } else if (color == MagicColor.BLACK) { + manaSymbol = FSkin.getImage(FSkinProp.IMG_MANA_B); + } else if (color == MagicColor.RED) { + manaSymbol = FSkin.getImage(FSkinProp.IMG_MANA_R); + } else if (color == MagicColor.GREEN) { + manaSymbol = FSkin.getImage(FSkinProp.IMG_MANA_G); + } else { // Should never come here, but add this to avoid compile error + manaSymbol = FSkin.getImage(FSkinProp.IMG_MANA_COLORLESS); + } + final MiscCardPanel mp = new MiscCardPanel(matchUI, "", manaSymbol); + mp.setCardBounds(0, 0, 70, 70); + pnlTargets.add(mp, "w 100px!, h 150px!, gap 5px 5px 3px 3px, ax center"); + mp.addMouseListener(mad); + targetsMap.put(mp, at); } - final CardPanel cp = new CardPanel(matchUI, cv); - cp.setCardBounds(0, 0, 105, 150); - cp.setOpaque(true); - pnlTargets.add(cp, "w 145px!, h 170px!, gap 5px 5px 3px 3px, ax center"); - cp.addMouseListener(mad); - targetsMap.put(cv, at); targetsList.add(at); } - private void assignAmountTo(CardView source, final boolean meta, final boolean isAdding) { - AssignTarget at = targetsMap.get(source); + private void assignAmountTo(AssignTarget at, final boolean meta, final boolean isAdding) { int assigned = at.amount; int leftToAssign = Math.max(0, at.max - assigned); int amountToAdd = isAdding ? 1 : -1; @@ -234,6 +261,9 @@ public class VAssignGenericAmount { if (amountToAdd > remainingAmount) { amountToAdd = remainingAmount; } + if (atLeastOne && assigned + amountToAdd < 1) { + amountToAdd = 1 - assigned; + } if (0 == amountToAdd || amountToAdd + assigned < 0) { return; @@ -243,7 +273,7 @@ public class VAssignGenericAmount { updateLabels(); } - private void initialAssignAmount(boolean atLeastOne) { + private void initialAssignAmount() { if (!atLeastOne) { updateLabels(); return; @@ -305,8 +335,8 @@ public class VAssignGenericAmount { SOverlayUtils.hideOverlay(); } - public Map getAssignedMap() { - Map result = new HashMap<>(targetsList.size()); + public Map getAssignedMap() { + Map result = new HashMap<>(targetsList.size()); for (AssignTarget at : targetsList) result.put(at.entity, at.amount); return result; diff --git a/forge-gui-desktop/src/main/java/forge/view/arcane/MiscCardPanel.java b/forge-gui-desktop/src/main/java/forge/view/arcane/MiscCardPanel.java new file mode 100644 index 00000000000..b7a10e1eef6 --- /dev/null +++ b/forge-gui-desktop/src/main/java/forge/view/arcane/MiscCardPanel.java @@ -0,0 +1,136 @@ +package forge.view.arcane; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Point; +import java.awt.Rectangle; + +import javax.swing.JRootPane; +import javax.swing.SwingUtilities; + +import forge.localinstance.properties.ForgePreferences.FPref; +import forge.model.FModel; +import forge.screens.match.CMatchUI; +import forge.toolbox.FLabel; +import forge.toolbox.FSkin.SkinImage; +import forge.toolbox.FSkin.SkinnedPanel; +import forge.view.arcane.util.OutlinedLabel; + + +public class MiscCardPanel extends SkinnedPanel { + private static final float ROT_CENTER_TO_TOP_CORNER = 1.0295630140987000315797369464196f; + private static final float ROT_CENTER_TO_BOTTOM_CORNER = 0.7071067811865475244008443621048f; + + private final CMatchUI matchUI; + private final String label; + private final FLabel image; + + private OutlinedLabel titleText; + private int cardXOffset, cardYOffset, cardWidth, cardHeight; + + public MiscCardPanel(final CMatchUI matchUI, final String label, final SkinImage image) { + this.matchUI = matchUI; + this.label = label; + this.image = new FLabel.Builder().icon(image).build(); + + setBackground(Color.black); + setOpaque(true); + + add(this.image); + createCardNameOverlay(); + } + + public CMatchUI getMatchUI() { + return matchUI; + } + + private void createCardNameOverlay() { + titleText = new OutlinedLabel(); + titleText.setFont(getFont().deriveFont(Font.BOLD, 13f)); + titleText.setForeground(Color.white); + titleText.setGlow(Color.black); + titleText.setWrap(true); + titleText.setText(label); + add(titleText); + } + + @Override + public final void paint(final Graphics g) { + if (!isValid()) { + super.validate(); + } + super.paint(g); + } + + @Override + public final void doLayout() { + final Point imgPos = new Point(cardXOffset, cardYOffset); + final Dimension imgSize = new Dimension(cardWidth, cardHeight); + + image.setLocation(imgPos); + image.setSize(imgSize); + + displayCardNameOverlay(showCardNameOverlay(), imgSize, imgPos); + } + + private void displayCardNameOverlay(final boolean isVisible, final Dimension imgSize, final Point imgPos) { + if (isVisible) { + final int titleX = Math.round(imgSize.width * (24f / 480)); + final int titleY = Math.round(imgSize.height * (54f / 640)) - 15; + final int titleH = Math.round(imgSize.height * (360f / 640)); + titleText.setBounds(imgPos.x + titleX, imgPos.y + titleY + 2, imgSize.width - 2 * titleX, titleH - titleY); + } + titleText.setVisible(isVisible); + } + + @Override + public final String toString() { + return label; + } + + public final void setCardBounds(final int x, final int y, int width, int height) { + cardWidth = width; + cardHeight = height; + final int rotCenterX = Math.round(width / 2f); + final int rotCenterY = height - rotCenterX; + final int rotCenterToTopCorner = Math.round(width * ROT_CENTER_TO_TOP_CORNER); + final int rotCenterToBottomCorner = Math.round(width * ROT_CENTER_TO_BOTTOM_CORNER); + final int xOffset = rotCenterX - rotCenterToBottomCorner; + final int yOffset = rotCenterY - rotCenterToTopCorner; + cardXOffset = -xOffset; + cardYOffset = -yOffset; + width = -xOffset + rotCenterX + rotCenterToTopCorner; + height = -yOffset + rotCenterY + rotCenterToBottomCorner; + setBounds(x + xOffset, y + yOffset, width, height); + } + + @Override + public final void repaint() { + final Rectangle b = getBounds(); + final JRootPane rootPane = SwingUtilities.getRootPane(this); + if (rootPane == null) { + return; + } + final Point p = SwingUtilities.convertPoint(getParent(), b.x, b.y, rootPane); + rootPane.repaint(p.x, p.y, b.width, b.height); + } + + private static boolean isPreferenceEnabled(final FPref preferenceName) { + return FModel.getPreferences().getPrefBoolean(preferenceName); + } + + private boolean isShowingOverlays() { + return isPreferenceEnabled(FPref.UI_SHOW_CARD_OVERLAYS); + } + + private boolean showCardNameOverlay() { + return isShowingOverlays() && isPreferenceEnabled(FPref.UI_OVERLAY_CARD_NAME); + } + + public void repaintOverlays() { + repaint(); + doLayout(); + } +} diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java index f13bbf7c2ea..0bbd3db2aaf 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java @@ -80,7 +80,7 @@ import forge.util.collect.FCollectionView; /** * Default harmless implementation for tests. * Test-specific behaviour can easily be added by mocking (parts of) this class. - * + * * Note that the current PlayerController implementations seem to be responsible for handling some game logic, * and even aside from that, they are theoretically capable of making illegal choices (which are then not blocked by the real game logic). * Test cases that need to override the default behaviour of this class should make sure to do so in a way that does not invalidate their correctness. @@ -151,6 +151,10 @@ public class PlayerControllerForTests extends PlayerController { throw new IllegalStateException("Erring on the side of caution here..."); } + @Override + public Map specifyManaCombo(SpellAbility sa, ColorSet colorSet, int manaAmount, boolean different) { + throw new IllegalStateException("Erring on the side of caution here..."); + } @Override public Integer announceRequirements(SpellAbility ability, String announce) { @@ -422,7 +426,7 @@ public class PlayerControllerForTests extends PlayerController { @Override public List chooseSpellAbilityToPlay() { //TODO: This method has to return the spellability chosen by player - // It should not play the sa right from here. The code has been left as it is to quickly adapt to changed playercontroller interface + // It should not play the sa right from here. The code has been left as it is to quickly adapt to changed playercontroller interface if (playerActions != null) { CastSpellFromHandAction castSpellFromHand = playerActions.getNextActionIfApplicable(player, getGame(), CastSpellFromHandAction.class); if (castSpellFromHand != null) { @@ -476,7 +480,7 @@ public class PlayerControllerForTests extends PlayerController { public byte chooseColor(String message, SpellAbility sa, ColorSet colors) { return Iterables.getFirst(colors, MagicColor.WHITE); } - + @Override public byte chooseColorAllowColorless(String message, Card card, ColorSet colors) { return Iterables.getFirst(colors, (byte)0); @@ -551,7 +555,7 @@ public class PlayerControllerForTests extends PlayerController { ComputerUtil.playStack(sa, player, getGame()); } } - + private void prepareSingleSa(final Card host, final SpellAbility sa, boolean isMandatory){ if (sa.hasParam("TargetingPlayer")) { Player targetingPlayer = AbilityUtils.getDefinedPlayers(host, sa.getParam("TargetingPlayer"), sa).get(0); @@ -583,7 +587,7 @@ public class PlayerControllerForTests extends PlayerController { } else { ComputerUtil.playStack(tgtSA, player, getGame()); } - } else + } else return false; // didn't play spell } return true; diff --git a/forge-gui-mobile/src/forge/screens/match/MatchController.java b/forge-gui-mobile/src/forge/screens/match/MatchController.java index 0ea00c3c30e..8ac97cdda22 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchController.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchController.java @@ -397,9 +397,9 @@ public class MatchController extends AbstractGuiGame { } @Override - public Map assignGenericAmount(final CardView effectSource, final Map targets, + public Map assignGenericAmount(final CardView effectSource, final Map targets, final int amount, final boolean atLeastOne, final String amountLabel) { - return new WaitCallback>() { + return new WaitCallback>() { @Override public void run() { final VAssignGenericAmount v = new VAssignGenericAmount(effectSource, targets, amount, atLeastOne, amountLabel, this); diff --git a/forge-gui-mobile/src/forge/screens/match/views/VAssignGenericAmount.java b/forge-gui-mobile/src/forge/screens/match/views/VAssignGenericAmount.java index 1a17df91966..09e6f70df8d 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VAssignGenericAmount.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VAssignGenericAmount.java @@ -1,6 +1,6 @@ /* * Forge: Play Magic: the Gathering. - * Copyright (C) 2011 Forge Team + * Copyright (C) 2021 Forge Team * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -32,7 +32,7 @@ import forge.assets.FSkinColor.Colors; import forge.assets.FSkinFont; import forge.assets.FSkinImage; import forge.card.CardZoom; -import forge.game.GameEntityView; +import forge.card.MagicColor; import forge.game.card.CardView; import forge.game.player.PlayerView; import forge.screens.match.MatchController; @@ -56,17 +56,18 @@ public class VAssignGenericAmount extends FDialog { private static final float CARD_GAP_X = Utils.scale(10); private static final float ADD_BTN_HEIGHT = Utils.AVG_FINGER_HEIGHT * 0.75f; - private final Callback> callback; + private final Callback> callback; private final int totalAmountToAssign; private final String lblAmount; private final FLabel lblTotalAmount; + private final boolean atLeastOne; private final EffectSourcePanel pnlSource; private final TargetsPanel pnlTargets; private final List targetsList = new ArrayList<>(); - private final Map targetsMap = new HashMap<>(); + private final Map targetsMap = new HashMap<>(); /** Constructor. * @@ -75,11 +76,12 @@ public class VAssignGenericAmount extends FDialog { * @param amount Total amount to be assigned * @param atLeastOne Must assign at least one amount to each target */ - public VAssignGenericAmount(final CardView effectSource, final Map targets, final int amount, final boolean atLeastOne, final String amountLabel, final WaitCallback> waitCallback) { + public VAssignGenericAmount(final CardView effectSource, final Map targets, final int amount, final boolean atLeastOne, final String amountLabel, final WaitCallback> waitCallback) { super(Localizer.getInstance().getMessage("lbLAssignAmountForEffect", amountLabel, CardTranslation.getTranslatedName(effectSource.getName())) , 2); callback = waitCallback; totalAmountToAssign = amount; + this.atLeastOne = atLeastOne; lblAmount = amountLabel; lblTotalAmount = add(new FLabel.Builder().text(Localizer.getInstance().getMessage("lblTotalAmountText", lblAmount)).align(Align.center).build()); @@ -97,11 +99,11 @@ public class VAssignGenericAmount extends FDialog { @Override public void handleEvent(FEvent e) { resetAssignedDamage(); - initialAssignAmount(atLeastOne); + initialAssignAmount(); } }); - initialAssignAmount(atLeastOne); + initialAssignAmount(); } @Override @@ -130,13 +132,13 @@ public class VAssignGenericAmount extends FDialog { } private class TargetsPanel extends FScrollPane { - private TargetsPanel(final Map targets) { - for (final Map.Entry e : targets.entrySet()) { + private TargetsPanel(final Map targets) { + for (final Map.Entry e : targets.entrySet()) { addDamageTarget(e.getKey(), e.getValue()); } } - private void addDamageTarget(GameEntityView entity, int max) { + private void addDamageTarget(Object entity, int max) { AssignTarget at = add(new AssignTarget(entity, max)); targetsMap.put(entity, at); targetsList.add(at); @@ -162,23 +164,38 @@ public class VAssignGenericAmount extends FDialog { } private class AssignTarget extends FContainer { - private final GameEntityView entity; + private final Object entity; private final FDisplayObject obj; private final FLabel label, btnSubtract, btnAdd; private final int max; private int amount; - public AssignTarget(GameEntityView entity0, int max0) { + public AssignTarget(Object entity0, int max0) { entity = entity0; max = max0; if (entity instanceof CardView) { obj = add(new EffectSourcePanel((CardView)entity)); - } - else if (entity instanceof PlayerView) { + } else if (entity instanceof PlayerView) { PlayerView player = (PlayerView)entity; obj = add(new MiscTargetPanel(player.getName(), MatchController.getPlayerAvatar(player))); - } - else { + } else if (entity instanceof Byte) { + FSkinImage manaSymbol; + Byte color = (Byte) entity; + if (color == MagicColor.WHITE) { + manaSymbol = FSkinImage.MANA_W; + } else if (color == MagicColor.BLUE) { + manaSymbol = FSkinImage.MANA_U; + } else if (color == MagicColor.BLACK) { + manaSymbol = FSkinImage.MANA_B; + } else if (color == MagicColor.RED) { + manaSymbol = FSkinImage.MANA_R; + } else if (color == MagicColor.GREEN) { + manaSymbol = FSkinImage.MANA_G; + } else { // Should never come here, but add this to avoid compile error + manaSymbol = FSkinImage.MANA_COLORLESS; + } + obj = add(new MiscTargetPanel("", manaSymbol)); + } else { obj = add(new MiscTargetPanel(entity.toString(), FSkinImage.UNKNOWN)); } label = add(new FLabel.Builder().text("0").font(FSkinFont.get(18)).align(Align.center).build()); @@ -254,7 +271,7 @@ public class VAssignGenericAmount extends FDialog { } } - private void assignAmountTo(GameEntityView source, boolean isAdding) { + private void assignAmountTo(Object source, boolean isAdding) { AssignTarget at = targetsMap.get(source); int assigned = at.amount; int leftToAssign = Math.max(0, at.max - assigned); @@ -264,6 +281,9 @@ public class VAssignGenericAmount extends FDialog { if (amountToAdd > remainingAmount) { amountToAdd = remainingAmount; } + if (atLeastOne && assigned + amountToAdd < 1) { + amountToAdd = 1 - assigned; + } if (0 == amountToAdd || amountToAdd + assigned < 0) { return; @@ -273,7 +293,7 @@ public class VAssignGenericAmount extends FDialog { updateLabels(); } - private void initialAssignAmount(boolean atLeastOne) { + private void initialAssignAmount() { if (!atLeastOne) { updateLabels(); return; @@ -339,8 +359,8 @@ public class VAssignGenericAmount extends FDialog { callback.run(getAssignedMap()); } - public Map getAssignedMap() { - Map result = new HashMap<>(targetsList.size()); + public Map getAssignedMap() { + Map result = new HashMap<>(targetsList.size()); for (AssignTarget at : targetsList) result.put(at.entity, at.amount); return result; diff --git a/forge-gui/res/cardsfolder/a/aesthir_glider.txt b/forge-gui/res/cardsfolder/a/aesthir_glider.txt index aef4c4899e1..eafc8c4ee8e 100644 --- a/forge-gui/res/cardsfolder/a/aesthir_glider.txt +++ b/forge-gui/res/cardsfolder/a/aesthir_glider.txt @@ -1,6 +1,6 @@ Name:Aesthir Glider ManaCost:3 -Types:Artifact Creature Bird +Types:Artifact Creature Bird Construct PT:2/1 K:CARDNAME can't block. K:Flying diff --git a/forge-gui/res/cardsfolder/a/aeve_progenitor_ooze.txt b/forge-gui/res/cardsfolder/a/aeve_progenitor_ooze.txt index 4167b274352..2dce36e6181 100644 --- a/forge-gui/res/cardsfolder/a/aeve_progenitor_ooze.txt +++ b/forge-gui/res/cardsfolder/a/aeve_progenitor_ooze.txt @@ -3,8 +3,8 @@ ManaCost:2 G G G Types:Legendary Creature Ooze PT:2/2 K:Storm -S:Mode$ Continuous | Affected$ Card.token+Self | RemoveType$ Legendary | Description$ CARDNAME is not legendary if it's a token. +S:Mode$ Continuous | Affected$ Card.token+Self | RemoveType$ Legendary | Description$ CARDNAME isn't legendary as long as it's a token. K:etbCounter:P1P1:X:no condition:CARDNAME enters the battlefield with a +1/+1 counter on it for each other Ooze you control. SVar:X:Count$LastStateBattlefield Ooze.YouCtrl+Other DeckHas:Ability$Counters -Oracle:Storm (When you cast this spell, copy it for each spell cast before it this turn. The copies become tokens.)\nAeve, Progenitor Ooze is not legendary if it's a token.\nAeve enters the battlefield with a +1/+1 counter on it for each other Ooze you control. +Oracle:Storm (When you cast this spell, copy it for each spell cast before it this turn. Copies become tokens.)\nAeve, Progenitor Ooze isn't legendary as long as it's a token.\nAeve enters the battlefield with a +1/+1 counter on it for each other Ooze you control. diff --git a/forge-gui/res/cardsfolder/a/altar_of_the_goyf.txt b/forge-gui/res/cardsfolder/a/altar_of_the_goyf.txt index e5f2ba527b6..e9430708cbc 100644 --- a/forge-gui/res/cardsfolder/a/altar_of_the_goyf.txt +++ b/forge-gui/res/cardsfolder/a/altar_of_the_goyf.txt @@ -1,9 +1,9 @@ Name:Altar of the Goyf ManaCost:5 Types:Tribal Artifact Lhurgoyf -T:Mode$ Attacks | ValidCard$ Creature.YouCtrl | Alone$ True | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever a creature you control attacks alone, it gets +X/+X until end of turn, where X is the number of card types among cards in all graveyards. +T:Mode$ Attacks | ValidCard$ Creature.YouCtrl | Alone$ True | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever a creature you control attacks alone, it gets +X/+X until end of turn, where X is the number of card types among cards in all graveyard. SVar:TrigPump:DB$ Pump | Defined$ TriggeredAttacker | NumAtt$ +X | NumDef$ +X S:Mode$ Continuous | Affected$ Creature.Lhurgoyf+YouCtrl | AddKeyword$ Trample | Description$ Lhurgoyf creatures you control have trample. SVar:X:Count$CardTypes.Graveyard SVar:PlayMain1:TRUE -Oracle:Whenever a creature you control attacks alone, it gets +X/+X until end of turn, where X is the number of card types among cards in all graveyards.\nLhurgoyf creatures you control have trample. +Oracle:Whenever a creature you control attacks alone, it gets +X/+X until end of turn, where X is the number of card types among cards in all graveyard.\nLhurgoyf creatures you control have trample. diff --git a/forge-gui/res/cardsfolder/a/angelic_rocket.txt b/forge-gui/res/cardsfolder/a/angelic_rocket.txt index 7ed8b9ecdbf..2c532a2928b 100644 --- a/forge-gui/res/cardsfolder/a/angelic_rocket.txt +++ b/forge-gui/res/cardsfolder/a/angelic_rocket.txt @@ -1,6 +1,6 @@ Name:Angelic Rocket ManaCost:8 -Types:Artifact Creature Angel +Types:Host Artifact Creature Angel PT:4/4 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDestroy | OptionalDecider$ You | Host$ True | TriggerDescription$ When this creature enters the battlefield, you may destroy target nonland permanent. diff --git a/forge-gui/res/cardsfolder/a/arcbound_shikari.txt b/forge-gui/res/cardsfolder/a/arcbound_shikari.txt index 2b0721cdc93..6f2b1235852 100644 --- a/forge-gui/res/cardsfolder/a/arcbound_shikari.txt +++ b/forge-gui/res/cardsfolder/a/arcbound_shikari.txt @@ -8,4 +8,4 @@ SVar:TrigPutCounter:DB$ PutCounterAll | ValidCards$ Creature.Artifact+Other+YouC K:Modular:2 DeckHas:Ability$Counters SVar:PlayMain1:TRUE -Oracle:First strike\nWhen Arcbound Shikari enters the battlefield, put a +1/+1 counter on each other artifact creature you control.\nModular 2 (This creature enters the battlefield with two +1/+1 counters on it. When it does, you may put its counters on target artifact creature.) +Oracle:First strike\nWhen Arcbound Shikari enters the battlefield, put a +1/+1 counter on each other artifact creature you control.\nModular 2 (This creature enters the battlefield with two +1/+1 counters on it. When it dies, you may put its +1/+1 counters on target artifact creature.) diff --git a/forge-gui/res/cardsfolder/a/arcbound_slasher.txt b/forge-gui/res/cardsfolder/a/arcbound_slasher.txt index 8a41c7d8e52..789e3918a09 100644 --- a/forge-gui/res/cardsfolder/a/arcbound_slasher.txt +++ b/forge-gui/res/cardsfolder/a/arcbound_slasher.txt @@ -5,4 +5,4 @@ PT:0/0 K:Modular:4 K:Riot DeckHas:Ability$Counters -Oracle:Modular 4 (This creature enters the battlefield with four +1/+1 counters on it. When it dies, you may put its +1/+1 counters on target artifact creature.)\nRiot (This creature enters the battlefield with your choice of an additional +1/+1 counter or haste.) +Oracle:Modular 4 (This creature enters the battlefield with four +1/+1 counters on it. When it dies, you may put its +1/+1 counters on target artifact creature.)\nRiot (This creature enters the battlefield with your choice of a +1/+1 counter or haste.) diff --git a/forge-gui/res/cardsfolder/a/archfiend_of_sorrows.txt b/forge-gui/res/cardsfolder/a/archfiend_of_sorrows.txt index 40198a7f841..e4416bc4eb7 100644 --- a/forge-gui/res/cardsfolder/a/archfiend_of_sorrows.txt +++ b/forge-gui/res/cardsfolder/a/archfiend_of_sorrows.txt @@ -7,4 +7,4 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S SVar:TrigMassacre:DB$ PumpAll | NumAtt$ -2 | NumDef$ -2 | ValidCards$ Creature.OppCtrl | IsCurse$ True K:Unearth:3 B B SVar:PlayMain1:TRUE -Oracle:When Archfiend of Sorrows enters the battlefield, creatures your opponents control get -2/-2 until end of turn.\nUnearth {3}{B}{B} ({3}{B}{B}: Return this card from your graveyard to the battlefield. It gains haste. Exile it at the beginning of the next end step or if it would leave the battlefield. Unearth only as a sorcery.) +Oracle:Flying\nWhen Archfiend of Sorrows enters the battlefield, creatures your opponents control get -2/-2 until end of turn.\nUnearth {3}{B}{B} ({3}{B}{B}: Return this card from your graveyard to the battlefield. It gains haste. Exile it at the beginning of the next end step or if it would leave the battlefield. Unearth only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/a/arcus_acolyte.txt b/forge-gui/res/cardsfolder/a/arcus_acolyte.txt index b88c0fdf778..48c5609ba42 100644 --- a/forge-gui/res/cardsfolder/a/arcus_acolyte.txt +++ b/forge-gui/res/cardsfolder/a/arcus_acolyte.txt @@ -7,4 +7,4 @@ K:Lifelink K:Outlast:GW S:Mode$ Continuous | Affected$ Creature.YouCtrl+Other+counters_LT1_P1P1 | AddKeyword$ Outlast:GW | Description$ Each other creature you control without a +1/+1 counter on it has outlast {G/W}. DeckHas:Ability$Counters -Oracle:Outlast {G/W} ({G/W}, {T}: Put a +1/+1 counter on this creature. Outlast only as a sorcery.)\nEach other creature you control without a +1/+1 counter on it has outlast {G/W}. +Oracle:Reach, lifelink\nOutlast {G/W} ({G/W}, {T}: Put a +1/+1 counter on this creature. Outlast only as a sorcery.)\nEach other creature you control without a +1/+1 counter on it has outlast {G/W}. diff --git a/forge-gui/res/cardsfolder/a/ascendant_evincar.txt b/forge-gui/res/cardsfolder/a/ascendant_evincar.txt index fee710036a3..f13748aae8e 100644 --- a/forge-gui/res/cardsfolder/a/ascendant_evincar.txt +++ b/forge-gui/res/cardsfolder/a/ascendant_evincar.txt @@ -1,6 +1,6 @@ Name:Ascendant Evincar ManaCost:4 B B -Types:Legendary Creature Vampire Noble +Types:Legendary Creature Phyrexian Vampire Noble PT:3/3 K:Flying S:Mode$ Continuous | Affected$ Creature.Black+Other | AddPower$ 1 | AddToughness$ 1 | Description$ Other black creatures get +1/+1. diff --git a/forge-gui/res/cardsfolder/a/atraxa_praetors_voice.txt b/forge-gui/res/cardsfolder/a/atraxa_praetors_voice.txt index c9be7309894..d52204fbb0f 100644 --- a/forge-gui/res/cardsfolder/a/atraxa_praetors_voice.txt +++ b/forge-gui/res/cardsfolder/a/atraxa_praetors_voice.txt @@ -1,6 +1,6 @@ Name:Atraxa, Praetors' Voice ManaCost:G W U B -Types:Legendary Creature Angel Horror +Types:Legendary Creature Phyrexian Angel Horror PT:4/4 K:Flying K:Vigilance diff --git a/forge-gui/res/cardsfolder/a/azors_gateway_sanctum_of_the_sun.txt b/forge-gui/res/cardsfolder/a/azors_gateway_sanctum_of_the_sun.txt index 035678ec55f..1c42f694a2b 100644 --- a/forge-gui/res/cardsfolder/a/azors_gateway_sanctum_of_the_sun.txt +++ b/forge-gui/res/cardsfolder/a/azors_gateway_sanctum_of_the_sun.txt @@ -20,7 +20,7 @@ ALTERNATE Name:Sanctum of the Sun ManaCost:no cost Colors:colorless -Types:Land +Types:Legendary Land A:AB$ Mana | Cost$ T | Produced$ Any | Amount$ X | SpellDescription$ Add X mana of any one color, where X is your life total. SVar:X:Count$YourLifeTotal SVar:Picture:http://www.wizards.com/global/images/magic/general/sanctum_of_the_sun.jpg diff --git a/forge-gui/res/cardsfolder/b/bannerhide_krushok.txt b/forge-gui/res/cardsfolder/b/bannerhide_krushok.txt index 15b50147501..dc6aa1c8758 100644 --- a/forge-gui/res/cardsfolder/b/bannerhide_krushok.txt +++ b/forge-gui/res/cardsfolder/b/bannerhide_krushok.txt @@ -6,4 +6,4 @@ K:Trample K:Reinforce:2:1 G K:Scavenge:5 G G DeckHas:Ability$Counters -Oracle:Trample\nReinforce 2 — {1}{G} ({1}{G}, Discard this card: Put two +1/+1 counters on target creature.)\nScavenge {5}{G}{G} ({5}{G}{G}, Exile this card from your graveyard: Put a number of +1/+1 counters equal to this card's power on target creature. Scavenge only as a sorcery.) +Oracle:Trample\nReinforce 2—{1}{G} ({1}{G}, Discard this card: Put two +1/+1 counters on target creature.)\nScavenge {5}{G}{G} ({5}{G}{G}, Exile this card from your graveyard: Put a number of +1/+1 counters equal to this card's power on target creature. Scavenge only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/b/barbed_spike.txt b/forge-gui/res/cardsfolder/b/barbed_spike.txt index 7a4bc91f1aa..d36aae0e3e0 100644 --- a/forge-gui/res/cardsfolder/b/barbed_spike.txt +++ b/forge-gui/res/cardsfolder/b/barbed_spike.txt @@ -1,11 +1,11 @@ Name:Barbed Spike ManaCost:1 W Types:Artifact Equipment -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a 1/1 colorless Thopter artifact creature token with flying, then attach CARDNAME to it. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a 1/1 colorless Thopter artifact creature token with flying and attach CARDNAME to it. SVar:TrigToken:DB$ Token | TokenScript$ c_1_1_a_thopter_flying | RememberTokens$ True | SubAbility$ DBAttach SVar:DBAttach:DB$ Attach | Defined$ Remembered | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 1 | Description$ Equipped creature gets +1/+0. K:Equip:2 DeckHas:Ability$Token -Oracle:When Barbed Spike enters the battlefield, create a 1/1 colorless Thopter artifact creature token with flying, then attach Barbed Spike to it.\nEquipped creature gets +1/+0.\nEquip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.) +Oracle:When Barbed Spike enters the battlefield, create a 1/1 colorless Thopter artifact creature token with flying and attach Barbed Spike to it.\nEquipped creature gets +1/+0.\nEquip {2} diff --git a/forge-gui/res/cardsfolder/b/batterskull.txt b/forge-gui/res/cardsfolder/b/batterskull.txt index d378ebdcf71..90fd208099b 100644 --- a/forge-gui/res/cardsfolder/b/batterskull.txt +++ b/forge-gui/res/cardsfolder/b/batterskull.txt @@ -7,4 +7,4 @@ S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 4 | AddToughness$ A:AB$ ChangeZone | Cost$ 3 | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return CARDNAME to its owner's hand. DeckHas:Ability$Token SVar:Picture:http://www.wizards.com/global/images/magic/general/batterskull.jpg -Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Germ creature token, then attach this to it.)\nEquipped creature gets +4/+4 and has vigilance and lifelink.\n{3}: Return Batterskull to its owner's hand.\nEquip {5} +Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Phyrexian Germ creature token, then attach this to it.)\nEquipped creature gets +4/+4 and has vigilance and lifelink.\n{3}: Return Batterskull to its owner's hand.\nEquip {5} diff --git a/forge-gui/res/cardsfolder/b/belbe_corrupted_observer.txt b/forge-gui/res/cardsfolder/b/belbe_corrupted_observer.txt index 78867b9de4c..d05a03abeb5 100644 --- a/forge-gui/res/cardsfolder/b/belbe_corrupted_observer.txt +++ b/forge-gui/res/cardsfolder/b/belbe_corrupted_observer.txt @@ -1,6 +1,6 @@ Name:Belbe, Corrupted Observer ManaCost:B G -Types:Legendary Creature Elf Zombie +Types:Legendary Creature Phyrexian Zombie Elf PT:2/2 T:Mode$ Phase | Phase$ Main2 | TriggerZones$ Battlefield | Execute$ TrigMana | TriggerDescription$ At the beginning of each player's postcombat main phase, that player adds {C}{C} for each of your opponents who lost life this turn. (Damage causes loss of life.) SVar:TrigMana:DB$ Mana | Produced$ C | Amount$ X | Defined$ TriggeredPlayer diff --git a/forge-gui/res/cardsfolder/b/blackcleave_goblin.txt b/forge-gui/res/cardsfolder/b/blackcleave_goblin.txt index 0786911071a..dbc72940a73 100644 --- a/forge-gui/res/cardsfolder/b/blackcleave_goblin.txt +++ b/forge-gui/res/cardsfolder/b/blackcleave_goblin.txt @@ -1,6 +1,6 @@ Name:Blackcleave Goblin ManaCost:3 B -Types:Creature Goblin Zombie +Types:Creature Phyrexian Goblin Zombie PT:2/1 K:Haste K:Infect diff --git a/forge-gui/res/cardsfolder/b/blade_splicer.txt b/forge-gui/res/cardsfolder/b/blade_splicer.txt index 4e646ea8e8e..13fcc785172 100644 --- a/forge-gui/res/cardsfolder/b/blade_splicer.txt +++ b/forge-gui/res/cardsfolder/b/blade_splicer.txt @@ -1,9 +1,8 @@ Name:Blade Splicer ManaCost:2 W -Types:Creature Human Artificer +Types:Creature Phyrexian Human Artificer PT:1/1 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a 3/3 colorless Golem artifact creature token. -SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_3_3_a_golem | TokenOwner$ You | LegacyImage$ c 3 3 a golem nph +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a 3/3 colorless Phyrexian Golem artifact creature token. +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_3_3_a_phyrexian_golem | TokenOwner$ You S:Mode$ Continuous | Affected$ Creature.Golem+YouCtrl | AddKeyword$ First Strike | Description$ Golems you control have first strike. -SVar:Picture:http://www.wizards.com/global/images/magic/general/blade_splicer.jpg -Oracle:When Blade Splicer enters the battlefield, create a 3/3 colorless Golem artifact creature token.\nGolems you control have first strike. +Oracle:When Blade Splicer enters the battlefield, create a 3/3 colorless Phyrexian Golem artifact creature token.\nGolems you control have first strike. diff --git a/forge-gui/res/cardsfolder/b/blazing_rootwalla.txt b/forge-gui/res/cardsfolder/b/blazing_rootwalla.txt index a0379707df6..15998ec7224 100644 --- a/forge-gui/res/cardsfolder/b/blazing_rootwalla.txt +++ b/forge-gui/res/cardsfolder/b/blazing_rootwalla.txt @@ -2,7 +2,7 @@ Name:Blazing Rootwalla ManaCost:R Types:Creature Lizard PT:1/1 -A:AB$ Pump | Cost$ R | NumAtt$ +2 | ActivationLimit$ 1 | SpellDescription$ CARDNAME gets +2/+0 until end of turn. Activate only once per turn. +A:AB$ Pump | Cost$ R | NumAtt$ +2 | ActivationLimit$ 1 | SpellDescription$ CARDNAME gets +2/+0 until end of turn. Activate only once each turn. K:Madness:0 DeckHints:Ability$Discard -Oracle:{R}: Blazing Rootwalla gets +2/+0 until end of turn. Activate only once per turn.\nMadness {0} (If you discard this card, discard it into exile. When you do, cast it for its madness cost or put it into your graveyard.) +Oracle:{R}: Blazing Rootwalla gets +2/+0 until end of turn. Activate only once each turn.\nMadness {0} (If you discard this card, discard it into exile. When you do, cast it for its madness cost or put it into your graveyard.) diff --git a/forge-gui/res/cardsfolder/b/blight_mamba.txt b/forge-gui/res/cardsfolder/b/blight_mamba.txt index 18df6cb04a3..ef96e289bee 100644 --- a/forge-gui/res/cardsfolder/b/blight_mamba.txt +++ b/forge-gui/res/cardsfolder/b/blight_mamba.txt @@ -1,6 +1,6 @@ Name:Blight Mamba ManaCost:1 G -Types:Creature Snake +Types:Creature Phyrexian Snake PT:1/1 K:Infect A:AB$ Regenerate | Cost$ 1 G | SpellDescription$ Regenerate CARDNAME. diff --git a/forge-gui/res/cardsfolder/b/blighted_agent.txt b/forge-gui/res/cardsfolder/b/blighted_agent.txt index 167708f605f..451d0c11aec 100644 --- a/forge-gui/res/cardsfolder/b/blighted_agent.txt +++ b/forge-gui/res/cardsfolder/b/blighted_agent.txt @@ -1,6 +1,6 @@ Name:Blighted Agent ManaCost:1 U -Types:Creature Human Rogue +Types:Creature Phyrexian Human Rogue PT:1/1 K:Infect K:Unblockable diff --git a/forge-gui/res/cardsfolder/b/blightsteel_colossus.txt b/forge-gui/res/cardsfolder/b/blightsteel_colossus.txt index a9f1c5cf7fd..cbf5ebc03b0 100644 --- a/forge-gui/res/cardsfolder/b/blightsteel_colossus.txt +++ b/forge-gui/res/cardsfolder/b/blightsteel_colossus.txt @@ -1,6 +1,6 @@ Name:Blightsteel Colossus ManaCost:12 -Types:Artifact Creature Golem +Types:Artifact Creature Phyrexian Golem PT:11/11 K:Trample K:Infect diff --git a/forge-gui/res/cardsfolder/b/blightwidow.txt b/forge-gui/res/cardsfolder/b/blightwidow.txt index c9b75f9a478..bac6ab68792 100644 --- a/forge-gui/res/cardsfolder/b/blightwidow.txt +++ b/forge-gui/res/cardsfolder/b/blightwidow.txt @@ -1,6 +1,6 @@ Name:Blightwidow ManaCost:3 G -Types:Creature Spider +Types:Creature Phyrexian Spider PT:2/4 K:Reach K:Infect diff --git a/forge-gui/res/cardsfolder/b/blind_zealot.txt b/forge-gui/res/cardsfolder/b/blind_zealot.txt index 3037c75ed07..2903abe0dc1 100644 --- a/forge-gui/res/cardsfolder/b/blind_zealot.txt +++ b/forge-gui/res/cardsfolder/b/blind_zealot.txt @@ -1,6 +1,6 @@ Name:Blind Zealot ManaCost:1 B B -Types:Creature Human Cleric +Types:Creature Phyrexian Human Cleric PT:2/2 K:Intimidate T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigDestroy | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may sacrifice it. If you do, destroy target creature that player controls. diff --git a/forge-gui/res/cardsfolder/b/blinding_souleater.txt b/forge-gui/res/cardsfolder/b/blinding_souleater.txt index 1528646a671..bb545c1e9ff 100644 --- a/forge-gui/res/cardsfolder/b/blinding_souleater.txt +++ b/forge-gui/res/cardsfolder/b/blinding_souleater.txt @@ -1,6 +1,6 @@ Name:Blinding Souleater ManaCost:3 -Types:Artifact Creature Cleric +Types:Artifact Creature Phyrexian Cleric PT:1/3 A:AB$ Tap | Cost$ PW T | ValidTgts$ Creature | TgtPrompt$ Select target creature | AIPhyrexianPayment$ Never | SpellDescription$ Tap target creature. AI:RemoveDeck:Random diff --git a/forge-gui/res/cardsfolder/b/blistergrub.txt b/forge-gui/res/cardsfolder/b/blistergrub.txt index 447a467812c..8ac43dfc199 100644 --- a/forge-gui/res/cardsfolder/b/blistergrub.txt +++ b/forge-gui/res/cardsfolder/b/blistergrub.txt @@ -1,6 +1,6 @@ Name:Blistergrub ManaCost:2 B -Types:Creature Horror +Types:Creature Phyrexian Horror PT:2/2 K:Swampwalk T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigLoseLife | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME is dies, each opponent loses 2 life. diff --git a/forge-gui/res/cardsfolder/b/body_snatcher.txt b/forge-gui/res/cardsfolder/b/body_snatcher.txt index ceba3f0ba1d..d1bebf178cd 100644 --- a/forge-gui/res/cardsfolder/b/body_snatcher.txt +++ b/forge-gui/res/cardsfolder/b/body_snatcher.txt @@ -1,6 +1,6 @@ Name:Body Snatcher ManaCost:2 B B -Types:Creature Minion +Types:Creature Phyrexian Minion PT:2/2 T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ DBExileMe | TriggerDescription$ When CARDNAME enters the battlefield, exile it unless you discard a creature card. SVar:DBExileMe:DB$ ChangeZone | Defined$ Self | Origin$ Battlefield | Destination$ Exile | UnlessCost$ Discard<1/Creature> | UnlessPayer$ You diff --git a/forge-gui/res/cardsfolder/b/bone_rattler.txt b/forge-gui/res/cardsfolder/b/bone_rattler.txt index 034076898ac..f5c0707a631 100644 --- a/forge-gui/res/cardsfolder/b/bone_rattler.txt +++ b/forge-gui/res/cardsfolder/b/bone_rattler.txt @@ -2,9 +2,9 @@ Name:Bone Rattler ManaCost:3 B B Types:Creature Skeleton PT:4/4 -T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Graveyard | Execute$ TrigExile | TriggerDescription$ When CARDNAME is put into a graveyard from anywhere, exile it. If you do, create four Reassembling Skeleton token cards and put them into your graveyard. +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Graveyard | Execute$ TrigExile | TriggerDescription$ When CARDNAME is put into your graveyard from anywhere, exile it. When you do, create four Reassembling Skeleton token cards and put them into your graveyard. SVar:TrigExile:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | RememberChanged$ True | SubAbility$ DBMakeCard SVar:DBMakeCard:DB$ MakeCard | Name$ Reassembling Skeleton | Zone$ Graveyard | Amount$ 4 | SubAbility$ DBCleanup | ConditionDefined$ Remembered | ConditionPresent$ Card.Self | ConditionCompare$ GE1 SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Graveyard -Oracle:When Bone Rattler is put into a graveyard from anywhere, exile it. If you do, create four Reassembling Skeleton token cards and put them into your graveyard. +Oracle:When Bone Rattler is put into your graveyard from anywhere, exile it. When you do, create four Reassembling Skeleton token cards and put them into your graveyard. diff --git a/forge-gui/res/cardsfolder/b/bone_shredder.txt b/forge-gui/res/cardsfolder/b/bone_shredder.txt index 28ea5e89636..1f331de6ab9 100644 --- a/forge-gui/res/cardsfolder/b/bone_shredder.txt +++ b/forge-gui/res/cardsfolder/b/bone_shredder.txt @@ -1,6 +1,6 @@ Name:Bone Shredder ManaCost:2 B -Types:Creature Minion +Types:Creature Phyrexian Minion PT:1/1 K:Flying K:Echo:2 B diff --git a/forge-gui/res/cardsfolder/b/bonehoard.txt b/forge-gui/res/cardsfolder/b/bonehoard.txt index 9605af3189a..973e1c68f26 100644 --- a/forge-gui/res/cardsfolder/b/bonehoard.txt +++ b/forge-gui/res/cardsfolder/b/bonehoard.txt @@ -8,4 +8,4 @@ SVar:X:Count$TypeInAllYards.Creature SVar:NeedsToPlayVar:X GE1 DeckHas:Ability$Token SVar:Picture:http://www.wizards.com/global/images/magic/general/bonehoard.jpg -Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Germ creature token, then attach this to it.)\nEquipped creature gets +X/+X, where X is the number of creature cards in all graveyards.\nEquip {2} +Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Phyrexian Germ creature token, then attach this to it.)\nEquipped creature gets +X/+X, where X is the number of creature cards in all graveyards.\nEquip {2} diff --git a/forge-gui/res/cardsfolder/b/brainstone.txt b/forge-gui/res/cardsfolder/b/brainstone.txt index b1ec13f6269..137e5f34900 100644 --- a/forge-gui/res/cardsfolder/b/brainstone.txt +++ b/forge-gui/res/cardsfolder/b/brainstone.txt @@ -3,4 +3,4 @@ ManaCost:1 Types:Artifact A:AB$ Draw | Cost$ 2 T Sac<1/CARDNAME> | NumCards$ 3 | SubAbility$ DBChangeZone | StackDescription$ {p:You} draws three cards, | SpellDescription$ Draw three cards, then put two cards from your hand on top of your library in any order. SVar:DBChangeZone:DB$ ChangeZone | Origin$ Hand | Destination$ Library | ChangeNum$ 2 | Mandatory$ True | StackDescription$ then puts two cards from their hand on top of their library in any order. -Oracle:{2}, {T}, Sacrifice Brainstone: Draw three cards, then put two cards from your hand on top of your library in any order. +Oracle:{2},{T}, Sacrifice Brainstone: Draw three cards, then put two cards from your hand on top of your library in any order. diff --git a/forge-gui/res/cardsfolder/b/breathless_knight.txt b/forge-gui/res/cardsfolder/b/breathless_knight.txt index 26fee1cf2a9..24cca3ce411 100644 --- a/forge-gui/res/cardsfolder/b/breathless_knight.txt +++ b/forge-gui/res/cardsfolder/b/breathless_knight.txt @@ -4,10 +4,10 @@ Types:Creature Spirit Knight PT:2/2 K:Flying K:Lifelink -T:Mode$ ChangesZone | Origin$ Graveyard | Destination$ Battlefield | TriggerZones$ Battlefield | ValidCard$ Creature.YouOwn+Other | Execute$ TrigPutCounter | TriggerDescription$ Whenever CARDNAME or another creature enters the battlefield under your control, if it entered from a graveyard or you cast it from a graveyard, put a +1/+1 counter on CARDNAME. -T:Mode$ ChangesZone | Destination$ Battlefield | TriggerZones$ Battlefield | ValidCard$ Creature.YouOwn+Other+wasCastFromGraveyard | Execute$ TrigPutCounter | Secondary$ True | TriggerDescription$ Whenever CARDNAME or another creature enters the battlefield under your control, if it entered from a graveyard or you cast it from a graveyard, put a +1/+1 counter on CARDNAME. -T:Mode$ ChangesZone | Origin$ Graveyard | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigPutCounter | Secondary$ True | TriggerDescription$ Whenever CARDNAME or another creature enters the battlefield under your control, if it entered from a graveyard or you cast it from a graveyard, put a +1/+1 counter on CARDNAME. -T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Creature.Self+wasCastFromGraveyard | Execute$ TrigPutCounter | Secondary$ True | TriggerDescription$ Whenever CARDNAME or another creature enters the battlefield under your control, if it entered from a graveyard or you cast it from a graveyard, put a +1/+1 counter on CARDNAME. +T:Mode$ ChangesZone | Origin$ Graveyard | Destination$ Battlefield | TriggerZones$ Battlefield | ValidCard$ Creature.YouOwn+Other | Execute$ TrigPutCounter | TriggerDescription$ Whenever CARDNAME or another creature enters the battlefield under your control, if that creature entered from a graveyard or you cast it from a graveyard, put a +1/+1 counter on CARDNAME. +T:Mode$ ChangesZone | Destination$ Battlefield | TriggerZones$ Battlefield | ValidCard$ Creature.YouOwn+Other+wasCastFromGraveyard | Execute$ TrigPutCounter | Secondary$ True | TriggerDescription$ Whenever CARDNAME or another creature enters the battlefield under your control, if that creature entered from a graveyard or you cast it from a graveyard, put a +1/+1 counter on CARDNAME. +T:Mode$ ChangesZone | Origin$ Graveyard | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigPutCounter | Secondary$ True | TriggerDescription$ Whenever CARDNAME or another creature enters the battlefield under your control, if that creature entered from a graveyard or you cast it from a graveyard, put a +1/+1 counter on CARDNAME. +T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Creature.Self+wasCastFromGraveyard | Execute$ TrigPutCounter | Secondary$ True | TriggerDescription$ Whenever CARDNAME or another creature enters the battlefield under your control, if that creature entered from a graveyard or you cast it from a graveyard, put a +1/+1 counter on CARDNAME. SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterNum$ 1 | CounterType$ P1P1 DeckHas:Ability$Counters -Oracle:Flying, lifelink\nWhenever Breathless Knight or another creature enters the battlefield under your control, if it entered from a graveyard or you cast it from a graveyard, put a +1/+1 counter on Breathless Knight. +Oracle:Flying, lifelink\nWhenever Breathless Knight or another creature enters the battlefield under your control, if that creature entered from a graveyard or you cast it from a graveyard, put a +1/+1 counter on Breathless Knight. diff --git a/forge-gui/res/cardsfolder/b/brudiclad_telchor_engineer.txt b/forge-gui/res/cardsfolder/b/brudiclad_telchor_engineer.txt index 782c663e669..e68ebca8b41 100644 --- a/forge-gui/res/cardsfolder/b/brudiclad_telchor_engineer.txt +++ b/forge-gui/res/cardsfolder/b/brudiclad_telchor_engineer.txt @@ -1,15 +1,15 @@ Name:Brudiclad, Telchor Engineer ManaCost:4 U R -Types:Legendary Artifact Creature Artificer +Types:Legendary Artifact Creature Phyrexian Artificer PT:4/4 S:Mode$ Continuous | Affected$ Creature.token+YouCtrl | AddKeyword$ Haste | Description$ Creature tokens you control have haste. SVar:PlayMain1:TRUE -T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ At the beginning of combat on your turn, create a 2/1 blue Myr artifact creature token. Then you may choose a token you control. If you do, each other token you control becomes a copy of that token. -SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ u_2_1_a_myr | TokenOwner$ You | SubAbility$ DBImprint +T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ At the beginning of combat on your turn, create a 2/1 blue Phyrexian Myr artifact creature token. Then you may choose a token you control. If you do, each other token you control becomes a copy of that token. +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ u_2_1_a_phyrexian_myr | TokenOwner$ You | SubAbility$ DBImprint SVar:DBImprint:DB$ ChooseCard | Defined$ You | Amount$ 1 | Choices$ Card.token+YouCtrl | ChoiceTitle$ Choose token you control | RememberChosen$ True | SubAbility$ MassClone | StackDescription$ None | SpellDescription$ Each other token becomes a copy of target token. SVar:MassClone:DB$ RepeatEach | UseImprinted$ True | RepeatCards$ Card.token+IsNotRemembered+YouCtrl | RepeatSubAbility$ DBCopy | SubAbility$ DBCleanup SVar:DBCopy:DB$ Clone | Defined$ Remembered | CloneTarget$ Imprinted SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHints:Type$Token DeckHas:Type$Token -Oracle:Creature tokens you control have haste.\nAt the beginning of combat on your turn, create a 2/1 blue Myr artifact creature token. Then you may choose a token you control. If you do, each other token you control becomes a copy of that token. +Oracle:Creature tokens you control have haste.\nAt the beginning of combat on your turn, create a 2/1 blue Phyrexian Myr artifact creature token. Then you may choose a token you control. If you do, each other token you control becomes a copy of that token. diff --git a/forge-gui/res/cardsfolder/b/brutalizer_exarch.txt b/forge-gui/res/cardsfolder/b/brutalizer_exarch.txt index cf0e91ee8f1..cc3aad0f38b 100644 --- a/forge-gui/res/cardsfolder/b/brutalizer_exarch.txt +++ b/forge-gui/res/cardsfolder/b/brutalizer_exarch.txt @@ -1,6 +1,6 @@ Name:Brutalizer Exarch ManaCost:5 G -Types:Creature Cleric +Types:Creature Phyrexian Cleric PT:3/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigCharm | TriggerDescription$ When CARDNAME enters the battlefield, ABILITY SVar:TrigCharm:DB$ Charm | Choices$ DBSearch,DBRemove diff --git a/forge-gui/res/cardsfolder/b/butcher_of_malakir.txt b/forge-gui/res/cardsfolder/b/butcher_of_malakir.txt index 471cb65b48b..8cae5223ea9 100644 --- a/forge-gui/res/cardsfolder/b/butcher_of_malakir.txt +++ b/forge-gui/res/cardsfolder/b/butcher_of_malakir.txt @@ -3,8 +3,6 @@ ManaCost:5 B B Types:Creature Vampire Warrior PT:5/4 K:Flying -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ Whenever CARDNAME or another creature you control dies, each opponent sacrifices a creature. -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigSac | Secondary$ True | TriggerDescription$ Whenever CARDNAME or another creature you control dies, each opponent sacrifices a creature. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self,Creature.Other+YouCtrl | Execute$ TrigSac | TriggerDescription$ Whenever CARDNAME or another creature you control dies, each opponent sacrifices a creature. SVar:TrigSac:DB$ Sacrifice | Defined$ Player.Opponent | SacValid$ Creature -SVar:Picture:http://www.wizards.com/global/images/magic/general/butcher_of_malakir.jpg Oracle:Flying\nWhenever Butcher of Malakir or another creature you control dies, each opponent sacrifices a creature. diff --git a/forge-gui/res/cardsfolder/c/cabal_initiate.txt b/forge-gui/res/cardsfolder/c/cabal_initiate.txt index 6e7ff2c2b16..3e589f13d1c 100644 --- a/forge-gui/res/cardsfolder/c/cabal_initiate.txt +++ b/forge-gui/res/cardsfolder/c/cabal_initiate.txt @@ -3,6 +3,6 @@ ManaCost:1 B Types:Creature Human Warlock PT:2/1 A:AB$ Pump | Cost$ Discard<1/Card> | KW$ Lifelink | SpellDescription$ CARDNAME gains lifelink until end of turn. -S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 1 | AddToughness$ 2 | Condition$ Threshold | Description$ Threshold — CARDNAME gets +1/+2 as long as seven or more cards are in your graveyard. +S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 1 | AddToughness$ 2 | Condition$ Threshold | Description$ Threshold — CARDNAME get +1/+2 as long as seven or more cards are in your graveyard. DeckHas:Ability$LifeGain & Ability$Discard -Oracle:Discard a card: Cabal Initiate gains lifelink until end of turn.\nThreshold — Cabal Initiate gets +1/+2 as long as seven or more cards are in your graveyard. +Oracle:Discard a card: Cabal Initiate gains lifelink until end of turn.\nThreshold — Cabal Initiate get +1/+2 as long as seven or more cards are in your graveyard. diff --git a/forge-gui/res/cardsfolder/c/captain_lannery_storm.txt b/forge-gui/res/cardsfolder/c/captain_lannery_storm.txt index 39d34642954..4c06ecc8ec8 100644 --- a/forge-gui/res/cardsfolder/c/captain_lannery_storm.txt +++ b/forge-gui/res/cardsfolder/c/captain_lannery_storm.txt @@ -1,6 +1,6 @@ Name:Captain Lannery Storm ManaCost:2 R -Types:Creature Legendary Human Pirate +Types:Legendary Creature Human Pirate PT:2/2 K:Haste T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ Whenever CARDNAME attacks, create a Treasure token. diff --git a/forge-gui/res/cardsfolder/c/captured_by_lagacs.txt b/forge-gui/res/cardsfolder/c/captured_by_lagacs.txt index d94a4fd6da4..c09e88d5407 100644 --- a/forge-gui/res/cardsfolder/c/captured_by_lagacs.txt +++ b/forge-gui/res/cardsfolder/c/captured_by_lagacs.txt @@ -4,6 +4,6 @@ Types:Enchantment Aura K:Enchant creature A:SP$ Attach | Cost$ 1 G W | ValidTgts$ Creature | AILogic$ Curse S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME can't attack or block. | Description$ Enchanted creature can't attack or block. -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPut | TriggerDescription$ When CARDNAME enters the battlefield, support 2. (Put a +1/+1 counter on each of up to two target creatures.) +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPut | TriggerDescription$ When CARDNAME enters the battlefield, support 2. (Put a +1/+1 counter on each of up to two other target creatures.) SVar:TrigPut:DB$ PutCounter | ValidTgts$ Creature | TgtPrompt$ Select up to two target creatures | TargetMin$ 0 | TargetMax$ 2 | CounterType$ P1P1 | CounterNum$ 1 -Oracle:Enchant creature\nEnchanted creature can't attack or block.\nWhen Captured by Lagacs enters the battlefield, support 2. (Put a +1/+1 counter on each of up to two target creatures.) +Oracle:Enchant creature\nEnchanted creature can't attack or block.\nWhen Captured by Lagacs enters the battlefield, support 2. (Put a +1/+1 counter on each of up to two other target creatures.) diff --git a/forge-gui/res/cardsfolder/c/carnifex_demon.txt b/forge-gui/res/cardsfolder/c/carnifex_demon.txt index f75b8d45e20..14d26a0daf5 100644 --- a/forge-gui/res/cardsfolder/c/carnifex_demon.txt +++ b/forge-gui/res/cardsfolder/c/carnifex_demon.txt @@ -1,6 +1,6 @@ Name:Carnifex Demon ManaCost:4 B B -Types:Creature Demon +Types:Creature Phyrexian Demon PT:6/6 K:Flying K:etbCounter:M1M1:2 diff --git a/forge-gui/res/cardsfolder/c/carrion_call.txt b/forge-gui/res/cardsfolder/c/carrion_call.txt index dcd6360f9a5..f18b3cc6735 100644 --- a/forge-gui/res/cardsfolder/c/carrion_call.txt +++ b/forge-gui/res/cardsfolder/c/carrion_call.txt @@ -1,6 +1,5 @@ Name:Carrion Call ManaCost:3 G Types:Instant -A:SP$ Token | Cost$ 3 G | LegacyImage$ g 1 1 insect infect som | TokenAmount$ 2 | TokenScript$ g_1_1_insect_infect | TokenOwner$ You | SpellDescription$ Create two 1/1 green Insect creature tokens with infect. -SVar:Picture:http://www.wizards.com/global/images/magic/general/carrion_call.jpg -Oracle:Create two 1/1 green Insect creature tokens with infect. (They deal damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.) +A:SP$ Token | Cost$ 3 G | TokenAmount$ 2 | TokenScript$ g_1_1_phyrexian_insect_infect | TokenOwner$ You | SpellDescription$ Create two 1/1 green Insect creature tokens with infect. +Oracle:Create two 1/1 green Phyrexian Insect creature tokens with infect. (They deal damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.) diff --git a/forge-gui/res/cardsfolder/c/carth_the_lion.txt b/forge-gui/res/cardsfolder/c/carth_the_lion.txt index 10c51aa5ff1..854e4a50fff 100644 --- a/forge-gui/res/cardsfolder/c/carth_the_lion.txt +++ b/forge-gui/res/cardsfolder/c/carth_the_lion.txt @@ -5,6 +5,6 @@ PT:3/5 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDig | TriggerDescription$ Whenever CARDNAME enters the battlefield or a planeswalker you control dies, look at the top seven cards of your library. You may reveal a planeswalker card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Planeswalker.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDig | Secondary$ True | TriggerDescription$ Whenever CARDNAME enters the battlefield or a planeswalker you control dies, look at the top seven cards of your library. You may reveal a planeswalker card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. SVar:TrigDig:DB$ Dig | DigNum$ 7 | ChangeNum$ 1 | Optional$ True | ChangeValid$ Planeswalker | RestRandomOrder$ True | Reveal$ True -S:Mode$ RaiseCost | ValidCard$ Planeswalker.YouCtrl | Type$ Loyalty | Cost$ AddCounter<1/LOYALTY> | Description$ Planeswalkers' loyalty abilities you activate cost an additional [+1] to activate. +S:Mode$ RaiseCost | ValidCard$ Planeswalker.YouCtrl | Type$ Loyalty | Cost$ AddCounter<1/LOYALTY> | Description$ Planeswalkers' loyalty abilities you activate cost an additional {+1} to activate. DeckNeeds:Type$Planeswalker -Oracle:Whenever Carth the Lion enters the battlefield or a planeswalker you control dies, look at the top seven cards of your library. You may reveal a planeswalker card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.\nPlaneswalkers' loyalty abilities you activate cost an additional [+1] to activate. +Oracle:Whenever Carth the Lion enters the battlefield or a planeswalker you control dies, look at the top seven cards of your library. You may reveal a planeswalker card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.\nPlaneswalkers' loyalty abilities you activate cost an additional {+1} to activate. diff --git a/forge-gui/res/cardsfolder/c/cathedral_membrane.txt b/forge-gui/res/cardsfolder/c/cathedral_membrane.txt index c72997041ef..b7d178ca96d 100644 --- a/forge-gui/res/cardsfolder/c/cathedral_membrane.txt +++ b/forge-gui/res/cardsfolder/c/cathedral_membrane.txt @@ -1,6 +1,6 @@ Name:Cathedral Membrane ManaCost:1 PW -Types:Artifact Creature Wall +Types:Artifact Creature Phyrexian Wall PT:0/3 K:Defender T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDmg | TriggerController$ TriggeredCardController | Phase$ BeginCombat->EndCombat | TriggerDescription$ When CARDNAME dies during combat, it deals 6 damage to each creature it blocked this combat. diff --git a/forge-gui/res/cardsfolder/c/caustic_hound.txt b/forge-gui/res/cardsfolder/c/caustic_hound.txt index 2a416a006ca..043d2d8f14a 100644 --- a/forge-gui/res/cardsfolder/c/caustic_hound.txt +++ b/forge-gui/res/cardsfolder/c/caustic_hound.txt @@ -1,6 +1,6 @@ Name:Caustic Hound ManaCost:5 B -Types:Creature Dog +Types:Creature Phyrexian Dog PT:4/4 T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigLoseLife | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, each player loses 4 life. SVar:TrigLoseLife:DB$LoseLife | LifeAmount$ 4 | Defined$ Player diff --git a/forge-gui/res/cardsfolder/c/chained_throatseeker.txt b/forge-gui/res/cardsfolder/c/chained_throatseeker.txt index 2af12641274..212bf727b34 100644 --- a/forge-gui/res/cardsfolder/c/chained_throatseeker.txt +++ b/forge-gui/res/cardsfolder/c/chained_throatseeker.txt @@ -1,6 +1,6 @@ Name:Chained Throatseeker ManaCost:5 U -Types:Creature Horror +Types:Creature Phyrexian Horror PT:5/5 K:Infect S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefender$ IsPoisoned | Description$ CARDNAME can't attack unless defending player is poisoned. diff --git a/forge-gui/res/cardsfolder/c/chancellor_of_the_annex.txt b/forge-gui/res/cardsfolder/c/chancellor_of_the_annex.txt index fdc7a1c618f..7a15eedc1ec 100644 --- a/forge-gui/res/cardsfolder/c/chancellor_of_the_annex.txt +++ b/forge-gui/res/cardsfolder/c/chancellor_of_the_annex.txt @@ -1,6 +1,6 @@ Name:Chancellor of the Annex ManaCost:4 W W W -Types:Creature Angel +Types:Creature Phyrexian Angel PT:5/6 K:Flying K:MayEffectFromOpeningHand:RevealCard diff --git a/forge-gui/res/cardsfolder/c/chancellor_of_the_dross.txt b/forge-gui/res/cardsfolder/c/chancellor_of_the_dross.txt index f8bddfe8e53..eedce2d4f78 100644 --- a/forge-gui/res/cardsfolder/c/chancellor_of_the_dross.txt +++ b/forge-gui/res/cardsfolder/c/chancellor_of_the_dross.txt @@ -1,6 +1,6 @@ Name:Chancellor of the Dross ManaCost:4 B B B -Types:Creature Vampire +Types:Creature Phyrexian Vampire PT:6/6 K:MayEffectFromOpeningHand:RevealCard K:Flying diff --git a/forge-gui/res/cardsfolder/c/chancellor_of_the_forge.txt b/forge-gui/res/cardsfolder/c/chancellor_of_the_forge.txt index 6991ce8c44a..1ba13ca58af 100644 --- a/forge-gui/res/cardsfolder/c/chancellor_of_the_forge.txt +++ b/forge-gui/res/cardsfolder/c/chancellor_of_the_forge.txt @@ -1,16 +1,15 @@ Name:Chancellor of the Forge ManaCost:4 R R R -Types:Creature Giant +Types:Creature Phyrexian Giant PT:5/5 -T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ EffMassToken | TriggerDescription$ When CARDNAME enters the battlefield, create X 1/1 red Goblin creature tokens with haste, where X is the number of creatures you control. -SVar:EffMassToken:DB$ Token | TokenAmount$ X | TokenOwner$ You | TokenScript$ r_1_1_goblin_haste | LegacyImage$ r 1 1 goblin haste nph +T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ EffMassToken | TriggerDescription$ When CARDNAME enters the battlefield, create X 1/1 red Phyrexian Goblin creature tokens with haste, where X is the number of creatures you control. +SVar:EffMassToken:DB$ Token | TokenAmount$ X | TokenOwner$ You | TokenScript$ r_1_1_phyrexian_goblin_haste SVar:X:Count$Valid Creature.YouCtrl K:MayEffectFromOpeningHand:RevealCard -SVar:RevealCard:DB$ Reveal | RevealDefined$ Self | SubAbility$ TokenOnUpkeep | SpellDescription$ You may reveal this card from your opening hand. If you do, at the beginning of the first upkeep, create a 1/1 red Goblin creature token with haste. -SVar:TokenOnUpkeep:DB$ Effect | Triggers$ TrigToken | Name$ Chancellor of the Forge effect | SpellDescription$ You may reveal this card from your opening hand. If you do, at the beginning of the first upkeep, create a 1/1 red Goblin creature token with haste. -SVar:TrigToken:Mode$ Phase | Phase$ Upkeep | Execute$ EffToken | TriggerDescription$ At the beginning of the first upkeep, create a 1/1 red Goblin creature token with haste. -SVar:EffToken:DB$ Token | TokenAmount$ 1 | TokenOwner$ You | TokenScript$ r_1_1_goblin_haste | LegacyImage$ r 1 1 goblin haste nph | SubAbility$ RemoveMe +SVar:RevealCard:DB$ Reveal | RevealDefined$ Self | SubAbility$ TokenOnUpkeep | SpellDescription$ You may reveal this card from your opening hand. If you do, at the beginning of the first upkeep, create a 1/1 red Phyrexian Goblin creature token with haste. +SVar:TokenOnUpkeep:DB$ Effect | Triggers$ TrigToken | Name$ Chancellor of the Forge effect | SpellDescription$ You may reveal this card from your opening hand. If you do, at the beginning of the first upkeep, create a 1/1 red Phyrexian Goblin creature token with haste. +SVar:TrigToken:Mode$ Phase | Phase$ Upkeep | Execute$ EffToken | TriggerDescription$ At the beginning of the first upkeep, create a 1/1 red Phyrexian Goblin creature token with haste. +SVar:EffToken:DB$ Token | TokenAmount$ 1 | TokenOwner$ You | TokenScript$ r_1_1_phyrexian_goblin_haste | SubAbility$ RemoveMe SVar:RemoveMe:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:PlayMain1:TRUE -SVar:Picture:http://www.wizards.com/global/images/magic/general/chancellor_of_the_forge.jpg -Oracle:You may reveal this card from your opening hand. If you do, at the beginning of the first upkeep, create a 1/1 red Goblin creature token with haste.\nWhen Chancellor of the Forge enters the battlefield, create X 1/1 red Goblin creature tokens with haste, where X is the number of creatures you control. +Oracle:You may reveal this card from your opening hand. If you do, at the beginning of the first upkeep, create a 1/1 red Phyrexian Goblin creature token with haste.\nWhen Chancellor of the Forge enters the battlefield, create X 1/1 red Phyrexian Goblin creature tokens with haste, where X is the number of creatures you control. diff --git a/forge-gui/res/cardsfolder/c/chancellor_of_the_spires.txt b/forge-gui/res/cardsfolder/c/chancellor_of_the_spires.txt index 3a00732ecc2..e2ef365427f 100644 --- a/forge-gui/res/cardsfolder/c/chancellor_of_the_spires.txt +++ b/forge-gui/res/cardsfolder/c/chancellor_of_the_spires.txt @@ -1,6 +1,6 @@ Name:Chancellor of the Spires ManaCost:4 U U U -Types:Creature Sphinx +Types:Creature Phyrexian Sphinx PT:5/7 K:MayEffectFromOpeningHand:RevealCard K:Flying diff --git a/forge-gui/res/cardsfolder/c/chancellor_of_the_tangle.txt b/forge-gui/res/cardsfolder/c/chancellor_of_the_tangle.txt index 10dfebee270..4ddbd157840 100644 --- a/forge-gui/res/cardsfolder/c/chancellor_of_the_tangle.txt +++ b/forge-gui/res/cardsfolder/c/chancellor_of_the_tangle.txt @@ -1,6 +1,6 @@ Name:Chancellor of the Tangle ManaCost:4 G G G -Types:Creature Beast +Types:Creature Phyrexian Beast PT:6/7 K:MayEffectFromOpeningHand:ManaOnMain K:Vigilance diff --git a/forge-gui/res/cardsfolder/c/chatterstorm.txt b/forge-gui/res/cardsfolder/c/chatterstorm.txt index 24f309643df..d7b1d67ddb5 100644 --- a/forge-gui/res/cardsfolder/c/chatterstorm.txt +++ b/forge-gui/res/cardsfolder/c/chatterstorm.txt @@ -4,4 +4,4 @@ Types:Sorcery K:Storm A:SP$ Token | Cost$ 1 G | TokenAmount$ 1 | TokenScript$ g_1_1_squirrel | TokenOwner$ You | SpellDescription$ Create a 1/1 green Squirrel creature token. DeckHas:Ability$Token -Oracle:Create a 1/1 green Squirrel creature token.\nStorm (When you cast this spell, copy it for each spell cast before it this turn.) +Oracle:Create a 1/1 green Squirrel creature token.\nStorm (When you cast this spell, copy it for each spell cast before it this turn. You may choose new targets for the copies.) diff --git a/forge-gui/res/cardsfolder/c/clamor_shaman.txt b/forge-gui/res/cardsfolder/c/clamor_shaman.txt index c6143ac22c4..36f6d0db1d9 100644 --- a/forge-gui/res/cardsfolder/c/clamor_shaman.txt +++ b/forge-gui/res/cardsfolder/c/clamor_shaman.txt @@ -1,6 +1,6 @@ Name:Clamor Shaman ManaCost:2 R -Types:Creature Shaman +Types:Creature Goblin Shaman PT:1/1 K:Riot T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigCanNotBlock | TriggerDescription$ Whenever CARDNAME attacks, target creature an opponent controls can't block this turn. diff --git a/forge-gui/res/cardsfolder/c/cloak_of_confusion.txt b/forge-gui/res/cardsfolder/c/cloak_of_confusion.txt index e689224e076..10a0179d486 100644 --- a/forge-gui/res/cardsfolder/c/cloak_of_confusion.txt +++ b/forge-gui/res/cardsfolder/c/cloak_of_confusion.txt @@ -5,8 +5,7 @@ K:Enchant creature you control A:SP$ Attach | Cost$ 1 B | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | AILogic$ Pump S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddTrigger$ TrigPump | AddSVar$ CloakofConfusionPump & CloakofConfusionDiscard | Description$ Whenever enchanted creature attacks and isn't blocked, you may have it assign no combat damage this turn. If you do, defending player discards a card at random. SVar:TrigPump:Mode$ AttackerUnblocked | ValidCard$ Card.Self | Execute$ CloakofConfusionPump | OptionalDecider$ You | TriggerDescription$ Whenever enchanted creature attacks and isn't blocked, you may have it assign no combat damage this turn. If you do, defending player discards a card at random. -SVar:CloakofConfusionPump:DB$ Pump | Defined$ Self | KW$ Prevent all combat damage that would be dealt by CARDNAME. | SubAbility$ CloakofConfusionDiscard +SVar:CloakofConfusionPump:DB$ Pump | Defined$ Self | KW$ HIDDEN CARDNAME assigns no combat damage | SubAbility$ CloakofConfusionDiscard SVar:CloakofConfusionDiscard:DB$ Discard | Defined$ DefendingPlayer | Mode$ Random | NumCards$ 1 AI:RemoveDeck:All -SVar:Picture:http://www.wizards.com/global/images/magic/general/cloak_of_confusion.jpg Oracle:Enchant creature you control\nWhenever enchanted creature attacks and isn't blocked, you may have it assign no combat damage this turn. If you do, defending player discards a card at random. diff --git a/forge-gui/res/cardsfolder/c/combine_chrysalis.txt b/forge-gui/res/cardsfolder/c/combine_chrysalis.txt index 8150d92ad2f..b26c06d2a68 100644 --- a/forge-gui/res/cardsfolder/c/combine_chrysalis.txt +++ b/forge-gui/res/cardsfolder/c/combine_chrysalis.txt @@ -1,7 +1,7 @@ Name:Combine Chrysalis ManaCost:G U Types:Artifact -S:Mode$ Continuous | Affected$ Creature.token | AddKeyword$ Flying | Description$ Creature tokens you control have flying. +S:Mode$ Continuous | Affected$ Creature.token+YouCtrl | AddKeyword$ Flying | Description$ Creature tokens you control have flying. A:AB$ Token | Cost$ 2 G U T Sac<1/Permanent.token/token> | SorcerySpeed$ True | TokenScript$ g_4_4_beast | SpellDescription$ Create a 4/4 green Beast creature token. Activate only as a sorcery. DeckNeeds:Ability$Token DeckHas:Ability$Token diff --git a/forge-gui/res/cardsfolder/c/commander_greven_il_vec.txt b/forge-gui/res/cardsfolder/c/commander_greven_il_vec.txt index b1a844c52e6..9596fa410d1 100644 --- a/forge-gui/res/cardsfolder/c/commander_greven_il_vec.txt +++ b/forge-gui/res/cardsfolder/c/commander_greven_il_vec.txt @@ -1,6 +1,6 @@ Name:Commander Greven il-Vec ManaCost:3 B B B -Types:Legendary Creature Human Warrior +Types:Legendary Creature Phyrexian Human Warrior PT:7/5 K:Fear T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice a creature. diff --git a/forge-gui/res/cardsfolder/c/contagious_nim.txt b/forge-gui/res/cardsfolder/c/contagious_nim.txt index 869469a174b..6e14eb8c0e8 100644 --- a/forge-gui/res/cardsfolder/c/contagious_nim.txt +++ b/forge-gui/res/cardsfolder/c/contagious_nim.txt @@ -1,6 +1,6 @@ Name:Contagious Nim ManaCost:2 B -Types:Creature Zombie +Types:Creature Phyrexian Zombie PT:2/2 K:Infect SVar:Picture:http://www.wizards.com/global/images/magic/general/contagious_nim.jpg diff --git a/forge-gui/res/cardsfolder/c/conversion_chamber.txt b/forge-gui/res/cardsfolder/c/conversion_chamber.txt index 3719e15e536..f406dcc170d 100644 --- a/forge-gui/res/cardsfolder/c/conversion_chamber.txt +++ b/forge-gui/res/cardsfolder/c/conversion_chamber.txt @@ -3,6 +3,5 @@ ManaCost:3 Types:Artifact A:AB$ ChangeZone | Cost$ 2 T | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Artifact | TgtPrompt$ Select target artifact card in a graveyard | SubAbility$ DBPutCounter | SpellDescription$ Exile target artifact card from a graveyard. Put a charge counter on CARDNAME. SVar:DBPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ CHARGE | CounterNum$ 1 -A:AB$ Token | Cost$ 2 T SubCounter<1/CHARGE> | TokenAmount$ 1 | TokenScript$ c_3_3_a_golem | LegacyImage$ c 3 3 a golem nph | TokenOwner$ You | SpellDescription$ Create a 3/3 colorless Golem artifact creature token. -SVar:Picture:http://www.wizards.com/global/images/magic/general/conversion_chamber.jpg -Oracle:{2}, {T}: Exile target artifact card from a graveyard. Put a charge counter on Conversion Chamber.\n{2}, {T}, Remove a charge counter from Conversion Chamber: Create a 3/3 colorless Golem artifact creature token. +A:AB$ Token | Cost$ 2 T SubCounter<1/CHARGE> | TokenAmount$ 1 | TokenScript$ c_3_3_a_phyrexian_golem | TokenOwner$ You | SpellDescription$ Create a 3/3 colorless Phyrexian Golem artifact creature token. +Oracle:{2}, {T}: Exile target artifact card from a graveyard. Put a charge counter on Conversion Chamber.\n{2}, {T}, Remove a charge counter from Conversion Chamber: Create a 3/3 colorless Phyrexian Golem artifact creature token. diff --git a/forge-gui/res/cardsfolder/c/core_prowler.txt b/forge-gui/res/cardsfolder/c/core_prowler.txt index 72d8344a54a..79a81a09126 100644 --- a/forge-gui/res/cardsfolder/c/core_prowler.txt +++ b/forge-gui/res/cardsfolder/c/core_prowler.txt @@ -1,6 +1,6 @@ Name:Core Prowler ManaCost:4 -Types:Artifact Creature Horror +Types:Artifact Creature Phyrexian Horror PT:2/2 K:Infect T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigProliferate | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, proliferate. diff --git a/forge-gui/res/cardsfolder/c/corpse_cur.txt b/forge-gui/res/cardsfolder/c/corpse_cur.txt index 3e38f862a5d..ee7cefb9a5c 100644 --- a/forge-gui/res/cardsfolder/c/corpse_cur.txt +++ b/forge-gui/res/cardsfolder/c/corpse_cur.txt @@ -1,6 +1,6 @@ Name:Corpse Cur ManaCost:4 -Types:Artifact Creature Dog +Types:Artifact Creature Phyrexian Dog PT:2/2 K:Infect T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigReturn | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may return target creature card with infect from your graveyard to your hand. diff --git a/forge-gui/res/cardsfolder/c/corrupted_harvester.txt b/forge-gui/res/cardsfolder/c/corrupted_harvester.txt index 9618dd71424..f2568417f2a 100644 --- a/forge-gui/res/cardsfolder/c/corrupted_harvester.txt +++ b/forge-gui/res/cardsfolder/c/corrupted_harvester.txt @@ -1,6 +1,6 @@ Name:Corrupted Harvester ManaCost:4 B B -Types:Creature Horror +Types:Creature Phyrexian Horror PT:6/3 A:AB$ Regenerate | Cost$ B Sac<1/Creature> | SpellDescription$ Regenerate CARDNAME. SVar:AIPreferences:SacCost$Creature.token,Creature.cmcLE5+powerLE3+toughnessLE4 diff --git a/forge-gui/res/cardsfolder/c/crazed_skirge.txt b/forge-gui/res/cardsfolder/c/crazed_skirge.txt index f15d9588630..b6613b0fddd 100644 --- a/forge-gui/res/cardsfolder/c/crazed_skirge.txt +++ b/forge-gui/res/cardsfolder/c/crazed_skirge.txt @@ -1,6 +1,6 @@ Name:Crazed Skirge ManaCost:3 B -Types:Creature Imp +Types:Creature Phyrexian Imp PT:2/2 K:Flying K:Haste diff --git a/forge-gui/res/cardsfolder/c/cruel_entertainment.txt b/forge-gui/res/cardsfolder/c/cruel_entertainment.txt new file mode 100644 index 00000000000..390349a4664 --- /dev/null +++ b/forge-gui/res/cardsfolder/c/cruel_entertainment.txt @@ -0,0 +1,9 @@ +Name:Cruel Entertainment +ManaCost:6 B +Types:Sorcery +# Turn targeted player into chosen +A:SP$ ChoosePlayer | ValidTgts$ Player | TargetUnique$ True | Choices$ ThisTargetedPlayer | Defined$ You | SubAbility$ DBControlPlayer1 | StackDescription$ SpellDescription | SpellDescription$ Choose target player and another target player. The first player controls the second player during the second player's next turn, and the second player controls the first player during the first player's next turn. +SVar:DBControlPlayer1:DB$ ControlPlayer | ValidTgts$ Player | TargetUnique$ True | TgtPrompt$ Choose another target player | Controller$ Player.Chosen | SubAbility$ DBControlPlayer2 | StackDescription$ None +SVar:DBControlPlayer2:DB$ ControlPlayer | Defined$ Player.Chosen | Controller$ ParentTarget | StackDescription$ None +AI:RemoveDeck:All +Oracle:Choose target player and another target player. The first player controls the second player during the second player's next turn, and the second player controls the first player during the first player's next turn. diff --git a/forge-gui/res/cardsfolder/c/crypt_champion.txt b/forge-gui/res/cardsfolder/c/crypt_champion.txt index 27812dbc796..67ce5c9e9de 100644 --- a/forge-gui/res/cardsfolder/c/crypt_champion.txt +++ b/forge-gui/res/cardsfolder/c/crypt_champion.txt @@ -6,7 +6,7 @@ K:Double Strike T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME enters the battlefield, each player puts a creature card with mana value 3 or less from their graveyard onto the battlefield. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSac | ManaNotSpent$ R | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless {R} was spent to cast it. SVar:TrigChangeZone:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBChangeZone -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.RememberedPlayerCtrl+cmcLE3 | ChangeNum$ 1 | Hidden$ True | DefinedPlayer$ Player.IsRemembered | Chooser$ Player.IsRemembered +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.RememberedPlayerCtrl+cmcLE3 | ChangeNum$ 1 | Hidden$ True | DefinedPlayer$ Player.IsRemembered | Chooser$ Player.IsRemembered | Mandatory$ True SVar:TrigSac:DB$ Sacrifice | Defined$ Self SVar:ManaNeededToAvoidNegativeEffect:red SVar:Picture:http://www.wizards.com/global/images/magic/general/crypt_champion.jpg diff --git a/forge-gui/res/cardsfolder/c/cunning_giant.txt b/forge-gui/res/cardsfolder/c/cunning_giant.txt index f27f25a14c8..3ddf90eaf08 100644 --- a/forge-gui/res/cardsfolder/c/cunning_giant.txt +++ b/forge-gui/res/cardsfolder/c/cunning_giant.txt @@ -2,10 +2,6 @@ Name:Cunning Giant ManaCost:5 R Types:Creature Giant PT:4/4 -R:Event$ DamageDone | ValidTarget$ Player.attackedBySourceThisCombat | ValidSource$ Card.Self+unblocked | IsCombat$ True | ReplaceWith$ ChooseVictim | Optional$ True | OptionalDecider$ You | Description$ If CARDNAME is unblocked, you may have it assign its combat damage to a creature defending player controls. -R:Event$ DamageDone | ValidTarget$ Planeswalker.attackedBySourceThisCombat | ValidSource$ Card.Self+unblocked | IsCombat$ True | ReplaceWith$ ChooseVictim | Optional$ True | OptionalDecider$ You | Secondary$ True | Description$ If CARDNAME is unblocked, you may have it assign its combat damage to a creature defending player controls. -SVar:ChooseVictim:DB$ ChooseCard | ChoiceZone$ Battlefield | Choices$ Creature.DefenderCtrl | Amount$ 1 | ChoiceTitle$ Choose a card to deal the damage to | SubAbility$ CunningDmg -SVar:CunningDmg:DB$ ReplaceEffect | VarName$ Affected | VarValue$ ChosenCard | VarType$ Card +K:If CARDNAME is unblocked, you may have it assign its combat damage to a creature defending player controls. AI:RemoveDeck:All -SVar:Picture:http://www.wizards.com/global/images/magic/general/cunning_giant.jpg Oracle:If Cunning Giant is unblocked, you may have it assign its combat damage to a creature defending player controls. diff --git a/forge-gui/res/cardsfolder/c/curse_of_echoes.txt b/forge-gui/res/cardsfolder/c/curse_of_echoes.txt index 2b1b01ddba7..b56e1b30f92 100644 --- a/forge-gui/res/cardsfolder/c/curse_of_echoes.txt +++ b/forge-gui/res/cardsfolder/c/curse_of_echoes.txt @@ -3,9 +3,8 @@ ManaCost:4 U Types:Enchantment Aura Curse K:Enchant player A:SP$ Attach | Cost$ 4 U | ValidTgts$ Player | AILogic$ Curse -T:Mode$ SpellCast | ValidCard$ Instant,Sorcery | ValidActivatingPlayer$ Player.EnchantedBy | Execute$ TrigCopy | TriggerZones$ Battlefield | OptionalDecider$ TriggeredCardOpponent | TriggerDescription$ Whenever enchanted player casts an instant or sorcery spell, each other player may copy that spell and may choose new targets for the copy they control. -# TODO each player should copy it for multiplayer -SVar:TrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | Controller$ TriggeredCardOpponent | MayChooseTarget$ True +T:Mode$ SpellCast | ValidCard$ Instant,Sorcery | ValidActivatingPlayer$ Player.EnchantedBy | Execute$ TrigCopy | TriggerZones$ Battlefield | TriggerDescription$ Whenever enchanted player casts an instant or sorcery spell, each other player may copy that spell and may choose new targets for the copy they control. +SVar:TrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | Controller$ TriggeredCardOpponent | Optional$ True | MayChooseTarget$ True AI:RemoveDeck:All SVar:RemMultiplayer:True Oracle:Enchant player\nWhenever enchanted player casts an instant or sorcery spell, each other player may copy that spell and may choose new targets for the copy they control. diff --git a/forge-gui/res/cardsfolder/c/cystbearer.txt b/forge-gui/res/cardsfolder/c/cystbearer.txt index fc1443e8d9d..3b75c129522 100644 --- a/forge-gui/res/cardsfolder/c/cystbearer.txt +++ b/forge-gui/res/cardsfolder/c/cystbearer.txt @@ -1,6 +1,6 @@ Name:Cystbearer ManaCost:2 G -Types:Creature Beast +Types:Creature Phyrexian Beast PT:2/3 K:Infect SVar:Picture:http://www.wizards.com/global/images/magic/general/cystbearer.jpg diff --git a/forge-gui/res/cardsfolder/d/dakkon_shadow_slayer.txt b/forge-gui/res/cardsfolder/d/dakkon_shadow_slayer.txt index 45e6e4cc95c..d97c3703784 100644 --- a/forge-gui/res/cardsfolder/d/dakkon_shadow_slayer.txt +++ b/forge-gui/res/cardsfolder/d/dakkon_shadow_slayer.txt @@ -8,4 +8,4 @@ A:AB$ Surveil | Cost$ AddCounter<1/LOYALTY> | Amount$ 2 | Planeswalker$ True | S A:AB$ ChangeZone | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Exile target creature. A:AB$ ChangeZone | Cost$ SubCounter<6/LOYALTY> | Planeswalker$ True | Ultimate$ True | ChangeType$ Artifact.YouOwn | ChangeNum$ 1 | Origin$ Hand,Graveyard | Destination$ Battlefield | StackDescription$ SpellDescription | SpellDescription$ You may put an artifact card from your hand or graveyard onto the battlefield. DeckHints:Type$Artifact -Oracle:Dakkon, Shadow Slayer enters the battlefield with a number of loyalty counters on him equal to the number of lands you control.\n[+1]: Surveil 2.\n[−3]: Exile target creature.\n[-6]: You may put an artifact card from your hand or graveyard onto the battlefield. +Oracle:Dakkon, Shadow Slayer enters the battlefield with a number of loyalty counters on him equal to the number of lands you control.\n[+1]: Surveil 2.\n[−3]: Exile target creature.\n[−6]: You may put an artifact card from your hand or graveyard onto the battlefield. diff --git a/forge-gui/res/cardsfolder/d/darkslick_drake.txt b/forge-gui/res/cardsfolder/d/darkslick_drake.txt index 2d98d8f030c..21fcf8ce2f8 100644 --- a/forge-gui/res/cardsfolder/d/darkslick_drake.txt +++ b/forge-gui/res/cardsfolder/d/darkslick_drake.txt @@ -1,6 +1,6 @@ Name:Darkslick Drake ManaCost:2 U U -Types:Creature Drake +Types:Creature Phyrexian Drake PT:2/4 K:Flying T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, draw a card. diff --git a/forge-gui/res/cardsfolder/d/dauthi_voidwalker.txt b/forge-gui/res/cardsfolder/d/dauthi_voidwalker.txt index b31f71e1e2d..6f5433e98ea 100644 --- a/forge-gui/res/cardsfolder/d/dauthi_voidwalker.txt +++ b/forge-gui/res/cardsfolder/d/dauthi_voidwalker.txt @@ -6,8 +6,8 @@ K:Shadow R:Event$ Moved | ActiveZones$ Battlefield | Destination$ Graveyard | ValidCard$ Card.nonToken+OppOwn | ReplaceWith$ Exile | Description$ If a card would be put into an opponent's graveyard from anywhere, instead exile it with a void counter on it. SVar:Exile:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Exile | Defined$ ReplacedCard | SubAbility$ DBPutCounter SVar:DBPutCounter:DB$ PutCounter | Defined$ ReplacedCard | CounterType$ VOID | CounterNum$ 1 -A:AB$ ChooseCard | Cost$ T Sac<1/CARDNAME> | Defined$ You | Amount$ 1 | Mandatory$ True | ChoiceTitle$ Choose an exiled card an opponent owns with a void counter on it | Choices$ Card.OppOwn+counters_GE1_VOID | ChoiceZone$ Exile | RememberChosen$ True | SubAbility$ DBEffect | SpellDescription$ Choose an exiled card an opponent owns with a void counter on it. You may play it this turn without paying its mana cost. +A:AB$ ChooseCard | Cost$ T Sac<1/CARDNAME> | Defined$ You | AILogic$ AtLeast1 | Amount$ 1 | Mandatory$ True | ChoiceTitle$ Choose an exiled card an opponent owns with a void counter on it | Choices$ Card.OppOwn+counters_GE1_VOID | ChoiceZone$ Exile | RememberChosen$ True | SubAbility$ DBEffect | SpellDescription$ Choose an exiled card an opponent owns with a void counter on it. You may play it this turn without paying its mana cost. SVar:DBEffect:DB$ Effect | StaticAbilities$ MayPlay | RememberObjects$ Remembered | ForgetOnMoved$ Exile | SubAbility$ DBCleanup SVar:MayPlay:Mode$ Continuous | MayPlay$ True | MayPlayWithoutManaCost$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ Until end of turn, you may play this card without paying its mana cost. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -Oracle:Shadow (This creature can block or be blocked by only creatures with shadow.)\nIf a card would be put into an opponent’s graveyard from anywhere, instead exile it with a void counter on it.\n{T}, Sacrifice Dauthi Voidwalker: Choose an exiled card an opponent owns with a void counter on it. You may play it this turn without paying its mana cost. +Oracle:Shadow (This creature can block or be blocked by only creatures with shadow.)\nIf a card would be put into an opponent's graveyard from anywhere, instead exile it with a void counter on it.\n{T}, Sacrifice Dauthi Voidwalker: Choose an exiled card an opponent owns with a void counter on it. You may play it this turn without paying its mana cost. diff --git a/forge-gui/res/cardsfolder/d/dearly_departed.txt b/forge-gui/res/cardsfolder/d/dearly_departed.txt index db7322a2bf7..4586d4bee2b 100644 --- a/forge-gui/res/cardsfolder/d/dearly_departed.txt +++ b/forge-gui/res/cardsfolder/d/dearly_departed.txt @@ -3,7 +3,7 @@ ManaCost:4 W W Types:Creature Spirit PT:5/5 K:Flying -K:ETBReplacement:Other:AddExtraCounter:Mandatory:Battlefield:Creature.Human+YouCtrl +K:ETBReplacement:Other:AddExtraCounter:Mandatory:Graveyard:Creature.Human+YouCtrl SVar:AddExtraCounter:DB$ PutCounter | ETB$ True | Defined$ ReplacedCard | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ As long as CARDNAME is in your graveyard, each Human creature you control enters the battlefield with an additional +1/+1 counter on it. DeckNeeds:Type$Human DeckHas:Ability$Counters diff --git a/forge-gui/res/cardsfolder/d/death_hood_cobra.txt b/forge-gui/res/cardsfolder/d/death_hood_cobra.txt index e3971136e29..c8ac87ed957 100644 --- a/forge-gui/res/cardsfolder/d/death_hood_cobra.txt +++ b/forge-gui/res/cardsfolder/d/death_hood_cobra.txt @@ -1,6 +1,6 @@ Name:Death-Hood Cobra ManaCost:1 G -Types:Creature Snake +Types:Creature Phyrexian Snake PT:2/2 A:AB$ Pump | Cost$ 1 G | Defined$ Self | KW$ Reach | SpellDescription$ CARDNAME gains reach until end of turn. A:AB$ Pump | Cost$ 1 G | Defined$ Self | KW$ Deathtouch | SpellDescription$ CARDNAME gains deathtouch until end of turn. diff --git a/forge-gui/res/cardsfolder/d/deathmist_raptor.txt b/forge-gui/res/cardsfolder/d/deathmist_raptor.txt index 8627a95fc6b..c90b851af75 100644 --- a/forge-gui/res/cardsfolder/d/deathmist_raptor.txt +++ b/forge-gui/res/cardsfolder/d/deathmist_raptor.txt @@ -1,6 +1,6 @@ Name:Deathmist Raptor ManaCost:1 G G -Types:Creature Dinosaur +Types:Creature Dinosaur Beast PT:3/3 K:Deathtouch K:Megamorph:4 G diff --git a/forge-gui/res/cardsfolder/d/deceiver_exarch.txt b/forge-gui/res/cardsfolder/d/deceiver_exarch.txt index 7c54cd7bd65..438af37733e 100644 --- a/forge-gui/res/cardsfolder/d/deceiver_exarch.txt +++ b/forge-gui/res/cardsfolder/d/deceiver_exarch.txt @@ -1,6 +1,6 @@ Name:Deceiver Exarch ManaCost:2 U -Types:Creature Cleric +Types:Creature Phyrexian Cleric PT:1/4 K:Flash T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigCharm | TriggerDescription$ When CARDNAME enters the battlefield, ABILITY diff --git a/forge-gui/res/cardsfolder/d/dementia_bat.txt b/forge-gui/res/cardsfolder/d/dementia_bat.txt index f8c421d56b9..215d455fe15 100644 --- a/forge-gui/res/cardsfolder/d/dementia_bat.txt +++ b/forge-gui/res/cardsfolder/d/dementia_bat.txt @@ -1,6 +1,6 @@ Name:Dementia Bat ManaCost:4 B -Types:Creature Bat +Types:Creature Phyrexian Bat PT:2/2 K:Flying A:AB$ Discard | Cost$ Sac<1/CARDNAME> 4 B | ValidTgts$ Player | NumCards$ 2 | Mode$ TgtChoose | SpellDescription$ Target player discards two cards. diff --git a/forge-gui/res/cardsfolder/d/demonlord_belzenlok.txt b/forge-gui/res/cardsfolder/d/demonlord_belzenlok.txt index 51b194ba290..95d7885e422 100644 --- a/forge-gui/res/cardsfolder/d/demonlord_belzenlok.txt +++ b/forge-gui/res/cardsfolder/d/demonlord_belzenlok.txt @@ -1,6 +1,6 @@ Name:Demonlord Belzenlok ManaCost:4 B B -Types:Legendary Creature Demon +Types:Legendary Creature Elder Demon PT:6/6 K:Flying K:Trample diff --git a/forge-gui/res/cardsfolder/d/dermotaxi.txt b/forge-gui/res/cardsfolder/d/dermotaxi.txt index 103cf04837c..a619cf6c382 100644 --- a/forge-gui/res/cardsfolder/d/dermotaxi.txt +++ b/forge-gui/res/cardsfolder/d/dermotaxi.txt @@ -4,6 +4,6 @@ Types:Artifact Vehicle PT:0/0 K:ETBReplacement:Other:Imprint SVar:Imprint:DB$ ChangeZone | Imprint$ True | ChangeType$ Creature | ChangeNum$ 1 | Origin$ Graveyard | Destination$ Exile | Mandatory$ True | Hidden$ True | Chooser$ You | SpellDescription$ Imprint - As CARDNAME enters the battlefield, exile a creature card from a graveyard. -A:AB$ Clone | Cost$ tapXType<2/Creature> | Defined$ Imprinted | Duration$ UntilEndOfTurn | AddTypes$ Vehicle & Artifact | StackDescription$ Until end of turn, CARDNAME becomes a copy of {c:Imprinted}, except it’s a Vehicle artifact in addition to its other types. | SpellDescription$ Until end of turn, CARDNAME becomes a copy of the imprinted card, except it’s a Vehicle artifact in addition to its other types. +A:AB$ Clone | Cost$ tapXType<2/Creature> | Defined$ Imprinted | Duration$ UntilEndOfTurn | ImprintRememberedNoCleanup$ True | AddTypes$ Vehicle & Artifact | StackDescription$ Until end of turn, CARDNAME becomes a copy of {c:Imprinted}, except it’s a Vehicle artifact in addition to its other types. | SpellDescription$ Until end of turn, CARDNAME becomes a copy of the imprinted card, except it's a Vehicle artifact in addition to its other types. SVar:NeedsToPlay:Creature.inZoneGraveyard -Oracle:Imprint — As Dermotaxi enters the battlefield, exile a creature card from a graveyard.\nTap two untapped creatures you control: Until end of turn, Dermotaxi becomes a copy of the imprinted card, except it’s a Vehicle artifact in addition to its other types. +Oracle:Imprint — As Dermotaxi enters the battlefield, exile a creature card from a graveyard.\nTap two untapped creatures you control: Until end of turn, Dermotaxi becomes a copy of the imprinted card, except it's a Vehicle artifact in addition to its other types. diff --git a/forge-gui/res/cardsfolder/d/devouring_strossus.txt b/forge-gui/res/cardsfolder/d/devouring_strossus.txt index f33047ca2f9..e69838808bc 100644 --- a/forge-gui/res/cardsfolder/d/devouring_strossus.txt +++ b/forge-gui/res/cardsfolder/d/devouring_strossus.txt @@ -1,6 +1,6 @@ Name:Devouring Strossus ManaCost:5 B B B -Types:Creature Horror +Types:Creature Phyrexian Horror PT:9/9 K:Flying K:Trample diff --git a/forge-gui/res/cardsfolder/d/diamond_lion.txt b/forge-gui/res/cardsfolder/d/diamond_lion.txt index 3fb036b5e1f..51620f9cf50 100644 --- a/forge-gui/res/cardsfolder/d/diamond_lion.txt +++ b/forge-gui/res/cardsfolder/d/diamond_lion.txt @@ -1,6 +1,6 @@ Name:Diamond Lion ManaCost:2 -Types:Artifact Creature Lion +Types:Artifact Creature Cat PT:2/2 A:AB$ Mana | Cost$ T Discard<0/Hand> Sac<1/CARDNAME> | Produced$ Any | Amount$ 3 | InstantSpeed$ True | SpellDescription$ Add three mana of any one color. Activate only as an instant. AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/d/dream_strix.txt b/forge-gui/res/cardsfolder/d/dream_strix.txt index b677b9d5062..080a792b01f 100644 --- a/forge-gui/res/cardsfolder/d/dream_strix.txt +++ b/forge-gui/res/cardsfolder/d/dream_strix.txt @@ -1,6 +1,6 @@ Name:Dream Strix ManaCost:2 U -Types:Creature Bird Ilusion +Types:Creature Bird Illusion PT:3/2 K:Flying T:Mode$ BecomesTarget | ValidTarget$ Card.Self | SourceType$ Spell | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When CARDNAME becomes the target of a spell, sacrifice it. diff --git a/forge-gui/res/cardsfolder/d/dress_down.txt b/forge-gui/res/cardsfolder/d/dress_down.txt index 859adf7117e..51daa9ae4df 100644 --- a/forge-gui/res/cardsfolder/d/dress_down.txt +++ b/forge-gui/res/cardsfolder/d/dress_down.txt @@ -4,10 +4,10 @@ Types:Enchantment K:Flash T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw a card. SVar:TrigDraw:DB$Draw | Defined$ You | NumCards$ 1 -S:Mode$ Continuous | Affected$ Creature | RemoveAllAbilities$ True | Description$ All creatures lose all abilities. +S:Mode$ Continuous | Affected$ Creature | RemoveAllAbilities$ True | Description$ Creatures lose all abilities. T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ At the beginning of the end step, sacrifice CARDNAME. SVar:TrigSac:DB$ Sacrifice | SacValid$ Self SVar:EndOfTurnLeavePlay:True AI:RemoveDeck:Random DeckHas:Ability$Sacrifice -Oracle:Flash\nWhen Dress Down enters the battlefield, draw a card.\nAll creatures lose all abilities.\nAt the beginning of the end step, sacrifice Dress Down. +Oracle:Flash\nWhen Dress Down enters the battlefield, draw a card.\nCreatures lose all abilities.\nAt the beginning of the end step, sacrifice Dress Down. diff --git a/forge-gui/res/cardsfolder/d/dross_hopper.txt b/forge-gui/res/cardsfolder/d/dross_hopper.txt index 6fa8d6e77ac..db86cf9aab3 100644 --- a/forge-gui/res/cardsfolder/d/dross_hopper.txt +++ b/forge-gui/res/cardsfolder/d/dross_hopper.txt @@ -1,6 +1,6 @@ Name:Dross Hopper ManaCost:1 B -Types:Creature Insect Horror +Types:Creature Phyrexian Insect Horror PT:2/1 A:AB$ Pump | Cost$ Sac<1/Creature> | Defined$ Self | KW$ Flying | SpellDescription$ CARDNAME gains flying until end of turn. SVar:Picture:http://www.wizards.com/global/images/magic/general/dross_hopper.jpg diff --git a/forge-gui/res/cardsfolder/d/dross_ripper.txt b/forge-gui/res/cardsfolder/d/dross_ripper.txt index 973cd32bb6e..f7d92a67788 100644 --- a/forge-gui/res/cardsfolder/d/dross_ripper.txt +++ b/forge-gui/res/cardsfolder/d/dross_ripper.txt @@ -1,6 +1,6 @@ Name:Dross Ripper ManaCost:4 -Types:Artifact Creature Dog +Types:Artifact Creature Phyrexian Dog PT:3/3 A:AB$ Pump | Cost$ 2 B | Defined$ Self | NumAtt$ +1 | NumDef$ +1 | SpellDescription$ CARDNAME gets +1/+1 until end of turn. Oracle:{2}{B}: Dross Ripper gets +1/+1 until end of turn. diff --git a/forge-gui/res/cardsfolder/d/dungeon_master.txt b/forge-gui/res/cardsfolder/d/dungeon_master.txt index 1510b67fa0c..6c2c694614b 100644 --- a/forge-gui/res/cardsfolder/d/dungeon_master.txt +++ b/forge-gui/res/cardsfolder/d/dungeon_master.txt @@ -1,6 +1,6 @@ Name:Dungeon Master ManaCost:2 W U -Types:Legendary Planeswalker Dungeon-Master +Types:Legendary Planeswalker Dungeon Master Loyalty:1 K:ETBReplacement:Other:RollLoyal SVar:RollLoyal:DB$ RollDice | Sides$ 4 | ResultSVar$ Result | SubAbility$ DBLoyalty | SpellDescription$ Add 1d4 loyalty counters to CARDNAME diff --git a/forge-gui/res/cardsfolder/e/earl_of_squirrel.txt b/forge-gui/res/cardsfolder/e/earl_of_squirrel.txt index 503fce937c2..698eb8c3ed7 100644 --- a/forge-gui/res/cardsfolder/e/earl_of_squirrel.txt +++ b/forge-gui/res/cardsfolder/e/earl_of_squirrel.txt @@ -1,6 +1,6 @@ Name:Earl of Squirrel ManaCost:4 G G -Types:Creature Squirrel Advisor +Types:Creature Squirrel Noble Advisor S:Mode$ Continuous | EffectZone$ Battlefield | Affected$ Creature.token+YouCtrl | AddType$ Squirrel | Description$ Creature tokens you control are Squirrels in addition to their other creature types. S:Mode$ Continuous | EffectZone$ Battlefield | Affected$ Squirrel.Other+YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Other Squirrels you control get +1/+1. T:Mode$ DamageDone | ValidSource$ Card.Self | Execute$ TrigToken | TriggerZones$ Battlefield | Static$ True | TriggerDescription$ Squirrellink (Damage dealt by this creature also causes you to create that many 1/1 green Squirrel creature tokens.) diff --git a/forge-gui/res/cardsfolder/e/eastern_paladin.txt b/forge-gui/res/cardsfolder/e/eastern_paladin.txt index 57709a3dc30..e1a483da34c 100644 --- a/forge-gui/res/cardsfolder/e/eastern_paladin.txt +++ b/forge-gui/res/cardsfolder/e/eastern_paladin.txt @@ -1,6 +1,6 @@ Name:Eastern Paladin ManaCost:2 B B -Types:Creature Zombie Knight +Types:Creature Phyrexian Zombie Knight PT:3/3 A:AB$ Destroy | Cost$ B B T | ValidTgts$ Creature.Green | TgtPrompt$ Select target green creature | SpellDescription$ Destroy target green creature. AI:RemoveDeck:Random diff --git a/forge-gui/res/cardsfolder/e/elesh_norn_grand_cenobite.txt b/forge-gui/res/cardsfolder/e/elesh_norn_grand_cenobite.txt index 61d1b50e67c..d8c684be9aa 100644 --- a/forge-gui/res/cardsfolder/e/elesh_norn_grand_cenobite.txt +++ b/forge-gui/res/cardsfolder/e/elesh_norn_grand_cenobite.txt @@ -1,6 +1,6 @@ Name:Elesh Norn, Grand Cenobite ManaCost:5 W W -Types:Legendary Creature Praetor +Types:Legendary Creature Phyrexian Praetor PT:4/7 K:Vigilance S:Mode$ Continuous | Affected$ Creature.YouCtrl+Other | AddPower$ 2 | AddToughness$ 2 | Description$ Other creatures you control get +2/+2. diff --git a/forge-gui/res/cardsfolder/e/elvish_impersonators.txt b/forge-gui/res/cardsfolder/e/elvish_impersonators.txt index 41c131b13e4..2b683ba15ac 100644 --- a/forge-gui/res/cardsfolder/e/elvish_impersonators.txt +++ b/forge-gui/res/cardsfolder/e/elvish_impersonators.txt @@ -1,6 +1,6 @@ Name:Elvish Impersonators ManaCost:3 G -Types:Creature Elf +Types:Creature Elves PT:*/* K:Flying K:ETBReplacement:Other:TrigRoll diff --git a/forge-gui/res/cardsfolder/e/endurance.txt b/forge-gui/res/cardsfolder/e/endurance.txt index 3aaed429e41..3218615b437 100644 --- a/forge-gui/res/cardsfolder/e/endurance.txt +++ b/forge-gui/res/cardsfolder/e/endurance.txt @@ -6,5 +6,5 @@ K:Flash K:Reach K:Evoke:ExileFromHand<1/Card.Green+Other> T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigBottom | TriggerDescription$ When CARDNAME enters the battlefield, up to one target player puts all the cards from their graveyard on the bottom of their library in a random order. -SVar:TrigBottom:DB$ ChangeZoneAll | ValidTgts$ Player | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target player | ChangeType$ Card | Origin$ Graveyard | Destination$ Library | Reveal$ False | RandomOrder$ True -Oracle:Flash\nReach\nWhen Endurance enters the battlefield, up to one target player puts all the cards from their graveyard on the bottom of their library in a random order.\nEvoke — Exile a green card from your hand. +SVar:TrigBottom:DB$ ChangeZoneAll | ValidTgts$ Player | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target player | ChangeType$ Card | Origin$ Graveyard | Destination$ Library | LibraryPosition$ -1 | Reveal$ False | RandomOrder$ True +Oracle:Flash\nReach\nWhen Endurance enters the battlefield, up to one target player puts all the cards from their graveyard on the bottom of their library in a random order.\nEvoke—Exile a green card from your hand. diff --git a/forge-gui/res/cardsfolder/e/entomber_exarch.txt b/forge-gui/res/cardsfolder/e/entomber_exarch.txt index 84bf231e77b..864f26906f9 100644 --- a/forge-gui/res/cardsfolder/e/entomber_exarch.txt +++ b/forge-gui/res/cardsfolder/e/entomber_exarch.txt @@ -1,6 +1,6 @@ Name:Entomber Exarch ManaCost:2 B B -Types:Creature Cleric +Types:Creature Phyrexian Cleric PT:2/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigCharm | TriggerDescription$ When CARDNAME enters the battlefield, ABILITY SVar:TrigCharm:DB$ Charm | Choices$ DBSearch,DBRemove diff --git a/forge-gui/res/cardsfolder/e/ertai_the_corrupted.txt b/forge-gui/res/cardsfolder/e/ertai_the_corrupted.txt index 81c353c34d0..238bcb2409f 100644 --- a/forge-gui/res/cardsfolder/e/ertai_the_corrupted.txt +++ b/forge-gui/res/cardsfolder/e/ertai_the_corrupted.txt @@ -1,6 +1,6 @@ Name:Ertai, the Corrupted ManaCost:2 W U B -Types:Legendary Creature Human Wizard +Types:Legendary Creature Phyrexian Human Wizard PT:3/4 A:AB$ Counter | Cost$ U T Sac<1/Creature;Enchantment/creature or enchantment> | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | SpellDescription$ Counter target spell. AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/e/etched_monstrosity.txt b/forge-gui/res/cardsfolder/e/etched_monstrosity.txt index 90cb4942bc6..8ea4a5050e7 100644 --- a/forge-gui/res/cardsfolder/e/etched_monstrosity.txt +++ b/forge-gui/res/cardsfolder/e/etched_monstrosity.txt @@ -1,6 +1,6 @@ Name:Etched Monstrosity ManaCost:5 -Types:Artifact Creature Golem +Types:Artifact Creature Phyrexian Golem PT:10/10 K:etbCounter:M1M1:5 A:AB$ Draw | Cost$ W U B R G SubCounter<5/M1M1> | ValidTgts$ Player | TgtPrompt$ Select a player | NumCards$ 3 | SpellDescription$ Target player draws three cards. diff --git a/forge-gui/res/cardsfolder/e/etchings_of_the_chosen.txt b/forge-gui/res/cardsfolder/e/etchings_of_the_chosen.txt index 1da44289997..d0e7787aa28 100644 --- a/forge-gui/res/cardsfolder/e/etchings_of_the_chosen.txt +++ b/forge-gui/res/cardsfolder/e/etchings_of_the_chosen.txt @@ -7,5 +7,6 @@ S:Mode$ Continuous | Affected$ Creature.ChosenType+YouCtrl | AddPower$ 1 | AddTo AI:RemoveDeck:Random SVar:PlayMain1:TRUE SVar:AIPreference:SacCost$Creature.ChosenType+Other +SVar:AIPreferenceParams:CreatureEvalThreshold$ Targeted/Plus.10 A:AB$ Pump | Cost$ 1 Sac<1/Creature.ChosenType/creature of the chosen type> | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | KW$ Indestructible | SpellDescription$ Target creature you control gains indestructible until end of turn. Oracle:As Etchings of the Chosen enters the battlefield, choose a creature type.\nCreatures you control of the chosen type get +1/+1.\n{1}, Sacrifice a creature of the chosen type: Target creature you control gains indestructible until end of turn. diff --git a/forge-gui/res/cardsfolder/e/ethersworn_sphinx.txt b/forge-gui/res/cardsfolder/e/ethersworn_sphinx.txt index 69bdb1465ec..59b41ea04db 100644 --- a/forge-gui/res/cardsfolder/e/ethersworn_sphinx.txt +++ b/forge-gui/res/cardsfolder/e/ethersworn_sphinx.txt @@ -6,4 +6,4 @@ K:Affinity:Artifact K:Flying K:Cascade DeckNeeds:Type$Artifact -Oracle:Affinity for artifacts (This spell costs {1} less to cast for each artifact you control.)\nFlying\nCascade (When you cast this spell, exile cards from the top of your library until you exile a nonland card with lesser mana value. You may cast it without paying its mana cost. Put the exiled cards on the bottom of your library in a random order.) +Oracle:Affinity for artifacts (This spell costs {1} less to cast for each artifact you control.)\nFlying\nCascade (When you cast this spell, exile cards from the top of your library until you exile a nonland card that costs less. You may cast it without paying its mana cost. Put the exiled cards on the bottom of your library in a random order.) diff --git a/forge-gui/res/cardsfolder/e/eviscerator.txt b/forge-gui/res/cardsfolder/e/eviscerator.txt index 1bb58e5fc16..a0dbd9babb7 100644 --- a/forge-gui/res/cardsfolder/e/eviscerator.txt +++ b/forge-gui/res/cardsfolder/e/eviscerator.txt @@ -1,6 +1,6 @@ Name:Eviscerator ManaCost:3 B B -Types:Creature Horror +Types:Creature Phyrexian Horror PT:5/5 K:Protection from white T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigLoseLife | TriggerDescription$ When CARDNAME enters the battlefield, you lose 5 life. diff --git a/forge-gui/res/cardsfolder/e/evra_halcyon_witness.txt b/forge-gui/res/cardsfolder/e/evra_halcyon_witness.txt index 24e84ff1104..812274edf73 100644 --- a/forge-gui/res/cardsfolder/e/evra_halcyon_witness.txt +++ b/forge-gui/res/cardsfolder/e/evra_halcyon_witness.txt @@ -1,6 +1,6 @@ Name:Evra, Halcyon Witness ManaCost:4 W W -Types:Legendary Creature Creature Avatar +Types:Legendary Creature Avatar PT:4/4 K:Lifelink A:AB$ ExchangeLifeVariant | Cost$ 4 | ConditionPresent$ Creature.StrictlySelf | Defined$ You | Mode$ Power | SpellDescription$ Exchange your life total with CARDNAME's power. diff --git a/forge-gui/res/cardsfolder/e/exhume.txt b/forge-gui/res/cardsfolder/e/exhume.txt index 1cb43db32b8..eb8a9202200 100644 --- a/forge-gui/res/cardsfolder/e/exhume.txt +++ b/forge-gui/res/cardsfolder/e/exhume.txt @@ -2,7 +2,7 @@ Name:Exhume ManaCost:1 B Types:Sorcery A:SP$ RepeatEach | Cost$ 1 B | RepeatSubAbility$ DBChangeZone | RepeatPlayers$ Player | SpellDescription$ Each player puts a creature card from their graveyard onto the battlefield. -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.RememberedPlayerCtrl | DefinedPlayer$ Player.IsRemembered | Chooser$ Player.IsRemembered | ChangeNum$ 1 | Hidden$ True +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.RememberedPlayerCtrl | DefinedPlayer$ Player.IsRemembered | Chooser$ Player.IsRemembered | ChangeNum$ 1 | Hidden$ True | Mandatory$ True SVar:X:Count$TypeInYourYard.Creature SVar:NeedsToPlayVar:X GE1 SVar:Picture:http://www.wizards.com/global/images/magic/general/exhume.jpg diff --git a/forge-gui/res/cardsfolder/e/ezuri_claw_of_progress.txt b/forge-gui/res/cardsfolder/e/ezuri_claw_of_progress.txt index 2a764672d8b..b11d87fc345 100644 --- a/forge-gui/res/cardsfolder/e/ezuri_claw_of_progress.txt +++ b/forge-gui/res/cardsfolder/e/ezuri_claw_of_progress.txt @@ -1,6 +1,6 @@ Name:Ezuri, Claw of Progress ManaCost:2 G U -Types:Legendary Creature Elf Warrior +Types:Legendary Creature Phyrexian Elf Warrior PT:3/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.powerLE2+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever a creature with power 2 or less enters the battlefield under your control, you get an experience counter. SVar:TrigPutCounter:DB$ PutCounter | Defined$ You | CounterType$ Experience | CounterNum$ 1 @@ -9,4 +9,4 @@ SVar:TrigPutCounter2:DB$ PutCounter | ValidTgts$ Creature.Other+YouCtrl | TgtPro SVar:X:Count$YourCountersExperience SVar:BuffedBy:Creature.powerLE2 SVar:Picture:http://www.wizards.com/global/images/magic/general/ezuri_claw_of_progress.jpg -Oracle:Whenever a creature with power 2 or less enters the battlefield under your control, you get an experience counter.\nAt the beginning of combat on your turn, put X +1/+1 counters on another target creature you control, where X is the number of experience counters you have. \ No newline at end of file +Oracle:Whenever a creature with power 2 or less enters the battlefield under your control, you get an experience counter.\nAt the beginning of combat on your turn, put X +1/+1 counters on another target creature you control, where X is the number of experience counters you have. diff --git a/forge-gui/res/cardsfolder/e/ezuris_predation.txt b/forge-gui/res/cardsfolder/e/ezuris_predation.txt index 6a1cdbb4dc5..dd2210df86d 100644 --- a/forge-gui/res/cardsfolder/e/ezuris_predation.txt +++ b/forge-gui/res/cardsfolder/e/ezuris_predation.txt @@ -1,11 +1,10 @@ Name:Ezuri's Predation ManaCost:5 G G G Types:Sorcery -A:SP$ RepeatEach | Cost$ 5 G G G | RepeatCards$ Creature.OppCtrl | UseImprinted$ True | RepeatSubAbility$ DBToken | ChangeZoneTable$ True | SubAbility$ DBCleanup2 | SpellDescription$ For each creature your opponents control, create a 4/4 green Beast creature token. Each of those Beasts fights a different one of those creatures. -SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ g_4_4_beast | TokenOwner$ You | LegacyImage$ g 4 4 beast c15 | RememberTokens$ True | SubAbility$ DBFight +A:SP$ RepeatEach | Cost$ 5 G G G | RepeatCards$ Creature.OppCtrl | UseImprinted$ True | RepeatSubAbility$ DBToken | ChangeZoneTable$ True | SubAbility$ DBCleanup2 | SpellDescription$ For each creature your opponents control, create a 4/4 green Phyrexian Beast creature token. Each of those Beasts fights a different one of those creatures. +SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ g_4_4_phyrexian_beast | TokenOwner$ You | RememberTokens$ True | SubAbility$ DBFight SVar:DBFight:DB$ Fight | Defined$ Imprinted | ExtraDefined$ Remembered | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:DBCleanup2:DB$ Cleanup | ClearImprinted$ True SVar:NeedsToPlay:Creature.OppCtrl+inZoneBattlefield+powerLE3 -SVar:Picture:http://www.wizards.com/global/images/magic/general/ezuris_predation.jpg -Oracle:For each creature your opponents control, create a 4/4 green Beast creature token. Each of those Beasts fights a different one of those creatures. +Oracle:For each creature your opponents control, create a 4/4 green Phyrexian Beast creature token. Each of those Beasts fights a different one of those creatures. diff --git a/forge-gui/res/cardsfolder/f/fae_offering.txt b/forge-gui/res/cardsfolder/f/fae_offering.txt index feade557e79..48e49343f63 100644 --- a/forge-gui/res/cardsfolder/f/fae_offering.txt +++ b/forge-gui/res/cardsfolder/f/fae_offering.txt @@ -1,7 +1,7 @@ Name:Fae Offering ManaCost:2 G Types:Enchantment -T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | CheckSVar$ Z | SVarCompare$ GE2 | Execute$ TrigTokenClue | TriggerDescription$ At the beginning of each end step, if you cast a creature and non-creature spell this turn, create a Clue token, a Food token, and a Treasure token. +T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | CheckSVar$ Z | SVarCompare$ GE2 | Execute$ TrigTokenClue | TriggerDescription$ At the beginning of each end step, if you've cast both a creature spell and a noncreature spell this turn, create a Clue token, a Food token, and a Treasure token. SVar:TrigTokenClue:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_clue_draw | TokenOwner$ You | SubAbility$ TrigTokenFood SVar:TrigTokenFood:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_food_sac | TokenOwner$ You | SubAbility$ TrigTokenTreasure SVar:TrigTokenTreasure:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_treasure_sac | TokenOwner$ You @@ -9,4 +9,4 @@ SVar:X:Count$ThisTurnCast_Creature.YouCtrl/LimitMax.1 SVar:Y:Count$ThisTurnCast_Card.nonCreature+YouCtrl/LimitMax.1 SVar:Z:SVar$X/Plus.Y DeckHas:Ability$Token -Oracle:At the beginning of each end step, if you cast a creature and non-creature spell this turn, create a Clue token, a Food token, and a Treasure token. +Oracle:At the beginning of each end step, if you've cast both a creature spell and a noncreature spell this turn, create a Clue token, a Food token, and a Treasure token. diff --git a/forge-gui/res/cardsfolder/f/fallen_ferromancer.txt b/forge-gui/res/cardsfolder/f/fallen_ferromancer.txt index 04fe69497a3..567b49575cb 100644 --- a/forge-gui/res/cardsfolder/f/fallen_ferromancer.txt +++ b/forge-gui/res/cardsfolder/f/fallen_ferromancer.txt @@ -1,6 +1,6 @@ Name:Fallen Ferromancer ManaCost:3 R -Types:Creature Human Shaman +Types:Creature Phyrexian Human Shaman PT:1/1 K:Infect A:AB$ DealDamage | Cost$ 1 R T | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 1 | SpellDescription$ CARDNAME deals 1 damage to any target. diff --git a/forge-gui/res/cardsfolder/f/farrels_mantle.txt b/forge-gui/res/cardsfolder/f/farrels_mantle.txt index d4124f7b917..6b1446e7c8b 100644 --- a/forge-gui/res/cardsfolder/f/farrels_mantle.txt +++ b/forge-gui/res/cardsfolder/f/farrels_mantle.txt @@ -5,7 +5,6 @@ K:Enchant creature A:SP$ Attach | Cost$ 2 W | ValidTgts$ Creature | TgtPrompt$ Select target creature | AILogic$ Pump T:Mode$ AttackerUnblocked | ValidCard$ Creature.EnchantedBy | Execute$ FarrelDmg | TriggerController$ EnchantedController | OptionalDecider$ EnchantedController | TriggerDescription$ Whenever enchanted creature attacks and isn't blocked, its controller may have it deal damage equal to its power plus 2 to another target creature. If that player does, the attacking creature assigns no combat damage this turn. SVar:FarrelDmg:DB$ DealDamage | ValidTgts$ Creature.NotEnchantedBy | TgtPrompt$ Select another target creature | NumDmg$ FarrelX | DamageSource$ Enchanted | SubAbility$ FarrelPump -SVar:FarrelPump:DB$ Pump | Defined$ Enchanted | KW$ Prevent all combat damage that would be dealt by CARDNAME. +SVar:FarrelPump:DB$ Pump | Defined$ Enchanted | KW$ HIDDEN CARDNAME assigns no combat damage SVar:FarrelX:TriggeredAttacker$CardPower/Plus.2 -SVar:Picture:http://www.wizards.com/global/images/magic/general/farrels_mantle.jpg Oracle:Enchant creature\nWhenever enchanted creature attacks and isn't blocked, its controller may have it deal damage equal to its power plus 2 to another target creature. If that player does, the attacking creature assigns no combat damage this turn. diff --git a/forge-gui/res/cardsfolder/f/first_sphere_gargantua.txt b/forge-gui/res/cardsfolder/f/first_sphere_gargantua.txt index 112ba5ab554..fe5b78dcaeb 100644 --- a/forge-gui/res/cardsfolder/f/first_sphere_gargantua.txt +++ b/forge-gui/res/cardsfolder/f/first_sphere_gargantua.txt @@ -1,6 +1,6 @@ Name:First-Sphere Gargantua ManaCost:4 B B -Types:Creature Horror +Types:Creature Phyrexian Horror PT:5/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, you draw a card and you lose 1 life. SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 | SubAbility$ DBLoseLife diff --git a/forge-gui/res/cardsfolder/f/flameborn_viron.txt b/forge-gui/res/cardsfolder/f/flameborn_viron.txt index 2d41b2b74d5..d9224e4ed75 100644 --- a/forge-gui/res/cardsfolder/f/flameborn_viron.txt +++ b/forge-gui/res/cardsfolder/f/flameborn_viron.txt @@ -1,6 +1,6 @@ Name:Flameborn Viron ManaCost:4 R R -Types:Creature Insect +Types:Creature Phyrexian Insect PT:6/4 SVar:Picture:http://www.wizards.com/global/images/magic/general/flameborn_viron.jpg Oracle: diff --git a/forge-gui/res/cardsfolder/f/flamescroll_celebrant_revel_in_silence.txt b/forge-gui/res/cardsfolder/f/flamescroll_celebrant_revel_in_silence.txt index 684ce80140d..163d80c8176 100644 --- a/forge-gui/res/cardsfolder/f/flamescroll_celebrant_revel_in_silence.txt +++ b/forge-gui/res/cardsfolder/f/flamescroll_celebrant_revel_in_silence.txt @@ -1,6 +1,6 @@ Name:Flamescroll Celebrant ManaCost:1 R -Types:Creature Human Cleric +Types:Creature Human Shaman PT:2/1 T:Mode$ AbilityCast | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | Execute$ TrigDmg | TriggerDescription$ Whenever an opponent activates an ability that isn't a mana ability, CARDNAME deals 1 damage to that player. SVar:TrigDmg:DB$ DealDamage | NumDmg$ 1 | Defined$ TriggeredActivator diff --git a/forge-gui/res/cardsfolder/f/flayer_husk.txt b/forge-gui/res/cardsfolder/f/flayer_husk.txt index 7f6185eae66..142b4b6691f 100644 --- a/forge-gui/res/cardsfolder/f/flayer_husk.txt +++ b/forge-gui/res/cardsfolder/f/flayer_husk.txt @@ -6,4 +6,4 @@ K:Equip:2 S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 1 | AddToughness$ 1 | Description$ Equipped creature gets +1/+1. DeckHas:Ability$Token SVar:Picture:http://www.wizards.com/global/images/magic/general/flayer_husk.jpg -Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Germ creature token, then attach this to it.)\nEquipped creature gets +1/+1.\nEquip {2} +Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Phyrexian Germ creature token, then attach this to it.)\nEquipped creature gets +1/+1.\nEquip {2} diff --git a/forge-gui/res/cardsfolder/f/flensermite.txt b/forge-gui/res/cardsfolder/f/flensermite.txt index 290ba39cf52..0b44742265a 100644 --- a/forge-gui/res/cardsfolder/f/flensermite.txt +++ b/forge-gui/res/cardsfolder/f/flensermite.txt @@ -1,6 +1,6 @@ Name:Flensermite ManaCost:1 B -Types:Creature Gremlin +Types:Creature Phyrexian Gremlin PT:1/1 K:Infect K:Lifelink diff --git a/forge-gui/res/cardsfolder/f/flesh_eater_imp.txt b/forge-gui/res/cardsfolder/f/flesh_eater_imp.txt index 2a0c78e2219..92841d25efc 100644 --- a/forge-gui/res/cardsfolder/f/flesh_eater_imp.txt +++ b/forge-gui/res/cardsfolder/f/flesh_eater_imp.txt @@ -1,6 +1,6 @@ Name:Flesh-Eater Imp ManaCost:3 B -Types:Creature Imp +Types:Creature Phyrexian Imp PT:2/2 K:Flying K:Infect diff --git a/forge-gui/res/cardsfolder/f/flesh_reaver.txt b/forge-gui/res/cardsfolder/f/flesh_reaver.txt index 2bc22eb7554..0fc3b0cd94d 100644 --- a/forge-gui/res/cardsfolder/f/flesh_reaver.txt +++ b/forge-gui/res/cardsfolder/f/flesh_reaver.txt @@ -1,6 +1,6 @@ Name:Flesh Reaver ManaCost:1 B -Types:Creature Horror +Types:Creature Phyrexian Horror PT:4/4 T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Creature,Opponent | Execute$ TrigFleshReaverDamage | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals damage to a creature or opponent, CARDNAME deals that much damage to you. SVar:TrigFleshReaverDamage:DB$ DealDamage | NumDmg$ FleshReaverX | Defined$ You diff --git a/forge-gui/res/cardsfolder/f/flourishing_strike.txt b/forge-gui/res/cardsfolder/f/flourishing_strike.txt index 1e8715c456f..c2340d839f0 100644 --- a/forge-gui/res/cardsfolder/f/flourishing_strike.txt +++ b/forge-gui/res/cardsfolder/f/flourishing_strike.txt @@ -5,4 +5,4 @@ K:Entwine:2 G A:SP$ Charm | Choices$ DBDealDamage,DBPump SVar:DBDealDamage:DB$ DealDamage | ValidTgts$ Creature.withFlying | TgtPrompt$ Select target creature with flying | NumDmg$ 5 | SpellDescription$ CARDNAME deals 5 damage to target creature with flying. SVar:DBPump:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +3 | NumDef$ +3 | AILogic$ Pump | SpellDescription$ Target creature gets +3/+3 until end of turn. -Oracle:Choose one — \n• Flourishing Strike deals 5 damage to target creature with flying.\n• Target creature gets +3/+3 until end of turn.\nEntwine {2}{G} (Choose both if you pay the entwine cost.) +Oracle:Choose one —\n• Flourishing Strike deals 5 damage to target creature with flying.\n• Target creature gets +3/+3 until end of turn.\nEntwine {2}{G} (Choose both if you pay the entwine cost.) diff --git a/forge-gui/res/cardsfolder/f/fractured_sanity.txt b/forge-gui/res/cardsfolder/f/fractured_sanity.txt index 1a4242fa1c2..6c0dd1bb3eb 100644 --- a/forge-gui/res/cardsfolder/f/fractured_sanity.txt +++ b/forge-gui/res/cardsfolder/f/fractured_sanity.txt @@ -6,4 +6,4 @@ A:SP$ Mill | Defined$ Opponent | NumCards$ 14 | SpellDescription$ Each opponent T:Mode$ Cycled | ValidCard$ Card.Self | Execute$ TrigMill | TriggerDescription$ When you cycle CARDNAME, each opponent mills four cards. SVar:TrigMill:DB$ Mill | Defined$ Opponent | NumCards$ 4 DeckHas:Ability$Mill -Oracle:Each opponent mills fourteen cards.\nCycling {1}{U}\nWhen you cycle Fractured Sanity, each opponent mills four cards. +Oracle:Each opponent mills fourteen cards.\nCycling {1}{U} ({1}{U}, Discard this card: Draw a card.)\nWhen you cycle Fractured Sanity, each opponent mills four cards. diff --git a/forge-gui/res/cardsfolder/f/fume_spitter.txt b/forge-gui/res/cardsfolder/f/fume_spitter.txt index 69e92b90508..eff56efda9b 100644 --- a/forge-gui/res/cardsfolder/f/fume_spitter.txt +++ b/forge-gui/res/cardsfolder/f/fume_spitter.txt @@ -1,6 +1,6 @@ Name:Fume Spitter ManaCost:B -Types:Creature Horror +Types:Creature Phyrexian Horror PT:1/1 A:AB$ PutCounter | Cost$ Sac<1/CARDNAME> | ValidTgts$ Creature | TgtPrompt$ Select target creature | IsCurse$ True | CounterType$ M1M1 | CounterNum$ 1 | SpellDescription$ Put a -1/-1 counter on target creature. SVar:Picture:http://www.wizards.com/global/images/magic/general/fume_spitter.jpg diff --git a/forge-gui/res/cardsfolder/f/furnace_scamp.txt b/forge-gui/res/cardsfolder/f/furnace_scamp.txt index e4aaa99d0d8..7780b04a1e4 100644 --- a/forge-gui/res/cardsfolder/f/furnace_scamp.txt +++ b/forge-gui/res/cardsfolder/f/furnace_scamp.txt @@ -1,6 +1,6 @@ Name:Furnace Scamp ManaCost:R -Types:Creature Beast +Types:Creature Phyrexian Beast PT:1/1 T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | OptionalDecider$ You | Execute$ TrigDamage | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may sacrifice it. If you do, CARDNAME deals 3 damage to that player. SVar:TrigDamage:AB$ DealDamage | Cost$ Sac<1/CARDNAME> | Defined$ TriggeredTarget | NumDmg$ 3 diff --git a/forge-gui/res/cardsfolder/f/fury.txt b/forge-gui/res/cardsfolder/f/fury.txt index 5fb38c5d7e4..4b2da40f1f0 100644 --- a/forge-gui/res/cardsfolder/f/fury.txt +++ b/forge-gui/res/cardsfolder/f/fury.txt @@ -6,4 +6,4 @@ K:Double Strike K:Evoke:ExileFromHand<1/Card.Red+Other> T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDamage | TriggerDescription$ When CARDNAME enters the battlefield, it deals 4 damage divided as you choose among any number of target creatures and/or planeswalkers. SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker to distribute damage to | NumDmg$ 4 | TargetMin$ 1 | TargetMax$ 4 | DividedAsYouChoose$ 4 -Oracle:Double strike\nEvoke—Exile a red card from your hand.\nWhen Fury enters the battlefield, it deals 4 damage divided as you choose among any number of target creatures and/or planeswalkers. +Oracle:Double strike\nWhen Fury enters the battlefield, it deals 4 damage divided as you choose among any number of target creatures and/or planeswalkers.\nEvoke—Exile a red card from your hand. diff --git a/forge-gui/res/cardsfolder/g/gaeas_will.txt b/forge-gui/res/cardsfolder/g/gaeas_will.txt index 1fa90ce0dde..e73e4d31bd9 100644 --- a/forge-gui/res/cardsfolder/g/gaeas_will.txt +++ b/forge-gui/res/cardsfolder/g/gaeas_will.txt @@ -8,4 +8,4 @@ SVar:STPlay:Mode$ Continuous | EffectZone$ Command | Affected$ Card.YouCtrl | Af SVar:GraveToExile:Event$ Moved | ActiveZones$ Command | Destination$ Graveyard | ValidCard$ Card.nonToken+YouOwn | ReplaceWith$ Exile | Description$ If a card would be put into your graveyard from anywhere this turn, exile it instead. SVar:Exile:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Exile | Defined$ ReplacedCard SVar:PlayMain1:ALWAYS -Oracle:Suspend 4 — {G}\nUntil end of turn, you may play lands and cast spells from your graveyard.\nIf a card would be put into your graveyard from anywhere this turn, exile that card instead. +Oracle:Suspend 4—{G}\nUntil end of turn, you may play lands and cast spells from your graveyard.\nIf a card would be put into your graveyard from anywhere this turn, exile that card instead. diff --git a/forge-gui/res/cardsfolder/g/gallowbraid.txt b/forge-gui/res/cardsfolder/g/gallowbraid.txt index be74605ab0b..f774af44f9e 100644 --- a/forge-gui/res/cardsfolder/g/gallowbraid.txt +++ b/forge-gui/res/cardsfolder/g/gallowbraid.txt @@ -1,6 +1,6 @@ Name:Gallowbraid ManaCost:3 B B -Types:Legendary Creature Horror +Types:Legendary Creature Phyrexian Horror PT:5/5 K:Trample K:Cumulative upkeep:PayLife<1>:Pay 1 life. diff --git a/forge-gui/res/cardsfolder/g/gargadon.txt b/forge-gui/res/cardsfolder/g/gargadon.txt index c9746f750b7..4d4bde4abe8 100644 --- a/forge-gui/res/cardsfolder/g/gargadon.txt +++ b/forge-gui/res/cardsfolder/g/gargadon.txt @@ -4,4 +4,4 @@ Types:Creature Beast PT:7/5 K:Trample K:Suspend:4:1 R -Oracle:Trample\nSuspend {1}{R} (Rather than cast this card from your hand, pay {1}{R} and exile it with four time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost. It has haste.) +Oracle:Trample\nSuspend 4—{1}{R} (Rather than cast this card from your hand, you may pay {1}{R} and exile it with four time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost. It has haste.) diff --git a/forge-gui/res/cardsfolder/g/general_ferrous_rokiric.txt b/forge-gui/res/cardsfolder/g/general_ferrous_rokiric.txt index eecc2939b9a..eaf9673bdcc 100644 --- a/forge-gui/res/cardsfolder/g/general_ferrous_rokiric.txt +++ b/forge-gui/res/cardsfolder/g/general_ferrous_rokiric.txt @@ -8,4 +8,4 @@ SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenOwner$ You | TokenScript$ rw_4_ AI:RemoveDeck:Random SVar:BuffedBy:Card.MultiColor DeckHas:Ability$Token -Oracle:Hexproof from monocolored (This creature can't be the target of monocolored spells or abilities your opponents control.)\nWhenever you cast a multicolored spell, create a 4/4 red and white Golem artifact creature token. +Oracle:Hexproof from monocolored\nWhenever you cast a multicolored spell, create a 4/4 red and white Golem artifact creature token. diff --git a/forge-gui/res/cardsfolder/g/geth_lord_of_the_vault.txt b/forge-gui/res/cardsfolder/g/geth_lord_of_the_vault.txt index 4a3cca52546..f0c54b77b69 100644 --- a/forge-gui/res/cardsfolder/g/geth_lord_of_the_vault.txt +++ b/forge-gui/res/cardsfolder/g/geth_lord_of_the_vault.txt @@ -1,6 +1,6 @@ Name:Geth, Lord of the Vault ManaCost:4 B B -Types:Legendary Creature Zombie +Types:Legendary Creature Phyrexian Zombie PT:5/5 K:Intimidate A:AB$ ChangeZone | Cost$ X B | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | TgtPrompt$ Choose target artifact or creature card in an opponent's graveyard | ValidTgts$ Creature.OppOwn+cmcEQX,Artifact.OppOwn+cmcEQX | Tapped$ True | SubAbility$ DBMill | SpellDescription$ Put target artifact or creature card with mana value X from an opponent's graveyard onto the battlefield under your control tapped. Then that player mills X cards. diff --git a/forge-gui/res/cardsfolder/g/geyadrone_dihada.txt b/forge-gui/res/cardsfolder/g/geyadrone_dihada.txt index 88354ea8189..03ea9ab414c 100644 --- a/forge-gui/res/cardsfolder/g/geyadrone_dihada.txt +++ b/forge-gui/res/cardsfolder/g/geyadrone_dihada.txt @@ -7,8 +7,8 @@ A:AB$ Pump | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | TargetMin$ 0 | T SVar:DBLoseLife:DB$ LoseLife | Defined$ Player.Opponent | LifeAmount$ 2 | SubAbility$ DBGainLife SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 2 | SubAbility$ DBPutCounter SVar:DBPutCounter:DB$ PutCounter | Defined$ Targeted | CounterType$ CORRUPTION | CounterNum$ 1 -A:AB$ GainControl | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | LoseControl$ EOT | Untap$ True | AddKWs$ Haste | SubAbility$ DBPutCounter | SpellDescription$ Gain control of target creature or planeswalker until end of turn. Untap it and put a corruption counter on it. It gains haste until end of turn. +A:AB$ GainControl | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | LoseControl$ EOT | Untap$ True | AddKWs$ Haste | SubAbility$ DBPutCounter | SpellDescription$ Gain control of target creature or planeswalker until end of tun. Untap it and put a corruption counter on it. It gains haste until end of turn. SVar:DBPutCounter:DB$PutCounter | Defined$ Targeted | CounterType$ CORRUPTION | CounterNum$ 1 A:AB$ GainControl | Cost$ SubCounter<7/LOYALTY> | Planeswalker$ True | Ultimate$ True | AllValid$ Permanent.counters_GE1_CORRUPTION | SpellDescription$ Gain control of each permanent with a corruption counter on it. DeckHas:Ability$LifeGain -Oracle:Protection from permanents with corruption counters on them\n[+1]: Each opponent loses 2 life and you gain 2 life. Put a corruption counter on up to one other target creature or planeswalker.\n[−3]: Gain control of target creature or planeswalker until end of turn. Untap it and put a corruption counter on it. It gains haste until end of turn.\n[−7]: Gain control of each permanent with a corruption counter on it. +Oracle:Protection from permanents with corruption counters on them\n[+1]: Each opponent loses 2 life and you gain 2 life. Put a corruption counter on up to one other target creature or planeswalker.\n[−3]: Gain control of target creature or planeswalker until end of tun. Untap it and put a corruption counter on it. It gains haste until end of turn.\n[−7]: Gain control of each permanent with a corruption counter on it. diff --git a/forge-gui/res/cardsfolder/g/ghost_lit_drifter.txt b/forge-gui/res/cardsfolder/g/ghost_lit_drifter.txt index 3d3ef383fe9..21cec85e6ae 100644 --- a/forge-gui/res/cardsfolder/g/ghost_lit_drifter.txt +++ b/forge-gui/res/cardsfolder/g/ghost_lit_drifter.txt @@ -6,4 +6,4 @@ K:Flying A:AB$ Pump | Cost$ 2 U | ValidTgts$ Creature.Other | KW$ Flying | TgtPrompt$ Select another target creature | SpellDescription$ Another target creature gains flying until end of turn. A:AB$ Pump | Cost$ X U Discard<1/CARDNAME> | TargetMin$ X | TargetMax$ X | KW$ Flying | ValidTgts$ Creature | TgtPrompt$ Select X target creatures | ActivationZone$ Hand | PrecostDesc$ Channel — | SpellDescription$ X target creatures gain flying until end of turn. SVar:X:Count$xPaid -Oracle:Flying\n{2}{U}: Another target creature gains flying until end of turn.\nChannel — {X}{U}, discard Ghost-Lit Drifter: X target creatures gain flying until end of turn. +Oracle:Flying\n{2}{U}: Another target creature gains flying until end of turn.\nChannel — {X}{U}, Discard Ghost-Lit Drifter: X target creatures gain flying until end of turn. diff --git a/forge-gui/res/cardsfolder/g/ghost_of_ramirez_depietro.txt b/forge-gui/res/cardsfolder/g/ghost_of_ramirez_depietro.txt index ad62819425b..7e8b373a0a5 100755 --- a/forge-gui/res/cardsfolder/g/ghost_of_ramirez_depietro.txt +++ b/forge-gui/res/cardsfolder/g/ghost_of_ramirez_depietro.txt @@ -1,6 +1,6 @@ Name:Ghost of Ramirez DePietro ManaCost:2 U -Types:Legendary Creature Pirate Spirit +Types:Legendary Creature Spirit Pirate PT:2/3 S:Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.toughnessGE3 | Description$ CARDNAME can't be blocked by creatures with toughness 3 or greater. T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigChangeZone | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, choose up to one target card in a graveyard that was discarded or put there from a library this turn. Put that card into its owner's hand. @@ -8,4 +8,4 @@ SVar:TrigChangeZone:DB$ ChangeZone | TargetMin$ 0 | TargetMax$ 1 | Origin$ Grave K:Partner DeckHas:Ability$Graveyard DeckHints:Ability$Mill -Oracle:Ghost of Ramirez DePietro can't be blocked by creatures with toughness 3 or greater.\nWhenever Ghost of Ramirez DePietro deals combat damage to a player, choose up to one target card in a graveyard that was discarded or put there from a library this turn. Put that card into its owner's hand.\nPartner (You can have two commanders if both have partner.) \ No newline at end of file +Oracle:Ghost of Ramirez DePietro can't be blocked by creatures with toughness 3 or greater.\nWhenever Ghost of Ramirez DePietro deals combat damage to a player, choose up to one target card in a graveyard that was discarded or put there from a library this turn. Put that card into its owner's hand.\nPartner (You can have two commanders if both have partner.) diff --git a/forge-gui/res/cardsfolder/g/glimpse_of_tomorrow.txt b/forge-gui/res/cardsfolder/g/glimpse_of_tomorrow.txt index 647384836c3..883194ce7d9 100644 --- a/forge-gui/res/cardsfolder/g/glimpse_of_tomorrow.txt +++ b/forge-gui/res/cardsfolder/g/glimpse_of_tomorrow.txt @@ -11,4 +11,4 @@ SVar:ChangePermanent:DB$ ChangeZoneAll | ChangeType$ Permanent.nonAura+IsRemembe SVar:ChangeEnchantment:DB$ ChangeZoneAll | ChangeType$ Aura.IsRemembered | Origin$ Library | Destination$ Battlefield | ForgetChanged$ True | SubAbility$ GotoBottom SVar:GotoBottom:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Library | Destination$ Library | LibraryPosition$ -1 | RandomOrder$ True | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -Oracle:Shuffle all permanents you own into your library, then reveal that many cards from the top of your library. Put all non-Aura permanent cards revealed this way onto the battlefield, then do the same for Aura cards, then put the rest on the bottom of your library in a random order. +Oracle:Suspend 3—{R}{R}\nShuffle all permanents you own into your library, then reveal that many cards from the top of your library. Put all non-Aura permanent cards revealed this way onto the battlefield, then do the same for Aura cards, then put the rest on the bottom of your library in a random order. diff --git a/forge-gui/res/cardsfolder/g/glinting_creeper.txt b/forge-gui/res/cardsfolder/g/glinting_creeper.txt index 4dbaee319dc..1dddf9b2386 100644 --- a/forge-gui/res/cardsfolder/g/glinting_creeper.txt +++ b/forge-gui/res/cardsfolder/g/glinting_creeper.txt @@ -2,9 +2,9 @@ Name:Glinting Creeper ManaCost:4 G Types:Creature Plant PT:0/0 -K:etbCounter:P1P1:Y:no Condition:Converge — CARDNAME enters the battlefield with a +1/+1 counter on it for each color of mana spent to cast it. -K:CantBeBlockedBy Creature.powerLE2 +K:etbCounter:P1P1:Y:no Condition:Converge — CARDNAME enters the battlefield with two +1/+1 counters on it for each color of mana spent to cast it. +S:Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.powerLE2 | Description$ CARDNAME can't be blocked by creatures with power 2 or less. SVar:X:Count$Converge SVar:Y:SVar$X/Twice DeckHints:Ability$Counters -Oracle:Converge — Glinting Creeper enters the battlefield with a +1/+1 counter on it for each color of mana spent to cast it.\nGlinting Creeper can't be blocked by creautures with power 2 or less. +Oracle:Converge — Glinting Creeper enters the battlefield with two +1/+1 counters on it for each color of mana spent to cast it.\nGlinting Creeper can't be blocked by creatures with power 2 or less. diff --git a/forge-gui/res/cardsfolder/g/glissa_the_traitor.txt b/forge-gui/res/cardsfolder/g/glissa_the_traitor.txt index 257a7d3bad5..fdae9183404 100644 --- a/forge-gui/res/cardsfolder/g/glissa_the_traitor.txt +++ b/forge-gui/res/cardsfolder/g/glissa_the_traitor.txt @@ -1,6 +1,6 @@ Name:Glissa, the Traitor ManaCost:B G G -Types:Legendary Creature Zombie Elf +Types:Legendary Creature Phyrexian Zombie Elf PT:3/3 K:First Strike K:Deathtouch diff --git a/forge-gui/res/cardsfolder/g/glissas_courier.txt b/forge-gui/res/cardsfolder/g/glissas_courier.txt index d1fd873a393..3a27dad5650 100644 --- a/forge-gui/res/cardsfolder/g/glissas_courier.txt +++ b/forge-gui/res/cardsfolder/g/glissas_courier.txt @@ -1,6 +1,6 @@ Name:Glissa's Courier ManaCost:1 G G -Types:Creature Horror +Types:Creature Phyrexian Horror PT:2/3 K:Mountainwalk SVar:Picture:http://www.wizards.com/global/images/magic/general/glissas_courier.jpg diff --git a/forge-gui/res/cardsfolder/g/glistener_elf.txt b/forge-gui/res/cardsfolder/g/glistener_elf.txt index a233c897aa9..b3415d8a214 100644 --- a/forge-gui/res/cardsfolder/g/glistener_elf.txt +++ b/forge-gui/res/cardsfolder/g/glistener_elf.txt @@ -1,6 +1,6 @@ Name:Glistener Elf ManaCost:G -Types:Creature Elf Warrior +Types:Creature Phyrexian Elf Warrior PT:1/1 K:Infect SVar:Picture:http://www.wizards.com/global/images/magic/general/glistener_elf.jpg diff --git a/forge-gui/res/cardsfolder/g/gnome_made_engine.txt b/forge-gui/res/cardsfolder/g/gnome_made_engine.txt index 353864f1165..de04e6dde04 100644 --- a/forge-gui/res/cardsfolder/g/gnome_made_engine.txt +++ b/forge-gui/res/cardsfolder/g/gnome_made_engine.txt @@ -1,6 +1,6 @@ Name:Gnome-Made Engine ManaCost:4 -Types:Artifact Host Creature Construct +Types:Host Artifact Creature Construct PT:2/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | Host$ True | TriggerDescription$ When this creature enters the battlefield, create a 1/1 colorless Gnome artifact creature token. SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_1_1_a_gnome | TokenOwner$ TriggeredCardController diff --git a/forge-gui/res/cardsfolder/g/goblin_bowling_team.txt b/forge-gui/res/cardsfolder/g/goblin_bowling_team.txt index ed9317b9210..c97ce715e0d 100644 --- a/forge-gui/res/cardsfolder/g/goblin_bowling_team.txt +++ b/forge-gui/res/cardsfolder/g/goblin_bowling_team.txt @@ -1,6 +1,6 @@ Name:Goblin Bowling Team ManaCost:3 R -Types:Creature - Goblin +Types:Creature Goblin PT:1/1 R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Card.Self | ReplaceWith$ RollDamage | Description$ If CARDNAME would deal damage to a permanent or player, it deals that much damage plus the result of a six-sided die roll to that permanent or player instead. SVar:RollDamage:DB$ RollDice | ResultSVar$ Result | SubAbility$ DmgPlus diff --git a/forge-gui/res/cardsfolder/g/goblin_traprunner.txt b/forge-gui/res/cardsfolder/g/goblin_traprunner.txt index e933032c796..6d2abb5f3dd 100644 --- a/forge-gui/res/cardsfolder/g/goblin_traprunner.txt +++ b/forge-gui/res/cardsfolder/g/goblin_traprunner.txt @@ -2,8 +2,8 @@ Name:Goblin Traprunner ManaCost:3 R Types:Creature Goblin PT:4/2 -T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigFlipCoins | TriggerDescription$ Whenever CARDNAME attacks, flip three coins. For each flip you win, create a 1/1 red Goblin creature token tapped and attacking. +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigFlipCoins | TriggerDescription$ Whenever CARDNAME attacks, flip three coins. For each flip you win, create a 1/1 red Goblin creature token that's tapped and attacking. SVar:TrigFlipCoins:DB$ FlipACoin | Amount$ 3 | WinSubAbility$ DBToken | RememberNumber$ Wins SVar:DBToken:DB$ Token | TokenOwner$ You | TokenAmount$ Wins | TokenScript$ r_1_1_goblin | TokenTapped$ True | TokenAttacking$ True DeckHas:Ability$Token -Oracle:Whenever Goblin Traprunner attacks, flip three coins. For each flip you win, create a 1/1 red Goblin creature token tapped and attacking. +Oracle:Whenever Goblin Traprunner attacks, flip three coins. For each flip you win, create a 1/1 red Goblin creature token that's tapped and attacking. diff --git a/forge-gui/res/cardsfolder/g/gore_vassal.txt b/forge-gui/res/cardsfolder/g/gore_vassal.txt index e0c104a886d..541468bd677 100644 --- a/forge-gui/res/cardsfolder/g/gore_vassal.txt +++ b/forge-gui/res/cardsfolder/g/gore_vassal.txt @@ -1,6 +1,6 @@ Name:Gore Vassal ManaCost:2 W -Types:Creature Dog +Types:Creature Phyrexian Dog PT:2/1 A:AB$ PutCounter | Cost$ Sac<1/CARDNAME> | CounterType$ M1M1 | CounterNum$ 1 | ValidTgts$ Creature | TgtPrompt$ Select target creature | RememberTargets$ True | SubAbility$ DBRegenerate | SpellDescription$ Put a -1/-1 counter on target creature. Then if that creature's toughness is 1 or greater, regenerate it. SVar:DBRegenerate:DB$ Regenerate | Defined$ Remembered | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 | SubAbility$ DBCleanup diff --git a/forge-gui/res/cardsfolder/g/gouged_zealot.txt b/forge-gui/res/cardsfolder/g/gouged_zealot.txt index fa52d105389..298a0d40129 100644 --- a/forge-gui/res/cardsfolder/g/gouged_zealot.txt +++ b/forge-gui/res/cardsfolder/g/gouged_zealot.txt @@ -3,9 +3,9 @@ ManaCost:3 R Types:Creature Cyclops Berserker PT:4/3 K:Reach -T:Mode$ Attacks | ValidCard$ Card.Self | Delirium$ True | Execute$ TrigDamageAll | TriggerDescription$ Delirium — Whenever CARDNAME attacks, if there are four or more card types among card in your graveyard, CARDNAME deals 1 damage to each creature defending player controls. +T:Mode$ Attacks | ValidCard$ Card.Self | Delirium$ True | Execute$ TrigDamageAll | TriggerDescription$ Delirium — Whenever CARDNAME attacks, if there are four or more card types among cards in your graveyard, CARDNAME deals 1 damage to each creature defending player controls. SVar:TrigDamageAll:DB$ DamageAll | ValidCards$ Creature.DefenderCtrl | NumDmg$ 1 | ValidDescription$ each creature defending player controls. SVar:HasAttackEffect:TRUE DeckHints:Ability$Graveyard & Ability$Discard DeckHas:Ability$Delirium -Oracle:Reach\nDelirium — Whenever Gouged Zealot attacks, if there are four or more card types among card in your graveyard, Gouged Zealot deals 1 damage to each creature defending player controls. +Oracle:Reach\nDelirium — Whenever Gouged Zealot attacks, if there are four or more card types among cards in your graveyard, Gouged Zealot deals 1 damage to each creature defending player controls. diff --git a/forge-gui/res/cardsfolder/g/greven_predator_captain.txt b/forge-gui/res/cardsfolder/g/greven_predator_captain.txt index e70a5cb0229..cd027d4a41c 100644 --- a/forge-gui/res/cardsfolder/g/greven_predator_captain.txt +++ b/forge-gui/res/cardsfolder/g/greven_predator_captain.txt @@ -1,6 +1,6 @@ Name:Greven, Predator Captain ManaCost:3 B R -Types:Legendary Creature Human Warrior +Types:Legendary Creature Phyrexian Human Warrior PT:5/5 K:Menace S:Mode$ Continuous | Affected$ Card.Self | AddPower$ X | Description$ CARDNAME gets +X/+0, where X is the amount of life you've lost this turn. diff --git a/forge-gui/res/cardsfolder/g/grief.txt b/forge-gui/res/cardsfolder/g/grief.txt index 9d0c34c280b..c9364c3387b 100644 --- a/forge-gui/res/cardsfolder/g/grief.txt +++ b/forge-gui/res/cardsfolder/g/grief.txt @@ -6,4 +6,4 @@ K:Menace K:Evoke:ExileFromHand<1/Card.Black+Other> T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigRemove | TriggerDescription$ When CARDNAME enters the battlefield, target opponent reveals their hand. You choose a nonland card from it. That player discards that card. SVar:TrigRemove:DB$ Discard | ValidTgts$ Opponent | NumCards$ 1 | Mode$ RevealYouChoose | DiscardValid$ Card.nonLand | SpellDescription$ Target opponent reveals their hand. You choose a nonland card from it. That player discards that card. -Oracle:Menace\nWhen Grief enters the battlefield, target opponent reveals their hand. You choose a nonland card from it. That player discards that card.\nEvoke — Exile a black card from your hand. +Oracle:Menace\nWhen Grief enters the battlefield, target opponent reveals their hand. You choose a nonland card from it. That player discards that card.\nEvoke—Exile a black card from your hand. diff --git a/forge-gui/res/cardsfolder/g/grip_of_phyresis.txt b/forge-gui/res/cardsfolder/g/grip_of_phyresis.txt index fc450dd8c01..8ed795a4da8 100644 --- a/forge-gui/res/cardsfolder/g/grip_of_phyresis.txt +++ b/forge-gui/res/cardsfolder/g/grip_of_phyresis.txt @@ -1,10 +1,9 @@ Name:Grip of Phyresis ManaCost:2 U Types:Instant -A:SP$ GainControl | Cost$ 2 U | ValidTgts$ Equipment | TgtPrompt$ Select target equipment | SubAbility$ DBToken | SpellDescription$ Gain control of target Equipment, then create a 0/0 black Germ creature token and attach that Equipment to it. -SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ b_0_0_germ | TokenOwner$ You | LegacyImage$ b 0 0 germ c16 | RememberTokens$ True | SubAbility$ DBAttach +A:SP$ GainControl | Cost$ 2 U | ValidTgts$ Equipment | TgtPrompt$ Select target equipment | SubAbility$ DBToken | SpellDescription$ Gain control of target Equipment, then create a 0/0 black Phyrexian Germ creature token and attach that Equipment to it. +SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ b_0_0_phyrexian_germ | TokenOwner$ You | RememberTokens$ True | SubAbility$ DBAttach SVar:DBAttach:DB$ Attach | Object$ Targeted | Defined$ Remembered | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Token -SVar:Picture:http://www.wizards.com/global/images/magic/general/grip_of_phyresis.jpg -Oracle:Gain control of target Equipment, then create a 0/0 black Germ creature token and attach that Equipment to it. +Oracle:Gain control of target Equipment, then create a 0/0 black Phyrexian Germ creature token and attach that Equipment to it. diff --git a/forge-gui/res/cardsfolder/g/grist_the_hunger_tide.txt b/forge-gui/res/cardsfolder/g/grist_the_hunger_tide.txt index 1bca9e292f1..29db56e4568 100644 --- a/forge-gui/res/cardsfolder/g/grist_the_hunger_tide.txt +++ b/forge-gui/res/cardsfolder/g/grist_the_hunger_tide.txt @@ -15,8 +15,8 @@ SVar:MilledInsect:Remembered$Valid Card.Insect SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True A:AB$ ImmediateTrigger | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | Execute$ TrigDestroy | UnlessCost$ Sac<1/Creature> | UnlessPayer$ You | UnlessSwitched$ True | SpellDescription$ You may sacrifice a creature. When you do, destroy target creature or planeswalker. SVar:TrigDestroy:DB$ Destroy | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker -A:AB$ LoseLife | Cost$ SubCounter<5/LOYALTY> | LifeAmount$ X | Defined$ Player.Opponent | Planeswalker$ True | SpellDescription$ Each opponent loses life equal to the number of creature cards in your graveyard. +A:AB$ LoseLife | Cost$ SubCounter<5/LOYALTY> | LifeAmount$ X | Defined$ Player.Opponent | Planeswalker$ True | Ultimate$ True | SpellDescription$ Each opponent loses life equal to the number of creature cards in your graveyard. SVar:X:Count$TypeInYourYard.Creature DeckHas:Ability$Token & Ability$Mill DeckHints:Type$Insect -Oracle:As long as Grist, the Hunger Tide isn’t on the battlefield, it’s a 1/1 Insect creature in addition to its other types.\n[+1]: Create a 1/1 black and green Insect creature token, then mill a card. If an Insect card was milled this way, put a loyalty counter on Grist and repeat this process.\n[−2]: You may sacrifice a creature. When you do, destroy target creature or planeswalker.\n[−5]: Each opponent loses life equal to the number of creature cards in your graveyard. +Oracle:As long as Grist, the Hunger Tide isn't on the battlefield, it's a 1/1 Insect creature in addition to its other types.\n[+1]: Create a 1/1 black and green Insect creature token, then mill a card. If an Insect card was milled this way, put a loyalty counter on Grist and repeat this process.\n[−2]: You may sacrifice a creature. When you do, destroy target creature or planeswalker.\n[−5]: Each opponent loses life equal to the number of creature cards in your graveyard. diff --git a/forge-gui/res/cardsfolder/g/gruesome_slaughter.txt b/forge-gui/res/cardsfolder/g/gruesome_slaughter.txt index 90b0472c196..58970095553 100644 --- a/forge-gui/res/cardsfolder/g/gruesome_slaughter.txt +++ b/forge-gui/res/cardsfolder/g/gruesome_slaughter.txt @@ -1,6 +1,6 @@ Name:Gruesome Slaughter ManaCost:6 -Types:Instant +Types:Sorcery A:SP$ AnimateAll | Cost$ 6 | ValidCards$ Creature.Colorless+YouCtrl | Abilities$ ThrowPunch | sVars$ GruesomeX | SpellDescription$ Until end of turn, colorless creatures you control gain "{T}: This creature deals damage equal to its power to target creature." SVar:ThrowPunch:AB$ DealDamage | Cost$ T | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ GruesomeX | SpellDescription$ This creature deals damage equal to its power to target creature. SVar:GruesomeX:Count$CardPower diff --git a/forge-gui/res/cardsfolder/h/hand_of_the_praetors.txt b/forge-gui/res/cardsfolder/h/hand_of_the_praetors.txt index 6a2a10c63e3..4390c674e71 100644 --- a/forge-gui/res/cardsfolder/h/hand_of_the_praetors.txt +++ b/forge-gui/res/cardsfolder/h/hand_of_the_praetors.txt @@ -1,6 +1,6 @@ Name:Hand of the Praetors ManaCost:3 B -Types:Creature Zombie +Types:Creature Phyrexian Zombie PT:3/2 K:Infect S:Mode$ Continuous | Affected$ Creature.withInfect+Other+YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Other creatures you control with infect get +1/+1. diff --git a/forge-gui/res/cardsfolder/h/hard_evidence.txt b/forge-gui/res/cardsfolder/h/hard_evidence.txt index b45cb039dc3..244e5f210db 100644 --- a/forge-gui/res/cardsfolder/h/hard_evidence.txt +++ b/forge-gui/res/cardsfolder/h/hard_evidence.txt @@ -4,4 +4,4 @@ Types:Sorcery A:SP$ Token | TokenAmount$ 1 | TokenScript$ u_0_3_crab | TokenOwner$ You | SubAbility$ DBInvestigate | SpellDescription$ Create a 0/3 blue Crab creature token. Investigate. SVar:DBInvestigate:DB$ Investigate DeckHas:Ability$Investigate & Ability$Token -Oracle:Create a 0/3 blue Crab creature token. Investigate. (Create a colorless Clue artifact token with "{2}, Sacrifice this artifact: Draw a card.") +Oracle:Create a 0/3 blue Crab creature token.\nInvestigate. (Create a colorless Clue artifact token with "{2}, Sacrifice this artifact: Draw a card.") diff --git a/forge-gui/res/cardsfolder/h/hero_of_bretagard.txt b/forge-gui/res/cardsfolder/h/hero_of_bretagard.txt index 4bbce25b1b3..49efd55f23a 100644 --- a/forge-gui/res/cardsfolder/h/hero_of_bretagard.txt +++ b/forge-gui/res/cardsfolder/h/hero_of_bretagard.txt @@ -2,11 +2,12 @@ Name:Hero of Bretagard ManaCost:2 W Types:Creature Human Warrior PT:1/1 -T:Mode$ ChangesZoneAll | ValidCause$ SpellAbility.YouCtrl | Origin$ Hand,Battlefield | Destination$ Exile | ValidCards$ Card.YouOwn,Card.inZoneBattlefield | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ Whenever a spell or ability you control exiles one or more cards from your hand and/or permanents from the battlefield, put that many +1/+1 counters on CARDNAME. +T:Mode$ ChangesZoneAll | Origin$ Hand | Destination$ Exile | ValidCards$ Card.YouOwn | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ Whenever one or more cards are put into exile from your hand or a spell or ability you control exiles one or more permanents from the battlefield, put that many +1/+1 counters on CARDNAME. +T:Mode$ ChangesZoneAll | ValidCause$ SpellAbility.YouCtrl | Origin$ Battlefield | Destination$ Exile | Execute$ TrigPutCounter | TriggerZones$ Battlefield | Secondary$ True | TriggerDescription$ Whenever one or more cards are put into exile from your hand or a spell or ability you control exiles one or more permanents from the battlefield, put that many +1/+1 counters on CARDNAME. SVar:TrigPutCounter:DB$PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ X S:Mode$ Continuous | Affected$ Card.Self | CheckSVar$ Y | SVarCompare$ GT4 | AddKeyword$ Flying | AddType$ Angel | Description$ As long as CARDNAME has five or more counters on it, it has flying and is an Angel in addition to its other types. S:Mode$ Continuous | Affected$ Card.Self | CheckSVar$ Y | SVarCompare$ GT9 | AddKeyword$ Indestructible | AddType$ Angel & God | Description$ As long as CARDNAME has ten or more counters on it, it indestructible and is a God in addition to its other types. SVar:X:TriggerCount$Amount SVar:Y:Count$CardCounters.ALL DeckHas:Ability$Counters -Oracle:Whenever a spell or ability you control exiles one or more cards from your hand and/or permanents from the battlefield, put that many +1/+1 counters on Hero of Bretagard.\nAs long as Hero of Bretagard has five or more counters on it, it has flying and is an Angel in addition to its other types.\nAs long as Hero of Bretagard has ten or more counters on it, it has indestructible and is a God in addition to its other types. +Oracle:Whenever one or more cards are put into exile from your hand or a spell or ability you control exiles one or more permanents from the battlefield, put that many +1/+1 counters on Hero of Bretagard.\nAs long as Hero of Bretagard has five or more counters on it, it has flying and is an Angel in addition to its other types.\nAs long as Hero of Bretagard has ten or more counters on it, it has indestructible and is a God in addition to its other types. diff --git a/forge-gui/res/cardsfolder/h/hex_parasite.txt b/forge-gui/res/cardsfolder/h/hex_parasite.txt index 5108ab355aa..e9cdc8ccba6 100644 --- a/forge-gui/res/cardsfolder/h/hex_parasite.txt +++ b/forge-gui/res/cardsfolder/h/hex_parasite.txt @@ -1,6 +1,6 @@ Name:Hex Parasite ManaCost:1 -Types:Artifact Creature Insect +Types:Artifact Creature Phyrexian Insect PT:1/1 A:AB$ RemoveCounter | Cost$ X PB | ValidTgts$ Permanent | TgtPrompt$ Select target permanent | CounterType$ Any | CounterNum$ X | RememberRemoved$ True | SubAbility$ DBPump | SpellDescription$ Remove up to X counters from target permanent. For each counter removed this way, CARDNAME gets +1/+0 until end of turn. SVar:DBPump:DB$ Pump | NumAtt$ +Y | Defined$ Self | SubAbility$ DBCleanup diff --git a/forge-gui/res/cardsfolder/h/hollow_dogs.txt b/forge-gui/res/cardsfolder/h/hollow_dogs.txt index 461490d8c18..08797fc5c24 100644 --- a/forge-gui/res/cardsfolder/h/hollow_dogs.txt +++ b/forge-gui/res/cardsfolder/h/hollow_dogs.txt @@ -1,6 +1,6 @@ Name:Hollow Dogs ManaCost:4 B -Types:Creature Zombie Dog +Types:Creature Phyrexian Zombie Dog PT:3/3 T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, it gets +2/+0 until end of turn. SVar:TrigPump:DB$ Pump | Defined$ Self | NumAtt$ 2 diff --git a/forge-gui/res/cardsfolder/i/ich_tekik_salvage_splicer.txt b/forge-gui/res/cardsfolder/i/ich_tekik_salvage_splicer.txt index 8d417202694..3872cb8859d 100644 --- a/forge-gui/res/cardsfolder/i/ich_tekik_salvage_splicer.txt +++ b/forge-gui/res/cardsfolder/i/ich_tekik_salvage_splicer.txt @@ -1,13 +1,13 @@ Name:Ich-Tekik, Salvage Splicer ManaCost:4 G -Types:Legendary Creature Human Artificer +Types:Legendary Creature Phyrexian Human Artificer PT:1/1 K:Partner -T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a 3/3 colorless Golem artifact creature token. -SVar:TrigToken:DB$ Token | TokenScript$ c_3_3_a_golem | TokenAmount$ 1 +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a 3/3 colorless Phyrexian Golem artifact creature token. +SVar:TrigToken:DB$ Token | TokenScript$ c_3_3_a_phyrexian_golem | TokenAmount$ 1 T:Mode$ ChangesZone | ValidCard$ Artifact | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Battlefield | Execute$ TrigCounter | TriggerDescription$ Whenever an artifact is put into a graveyard from the battlefield, put a +1/+1 counter on NICKNAME and a +1/+1 counter on each Golem you control. SVar:TrigCounter:DB$ PutCounterAll | ValidCards$ Card.Self,Golem.YouCtrl | CounterType$ P1P1 | CounterNum$ 1 DeckHas:Ability$Token & Ability$Counters DeckHints:Type$Golem DeckNeeds:Type$Artifact -Oracle:When Ich-Tekik, Salvage Splicer enters the battlefield, create a 3/3 colorless Golem artifact creature token.\nWhenever an artifact is put into a graveyard from the battlefield, put a +1/+1 counter on Ich-Tekik and a +1/+1 counter on each Golem you control.\nPartner (You can have two commanders if both have partner.) +Oracle:When Ich-Tekik, Salvage Splicer enters the battlefield, create a 3/3 colorless Phyrexian Golem artifact creature token.\nWhenever an artifact is put into a graveyard from the battlefield, put a +1/+1 counter on Ich-Tekik and a +1/+1 counter on each Golem you control.\nPartner (You can have two commanders if both have partner.) diff --git a/forge-gui/res/cardsfolder/i/ichor_rats.txt b/forge-gui/res/cardsfolder/i/ichor_rats.txt index b0b40b2ffe0..c48c6986999 100644 --- a/forge-gui/res/cardsfolder/i/ichor_rats.txt +++ b/forge-gui/res/cardsfolder/i/ichor_rats.txt @@ -1,6 +1,6 @@ Name:Ichor Rats ManaCost:1 B B -Types:Creature Rat +Types:Creature Phyrexian Rat PT:2/1 K:Infect T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPoison | TriggerDescription$ When CARDNAME enters the battlefield, each player gets a poison counter. diff --git a/forge-gui/res/cardsfolder/i/ichorclaw_myr.txt b/forge-gui/res/cardsfolder/i/ichorclaw_myr.txt index df31638adad..ba7c883d1c3 100644 --- a/forge-gui/res/cardsfolder/i/ichorclaw_myr.txt +++ b/forge-gui/res/cardsfolder/i/ichorclaw_myr.txt @@ -1,6 +1,6 @@ Name:Ichorclaw Myr ManaCost:2 -Types:Artifact Creature Myr +Types:Artifact Creature Phyrexian Myr PT:1/1 K:Infect T:Mode$ AttackerBlocked | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME becomes blocked, it gets +2/+2 until end of turn. diff --git a/forge-gui/res/cardsfolder/i/illusionary_terrain.txt b/forge-gui/res/cardsfolder/i/illusionary_terrain.txt index 0abfe4fde94..070bf3b4b94 100644 --- a/forge-gui/res/cardsfolder/i/illusionary_terrain.txt +++ b/forge-gui/res/cardsfolder/i/illusionary_terrain.txt @@ -2,9 +2,9 @@ Name:Illusionary Terrain ManaCost:U U Types:Enchantment K:Cumulative upkeep:2 -T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigChooseType1 | TriggerDescription$ As Illusionary Terrain enters the battlefield, choose two basic land types. -SVar:TrigChooseType1:DB$ ChooseType | Defined$ You | Type$ Basic Land | SubAbility$ ChooseType2 -SVar:ChooseType2:DB$ ChooseType | Defined$ You | Type$ Basic Land | Secondary$ True +K:ETBReplacement:Other:ChooseType1 +SVar:ChooseType1:DB$ ChooseType | Defined$ You | Type$ Basic Land | SubAbility$ ChooseType2 | SpellDescription$ As CARDNAME enters the battlefield, choose two basic land types. +SVar:ChooseType2:DB$ ChooseType | Defined$ You | Type$ Basic Land | ChooseType2$ True S:Mode$ Continuous | Affected$ Land.Basic+ChosenType | AddType$ ChosenType2 | RemoveLandTypes$ True | Description$ Basic lands of the first chosen type are the second chosen type. AI:RemoveDeck:All Oracle:Cumulative upkeep {2} (At the beginning of your upkeep, put an age counter on this permanent, then sacrifice it unless you pay its upkeep cost for each age counter on it.)\nAs Illusionary Terrain enters the battlefield, choose two basic land types.\nBasic lands of the first chosen type are the second chosen type. diff --git a/forge-gui/res/cardsfolder/i/immolating_souleater.txt b/forge-gui/res/cardsfolder/i/immolating_souleater.txt index 2803a532195..e41fdbc90b7 100644 --- a/forge-gui/res/cardsfolder/i/immolating_souleater.txt +++ b/forge-gui/res/cardsfolder/i/immolating_souleater.txt @@ -1,6 +1,6 @@ Name:Immolating Souleater ManaCost:2 -Types:Artifact Creature Dog +Types:Artifact Creature Phyrexian Dog PT:1/1 A:AB$ Pump | Cost$ PR | Defined$ Self | NumAtt$ 1 | SpellDescription$ CARDNAME gets +1/+0 until end of turn. DeckNeeds:Color$Red diff --git a/forge-gui/res/cardsfolder/i/impact_resonance.txt b/forge-gui/res/cardsfolder/i/impact_resonance.txt new file mode 100644 index 00000000000..6a6c29e3778 --- /dev/null +++ b/forge-gui/res/cardsfolder/i/impact_resonance.txt @@ -0,0 +1,13 @@ +Name:Impact Resonance +ManaCost:1 R +Types:Instant +T:Mode$ TurnBegin | Execute$ ResetDamage | Static$ True +SVar:ResetDamage:DB$ StoreSVar | SVar$ X | Type$ Number | Expression$ 0 +T:Mode$ DamageDone | ValidTarget$ Player,Permanent | Execute$ StoreDamage | Static$ True +SVar:StoreDamage:DB$ StoreSVar | SVar$ X | Type$ Calculate | Expression$ Y | ConditionCheckSVar$ Y | ConditionSVarCompare$ GTX +A:SP$ DealDamage | Cost$ 1 R | ValidTgts$ Creature | TargetMin$ MinTgts | TargetMax$ MaxTgts | NumDmg$ X | DividedAsYouChoose$ X | SpellDescription$ CARDNAME deals X damage divided as you choose among any number of target creatures, where X is the greatest amount of damage dealt by a source to a permanent or player this turn. +SVar:X:Number$0 +SVar:Y:TriggerCount$DamageAmount +SVar:MinTgts:SVar$X/LimitMax.1 +SVar:MaxTgts:Count$Valid Creature +Oracle:Impact Resonance deals X damage divided as you choose among any number of target creatures, where X is the greatest amount of damage dealt by a source to a permanent or player this turn. diff --git a/forge-gui/res/cardsfolder/i/impaler_shrike.txt b/forge-gui/res/cardsfolder/i/impaler_shrike.txt index c7a08496968..3280f21163d 100644 --- a/forge-gui/res/cardsfolder/i/impaler_shrike.txt +++ b/forge-gui/res/cardsfolder/i/impaler_shrike.txt @@ -1,6 +1,6 @@ Name:Impaler Shrike ManaCost:2 U U -Types:Creature Bird +Types:Creature Phyrexian Bird PT:3/1 K:Flying T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may sacrifice it. If you do, draw three cards. diff --git a/forge-gui/res/cardsfolder/i/inevitable_betrayal.txt b/forge-gui/res/cardsfolder/i/inevitable_betrayal.txt index c1b7fcae660..e9d109f0a3c 100644 --- a/forge-gui/res/cardsfolder/i/inevitable_betrayal.txt +++ b/forge-gui/res/cardsfolder/i/inevitable_betrayal.txt @@ -4,4 +4,4 @@ Types:Sorcery Colors:blue K:Suspend:3:1 U U A:SP$ ChangeZone | Cost$ 0 | Origin$ Library | Destination$ Battlefield | ValidTgts$ Opponent | ChangeType$ Creature | ChangeNum$ 1 | GainControl$ True | IsCurse$ True | StackDescription$ SpellDescription | SpellDescription$ Search target opponent's library for a creature card and put that card onto the battlefield under your control. Then that player shuffles. -Oracle:Suspend 3 — {1}{U}{U} (Rather than cast this card from your hand, pay {1}{U}{U} and exile it with three time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost.)\nSearch target opponent's library for a creature card and put that card onto the battlefield under your control. Then that player shuffles. +Oracle:Suspend 3—{1}{U}{U} (Rather than cast this card from your hand, you may pay {1}{U}{U} and exile it with three time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost.)\nSearch target opponent's library for a creature card and put that card onto the battlefield under your control. Then that player shuffles. diff --git a/forge-gui/res/cardsfolder/i/infernal_offering.txt b/forge-gui/res/cardsfolder/i/infernal_offering.txt index 39090272fda..40f9f46daad 100644 --- a/forge-gui/res/cardsfolder/i/infernal_offering.txt +++ b/forge-gui/res/cardsfolder/i/infernal_offering.txt @@ -7,8 +7,8 @@ SVar:DBRepeat:DB$ RepeatEach | RepeatPlayers$ ChosenAndYou | RepeatSubAbility$ D SVar:DBDraw:DB$ Draw | Defined$ Player.IsRemembered | NumCards$ 2 | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 SVar:X:RememberedLKI$Valid Creature.RememberedPlayerCtrl SVar:DBChoose:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | SubAbility$ DBReturnYou -SVar:DBReturnYou:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.YouCtrl | ChangeNum$ 1 | Hidden$ True | SubAbility$ DBReturnOpp -SVar:DBReturnOpp:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.ChosenCtrl | DefinedPlayer$ ChosenPlayer | Chooser$ ChosenPlayer | ChangeNum$ 1 | Hidden$ True | SubAbility$ DBCleanup +SVar:DBReturnYou:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.YouCtrl | ChangeNum$ 1 | Hidden$ True | Mandatory$ True | SubAbility$ DBReturnOpp +SVar:DBReturnOpp:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.ChosenCtrl | DefinedPlayer$ ChosenPlayer | Chooser$ ChosenPlayer | ChangeNum$ 1 | Hidden$ True | Mandatory$ True | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True AI:RemoveDeck:All AI:RemoveDeck:Random diff --git a/forge-gui/res/cardsfolder/i/inkmoth_nexus.txt b/forge-gui/res/cardsfolder/i/inkmoth_nexus.txt index cac53969a29..0c66646d893 100644 --- a/forge-gui/res/cardsfolder/i/inkmoth_nexus.txt +++ b/forge-gui/res/cardsfolder/i/inkmoth_nexus.txt @@ -2,6 +2,5 @@ Name:Inkmoth Nexus ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ Animate | Cost$ 1 | Defined$ Self | Power$ 1 | Toughness$ 1 | Types$ Creature,Artifact,Blinkmoth | Keywords$ Flying & Infect | SpellDescription$ CARDNAME becomes a 1/1 Blinkmoth artifact creature with flying and infect until end of turn. It's still a land. (It deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.) -SVar:Picture:http://www.wizards.com/global/images/magic/general/inkmoth_nexus.jpg -Oracle:{T}: Add {C}.\n{1}: Inkmoth Nexus becomes a 1/1 Blinkmoth artifact creature with flying and infect until end of turn. It's still a land. (It deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.) +A:AB$ Animate | Cost$ 1 | Defined$ Self | Power$ 1 | Toughness$ 1 | Types$ Creature,Artifact,Phyrexian,Blinkmoth | Keywords$ Flying & Infect | SpellDescription$ CARDNAME becomes a 1/1 Phyrexian Blinkmoth artifact creature with flying and infect until end of turn. It's still a land. (It deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.) +Oracle:{T}: Add {C}.\n{1}: Inkmoth Nexus becomes a 1/1 Phyrexian Blinkmoth artifact creature with flying and infect until end of turn. It's still a land. (It deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.) diff --git a/forge-gui/res/cardsfolder/i/inquisitor_exarch.txt b/forge-gui/res/cardsfolder/i/inquisitor_exarch.txt index 7da03c58d01..da0796fe4c6 100644 --- a/forge-gui/res/cardsfolder/i/inquisitor_exarch.txt +++ b/forge-gui/res/cardsfolder/i/inquisitor_exarch.txt @@ -1,6 +1,6 @@ Name:Inquisitor Exarch ManaCost:W W -Types:Creature Cleric +Types:Creature Phyrexian Cleric PT:2/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigCharm | TriggerDescription$ When CARDNAME enters the battlefield, ABILITY SVar:TrigCharm:DB$ Charm | Choices$ DBGain,DBLose diff --git a/forge-gui/res/cardsfolder/i/insatiable_souleater.txt b/forge-gui/res/cardsfolder/i/insatiable_souleater.txt index dce019267ac..bb5f4a5a2e1 100644 --- a/forge-gui/res/cardsfolder/i/insatiable_souleater.txt +++ b/forge-gui/res/cardsfolder/i/insatiable_souleater.txt @@ -1,6 +1,6 @@ Name:Insatiable Souleater ManaCost:4 -Types:Artifact Creature Beast +Types:Artifact Creature Phyrexian Beast PT:5/1 A:AB$ Pump | Cost$ PG | Defined$ Self | KW$ Trample | SpellDescription$ CARDNAME gains trample until end of turn. SVar:Picture:http://www.wizards.com/global/images/magic/general/insatiable_souleater.jpg diff --git a/forge-gui/res/cardsfolder/i/invader_parasite.txt b/forge-gui/res/cardsfolder/i/invader_parasite.txt index abd7a66d8f2..7fe0ae98070 100644 --- a/forge-gui/res/cardsfolder/i/invader_parasite.txt +++ b/forge-gui/res/cardsfolder/i/invader_parasite.txt @@ -1,6 +1,6 @@ Name:Invader Parasite ManaCost:3 R R -Types:Creature Insect +Types:Creature Phyrexian Insect PT:3/2 T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigExile | TriggerDescription$ Imprint — When CARDNAME enters the battlefield, exile target land. SVar:TrigExile:DB$ChangeZone | Imprint$ True | ValidTgts$ Land | TgtPrompt$ Select target land | Origin$ Battlefield | Destination$ Exile diff --git a/forge-gui/res/cardsfolder/j/jewel_eyed_cobra.txt b/forge-gui/res/cardsfolder/j/jewel_eyed_cobra.txt index 25db6a45a27..aafa65c2d9f 100644 --- a/forge-gui/res/cardsfolder/j/jewel_eyed_cobra.txt +++ b/forge-gui/res/cardsfolder/j/jewel_eyed_cobra.txt @@ -1,9 +1,9 @@ Name:Jewel-Eyed Cobra ManaCost:2 G -Types:Creature Smake +Types:Creature Snake PT:3/1 K:Deathtouch T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME dies, create a Treasure token. SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_treasure_sac | TokenOwner$ You DeckHas:Ability$Token -Oracle:When Jewel-Eyed Cobra dies, create a Treasure token. (It's an artifact with "{T}, Sacrifice this artifact: Add one mana of any color.") +Oracle:Deathtouch\nWhen Jewel-Eyed Cobra dies, create a Treasure token. (It's an artifact with "{T}, Sacrifice this artifact: Add one mana of any color.") diff --git a/forge-gui/res/cardsfolder/j/jin_gitaxias_core_augur.txt b/forge-gui/res/cardsfolder/j/jin_gitaxias_core_augur.txt index 69cbebe1c4e..041740e5576 100644 --- a/forge-gui/res/cardsfolder/j/jin_gitaxias_core_augur.txt +++ b/forge-gui/res/cardsfolder/j/jin_gitaxias_core_augur.txt @@ -1,6 +1,6 @@ Name:Jin-Gitaxias, Core Augur ManaCost:8 U U -Types:Legendary Creature Praetor +Types:Legendary Creature Phyrexian Praetor PT:5/4 K:Flash S:Mode$ Continuous | Affected$ Opponent | RaiseMaxHandSize$ -7 | Description$ Each opponent's maximum hand size is reduced by seven. diff --git a/forge-gui/res/cardsfolder/k/kaleidoscorch.txt b/forge-gui/res/cardsfolder/k/kaleidoscorch.txt index 829a793341a..284eb3cef9f 100644 --- a/forge-gui/res/cardsfolder/k/kaleidoscorch.txt +++ b/forge-gui/res/cardsfolder/k/kaleidoscorch.txt @@ -4,4 +4,4 @@ Types:Sorcery A:SP$ DealDamage | NumDmg$ X | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | SpellDescription$ Converge — CARDNAME deals X damage to any target, where X is the number of colors of mana spent to cast this spell. SVar:X:Count$Converge K:Flashback:4 R -Oracle:Converge - Radiant Flames deals X damage to any target, where X is the number of colors of mana spent to cast this spell.\nFlashback {4}{R} (You may cast this card from your graveyard for its flashback cost. Then exile it.) +Oracle:Converge — Kaleidoscorch deals X damage to any target, where X is the number of colors of mana spent to cast this spell.\nFlashback {4}{R} (You may cast this card from your graveyard for its flashback cost. Then exile it.) diff --git a/forge-gui/res/cardsfolder/k/keskit_the_flesh_sculptor.txt b/forge-gui/res/cardsfolder/k/keskit_the_flesh_sculptor.txt index 1738c661382..5731da94cea 100644 --- a/forge-gui/res/cardsfolder/k/keskit_the_flesh_sculptor.txt +++ b/forge-gui/res/cardsfolder/k/keskit_the_flesh_sculptor.txt @@ -1,6 +1,6 @@ Name:Keskit, the Flesh Sculptor ManaCost:2 B -Types:Legendary Creature Human Artificer +Types:Legendary Creature Phyrexian Human Artificer PT:1/3 K:Partner A:AB$ Dig | Cost$ T Sac<3/Artifact.Other;Creature.Other/other artifacts and/or creature> | DigNum$ 3 | ChangeNum$ 2 | DestinationZone2$ Graveyard | SpellDescription$ Look at the top three cards of your library. Put two of them into your hand and the other into your graveyard. diff --git a/forge-gui/res/cardsfolder/k/kiln_walker.txt b/forge-gui/res/cardsfolder/k/kiln_walker.txt index b024ccf97b2..d28cae595e3 100644 --- a/forge-gui/res/cardsfolder/k/kiln_walker.txt +++ b/forge-gui/res/cardsfolder/k/kiln_walker.txt @@ -1,6 +1,6 @@ Name:Kiln Walker ManaCost:3 -Types:Artifact Creature Construct +Types:Artifact Creature Phyrexian Construct PT:0/3 T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, it gets +3/+0 until end of turn. SVar:TrigPump:DB$ Pump | Defined$ Self | NumAtt$ 3 diff --git a/forge-gui/res/cardsfolder/k/kindred_summons.txt b/forge-gui/res/cardsfolder/k/kindred_summons.txt index 66d52cd0549..826d15be225 100644 --- a/forge-gui/res/cardsfolder/k/kindred_summons.txt +++ b/forge-gui/res/cardsfolder/k/kindred_summons.txt @@ -6,7 +6,6 @@ SVar:DBDigUntil:DB$ DigUntil | Amount$ X | ConditionCheckSVar$ X | ConditionSVar SVar:DBShuffle:DB$ Shuffle | Defined$ You SVar:X:Count$Valid Creature.ChosenType+YouCtrl AI:RemoveDeck:Random -#TODO: This could benefit from something like "Creature.YouCtrl+sharesCreatureTypeWithAnotherCreature" (doesn't exist in code yet) -SVar:NeedsToPlay:Creature.YouCtrl+inZoneBattlefield -SVar:Picture:http://www.wizards.com/global/images/magic/general/kindred_summons.jpg +SVar:NeedsToPlayVar:MaxTypes GE2 +SVar:MaxTypes:Count$MostProminentCreatureType Creature.YouCtrl Oracle:Choose a creature type. Reveal cards from the top of your library until you reveal X creature cards of the chosen type, where X is the number of creatures you control of that type. Put those cards onto the battlefield, then shuffle the rest of the revealed cards into your library. diff --git a/forge-gui/res/cardsfolder/k/krrik_son_of_yawgmoth.txt b/forge-gui/res/cardsfolder/k/krrik_son_of_yawgmoth.txt index e094fca4926..2d056b01b19 100644 --- a/forge-gui/res/cardsfolder/k/krrik_son_of_yawgmoth.txt +++ b/forge-gui/res/cardsfolder/k/krrik_son_of_yawgmoth.txt @@ -1,6 +1,6 @@ Name:K'rrik, Son of Yawgmoth ManaCost:4 B/P B/P B/P -Types:Legendary Creature Horror Minion +Types:Legendary Creature Phyrexian Horror Minion PT:2/2 K:Lifelink S:Mode$ Continuous | Affected$ You | AddKeyword$ PayLifeInsteadOf:B | Description$ For each {B} in a cost, you may pay 2 life rather than pay that mana. diff --git a/forge-gui/res/cardsfolder/l/labro_bot.txt b/forge-gui/res/cardsfolder/l/labro_bot.txt index 4db662b2404..7dec417cedb 100644 --- a/forge-gui/res/cardsfolder/l/labro_bot.txt +++ b/forge-gui/res/cardsfolder/l/labro_bot.txt @@ -1,6 +1,6 @@ Name:Labro Bot ManaCost:5 -Types:Artifact Host Creature Dog +Types:Host Artifact Creature Dog PT:3/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | Host$ True | TriggerDescription$ When this creature enters the battlefield, return target host card or card with augment from your graveyard to your hand. SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Host.YouOwn,Card.YouOwn+withAugment diff --git a/forge-gui/res/cardsfolder/l/laelia_the_blade_reforged.txt b/forge-gui/res/cardsfolder/l/laelia_the_blade_reforged.txt index 614f5c22632..48a33df93c9 100644 --- a/forge-gui/res/cardsfolder/l/laelia_the_blade_reforged.txt +++ b/forge-gui/res/cardsfolder/l/laelia_the_blade_reforged.txt @@ -8,6 +8,6 @@ SVar:TrigExile:DB$ Dig | Defined$ You | DigNum$ 1 | ChangeNum$ All | Destination SVar:DBEffect:DB$ Effect | StaticAbilities$ STPlay | RememberObjects$ Remembered | ForgetOnMoved$ Exile | SubAbility$ DBCleanup SVar:STPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may play this card this turn. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -T:Mode$ ChangesZoneAll | ValidCause$ SpellAbility.YouCtrl | Origin$ Library,Graveyard | Destination$ Exile | ValidCards$ Card.YouOwn | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ Whenever a spell or ability you control exiles one or more cards from your library and/or your graveyard, put a +1/+1 counter on NICKNAME. +T:Mode$ ChangesZoneAll | Origin$ Library,Graveyard | Destination$ Exile | ValidCards$ Card.YouOwn | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ Whenever one or more cards are put into exile from your library and/or your graveyard, put a +1/+1 counter on NICKNAME. SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 -Oracle:Haste\nWhenever Laelia, the Blade Reforged attacks, exile the top card of your library. You may play that card this turn.\nWhenever a spell or ability you control exiles one or more cards from your library and/or your graveyard, put a +1/+1 counter on Laelia. +Oracle:Haste\nWhenever Laelia, the Blade Reforged attacks, exile the top card of your library. You may play that card this turn.\nWhenever one or more cards are put into exile from your library and/or your graveyard, put a +1/+1 counter on Laelia. diff --git a/forge-gui/res/cardsfolder/l/lashwrithe.txt b/forge-gui/res/cardsfolder/l/lashwrithe.txt index 28ba70efa3d..375fd596d50 100644 --- a/forge-gui/res/cardsfolder/l/lashwrithe.txt +++ b/forge-gui/res/cardsfolder/l/lashwrithe.txt @@ -10,4 +10,4 @@ AI:RemoveDeck:Random DeckNeeds:Color$Black & Type$Swamp DeckHas:Ability$Token SVar:Picture:http://www.wizards.com/global/images/magic/general/lashwrithe.jpg -Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Germ creature token, then attach this to it.)\nEquipped creature gets +1/+1 for each Swamp you control.\nEquip {B/P}{B/P} ({B/P} can be paid with either {B} or 2 life.) +Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Phyrexian Germ creature token, then attach this to it.)\nEquipped creature gets +1/+1 for each Swamp you control.\nEquip {B/P}{B/P} ({B/P} can be paid with either {B} or 2 life.) diff --git a/forge-gui/res/cardsfolder/l/lazotep_chancellor.txt b/forge-gui/res/cardsfolder/l/lazotep_chancellor.txt index 8cbd2d8246e..9f9ffb9cdb5 100644 --- a/forge-gui/res/cardsfolder/l/lazotep_chancellor.txt +++ b/forge-gui/res/cardsfolder/l/lazotep_chancellor.txt @@ -2,8 +2,8 @@ Name:Lazotep Chancellor ManaCost:U B Types:Creature Zombie Wizard PT:1/3 -T:Mode$ Discarded | ValidCard$ Card.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigAmass | TriggerDescription$ Whenever you cycle or discard a card, you may pay {1}. If you do, amass 2. +T:Mode$ Discarded | ValidCard$ Card.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigAmass | TriggerDescription$ Whenever you discard a card, you may pay {1}. If you do, amass 2. (Put two +1/+1 counters on an Army you control. If you don't control one, create a 0/0 black Zombie Army creature token first.) SVar:TrigAmass:DB$ Amass | Num$ 2 DeckHints:Ability$Amass & Type$Zombie & Ability$Discard DeckHas:Ability$Amass & Ability$Counters & Ability$Token -Oracle:Whenever you cycle or discard a card, you may pay {1}. If you do, amass 2. (Put two +1/+1 counters on an Army you control. If you don't control one, create a 0/0 black Zombie Army creature token first.) +Oracle:Whenever you discard a card, you may pay {1}. If you do, amass 2. (Put two +1/+1 counters on an Army you control. If you don't control one, create a 0/0 black Zombie Army creature token first.) diff --git a/forge-gui/res/cardsfolder/l/lens_flare.txt b/forge-gui/res/cardsfolder/l/lens_flare.txt index ca80a722bf7..f390d89e954 100644 --- a/forge-gui/res/cardsfolder/l/lens_flare.txt +++ b/forge-gui/res/cardsfolder/l/lens_flare.txt @@ -3,4 +3,4 @@ ManaCost:4 W Types:Instant K:Affinity:Artifact A:SP$ DealDamage | Cost$ 4 W | ValidTgts$ Creature.attacking,Creature.blocking | TgtPrompt$ Select target attacking or blocking creature | NumDmg$ 5 | SpellDescription$ CARDNAME deals 5 damage to target attacking or blocking creature. -Oracle:Lens Flare deals 5 damage to target attacking or blocking creature. +Oracle:Affinity for artifacts (This spell costs {1} less to cast for each artifact you control.)\nLens Flare deals 5 damage to target attacking or blocking creature. diff --git a/forge-gui/res/cardsfolder/l/liege_of_the_hollows.txt b/forge-gui/res/cardsfolder/l/liege_of_the_hollows.txt index e4b0f4582d6..ac7736d3bf3 100644 --- a/forge-gui/res/cardsfolder/l/liege_of_the_hollows.txt +++ b/forge-gui/res/cardsfolder/l/liege_of_the_hollows.txt @@ -3,7 +3,7 @@ ManaCost:2 G G Types:Creature Spirit PT:3/4 T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ RepeatPayment | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, each player may pay any amount of mana. Then each player creates a number of 1/1 green Squirrel creature tokens equal to the amount of mana they paid this way. -SVar:RepeatPayment:DB$ RepeatEach | RepeatPlayers$ Player | StartingWithActivator$ True | RepeatSubAbility$ DBPay | StackDescription$ When CARDNAME dies, each player may pay any amount of mana. Then each player creates a number of 1/1 green Squirrel creature tokens equal to the amount of mana they paid this way. +SVar:RepeatPayment:DB$ RepeatEach | RepeatPlayers$ Player | StartingWithActivator$ True | ChangeZoneTable$ True | RepeatSubAbility$ DBPay | StackDescription$ When CARDNAME dies, each player may pay any amount of mana. Then each player creates a number of 1/1 green Squirrel creature tokens equal to the amount of mana they paid this way. SVar:DBPay:DB$ ChooseNumber | Defined$ Player.IsRemembered | ChooseAnyNumber$ True | ListTitle$ Pay Any Mana | AILogic$ MaxForAnyController | SubAbility$ DBToken # TODO: ideally the tokens should be created simultaneously after all the players have finished paying mana, but that's difficult to implement. SVar:DBToken:DB$ Token | TokenAmount$ X | TokenScript$ g_1_1_squirrel | TokenOwner$ Player.IsRemembered | LegacyImage$ g 1 1 squirrel wth | UnlessCost$ X | UnlessPayer$ Player.IsRemembered | UnlessSwitched$ True diff --git a/forge-gui/res/cardsfolder/l/lonis_cryptozoologist.txt b/forge-gui/res/cardsfolder/l/lonis_cryptozoologist.txt index 6344d89d46d..816ea0a710b 100644 --- a/forge-gui/res/cardsfolder/l/lonis_cryptozoologist.txt +++ b/forge-gui/res/cardsfolder/l/lonis_cryptozoologist.txt @@ -2,7 +2,7 @@ Name:Lonis, Cryptozoologist ManaCost:G U Types:Legendary Creature Snake Elf Scout PT:1/2 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.YouCtrl+nonToken+Other | TriggerZones$ Battlefield | Execute$ TrigInvestigate | TriggerDescription$ Whenever another nontoken creature enters the battlefield under your control, investigate. (Create a colorless Clue artifact token with "{2}, Sacrifice this artifact: Draw a card.") +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.YouCtrl+nonToken+Other | TriggerZones$ Battlefield | Execute$ TrigInvestigate | TriggerDescription$ Whenever another nontoken creature enters the battlefield under your control, investigate. SVar:TrigInvestigate:DB$ Investigate A:AB$ Dig | Cost$ T Sac | ValidTgts$ Player.Opponent | TgtPrompt$ Select target opponent | Reveal$ True | NoMove$ True | DigNum$ X | RememberRevealed$ True | DestinationZone$ Library | SubAbility$ PickOne | SpellDescription$ Target opponent reveals the top X cards of their library. You may put a nonland permanent card with mana value X or less from among them onto the battlefield under your control. That player puts the rest on the bottom of their library in a random order. SVar:PickOne:DB$ ChooseCard | Defined$ You | Amount$ 1 | Mandatory$ True | ChoiceTitle$ Choose a nonland permanent to put on the battlefield under your control | Choices$ Permanent.nonLand+cmcLEX+IsRemembered | ChoiceZone$ Library | SubAbility$ MoveChosen @@ -12,4 +12,4 @@ SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Count$xPaid DeckHints:Ability$Investigate DeckHas:Ability$Investigate & Ability$Token -Oracle:Whenever another nontoken creature enters the battlefield under your control, investigate. (Create a colorless Clue artifact token with "{2}, Sacrifice this artifact: Draw a card.")\n{T}, Sacrifice X Clues: Target opponent reveals the top X cards of their library. You may put a nonland permanent card with mana value X or less from among them onto the battlefield under your control. That player puts the rest on the bottom of their library in a random order. +Oracle:Whenever another nontoken creature enters the battlefield under your control, investigate.\n{T}, Sacrifice X Clues: Target opponent reveals the top X cards of their library. You may put a nonland permanent card with mana value X or less from among them onto the battlefield under your control. That player puts the rest on the bottom of their library in a random order. diff --git a/forge-gui/res/cardsfolder/l/lost_leonin.txt b/forge-gui/res/cardsfolder/l/lost_leonin.txt index f71231ca017..f56cf8e5ba3 100644 --- a/forge-gui/res/cardsfolder/l/lost_leonin.txt +++ b/forge-gui/res/cardsfolder/l/lost_leonin.txt @@ -1,6 +1,6 @@ Name:Lost Leonin ManaCost:1 W -Types:Creature Cat Soldier +Types:Creature Phyrexian Cat Soldier PT:2/1 K:Infect SVar:Picture:http://www.wizards.com/global/images/magic/general/lost_leonin.jpg diff --git a/forge-gui/res/cardsfolder/l/loxodon_convert.txt b/forge-gui/res/cardsfolder/l/loxodon_convert.txt index b2321cb0fa2..7bc326afa55 100644 --- a/forge-gui/res/cardsfolder/l/loxodon_convert.txt +++ b/forge-gui/res/cardsfolder/l/loxodon_convert.txt @@ -1,6 +1,6 @@ Name:Loxodon Convert ManaCost:3 W -Types:Creature Elephant Soldier +Types:Creature Phyrexian Elephant Soldier PT:4/2 SVar:Picture:http://www.wizards.com/global/images/magic/general/loxodon_convert.jpg Oracle: diff --git a/forge-gui/res/cardsfolder/l/lurking_evil.txt b/forge-gui/res/cardsfolder/l/lurking_evil.txt index ec360c36694..571c6fac3e5 100644 --- a/forge-gui/res/cardsfolder/l/lurking_evil.txt +++ b/forge-gui/res/cardsfolder/l/lurking_evil.txt @@ -1,8 +1,7 @@ Name:Lurking Evil ManaCost:B B B Types:Enchantment -A:AB$ Animate | Cost$ PayLife | Types$ Creature,Horror | Power$ 4 | Toughness$ 4 | Keywords$ Flying | RemoveCardTypes$ True | Duration$ Permanent | CostDesc$ Pay half your life, rounded up: | SpellDescription$ CARDNAME becomes a 4/4 Horror creature with flying. +A:AB$ Animate | Cost$ PayLife | Types$ Creature,Phyrexian,Horror | Power$ 4 | Toughness$ 4 | Keywords$ Flying | RemoveCardTypes$ True | Duration$ Permanent | CostDesc$ Pay half your life, rounded up: | SpellDescription$ CARDNAME becomes a 4/4 Phyrexian Horror creature with flying. SVar:X:Count$YourLifeTotal/HalfUp AI:RemoveDeck:Random -SVar:Picture:http://www.wizards.com/global/images/magic/general/lurking_evil.jpg -Oracle:Pay half your life, rounded up: Lurking Evil becomes a 4/4 Horror creature with flying. +Oracle:Pay half your life, rounded up: Lurking Evil becomes a 4/4 Phyrexian Horror creature with flying. diff --git a/forge-gui/res/cardsfolder/l/lurking_skirge.txt b/forge-gui/res/cardsfolder/l/lurking_skirge.txt index 1c07f73387d..0b7c3233795 100644 --- a/forge-gui/res/cardsfolder/l/lurking_skirge.txt +++ b/forge-gui/res/cardsfolder/l/lurking_skirge.txt @@ -1,7 +1,6 @@ Name:Lurking Skirge ManaCost:1 B Types:Enchantment -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Battlefield | ValidCard$ Creature.OppOwn | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When a creature is put into an opponent's graveyard from the battlefield, if CARDNAME is an enchantment, CARDNAME becomes a 3/2 Imp creature with flying. -SVar:TrigAnimate:DB$ Animate | Defined$ Self | Power$ 3 | Toughness$ 2 | Types$ Creature,Imp | Keywords$ Flying | RemoveCardTypes$ True | Duration$ Permanent -SVar:Picture:http://www.wizards.com/global/images/magic/general/lurking_skirge.jpg -Oracle:When a creature is put into an opponent's graveyard from the battlefield, if Lurking Skirge is an enchantment, Lurking Skirge becomes a 3/2 Imp creature with flying. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Battlefield | ValidCard$ Creature.OppOwn | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When a creature is put into an opponent's graveyard from the battlefield, if CARDNAME is an enchantment, CARDNAME becomes a 3/2 Phyrexian Imp creature with flying. +SVar:TrigAnimate:DB$ Animate | Defined$ Self | Power$ 3 | Toughness$ 2 | Types$ Creature,Phyrexian,Imp | Keywords$ Flying | RemoveCardTypes$ True | Duration$ Permanent +Oracle:When a creature is put into an opponent's graveyard from the battlefield, if Lurking Skirge is an enchantment, Lurking Skirge becomes a 3/2 Phyrexian Imp creature with flying. diff --git a/forge-gui/res/cardsfolder/m/magus_of_the_bridge.txt b/forge-gui/res/cardsfolder/m/magus_of_the_bridge.txt index 6344c11f786..8b2fe7afb04 100644 --- a/forge-gui/res/cardsfolder/m/magus_of_the_bridge.txt +++ b/forge-gui/res/cardsfolder/m/magus_of_the_bridge.txt @@ -2,9 +2,9 @@ Name:Magus of the Bridge ManaCost:B B B Types:Creature Human Wizard PT:4/4 -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.YouCtrl+nonToken | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever a nontoken creature you control is put into your graveyard from the battlefield, create a 2/2 black zombie creature token. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.YouCtrl+nonToken | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever a nontoken creature is put into your graveyard from the battlefield, create a 2/2 black Zombie creature token. SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ b_2_2_zombie | TokenOwner$ You T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.OppOwn | Execute$ TrigChange | TriggerDescription$ When a creature is put into an opponent's graveyard from the battlefield, exile CARDNAME. SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile DeckHas:Ability$Token -Oracle:Whenever a nontoken creature you control is put into your graveyard from the battlefield, create a 2/2 black zombie creature token.\nWhen a creature is put into an opponent's graveyard from the battlefield, exile Magus of the Bridge. +Oracle:Whenever a nontoken creature is put into your graveyard from the battlefield, create a 2/2 black Zombie creature token.\nWhen a creature is put into an opponent's graveyard from the battlefield, exile Magus of the Bridge. diff --git a/forge-gui/res/cardsfolder/m/marauding_knight.txt b/forge-gui/res/cardsfolder/m/marauding_knight.txt index d1bc45e3d63..1a593ad744e 100644 --- a/forge-gui/res/cardsfolder/m/marauding_knight.txt +++ b/forge-gui/res/cardsfolder/m/marauding_knight.txt @@ -1,6 +1,6 @@ Name:Marauding Knight ManaCost:2 B B -Types:Creature Zombie Knight +Types:Creature Phyrexian Zombie Knight PT:2/2 K:Protection from white S:Mode$ Continuous | Affected$ Card.Self | AddPower$ X | AddToughness$ X | Description$ CARDNAME gets +1/+1 for each Plains your opponents control. diff --git a/forge-gui/res/cardsfolder/m/martyrs_cause.txt b/forge-gui/res/cardsfolder/m/martyrs_cause.txt index 0252267dcc1..0e6479ff3e0 100644 --- a/forge-gui/res/cardsfolder/m/martyrs_cause.txt +++ b/forge-gui/res/cardsfolder/m/martyrs_cause.txt @@ -4,7 +4,7 @@ Types:Enchantment A:AB$ ChooseSource | Cost$ Sac<1/Creature> | Choices$ Card,Emblem | AILogic$ NeedsPrevention | SubAbility$ DBEffect | SpellDescription$ The next time a source of your choice would deal damage to any target this turn, prevent that damage. SVar:DBEffect:DB$ Effect | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target to prevent damage to | Triggers$ OutOfSight | ReplacementEffects$ RPreventNextFromSource | RememberObjects$ Targeted | SubAbility$ DBCleanup | ConditionDefined$ ChosenCard | ConditionPresent$ Card,Emblem | ConditionCompare$ GE1 SVar:OutOfSight:Mode$ ChangesZone | TriggerZones$ Command | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.IsRemembered | Execute$ ExileEffect | Static$ True -SVar:RPreventNextFromSource:Event$ DamageDone | ValidSource$ Card.ChosenCard,Emblem.ChosenCard | ValidTarget$ Card.IsRemembered,Player.IsRemembered | ReplaceWith$ ExileEffect | PreventionEffect$ True | Description$ The next time the chosen source deals damage to the any target, prevent that damage. +SVar:RPreventNextFromSource:Event$ DamageDone | ValidSource$ Card.ChosenCard,Emblem.ChosenCard | ValidTarget$ Card.IsRemembered,Player.IsRemembered | ReplaceWith$ ExileEffect | PreventionEffect$ True | Description$ The next time the chosen source deals damage to the target, prevent that damage. SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/m/massacre_wurm.txt b/forge-gui/res/cardsfolder/m/massacre_wurm.txt index fa97346352b..b7b41121583 100644 --- a/forge-gui/res/cardsfolder/m/massacre_wurm.txt +++ b/forge-gui/res/cardsfolder/m/massacre_wurm.txt @@ -1,6 +1,6 @@ Name:Massacre Wurm ManaCost:3 B B B -Types:Creature Wurm +Types:Creature Phyrexian Wurm PT:6/5 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigMassacre | TriggerDescription$ When CARDNAME enters the battlefield, creatures your opponents control get -2/-2 until end of turn. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.OppCtrl | TriggerZones$ Battlefield | Execute$ TrigLoseLife | TriggerDescription$ Whenever a creature an opponent controls dies, that player loses 2 life. diff --git a/forge-gui/res/cardsfolder/m/master_of_death.txt b/forge-gui/res/cardsfolder/m/master_of_death.txt index 2889df1d949..f6845616466 100644 --- a/forge-gui/res/cardsfolder/m/master_of_death.txt +++ b/forge-gui/res/cardsfolder/m/master_of_death.txt @@ -4,8 +4,8 @@ Types:Creature Zombie Wizard PT:3/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSurveil | TriggerDescription$ When CARDNAME enters the battlefield, surveil 2. (Look at the top two cards of your library, then put any number of them into your graveyard and the rest on top of your library in any order.) SVar:TrigSurveil:DB$ Surveil | Defined$ You | Amount$ 2 -T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | IsPresent$ Card.StrictlySelf | PresentZone$ Graveyard | PresentPlayer$ You | TriggerZones$ Graveyard | OptionalDecider$ You | Execute$ TrigReturn | TriggerDescription$ At the beginning of your upkeep, if CARDNAME is in your graveyard, you may pay 1 life. If you do, return CARDNAME to your hand. +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | IsPresent$ Card.StrictlySelf | PresentZone$ Graveyard | PresentPlayer$ You | TriggerZones$ Graveyard | OptionalDecider$ You | Execute$ TrigReturn | TriggerDescription$ At the beginning of your upkeep, if CARDNAME is in your graveyard, you may pay 1 life. If you do, return it to your hand. SVar:TrigReturn:AB$ChangeZone | Cost$ PayLife<1> | Defined$ Self | Origin$ Graveyard | Destination$ Hand SVar:SacMe:2 SVar:DiscardMe:1 -Oracle:When Master of Death enters the battlefield, surveil 2.\nAt the beginning of your upkeep, if Master of Death is in your graveyard, you may pay 1 life. If you do, return Master of Death to your hand. +Oracle:When Master of Death enters the battlefield, surveil 2.\nAt the beginning of your upkeep, if Master of Death is in your graveyard, you may pay 1 life. If you do, return it to your hand. diff --git a/forge-gui/res/cardsfolder/m/master_splicer.txt b/forge-gui/res/cardsfolder/m/master_splicer.txt index af1f77b9ca0..3136cb9001a 100644 --- a/forge-gui/res/cardsfolder/m/master_splicer.txt +++ b/forge-gui/res/cardsfolder/m/master_splicer.txt @@ -1,10 +1,9 @@ Name:Master Splicer ManaCost:3 W -Types:Creature Human Artificer +Types:Creature Phyrexian Human Artificer PT:1/1 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a 3/3 colorless Golem artifact creature token. -SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_3_3_a_golem | TokenOwner$ You | LegacyImage$ c 3 3 a golem nph +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a 3/3 colorless Phyrexian Golem artifact creature token. +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_3_3_a_phyrexian_golem | TokenOwner$ You S:Mode$ Continuous | Affected$ Creature.Golem+YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Golems you control get +1/+1. DeckHas:Ability$Token -SVar:Picture:http://www.wizards.com/global/images/magic/general/master_splicer.jpg -Oracle:When Master Splicer enters the battlefield, create a 3/3 colorless Golem artifact creature token.\nGolems you control get +1/+1. +Oracle:When Master Splicer enters the battlefield, create a 3/3 colorless Phyrexian Golem artifact creature token.\nGolems you control get +1/+1. diff --git a/forge-gui/res/cardsfolder/m/maul_splicer.txt b/forge-gui/res/cardsfolder/m/maul_splicer.txt index 8a9b6374c39..50656f22919 100644 --- a/forge-gui/res/cardsfolder/m/maul_splicer.txt +++ b/forge-gui/res/cardsfolder/m/maul_splicer.txt @@ -1,9 +1,8 @@ Name:Maul Splicer ManaCost:6 G -Types:Creature Human Artificer +Types:Creature Phyrexian Human Artificer PT:1/1 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, enters the battlefield, create two 3/3 colorless Golem artifact creature tokens. -SVar:TrigToken:DB$ Token | TokenAmount$ 2 | TokenScript$ c_3_3_a_golem | TokenOwner$ You | LegacyImage$ c 3 3 a golem nph +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create two 3/3 colorless Phyrexian Golem artifact creature tokens. +SVar:TrigToken:DB$ Token | TokenAmount$ 2 | TokenScript$ c_3_3_a_phyrexian_golem | TokenOwner$ You S:Mode$ Continuous | Affected$ Creature.Golem+YouCtrl | AddKeyword$ Trample | Description$ Golem creatures you control have trample. -SVar:Picture:http://www.wizards.com/global/images/magic/general/maul_splicer.jpg -Oracle:When Maul Splicer enters the battlefield, create two 3/3 colorless Golem artifact creature tokens.\nGolem creatures you control have trample. +Oracle:When Maul Splicer enters the battlefield, create two 3/3 colorless Phyrexian Golem artifact creature tokens.\nGolem creatures you control have trample. diff --git a/forge-gui/res/cardsfolder/m/mistral_singer.txt b/forge-gui/res/cardsfolder/m/mistral_singer.txt index 1dbdd27545b..8c1636034f4 100644 --- a/forge-gui/res/cardsfolder/m/mistral_singer.txt +++ b/forge-gui/res/cardsfolder/m/mistral_singer.txt @@ -1,6 +1,6 @@ Name:Mistral Singer ManaCost:2 U -Types:Creature Human Soldier +Types:Creature Siren PT:2/2 K:Flying K:Prowess diff --git a/forge-gui/res/cardsfolder/m/modo_the_gnarled_oracle.txt b/forge-gui/res/cardsfolder/m/modo_the_gnarled_oracle.txt index 14643ec27c6..6c25464a234 100644 --- a/forge-gui/res/cardsfolder/m/modo_the_gnarled_oracle.txt +++ b/forge-gui/res/cardsfolder/m/modo_the_gnarled_oracle.txt @@ -2,7 +2,7 @@ Name:M'Odo, the Gnarled Oracle ManaCost:B U G Types:Legendary Creature Zombie Elf Wizard PT:0/3 -A:AB$ DigUntil | Cost$ X Discard<1/Card> | ValidTgts$ Player | TgtPrompt$ Select target player | Valid$ Creature.cmcLEX | FoundDestination$ Battlefield | RevealedDestination$ Library | Shuffle$ True | GainControl$ True | CostDesc$ Eminence — {X}, Discard a card: | SpellDescription$ Target player reveals cards from the top of their library until they reveal a creature card with mana value X or less. Put that card onto the battlefield under your control, then that player shuffles the rest into their library. Activate this ability only if M'Odo, the Gnarled Oracle is on the battlefield or in the command zone. -A:AB$ DigUntil | Cost$ X Discard<1/Card> | ValidTgts$ Player | TgtPrompt$ Select target player | Valid$ Creature.cmcLEX | FoundDestination$ Battlefield | RevealedDestination$ Library | Shuffle$ True | GainControl$ True | ActivationZone$ Command | CostDesc$ Eminence — {X}, Discard a card: | SpellDescription$ Target player reveals cards from the top of their library until they reveal a creature card with mana value X or less. Put that card onto the battlefield under your control, then that player shuffles the rest into their library. Activate this ability only if M'Odo, the Gnarled Oracle is on the battlefield or in the command zone. +A:AB$ DigUntil | Cost$ X Discard<1/Card> | ValidTgts$ Player | TgtPrompt$ Select target player | Valid$ Creature.cmcLEX | FoundDestination$ Battlefield | RevealedDestination$ Library | Shuffle$ True | GainControl$ True | CostDesc$ Eminence — {X}, Discard a card: | SpellDescription$ Target player reveals cards from the top of their library until they reveal a creature card with converted mana cost X or less. Put that card onto the battlefield under your control, then that player shuffles the rest into their library. Activate this ability only if CARDNAME is on the battlefield or in the command zone. +A:AB$ DigUntil | Cost$ X Discard<1/Card> | ValidTgts$ Player | TgtPrompt$ Select target player | Valid$ Creature.cmcLEX | FoundDestination$ Battlefield | RevealedDestination$ Library | Shuffle$ True | GainControl$ True | ActivationZone$ Command | CostDesc$ Eminence — {X}, Discard a card: | SpellDescription$ Target player reveals cards from the top of their library until they reveal a creature card with converted mana cost X or less. Put that card onto the battlefield under your control, then that player shuffles the rest into their library. Activate this ability only if CARDNAME is on the battlefield or in the command zone. SVar:X:Count$xPaid -Oracle:Eminence — {X}, Discard a card: Target player reveals cards from the top of their library until they reveal a creature card with mana value X or less. Put that card onto the battlefield under your control, then that player shuffles the rest into their library. Activate this ability only if M'Odo, the Gnarled Oracle is on the battlefield or in the command zone. +Oracle:Eminence — {X}, Discard a card: Target player reveals cards from the top of their library until they reveal a creature card with converted mana cost X or less. Put that card onto the battlefield under your control, then that player shuffles the rest into their library. Activate this ability only if M'Odo, the Gnarled Oracle is on the battlefield or in the command zone. diff --git a/forge-gui/res/cardsfolder/m/moltensteel_dragon.txt b/forge-gui/res/cardsfolder/m/moltensteel_dragon.txt index 0901ce62b60..7c336c8428e 100644 --- a/forge-gui/res/cardsfolder/m/moltensteel_dragon.txt +++ b/forge-gui/res/cardsfolder/m/moltensteel_dragon.txt @@ -1,6 +1,6 @@ Name:Moltensteel Dragon ManaCost:4 PR PR -Types:Artifact Creature Dragon +Types:Artifact Creature Phyrexian Dragon PT:4/4 K:Flying A:AB$ Pump | Cost$ PR | Defined$ Self | NumAtt$ 1 | SpellDescription$ CARDNAME gets +1/+0 until end of turn. diff --git a/forge-gui/res/cardsfolder/m/monoskelion.txt b/forge-gui/res/cardsfolder/m/monoskelion.txt index 0ca2ae3045e..617989b4ab1 100644 --- a/forge-gui/res/cardsfolder/m/monoskelion.txt +++ b/forge-gui/res/cardsfolder/m/monoskelion.txt @@ -5,4 +5,4 @@ PT:1/1 K:etbCounter:P1P1:1 A:AB$ DealDamage | AILogic$ Triskelion | Cost$ 1 SubCounter<1/P1P1> | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 1 | SpellDescription$ CARDNAME deals 1 damage to any target. DeckHas:Ability$Counters -Oracle:Monoskelion enters the battlefield with a +1/+1 counter on it.\n{1}, Remove a +1/+1 counter from Monoskelion: It deals 1 damage to any target. +Oracle:Monoskelion enters the battlefield with a +1/+1 counter on it.\n{1}, Remove a +1/+1 counter from Monoskelion: Monoskelion deals 1 damage to any target. diff --git a/forge-gui/res/cardsfolder/m/morinfen.txt b/forge-gui/res/cardsfolder/m/morinfen.txt index d7c22115a4d..0245a99c507 100644 --- a/forge-gui/res/cardsfolder/m/morinfen.txt +++ b/forge-gui/res/cardsfolder/m/morinfen.txt @@ -1,6 +1,6 @@ Name:Morinfen ManaCost:3 B B -Types:Legendary Creature Horror +Types:Legendary Creature Phyrexian Horror PT:5/4 K:Flying K:Cumulative upkeep:PayLife<1>:Pay 1 life. diff --git a/forge-gui/res/cardsfolder/m/moritte_of_the_frost.txt b/forge-gui/res/cardsfolder/m/moritte_of_the_frost.txt index dd07f697657..85a6bb18907 100644 --- a/forge-gui/res/cardsfolder/m/moritte_of_the_frost.txt +++ b/forge-gui/res/cardsfolder/m/moritte_of_the_frost.txt @@ -4,7 +4,7 @@ Types:Legendary Snow Creature Shapeshifter PT:0/0 K:Changeling K:ETBReplacement:Copy:DBCopy:Optional -SVar:DBCopy:DB$ Clone | Choices$ Permanent.Other+YouCtrl | AddTypes$ Legendary & Snow | SubAbility$ DBConditionEffect | AddKeywords$ Changeling (This card is every creature type.) | SpellDescription$ You may have Moritte of the Frost enter the battlefield as a copy of a permanent you control, except it’s legendary and snow in addition to its other types and, if it’s a creature, it enters with two additional +1/+1 counters on it and has changeling. +SVar:DBCopy:DB$ Clone | Choices$ Permanent.Other+YouCtrl | AddTypes$ Legendary & Snow | SubAbility$ DBConditionEffect | AddKeywords$ Changeling | SpellDescription$ You may have Moritte of the Frost enter the battlefield as a copy of a permanent you control, except it’s legendary and snow in addition to its other types and, if it’s a creature, it enters with two additional +1/+1 counters on it and has changeling. SVar:DBConditionEffect:DB$ Effect | RememberObjects$ Self | Name$ Moritte of the Frost Effect | ReplacementEffects$ ETBCreat SVar:ETBCreat:Event$ Moved | ValidCard$ Creature.IsRemembered | Destination$ Battlefield | ReplaceWith$ DBPutP1P1 | Description$ If it’s a creature, it enters with two additional +1/+1 counters on it. SVar:DBPutP1P1:DB$ PutCounter | Defined$ ReplacedCard | CounterType$ P1P1 | ETB$ True | CounterNum$ 2 | SubAbility$ ToBattlefield diff --git a/forge-gui/res/cardsfolder/m/mortarpod.txt b/forge-gui/res/cardsfolder/m/mortarpod.txt index 45bbfee8ffe..f756e1d38cc 100644 --- a/forge-gui/res/cardsfolder/m/mortarpod.txt +++ b/forge-gui/res/cardsfolder/m/mortarpod.txt @@ -8,4 +8,4 @@ SVar:Damage:AB$DealDamage | Cost$ Sac<1/CARDNAME> | ValidTgts$ Creature,Player,P DeckHas:Ability$Token AI:RemoveDeck:Random SVar:Picture:http://www.wizards.com/global/images/magic/general/mortarpod.jpg -Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Germ creature token, then attach this to it.)\nEquipped creature gets +0/+1 and has "Sacrifice this creature: This creature deals 1 damage to any target."\nEquip {2} +Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Phyrexian Germ creature token, then attach this to it.)\nEquipped creature gets +0/+1 and has "Sacrifice this creature: This creature deals 1 damage to any target."\nEquip {2} diff --git a/forge-gui/res/cardsfolder/m/mortis_dogs.txt b/forge-gui/res/cardsfolder/m/mortis_dogs.txt index b33622d04f2..4a74268b588 100644 --- a/forge-gui/res/cardsfolder/m/mortis_dogs.txt +++ b/forge-gui/res/cardsfolder/m/mortis_dogs.txt @@ -1,6 +1,6 @@ Name:Mortis Dogs ManaCost:3 B -Types:Creature Dog +Types:Creature Phyrexian Dog PT:2/2 T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, it gets +2/+0 until end of turn. SVar:TrigPump:DB$ Pump | Defined$ Self | NumAtt$ 2 diff --git a/forge-gui/res/cardsfolder/m/murktide_regent.txt b/forge-gui/res/cardsfolder/m/murktide_regent.txt index d5628f94fc1..e7b76804d8c 100644 --- a/forge-gui/res/cardsfolder/m/murktide_regent.txt +++ b/forge-gui/res/cardsfolder/m/murktide_regent.txt @@ -10,4 +10,4 @@ T:Mode$ ChangesZone | ValidCard$ Instant,Sorcery | Origin$ Graveyard | Destinati SVar:TrigPutCounter:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ 1 DeckNeeds:Type$Instant|Sorcery DeckHas:Ability$Counters -Oracle:Delve (Each card you exile from your graveyard while casting this spell pays for {1}.)\nFlying\nMurktide Regent enters the battlefield with a +1/+1 counter on it for each instant and sorcery card exiled with it.\nWhenever an instant or sorcery card leaves your graveyard, put a +1/+1 counter on Murktide Regent. +Oracle:Delve (Each card you exile from your graveyard while casting this spell pays for {1}.)\nFlying\nMurktide Regent enters the battlefield with a +1/+1 counter on it for each instant or sorcery card exiled with it.\nWhenever an instant or sorcery card leaves your graveyard, put a +1/+1 counter on Murktide Regent. diff --git a/forge-gui/res/cardsfolder/m/mutiny.txt b/forge-gui/res/cardsfolder/m/mutiny.txt index 04501e24088..c8be03ff6f4 100644 --- a/forge-gui/res/cardsfolder/m/mutiny.txt +++ b/forge-gui/res/cardsfolder/m/mutiny.txt @@ -2,8 +2,7 @@ Name:Mutiny ManaCost:R Types:Sorcery A:SP$ Pump | Cost$ R | ValidTgts$ Creature.OppCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature an opponent controls | SubAbility$ MutinyDamage | StackDescription$ None | SpellDescription$ Target creature an opponent controls deals damage equal to its power to another target creature that player controls. -SVar:MutinyDamage:DB$ DealDamage | ValidTgts$ Creature.OppCtrl | TargetUnique$ True | AILogic$ PowerDmg | NumDmg$ X | DamageSource$ ParentTarget +SVar:MutinyDamage:DB$ DealDamage | ValidTgts$ Creature.OppCtrl | TargetUnique$ True | TargetsWithSameController$ True | AILogic$ PowerDmg | NumDmg$ X | DamageSource$ ParentTarget SVar:X:ParentTargeted$CardPower SVar:Picture:http://www.wizards.com/global/images/magic/general/mutiny.jpg -//TODO Not perfect yet, there seems to be no check whether the creature's controller is the same? Oracle:Target creature an opponent controls deals damage equal to its power to another target creature that player controls. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/m/mycoid_shepherd.txt b/forge-gui/res/cardsfolder/m/mycoid_shepherd.txt index 6964f34a1b6..b3e93797bdf 100644 --- a/forge-gui/res/cardsfolder/m/mycoid_shepherd.txt +++ b/forge-gui/res/cardsfolder/m/mycoid_shepherd.txt @@ -2,8 +2,7 @@ Name:Mycoid Shepherd ManaCost:1 G G W Types:Creature Fungus PT:5/4 -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | OptionalDecider$ You | Execute$ TrigGainLife | TriggerDescription$ When CARDNAME or another creature you control with power 5 or greater dies, you may gain 5 life. -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.Other+powerGE5+YouCtrl | OptionalDecider$ You | TriggerZones$ Battlefield | Execute$ TrigGainLife | Secondary$ True | TriggerDescription$ When CARDNAME or another creature you control with power 5 or greater dies, you may gain 5 life. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self,Creature.Other+powerGE5+YouCtrl | OptionalDecider$ You | Execute$ TrigGainLife | TriggerDescription$ When CARDNAME or another creature you control with power 5 or greater dies, you may gain 5 life. SVar:TrigGainLife:DB$GainLife | Defined$ You | LifeAmount$ 5 SVar:Picture:http://www.wizards.com/global/images/magic/general/mycoid_shepherd.jpg Oracle:Whenever Mycoid Shepherd or another creature you control with power 5 or greater dies, you may gain 5 life. diff --git a/forge-gui/res/cardsfolder/m/mycosynth_fiend.txt b/forge-gui/res/cardsfolder/m/mycosynth_fiend.txt index 160dc5b3338..8b57f2e1b0a 100644 --- a/forge-gui/res/cardsfolder/m/mycosynth_fiend.txt +++ b/forge-gui/res/cardsfolder/m/mycosynth_fiend.txt @@ -1,6 +1,6 @@ Name:Mycosynth Fiend ManaCost:2 G -Types:Creature Horror +Types:Creature Phyrexian Horror PT:2/2 S:Mode$ Continuous | Affected$ Card.Self | AddPower$ X | AddToughness$ X | Description$ CARDNAME gets +1/+1 for each poison counter your opponents have. SVar:X:Count$TotalOppPoisonCounters diff --git a/forge-gui/res/cardsfolder/m/myr_sire.txt b/forge-gui/res/cardsfolder/m/myr_sire.txt index 51e3c79085f..b4e67bce461 100644 --- a/forge-gui/res/cardsfolder/m/myr_sire.txt +++ b/forge-gui/res/cardsfolder/m/myr_sire.txt @@ -1,10 +1,9 @@ Name:Myr Sire ManaCost:2 -Types:Artifact Creature Myr +Types:Artifact Creature Phyrexian Myr PT:1/1 -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigToken | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, create a 1/1 colorless Myr artifact creature token. -SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_1_1_a_myr | TokenOwner$ You | LegacyImage$ c 1 1 a myr som +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigToken | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, create a 1/1 colorless Phyrexian Myr artifact creature token. +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_1_1_a_phyrexian_myr | TokenOwner$ You SVar:SacMe:1 DeckHas:Ability$Token -SVar:Picture:http://www.wizards.com/global/images/magic/general/myr_sire.jpg -Oracle:When Myr Sire dies, create a 1/1 colorless Myr artifact creature token. +Oracle:When Myr Sire dies, create a 1/1 colorless Phyrexian Myr artifact creature token. diff --git a/forge-gui/res/cardsfolder/m/mystic_redaction.txt b/forge-gui/res/cardsfolder/m/mystic_redaction.txt index 7916287fbc3..069c9546279 100644 --- a/forge-gui/res/cardsfolder/m/mystic_redaction.txt +++ b/forge-gui/res/cardsfolder/m/mystic_redaction.txt @@ -3,6 +3,6 @@ ManaCost:2 U Types:Enchantment T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigScry | TriggerDescription$ At the beginning of your upkeep, scry 1. SVar:TrigScry:DB$ Scry | ScryNum$ 1 -T:Mode$ Discarded | ValidCard$ Card.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigMill | TriggerDescription$ Whenever you discard a card, each opponent mills two cards. +T:Mode$ Discarded | ValidCard$ Card.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigMill | TriggerDescription$ Whenever you discard a card, each opponent mills two cards. (They put the top two cards of their library into their graveyard.) SVar:TrigMill:DB$ Mill | Defined$ Player.Opponent | NumCards$ 2 -Oracle:At the beginning of your upkeep, scry 1.\nWhenever you discard a card, each opponent mills two cards. +Oracle:At the beginning of your upkeep, scry 1.\nWhenever you discard a card, each opponent mills two cards. (They put the top two cards of their library into their graveyard.) diff --git a/forge-gui/res/cardsfolder/n/necrogen_scudder.txt b/forge-gui/res/cardsfolder/n/necrogen_scudder.txt index 355d220ea9c..509b45d9257 100644 --- a/forge-gui/res/cardsfolder/n/necrogen_scudder.txt +++ b/forge-gui/res/cardsfolder/n/necrogen_scudder.txt @@ -1,6 +1,6 @@ Name:Necrogen Scudder ManaCost:2 B -Types:Creature Horror +Types:Creature Phyrexian Horror PT:3/3 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigLoseLife | TriggerDescription$ When CARDNAME enters the battlefield, you lose 3 life. diff --git a/forge-gui/res/cardsfolder/n/necromancers_familiar.txt b/forge-gui/res/cardsfolder/n/necromancers_familiar.txt index 103d79a5022..bb694fbb215 100644 --- a/forge-gui/res/cardsfolder/n/necromancers_familiar.txt +++ b/forge-gui/res/cardsfolder/n/necromancers_familiar.txt @@ -7,4 +7,4 @@ S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ Lifelink | Condition$ Hel A:AB$ Pump | Cost$ B Discard<1/Card> | Defined$ Self | KW$ Indestructible | SubAbility$ DBTap | SpellDescription$ CARDNAME gains indestructible until end of turn. Tap it. SVar:DBTap:DB$ Tap | Defined$ Self DeckHas:Ability$LifeGain -Oracle:Flying\nNecromancer's Familiar has lifelink as long as you have no cards in hand.\n{B}, Discard a card: CARDNAME gains indestructible until end of turn. Tap it. (Damage and effects that say "destroy" don't destroy it.) +Oracle:Flying\nHellbent — Necromancer's Familiar has lifelink as long as you have no cards in hand.\n{B}, Discard a card: Necromancer's Familiar gains indestructible until end of turn. Tap it. diff --git a/forge-gui/res/cardsfolder/n/necropede.txt b/forge-gui/res/cardsfolder/n/necropede.txt index 014c764d8d4..b006ac40819 100644 --- a/forge-gui/res/cardsfolder/n/necropede.txt +++ b/forge-gui/res/cardsfolder/n/necropede.txt @@ -1,6 +1,6 @@ Name:Necropede ManaCost:2 -Types:Artifact Creature Insect +Types:Artifact Creature Phyrexian Insect PT:1/1 K:Infect T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | OptionalDecider$ TriggeredCardController | Execute$ TrigPutCounter | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, you may put a -1/-1 counter on target creature. diff --git a/forge-gui/res/cardsfolder/n/necropouncer.txt b/forge-gui/res/cardsfolder/n/necropouncer.txt index 16460bb9960..76972155088 100644 --- a/forge-gui/res/cardsfolder/n/necropouncer.txt +++ b/forge-gui/res/cardsfolder/n/necropouncer.txt @@ -6,4 +6,4 @@ K:Equip:2 S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 3 | AddToughness$ 1 | AddKeyword$ Haste | Description$ Equipped creature gets +3/+1 and has haste. DeckHas:Ability$Token SVar:Picture:http://www.wizards.com/global/images/magic/general/necropouncer.jpg -Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Germ creature token, then attach this to it.)\nEquipped creature gets +3/+1 and has haste.\nEquip {2} +Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Phyrexian Germ creature token, then attach this to it.)\nEquipped creature gets +3/+1 and has haste.\nEquip {2} diff --git a/forge-gui/res/cardsfolder/n/nested_ghoul.txt b/forge-gui/res/cardsfolder/n/nested_ghoul.txt index 5ba46791470..38086efa534 100644 --- a/forge-gui/res/cardsfolder/n/nested_ghoul.txt +++ b/forge-gui/res/cardsfolder/n/nested_ghoul.txt @@ -1,9 +1,8 @@ Name:Nested Ghoul ManaCost:3 B B -Types:Creature Zombie Warrior +Types:Creature Phyrexian Zombie Warrior PT:4/2 -T:Mode$ DamageDone | ValidTarget$ Creature.Self | Execute$ TrigZombie | TriggerDescription$ Whenever a source deals damage to CARDNAME, create a 2/2 black Zombie creature token. -SVar:TrigZombie:DB$ Token | TokenAmount$ 1 | TokenScript$ b_2_2_zombie | TokenOwner$ You | LegacyImage$ b 2 2 zombie mbs +T:Mode$ DamageDone | ValidTarget$ Creature.Self | Execute$ TrigZombie | TriggerDescription$ Whenever a source deals damage to CARDNAME, create a 2/2 black Phyrexian Zombie creature token. +SVar:TrigZombie:DB$ Token | TokenAmount$ 1 | TokenScript$ b_2_2_phyrexian_zombie | TokenOwner$ You SVar:HasCombatEffect:TRUE -SVar:Picture:http://www.wizards.com/global/images/magic/general/nested_ghoul.jpg -Oracle:Whenever a source deals damage to Nested Ghoul, create a 2/2 black Zombie creature token. \ No newline at end of file +Oracle:Whenever a source deals damage to Nested Ghoul, create a 2/2 black Phyrexian Zombie creature token. diff --git a/forge-gui/res/cardsfolder/n/nettlecyst.txt b/forge-gui/res/cardsfolder/n/nettlecyst.txt index fd5b56ebd6b..33bf248284d 100644 --- a/forge-gui/res/cardsfolder/n/nettlecyst.txt +++ b/forge-gui/res/cardsfolder/n/nettlecyst.txt @@ -9,4 +9,4 @@ SVar:NeedsToPlayVar:X GE1 SVar:BuffedBy:Artifact,Enchantment DeckHas:Ability$Token DeckHints:Type$Artifact|Enchantment -Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Germ creature token, then attach this to it.)\nEquipped creature gets +1/+1 for each artifact and/or enchantment you control.\nEquip {2} +Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Phyrexian Germ creature token, then attach this to it.)\nEquipped creature gets +1/+1 for each artifact and/or enchantment you control.\nEquip {2} diff --git a/forge-gui/res/cardsfolder/n/noxious_gearhulk.txt b/forge-gui/res/cardsfolder/n/noxious_gearhulk.txt index 4b52e59097b..e3cfc62553c 100644 --- a/forge-gui/res/cardsfolder/n/noxious_gearhulk.txt +++ b/forge-gui/res/cardsfolder/n/noxious_gearhulk.txt @@ -1,6 +1,6 @@ Name:Noxious Gearhulk ManaCost:4 B B -Types: Artifact Creature Construct +Types:Artifact Creature Construct PT:5/4 K:Menace T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDestroy | OptionalDecider$ You | RememberLKI$ True | TriggerDescription$ When CARDNAME enters the battlefield, you may destroy another target creature. If a creature is destroyed this way, you gain life equal to its toughness. @@ -9,4 +9,4 @@ SVar:DBGainLife:DB$GainLife | Defined$ You | LifeAmount$ X | SubAbility$ DBClean SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:RememberedLKI$CardToughness SVar:Picture:http://www.wizards.com/global/images/magic/general/noxious_gearhulk.jpg -Oracle:Menace\nWhen Noxious Gearhulk enters the battlefield, you may destroy another target creature. If a creature is destroyed this way, you gain life equal to its toughness. \ No newline at end of file +Oracle:Menace\nWhen Noxious Gearhulk enters the battlefield, you may destroy another target creature. If a creature is destroyed this way, you gain life equal to its toughness. diff --git a/forge-gui/res/cardsfolder/n/numa_joraga_chieftain.txt b/forge-gui/res/cardsfolder/n/numa_joraga_chieftain.txt index 0d4b8eb2ffc..3547b32fd0e 100755 --- a/forge-gui/res/cardsfolder/n/numa_joraga_chieftain.txt +++ b/forge-gui/res/cardsfolder/n/numa_joraga_chieftain.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Elf Warrior PT:2/2 T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigPayCost | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, you may pay {X}{X}. When you do, distribute X +1/+1 counters among any number of target Elves. SVar:TrigPayCost:AB$ ImmediateTrigger | Cost$ X X | Execute$ TrigPutCounters | TriggerDescription$ When you pay {X}{X}, distribute X +1/+1 counters among any number of target Elf creatures you control. -SVar:TrigPutCounters:DB$ PutCounter | ValidTgts$ Creature.Elf+YouCtrl | TgtPrompt$ Select any number of target Elf creatures you control to distribute counters to | CounterType$ P1P1 | CounterNum$ Y | TargetMin$ 1 | TargetMax$ X | DividedAsYouChoose$ X +SVar:TrigPutCounters:DB$ PutCounter | ValidTgts$ Creature.Elf+YouCtrl | TgtPrompt$ Select any number of target Elf creatures you control to distribute counters to | CounterType$ P1P1 | CounterNum$ X | TargetMin$ 1 | TargetMax$ X | DividedAsYouChoose$ X SVar:X:Count$xPaid K:Partner DeckHas:Ability$Counters diff --git a/forge-gui/res/cardsfolder/n/nykthos_paragon.txt b/forge-gui/res/cardsfolder/n/nykthos_paragon.txt index 6a8b8ca0839..a6ae6a6e2c6 100644 --- a/forge-gui/res/cardsfolder/n/nykthos_paragon.txt +++ b/forge-gui/res/cardsfolder/n/nykthos_paragon.txt @@ -2,9 +2,9 @@ Name:Nykthos Paragon ManaCost:4 W W Types:Enchantment Creature Human Soldier PT:4/6 -T:Mode$ LifeGained | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounterAll | ActivationLimit$ 1 | OptionalDecider$ You | TriggerDescription$ Whenever you gain life, you may put that many +1/+1 counters on each creature you control. This ability triggers only once each turn. +T:Mode$ LifeGained | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounterAll | ActivationLimit$ 1 | OptionalDecider$ You | TriggerDescription$ Whenever you gain life, you may put that many +1/+1 counters on each creature you control. You may do this only once each turn. SVar:TrigPutCounterAll:DB$ PutCounterAll | ValidCards$ Creature.YouCtrl | CounterType$ P1P1 | CounterNum$ X SVar:X:TriggerCount$LifeAmount DeckNeeds:Ability$LifeGain DeckHas:Ability$Counters -Oracle:Whenever you gain life, you may put that many +1/+1 counters on each creature you control. This ability triggers only once each turn. +Oracle:Whenever you gain life, you may put that many +1/+1 counters on each creature you control. You may do this only once each turn. diff --git a/forge-gui/res/cardsfolder/o/obsidian_charmaw.txt b/forge-gui/res/cardsfolder/o/obsidian_charmaw.txt index d7ec9671a98..8393eb2c67e 100644 --- a/forge-gui/res/cardsfolder/o/obsidian_charmaw.txt +++ b/forge-gui/res/cardsfolder/o/obsidian_charmaw.txt @@ -3,8 +3,8 @@ ManaCost:3 R R Types:Creature Dragon PT:4/4 K:Flying -S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | EffectZone$ All | Description$ This spell costs {1} more to cast for each land your opponents control that could produce {C}. +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | EffectZone$ All | Description$ This spell costs {1} less to cast for each land your opponents control that could produce {C}. SVar:X:Count$Valid Land.OppCtrl+canProduceManaColor Colorless T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$ TrigDestroy | TriggerDescription$ When CARDNAME enters the battlefield, destroy target nonbasic land an opponent controls. SVar:TrigDestroy:DB$ Destroy | ValidTgts$ Land.nonBasic+OppCtrl | TgtPrompt$ Select target nonbasic land an opponent controls -Oracle:This spell costs {1} more to cast for each land your opponents control that could produce {C}.\nFlying\nWhen Obsidian Charmaw enters the battlefield, destroy target nonbasic land an opponent controls. +Oracle:This spell costs {1} less to cast for each land your opponents control that could produce {C}.\nFlying\nWhen Obsidian Charmaw enters the battlefield, destroy target nonbasic land an opponent controls. diff --git a/forge-gui/res/cardsfolder/o/oculus.txt b/forge-gui/res/cardsfolder/o/oculus.txt index c36536e4f8c..1d18ea0170f 100644 --- a/forge-gui/res/cardsfolder/o/oculus.txt +++ b/forge-gui/res/cardsfolder/o/oculus.txt @@ -1,6 +1,6 @@ Name:Oculus ManaCost:1 U -Types:Creature Homunculus +Types:Creature Phyrexian Homunculus PT:1/1 T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDraw | OptionalDecider$ TriggeredCardController | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, you may draw a card. SVar:TrigDraw:DB$Draw | Defined$ TriggeredCardController | NumCards$ 1 diff --git a/forge-gui/res/cardsfolder/o/ogre_menial.txt b/forge-gui/res/cardsfolder/o/ogre_menial.txt index de9788e8727..4bc7ac25e1d 100644 --- a/forge-gui/res/cardsfolder/o/ogre_menial.txt +++ b/forge-gui/res/cardsfolder/o/ogre_menial.txt @@ -1,6 +1,6 @@ Name:Ogre Menial ManaCost:3 R -Types:Creature Ogre +Types:Creature Phyrexian Ogre PT:0/4 K:Infect A:AB$ Pump | Cost$ R | NumAtt$ +1 | SpellDescription$ CARDNAME gets +1/+0 until end of turn. diff --git a/forge-gui/res/cardsfolder/o/order_of_yawgmoth.txt b/forge-gui/res/cardsfolder/o/order_of_yawgmoth.txt index cecec987dc3..b065c2618ab 100644 --- a/forge-gui/res/cardsfolder/o/order_of_yawgmoth.txt +++ b/forge-gui/res/cardsfolder/o/order_of_yawgmoth.txt @@ -1,6 +1,6 @@ Name:Order of Yawgmoth ManaCost:2 B B -Types:Creature Zombie Knight +Types:Creature Phyrexian Zombie Knight PT:2/2 K:Fear T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | Execute$ TrigDiscard | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals damage to a player, that player discards a card. diff --git a/forge-gui/res/cardsfolder/p/parasitic_implant.txt b/forge-gui/res/cardsfolder/p/parasitic_implant.txt index d4cd719f680..54e7482a936 100644 --- a/forge-gui/res/cardsfolder/p/parasitic_implant.txt +++ b/forge-gui/res/cardsfolder/p/parasitic_implant.txt @@ -3,9 +3,8 @@ ManaCost:3 B Types:Enchantment Aura K:Enchant creature A:SP$ Attach | Cost$ 3 B | ValidTgts$ Creature | AILogic$ Curse -T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ At the beginning of your upkeep, enchanted creature's controller sacrifices it and you create a 1/1 colorless Myr artifact creature token. +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ At the beginning of your upkeep, enchanted creature's controller sacrifices it and you create a 1/1 colorless Phyrexian Myr artifact creature token. SVar:TrigSac:DB$ SacrificeAll | Defined$ Enchanted | SubAbility$ DBToken -SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_1_1_a_myr | LegacyImage$ c 1 1 a myr nph | TokenOwner$ You +SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_1_1_a_phyrexian_myr | TokenOwner$ You DeckHas:Ability$Token -SVar:Picture:http://www.wizards.com/global/images/magic/general/parasitic_implant.jpg -Oracle:Enchant creature\nAt the beginning of your upkeep, enchanted creature's controller sacrifices it and you create a 1/1 colorless Myr artifact creature token. +Oracle:Enchant creature\nAt the beginning of your upkeep, enchanted creature's controller sacrifices it and you create a 1/1 colorless Phyrexian Myr artifact creature token. diff --git a/forge-gui/res/cardsfolder/p/perilous_myr.txt b/forge-gui/res/cardsfolder/p/perilous_myr.txt index a061b5685ee..3b95af57eba 100644 --- a/forge-gui/res/cardsfolder/p/perilous_myr.txt +++ b/forge-gui/res/cardsfolder/p/perilous_myr.txt @@ -1,6 +1,6 @@ Name:Perilous Myr ManaCost:2 -Types:Artifact Creature Myr +Types:Artifact Creature Phyrexian Myr PT:1/1 T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDealDamage | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, it deals 2 damage to any target. SVar:TrigDealDamage:DB$DealDamage | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 2 diff --git a/forge-gui/res/cardsfolder/p/persist.txt b/forge-gui/res/cardsfolder/p/persist.txt index 5e8c524cc5d..9b67996571c 100644 --- a/forge-gui/res/cardsfolder/p/persist.txt +++ b/forge-gui/res/cardsfolder/p/persist.txt @@ -1,5 +1,5 @@ Name:Persist ManaCost:1 B Types:Sorcery -A:SP$ ChangeZone | Cost$ 1 B | ValidTgts$ Creature.nonLegendary+YouCtrl | TgtPrompt$ Select target creature from your graveyard | Origin$ Graveyard | Destination$ Battlefield | WithCounters$ M1M1_1 | SpellDescription$ Choose target non-legendary creature card in your graveyard. Return it to the battlefield with a -1/-1 counter on it. -Oracle:Choose target non-legendary creature card in your graveyard. Return it to the battlefield with a -1/-1 counter on it. +A:SP$ ChangeZone | Cost$ 1 B | ValidTgts$ Creature.nonLegendary+YouCtrl | TgtPrompt$ Select target creature from your graveyard | Origin$ Graveyard | Destination$ Battlefield | WithCounters$ M1M1_1 | SpellDescription$ Return target nonlegendary creature card from your graveyard to the battlefield with a -1/-1 counter on it. +Oracle:Return target nonlegendary creature card from your graveyard to the battlefield with a -1/-1 counter on it. diff --git a/forge-gui/res/cardsfolder/p/pestilent_souleater.txt b/forge-gui/res/cardsfolder/p/pestilent_souleater.txt index 7c85396bd8f..42508725738 100644 --- a/forge-gui/res/cardsfolder/p/pestilent_souleater.txt +++ b/forge-gui/res/cardsfolder/p/pestilent_souleater.txt @@ -1,6 +1,6 @@ Name:Pestilent Souleater ManaCost:5 -Types:Artifact Creature Insect +Types:Artifact Creature Phyrexian Insect PT:3/3 A:AB$ Pump | Cost$ PB | Defined$ Self | KW$ Infect | SpellDescription$ CARDNAME gains infect until end of turn. SVar:Picture:http://www.wizards.com/global/images/magic/general/pestilent_souleater.jpg diff --git a/forge-gui/res/cardsfolder/p/phyrexian_battleflies.txt b/forge-gui/res/cardsfolder/p/phyrexian_battleflies.txt index 7c1219cda76..60dce3a246c 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_battleflies.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_battleflies.txt @@ -1,6 +1,6 @@ Name:Phyrexian Battleflies ManaCost:B -Types:Creature Insect +Types:Creature Phyrexian Insect PT:0/1 K:Flying A:AB$ Pump | Cost$ B | Defined$ Self | NumAtt$ +1 | ActivationLimit$ 2 | SpellDescription$ CARDNAME gets +1/+0 until end of turn. Activate no more than twice each turn. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_bloodstock.txt b/forge-gui/res/cardsfolder/p/phyrexian_bloodstock.txt index cbda4449d3c..6a08e39c49a 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_bloodstock.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_bloodstock.txt @@ -1,6 +1,6 @@ Name:Phyrexian Bloodstock ManaCost:4 B -Types:Creature Zombie +Types:Creature Phyrexian Zombie PT:3/3 T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigDestroy | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME leaves the battlefield, destroy target white creature. It can't be regenerated. SVar:TrigDestroy:DB$ Destroy | ValidTgts$ Creature.White | NoRegen$ True | TgtPrompt$ Select target white creature. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_broodlings.txt b/forge-gui/res/cardsfolder/p/phyrexian_broodlings.txt index 42ef7ca66ed..a12e557762b 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_broodlings.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_broodlings.txt @@ -1,6 +1,6 @@ Name:Phyrexian Broodlings ManaCost:1 B B -Types:Creature Minion +Types:Creature Phyrexian Minion PT:2/2 A:AB$ PutCounter | Cost$ 1 Sac<1/Creature> | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Put a +1/+1 counter on CARDNAME. SVar:Picture:http://www.wizards.com/global/images/magic/general/phyrexian_broodlings.jpg diff --git a/forge-gui/res/cardsfolder/p/phyrexian_colossus.txt b/forge-gui/res/cardsfolder/p/phyrexian_colossus.txt index 26cf479d3db..01257985344 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_colossus.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_colossus.txt @@ -1,6 +1,6 @@ Name:Phyrexian Colossus ManaCost:7 -Types:Artifact Creature Golem +Types:Artifact Creature Phyrexian Golem PT:8/8 K:CARDNAME doesn't untap during your untap step. A:AB$ Untap | Cost$ PayLife<8> | SpellDescription$ Untap CARDNAME. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_crusader.txt b/forge-gui/res/cardsfolder/p/phyrexian_crusader.txt index a0944be83e0..fa79e633918 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_crusader.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_crusader.txt @@ -1,6 +1,6 @@ Name:Phyrexian Crusader ManaCost:1 B B -Types:Creature Zombie Knight +Types:Creature Phyrexian Zombie Knight PT:2/2 K:First Strike K:Protection from red diff --git a/forge-gui/res/cardsfolder/p/phyrexian_debaser.txt b/forge-gui/res/cardsfolder/p/phyrexian_debaser.txt index 1398c3ac7ee..e5ab85bd2dc 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_debaser.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_debaser.txt @@ -1,6 +1,6 @@ Name:Phyrexian Debaser ManaCost:3 B -Types:Creature Carrier +Types:Creature Phyrexian Carrier PT:2/2 K:Flying A:AB$ Pump | Cost$ T Sac<1/CARDNAME> | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ -2 | NumDef$ -2 | IsCurse$ True | SpellDescription$ Target creature gets -2/-2 until end of turn. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_defiler.txt b/forge-gui/res/cardsfolder/p/phyrexian_defiler.txt index 8b4fb59cc86..387781bbb22 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_defiler.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_defiler.txt @@ -1,6 +1,6 @@ Name:Phyrexian Defiler ManaCost:2 B B -Types:Creature Carrier +Types:Creature Phyrexian Carrier PT:3/3 A:AB$ Pump | Cost$ T Sac<1/CARDNAME> | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ -3 | NumDef$ -3 | IsCurse$ True | AILogic$ BetterCreatureThanSource | SpellDescription$ Target creature gets -3/-3 until end of turn. SVar:Picture:http://www.wizards.com/global/images/magic/general/phyrexian_defiler.jpg diff --git a/forge-gui/res/cardsfolder/p/phyrexian_delver.txt b/forge-gui/res/cardsfolder/p/phyrexian_delver.txt index bec462a0f68..d17d347b72c 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_delver.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_delver.txt @@ -1,6 +1,6 @@ Name:Phyrexian Delver ManaCost:3 B B -Types:Creature Zombie +Types:Creature Phyrexian Zombie PT:3/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME enters the battlefield, return target creature card from your graveyard to the battlefield. You lose life equal to that card's mana value. SVar:TrigChangeZone:DB$ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Choose target creature card in your graveyard | GainControl$ True | ChangeNum$ 1 | SubAbility$ DBLoseLifeYou diff --git a/forge-gui/res/cardsfolder/p/phyrexian_denouncer.txt b/forge-gui/res/cardsfolder/p/phyrexian_denouncer.txt index 98251d3703a..3521b30841e 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_denouncer.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_denouncer.txt @@ -1,6 +1,6 @@ Name:Phyrexian Denouncer ManaCost:1 B -Types:Creature Carrier +Types:Creature Phyrexian Carrier PT:1/1 A:AB$ Pump | Cost$ T Sac<1/CARDNAME> | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ -1 | NumDef$ -1 | IsCurse$ True | SpellDescription$ Target creature gets -1/-1 until end of turn. AI:RemoveDeck:Random diff --git a/forge-gui/res/cardsfolder/p/phyrexian_devourer.txt b/forge-gui/res/cardsfolder/p/phyrexian_devourer.txt index 7687d56bba4..e6fef638956 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_devourer.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_devourer.txt @@ -1,6 +1,6 @@ Name:Phyrexian Devourer ManaCost:6 -Types:Artifact Creature Construct +Types:Artifact Creature Phyrexian Construct PT:1/1 T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Creature.Self+powerGE7 | PresentCompare$ GE1 | Execute$ TrigSac | TriggerDescription$ When CARDNAME's power is 7 or greater, sacrifice it. SVar:TrigSac:DB$Sacrifice | Defined$ Self diff --git a/forge-gui/res/cardsfolder/p/phyrexian_digester.txt b/forge-gui/res/cardsfolder/p/phyrexian_digester.txt index 188463b9fa9..9045778fab1 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_digester.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_digester.txt @@ -1,6 +1,6 @@ Name:Phyrexian Digester ManaCost:3 -Types:Artifact Creature Construct +Types:Artifact Creature Phyrexian Construct PT:2/1 K:Infect SVar:Picture:http://www.wizards.com/global/images/magic/general/phyrexian_digester.jpg diff --git a/forge-gui/res/cardsfolder/p/phyrexian_dreadnought.txt b/forge-gui/res/cardsfolder/p/phyrexian_dreadnought.txt index 860e735735d..e610c097ad2 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_dreadnought.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_dreadnought.txt @@ -1,6 +1,6 @@ Name:Phyrexian Dreadnought ManaCost:1 -Types:Artifact Creature Dreadnought +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 the battlefield, sacrifice it unless you sacrifice any number of creatures with total power 12 or greater. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_driver.txt b/forge-gui/res/cardsfolder/p/phyrexian_driver.txt index 5b6b7ed9d16..dc4238a718c 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_driver.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_driver.txt @@ -1,6 +1,6 @@ Name:Phyrexian Driver ManaCost:2 B -Types:Creature Zombie Mercenary +Types:Creature Phyrexian Zombie Mercenary PT:1/1 T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigPump | TriggerDescription$ When CARDNAME enters the battlefield, other Mercenary creatures get +1/+1 until end of turn. SVar:TrigPump:DB$ PumpAll | ValidCards$ Creature.Mercenary+Other | NumAtt$ +1 | NumDef$ +1 diff --git a/forge-gui/res/cardsfolder/p/phyrexian_gargantua.txt b/forge-gui/res/cardsfolder/p/phyrexian_gargantua.txt index 74aa17e2b83..e4767510ab5 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_gargantua.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_gargantua.txt @@ -1,6 +1,6 @@ Name:Phyrexian Gargantua ManaCost:4 B B -Types:Creature Horror +Types:Creature Phyrexian Horror PT:4/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, you draw two cards and you lose 2 life. SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 2 | SubAbility$ DBLoseLife diff --git a/forge-gui/res/cardsfolder/p/phyrexian_ghoul.txt b/forge-gui/res/cardsfolder/p/phyrexian_ghoul.txt index 71032392d6d..dcc1e50bc7a 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_ghoul.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_ghoul.txt @@ -1,6 +1,6 @@ Name:Phyrexian Ghoul ManaCost:2 B -Types:Creature Zombie +Types:Creature Phyrexian Zombie PT:2/2 A:AB$ Pump | Cost$ Sac<1/Creature> | NumAtt$ +2 | NumDef$ +2 | AILogic$ Aristocrat | SpellDescription$ CARDNAME gets +2/+2 until end of turn. SVar:AIPreference:SacCost$Creature.Other diff --git a/forge-gui/res/cardsfolder/p/phyrexian_gremlins.txt b/forge-gui/res/cardsfolder/p/phyrexian_gremlins.txt index db088fb5cf4..e813999f155 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_gremlins.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_gremlins.txt @@ -1,6 +1,6 @@ Name:Phyrexian Gremlins ManaCost:2 B -Types:Creature Gremlin +Types:Creature Phyrexian Gremlin PT:1/1 K:You may choose not to untap CARDNAME during your untap step. A:AB$ Tap | Cost$ T | ValidTgts$ Artifact | RememberTapped$ True | AlwaysRemember$ True | SpellDescription$ Tap target artifact. It doesn't untap during its controller's untap step for as long as CARDNAME remains tapped. | StackDescription$ SpellDescription diff --git a/forge-gui/res/cardsfolder/p/phyrexian_hulk.txt b/forge-gui/res/cardsfolder/p/phyrexian_hulk.txt index a4e91650a06..b75115bf144 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_hulk.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_hulk.txt @@ -1,6 +1,6 @@ Name:Phyrexian Hulk ManaCost:6 -Types:Artifact Creature Golem +Types:Artifact Creature Phyrexian Golem PT:5/4 SVar:Picture:http://resources.wizards.com/magic/cards/9ed/en-us/card83203.jpg Oracle: diff --git a/forge-gui/res/cardsfolder/p/phyrexian_hydra.txt b/forge-gui/res/cardsfolder/p/phyrexian_hydra.txt index 7dbf3153ffe..d1387a22b24 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_hydra.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_hydra.txt @@ -1,6 +1,6 @@ Name:Phyrexian Hydra ManaCost:3 G G -Types:Creature Hydra +Types:Creature Phyrexian Hydra PT:7/7 K:Infect R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ Card.Self | ReplaceWith$ Counters | PreventionEffect$ True | Description$ If damage would be dealt to CARDNAME, prevent that damage. Put a -1/-1 counter on CARDNAME for each 1 damage prevented this way. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_infiltrator.txt b/forge-gui/res/cardsfolder/p/phyrexian_infiltrator.txt index dc22cd761f6..cf85d2d225f 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_infiltrator.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_infiltrator.txt @@ -1,6 +1,6 @@ Name:Phyrexian Infiltrator ManaCost:2 B -Types:Creature Minion +Types:Creature Phyrexian Minion PT:2/2 A:AB$ ExchangeControl | Cost$ 2 U U | Defined$ Self | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ Exchange control of CARDNAME and target creature. (This effect lasts indefinitely.) SVar:Picture:http://www.wizards.com/global/images/magic/general/phyrexian_infiltrator.jpg diff --git a/forge-gui/res/cardsfolder/p/phyrexian_ingester.txt b/forge-gui/res/cardsfolder/p/phyrexian_ingester.txt index 4c4f4b16ebe..655f7a9643a 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_ingester.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_ingester.txt @@ -1,6 +1,6 @@ Name:Phyrexian Ingester ManaCost:6 U -Types:Creature Beast +Types:Creature Phyrexian Beast PT:3/3 T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | OptionalDecider$ You | Execute$ TrigExile | TriggerDescription$ Imprint — When CARDNAME enters the battlefield, you may exile target nontoken creature. SVar:TrigExile:DB$ChangeZone | Imprint$ True | ValidTgts$ Creature.nonToken | TgtPrompt$ Select target nontoken creature | Origin$ Battlefield | Destination$ Exile diff --git a/forge-gui/res/cardsfolder/p/phyrexian_ironfoot.txt b/forge-gui/res/cardsfolder/p/phyrexian_ironfoot.txt index 7761e62029a..7cde67634e8 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_ironfoot.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_ironfoot.txt @@ -1,6 +1,6 @@ Name:Phyrexian Ironfoot ManaCost:3 -Types:Snow Artifact Creature Construct +Types:Snow Artifact Creature Phyrexian Construct PT:3/4 K:CARDNAME doesn't untap during your untap step. A:AB$ Untap | Cost$ 1 S | SpellDescription$ Untap CARDNAME. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_juggernaut.txt b/forge-gui/res/cardsfolder/p/phyrexian_juggernaut.txt index 4bb25faac7a..ead79d62c5b 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_juggernaut.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_juggernaut.txt @@ -1,6 +1,6 @@ Name:Phyrexian Juggernaut ManaCost:6 -Types:Artifact Creature Juggernaut +Types:Artifact Creature Phyrexian Juggernaut PT:5/5 K:Infect K:CARDNAME attacks each combat if able. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_marauder.txt b/forge-gui/res/cardsfolder/p/phyrexian_marauder.txt index c830d12ae48..30f3c6ec29f 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_marauder.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_marauder.txt @@ -1,6 +1,6 @@ Name:Phyrexian Marauder ManaCost:X -Types:Artifact Creature Construct +Types:Artifact Creature Phyrexian Construct PT:0/0 K:CARDNAME can't block. S:Mode$ CantAttackUnless | ValidCard$ Card.Self | Cost$ Y | Description$ CARDNAME can't attack unless you pay {1} for each +1/+1 counter on it. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_metamorph.txt b/forge-gui/res/cardsfolder/p/phyrexian_metamorph.txt index bd9dbaed06f..acf20192f69 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_metamorph.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_metamorph.txt @@ -1,6 +1,6 @@ Name:Phyrexian Metamorph ManaCost:3 PU -Types:Artifact Creature Shapeshifter +Types:Artifact Creature Phyrexian Shapeshifter PT:0/0 K:ETBReplacement:Copy:DBCopy:Optional SVar:DBCopy:DB$ Clone | Choices$ Creature.Other,Artifact.Other | AddTypes$ Artifact | SpellDescription$ You may have CARDNAME enter the battlefield as a copy of any artifact or creature on the battlefield, except it's an artifact in addition to its other types. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_monitor.txt b/forge-gui/res/cardsfolder/p/phyrexian_monitor.txt index abf28224b9b..baaf56a1044 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_monitor.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_monitor.txt @@ -1,6 +1,6 @@ Name:Phyrexian Monitor ManaCost:3 B -Types:Creature Skeleton +Types:Creature Phyrexian Skeleton PT:2/2 A:AB$ Regenerate | Cost$ B | SpellDescription$ Regenerate CARDNAME. SVar:Picture:http://www.wizards.com/global/images/magic/general/phyrexian_monitor.jpg diff --git a/forge-gui/res/cardsfolder/p/phyrexian_negator.txt b/forge-gui/res/cardsfolder/p/phyrexian_negator.txt index ccde9e56cfa..91712593510 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_negator.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_negator.txt @@ -1,6 +1,6 @@ Name:Phyrexian Negator ManaCost:2 B -Types:Creature Horror +Types:Creature Phyrexian Horror PT:5/5 K:Trample T:Mode$ DamageDoneOnce | ValidTarget$ Card.Self | Execute$ TrigSac | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME is dealt damage, sacrifice that many permanents. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_obliterator.txt b/forge-gui/res/cardsfolder/p/phyrexian_obliterator.txt index 72b60be0a3a..0bcbf6caccc 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_obliterator.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_obliterator.txt @@ -1,6 +1,6 @@ Name:Phyrexian Obliterator ManaCost:B B B B -Types:Creature Horror +Types:Creature Phyrexian Horror PT:5/5 K:Trample T:Mode$ DamageDone | ValidTarget$ Card.Self | Execute$ TrigSac | TriggerZones$ Battlefield | TriggerDescription$ Whenever a source deals damage to CARDNAME, that source's controller sacrifices that many permanents. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_plaguelord.txt b/forge-gui/res/cardsfolder/p/phyrexian_plaguelord.txt index 1d810da200a..d9746e516b2 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_plaguelord.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_plaguelord.txt @@ -1,6 +1,6 @@ Name:Phyrexian Plaguelord ManaCost:3 B B -Types:Creature Carrier +Types:Creature Phyrexian Carrier PT:4/4 A:AB$ Pump | Cost$ T Sac<1/CARDNAME> | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ -4 | NumDef$ -4 | IsCurse$ True | SpellDescription$ Target creature gets -4/-4 until end of turn. A:AB$ Pump | Cost$ Sac<1/Creature> | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ -1 | NumDef$ -1 | IsCurse$ True | SpellDescription$ Target creature gets -1/-1 until end of turn. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_processor.txt b/forge-gui/res/cardsfolder/p/phyrexian_processor.txt index 5ac6308fd85..3c2c690dc76 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_processor.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_processor.txt @@ -4,8 +4,8 @@ Types:Artifact R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplaceWith$ PayLife | Description$ As CARDNAME enters the battlefield, pay any amount of life. SVar:PayLife:AB$ StoreSVar | Cost$ Mandatory PayLife | SVar$ LifePaidOnETB | Type$ Calculate | Expression$ X | SubAbility$ MoveToPlay SVar:MoveToPlay:DB$ ChangeZone | Defined$ ReplacedCard | Origin$ All | Destination$ Battlefield -A:AB$ Token | Cost$ 4 T | TokenAmount$ 1 | TokenScript$ b_x_x_minion | TokenOwner$ You | TokenPower$ LifePaidOnETB | TokenToughness$ LifePaidOnETB | LegacyImage$ b x x minion usg | SpellDescription$ Create an X/X black Minion creature token, where X is the life paid as CARDNAME entered the battlefield. +A:AB$ Token | Cost$ 4 T | TokenAmount$ 1 | TokenScript$ b_x_x_phyrexian_minion | TokenOwner$ You | TokenPower$ LifePaidOnETB | TokenToughness$ LifePaidOnETB | SpellDescription$ Create an X/X black Phyrexian Minion creature token, where X is the life paid as CARDNAME entered the battlefield. SVar:X:Count$xPaid SVar:LifePaidOnETB:Number$0 AI:RemoveDeck:All -Oracle:As Phyrexian Processor enters the battlefield, pay any amount of life.\n{4}, {T}: Create an X/X black Minion creature token, where X is the life paid as Phyrexian Processor entered the battlefield. +Oracle:As Phyrexian Processor enters the battlefield, pay any amount of life.\n{4}, {T}: Create an X/X black Phyrexian Minion creature token, where X is the life paid as Phyrexian Processor entered the battlefield. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_prowler.txt b/forge-gui/res/cardsfolder/p/phyrexian_prowler.txt index 1502f8d5b0b..602e601efa1 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_prowler.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_prowler.txt @@ -1,6 +1,6 @@ Name:Phyrexian Prowler ManaCost:3 B -Types:Creature Zombie Mercenary +Types:Creature Phyrexian Zombie Mercenary PT:3/3 K:Fading:3 A:AB$ Pump | Cost$ SubCounter<1/FADE> | Defined$ Self | NumAtt$ +1 | NumDef$ +1 | SpellDescription$ CARDNAME gets +1/+1 until end of turn. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_rager.txt b/forge-gui/res/cardsfolder/p/phyrexian_rager.txt index 3099ad7c914..006157032ea 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_rager.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_rager.txt @@ -1,6 +1,6 @@ Name:Phyrexian Rager ManaCost:2 B -Types:Creature Horror +Types:Creature Phyrexian Horror PT:2/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, you draw a card and you lose 1 life. SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 | SubAbility$ DBLoseLife diff --git a/forge-gui/res/cardsfolder/p/phyrexian_reaper.txt b/forge-gui/res/cardsfolder/p/phyrexian_reaper.txt index 9336c0d4be9..fd6622e3833 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_reaper.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_reaper.txt @@ -1,6 +1,6 @@ Name:Phyrexian Reaper ManaCost:4 B -Types:Creature Zombie +Types:Creature Phyrexian Zombie PT:3/3 T:Mode$ AttackerBlocked | ValidCard$ Card.Self | ValidBlocker$ Creature.Green | Execute$ TrigDestroyBlocker | TriggerDescription$ Whenever CARDNAME becomes blocked by a green creature, destroy that creature. It can't be regenerated. SVar:TrigDestroyBlocker:DB$ Destroy | Defined$ TriggeredBlockerLKICopy | NoRegen$ True diff --git a/forge-gui/res/cardsfolder/p/phyrexian_rebirth.txt b/forge-gui/res/cardsfolder/p/phyrexian_rebirth.txt index 3d58d81841f..06f0a3b5d30 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_rebirth.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_rebirth.txt @@ -1,8 +1,7 @@ Name:Phyrexian Rebirth ManaCost:4 W W Types:Sorcery -A:SP$ DestroyAll | Cost$ 4 W W | ValidCards$ Creature | RememberDestroyed$ True | SubAbility$ DBToken | SpellDescription$ Destroy all creatures, then create an X/X colorless Horror artifact creature token, where X is the number of creatures destroyed this way. -SVar:DBToken:DB$Token | TokenAmount$ 1 | TokenScript$ c_x_x_a_horror | TokenOwner$ You | LegacyImage$ c x x a horror mbs | TokenPower$ X | TokenToughness$ X +A:SP$ DestroyAll | Cost$ 4 W W | ValidCards$ Creature | RememberDestroyed$ True | SubAbility$ DBToken | SpellDescription$ Destroy all creatures, then create an X/X colorless Phyrexian Horror artifact creature token, where X is the number of creatures destroyed this way. +SVar:DBToken:DB$Token | TokenAmount$ 1 | TokenScript$ c_x_x_a_phyrexian_horror | TokenOwner$ You | TokenPower$ X | TokenToughness$ X SVar:X:Remembered$Amount -SVar:Picture:http://www.wizards.com/global/images/magic/general/phyrexian_rebirth.jpg -Oracle:Destroy all creatures, then create an X/X colorless Horror artifact creature token, where X is the number of creatures destroyed this way. +Oracle:Destroy all creatures, then create an X/X colorless Phyrexian Horror artifact creature token, where X is the number of creatures destroyed this way. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_revoker.txt b/forge-gui/res/cardsfolder/p/phyrexian_revoker.txt index 4773c48eedd..09b7d40641f 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_revoker.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_revoker.txt @@ -1,6 +1,6 @@ Name:Phyrexian Revoker ManaCost:2 -Types:Artifact Creature Horror +Types:Artifact Creature Phyrexian Horror PT:2/1 K:ETBReplacement:Other:DBNameCard SVar:DBNameCard:DB$ NameCard | Defined$ You | ValidCards$ Card.nonLand | ValidDesc$ nonland | SpellDescription$ As CARDNAME enters the battlefield, choose a nonland card name. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_scuta.txt b/forge-gui/res/cardsfolder/p/phyrexian_scuta.txt index 59c7ca88e3d..79d03b3bbc3 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_scuta.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_scuta.txt @@ -1,6 +1,6 @@ Name:Phyrexian Scuta ManaCost:3 B -Types:Creature Zombie +Types:Creature Phyrexian Zombie PT:3/3 K:Kicker:PayLife<3> K:etbCounter:P1P1:2:CheckSVar$ WasKicked:If CARDNAME was kicked, it enters the battlefield with two +1/+1 counters on it. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_slayer.txt b/forge-gui/res/cardsfolder/p/phyrexian_slayer.txt index 77a8554117b..25cd1b2dbe5 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_slayer.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_slayer.txt @@ -1,6 +1,6 @@ Name:Phyrexian Slayer ManaCost:3 B -Types:Creature Minion +Types:Creature Phyrexian Minion PT:2/2 K:Flying T:Mode$ AttackerBlocked | ValidCard$ Card.Self | ValidBlocker$ Creature.White | Execute$ TrigDestroyBlocker | TriggerDescription$ Whenever CARDNAME becomes blocked by a white creature, destroy that creature. It can't be regenerated. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_snowcrusher.txt b/forge-gui/res/cardsfolder/p/phyrexian_snowcrusher.txt index 4d8fa68379b..825e9a60837 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_snowcrusher.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_snowcrusher.txt @@ -1,6 +1,6 @@ Name:Phyrexian Snowcrusher ManaCost:6 -Types:Snow Artifact Creature Juggernaut +Types:Snow Artifact Creature Phyrexian Juggernaut PT:6/5 K:CARDNAME attacks each combat if able. A:AB$ Pump | Cost$ 1 S | Defined$ Self | NumAtt$ +1 | SpellDescription$ Phyrexian Snowcrusher gets +1/+0 until end of turn. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_soulgorger.txt b/forge-gui/res/cardsfolder/p/phyrexian_soulgorger.txt index 7ce31a7edb8..4107f616911 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_soulgorger.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_soulgorger.txt @@ -1,6 +1,6 @@ Name:Phyrexian Soulgorger ManaCost:3 -Types:Snow Artifact Creature Construct +Types:Snow Artifact Creature Phyrexian Construct PT:8/8 K:Cumulative upkeep:Sac<1/Creature>:Sacrifice a creature. AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/p/phyrexian_swarmlord.txt b/forge-gui/res/cardsfolder/p/phyrexian_swarmlord.txt index 799e0915353..5eca2bbb3ab 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_swarmlord.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_swarmlord.txt @@ -1,10 +1,9 @@ Name:Phyrexian Swarmlord ManaCost:4 G G -Types:Creature Insect Horror +Types:Creature Phyrexian Insect Horror PT:4/4 K:Infect -T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ At the beginning of your upkeep, create a 1/1 green Insect creature token with infect for each poison counter your opponents have. -SVar:TrigToken:DB$Token | TokenAmount$ X | TokenScript$ g_1_1_insect_infect | TokenOwner$ You | LegacyImage$ g 1 1 insect infect nph +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ At the beginning of your upkeep, create a 1/1 green Phyrexian Insect creature token with infect for each poison counter your opponents have. +SVar:TrigToken:DB$Token | TokenAmount$ X | TokenScript$ g_1_1_phyrexian_insect_infect | TokenOwner$ You SVar:X:Count$TotalOppPoisonCounters -SVar:Picture:http://www.wizards.com/global/images/magic/general/phyrexian_swarmlord.jpg -Oracle:Infect (This creature deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.)\nAt the beginning of your upkeep, create a 1/1 green Insect creature token with infect for each poison counter your opponents have. +Oracle:Infect (This creature deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.)\nAt the beginning of your upkeep, create a 1/1 green Phyrexian Insect creature token with infect for each poison counter your opponents have. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_totem.txt b/forge-gui/res/cardsfolder/p/phyrexian_totem.txt index 8bd815256e0..c90241b393c 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_totem.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_totem.txt @@ -2,10 +2,9 @@ Name:Phyrexian Totem ManaCost:3 Types:Artifact A:AB$ Mana | Cost$ T | Produced$ B | Amount$ 1 | SpellDescription$ Add {B}. -A:AB$ Animate | Cost$ 2 B | Defined$ Self | Power$ 5 | Toughness$ 5 | Types$ Creature,Artifact,Horror | Colors$ Black | Keywords$ Trample | SpellDescription$ CARDNAME becomes a 5/5 black Horror artifact creature with trample until end of turn. +A:AB$ Animate | Cost$ 2 B | Defined$ Self | Power$ 5 | Toughness$ 5 | Types$ Creature,Artifact,Phyrexian,Horror | Colors$ Black | Keywords$ Trample | SpellDescription$ CARDNAME becomes a 5/5 black Phyrexian Horror artifact creature with trample until end of turn. T:Mode$ DamageDoneOnce | ValidTarget$ Creature.Self | Execute$ TrigSac | TriggerDescription$ Whenever CARDNAME is dealt damage, if it's a creature, sacrifice that many permanents. SVar:TrigSac:DB$Sacrifice | SacValid$ Permanent | Amount$ X SVar:X:TriggerCount$DamageAmount AI:RemoveDeck:All -SVar:Picture:http://www.wizards.com/global/images/magic/general/phyrexian_totem.jpg -Oracle:{T}: Add {B}.\n{2}{B}: Phyrexian Totem becomes a 5/5 black Horror artifact creature with trample until end of turn.\nWhenever Phyrexian Totem is dealt damage, if it's a creature, sacrifice that many permanents. +Oracle:{T}: Add {B}.\n{2}{B}: Phyrexian Totem becomes a 5/5 black Phyrexian Horror artifact creature with trample until end of turn.\nWhenever Phyrexian Totem is dealt damage, if it's a creature, sacrifice that many permanents. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_triniform.txt b/forge-gui/res/cardsfolder/p/phyrexian_triniform.txt index cd6e0760a11..ba67f017fd8 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_triniform.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_triniform.txt @@ -1,9 +1,9 @@ Name:Phyrexian Triniform ManaCost:9 -Types:Artifact Creature Golem +Types:Artifact Creature Phyrexian Golem PT:9/9 K:Encore:12 -T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigToken | TriggerDescription$ When CARDNAME dies, create three 3/3 colorless Golem artifact creature tokens. -SVar:TrigToken:DB$ Token | TokenScript$ c_3_3_a_golem | TokenAmount$ 3 +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigToken | TriggerDescription$ When CARDNAME dies, create three 3/3 colorless Phyrexian Golem artifact creature tokens. +SVar:TrigToken:DB$ Token | TokenScript$ c_3_3_a_phyrexian_golem | TokenAmount$ 3 DeckHas:Ability$Token -Oracle:When Phyrexian Triniform dies, create three 3/3 colorless Golem artifact creature tokens.\nEncore {12} ({12}, Exile this card from your graveyard: For each opponent, create a token copy that attacks that opponent this turn if able. They gain haste. Sacrifice them at the beginning of the next end step. Activate only as a sorcery.) +Oracle:When Phyrexian Triniform dies, create three 3/3 colorless Phyrexian Golem artifact creature tokens.\nEncore {12} ({12}, Exile this card from your graveyard: For each opponent, create a token copy that attacks that opponent this turn if able. They gain haste. Sacrifice them at the beginning of the next end step. Activate only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/p/phyrexian_vatmother.txt b/forge-gui/res/cardsfolder/p/phyrexian_vatmother.txt index fe5615a3f81..3cac3b78df3 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_vatmother.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_vatmother.txt @@ -1,6 +1,6 @@ Name:Phyrexian Vatmother ManaCost:2 B B -Types:Creature Horror +Types:Creature Phyrexian Horror PT:4/5 K:Infect T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPoison | TriggerDescription$ At the beginning of your upkeep, you get a poison counter. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_walker.txt b/forge-gui/res/cardsfolder/p/phyrexian_walker.txt index b5165b9e6d3..3aca78a3aec 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_walker.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_walker.txt @@ -1,6 +1,6 @@ Name:Phyrexian Walker ManaCost:0 -Types:Artifact Creature Construct +Types:Artifact Creature Phyrexian Construct PT:0/3 SVar:Picture:http://resources.wizards.com/magic/cards/vi/en-us/card3600.jpg Oracle: diff --git a/forge-gui/res/cardsfolder/p/phyrexian_war_beast.txt b/forge-gui/res/cardsfolder/p/phyrexian_war_beast.txt index 4c7dae4669e..bf69763238b 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_war_beast.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_war_beast.txt @@ -1,6 +1,6 @@ Name:Phyrexian War Beast ManaCost:3 -Types:Artifact Creature Beast +Types:Artifact Creature Phyrexian Beast PT:3/4 T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigSacrifice | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME leaves the battlefield, sacrifice a land and Phyrexian War Beast deals 1 damage to you. SVar:TrigSacrifice:DB$Sacrifice | SacValid$ Land | SubAbility$ DBDealDamage diff --git a/forge-gui/res/cardsfolder/p/pierce_strider.txt b/forge-gui/res/cardsfolder/p/pierce_strider.txt index 685a4f17b38..2fc86021870 100644 --- a/forge-gui/res/cardsfolder/p/pierce_strider.txt +++ b/forge-gui/res/cardsfolder/p/pierce_strider.txt @@ -1,6 +1,6 @@ Name:Pierce Strider ManaCost:4 -Types:Artifact Creature Construct +Types:Artifact Creature Phyrexian Construct PT:3/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigLoseLife | TriggerDescription$ When CARDNAME enters the battlefield, target opponent loses 3 life. SVar:TrigLoseLife:DB$LoseLife | ValidTgts$ Opponent | LifeAmount$ 3 diff --git a/forge-gui/res/cardsfolder/p/piercing_rays.txt b/forge-gui/res/cardsfolder/p/piercing_rays.txt index c1827830d0e..84b5b42b2e7 100644 --- a/forge-gui/res/cardsfolder/p/piercing_rays.txt +++ b/forge-gui/res/cardsfolder/p/piercing_rays.txt @@ -2,5 +2,5 @@ Name:Piercing Rays ManaCost:1 W Types:Sorcery A:SP$ ChangeZone | Cost$ 1 W | ValidTgts$ Creature.tapped | TgtPrompt$ Select target tapped creature | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Exile target tapped creature. -A:AB$ Tap | Cost$ 2 W Reveal<1/CARDNAME> | TgtPrompt$ Select target untapped creature | ValidTgts$ Creature.untapped | Forecast$ True | SpellDescription$ Tap target untapped creature. (Activate this ability only during your upkeep and only once each turn.) -Oracle:Exile target tapped creature.\nForecast — {2}{W}, Reveal Piercing Rays from your hand: Tap target untapped creature. (Activate this ability only during your upkeep and only once each turn.) +A:AB$ Tap | Cost$ 2 W Reveal<1/CARDNAME> | TgtPrompt$ Select target untapped creature | ValidTgts$ Creature.untapped | Forecast$ True | SpellDescription$ Tap target untapped creature. (Activate only during your upkeep and only once each turn.) +Oracle:Exile target tapped creature.\nForecast—{2}{W}, Reveal Piercing Rays from your hand: Tap target untapped creature. (Activate only during your upkeep and only once each turn.) diff --git a/forge-gui/res/cardsfolder/p/pious_evangel_wayward_disciple.txt b/forge-gui/res/cardsfolder/p/pious_evangel_wayward_disciple.txt index 6b8c1c580fc..1527e6d5a3c 100644 --- a/forge-gui/res/cardsfolder/p/pious_evangel_wayward_disciple.txt +++ b/forge-gui/res/cardsfolder/p/pious_evangel_wayward_disciple.txt @@ -2,8 +2,7 @@ Name:Pious Evangel ManaCost:2 W Types:Creature Human Cleric PT:2/2 -T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigGainLife | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME or another creature enters the battlefield under your control, you gain 1 life. -T:Mode$ ChangesZone | ValidCard$ Creature.Other+YouCtrl | Origin$ Any | Destination$ Battlefield | Execute$ TrigGainLife | TriggerZones$ Battlefield | Secondary$ True | TriggerDescription$ Whenever CARDNAME or another creature enters the battlefield under your control, you gain 1 life. +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigGainLife | ValidCard$ Card.Self,Creature.Other+YouCtrl | TriggerDescription$ Whenever CARDNAME or another creature enters the battlefield under your control, you gain 1 life. SVar:TrigGainLife:DB$GainLife | Defined$ You | LifeAmount$ 1 A:AB$SetState | Cost$ 2 T Sac<1/Permanent.Other/another permanent> | Defined$ Self | Mode$ Transform | SpellDescription$ Transform CARDNAME. SVar:Picture:http://www.wizards.com/global/images/magic/general/pious_evangel.jpg @@ -17,8 +16,7 @@ ManaCost:no cost Colors:black Types:Creature Human Cleric PT:2/4 -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDrain | TriggerDescription$ Whenever CARDNAME or another creature you control dies, target opponent loses 1 life and you gain 1 life. -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDrain | Secondary$ True | TriggerDescription$ Whenever CARDNAME or another creature you control dies, target opponent loses 1 life and you gain 1 life. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self,Creature.Other+YouCtrl | Execute$ TrigDrain | TriggerDescription$ Whenever CARDNAME or another creature you control dies, target opponent loses 1 life and you gain 1 life. SVar:TrigDrain:DB$LoseLife | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | LifeAmount$ 1 | SubAbility$ DBGainLife SVar:DBGainLife:DB$GainLife | Defined$ You | LifeAmount$ 1 SVar:Picture:http://www.wizards.com/global/images/magic/general/wayward_disciple.jpg diff --git a/forge-gui/res/cardsfolder/p/pith_driller.txt b/forge-gui/res/cardsfolder/p/pith_driller.txt index 1a5d0aee6c4..61200f1efb8 100644 --- a/forge-gui/res/cardsfolder/p/pith_driller.txt +++ b/forge-gui/res/cardsfolder/p/pith_driller.txt @@ -1,6 +1,6 @@ Name:Pith Driller ManaCost:4 PB -Types:Artifact Creature Horror +Types:Artifact Creature Phyrexian Horror PT:2/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPutCounter | TriggerDescription$ When CARDNAME enters the battlefield, put a -1/-1 counter on target creature. SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ M1M1 | CounterNum$ 1 | IsCurse$ True diff --git a/forge-gui/res/cardsfolder/p/plague_dogs.txt b/forge-gui/res/cardsfolder/p/plague_dogs.txt index 2a51d3c91c6..e336d13df38 100644 --- a/forge-gui/res/cardsfolder/p/plague_dogs.txt +++ b/forge-gui/res/cardsfolder/p/plague_dogs.txt @@ -1,6 +1,6 @@ Name:Plague Dogs ManaCost:4 B -Types:Creature Zombie Dog +Types:Creature Phyrexian Zombie Dog PT:3/3 T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigNausea | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, all creatures get -1/-1 until end of turn. SVar:TrigNausea:DB$ PumpAll | ValidCards$ Creature | NumAtt$ -1 | NumDef$ -1 | IsCurse$ True | SpellDescription$ All creatures get -1/-1 until end of turn. diff --git a/forge-gui/res/cardsfolder/p/plague_engineer.txt b/forge-gui/res/cardsfolder/p/plague_engineer.txt index adc1c299dbc..a38c978b318 100644 --- a/forge-gui/res/cardsfolder/p/plague_engineer.txt +++ b/forge-gui/res/cardsfolder/p/plague_engineer.txt @@ -1,6 +1,6 @@ Name:Plague Engineer ManaCost:2 B -Types:Creature Carrier +Types:Creature Phyrexian Carrier PT:2/2 K:Deathtouch K:ETBReplacement:Other:ChooseCT diff --git a/forge-gui/res/cardsfolder/p/plague_myr.txt b/forge-gui/res/cardsfolder/p/plague_myr.txt index b2dec704d1e..7d8f19c2f89 100644 --- a/forge-gui/res/cardsfolder/p/plague_myr.txt +++ b/forge-gui/res/cardsfolder/p/plague_myr.txt @@ -1,6 +1,6 @@ Name:Plague Myr ManaCost:2 -Types:Artifact Creature Myr +Types:Artifact Creature Phyrexian Myr PT:1/1 K:Infect A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. diff --git a/forge-gui/res/cardsfolder/p/plague_spitter.txt b/forge-gui/res/cardsfolder/p/plague_spitter.txt index 1023ad7ee00..ab595008aba 100644 --- a/forge-gui/res/cardsfolder/p/plague_spitter.txt +++ b/forge-gui/res/cardsfolder/p/plague_spitter.txt @@ -1,6 +1,6 @@ Name:Plague Spitter ManaCost:2 B -Types:Creature Horror +Types:Creature Phyrexian Horror PT:2/2 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDamageAll | TriggerDescription$ At the beginning of your upkeep, CARDNAME deals 1 damage to each creature and each player. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDamageAll | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, CARDNAME deals 1 damage to each creature and each player. diff --git a/forge-gui/res/cardsfolder/p/plague_stinger.txt b/forge-gui/res/cardsfolder/p/plague_stinger.txt index 6b75b57bcf4..768f88d44c1 100644 --- a/forge-gui/res/cardsfolder/p/plague_stinger.txt +++ b/forge-gui/res/cardsfolder/p/plague_stinger.txt @@ -1,6 +1,6 @@ Name:Plague Stinger ManaCost:1 B -Types:Creature Insect Horror +Types:Creature Phyrexian Insect Horror PT:1/1 K:Flying K:Infect diff --git a/forge-gui/res/cardsfolder/p/plaguemaw_beast.txt b/forge-gui/res/cardsfolder/p/plaguemaw_beast.txt index 032990350fb..778fe7dc1f9 100644 --- a/forge-gui/res/cardsfolder/p/plaguemaw_beast.txt +++ b/forge-gui/res/cardsfolder/p/plaguemaw_beast.txt @@ -1,6 +1,6 @@ Name:Plaguemaw Beast ManaCost:3 G G -Types:Creature Beast +Types:Creature Phyrexian Beast PT:4/3 A:AB$ Proliferate | Cost$ T Sac<1/Creature> | SpellDescription$ Proliferate. AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/p/plane_merge_elf.txt b/forge-gui/res/cardsfolder/p/plane_merge_elf.txt index d9fe2eecb7b..d2ce1b63b8e 100644 --- a/forge-gui/res/cardsfolder/p/plane_merge_elf.txt +++ b/forge-gui/res/cardsfolder/p/plane_merge_elf.txt @@ -6,7 +6,7 @@ T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigLandship | Trigg SVar:TrigLandship:DB$ PeekAndReveal | PeekAmount$ 1 | RevealValid$ Land | RevealOptional$ True | RememberRevealed$ True | SubAbility$ DBToken SVar:DBToken:DB$ Token | TokenScript$ g_1_1_elf_warrior | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ1 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.sharesCreatureTypeWith | TriggerZones$ Battlefield | Execute$ TrigPumpAll | TriggerDescription$ Kinfall — Whenever a creature enters the battlefield under your control, if it shares a creature type with Plane-Merge Elf, creatures you control get +1/+1 until end of turn. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.YouCtrl+sharesCreatureTypeWith | TriggerZones$ Battlefield | Execute$ TrigPumpAll | TriggerDescription$ Kinfall — Whenever a creature enters the battlefield under your control, if it shares a creature type with Plane-Merge Elf, creatures you control get +1/+1 until end of turn. SVar:TrigPumpAll:DB$ PumpAll | ValidCards$ Creature.YouCtrl | NumAtt$ +1 | NumDef$ +1 | ConditionDefined$ TriggeredCard | ConditionPresent$ Card.sharesCreatureTypeWith DeckHas:Ability$Token Oracle:Landship — At the beginning of your upkeep, you may look at the top card of your library. If it's a land, you may reveal it. If you do, create a 1/1 green Elf Warrior creature token.\nKinfall — Whenever a creature enters the battlefield under your control, if it shares a creature type with Plane-Merge Elf, creatures you control get +1/+1 until end of turn. diff --git a/forge-gui/res/cardsfolder/p/porcelain_legionnaire.txt b/forge-gui/res/cardsfolder/p/porcelain_legionnaire.txt index 48965521815..9f286a4ec18 100644 --- a/forge-gui/res/cardsfolder/p/porcelain_legionnaire.txt +++ b/forge-gui/res/cardsfolder/p/porcelain_legionnaire.txt @@ -1,6 +1,6 @@ Name:Porcelain Legionnaire ManaCost:2 PW -Types:Artifact Creature Soldier +Types:Artifact Creature Phyrexian Soldier PT:3/1 K:First Strike SVar:Picture:http://www.wizards.com/global/images/magic/general/porcelain_legionnaire.jpg diff --git a/forge-gui/res/cardsfolder/p/power_depot.txt b/forge-gui/res/cardsfolder/p/power_depot.txt index 8ffb95cb670..9cb958d1615 100644 --- a/forge-gui/res/cardsfolder/p/power_depot.txt +++ b/forge-gui/res/cardsfolder/p/power_depot.txt @@ -4,7 +4,7 @@ Types:Artifact Land K:CARDNAME enters the battlefield tapped. K:Modular:1 A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ Mana | Cost$ T | Produced$ Any | RestrictValid$ Spell.Artifact,Activated.Artifact | SpellDescription$ Add {C}. Spend this mana only to cast artifact spells or activate abilities of artifacts. +A:AB$ Mana | Cost$ T | Produced$ Any | RestrictValid$ Spell.Artifact,Activated.Artifact | SpellDescription$ Add one mana of any color. Spend this mana only to cast artifact spells or activate abilities of artifacts. DeckHints:Type$Artifact DeckHas:Ability$Counters -Oracle:Power Depot enters the battlefield tapped.\n{T}: Add {C}.\n{T}: Add {C}. Spend this mana only to cast artifact spells or activate abilities of artifacts.\nModular 1 (This land enters the battlefield with a +1/+1 counter on it. When it is put into a graveyard from the battlefield, you may put its +1/+1 counters on target artifact creature.) +Oracle:Power Depot enters the battlefield tapped.\n{T}: Add {C}.\n{T}: Add one mana of any color. Spend this mana only to cast artifact spells or activate abilities of artifacts.\nModular 1 diff --git a/forge-gui/res/cardsfolder/p/priest_of_gix.txt b/forge-gui/res/cardsfolder/p/priest_of_gix.txt index 9d6bceb1781..eb521e5ccce 100644 --- a/forge-gui/res/cardsfolder/p/priest_of_gix.txt +++ b/forge-gui/res/cardsfolder/p/priest_of_gix.txt @@ -1,6 +1,6 @@ Name:Priest of Gix ManaCost:2 B -Types:Creature Human Cleric Minion +Types:Creature Phyrexian Human Cleric Minion PT:2/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigMana | TriggerDescription$ When CARDNAME enters the battlefield, add {B}{B}{B}. SVar:TrigMana:DB$Mana | Produced$ B | Amount$ 3 diff --git a/forge-gui/res/cardsfolder/p/priest_of_urabrask.txt b/forge-gui/res/cardsfolder/p/priest_of_urabrask.txt index a4c21a6a48f..e8536784357 100644 --- a/forge-gui/res/cardsfolder/p/priest_of_urabrask.txt +++ b/forge-gui/res/cardsfolder/p/priest_of_urabrask.txt @@ -1,6 +1,6 @@ Name:Priest of Urabrask ManaCost:2 R -Types:Creature Human Cleric +Types:Creature Phyrexian Human Cleric PT:2/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigMana | TriggerDescription$ When CARDNAME enters the battlefield, add {R}{R}{R}. SVar:TrigMana:DB$Mana | Produced$ R | Amount$ 3 diff --git a/forge-gui/res/cardsfolder/p/priest_of_yawgmoth.txt b/forge-gui/res/cardsfolder/p/priest_of_yawgmoth.txt index f49462ef7d7..4e1704c31b0 100644 --- a/forge-gui/res/cardsfolder/p/priest_of_yawgmoth.txt +++ b/forge-gui/res/cardsfolder/p/priest_of_yawgmoth.txt @@ -1,6 +1,6 @@ Name:Priest of Yawgmoth ManaCost:1 B -Types:Creature Human Cleric +Types:Creature Phyrexian Human Cleric PT:1/2 A:AB$ Mana | Cost$ T Sac<1/Artifact> | Produced$ B | Amount$ X | SpellDescription$ Add an amount of black mana equal to the sacrificed artifact's mana value. SVar:X:Sacrificed$CardManaCost diff --git a/forge-gui/res/cardsfolder/p/priests_of_norn.txt b/forge-gui/res/cardsfolder/p/priests_of_norn.txt index 0167d8e72ba..2ef0cca2de3 100644 --- a/forge-gui/res/cardsfolder/p/priests_of_norn.txt +++ b/forge-gui/res/cardsfolder/p/priests_of_norn.txt @@ -1,6 +1,6 @@ Name:Priests of Norn ManaCost:2 W -Types:Creature Cleric +Types:Creature Phyrexian Cleric PT:1/4 K:Vigilance K:Infect diff --git a/forge-gui/res/cardsfolder/p/prison_realm.txt b/forge-gui/res/cardsfolder/p/prison_realm.txt index 665dab26ea4..4f59787884d 100644 --- a/forge-gui/res/cardsfolder/p/prison_realm.txt +++ b/forge-gui/res/cardsfolder/p/prison_realm.txt @@ -1,6 +1,6 @@ Name:Prison Realm ManaCost:2 W -Types: Enchantment +Types:Enchantment T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, exile target creature or planeswalker an opponent controls until CARDNAME leaves the battlefield. | SpellDescription$ When CARDNAME enters the battlefield, exile target creature or planeswalker an opponent controls until CARDNAME leaves the battlefield. SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature.OppCtrl,Planeswalker.OppCtrl | TgtPrompt$ Select target creature an opponent controls | Duration$ UntilHostLeavesPlay SVar:PlayMain1:TRUE diff --git a/forge-gui/res/cardsfolder/p/prophetic_titan.txt b/forge-gui/res/cardsfolder/p/prophetic_titan.txt index 5eebcdb16d6..8460bbfe93a 100644 --- a/forge-gui/res/cardsfolder/p/prophetic_titan.txt +++ b/forge-gui/res/cardsfolder/p/prophetic_titan.txt @@ -2,11 +2,11 @@ Name:Prophetic Titan ManaCost:4 U R Types:Creature Giant Wizard PT:4/4 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigCharm | TriggerDescription$ Delirium — When CARDNAME enters the battlefield, choose one. If there are four or more card types in your graveyard, choose both. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigCharm | TriggerDescription$ Delirium — When CARDNAME enters the battlefield, choose one. If there are four or more card types among cards in your graveyard, choose both instead. SVar:TrigCharm:DB$ Charm | CharmNum$ X | Choices$ DBDealDamage,DBDig | AdditionalDescription$ If there are four or more card types in your graveyard, choose both. SVar:DBDealDamage:DB$ DealDamage | ValidTgts$ Creature,Planeswalker,Player | TgtPrompt$ Select any target | NumDmg$ 4 | SpellDescription$ CARDNAME deals 4 damage to any target. -SVar:DBDig:DB$ Dig | DigNum$ 4 | RestRandomOrder$ True | SpellDescription$ Look at the top four cards of your library. Put one in your hand and the rest on the bottom of your library in a random order. +SVar:DBDig:DB$ Dig | DigNum$ 4 | RestRandomOrder$ True | SpellDescription$ Look at the top four cards of your library. Put one of them into your hand and the rest on the bottom of your library in a random order. SVar:X:Count$Compare Y GE4.2.1 SVar:Y:Count$CardControllerTypes.Graveyard SVar:PlayMain1:TRUE -Oracle:Delirium — When Prophetic Titan enters the battlefield, choose one. If there are four or more card types in your graveyard, choose both.\n• Prophetic Titan deals 4 damage to any target.\n• Look at the top four cards of your library. Put one in your hand and the rest on the bottom of your library in a random order. +Oracle:Delirium — When Prophetic Titan enters the battlefield, choose one. If there are four or more card types among cards in your graveyard, choose both instead.\n• Prophetic Titan deals 4 damage to any target.\n• Look at the top four cards of your library. Put one of them into your hand and the rest on the bottom of your library in a random order. diff --git a/forge-gui/res/cardsfolder/p/psychosis_crawler.txt b/forge-gui/res/cardsfolder/p/psychosis_crawler.txt index e705ac99bad..57eb9ed3173 100644 --- a/forge-gui/res/cardsfolder/p/psychosis_crawler.txt +++ b/forge-gui/res/cardsfolder/p/psychosis_crawler.txt @@ -1,6 +1,6 @@ Name:Psychosis Crawler ManaCost:5 -Types:Artifact Creature Horror +Types:Artifact Creature Phyrexian Horror PT:*/* S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetPower$ X | SetToughness$ X | Description$ CARDNAME's power and toughness are each equal to the number of cards in your hand. SVar:X:Count$InYourHand diff --git a/forge-gui/res/cardsfolder/p/putrefax.txt b/forge-gui/res/cardsfolder/p/putrefax.txt index f669a2d70cf..eb87dfea344 100644 --- a/forge-gui/res/cardsfolder/p/putrefax.txt +++ b/forge-gui/res/cardsfolder/p/putrefax.txt @@ -1,6 +1,6 @@ Name:Putrefax ManaCost:3 G G -Types:Creature Horror +Types:Creature Phyrexian Horror PT:5/3 K:Trample K:Haste diff --git a/forge-gui/res/cardsfolder/q/quilled_slagwurm.txt b/forge-gui/res/cardsfolder/q/quilled_slagwurm.txt index 931f9af4142..b78be6444f1 100644 --- a/forge-gui/res/cardsfolder/q/quilled_slagwurm.txt +++ b/forge-gui/res/cardsfolder/q/quilled_slagwurm.txt @@ -1,6 +1,6 @@ Name:Quilled Slagwurm ManaCost:4 G G G -Types:Creature Wurm +Types:Creature Phyrexian Wurm PT:8/8 SVar:Picture:http://www.wizards.com/global/images/magic/general/quilled_slagwurm.jpg Oracle: diff --git a/forge-gui/res/cardsfolder/q/quirion_ranger.txt b/forge-gui/res/cardsfolder/q/quirion_ranger.txt index c7740381073..257ebaaa8bb 100644 --- a/forge-gui/res/cardsfolder/q/quirion_ranger.txt +++ b/forge-gui/res/cardsfolder/q/quirion_ranger.txt @@ -1,6 +1,6 @@ Name:Quirion Ranger ManaCost:G -Types:Creature Elf +Types:Creature Elf Ranger PT:1/1 A:AB$ Untap | Cost$ Return<1/Forest> | ValidTgts$ Creature | TgtPrompt$ Select target creature | ActivationLimit$ 1 | SpellDescription$ Untap target creature. Activate only once each turn. AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/r/rackling.txt b/forge-gui/res/cardsfolder/r/rackling.txt index 15efe7f8489..402fd1b558a 100644 --- a/forge-gui/res/cardsfolder/r/rackling.txt +++ b/forge-gui/res/cardsfolder/r/rackling.txt @@ -1,6 +1,6 @@ Name:Rackling ManaCost:4 -Types:Artifact Creature Construct +Types:Artifact Creature Phyrexian Construct PT:2/2 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player.Opponent | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ At the beginning of each opponent's upkeep, CARDNAME deals X damage to that player, where X is 3 minus the number of cards in their hand. SVar:TrigDamage:DB$ DealDamage | Defined$ TriggeredPlayer | NumDmg$ X diff --git a/forge-gui/res/cardsfolder/r/rakdos_headliner.txt b/forge-gui/res/cardsfolder/r/rakdos_headliner.txt index 6f51fae7098..ae6449f9803 100644 --- a/forge-gui/res/cardsfolder/r/rakdos_headliner.txt +++ b/forge-gui/res/cardsfolder/r/rakdos_headliner.txt @@ -4,4 +4,4 @@ Types:Creature Devil PT:3/3 K:Haste K:Echo:Discard<1/Card> -Oracle:Haste\nEcho — Discard a card. (At the beginning of your upkeep, if this came under your control since the beginning of your last upkeep, sacrifice it unless you pay its echo cost.) +Oracle:Haste\nEcho—Discard a card. (At the beginning of your upkeep, if this came under your control since the beginning of your last upkeep, sacrifice it unless you pay its echo cost.) diff --git a/forge-gui/res/cardsfolder/r/ranar_the_ever_watchful.txt b/forge-gui/res/cardsfolder/r/ranar_the_ever_watchful.txt index 23cfd47c079..50d85fcb71c 100644 --- a/forge-gui/res/cardsfolder/r/ranar_the_ever_watchful.txt +++ b/forge-gui/res/cardsfolder/r/ranar_the_ever_watchful.txt @@ -5,7 +5,8 @@ PT:2/3 K:Flying K:Vigilance S:Mode$ ReduceCost | ValidCard$ Card | Type$ Foretell | Amount$ 2 | FirstForetell$ True | Activator$ You | Description$ The first card you foretell each turn costs {0} to foretell. -T:Mode$ ChangesZoneAll | ValidCause$ SpellAbility.YouCtrl | Origin$ Hand,Battlefield | Destination$ Exile | ValidCards$ Card.YouOwn,Card.inZoneBattlefield | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ Whenever a spell or ability you control exiles one or more cards from your hand and/or permanents from the battlefield, create a 1/1 white Spirit creature token with flying. +T:Mode$ ChangesZoneAll | Origin$ Hand | Destination$ Exile | ValidCards$ Card.YouOwn | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ Whenever one or more cards are put into exile from your hand or a spell or ability you control exiles one or more permanents from the battlefield, create a 1/1 white Spirit creature token with flying. +T:Mode$ ChangesZoneAll | ValidCause$ SpellAbility.YouCtrl | Origin$ Battlefield | Destination$ Exile | Execute$ TrigToken | TriggerZones$ Battlefield | Secondary$ True | TriggerDescription$ Whenever one or more cards are put into exile from your hand or a spell or ability you control exiles one or more permanents from the battlefield, create a 1/1 white Spirit creature token with flying. SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ w_1_1_spirit_flying | TokenOwner$ You DeckHas:Ability$Token -Oracle:Flying, vigilance\nThe first card you foretell each turn costs {0} to foretell.\nWhenever a spell or ability you control exiles one or more cards from your hand and/or permanents from the battlefield, create a 1/1 white Spirit creature token with flying. +Oracle:Flying, vigilance\nThe first card you foretell each turn costs {0} to foretell.\nWhenever one or more cards are put into exile from your hand or a spell or ability you control exiles one or more permanents from the battlefield, create a 1/1 white Spirit creature token with flying. diff --git a/forge-gui/res/cardsfolder/r/ranger_captain_of_eos.txt b/forge-gui/res/cardsfolder/r/ranger_captain_of_eos.txt index 40ba7d1776f..f7994cd0e4e 100644 --- a/forge-gui/res/cardsfolder/r/ranger_captain_of_eos.txt +++ b/forge-gui/res/cardsfolder/r/ranger_captain_of_eos.txt @@ -1,6 +1,6 @@ Name:Ranger-Captain of Eos ManaCost:1 W W -Types:Creature Human Soldier +Types:Creature Human Soldier Ranger PT:3/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | OptionalDecider$ You | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library for a creature card with mana value 1 or less, reveal that card, reveal it, put it into your hand, then shuffle. SVar:TrigChange:DB$ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Creature.cmcLE1 | ChangeNum$ 1 | ShuffleNonMandatory$ True diff --git a/forge-gui/res/cardsfolder/r/rathi_assassin.txt b/forge-gui/res/cardsfolder/r/rathi_assassin.txt index f140894b7bd..c03ee3f50a0 100644 --- a/forge-gui/res/cardsfolder/r/rathi_assassin.txt +++ b/forge-gui/res/cardsfolder/r/rathi_assassin.txt @@ -1,6 +1,6 @@ Name:Rathi Assassin ManaCost:2 B B -Types:Creature Zombie Mercenary Assassin +Types:Creature Phyrexian Zombie Mercenary Assassin PT:2/2 A:AB$ ChangeZone | Cost$ 3 T | Origin$ Library | Destination$ Battlefield | ChangeType$ Permanent.Mercenary+cmcLE3 | ChangeNum$ 1 | SpellDescription$ Search your library for a Mercenary permanent card with mana value 3 or less, put it onto the battlefield, then shuffle. A:AB$ Destroy | Cost$ 1 B B T | ValidTgts$ Creature.tapped+nonBlack | TgtPrompt$ Select target tapped nonblack creature | SpellDescription$ Destroy target tapped nonblack creature. diff --git a/forge-gui/res/cardsfolder/r/rathi_fiend.txt b/forge-gui/res/cardsfolder/r/rathi_fiend.txt index 2f21a2dc9e6..a89643056fb 100644 --- a/forge-gui/res/cardsfolder/r/rathi_fiend.txt +++ b/forge-gui/res/cardsfolder/r/rathi_fiend.txt @@ -1,6 +1,6 @@ Name:Rathi Fiend ManaCost:3 B -Types:Creature Horror Mercenary +Types:Creature Phyrexian Horror Mercenary PT:2/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigLoseLife | TriggerDescription$ When CARDNAME enters the battlefield, each player loses 3 life. SVar:TrigLoseLife:DB$ LoseLife | Defined$ Player | LifeAmount$ 3 diff --git a/forge-gui/res/cardsfolder/r/rathi_intimidator.txt b/forge-gui/res/cardsfolder/r/rathi_intimidator.txt index b68f154097c..b4ac9be152d 100644 --- a/forge-gui/res/cardsfolder/r/rathi_intimidator.txt +++ b/forge-gui/res/cardsfolder/r/rathi_intimidator.txt @@ -1,6 +1,6 @@ Name:Rathi Intimidator ManaCost:1 B B -Types:Creature Horror Mercenary +Types:Creature Phyrexian Horror Mercenary PT:2/1 K:Fear A:AB$ ChangeZone | Cost$ 2 T | Origin$ Library | Destination$ Battlefield | ChangeType$ Permanent.Mercenary+cmcLE2 | ChangeNum$ 1 | SpellDescription$ Search your library for a Mercenary permanent card with mana value 2 or less, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/r/ravenous_skirge.txt b/forge-gui/res/cardsfolder/r/ravenous_skirge.txt index 2e3948703b7..63389c4c126 100644 --- a/forge-gui/res/cardsfolder/r/ravenous_skirge.txt +++ b/forge-gui/res/cardsfolder/r/ravenous_skirge.txt @@ -1,6 +1,6 @@ Name:Ravenous Skirge ManaCost:2 B -Types:Creature Imp +Types:Creature Phyrexian Imp PT:1/1 K:Flying T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, it gets +2/+0 until end of turn. diff --git a/forge-gui/res/cardsfolder/r/raving_visionary.txt b/forge-gui/res/cardsfolder/r/raving_visionary.txt index e7a9c2ae2d4..03d86513621 100644 --- a/forge-gui/res/cardsfolder/r/raving_visionary.txt +++ b/forge-gui/res/cardsfolder/r/raving_visionary.txt @@ -4,7 +4,7 @@ Types:Creature Merfolk Wizard PT:1/1 A:AB$ Draw | Cost$ U T | NumCards$ 1 | SpellDescription$ Draw a card, then discard a card. | SubAbility$ DBDiscard SVar:DBDiscard:DB$Discard | Defined$ You | Mode$ TgtChoose | NumCards$ 1 -A:AB$ Draw | Cost$ 2 U T | NumCards$ 1 | Activation$ Delirium | PrecostDesc$ Delirium — | SpellDescription$ Draw a card. Activate this ability only if there are four or more card types among cards in your graveyard. +A:AB$ Draw | Cost$ 2 U T | NumCards$ 1 | Activation$ Delirium | PrecostDesc$ Delirium — | SpellDescription$ Draw a card. Activate only if there are four or more card types among cards in your graveyard. DeckHints:Ability$Graveyard & Ability$Discard DeckHas:Ability$Delirium -Oracle:{U}{T}: Draw a card, then discard a card.\nDelirium — {2}{U}, {T}: Draw a card. Activate this ability only if there are four or more card types among cards in your graveyard. +Oracle:{U}, {T}: Draw a card, then discard a card.\nDelirium — {2}{U}, {T}: Draw a card. Activate only if there are four or more card types among cards in your graveyard. diff --git a/forge-gui/res/cardsfolder/r/razor_swine.txt b/forge-gui/res/cardsfolder/r/razor_swine.txt index ca3fcc28e3a..eb14b822c76 100644 --- a/forge-gui/res/cardsfolder/r/razor_swine.txt +++ b/forge-gui/res/cardsfolder/r/razor_swine.txt @@ -1,6 +1,6 @@ Name:Razor Swine ManaCost:2 R -Types:Creature Boar +Types:Creature Phyrexian Boar PT:2/1 K:First Strike K:Infect diff --git a/forge-gui/res/cardsfolder/r/reaper_of_sheoldred.txt b/forge-gui/res/cardsfolder/r/reaper_of_sheoldred.txt index 339bb39e938..f33bda0540c 100644 --- a/forge-gui/res/cardsfolder/r/reaper_of_sheoldred.txt +++ b/forge-gui/res/cardsfolder/r/reaper_of_sheoldred.txt @@ -1,6 +1,6 @@ Name:Reaper of Sheoldred ManaCost:4 B -Types:Creature Horror +Types:Creature Phyrexian Horror PT:2/5 K:Infect T:Mode$ DamageDone | ValidTarget$ Card.Self | Execute$ TrigSac | TriggerZones$ Battlefield | TriggerDescription$ Whenever a source deals damage to CARDNAME, that source's controller gets a poison counter. diff --git a/forge-gui/res/cardsfolder/r/resurgent_belief.txt b/forge-gui/res/cardsfolder/r/resurgent_belief.txt index 887e262f7ef..0c1e302a7d7 100644 --- a/forge-gui/res/cardsfolder/r/resurgent_belief.txt +++ b/forge-gui/res/cardsfolder/r/resurgent_belief.txt @@ -6,4 +6,4 @@ K:Suspend:2:1 W A:SP$ ChangeZoneAll | ChangeType$ Enchantment.YouOwn | Origin$ Graveyard | Destination$ Battlefield | SpellDescription$ Return all enchantment cards from your graveyard to the battlefield. (Auras with nothing to enchant remain in your graveyard.) DeckNeeds:Type$Enchantment AI:RemoveDeck:Random -Oracle:Suspend 2 — {1}{W} (Rather than cast this card from your hand, pay {1}{W} and exile it with two time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost.)\nReturn all enchantment cards from your graveyard to the battlefield. (Auras with nothing to enchant remain in your graveyard.) +Oracle:Suspend 2—{1}{W} (Rather than cast this card from your hand, you may pay {1}{W} and exile it with two time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost.)\nReturn all enchantment cards from your graveyard to the battlefield. (Auras with nothing to enchant remain in your graveyard.) diff --git a/forge-gui/res/cardsfolder/r/rift_sower.txt b/forge-gui/res/cardsfolder/r/rift_sower.txt index 95609684341..9a2f9c9d0cd 100644 --- a/forge-gui/res/cardsfolder/r/rift_sower.txt +++ b/forge-gui/res/cardsfolder/r/rift_sower.txt @@ -4,4 +4,4 @@ Types:Creature Elf Druid PT:1/3 K:Suspend:2:G A:AB$ Mana | Cost$ T | Produced$ Any | SpellDescription$ Add one mana of any color. -Oracle:{T}: Add one mana of any color.\nSuspend 2—{G} (Rather than cast this card from your hand, you may pay {G} and exile it with two time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost.) +Oracle:{T}: Add one mana of any color.\nSuspend 2—{G} (Rather than cast this card from your hand, pay {G} and exile it with two time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost.) diff --git a/forge-gui/res/cardsfolder/r/rishadan_dockhand.txt b/forge-gui/res/cardsfolder/r/rishadan_dockhand.txt index 1ecdc9a1d78..ccb93d44aa8 100644 --- a/forge-gui/res/cardsfolder/r/rishadan_dockhand.txt +++ b/forge-gui/res/cardsfolder/r/rishadan_dockhand.txt @@ -4,4 +4,4 @@ Types:Creature Merfolk PT:1/2 K:Islandwalk A:AB$ Tap | Cost$ 1 T | ValidTgts$ Land | TgtPrompt$ Select target land | SpellDescription$ Tap target land. -Oracle:Islandwalk\n{1}, {T}: Tap target land. +Oracle:Islandwalk (This creature can't be blocked as long as defending player controls an Island.)\n{1}, {T}: Tap target land. diff --git a/forge-gui/res/cardsfolder/r/road_ruin.txt b/forge-gui/res/cardsfolder/r/road_ruin.txt index 146d84a0849..4700b58f241 100644 --- a/forge-gui/res/cardsfolder/r/road_ruin.txt +++ b/forge-gui/res/cardsfolder/r/road_ruin.txt @@ -13,4 +13,4 @@ Types:Sorcery K:Aftermath A:SP$ DealDamage | Cost$ 1 R R | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ X | SpellDescription$ CARDNAME deals damage to target creature equal to the number of lands you control. SVar:X:Count$TypeYouCtrl.Land -Oracle:Ruin deals damage to target creature equal to the number of lands you control. +Oracle:Aftermath (Cast this spell only from your graveyard. Then exile it.)\nRuin deals damage to target creature equal to the number of lands you control. diff --git a/forge-gui/res/cardsfolder/r/robot_chicken.txt b/forge-gui/res/cardsfolder/r/robot_chicken.txt index b3527cfd37b..55ae787f875 100644 --- a/forge-gui/res/cardsfolder/r/robot_chicken.txt +++ b/forge-gui/res/cardsfolder/r/robot_chicken.txt @@ -1,6 +1,6 @@ Name:Robot Chicken ManaCost:4 -Types:Artifact Creature Bird Construct +Types:Artifact Creature Chicken Construct PT:2/2 T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ You | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast a spell, put a 0/1 colorless Egg artifact creature token onto the battlefield. SVar:TrigToken:DB$Token | TokenScript$ c_0_1_a_egg diff --git a/forge-gui/res/cardsfolder/r/rot_wolf.txt b/forge-gui/res/cardsfolder/r/rot_wolf.txt index 986c42f82f2..6ed126961a4 100644 --- a/forge-gui/res/cardsfolder/r/rot_wolf.txt +++ b/forge-gui/res/cardsfolder/r/rot_wolf.txt @@ -1,6 +1,6 @@ Name:Rot Wolf ManaCost:2 G -Types:Creature Wolf +Types:Creature Phyrexian Wolf PT:2/2 K:Infect T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.DamagedBy | OptionalDecider$ You | Execute$ TrigDraw | TriggerDescription$ Whenever a creature dealt damage by CARDNAME this turn dies, you may draw a card. diff --git a/forge-gui/res/cardsfolder/r/rotted_hystrix.txt b/forge-gui/res/cardsfolder/r/rotted_hystrix.txt index ac2d5671ccb..b5c449f11b6 100644 --- a/forge-gui/res/cardsfolder/r/rotted_hystrix.txt +++ b/forge-gui/res/cardsfolder/r/rotted_hystrix.txt @@ -1,6 +1,6 @@ Name:Rotted Hystrix ManaCost:4 G -Types:Creature Beast +Types:Creature Phyrexian Beast PT:3/6 SVar:Picture:http://www.wizards.com/global/images/magic/general/rotted_hystrix.jpg Oracle: diff --git a/forge-gui/res/cardsfolder/r/ruinous_gremlin.txt b/forge-gui/res/cardsfolder/r/ruinous_gremlin.txt index 7ddadb682cb..b608a2756fc 100644 --- a/forge-gui/res/cardsfolder/r/ruinous_gremlin.txt +++ b/forge-gui/res/cardsfolder/r/ruinous_gremlin.txt @@ -1,7 +1,7 @@ Name:Ruinous Gremlin ManaCost:R -Types: Creature Gremlin +Types:Creature Gremlin PT:1/1 A:AB$ Destroy | Cost$ 2 R Sac<1/CARDNAME> | ValidTgts$ Artifact | TgtPrompt$ Select target artifact | SpellDescription$ Destroy target artifact. SVar:Picture:http://www.wizards.com/global/images/magic/general/ruinous_gremlin.jpg -Oracle:{2}{R}, Sacrifice Ruinous Gremlin: Destroy target artifact. \ No newline at end of file +Oracle:{2}{R}, Sacrifice Ruinous Gremlin: Destroy target artifact. diff --git a/forge-gui/res/cardsfolder/r/rusted_slasher.txt b/forge-gui/res/cardsfolder/r/rusted_slasher.txt index 55aa48c6af6..dd64de2d4b6 100644 --- a/forge-gui/res/cardsfolder/r/rusted_slasher.txt +++ b/forge-gui/res/cardsfolder/r/rusted_slasher.txt @@ -1,6 +1,6 @@ Name:Rusted Slasher ManaCost:4 -Types:Artifact Creature Horror +Types:Artifact Creature Phyrexian Horror PT:4/1 A:AB$ Regenerate | Cost$ Sac<1/Artifact> | SpellDescription$ Regenerate CARDNAME. SVar:AIPreference:SacCost$Artifact.token,Artifact.cmcEQ1,Artifact.cmcEQ2 diff --git a/forge-gui/res/cardsfolder/s/said_done.txt b/forge-gui/res/cardsfolder/s/said_done.txt index ef8f83e66cf..2bd2bc09fff 100644 --- a/forge-gui/res/cardsfolder/s/said_done.txt +++ b/forge-gui/res/cardsfolder/s/said_done.txt @@ -10,6 +10,6 @@ ALTERNATE Name:Done ManaCost:3 U Types:Instant -A:SP$ Tap | Cost$ 3 U | TargetMin$ 0 | TargetMax$ 2 | TgtPrompt$ Choose up to two target creatures | ValidTgts$ Creature | SubAbility$ TrigPump | StackDescription$ SpellDescription | SpellDescription$ Tap up to two target creatures. Those creatures don't untap during their controller's next untap step. +A:SP$ Tap | Cost$ 3 U | TargetMin$ 0 | TargetMax$ 2 | TgtPrompt$ Choose up to two target creatures | ValidTgts$ Creature | SubAbility$ TrigPump | StackDescription$ SpellDescription | SpellDescription$ Tap up to two target creatures. They don't untap during their controllers' next untap step. SVar:TrigPump:DB$ Pump | Defined$ Targeted | KW$ HIDDEN This card doesn't untap during your next untap step. | Permanent$ True | StackDescription$ None -Oracle:Tap up to two target creatures. Those creatures don't untap during their controller's next untap step. +Oracle:Tap up to two target creatures. They don't untap during their controllers' next untap step. diff --git a/forge-gui/res/cardsfolder/s/samite_ministration.txt b/forge-gui/res/cardsfolder/s/samite_ministration.txt index bce16473f4a..8d22e1ff862 100644 --- a/forge-gui/res/cardsfolder/s/samite_ministration.txt +++ b/forge-gui/res/cardsfolder/s/samite_ministration.txt @@ -3,10 +3,12 @@ ManaCost:1 W Types:Instant A:SP$ ChooseSource | Cost$ 1 W | Choices$ Card,Emblem | AILogic$ NeedsPrevention | SubAbility$ DBEffect | StackDescription$ SpellDescription | SpellDescription$ Prevent all damage that would be dealt to you this turn by a source of your choice. Whenever damage from a black or red source is prevented this way this turn, you gain that much life. SVar:DBEffect:DB$ Effect | ReplacementEffects$ RepDmg | SubAbility$ DBCleanup | ConditionDefined$ ChosenCard | ConditionPresent$ Card,Emblem | ConditionCompare$ GE1 -SVar:RepDmg:Event$ DamageDone | ValidTarget$ You | ValidSource$ Card.ChosenCard,Emblem.ChosenCard | ReplaceWith$ GainLifeYou | PreventionEffect$ True | Description$ Prevent all damage that would be dealt to you this turn by a source of your choice. Whenever damage from a black or red source is prevented this way this turn, you gain that much life. -SVar:GainLifeYou:DB$ GainLife | Defined$ You | LifeAmount$ X | ConditionCheckSVar$ Y | ConditionSVarCompare$ GE1 +SVar:RepDmg:Event$ DamageDone | ValidTarget$ You | ValidSource$ Card.ChosenCard,Emblem.ChosenCard | ReplaceWith$ DBStoreSVar | PreventionEffect$ True | Description$ Prevent all damage that would be dealt to you this turn by a source of your choice. Whenever damage from a black or red source is prevented this way this turn, you gain that much life. +SVar:DBStoreSVar:DB$ StoreSVar | SVar$ Z | Type$ Calculate | Expression$ X | SubAbility$ DBTrigger +SVar:DBTrigger:DB$ ImmediateTrigger | Execute$ GainLifeYou | ConditionCheckSVar$ Y | ConditionSVarCompare$ GE1 | TriggerDescription$ Whenever damage from a black or red source is prevented this way this turn, you gain that much life. +SVar:GainLifeYou:DB$ GainLife | Defined$ You | LifeAmount$ Z SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True SVar:X:ReplaceCount$DamageAmount SVar:Y:ReplacedSource$Valid Card.BlackSource,Card.RedSource -SVar:Picture:http://www.wizards.com/global/images/magic/general/samite_ministration.jpg +SVar:Z:Number$0 Oracle:Prevent all damage that would be dealt to you this turn by a source of your choice. Whenever damage from a black or red source is prevented this way this turn, you gain that much life. diff --git a/forge-gui/res/cardsfolder/s/sanctuary_raptor.txt b/forge-gui/res/cardsfolder/s/sanctuary_raptor.txt index 906008e3bf6..a23040fe33c 100644 --- a/forge-gui/res/cardsfolder/s/sanctuary_raptor.txt +++ b/forge-gui/res/cardsfolder/s/sanctuary_raptor.txt @@ -6,4 +6,4 @@ K:Flying T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | IsPresent$ Permanent.token+YouCtrl | PresentCompare$ GE3 | TriggerDescription$ Whenever CARDNAME attacks, if you control three or more tokens, CARDNAME gets +2/+0 and gains first strike until end of turn. SVar:TrigPump:DB$ Pump | Defined$ Self | NumAtt$ 2 | KW$ First Strike DeckHints:Ability$Token -Oracle:Whenever Sanctuary Raptor attacks, if you control three or more tokens, Sanctuary Raptor gets +2/+0 and gains first strike until end of turn. +Oracle:Flying\nWhenever Sanctuary Raptor attacks, if you control three or more tokens, Sanctuary Raptor gets +2/+0 and gains first strike until end of turn. diff --git a/forge-gui/res/cardsfolder/s/sanguine_guard.txt b/forge-gui/res/cardsfolder/s/sanguine_guard.txt index 4e21add5a79..6177e10ed26 100644 --- a/forge-gui/res/cardsfolder/s/sanguine_guard.txt +++ b/forge-gui/res/cardsfolder/s/sanguine_guard.txt @@ -1,6 +1,6 @@ Name:Sanguine Guard ManaCost:1 B B -Types:Creature Zombie Knight +Types:Creature Phyrexian Zombie Knight PT:2/2 K:First Strike A:AB$ Regenerate | Cost$ 1 B | SpellDescription$ Regenerate CARDNAME. diff --git a/forge-gui/res/cardsfolder/s/sarcomite_myr.txt b/forge-gui/res/cardsfolder/s/sarcomite_myr.txt index dd7e562d729..8b640f561a0 100644 --- a/forge-gui/res/cardsfolder/s/sarcomite_myr.txt +++ b/forge-gui/res/cardsfolder/s/sarcomite_myr.txt @@ -1,6 +1,6 @@ Name:Sarcomite Myr ManaCost:2 U -Types:Artifact Creature Myr +Types:Artifact Creature Phyrexian Myr PT:2/1 A:AB$ Pump | Cost$ 2 | KW$ Flying | Defined$ Self | SpellDescription$ CARDNAME gains flying until end of turn. A:AB$ Draw | Cost$ 2 Sac<1/CARDNAME> | NumCards$ 1 | SpellDescription$ Draw a card. diff --git a/forge-gui/res/cardsfolder/s/scion_of_draco.txt b/forge-gui/res/cardsfolder/s/scion_of_draco.txt index 4db6c4d7153..5ff1a251690 100644 --- a/forge-gui/res/cardsfolder/s/scion_of_draco.txt +++ b/forge-gui/res/cardsfolder/s/scion_of_draco.txt @@ -10,4 +10,4 @@ S:Mode$ Continuous | Affected$ Creature.Black+YouCtrl | AddKeyword$ Lifelink | D S:Mode$ Continuous | Affected$ Creature.Red+YouCtrl | AddKeyword$ First strike | Description$ Each creature you control gains first strike if it's red. S:Mode$ Continuous | Affected$ Creature.Green+YouCtrl | AddKeyword$ Trample | Description$ Each creature you control gains trample if it's green. SVar:X:Count$Domain/Twice -Oracle:Domain — This spell costs {2} less to cast for each basic land type among lands you control.\nFlying\nEach creature you control gains vigilance if it’s white, hexproof if it’s blue, lifelink if it’s black, first strike if it’s red, and trample if it’s green. +Oracle:Domain — This spell costs {2} less to cast for each basic land type among lands you control.\nFlying\nEach creature you control has vigilance if it's white, hexproof if it's blue, lifelink if it's black, first strike if it's red, and trample if it's green. diff --git a/forge-gui/res/cardsfolder/s/scour_the_desert.txt b/forge-gui/res/cardsfolder/s/scour_the_desert.txt index a5dbe6d8462..37dfd3eb14a 100644 --- a/forge-gui/res/cardsfolder/s/scour_the_desert.txt +++ b/forge-gui/res/cardsfolder/s/scour_the_desert.txt @@ -1,8 +1,8 @@ Name:Scour the Desert ManaCost:3 W W Types:Sorcery -A:SP$ ChangeZone | Cost$ 3 W W | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Creature.YouOwn | TgtPrompt$ Choose target creature card in your graveyard | SubAbility$ DBToken | SpellDescription$ Exile target creature card from your graveyard. Create X 1/1 white Bird creature tokens, where X is the exiled card's toughness. +A:SP$ ChangeZone | Cost$ 3 W W | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Creature.YouOwn | TgtPrompt$ Choose target creature card in your graveyard | SubAbility$ DBToken | SpellDescription$ Exile target creature card from your graveyard. Create X 1/1 white Bird creature tokens with flying, where X is the exiled card's toughness. SVar:DBToken:DB$ Token | TokenAmount$ X | TokenScript$ w_1_1_bird_flying | TokenOwner$ You SVar:X:Targeted$CardToughness DeckHas:Ability$Token -Oracle:Exile target creature card from your graveyard. Create X 1/1 white Bird creature tokens, where X is the exiled card's toughness. +Oracle:Exile target creature card from your graveyard. Create X 1/1 white Bird creature tokens with flying, where X is the exiled card's toughness. diff --git a/forge-gui/res/cardsfolder/s/scourge_servant.txt b/forge-gui/res/cardsfolder/s/scourge_servant.txt index 06475c75878..ae61c0c15d2 100644 --- a/forge-gui/res/cardsfolder/s/scourge_servant.txt +++ b/forge-gui/res/cardsfolder/s/scourge_servant.txt @@ -1,6 +1,6 @@ Name:Scourge Servant ManaCost:4 B -Types:Creature Zombie +Types:Creature Phyrexian Zombie PT:3/3 K:Infect SVar:Picture:http://www.wizards.com/global/images/magic/general/scourge_servant.jpg diff --git a/forge-gui/res/cardsfolder/s/scuttling_sliver.txt b/forge-gui/res/cardsfolder/s/scuttling_sliver.txt index 42b0b8de6a0..b7e1f1b09e3 100644 --- a/forge-gui/res/cardsfolder/s/scuttling_sliver.txt +++ b/forge-gui/res/cardsfolder/s/scuttling_sliver.txt @@ -1,6 +1,6 @@ Name:Scuttling Sliver ManaCost:2 U -Types:Creature Sliver +Types:Creature Sliver Trilobite PT:2/2 S:Mode$ Continuous | Affected$ Creature.Sliver+YouCtrl | AddAbility$ SliverUntap | Description$ Sliver creatures you control have "{2}: Untap this creature." SVar:SliverUntap:AB$ Untap | Cost$ 2 | SpellDescription$ Untap this creature. diff --git a/forge-gui/res/cardsfolder/s/scytheclaw.txt b/forge-gui/res/cardsfolder/s/scytheclaw.txt index b981c2ef831..1fd830d7bf0 100644 --- a/forge-gui/res/cardsfolder/s/scytheclaw.txt +++ b/forge-gui/res/cardsfolder/s/scytheclaw.txt @@ -9,4 +9,4 @@ SVar:TrigLoseLifeOpp:DB$ LoseLife | Defined$ TriggeredTarget | LifeAmount$ X SVar:X:TriggeredTarget$LifeTotal/HalfUp DeckHas:Ability$Token SVar:Picture:http://www.wizards.com/global/images/magic/general/scytheclaw.jpg -Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Germ creature token, then attach this to it.)\nEquipped creature gets +1/+1.\nWhenever equipped creature deals combat damage to a player, that player loses half their life, rounded up.\nEquip {3} +Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Phyrexian Germ creature token, then attach this to it.)\nEquipped creature gets +1/+1.\nWhenever equipped creature deals combat damage to a player, that player loses half their life, rounded up.\nEquip {3} diff --git a/forge-gui/res/cardsfolder/s/seal_of_the_guildpact.txt b/forge-gui/res/cardsfolder/s/seal_of_the_guildpact.txt index 89b47554c84..412854b580a 100644 --- a/forge-gui/res/cardsfolder/s/seal_of_the_guildpact.txt +++ b/forge-gui/res/cardsfolder/s/seal_of_the_guildpact.txt @@ -4,7 +4,7 @@ Types:Artifact K:ETBReplacement:Other:ChooseColors SVar:ChooseColors:DB$ ChooseColor | Defined$ You | TwoColors$ True | AILogic$ MostProminentDualInComputerDeck | SpellDescription$ As CARDNAME enters the battlefield, choose two colors. S:Mode$ ReduceCost | ValidCard$ Card | Type$ Spell | Activator$ You | Amount$ Col | Relative$ True | Description$ Each spell you cast costs {1} less to cast for each of the chosen colors it is. -SVar:Col:Count$HasNumChosenColors.Self +SVar:Col:Count$HasNumChosenColors.OriginalHost AI:RemoveDeck:Random SVar:Picture:http://www.wizards.com/global/images/magic/general/seal_of_the_guildpact.jpg Oracle:As Seal of the Guildpact enters the battlefield, choose two colors.\nEach spell you cast costs {1} less to cast for each of the chosen colors it is. diff --git a/forge-gui/res/cardsfolder/s/selenia_dark_angel.txt b/forge-gui/res/cardsfolder/s/selenia_dark_angel.txt index 56172fafa68..712d31e2702 100644 --- a/forge-gui/res/cardsfolder/s/selenia_dark_angel.txt +++ b/forge-gui/res/cardsfolder/s/selenia_dark_angel.txt @@ -1,6 +1,6 @@ Name:Selenia, Dark Angel ManaCost:3 W B -Types:Legendary Creature Angel +Types:Legendary Creature Phyrexian Angel PT:3/3 K:Flying A:AB$ ChangeZone | Cost$ PayLife<2> | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return CARDNAME to its owner's hand. diff --git a/forge-gui/res/cardsfolder/s/sensor_splicer.txt b/forge-gui/res/cardsfolder/s/sensor_splicer.txt index 4cc52fc4ec7..249a2f27ced 100644 --- a/forge-gui/res/cardsfolder/s/sensor_splicer.txt +++ b/forge-gui/res/cardsfolder/s/sensor_splicer.txt @@ -1,9 +1,8 @@ Name:Sensor Splicer ManaCost:4 W -Types:Creature Artificer +Types:Creature Phyrexian Artificer PT:1/1 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a 3/3 colorless Golem artifact creature token. -SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_3_3_a_golem | TokenOwner$ You | LegacyImage$ c 3 3 a golem nph +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a 3/3 colorless Phyrexian Golem artifact creature token. +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_3_3_a_phyrexian_golem | TokenOwner$ You S:Mode$ Continuous | Affected$ Creature.Golem+YouCtrl | AddKeyword$ Vigilance | Description$ Golem creatures you control have vigilance. -SVar:Picture:http://www.wizards.com/global/images/magic/general/sensor_splicer.jpg -Oracle:When Sensor Splicer enters the battlefield, create a 3/3 colorless Golem artifact creature token.\nGolem creatures you control have vigilance. +Oracle:When Sensor Splicer enters the battlefield, create a 3/3 colorless Phyrexian Golem artifact creature token.\nGolem creatures you control have vigilance. diff --git a/forge-gui/res/cardsfolder/s/septic_rats.txt b/forge-gui/res/cardsfolder/s/septic_rats.txt index 0ffc7f21d9a..039c11ee4ad 100644 --- a/forge-gui/res/cardsfolder/s/septic_rats.txt +++ b/forge-gui/res/cardsfolder/s/septic_rats.txt @@ -1,6 +1,6 @@ Name:Septic Rats ManaCost:1 B B -Types:Creature Rat +Types:Creature Phyrexian Rat PT:2/2 K:Infect T:Mode$ Attacks | ValidCard$ Creature.Self | TriggerZones$ Battlefield | DefendingPlayerPoisoned$ True | Execute$ TrigPump | TriggerDescription$ When CARDNAME attacks, if defending player is poisoned, it gets +1/+1 until end of turn. diff --git a/forge-gui/res/cardsfolder/s/serras_emissary.txt b/forge-gui/res/cardsfolder/s/serras_emissary.txt index 0f5d4e890b8..93190eed563 100644 --- a/forge-gui/res/cardsfolder/s/serras_emissary.txt +++ b/forge-gui/res/cardsfolder/s/serras_emissary.txt @@ -5,6 +5,6 @@ PT:7/7 K:Flying K:ETBReplacement:Other:ChooseCT SVar:ChooseCT:DB$ ChooseType | Defined$ You | Type$ Card | AILogic$ MostProminentOppControls | SpellDescription$ As CARDNAME enters the battlefield, choose a card type. -S:Mode$ Continuous | Affected$ You,Creature.YouCtrl | AddKeyword$ Protection from ChosenType | Description$ You and creatures you control have protection from the chosen type. +S:Mode$ Continuous | Affected$ You,Creature.YouCtrl | AddKeyword$ Protection from ChosenType | Description$ You and creatures you control have protection from the chosen card type. SVar:PlayMain1:TRUE -Oracle:As Serra's Emissary enters the battlefield, choose a card type. \nYou and creatures you control have protection from the chosen type. +Oracle:Flying\nAs Serra's Emissary enters the battlefield, choose a card type.\nYou and creatures you control have protection from the chosen card type. diff --git a/forge-gui/res/cardsfolder/s/serum_raker.txt b/forge-gui/res/cardsfolder/s/serum_raker.txt index 7279e9b8ec7..aaa0723aaa2 100644 --- a/forge-gui/res/cardsfolder/s/serum_raker.txt +++ b/forge-gui/res/cardsfolder/s/serum_raker.txt @@ -1,6 +1,6 @@ Name:Serum Raker ManaCost:2 U U -Types:Creature Drake +Types:Creature Phyrexian Drake PT:3/2 K:Flying T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDiscard | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, each player discards a card. diff --git a/forge-gui/res/cardsfolder/s/shattered_angel.txt b/forge-gui/res/cardsfolder/s/shattered_angel.txt index 24fc71ae381..741b5f454e0 100644 --- a/forge-gui/res/cardsfolder/s/shattered_angel.txt +++ b/forge-gui/res/cardsfolder/s/shattered_angel.txt @@ -1,6 +1,6 @@ Name:Shattered Angel ManaCost:3 W W -Types:Creature Angel +Types:Creature Phyrexian Angel PT:3/3 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.OppCtrl | TriggerZones$ Battlefield | Execute$ TrigGain | OptionalDecider$ You | TriggerDescription$ Whenever a land enters the battlefield under an opponent's control, you may gain 3 life. diff --git a/forge-gui/res/cardsfolder/s/sheoldred_whispering_one.txt b/forge-gui/res/cardsfolder/s/sheoldred_whispering_one.txt index ea04fc84f29..cad90c1773a 100644 --- a/forge-gui/res/cardsfolder/s/sheoldred_whispering_one.txt +++ b/forge-gui/res/cardsfolder/s/sheoldred_whispering_one.txt @@ -1,6 +1,6 @@ Name:Sheoldred, Whispering One ManaCost:5 B B -Types:Legendary Creature Praetor +Types:Legendary Creature Phyrexian Praetor PT:6/6 K:Swampwalk T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigChange | TriggerDescription$ At the beginning of your upkeep, return target creature card from your graveyard to the battlefield. diff --git a/forge-gui/res/cardsfolder/s/shivan_zombie.txt b/forge-gui/res/cardsfolder/s/shivan_zombie.txt index 28b7283bcc5..8608685675d 100644 --- a/forge-gui/res/cardsfolder/s/shivan_zombie.txt +++ b/forge-gui/res/cardsfolder/s/shivan_zombie.txt @@ -1,6 +1,6 @@ Name:Shivan Zombie ManaCost:B R -Types:Creature Barbarian Zombie +Types:Creature Phyrexian Barbarian Zombie PT:2/2 K:Protection from white SVar:Picture:http://www.wizards.com/global/images/magic/general/shivan_zombie.jpg diff --git a/forge-gui/res/cardsfolder/s/shriek_raptor.txt b/forge-gui/res/cardsfolder/s/shriek_raptor.txt index 433b25ca7a8..9a2b538217a 100644 --- a/forge-gui/res/cardsfolder/s/shriek_raptor.txt +++ b/forge-gui/res/cardsfolder/s/shriek_raptor.txt @@ -1,6 +1,6 @@ Name:Shriek Raptor ManaCost:3 W W -Types:Creature Bird +Types:Creature Phyrexian Bird PT:2/3 K:Flying K:Infect diff --git a/forge-gui/res/cardsfolder/s/shrine_of_loyal_legions.txt b/forge-gui/res/cardsfolder/s/shrine_of_loyal_legions.txt index 1457608bbe0..bae82585537 100644 --- a/forge-gui/res/cardsfolder/s/shrine_of_loyal_legions.txt +++ b/forge-gui/res/cardsfolder/s/shrine_of_loyal_legions.txt @@ -4,10 +4,9 @@ Types:Artifact T:Mode$ SpellCast | ValidCard$ Card.White | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigAddCounter | TriggerDescription$ At the beginning of your upkeep or whenever you cast a white spell, put a charge counter on CARDNAME. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigAddCounter | Secondary$ True | TriggerDescription$ At the beginning of your upkeep or whenever you cast a white spell, put a charge counter on CARDNAME. SVar:TrigAddCounter:DB$ PutCounter | CounterType$ CHARGE | CounterNum$ 1 -A:AB$ Token | Cost$ 3 T Sac<1/CARDNAME> | TokenAmount$ X | TokenScript$ c_1_1_a_myr | LegacyImage$ c 1 1 a myr nph | TokenOwner$ You | SpellDescription$ Create a 1/1 colorless Myr artifact creature token for each charge counter on CARDNAME. +A:AB$ Token | Cost$ 3 T Sac<1/CARDNAME> | TokenAmount$ X | TokenScript$ c_1_1_a_phyrexian_myr | TokenOwner$ You | SpellDescription$ Create a 1/1 colorless Phyrexian Myr artifact creature token for each charge counter on CARDNAME. SVar:X:Count$CardCounters.CHARGE DeckNeeds:Color$White DeckHints:Type$Myr DeckHas:Ability$Token -SVar:Picture:http://www.wizards.com/global/images/magic/general/shrine_of_loyal_legions.jpg -Oracle:At the beginning of your upkeep or whenever you cast a white spell, put a charge counter on Shrine of Loyal Legions.\n{3}, {T}, Sacrifice Shrine of Loyal Legions: Create a 1/1 colorless Myr artifact creature token for each charge counter on Shrine of Loyal Legions. +Oracle:At the beginning of your upkeep or whenever you cast a white spell, put a charge counter on Shrine of Loyal Legions.\n{3}, {T}, Sacrifice Shrine of Loyal Legions: Create a 1/1 colorless Phyrexian Myr artifact creature token for each charge counter on Shrine of Loyal Legions. diff --git a/forge-gui/res/cardsfolder/s/sickleslicer.txt b/forge-gui/res/cardsfolder/s/sickleslicer.txt index 3e9bd5f594b..04c32924c95 100644 --- a/forge-gui/res/cardsfolder/s/sickleslicer.txt +++ b/forge-gui/res/cardsfolder/s/sickleslicer.txt @@ -6,4 +6,4 @@ K:Equip:4 S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 2 | AddToughness$ 2 | Description$ Equipped creature gets +2/+2. DeckHas:Ability$Token SVar:Picture:http://www.wizards.com/global/images/magic/general/sickleslicer.jpg -Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Germ creature token, then attach this to it.)\nEquipped creature gets +2/+2.\nEquip {4} +Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Phyrexian Germ creature token, then attach this to it.)\nEquipped creature gets +2/+2.\nEquip {4} diff --git a/forge-gui/res/cardsfolder/s/sigil_captain.txt b/forge-gui/res/cardsfolder/s/sigil_captain.txt index 549ad5bdc45..130aa522cc8 100644 --- a/forge-gui/res/cardsfolder/s/sigil_captain.txt +++ b/forge-gui/res/cardsfolder/s/sigil_captain.txt @@ -2,7 +2,6 @@ Name:Sigil Captain ManaCost:1 G W W Types:Creature Rhino Soldier PT:3/3 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.powerEQ1+toughnessEQ1+Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever a creature enters the battlefield under your control, if that creature is 1/1, put two +1/+1 counters on it. -SVar:TrigPutCounter:DB$ PutCounter | Defined$ TriggeredCardLKICopy | CounterType$ P1P1 | CounterNum$ 2 -SVar:Picture:http://www.wizards.com/global/images/magic/general/sigil_captain.jpg +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.powerEQ1+toughnessEQ1+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever a creature enters the battlefield under your control, if that creature is 1/1, put two +1/+1 counters on it. +SVar:TrigPutCounter:DB$ PutCounter | Defined$ TriggeredCardLKICopy | CounterType$ P1P1 | CounterNum$ 2 | ConditionDefined$ TriggeredCard | ConditionPresent$ Card.powerEQ1+toughnessEQ1 Oracle:Whenever a creature enters the battlefield under your control, if that creature is 1/1, put two +1/+1 counters on it. diff --git a/forge-gui/res/cardsfolder/s/silhouette.txt b/forge-gui/res/cardsfolder/s/silhouette.txt index 0448afae00c..f3cbe5aa5b2 100644 --- a/forge-gui/res/cardsfolder/s/silhouette.txt +++ b/forge-gui/res/cardsfolder/s/silhouette.txt @@ -1,10 +1,6 @@ Name:Silhouette ManaCost:1 U Types:Instant - A:SP$ Effect | Cost$ 1 U | ValidTgts$ Creature | TgtPrompt$ Select target creature | RememberObjects$ Targeted | ReplacementEffects$ RPrevent | StackDescription$ SpellDescription | SpellDescription$ Choose target creature. If a spell or ability that targets that creature would cause a source to deal damage to that creature this turn, prevent that damage. - SVar:RPrevent:Event$ DamageDone | ValidCause$ Spell.IsTargeting Remembered,Activated.IsTargeting Remembered | ValidTarget$ Card.IsRemembered | Prevent$ True | Description$ If a spell or ability that targets that creature would cause a source to deal damage to that creature this turn, prevent that damage. - -SVar:Picture:http://www.wizards.com/global/images/magic/general/silhouette.jpg Oracle:Choose target creature. If a spell or ability that targets that creature would cause a source to deal damage to that creature this turn, prevent that damage. diff --git a/forge-gui/res/cardsfolder/s/skinrender.txt b/forge-gui/res/cardsfolder/s/skinrender.txt index 87772f55e36..34efedc0abb 100644 --- a/forge-gui/res/cardsfolder/s/skinrender.txt +++ b/forge-gui/res/cardsfolder/s/skinrender.txt @@ -1,6 +1,6 @@ Name:Skinrender ManaCost:2 B B -Types:Creature Zombie +Types:Creature Phyrexian Zombie PT:3/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPutCounter | TriggerDescription$ When CARDNAME enters the battlefield, put three -1/-1 counters on target creature. SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ M1M1 | IsCurse$ True | CounterNum$ 3 diff --git a/forge-gui/res/cardsfolder/s/skinwing.txt b/forge-gui/res/cardsfolder/s/skinwing.txt index 7f3ecc997cd..c0dd580d799 100644 --- a/forge-gui/res/cardsfolder/s/skinwing.txt +++ b/forge-gui/res/cardsfolder/s/skinwing.txt @@ -6,4 +6,4 @@ K:Equip:6 S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 2 | AddToughness$ 2 | AddKeyword$ Flying | Description$ Equipped creature gets +2/+2 and has flying. DeckHas:Ability$Token SVar:Picture:http://www.wizards.com/global/images/magic/general/skinwing.jpg -Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Germ creature token, then attach this to it.)\nEquipped creature gets +2/+2 and has flying.\nEquip {6} +Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Phyrexian Germ creature token, then attach this to it.)\nEquipped creature gets +2/+2 and has flying.\nEquip {6} diff --git a/forge-gui/res/cardsfolder/s/skirge_familiar.txt b/forge-gui/res/cardsfolder/s/skirge_familiar.txt index 5f95908d389..0d01638a700 100644 --- a/forge-gui/res/cardsfolder/s/skirge_familiar.txt +++ b/forge-gui/res/cardsfolder/s/skirge_familiar.txt @@ -1,6 +1,6 @@ Name:Skirge Familiar ManaCost:4 B -Types:Creature Imp +Types:Creature Phyrexian Imp PT:3/2 K:Flying A:AB$ Mana | Cost$ Discard<1/Card> | Produced$ B | SpellDescription$ Add {B}. diff --git a/forge-gui/res/cardsfolder/s/skithiryx_the_blight_dragon.txt b/forge-gui/res/cardsfolder/s/skithiryx_the_blight_dragon.txt index 8de22231c51..a2100d56f14 100644 --- a/forge-gui/res/cardsfolder/s/skithiryx_the_blight_dragon.txt +++ b/forge-gui/res/cardsfolder/s/skithiryx_the_blight_dragon.txt @@ -1,6 +1,6 @@ Name:Skithiryx, the Blight Dragon ManaCost:3 B B -Types:Legendary Creature Dragon Skeleton +Types:Legendary Creature Phyrexian Dragon Skeleton PT:4/4 K:Flying K:Infect diff --git a/forge-gui/res/cardsfolder/s/skittering_horror.txt b/forge-gui/res/cardsfolder/s/skittering_horror.txt index d560569573e..093860f0f73 100644 --- a/forge-gui/res/cardsfolder/s/skittering_horror.txt +++ b/forge-gui/res/cardsfolder/s/skittering_horror.txt @@ -1,6 +1,6 @@ Name:Skittering Horror ManaCost:2 B -Types:Creature Horror +Types:Creature Phyrexian Horror PT:4/3 T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When you cast a creature spell, sacrifice CARDNAME. SVar:TrigSac:DB$ Sacrifice | Defined$ Self diff --git a/forge-gui/res/cardsfolder/s/skittering_skirge.txt b/forge-gui/res/cardsfolder/s/skittering_skirge.txt index a08c1046da3..17d9a5dc853 100644 --- a/forge-gui/res/cardsfolder/s/skittering_skirge.txt +++ b/forge-gui/res/cardsfolder/s/skittering_skirge.txt @@ -1,6 +1,6 @@ Name:Skittering Skirge ManaCost:B B -Types:Creature Imp +Types:Creature Phyrexian Imp PT:3/2 K:Flying T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigSacrifice | TriggerDescription$ When you cast a creature spell, sacrifice CARDNAME. diff --git a/forge-gui/res/cardsfolder/s/slag_fiend.txt b/forge-gui/res/cardsfolder/s/slag_fiend.txt index 71563b35bed..29a94f89fe7 100644 --- a/forge-gui/res/cardsfolder/s/slag_fiend.txt +++ b/forge-gui/res/cardsfolder/s/slag_fiend.txt @@ -1,6 +1,6 @@ Name:Slag Fiend ManaCost:R -Types:Creature Construct +Types:Creature Phyrexian Construct PT:*/* S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetPower$ X | SetToughness$ X | Description$ CARDNAME's power and toughness are each equal to the number of artifact cards in all graveyards. SVar:X:Count$TypeInAllYards.Artifact diff --git a/forge-gui/res/cardsfolder/s/slash_panther.txt b/forge-gui/res/cardsfolder/s/slash_panther.txt index 2491536fba4..8c5e0f19725 100644 --- a/forge-gui/res/cardsfolder/s/slash_panther.txt +++ b/forge-gui/res/cardsfolder/s/slash_panther.txt @@ -1,6 +1,6 @@ Name:Slash Panther ManaCost:4 PR -Types:Artifact Creature Cat +Types:Artifact Creature Phyrexian Cat PT:4/2 K:Haste SVar:Picture:http://www.wizards.com/global/images/magic/general/slash_panther.jpg diff --git a/forge-gui/res/cardsfolder/s/sleeper_agent.txt b/forge-gui/res/cardsfolder/s/sleeper_agent.txt index 79dcf8b3f5d..51ea13d1829 100644 --- a/forge-gui/res/cardsfolder/s/sleeper_agent.txt +++ b/forge-gui/res/cardsfolder/s/sleeper_agent.txt @@ -1,6 +1,6 @@ Name:Sleeper Agent ManaCost:B -Types:Creature Minion +Types:Creature Phyrexian Minion PT:3/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigGainControl | TriggerDescription$ When CARDNAME enters the battlefield, target opponent gains control of it. SVar:TrigGainControl:DB$ GainControl | Defined$ Self | ValidTgts$ Opponent | TgtPrompt$ Select target opponent diff --git a/forge-gui/res/cardsfolder/s/slinking_skirge.txt b/forge-gui/res/cardsfolder/s/slinking_skirge.txt index bac88805082..4e568f56ccb 100644 --- a/forge-gui/res/cardsfolder/s/slinking_skirge.txt +++ b/forge-gui/res/cardsfolder/s/slinking_skirge.txt @@ -1,6 +1,6 @@ Name:Slinking Skirge ManaCost:3 B -Types:Creature Imp +Types:Creature Phyrexian Imp PT:2/1 K:Flying A:AB$ Draw | Cost$ 2 Sac<1/CARDNAME> | NumCards$ 1 | SpellDescription$ Draw a card. diff --git a/forge-gui/res/cardsfolder/s/slurrk_all_ingesting.txt b/forge-gui/res/cardsfolder/s/slurrk_all_ingesting.txt index 9a13e516c47..ae108639138 100644 --- a/forge-gui/res/cardsfolder/s/slurrk_all_ingesting.txt +++ b/forge-gui/res/cardsfolder/s/slurrk_all_ingesting.txt @@ -3,7 +3,7 @@ ManaCost:5 G Types:Legendary Creature Ooze PT:0/0 K:etbCounter:P1P1:5 -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self+counters_GE1_P1P1,Creature.Other+YouCtrl+counters_GE1_P1P1 | TriggerZones$ Battlefield | Execute$ TrigPutCounterAll | TriggerDescription$ Whenever NICKNAME or another creature dies, if it had a +1/+1 counter on it, put a +1/+1 counter on each creature you control that has a +1/+1 counter on it. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self+counters_GE1_P1P1,Creature.Other+YouCtrl+counters_GE1_P1P1 | Execute$ TrigPutCounterAll | TriggerDescription$ Whenever NICKNAME or another creature dies, if it had a +1/+1 counter on it, put a +1/+1 counter on each creature you control that has a +1/+1 counter on it. SVar:TrigPutCounterAll:DB$ PutCounterAll | ValidCards$ Creature.YouCtrl+counters_GE1_P1P1 | CounterType$ P1P1 | CounterNum$ 1 K:Partner DeckHas:Ability$Counters diff --git a/forge-gui/res/cardsfolder/s/smell_fear.txt b/forge-gui/res/cardsfolder/s/smell_fear.txt index 948612b1546..85ddece07f0 100644 --- a/forge-gui/res/cardsfolder/s/smell_fear.txt +++ b/forge-gui/res/cardsfolder/s/smell_fear.txt @@ -1,7 +1,7 @@ Name:Smell Fear ManaCost:1 G Types:Sorcery -A:SP$ Proliferate | Cost$ 1 G | SubAbility$ DBPump | SpellDescription$ Proliferate (Choose any number of permanents and/or players, then give each another counter of each kind already there.) Target creature you control fights target creature you don't control. (Each deals damage equal to its power to the other.) +A:SP$ Proliferate | Cost$ 1 G | SubAbility$ DBPump | SpellDescription$ Proliferate. (Choose any number of permanents and/or players, then give each another counter of each kind already there.) Target creature you control fights up to one target creature you don't control. SVar:DBPump:DB$ Pump | AILogic$ Fight | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Choose target creature you control | SubAbility$ DBFight | StackDescription$ None | SpellDescription$ Target creature you control fights target creature you don't control. -SVar:DBFight:DB$ Fight | Defined$ ParentTarget | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Choose target creature you don't control -Oracle:Proliferate (Choose any number of permanents and/or players, then give each another counter of each kind already there.)\nTarget creature you control fights target creature you don't control. (Each deals damage equal to its power to the other.) +SVar:DBFight:DB$ Fight | Defined$ ParentTarget | ValidTgts$ Creature.YouDontCtrl | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target creature you don't control +Oracle:Proliferate. (Choose any number of permanents and/or players, then give each another counter of each kind already there.)\nTarget creature you control fights up to one target creature you don't control. diff --git a/forge-gui/res/cardsfolder/s/sojourners_companion.txt b/forge-gui/res/cardsfolder/s/sojourners_companion.txt index 97185fbabe5..3da1dd6b797 100644 --- a/forge-gui/res/cardsfolder/s/sojourners_companion.txt +++ b/forge-gui/res/cardsfolder/s/sojourners_companion.txt @@ -4,4 +4,4 @@ Types:Artifact Creature Salamander PT:4/4 K:Affinity:Artifact K:TypeCycling:Land.Artifact:2 -Oracle:Affinity for artifacts\nArtifact landcycling {2} (({2}, Discard this card: Search your library for an artifact land card, reveal it, put it into your hand, then shuffle.) +Oracle:Affinity for artifacts\nArtifact landcycling {2} ({2}, Discard this card: Search your library for an artifact land card, reveal it, put it into your hand, then shuffle.) diff --git a/forge-gui/res/cardsfolder/s/sol_talisman.txt b/forge-gui/res/cardsfolder/s/sol_talisman.txt index 5fb9ffc3b51..29196d83ef4 100644 --- a/forge-gui/res/cardsfolder/s/sol_talisman.txt +++ b/forge-gui/res/cardsfolder/s/sol_talisman.txt @@ -3,4 +3,4 @@ ManaCost:no cost Types:Artifact K:Suspend:3:1 A:AB$ Mana | Cost$ T | Produced$ C | Amount$ 2 | SpellDescription$ Add {C}{C}. -Oracle:Suspend 3—{1} (Rather than cast this card from your hand, pay 0 and exile it with three time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost.)\n{T}: Add {C}{C}. +Oracle:Suspend 3—{1} (Rather than cast this card from your hand, you may pay {1} and exile it with three time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost.)\n{T}: Add {C}{C}. diff --git a/forge-gui/res/cardsfolder/s/solitude.txt b/forge-gui/res/cardsfolder/s/solitude.txt index a0253119e2a..a62098e0442 100644 --- a/forge-gui/res/cardsfolder/s/solitude.txt +++ b/forge-gui/res/cardsfolder/s/solitude.txt @@ -5,9 +5,9 @@ PT:3/2 K:Flash K:Lifelink K:Evoke:ExileFromHand<1/Card.White+Other> -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, exile up to one target creature. That creature's controller gains life equal to its power. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, exile up to one other target creature. That creature's controller gains life equal to its power. SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature.Other | RememberLKI$ True | TgtPrompt$ Select up to one other target creature | TargetMin$ 0 | TargetMax$ 1 | SubAbility$ DBGainLife SVar:DBGainLife:DB$ GainLife | Defined$ RememberedController | LifeAmount$ X | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:RememberedLKI$CardPower -Oracle:Flash\nLifelink\nWhen Solitude enters the battlefield, exile up to one target creature. That creature's controller gains life equal to its power.\nEvoke — Exile a white card from your hand. +Oracle:Flash\nLifelink\nWhen Solitude enters the battlefield, exile up to one other target creature. That creature's controller gains life equal to its power.\nEvoke—Exile a white card from your hand. diff --git a/forge-gui/res/cardsfolder/s/soul_of_new_phyrexia.txt b/forge-gui/res/cardsfolder/s/soul_of_new_phyrexia.txt index f75658dc9e1..f60421a1cb0 100644 --- a/forge-gui/res/cardsfolder/s/soul_of_new_phyrexia.txt +++ b/forge-gui/res/cardsfolder/s/soul_of_new_phyrexia.txt @@ -1,6 +1,6 @@ Name:Soul of New Phyrexia ManaCost:6 -Types:Artifact Creature Avatar +Types:Artifact Creature Phyrexian Avatar PT:6/6 K:Trample A:AB$ PumpAll | Cost$ 5 | ValidCards$ Permanent.YouCtrl | KW$ Indestructible | SpellDescription$ Permanents you control gain indestructible until end of turn. diff --git a/forge-gui/res/cardsfolder/s/spellskite.txt b/forge-gui/res/cardsfolder/s/spellskite.txt index e4394b8a099..67222f53e70 100644 --- a/forge-gui/res/cardsfolder/s/spellskite.txt +++ b/forge-gui/res/cardsfolder/s/spellskite.txt @@ -1,6 +1,6 @@ Name:Spellskite ManaCost:2 -Types:Artifact Creature Horror +Types:Artifact Creature Phyrexian Horror PT:0/4 A:AB$ ChangeTargets | Cost$ PU | TargetType$ Spell,Activated,Triggered | ValidTgts$ Card | DefinedMagnet$ Self | ChangeSingleTarget$ True | SpellDescription$ Change a target of target spell or ability to CARDNAME. SVar:Picture:http://www.wizards.com/global/images/magic/general/spellskite.jpg diff --git a/forge-gui/res/cardsfolder/s/sphinx_summoner.txt b/forge-gui/res/cardsfolder/s/sphinx_summoner.txt index 7f569dca0ea..c7f9b68c4ff 100644 --- a/forge-gui/res/cardsfolder/s/sphinx_summoner.txt +++ b/forge-gui/res/cardsfolder/s/sphinx_summoner.txt @@ -3,7 +3,7 @@ ManaCost:3 U B Types:Artifact Creature Sphinx PT:3/3 K:Flying -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library for an artifact creature card, reveal it, put it into your hand. then shuffle. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library for an artifact creature card, reveal it, put it into your hand, then shuffle. SVar:TrigChange:DB$ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Artifact.Creature| ChangeNum$ 1 | ShuffleNonMandatory$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/sphinx_summoner.jpg -Oracle:Flying\nWhen Sphinx Summoner enters the battlefield, you may search your library for an artifact creature card, reveal it, put it into your hand. then shuffle. +Oracle:Flying\nWhen Sphinx Summoner enters the battlefield, you may search your library for an artifact creature card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/spinebiter.txt b/forge-gui/res/cardsfolder/s/spinebiter.txt index 0631885266d..5b7f796b62d 100644 --- a/forge-gui/res/cardsfolder/s/spinebiter.txt +++ b/forge-gui/res/cardsfolder/s/spinebiter.txt @@ -1,6 +1,6 @@ Name:Spinebiter ManaCost:4 G G -Types:Creature Beast +Types:Creature Phyrexian Beast PT:3/4 K:Infect K:You may have CARDNAME assign its combat damage as though it weren't blocked. diff --git a/forge-gui/res/cardsfolder/s/spined_thopter.txt b/forge-gui/res/cardsfolder/s/spined_thopter.txt index aaed5cea5b2..751f64d3768 100644 --- a/forge-gui/res/cardsfolder/s/spined_thopter.txt +++ b/forge-gui/res/cardsfolder/s/spined_thopter.txt @@ -1,6 +1,6 @@ Name:Spined Thopter ManaCost:2 PU -Types:Artifact Creature Thopter +Types:Artifact Creature Phyrexian Thopter PT:2/1 K:Flying SVar:Picture:http://www.wizards.com/global/images/magic/general/spined_thopter.jpg diff --git a/forge-gui/res/cardsfolder/s/spineless_thug.txt b/forge-gui/res/cardsfolder/s/spineless_thug.txt index fbffb9b1ed3..5bb14c85b90 100644 --- a/forge-gui/res/cardsfolder/s/spineless_thug.txt +++ b/forge-gui/res/cardsfolder/s/spineless_thug.txt @@ -1,6 +1,6 @@ Name:Spineless Thug ManaCost:1 B -Types:Creature Zombie Mercenary +Types:Creature Phyrexian Zombie Mercenary PT:2/2 K:CARDNAME can't block. SVar:Picture:http://resources.wizards.com/magic/cards/10e/en/card129743.jpg diff --git a/forge-gui/res/cardsfolder/s/spire_monitor.txt b/forge-gui/res/cardsfolder/s/spire_monitor.txt index ed807868f2b..3cf8de7f5cd 100644 --- a/forge-gui/res/cardsfolder/s/spire_monitor.txt +++ b/forge-gui/res/cardsfolder/s/spire_monitor.txt @@ -1,6 +1,6 @@ Name:Spire Monitor ManaCost:4 U -Types:Creature Drake +Types:Creature Phyrexian Drake PT:3/3 K:Flash K:Flying diff --git a/forge-gui/res/cardsfolder/s/spiteful_bully.txt b/forge-gui/res/cardsfolder/s/spiteful_bully.txt index 37381e1ab20..105bd2b6b29 100644 --- a/forge-gui/res/cardsfolder/s/spiteful_bully.txt +++ b/forge-gui/res/cardsfolder/s/spiteful_bully.txt @@ -1,6 +1,6 @@ Name:Spiteful Bully ManaCost:1 B -Types:Creature Zombie Mercenary +Types:Creature Phyrexian Zombie Mercenary PT:3/3 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ At the beginning of your upkeep, CARDNAME deals 3 damage to target creature you control. SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature | NumDmg$ 3 diff --git a/forge-gui/res/cardsfolder/s/splicers_skill.txt b/forge-gui/res/cardsfolder/s/splicers_skill.txt index 5fbc3e08724..89af4b7795b 100644 --- a/forge-gui/res/cardsfolder/s/splicers_skill.txt +++ b/forge-gui/res/cardsfolder/s/splicers_skill.txt @@ -2,6 +2,6 @@ Name:Splicer's Skill ManaCost:2 W Types:Sorcery K:Splice:Instant,Sorcery:3 W -A:SP$ Token | Cost$ 2 W | TokenAmount$ 1 | TokenScript$ c_3_3_a_golem | TokenOwner$ You | LegacyImage$ c 3 3 a golem mh1 | SpellDescription$ Create a 3/3 colorless Golem artifact creature token. +A:SP$ Token | Cost$ 2 W | TokenAmount$ 1 | TokenScript$ c_3_3_a_phyrexian_golem | TokenOwner$ You | SpellDescription$ Create a 3/3 colorless Phyrexian Golem artifact creature token. AI:RemoveDeck:Random -Oracle:Create a 3/3 colorless Golem artifact creature token.\nSplice onto instant or sorcery {3}{W} (As you cast an instant or sorcery spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card's effects to that spell.) +Oracle:Create a 3/3 colorless Phyrexian Golem artifact creature token.\nSplice onto instant or sorcery {3}{W} (As you cast an instant or sorcery spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card's effects to that spell.) diff --git a/forge-gui/res/cardsfolder/s/steel_dromedary.txt b/forge-gui/res/cardsfolder/s/steel_dromedary.txt index 9725e48029a..bd05c154b3c 100644 --- a/forge-gui/res/cardsfolder/s/steel_dromedary.txt +++ b/forge-gui/res/cardsfolder/s/steel_dromedary.txt @@ -5,8 +5,8 @@ PT:2/2 K:ETBReplacement:Other:CamelTapped SVar:CamelTapped:DB$ Tap | Defined$ Self | ETB$ True | SubAbility$ DBAddCounter | SpellDescription$ CARDNAME enters the battlefield tapped with two +1/+1 counters on it. SVar:DBAddCounter:DB$ PutCounter | ETB$ True | Defined$ Self | CounterType$ P1P1 | CounterNum$ 2 -S:Mode$ Continuous | Affected$ Card.Self+counters_GE1_P1P1 | AddHiddenKeyword$ CARDNAME doesn't untap during your untap step. | Description$ As long as there are +1/+1 counters on CARDNAME, it doesn't untap during your untap step. -T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigMoveCounter | TriggerDescription$ At the beginning of combat on your turn, you may move a +1/+1 counter from CARDNAME onto another target creature. +S:Mode$ Continuous | Affected$ Card.Self+counters_GE1_P1P1 | AddHiddenKeyword$ CARDNAME doesn't untap during your untap step. | Description$ CARDNAME doesn't untap during your untap step if it has a +1/+1 counter on it. +T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigMoveCounter | TriggerDescription$ At the beginning of combat on your turn, you may move a +1/+1 counter from CARDNAME onto target creature. SVar:TrigMoveCounter:DB$ MoveCounter | ValidTgts$ Creature.Other | TgtPrompt$ Select another target creature | Source$ Self | CounterType$ P1P1 | CounterNum$ 1 DeckHas:Ability$Counters -Oracle:Steel Dromedary enters the battlefield tapped with two +1/+1 counters on it.\nAs long as there are +1/+1 counters on Steel Dromedary, it doesn't untap during your untap step.\nAt the beginning of combat on your turn, you may move a +1/+1 counter from Steel Dromedary onto another target creature. +Oracle:Steel Dromedary enters the battlefield tapped with two +1/+1 counters on it.\nSteel Dromedary doesn't untap during your untap step if it has a +1/+1 counter on it.\nAt the beginning of combat on your turn, you may move a +1/+1 counter from Steel Dromedary onto target creature. diff --git a/forge-gui/res/cardsfolder/s/strandwalker.txt b/forge-gui/res/cardsfolder/s/strandwalker.txt index 0877b548cf6..d15d1282157 100644 --- a/forge-gui/res/cardsfolder/s/strandwalker.txt +++ b/forge-gui/res/cardsfolder/s/strandwalker.txt @@ -6,4 +6,4 @@ K:Equip:4 S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 2 | AddToughness$ 4 | AddKeyword$ Reach | Description$ Equipped creature gets +2/+4 and has reach. DeckHas:Ability$Token SVar:Picture:http://www.wizards.com/global/images/magic/general/strandwalker.jpg -Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Germ creature token, then attach this to it.)\nEquipped creature gets +2/+4 and has reach.\nEquip {4} +Oracle:Living weapon (When this Equipment enters the battlefield, create a 0/0 black Phyrexian Germ creature token, then attach this to it.)\nEquipped creature gets +2/+4 and has reach.\nEquip {4} diff --git a/forge-gui/res/cardsfolder/s/stronghold_assassin.txt b/forge-gui/res/cardsfolder/s/stronghold_assassin.txt index 3be97d56469..f04f622cf06 100644 --- a/forge-gui/res/cardsfolder/s/stronghold_assassin.txt +++ b/forge-gui/res/cardsfolder/s/stronghold_assassin.txt @@ -1,6 +1,6 @@ Name:Stronghold Assassin ManaCost:1 B B -Types:Creature Zombie Assassin +Types:Creature Phyrexian Zombie Assassin PT:2/1 A:AB$ Destroy | Cost$ T Sac<1/Creature> | ValidTgts$ Creature.nonBlack | TgtPrompt$ Select target nonblack creature | SpellDescription$ Destroy target nonblack creature. AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/s/subtlety.txt b/forge-gui/res/cardsfolder/s/subtlety.txt index 26551f9bd68..132b89b196c 100644 --- a/forge-gui/res/cardsfolder/s/subtlety.txt +++ b/forge-gui/res/cardsfolder/s/subtlety.txt @@ -7,4 +7,4 @@ K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigTuck | TriggerDescription$ When CARDNAME enters the battlefield, choose up to one target creature spell or planeswalker spell. Its owner puts it on the top or bottom of their library. SVar:TrigTuck:DB$ ChangeZone | ValidTgts$ Card.inZoneStack+Creature,Card.inZoneStack+Planeswalker | TgtZone$ Stack | TgtPrompt$ Select up to one target creature spell or planeswalker spell | AlternativeDecider$ TargetedController | Origin$ Stack | Fizzle$ True | Destination$ Library | LibraryPosition$ 0 | DestinationAlternative$ Library | LibraryPositionAlternative$ -1 | AlternativeDestinationMessage$ Would you like to put the card on the top of your library (and not on the bottom)? | SpellDescription$ Choose up to one target creature spell or planeswalker spell. Its owner puts it on the top or bottom of their library. K:Evoke:ExileFromHand<1/Card.Blue+Other> -Oracle:Flash\nFlying\nWhen Subtlety enters the battlefield, choose up to one target creature spell or planeswalker spell. Its owner puts it on the top or bottom of their library.\nEvoke — Exile a blue card from your hand. +Oracle:Flash\nFlying\nWhen Subtlety enters the battlefield, choose up to one target creature spell or planeswalker spell. Its owner puts it on the top or bottom of their library.\nEvoke—Exile a blue card from your hand. diff --git a/forge-gui/res/cardsfolder/s/sudden_substitution.txt b/forge-gui/res/cardsfolder/s/sudden_substitution.txt new file mode 100644 index 00000000000..ac7be89163e --- /dev/null +++ b/forge-gui/res/cardsfolder/s/sudden_substitution.txt @@ -0,0 +1,13 @@ +Name:Sudden Substitution +ManaCost:2 U U +Types:Instant +K:Split second +A:SP$ Pump | TargetType$ Spell | ValidTgts$ Card.nonCreature | TgtZone$ Stack | ImprintCards$ TargetedSource | SubAbility$ DBRemember | StackDescription$ SpellDescription | SpellDescription$ Exchange control of target noncreature spell and target creature. Then the spell's controller may choose new targets for it. +SVar:DBRemember:DB$ Pump | ValidTgts$ Creature | RememberObjects$ ThisTargetedCard | SubAbility$ DBRememberPlayer +SVar:DBRememberPlayer:DB$ Pump | RememberObjects$ RememberedController | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBGainControl +SVar:DBGainControl:DB$ GainControl | Defined$ Remembered.Creature | NewController$ ImprintedController | ConditionDefined$ Imprinted | ConditionPresent$ Card | StackDescription$ None | SubAbility$ DBControlSpell +SVar:DBControlSpell:DB$ ControlSpell | Defined$ Targeted | NewController$ Player.IsRemembered | Mode$ Gain | ConditionDefined$ Remembered | ConditionPresent$ Card | StackDescription$ None | SubAbility$ DBChooseTargets +SVar:DBChooseTargets:DB$ ChangeTargets | Defined$ Targeted | Chooser$ ImprintedController | Optional$ True | ConditionDefined$ Imprinted | ConditionPresent$ Card | StackDescription$ None | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True +AI:RemoveDeck:All +Oracle:Split second (As long as this spell is on the stack, players can't cast spells or activate abilities that aren't mana abilities.)\nExchange control of target noncreature spell and target creature. Then the spell's controller may choose new targets for it. diff --git a/forge-gui/res/cardsfolder/s/suture_priest.txt b/forge-gui/res/cardsfolder/s/suture_priest.txt index 6d7e64e95c4..9e398a0274a 100644 --- a/forge-gui/res/cardsfolder/s/suture_priest.txt +++ b/forge-gui/res/cardsfolder/s/suture_priest.txt @@ -1,6 +1,6 @@ Name:Suture Priest ManaCost:1 W -Types:Creature Cleric +Types:Creature Phyrexian Cleric PT:1/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.YouCtrl+Other | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigGainLife | TriggerDescription$ Whenever another creature enters the battlefield under your control, you may gain 1 life. SVar:TrigGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 diff --git a/forge-gui/res/cardsfolder/s/svyelun_of_sea_and_sky.txt b/forge-gui/res/cardsfolder/s/svyelun_of_sea_and_sky.txt index 4794c84a69b..d040e63f7fd 100644 --- a/forge-gui/res/cardsfolder/s/svyelun_of_sea_and_sky.txt +++ b/forge-gui/res/cardsfolder/s/svyelun_of_sea_and_sky.txt @@ -5,6 +5,6 @@ PT:3/4 S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ Indestructible | IsPresent$ Merfolk.Other+YouCtrl | PresentCompare$ GE2 | Description$ As long as you control two other Merfolk, CARDNAME has indestructible. (Damage and effects that say "destroy" don't destroy it.) T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME attacks, draw a card. SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 -S:Mode$ Continuous | Affected$ Merfolk.Other+YouCtrl | AddKeyword$ Ward:1 | Description$ Other Merfolk you control have ward {1}. +S:Mode$ Continuous | Affected$ Merfolk.Other+YouCtrl | AddKeyword$ Ward:1 | Description$ Other Merfolk you control have ward {1}. (Whenever another Merfolk you control becomes the target of a spell or ability an opponent controls, counter it unless that player pays {1}.) DeckNeeds:Type$Merfolk -Oracle:Svyelun of Sea and Sky has indestructible as long as you control at least two other Merfolk.\nWhenever Svyelun attacks, draw a card.\nOther Merfolk you control have ward {1}. +Oracle:Svyelun of Sea and Sky has indestructible as long as you control at least two other Merfolk.\nWhenever Svyelun attacks, draw a card.\nOther Merfolk you control have ward {1}. (Whenever another Merfolk you control becomes the target of a spell or ability an opponent controls, counter it unless that player pays {1}.) diff --git a/forge-gui/res/cardsfolder/t/tangle_angler.txt b/forge-gui/res/cardsfolder/t/tangle_angler.txt index 89dc8dcb781..ae09b362b9a 100644 --- a/forge-gui/res/cardsfolder/t/tangle_angler.txt +++ b/forge-gui/res/cardsfolder/t/tangle_angler.txt @@ -1,6 +1,6 @@ Name:Tangle Angler ManaCost:3 G -Types:Creature Horror +Types:Creature Phyrexian Horror PT:1/5 K:Infect A:AB$ MustBlock | Cost$ G | ValidTgts$ Creature | TgtPrompt$ Select target creature | AILogic$ AllowNonLethal | SpellDescription$ Target creature blocks CARDNAME this turn if able. diff --git a/forge-gui/res/cardsfolder/t/tangle_hulk.txt b/forge-gui/res/cardsfolder/t/tangle_hulk.txt index 970f835fa56..1001568d38a 100644 --- a/forge-gui/res/cardsfolder/t/tangle_hulk.txt +++ b/forge-gui/res/cardsfolder/t/tangle_hulk.txt @@ -1,6 +1,6 @@ Name:Tangle Hulk ManaCost:5 -Types:Artifact Creature Beast +Types:Artifact Creature Phyrexian Beast PT:5/3 A:AB$ Regenerate | Cost$ 2 G | SpellDescription$ Regenerate CARDNAME. SVar:Picture:http://www.wizards.com/global/images/magic/general/tangle_hulk.jpg diff --git a/forge-gui/res/cardsfolder/t/tel_jilad_fallen.txt b/forge-gui/res/cardsfolder/t/tel_jilad_fallen.txt index 875e4224386..7c56e7249cf 100644 --- a/forge-gui/res/cardsfolder/t/tel_jilad_fallen.txt +++ b/forge-gui/res/cardsfolder/t/tel_jilad_fallen.txt @@ -1,6 +1,6 @@ Name:Tel-Jilad Fallen ManaCost:2 G G -Types:Creature Elf Warrior +Types:Creature Phyrexian Elf Warrior PT:3/1 K:Protection from artifacts K:Infect diff --git a/forge-gui/res/cardsfolder/t/terminal_agony.txt b/forge-gui/res/cardsfolder/t/terminal_agony.txt index 36155de7685..adeaaaa31ae 100644 --- a/forge-gui/res/cardsfolder/t/terminal_agony.txt +++ b/forge-gui/res/cardsfolder/t/terminal_agony.txt @@ -1,7 +1,7 @@ Name:Terminal Agony -ManaCost:3 B R +ManaCost:2 B R Types:Sorcery K:Madness:B R -A:SP$ Destroy | Cost$ 3 B R | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ Destroy target creature. +A:SP$ Destroy | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ Destroy target creature. DeckHints:Ability$Discard Oracle:Destroy target creature.\nMadness {B}{R} (If you discard this card, discard it into exile. When you do, cast it for its madness cost or put it into your graveyard.) diff --git a/forge-gui/res/cardsfolder/t/tethered_skirge.txt b/forge-gui/res/cardsfolder/t/tethered_skirge.txt index 2d38f263023..f5c8a344f46 100644 --- a/forge-gui/res/cardsfolder/t/tethered_skirge.txt +++ b/forge-gui/res/cardsfolder/t/tethered_skirge.txt @@ -1,6 +1,6 @@ Name:Tethered Skirge ManaCost:2 B -Types:Creature Imp +Types:Creature Phyrexian Imp PT:2/2 K:Flying T:Mode$ BecomesTarget | ValidTarget$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigDrain | TriggerDescription$ Whenever CARDNAME becomes the target of a spell or ability, you lose 1 life. diff --git a/forge-gui/res/cardsfolder/t/the_legend_of_arena.txt b/forge-gui/res/cardsfolder/t/the_legend_of_arena.txt index bf39017ebb9..69d93f0a8dd 100644 --- a/forge-gui/res/cardsfolder/t/the_legend_of_arena.txt +++ b/forge-gui/res/cardsfolder/t/the_legend_of_arena.txt @@ -1,6 +1,6 @@ Name:The Legend of Arena ManaCost:1 U R W -Types:Enchantment Saga +Types:Legendary Enchantment Saga Text:CARDNAME can be your commander. K:Saga:3:DBToken,DBToken,DBSearch SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ r_2_1_human_wizard | TokenOwner$ You | SubAbility$ DBDiscount | SpellDescription$ Create a 2/1 red Human Wizard creature token. diff --git a/forge-gui/res/cardsfolder/t/thought_monitor.txt b/forge-gui/res/cardsfolder/t/thought_monitor.txt index 84d57dfbf7d..e7d5549eea8 100644 --- a/forge-gui/res/cardsfolder/t/thought_monitor.txt +++ b/forge-gui/res/cardsfolder/t/thought_monitor.txt @@ -7,4 +7,4 @@ K:Affinity:Artifact T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw two cards. SVar:TrigDraw:DB$Draw | Defined$ You | NumCards$ 2 DeckHints:Type$Artifact -Oracle:Affinity for artifacts (This spell costs {1} less to cast for each artifact you control.)\nFlying\nWhen Thought Monitor enters the battlefield, draw two cards. +Oracle:Affinity for artifacts\nFlying\nWhen Thought Monitor enters the battlefield, draw two cards. diff --git a/forge-gui/res/cardsfolder/t/thrasta_tempests_roar.txt b/forge-gui/res/cardsfolder/t/thrasta_tempests_roar.txt index b2be79410a9..f50c47ab5d5 100644 --- a/forge-gui/res/cardsfolder/t/thrasta_tempests_roar.txt +++ b/forge-gui/res/cardsfolder/t/thrasta_tempests_roar.txt @@ -8,4 +8,4 @@ K:Trample K:Haste K:Trample over planeswalkers S:Mode$ Continuous | Affected$ Card.Self+ThisTurnEntered | AddKeyword$ Hexproof | Description$ CARDNAME has hexproof as long as it entered the battlefield this turn. -Oracle:This spell costs {3} less to cast for each other spell cast this turn.\nTrample, haste\nTrample over planeswalkers (This creature can deal excess combat damage to the controller of the planeswalker it’s attacking.)\nThrasta, Tempest’s Roar has hexproof as long as it entered the battlefield this turn. +Oracle:This spell costs {3} less to cast for each other spell cast this turn.\nTrample, haste\nTrample over planeswalkers (This creature can deal excess combat damage to the controller of the planeswalker it's attacking.)\nThrasta, Tempest's Roar has hexproof as long as it entered the battlefield this turn. diff --git a/forge-gui/res/cardsfolder/t/thrummingbird.txt b/forge-gui/res/cardsfolder/t/thrummingbird.txt index c13ed9a0e9d..a2dc722a4d4 100644 --- a/forge-gui/res/cardsfolder/t/thrummingbird.txt +++ b/forge-gui/res/cardsfolder/t/thrummingbird.txt @@ -1,6 +1,6 @@ Name:Thrummingbird ManaCost:1 U -Types:Creature Bird Horror +Types:Creature Phyrexian Bird Horror PT:1/1 K:Flying T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigProliferate | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, proliferate. diff --git a/forge-gui/res/cardsfolder/t/thundering_tanadon.txt b/forge-gui/res/cardsfolder/t/thundering_tanadon.txt index 322c7c70c56..17a71552e27 100644 --- a/forge-gui/res/cardsfolder/t/thundering_tanadon.txt +++ b/forge-gui/res/cardsfolder/t/thundering_tanadon.txt @@ -1,6 +1,6 @@ Name:Thundering Tanadon ManaCost:4 PG PG -Types:Artifact Creature Beast +Types:Artifact Creature Phyrexian Beast PT:5/4 K:Trample SVar:Picture:http://www.wizards.com/global/images/magic/general/thundering_tanadon.jpg diff --git a/forge-gui/res/cardsfolder/t/timeless_witness.txt b/forge-gui/res/cardsfolder/t/timeless_witness.txt index 1eba90fe7f3..978b0f12f7d 100644 --- a/forge-gui/res/cardsfolder/t/timeless_witness.txt +++ b/forge-gui/res/cardsfolder/t/timeless_witness.txt @@ -6,4 +6,4 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S SVar:TrigChangeZone:DB$ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Card.YouCtrl K:Eternalize:5 G G DeckHas:Ability$Token -Oracle:When Eternal Witness enters the battlefield, you may return target card from your graveyard to your hand.\nEternalize {5}{G}{G} ({5}{G}{G}, Exile this card from your graveyard: Create a token that's a copy of it, except it's a 4/4 black Zombie Human Shaman with no mana cost. Eternalize only as a sorcery.) +Oracle:When Timeless Witness enters the battlefield, return target card from your graveyard to your hand.\nEternalize {5}{G}{G} ({5}{G}{G}, Exile this card from your graveyard: Create a token that's a copy of it, except it's a 4/4 black Zombie Human Shaman with no mana cost. Eternalize only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/t/tine_shrike.txt b/forge-gui/res/cardsfolder/t/tine_shrike.txt index 522f5737194..a2ab5ccda4b 100644 --- a/forge-gui/res/cardsfolder/t/tine_shrike.txt +++ b/forge-gui/res/cardsfolder/t/tine_shrike.txt @@ -1,6 +1,6 @@ Name:Tine Shrike ManaCost:3 W -Types:Creature Bird +Types:Creature Phyrexian Bird PT:2/1 K:Flying K:Infect diff --git a/forge-gui/res/cardsfolder/t/tormentor_exarch.txt b/forge-gui/res/cardsfolder/t/tormentor_exarch.txt index 19cc14ef283..bdcc3e132f3 100644 --- a/forge-gui/res/cardsfolder/t/tormentor_exarch.txt +++ b/forge-gui/res/cardsfolder/t/tormentor_exarch.txt @@ -1,6 +1,6 @@ Name:Tormentor Exarch ManaCost:3 R -Types:Creature Cleric +Types:Creature Phyrexian Cleric PT:2/2 T:Mode$ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChoose | TriggerDescription$ When CARDNAME enters the battlefield, ABILITY SVar:TrigChoose:DB$ Charm | Choices$ DBPump,DBCurse diff --git a/forge-gui/res/cardsfolder/t/tourach_dread_cantor.txt b/forge-gui/res/cardsfolder/t/tourach_dread_cantor.txt index 8ed3700cb14..1328c9c8faa 100644 --- a/forge-gui/res/cardsfolder/t/tourach_dread_cantor.txt +++ b/forge-gui/res/cardsfolder/t/tourach_dread_cantor.txt @@ -9,4 +9,4 @@ SVar:TrigCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self+kicked | Execute$ TrigDiscard | TriggerDescription$ When CARDNAME enters the battlefield, if it was kicked, target opponent discards two cards at random. SVar:TrigDiscard:DB$ Discard | ValidTgts$ Opponent | NumCards$ 2 | Mode$ Random DeckHas:Ability$Counters -Oracle:Kicker {B}{B}\nProtection from white\nWhenever an opponent discards a card, put a +1/+1 counter on Tourach, Dread Cantor.\nWhen Tourach enters the battlefield, if it was kicked, target opponent discards two cards at random. +Oracle:Kicker {B}{B} (You may pay an additional {B}{B} as you cast this spell.)\nProtection from white\nWhenever an opponent discards a card, put a +1/+1 counter on Tourach, Dread Cantor.\nWhen Tourach enters the battlefield, if it was kicked, target opponent discards two cards at random. diff --git a/forge-gui/res/cardsfolder/t/toxic_nim.txt b/forge-gui/res/cardsfolder/t/toxic_nim.txt index cf04caef178..118b6cbf370 100644 --- a/forge-gui/res/cardsfolder/t/toxic_nim.txt +++ b/forge-gui/res/cardsfolder/t/toxic_nim.txt @@ -1,6 +1,6 @@ Name:Toxic Nim ManaCost:4 B B -Types:Creature Zombie +Types:Creature Phyrexian Zombie PT:4/1 K:Infect A:AB$ Regenerate | Cost$ B | SpellDescription$ Regenerate CARDNAME. diff --git a/forge-gui/res/cardsfolder/t/tragic_fall.txt b/forge-gui/res/cardsfolder/t/tragic_fall.txt index 886d7321464..31da336983e 100644 --- a/forge-gui/res/cardsfolder/t/tragic_fall.txt +++ b/forge-gui/res/cardsfolder/t/tragic_fall.txt @@ -1,6 +1,6 @@ Name:Tragic Fall ManaCost:1 B Types:Instant -A:SP$ Pump | Cost$ 1 B | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ -X | NumDef$ -X | IsCurse$ True | SpellDescription$ Target creature gets -3/-3 until end of turn. Hellbent — that creature gets -13/-13 instead if you have no cards in hand. +A:SP$ Pump | Cost$ 1 B | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ -X | NumDef$ -X | IsCurse$ True | SpellDescription$ Target creature gets -3/-3 until end of turn. Hellbent — That creature gets -13/-13 until end of turn instead if you have no cards in hand. SVar:X:Count$Hellbent.13.3 -Oracle:Target creature gets -3/-3 until end of turn.\nHellbent — that creature gets -13/-13 instead if you have no cards in hand. +Oracle:Target creature gets -3/-3 until end of turn.\nHellbent — That creature gets -13/-13 until end of turn instead if you have no cards in hand. diff --git a/forge-gui/res/cardsfolder/t/trespassing_souleater.txt b/forge-gui/res/cardsfolder/t/trespassing_souleater.txt index b010d7fb40e..dc64aac5caf 100644 --- a/forge-gui/res/cardsfolder/t/trespassing_souleater.txt +++ b/forge-gui/res/cardsfolder/t/trespassing_souleater.txt @@ -1,6 +1,6 @@ Name:Trespassing Souleater ManaCost:3 -Types:Artifact Creature Construct +Types:Artifact Creature Phyrexian Construct PT:2/2 A:AB$ Pump | Cost$ PU | Defined$ Self | KW$ HIDDEN Unblockable | SpellDescription$ CARDNAME can't be blocked this turn. SVar:Picture:http://www.wizards.com/global/images/magic/general/trespassing_souleater.jpg diff --git a/forge-gui/res/cardsfolder/t/trigon_of_infestation.txt b/forge-gui/res/cardsfolder/t/trigon_of_infestation.txt index d30aa059d12..c3e643c9aaa 100644 --- a/forge-gui/res/cardsfolder/t/trigon_of_infestation.txt +++ b/forge-gui/res/cardsfolder/t/trigon_of_infestation.txt @@ -3,6 +3,5 @@ ManaCost:4 Types:Artifact K:etbCounter:CHARGE:3 A:AB$ PutCounter | Cost$ G G T | CounterType$ CHARGE | CounterNum$ 1 | SpellDescription$ Put a charge counter on CARDNAME. -A:AB$ Token | Cost$ 2 T SubCounter<1/CHARGE> | LegacyImage$ g 1 1 insect infect som | TokenAmount$ 1 | TokenScript$ g_1_1_insect_infect | TokenOwner$ You | SpellDescription$ Create a 1/1 green Insect creature token with infect. -SVar:Picture:http://www.wizards.com/global/images/magic/general/trigon_of_infestation.jpg -Oracle:Trigon of Infestation enters the battlefield with three charge counters on it.\n{G}{G}, {T}: Put a charge counter on Trigon of Infestation.\n{2}, {T}, Remove a charge counter from Trigon of Infestation: Create a 1/1 green Insect creature token with infect. +A:AB$ Token | Cost$ 2 T SubCounter<1/CHARGE> | TokenAmount$ 1 | TokenScript$ g_1_1_phyrexian_insect_infect | TokenOwner$ You | SpellDescription$ Create a 1/1 green Phyrexian Insect creature token with infect. +Oracle:Trigon of Infestation enters the battlefield with three charge counters on it.\n{G}{G}, {T}: Put a charge counter on Trigon of Infestation.\n{2}, {T}, Remove a charge counter from Trigon of Infestation: Create a 1/1 green Phyrexian Insect creature token with infect. diff --git a/forge-gui/res/cardsfolder/t/tsabo_tavoc.txt b/forge-gui/res/cardsfolder/t/tsabo_tavoc.txt index 0d8cca6d0b4..e946d4f3763 100644 --- a/forge-gui/res/cardsfolder/t/tsabo_tavoc.txt +++ b/forge-gui/res/cardsfolder/t/tsabo_tavoc.txt @@ -1,6 +1,6 @@ Name:Tsabo Tavoc ManaCost:5 B R -Types:Legendary Creature Horror +Types:Legendary Creature Phyrexian Horror PT:7/4 K:First Strike K:Protection:Creature.Legendary:Protection from legendary creatures diff --git a/forge-gui/res/cardsfolder/t/tsabos_assassin.txt b/forge-gui/res/cardsfolder/t/tsabos_assassin.txt index 901bd8dcaca..e0cbbb0188f 100644 --- a/forge-gui/res/cardsfolder/t/tsabos_assassin.txt +++ b/forge-gui/res/cardsfolder/t/tsabos_assassin.txt @@ -1,6 +1,6 @@ Name:Tsabo's Assassin ManaCost:2 B B -Types:Creature Zombie Assassin +Types:Creature Phyrexian Zombie Assassin PT:1/1 A:AB$ Destroy | Cost$ T | ValidTgts$ Creature | TgtPrompt$ Select target creature | NoRegen$ True | AITgts$ Creature.SharesColorWith MostProminentColor | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 | SpellDescription$ Destroy target creature if it shares a color with the most common color among all permanents or a color tied for most common. A creature destroyed this way can't be regenerated. SVar:X:Targeted$Valid Creature.SharesColorWith MostProminentColor diff --git a/forge-gui/res/cardsfolder/u/unbounded_potential.txt b/forge-gui/res/cardsfolder/u/unbounded_potential.txt index 4cc817333da..91be5be2755 100644 --- a/forge-gui/res/cardsfolder/u/unbounded_potential.txt +++ b/forge-gui/res/cardsfolder/u/unbounded_potential.txt @@ -6,4 +6,4 @@ A:SP$ Charm | Choices$ DBCounter,DBProliferate | SpellDescription$ Choose one SVar:DBCounter:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ 1 | TargetMin$ 0 | TargetMax$ 2 | ValidTgts$ Creature | TgtPrompt$ Select up to two target creatures | SpellDescription$ Put a +1/+1 counter on each of up to two target creatures. SVar:DBProliferate:DB$ Proliferate | SpellDescription$ Proliferate (Choose any number of permanents and/or players, then give each another counter of each kind already there.) DeckHas:Ability$Counters -Oracle:Choose one — \n• Put a +1/+1 counter on each of up to two target creatures.\n• Proliferate. (Choose any number of permanents and/or players, then give each another counter of each kind already there.)\nK:Entwine:3 W (Choose both if you pay the entwine cost.) +Oracle:Choose one —\n• Put a +1/+1 counter on each of up to two target creatures.\n• Proliferate. (Choose any number of permanents and/or players, then give each another counter of each kind already there.)\nEntwine {3}{W} (Choose both if you pay the entwine cost.) diff --git a/forge-gui/res/cardsfolder/u/underdark_beholder.txt b/forge-gui/res/cardsfolder/u/underdark_beholder.txt index b67606f4f87..ddf51e5d5a1 100644 --- a/forge-gui/res/cardsfolder/u/underdark_beholder.txt +++ b/forge-gui/res/cardsfolder/u/underdark_beholder.txt @@ -10,9 +10,9 @@ SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True SVar:X:ReplaceCount$DamageAmount SVar:Y:Count$RememberedSize SVar:Z:Count$CardCounters.EYESTALK -T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigDig | TriggerDescription$ Whenever CARDNAME attacks, reveal cards from the top of your library until you reveal an instant, sorcery, or enchantment card with mana value less than the number of eyestalk counters on CARDNAME. You may cast it without paying its mana cost. Shuffle your library. +T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigDig | TriggerDescription$ Whenever CARDNAME attacks, reveal cards from the top of your library until you reveal an instant, sorcery, or enchantment card with converted mana cost less than the number of eyestalk counters on CARDNAME. You may cast it without paying its mana cost. Shuffle your library. SVar:TrigDig:DB$ DigUntil | Defined$ You | Amount$ 1 | Valid$ Card.Instant+cmcLEZ,Card.Sorcery+cmcLEZ,Card.Enchantment+cmcLEZ | FoundDestination$ Exile | RevealedDestination$ Exile | ImprintRevealed$ True | RememberFound$ True | SubAbility$ CascadeCast SVar:CascadeCast:DB$ Play | Defined$ Remembered | WithoutManaCost$ True | Optional$ True | SubAbility$ CascadeMoveToLib SVar:CascadeMoveToLib:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered,Card.IsImprinted | Origin$ Exile | Destination$ Library | RandomOrder$ True | Shuffle$ True | SubAbility$ DBCleanup DeckHas:Ability$Counters -Oracle:Underdark Beholder enters the battlefield with ten eyestalk counters on it.\nIf Underdark Beholder would be dealt damage, remove that many eyestalk counters from it instead. If you can't, sacrifice it.\nWhenever Underdark Beholder attacks, reveal cards from the top of your library until you reveal an instant, sorcery, or enchantment card with mana value less than the number of eyestalk counters on Underdark Beholder. You may cast it without paying its mana cost. Shuffle your library. +Oracle:Underdark Beholder enters the battlefield with ten eyestalk counters on it.\nIf Underdark Beholder would be dealt damage, remove that many eyestalk counters from it instead. If you can't, sacrifice it.\nWhenever Underdark Beholder attacks, reveal cards from the top of your library until you reveal an instant, sorcery, or enchantment card with converted mana cost less than the number of eyestalk counters on Underdark Beholder. You may cast it without paying its mana cost. Shuffle your library. diff --git a/forge-gui/res/cardsfolder/u/underworld_hermit.txt b/forge-gui/res/cardsfolder/u/underworld_hermit.txt index 4d9d98b6e1c..f0b8a769d34 100644 --- a/forge-gui/res/cardsfolder/u/underworld_hermit.txt +++ b/forge-gui/res/cardsfolder/u/underworld_hermit.txt @@ -2,8 +2,8 @@ Name:Underworld Hermit ManaCost:4 B B Types:Creature Human Peasant PT:3/3 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a number of 1/1 green Squirrel creature tokens equal to your devotion to black. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a number of 1/1 green Squirrel creature tokens equal to your devotion to black. (Each {B} in the mana costs of permanents you control counts toward your devotion to black.) SVar:TrigToken:DB$ Token | TokenAmount$ X | TokenScript$ g_1_1_squirrel | TokenOwner$ You SVar:X:Count$Devotion.Black DeckHas:Ability$Token -Oracle:When Underworld Hermit enters the battlefield, create a number of 1/1 green Squirrel creature tokens equal to your devotion to black. +Oracle:When Underworld Hermit enters the battlefield, create a number of 1/1 green Squirrel creature tokens equal to your devotion to black. (Each {B} in the mana costs of permanents you control counts toward your devotion to black.) diff --git a/forge-gui/res/cardsfolder/u/unworthy_dead.txt b/forge-gui/res/cardsfolder/u/unworthy_dead.txt index 91d7dcc5a0f..a0e02c6f9f0 100644 --- a/forge-gui/res/cardsfolder/u/unworthy_dead.txt +++ b/forge-gui/res/cardsfolder/u/unworthy_dead.txt @@ -1,6 +1,6 @@ Name:Unworthy Dead ManaCost:1 B -Types:Creature Skeleton +Types:Creature Phyrexian Skeleton PT:1/1 A:AB$ Regenerate | Cost$ B | SpellDescription$ Regenerate CARDNAME. SVar:Picture:http://www.wizards.com/global/images/magic/general/unworthy_dead.jpg diff --git a/forge-gui/res/cardsfolder/u/urabrask_the_hidden.txt b/forge-gui/res/cardsfolder/u/urabrask_the_hidden.txt index b518280c3fd..1ecb1cf2c6a 100644 --- a/forge-gui/res/cardsfolder/u/urabrask_the_hidden.txt +++ b/forge-gui/res/cardsfolder/u/urabrask_the_hidden.txt @@ -1,6 +1,6 @@ Name:Urabrask the Hidden ManaCost:3 R R -Types:Legendary Creature Praetor +Types:Legendary Creature Phyrexian Praetor PT:4/4 S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddKeyword$ Haste | Description$ Creatures you control have haste. R:Event$ Moved | ValidCard$ Creature.OppCtrl | Destination$ Battlefield | ReplaceWith$ ETBTapped | ActiveZones$ Battlefield | Description$ Creatures your opponents control enter the battlefield tapped. diff --git a/forge-gui/res/cardsfolder/u/urban_daggertooth.txt b/forge-gui/res/cardsfolder/u/urban_daggertooth.txt index 07225de8d14..50722f09f50 100644 --- a/forge-gui/res/cardsfolder/u/urban_daggertooth.txt +++ b/forge-gui/res/cardsfolder/u/urban_daggertooth.txt @@ -6,4 +6,4 @@ K:Vigilance T:Mode$ DamageDoneOnce | Execute$ TrigProliferate | ValidTarget$ Card.Self | TriggerZones$ Battlefield | TriggerDescription$ Enrage — Whenever CARDNAME is dealt damage, proliferate. SVar:TrigProliferate:DB$Proliferate SVar:HasCombatEffect:TRUE -Oracle:Enrage — Whenever Urban Daggertooth is dealt damage, proliferate. (Choose any number of permanents and/or players, then give each another counter of each kind already there.) +Oracle:Vigilance\nEnrage — Whenever Urban Daggertooth is dealt damage, proliferate. (Choose any number of permanents and/or players, then give each another counter of each kind already there.) diff --git a/forge-gui/res/cardsfolder/u/urzas_saga.txt b/forge-gui/res/cardsfolder/u/urzas_saga.txt index 81dbc818345..784ec5b2554 100644 --- a/forge-gui/res/cardsfolder/u/urzas_saga.txt +++ b/forge-gui/res/cardsfolder/u/urzas_saga.txt @@ -9,4 +9,4 @@ SVar:ABToken:AB$ Token | Cost$ 2 T | TokenScript$ c_0_0_a_construct_total_artifa SVar:Tutor:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Artifact.ManaCost0,Artifact.ManaCost1 | ChangeNum$ 1 | SpellDescription$ Search your library for an artifact card with mana cost {0} or {1}, put it onto the battlefield, then shuffle. DeckHas:Ability$Token DeckNeeds:Type$Artifact -Oracle:I — Urza's Saga gains "{T}: Add {C}."\nII — Urza's Saga gains "{2}, {T}: Create a 0/0 colorless Construct artifact creature token with 'This creature gets +1/+1 for each artifact you control.'"\nIII — Search your library for an artifact card with mana cost {0} or {1}, put it onto the battlefield, then shuffle. +Oracle:(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)\nI — Urza's Saga gains "{T}: Add {C}."\nII — Urza's Saga gains "{2}, {T}: Create a 0/0 colorless Construct artifact creature token with 'This creature gets +1/+1 for each artifact you control.'"\nIII — Search your library for an artifact card with mana cost {0} or {1}, put it onto the battlefield, then shuffle. diff --git a/forge-gui/res/cardsfolder/upcoming/flumph.txt b/forge-gui/res/cardsfolder/upcoming/flumph.txt new file mode 100644 index 00000000000..21a54a7853d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/flumph.txt @@ -0,0 +1,10 @@ +Name:Flumph +ManaCost:1 W +Types:Creature Jellyfish +PT:0/4 +K:Defender +K:Flying +T:Mode$ DamageDoneOnce | Execute$ TrigDraw | ValidTarget$ Card.Self | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME is dealt damage, you and target opponent each draw a card. +SVar:TrigDraw:DB$ Draw | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | NumCards$ 1 | SubAbility$ DBDraw +SVar:DBDraw:DB$ Draw | NumCards$ 1 +Oracle:Defender, flying\nWhenever Flumph is dealt damage, you and target opponent each draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/tashas_hideous_laughter.txt b/forge-gui/res/cardsfolder/upcoming/tashas_hideous_laughter.txt new file mode 100644 index 00000000000..adca1ec2a29 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/tashas_hideous_laughter.txt @@ -0,0 +1,9 @@ +Name:Tasha's Hideous Laughter +ManaCost:1 U U +Types:Sorcery +A:SP$ RepeatEach | RepeatPlayers$ Opponent | RepeatSubAbility$ DBRepeat | SpellDescription$ Each opponent exiles cards from the top of their library until that player has exiled cards with total mana value 20 or more. +SVar:DBRepeat:DB$ Repeat | RepeatSubAbility$ DBExile | RepeatCheckSVar$ X | RepeatSVarCompare$ LT20 | SubAbility$ DBCleanup +SVar:DBExile:DB$ Dig | Defined$ Remembered | DigNum$ 1 | ChangeNum$ All | DestinationZone$ Exile | Imprint$ True +SVar:DBCleanup:DB$ Cleanup | ClearImprinted$ True +SVar:X:Imprinted$CardManaCost +Oracle:Each opponent exiles cards from the top of their library until that player has exiled cards with total mana value 20 or more. diff --git a/forge-gui/res/cardsfolder/v/vampire_aristocrat.txt b/forge-gui/res/cardsfolder/v/vampire_aristocrat.txt index 99cb33f2a17..3b9c11ac932 100644 --- a/forge-gui/res/cardsfolder/v/vampire_aristocrat.txt +++ b/forge-gui/res/cardsfolder/v/vampire_aristocrat.txt @@ -1,6 +1,6 @@ Name:Vampire Aristocrat ManaCost:2 B -Types:Creature Vampire Noble Rogue +Types:Creature Vampire Rogue Noble PT:2/2 A:AB$ Pump | Cost$ Sac<1/Creature> | NumAtt$ +2 | NumDef$ +2 | AILogic$ Aristocrat | SpellDescription$ CARDNAME gets +2/+2 until end of turn. SVar:AIPreference:SacCost$Creature.Other diff --git a/forge-gui/res/cardsfolder/v/vault_skirge.txt b/forge-gui/res/cardsfolder/v/vault_skirge.txt index ac355222751..305c0449491 100644 --- a/forge-gui/res/cardsfolder/v/vault_skirge.txt +++ b/forge-gui/res/cardsfolder/v/vault_skirge.txt @@ -1,6 +1,6 @@ Name:Vault Skirge ManaCost:1 PB -Types:Artifact Creature Imp +Types:Artifact Creature Phyrexian Imp PT:1/1 K:Flying K:Lifelink diff --git a/forge-gui/res/cardsfolder/v/vebulid.txt b/forge-gui/res/cardsfolder/v/vebulid.txt index a06cf3d9ada..d22008189cf 100644 --- a/forge-gui/res/cardsfolder/v/vebulid.txt +++ b/forge-gui/res/cardsfolder/v/vebulid.txt @@ -1,6 +1,6 @@ Name:Vebulid ManaCost:B -Types:Creature Horror +Types:Creature Phyrexian Horror PT:0/0 K:etbCounter:P1P1:1 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigPutCounter | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ At the beginning of your upkeep, you may put a +1/+1 counter on CARDNAME. diff --git a/forge-gui/res/cardsfolder/v/vectis_gloves.txt b/forge-gui/res/cardsfolder/v/vectis_gloves.txt index bf5e490605d..acace17f1b2 100644 --- a/forge-gui/res/cardsfolder/v/vectis_gloves.txt +++ b/forge-gui/res/cardsfolder/v/vectis_gloves.txt @@ -1,6 +1,6 @@ Name:Vectis Gloves ManaCost:2 Types:Artifact Equipment -S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 2 | AddKeyword$ Artifact landwalk | Description$ Equipped creature gets +2/+0 and has artifact landwalk. (It can’t be blocked as long as defending player controls an artifact land.) +S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 2 | AddKeyword$ Artifact landwalk | Description$ Equipped creature gets +2/+0 and has artifact landwalk. (It can't be blocked as long as defending player controls an artifact land.) K:Equip:2 -Oracle:Equipped creature gets +2/+0 and has artifact landwalk. (It can’t be blocked as long as defending player controls an artifact land.)\nEquip {2} +Oracle:Equipped creature gets +2/+0 and has artifact landwalk. (It can't be blocked as long as defending player controls an artifact land.)\nEquip {2} diff --git a/forge-gui/res/cardsfolder/v/vector_asp.txt b/forge-gui/res/cardsfolder/v/vector_asp.txt index e2bdb73b5a4..37eba0ecf08 100644 --- a/forge-gui/res/cardsfolder/v/vector_asp.txt +++ b/forge-gui/res/cardsfolder/v/vector_asp.txt @@ -1,6 +1,6 @@ Name:Vector Asp ManaCost:1 -Types:Artifact Creature Snake +Types:Artifact Creature Phyrexian Snake PT:1/1 A:AB$ Pump | Cost$ B | Defined$ Self | KW$ Infect | SpellDescription$ CARDNAME gains infect until end of turn. SVar:Picture:http://www.wizards.com/global/images/magic/general/vector_asp.jpg diff --git a/forge-gui/res/cardsfolder/v/vedalken_anatomist.txt b/forge-gui/res/cardsfolder/v/vedalken_anatomist.txt index d6bdfe92be1..2c9e977842c 100644 --- a/forge-gui/res/cardsfolder/v/vedalken_anatomist.txt +++ b/forge-gui/res/cardsfolder/v/vedalken_anatomist.txt @@ -1,6 +1,6 @@ Name:Vedalken Anatomist ManaCost:2 U -Types:Creature Vedalken Wizard +Types:Creature Phyrexian Vedalken Wizard PT:1/2 A:AB$ PutCounter | Cost$ 2 U T | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ M1M1 | CounterNum$ 1 | SubAbility$ DBTapOrUntap | IsCurse$ True | SpellDescription$ Put a -1/-1 counter on target creature. You may tap or untap that creature. SVar:DBTapOrUntap:DB$ TapOrUntap | Defined$ Targeted diff --git a/forge-gui/res/cardsfolder/v/vedalken_infiltrator.txt b/forge-gui/res/cardsfolder/v/vedalken_infiltrator.txt index 468ef3e22f5..fdbd97071e5 100644 --- a/forge-gui/res/cardsfolder/v/vedalken_infiltrator.txt +++ b/forge-gui/res/cardsfolder/v/vedalken_infiltrator.txt @@ -3,6 +3,6 @@ ManaCost:1 U Types:Creature Vedalken Rogue PT:1/3 K:Unblockable -S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 1 | Condition$ Metalcraft | Description$ Metalcraft — As long as you control three or more artifacts, CARDNAME gets +1/0. +S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 1 | Condition$ Metalcraft | Description$ Metalcraft — CARDNAME gets +1/+0 as long as you control three or more artifacts. SVar:BuffedBy:Artifact -Oracle:Vedalken Infiltrator can't be blocked.\nMetalcraft — As long as you control three or more artifacts, Vedalken Infiltrator gets +1/0. +Oracle:Vedalken Infiltrator can't be blocked.\nMetalcraft — Vedalken Infiltrator gets +1/+0 as long as you control three or more artifacts. diff --git a/forge-gui/res/cardsfolder/v/vela_the_night_clad.txt b/forge-gui/res/cardsfolder/v/vela_the_night_clad.txt index 94a621df914..0f56f81e868 100644 --- a/forge-gui/res/cardsfolder/v/vela_the_night_clad.txt +++ b/forge-gui/res/cardsfolder/v/vela_the_night_clad.txt @@ -4,8 +4,7 @@ Types:Legendary Creature Human Wizard PT:4/4 K:Intimidate S:Mode$ Continuous | Affected$ Creature.Other+YouCtrl | AddKeyword$ Intimidate (This creature can't be blocked except by artifact creatures and/or creatures that share a color with it.) | Description$ Other creatures you control have Intimidate (This creature can't be blocked except by artifact creatures and/or creatures that share a color with it.). -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigLoseLife | TriggerDescription$ Whenever Vela the Night-Clad or another creature you control leaves the battlefield, each opponent loses 1 life. -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Creature.Other+YouCtrl | TriggerZones$ Battlefield | Secondary$ True | Execute$ TrigLoseLife | TriggerDescription$ Whenever Vela the Night-Clad or another creature you control leaves the battlefield, each opponent loses 1 life. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self,Creature.Other+YouCtrl | Execute$ TrigLoseLife | TriggerDescription$ Whenever Vela the Night-Clad or another creature you control leaves the battlefield, each opponent loses 1 life. SVar:TrigLoseLife:DB$ LoseLife | Defined$ Player.Opponent | LifeAmount$ 1 SVar:Picture:http://www.wizards.com/global/images/magic/general/vela_the_night_clad.jpg Oracle:Intimidate (This creature can't be blocked except by artifact creatures and/or creatures that share a color with it.)\nOther creatures you control have intimidate.\nWhenever Vela the Night-Clad or another creature you control leaves the battlefield, each opponent loses 1 life. diff --git a/forge-gui/res/cardsfolder/v/vermin_gorger.txt b/forge-gui/res/cardsfolder/v/vermin_gorger.txt index 00011eacbbf..46d5c3b6804 100644 --- a/forge-gui/res/cardsfolder/v/vermin_gorger.txt +++ b/forge-gui/res/cardsfolder/v/vermin_gorger.txt @@ -2,7 +2,7 @@ Name:Vermin Gorger ManaCost:1 B Types:Creature Vampire PT:2/2 -A:AB$ LoseLife | Cost$ T Sac<1/Creature.Other/another creature> | Defined Player.Opponent | LifeAmount$ 2 | SubAbility$ DBGainLife | SpellDescription$ Each opponent loses 2 life and you gain 2 life. +A:AB$ LoseLife | Cost$ T Sac<1/Creature.Other/another creature> | Defined$ Player.Opponent | LifeAmount$ 2 | SubAbility$ DBGainLife | SpellDescription$ Each opponent loses 2 life and you gain 2 life. SVar:DBGainLife:DB$ GainLife | LifeAmount$ 2 DeckHas:Ability$LifeGain Oracle:{T}, Sacrifice another creature: Each opponent loses 2 life and you gain 2 life. diff --git a/forge-gui/res/cardsfolder/v/viral_drake.txt b/forge-gui/res/cardsfolder/v/viral_drake.txt index 00734c27756..81ba4eb3660 100644 --- a/forge-gui/res/cardsfolder/v/viral_drake.txt +++ b/forge-gui/res/cardsfolder/v/viral_drake.txt @@ -1,6 +1,6 @@ Name:Viral Drake ManaCost:3 U -Types:Creature Drake +Types:Creature Phyrexian Drake PT:1/4 K:Flying K:Infect diff --git a/forge-gui/res/cardsfolder/v/viridian_betrayers.txt b/forge-gui/res/cardsfolder/v/viridian_betrayers.txt index 35a5b26954f..2afe12b80ba 100644 --- a/forge-gui/res/cardsfolder/v/viridian_betrayers.txt +++ b/forge-gui/res/cardsfolder/v/viridian_betrayers.txt @@ -1,6 +1,6 @@ Name:Viridian Betrayers ManaCost:1 G G -Types:Creature Elf Warrior +Types:Creature Phyrexian Elf Warrior PT:3/1 S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ Infect | CheckSVar$ X | SVarCompare$ GE1 | Description$ CARDNAME has infect as long as an opponent is poisoned. (It deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.) SVar:X:Count$TotalOppPoisonCounters diff --git a/forge-gui/res/cardsfolder/v/viridian_corrupter.txt b/forge-gui/res/cardsfolder/v/viridian_corrupter.txt index 7b1e6e2e4e1..57338965e25 100644 --- a/forge-gui/res/cardsfolder/v/viridian_corrupter.txt +++ b/forge-gui/res/cardsfolder/v/viridian_corrupter.txt @@ -1,6 +1,6 @@ Name:Viridian Corrupter ManaCost:1 G G -Types:Creature Elf Shaman +Types:Creature Phyrexian Elf Shaman PT:2/2 K:Infect T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDestroy | TriggerDescription$ When CARDNAME enters the battlefield, destroy target artifact. diff --git a/forge-gui/res/cardsfolder/v/viridian_emissary.txt b/forge-gui/res/cardsfolder/v/viridian_emissary.txt index 3d7e78478af..ca19121a542 100644 --- a/forge-gui/res/cardsfolder/v/viridian_emissary.txt +++ b/forge-gui/res/cardsfolder/v/viridian_emissary.txt @@ -1,6 +1,6 @@ Name:Viridian Emissary ManaCost:1 G -Types:Creature Elf Scout +Types:Creature Phyrexian Elf Scout PT:2/1 T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ TriggeredCardController | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, you may search your library for a basic land card, put it onto the battlefield tapped, then shuffle. SVar:TrigChange:DB$ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Basic | ChangeNum$ 1 | ShuffleNonMandatory$ True diff --git a/forge-gui/res/cardsfolder/v/viseling.txt b/forge-gui/res/cardsfolder/v/viseling.txt index ccec74c4427..c3453a76736 100644 --- a/forge-gui/res/cardsfolder/v/viseling.txt +++ b/forge-gui/res/cardsfolder/v/viseling.txt @@ -1,6 +1,6 @@ Name:Viseling ManaCost:4 -Types:Artifact Creature Construct +Types:Artifact Creature Phyrexian Construct PT:2/2 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Opponent | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ At the beginning of each opponent's upkeep, CARDNAME deals X damage to that player, where X is the number of cards in their hand minus 4. SVar:TrigDamage:DB$ DealDamage | Defined$ TriggeredPlayer | NumDmg$ X diff --git a/forge-gui/res/cardsfolder/v/vision_charm.txt b/forge-gui/res/cardsfolder/v/vision_charm.txt index b56796bb997..fd6b8188022 100644 --- a/forge-gui/res/cardsfolder/v/vision_charm.txt +++ b/forge-gui/res/cardsfolder/v/vision_charm.txt @@ -3,11 +3,10 @@ ManaCost:U Types:Instant A:SP$ Charm | Cost$ U | Choices$ MillOpp,ChangeType,PhaseArtifact | CharmNum$ 1 SVar:MillOpp:DB$ Mill | NumCards$ 4 | ValidTgts$ Player | TgtPrompt$ Choose a player | SpellDescription$ Target player mills four cards. -SVar:ChangeType:DB$ ChooseType | Defined$ You | Type$ Land | SubAbility$ RemFirstLand | SpellDescription$ Choose a land type and a basic land type. Each land of the first chosen type becomes the second chosen type until end of turn. -SVar:RemFirstLand:DB$ PumpAll | ValidCards$ Land.ChosenType | RememberAllPumped$ True | SubAbility$ ChooseType2 -SVar:ChooseType2:DB$ ChooseType | Defined$ You | Type$ Basic Land | AILogic$ MostNeededType | SubAbility$ AnimateFirst -SVar:AnimateFirst:DB$ AnimateAll | ValidCards$ Land.IsRemembered | Types$ ChosenType | RemoveLandTypes$ True | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:PhaseArtifact:DB$ Phases | ValidTgts$ Artifact | TgtPrompt$ Choose a artifact | SpellDescription$ Target artifact phases out. +SVar:ChangeType:DB$ ChooseType | Defined$ You | Type$ Land | SubAbility$ ChooseType2 | SpellDescription$ Choose a land type and a basic land type. Each land of the first chosen type becomes the second chosen type until end of turn. +SVar:ChooseType2:DB$ ChooseType | Defined$ You | Type$ Basic Land | ChooseType2$ True| AILogic$ MostNeededType | SubAbility$ EffChangeType +SVar:EffChangeType:DB$ Effect | StaticAbilities$ ChangeLandType +SVar:ChangeLandType:Mode$ Continuous | EffectZone$ Command | Affected$ Land.ChosenType | AddType$ ChosenType2 | RemoveLandTypes$ True | Description$ Each land of the first chosen type becomes the second chosen type until end of turn. +SVar:PhaseArtifact:DB$ Phases | ValidTgts$ Artifact | TgtPrompt$ Choose a artifact | SpellDescription$ Target artifact phases out. (While it's phased out, it's treated as though it doesn't exist. It phases in before its controller untaps during their next untap step.) AI:RemoveDeck:All Oracle:Choose one —\n• Target player mills four cards.\n• Choose a land type and a basic land type. Each land of the first chosen type becomes the second chosen type until end of turn.\n• Target artifact phases out. (While it's phased out, it's treated as though it doesn't exist. It phases in before its controller untaps during their next untap step.) diff --git a/forge-gui/res/cardsfolder/v/vital_splicer.txt b/forge-gui/res/cardsfolder/v/vital_splicer.txt index 98daf888a81..ae4ebfcfd95 100644 --- a/forge-gui/res/cardsfolder/v/vital_splicer.txt +++ b/forge-gui/res/cardsfolder/v/vital_splicer.txt @@ -1,9 +1,8 @@ Name:Vital Splicer ManaCost:3 G -Types:Creature Human Artificer +Types:Creature Phyrexian Human Artificer PT:1/1 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a 3/3 colorless Golem artifact creature token. -SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_3_3_a_golem | TokenOwner$ You | LegacyImage$ c 3 3 a golem nph +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a 3/3 colorless Phyrexian Golem artifact creature token. +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_3_3_a_phyrexian_golem | TokenOwner$ You A:AB$ Regenerate | Cost$ 1 | ValidTgts$ Golem.YouCtrl | TgtPrompt$ Select target Golem you control. | SpellDescription$ Regenerate target Golem you control. -SVar:Picture:http://www.wizards.com/global/images/magic/general/vital_splicer.jpg -Oracle:When Vital Splicer enters the battlefield, create a 3/3 colorless Golem artifact creature token.\n{1}: Regenerate target Golem you control. +Oracle:When Vital Splicer enters the battlefield, create a 3/3 colorless Phyrexian Golem artifact creature token.\n{1}: Regenerate target Golem you control. diff --git a/forge-gui/res/cardsfolder/v/volrath_the_fallen.txt b/forge-gui/res/cardsfolder/v/volrath_the_fallen.txt index 9842ae53b2c..6ebd3efc983 100644 --- a/forge-gui/res/cardsfolder/v/volrath_the_fallen.txt +++ b/forge-gui/res/cardsfolder/v/volrath_the_fallen.txt @@ -1,6 +1,6 @@ Name:Volrath the Fallen ManaCost:3 B B B -Types:Legendary Creature Shapeshifter +Types:Legendary Creature Phyrexian Shapeshifter PT:6/4 A:AB$ Pump | Cost$ 1 B Discard<1/Creature> | NumAtt$ +X | NumDef$ +X | SpellDescription$ CARDNAME gets +X/+X until end of turn, where X is the discarded card's mana value. SVar:X:Discarded$CardManaCost diff --git a/forge-gui/res/cardsfolder/v/volrath_the_shapestealer.txt b/forge-gui/res/cardsfolder/v/volrath_the_shapestealer.txt index dc02010ebf3..282c327c611 100644 --- a/forge-gui/res/cardsfolder/v/volrath_the_shapestealer.txt +++ b/forge-gui/res/cardsfolder/v/volrath_the_shapestealer.txt @@ -1,6 +1,6 @@ Name:Volrath, the Shapestealer ManaCost:2 B G U -Types:Legendary Creature Shapeshifter +Types:Legendary Creature Phyrexian Shapeshifter PT:7/5 T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of combat on your turn, put a -1/-1 counter on up to one target creature. SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature | CounterType$ M1M1 | TargetMin$ 0 | TargetMax$ 1 | CounterNum$ 1 | IsCurse$ True diff --git a/forge-gui/res/cardsfolder/v/volraths_shapeshifter.txt b/forge-gui/res/cardsfolder/v/volraths_shapeshifter.txt index 88eb1fac559..6d145adde29 100644 --- a/forge-gui/res/cardsfolder/v/volraths_shapeshifter.txt +++ b/forge-gui/res/cardsfolder/v/volraths_shapeshifter.txt @@ -1,6 +1,6 @@ Name:Volrath's Shapeshifter ManaCost:1 U U -Types:Creature Shapeshifter +Types:Creature Phyrexian Shapeshifter PT:0/1 A:AB$ Discard | Cost$ 2 | Defined$ You | NumCards$ 1 | Mode$ TgtChoose | AILogic$ VolrathsShapeshifter | SpellDescription$ Discard a card. S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ Battlefield | GainTextOf$ Creature.TopGraveyard+YouCtrl | GainTextAbilities$ VolrathDiscard | Description$ As long as the top card of your graveyard is a creature card, CARDNAME has the full text of that card and has the text "{2}: Discard a card." (CARDNAME has that card's name, mana cost, color, types, abilities, power, and toughness.) diff --git a/forge-gui/res/cardsfolder/v/voracious_vacuum.txt b/forge-gui/res/cardsfolder/v/voracious_vacuum.txt index 95362de5ce8..d5776f3622f 100644 --- a/forge-gui/res/cardsfolder/v/voracious_vacuum.txt +++ b/forge-gui/res/cardsfolder/v/voracious_vacuum.txt @@ -1,6 +1,6 @@ Name:Voracious Vacuum ManaCost:3 -Types:Artifact Host Creature Construct +Types:Host Artifact Creature Construct PT:1/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPut | Host$ True | TriggerDescription$ When this creature enters the battlefield, put a +1/+1 counter on target creature. SVar:TrigPut:DB$PutCounter | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ P1P1 | CounterNum$ 1 diff --git a/forge-gui/res/cardsfolder/v/vorinclex_voice_of_hunger.txt b/forge-gui/res/cardsfolder/v/vorinclex_voice_of_hunger.txt index 3bf1d621497..08189fd87b5 100644 --- a/forge-gui/res/cardsfolder/v/vorinclex_voice_of_hunger.txt +++ b/forge-gui/res/cardsfolder/v/vorinclex_voice_of_hunger.txt @@ -1,6 +1,6 @@ Name:Vorinclex, Voice of Hunger ManaCost:6 G G -Types:Legendary Creature Praetor +Types:Legendary Creature Phyrexian Praetor PT:7/6 K:Trample T:Mode$ TapsForMana | ValidCard$ Land | Activator$ You | Execute$ TrigMana | TriggerZones$ Battlefield | Static$ True | TriggerDescription$ Whenever you tap a land for mana, add one mana of any type that land produced. diff --git a/forge-gui/res/cardsfolder/w/warteye_witch.txt b/forge-gui/res/cardsfolder/w/warteye_witch.txt index 19fdb48557a..e355335e538 100644 --- a/forge-gui/res/cardsfolder/w/warteye_witch.txt +++ b/forge-gui/res/cardsfolder/w/warteye_witch.txt @@ -2,7 +2,6 @@ Name:Warteye Witch ManaCost:2 B Types:Creature Goblin Shaman PT:3/2 -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.Other | TriggerZones$ Battlefield | Execute$ TrigScry | TriggerDescription$ Whenever CARDNAME or another creature you control dies, scry 1. -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigScry | TriggerController$ TriggeredCardController | Secondary$ True | TriggerDescription$ Whenever CARDNAME or another creature you control dies, scry 1. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self,Creature.Other+YouCtrl | Execute$ TrigScry | TriggerController$ TriggeredCardController| TriggerDescription$ Whenever CARDNAME or another creature you control dies, scry 1. SVar:TrigScry:DB$ Scry | ScryNum$ 1 Oracle:Whenever Warteye Witch or another creature you control dies, scry 1. diff --git a/forge-gui/res/cardsfolder/w/wavesifter.txt b/forge-gui/res/cardsfolder/w/wavesifter.txt index e409d02a137..4c3d84e5ed8 100644 --- a/forge-gui/res/cardsfolder/w/wavesifter.txt +++ b/forge-gui/res/cardsfolder/w/wavesifter.txt @@ -7,4 +7,4 @@ K:Evoke:G U T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigInvestigate | TriggerDescription$ When CARDNAME enters the battlefield, investigate twice. (To investigate, create a colorless Clue artifact token with "{2}, Sacrifice this artifact: Draw a card.") SVar:TrigInvestigate:DB$ Investigate | Num$ 2 DeckHas:Ability$Token -Oracle:Flying\nWhen Wavesifter enters the battlefield, investigate twice. (To investigate, create a colorless Clue artifact token with "{2}, Sacrifice this artifact: Draw a card.")\nEvoke G U (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.) +Oracle:Flying\nWhen Wavesifter enters the battlefield, investigate twice. (To investigate, create a colorless Clue artifact token with "{2}, Sacrifice this artifact: Draw a card.")\nEvoke {G}{U} (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.) diff --git a/forge-gui/res/cardsfolder/w/western_paladin.txt b/forge-gui/res/cardsfolder/w/western_paladin.txt index 166b9648d24..d0974ee164b 100644 --- a/forge-gui/res/cardsfolder/w/western_paladin.txt +++ b/forge-gui/res/cardsfolder/w/western_paladin.txt @@ -1,6 +1,6 @@ Name:Western Paladin ManaCost:2 B B -Types:Creature Zombie Knight +Types:Creature Phyrexian Zombie Knight PT:3/3 A:AB$ Destroy | Cost$ B B T | ValidTgts$ Creature.White | TgtPrompt$ Select target white creature | SpellDescription$ Destroy target white creature. AI:RemoveDeck:Random diff --git a/forge-gui/res/cardsfolder/w/whispering_specter.txt b/forge-gui/res/cardsfolder/w/whispering_specter.txt index 19c53eaab0b..704f1094436 100644 --- a/forge-gui/res/cardsfolder/w/whispering_specter.txt +++ b/forge-gui/res/cardsfolder/w/whispering_specter.txt @@ -1,6 +1,6 @@ Name:Whispering Specter ManaCost:1 B B -Types:Creature Specter +Types:Creature Phyrexian Specter PT:1/1 K:Flying K:Infect diff --git a/forge-gui/res/cardsfolder/w/willowdusk_essence_seer.txt b/forge-gui/res/cardsfolder/w/willowdusk_essence_seer.txt index 072f100c058..402f608b741 100644 --- a/forge-gui/res/cardsfolder/w/willowdusk_essence_seer.txt +++ b/forge-gui/res/cardsfolder/w/willowdusk_essence_seer.txt @@ -1,6 +1,6 @@ Name:Willowdusk, Essence Seer ManaCost:1 B G -Types:Legendary Creature Dyrad Druid +Types:Legendary Creature Dryad Druid PT:3/3 A:AB$ PutCounter | Cost$ 1 T | ValidTgts$ Creature.Other | TgtPrompt$ Choose another target creature | CounterType$ P1P1 | CounterNum$ X | SorcerySpeed$ True | SpellDescription$ Choose another target creature. Put a number of +1/+1 counters on it equal to the amount of life you gained this turn or the amount of life you lost this turn, whichever is greater. Activate only as a sorcery. SVar:X:SVar$Y/LimitMin.Z diff --git a/forge-gui/res/cardsfolder/w/wing_splicer.txt b/forge-gui/res/cardsfolder/w/wing_splicer.txt index 53aa22e9227..c3c5863ce9a 100644 --- a/forge-gui/res/cardsfolder/w/wing_splicer.txt +++ b/forge-gui/res/cardsfolder/w/wing_splicer.txt @@ -1,9 +1,8 @@ Name:Wing Splicer ManaCost:3 U -Types:Creature Human Artificer +Types:Creature Phyrexian Human Artificer PT:1/1 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a 3/3 colorless Golem artifact creature token. -SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_3_3_a_golem | TokenOwner$ You | LegacyImage$ c 3 3 a golem nph +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a 3/3 colorless Phyrexian Golem artifact creature token. +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_3_3_a_phyrexian_golem | TokenOwner$ You S:Mode$ Continuous | Affected$ Creature.Golem+YouCtrl | AddKeyword$ Flying | Description$ Golem creatures you control have flying. -SVar:Picture:http://www.wizards.com/global/images/magic/general/wing_splicer.jpg -Oracle:When Wing Splicer enters the battlefield, create a 3/3 colorless Golem artifact creature token.\nGolem creatures you control have flying. +Oracle:When Wing Splicer enters the battlefield, create a 3/3 colorless Phyrexian Golem artifact creature token.\nGolem creatures you control have flying. diff --git a/forge-gui/res/cardsfolder/w/wrens_run_hydra.txt b/forge-gui/res/cardsfolder/w/wrens_run_hydra.txt index 8200887436b..30289b76b81 100644 --- a/forge-gui/res/cardsfolder/w/wrens_run_hydra.txt +++ b/forge-gui/res/cardsfolder/w/wrens_run_hydra.txt @@ -7,4 +7,4 @@ K:Reinforce:X:X G G K:etbCounter:P1P1:X SVar:X:Count$xPaid DeckHas:Ability$Counters -Oracle:Reach\nWren's Run Hydra enters the battlefield with X +1/+1 counters on it.\nReinforce X — {X}{G}{G} ({X}{G}{G}, Discard this card: Put X +1/+1 counters on target creature.) +Oracle:Reach\nWren's Run Hydra enters the battlefield with X +1/+1 counters on it.\nReinforce X—{X}{G}{G} ({X}{G}{G}, Discard this card: Put X +1/+1 counters on target creature.) diff --git a/forge-gui/res/cardsfolder/w/wurmcoil_engine.txt b/forge-gui/res/cardsfolder/w/wurmcoil_engine.txt index 0ed9a381f34..87ca7af4e6f 100644 --- a/forge-gui/res/cardsfolder/w/wurmcoil_engine.txt +++ b/forge-gui/res/cardsfolder/w/wurmcoil_engine.txt @@ -1,11 +1,10 @@ Name:Wurmcoil Engine ManaCost:6 -Types:Artifact Creature Wurm +Types:Artifact Creature Phyrexian Wurm PT:6/6 K:Deathtouch K:Lifelink -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigToken | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, create a 3/3 colorless Wurm artifact creature token with deathtouch and a 3/3 colorless Wurm artifact creature token with lifelink. -SVar:TrigToken:DB$Token | LegacyImage$ c 3 3 a wurm deathtouch som | TokenAmount$ 1 | TokenScript$ c_3_3_a_wurm_deathtouch | SubAbility$ DBToken -SVar:DBToken:DB$Token | LegacyImage$ c 3 3 a wurm lifelink som | TokenAmount$ 1 | TokenScript$ c_3_3_a_wurm_lifelink -SVar:Picture:http://www.wizards.com/global/images/magic/general/wurmcoil_engine.jpg -Oracle:Deathtouch, lifelink\nWhen Wurmcoil Engine dies, create a 3/3 colorless Wurm artifact creature token with deathtouch and a 3/3 colorless Wurm artifact creature token with lifelink. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigToken | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, create a 3/3 colorless Phyrexian Wurm artifact creature token with deathtouch and a 3/3 colorless Phyrexian Wurm artifact creature token with lifelink. +SVar:TrigToken:DB$Token | TokenAmount$ 1 | TokenScript$ c_3_3_a_phyrexian_wurm_deathtouch | SubAbility$ DBToken +SVar:DBToken:DB$Token | TokenAmount$ 1 | TokenScript$ c_3_3_a_phyrexian_wurm_lifelink +Oracle:Deathtouch, lifelink\nWhen Wurmcoil Engine dies, create a 3/3 colorless Phyrexian Wurm artifact creature token with deathtouch and a 3/3 colorless Phyrexian Wurm artifact creature token with lifelink. diff --git a/forge-gui/res/cardsfolder/x/xantcha_sleeper_agent.txt b/forge-gui/res/cardsfolder/x/xantcha_sleeper_agent.txt index 0aa64a90128..e18a4047238 100644 --- a/forge-gui/res/cardsfolder/x/xantcha_sleeper_agent.txt +++ b/forge-gui/res/cardsfolder/x/xantcha_sleeper_agent.txt @@ -1,6 +1,6 @@ Name:Xantcha, Sleeper Agent ManaCost:1 B R -Types:Legendary Creature Minion +Types:Legendary Creature Phyrexian Minion PT:5/5 K:CARDNAME attacks each combat if able. R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplaceWith$ DBChooseOpp | Layer$ Control | Description$ CARDNAME enters the battlefield under the control of an opponent of your choice. diff --git a/forge-gui/res/cardsfolder/y/yawgmoth_demon.txt b/forge-gui/res/cardsfolder/y/yawgmoth_demon.txt index e703f4cf2b9..4f7de5ea816 100644 --- a/forge-gui/res/cardsfolder/y/yawgmoth_demon.txt +++ b/forge-gui/res/cardsfolder/y/yawgmoth_demon.txt @@ -1,6 +1,6 @@ Name:Yawgmoth Demon ManaCost:4 B B -Types:Creature Demon +Types:Creature Phyrexian Demon PT:6/6 K:Flying K:First Strike diff --git a/forge-gui/res/cardsfolder/y/yusri_fortunes_flame.txt b/forge-gui/res/cardsfolder/y/yusri_fortunes_flame.txt index 4f4083819a7..14d7bc542a7 100644 --- a/forge-gui/res/cardsfolder/y/yusri_fortunes_flame.txt +++ b/forge-gui/res/cardsfolder/y/yusri_fortunes_flame.txt @@ -3,7 +3,7 @@ ManaCost:1 U R Types:Legendary Creature Efreet PT:2/3 K:Flying -T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigChooseNumber | TriggerDescription$ Whenever CARDNAME attacks, choose a number between 1 and 5. Flip that many coins. For each flip you win, draw a card. For each flip you lose, NICKNAME deals 2 damage to you. If you won five flips this way, you may cast spells from your hand this turn without paying their mana costs. +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigChooseNumber | TriggerDescription$ Whenever CARDNAME attacks, choose a number between 1 and 5. Flip that many coins. For each flip you win, draw a card. For each flip you lose, Yursi deals 2 damage to you. If you won five flips this way, you may cast spells from your hand this turn without paying their mana costs. SVar:TrigChooseNumber:DB$ ChooseNumber | Defined$ You | Min$ 1 | Max$ 5 | AILogic$ Max | SubAbility$ FlipCoin SVar:FlipCoin:DB$ FlipACoin | Amount$ X | WinSubAbility$ DBDraw | LoseSubAbility$ DBDamage | RememberNumber$ Wins | SubAbility$ DBEffect SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ Wins diff --git a/forge-gui/res/cardsfolder/z/zulaport_cutthroat.txt b/forge-gui/res/cardsfolder/z/zulaport_cutthroat.txt index 9586c97113a..d9a3cc7b420 100644 --- a/forge-gui/res/cardsfolder/z/zulaport_cutthroat.txt +++ b/forge-gui/res/cardsfolder/z/zulaport_cutthroat.txt @@ -2,8 +2,7 @@ Name:Zulaport Cutthroat ManaCost:1 B Types:Creature Human Rogue Ally PT:1/1 -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDrain | TriggerDescription$ Whenever CARDNAME or another creature you control dies, each opponent loses 1 life and you gain 1 life. -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | TriggerController$ TriggeredCardController | Execute$ TrigDrain | Secondary$ True | TriggerDescription$ Whenever CARDNAME or another creature you control dies, each opponent loses 1 life and you gain 1 life. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self,Creature.Other+YouCtrl | Execute$ TrigDrain | TriggerDescription$ Whenever CARDNAME or another creature you control dies, each opponent loses 1 life and you gain 1 life. SVar:TrigDrain:DB$ LoseLife | Defined$ Player.Opponent | LifeAmount$ 1 | SubAbility$ DBGainLife SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 DeckHas:Ability$LifeGain diff --git a/forge-gui/res/editions/Commander 2014.txt b/forge-gui/res/editions/Commander 2014.txt index 088c42f0070..09c809cc339 100644 --- a/forge-gui/res/editions/Commander 2014.txt +++ b/forge-gui/res/editions/Commander 2014.txt @@ -362,7 +362,7 @@ u_6_6_whale_hatches_kraken u_x_x_zombie b_5_5_demon_flying b_x_x_demon_flying -b_0_0_germ +b_0_0_phyrexian_germ b_x_x_horror b_2_2_zombie r_1_1_goblin @@ -377,6 +377,7 @@ g_x_x_treefolk g_2_2_wolf c_3_4_a_gargoyle_flying c_1_1_a_myr +c_1_1_a_phyrexian_myr c_1_1_a_pentavite_flying -c_3_3_a_wurm_deathtouch -c_3_3_a_wurm_lifelink +c_3_3_a_phyrexian_wurm_deathtouch +c_3_3_a_phyrexian_wurm_lifelink diff --git a/forge-gui/res/editions/Commander 2015.txt b/forge-gui/res/editions/Commander 2015.txt index 39f064a0d03..e1926a20269 100644 --- a/forge-gui/res/editions/Commander 2015.txt +++ b/forge-gui/res/editions/Commander 2015.txt @@ -360,12 +360,12 @@ w_2_2_cat w_2_2_knight_first_strike w_2_2_knight_vigilance u_2_2_drake_flying -b_0_0_germ +b_0_0_phyrexian_germ b_2_2_zombie r_5_5_dragon_flying r_3_1_elemental_shaman_haste g_2_2_bear -g_4_4_beast +g_4_4_phyrexian_beast g_3_3_elephant g_3_3_frog_lizard g_1_1_saproling diff --git a/forge-gui/res/editions/Commander 2016.txt b/forge-gui/res/editions/Commander 2016.txt index 88779f27213..5a434b56adb 100644 --- a/forge-gui/res/editions/Commander 2016.txt +++ b/forge-gui/res/editions/Commander 2016.txt @@ -370,7 +370,7 @@ w_1_1_spirit_flying u_2_2_bird_flying u_1_1_squid_islandwalk u_1_1_a_thopter_flying -b_0_0_germ +b_0_0_phyrexian_germ b_2_2_zombie r_1_1_goblin_all_attack r_3_3_ogre @@ -379,5 +379,5 @@ g_1_1_elf_warrior g_1_1_saproling g_1_1_saproling bg_1_1_worm -c_x_x_a_horror +c_x_x_a_phyrexian_horror c_1_1_a_myr diff --git a/forge-gui/res/editions/Commander 2018.txt b/forge-gui/res/editions/Commander 2018.txt index ca661b9dc9c..f87a01a947a 100644 --- a/forge-gui/res/editions/Commander 2018.txt +++ b/forge-gui/res/editions/Commander 2018.txt @@ -322,7 +322,7 @@ c_1_1_shapeshifter_changeling w_4_4_angel_flying w_2_2_cat w_1_1_soldier -u_2_1_a_myr +u_2_1_a_phyrexian_myr u_1_1_a_thopter_flying b_2_2_zombie r_0_2_dragon_egg_defender_hatches_dragon @@ -337,7 +337,7 @@ bg_1_1_worm c_a_clue_draw c_4_4_a_construct c_6_12_a_construct_trample -c_x_x_a_horror +c_x_x_a_phyrexian_horror c_1_1_a_myr c_1_1_a_servo c_1_1_a_thopter_flying diff --git a/forge-gui/res/editions/Commander 2019.txt b/forge-gui/res/editions/Commander 2019.txt index 9d36321e271..cf80184579a 100644 --- a/forge-gui/res/editions/Commander 2019.txt +++ b/forge-gui/res/editions/Commander 2019.txt @@ -317,7 +317,7 @@ b_2_2_zombie c_3_4_a_gargoyle_flying c_10_10_eldrazi c_a_treasure_sac -c_x_x_a_horror +c_x_x_a_phyrexian_horror c_x_x_a_sculpture_total_sculptures g_0_1_egg_defender g_1_1_plant diff --git a/forge-gui/res/editions/Commander 2021.txt b/forge-gui/res/editions/Commander 2021.txt index faa5f07712e..62da71fe1d6 100644 --- a/forge-gui/res/editions/Commander 2021.txt +++ b/forge-gui/res/editions/Commander 2021.txt @@ -439,6 +439,7 @@ g_6_6_wurm u_9_9_kraken g_1_1_insect_flying_deathtouch g_4_4_beast +g_4_4_phyrexian_beast g_x_x_hydra g_2_2_boar g_3_3_frog_lizard diff --git a/forge-gui/res/editions/Commander Anthology Vol. II.txt b/forge-gui/res/editions/Commander Anthology Vol. II.txt index 394f7382311..d02b86bde04 100644 --- a/forge-gui/res/editions/Commander Anthology Vol. II.txt +++ b/forge-gui/res/editions/Commander Anthology Vol. II.txt @@ -327,13 +327,14 @@ w_1_1_bird_flying w_0_1_goat w_2_2_knight_first_strike w_1_1_spirit_flying -b_0_0_germ +b_0_0_phyrexian_germ b_2_2_zombie r_3_1_elemental_shaman_haste r_1_1_goblin g_1_1_saproling c_1_1_a_myr +c_1_1_a_phyrexian_myr c_1_1_a_pentavite_flying c_1_1_a_triskelavite_flying_ammo -c_3_3_a_wurm_deathtouch -c_3_3_a_wurm_lifelink +c_3_3_a_phyrexian_wurm_deathtouch +c_3_3_a_phyrexian_wurm_lifelink diff --git a/forge-gui/res/editions/Commander Anthology.txt b/forge-gui/res/editions/Commander Anthology.txt index 68f34a689b2..1fd790c3c97 100644 --- a/forge-gui/res/editions/Commander Anthology.txt +++ b/forge-gui/res/editions/Commander Anthology.txt @@ -333,7 +333,7 @@ ScryfallCode=CMA w_1_1_kithkin_soldier w_2_2_knight_vigilance w_1_1_spirit_flying -b_0_0_germ +b_0_0_phyrexian_germ b_2_2_zombie r_5_5_dragon_flying g_3_3_beast diff --git a/forge-gui/res/editions/Commander Legends.txt b/forge-gui/res/editions/Commander Legends.txt index 57912203384..9fbcb1dc134 100644 --- a/forge-gui/res/editions/Commander Legends.txt +++ b/forge-gui/res/editions/Commander Legends.txt @@ -1337,8 +1337,8 @@ b_0_1_thrull b_2_2_zombie r_2_2_dragon_flying_firebreathing g_1_1_elf_warrior -c_3_3_a_golem -b_x_x_horror +c_3_3_a_phyrexian_golem +c_x_x_a_horror rock c_a_treasure_sac w_2_2_cat diff --git a/forge-gui/res/editions/Double Masters.txt b/forge-gui/res/editions/Double Masters.txt index e5e3fb6139b..22a07d1076c 100644 --- a/forge-gui/res/editions/Double Masters.txt +++ b/forge-gui/res/editions/Double Masters.txt @@ -735,16 +735,16 @@ ScryfallCode=2XM 1 Dark Depths+|2XM [tokens] -b_0_0_germ +b_0_0_phyrexian_germ b_5_5_demon_flying c_0_1_eldrazi_spawn_sac c_1_1_a_myr c_1_1_a_servo c_1_1_a_thopter_flying c_1_1_shapeshifter_changeling -c_3_3_a_golem -c_3_3_a_wurm_deathtouch -c_3_3_a_wurm_lifelink +c_3_3_a_phyrexian_golem +c_3_3_a_phyrexian_wurm_deathtouch +c_3_3_a_phyrexian_wurm_lifelink c_a_clue_draw c_a_treasure_sac g_0_1_plant @@ -760,7 +760,7 @@ gw_x_x_elemental_total_creatures marit_lage tuktuk_the_returned u_1_1_a_thopter_flying -u_2_1_a_myr +u_2_1_a_phyrexian_myr w_1_1_human_soldier w_1_1_soldier w_2_2_cat diff --git a/forge-gui/res/editions/Duel Decks Elves vs. Inventors.txt b/forge-gui/res/editions/Duel Decks Elves vs. Inventors.txt index 48ece5d063b..7180cefed10 100644 --- a/forge-gui/res/editions/Duel Decks Elves vs. Inventors.txt +++ b/forge-gui/res/editions/Duel Decks Elves vs. Inventors.txt @@ -87,5 +87,6 @@ ScryfallCode=DDU [tokens] g_1_1_elf_warrior c_1_1_a_myr +c_1_1_a_phyrexian_myr c_1_1_a_thopter_flying c_1_1_a_thopter_flying diff --git a/forge-gui/res/editions/Duel Decks Mirrodin Pure vs. New Phyrexia.txt b/forge-gui/res/editions/Duel Decks Mirrodin Pure vs. New Phyrexia.txt index 322d60018b9..b327e8a392b 100644 --- a/forge-gui/res/editions/Duel Decks Mirrodin Pure vs. New Phyrexia.txt +++ b/forge-gui/res/editions/Duel Decks Mirrodin Pure vs. New Phyrexia.txt @@ -99,10 +99,10 @@ ScryfallCode=TD2 [tokens] w_2_2_cat -b_0_0_germ +b_0_0_phyrexian_germ g_5_5_beast g_1_1_insect g_1_1_ooze g_2_2_ooze_mitotic -c_1_1_a_myr +c_1_1_a_phyrexian_myr c_2_2_a_spawn diff --git a/forge-gui/res/editions/Duel Decks Phyrexia vs. the Coalition.txt b/forge-gui/res/editions/Duel Decks Phyrexia vs. the Coalition.txt index 0f6f1bc6dc0..c65dd263acc 100644 --- a/forge-gui/res/editions/Duel Decks Phyrexia vs. the Coalition.txt +++ b/forge-gui/res/editions/Duel Decks Phyrexia vs. the Coalition.txt @@ -81,5 +81,5 @@ ScryfallCode=DDE [tokens] hornet -b_x_x_minion +b_x_x_phyrexian_minion g_1_1_saproling diff --git a/forge-gui/res/editions/From the Vault Lore.txt b/forge-gui/res/editions/From the Vault Lore.txt index 62c6a6db3c5..e48d97ebc44 100644 --- a/forge-gui/res/editions/From the Vault Lore.txt +++ b/forge-gui/res/editions/From the Vault Lore.txt @@ -25,4 +25,4 @@ ScryfallCode=V16 [tokens] marit_lage -b_x_x_minion +b_x_x_phyrexian_minion diff --git a/forge-gui/res/editions/Legendary Cube.txt b/forge-gui/res/editions/Legendary Cube.txt index 09b621f8008..bea114d7977 100644 --- a/forge-gui/res/editions/Legendary Cube.txt +++ b/forge-gui/res/editions/Legendary Cube.txt @@ -163,7 +163,7 @@ c_0_1_eldrazi_spawn_sac w_2_2_knight_vigilance w_1_1_kor_soldier b_5_5_demon_flying -b_0_0_germ +b_0_0_phyrexian_germ b_2_2_zombie r_5_5_dragon_flying g_4_4_beast diff --git a/forge-gui/res/editions/Magic 2020.txt b/forge-gui/res/editions/Magic 2020.txt index 94881e0a74f..3353e49cc4c 100644 --- a/forge-gui/res/editions/Magic 2020.txt +++ b/forge-gui/res/editions/Magic 2020.txt @@ -361,6 +361,7 @@ b_5_5_demon_flying r_1_1_elemental u_4_4_elemental_bird_flying c_3_3_a_golem +c_3_3_a_phyrexian_golem w_1_1_soldier w_1_1_spirit_flying c_a_treasure_sac diff --git a/forge-gui/res/editions/Masterpiece Series - Kaladesh.txt b/forge-gui/res/editions/Masterpiece Series - Kaladesh.txt index addd05dfe12..d3098af8eed 100644 --- a/forge-gui/res/editions/Masterpiece Series - Kaladesh.txt +++ b/forge-gui/res/editions/Masterpiece Series - Kaladesh.txt @@ -66,5 +66,5 @@ ScryfallCode=mps [tokens] g_2_2_wolf c_1_1_a_thopter_flying -c_3_3_a_wurm_deathtouch -c_3_3_a_wurm_lifelink +c_3_3_a_phyrexian_wurm_deathtouch +c_3_3_a_phyrexian_wurm_lifelink diff --git a/forge-gui/res/editions/Mirrodin Besieged.txt b/forge-gui/res/editions/Mirrodin Besieged.txt index b06128b727b..d72227f393a 100644 --- a/forge-gui/res/editions/Mirrodin Besieged.txt +++ b/forge-gui/res/editions/Mirrodin Besieged.txt @@ -170,9 +170,10 @@ ScryfallCode=MBS [tokens] w_2_2_cat w_1_1_soldier -b_0_0_germ -b_2_2_zombie +b_0_0_phyrexian_germ +b_2_2_phyrexian_zombie c_9_9_a_golem -c_x_x_a_horror +c_x_x_a_phyrexian_horror c_1_1_a_myr +c_1_1_a_phyrexian_myr c_1_1_a_thopter_flying diff --git a/forge-gui/res/editions/Modern Event Deck.txt b/forge-gui/res/editions/Modern Event Deck.txt index 78a4e55254f..9168d68ebf1 100644 --- a/forge-gui/res/editions/Modern Event Deck.txt +++ b/forge-gui/res/editions/Modern Event Deck.txt @@ -38,4 +38,4 @@ ScryfallCode=MD1 [tokens] w_1_1_soldier w_1_1_spirit_flying -c_1_1_a_myr +c_1_1_a_phyrexian_myr diff --git a/forge-gui/res/editions/Modern Horizons 2.txt b/forge-gui/res/editions/Modern Horizons 2.txt index 3301f26d0fa..624cc92c153 100644 --- a/forge-gui/res/editions/Modern Horizons 2.txt +++ b/forge-gui/res/editions/Modern Horizons 2.txt @@ -591,7 +591,7 @@ ScryfallCode=MH2 6 Zuran Orb|MH2|1 [tokens] -b_0_0_germ +b_0_0_phyrexian_germ b_0_0_zombie_army b_2_2_zombie bg_1_1_insect diff --git a/forge-gui/res/editions/Modern Horizons.txt b/forge-gui/res/editions/Modern Horizons.txt index c9bb9ce1030..77147bb4ca0 100644 --- a/forge-gui/res/editions/Modern Horizons.txt +++ b/forge-gui/res/editions/Modern Horizons.txt @@ -273,7 +273,7 @@ b_2_2_zombie c_0_0_a_construct_total_artifacts c_1_1_a_myr c_2_2_shapeshifter_changeling -c_3_3_a_golem +c_3_3_a_phyrexian_golem g_1_1_squirrel g_1_2_spider_reach g_2_2_bear diff --git a/forge-gui/res/editions/Modern Masters 2015.txt b/forge-gui/res/editions/Modern Masters 2015.txt index 568f3172b4c..d71b4201e85 100644 --- a/forge-gui/res/editions/Modern Masters 2015.txt +++ b/forge-gui/res/editions/Modern Masters 2015.txt @@ -269,7 +269,7 @@ c_0_1_eldrazi_spawn_sac w_1_1_soldier w_1_1_spirit_flying b_1_1_faerie_rogue_flying -b_0_0_germ +b_0_0_phyrexian_germ b_1_1_thrull g_3_3_elephant g_1_1_insect diff --git a/forge-gui/res/editions/Modern Masters 2017.txt b/forge-gui/res/editions/Modern Masters 2017.txt index 22673d5016a..3b9da04d5ca 100644 --- a/forge-gui/res/editions/Modern Masters 2017.txt +++ b/forge-gui/res/editions/Modern Masters 2017.txt @@ -283,4 +283,4 @@ gw_x_x_elemental_total_creatures rg_4_4_giant_warrior_haste rg_1_1_goblin_warrior rw_1_1_soldier_haste -c_3_3_a_golem +c_3_3_a_phyrexian_golem diff --git a/forge-gui/res/editions/New Phyrexia.txt b/forge-gui/res/editions/New Phyrexia.txt index c94cc2c90dd..e68699a20e0 100644 --- a/forge-gui/res/editions/New Phyrexia.txt +++ b/forge-gui/res/editions/New Phyrexia.txt @@ -188,9 +188,9 @@ ScryfallCode=NPH 51 R Xenograft [tokens] -b_0_0_germ -r_1_1_goblin_haste +b_0_0_phyrexian_germ +r_1_1_phyrexian_goblin_haste g_3_3_beast -g_1_1_insect_infect -c_3_3_a_golem -c_1_1_a_myr +g_1_1_phyrexian_insect_infect +c_3_3_a_phyrexian_golem +c_1_1_a_phyrexian_myr diff --git a/forge-gui/res/editions/Planechase 2012.txt b/forge-gui/res/editions/Planechase 2012.txt index 6ab694ceea8..1caddc8afa8 100644 --- a/forge-gui/res/editions/Planechase 2012.txt +++ b/forge-gui/res/editions/Planechase 2012.txt @@ -210,7 +210,7 @@ R Stairs to Infinity c_0_1_eldrazi_spawn_sac c_7_7_eldrazi_annihilator w_4_4_angel_flying -b_0_0_germ +b_0_0_phyrexian_germ b_2_4_spider_reach b_2_2_zombie r_1_1_goblin diff --git a/forge-gui/res/editions/Planechase Anthology.txt b/forge-gui/res/editions/Planechase Anthology.txt index e2ce92e0727..94cd453cc79 100644 --- a/forge-gui/res/editions/Planechase Anthology.txt +++ b/forge-gui/res/editions/Planechase Anthology.txt @@ -258,7 +258,7 @@ c_0_1_eldrazi_spawn_sac c_0_1_eldrazi_spawn_sac w_4_4_angel_flying w_0_1_goat -b_0_0_germ +b_0_0_phyrexian_germ b_2_4_spider_reach b_2_2_zombie r_5_5_dragon_flying diff --git a/forge-gui/res/editions/Scars of Mirrodin.txt b/forge-gui/res/editions/Scars of Mirrodin.txt index d928a5945db..ec03565cc46 100644 --- a/forge-gui/res/editions/Scars of Mirrodin.txt +++ b/forge-gui/res/editions/Scars of Mirrodin.txt @@ -265,9 +265,9 @@ ScryfallCode=SOM w_2_2_cat w_1_1_soldier r_1_1_goblin -g_1_1_insect_infect +g_1_1_phyrexian_insect_infect g_2_2_wolf c_3_3_a_golem c_1_1_a_myr -c_3_3_a_wurm_deathtouch -c_3_3_a_wurm_lifelink +c_3_3_a_phyrexian_wurm_deathtouch +c_3_3_a_phyrexian_wurm_lifelink diff --git a/forge-gui/res/editions/Secret Lair Drop Series.txt b/forge-gui/res/editions/Secret Lair Drop Series.txt index cf9d95b662d..f672a1f7a05 100644 --- a/forge-gui/res/editions/Secret Lair Drop Series.txt +++ b/forge-gui/res/editions/Secret Lair Drop Series.txt @@ -153,11 +153,22 @@ ScryfallCode=SLD 165 M Consecrated Sphinx 166 R Collected Company 167 R Amulet of Vigor +173 M Balance +174 R Brainstorm +175 R Counterspell +176 R Birds of Paradise +177 R Howling Mine +178 R Wasteland 185 R Wrath of God 186 R Preordain 187 R Decree of Pain 188 R Gamble 189 R Nature's Lore +190 R Soul-Scar Mage +191 R Dryad of the Ilysian Grove +192 R Sakura-Tribe Elder +193 R Spell Queller +194 R Metallic Mimic 195 R Chatter of the Squirrel 196 R Krosan Beast 197 R Squirrel Mob @@ -168,6 +179,11 @@ ScryfallCode=SLD 203 R Commander's Sphere 204 R Darksteel Ingot 205 R Gilded Lotus +209 M Elesh Norn, Grand Cenobite +210 M Jin-Gitaxias, Core Augur +211 M Sheoldred, Whispering One +212 M Urabrask the Hidden +213 M Vorinclex, Voice of Hunger 214 M Heliod, Sun-Crowned 215 R Goblin Rabblemaster 216 R Monastery Swiftspear @@ -202,6 +218,30 @@ ScryfallCode=SLD 271 R Fire Covenant 272 R Fractured Identity 273 R Fracturing Gust +282 R Mesa Enchantress +283 R Archaeomancer +284 R Bloom Tender +285 R Meteor Golem +286 R Azorius Signet +287 R Dimir Signet +288 R Gruul Signet +289 R Rakdos Signet +290 R Selesnya Signet +291 R Boros Signet +292 R Golgari Signet +293 R Izzet Signet +294 R Orzhov Signet +295 R Simic Signet +296 R Mother of Runes +297 R Mother of Runes +298 R Mother of Runes +299 R Mother of Runes +310 R Unbreakable Formation +311 R Whir of Invention +312 R Hero's Downfall +313 R Impact Tremors +314 R Primal Vigor +315 R Commander's Sphere 501 R Karn, the Great Creator 502 R Ugin, the Ineffable 503 M Gideon Blackblade diff --git a/forge-gui/res/editions/Treasure Chests.txt b/forge-gui/res/editions/Treasure Chests.txt index 6a001681187..03e3e39f072 100644 --- a/forge-gui/res/editions/Treasure Chests.txt +++ b/forge-gui/res/editions/Treasure Chests.txt @@ -87,7 +87,7 @@ w_1_1_soldier w_1_1_spirit_flying u_1_1_a_thopter_flying b_1_1_assassin_deathtouch_haste -b_0_0_germ +b_0_0_phyrexian_germ r_5_5_dragon_flying r_1_1_goblin_all_attack r_8_8_lizard diff --git a/forge-gui/res/editions/Urza's Saga.txt b/forge-gui/res/editions/Urza's Saga.txt index 83b6ff234f5..a601e2d9864 100644 --- a/forge-gui/res/editions/Urza's Saga.txt +++ b/forge-gui/res/editions/Urza's Saga.txt @@ -365,7 +365,7 @@ ScryfallCode=USG [tokens] c_1_1_a_gnome w_2_2_knight -b_x_x_minion +b_x_x_phyrexian_minion r_1_1_goblin g_1_1_saproling g_3_3_beast diff --git a/forge-gui/res/editions/Zendikar Rising Commander.txt b/forge-gui/res/editions/Zendikar Rising Commander.txt index 3d52fc4a92f..afcc9a60fb0 100644 --- a/forge-gui/res/editions/Zendikar Rising Commander.txt +++ b/forge-gui/res/editions/Zendikar Rising Commander.txt @@ -155,7 +155,7 @@ w_1_1_kor_ally g_1_1_saproling g_2_2_elemental g_4_4_beast -b_0_0_germ +b_0_0_phyrexian_germ b_1_1_faerie_rogue_flying b_1_1_goblin_rogue b_1_1_rat diff --git a/forge-gui/res/formats/Sanctioned/Modern.txt b/forge-gui/res/formats/Sanctioned/Modern.txt index 61206e654c2..43a7dc47987 100644 --- a/forge-gui/res/formats/Sanctioned/Modern.txt +++ b/forge-gui/res/formats/Sanctioned/Modern.txt @@ -3,5 +3,5 @@ Name:Modern Order:103 Subtype:Modern Type:Sanctioned -Sets:8ED, MRD, DST, 5DN, CHK, BOK, SOK, 9ED, RAV, GPT, DIS, CSP, TSP, TSB, PLC, FUT, 10E, LRW, EVE, SHM, MOR, ALA, CFX, ARB, M10, ZEN, WWK, ROE, M11, SOM, MBS, NPH, M12, ISD, DKA, AVR, M13, RTR, GTC, DGM, M14, THS, BNG, JOU, M15, KTK, FRF, DTK, MM2, ORI, BFZ, OGW, SOI, EMN, KLD, AER, AKH, W17, HOU, XLN, RIX, DOM, M19, G18, GRN, RNA, WAR, MH1, M20, ELD, THB, IKO, M21, ZNR, KHM, STX +Sets:8ED, MRD, DST, 5DN, CHK, BOK, SOK, 9ED, RAV, GPT, DIS, CSP, TSP, TSB, PLC, FUT, 10E, LRW, EVE, SHM, MOR, ALA, CFX, ARB, M10, ZEN, WWK, ROE, M11, SOM, MBS, NPH, M12, ISD, DKA, AVR, M13, RTR, GTC, DGM, M14, THS, BNG, JOU, M15, KTK, FRF, DTK, MM2, ORI, BFZ, OGW, SOI, EMN, KLD, AER, AKH, W17, HOU, XLN, RIX, DOM, M19, G18, GRN, RNA, WAR, MH1, M20, ELD, THB, IKO, M21, ZNR, KHM, STX, MH2 Banned:Ancient Den; Arcum's Astrolabe; Birthing Pod; Blazing Shoal; Bridge from Below; Chrome Mox; Cloudpost; Dark Depths; Deathrite Shaman; Dig Through Time; Dread Return; Eye of Ugin; Faithless Looting; Field of the Dead; Gitaxian Probe; Glimpse of Nature; Golgari Grave-Troll; Great Furnace; Green Sun's Zenith; Hogaak, Arisen Necropolis; Hypergenesis; Krark-Clan Ironworks; Mental Misstep; Mox Opal; Mycosynth Lattice; Mystic Sanctuary; Oko, Thief of Crowns; Once Upon A Time; Ponder; Preordain; Punishing Fire; Rite of Flame; Seat of the Synod; Second Sunrise; Seething Song; Sensei's Divining Top; Simian Spirit Guide; Skullclamp; Splinter Twin; Summer Bloom; Tibalt's Trickery; Treasure Cruise; Tree of Tales; Umezawa's Jitte; Uro, Titan of Nature's Wrath; Vault of Whispers diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index 663aee0a75b..c877f3190bf 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -1216,6 +1216,8 @@ lblTooFewCardsMainDeck=Zu wenig Karten in deinem Deck (mindestens {0}). Bitte pa lblTooManyCardsSideboard=Zu viele Karten in deinem Deck (maximal {0}). Bitte passe dein Deck an. lblAssignCombatDamageWerentBlocked=Möchtest du den Kampfschaden deklarieren, als wäre nicht geblockt worden? lblAssignCombatDamageAsChoose=Möchtest du {0}''s Kampfschaden nach deiner Wahl verteilen? +lblAssignCombatDamageToCreature=Möchtest du {0}''s Kampfschaden einer Kreatur zuweisen, welche der verteidigende Spieler kontrolliert? +lblChooseCreature=Wähle eine Kreatur lblChosenCards=Wähle Karten lblAttacker=Angreifer lblTriggeredby=Ausgelöst durch diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index b7c47d29b62..da97ecec73a 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -1216,6 +1216,8 @@ lblTooFewCardsMainDeck=Too few cards in your main deck (minimum {0}), please mak lblTooManyCardsSideboard=Too many cards in your sideboard (maximum {0}), please make modifications to your deck again. lblAssignCombatDamageWerentBlocked=Do you want to assign its combat damage as though it weren''t blocked? lblAssignCombatDamageAsChoose=Do you want to divide {0}''s combat damage as you choose? +lblAssignCombatDamageToCreature=Do you want to assign {0}''s combat damage to a creature defending player controls? +lblChooseCreature=Choose a creature lblChosenCards=Chosen Cards lblAttacker=Attacker lblTriggeredby=Triggered by diff --git a/forge-gui/res/languages/es-ES.properties b/forge-gui/res/languages/es-ES.properties index 72096e050c3..f9c855a66bb 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -1216,6 +1216,8 @@ lblTooFewCardsMainDeck=Muy pocas cartas en tu mazo principal (mínimo {0}), por lblTooManyCardsSideboard=Demasiadas cartas en tu banquillo (máximo {0}), por favor realiza modificaciones a tu mazo de nuevo. lblAssignCombatDamageWerentBlocked=¿Quieres asignar su daño de combate como si no estuviera bloqueado? lblAssignCombatDamageAsChoose=¿Quieres dividir el daño de combate del {0} como elijas? +lblAssignCombatDamageToCreature=Do you want to assign {0}''s combat damage to a creature defending player controls? +lblChooseCreature=Choose a creature lblChosenCards=Cartas elegidas lblAttacker=Atacante lblTriggeredby=Activado por diff --git a/forge-gui/res/languages/it-IT.properties b/forge-gui/res/languages/it-IT.properties index 514eb12f02f..73977e577d9 100644 --- a/forge-gui/res/languages/it-IT.properties +++ b/forge-gui/res/languages/it-IT.properties @@ -1216,6 +1216,8 @@ lblTooFewCardsMainDeck=Troppe poche carte nel tuo mazzo (minimo %s), per favore lblTooManyCardsSideboard=Troppe carte nella sideboard (massimo %s), per favore modifica il tuo mazzo. lblAssignCombatDamageWerentBlocked=Vuoi assegnare il suo danno da combattimento come se non fosse stato bloccato? lblAssignCombatDamageAsChoose=Vuoi suddividere a tua scelta il danno da combattimento di {0}? +lblAssignCombatDamageToCreature=Do you want to assign {0}''s combat damage to a creature defending player controls? +lblChooseCreature=Choose a creature lblChosenCards=Carte scelte lblAttacker=Attaccante lblTriggeredby=Innescato da diff --git a/forge-gui/res/languages/ja-JP.properties b/forge-gui/res/languages/ja-JP.properties index 9786ce30fea..4105e791924 100644 --- a/forge-gui/res/languages/ja-JP.properties +++ b/forge-gui/res/languages/ja-JP.properties @@ -1216,7 +1216,9 @@ lblDraw=後攻 lblTooFewCardsMainDeck=メインデッキのカードが少なすぎます(最小 {0})。もう一度デッキを編集してください。 lblTooManyCardsSideboard=サイドボードのカードが多すぎます(最大 {0})。もう一度デッキを編集してください。 lblAssignCombatDamageWerentBlocked=ブロックされていないかのように戦闘ダメージを割り当てますか? -lblAssignCombatDamageAsChoose={0}の戦闘ダメージを自分で割り当てますか? +lblAssignCombatDamageAsChoose={0}の戦闘ダメージを望むように割り振りますか? +lblAssignCombatDamageToCreature={0}の戦闘ダメージを防御プレイヤーのクリーチャー1体に割り振りますか? +lblChooseCreature=クリーチャーを選ぶ lblChosenCards=選んだカード lblAttacker=アタッカー lblTriggeredby=誘発した diff --git a/forge-gui/res/languages/zh-CN.properties b/forge-gui/res/languages/zh-CN.properties index 5a1fcd642ef..83f6de3ac39 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -363,13 +363,13 @@ lblLethal=致死 lblAvailableDamagePoints=可用的伤害值 #VAssignGenericAmount.java # The {0} below should be amount label (like "shield" or "damage"), and {1} will be the name of the effect source -lbLAssignAmountForEffect=Assign {0} by {1} -lblLClickAmountMessage=Left click: Assign 1 {0}. (Left Click + Control): Assign maximum {0} points -lblRClickAmountMessage=Right click: Unassign 1 {0}. (Right Click + Control): Unassign all {0} points. -lblTotalAmountText=Available {0} points: Unknown -lblAvailableAmount=Available {0} points -lblMax=Max -lblShield=shield +lbLAssignAmountForEffect=为{1}分配{0} +lblLClickAmountMessage=左击:分配1点{0}。(左击 + 控制键):分配最大的{0}。 +lblRClickAmountMessage=右击:撤销对{0}的1点分配。(右击 + 控制键): 取消对{0}的所有分配。 +lblTotalAmountText=可用的{0}的点数:未知 +lblAvailableAmount=可用的{0}的点数 +lblMax=最大 +lblShield=护盾 #KeyboardShortcuts.java lblSHORTCUT_SHOWSTACK=匹配:显示堆叠面板 lblSHORTCUT_SHOWCOMBAT=匹配:显示战斗面板 @@ -1217,6 +1217,8 @@ lblTooFewCardsMainDeck=主牌中卡牌数过少(最少为{0}),请重新修 lblTooManyCardsSideboard=备牌中卡牌数过多(最多为{0}),请重新修改套牌。 lblAssignCombatDamageWerentBlocked=是否要像没有被阻挡一样分配战斗伤害? lblAssignCombatDamageAsChoose=你想要按你所选的分配方式对{0}造成战斗伤害吗? +lblAssignCombatDamageToCreature=你想要将{0}造成的战斗伤害分配给防御牌手所操控的生物吗? +lblChooseCreature=选择一个生物 lblChosenCards=选择牌 lblAttacker=进攻者 lblTriggeredby=触发者 @@ -1990,7 +1992,7 @@ lblRepeatAddCard=重复上一张添加的牌 lblRemoveFromGame=从游戏中删除牌 lblRiggedRoll=触发时空骰 lblWalkTo=时空换入 -lblAskAI=Ask AI for suggestion +lblAskAI=获取AI的建议 #PhaseType.java lblUntapStep=重置步骤 lblUpkeepStep=维持步骤 diff --git a/forge-gui/res/lists/net-decks-commander.txt b/forge-gui/res/lists/net-decks-commander.txt index 7133d8ca8b3..9e6c934345b 100644 --- a/forge-gui/res/lists/net-decks-commander.txt +++ b/forge-gui/res/lists/net-decks-commander.txt @@ -5,6 +5,7 @@ Command Tower | https://downloads.cardforge.org/decks/commandtower.zip Commander Clash | https://downloads.cardforge.org/decks/commanderclash.zip Commander On a Budget | https://downloads.cardforge.org/decks/commanderonabudget.zip Commander VS | https://downloads.cardforge.org/decks/commandervs.zip +Community Cup | https://downloads.cardforge.org/decks/communitycup-commander.zip Current Commander 1v1 Metagame | https://downloads.cardforge.org/decks/currentcommander1v1metagame.zip Current Commander Metagame | https://downloads.cardforge.org/decks/currentcommandermetagame.zip Daily Deck List | https://downloads.cardforge.org/decks/dailydecks-commander.zip diff --git a/forge-gui/res/lists/net-decks.txt b/forge-gui/res/lists/net-decks.txt index 23db7f9972c..67605a5c537 100644 --- a/forge-gui/res/lists/net-decks.txt +++ b/forge-gui/res/lists/net-decks.txt @@ -5,6 +5,7 @@ Budget Magic | https://downloads.cardforge.org/decks/budgetmagic.zip Budget Modern Metagame | https://downloads.cardforge.org/decks/budgetmodernmetagame.zip Building on a Budget | https://downloads.cardforge.org/decks/buildingonabudget.zip Card Preview | https://downloads.cardforge.org/decks/cardpreview.zip +Community Cup | https://downloads.cardforge.org/decks/communitycup.zip Current Historic Metagame | https://downloads.cardforge.org/decks/currenthistoricmetagame.zip Current Legacy Metagame | https://downloads.cardforge.org/decks/currentlegacymetagame.zip Current Modern Metagame | https://downloads.cardforge.org/decks/currentmodernmetagame.zip diff --git a/forge-gui/res/quest/world/worlds.txt b/forge-gui/res/quest/world/worlds.txt index fcc95f8b43f..2b2e2544a8e 100644 --- a/forge-gui/res/quest/world/worlds.txt +++ b/forge-gui/res/quest/world/worlds.txt @@ -4,31 +4,31 @@ Name:Random Pioneer Name:Random Modern Name:Random Commander Name:Amonkhet|Dir:Amonkhet|Sets:AKH, HOU, AKR -Name:Jamuraa|Dir:jamuraa|Sets:5ED, ARN, MIR, VIS, WTH|Banned:Chaos Orb; Falling Star +Name:Jamuraa|Dir:jamuraa|Sets:5ED, ARN, MIR, VIS, WTH Name:Kamigawa|Dir:2004 Kamigawa|Sets:CHK, BOK, SOK -Name:Lorwyn|Dir:lorwyn|Sets:SHM, EVE, LRW, MOR, 10E|Banned:Chaos Orb; Falling Star -Name:Mirrodin|Dir:mirrodin|Sets:MRD, DST, 5DN, SOM, MBS, NPH|Banned:Chaos Orb; Falling Star -Name:Ravnica|Dir:ravnica|Sets:RAV, GPT, DIS, RTR, GTC, DGM, GRN, GK1, RNA, GK2, WAR|Banned:Chaos Orb; Falling Star +Name:Lorwyn|Dir:lorwyn|Sets:SHM, EVE, LRW, MOR, 10E +Name:Mirrodin|Dir:mirrodin|Sets:MRD, DST, 5DN, SOM, MBS, NPH +Name:Ravnica|Dir:ravnica|Sets:RAV, GPT, DIS, RTR, GTC, DGM Name:Shandalar|Dir:shandalar|Sets:2ED, ARN, ATQ, 3ED, LEG, DRK, 4ED|Banned:Chaos Orb; Falling Star -Name:Zendikar|Dir:zendikar|Sets:ZEN, WWK, ROE, BFZ, OGW, ZNR|Banned:Chaos Orb; Falling Star +Name:Zendikar|Dir:zendikar|Sets:ZEN, WWK, ROE Name:The Domains: The Golden Age of Magic|Dir:1993-10 Limited Edition Beta|Sets:LEA, LEB|Banned:Chaos Orb Name:Rabiah|Dir:1993-12 Arabian Nights|Sets:ARN|Banned:City in a Bottle Name:Terisiare: The Brothers' War|Dir:1994-03 Antiquities|Sets:ATQ|Banned:Golgothian Sylex -Name:Dominaria|Dir:1994-06 Legends|Sets:LEG, DOM|Banned:Arena of the Ancients; Falling Star; Karakas +Name:Dominaria: Legends|Dir:1994-06 Legends|Sets:LEG|Banned:Arena of the Ancients; Falling Star; Karakas Name:Terisiare: The Dark|Dir:1994-08 The Dark|Sets:DRK|Banned:Maze of Ith Name:Sarpadia|Dir:1994-11 Fallen Empires|Sets:FEM Name:Homelands|Dir:1995-10 Homelands|Sets:HML|Banned:Apocalypse Chime -Name:Terisiare: Ice Age|Dir:1996-05 Ice Age|Sets:ICE, ALL, CSP +Name:Terisiare: Ice Age|Dir:1996-05 Ice Age|Sets:ICE, ALL Name:Jamuraa: The Mirage Wars|Dir:1997-01 Mirage|Sets:MIR, VIS Name:Portal|Dir:1997-05 Portal|Sets:POR Name:Caliman|Dir:1998-06 Portal Second Age|Sets:PO2 Name:The Three Kingdoms|Dir:1999-05 Portal Three Kingdoms|Sets:PTK -Name:Theros|Dir:2014-05 Theros|Sets:THS, BNG, JOU, THB +Name:Theros: The Hero's Path|Dir:2014-05 Theros|Sets:THS, BNG, JOU Name:Urza's Block|Dir:Urza|Sets:USG, ULG, UDS|Banned:Gaea's Cradle;Memory Jar;Serra's Sanctum;Time Spiral;Tolarian Academy;Voltaic Key;Windfall Name:The Gates of Magic|Dir:Starter|Sets:POR, PO2, S99, S00, PTK Name:Invasion|Dir:Invasion|Sets:INV, PLS, APC Name:Tempest|Dir:Tempest|Sets:TMP, STH, EXO -Name:Random Core Set|Sets:LEA, LEB, 2ED, 3ED, 4ED, 5ED, 6ED, 7ED, 8ED, 9ED, 10E, M10, M11, M12, M13, M14, M15, ORI, M19, M20, M21 +Name:Random Core Set|Sets:LEA, LEB, 2ED, 3ED, 4ED, 5ED, 6ED, 7ED, 8ED, 9ED, 10E, M10, M11, M12, M13, M14, M15, ORI, M19, M20, M21 Name:Ixalan|Sets:XLN, RIX Name:Innistrad|Sets:ISD, DKA, AVR, SOI, EMN Name:Kaladesh|Sets:AER, KLD, MPS, KLR diff --git a/forge-gui/res/tokenscripts/b_0_0_germ.txt b/forge-gui/res/tokenscripts/b_0_0_germ.txt deleted file mode 100644 index 50da21e9059..00000000000 --- a/forge-gui/res/tokenscripts/b_0_0_germ.txt +++ /dev/null @@ -1,6 +0,0 @@ -Name:Germ -ManaCost:no cost -Types:Creature Germ -Colors:black -PT:0/0 -Oracle: diff --git a/forge-gui/res/tokenscripts/b_0_0_phyrexian_germ.txt b/forge-gui/res/tokenscripts/b_0_0_phyrexian_germ.txt new file mode 100644 index 00000000000..5258fdfc6cb --- /dev/null +++ b/forge-gui/res/tokenscripts/b_0_0_phyrexian_germ.txt @@ -0,0 +1,6 @@ +Name:Phyrexian Germ +ManaCost:no cost +Types:Creature Phyrexian Germ +Colors:black +PT:0/0 +Oracle: diff --git a/forge-gui/res/tokenscripts/b_2_2_phyrexian_zombie.txt b/forge-gui/res/tokenscripts/b_2_2_phyrexian_zombie.txt new file mode 100644 index 00000000000..1e370961316 --- /dev/null +++ b/forge-gui/res/tokenscripts/b_2_2_phyrexian_zombie.txt @@ -0,0 +1,6 @@ +Name:Phyrexian Zombie +ManaCost:no cost +Types:Creature Phyrexian Zombie +Colors:black +PT:2/2 +Oracle: \ No newline at end of file diff --git a/forge-gui/res/tokenscripts/b_x_x_minion.txt b/forge-gui/res/tokenscripts/b_x_x_minion.txt deleted file mode 100644 index a13435b4efc..00000000000 --- a/forge-gui/res/tokenscripts/b_x_x_minion.txt +++ /dev/null @@ -1,6 +0,0 @@ -Name:Minion -ManaCost:no cost -Types:Creature Minion -PT:*/* -Colors:black -Oracle: diff --git a/forge-gui/res/tokenscripts/b_x_x_phyrexian_minion.txt b/forge-gui/res/tokenscripts/b_x_x_phyrexian_minion.txt new file mode 100644 index 00000000000..a3586a686d8 --- /dev/null +++ b/forge-gui/res/tokenscripts/b_x_x_phyrexian_minion.txt @@ -0,0 +1,6 @@ +Name:Phyrexian Minion +ManaCost:no cost +Types:Creature Phyrexian Minion +PT:*/* +Colors:black +Oracle: diff --git a/forge-gui/res/tokenscripts/c_1_1_a_phyrexian_myr.txt b/forge-gui/res/tokenscripts/c_1_1_a_phyrexian_myr.txt new file mode 100644 index 00000000000..67593e2184c --- /dev/null +++ b/forge-gui/res/tokenscripts/c_1_1_a_phyrexian_myr.txt @@ -0,0 +1,5 @@ +Name:Phyrexian Myr +ManaCost:no cost +PT:1/1 +Types:Artifact Creature Phyrexian Myr +Oracle: \ No newline at end of file diff --git a/forge-gui/res/tokenscripts/c_3_3_a_phyrexian_golem.txt b/forge-gui/res/tokenscripts/c_3_3_a_phyrexian_golem.txt new file mode 100644 index 00000000000..56d4d7d3284 --- /dev/null +++ b/forge-gui/res/tokenscripts/c_3_3_a_phyrexian_golem.txt @@ -0,0 +1,5 @@ +Name:Phyrexian Golem +ManaCost:no cost +PT:3/3 +Types:Artifact Creature Phyrexian Golem +Oracle: \ No newline at end of file diff --git a/forge-gui/res/tokenscripts/c_3_3_a_phyrexian_wurm_deathtouch.txt b/forge-gui/res/tokenscripts/c_3_3_a_phyrexian_wurm_deathtouch.txt new file mode 100644 index 00000000000..02b8a2312b9 --- /dev/null +++ b/forge-gui/res/tokenscripts/c_3_3_a_phyrexian_wurm_deathtouch.txt @@ -0,0 +1,6 @@ +Name:Phyrexian Wurm +ManaCost:no cost +Types:Artifact Creature Phyrexian Wurm +PT:3/3 +K:Deathtouch +Oracle:Deathtouch \ No newline at end of file diff --git a/forge-gui/res/tokenscripts/c_3_3_a_phyrexian_wurm_lifelink.txt b/forge-gui/res/tokenscripts/c_3_3_a_phyrexian_wurm_lifelink.txt new file mode 100644 index 00000000000..e342b4ab46d --- /dev/null +++ b/forge-gui/res/tokenscripts/c_3_3_a_phyrexian_wurm_lifelink.txt @@ -0,0 +1,6 @@ +Name:Phyrexian Wurm +ManaCost:no cost +Types:Artifact Creature Phyrexian Wurm +PT:3/3 +K:Lifelink +Oracle:Lifelink \ No newline at end of file diff --git a/forge-gui/res/tokenscripts/c_3_3_a_wurm_deathtouch.txt b/forge-gui/res/tokenscripts/c_3_3_a_wurm_deathtouch.txt deleted file mode 100644 index aae13dca8c7..00000000000 --- a/forge-gui/res/tokenscripts/c_3_3_a_wurm_deathtouch.txt +++ /dev/null @@ -1,6 +0,0 @@ -Name:Wurm -ManaCost:no cost -Types:Artifact Creature Wurm -PT:3/3 -K:Deathtouch -Oracle:Deathtouch \ No newline at end of file diff --git a/forge-gui/res/tokenscripts/c_3_3_a_wurm_lifelink.txt b/forge-gui/res/tokenscripts/c_3_3_a_wurm_lifelink.txt deleted file mode 100644 index 4beffff5f52..00000000000 --- a/forge-gui/res/tokenscripts/c_3_3_a_wurm_lifelink.txt +++ /dev/null @@ -1,6 +0,0 @@ -Name:Wurm -ManaCost:no cost -Types:Artifact Creature Wurm -PT:3/3 -K:Lifelink -Oracle:Lifelink \ No newline at end of file diff --git a/forge-gui/res/tokenscripts/c_x_x_a_phyrexian_horror.txt b/forge-gui/res/tokenscripts/c_x_x_a_phyrexian_horror.txt new file mode 100644 index 00000000000..05fe38ac950 --- /dev/null +++ b/forge-gui/res/tokenscripts/c_x_x_a_phyrexian_horror.txt @@ -0,0 +1,5 @@ +Name:Phyrexian Horror +ManaCost:no cost +Types:Artifact Creature Phyrexian Horror +PT:*/* +Oracle: diff --git a/forge-gui/res/tokenscripts/g_1_1_insect_infect.txt b/forge-gui/res/tokenscripts/g_1_1_phyrexian_insect_infect.txt similarity index 76% rename from forge-gui/res/tokenscripts/g_1_1_insect_infect.txt rename to forge-gui/res/tokenscripts/g_1_1_phyrexian_insect_infect.txt index 22f251424d2..79c5789030d 100644 --- a/forge-gui/res/tokenscripts/g_1_1_insect_infect.txt +++ b/forge-gui/res/tokenscripts/g_1_1_phyrexian_insect_infect.txt @@ -1,7 +1,7 @@ -Name:Insect +Name:Phyrexian Insect ManaCost:no cost PT:1/1 Colors:green -Types:Creature Insect +Types:Creature Phyrexian Insect K:Infect Oracle:Infect (This creature deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.) diff --git a/forge-gui/res/tokenscripts/g_4_4_phyrexian_beast.txt b/forge-gui/res/tokenscripts/g_4_4_phyrexian_beast.txt new file mode 100644 index 00000000000..34ac0ee0ca8 --- /dev/null +++ b/forge-gui/res/tokenscripts/g_4_4_phyrexian_beast.txt @@ -0,0 +1,6 @@ +Name:Phyrexian Beast +Colors:green +ManaCost:no cost +PT:4/4 +Types:Creature Phyrexian Beast +Oracle: diff --git a/forge-gui/res/tokenscripts/r_1_1_phyrexian_goblin_haste.txt b/forge-gui/res/tokenscripts/r_1_1_phyrexian_goblin_haste.txt new file mode 100644 index 00000000000..db3fe5ebcbf --- /dev/null +++ b/forge-gui/res/tokenscripts/r_1_1_phyrexian_goblin_haste.txt @@ -0,0 +1,7 @@ +Name:Phyrexian Goblin +ManaCost:no cost +Types:Creature Phyrexian Goblin +Colors:red +PT:1/1 +K:Haste +Oracle:Haste diff --git a/forge-gui/res/tokenscripts/u_2_1_a_myr.txt b/forge-gui/res/tokenscripts/u_2_1_a_myr.txt deleted file mode 100644 index 7c3a5fe394c..00000000000 --- a/forge-gui/res/tokenscripts/u_2_1_a_myr.txt +++ /dev/null @@ -1,6 +0,0 @@ -Name:Myr -ManaCost:no cost -Types:Artifact Creature Myr -Colors:blue -PT:2/1 -Oracle: diff --git a/forge-gui/res/tokenscripts/u_2_1_a_phyrexian_myr.txt b/forge-gui/res/tokenscripts/u_2_1_a_phyrexian_myr.txt new file mode 100644 index 00000000000..b8197fe2341 --- /dev/null +++ b/forge-gui/res/tokenscripts/u_2_1_a_phyrexian_myr.txt @@ -0,0 +1,6 @@ +Name:Phyrexian Myr +ManaCost:no cost +Types:Artifact Creature Phyrexian Myr +Colors:blue +PT:2/1 +Oracle: diff --git a/forge-gui/src/main/java/forge/gamemodes/match/input/InputPayMana.java b/forge-gui/src/main/java/forge/gamemodes/match/input/InputPayMana.java index a913181585c..68f3d28c69d 100644 --- a/forge-gui/src/main/java/forge/gamemodes/match/input/InputPayMana.java +++ b/forge-gui/src/main/java/forge/gamemodes/match/input/InputPayMana.java @@ -271,7 +271,7 @@ public abstract class InputPayMana extends InputSyncronizedBase { } // Store some information about color costs to help with any mana choices - if (colorNeeded == 0) { // only colorless left + if (colorNeeded == 0) { // only colorless left if (saPaidFor.getHostCard() != null && saPaidFor.getHostCard().hasSVar("ManaNeededToAvoidNegativeEffect")) { String[] negEffects = saPaidFor.getHostCard().getSVar("ManaNeededToAvoidNegativeEffect").split(","); for (String negColor : negEffects) { diff --git a/forge-gui/src/main/java/forge/gamemodes/match/input/InputPayManaOfCostPayment.java b/forge-gui/src/main/java/forge/gamemodes/match/input/InputPayManaOfCostPayment.java index dceeebe121c..7b84fe7df0b 100644 --- a/forge-gui/src/main/java/forge/gamemodes/match/input/InputPayManaOfCostPayment.java +++ b/forge-gui/src/main/java/forge/gamemodes/match/input/InputPayManaOfCostPayment.java @@ -72,7 +72,6 @@ public class InputPayManaOfCostPayment extends InputPayMana { msg.append(messagePrefix).append("\n"); } if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DETAILED_SPELLDESC_IN_PROMPT)) { - // msg.append(saPaidFor.getStackDescription().replace("(Targeting ERROR)", "")); if (saPaidFor.isSpell()) { msg.append(saPaidFor.getStackDescription().replace("(Targeting ERROR)", "")).append("\n\n"); } else { diff --git a/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java b/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java index 35c9d5c6d14..8ab0d742dae 100644 --- a/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java +++ b/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java @@ -8,7 +8,6 @@ import java.util.Map; import java.util.Map.Entry; import com.google.common.base.Predicate; -import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import forge.game.GameEntity; @@ -129,10 +128,10 @@ public final class InputSelectTargets extends InputSyncronizedBase { "(Targeting ERROR)", ""); showMessage(message, sa.getView()); - if (sa.isDividedAsYouChoose() && sa.getMinTargets() == 0 && sa.getTargets().size() == 0) { + if ((divisionValues != null && !divisionValues.isEmpty()) && sa.getMinTargets() == 0 && sa.getTargets().size() == 0) { // extra logic for Divided with min targets = 0, should only work if num targets are 0 too getController().getGui().updateButtons(getOwner(), true, true, false); - } else if (!sa.isMinTargetChosen() || sa.isDividedAsYouChoose()) { + } else if (!sa.isMinTargetChosen() || (divisionValues != null && !divisionValues.isEmpty())){ // If reached Minimum targets, enable OK button if (mandatory && tgt.hasCandidates(sa, true)) { // Player has to click on a target @@ -280,7 +279,7 @@ public final class InputSelectTargets extends InputSyncronizedBase { return false; } - if (sa.isDividedAsYouChoose()) { + if ((divisionValues != null && !divisionValues.isEmpty())) { Boolean val = onDividedAsYouChoose(card); if (val != null) { return val; @@ -322,7 +321,7 @@ public final class InputSelectTargets extends InputSyncronizedBase { return; } - if (sa.isDividedAsYouChoose()) { + if ((divisionValues != null && !divisionValues.isEmpty())) { Boolean val = onDividedAsYouChoose(player); if (val != null) { return; @@ -332,57 +331,25 @@ public final class InputSelectTargets extends InputSyncronizedBase { } protected Boolean onDividedAsYouChoose(GameObject go) { - if (divisionValues != null) { - if (divisionValues.isEmpty()) { - return false; - } - String apiBasedMessage = "Distribute how much to "; - if (sa.getApi() == ApiType.DealDamage) { - apiBasedMessage = "Select how much damage to deal to "; - } - else if (sa.getApi() == ApiType.PreventDamage) { - apiBasedMessage = "Select how much damage to prevent to "; - } - else if (sa.getApi() == ApiType.PutCounter) { - apiBasedMessage = "Select how many counters to distribute to "; - } - final StringBuilder sb = new StringBuilder(); - sb.append(apiBasedMessage); - sb.append(go.toString()); - final Integer chosen = getController().getGui().oneOrNone(sb.toString(), Lists.newArrayList(divisionValues)); - if (chosen == null) { - return true; //still return true since there was a valid choice - } - divisionValues.remove(chosen); - sa.addDividedAllocation(go, chosen); - } else { - final int stillToDivide = sa.getStillToDivide(); - int allocatedPortion = 0; - // allow allocation only if the max targets isn't reached and there are more candidates - if ((sa.getTargets().size() + 1 < sa.getMaxTargets()) && (tgt.getNumCandidates(sa, true) - 1 > 0) && stillToDivide > 1) { - final ImmutableList.Builder choices = ImmutableList.builder(); - for (int i = 1; i <= stillToDivide; i++) { - choices.add(Integer.valueOf(i)); - } - String apiBasedMessage = "Distribute how much to "; - if (sa.getApi() == ApiType.DealDamage) { - apiBasedMessage = "Select how much damage to deal to "; - } else if (sa.getApi() == ApiType.PreventDamage) { - apiBasedMessage = "Select how much damage to prevent to "; - } - final StringBuilder sb = new StringBuilder(); - sb.append(apiBasedMessage); - sb.append(go.toString()); - final Integer chosen = getController().getGui().oneOrNone(sb.toString(), choices.build()); - if (null == chosen) { - return true; - } - allocatedPortion = chosen; - } else { // otherwise assign the rest of the damage/protection - allocatedPortion = stillToDivide; - } - sa.addDividedAllocation(go, allocatedPortion); + String apiBasedMessage = "Distribute how much to "; + if (sa.getApi() == ApiType.DealDamage) { + apiBasedMessage = "Select how much damage to deal to "; } + else if (sa.getApi() == ApiType.PreventDamage) { + apiBasedMessage = "Select how much damage to prevent to "; + } + else if (sa.getApi() == ApiType.PutCounter) { + apiBasedMessage = "Select how many counters to distribute to "; + } + final StringBuilder sb = new StringBuilder(); + sb.append(apiBasedMessage); + sb.append(go.toString()); + final Integer chosen = getController().getGui().oneOrNone(sb.toString(), Lists.newArrayList(divisionValues)); + if (chosen == null) { + return true; //still return true since there was a valid choice + } + divisionValues.remove(chosen); + sa.addDividedAllocation(go, chosen); return null; } @@ -419,7 +386,8 @@ public final class InputSelectTargets extends InputSyncronizedBase { } private boolean hasAllTargets() { - return sa.isMaxTargetChosen() || (sa.isDividedAsYouChoose() && sa.getStillToDivide() == 0); + return sa.isMaxTargetChosen() || (divisionValues != null && sa.getStillToDivide() == 0) + || (sa.isDividedAsYouChoose() && sa.getTargets().size() == sa.getStillToDivide()); } @Override diff --git a/forge-gui/src/main/java/forge/gamemodes/net/server/NetGuiGame.java b/forge-gui/src/main/java/forge/gamemodes/net/server/NetGuiGame.java index 8fcd1ec696f..499b79083eb 100644 --- a/forge-gui/src/main/java/forge/gamemodes/net/server/NetGuiGame.java +++ b/forge-gui/src/main/java/forge/gamemodes/net/server/NetGuiGame.java @@ -207,7 +207,7 @@ public class NetGuiGame extends AbstractGuiGame { } @Override - public Map assignGenericAmount(final CardView effectSource, final Map targets, final int amount, final boolean atLeastOne, final String amountLabel) { + public Map assignGenericAmount(final CardView effectSource, final Map targets, final int amount, final boolean atLeastOne, final String amountLabel) { return sendAndWait(ProtocolMethod.divideShield, effectSource, targets, amount, atLeastOne, amountLabel); } diff --git a/forge-gui/src/main/java/forge/gui/interfaces/IGuiGame.java b/forge-gui/src/main/java/forge/gui/interfaces/IGuiGame.java index 18fdf3d07ac..0594d3ee8e3 100644 --- a/forge-gui/src/main/java/forge/gui/interfaces/IGuiGame.java +++ b/forge-gui/src/main/java/forge/gui/interfaces/IGuiGame.java @@ -69,7 +69,8 @@ public interface IGuiGame { void setPanelSelection(CardView hostCard); SpellAbilityView getAbilityToPlay(CardView hostCard, List abilities, ITriggerEvent triggerEvent); Map assignCombatDamage(CardView attacker, List blockers, int damage, GameEntityView defender, boolean overrideOrder); - Map assignGenericAmount(CardView effectSource, Map target, int amount, final boolean atLeastOne, final String amountLabel); + // The Object passed should be GameEntityView for most case. Can be Byte for "generate mana of any combination" effect + Map assignGenericAmount(CardView effectSource, Map target, int amount, final boolean atLeastOne, final String amountLabel); void message(String message); void message(String message, String title); diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index 9e37510f691..b4c8bb118f0 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -12,6 +12,8 @@ import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -394,11 +396,11 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont @Override public Map divideShield(Card effectSource, Map affected, int shieldAmount) { final CardView vSource = CardView.get(effectSource); - final Map vAffected = new HashMap<>(affected.size()); + final Map vAffected = new HashMap<>(affected.size()); for (Map.Entry e : affected.entrySet()) { vAffected.put(GameEntityView.get(e.getKey()), e.getValue()); } - final Map vResult = getGui().assignGenericAmount(vSource, vAffected, shieldAmount, false, + final Map vResult = getGui().assignGenericAmount(vSource, vAffected, shieldAmount, false, localizer.getMessage("lblShield")); Map result = new HashMap<>(vResult.size()); for (Map.Entry e : affected.entrySet()) { @@ -409,6 +411,28 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont return result; } + @Override + public Map specifyManaCombo(SpellAbility sa, ColorSet colorSet, int manaAmount, boolean different) { + final CardView vSource = CardView.get(sa.getHostCard()); + final Map vAffected = new LinkedHashMap<>(manaAmount); + Integer maxAmount = different ? 1 : manaAmount; + Iterator it = colorSet.iterator(); + while (it.hasNext()) { + vAffected.put(it.next(), maxAmount); + } + final Map vResult = getGui().assignGenericAmount(vSource, vAffected, manaAmount, false, + localizer.getMessage("lblMana").toLowerCase()); + Map result = new HashMap<>(vResult.size()); + it = colorSet.iterator(); + while (it.hasNext()) { + Byte color = it.next(); + if (vResult.containsKey(color)) { + result.put(color, vResult.get(color)); + } + } + return result; + } + @Override public Integer announceRequirements(final SpellAbility ability, final String announce) { int max = Integer.MAX_VALUE; @@ -1951,7 +1975,44 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont checkSA = checkSA.getSubAbility(); } - return select.chooseTargets(null, null, null, false, canFilterMustTarget); + boolean result = select.chooseTargets(null, null, null, false, canFilterMustTarget); + + // assign divided as you choose values + if (result && currentAbility.isDividedAsYouChoose() && currentAbility.getStillToDivide() > 0) { + int amount = currentAbility.getStillToDivide(); + final List targets = currentAbility.getTargets().getTargetEntities(); + if (targets.size() == 1) { + currentAbility.addDividedAllocation(targets.get(0), amount); + } else if (targets.size() == amount) { + for (GameEntity e : targets) { + currentAbility.addDividedAllocation(e, 1); + } + } else if (targets.size() > amount) { + return false; + } else { + String label = "lblDamage"; + if (currentAbility.getApi() == ApiType.PreventDamage) { + label = "lblShield"; + } else if (currentAbility.getApi() == ApiType.PutCounter) { + label = "lblCounters"; + } + label = localizer.getMessage(label).toLowerCase(); + final CardView vSource = CardView.get(currentAbility.getHostCard()); + final Map vTargets = new HashMap<>(targets.size()); + for (GameEntity e : targets) { + vTargets.put(GameEntityView.get(e), amount); + } + final Map vResult = getGui().assignGenericAmount(vSource, vTargets, amount, true, label); + for (GameEntity e : targets) { + currentAbility.addDividedAllocation(e, vResult.get(GameEntityView.get(e))); + } + if (currentAbility.getStillToDivide() > 0) { + return false; + } + } + } + + return result; } @Override diff --git a/forge-gui/tools/oracleScript.py b/forge-gui/tools/oracleScript.py index b6eb16e8115..c2ded00f811 100644 --- a/forge-gui/tools/oracleScript.py +++ b/forge-gui/tools/oracleScript.py @@ -14,7 +14,8 @@ import unidecode NAME_STR = 'Name:' ORACLE_STR = 'Oracle:' -ALTERATE_STR = 'AlternateMode:' +ALTERNATE_STR = 'AlternateMode:' +ALTERNATE_MARK = 'ALTERNATE' ALTERNATE_SEPARATER = ' // ' tools_folder = os.path.dirname(os.path.realpath(__file__)) @@ -64,13 +65,16 @@ def read_card_script(cardfile): oracle_texts = [] lines = [] line_num = 0 + alternate_line = 0 alternate_mode = '' for line in cardfile.readlines(): line = line.strip() if line.startswith(NAME_STR): names.append(line[len(NAME_STR):]) - elif line.startswith(ALTERATE_STR): - alternate_mode = line[len(ALTERATE_STR):] + elif line.startswith(ALTERNATE_STR): + alternate_mode = line[len(ALTERNATE_STR):] + elif line.startswith(ALTERNATE_MARK): + alternate_line = line_num elif line.startswith(ORACLE_STR): oracle_texts.append([line_num, line[len(ORACLE_STR):]]) lines.append('') @@ -79,7 +83,7 @@ def read_card_script(cardfile): lines.append(line + '\n') line_num += 1 cardfile.close() - return names, lines, oracle_texts, alternate_mode + return names, lines, oracle_texts, alternate_mode, alternate_line def write_card_script(cardfile, lines, oracle_texts): @@ -95,20 +99,33 @@ def write_card_script(cardfile, lines, oracle_texts): cardfile.close() -def update_oracle(name, lines, oracle_text, new_oracle, is_planeswalker): +def update_oracle(name, lines, oracle_text, new_oracle, type_line, alternate_line): + updated = False + # Update type line first + for i, line in enumerate(lines): + if i <= alternate_line: + continue + if line.startswith('Types:'): + if line[6:].rstrip() != type_line: + lines[i] = 'Types:' + type_line + '\n' + updated = True + break + + is_planeswalker = type_line.find('Planeswalker') != -1 if is_planeswalker: new_oracle = re.sub(r'([\+−]?[0-9X]+):', r'[\1]:', new_oracle) new_oracle = new_oracle.replace('\n', '\\n') if oracle_text[1] == new_oracle: - return False + return updated oracle_lines = oracle_text[1].split('\\n') new_lines = new_oracle.split('\\n') nickname = name.split(', ')[0] oracle_text[1] = new_oracle + updated = True if len(oracle_lines) != len(new_lines): - return True + return updated # Also replace descriptions for org_line, new_line in zip(oracle_lines, new_lines): @@ -134,13 +151,13 @@ def update_oracle(name, lines, oracle_text, new_oracle, is_planeswalker): if line.find(org_line) != -1: lines[i] = line.replace(org_line, new_line) - return True + return updated def update_card_script(dirname, filename, oracle_cards, logfile): file = open(os.path.join(dirname, filename), 'r', encoding='utf8') clean_name = filename.replace('.txt', '') - names, lines, oracle_texts, alternate_mode = read_card_script(file) + names, lines, oracle_texts, alternate_mode, alternate_line = read_card_script(file) formal_name = formalize_name(names) if clean_name != formal_name: logfile.write(f'Rename "{clean_name}" => "{formal_name}"\n') @@ -162,24 +179,29 @@ def update_card_script(dirname, filename, oracle_cards, logfile): card = oracle_cards[cardname] if len(names) == 1: - is_planeswalker = card['type_line'].find('Planeswalker') != -1 + type_line = card['type_line'].replace(' — ', ' ') is_vanguard = card['type_line'].find('Vanguard') != -1 new_oracle = card['oracle_text'] if is_vanguard: new_oracle = 'Hand {0}, life {1}\n'.format(card['hand_modifier'], card['life_modifier']) + new_oracle - oracle_updated = update_oracle(names[0], lines, oracle_texts[0], new_oracle, is_planeswalker) + oracle_updated = update_oracle(names[0], lines, oracle_texts[0], new_oracle, type_line, 0) elif len(names) == 2: if alternate_mode == 'Meld': + type_line = card['type_line'].replace(' — ', ' ') new_oracle = card['oracle_text'] - oracle_updated = update_oracle(names[0], lines, oracle_texts[0], new_oracle, False) + oracle_updated = update_oracle(names[0], lines, oracle_texts[0], new_oracle, type_line, 0) card = oracle_cards[names[1]] + type_line = card['type_line'].replace(' — ', ' ') new_oracle = card['oracle_text'] - oracle_updated = oracle_updated | update_oracle(names[1], lines, oracle_texts[1], new_oracle, False) + oracle_updated = oracle_updated | update_oracle(names[1], lines, oracle_texts[1], new_oracle, type_line, alternate_line) else: for i, face in enumerate(card['card_faces']): - is_planeswalker = face['type_line'].find('Planeswalker') != -1 + type_line = face['type_line'].replace(' — ', ' ') new_oracle = face['oracle_text'] - oracle_updated = oracle_updated | update_oracle(names[i], lines, oracle_texts[i], new_oracle, is_planeswalker) + if i == 0: + oracle_updated = oracle_updated | update_oracle(names[i], lines, oracle_texts[i], new_oracle, type_line, 0) + else: + oracle_updated = oracle_updated | update_oracle(names[i], lines, oracle_texts[i], new_oracle, type_line, alternate_line) if not oracle_updated: