Merge branch 'Card-Forge:master' into master

This commit is contained in:
TabletopGeneral
2023-08-29 18:56:01 -07:00
committed by GitHub
103 changed files with 838 additions and 113 deletions

View File

@@ -1262,7 +1262,7 @@ public abstract class GameState {
for (final String info : cardinfo) { for (final String info : cardinfo) {
if (info.startsWith("Tapped")) { if (info.startsWith("Tapped")) {
c.tap(false); c.tap(false, null, null);
} else if (info.startsWith("Renowned")) { } else if (info.startsWith("Renowned")) {
c.setRenowned(true); c.setRenowned(true);
} else if (info.startsWith("Monstrous")) { } else if (info.startsWith("Monstrous")) {

View File

@@ -1,5 +1,6 @@
package forge.ai.ability; package forge.ai.ability;
import java.util.List;
import java.util.Map; import java.util.Map;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
@@ -23,6 +24,7 @@ import forge.game.card.Card;
import forge.game.card.CardCollection; import forge.game.card.CardCollection;
import forge.game.card.CardLists; import forge.game.card.CardLists;
import forge.game.card.CardPredicates; import forge.game.card.CardPredicates;
import forge.game.card.CardUtil;
import forge.game.card.token.TokenInfo; import forge.game.card.token.TokenInfo;
import forge.game.combat.Combat; import forge.game.combat.Combat;
import forge.game.cost.CostPart; import forge.game.cost.CostPart;
@@ -162,6 +164,11 @@ public class TokenAi extends SpellAbilityAi {
final TargetRestrictions tgt = sa.getTargetRestrictions(); final TargetRestrictions tgt = sa.getTargetRestrictions();
if (tgt != null) { if (tgt != null) {
sa.resetTargets(); sa.resetTargets();
if (actualToken.getType().hasSubtype("Role")) {
return tgtRoleAura(ai, sa, actualToken, false);
}
if (tgt.canOnlyTgtOpponent() || "Opponent".equals(sa.getParam("AITgts"))) { if (tgt.canOnlyTgtOpponent() || "Opponent".equals(sa.getParam("AITgts"))) {
if (sa.canTarget(opp)) { if (sa.canTarget(opp)) {
sa.getTargets().add(opp); sa.getTargets().add(opp);
@@ -253,9 +260,16 @@ public class TokenAi extends SpellAbilityAi {
@Override @Override
protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) { protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) {
Card actualToken = spawnToken(ai, sa);
final TargetRestrictions tgt = sa.getTargetRestrictions(); final TargetRestrictions tgt = sa.getTargetRestrictions();
if (tgt != null) { if (tgt != null) {
sa.resetTargets(); sa.resetTargets();
if (actualToken.getType().hasSubtype("Role")) {
return tgtRoleAura(ai, sa, actualToken, mandatory);
}
if (tgt.canOnlyTgtOpponent()) { if (tgt.canOnlyTgtOpponent()) {
PlayerCollection targetableOpps = ai.getOpponents().filter(PlayerPredicates.isTargetableBy(sa)); PlayerCollection targetableOpps = ai.getOpponents().filter(PlayerPredicates.isTargetableBy(sa));
if (mandatory && targetableOpps.isEmpty()) { if (mandatory && targetableOpps.isEmpty()) {
@@ -268,7 +282,6 @@ public class TokenAi extends SpellAbilityAi {
} }
} }
Card actualToken = spawnToken(ai, sa);
String tokenPower = sa.getParamOrDefault("TokenPower", actualToken.getBasePowerString()); String tokenPower = sa.getParamOrDefault("TokenPower", actualToken.getBasePowerString());
String tokenToughness = sa.getParamOrDefault("TokenToughness", actualToken.getBaseToughnessString()); String tokenToughness = sa.getParamOrDefault("TokenToughness", actualToken.getBaseToughnessString());
String tokenAmount = sa.getParamOrDefault("TokenAmount", "1"); String tokenAmount = sa.getParamOrDefault("TokenAmount", "1");
@@ -357,4 +370,43 @@ public class TokenAi extends SpellAbilityAi {
return result; return result;
} }
private boolean tgtRoleAura(final Player ai, final SpellAbility sa, final Card tok, final boolean mandatory) {
boolean isCurse = "Curse".equals(sa.getParam("AILogic")) ||
tok.getFirstAttachSpell().getParamOrDefault("AILogic", "").equals("Curse");
List<Card> tgts = CardUtil.getValidCardsToTarget(sa);
// look for card without role from ai
List<Card> prefListSBA = CardLists.filter(tgts, c ->
!Iterables.any(c.getAttachedCards(), att -> att.getController() == ai && att.getType().hasSubtype("Role")));
List<Card> prefList;
if (isCurse) {
prefList = CardLists.filterControlledBy(prefListSBA, ai.getOpponents());
} else {
prefList = CardLists.filterControlledBy(prefListSBA, ai.getYourTeam());
}
if (prefList.isEmpty()) {
if (mandatory) {
if (sa.isTargetNumberValid()) {
// TODO try replace Curse <-> Pump depending on target controller
return true;
}
if (!prefListSBA.isEmpty()) {
sa.getTargets().add(ComputerUtilCard.getWorstCreatureAI(prefListSBA));
return true;
}
if (!tgts.isEmpty()) {
sa.getTargets().add(ComputerUtilCard.getWorstCreatureAI(tgts));
return true;
}
}
} else {
sa.getTargets().add(ComputerUtilCard.getBestCreatureAI(prefList));
return true;
}
return false;
}
} }

View File

@@ -1326,6 +1326,7 @@ public class GameAction {
checkAgainCard |= stateBasedAction_Saga(c, sacrificeList); checkAgainCard |= stateBasedAction_Saga(c, sacrificeList);
checkAgainCard |= stateBasedAction_Battle(c, noRegCreats); checkAgainCard |= stateBasedAction_Battle(c, noRegCreats);
checkAgainCard |= stateBasedAction_Role(c, unAttachList);
checkAgainCard |= stateBasedAction704_attach(c, unAttachList); // Attachment checkAgainCard |= stateBasedAction704_attach(c, unAttachList); // Attachment
checkAgainCard |= stateBasedAction704_5r(c); // annihilate +1/+1 counters with -1/-1 ones checkAgainCard |= stateBasedAction704_5r(c); // annihilate +1/+1 counters with -1/-1 ones
@@ -1526,6 +1527,28 @@ public class GameAction {
} }
return checkAgain; return checkAgain;
} }
private boolean stateBasedAction_Role(Card c, CardCollection removeList) {
if (!c.hasCardAttachments()) {
return false;
}
boolean checkAgain = false;
CardCollection roles = CardLists.filter(c.getAttachedCards(), CardPredicates.isType("Role"));
if (roles.isEmpty()) {
return false;
}
for (Player p : game.getPlayers()) {
CardCollection rolesByPlayer = CardLists.filterControlledBy(roles, p);
if (rolesByPlayer.size() <= 1) {
continue;
}
// sort by game timestamp
rolesByPlayer.sort(CardPredicates.compareByTimestamp());
removeList.addAll(rolesByPlayer.subList(0, rolesByPlayer.size() - 1));
checkAgain = true;
}
return checkAgain;
}
private void stateBasedAction_Dungeon(Card c) { private void stateBasedAction_Dungeon(Card c) {
if (!c.getType().isDungeon() || !c.isInLastRoom()) { if (!c.getType().isDungeon() || !c.isInLastRoom()) {
@@ -1541,7 +1564,8 @@ public class GameAction {
if (c.isAttachedToEntity()) { if (c.isAttachedToEntity()) {
final GameEntity ge = c.getEntityAttachedTo(); final GameEntity ge = c.getEntityAttachedTo();
if (!ge.canBeAttached(c, null, true)) { // Rule 704.5q - Creature attached to an object or player, becomes unattached
if (c.isCreature() || c.isBattle() || !ge.canBeAttached(c, null, true)) {
unAttachList.add(c); unAttachList.add(c);
checkAgain = true; checkAgain = true;
} }
@@ -1555,10 +1579,7 @@ public class GameAction {
} }
} }
} }
if ((c.isCreature() || c.isBattle()) && c.isAttachedToEntity()) { // Rule 704.5q - Creature attached to an object or player, becomes unattached
unAttachList.add(c);
checkAgain = true;
}
return checkAgain; return checkAgain;
} }
@@ -1869,7 +1890,7 @@ public class GameAction {
// Replacement effects // Replacement effects
final Map<AbilityKey, Object> repRunParams = AbilityKey.mapFromAffected(c); final Map<AbilityKey, Object> repRunParams = AbilityKey.mapFromAffected(c);
repRunParams.put(AbilityKey.Source, sa); repRunParams.put(AbilityKey.Cause, sa);
repRunParams.put(AbilityKey.Regeneration, regenerate); repRunParams.put(AbilityKey.Regeneration, regenerate);
if (params != null) { if (params != null) {
repRunParams.putAll(params); repRunParams.putAll(params);

View File

@@ -1,6 +1,7 @@
package forge.game.ability.effects; package forge.game.ability.effects;
import forge.game.Game; import forge.game.Game;
import forge.game.ability.AbilityKey;
import forge.game.ability.SpellAbilityEffect; import forge.game.ability.SpellAbilityEffect;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.event.GameEventCardRegenerated; import forge.game.event.GameEventCardRegenerated;
@@ -19,9 +20,11 @@ public class RegenerationEffect extends SpellAbilityEffect {
for (Card c : getTargetCards(sa)) { for (Card c : getTargetCards(sa)) {
// checks already done in ReplacementEffect // checks already done in ReplacementEffect
SpellAbility cause = (SpellAbility)sa.getReplacingObject(AbilityKey.Cause);
c.setDamage(0); c.setDamage(0);
c.setHasBeenDealtDeathtouchDamage(false); c.setHasBeenDealtDeathtouchDamage(false);
c.tap(true); c.tap(true, cause, cause == null ? null : cause.getActivatingPlayer());
c.addRegeneratedThisTurn(); c.addRegeneratedThisTurn();
if (game.getCombat() != null) { if (game.getCombat() != null) {

View File

@@ -39,11 +39,16 @@ public class TapAllEffect extends SpellAbilityEffect {
cards = AbilityUtils.filterListByType(cards, sa.getParam("ValidCards"), sa); cards = AbilityUtils.filterListByType(cards, sa.getParam("ValidCards"), sa);
Player tapper = activator;
for (final Card c : cards) { for (final Card c : cards) {
if (remTapped) { if (remTapped) {
card.addRemembered(c); card.addRemembered(c);
} }
c.tap(true); if (sa.hasParam("TapperController")) {
tapper = c.getController();
}
c.tap(true, sa, tapper);
} }
} }

View File

@@ -18,6 +18,7 @@ public class TapEffect extends SpellAbilityEffect {
*/ */
@Override @Override
public void resolve(SpellAbility sa) { public void resolve(SpellAbility sa) {
final Player activator = sa.getActivatingPlayer();
final Card card = sa.getHostCard(); final Card card = sa.getHostCard();
final boolean remTapped = sa.hasParam("RememberTapped"); final boolean remTapped = sa.hasParam("RememberTapped");
final boolean alwaysRem = sa.hasParam("AlwaysRemember"); final boolean alwaysRem = sa.hasParam("AlwaysRemember");
@@ -28,7 +29,6 @@ public class TapEffect extends SpellAbilityEffect {
Iterable<Card> toTap; Iterable<Card> toTap;
if (sa.hasParam("CardChoices")) { // choosing outside Defined/Targeted if (sa.hasParam("CardChoices")) { // choosing outside Defined/Targeted
final Player activator = sa.getActivatingPlayer();
CardCollection choices = CardLists.getValidCards(card.getGame().getCardsIn(ZoneType.Battlefield), sa.getParam("CardChoices"), activator, card, sa); CardCollection choices = CardLists.getValidCards(card.getGame().getCardsIn(ZoneType.Battlefield), sa.getParam("CardChoices"), activator, card, sa);
int n = sa.hasParam("ChoiceAmount") ? int n = sa.hasParam("ChoiceAmount") ?
AbilityUtils.calculateAmount(card, sa.getParam("ChoiceAmount"), sa) : 1; AbilityUtils.calculateAmount(card, sa.getParam("ChoiceAmount"), sa) : 1;
@@ -40,6 +40,11 @@ public class TapEffect extends SpellAbilityEffect {
toTap = getTargetCards(sa); toTap = getTargetCards(sa);
} }
Player tapper = activator;
if (sa.hasParam("Tapper")) {
tapper = AbilityUtils.getDefinedPlayers(card, sa.getParam("Tapper"), sa).getFirst();
}
for (final Card tgtC : toTap) { for (final Card tgtC : toTap) {
if (tgtC.isPhasedOut()) { if (tgtC.isPhasedOut()) {
continue; continue;
@@ -48,7 +53,7 @@ public class TapEffect extends SpellAbilityEffect {
if (tgtC.isUntapped() && remTapped || alwaysRem) { if (tgtC.isUntapped() && remTapped || alwaysRem) {
card.addRemembered(tgtC); card.addRemembered(tgtC);
} }
tgtC.tap(true); tgtC.tap(true, sa, tapper);
} }
if (sa.hasParam("ETB")) { if (sa.hasParam("ETB")) {
// do not fire Taps triggers // do not fire Taps triggers

View File

@@ -65,7 +65,7 @@ public class TapOrUntapAllEffect extends SpellAbilityEffect {
continue; continue;
} }
if (toTap) { if (toTap) {
tgtC.tap(true); tgtC.tap(true, sa, activator);
} else { } else {
tgtC.untap(true); tgtC.untap(true);
} }

View File

@@ -1,9 +1,9 @@
package forge.game.ability.effects; package forge.game.ability.effects;
import java.util.List; import forge.game.ability.AbilityUtils;
import forge.game.ability.SpellAbilityEffect; import forge.game.ability.SpellAbilityEffect;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.player.Player;
import forge.game.player.PlayerController; import forge.game.player.PlayerController;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.util.CardTranslation; import forge.util.CardTranslation;
@@ -29,10 +29,10 @@ public class TapOrUntapEffect extends SpellAbilityEffect {
@Override @Override
public void resolve(SpellAbility sa) { public void resolve(SpellAbility sa) {
final List<Card> tgtCards = getTargetCards(sa); Player activator = sa.getActivatingPlayer();
PlayerController pc = sa.getActivatingPlayer().getController(); PlayerController pc = activator.getController();
for (final Card tgtC : tgtCards) { for (final Card tgtC : getTargetCards(sa)) {
if (!tgtC.isInPlay()) { if (!tgtC.isInPlay()) {
continue; continue;
} }
@@ -42,10 +42,15 @@ public class TapOrUntapEffect extends SpellAbilityEffect {
// If the effected card is controlled by the same controller of the SA, default to untap. // If the effected card is controlled by the same controller of the SA, default to untap.
boolean tap = pc.chooseBinary(sa, Localizer.getInstance().getMessage("lblTapOrUntapTarget", CardTranslation.getTranslatedName(tgtC.getName())), PlayerController.BinaryChoiceType.TapOrUntap, boolean tap = pc.chooseBinary(sa, Localizer.getInstance().getMessage("lblTapOrUntapTarget", CardTranslation.getTranslatedName(tgtC.getName())), PlayerController.BinaryChoiceType.TapOrUntap,
!tgtC.getController().equals(sa.getActivatingPlayer()) ); !tgtC.getController().equals(activator) );
if (tap) { if (tap) {
tgtC.tap(true); Player tapper = activator;
if (sa.hasParam("Tapper")) {
tapper = AbilityUtils.getDefinedPlayers(sa.getHostCard(), sa.getParam("Tapper"), sa).getFirst();
}
tgtC.tap(true, sa, tapper);
} else { } else {
tgtC.untap(true); tgtC.untap(true);
} }

View File

@@ -4413,10 +4413,10 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
view.updateTapped(this); view.updateTapped(this);
} }
public final void tap(boolean tapAnimation) { public final void tap(boolean tapAnimation, SpellAbility cause, Player tapper) {
tap(false, tapAnimation); tap(false, tapAnimation, cause, tapper);
} }
public final void tap(boolean attacker, boolean tapAnimation) { public final void tap(boolean attacker, boolean tapAnimation, SpellAbility cause, Player tapper) {
if (tapped) { return; } if (tapped) { return; }
// Run replacement effects // Run replacement effects
@@ -4425,6 +4425,8 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
// Run triggers // Run triggers
final Map<AbilityKey, Object> runParams = AbilityKey.mapFromCard(this); final Map<AbilityKey, Object> runParams = AbilityKey.mapFromCard(this);
runParams.put(AbilityKey.Attacker, attacker); runParams.put(AbilityKey.Attacker, attacker);
runParams.put(AbilityKey.Cause, cause);
runParams.put(AbilityKey.Player, tapper);
getGame().getTriggerHandler().runTrigger(TriggerType.Taps, runParams, false); getGame().getTriggerHandler().runTrigger(TriggerType.Taps, runParams, false);
setTapped(true); setTapped(true);
@@ -5983,11 +5985,14 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
} }
public void exert() { public void exert() {
exertedByPlayer.add(getController()); exert(getController());
}
public void exert(Player p) {
exertedByPlayer.add(p);
exertThisTurn++; exertThisTurn++;
view.updateExertedThisTurn(this, true); view.updateExertedThisTurn(this, true);
final Map<AbilityKey, Object> runParams = AbilityKey.mapFromCard(this); final Map<AbilityKey, Object> runParams = AbilityKey.mapFromCard(this);
runParams.put(AbilityKey.Player, getController()); runParams.put(AbilityKey.Player, p);
game.getTriggerHandler().runTrigger(TriggerType.Exerted, runParams, false); game.getTriggerHandler().runTrigger(TriggerType.Exerted, runParams, false);
} }
@@ -6469,7 +6474,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
shieldCounterReplaceDamage.setOverridingAbility(AbilityFactory.getAbility(sa, this)); shieldCounterReplaceDamage.setOverridingAbility(AbilityFactory.getAbility(sa, this));
} }
if (shieldCounterReplaceDestroy == null) { if (shieldCounterReplaceDestroy == null) {
String reStr = "Event$ Destroy | ActiveZones$ Battlefield | ValidCard$ Card.Self | ValidSource$ SpellAbility | Secondary$ True " String reStr = "Event$ Destroy | ActiveZones$ Battlefield | ValidCard$ Card.Self | ValidCause$ SpellAbility | Secondary$ True "
+ "| Description$ If this permanent would be destroyed as the result of an effect, instead remove a shield counter from it."; + "| Description$ If this permanent would be destroyed as the result of an effect, instead remove a shield counter from it.";
shieldCounterReplaceDestroy = ReplacementHandler.parseReplacement(reStr, this, false, null); shieldCounterReplaceDestroy = ReplacementHandler.parseReplacement(reStr, this, false, null);
shieldCounterReplaceDestroy.setOverridingAbility(AbilityFactory.getAbility(sa, this)); shieldCounterReplaceDestroy.setOverridingAbility(AbilityFactory.getAbility(sa, this));

View File

@@ -293,7 +293,7 @@ public class CostAdjustment {
sa.addTappedForConvoke(conv.getKey()); sa.addTappedForConvoke(conv.getKey());
cost.decreaseShard(conv.getValue(), 1); cost.decreaseShard(conv.getValue(), 1);
if (!test) { if (!test) {
conv.getKey().tap(true); conv.getKey().tap(true, sa, sa.getActivatingPlayer());
if (!improvise) { if (!improvise) {
sa.getHostCard().addConvoked(conv.getKey()); sa.getHostCard().addConvoked(conv.getKey());
} }

View File

@@ -195,7 +195,7 @@ public class CostDiscard extends CostPartWithList {
* @see forge.card.cost.CostPartWithList#executePayment(forge.card.spellability.SpellAbility, forge.Card) * @see forge.card.cost.CostPartWithList#executePayment(forge.card.spellability.SpellAbility, forge.Card)
*/ */
@Override @Override
protected Card doPayment(SpellAbility ability, Card targetCard, final boolean effect) { protected Card doPayment(Player payer, SpellAbility ability, Card targetCard, final boolean effect) {
final Map<AbilityKey, Object> runParams = AbilityKey.newMap(); final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
if (ability.isCycling() && targetCard.equals(ability.getHostCard())) { if (ability.isCycling() && targetCard.equals(ability.getHostCard())) {
// discard itself for cycling cost // discard itself for cycling cost
@@ -203,7 +203,7 @@ public class CostDiscard extends CostPartWithList {
} }
// if this is caused by 118.12 it's also an effect // if this is caused by 118.12 it's also an effect
SpellAbility cause = targetCard.getGame().getStack().isResolving(ability.getHostCard()) ? ability : null; SpellAbility cause = targetCard.getGame().getStack().isResolving(ability.getHostCard()) ? ability : null;
return targetCard.getController().discard(targetCard, cause, effect, null, runParams); return payer.discard(targetCard, cause, effect, null, runParams);
} }
/* (non-Javadoc) /* (non-Javadoc)

View File

@@ -73,8 +73,8 @@ public class CostEnlist extends CostPartWithTrigger {
} }
@Override @Override
protected Card doPayment(SpellAbility ability, Card targetCard, final boolean effect) { protected Card doPayment(Player payer, SpellAbility ability, Card targetCard, final boolean effect) {
targetCard.tap(true); targetCard.tap(true, ability, payer);
// need to transfer info // need to transfer info
payTrig.addRemembered(targetCard); payTrig.addRemembered(targetCard);

View File

@@ -95,8 +95,8 @@ public class CostExert extends CostPartWithTrigger {
} }
@Override @Override
protected Card doPayment(SpellAbility ability, Card targetCard, final boolean effect) { protected Card doPayment(Player payer, SpellAbility ability, Card targetCard, final boolean effect) {
targetCard.exert(); targetCard.exert(payer);
return targetCard; return targetCard;
} }

View File

@@ -180,7 +180,7 @@ public class CostExile extends CostPartWithList {
} }
@Override @Override
protected Card doPayment(SpellAbility ability, Card targetCard, final boolean effect) { protected Card doPayment(Player payer, SpellAbility ability, Card targetCard, final boolean effect) {
final Game game = targetCard.getGame(); final Game game = targetCard.getGame();
Card newCard = game.getAction().exile(targetCard, null); Card newCard = game.getAction().exile(targetCard, null);
SpellAbilityEffect.handleExiledWith(newCard, ability); SpellAbilityEffect.handleExiledWith(newCard, ability);

View File

@@ -83,7 +83,7 @@ public class CostExiledMoveToGrave extends CostPartWithList {
} }
@Override @Override
protected Card doPayment(SpellAbility ability, Card targetCard, final boolean effect) { protected Card doPayment(Player payer, SpellAbility ability, Card targetCard, final boolean effect) {
return targetCard.getGame().getAction().moveToGraveyard(targetCard, null); return targetCard.getGame().getAction().moveToGraveyard(targetCard, null);
} }

View File

@@ -86,8 +86,8 @@ public class CostGainControl extends CostPartWithList {
* @see forge.card.cost.CostPartWithList#executePayment(forge.card.spellability.SpellAbility, forge.Card) * @see forge.card.cost.CostPartWithList#executePayment(forge.card.spellability.SpellAbility, forge.Card)
*/ */
@Override @Override
protected Card doPayment(SpellAbility ability, Card targetCard, final boolean effect) { protected Card doPayment(Player payer, SpellAbility ability, Card targetCard, final boolean effect) {
targetCard.addTempController(ability.getActivatingPlayer(), ability.getActivatingPlayer().getGame().getNextTimestamp()); targetCard.addTempController(payer, payer.getGame().getNextTimestamp());
return targetCard; return targetCard;
} }

View File

@@ -107,10 +107,10 @@ public abstract class CostPartWithList extends CostPart {
super(amount, type, description); super(amount, type, description);
} }
public final boolean executePayment(SpellAbility ability, Card targetCard, final boolean effect) { public final boolean executePayment(Player payer, SpellAbility ability, Card targetCard, final boolean effect) {
lkiList.add(CardUtil.getLKICopy(targetCard)); lkiList.add(CardUtil.getLKICopy(targetCard));
final Zone origin = targetCard.getZone(); final Zone origin = targetCard.getZone();
final Card newCard = doPayment(ability, targetCard, effect); final Card newCard = doPayment(payer, ability, targetCard, effect);
// need to update the LKI info to ensure correct interaction with cards which may trigger on this // need to update the LKI info to ensure correct interaction with cards which may trigger on this
// (e.g. Necroskitter + a creature dying from a -1/-1 counter on a cost payment). // (e.g. Necroskitter + a creature dying from a -1/-1 counter on a cost payment).
@@ -134,10 +134,10 @@ public abstract class CostPartWithList extends CostPart {
for (Card c: targetCards) { for (Card c: targetCards) {
lkiList.add(CardUtil.getLKICopy(c)); lkiList.add(CardUtil.getLKICopy(c));
} }
cardList.addAll(doListPayment(ability, targetCards, effect)); cardList.addAll(doListPayment(payer, ability, targetCards, effect));
} else { } else {
for (Card c : targetCards) { for (Card c : targetCards) {
executePayment(ability, c, effect); executePayment(payer, ability, c, effect);
} }
} }
handleChangeZoneTrigger(payer, ability, targetCards); handleChangeZoneTrigger(payer, ability, targetCards);
@@ -150,10 +150,10 @@ public abstract class CostPartWithList extends CostPart {
* @param targetCard the {@link Card} to pay with. * @param targetCard the {@link Card} to pay with.
* @return The physical card after the payment. * @return The physical card after the payment.
*/ */
protected abstract Card doPayment(SpellAbility ability, Card targetCard, final boolean effect); protected abstract Card doPayment(Player payer, SpellAbility ability, Card targetCard, final boolean effect);
// Overload these two only together, set to true and perform payment on list // Overload these two only together, set to true and perform payment on list
protected boolean canPayListAtOnce() { return false; } protected boolean canPayListAtOnce() { return false; }
protected CardCollectionView doListPayment(SpellAbility ability, CardCollectionView targetCards, final boolean effect) { return CardCollection.EMPTY; } protected CardCollectionView doListPayment(Player payer, SpellAbility ability, CardCollectionView targetCards, final boolean effect) { return CardCollection.EMPTY; }
/** /**
* TODO: Write javadoc for this method. * TODO: Write javadoc for this method.
@@ -163,13 +163,13 @@ public abstract class CostPartWithList extends CostPart {
public abstract String getHashForCardList(); public abstract String getHashForCardList();
@Override @Override
public boolean payAsDecided(Player ai, PaymentDecision decision, SpellAbility ability, final boolean effect) { public boolean payAsDecided(Player payer, PaymentDecision decision, SpellAbility ability, final boolean effect) {
executePayment(ai, ability, decision.cards, effect); executePayment(payer, ability, decision.cards, effect);
reportPaidCardsTo(ability); reportPaidCardsTo(ability);
return true; return true;
} }
protected void handleBeforePayment(Player ai, SpellAbility ability, CardCollectionView targetCards) { protected void handleBeforePayment(Player payer, SpellAbility ability, CardCollectionView targetCards) {
} }

View File

@@ -156,7 +156,7 @@ public class CostPutCardToLib extends CostPartWithList {
} }
@Override @Override
protected Card doPayment(SpellAbility ability, Card targetCard, final boolean effect) { protected Card doPayment(Player payer, SpellAbility ability, Card targetCard, final boolean effect) {
return targetCard.getGame().getAction().moveToLibrary(targetCard, Integer.parseInt(getLibPos()), null); return targetCard.getGame().getAction().moveToLibrary(targetCard, Integer.parseInt(getLibPos()), null);
} }

View File

@@ -160,20 +160,20 @@ public class CostPutCounter extends CostPartWithList {
* forge.Card, forge.card.cost.Cost_Payment) * forge.Card, forge.card.cost.Cost_Payment)
*/ */
@Override @Override
public boolean payAsDecided(Player ai, PaymentDecision decision, SpellAbility ability, final boolean effect) { public boolean payAsDecided(Player payer, PaymentDecision decision, SpellAbility ability, final boolean effect) {
if (this.payCostFromSource()) { if (this.payCostFromSource()) {
executePayment(ability, ability.getHostCard(), effect); executePayment(payer, ability, ability.getHostCard(), effect);
} else { } else {
executePayment(ai, ability, decision.cards, effect); executePayment(payer, ability, decision.cards, effect);
} }
triggerCounterPutAll(ability, effect); triggerCounterPutAll(ability, effect);
return true; return true;
} }
@Override @Override
protected Card doPayment(SpellAbility ability, Card targetCard, final boolean effect) { protected Card doPayment(Player payer, SpellAbility ability, Card targetCard, final boolean effect) {
final int i = this.getAbilityAmount(ability); final int i = this.getAbilityAmount(ability);
targetCard.addCounter(this.getCounter(), i, ability.getActivatingPlayer(), counterTable); targetCard.addCounter(this.getCounter(), i, payer, counterTable);
return targetCard; return targetCard;
} }

View File

@@ -115,7 +115,7 @@ public class CostReturn extends CostPartWithList {
* @see forge.card.cost.CostPartWithList#executePayment(forge.card.spellability.SpellAbility, forge.Card) * @see forge.card.cost.CostPartWithList#executePayment(forge.card.spellability.SpellAbility, forge.Card)
*/ */
@Override @Override
protected Card doPayment(SpellAbility ability, Card targetCard, final boolean effect) { protected Card doPayment(Player payer, SpellAbility ability, Card targetCard, final boolean effect) {
return targetCard.getGame().getAction().moveToHand(targetCard, null); return targetCard.getGame().getAction().moveToHand(targetCard, null);
} }

View File

@@ -140,8 +140,8 @@ public class CostReveal extends CostPartWithList {
} }
@Override @Override
protected Card doPayment(SpellAbility ability, Card targetCard, final boolean effect) { protected Card doPayment(Player payer, SpellAbility ability, Card targetCard, final boolean effect) {
targetCard.getGame().getAction().reveal(new CardCollection(targetCard), ability.getActivatingPlayer()); targetCard.getGame().getAction().reveal(new CardCollection(targetCard), payer);
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append(ability.getActivatingPlayer()); sb.append(ability.getActivatingPlayer());
if (targetCard.isInZone(ZoneType.Hand)) { if (targetCard.isInZone(ZoneType.Hand)) {
@@ -161,8 +161,8 @@ public class CostReveal extends CostPartWithList {
} }
@Override @Override
protected CardCollectionView doListPayment(SpellAbility ability, CardCollectionView targetCards, final boolean effect) { protected CardCollectionView doListPayment(Player payer, SpellAbility ability, CardCollectionView targetCards, final boolean effect) {
ability.getActivatingPlayer().getGame().getAction().reveal(targetCards, ability.getActivatingPlayer()); ability.getActivatingPlayer().getGame().getAction().reveal(targetCards, payer);
return targetCards; return targetCards;
} }

View File

@@ -142,7 +142,7 @@ public class CostSacrifice extends CostPartWithList {
} }
@Override @Override
protected Card doPayment(SpellAbility ability, Card targetCard, final boolean effect) { protected Card doPayment(Player payer, SpellAbility ability, Card targetCard, final boolean effect) {
final Game game = targetCard.getGame(); final Game game = targetCard.getGame();
// no table there, it is already handled by CostPartWithList // no table there, it is already handled by CostPartWithList
Map<AbilityKey, Object> moveParams = AbilityKey.newMap(); Map<AbilityKey, Object> moveParams = AbilityKey.newMap();

View File

@@ -65,8 +65,8 @@ public class CostTap extends CostPart {
} }
@Override @Override
public boolean payAsDecided(Player ai, PaymentDecision decision, SpellAbility ability, final boolean effect) { public boolean payAsDecided(Player payer, PaymentDecision decision, SpellAbility ability, final boolean effect) {
ability.getHostCard().tap(true); ability.getHostCard().tap(true, ability, payer);
return true; return true;
} }

View File

@@ -195,8 +195,8 @@ public class CostTapType extends CostPartWithList {
* @see forge.card.cost.CostPartWithList#executePayment(forge.card.spellability.SpellAbility, forge.Card) * @see forge.card.cost.CostPartWithList#executePayment(forge.card.spellability.SpellAbility, forge.Card)
*/ */
@Override @Override
protected Card doPayment(SpellAbility ability, Card targetCard, final boolean effect) { protected Card doPayment(Player payer, SpellAbility ability, Card targetCard, final boolean effect) {
targetCard.tap(true); targetCard.tap(true, ability, payer);
return targetCard; return targetCard;
} }

View File

@@ -97,7 +97,7 @@ public class CostUnattach extends CostPartWithList {
* @see forge.card.cost.CostPartWithList#executePayment(forge.card.spellability.SpellAbility, forge.Card) * @see forge.card.cost.CostPartWithList#executePayment(forge.card.spellability.SpellAbility, forge.Card)
*/ */
@Override @Override
protected Card doPayment(SpellAbility ability, Card targetCard, final boolean effect) { protected Card doPayment(Player payer, SpellAbility ability, Card targetCard, final boolean effect) {
targetCard.unattachFromEntity(targetCard.getEntityAttachedTo()); targetCard.unattachFromEntity(targetCard.getEntityAttachedTo());
return targetCard; return targetCard;
} }

View File

@@ -91,7 +91,7 @@ public class CostUntapType extends CostPartWithList {
} }
@Override @Override
protected Card doPayment(SpellAbility ability, Card targetCard, final boolean effect) { protected Card doPayment(Player payer, SpellAbility ability, Card targetCard, final boolean effect) {
targetCard.untap(true); targetCard.untap(true);
return targetCard; return targetCard;
} }

View File

@@ -612,7 +612,7 @@ public class PhaseHandler implements java.io.Serializable {
for (final Card attacker : combat.getAttackers()) { for (final Card attacker : combat.getAttackers()) {
if (!attacker.attackVigilance()) { if (!attacker.attackVigilance()) {
attacker.setTapped(false); attacker.setTapped(false);
attacker.tap(true, true); attacker.tap(true, true, null, null);
} }
} }
} }

View File

@@ -62,8 +62,7 @@ public class ReplaceDestroy extends ReplacementEffect {
return false; return false;
} }
} }
if (!matchesValidParam("ValidCause", runParams.get(AbilityKey.Cause))) {
if (!matchesValidParam("ValidSource", runParams.get(AbilityKey.Source))) {
return false; return false;
} }
@@ -76,6 +75,7 @@ public class ReplaceDestroy extends ReplacementEffect {
@Override @Override
public void setReplacingObjects(Map<AbilityKey, Object> runParams, SpellAbility sa) { public void setReplacingObjects(Map<AbilityKey, Object> runParams, SpellAbility sa) {
sa.setReplacingObject(AbilityKey.Card, runParams.get(AbilityKey.Affected)); sa.setReplacingObject(AbilityKey.Card, runParams.get(AbilityKey.Affected));
sa.setReplacingObjectsFrom(runParams, AbilityKey.Cause);
} }
} }

View File

@@ -57,16 +57,16 @@ public class TriggerTaps extends Trigger {
return false; return false;
} }
if (!matchesValidParam("ValidCause", runParams.get(AbilityKey.Cause))) {
return false;
}
if (!matchesValidParam("ValidPlayer", runParams.get(AbilityKey.Player))) {
return false;
}
if (hasParam("Attacker")) { if (hasParam("Attacker")) {
if ("True".equalsIgnoreCase(getParam("Attacker"))) { if (getParam("Attacker").equalsIgnoreCase("True") != (Boolean) runParams.get(AbilityKey.Attacker)) {
if (!(Boolean) runParams.get(AbilityKey.Attacker)) {
return false; return false;
} }
} else if ("False".equalsIgnoreCase(getParam("Attacker"))) {
if ((Boolean) runParams.get(AbilityKey.Attacker)) {
return false;
}
}
} }
return true; return true;

View File

@@ -1,6 +1,6 @@
Name:Barrow-Blade Name:Barrow-Blade
ManaCost:1 ManaCost:1
Types:Legendary Artifact Equipment Types:Artifact Equipment
K:Equip:1 K:Equip:1
S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 1 | AddToughness$ 1 | Description$ Equipped creature gets +1/+1. S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 1 | AddToughness$ 1 | Description$ Equipped creature gets +1/+1.
T:Mode$ AttackerBlockedByCreature | ValidCard$ Creature | ValidBlocker$ Creature.AttachedBy | TriggerZones$ Battlefield | Execute$ TrigAnimateAttacker | TriggerDescription$ Whenever equipped creature blocks or becomes blocked by a creature, that creature loses all abilities until end of turn. T:Mode$ AttackerBlockedByCreature | ValidCard$ Creature | ValidBlocker$ Creature.AttachedBy | TriggerZones$ Battlefield | Execute$ TrigAnimateAttacker | TriggerDescription$ Whenever equipped creature blocks or becomes blocked by a creature, that creature loses all abilities until end of turn.

View File

@@ -4,5 +4,5 @@ Types:Enchantment Aura Curse
K:Enchant player K:Enchant player
A:SP$ Attach | Cost$ 2 U | ValidTgts$ Player | AILogic$ Curse A:SP$ Attach | Cost$ 2 U | ValidTgts$ Player | AILogic$ Curse
T:Mode$ AttackersDeclared | Execute$ TrigTapOrUntap | TriggerZones$ Battlefield | AttackedTarget$ Player.EnchantedBy | TriggerDescription$ Whenever a player attacks enchanted player with one or more creatures, that attacking player may tap or untap target permanent of their choice. T:Mode$ AttackersDeclared | Execute$ TrigTapOrUntap | TriggerZones$ Battlefield | AttackedTarget$ Player.EnchantedBy | TriggerDescription$ Whenever a player attacks enchanted player with one or more creatures, that attacking player may tap or untap target permanent of their choice.
SVar:TrigTapOrUntap:DB$ TapOrUntap | ValidTgts$ Permanent | TargetingPlayer$ TriggeredAttackingPlayer SVar:TrigTapOrUntap:DB$ TapOrUntap | ValidTgts$ Permanent | TargetingPlayer$ TriggeredAttackingPlayer | Tapper$ TriggeredAttackingPlayer
Oracle:Enchant player\nWhenever a player attacks enchanted player with one or more creatures, that attacking player may tap or untap target permanent of their choice. Oracle:Enchant player\nWhenever a player attacks enchanted player with one or more creatures, that attacking player may tap or untap target permanent of their choice.

View File

@@ -2,7 +2,7 @@ Name:Desecrate Reality
ManaCost:7 ManaCost:7
Types:Instant Types:Instant
A:SP$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Permanent.nonLand+OppCtrl+cmcEven | TargetMin$ 0 | TargetMax$ OneEach | TargetsWithDifferentControllers$ True | TgtPrompt$ Select up to one target nonland permanent each opponent controls | SubAbility$ DBReturn | SpellDescription$ For each opponent, exile up to one target permanent that player controls with an even mana value. (Zero is even.) A:SP$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Permanent.nonLand+OppCtrl+cmcEven | TargetMin$ 0 | TargetMax$ OneEach | TargetsWithDifferentControllers$ True | TgtPrompt$ Select up to one target nonland permanent each opponent controls | SubAbility$ DBReturn | SpellDescription$ For each opponent, exile up to one target permanent that player controls with an even mana value. (Zero is even.)
SVar:DBReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Permanent.cmcOdd | Hidden$ True | Mandatory$ True | ChangeTypeDesc$ permanent card with an odd mana value | ChangeNum$ 1 | ConditionCheckSVar$ X | SpellDescription$ Adamant — If at least three colorless mana was spent to cast this spell, return a permanent card with an odd mana value from your graveyard to the battlefield. SVar:DBReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Permanent.cmcOdd+YouOwn | Hidden$ True | Mandatory$ True | ChangeTypeDesc$ permanent card with an odd mana value | ChangeNum$ 1 | ConditionCheckSVar$ X | SpellDescription$ Adamant — If at least three colorless mana was spent to cast this spell, return a permanent card with an odd mana value from your graveyard to the battlefield.
SVar:X:Count$Adamant.Colorless.1.0 SVar:X:Count$Adamant.Colorless.1.0
SVar:OneEach:PlayerCountOpponents$Amount SVar:OneEach:PlayerCountOpponents$Amount
DeckHas:Ability$Graveyard DeckHas:Ability$Graveyard

View File

@@ -2,7 +2,7 @@ Name:Power Sink
ManaCost:X U ManaCost:X U
Types:Instant Types:Instant
A:SP$ Counter | Cost$ X U | UnlessCost$ X | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | SubAbility$ TapLands | UnlessResolveSubs$ WhenNotPaid | SpellDescription$ Counter target spell unless its controller pays {X}. If that player doesn't, they tap all lands with mana abilities they control and lose all unspent mana. | StackDescription$ Countering [{s:Targeted}] unless {p:TargetedController} pays X. A:SP$ Counter | Cost$ X U | UnlessCost$ X | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | SubAbility$ TapLands | UnlessResolveSubs$ WhenNotPaid | SpellDescription$ Counter target spell unless its controller pays {X}. If that player doesn't, they tap all lands with mana abilities they control and lose all unspent mana. | StackDescription$ Countering [{s:Targeted}] unless {p:TargetedController} pays X.
SVar:TapLands:DB$ TapAll | ValidCards$ Land.hasManaAbility | Defined$ TargetedController | SubAbility$ ManaLose | StackDescription$ If {p:TargetedController} doesn't, that player taps all lands with mana abilities they control and SVar:TapLands:DB$ TapAll | ValidCards$ Land.hasManaAbility | Defined$ TargetedController | TapperController$ True | SubAbility$ ManaLose | StackDescription$ If {p:TargetedController} doesn't, that player taps all lands with mana abilities they control and
SVar:ManaLose:DB$ DrainMana | Defined$ TargetedController SVar:ManaLose:DB$ DrainMana | Defined$ TargetedController
SVar:X:Count$xPaid SVar:X:Count$xPaid
Oracle:Counter target spell unless its controller pays {X}. If that player doesn't, they tap all lands with mana abilities they control and lose all unspent mana. Oracle:Counter target spell unless its controller pays {X}. If that player doesn't, they tap all lands with mana abilities they control and lose all unspent mana.

View File

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

View File

@@ -9,7 +9,7 @@ SVar:DBChoose:DB$ ChooseCard | Defined$ Remembered | Amount$ 1 | Choices$ Creatu
#Need to imprint all non remembered cards #Need to imprint all non remembered cards
SVar:DBImprint:DB$ Pump | ImprintCards$ Valid Creature.IsNotRemembered+RememberedPlayerCtrl | SubAbility$ DBCleanup SVar:DBImprint:DB$ Pump | ImprintCards$ Valid Creature.IsNotRemembered+RememberedPlayerCtrl | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True
SVar:DBTapAll:DB$ TapAll | ValidCards$ Creature.IsImprinted | SubAbility$ DBCleanupAll SVar:DBTapAll:DB$ TapAll | ValidCards$ Creature.IsImprinted | TapperController$ True | SubAbility$ DBCleanupAll
SVar:DBCleanupAll:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True | ClearChosenCard$ True SVar:DBCleanupAll:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True | ClearChosenCard$ True
SVar:NeedsToPlayVar:Z GE3 SVar:NeedsToPlayVar:Z GE3
SVar:Z:SVar$Z1/Plus.Z2 SVar:Z:SVar$Z1/Plus.Z2

View File

@@ -4,7 +4,7 @@ Types:Artifact
R:Event$ BeginPhase | ActiveZones$ Battlefield | Phase$ Untap | Skip$ True | Description$ Each player skips their untap step. R:Event$ BeginPhase | ActiveZones$ Battlefield | Phase$ Untap | Skip$ True | Description$ Each player skips their untap step.
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigSands | TriggerDescription$ At the beginning of each player's upkeep, that player simultaneously untaps each tapped artifact, creature, and land they control and taps each untapped artifact, creature, and land they control. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigSands | TriggerDescription$ At the beginning of each player's upkeep, that player simultaneously untaps each tapped artifact, creature, and land they control and taps each untapped artifact, creature, and land they control.
SVar:TrigSands:DB$ UntapAll | Defined$ TriggeredPlayer | ValidCards$ Artifact.tapped,Creature.tapped,Land.tapped | RememberUntapped$ True | SubAbility$ DBTap SVar:TrigSands:DB$ UntapAll | Defined$ TriggeredPlayer | ValidCards$ Artifact.tapped,Creature.tapped,Land.tapped | RememberUntapped$ True | SubAbility$ DBTap
SVar:DBTap:DB$ TapAll | Defined$ TriggeredPlayer | ValidCards$ Artifact.untapped+IsNotRemembered,Creature.untapped+IsNotRemembered,Land.untapped+IsNotRemembered | SubAbility$ DBCleanup SVar:DBTap:DB$ TapAll | Defined$ TriggeredPlayer | ValidCards$ Artifact.untapped+IsNotRemembered,Creature.untapped+IsNotRemembered,Land.untapped+IsNotRemembered | TapperController$ True | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
AI:RemoveDeck:Random AI:RemoveDeck:Random
Oracle:Each player skips their untap step.\nAt the beginning of each player's upkeep, that player simultaneously untaps each tapped artifact, creature, and land they control and taps each untapped artifact, creature, and land they control. Oracle:Each player skips their untap step.\nAt the beginning of each player's upkeep, that player simultaneously untaps each tapped artifact, creature, and land they control and taps each untapped artifact, creature, and land they control.

View File

@@ -3,7 +3,7 @@ ManaCost:3
Types:Artifact Types:Artifact
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigChooseToTap | TriggerDescription$ At the beginning of each player's upkeep, that player taps an untapped artifact, creature, or land they control for each fade counter on CARDNAME. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigChooseToTap | TriggerDescription$ At the beginning of each player's upkeep, that player taps an untapped artifact, creature, or land they control for each fade counter on CARDNAME.
SVar:TrigChooseToTap:DB$ ChooseCard | Defined$ TriggeredPlayer | Choices$ Artifact.untapped+ActivePlayerCtrl,Creature.untapped+ActivePlayerCtrl,Land.untapped+ActivePlayerCtrl | Amount$ X | Mandatory$ True | AILogic$ TangleWire | SubAbility$ DBTap SVar:TrigChooseToTap:DB$ ChooseCard | Defined$ TriggeredPlayer | Choices$ Artifact.untapped+ActivePlayerCtrl,Creature.untapped+ActivePlayerCtrl,Land.untapped+ActivePlayerCtrl | Amount$ X | Mandatory$ True | AILogic$ TangleWire | SubAbility$ DBTap
SVar:DBTap:DB$ Tap | Defined$ ChosenCard | SubAbility$ DBCleanup SVar:DBTap:DB$ Tap | Defined$ ChosenCard | Tapper$ TriggeredPlayer | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True
SVar:X:Count$CardCounters.FADE SVar:X:Count$CardCounters.FADE
K:Fading:4 K:Fading:4

View File

@@ -0,0 +1,8 @@
Name:Asinine Antics
ManaCost:2 U U
Types:Sorcery
K:MayFlashCost:2
A:SP$ RepeatEach | RepeatCards$ Creature.OppCtrl | Zone$ Battlefield | RepeatSubAbility$ DBToken | ChangeZoneTable$ True | SpellDescription$ For each creature your opponents control, create a Cursed Role token attached to that creature. (if you control another Role on it, put that one into the graveyard. Enchanted creature is 1/1)
SVar:DBToken:DB$ Token | TokenScript$ role_cursed | AttachedTo$ Remembered
DeckHas:Type$Aura|Role & Ability$Token
Oracle:You may cast Asinine Antics as though it had flash if you pay {2} more to cast it. \nFor each creature your opponents control, create a Cursed Role token attached to that creature. (if you control another Role on it, put that one into the graveyard. Enchanted creature is 1/1)

View File

@@ -0,0 +1,8 @@
Name:Become Brutes
ManaCost:1 R
Types:Sorcery
A:SP$ Pump | TargetMin$ 1 | KW$ Haste | TargetMax$ 2 | ValidTgts$ Creature | TgtPrompt$ Select one or two target creatures | SubAbility$ DBRepeat | SpellDescription$ One or two target creatures each gain haste until end of turn.
SVar:DBRepeat:DB$ RepeatEach | DefinedCards$ Targeted | Zone$ Battlefield | RepeatSubAbility$ DBToken | ChangeZoneTable$ True | SpellDescription$ For each of those creatures, create a Monster Role token attached to it. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has trample.)
SVar:DBToken:DB$ Token | TokenScript$ role_monster | AttachedTo$ Remembered
DeckHas:Ability$Token & Type$Role|Aura
Oracle:One or two target creatures each gain haste until end of turn. For each of those creatures, create a Monster Role token attached to it. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has trample.)

View File

@@ -0,0 +1,15 @@
Name:Besotted Knight
ManaCost:3 W
Types:Creature Human Knight
PT:3/3
DeckHas:Ability$Token & Type$Aura|Enchantment|Role
AlternateMode:Adventure
Oracle:
ALTERNATE
Name:Betroth the Beast
ManaCost:G
Types:Sorcery Adventure
A:SP$ Token | TokenAmount$ 1 | TokenScript$ role_royal | TokenOwner$ You | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | SpellDescription$ Create a Royal Role token attached to target creature you control.
Oracle:Create a Royal Role token attached to target creature you control. (Enchanted creature gets +1/+1 and has ward {1}.)

View File

@@ -0,0 +1,9 @@
Name:Charmed Clothier
ManaCost:4 W
Types:Creature Faerie Advisor
PT:3/3
K:Flying
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a Royal Role token attached to another target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has ward {1}.)
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_royal | TokenOwner$ You | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl+Other | TgtPrompt$ Select another target creature you control
DeckHas:Ability$Token & Type$Role|Aura
Oracle:Flying\nWhen Charmed Clothier enters the battlefield, create a Royal Role token attached to another target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has ward {1}.)

View File

@@ -0,0 +1,13 @@
Name:Charming Scoundrel
ManaCost:1 R
Types:Creature Human Rogue
PT:1/1
K:Haste
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigCharm | TriggerDescription$ When CARDNAME enters the battlefield, ABILITY
SVar:TrigCharm:DB$ Charm | Choices$ DBLoot,DBTreasure,DBToken
SVar:DBLoot:DB$ Discard | Mode$ TgtChoose | SubAbility$ DBDraw | SpellDescription$ Discard a card, then draw a card.
SVar:DBDraw:DB$ Draw
SVar:DBTreasure:DB$ Token | TokenScript$ c_a_treasure_sac | SpellDescription$ Create a Treasure token.
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_wicked | TokenOwner$ You | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | SpellDescription$ Create a Wicked Role token attached to target creature you control.
DeckHas:Ability$Token|Discard & Type$Aura|Enchantment|Role|Treasure
Oracle:Haste\nWhen Charming Scoundrel enters the battlefield, choose one -\n• Discard a card, then draw a card.\n• Create a Treasure token.\n• Create a Wicked Role token attached to target creature you control.

View File

@@ -0,0 +1,16 @@
Name:Conceited Witch
ManaCost:2 B
Types:Creature Human Warlock
PT:2/3
K:Menace
DeckHas:Ability$Token & Type$Aura|Enchantment|Role
AlternateMode:Adventure
Oracle:Menace (This creature can't be blocked except by two or more creatures.)
ALTERNATE
Name:Price of Beauty
ManaCost:B
Types:Sorcery Adventure
A:SP$ Token | TokenAmount$ 1 | TokenScript$ role_wicked | TokenOwner$ You | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | SpellDescription$ Create a Wicked Role token attached to target creature you control. (Then exile this card. You may cast the creature later from exile.)
Oracle:Create a Wicked Role token attached to target creature you control. (Then exile this card. You may cast the creature later from exile.)

View File

@@ -0,0 +1,9 @@
Name:Curse of the Werefox
ManaCost:2 G
Types:Sorcery
A:SP$ Token | TokenAmount$ 1 | TokenScript$ role_monster | TokenOwner$ You | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | RememberTokens$ True | SubAbility$ DBImmediateTrigger | SpellDescription$ Create a Monster Role token attached to target creature you control. When you do, that creature fights up to one target creature you don't control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has trample. Creatures that fight each deal damage equal to their power to the other.)
SVar:DBImmediateTrigger:DB$ ImmediateTrigger | RememberObjects$ Targeted | Execute$ TrigFight | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBCleanup | TriggerDescription$ When you do, that creature fights up to one target creature you don't control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has trample. Creatures that fight each deal damage equal to their power to the other.)
SVar:TrigFight:DB$ Fight | Defined$ DelayTriggerRemembered | ValidTgts$ Creature.YouDontCtrl | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target creature you don't control
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
DeckHas:Ability$Token & Type$Role|Aura
Oracle:Create a Monster Role token attached to target creature you control. When you do, that creature fights up to one target creature you don't control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has trample. Creatures that fight each deal damage equal to their power to the other.)

View File

@@ -0,0 +1,9 @@
Name:Cursed Courtier
ManaCost:2 W
Types:Creature Human Noble
PT:3/3
K:Lifelink
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a Cursed Role token attached to it. (Enchanted creature is 1/1.)
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_cursed | AttachedTo$ Self
DeckHas:Ability$Token|LifeGain & Type$Aura|Enchantment|Role
Oracle:Lifelink\nWhen Cursed Courtier enters the battlefield, create a Cursed Role token attached to it. (Enchanted creature is 1/1.)

View File

@@ -0,0 +1,7 @@
Name:Cut In
ManaCost:3 R
Types:Sorcery
A:SP$ DealDamage | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 4 | SubAbility$ DBToken | SpellDescription$ CARDNAME deals 4 damage to target creature.
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_young_hero | TargetMin$ 0 | TargetMax$ 1 | TokenOwner$ You | AttachedTo$ ThisTargetedCard | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select up to one target creature you control | SpellDescription$ Create a Young Hero Role token attached to up to one target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature has "Whenever this creature attacks, if its toughness is 3 or less, put a +1/+1 counter on it.")
DeckHas:Ability$Token & Type$Role|Aura
Oracle:Cut In deals 4 damage to target creature.\nCreate a Young Hero Role token attached to up to one target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature has "Whenever this creature attacks, if its toughness is 3 or less, put a +1/+1 counter on it.")

View File

@@ -0,0 +1,10 @@
Name:Diminisher Witch
ManaCost:2 U
Types:Creature Human Warlock
PT:3/2
K:Bargain
T:Mode$ ChangesZone | Origin$ Any | Condition$ Bargain | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, if it was bargained, create a Cursed Role token attached to target creature an opponent controls. (If you control another Role on it, put that one into the graveyard. Enchanted creature is 1/1.)
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_cursed | TokenOwner$ You | AttachedTo$ Targeted | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls
DeckHas:Ability$Token|Sacrifice & Type$Role|Aura
DeckHints:Type$Enchantment|Artifact & Ability$Token
Oracle:Bargain (You may sacrifice an artifact, enchantment, or token as you cast this spell.)\nWhen Diminisher Witch enters the battlefield, if it was bargained, create a Cursed Role token attached to target creature an opponent controls. (If you control another Role on it, put that one into the graveyard. Enchanted creature is 1/1.)

View File

@@ -0,0 +1,13 @@
Name:Ellivere of the Wild Court
ManaCost:2 G W
Types:Legendary Creature Human Knight
PT:4/4
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ Whenever CARDNAME enters the battlefield or attacks, create a Virtuous Role token attached to another target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 for each enchantment you control.)
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigToken | Secondary$ True | TriggerDescription$ Whenever CARDNAME enters the battlefield or attacks, create a Virtuous Role token attached to another target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 for each enchantment you control.)
SVar:TrigToken:DB$ Token | TokenScript$ role_virtuous | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl+Other
T:Mode$ DamageDone | ValidSource$ Creature.YouCtrl+enchanted | ValidTarget$ Player | CombatDamage$ True | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$Whenever an enchanted creature you control deals combat damage to a player, draw a card.
SVar:TrigDraw:DB$ Draw
DeckHas:Type$Aura|Role & Ability$Token
DeckHints:Type$Aura
SVar:HasAttackEffect:TRUE
Oracle:Whenever Ellivere of the Wild Court enters the battlefield or attacks, create a Virtuous Role token attached to another target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 for each enchantment you control.)\nWhenever an enchanted creature you control deals combat damage to a player, draw a card.

View File

@@ -0,0 +1,7 @@
Name:Embereth Veteran
ManaCost:R
Types:Creature Human Knight
PT:2/1
A:AB$ Token | Cost$ 1 Sac<1/CARDNAME> | TokenAmount$ 1 | TokenScript$ role_young_hero | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl+Other | TgtPrompt$ Select another target creature you control | SpellDescription$ Create a Young Hero Role token attached to another target creature. (If you control another Role on it, put that one into the graveyard. Enchanted creature has "Whenever this creature attacks, if its toughness is 3 or less, put a +1/+1 counter on it.")
DeckHas:Ability$Token|Sacrifice & Type$Aura|Enchantment|Role
Oracle:{1}, Sacrifice Embereth Veteran: Create a Young Hero Role token attached to another target creature. (If you control another Role on it, put that one into the graveyard. Enchanted creature has "Whenever this creature attacks, if its toughness is 3 or less, put a +1/+1 counter on it.")

View File

@@ -0,0 +1,7 @@
Name:Eriette's Whisper
ManaCost:3 B
Types:Sorcery
A:SP$ Discard | ValidTgts$ Opponent | NumCards$ 2 | Mode$ TgtChoose | SubAbility$ DBToken | SpellDescription$ Target opponent discards two cards.
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_wicked | TargetMin$ 0 | TargetMax$ 1 | TokenOwner$ You | AttachedTo$ ThisTargetedCard | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select up to one target creature you control | SpellDescription$ Create a Wicked Role token attached to up to one target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.)
DeckHas:Ability$Token|Discard & Type$Role|Aura
Oracle:Target opponent discards two cards. Create a Wicked Role token attached to up to one target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.)

View File

@@ -0,0 +1,9 @@
Name:Faunsbane Troll
ManaCost:2 B G
Types:Creature Troll
PT:4/4
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a Monster Role token attached to it. (Enchanted creature gets +1/+1 and has trample.)
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_monster | AttachedTo$ Self
A:AB$ Fight | Defined$ Self | Cost$ Sac<1/Aura.Attached> | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Select target creature you don't control | ReplaceDyingDefined$ Targeted | SorcerySpeed$ True | SpellDescription$ CARDNAME fights target creature you don't control. If that creature would die this turn, exile it instead. Activate only as a sorcery.
DeckHas:Ability$Token|Sacrifice & Type$Aura|Enchantment|Role
Oracle:When Faunsbane Troll enters the battlefield, create a Monster Role token attached to it. (Enchanted creature gets +1/+1 and has trample.)\n{1}, Sacrifice an Aura attached to Faunsbane Troll: Faunsbane Troll fights target creature you don't control. If that creature would die this turn, exile it instead. Activate only as a sorcery.

View File

@@ -0,0 +1,16 @@
Name:Ferocious Werefox
ManaCost:3 G
Types:Creature Elf Fox Warrior
PT:4/3
K:Trample
DeckHas:Ability$Token & Type$Aura|Enchantment|Role
AlternateMode:Adventure
Oracle:Trample
ALTERNATE
Name:Guard Change
ManaCost:1 G
Types:Sorcery Adventure
A:SP$ Token | TokenAmount$ 1 | TokenScript$ role_monster | TokenOwner$ You | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | SpellDescription$ Create a Monster Role token attached to target creature you control. (Enchanted creature gets +1/+1 and has trample.)
Oracle:Create a Monster Role token attached to target creature you control. (Enchanted creature gets +1/+1 and has trample.)

View File

@@ -0,0 +1,11 @@
Name:Gadwick's First Duel
ManaCost:1 U
Types:Enchantment Saga
K:Saga:3:DBToken,DBScry,DBCopy
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_cursed | TokenOwner$ You | AttachedTo$ Targeted | ValidTgts$ Creature | SpellDescription$ Create a Cursed Role token attached to up to one target creature. (If you control another Role on it, put that one into the graveyard. Enchanted creature is 1/1.)
SVar:DBScry:DB$ Scry | ScryNum$ 2 | SpellDescription$ Scry 2.
SVar:DBCopy:DB$ DelayedTrigger | AILogic$ SpellCopy | Execute$ EffTrigCopy | ThisTurn$ True | Mode$ SpellCast | ValidCard$ Instant.cmcLE3,Sorcery.cmcLE3 | ValidActivatingPlayer$ You | SpellDescription$ When you cast your next instant or sorcery spell with mana value 3 or less this turn, copy that spell. You may choose new targets for the copy.
SVar:EffTrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | MayChooseTarget$ True
DeckHas:Ability$Token & Type$Aura|Role
DeckHints:Type$Instant|Sorcery
Oracle:(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)\nI — Create a Cursed Role token attached to up to one target creature. (If you control another Role on it, put that one into the graveyard. Enchanted creature is 1/1.)\nII — Scry 2.\nIII — When you cast your next instant or sorcery spell with mana value 3 or less this turn, copy that spell. You may choose new targets for the copy.

View File

@@ -0,0 +1,13 @@
Name:Giant Inheritance
ManaCost:4 G
Types:Enchantment Aura
K:Enchant creature
A:SP$ Attach | Cost$ 4 G | ValidTgts$ Creature | AILogic$ Pump
S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddPower$ 5 | AddToughness$ 5 | AddTrigger$ AttackTrigger | Description$ Enchanted creature gets +5/+5 and has "Whenever this creature attacks, create a Monster Role token attached to up to one target attacking creature." (Enchanted creature gets +1/+1 and has trample.)
SVar:AttackTrigger:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ Whenever this creature attacks, create a Monster Role token attached to up to one target attacking creature." (Enchanted creature gets +1/+1 and has trample.
SVar:TrigToken:DB$ Token | TokenScript$ role_monster | AttachedTo$ Targeted | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target attacking creature | ValidTgts$ Creature.attacking
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME is put into a graveyard from the battlefield, return CARDNAME to its owner's hand.
SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | Defined$ TriggeredNewCardLKICopy
SVar:SacMe:2
DeckHas:Type$Aura|Role & Ability$Token
Oracle:Enchant creature\nEnchanted creature gets +5/+5 and has "Whenever this creature attacks, create a Monster Role token attached to up to one target attacking creature." (Enchanted creature gets +1/+1 and has trample.)\nWhen Giant Inheritance is put into a graveyard from the battlefield, return it to its owner's hand.

View File

@@ -0,0 +1,11 @@
Name:Gylwain, Casting Director
ManaCost:1 G W
Types:Legendary Creature Human Bard
PT:2/3
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self,Creature.nonToken+Other+YouCtrl | Execute$ TrigCharm | TriggerDescription$ Whenever CARDNAME or another nontoken creature enters the battlefield under your control, ABILITY
SVar:TrigCharm:DB$ Charm | Choices$ DBRoyal,DBSorcerer,DBMonster
SVar:DBRoyal:DB$ Token | TokenAmount$ 1 | TokenScript$ role_royal | TokenOwner$ You | AttachedTo$ TriggeredCard | SpellDescription$ Create a Royal Role token attached to that creature.
SVar:DBSorcerer:DB$ Token | TokenAmount$ 1 | TokenScript$ role_sorcerer | TokenOwner$ You | AttachedTo$ TriggeredCard | SpellDescription$ Create a Sorcerer Role token attached to that creature.
SVar:DBMonster:DB$ Token | TokenAmount$ 1 | TokenScript$ role_monster | TokenOwner$ You | AttachedTo$ TriggeredCard | SpellDescription$ Create a Monster Role token attached to that creature.
DeckHas:Type$Aura|Role & Ability$Token
Oracle:Whenever Gylwain, Casting Director or another nontoken creature enters the battlefield under your control, choose one —\n• Create a Royal Role token attached to that creature.\n• Create a Sorcerer Role token attached to that creature.\n• Create a Monster Role token attached to that creature.

View File

@@ -0,0 +1,13 @@
Name:Icewrought Sentry
ManaCost:2 U
Types:Creature Elemental Soldier
PT:2/3
K:Vigilance
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigTrigger | TriggerDescription$ Whenever CARDNAME attacks, you may pay {1}{U}. When you do, tap target creature an opponent controls.
SVar:TrigTrigger:AB$ ImmediateTrigger | Cost$ 1 U | Execute$ TrigTap | SpellDescription$ When you do, tap target creature an opponent controls.
SVar:TrigTap:DB$ Tap | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls
T:Mode$ Taps | ValidCard$ Creature.OppCtrl | ValidPlayer$ You | Execute$ TrigPump | TriggerDescription$ Whenever you tap an untapped creature an opponent controls, CARDNAME gets +2/+1 until end of turn.
SVar:TrigPump:DB$ Pump | Defined$ Self | NumAtt$ 2 | NumDef$ 1
SVar:HasAttackEffect:TRUE
Oracle:Vigilance\nWhenever Icewrought Sentry attacks, you may pay {1}{U}. When you do, tap target creature an opponent controls.\nWhenever you tap an untapped creature an opponent controls, Icewrought Sentry gets +2/+1 until end of turn.

View File

@@ -0,0 +1,8 @@
Name:Living Lectern
ManaCost:1 U
Types:Artifact Creature Construct
PT:0/4
A:AB$ Draw | SorcerySpeed$ True | Cost$ 1 Sac<1/CARDNAME> | SubAbility$ DBToken | SpellDescription$ Draw a card. Create a Sorcerer Role token attached to up to one other target creature you control. Activate only as a sorcery. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has “Whenever this creature attacks, scry 1.”)
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TargetMin$ 0 | TargetMax$ 1 | TokenScript$ role_sorcerer | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl+Other | TgtPrompt$ Select up to one other target creature you control
DeckHas:Ability$Token|Sacrifice & Type$Aura|Enchantment|Role
Oracle:{1}, Sacrifice Living Lectern: Draw a card. Create a Sorcerer Role token attached to up to one other target creature you control. Activate only as a sorcery. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has "Whenever this creature attacks, scry 1.")

View File

@@ -0,0 +1,11 @@
Name:Lord Skitter's Blessing
ManaCost:1 B
Types:Enchantment
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a Wicked Role token attached to target creature you control. (if you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.)
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_wicked | TokenOwner$ You | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control
T:Mode$ Phase | Phase$ Draw | ValidPlayer$ You | IsPresent$ Creature.enchanted+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigLoseLife | TriggerDescription$ At the beginning of your draw step, if you control an enchanted creature, you lose 1 life and you draw an additional card.
SVar:TrigLoseLife:DB$ LoseLife | Defined$ You | LifeAmount$ 1 | SubAbility$ DBDraw
SVar:DBDraw:DB$ Draw | NumCards$ 1 | Defined$ You
DeckHas:Ability$Token & Type$Role|Aura
DeckHints:Type$Aura
Oracle:When Lord Skitter's Blessing enters the battlefield, create a Wicked Role token attached to target creature you control. (if you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.)\nAt the beginning of your draw step, if you control an enchanted creature, you lose 1 life and you draw an additional card.

View File

@@ -0,0 +1,9 @@
Name:Merry Bards
ManaCost:2 R
Types:Creature Human Bard
PT:3/2
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigImmediate | TriggerDescription$ When CARDNAME enters the battlefield, you may pay {1}. When you do, create a Young Hero Role token attached to target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature has "Whenever this creature attacks, if its toughness is 3 or less, put a +1/+1 counter on it.")
SVar:TrigImmediate:AB$ ImmediateTrigger | Cost$ 1 | Execute$ TrigToken | TriggerDescription$ When you do, create a Young Hero Role token attached to target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature has "Whenever this creature attacks, if its toughness is 3 or less, put a +1/+1 counter on it.")
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_young_hero | TokenOwner$ You | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control
DeckHas:Ability$Token & Type$Role|Aura
Oracle:When Merry Bards enters the battlefield, you may pay {1}. When you do, create a Young Hero Role token attached to target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature has "Whenever this creature attacks, if its toughness is 3 or less, put a +1/+1 counter on it.")

View File

@@ -0,0 +1,7 @@
Name:Monstrous Rage
ManaCost:R
Types:Instant
A:SP$ Pump | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | NumAtt$ 2 | SubAbility$ DBToken | SpellDescription$ Target creature gets +2/+0 until end of turn. Create a Monster Role token attached to it. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has trample.)
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_monster | TokenOwner$ You | AttachedTo$ Targeted
DeckHas:Ability$Token & Type$Role|Aura
Oracle:Target creature gets +2/+0 until end of turn. Create a Monster Role token attached to it. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has trample.)

View File

@@ -0,0 +1,9 @@
Name:Not Dead After All
ManaCost:B
Types:Instant
A:SP$ Animate | Triggers$ TrigChangeZone | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | SpellDescription$ Until end of turn, target creature you control gains "When this creature dies, return it to the battlefield tapped under its owner's control, then create a Wicked Role token attached to it." (Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.)
SVar:TrigChangeZone:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigChangeZone2 | TriggerController$ TriggeredCardController | TriggerDescription$ When this creature dies, return it to the battlefield tapped under its owner's control, then create a Wicked Role token attached to it. (Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.)
SVar:TrigChangeZone2:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ TriggeredNewCardLKICopy | SubAbility$ DBToken
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_wicked | TokenOwner$ You | AttachedTo$ TriggeredNewCardLKICopy
DeckHas:Ability$Token & Type$Role|Aura
Oracle:Until end of turn, target creature you control gains "When this creature dies, return it to the battlefield tapped under its owner's control, then create a Wicked Role token attached to it." (Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.)

View File

@@ -0,0 +1,9 @@
Name:Protective Parents
ManaCost:2 W
Types:Creature Human Peasant
PT:3/2
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME dies, create a Young Hero Role token attached to up to one target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature has "Whenever this creature attacks, if its toughness is 3 or less, put a +1/+1 counter on it.")
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_young_hero | TokenOwner$ You | TargetMin$ 0 | TargetMax$ 1 | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select up to one target creature you control
DeckHas:Ability$Token & Type$Role|Aura
SVar:SacMe:2
Oracle:When Protective Parents dies, create a Young Hero Role token attached to up to one target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature has "Whenever this creature attacks, if its toughness is 3 or less, put a +1/+1 counter on it.")

View File

@@ -0,0 +1,8 @@
Name:Redtooth Genealogist
ManaCost:2 G
Types:Creature Elf Advisor
PT:2/3
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a Royal Role token attached to another target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has ward {1}.)
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_royal | TokenOwner$ You | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl+Other | TgtPrompt$ Select another target creature you control
DeckHas:Ability$Token & Type$Role|Aura
Oracle:When CARDNAME enters the battlefield, create a Royal Role token attached to another target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has ward {1}.)

View File

@@ -0,0 +1,7 @@
Name:Return Triumphant
ManaCost:1 W
Types:Sorcery
A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Creature.YouOwn+cmcLE3 | SubAbility$ DBToken | TgtPrompt$ Select target creature card from your graveyard with mana value 3 or less | SpellDescription$ Return target creature card with mana value 3 or less from your graveyard to the battlefield. Create a Young Hero Role token attached to it. (Enchanted creature has "Whenever this creature attacks, if its toughness is 3 or less, put a +1/+1 counter on it." If you put another Role on the creature later, put this one into the graveyard.)
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_young_hero | TokenOwner$ You | AttachedTo$ Targeted
DeckHas:Ability$Token & Type$Role|Aura
Oracle:Return target creature card with mana value 3 or less from your graveyard to the battlefield. Create a Young Hero Role token attached to it. (Enchanted creature has "Whenever this creature attacks, if its toughness is 3 or less, put a +1/+1 counter on it." If you put another Role on the creature later, put this one into the graveyard.)

View File

@@ -0,0 +1,7 @@
Name:Royal Treatment
ManaCost:G
Types:Instant
A:SP$ Pump | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | KW$ Hexproof | SubAbility$ DBToken | SpellDescription$ Target creature you control gains hexproof until end of turn. Create a Royal Role token attached to that creature. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has ward {1}.)
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_royal | TokenOwner$ You | AttachedTo$ Targeted
DeckHas:Ability$Token & Type$Role|Aura
Oracle:Target creature you control gains hexproof until end of turn. Create a Royal Role token attached to that creature. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has ward {1}.)

View File

@@ -0,0 +1,7 @@
Name:Shatter the Oath
ManaCost:3 B B
Types:Sorcery
A:SP$ Destroy | ValidTgts$ Enchantment,Creature | TgtPrompt$ Select enchantment or creature | SubAbility$ TrigToken | SpellDescription$ Destroy target creature or enchantment. Create a Wicked Role token attached to up to one target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.)
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_wicked | TokenOwner$ You | TargetMin$ 0 | TargetMax$ 1 | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select up to one target creature you control
DeckHas:Ability$Token & Type$Role|Aura
Oracle:Destroy target creature or enchantment. Create a Wicked Role token attached to up to one target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.)

View File

@@ -0,0 +1,12 @@
Name:Sleep-Cursed Faerie
ManaCost:U
Types:Creature Faerie Wizard
PT:3/3
K:Flying
K:Ward:2
K:ETBReplacement:Other:ETBTapped
SVar:ETBTapped:DB$ Tap | Defined$ Self | SubAbility$ DBAddCounter | ETB$ True | SpellDescription$ CARDNAME enters the battlefield tapped with three stun counters on it. (If a permanent with a stun counter would become untapped, remove one from it instead.)
SVar:DBAddCounter:DB$ PutCounter | Defined$ Self | ETB$ True | CounterType$ STUN | CounterNum$ 3
A:AB$ Untap | Cost$ 1 U | SpellDescription$ Untap CARDNAME.
DeckHas:Ability$Counters
Oracle:Sleep-Cursed Faerie enters the battlefield tapped with three stun counters on it. (If a permanent with a stun counter would become untapped, remove one from it instead.)\n{1}{U}: Untap Sleep-Cursed Faerie.

View File

@@ -0,0 +1,10 @@
Name:Spellbook Vendor
ManaCost:1 W
Types:Creature Human Peasant
PT:2/2
K:Vigilance
T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigImmediate | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, you may pay {1}. When you do, create a Sorcerer Role token attached to target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has "Whenever this creature attacks, scry 1.")
SVar:TrigImmediate:AB$ ImmediateTrigger | Cost$ 1 | Execute$ TrigToken | TriggerDescription$ When you do, create a Sorcerer Role token attached to target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has "Whenever this creature attacks, scry 1.")
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_sorcerer | TokenOwner$ You | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control
DeckHas:Ability$Token & Type$Role|Aura
Oracle:Vigilance\nAt the beginning of combat on your turn, you may pay {1}. When you do, create a Sorcerer Role token attached to target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has "Whenever this creature attacks, scry 1.")

View File

@@ -0,0 +1,8 @@
Name:Spiteful Hexmage
ManaCost:B
Types:Creature Human Warlock
PT:3/2
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a Cursed Role token attached to target creature you control. (if you control another Role on it, put that one into the graveyard. Enchanted creature is 1/1)
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_cursed | TokenOwner$ You | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl | AILogic$ Curse | TgtPrompt$ Select target creature you control
DeckHas:Ability$Token & Type$Role|Aura
Oracle:When Spiteful Hexmage enters the battlefield, create a Cursed Role token attached to target creature you control. (if you control another Role on it, put that one into the graveyard. Enchanted creature is 1/1)

View File

@@ -0,0 +1,9 @@
Name:Splashy Spellcaster
ManaCost:3 U
Types:Creature Elemental Wizard
PT:2/4
T:Mode$ SpellCast | ValidCard$ Instant,Sorcery | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever you cast an instant or sorcery spell, create a Sorcerer Role token attached to up to one other target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has "Whenever this creature attacks, scry 1.")
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_sorcerer | TargetMin$ 0 | TargetMax$ 1 | TokenOwner$ You | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl+Other | TgtPrompt$ Select up to one other target creature you control
DeckHas:Ability$Token & Type$Role|Aura
DeckHints:Type$Instant|Sorcery
Oracle:Whenever you cast an instant or sorcery spell, create a Sorcerer Role token attached to up to one other target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has "Whenever this creature attacks, scry 1.")

View File

@@ -0,0 +1,10 @@
Name:Syr Armont, the Redeemer
ManaCost:3 G W
Types:Legendary Creature Human Knight
PT:4/4
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a Monster Role token attached to another target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has trample.)
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_monster | TokenOwner$ You | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl+Other | TgtPrompt$ Select another target creature you control
S:Mode$ Continuous | Affected$ Creature.enchanted+YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Enchanted creatures you control get +1/+1.
DeckHas:Ability$Token & Type$Aura|Enchantment|Role
DeckHints:Type$Aura
Oracle:When Syr Armont, the Redeemer enters the battlefield, create a Monster Role token attached to another target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1 and has trample.)\nEnchanted creatures you control get +1/+1.

View File

@@ -0,0 +1,9 @@
Name:The Witch's Vanity
ManaCost:1 B
Types:Enchantment Saga
K:Saga:3:DBDestroy,DBFood,DBRole
SVar:DBDestroy:DB$ Destroy | ValidTgts$ Creature.OppCtrl+cmcLE2 | TgtPrompt$ Select target creature an opponent controls with mana value 2 or less | SpellDescription$ Destroy target creature an opponent controls with mana value 2 or less.
SVar:DBFood:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_food_sac | SpellDescription$ Create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.")
SVar:DBRole:DB$ Token | TokenAmount$ 1 | TokenScript$ role_wicked | TokenOwner$ You | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | SpellDescription$ Create a Wicked Role token attached to target creature you control.
DeckHas:Ability$Sacrifice|LifeGain|Token & Type$Food|Artifact|Role|Aura
Oracle:(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)\nI — Destroy target creature an opponent controls with mana value 2 or less.\nII — Create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.")\nIII — Create a Wicked Role token attached to target creature you control.

View File

@@ -0,0 +1,7 @@
Name:Twisted Fealty
ManaCost:2 R
Types:Sorcery
A:SP$ GainControl |ValidTgts$ Creature | TgtPrompt$ Select target creature | LoseControl$ EOT | Untap$ True | AddKWs$ Haste | SubAbility$ DBToken | SpellDescription$ Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn.
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_wicked | TokenOwner$ You | AttachedTo$ ThisTargetedCard | ValidTgts$ Creature | TgtPrompt$ Select up to one target creature | TargetMin$ 0 | TargetMax$ 1 | SpellDescription$ Create a Wicked Role token attached to up to one target creature. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.)
DeckHas:Ability$Token & Type$Aura|Enchantment|Role
Oracle:Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn.\nCreate a Wicked Role token attached to up to one target creature. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.)

