CantTarget: return the StaticAbility

This commit is contained in:
Hans Mackowiak
2025-09-07 10:03:53 +02:00
parent 4b0337a836
commit 71676a2781
33 changed files with 59 additions and 104 deletions

View File

@@ -7157,7 +7157,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars, ITr
return false; return false;
} }
if (StaticAbilityCantTarget.cantTarget(this, sa)) { if (StaticAbilityCantTarget.cantTarget(this, sa) != null) {
return false; return false;
} }

View File

@@ -4112,7 +4112,7 @@ public class CardFactoryUtil {
sbValid.append("| ").append(param).append(k[1]); sbValid.append("| ").append(param).append(k[1]);
} }
String effect = "Mode$ CantTarget | ValidCard$ Card.Self | Secondary$ True" String effect = "Mode$ CantTarget | ValidTarget$ Card.Self | Secondary$ True"
+ sbValid.toString() + " | Activator$ Opponent | Description$ " + sbValid.toString() + " | Activator$ Opponent | Description$ "
+ sbDesc.toString() + " (" + inst.getReminderText() + ")"; + sbDesc.toString() + " (" + inst.getReminderText() + ")";
inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic)); inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic));
@@ -4153,7 +4153,7 @@ public class CardFactoryUtil {
inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic)); inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic));
// Target // Target
effect = "Mode$ CantTarget | ValidCard$ Card.Self | Secondary$ True "; effect = "Mode$ CantTarget | ValidTarget$ Card.Self | Secondary$ True ";
if (!valid.isEmpty()) { if (!valid.isEmpty()) {
effect += "| ValidSource$ " + valid; effect += "| ValidSource$ " + valid;
} }
@@ -4182,7 +4182,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."; " | 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)); inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic));
} else if (keyword.equals("Shroud")) { } else if (keyword.equals("Shroud")) {
String effect = "Mode$ CantTarget | ValidCard$ Card.Self | Secondary$ True" String effect = "Mode$ CantTarget | ValidTarget$ Card.Self | Secondary$ True"
+ " | Description$ Shroud (" + inst.getReminderText() + ")"; + " | Description$ Shroud (" + inst.getReminderText() + ")";
inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic)); inst.addStaticAbility(StaticAbility.create(effect, state.getCard(), state, intrinsic));
} else if (keyword.equals("Skulk")) { } else if (keyword.equals("Skulk")) {

View File

@@ -1084,7 +1084,7 @@ public class Player extends GameEntity implements Comparable<Player> {
} }
// CantTarget static abilities // CantTarget static abilities
if (StaticAbilityCantTarget.cantTarget(this, sa)) { if (StaticAbilityCantTarget.cantTarget(this, sa) != null) {
return false; return false;
} }

View File

