Merge remote-tracking branch 'core/master'

This commit is contained in:
Anthony Calosa
2022-02-19 13:34:00 +08:00
49 changed files with 227 additions and 89 deletions

View File

@@ -2269,6 +2269,8 @@ public class GameAction {
// Run replacement effect for each entity dealt damage // Run replacement effect for each entity dealt damage
game.getReplacementHandler().runReplaceDamage(isCombat, damageMap, preventMap, counterTable, cause); game.getReplacementHandler().runReplaceDamage(isCombat, damageMap, preventMap, counterTable, cause);
Map<Card, Integer> lethalDamage = Maps.newHashMap();
// Actually deal damage according to replaced damage map // Actually deal damage according to replaced damage map
for (Map.Entry<Card, Map<GameEntity, Integer>> et : damageMap.rowMap().entrySet()) { for (Map.Entry<Card, Map<GameEntity, Integer>> et : damageMap.rowMap().entrySet()) {
final Card sourceLKI = et.getKey(); final Card sourceLKI = et.getKey();
@@ -2277,6 +2279,21 @@ public class GameAction {
if (e.getValue() <= 0) { if (e.getValue() <= 0) {
continue; continue;
} }
if (e.getKey() instanceof Card && !lethalDamage.containsKey(e.getKey())) {
Card c = (Card) e.getKey();
int lethal = 0;
if (c.isCreature()) {
lethal = Math.max(0, c.getLethalDamage());
}
if (c.isPlaneswalker()) {
int lethalPW = c.getCurrentLoyalty();
// 120.10
lethal = c.isCreature() ? Math.min(lethal, lethalPW) : lethalPW;
}
lethalDamage.put(c, lethal);
}
e.setValue(Integer.valueOf(e.getKey().addDamageAfterPrevention(e.getValue(), sourceLKI, isCombat, counterTable))); e.setValue(Integer.valueOf(e.getKey().addDamageAfterPrevention(e.getValue(), sourceLKI, isCombat, counterTable)));
sum += e.getValue(); sum += e.getValue();
} }
@@ -2314,6 +2331,7 @@ public class GameAction {
preventMap.clear(); preventMap.clear();
damageMap.triggerDamageDoneOnce(isCombat, game); damageMap.triggerDamageDoneOnce(isCombat, game);
damageMap.triggerExcessDamage(isCombat, lethalDamage, game);
damageMap.clear(); damageMap.clear();
counterTable.replaceCounterEffect(game, cause, !isCombat); counterTable.replaceCounterEffect(game, cause, !isCombat);

View File

@@ -13,18 +13,23 @@ public class BranchEffect extends SpellAbilityEffect {
// TODO Reuse SpellAbilityCondition and areMet() here instead of repeating each // TODO Reuse SpellAbilityCondition and areMet() here instead of repeating each
// For now branch conditions will only be an Svar Compare int value = 0;
String branchSVar = sa.getParam("BranchConditionSVar"); if (sa.hasParam("BranchCondition")) {
if (sa.getParam("BranchCondition").equals("ChosenCard")) {
value = host.getChosenCards().size();
}
} else {
value = AbilityUtils.calculateAmount(host, sa.getParam("BranchConditionSVar"), sa);
}
String branchCompare = sa.getParamOrDefault("BranchConditionSVarCompare", "GE1"); String branchCompare = sa.getParamOrDefault("BranchConditionSVarCompare", "GE1");
String operator = branchCompare.substring(0, 2); String operator = branchCompare.substring(0, 2);
String operand = branchCompare.substring(2); String operand = branchCompare.substring(2);
final int svarValue = AbilityUtils.calculateAmount(host, branchSVar, sa);
final int operandValue = AbilityUtils.calculateAmount(host, operand, sa); final int operandValue = AbilityUtils.calculateAmount(host, operand, sa);
SpellAbility sub = null; SpellAbility sub = null;
if (Expressions.compare(svarValue, operator, operandValue)) { if (Expressions.compare(value, operator, operandValue)) {
sub = sa.getAdditionalAbility("TrueSubAbility"); sub = sa.getAdditionalAbility("TrueSubAbility");
} else { } else {
sub = sa.getAdditionalAbility("FalseSubAbility"); sub = sa.getAdditionalAbility("FalseSubAbility");

View File

@@ -32,11 +32,22 @@ public class ChooseCardEffect extends SpellAbilityEffect {
@Override @Override
protected String getStackDescription(SpellAbility sa) { protected String getStackDescription(SpellAbility sa) {
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
final int numCards = sa.hasParam("Amount") ?
AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("Amount"), sa) : 1;
for (final Player p : getTargetPlayers(sa)) { sb.append(Lang.joinHomogenous(getTargetPlayers(sa))).append(" ");
sb.append(p).append(" "); if (sa.hasParam("Mandatory")) {
sb.append(getTargetPlayers(sa).size() == 1 ? "chooses " : "choose ");
} else {
sb.append("may choose ");
} }
sb.append("chooses a card."); String desc = sa.getParamOrDefault("ChoiceDesc", "");
desc = desc.isEmpty() ? "card" : desc + " card";
sb.append(Lang.nounWithNumeralExceptOne(numCards, desc));
if (sa.hasParam("FromDesc")) {
sb.append(" ").append(sa.getParam("FromDesc"));
}
sb.append(".");
return sb.toString(); return sb.toString();
} }

View File

@@ -238,7 +238,7 @@ public class DiscardEffect extends SpellAbilityEffect {
if (toBeDiscarded.size() > 1) { if (toBeDiscarded.size() > 1) {
toBeDiscarded = GameActionUtil.orderCardsByTheirOwners(game, toBeDiscarded, ZoneType.Graveyard, sa); toBeDiscarded = GameActionUtil.orderCardsByTheirOwners(game, toBeDiscarded, ZoneType.Graveyard, sa);
} }
} else if (mode.equals("RevealYouChoose") || mode.equals("RevealTgtChoose") || mode.equals("TgtChoose")) { } else if (mode.endsWith("YouChoose") || mode.endsWith("TgtChoose")) {
CardCollectionView dPHand = p.getCardsIn(ZoneType.Hand); CardCollectionView dPHand = p.getCardsIn(ZoneType.Hand);
dPHand = CardLists.filter(dPHand, Presets.NON_TOKEN); dPHand = CardLists.filter(dPHand, Presets.NON_TOKEN);
if (dPHand.isEmpty()) if (dPHand.isEmpty())
@@ -253,15 +253,18 @@ public class DiscardEffect extends SpellAbilityEffect {
CardCollection validCards = CardLists.getValidCards(dPHand, valid, source.getController(), source, sa); CardCollection validCards = CardLists.getValidCards(dPHand, valid, source.getController(), source, sa);
Player chooser = p; Player chooser = p;
if (mode.equals("RevealYouChoose")) { if (mode.endsWith("YouChoose")) {
chooser = source.getController(); chooser = source.getController();
} else if (mode.equals("RevealTgtChoose")) { } else if (mode.endsWith("TgtChoose")) {
chooser = firstTarget; chooser = firstTarget;
} }
if (mode.startsWith("Reveal") && p != chooser) { if (mode.startsWith("Reveal")) {
game.getAction().reveal(dPHand, p); game.getAction().reveal(dPHand, p);
} }
if (mode.startsWith("Look")) {
game.getAction().revealTo(dPHand, chooser);
}
if (!p.canDiscardBy(sa, true)) { if (!p.canDiscardBy(sa, true)) {
continue; continue;
@@ -276,7 +279,7 @@ public class DiscardEffect extends SpellAbilityEffect {
toBeDiscarded = GameActionUtil.orderCardsByTheirOwners(game, toBeDiscarded, ZoneType.Graveyard, sa); toBeDiscarded = GameActionUtil.orderCardsByTheirOwners(game, toBeDiscarded, ZoneType.Graveyard, sa);
} }
if (mode.startsWith("Reveal") ) { if (mode.startsWith("Reveal") && p != chooser) {
p.getController().reveal(toBeDiscarded, ZoneType.Hand, p, Localizer.getInstance().getMessage("lblPlayerHasChosenCardsFrom", chooser.getName())); p.getController().reveal(toBeDiscarded, ZoneType.Hand, p, Localizer.getInstance().getMessage("lblPlayerHasChosenCardsFrom", chooser.getName()));
} }
} }

View File

@@ -97,6 +97,7 @@ public class MillEffect extends SpellAbilityEffect {
sb.append("antes "); sb.append("antes ");
} }
sb.append(Lang.nounWithNumeralExceptOne(numCards, "card")).append(".");
sb.append(numCards == 1 ? "a card" : (Lang.getNumeral(numCards) + " cards")).append("."); sb.append(numCards == 1 ? "a card" : (Lang.getNumeral(numCards) + " cards")).append(".");
return sb.toString(); return sb.toString();

View File

@@ -2155,6 +2155,9 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
} else if (keyword.endsWith(".") && !keyword.startsWith("Haunt")) { } else if (keyword.endsWith(".") && !keyword.startsWith("Haunt")) {
sbLong.append(keyword).append("\r\n"); sbLong.append(keyword).append("\r\n");
} else { } else {
if (keyword.contains("Strike")) {
keyword = keyword.replace("Strike", "strike");
}
sb.append(i !=0 && sb.length() !=0 ? ", " : ""); sb.append(i !=0 && sb.length() !=0 ? ", " : "");
sb.append(i > 0 && sb.length() !=0 ? keyword.toLowerCase() : keyword); sb.append(i > 0 && sb.length() !=0 ? keyword.toLowerCase() : keyword);
} }
@@ -5418,16 +5421,6 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
runParams.put(AbilityKey.DefendingPlayer, game.getCombat() != null ? game.getCombat().getDefendingPlayerRelatedTo(source) : null); runParams.put(AbilityKey.DefendingPlayer, game.getCombat() != null ? game.getCombat().getDefendingPlayerRelatedTo(source) : null);
getGame().getTriggerHandler().runTrigger(TriggerType.DamageDone, runParams, false); getGame().getTriggerHandler().runTrigger(TriggerType.DamageDone, runParams, false);
int excess = 0;
if (isPlaneswalker()) {
excess = damageIn - getCurrentLoyalty();
} else if (getDamage() > getLethal()) {
// Creature already has lethal damage
excess = damageIn;
} else {
excess = damageIn + getDamage() - getLethal();
}
DamageType damageType = DamageType.Normal; DamageType damageType = DamageType.Normal;
if (isPlaneswalker()) { // 120.3c if (isPlaneswalker()) { // 120.3c
subtractCounter(CounterType.get(CounterEnumType.LOYALTY), damageIn); subtractCounter(CounterType.get(CounterEnumType.LOYALTY), damageIn);
@@ -5459,16 +5452,6 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
game.fireEvent(new GameEventCardDamaged(this, source, damageIn, damageType)); game.fireEvent(new GameEventCardDamaged(this, source, damageIn, damageType));
} }
if (excess > 0) {
// Run triggers
runParams = AbilityKey.newMap();
runParams.put(AbilityKey.DamageSource, source);
runParams.put(AbilityKey.DamageTarget, this);
runParams.put(AbilityKey.DamageAmount, excess);
runParams.put(AbilityKey.IsCombatDamage, isCombat);
getGame().getTriggerHandler().runTrigger(TriggerType.ExcessDamage, runParams, false);
}
return damageIn; return damageIn;
} }

View File

@@ -4,6 +4,7 @@
package forge.game.card; package forge.game.card;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import com.google.common.collect.ForwardingTable; import com.google.common.collect.ForwardingTable;
@@ -87,6 +88,26 @@ public class CardDamageMap extends ForwardingTable<Card, GameEntity, Integer> {
runParams.put(AbilityKey.IsCombatDamage, isCombat); runParams.put(AbilityKey.IsCombatDamage, isCombat);
game.getTriggerHandler().runTrigger(TriggerType.DamageAll, runParams, false); game.getTriggerHandler().runTrigger(TriggerType.DamageAll, runParams, false);
} }
public void triggerExcessDamage(boolean isCombat, Map<Card, Integer> lethalDamage, final Game game) {
for (Entry<Card, Integer> damaged : lethalDamage.entrySet()) {
int sum = 0;
for (Integer i : this.column(damaged.getKey()).values()) {
sum += i;
}
int excess = sum - (damaged.getKey().hasBeenDealtDeathtouchDamage() ? 1 : damaged.getValue());
if (excess > 0) {
// Run triggers
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
runParams.put(AbilityKey.DamageTarget, damaged.getKey());
runParams.put(AbilityKey.DamageAmount, excess);
runParams.put(AbilityKey.IsCombatDamage, isCombat);
game.getTriggerHandler().runTrigger(TriggerType.ExcessDamage, runParams, false);
}
}
}
/** /**
* special put logic, sum the values * special put logic, sum the values
*/ */