View File

@@ -0,0 +1,11 @@
Name:Twisted Sewer-Witch
ManaCost:3 B B
Types:Creature Human Warlock
PT:3/4
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a 1/1 black Rat creature token with "This creature can't block."Then for each Rat you control, create a Wicked Role token attached to that Rat. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.)
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ b_1_1_rat_noblock | TokenOwner$ You | SubAbility$ DBRepeat
SVar:DBRepeat:DB$ RepeatEach | RepeatCards$ Creature.Rat+YouCtrl | Zone$ Battlefield | RepeatSubAbility$ DBToken | ChangeZoneTable$ True
SVar:DBToken:DB$ Token | TokenScript$ role_wicked | AttachedTo$ Remembered
DeckNeeds:Type$Rat
DeckHas:Ability$Token & Type$Role|Aura|Rat
Oracle:When Twisted Sewer-Witch enters the battlefield, create a 1/1 black Rat creature token with "This creature can't block." Then for each Rat you control, create a Wicked Role token attached to that Rat. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.)

View File

@@ -0,0 +1,8 @@
Name:Unassuming Sage
ManaCost:1 W
Types:Creature Human Peasant Wizard
PT:2/2
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, you may pay {2}. If you do, create a Sorcerer Role token attached to it. (Enchanted creature gets +1/+1 and has "Whenever this creature attacks, scry 1.")
SVar:TrigToken:AB$ Token | Cost$ 2 | TokenAmount$ 1 | TokenScript$ role_sorcerer | AttachedTo$ Self
DeckHas:Ability$Token & Type$Aura|Enchantment|Role
Oracle:When Unassuming Sage enters the battlefield, you may pay {2}. If you do, create a Sorcerer Role token attached to it. (Enchanted creature gets +1/+1 and has "Whenever this creature attacks, scry 1.")

