mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 02:08:00 +00:00
Clean up (#2907)
This commit is contained in:
@@ -1211,7 +1211,7 @@ public class ComputerUtil {
|
|||||||
creatures2.add(creatures.get(i));
|
creatures2.add(creatures.get(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (((creatures2.size() + CardUtil.getThisTurnCast("Creature.YouCtrl", vengevines.get(0), null).size()) > 1)
|
if (((creatures2.size() + CardUtil.getThisTurnCast("Creature.YouCtrl", vengevines.get(0), null, ai).size()) > 1)
|
||||||
&& card.isCreature() && card.getManaCost().getCMC() <= 3) {
|
&& card.isCreature() && card.getManaCost().getCMC() <= 3) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,13 +198,6 @@ public class ChooseCardAi extends SpellAbilityAi {
|
|||||||
} else if ("RandomNonLand".equals(logic)) {
|
} else if ("RandomNonLand".equals(logic)) {
|
||||||
options = CardLists.getValidCards(options, "Card.nonLand", host.getController(), host, sa);
|
options = CardLists.getValidCards(options, "Card.nonLand", host.getController(), host, sa);
|
||||||
choice = Aggregates.random(options);
|
choice = Aggregates.random(options);
|
||||||
} else if (logic.equals("Untap")) {
|
|
||||||
final String filter = "Permanent.YouCtrl,Permanent.tapped";
|
|
||||||
CardCollection newOptions = CardLists.getValidCards(options, filter, ctrl, host, sa);
|
|
||||||
if (!newOptions.isEmpty()) {
|
|
||||||
options = newOptions;
|
|
||||||
}
|
|
||||||
choice = ComputerUtilCard.getBestAI(options);
|
|
||||||
} else if (logic.equals("NeedsPrevention")) {
|
} else if (logic.equals("NeedsPrevention")) {
|
||||||
final Game game = ai.getGame();
|
final Game game = ai.getGame();
|
||||||
final Combat combat = game.getCombat();
|
final Combat combat = game.getCombat();
|
||||||
|
|||||||
@@ -3,11 +3,14 @@ package forge.ai.ability;
|
|||||||
import forge.ai.*;
|
import forge.ai.*;
|
||||||
import forge.game.ability.AbilityUtils;
|
import forge.game.ability.AbilityUtils;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
|
import forge.game.card.CardCollection;
|
||||||
|
import forge.game.card.CardLists;
|
||||||
import forge.game.cost.Cost;
|
import forge.game.cost.Cost;
|
||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
|
import forge.game.zone.ZoneType;
|
||||||
|
|
||||||
public class TapAi extends TapAiBase {
|
public class TapAi extends TapAiBase {
|
||||||
@Override
|
@Override
|
||||||
@@ -52,8 +55,15 @@ public class TapAi extends TapAiBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!sa.usesTargeting()) {
|
if (!sa.usesTargeting()) {
|
||||||
|
CardCollection untap;
|
||||||
|
if (sa.hasParam("CardChoices")) {
|
||||||
|
untap = CardLists.getValidCards(source.getGame().getCardsIn(ZoneType.Battlefield), sa.getParam("CardChoices"), ai, source, sa);
|
||||||
|
} else {
|
||||||
|
untap = AbilityUtils.getDefinedCards(source, sa.getParam("Defined"), sa);
|
||||||
|
}
|
||||||
|
|
||||||
boolean bFlag = false;
|
boolean bFlag = false;
|
||||||
for (final Card c : AbilityUtils.getDefinedCards(source, sa.getParam("Defined"), sa)) {
|
for (final Card c : untap) {
|
||||||
bFlag |= c.isUntapped();
|
bFlag |= c.isUntapped();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -450,6 +450,7 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (params.containsKey("CheckSVar")) {
|
if (params.containsKey("CheckSVar")) {
|
||||||
|
// TODO this provides only the card controller instead of the stack one
|
||||||
final int sVar = AbilityUtils.calculateAmount(getHostCard(), params.get("CheckSVar"), this);
|
final int sVar = AbilityUtils.calculateAmount(getHostCard(), params.get("CheckSVar"), this);
|
||||||
final String comparator = getParamOrDefault("SVarCompare", "GE1");
|
final String comparator = getParamOrDefault("SVarCompare", "GE1");
|
||||||
final String svarOperator = comparator.substring(0, 2);
|
final String svarOperator = comparator.substring(0, 2);
|
||||||
@@ -463,7 +464,7 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView,
|
|||||||
final String comparator2 = getParamOrDefault("SecondSVarCompare", "GE1");
|
final String comparator2 = getParamOrDefault("SecondSVarCompare", "GE1");
|
||||||
final String svarOperator2 = comparator2.substring(0, 2);
|
final String svarOperator2 = comparator2.substring(0, 2);
|
||||||
final String svarOperand2 = comparator2.substring(2);
|
final String svarOperand2 = comparator2.substring(2);
|
||||||
final int operandValue2 = AbilityUtils.calculateAmount(this.hostCard, svarOperand2, this);
|
final int operandValue2 = AbilityUtils.calculateAmount(getHostCard(), svarOperand2, this);
|
||||||
if (!Expressions.compare(sVar2, svarOperator2, operandValue2)) {
|
if (!Expressions.compare(sVar2, svarOperator2, operandValue2)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -333,7 +333,7 @@ public class AbilityUtils {
|
|||||||
origin = null;
|
origin = null;
|
||||||
validFilter = workingCopy[2];
|
validFilter = workingCopy[2];
|
||||||
}
|
}
|
||||||
for (final Card cl : CardUtil.getThisTurnEntered(destination, origin, validFilter, hostCard, sa)) {
|
for (final Card cl : CardUtil.getThisTurnEntered(destination, origin, validFilter, hostCard, sa, player)) {
|
||||||
Card gameState = game.getCardState(cl, null);
|
Card gameState = game.getCardState(cl, null);
|
||||||
// cards that use this should only care about if it is still in that zone
|
// cards that use this should only care about if it is still in that zone
|
||||||
// TODO if all LKI needs to be returned, need to change CardCollection return from this function
|
// TODO if all LKI needs to be returned, need to change CardCollection return from this function
|
||||||
@@ -1846,11 +1846,6 @@ public class AbilityUtils {
|
|||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
// Count$TriggeredManaSpent
|
|
||||||
if (sq[0].equals("TriggeredManaSpent")) {
|
|
||||||
final SpellAbility root = (SpellAbility) sa.getRootAbility().getTriggeringObject(AbilityKey.SpellAbility);
|
|
||||||
return root == null ? 0 : root.getTotalManaSpent();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Count$ManaColorsPaid
|
// Count$ManaColorsPaid
|
||||||
if (sq[0].equals("ManaColorsPaid")) {
|
if (sq[0].equals("ManaColorsPaid")) {
|
||||||
@@ -2624,7 +2619,7 @@ public class AbilityUtils {
|
|||||||
//game info
|
//game info
|
||||||
// Count$Morbid.<True>.<False>
|
// Count$Morbid.<True>.<False>
|
||||||
if (sq[0].startsWith("Morbid")) {
|
if (sq[0].startsWith("Morbid")) {
|
||||||
final List<Card> res = CardUtil.getThisTurnEntered(ZoneType.Graveyard, ZoneType.Battlefield, "Creature", c, ctb);
|
final List<Card> res = CardUtil.getThisTurnEntered(ZoneType.Graveyard, ZoneType.Battlefield, "Creature", c, ctb, player);
|
||||||
return doXMath(calculateAmount(c, sq[res.size() > 0 ? 1 : 2], ctb), expr, c, ctb);
|
return doXMath(calculateAmount(c, sq[res.size() > 0 ? 1 : 2], ctb), expr, c, ctb);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2736,9 +2731,9 @@ public class AbilityUtils {
|
|||||||
|
|
||||||
List<Card> res = Lists.newArrayList();
|
List<Card> res = Lists.newArrayList();
|
||||||
if (workingCopy[0].contains("This")) {
|
if (workingCopy[0].contains("This")) {
|
||||||
res = CardUtil.getThisTurnCast(validFilter, c, ctb);
|
res = CardUtil.getThisTurnCast(validFilter, c, ctb, player);
|
||||||
} else {
|
} else {
|
||||||
res = CardUtil.getLastTurnCast(validFilter, c, ctb);
|
res = CardUtil.getLastTurnCast(validFilter, c, ctb, player);
|
||||||
}
|
}
|
||||||
|
|
||||||
return doXMath(res.size(), expr, c, ctb);
|
return doXMath(res.size(), expr, c, ctb);
|
||||||
@@ -2753,7 +2748,7 @@ public class AbilityUtils {
|
|||||||
ZoneType origin = hasFrom ? ZoneType.smartValueOf(workingCopy[3]) : null;
|
ZoneType origin = hasFrom ? ZoneType.smartValueOf(workingCopy[3]) : null;
|
||||||
String validFilter = workingCopy[hasFrom ? 4 : 2];
|
String validFilter = workingCopy[hasFrom ? 4 : 2];
|
||||||
|
|
||||||
final List<Card> res = CardUtil.getThisTurnEntered(destination, origin, validFilter, c, ctb);
|
final List<Card> res = CardUtil.getThisTurnEntered(destination, origin, validFilter, c, ctb, player);
|
||||||
return doXMath(res.size(), expr, c, ctb);
|
return doXMath(res.size(), expr, c, ctb);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2766,7 +2761,7 @@ public class AbilityUtils {
|
|||||||
ZoneType origin = hasFrom ? ZoneType.smartValueOf(workingCopy[3]) : null;
|
ZoneType origin = hasFrom ? ZoneType.smartValueOf(workingCopy[3]) : null;
|
||||||
String validFilter = workingCopy[hasFrom ? 4 : 2];
|
String validFilter = workingCopy[hasFrom ? 4 : 2];
|
||||||
|
|
||||||
final List<Card> res = CardUtil.getLastTurnEntered(destination, origin, validFilter, c, ctb);
|
final List<Card> res = CardUtil.getLastTurnEntered(destination, origin, validFilter, c, ctb, player);
|
||||||
return doXMath(res.size(), expr, c, ctb);
|
return doXMath(res.size(), expr, c, ctb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1238,7 +1238,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
|||||||
CardLists.shuffle(chosenCards);
|
CardLists.shuffle(chosenCards);
|
||||||
}
|
}
|
||||||
// do not shuffle the library once we have placed a fetched card on top.
|
// do not shuffle the library once we have placed a fetched card on top.
|
||||||
if (origin.contains(ZoneType.Library) && (destination == ZoneType.Library) && shuffleMandatory) {
|
if (origin.contains(ZoneType.Library) && destination == ZoneType.Library && shuffleMandatory) {
|
||||||
player.shuffle(sa);
|
player.shuffle(sa);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -173,7 +173,7 @@ public class DamageDealEffect extends DamageBaseEffect {
|
|||||||
} else { // only for Comet, Stellar Pup
|
} else { // only for Comet, Stellar Pup
|
||||||
final String prompt = sa.hasParam("ChoicePrompt") ? sa.getParam("ChoicePrompt") :
|
final String prompt = sa.hasParam("ChoicePrompt") ? sa.getParam("ChoicePrompt") :
|
||||||
Localizer.getInstance().getMessage("lblChooseEntityDmg");
|
Localizer.getInstance().getMessage("lblChooseEntityDmg");
|
||||||
tgts.addAll(sa.getActivatingPlayer().getController().chooseEntitiesForEffect(choices, n, n, null, sa,
|
tgts.addAll(activator.getController().chooseEntitiesForEffect(choices, n, n, null, sa,
|
||||||
prompt, null, null));
|
prompt, null, null));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ public class RepeatEachEffect extends SpellAbilityEffect {
|
|||||||
if (def.startsWith("ThisTurnCast")) {
|
if (def.startsWith("ThisTurnCast")) {
|
||||||
final String[] workingCopy = def.split("_");
|
final String[] workingCopy = def.split("_");
|
||||||
final String validFilter = workingCopy[1];
|
final String validFilter = workingCopy[1];
|
||||||
res = CardUtil.getThisTurnCast(validFilter, source, sa);
|
res = CardUtil.getThisTurnCast(validFilter, source, sa, player);
|
||||||
} else if (def.startsWith("Defined ")) {
|
} else if (def.startsWith("Defined ")) {
|
||||||
res = AbilityUtils.getDefinedCards(source, def.substring(8), sa);
|
res = AbilityUtils.getDefinedCards(source, def.substring(8), sa);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -25,19 +25,17 @@ public class TapEffect extends SpellAbilityEffect {
|
|||||||
card.clearRemembered();
|
card.clearRemembered();
|
||||||
}
|
}
|
||||||
|
|
||||||
CardCollection toTap = new CardCollection();
|
Iterable<Card> toTap;
|
||||||
|
|
||||||
if (sa.hasParam("CardChoices")) { // choosing outside Defined/Targeted
|
if (sa.hasParam("CardChoices")) { // choosing outside Defined/Targeted
|
||||||
final Player activator = sa.getActivatingPlayer();
|
final Player activator = sa.getActivatingPlayer();
|
||||||
CardCollection choices = new CardCollection();
|
CardCollection choices = CardLists.getValidCards(card.getGame().getCardsIn(ZoneType.Battlefield), sa.getParam("CardChoices"), activator, card, sa);
|
||||||
choices.addAll(CardLists.getValidCards(card.getGame().getCardsIn(ZoneType.Battlefield),
|
|
||||||
sa.getParam("CardChoices"), activator, card, sa));
|
|
||||||
int n = sa.hasParam("ChoiceAmount") ?
|
int n = sa.hasParam("ChoiceAmount") ?
|
||||||
AbilityUtils.calculateAmount(card, sa.getParam("ChoiceAmount"), sa) : 1;
|
AbilityUtils.calculateAmount(card, sa.getParam("ChoiceAmount"), sa) : 1;
|
||||||
int min = (sa.hasParam("AnyNumber")) ? 0 : n;
|
int min = sa.hasParam("AnyNumber") ? 0 : n;
|
||||||
final String prompt = sa.hasParam("ChoicePrompt") ? sa.getParam("ChoicePrompt") :
|
final String prompt = sa.hasParam("ChoicePrompt") ? sa.getParam("ChoicePrompt") :
|
||||||
Localizer.getInstance().getMessage("lblChoosePermanentstoTap");
|
Localizer.getInstance().getMessage("lblChoosePermanentstoTap");
|
||||||
toTap.addAll(activator.getController().chooseEntitiesForEffect(choices, min, n, null, sa, prompt, null, null));
|
toTap = activator.getController().chooseEntitiesForEffect(choices, min, n, null, sa, prompt, null, null);
|
||||||
} else {
|
} else {
|
||||||
toTap = getTargetCards(sa);
|
toTap = getTargetCards(sa);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -870,7 +870,7 @@ public class CardProperty {
|
|||||||
} else if (restriction.equals(ZoneType.Battlefield.toString())) {
|
} else if (restriction.equals(ZoneType.Battlefield.toString())) {
|
||||||
return Iterables.any(game.getCardsIn(ZoneType.Battlefield), CardPredicates.sharesNameWith(card));
|
return Iterables.any(game.getCardsIn(ZoneType.Battlefield), CardPredicates.sharesNameWith(card));
|
||||||
} else if (restriction.equals("ThisTurnCast")) {
|
} else if (restriction.equals("ThisTurnCast")) {
|
||||||
return Iterables.any(CardUtil.getThisTurnCast("Card", source, spellAbility), CardPredicates.sharesNameWith(card));
|
return Iterables.any(CardUtil.getThisTurnCast("Card", source, spellAbility, sourceController), CardPredicates.sharesNameWith(card));
|
||||||
} else if (restriction.equals("MovedToGrave")) {
|
} else if (restriction.equals("MovedToGrave")) {
|
||||||
if (!(spellAbility instanceof SpellAbility)) {
|
if (!(spellAbility instanceof SpellAbility)) {
|
||||||
final SpellAbility root = ((SpellAbility) spellAbility).getRootAbility();
|
final SpellAbility root = ((SpellAbility) spellAbility).getRootAbility();
|
||||||
@@ -962,7 +962,7 @@ public class CardProperty {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (property.startsWith("SecondSpellCastThisTurn")) {
|
} else if (property.startsWith("SecondSpellCastThisTurn")) {
|
||||||
final List<Card> cards = CardUtil.getThisTurnCast("Card", source, spellAbility);
|
final List<Card> cards = CardUtil.getThisTurnCast("Card", source, spellAbility, sourceController);
|
||||||
if (cards.size() < 2) {
|
if (cards.size() < 2) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -970,7 +970,7 @@ public class CardProperty {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (property.equals("ThisTurnCast")) {
|
} else if (property.equals("ThisTurnCast")) {
|
||||||
for (final Card c : CardUtil.getThisTurnCast("Card", source, spellAbility)) {
|
for (final Card c : CardUtil.getThisTurnCast("Card", source, spellAbility, sourceController)) {
|
||||||
if (card.equals(c)) {
|
if (card.equals(c)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -101,9 +101,6 @@ public final class CardUtil {
|
|||||||
* @param src a Card object
|
* @param src a Card object
|
||||||
* @return a CardCollection that matches the given criteria
|
* @return a CardCollection that matches the given criteria
|
||||||
*/
|
*/
|
||||||
public static List<Card> getThisTurnEntered(final ZoneType to, final ZoneType from, final String valid, final Card src, final CardTraitBase ctb) {
|
|
||||||
return getThisTurnEntered(to, from, valid, src, ctb, src.getController());
|
|
||||||
}
|
|
||||||
public static List<Card> getThisTurnEntered(final ZoneType to, final ZoneType from, final String valid, final Card src, final CardTraitBase ctb, final Player controller) {
|
public static List<Card> getThisTurnEntered(final ZoneType to, final ZoneType from, final String valid, final Card src, final CardTraitBase ctb, final Player controller) {
|
||||||
List<Card> res = Lists.newArrayList();
|
List<Card> res = Lists.newArrayList();
|
||||||
final Game game = src.getGame();
|
final Game game = src.getGame();
|
||||||
@@ -126,7 +123,7 @@ public final class CardUtil {
|
|||||||
* @param src a Card object
|
* @param src a Card object
|
||||||
* @return a CardCollection that matches the given criteria
|
* @return a CardCollection that matches the given criteria
|
||||||
*/
|
*/
|
||||||
public static List<Card> getLastTurnEntered(final ZoneType to, final ZoneType from, final String valid, final Card src, final CardTraitBase ctb) {
|
public static List<Card> getLastTurnEntered(final ZoneType to, final ZoneType from, final String valid, final Card src, final CardTraitBase ctb, final Player controller) {
|
||||||
List<Card> res = Lists.newArrayList();
|
List<Card> res = Lists.newArrayList();
|
||||||
final Game game = src.getGame();
|
final Game game = src.getGame();
|
||||||
if (to != ZoneType.Stack) {
|
if (to != ZoneType.Stack) {
|
||||||
@@ -136,15 +133,15 @@ public final class CardUtil {
|
|||||||
} else {
|
} else {
|
||||||
res.addAll(game.getStackZone().getCardsAddedLastTurn(from));
|
res.addAll(game.getStackZone().getCardsAddedLastTurn(from));
|
||||||
}
|
}
|
||||||
return CardLists.getValidCardsAsList(res, valid, src.getController(), src, ctb);
|
return CardLists.getValidCardsAsList(res, valid, controller, src, ctb);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Card> getThisTurnCast(final String valid, final Card src, final CardTraitBase ctb) {
|
public static List<Card> getThisTurnCast(final String valid, final Card src, final CardTraitBase ctb, final Player controller) {
|
||||||
return CardLists.getValidCardsAsList(src.getGame().getStack().getSpellsCastThisTurn(), valid, src.getController(), src, ctb);
|
return CardLists.getValidCardsAsList(src.getGame().getStack().getSpellsCastThisTurn(), valid, controller, src, ctb);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Card> getLastTurnCast(final String valid, final Card src, final CardTraitBase ctb) {
|
public static List<Card> getLastTurnCast(final String valid, final Card src, final CardTraitBase ctb, final Player controller) {
|
||||||
return CardLists.getValidCardsAsList(src.getGame().getStack().getSpellsCastLastTurn(), valid, src.getController(), src, ctb);
|
return CardLists.getValidCardsAsList(src.getGame().getStack().getSpellsCastLastTurn(), valid, controller, src, ctb);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Card> getLKICopyList(final Iterable<Card> in, Map<Integer, Card> cachedMap) {
|
public static List<Card> getLKICopyList(final Iterable<Card> in, Map<Integer, Card> cachedMap) {
|
||||||
|
|||||||
@@ -468,7 +468,7 @@ public class CostAdjustment {
|
|||||||
}
|
}
|
||||||
List<Card> list;
|
List<Card> list;
|
||||||
if (st.hasParam("ValidCard")) {
|
if (st.hasParam("ValidCard")) {
|
||||||
list = CardUtil.getThisTurnCast(st.getParam("ValidCard"), hostCard, st);
|
list = CardUtil.getThisTurnCast(st.getParam("ValidCard"), hostCard, st, controller);
|
||||||
} else {
|
} else {
|
||||||
list = game.getStack().getSpellsCastThisTurn();
|
list = game.getStack().getSpellsCastThisTurn();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ public class StaticAbilityCantBeCast {
|
|||||||
if (stAb.hasParam("NumLimitEachTurn") && activator != null) {
|
if (stAb.hasParam("NumLimitEachTurn") && activator != null) {
|
||||||
int limit = Integer.parseInt(stAb.getParam("NumLimitEachTurn"));
|
int limit = Integer.parseInt(stAb.getParam("NumLimitEachTurn"));
|
||||||
String valid = stAb.getParamOrDefault("ValidCard", "Card");
|
String valid = stAb.getParamOrDefault("ValidCard", "Card");
|
||||||
List<Card> thisTurnCast = CardUtil.getThisTurnCast(valid, card, stAb);
|
List<Card> thisTurnCast = CardUtil.getThisTurnCast(valid, card, stAb, activator);
|
||||||
if (CardLists.filterControlledByAsList(thisTurnCast, activator).size() < limit) {
|
if (CardLists.filterControlledByAsList(thisTurnCast, activator).size() < limit) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ import forge.game.ability.AbilityUtils;
|
|||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.card.CardLists;
|
import forge.game.card.CardLists;
|
||||||
import forge.game.card.CardPredicates;
|
import forge.game.card.CardPredicates;
|
||||||
import forge.game.card.CardUtil;
|
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.util.Expressions;
|
import forge.util.Expressions;
|
||||||
@@ -190,7 +189,7 @@ public class TriggerChangesZone extends Trigger {
|
|||||||
/* this trigger only activates for the nth spell you cast this turn */
|
/* this trigger only activates for the nth spell you cast this turn */
|
||||||
if (hasParam("ConditionYouCastThisTurn")) {
|
if (hasParam("ConditionYouCastThisTurn")) {
|
||||||
final String compare = getParam("ConditionYouCastThisTurn");
|
final String compare = getParam("ConditionYouCastThisTurn");
|
||||||
List<Card> thisTurnCast = CardUtil.getThisTurnCast("Card", getHostCard(), this);
|
List<Card> thisTurnCast = getHostCard().getGame().getStack().getSpellsCastThisTurn();
|
||||||
thisTurnCast = CardLists.filterControlledByAsList(thisTurnCast, getHostCard().getController());
|
thisTurnCast = CardLists.filterControlledByAsList(thisTurnCast, getHostCard().getController());
|
||||||
|
|
||||||
// checks which card this spell was the castSA
|
// checks which card this spell was the castSA
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ public class TriggerSpellAbilityCastOrCopy extends Trigger {
|
|||||||
if (hasParam("ActivatorThisTurnCast")) {
|
if (hasParam("ActivatorThisTurnCast")) {
|
||||||
final String compare = getParam("ActivatorThisTurnCast");
|
final String compare = getParam("ActivatorThisTurnCast");
|
||||||
final String valid = getParamOrDefault("ValidCard", "Card");
|
final String valid = getParamOrDefault("ValidCard", "Card");
|
||||||
List<Card> thisTurnCast = CardUtil.getThisTurnCast(valid, getHostCard(), this);
|
List<Card> thisTurnCast = CardUtil.getThisTurnCast(valid, getHostCard(), this, getHostCard().getController());
|
||||||
thisTurnCast = CardLists.filterControlledByAsList(thisTurnCast, activator);
|
thisTurnCast = CardLists.filterControlledByAsList(thisTurnCast, activator);
|
||||||
int left = thisTurnCast.size();
|
int left = thisTurnCast.size();
|
||||||
int right = Integer.parseInt(compare.substring(2));
|
int right = Integer.parseInt(compare.substring(2));
|
||||||
|
|||||||
@@ -14,6 +14,6 @@ SVar:DBEffect3:DB$ Effect | Name$ Emblem - Chandra, Dressed to Kill | Triggers$
|
|||||||
SVar:STPlay2:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered+Red+nonLand | AffectedZone$ Exile | Description$ You may cast red spells from among the exiled cards this turn.
|
SVar:STPlay2:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered+Red+nonLand | AffectedZone$ Exile | Description$ You may cast red spells from among the exiled cards this turn.
|
||||||
SVar:TRSpellCast:Mode$ SpellCast | ValidCard$ Card.Red | ValidActivatingPlayer$ You | TriggerZones$ Command | Execute$ TrigDealDamage | TriggerDescription$ Whenever you cast a red spell, this emblem deals X damage to any target, where X is the amount of mana spent to cast that spell."
|
SVar:TRSpellCast:Mode$ SpellCast | ValidCard$ Card.Red | ValidActivatingPlayer$ You | TriggerZones$ Command | Execute$ TrigDealDamage | TriggerDescription$ Whenever you cast a red spell, this emblem deals X damage to any target, where X is the amount of mana spent to cast that spell."
|
||||||
SVar:TrigDealDamage:DB$ DealDamage | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ X
|
SVar:TrigDealDamage:DB$ DealDamage | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ X
|
||||||
SVar:X:Count$TriggeredManaSpent
|
SVar:X:TriggeredCard$CastTotalManaSpent
|
||||||
SVar:BuffedBy:Card.Red
|
SVar:BuffedBy:Card.Red
|
||||||
Oracle:[+1]: Add {R}. Chandra, Dressed to Kill deals 1 damage to up to one target player or planeswalker.\n[+1]: Exile the top card of your library. If it's red, you may cast it this turn.\n[-7]: Exile the top five cards of your library. You may cast red spells from among them this turn. You get an emblem with "Whenever you cast a red spell, this emblem deals X damage to any target, where X is the amount of mana spent to cast that spell."
|
Oracle:[+1]: Add {R}. Chandra, Dressed to Kill deals 1 damage to up to one target player or planeswalker.\n[+1]: Exile the top card of your library. If it's red, you may cast it this turn.\n[-7]: Exile the top five cards of your library. You may cast red spells from among them this turn. You get an emblem with "Whenever you cast a red spell, this emblem deals X damage to any target, where X is the amount of mana spent to cast that spell."
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
Name:Devout Invocation
|
Name:Devout Invocation
|
||||||
ManaCost:6 W
|
ManaCost:6 W
|
||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ ChooseCard | Cost$ 6 W | Defined$ You | MinAmount$ 0 | Amount$ X | Choices$ Creature.untapped+YouCtrl | ChoiceTitle$ Choose any number of untapped creatures you control | ChoiceZone$ Battlefield | RememberChosen$ True | SubAbility$ TrigTap | SpellDescription$ Tap any number of untapped creatures you control. Create a 4/4 white Angel creature token with flying for each creature tapped this way. | StackDescription$ SpellDescription
|
A:SP$ Tap | CardChoices$ Creature.YouCtrl+untapped | AnyNumber$ True | ChoiceAmount$ Count$Valid Creature.YouCtrl+untapped | RememberTapped$ True | SpellDescription$ Tap any number of untapped creatures you control. Create a 4/4 white Angel creature token with flying for each creature tapped this way. | StackDescription$ SpellDescription
|
||||||
SVar:TrigTap:DB$ Tap | Defined$ Remembered | SubAbility$ DBToken | StackDescription$ None
|
|
||||||
SVar:DBToken:DB$ Token | TokenAmount$ Y | TokenScript$ w_4_4_angel_flying | TokenOwner$ You | SubAbility$ DBCleanup
|
SVar:DBToken:DB$ Token | TokenAmount$ Y | TokenScript$ w_4_4_angel_flying | TokenOwner$ You | SubAbility$ DBCleanup
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
SVar:X:Count$Valid Creature.YouCtrl
|
|
||||||
SVar:Y:Remembered$Amount
|
SVar:Y:Remembered$Amount
|
||||||
SVar:NeedsToPlay:Creature.YouCtrl+untapped
|
SVar:NeedsToPlay:Creature.YouCtrl+untapped
|
||||||
SVar:PlayMain1:ALWAYS
|
SVar:PlayMain1:ALWAYS
|
||||||
|
|||||||
@@ -7,5 +7,7 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creatu
|
|||||||
SVar:TrigImprint:DB$ Pump | ImprintCards$ Remembered | SubAbility$ DBCopy
|
SVar:TrigImprint:DB$ Pump | ImprintCards$ Remembered | SubAbility$ DBCopy
|
||||||
SVar:DBCopy:DB$ CopyPermanent | Defined$ TriggeredCardLKICopy | Controller$ You | AddTypes$ Artifact | RememberTokens$ True | SubAbility$ DBChangeZoneAll
|
SVar:DBCopy:DB$ CopyPermanent | Defined$ TriggeredCardLKICopy | Controller$ You | AddTypes$ Artifact | RememberTokens$ True | SubAbility$ DBChangeZoneAll
|
||||||
SVar:DBChangeZoneAll:DB$ ChangeZoneAll | Origin$ Battlefield | Destination$ Exile | ChangeType$ Card.IsImprinted
|
SVar:DBChangeZoneAll:DB$ ChangeZoneAll | Origin$ Battlefield | Destination$ Exile | ChangeType$ Card.IsImprinted
|
||||||
|
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigClean | Static$ True
|
||||||
|
SVar:TrigClean:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True
|
||||||
DeckHas:Ability$Token
|
DeckHas:Ability$Token
|
||||||
Oracle:Flying\nWhenever a nontoken creature enters the battlefield under an opponent's control, create a token that's a copy of that creature except it's an artifact in addition to its other types. Then exile all other tokens created with Faerie Artisans.
|
Oracle:Flying\nWhenever a nontoken creature enters the battlefield under an opponent's control, create a token that's a copy of that creature except it's an artifact in addition to its other types. Then exile all other tokens created with Faerie Artisans.
|
||||||
|
|||||||
@@ -2,11 +2,9 @@ Name:Guild Summit
|
|||||||
ManaCost:2 U
|
ManaCost:2 U
|
||||||
Types:Enchantment
|
Types:Enchantment
|
||||||
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ GuestList | TriggerDescription$ When CARDNAME enters the battlefield, you may tap any number of untapped Gates you control. Draw a card for each Gate tapped this way.
|
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ GuestList | TriggerDescription$ When CARDNAME enters the battlefield, you may tap any number of untapped Gates you control. Draw a card for each Gate tapped this way.
|
||||||
SVar:GuestList:DB$ ChooseCard | Defined$ You | MinAmount$ 0 | Amount$ X | Choices$ Gate.untapped+YouCtrl | ChoiceTitle$ Choose any number of untapped Gates you control | ChoiceZone$ Battlefield | RememberChosen$ True | SubAbility$ TrigTap
|
SVar:GuestList:DB$ Tap | CardChoices$ Gate.YouCtrl+untapped | AnyNumber$ True | ChoiceAmount$ Count$Valid Gate.YouCtrl+untapped | RememberTapped$ True | SubAbility$ DBDraw
|
||||||
SVar:TrigTap:DB$ Tap | Defined$ Remembered | SubAbility$ DBDraw
|
|
||||||
SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ Y | SubAbility$ DBCleanup
|
SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ Y | SubAbility$ DBCleanup
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
SVar:X:Count$Valid Gate.untapped+YouCtrl
|
|
||||||
SVar:Y:Remembered$Amount
|
SVar:Y:Remembered$Amount
|
||||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Gate.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever a Gate enters the battlefield under your control, draw a card.
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Gate.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever a Gate enters the battlefield under your control, draw a card.
|
||||||
SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1
|
SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
Name:Harmony of Nature
|
Name:Harmony of Nature
|
||||||
ManaCost:2 G
|
ManaCost:2 G
|
||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ ChooseCard | Cost$ 2 G | Defined$ You | MinAmount$ 0 | Amount$ X | Choices$ Creature.untapped+YouCtrl | ChoiceTitle$ Choose any number of untapped creatures you control | ChoiceZone$ Battlefield | RememberChosen$ True | SubAbility$ TrigTap | SpellDescription$ Tap any number of untapped creatures you control. You gain 4 life for each creature tapped this way.
|
A:SP$ Tap | CardChoices$ Creature.YouCtrl+untapped | AnyNumber$ True | ChoiceAmount$ Count$Valid Creature.YouCtrl+untapped | RememberTapped$ True | SubAbility$ DBGainLife | SpellDescription$ Tap any number of untapped creatures you control. You gain 4 life for each creature tapped this way.
|
||||||
SVar:TrigTap:DB$ Tap | Defined$ Remembered | SubAbility$ DBGainLife
|
|
||||||
SVar:DBGainLife:DB$ GainLife | LifeAmount$ Z | SubAbility$ DBCleanup
|
SVar:DBGainLife:DB$ GainLife | LifeAmount$ Z | SubAbility$ DBCleanup
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
SVar:X:Count$Valid Creature.YouCtrl
|
|
||||||
SVar:Y:Remembered$Amount
|
SVar:Y:Remembered$Amount
|
||||||
SVar:Z:SVar$Y/Times.4
|
SVar:Z:SVar$Y/Times.4
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
|
|||||||
@@ -3,11 +3,9 @@ ManaCost:4 G
|
|||||||
Types:Creature Elemental
|
Types:Creature Elemental
|
||||||
PT:2/8
|
PT:2/8
|
||||||
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ GuestList | TriggerDescription$ When CARDNAME enters the battlefield, you may tap any number of untapped creatures you control. You gain 2 life for each creature tapped this way.
|
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ GuestList | TriggerDescription$ When CARDNAME enters the battlefield, you may tap any number of untapped creatures you control. You gain 2 life for each creature tapped this way.
|
||||||
SVar:GuestList:DB$ ChooseCard | Defined$ You | MinAmount$ 0 | Amount$ JaddiLifestriderX | Choices$ Creature.untapped+YouCtrl | ChoiceTitle$ Choose any number of untapped creatures you control | ChoiceZone$ Battlefield | RememberChosen$ True | SubAbility$ TrigJaddiLifestriderTap
|
SVar:TrigJaddiLifestriderTap:DB$ Tap | CardChoices$ Creature.YouCtrl+untapped | AnyNumber$ True | ChoiceAmount$ Count$Valid Creature.YouCtrl+untapped | RememberTapped$ True | SubAbility$ DBJaddiLifestriderGainLife
|
||||||
SVar:TrigJaddiLifestriderTap:DB$ Tap | Defined$ Remembered | SubAbility$ DBJaddiLifestriderGainLife
|
|
||||||
SVar:DBJaddiLifestriderGainLife:DB$ GainLife | LifeAmount$ JaddiLifestriderZ | SubAbility$ DBJaddiLifestriderCleanup
|
SVar:DBJaddiLifestriderGainLife:DB$ GainLife | LifeAmount$ JaddiLifestriderZ | SubAbility$ DBJaddiLifestriderCleanup
|
||||||
SVar:DBJaddiLifestriderCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBJaddiLifestriderCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
SVar:JaddiLifestriderX:Count$Valid Creature.YouCtrl
|
|
||||||
SVar:JaddiLifestriderY:Remembered$Amount
|
SVar:JaddiLifestriderY:Remembered$Amount
|
||||||
SVar:JaddiLifestriderZ:SVar$JaddiLifestriderY/Times.2
|
SVar:JaddiLifestriderZ:SVar$JaddiLifestriderY/Times.2
|
||||||
Oracle:When Jaddi Lifestrider enters the battlefield, you may tap any number of untapped creatures you control. You gain 2 life for each creature tapped this way.
|
Oracle:When Jaddi Lifestrider enters the battlefield, you may tap any number of untapped creatures you control. You gain 2 life for each creature tapped this way.
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ Name:Kalamax, the Stormsire
|
|||||||
ManaCost:1 G U R
|
ManaCost:1 G U R
|
||||||
Types:Legendary Creature Elemental Dinosaur
|
Types:Legendary Creature Elemental Dinosaur
|
||||||
PT:4/4
|
PT:4/4
|
||||||
T:Mode$ SpellCast | ValidCard$ Instant | ValidActivatingPlayer$ You | ActivatorThisTurnCast$ EQ1 | NoResolvingCheck$ True | Execute$ TrigCopy | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast your first instant spell each turn, if CARDNAME is tapped, copy that spell. You may choose new targets for the copy.
|
T:Mode$ SpellCast | ValidCard$ Instant | ValidActivatingPlayer$ You | ActivatorThisTurnCast$ EQ1 | NoResolvingCheck$ True | IsPresent$ Card.Self+tapped | Execute$ TrigCopy | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast your first instant spell each turn, if CARDNAME is tapped, copy that spell. You may choose new targets for the copy.
|
||||||
SVar:TrigCopy:DB$ CopySpellAbility | ConditionPresent$ Card.Self+tapped | Defined$ TriggeredSpellAbility | AILogic$ Always | MayChooseTarget$ True
|
SVar:TrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | AILogic$ Always | MayChooseTarget$ True
|
||||||
SVar:BuffedBy:Instant
|
SVar:BuffedBy:Instant
|
||||||
T:Mode$ SpellCopy | ValidCard$ Instant | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever you copy an instant spell, put a +1/+1 counter on CARDNAME.
|
T:Mode$ SpellCopy | ValidCard$ Instant | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever you copy an instant spell, put a +1/+1 counter on NICKNAME.
|
||||||
DeckHas:Ability$Counters
|
DeckHas:Ability$Counters
|
||||||
DeckHints:Type$Instant
|
DeckHints:Type$Instant
|
||||||
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
|
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1
|
||||||
|
|||||||
@@ -2,13 +2,10 @@ Name:Ledev Champion
|
|||||||
ManaCost:1 G W
|
ManaCost:1 G W
|
||||||
Types:Creature Elf Knight
|
Types:Creature Elf Knight
|
||||||
PT:2/2
|
PT:2/2
|
||||||
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigChoose | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME attacks, you may tap any number of untapped creatures you control. CARDNAME gets +1/+1 until end of turn for each creature tapped this way.
|
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigTap | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME attacks, you may tap any number of untapped creatures you control. CARDNAME gets +1/+1 until end of turn for each creature tapped this way.
|
||||||
SVar:TrigChoose:DB$ ChooseCard | Defined$ You | MinAmount$ 0 | Amount$ X | Choices$ Creature.untapped+YouCtrl | ChoiceTitle$ Choose any number of untapped creatures you control | ChoiceZone$ Battlefield | RememberChosen$ True | SubAbility$ TrigTap
|
SVar:TrigTap:DB$ Tap | CardChoices$ Creature.YouCtrl+untapped | AnyNumber$ True | ChoiceAmount$ Count$Valid Creature.YouCtrl+untapped | RememberTapped$ True | SubAbility$ DBPump
|
||||||
SVar:TrigTap:DB$ Tap | Defined$ Remembered | SubAbility$ DBPump
|
|
||||||
SVar:DBPump:DB$ Pump | NumAtt$ Y | NumDef$ Y | SubAbility$ DBCleanup
|
SVar:DBPump:DB$ Pump | NumAtt$ Y | NumDef$ Y | SubAbility$ DBCleanup
|
||||||
SVar:TrigPump:DB$ Pump | NumAtt$ X
|
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
SVar:X:Count$Valid Creature.YouCtrl
|
|
||||||
SVar:Y:Remembered$Amount
|
SVar:Y:Remembered$Amount
|
||||||
A:AB$ Token | Cost$ 3 G W | TokenAmount$ 1 | TokenScript$ w_1_1_soldier_lifelink | SpellDescription$ Create a 1/1 white Soldier creature token with lifelink.
|
A:AB$ Token | Cost$ 3 G W | TokenAmount$ 1 | TokenScript$ w_1_1_soldier_lifelink | SpellDescription$ Create a 1/1 white Soldier creature token with lifelink.
|
||||||
DeckHas:Ability$Token|LifeGain
|
DeckHas:Ability$Token|LifeGain
|
||||||
|
|||||||
@@ -9,5 +9,5 @@ SVar:MoveToBattlefield:DB$ ChangeZone | Origin$ All | Destination$ Battlefield |
|
|||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
SVar:X:Remembered$Amount
|
SVar:X:Remembered$Amount
|
||||||
SVar:NeedsToPlayVar:Z GE2
|
SVar:NeedsToPlayVar:Z GE2
|
||||||
SVar:Z:Count$Valid Land.YouCtrl+untapped+inZoneBattlefield
|
SVar:Z:Count$Valid Land.YouCtrl+untapped
|
||||||
Oracle:If Lotus Vale would enter the battlefield, sacrifice two untapped lands instead. If you do, put Lotus Vale onto the battlefield. If you don't, put it into its owner's graveyard.\n{T}: Add three mana of any one color.
|
Oracle:If Lotus Vale would enter the battlefield, sacrifice two untapped lands instead. If you do, put Lotus Vale onto the battlefield. If you don't, put it into its owner's graveyard.\n{T}: Add three mana of any one color.
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ PT:4/4
|
|||||||
K:Flying
|
K:Flying
|
||||||
T:Mode$ SpellCast | ValidCard$ Card.nonCreature | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever you cast a noncreature spell, create an X/X red Dragon Illusion creature token with flying and haste, where X is the amount of mana spent to cast that spell. Exile that token at the beginning of the next end step.
|
T:Mode$ SpellCast | ValidCard$ Card.nonCreature | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever you cast a noncreature spell, create an X/X red Dragon Illusion creature token with flying and haste, where X is the amount of mana spent to cast that spell. Exile that token at the beginning of the next end step.
|
||||||
SVar:TrigToken:DB$ Token | TokenScript$ r_x_x_dragon_illusion_flying_haste | TokenPower$ X | TokenToughness$ X | AtEOT$ Exile
|
SVar:TrigToken:DB$ Token | TokenScript$ r_x_x_dragon_illusion_flying_haste | TokenPower$ X | TokenToughness$ X | AtEOT$ Exile
|
||||||
SVar:X:Count$TriggeredManaSpent
|
SVar:X:TriggeredCard$CastTotalManaSpent
|
||||||
SVar:BuffedBy:Card.nonLand+nonCreature
|
SVar:BuffedBy:Card.nonLand+nonCreature
|
||||||
DeckHas:Ability$Token
|
DeckHas:Ability$Token
|
||||||
Oracle:Flying\nWhenever you cast a noncreature spell, create an X/X red Dragon Illusion creature token with flying and haste, where X is the amount of mana spent to cast that spell. Exile that token at the beginning of the next end step.
|
Oracle:Flying\nWhenever you cast a noncreature spell, create an X/X red Dragon Illusion creature token with flying and haste, where X is the amount of mana spent to cast that spell. Exile that token at the beginning of the next end step.
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
Name:Marshaling the Troops
|
Name:Marshaling the Troops
|
||||||
ManaCost:1 G
|
ManaCost:1 G
|
||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ ChooseCard | Cost$ 1 G | Defined$ You | MinAmount$ 0 | Amount$ X | Choices$ Creature.untapped+YouCtrl | ChoiceTitle$ Choose any number of untapped creatures you control | ChoiceZone$ Battlefield | RememberChosen$ True | SubAbility$ TrigTap | SpellDescription$ Tap any number of untapped creatures you control. You gain 4 life for each creature tapped this way.
|
A:SP$ Tap | CardChoices$ Creature.YouCtrl+untapped | AnyNumber$ True | ChoiceAmount$ Count$Valid Creature.YouCtrl+untapped | RememberTapped$ True | SubAbility$ DBGainLife | SpellDescription$ Tap any number of untapped creatures you control. You gain 4 life for each creature tapped this way.
|
||||||
SVar:TrigTap:DB$ Tap | Defined$ Remembered | SubAbility$ DBGainLife
|
|
||||||
SVar:DBGainLife:DB$ GainLife | LifeAmount$ Z | SubAbility$ DBCleanup
|
SVar:DBGainLife:DB$ GainLife | LifeAmount$ Z | SubAbility$ DBCleanup
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
SVar:X:Count$Valid Creature.YouCtrl
|
|
||||||
SVar:Y:Remembered$Amount
|
SVar:Y:Remembered$Amount
|
||||||
SVar:Z:SVar$Y/Times.4
|
SVar:Z:SVar$Y/Times.4
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
|
|||||||
@@ -20,9 +20,6 @@ S:Mode$ Continuous | Affected$ Creature.tapped+YouCtrl+Other | AddPower$ 1 | Des
|
|||||||
S:Mode$ Continuous | Affected$ Creature.untapped+YouCtrl+Other | AddToughness$ 1 | Description$ Other untapped creatures you control get +0/+1.
|
S:Mode$ Continuous | Affected$ Creature.untapped+YouCtrl+Other | AddToughness$ 1 | Description$ Other untapped creatures you control get +0/+1.
|
||||||
T:Mode$ AttackersDeclared | Execute$ DBUnTapAll | CheckSVar$ OverwhelmInstinct | SVarCompare$ GE1 | NoResolvingCheck$ True | TriggerZones$ Battlefield | AttackingPlayer$ You | TriggerDescription$ Whenever you attack, untap each creature you control, then tap any number of creatures you control.
|
T:Mode$ AttackersDeclared | Execute$ DBUnTapAll | CheckSVar$ OverwhelmInstinct | SVarCompare$ GE1 | NoResolvingCheck$ True | TriggerZones$ Battlefield | AttackingPlayer$ You | TriggerDescription$ Whenever you attack, untap each creature you control, then tap any number of creatures you control.
|
||||||
SVar:OverwhelmInstinct:Count$Valid Creature.attacking
|
SVar:OverwhelmInstinct:Count$Valid Creature.attacking
|
||||||
SVar:DBUnTapAll:DB$ UntapAll | ValidCards$ Creature.YouCtrl | SubAbility$ DBChoose
|
SVar:DBUnTapAll:DB$ UntapAll | ValidCards$ Creature.YouCtrl | SubAbility$ DBTap
|
||||||
SVar:DBChoose:DB$ ChooseCard | Defined$ You | MinAmount$ 0 | Amount$ X | Choices$ Creature.untapped+YouCtrl | ChoiceTitle$ Choose any number of untapped creatures you control | ChoiceZone$ Battlefield | SubAbility$ DBTap | SpellDescription$ Tap any number of creatures you control.
|
SVar:DBTap:DB$ Tap | Defined$ CardChoices$ Creature.YouCtrl+untapped | AnyNumber$ True | ChoiceAmount$ Count$Valid Creature.YouCtrl+untapped
|
||||||
SVar:DBTap:DB$ Tap | Defined$ ChosenCard | SubAbility$ DBCleanup
|
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True
|
|
||||||
SVar:X:Count$Valid Creature.untapped+YouCtrl
|
|
||||||
Oracle:Other tapped creatures you control get +1/+0.\nOther untapped creatures you control get +0/+1.\nWhenever you attack, untap each creature you control, then tap any number of creatures you control.
|
Oracle:Other tapped creatures you control get +1/+0.\nOther untapped creatures you control get +0/+1.\nWhenever you attack, untap each creature you control, then tap any number of creatures you control.
|
||||||
|
|||||||
@@ -2,16 +2,13 @@ Name:Raiding Party
|
|||||||
ManaCost:2 R
|
ManaCost:2 R
|
||||||
Types:Enchantment
|
Types:Enchantment
|
||||||
S:Mode$ CantTarget | ValidCard$ Card.Self | ValidSource$ Card.White | Description$ CARDNAME can't be the target of white spells or abilities from white sources.
|
S:Mode$ CantTarget | ValidCard$ Card.Self | ValidSource$ Card.White | Description$ CARDNAME can't be the target of white spells or abilities from white sources.
|
||||||
A:AB$ RepeatEach | Cost$ Sac<1/Orc/Orc> | CostDesc$ Sacrifice an Orc: | RepeatPlayers$ Player | RepeatSubAbility$ ChooseCardsToTap | SubAbility$ DBDestroy | SpellDescription$ Each player may tap any number of untapped white creatures they control. For each creature tapped this way, that player chooses up to two Plains. Then destroy all Plains that weren't chosen this way by any player.
|
A:AB$ RepeatEach | Cost$ Sac<1/Orc/Orc> | CostDesc$ Sacrifice an Orc: | RepeatPlayers$ Player | RepeatSubAbility$ DBTap | SubAbility$ DBDestroy | SpellDescription$ Each player may tap any number of untapped white creatures they control. For each creature tapped this way, that player chooses up to two Plains. Then destroy all Plains that weren't chosen this way by any player.
|
||||||
SVar:ChooseCardsToTap:DB$ ChooseCard | Defined$ Remembered | MinAmount$ 0 | Amount$ NumCreatures | Choices$ Creature.untapped+White+RememberedPlayerCtrl | ChoiceTitle$ Choose any number of untapped white creatures you control | ChoiceZone$ Battlefield | RememberChosen$ True | AIMaxAmount$ NumPlainsDiv2 | SubAbility$ DBTap
|
SVar:DBTap:DB$ Tap | CardChoices$ Creature.untapped+White+RememberedPlayerCtrl | AnyNumber$ True | ChoiceAmount$ Count$Valid Creature.untapped+White+RememberedPlayerCtrl | RememberTapped$ True | SubAbility$ ChoosePlainsToSave
|
||||||
SVar:DBTap:DB$ Tap | Defined$ Remembered | SubAbility$ ChoosePlainsToSave
|
|
||||||
SVar:ChoosePlainsToSave:DB$ ChooseCard | Defined$ Remembered | MinAmount$ 0 | Amount$ TappedXTwo | Choices$ Plains | ChoiceTitle$ Choose up to two Plains for each creature tapped | ChoiceZone$ Battlefield | ImprintChosen$ True | AILogic$ OwnCard | SubAbility$ DBCleanup
|
SVar:ChoosePlainsToSave:DB$ ChooseCard | Defined$ Remembered | MinAmount$ 0 | Amount$ TappedXTwo | Choices$ Plains | ChoiceTitle$ Choose up to two Plains for each creature tapped | ChoiceZone$ Battlefield | ImprintChosen$ True | AILogic$ OwnCard | SubAbility$ DBCleanup
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True
|
||||||
SVar:DBDestroy:DB$ DestroyAll | ValidCards$ Plains.IsNotImprinted | SubAbility$ DBCleanImp | AILogic$ RaidingParty | StackDescription$ None
|
SVar:DBDestroy:DB$ DestroyAll | ValidCards$ Plains.IsNotImprinted | SubAbility$ DBCleanImp | AILogic$ RaidingParty | StackDescription$ None
|
||||||
SVar:DBCleanImp:DB$ Cleanup | ClearImprinted$ True
|
SVar:DBCleanImp:DB$ Cleanup | ClearImprinted$ True
|
||||||
SVar:NumCreatures:Count$Valid Creature.untapped+White+RememberedPlayerCtrl
|
|
||||||
SVar:TappedXTwo:Count$Valid Creature.IsRemembered/Times.2
|
SVar:TappedXTwo:Count$Valid Creature.IsRemembered/Times.2
|
||||||
SVar:NumPlainsDiv2:Count$Valid Plains.YouCtrl/HalfUp
|
|
||||||
AI:RemoveDeck:Random
|
AI:RemoveDeck:Random
|
||||||
SVar:NeedsToPlay:Plains.OppCtrl
|
SVar:NeedsToPlay:Plains.OppCtrl
|
||||||
DeckNeeds:Type$Orc
|
DeckNeeds:Type$Orc
|
||||||
|
|||||||
@@ -4,10 +4,8 @@ Types:Creature Human Soldier
|
|||||||
PT:1/1
|
PT:1/1
|
||||||
K:Double Strike
|
K:Double Strike
|
||||||
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigChoose | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME attacks, you may tap any number of untapped creatures you control. CARDNAME gets +1/+1 until end of turn for each creature tapped this way.
|
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigChoose | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME attacks, you may tap any number of untapped creatures you control. CARDNAME gets +1/+1 until end of turn for each creature tapped this way.
|
||||||
SVar:TrigChoose:DB$ ChooseCard | Defined$ You | MinAmount$ 0 | Amount$ X | Choices$ Creature.untapped+YouCtrl | ChoiceTitle$ Choose any number of untapped creatures you control | ChoiceZone$ Battlefield | RememberChosen$ True | SubAbility$ TrigTap
|
SVar:TrigTap:DB$ Tap | CardChoices$ Creature.YouCtrl+untapped | AnyNumber$ True | ChoiceAmount$ Count$Valid Creature.YouCtrl+untapped | RememberTapped$ True | SubAbility$ DBPump
|
||||||
SVar:TrigTap:DB$ Tap | Defined$ Remembered | SubAbility$ DBPump
|
|
||||||
SVar:DBPump:DB$ Pump | Defined$ Self | NumAtt$ Y | NumDef$ Y | SubAbility$ DBCleanup
|
SVar:DBPump:DB$ Pump | Defined$ Self | NumAtt$ Y | NumDef$ Y | SubAbility$ DBCleanup
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
SVar:X:Count$Valid Creature.untapped+YouCtrl
|
|
||||||
SVar:Y:Count$RememberedSize
|
SVar:Y:Count$RememberedSize
|
||||||
Oracle:Double strike (This creature deals both first-strike and regular combat damage.)\nWhenever Siege Striker attacks, you may tap any number of untapped creatures you control. Siege Striker gets +1/+1 until end of turn for each creature tapped this way.
|
Oracle:Double strike (This creature deals both first-strike and regular combat damage.)\nWhenever Siege Striker attacks, you may tap any number of untapped creatures you control. Siege Striker gets +1/+1 until end of turn for each creature tapped this way.
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ SVar:TrigCharge:DB$ PutCounter | Defined$ Self | CounterType$ EMBER | CounterNum
|
|||||||
SVar:DBBranch:DB$ Branch | BranchConditionSVar$ Ember | TrueSubAbility$ DBRemoveCtrs
|
SVar:DBBranch:DB$ Branch | BranchConditionSVar$ Ember | TrueSubAbility$ DBRemoveCtrs
|
||||||
SVar:DBRemoveCtrs:DB$ RemoveCounter | Defined$ Self | CounterType$ EMBER | CounterNum$ All | SubAbility$ DBTransform
|
SVar:DBRemoveCtrs:DB$ RemoveCounter | Defined$ Self | CounterType$ EMBER | CounterNum$ All | SubAbility$ DBTransform
|
||||||
SVar:DBTransform:DB$ SetState | Defined$ Self | Mode$ Transform
|
SVar:DBTransform:DB$ SetState | Defined$ Self | Mode$ Transform
|
||||||
SVar:X:Count$TriggeredManaSpent
|
SVar:X:TriggeredCard$CastTotalManaSpent
|
||||||
SVar:Ember:Count$Valid Card.Self+counters_GE7_EMBER
|
SVar:Ember:Count$Valid Card.Self+counters_GE7_EMBER
|
||||||
DeckHas:Ability$Counters
|
DeckHas:Ability$Counters
|
||||||
DeckNeeds:Type$Instant|Sorcery
|
DeckNeeds:Type$Instant|Sorcery
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
Name:Urge to Feed
|
Name:Urge to Feed
|
||||||
ManaCost:B B
|
ManaCost:B B
|
||||||
Types:Instant
|
Types:Instant
|
||||||
A:SP$ Pump | Cost$ B B | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ -3 | NumDef$ -3 | IsCurse$ True | SubAbility$ GuestList | SpellDescription$ Target creature gets -3/-3 until end of turn. You may tap any number of untapped Vampire creatures you control. If you do, put a +1/+1 counter on each of those Vampires.
|
A:SP$ Pump | Cost$ B B | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ -3 | NumDef$ -3 | IsCurse$ True | SubAbility$ VampiricUrge | SpellDescription$ Target creature gets -3/-3 until end of turn. You may tap any number of untapped Vampire creatures you control. If you do, put a +1/+1 counter on each of those Vampires.
|
||||||
SVar:GuestList:DB$ ChooseCard | Defined$ You | MinAmount$ 0 | Amount$ AbleToFeedX | Choices$ Creature.Vampire+untapped+YouCtrl | ChoiceTitle$ Choose any number of untapped Vampire creature you control | ChoiceZone$ Battlefield | SubAbility$ VampiricUrge
|
SVar:VampiricUrge:DB$ Tap | CardChoices$ Vampire.YouCtrl+untapped | AnyNumber$ True | ChoiceAmount$ Count$Valid Vampire.YouCtrl+untapped | RememberTapped$ True | SubAbility$ VampiricFeed
|
||||||
SVar:VampiricUrge:DB$ Tap | Defined$ ChosenCard | SubAbility$ VampiricFeed
|
SVar:VampiricFeed:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ 1 | Defined$ Remembered | SubAbility$ DBCleanup
|
||||||
SVar:VampiricFeed:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ 1 | Defined$ ChosenCard
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
SVar:AbleToFeedX:Count$Valid Creature.Vampire+YouCtrl
|
|
||||||
Oracle:Target creature gets -3/-3 until end of turn. You may tap any number of untapped Vampire creatures you control. If you do, put a +1/+1 counter on each of those Vampires.
|
Oracle:Target creature gets -3/-3 until end of turn. You may tap any number of untapped Vampire creatures you control. If you do, put a +1/+1 counter on each of those Vampires.
|
||||||
|
|||||||
Reference in New Issue
Block a user