Merge branch 'master' of git.cardforge.org:core-developers/forge into agetian-master

This commit is contained in:
Agetian
2018-05-26 18:29:43 +03:00
146 changed files with 603 additions and 324 deletions

View File

@@ -1573,7 +1573,7 @@ public class ComputerUtilCard {
pumped.addNewPT(c.getCurrentPower(), c.getCurrentToughness(), timestamp); pumped.addNewPT(c.getCurrentPower(), c.getCurrentToughness(), timestamp);
pumped.addTempPowerBoost(c.getTempPowerBoost() + power + berserkPower); pumped.addTempPowerBoost(c.getTempPowerBoost() + power + berserkPower);
pumped.addTempToughnessBoost(c.getTempToughnessBoost() + toughness); pumped.addTempToughnessBoost(c.getTempToughnessBoost() + toughness);
pumped.addChangedCardKeywords(kws, new ArrayList<String>(), false, timestamp); pumped.addChangedCardKeywords(kws, null, false, false, timestamp);
Set<CounterType> types = c.getCounters().keySet(); Set<CounterType> types = c.getCounters().keySet();
for(CounterType ct : types) { for(CounterType ct : types) {
pumped.addCounterFireNoEvents(ct, c.getCounters(ct), c, true); pumped.addCounterFireNoEvents(ct, c.getCounters(ct), c, true);
@@ -1596,7 +1596,7 @@ public class ComputerUtilCard {
} }
} }
final long timestamp2 = c.getGame().getNextTimestamp(); //is this necessary or can the timestamp be re-used? final long timestamp2 = c.getGame().getNextTimestamp(); //is this necessary or can the timestamp be re-used?
pumped.addChangedCardKeywordsInternal(toCopy, Lists.<KeywordInterface>newArrayList(), false, timestamp2, true); pumped.addChangedCardKeywordsInternal(toCopy, null, false, false, timestamp2, true);
ComputerUtilCard.applyStaticContPT(ai.getGame(), pumped, new CardCollection(c)); ComputerUtilCard.applyStaticContPT(ai.getGame(), pumped, new CardCollection(c));
return pumped; return pumped;
} }

View File