View File

@@ -0,0 +1,16 @@
Name:Vantress Transmuter
ManaCost:3 U
Types:Creature Human Wizard
PT:3/4
DeckHas:Ability$Token & Type$Aura|Enchantment|Role
AlternateMode:Adventure
Oracle:
ALTERNATE
Name:Croaking Curse
ManaCost:1 U
Types:Sorcery Adventure
A:SP$ Tap |ValidTgts$ Creature | SubAbility$ DBToken | SpellDescription$ Tap target creature. Create a Cursed Role token attached to it. (Enchanted creature is 1/1.)
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_cursed | TokenOwner$ You | AttachedTo$ Targeted
Oracle:Tap target creature. Create a Cursed Role token attached to it. (Enchanted creature is 1/1.)

View File

@@ -0,0 +1,7 @@
Name:Witch's Mark
ManaCost:1 R
Types:Sorcery
A:SP$ Draw | NumCards$ 2 | UnlessCost$ Discard<1/Card> | UnlessPayer$ You | UnlessSwitched$ True | SubAbility$ DBToken | SpellDescription$ You may discard a card. If you do, draw two cards.
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_wicked | TargetMin$ 0 | TargetMax$ 1 | TokenOwner$ You | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select up to one target creature you control | SpellDescription$ Create a Wicked Role token attached to up to one target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.)
DeckHas:Ability$Token|Discard & Type$Role|Aura
Oracle:You may discard a card. If you do, draw two cards.\nCreate a Wicked Role token attached to up to one target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.)