@@ -23,21 +23,21 @@ public class PlayerFactoryUtil {
sbValid.append("| ValidSource$ ").append(k[1]); sbValid.append("| ValidSource$ ").append(k[1]);
} }
String effect = "Mode$ CantTarget | ValidPlayer$ Player.You | Secondary$ True " String effect = "Mode$ CantTarget | ValidTarget$ Player.You | Secondary$ True "
+ sbValid.toString() + " | Activator$ Opponent | EffectZone$ Command | Description$ " + sbValid.toString() + " | Activator$ Opponent | EffectZone$ Command | Description$ "
+ sbDesc.toString() + " (" + inst.getReminderText() + ")"; + sbDesc.toString() + " (" + inst.getReminderText() + ")";
final Card card = player.getKeywordCard(); final Card card = player.getKeywordCard();
inst.addStaticAbility(StaticAbility.create(effect, card, card.getCurrentState(), false)); inst.addStaticAbility(StaticAbility.create(effect, card, card.getCurrentState(), false));
} else if (keyword.equals("Shroud")) { } else if (keyword.equals("Shroud")) {
String effect = "Mode$ CantTarget | ValidPlayer$ Player.You | Secondary$ True " String effect = "Mode$ CantTarget | ValidTarget$ Player.You | Secondary$ True "
+ "| EffectZone$ Command | Description$ Shroud (" + inst.getReminderText() + ")"; + "| EffectZone$ Command | Description$ Shroud (" + inst.getReminderText() + ")";
final Card card = player.getKeywordCard(); final Card card = player.getKeywordCard();
inst.addStaticAbility(StaticAbility.create(effect, card, card.getCurrentState(), false)); inst.addStaticAbility(StaticAbility.create(effect, card, card.getCurrentState(), false));
} else if (keyword.startsWith("Protection")) { } else if (keyword.startsWith("Protection")) {
String valid = CardFactoryUtil.getProtectionValid(keyword, false); String valid = CardFactoryUtil.getProtectionValid(keyword, false);
String effect = "Mode$ CantTarget | ValidPlayer$ Player.You | EffectZone$ Command | Secondary$ True "; String effect = "Mode$ CantTarget | ValidTarget$ Player.You | EffectZone$ Command | Secondary$ True ";
if (!valid.isEmpty()) { if (!valid.isEmpty()) {
effect += "| ValidSource$ " + valid; effect += "| ValidSource$ " + valid;
} }

View File

@@ -39,36 +39,20 @@ public class StaticAbilityCantTarget {
static String MODE = "CantTarget"; static String MODE = "CantTarget";
public static boolean cantTarget(final Card card, final SpellAbility spellAbility) { public static StaticAbility cantTarget(final GameEntity entity, final SpellAbility spellAbility) {
final Game game = card.getGame(); final Game game = entity.getGame();
for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) {
for (final StaticAbility stAb : ca.getStaticAbilities()) { for (final StaticAbility stAb : ca.getStaticAbilities()) {
if (!stAb.checkConditions(StaticAbilityMode.CantTarget)) { if (!stAb.checkConditions(StaticAbilityMode.CantTarget)) {
continue; continue;
} }
if (applyCantTargetAbility(stAb, card, spellAbility)) { if (applyCantTargetAbility(stAb, entity, spellAbility)) {
return true; return stAb;
} }
} }
} }
return false; return null;
}
public static boolean cantTarget(final Player player, final SpellAbility spellAbility) {
final Game game = player.getGame();
for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) {
for (final StaticAbility stAb : ca.getStaticAbilities()) {
if (!stAb.checkConditions(StaticAbilityMode.CantTarget)) {
continue;
}
if (applyCantTargetAbility(stAb, player, spellAbility)) {
return true;
}
}
}
return false;
} }
/** /**
@@ -82,57 +66,25 @@ public class StaticAbilityCantTarget {
* the spell/ability * the spell/ability
* @return true, if successful * @return true, if successful
*/ */
public static boolean applyCantTargetAbility(final StaticAbility stAb, final Card card, final SpellAbility spellAbility) { public static boolean applyCantTargetAbility(final StaticAbility stAb, final GameEntity entity, final SpellAbility spellAbility) {
if (stAb.hasParam("ValidPlayer")) { if (entity instanceof Card card) {
return false; if (stAb.hasParam("AffectedZone")) {
} if (ZoneType.listValueOf(stAb.getParam("AffectedZone")).stream().noneMatch(zt -> card.isInZone(zt))) {
return false;
}
} else if (!card.isInPlay()) { // default zone is battlefield
return false;
}
Set<ZoneType> zones = stAb.getActiveZone();
if (stAb.hasParam("AffectedZone")) { if (zones != null && zones.contains(ZoneType.Stack)) {
boolean inZone = false; // Enthralling Hold: only works if it wasn't already cast
for (final ZoneType zt : ZoneType.listValueOf(stAb.getParam("AffectedZone"))) { if (card.getGame().getStack().getSpellMatchingHost(spellAbility.getHostCard()) != null) {
if (card.isInZone(zt)) { return false;
inZone = true;
break;
} }
} }
if (!inZone) {
return false;
}
} else { // default zone is battlefield
if (!card.isInPlay()) {
return false;
}
}
Set<ZoneType> zones = stAb.getActiveZone();
if (zones != null && zones.contains(ZoneType.Stack)) {
// Enthralling Hold: only works if it wasn't already cast
if (card.getGame().getStack().getSpellMatchingHost(spellAbility.getHostCard()) != null) {
return false;
}
} }
if (!stAb.matchesValidParam("ValidCard", card)) {
return false;
}
return common(stAb, card, spellAbility);
}
public static boolean applyCantTargetAbility(final StaticAbility stAb, final Player player, final SpellAbility spellAbility) {
if (stAb.hasParam("ValidCard") || stAb.hasParam("AffectedZone")) {
return false;
}
if (!stAb.matchesValidParam("ValidPlayer", player)) {
return false;
}
return common(stAb, player, spellAbility);
}
protected static boolean common(final StaticAbility stAb, GameEntity entity, final SpellAbility spellAbility) {
final Card source = spellAbility.getHostCard(); final Card source = spellAbility.getHostCard();
final Player activator = spellAbility.getActivatingPlayer(); final Player activator = spellAbility.getActivatingPlayer();
@@ -140,6 +92,10 @@ public class StaticAbilityCantTarget {
return false; return false;
} }
if (!stAb.matchesValidParam("ValidTarget", entity)) {
return false;
}
if (!stAb.matchesValidParam("ValidSA", spellAbility)) { if (!stAb.matchesValidParam("ValidSA", spellAbility)) {
return false; return false;
} }

View File

@@ -3,6 +3,6 @@ ManaCost:2 U
Types:Enchantment Aura Types:Enchantment Aura
K:Enchant:Creature K:Enchant:Creature
SVar:AttachAILogic:Pump SVar:AttachAILogic:Pump
S:Mode$ CantTarget | ValidCard$ Creature.EnchantedBy | ValidSA$ Spell | Description$ Enchanted creature can't be the target of spells. S:Mode$ CantTarget | ValidTarget$ Creature.EnchantedBy | ValidSA$ Spell | Description$ Enchanted creature can't be the target of spells.
S:Mode$ CantAttach | ValidCard$ Aura.Other | Target$ Creature.EnchantedBy | Description$ Enchanted creature can't be enchanted by other Auras. S:Mode$ CantAttach | ValidCard$ Aura.Other | Target$ Creature.EnchantedBy | Description$ Enchanted creature can't be enchanted by other Auras.
Oracle:Enchant creature\nEnchanted creature can't be the target of spells and can't be enchanted by other Auras. Oracle:Enchant creature\nEnchanted creature can't be the target of spells and can't be enchanted by other Auras.

View File

@@ -5,5 +5,5 @@ K:Enchant:Creature
SVar:AttachAILogic:Pump SVar:AttachAILogic:Pump
S:Mode$ CantBlockBy | ValidAttacker$ Creature.EnchantedBy | ValidBlocker$ Creature.Artifact | Description$ Enchanted creature can't be blocked by artifact creatures. S:Mode$ CantBlockBy | ValidAttacker$ Creature.EnchantedBy | ValidBlocker$ Creature.Artifact | Description$ Enchanted creature can't be blocked by artifact creatures.
R:Event$ DamageDone | Prevent$ True | ActiveZones$ Battlefield | ValidTarget$ Creature.EnchantedBy | ValidSource$ Artifact | Description$ Prevent all damage that would be dealt to enchanted creature by artifact sources. R:Event$ DamageDone | Prevent$ True | ActiveZones$ Battlefield | ValidTarget$ Creature.EnchantedBy | ValidSource$ Artifact | Description$ Prevent all damage that would be dealt to enchanted creature by artifact sources.
S:Mode$ CantTarget | ValidCard$ Card.EnchantedBy | ValidSource$ Artifact | Description$ Enchanted creature can't be the target of abilities from artifact sources. S:Mode$ CantTarget | ValidTarget$ Card.EnchantedBy | ValidSource$ Artifact | Description$ Enchanted creature can't be the target of abilities from artifact sources.
Oracle:Enchant creature\nEnchanted creature can't be blocked by artifact creatures.\nPrevent all damage that would be dealt to enchanted creature by artifact sources.\nEnchanted creature can't be the target of abilities from artifact sources. Oracle:Enchant creature\nEnchanted creature can't be blocked by artifact creatures.\nPrevent all damage that would be dealt to enchanted creature by artifact sources.\nEnchanted creature can't be the target of abilities from artifact sources.

View File

@@ -3,7 +3,7 @@ ManaCost:G
Types:Instant Types:Instant
A:SP$ Effect | ReplacementEffects$ AntiMagic | StaticAbilities$ STCantBeTarget | SpellDescription$ Spells you control can't be countered by blue or black spells this turn, and creatures you control can't be the targets of blue or black spells this turn. A:SP$ Effect | ReplacementEffects$ AntiMagic | StaticAbilities$ STCantBeTarget | SpellDescription$ Spells you control can't be countered by blue or black spells this turn, and creatures you control can't be the targets of blue or black spells this turn.
SVar:AntiMagic:Event$ Counter | ValidSA$ Spell.YouCtrl | ValidCause$ Spell.Blue,Spell.Black | Layer$ CantHappen | Description$ Spells you control can't be countered by blue or black spells this turn. SVar:AntiMagic:Event$ Counter | ValidSA$ Spell.YouCtrl | ValidCause$ Spell.Blue,Spell.Black | Layer$ CantHappen | Description$ Spells you control can't be countered by blue or black spells this turn.
SVar:STCantBeTarget:Mode$ CantTarget | ValidCard$ Creature.YouCtrl | ValidSource$ Card.Blue,Card.Black | ValidSA$ Spell | Description$ Creatures you control can't be the targets of blue or black spells this turn. SVar:STCantBeTarget:Mode$ CantTarget | ValidTarget$ Creature.YouCtrl | ValidSource$ Card.Blue,Card.Black | ValidSA$ Spell | Description$ Creatures you control can't be the targets of blue or black spells this turn.
AI:RemoveDeck:All AI:RemoveDeck:All
AI:RemoveDeck:Random AI:RemoveDeck:Random
Oracle:Spells you control can't be countered by blue or black spells this turn, and creatures you control can't be the targets of blue or black spells this turn. Oracle:Spells you control can't be countered by blue or black spells this turn, and creatures you control can't be the targets of blue or black spells this turn.

View File

@@ -3,5 +3,5 @@ ManaCost:3 B R G
Types:Legendary Creature Giant Warrior Types:Legendary Creature Giant Warrior
PT:6/5 PT:6/5
K:Vigilance K:Vigilance
S:Mode$ CantTarget | ValidCard$ Card.Self | ValidSource$ Aura | ValidSA$ Spell | Description$ CARDNAME can't be the target of Aura spells. S:Mode$ CantTarget | ValidTarget$ Card.Self | ValidSource$ Aura | ValidSA$ Spell | Description$ CARDNAME can't be the target of Aura spells.
Oracle:Vigilance\nBartel Runeaxe can't be the target of Aura spells. Oracle:Vigilance\nBartel Runeaxe can't be the target of Aura spells.

View File

@@ -4,5 +4,5 @@ Types:Enchantment Aura
K:Enchant:Creature K:Enchant:Creature
SVar:AttachAILogic:Pump SVar:AttachAILogic:Pump
S:Mode$ CantBlockBy | ValidAttacker$ Creature.EnchantedBy | ValidBlocker$ Creature.withoutFlying+withoutReach | Description$ Enchanted creature can't be blocked except by creatures with flying or reach. S:Mode$ CantBlockBy | ValidAttacker$ Creature.EnchantedBy | ValidBlocker$ Creature.withoutFlying+withoutReach | Description$ Enchanted creature can't be blocked except by creatures with flying or reach.
S:Mode$ CantTarget | ValidCard$ Card.EnchantedBy | Activator$ Opponent | Description$ Enchanted creature can't be the target of spells or abilities your opponents control. S:Mode$ CantTarget | ValidTarget$ Card.EnchantedBy | Activator$ Opponent | Description$ Enchanted creature can't be the target of spells or abilities your opponents control.
Oracle:Enchant creature\nEnchanted creature can't be blocked except by creatures with flying or reach.\nEnchanted creature can't be the target of spells or abilities your opponents control. Oracle:Enchant creature\nEnchanted creature can't be blocked except by creatures with flying or reach.\nEnchanted creature can't be the target of spells or abilities your opponents control.

View File

@@ -1,7 +1,7 @@
Name:Dense Foliage Name:Dense Foliage
ManaCost:2 G ManaCost:2 G
Types:Enchantment Types:Enchantment
S:Mode$ CantTarget | ValidCard$ Creature | ValidSA$ Spell | Description$ Creatures can't be the target of spells. S:Mode$ CantTarget | ValidTarget$ Creature | ValidSA$ Spell | Description$ Creatures can't be the target of spells.
SVar:NonStackingEffect:True SVar:NonStackingEffect:True
AI:RemoveDeck:Random AI:RemoveDeck:Random
Oracle:Creatures can't be the targets of spells. Oracle:Creatures can't be the targets of spells.

View File

@@ -4,6 +4,6 @@ Types:Instant
A:SP$ Charm | Choices$ DBDestroy,DBProtect A:SP$ Charm | Choices$ DBDestroy,DBProtect
SVar:DBDestroy:DB$ Destroy | ValidTgts$ Permanent.nonCreature+Blue,Permanent.nonCreature+Black | TgtPrompt$ Select target blue or black noncreature permanent | SpellDescription$ Destroy target blue or black noncreature permanent. SVar:DBDestroy:DB$ Destroy | ValidTgts$ Permanent.nonCreature+Blue,Permanent.nonCreature+Black | TgtPrompt$ Select target blue or black noncreature permanent | SpellDescription$ Destroy target blue or black noncreature permanent.
SVar:DBProtect:DB$ Effect | StaticAbilities$ STCantBeTarget | SpellDescription$ Permanents you control can't be the targets of blue or black spells your opponents control this turn. SVar:DBProtect:DB$ Effect | StaticAbilities$ STCantBeTarget | SpellDescription$ Permanents you control can't be the targets of blue or black spells your opponents control this turn.
SVar:STCantBeTarget:Mode$ CantTarget | ValidCard$ Permanent.YouCtrl | ValidSource$ Card.Blue+OppCtrl,Card.Black+OppCtrl | ValidSA$ Spell | Description$ Permanents you control can't be the targets of blue or black spells your opponents control this turn. SVar:STCantBeTarget:Mode$ CantTarget | ValidTarget$ Permanent.YouCtrl | ValidSource$ Card.Blue+OppCtrl,Card.Black+OppCtrl | ValidSA$ Spell | Description$ Permanents you control can't be the targets of blue or black spells your opponents control this turn.
AI:RemoveDeck:Random AI:RemoveDeck:Random
Oracle:Choose one —\n• Destroy target blue or black noncreature permanent.\n• Permanents you control can't be the targets of blue or black spells your opponents control this turn. Oracle:Choose one —\n• Destroy target blue or black noncreature permanent.\n• Permanents you control can't be the targets of blue or black spells your opponents control this turn.

View File

@@ -4,6 +4,6 @@ Types:Enchantment Aura
K:Enchant:Permanent K:Enchant:Permanent
SVar:AttachAITgts:Permanent.tapped SVar:AttachAITgts:Permanent.tapped
SVar:AttachAILogic:GainControl SVar:AttachAILogic:GainControl
S:Mode$ CantTarget | EffectZone$ Stack | ValidSource$ Spell.Self | ValidCard$ Permanent.untapped | Description$ You can't choose an untapped permanent as this spell's target as you cast it. S:Mode$ CantTarget | ValidTarget$ Permanent.untapped | EffectZone$ Stack | ValidSource$ Spell.Self | Description$ You can't choose an untapped permanent as this spell's target as you cast it.
S:Mode$ Continuous | Affected$ Card.EnchantedBy | GainControl$ You | Description$ You control enchanted permanent. S:Mode$ Continuous | Affected$ Card.EnchantedBy | GainControl$ You | Description$ You control enchanted permanent.
Oracle:Enchant permanent\nYou can't choose an untapped permanent as this spell's target as you cast it.\nYou control enchanted permanent. Oracle:Enchant permanent\nYou can't choose an untapped permanent as this spell's target as you cast it.\nYou control enchanted permanent.

View File

@@ -4,6 +4,6 @@ Types:Enchantment Aura
K:Enchant:Creature K:Enchant:Creature
SVar:AttachAITgts:Creature.tapped SVar:AttachAITgts:Creature.tapped
SVar:AttachAILogic:GainControl SVar:AttachAILogic:GainControl
S:Mode$ CantTarget | EffectZone$ Stack | ValidSource$ Spell.Self | ValidCard$ Creature.untapped | Description$ You can't choose an untapped creature as this spell's target as you cast it. S:Mode$ CantTarget | ValidTarget$ Creature.untapped | EffectZone$ Stack | ValidSource$ Spell.Self | Description$ You can't choose an untapped creature as this spell's target as you cast it.
S:Mode$ Continuous | Affected$ Card.EnchantedBy | GainControl$ You | Description$ You control enchanted creature. S:Mode$ Continuous | Affected$ Card.EnchantedBy | GainControl$ You | Description$ You control enchanted creature.
Oracle:Enchant creature\nYou can't choose an untapped creature as this spell's target as you cast it.\nYou control enchanted creature. Oracle:Enchant creature\nYou can't choose an untapped creature as this spell's target as you cast it.\nYou control enchanted creature.

View File

@@ -4,5 +4,5 @@ Types:Creature Human Knight
PT:2/2 PT:2/2
K:First Strike K:First Strike
K:Lifelink K:Lifelink
S:Mode$ CantTarget | ValidCard$ Card.Self | ValidSource$ Card.Black,Card.Red | ValidSA$ Spell | Activator$ Opponent | Description$ CARDNAME can't be the target of black or red spells your opponents control. S:Mode$ CantTarget | ValidTarget$ Card.Self | ValidSource$ Card.Black,Card.Red | ValidSA$ Spell | Activator$ Opponent | Description$ CARDNAME can't be the target of black or red spells your opponents control.
Oracle:First strike (This creature deals combat damage before creatures without first strike.)\nLifelink (Damage dealt by this creature also causes you to gain that much life.)\nFiendslayer Paladin can't be the target of black or red spells your opponents control. Oracle:First strike (This creature deals combat damage before creatures without first strike.)\nLifelink (Damage dealt by this creature also causes you to gain that much life.)\nFiendslayer Paladin can't be the target of black or red spells your opponents control.

View File

@@ -4,5 +4,5 @@ Types:Creature Elemental
PT:8/5 PT:8/5
R:Event$ Counter | ValidCard$ Card.Self | ValidSA$ Spell | Layer$ CantHappen | Description$ This spell can't be countered. R:Event$ Counter | ValidCard$ Card.Self | ValidSA$ Spell | Layer$ CantHappen | Description$ This spell can't be countered.
K:Haste K:Haste
S:Mode$ CantTarget | ValidCard$ Card.Self | ValidSource$ Card.nonGreen | Description$ CARDNAME can't be the target of nongreen spells or abilities from nongreen sources. S:Mode$ CantTarget | ValidTarget$ Card.Self | ValidSource$ Card.nonGreen | Description$ CARDNAME can't be the target of nongreen spells or abilities from nongreen sources.
Oracle:This spell can't be countered.\nHaste\nGaea's Revenge can't be the target of nongreen spells or abilities from nongreen sources. Oracle:This spell can't be countered.\nHaste\nGaea's Revenge can't be the target of nongreen spells or abilities from nongreen sources.

View File

@@ -2,5 +2,5 @@ Name:Karplusan Strider
ManaCost:3 G ManaCost:3 G
Types:Creature Yeti Types:Creature Yeti
PT:3/4 PT:3/4
S:Mode$ CantTarget | ValidSA$ Spell | ValidCard$ Card.Self | ValidSource$ Card.Blue,Card.Black | Description$ CARDNAME can't be the target of blue or black spells. S:Mode$ CantTarget | ValidTarget$ Card.Self | ValidSA$ Spell | ValidSource$ Card.Blue,Card.Black | Description$ CARDNAME can't be the target of blue or black spells.
Oracle:Karplusan Strider can't be the target of blue or black spells. Oracle:Karplusan Strider can't be the target of blue or black spells.

View File

@@ -2,5 +2,5 @@ Name:Lurker
ManaCost:2 G ManaCost:2 G
Types:Creature Beast Types:Creature Beast
PT:2/3 PT:2/3
S:Mode$ CantTarget | ValidCard$ Card.Self+!attackedThisTurn+!blockedThisTurn | ValidSA$ Spell | Description$ CARDNAME can't be the target of spells unless it attacked or blocked this turn. S:Mode$ CantTarget | ValidTarget$ Card.Self+!attackedThisTurn+!blockedThisTurn | ValidSA$ Spell | Description$ CARDNAME can't be the target of spells unless it attacked or blocked this turn.
Oracle:Lurker can't be the target of spells unless it attacked or blocked this turn. Oracle:Lurker can't be the target of spells unless it attacked or blocked this turn.

View File

@@ -2,6 +2,6 @@ Name:Mercenary Informer
ManaCost:2 W ManaCost:2 W
Types:Creature Human Rebel Mercenary Types:Creature Human Rebel Mercenary
PT:2/1 PT:2/1
S:Mode$ CantTarget | ValidCard$ Card.Self | ValidSource$ Card.Black | Description$ CARDNAME can't be the target of black spells or abilities from black sources. S:Mode$ CantTarget | ValidTarget$ Card.Self | ValidSource$ Card.Black | Description$ CARDNAME can't be the target of black spells or abilities from black sources.
A:AB$ ChangeZone | Cost$ 2 W | ValidTgts$ Mercenary | IsCurse$ True | TgtPrompt$ Select target Mercenary | Origin$ Battlefield | Destination$ Library | LibraryPosition$ -1 | SpellDescription$ Put target Mercenary on the bottom of its owner's library. A:AB$ ChangeZone | Cost$ 2 W | ValidTgts$ Mercenary | IsCurse$ True | TgtPrompt$ Select target Mercenary | Origin$ Battlefield | Destination$ Library | LibraryPosition$ -1 | SpellDescription$ Put target Mercenary on the bottom of its owner's library.
Oracle:Mercenary Informer can't be the target of black spells or abilities from black sources.\n{2}{W}: Put target nontoken Mercenary on the bottom of its owner's library. Oracle:Mercenary Informer can't be the target of black spells or abilities from black sources.\n{2}{W}: Put target nontoken Mercenary on the bottom of its owner's library.

View File

@@ -3,6 +3,5 @@ ManaCost:1 W
Types:Sorcery Types:Sorcery
A:SP$ Effect | AILogic$ PeaceTalks | Stackable$ False | StaticAbilities$ STCantAttack,STCantTarget,STCantTargetPlayer | Duration$ ThisTurnAndNextTurn | SpellDescription$ This turn and next turn, creatures can't attack, and players and permanents can't be the targets of spells or activated abilities. A:SP$ Effect | AILogic$ PeaceTalks | Stackable$ False | StaticAbilities$ STCantAttack,STCantTarget,STCantTargetPlayer | Duration$ ThisTurnAndNextTurn | SpellDescription$ This turn and next turn, creatures can't attack, and players and permanents can't be the targets of spells or activated abilities.
SVar:STCantAttack:Mode$ CantAttack | ValidCard$ Creature | Description$ Creatures can't attack. SVar:STCantAttack:Mode$ CantAttack | ValidCard$ Creature | Description$ Creatures can't attack.
SVar:STCantTarget:Mode$ CantTarget | ValidCard$ Permanent | ValidSA$ Spell,Activated | Description$ Permanents can't be the targets of spells or activated abilities. SVar:STCantTarget:Mode$ CantTarget | ValidTarget$ Card.Permanent,Player | ValidSA$ Spell,Activated | Description$ Players and Permanents can't be the targets of spells or activated abilities.
SVar:STCantTargetPlayer:Mode$ CantTarget | ValidPlayer$ Player | ValidSA$ Spell,Activated | Description$ Players can't be the targets of spells or activated abilities.
Oracle:This turn and next turn, creatures can't attack, and players and permanents can't be the targets of spells or activated abilities. Oracle:This turn and next turn, creatures can't attack, and players and permanents can't be the targets of spells or activated abilities.

View File

@@ -1,7 +1,7 @@
Name:Raiding Party Name:Raiding Party
ManaCost:2 R ManaCost:2 R
Types:Enchantment Types:Enchantment
S:Mode$ CantTarget | ValidCard$ Card.Self | ValidSource$ Card.White | Description$ CARDNAME can't be the target of white spells or abilities from white sources. S:Mode$ CantTarget | ValidTarget$ Card.Self | ValidSource$ Card.White | Description$ CARDNAME can't be the target of white spells or abilities from white sources.
A:AB$ RepeatEach | Cost$ Sac<1/Orc/Orc> | CostDesc$ Sacrifice an Orc: | RepeatPlayers$ Player | RepeatSubAbility$ DBTap | SubAbility$ DBDestroy | SpellDescription$ Each player may tap any number of untapped white creatures they control. For each creature tapped this way, that player chooses up to two Plains. Then destroy all Plains that weren't chosen this way by any player. A:AB$ RepeatEach | Cost$ Sac<1/Orc/Orc> | CostDesc$ Sacrifice an Orc: | RepeatPlayers$ Player | RepeatSubAbility$ DBTap | SubAbility$ DBDestroy | SpellDescription$ Each player may tap any number of untapped white creatures they control. For each creature tapped this way, that player chooses up to two Plains. Then destroy all Plains that weren't chosen this way by any player.
SVar:DBTap:DB$ Tap | CardChoices$ Creature.untapped+White+RememberedPlayerCtrl | Tapper$ RememberedPlayer | AnyNumber$ True | ChoiceAmount$ Count$Valid Creature.untapped+White+RememberedPlayerCtrl | RememberTapped$ True | SubAbility$ ChoosePlainsToSave SVar:DBTap:DB$ Tap | CardChoices$ Creature.untapped+White+RememberedPlayerCtrl | Tapper$ RememberedPlayer | AnyNumber$ True | ChoiceAmount$ Count$Valid Creature.untapped+White+RememberedPlayerCtrl | RememberTapped$ True | SubAbility$ ChoosePlainsToSave
SVar:ChoosePlainsToSave:DB$ ChooseCard | Defined$ Remembered | MinAmount$ 0 | Amount$ TappedXTwo | Choices$ Plains | ChoiceTitle$ Choose up to two Plains for each creature tapped | ChoiceZone$ Battlefield | ImprintChosen$ True | AILogic$ OwnCard | SubAbility$ DBCleanup SVar:ChoosePlainsToSave:DB$ ChooseCard | Defined$ Remembered | MinAmount$ 0 | Amount$ TappedXTwo | Choices$ Plains | ChoiceTitle$ Choose up to two Plains for each creature tapped | ChoiceZone$ Battlefield | ImprintChosen$ True | AILogic$ OwnCard | SubAbility$ DBCleanup

View File

@@ -2,6 +2,6 @@ Name:Rebel Informer
ManaCost:2 B ManaCost:2 B
Types:Creature Human Mercenary Rebel Types:Creature Human Mercenary Rebel
PT:1/2 PT:1/2
S:Mode$ CantTarget | ValidCard$ Card.Self | ValidSource$ Card.White | Description$ CARDNAME can't be the target of white spells or abilities from white sources. S:Mode$ CantTarget | ValidTarget$ Card.Self | ValidSource$ Card.White | Description$ CARDNAME can't be the target of white spells or abilities from white sources.
A:AB$ ChangeZone | Cost$ 3 | ValidTgts$ Rebel.!token | IsCurse$ True | TgtPrompt$ Select target Rebel | Origin$ Battlefield | Destination$ Library | LibraryPosition$ -1 | SpellDescription$ Put target nontoken Rebel on the bottom of its owner's library. A:AB$ ChangeZone | Cost$ 3 | ValidTgts$ Rebel.!token | IsCurse$ True | TgtPrompt$ Select target Rebel | Origin$ Battlefield | Destination$ Library | LibraryPosition$ -1 | SpellDescription$ Put target nontoken Rebel on the bottom of its owner's library.
Oracle:Rebel Informer can't be the target of white spells or abilities from white sources.\n{3}: Put target nontoken Rebel on the bottom of its owner's library. Oracle:Rebel Informer can't be the target of white spells or abilities from white sources.\n{3}: Put target nontoken Rebel on the bottom of its owner's library.

View File

@@ -2,7 +2,7 @@ Name:Shanna, Sisay's Legacy
ManaCost:G W ManaCost:G W
Types:Legendary Creature Human Warrior Types:Legendary Creature Human Warrior
PT:0/0 PT:0/0
S:Mode$ CantTarget | ValidCard$ Card.Self | ValidSA$ Activated,Triggered | Activator$ Player.Opponent | Description$ CARDNAME can't be the target of abilities your opponents control. S:Mode$ CantTarget | ValidTarget$ Card.Self | ValidSA$ Activated,Triggered | Activator$ Player.Opponent | Description$ CARDNAME can't be the target of abilities your opponents control.
S:Mode$ Continuous | Affected$ Card.Self | AddPower$ X | AddToughness$ X | Description$ NICKNAME gets +1/+1 for each creature you control. S:Mode$ Continuous | Affected$ Card.Self | AddPower$ X | AddToughness$ X | Description$ NICKNAME gets +1/+1 for each creature you control.
SVar:X:Count$Valid Creature.YouCtrl SVar:X:Count$Valid Creature.YouCtrl
SVar:BuffedBy:Creature SVar:BuffedBy:Creature

View File

@@ -3,7 +3,7 @@ ManaCost:2 GU
Types:Enchantment Aura Types:Enchantment Aura
K:Enchant:Creature K:Enchant:Creature
SVar:AttachAILogic:Pump SVar:AttachAILogic:Pump
S:Mode$ CantTarget | ValidCard$ Card.EnchantedBy | Activator$ Opponent | Description$ Enchanted creature can't be the target of spells or abilities your opponents control. S:Mode$ CantTarget | ValidTarget$ Card.EnchantedBy | Activator$ Opponent | Description$ Enchanted creature can't be the target of spells or abilities your opponents control.
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters, draw a card. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters, draw a card.
SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1
Oracle:({G/U} can be paid with either {G} or {U}.)\nEnchant creature\nWhen Shielding Plax enters, draw a card.\nEnchanted creature can't be the target of spells or abilities your opponents control. Oracle:({G/U} can be paid with either {G} or {U}.)\nEnchant creature\nWhen Shielding Plax enters, draw a card.\nEnchanted creature can't be the target of spells or abilities your opponents control.

View File

@@ -4,5 +4,5 @@ Types:Enchantment Aura
K:Enchant:Creature K:Enchant:Creature
SVar:AttachAILogic:Pump SVar:AttachAILogic:Pump
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddToughness$ 2 | Description$ Enchanted creature gets +0/+2 and can't be the target of spells. S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddToughness$ 2 | Description$ Enchanted creature gets +0/+2 and can't be the target of spells.
S:Mode$ CantTarget | ValidCard$ Creature.EnchantedBy | ValidSA$ Spell | Secondary$ True | Description$ Enchanted creature gets +0/+2 and can't be the target of spells. S:Mode$ CantTarget | ValidTarget$ Creature.EnchantedBy | ValidSA$ Spell | Secondary$ True | Description$ Enchanted creature gets +0/+2 and can't be the target of spells.
Oracle:Enchant creature\nEnchanted creature gets +0/+2 and can't be the target of spells. Oracle:Enchant creature\nEnchanted creature gets +0/+2 and can't be the target of spells.

View File

@@ -2,5 +2,5 @@ Name:Spellbane Centaur
ManaCost:2 G ManaCost:2 G
Types:Creature Centaur Types:Creature Centaur
PT:3/2 PT:3/2
S:Mode$ CantTarget | ValidCard$ Creature.YouCtrl | ValidSource$ Card.Blue | Description$ Creatures you control can't be the targets of blue spells or abilities from blue sources. S:Mode$ CantTarget | ValidTarget$ Creature.YouCtrl | ValidSource$ Card.Blue | Description$ Creatures you control can't be the targets of blue spells or abilities from blue sources.
Oracle:Creatures you control can't be the targets of blue spells or abilities from blue sources. Oracle:Creatures you control can't be the targets of blue spells or abilities from blue sources.

View File

@@ -2,6 +2,6 @@ Name:Suq'Ata Firewalker
ManaCost:1 U U ManaCost:1 U U
Types:Creature Human Wizard Types:Creature Human Wizard
PT:0/1 PT:0/1
S:Mode$ CantTarget | ValidCard$ Card.Self | ValidSource$ Card.Red | Description$ CARDNAME can't be the target of red spells or abilities from red sources. S:Mode$ CantTarget | ValidTarget$ Card.Self | ValidSource$ Card.Red | Description$ CARDNAME can't be the target of red spells or abilities from red sources.
A:AB$ DealDamage | Cost$ T | ValidTgts$ Any | NumDmg$ 1 | SpellDescription$ CARDNAME deals 1 damage to any target. A:AB$ DealDamage | Cost$ T | ValidTgts$ Any | NumDmg$ 1 | SpellDescription$ CARDNAME deals 1 damage to any target.
Oracle:Suq'Ata Firewalker can't be the target of red spells or abilities from red sources.\n{T}: Suq'Ata Firewalker deals 1 damage to any target. Oracle:Suq'Ata Firewalker can't be the target of red spells or abilities from red sources.\n{T}: Suq'Ata Firewalker deals 1 damage to any target.

View File

@@ -2,6 +2,6 @@ Name:Tetsuo Umezawa
ManaCost:U B R ManaCost:U B R
Types:Legendary Creature Human Archer Types:Legendary Creature Human Archer
PT:3/3 PT:3/3
S:Mode$ CantTarget | ValidCard$ Card.Self | ValidSource$ Aura | ValidSA$ Spell | Description$ CARDNAME can't be the target of Aura spells. S:Mode$ CantTarget | ValidTarget$ Card.Self | ValidSource$ Aura | ValidSA$ Spell | Description$ CARDNAME can't be the target of Aura spells.
A:AB$ Destroy | Cost$ U B B R T | ValidTgts$ Creature.tapped,Creature.blocking | TgtPrompt$ Select target tapped or blocking creature | SpellDescription$ Destroy target tapped or blocking creature. A:AB$ Destroy | Cost$ U B B R T | ValidTgts$ Creature.tapped,Creature.blocking | TgtPrompt$ Select target tapped or blocking creature | SpellDescription$ Destroy target tapped or blocking creature.
Oracle:Tetsuo Umezawa can't be the target of Aura spells.\n{U}{B}{B}{R}, {T}: Destroy target tapped or blocking creature. Oracle:Tetsuo Umezawa can't be the target of Aura spells.\n{U}{B}{B}{R}, {T}: Destroy target tapped or blocking creature.

View File

@@ -4,6 +4,6 @@ Types:Legendary Creature Troll Shaman
PT:5/5 PT:5/5
R:Event$ Counter | ValidCard$ Card.Self | ValidSA$ Spell | Layer$ CantHappen | Description$ This spell can't be countered. R:Event$ Counter | ValidCard$ Card.Self | ValidSA$ Spell | Layer$ CantHappen | Description$ This spell can't be countered.
K:Trample K:Trample
S:Mode$ CantTarget | ValidCard$ Card.Self | ValidSource$ Card.nonGreen+OppCtrl | Description$ CARDNAME can't be the target of nongreen spells your opponents control or abilities from nongreen sources your opponents control. S:Mode$ CantTarget | ValidTarget$ Card.Self | ValidSource$ Card.nonGreen+OppCtrl | Description$ CARDNAME can't be the target of nongreen spells your opponents control or abilities from nongreen sources your opponents control.
S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ Indestructible | Condition$ PlayerTurn | Description$ During your turn, NICKNAME has indestructible. S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ Indestructible | Condition$ PlayerTurn | Description$ During your turn, NICKNAME has indestructible.
Oracle:This spell can't be countered.\nTrample\nThrun, Breaker of Silence can't be the target of nongreen spells your opponents control or abilities from nongreen sources your opponents control.\nDuring your turn, Thrun has indestructible. Oracle:This spell can't be countered.\nTrample\nThrun, Breaker of Silence can't be the target of nongreen spells your opponents control or abilities from nongreen sources your opponents control.\nDuring your turn, Thrun has indestructible.

View File

@@ -3,6 +3,6 @@ ManaCost:W W
Types:Legendary Creature Human Advisor Types:Legendary Creature Human Advisor
PT:2/3 PT:2/3
K:Flying K:Flying
S:Mode$ CantTarget | AffectedZone$ Battlefield,Graveyard | ValidCard$ Land | Activator$ Opponent | Description$ Lands on the battlefield and land cards in graveyards can't be the targets of spells or abilities your opponents control. S:Mode$ CantTarget | ValidTarget$ Land | AffectedZone$ Battlefield,Graveyard | Activator$ Opponent | Description$ Lands on the battlefield and land cards in graveyards can't be the targets of spells or abilities your opponents control.
S:Mode$ CantPlayLand | ValidCard$ Land | Player$ Opponent | Origin$ Graveyard | Description$ Your opponents can't play land cards from graveyards. S:Mode$ CantPlayLand | ValidCard$ Land | Player$ Opponent | Origin$ Graveyard | Description$ Your opponents can't play land cards from graveyards.
Oracle:Flying\nLands on the battlefield and land cards in graveyards can't be the targets of spells or abilities your opponents control.\nYour opponents can't play land cards from graveyards. Oracle:Flying\nLands on the battlefield and land cards in graveyards can't be the targets of spells or abilities your opponents control.\nYour opponents can't play land cards from graveyards.

View File

@@ -3,7 +3,7 @@ ManaCost:3
Types:Artifact Types:Artifact
T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigEffect | TriggerDescription$ Whenever you cast a spell, creatures you control can't be the targets of spells or abilities your opponents control this turn. T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigEffect | TriggerDescription$ Whenever you cast a spell, creatures you control can't be the targets of spells or abilities your opponents control this turn.
SVar:TrigEffect:DB$ Effect | StaticAbilities$ CantTarget SVar:TrigEffect:DB$ Effect | StaticAbilities$ CantTarget
SVar:CantTarget:Mode$ CantTarget | ValidCard$ Creature.YouCtrl | Activator$ Opponent | Description$ Creatures you control can't be the targets of spells or abilities your opponents control. SVar:CantTarget:Mode$ CantTarget | ValidTarget$ Creature.YouCtrl | Activator$ Opponent | Description$ Creatures you control can't be the targets of spells or abilities your opponents control.
SVar:BuffedBy:Card SVar:BuffedBy:Card
AI:RemoveDeck:Random AI:RemoveDeck:Random
Oracle:Whenever you cast a spell, creatures you control can't be the targets of spells or abilities your opponents control this turn. Oracle:Whenever you cast a spell, creatures you control can't be the targets of spells or abilities your opponents control this turn.

View File

@@ -4,6 +4,6 @@ Types:Instant
K:Kicker:G K:Kicker:G
A:SP$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +X | NumDef$ +X | SubAbility$ DBEffect | SpellDescription$ Target creature can't be the target of spells or abilities your opponents control this turn. If this spell was kicked, that creature gets +4/+4 until end of turn. A:SP$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +X | NumDef$ +X | SubAbility$ DBEffect | SpellDescription$ Target creature can't be the target of spells or abilities your opponents control this turn. If this spell was kicked, that creature gets +4/+4 until end of turn.
SVar:DBEffect:DB$ Effect | Defined$ Targeted | AILogic$ Always | StaticAbilities$ STCantTarget | RememberObjects$ Targeted | ExileOnMoved$ Battlefield SVar:DBEffect:DB$ Effect | Defined$ Targeted | AILogic$ Always | StaticAbilities$ STCantTarget | RememberObjects$ Targeted | ExileOnMoved$ Battlefield
SVar:STCantTarget:Mode$ CantTarget | ValidCard$ Card.IsRemembered | Activator$ Player.Opponent | Description$ Target creature can't be the target of spells or abilities your opponents control this turn. SVar:STCantTarget:Mode$ CantTarget | ValidTarget$ Card.IsRemembered | Activator$ Player.Opponent | Description$ Target creature can't be the target of spells or abilities your opponents control this turn.
SVar:X:Count$Kicked.4.0 SVar:X:Count$Kicked.4.0
Oracle:Kicker {G} (You may pay an additional {G} as you cast this spell.)\nTarget creature can't be the target of spells or abilities your opponents control this turn. If this spell was kicked, that creature gets +4/+4 until end of turn. Oracle:Kicker {G} (You may pay an additional {G} as you cast this spell.)\nTarget creature can't be the target of spells or abilities your opponents control this turn. If this spell was kicked, that creature gets +4/+4 until end of turn.

View File

@@ -4,6 +4,6 @@ Types:Creature Wall
PT:0/1 PT:0/1
K:Defender K:Defender
R:Event$ DamageDone | Prevent$ True | ValidSource$ Creature.blockedBySource | ValidTarget$ Creature.Self | Description$ Prevent all damage that would be dealt to CARDNAME by creatures it's blocking. R:Event$ DamageDone | Prevent$ True | ValidSource$ Creature.blockedBySource | ValidTarget$ Creature.Self | Description$ Prevent all damage that would be dealt to CARDNAME by creatures it's blocking.
S:Mode$ CantTarget | ValidCard$ Card.Self | SourceCanOnlyTarget$ Wall | Description$ CARDNAME can't be the target of spells that can target only Walls or of abilities that can target only Walls. S:Mode$ CantTarget | ValidTarget$ Card.Self | SourceCanOnlyTarget$ Wall | Description$ CARDNAME can't be the target of spells that can target only Walls or of abilities that can target only Walls.
AI:RemoveDeck:All AI:RemoveDeck:All
Oracle:Defender (This creature can't attack.)\nPrevent all damage that would be dealt to Wall of Shadows by creatures it's blocking.\nWall of Shadows can't be the target of spells that can target only Walls or of abilities that can target only Walls. Oracle:Defender (This creature can't attack.)\nPrevent all damage that would be dealt to Wall of Shadows by creatures it's blocking.\nWall of Shadows can't be the target of spells that can target only Walls or of abilities that can target only Walls.