@@ -23,12 +23,12 @@ import forge.game.staticability.StaticAbilityLayer;
import forge.game.trigger.Trigger; import forge.game.trigger.Trigger;
import forge.game.trigger.TriggerHandler; import forge.game.trigger.TriggerHandler;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.util.collect.FCollectionView;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import forge.game.ability.effects.AnimateEffectBase;
/** /**
* <p> * <p>
@@ -363,11 +363,11 @@ public class AnimateAi extends SpellAbilityAi {
card.setSickness(hasOriginalCardSickness); card.setSickness(hasOriginalCardSickness);
// AF specific sa // AF specific sa
int power = -1; Integer power = null;
if (sa.hasParam("Power")) { if (sa.hasParam("Power")) {
power = AbilityUtils.calculateAmount(source, sa.getParam("Power"), sa); power = AbilityUtils.calculateAmount(source, sa.getParam("Power"), sa);
} }
int toughness = -1; Integer toughness = null;
if (sa.hasParam("Toughness")) { if (sa.hasParam("Toughness")) {
toughness = AbilityUtils.calculateAmount(source, sa.getParam("Toughness"), sa); toughness = AbilityUtils.calculateAmount(source, sa.getParam("Toughness"), sa);
} }
@@ -453,65 +453,7 @@ public class AnimateAi extends SpellAbilityAi {
sVars.addAll(Arrays.asList(sa.getParam("sVars").split(","))); sVars.addAll(Arrays.asList(sa.getParam("sVars").split(",")));
} }
// duplicating AnimateEffectBase.doAnimate AnimateEffectBase.doAnimate(card, sa, power, toughness, types, removeTypes, finalDesc, keywords, removeKeywords, hiddenKeywords, timestamp);
boolean removeSuperTypes = false;
boolean removeCardTypes = false;
boolean removeSubTypes = false;
boolean removeCreatureTypes = false;
boolean removeArtifactTypes = false;
if (sa.hasParam("OverwriteTypes")) {
removeSuperTypes = true;
removeCardTypes = true;
removeSubTypes = true;
removeCreatureTypes = true;
removeArtifactTypes = true;
}
if (sa.hasParam("KeepSupertypes")) {
removeSuperTypes = false;
}
if (sa.hasParam("KeepCardTypes")) {
removeCardTypes = false;
}
if (sa.hasParam("RemoveSuperTypes")) {
removeSuperTypes = true;
}
if (sa.hasParam("RemoveCardTypes")) {
removeCardTypes = true;
}
if (sa.hasParam("RemoveSubTypes")) {
removeSubTypes = true;
}
if (sa.hasParam("RemoveCreatureTypes")) {
removeCreatureTypes = true;
}
if (sa.hasParam("RemoveArtifactTypes")) {
removeArtifactTypes = true;
}
if ((power != -1) || (toughness != -1)) {
card.addNewPT(power, toughness, timestamp);
}
if (!types.isEmpty() || !removeTypes.isEmpty() || removeCreatureTypes) {
card.addChangedCardTypes(types, removeTypes, removeSuperTypes, removeCardTypes, removeSubTypes,
removeCreatureTypes, removeArtifactTypes, timestamp);
}
card.addChangedCardKeywords(keywords, removeKeywords, sa.hasParam("RemoveAllAbilities"), timestamp);
for (final String k : hiddenKeywords) {
card.addHiddenExtrinsicKeyword(k);
}
card.addColor(finalDesc, !sa.hasParam("OverwriteColors"), timestamp);
// back to duplicating AnimateEffect.resolve // back to duplicating AnimateEffect.resolve
// TODO will all these abilities/triggers/replacements/etc. lead to // TODO will all these abilities/triggers/replacements/etc. lead to
@@ -521,10 +463,14 @@ public class AnimateAi extends SpellAbilityAi {
boolean clearAbilities = sa.hasParam("OverwriteAbilities"); boolean clearAbilities = sa.hasParam("OverwriteAbilities");
boolean clearSpells = sa.hasParam("OverwriteSpells"); boolean clearSpells = sa.hasParam("OverwriteSpells");
boolean removeAll = sa.hasParam("RemoveAllAbilities"); boolean removeAll = sa.hasParam("RemoveAllAbilities");
boolean removeIntrinsic = sa.hasParam("RemoveIntrinsicAbilities");
if (clearAbilities || clearSpells || removeAll) { if (clearAbilities || clearSpells || removeAll) {
for (final SpellAbility ab : card.getSpellAbilities()) { for (final SpellAbility ab : card.getSpellAbilities()) {
if (removeAll || (ab.isAbility() && clearAbilities) || (ab.isSpell() && clearSpells)) { if (removeAll
|| (ab.isIntrinsic() && removeIntrinsic && !ab.isBasicLandAbility())
|| (ab.isAbility() && clearAbilities)
|| (ab.isSpell() && clearSpells)) {
card.removeSpellAbility(ab); card.removeSpellAbility(ab);
removedAbilities.add(ab); removedAbilities.add(ab);
} }
@@ -565,9 +511,11 @@ public class AnimateAi extends SpellAbilityAi {
// suppress triggers from the animated card // suppress triggers from the animated card
final List<Trigger> removedTriggers = Lists.newArrayList(); final List<Trigger> removedTriggers = Lists.newArrayList();
if (sa.hasParam("OverwriteTriggers") || removeAll) { if (sa.hasParam("OverwriteTriggers") || removeAll || removeIntrinsic) {
final FCollectionView<Trigger> triggersToRemove = card.getTriggers(); for (final Trigger trigger : card.getTriggers()) {
for (final Trigger trigger : triggersToRemove) { if (removeIntrinsic && !trigger.isIntrinsic()) {
continue;
}
trigger.setSuppressed(true); trigger.setSuppressed(true);
removedTriggers.add(trigger); removedTriggers.add(trigger);
} }
@@ -603,9 +551,11 @@ public class AnimateAi extends SpellAbilityAi {
// suppress static abilities from the animated card // suppress static abilities from the animated card
final List<StaticAbility> removedStatics = Lists.newArrayList(); final List<StaticAbility> removedStatics = Lists.newArrayList();
if (sa.hasParam("OverwriteStatics") || removeAll) { if (sa.hasParam("OverwriteStatics") || removeAll || removeIntrinsic) {
final FCollectionView<StaticAbility> staticsToRemove = card.getStaticAbilities(); for (final StaticAbility stAb : card.getStaticAbilities()) {
for (final StaticAbility stAb : staticsToRemove) { if (removeIntrinsic && !stAb.isIntrinsic()) {
continue;
}
stAb.setTemporarilySuppressed(true); stAb.setTemporarilySuppressed(true);
removedStatics.add(stAb); removedStatics.add(stAb);
} }
@@ -613,8 +563,11 @@ public class AnimateAi extends SpellAbilityAi {
// suppress static abilities from the animated card // suppress static abilities from the animated card
final List<ReplacementEffect> removedReplacements = Lists.newArrayList(); final List<ReplacementEffect> removedReplacements = Lists.newArrayList();
if (sa.hasParam("OverwriteReplacements") || removeAll) { if (sa.hasParam("OverwriteReplacements") || removeAll || removeIntrinsic) {
for (final ReplacementEffect re : card.getReplacementEffects()) { for (final ReplacementEffect re : card.getReplacementEffects()) {
if (removeIntrinsic && !re.isIntrinsic()) {
continue;
}
re.setTemporarilySuppressed(true); re.setTemporarilySuppressed(true);
removedReplacements.add(re); removedReplacements.add(re);
} }

View File

@@ -32,19 +32,24 @@ public class CardChangedType {
private final boolean removeSuperTypes; private final boolean removeSuperTypes;
private final boolean removeCardTypes; private final boolean removeCardTypes;
private final boolean removeSubTypes; private final boolean removeSubTypes;
private final boolean removeLandTypes;
private final boolean removeCreatureTypes; private final boolean removeCreatureTypes;
private final boolean removeArtifactTypes; private final boolean removeArtifactTypes;
private final boolean removeEnchantmentTypes;
public CardChangedType(final CardType addType0, final CardType removeType0, final boolean removeSuperType0, public CardChangedType(final CardType addType0, final CardType removeType0, final boolean removeSuperType0,
final boolean removeCardType0, final boolean removeSubType0, final boolean removeCreatureType0, final boolean removeCardType0, final boolean removeSubType0, final boolean removeLandType0,
final boolean removeArtifactType0) { final boolean removeCreatureType0, final boolean removeArtifactType0,
final boolean removeEnchantmentTypes0) {
addType = addType0; addType = addType0;
removeType = removeType0; removeType = removeType0;
removeSuperTypes = removeSuperType0; removeSuperTypes = removeSuperType0;
removeCardTypes = removeCardType0; removeCardTypes = removeCardType0;
removeSubTypes = removeSubType0; removeSubTypes = removeSubType0;
removeLandTypes = removeLandType0;
removeCreatureTypes = removeCreatureType0; removeCreatureTypes = removeCreatureType0;
removeArtifactTypes = removeArtifactType0; removeArtifactTypes = removeArtifactType0;
removeEnchantmentTypes = removeEnchantmentTypes0;
} }
public final CardType getAddType() { public final CardType getAddType() {
@@ -67,6 +72,10 @@ public class CardChangedType {
return removeSubTypes; return removeSubTypes;
} }
public final boolean isRemoveLandTypes() {
return removeLandTypes;
}
public final boolean isRemoveCreatureTypes() { public final boolean isRemoveCreatureTypes() {
return removeCreatureTypes; return removeCreatureTypes;
} }
@@ -74,4 +83,8 @@ public class CardChangedType {
public final boolean isRemoveArtifactTypes() { public final boolean isRemoveArtifactTypes() {
return removeArtifactTypes; return removeArtifactTypes;
} }
public final boolean isRemoveEnchantmentTypes() {
return removeEnchantmentTypes;
}
} }

View File

@@ -190,7 +190,7 @@ public final class CardType implements Comparable<CardType>, CardTypeView {
public boolean setCreatureTypes(Collection<String> ctypes) { public boolean setCreatureTypes(Collection<String> ctypes) {
// if it isn't a creature then this has no effect // if it isn't a creature then this has no effect
if (!coreTypes.contains(CoreType.Creature)) { if (!isCreature() && !isTribal()) {
return false; return false;
} }
boolean changed = Iterables.removeIf(subtypes, Predicates.IS_CREATURE_TYPE); boolean changed = Iterables.removeIf(subtypes, Predicates.IS_CREATURE_TYPE);
@@ -236,7 +236,7 @@ public final class CardType implements Comparable<CardType>, CardTypeView {
final Set<String> landTypes = Sets.newHashSet(); final Set<String> landTypes = Sets.newHashSet();
if (isLand()) { if (isLand()) {
for (final String t : subtypes) { for (final String t : subtypes) {
if (isALandType(t) || isABasicLandType(t)) { if (isALandType(t)) {
landTypes.add(t); landTypes.add(t);
} }
} }
@@ -435,6 +435,9 @@ public final class CardType implements Comparable<CardType>, CardTypeView {
@Override @Override
public CardTypeView getTypeWithChanges(final Iterable<CardChangedType> changedCardTypes) { public CardTypeView getTypeWithChanges(final Iterable<CardChangedType> changedCardTypes) {
CardType newType = null; CardType newType = null;
if (Iterables.isEmpty(changedCardTypes)) {
return this;
}
// we assume that changes are already correctly ordered (taken from TreeMap.values()) // we assume that changes are already correctly ordered (taken from TreeMap.values())
for (final CardChangedType ct : changedCardTypes) { for (final CardChangedType ct : changedCardTypes) {
if(null == newType) if(null == newType)
@@ -449,7 +452,10 @@ public final class CardType implements Comparable<CardType>, CardTypeView {
if (ct.isRemoveSubTypes()) { if (ct.isRemoveSubTypes()) {
newType.subtypes.clear(); newType.subtypes.clear();
} }
else { else if (!newType.subtypes.isEmpty()) {
if (ct.isRemoveLandTypes()) {
Iterables.removeIf(newType.subtypes, Predicates.IS_LAND_TYPE);
}
if (ct.isRemoveCreatureTypes()) { if (ct.isRemoveCreatureTypes()) {
Iterables.removeIf(newType.subtypes, Predicates.IS_CREATURE_TYPE); Iterables.removeIf(newType.subtypes, Predicates.IS_CREATURE_TYPE);
// need to remove AllCreatureTypes too when removing creature Types // need to remove AllCreatureTypes too when removing creature Types
@@ -458,6 +464,9 @@ public final class CardType implements Comparable<CardType>, CardTypeView {
if (ct.isRemoveArtifactTypes()) { if (ct.isRemoveArtifactTypes()) {
Iterables.removeIf(newType.subtypes, Predicates.IS_ARTIFACT_TYPE); Iterables.removeIf(newType.subtypes, Predicates.IS_ARTIFACT_TYPE);
} }
if (ct.isRemoveEnchantmentTypes()) {
Iterables.removeIf(newType.subtypes, Predicates.IS_ENCHANTMENT_TYPE);
}
} }
if (ct.getRemoveType() != null) { if (ct.getRemoveType() != null) {
newType.removeAll(ct.getRemoveType()); newType.removeAll(ct.getRemoveType());
@@ -466,6 +475,28 @@ public final class CardType implements Comparable<CardType>, CardTypeView {
newType.addAll(ct.getAddType()); newType.addAll(ct.getAddType());
} }
} }
// sanisfy subtypes
if (newType != null && !newType.subtypes.isEmpty()) {
if (!newType.isCreature() && !newType.isTribal()) {
Iterables.removeIf(newType.subtypes, Predicates.IS_CREATURE_TYPE);
newType.subtypes.remove("AllCreatureTypes");
}
if (!newType.isLand()) {
Iterables.removeIf(newType.subtypes, Predicates.IS_LAND_TYPE);
}
if (!newType.isArtifact()) {
Iterables.removeIf(newType.subtypes, Predicates.IS_ARTIFACT_TYPE);
}
if (!newType.isEnchantment()) {
Iterables.removeIf(newType.subtypes, Predicates.IS_ENCHANTMENT_TYPE);
}
if (!newType.isInstant() && !newType.isSorcery()) {
Iterables.removeIf(newType.subtypes, Predicates.IS_SPELL_TYPE);
}
if (!newType.isPlaneswalker() && !newType.isEmblem()) {
Iterables.removeIf(newType.subtypes, Predicates.IS_WALKER_TYPE);
}
}
return newType == null ? this : newType; return newType == null ? this : newType;
} }
@@ -574,6 +605,13 @@ public final class CardType implements Comparable<CardType>, CardTypeView {
public static final BiMap<String,String> singularTypes = pluralTypes.inverse(); public static final BiMap<String,String> singularTypes = pluralTypes.inverse();
} }
public static class Predicates { public static class Predicates {
public static Predicate<String> IS_LAND_TYPE = new Predicate<String>() {
@Override
public boolean apply(String input) {
return CardType.isALandType(input);
}
};
public static Predicate<String> IS_ARTIFACT_TYPE = new Predicate<String>() { public static Predicate<String> IS_ARTIFACT_TYPE = new Predicate<String>() {
@Override @Override
public boolean apply(String input) { public boolean apply(String input) {
@@ -587,6 +625,27 @@ public final class CardType implements Comparable<CardType>, CardTypeView {
return CardType.isACreatureType(input); return CardType.isACreatureType(input);
} }
}; };
public static Predicate<String> IS_ENCHANTMENT_TYPE = new Predicate<String>() {
@Override
public boolean apply(String input) {
return CardType.isAnEnchantmentType(input);
}
};
public static Predicate<String> IS_SPELL_TYPE = new Predicate<String>() {
@Override
public boolean apply(String input) {
return CardType.isASpellType(input);
}
};
public static Predicate<String> IS_WALKER_TYPE = new Predicate<String>() {
@Override
public boolean apply(String input) {
return CardType.isAPlaneswalkerType(input);
}
};
} }
@@ -656,7 +715,7 @@ public final class CardType implements Comparable<CardType>, CardTypeView {
} }
public static boolean isALandType(final String cardType) { public static boolean isALandType(final String cardType) {
return (Constant.LAND_TYPES.contains(cardType)); return Constant.LAND_TYPES.contains(cardType) || isABasicLandType(cardType);
} }
public static boolean isAPlaneswalkerType(final String cardType) { public static boolean isAPlaneswalkerType(final String cardType) {
@@ -667,6 +726,13 @@ public final class CardType implements Comparable<CardType>, CardTypeView {
return (Constant.BASIC_TYPES.contains(cardType)); return (Constant.BASIC_TYPES.contains(cardType));
} }
public static boolean isAnEnchantmentType(final String cardType) {
return (Constant.ENCHANTMENT_TYPES.contains(cardType));
}
public static boolean isASpellType(final String cardType) {
return (Constant.SPELL_TYPES.contains(cardType));
}
/** /**
* If the input is a plural type, return the corresponding singular form. * If the input is a plural type, return the corresponding singular form.

View File

@@ -314,7 +314,11 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView {
list.addAll(p.getCardsIn(presentZone)); list.addAll(p.getCardsIn(presentZone));
} }
} }
if (presentPlayer.equals("Any")) {
for (final Player p : this.getHostCard().getController().getAllies()) {
list.addAll(p.getCardsIn(presentZone));
}
}
list = CardLists.getValidCards(list, sIsPresent.split(","), this.getHostCard().getController(), this.getHostCard(), null); list = CardLists.getValidCards(list, sIsPresent.split(","), this.getHostCard().getController(), this.getHostCard(), null);
int right = 1; int right = 1;

View File

@@ -1036,7 +1036,7 @@ public class StaticEffect {
} }
// remove abilities // remove abilities
if (params.containsKey("RemoveAllAbilities")) { if (params.containsKey("RemoveAllAbilities") || params.containsKey("RemoveIntrinsicAbilities")) {
affectedCard.unSuppressCardTraits(); affectedCard.unSuppressCardTraits();
} }

View File

@@ -25,6 +25,8 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import com.google.common.collect.ImmutableList;
public class AnimateAllEffect extends AnimateEffectBase { public class AnimateAllEffect extends AnimateEffectBase {
@Override @Override
@@ -144,6 +146,9 @@ public class AnimateAllEffect extends AnimateEffectBase {
list = CardLists.getValidCards(list, valid.split(","), host.getController(), host, sa); list = CardLists.getValidCards(list, valid.split(","), host.getController(), host, sa);
boolean removeAll = sa.hasParam("RemoveAllAbilities");
boolean removeIntrinsic = sa.hasParam("RemoveIntrinsicAbilities");
for (final Card c : list) { for (final Card c : list) {
doAnimate(c, sa, power, toughness, types, removeTypes, finalDesc, doAnimate(c, sa, power, toughness, types, removeTypes, finalDesc,
keywords, removeKeywords, hiddenKeywords, timestamp); keywords, removeKeywords, hiddenKeywords, timestamp);
@@ -161,11 +166,14 @@ public class AnimateAllEffect extends AnimateEffectBase {
// remove abilities // remove abilities
final List<SpellAbility> removedAbilities = new ArrayList<SpellAbility>(); final List<SpellAbility> removedAbilities = new ArrayList<SpellAbility>();
if (sa.hasParam("OverwriteAbilities") || sa.hasParam("RemoveAllAbilities")) { if (sa.hasParam("OverwriteAbilities") || removeAll || removeIntrinsic) {
for (final SpellAbility ab : c.getSpellAbilities()) { for (final SpellAbility ab : c.getSpellAbilities()) {
if (ab.isAbility()) { if (ab.isAbility()) {
c.removeSpellAbility(ab); if (removeAll
removedAbilities.add(ab); || (ab.isIntrinsic() && removeIntrinsic && !ab.isBasicLandAbility())) {
ab.setTemporarilySuppressed(true);
removedAbilities.add(ab);
}
} }
} }
} }
@@ -190,19 +198,24 @@ public class AnimateAllEffect extends AnimateEffectBase {
// suppress triggers from the animated card // suppress triggers from the animated card
final List<Trigger> removedTriggers = new ArrayList<Trigger>(); final List<Trigger> removedTriggers = new ArrayList<Trigger>();
if (sa.hasParam("OverwriteTriggers") || sa.hasParam("RemoveAllAbilities")) { if (sa.hasParam("OverwriteTriggers") || removeAll || removeIntrinsic) {
final FCollectionView<Trigger> triggersToRemove = c.getTriggers(); final FCollectionView<Trigger> triggersToRemove = c.getTriggers();
for (final Trigger trigger : triggersToRemove) { for (final Trigger trigger : triggersToRemove) {
trigger.setSuppressed(true); if (removeIntrinsic && !trigger.isIntrinsic()) {
continue;
}
trigger.setSuppressed(true); // why this not TemporarilySuppressed?
removedTriggers.add(trigger); removedTriggers.add(trigger);
} }
} }
// suppress static abilities from the animated card // suppress static abilities from the animated card
final List<StaticAbility> removedStatics = new ArrayList<StaticAbility>(); final List<StaticAbility> removedStatics = new ArrayList<StaticAbility>();
if (sa.hasParam("OverwriteStatics") || sa.hasParam("RemoveAllAbilities")) { if (sa.hasParam("OverwriteStatics") || removeAll || removeIntrinsic) {
final FCollectionView<StaticAbility> staticsToRemove = c.getStaticAbilities(); for (final StaticAbility stAb : c.getStaticAbilities()) {
for (final StaticAbility stAb : staticsToRemove) { if (removeIntrinsic && !stAb.isIntrinsic()) {
continue;
}
stAb.setTemporarilySuppressed(true); stAb.setTemporarilySuppressed(true);
removedStatics.add(stAb); removedStatics.add(stAb);
} }
@@ -210,9 +223,11 @@ public class AnimateAllEffect extends AnimateEffectBase {
// suppress static abilities from the animated card // suppress static abilities from the animated card
final List<ReplacementEffect> removedReplacements = new ArrayList<ReplacementEffect>(); final List<ReplacementEffect> removedReplacements = new ArrayList<ReplacementEffect>();
if (sa.hasParam("OverwriteReplacements") || sa.hasParam("RemoveAllAbilities")) { if (sa.hasParam("OverwriteReplacements") || removeAll || removeIntrinsic) {
final FCollectionView<ReplacementEffect> replacementsToRemove = c.getReplacementEffects(); for (final ReplacementEffect re : c.getReplacementEffects()) {
for (final ReplacementEffect re : replacementsToRemove) { if (removeIntrinsic && !re.isIntrinsic()) {
continue;
}
re.setTemporarilySuppressed(true); re.setTemporarilySuppressed(true);
removedReplacements.add(re); removedReplacements.add(re);
} }
@@ -234,8 +249,11 @@ public class AnimateAllEffect extends AnimateEffectBase {
public void run() { public void run() {
doUnanimate(c, sa, finalDesc, hiddenKeywords, doUnanimate(c, sa, finalDesc, hiddenKeywords,
addedAbilities, addedTriggers, addedReplacements, addedAbilities, addedTriggers, addedReplacements,
false, removedAbilities, timestamp); ImmutableList.of(), timestamp);
for (final SpellAbility sa : removedAbilities) {
sa.setTemporarilySuppressed(false);
}
// give back suppressed triggers // give back suppressed triggers
for (final Trigger t : removedTriggers) { for (final Trigger t : removedTriggers) {
t.setSuppressed(false); t.setSuppressed(false);

View File

@@ -18,7 +18,6 @@ import forge.game.spellability.SpellAbility;
import forge.game.staticability.StaticAbility; import forge.game.staticability.StaticAbility;
import forge.game.trigger.Trigger; import forge.game.trigger.Trigger;
import forge.game.trigger.TriggerHandler; import forge.game.trigger.TriggerHandler;
import forge.util.collect.FCollectionView;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@@ -162,21 +161,20 @@ public class AnimateEffect extends AnimateEffectBase {
boolean clearAbilities = sa.hasParam("OverwriteAbilities"); boolean clearAbilities = sa.hasParam("OverwriteAbilities");
boolean clearSpells = sa.hasParam("OverwriteSpells"); boolean clearSpells = sa.hasParam("OverwriteSpells");
boolean removeAll = sa.hasParam("RemoveAllAbilities"); boolean removeAll = sa.hasParam("RemoveAllAbilities");
boolean removeIntrinsic = sa.hasParam("RemoveIntrinsicAbilities");
if (clearAbilities || clearSpells || removeAll) { if (clearAbilities || clearSpells || removeAll) {
for (final SpellAbility ab : c.getSpellAbilities()) { for (final SpellAbility ab : c.getSpellAbilities()) {
if (removeAll || (ab.isAbility() && clearAbilities) if (removeAll
|| (ab.isIntrinsic() && removeIntrinsic && !ab.isBasicLandAbility())
|| (ab.isAbility() && clearAbilities)
|| (ab.isSpell() && clearSpells)) { || (ab.isSpell() && clearSpells)) {
ab.setTemporarilySuppressed(true);
removedAbilities.add(ab); removedAbilities.add(ab);
} }
} }
} }
// Can't rmeove SAs in foreach loop that finds them
for (final SpellAbility ab : removedAbilities) {
c.removeSpellAbility(ab);
}
if (sa.hasParam("RemoveThisAbility") && !removedAbilities.contains(sa)) { if (sa.hasParam("RemoveThisAbility") && !removedAbilities.contains(sa)) {
c.removeSpellAbility(sa); c.removeSpellAbility(sa);
removedAbilities.add(sa); removedAbilities.add(sa);
@@ -215,20 +213,23 @@ public class AnimateEffect extends AnimateEffectBase {
// suppress triggers from the animated card // suppress triggers from the animated card
final List<Trigger> removedTriggers = Lists.newArrayList(); final List<Trigger> removedTriggers = Lists.newArrayList();
if (sa.hasParam("OverwriteTriggers") || removeAll) { if (sa.hasParam("OverwriteTriggers") || removeAll || removeIntrinsic) {
final FCollectionView<Trigger> triggersToRemove = c.getTriggers(); for (final Trigger trigger : c.getTriggers()) {
for (final Trigger trigger : triggersToRemove) { if (removeIntrinsic && !trigger.isIntrinsic()) {
trigger.setSuppressed(true); continue;
}
trigger.setSuppressed(true); // why this not TemporarilySuppressed?
removedTriggers.add(trigger); removedTriggers.add(trigger);
} }
} }
// give static abilities (should only be used by cards to give // give static abilities (should only be used by cards to give
// itself a static ability) // itself a static ability)
final List<StaticAbility> addedStaticAbilities = Lists.newArrayList();
if (stAbs.size() > 0) { if (stAbs.size() > 0) {
for (final String s : stAbs) { for (final String s : stAbs) {
final String actualAbility = source.getSVar(s); final String actualAbility = source.getSVar(s);
c.addStaticAbility(actualAbility); addedStaticAbilities.add(c.addStaticAbility(actualAbility));
} }
} }
@@ -248,9 +249,11 @@ public class AnimateEffect extends AnimateEffectBase {
// suppress static abilities from the animated card // suppress static abilities from the animated card
final List<StaticAbility> removedStatics = Lists.newArrayList(); final List<StaticAbility> removedStatics = Lists.newArrayList();
if (sa.hasParam("OverwriteStatics") || removeAll) { if (sa.hasParam("OverwriteStatics") || removeAll || removeIntrinsic) {
final FCollectionView<StaticAbility> staticsToRemove = c.getStaticAbilities(); for (final StaticAbility stAb : c.getStaticAbilities()) {
for (final StaticAbility stAb : staticsToRemove) { if (removeIntrinsic && !stAb.isIntrinsic()) {
continue;
}
stAb.setTemporarilySuppressed(true); stAb.setTemporarilySuppressed(true);
removedStatics.add(stAb); removedStatics.add(stAb);
} }
@@ -258,8 +261,11 @@ public class AnimateEffect extends AnimateEffectBase {
// suppress static abilities from the animated card // suppress static abilities from the animated card
final List<ReplacementEffect> removedReplacements = Lists.newArrayList(); final List<ReplacementEffect> removedReplacements = Lists.newArrayList();
if (sa.hasParam("OverwriteReplacements") || removeAll) { if (sa.hasParam("OverwriteReplacements") || removeAll || removeIntrinsic) {
for (final ReplacementEffect re : c.getReplacementEffects()) { for (final ReplacementEffect re : c.getReplacementEffects()) {
if (removeIntrinsic && !re.isIntrinsic()) {
continue;
}
re.setTemporarilySuppressed(true); re.setTemporarilySuppressed(true);
removedReplacements.add(re); removedReplacements.add(re);
} }
@@ -272,8 +278,6 @@ public class AnimateEffect extends AnimateEffectBase {
} }
} }
final boolean givesStAbs = (stAbs.size() > 0);
final GameCommand unanimate = new GameCommand() { final GameCommand unanimate = new GameCommand() {
private static final long serialVersionUID = -5861759814760561373L; private static final long serialVersionUID = -5861759814760561373L;
@@ -281,9 +285,13 @@ public class AnimateEffect extends AnimateEffectBase {
public void run() { public void run() {
doUnanimate(c, sa, finalDesc, hiddenKeywords, doUnanimate(c, sa, finalDesc, hiddenKeywords,
addedAbilities, addedTriggers, addedReplacements, addedAbilities, addedTriggers, addedReplacements,
givesStAbs, removedAbilities, timestamp); addedStaticAbilities, timestamp);
game.fireEvent(new GameEventCardStatsChanged(c)); game.fireEvent(new GameEventCardStatsChanged(c));
for (final SpellAbility sa : removedAbilities) {
sa.setTemporarilySuppressed(false);
}
// give back suppressed triggers // give back suppressed triggers
for (final Trigger t : removedTriggers) { for (final Trigger t : removedTriggers) {
t.setSuppressed(false); t.setSuppressed(false);

View File

@@ -24,11 +24,10 @@ import forge.game.replacement.ReplacementEffect;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.game.staticability.StaticAbility; import forge.game.staticability.StaticAbility;
import forge.game.trigger.Trigger; import forge.game.trigger.Trigger;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public abstract class AnimateEffectBase extends SpellAbilityEffect { public abstract class AnimateEffectBase extends SpellAbilityEffect {
void doAnimate(final Card c, final SpellAbility sa, final Integer power, final Integer toughness, public static void doAnimate(final Card c, final SpellAbility sa, final Integer power, final Integer toughness,
final CardType addType, final CardType removeType, final String colors, final CardType addType, final CardType removeType, final String colors,
final List<String> keywords, final List<String> removeKeywords, final List<String> keywords, final List<String> removeKeywords,
final List<String> hiddenKeywords, final long timestamp) { final List<String> hiddenKeywords, final long timestamp) {
@@ -36,15 +35,19 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect {
boolean removeSuperTypes = false; boolean removeSuperTypes = false;
boolean removeCardTypes = false; boolean removeCardTypes = false;
boolean removeSubTypes = false; boolean removeSubTypes = false;
boolean removeLandTypes = false;
boolean removeCreatureTypes = false; boolean removeCreatureTypes = false;
boolean removeArtifactTypes = false; boolean removeArtifactTypes = false;
boolean removeEnchantmentTypes = false;
if (sa.hasParam("OverwriteTypes")) { if (sa.hasParam("OverwriteTypes")) {
removeSuperTypes = true; removeSuperTypes = true;
removeCardTypes = true; removeCardTypes = true;
removeSubTypes = true; removeSubTypes = true;
removeLandTypes = true;
removeCreatureTypes = true; removeCreatureTypes = true;
removeArtifactTypes = true; removeArtifactTypes = true;
removeEnchantmentTypes = true;
} }
if (sa.hasParam("KeepSupertypes")) { if (sa.hasParam("KeepSupertypes")) {
@@ -57,6 +60,10 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect {
if (sa.hasParam("KeepSubtypes")) { if (sa.hasParam("KeepSubtypes")) {
removeSubTypes = false; removeSubTypes = false;
removeLandTypes = false;
removeCreatureTypes = false;
removeArtifactTypes = false;
removeEnchantmentTypes = false;
} }
if (sa.hasParam("RemoveSuperTypes")) { if (sa.hasParam("RemoveSuperTypes")) {
@@ -71,23 +78,30 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect {
removeSubTypes = true; removeSubTypes = true;
} }
if (sa.hasParam("RemoveLandTypes")) {
removeCreatureTypes = true;
}
if (sa.hasParam("RemoveCreatureTypes")) { if (sa.hasParam("RemoveCreatureTypes")) {
removeCreatureTypes = true; removeCreatureTypes = true;
} }
if (sa.hasParam("RemoveArtifactTypes")) { if (sa.hasParam("RemoveArtifactTypes")) {
removeArtifactTypes = true; removeArtifactTypes = true;
} }
if (sa.hasParam("RemoveEnchantmentTypes")) {
removeEnchantmentTypes = true;
}
if ((power != null) || (toughness != null)) { if ((power != null) || (toughness != null)) {
c.addNewPT(power, toughness, timestamp); c.addNewPT(power, toughness, timestamp);
} }
if (!addType.isEmpty() || !removeType.isEmpty() || removeCreatureTypes) { if (!addType.isEmpty() || !removeType.isEmpty() || removeCreatureTypes) {
c.addChangedCardTypes(addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes, c.addChangedCardTypes(addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes,
removeCreatureTypes, removeArtifactTypes, timestamp); removeLandTypes, removeCreatureTypes, removeArtifactTypes, removeEnchantmentTypes, timestamp);
} }
c.addChangedCardKeywords(keywords, removeKeywords, sa.hasParam("RemoveAllAbilities"), timestamp); c.addChangedCardKeywords(keywords, removeKeywords,
sa.hasParam("RemoveAllAbilities"), sa.hasParam("RemoveIntrinsicAbilities"), timestamp);
for (final String k : hiddenKeywords) { for (final String k : hiddenKeywords) {
c.addHiddenExtrinsicKeyword(k); c.addHiddenExtrinsicKeyword(k);
@@ -114,10 +128,10 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect {
* @param timestamp * @param timestamp
* a long. * a long.
*/ */
void doUnanimate(final Card c, SpellAbility sa, final String colorDesc, static void doUnanimate(final Card c, SpellAbility sa, final String colorDesc,
final List<String> hiddenKeywords, final List<SpellAbility> addedAbilities, final List<String> hiddenKeywords, final List<SpellAbility> addedAbilities,
final List<Trigger> addedTriggers, final List<ReplacementEffect> addedReplacements, final List<Trigger> addedTriggers, final List<ReplacementEffect> addedReplacements,
final boolean givesStAbs, final List<SpellAbility> removedAbilities, final long timestamp) { final List<StaticAbility> addedStaticAbilities, final long timestamp) {
if (sa.hasParam("LastsIndefinitely")) { if (sa.hasParam("LastsIndefinitely")) {
return; return;
@@ -127,16 +141,7 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect {
c.removeChangedCardKeywords(timestamp); c.removeChangedCardKeywords(timestamp);
// remove all static abilities c.removeChangedCardTypes(timestamp);
if (givesStAbs) {
c.setStaticAbilities(new ArrayList<StaticAbility>());
}
if (sa.hasParam("Types") || sa.hasParam("RemoveTypes")
|| sa.hasParam("RemoveCreatureTypes") || sa.hasParam("RemoveArtifactTypes")) {
c.removeChangedCardTypes(timestamp);
}
c.removeColor(timestamp); c.removeColor(timestamp);
for (final String k : hiddenKeywords) { for (final String k : hiddenKeywords) {
@@ -147,10 +152,6 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect {
c.removeSpellAbility(saAdd); c.removeSpellAbility(saAdd);
} }
for (final SpellAbility saRem : removedAbilities) {
c.addSpellAbility(saRem);
}
for (final Trigger t : addedTriggers) { for (final Trigger t : addedTriggers) {
c.removeTrigger(t); c.removeTrigger(t);
} }
@@ -159,6 +160,10 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect {
c.removeReplacementEffect(rep); c.removeReplacementEffect(rep);
} }
for (final StaticAbility stAb : addedStaticAbilities) {
c.removeStaticAbility(stAb);
}
// any other unanimate cleanup // any other unanimate cleanup
if (!c.isCreature()) { if (!c.isCreature()) {
c.unEquipAllCards(); c.unEquipAllCards();

View File

@@ -350,7 +350,7 @@ public class CopyPermanentEffect extends SpellAbilityEffect {
copyInPlay.setCloneOrigin(host); copyInPlay.setCloneOrigin(host);
sa.getHostCard().addClone(copyInPlay); sa.getHostCard().addClone(copyInPlay);
if (!pumpKeywords.isEmpty()) { if (!pumpKeywords.isEmpty()) {
copyInPlay.addChangedCardKeywords(pumpKeywords, Lists.<String>newArrayList(), false, timestamp); copyInPlay.addChangedCardKeywords(pumpKeywords, Lists.<String>newArrayList(), false, false, timestamp);
} }
crds.add(copyInPlay); crds.add(copyInPlay);
if (sa.hasParam("RememberCopied")) { if (sa.hasParam("RememberCopied")) {

View File

@@ -137,7 +137,7 @@ public class DebuffEffect extends SpellAbilityEffect {
} }
removedKW.addAll(kws); removedKW.addAll(kws);
tgtC.addChangedCardKeywords(addedKW, removedKW, false, timestamp); tgtC.addChangedCardKeywords(addedKW, removedKW, false, false, timestamp);
} }
if (!sa.hasParam("Permanent")) { if (!sa.hasParam("Permanent")) {
game.getEndOfTurn().addUntil(new GameCommand() { game.getEndOfTurn().addUntil(new GameCommand() {

View File

@@ -90,7 +90,7 @@ public class ProtectAllEffect extends SpellAbilityEffect {
for (final Card tgtC : list) { for (final Card tgtC : list) {
if (tgtC.isInPlay()) { if (tgtC.isInPlay()) {
tgtC.addChangedCardKeywords(gainsKWList, ImmutableList.<String>of(), false, timestamp, true); tgtC.addChangedCardKeywords(gainsKWList, null, false, false, timestamp, true);
if (!sa.hasParam("Permanent")) { if (!sa.hasParam("Permanent")) {
// If not Permanent, remove protection at EOT // If not Permanent, remove protection at EOT

View File

@@ -1,6 +1,5 @@
package forge.game.ability.effects; package forge.game.ability.effects;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import forge.GameCommand; import forge.GameCommand;
import forge.card.MagicColor; import forge.card.MagicColor;
@@ -153,7 +152,7 @@ public class ProtectEffect extends SpellAbilityEffect {
continue; continue;
} }
tgtC.addChangedCardKeywords(gainsKWList, ImmutableList.<String>of(), false, timestamp, true); tgtC.addChangedCardKeywords(gainsKWList, null, false, false, timestamp, true);
if (!sa.hasParam("Permanent")) { if (!sa.hasParam("Permanent")) {
// If not Permanent, remove protection at EOT // If not Permanent, remove protection at EOT
@@ -181,7 +180,7 @@ public class ProtectEffect extends SpellAbilityEffect {
continue; continue;
} }
unTgtC.addChangedCardKeywords(gainsKWList, ImmutableList.<String>of(), false, timestamp, true); unTgtC.addChangedCardKeywords(gainsKWList, null, false, false, timestamp, true);
if (!sa.hasParam("Permanent")) { if (!sa.hasParam("Permanent")) {
// If not Permanent, remove protection at EOT // If not Permanent, remove protection at EOT

View File

@@ -13,10 +13,11 @@ import forge.game.spellability.SpellAbility;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.util.TextUtil; import forge.util.TextUtil;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import com.google.common.collect.Lists;
public class PumpAllEffect extends SpellAbilityEffect { public class PumpAllEffect extends SpellAbilityEffect {
private static void applyPumpAll(final SpellAbility sa, private static void applyPumpAll(final SpellAbility sa,
final List<Card> list, final int a, final int d, final List<Card> list, final int a, final int d,
@@ -24,23 +25,18 @@ public class PumpAllEffect extends SpellAbilityEffect {
final Game game = sa.getActivatingPlayer().getGame(); final Game game = sa.getActivatingPlayer().getGame();
final long timestamp = game.getNextTimestamp(); final long timestamp = game.getNextTimestamp();
final List<String> kws = new ArrayList<String>(); final List<String> kws = Lists.newArrayList();
final List<String> hiddenkws = new ArrayList<String>(); final List<String> hiddenkws = Lists.newArrayList();
boolean suspend = false;
for (String kw : keywords) { for (String kw : keywords) {
if (kw.startsWith("HIDDEN")) { if (kw.startsWith("HIDDEN")) {
hiddenkws.add(kw); hiddenkws.add(kw);
} else { } else {
kws.add(kw); kws.add(kw);
if (kw.equals("Suspend")) {
suspend = true;
}
} }
} }
for (final Card tgtC : list) { for (final Card tgtC : list) {
// only pump things in the affected zones. // only pump things in the affected zones.
boolean found = false; boolean found = false;
for (final ZoneType z : affectedZones) { for (final ZoneType z : affectedZones) {
@@ -55,7 +51,7 @@ public class PumpAllEffect extends SpellAbilityEffect {
tgtC.addTempPowerBoost(a); tgtC.addTempPowerBoost(a);
tgtC.addTempToughnessBoost(d); tgtC.addTempToughnessBoost(d);
tgtC.addChangedCardKeywords(kws, new ArrayList<String>(), false, timestamp); tgtC.addChangedCardKeywords(kws, null, false, false, timestamp);
for (String kw : hiddenkws) { for (String kw : hiddenkws) {
tgtC.addHiddenExtrinsicKeyword(kw); tgtC.addHiddenExtrinsicKeyword(kw);
@@ -118,13 +114,11 @@ public class PumpAllEffect extends SpellAbilityEffect {
@Override @Override
public void resolve(final SpellAbility sa) { public void resolve(final SpellAbility sa) {
final List<Player> tgtPlayers = getTargetPlayers(sa); final List<Player> tgtPlayers = getTargetPlayers(sa);
final List<ZoneType> affectedZones = new ArrayList<ZoneType>(); final List<ZoneType> affectedZones = Lists.newArrayList();
final Game game = sa.getActivatingPlayer().getGame(); final Game game = sa.getActivatingPlayer().getGame();
if (sa.hasParam("PumpZone")) { if (sa.hasParam("PumpZone")) {
for (final String zone : sa.getParam("PumpZone").split(",")) { affectedZones.addAll(ZoneType.listValueOf(sa.getParam("PumpZone")));
affectedZones.add(ZoneType.valueOf(zone));
}
} else { } else {
affectedZones.add(ZoneType.Battlefield); affectedZones.add(ZoneType.Battlefield);
} }
@@ -149,7 +143,10 @@ public class PumpAllEffect extends SpellAbilityEffect {
list = (CardCollection)AbilityUtils.filterListByType(list, valid, sa); list = (CardCollection)AbilityUtils.filterListByType(list, valid, sa);
List<String> keywords = sa.hasParam("KW") ? Arrays.asList(sa.getParam("KW").split(" & ")) : new ArrayList<String>(); List<String> keywords = Lists.newArrayList();
if (sa.hasParam("KW")) {
keywords.addAll(Arrays.asList(sa.getParam("KW").split(" & ")));
}
final int a = AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("NumAtt"), sa, true); final int a = AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("NumAtt"), sa, true);
final int d = AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("NumDef"), sa, true); final int d = AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("NumDef"), sa, true);

View File

@@ -52,7 +52,7 @@ public class PumpEffect extends SpellAbilityEffect {
applyTo.addTempPowerBoost(a); applyTo.addTempPowerBoost(a);
applyTo.addTempToughnessBoost(d); applyTo.addTempToughnessBoost(d);
applyTo.addChangedCardKeywords(kws, Lists.<String>newArrayList(), false, timestamp); applyTo.addChangedCardKeywords(kws, Lists.<String>newArrayList(), false, false, timestamp);
if (redrawPT) { applyTo.updatePowerToughnessForView(); } if (redrawPT) { applyTo.updatePowerToughnessForView(); }
if (sa.hasParam("LeaveBattlefield")) { if (sa.hasParam("LeaveBattlefield")) {
@@ -251,7 +251,7 @@ public class PumpEffect extends SpellAbilityEffect {
final String landtype = sa.getParam("DefinedLandwalk"); final String landtype = sa.getParam("DefinedLandwalk");
final Card c = AbilityUtils.getDefinedCards(host, landtype, sa).get(0); final Card c = AbilityUtils.getDefinedCards(host, landtype, sa).get(0);
for (String type : c.getType()) { for (String type : c.getType()) {
if (CardType.isALandType(type) || CardType.isABasicLandType(type)) { if (CardType.isALandType(type)) {
keywords.add(type + "walk"); keywords.add(type + "walk");
} }
} }

View File

@@ -117,7 +117,7 @@ public class Card extends GameEntity implements Comparable<Card> {
// changes by AF animate and continuous static effects - timestamp is the key of maps // changes by AF animate and continuous static effects - timestamp is the key of maps
private final Map<Long, CardChangedType> changedCardTypes = Maps.newTreeMap(); private final Map<Long, CardChangedType> changedCardTypes = Maps.newTreeMap();
private final Map<Long, KeywordsChange> changedCardKeywords = Maps.newTreeMap(); private final Map<Long, KeywordsChange> changedCardKeywords = Maps.newTreeMap();
private final SortedMap<Long, CardColor> changedCardColors = Maps.newTreeMap(); private final Map<Long, CardColor> changedCardColors = Maps.newTreeMap();
// changes that say "replace each instance of one [color,type] by another - timestamp is the key of maps // changes that say "replace each instance of one [color,type] by another - timestamp is the key of maps
private final CardChangedWords changedTextColors = new CardChangedWords(); private final CardChangedWords changedTextColors = new CardChangedWords();
@@ -2776,17 +2776,22 @@ public class Card extends GameEntity implements Comparable<Card> {
public final void addChangedCardTypes(final CardType addType, final CardType removeType, public final void addChangedCardTypes(final CardType addType, final CardType removeType,
final boolean removeSuperTypes, final boolean removeCardTypes, final boolean removeSubTypes, final boolean removeSuperTypes, final boolean removeCardTypes, final boolean removeSubTypes,
final boolean removeCreatureTypes, final boolean removeArtifactTypes, final long timestamp) { final boolean removeLandTypes, final boolean removeCreatureTypes, final boolean removeArtifactTypes,
addChangedCardTypes(addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes, removeCreatureTypes, removeArtifactTypes, timestamp, true); final boolean removeEnchantmentTypes,
final long timestamp) {
addChangedCardTypes(addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes, removeLandTypes,
removeCreatureTypes, removeArtifactTypes, removeEnchantmentTypes, timestamp, true);
} }
public final void addChangedCardTypes(final CardType addType, final CardType removeType, public final void addChangedCardTypes(final CardType addType, final CardType removeType,
final boolean removeSuperTypes, final boolean removeCardTypes, final boolean removeSubTypes, final boolean removeSuperTypes, final boolean removeCardTypes, final boolean removeSubTypes,
final boolean removeCreatureTypes, final boolean removeArtifactTypes, final long timestamp, final boolean updateView) { final boolean removeLandTypes, final boolean removeCreatureTypes, final boolean removeArtifactTypes,
final boolean removeEnchantmentTypes,
final long timestamp, final boolean updateView) {
changedCardTypes.put(timestamp, new CardChangedType( changedCardTypes.put(timestamp, new CardChangedType(
addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes, addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes,
removeCreatureTypes, removeArtifactTypes)); removeLandTypes, removeCreatureTypes, removeArtifactTypes, removeEnchantmentTypes));
if (updateView) { if (updateView) {
currentState.getView().updateType(currentState); currentState.getView().updateType(currentState);
} }
@@ -2794,13 +2799,19 @@ public class Card extends GameEntity implements Comparable<Card> {
public final void addChangedCardTypes(final String[] types, final String[] removeTypes, public final void addChangedCardTypes(final String[] types, final String[] removeTypes,
final boolean removeSuperTypes, final boolean removeCardTypes, final boolean removeSubTypes, final boolean removeSuperTypes, final boolean removeCardTypes, final boolean removeSubTypes,
final boolean removeCreatureTypes, final boolean removeArtifactTypes, final long timestamp) { final boolean removeLandTypes, final boolean removeCreatureTypes, final boolean removeArtifactTypes,
addChangedCardTypes(types, removeTypes, removeSuperTypes, removeCardTypes, removeSubTypes, removeCreatureTypes, removeArtifactTypes, timestamp, true); final boolean removeEnchantmentTypes,
final long timestamp) {
addChangedCardTypes(types, removeTypes, removeSuperTypes, removeCardTypes, removeSubTypes,
removeLandTypes, removeCreatureTypes, removeArtifactTypes, removeEnchantmentTypes,
timestamp, true);
} }
public final void addChangedCardTypes(final String[] types, final String[] removeTypes, public final void addChangedCardTypes(final String[] types, final String[] removeTypes,
final boolean removeSuperTypes, final boolean removeCardTypes, final boolean removeSubTypes, final boolean removeSuperTypes, final boolean removeCardTypes, final boolean removeSubTypes,
final boolean removeCreatureTypes, final boolean removeArtifactTypes, final long timestamp, final boolean updateView) { final boolean removeLandTypes, final boolean removeCreatureTypes, final boolean removeArtifactTypes,
final boolean removeEnchantmentTypes,
final long timestamp, final boolean updateView) {
CardType addType = null; CardType addType = null;
CardType removeType = null; CardType removeType = null;
if (types != null) { if (types != null) {
@@ -2812,7 +2823,8 @@ public class Card extends GameEntity implements Comparable<Card> {
} }
addChangedCardTypes(addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes, addChangedCardTypes(addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes,
removeCreatureTypes, removeArtifactTypes, timestamp, updateView); removeLandTypes, removeCreatureTypes, removeArtifactTypes, removeEnchantmentTypes,
timestamp, updateView);
} }
public final void removeChangedCardTypes(final long timestamp) { public final void removeChangedCardTypes(final long timestamp) {
@@ -3272,23 +3284,25 @@ public class Card extends GameEntity implements Comparable<Card> {
} }
public final void addChangedCardKeywords(final List<String> keywords, final List<String> removeKeywords, public final void addChangedCardKeywords(final List<String> keywords, final List<String> removeKeywords,
final boolean removeAllKeywords, final long timestamp) { final boolean removeAllKeywords, final boolean removeIntrinsicKeywords, final long timestamp) {
addChangedCardKeywords(keywords, removeKeywords, removeAllKeywords, timestamp, true); addChangedCardKeywords(keywords, removeKeywords, removeAllKeywords, removeIntrinsicKeywords, timestamp, true);
} }
public final void addChangedCardKeywords(final List<String> keywords, final List<String> removeKeywords, public final void addChangedCardKeywords(final List<String> keywords, final List<String> removeKeywords,
final boolean removeAllKeywords, final long timestamp, final boolean updateView) { final boolean removeAllKeywords, final boolean removeIntrinsicKeywords, final long timestamp, final boolean updateView) {
keywords.removeAll(getCantHaveOrGainKeyword()); keywords.removeAll(getCantHaveOrGainKeyword());
// if the key already exists - merge entries // if the key already exists - merge entries
final KeywordsChange cks = changedCardKeywords.get(timestamp); final KeywordsChange cks = changedCardKeywords.get(timestamp);
if (cks != null) { if (cks != null) {
final KeywordsChange newCks = cks.merge(keywords, removeKeywords, removeAllKeywords); final KeywordsChange newCks = cks.merge(keywords, removeKeywords,
removeAllKeywords, removeIntrinsicKeywords);
newCks.addKeywordsToCard(this); newCks.addKeywordsToCard(this);
changedCardKeywords.put(timestamp, newCks); changedCardKeywords.put(timestamp, newCks);
} }
else { else {
final KeywordsChange newCks = new KeywordsChange(keywords, removeKeywords, removeAllKeywords); final KeywordsChange newCks = new KeywordsChange(keywords, removeKeywords,
removeAllKeywords, removeIntrinsicKeywords);
newCks.addKeywordsToCard(this); newCks.addKeywordsToCard(this);
changedCardKeywords.put(timestamp, newCks); changedCardKeywords.put(timestamp, newCks);
} }
@@ -3298,20 +3312,24 @@ public class Card extends GameEntity implements Comparable<Card> {
} }
} }
public final void addChangedCardKeywordsInternal(final List<KeywordInterface> keywords, final List<KeywordInterface> removeKeywords, public final void addChangedCardKeywordsInternal(
final boolean removeAllKeywords, final long timestamp, final boolean updateView) { final List<KeywordInterface> keywords, final List<KeywordInterface> removeKeywords,
final boolean removeAllKeywords, final boolean removeIntrinsicKeywords,
final long timestamp, final boolean updateView) {
KeywordCollection list = new KeywordCollection(); KeywordCollection list = new KeywordCollection();
list.insertAll(keywords); list.insertAll(keywords);
list.removeAll(getCantHaveOrGainKeyword()); list.removeAll(getCantHaveOrGainKeyword());
// if the key already exists - merge entries // if the key already exists - merge entries
final KeywordsChange cks = changedCardKeywords.get(timestamp); final KeywordsChange cks = changedCardKeywords.get(timestamp);
if (cks != null) { if (cks != null) {
final KeywordsChange newCks = cks.merge(keywords, removeKeywords, removeAllKeywords); final KeywordsChange newCks = cks.merge(keywords, removeKeywords,
removeAllKeywords, removeIntrinsicKeywords);
newCks.addKeywordsToCard(this); newCks.addKeywordsToCard(this);
changedCardKeywords.put(timestamp, newCks); changedCardKeywords.put(timestamp, newCks);
} }
else { else {
final KeywordsChange newCks = new KeywordsChange(keywords, removeKeywords, removeAllKeywords); final KeywordsChange newCks = new KeywordsChange(keywords, removeKeywords,
removeAllKeywords, removeIntrinsicKeywords);
newCks.addKeywordsToCard(this); newCks.addKeywordsToCard(this);
changedCardKeywords.put(timestamp, newCks); changedCardKeywords.put(timestamp, newCks);
} }
@@ -3322,7 +3340,7 @@ public class Card extends GameEntity implements Comparable<Card> {
} }
public final void addChangedCardKeywords(final String[] keywords, final String[] removeKeywords, public final void addChangedCardKeywords(final String[] keywords, final String[] removeKeywords,
final boolean removeAllKeywords, final long timestamp) { final boolean removeAllKeywords, final boolean removeIntrinsicKeywords, final long timestamp) {
List<String> keywordsList = Lists.newArrayList(); List<String> keywordsList = Lists.newArrayList();
List<String> removeKeywordsList = Lists.newArrayList(); List<String> removeKeywordsList = Lists.newArrayList();
if (keywords != null) { if (keywords != null) {
@@ -3333,7 +3351,8 @@ public class Card extends GameEntity implements Comparable<Card> {
removeKeywordsList = Lists.newArrayList(Arrays.asList(removeKeywords)); removeKeywordsList = Lists.newArrayList(Arrays.asList(removeKeywords));
} }
addChangedCardKeywords(keywordsList, removeKeywordsList, removeAllKeywords, timestamp); addChangedCardKeywords(keywordsList, removeKeywordsList,
removeAllKeywords, removeIntrinsicKeywords, timestamp);
} }
public final KeywordsChange removeChangedCardKeywords(final long timestamp) { public final KeywordsChange removeChangedCardKeywords(final long timestamp) {
@@ -3360,8 +3379,17 @@ public class Card extends GameEntity implements Comparable<Card> {
KeywordCollection keywords = new KeywordCollection(); KeywordCollection keywords = new KeywordCollection();
//final List<KeywordInterface> keywords = Lists.newArrayList(); //final List<KeywordInterface> keywords = Lists.newArrayList();
boolean removeIntrinsic = false;
keywords.insertAll(state.getIntrinsicKeywords()); for (final KeywordsChange ck : changedCardKeywords.values()) {
if (ck.isRemoveIntrinsicKeywords()) {
removeIntrinsic = true;
break;
}
}
if (!removeIntrinsic) {
keywords.insertAll(state.getIntrinsicKeywords());
}
keywords.insertAll(extrinsicKeyword.getValues()); keywords.insertAll(extrinsicKeyword.getValues());
// see if keyword changes are in effect // see if keyword changes are in effect
@@ -3435,7 +3463,8 @@ public class Card extends GameEntity implements Comparable<Card> {
public final void addChangedTextTypeWord(final String originalWord, final String newWord, final Long timestamp) { public final void addChangedTextTypeWord(final String originalWord, final String newWord, final Long timestamp) {
changedTextTypes.add(timestamp, originalWord, newWord); changedTextTypes.add(timestamp, originalWord, newWord);
if (getType().hasSubtype(originalWord)) { if (getType().hasSubtype(originalWord)) {
addChangedCardTypes(CardType.parse(newWord), CardType.parse(originalWord), false, false, false, false, false, timestamp); addChangedCardTypes(CardType.parse(newWord), CardType.parse(originalWord),
false, false, false, false, false, false, false, timestamp);
} }
updateKeywordsChangedText(timestamp); updateKeywordsChangedText(timestamp);
updateChangedText(); updateChangedText();
@@ -3474,7 +3503,7 @@ public class Card extends GameEntity implements Comparable<Card> {
keywordsGrantedByTextChanges.add(newKw); keywordsGrantedByTextChanges.add(newKw);
} }
} }
addChangedCardKeywordsInternal(addKeywords, removeKeywords, false, timestamp, true); addChangedCardKeywordsInternal(addKeywords, removeKeywords, false, false, timestamp, true);
} }
private void updateKeywordsOnRemoveChangedText(final KeywordsChange k) { private void updateKeywordsOnRemoveChangedText(final KeywordsChange k) {
@@ -4738,8 +4767,10 @@ public class Card extends GameEntity implements Comparable<Card> {
public final void animateBestow(final boolean updateView) { public final void animateBestow(final boolean updateView) {
bestowTimestamp = getGame().getNextTimestamp(); bestowTimestamp = getGame().getNextTimestamp();
addChangedCardTypes(new CardType(Collections.singletonList("Aura")), addChangedCardTypes(new CardType(Collections.singletonList("Aura")),
new CardType(Collections.singletonList("Creature")), false, false, false, false, true, bestowTimestamp, updateView); new CardType(Collections.singletonList("Creature")),
addChangedCardKeywords(Collections.singletonList("Enchant creature"), Lists.<String>newArrayList(), false, bestowTimestamp, updateView); false, false, false, false, false, false, true, bestowTimestamp, updateView);
addChangedCardKeywords(Collections.singletonList("Enchant creature"), Lists.<String>newArrayList(),
false, false, bestowTimestamp, updateView);
} }
public final void unanimateBestow() { public final void unanimateBestow() {

View File

@@ -79,6 +79,7 @@ public class CardFactoryUtil {
" | SpellDescription$ Add {" + strcolor + "}."; " | SpellDescription$ Add {" + strcolor + "}.";
SpellAbility sa = AbilityFactory.getAbility(abString, state); SpellAbility sa = AbilityFactory.getAbility(abString, state);
sa.setIntrinsic(true); // always intristic sa.setIntrinsic(true); // always intristic
sa.setBasicLandAbility(true); // to exclude it from other suspress effects
return sa; return sa;
} }
@@ -4153,8 +4154,8 @@ public class CardFactoryUtil {
// So adding redundant YouCtrl to simplify matters even though its unnecessary // So adding redundant YouCtrl to simplify matters even though its unnecessary
String effect = "AB$ Animate | Cost$ tapXType<Any/Creature.YouCtrl+withTotalPowerGE" + power + String effect = "AB$ Animate | Cost$ tapXType<Any/Creature.YouCtrl+withTotalPowerGE" + power +
"> | CostDesc$ Crew " + power + " (Tap any number of creatures you control with total power " + power + "> | CostDesc$ Crew " + power + " (Tap any number of creatures you control with total power " + power +
" or more: | Crew$ True | Secondary$ True | Defined$ Self | Types$ Creature,Artifact | OverwriteTypes$ True | " + " or more: | Crew$ True | Secondary$ True | Defined$ Self | Types$ Creature,Artifact | RemoveCardTypes$ True" +
"KeepSubtypes$ True | KeepSupertypes$ True | SpellDescription$ CARDNAME becomes an artifact creature until end of turn.)"; " | SpellDescription$ CARDNAME becomes an artifact creature until end of turn.)";
final SpellAbility sa = AbilityFactory.getAbility(effect, card); final SpellAbility sa = AbilityFactory.getAbility(effect, card);
sa.setIntrinsic(intrinsic); sa.setIntrinsic(intrinsic);

View File

@@ -132,6 +132,10 @@ public class CardProperty {
if (!controller.equals(sourceController)) { if (!controller.equals(sourceController)) {
return false; return false;
} }
} else if (property.startsWith("YourTeamCtrl")) {
if (controller.getTeam() != sourceController.getTeam()) {
return false;
}
} else if (property.startsWith("YouDontCtrl")) { } else if (property.startsWith("YouDontCtrl")) {
if (controller.equals(sourceController)) { if (controller.equals(sourceController)) {
return false; return false;

View File

@@ -37,6 +37,7 @@ public class KeywordsChange {
private final List<KeywordInterface> removeKeywordInterfaces = Lists.newArrayList(); private final List<KeywordInterface> removeKeywordInterfaces = Lists.newArrayList();
private final List<String> removeKeywords = Lists.newArrayList(); private final List<String> removeKeywords = Lists.newArrayList();
private boolean removeAllKeywords; private boolean removeAllKeywords;
private boolean removeIntrinsicKeywords;
/** /**
* *
@@ -49,7 +50,8 @@ public class KeywordsChange {
public KeywordsChange( public KeywordsChange(
final Iterable<String> keywordList, final Iterable<String> keywordList,
final Collection<String> removeKeywordList, final Collection<String> removeKeywordList,
final boolean removeAll) { final boolean removeAll,
final boolean removeIntrinsic) {
if (keywordList != null) { if (keywordList != null) {
this.keywords.addAll(keywordList); this.keywords.addAll(keywordList);
} }
@@ -59,12 +61,14 @@ public class KeywordsChange {
} }
this.removeAllKeywords = removeAll; this.removeAllKeywords = removeAll;
this.removeIntrinsicKeywords = removeIntrinsic;
} }
public KeywordsChange( public KeywordsChange(
final Collection<KeywordInterface> keywordList, final Collection<KeywordInterface> keywordList,
final Collection<KeywordInterface> removeKeywordInterfaces, final Collection<KeywordInterface> removeKeywordInterfaces,
final boolean removeAll) { final boolean removeAll,
final boolean removeIntrinsic) {
if (keywordList != null) { if (keywordList != null) {
this.keywords.insertAll(keywordList); this.keywords.insertAll(keywordList);
} }
@@ -74,6 +78,7 @@ public class KeywordsChange {
} }
this.removeAllKeywords = removeAll; this.removeAllKeywords = removeAll;
this.removeIntrinsicKeywords = removeIntrinsic;
} }
/** /**
@@ -109,6 +114,10 @@ public class KeywordsChange {
return this.removeAllKeywords; return this.removeAllKeywords;
} }
public final boolean isRemoveIntrinsicKeywords() {
return this.removeIntrinsicKeywords;
}
/** /**
* @return whether this KeywordsChange doesn't have any effect. * @return whether this KeywordsChange doesn't have any effect.
*/ */
@@ -135,8 +144,9 @@ public class KeywordsChange {
public final KeywordsChange merge( public final KeywordsChange merge(
final Collection<KeywordInterface> keywordList, final Collection<KeywordInterface> keywordList,
final Collection<KeywordInterface> removeKeywordList, final Collection<KeywordInterface> removeKeywordList,
final boolean removeAll) { final boolean removeAll,
KeywordsChange result = new KeywordsChange(keywordList, removeKeywordList, removeAll); final boolean removeIntrinsic) {
KeywordsChange result = new KeywordsChange(keywordList, removeKeywordList, removeAll, removeIntrinsic);
result.__merge(this); result.__merge(this);
return result; return result;
} }
@@ -144,8 +154,9 @@ public class KeywordsChange {
public final KeywordsChange merge( public final KeywordsChange merge(
final Iterable<String> keywordList, final Iterable<String> keywordList,
final Collection<String> removeKeywordList, final Collection<String> removeKeywordList,
final boolean removeAll) { final boolean removeAll,
KeywordsChange result = new KeywordsChange(keywordList, removeKeywordList, removeAll); final boolean removeIntrinsic) {
KeywordsChange result = new KeywordsChange(keywordList, removeKeywordList, removeAll, removeIntrinsic);
result.__merge(this); result.__merge(this);
return result; return result;
} }
@@ -157,5 +168,8 @@ public class KeywordsChange {
if (other.removeAllKeywords) { if (other.removeAllKeywords) {
removeAllKeywords = true; removeAllKeywords = true;
} }
if (other.removeIntrinsicKeywords) {
removeIntrinsicKeywords = true;
}
} }
} }

View File

@@ -246,7 +246,7 @@ public class ManaPool implements Iterable<Mana> {
&& host.getType().hasStringType(mana.getManaAbility().getAddsKeywordsType())) { && host.getType().hasStringType(mana.getManaAbility().getAddsKeywordsType())) {
final long timestamp = sa.getHostCard().getGame().getNextTimestamp(); final long timestamp = sa.getHostCard().getGame().getNextTimestamp();
final List<String> kws = Arrays.asList(mana.getAddedKeywords().split(" & ")); final List<String> kws = Arrays.asList(mana.getAddedKeywords().split(" & "));
host.addChangedCardKeywords(kws, new ArrayList<String>(), false, timestamp); host.addChangedCardKeywords(kws, null, false, false, timestamp);
if (mana.addsKeywordsUntil()) { if (mana.addsKeywordsUntil()) {
final GameCommand untilEOT = new GameCommand() { final GameCommand untilEOT = new GameCommand() {
private static final long serialVersionUID = -8285169579025607693L; private static final long serialVersionUID = -8285169579025607693L;

View File

@@ -986,12 +986,13 @@ public class Player extends GameEntity implements Comparable<Player> {
final KeywordsChange cks = changedKeywords.get(timestamp); final KeywordsChange cks = changedKeywords.get(timestamp);
; ;
changedKeywords.put(timestamp, cks.merge(addKeywords, removeKeywords, cks.isRemoveAllKeywords())); changedKeywords.put(timestamp, cks.merge(addKeywords, removeKeywords,
cks.isRemoveAllKeywords(), cks.isRemoveIntrinsicKeywords()));
updateKeywords(); updateKeywords();
return; return;
} }
changedKeywords.put(timestamp, new KeywordsChange(addKeywords, removeKeywords, false)); changedKeywords.put(timestamp, new KeywordsChange(addKeywords, removeKeywords, false, false));
updateKeywords(); updateKeywords();
game.fireEvent(new GameEventPlayerStatsChanged(this)); game.fireEvent(new GameEventPlayerStatsChanged(this));
} }

View File

@@ -106,6 +106,8 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
private boolean blessing = false; private boolean blessing = false;
private Integer chapter = null; private Integer chapter = null;
private boolean basicLandAbility = false;
private SplitSide splitSide = null; private SplitSide splitSide = null;
enum SplitSide { LEFT, RIGHT }; enum SplitSide { LEFT, RIGHT };
private int totalManaSpent = 0; private int totalManaSpent = 0;
@@ -754,6 +756,13 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
return flashBackAbility; return flashBackAbility;
} }
public void setBasicLandAbility(final boolean basicLandAbility0) {
basicLandAbility = basicLandAbility0;
}
public boolean isBasicLandAbility() {
return basicLandAbility && isIntrinsic();
}
/** /**
* @return the aftermath * @return the aftermath
*/ */

View File

@@ -126,7 +126,9 @@ public class StaticAbility extends CardTraitBase implements Comparable<StaticAbi
if (hasParam("AddType") || hasParam("RemoveType") if (hasParam("AddType") || hasParam("RemoveType")
|| hasParam("RemoveCardTypes") || hasParam("RemoveSubTypes") || hasParam("RemoveCardTypes") || hasParam("RemoveSubTypes")
|| hasParam("RemoveSuperTypes") || hasParam("RemoveCreatureTypes")) { || hasParam("RemoveSuperTypes") || hasParam("RemoveLandTypes")
|| hasParam("RemoveCreatureTypes") || hasParam("RemoveArtifactTypes")
|| hasParam("RemoveEnchantmentTypes")) {
layers.add(StaticAbilityLayer.TYPE); layers.add(StaticAbilityLayer.TYPE);
} }

View File

@@ -126,12 +126,15 @@ public final class StaticAbilityContinuous {
String[] addStatics = null; String[] addStatics = null;
List<SpellAbility> addFullAbs = null; List<SpellAbility> addFullAbs = null;
boolean removeAllAbilities = false; boolean removeAllAbilities = false;
boolean removeIntrinsicAbilities = false;
boolean removeNonMana = false; boolean removeNonMana = false;
boolean removeSuperTypes = false; boolean removeSuperTypes = false;
boolean removeCardTypes = false; boolean removeCardTypes = false;
boolean removeSubTypes = false; boolean removeSubTypes = false;
boolean removeLandTypes = false;
boolean removeCreatureTypes = false; boolean removeCreatureTypes = false;
boolean removeArtifactTypes = false; boolean removeArtifactTypes = false;
boolean removeEnchantmentTypes = false;
List<Player> mayLookAt = null; List<Player> mayLookAt = null;
List<Player> withFlash = null; List<Player> withFlash = null;
@@ -253,6 +256,11 @@ public final class StaticAbilityContinuous {
removeNonMana = true; removeNonMana = true;
} }
} }
// do this in type layer too in case of blood moon
if ((layer == StaticAbilityLayer.ABILITIES1 || layer == StaticAbilityLayer.TYPE)
&& params.containsKey("RemoveIntrinsicAbilities")) {
removeIntrinsicAbilities = true;
}
if (layer == StaticAbilityLayer.ABILITIES2 && params.containsKey("AddAbility")) { if (layer == StaticAbilityLayer.ABILITIES2 && params.containsKey("AddAbility")) {
final String[] sVars = params.get("AddAbility").split(" & "); final String[] sVars = params.get("AddAbility").split(" & ");
@@ -310,12 +318,18 @@ public final class StaticAbilityContinuous {
removeSubTypes = true; removeSubTypes = true;
} }
if (params.containsKey("RemoveLandTypes")) {
removeLandTypes = true;
}
if (params.containsKey("RemoveCreatureTypes")) { if (params.containsKey("RemoveCreatureTypes")) {
removeCreatureTypes = true; removeCreatureTypes = true;
} }
if (params.containsKey("RemoveArtifactTypes")) { if (params.containsKey("RemoveArtifactTypes")) {
removeArtifactTypes = true; removeArtifactTypes = true;
} }
if (params.containsKey("RemoveEnchantmentTypes")) {
removeEnchantmentTypes = true;
}
} }
if (layer == StaticAbilityLayer.COLOR) { if (layer == StaticAbilityLayer.COLOR) {
@@ -604,7 +618,7 @@ public final class StaticAbilityContinuous {
// add keywords // add keywords
// TODO regular keywords currently don't try to use keyword multiplier // TODO regular keywords currently don't try to use keyword multiplier
// (Although nothing uses it at this time) // (Although nothing uses it at this time)
if ((addKeywords != null) || (removeKeywords != null) || removeAllAbilities) { if ((addKeywords != null) || (removeKeywords != null) || removeAllAbilities || removeIntrinsicAbilities) {
String[] newKeywords = null; String[] newKeywords = null;
if (addKeywords != null) { if (addKeywords != null) {
newKeywords = Arrays.copyOf(addKeywords, addKeywords.length); newKeywords = Arrays.copyOf(addKeywords, addKeywords.length);
@@ -622,7 +636,8 @@ public final class StaticAbilityContinuous {
} }
} }
affectedCard.addChangedCardKeywords(newKeywords, removeKeywords, removeAllAbilities, affectedCard.addChangedCardKeywords(newKeywords, removeKeywords,
removeAllAbilities, removeIntrinsicAbilities,
hostCard.getTimestamp()); hostCard.getTimestamp());
} }
@@ -686,7 +701,8 @@ public final class StaticAbilityContinuous {
// add Types // add Types
if ((addTypes != null) || (removeTypes != null)) { if ((addTypes != null) || (removeTypes != null)) {
affectedCard.addChangedCardTypes(addTypes, removeTypes, removeSuperTypes, removeCardTypes, affectedCard.addChangedCardTypes(addTypes, removeTypes, removeSuperTypes, removeCardTypes,
removeSubTypes, removeCreatureTypes, removeArtifactTypes, hostCard.getTimestamp()); removeSubTypes, removeLandTypes, removeCreatureTypes, removeArtifactTypes,
removeEnchantmentTypes, hostCard.getTimestamp());
} }
// add colors // add colors
@@ -731,28 +747,41 @@ public final class StaticAbilityContinuous {
} }
// remove triggers // remove triggers
if ((layer == StaticAbilityLayer.ABILITIES2 && (params.containsKey("RemoveTriggers")) || removeAllAbilities)) { if ((layer == StaticAbilityLayer.ABILITIES2 && (params.containsKey("RemoveTriggers"))
|| removeAllAbilities || removeIntrinsicAbilities)) {
for (final Trigger trigger : affectedCard.getTriggers()) { for (final Trigger trigger : affectedCard.getTriggers()) {
trigger.setTemporarilySuppressed(true); if (removeAllAbilities || (removeIntrinsicAbilities && trigger.isIntrinsic())) {
trigger.setTemporarilySuppressed(true);
}
} }
} }
// remove activated and static abilities // remove activated and static abilities
if (removeAllAbilities) { if (removeAllAbilities || removeIntrinsicAbilities) {
if (removeNonMana) { // Blood Sun if (removeNonMana) { // Blood Sun
for (final SpellAbility mana : affectedCard.getNonManaAbilities()) { for (final SpellAbility mana : affectedCard.getNonManaAbilities()) {
mana.setTemporarilySuppressed(true); if (removeAllAbilities
|| (removeIntrinsicAbilities && mana.isIntrinsic() && !mana.isBasicLandAbility())) {
mana.setTemporarilySuppressed(true);
}
} }
} else { } else {
for (final SpellAbility ab : affectedCard.getSpellAbilities()) { for (final SpellAbility ab : affectedCard.getSpellAbilities()) {
ab.setTemporarilySuppressed(true); if (removeAllAbilities
|| (removeIntrinsicAbilities && ab.isIntrinsic() && !ab.isBasicLandAbility())) {
ab.setTemporarilySuppressed(true);
}
} }
} }
for (final StaticAbility stA : affectedCard.getStaticAbilities()) { for (final StaticAbility stA : affectedCard.getStaticAbilities()) {
stA.setTemporarilySuppressed(true); if (removeAllAbilities || (removeIntrinsicAbilities && stA.isIntrinsic())) {
stA.setTemporarilySuppressed(true);
}
} }
for (final ReplacementEffect rE : affectedCard.getReplacementEffects()) { for (final ReplacementEffect rE : affectedCard.getReplacementEffects()) {
rE.setTemporarilySuppressed(true); if (removeAllAbilities || (removeIntrinsicAbilities && rE.isIntrinsic())) {
rE.setTemporarilySuppressed(true);
}
} }
} }

View File

@@ -4,8 +4,7 @@ Types:Creature Wall
PT:4/4 PT:4/4
K:Flying K:Flying
K:Defender K:Defender
T:Mode$ Blocks | ValidCard$ Card.Self | Execute$ TrigDebuff | TriggerDescription$ When CARDNAME blocks, it becomes a Bird Giant, and it loses defender. T:Mode$ Blocks | ValidCard$ Card.Self | Execute$ Animate | TriggerDescription$ When CARDNAME blocks, it becomes a Bird Giant, and it loses defender.
SVar:TrigDebuff:DB$ Debuff | Keywords$ Defender | Defined$ TriggeredBlocker | Permanent$ True | SubAbility$ Animate SVar:Animate:DB$ Animate | Defined$ TriggeredBlocker | Types$ Bird,Giant | RemoveCreatureTypes$ True | RemoveKeywords$ Defender | Permanent$ True
SVar:Animate:DB$ Animate | Defined$ TriggeredBlocker | Types$ Bird,Giant | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | Permanent$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/ageless_sentinels.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/ageless_sentinels.jpg
Oracle:Defender (This creature can't attack.)\nFlying\nWhen Ageless Sentinels blocks, it becomes a Bird Giant, and it loses defender. (It's no longer a Wall. This effect lasts indefinitely.) Oracle:Defender (This creature can't attack.)\nFlying\nWhen Ageless Sentinels blocks, it becomes a Bird Giant, and it loses defender. (It's no longer a Wall. This effect lasts indefinitely.)

View File

@@ -1,7 +1,7 @@
Name:Blood Moon Name:Blood Moon
ManaCost:2 R ManaCost:2 R
Types:Enchantment Types:Enchantment
S:Mode$ Continuous | Affected$ Land.nonBasic | AddType$ Mountain | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Nonbasic lands are Mountains. S:Mode$ Continuous | Affected$ Land.nonBasic | AddType$ Mountain | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Nonbasic lands are Mountains.
SVar:NonStackingEffect:True SVar:NonStackingEffect:True
SVar:RemRandomDeck:True SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/blood_moon.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/blood_moon.jpg

View File

@@ -2,7 +2,7 @@ Name:Calming Licid
ManaCost:2 W ManaCost:2 W
Types:Creature Licid Types:Creature Licid
PT:2/2 PT:2/2
A:AB$ Animate | Cost$ W T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ W | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveSubTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {W} to end this effect. A:AB$ Animate | Cost$ W T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ W | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveEnchantmentTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {W} to end this effect.
SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Curse SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Curse
SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME can't attack. | Description$ Enchanted creature can't attack. S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME can't attack. | Description$ Enchanted creature can't attack.

View File

@@ -1,7 +1,7 @@
Name:Celestial Dawn Name:Celestial Dawn
ManaCost:1 W W ManaCost:1 W W
Types:Enchantment Types:Enchantment
S:Mode$ Continuous | Affected$ Land.YouCtrl | AddType$ Plains | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Lands you control are Plains. S:Mode$ Continuous | Affected$ Land.YouCtrl | AddType$ Plains | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Lands you control are Plains.
S:Mode$ Continuous | Affected$ Card.YouOwn+nonLand | SetColor$ White | AffectedZone$ Hand,Library,Graveyard,Exile,Command | Description$ Nonland permanents you control are white. The same is true for spells you control and nonland cards you own that aren't on the battlefield. S:Mode$ Continuous | Affected$ Card.YouOwn+nonLand | SetColor$ White | AffectedZone$ Hand,Library,Graveyard,Exile,Command | Description$ Nonland permanents you control are white. The same is true for spells you control and nonland cards you own that aren't on the battlefield.
S:Mode$ Continuous | Affected$ Card.YouCtrl+nonLand | SetColor$ White | AffectedZone$ Battlefield,Stack S:Mode$ Continuous | Affected$ Card.YouCtrl+nonLand | SetColor$ White | AffectedZone$ Battlefield,Stack
S:Mode$ Continuous | Affected$ You | ManaColorConversion$ Additive | WhiteConversion$ All | Description$ You may spend white mana as though it were mana of any color. S:Mode$ Continuous | Affected$ You | ManaColorConversion$ Additive | WhiteConversion$ All | Description$ You may spend white mana as though it were mana of any color.

View File

@@ -3,7 +3,7 @@ ManaCost:1 B
Types:Enchantment Aura Types:Enchantment Aura
K:Enchant land K:Enchant land
A:SP$ Attach | Cost$ 1 B | ValidTgts$ Land | AILogic$ ChangeType A:SP$ Attach | Cost$ 1 B | ValidTgts$ Land | AILogic$ ChangeType
S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Swamp | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Enchanted land is a Swamp. S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Swamp | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Enchanted land is a Swamp.
T:Mode$ Taps | ValidCard$ Card.AttachedBy | TriggerZones$ Battlefield | Execute$ TrigLose | TriggerDescription$ Whenever enchanted land becomes tapped, its controller loses 2 life. T:Mode$ Taps | ValidCard$ Card.AttachedBy | TriggerZones$ Battlefield | Execute$ TrigLose | TriggerDescription$ Whenever enchanted land becomes tapped, its controller loses 2 life.
SVar:TrigLose:DB$LoseLife | Defined$ TriggeredCardController | LifeAmount$ 2 SVar:TrigLose:DB$LoseLife | Defined$ TriggeredCardController | LifeAmount$ 2
SVar:Picture:http://www.wizards.com/global/images/magic/general/contaminated_ground.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/contaminated_ground.jpg

View File

@@ -2,7 +2,7 @@ Name:Conversion
ManaCost:2 W W ManaCost:2 W W
Types:Enchantment Types:Enchantment
K:UpkeepCost:W W K:UpkeepCost:W W
S:Mode$ Continuous | Affected$ Mountain | AddType$ Plains | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ All Mountains are Plains. S:Mode$ Continuous | Affected$ Mountain | AddType$ Plains | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ All Mountains are Plains.
SVar:RemRandomDeck:True SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/conversion.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/conversion.jpg
Oracle:At the beginning of your upkeep, sacrifice Conversion unless you pay {W}{W}.\nAll Mountains are Plains. Oracle:At the beginning of your upkeep, sacrifice Conversion unless you pay {W}{W}.\nAll Mountains are Plains.

View File

@@ -5,7 +5,7 @@ K:Enchant land
A:SP$ Attach | Cost$ 1 U | ValidTgts$ Land | AILogic$ ChangeType A:SP$ Attach | Cost$ 1 U | ValidTgts$ Land | AILogic$ ChangeType
K:ETBReplacement:Other:DBChooseBasic K:ETBReplacement:Other:DBChooseBasic
SVar:DBChooseBasic:DB$ ChooseType | Type$ Basic Land | SpellDescription$ As CARDNAME enters the battlefield, choose a basic land type. SVar:DBChooseBasic:DB$ ChooseType | Type$ Basic Land | SpellDescription$ As CARDNAME enters the battlefield, choose a basic land type.
S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ ChosenType | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Enchanted land is the chosen type. S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Enchanted land is the chosen type.
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/convincing_mirage.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/convincing_mirage.jpg
Oracle:Enchant land\nAs Convincing Mirage enters the battlefield, choose a basic land type.\nEnchanted land is the chosen type. Oracle:Enchant land\nAs Convincing Mirage enters the battlefield, choose a basic land type.\nEnchanted land is the chosen type.

View File

@@ -2,7 +2,7 @@ Name:Convulsing Licid
ManaCost:2 R ManaCost:2 R
Types:Creature Licid Types:Creature Licid
PT:2/2 PT:2/2
A:AB$ Animate | Cost$ R T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ R | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveSubTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {R} to end this effect. A:AB$ Animate | Cost$ R T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ R | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveEnchantmentTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {R} to end this effect.
SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Curse SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Curse
SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME can't block. | Description$ Enchanted creature can't block. S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME can't block. | Description$ Enchanted creature can't block.

View File

@@ -2,7 +2,7 @@ Name:Corrupting Licid
ManaCost:2 B ManaCost:2 B
Types:Creature Licid Types:Creature Licid
PT:2/2 PT:2/2
A:AB$ Animate | Cost$ B T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ B | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveSubTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {B} to end this effect. A:AB$ Animate | Cost$ B T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ B | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveEnchantmentTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {B} to end this effect.
SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Pump SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Pump
SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Fear | Description$ Enchanted creature has fear. (It can't be blocked except by artifact creatures and/or black creatures.) S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Fear | Description$ Enchanted creature has fear. (It can't be blocked except by artifact creatures and/or black creatures.)

View File

@@ -3,7 +3,7 @@ ManaCost:2 B B
Types:Creature Zombie Giant Types:Creature Zombie Giant
PT:4/2 PT:4/2
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigAnimate | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, target land becomes a Swamp. Exile CARDNAME. T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigAnimate | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, target land becomes a Swamp. Exile CARDNAME.
SVar:TrigAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Swamp | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | Permanent$ True | SubAbility$ DBExile | SpellDescription$ Target land becomes a Swamp. SVar:TrigAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Swamp | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Permanent$ True | SubAbility$ DBExile | SpellDescription$ Target land becomes a Swamp.
SVar:DBExile:DB$ ChangeZone | Defined$ TriggeredCard | Origin$ Graveyard | Destination$ Exile SVar:DBExile:DB$ ChangeZone | Defined$ TriggeredCard | Origin$ Graveyard | Destination$ Exile
SVar:Picture:http://www.wizards.com/global/images/magic/general/cyclopean_giant.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/cyclopean_giant.jpg
Oracle:When Cyclopean Giant dies, target land becomes a Swamp. Exile Cyclopean Giant. Oracle:When Cyclopean Giant dies, target land becomes a Swamp. Exile Cyclopean Giant.

View File

@@ -3,7 +3,7 @@ ManaCost:4
Types:Artifact Types:Artifact
A:AB$ PutCounter | Cost$ 2 T | ValidTgts$ Land.nonSwamp | TgtPrompt$ Select target non-Swamp land | RememberTargets$ True | CounterType$ MIRE | CounterNum$ 1 | ActivationPhases$ Upkeep | SubAbility$ DBAnimate | SpellDescription$ Put a mire counter on target non-Swamp land. That land is a Swamp for as long as it has a mire counter on it. Activate this ability only during your upkeep. A:AB$ PutCounter | Cost$ 2 T | ValidTgts$ Land.nonSwamp | TgtPrompt$ Select target non-Swamp land | RememberTargets$ True | CounterType$ MIRE | CounterNum$ 1 | ActivationPhases$ Upkeep | SubAbility$ DBAnimate | SpellDescription$ Put a mire counter on target non-Swamp land. That land is a Swamp for as long as it has a mire counter on it. Activate this ability only during your upkeep.
SVar:DBAnimate:DB$ Animate | Defined$ ParentTarget | staticAbilities$ AnimateSwamp | Permanent$ True SVar:DBAnimate:DB$ Animate | Defined$ ParentTarget | staticAbilities$ AnimateSwamp | Permanent$ True
SVar:AnimateSwamp:Mode$ Continuous | EffectZone$ Battlefield | Affected$ Card.Self+counters_GE1_MIRE | AddType$ Swamp | RemoveSubTypes$ True | RemoveAllAbilities$ True SVar:AnimateSwamp:Mode$ Continuous | EffectZone$ Battlefield | Affected$ Card.Self+counters_GE1_MIRE | AddType$ Swamp | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigEffect | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME is put into a graveyard from the battlefield, at the beginning of each of your upkeeps for the rest of the game, remove all mire counters from a land that a mire counter was put onto with CARDNAME but that a mire counter has not been removed from with CARDNAME. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigEffect | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME is put into a graveyard from the battlefield, at the beginning of each of your upkeeps for the rest of the game, remove all mire counters from a land that a mire counter was put onto with CARDNAME but that a mire counter has not been removed from with CARDNAME.
SVar:TrigEffect:DB$ Effect | ImprintCards$ Remembered | Triggers$ UpkeepRemove,TrigForget | SVars$ PumpForget,TrigRemove,DBRemoveCounter,DBForget | Duration$ Permanent SVar:TrigEffect:DB$ Effect | ImprintCards$ Remembered | Triggers$ UpkeepRemove,TrigForget | SVars$ PumpForget,TrigRemove,DBRemoveCounter,DBForget | Duration$ Permanent
SVar:UpkeepRemove:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigRemove | TriggerZones$ Command | TriggerDescription$ At the beginning of your upkeep, remove all mire counters from a land that a mire counter was put onto with Cyclopean Tomb but that a mire counter has not been removed from with Cyclopean Tomb. SVar:UpkeepRemove:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigRemove | TriggerZones$ Command | TriggerDescription$ At the beginning of your upkeep, remove all mire counters from a land that a mire counter was put onto with Cyclopean Tomb but that a mire counter has not been removed from with Cyclopean Tomb.

View File

@@ -2,7 +2,7 @@ Name:Deepwood Elder
ManaCost:G G ManaCost:G G
Types:Creature Dryad Spellshaper Types:Creature Dryad Spellshaper
PT:2/2 PT:2/2
A:AB$ Animate | Cost$ X G G T Discard<1/Card> | TargetMin$ 0 | TargetMax$ Maxtgt | ValidTgts$ Land | TgtPrompt$ Select target land to become forest | Types$ Forest | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | References$ MaxTgt | SpellDescription$ X target lands become Forests until end of turn. A:AB$ Animate | Cost$ X G G T Discard<1/Card> | TargetMin$ 0 | TargetMax$ Maxtgt | ValidTgts$ Land | TgtPrompt$ Select target land to become forest | Types$ Forest | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | References$ MaxTgt | SpellDescription$ X target lands become Forests until end of turn.
SVar:X:TargetedObjects$Amount SVar:X:TargetedObjects$Amount
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Maxtgt:Count$Valid Land SVar:Maxtgt:Count$Valid Land

View File

@@ -2,7 +2,7 @@ Name:Dominating Licid
ManaCost:1 U U ManaCost:1 U U
Types:Creature Licid Types:Creature Licid
PT:1/1 PT:1/1
A:AB$ Animate | Cost$ 1 U U T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ U | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveSubTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {U} to end this effect. A:AB$ Animate | Cost$ 1 U U T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ U | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveEnchantmentTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {U} to end this effect.
SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ GainControl SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ GainControl
SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature
S:Mode$ Continuous | Affected$ Card.EnchantedBy | GainControl$ You | Description$ You control enchanted creature. S:Mode$ Continuous | Affected$ Card.EnchantedBy | GainControl$ You | Description$ You control enchanted creature.

View File

@@ -4,7 +4,7 @@ Types:Creature Bird
PT:1/1 PT:1/1
K:Flying K:Flying
A:AB$ ChooseType | Cost$ T | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land becomes the basic land type of your choice until end of turn. A:AB$ ChooseType | Cost$ T | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land becomes the basic land type of your choice until end of turn.
SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/dream_thrush.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/dream_thrush.jpg
Oracle:Flying\n{T}: Target land becomes the basic land type of your choice until end of turn. Oracle:Flying\n{T}: Target land becomes the basic land type of your choice until end of turn.

View File

@@ -3,7 +3,7 @@ ManaCost:3 U
Types:Creature Serpent Types:Creature Serpent
PT:4/3 PT:4/3
S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Island | Description$ CARDNAME can't attack unless defending player controls an Island. S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Island | Description$ CARDNAME can't attack unless defending player controls an Island.
A:AB$ Animate | Cost$ U Sac<1/Island> | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Island | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | SpellDescription$ Target land becomes an Island until end of turn. A:AB$ Animate | Cost$ U Sac<1/Island> | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Island | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SpellDescription$ Target land becomes an Island until end of turn.
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/dreamwinder.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/dreamwinder.jpg
Oracle:Dreamwinder can't attack unless defending player controls an Island.\n{U}, Sacrifice an Island: Target land becomes an Island until end of turn. Oracle:Dreamwinder can't attack unless defending player controls an Island.\n{U}, Sacrifice an Island: Target land becomes an Island until end of turn.

View File

@@ -4,7 +4,7 @@ Types:Artifact
T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw a card. T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw a card.
SVar:TrigDraw:DB$ Draw | NumCards$ 1 SVar:TrigDraw:DB$ Draw | NumCards$ 1
A:AB$ ChooseType | Cost$ Sac<1/CARDNAME> | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Choose a basic land type. Each land you control becomes that type until end of turn. A:AB$ ChooseType | Cost$ Sac<1/CARDNAME> | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Choose a basic land type. Each land you control becomes that type until end of turn.
SVar:DBAnimate:DB$ AnimateAll | ValidCards$ Land.YouCtrl | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True SVar:DBAnimate:DB$ AnimateAll | ValidCards$ Land.YouCtrl | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/elsewhere_flask.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/elsewhere_flask.jpg
Oracle:When Elsewhere Flask enters the battlefield, draw a card.\nSacrifice Elsewhere Flask: Choose a basic land type. Each land you control becomes that type until end of turn. Oracle:When Elsewhere Flask enters the battlefield, draw a card.\nSacrifice Elsewhere Flask: Choose a basic land type. Each land you control becomes that type until end of turn.

View File

@@ -2,7 +2,7 @@ Name:Enraging Licid
ManaCost:1 R ManaCost:1 R
Types:Creature Licid Types:Creature Licid
PT:1/1 PT:1/1
A:AB$ Animate | Cost$ R T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ R | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveSubTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {R} to end this effect. A:AB$ Animate | Cost$ R T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ R | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveEnchantmentTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {R} to end this effect.
SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Pump SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Pump
SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Haste | Description$ Enchanted creature has haste. S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Haste | Description$ Enchanted creature has haste.

View File

@@ -2,7 +2,7 @@ Name:Ensouled Scimitar
ManaCost:3 ManaCost:3
Types:Artifact Equipment Types:Artifact Equipment
K:Equip:2 K:Equip:2
A:AB$ Animate | Cost$ 3 | Defined$ Self | Power$ 1 | Toughness$ 5 | Types$ Creature,Artifact,Spirit | Keywords$ Flying | OverwriteTypes$ True | SpellDescription$ CARDNAME becomes a 1/5 Spirit artifact creature with flying until end of turn. (Equipment that's a creature can't equip a creature.) A:AB$ Animate | Cost$ 3 | Defined$ Self | Power$ 1 | Toughness$ 5 | Types$ Creature,Artifact,Spirit | Keywords$ Flying | RemoveCardTypes$ True | RemoveCreatureTypes$ True | SpellDescription$ CARDNAME becomes a 1/5 Spirit artifact creature with flying until end of turn. (Equipment that's a creature can't equip a creature.)
S:Mode$ Continuous | Affected$ Card.EquippedBy | AddPower$ 1 | AddToughness$ 5 | Description$ Equipped creature gets +1/+5. S:Mode$ Continuous | Affected$ Card.EquippedBy | AddPower$ 1 | AddToughness$ 5 | Description$ Equipped creature gets +1/+5.
SVar:Picture:http://www.wizards.com/global/images/magic/general/ensouled_scimitar.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/ensouled_scimitar.jpg
Oracle:{3}: Ensouled Scimitar becomes a 1/5 Spirit artifact creature with flying until end of turn. (Equipment that's a creature can't equip a creature.)\nEquipped creature gets +1/+5.\nEquip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.) Oracle:{3}: Ensouled Scimitar becomes a 1/5 Spirit artifact creature with flying until end of turn. (Equipment that's a creature can't equip a creature.)\nEquipped creature gets +1/+5.\nEquip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.)

View File

@@ -3,6 +3,6 @@ ManaCost:B
Types:Enchantment Aura Types:Enchantment Aura
K:Enchant land K:Enchant land
A:SP$ Attach | Cost$ B | ValidTgts$ Land | AILogic$ ChangeType A:SP$ Attach | Cost$ B | ValidTgts$ Land | AILogic$ ChangeType
S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Swamp | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Enchanted land is a Swamp. S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Swamp | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Enchanted land is a Swamp.
SVar:Picture:http://www.wizards.com/global/images/magic/general/evil_presence.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/evil_presence.jpg
Oracle:Enchant land\nEnchanted land is a Swamp. Oracle:Enchant land\nEnchanted land is a Swamp.

View File

@@ -4,7 +4,7 @@ Types:Creature Elemental
PT:0/0 PT:0/0
K:etbCounter:P1P1:6 K:etbCounter:P1P1:6
S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Island | Description$ CARDNAME can't attack unless defending player controls an Island. S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Island | Description$ CARDNAME can't attack unless defending player controls an Island.
A:AB$ Animate | Cost$ U SubCounter<1/P1P1> | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Island | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | SpellDescription$ Target land becomes an Island until end of turn. A:AB$ Animate | Cost$ U SubCounter<1/P1P1> | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Island | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SpellDescription$ Target land becomes an Island until end of turn.
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/floodchaser.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/floodchaser.jpg
Oracle:Floodchaser enters the battlefield with six +1/+1 counters on it.\nFloodchaser can't attack unless defending player controls an Island.\n{U}, Remove a +1/+1 counter from Floodchaser: Target land becomes an Island until end of turn. Oracle:Floodchaser enters the battlefield with six +1/+1 counters on it.\nFloodchaser can't attack unless defending player controls an Island.\n{U}, Remove a +1/+1 counter from Floodchaser: Target land becomes an Island until end of turn.

View File

@@ -8,7 +8,7 @@ SVar:X:Count$Valid Forest.YouCtrl
S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetPower$ Y | SetToughness$ Y | CheckSVar$ B | SVarCompare$ EQ1 S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetPower$ Y | SetToughness$ Y | CheckSVar$ B | SVarCompare$ EQ1
SVar:B:Count$Valid Card.Self+attacking SVar:B:Count$Valid Card.Self+attacking
SVar:Y:Count$Valid Forest.DefenderCtrl SVar:Y:Count$Valid Forest.DefenderCtrl
A:AB$ Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Forest | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | UntilHostLeavesPlay$ True | SpellDescription$ Target land becomes a Forest until CARDNAME leaves the battlefield. A:AB$ Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Forest | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | UntilHostLeavesPlay$ True | SpellDescription$ Target land becomes a Forest until CARDNAME leaves the battlefield.
SVar:BuffedBy:Forest SVar:BuffedBy:Forest
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/gaeas_liege.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/gaeas_liege.jpg

View File

@@ -2,7 +2,7 @@ Name:Glaciers
ManaCost:2 W U ManaCost:2 W U
Types:Enchantment Types:Enchantment
K:UpkeepCost:W U K:UpkeepCost:W U
S:Mode$ Continuous | Affected$ Mountain | AddType$ Plains | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ All Mountains are Plains. S:Mode$ Continuous | Affected$ Mountain | AddType$ Plains | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ All Mountains are Plains.
SVar:RemRandomDeck:True SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/glaciers.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/glaciers.jpg
Oracle:At the beginning of your upkeep, sacrifice Glaciers unless you pay {W}{U}.\nAll Mountains are Plains. Oracle:At the beginning of your upkeep, sacrifice Glaciers unless you pay {W}{U}.\nAll Mountains are Plains.

View File

@@ -2,7 +2,7 @@ Name:Gliding Licid
ManaCost:2 U ManaCost:2 U
Types:Creature Licid Types:Creature Licid
PT:2/2 PT:2/2
A:AB$ Animate | Cost$ U T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ U | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveSubTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {U} to end this effect. A:AB$ Animate | Cost$ U T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ U | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveEnchantmentTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {U} to end this effect.
SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Pump SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Pump
SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Flying | Description$ Enchanted creature has flying. S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Flying | Description$ Enchanted creature has flying.

View File

@@ -4,7 +4,7 @@ Types:Creature Antelope
PT:1/4 PT:1/4
K:Plainswalk K:Plainswalk
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigAnimate | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may have target land become a Plains until CARDNAME leaves the battlefield. T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigAnimate | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may have target land become a Plains until CARDNAME leaves the battlefield.
SVar:TrigAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | UntilHostLeavesPlay$ True | Types$ Plains | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True SVar:TrigAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | UntilHostLeavesPlay$ True | Types$ Plains | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/graceful_antelope.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/graceful_antelope.jpg
Oracle:Plainswalk\nWhenever Graceful Antelope deals combat damage to a player, you may have target land become a Plains until Graceful Antelope leaves the battlefield. Oracle:Plainswalk (This creature can't be blocked as long as defending player controls a Plains.)\nWhenever Graceful Antelope deals combat damage to a player, you may have target land become a Plains until Graceful Antelope leaves the battlefield.

View File

@@ -3,7 +3,7 @@ ManaCost:U
Types:Creature Human Wizard Types:Creature Human Wizard
PT:1/1 PT:1/1
A:AB$ ChooseType | Cost$ T | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land you control becomes the basic land type of your choice until end of turn. A:AB$ ChooseType | Cost$ T | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land you control becomes the basic land type of your choice until end of turn.
SVar:DBAnimate:DB$ Animate | ValidTgts$ Land.YouCtrl | TgtPrompt$ Select target land you control | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True SVar:DBAnimate:DB$ Animate | ValidTgts$ Land.YouCtrl | TgtPrompt$ Select target land you control | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/grixis_illusionist.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/grixis_illusionist.jpg
Oracle:{T}: Target land you control becomes the basic land type of your choice until end of turn. Oracle:{T}: Target land you control becomes the basic land type of your choice until end of turn.

View File

@@ -5,7 +5,7 @@ HandLifeModifier:+0/-3
A:AB$ Effect | ActivationZone$ Command | Cost$ PayLife<1> | TgtZone$ Graveyard | ValidTgts$ Creature.YouOwn | PumpZone$ Graveyard | TgtPrompt$ Select target creature in your graveyard, you may play it this turn | RememberObjects$ Targeted | StaticAbilities$ Play | ExileOnMoved$ Graveyard | SpellDescription$ You may play target creature card in your graveyard this turn. A:AB$ Effect | ActivationZone$ Command | Cost$ PayLife<1> | TgtZone$ Graveyard | ValidTgts$ Creature.YouOwn | PumpZone$ Graveyard | TgtPrompt$ Select target creature in your graveyard, you may play it this turn | RememberObjects$ Targeted | StaticAbilities$ Play | ExileOnMoved$ Graveyard | SpellDescription$ You may play target creature card in your graveyard this turn.
SVar:Play:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Graveyard | Description$ You may play remembered card. SVar:Play:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Graveyard | Description$ You may play remembered card.
T:Mode$ SpellCast | ValidCard$ Card.wasCastFromGraveyard | ValidControllingPlayer$ You | TriggerZones$ Command | Execute$ TrigAnimate | TriggerDescription$ Whenever you play a creature card from your graveyard, it becomes a black Zombie Knight. T:Mode$ SpellCast | ValidCard$ Card.wasCastFromGraveyard | ValidControllingPlayer$ You | TriggerZones$ Command | Execute$ TrigAnimate | TriggerDescription$ Whenever you play a creature card from your graveyard, it becomes a black Zombie Knight.
SVar:TrigAnimate:DB$ Animate | Defined$ TriggeredCard | Types$ Zombie,Knight | Colors$ Black | OverwriteColors$ True | Permanent$ True | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True SVar:TrigAnimate:DB$ Animate | Defined$ TriggeredCard | Types$ Zombie,Knight | Colors$ Black | OverwriteColors$ True | Permanent$ True | RemoveCreatureTypes$ True
R:Event$ Moved | ValidCard$ Card.Zombie+Knight | Destination$ Graveyard | ReplaceWith$ DBExile | Description$ If a Zombie Knight would be put into your graveyard from the battlefield, exile it instead. R:Event$ Moved | ValidCard$ Card.Zombie+Knight | Destination$ Graveyard | ReplaceWith$ DBExile | Description$ If a Zombie Knight would be put into your graveyard from the battlefield, exile it instead.
SVar:DBExile:DB$ ChangeZone | Defined$ ReplacedCard | Origin$ Battlefield | Destination$ Exile SVar:DBExile:DB$ ChangeZone | Defined$ ReplacedCard | Origin$ Battlefield | Destination$ Exile
SVar:Picture:https://downloads.cardforge.org/images/cards/VAN/Haakon, Stromgald Scourge Avatar.full.jpg SVar:Picture:https://downloads.cardforge.org/images/cards/VAN/Haakon, Stromgald Scourge Avatar.full.jpg

View File

@@ -6,6 +6,6 @@ K:Flying
K:Vigilance K:Vigilance
K:Crew:3 K:Crew:3
S:Mode$ Continuous | Affected$ Card.Self | AddAbility$ KiranAnimate | Description$ You may remove a loyalty counter from a planeswalker you control rather than pay CARDNAME's crew cost. S:Mode$ Continuous | Affected$ Card.Self | AddAbility$ KiranAnimate | Description$ You may remove a loyalty counter from a planeswalker you control rather than pay CARDNAME's crew cost.
SVar:KiranAnimate:AB$ Animate | Cost$ SubCounter<1/LOYALTY/Planeswalker.YouCtrl/Planeswalker you Control> | Crew$ True | Secondary$ True | CostDesc$ | Defined$ Self | Types$ Creature,Artifact | OverwriteTypes$ True | KeepSubtypes$ True | KeepSupertypes$ True | SpellDescription$ You may remove a loyalty counter from a planeswalker you control rather than pay Heart of Kiran's crew cost. SVar:KiranAnimate:AB$ Animate | Cost$ SubCounter<1/LOYALTY/Planeswalker.YouCtrl/Planeswalker you Control> | Crew$ True | Secondary$ True | CostDesc$ | Defined$ Self | Types$ Creature,Artifact | RemoveCardTypes$ True | SpellDescription$ You may remove a loyalty counter from a planeswalker you control rather than pay Heart of Kiran's crew cost.
SVar:Picture:http://www.wizards.com/global/images/magic/general/heart_of_kiran.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/heart_of_kiran.jpg
Oracle:Flying, vigilance\nCrew 3 (Tap any number of creatures you control with total power 3 or more: This Vehicle becomes an artifact creature until end of turn.)\nYou may remove a loyalty counter from a planeswalker you control rather than pay Heart of Kiran's crew cost. Oracle:Flying, vigilance\nCrew 3 (Tap any number of creatures you control with total power 3 or more: This Vehicle becomes an artifact creature until end of turn.)\nYou may remove a loyalty counter from a planeswalker you control rather than pay Heart of Kiran's crew cost.

View File

@@ -2,6 +2,6 @@ Name:Hidden Ancients
ManaCost:1 G ManaCost:1 G
Types:Enchantment Types:Enchantment
T:Mode$ SpellCast | ValidCard$ Enchantment | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts an enchantment spell, if CARDNAME is an enchantment, CARDNAME becomes a 5/5 Treefolk creature. T:Mode$ SpellCast | ValidCard$ Enchantment | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts an enchantment spell, if CARDNAME is an enchantment, CARDNAME becomes a 5/5 Treefolk creature.
SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 5 | Toughness$ 5 | Types$ Creature,Treefolk | OverwriteTypes$ True | Permanent$ True SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 5 | Toughness$ 5 | Types$ Creature,Treefolk | RemoveCardTypes$ True | Permanent$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/hidden_ancients.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/hidden_ancients.jpg
Oracle:When an opponent casts an enchantment spell, if Hidden Ancients is an enchantment, Hidden Ancients becomes a 5/5 Treefolk creature. Oracle:When an opponent casts an enchantment spell, if Hidden Ancients is an enchantment, Hidden Ancients becomes a 5/5 Treefolk creature.

View File

@@ -2,6 +2,6 @@ Name:Hidden Gibbons
ManaCost:G ManaCost:G
Types:Enchantment Types:Enchantment
T:Mode$ SpellCast | ValidCard$ Instant | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts an instant spell, if CARDNAME is an enchantment, CARDNAME becomes a 4/4 Ape creature. T:Mode$ SpellCast | ValidCard$ Instant | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts an instant spell, if CARDNAME is an enchantment, CARDNAME becomes a 4/4 Ape creature.
SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 4 | Toughness$ 4 | Types$ Creature,Ape | OverwriteTypes$ True | Permanent$ True SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 4 | Toughness$ 4 | Types$ Creature,Ape | RemoveCardTypes$ True | Permanent$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/hidden_gibbons.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/hidden_gibbons.jpg
Oracle:When an opponent casts an instant spell, if Hidden Gibbons is an enchantment, Hidden Gibbons becomes a 4/4 Ape creature. Oracle:When an opponent casts an instant spell, if Hidden Gibbons is an enchantment, Hidden Gibbons becomes a 4/4 Ape creature.

View File

@@ -2,6 +2,6 @@ Name:Hidden Guerrillas
ManaCost:G ManaCost:G
Types:Enchantment Types:Enchantment
T:Mode$ SpellCast | ValidCard$ Artifact | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts an artifact spell, if CARDNAME is an enchantment, CARDNAME becomes a 5/3 Soldier creature with trample. T:Mode$ SpellCast | ValidCard$ Artifact | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts an artifact spell, if CARDNAME is an enchantment, CARDNAME becomes a 5/3 Soldier creature with trample.
SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 5 | Toughness$ 3 | Keywords$ Trample | Types$ Creature,Soldier | OverwriteTypes$ True | Permanent$ True SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 5 | Toughness$ 3 | Keywords$ Trample | Types$ Creature,Soldier | RemoveCardTypes$ True | Permanent$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/hidden_guerrillas.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/hidden_guerrillas.jpg
Oracle:When an opponent casts an artifact spell, if Hidden Guerrillas is an enchantment, Hidden Guerrillas becomes a 5/3 Soldier creature with trample. Oracle:When an opponent casts an artifact spell, if Hidden Guerrillas is an enchantment, Hidden Guerrillas becomes a 5/3 Soldier creature with trample.

View File

@@ -2,6 +2,6 @@ Name:Hidden Herd
ManaCost:G ManaCost:G
Types:Enchantment Types:Enchantment
T:Mode$ LandPlayed | ValidCard$ Land.nonBasic+OppCtrl | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent plays a nonbasic land, if CARDNAME is an enchantment, CARDNAME becomes a 3/3 Beast creature. T:Mode$ LandPlayed | ValidCard$ Land.nonBasic+OppCtrl | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent plays a nonbasic land, if CARDNAME is an enchantment, CARDNAME becomes a 3/3 Beast creature.
SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 3 | Toughness$ 3 | Types$ Creature,Beast | OverwriteTypes$ True | Permanent$ True SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 3 | Toughness$ 3 | Types$ Creature,Beast | RemoveCardTypes$ True | Permanent$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/hidden_herd.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/hidden_herd.jpg
Oracle:When an opponent plays a nonbasic land, if Hidden Herd is an enchantment, Hidden Herd becomes a 3/3 Beast creature. Oracle:When an opponent plays a nonbasic land, if Hidden Herd is an enchantment, Hidden Herd becomes a 3/3 Beast creature.

View File

@@ -2,6 +2,6 @@ Name:Hidden Predators
ManaCost:G ManaCost:G
Types:Enchantment Types:Enchantment
T:Mode$ Always | IsPresent$ Creature.powerGE4+OppCtrl | TriggerZones$ Battlefield | Execute$ TrigLurkingJackalsAnimate | IsPresent2$ Card.Self+Enchantment | ResolvingCheck$ IsPresent2 | TriggerDescription$ When an opponent controls a creature with power 4 or greater, if CARDNAME is an enchantment, CARDNAME becomes a 4/4 Beast creature. T:Mode$ Always | IsPresent$ Creature.powerGE4+OppCtrl | TriggerZones$ Battlefield | Execute$ TrigLurkingJackalsAnimate | IsPresent2$ Card.Self+Enchantment | ResolvingCheck$ IsPresent2 | TriggerDescription$ When an opponent controls a creature with power 4 or greater, if CARDNAME is an enchantment, CARDNAME becomes a 4/4 Beast creature.
SVar:TrigLurkingJackalsAnimate:DB$ Animate | Types$ Creature,Beast | Power$ 4 | Toughness$ 4 | OverwriteTypes$ True | Permanent$ True SVar:TrigLurkingJackalsAnimate:DB$ Animate | Types$ Creature,Beast | Power$ 4 | Toughness$ 4 | RemoveCardTypes$ True | Permanent$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/hidden_predators.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/hidden_predators.jpg
Oracle:When an opponent controls a creature with power 4 or greater, if Hidden Predators is an enchantment, Hidden Predators becomes a 4/4 Beast creature. Oracle:When an opponent controls a creature with power 4 or greater, if Hidden Predators is an enchantment, Hidden Predators becomes a 4/4 Beast creature.

View File

@@ -2,6 +2,6 @@ Name:Hidden Spider
ManaCost:G ManaCost:G
Types:Enchantment Types:Enchantment
T:Mode$ SpellCast | ValidCard$ Creature.withFlying | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell with flying, if CARDNAME is an enchantment, CARDNAME becomes a 3/5 Spider creature with reach. (It can block creatures with flying.) T:Mode$ SpellCast | ValidCard$ Creature.withFlying | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell with flying, if CARDNAME is an enchantment, CARDNAME becomes a 3/5 Spider creature with reach. (It can block creatures with flying.)
SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 3 | Toughness$ 5 | Keywords$ Reach | Types$ Creature,Spider | OverwriteTypes$ True | Permanent$ True SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 3 | Toughness$ 5 | Keywords$ Reach | Types$ Creature,Spider | RemoveCardTypes$ True | Permanent$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/hidden_spider.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/hidden_spider.jpg
Oracle:When an opponent casts a creature spell with flying, if Hidden Spider is an enchantment, Hidden Spider becomes a 3/5 Spider creature with reach. (It can block creatures with flying.) Oracle:When an opponent casts a creature spell with flying, if Hidden Spider is an enchantment, Hidden Spider becomes a 3/5 Spider creature with reach. (It can block creatures with flying.)

View File

@@ -2,9 +2,9 @@ Name:Hidden Stag
ManaCost:1 G ManaCost:1 G
Types:Enchantment Types:Enchantment
T:Mode$ LandPlayed | ValidCard$ Land.OppCtrl | IsPresent$ Card.Self+Enchantment | Execute$ TrigHiddenStagAnimateOppLand | TriggerZones$ Battlefield | TriggerDescription$ Whenever an opponent plays a land, if CARDNAME is an enchantment, CARDNAME becomes a 3/2 Elk Beast creature. T:Mode$ LandPlayed | ValidCard$ Land.OppCtrl | IsPresent$ Card.Self+Enchantment | Execute$ TrigHiddenStagAnimateOppLand | TriggerZones$ Battlefield | TriggerDescription$ Whenever an opponent plays a land, if CARDNAME is an enchantment, CARDNAME becomes a 3/2 Elk Beast creature.
SVar:TrigHiddenStagAnimateOppLand:DB$ Animate | Defined$ Self | Types$ Creature,Elk,Beast | Power$ 3 | Toughness$ 2 | OverwriteTypes$ True | Permanent$ True SVar:TrigHiddenStagAnimateOppLand:DB$ Animate | Defined$ Self | Types$ Creature,Elk,Beast | Power$ 3 | Toughness$ 2 | RemoveCardTypes$ True | Permanent$ True
T:Mode$ LandPlayed | ValidCard$ Land.YouCtrl | IsPresent$ Card.Self+Creature | Execute$ TrigHiddenStagAnimateYourLand | TriggerZones$ Battlefield | TriggerDescription$ Whenever you play a land, if CARDNAME is a creature, CARDNAME becomes an enchantment. T:Mode$ LandPlayed | ValidCard$ Land.YouCtrl | IsPresent$ Card.Self+Creature | Execute$ TrigHiddenStagAnimateYourLand | TriggerZones$ Battlefield | TriggerDescription$ Whenever you play a land, if CARDNAME is a creature, CARDNAME becomes an enchantment.
SVar:TrigHiddenStagAnimateYourLand:DB$ Animate | Defined$ Self | Types$ Enchantment | OverwriteTypes$ True | Permanent$ True SVar:TrigHiddenStagAnimateYourLand:DB$ Animate | Defined$ Self | Types$ Enchantment | RemoveCardTypes$ True | Permanent$ True
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/hidden_stag.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/hidden_stag.jpg
Oracle:Whenever an opponent plays a land, if Hidden Stag is an enchantment, Hidden Stag becomes a 3/2 Elk Beast creature.\nWhenever you play a land, if Hidden Stag is a creature, Hidden Stag becomes an enchantment. Oracle:Whenever an opponent plays a land, if Hidden Stag is an enchantment, Hidden Stag becomes a 3/2 Elk Beast creature.\nWhenever you play a land, if Hidden Stag is a creature, Hidden Stag becomes an enchantment.

View File

@@ -3,7 +3,7 @@ ManaCost:U
Types:Creature Human Wizard Types:Creature Human Wizard
PT:1/1 PT:1/1
A:AB$ ChooseType | Cost$ T | Defined$ You | Type$ Creature | InvalidTypes$ Wall | SubAbility$ DBAnimate | SpellDescription$ Choose a creature type other than Wall. Target creature becomes that type until end of turn. A:AB$ ChooseType | Cost$ T | Defined$ You | Type$ Creature | InvalidTypes$ Wall | SubAbility$ DBAnimate | SpellDescription$ Choose a creature type other than Wall. Target creature becomes that type until end of turn.
SVar:DBAnimate:DB$ Animate | ValidTgts$ Creature | TgtPrompt$ Select target creature | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True SVar:DBAnimate:DB$ Animate | ValidTgts$ Creature | TgtPrompt$ Select target creature | Types$ ChosenType | RemoveCreatureTypes$ True
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/imagecrafter.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/imagecrafter.jpg
Oracle:{T}: Choose a creature type other than Wall. Target creature becomes that type until end of turn. Oracle:{T}: Choose a creature type other than Wall. Target creature becomes that type until end of turn.

View File

@@ -3,7 +3,7 @@ ManaCost:2 U
Types:Enchantment Aura Types:Enchantment Aura
K:Enchant creature, land, or planeswalker K:Enchant creature, land, or planeswalker
A:SP$ Attach | Cost$ 2 U | ValidTgts$ Creature,Land,Planeswalker | AILogic$ Curse | AITgts$ Card.cmcGE3 A:SP$ Attach | Cost$ 2 U | ValidTgts$ Creature,Land,Planeswalker | AILogic$ Curse | AITgts$ Card.cmcGE3
S:Mode$ Continuous | Affected$ Card.EnchantedBy | SetColor$ Colorless | AddType$ Land | RemoveCardTypes$ True | RemoveSubTypes$ True | RemoveAllAbilities$ True | AddAbility$ ABMana | Description$ Enchanted permanent is a colorless land with "{T}: Add {C}" and loses all other card types and abilities. S:Mode$ Continuous | Affected$ Card.EnchantedBy | SetColor$ Colorless | AddType$ Land | RemoveCardTypes$ True | RemoveAllAbilities$ True | AddAbility$ ABMana | Description$ Enchanted permanent is a colorless land with "{T}: Add {C}" and loses all other card types and abilities.
SVar:ABMana:AB$Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. SVar:ABMana:AB$Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}.
SVar:NonStackingAttachEffect:True SVar:NonStackingAttachEffect:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/imprisoned_in_the_moon.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/imprisoned_in_the_moon.jpg

View File

@@ -2,7 +2,7 @@ Name:Jinx
ManaCost:1 U ManaCost:1 U
Types:Instant Types:Instant
A:SP$ ChooseType | Cost$ 1 U | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land becomes the basic land type of your choice until end of turn. Draw a card at the beginning of the next turn's upkeep. A:SP$ ChooseType | Cost$ 1 U | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land becomes the basic land type of your choice until end of turn. Draw a card at the beginning of the next turn's upkeep.
SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | SubAbility$ DelTrigSlowtrip SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SubAbility$ DelTrigSlowtrip
SVar:DelTrigSlowtrip:DB$ DelayedTrigger | Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | Execute$ DrawSlowtrip | TriggerDescription$ Draw a card. SVar:DelTrigSlowtrip:DB$ DelayedTrigger | Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | Execute$ DrawSlowtrip | TriggerDescription$ Draw a card.
SVar:DrawSlowtrip:DB$Draw | NumCards$ 1 | Defined$ You SVar:DrawSlowtrip:DB$Draw | NumCards$ 1 | Defined$ You
SVar:RemAIDeck:True SVar:RemAIDeck:True

View File

@@ -2,7 +2,7 @@ Name:Kavu Recluse
ManaCost:2 R ManaCost:2 R
Types:Creature Kavu Types:Creature Kavu
PT:2/2 PT:2/2
A:AB$Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Forest | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | SpellDescription$ Target land becomes a Forest until end of turn. A:AB$Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Forest | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SpellDescription$ Target land becomes a Forest until end of turn.
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/kavu_recluse.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/kavu_recluse.jpg
Oracle:{T}: Target land becomes a Forest until end of turn. Oracle:{T}: Target land becomes a Forest until end of turn.

View File

@@ -3,7 +3,7 @@ ManaCost:3 U
Types:Creature Serpent Types:Creature Serpent
PT:4/3 PT:4/3
S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Island | Description$ CARDNAME can't attack unless defending player controls an Island. S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Island | Description$ CARDNAME can't attack unless defending player controls an Island.
A:AB$ Animate | Cost$ U Sac<1/Island> | ValidTgts$ Land.OppCtrl | TgtPrompt$ Select target land an opponent controls | Types$ Island | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | SpellDescription$ Target land an opponent controls becomes an Island until end of turn. A:AB$ Animate | Cost$ U Sac<1/Island> | ValidTgts$ Land.OppCtrl | TgtPrompt$ Select target land an opponent controls | Types$ Island | RemoveLandTypes$ True | SpellDescription$ Target land an opponent controls becomes an Island until end of turn.
T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Island.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no Islands, sacrifice CARDNAME. T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Island.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no Islands, sacrifice CARDNAME.
SVar:TrigSac:DB$Sacrifice | Defined$ Self SVar:TrigSac:DB$Sacrifice | Defined$ Self
SVar:NeedsToPlay:Island.YouCtrl SVar:NeedsToPlay:Island.YouCtrl

View File

@@ -2,7 +2,7 @@ Name:Leeching Licid
ManaCost:1 B ManaCost:1 B
Types:Creature Licid Types:Creature Licid
PT:1/1 PT:1/1
A:AB$ Animate | Cost$ B T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ B | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveSubTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {B} to end this effect. A:AB$ Animate | Cost$ B T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ B | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveEnchantmentTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {B} to end this effect.
SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Curse SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Curse
SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ EnchantedController | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ At the beginning of the upkeep of enchanted creature's controller, CARDNAME deals 1 damage to that player. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ EnchantedController | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ At the beginning of the upkeep of enchanted creature's controller, CARDNAME deals 1 damage to that player.

View File

@@ -3,7 +3,7 @@ ManaCost:1 U
Types:Enchantment Aura Types:Enchantment Aura
K:Enchant land K:Enchant land
A:SP$ Attach | Cost$ 1 U | ValidTgts$ Land | AILogic$ ChangeType A:SP$ Attach | Cost$ 1 U | ValidTgts$ Land | AILogic$ ChangeType
S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Island | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Enchanted land is an Island. S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Island | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Enchanted land is an Island.
K:Cycling:2 K:Cycling:2
SVar:Picture:http://www.wizards.com/global/images/magic/general/lingering_mirage.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/lingering_mirage.jpg
Oracle:Enchant land\nEnchanted land is an Island.\nCycling {2} ({2}, Discard this card: Draw a card.) Oracle:Enchant land\nEnchanted land is an Island.\nCycling {2} ({2}, Discard this card: Draw a card.)

View File

@@ -1,7 +1,7 @@
Name:Lurking Evil Name:Lurking Evil
ManaCost:B B B ManaCost:B B B
Types:Enchantment Types:Enchantment
A:AB$ Animate | Cost$ PayLife<X> | Types$ Creature,Horror | Power$ 4 | Toughness$ 4 | Keywords$ Flying | OverwriteTypes$ True | Permanent$ True | CostDesc$ Pay half your life, rounded up: | References$ X | SpellDescription$ CARDNAME becomes a 4/4 Horror creature with flying. A:AB$ Animate | Cost$ PayLife<X> | Types$ Creature,Horror | Power$ 4 | Toughness$ 4 | Keywords$ Flying | RemoveCardTypes$ True | Permanent$ True | CostDesc$ Pay half your life, rounded up: | References$ X | SpellDescription$ CARDNAME becomes a 4/4 Horror creature with flying.
SVar:X:Count$YourLifeTotal/HalfUp SVar:X:Count$YourLifeTotal/HalfUp
SVar:RemRandomDeck:True SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/lurking_evil.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/lurking_evil.jpg

View File

@@ -2,6 +2,6 @@ Name:Lurking Jackals
ManaCost:B ManaCost:B
Types:Enchantment Types:Enchantment
T:Mode$ Always | LifeTotal$ OpponentSmallest | LifeAmount$ LE10 | TriggerZones$ Battlefield | Execute$ TrigLurkingJackalsAnimate | IsPresent$ Card.Self+Enchantment | ResolvingCheck$ IsPresent | TriggerDescription$ When an opponent has 10 or less life, if CARDNAME is an enchantment, CARDNAME becomes a 3/2 Jackal creature. T:Mode$ Always | LifeTotal$ OpponentSmallest | LifeAmount$ LE10 | TriggerZones$ Battlefield | Execute$ TrigLurkingJackalsAnimate | IsPresent$ Card.Self+Enchantment | ResolvingCheck$ IsPresent | TriggerDescription$ When an opponent has 10 or less life, if CARDNAME is an enchantment, CARDNAME becomes a 3/2 Jackal creature.
SVar:TrigLurkingJackalsAnimate:DB$ Animate | Types$ Creature,Jackal | Power$ 3 | Toughness$ 2 | OverwriteTypes$ True | Permanent$ True SVar:TrigLurkingJackalsAnimate:DB$ Animate | Types$ Creature,Jackal | Power$ 3 | Toughness$ 2 | RemoveCardTypes$ True | Permanent$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/lurking_jackals.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/lurking_jackals.jpg
Oracle:When an opponent has 10 or less life, if Lurking Jackals is an enchantment, it becomes a 3/2 Jackal creature. Oracle:When an opponent has 10 or less life, if Lurking Jackals is an enchantment, it becomes a 3/2 Jackal creature.

View File

@@ -2,6 +2,6 @@ Name:Lurking Skirge
ManaCost:1 B ManaCost:1 B
Types:Enchantment 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. 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 | OverwriteTypes$ True | Permanent$ True SVar:TrigAnimate:DB$ Animate | Defined$ Self | Power$ 3 | Toughness$ 2 | Types$ Creature,Imp | Keywords$ Flying | RemoveCardTypes$ True | Permanent$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/lurking_skirge.jpg 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. 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.

View File

@@ -3,7 +3,7 @@ ManaCost:G
Types:Enchantment Aura Types:Enchantment Aura
K:Enchant land K:Enchant land
A:SP$ Attach | Cost$ G | ValidTgts$ Land | AILogic$ Pump A:SP$ Attach | Cost$ G | ValidTgts$ Land | AILogic$ Pump
S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Mountain & Forest & Plains | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Enchanted land is a Mountain, Forest, and Plains. S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Mountain & Forest & Plains | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Enchanted land is a Mountain, Forest, and Plains.
SVar:RemRandomDeck:True SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/lush_growth.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/lush_growth.jpg
Oracle:Enchant land\nEnchanted land is a Mountain, Forest, and Plains. Oracle:Enchant land\nEnchanted land is a Mountain, Forest, and Plains.

View File

@@ -2,7 +2,7 @@ Name:Magus of the Moon
ManaCost:2 R ManaCost:2 R
Types:Creature Human Wizard Types:Creature Human Wizard
PT:2/2 PT:2/2
S:Mode$ Continuous | Affected$ Land.nonBasic | AddType$ Mountain | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Nonbasic lands are Mountains. S:Mode$ Continuous | Affected$ Land.nonBasic | AddType$ Mountain | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Nonbasic lands are Mountains.
SVar:RemRandomDeck:True SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/magus_of_the_moon.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/magus_of_the_moon.jpg
Oracle:Nonbasic lands are Mountains. Oracle:Nonbasic lands are Mountains.

View File

@@ -4,7 +4,7 @@ Types:Creature Illusion
PT:2/1 PT:2/1
K:Flying K:Flying
A:AB$ ChooseType | Cost$ 1 | Defined$ You | Type$ Creature | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn. A:AB$ ChooseType | Cost$ 1 | Defined$ You | Type$ Creature | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn.
SVar:DBAnimate:DB$ Animate | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True SVar:DBAnimate:DB$ Animate | Types$ ChosenType | RemoveCreatureTypes$ True
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_dreamer.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_dreamer.jpg
Oracle:Flying\n{1}: Mistform Dreamer becomes the creature type of your choice until end of turn. Oracle:Flying\n{1}: Mistform Dreamer becomes the creature type of your choice until end of turn.

View File

@@ -4,7 +4,7 @@ Types:Enchantment Aura
K:Enchant creature K:Enchant creature
A:SP$ Attach | Cost$ 1 U | ValidTgts$ Creature | AILogic$ Pump A:SP$ Attach | Cost$ 1 U | ValidTgts$ Creature | AILogic$ Pump
A:AB$ ChooseType | Cost$ 1 | Type$ Creature | AILogic$ MostProminentComputerControls | SubAbility$ DBAnimate | SpellDescription$ Enchanted creature becomes the creature type of your choice until end of turn. A:AB$ ChooseType | Cost$ 1 | Type$ Creature | AILogic$ MostProminentComputerControls | SubAbility$ DBAnimate | SpellDescription$ Enchanted creature becomes the creature type of your choice until end of turn.
SVar:DBAnimate:DB$ Animate | Defined$ Enchanted | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True SVar:DBAnimate:DB$ Animate | Defined$ Enchanted | Types$ ChosenType | RemoveCreatureTypes$ True
SVar:NonStackingAttachEffect:True SVar:NonStackingAttachEffect:True
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:RemRandomDeck:True SVar:RemRandomDeck:True

View File

@@ -3,7 +3,7 @@ ManaCost:4 U U
Types:Creature Illusion Mutant Types:Creature Illusion Mutant
PT:3/4 PT:3/4
A:AB$ ChooseType | Cost$ 1 U | Defined$ You | Type$ Creature | InvalidTypes$ Wall | SubAbility$ DBAnimate | SpellDescription$ Choose a creature type other than Wall. Target creature becomes that type until end of turn. A:AB$ ChooseType | Cost$ 1 U | Defined$ You | Type$ Creature | InvalidTypes$ Wall | SubAbility$ DBAnimate | SpellDescription$ Choose a creature type other than Wall. Target creature becomes that type until end of turn.
SVar:DBAnimate:DB$ Animate | ValidTgts$ Creature | TgtPrompt$ Select target creature | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True SVar:DBAnimate:DB$ Animate | ValidTgts$ Creature | TgtPrompt$ Select target creature | Types$ ChosenType | RemoveCreatureTypes$ True
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_mutant.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_mutant.jpg
Oracle:{1}{U}: Choose a creature type other than Wall. Target creature becomes that type until end of turn. Oracle:{1}{U}: Choose a creature type other than Wall. Target creature becomes that type until end of turn.

View File

@@ -4,7 +4,7 @@ Types:Creature Illusion
PT:3/1 PT:3/1
K:Flying K:Flying
A:AB$ ChooseType | Cost$ 1 | Defined$ You | Type$ Creature | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn. A:AB$ ChooseType | Cost$ 1 | Defined$ You | Type$ Creature | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn.
SVar:DBAnimate:DB$ Animate | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True SVar:DBAnimate:DB$ Animate | Types$ ChosenType | RemoveCreatureTypes$ True
K:Morph:1 U K:Morph:1 U
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_seaswift.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_seaswift.jpg

View File

@@ -4,7 +4,7 @@ Types:Creature Illusion
PT:3/3 PT:3/3
K:Flying K:Flying
A:AB$ ChooseType | Cost$ 1 | Defined$ You | Type$ Creature | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn. A:AB$ ChooseType | Cost$ 1 | Defined$ You | Type$ Creature | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn.
SVar:DBAnimate:DB$ Animate | Defined$ Self | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True SVar:DBAnimate:DB$ Animate | Types$ ChosenType | RemoveCreatureTypes$ True
K:Morph:3 U U K:Morph:3 U U
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_shrieker.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_shrieker.jpg

View File

@@ -4,7 +4,7 @@ Types:Creature Illusion
PT:6/6 PT:6/6
K:Flying K:Flying
A:AB$ ChooseType | Cost$ 1 | Defined$ You | Type$ Creature | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn. A:AB$ ChooseType | Cost$ 1 | Defined$ You | Type$ Creature | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn.
SVar:DBAnimate:DB$ Animate | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True SVar:DBAnimate:DB$ Animate | Types$ ChosenType | RemoveCreatureTypes$ True
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_skyreaver.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_skyreaver.jpg
Oracle:Flying\n{1}: Mistform Skyreaver becomes the creature type of your choice until end of turn. Oracle:Flying\n{1}: Mistform Skyreaver becomes the creature type of your choice until end of turn.

View File

@@ -3,7 +3,7 @@ ManaCost:1 U
Types:Creature Illusion Types:Creature Illusion
PT:1/1 PT:1/1
A:AB$ ChooseType | Cost$ 1 | Defined$ You | Type$ Creature | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn. A:AB$ ChooseType | Cost$ 1 | Defined$ You | Type$ Creature | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn.
SVar:DBAnimate:DB$ Animate | Defined$ Self | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True SVar:DBAnimate:DB$ Animate | Types$ ChosenType | RemoveCreatureTypes$ True
A:AB$ Pump | Cost$ 2 U U | Defined$ Self | NumAtt$ +2 | NumDef$ +2 | KW$ Flying | SpellDescription$ CARDNAME gets +2/+2 and gains flying until end of turn. A:AB$ Pump | Cost$ 2 U U | Defined$ Self | NumAtt$ +2 | NumDef$ +2 | KW$ Flying | SpellDescription$ CARDNAME gets +2/+2 and gains flying until end of turn.
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_stalker.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_stalker.jpg

View File

@@ -4,9 +4,9 @@ Types:Creature Illusion
PT:2/3 PT:2/3
K:Flying K:Flying
A:AB$ ChooseType | Cost$ 1 | Type$ Creature | Defined$ You | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn. A:AB$ ChooseType | Cost$ 1 | Type$ Creature | Defined$ You | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn.
SVar:DBAnimate:DB$ Animate | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True SVar:DBAnimate:DB$ Animate | Types$ ChosenType | RemoveCreatureTypes$ True
A:AB$ ChooseType | Cost$ 2 U U T | Type$ Creature | Defined$ You | SubAbility$ DBAnimateAll | SpellDescription$ Choose a creature type. Each creature you control becomes that type until end of turn. A:AB$ ChooseType | Cost$ 2 U U T | Type$ Creature | Defined$ You | SubAbility$ DBAnimateAll | SpellDescription$ Choose a creature type. Each creature you control becomes that type until end of turn.
SVar:DBAnimateAll:DB$ AnimateAll | ValidCards$ Creature.YouCtrl | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True SVar:DBAnimateAll:DB$ AnimateAll | ValidCards$ Creature.YouCtrl | Types$ ChosenType | RemoveCreatureTypes$ True
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_wakecaster.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_wakecaster.jpg
Oracle:Flying\n{1}: Mistform Wakecaster becomes the creature type of your choice until end of turn.\n{2}{U}{U}, {T}: Choose a creature type. Each creature you control becomes that type until end of turn. Oracle:Flying\n{1}: Mistform Wakecaster becomes the creature type of your choice until end of turn.\n{2}{U}{U}, {T}: Choose a creature type. Each creature you control becomes that type until end of turn.

View File

@@ -4,7 +4,7 @@ Types:Creature Illusion Wall
PT:1/4 PT:1/4
S:Mode$ Continuous | Affected$ Card.Self+Wall | AddKeyword$ Defender | Description$ CARDNAME has defender as long as it's a Wall. S:Mode$ Continuous | Affected$ Card.Self+Wall | AddKeyword$ Defender | Description$ CARDNAME has defender as long as it's a Wall.
A:AB$ ChooseType | Cost$ 1 | Type$ Creature | AILogic$ MostProminentComputerControls | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn. A:AB$ ChooseType | Cost$ 1 | Type$ Creature | AILogic$ MostProminentComputerControls | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn.
SVar:DBAnimate:DB$ Animate | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True SVar:DBAnimate:DB$ Animate | Types$ ChosenType | RemoveCreatureTypes$ True
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_wall.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_wall.jpg
Oracle:Mistform Wall has defender as long as it's a Wall.\n{1}: Mistform Wall becomes the creature type of your choice until end of turn. Oracle:Mistform Wall has defender as long as it's a Wall.\n{1}: Mistform Wall becomes the creature type of your choice until end of turn.

View File

@@ -4,7 +4,7 @@ Types:Creature Illusion
PT:1/3 PT:1/3
S:Mode$ ReduceCost | ValidCard$ Creature.sharesCreatureTypeWith | Type$ Spell | Activator$ You | Amount$ 1 | Description$ Creature spells you cast that share a creature type with CARDNAME cost {1} less to cast. S:Mode$ ReduceCost | ValidCard$ Creature.sharesCreatureTypeWith | Type$ Spell | Activator$ You | Amount$ 1 | Description$ Creature spells you cast that share a creature type with CARDNAME cost {1} less to cast.
A:AB$ ChooseType | Cost$ T | Defined$ You | Type$ Creature | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn. A:AB$ ChooseType | Cost$ T | Defined$ You | Type$ Creature | SubAbility$ DBAnimate | SpellDescription$ CARDNAME becomes the creature type of your choice until end of turn.
SVar:DBAnimate:DB$ Animate | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True SVar:DBAnimate:DB$ Animate | Types$ ChosenType | RemoveCreatureTypes$ True
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_warchief.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_warchief.jpg
Oracle:Creature spells you cast that share a creature type with Mistform Warchief cost {1} less to cast.\n{T}: Mistform Warchief becomes the creature type of your choice until end of turn. Oracle:Creature spells you cast that share a creature type with Mistform Warchief cost {1} less to cast.\n{T}: Mistform Warchief becomes the creature type of your choice until end of turn.

View File

@@ -4,7 +4,7 @@ Types:Creature Moonfolk Wizard
PT:2/1 PT:2/1
K:Flying K:Flying
A:AB$ ChooseType | Cost$ 2 Return<1/Land> | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land becomes the basic land type of your choice until end of turn. A:AB$ ChooseType | Cost$ 2 Return<1/Land> | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land becomes the basic land type of your choice until end of turn.
SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/moonbow_illusionist.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/moonbow_illusionist.jpg
Oracle:Flying\n{2}, Return a land you control to its owner's hand: Target land becomes the basic land type of your choice until end of turn. Oracle:Flying\n{2}, Return a land you control to its owner's hand: Target land becomes the basic land type of your choice until end of turn.

View File

@@ -2,7 +2,7 @@ Name:Mystic Compass
ManaCost:2 ManaCost:2
Types:Artifact Types:Artifact
A:AB$ ChooseType | Cost$ 1 T | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land becomes the basic land type of your choice until end of turn. A:AB$ ChooseType | Cost$ 1 T | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land becomes the basic land type of your choice until end of turn.
SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mystic_compass.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/mystic_compass.jpg
Oracle:{1}, {T}: Target land becomes the basic land type of your choice until end of turn. Oracle:{1}, {T}: Target land becomes the basic land type of your choice until end of turn.

View File

@@ -2,7 +2,7 @@ Name:Nightcreep
ManaCost:B B ManaCost:B B
Types:Instant Types:Instant
A:SP$ AnimateAll | Cost$ B B | ValidCards$ Creature | Colors$ Black | OverwriteColors$ True | SubAbility$ AnimateSwamp | SpellDescription$ Until end of turn, all creatures become black and all lands become Swamps. A:SP$ AnimateAll | Cost$ B B | ValidCards$ Creature | Colors$ Black | OverwriteColors$ True | SubAbility$ AnimateSwamp | SpellDescription$ Until end of turn, all creatures become black and all lands become Swamps.
SVar:AnimateSwamp:DB$AnimateAll | ValidCards$ Land | Types$ Swamp | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True SVar:AnimateSwamp:DB$AnimateAll | ValidCards$ Land | Types$ Swamp | RemoveLandTypes$ True
SVar:RemRandomDeck:True SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/nightcreep.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/nightcreep.jpg
Oracle:Until end of turn, all creatures become black and all lands become Swamps. Oracle:Until end of turn, all creatures become black and all lands become Swamps.

View File

@@ -2,7 +2,7 @@ Name:Nurturing Licid
ManaCost:1 G ManaCost:1 G
Types:Creature Licid Types:Creature Licid
PT:1/1 PT:1/1
A:AB$ Animate | Cost$ G T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ G | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveSubTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {G} to end this effect. A:AB$ Animate | Cost$ G T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ G | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveEnchantmentTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {G} to end this effect.
SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Pump SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Pump
SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature
A:AB$ Regenerate | Cost$ G | Defined$ Enchanted | SpellDescription$ Regenerate enchanted creature. A:AB$ Regenerate | Cost$ G | Defined$ Enchanted | SpellDescription$ Regenerate enchanted creature.

View File

@@ -2,8 +2,8 @@ Name:Opal Acrolith
ManaCost:2 W ManaCost:2 W
Types:Enchantment Types:Enchantment
T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 2/4 Soldier creature. T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 2/4 Soldier creature.
A:AB$ Animate | Cost$ 0 | Defined$ Self | Types$ Enchantment | OverwriteTypes$ True | Permanent$ True | SpellDescription$ CARDNAME becomes an enchantment. A:AB$ Animate | Cost$ 0 | Defined$ Self | Types$ Enchantment | RemoveCardTypes$ True | Permanent$ True | SpellDescription$ CARDNAME becomes an enchantment.
SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 2 | Toughness$ 4 | Types$ Creature,Soldier | OverwriteTypes$ True | Permanent$ True SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 2 | Toughness$ 4 | Types$ Creature,Soldier | RemoveCardTypes$ True | Permanent$ True
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/opal_acrolith.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/opal_acrolith.jpg
Oracle:Whenever an opponent casts a creature spell, if Opal Acrolith is an enchantment, Opal Acrolith becomes a 2/4 Soldier creature.\n{0}: Opal Acrolith becomes an enchantment. Oracle:Whenever an opponent casts a creature spell, if Opal Acrolith is an enchantment, Opal Acrolith becomes a 2/4 Soldier creature.\n{0}: Opal Acrolith becomes an enchantment.

View File

@@ -1,7 +1,7 @@
Name:Opal Archangel Name:Opal Archangel
ManaCost:4 W ManaCost:4 W
Types:Enchantment Types:Enchantment
T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment| Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 5/5 Angel creature with flying and vigilance. T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 5/5 Angel creature with flying and vigilance.
SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 5 | Toughness$ 5 | Keywords$ Flying & Vigilance | Types$ Creature,Angel | OverwriteTypes$ True | Permanent$ True SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 5 | Toughness$ 5 | Keywords$ Flying & Vigilance | Types$ Creature,Angel | RemoveCardTypes$ True | Permanent$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/opal_archangel.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/opal_archangel.jpg
Oracle:When an opponent casts a creature spell, if Opal Archangel is an enchantment, Opal Archangel becomes a 5/5 Angel creature with flying and vigilance. Oracle:When an opponent casts a creature spell, if Opal Archangel is an enchantment, Opal Archangel becomes a 5/5 Angel creature with flying and vigilance.

View File

@@ -2,6 +2,6 @@ Name:Opal Avenger
ManaCost:2 W ManaCost:2 W
Types:Enchantment Types:Enchantment
T:Mode$ Always | LifeTotal$ You | LifeAmount$ LE10 | TriggerZones$ Battlefield | Execute$ TrigOpalAvengerAnimate | IsPresent$ Card.Self+Enchantment | ResolvingCheck$ IsPresent | TriggerDescription$ When you have 10 or less life, if CARDNAME is an enchantment, CARDNAME becomes a 3/5 Soldier creature. T:Mode$ Always | LifeTotal$ You | LifeAmount$ LE10 | TriggerZones$ Battlefield | Execute$ TrigOpalAvengerAnimate | IsPresent$ Card.Self+Enchantment | ResolvingCheck$ IsPresent | TriggerDescription$ When you have 10 or less life, if CARDNAME is an enchantment, CARDNAME becomes a 3/5 Soldier creature.
SVar:TrigOpalAvengerAnimate:DB$ Animate | Types$ Creature,Soldier | Power$ 3 | Toughness$ 5 | OverwriteTypes$ True | Permanent$ True SVar:TrigOpalAvengerAnimate:DB$ Animate | Types$ Creature,Soldier | Power$ 3 | Toughness$ 5 | RemoveCardTypes$ True | Permanent$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/opal_avenger.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/opal_avenger.jpg
Oracle:When you have 10 or less life, if Opal Avenger is an enchantment, Opal Avenger becomes a 3/5 Soldier creature. Oracle:When you have 10 or less life, if Opal Avenger is an enchantment, Opal Avenger becomes a 3/5 Soldier creature.

View File

@@ -2,6 +2,6 @@ Name:Opal Caryatid
ManaCost:W ManaCost:W
Types:Enchantment Types:Enchantment
T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 2/2 Soldier creature. T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 2/2 Soldier creature.
SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 2 | Toughness$ 2 | Types$ Creature,Soldier | OverwriteTypes$ True | Permanent$ True SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 2 | Toughness$ 2 | Types$ Creature,Soldier | RemoveCardTypes$ True | Permanent$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/opal_caryatid.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/opal_caryatid.jpg
Oracle:When an opponent casts a creature spell, if Opal Caryatid is an enchantment, Opal Caryatid becomes a 2/2 Soldier creature. Oracle:When an opponent casts a creature spell, if Opal Caryatid is an enchantment, Opal Caryatid becomes a 2/2 Soldier creature.

View File

@@ -2,6 +2,6 @@ Name:Opal Champion
ManaCost:2 W ManaCost:2 W
Types:Enchantment Types:Enchantment
T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment| Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 3/3 Knight creature with first strike. T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment| Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 3/3 Knight creature with first strike.
SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 3 | Toughness$ 3 | Keywords$ First Strike | Types$ Creature,Knight | OverwriteTypes$ True | Permanent$ True SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 3 | Toughness$ 3 | Keywords$ First Strike | Types$ Creature,Knight | RemoveCardTypes$ True | Permanent$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/opal_champion.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/opal_champion.jpg
Oracle:When an opponent casts a creature spell, if Opal Champion is an enchantment, Opal Champion becomes a 3/3 Knight creature with first strike. Oracle:When an opponent casts a creature spell, if Opal Champion is an enchantment, Opal Champion becomes a 3/3 Knight creature with first strike.

View File

@@ -2,6 +2,6 @@ Name:Opal Gargoyle
ManaCost:1 W ManaCost:1 W
Types:Enchantment Types:Enchantment
T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 2/2 Gargoyle creature with flying. T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 2/2 Gargoyle creature with flying.
SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 2 | Toughness$ 2 | Types$ Creature,Gargoyle | Keywords$ Flying | OverwriteTypes$ True | Permanent$ True SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 2 | Toughness$ 2 | Types$ Creature,Gargoyle | Keywords$ Flying | RemoveCardTypes$ True | Permanent$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/opal_gargoyle.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/opal_gargoyle.jpg
Oracle:When an opponent casts a creature spell, if Opal Gargoyle is an enchantment, Opal Gargoyle becomes a 2/2 Gargoyle creature with flying. Oracle:When an opponent casts a creature spell, if Opal Gargoyle is an enchantment, Opal Gargoyle becomes a 2/2 Gargoyle creature with flying.

View File

@@ -2,6 +2,6 @@ Name:Opal Guardian
ManaCost:W W W ManaCost:W W W
Types:Enchantment Types:Enchantment
T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 3/4 Gargoyle creature with flying and protection from red. T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 3/4 Gargoyle creature with flying and protection from red.
SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 3 | Toughness$ 4 | Types$ Creature,Gargoyle | Keywords$ Flying & Protection from red | OverwriteTypes$ True | Permanent$ True SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 3 | Toughness$ 4 | Types$ Creature,Gargoyle | Keywords$ Flying & Protection from red | RemoveCardTypes$ True | Permanent$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/opal_guardian.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/opal_guardian.jpg
Oracle:When an opponent casts a creature spell, if Opal Guardian is an enchantment, Opal Guardian becomes a 3/4 Gargoyle creature with flying and protection from red. Oracle:When an opponent casts a creature spell, if Opal Guardian is an enchantment, Opal Guardian becomes a 3/4 Gargoyle creature with flying and protection from red.

View File

@@ -2,7 +2,7 @@ Name:Opal Titan
ManaCost:2 W W ManaCost:2 W W
Types:Enchantment Types:Enchantment
T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | Execute$ TrigOpalTitanAnimate | IsPresent$ Card.Self+Enchantment | TriggerZones$ Battlefield | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 4/4 Giant creature with protection from each of that spell's colors. T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | Execute$ TrigOpalTitanAnimate | IsPresent$ Card.Self+Enchantment | TriggerZones$ Battlefield | TriggerDescription$ When an opponent casts a creature spell, if CARDNAME is an enchantment, CARDNAME becomes a 4/4 Giant creature with protection from each of that spell's colors.
SVar:TrigOpalTitanAnimate:DB$ Animate | Defined$ Self | Types$ Creature,Giant | Power$ 4 | Toughness$ 4 | OverwriteTypes$ True | Permanent$ True | SubAbility$ DBOpalTitanProtectionWhite | Permanent$ True SVar:TrigOpalTitanAnimate:DB$ Animate | Defined$ Self | Types$ Creature,Giant | Power$ 4 | Toughness$ 4 | RemoveCardTypes$ True | Permanent$ True | SubAbility$ DBOpalTitanProtectionWhite | Permanent$ True
SVar:DBOpalTitanProtectionWhite:DB$ Protection | Gains$ white | ConditionDefined$ TriggeredCard | ConditionPresent$ Card.White | ConditionCompare$ GE1 | SubAbility$ DBOpalTitanProtectionBlue | Permanent$ True SVar:DBOpalTitanProtectionWhite:DB$ Protection | Gains$ white | ConditionDefined$ TriggeredCard | ConditionPresent$ Card.White | ConditionCompare$ GE1 | SubAbility$ DBOpalTitanProtectionBlue | Permanent$ True
SVar:DBOpalTitanProtectionBlue:DB$ Protection | Gains$ blue | ConditionDefined$ TriggeredCard | ConditionPresent$ Card.Blue | ConditionCompare$ GE1 | SubAbility$ DBOpalTitanProtectionBlack | Permanent$ True SVar:DBOpalTitanProtectionBlue:DB$ Protection | Gains$ blue | ConditionDefined$ TriggeredCard | ConditionPresent$ Card.Blue | ConditionCompare$ GE1 | SubAbility$ DBOpalTitanProtectionBlack | Permanent$ True
SVar:DBOpalTitanProtectionBlack:DB$ Protection | Gains$ black | ConditionDefined$ TriggeredCard | ConditionPresent$ Card.Black | ConditionCompare$ GE1 | SubAbility$ DBOpalTitanProtectionGreen | Permanent$ True SVar:DBOpalTitanProtectionBlack:DB$ Protection | Gains$ black | ConditionDefined$ TriggeredCard | ConditionPresent$ Card.Black | ConditionCompare$ GE1 | SubAbility$ DBOpalTitanProtectionGreen | Permanent$ True

View File

@@ -2,7 +2,7 @@ Name:Orcish Farmer
ManaCost:1 R R ManaCost:1 R R
Types:Creature Orc Types:Creature Orc
PT:2/2 PT:2/2
A:AB$ Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Swamp | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True | UntilControllerNextUntap$ True | SpellDescription$ Target land becomes a Swamp until its controller's next untap step. A:AB$ Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Swamp | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | UntilControllerNextUntap$ True | SpellDescription$ Target land becomes a Swamp until its controller's next untap step.
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/orcish_farmer.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/orcish_farmer.jpg
Oracle:{T}: Target land becomes a Swamp until its controller's next untap step. Oracle:{T}: Target land becomes a Swamp until its controller's next untap step.

View File

@@ -5,7 +5,7 @@ K:Enchant land
A:SP$ Attach | Cost$ U U | ValidTgts$ Land | AILogic$ ChangeType A:SP$ Attach | Cost$ U U | ValidTgts$ Land | AILogic$ ChangeType
K:ETBReplacement:Other:DBChooseBasic K:ETBReplacement:Other:DBChooseBasic
SVar:DBChooseBasic:DB$ ChooseType | Type$ Basic Land | SpellDescription$ As CARDNAME enters the battlefield, choose a basic land type. SVar:DBChooseBasic:DB$ ChooseType | Type$ Basic Land | SpellDescription$ As CARDNAME enters the battlefield, choose a basic land type.
S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ ChosenType | RemoveSubTypes$ True | RemoveAllAbilities$ True | Description$ Enchanted land is the chosen type. S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Enchanted land is the chosen type.
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/phantasmal_terrain.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/phantasmal_terrain.jpg
Oracle:Enchant land\nAs Phantasmal Terrain enters the battlefield, choose a basic land type.\nEnchanted land is the chosen type. Oracle:Enchant land\nAs Phantasmal Terrain enters the battlefield, choose a basic land type.\nEnchanted land is the chosen type.

View File

@@ -5,6 +5,6 @@ PT:2/2
K:Morph:0 K:Morph:0
T:Mode$ TurnFaceUp | ValidCard$ Card.Self | Execute$ TrigChoose | TriggerZones$ Battlefield | TriggerDescription$ When CARDNAME is turned face up, it becomes the creature type of your choice. (This effect lasts indefinitely.) T:Mode$ TurnFaceUp | ValidCard$ Card.Self | Execute$ TrigChoose | TriggerZones$ Battlefield | TriggerDescription$ When CARDNAME is turned face up, it becomes the creature type of your choice. (This effect lasts indefinitely.)
SVar:TrigChoose:DB$ ChooseType | Cost$ 1 | Defined$ You | Type$ Creature | SubAbility$ DBAnimate | AILogic$ MostProminentInComputerDeck SVar:TrigChoose:DB$ ChooseType | Cost$ 1 | Defined$ You | Type$ Creature | SubAbility$ DBAnimate | AILogic$ MostProminentInComputerDeck
SVar:DBAnimate:DB$ Animate | Defined$ Self | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | LastsIndefinitely$ True SVar:DBAnimate:DB$ Animate | Defined$ Self | Types$ ChosenType | RemoveCreatureTypes$ True | Permanent$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/proteus_machine.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/proteus_machine.jpg
Oracle:Morph {0} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.)\nWhen Proteus Machine is turned face up, it becomes the creature type of your choice. (This effect lasts indefinitely.) Oracle:Morph {0} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.)\nWhen Proteus Machine is turned face up, it becomes the creature type of your choice. (This effect lasts indefinitely.)

View File

@@ -2,7 +2,7 @@ Name:Quickening Licid
ManaCost:1 W ManaCost:1 W
Types:Creature Licid Types:Creature Licid
PT:1/1 PT:1/1
A:AB$ Animate | Cost$ W T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ W | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveSubTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {W} to end this effect. A:AB$ Animate | Cost$ W T | Defined$ Self | RemoveThisAbility$ True | Permanent$ True | RevertCost$ W | Keywords$ Enchant creature | Abilities$ SPAttach | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveEnchantmentTypes$ True | SubAbility$ DBAttach | SpellDescription$ CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {W} to end this effect.
SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Pump SVar:DBAttach:DB$ Attach | ValidTgts$ Creature | AILogic$ Pump
SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ First Strike | Description$ Enchanted creature has first strike. S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ First Strike | Description$ Enchanted creature has first strike.

View File

@@ -4,7 +4,7 @@ Types:Artifact
T:Mode$ Phase | Phase$ Upkeep | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of each player's upkeep, that player puts a flood counter on target non-Island land they control of their choice. That land is an Island for as long as it has a flood counter on it. T:Mode$ Phase | Phase$ Upkeep | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of each player's upkeep, that player puts a flood counter on target non-Island land they control of their choice. That land is an Island for as long as it has a flood counter on it.
SVar:TrigPutCounter:DB$ PutCounter | TargetingPlayer$ TriggeredPlayer | ValidTgts$ Land.nonIsland+ActivePlayerCtrl | TgtPrompt$ Select target non-Island land you control | CounterType$ FLOOD | CounterNum$ 1 | SubAbility$ DBAnimate SVar:TrigPutCounter:DB$ PutCounter | TargetingPlayer$ TriggeredPlayer | ValidTgts$ Land.nonIsland+ActivePlayerCtrl | TgtPrompt$ Select target non-Island land you control | CounterType$ FLOOD | CounterNum$ 1 | SubAbility$ DBAnimate
SVar:DBAnimate:DB$ Animate | Defined$ Targeted | staticAbilities$ STFlood | Permanent$ True SVar:DBAnimate:DB$ Animate | Defined$ Targeted | staticAbilities$ STFlood | Permanent$ True
SVar:STFlood:Mode$ Continuous | EffectZone$ Battlefield | Affected$ Card.Self+counters_GE1_FLOOD | AddType$ Island | RemoveSubTypes$ True | RemoveAllAbilities$ True SVar:STFlood:Mode$ Continuous | EffectZone$ Battlefield | Affected$ Card.Self+counters_GE1_FLOOD | AddType$ Island | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True
T:Mode$ Phase | Phase$ End of Turn | CheckSVar$ X | SVarCompare$ EQ0 | TriggerZones$ Battlefield | Execute$ TrigRemoveAll | References$ X | TriggerDescription$ At the beginning of each end step, if all lands on the battlefield are Islands, remove all flood counters from them. T:Mode$ Phase | Phase$ End of Turn | CheckSVar$ X | SVarCompare$ EQ0 | TriggerZones$ Battlefield | Execute$ TrigRemoveAll | References$ X | TriggerDescription$ At the beginning of each end step, if all lands on the battlefield are Islands, remove all flood counters from them.
SVar:TrigRemoveAll:DB$ RemoveCounterAll | ValidCards$ Land | CounterType$ FLOOD | AllCounters$ True SVar:TrigRemoveAll:DB$ RemoveCounterAll | ValidCards$ Land | CounterType$ FLOOD | AllCounters$ True
SVar:X:Count$Valid Land.nonIsland SVar:X:Count$Valid Land.nonIsland

View File

@@ -3,7 +3,7 @@ ManaCost:U
Types:Creature Merfolk Shaman Types:Creature Merfolk Shaman
PT:0/2 PT:0/2
A:AB$ ChooseType | Cost$ T | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land becomes the basic land type of your choice until end of turn. A:AB$ ChooseType | Cost$ T | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land becomes the basic land type of your choice until end of turn.
SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/reef_shaman.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/reef_shaman.jpg
Oracle:{T}: Target land becomes the basic land type of your choice until end of turn. Oracle:{T}: Target land becomes the basic land type of your choice until end of turn.

View File

@@ -2,7 +2,7 @@ Name:Sarkhan, the Dragonspeaker
ManaCost:3 R R ManaCost:3 R R
Types:Legendary Planeswalker Sarkhan Types:Legendary Planeswalker Sarkhan
Loyalty:4 Loyalty:4
A:AB$ Animate | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | Power$ 4 | Toughness$ 4 | Types$ Creature,Legendary,Dragon | Colors$ Red | OverwriteColors$ True | OverwriteTypes$ True | KeepSupertypes$ True | Keywords$ Flying & Indestructible & Haste | SpellDescription$ Until end of turn, CARDNAME becomes a legendary 4/4 red Dragon creature with flying, indestructible, and haste. (He doesn't lose loyalty while he's not a planeswalker.) A:AB$ Animate | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | Power$ 4 | Toughness$ 4 | Types$ Creature,Legendary,Dragon | Colors$ Red | OverwriteColors$ True | RemoveCardTypes$ True | Keywords$ Flying & Indestructible & Haste | SpellDescription$ Until end of turn, CARDNAME becomes a legendary 4/4 red Dragon creature with flying, indestructible, and haste. (He doesn't lose loyalty while he's not a planeswalker.)
A:AB$ DealDamage | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 4 | SpellDescription$ CARDNAME deals 4 damage to target creature. A:AB$ DealDamage | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 4 | SpellDescription$ CARDNAME deals 4 damage to target creature.
A:AB$ Effect | Cost$ SubCounter<6/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Emblem - Sarkhan, the Dragonspeaker | Triggers$ BODTrig,EOTTrig | SVars$ SarkhanDraw,SarkhanDiscard | Duration$ Permanent | AILogic$ Always | SpellDescription$ You get an emblem with "At the beginning of your draw step, draw two additional cards" and "At the beginning of your end step, discard your hand." A:AB$ Effect | Cost$ SubCounter<6/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Emblem - Sarkhan, the Dragonspeaker | Triggers$ BODTrig,EOTTrig | SVars$ SarkhanDraw,SarkhanDiscard | Duration$ Permanent | AILogic$ Always | SpellDescription$ You get an emblem with "At the beginning of your draw step, draw two additional cards" and "At the beginning of your end step, discard your hand."
SVar:BODTrig:Mode$ Phase | Phase$ Draw | ValidPlayer$ You | TriggerZones$ Command | Execute$ SarkhanDraw | TriggerDescription$ At the beginning of your draw step, draw two additional cards. SVar:BODTrig:Mode$ Phase | Phase$ Draw | ValidPlayer$ You | TriggerZones$ Command | Execute$ SarkhanDraw | TriggerDescription$ At the beginning of your draw step, draw two additional cards.

View File

@@ -3,7 +3,7 @@ ManaCost:4 U
Types:Creature Beast Types:Creature Beast
PT:3/3 PT:3/3
A:AB$ ChooseType | Cost$ T | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land becomes the basic land type of your choice until end of turn. A:AB$ ChooseType | Cost$ T | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land becomes the basic land type of your choice until end of turn.
SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | RemoveAllAbilities$ True SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/sea_snidd.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/sea_snidd.jpg
Oracle:{T}: Target land becomes the basic land type of your choice until end of turn. Oracle:{T}: Target land becomes the basic land type of your choice until end of turn.

Some files were not shown because too many files have changed in this diff Show More