View File

@@ -417,7 +417,7 @@ ScryfallCode=SLD
429 R Ryu, World Warrior @Jason Rainville 429 R Ryu, World Warrior @Jason Rainville
430 R Ken, Burning Brawler @Yongjae Choi 430 R Ken, Burning Brawler @Yongjae Choi
431 R Blanka, Ferocious Friend @David Rapoza 431 R Blanka, Ferocious Friend @David Rapoza
432 R Chun-Li, Countless Kicks @Martina Fackova 432 R Chun-Li, Countless Kicks @Martina Fačková
433 R Dhalsim, Pliable Pacifist @Victor Adame Minguez 433 R Dhalsim, Pliable Pacifist @Victor Adame Minguez
434 R Guile, Sonic Soldier @Wesley Burt 434 R Guile, Sonic Soldier @Wesley Burt
435 R Zangief, the Red Cyclone @Maria Zolotukhina 435 R Zangief, the Red Cyclone @Maria Zolotukhina
@@ -699,6 +699,7 @@ ScryfallCode=SLD
728 R Themberchaud @Yang Luo 728 R Themberchaud @Yang Luo
729 R Braid of Fire @Sam Burley 729 R Braid of Fire @Sam Burley
730 R Cleansing Nova @Rebecca Guay 730 R Cleansing Nova @Rebecca Guay
731 R Sigarda's Aid @Scott M. Fischer
732 R Selfless Savior @Randy Vargas 732 R Selfless Savior @Randy Vargas
733 R Seraph Sanctuary @Alayna Danner 733 R Seraph Sanctuary @Alayna Danner
900 M The Scarab God @Barely Human 900 M The Scarab God @Barely Human
@@ -867,6 +868,10 @@ ScryfallCode=SLD
1170 R Dark Ritual @Frank Frazetta 1170 R Dark Ritual @Frank Frazetta
1171 R Midnight Reaper @Frank Frazetta 1171 R Midnight Reaper @Frank Frazetta
1172 R Seize the Day @Frank Frazetta 1172 R Seize the Day @Frank Frazetta
1173 R Faeburrow Elder @Kev Walker
1174 M Carnage Tyrant @Kev Walker
1175 R Fleshbag Marauder @Kev Walker
1176 C It That Betrays @Kev Walker
1177 R Forced Fruition @Ori Toor 1177 R Forced Fruition @Ori Toor
1178 R Future Sight @Ori Toor 1178 R Future Sight @Ori Toor
1179 R Mental Misstep @Ori Toor 1179 R Mental Misstep @Ori Toor
@@ -889,6 +894,10 @@ ScryfallCode=SLD
1196 R Yisan, the Wanderer Bard @Wooden Cyclops 1196 R Yisan, the Wanderer Bard @Wooden Cyclops
1197 M Alela, Artful Provocateur @Alexis Ziritt 1197 M Alela, Artful Provocateur @Alexis Ziritt
1198 M Sen Triplets @TMRWLND 1198 M Sen Triplets @TMRWLND
1199 R Tevesh Szat, Doom of Fools @Mark Riddick
1200 R Godo, Bandit Warlord @rishxxv
1201 M Jeska, Thrice Reborn @WolfSkullJack
1202 M Vial Smasher the Fierce @N.C. Winters
1203 R Blighted Agent @Anthony Francisco 1203 R Blighted Agent @Anthony Francisco
1204 R K'rrik, Son of Yawgmoth @Chase Stone 1204 R K'rrik, Son of Yawgmoth @Chase Stone
1205 R Glistener Elf @Steve Argyle 1205 R Glistener Elf @Steve Argyle
@@ -941,9 +950,9 @@ ScryfallCode=SLD
1252 M Serra the Benevolent @Rebecca Guay 1252 M Serra the Benevolent @Rebecca Guay
1253 R Stoneforge Mystic @Rebecca Guay 1253 R Stoneforge Mystic @Rebecca Guay
1254 R Muddle the Mixture @Rebecca Guay 1254 R Muddle the Mixture @Rebecca Guay
1255 U Flamekin Harbinger @Yu Maeda 1255 R Flamekin Harbinger @Yu Maeda
1256 M Omnath, Locus of Rage @Yu Maeda 1256 M Omnath, Locus of Rage @Yu Maeda
1257 U Risen Reef @Yu Maeda 1257 R Risen Reef @Yu Maeda
1258 M Voice of Resurgence @Yu Maeda 1258 M Voice of Resurgence @Yu Maeda
1262 R Wheel and Deal @Samy Halim 1262 R Wheel and Deal @Samy Halim
1263 M Questing Beast @Omar Rayyan 1263 M Questing Beast @Omar Rayyan
@@ -987,19 +996,33 @@ ScryfallCode=SLD
1301 M Nekusar, the Mindrazer @Mark Riddick 1301 M Nekusar, the Mindrazer @Mark Riddick
1302 R Nemesis of Reason @Ryan Alexander Lee 1302 R Nemesis of Reason @Ryan Alexander Lee
1303 R Gaea's Blessing @Ryan Alexander Lee 1303 R Gaea's Blessing @Ryan Alexander Lee
1304 R Twilight Prophet @Ryan Alexander Lee 1304 M Twilight Prophet @Ryan Alexander Lee
1305 M Worldspine Wurm @Ryan Alexander Lee 1305 M Worldspine Wurm @Ryan Alexander Lee
1311 R Goblin Lackey @Wizard of Barge 1311 R Goblin Lackey @Wizard of Barge
1311★ R Goblin Lackey @Wizard of Barge
1312 R Goblin Matron @Wizard of Barge 1312 R Goblin Matron @Wizard of Barge
1312★ R Goblin Matron @Wizard of Barge
1313 R Goblin Recruiter @Wizard of Barge 1313 R Goblin Recruiter @Wizard of Barge
1313★ R Goblin Recruiter @Wizard of Barge
1314 R Muxus, Goblin Grandee @Wizard of Barge 1314 R Muxus, Goblin Grandee @Wizard of Barge
1314★ R Muxus, Goblin Grandee @Wizard of Barge
1315 M Shattergang Brothers @Wizard of Barge 1315 M Shattergang Brothers @Wizard of Barge
1334 R Arden Angel @Greg Staples 1315★ M Shattergang Brothers @Wizard of Barge
1335 M Gisela, the Broken Blade @Scott M. Fischer 1335 M Gisela, the Broken Blade @Scott M. Fischer
1336 R Bruna, the Fading Light @Scott M. Fischer 1336 R Bruna, the Fading Light @Scott M. Fischer
1337 M Archangel of Thune @Scott M. Fischer 1337 M Archangel of Thune @Scott M. Fischer
1338 R Court of Grace @Scott M. Fischer 1338 R Court of Grace @Scott M. Fischer
1339 M Commander's Plate @Scott M. Fischer 1339 M Commander's Plate @Scott M. Fischer
1342 R Angel of Finality @Howard Lyon
1343 R Angel of the Ruins @Viko Menezes
1344 R Arden Angel @Greg Staples
1345 R Breathkeeper Seraph @Alexander Mokhov
1346 R Dawnbreak Reclaimer @Tyler Jacobson
1347 R Valkyrie Harbinger @Tran Nguyen
1348 C Plains @Rob Alexander
1349 C Plains @Rob Alexander
1350 C Plains @Rob Alexander
1351 C Plains @Rob Alexander
1358 R Mountain @Darrell Riche 1358 R Mountain @Darrell Riche
1359 R Mountain @Victor Adame Minguez 1359 R Mountain @Victor Adame Minguez
1360 R Mountain @Mark Zug 1360 R Mountain @Mark Zug
@@ -1010,11 +1033,41 @@ ScryfallCode=SLD
1365 R Mountain @Fred Fields 1365 R Mountain @Fred Fields
1366 R Mountain @Ron Spears 1366 R Mountain @Ron Spears
1367 R Mountain @Erica Williams 1367 R Mountain @Erica Williams
1368 R Rewind @Julie Dillon & Scott Okumura
1369 M Food Chain @Chris Seaman & Scott Okumura
1370 R Rampant Growth @David Robert Hovey & Scott Okumura
1371 M The First Sliver @Svetlin Velinov & Scott Okumura
1382 R Plains @Gary Baseman
1383 R Island @Gary Baseman
1384 R Swamp @Gary Baseman
1385 R Mountain @Gary Baseman
1386 R Forest @Gary Baseman
1387 M Gisela, the Broken Blade @Scott M. Fischer
1388 R Bruna, the Fading Light @Scott M. Fischer
1404 R Bottomless Pit @Ryan Quickfall 1404 R Bottomless Pit @Ryan Quickfall
1405 R Necrogen Mists @Ryan Quickfall 1405 R Necrogen Mists @Ryan Quickfall
1406 U Reassembling Skeleton @Ryan Quickfall 1406 R Reassembling Skeleton @Ryan Quickfall
1407 M Tinybones, Trinket Thief @Ryan Quickfall 1407 M Tinybones, Trinket Thief @Ryan Quickfall
1408 R Geier Reach Sanitarium @Ryan Quickfall 1408 R Geier Reach Sanitarium @Ryan Quickfall
1414 R Eldritch Evolution @Wooden Cyclops
1415 R Giant Adephage @Wooden Cyclops
1416 R Noxious Revival @Wooden Cyclops
1417 M Grist, the Hunger Tide @Wooden Cyclops
1418 R Mazirek, Kraul Death Priest @Wooden Cyclops
1424 R Oppression @TOMO77
1425 R Abrade @TOMO77
1426 R Mass Hysteria @TOMO77
1427 R Terminate @TOMO77
1453 M Ajani Goldmane @Fay Dalton & Scott Okumura
1453b M Ajani Goldmane @Fay Dalton & Scott Okumura
1454 M Jace Beleren @Fay Dalton & Scott Okumura
1454b M Jace Beleren @Fay Dalton & Scott Okumura
1455 M Liliana Vess @Fay Dalton & Scott Okumura
1455b M Liliana Vess @Fay Dalton & Scott Okumura
1456 M Chandra Nalaar @Fay Dalton & Scott Okumura
1456b M Chandra Nalaar @Fay Dalton & Scott Okumura
1457 M Garruk Wildspeaker @Fay Dalton & Scott Okumura
1457b M Garruk Wildspeaker @Fay Dalton & Scott Okumura
8001 M Jace, the Mind Sculptor @Wizard of Barge 8001 M Jace, the Mind Sculptor @Wizard of Barge
9995 M Garruk, Caller of Beasts @Jesper Ejsing 9995 M Garruk, Caller of Beasts @Jesper Ejsing
9996 R Rograkh, Son of Rohgahh @Andrew Mar 9996 R Rograkh, Son of Rohgahh @Andrew Mar

