AnimateEffect: combine into the BaseEffect, remove not needed RemoveIntrinsicAbilities

This commit is contained in:
Hans Mackowiak
2020-11-08 15:50:09 +00:00
committed by Michael Kamensky
parent a492a52fe1
commit 460960123e
41 changed files with 210 additions and 334 deletions

View File

@@ -6,7 +6,6 @@ import com.google.common.collect.Maps;
import forge.ai.*; import forge.ai.*;
import forge.card.CardType; import forge.card.CardType;
import forge.game.Game; import forge.game.Game;
import forge.game.ability.AbilityFactory;
import forge.game.ability.AbilityUtils; import forge.game.ability.AbilityUtils;
import forge.game.ability.ApiType; import forge.game.ability.ApiType;
import forge.game.card.*; import forge.game.card.*;
@@ -14,15 +13,11 @@ import forge.game.cost.CostPutCounter;
import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType; import forge.game.phase.PhaseType;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.replacement.ReplacementEffect;
import forge.game.replacement.ReplacementHandler;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.game.spellability.TargetRestrictions; import forge.game.spellability.TargetRestrictions;
import forge.game.staticability.StaticAbility; import forge.game.staticability.StaticAbility;
import forge.game.staticability.StaticAbilityContinuous; import forge.game.staticability.StaticAbilityContinuous;
import forge.game.staticability.StaticAbilityLayer; import forge.game.staticability.StaticAbilityLayer;
import forge.game.trigger.Trigger;
import forge.game.trigger.TriggerHandler;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import java.util.Arrays; import java.util.Arrays;
@@ -474,75 +469,15 @@ public class AnimateAi extends SpellAbilityAi {
sVars.addAll(Arrays.asList(sa.getParam("sVars").split(","))); sVars.addAll(Arrays.asList(sa.getParam("sVars").split(",")));
} }
AnimateEffectBase.doAnimate(card, sa, power, toughness, types, removeTypes, finalDesc, keywords, removeKeywords, hiddenKeywords, timestamp); AnimateEffectBase.doAnimate(card, sa, power, toughness, types, removeTypes, finalDesc,
keywords, removeKeywords, hiddenKeywords,
abilities, triggers, replacements, stAbs,
timestamp);
// check if animate added static Abilities
// remove abilities CardTraitChanges traits = card.getChangedCardTraits().get(timestamp);
final List<SpellAbility> removedAbilities = Lists.newArrayList(); if (traits != null) {
boolean clearSpells = sa.hasParam("OverwriteSpells"); for (StaticAbility stAb : traits.getStaticAbilities()) {
boolean removeAll = sa.hasParam("RemoveAllAbilities");
boolean removeIntrinsic = sa.hasParam("RemoveIntrinsicAbilities");
if (clearSpells) {
removedAbilities.addAll(Lists.newArrayList(card.getSpells()));
}
if (sa.hasParam("RemoveThisAbility") && !removedAbilities.contains(sa)) {
removedAbilities.add(sa);
}
// give abilities
final List<SpellAbility> addedAbilities = Lists.newArrayList();
if (abilities.size() > 0) {
for (final String s : abilities) {
final String actualAbility = source.getSVar(s);
addedAbilities.add(AbilityFactory.getAbility(actualAbility, card));
}
}
// Grant triggers
final List<Trigger> addedTriggers = Lists.newArrayList();
if (triggers.size() > 0) {
for (final String s : triggers) {
final String actualTrigger = source.getSVar(s);
final Trigger parsedTrigger = TriggerHandler.parseTrigger(actualTrigger, card, false);
addedTriggers.add(parsedTrigger);
}
}
// give replacement effects
final List<ReplacementEffect> addedReplacements = Lists.newArrayList();
if (replacements.size() > 0) {
for (final String s : replacements) {
final String actualReplacement = source.getSVar(s);
final ReplacementEffect parsedReplacement = ReplacementHandler.parseReplacement(actualReplacement, card, false);
addedReplacements.add(parsedReplacement);
}
}
// 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);
addedStaticAbilities.add(new StaticAbility(actualAbility, card));
}
}
if (removeAll || removeIntrinsic
|| !addedAbilities.isEmpty() || !removedAbilities.isEmpty() || !addedTriggers.isEmpty()
|| !addedReplacements.isEmpty() || !addedStaticAbilities.isEmpty()) {
card.addChangedCardTraits(addedAbilities, removedAbilities, addedTriggers, addedReplacements,
addedStaticAbilities, removeAll, false, removeIntrinsic, timestamp);
}
// give static abilities (should only be used by cards to give
// itself a static ability)
if (stAbs.size() > 0) {
for (final String s : stAbs) {
final String actualAbility = source.getSVar(s);
final StaticAbility stAb = card.addStaticAbility(actualAbility);
if ("Continuous".equals(stAb.getParam("Mode"))) { if ("Continuous".equals(stAb.getParam("Mode"))) {
for (final StaticAbilityLayer layer : stAb.getLayers()) { for (final StaticAbilityLayer layer : stAb.getLayers()) {
StaticAbilityContinuous.applyContinuousAbility(stAb, new CardCollection(card), layer); StaticAbilityContinuous.applyContinuousAbility(stAb, new CardCollection(card), layer);

View File

@@ -261,7 +261,7 @@ public class StaticEffect {
// remove abilities // remove abilities
if (hasParam("AddAbility") || hasParam("GainsAbilitiesOf") if (hasParam("AddAbility") || hasParam("GainsAbilitiesOf")
|| hasParam("AddTrigger") || hasParam("AddStaticAbility") || hasParam("AddReplacementEffects") || hasParam("AddTrigger") || hasParam("AddStaticAbility") || hasParam("AddReplacementEffects")
|| hasParam("RemoveAllAbilities") || hasParam("RemoveIntrinsicAbilities")) { || hasParam("RemoveAllAbilities") || hasParam("RemoveLandTypes")) {
affectedCard.removeChangedCardTraits(getTimestamp()); affectedCard.removeChangedCardTraits(getTimestamp());
} }

View File

@@ -22,6 +22,7 @@ import forge.game.card.CardCollection;
import forge.game.card.CardFactoryUtil; import forge.game.card.CardFactoryUtil;
import forge.game.combat.Combat; import forge.game.combat.Combat;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.player.PlayerCollection;
import forge.game.replacement.ReplacementEffect; import forge.game.replacement.ReplacementEffect;
import forge.game.replacement.ReplacementHandler; import forge.game.replacement.ReplacementHandler;
import forge.game.replacement.ReplacementLayer; import forge.game.replacement.ReplacementLayer;
@@ -34,7 +35,6 @@ import forge.game.zone.ZoneType;
import forge.util.CardTranslation; import forge.util.CardTranslation;
import forge.util.Lang; import forge.util.Lang;
import forge.util.Localizer; import forge.util.Localizer;
import forge.util.collect.FCollection;
import forge.util.collect.FCollectionView; import forge.util.collect.FCollectionView;
/** /**
@@ -192,14 +192,14 @@ public abstract class SpellAbilityEffect {
} }
// Players // Players
protected final static FCollection<Player> getTargetPlayers(final SpellAbility sa) { return getPlayers(false, "Defined", sa); } protected final static PlayerCollection getTargetPlayers(final SpellAbility sa) { return getPlayers(false, "Defined", sa); }
protected final static FCollection<Player> getTargetPlayers(final SpellAbility sa, final String definedParam) { return getPlayers(false, definedParam, sa); } protected final static PlayerCollection getTargetPlayers(final SpellAbility sa, final String definedParam) { return getPlayers(false, definedParam, sa); }
protected final static FCollection<Player> getDefinedPlayersOrTargeted(final SpellAbility sa ) { return getPlayers(true, "Defined", sa); } protected final static PlayerCollection getDefinedPlayersOrTargeted(final SpellAbility sa ) { return getPlayers(true, "Defined", sa); }
protected final static FCollection<Player> getDefinedPlayersOrTargeted(final SpellAbility sa, final String definedParam) { return getPlayers(true, definedParam, sa); } protected final static PlayerCollection getDefinedPlayersOrTargeted(final SpellAbility sa, final String definedParam) { return getPlayers(true, definedParam, sa); }
private static FCollection<Player> getPlayers(final boolean definedFirst, final String definedParam, final SpellAbility sa) { private static PlayerCollection getPlayers(final boolean definedFirst, final String definedParam, final SpellAbility sa) {
final boolean useTargets = sa.usesTargeting() && (!definedFirst || !sa.hasParam(definedParam)); final boolean useTargets = sa.usesTargeting() && (!definedFirst || !sa.hasParam(definedParam));
return useTargets ? new FCollection<>(sa.getTargets().getTargetPlayers()) return useTargets ? new PlayerCollection(sa.getTargets().getTargetPlayers())
: AbilityUtils.getDefinedPlayers(sa.getHostCard(), sa.getParam(definedParam), sa); : AbilityUtils.getDefinedPlayers(sa.getHostCard(), sa.getParam(definedParam), sa);
} }

View File

@@ -3,19 +3,13 @@ package forge.game.ability.effects;
import forge.GameCommand; import forge.GameCommand;
import forge.card.CardType; import forge.card.CardType;
import forge.game.Game; import forge.game.Game;
import forge.game.ability.AbilityFactory;
import forge.game.ability.AbilityUtils; import forge.game.ability.AbilityUtils;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardCollectionView; import forge.game.card.CardCollectionView;
import forge.game.card.CardLists; import forge.game.card.CardLists;
import forge.game.card.CardUtil; import forge.game.card.CardUtil;
import forge.game.event.GameEventCardStatsChanged; import forge.game.event.GameEventCardStatsChanged;
import forge.game.player.Player;
import forge.game.replacement.ReplacementEffect;
import forge.game.replacement.ReplacementHandler;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.game.trigger.Trigger;
import forge.game.trigger.TriggerHandler;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import java.util.ArrayList; import java.util.ArrayList;
@@ -23,6 +17,8 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import com.google.common.collect.ImmutableList;
public class AnimateAllEffect extends AnimateEffectBase { public class AnimateAllEffect extends AnimateEffectBase {
@Override @Override
@@ -131,63 +127,24 @@ public class AnimateAllEffect extends AnimateEffectBase {
} }
CardCollectionView list; CardCollectionView list;
List<Player> tgtPlayers = getTargetPlayers(sa);
if (!sa.usesTargeting() && !sa.hasParam("Defined")) { if (!sa.usesTargeting() && !sa.hasParam("Defined")) {
list = game.getCardsIn(ZoneType.Battlefield); list = game.getCardsIn(ZoneType.Battlefield);
} } else {
else { list = getTargetPlayers(sa).getCardsIn(ZoneType.Battlefield);
list = tgtPlayers.get(0).getCardsIn(ZoneType.Battlefield);
} }
list = CardLists.getValidCards(list, valid.split(","), host.getController(), host, sa); list = CardLists.getValidCards(list, valid.split(","), host.getController(), host, sa);
boolean removeAll = sa.hasParam("RemoveAllAbilities");
boolean removeIntrinsic = sa.hasParam("RemoveIntrinsicAbilities");
for (final Card c : list) { for (final Card c : list) {
doAnimate(c, sa, power, toughness, types, removeTypes, finalDesc, doAnimate(c, sa, power, toughness, types, removeTypes, finalDesc,
keywords, removeKeywords, hiddenKeywords, timestamp); keywords, removeKeywords, hiddenKeywords,
abilities, triggers, replacements, ImmutableList.of(),
// give abilities timestamp);
final List<SpellAbility> addedAbilities = new ArrayList<>();
if (abilities.size() > 0) {
for (final String s : abilities) {
final String actualAbility = host.getSVar(s);
final SpellAbility grantedAbility = AbilityFactory.getAbility(actualAbility, c);
addedAbilities.add(grantedAbility);
}
}
// give replacement effects
final List<ReplacementEffect> addedReplacements = new ArrayList<>();
if (replacements.size() > 0) {
for (final String s : replacements) {
final String actualReplacement = host.getSVar(s);
final ReplacementEffect parsedReplacement = ReplacementHandler.parseReplacement(actualReplacement, c, false);
addedReplacements.add(parsedReplacement);
}
}
// Grant triggers
final List<Trigger> addedTriggers = new ArrayList<>();
if (triggers.size() > 0) {
for (final String s : triggers) {
final String actualTrigger = host.getSVar(s);
final Trigger parsedTrigger = TriggerHandler.parseTrigger(actualTrigger, c, false);
addedTriggers.add(parsedTrigger);
}
}
if (!addedAbilities.isEmpty() || !addedTriggers.isEmpty() || !addedReplacements.isEmpty()) {
c.addChangedCardTraits(addedAbilities, null, addedTriggers, addedReplacements, null, removeAll, false, removeIntrinsic, timestamp);
}
// give sVars // give sVars
if (sVars.size() > 0) { for (final String s : sVars) {
for (final String s : sVars) { c.setSVar(s, AbilityUtils.getSVar(sa, s));
final String actualsVar = host.getSVar(s);
c.setSVar(s, actualsVar);
}
} }
game.fireEvent(new GameEventCardStatsChanged(c)); game.fireEvent(new GameEventCardStatsChanged(c));

View File

@@ -1,29 +1,19 @@
package forge.game.ability.effects; package forge.game.ability.effects;
import forge.GameCommand;
import forge.card.CardType; import forge.card.CardType;
import forge.card.mana.ManaCost;
import forge.card.mana.ManaCostParser;
import forge.game.Game; import forge.game.Game;
import forge.game.ability.AbilityFactory;
import forge.game.ability.AbilityUtils; import forge.game.ability.AbilityUtils;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardUtil; import forge.game.card.CardUtil;
import forge.game.event.GameEventCardStatsChanged; import forge.game.event.GameEventCardStatsChanged;
import forge.game.phase.PhaseType;
import forge.game.replacement.ReplacementEffect;
import forge.game.replacement.ReplacementHandler;
import forge.game.spellability.AbilityStatic;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.game.staticability.StaticAbility;
import forge.game.trigger.Trigger; import com.google.common.collect.Lists;
import forge.game.trigger.TriggerHandler;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import com.google.common.collect.Lists;
public class AnimateEffect extends AnimateEffectBase { public class AnimateEffect extends AnimateEffectBase {
@@ -62,8 +52,6 @@ public class AnimateEffect extends AnimateEffectBase {
// Every Animate event needs a unique time stamp // Every Animate event needs a unique time stamp
final long timestamp = game.getNextTimestamp(); final long timestamp = game.getNextTimestamp();
final boolean permanent = sa.hasParam("Permanent");
final CardType types = new CardType(true); final CardType types = new CardType(true);
if (sa.hasParam("Types")) { if (sa.hasParam("Types")) {
types.addAll(Arrays.asList(sa.getParam("Types").split(","))); types.addAll(Arrays.asList(sa.getParam("Types").split(",")));
@@ -150,81 +138,23 @@ public class AnimateEffect extends AnimateEffectBase {
for (final Card c : tgts) { for (final Card c : tgts) {
doAnimate(c, sa, power, toughness, types, removeTypes, finalDesc, doAnimate(c, sa, power, toughness, types, removeTypes, finalDesc,
keywords, removeKeywords, hiddenKeywords, timestamp); keywords, removeKeywords, hiddenKeywords,
abilities, triggers, replacements, stAbs, timestamp);
if (sa.hasParam("Name")) { if (sa.hasParam("Name")) {
c.addChangedName(sa.getParam("Name"), timestamp); c.addChangedName(sa.getParam("Name"), timestamp);
} }
if (sa.hasParam("LeaveBattlefield")) {
addLeaveBattlefieldReplacement(c, sa, sa.getParam("LeaveBattlefield"));
}
// remove abilities
final List<SpellAbility> removedAbilities = Lists.newArrayList();
boolean clearSpells = sa.hasParam("OverwriteSpells");
boolean removeAll = sa.hasParam("RemoveAllAbilities");
boolean removeIntrinsic = sa.hasParam("RemoveIntrinsicAbilities");
if (clearSpells) {
removedAbilities.addAll(Lists.newArrayList(c.getSpells()));
}
if (sa.hasParam("RemoveThisAbility") && !removedAbilities.contains(sa)) {
removedAbilities.add(sa);
}
// give abilities
final List<SpellAbility> addedAbilities = Lists.newArrayList();
if (abilities.size() > 0) {
for (final String s : abilities) {
final String actualAbility = source.getSVar(s);
addedAbilities.add(AbilityFactory.getAbility(actualAbility, c));
}
}
// Grant triggers
final List<Trigger> addedTriggers = Lists.newArrayList();
if (triggers.size() > 0) {
for (final String s : triggers) {
final String actualTrigger = source.getSVar(s);
final Trigger parsedTrigger = TriggerHandler.parseTrigger(actualTrigger, c, false);
addedTriggers.add(parsedTrigger);
}
}
// give replacement effects
final List<ReplacementEffect> addedReplacements = Lists.newArrayList();
if (replacements.size() > 0) {
for (final String s : replacements) {
final String actualReplacement = source.getSVar(s);
final ReplacementEffect parsedReplacement = ReplacementHandler.parseReplacement(actualReplacement, c, false);
addedReplacements.add(parsedReplacement);
}
}
// 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);
addedStaticAbilities.add(new StaticAbility(actualAbility, c));
}
}
// give sVars // give sVars
if (sVars.size() > 0) { for (final String s : sVars) {
for (final String s : sVars) { String actualsVar = AbilityUtils.getSVar(sa, s);
String actualsVar = source.getSVar(s); String name = s;
String name = s; if (actualsVar.startsWith("SVar:")) {
if (actualsVar.startsWith("SVar:")) { actualsVar = actualsVar.split("SVar:")[1];
actualsVar = actualsVar.split("SVar:")[1]; name = actualsVar.split(":")[0];
name = actualsVar.split(":")[0]; actualsVar = actualsVar.split(":")[1];
actualsVar = actualsVar.split(":")[1];
}
c.setSVar(name, actualsVar);
} }
c.setSVar(name, actualsVar);
} }
// give Remembered // give Remembered
@@ -234,73 +164,6 @@ public class AnimateEffect extends AnimateEffectBase {
} }
} }
final GameCommand unanimate = new GameCommand() {
private static final long serialVersionUID = -5861759814760561373L;
@Override
public void run() {
doUnanimate(c, sa, hiddenKeywords, timestamp);
c.removeChangedName(timestamp);
c.updateStateForView();
game.fireEvent(new GameEventCardStatsChanged(c));
}
};
if (sa.hasParam("RevertCost")) {
final ManaCost cost = new ManaCost(new ManaCostParser(sa.getParam("RevertCost")));
final String desc = this.getStackDescription(sa);
final SpellAbility revertSA = new AbilityStatic(c, cost) {
@Override
public void resolve() {
unanimate.run();
}
@Override
public String getDescription() {
return cost + ": End Effect: " + desc;
}
};
addedAbilities.add(revertSA);
}
// after unanimate to add RevertCost
if (removeAll || removeIntrinsic
|| !addedAbilities.isEmpty() || !removedAbilities.isEmpty() || !addedTriggers.isEmpty()
|| !addedReplacements.isEmpty() || !addedStaticAbilities.isEmpty()) {
c.addChangedCardTraits(addedAbilities, removedAbilities, addedTriggers, addedReplacements,
addedStaticAbilities, removeAll, false, removeIntrinsic, timestamp);
}
if (!permanent) {
if (sa.hasParam("UntilEndOfCombat")) {
game.getEndOfCombat().addUntil(unanimate);
} else if (sa.hasParam("UntilHostLeavesPlay")) {
source.addLeavesPlayCommand(unanimate);
} else if (sa.hasParam("UntilLoseControlOfHost")) {
sa.getHostCard().addLeavesPlayCommand(unanimate);
sa.getHostCard().addChangeControllerCommand(unanimate);
} else if (sa.hasParam("UntilYourNextUpkeep")) {
game.getUpkeep().addUntil(source.getController(), unanimate);
} else if (sa.hasParam("UntilTheEndOfYourNextUpkeep")) {
if (game.getPhaseHandler().is(PhaseType.UPKEEP)) {
game.getUpkeep().registerUntilEnd(source.getController(), unanimate);
} else {
game.getUpkeep().addUntilEnd(source.getController(), unanimate);
}
} else if (sa.hasParam("UntilControllerNextUntap")) {
game.getUntap().addUntil(c.getController(), unanimate);
} else if (sa.hasParam("UntilAPlayerCastSpell")) {
game.getStack().addCastCommand(sa.getParam("UntilAPlayerCastSpell"), unanimate);
} else if (sa.hasParam("UntilYourNextTurn")) {
game.getCleanup().addUntil(source.getController(), unanimate);
} else {
game.getEndOfTurn().addUntil(unanimate);
}
}
game.fireEvent(new GameEventCardStatsChanged(c)); game.fireEvent(new GameEventCardStatsChanged(c));
} }

View File

@@ -17,18 +17,38 @@
*/ */
package forge.game.ability.effects; package forge.game.ability.effects;
import forge.GameCommand;
import forge.card.CardType; import forge.card.CardType;
import forge.card.mana.ManaCost;
import forge.card.mana.ManaCostParser;
import forge.game.Game;
import forge.game.ability.AbilityFactory;
import forge.game.ability.AbilityUtils;
import forge.game.ability.SpellAbilityEffect; import forge.game.ability.SpellAbilityEffect;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.event.GameEventCardStatsChanged;
import forge.game.keyword.Keyword; import forge.game.keyword.Keyword;
import forge.game.phase.PhaseType;
import forge.game.replacement.ReplacementEffect;
import forge.game.replacement.ReplacementHandler;
import forge.game.spellability.AbilityStatic;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.game.staticability.StaticAbility;
import forge.game.trigger.Trigger;
import forge.game.trigger.TriggerHandler;
import java.util.List; import java.util.List;
import com.google.common.collect.Lists;
public abstract class AnimateEffectBase extends SpellAbilityEffect { public abstract class AnimateEffectBase extends SpellAbilityEffect {
public static void doAnimate(final Card c, final SpellAbility sa, final Integer power, final Integer toughness, public static void doAnimate(final Card c, final SpellAbility sa, final Integer power, final Integer toughness,
final CardType addType, final CardType removeType, final String colors, final CardType addType, final CardType removeType, final String colors,
final List<String> keywords, final List<String> removeKeywords, final List<String> keywords, final List<String> removeKeywords, final List<String> hiddenKeywords,
final List<String> hiddenKeywords, final long timestamp) { List<String> abilities, final List<String> triggers, final List<String> replacements, final List<String> stAbs,
final long timestamp) {
final Card source = sa.getHostCard();
final Game game = source.getGame();
boolean removeSuperTypes = false; boolean removeSuperTypes = false;
boolean removeCardTypes = false; boolean removeCardTypes = false;
@@ -38,6 +58,8 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect {
boolean removeArtifactTypes = false; boolean removeArtifactTypes = false;
boolean removeEnchantmentTypes = false; boolean removeEnchantmentTypes = false;
boolean removeAll = sa.hasParam("RemoveAllAbilities");
if (sa.hasParam("OverwriteTypes")) { if (sa.hasParam("OverwriteTypes")) {
removeSuperTypes = true; removeSuperTypes = true;
removeCardTypes = true; removeCardTypes = true;
@@ -98,8 +120,7 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect {
removeLandTypes, removeCreatureTypes, removeArtifactTypes, removeEnchantmentTypes, timestamp); removeLandTypes, removeCreatureTypes, removeArtifactTypes, removeEnchantmentTypes, timestamp);
} }
c.addChangedCardKeywords(keywords, removeKeywords, c.addChangedCardKeywords(keywords, removeKeywords, removeAll, removeLandTypes, timestamp);
sa.hasParam("RemoveAllAbilities"), sa.hasParam("RemoveIntrinsicAbilities"), timestamp);
if (sa.hasParam("CantHaveKeyword")) { if (sa.hasParam("CantHaveKeyword")) {
c.addCantHaveKeyword(timestamp, Keyword.setValueOf(sa.getParam("CantHaveKeyword"))); c.addCantHaveKeyword(timestamp, Keyword.setValueOf(sa.getParam("CantHaveKeyword")));
@@ -111,6 +132,112 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect {
c.addColor(colors, !sa.hasParam("OverwriteColors"), timestamp); c.addColor(colors, !sa.hasParam("OverwriteColors"), timestamp);
if (sa.hasParam("LeaveBattlefield")) {
addLeaveBattlefieldReplacement(c, sa, sa.getParam("LeaveBattlefield"));
}
// remove abilities
final List<SpellAbility> removedAbilities = Lists.newArrayList();
boolean clearSpells = sa.hasParam("OverwriteSpells");
if (clearSpells) {
removedAbilities.addAll(Lists.newArrayList(c.getSpells()));
}
if (sa.hasParam("RemoveThisAbility") && !removedAbilities.contains(sa)) {
removedAbilities.add(sa);
}
// give abilities
final List<SpellAbility> addedAbilities = Lists.newArrayList();
for (final String s : abilities) {
addedAbilities.add(AbilityFactory.getAbility(AbilityUtils.getSVar(sa, s), c));
}
// Grant triggers
final List<Trigger> addedTriggers = Lists.newArrayList();
for (final String s : triggers) {
addedTriggers.add(TriggerHandler.parseTrigger(AbilityUtils.getSVar(sa, s), c, false));
}
// give replacement effects
final List<ReplacementEffect> addedReplacements = Lists.newArrayList();
for (final String s : replacements) {
addedReplacements.add(ReplacementHandler.parseReplacement(AbilityUtils.getSVar(sa, s), c, false));
}
// give static abilities (should only be used by cards to give
// itself a static ability)
final List<StaticAbility> addedStaticAbilities = Lists.newArrayList();
for (final String s : stAbs) {
addedStaticAbilities.add(new StaticAbility(AbilityUtils.getSVar(sa, s), c));
}
final GameCommand unanimate = new GameCommand() {
private static final long serialVersionUID = -5861759814760561373L;
@Override
public void run() {
doUnanimate(c, sa, hiddenKeywords, timestamp);
c.removeChangedName(timestamp);
c.updateStateForView();
game.fireEvent(new GameEventCardStatsChanged(c));
}
};
if (sa.hasParam("RevertCost")) {
final ManaCost cost = new ManaCost(new ManaCostParser(sa.getParam("RevertCost")));
final String desc = sa.getStackDescription();
final SpellAbility revertSA = new AbilityStatic(c, cost) {
@Override
public void resolve() {
unanimate.run();
}
@Override
public String getDescription() {
return cost + ": End Effect: " + desc;
}
};
addedAbilities.add(revertSA);
}
// after unanimate to add RevertCost
if (removeAll || removeLandTypes
|| !addedAbilities.isEmpty() || !removedAbilities.isEmpty() || !addedTriggers.isEmpty()
|| !addedReplacements.isEmpty() || !addedStaticAbilities.isEmpty()) {
c.addChangedCardTraits(addedAbilities, removedAbilities, addedTriggers, addedReplacements,
addedStaticAbilities, removeAll, false, removeLandTypes, timestamp);
}
if (!sa.hasParam("Permanent")) {
if (sa.hasParam("UntilEndOfCombat")) {
game.getEndOfCombat().addUntil(unanimate);
} else if (sa.hasParam("UntilHostLeavesPlay")) {
source.addLeavesPlayCommand(unanimate);
} else if (sa.hasParam("UntilLoseControlOfHost")) {
sa.getHostCard().addLeavesPlayCommand(unanimate);
sa.getHostCard().addChangeControllerCommand(unanimate);
} else if (sa.hasParam("UntilYourNextUpkeep")) {
game.getUpkeep().addUntil(source.getController(), unanimate);
} else if (sa.hasParam("UntilTheEndOfYourNextUpkeep")) {
if (game.getPhaseHandler().is(PhaseType.UPKEEP)) {
game.getUpkeep().registerUntilEnd(source.getController(), unanimate);
} else {
game.getUpkeep().addUntilEnd(source.getController(), unanimate);
}
} else if (sa.hasParam("UntilControllerNextUntap")) {
game.getUntap().addUntil(c.getController(), unanimate);
} else if (sa.hasParam("UntilAPlayerCastSpell")) {
game.getStack().addCastCommand(sa.getParam("UntilAPlayerCastSpell"), unanimate);
} else if (sa.hasParam("UntilYourNextTurn")) {
game.getCleanup().addUntil(source.getController(), unanimate);
} else {
game.getEndOfTurn().addUntil(unanimate);
}
}
} }
/** /**

View File

@@ -128,7 +128,6 @@ public final class StaticAbilityContinuous {
String[] addTriggers = null; String[] addTriggers = null;
String[] addStatics = null; String[] addStatics = null;
boolean removeAllAbilities = false; boolean removeAllAbilities = false;
boolean removeIntrinsicAbilities = false;
boolean removeNonMana = false; boolean removeNonMana = false;
boolean removeSuperTypes = false; boolean removeSuperTypes = false;
boolean removeCardTypes = false; boolean removeCardTypes = false;
@@ -299,11 +298,6 @@ public final class StaticAbilityContinuous {
removeNonMana = true; removeNonMana = true;
} }
} }
// do this in type layer too in case of blood moon
if ((layer == StaticAbilityLayer.TYPE)
&& params.containsKey("RemoveIntrinsicAbilities")) {
removeIntrinsicAbilities = true;
}
if (layer == StaticAbilityLayer.ABILITIES && params.containsKey("AddAbility")) { if (layer == StaticAbilityLayer.ABILITIES && params.containsKey("AddAbility")) {
final String[] sVars = params.get("AddAbility").split(" & "); final String[] sVars = params.get("AddAbility").split(" & ");
@@ -612,7 +606,7 @@ public final class StaticAbilityContinuous {
// add keywords // add keywords
// TODO regular keywords currently don't try to use keyword multiplier // TODO regular keywords currently don't try to use keyword multiplier
// (Although nothing uses it at this time) // (Although nothing uses it at this time)
if ((addKeywords != null) || (removeKeywords != null) || removeAllAbilities || removeIntrinsicAbilities) { if ((addKeywords != null) || (removeKeywords != null) || removeAllAbilities || removeLandTypes) {
List<String> newKeywords = null; List<String> newKeywords = null;
if (addKeywords != null) { if (addKeywords != null) {
newKeywords = Lists.newArrayList(addKeywords); newKeywords = Lists.newArrayList(addKeywords);
@@ -654,7 +648,7 @@ public final class StaticAbilityContinuous {
} }
affectedCard.addChangedCardKeywords(newKeywords, removeKeywords, affectedCard.addChangedCardKeywords(newKeywords, removeKeywords,
removeAllAbilities, removeIntrinsicAbilities, removeAllAbilities, removeLandTypes,
hostCard.getTimestamp()); hostCard.getTimestamp());
} }
@@ -795,8 +789,8 @@ public final class StaticAbilityContinuous {
} }
} }
if (layer == StaticAbilityLayer.TYPE && removeIntrinsicAbilities) { if (layer == StaticAbilityLayer.TYPE && removeLandTypes) {
affectedCard.addChangedCardTraits(null, null, null, null, null, false, false, removeIntrinsicAbilities, hostCard.getTimestamp()); affectedCard.addChangedCardTraits(null, null, null, null, null, false, false, removeLandTypes, hostCard.getTimestamp());
} }
// add Types // add Types

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -3,7 +3,7 @@ ManaCost:4
Types:Artifact Types:Artifact
A:AB$ PutCounter | Cost$ 2 T | ValidTgts$ Land.nonSwamp | TgtPrompt$ Select target non-Swamp land | RememberCards$ True | CounterType$ MIRE | CounterNum$ 1 | ActivationPhases$ Upkeep | SubAbility$ DBEffect | SpellDescription$ Put a mire counter on target non-Swamp land. That land is a Swamp for as long as it has a mire counter on it. Activate this ability only during your upkeep. A:AB$ PutCounter | Cost$ 2 T | ValidTgts$ Land.nonSwamp | TgtPrompt$ Select target non-Swamp land | RememberCards$ True | CounterType$ MIRE | CounterNum$ 1 | ActivationPhases$ Upkeep | SubAbility$ DBEffect | 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:DBEffect:DB$ Effect | RememberObjects$ Targeted | StaticAbilities$ TombStatic | ForgetOnMoved$ Battlefield | ForgetCounter$ MIRE | Duration$ Permanent SVar:DBEffect:DB$ Effect | RememberObjects$ Targeted | StaticAbilities$ TombStatic | ForgetOnMoved$ Battlefield | ForgetCounter$ MIRE | Duration$ Permanent
SVar:TombStatic:Mode$ Continuous | EffectZone$ Command | Affected$ Card.IsRemembered | AddType$ Swamp | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ That land is a Swamp for as long as it has a mire counter on it SVar:TombStatic:Mode$ Continuous | EffectZone$ Command | Affected$ Card.IsRemembered | AddType$ Swamp | RemoveLandTypes$ True | Description$ That land is a Swamp for as long as it has a mire counter on it
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigEffect | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME is put into a graveyard from the battlefield, at the beginning of each of your upkeeps for the rest of the game, remove all mire counters from a land that a mire counter was put onto with CARDNAME but that a mire counter has not been removed from with CARDNAME. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigEffect | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME is put into a graveyard from the battlefield, at the beginning of each of your upkeeps for the rest of the game, remove all mire counters from a land that a mire counter was put onto with CARDNAME but that a mire counter has not been removed from with CARDNAME.
SVar:TrigEffect:DB$ Effect | RememberObjects$ RememberedCard | Triggers$ UpkeepRemove | ForgetOnMoved$ Battlefield | SVars$ TrigRemove,DBRemoveCounter,DBForget,DBClearChosen,DBExileSelf | Duration$ Permanent | SubAbility$ DBClearRemembered SVar:TrigEffect:DB$ Effect | RememberObjects$ RememberedCard | Triggers$ UpkeepRemove | ForgetOnMoved$ Battlefield | SVars$ TrigRemove,DBRemoveCounter,DBForget,DBClearChosen,DBExileSelf | Duration$ Permanent | SubAbility$ DBClearRemembered
SVar:UpkeepRemove:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigRemove | TriggerZones$ Command | TriggerDescription$ At the beginning of your upkeep, remove all mire counters from a land that a mire counter was put onto with Cyclopean Tomb but that a mire counter has not been removed from with Cyclopean Tomb. SVar:UpkeepRemove:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigRemove | TriggerZones$ Command | TriggerDescription$ At the beginning of your upkeep, remove all mire counters from a land that a mire counter was put onto with Cyclopean Tomb but that a mire counter has not been removed from with Cyclopean Tomb.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -5,7 +5,7 @@ K:Enchant land
A:SP$ Attach | Cost$ 1 B | ValidTgts$ Land | AITgts$ Land.nonBasic | AILogic$ Curse A:SP$ Attach | Cost$ 1 B | ValidTgts$ Land | AITgts$ Land.nonBasic | AILogic$ Curse
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw a card. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw a card.
SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1
S:Mode$ Continuous | Affected$ Land.EnchantedBy | AddType$ Land | RemoveLandTypes$ True | RemoveAllAbilities$ True | AddAbility$ ABManaC & ABManaAny | Description$ Enchanted land loses all land types and abilities and has "{T}: Add {C}" and "{T}, Pay 1 life: Add one mana of any color." S:Mode$ Continuous | Affected$ Land.EnchantedBy | RemoveLandTypes$ True | RemoveAllAbilities$ True | AddAbility$ ABManaC & ABManaAny | Description$ Enchanted land loses all land types and abilities and has "{T}: Add {C}" and "{T}, Pay 1 life: Add one mana of any color."
SVar:ABManaC:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. SVar:ABManaC:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}.
SVar:ABManaAny:AB$ Mana | Cost$ T PayLife<1> | Produced$ Any | SpellDescription$ Add one mana of any color. SVar:ABManaAny:AB$ Mana | Cost$ T PayLife<1> | Produced$ Any | SpellDescription$ Add one mana of any color.
Oracle:Enchant land\nWhen Lithoform Blight enters the battlefield, draw a card.\nEnchanted land loses all land types and abilities and has "{T}: Add {C}" and "{T}, Pay 1 life: Add one mana of any color." Oracle:Enchant land\nWhen Lithoform Blight enters the battlefield, draw a card.\nEnchanted land loses all land types and abilities and has "{T}: Add {C}" and "{T}, Pay 1 life: Add one mana of any color."

View File

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

View File

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

View File

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

View File

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

View File

@@ -4,7 +4,7 @@ Types:Artifact
T:Mode$ Phase | Phase$ Upkeep | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of each player's upkeep, that player puts a flood counter on target non-Island land they control of their choice. That land is an Island for as long as it has a flood counter on it. T:Mode$ Phase | Phase$ Upkeep | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of each player's upkeep, that player puts a flood counter on target non-Island land they control of their choice. That land is an Island for as long as it has a flood counter on it.
SVar:TrigPutCounter:DB$ PutCounter | TargetingPlayer$ TriggeredPlayer | ValidTgts$ Land.ActivePlayerCtrl+nonIsland | TgtPrompt$ Select target non-Island land you control | CounterType$ FLOOD | CounterNum$ 1 | Placer$ TriggeredPlayer | SubAbility$ DBEffect SVar:TrigPutCounter:DB$ PutCounter | TargetingPlayer$ TriggeredPlayer | ValidTgts$ Land.ActivePlayerCtrl+nonIsland | TgtPrompt$ Select target non-Island land you control | CounterType$ FLOOD | CounterNum$ 1 | Placer$ TriggeredPlayer | SubAbility$ DBEffect
SVar:DBEffect:DB$ Effect | RememberObjects$ Targeted | StaticAbilities$ FountainStatic | ForgetOnMoved$ Battlefield | ForgetCounter$ FLOOD | Duration$ Permanent SVar:DBEffect:DB$ Effect | RememberObjects$ Targeted | StaticAbilities$ FountainStatic | ForgetOnMoved$ Battlefield | ForgetCounter$ FLOOD | Duration$ Permanent
SVar:FountainStatic:Mode$ Continuous | EffectZone$ Command | Affected$ Card.IsRemembered | AddType$ Island | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ That land is an Island for as long as it has a flood counter on it. SVar:FountainStatic:Mode$ Continuous | EffectZone$ Command | Affected$ Card.IsRemembered | AddType$ Island | RemoveLandTypes$ True | Description$ That land is an Island for as long as it has a flood counter on it.
T:Mode$ Phase | Phase$ End of Turn | IsPresent$ Land.nonIsland | PresentCompare$ EQ0 | TriggerZones$ Battlefield | Execute$ TrigRemoveAll | TriggerDescription$ At the beginning of each end step, if all lands on the battlefield are Islands, remove all flood counters from them. T:Mode$ Phase | Phase$ End of Turn | IsPresent$ Land.nonIsland | PresentCompare$ EQ0 | TriggerZones$ Battlefield | Execute$ TrigRemoveAll | TriggerDescription$ At the beginning of each end step, if all lands on the battlefield are Islands, remove all flood counters from them.
SVar:TrigRemoveAll:DB$ RemoveCounterAll | ValidCards$ Land | CounterType$ FLOOD | AllCounters$ True SVar:TrigRemoveAll:DB$ RemoveCounterAll | ValidCards$ Land | CounterType$ FLOOD | AllCounters$ True
AI:RemoveDeck:Random AI:RemoveDeck:Random

View File

@@ -3,6 +3,6 @@ ManaCost:U
Types:Enchantment Aura Types:Enchantment Aura
K:Enchant land K:Enchant land
A:SP$ Attach | Cost$ U | ValidTgts$ Land | AILogic$ ChangeType A:SP$ Attach | Cost$ U | ValidTgts$ Land | AILogic$ ChangeType
S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Island | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Enchanted land is an Island. S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Island | RemoveLandTypes$ True | Description$ Enchanted land is an Island.
SVar:Picture:http://www.wizards.com/global/images/magic/general/seas_claim.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/seas_claim.jpg
Oracle:Enchant land (Target a land as you cast this. This card enters the battlefield attached to that land.)\nEnchanted land is an Island. Oracle:Enchant land (Target a land as you cast this. This card enters the battlefield attached to that land.)\nEnchanted land is an Island.

View File

@@ -2,7 +2,7 @@ Name:Shimmering Mirage
ManaCost:1 U ManaCost:1 U
Types:Instant Types:Instant
A:SP$ ChooseType | Cost$ 1 U | Defined$ You | Type$ Basic Land | SubAbility$ DBAnimate | SpellDescription$ Target land becomes the basic land type of your choice until end of turn. Draw a card. 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.
SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SubAbility$ DBDraw SVar:DBAnimate:DB$ Animate | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ ChosenType | RemoveLandTypes$ True | SubAbility$ DBDraw
SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1 SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1
AI:RemoveDeck:All AI:RemoveDeck:All
SVar:Picture:http://www.wizards.com/global/images/magic/general/shimmering_mirage.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/shimmering_mirage.jpg

View File

@@ -2,7 +2,7 @@ Name:Slimy Kavu
ManaCost:2 R ManaCost:2 R
Types:Creature Kavu Types:Creature Kavu
PT:2/2 PT:2/2
A:AB$ Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Swamp | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SpellDescription$ Target land becomes a Swamp until end of turn. A:AB$ Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Swamp | RemoveLandTypes$ True | SpellDescription$ Target land becomes a Swamp until end of turn.
AI:RemoveDeck:All AI:RemoveDeck:All
SVar:Picture:http://www.wizards.com/global/images/magic/general/slimy_kavu.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/slimy_kavu.jpg
Oracle:{T}: Target land becomes a Swamp until end of turn. Oracle:{T}: Target land becomes a Swamp until end of turn.

View File

@@ -3,7 +3,7 @@ ManaCost:2 G
Types:Enchantment Aura Types:Enchantment Aura
K:Enchant permanent K:Enchant permanent
A:SP$ Attach | Cost$ 2 G | ValidTgts$ Permanent | AILogic$ Curse | AITgts$ Card.cmcGE3 A:SP$ Attach | Cost$ 2 G | ValidTgts$ Permanent | AILogic$ Curse | AITgts$ Card.cmcGE3
S:Mode$ Continuous | Affected$ Card.EnchantedBy | SetColor$ Colorless | AddType$ Land & Forest | RemoveCardTypes$ True | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Enchanted permanent is a colorless Forest land. S:Mode$ Continuous | Affected$ Card.EnchantedBy | SetColor$ Colorless | AddType$ Land & Forest | RemoveCardTypes$ True | RemoveLandTypes$ True | Description$ Enchanted permanent is a colorless Forest land.
SVar:NonStackingAttachEffect:True SVar:NonStackingAttachEffect:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/song_of_the_dryads.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/song_of_the_dryads.jpg
Oracle:Enchant permanent\nEnchanted permanent is a colorless Forest land. Oracle:Enchant permanent\nEnchanted permanent is a colorless Forest land.

View File

@@ -3,7 +3,7 @@ ManaCost:1 U
Types:Enchantment Aura Types:Enchantment Aura
K:Enchant land K:Enchant land
A:SP$ Attach | Cost$ 1 U | ValidTgts$ Land | AILogic$ ChangeType A:SP$ Attach | Cost$ 1 U | ValidTgts$ Land | AILogic$ ChangeType
S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Island | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Enchanted land is an Island. S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Island | RemoveLandTypes$ True | Description$ Enchanted land is an Island.
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw a card. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw a card.
SVar:TrigDraw:DB$Draw | Defined$ You | NumCards$ 1 SVar:TrigDraw:DB$Draw | Defined$ You | NumCards$ 1
SVar:Picture:http://www.wizards.com/global/images/magic/general/spreading_seas.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/spreading_seas.jpg

View File

@@ -3,6 +3,6 @@ ManaCost:1 U U
Types:Creature Merfolk Scout Types:Creature Merfolk Scout
PT:2/3 PT:2/3
A:AB$ Pump | Cost$ T | ValidTgts$ Merfolk | TgtPrompt$ Select target Merfolk creature | NumAtt$ +1 | NumDef$ +1 | KW$ Islandwalk | SpellDescription$ Target Merfolk creature gets +1/+1 and gains islandwalk until end of turn. A:AB$ Pump | Cost$ T | ValidTgts$ Merfolk | TgtPrompt$ Select target Merfolk creature | NumAtt$ +1 | NumDef$ +1 | KW$ Islandwalk | SpellDescription$ Target Merfolk creature gets +1/+1 and gains islandwalk until end of turn.
A:AB$ Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Island | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SpellDescription$ Target land becomes an Island until end of turn. A:AB$ Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Island | RemoveLandTypes$ True | SpellDescription$ Target land becomes an Island until end of turn.
SVar:Picture:http://www.wizards.com/global/images/magic/general/streambed_aquitects.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/streambed_aquitects.jpg
Oracle:{T}: Target Merfolk creature gets +1/+1 and gains islandwalk until end of turn. (It can't be blocked as long as defending player controls an Island.)\n{T}: Target land becomes an Island until end of turn. Oracle:{T}: Target Merfolk creature gets +1/+1 and gains islandwalk until end of turn. (It can't be blocked as long as defending player controls an Island.)\n{T}: Target land becomes an Island until end of turn.

View File

@@ -3,7 +3,7 @@ ManaCost:2 B
Types:Enchantment Aura Types:Enchantment Aura
K:Enchant land K:Enchant land
A:SP$ Attach | Cost$ 2 B | ValidTgts$ Land | AILogic$ ChangeType A:SP$ Attach | Cost$ 2 B | ValidTgts$ Land | AILogic$ ChangeType
S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Swamp | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Description$ Enchanted land is a Swamp. S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddType$ Swamp | RemoveLandTypes$ True | Description$ Enchanted land is a Swamp.
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw a card. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw a card.
SVar:TrigDraw:DB$Draw | Defined$ You | NumCards$ 1 SVar:TrigDraw:DB$Draw | Defined$ You | NumCards$ 1
SVar:Picture:http://www.wizards.com/global/images/magic/general/tainted_well.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/tainted_well.jpg

View File

@@ -2,7 +2,7 @@ Name:Thelonite Monk
ManaCost:2 G G ManaCost:2 G G
Types:Creature Insect Monk Cleric Types:Creature Insect Monk Cleric
PT:1/2 PT:1/2
A:AB$ Animate | Cost$ T Sac<1/Creature.Green/green creature> | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Forest | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | Permanent$ True | SpellDescription$ Target land becomes a Forest. (This effect lasts indefinitely.) A:AB$ Animate | Cost$ T Sac<1/Creature.Green/green creature> | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Forest | RemoveLandTypes$ True | Permanent$ True | SpellDescription$ Target land becomes a Forest. (This effect lasts indefinitely.)
SVar:AIPreference:SacCost$Creature.Green+token SVar:AIPreference:SacCost$Creature.Green+token
AI:RemoveDeck:All AI:RemoveDeck:All
SVar:Picture:http://www.wizards.com/global/images/magic/general/thelonite_monk.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/thelonite_monk.jpg

View File

@@ -2,7 +2,7 @@ Name:Tidal Warrior
ManaCost:U ManaCost:U
Types:Creature Merfolk Warrior Types:Creature Merfolk Warrior
PT:1/1 PT:1/1
A:AB$ Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Island | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SpellDescription$ Target land becomes an Island until end of turn. A:AB$ Animate | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Island | RemoveLandTypes$ True | SpellDescription$ Target land becomes an Island until end of turn.
AI:RemoveDeck:All AI:RemoveDeck:All
SVar:Picture:http://www.wizards.com/global/images/magic/general/tidal_warrior.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/tidal_warrior.jpg
Oracle:{T}: Target land becomes an Island until end of turn. Oracle:{T}: Target land becomes an Island until end of turn.

View File

@@ -4,8 +4,8 @@ Types:Creature Kavu
PT:2/2 PT:2/2
A:AB$ Pump | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | SubAbility$ TypeChoice | StackDescription$ Target land becomes a | SpellDescription$ Target land becomes a Plains or an Island until end of turn. A:AB$ Pump | Cost$ T | ValidTgts$ Land | TgtPrompt$ Select target land | SubAbility$ TypeChoice | StackDescription$ Target land becomes a | SpellDescription$ Target land becomes a Plains or an Island until end of turn.
SVar:TypeChoice:DB$ GenericChoice | Choices$ SVar1,SVar2 | StackDescription$ Plains or an Island until end of turn. SVar:TypeChoice:DB$ GenericChoice | Choices$ SVar1,SVar2 | StackDescription$ Plains or an Island until end of turn.
SVar:SVar1:DB$ Animate | Defined$ Targeted | Types$ Plains | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SpellDescription$ Targeted land becomes a Plains until end of turn. SVar:SVar1:DB$ Animate | Defined$ Targeted | Types$ Plains | RemoveLandTypes$ True | SpellDescription$ Targeted land becomes a Plains until end of turn.
SVar:SVar2:DB$ Animate | Defined$ Targeted | Types$ Island | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SpellDescription$ Targeted land becomes an Island until end of turn. SVar:SVar2:DB$ Animate | Defined$ Targeted | Types$ Island | RemoveLandTypes$ True | SpellDescription$ Targeted land becomes an Island until end of turn.
AI:RemoveDeck:All AI:RemoveDeck:All
SVar:Picture:http://www.wizards.com/global/images/magic/general/tundra_kavu.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/tundra_kavu.jpg
Oracle:{T}: Target land becomes a Plains or an Island until end of turn. Oracle:{T}: Target land becomes a Plains or an Island until end of turn.

View File

@@ -6,7 +6,7 @@ SVar:MillOpp:DB$ Mill | NumCards$ 4 | ValidTgts$ Player | TgtPrompt$ Choose a pl
SVar:ChangeType:DB$ ChooseType | Defined$ You | Type$ Land | SubAbility$ RemFirstLand | SpellDescription$ Choose a land type and a basic land type. Each land of the first chosen type becomes the second chosen type until end of turn. SVar:ChangeType:DB$ ChooseType | Defined$ You | Type$ Land | SubAbility$ RemFirstLand | SpellDescription$ Choose a land type and a basic land type. Each land of the first chosen type becomes the second chosen type until end of turn.
SVar:RemFirstLand:DB$ PumpAll | ValidCards$ Land.ChosenType | RememberAllPumped$ True | SubAbility$ ChooseType2 SVar:RemFirstLand:DB$ PumpAll | ValidCards$ Land.ChosenType | RememberAllPumped$ True | SubAbility$ ChooseType2
SVar:ChooseType2:DB$ ChooseType | Defined$ You | Type$ Basic Land | AILogic$ MostNeededType | SubAbility$ AnimateFirst SVar:ChooseType2:DB$ ChooseType | Defined$ You | Type$ Basic Land | AILogic$ MostNeededType | SubAbility$ AnimateFirst
SVar:AnimateFirst:DB$ AnimateAll | ValidCards$ Land.IsRemembered | Types$ ChosenType | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SubAbility$ DBCleanup SVar:AnimateFirst:DB$ AnimateAll | ValidCards$ Land.IsRemembered | Types$ ChosenType | RemoveLandTypes$ True | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:PhaseArtifact:DB$ Phases | ValidTgts$ Artifact | TgtPrompt$ Choose a artifact | SpellDescription$ Target artifact phases out. SVar:PhaseArtifact:DB$ Phases | ValidTgts$ Artifact | TgtPrompt$ Choose a artifact | SpellDescription$ Target artifact phases out.
AI:RemoveDeck:All AI:RemoveDeck:All

View File

@@ -2,7 +2,7 @@ Name:Zombie Trailblazer
ManaCost:B B B ManaCost:B B B
Types:Creature Zombie Scout Types:Creature Zombie Scout
PT:2/2 PT:2/2
A:AB$ Animate | Cost$ tapXType<1/Zombie> | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Swamp | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True | SpellDescription$ Target land becomes a Swamp until end of turn. A:AB$ Animate | Cost$ tapXType<1/Zombie> | ValidTgts$ Land | TgtPrompt$ Select target land | Types$ Swamp | RemoveLandTypes$ True | SpellDescription$ Target land becomes a Swamp until end of turn.
A:AB$ Pump | Cost$ tapXType<1/Zombie> | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ Swampwalk | SpellDescription$ Target creature gains swampwalk until end of turn. A:AB$ Pump | Cost$ tapXType<1/Zombie> | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ Swampwalk | SpellDescription$ Target creature gains swampwalk until end of turn.
AI:RemoveDeck:All AI:RemoveDeck:All
SVar:Picture:http://www.wizards.com/global/images/magic/general/zombie_trailblazer.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/zombie_trailblazer.jpg