mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 11:48:02 +00:00
Merge branch 'master' of git.cardforge.org:core-developers/forge into agetian-master
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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")) {
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
for (final KeywordsChange ck : changedCardKeywords.values()) {
|
||||||
|
if (ck.isRemoveIntrinsicKeywords()) {
|
||||||
|
removeIntrinsic = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
keywords.insertAll(state.getIntrinsicKeywords());
|
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() {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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.)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.)
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.)
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.)
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.)
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
Reference in New Issue
Block a user