View File

@@ -530,7 +530,7 @@ ScryfallCode=PLIST
522 R Divining Witch @Donato Giancola 522 R Divining Witch @Donato Giancola
523 R Graveborn Muse @Kev Walker 523 R Graveborn Muse @Kev Walker
524 R Gravespawn Sovereign @Adam Rex 524 R Gravespawn Sovereign @Adam Rex
525 R Helldozer @Zoltan Boros 525 R Helldozer @Zoltan Boros & Gabor Szikszai
526 M Mikaeus, the Unhallowed @Chris Rahn 526 M Mikaeus, the Unhallowed @Chris Rahn
527 C Rend Flesh @Stephen Tappin 527 C Rend Flesh @Stephen Tappin
528 R Sidisi, Undead Vizier @Min Yum 528 R Sidisi, Undead Vizier @Min Yum
@@ -643,7 +643,7 @@ F567 R Puresteel Angel @Lukas Litzsinger
635 U Mistmeadow Witch @Greg Staples 635 U Mistmeadow Witch @Greg Staples
636 U Moonhold @Mike Dringenberg 636 U Moonhold @Mike Dringenberg
637 R Murkfiend Liege @Carl Critchlow 637 R Murkfiend Liege @Carl Critchlow
638 R Wheel of Sun and Moon @Zoltan Boros 638 R Wheel of Sun and Moon @Zoltan Boros & Gabor Szikszai
639 R Flesh // Blood @Lucas Graciano 639 R Flesh // Blood @Lucas Graciano
640 R Blood Clock @Keith Garletts 640 R Blood Clock @Keith Garletts
641 R Howling Mine @Ralph Horsley 641 R Howling Mine @Ralph Horsley
@@ -830,7 +830,7 @@ F567 R Puresteel Angel @Lukas Litzsinger
822 R Planar Collapse @Mark Zug 822 R Planar Collapse @Mark Zug
823 R Rout @Ron Spencer 823 R Rout @Ron Spencer
824 C Teremko Griffin @Martin McKenna 824 C Teremko Griffin @Martin McKenna
825 R Braids, Conjurer Adept @Zoltan Boros 825 R Braids, Conjurer Adept @Zoltan Boros & Gabor Szikszai
826 R Collective Restraint @Alan Rabinowitz 826 R Collective Restraint @Alan Rabinowitz
827 R Empress Galina @Matt Cavotta 827 R Empress Galina @Matt Cavotta
828 R Ertai's Meddling @Steve Luke 828 R Ertai's Meddling @Steve Luke
@@ -846,7 +846,7 @@ F567 R Puresteel Angel @Lukas Litzsinger
838 R Contamination @Stephen Daniele 838 R Contamination @Stephen Daniele
839 C Crypt Rats @Paul Lee 839 C Crypt Rats @Paul Lee
840 C Dark Ritual @Tom Fleming 840 C Dark Ritual @Tom Fleming
841 C Dash Hopes @Zoltan Boros 841 C Dash Hopes @Zoltan Boros & Gabor Szikszai
842 R Doomsday @Adrian Smith 842 R Doomsday @Adrian Smith
843 U Hymn to Tourach @Greg Staples 843 U Hymn to Tourach @Greg Staples
844 U Imps' Taunt @Colin MacNeil 844 U Imps' Taunt @Colin MacNeil
@@ -859,7 +859,7 @@ F567 R Puresteel Angel @Lukas Litzsinger
851 M Tourach, Dread Cantor @Greg Staples 851 M Tourach, Dread Cantor @Greg Staples
852 R Alpine Moon @Alayna Danner 852 R Alpine Moon @Alayna Danner
853 C Brightstone Ritual @Wayne England 853 C Brightstone Ritual @Wayne England
854 C Burning Inquiry @Zoltan Boros 854 C Burning Inquiry @Zoltan Boros & Gabor Szikszai
855 R Ghitu Fire @Glen Angus 855 R Ghitu Fire @Glen Angus
856 R Invasion Plans @Pete Venters 856 R Invasion Plans @Pete Venters
857 R Jaya Ballard, Task Mage @Matt Cavotta 857 R Jaya Ballard, Task Mage @Matt Cavotta
@@ -1067,7 +1067,7 @@ F567 R Puresteel Angel @Lukas Litzsinger
1059 R Siege of Towers @Anthony S. Waters 1059 R Siege of Towers @Anthony S. Waters
1060 R Slag Fiend @Mike Bierek 1060 R Slag Fiend @Mike Bierek
1061 M Soul of Shandalar @Raymond Swanland 1061 M Soul of Shandalar @Raymond Swanland
1062 M Avenger of Zendikar @Zoltan Boros 1062 M Avenger of Zendikar @Zoltan Boros & Gabor Szikszai
1063 C Capenna Express @Viko Menezes 1063 C Capenna Express @Viko Menezes
1064 R Dig Up @Slawomir Maniak 1064 R Dig Up @Slawomir Maniak
1065 R Ghalta, Primal Hunger @Chase Stone 1065 R Ghalta, Primal Hunger @Chase Stone
@@ -1170,3 +1170,128 @@ F567 R Puresteel Angel @Lukas Litzsinger
1162 R Tower of Fortunes @Matt Cavotta 1162 R Tower of Fortunes @Matt Cavotta
1163 R Wheel of Torture @Henry Van Der Linde 1163 R Wheel of Torture @Henry Van Der Linde
1164 U Forbidding Watchtower @Aleksi Briclot 1164 U Forbidding Watchtower @Aleksi Briclot
1165 R Alliance of Arms @Johann Bodin
1166 R Hanna's Custody @DiTerlizzi
1167 R Hour of Reckoning @Randy Gallegos
1168 R Knight Exemplar @Jason Chan
1169 R Kor Spiritdancer @Scott Chou
1170 R Nomad Mythmaker @Darrell Riche
1171 R Oath of Lieges @Mark Zug
1172 R Pariah @Jon J Muth
1173 U Prison Term @Zoltan Boros & Gabor Szikszai
1174 R Rune of Protection: Lands @Scott M. Fischer
1175 R Sacred Mesa @Margaret Organ-Kean
1176 R Storm Herd @Jim Nelson
1177 C Whitemane Lion @Zoltan Boros & Gabor Szikszai
1178 R Dreamborn Muse @Kev Walker
1179 R Echo Mage @Matt Stewart
1180 R Equilibrium @Jeff Miracola
1181 R Flusterstorm @Erica Yang
1182 R Jace's Archivist @James Ryman
1183 C Leap @Kev Walker
1184 R Scalpelexis @Mark Tedin
1185 R Thing from the Deep @Paolo Parente
1186 R Tradewind Rider @John Matson
1187 R Trench Gorger @Hideaki Takamura
1188 C Brain Weevil @Anthony Jones
1189 U Consume Spirit @Matt Thompson
1190 C Dirtwater Wraith @Steve Luke
1191 U Fallen Ideal @Anson Maddocks
1192 R Kels, Fight Fixer @Magali Villeneuve
1193 R Netherborn Altar @Titus Lunter
1194 R Oppression @Pete Venters
1195 C Sadistic Augermage @Nick Percival
1196 U Spined Fluke @Mark A. Nelson
1197 U Throat Slitter @Paolo Parente
1198 R Zombie Apocalypse @Volkan Baǵa
1199 R Chaos Warp @Trevor Claxton
1200 U Cinder Elemental @Svetlin Velinov
1201 R Furnace of Rath @John Matson
1202 U Initiate of Blood @Carl Critchlow
1203 R Magmatic Force @Jung Park
1204 C Rift Bolt @Michael Sutfin
1205 R Ryusei, the Falling Star @Nottsuo
1206 R Shocker @Thomas M. Baxa
1207 R Taurean Mauler @Dominick Domingo
1208 R Burgeoning @Randy Gallegos
1209 R Collective Voyage @Charles Urbach
1210 R Forgotten Ancient @Mark Tedin
1211 C Giant Caterpillar @Zina Saunders
1212 C Gleeful Sabotage @Todd Lockwood
1213 R Hidden Herd @Andrew Robinson
1214 R Magus of the Vineyard @Jim Murray
1215 R Scavenging Ooze @Austin Hsu
1216 R Spawnwrithe @Daarken
1217 R Tornado Elemental @Alex Horley-Orlandelli
1218 R Verdant Force @DiTerlizzi
1219 R Vernal Bloom @Bob Eggleton
1220 U Adeliz, the Cinder Wind @Zezhou Chen
1221 M Aminatou, the Fateshifter @Seb McKinnon
1222 U Bladewing the Risen @Seb McKinnon
1223 U Bruenor Battlehammer @Wayne Reynolds
1224 U Dina, Soul Steeper @Chris Rahn
1225 U Elas il-Kor, Sadistic Pilgrim @G-host Lee
1226 U Eutropia the Twice-Favored @Sara Winters
1227 M Ghave, Guru of Spores @James Paick
1228 U Grumgully, the Generous @Milivoj Ćeran
1229 U Maja, Bretagard Protector @Lie Setiawan
1230 U Narfi, Betrayer King @Daarken
1231 U Rakdos Cackler @Ryan Barger
1232 U Vega, the Watcher @Paul Scott Canavan
1233 R Crystalline Crawler @Jason Felix
1234 C Suntouched Myr @Greg Hildebrandt
1235 R Flamekin Village @Ron Spears
1236 U Nivix, Aerie of the Firemind @Martina Pilcerova
1237 U Rix Maadi, Dungeon Palace @Martina Pilcerova
1238 R Thespian's Stage @John Avon
1239 C Warped Landscape @Cliff Childs
1240 R Eldrazi Conscription @Jaime Jones
1241 C Arcbound Mouser @Campbell White
1242 U Changeling Hero @Jeff Miracola
1243 R Charming Prince @Randy Vargas
1244 R Giant Killer @Jesper Ejsing
1245 U Rebuff the Wicked @Stephen Tappin
1246 C Royal Trooper @Scott M. Fischer
1247 U Auramancer's Guise @Greg Staples
1248 U Counterbalance @John Zeleznik
1249 R Faerie Artisans @Tony Foti
1250 U Faerie Harbinger @Larry MacDougall
1251 U Pemmin's Aura @Greg Staples
1252 C Spellstutter Sprite @Rebecca Guay
1253 C Bake into a Pie @Zoltan Boros
1254 U Cauldron Familiar @Milivoj Ćeran
1255 C Cursed Flesh @Ron Spencer
1256 R Demonic Bargain @Sam Guay
1257 U Foulmire Knight @Alex Brock
1258 M The Meathook Massacre @Chris Seaman
1259 R Mirri the Cursed @Filip Burburan
1260 U No Rest for the Wicked @Carl Critchlow
1261 U Aura Barbs @Aleksi Briclot
1262 U Dwarven Recruiter @Ciruelo
1263 M Embercleave @Joe Slucher
1264 C Giant's Ire @Alex Horley-Orlandelli
1265 U Mad Ratter @Johann Bodin
1266 U Rust Monster @Simon Dominic
1267 C Vulshok Sorcerer @rk post
1268 U Warchief Giant @Slawomir Maniak
1269 R Yidaro, Wandering Monster @Jesper Ejsing
1270 M Cavalier of Thorns @Jehan Choo
1271 C Echoing Courage @Greg Staples
1272 U Fae Offering @Lucas Graciano
1273 M Greensleeves, Maro-Sorcerer @Tuan Duong Chu
1274 R Hungry Lynx @Shreya Shetty
1275 R Once Upon a Time @Matt Stewart
1276 M Questing Beast @Igor Kieryluk
1277 R Return of the Wildspeaker @Chris Rallis
1278 R Wolfcaller's Howl @Ralph Horsley
1279 U Cunning Breezedancer @Todd Lockwood
1280 U Maraleaf Pixie @Matt Cavotta
1281 M Minsc & Boo, Timeless Heroes @Andreas Zafiratos
1282 M Oko, the Trickster @Chris Rallis
1283 M The Royal Scions @Paul Scott Canavan
1284 R Sythis, Harvest's Hand @Ryan Yee
1285 R Academy Manufactor @Campbell White
1286 U Clock of Omens @Ryan Yee
1287 U Enchanted Carriage @Zoltan Boros
1288 R Stonecoil Serpent @Mark Poole
1289 R Castle Garenbrig @Adam Paquette

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -315,6 +315,7 @@ Background
Cartouche Cartouche
Class Class
Curse Curse
Role
Rune Rune
Saga Saga
Shrine Shrine

