Refactor Damage Prevention - Step 2

This commit is contained in:
Alumi
2021-05-08 13:57:03 +00:00
committed by Michael Kamensky
parent c40a132811
commit fe95ad2e11
40 changed files with 104 additions and 262 deletions

View File

@@ -1307,15 +1307,6 @@ public class AiController {
} }
public boolean confirmStaticApplication(Card hostCard, GameEntity affected, String logic, String message) { public boolean confirmStaticApplication(Card hostCard, GameEntity affected, String logic, String message) {
if (logic.equalsIgnoreCase("ProtectFriendly")) {
final Player controller = hostCard.getController();
if (affected instanceof Player) {
return !((Player) affected).isOpponentOf(controller);
}
if (affected instanceof Card) {
return !((Card) affected).getController().isOpponentOf(controller);
}
}
return true; return true;
} }
@@ -1759,12 +1750,21 @@ public class AiController {
* @param sa the sa * @param sa the sa
* @return true, if successful * @return true, if successful
*/ */
public final boolean aiShouldRun(final ReplacementEffect effect, final SpellAbility sa) { public final boolean aiShouldRun(final ReplacementEffect effect, final SpellAbility sa, GameEntity affected) {
Card hostCard = effect.getHostCard(); Card hostCard = effect.getHostCard();
if (hostCard.hasAlternateState()) { if (hostCard.hasAlternateState()) {
hostCard = game.getCardState(hostCard); hostCard = game.getCardState(hostCard);
} }
if (effect.hasParam("AILogic") && effect.getParam("AILogic").equalsIgnoreCase("ProtectFriendly")) {
final Player controller = hostCard.getController();
if (affected instanceof Player) {
return !((Player) affected).isOpponentOf(controller);
}
if (affected instanceof Card) {
return !((Card) affected).getController().isOpponentOf(controller);
}
}
if (effect.hasParam("AICheckSVar")) { if (effect.hasParam("AICheckSVar")) {
System.out.println("aiShouldRun?" + sa); System.out.println("aiShouldRun?" + sa);
final String svarToCheck = effect.getParam("AICheckSVar"); final String svarToCheck = effect.getParam("AICheckSVar");

View File

@@ -568,8 +568,8 @@ public class PlayerControllerAi extends PlayerController {
} }
@Override @Override
public boolean confirmReplacementEffect(ReplacementEffect replacementEffect, SpellAbility effectSA, String question) { public boolean confirmReplacementEffect(ReplacementEffect replacementEffect, SpellAbility effectSA, GameEntity affected, String question) {
return brains.aiShouldRun(replacementEffect, effectSA); return brains.aiShouldRun(replacementEffect, effectSA, affected);
} }
@Override @Override

View File

@@ -48,7 +48,7 @@ public class ReplaceDamageEffect extends SpellAbilityEffect {
if (card.getType().hasStringType("Effect") && prevent <= 0) { if (card.getType().hasStringType("Effect") && prevent <= 0) {
game.getAction().exile(card, null); game.getAction().exile(card, null);
} else if (!StringUtils.isNumeric(varValue)) { } else if (!StringUtils.isNumeric(varValue) && card.getSVar(varValue).startsWith("Number$")) {
card.setSVar(varValue, "Number$" + prevent); card.setSVar(varValue, "Number$" + prevent);
} }
// Set PreventedDamage SVar for PreventionSubAbility // Set PreventedDamage SVar for PreventionSubAbility

View File

@@ -5222,12 +5222,6 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
return 0; return 0;
} }
// Prevent Damage static abilities
for (final Card ca : getGame().getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) {
for (final StaticAbility stAb : ca.getStaticAbilities()) {
restDamage = stAb.applyAbility("PreventDamage", source, this, restDamage, isCombat, isTest);
}
}
return restDamage > 0 ? restDamage : 0; return restDamage > 0 ? restDamage : 0;
} }

View File

@@ -3422,7 +3422,24 @@ public class CardFactoryUtil {
Card host = card.getCard(); Card host = card.getCard();
String keyword = inst.getOriginal(); String keyword = inst.getOriginal();
if (keyword.equals("Aftermath") && card.getStateName().equals(CardStateName.RightSplit)) { if (keyword.startsWith("Absorb")) {
final String[] k = keyword.split(":");
final String n = k[1];
StringBuilder sb = new StringBuilder();
sb.append("Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ Card.Self");
sb.append(" | PreventionEffect$ True | Secondary$ True | Description$ Absorb ").append(n);
sb.append(" (").append(inst.getReminderText()).append(")");
String repeffstr = sb.toString();
String abString = "DB$ ReplaceDamage | Amount$ " + n;
SpellAbility replaceDamage = AbilityFactory.getAbility(abString, card);
replaceDamage.setIntrinsic(intrinsic);
ReplacementEffect re = ReplacementHandler.parseReplacement(repeffstr, host, intrinsic, card);
re.setOverridingAbility(replaceDamage);
inst.addReplacement(re);
} else if (keyword.equals("Aftermath") && card.getStateName().equals(CardStateName.RightSplit)) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Event$ Moved | ValidCard$ Card.Self | Origin$ Stack | ExcludeDestination$ Exile "); sb.append("Event$ Moved | ValidCard$ Card.Self | Origin$ Stack | ExcludeDestination$ Exile ");
sb.append("| ValidStackSa$ Spell.Aftermath | Description$ Aftermath"); sb.append("| ValidStackSa$ Spell.Aftermath | Description$ Aftermath");
@@ -4748,16 +4765,7 @@ public class CardFactoryUtil {
String effect = null; String effect = null;
Map<String, String> svars = Maps.newHashMap(); Map<String, String> svars = Maps.newHashMap();
if (keyword.startsWith("Absorb")) { if (keyword.startsWith("Affinity")) {
final String[] k = keyword.split(":");
final String n = k[1];
StringBuilder sb = new StringBuilder();
sb.append("Mode$ PreventDamage | Target$ Card.Self | Amount$ ");
sb.append(n).append("| Secondary$ True | Description$ Absorb ").append(n);
sb.append(" (").append(inst.getReminderText()).append(")");
effect = sb.toString();
} else if (keyword.startsWith("Affinity")) {
final String[] k = keyword.split(":"); final String[] k = keyword.split(":");
final String t = k[1]; final String t = k[1];

View File

@@ -729,13 +729,6 @@ public class Player extends GameEntity implements Comparable<Player> {
int restDamage = damage; int restDamage = damage;
// Prevent Damage static abilities
for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) {
for (final StaticAbility stAb : ca.getStaticAbilities()) {
restDamage = stAb.applyAbility("PreventDamage", source, this, restDamage, isCombat, isTest);
}
}
if (restDamage > 0) { if (restDamage > 0) {
return restDamage; return restDamage;
} }

View File

@@ -180,7 +180,7 @@ public abstract class PlayerController {
} }
public abstract Object vote(SpellAbility sa, String prompt, List<Object> options, ListMultimap<Object, Player> votes, Player forPlayer); public abstract Object vote(SpellAbility sa, String prompt, List<Object> options, ListMultimap<Object, Player> votes, Player forPlayer);
public abstract boolean confirmReplacementEffect(ReplacementEffect replacementEffect, SpellAbility effectSA, String question); public abstract boolean confirmReplacementEffect(ReplacementEffect replacementEffect, SpellAbility effectSA, GameEntity affected, String question);
public abstract CardCollectionView getCardsToMulligan(Player firstPlayer); public abstract CardCollectionView getCardsToMulligan(Player firstPlayer);
public abstract boolean mulliganKeepHand(Player player, int cardsToReturn); public abstract boolean mulliganKeepHand(Player player, int cardsToReturn);

View File

@@ -342,7 +342,8 @@ public class ReplacementHandler {
final String question = replacementEffect instanceof ReplaceDiscard final String question = replacementEffect instanceof ReplaceDiscard
? Localizer.getInstance().getMessage("lblApplyCardReplacementEffectToCardConfirm", CardTranslation.getTranslatedName(cardForUi.getName()), runParams.get(AbilityKey.Card).toString(), effectDesc) ? Localizer.getInstance().getMessage("lblApplyCardReplacementEffectToCardConfirm", CardTranslation.getTranslatedName(cardForUi.getName()), runParams.get(AbilityKey.Card).toString(), effectDesc)
: Localizer.getInstance().getMessage("lblApplyReplacementEffectOfCardConfirm", CardTranslation.getTranslatedName(cardForUi.getName()), effectDesc); : Localizer.getInstance().getMessage("lblApplyReplacementEffectOfCardConfirm", CardTranslation.getTranslatedName(cardForUi.getName()), effectDesc);
boolean confirmed = optDecider.getController().confirmReplacementEffect(replacementEffect, effectSA, question); GameEntity affected = (GameEntity) runParams.get(AbilityKey.Affected);
boolean confirmed = optDecider.getController().confirmReplacementEffect(replacementEffect, effectSA, affected, question);
if (!confirmed) { if (!confirmed) {
return ReplacementResult.NotReplaced; return ReplacementResult.NotReplaced;
} }

View File

@@ -287,41 +287,6 @@ public class StaticAbility extends CardTraitBase implements IIdentifiable, Clone
return getParam("Mode").equals("Continuous") && layers.contains(layer) && !isSuppressed() && checkConditions() && (previousRun || getHostCard().getStaticAbilities().contains(this)); return getParam("Mode").equals("Continuous") && layers.contains(layer) && !isSuppressed() && checkConditions() && (previousRun || getHostCard().getStaticAbilities().contains(this));
} }
// apply the ability if it has the right mode
/**
* Apply ability.
*
* @param mode
* the mode
* @param source
* the source
* @param target
* the target
* @param in
* the in
* @param isCombat
* the b
* @return the int
*/
public final int applyAbility(final String mode, final Card source, final GameEntity target, final int in,
final boolean isCombat, final boolean isTest) {
// don't apply the ability if it hasn't got the right mode
if (!getParam("Mode").equals(mode)) {
return in;
}
if (this.isSuppressed() || !this.checkConditions()) {
return in;
}
if (mode.equals("PreventDamage")) {
return StaticAbilityPreventDamage.applyPreventDamageAbility(this, source, target, in, isCombat, isTest);
}
return in;
}
/** /**
* Apply ability. * Apply ability.
* *

View File

@@ -1,120 +0,0 @@
/*
* Forge: Play Magic: the Gathering.
* Copyright (C) 2011 Forge Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.game.staticability;
import java.util.Map;
import forge.game.GameEntity;
import forge.game.card.Card;
import forge.game.card.CardFactoryUtil;
/**
* The Class StaticAbility_PreventDamage.
*/
public class StaticAbilityPreventDamage {
/**
* TODO Write javadoc for this method.
*
* @param stAb
* a StaticAbility
* @param source
* the source
* @param target
* the target
* @param damage
* the damage
* @param isCombat
* the is combat
* @return the int
*/
public static int applyPreventDamageAbility(final StaticAbility stAb, final Card source, final GameEntity target,
final int damage, final boolean isCombat, final boolean isTest) {
final Map<String, String> params = stAb.getMapParams();
final Card hostCard = stAb.getHostCard();
int restDamage = damage;
if (params.containsKey("Source") && !stAb.matchesValid(source, params.get("Source").split(","))) {
return restDamage;
}
if (params.containsKey("Target") && !stAb.matchesValid(target, params.get("Target").split(","))) {
return restDamage;
}
if (params.containsKey("CombatDamage") && params.get("CombatDamage").equals("True") && !isCombat) {
return restDamage;
}
if (params.containsKey("CombatDamage") && params.get("CombatDamage").equals("False") && isCombat) {
return restDamage;
}
if (params.containsKey("MaxDamage") && (Integer.parseInt(params.get("MaxDamage")) < damage)) {
return restDamage;
}
if (params.containsKey("SourceSharesColorWithTarget")) {
if (!(target instanceof Card) || source.equals(target)) {
return restDamage;
}
Card targetCard = (Card) target;
if (!source.sharesColorWith(targetCard)) {
return restDamage;
}
}
if (params.containsKey("Optional")) { //Assume if param is present it should be optional
if (!isTest) {
final String logic = params.containsKey("AILogic") ? params.get("AILogic") : "";
final String message = "Apply the effect of " + hostCard + "? (Affected: " + target + ")";
boolean confirmed = hostCard.getController().getController().confirmStaticApplication(hostCard, target, logic, message);
if (!confirmed) {
return restDamage;
}
} else { //test
if (!hostCard.getController().equals(target)) {
return restDamage;
}
}
}
// no amount means all
if (!params.containsKey("Amount") || params.get("Amount").equals("All")) {
return 0;
}
if (params.get("Amount").matches("[0-9][0-9]?")) {
restDamage = restDamage - Integer.parseInt(params.get("Amount"));
} else if (params.get("Amount").matches("HalfUp")) {
restDamage = restDamage - (int) (Math.ceil(restDamage / 2.0));
} else if (params.get("Amount").matches("HalfDown")) {
restDamage = restDamage - (int) (Math.floor(restDamage / 2.0));
} else {
restDamage = restDamage - CardFactoryUtil.xCount(hostCard, hostCard.getSVar(params.get("Amount")));
}
if (restDamage < 0) {
return 0;
}
return restDamage;
}
}

View File

@@ -310,7 +310,7 @@ public class PlayerControllerForTests extends PlayerController {
} }
@Override @Override
public boolean confirmReplacementEffect(ReplacementEffect replacementEffect, SpellAbility effectSA, String question) { public boolean confirmReplacementEffect(ReplacementEffect replacementEffect, SpellAbility effectSA, GameEntity affected, String question) {
return true; return true;
} }

View File

@@ -3,10 +3,9 @@ ManaCost:3
Types:Artifact Types:Artifact
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ At the beginning of each player's upkeep, CARDNAME deals 1 damage to that player. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ At the beginning of each player's upkeep, CARDNAME deals 1 damage to that player.
SVar:TrigDamage:DB$ DealDamage | Defined$ TriggeredPlayer | NumDmg$ 1 SVar:TrigDamage:DB$ DealDamage | Defined$ TriggeredPlayer | NumDmg$ 1
A:AB$ Effect | Cost$ 2 | ImprintCards$ Self | Triggers$ OutOfSight | StaticAbilities$ STPrevent | SpellDescription$ Prevent the next 1 damage that would be dealt by CARDNAME this turn. | StackDescription$ SpellDescription A:AB$ Effect | Cost$ 2 | RememberObjects$ Self | ReplacementEffects$ DBPrevent | ForgetOnMoved$ Battlefield | SpellDescription$ Prevent the next 1 damage that would be dealt by CARDNAME this turn. | StackDescription$ SpellDescription
SVar:STPrevent:Mode$ PreventDamage | EffectZone$ Command | Amount$ 1 | Source$ Card.IsImprinted | Description$ Prevent the next 1 damage that would be dealt by CARDNAME this turn. SVar:DBPrevent:Event$ DamageDone | ActiveZones$ Command | ValidSource$ Card.IsRemembered | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ Prevent the next 1 damage that would be dealt by EFFECTSOURCE this turn.
SVar:OutOfSight:Mode$ ChangesZone | TriggerZones$ Command | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.IsImprinted | Execute$ ExileSelf | Static$ True SVar:DBReplace:DB$ ReplaceDamage | Amount$ ShieldAmount
SVar:ExileSelf:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:ShieldAmount:Number$1
AI:RemoveDeck:Random AI:RemoveDeck:Random
SVar:Picture:http://www.wizards.com/global/images/magic/general/barbed_wire.jpg
Oracle:At the beginning of each player's upkeep, Barbed Wire deals 1 damage to that player.\n{2}: Prevent the next 1 damage that would be dealt by Barbed Wire this turn. Oracle:At the beginning of each player's upkeep, Barbed Wire deals 1 damage to that player.\n{2}: Prevent the next 1 damage that would be dealt by Barbed Wire this turn.

View File

@@ -2,7 +2,7 @@ Name:Battletide Alchemist
ManaCost:3 W W ManaCost:3 W W
Types:Creature Kithkin Cleric Types:Creature Kithkin Cleric
PT:3/4 PT:3/4
S:Mode$ PreventDamage | Target$ Player | Amount$ AlchemicX | Optional$ True | AILogic$ ProtectFriendly | Description$ If a source would deal damage to a player, you may prevent X of that damage, where X is the number of Clerics you control. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ Player | ReplaceWith$ DBReplace | PreventionEffect$ True | Optional$ True | OptionalDecider$ You | AILogic$ ProtectFriendly | Description$ If a source would deal damage to a player, you may prevent X of that damage, where X is the number of Clerics you control.
SVar:DBReplace:DB$ ReplaceDamage | Amount$ AlchemicX
SVar:AlchemicX:Count$Valid Cleric.YouCtrl SVar:AlchemicX:Count$Valid Cleric.YouCtrl
SVar:Picture:http://www.wizards.com/global/images/magic/general/battletide_alchemist.jpg
Oracle:If a source would deal damage to a player, you may prevent X of that damage, where X is the number of Clerics you control. Oracle:If a source would deal damage to a player, you may prevent X of that damage, where X is the number of Clerics you control.

View File

@@ -2,8 +2,8 @@ Name:Cover of Winter
ManaCost:2 W ManaCost:2 W
Types:Snow Enchantment Types:Snow Enchantment
K:Cumulative upkeep:S K:Cumulative upkeep:S
S:Mode$ PreventDamage | Target$ You,Creature.YouCtrl | Source$ Creature | CombatDamage$ True | Amount$ X | Description$ If a creature would deal combat damage to you and/or one or more creatures you control, prevent X of that damage, where X is the number of age counters on CARDNAME. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ You,Creature.YouCtrl | ValidSource$ Creature | IsCombat$ True | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ If a creature would deal combat damage to you and/or one or more creatures you control, prevent X of that damage, where X is the number of age counters on CARDNAME.
A:AB$ PutCounter | Cost$ S | CounterType$ AGE | CounterNum$ 1 | SpellDescription$ Put a age counter on CARDNAME. SVar:DBReplace:DB$ ReplaceDamage | Amount$ X
A:AB$ PutCounter | Cost$ S | CounterType$ AGE | CounterNum$ 1 | SpellDescription$ Put an age counter on CARDNAME.
SVar:X:Count$CardCounters.AGE SVar:X:Count$CardCounters.AGE
SVar:Picture:http://www.wizards.com/global/images/magic/general/cover_of_winter.jpg
Oracle:Cumulative upkeep {S} (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. {S} can be paid with one mana from a snow source.)\nIf a creature would deal combat damage to you and/or one or more creatures you control, prevent X of that damage, where X is the number of age counters on Cover of Winter.\n{S}: Put an age counter on Cover of Winter. Oracle:Cumulative upkeep {S} (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. {S} can be paid with one mana from a snow source.)\nIf a creature would deal combat damage to you and/or one or more creatures you control, prevent X of that damage, where X is the number of age counters on Cover of Winter.\n{S}: Put an age counter on Cover of Winter.

View File

@@ -2,9 +2,8 @@ Name:Dark Sphere
ManaCost:0 ManaCost:0
Types:Artifact Types:Artifact
A:AB$ ChooseSource | Cost$ T Sac<1/CARDNAME> | Choices$ Card | RememberChosen$ True | AILogic$ NeedsPrevention | SubAbility$ DBEffect | SpellDescription$ The next time a source of your choice would deal damage to you this turn, prevent half that damage, rounded down. A:AB$ ChooseSource | Cost$ T Sac<1/CARDNAME> | Choices$ Card | RememberChosen$ True | AILogic$ NeedsPrevention | SubAbility$ DBEffect | SpellDescription$ The next time a source of your choice would deal damage to you this turn, prevent half that damage, rounded down.
SVar:DBEffect:DB$ Effect | Triggers$ DamageDealt | StaticAbilities$ StaticPrevent | RememberObjects$ Remembered SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | ReplacementEffects$ DBPrevent | ForgetOnMoved$ Battlefield
SVar:StaticPrevent:Mode$ PreventDamage | Source$ Card.IsRemembered | Target$ You | Amount$ HalfDown | EffectZone$ Command | Description$ The next time a source of your choice would deal damage to you this turn, prevent half that damage, rounded down. SVar:DBPrevent:Event$ DamageDone | ActiveZones$ Command | ValidSource$ Card.IsRemembered | ValidTarget$ You | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ The next time a source of your choice would deal damage to you this turn, prevent half that damage, rounded down.
SVar:DamageDealt:Mode$ DamageDone | ValidSource$ Card.IsRemembered | ValidTarget$ You | Execute$ ExileEffect | Static$ True SVar:DBReplace:DB$ ReplaceDamage | Amount$ ShieldAmount
SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:ShieldAmount:ReplaceCount$DamageAmount/HalfDown
SVar:Picture:http://www.wizards.com/global/images/magic/general/dark_sphere.jpg
Oracle:{T}, Sacrifice Dark Sphere: The next time a source of your choice would deal damage to you this turn, prevent half that damage, rounded down. Oracle:{T}, Sacrifice Dark Sphere: The next time a source of your choice would deal damage to you this turn, prevent half that damage, rounded down.

View File

@@ -1,7 +1,7 @@
Name:Daunting Defender Name:Daunting Defender
ManaCost:4 W ManaCost:4 W
Types:Creature Human Cleric Types:Creature Human Cleric
S:Mode$ PreventDamage | Target$ Creature.Cleric+YouCtrl | Amount$ 1 | Description$ If a source would deal damage to a Cleric creature you control, prevent 1 of that damage.
PT:3/3 PT:3/3
SVar:Picture:http://www.wizards.com/global/images/magic/general/daunting_defender.jpg R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ Creature.Cleric+YouCtrl | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ If a source would deal damage to a Cleric creature you control, prevent 1 of that damage.
SVar:DBReplace:DB$ ReplaceDamage | Amount$ 1
Oracle:If a source would deal damage to a Cleric creature you control, prevent 1 of that damage. Oracle:If a source would deal damage to a Cleric creature you control, prevent 1 of that damage.

View File

@@ -5,6 +5,6 @@ PT:4/3
K:Vigilance K:Vigilance
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library for a planeswalker card, reveal it, put it into your hand, then shuffle. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library for a planeswalker card, reveal it, put it into your hand, then shuffle.
SVar:TrigChange:DB$ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Planeswalker | ChangeNum$ 1 | ShuffleNonMandatory$ True SVar:TrigChange:DB$ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Planeswalker | ChangeNum$ 1 | ShuffleNonMandatory$ True
S:Mode$ PreventDamage | Target$ Planeswalker.YouCtrl | Amount$ 1 | Description$ If a source would deal damage to a planeswalker you control, prevent 1 of that damage. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ Planeswalker.YouCtrl | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ If a source would deal damage to a planeswalker you control, prevent 1 of that damage.
SVar:Picture:http://www.wizards.com/global/images/magic/general/djeru_with_eyes_open.jpg SVar:DBReplace:DB$ ReplaceDamage | Amount$ 1
Oracle:Vigilance\nWhen Djeru, With Eyes Open enters the battlefield, you may search your library for a planeswalker card, reveal it, put it into your hand, then shuffle.\nIf a source would deal damage to a planeswalker you control, prevent 1 of that damage. Oracle:Vigilance\nWhen Djeru, With Eyes Open enters the battlefield, you may search your library for a planeswalker card, reveal it, put it into your hand, then shuffle.\nIf a source would deal damage to a planeswalker you control, prevent 1 of that damage.

View File

@@ -4,12 +4,12 @@ Types:Enchantment Aura
K:Enchant creature K:Enchant creature
A:SP$ Attach | Cost$ 2 U | ValidTgts$ Creature | AILogic$ Curse A:SP$ Attach | Cost$ 2 U | ValidTgts$ Creature | AILogic$ Curse
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ EnchantedController | Execute$ DBPay | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of the upkeep of enchanted creature's controller, that player may pay any amount of mana. CARDNAME deals 2 damage to that player. Prevent X of that damage, where X is the amount of mana that player paid this way. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ EnchantedController | Execute$ DBPay | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of the upkeep of enchanted creature's controller, that player may pay any amount of mana. CARDNAME deals 2 damage to that player. Prevent X of that damage, where X is the amount of mana that player paid this way.
S:Mode$ PreventDamage | Target$ EnchantedController | Source$ Card.Self | Amount$ PaidAmount | Secondary$ True R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Card.Self | ReplaceWith$ DBReplace | PreventionEffect$ True | Secondary$ True
SVar:DBReplace:DB$ ReplaceDamage | Amount$ PaidAmount
SVar:DBPay:DB$ ChooseNumber | Defined$ EnchantedController | ChooseAnyNumber$ True | ListTitle$ Pay Any Mana | AILogic$ PowerLeakMaxMana.2 | SubAbility$ DBStore SVar:DBPay:DB$ ChooseNumber | Defined$ EnchantedController | ChooseAnyNumber$ True | ListTitle$ Pay Any Mana | AILogic$ PowerLeakMaxMana.2 | SubAbility$ DBStore
SVar:DBStore:DB$ StoreSVar | SVar$ PaidAmount | Type$ CountSVar | Expression$ X | UnlessCost$ X | UnlessPayer$ EnchantedController | UnlessSwitched$ True | SubAbility$ DBDmg SVar:DBStore:DB$ StoreSVar | SVar$ PaidAmount | Type$ CountSVar | Expression$ X | UnlessCost$ X | UnlessPayer$ EnchantedController | UnlessSwitched$ True | SubAbility$ DBDmg
SVar:DBDmg:DB$ DealDamage | Defined$ EnchantedController | NumDmg$ 2 | SubAbility$ DBReset | StackDescription$ None SVar:DBDmg:DB$ DealDamage | Defined$ EnchantedController | NumDmg$ 2 | SubAbility$ DBReset | StackDescription$ None
SVar:DBReset:DB$ StoreSVar | SVar$ PaidAmount | Type$ Number | Expression$ 0 SVar:DBReset:DB$ StoreSVar | SVar$ PaidAmount | Type$ Number | Expression$ 0
SVar:X:Count$ChosenNumber SVar:X:Count$ChosenNumber
SVar:PaidAmount:Number$0 SVar:PaidAmount:Number$0
SVar:Picture:http://www.wizards.com/global/images/magic/general/power_leak.jpg
Oracle:Enchant creature\nAt the beginning of the upkeep of enchanted creature's controller, that player may pay any amount of mana. Errant Minion deals 2 damage to that player. Prevent X of that damage, where X is the amount of mana that player paid this way. Oracle:Enchant creature\nAt the beginning of the upkeep of enchanted creature's controller, that player may pay any amount of mana. Errant Minion deals 2 damage to that player. Prevent X of that damage, where X is the amount of mana that player paid this way.

View File

@@ -7,7 +7,8 @@ K:First Strike
R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Card,Emblem | ValidTarget$ Opponent,Permanent.OppCtrl | ReplaceWith$ DmgTwice | Description$ If a source would deal damage to an opponent or a permanent an opponent controls, that source deals double that damage to that player or permanent instead. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Card,Emblem | ValidTarget$ Opponent,Permanent.OppCtrl | ReplaceWith$ DmgTwice | Description$ If a source would deal damage to an opponent or a permanent an opponent controls, that source deals double that damage to that player or permanent instead.
SVar:DmgTwice:DB$ ReplaceEffect | VarName$ DamageAmount | VarValue$ X SVar:DmgTwice:DB$ ReplaceEffect | VarName$ DamageAmount | VarValue$ X
SVar:X:ReplaceCount$DamageAmount/Twice SVar:X:ReplaceCount$DamageAmount/Twice
S:Mode$ PreventDamage | Target$ You,Permanent.YouCtrl | Amount$ HalfUp | Description$ If a source would deal damage to you or a permanent you control, prevent half that damage, rounded up. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ You,Permanent.YouCtrl | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ If a source would deal damage to you or a permanent you control, prevent half that damage, rounded up.
SVar:DBReplace:DB$ ReplaceDamage | Amount$ ShieldAmount
SVar:ShieldAmount:ReplaceCount$DamageAmount/HalfUp
SVar:PlayMain1:TRUE SVar:PlayMain1:TRUE
SVar:Picture:http://www.wizards.com/global/images/magic/general/gisela_blade_of_goldnight.jpg
Oracle:Flying, first strike\nIf a source would deal damage to an opponent or a permanent an opponent controls, that source deals double that damage to that player or permanent instead.\nIf a source would deal damage to you or a permanent you control, prevent half that damage, rounded up. Oracle:Flying, first strike\nIf a source would deal damage to an opponent or a permanent an opponent controls, that source deals double that damage to that player or permanent instead.\nIf a source would deal damage to you or a permanent you control, prevent half that damage, rounded up.

View File

@@ -3,6 +3,6 @@ ManaCost:2 W W
Types:Creature Angel Types:Creature Angel
PT:3/4 PT:3/4
K:Flying K:Flying
S:Mode$ PreventDamage | Target$ You | Source$ Card.OppCtrl | Amount$ 1 | Description$ If a source an opponent controls would deal damage to you, prevent 1 of that damage. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Card.OppCtrl,Emblem.OppCtrl | ValidTarget$ You | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ If a source an opponent controls would deal damage to you, prevent 1 of that damage.
SVar:Picture:http://www.wizards.com/global/images/magic/general/guardian_seraph.jpg SVar:DBReplace:DB$ ReplaceDamage | Amount$ 1
Oracle:Flying\nIf a source an opponent controls would deal damage to you, prevent 1 of that damage. Oracle:Flying\nIf a source an opponent controls would deal damage to you, prevent 1 of that damage.

View File

@@ -6,9 +6,10 @@ K:Level up:2 W
SVar:maxLevel:5 SVar:maxLevel:5
S:Mode$ Continuous | Affected$ Card.Self | SetPower$ 1 | SetToughness$ 4 | CheckSVar$ X | SVarCompare$ EQ1 | Description$ LEVEL 1-4 1/4 If a source would deal damage to you or a creature you control prevent 1 of that damage. S:Mode$ Continuous | Affected$ Card.Self | SetPower$ 1 | SetToughness$ 4 | CheckSVar$ X | SVarCompare$ EQ1 | Description$ LEVEL 1-4 1/4 If a source would deal damage to you or a creature you control prevent 1 of that damage.
S:Mode$ Continuous | Affected$ Card.Self | SetPower$ 2 | SetToughness$ 5 | CheckSVar$ Y | SVarCompare$ EQ1 | Description$ LEVEL 5+ 2/5 If a source would deal damage to you or a creature you control prevent 2 of that damage. S:Mode$ Continuous | Affected$ Card.Self | SetPower$ 2 | SetToughness$ 5 | CheckSVar$ Y | SVarCompare$ EQ1 | Description$ LEVEL 5+ 2/5 If a source would deal damage to you or a creature you control prevent 2 of that damage.
S:Mode$ PreventDamage | Target$ You,Creature.YouCtrl | Amount$ 1 | CheckSVar$ X | SVarCompare$ EQ1 R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ You,Creature.YouCtrl | ReplaceWith$ DBReplace1 | PreventionEffect$ True | CheckSVar$ X | SVarCompare$ EQ1
S:Mode$ PreventDamage | Target$ You,Creature.YouCtrl | Amount$ 2 | CheckSVar$ Y | SVarCompare$ EQ1 SVar:DBReplace1:DB$ ReplaceDamage | Amount$ 1
R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ You,Creature.YouCtrl | ReplaceWith$ DBReplace2 | PreventionEffect$ True | CheckSVar$ Y | SVarCompare$ EQ1
SVar:DBReplace2:DB$ ReplaceDamage | Amount$ 2
SVar:X:Count$Valid Card.Self+counters_GE1_LEVEL+counters_LT5_LEVEL SVar:X:Count$Valid Card.Self+counters_GE1_LEVEL+counters_LT5_LEVEL
SVar:Y:Count$Valid Card.Self+counters_GE5_LEVEL SVar:Y:Count$Valid Card.Self+counters_GE5_LEVEL
SVar:Picture:http://www.wizards.com/global/images/magic/general/hedron_field_purists.jpg
Oracle:Level up {2}{W} ({2}{W}: Put a level counter on this. Level up only as a sorcery.)\nLEVEL 1-4\n1/4\nIf a source would deal damage to you or a creature you control, prevent 1 of that damage.\nLEVEL 5+\n2/5\nIf a source would deal damage to you or a creature you control, prevent 2 of that damage. Oracle:Level up {2}{W} ({2}{W}: Put a level counter on this. Level up only as a sorcery.)\nLEVEL 1-4\n1/4\nIf a source would deal damage to you or a creature you control, prevent 1 of that damage.\nLEVEL 5+\n2/5\nIf a source would deal damage to you or a creature you control, prevent 2 of that damage.

View File

@@ -2,9 +2,9 @@ Name:Nothing Can Stop Me Now
ManaCost:no cost ManaCost:no cost
Types:Ongoing Scheme Types:Ongoing Scheme
Text:(An ongoing scheme remains face up until it's abandoned.) Text:(An ongoing scheme remains face up until it's abandoned.)
S:Mode$ PreventDamage | EffectZone$ Command | Target$ You | Source$ Card.OppCtrl | Amount$ 1 | Description$ If a source an opponent controls would deal damage to you, prevent 1 of that damage. R:Event$ DamageDone | ActiveZones$ Command | ValidSource$ Card.OppCtrl,Emblem.OppCtrl | ValidTarget$ You | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ If a source an opponent controls would deal damage to you, prevent 1 of that damage.
SVar:DBReplace:DB$ ReplaceDamage | Amount$ 1
T:Mode$ Phase | Phase$ End of Turn | CheckSVar$ X | SVarCompare$ GE5 | TriggerZones$ Command | Execute$ Abandon | TriggerDescription$ At the beginning of each end step, if you've been dealt 5 or more damage this turn, abandon this scheme. T:Mode$ Phase | Phase$ End of Turn | CheckSVar$ X | SVarCompare$ GE5 | TriggerZones$ Command | Execute$ Abandon | TriggerDescription$ At the beginning of each end step, if you've been dealt 5 or more damage this turn, abandon this scheme.
SVar:Abandon:AB$ Abandon | Cost$ 0 SVar:Abandon:AB$ Abandon | Cost$ 0
SVar:X:Count$YourDamageThisTurn SVar:X:Count$YourDamageThisTurn
SVar:Picture:https://downloads.cardforge.org/images/cards/ARC/Nothing Can Stop Me Now.full.jpg
Oracle:(An ongoing scheme remains face up until it's abandoned.)\nIf a source an opponent controls would deal damage to you, prevent 1 of that damage.\nAt the beginning of each end step, if you've been dealt 5 or more damage this turn, abandon this scheme. Oracle:(An ongoing scheme remains face up until it's abandoned.)\nIf a source an opponent controls would deal damage to you, prevent 1 of that damage.\nAt the beginning of each end step, if you've been dealt 5 or more damage this turn, abandon this scheme.

View File

@@ -2,6 +2,6 @@ Name:Orbs of Warding
ManaCost:5 ManaCost:5
Types:Artifact Types:Artifact
S:Mode$ Continuous | Affected$ You | AddKeyword$ Hexproof | Description$ You have hexproof. (You can't be the target of spells or abilities your opponents control.) S:Mode$ Continuous | Affected$ You | AddKeyword$ Hexproof | Description$ You have hexproof. (You can't be the target of spells or abilities your opponents control.)
S:Mode$ PreventDamage | Target$ You | Source$ Creature.inZoneBattlefield | Amount$ 1 | Description$ If a creature would deal damage to you, prevent 1 of that damage. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Creature.inZoneBattlefield | ValidTarget$ You | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ If a creature would deal damage to you, prevent 1 of that damage.
SVar:Picture:http://www.wizards.com/global/images/magic/general/orbs_of_warding.jpg SVar:DBReplace:DB$ ReplaceDamage | Amount$ 1
Oracle:You have hexproof. (You can't be the target of spells or abilities your opponents control.)\nIf a creature would deal damage to you, prevent 1 of that damage. Oracle:You have hexproof. (You can't be the target of spells or abilities your opponents control.)\nIf a creature would deal damage to you, prevent 1 of that damage.

View File

@@ -4,6 +4,6 @@ Types:Creature Pegasus
PT:1/2 PT:1/2
K:Flash K:Flash
K:Flying K:Flying
S:Mode$ PreventDamage | Target$ Permanent,Player | Source$ Spell | Amount$ 1 | Description$ If a spell would deal damage to a permanent or player, prevent 1 damage that spell would deal to that permanent or player. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Spell | ValidTarget$ Permanent,Player | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ If a spell would deal damage to a permanent or player, prevent 1 damage that spell would deal to that permanent or player.
SVar:Picture:http://www.wizards.com/global/images/magic/general/plated_pegasus.jpg SVar:DBReplace:DB$ ReplaceDamage | Amount$ 1
Oracle:Flash (You may cast this spell any time you could cast an instant.)\nFlying\nIf a spell would deal damage to a permanent or player, prevent 1 damage that spell would deal to that permanent or player. Oracle:Flash (You may cast this spell any time you could cast an instant.)\nFlying\nIf a spell would deal damage to a permanent or player, prevent 1 damage that spell would deal to that permanent or player.

View File

@@ -4,12 +4,12 @@ Types:Enchantment Aura
K:Enchant enchantment K:Enchant enchantment
A:SP$ Attach | Cost$ 1 U | ValidTgts$ Enchantment | AILogic$ Curse A:SP$ Attach | Cost$ 1 U | ValidTgts$ Enchantment | AILogic$ Curse
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ EnchantedController | Execute$ DBPay | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of the upkeep of enchanted enchantment's controller, that player may pay any amount of mana. CARDNAME deals 2 damage to that player. Prevent X of that damage, where X is the amount of mana that player paid this way. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ EnchantedController | Execute$ DBPay | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of the upkeep of enchanted enchantment's controller, that player may pay any amount of mana. CARDNAME deals 2 damage to that player. Prevent X of that damage, where X is the amount of mana that player paid this way.
S:Mode$ PreventDamage | Target$ EnchantedController | Source$ Card.Self | Amount$ PaidAmount | Secondary$ True R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Card.Self | ReplaceWith$ DBReplace | PreventionEffect$ True | Secondary$ True
SVar:DBReplace:DB$ ReplaceDamage | Amount$ PaidAmount
SVar:DBPay:DB$ ChooseNumber | Defined$ EnchantedController | ChooseAnyNumber$ True | ListTitle$ Pay Any Mana | AILogic$ PowerLeakMaxMana.2 | SubAbility$ DBStore SVar:DBPay:DB$ ChooseNumber | Defined$ EnchantedController | ChooseAnyNumber$ True | ListTitle$ Pay Any Mana | AILogic$ PowerLeakMaxMana.2 | SubAbility$ DBStore
SVar:DBStore:DB$ StoreSVar | SVar$ PaidAmount | Type$ CountSVar | Expression$ X | UnlessCost$ X | UnlessPayer$ EnchantedController | UnlessSwitched$ True | SubAbility$ DBDmg SVar:DBStore:DB$ StoreSVar | SVar$ PaidAmount | Type$ CountSVar | Expression$ X | UnlessCost$ X | UnlessPayer$ EnchantedController | UnlessSwitched$ True | SubAbility$ DBDmg
SVar:DBDmg:DB$ DealDamage | Defined$ EnchantedController | NumDmg$ 2 | SubAbility$ DBReset | StackDescription$ None SVar:DBDmg:DB$ DealDamage | Defined$ EnchantedController | NumDmg$ 2 | SubAbility$ DBReset | StackDescription$ None
SVar:DBReset:DB$ StoreSVar | SVar$ PaidAmount | Type$ Number | Expression$ 0 SVar:DBReset:DB$ StoreSVar | SVar$ PaidAmount | Type$ Number | Expression$ 0
SVar:X:Count$ChosenNumber SVar:X:Count$ChosenNumber
SVar:PaidAmount:Number$0 SVar:PaidAmount:Number$0
SVar:Picture:http://www.wizards.com/global/images/magic/general/power_leak.jpg
Oracle:Enchant enchantment\nAt the beginning of the upkeep of enchanted enchantment's controller, that player may pay any amount of mana. Power Leak deals 2 damage to that player. Prevent X of that damage, where X is the amount of mana that player paid this way. Oracle:Enchant enchantment\nAt the beginning of the upkeep of enchanted enchantment's controller, that player may pay any amount of mana. Power Leak deals 2 damage to that player. Prevent X of that damage, where X is the amount of mana that player paid this way.

View File

@@ -1,6 +1,6 @@
Name:Protection of the Hekma Name:Protection of the Hekma
ManaCost:4 W ManaCost:4 W
Types:Enchantment Types:Enchantment
S:Mode$ PreventDamage | Target$ You | Source$ Card.OppCtrl | Amount$ 1 | Description$ If a source an opponent controls would deal damage to you, prevent 1 of that damage. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Card.OppCtrl,Emblem.OppCtrl | ValidTarget$ You | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ If a source an opponent controls would deal damage to you, prevent 1 of that damage.
SVar:Picture:http://www.wizards.com/global/images/magic/general/protection_of_the_hekma.jpg SVar:DBReplace:DB$ ReplaceDamage | Amount$ 1
Oracle:If a source an opponent controls would deal damage to you, prevent 1 of that damage. Oracle:If a source an opponent controls would deal damage to you, prevent 1 of that damage.

View File

@@ -15,7 +15,8 @@ ALTERNATE
Name:Valkmira, Protector's Shield Name:Valkmira, Protector's Shield
ManaCost:3 W ManaCost:3 W
Types:Legendary Artifact Types:Legendary Artifact
S:Mode$ PreventDamage | Target$ You,Permanent.YouCtrl | ValidSource$ Card.OppCtrl | Amount$ 1 | Description$ If a source an opponent controls would deal damage to you or a permanent you control, prevent 1 of that damage. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Card.OppCtrl,Emblem.OppCtrl | ValidTarget$ You,Permanent.YouCtrl | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ If a source an opponent controls would deal damage to you or a permanent you control, prevent 1 of that damage.
SVar:DBReplace:DB$ ReplaceDamage | Amount$ 1
T:Mode$ BecomesTarget | ValidSource$ Card.OppCtrl | ValidTarget$ You,Permanent.YouCtrl+Other | TriggerZones$ Battlefield | Execute$ TrigCounter | TriggerDescription$ Whenever you or another permanent you control becomes the target of a spell or ability an opponent controls, counter that spell or ability unless its controller pays {1}. T:Mode$ BecomesTarget | ValidSource$ Card.OppCtrl | ValidTarget$ You,Permanent.YouCtrl+Other | TriggerZones$ Battlefield | Execute$ TrigCounter | TriggerDescription$ Whenever you or another permanent you control becomes the target of a spell or ability an opponent controls, counter that spell or ability unless its controller pays {1}.
SVar:TrigCounter:DB$ Counter | Defined$ TriggeredSourceSA | UnlessCost$ 1 | UnlessPayer$ TriggeredSourceSAController SVar:TrigCounter:DB$ Counter | Defined$ TriggeredSourceSA | UnlessCost$ 1 | UnlessPayer$ TriggeredSourceSAController
Oracle:If a source an opponent controls would deal damage to you or a permanent you control, prevent 1 of that damage.\nWhenever you or another permanent you control becomes the target of a spell or ability an opponent controls, counter that spell or ability unless its controller pays {1}. Oracle:If a source an opponent controls would deal damage to you or a permanent you control, prevent 1 of that damage.\nWhenever you or another permanent you control becomes the target of a spell or ability an opponent controls, counter that spell or ability unless its controller pays {1}.

View File

@@ -2,8 +2,8 @@ Name:Shield of the Avatar
ManaCost:1 ManaCost:1
Types:Artifact Equipment Types:Artifact Equipment
K:Equip:2 K:Equip:2
S:Mode$ PreventDamage | Target$ Creature.EquippedBy | Amount$ X | Description$ If a source would deal damage to equipped creature, prevent X of that damage, where X is the number of creatures you control. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ Creature.EquippedBy | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ If a source would deal damage to equipped creature, prevent X of that damage, where X is the number of creatures you control.
SVar:DBReplace:DB$ ReplaceDamage | Amount$ X
SVar:X:Count$Valid Creature.YouCtrl SVar:X:Count$Valid Creature.YouCtrl
SVar:BuffedBy:Creature SVar:BuffedBy:Creature
SVar:Picture:http://www.wizards.com/global/images/magic/general/shield_of_the_avatar.jpg
Oracle:If a source would deal damage to equipped creature, prevent X of that damage, where X is the number of creatures you control.\nEquip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.) Oracle:If a source would deal damage to equipped creature, prevent X of that damage, where X is the number of creatures you control.\nEquip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.)

View File

@@ -2,5 +2,6 @@ Name:Shield of the Realm
ManaCost:2 ManaCost:2
Types:Artifact Equipment Types:Artifact Equipment
K:Equip:1 K:Equip:1
S:Mode$ PreventDamage | Target$ Creature.EquippedBy | Amount$ 2 | Description$ If a source would deal damage to equipped creature, prevent 2 of that damage. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ Creature.EquippedBy | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ If a source would deal damage to equipped creature, prevent 2 of that damage.
SVar:DBReplace:DB$ ReplaceDamage | Amount$ 2
Oracle:If a source would deal damage to equipped creature, prevent 2 of that damage.\nEquip {1} Oracle:If a source would deal damage to equipped creature, prevent 2 of that damage.\nEquip {1}

View File

@@ -1,7 +1,7 @@
Name:Sphere of Duty Name:Sphere of Duty
ManaCost:3 W ManaCost:3 W
Types:Enchantment Types:Enchantment
S:Mode$ PreventDamage | Target$ You | Source$ Card.GreenSource | Amount$ 2 | Description$ If a green source would deal damage to you, prevent 2 of that damage. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Card.GreenSource | ValidTarget$ You | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ If a green source would deal damage to you, prevent 2 of that damage.
SVar:DBReplace:DB$ ReplaceDamage | Amount$ 2
AI:RemoveDeck:Random AI:RemoveDeck:Random
SVar:Picture:http://www.wizards.com/global/images/magic/general/sphere_of_duty.jpg
Oracle:If a green source would deal damage to you, prevent 2 of that damage. Oracle:If a green source would deal damage to you, prevent 2 of that damage.

View File

@@ -1,7 +1,7 @@
Name:Sphere of Grace Name:Sphere of Grace
ManaCost:3 W ManaCost:3 W
Types:Enchantment Types:Enchantment
S:Mode$ PreventDamage | Target$ You | Source$ Card.BlackSource | Amount$ 2 | Description$ If a black source would deal damage to you, prevent 2 of that damage. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Card.BlackSource | ValidTarget$ You | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ If a black source would deal damage to you, prevent 2 of that damage.
SVar:DBReplace:DB$ ReplaceDamage | Amount$ 2
AI:RemoveDeck:Random AI:RemoveDeck:Random
SVar:Picture:http://www.wizards.com/global/images/magic/general/sphere_of_grace.jpg
Oracle:If a black source would deal damage to you, prevent 2 of that damage. Oracle:If a black source would deal damage to you, prevent 2 of that damage.

View File

@@ -1,7 +1,7 @@
Name:Sphere of Law Name:Sphere of Law
ManaCost:3 W ManaCost:3 W
Types:Enchantment Types:Enchantment
S:Mode$ PreventDamage | Target$ You | Source$ Card.RedSource | Amount$ 2 | Description$ If a red source would deal damage to you, prevent 2 of that damage. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Card.RedSource | ValidTarget$ You | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ If a red source would deal damage to you, prevent 2 of that damage.
SVar:DBReplace:DB$ ReplaceDamage | Amount$ 2
AI:RemoveDeck:Random AI:RemoveDeck:Random
SVar:Picture:http://www.wizards.com/global/images/magic/general/sphere_of_law.jpg
Oracle:If a red source would deal damage to you, prevent 2 of that damage. Oracle:If a red source would deal damage to you, prevent 2 of that damage.

View File

@@ -1,7 +1,7 @@
Name:Sphere of Purity Name:Sphere of Purity
ManaCost:3 W ManaCost:3 W
Types:Enchantment Types:Enchantment
S:Mode$ PreventDamage | Target$ You | Source$ Artifact | Amount$ 1 | Description$ If an artifact source would deal damage to you, prevent 1 of that damage. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Artifact | ValidTarget$ You | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ If an artifact would deal damage to you, prevent 1 of that damage.
SVar:DBReplace:DB$ ReplaceDamage | Amount$ 1
AI:RemoveDeck:Random AI:RemoveDeck:Random
SVar:Picture:http://www.wizards.com/global/images/magic/general/sphere_of_purity.jpg
Oracle:If an artifact would deal damage to you, prevent 1 of that damage. Oracle:If an artifact would deal damage to you, prevent 1 of that damage.

View File

@@ -1,7 +1,7 @@
Name:Sphere of Reason Name:Sphere of Reason
ManaCost:3 W ManaCost:3 W
Types:Enchantment Types:Enchantment
S:Mode$ PreventDamage | Target$ You | Source$ Card.BlueSource | Amount$ 2 | Description$ If a blue source would deal damage to you, prevent 2 of that damage. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Card.BlueSource | ValidTarget$ You | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ If a blue source would deal damage to you, prevent 2 of that damage.
SVar:DBReplace:DB$ ReplaceDamage | Amount$ 2
AI:RemoveDeck:Random AI:RemoveDeck:Random
SVar:Picture:http://www.wizards.com/global/images/magic/general/sphere_of_reason.jpg
Oracle:If a blue source would deal damage to you, prevent 2 of that damage. Oracle:If a blue source would deal damage to you, prevent 2 of that damage.

View File

@@ -1,7 +1,7 @@
Name:Sphere of Truth Name:Sphere of Truth
ManaCost:3 W ManaCost:3 W
Types:Enchantment Types:Enchantment
S:Mode$ PreventDamage | Target$ You | Source$ Card.WhiteSource | Amount$ 2 | Description$ If a white source would deal damage to you, prevent 2 of that damage. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Card.WhiteSource | ValidTarget$ You | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ If a white source would deal damage to you, prevent 2 of that damage.
SVar:DBReplace:DB$ ReplaceDamage | Amount$ 2
AI:RemoveDeck:Random AI:RemoveDeck:Random
SVar:Picture:http://www.wizards.com/global/images/magic/general/sphere_of_truth.jpg
Oracle:If a white source would deal damage to you, prevent 2 of that damage. Oracle:If a white source would deal damage to you, prevent 2 of that damage.

View File

@@ -1,8 +1,8 @@
Name:Spirit of Resistance Name:Spirit of Resistance
ManaCost:2 W ManaCost:2 W
Types:Enchantment Types:Enchantment
S:Mode$ PreventDamage | Target$ You | Condition$ PermanentOfEachColor | Description$ As long as you control a permanent of each color, prevent all damage that would be dealt to you. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ You | Prevent$ True | CheckSVar$ X | SVarCompare$ EQ5 | Description$ As long as you control a permanent of each color, prevent all damage that would be dealt to you.
SVar:X:Count$ColorsCtrl Permanent
SVar:NonStackingEffect:True SVar:NonStackingEffect:True
AI:RemoveDeck:Random AI:RemoveDeck:Random
SVar:Picture:http://www.wizards.com/global/images/magic/general/spirit_of_resistance.jpg
Oracle:As long as you control a permanent of each color, prevent all damage that would be dealt to you. Oracle:As long as you control a permanent of each color, prevent all damage that would be dealt to you.

View File

@@ -1,8 +1,8 @@
Name:Thunderstaff Name:Thunderstaff
ManaCost:3 ManaCost:3
Types:Artifact Types:Artifact
S:Mode$ PreventDamage | Target$ You | Source$ Creature | CombatDamage$ True | Amount$ 1 | CheckSVar$ X | SVarCompare$ EQ1 | Description$ As long as CARDNAME is untapped, if a creature would deal combat damage to you, prevent 1 of that damage. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Creature | ValidTarget$ You | IsCombat$ True | ReplaceWith$ DBReplace | PreventionEffect$ True | CheckSVar$ X | SVarCompare$ EQ1 | Description$ As long as CARDNAME is untapped, if a creature would deal combat damage to you, prevent 1 of that damage.
SVar:DBReplace:DB$ ReplaceDamage | Amount$ 1
A:AB$ PumpAll | Cost$ 2 T | ValidCards$ Creature.attacking | NumAtt$ +1 | SpellDescription$ Attacking creatures get +1/+0 until end of turn. A:AB$ PumpAll | Cost$ 2 T | ValidCards$ Creature.attacking | NumAtt$ +1 | SpellDescription$ Attacking creatures get +1/+0 until end of turn.
SVar:X:Count$Valid Card.Self+untapped SVar:X:Count$Valid Card.Self+untapped
SVar:Picture:http://www.wizards.com/global/images/magic/general/thunderstaff.jpg
Oracle:As long as Thunderstaff is untapped, if a creature would deal combat damage to you, prevent 1 of that damage.\n{2}, {T}: Attacking creatures get +1/+0 until end of turn. Oracle:As long as Thunderstaff is untapped, if a creature would deal combat damage to you, prevent 1 of that damage.\n{2}, {T}: Attacking creatures get +1/+0 until end of turn.

View File

@@ -3,9 +3,8 @@ ManaCost:X R R
Types:Sorcery Types:Sorcery
A:SP$ DamageAll | Cost$ X R R | ValidCards$ Creature.withoutFlying | NumDmg$ X | SpellDescription$ CARDNAME deals X damage to each creature without flying. | StackDescription$ SpellDescription A:SP$ DamageAll | Cost$ X R R | ValidCards$ Creature.withoutFlying | NumDmg$ X | SpellDescription$ CARDNAME deals X damage to each creature without flying. | StackDescription$ SpellDescription
SVar:X:Count$xPaid SVar:X:Count$xPaid
S:Mode$ Continuous | Affected$ Creature | AddAbility$ DbPrevent | AddSVar$ TOLOutOfSight & TOLSTPrevent & TOLExileSelf | EffectZone$ Stack | Description$ As long as Torrent of Lava is on the stack, each creature has "{T}: Prevent the next 1 damage that would be dealt to this creature by CARDNAME this turn." S:Mode$ Continuous | Affected$ Creature | AddAbility$ TOPrevent | AddSVar$ DBPrevent & DBReplace | EffectZone$ Stack | Description$ As long as Torrent of Lava is on the stack, each creature has "{T}: Prevent the next 1 damage that would be dealt to this creature by CARDNAME this turn."
SVar:DbPrevent:AB$ Effect | Cost$ T | RememberObjects$ OriginalHost | ImprintCards$ Self | Triggers$ TOLOutOfSight | StaticAbilities$ TOLSTPrevent | SpellDescription$ Prevent the next 1 damage that would be dealt to this creature by Torrent of Lava this turn. | StackDescription$ SpellDescription SVar:TOPrevent:AB$ Effect | Cost$ T | RememberObjects$ Self | ImprintCards$ OriginalHost | ReplacementEffects$ DBPrevent | ForgetOnMoved$ Battlefield | SpellDescription$ Prevent the next 1 damage that would be dealt to this creature by Torrent of Lava this turn. | StackDescription$ SpellDescription
SVar:TOLSTPrevent:Mode$ PreventDamage | EffectZone$ Command | Amount$ 1 | Target$ Card.IsImprinted | Source$ Card.IsRemembered | Description$ Prevent the next 1 damage that would be dealt to this creature by remembered Card this turn. SVar:DBPrevent:Event$ DamageDone | ActiveZones$ Command | ValidSource$ Card.IsImprinted | ValidTarget$ Card.IsRemembered | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ Prevent the next 1 damage that would be dealt to this creature by Torrent of Lava this turn.
SVar:TOLOutOfSight:Mode$ ChangesZone | TriggerZones$ Command | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.IsImprinted | Execute$ TOLExileSelf | Static$ True SVar:DBReplace:DB$ ReplaceDamage | Amount$ 1
SVar:TOLExileSelf:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile Oracle:Torrent of Lava deals X damage to each creature without flying.\nAs long as Torrent of Lava is on the stack, each creature has "{T}: Prevent the next 1 damage that would be dealt to this creature by Torrent of Lava this turn."
Oracle:Torrent of Lava deals X damage to each creature without flying.\nAs long as Torrent of Lava is on the stack, each creature has "{T}: Prevent the next 1 damage that would be dealt to this creature by Torrent of Lava this turn."

View File

@@ -1,6 +1,6 @@
Name:Urza's Armor Name:Urza's Armor
ManaCost:6 ManaCost:6
Types:Artifact Types:Artifact
S:Mode$ PreventDamage | Target$ You | Source$ Card | Amount$ 1 | Description$ If a source would deal damage to you, prevent 1 of that damage. R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ You | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ If a source would deal damage to you, prevent 1 of that damage.
SVar:Picture:http://www.wizards.com/global/images/magic/general/urzas_armor.jpg SVar:DBReplace:DB$ ReplaceDamage | Amount$ 1
Oracle:If a source would deal damage to you, prevent 1 of that damage. Oracle:If a source would deal damage to you, prevent 1 of that damage.

View File

@@ -1345,7 +1345,7 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont
*/ */
@Override @Override
public boolean confirmReplacementEffect(final ReplacementEffect replacementEffect, final SpellAbility effectSA, public boolean confirmReplacementEffect(final ReplacementEffect replacementEffect, final SpellAbility effectSA,
final String question) { GameEntity affected, final String question) {
final InputConfirm inp = new InputConfirm(this, question, effectSA); final InputConfirm inp = new InputConfirm(this, question, effectSA);
inp.showAndWait(); inp.showAndWait();
return inp.getResult(); return inp.getResult();