mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 18:28:00 +00:00
@@ -551,8 +551,8 @@ public class AiAttackController {
|
||||
}
|
||||
|
||||
if (bandingCreatures != null) {
|
||||
List<String> evasionKeywords = Arrays.asList("Flying", "Horsemanship", "Shadow", "Plainswalk", "Islandwalk",
|
||||
"Forestwalk", "Mountainwalk", "Swampwalk");
|
||||
List<String> evasionKeywords = Arrays.asList("Flying", "Horsemanship", "Shadow", "Landwalk:Plains", "Landwalk:Island",
|
||||
"Landwalk:Forest", "Landwalk:Mountain", "Landwalk:Swamp");
|
||||
|
||||
// TODO: Assign to band with the best attacker for now, but needs better logic.
|
||||
for (Card c : bandingCreatures) {
|
||||
|
||||
@@ -1574,7 +1574,7 @@ public class AttachAi extends SpellAbilityAi {
|
||||
final boolean evasive = keyword.equals("Fear")
|
||||
|| keyword.equals("Intimidate") || keyword.equals("Shadow")
|
||||
|| keyword.equals("Flying") || keyword.equals("Horsemanship")
|
||||
|| keyword.endsWith("walk") || keyword.equals("All creatures able to block CARDNAME do so.");
|
||||
|| keyword.startsWith("Landwalk") || keyword.equals("All creatures able to block CARDNAME do so.");
|
||||
// give evasive keywords to creatures that can attack and deal damage
|
||||
|
||||
boolean canBeBlocked = false;
|
||||
|
||||
@@ -368,25 +368,31 @@ public abstract class PumpAiBase extends SpellAbilityAi {
|
||||
return ComputerUtil.predictThreatenedObjects(sa.getActivatingPlayer(), sa).contains(card);
|
||||
} else if (keyword.equals("Persist")) {
|
||||
return card.getBaseToughness() > 1 && !card.hasKeyword(Keyword.UNDYING);
|
||||
} else if (keyword.equals("Islandwalk")) {
|
||||
} else if (keyword.equals("Landwalk:Plains")) {
|
||||
return !ph.isPlayerTurn(opp) && ((combat != null && combat.isAttacking(card)) || CombatUtil.canAttack(card, opp))
|
||||
&& !ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS)
|
||||
&& newPower > 0
|
||||
&& !CardLists.getType(opp.getLandsInPlay(), "Plains").isEmpty()
|
||||
&& Iterables.any(opp.getCreaturesInPlay(), CardPredicates.possibleBlockers(card));
|
||||
} else if (keyword.equals("Landwalk:Island")) {
|
||||
return !ph.isPlayerTurn(opp) && ((combat != null && combat.isAttacking(card)) || CombatUtil.canAttack(card, opp))
|
||||
&& !ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS)
|
||||
&& newPower > 0
|
||||
&& !CardLists.getType(opp.getLandsInPlay(), "Island").isEmpty()
|
||||
&& Iterables.any(opp.getCreaturesInPlay(), CardPredicates.possibleBlockers(card));
|
||||
} else if (keyword.equals("Swampwalk")) {
|
||||
} else if (keyword.equals("Landwalk:Swamp")) {
|
||||
return !ph.isPlayerTurn(opp) && ((combat != null && combat.isAttacking(card)) || CombatUtil.canAttack(card, opp))
|
||||
&& !ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS)
|
||||
&& newPower > 0
|
||||
&& !CardLists.getType(opp.getLandsInPlay(), "Swamp").isEmpty()
|
||||
&& Iterables.any(opp.getCreaturesInPlay(), CardPredicates.possibleBlockers(card));
|
||||
} else if (keyword.equals("Mountainwalk")) {
|
||||
} else if (keyword.equals("Landwalk:Mountain")) {
|
||||
return !ph.isPlayerTurn(opp) && ((combat != null && combat.isAttacking(card)) || CombatUtil.canAttack(card, opp))
|
||||
&& !ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS)
|
||||
&& newPower > 0
|
||||
&& !CardLists.getType(opp.getLandsInPlay(), "Mountain").isEmpty()
|
||||
&& Iterables.any(opp.getCreaturesInPlay(), CardPredicates.possibleBlockers(card));
|
||||
} else if (keyword.equals("Forestwalk")) {
|
||||
} else if (keyword.equals("Landwalk:Forest")) {
|
||||
return !ph.isPlayerTurn(opp) && ((combat != null && combat.isAttacking(card)) || CombatUtil.canAttack(card, opp))
|
||||
&& !ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS)
|
||||
&& newPower > 0
|
||||
|
||||
@@ -2483,6 +2483,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|
||||
|| keyword.startsWith("Class") || keyword.startsWith("Blitz")
|
||||
|| keyword.startsWith("Specialize") || keyword.equals("Ravenous")
|
||||
|| keyword.equals("For Mirrodin") || keyword.startsWith("Craft")
|
||||
|| keyword.startsWith("Landwalk")
|
||||
|| keyword.startsWith("Alternative Cost")) {
|
||||
// keyword parsing takes care of adding a proper description
|
||||
} else if (keyword.equals("Read ahead")) {
|
||||
|
||||
@@ -21,6 +21,7 @@ import java.util.Arrays;
|
||||
import java.util.EnumSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
@@ -510,9 +511,9 @@ public class CardFactoryUtil {
|
||||
for (Card c : cards) {
|
||||
for (KeywordInterface inst : c.getKeywords()) {
|
||||
final String k = inst.getOriginal();
|
||||
if (k.endsWith("walk")) {
|
||||
if (inst.getKeyword().equals(Keyword.LANDWALK)) {
|
||||
landkw.add(k);
|
||||
} else if (k.startsWith("Protection")) {
|
||||
} else if (inst.getKeyword().equals(Keyword.PROTECTION)) {
|
||||
protectionkw.add(k);
|
||||
for (byte col : MagicColor.WUBRG) {
|
||||
final String colString = MagicColor.toLongString(col);
|
||||
@@ -521,9 +522,9 @@ public class CardFactoryUtil {
|
||||
protectionColorkw.add(protString);
|
||||
}
|
||||
}
|
||||
} else if (k.startsWith("Hexproof")) {
|
||||
} else if (inst.getKeyword().equals(Keyword.HEXPROOF)) {
|
||||
hexproofkw.add(k);
|
||||
} else if (k.startsWith("Trample")) {
|
||||
} else if (inst.getKeyword().equals(Keyword.TRAMPLE)) {
|
||||
tramplekw.add(k);
|
||||
} else {
|
||||
allkw.add(k.toLowerCase());
|
||||
@@ -3836,7 +3837,7 @@ public class CardFactoryUtil {
|
||||
StaticAbility st = StaticAbility.create(effect, state.getCard(), state, intrinsic);
|
||||
inst.addStaticAbility(st);
|
||||
} else if (keyword.equals("Defender")) {
|
||||
String effect = "Mode$ CantAttack | ValidCard$ Card.Self | DefenderKeyword$ True | Secondary$ True";
|
||||
String effect = "Mode$ CantAttack | ValidCard$ Card.Self | Secondary$ True";
|
||||
inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic));
|
||||
} else if (keyword.equals("Devoid")) {
|
||||
String effect = "Mode$ Continuous | EffectZone$ All | Affected$ Card.Self" +
|
||||
@@ -3886,7 +3887,7 @@ public class CardFactoryUtil {
|
||||
sbValid.append("| ValidSource$ ").append(k[1]);
|
||||
}
|
||||
|
||||
String effect = "Mode$ CantTarget | Hexproof$ True | ValidCard$ Card.Self | Secondary$ True"
|
||||
String effect = "Mode$ CantTarget | ValidCard$ Card.Self | Secondary$ True"
|
||||
+ sbValid.toString() + " | Activator$ Opponent | Description$ "
|
||||
+ sbDesc.toString() + " (" + inst.getReminderText() + ")";
|
||||
inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic));
|
||||
@@ -3898,6 +3899,13 @@ public class CardFactoryUtil {
|
||||
String effect = "Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.nonArtifact+notSharesColorWith | Secondary$ True " +
|
||||
" | Description$ Intimidate ( " + inst.getReminderText() + ")";
|
||||
inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic));
|
||||
} else if (keyword.startsWith("Landwalk")) {
|
||||
final String[] k = keyword.split(":");
|
||||
String valid = k[1];
|
||||
String desc = k[k.length > 2 ? 2 : 1].toLowerCase(Locale.ROOT);
|
||||
String effect = "Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidDefender$ Player.controls" + valid +
|
||||
" | Description$ " + StringUtils.capitalize(desc) + "walk (" + inst.getReminderText() + ")";
|
||||
inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic));
|
||||
} else if (keyword.equals("Living metal")) {
|
||||
String effect = "Mode$ Continuous | Affected$ Card.Self | AddType$ Creature | Condition$ PlayerTurn | Secondary$ True";
|
||||
inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic));
|
||||
@@ -3946,7 +3954,7 @@ public class CardFactoryUtil {
|
||||
" | Description$ Chapter abilities of this Saga can't trigger the turn it entered the battlefield unless it has exactly the number of lore counters on it specified in the chapter symbol of that ability.";
|
||||
inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic));
|
||||
} else if (keyword.equals("Shroud")) {
|
||||
String effect = "Mode$ CantTarget | Shroud$ True | ValidCard$ Card.Self | Secondary$ True"
|
||||
String effect = "Mode$ CantTarget | ValidCard$ Card.Self | Secondary$ True"
|
||||
+ " | Description$ Shroud (" + inst.getReminderText() + ")";
|
||||
inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic));
|
||||
} else if (keyword.equals("Skulk")) {
|
||||
|
||||
@@ -21,8 +21,6 @@ import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import forge.card.CardType;
|
||||
import forge.card.MagicColor;
|
||||
import forge.card.mana.ManaCost;
|
||||
import forge.game.Game;
|
||||
import forge.game.GameEntity;
|
||||
@@ -560,117 +558,9 @@ public class CombatUtil {
|
||||
return false;
|
||||
}
|
||||
|
||||
return canBeBlocked(attacker, defendingPlayer);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* canBeBlocked.
|
||||
* </p>
|
||||
*
|
||||
* @param attacker
|
||||
* a {@link forge.game.card.Card} object.
|
||||
* @return a boolean.
|
||||
*/
|
||||
public static boolean canBeBlocked(final Card attacker, final Player defender) {
|
||||
if (attacker == null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Landwalk
|
||||
if (isUnblockableFromLandwalk(attacker, defender)) {
|
||||
return CardLists.getAmountOfKeyword(defender.getCreaturesInPlay(), "CARDNAME can block creatures with landwalk abilities as though they didn't have those abilities.") != 0;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Cache landwalk ability strings instead of generating them each time.
|
||||
private static final String[] LANDWALK_KEYWORDS;
|
||||
private static final String[] SNOW_LANDWALK_KEYWORDS;
|
||||
private static final String[] IGNORE_LANDWALK_KEYWORDS;
|
||||
static {
|
||||
final int size = MagicColor.Constant.BASIC_LANDS.size();
|
||||
LANDWALK_KEYWORDS = new String[size];
|
||||
SNOW_LANDWALK_KEYWORDS = new String[size];
|
||||
IGNORE_LANDWALK_KEYWORDS = new String[size];
|
||||
for (int i = 0; i < size; i++) {
|
||||
final String basic = MagicColor.Constant.BASIC_LANDS.get(i);
|
||||
final String landwalk = basic + "walk";
|
||||
LANDWALK_KEYWORDS[i] = landwalk;
|
||||
SNOW_LANDWALK_KEYWORDS[i] = "Snow " + landwalk.toLowerCase();
|
||||
IGNORE_LANDWALK_KEYWORDS[i] = "May be blocked as though it doesn't have " + landwalk + ".";
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isUnblockableFromLandwalk(final Card attacker, final Player defendingPlayer) {
|
||||
//May be blocked as though it doesn't have landwalk. (Staff of the Ages)
|
||||
if (attacker.hasKeyword("May be blocked as though it doesn't have landwalk.")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
List<String> walkTypes = Lists.newArrayList();
|
||||
|
||||
// handle basic landwalk and snow basic landwalk
|
||||
for (int i = 0; i < LANDWALK_KEYWORDS.length; i++) {
|
||||
final String basic = MagicColor.Constant.BASIC_LANDS.get(i);
|
||||
final String landwalk = LANDWALK_KEYWORDS[i];
|
||||
final String snowwalk = SNOW_LANDWALK_KEYWORDS[i];
|
||||
final String mayBeBlocked = IGNORE_LANDWALK_KEYWORDS[i];
|
||||
|
||||
if (attacker.hasKeyword(landwalk) && !attacker.hasKeyword(mayBeBlocked)) {
|
||||
walkTypes.add(basic);
|
||||
}
|
||||
|
||||
if (attacker.hasKeyword(snowwalk)) {
|
||||
walkTypes.add(basic + ".Snow");
|
||||
}
|
||||
}
|
||||
|
||||
for (final KeywordInterface inst : attacker.getKeywords(Keyword.LANDWALK)) {
|
||||
String keyword = inst.getOriginal();
|
||||
if (keyword.equals("Legendary landwalk")) {
|
||||
walkTypes.add("Land.Legendary");
|
||||
} else if (keyword.equals("Nonbasic landwalk")) {
|
||||
walkTypes.add("Land.nonBasic");
|
||||
} else if (keyword.equals("Artifact landwalk")) {
|
||||
walkTypes.add("Land.Artifact");
|
||||
} else if (keyword.equals("Snow landwalk")) {
|
||||
walkTypes.add("Land.Snow");
|
||||
} else if (keyword.endsWith("walk")) {
|
||||
String landtype = TextUtil.fastReplace(keyword, "walk", "");
|
||||
String valid = landtype;
|
||||
|
||||
// substract Snow type
|
||||
if (landtype.startsWith("Snow ")) {
|
||||
landtype = landtype.substring(5);
|
||||
valid = landtype + ".Snow";
|
||||
}
|
||||
|
||||
// basic land types are handled before
|
||||
if (CardType.isALandType(landtype) && !CardType.isABasicLandType(landtype)) {
|
||||
if (!walkTypes.contains(landtype)) {
|
||||
walkTypes.add(valid);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (walkTypes.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
final String[] valid = walkTypes.toArray(new String[0]);
|
||||
final CardCollectionView defendingLands = defendingPlayer.getCardsIn(ZoneType.Battlefield);
|
||||
for (final Card c : defendingLands) {
|
||||
if (c.isValid(valid, defendingPlayer, attacker, null)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* canBlockAtLeastOne.
|
||||
*
|
||||
@@ -701,7 +591,7 @@ public class CombatUtil {
|
||||
public static boolean canBeBlocked(final Card attacker, final List<Card> blockers, final Combat combat) {
|
||||
int blocks = 0;
|
||||
for (final Card blocker : blockers) {
|
||||
if (canBeBlocked(attacker, blocker.getController()) && canBlock(attacker, blocker)) {
|
||||
if (canBlock(attacker, blocker)) {
|
||||
blocks++;
|
||||
}
|
||||
}
|
||||
@@ -716,7 +606,7 @@ public class CombatUtil {
|
||||
}
|
||||
|
||||
for (final Card blocker : blockers) {
|
||||
if (canBeBlocked(attacker, blocker.getController()) && canBlock(attacker, blocker)) {
|
||||
if (canBlock(attacker, blocker)) {
|
||||
potentialBlockers.add(blocker);
|
||||
}
|
||||
}
|
||||
@@ -1127,11 +1017,6 @@ public class CombatUtil {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isUnblockableFromLandwalk(attacker, blocker.getController())
|
||||
&& !blocker.hasKeyword("CARDNAME can block creatures with landwalk abilities as though they didn't have those abilities.")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// rare case:
|
||||
if (blocker.hasKeyword(Keyword.SHADOW)
|
||||
&& blocker.hasKeyword("CARDNAME can block creatures with shadow as though they didn't have shadow.")) {
|
||||
|
||||
@@ -1,16 +1,6 @@
|
||||
package forge.game.keyword;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public class Hexproof extends KeywordInstance<Hexproof> {
|
||||
private String type = "";
|
||||
|
||||
@Override
|
||||
protected void parse(String details) {
|
||||
if (!details.isEmpty()) {
|
||||
type = details.split(":")[1];
|
||||
}
|
||||
}
|
||||
public class Hexproof extends KeywordWithType {
|
||||
|
||||
@Override
|
||||
protected String formatReminderText(String reminderText) {
|
||||
@@ -19,18 +9,4 @@ public class Hexproof extends KeywordInstance<Hexproof> {
|
||||
}
|
||||
return String.format(reminderText, type);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.game.keyword.KeywordInstance#redundant(java.util.Collection)
|
||||
*/
|
||||
@Override
|
||||
public boolean redundant(Collection<KeywordInterface> list) {
|
||||
for (KeywordInterface i : list) {
|
||||
if (i.getOriginal().equals(getOriginal())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -102,7 +102,7 @@ public enum Keyword {
|
||||
GRAVESTORM("Gravestorm", SimpleKeyword.class, false, "When you cast this spell, copy it for each permanent that was put into a graveyard from the battlefield this turn. If the spell has any targets, you may choose new targets for any of the copies."),
|
||||
HASTE("Haste", SimpleKeyword.class, true, "This creature can attack and {T} as soon as it comes under your control."),
|
||||
HAUNT("Haunt", SimpleKeyword.class, false, "When this is put into a graveyard, exile it haunting target creature."),
|
||||
HEXPROOF("Hexproof", Hexproof.class, false, "This can't be the target of %s spells or abilities your opponents control."),
|
||||
HEXPROOF("Hexproof", Hexproof.class, true, "This can't be the target of %s spells or abilities your opponents control."),
|
||||
HIDEAWAY("Hideaway", KeywordWithAmount.class, false, "When this permanent enters the battlefield, look at the top {%d:card} of your library, exile one face down, then put the rest on the bottom of your library."),
|
||||
HORSEMANSHIP("Horsemanship", SimpleKeyword.class, true, "This creature can't be blocked except by creatures with horsemanship."),
|
||||
IMPROVISE("Improvise", SimpleKeyword.class, true, "Your artifacts can help cast this spell. Each artifact you tap after you're done activating mana abilities pays for {1}."),
|
||||
@@ -112,7 +112,7 @@ public enum Keyword {
|
||||
INTIMIDATE("Intimidate", SimpleKeyword.class, true, "This creature can't be blocked except by artifact creatures and/or creatures that share a color with it."),
|
||||
KICKER("Kicker", Kicker.class, false, "You may pay an additional %s as you cast this spell."),
|
||||
JUMP_START("Jump-start", SimpleKeyword.class, false, "You may cast this card from your graveyard by discarding a card in addition to paying its other costs. Then exile this card."),
|
||||
LANDWALK("Landwalk", KeywordWithType.class, false, "This creature is unblockable as long as defending player controls a %s."),
|
||||
LANDWALK("Landwalk", KeywordWithType.class, true, "This creature is unblockable as long as defending player controls {1:%s}."),
|
||||
LEVEL_UP("Level up", KeywordWithCost.class, false, "%s: Put a level counter on this. Level up only as a sorcery."),
|
||||
LIFELINK("Lifelink", SimpleKeyword.class, true, "Damage dealt by this creature also causes its controller to gain that much life."),
|
||||
LIVING_METAL("Living metal", SimpleKeyword.class, true, "As long as it's your turn, this Vehicle is also a creature."),
|
||||
@@ -141,7 +141,7 @@ public enum Keyword {
|
||||
PHASING("Phasing", SimpleKeyword.class, true, "This phases in or out before you untap during each of your untap steps. While it's phased out, it's treated as though it doesn't exist."),
|
||||
PLOT("Plot", KeywordWithCost.class, false, "You may pay %s and exile this card from your hand. Cast it as a sorcery on a later turn without paying its mana cost. Plot only as a sorvery."),
|
||||
POISONOUS("Poisonous", KeywordWithAmount.class, false, "Whenever this creature deals combat damage to a player, that player gets {%d:poison counter}."),
|
||||
PROTECTION("Protection", Protection.class, false, "This creature can't be blocked, targeted, dealt damage, or equipped/enchanted by %s."),
|
||||
PROTECTION("Protection", Protection.class, true, "This creature can't be blocked, targeted, dealt damage, or equipped/enchanted by %s."),
|
||||
PROTOTYPE("Prototype", KeywordWithCost.class, false, "You may cast this spell with different mana cost, color, and size. It keeps its abilities and types."),
|
||||
PROVOKE("Provoke", SimpleKeyword.class, false, "Whenever this creature attacks, you may have target creature defending player controls untap and block it if able."),
|
||||
PROWESS("Prowess", SimpleKeyword.class, false, "Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn."),
|
||||
@@ -249,21 +249,13 @@ public enum Keyword {
|
||||
int idx = k.indexOf(' ');
|
||||
String enumName = k.replace(" ", "_").toUpperCase(Locale.ROOT);
|
||||
String firstWord = idx == -1 ? enumName : enumName.substring(0, idx);
|
||||
if (firstWord.endsWith("WALK")) {
|
||||
keyword = Keyword.LANDWALK;
|
||||
details = firstWord.substring(0, firstWord.length() - 4);
|
||||
}
|
||||
else if (idx != -1) {
|
||||
if (idx != -1) {
|
||||
idx = k.indexOf(' ', idx + 1);
|
||||
String secondWord = idx == -1 ? enumName.substring(firstWord.length() + 1) : enumName.substring(firstWord.length() + 1, idx);
|
||||
if (secondWord.equalsIgnoreCase("OFFERING")) {
|
||||
keyword = Keyword.OFFERING;
|
||||
details = firstWord;
|
||||
}
|
||||
else if (secondWord.equalsIgnoreCase("LANDWALK")) {
|
||||
keyword = Keyword.LANDWALK;
|
||||
details = firstWord;
|
||||
}
|
||||
}
|
||||
}
|
||||
KeywordInstance<?> inst;
|
||||
|
||||
@@ -303,7 +303,15 @@ public abstract class KeywordInstance<T extends KeywordInstance<?>> implements K
|
||||
*/
|
||||
@Override
|
||||
public boolean redundant(Collection<KeywordInterface> list) {
|
||||
return !list.isEmpty() && keyword.isMultipleRedundant;
|
||||
if (!keyword.isMultipleRedundant) {
|
||||
return false;
|
||||
}
|
||||
for (KeywordInterface i : list) {
|
||||
if (i.getOriginal().equals(getOriginal())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -3,16 +3,21 @@ package forge.game.keyword;
|
||||
import forge.card.CardType;
|
||||
|
||||
public class KeywordWithType extends KeywordInstance<KeywordWithType> {
|
||||
private String type;
|
||||
protected String type;
|
||||
|
||||
@Override
|
||||
protected void parse(String details) {
|
||||
if (CardType.isACardType(details)) {
|
||||
type = details.toLowerCase();
|
||||
} else if (details.contains(":")) {
|
||||
type = details.split(":")[0];
|
||||
if (this.toString().startsWith("Affinity")) {
|
||||
switch (getKeyword()) {
|
||||
case AFFINITY:
|
||||
case HEXPROOF:
|
||||
case LANDWALK:
|
||||
type = details.split(":")[1];
|
||||
break;
|
||||
default:
|
||||
type = details.split(":")[0];
|
||||
}
|
||||
} else {
|
||||
type = details;
|
||||
|
||||
@@ -1,17 +1,6 @@
|
||||
package forge.game.keyword;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public class Trample extends KeywordInstance<Trample> {
|
||||
private String type = "";
|
||||
|
||||
@Override
|
||||
protected void parse(String details) {
|
||||
if (!details.isEmpty()) {
|
||||
type = details.split(":")[0];
|
||||
}
|
||||
}
|
||||
|
||||
public class Trample extends KeywordWithType {
|
||||
@Override
|
||||
protected String formatReminderText(String reminderText) {
|
||||
if (!type.isEmpty()) {
|
||||
@@ -19,17 +8,4 @@ public class Trample extends KeywordInstance<Trample> {
|
||||
}
|
||||
return reminderText;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.game.keyword.KeywordInstance#redundant(java.util.Collection)
|
||||
*/
|
||||
@Override
|
||||
public boolean redundant(Collection<KeywordInterface> list) {
|
||||
for (KeywordInterface i : list) {
|
||||
if (i.getOriginal().equals(getOriginal())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,14 +23,14 @@ public class PlayerFactoryUtil {
|
||||
sbValid.append("| ValidSource$ ").append(k[1]);
|
||||
}
|
||||
|
||||
String effect = "Mode$ CantTarget | Hexproof$ True | ValidPlayer$ Player.You | Secondary$ True "
|
||||
String effect = "Mode$ CantTarget | ValidPlayer$ Player.You | Secondary$ True "
|
||||
+ sbValid.toString() + " | Activator$ Opponent | EffectZone$ Command | Description$ "
|
||||
+ sbDesc.toString() + " (" + inst.getReminderText() + ")";
|
||||
|
||||
final Card card = player.getKeywordCard();
|
||||
inst.addStaticAbility(StaticAbility.create(effect, card, card.getCurrentState(), false));
|
||||
} else if (keyword.equals("Shroud")) {
|
||||
String effect = "Mode$ CantTarget | Shroud$ True | ValidPlayer$ Player.You | Secondary$ True "
|
||||
String effect = "Mode$ CantTarget | ValidPlayer$ Player.You | Secondary$ True "
|
||||
+ "| EffectZone$ Command | Description$ Shroud (" + inst.getReminderText() + ")";
|
||||
|
||||
final Card card = player.getKeywordCard();
|
||||
|
||||
@@ -83,7 +83,7 @@ public class StaticAbilityCantAttackBlock {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (stAb.hasParam("DefenderKeyword")) {
|
||||
if (stAb.isKeyword(Keyword.DEFENDER)) {
|
||||
// check for "can attack as if didn't have defender" static
|
||||
if (StaticAbilityCanAttackDefender.canAttack(card, target)) {
|
||||
return false;
|
||||
@@ -198,6 +198,11 @@ public class StaticAbilityCantAttackBlock {
|
||||
if (blocker == null || !stAb.matchesValidParam("ValidDefender", blocker.getController())) {
|
||||
return false;
|
||||
}
|
||||
if (stAb.isKeyword(Keyword.LANDWALK)) {
|
||||
if (StaticAbilityIgnoreLandwalk.ignoreLandWalk(attacker, blocker, stAb.getKeyword())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -135,11 +135,11 @@ public class StaticAbilityCantTarget {
|
||||
final Card source = spellAbility.getHostCard();
|
||||
final Player activator = spellAbility.getActivatingPlayer();
|
||||
|
||||
if (stAb.hasParam("Hexproof") && StaticAbilityIgnoreHexproofShroud.ignore(entity, spellAbility, Keyword.HEXPROOF)) {
|
||||
if (stAb.isKeyword(Keyword.HEXPROOF) && StaticAbilityIgnoreHexproofShroud.ignore(entity, spellAbility, Keyword.HEXPROOF)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (stAb.hasParam("Shroud") && StaticAbilityIgnoreHexproofShroud.ignore(entity, spellAbility, Keyword.SHROUD)) {
|
||||
if (stAb.isKeyword(Keyword.SHROUD) && StaticAbilityIgnoreHexproofShroud.ignore(entity, spellAbility, Keyword.SHROUD)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
package forge.game.staticability;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.keyword.KeywordInterface;
|
||||
import forge.game.zone.ZoneType;
|
||||
|
||||
public class StaticAbilityIgnoreLandwalk {
|
||||
|
||||
static String MODE = "IgnoreLandWalk";
|
||||
|
||||
public static boolean ignoreLandWalk(Card attacker, Card blocker, KeywordInterface k) {
|
||||
final Game game = attacker.getGame();
|
||||
for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) {
|
||||
for (final StaticAbility stAb : ca.getStaticAbilities()) {
|
||||
if (!stAb.checkConditions(MODE)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ignoreLandWalkAbility(stAb, attacker, blocker, k)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
public static boolean ignoreLandWalkAbility(final StaticAbility stAb, Card attacker, Card blocker, KeywordInterface k) {
|
||||
if (!stAb.matchesValidParam("ValidAttacker", attacker)) {
|
||||
return false;
|
||||
}
|
||||
if (!stAb.matchesValidParam("ValidBlocker", blocker)) {
|
||||
return false;
|
||||
}
|
||||
if (!stAb.matchesValidParam("ValidKeyword", k.getOriginal())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -2,5 +2,5 @@ Name:Anaconda
|
||||
ManaCost:3 G
|
||||
Types:Creature Snake
|
||||
PT:3/3
|
||||
K:Swampwalk
|
||||
K:Landwalk:Swamp
|
||||
Oracle:Swampwalk (This creature can't be blocked as long as defending player controls a Swamp.)
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Anurid Murkdiver
|
||||
ManaCost:4 B B
|
||||
Types:Creature Zombie Frog Beast
|
||||
PT:4/3
|
||||
K:Swampwalk
|
||||
K:Landwalk:Swamp
|
||||
Oracle:Swampwalk (This creature can't be blocked as long as defending player controls a Swamp.)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Name:Aysen Highway
|
||||
ManaCost:3 W W W
|
||||
Types:Enchantment
|
||||
S:Mode$ Continuous | Affected$ Creature.White | AddKeyword$ Plainswalk | Description$ White creatures have plainswalk.
|
||||
S:Mode$ Continuous | Affected$ Creature.White | AddKeyword$ Landwalk:Plains | Description$ White creatures have plainswalk.
|
||||
SVar:NonStackingEffect:True
|
||||
AI:RemoveDeck:Random
|
||||
Oracle:White creatures have plainswalk. (They can't be blocked as long as defending player controls a Plains.)
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Ayumi, the Last Visitor
|
||||
ManaCost:3 G G
|
||||
Types:Legendary Creature Spirit
|
||||
PT:7/3
|
||||
K:Legendary landwalk
|
||||
K:Landwalk:Land.Legendary:Legendary land
|
||||
Oracle:Legendary landwalk (This creature can't be blocked as long as defending player controls a legendary land.)
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:2 R
|
||||
Types:Creature Human Barbarian
|
||||
PT:1/2
|
||||
A:AB$ ChooseType | Cost$ 2 R T | Defined$ You | Type$ Land | SubAbility$ DBPump | StackDescription$ SpellDescription | SpellDescription$ Choose a land type. Target creature you control gains snow landwalk of the chosen type until end of turn.
|
||||
SVar:DBPump:DB$ Pump | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | KW$ Snow ChosenTypewalk | DefinedKW$ ChosenType | StackDescription$ None | SubAbility$ DBDelTrig
|
||||
SVar:DBPump:DB$ Pump | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | KW$ Landwalk:ChosenType.Snow:Snow Chosentype | DefinedKW$ ChosenType | StackDescription$ None | SubAbility$ DBDelTrig
|
||||
SVar:DBDelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | RememberObjects$ ParentTarget | Execute$ TrigReturn | SpellDescription$ Return that creature to its owner's hand at the beginning of the next end step.
|
||||
SVar:TrigReturn:DB$ ChangeZone | Defined$ DelayTriggerRememberedLKI | Origin$ Battlefield | Destination$ Hand
|
||||
AI:RemoveDeck:All
|
||||
|
||||
@@ -3,5 +3,5 @@ ManaCost:1 G
|
||||
Types:Creature Insect
|
||||
PT:1/1
|
||||
K:Flying
|
||||
K:Swampwalk
|
||||
K:Landwalk:Swamp
|
||||
Oracle:Flying; swampwalk (This creature can't be blocked as long as defending player controls a Swamp.)
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Benthic Behemoth
|
||||
ManaCost:5 U U U
|
||||
Types:Creature Serpent
|
||||
PT:7/6
|
||||
K:Islandwalk
|
||||
K:Landwalk:Island
|
||||
Oracle:Islandwalk (This creature can't be blocked as long as defending player controls an Island.)
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Benthic Djinn
|
||||
ManaCost:2 U B
|
||||
Types:Creature Djinn
|
||||
PT:5/3
|
||||
K:Islandwalk
|
||||
K:Landwalk:Island
|
||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigLoseLife | TriggerDescription$ At the beginning of your upkeep, you lose 2 life.
|
||||
SVar:TrigLoseLife:DB$ LoseLife | Defined$ You | LifeAmount$ 2
|
||||
Oracle:Islandwalk (This creature can't be blocked as long as defending player controls an Island.)\nAt the beginning of your upkeep, you lose 2 life.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Blistergrub
|
||||
ManaCost:2 B
|
||||
Types:Creature Phyrexian Horror
|
||||
PT:2/2
|
||||
K:Swampwalk
|
||||
K:Landwalk:Swamp
|
||||
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigLoseLife | TriggerDescription$ When CARDNAME dies, each opponent loses 2 life.
|
||||
SVar:TrigLoseLife:DB$ LoseLife | Defined$ Player.Opponent | LifeAmount$ 2
|
||||
Oracle:Swampwalk (This creature can't be blocked as long as defending player controls a Swamp.)\nWhen Blistergrub dies, each opponent loses 2 life.
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Bog Raiders
|
||||
ManaCost:2 B
|
||||
Types:Creature Zombie
|
||||
PT:2/2
|
||||
K:Swampwalk
|
||||
K:Landwalk:Swamp
|
||||
Oracle:Swampwalk (This creature can't be blocked as long as defending player controls a Swamp.)
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Bog Smugglers
|
||||
ManaCost:1 B B
|
||||
Types:Creature Human Mercenary
|
||||
PT:2/2
|
||||
K:Swampwalk
|
||||
K:Landwalk:Swamp
|
||||
Oracle:Swampwalk (This creature can't be blocked as long as defending player controls a Swamp.)
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Bog-Strider Ash
|
||||
ManaCost:3 G
|
||||
Types:Creature Treefolk Shaman
|
||||
PT:2/4
|
||||
K:Swampwalk
|
||||
K:Landwalk:Swamp
|
||||
T:Mode$ SpellCast | ValidCard$ Goblin | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigGainLife | TriggerDescription$ Whenever a player casts a Goblin spell, you may pay {G}. If you do, you gain 2 life.
|
||||
SVar:TrigGainLife:AB$GainLife | Cost$ G | Defined$ You | LifeAmount$ 2
|
||||
Oracle:Swampwalk (This creature can't be blocked as long as defending player controls a Swamp.)\nWhenever a player casts a Goblin spell, you may pay {G}. If you do, you gain 2 life.
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Bog Tatters
|
||||
ManaCost:4 B
|
||||
Types:Creature Wraith
|
||||
PT:4/2
|
||||
K:Swampwalk
|
||||
K:Landwalk:Swamp
|
||||
Oracle:Swampwalk (This creature can't be blocked as long as defending player controls a Swamp.)
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Bog Wraith
|
||||
ManaCost:3 B
|
||||
Types:Creature Wraith
|
||||
PT:3/3
|
||||
K:Swampwalk
|
||||
K:Landwalk:Swamp
|
||||
Oracle:Swampwalk (This creature can't be blocked as long as defending player controls a Swamp.)
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Boggart Arsonists
|
||||
ManaCost:2 R
|
||||
Types:Creature Goblin Rogue
|
||||
PT:2/1
|
||||
K:Plainswalk
|
||||
K:Landwalk:Plains
|
||||
A:AB$ Destroy | Cost$ 2 R Sac<1/CARDNAME> | ValidTgts$ Scarecrow,Plains | TgtPrompt$ Select target Scarecrow or Plains | SpellDescription$ Destroy target Scarecrow or Plains.
|
||||
AI:RemoveDeck:Random
|
||||
Oracle:Plainswalk (This creature can't be blocked as long as defending player controls a Plains.)\n{2}{R}, Sacrifice Boggart Arsonists: Destroy target Scarecrow or Plains.
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:Boggart Loggers
|
||||
ManaCost:2 B
|
||||
Types:Creature Goblin Rogue
|
||||
PT:2/1
|
||||
K:Forestwalk
|
||||
K:Landwalk:Forest
|
||||
A:AB$ Destroy | Cost$ 2 B Sac<1/CARDNAME> | ValidTgts$ Treefolk,Forest | TgtPrompt$ Select target Treefolk or Forest | SpellDescription$ Destroy target Treefolk or Forest.
|
||||
Oracle:Forestwalk (This creature can't be blocked as long as defending player controls a Forest.)\n{2}{B}, Sacrifice Boggart Loggers: Destroy target Treefolk or Forest.
|
||||
|
||||
@@ -4,5 +4,5 @@ Types:Plane Mars
|
||||
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | Execute$ TrigGoad | TriggerZones$ Command | TriggerDescription$ At the beginning of your end step, goad target creature controlled by the player to your left. (Until your next turn, that creature attacks each combat if able and attacks a player other than you if able.)
|
||||
SVar:TrigGoad:DB$ Goad | ValidTgts$ Creature.ControlledBy NextPlayerToYourLeft | TgtPrompt$ Select target creature controlled by the player to your left
|
||||
T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ TrigPump | TriggerDescription$ Whenever chaos ensues, target creature gains islandwalk until end of turn. (It can't be blocked as long as defending player controls an Island.)
|
||||
SVar:TrigPump:DB$ Pump | ValidTgts$ Creature | KW$ Islandwalk
|
||||
SVar:TrigPump:DB$ Pump | ValidTgts$ Creature | KW$ Landwalk:Island
|
||||
Oracle:At the beginning of your end step, goad target creature controlled by the player to your left. (Until your next turn, that creature attacks each combat if able and attacks a player other than you if able.)\nWhenever chaos ensues, target creature gains islandwalk until end of turn. (It can't be blocked as long as defending player controls an Island.)
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Bull Hippo
|
||||
ManaCost:3 G
|
||||
Types:Creature Hippo
|
||||
PT:3/3
|
||||
K:Islandwalk
|
||||
K:Landwalk:Island
|
||||
Oracle:Islandwalk (This creature can't be blocked as long as defending player controls an Island.)
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:R
|
||||
Types:Enchantment Aura
|
||||
K:Enchant creature
|
||||
A:SP$ Attach | Cost$ R | ValidTgts$ Creature | AILogic$ Pump
|
||||
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Mountainwalk | Description$ Enchanted creature has mountainwalk.
|
||||
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Landwalk:Mountain | Description$ Enchanted creature has mountainwalk.
|
||||
AI:RemoveDeck:Random
|
||||
DeckHas:Keyword$Mountainwalk
|
||||
Oracle:Enchant creature\nEnchanted creature has mountainwalk. (It can't be blocked as long as defending player controls a Mountain.)
|
||||
|
||||
@@ -4,5 +4,5 @@ Types:Creature Merfolk
|
||||
PT:2/3
|
||||
K:ETBReplacement:Other:ChooseLT
|
||||
SVar:ChooseLT:DB$ ChooseType | Defined$ You | AtRandom$ True | Type$ Basic Land | SpellDescription$ As CARDNAME enters the battlefield, choose a land type.
|
||||
S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ ChosenTypewalk | Description$ CARDNAME has landwalk of the chosen type.
|
||||
S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ Landwalk:ChosenType | Description$ CARDNAME has landwalk of the chosen type.
|
||||
Oracle:As Camato Scout enters the battlefield, choose a basic land type at random. Camato Scout has landwalk of the chosen type.
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Canyon Wildcat
|
||||
ManaCost:1 R
|
||||
Types:Creature Cat
|
||||
PT:2/1
|
||||
K:Mountainwalk
|
||||
K:Landwalk:Mountain
|
||||
Oracle:Mountainwalk (This creature can't be blocked as long as defending player controls a Mountain.)
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Cat Warriors
|
||||
ManaCost:1 G G
|
||||
Types:Creature Cat Warrior
|
||||
PT:2/2
|
||||
K:Forestwalk
|
||||
K:Landwalk:Forest
|
||||
Oracle:Forestwalk (This creature can't be blocked as long as defending player controls a Forest.)
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Cateran Slaver
|
||||
ManaCost:4 B B
|
||||
Types:Creature Horror Mercenary
|
||||
PT:5/5
|
||||
K:Swampwalk
|
||||
K:Landwalk:Swamp
|
||||
A:AB$ ChangeZone | Cost$ 5 T | Origin$ Library | Destination$ Battlefield | ChangeType$ Permanent.Mercenary+cmcLE5 | ChangeNum$ 1 | SpellDescription$ Search your library for a Mercenary permanent card with mana value 5 or less, put it onto the battlefield, then shuffle.
|
||||
AI:RemoveDeck:Random
|
||||
Oracle:Swampwalk (This creature can't be blocked as long as defending player controls a Swamp.)\n{5}, {T}: Search your library for a Mercenary permanent card with mana value 5 or less, put it onto the battlefield, then shuffle.
|
||||
|
||||
@@ -3,7 +3,7 @@ ManaCost:1 R R
|
||||
Types:Creature Human
|
||||
PT:1/4
|
||||
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, it gets +1/-2 until end of turn.
|
||||
A:AB$ Pump | Cost$ 1 R R T | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ Mountainwalk | SpellDescription$ Target creature gains mountainwalk until end of turn.
|
||||
A:AB$ Pump | Cost$ 1 R R T | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ Landwalk:Mountain | SpellDescription$ Target creature gains mountainwalk until end of turn.
|
||||
SVar:TrigPump:DB$ Pump | Defined$ Self | NumAtt$ 1 | NumDef$ -2
|
||||
DeckHas:Keyword$Mountainwalk
|
||||
Oracle:Whenever Cave People attacks, it gets +1/-2 until end of turn.\n{1}{R}{R}, {T}: Target creature gains mountainwalk until end of turn. (It can't be blocked as long as defending player controls a Mountain.)
|
||||
|
||||
@@ -3,5 +3,5 @@ ManaCost:1 R
|
||||
Types:Enchantment Aura
|
||||
K:Enchant creature
|
||||
A:SP$ Attach | Cost$ 1 R | ValidTgts$ Creature | AILogic$ Pump
|
||||
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Mountainwalk | Description$ Enchanted creature gets +1/+1 and has mountainwalk.
|
||||
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Landwalk:Mountain | Description$ Enchanted creature gets +1/+1 and has mountainwalk.
|
||||
Oracle:Enchant creature\nEnchanted creature gets +1/+1 and has mountainwalk. (It can't be blocked as long as defending player controls a Mountain.)
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:Cavern Crawler
|
||||
ManaCost:2 R
|
||||
Types:Creature Insect
|
||||
PT:0/3
|
||||
K:Mountainwalk
|
||||
K:Landwalk:Mountain
|
||||
A:AB$ Pump | Cost$ R | Defined$ Self | NumAtt$ +1 | NumDef$ -1 | SpellDescription$ CARDNAME gets +1/-1 until end of turn.
|
||||
Oracle:Mountainwalk (This creature can't be blocked as long as defending player controls a Mountain.)\n{R}: Cavern Crawler gets +1/-1 until end of turn.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Chatterfang, Squirrel General
|
||||
ManaCost:2 G
|
||||
Types:Legendary Creature Squirrel Warrior
|
||||
PT:3/3
|
||||
K:Forestwalk
|
||||
K:Landwalk:Forest
|
||||
R:Event$ CreateToken | ActiveZones$ Battlefield | ValidToken$ Card.YouCtrl | ReplaceWith$ DBReplace | Description$ If one or more tokens would be created under your control, those tokens plus that many 1/1 green Squirrel creature tokens are created instead.
|
||||
SVar:DBReplace:DB$ ReplaceToken | Type$ AddToken | ValidCard$ Card.YouCtrl | TokenScript$ g_1_1_squirrel
|
||||
A:AB$ Pump | Cost$ B Sac<X/Squirrel> | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +X | NumDef$ -X | SpellDescription$ Target creature gets +X/-X until end of turn.
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:Chorus of the Conclave
|
||||
ManaCost:4 G G W W
|
||||
Types:Legendary Creature Dryad
|
||||
PT:3/8
|
||||
K:Forestwalk
|
||||
K:Landwalk:Forest
|
||||
K:As an additional cost to cast creature spells, you may pay any amount of mana. If you do, that creature enters the battlefield with that many additional +1/+1 counters on it.
|
||||
Oracle:Forestwalk (This creature can't be blocked as long as defending player controls a Forest.)\nAs an additional cost to cast creature spells, you may pay any amount of mana. If you do, that creature enters the battlefield with that many additional +1/+1 counters on it.
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Cliff Threader
|
||||
ManaCost:1 W
|
||||
Types:Creature Kor Scout
|
||||
PT:2/1
|
||||
K:Mountainwalk
|
||||
K:Landwalk:Mountain
|
||||
Oracle:Mountainwalk (This creature can't be blocked as long as defending player controls a Mountain.)
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Cold-Eyed Selkie
|
||||
ManaCost:1 GU GU
|
||||
Types:Creature Merfolk Rogue
|
||||
PT:1/1
|
||||
K:Islandwalk
|
||||
K:Landwalk:Island
|
||||
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | Execute$ TrigDraw | CombatDamage$ True | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may draw that many cards.
|
||||
SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ X | OptionalDecider$ You
|
||||
SVar:X:TriggerCount$DamageAmount
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:Colos Yearling
|
||||
ManaCost:2 R
|
||||
Types:Creature Goat Beast
|
||||
PT:1/1
|
||||
K:Mountainwalk
|
||||
K:Landwalk:Mountain
|
||||
A:AB$ Pump | Cost$ R | Defined$ Self | NumAtt$ +1 | SpellDescription$ CARDNAME gets +1/+0 until end of turn.
|
||||
Oracle:Mountainwalk (This creature can't be blocked as long as defending player controls a Mountain.)\n{R}: Colos Yearling gets +1/+0 until end of turn.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Colossal Whale
|
||||
ManaCost:5 U U
|
||||
Types:Creature Whale
|
||||
PT:5/5
|
||||
K:Islandwalk
|
||||
K:Landwalk:Island
|
||||
T:Mode$ Attacks | ValidCard$ Card.Self | OptionalDecider$ You | Execute$ TrigExile | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME attacks, you may exile target creature defending player controls until CARDNAME leaves the battlefield.
|
||||
SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature.DefenderCtrl | TgtPrompt$ Select target creature defending player control | Duration$ UntilHostLeavesPlay
|
||||
SVar:PlayMain1:TRUE
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Name:Crevasse
|
||||
ManaCost:2 R
|
||||
Types:Enchantment
|
||||
S:Mode$ Continuous | Affected$ Creature.withMountainwalk | AddHiddenKeyword$ May be blocked as though it doesn't have Mountainwalk. | Description$ Creatures with mountainwalk can be blocked as though they didn't have mountainwalk.
|
||||
S:Mode$ IgnoreLandWalk | ValidKeyword$ Landwalk:Mountain | Description$ Creatures with mountainwalk can be blocked as though they didn't have mountainwalk.
|
||||
SVar:NonStackingEffect:True
|
||||
AI:RemoveDeck:Random
|
||||
Oracle:Creatures with mountainwalk can be blocked as though they didn't have mountainwalk.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Name:Deadfall
|
||||
ManaCost:2 G
|
||||
Types:Enchantment
|
||||
S:Mode$ Continuous | Affected$ Creature.withForestwalk | AddHiddenKeyword$ May be blocked as though it doesn't have Forestwalk. | Description$ Creatures with forestwalk can be blocked as though they didn't have forestwalk.
|
||||
S:Mode$ IgnoreLandWalk | ValidKeyword$ Landwalk:Forest | Description$ Creatures with forestwalk can be blocked as though they didn't have forestwalk.
|
||||
SVar:NonStackingEffect:True
|
||||
AI:RemoveDeck:Random
|
||||
Oracle:Creatures with forestwalk can be blocked as though they didn't have forestwalk.
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Deeptread Merrow
|
||||
ManaCost:1 U
|
||||
Types:Creature Merfolk Rogue
|
||||
PT:2/1
|
||||
A:AB$ Pump | Cost$ U | Defined$ Self | KW$ Islandwalk | SpellDescription$ CARDNAME gains islandwalk until end of turn. (It can't be blocked as long as defending player controls an Island.)
|
||||
A:AB$ Pump | Cost$ U | Defined$ Self | KW$ Landwalk:Island | SpellDescription$ CARDNAME gains islandwalk until end of turn. (It can't be blocked as long as defending player controls an Island.)
|
||||
Oracle:{U}: Deeptread Merrow gains islandwalk until end of turn. (It can't be blocked as long as defending player controls an Island.)
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:Desert Nomads
|
||||
ManaCost:2 R
|
||||
Types:Creature Human Nomad
|
||||
PT:2/2
|
||||
K:Desertwalk
|
||||
K:Landwalk:Desert
|
||||
R:Event$ DamageDone | Prevent$ True | ValidSource$ Desert | ValidTarget$ Creature.Self | Description$ Prevent all damage that would be dealt to CARDNAME by Deserts.
|
||||
Oracle:Desertwalk\nPrevent all damage that would be dealt to Desert Nomads by Deserts.
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Devouring Deep
|
||||
ManaCost:2 U
|
||||
Types:Creature Fish
|
||||
PT:1/2
|
||||
K:Islandwalk
|
||||
K:Landwalk:Island
|
||||
Oracle:Islandwalk (This creature can't be blocked as long as defending player controls an Island.)
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:Dirtwater Wraith
|
||||
ManaCost:3 B
|
||||
Types:Creature Wraith
|
||||
PT:1/3
|
||||
K:Swampwalk
|
||||
K:Landwalk:Swamp
|
||||
A:AB$ Pump | Cost$ B | Defined$ Self | NumAtt$ +1 | SpellDescription$ CARDNAME gets +1/+0 until end of turn.
|
||||
Oracle:Swampwalk (This creature can't be blocked as long as defending player controls a Swamp.)\n{B}: Dirtwater Wraith gets +1/+0 until end of turn.
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Dryad Sophisticate
|
||||
ManaCost:1 G
|
||||
Types:Creature Dryad
|
||||
PT:2/1
|
||||
K:Nonbasic landwalk
|
||||
K:Landwalk:Land.nonBasic:Nonbasic land
|
||||
Oracle:Nonbasic landwalk (This creature can't be blocked as long as defending player controls a nonbasic land.)
|
||||
|
||||
@@ -3,5 +3,5 @@ ManaCost:G
|
||||
Types:Enchantment Aura
|
||||
K:Enchant creature
|
||||
A:SP$ Attach | Cost$ G | ValidTgts$ Creature | AILogic$ Pump
|
||||
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Forestwalk | Description$ Enchanted creature has forestwalk. (It can't be blocked as long as defending player controls a Forest.)
|
||||
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Landwalk:Forest | Description$ Enchanted creature has forestwalk. (It can't be blocked as long as defending player controls a Forest.)
|
||||
Oracle:Enchant creature\nEnchanted creature has forestwalk. (It can't be blocked as long as defending player controls a Forest.)
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Dwarven Grunt
|
||||
ManaCost:R
|
||||
Types:Creature Dwarf
|
||||
PT:1/1
|
||||
K:Mountainwalk
|
||||
K:Landwalk:Mountain
|
||||
Oracle:Mountainwalk (This creature can't be blocked as long as defending player controls a Mountain.)
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Dwarven Pony
|
||||
ManaCost:R
|
||||
Types:Creature Horse
|
||||
PT:1/1
|
||||
A:AB$ Pump | Cost$ 1 R T | ValidTgts$ Creature.Dwarf | TgtPrompt$ Select target Dwarf creature | KW$ Mountainwalk | SpellDescription$ Target Dwarf creature gains mountainwalk until end of turn. (It can't be blocked as long as defending player controls a Mountain.)
|
||||
A:AB$ Pump | Cost$ 1 R T | ValidTgts$ Creature.Dwarf | TgtPrompt$ Select target Dwarf creature | KW$ Landwalk:Mountain | SpellDescription$ Target Dwarf creature gains mountainwalk until end of turn. (It can't be blocked as long as defending player controls a Mountain.)
|
||||
Oracle:{1}{R}, {T}: Target Dwarf creature gains mountainwalk until end of turn. (It can't be blocked as long as defending player controls a Mountain.)
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Eladamri, Lord of Leaves
|
||||
ManaCost:G G
|
||||
Types:Legendary Creature Elf Warrior
|
||||
PT:2/2
|
||||
S:Mode$ Continuous | Affected$ Creature.Elf+Other | AddKeyword$ Forestwalk | Description$ Other Elf creatures have forestwalk. (They can't be blocked as long as defending player controls a Forest.)
|
||||
S:Mode$ Continuous | Affected$ Creature.Elf+Other | AddKeyword$ Landwalk:Forest | Description$ Other Elf creatures have forestwalk. (They can't be blocked as long as defending player controls a Forest.)
|
||||
S:Mode$ Continuous | Affected$ Card.Elf+Other | AddKeyword$ Shroud | Description$ Other Elves have shroud. (They can't be the targets of spells or abilities.)
|
||||
SVar:PlayMain1:TRUE
|
||||
Oracle:Other Elf creatures have forestwalk. (They can't be blocked as long as defending player controls a Forest.)\nOther Elves have shroud. (They can't be the targets of spells or abilities.)
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Elite Cat Warrior
|
||||
ManaCost:2 G
|
||||
Types:Creature Cat Warrior
|
||||
PT:2/3
|
||||
K:Forestwalk
|
||||
K:Landwalk:Forest
|
||||
Oracle:Forestwalk (This creature can't be blocked as long as defending player controls a Forest.)
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Elvish Champion
|
||||
ManaCost:1 G G
|
||||
Types:Creature Elf
|
||||
PT:2/2
|
||||
S:Mode$ Continuous | Affected$ Creature.Elf+Other | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Forestwalk | Description$ Other Elf creatures get +1/+1 and have forestwalk.
|
||||
S:Mode$ Continuous | Affected$ Creature.Elf+Other | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Landwalk:Forest | Description$ Other Elf creatures get +1/+1 and have forestwalk.
|
||||
SVar:PlayMain1:TRUE
|
||||
SVar:BuffedBy:Elf
|
||||
Oracle:Other Elf creatures get +1/+1 and have forestwalk. (They can't be blocked as long as defending player controls a Forest.)
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:Elvish Pathcutter
|
||||
ManaCost:3 G
|
||||
Types:Creature Elf Scout
|
||||
PT:1/2
|
||||
A:AB$ Pump | Cost$ 2 G | ValidTgts$ Creature.Elf | TgtPrompt$ Select target Elf creature | KW$ Forestwalk | SpellDescription$ Target Elf creature gains forestwalk until end of turn. (It can't be blocked as long as defending player controls a Forest.)
|
||||
A:AB$ Pump | Cost$ 2 G | ValidTgts$ Creature.Elf | TgtPrompt$ Select target Elf creature | KW$ Landwalk:Forest | SpellDescription$ Target Elf creature gains forestwalk until end of turn. (It can't be blocked as long as defending player controls a Forest.)
|
||||
AI:RemoveDeck:Random
|
||||
Oracle:{2}{G}: Target Elf creature gains forestwalk until end of turn. (It can't be blocked as long as defending player controls a Forest.)
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Emerald Oryx
|
||||
ManaCost:3 G
|
||||
Types:Creature Antelope
|
||||
PT:2/3
|
||||
K:Forestwalk
|
||||
K:Landwalk:Forest
|
||||
Oracle:Forestwalk (This creature can't be blocked as long as defending player controls a Forest.)
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Enclave Elite
|
||||
ManaCost:2 U
|
||||
Types:Creature Merfolk Soldier
|
||||
PT:2/2
|
||||
K:Islandwalk
|
||||
K:Landwalk:Island
|
||||
K:Multikicker:1 U
|
||||
K:etbCounter:P1P1:XKicked:no condition:CARDNAME enters the battlefield with a +1/+1 counter on it for each time it was kicked.
|
||||
SVar:XKicked:Count$TimesKicked
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Enslaved Scout
|
||||
ManaCost:2 R
|
||||
Types:Creature Goblin Scout
|
||||
PT:2/2
|
||||
A:AB$ Pump | Cost$ 2 | Defined$ Self | KW$ Mountainwalk | SpellDescription$ Enslaved Scout gains mountainwalk until end of turn.
|
||||
A:AB$ Pump | Cost$ 2 | Defined$ Self | KW$ Landwalk:Mountain | SpellDescription$ Enslaved Scout gains mountainwalk until end of turn.
|
||||
Oracle:{2}: Enslaved Scout gains mountainwalk until end of turn. (It can't be blocked as long as defending player controls a Mountain.)
|
||||
|
||||
@@ -3,6 +3,6 @@ ManaCost:3 G
|
||||
Types:Creature Djinn
|
||||
PT:4/5
|
||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ At the beginning of your upkeep, target non-Wall creature an opponent controls gains forestwalk until your next upkeep. (It can't be blocked as long as defending player controls a Forest.)
|
||||
SVar:TrigPump:DB$ Pump | ValidTgts$ Creature.nonWall+OppCtrl | TgtPrompt$ Select target non-Wall creature an opponent controls | KW$ Forestwalk | Duration$ UntilYourNextUpkeep
|
||||
SVar:TrigPump:DB$ Pump | ValidTgts$ Creature.nonWall+OppCtrl | TgtPrompt$ Select target non-Wall creature an opponent controls | KW$ Landwalk:Forest | Duration$ UntilYourNextUpkeep
|
||||
DeckHas:Ability$Forestwalk
|
||||
Oracle:At the beginning of your upkeep, target non-Wall creature an opponent controls gains forestwalk until your next upkeep. (It can't be blocked as long as defending player controls a Forest.)
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Farbog Explorer
|
||||
ManaCost:2 W
|
||||
Types:Creature Human Scout
|
||||
PT:2/3
|
||||
K:Swampwalk
|
||||
K:Landwalk:Swamp
|
||||
Oracle:Swampwalk (This creature can't be blocked as long as defending player controls a Swamp.)
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:Filth
|
||||
ManaCost:3 B
|
||||
Types:Creature Incarnation
|
||||
PT:2/2
|
||||
K:Swampwalk
|
||||
S:Mode$ Continuous | Affected$ Creature.YouCtrl | EffectZone$ Graveyard | AddKeyword$ Swampwalk | IsPresent$ Swamp.YouCtrl | Description$ As long as CARDNAME is in your graveyard and you control a Swamp, creatures you control have swampwalk.
|
||||
K:Landwalk:Swamp
|
||||
S:Mode$ Continuous | Affected$ Creature.YouCtrl | EffectZone$ Graveyard | AddKeyword$ Landwalk:Swamp | IsPresent$ Swamp.YouCtrl | Description$ As long as CARDNAME is in your graveyard and you control a Swamp, creatures you control have swampwalk.
|
||||
Oracle:Swampwalk (This creature can't be blocked as long as defending player controls a Swamp.)\nAs long as Filth is in your graveyard and you control a Swamp, creatures you control have swampwalk.
|
||||
|
||||
@@ -3,6 +3,6 @@ ManaCost:1 U
|
||||
Types:Enchantment Aura
|
||||
K:Enchant creature
|
||||
A:SP$ Attach | Cost$ 1 U | ValidTgts$ Creature | AILogic$ Pump
|
||||
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Islandwalk | Description$ Enchanted creature has islandwalk. (It can't be blocked as long as defending player controls an Island.)
|
||||
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Landwalk:Island | Description$ Enchanted creature has islandwalk. (It can't be blocked as long as defending player controls an Island.)
|
||||
DeckHas:Keyword$Islandwalk
|
||||
Oracle:Enchant creature (Target a creature as you cast this. This card enters the battlefield attached to that creature.)\nEnchanted creature has islandwalk. (It can't be blocked as long as defending player controls an Island.)
|
||||
|
||||
@@ -4,5 +4,5 @@ Types:Instant
|
||||
A:SP$ Charm | Cost$ B | Choices$ DBDiscard,DBPump,DBPump2
|
||||
SVar:DBDiscard:DB$ Discard | ValidTgts$ Player | TgtPrompt$ Choose a player | NumCards$ 1 | Mode$ TgtChoose | SpellDescription$ Target player discards a card.
|
||||
SVar:DBPump:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +2 | NumDef$ -1 | SpellDescription$ Target creature gets +2/-1 until end of turn.
|
||||
SVar:DBPump2:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ Swampwalk | SpellDescription$ Target creature gains swampwalk until end of turn.
|
||||
SVar:DBPump2:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ Landwalk:Swamp | SpellDescription$ Target creature gains swampwalk until end of turn.
|
||||
Oracle:Choose one —\n• Target player discards a card.\n• Target creature gets +2/-1 until end of turn.\n• Target creature gains swampwalk until end of turn. (It can't be blocked as long as defending player controls a Swamp.)
|
||||
|
||||
@@ -4,6 +4,6 @@ Types:Creature Slug
|
||||
PT:1/1
|
||||
A:AB$ DelayedTrigger | Cost$ 5 | Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ ChooseB | RememberObjects$ Self | StackDescription$ SpellDescription | SpellDescription$ At the beginning of your next upkeep, choose a basic land type. CARDNAME gains landwalk of the chosen type until the end of that turn. (It can't be blocked as long as defending player controls a land of that type.)
|
||||
SVar:ChooseB:DB$ ChooseType | Defined$ You | Type$ Basic Land | AILogic$ ChosenLandwalk | SubAbility$ DBPump
|
||||
SVar:DBPump:DB$ Pump | Defined$ DelayTriggerRememberedLKI | KW$ ChosenTypewalk | DefinedKW$ ChosenType
|
||||
SVar:DBPump:DB$ Pump | Defined$ DelayTriggerRememberedLKI | KW$ Landwalk:ChosenType | DefinedKW$ ChosenType
|
||||
AI:RemoveDeck:All
|
||||
Oracle:{5}: At the beginning of your next upkeep, choose a basic land type. Giant Slug gains landwalk of the chosen type until the end of that turn. (It can't be blocked as long as defending player controls a land of that type.)
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Glissa's Courier
|
||||
ManaCost:1 G G
|
||||
Types:Creature Phyrexian Horror
|
||||
PT:2/3
|
||||
K:Mountainwalk
|
||||
K:Landwalk:Mountain
|
||||
Oracle:Mountainwalk (This creature can't be blocked as long as defending player controls a Mountain.)
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Goblin Flotilla
|
||||
ManaCost:2 R
|
||||
Types:Creature Goblin
|
||||
PT:2/2
|
||||
K:Islandwalk
|
||||
K:Landwalk:Island
|
||||
T:Mode$ Phase | Phase$ BeginCombat | TriggerZones$ Battlefield | Execute$ AnimateDB | TriggerDescription$ At the beginning of each combat, unless you pay {R}, whenever CARDNAME blocks or becomes blocked by a creature this combat, that creature gains first strike until end of turn.
|
||||
SVar:AnimateDB:DB$ Effect | Triggers$ AttackerBlocked,Blocks | UnlessCost$ R | UnlessPayer$ You | Duration$ UntilEndOfCombat
|
||||
SVar:AttackerBlocked:Mode$ AttackerBlockedByCreature | ValidCard$ Creature | ValidBlocker$ Card.EffectSource | Execute$ PumpAttacker | TriggerDescription$ Whenever EFFECTSOURCE blocks or becomes blocked by a creature this combat, that creature gains first strike until end of turn.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Goblin King
|
||||
ManaCost:1 R R
|
||||
Types:Creature Goblin
|
||||
PT:2/2
|
||||
S:Mode$ Continuous | Affected$ Creature.Goblin+Other | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Mountainwalk | Description$ Other Goblin creatures get +1/+1 and have mountainwalk.
|
||||
S:Mode$ Continuous | Affected$ Creature.Goblin+Other | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Landwalk:Mountain | Description$ Other Goblin creatures get +1/+1 and have mountainwalk.
|
||||
SVar:PlayMain1:TRUE
|
||||
DeckHas:Keyword$Mountainwalk
|
||||
DeckHints:Type$Goblin & Name$Blood Moon
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Goblin Mountaineer
|
||||
ManaCost:R
|
||||
Types:Creature Goblin Scout
|
||||
PT:1/1
|
||||
K:Mountainwalk
|
||||
K:Landwalk:Mountain
|
||||
Oracle:Mountainwalk (This creature can't be blocked as long as defending player controls a Mountain.)
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Goblin Spelunkers
|
||||
ManaCost:2 R
|
||||
Types:Creature Goblin Warrior
|
||||
PT:2/2
|
||||
K:Mountainwalk
|
||||
K:Landwalk:Mountain
|
||||
Oracle:Mountainwalk (This creature can't be blocked as long as defending player controls a Mountain.)
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Goblins of the Flarg
|
||||
ManaCost:R
|
||||
Types:Creature Goblin Warrior
|
||||
PT:1/1
|
||||
K:Mountainwalk
|
||||
K:Landwalk:Mountain
|
||||
T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Dwarf.YouCtrl | PresentCompare$ GE1 | Execute$ TrigSac | TriggerDescription$ When you control a Dwarf, sacrifice CARDNAME.
|
||||
SVar:TrigSac:DB$ Sacrifice
|
||||
SVar:NeedsToPlayVar:DwarfsYouCtrl EQ0
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:Gosta Dirk
|
||||
ManaCost:3 W W U U
|
||||
Types:Legendary Creature Human Warrior
|
||||
PT:4/4
|
||||
S:Mode$ Continuous | Affected$ Creature.withIslandwalk | AddHiddenKeyword$ May be blocked as though it doesn't have Islandwalk. | Description$ Creatures with islandwalk can be blocked as though they didn't have islandwalk.
|
||||
S:Mode$ IgnoreLandWalk | ValidKeyword$ Landwalk:Island | Description$ Creatures with islandwalk can be blocked as though they didn't have islandwalk.
|
||||
K:First Strike
|
||||
Oracle:First strike\nCreatures with islandwalk can be blocked as though they didn't have islandwalk.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Graceful Antelope
|
||||
ManaCost:2 W W
|
||||
Types:Creature Antelope
|
||||
PT:1/4
|
||||
K:Plainswalk
|
||||
K:Landwalk:Plains
|
||||
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 | Duration$ UntilHostLeavesPlay | Types$ Plains | RemoveLandTypes$ True | RemoveIntrinsicAbilities$ True
|
||||
AI:RemoveDeck:All
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Grayscaled Gharial
|
||||
ManaCost:U
|
||||
Types:Creature Crocodile
|
||||
PT:1/1
|
||||
K:Islandwalk
|
||||
K:Landwalk:Island
|
||||
Oracle:Islandwalk (This creature can't be blocked as long as defending player controls an Island.)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Name:Great Wall
|
||||
ManaCost:2 W
|
||||
Types:Enchantment
|
||||
S:Mode$ Continuous | Affected$ Creature.withPlainswalk | AddHiddenKeyword$ May be blocked as though it doesn't have Plainswalk. | Description$ Creatures with plainswalk can be blocked as though they didn't have plainswalk.
|
||||
S:Mode$ IgnoreLandWalk | ValidKeyword$ Landwalk:Plains | Description$ Creatures with plainswalk can be blocked as though they didn't have plainswalk.
|
||||
SVar:NonStackingEffect:True
|
||||
AI:RemoveDeck:Random
|
||||
Oracle:Creatures with plainswalk can be blocked as though they didn't have plainswalk.
|
||||
|
||||
@@ -5,5 +5,5 @@ PT:0/3
|
||||
K:Level up:2
|
||||
SVar:maxLevel:5
|
||||
S:Mode$ Continuous | Affected$ Card.Self | SetPower$ 0 | SetToughness$ 6 | IsPresent$ Card.Self+counters_GE1_LEVEL+counters_LE4_LEVEL | Description$ LEVEL 1-4 0/6
|
||||
S:Mode$ Continuous | Affected$ Card.Self | SetPower$ 6 | SetToughness$ 6 | AddKeyword$ Islandwalk | IsPresent$ Card.Self+counters_GE5_LEVEL | Description$ LEVEL 5+ 6/6 Islandwalk
|
||||
S:Mode$ Continuous | Affected$ Card.Self | SetPower$ 6 | SetToughness$ 6 | AddKeyword$ Landwalk:Island | IsPresent$ Card.Self+counters_GE5_LEVEL | Description$ LEVEL 5+ 6/6 Islandwalk
|
||||
Oracle:Level up {2} ({2}: Put a level counter on this. Level up only as a sorcery.)\nLEVEL 1-4\n0/6\nLEVEL 5+\n6/6\nIslandwalk (This creature can't be blocked as long as defending player controls an Island.)
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Harbor Serpent
|
||||
ManaCost:4 U U
|
||||
Types:Creature Serpent
|
||||
PT:5/5
|
||||
K:Islandwalk
|
||||
K:Landwalk:Island
|
||||
S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ CARDNAME can't attack. | IsPresent$ Island | PresentCompare$ LT5 | Description$ CARDNAME can't attack unless there are five or more Islands on the battlefield.
|
||||
SVar:BuffedBy:Island
|
||||
Oracle:Islandwalk (This creature can't be blocked as long as defending player controls an Island.)\nHarbor Serpent can't attack unless there are five or more Islands on the battlefield.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Hazezon, Shaper of Sand
|
||||
ManaCost:R G W
|
||||
Types:Legendary Creature Human Warrior
|
||||
PT:3/3
|
||||
K:Desertwalk
|
||||
K:Landwalk:Desert
|
||||
S:Mode$ Continuous | Affected$ Desert.YouOwn | MayPlay$ True | AffectedZone$ Graveyard | Description$ You may play Desert lands from your graveyard
|
||||
T:Mode$ ChangesZone | ValidCard$ Desert.YouCtrl | Origin$ Any | Destination$ Battlefield | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever a Desert enters the battlefield under your control, create two 1/1 red, green, and white Sand Warrior creature tokens.
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 2 | TokenScript$ rgw_1_1_sand_warrior | TokenOwner$ You
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Heartwood Treefolk
|
||||
ManaCost:2 G G
|
||||
Types:Creature Treefolk
|
||||
PT:3/4
|
||||
K:Forestwalk
|
||||
K:Landwalk:Forest
|
||||
Oracle:Forestwalk (This creature can't be blocked as long as defending player controls a Forest.)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Name:Hidden Path
|
||||
ManaCost:2 G G G G
|
||||
Types:Enchantment
|
||||
S:Mode$ Continuous | Affected$ Creature.Green | AddKeyword$ Forestwalk | Description$ Green creatures have forestwalk. (They can't be blocked as long as defending player controls a Forest.)
|
||||
S:Mode$ Continuous | Affected$ Creature.Green | AddKeyword$ Landwalk:Forest | Description$ Green creatures have forestwalk. (They can't be blocked as long as defending player controls a Forest.)
|
||||
SVar:NonStackingEffect:True
|
||||
SVar:NeedsToPlayVar:CountOpps LTCountMe
|
||||
SVar:CountOpps:Count$Valid Creature.OppCtrl+Green
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Hillcomber Giant
|
||||
ManaCost:2 W W
|
||||
Types:Creature Giant Scout
|
||||
PT:3/3
|
||||
K:Mountainwalk
|
||||
K:Landwalk:Mountain
|
||||
Oracle:Mountainwalk (This creature can't be blocked as long as defending player controls a Mountain.)
|
||||
|
||||
@@ -5,5 +5,5 @@ PT:2/2
|
||||
K:Cumulative upkeep:U
|
||||
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigCL | TriggerDescription$ At the beginning of your upkeep, choose a land type. CARDNAME gains landwalk of the chosen type until end of turn. (It can't be blocked as long as defending player controls a land of that type.)
|
||||
SVar:TrigCL:DB$ ChooseType | Defined$ You | Type$ Land | AILogic$ ChosenLandwalk | SubAbility$ DBPump
|
||||
SVar:DBPump:DB$ Pump | KW$ ChosenTypewalk | Defined$ Self | DefinedKW$ ChosenType
|
||||
SVar:DBPump:DB$ Pump | KW$ Landwalk:ChosenType | Defined$ Self | DefinedKW$ ChosenType
|
||||
Oracle:Cumulative upkeep {U} (At the beginning of your upkeep, put an age counter on this permanent, then sacrifice it unless you pay its upkeep cost for each age counter on it.)\nAt the beginning of your upkeep, choose a land type. Illusionary Presence gains landwalk of the chosen type until end of turn. (It can't be blocked as long as defending player controls a land of that type.)
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Inkfathom Divers
|
||||
ManaCost:3 U U
|
||||
Types:Creature Merfolk Soldier
|
||||
PT:3/3
|
||||
K:Islandwalk
|
||||
K:Landwalk:Island
|
||||
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigRearrange | TriggerDescription$ When CARDNAME enters the battlefield, look at the top four cards of your library, then put them back in any order.
|
||||
SVar:TrigRearrange:DB$ RearrangeTopOfLibrary | Defined$ You | NumCards$ 4
|
||||
Oracle:Islandwalk (This creature can't be blocked as long as defending player controls an Island.)\nWhen Inkfathom Divers enters the battlefield, look at the top four cards of your library, then put them back in any order.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Inkwell Leviathan
|
||||
ManaCost:7 U U
|
||||
Types:Artifact Creature Leviathan
|
||||
PT:7/11
|
||||
K:Islandwalk
|
||||
K:Landwalk:Island
|
||||
K:Trample
|
||||
K:Shroud
|
||||
Oracle:Trample\nIslandwalk (This creature can't be blocked as long as defending player controls an Island.)\nShroud (This creature can't be the target of spells or abilities.)
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Ivy Dancer
|
||||
ManaCost:2 G
|
||||
Types:Creature Dryad Shaman
|
||||
PT:1/2
|
||||
A:AB$ Pump | Cost$ T | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ Forestwalk | SpellDescription$ Target creature gains forestwalk until end of turn. (It can't be blocked as long as defending player controls a Forest.)
|
||||
A:AB$ Pump | Cost$ T | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ Landwalk:Forest | SpellDescription$ Target creature gains forestwalk until end of turn. (It can't be blocked as long as defending player controls a Forest.)
|
||||
Oracle:{T}: Target creature gains forestwalk until end of turn. (It can't be blocked as long as defending player controls a Forest.)
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Jedit Ojanen of Efrava
|
||||
ManaCost:3 G G G
|
||||
Types:Legendary Creature Cat Warrior
|
||||
PT:5/5
|
||||
K:Forestwalk
|
||||
K:Landwalk:Forest
|
||||
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ Whenever CARDNAME attacks or blocks, create a 2/2 green Cat Warrior creature token with forestwalk.
|
||||
T:Mode$ Blocks | ValidCard$ Card.Self | Execute$ TrigToken | Secondary$ True | TriggerDescription$ Whenever CARDNAME attacks or blocks, create a 2/2 green Cat Warrior creature token with forestwalk.
|
||||
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenOwner$ You | TokenScript$ g_2_2_cat_warrior_forestwalk
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Jukai Messenger
|
||||
ManaCost:G
|
||||
Types:Creature Human Monk
|
||||
PT:1/1
|
||||
K:Forestwalk
|
||||
K:Landwalk:Forest
|
||||
Oracle:Forestwalk (This creature can't be blocked as long as defending player controls a Forest.)
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Koth's Courier
|
||||
ManaCost:1 R R
|
||||
Types:Creature Human Rogue
|
||||
PT:2/3
|
||||
K:Forestwalk
|
||||
K:Landwalk:Forest
|
||||
Oracle:Forestwalk (This creature can't be blocked as long as defending player controls a Forest.)
|
||||
|
||||
@@ -2,6 +2,6 @@ Name:Krosan Constrictor
|
||||
ManaCost:3 G
|
||||
Types:Creature Snake
|
||||
PT:2/2
|
||||
K:Swampwalk
|
||||
K:Landwalk:Swamp
|
||||
A:AB$ Pump | Cost$ T | NumAtt$ -2 | IsCurse$ True | TgtPrompt$ Choose target Black creature | ValidTgts$ Creature.Black | SpellDescription$ Target black creature gets -2/-0 until end of turn.
|
||||
Oracle:Swampwalk (This creature can't be blocked as long as defending player controls a Swamp.)\n{T}: Target black creature gets -2/-0 until end of turn.
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Leaf Dancer
|
||||
ManaCost:1 G G
|
||||
Types:Creature Centaur
|
||||
PT:2/2
|
||||
K:Forestwalk
|
||||
K:Landwalk:Forest
|
||||
Oracle:Forestwalk (This creature can't be blocked as long as defending player controls a Forest.)
|
||||
|
||||
@@ -2,5 +2,5 @@ Name:Legions of Lim-Dûl
|
||||
ManaCost:1 B B
|
||||
Types:Creature Zombie
|
||||
PT:2/3
|
||||
K:Snow swampwalk
|
||||
K:Landwalk:Swamp.Snow:snow Swamp
|
||||
Oracle:Snow swampwalk (This creature can't be blocked as long as defending player controls a snow Swamp.)
|
||||
|
||||
@@ -3,5 +3,5 @@ ManaCost:B
|
||||
Types:Enchantment Aura
|
||||
K:Enchant creature
|
||||
A:SP$ Attach | Cost$ B | ValidTgts$ Creature | AILogic$ Pump
|
||||
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Swampwalk | Description$ Enchanted creature has swampwalk. (It can't be blocked as long as defending player controls a Swamp.)
|
||||
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Landwalk:Swamp | Description$ Enchanted creature has swampwalk. (It can't be blocked as long as defending player controls a Swamp.)
|
||||
Oracle:Enchant creature\nEnchanted creature has swampwalk. (It can't be blocked as long as defending player controls a Swamp.)
|
||||
|
||||
@@ -3,5 +3,5 @@ ManaCost:2 R R G G
|
||||
Types:Legendary Creature Human Warrior
|
||||
PT:4/4
|
||||
K:First Strike
|
||||
K:Legendary landwalk
|
||||
K:Landwalk:Land.Legendary:Legendary land
|
||||
Oracle:First strike; legendary landwalk (This creature can't be blocked as long as defending player controls a legendary land.)
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Lord Magnus
|
||||
ManaCost:3 G W W
|
||||
Types:Legendary Creature Human Druid
|
||||
PT:4/3
|
||||
S:Mode$ Continuous | Affected$ Creature.withPlainswalk | AddHiddenKeyword$ May be blocked as though it doesn't have Plainswalk. | Description$ Creatures with plainswalk can be blocked as though they didn't have plainswalk.
|
||||
S:Mode$ Continuous | Affected$ Creature.withForestwalk | AddHiddenKeyword$ May be blocked as though it doesn't have Forestwalk. | Description$ Creatures with forestwalk can be blocked as though they didn't have forestwalk.
|
||||
S:Mode$ IgnoreLandWalk | ValidKeyword$ Landwalk:Plains | Description$ Creatures with plainswalk can be blocked as though they didn't have plainswalk.
|
||||
S:Mode$ IgnoreLandWalk | ValidKeyword$ Landwalk:Forest | Description$ Creatures with forestwalk can be blocked as though they didn't have forestwalk.
|
||||
K:First Strike
|
||||
Oracle:First strike\nCreatures with plainswalk can be blocked as though they didn't have plainswalk.\nCreatures with forestwalk can be blocked as though they didn't have forestwalk.
|
||||
|
||||
@@ -2,7 +2,7 @@ Name:Lord of Atlantis
|
||||
ManaCost:U U
|
||||
Types:Creature Merfolk
|
||||
PT:2/2
|
||||
S:Mode$ Continuous | Affected$ Card.Merfolk+Other | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Islandwalk | Description$ Other Merfolk get +1/+1 and have islandwalk. (They can't be blocked as long as defending player controls an Island.)
|
||||
S:Mode$ Continuous | Affected$ Card.Merfolk+Other | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Landwalk:Island | Description$ Other Merfolk get +1/+1 and have islandwalk. (They can't be blocked as long as defending player controls an Island.)
|
||||
SVar:PlayMain1:TRUE
|
||||
DeckHas:Keyword$Islandwalk
|
||||
DeckHints:Type$Merfolk
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user