View File

@@ -0,0 +1,8 @@
Name:Cursed
ManaCost:no cost
Types:Enchantment Aura Role
K:Enchant creature
A:SP$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Curse
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | SetPower$ 1 | SetToughness$ 1 | Description$ Enchanted creature is 1/1
SVar:SacMe:2
Oracle:Enchant Creature\nEnchanted creature is 1/1

View File

@@ -0,0 +1,7 @@
Name:Monster
ManaCost:no cost
Types:Enchantment Aura Role
K:Enchant creature
A:SP$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Pump
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Trample | Description$ Enchanted creature gets +1/+1 and has trample.
Oracle:Enchant Creature\nEnchanted creature gets +1/+1 and has trample.

View File

@@ -0,0 +1,7 @@
Name:Royal
ManaCost:no cost
Types:Enchantment Aura Role
K:Enchant creature
A:SP$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Pump
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Ward:1 | Description$ Enchanted creature gets +1/+1 and has ward {1}. (Whenever enchanted creature becomes the target of a spell or ability an opponent controls, counter it unless that player pays {1}.)
Oracle:Enchant Creature\nEnchanted creature gets +1/+1 and has ward {1}. (Whenever enchanted creature becomes the target of a spell or ability an opponent controls, counter it unless that player pays {1}.)

