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

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

View File

@@ -1573,7 +1573,7 @@ public class ComputerUtilCard {
pumped.addNewPT(c.getCurrentPower(), c.getCurrentToughness(), timestamp);
pumped.addTempPowerBoost(c.getTempPowerBoost() + power + berserkPower);
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();
for(CounterType ct : types) {
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?
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));
return pumped;
}

View File

@@ -23,12 +23,12 @@ import forge.game.staticability.StaticAbilityLayer;
import forge.game.trigger.Trigger;
import forge.game.trigger.TriggerHandler;
import forge.game.zone.ZoneType;
import forge.util.collect.FCollectionView;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import forge.game.ability.effects.AnimateEffectBase;
/**
* <p>
@@ -363,11 +363,11 @@ public class AnimateAi extends SpellAbilityAi {
card.setSickness(hasOriginalCardSickness);
// AF specific sa
int power = -1;
Integer power = null;
if (sa.hasParam("Power")) {
power = AbilityUtils.calculateAmount(source, sa.getParam("Power"), sa);
}
int toughness = -1;
Integer toughness = null;
if (sa.hasParam("Toughness")) {
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(",")));
}
// duplicating AnimateEffectBase.doAnimate
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);
AnimateEffectBase.doAnimate(card, sa, power, toughness, types, removeTypes, finalDesc, keywords, removeKeywords, hiddenKeywords, timestamp);
// back to duplicating AnimateEffect.resolve
// 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 clearSpells = sa.hasParam("OverwriteSpells");
boolean removeAll = sa.hasParam("RemoveAllAbilities");
boolean removeIntrinsic = sa.hasParam("RemoveIntrinsicAbilities");
if (clearAbilities || clearSpells || removeAll) {
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);
removedAbilities.add(ab);
}
@@ -565,9 +511,11 @@ public class AnimateAi extends SpellAbilityAi {
// suppress triggers from the animated card
final List<Trigger> removedTriggers = Lists.newArrayList();
if (sa.hasParam("OverwriteTriggers") || removeAll) {
final FCollectionView<Trigger> triggersToRemove = card.getTriggers();
for (final Trigger trigger : triggersToRemove) {
if (sa.hasParam("OverwriteTriggers") || removeAll || removeIntrinsic) {
for (final Trigger trigger : card.getTriggers()) {
if (removeIntrinsic && !trigger.isIntrinsic()) {
continue;
}
trigger.setSuppressed(true);
removedTriggers.add(trigger);
}
@@ -603,9 +551,11 @@ public class AnimateAi extends SpellAbilityAi {
// suppress static abilities from the animated card
final List<StaticAbility> removedStatics = Lists.newArrayList();
if (sa.hasParam("OverwriteStatics") || removeAll) {
final FCollectionView<StaticAbility> staticsToRemove = card.getStaticAbilities();
for (final StaticAbility stAb : staticsToRemove) {
if (sa.hasParam("OverwriteStatics") || removeAll || removeIntrinsic) {
for (final StaticAbility stAb : card.getStaticAbilities()) {
if (removeIntrinsic && !stAb.isIntrinsic()) {
continue;
}
stAb.setTemporarilySuppressed(true);
removedStatics.add(stAb);
}
@@ -613,8 +563,11 @@ public class AnimateAi extends SpellAbilityAi {
// suppress static abilities from the animated card
final List<ReplacementEffect> removedReplacements = Lists.newArrayList();
if (sa.hasParam("OverwriteReplacements") || removeAll) {
if (sa.hasParam("OverwriteReplacements") || removeAll || removeIntrinsic) {
for (final ReplacementEffect re : card.getReplacementEffects()) {
if (removeIntrinsic && !re.isIntrinsic()) {
continue;
}
re.setTemporarilySuppressed(true);
removedReplacements.add(re);
}

View File

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

View File

@@ -190,7 +190,7 @@ public final class CardType implements Comparable<CardType>, CardTypeView {
public boolean setCreatureTypes(Collection<String> ctypes) {
// if it isn't a creature then this has no effect
if (!coreTypes.contains(CoreType.Creature)) {
if (!isCreature() && !isTribal()) {
return false;
}
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();
if (isLand()) {
for (final String t : subtypes) {
if (isALandType(t) || isABasicLandType(t)) {
if (isALandType(t)) {
landTypes.add(t);
}
}
@@ -435,6 +435,9 @@ public final class CardType implements Comparable<CardType>, CardTypeView {
@Override
public CardTypeView getTypeWithChanges(final Iterable<CardChangedType> changedCardTypes) {
CardType newType = null;
if (Iterables.isEmpty(changedCardTypes)) {
return this;
}
// we assume that changes are already correctly ordered (taken from TreeMap.values())
for (final CardChangedType ct : changedCardTypes) {
if(null == newType)
@@ -449,7 +452,10 @@ public final class CardType implements Comparable<CardType>, CardTypeView {
if (ct.isRemoveSubTypes()) {
newType.subtypes.clear();
}
else {
else if (!newType.subtypes.isEmpty()) {
if (ct.isRemoveLandTypes()) {
Iterables.removeIf(newType.subtypes, Predicates.IS_LAND_TYPE);
}
if (ct.isRemoveCreatureTypes()) {
Iterables.removeIf(newType.subtypes, Predicates.IS_CREATURE_TYPE);
// need to remove AllCreatureTypes too when removing creature Types
@@ -458,6 +464,9 @@ public final class CardType implements Comparable<CardType>, CardTypeView {
if (ct.isRemoveArtifactTypes()) {
Iterables.removeIf(newType.subtypes, Predicates.IS_ARTIFACT_TYPE);
}
if (ct.isRemoveEnchantmentTypes()) {
Iterables.removeIf(newType.subtypes, Predicates.IS_ENCHANTMENT_TYPE);
}
}
if (ct.getRemoveType() != null) {
newType.removeAll(ct.getRemoveType());
@@ -466,6 +475,28 @@ public final class CardType implements Comparable<CardType>, CardTypeView {
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;
}
@@ -574,6 +605,13 @@ public final class CardType implements Comparable<CardType>, CardTypeView {
public static final BiMap<String,String> singularTypes = pluralTypes.inverse();
}
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>() {
@Override
public boolean apply(String input) {
@@ -587,6 +625,27 @@ public final class CardType implements Comparable<CardType>, CardTypeView {
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) {
return (Constant.LAND_TYPES.contains(cardType));
return Constant.LAND_TYPES.contains(cardType) || isABasicLandType(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));
}
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.

View File

@@ -314,7 +314,11 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView {
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);
int right = 1;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -90,7 +90,7 @@ public class ProtectAllEffect extends SpellAbilityEffect {
for (final Card tgtC : list) {
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 not Permanent, remove protection at EOT

View File

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

View File

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

View File

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

View File

@@ -117,7 +117,7 @@ public class Card extends GameEntity implements Comparable<Card> {
// changes by AF animate and continuous static effects - timestamp is the key of maps
private final Map<Long, CardChangedType> changedCardTypes = 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
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,
final boolean removeSuperTypes, final boolean removeCardTypes, final boolean removeSubTypes,
final boolean removeCreatureTypes, final boolean removeArtifactTypes, final long timestamp) {
addChangedCardTypes(addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes, removeCreatureTypes, removeArtifactTypes, timestamp, true);
final boolean removeLandTypes, final boolean removeCreatureTypes, final boolean removeArtifactTypes,
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,
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(
addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes,
removeCreatureTypes, removeArtifactTypes));
removeLandTypes, removeCreatureTypes, removeArtifactTypes, removeEnchantmentTypes));
if (updateView) {
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,
final boolean removeSuperTypes, final boolean removeCardTypes, final boolean removeSubTypes,
final boolean removeCreatureTypes, final boolean removeArtifactTypes, final long timestamp) {
addChangedCardTypes(types, removeTypes, removeSuperTypes, removeCardTypes, removeSubTypes, removeCreatureTypes, removeArtifactTypes, timestamp, true);
final boolean removeLandTypes, final boolean removeCreatureTypes, final boolean removeArtifactTypes,
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,
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 removeType = null;
if (types != null) {
@@ -2812,7 +2823,8 @@ public class Card extends GameEntity implements Comparable<Card> {
}
addChangedCardTypes(addType, removeType, removeSuperTypes, removeCardTypes, removeSubTypes,
removeCreatureTypes, removeArtifactTypes, timestamp, updateView);
removeLandTypes, removeCreatureTypes, removeArtifactTypes, removeEnchantmentTypes,
timestamp, updateView);
}
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,
final boolean removeAllKeywords, final long timestamp) {
addChangedCardKeywords(keywords, removeKeywords, removeAllKeywords, timestamp, true);
final boolean removeAllKeywords, final boolean removeIntrinsicKeywords, final long timestamp) {
addChangedCardKeywords(keywords, removeKeywords, removeAllKeywords, removeIntrinsicKeywords, timestamp, true);
}
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());
// if the key already exists - merge entries
final KeywordsChange cks = changedCardKeywords.get(timestamp);
if (cks != null) {
final KeywordsChange newCks = cks.merge(keywords, removeKeywords, removeAllKeywords);
final KeywordsChange newCks = cks.merge(keywords, removeKeywords,
removeAllKeywords, removeIntrinsicKeywords);
newCks.addKeywordsToCard(this);
changedCardKeywords.put(timestamp, newCks);
}
else {
final KeywordsChange newCks = new KeywordsChange(keywords, removeKeywords, removeAllKeywords);
final KeywordsChange newCks = new KeywordsChange(keywords, removeKeywords,
removeAllKeywords, removeIntrinsicKeywords);
newCks.addKeywordsToCard(this);
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,
final boolean removeAllKeywords, final long timestamp, final boolean updateView) {
public final void addChangedCardKeywordsInternal(
final List<KeywordInterface> keywords, final List<KeywordInterface> removeKeywords,
final boolean removeAllKeywords, final boolean removeIntrinsicKeywords,
final long timestamp, final boolean updateView) {
KeywordCollection list = new KeywordCollection();
list.insertAll(keywords);
list.removeAll(getCantHaveOrGainKeyword());
// if the key already exists - merge entries
final KeywordsChange cks = changedCardKeywords.get(timestamp);
if (cks != null) {
final KeywordsChange newCks = cks.merge(keywords, removeKeywords, removeAllKeywords);
final KeywordsChange newCks = cks.merge(keywords, removeKeywords,
removeAllKeywords, removeIntrinsicKeywords);
newCks.addKeywordsToCard(this);
changedCardKeywords.put(timestamp, newCks);
}
else {
final KeywordsChange newCks = new KeywordsChange(keywords, removeKeywords, removeAllKeywords);
final KeywordsChange newCks = new KeywordsChange(keywords, removeKeywords,
removeAllKeywords, removeIntrinsicKeywords);
newCks.addKeywordsToCard(this);
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,
final boolean removeAllKeywords, final long timestamp) {
final boolean removeAllKeywords, final boolean removeIntrinsicKeywords, final long timestamp) {
List<String> keywordsList = Lists.newArrayList();
List<String> removeKeywordsList = Lists.newArrayList();
if (keywords != null) {
@@ -3333,7 +3351,8 @@ public class Card extends GameEntity implements Comparable<Card> {
removeKeywordsList = Lists.newArrayList(Arrays.asList(removeKeywords));
}
addChangedCardKeywords(keywordsList, removeKeywordsList, removeAllKeywords, timestamp);
addChangedCardKeywords(keywordsList, removeKeywordsList,
removeAllKeywords, removeIntrinsicKeywords, timestamp);
}
public final KeywordsChange removeChangedCardKeywords(final long timestamp) {
@@ -3360,8 +3379,17 @@ public class Card extends GameEntity implements Comparable<Card> {
KeywordCollection keywords = new KeywordCollection();
//final List<KeywordInterface> keywords = Lists.newArrayList();
keywords.insertAll(state.getIntrinsicKeywords());
boolean removeIntrinsic = false;
for (final KeywordsChange ck : changedCardKeywords.values()) {
if (ck.isRemoveIntrinsicKeywords()) {
removeIntrinsic = true;
break;
}
}
if (!removeIntrinsic) {
keywords.insertAll(state.getIntrinsicKeywords());
}
keywords.insertAll(extrinsicKeyword.getValues());
// 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) {
changedTextTypes.add(timestamp, originalWord, newWord);
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);
updateChangedText();
@@ -3474,7 +3503,7 @@ public class Card extends GameEntity implements Comparable<Card> {
keywordsGrantedByTextChanges.add(newKw);
}
}
addChangedCardKeywordsInternal(addKeywords, removeKeywords, false, timestamp, true);
addChangedCardKeywordsInternal(addKeywords, removeKeywords, false, false, timestamp, true);
}
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) {
bestowTimestamp = getGame().getNextTimestamp();
addChangedCardTypes(new CardType(Collections.singletonList("Aura")),
new CardType(Collections.singletonList("Creature")), false, false, false, false, true, bestowTimestamp, updateView);
addChangedCardKeywords(Collections.singletonList("Enchant creature"), Lists.<String>newArrayList(), false, bestowTimestamp, updateView);
new CardType(Collections.singletonList("Creature")),
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() {

View File

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

View File

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

View File

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

View File

@@ -246,7 +246,7 @@ public class ManaPool implements Iterable<Mana> {
&& host.getType().hasStringType(mana.getManaAbility().getAddsKeywordsType())) {
final long timestamp = sa.getHostCard().getGame().getNextTimestamp();
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()) {
final GameCommand untilEOT = new GameCommand() {
private static final long serialVersionUID = -8285169579025607693L;

View File

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

View File

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

View File

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

View File

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

View File

@@ -4,8 +4,7 @@ Types:Creature Wall
PT:4/4
K:Flying
K:Defender
T:Mode$ Blocks | ValidCard$ Card.Self | Execute$ TrigDebuff | 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 | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True | Permanent$ True
T:Mode$ Blocks | ValidCard$ Card.Self | Execute$ Animate | TriggerDescription$ When CARDNAME blocks, it becomes a Bird Giant, and it loses defender.
SVar:Animate:DB$ Animate | Defined$ TriggeredBlocker | Types$ Bird,Giant | RemoveCreatureTypes$ True | RemoveKeywords$ Defender | Permanent$ True
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.)

View File

@@ -1,7 +1,7 @@
Name:Blood Moon
ManaCost:2 R
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:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/blood_moon.jpg

View File

@@ -2,7 +2,7 @@ Name:Calming Licid
ManaCost:2 W
Types:Creature Licid
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:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME can't attack. | Description$ Enchanted creature can't attack.

View File

@@ -1,7 +1,7 @@
Name:Celestial Dawn
ManaCost:1 W W
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.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.

View File

@@ -3,7 +3,7 @@ ManaCost:1 B
Types:Enchantment Aura
K:Enchant land
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.
SVar:TrigLose:DB$LoseLife | Defined$ TriggeredCardController | LifeAmount$ 2
SVar:Picture:http://www.wizards.com/global/images/magic/general/contaminated_ground.jpg

View File

@@ -2,7 +2,7 @@ Name:Conversion
ManaCost:2 W W
Types:Enchantment
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: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.

View File

@@ -5,7 +5,7 @@ K:Enchant land
A:SP$ Attach | Cost$ 1 U | ValidTgts$ Land | AILogic$ ChangeType
K:ETBReplacement:Other:DBChooseBasic
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: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.

View File

@@ -2,7 +2,7 @@ Name:Convulsing Licid
ManaCost:2 R
Types:Creature Licid
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:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME can't block. | Description$ Enchanted creature can't block.

View File

@@ -2,7 +2,7 @@ Name:Corrupting Licid
ManaCost:2 B
Types:Creature Licid
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: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.)

View File

@@ -3,7 +3,7 @@ ManaCost:2 B B
Types:Creature Zombie Giant
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.
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: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.

View File

@@ -3,7 +3,7 @@ ManaCost:4
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.
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.
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.

View File

@@ -2,7 +2,7 @@ Name:Deepwood Elder
ManaCost:G G
Types:Creature Dryad Spellshaper
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:RemAIDeck:True
SVar:Maxtgt:Count$Valid Land

View File

@@ -2,7 +2,7 @@ Name:Dominating Licid
ManaCost:1 U U
Types:Creature Licid
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:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature
S:Mode$ Continuous | Affected$ Card.EnchantedBy | GainControl$ You | Description$ You control enchanted creature.

View File

@@ -4,7 +4,7 @@ Types:Creature Bird
PT:1/1
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.
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: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.

View File

@@ -3,7 +3,7 @@ ManaCost:3 U
Types:Creature Serpent
PT:4/3
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: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.

View File

@@ -4,7 +4,7 @@ Types:Artifact
T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw a card.
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.
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: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.

View File

@@ -2,7 +2,7 @@ Name:Enraging Licid
ManaCost:1 R
Types:Creature Licid
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:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Haste | Description$ Enchanted creature has haste.

View File

@@ -2,7 +2,7 @@ Name:Ensouled Scimitar
ManaCost:3
Types:Artifact Equipment
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.
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.)

View File

@@ -3,6 +3,6 @@ ManaCost:B
Types:Enchantment Aura
K:Enchant land
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
Oracle:Enchant land\nEnchanted land is a Swamp.

View File

@@ -4,7 +4,7 @@ Types:Creature Elemental
PT:0/0
K:etbCounter:P1P1:6
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: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.

View File

@@ -8,7 +8,7 @@ SVar:X:Count$Valid Forest.YouCtrl
S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetPower$ Y | SetToughness$ Y | CheckSVar$ B | SVarCompare$ EQ1
SVar:B:Count$Valid Card.Self+attacking
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:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/gaeas_liege.jpg

View File

@@ -2,7 +2,7 @@ Name:Glaciers
ManaCost:2 W U
Types:Enchantment
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: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.

View File

@@ -2,7 +2,7 @@ Name:Gliding Licid
ManaCost:2 U
Types:Creature Licid
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:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Flying | Description$ Enchanted creature has flying.

View File

@@ -4,7 +4,7 @@ Types:Creature Antelope
PT:1/4
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.
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:Picture:http://www.wizards.com/global/images/magic/general/graceful_antelope.jpg
Oracle:Plainswalk\nWhenever Graceful Antelope deals combat damage to a player, you may have target land become a Plains until Graceful Antelope leaves the battlefield.
Oracle:Plainswalk (This creature can't be blocked as long as defending player controls a Plains.)\nWhenever Graceful Antelope deals combat damage to a player, you may have target land become a Plains until Graceful Antelope leaves the battlefield.

View File

@@ -3,7 +3,7 @@ ManaCost:U
Types:Creature Human Wizard
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.
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: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.

View File

@@ -5,7 +5,7 @@ HandLifeModifier:+0/-3
A:AB$ Effect | ActivationZone$ Command | Cost$ PayLife<1> | TgtZone$ Graveyard | ValidTgts$ Creature.YouOwn | PumpZone$ Graveyard | TgtPrompt$ Select target creature in your graveyard, you may play it this turn | RememberObjects$ Targeted | StaticAbilities$ Play | ExileOnMoved$ Graveyard | SpellDescription$ You may play target creature card in your graveyard this turn.
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.
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.
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

View File

@@ -6,6 +6,6 @@ K:Flying
K:Vigilance
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.
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
Oracle:Flying, vigilance\nCrew 3 (Tap any number of creatures you control with total power 3 or more: This Vehicle becomes an artifact creature until end of turn.)\nYou may remove a loyalty counter from a planeswalker you control rather than pay Heart of Kiran's crew cost.

View File

@@ -2,6 +2,6 @@ Name:Hidden Ancients
ManaCost:1 G
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.
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
Oracle:When an opponent casts an enchantment spell, if Hidden Ancients is an enchantment, Hidden Ancients becomes a 5/5 Treefolk creature.

View File

@@ -2,6 +2,6 @@ Name:Hidden Gibbons
ManaCost:G
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.
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
Oracle:When an opponent casts an instant spell, if Hidden Gibbons is an enchantment, Hidden Gibbons becomes a 4/4 Ape creature.

View File

@@ -2,6 +2,6 @@ Name:Hidden Guerrillas
ManaCost:G
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.
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
Oracle:When an opponent casts an artifact spell, if Hidden Guerrillas is an enchantment, Hidden Guerrillas becomes a 5/3 Soldier creature with trample.

View File

@@ -2,6 +2,6 @@ Name:Hidden Herd
ManaCost:G
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.
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
Oracle:When an opponent plays a nonbasic land, if Hidden Herd is an enchantment, Hidden Herd becomes a 3/3 Beast creature.

View File

@@ -2,6 +2,6 @@ Name:Hidden Predators
ManaCost:G
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.
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
Oracle:When an opponent controls a creature with power 4 or greater, if Hidden Predators is an enchantment, Hidden Predators becomes a 4/4 Beast creature.

View File

@@ -2,6 +2,6 @@ Name:Hidden Spider
ManaCost:G
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.)
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
Oracle:When an opponent casts a creature spell with flying, if Hidden Spider is an enchantment, Hidden Spider becomes a 3/5 Spider creature with reach. (It can block creatures with flying.)

View File

@@ -2,9 +2,9 @@ Name:Hidden Stag
ManaCost:1 G
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.
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.
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: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.

View File

@@ -3,7 +3,7 @@ ManaCost:U
Types:Creature Human Wizard
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.
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: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.

View File

@@ -3,7 +3,7 @@ ManaCost:2 U
Types:Enchantment Aura
K:Enchant creature, land, or planeswalker
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:NonStackingAttachEffect:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/imprisoned_in_the_moon.jpg

View File

@@ -2,7 +2,7 @@ Name:Jinx
ManaCost:1 U
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.
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:DrawSlowtrip:DB$Draw | NumCards$ 1 | Defined$ You
SVar:RemAIDeck:True

View File

@@ -2,7 +2,7 @@ Name:Kavu Recluse
ManaCost:2 R
Types:Creature Kavu
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:Picture:http://www.wizards.com/global/images/magic/general/kavu_recluse.jpg
Oracle:{T}: Target land becomes a Forest until end of turn.

View File

@@ -3,7 +3,7 @@ ManaCost:3 U
Types:Creature Serpent
PT:4/3
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.
SVar:TrigSac:DB$Sacrifice | Defined$ Self
SVar:NeedsToPlay:Island.YouCtrl

View File

@@ -2,7 +2,7 @@ Name:Leeching Licid
ManaCost:1 B
Types:Creature Licid
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: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.

View File

@@ -3,7 +3,7 @@ ManaCost:1 U
Types:Enchantment Aura
K:Enchant land
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
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.)

View File

@@ -1,7 +1,7 @@
Name:Lurking Evil
ManaCost:B B B
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:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/lurking_evil.jpg

View File

@@ -2,6 +2,6 @@ Name:Lurking Jackals
ManaCost:B
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.
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
Oracle:When an opponent has 10 or less life, if Lurking Jackals is an enchantment, it becomes a 3/2 Jackal creature.

View File

@@ -2,6 +2,6 @@ Name:Lurking Skirge
ManaCost:1 B
Types:Enchantment
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Battlefield | ValidCard$ Creature.OppOwn | IsPresent$ Card.Self+Enchantment | Execute$ TrigAnimate | TriggerDescription$ When a creature is put into an opponent's graveyard from the battlefield, if CARDNAME is an enchantment, CARDNAME becomes a 3/2 Imp creature with flying.
SVar:TrigAnimate:DB$ Animate | Defined$ Self | Power$ 3 | Toughness$ 2 | Types$ Creature,Imp | Keywords$ Flying | 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
Oracle:When a creature is put into an opponent's graveyard from the battlefield, if Lurking Skirge is an enchantment, Lurking Skirge becomes a 3/2 Imp creature with flying.

View File

@@ -3,7 +3,7 @@ ManaCost:G
Types:Enchantment Aura
K:Enchant land
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:Picture:http://www.wizards.com/global/images/magic/general/lush_growth.jpg
Oracle:Enchant land\nEnchanted land is a Mountain, Forest, and Plains.

View File

@@ -2,7 +2,7 @@ Name:Magus of the Moon
ManaCost:2 R
Types:Creature Human Wizard
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:Picture:http://www.wizards.com/global/images/magic/general/magus_of_the_moon.jpg
Oracle:Nonbasic lands are Mountains.

View File

@@ -4,7 +4,7 @@ Types:Creature Illusion
PT:2/1
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.
SVar:DBAnimate:DB$ Animate | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True
SVar:DBAnimate:DB$ Animate | Types$ ChosenType | RemoveCreatureTypes$ True
SVar:RemAIDeck:True
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.

View File

@@ -4,7 +4,7 @@ Types:Enchantment Aura
K:Enchant creature
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.
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:RemAIDeck:True
SVar:RemRandomDeck:True

View File

@@ -3,7 +3,7 @@ ManaCost:4 U U
Types:Creature Illusion Mutant
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.
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: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.

View File

@@ -4,7 +4,7 @@ Types:Creature Illusion
PT:3/1
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.
SVar:DBAnimate:DB$ Animate | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True
SVar:DBAnimate:DB$ Animate | Types$ ChosenType | RemoveCreatureTypes$ True
K:Morph:1 U
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_seaswift.jpg

View File

@@ -4,7 +4,7 @@ Types:Creature Illusion
PT:3/3
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.
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
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_shrieker.jpg

View File

@@ -4,7 +4,7 @@ Types:Creature Illusion
PT:6/6
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.
SVar:DBAnimate:DB$ Animate | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True
SVar:DBAnimate:DB$ Animate | Types$ ChosenType | RemoveCreatureTypes$ True
SVar:RemAIDeck:True
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.

View File

@@ -3,7 +3,7 @@ ManaCost:1 U
Types:Creature Illusion
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.
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.
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mistform_stalker.jpg

View File

@@ -4,9 +4,9 @@ Types:Creature Illusion
PT:2/3
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.
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.
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: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.

View File

@@ -4,7 +4,7 @@ Types:Creature Illusion Wall
PT:1/4
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.
SVar:DBAnimate:DB$ Animate | Types$ ChosenType | OverwriteTypes$ True | KeepSupertypes$ True | KeepCardTypes$ True
SVar:DBAnimate:DB$ Animate | Types$ ChosenType | RemoveCreatureTypes$ True
SVar:RemAIDeck:True
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.

View File

@@ -4,7 +4,7 @@ Types:Creature Illusion
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.
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: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.

View File

@@ -4,7 +4,7 @@ Types:Creature Moonfolk Wizard
PT:2/1
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.
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: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.

View File

@@ -2,7 +2,7 @@ Name:Mystic Compass
ManaCost:2
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.
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: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.

View File

@@ -2,7 +2,7 @@ Name:Nightcreep
ManaCost:B B
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.
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: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.

View File

@@ -2,7 +2,7 @@ Name:Nurturing Licid
ManaCost:1 G
Types:Creature Licid
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:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature
A:AB$ Regenerate | Cost$ G | Defined$ Enchanted | SpellDescription$ Regenerate enchanted creature.

View File

@@ -2,8 +2,8 @@ Name:Opal Acrolith
ManaCost:2 W
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.
A:AB$ Animate | Cost$ 0 | Defined$ Self | Types$ Enchantment | OverwriteTypes$ 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
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 | RemoveCardTypes$ True | Permanent$ True
SVar:RemAIDeck:True
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.

View File

@@ -1,7 +1,7 @@
Name:Opal Archangel
ManaCost:4 W
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.
SVar:TrigAnimate:DB$Animate | Defined$ Self | Power$ 5 | Toughness$ 5 | Keywords$ Flying & Vigilance | Types$ Creature,Angel | OverwriteTypes$ True | Permanent$ True
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 | RemoveCardTypes$ True | Permanent$ True
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.

View File

@@ -2,6 +2,6 @@ Name:Opal Avenger
ManaCost:2 W
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.
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
Oracle:When you have 10 or less life, if Opal Avenger is an enchantment, Opal Avenger becomes a 3/5 Soldier creature.

View File

@@ -2,6 +2,6 @@ Name:Opal Caryatid
ManaCost:W
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.
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
Oracle:When an opponent casts a creature spell, if Opal Caryatid is an enchantment, Opal Caryatid becomes a 2/2 Soldier creature.

View File

@@ -2,6 +2,6 @@ Name:Opal Champion
ManaCost:2 W
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.
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
Oracle:When an opponent casts a creature spell, if Opal Champion is an enchantment, Opal Champion becomes a 3/3 Knight creature with first strike.

View File

@@ -2,6 +2,6 @@ Name:Opal Gargoyle
ManaCost:1 W
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.
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
Oracle:When an opponent casts a creature spell, if Opal Gargoyle is an enchantment, Opal Gargoyle becomes a 2/2 Gargoyle creature with flying.

View File

@@ -2,6 +2,6 @@ Name:Opal Guardian
ManaCost:W W W
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.
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
Oracle:When an opponent casts a creature spell, if Opal Guardian is an enchantment, Opal Guardian becomes a 3/4 Gargoyle creature with flying and protection from red.

View File

@@ -2,7 +2,7 @@ Name:Opal Titan
ManaCost:2 W W
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.
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: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

View File

@@ -2,7 +2,7 @@ Name:Orcish Farmer
ManaCost:1 R R
Types:Creature Orc
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: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.

View File

@@ -5,7 +5,7 @@ K:Enchant land
A:SP$ Attach | Cost$ U U | ValidTgts$ Land | AILogic$ ChangeType
K:ETBReplacement:Other:DBChooseBasic
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: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.

View File

@@ -5,6 +5,6 @@ PT:2/2
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.)
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
Oracle:Morph {0} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.)\nWhen Proteus Machine is turned face up, it becomes the creature type of your choice. (This effect lasts indefinitely.)

View File

@@ -2,7 +2,7 @@ Name:Quickening Licid
ManaCost:1 W
Types:Creature Licid
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:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Creature
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ First Strike | Description$ Enchanted creature has first strike.

View File

@@ -4,7 +4,7 @@ Types:Artifact
T:Mode$ Phase | Phase$ Upkeep | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of each player's upkeep, that player puts a flood counter on target non-Island land they control of their choice. That land is an Island for as long as it has a flood counter on it.
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: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.
SVar:TrigRemoveAll:DB$ RemoveCounterAll | ValidCards$ Land | CounterType$ FLOOD | AllCounters$ True
SVar:X:Count$Valid Land.nonIsland

View File

@@ -3,7 +3,7 @@ ManaCost:U
Types:Creature Merfolk Shaman
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.
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: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.

View File

@@ -2,7 +2,7 @@ Name:Sarkhan, the Dragonspeaker
ManaCost:3 R R
Types:Legendary Planeswalker Sarkhan
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$ 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.

View File

@@ -3,7 +3,7 @@ ManaCost:4 U
Types:Creature Beast
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.
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: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.

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