View File

@@ -319,18 +319,18 @@ public final class StaticAbilityContinuous {
String[] restrictions = params.containsKey("SharedRestrictions") ? params.get("SharedRestrictions").split(",") : new String[] {"Card"}; String[] restrictions = params.containsKey("SharedRestrictions") ? params.get("SharedRestrictions").split(",") : new String[] {"Card"};
addKeywords = CardFactoryUtil.sharedKeywords(addKeywords, restrictions, zones, hostCard, stAb); addKeywords = CardFactoryUtil.sharedKeywords(addKeywords, restrictions, zones, hostCard, stAb);
} }
}
if (params.containsKey("CantHaveKeyword")) { if (params.containsKey("CantHaveKeyword")) {
cantHaveKeyword = Keyword.setValueOf(params.get("CantHaveKeyword")); cantHaveKeyword = Keyword.setValueOf(params.get("CantHaveKeyword"));
} }
if (params.containsKey("RemoveKeyword")) { if (params.containsKey("RemoveKeyword")) {
removeKeywords = Arrays.asList(params.get("RemoveKeyword").split(" & ")); removeKeywords = Arrays.asList(params.get("RemoveKeyword").split(" & "));
}
} }
} }
if ((layer == StaticAbilityLayer.RULES) && params.containsKey("AddHiddenKeyword")) { if (layer == StaticAbilityLayer.RULES && params.containsKey("AddHiddenKeyword")) {
addHiddenKeywords.addAll(Arrays.asList(params.get("AddHiddenKeyword").split(" & "))); addHiddenKeywords.addAll(Arrays.asList(params.get("AddHiddenKeyword").split(" & ")));
} }

View File