View File

@@ -0,0 +1,9 @@
Name:Sorcerer
ManaCost:no cost
Types:Enchantment Aura Role
K:Enchant creature
A:SP$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Pump
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 1 | AddToughness$ 1 | AddTrigger$ AttackTrig | Description$ Enchanted creature gets +1/+1 and has "Whenever this creature attacks, scry 1."
SVar:AttackTrig:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigScry | TriggerDescription$ Whenever this creature attacks, scry 1.
SVar:TrigScry:DB$ Scry | ScryNum$ 1
Oracle:Enchant Creature\nEnchanted creature gets +1/+1 and has "Whenever this creature attacks, scry 1."

View File

@@ -0,0 +1,8 @@
Name:Virtuous
ManaCost:no cost
Types:Enchantment Aura Role
K:Enchant creature
A:SP$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Pump
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ X | AddToughness$ X | Description$ Enchanted creature gets +1/+1 for each enchantment you control.
SVar:X:Count$Valid Enchantment.YouCtrl
Oracle:Enchant Creature\nEnchanted creature gets +1/+1.\nEnchanted creature gets +1/+1 for each enchantment you control.

View File

@@ -0,0 +1,9 @@
Name:Wicked
ManaCost:no cost
Types:Enchantment Aura Role
K:Enchant creature
A:SP$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Pump
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 1 | AddToughness$ 1 | Description$ Enchanted creature gets +1/+1
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigDamage | TriggerDescription$ When this Aura is put into a graveyard, each opponent loses 1 life.
SVar:TrigDamage:DB$ LoseLife | LifeAmount$ 1 | Defined$ Opponent
Oracle:Enchant Creature\nEnchanted creature gets +1/+1.\nWhen this Aura is put into a graveyard, each opponent loses 1 life.

Some files were not shown because too many files have changed in this diff Show More