@@ -21,7 +21,6 @@ import java.util.Map;
import forge.game.ability.AbilityKey; import forge.game.ability.AbilityKey;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardUtil;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.util.Localizer; import forge.util.Localizer;
@@ -49,9 +48,6 @@ public class TriggerExcessDamage extends Trigger {
* @param runParams*/ * @param runParams*/
@Override @Override
public final boolean performTest(final Map<AbilityKey, Object> runParams) { public final boolean performTest(final Map<AbilityKey, Object> runParams) {
if (!matchesValidParam("ValidSource", runParams.get(AbilityKey.DamageSource))) {
return false;
}
if (!matchesValidParam("ValidTarget", runParams.get(AbilityKey.DamageTarget))) { if (!matchesValidParam("ValidTarget", runParams.get(AbilityKey.DamageTarget))) {
return false; return false;
} }
@@ -68,7 +64,6 @@ public class TriggerExcessDamage extends Trigger {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa, Map<AbilityKey, Object> runParams) { public final void setTriggeringObjects(final SpellAbility sa, Map<AbilityKey, Object> runParams) {
sa.setTriggeringObject(AbilityKey.Source, CardUtil.getLKICopy((Card)runParams.get(AbilityKey.DamageSource)));
sa.setTriggeringObject(AbilityKey.Target, runParams.get(AbilityKey.DamageTarget)); sa.setTriggeringObject(AbilityKey.Target, runParams.get(AbilityKey.DamageTarget));
sa.setTriggeringObjectsFrom(runParams, AbilityKey.DamageAmount); sa.setTriggeringObjectsFrom(runParams, AbilityKey.DamageAmount);
} }
@@ -76,7 +71,6 @@ public class TriggerExcessDamage extends Trigger {
@Override @Override
public String getImportantStackObjects(SpellAbility sa) { public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append(Localizer.getInstance().getMessage("lblDamageSource")).append(": ").append(sa.getTriggeringObject(AbilityKey.Source)).append(", ");
sb.append(Localizer.getInstance().getMessage("lblDamaged")).append(": ").append(sa.getTriggeringObject(AbilityKey.Target)).append(", "); sb.append(Localizer.getInstance().getMessage("lblDamaged")).append(": ").append(sa.getTriggeringObject(AbilityKey.Target)).append(", ");
sb.append(Localizer.getInstance().getMessage("lblAmount")).append(": ").append(sa.getTriggeringObject(AbilityKey.DamageAmount)); sb.append(Localizer.getInstance().getMessage("lblAmount")).append(": ").append(sa.getTriggeringObject(AbilityKey.DamageAmount));
return sb.toString(); return sb.toString();

View File

@@ -1,7 +1,7 @@
Name:Abandon Hope Name:Abandon Hope
ManaCost:X 1 B ManaCost:X 1 B
Types:Sorcery Types:Sorcery
A:SP$ Discard | Cost$ X 1 B Discard<X/Card/card> | ValidTgts$ Opponent | Mode$ RevealYouChoose | NumCards$ X | SpellDescription$ Look at target opponent's hand and choose X cards from it. That player discards those cards. A:SP$ Discard | Cost$ X 1 B Discard<X/Card/card> | ValidTgts$ Opponent | Mode$ LookYouChoose | NumCards$ X | SpellDescription$ Look at target opponent's hand and choose X cards from it. That player discards those cards.
SVar:X:Count$xPaid SVar:X:Count$xPaid
AI:RemoveDeck:All AI:RemoveDeck:All
Oracle:As an additional cost to cast this spell, discard X cards.\nLook at target opponent's hand and choose X cards from it. That player discards those cards. Oracle:As an additional cost to cast this spell, discard X cards.\nLook at target opponent's hand and choose X cards from it. That player discards those cards.

View File

@@ -2,7 +2,7 @@ Name:Captain Eberhart
ManaCost:1 W ManaCost:1 W
Types:Legendary Creature Human Soldier Types:Legendary Creature Human Soldier
PT:1/1 PT:1/1
K:Double strike K:Double Strike
S:Mode$ ReduceCost | ValidCard$ Card.YouOwn+DrawnThisTurn | Type$ Spell | Amount$ 1 | Description$ Spells cast from among cards you drew this turn cost {1} less to cast. S:Mode$ ReduceCost | ValidCard$ Card.YouOwn+DrawnThisTurn | Type$ Spell | Amount$ 1 | Description$ Spells cast from among cards you drew this turn cost {1} less to cast.
S:Mode$ RaiseCost | ValidCard$ Card.OppOwn+DrawnThisTurn | Type$ Spell | Amount$ 1 | Description$ Spells cast from among cards your opponents drew this turn cost {1} more to cast. S:Mode$ RaiseCost | ValidCard$ Card.OppOwn+DrawnThisTurn | Type$ Spell | Amount$ 1 | Description$ Spells cast from among cards your opponents drew this turn cost {1} more to cast.
Oracle:Double strike\nSpells cast from among cards you drew this turn cost {1} less to cast.\nSpells cast from among cards your opponents drew this turn cost {1} more to cast. Oracle:Double strike\nSpells cast from among cards you drew this turn cost {1} less to cast.\nSpells cast from among cards your opponents drew this turn cost {1} more to cast.

View File

@@ -5,5 +5,5 @@ PT:1/1
K:Level up:2 K:Level up:2
SVar:maxLevel:5 SVar:maxLevel:5
S:Mode$ Continuous | Affected$ Card.Self | SetPower$ 2 | SetToughness$ 2 | IsPresent$ Card.Self+counters_GE1_LEVEL+counters_LE4_LEVEL | Description$ LEVEL 1-4 2/2 S:Mode$ Continuous | Affected$ Card.Self | SetPower$ 2 | SetToughness$ 2 | IsPresent$ Card.Self+counters_GE1_LEVEL+counters_LE4_LEVEL | Description$ LEVEL 1-4 2/2
S:Mode$ Continuous | Affected$ Card.Self | SetPower$ 5 | SetToughness$ 5 | IsPresent$ Card.Self+counters_GE5_LEVEL | AddKeyword$ First Strike | Description$ LEVEL 5+ 5/5 CARDNAME has First Strike S:Mode$ Continuous | Affected$ Card.Self | SetPower$ 5 | SetToughness$ 5 | IsPresent$ Card.Self+counters_GE5_LEVEL | AddKeyword$ First Strike | Description$ LEVEL 5+ 5/5 First strike
Oracle:Level up {2} ({2}: Put a level counter on this. Level up only as a sorcery.)\nLEVEL 1-4\n2/2\nLEVEL 5+\n5/5\nFirst strike Oracle:Level up {2} ({2}: Put a level counter on this. Level up only as a sorcery.)\nLEVEL 1-4\n2/2\nLEVEL 5+\n5/5\nFirst strike

View File

@@ -3,6 +3,6 @@ ManaCost:3 B B
Types:Enchantment Types:Enchantment
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | OptionalDecider$ You | TriggerDescription$ At the beginning of your upkeep, you may put a verse counter on CARDNAME. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | OptionalDecider$ You | TriggerDescription$ At the beginning of your upkeep, you may put a verse counter on CARDNAME.
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ VERSE | CounterNum$ 1 SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ VERSE | CounterNum$ 1
A:AB$ Discard | Cost$ B Sac<1/CARDNAME> | ValidTgts$ Opponent | Mode$ RevealYouChoose | NumCards$ X | SpellDescription$ Look at target opponent's hand and choose up to X cards from it, where X is the number of verse counters on CARDNAME. That player discards those cards. A:AB$ Discard | Cost$ B Sac<1/CARDNAME> | ValidTgts$ Opponent | Mode$ LookYouChoose | NumCards$ X | SpellDescription$ Look at target opponent's hand and choose up to X cards from it, where X is the number of verse counters on CARDNAME. That player discards those cards.
SVar:X:Count$CardCounters.VERSE SVar:X:Count$CardCounters.VERSE
Oracle:At the beginning of your upkeep, you may put a verse counter on Discordant Dirge.\n{B}, Sacrifice Discordant Dirge: Look at target opponent's hand and choose up to X cards from it, where X is the number of verse counters on Discordant Dirge. That player discards those cards. Oracle:At the beginning of your upkeep, you may put a verse counter on Discordant Dirge.\n{B}, Sacrifice Discordant Dirge: Look at target opponent's hand and choose up to X cards from it, where X is the number of verse counters on Discordant Dirge. That player discards those cards.

View File

@@ -3,7 +3,7 @@ ManaCost:2 G
Types:Creature Spider Types:Creature Spider
PT:2/3 PT:2/3
K:Reach K:Reach
S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 1 | AddKeyword$ First strike | IsPresent$ Permanent.Red+YouCtrl | Description$ As long as you control a red permanent, CARDNAME gets +1/+0 and has first strike. S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 1 | AddKeyword$ First Strike | IsPresent$ Permanent.Red+YouCtrl | Description$ As long as you control a red permanent, CARDNAME gets +1/+0 and has first strike.
SVar:BuffedBy:Permanent.Red SVar:BuffedBy:Permanent.Red
DeckHints:Color$Red DeckHints:Color$Red
Oracle:Reach (This creature can block creatures with flying.)\nAs long as you control a red permanent, Ember Weaver gets +1/+0 and has first strike. Oracle:Reach (This creature can block creatures with flying.)\nAs long as you control a red permanent, Ember Weaver gets +1/+0 and has first strike.

View File

@@ -1,5 +1,5 @@
Name:Extortion Name:Extortion
ManaCost:3 B B ManaCost:3 B B
Types:Sorcery Types:Sorcery
A:SP$ Discard | Cost$ 3 B B | ValidTgts$ Opponent | Mode$ RevealYouChoose | NumCards$ 2 | SpellDescription$ Look at target player's hand and choose up to two cards from it. That player discards those cards. A:SP$ Discard | Cost$ 3 B B | ValidTgts$ Opponent | Mode$ LookYouChoose | NumCards$ 2 | SpellDescription$ Look at target player's hand and choose up to two cards from it. That player discards those cards.
Oracle:Look at target player's hand and choose up to two cards from it. That player discards those cards. Oracle:Look at target player's hand and choose up to two cards from it. That player discards those cards.

View File

@@ -6,6 +6,6 @@ SVar:TrigAngel:DB$ Token | TokenAmount$ 1 | TokenScript$ w_4_4_angel_warrior_fly
SVar:DBAnimateAll:DB$ AnimateAll | ValidCards$ Angel.YouCtrl | Abilities$ TapDestroy | SpellDescription$ Until the end of turn, Angels you control gain "{T}: Destroy target creature with power less than this creature." SVar:DBAnimateAll:DB$ AnimateAll | ValidCards$ Angel.YouCtrl | Abilities$ TapDestroy | SpellDescription$ Until the end of turn, Angels you control gain "{T}: Destroy target creature with power less than this creature."
SVar:TapDestroy:AB$ Destroy | Cost$ T | ValidTgts$ Creature.powerLTX | TgtPrompt$ Select target creature with power less than this creature | SpellDescription$ Destroy target creature with power less than this creature. SVar:TapDestroy:AB$ Destroy | Cost$ T | ValidTgts$ Creature.powerLTX | TgtPrompt$ Select target creature with power less than this creature | SpellDescription$ Destroy target creature with power less than this creature.
SVar:X:Count$CardPower SVar:X:Count$CardPower
SVar:TrigPump:DB$ PumpAll | ValidCards$ Angel.YouCtrl | KW$ Double Strike | SpellDescription$ Angels you control gain Double Strike until end of turn. SVar:TrigPump:DB$ PumpAll | ValidCards$ Angel.YouCtrl | KW$ Double Strike | SpellDescription$ Angels you control gain double strike until end of turn.
DeckHints:Type$Angel DeckHints:Type$Angel
Oracle:(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)\nI — Create a 4/4 white Angel Warrior creature token with flying and vigilance.\nII — Until end of turn, Angels you control gain "{T}: Destroy target creature with power less than this creature's power."\nIII — Angels you control gain double strike until end of turn. Oracle:(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)\nI — Create a 4/4 white Angel Warrior creature token with flying and vigilance.\nII — Until end of turn, Angels you control gain "{T}: Destroy target creature with power less than this creature's power."\nIII — Angels you control gain double strike until end of turn.

View File

@@ -3,6 +3,6 @@ ManaCost:B B
Types:Enchantment Types:Enchantment
A:AB$ ChangeZone | Cost$ B B | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return CARDNAME to its owner's hand. A:AB$ ChangeZone | Cost$ B B | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return CARDNAME to its owner's hand.
T:Mode$ SpellCast | ValidCard$ Card.Green | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | Execute$ TrigDiscard | OptionalDecider$ You | TriggerDescription$ Whenever an opponent casts a green spell, you may pay {B}{B}. If you do, look at that player's hand and choose a card from it. The player discards that card. T:Mode$ SpellCast | ValidCard$ Card.Green | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | Execute$ TrigDiscard | OptionalDecider$ You | TriggerDescription$ Whenever an opponent casts a green spell, you may pay {B}{B}. If you do, look at that player's hand and choose a card from it. The player discards that card.
SVar:TrigDiscard:AB$ Discard | Cost$ B B | Defined$ TriggeredActivator | NumCards$ 1 | Mode$ RevealYouChoose SVar:TrigDiscard:AB$ Discard | Cost$ B B | Defined$ TriggeredActivator | NumCards$ 1 | Mode$ LookYouChoose
AI:RemoveDeck:Random AI:RemoveDeck:Random
Oracle:Whenever an opponent casts a green spell, you may pay {B}{B}. If you do, look at that player's hand and choose a card from it. The player discards that card.\n{B}{B}: Return Leshrac's Sigil to its owner's hand. Oracle:Whenever an opponent casts a green spell, you may pay {B}{B}. If you do, look at that player's hand and choose a card from it. The player discards that card.\n{B}{B}: Return Leshrac's Sigil to its owner's hand.

View File

@@ -1,6 +1,6 @@
Name:Mind Warp Name:Mind Warp
ManaCost:X 3 B ManaCost:X 3 B
Types:Sorcery Types:Sorcery
A:SP$ Discard | Cost$ X 3 B | ValidTgts$ Player | Mode$ RevealYouChoose | NumCards$ X | SpellDescription$ Target player reveals their hand. You choose X cards from it. That player discards those cards. A:SP$ Discard | Cost$ X 3 B | ValidTgts$ Player | Mode$ LookYouChoose | NumCards$ X | SpellDescription$ Target player reveals their hand. You choose X cards from it. That player discards those cards.
SVar:X:Count$xPaid SVar:X:Count$xPaid
Oracle:Look at target player's hand and choose X cards from it. That player discards those cards. Oracle:Look at target player's hand and choose X cards from it. That player discards those cards.

View File

@@ -4,7 +4,7 @@ Types:Enchantment
A:AB$ GenericChoice | Cost$ G W Discard<1/Card> | ValidTgts$ Creature | Defined$ You | Choices$ DBPutCounter,DBBanding,DBFirstStrike,DBTrample | SpellDescription$ Put a +1/+1 counter on target creature or that creature gains banding, first strike, or trample. A:AB$ GenericChoice | Cost$ G W Discard<1/Card> | ValidTgts$ Creature | Defined$ You | Choices$ DBPutCounter,DBBanding,DBFirstStrike,DBTrample | SpellDescription$ Put a +1/+1 counter on target creature or that creature gains banding, first strike, or trample.
SVar:DBPutCounter:DB$ PutCounter | Defined$ Targeted | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Put a +1/+1 counter on target creature. SVar:DBPutCounter:DB$ PutCounter | Defined$ Targeted | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Put a +1/+1 counter on target creature.
SVar:DBBanding:DB$ Pump | Defined$ Targeted | KW$ Banding | Duration$ Permanent | SpellDescription$ Target creature gains Banding SVar:DBBanding:DB$ Pump | Defined$ Targeted | KW$ Banding | Duration$ Permanent | SpellDescription$ Target creature gains Banding
SVar:DBFirstStrike:DB$ Pump | Defined$ Targeted | KW$ First Strike | Duration$ Permanent | SpellDescription$ Target creature gains First Strike SVar:DBFirstStrike:DB$ Pump | Defined$ Targeted | KW$ First Strike | Duration$ Permanent | SpellDescription$ Target creature gains first strike
SVar:DBTrample:DB$ Pump | Defined$ Targeted | KW$ Trample | Duration$ Permanent | SpellDescription$ Target creature gains Trample SVar:DBTrample:DB$ Pump | Defined$ Targeted | KW$ Trample | Duration$ Permanent | SpellDescription$ Target creature gains Trample
AI:RemoveDeck:All AI:RemoveDeck:All
SVar:NonStackingEffect:True SVar:NonStackingEffect:True

View File

@@ -1,10 +1,11 @@
Name:Nightsnare Name:Nightsnare
ManaCost:3 B ManaCost:3 B
Types:Sorcery Types:Sorcery
A:SP$ RevealHand | Cost$ 3 B | ValidTgts$ Opponent | RememberRevealed$ True | SubAbility$ DBChoose | StackDescription$ SpellDescription | SpellDescription$ Target opponent reveals their hand. You may choose a nonland card from it. If you do, that player discards that card. If you don't, that player discards two cards. A:SP$ RevealHand | ValidTgts$ Opponent | RememberRevealed$ True | SubAbility$ DBChoose | SpellDescription$ Target opponent reveals their hand.
SVar:DBChoose:DB$ ChooseCard | ChoiceZone$ Hand | Amount$ 1 | Choices$ Card.nonLand+IsRemembered | SubAbility$ DBDiscard | ChoiceTitle$ You may choose a nonland card | StackDescription$ None SVar:DBChoose:DB$ ChooseCard | ChoiceZone$ Hand | Amount$ 1 | Choices$ Card.nonLand+IsRemembered | ChoiceDesc$ nonland | FromDesc$ from it | SubAbility$ DBBranch | ChoiceTitle$ You may choose a nonland card | SpellDescription$ You may choose a nonland card from it.
SVar:DBDiscard:DB$ Discard | DefinedCards$ ChosenCard | Defined$ Targeted | Mode$ Defined | SubAbility$ DBCleanup | StackDescription$ None | ConditionDefined$ ChosenCard | ConditionPresent$ Card | ConditionCompare$ EQ1 | SubAbility$ DBDiscard2 SVar:DBBranch:DB$ Branch | BranchCondition$ ChosenCard | TrueSubAbility$ DBDiscard | FalseSubAbility$ DBDiscard2 | StackDescription$ If they do, {p:Targeted} discards that card. If they don't, {p:Targeted} discards two cards. | SpellDescription$ If you do, that player discards that card. If you don't, that player discards two cards.
SVar:DBDiscard2:DB$ Discard | Defined$ Targeted | NumCards$ 2 | Mode$ TgtChoose | SubAbility$ DBCleanup | ConditionDefined$ ChosenCard | ConditionPresent$ Card | ConditionCompare$ EQ0 | StackDescription$ None SVar:DBDiscard:DB$ Discard | DefinedCards$ ChosenCard | Defined$ Targeted | Mode$ Defined | SubAbility$ DBCleanup
SVar:DBDiscard2:DB$ Discard | Defined$ Targeted | NumCards$ 2 | Mode$ TgtChoose | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True
AI:RemoveDeck:All DeckHas:Ability$Discard
Oracle:Target opponent reveals their hand. You may choose a nonland card from it. If you do, that player discards that card. If you don't, that player discards two cards. Oracle:Target opponent reveals their hand. You may choose a nonland card from it. If you do, that player discards that card. If you don't, that player discards two cards.

View File

@@ -4,6 +4,6 @@ Types:Creature Vampire Warrior
PT:3/2 PT:3/2
K:Level up:2 B K:Level up:2 B
SVar:maxLevel:3 SVar:maxLevel:3
S:Mode$ Continuous | Affected$ Card.Self | SetPower$ 4 | SetToughness$ 3 | AddKeyword$ Deathtouch | IsPresent$ Card.Self+counters_GE1_LEVEL+counters_LE2_LEVEL | Description$ LEVEL 1-2 4/3 CARDNAME has Deathtouch S:Mode$ Continuous | Affected$ Card.Self | SetPower$ 4 | SetToughness$ 3 | AddKeyword$ Deathtouch | IsPresent$ Card.Self+counters_GE1_LEVEL+counters_LE2_LEVEL | Description$ LEVEL 1-2 4/3 Deathtouch
S:Mode$ Continuous | Affected$ Card.Self | SetPower$ 5 | SetToughness$ 4 | AddKeyword$ First Strike & Deathtouch | IsPresent$ Card.Self+counters_GE3_LEVEL | Description$ LEVEL 3+ 5/4 CARDNAME has First Strike and Deathtouch S:Mode$ Continuous | Affected$ Card.Self | SetPower$ 5 | SetToughness$ 4 | AddKeyword$ First Strike & Deathtouch | IsPresent$ Card.Self+counters_GE3_LEVEL | Description$ LEVEL 3+ 5/4 First strike, deathtouch
Oracle:Level up {2}{B} ({2}{B}: Put a level counter on this. Level up only as a sorcery.)\nLEVEL 1-2\n4/3\nDeathtouch\nLEVEL 3+\n5/4\nFirst strike, deathtouch Oracle:Level up {2}{B} ({2}{B}: Put a level counter on this. Level up only as a sorcery.)\nLEVEL 1-2\n4/3\nDeathtouch\nLEVEL 3+\n5/4\nFirst strike, deathtouch

View File

@@ -2,5 +2,5 @@ Name:Seer's Vision
ManaCost:2 U B ManaCost:2 U B
Types:Enchantment Types:Enchantment
S:Mode$ Continuous | AffectedZone$ Hand | Affected$ Card.OppOwn | MayLookAt$ Player | Description$ Your opponents play with their hands revealed. S:Mode$ Continuous | AffectedZone$ Hand | Affected$ Card.OppOwn | MayLookAt$ Player | Description$ Your opponents play with their hands revealed.
A:AB$ Discard | Cost$ Sac<1/CARDNAME> | ValidTgts$ Player | TgtPrompt$ Select target player. | Mode$ RevealYouChoose | NumCards$ 1 | SorcerySpeed$ True | SpellDescription$ Look at target player's hand and choose a card from it. That player discards that card. Activate only as a sorcery. A:AB$ Discard | Cost$ Sac<1/CARDNAME> | ValidTgts$ Player | TgtPrompt$ Select target player. | Mode$ LookYouChoose | NumCards$ 1 | SorcerySpeed$ True | SpellDescription$ Look at target player's hand and choose a card from it. That player discards that card. Activate only as a sorcery.
Oracle:Your opponents play with their hands revealed.\nSacrifice Seer's Vision: Look at target player's hand and choose a card from it. That player discards that card. Activate only as a sorcery. Oracle:Your opponents play with their hands revealed.\nSacrifice Seer's Vision: Look at target player's hand and choose a card from it. That player discards that card. Activate only as a sorcery.

View File

@@ -1,5 +1,5 @@
Name:Skillful Lunge Name:Skillful Lunge
ManaCost:1 W ManaCost:1 W
Types:Instant Types:Instant
A:SP$ Pump | Cost$ 1 W | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +2 | KW$ First Strike | SpellDescription$ Target creature gets +2/+0 and gains First Strike until end of turn. A:SP$ Pump | Cost$ 1 W | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +2 | KW$ First Strike | SpellDescription$ Target creature gets +2/+0 and gains first strike until end of turn.
Oracle:Target creature gets +2/+0 and gains first strike until end of turn. Oracle:Target creature gets +2/+0 and gains first strike until end of turn.

View File

@@ -3,5 +3,5 @@ ManaCost:1 B R
Types:Creature Vampire Soldier Types:Creature Vampire Soldier
PT:2/2 PT:2/2
K:First Strike K:First Strike
S:Mode$ Continuous | Affected$ Creature.Vampire+Other+YouCtrl | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ First Strike | Description$ Other Vampire creatures you control get +1/+1 and have First Strike. S:Mode$ Continuous | Affected$ Creature.Vampire+Other+YouCtrl | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ First Strike | Description$ Other Vampire creatures you control get +1/+1 and have first strike.
Oracle:First strike\nOther Vampire creatures you control get +1/+1 and have first strike. Oracle:First strike\nOther Vampire creatures you control get +1/+1 and have first strike.

View File

@@ -4,6 +4,6 @@ Types:Creature Human Knight
PT:1/1 PT:1/1
K:Level up:W K:Level up:W
SVar:maxLevel:7 SVar:maxLevel:7
S:Mode$ Continuous | Affected$ Card.Self | SetPower$ 3 | SetToughness$ 3 | AddKeyword$ First Strike | IsPresent$ Card.Self+counters_GE2_LEVEL+counters_LE6_LEVEL | Description$ LEVEL 2-6 3/3 CARDNAME has First Strike S:Mode$ Continuous | Affected$ Card.Self | SetPower$ 3 | SetToughness$ 3 | AddKeyword$ First Strike | IsPresent$ Card.Self+counters_GE2_LEVEL+counters_LE6_LEVEL | Description$ LEVEL 2-6 3/3 First strike
S:Mode$ Continuous | Affected$ Card.Self | SetPower$ 4 | SetToughness$ 4 | AddKeyword$ Double Strike | IsPresent$ Card.Self+counters_GE7_LEVEL | Description$ LEVEL 7+ 4/4 CARDNAME has Double Strike S:Mode$ Continuous | Affected$ Card.Self | SetPower$ 4 | SetToughness$ 4 | AddKeyword$ Double Strike | IsPresent$ Card.Self+counters_GE7_LEVEL | Description$ LEVEL 7+ 4/4 Double strike
Oracle:Level up {W} ({W}: Put a level counter on this. Level up only as a sorcery.)\nLEVEL 2-6\n3/3\nFirst strike\nLEVEL 7+\n4/4\nDouble strike Oracle:Level up {W} ({W}: Put a level counter on this. Level up only as a sorcery.)\nLEVEL 2-6\n3/3\nFirst strike\nLEVEL 7+\n4/4\nDouble strike

View File

@@ -2,5 +2,5 @@ Name:Thrull Surgeon
ManaCost:1 B ManaCost:1 B
Types:Creature Thrull Types:Creature Thrull
PT:1/1 PT:1/1
A:AB$ Discard | Cost$ 1 B Sac<1/CARDNAME> | ValidTgts$ Player | TgtPrompt$ Select target player. | Mode$ RevealYouChoose | NumCards$ 1 | SorcerySpeed$ True | SpellDescription$ Look at target player's hand and choose a card from it. That player discards that card. Activate only as a sorcery. A:AB$ Discard | Cost$ 1 B Sac<1/CARDNAME> | ValidTgts$ Player | TgtPrompt$ Select target player. | Mode$ LookYouChoose | NumCards$ 1 | SorcerySpeed$ True | SpellDescription$ Look at target player's hand and choose a card from it. That player discards that card. Activate only as a sorcery.
Oracle:{1}{B}, Sacrifice Thrull Surgeon: Look at target player's hand and choose a card from it. That player discards that card. Activate only as a sorcery. Oracle:{1}{B}, Sacrifice Thrull Surgeon: Look at target player's hand and choose a card from it. That player discards that card. Activate only as a sorcery.

View File

@@ -16,7 +16,7 @@ Colors:white
Types:Enchantment Aura Types:Enchantment Aura
K:Enchant creature K:Enchant creature
A:SP$ Attach | ValidTgts$ Creature | TgtPrompt$ Select target creature | AILogic$ Pump A:SP$ Attach | ValidTgts$ Creature | TgtPrompt$ Select target creature | AILogic$ Pump
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Double strike | Description$ Enchanted creature has double strike. S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Double Strike | Description$ Enchanted creature has double strike.
R:Event$ Moved | ValidCard$ Card.Self | Destination$ Graveyard | ReplaceWith$ Exile | Description$ If CARDNAME would be put into a graveyard from anywhere, exile it instead. R:Event$ Moved | ValidCard$ Card.Self | Destination$ Graveyard | ReplaceWith$ Exile | Description$ If CARDNAME would be put into a graveyard from anywhere, exile it instead.
SVar:Exile:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Exile | Defined$ ReplacedCard SVar:Exile:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Exile | Defined$ ReplacedCard
Oracle:Enchant creature\nEnchanted creature has double strike.\nIf Twinblade Invocation would be put into a graveyard from anywhere, exile it instead. Oracle:Enchant creature\nEnchanted creature has double strike.\nIf Twinblade Invocation would be put into a graveyard from anywhere, exile it instead.

View File

@@ -6,7 +6,7 @@ A:AB$ Pump | Cost$ 0 | Defined$ Self | NumAtt$ -1 | NumDef$ -1 | SubAbility$ DBC
SVar:DBChoose:DB$ GenericChoice | Defined$ You | Choices$ DBFlying,DBBanding,DBFirstStrike,DBTrample SVar:DBChoose:DB$ GenericChoice | Defined$ You | Choices$ DBFlying,DBBanding,DBFirstStrike,DBTrample
SVar:DBFlying:DB$ Pump | KW$ Flying | Defined$ Self | SpellDescription$ Target creature gains Flying until end of turn. SVar:DBFlying:DB$ Pump | KW$ Flying | Defined$ Self | SpellDescription$ Target creature gains Flying until end of turn.
SVar:DBBanding:DB$ Pump | KW$ Banding | Defined$ Self | SpellDescription$ Target creature gains Banding until end of turn. SVar:DBBanding:DB$ Pump | KW$ Banding | Defined$ Self | SpellDescription$ Target creature gains Banding until end of turn.
SVar:DBFirstStrike:DB$ Pump | KW$ First Strike | Defined$ Self | SpellDescription$ Target creature gains First Strike until end of turn. SVar:DBFirstStrike:DB$ Pump | KW$ First Strike | Defined$ Self | SpellDescription$ Target creature gains first strike until end of turn.
SVar:DBTrample:DB$ Pump | KW$ Trample | Defined$ Self | SpellDescription$ Target creature gains Trample until end of turn. SVar:DBTrample:DB$ Pump | KW$ Trample | Defined$ Self | SpellDescription$ Target creature gains Trample until end of turn.
AI:RemoveDeck:All AI:RemoveDeck:All
Oracle:{0}: Urza's Avenger gets -1/-1 and gains your choice of banding, flying, first strike, or trample until end of turn. (Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding you control are blocking or being blocked by a creature, you divide that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.) Oracle:{0}: Urza's Avenger gets -1/-1 and gains your choice of banding, flying, first strike, or trample until end of turn. (Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding you control are blocking or being blocked by a creature, you divide that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.)

View File

@@ -3,5 +3,5 @@ ManaCost:2 W
Types:Creature Fox Ninja Types:Creature Fox Ninja
PT:2/2 PT:2/2
K:Ninjutsu:3 W K:Ninjutsu:3 W
K:Double strike K:Double Strike
Oracle:Ninjutsu {3}{W} ({3}{W}, Return an unblocked attacker you control to hand: Put this card onto the battlefield from your hand tapped and attacking.)\nDouble strike Oracle:Ninjutsu {3}{W} ({3}{W}, Return an unblocked attacker you control to hand: Put this card onto the battlefield from your hand tapped and attacking.)\nDouble strike

View File

@@ -3,7 +3,7 @@ ManaCost:3 G
Types:Enchantment Saga Types:Enchantment Saga
K:Saga:3:DBSearch,DBPut,DBTransform K:Saga:3:DBSearch,DBPut,DBTransform
SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Forest.Basic | ChangeNum$ 2 | SpellDescription$ Search your library for up to two basic Forest cards, reveal them, put them into your hand, then shuffle. SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Forest.Basic | ChangeNum$ 2 | SpellDescription$ Search your library for up to two basic Forest cards, reveal them, put them into your hand, then shuffle.
SVar:DBPut:DB$ ChangeZone | Origin$ Graveyard | Destination$ Library | LibraryPosition$ 0 | ValidTgts$ Land | TgtPrompt$ Select up to one target land card | TargetMin$ 0 | TargetMax$ 1 | SpellDescription$ Put up to one target land card from your graveyard on top of your library. SVar:DBPut:DB$ ChangeZone | Origin$ Graveyard | Destination$ Library | LibraryPosition$ 0 | ValidTgts$ Land.YouOwn | TgtPrompt$ Select up to one target land card | TargetMin$ 0 | TargetMax$ 1 | SpellDescription$ Put up to one target land card from your graveyard on top of your library.
SVar:DBTransform:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBReturn | SpellDescription$ Exile this Saga, then return it to the battlefield transformed under your control. SVar:DBTransform:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBReturn | SpellDescription$ Exile this Saga, then return it to the battlefield transformed under your control.
SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | Transformed$ True | GainControl$ True | SubAbility$ DBCleanup SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | Transformed$ True | GainControl$ True | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True

View File

@@ -5,10 +5,10 @@ K:Equip:1
S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 2 | Description$ Equipped creature gets +2/+0. S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 2 | Description$ Equipped creature gets +2/+0.
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.EquippedBy | Execute$ TrigExile | TriggerDescription$ Whenever equipped creature dies, exile it. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.EquippedBy | Execute$ TrigExile | TriggerDescription$ Whenever equipped creature dies, exile it.
SVar:TrigExile:DB$ ChangeZone | Defined$ TriggeredCard | Origin$ Graveyard | Destination$ Exile | RememberChanged$ True SVar:TrigExile:DB$ ChangeZone | Defined$ TriggeredCard | Origin$ Graveyard | Destination$ Exile | RememberChanged$ True
S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddKeyword$ Flying & First strike & Double strike & Deathtouch & Haste & Hexproof & Indestructible & Lifelink & Menace & Protection & Reach & Trample & Vigilance | SharedKeywordsZone$ Exile | SharedRestrictions$ Card.IsRemembered+ExiledWithSource | Description$ As long as a card exiled with CARDNAME has flying, equipped creature has flying. The same is true for first strike, double strike, deathtouch, haste, hexproof, indestructible, lifelink, menace, protection, reach, trample, and vigilance. S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddKeyword$ Flying & First Strike & Double Strike & Deathtouch & Haste & Hexproof & Indestructible & Lifelink & Menace & Protection & Reach & Trample & Vigilance | SharedKeywordsZone$ Exile | SharedRestrictions$ Card.IsRemembered+ExiledWithSource | Description$ As long as a card exiled with CARDNAME has flying, equipped creature has flying. The same is true for first strike, double strike, deathtouch, haste, hexproof, indestructible, lifelink, menace, protection, reach, trample, and vigilance.
T:Mode$ ChangesZone | Origin$ Exile | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered | Execute$ DBForget T:Mode$ ChangesZone | Origin$ Exile | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered | Execute$ DBForget
SVar:DBForget:DB$ Pump | ForgetObjects$ TriggeredCard SVar:DBForget:DB$ Pump | ForgetObjects$ TriggeredCard
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Static$ True | ValidCard$ Card.Self | Execute$ DBCleanup T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Static$ True | ValidCard$ Card.Self | Execute$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
DeckHints:Keyword$Flying|First strike|Double strike|Deathtouch|Haste|Hexproof|Indestructible|Lifelink|Menace|Protection|Reach|Trample|Vigilance DeckHints:Keyword$Flying|First Strike|Double Strike|Deathtouch|Haste|Hexproof|Indestructible|Lifelink|Menace|Protection|Reach|Trample|Vigilance
Oracle:Whenever equipped creature dies, exile it.\nEquipped creature gets +2/+0.\nAs long as a card exiled with Eater of Virtue has flying, equipped creature has flying. The same is true for first strike, double strike, deathtouch, haste, hexproof, indestructible, lifelink, menace, protection, reach, trample, and vigilance.\nEquip {1} Oracle:Whenever equipped creature dies, exile it.\nEquipped creature gets +2/+0.\nAs long as a card exiled with Eater of Virtue has flying, equipped creature has flying. The same is true for first strike, double strike, deathtouch, haste, hexproof, indestructible, lifelink, menace, protection, reach, trample, and vigilance.\nEquip {1}

View File

@@ -18,5 +18,5 @@ ManaCost:no cost
Colors:white Colors:white
Types:Enchantment Creature Human Monk Types:Enchantment Creature Human Monk
PT:2/2 PT:2/2
K:First strike K:First Strike
Oracle:First strike Oracle:First strike

View File

@@ -2,7 +2,7 @@ Name:Go-Shintai of Ancient Wars
ManaCost:2 R ManaCost:2 R
Types:Legendary Enchantment Creature Shrine Types:Legendary Enchantment Creature Shrine
PT:2/2 PT:2/2
K:First strike K:First Strike
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigImmediateTrig | TriggerDescription$ At the beginning of your end step, you may pay {1}. When you do, CARDNAME deals X damage to target player or planeswalker, where X is the number of Shrines you control. T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigImmediateTrig | TriggerDescription$ At the beginning of your end step, you may pay {1}. When you do, CARDNAME deals X damage to target player or planeswalker, where X is the number of Shrines you control.
SVar:TrigImmediateTrig:AB$ ImmediateTrigger | Cost$ 1 | Execute$ TrigDealDamage | SpellDescription$ CARDNAME deals X damage to target player or planeswalker, where X is the number of Shrines you control. SVar:TrigImmediateTrig:AB$ ImmediateTrigger | Cost$ 1 | Execute$ TrigDealDamage | SpellDescription$ CARDNAME deals X damage to target player or planeswalker, where X is the number of Shrines you control.
SVar:TrigDealDamage:DB$ DealDamage | ValidTgts$ Player,Planeswalker | TgtPrompt$ Select target player or planeswalker | NumDmg$ X SVar:TrigDealDamage:DB$ DealDamage | ValidTgts$ Player,Planeswalker | TgtPrompt$ Select target player or planeswalker | NumDmg$ X

View File

@@ -4,7 +4,7 @@ Types:Creature Fox Pilot
PT:2/2 PT:2/2
T:Mode$ Attacks | ValidCard$ Vehicle.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigCharm | TriggerDescription$ Whenever a Vehicle you control attacks, ABILITY T:Mode$ Attacks | ValidCard$ Vehicle.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigCharm | TriggerDescription$ Whenever a Vehicle you control attacks, ABILITY
SVar:TrigCharm:DB$ Charm | Choices$ DBPump,DBUntap SVar:TrigCharm:DB$ Charm | Choices$ DBPump,DBUntap
SVar:DBPump:DB$ Pump | Defined$ TriggeredAttacker | KW$ First strike | SpellDescription$ That Vehicle gains first strike until end of turn SVar:DBPump:DB$ Pump | Defined$ TriggeredAttacker | KW$ First Strike | SpellDescription$ That Vehicle gains first strike until end of turn
SVar:DBUntap:DB$ Untap | Defined$ Self | SpellDescription$ Untap CARDNAME SVar:DBUntap:DB$ Untap | Defined$ Self | SpellDescription$ Untap CARDNAME
DeckNeeds:Type$Vehicle DeckNeeds:Type$Vehicle
Oracle:Whenever a Vehicle you control attacks, choose one —\n• That Vehicle gains first strike until end of turn.\n• Untap Kitsune Ace. Oracle:Whenever a Vehicle you control attacks, choose one —\n• That Vehicle gains first strike until end of turn.\n• Untap Kitsune Ace.

View File

@@ -2,7 +2,7 @@ Name:Lizard Blades
ManaCost:1 R ManaCost:1 R
Types:Artifact Creature Equipment Lizard Types:Artifact Creature Equipment Lizard
PT:1/1 PT:1/1
K:Double strike K:Double Strike
S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddKeyword$ Double strike | Description$ Equipped creature has double strike. S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddKeyword$ Double Strike | Description$ Equipped creature has double strike.
K:Reconfigure:2 K:Reconfigure:2
Oracle:Trample\nEquipped creature has double strike.\nReconfigure {2} ({2}: Attach to target creature you control; or unattach from a creature. Reconfigure only as a sorcery. While attached, this isn't a creature.) Oracle:Trample\nEquipped creature has double strike.\nReconfigure {2} ({2}: Attach to target creature you control; or unattach from a creature. Reconfigure only as a sorcery. While attached, this isn't a creature.)

View File

@@ -1,7 +1,7 @@
Name:March of Burgeoning Life Name:March of Burgeoning Life
ManaCost:X G ManaCost:X G
Types:Instant Types:Instant
A:SP$ Pump | AnnounceTitle$ how many green cards to exile | Announce$ Exiled | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature.cmcLTX | TgtPrompt$ Choose target creature with mana value less than X | SubAbility$ DBSearch | StackDescription$ None | SpellDescription$ Choose target creature with mana value less than X. Search your library for a creature card with the same name as that creature, put it onto the battlefield tapped, then shuffle. A:SP$ Pump | AnnounceTitle$ how many green cards to exile | Announce$ Exiled | ValidTgts$ Creature.cmcLTX | TgtPrompt$ Choose target creature with mana value less than X | SubAbility$ DBSearch | StackDescription$ None | SpellDescription$ Choose target creature with mana value less than X. Search your library for a creature card with the same name as that creature, put it onto the battlefield tapped, then shuffle.
SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Targeted.Creature+sameName | ChangeTypeDesc$ creature card with the same name as {c:Targeted} | ChangeNum$ 1 | Mandatory$ True | Tapped$ True SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Targeted.Creature+sameName | ChangeTypeDesc$ creature card with the same name as {c:Targeted} | ChangeNum$ 1 | Mandatory$ True | Tapped$ True
S:Mode$ RaiseCost | ValidCard$ Card.Self | Type$ Spell | Cost$ ExileFromHand<Y/Card.Green/green cards> | EffectZone$ All | Description$ As an additional cost to cast this spell, you may exile any number of green cards from your hand. This spell costs {2} less to cast for each card exiled this way. S:Mode$ RaiseCost | ValidCard$ Card.Self | Type$ Spell | Cost$ ExileFromHand<Y/Card.Green/green cards> | EffectZone$ All | Description$ As an additional cost to cast this spell, you may exile any number of green cards from your hand. This spell costs {2} less to cast for each card exiled this way.
S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Z | EffectZone$ All | Relative$ True | Secondary$ True | Description$ This spell costs {2} less to cast for each card exiled this way. S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Z | EffectZone$ All | Relative$ True | Secondary$ True | Description$ This spell costs {2} less to cast for each card exiled this way.

View File

@@ -0,0 +1,11 @@
Name:March of Otherworldly Light
ManaCost:X W
Types:Instant
A:SP$ ChangeZone | AnnounceTitle$ how many white cards to exile | Announce$ Exiled | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Artifact.cmcLEX,Creature.cmcLEX,Enchantment.cmcLEX | TgtPrompt$ Select target artifact, creature, or enchantment with mana value X or less | SpellDescription$ Exile target artifact, creature, or enchantment with mana value X or less.
S:Mode$ RaiseCost | ValidCard$ Card.Self | Type$ Spell | Cost$ ExileFromHand<Y/Card.White/white cards> | EffectZone$ All | Description$ As an additional cost to cast this spell, you may exile any number of white cards from your hand. This spell costs {2} less to cast for each card exiled this way.
S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Z | EffectZone$ All | Relative$ True | Secondary$ True | Description$ This spell costs {2} less to cast for each card exiled this way.
SVar:X:Count$xPaid
SVar:Y:SVar$Exiled
SVar:Z:SVar$Y/Times.2
SVar:Exiled:Number$0
Oracle:As an additional cost to cast this spell, you may exile any number of white cards from your hand. This spell costs {2} less to cast for each card exiled this way.\nExile target artifact, creature, or enchantment with mana value X or less.

View File

@@ -1,14 +1,14 @@
Name:March of Reckless Joy Name:March of Reckless Joy
ManaCost:X R ManaCost:X R
Types:Instant Types:Instant
A:SP$ Dig | Cost$ X R | AdditionalDesc$ This spell costs {2} less to cast for each card exiled this way. | AnnounceTitle$ how many red cards to exile | Announce$ Exiled | DB$ Dig | Defined$ You | DigNum$ X | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBEffect | SpellDescription$ Exile the top X cards of your library. Until the end of your next turn, you may play up to two of those cards. A:SP$ Dig | Cost$ X R | AdditionalDesc$ This spell costs {2} less to cast for each card exiled this way. | AnnounceTitle$ how many red cards to exile | Announce$ Exiled | Defined$ You | DigNum$ X | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBEffect | SpellDescription$ Exile the top X cards of your library. You may play up to two of those cards until the end of your next turn.
S:Mode$ RaiseCost | ValidCard$ Card.Self | Type$ Spell | Cost$ ExileFromHand<Y/Card.Red/red cards> | EffectZone$ All | Description$ As an additional cost to cast this spell, you may exile any number of red cards from your hand. This spell costs {2} less to cast for each card exiled this way. S:Mode$ RaiseCost | ValidCard$ Card.Self | Type$ Spell | Cost$ ExileFromHand<Y/Card.Red/red cards> | EffectZone$ All | Description$ As an additional cost to cast this spell, you may exile any number of red cards from your hand. This spell costs {2} less to cast for each card exiled this way.
S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Z | EffectZone$ All | Relative$ True | Secondary$ True | Description$ This spell costs {2} less to cast for each card exiled this way. S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Z | EffectZone$ All | Relative$ True | Secondary$ True | Description$ This spell costs {2} less to cast for each card exiled this way.
SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ MayPlay | Duration$ UntilTheEndOfYourNextTurn | ForgetOnMoved$ Exile | SubAbility$ DBCleanup SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ MayPlay | Duration$ UntilTheEndOfYourNextTurn | ForgetOnMoved$ Exile | SubAbility$ DBCleanup | SpellDescription$ You may play up to two of those cards until the end of your next turn.
SVar:MayPlay:Mode$ Continuous | Affected$ Card.IsRemembered | MayPlay$ True | MayPlayLimit$ 2 | EffectZone$ Command | AffectedZone$ Exile | Description$ Until the end of your next turn, you may play up to two of those cards. SVar:MayPlay:Mode$ Continuous | Affected$ Card.IsRemembered | MayPlay$ True | MayPlayLimit$ 2 | EffectZone$ Command | AffectedZone$ Exile | Description$ You may play up to two of those cards until the end of your next turn.
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Count$xPaid SVar:X:Count$xPaid
SVar:Y:SVar$Exiled SVar:Y:SVar$Exiled
SVar:Z:SVar$Y/Times.2 SVar:Z:SVar$Y/Times.2
SVar:Exiled:Number$0 SVar:Exiled:Number$0
Oracle:As an additional cost to cast this spell, you may exile any number of red cards from your hand. This spell costs {2} less to cast for each card exiled this way.\nExile the top X cards of your library. Until the end of your next turn, you may play up to two of those cards. Oracle:As an additional cost to cast this spell, you may exile any number of red cards from your hand. This spell costs {2} less to cast for each card exiled this way.\nExile the top X cards of your library. You may play up to two of those cards until the end of your next turn.

View File

@@ -0,0 +1,11 @@
Name:March of Swirling Mist
ManaCost:X U
Types:Instant
A:SP$ Phases | AnnounceTitle$ how many blue cards to exile | Announce$ Exiled | ValidTgts$ Creature | TgtPrompt$ Select up to X target creatures | TargetMin$ 0 | TargetMax$ X | SpellDescription$ Up to X target creatures phase out. (While they're phased out, they're treated as though they don't exist. Each one phases in before its controller untaps during their next untap step.)
S:Mode$ RaiseCost | ValidCard$ Card.Self | Type$ Spell | Cost$ ExileFromHand<Y/Card.Blue/blue cards> | EffectZone$ All | Description$ As an additional cost to cast this spell, you may exile any number of blue cards from your hand. This spell costs {2} less to cast for each card exiled this way.
S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Z | EffectZone$ All | Relative$ True | Secondary$ True | Description$ This spell costs {2} less to cast for each card exiled this way.
SVar:X:Count$xPaid
SVar:Y:SVar$Exiled
SVar:Z:SVar$Y/Times.2
SVar:Exiled:Number$0
Oracle:As an additional cost to cast this spell, you may exile any number of blue cards from your hand. This spell costs {2} less to cast for each card exiled this way.\nUp to X target creatures phase out. (While they're phased out, they're treated as though they don't exist. Each one phases in before its controller untaps during their next untap step.)

View File

@@ -0,0 +1,13 @@
Name:March of Wretched Sorrow
ManaCost:X B
Types:Instant
A:SP$ DealDamage | AnnounceTitle$ how many black cards to exile | Announce$ Exiled | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | NumDmg$ X | SubAbility$ DBGainLife | SpellDescription$ CARDNAME deals X damage to target creature or planeswalker
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ X | SpellDescription$ and you gain X life.
S:Mode$ RaiseCost | ValidCard$ Card.Self | Type$ Spell | Cost$ ExileFromHand<Y/Card.Black/black cards> | EffectZone$ All | Description$ As an additional cost to cast this spell, you may exile any number of black cards from your hand. This spell costs {2} less to cast for each card exiled this way.
S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Z | EffectZone$ All | Relative$ True | Secondary$ True | Description$ This spell costs {2} less to cast for each card exiled this way.
SVar:X:Count$xPaid
SVar:Y:SVar$Exiled
SVar:Z:SVar$Y/Times.2
SVar:Exiled:Number$0
DeckHas:Ability$LifeGain
Oracle:As an additional cost to cast this spell, you may exile any number of black cards from your hand. This spell costs {2} less to cast for each card exiled this way.\nMarch of Wretched Sorrow deals X damage to target creature or planeswalker and you gain X life.

View File

@@ -2,7 +2,7 @@ Name:Raiyuu, Storm's Edge
ManaCost:2 R W ManaCost:2 R W
Types:Legendary Creature Human Samurai Types:Legendary Creature Human Samurai
PT:3/3 PT:3/3
K:First strike K:First Strike
T:Mode$ Attacks | ValidCard$ Samurai.YouCtrl,Warrior.YouCtrl | Alone$ True | TriggerZones$ Battlefield | Execute$ TrigUntap | TriggerDescription$ Whenever a Samurai or Warrior you control attacks alone, untap it. If it's the first combat phase of the turn, there is an additional combat phase after this phase. T:Mode$ Attacks | ValidCard$ Samurai.YouCtrl,Warrior.YouCtrl | Alone$ True | TriggerZones$ Battlefield | Execute$ TrigUntap | TriggerDescription$ Whenever a Samurai or Warrior you control attacks alone, untap it. If it's the first combat phase of the turn, there is an additional combat phase after this phase.
SVar:TrigUntap:DB$ Untap | Defined$ TriggeredAttacker | SubAbility$ DBAddPhase SVar:TrigUntap:DB$ Untap | Defined$ TriggeredAttacker | SubAbility$ DBAddPhase
SVar:DBAddPhase:DB$ AddPhase | ExtraPhase$ Combat | ConditionFirstCombat$ True | AfterPhase$ EndCombat SVar:DBAddPhase:DB$ AddPhase | ExtraPhase$ Combat | ConditionFirstCombat$ True | AfterPhase$ EndCombat

View File

@@ -0,0 +1,12 @@
Name:Reckoner Shakedown
ManaCost:2 B
Types:Sorcery
A:SP$ RevealHand | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | RememberRevealed$ True | SubAbility$ DBChoose | SpellDescription$ Target opponent reveals their hand.
SVar:DBChoose:DB$ ChooseCard | ChoiceZone$ Hand | Amount$ 1 | Choices$ Card.nonLand+IsRemembered | ChoiceDesc$ nonland | FromDesc$ from it | SubAbility$ DBBranch | ChoiceTitle$ You may choose a nonland card | SpellDescription$ You may choose a nonland card from it.
SVar:DBBranch:DB$ Branch | BranchCondition$ ChosenCard | TrueSubAbility$ DBDiscard | FalseSubAbility$ DBPutCounter | StackDescription$ If they do, {p:Targeted} discards that card. If they don't, they put two +1/+1 counters on a creature or Vehicle they control. | SpellDescription$ If you do, that player discards that card. If you don't, put two +1/+1 counters on a creature or Vehicle you control.
SVar:DBDiscard:DB$ Discard | DefinedCards$ ChosenCard | Defined$ Targeted | Mode$ Defined | SubAbility$ DBCleanup
SVar:DBPutCounter:DB$ PutCounter | Choices$ Creature.YouCtrl,Vehicle.YouCtrl | ChoiceTitle$ Choose a creature or Vehicle you control | CounterType$ P1P1 | CounterNum$ 2 | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True
DeckHas:Ability$Discard|Counters
DeckHints:Type$Creature|Vehicle
Oracle:Target opponent reveals their hand. You may choose a nonland card from it. If you do, that player discards that card. If you don't, put two +1/+1 counters on a creature or Vehicle you control.

View File

@@ -3,7 +3,7 @@ ManaCost:1 G
Types:Legendary Enchantment Creature Snake Druid Types:Legendary Enchantment Creature Snake Druid
PT:1/3 PT:1/3
A:AB$ Dig | Cost$ 1 G T Return<1/CARDNAME> | DigNum$ 4 | Reveal$ True | ChangeNum$ 1 | Optional$ True | ChangeValid$ Land | DestinationZone$ Battlefield | Tapped$ True | DestinationZone2$ Graveyard | SpellDescription$ Reveal the top four cards of your library. You may put a land card from among them onto the battlefield tapped. Put the rest into your graveyard. A:AB$ Dig | Cost$ 1 G T Return<1/CARDNAME> | DigNum$ 4 | Reveal$ True | ChangeNum$ 1 | Optional$ True | ChangeValid$ Land | DestinationZone$ Battlefield | Tapped$ True | DestinationZone2$ Graveyard | SpellDescription$ Reveal the top four cards of your library. You may put a land card from among them onto the battlefield tapped. Put the rest into your graveyard.
A:AB$ ChangeZone | PrecostDesc$ Channel — | Cost$ X X G G Discard<1/NICKNAME> | ActivationZone$ Hand | Origin$ Graveyard | Destination$ Hand | ChangeType$ Card.nonLegendary | ChangeNum$ X | Mandatory$ True | SpellDescription$ Return X target nonlegendary cards from your graveyard to your hand. A:AB$ ChangeZone | PrecostDesc$ Channel — | Cost$ X X G G Discard<1/NICKNAME> | ActivationZone$ Hand | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Card.nonLegendary+YouOwn | TargetMin$ X | TargetMax$ X | SpellDescription$ Return X target nonlegendary cards from your graveyard to your hand.
SVar:X:Count$xPaid SVar:X:Count$xPaid
DeckHas:Ability$Graveyard|Discard DeckHas:Ability$Graveyard|Discard
Oracle:{1}{G}, {T}, Return Shigeki, Jukai Visionary to its owner's hand: Reveal the top four cards of your library. You may put a land card from among them onto the battlefield tapped. Put the rest into your graveyard.\nChannel — {X}{X}{G}{G}, Discard Shigeki: Return X target nonlegendary cards from your graveyard to your hand. Oracle:{1}{G}, {T}, Return Shigeki, Jukai Visionary to its owner's hand: Reveal the top four cards of your library. You may put a land card from among them onto the battlefield tapped. Put the rest into your graveyard.\nChannel — {X}{X}{G}{G}, Discard Shigeki: Return X target nonlegendary cards from your graveyard to your hand.

View File

@@ -4,7 +4,7 @@ Types:Legendary Creature Moonfolk Wizard
PT:2/3 PT:2/3
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Hand | ValidCard$ Permanent.nonCreature | ActivationLimit$ 1 | Execute$ TrigDraw | TriggerDescription$ Whenever one or more noncreature permanents are returned to hand, draw a card. This ability triggers only once each turn. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Hand | ValidCard$ Permanent.nonCreature | ActivationLimit$ 1 | Execute$ TrigDraw | TriggerDescription$ Whenever one or more noncreature permanents are returned to hand, draw a card. This ability triggers only once each turn.
SVar:TrigDraw:DB$ Draw | NumCards$ 1 SVar:TrigDraw:DB$ Draw | NumCards$ 1
A:AB$ ChangeZone | Cost$ X W Return<1/Land/land> | ValidTgts$ Artifact.cmcLEX,Enchantment.cmcLEX | TgtPrompt$ Select target artifact or enchantment card with mana value X or less | Origin$ Graveyard | Destination$ Battlefield | SorcerySpeed$ True | SpellDescription$ Return target artifact or enchantment card with mana value X or less from your graveyard to the battlefield. Activate only as a sorcery. A:AB$ ChangeZone | Cost$ X W Return<1/Land/land> | ValidTgts$ Artifact.cmcLEX+YouOwn,Enchantment.cmcLEX+YouOwn | TgtPrompt$ Select target artifact or enchantment card with mana value X or less | Origin$ Graveyard | Destination$ Battlefield | SorcerySpeed$ True | SpellDescription$ Return target artifact or enchantment card with mana value X or less from your graveyard to the battlefield. Activate only as a sorcery.
SVar:X:Count$xPaid SVar:X:Count$xPaid
DeckHints:Type$Artifact|Enchantment DeckHints:Type$Artifact|Enchantment
DeckHas:Ability$Graveyard DeckHas:Ability$Graveyard

View File

@@ -5,7 +5,7 @@ Loyalty:3
K:Flash K:Flash
S:Mode$ CastWithFlash | ValidCard$ Card.Self+ThisTurnEntered | ValidSA$ Activated.Loyalty | Caster$ You | Description$ As long as CARDNAME entered the battlefield this turn, you may activate her loyalty abilities any time you could cast an instant. S:Mode$ CastWithFlash | ValidCard$ Card.Self+ThisTurnEntered | ValidSA$ Activated.Loyalty | Caster$ You | Description$ As long as CARDNAME entered the battlefield this turn, you may activate her loyalty abilities any time you could cast an instant.
A:AB$ PutCounter | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | CounterType$ P1P1 | CounterNum$ 1 | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select target creature | SubAbility$ DBPump | SpellDescription$ Put a +1/+1 counter on up to one target creature. It gains first strike until end of turn. A:AB$ PutCounter | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | CounterType$ P1P1 | CounterNum$ 1 | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select target creature | SubAbility$ DBPump | SpellDescription$ Put a +1/+1 counter on up to one target creature. It gains first strike until end of turn.
SVar:DBPump:DB$ Pump | Defined$ Targeted | Keywords$ First strike SVar:DBPump:DB$ Pump | Defined$ Targeted | Keywords$ First Strike
A:AB$ Token | Cost$ SubCounter<1/LOYALTY> | Planeswalker$ True | TokenAmount$ 1 | TokenScript$ w_2_2_samurai_vigilance | TokenOwner$ You | SpellDescription$ Create a 2/2 white Samurai creature token with vigilance. A:AB$ Token | Cost$ SubCounter<1/LOYALTY> | Planeswalker$ True | TokenAmount$ 1 | TokenScript$ w_2_2_samurai_vigilance | TokenOwner$ You | SpellDescription$ Create a 2/2 white Samurai creature token with vigilance.
A:AB$ ChangeZone | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature.tapped | TgtPrompt$ Select target tapped creature | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Exile target tapped creature. You gain 2 life. | SubAbility$ DBGainLife A:AB$ ChangeZone | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature.tapped | TgtPrompt$ Select target tapped creature | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Exile target tapped creature. You gain 2 life. | SubAbility$ DBGainLife
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 2 SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 2

View File

@@ -3,6 +3,6 @@ ManaCost:3 W
Types:Creature Incarnation Types:Creature Incarnation
PT:2/2 PT:2/2
K:First Strike K:First Strike
S:Mode$ Continuous | Affected$ Creature.YouCtrl | EffectZone$ Graveyard | AddKeyword$ First strike | IsPresent$ Plains.YouCtrl | Description$ As long as CARDNAME is in your graveyard and you control a Plains, creatures you control have first strike. S:Mode$ Continuous | Affected$ Creature.YouCtrl | EffectZone$ Graveyard | AddKeyword$ First Strike | IsPresent$ Plains.YouCtrl | Description$ As long as CARDNAME is in your graveyard and you control a Plains, creatures you control have first strike.
SVar:DiscardMe:2 SVar:DiscardMe:2
Oracle:First strike\nAs long as Valor is in your graveyard and you control a Plains, creatures you control have first strike. Oracle:First strike\nAs long as Valor is in your graveyard and you control a Plains, creatures you control have first strike.

View File

@@ -363,6 +363,42 @@ ScryfallCode=SLD
383★ R Krark's Thumb @Wooden Cyclops 383★ R Krark's Thumb @Wooden Cyclops
384 R Swamp @Jeanne D'Angelo 384 R Swamp @Jeanne D'Angelo
385 R Island @Jeanne D'Angelo 385 R Island @Jeanne D'Angelo
396 M Tamiyo, the Moon Sage @Uta Natsume
397 M Ajani, Mentor of Heroes @Uta Natsume
398 M Angrath, the Flame-Chained @Uta Natsume
399 R Ashiok, Dream Render @Uta Natsume
400 M Sorin, Grim Nemesis @Uta Natsume
410 R Brain Freeze @Rorubei
411 R Bribery @Rorubei
412 R Snap @Rorubei
413 R Unmask @Rorubei
414 R Shadow of Doubt @Rorubei
415 R Plains @Ben Schnuck
416 R Island @Ben Schnuck
417 R Swamp @Ben Schnuck
418 R Mountain @Ben Schnuck
419 R Forest @Ben Schnuck
420 R Hokori, Dust Drinker @Yuko Shimizu
421 R Kira, Great Glass-Spinner @Yuko Shimizu
422 R Eidolon of the Great Revel @Yuko Shimizu
423 R Elvish Spirit Guide @Yuko Shimizu
424 R Ghostly Prison @Ai Nanahira
425 R Freed from the Real @SENNSU
426 R Boseiju, Who Shelters All @Esuthio
427 R Hall of the Bandit Lord @ZOUNOSE
428 R E. Honda, Sumo Champion @Victor Adame Minguez
429 R Ryu, World Warrior @Jason Rainville
430 R Ken, Burning Brawler @Yongjae Choi
431 R Blanka, Ferocious Friend @David Rapoza
432 R Chun-Li, Countless Kicks @Martina Fackova
433 R Dhalsim, Pliable Pacifist @Victor Adame Minguez
434 R Guile, Sonic Soldier @Wesley Burt
435 R Zangief, the Red Cyclone @Maria Zolotukhina
436 R Windbrisk Heights @Tomohito
437 R Shelldock Isle @Amayagido
438 R Howltooth Hollow @Shie Nanahara
439 R Spinerock Knoll @Nagano
440 R Mosswort Bridge @Maiko Aoji
477 R Path to Exile @Riot Games 477 R Path to Exile @Riot Games
478 R Rhystic Study @Riot Games 478 R Rhystic Study @Riot Games
479 R Duress @Riot Games 479 R Duress @Riot Games
@@ -479,6 +515,11 @@ ScryfallCode=SLD
672 R Questing Phelddagrif @Mark Rosewater 672 R Questing Phelddagrif @Mark Rosewater
696 R Spore Frog @Riot Games 696 R Spore Frog @Riot Games
697 R Command Tower @Riot Games 697 R Command Tower @Riot Games
1020 R Idyllic Tutor @Riyou Kamei
1021 R Swords to Plowshares @Riyou Kamei
1022 R Solve the Equation @Riyou Kamei
1023 R Praetor's Grasp @Riyou Kamei
1024 R Veil of Summer @Riyou Kamei
VS C Viscera Seer @John Stanko VS C Viscera Seer @John Stanko
[tokens] [tokens]

View File

@@ -257,6 +257,10 @@ public class HumanCostDecision extends CostDecisionMakerBase {
return null; return null;
} }
if (c == 0) { //in case choice was already made to pay 0 cards
return PaymentDecision.number(c);
}
if (cost.from == ZoneType.Battlefield || cost.from == ZoneType.Hand) { if (cost.from == ZoneType.Battlefield || cost.from == ZoneType.Hand) {
final InputSelectCardsFromList inp = new InputSelectCardsFromList(controller, c, c, list, ability); final InputSelectCardsFromList inp = new InputSelectCardsFromList(controller, c, c, list, ability);
inp.setMessage(Localizer.getInstance().getMessage("lblExileNCardsFromYourZone", "%d", cost.getFrom().getTranslatedName())); inp.setMessage(Localizer.getInstance().getMessage("lblExileNCardsFromYourZone", "%d", cost.getFrom().getTranslatedName()));

View File

@@ -217,6 +217,15 @@ public class HumanPlaySpellAbility {
fromZone.add(oldCard, zonePosition >= 0 ? Integer.valueOf(zonePosition) : null); fromZone.add(oldCard, zonePosition >= 0 ? Integer.valueOf(zonePosition) : null);
ability.setHostCard(oldCard); ability.setHostCard(oldCard);
ability.setXManaCostPaid(null); ability.setXManaCostPaid(null);
if (ability.hasParam("Announce")) {
final String announce = ability.getParam("Announce");
for (final String aVar : announce.split(",")) {
final String varName = aVar.trim();
if (!varName.equals("X")) {
ability.setSVar(varName, "0");
}
}
}
// better safe than sorry approach in case rolled back ability was copy (from addExtraKeywordCost) // better safe than sorry approach in case rolled back ability was copy (from addExtraKeywordCost)
for (SpellAbility sa : oldCard.getSpells()) { for (SpellAbility sa : oldCard.getSpells()) {
sa.setHostCard(oldCard); sa.setHostCard(oldCard);