diff --git a/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java b/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java index e76fe8c4f05..0b789237ed6 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CountersPutAi.java @@ -362,7 +362,7 @@ public class CountersPutAi extends CountersAi { } } - if ("Fight".equals(logic)) { + if ("Fight".equals(logic) || "PowerDmg".equals(logic)) { int nPump = 0; if (type.equals("P1P1")) { nPump = amount; diff --git a/forge-core/src/main/java/forge/card/CardDb.java b/forge-core/src/main/java/forge/card/CardDb.java index ce2a857ca44..4838a3aa551 100644 --- a/forge-core/src/main/java/forge/card/CardDb.java +++ b/forge-core/src/main/java/forge/card/CardDb.java @@ -872,6 +872,23 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { })); } + public Collection getUniqueCardsNoAltNoOnline() { + return Lists.newArrayList(Iterables.filter(getUniqueCardsNoAlt(), new Predicate() { + @Override + public boolean apply(final PaperCard paperCard) { + CardEdition edition = null; + try { + edition = editions.getEditionByCodeOrThrow(paperCard.getEdition()); + if (edition.getType() == Type.ONLINE||edition.getType() == Type.FUNNY) + return false; + } catch (Exception ex) { + return false; + } + return true; + } + })); + } + public Collection getAllNonPromosNonReprintsNoAlt() { return Lists.newArrayList(Iterables.filter(getAllCardsNoAlt(), new Predicate() { @Override diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index ecf8f2f12fb..01dfb9cf117 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -275,56 +275,51 @@ public class GameAction { lastKnownInfo = CardUtil.getLKICopy(c); } - if (!c.isRealToken()) { - copied = CardFactory.copyCard(c, false); + copied = CardFactory.copyCard(c, false); - if (zoneTo.is(ZoneType.Stack)) { - // when moving to stack, copy changed card information - copied.setChangedCardColors(c.getChangedCardColorsTable()); - copied.setChangedCardColorsCharacterDefining(c.getChangedCardColorsCharacterDefiningTable()); - copied.setChangedCardKeywords(c.getChangedCardKeywords()); - copied.setChangedCardTypes(c.getChangedCardTypesTable()); - copied.setChangedCardTypesCharacterDefining(c.getChangedCardTypesCharacterDefiningTable()); - copied.setChangedCardNames(c.getChangedCardNames()); - copied.setChangedCardTraits(c.getChangedCardTraits()); - copied.setDrawnThisTurn(c.getDrawnThisTurn()); + if (zoneTo.is(ZoneType.Stack)) { + // when moving to stack, copy changed card information + copied.setChangedCardColors(c.getChangedCardColorsTable()); + copied.setChangedCardColorsCharacterDefining(c.getChangedCardColorsCharacterDefiningTable()); + copied.setChangedCardKeywords(c.getChangedCardKeywords()); + copied.setChangedCardTypes(c.getChangedCardTypesTable()); + copied.setChangedCardTypesCharacterDefining(c.getChangedCardTypesCharacterDefiningTable()); + copied.setChangedCardNames(c.getChangedCardNames()); + copied.setChangedCardTraits(c.getChangedCardTraits()); + copied.setDrawnThisTurn(c.getDrawnThisTurn()); - copied.copyChangedTextFrom(c); - copied.setTimestamp(c.getTimestamp()); + copied.copyChangedTextFrom(c); + copied.setTimestamp(c.getTimestamp()); - // clean up changes that come from its own static abilities - copied.cleanupCopiedChangesFrom(c); + // clean up changes that come from its own static abilities + copied.cleanupCopiedChangesFrom(c); - // copy exiled properties when adding to stack - // will be cleanup later in MagicStack - copied.setExiledWith(c.getExiledWith()); - copied.setExiledBy(c.getExiledBy()); + // copy exiled properties when adding to stack + // will be cleanup later in MagicStack + copied.setExiledWith(c.getExiledWith()); + copied.setExiledBy(c.getExiledBy()); - // copy bestow timestamp - copied.setBestowTimestamp(c.getBestowTimestamp()); - } else { - // when a card leaves the battlefield, ensure it's in its original state - // (we need to do this on the object before copying it, or it won't work correctly e.g. - // on Transformed objects) - copied.setState(CardStateName.Original, false); - copied.setBackSide(false); + // copy bestow timestamp + copied.setBestowTimestamp(c.getBestowTimestamp()); + } else { + // when a card leaves the battlefield, ensure it's in its original state + // (we need to do this on the object before copying it, or it won't work correctly e.g. + // on Transformed objects) + copied.setState(CardStateName.Original, false); + copied.setBackSide(false); - // reset timestamp in changezone effects so they have same timestamp if ETB simultaneously - copied.setTimestamp(game.getNextTimestamp()); - } - - copied.setUnearthed(c.isUnearthed()); - copied.setTapped(false); - - // need to copy counters when card enters another zone than hand or library - if (lastKnownInfo.hasKeyword("Counters remain on CARDNAME as it moves to any zone other than a player's hand or library.") && - !(zoneTo.is(ZoneType.Hand) || zoneTo.is(ZoneType.Library))) { - copied.setCounters(Maps.newHashMap(lastKnownInfo.getCounters())); - } - } else { //Token - copied = c; + // reset timestamp in changezone effects so they have same timestamp if ETB simultaneously copied.setTimestamp(game.getNextTimestamp()); } + + copied.setUnearthed(c.isUnearthed()); + copied.setTapped(false); + + // need to copy counters when card enters another zone than hand or library + if (lastKnownInfo.hasKeyword("Counters remain on CARDNAME as it moves to any zone other than a player's hand or library.") && + !(zoneTo.is(ZoneType.Hand) || zoneTo.is(ZoneType.Library))) { + copied.setCounters(Maps.newHashMap(lastKnownInfo.getCounters())); + } } // ensure that any leftover keyword/type changes are cleared in the state view @@ -1440,7 +1435,6 @@ public class GameAction { checkAgain = true; } - if (game.getCombat() != null) { game.getCombat().removeAbsentCombatants(); } diff --git a/forge-game/src/main/java/forge/game/GameActionUtil.java b/forge-game/src/main/java/forge/game/GameActionUtil.java index 31adb42cd45..c6ce66f4d5b 100644 --- a/forge-game/src/main/java/forge/game/GameActionUtil.java +++ b/forge-game/src/main/java/forge/game/GameActionUtil.java @@ -22,6 +22,8 @@ import java.util.List; import java.util.Map; import com.google.common.collect.*; +import forge.game.card.*; +import forge.util.Aggregates; import org.apache.commons.lang3.StringUtils; import forge.card.MagicColor; @@ -30,13 +32,7 @@ import forge.card.mana.ManaCostParser; import forge.game.ability.AbilityFactory; import forge.game.ability.AbilityUtils; import forge.game.ability.ApiType; -import forge.game.card.Card; -import forge.game.card.CardCollection; -import forge.game.card.CardCollectionView; -import forge.game.card.CardFactoryUtil; -import forge.game.card.CardPlayOption; import forge.game.card.CardPlayOption.PayManaCost; -import forge.game.card.CounterType; import forge.game.cost.Cost; import forge.game.keyword.Keyword; import forge.game.keyword.KeywordInterface; @@ -566,7 +562,11 @@ public final class GameActionUtil { if (tr != null) { String n = o.split(":")[1]; if (host.wasCast() && n.equals("X")) { - n = Integer.toString(pc.announceRequirements(sa, "X for Casualty")); + CardCollectionView creatures = CardLists.filter(CardLists.filterControlledBy(game.getCardsIn + (ZoneType.Battlefield), activator), CardPredicates.Presets.CREATURES); + int max = Aggregates.max(creatures, CardPredicates.Accessors.fnGetNetPower); + int min = Aggregates.min(creatures, CardPredicates.Accessors.fnGetNetPower); + n = Integer.toString(pc.chooseNumber(sa, "Choose X for Casualty", min, max)); } final String casualtyCost = "Sac<1/Creature.powerGE" + n + "/creature with power " + n + " or greater>"; @@ -575,16 +575,14 @@ public final class GameActionUtil { boolean v = pc.addKeywordCost(sa, cost, ki, str); tr.setSVar("Casualty", v ? n : "0"); + tr.getOverridingAbility().setSVar("Casualty", v ? n : "0"); if (v) { if (result == null) { result = sa.copy(); } result.getPayCosts().add(cost); - tr.getOverridingAbility().setSVar("Casualty", n); reset = true; - } else { - tr.getOverridingAbility().setSVar("Casualty", "0"); } } } else if (o.equals("Conspire")) { @@ -769,7 +767,7 @@ public final class GameActionUtil { // Mark SAs with subAbilities as undoable. These are generally things like damage, and other stuff // that's hard to track and remove sa.setUndoable(false); - } else if ((sa.getParam("Amount") != null) && (amount != AbilityUtils.calculateAmount(sa.getHostCard(),sa.getParam("Amount"), sa))) { + } else if (sa.getParam("Amount") != null && amount != AbilityUtils.calculateAmount(sa.getHostCard(),sa.getParam("Amount"), sa)) { sa.setUndoable(false); } diff --git a/forge-game/src/main/java/forge/game/ability/ApiType.java b/forge-game/src/main/java/forge/game/ability/ApiType.java index f900b4b4555..9c9684da385 100644 --- a/forge-game/src/main/java/forge/game/ability/ApiType.java +++ b/forge-game/src/main/java/forge/game/ability/ApiType.java @@ -52,6 +52,7 @@ public enum ApiType { Cleanup (CleanUpEffect.class), Clone (CloneEffect.class), CompanionChoose (ChooseCompanionEffect.class), + Connive (ConniveEffect.class), CopyPermanent (CopyPermanentEffect.class), CopySpellAbility (CopySpellAbilityEffect.class), ControlSpell (ControlSpellEffect.class), diff --git a/forge-game/src/main/java/forge/game/ability/effects/ConniveEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ConniveEffect.java new file mode 100644 index 00000000000..ddc185cc5a5 --- /dev/null +++ b/forge-game/src/main/java/forge/game/ability/effects/ConniveEffect.java @@ -0,0 +1,94 @@ +package forge.game.ability.effects; + +import com.google.common.collect.Maps; +import forge.game.Game; +import forge.game.GameActionUtil; +import forge.game.GameEntityCounterTable; +import forge.game.ability.AbilityFactory; +import forge.game.ability.AbilityKey; +import forge.game.ability.AbilityUtils; +import forge.game.ability.SpellAbilityEffect; +import forge.game.card.*; +import forge.game.player.Player; +import forge.game.spellability.SpellAbility; +import forge.game.zone.ZoneType; +import forge.util.Lang; + +import java.util.List; +import java.util.Map; + +public class ConniveEffect extends SpellAbilityEffect { + + /* (non-Javadoc) + * @see forge.game.ability.SpellAbilityEffect#getStackDescription(forge.game.spellability.SpellAbility) + * returns the automatically generated stack description string + */ + @Override + protected String getStackDescription(SpellAbility sa) { + final StringBuilder sb = new StringBuilder(); + + List tgt = getTargetCards(sa); + + sb.append(Lang.joinHomogenous(tgt)).append(tgt.size() > 1 ? " connive." : " connives."); + + return sb.toString(); + } + + /* (non-Javadoc) + * @see forge.game.ability.SpellAbilityEffect#resolve(forge.game.spellability.SpellAbility) + */ + @Override + public void resolve(SpellAbility sa) { + final Card host = sa.getHostCard(); + final Player hostCon = host.getController(); + final Game game = host.getGame(); + final int num = AbilityUtils.calculateAmount(host, sa.getParamOrDefault("ConniveNum", "1"), sa); + + GameEntityCounterTable table = new GameEntityCounterTable(); + final CardZoneTable triggerList = new CardZoneTable(); + Map discardedMap = Maps.newHashMap(); + Map moveParams = AbilityKey.newMap(); + moveParams.put(AbilityKey.LastStateBattlefield, sa.getLastStateBattlefield()); + moveParams.put(AbilityKey.LastStateGraveyard, sa.getLastStateGraveyard()); + + for (final Card c : getTargetCards(sa)) { + final Player p = c.getController(); + + p.drawCards(num, sa, moveParams); + + CardCollectionView dPHand = p.getCardsIn(ZoneType.Hand); + dPHand = CardLists.filter(dPHand, CardPredicates.Presets.NON_TOKEN); + if (dPHand.isEmpty()) { // seems unlikely, but just to be safe + continue; // for loop over players + } + + CardCollection validCards = CardLists.getValidCards(dPHand, "Card", hostCon, host, sa); + + if (!p.canDiscardBy(sa, true)) { + continue; + } + + int amt = Math.min(validCards.size(), num); + CardCollectionView toBeDiscarded = amt == 0 ? CardCollection.EMPTY : + p.getController().chooseCardsToDiscardFrom(p, sa, validCards, amt, amt); + + if (toBeDiscarded.size() > 1) { + toBeDiscarded = GameActionUtil.orderCardsByTheirOwners(game, toBeDiscarded, ZoneType.Graveyard, sa); + } + + discardedMap.put(p, toBeDiscarded); + + int numCntrs = CardLists.getValidCardCount(toBeDiscarded, "Card.nonLand", hostCon, host, sa); + + // need to get newest game state to check if it is still on the battlefield and the timestamp didn't change + Card gamec = game.getCardState(c); + // if the card is not in the game anymore, this might still return true, but it's no problem + if (game.getZoneOf(gamec).is(ZoneType.Battlefield) && gamec.equalsWithTimestamp(c)) { + c.addCounter(CounterEnumType.P1P1, numCntrs, p, table); + } + } + discard(sa, triggerList, true, discardedMap, moveParams); + table.replaceCounterEffect(game, sa, true); + triggerList.triggerChangesZoneAll(game, sa); + } +} diff --git a/forge-game/src/main/java/forge/game/ability/effects/CountersPutEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CountersPutEffect.java index 3011c5a9e28..b93dc7c9841 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CountersPutEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CountersPutEffect.java @@ -45,8 +45,16 @@ public class CountersPutEffect extends SpellAbilityEffect { final StringBuilder stringBuilder = new StringBuilder(); final Card card = spellAbility.getHostCard(); - final int amount = AbilityUtils.calculateAmount(card, spellAbility.getParamOrDefault("CounterNum", "1"), - spellAbility); + final int amount = AbilityUtils.calculateAmount(card, + spellAbility.getParamOrDefault("CounterNum", "1"), spellAbility); + if (spellAbility.hasParam("CounterTypes")) { + stringBuilder.append(spellAbility.getActivatingPlayer()).append(" "); + String desc = spellAbility.getDescription(); + desc = desc.substring(desc.indexOf("Put"), desc.indexOf(" on ") + 4) + .replaceFirst("Put", "puts"); + stringBuilder.append(desc).append(Lang.joinHomogenous(getTargets(spellAbility))).append("."); + return stringBuilder.toString(); + } // skip the StringBuilder if no targets are chosen ("up to" scenario) if (spellAbility.usesTargeting()) { final List targetCards = SpellAbilityEffect.getTargetCards(spellAbility); @@ -250,6 +258,51 @@ public class CountersPutEffect extends SpellAbilityEffect { } } + if (sa.hasParam("ChooseDifferent")) { + final int num = Integer.parseInt(sa.getParam("ChooseDifferent")); + final List typesToAdd = Lists.newArrayList(); + String options = sa.getParam("CounterType"); + for (int i = 0; i < num; i++) { + CounterType ct = chooseTypeFromList(sa, options, obj, pc); + typesToAdd.add(ct); + options = options.replace(ct.getName(),""); + } + for (CounterType ct : typesToAdd) { + if (obj instanceof Player) { + ((Player) obj).addCounter(ct, counterAmount, placer, table); + } + if (obj instanceof Card) { + if (etbcounter) { + gameCard.addEtbCounter(ct, counterAmount, placer); + } else { + gameCard.addCounter(ct, counterAmount, placer, table); + } + } + } + continue; + } + + if (sa.hasParam("CounterTypes")) { + final List typesToAdd = Lists.newArrayList(); + String types = sa.getParam("CounterTypes"); + if (types.contains("ChosenFromList")) { + typesToAdd.add(chooseTypeFromList(sa, sa.getParam("TypeList"), obj, pc)); + types = types.replace("ChosenFromList", ""); + } + for (String type : types.split(",")) { + typesToAdd.add(CounterType.getType(type)); + } + for (CounterType ct : typesToAdd) { + if (obj instanceof Player) { + ((Player) obj).addCounter(ct, counterAmount, placer, table); + } + if (obj instanceof Card) { + gameCard.addCounter(ct, counterAmount, placer, table); + } + } + continue; + } + if (existingCounter) { final List choices = Lists.newArrayList(); // get types of counters @@ -295,17 +348,8 @@ public class CountersPutEffect extends SpellAbilityEffect { } continue; } - if (sa.hasParam("CounterTypePerDefined")) { - List choices = Lists.newArrayList(); - for (String s : sa.getParam("CounterType").split(",")) { - choices.add(CounterType.getType(s)); - } - Map params = Maps.newHashMap(); - params.put("Target", obj); - StringBuilder sb = new StringBuilder(); - sb.append(Localizer.getInstance().getMessage("lblSelectCounterTypeAddTo") + " "); - sb.append(obj); - counterType = pc.chooseCounterType(choices, sa, sb.toString(), params); + if (sa.hasParam("CounterTypePerDefined") || sa.hasParam("UniqueType")) { + counterType = chooseTypeFromList(sa, sa.getParam("CounterType"), obj, pc); } if (obj instanceof Card) { @@ -471,16 +515,11 @@ public class CountersPutEffect extends SpellAbilityEffect { } else { CounterType counterType = null; if (!sa.hasParam("EachExistingCounter") && !sa.hasParam("EachFromSource") - && !sa.hasParam("CounterTypePerDefined")) { + && !sa.hasParam("UniqueType") && !sa.hasParam("CounterTypePerDefined") + && !sa.hasParam("CounterTypes") && !sa.hasParam("ChooseDifferent")) { try { - List choices = Lists.newArrayList(); - for (String s : sa.getParam("CounterType").split(",")) { - choices.add(CounterType.getType(s)); - } - Map params = Maps.newHashMap(); - StringBuilder sb = new StringBuilder(); - sb.append(Localizer.getInstance().getMessage("lblSelectCounterTypeAddTo")); - counterType = placer.getController().chooseCounterType(choices, sa, sb.toString(), params); + counterType = chooseTypeFromList(sa, sa.getParam("CounterType"), null, + placer.getController()); } catch (Exception e) { System.out.println("Counter type doesn't match, nor does an SVar exist with the type name."); return; @@ -541,6 +580,27 @@ public class CountersPutEffect extends SpellAbilityEffect { } } + protected CounterType chooseTypeFromList(SpellAbility sa, String list, GameEntity obj, PlayerController pc) { + List choices = Lists.newArrayList(); + for (String s : list.split(",")) { + if (!s.equals("") && (!sa.hasParam("UniqueType") || obj.getCounters(CounterType.getType(s)) == 0)) { + choices.add(CounterType.getType(s)); + } + } + if (sa.hasParam("RandomType")) { + return Aggregates.random(choices); + } + Map params = Maps.newHashMap(); + params.put("Target", obj); + StringBuilder sb = new StringBuilder(); + if (obj != null) { + sb.append(Localizer.getInstance().getMessage("lblSelectCounterTypeAddTo")).append(" ").append(obj); + } else { + sb.append(Localizer.getInstance().getMessage("lblSelectCounterType")); + } + return pc.chooseCounterType(choices, sa, sb.toString(), params); + } + protected String logOutput(Map randomMap, Card card) { StringBuilder randomLog = new StringBuilder(); randomLog.append(card.getName()).append(" randomly distributed "); diff --git a/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java index 1e8fb401bc4..cccbe92417c 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java @@ -67,14 +67,34 @@ public class DigEffect extends SpellAbilityEffect { } String verb2 = "put "; - String where = "in their hand "; + String where = " in their hand "; if (destZone1.equals("exile")) { verb2 = "exile "; - where = ""; + where = " "; + } else if (destZone1.equals("battlefield")) { + verb2 = "put "; + where = " onto the battlefield "; } - sb.append(" They ").append(verb2).append(Lang.getNumeral(numToChange)).append(" of them ").append(where); - sb.append(sa.hasParam("ExileFaceDown") ? "face down " : "").append("and put the rest "); - sb.append(destZone2); + + sb.append(" They ").append(sa.hasParam("Optional") ? "may " : "").append(verb2); + if (sa.hasParam("ChangeValid")) { + String what = sa.hasParam("ChangeValidDesc") ? sa.getParam("ChangeValidDesc") : + sa.getParam("ChangeValid"); + sb.append(Lang.nounWithNumeralExceptOne(numToChange, what)).append(" from among them").append(where); + } else { + sb.append(Lang.getNumeral(numToChange)).append(" of them").append(where); + } + sb.append(sa.hasParam("ExileFaceDown") ? "face down " : ""); + if (sa.hasParam("WithCounter") || sa.hasParam("ExileWithCounter")) { + String ctr = sa.hasParam("WithCounter") ? sa.getParam("WithCounter") : + sa.getParam("ExileWithCounter"); + sb.append("with a "); + sb.append(CounterType.getType(ctr).getName().toLowerCase()); + sb.append(" counter on it. They "); + } else { + sb.append("and "); + } + sb.append("put the rest ").append(destZone2); } return sb.toString(); @@ -388,6 +408,9 @@ public class DigEffect extends SpellAbilityEffect { if (sa.hasParam("Tapped")) { c.setTapped(true); } + if (destZone1.equals(ZoneType.Battlefield) && sa.hasParam("WithCounter")) { + c.addEtbCounter(CounterType.getType(sa.getParam("WithCounter")), 1, player); + } c = game.getAction().moveTo(zone, c, sa, moveParams); if (destZone1.equals(ZoneType.Battlefield)) { if (addToCombat(c, c.getController(), sa, "Attacking", "Blocking")) { diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index e141bd54eae..4d8cc461759 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -4419,7 +4419,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { final boolean removeAllKeywords, final long timestamp, final long staticId, final boolean updateView) { List kws = Lists.newArrayList(); if (keywords != null) { - for(String kw : keywords) { + for (String kw : keywords) { kws.add(getKeywordForStaticAbility(kw, staticId)); } } diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbilityVariables.java b/forge-game/src/main/java/forge/game/spellability/SpellAbilityVariables.java index 814eecda2fb..65eda28205b 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbilityVariables.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbilityVariables.java @@ -398,7 +398,6 @@ public class SpellAbilityVariables implements Cloneable { this.setCardsInHand2(cards); } - public final void setHellbent(final boolean bHellbent) { this.hellbent = bHellbent; } @@ -719,7 +718,6 @@ public class SpellAbilityVariables implements Cloneable { return this.gameTypes; } - /** * Gets the present defined. * diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/views/ImageView.java b/forge-gui-desktop/src/main/java/forge/itemmanager/views/ImageView.java index 66bfc145c00..7e6a156dcb8 100644 --- a/forge-gui-desktop/src/main/java/forge/itemmanager/views/ImageView.java +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/views/ImageView.java @@ -1170,8 +1170,8 @@ public class ImageView extends ItemView { final int drawY = bounds.y + borderSize; final int drawWidth = bounds.width - 2 * borderSize; final int drawHeight = bounds.height - 2 * borderSize; - final int imageWidth = Math.round(drawWidth * screenScale); - final int imageHeight = Math.round(drawHeight * screenScale); + final int imageWidth = Math.round(drawWidth * screenScale)-1; + final int imageHeight = Math.round(drawHeight * screenScale)-1; BufferedImage img = ImageCache.getImage(item, imageWidth, imageHeight, itemInfo.alt); if (img != null) { diff --git a/forge-gui-mobile/src/forge/adventure/data/RewardData.java b/forge-gui-mobile/src/forge/adventure/data/RewardData.java index 297dfe08e0f..a7cbdc98d90 100644 --- a/forge-gui-mobile/src/forge/adventure/data/RewardData.java +++ b/forge-gui-mobile/src/forge/adventure/data/RewardData.java @@ -78,11 +78,11 @@ public class RewardData { RewardData legals=Config.instance().getConfigData().legalCards; if(legals==null) { - allCards = FModel.getMagicDb().getCommonCards().getUniqueCardsNoAlt(); + allCards = FModel.getMagicDb().getCommonCards().getUniqueCardsNoAltNoOnline(); } else { - allCards = Iterables.filter(FModel.getMagicDb().getCommonCards().getUniqueCardsNoAlt(), new CardUtil.CardPredicate(legals, true)); + allCards = Iterables.filter(FModel.getMagicDb().getCommonCards().getUniqueCardsNoAltNoOnline(), new CardUtil.CardPredicate(legals, true)); } allEnemyCards=Iterables.filter(allCards, new Predicate() { @Override diff --git a/forge-gui-mobile/src/forge/adventure/stage/GameHUD.java b/forge-gui-mobile/src/forge/adventure/stage/GameHUD.java index 70646a4dcbe..2ce7b81badd 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/GameHUD.java +++ b/forge-gui-mobile/src/forge/adventure/stage/GameHUD.java @@ -214,6 +214,8 @@ public class GameHUD extends Stage { touchpad.setBounds(touch.x-TOUCHPAD_SCALE/2, touch.y-TOUCHPAD_SCALE/2, TOUCHPAD_SCALE, TOUCHPAD_SCALE); touchpad.setVisible(true); touchpad.setResetOnTouchUp(true); + if (!Forge.isLandscapeMode()) + hideButtons(); return super.touchDown(screenX, screenY, pointer, button); } } @@ -289,6 +291,20 @@ public class GameHUD extends Stage { return true; } + if (keycode == Input.Keys.BACK) { + if (!Forge.isLandscapeMode()) { + menuActor.setVisible(!menuActor.isVisible()); + statsActor.setVisible(!statsActor.isVisible()); + inventoryActor.setVisible(!inventoryActor.isVisible()); + deckActor.setVisible(!deckActor.isVisible()); + } + } return super.keyDown(keycode); } + public void hideButtons() { + menuActor.setVisible(false); + deckActor.setVisible(false); + inventoryActor.setVisible(false); + statsActor.setVisible(false); + } } diff --git a/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java b/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java index e7cfbb758e4..6f4273edacf 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java +++ b/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java @@ -32,6 +32,7 @@ import java.util.Iterator; import java.util.List; import java.util.Random; + /** * Stage for the over world. Will handle monster spawns */ @@ -262,10 +263,8 @@ public class WorldStage extends GameStage implements SaveFileContent { @Override public void load(SaveFileData data) { try { - for(Pair enemy:enemies) - foregroundSprites.removeActor(enemy.getValue()); - enemies.clear(); - background.clear(); + clearCache(); + List timeouts= (List) data.readObject("timeouts"); @@ -288,6 +287,15 @@ public class WorldStage extends GameStage implements SaveFileContent { } } + public void clearCache() { + + for(Pair enemy:enemies) + foregroundSprites.removeActor(enemy.getValue()); + enemies.clear(); + background.clear(); + player=null; + } + @Override public SaveFileData save() { SaveFileData data=new SaveFileData(); diff --git a/forge-gui-mobile/src/forge/adventure/world/World.java b/forge-gui-mobile/src/forge/adventure/world/World.java index 205aba57e3f..ab240aa1a51 100644 --- a/forge-gui-mobile/src/forge/adventure/world/World.java +++ b/forge-gui-mobile/src/forge/adventure/world/World.java @@ -16,6 +16,7 @@ import forge.adventure.data.WorldData; import forge.adventure.pointofintrest.PointOfInterest; import forge.adventure.pointofintrest.PointOfInterestMap; import forge.adventure.scene.Scene; +import forge.adventure.stage.WorldStage; import forge.adventure.util.Config; import forge.adventure.util.Paths; import forge.adventure.util.SaveFileContent; @@ -505,7 +506,8 @@ public class World implements Disposable, SaveFileContent { } biomeImage = pix; - return this;//new World(); + WorldStage.getInstance().clearCache(); + return this; } public int getWidthInTiles() { diff --git a/forge-gui/res/blockdata/blocks.txt b/forge-gui/res/blockdata/blocks.txt index f4ea3ab4395..22b4a41212d 100644 --- a/forge-gui/res/blockdata/blocks.txt +++ b/forge-gui/res/blockdata/blocks.txt @@ -102,3 +102,4 @@ Innistrad: Midnight Hunt, 3/6/MID, MID Innistrad: Crimson Vow, 3/6/VOW, VOW Innistrad: Double Feature, 3/6/MID, DBL Kamigawa: Neon Dynasty, 3/6/NEO, NEO +Streets of New Capenna, 3/6/SNC, SNC diff --git a/forge-gui/res/cardsfolder/a/angel_of_condemnation.txt b/forge-gui/res/cardsfolder/a/angel_of_condemnation.txt index b6788bf7f7c..d708a53a78d 100644 --- a/forge-gui/res/cardsfolder/a/angel_of_condemnation.txt +++ b/forge-gui/res/cardsfolder/a/angel_of_condemnation.txt @@ -5,7 +5,8 @@ PT:3/3 K:Flying K:Vigilance A:AB$ ChangeZone | Cost$ 2 W T | ValidTgts$ Creature.Other | Mandatory$ True | TgtPrompt$ Select another target creature | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DelTrig | SpellDescription$ Exile another target creature. Return that card to the battlefield under its owner's control at the beginning of the next end step. -SVar:DelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigBounce | RememberObjects$ RememberedLKI | TriggerDescription$ Return exiled creature to the battlefield. | SubAbility$ DBCleanup +SVar:DelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigBounce | RememberObjects$ RememberedLKI | TriggerDescription$ Return that card to the battlefield under its owner's control at the beginning of the next end step. | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:TrigBounce:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | Defined$ DelayTriggerRememberedLKI SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True A:AB$ ChangeZone | Cost$ 2 W T Exert<1/CARDNAME> | Mandatory$ True | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature.Other | TgtPrompt$ Select another target creature | Duration$ UntilHostLeavesPlay | SpellDescription$ Exile another target creature until CARDNAME leaves the battlefield. (An exerted creature won't untap during your next untap step.) diff --git a/forge-gui/res/cardsfolder/a/awe_strike.txt b/forge-gui/res/cardsfolder/a/awe_strike.txt index 5842bac2da7..fe6cdd36040 100644 --- a/forge-gui/res/cardsfolder/a/awe_strike.txt +++ b/forge-gui/res/cardsfolder/a/awe_strike.txt @@ -1,10 +1,8 @@ Name:Awe Strike ManaCost:W Types:Instant -A:SP$ Effect | Cost$ W | ValidTgts$ Creature | TgtPrompt$ Select target creature to entrance | Name$ Awe Struck | ReplacementEffects$ StrikeWithAwe | Triggers$ OutOfSight | RememberObjects$ Targeted | AILogic$ Fog | SpellDescription$ The next time target creature would deal damage this turn, prevent that damage. You gain life equal to the damage prevented this way. +A:SP$ Effect | Cost$ W | ValidTgts$ Creature | TgtPrompt$ Select target creature to entrance | Name$ Awe Struck | ReplacementEffects$ StrikeWithAwe | ExileOnMoved$ Battlefield | RememberObjects$ Targeted | AILogic$ Fog | SpellDescription$ The next time target creature would deal damage this turn, prevent that damage. You gain life equal to the damage prevented this way. SVar:StrikeWithAwe:Event$ DamageDone | ValidSource$ Card.IsRemembered | ReplaceWith$ GainLifeInstead | PreventionEffect$ True | Description$ The next time the targeted creature would deal damage this turn, prevent that damage. You gain life equal to the damage prevented this way. SVar:GainLifeInstead:DB$ GainLife | Defined$ You | LifeAmount$ X | SubAbility$ ExileEffect SVar:X:ReplaceCount$DamageAmount -SVar:OutOfSight:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Creature.IsRemembered | Execute$ ExileEffect | Static$ True -SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile Oracle:The next time target creature would deal damage this turn, prevent that damage. You gain life equal to the damage prevented this way. diff --git a/forge-gui/res/cardsfolder/b/beacon_of_destiny.txt b/forge-gui/res/cardsfolder/b/beacon_of_destiny.txt index 4ceeb753588..f84d9f4853d 100644 --- a/forge-gui/res/cardsfolder/b/beacon_of_destiny.txt +++ b/forge-gui/res/cardsfolder/b/beacon_of_destiny.txt @@ -7,7 +7,7 @@ SVar:DBEffect:DB$ Effect | ReplacementEffects$ SelflessDamage | Triggers$ OutOfS SVar:SelflessDamage:Event$ DamageDone | ValidTarget$ You | ValidSource$ Card.ChosenCard,Emblem.ChosenCard | ReplaceWith$ SelflessDmg | DamageTarget$ EffectSource | Description$ The next time a source of your choice would deal damage to you this turn, that damage is dealt to EFFECTSOURCE instead. SVar:SelflessDmg:DB$ ReplaceEffect | VarName$ Affected | VarValue$ EffectSource | VarType$ Card | SubAbility$ ExileEffect #Zone Change for the source of your choice -SVar:OutOfSight:Mode$ ChangesZone | Origin$ Any | Destination$ Any | Defined$ ChosenCard | Execute$ ExileEffect | Static$ True +SVar:OutOfSight:Mode$ ChangesZone | Origin$ Any | Destination$ Any | ValidCard$ Card.ChosenCard | Execute$ ExileEffect | Static$ True SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile | Static$ True SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/b/boot_nipper.txt b/forge-gui/res/cardsfolder/b/boot_nipper.txt index d6e72a278cb..f87739a9616 100644 --- a/forge-gui/res/cardsfolder/b/boot_nipper.txt +++ b/forge-gui/res/cardsfolder/b/boot_nipper.txt @@ -3,8 +3,6 @@ ManaCost:1 B Types:Creature Beast PT:2/1 K:ETBReplacement:Other:CounterChoice -SVar:CounterChoice:DB$ GenericChoice | Defined$ You | Choices$ Deathtouch,Lifelink | SpellDescription$ CARDNAME enters the battlefield with your choice of a deathtouch counter or a lifelink counter on it. -SVar:Deathtouch:DB$ PutCounter | CounterType$ Deathtouch | CounterNum$ 1 | ETB$ True | SpellDescription$ Deathtouch -SVar:Lifelink:DB$ PutCounter | CounterType$ Lifelink | CounterNum$ 1 | ETB$ True | SpellDescription$ Lifelink -DeckHints:Ability$Counters +SVar:CounterChoice:DB$ PutCounter | ETB$ True | CounterType$ Deathtouch,Lifelink | SpellDescription$ CARDNAME enters the battlefield with your choice of a deathtouch counter or a lifelink counter on it. +DeckHints:Ability$Counters|LifeGain Oracle:Boot Nipper enters the battlefield with your choice of a deathtouch counter or a lifelink counter on it. diff --git a/forge-gui/res/cardsfolder/b/brace_for_impact.txt b/forge-gui/res/cardsfolder/b/brace_for_impact.txt index d4ab0bb59f6..f232d0469e1 100644 --- a/forge-gui/res/cardsfolder/b/brace_for_impact.txt +++ b/forge-gui/res/cardsfolder/b/brace_for_impact.txt @@ -1,11 +1,9 @@ Name:Brace for Impact ManaCost:4 W Types:Instant -A:SP$ Effect | Cost$ 4 W | ValidTgts$ Creature.MultiColor | TgtPrompt$ Select target multicolored creature | Name$ Brace Effect | Triggers$ EndTrackingEffect | ReplacementEffects$ BraceReplace | RememberObjects$ Targeted | SpellDescription$ Prevent all damage that would be dealt to target multicolored creature this turn. For each 1 damage prevented this way, put a +1/+1 counter on that creature. +A:SP$ Effect | Cost$ 4 W | ValidTgts$ Creature.MultiColor | TgtPrompt$ Select target multicolored creature | Name$ Brace Effect | ExileOnMoved$ Battlefield | ReplacementEffects$ BraceReplace | RememberObjects$ Targeted | SpellDescription$ Prevent all damage that would be dealt to target multicolored creature this turn. For each 1 damage prevented this way, put a +1/+1 counter on that creature. SVar:BraceReplace:Event$ DamageDone | ValidTarget$ Card.IsRemembered | ReplaceWith$ ImpactCounters | PreventionEffect$ True | Description$ Prevent all damage that would be dealt to targeted multicolored creature this turn. For each 1 damage prevented this way, put a +1/+1 counter on that creature. SVar:ImpactCounters:DB$ PutCounter | Defined$ ReplacedTarget | CounterType$ P1P1 | CounterNum$ X SVar:X:ReplaceCount$DamageAmount -SVar:EndTrackingEffect:Mode$ ChangesZone | ValidCard$ Card.IsRemembered | Origin$ Battlefield | Destination$ Any | Execute$ ExileEffect | Static$ True -SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile AI:RemoveDeck:All Oracle:Prevent all damage that would be dealt to target multicolored creature this turn. For each 1 damage prevented this way, put a +1/+1 counter on that creature. diff --git a/forge-gui/res/cardsfolder/c/carom.txt b/forge-gui/res/cardsfolder/c/carom.txt index 566dc3ec8ac..8996cee4ef7 100644 --- a/forge-gui/res/cardsfolder/c/carom.txt +++ b/forge-gui/res/cardsfolder/c/carom.txt @@ -5,7 +5,7 @@ A:SP$ Pump | Cost$ 1 W | ValidTgts$ Creature | TgtPrompt$ Select target creature SVar:DBEffect:DB$ Effect | ValidTgts$ Creature | TargetUnique$ True | TgtPrompt$ Select target creature to redirect the damage to | ReplacementEffects$ CaromDamage | Triggers$ OutOfSight | RememberObjects$ ParentTarget | ImprintCards$ ThisTargetedCard | ExileOnMoved$ Battlefield | ConditionDefined$ ParentTarget | ConditionPresent$ Creature | ConditionCompare$ GE1 | SubAbility$ DBDraw SVar:CaromDamage:Event$ DamageDone | ValidTarget$ Creature.IsRemembered | ReplaceWith$ CaromDmg | DamageTarget$ Imprinted | Description$ The next 1 damage that would be dealt to target creature this turn is dealt to another target creature instead. SVar:CaromDmg:DB$ ReplaceSplitDamage | DamageTarget$ Imprinted -SVar:OutOfSight:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Defined$ Imprinted | Execute$ ExileEffect | Static$ True +SVar:OutOfSight:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.IsImprinted | Execute$ ExileEffect | Static$ True SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:DBDraw:DB$ Draw | NumCards$ 1 AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/c/crystalline_giant.txt b/forge-gui/res/cardsfolder/c/crystalline_giant.txt index 3d41ffafaaa..cc6f8232c54 100644 --- a/forge-gui/res/cardsfolder/c/crystalline_giant.txt +++ b/forge-gui/res/cardsfolder/c/crystalline_giant.txt @@ -2,18 +2,8 @@ Name:Crystalline Giant ManaCost:3 Types:Artifact Creature Giant PT:3/3 -T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigGenericChoice | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, choose a kind of counter at random that CARDNAME doesn't have on it from among flying, first strike, deathtouch, hexproof, lifelink, menace, reach, trample, vigilance, and +1/+1. Put a counter of that kind on CARDNAME. -SVar:TrigGenericChoice:DB$ GenericChoice | AtRandom$ True | Choices$ Flying,FirstStrike,Deathtouch,Hexproof,Lifelink,Menace,Reach,Trample,Vigilance,P1P1 -SVar:Flying:DB$ PutCounter | IsPresent$ Card.Self+counters_EQ0_Flying | CounterType$ Flying | CounterNum$ 1 | SpellDescription$ FLY -SVar:FirstStrike:DB$ PutCounter | IsPresent$ Card.Self+counters_EQ0_First Strike | CounterType$ First Strike | CounterNum$ 1 | SpellDescription$ FIR -SVar:Deathtouch:DB$ PutCounter | IsPresent$ Card.Self+counters_EQ0_Deathtouch | CounterType$ Deathtouch | CounterNum$ 1 | SpellDescription$ DEA -SVar:Hexproof:DB$ PutCounter | IsPresent$ Card.Self+counters_EQ0_Hexproof | CounterType$ Hexproof | CounterNum$ 1 | SpellDescription$ HEX -SVar:Lifelink:DB$ PutCounter | IsPresent$ Card.Self+counters_EQ0_Lifelink | CounterType$ Lifelink | CounterNum$ 1 | SpellDescription$ LIF -SVar:Menace:DB$ PutCounter | IsPresent$ Card.Self+counters_EQ0_Menace | CounterType$ Menace | CounterNum$ 1 | SpellDescription$ MEN -SVar:Reach:DB$ PutCounter | IsPresent$ Card.Self+counters_EQ0_Reach | CounterType$ Reach | CounterNum$ 1 | SpellDescription$ REA -SVar:Trample:DB$ PutCounter | IsPresent$ Card.Self+counters_EQ0_Trample | CounterType$ Trample | CounterNum$ 1 | SpellDescription$ TRA -SVar:Vigilance:DB$ PutCounter | IsPresent$ Card.Self+counters_EQ0_Vigilance | CounterType$ Vigilance | CounterNum$ 1 | SpellDescription$ VIG -SVar:P1P1:DB$ PutCounter | IsPresent$ Card.Self+counters_EQ0_P1P1 | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ P1P1 +T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, choose a kind of counter at random that CARDNAME doesn't have on it from among flying, first strike, deathtouch, hexproof, lifelink, menace, reach, trample, vigilance, and +1/+1. Put a counter of that kind on CARDNAME. +SVar:TrigPutCounter:DB$ PutCounter | UniqueType$ True | RandomType$ True | CounterType$ Flying,First Strike,Deathtouch,Hexproof,Lifelink,Menace,Reach,Trample,Vigilance,P1P1 SVar:PlayMain1:TRUE -DeckHas:Ability$Counters +DeckHas:Ability$Counters|LifeGain Oracle:At the beginning of combat on your turn, choose a kind of counter at random that Crystalline Giant doesn't have on it from among flying, first strike, deathtouch, hexproof, lifelink, menace, reach, trample, vigilance, and +1/+1. Put a counter of that kind on Crystalline Giant. diff --git a/forge-gui/res/cardsfolder/d/diseased_vermin.txt b/forge-gui/res/cardsfolder/d/diseased_vermin.txt index 73ef3386bb7..b0e60831e11 100644 --- a/forge-gui/res/cardsfolder/d/diseased_vermin.txt +++ b/forge-gui/res/cardsfolder/d/diseased_vermin.txt @@ -8,6 +8,6 @@ SVar:DBRemember:DB$ Pump | RememberObjects$ Opponent | StackDescription$ None T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ DBDisease | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of your upkeep, Diseased Vermin deals X damage to target opponent previously dealt damage by it, where X is the number of infection counters on it. SVar:DBDisease:DB$ DealDamage | ValidTgts$ Opponent.IsRemembered | NumDmg$ X SVar:X:Count$CardCounters.INFECTION -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Defined$ Self | Execute$ DBCleanup | Static$ True +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ DBCleanup | Static$ True SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:Whenever Diseased Vermin deals combat damage to a player, put an infection counter on it.\nAt the beginning of your upkeep, Diseased Vermin deals X damage to target opponent previously dealt damage by it, where X is the number of infection counters on it. diff --git a/forge-gui/res/cardsfolder/d/dromokas_command.txt b/forge-gui/res/cardsfolder/d/dromokas_command.txt index afaffaf2223..537f62110c8 100644 --- a/forge-gui/res/cardsfolder/d/dromokas_command.txt +++ b/forge-gui/res/cardsfolder/d/dromokas_command.txt @@ -2,10 +2,8 @@ Name:Dromoka's Command ManaCost:G W Types:Instant A:SP$ Charm | Cost$ G W | Choices$ DBPrevent,DBSacrifice,DBPutCounter,DBPump | CharmNum$ 2 -SVar:DBPrevent:DB$ Effect | ValidTgts$ Instant,Sorcery | AILogic$ Prevent | TgtZone$ Stack | TgtPrompt$ Select target instant or sorcery spell to prevent damage from | StaticAbilities$ PreventDmg | Triggers$ TargetMoved | RememberObjects$ TargetedSource | SpellDescription$ Prevent all damage target instant or sorcery spell would deal this turn. +SVar:DBPrevent:DB$ Effect | ValidTgts$ Instant,Sorcery | AILogic$ Prevent | TgtZone$ Stack | TgtPrompt$ Select target instant or sorcery spell to prevent damage from | StaticAbilities$ PreventDmg | ExileOnMoved$ Stack | RememberObjects$ TargetedSource | SpellDescription$ Prevent all damage target instant or sorcery spell would deal this turn. SVar:PreventDmg:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Stack | Affected$ Card.IsRemembered | AddKeyword$ Prevent all damage that would be dealt by CARDNAME. | Description$ Prevent all damage target instant or sorcery spell would deal this turn. -SVar:TargetMoved:Mode$ ChangesZone | Origin$ Stack | Destination$ Any | ValidCard$ Card.IsRemembered | Execute$ ExileEffect | TriggerZones$ Command | Static$ True -SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:DBSacrifice:DB$ Sacrifice | ValidTgts$ Player | TgtPrompt$ Select target player to sacrifice an enchantment | SacValid$ Enchantment | SacMessage$ Enchantment | SpellDescription$ Target player sacrifices an enchantment. SVar:DBPutCounter:DB$ PutCounter | ValidTgts$ Creature | TgtPrompt$ Select target creature to put a +1/+1 counter on | AILogic$ Good | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Put a +1/+1 counter on target creature. SVar:DBPump:DB$ Pump | ValidTgts$ Creature.YouCtrl | AILogic$ Fight | TgtPrompt$ Choose target creature you control to fight | StackDescription$ None | SubAbility$ DBFight | SpellDescription$ Target creature you control fights target creature you don't control. diff --git a/forge-gui/res/cardsfolder/f/ferocious_tigorilla.txt b/forge-gui/res/cardsfolder/f/ferocious_tigorilla.txt index 087c946c41c..3202805a268 100644 --- a/forge-gui/res/cardsfolder/f/ferocious_tigorilla.txt +++ b/forge-gui/res/cardsfolder/f/ferocious_tigorilla.txt @@ -3,8 +3,6 @@ ManaCost:3 R Types:Creature Cat Ape PT:4/3 K:ETBReplacement:Other:CounterChoice -SVar:CounterChoice:DB$ GenericChoice | Defined$ You | Choices$ Trample,Menace | SpellDescription$ CARDNAME enters the battlefield with your choice of a trample counter or a menace counter on it. -SVar:Trample:DB$ PutCounter | ETB$ True | CounterType$ Trample | CounterNum$ 1 | SpellDescription$ CARDNAME enters the battlefield with a trample counter -SVar:Menace:DB$ PutCounter | ETB$ True | CounterType$ Menace | CounterNum$ 1 | SpellDescription$ CARDNAME enters the battlefield with a menace counter +SVar:CounterChoice:DB$ PutCounter | ETB$ True | CounterType$ Trample,Menace | SpellDescription$ CARDNAME enters the battlefield with your choice of a trample counter or a menace counter on it. (A creature with menace can't be blocked except by two or more creatures.) DeckHas:Ability$Counters Oracle:Ferocious Tigorilla enters the battlefield with your choice of a trample counter or a menace counter on it. (A creature with menace can't be blocked except by two or more creatures.) diff --git a/forge-gui/res/cardsfolder/f/flycatcher_giraffid.txt b/forge-gui/res/cardsfolder/f/flycatcher_giraffid.txt index f8714bfaad6..058c635e53c 100644 --- a/forge-gui/res/cardsfolder/f/flycatcher_giraffid.txt +++ b/forge-gui/res/cardsfolder/f/flycatcher_giraffid.txt @@ -3,8 +3,6 @@ ManaCost:4 G Types:Creature Antelope Lizard PT:3/5 K:ETBReplacement:Other:CounterChoice -SVar:CounterChoice:DB$ GenericChoice | Defined$ You | Choices$ Vigilance,Reach | SpellDescription$ CARDNAME enters the battlefield with your choice of a vigilance counter or a reach counter on it. -SVar:Vigilance:DB$ PutCounter | ETB$ True | CounterType$ Vigilance | CounterNum$ 1 | SpellDescription$ CARDNAME enters the battlefield with a vigilance counter on it -SVar:Reach:DB$ PutCounter | ETB$ True | CounterType$ Reach | CounterNum$ 1 | SpellDescription$ CARDNAME enters the battlefield with a reach counter on it +SVar:CounterChoice:DB$ PutCounter | ETB$ True | CounterType$ Vigilance,Reach | SpellDescription$ CARDNAME enters the battlefield with your choice of a vigilance counter or a reach counter on it. DeckHas:Ability$Counters Oracle:Flycatcher Giraffid enters the battlefield with your choice of a vigilance counter or a reach counter on it. diff --git a/forge-gui/res/cardsfolder/f/frenetic_sliver.txt b/forge-gui/res/cardsfolder/f/frenetic_sliver.txt index ba69c73564a..e5d1f363a77 100644 --- a/forge-gui/res/cardsfolder/f/frenetic_sliver.txt +++ b/forge-gui/res/cardsfolder/f/frenetic_sliver.txt @@ -5,8 +5,8 @@ PT:2/2 S:Mode$ Continuous | Affected$ Sliver | AddAbility$ Frenetic | AddSVar$ DBExile & DelTrig & MoveBack & DBSacSelf | Description$ All Slivers have "{0}: If this permanent is on the battlefield, flip a coin. If you win the flip, exile this permanent and return it to the battlefield under its owner's control at the beginning of the next end step. If you lose the flip, sacrifice it." SVar:Frenetic:AB$ FlipACoin | Cost$ 0 | ConditionPresent$ Card.Self | ConditionCompare$ EQ1 | WinSubAbility$ DBExile | LoseSubAbility$ DBSacSelf | SpellDescription$ If this permanent is on the battlefield, flip a coin. If you win the flip, exile this permanent and return it to the battlefield under its owner's control at the beginning of the next end step. If you lose the flip, sacrifice it. SVar:DBExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | Defined$ Self | SubAbility$ DelTrig -SVar:DelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ MoveBack | Static$ True -SVar:MoveBack:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | Defined$ Self +SVar:DelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ MoveBack +SVar:MoveBack:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | Defined$ Self | TriggerDescription$ Return CARDNAME to the battlefield under its owner's control at the beginning of the next end step. SVar:DBSacSelf:DB$ Sacrifice | Defined$ Self SVar:PlayMain1:TRUE AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/g/generals_regalia.txt b/forge-gui/res/cardsfolder/g/generals_regalia.txt index fb3067943da..405d5cb7167 100644 --- a/forge-gui/res/cardsfolder/g/generals_regalia.txt +++ b/forge-gui/res/cardsfolder/g/generals_regalia.txt @@ -5,7 +5,7 @@ A:AB$ ChooseSource | Cost$ 3 | Choices$ Card,Emblem | AILogic$ NeedsPrevention | SVar:DBEffect:DB$ Effect | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control to redirect damage to | ReplacementEffects$ GeneralDamage | Triggers$ OutOfSight | RememberObjects$ Targeted | SubAbility$ DBCleanup SVar:GeneralDamage:Event$ DamageDone | ValidSource$ Card.ChosenCard,Emblem.ChosenCard | ValidTarget$ You | DamageTarget$ Remembered | ReplaceWith$ GeneralDmg | Description$ The next time a source of your choice would deal damage to you this turn, that damage is dealt to target creature you control instead. SVar:GeneralDmg:DB$ ReplaceEffect | VarName$ Affected | VarValue$ Remembered | VarType$ Card | SubAbility$ ExileEffect -SVar:OutOfSight:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Defined$ Imprinted | Execute$ ExileEffect | Static$ True +SVar:OutOfSight:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.IsRemembered | Execute$ ExileEffect | Static$ True SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile | Static$ True SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/g/grimdancer.txt b/forge-gui/res/cardsfolder/g/grimdancer.txt index f2272e5b92f..e3e6b480c1b 100644 --- a/forge-gui/res/cardsfolder/g/grimdancer.txt +++ b/forge-gui/res/cardsfolder/g/grimdancer.txt @@ -3,9 +3,6 @@ ManaCost:1 B B Types:Creature Nightmare PT:3/3 K:ETBReplacement:Other:CounterChoice -SVar:CounterChoice:DB$ GenericChoice | Defined$ You | Choices$ Menace,Deathtouch,Lifelink | ChoiceAmount$ 2 | SpellDescription$ CARDNAME enters the battlefield with your choice of two different counters on it from among menace, deathtouch, and lifelink. -SVar:Menace:DB$ PutCounter | CounterType$ Menace | CounterNum$ 1 | ETB$ True | SpellDescription$ Menace -SVar:Deathtouch:DB$ PutCounter | CounterType$ Deathtouch | CounterNum$ 1 | ETB$ True | SpellDescription$ Deathtouch -SVar:Lifelink:DB$ PutCounter | CounterType$ Lifelink | CounterNum$ 1 | ETB$ True | SpellDescription$ Lifelink -DeckHas:Ability$Counters +SVar:CounterChoice:DB$ PutCounter | ETB$ True | CounterType$ Menace,Deathtouch,Lifelink | ChooseDifferent$ 2 | SpellDescription$ CARDNAME enters the battlefield with your choice of two different counters on it from among menace, deathtouch, and lifelink. +DeckHas:Ability$Counters|LifeGain Oracle:Grimdancer enters the battlefield with your choice of two different counters on it from among menace, deathtouch, and lifelink. diff --git a/forge-gui/res/cardsfolder/h/hallow.txt b/forge-gui/res/cardsfolder/h/hallow.txt index 068237d7a76..8c9d63c8aed 100644 --- a/forge-gui/res/cardsfolder/h/hallow.txt +++ b/forge-gui/res/cardsfolder/h/hallow.txt @@ -1,11 +1,9 @@ Name:Hallow ManaCost:W Types:Instant -A:SP$ Effect | Cost$ W | ValidTgts$ Card.inZoneStack | TgtZone$ Stack | TgtPrompt$ Select target spell to prevent damage from | ReplacementEffects$ PreventDmg | Triggers$ TargetMoved | RememberObjects$ TargetedSource | SpellDescription$ Prevent all damage target spell would deal this turn. You gain life equal to the damage prevented this way. +A:SP$ Effect | Cost$ W | ValidTgts$ Card.inZoneStack | TgtZone$ Stack | TgtPrompt$ Select target spell to prevent damage from | ReplacementEffects$ PreventDmg | ExileOnMoved$ Stack | RememberObjects$ TargetedSource | SpellDescription$ Prevent all damage target spell would deal this turn. You gain life equal to the damage prevented this way. SVar:PreventDmg:Event$ DamageDone | ValidSource$ Card.IsRemembered | ReplaceWith$ GainLifeYou | PreventionEffect$ True | Description$ Prevent all damage that would be dealt by targeted spell this turn. You gain life equal to the damage prevented this way. SVar:GainLifeYou:DB$ GainLife | Defined$ You | LifeAmount$ X SVar:X:ReplaceCount$DamageAmount -SVar:TargetMoved:Mode$ ChangesZone | ValidCard$ Card.IsRemembered | ExcludedDestinations$ Battlefield | Execute$ ExileEffect | TriggerZones$ Command | Static$ True -SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile AI:RemoveDeck:All Oracle:Prevent all damage target spell would deal this turn. You gain life equal to the damage prevented this way. diff --git a/forge-gui/res/cardsfolder/h/helica_glider.txt b/forge-gui/res/cardsfolder/h/helica_glider.txt index 77b9330ae66..be3acf49151 100644 --- a/forge-gui/res/cardsfolder/h/helica_glider.txt +++ b/forge-gui/res/cardsfolder/h/helica_glider.txt @@ -3,8 +3,6 @@ ManaCost:2 W Types:Creature Nightmare Squirrel PT:2/2 K:ETBReplacement:Other:CounterChoice -SVar:CounterChoice:DB$ GenericChoice | Defined$ You | Choices$ Flying,FirstStrike | SpellDescription$ CARDNAME enters the battlefield with your choice of a flying counter or a first strike counter on it. -SVar:Flying:DB$ PutCounter | ETB$ True | CounterType$ Flying | CounterNum$ 1 | SpellDescription$ CARDNAME enters the battlefield with a flying counter on it -SVar:FirstStrike:DB$ PutCounter | ETB$ True | CounterType$ First Strike | CounterNum$ 1 | SpellDescription$ CARDNAME enters the battlefield with a first strike counter on it +SVar:CounterChoice:DB$ PutCounter | ETB$ True | CounterType$ Flying,First Strike | SpellDescription$ CARDNAME enters the battlefield with your choice of a flying counter or a first strike counter on it. DeckHints:Ability$Counters Oracle:Helica Glider enters the battlefield with your choice of a flying counter or a first strike counter on it. diff --git a/forge-gui/res/cardsfolder/h/hidden_retreat.txt b/forge-gui/res/cardsfolder/h/hidden_retreat.txt index 3746bf12e3f..baf8b9e5f85 100644 --- a/forge-gui/res/cardsfolder/h/hidden_retreat.txt +++ b/forge-gui/res/cardsfolder/h/hidden_retreat.txt @@ -1,10 +1,8 @@ Name:Hidden Retreat ManaCost:2 W Types:Enchantment -A:AB$ Effect | Cost$ PutCardToLibFromHand<1/0/Card> | ValidTgts$ Instant,Sorcery | AILogic$ Prevent | Stackable$ False | TgtZone$ Stack | TgtPrompt$ Select target instant or sorcery spell to prevent damage from | StaticAbilities$ PreventDmg | Triggers$ TargetMoved | RememberObjects$ TargetedSource | SpellDescription$ Prevent all damage target instant or sorcery spell would deal this turn. +A:AB$ Effect | Cost$ PutCardToLibFromHand<1/0/Card> | ValidTgts$ Instant,Sorcery | AILogic$ Prevent | Stackable$ False | TgtZone$ Stack | TgtPrompt$ Select target instant or sorcery spell to prevent damage from | StaticAbilities$ PreventDmg | ExileOnMoved$ Stack | RememberObjects$ TargetedSource | SpellDescription$ Prevent all damage target instant or sorcery spell would deal this turn. SVar:PreventDmg:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Stack | Affected$ Card.IsRemembered | AddKeyword$ Prevent all damage that would be dealt by CARDNAME. | Description$ Prevent all damage target instant or sorcery spell would deal this turn. -SVar:TargetMoved:Mode$ ChangesZone | Origin$ Stack | Destination$ Any | ValidCard$ Card.IsRemembered | Execute$ ExileEffect | TriggerZones$ Command | Static$ True -SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile AI:RemoveDeck:Random SVar:NonStackingEffect:True Oracle:Put a card from your hand on top of your library: Prevent all damage that would be dealt by target instant or sorcery spell this turn. diff --git a/forge-gui/res/cardsfolder/h/hunters_edge.txt b/forge-gui/res/cardsfolder/h/hunters_edge.txt index e0cfb0f407e..54970670c14 100644 --- a/forge-gui/res/cardsfolder/h/hunters_edge.txt +++ b/forge-gui/res/cardsfolder/h/hunters_edge.txt @@ -1,7 +1,7 @@ Name:Hunter's Edge ManaCost:3 G Types:Sorcery -A:SP$ PutCounter | Cost$ 3 G | ValidTgts$ Creature.YouCtrl | CounterType$ P1P1 | TgtPrompt$ Select target creature you control | SubAbility$ DBDamage | StackDescription$ Put a +1/+1 counter on {c:ThisTargetedCard}. | SpellDescription$ Put a +1/+1 counter on target creature you control. Then that creature deals damage equal to its power to target creature you don't control. +A:SP$ PutCounter | Cost$ 3 G | ValidTgts$ Creature.YouCtrl | CounterType$ P1P1 | TgtPrompt$ Select target creature you control | SubAbility$ DBDamage | AILogic$ PowerDmg | StackDescription$ Put a +1/+1 counter on {c:ThisTargetedCard}. | SpellDescription$ Put a +1/+1 counter on target creature you control. Then that creature deals damage equal to its power to target creature you don't control. SVar:DBDamage:DB$ DealDamage | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Select target creature you don't control | NumDmg$ X | DamageSource$ ParentTarget | AILogic$ PowerDmg | StackDescription$ Then {c:ParentTarget} deals damage equal to its power to {c:ThisTargetedCard}. SVar:X:ParentTargeted$CardPower DeckHas:Ability$Counters diff --git a/forge-gui/res/cardsfolder/j/jade_monolith.txt b/forge-gui/res/cardsfolder/j/jade_monolith.txt index f97cffd98c3..1e51ee7546c 100644 --- a/forge-gui/res/cardsfolder/j/jade_monolith.txt +++ b/forge-gui/res/cardsfolder/j/jade_monolith.txt @@ -6,7 +6,7 @@ SVar:DBEffect:DB$ Effect | ValidTgts$ Creature | TgtPrompt$ Select target creatu SVar:SelflessDamage:Event$ DamageDone | ValidTarget$ Creature.IsRemembered | ValidSource$ Card.ChosenCard,Emblem.ChosenCard | ReplaceWith$ SelflessDmg | DamageTarget$ You | Description$ The next time a source of your choice would deal damage to target creature this turn, that damage is dealt to you instead. SVar:SelflessDmg:DB$ ReplaceEffect | VarName$ Affected | VarValue$ You | VarType$ Player | SubAbility$ ExileEffect #Zone Change for the source of your choice -SVar:OutOfSight:Mode$ ChangesZone | Origin$ Any | Destination$ Any | Defined$ ChosenCard | Execute$ ExileEffect | Static$ True +SVar:OutOfSight:Mode$ ChangesZone | Origin$ Any | Destination$ Any | ValidCard$ Card.ChosenCard | Execute$ ExileEffect | Static$ True SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile | Static$ True SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/k/kor_chant.txt b/forge-gui/res/cardsfolder/k/kor_chant.txt index 9a7e5cf1d82..6339329c8d7 100644 --- a/forge-gui/res/cardsfolder/k/kor_chant.txt +++ b/forge-gui/res/cardsfolder/k/kor_chant.txt @@ -6,7 +6,7 @@ SVar:DBChooseSource:DB$ ChooseSource | Choices$ Card,Emblem | SubAbility$ DBEffe SVar:DBEffect:DB$ Effect | ValidTgts$ Creature | TargetUnique$ True | TgtPrompt$ Select target creature to redirect the damage to | ReplacementEffects$ SelflessDamage | Triggers$ OutOfSight | ImprintCards$ ParentTarget | RememberObjects$ ThisTargetedCard | SubAbility$ DBCleanup | ConditionDefined$ ParentTarget | ConditionPresent$ Card,Emblem | ConditionCompare$ GE1 SVar:SelflessDamage:Event$ DamageDone | ValidTarget$ Creature.IsImprinted | ValidSource$ Card.ChosenCard,Emblem.ChosenCard | ReplaceWith$ SelflessDmg | DamageTarget$ Remembered | Description$ All damage that would be dealt this turn to target creature you control by a source of your choice is dealt to another target creature instead. SVar:SelflessDmg:DB$ ReplaceEffect | VarName$ Affected | VarValue$ Remembered | VarType$ Card -SVar:OutOfSight:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Defined$ Imprinted,Remembered | Execute$ ExileEffect | Static$ True +SVar:OutOfSight:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.IsImprinted,Card.IsRemembered | Execute$ ExileEffect | Static$ True SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile | Static$ True SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/k/kor_dirge.txt b/forge-gui/res/cardsfolder/k/kor_dirge.txt index 76240f991ec..f58700459a1 100644 --- a/forge-gui/res/cardsfolder/k/kor_dirge.txt +++ b/forge-gui/res/cardsfolder/k/kor_dirge.txt @@ -6,7 +6,7 @@ SVar:DBChooseSource:DB$ ChooseSource | Choices$ Card,Emblem | SubAbility$ DBEffe SVar:DBEffect:DB$ Effect | ValidTgts$ Creature | TargetUnique$ True | TgtPrompt$ Select target creature to redirect the damage to | ReplacementEffects$ SelflessDamage | Triggers$ OutOfSight | ImprintCards$ ParentTarget | RememberObjects$ ThisTargetedCard | SubAbility$ DBCleanup | ConditionDefined$ ParentTarget | ConditionPresent$ Card,Emblem | ConditionCompare$ GE1 SVar:SelflessDamage:Event$ DamageDone | ValidTarget$ Creature.IsImprinted | ValidSource$ Card.ChosenCard,Emblem.ChosenCard | ReplaceWith$ SelflessDmg | DamageTarget$ Remembered | Description$ All damage that would be dealt this turn to target creature you control by a source of your choice is dealt to another target creature instead. SVar:SelflessDmg:DB$ ReplaceEffect | VarName$ Affected | VarValue$ Remembered | VarType$ Card -SVar:OutOfSight:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Defined$ Imprinted,Remembered | Execute$ ExileEffect | Static$ True +SVar:OutOfSight:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.IsImprinted,Card.IsRemembered | Execute$ ExileEffect | Static$ True SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile | Static$ True SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/m/martyrs_cause.txt b/forge-gui/res/cardsfolder/m/martyrs_cause.txt index 9b8ca7a1233..49b83d54822 100644 --- a/forge-gui/res/cardsfolder/m/martyrs_cause.txt +++ b/forge-gui/res/cardsfolder/m/martyrs_cause.txt @@ -2,10 +2,8 @@ Name:Martyr's Cause ManaCost:2 W Types:Enchantment A:AB$ ChooseSource | Cost$ Sac<1/Creature> | Choices$ Card,Emblem | AILogic$ NeedsPrevention | SubAbility$ DBEffect | SpellDescription$ The next time a source of your choice would deal damage to any target this turn, prevent that damage. -SVar:DBEffect:DB$ Effect | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target to prevent damage to | Triggers$ OutOfSight | ReplacementEffects$ RPreventNextFromSource | RememberObjects$ Targeted | SubAbility$ DBCleanup | ConditionDefined$ ChosenCard | ConditionPresent$ Card,Emblem | ConditionCompare$ GE1 -SVar:OutOfSight:Mode$ ChangesZone | TriggerZones$ Command | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.IsRemembered | Execute$ ExileEffect | Static$ True +SVar:DBEffect:DB$ Effect | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target to prevent damage to | ExileOnMoved$ Battlefield | ReplacementEffects$ RPreventNextFromSource | RememberObjects$ Targeted | SubAbility$ DBCleanup | ConditionDefined$ ChosenCard | ConditionPresent$ Card,Emblem | ConditionCompare$ GE1 SVar:RPreventNextFromSource:Event$ DamageDone | ValidSource$ Card.ChosenCard,Emblem.ChosenCard | ValidTarget$ Card.IsRemembered,Player.IsRemembered | ReplaceWith$ ExileEffect | PreventionEffect$ True | Description$ The next time the chosen source deals damage to the target, prevent that damage. -SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True AI:RemoveDeck:All SVar:NonStackingEffect:True diff --git a/forge-gui/res/cardsfolder/n/nova_pentacle.txt b/forge-gui/res/cardsfolder/n/nova_pentacle.txt index 360fbf5901d..cc3cab37d79 100644 --- a/forge-gui/res/cardsfolder/n/nova_pentacle.txt +++ b/forge-gui/res/cardsfolder/n/nova_pentacle.txt @@ -6,7 +6,7 @@ SVar:DBEffect:DB$ Effect | TargetingPlayer$ Player.Opponent | ValidTgts$ Creatur SVar:SelflessDamage:Event$ DamageDone | ValidTarget$ You | ValidSource$ Card.ChosenCard,Emblem.ChosenCard | ReplaceWith$ SelflessDmg | DamageTarget$ Remembered | Description$ The next time a source of your choice would deal damage to you this turn, that damage is dealt to target creature of an opponent's choice instead. SVar:SelflessDmg:DB$ ReplaceEffect | VarName$ Affected | VarValue$ Remembered | VarType$ Card | SubAbility$ ExileEffect #Zone Change for the source of your choice -SVar:OutOfSight:Mode$ ChangesZone | Origin$ Any | Destination$ Any | Defined$ ChosenCard | Execute$ ExileEffect | Static$ True +SVar:OutOfSight:Mode$ ChangesZone | Origin$ Any | Destination$ Any | ValidCard$ Card.ChosenCard | Execute$ ExileEffect | Static$ True SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/o/opal_eye_kondas_yojimbo.txt b/forge-gui/res/cardsfolder/o/opal_eye_kondas_yojimbo.txt index d3481201dde..3c565e42504 100644 --- a/forge-gui/res/cardsfolder/o/opal_eye_kondas_yojimbo.txt +++ b/forge-gui/res/cardsfolder/o/opal_eye_kondas_yojimbo.txt @@ -8,7 +8,7 @@ A:AB$ ChooseSource | Cost$ T | Choices$ Card,Emblem | AILogic$ NeedsPrevention | SVar:DBEffect:DB$ Effect | ReplacementEffects$ SelflessDamage | Triggers$ OutOfSight | Duration$ UntilHostLeavesPlayOrEOT | SubAbility$ DBCleanup | ConditionDefined$ ChosenCard | ConditionPresent$ Card,Emblem | ConditionCompare$ GE1 SVar:SelflessDamage:Event$ DamageDone | ValidSource$ Card.ChosenCard,Emblem.ChosenCard | ReplaceWith$ SelflessDmg | DamageTarget$ EffectSource | Description$ The next time a source of your choice would deal damage to you this turn, that damage is dealt to EFFECTSOURCE instead. SVar:SelflessDmg:DB$ ReplaceEffect | VarName$ Affected | VarValue$ EffectSource | VarType$ Card | SubAbility$ ExileEffect -SVar:OutOfSight:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Defined$ ChosenCard | Execute$ ExileEffect | Static$ True +SVar:OutOfSight:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.ChosenCard | Execute$ ExileEffect | Static$ True SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True A:AB$ PreventDamage | Cost$ 1 W | Defined$ Self | Amount$ 1 | SpellDescription$ Prevent the next 1 damage that would be dealt to CARDNAME this turn. diff --git a/forge-gui/res/cardsfolder/o/oracles_attendants.txt b/forge-gui/res/cardsfolder/o/oracles_attendants.txt index 842ad8a331b..eed385cd967 100644 --- a/forge-gui/res/cardsfolder/o/oracles_attendants.txt +++ b/forge-gui/res/cardsfolder/o/oracles_attendants.txt @@ -7,7 +7,7 @@ SVar:DBEffect:DB$ Effect | ValidTgts$ Creature | TgtPrompt$ Select target creatu SVar:SelflessDamage:Event$ DamageDone | ValidTarget$ Creature.IsRemembered | ValidSource$ Card.ChosenCard,Emblem.ChosenCard | ReplaceWith$ SelflessDmg | DamageTarget$ EffectSource | Description$ The next time a source of your choice would deal damage to target creature this turn, that damage is dealt to EFFECTSOURCE instead. SVar:SelflessDmg:DB$ ReplaceEffect | VarName$ Affected | VarValue$ EffectSource | VarType$ Card #Zone Change for the source of your choice -SVar:OutOfSight:Mode$ ChangesZone | Origin$ Any | Destination$ Any | Defined$ ChosenCard | Execute$ ExileEffect | Static$ True +SVar:OutOfSight:Mode$ ChangesZone | Origin$ Any | Destination$ Any | ValidCard$ Card.ChosenCard | Execute$ ExileEffect | Static$ True SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/s/sanctum_guardian.txt b/forge-gui/res/cardsfolder/s/sanctum_guardian.txt index cff285e7a24..b2d30bcfb78 100644 --- a/forge-gui/res/cardsfolder/s/sanctum_guardian.txt +++ b/forge-gui/res/cardsfolder/s/sanctum_guardian.txt @@ -3,10 +3,8 @@ ManaCost:1 W W Types:Creature Human Cleric PT:1/4 A:AB$ ChooseSource | Cost$ Sac<1/CARDNAME> | Choices$ Card,Emblem | AILogic$ NeedsPrevention | SubAbility$ DBEffect | SpellDescription$ The next time a source of your choice would deal damage to any target this turn, prevent that damage. -SVar:DBEffect:DB$ Effect | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target to prevent damage to | Triggers$ OutOfSight | ReplacementEffects$ RPreventNextFromSource | RememberObjects$ Targeted | SubAbility$ DBCleanup | ConditionDefined$ ChosenCard | ConditionPresent$ Card,Emblem | ConditionCompare$ GE1 -SVar:OutOfSight:Mode$ ChangesZone | TriggerZones$ Command | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.IsRemembered | Execute$ ExileEffect | Static$ True +SVar:DBEffect:DB$ Effect | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target to prevent damage to | ExileOnMoved$ Battlefield | ReplacementEffects$ RPreventNextFromSource | RememberObjects$ Targeted | SubAbility$ DBCleanup | ConditionDefined$ ChosenCard | ConditionPresent$ Card,Emblem | ConditionCompare$ GE1 SVar:RPreventNextFromSource:Event$ DamageDone | ValidSource$ Card.ChosenCard,Emblem.ChosenCard | ValidTarget$ Card.IsRemembered,Player.IsRemembered | ReplaceWith$ ExileEffect | PreventionEffect$ True | Description$ The next time the chosen source deals damage to any target this turn, prevent that damage. -SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True AI:RemoveDeck:All Oracle:Sacrifice Sanctum Guardian: The next time a source of your choice would deal damage to any target this turn, prevent that damage. diff --git a/forge-gui/res/cardsfolder/s/shaman_en_kor.txt b/forge-gui/res/cardsfolder/s/shaman_en_kor.txt index c6ff2a95b1f..62b76df98a6 100644 --- a/forge-gui/res/cardsfolder/s/shaman_en_kor.txt +++ b/forge-gui/res/cardsfolder/s/shaman_en_kor.txt @@ -10,7 +10,7 @@ SVar:DBEffect:DB$ Effect | ValidTgts$ Creature | TgtPrompt$ Select target creatu SVar:SelflessDamage:Event$ DamageDone | ValidTarget$ Creature.IsRemembered | ValidSource$ Card.ChosenCard,Emblem.ChosenCard | ReplaceWith$ SelflessDmg | DamageTarget$ EffectSource | Description$ The next time a source of your choice would deal damage to target creature this turn, that damage is dealt to EFFECTSOURCE instead. SVar:SelflessDmg:DB$ ReplaceEffect | VarName$ Affected | VarValue$ EffectSource | VarType$ Card | SubAbility$ ExileEffect #Zone Change for the source of your choice -SVar:OutOfSight:Mode$ ChangesZone | Origin$ Any | Destination$ Any | Defined$ ChosenCard | Execute$ ExileEffect | Static$ True +SVar:OutOfSight:Mode$ ChangesZone | Origin$ Any | Destination$ Any | ValidCard$ Card.ChosenCard | Execute$ ExileEffect | Static$ True SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/s/shoulder_to_shoulder.txt b/forge-gui/res/cardsfolder/s/shoulder_to_shoulder.txt index 48f94c2f17b..36f7adee41d 100644 --- a/forge-gui/res/cardsfolder/s/shoulder_to_shoulder.txt +++ b/forge-gui/res/cardsfolder/s/shoulder_to_shoulder.txt @@ -1,6 +1,7 @@ Name:Shoulder to Shoulder ManaCost:2 W Types:Sorcery -A:SP$ PutCounter | Cost$ 2 W | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 2 | TgtPrompt$ Select target creature other than CARDNAME | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBDraw | SpellDescription$ Support 2. (Put a +1/+1 counter on each of up to two target creatures.) +A:SP$ PutCounter | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 2 | TgtPrompt$ Select up to two target creatures | TargetUnique$ True | CounterType$ P1P1 | SubAbility$ DBDraw | SpellDescription$ Support 2. (Put a +1/+1 counter on each of up to two target creatures.) SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card. +DeckHas:Ability$Counters Oracle:Support 2. (Put a +1/+1 counter on each of up to two target creatures.)\nDraw a card. diff --git a/forge-gui/res/cardsfolder/t/tatsumasa_the_dragons_fang.txt b/forge-gui/res/cardsfolder/t/tatsumasa_the_dragons_fang.txt index 31c865fa9b7..8d8dde140db 100644 --- a/forge-gui/res/cardsfolder/t/tatsumasa_the_dragons_fang.txt +++ b/forge-gui/res/cardsfolder/t/tatsumasa_the_dragons_fang.txt @@ -3,8 +3,7 @@ ManaCost:6 Types:Legendary Artifact Equipment K:Equip:3 S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 5 | AddToughness$ 5 | Description$ Equipped creature gets +5/+5. -A:AB$ Token | Cost$ 6 Exile<1/CARDNAME> | TokenAmount$ 1 | TokenScript$ u_5_5_dragon_spirit_flying | TokenOwner$ You | RememberTokens$ True | SpellDescription$ Create a 5/5 blue Dragon Spirit creature token with flying. Return CARDNAME to the battlefield under its owner's control when that token dies. -T:Mode$ ChangesZone | ValidCard$ Creature.IsRemembered | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Exile | Execute$ TrigReturn | Secondary$ True | TriggerDescription$ Return CARDNAME to the battlefield under its owner's control when that token dies. -SVar:TrigReturn:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | Defined$ Self | SubAbility$ DBCleanUp -SVar:DBCleanUp:DB$ Cleanup | ClearRemembered$ True +A:AB$ Token | Cost$ 6 Exile<1/CARDNAME> | TokenAmount$ 1 | TokenScript$ u_5_5_dragon_spirit_flying | TokenOwner$ You | RememberTokens$ True | SubAbility$ DelTrig | SpellDescription$ Create a 5/5 blue Dragon Spirit creature token with flying. Return CARDNAME to the battlefield under its owner's control when that token dies. +SVar:DelTrig:DB$ DelayedTrigger | Mode$ ChangesZone | ValidCard$ Card.IsTriggerRemembered | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigReturn | RememberObjects$ Remembered | TriggerDescription$ Return CARDNAME to the battlefield under its owner's control when that token dies. +SVar:TrigReturn:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | Defined$ Self Oracle:Equipped creature gets +5/+5.\n{6}, Exile Tatsumasa, the Dragon's Fang: Create a 5/5 blue Dragon Spirit creature token with flying. Return Tatsumasa to the battlefield under its owner's control when that token dies.\nEquip {3} diff --git a/forge-gui/res/cardsfolder/u/unexpected_fangs.txt b/forge-gui/res/cardsfolder/u/unexpected_fangs.txt index c33822d4368..0649215eb6c 100644 --- a/forge-gui/res/cardsfolder/u/unexpected_fangs.txt +++ b/forge-gui/res/cardsfolder/u/unexpected_fangs.txt @@ -1,7 +1,6 @@ Name:Unexpected Fangs ManaCost:1 B Types:Instant -A:SP$ PutCounter | Cost$ 1 B | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBPutCounter | SpellDescription$ Put a +1/+1 counter and a lifelink counter on target creature. -SVar:DBPutCounter:DB$ PutCounter | CounterType$ Lifelink | CounterNum$ 1 | Defined$ Targeted -DeckHas:Ability$Counters +A:SP$ PutCounter | ValidTgts$ Creature | CounterTypes$ P1P1,Lifelink | SpellDescription$ Put a +1/+1 counter and a lifelink counter on target creature. +DeckHas:Ability$Counters|LifeGain Oracle:Put a +1/+1 counter and a lifelink counter on target creature. diff --git a/forge-gui/res/cardsfolder/upcoming/attended_socialite.txt b/forge-gui/res/cardsfolder/upcoming/attended_socialite.txt new file mode 100644 index 00000000000..5737a35dbe0 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/attended_socialite.txt @@ -0,0 +1,8 @@ +Name:Attended Socialite +ManaCost:1 G +Types:Creature Elf Druid +PT:2/1 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Alliance — Whenever another creature enters the battlefield under your control, CARDNAME gets +1/+1 until end of turn. +SVar:TrigPump:DB$ Pump | Defined$ Self | NumAtt$ 1 | NumDef$ 1 +SVar:BuffedBy:Creature +Oracle:Alliance — Whenever another creature enters the battlefield under your control, Attended Socialite gets +1/+1 until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/ballroom_brawlers.txt b/forge-gui/res/cardsfolder/upcoming/ballroom_brawlers.txt index 8b7e49a8f8e..4332800a2f8 100644 --- a/forge-gui/res/cardsfolder/upcoming/ballroom_brawlers.txt +++ b/forge-gui/res/cardsfolder/upcoming/ballroom_brawlers.txt @@ -3,7 +3,7 @@ ManaCost:3 W W Types:Creature Human Warrior PT:3/5 T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigSelectTargetCreature | TriggerDescription$ Whenever CARDNAME attacks, CARDNAME and up to one other target creature you control both gain your choice of first strike or lifelink until end of turn. -SVar:TrigSelectTargetCreature:DB$ Pump | ValidTgts$ Creature.YouCtrl+Other | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one other target creature | SubAbility$ DBKeywordChoice | SpellDescription$ CARDNAME and up to one other target creature you control both gain your choice of first strike or lifelink until end of turn. +SVar:TrigSelectTargetCreature:DB$ Pump | ValidTgts$ Creature.Other+YouCtrl | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one other target creature | SubAbility$ DBKeywordChoice | SpellDescription$ CARDNAME and up to one other target creature you control both gain your choice of first strike or lifelink until end of turn. SVar:DBKeywordChoice:DB$ GenericChoice | Defined$ You | Choices$ DBFirstStrike,DBLifelink SVar:DBFirstStrike:DB$ Pump | Defined$ Self | KW$ First Strike | SubAbility$ DBFirstStrike2 | SpellDescription$ First strike SVar:DBFirstStrike2:DB$ Pump | Defined$ Targeted | KW$ First Strike diff --git a/forge-gui/res/cardsfolder/upcoming/body_launderer.txt b/forge-gui/res/cardsfolder/upcoming/body_launderer.txt new file mode 100644 index 00000000000..0c06a2cbb77 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/body_launderer.txt @@ -0,0 +1,12 @@ +Name:Body Launderer +ManaCost:2 B B +Types:Creature Ogre Rogue +PT:3/3 +K:Deathtouch +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.YouCtrl+nonToken+Other | TriggerZones$ Battlefield | Execute$ TrigConnive | TriggerDescription$ Whenever another nontoken creature you control dies, CARDNAME connives. +SVar:TrigConnive:DB$ Connive +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerDescription$ When CARDNAME dies, return another target non-Rogue creature card with equal or lesser power from your graveyard to the battlefield. +SVar:TrigReturn:DB$ ChangeZone | ValidTgts$ Creature.powerLEX+YouOwn+nonRogue+Other | TgtPrompt$ Select target non-Rogue creature card with equal or lesser power | Origin$ Graveyard | Destination$ Battlefield +SVar:X:TriggeredCard$CardPower +DeckHas:Ability$Discard|Counters|Graveyard +Oracle:Deathtouch\nWhenever another nontoken creature you control dies, Body Launderer connives.\nWhen Body Launderer dies, return another target non-Rogue creature card with equal or lesser power from your graveyard to the battlefield. diff --git a/forge-gui/res/cardsfolder/upcoming/bouncers_beatdown.txt b/forge-gui/res/cardsfolder/upcoming/bouncers_beatdown.txt new file mode 100644 index 00000000000..30c3fbf4207 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/bouncers_beatdown.txt @@ -0,0 +1,10 @@ +Name:Bouncer's Beatdown +ManaCost:2 G +Types:Instant +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ CostReduction | Relative$ True | EffectZone$ All | Description$ This spell costs {2} less to cast if it targets a a black permanent. +SVar:CostReduction:Count$Compare CheckTgt GE1.2.0 +SVar:CheckTgt:Targeted$Valid Permanent.Black +A:SP$ DealDamage | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | NumDmg$ X | ReplaceDyingDefined$ Targeted | SpellDescription$ CARDNAME deals X damage to target creature or planeswalker, where X is the greatest power among creatures you control. If that creature or planeswalker would die this turn, exile it instead. +SVar:X:Count$Valid Creature.YouCtrl$GreatestPower +SVar:NeedsToPlayVar:X GE3 +Oracle:This spell costs {2} less to cast if it targets a black permanent.\nBouncer's Beatdown deals X damage to target creature or planeswalker, where X is the greatest power among creatures you control. If that creature or planeswalker would die this turn, exile it instead. diff --git a/forge-gui/res/cardsfolder/upcoming/caldaia_strongarm.txt b/forge-gui/res/cardsfolder/upcoming/caldaia_strongarm.txt new file mode 100644 index 00000000000..b427c153573 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/caldaia_strongarm.txt @@ -0,0 +1,10 @@ +Name:Caldaia Strongarm +ManaCost:4 G +Types:Creature Human Warrior +PT:2/3 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPutCounter | TriggerDescription$ When CARDNAME enters the battlefield, put two +1/+1 counters on target creature. +SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ P1P1 | CounterNum$ 2 +K:Blitz:3 G +SVar:PlayMain1:TRUE +DeckHas:Ability$Counters|Sacrifice +Oracle:When Caldaia Strongarm enters the battlefield, put two +1/+1 counters on target creature.\nBlitz {3}{G} (If you cast this spell for its blitz cost, it gains haste and "When this creature dies, draw a card." Sacrifice it at the beginning of the next end step.) diff --git a/forge-gui/res/cardsfolder/upcoming/celebrity_fencer.txt b/forge-gui/res/cardsfolder/upcoming/celebrity_fencer.txt index 4d2c0e84473..a79fa546e31 100644 --- a/forge-gui/res/cardsfolder/upcoming/celebrity_fencer.txt +++ b/forge-gui/res/cardsfolder/upcoming/celebrity_fencer.txt @@ -4,5 +4,6 @@ Types:Creature Elf Druid PT:3/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Alliance — Whenever another creature enters the battlefield under your control, put a +1/+1 counter on CARDNAME. SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 +SVar:BuffedBy:Creature DeckHas:Ability$Counters Oracle:Alliance — Whenever another creature enters the battlefield under your control, put a +1/+1 counter on Celebrity Fencer. diff --git a/forge-gui/res/cardsfolder/upcoming/civic_gardener.txt b/forge-gui/res/cardsfolder/upcoming/civic_gardener.txt index 6dc9dc5b9bb..201b94da0cc 100644 --- a/forge-gui/res/cardsfolder/upcoming/civic_gardener.txt +++ b/forge-gui/res/cardsfolder/upcoming/civic_gardener.txt @@ -4,4 +4,5 @@ Types:Creature Human Citizen PT:2/2 T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigUntap | TriggerDescription$ Whenever CARDNAME attacks, untap target creature or land. SVar:TrigUntap:DB$ Untap | ValidTgts$ Creature,Land | TgtPrompt$ Select target creature or land +SVar:HasAttackEffect:True Oracle:Whenever Civic Gardener attacks, untap target creature or land. diff --git a/forge-gui/res/cardsfolder/upcoming/corpse_appraiser.txt b/forge-gui/res/cardsfolder/upcoming/corpse_appraiser.txt new file mode 100644 index 00000000000..36cd7108162 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/corpse_appraiser.txt @@ -0,0 +1,10 @@ +Name:Corpse Appraiser +ManaCost:U B R +Types:Creature Vampire Rogue +PT:3/3 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME enters the battlefield, you may exile up to one target creature from a graveyard. If a card is put into exile this way, look at the top three cards of your library, then put one of those cards into your hand and the rest into your graveyard. +SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 1 | SubAbility$ DBDig | TgtPrompt$ Select up to one target creature card from a graveyard | RememberChanged$ True +SVar:DBDig:DB$ Dig | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionZone$ Exile | DigNum$ 3 | DestinationZone2$ Graveyard | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +DeckHas:Ability$Graveyard +Oracle: When Corpse Appraiser enters the battlefield, exile up to one target creature card from a graveyard. If a card is put into exile this way, look at the top three cards of your library, then put one of those cards into your hand and the rest into your graveyard. diff --git a/forge-gui/res/cardsfolder/upcoming/devilish_valet.txt b/forge-gui/res/cardsfolder/upcoming/devilish_valet.txt index 8cdd19f2639..b2b0530461a 100644 --- a/forge-gui/res/cardsfolder/upcoming/devilish_valet.txt +++ b/forge-gui/res/cardsfolder/upcoming/devilish_valet.txt @@ -7,4 +7,5 @@ K:Haste T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Alliance — Whenever another creature enters the battlefield under your control, double CARDNAME's power until end of turn. SVar:TrigPump:DB$ Pump | Defined$ Self | NumAtt$ +X | Double$ True SVar:X:Count$CardPower +SVar:BuffedBy:Creature Oracle:Trample, haste\nAlliance — Whenever another creature enters the battlefield under your control, double Devilish Valet's power until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/echo_inspector.txt b/forge-gui/res/cardsfolder/upcoming/echo_inspector.txt new file mode 100644 index 00000000000..21bf78e6145 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/echo_inspector.txt @@ -0,0 +1,9 @@ +Name:Echo Inspector +ManaCost:3 U +Types:Creature Bird Rogue +PT:2/3 +K:Flying +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigConnive | TriggerDescription$ When CARDNAME enters the battlefield, it connives. (Draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on this creature.) +SVar:TrigConnive:DB$ Connive +DeckHas:Ability$Discard|Counters +Oracle:Flying\nWhen Echo Inspector enters the battlefield, it connives. (Draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on this creature.) diff --git a/forge-gui/res/cardsfolder/upcoming/elegant_entourage.txt b/forge-gui/res/cardsfolder/upcoming/elegant_entourage.txt new file mode 100644 index 00000000000..4ad7042ebdf --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/elegant_entourage.txt @@ -0,0 +1,9 @@ +Name:Elegant Entourage +ManaCost:3 G +Types:Creature Elf Druid +PT:4/4 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Alliance — Whenever another creature enters the battlefield under your control, target creature other than CARDNAME gets +1/+1 and gains trample until end of turn. +SVar:TrigPump:DB$ Pump | ValidTgts$ Creature.Other | TgtPrompt$ Select target creature other than CARDNAME | NumAtt$ +1 | NumDef$ +1 | KW$ Trample +SVar:PlayMain1:TRUE +SVar:BuffedBy:Creature +Oracle:Alliance — Whenever another creature enters the battlefield under your control, target creature other than Elegant Entourage gets +1/+1 and gains trample until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/elspeth_resplendent.txt b/forge-gui/res/cardsfolder/upcoming/elspeth_resplendent.txt new file mode 100644 index 00000000000..401d4ee883d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/elspeth_resplendent.txt @@ -0,0 +1,9 @@ +Name:Elspeth Resplendent +ManaCost:3 W W +Types:Legendary Planeswalker Elspeth +Loyalty:5 +A:AB$ PutCounter | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 1 | CounterTypes$ P1P1,ChosenFromList | TypeList$ Flying,First Strike,Lifelink,Vigilance | SpellDescription$ Choose up to one target creature. Put a +1/+1 counter and a counter from among flying, first strike, lifelink, or vigilance on it. +A:AB$ Dig | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | DigNum$ 7 | ChangeNum$ 1 | Optional$ True | ForceRevealToController$ True | ChangeValid$ Permanent.cmcLE3 | ChangeValidDesc$ permanent card with mana value 3 or less | DestinationZone$ Battlefield | WithCounter$ Shield | PrimaryPrompt$ You may choose a permanent card with mana value 3 or less to put on the battlefield | RestRandomOrder$ True | SpellDescription$ Look at the top seven cards of your library. You may put a permanent card with mana value 3 or less from among them onto the battlefield with a shield counter on it. Put the rest on the bottom of your library in a random order. +A:AB$ Token | Cost$ SubCounter<7/LOYALTY> | Planeswalker$ True | Ultimate$ True | TokenAmount$ 5 | TokenScript$ w_3_3_angel_flying | SpellDescription$ Create five 3/3 white Angel creature tokens with flying. +DeckHas:Ability$Counters|LifeGain|Token & Type$Angel +Oracle:[+1]: Choose up to one target creature. Put a +1/+1 counter and a counter from among flying, first strike, lifelink, or vigilance on it.\n[−3]: Look at the top seven cards of your library. You may put a permanent card with mana value 3 or less from among them onto the battlefield with a shield counter on it. Put the rest on the bottom of your library in a random order.\n[−7]: Create five 3/3 white Angel creature tokens with flying. diff --git a/forge-gui/res/cardsfolder/upcoming/forge_boss.txt b/forge-gui/res/cardsfolder/upcoming/forge_boss.txt index 5ac5366a68f..26e56d9bf56 100644 --- a/forge-gui/res/cardsfolder/upcoming/forge_boss.txt +++ b/forge-gui/res/cardsfolder/upcoming/forge_boss.txt @@ -2,7 +2,7 @@ Name:Forge Boss ManaCost:2 B R Types:Creature Human Warrior PT:3/4 -T:Mode$ Sacrificed | ValidCard$ Creature.YouCtrl+Other | TriggerZones$ Battlefield | Execute$ TrigDamage | ActivationLimit$ 1 | TriggerDescription$ Whenever you sacrifice one or more other creatures, CARDNAME deals 2 damage to each opponent. This ability triggers only once each turn. +T:Mode$ Sacrificed | ValidCard$ Creature.Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDamage | ActivationLimit$ 1 | TriggerDescription$ Whenever you sacrifice one or more other creatures, CARDNAME deals 2 damage to each opponent. This ability triggers only once each turn. SVar:TrigDamage:DB$ DealDamage | Defined$ Opponent | NumDmg$ 2 DeckNeeds:Ability$Sacrifice Oracle:Whenever you sacrifice one or more other creatures, Forge Boss deals 2 damage to each opponent. This ability triggers only once each turn. diff --git a/forge-gui/res/cardsfolder/upcoming/gala_greeters.txt b/forge-gui/res/cardsfolder/upcoming/gala_greeters.txt index 8261e50fda7..498e7f5bbe8 100644 --- a/forge-gui/res/cardsfolder/upcoming/gala_greeters.txt +++ b/forge-gui/res/cardsfolder/upcoming/gala_greeters.txt @@ -7,5 +7,6 @@ SVar:TrigCharm:DB$ Charm | Choices$ DBPutCounter,DBToken,DBGainLife | ChoiceRest SVar:DBPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Put a +1/+1 counter on CARDNAME. SVar:DBToken:DB$ Token | TokenScript$ c_a_treasure_sac | TokenTapped$ True | SpellDescription$ Create a tapped Treasure token. SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 2 | SpellDescription$ You gain 2 life. +SVar:BuffedBy:Creature DeckHas:Ability$Counters|Token|LifeGain|Sacrifice & Type$Treasure Oracle:Alliance — Whenever another creature enters the battlefield under your control, choose one that hasn't been chosen this turn —\n• Put a +1/+1 counter on Gala Greeters.\n• Create a tapped Treasure token.\n• You gain 2 life. diff --git a/forge-gui/res/cardsfolder/upcoming/girder_goons.txt b/forge-gui/res/cardsfolder/upcoming/girder_goons.txt new file mode 100644 index 00000000000..1696b415a5e --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/girder_goons.txt @@ -0,0 +1,9 @@ +Name:Girder Goons +ManaCost:4 B +Types:Creature Ogre Warrior +PT:4/4 +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ When CARDNAME dies, create a tapped 2/2 black Rogue creature token. +SVar:TrigToken:DB$ Token | TokenScript$ b_2_2_rogue | TokenTapped$ True +K:Blitz:3 B +DeckHas:Ability$Token|Sacrifice & Type$Rogue +Oracle:When Girder Goons dies, create a tapped 2/2 black Rogue creature token.\nBlitz {3}{B} (If you cast this spell for its blitz cost, it gains haste and "When this creature dies, draw a card." Sacrifice it at the beginning of the next end step.) diff --git a/forge-gui/res/cardsfolder/upcoming/glamorous_outlaw.txt b/forge-gui/res/cardsfolder/upcoming/glamorous_outlaw.txt new file mode 100644 index 00000000000..f96a7116a4f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/glamorous_outlaw.txt @@ -0,0 +1,14 @@ +Name:Glamorous Outlaw +ManaCost:3 U B R +Types:Creature Vampire Rogue +PT:4/5 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDealDamage | TriggerDescription$ When CARDNAME enters the battlefield, it deals 2 damage to each opponent and you scry 2. +SVar:TrigDealDamage:DB$ DealDamage | NumDmg$ 2 | Defined$ Opponent | SubAbility$ DBScry +SVar:DBScry:DB$ Scry | ScryNum$ 2 +A:AB$ Effect | Cost$ 2 ExileFromHand<1/CARDNAME> | ActivationZone$ Hand | ValidTgts$ Land | TgtPrompt$ Select target land | RememberObjects$ Targeted,Self | StaticAbilities$ Land,MayPlay | Triggers$ Cast | ImprintCards$ Self | Duration$ Permanent | ForgetOnMoved$ Exile | SpellDescription$ Target land gains "{T}: Add {U}, {B}, or {R}" until CARDNAME is cast from exile. You may cast CARDNAME for as long as it remains exiled. +SVar:Land:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Card.IsRemembered+IsNotImprinted | AddAbility$ Mana | Description$ Target land gains "{T}: Add {U}, {B}, or {R}" until EFFECTSOURCE is cast from exile. You may cast EFFECTSOURCE for as long as it remains exiled. +SVar:Mana:AB$ Mana | Cost$ T | Produced$ Combo U B R | Amount$ 1 | SpellDescription$ Add {U}, {B}, or {R} +SVar:MayPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsImprinted+IsRemembered | AffectedZone$ Exile | Secondary$ True | Description$ You may cast EFFECTSOURCE for as long as it remains exiled. +SVar:Cast:Mode$ SpellCast | ValidCard$ Card.IsImprinted+IsRemembered+wasCastFromExile | Execute$ ExileSelf | Static$ True +SVar:ExileSelf:DB$ ChangeZone | Origin$ Command | Destination$ Exile | Defined$ Self +Oracle:When Glamorous Outlaw enters the battlefield, it deals 2 damage to each opponent and you scry 2.\n{2}, Exile Glamorous Outlaw from your hand: Target land gains "{T}: Add {U}, {B}, or {R}" until Glamorous Outlaw is cast from exile. You may cast Glamorous Outlaw for as long as it remains exiled. diff --git a/forge-gui/res/cardsfolder/upcoming/hypnotic_grifter.txt b/forge-gui/res/cardsfolder/upcoming/hypnotic_grifter.txt new file mode 100644 index 00000000000..369aca9925c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/hypnotic_grifter.txt @@ -0,0 +1,7 @@ +Name:Hypnotic Grifter +ManaCost:U +Types:Creature Human Rogue +PT:1/2 +A:AB$ Connive | Cost$ 3 | SpellDescription$ CARDNAME connives. (Draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on this creature.) +DeckHas:Ability$Discard|Counters +Oracle:{3}: Hypnotic Grifter connives. (Draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on this creature.) diff --git a/forge-gui/res/cardsfolder/upcoming/illuminator_virtuoso.txt b/forge-gui/res/cardsfolder/upcoming/illuminator_virtuoso.txt new file mode 100644 index 00000000000..b544e06096a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/illuminator_virtuoso.txt @@ -0,0 +1,9 @@ +Name:Illuminator Virtuoso +ManaCost:1 W +Types:Creature Human Rogue +PT:1/1 +K:Double Strike +T:Mode$ BecomesTarget | ValidTarget$ Card.Self | ValidSource$ Card.YouCtrl | SourceType$ Spell | Execute$ TrigConnive | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME becomes the target of a spell you control, it connives. (Draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on this creature.) +SVar:TrigConnive:DB$ Connive +DeckHas:Ability$Discard|Counters +Oracle:Double strike\nWhenever Illuminator Virtuoso becomes the target of a spell you control, it connives. (Draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on this creature.) diff --git a/forge-gui/res/cardsfolder/upcoming/jaxis_the_troublemaker.txt b/forge-gui/res/cardsfolder/upcoming/jaxis_the_troublemaker.txt index 6396dd6a7db..3c574f77ab7 100644 --- a/forge-gui/res/cardsfolder/upcoming/jaxis_the_troublemaker.txt +++ b/forge-gui/res/cardsfolder/upcoming/jaxis_the_troublemaker.txt @@ -6,4 +6,5 @@ A:AB$ CopyPermanent | Cost$ R T Discard<1/Card> | ValidTgts$ Creature.Other+YouC SVar:Dies:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When this creature dies, draw a card. SVar:TrigDraw:DB$ Draw | NumCards$ 1 K:Blitz:1 R +DeckHas:Ability$Discard|Token|Sacrifice Oracle:{R}, {T}, Discard a card: Create a token that's a copy of another target creature you control. It gains haste and "When this creature dies, draw a card." Sacrifice it at the beginning of the next end step. Activate only as a sorcery.\nBlitz {1}{R} (If you cast this spell for its blitz cost, it gains haste and "When this creature dies, draw a card." Sacrifice it at the beginning of the next end step.) diff --git a/forge-gui/res/cardsfolder/upcoming/kamiz_obscura_oculus.txt b/forge-gui/res/cardsfolder/upcoming/kamiz_obscura_oculus.txt new file mode 100644 index 00000000000..a4b3ddec92d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/kamiz_obscura_oculus.txt @@ -0,0 +1,13 @@ +Name:Kamiz, Obscura Oculus +ManaCost:1 W U B +Types:Legendary Creature Cephalid Rogue +PT:2/4 +T:Mode$ AttackersDeclared | AttackingPlayer$ You | Execute$ TrigPump | TriggerZones$ Battlefield | TriggerDescription$ Whenever you attack, target attacking creature can't be blocked this turn. It connives. Then choose another attacking creature with lesser power. That creature gains double strike until end of turn. (To have a creature connive, draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on that creature.) +SVar:TrigPump:DB$ Pump | KW$ HIDDEN Unblockable | RememberObjects$ Targeted | TgtPrompt$ Select target attacking creature | ValidTgts$ Creature.attacking | SubAbility$ DBConnive +SVar:DBConnive:DB$ Connive | Defined$ Targeted | SubAbility$ DBChooseCard +SVar:DBChooseCard:DB$ ChooseCard | Defined$ You | Choices$ Creature.attacking+IsNotRemembered+powerLTX | ChoiceTitle$ Choose another attacking creature with lesser power | SubAbility$ DBPump +SVar:DBPump:DB$ Pump | KW$ Double Strike | Defined$ ChosenCard | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True +SVar:X:Remembered$CardPower +DeckHas:Ability$Discard|Counters +Oracle:Whenever you attack, target attacking creature can't be blocked this turn. It connives. Then choose another attacking creature with lesser power. That creature gains double strike until end of turn. (To have a creature connive, draw a card, then discard a card. Put a +1/+1 counter on that creature for each nonland card discarded this way.) diff --git a/forge-gui/res/cardsfolder/upcoming/ledger_shredder.txt b/forge-gui/res/cardsfolder/upcoming/ledger_shredder.txt index 4eeeb127e9e..b360f7f8267 100644 --- a/forge-gui/res/cardsfolder/upcoming/ledger_shredder.txt +++ b/forge-gui/res/cardsfolder/upcoming/ledger_shredder.txt @@ -4,9 +4,6 @@ Types:Creature Bird Advisor PT:1/3 K:Flying T:Mode$ SpellCast | ValidActivatingPlayer$ Player | ActivatorThisTurnCast$ EQ2 | NoResolvingCheck$ True | TriggerZones$ Battlefield | Execute$ TrigConnive | TriggerDescription$ Whenever a player casts their second spell each turn, CARDNAME connives. (Draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on this creature.) -SVar:TrigConnive:DB$ Draw | NumCards$ 1 | SubAbility$ DBDiscard -SVar:DBDiscard:DB$ Discard | Defined$ You | Mode$ TgtChoose | NumCards$ 1 | RememberDiscarded$ True | SubAbility$ DBPutCounter -SVar:DBPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | ConditionDefined$ Remembered | ConditionPresent$ Card.nonLand | ConditionCompare$ EQ1 | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:TrigConnive:DB$ Connive DeckHas:Ability$Discard|Counters Oracle:Flying\nWhenever a player casts their second spell each turn, Ledger Shredder connives. (Draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on this creature.) diff --git a/forge-gui/res/cardsfolder/upcoming/masked_bandits.txt b/forge-gui/res/cardsfolder/upcoming/masked_bandits.txt new file mode 100644 index 00000000000..3bc040e74fb --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/masked_bandits.txt @@ -0,0 +1,13 @@ +Name:Masked Bandits +ManaCost:3 B R G +Types:Creature Raccoon Rogue +PT:5/5 +K:Vigilance +K:Menace +A:AB$ Effect | Cost$ 2 ExileFromHand<1/CARDNAME> | ActivationZone$ Hand | ValidTgts$ Land | TgtPrompt$ Select target land | RememberObjects$ Targeted,Self | StaticAbilities$ Land,MayPlay | Triggers$ Cast | ImprintCards$ Self | Duration$ Permanent | ForgetOnMoved$ Exile | SpellDescription$ Target land gains "{T}: Add {B}, {R}, or {G}" until CARDNAME is cast from exile. You may cast CARDNAME for as long as it remains exiled. +SVar:Land:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Card.IsRemembered+IsNotImprinted | AddAbility$ Mana | Description$ Target land gains "{T}: Add {B}, {R}, or {G}" until EFFECTSOURCE is cast from exile. You may cast EFFECTSOURCE for as long as it remains exiled. +SVar:Mana:AB$ Mana | Cost$ T | Produced$ Combo B R G | Amount$ 1 | SpellDescription$ Add {B}, {R}, or {G} +SVar:MayPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsImprinted+IsRemembered | AffectedZone$ Exile | Secondary$ True | Description$ You may cast EFFECTSOURCE for as long as it remains exiled. +SVar:Cast:Mode$ SpellCast | ValidCard$ Card.IsImprinted+IsRemembered+wasCastFromExile | Execute$ ExileSelf | Static$ True +SVar:ExileSelf:DB$ ChangeZone | Origin$ Command | Destination$ Exile | Defined$ Self +Oracle:Vigilance\nMenace (This creature can't be blocked except by two or more creatures.)\n{2}, Exile Masked Bandits from your hand: Target land gains "{T}: Add {B}, {R}, or {G}" until Masked Bandits is cast from exile. You may cast Masked Bandits for as long as it remains exiled. diff --git a/forge-gui/res/cardsfolder/upcoming/mayhem_patrol.txt b/forge-gui/res/cardsfolder/upcoming/mayhem_patrol.txt new file mode 100644 index 00000000000..740a746635d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/mayhem_patrol.txt @@ -0,0 +1,11 @@ +Name:Mayhem Patrol +ManaCost:1 R +Types:Creature Devil Warrior +PT:1/2 +K:Menace +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, target creature gets +1/+0 until end of turn. +SVar:TrigPump:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ 1 +K:Blitz:1 R +SVar:HasAttackEffect:True +DeckHas:Ability$Sacrifice +Oracle:Menace (This creature can't be blocked except by two or more creatures.)\nWhenever Mayhem Patrol attacks, target creature gets +1/+0 until end of turn.\nBlitz {1}{R} (If you cast this spell for its blitz cost, it gains haste and "When this creature dies, draw a card." Sacrifice it at the beginning of the next end step.) diff --git a/forge-gui/res/cardsfolder/upcoming/meeting_of_the_five.txt b/forge-gui/res/cardsfolder/upcoming/meeting_of_the_five.txt index 64a71daf20c..e5aaaba33de 100644 --- a/forge-gui/res/cardsfolder/upcoming/meeting_of_the_five.txt +++ b/forge-gui/res/cardsfolder/upcoming/meeting_of_the_five.txt @@ -6,4 +6,5 @@ SVar:DBEffect:DB$ Effect | StaticAbilities$ EffSModeContinuous | ExileOnMoved$ E SVar:EffSModeContinuous:Mode$ Continuous | EffectZone$ Command | Affected$ Card.IsRemembered+numColorsEQ3 | MayPlay$ True | AffectedZone$ Exile | Description$ You may cast spells with exactly three colors from among them this turn. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | SubAbility$ DBMana SVar:DBMana:DB$ Mana | Produced$ W W U U B B R R G G | RestrictValid$ Spell.numColorsEQ3 | SpellDescription$ Add {W}{W}{U}{U}{B}{B}{R}{R}{G}{G}. Spend this mana only to cast spells with exactly three colors. +AI:RemoveDeck:Random Oracle:Exile the top ten cards of your library. You may cast spells with exactly three colors from among them this turn. Add {W}{W}{U}{U}{B}{B}{R}{R}{G}{G}. Spend this mana only to cast spells with exactly three colors. diff --git a/forge-gui/res/cardsfolder/upcoming/night_clubber.txt b/forge-gui/res/cardsfolder/upcoming/night_clubber.txt new file mode 100644 index 00000000000..9c3c9739ad1 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/night_clubber.txt @@ -0,0 +1,10 @@ +Name:Night Clubber +ManaCost:1 B B +Types:Creature Human Warrior +PT:2/2 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPumpAll | TriggerDescription$ When CARDNAME enters the battlefield, creatures your opponents control get -1/-1 until end of turn. +SVar:TrigPumpAll:DB$ PumpAll | NumAtt$ -1 | NumDef$ -1 | ValidCards$ Creature.OppCtrl | IsCurse$ True +K:Blitz:2 B +SVar:PlayMain1:TRUE +DeckHas:Ability$Sacrifice +Oracle:When Night Clubber enters the battlefield, creatures your opponents control get -1/-1 until end of turn.\nBlitz {2}{B} (If you cast this spell for its blitz cost, it gains haste and "When this creature dies, draw a card." Sacrifice it at the beginning of the next end step.) diff --git a/forge-gui/res/cardsfolder/upcoming/obscura_interceptor.txt b/forge-gui/res/cardsfolder/upcoming/obscura_interceptor.txt new file mode 100644 index 00000000000..ec64d336b6c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/obscura_interceptor.txt @@ -0,0 +1,12 @@ +Name:Obscura Interceptor +ManaCost:1 W U B +Types:Creature Cephalid Wizard +PT:3/1 +K:Flash +K:Lifelink +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigConnive | TriggerDescription$ When CARDNAME enters the battlefield, it connives. When it connives this way, return up to one target spell to its owner's hand. (To have a creature connive, draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on that creature.) +SVar:TrigConnive:DB$ Connive | SubAbility$ DBImmediateTrigger +SVar:DBImmediateTrigger:DB$ ImmediateTrigger | Execute$ TrigReturn | TriggerDescription$ When it connives this way, return up to one target spell to its owner's hand. +SVar:TrigReturn:DB$ ChangeZone | ValidTgts$ Card | TgtPrompt$ Select target spell | TargetMax$ 1 | TargetMin$ 0 | TgtZone$ Stack | Origin$ Stack | Fizzle$ True | Destination$ Hand +DeckHas:Ability$LifeGain|Discard|Counters +Oracle:Flash\nLifelink\nWhen Obscura Interceptor enters the battlefield, it connives. When it connives this way, return up to one target spell to its owner's hand. (To have a creature connive, draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on that creature.) diff --git a/forge-gui/res/cardsfolder/upcoming/out_of_the_way.txt b/forge-gui/res/cardsfolder/upcoming/out_of_the_way.txt new file mode 100644 index 00000000000..63634c6e253 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/out_of_the_way.txt @@ -0,0 +1,9 @@ +Name:Out of the Way +ManaCost:3 U +Types:Instant +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ CostReduction | Relative$ True | EffectZone$ All | Description$ This spell costs {2} less to cast if it targets a a green permanent. +SVar:CostReduction:Count$Compare CheckTgt GE1.2.0 +SVar:CheckTgt:Targeted$Valid Permanent.Green +A:SP$ ChangeZone | ValidTgts$ Permanent.nonLand+OppCtrl | TgtPrompt$ Select target nonland permanent an opponent controls | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBDraw | SpellDescription$ Return target nonland permanent an opponent controls to its owner's hand. +SVar:DBDraw:DB$ Draw +Oracle:This spell costs {2} less to cast if it targets a green permanent.\nReturn target nonland permanent an opponent controls to its owner's hand.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/plasma_jockey.txt b/forge-gui/res/cardsfolder/upcoming/plasma_jockey.txt new file mode 100644 index 00000000000..de8e4be5fd0 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/plasma_jockey.txt @@ -0,0 +1,10 @@ +Name:Plasma Jockey +ManaCost:3 R +Types:Creature Viashino Warrior +PT:3/1 +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, target creature an opponent controls can't block this turn. +SVar:TrigPump:DB$ Pump | ValidTgts$ Creature.OppCtrl | KW$ HIDDEN CARDNAME can't block. | TgtPrompt$ Select target creature an opponent controls | IsCurse$ True +K:Blitz:2 R +SVar:HasAttackEffect:True +DeckHas:Ability$Sacrifice +Oracle:Whenever Plasma Jockey attacks, target creature an opponent controls can't block this turn.\nBlitz {2}{R} (If you cast this spell for its blitz cost, it gains haste and "When this creature dies, draw a card." Sacrifice it at the beginning of the next end step.) diff --git a/forge-gui/res/cardsfolder/upcoming/psionic_snoop.txt b/forge-gui/res/cardsfolder/upcoming/psionic_snoop.txt new file mode 100644 index 00000000000..313afe566f4 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/psionic_snoop.txt @@ -0,0 +1,8 @@ +Name:Psionic Snoop +ManaCost:2 U +Types:Creature Human Rogue +PT:0/3 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigConnive | TriggerDescription$ When CARDNAME enters the battlefield, it connives. (Draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on this creature.) +SVar:TrigConnive:DB$ Connive +DeckHas:Ability$Discard|Counters +Oracle:When Psionic Snoop enters the battlefield, it connives. (Draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on this creature.) diff --git a/forge-gui/res/cardsfolder/upcoming/psychic_pickpocket.txt b/forge-gui/res/cardsfolder/upcoming/psychic_pickpocket.txt new file mode 100644 index 00000000000..4d445688fb7 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/psychic_pickpocket.txt @@ -0,0 +1,10 @@ +Name:Psychic Pickpocket +ManaCost:4 U +Types:Creature Cephalid Rogue +PT:3/2 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigConnive | TriggerDescription$ When CARDNAME enters the battlefield, it connives. When it connives this way, return up to one target spell to its owner's hand. (To have a creature connive, draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on that creature.) +SVar:TrigConnive:DB$ Connive | SubAbility$ DBImmediateTrigger +SVar:DBImmediateTrigger:DB$ ImmediateTrigger | Execute$ TrigReturn | TriggerDescription$ When it connives this way, return up to one target nonland permanent to its owner's hand. +SVar:TrigReturn:DB$ ChangeZone | ValidTgts$ Permanent.nonLand | TgtPrompt$ Select target nonland permanent | TargetMax$ 1 | TargetMin$ 0 | Origin$ Battlefield | Destination$ Hand +DeckHas:Ability$Discard|Counters +Oracle:When Psychic Pickpocket enters the battlefield, it connives. When it connives this way, return up to one target nonland permanent to its owner's hand. (To have a creature connive, draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on that creature.) diff --git a/forge-gui/res/cardsfolder/upcoming/pugnacious_pugilist.txt b/forge-gui/res/cardsfolder/upcoming/pugnacious_pugilist.txt new file mode 100644 index 00000000000..00ebb9773da --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/pugnacious_pugilist.txt @@ -0,0 +1,10 @@ +Name:Pugnacious Pugilist +ManaCost:3 R R +Types:Creature Ogre Warrior +PT:4/4 +T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever CARDNAME attacks, create a tapped and attacking 1/1 red Devil creature token with "When this creature dies, it deals 1 damage to any target." +SVar:TrigToken:DB$ Token | TokenScript$ r_1_1_devil_burn | TokenTapped$ True | TokenAttacking$ True +K:Blitz:3 R +DeckHas:Ability$Token|Sacrifice & Type$Devil +SVar:HasAttackEffect:True +Oracle:Whenever Pugnacious Pugilist attacks, create a tapped and attacking 1/1 red Devil creature token with "When this creature dies, it deals 1 damage to any target."\nBlitz {3}{R} (If you cast this spell for its blitz cost, it gains haste and "When this creature dies, draw a card." Sacrifice it at the beginning of the next end step.) diff --git a/forge-gui/res/cardsfolder/upcoming/raffine_scheming_seer.txt b/forge-gui/res/cardsfolder/upcoming/raffine_scheming_seer.txt index 3fcfedd8d6d..8d3488684c8 100644 --- a/forge-gui/res/cardsfolder/upcoming/raffine_scheming_seer.txt +++ b/forge-gui/res/cardsfolder/upcoming/raffine_scheming_seer.txt @@ -4,12 +4,8 @@ Types:Legendary Creature Sphinx Demon PT:1/4 K:Flying K:Ward:1 -T:Mode$ AttackersDeclared | AttackingPlayer$ You | Execute$ TrigConnive | TriggerZones$ Battlefield | TriggerDescription$ Whenever you attack, target creature connives X, where X is the number of attacking creatures. (Draw X cards, then discard X cards. Put a +1/+1 counter on that creature for each nonland card discarded this way.) -SVar:TrigConnive:DB$ Draw | NumCards$ X | SubAbility$ DBDiscard -SVar:DBDiscard:DB$ Discard | Defined$ You | Mode$ TgtChoose | NumCards$ X | RememberDiscarded$ True | SubAbility$ DBPutCounter -SVar:DBPutCounter:DB$ PutCounter | ValidTgts$ Creature | CounterType$ P1P1 | CounterNum$ Y | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +T:Mode$ AttackersDeclared | AttackingPlayer$ You | Execute$ TrigConnive | TriggerZones$ Battlefield | TriggerDescription$ Whenever you attack, target attacking creature connives X, where X is the number of attacking creatures. (Draw X cards, then discard X cards. Put a +1/+1 counter on that creature for each nonland card discarded this way.) +SVar:TrigConnive:DB$ Connive | ValidTgts$ Creature.attacking | TgtPrompt$ Select target attacking creature | ConniveNum$ X SVar:X:Count$Valid Creature.attacking -SVar:Y:Remembered$Valid Card.nonLand DeckHas:Ability$Discard|Counters -Oracle:Flying, ward {1}\nWhenever you attack, target creature connives X, where X is the number of attacking creatures. (Draw X cards, then discard X cards. Put a +1/+1 counter on that creature for each nonland card discarded this way.) +Oracle:Flying, ward {1}\nWhenever you attack, target attacking creature connives X, where X is the number of attacking creatures. (Draw X cards, then discard X cards. Put a +1/+1 counter on that creature for each nonland card discarded this way.) diff --git a/forge-gui/res/cardsfolder/upcoming/raffines_informant.txt b/forge-gui/res/cardsfolder/upcoming/raffines_informant.txt new file mode 100644 index 00000000000..6ebb216c856 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/raffines_informant.txt @@ -0,0 +1,8 @@ +Name:Raffine's Informant +ManaCost:1 W +Types:Creature Human Wizard +PT:2/1 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigConnive | TriggerDescription$ When CARDNAME enters the battlefield, it connives. (Draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on this creature.) +SVar:TrigConnive:DB$ Connive +DeckHas:Ability$Discard|Counters +Oracle:When Raffine's Informant enters the battlefield, it connives. (Draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on this creature.) diff --git a/forge-gui/res/cardsfolder/upcoming/raffines_silencer.txt b/forge-gui/res/cardsfolder/upcoming/raffines_silencer.txt new file mode 100644 index 00000000000..e313f7cf5db --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/raffines_silencer.txt @@ -0,0 +1,11 @@ +Name:Raffine's Silencer +ManaCost:2 B +Types:Creature Human Assassin +PT:1/1 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigConnive | TriggerDescription$ When CARDNAME enters the battlefield, it connives. (Draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on this creature.) +SVar:TrigConnive:DB$ Connive +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerDescription$ When CARDNAME dies, target creature an opponent controls gets -X/-X until end of turn, where X is Raffine's Silencer's power. +SVar:TrigReturn:DB$ Pump | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls | NumAtt$ -X | NumDef$ -X | IsCurse$ True +SVar:X:TriggeredCard$CardPower +DeckHas:Ability$Discard|Counters +Oracle:When Raffine's Silencer enters the battlefield, it connives. (Draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on this creature.)\nWhen Raffine's Silencer dies, target creature an opponent controls gets -X/-X until end of turn, where X is Raffine's Silencer's power. diff --git a/forge-gui/res/cardsfolder/upcoming/rakish_revelers.txt b/forge-gui/res/cardsfolder/upcoming/rakish_revelers.txt index 51510096dd4..c990b00e747 100644 --- a/forge-gui/res/cardsfolder/upcoming/rakish_revelers.txt +++ b/forge-gui/res/cardsfolder/upcoming/rakish_revelers.txt @@ -5,7 +5,7 @@ PT:5/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a 1/1 green and white Citizen creature token. SVar:TrigToken:DB$ Token | TokenScript$ gw_1_1_citizen A:AB$ Effect | Cost$ 2 ExileFromHand<1/CARDNAME> | ActivationZone$ Hand | ValidTgts$ Land | TgtPrompt$ Select target land | RememberObjects$ Targeted,Self | StaticAbilities$ Land,MayPlay | Triggers$ Cast | ImprintCards$ Self | Duration$ Permanent | ForgetOnMoved$ Exile | SpellDescription$ Target land gains "{T}: Add {R}, {G}, or {W}" until CARDNAME is cast from exile. You may cast CARDNAME for as long as it remains exiled. -SVar:Land:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Card.IsRemembered+IsNotImprinted | AddAbility$ Mana | Description$ Target land gains "{T}: Add {R}, {G}, or {W}" until Rakish Revelers is cast from exile. You may cast EFFECTSOURCE for as long as it remains exiled. +SVar:Land:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Card.IsRemembered+IsNotImprinted | AddAbility$ Mana | Description$ Target land gains "{T}: Add {R}, {G}, or {W}" until EFFECTSOURCE is cast from exile. You may cast EFFECTSOURCE for as long as it remains exiled. SVar:Mana:AB$ Mana | Cost$ T | Produced$ Combo R G W | Amount$ 1 | SpellDescription$ Add {R}, {G}, or {W} SVar:MayPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsImprinted+IsRemembered | AffectedZone$ Exile | Secondary$ True | Description$ You may cast EFFECTSOURCE for as long as it remains exiled. SVar:Cast:Mode$ SpellCast | ValidCard$ Card.IsImprinted+IsRemembered+wasCastFromExile | Execute$ ExileSelf | Static$ True diff --git a/forge-gui/res/cardsfolder/upcoming/revel_ruiner.txt b/forge-gui/res/cardsfolder/upcoming/revel_ruiner.txt new file mode 100644 index 00000000000..4c89c7c5abd --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/revel_ruiner.txt @@ -0,0 +1,9 @@ +Name:Revel Ruiner +ManaCost:3 B +Types:Creature Cephalid Rogue +PT:3/1 +K:Menace +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigConnive | TriggerDescription$ When CARDNAME enters the battlefield, it connives. (Draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on this creature.) +SVar:TrigConnive:DB$ Connive +DeckHas:Ability$Discard|Counters +Oracle:Menace\nWhen Revel Ruiner enters the battlefield, it connives. (Draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on this creature.) diff --git a/forge-gui/res/cardsfolder/upcoming/riveteers_decoy.txt b/forge-gui/res/cardsfolder/upcoming/riveteers_decoy.txt new file mode 100644 index 00000000000..c43e2d79826 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/riveteers_decoy.txt @@ -0,0 +1,8 @@ +Name:Riveteers Decoy +ManaCost:1 G +Types:Creature Human Warrior +PT:3/1 +K:CARDNAME must be blocked if able. +K:Blitz:3 G +DeckHas:Ability$Sacrifice +Oracle:Riveteers Decoy must be blocked if able.\nBlitz {3}{G} (If you cast this spell for its blitz cost, it gains haste and "When this creature dies, draw a card." Sacrifice it at the beginning of the next end step.) diff --git a/forge-gui/res/cardsfolder/upcoming/riveteers_requisitioner.txt b/forge-gui/res/cardsfolder/upcoming/riveteers_requisitioner.txt new file mode 100644 index 00000000000..ca82e2d1cab --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/riveteers_requisitioner.txt @@ -0,0 +1,9 @@ +Name:Riveteers Requisitioner +ManaCost:1 R +Types:Creature Viashino Rogue +PT:3/1 +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME dies, create a Treasure token. (It's an artifact with "{T}, Sacrifice this artifact: Add one mana of any color.") +SVar:TrigToken:DB$ Token | TokenScript$ c_a_treasure_sac +DeckHas:Ability$Token|Sacrifice & Type$Treasure|Artifact +K:Blitz:2 R +Oracle:When Riveteers Requisitioner dies, create a Treasure token. (It's an artifact with "{T}, Sacrifice this artifact: Add one mana of any color.")\nBlitz {2}{R} (If you cast this spell for its blitz cost, it gains haste and "When this creature dies, draw a card." Sacrifice it at the beginning of the next end step.) diff --git a/forge-gui/res/cardsfolder/upcoming/security_bypass.txt b/forge-gui/res/cardsfolder/upcoming/security_bypass.txt new file mode 100644 index 00000000000..4beaee223bd --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/security_bypass.txt @@ -0,0 +1,11 @@ +Name:Security Bypass +ManaCost:1 U +Types:Enchantment Aura +K:Enchant creature +A:SP$ Attach | ValidTgts$ Creature | AILogic$ Pump +S:Mode$ Continuous | Affected$ Creature.EnchantedBy+attacking | AddHiddenKeyword$ Unblockable | IsPresent$ Creature.attacking+!EnchantedBy | PresentCompare$ EQ0 | Description$ As long as enchanted creature is attacking alone, it can't be blocked. +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddTrigger$ DamageDone | AddSVar$ TrigConnive | Description$ Enchanted creature has "Whenever this creature deals combat damage to a player, it connives." (Its controller draws a card, then discards a card. If they discarded a nonland card, they put a +1/+1 counter on this creature.) +SVar:DamageDone:Mode$ DamageDone | CombatDamage$ True | ValidSource$ Card.Self | ValidTarget$ Player | TriggerZones$ Battlefield | Execute$ TrigConnive | TriggerDescription$ Whenever this creature deals combat damage to a player, it connives. +SVar:TrigConnive:DB$ Connive +DeckHas:Ability$Discard|Counters +Oracle:Enchant creature\nAs long as enchanted creature is attacking alone, it can't be blocked.\nEnchanted creature has "Whenever this creature deals combat damage to a player, it connives." (Its controller draws a card, then discards a card. If they discarded a nonland card, they put a +1/+1 counter on this creature.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/shakedown_heavy.txt b/forge-gui/res/cardsfolder/upcoming/shakedown_heavy.txt index fda957f67e5..286dd9d8ad4 100644 --- a/forge-gui/res/cardsfolder/upcoming/shakedown_heavy.txt +++ b/forge-gui/res/cardsfolder/upcoming/shakedown_heavy.txt @@ -7,4 +7,5 @@ T:Mode$ Attacks | ValidCard$ Card.Self | OptionalDecider$ DefendingPlayer | Exec SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 | SubAbility$ TrigUntap SVar:TrigUntap:DB$ Untap | Defined$ Self | SubAbility$ RemCombat SVar:RemCombat:DB$ RemoveFromCombat | Defined$ Self +SVar:HasAttackEffect:True Oracle:Menace\nWhenever Shakedown Heavy attacks, defending player may have you draw a card. If they do, untap Shakedown Heavy and remove it from combat. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/shattered_seraph.txt b/forge-gui/res/cardsfolder/upcoming/shattered_seraph.txt new file mode 100644 index 00000000000..70c65db05c6 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/shattered_seraph.txt @@ -0,0 +1,15 @@ +Name:Shattered Seraph +ManaCost:4 W U B +Types:Creature Angel Rogue +PT:4/4 +K:Flying +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigGainLife | TriggerDescription$ When CARDNAME enters the battlefield, you gain 3 life. +SVar:TrigGainLife:DB$ GainLife | LifeAmount$ 3 +A:AB$ Effect | Cost$ 2 ExileFromHand<1/CARDNAME> | ActivationZone$ Hand | ValidTgts$ Land | TgtPrompt$ Select target land | RememberObjects$ Targeted,Self | StaticAbilities$ Land,MayPlay | Triggers$ Cast | ImprintCards$ Self | Duration$ Permanent | ForgetOnMoved$ Exile | SpellDescription$ Target land gains "{T}: Add {W}, {U}, or {B}" until CARDNAME is cast from exile. You may cast CARDNAME for as long as it remains exiled. +SVar:Land:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Card.IsRemembered+IsNotImprinted | AddAbility$ Mana | Description$ Target land gains "{T}: Add {W}, {U}, or {B}" until EFFECTSOURCE is cast from exile. You may cast EFFECTSOURCE for as long as it remains exiled. +SVar:Mana:AB$ Mana | Cost$ T | Produced$ Combo W U B | Amount$ 1 | SpellDescription$ Add {W}, {U}, or {B} +SVar:MayPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsImprinted+IsRemembered | AffectedZone$ Exile | Secondary$ True | Description$ You may cast EFFECTSOURCE for as long as it remains exiled. +SVar:Cast:Mode$ SpellCast | ValidCard$ Card.IsImprinted+IsRemembered+wasCastFromExile | Execute$ ExileSelf | Static$ True +SVar:ExileSelf:DB$ ChangeZone | Origin$ Command | Destination$ Exile | Defined$ Self +DeckHas:Ability$LifeGain +Oracle:Flying\nWhen Shattered Seraph enters the battlefield, you gain 3 life.\n{2}, Exile Shattered Seraph from your hand: Target land gains "{T}: Add {W}, {U}, or {B}" until Shattered Seraph is cast from exile. You may cast Shattered Seraph for as long as it remains exiled. diff --git a/forge-gui/res/cardsfolder/upcoming/sizzling_soloist.txt b/forge-gui/res/cardsfolder/upcoming/sizzling_soloist.txt new file mode 100644 index 00000000000..143ac3190d1 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/sizzling_soloist.txt @@ -0,0 +1,13 @@ +Name:Sizzling Soloist +ManaCost:3 R +Types:Creature Human Citizen +PT:3/2 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigCantBlock | TriggerDescription$ Alliance — Whenever another creature enters the battlefield under your control, target creature an opponent controls can't block this turn. If this is the second time this ability has resolved this turn, that creature attacks during its controller's next combat phase if able. +SVar:TrigCantBlock:DB$ Pump | ValidTgts$ Creature.OppCtrl | KW$ HIDDEN CARDNAME can't block. | TgtPrompt$ Select target creature an opponent controls | IsCurse$ True | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ2 | RememberObjects$ Targeted | Triggers$ MustAttackTrig | Duration$ Permanent | ExileOnMoved$ Battlefield +SVar:MustAttackTrig:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ Player.controlsCreature.IsRemembered_GE1 | Execute$ TrigAttacks | Static$ True | TriggerDescription$ This creature attacks during its controller's next combat phase if able. +SVar:TrigAttacks:DB$ Pump | Defined$ Remembered | KW$ HIDDEN CARDNAME attacks each combat if able. | Duration$ UntilEndOfCombat | SubAbility$ ExileSelf +SVar:ExileSelf:DB$ ChangeZone | Origin$ Command | Destination$ Exile | Defined$ Self +SVar:X:Count$ResolvedThisTurn +SVar:BuffedBy:Creature +Oracle:Alliance — Whenever another creature enters the battlefield under your control, target creature an opponent controls can't block this turn. If this is the second time this ability has resolved this turn, that creature attacks during its controller's next combat phase if able. diff --git a/forge-gui/res/cardsfolder/upcoming/social_climber.txt b/forge-gui/res/cardsfolder/upcoming/social_climber.txt new file mode 100644 index 00000000000..7c68a99f1be --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/social_climber.txt @@ -0,0 +1,9 @@ +Name:Social Climber +ManaCost:2 G +Types:Creature Human Druid +PT:3/2 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigGainLife | TriggerDescription$ Alliance — Whenever another creature enters the battlefield under your control, you gain 1 life. +SVar:TrigGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 +SVar:BuffedBy:Creature +DeckHas:Ability$LifeGain +Oracle:Alliance — Whenever another creature enters the battlefield under your control, you gain 1 life. diff --git a/forge-gui/res/cardsfolder/upcoming/sparas_adjudicators.txt b/forge-gui/res/cardsfolder/upcoming/sparas_adjudicators.txt new file mode 100644 index 00000000000..3436d926a33 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/sparas_adjudicators.txt @@ -0,0 +1,13 @@ +Name:Spara's Adjudicators +ManaCost:2 G W U +Types:Creature Cat Citizen +PT:4/4 +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigPump | TriggerDescription$ When CARDNAME enters the battlefield, target creature an opponent controls can't attack or block until your next turn. +SVar:TrigPump:DB$ Pump | ValidTgts$ Creature.OpponentCtrl | TgtPrompt$ Select target creature an opponent controls | KW$ HIDDEN CARDNAME can't attack or block. | IsCurse$ True | Duration$ UntilYourNextTurn +A:AB$ Effect | Cost$ 2 ExileFromHand<1/CARDNAME> | ActivationZone$ Hand | ValidTgts$ Land | TgtPrompt$ Select target land | RememberObjects$ Targeted,Self | StaticAbilities$ Land,MayPlay | Triggers$ Cast | ImprintCards$ Self | Duration$ Permanent | ForgetOnMoved$ Exile | SpellDescription$ Target land gains "{T}: Add {G}, {W}, or {U}" until CARDNAME is cast from exile. You may cast CARDNAME for as long as it remains exiled. +SVar:Land:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Card.IsRemembered+IsNotImprinted | AddAbility$ Mana | Description$ Target land gains "{T}: Add {G}, {W}, or {U}" until EFFECTSOURCE is cast from exile. You may cast EFFECTSOURCE for as long as it remains exiled. +SVar:Mana:AB$ Mana | Cost$ T | Produced$ Combo G W U | Amount$ 1 | SpellDescription$ Add {G}, {W}, or {U} +SVar:MayPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsImprinted+IsRemembered | AffectedZone$ Exile | Secondary$ True | Description$ You may cast EFFECTSOURCE for as long as it remains exiled. +SVar:Cast:Mode$ SpellCast | ValidCard$ Card.IsImprinted+IsRemembered+wasCastFromExile | Execute$ ExileSelf | Static$ True +SVar:ExileSelf:DB$ ChangeZone | Origin$ Command | Destination$ Exile | Defined$ Self +Oracle:When Spara's Adjudicators enters the battlefield, target creature an opponent controls can't attack or block until your next turn.\n{2}, Exile Spara's Adjudicators from your hand: Target land gains "{T}: Add {G}, {W}, or {U}" until Spara's Adjudicators is cast from exile. You may cast Spara's Adjudicators for as long as it remains exiled. diff --git a/forge-gui/res/cardsfolder/upcoming/tenacious_underdog.txt b/forge-gui/res/cardsfolder/upcoming/tenacious_underdog.txt new file mode 100644 index 00000000000..e8c3b2f91ae --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/tenacious_underdog.txt @@ -0,0 +1,8 @@ +Name:Tenacious Underdog +ManaCost:1 B +Types:Creature Human Warrior +PT:3/2 +K:Blitz:2 B B PayLife<2> +S:Mode$ Continuous | Affected$ Card.Self | MayPlay$ True | ValidSA$ Spell.Blitz | AffectedZone$ Graveyard | EffectZone$ Graveyard | Description$ You may cast CARDNAME from your graveyard using its blitz ability. +DeckHas:Ability$Sacrifice|Graveyard +Oracle:Blitz—{2}{B}{B}, Pay 2 life. (If you cast this spell for its blitz cost, it gains haste and "When this creature dies, draw a card." Sacrifice it at the beginning of the next end step.)\nYou may cast Tenacious Underdog from your graveyard using its blitz ability. diff --git a/forge-gui/res/cardsfolder/upcoming/toluz_clever_conductor.txt b/forge-gui/res/cardsfolder/upcoming/toluz_clever_conductor.txt new file mode 100644 index 00000000000..2bdc438bacd --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/toluz_clever_conductor.txt @@ -0,0 +1,13 @@ +Name:Toluz, Clever Conductor +ManaCost:WU U UB +Types:Legendary Creature Human Rogue +PT:3/1 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigConnive | TriggerDescription$ When CARDNAME enters the battlefield, it connives. (Draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on this creature.) +SVar:TrigConnive:DB$ Connive +T:Mode$ DiscardedAll | ValidPlayer$ You | ValidCard$ Card | TriggerZones$ Battlefield | Execute$ TrigExile | TriggerDescription$ Whenever you discard one or more cards, exile them from your graveyard. +SVar:TrigExile:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | ChangeType$ Card.TriggeredCards +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerDescription$ When NICKNAME dies, put the cards exiled with it into their owner's hand. +SVar:TrigReturn:DB$ ChangeZoneAll | ChangeType$ Card.ExiledWithSource | Origin$ Exile | Destination$ Hand +DeckHas:Ability$Discard|Counters +DeckHints:Ability$Discard +Oracle:When Toluz, Clever Conductor enters the battlefield, it connives. (Draw a card, then discard a card. If you discarded a nonland card, put a +1/+1 counter on this creature.)\nWhenever you discard one or more cards, exile them from your graveyard.\nWhen Toluz dies, put the cards exiled with it into their owner's hand. diff --git a/forge-gui/res/cardsfolder/upcoming/torch_breath.txt b/forge-gui/res/cardsfolder/upcoming/torch_breath.txt new file mode 100644 index 00000000000..da2da71e2c1 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/torch_breath.txt @@ -0,0 +1,10 @@ +Name:Torch Breath +ManaCost:X R +Types:Instant +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ CostReduction | Relative$ True | EffectZone$ All | Description$ This spell costs {2} less to cast if it targets a a blue permanent. +SVar:CostReduction:Count$Compare CheckTgt GE1.2.0 +SVar:CheckTgt:Targeted$Valid Permanent.Blue +K:This spell can't be countered. +A:SP$ DealDamage | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | NumDmg$ X | SpellDescription$ CARDNAME deals X damage to target creature or planeswalker. +SVar:X:Count$xPaid +Oracle:This spell costs {2} less to cast if it targets a blue permanent.\nThis spell can't be countered.\nTorch Breath deals X damage to target creature or planeswalker. diff --git a/forge-gui/res/cardsfolder/upcoming/venom_connoisseur.txt b/forge-gui/res/cardsfolder/upcoming/venom_connoisseur.txt new file mode 100644 index 00000000000..0fadcf93991 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/venom_connoisseur.txt @@ -0,0 +1,10 @@ +Name:Venom Connoisseur +ManaCost:1 G +Types:Creature Human Druid +PT:2/2 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Alliance — Whenever another creature enters the battlefield under your control, Venom Connoisseur gains deathtouch until end of turn. If this is the second time this ability has resolved this turn, all creatures you control gain deathtouch until end of turn. +SVar:TrigPump:DB$ Pump | Defined$ Self | KW$ Deathtouch | SubAbility$ DBPumpAll +SVar:DBPumpAll:DB$ PumpAll | ValidCards$ Creature.YouCtrl | KW$ Deathtouch | ConditionCheckSVar$ CreatureETBAmount | ConditionSVarCompare$ EQ2 +SVar:CreatureETBAmount:Count$ResolvedThisTurn +SVar:BuffedBy:Creature +Oracle:Alliance — Whenever another creature enters the battlefield under your control, Venom Connoisseur gains deathtouch until end of turn. If this is the second time this ability has resolved this turn, all creatures you control gain deathtouch until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/whack.txt b/forge-gui/res/cardsfolder/upcoming/whack.txt new file mode 100644 index 00000000000..f916bab4dbb --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/whack.txt @@ -0,0 +1,8 @@ +Name:Whack +ManaCost:3 B +Types:Sorcery +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ CostReduction | Relative$ True | EffectZone$ All | Description$ This spell costs {3} less to cast if it targets a a white creature. +SVar:CostReduction:Count$Compare CheckTgt GE1.3.0 +SVar:CheckTgt:Targeted$Valid Creature.White +A:SP$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ -4 | NumDef$ -4 | IsCurse$ True | SpellDescription$ Target creature gets -4/-4 until end of turn. +Oracle:This spell costs {3} less to cast if it targets a white creature.\nTarget creature gets -4/-4 until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/witty_roastmaster.txt b/forge-gui/res/cardsfolder/upcoming/witty_roastmaster.txt new file mode 100644 index 00000000000..51e4d724cc3 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/witty_roastmaster.txt @@ -0,0 +1,8 @@ +Name:Witty Roastmaster +ManaCost:2 R +Types:Creature Devil Citizen +PT:3/2 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDmg | TriggerDescription$ Alliance — Whenever another creature enters the battlefield under your control, CARDNAME deals 1 damage to each opponent. +SVar:TrigDmg:DB$ DealDamage | Defined$ Player.Opponent | NumDmg$ 1 +SVar:BuffedBy:Creature +Oracle:Alliance — Whenever another creature enters the battlefield under your control, Witty Roastmaster deals 1 damage to each opponent. diff --git a/forge-gui/res/cardsfolder/upcoming/workshop_warchief.txt b/forge-gui/res/cardsfolder/upcoming/workshop_warchief.txt new file mode 100644 index 00000000000..9edf64a8838 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/workshop_warchief.txt @@ -0,0 +1,12 @@ +Name:Workshop Warchief +ManaCost:3 G G +Types:Creature Rhino Warrior +PT:5/3 +K:Trample +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigGainLife | TriggerDescription$ When CARDNAME enters the battlefield, you gain 3 life. +SVar:TrigGainLife:DB$ GainLife | LifeAmount$ 3 +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME dies, create a 4/4 green Rhino Warrior creature token. +SVar:TrigToken:DB$ Token | TokenScript$ g_4_4_rhino_warrior +K:Blitz:4 G G +DeckHas:Ability$LifeGain|Token|Sacrifice +Oracle:Trample\nWhen Workshop Warchief enters the battlefield, you gain 3 life.\nWhen Workshop Warchief dies, create a 4/4 green Rhino Warrior creature token.\nBlitz {4}{G}{G} (If you cast this spell for its blitz cost, it gains haste and "When this creature dies, draw a card." Sacrifice it at the beginning of the next end step.) diff --git a/forge-gui/res/cardsfolder/w/wingfold_pteron.txt b/forge-gui/res/cardsfolder/w/wingfold_pteron.txt index f5d29b99502..e3ab0a8d7b3 100644 --- a/forge-gui/res/cardsfolder/w/wingfold_pteron.txt +++ b/forge-gui/res/cardsfolder/w/wingfold_pteron.txt @@ -3,8 +3,6 @@ ManaCost:5 U Types:Creature Dinosaur PT:3/6 K:ETBReplacement:Other:CounterChoice -SVar:CounterChoice:DB$ GenericChoice | Defined$ You | Choices$ Flying,Hexproof | SpellDescription$ CARDNAME enters the battlefield with your choice of a flying counter or a hexproof counter on it. -SVar:Flying:DB$ PutCounter | ETB$ True | CounterType$ Flying | CounterNum$ 1 | SpellDescription$ CARDNAME enters the battlefield with a flying counter on it -SVar:Hexproof:DB$ PutCounter | ETB$ True | CounterType$ Hexproof | CounterNum$ 1 | SpellDescription$ CARDNAME enters the battlefield with a hexproof counter on it +SVar:CounterChoice:DB$ PutCounter | ETB$ True | CounterType$ Flying,Hexproof | SpellDescription$ CARDNAME enters the battlefield with your choice of a flying counter or a hexproof counter on it. DeckHas:Ability$Counters Oracle:Wingfold Pteron enters the battlefield with your choice of a flying counter or a hexproof counter on it. (A creature with hexproof can't be the target of spells or abilities your opponents control.) diff --git a/forge-gui/res/draft/rankings.txt b/forge-gui/res/draft/rankings.txt index e3442e3e732..42db1893451 100644 --- a/forge-gui/res/draft/rankings.txt +++ b/forge-gui/res/draft/rankings.txt @@ -1,286 +1,568 @@ //Rank|Name|Rarity|Set -#1|Tamiyo, Compleated Sage|M|NEO -#2|Ao, the Dawn Sky|M|NEO -#3|The Wandering Emperor|M|NEO -#4|Kairi, the Swirling Sky|M|NEO -#5|Junji, the Midnight Sky|M|NEO -#6|Atsushi, the Blazing Sky|M|NEO -#7|Kura, the Boundless Sky|M|NEO -#8|Jugan Defends the Temple|M|NEO -#9|Hidetsugu, Devouring Chaos|R|NEO +#1|Workshop Warchief|R|SNC +#2|Titan of Industry|M|SNC +#3|Elspeth Resplendent|M|SNC +#4|Falco Spara, Pactweaver|M|SNC +#5|Vivien on the Hunt|M|SNC +#6|Sanctuary Warden|M|SNC +#7|All-Seeing Arbiter|M|SNC +#8|Depopulate|R|SNC +#9|Urabrask, Heretic Praetor|M|SNC +#10|Fleetfoot Dancer|R|SNC +#11|Jetmir, Nexus of Revels|M|SNC +#12|Lord Xander, the Collector|M|SNC +#13|Ob Nixilis, the Adversary|M|SNC +#14|Ziatora, the Incinerator|M|SNC +#15|Brokers Ascendancy|R|SNC +#16|Raffine, Scheming Seer|M|SNC +#17|Ziatora's Envoy|R|SNC +#18|Body Launderer|M|SNC +#19|Fight Rigging|R|SNC +#20|Evelyn, the Covetous|R|SNC +#21|Tenacious Underdog|R|SNC +#22|Toluz, Clever Conductor|R|SNC +#23|Rabble Rousing|R|SNC +#24|Shakedown Heavy|R|SNC +#25|Jaxis, the Troublemaker|R|SNC +#26|Professional Face-Breaker|R|SNC +#27|Gala Greeters|R|SNC +#28|Aven Heartstabber|R|SNC +#29|Hostile Takeover|R|SNC +#30|Obscura Interceptor|R|SNC +#31|Lagrella, the Magpie|U|SNC +#32|Mysterious Limousine|R|SNC +#33|Reservoir Kraken|R|SNC +#34|Black Market Tycoon|R|SNC +#35|Maestros Diabolist|R|SNC +#36|Soul of Emancipation|R|SNC +#37|Void Rend|R|SNC +#38|Getaway Car|R|SNC +#39|Giada, Font of Hope|R|SNC +#40|Brokers Charm|U|SNC +#41|Corpse Appraiser|U|SNC +#42|Riveteers Charm|U|SNC +#43|Brazen Upstart|U|SNC +#44|Crew Captain|U|SNC +#45|Disciplined Duelist|U|SNC +#46|Unleash the Inferno|R|SNC +#47|Inspiring Overseer|C|SNC +#48|Rumor Gatherer|U|SNC +#49|Ledger Shredder|R|SNC +#50|Undercover Operative|R|SNC +#51|Murder|C|SNC +#52|Sanguine Spy|R|SNC +#53|Cleanup Crew|U|SNC +#54|Darling of the Masses|U|SNC +#55|Jinnie Fay, Jetmir's Second|R|SNC +#56|Metropolis Angel|U|SNC +#57|Mr. Orfeo, the Boulder|U|SNC +#58|Ognis, the Dragon's Lash|R|SNC +#59|Park Heights Pegasus|R|SNC +#60|Extraction Specialist|R|SNC +#61|Faerie Vandal|U|SNC +#62|Psychic Pickpocket|U|SNC +#63|Angel of Suffering|M|SNC +#64|Devilish Valet|R|SNC +#65|Strangle|C|SNC +#66|Elegant Entourage|U|SNC +#67|Cabaretti Ascendancy|R|SNC +#68|Cormela, Glamour Thief|U|SNC +#69|Corpse Explosion|R|SNC +#70|Endless Detour|R|SNC +#71|Fatal Grudge|U|SNC +#72|Maestros Charm|U|SNC +#73|Nimble Larcenist|U|SNC +#74|Queza, Augur of Agonies|U|SNC +#75|Rocco, Cabaretti Caterer|U|SNC +#76|Bouncer's Beatdown|U|SNC +#77|Citizen's Crowbar|U|SNC +#78|Even the Score|M|SNC +#79|Wingshield Agent|U|SNC +#80|Dusk Mangler|U|SNC +#81|Night Clubber|U|SNC +#82|Whack|U|SNC +#83|Call In a Professional|U|SNC +#84|Rob the Archives|U|SNC +#85|Torch Breath|U|SNC +#86|Jewel Thief|C|SNC +#87|Take to the Streets|U|SNC +#88|Cabaretti Charm|U|SNC +#89|Exotic Pets|U|SNC +#90|Incandescent Aria|R|SNC +#91|Security Rhox|U|SNC +#92|Syndicate Infiltrator|U|SNC +#93|Jetmir's Garden|R|SNC +#94|Raffine's Tower|R|SNC +#95|Spara's Headquarters|R|SNC +#96|Xander's Lounge|R|SNC +#97|Ziatora's Proving Ground|R|SNC +#98|Hold for Ransom|C|SNC +#99|Courier's Briefcase|U|SNC +#100|Topiary Stomper|R|SNC +#101|Celestial Regulator|C|SNC +#102|Forge Boss|U|SNC +#103|Spara's Adjudicators|C|SNC +#104|Mage's Attendant|U|SNC +#105|Echo Inspector|C|SNC +#106|Hypnotic Grifter|U|SNC +#107|Out of the Way|U|SNC +#108|Sleep with the Fishes|U|SNC +#109|Raffine's Silencer|U|SNC +#110|Vampire Scrivener|U|SNC +#111|Hoard Hauler|R|SNC +#112|Pyre-Sledge Arsonist|U|SNC +#113|Riveteers Requisitioner|U|SNC +#114|Sizzling Soloist|U|SNC +#115|Unlucky Witness|U|SNC +#116|Freelance Muscle|U|SNC +#117|Venom Connoisseur|U|SNC +#118|Body Dropper|C|SNC +#119|Civil Servant|C|SNC +#120|Jetmir's Fixer|C|SNC +#121|Scheming Fence|R|SNC +#122|Snooping Newsie|C|SNC +#123|Tainted Indulgence|U|SNC +#124|Botanical Plaza|C|SNC +#125|Racers' Ring|C|SNC +#126|Skybridge Towers|C|SNC +#127|Tramway Station|C|SNC +#128|Waterfront District|C|SNC +#129|Prizefight|C|SNC +#130|Ballroom Brawlers|U|SNC +#131|Illuminator Virtuoso|U|SNC +#132|Knockout Blow|U|SNC +#133|Raffine's Informant|C|SNC +#134|Speakeasy Server|C|SNC +#135|Obscura Initiate|C|SNC +#136|Rooftop Nuisance|C|SNC +#137|Slip Out the Back|U|SNC +#138|Wiretapping|R|SNC +#139|Witness Protection|C|SNC +#140|Deal Gone Bad|C|SNC +#141|Grisly Sigil|U|SNC +#142|Maestros Initiate|C|SNC +#143|Big Score|C|SNC +#144|Light 'Em Up|C|SNC +#145|Pugnacious Pugilist|U|SNC +#146|Witty Roastmaster|C|SNC +#147|Caldaia Strongarm|C|SNC +#148|Luxurious Libation|U|SNC +#149|Glamorous Outlaw|C|SNC +#150|Masked Bandits|C|SNC +#151|Rigo, Streetwise Mentor|R|SNC +#152|Shattered Seraph|C|SNC +#153|Stimulus Package|U|SNC +#154|Unlicensed Hearse|R|SNC +#155|Cabaretti Courtyard|C|SNC +#156|Maestros Theater|C|SNC +#157|Obscura Storefront|C|SNC +#158|Swooping Protector|U|SNC +#159|Exhibition Magician|C|SNC +#160|Brokers Hideout|C|SNC +#161|Riveteers Overlook|C|SNC +#162|Riveteers Decoy|U|SNC +#163|Angelic Observer|U|SNC +#164|Halo Fountain|M|SNC +#165|Brokers Veteran|C|SNC +#166|Disdainful Stroke|C|SNC +#167|A Little Chat|U|SNC +#168|Girder Goons|C|SNC +#169|Rogues' Gallery|U|SNC +#170|Mayhem Patrol|C|SNC +#171|Plasma Jockey|C|SNC +#172|Riveteers Initiate|C|SNC +#173|Rhox Pummeler|C|SNC +#174|Social Climber|C|SNC +#175|Voice of the Vermin|U|SNC +#176|Ceremonial Groundbreaker|U|SNC +#177|Obscura Charm|U|SNC +#178|Rakish Revelers|C|SNC +#179|Corrupt Court Official|C|SNC +#180|Ready to Rumble|C|SNC +#181|Backup Agent|C|SNC +#182|Boon of Safety|C|SNC +#183|Dapper Shieldmate|C|SNC +#184|Refuse to Yield|U|SNC +#185|Case the Joint|C|SNC +#186|Make Disappear|C|SNC +#187|Join the Maestros|C|SNC +#188|Attended Socialite|C|SNC +#189|Maestros Ascendancy|R|SNC +#190|Scuttling Butler|U|SNC +#191|Suspicious Bookcase|U|SNC +#192|Expendable Lackey|C|SNC +#193|Gathering Throng|C|SNC +#194|High-Rise Sawjack|C|SNC +#195|Civic Gardener|C|SNC +#196|Crooked Custodian|C|SNC +#197|Run Out of Town|C|SNC +#198|Kill Shot|C|SNC +#199|Buy Your Silence|C|SNC +#200|Celebrity Fencer|C|SNC +#201|Patch Up|U|SNC +#202|Raffine's Guidance|C|SNC +#203|Errant, Street Artist|R|SNC +#204|Psionic Snoop|C|SNC +#205|Public Enemy|U|SNC +#206|Cut of the Profits|R|SNC +#207|Graveyard Shift|U|SNC +#208|Incriminate|C|SNC +#209|Revel Ruiner|C|SNC +#210|Tavern Swindler|U|SNC +#211|Arcane Bombardment|M|SNC +#212|Glittering Stockpile|U|SNC +#213|Involuntary Employment|U|SNC +#214|Cabaretti Initiate|C|SNC +#215|Obscura Ascendancy|R|SNC +#216|Riveteers Ascendancy|R|SNC +#217|Brass Knuckles|U|SNC +#218|Chrome Cat|C|SNC +#219|Halo Scarab|C|SNC +#220|Ominous Parcel|C|SNC +#221|Goldhound|C|SNC +#222|Capenna Express|C|SNC +#223|Sky Crier|C|SNC +#224|Glittermonger|C|SNC +#225|Wrecking Crew|C|SNC +#226|Midnight Assassin|C|SNC +#227|Majestic Metamorphosis|C|SNC +#228|Dig Up the Body|C|SNC +#229|Widespread Thieving|R|SNC +#230|Cement Shoes|U|SNC +#231|Luxior, Giada's Gift|M|SNC +#232|Brokers Initiate|C|SNC +#233|Extract the Truth|C|SNC +#234|Sticky Fingers|C|SNC +#235|Paragon of Modernity|C|SNC +#236|Quick-Draw Dagger|C|SNC +#237|Fake Your Own Death|C|SNC +#238|Gilded Pinions|C|SNC +#239|Warm Welcome|C|SNC +#240|For the Family|C|SNC +#241|Jackhammer|C|SNC +#242|Antagonize|C|SNC +#243|Daring Escape|C|SNC +#244|Demon's Due|C|SNC +#245|Sewer Crocodile|C|SNC +#246|Backstreet Bruiser|C|SNC +#247|An Offer You Can't Refuse|U|SNC +#248|Security Bypass|C|SNC +#249|Cemetery Tampering|R|SNC +#250|Illicit Shipment|U|SNC +#251|Shadow of Mortality|R|SNC +#252|Bootleggers' Stash|M|SNC +#253|Evolving Door|R|SNC +#254|Arc Spitter|U|SNC +#255|Most Wanted|C|SNC +#256|Cutthroat Contender|C|SNC +#257|Revelation of Power|C|SNC +#258|Cut Your Losses|R|SNC +#259|Structural Assault|R|SNC +#260|Meeting of the Five|M|SNC +#261|Broken Wings|C|SNC +#262|Plains 1|C|SNC +#263|Plains 2|C|SNC +#264|Island 1|C|SNC +#265|Island 2|C|SNC +#266|Swamp 1|C|SNC +#267|Swamp 2|C|SNC +#268|Mountain 1|C|SNC +#269|Mountain 2|C|SNC +#270|Forest 1|C|SNC +#271|Forest 2|C|SNC +#272|Plains 3|C|SNC +#273|Plains 4|C|SNC +#274|Island 3|C|SNC +#275|Island 4|C|SNC +#276|Swamp 3|C|SNC +#277|Swamp 4|C|SNC +#278|Mountain 3|C|SNC +#279|Mountain 4|C|SNC +#280|Forest 3|C|SNC +#281|Forest 4|C|SNC +//Rank|Name|Rarity|Set +#1|The Wandering Emperor|M|NEO +#2|Tamiyo, Compleated Sage|M|NEO +#3|Farewell|R|NEO +#4|Jugan Defends the Temple|M|NEO +#5|Ao, the Dawn Sky|M|NEO +#6|Kairi, the Swirling Sky|M|NEO +#7|Junji, the Midnight Sky|M|NEO +#8|Atsushi, the Blazing Sky|M|NEO +#9|Kura, the Boundless Sky|M|NEO #10|Kaito Shizuki|M|NEO -#11|Satoru Umezawa|R|NEO -#12|Blade of the Oni|M|NEO +#11|Tezzeret, Betrayer of Flesh|M|NEO +#12|Reckoner Bankbuster|R|NEO #13|Kyodai, Soul of Kamigawa|R|NEO #14|Lion Sash|R|NEO -#15|Invoke the Winds|R|NEO +#15|Jin-Gitaxias, Progress Tyrant|M|NEO #16|The Reality Chip|R|NEO -#17|Tezzeret, Betrayer of Flesh|M|NEO -#18|Nashi, Moon Sage's Scion|M|NEO -#19|Thundering Raiju|R|NEO -#20|Raiyuu, Storm's Edge|R|NEO -#21|Reckoner Bankbuster|R|NEO -#22|The Restoration of Eiganjo|R|NEO -#23|Fable of the Mirror-Breaker|R|NEO -#24|Tatsunari, Toad Rider|R|NEO -#25|Kodama of the West Tree|M|NEO -#26|Tribute to Horobi|R|NEO -#27|Tameshi, Reality Architect|R|NEO -#28|Lizard Blades|R|NEO -#29|Twinshot Sniper|U|NEO -#30|Surgehacker Mech|R|NEO -#31|Spring-Leaf Avenger|R|NEO -#32|Behold the Unspeakable|U|NEO -#33|Inventive Iteration|R|NEO -#34|Biting-Palm Ninja|R|NEO -#35|Soul Transfer|R|NEO -#36|Kappa Tech-Wrecker|U|NEO -#37|Goro-Goro, Disciple of Ryusei|R|NEO -#38|Blossom Prancer|U|NEO -#39|Ogre-Head Helm|R|NEO -#40|Eater of Virtue|R|NEO -#41|Michiko's Reign of Truth|U|NEO -#42|The Kami War|M|NEO -#43|Banishing Slash|U|NEO -#44|Cloudsteel Kirin|R|NEO -#45|Invoke Justice|R|NEO +#17|Tameshi, Reality Architect|R|NEO +#18|Blade of the Oni|M|NEO +#19|Hidetsugu, Devouring Chaos|R|NEO +#20|Tatsunari, Toad Rider|R|NEO +#21|Thundering Raiju|R|NEO +#22|Invoke the Ancients|R|NEO +#23|The Restoration of Eiganjo|R|NEO +#24|Fable of the Mirror-Breaker|R|NEO +#25|The Kami War|M|NEO +#26|Kodama of the West Tree|M|NEO +#27|Kotose, the Silent Spider|R|NEO +#28|Raiyuu, Storm's Edge|R|NEO +#29|Inventive Iteration|R|NEO +#30|Invoke the Winds|R|NEO +#31|Biting-Palm Ninja|R|NEO +#32|Nashi, Moon Sage's Scion|M|NEO +#33|Goro-Goro, Disciple of Ryusei|R|NEO +#34|Blossom Prancer|U|NEO +#35|Kappa Tech-Wrecker|U|NEO +#36|Shigeki, Jukai Visionary|R|NEO +#37|Spring-Leaf Avenger|R|NEO +#38|Behold the Unspeakable|U|NEO +#39|Soul Transfer|R|NEO +#40|Lizard Blades|R|NEO +#41|Twinshot Sniper|U|NEO +#42|Weaver of Harmony|R|NEO +#43|Surgehacker Mech|R|NEO +#44|Boseiju Reaches Skyward|U|NEO +#45|Banishing Slash|U|NEO #46|Touch the Spirit Realm|U|NEO #47|Assassin's Ink|U|NEO -#48|Kotose, the Silent Spider|R|NEO -#49|Farewell|R|NEO -#50|Invoke the Ancients|R|NEO -#51|Teachings of the Kirin|R|NEO -#52|Shigeki, Jukai Visionary|R|NEO -#53|Gloomshrieker|U|NEO -#54|Mukotai Soulripper|R|NEO -#55|Life of Toshiro Umezawa|U|NEO -#56|Thousand-Faced Shadow|R|NEO -#57|Leech Gauntlet|U|NEO -#58|Risona, Asari Commander|R|NEO -#59|Kami of Transience|R|NEO -#60|Colossal Skyturtle|U|NEO -#61|Acquisition Octopus|U|NEO -#62|Mindlink Mech|R|NEO -#63|Tempered in Solitude|U|NEO -#64|Greasefang, Okiba Boss|R|NEO -#65|Oni-Cult Anvil|U|NEO -#66|Satsuki, the Living Lore|R|NEO -#67|Invigorating Hot Spring|U|NEO -#68|Flame Discharge|U|NEO -#69|March of Otherworldly Light|R|NEO -#70|Selfless Samurai|U|NEO -#71|Jin-Gitaxias, Progress Tyrant|M|NEO -#72|Moonsnare Specialist|C|NEO -#73|March of Wretched Sorrow|R|NEO -#74|Nezumi Prowler|U|NEO -#75|Reinforced Ronin|U|NEO -#76|Weaver of Harmony|R|NEO -#77|Asari Captain|U|NEO -#78|Enthusiastic Mechanaut|U|NEO -#79|Isshin, Two Heavens as One|R|NEO -#80|Jukai Naturalist|U|NEO -#81|Naomi, Pillar of Order|U|NEO +#48|Gloomshrieker|U|NEO +#49|Spirit-Sister's Call|M|NEO +#50|Ogre-Head Helm|R|NEO +#51|Eater of Virtue|R|NEO +#52|Michiko's Reign of Truth|U|NEO +#53|Life of Toshiro Umezawa|U|NEO +#54|Selfless Samurai|U|NEO +#55|Hinata, Dawn-Crowned|R|NEO +#56|Circuit Mender|U|NEO +#57|Kami of Transience|R|NEO +#58|Colossal Skyturtle|U|NEO +#59|Tribute to Horobi|R|NEO +#60|Teachings of the Kirin|R|NEO +#61|Invoke Justice|R|NEO +#62|Jukai Naturalist|U|NEO +#63|Oni-Cult Anvil|U|NEO +#64|Cloudsteel Kirin|R|NEO +#65|Mindlink Mech|R|NEO +#66|Naomi, Pillar of Order|U|NEO +#67|Rabbit Battery|U|NEO +#68|Dockside Chef|U|NEO +#69|Patchwork Automaton|U|NEO +#70|Imperial Oath|C|NEO +#71|Spirited Companion|C|NEO +#72|Acquisition Octopus|U|NEO +#73|Moonsnare Specialist|C|NEO +#74|Thirst for Knowledge|U|NEO +#75|March of Wretched Sorrow|R|NEO +#76|Tempered in Solitude|U|NEO +#77|Generous Visitor|U|NEO +#78|Spinning Wheel Kick|U|NEO +#79|Enthusiastic Mechanaut|U|NEO +#80|Greasefang, Okiba Boss|R|NEO +#81|Isshin, Two Heavens as One|R|NEO #82|Prodigy's Prototype|U|NEO -#83|Silver-Fur Master|U|NEO -#84|Circuit Mender|U|NEO -#85|Dokuchi Silencer|U|NEO -#86|Rabbit Battery|U|NEO -#87|Dockside Chef|U|NEO +#83|Satoru Umezawa|R|NEO +#84|Silver-Fur Master|U|NEO +#85|Invigorating Hot Spring|U|NEO +#86|Risona, Asari Commander|R|NEO +#87|Blade-Blizzard Kitsune|U|NEO #88|Eiganjo, Seat of the Empire|R|NEO -#89|Master's Rebuke|C|NEO -#90|Kami's Flare|C|NEO -#91|Boseiju Reaches Skyward|U|NEO -#92|Norika Yamazaki, the Poet|U|NEO -#93|Spirited Companion|C|NEO -#94|Replication Specialist|U|NEO -#95|Thirst for Knowledge|U|NEO -#96|Bronzeplate Boar|U|NEO -#97|Sokenzan Smelter|U|NEO -#98|Roadside Reliquary|U|NEO -#99|Intercessor's Arrest|C|NEO -#100|The Fall of Lord Konda|U|NEO -#101|Kumano Faces Kakkazan|U|NEO -#102|Go-Shintai of Shared Purpose|U|NEO -#103|Go-Shintai of Hidden Cruelty|U|NEO -#104|Go-Shintai of Ancient Wars|U|NEO -#105|Heiko Yamazaki, the General|U|NEO -#106|Go-Shintai of Boundless Vigor|U|NEO -#107|Spinning Wheel Kick|U|NEO -#108|Hinata, Dawn-Crowned|R|NEO -#109|Walking Skyscraper|U|NEO -#110|Otawara, Soaring City|R|NEO -#111|Takenuma, Abandoned Mire|R|NEO -#112|Containment Construct|U|NEO -#113|Blade-Blizzard Kitsune|U|NEO -#114|Patchwork Automaton|U|NEO -#115|Voltage Surge|C|NEO -#116|Twisted Embrace|C|NEO -#117|Okiba Reckoner Raid|C|NEO -#118|Sunblade Samurai|C|NEO -#119|Moon-Circuit Hacker|C|NEO -#120|Prosperous Thief|U|NEO -#121|Tamiyo's Compleation|C|NEO -#122|Gravelighter|U|NEO -#123|Lethal Exploit|C|NEO -#124|Scrap Welder|R|NEO -#125|Generous Visitor|U|NEO -#126|Orochi Merge-Keeper|U|NEO -#127|Towashi Guide-Bot|U|NEO -#128|Boseiju, Who Endures|R|NEO -#129|Sokenzan, Crucible of Defiance|R|NEO -#130|Seismic Wave|U|NEO -#131|Go-Shintai of Lost Wisdom|U|NEO -#132|Jukai Preserver|C|NEO -#133|Experimental Synthesizer|C|NEO -#134|Virus Beetle|C|NEO -#135|Imperial Recovery Unit|U|NEO -#136|Hotshot Mechanic|U|NEO -#137|Seven-Tail Mentor|C|NEO -#138|Essence Capture|U|NEO -#139|Futurist Operative|U|NEO -#140|Inkrise Infiltrator|C|NEO -#141|You Are Already Dead|C|NEO -#142|Fang of Shigeki|C|NEO -#143|Geothermal Kami|C|NEO -#144|High-Speed Hoverbike|U|NEO -#145|Unforgiving One|U|NEO -#146|Uncharted Haven|C|NEO -#147|Ninja's Kunai|C|NEO -#148|Fade into Antiquity|C|NEO -#149|Careful Cultivation|C|NEO -#150|Moonfolk Puzzlemaker|C|NEO -#151|Mnemonic Sphere|C|NEO -#152|Wanderer's Intervention|C|NEO -#153|Golden-Tail Disciple|C|NEO -#154|The Modern Age|C|NEO -#155|Tales of Master Seshiro|C|NEO -#156|Hidetsugu Consumes All|M|NEO -#157|The Long Reach of Night|U|NEO -#158|Sky-Blessed Samurai|U|NEO -#159|Covert Technician|U|NEO -#160|Mobilizer Mech|U|NEO -#161|Network Disruptor|C|NEO -#162|Dokuchi Shadow-Walker|C|NEO -#163|Malicious Malfunction|U|NEO -#164|Mukotai Ambusher|C|NEO -#165|Nezumi Bladeblesser|C|NEO -#166|Akki Ronin|C|NEO -#167|March of Reckless Joy|R|NEO -#168|Peerless Samurai|C|NEO -#169|Unstoppable Ogre|C|NEO -#170|Upriser Renegade|U|NEO -#171|Boon of Boseiju|U|NEO -#172|Coiling Stalker|C|NEO -#173|Greater Tanuki|C|NEO -#174|Roaring Earth|U|NEO -#175|Webspinner Cuff|U|NEO -#176|Dragonspark Reactor|U|NEO -#177|Searchlight Companion|C|NEO -#178|Season of Renewal|C|NEO -#179|Grafted Growth|C|NEO -#180|Commune with Spirits|C|NEO -#181|Ironhoof Boar|C|NEO -#182|Undercity Scrounger|C|NEO -#183|Kami of Terrible Secrets|C|NEO -#184|Debt to the Kami|C|NEO -#185|Chainflail Centipede|C|NEO -#186|Skyswimmer Koi|C|NEO -#187|Mirrorshell Crab|C|NEO -#188|Repel the Vile|C|NEO -#189|Imperial Oath|C|NEO -#190|Jukai Trainee|C|NEO -#191|Era of Enlightenment|C|NEO -#192|Wind-Scarred Crag|C|NEO -#193|Bloodfell Caves|C|NEO -#194|Blossoming Sands|C|NEO -#195|Dismal Backwater|C|NEO -#196|Tranquil Cove|C|NEO -#197|Thornwood Falls|C|NEO -#198|Swiftwater Cliffs|C|NEO -#199|When We Were Young|U|NEO -#200|Moonsnare Prototype|C|NEO -#201|Invoke Despair|R|NEO -#202|Okiba Salvage|U|NEO -#203|Akki Ember-Keeper|C|NEO -#204|Simian Sling|C|NEO -#205|Storyweave|U|NEO -#206|Mechtitan Core|R|NEO -#207|Papercraft Decoy|C|NEO -#208|Bearer of Memory|C|NEO -#209|Kitsune Ace|C|NEO -#210|Azusa's Many Journeys|U|NEO -#211|Scoured Barrens|C|NEO -#212|Rugged Highlands|C|NEO -#213|Jungle Hollow|C|NEO -#214|Born to Drive|U|NEO -#215|Eiganjo Exemplar|C|NEO -#216|Imperial Subduer|C|NEO -#217|Light the Way|C|NEO -#218|Armguard Familiar|C|NEO -#219|Guardians of Oboro|C|NEO -#220|Kami of Industry|C|NEO -#221|Bamboo Grove Archer|C|NEO -#222|Heir of the Ancient Fang|C|NEO -#223|Spirit-Sister's Call|M|NEO -#224|Runaway Trash-Bot|U|NEO -#225|Explosive Singularity|M|NEO -#226|Network Terminal|C|NEO -#227|Ecologist's Terrarium|C|NEO -#228|Harmonious Emergence|C|NEO -#229|Towashi Songshaper|C|NEO -#230|Scrapyard Steelbreaker|C|NEO -#231|Crackling Emergence|C|NEO -#232|Ambitious Assault|C|NEO -#233|Reckoner Shakedown|C|NEO -#234|Kami of Restless Shadows|C|NEO -#235|Kaito's Pursuit|C|NEO -#236|Suit Up|C|NEO -#237|Planar Incision|C|NEO -#238|Disruption Protocol|C|NEO -#239|Mothrider Patrol|C|NEO -#240|Dragonfly Suit|C|NEO -#241|Befriending the Moths|C|NEO -#242|Saiba Trespassers|C|NEO -#243|Historian's Wisdom|U|NEO -#244|Eiganjo Uprising|R|NEO -#245|Reito Sentinel|U|NEO -#246|March of Swirling Mist|R|NEO -#247|Thundersteel Colossus|C|NEO -#248|Shrine Steward|C|NEO -#249|Brute Suit|C|NEO -#250|Automated Artificer|C|NEO -#251|Kindled Fury|C|NEO -#252|Gift of Wrath|C|NEO -#253|Return to Action|C|NEO -#254|Reckoner's Bargain|C|NEO -#255|Clawing Torment|C|NEO -#256|Short Circuit|C|NEO -#257|Regent's Authority|C|NEO -#258|The Shattered States Era|C|NEO -#259|Ancestral Katana|C|NEO -#260|Brilliant Restoration|R|NEO -#261|Light-Paws, Emperor's Voice|R|NEO -#262|Reality Heist|U|NEO -#263|Spell Pierce|C|NEO -#264|Mech Hangar|U|NEO -#265|Secluded Courtyard|U|NEO -#266|Bronze Cudgels|U|NEO -#267|Iron Apprentice|C|NEO -#268|Dramatist's Puppet|C|NEO -#269|Tamiyo's Safekeeping|C|NEO -#270|Favor of Jukai|C|NEO -#271|Explosive Entry|C|NEO -#272|Futurist Sentinel|C|NEO +#89|Kami's Flare|C|NEO +#90|Experimental Synthesizer|C|NEO +#91|Virus Beetle|C|NEO +#92|Twisted Embrace|C|NEO +#93|Kumano Faces Kakkazan|U|NEO +#94|Norika Yamazaki, the Poet|U|NEO +#95|Moon-Circuit Hacker|C|NEO +#96|Network Disruptor|C|NEO +#97|Prosperous Thief|U|NEO +#98|Replication Specialist|U|NEO +#99|Thousand-Faced Shadow|R|NEO +#100|Nezumi Prowler|U|NEO +#101|Seismic Wave|U|NEO +#102|Flame Discharge|U|NEO +#103|Voltage Surge|C|NEO +#104|Intercessor's Arrest|C|NEO +#105|The Modern Age|C|NEO +#106|Okiba Reckoner Raid|C|NEO +#107|Tamiyo's Compleation|C|NEO +#108|Gravelighter|U|NEO +#109|Leech Gauntlet|U|NEO +#110|Heiko Yamazaki, the General|U|NEO +#111|Asari Captain|U|NEO +#112|Boseiju, Who Endures|R|NEO +#113|Otawara, Soaring City|R|NEO +#114|Roadside Reliquary|U|NEO +#115|Dokuchi Silencer|U|NEO +#116|Containment Construct|U|NEO +#117|March of Otherworldly Light|R|NEO +#118|Master's Rebuke|C|NEO +#119|Fade into Antiquity|C|NEO +#120|Imperial Recovery Unit|U|NEO +#121|Sunblade Samurai|C|NEO +#122|Bronzeplate Boar|U|NEO +#123|Fang of Shigeki|C|NEO +#124|Go-Shintai of Boundless Vigor|U|NEO +#125|Takenuma, Abandoned Mire|R|NEO +#126|Explosive Singularity|M|NEO +#127|Jukai Preserver|C|NEO +#128|Mothrider Patrol|C|NEO +#129|Mukotai Soulripper|R|NEO +#130|The Fall of Lord Konda|U|NEO +#131|Tales of Master Seshiro|C|NEO +#132|Born to Drive|U|NEO +#133|Go-Shintai of Shared Purpose|U|NEO +#134|Hotshot Mechanic|U|NEO +#135|Covert Technician|U|NEO +#136|Futurist Operative|U|NEO +#137|Mobilizer Mech|U|NEO +#138|Go-Shintai of Hidden Cruelty|U|NEO +#139|Inkrise Infiltrator|C|NEO +#140|Lethal Exploit|C|NEO +#141|Mukotai Ambusher|C|NEO +#142|Go-Shintai of Ancient Wars|U|NEO +#143|Scrap Welder|R|NEO +#144|Simian Sling|C|NEO +#145|Bamboo Grove Archer|C|NEO +#146|Boon of Boseiju|U|NEO +#147|Geothermal Kami|C|NEO +#148|Greater Tanuki|C|NEO +#149|Storyweave|U|NEO +#150|Webspinner Cuff|U|NEO +#151|High-Speed Hoverbike|U|NEO +#152|Towashi Guide-Bot|U|NEO +#153|Unforgiving One|U|NEO +#154|Go-Shintai of Lost Wisdom|U|NEO +#155|Uncharted Haven|C|NEO +#156|Searchlight Companion|C|NEO +#157|Ninja's Kunai|C|NEO +#158|Ecologist's Terrarium|C|NEO +#159|Harmonious Emergence|C|NEO +#160|Commune with Spirits|C|NEO +#161|Towashi Songshaper|C|NEO +#162|Suit Up|C|NEO +#163|Skyswimmer Koi|C|NEO +#164|Mnemonic Sphere|C|NEO +#165|Mirrorshell Crab|C|NEO +#166|Wanderer's Intervention|C|NEO +#167|Repel the Vile|C|NEO +#168|Befriending the Moths|C|NEO +#169|Azusa's Many Journeys|U|NEO +#170|The Long Reach of Night|U|NEO +#171|Eiganjo Exemplar|C|NEO +#172|Seven-Tail Mentor|C|NEO +#173|Sky-Blessed Samurai|U|NEO +#174|Essence Capture|U|NEO +#175|Dokuchi Shadow-Walker|C|NEO +#176|Nezumi Bladeblesser|C|NEO +#177|Okiba Salvage|U|NEO +#178|Akki Ronin|C|NEO +#179|Peerless Samurai|C|NEO +#180|Reinforced Ronin|U|NEO +#181|Orochi Merge-Keeper|U|NEO +#182|Roaring Earth|U|NEO +#183|Sokenzan, Crucible of Defiance|R|NEO +#184|Papercraft Decoy|C|NEO +#185|Network Terminal|C|NEO +#186|Season of Renewal|C|NEO +#187|Grafted Growth|C|NEO +#188|Careful Cultivation|C|NEO +#189|Ironhoof Boar|C|NEO +#190|Kami of Terrible Secrets|C|NEO +#191|Debt to the Kami|C|NEO +#192|Clawing Torment|C|NEO +#193|Moonfolk Puzzlemaker|C|NEO +#194|Golden-Tail Disciple|C|NEO +#195|Jukai Trainee|C|NEO +#196|Era of Enlightenment|C|NEO +#197|Hidetsugu Consumes All|M|NEO +#198|Wind-Scarred Crag|C|NEO +#199|Bloodfell Caves|C|NEO +#200|Blossoming Sands|C|NEO +#201|Dismal Backwater|C|NEO +#202|Tranquil Cove|C|NEO +#203|Thornwood Falls|C|NEO +#204|Swiftwater Cliffs|C|NEO +#205|Scoured Barrens|C|NEO +#206|Rugged Highlands|C|NEO +#207|Jungle Hollow|C|NEO +#208|Moonsnare Prototype|C|NEO +#209|Unstoppable Ogre|C|NEO +#210|Upriser Renegade|U|NEO +#211|Coiling Stalker|C|NEO +#212|Runaway Trash-Bot|U|NEO +#213|Walking Skyscraper|U|NEO +#214|Dragonspark Reactor|U|NEO +#215|Shrine Steward|C|NEO +#216|Tamiyo's Safekeeping|C|NEO +#217|Chainflail Centipede|C|NEO +#218|Brilliant Restoration|R|NEO +#219|Imperial Subduer|C|NEO +#220|When We Were Young|U|NEO +#221|Armguard Familiar|C|NEO +#222|Guardians of Oboro|C|NEO +#223|Invoke Despair|R|NEO +#224|Malicious Malfunction|U|NEO +#225|You Are Already Dead|C|NEO +#226|Akki Ember-Keeper|C|NEO +#227|Kami of Industry|C|NEO +#228|Sokenzan Smelter|U|NEO +#229|Heir of the Ancient Fang|C|NEO +#230|Eiganjo Uprising|R|NEO +#231|Satsuki, the Living Lore|R|NEO +#232|March of Swirling Mist|R|NEO +#233|Favor of Jukai|C|NEO +#234|Bearer of Memory|C|NEO +#235|Scrapyard Steelbreaker|C|NEO +#236|Explosive Entry|C|NEO +#237|Crackling Emergence|C|NEO +#238|Return to Action|C|NEO +#239|Reckoner's Bargain|C|NEO +#240|Kami of Restless Shadows|C|NEO +#241|Disruption Protocol|C|NEO +#242|Lucky Offering|C|NEO +#243|Kitsune Ace|C|NEO +#244|Dragonfly Suit|C|NEO +#245|Ancestral Katana|C|NEO +#246|Light the Way|C|NEO +#247|Saiba Trespassers|C|NEO +#248|March of Reckless Joy|R|NEO +#249|Historian's Wisdom|U|NEO +#250|Mechtitan Core|R|NEO +#251|Reito Sentinel|U|NEO +#252|Iron Apprentice|C|NEO +#253|Brute Suit|C|NEO +#254|Kindled Fury|C|NEO +#255|Gift of Wrath|C|NEO +#256|Undercity Scrounger|C|NEO +#257|Kaito's Pursuit|C|NEO +#258|Futurist Sentinel|C|NEO +#259|Regent's Authority|C|NEO +#260|Light-Paws, Emperor's Voice|R|NEO +#261|Spell Pierce|C|NEO +#262|Akki War Paint|C|NEO +#263|Mech Hangar|U|NEO +#264|Secluded Courtyard|U|NEO +#265|Thundersteel Colossus|C|NEO +#266|Dramatist's Puppet|C|NEO +#267|Automated Artificer|C|NEO +#268|Ambitious Assault|C|NEO +#269|Reckoner Shakedown|C|NEO +#270|Short Circuit|C|NEO +#271|Planar Incision|C|NEO +#272|The Shattered States Era|C|NEO #273|The Dragon-Kami Reborn|R|NEO #274|Anchor to Reality|U|NEO #275|Awakened Awareness|U|NEO #276|Discover the Impossible|U|NEO -#277|Enormous Energy Blade|U|NEO -#278|Akki War Paint|C|NEO +#277|Reality Heist|U|NEO +#278|Enormous Energy Blade|U|NEO #279|Invoke Calamity|R|NEO -#280|March of Burgeoning Life|R|NEO -#281|Mirror Box|R|NEO -#282|Lucky Offering|C|NEO +#280|Bronze Cudgels|U|NEO +#281|March of Burgeoning Life|R|NEO +#282|Mirror Box|R|NEO #283|Plains 1|C|NEO #284|Plains 2|C|NEO #285|Island 1|C|NEO diff --git a/forge-gui/res/editions/Game Day Promos.txt b/forge-gui/res/editions/Game Day Promos.txt index 54719ad2272..faabfac9b53 100644 --- a/forge-gui/res/editions/Game Day Promos.txt +++ b/forge-gui/res/editions/Game Day Promos.txt @@ -6,4 +6,6 @@ Type=Promo ScryfallCode=GDY [cards] +1 R Power Word Kill @Andreas Zafiratos +2 R Skyclave Apparition @Mila Pesic 3 M All-Seeing Arbiter @Nicholas Gregory diff --git a/forge-gui/res/editions/Shards of Alara.txt b/forge-gui/res/editions/Shards of Alara.txt index 28c1f2fdb84..1494f4ed136 100644 --- a/forge-gui/res/editions/Shards of Alara.txt +++ b/forge-gui/res/editions/Shards of Alara.txt @@ -6,261 +6,264 @@ Code2=ALA MciCode=ala Type=Expansion BoosterCovers=5 -Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand +Booster=10 Common:fromsheet("ALA cards"), 3 Uncommon:fromSheet("ALA cards"), 1 RareMythic:fromSheet("ALA cards"), 1 BasicLand:fromSheet("ALA cards") FatPack=8 FatPackExtraSlots=40 BasicLands ScryfallCode=ALA [cards] -63 R Ad Nauseam @Jeremy Jarvis -153 C Agony Warp @Dave Allsop -154 M Ajani Vengeant @Wayne Reynolds 1 C Akrasan Squire @Todd Lockwood -123 U Algae Gharial @Michael Ryan 2 U Angel's Herald @Greg Staples 3 U Angelic Benediction @Michael Komarck 4 C Angelsong @Sal Villagran -220 U Arcane Sanctum @Anthony Francisco +5 U Bant Battlemage @Donato Giancola +6 R Battlegrace Angel @Matt Stewart +7 R Cradle of Vitality @Trevor Hairsine +8 C Dispeller's Capsule @Franz Vohwinkel +9 M Elspeth, Knight-Errant @Volkan Baǵa +10 R Ethersworn Canonist @Izzy +11 C Excommunicate @Matt Stewart +12 C Guardians of Akrasa @Alan Pollack +13 C Gustrider Exuberant @Wayne Reynolds +14 R Invincible Hymn @Matt Stewart +15 C Knight of the Skyward Eye @Matt Stewart +16 R Knight of the White Orchid @Mark Zug +17 R Knight-Captain of Eos @Chris Rahn +18 C Marble Chalice @Howard Lyon +19 U Metallurgeon @Warren Mahy +20 C Oblivion Ring @Franz Vohwinkel +21 R Ranger of Eos @Volkan Baǵa +22 C Resounding Silence @Mark Zug +23 U Rockcaster Platoon @David Palumbo +24 C Sanctum Gargoyle @Shelly Wan +25 R Scourglass @Matt Cavotta +26 C Sighted-Caste Sorcerer @Chris Rahn +27 U Sigiled Paladin @Greg Staples +28 C Soul's Grace @Christopher Moeller +29 U Sunseed Nurturer @Steve Argyle +30 C Welkin Guide @David Palumbo +31 C Yoked Plowbeast @Steve Argyle +32 C Call to Heel @Randy Gallegos +33 C Cancel @David Palumbo +34 C Cathartic Adept @Carl Critchlow +35 C Cloudheath Drake @Izzy +36 C Coma Veil @Dan Scott +37 C Courier's Capsule @Andrew Murray +38 R Covenant of Minds @Dan Seagrave +39 U Dawnray Archer @Dan Dos Santos +40 U Esper Battlemage @Matt Cavotta +41 U Etherium Astrolabe @Michael Bruinsma +42 C Etherium Sculptor @Steven Belledin +43 U Fatestitcher @E. M. Gist +44 U Filigree Sages @Dan Scott +45 R Gather Specimens @Michael Bruinsma +46 C Jhessian Lookout @Donato Giancola +47 C Kathari Screecher @Pete Venters +48 R Kederekt Leviathan @Mark Hyzer +49 R Master of Etherium @Matt Cavotta +50 R Memory Erosion @Howard Lyon +51 R Mindlock Orb @rk post +52 C Outrider of Jhess @Alan Pollack +53 U Protomatter Powder @Francis Tsai +54 C Resounding Wave @Izzy +55 R Sharding Sphinx @Michael Bruinsma +56 R Skill Borrower @Shelly Wan +57 C Spell Snip @Michael Sutfin +58 U Sphinx's Herald @Dan Scott +59 C Steelclad Serpent @Carl Critchlow +60 M Tezzeret the Seeker @Anthony Francisco +61 C Tortoise Formation @Mark Zug +62 C Vectis Silencers @Steven Belledin +63 R Ad Nauseam @Jeremy Jarvis 64 R Archdemon of Unx @Dave Allsop 65 C Banewasp Affliction @Dave Allsop -5 U Bant Battlemage @Donato Giancola -155 U Bant Charm @Randy Gallegos -221 C Bant Panorama @Donato Giancola -6 R Battlegrace Angel @Matt Stewart -124 U Behemoth's Herald @Paolo Parente -156 C Blightning @Thomas M. Baxa 66 C Blister Beetle @Anthony S. Waters -157 U Blood Cultist @Karl Kopinski +67 C Bone Splinters @Cole Eastburn +68 U Corpse Connoisseur @Mark Hyzer +69 R Cunning Lethemancer @Paul Bonner +70 R Death Baron @Nils Hamm +71 C Deathgreeter @Dominick Domingo +72 U Demon's Herald @Karl Kopinski +73 C Dreg Reaver @Thomas M. Baxa +74 C Dregscape Zombie @Lars Grant-West +75 C Executioner's Capsule @Warren Mahy +76 U Fleshbag Marauder @Pete Venters +77 C Glaze Fiend @Joshua Hagler +78 U Grixis Battlemage @Nils Hamm +79 R Immortal Coil @Dan Scott +80 U Infest @Karl Kopinski +81 C Onyx Goblet @rk post +82 U Puppet Conjurer @Steven Belledin +83 C Resounding Scream @Thomas M. Baxa +84 R Salvage Titan @Anthony Francisco +85 U Scavenger Drake @Trevor Claxton +86 C Shadowfeed @Dave Kendall +87 C Shore Snapper @Dave Kendall +88 C Skeletal Kathari @Carl Critchlow +89 R Tar Fiend @Anthony S. Waters +90 C Undead Leotau @Carl Critchlow +91 R Vein Drinker @Lars Grant-West +92 C Viscera Dragger @Ralph Horsley 93 C Bloodpyre Elemental @Trevor Claxton 94 C Bloodthorn Taunter @Jesper Ejsing -67 C Bone Splinters @Cole Eastburn +95 R Caldera Hellion @Raymond Swanland +96 R Crucible of Fire @Dominick Domingo +97 C Dragon Fodder @Jaime Jones +98 U Dragon's Herald @Daarken +99 U Exuberant Firestoker @Zoltan Boros & Gabor Szikszai +100 R Flameblast Dragon @Jaime Jones +101 R Goblin Assault @Jaime Jones +102 C Goblin Mountaineer @Michael Ryan +103 R Hell's Thunder @Karl Kopinski +104 C Hissing Iguanar @Brandon Kitkouski +105 C Incurable Ogre @Carl Critchlow +106 U Jund Battlemage @Vance Kovacs +107 C Lightning Talons @Pete Venters +108 C Magma Spray @Jarreau Wimberly +109 R Predator Dragon @Raymond Swanland +110 C Resounding Thunder @Jon Foster +111 C Ridge Rannet @Jim Murray +112 U Rockslide Elemental @Joshua Hagler +113 U Scourge Devil @Dave Kendall +114 U Skeletonize @Karl Kopinski +115 C Soul's Fire @Wayne Reynolds +116 C Thorn-Thrash Viashino @Jon Foster +117 U Thunder-Thrash Elder @Brandon Kitkouski +118 C Viashino Skeleton @Cole Eastburn +119 R Vicious Shadows @Joshua Hagler +120 C Vithian Stinger @Dave Kendall +121 C Volcanic Submersion @Trevor Claxton +122 R Where Ancients Tread @Zoltan Boros & Gabor Szikszai +123 U Algae Gharial @Michael Ryan +124 U Behemoth's Herald @Paolo Parente +125 C Cavern Thoctar @Jean-Sébastien Rossbach +126 C Court Archers @Randy Gallegos +127 C Cylian Elf @Steve Prescott +128 C Druid of the Anima @Jim Murray +129 U Drumhunter @Jim Murray +130 C Elvish Visionary @D. Alexander Gregory +131 R Feral Hydra @Steve Prescott +132 C Gift of the Gargantuan @Jean-Sébastien Rossbach +133 C Godtoucher @Jesper Ejsing +134 C Jungle Weaver @Trevor Hairsine +135 R Keeper of Progenitus @Kev Walker +136 C Lush Growth @Jesper Ejsing +137 U Mighty Emergence @Steve Prescott +138 R Manaplasm @Daarken +139 C Mosstodon @Paolo Parente +140 R Mycoloth @Raymond Swanland +141 C Naturalize @Trevor Hairsine +142 U Naya Battlemage @Steve Argyle +143 R Ooze Garden @Anthony S. Waters +144 C Resounding Roar @Steve Prescott +145 U Rhox Charger @Chris Rahn +146 R Sacellum Godspeaker @Wayne Reynolds +147 C Savage Hunger @Trevor Claxton +148 R Skullmulcher @Michael Ryan +149 C Soul's Might @Kev Walker +150 R Spearbreaker Behemoth @Christopher Moeller +151 U Topan Ascetic @Sal Villagran +152 C Wild Nacatl @Wayne Reynolds +153 C Agony Warp @Dave Allsop +154 M Ajani Vengeant @Wayne Reynolds +155 U Bant Charm @Randy Gallegos +156 C Blightning @Thomas M. Baxa +157 U Blood Cultist @Karl Kopinski 158 C Branching Bolt @Vance Kovacs 159 R Brilliant Ultimatum @Anthony Francisco 160 R Broodmate Dragon @Vance Kovacs 161 U Bull Cerodon @Jesper Ejsing -95 R Caldera Hellion @Raymond Swanland -32 C Call to Heel @Randy Gallegos -33 C Cancel @David Palumbo 162 C Carrion Thrash @Jaime Jones -34 C Cathartic Adept @Carl Critchlow -125 C Cavern Thoctar @Jean-Sébastien Rossbach 163 R Clarion Ultimatum @Michael Komarck -35 C Cloudheath Drake @Izzy -36 C Coma Veil @Dan Scott -68 U Corpse Connoisseur @Mark Hyzer -37 C Courier's Capsule @Andrew Murray -126 C Court Archers @Randy Gallegos -38 R Covenant of Minds @Dan Seagrave -7 R Cradle of Vitality @Trevor Hairsine -96 R Crucible of Fire @Dominick Domingo 164 R Cruel Ultimatum @Ralph Horsley -222 U Crumbling Necropolis @Dave Kendall -69 R Cunning Lethemancer @Paul Bonner -127 C Cylian Elf @Steve Prescott -39 U Dawnray Archer @Dan Dos Santos -70 R Death Baron @Nils Hamm -71 C Deathgreeter @Dominick Domingo 165 C Deft Duelist @David Palumbo -72 U Demon's Herald @Karl Kopinski -8 C Dispeller's Capsule @Franz Vohwinkel -97 C Dragon Fodder @Jaime Jones -98 U Dragon's Herald @Daarken -73 C Dreg Reaver @Thomas M. Baxa -74 C Dregscape Zombie @Lars Grant-West -128 C Druid of the Anima @Jim Murray -129 U Drumhunter @Jim Murray -9 M Elspeth, Knight-Errant @Volkan Baǵa -130 C Elvish Visionary @D. Alexander Gregory 166 M Empyrial Archangel @Greg Staples -40 U Esper Battlemage @Matt Cavotta 167 U Esper Charm @Michael Bruinsma -223 C Esper Panorama @Franz Vohwinkel -41 U Etherium Astrolabe @Michael Bruinsma -42 C Etherium Sculptor @Steven Belledin -10 R Ethersworn Canonist @Izzy -11 C Excommunicate @Matt Stewart -75 C Executioner's Capsule @Warren Mahy -99 U Exuberant Firestoker @Zoltan Boros & Gabor Szikszai -43 U Fatestitcher @E. M. Gist -131 R Feral Hydra @Steve Prescott -44 U Filigree Sages @Dan Scott 168 U Fire-Field Ogre @Mitch Cotie -100 R Flameblast Dragon @Jaime Jones -76 U Fleshbag Marauder @Pete Venters -246 L Forest @Aleksi Briclot -247 L Forest @Zoltan Boros & Gabor Szikszai -248 L Forest @Zoltan Boros & Gabor Szikszai -249 L Forest @Michael Komarck -45 R Gather Specimens @Michael Bruinsma -132 C Gift of the Gargantuan @Jean-Sébastien Rossbach -77 C Glaze Fiend @Joshua Hagler -101 R Goblin Assault @Jaime Jones 169 C Goblin Deathraiders @Raymond Swanland -102 C Goblin Mountaineer @Michael Ryan 170 M Godsire @Jim Murray -133 C Godtoucher @Jesper Ejsing -78 U Grixis Battlemage @Nils Hamm 171 U Grixis Charm @Lars Grant-West -224 C Grixis Panorama @Nils Hamm -12 C Guardians of Akrasa @Alan Pollack -13 C Gustrider Exuberant @Wayne Reynolds -103 R Hell's Thunder @Karl Kopinski 172 M Hellkite Overlord @Justin Sweet 173 C Hindering Light @Chris Rahn -104 C Hissing Iguanar @Brandon Kitkouski -79 R Immortal Coil @Dan Scott -105 C Incurable Ogre @Carl Critchlow -80 U Infest @Karl Kopinski -14 R Invincible Hymn @Matt Stewart -234 L Island @Michael Komarck -235 L Island @Chippy -236 L Island @Chippy -237 L Island @Mark Tedin 174 U Jhessian Infiltrator @Donato Giancola -46 C Jhessian Lookout @Donato Giancola -106 U Jund Battlemage @Vance Kovacs 175 U Jund Charm @Brandon Kitkouski -225 C Jund Panorama @Jaime Jones -226 U Jungle Shrine @Wayne Reynolds -134 C Jungle Weaver @Trevor Hairsine -47 C Kathari Screecher @Pete Venters 176 C Kederekt Creeper @Mark Hyzer -48 R Kederekt Leviathan @Mark Hyzer -135 R Keeper of Progenitus @Kev Walker 177 U Kiss of the Amesha @Todd Lockwood -15 C Knight of the Skyward Eye @Matt Stewart -16 R Knight of the White Orchid @Mark Zug -17 R Knight-Captain of Eos @Chris Rahn 178 M Kresh the Bloodbraided @Raymond Swanland -210 M Lich's Mirror @Ash Wood -107 C Lightning Talons @Pete Venters -136 C Lush Growth @Jesper Ejsing -108 C Magma Spray @Jarreau Wimberly -138 R Manaplasm @Daarken -18 C Marble Chalice @Howard Lyon -49 R Master of Etherium @Matt Cavotta 179 M Mayael the Anima @Jason Chan -50 R Memory Erosion @Howard Lyon -19 U Metallurgeon @Warren Mahy -137 U Mighty Emergence @Steve Prescott -51 R Mindlock Orb @rk post -211 R Minion Reflector @Mark Tedin -139 C Mosstodon @Paolo Parente -242 L Mountain @Mark Tedin -243 L Mountain @Aleksi Briclot -244 L Mountain @Aleksi Briclot -245 L Mountain @Zoltan Boros & Gabor Szikszai -140 R Mycoloth @Raymond Swanland -141 C Naturalize @Trevor Hairsine -142 U Naya Battlemage @Steve Argyle 180 U Naya Charm @Jesper Ejsing -227 C Naya Panorama @Hideaki Takamura 181 U Necrogenesis @Trevor Claxton +182 M Prince of Thralls @Paul Bonner +183 R Punish Ignorance @Shelly Wan +184 U Qasali Ambusher @Kev Walker +185 M Rafiq of the Many @Michael Komarck +186 C Rakeclaw Gargantuan @Jesper Ejsing +187 R Realm Razer @Hideaki Takamura +188 U Rhox War Monk @Dan Dos Santos +189 C Rip-Clan Crasher @Justin Sweet +190 U Sangrite Surge @Jarreau Wimberly +191 M Sarkhan Vol @Daarken +192 R Sedraxis Specter @Cole Eastburn +193 M Sedris, the Traitor King @Paul Bonner +194 M Sharuum the Hegemon @Izzy +195 C Sigil Blessing @Matt Stewart +196 M Sphinx Sovereign @Chippy +197 U Sprouting Thrinax @Jarreau Wimberly +198 C Steward of Valeron @Greg Staples +199 R Stoic Angel @Volkan Baǵa +200 U Swerve @Karl Kopinski +201 U Thoughtcutter Agent @Cyril Van Der Haegen +202 U Tidehollow Sculler @rk post +203 C Tidehollow Strix @Cyril Van Der Haegen +204 R Titanic Ultimatum @Steve Prescott +205 U Tower Gargoyle @Matt Cavotta +206 R Violent Ultimatum @Raymond Swanland +207 C Waveskimmer Aven @Mark Zug +208 C Windwright Mage @Chippy +209 U Woolly Thoctar @Wayne Reynolds +210 M Lich's Mirror @Ash Wood +211 R Minion Reflector @Mark Tedin 212 C Obelisk of Bant @David Palumbo 213 C Obelisk of Esper @Francis Tsai 214 C Obelisk of Grixis @Nils Hamm 215 C Obelisk of Jund @Brandon Kitkouski 216 C Obelisk of Naya @Steve Prescott -20 C Oblivion Ring @Franz Vohwinkel -81 C Onyx Goblet @rk post -143 R Ooze Garden @Anthony S. Waters -52 C Outrider of Jhess @Alan Pollack +217 R Quietus Spike @Mark Brill +218 C Relic of Progenitus @Jean-Sébastien Rossbach +219 R Sigil of Distinction @Alan Pollack +220 U Arcane Sanctum @Anthony Francisco +221 C Bant Panorama @Donato Giancola +222 U Crumbling Necropolis @Dave Kendall +223 C Esper Panorama @Franz Vohwinkel +224 C Grixis Panorama @Nils Hamm +225 C Jund Panorama @Jaime Jones +226 U Jungle Shrine @Wayne Reynolds +227 C Naya Panorama @Hideaki Takamura +228 U Savage Lands @Vance Kovacs +229 U Seaside Citadel @Volkan Baǵa 230 L Plains @Zoltan Boros & Gabor Szikszai 231 L Plains @Michael Komarck 232 L Plains @Michael Komarck 233 L Plains @Chippy -109 R Predator Dragon @Raymond Swanland -182 M Prince of Thralls @Paul Bonner -53 U Protomatter Powder @Francis Tsai -183 R Punish Ignorance @Shelly Wan -82 U Puppet Conjurer @Steven Belledin -184 U Qasali Ambusher @Kev Walker -217 R Quietus Spike @Mark Brill -185 M Rafiq of the Many @Michael Komarck -186 C Rakeclaw Gargantuan @Jesper Ejsing -21 R Ranger of Eos @Volkan Baǵa -187 R Realm Razer @Hideaki Takamura -218 C Relic of Progenitus @Jean-Sébastien Rossbach -144 C Resounding Roar @Steve Prescott -83 C Resounding Scream @Thomas M. Baxa -22 C Resounding Silence @Mark Zug -110 C Resounding Thunder @Jon Foster -54 C Resounding Wave @Izzy -145 U Rhox Charger @Chris Rahn -188 U Rhox War Monk @Dan Dos Santos -111 C Ridge Rannet @Jim Murray -189 C Rip-Clan Crasher @Justin Sweet -23 U Rockcaster Platoon @David Palumbo -112 U Rockslide Elemental @Joshua Hagler -146 R Sacellum Godspeaker @Wayne Reynolds -84 R Salvage Titan @Anthony Francisco -24 C Sanctum Gargoyle @Shelly Wan -190 U Sangrite Surge @Jarreau Wimberly -191 M Sarkhan Vol @Daarken -147 C Savage Hunger @Trevor Claxton -228 U Savage Lands @Vance Kovacs -85 U Scavenger Drake @Trevor Claxton -113 U Scourge Devil @Dave Kendall -25 R Scourglass @Matt Cavotta -229 U Seaside Citadel @Volkan Baǵa -192 R Sedraxis Specter @Cole Eastburn -193 M Sedris, the Traitor King @Paul Bonner -86 C Shadowfeed @Dave Kendall -55 R Sharding Sphinx @Michael Bruinsma -194 M Sharuum the Hegemon @Izzy -87 C Shore Snapper @Dave Kendall -26 C Sighted-Caste Sorcerer @Chris Rahn -195 C Sigil Blessing @Matt Stewart -219 R Sigil of Distinction @Alan Pollack -27 U Sigiled Paladin @Greg Staples -88 C Skeletal Kathari @Carl Critchlow -114 U Skeletonize @Karl Kopinski -56 R Skill Borrower @Shelly Wan -148 R Skullmulcher @Michael Ryan -115 C Soul's Fire @Wayne Reynolds -28 C Soul's Grace @Christopher Moeller -149 C Soul's Might @Kev Walker -150 R Spearbreaker Behemoth @Christopher Moeller -57 C Spell Snip @Michael Sutfin -196 M Sphinx Sovereign @Chippy -58 U Sphinx's Herald @Dan Scott -197 U Sprouting Thrinax @Jarreau Wimberly -59 C Steelclad Serpent @Carl Critchlow -198 C Steward of Valeron @Greg Staples -199 R Stoic Angel @Volkan Baǵa -29 U Sunseed Nurturer @Steve Argyle +234 L Island @Michael Komarck +235 L Island @Chippy +236 L Island @Chippy +237 L Island @Mark Tedin 238 L Swamp @Chippy 239 L Swamp @Mark Tedin 240 L Swamp @Mark Tedin 241 L Swamp @Aleksi Briclot -200 U Swerve @Karl Kopinski -89 R Tar Fiend @Anthony S. Waters -60 M Tezzeret the Seeker @Anthony Francisco -116 C Thorn-Thrash Viashino @Jon Foster -201 U Thoughtcutter Agent @Cyril Van Der Haegen -117 U Thunder-Thrash Elder @Brandon Kitkouski -202 U Tidehollow Sculler @rk post -203 C Tidehollow Strix @Cyril Van Der Haegen -204 R Titanic Ultimatum @Steve Prescott -151 U Topan Ascetic @Sal Villagran -61 C Tortoise Formation @Mark Zug -205 U Tower Gargoyle @Matt Cavotta -90 C Undead Leotau @Carl Critchlow -62 C Vectis Silencers @Steven Belledin -91 R Vein Drinker @Lars Grant-West -118 C Viashino Skeleton @Cole Eastburn -119 R Vicious Shadows @Joshua Hagler -206 R Violent Ultimatum @Raymond Swanland -92 C Viscera Dragger @Ralph Horsley -120 C Vithian Stinger @Dave Kendall -121 C Volcanic Submersion @Trevor Claxton -207 C Waveskimmer Aven @Mark Zug -30 C Welkin Guide @David Palumbo -122 R Where Ancients Tread @Zoltan Boros & Gabor Szikszai -152 C Wild Nacatl @Wayne Reynolds -208 C Windwright Mage @Chippy -209 U Woolly Thoctar @Wayne Reynolds -31 C Yoked Plowbeast @Steve Argyle +242 L Mountain @Mark Tedin +243 L Mountain @Aleksi Briclot +244 L Mountain @Aleksi Briclot +245 L Mountain @Zoltan Boros & Gabor Szikszai +246 L Forest @Aleksi Briclot +247 L Forest @Zoltan Boros & Gabor Szikszai +248 L Forest @Zoltan Boros & Gabor Szikszai +249 L Forest @Michael Komarck + +[showcase] +250 M Rafiq of the Many @Meel Tamphanon [tokens] w_1_1_soldier diff --git a/forge-gui/res/editions/Streets of New Capenna.txt b/forge-gui/res/editions/Streets of New Capenna.txt index 8056bb3b093..d8a5860bc89 100644 --- a/forge-gui/res/editions/Streets of New Capenna.txt +++ b/forge-gui/res/editions/Streets of New Capenna.txt @@ -5,6 +5,10 @@ Name=Streets of New Capenna Code2=SNC MciCode=snc Type=Expansion +BoosterCovers=3 +Booster=10 Common:fromsheet("SNC cards"), 3 Uncommon:fromSheet("SNC cards"), 1 RareMythic:fromSheet("SNC cards"), 1 fromSheet("SNC lands") +Prerelease=6 Boosters, 1 RareMythic+ +BoosterBox=36 ScryfallCode=SNC [cards] @@ -289,6 +293,8 @@ ScryfallCode=SNC 279 L Mountain @Ann-Sophie De Steur 280 L Forest @Matteo Bassini 281 L Forest @W.Flemming + +[borderless] 282 M Elspeth Resplendent @Tom Roberts 283 M Vivien on the Hunt @Tom Roberts 284 M Ob Nixilis, the Adversary @Tom Roberts @@ -303,6 +309,8 @@ ScryfallCode=SNC 293 R Spara's Headquarters @Dominik Mayer 294 R Xander's Lounge @Dominik Mayer 295 R Ziatora's Proving Ground @Dominik Mayer + +[showcase] 296 U Brazen Upstart @Samy Halim 297 R Brokers Ascendancy @Shawn Pagels 298 U Brokers Charm @Jérémie Solomon @@ -413,6 +421,17 @@ ScryfallCode=SNC 403 R Void Rend @Krharts 404 M Ziatora, the Incinerator @Scott M. Fischer 405 R Ziatora's Envoy @Olga Tereshenko +441 M Elspeth Resplendent @Krharts +442 R Giada, Font of Hope @Scott M. Fischer +443 M Sanctuary Warden @Julie Dillon +444 R Errant, Street Artist @Alix Branwyn +445 R Tenacious Underdog @Jason A. Engle +446 M Urabrask, Heretic Praetor @Igor Kieryluk +447 M Vivien on the Hunt @Jason A. Engle +448 M Ob Nixilis, the Adversary @Igor Kieryluk +449 R Scheming Fence @Artur Treffner + +[extended art] 406 R Depopulate @Jokubas Uogintas 407 R Extraction Specialist @Irina Nordsol 408 R Mysterious Limousine @Dan Scott @@ -448,15 +467,8 @@ ScryfallCode=SNC 438 R Getaway Car @Donato Giancola 439 M Luxior, Giada's Gift @Volkan Baǵa 440 R Unlicensed Hearse @Chris Seaman -441 M Elspeth Resplendent @Krharts -442 R Giada, Font of Hope @Scott M. Fischer -443 M Sanctuary Warden @Julie Dillon -444 R Errant, Street Artist @Alix Branwyn -445 R Tenacious Underdog @Jason A. Engle -446 M Urabrask, Heretic Praetor @Igor Kieryluk -447 M Vivien on the Hunt @Jason A. Engle -448 M Ob Nixilis, the Adversary @Igor Kieryluk -449 R Scheming Fence @Artur Treffner + +[box topper] 450 R Gala Greeters @Fay Dalton 451 R Gala Greeters @Song Qijin 452 R Gala Greeters @SENSEN @@ -468,7 +480,11 @@ ScryfallCode=SNC 458 R Gala Greeters @Daniel Correia 459 R Gala Greeters @Olga Tereshenko 460 R Gala Greeters @Voyager Illustration + +[buy a box] 461 R Jaxis, the Troublemaker @Taras Susak + +[promo] 462 R Mysterious Limousine @Hector Ortiz 463 U Rumor Gatherer @Simon Dominic 464 U An Offer You Can't Refuse @Dallas Williams @@ -476,4 +492,26 @@ ScryfallCode=SNC 466 C Light 'Em Up @Tony Foti 467 U Courier's Briefcase @Josu Hernaiz +[lands] +2 Plains|SNC|1 +2 Plains|SNC|2 +1 Plains|SNC|3 +1 Plains|SNC|4 +2 Island|SNC|1 +2 Island|SNC|2 +1 Island|SNC|3 +1 Island|SNC|4 +2 Swamp|SNC|1 +2 Swamp|SNC|2 +1 Swamp|SNC|3 +1 Swamp|SNC|4 +2 Mountain|SNC|1 +2 Mountain|SNC|2 +1 Mountain|SNC|3 +1 Mountain|SNC|4 +2 Forest|SNC|1 +2 Forest|SNC|2 +1 Forest|SNC|3 +1 Forest|SNC|4 + [tokens] diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index eb4c19dc1c1..26fb11dd58b 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -1904,6 +1904,7 @@ lblChooseProliferateTarget=Wähle eine beliebige Anzahl bleibender Karten und/od lblDoYouWantPutCounter=Möchtest du die Marke legen? lblChooseACreatureWithLeastToughness=Wähle eine Kreatur mit der geringsten Widerstandskraft lblSelectCounterTypeAddTo=Wähle Markentyp zum Hinzufügen +lblSelectCounterType=Wähle Markentyp lblHowManyCountersThis=Wie viele Marken möchtest du auf {0} legen? lblChooseAnOpponent=Wähle Gegner lblDoYouWantPutTargetP1P1CountersOnCard=Möchtest du {0} +1/+1-Marken auf {1} legen? diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index 0f033140032..c91f20e5b62 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -1905,6 +1905,7 @@ lblChooseProliferateTarget=Choose any number of permanents and/or players for pr lblDoYouWantPutCounter=Do you want to put the counter? lblChooseACreatureWithLeastToughness=Choose a creature with the least toughness lblSelectCounterTypeAddTo=Select counter type to add to +lblSelectCounterType=Select counter type lblHowManyCountersThis=How many counters do you want to put on {0}? lblChooseAnOpponent=Choose an opponent lblDoYouWantPutTargetP1P1CountersOnCard=Do you want to put {0} +1/+1 counters on {1}? diff --git a/forge-gui/res/languages/es-ES.properties b/forge-gui/res/languages/es-ES.properties index 28d17684407..065b70ac98d 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -1903,6 +1903,7 @@ lblChooseProliferateTarget=Elige cualquier número de permanentes y/o jugadores lblDoYouWantPutCounter=¿Quieres poner el contador? lblChooseACreatureWithLeastToughness=Elige una criatura con la menor resistencia lblSelectCounterTypeAddTo=Selecciona el tipo de contador para añadirlo a +lblSelectCounterType=Selecciona el tipo de contador lblHowManyCountersThis=¿Cuántos contadores quieres poner en {0}? lblChooseAnOpponent=Elige un adversario lblDoYouWantPutTargetP1P1CountersOnCard=¿Quieres poner {0} contadores +1/+1 en {1}? diff --git a/forge-gui/res/languages/it-IT.properties b/forge-gui/res/languages/it-IT.properties index 0422eef7ddd..3e8ef304d68 100644 --- a/forge-gui/res/languages/it-IT.properties +++ b/forge-gui/res/languages/it-IT.properties @@ -1902,6 +1902,7 @@ lblChooseProliferateTarget=Scegli un numero qualsiasi di permanenti e/o giocator lblDoYouWantPutCounter=Vuoi aggiungere il segnalino? lblChooseACreatureWithLeastToughness=Scegli una creatura con la minor costituzione lblSelectCounterTypeAddTo=Scegli il tipo di segnalino da aggiungere +lblSelectCounterType=Scegli il tipo di segnalino lblHowManyCountersThis=Quanti segnalini vuoi aggiungere a {0}? lblChooseAnOpponent=Scegli un avversario lblDoYouWantPutTargetP1P1CountersOnCard=Vuoi aggiungere {0} segnalino/i +1/+1 a {1}? diff --git a/forge-gui/res/languages/ja-JP.properties b/forge-gui/res/languages/ja-JP.properties index 80432daccfc..702f210f30f 100644 --- a/forge-gui/res/languages/ja-JP.properties +++ b/forge-gui/res/languages/ja-JP.properties @@ -1902,6 +1902,7 @@ lblChooseProliferateTarget=増殖を行う望む数のパーマネントやプ lblDoYouWantPutCounter=カウンターを置きますか? lblChooseACreatureWithLeastToughness=タフネスが一番低いクリーチャーを選ぶ lblSelectCounterTypeAddTo=置けるカウンターの種類を選ぶ +lblSelectCounterType=Select counter type lblHowManyCounters={0}に何個のカウンターを置きますか? lblChooseAnOpponent=対戦相手一人を選ぶ lblDoYouWantPutTargetP1P1CountersOnCard={1}の上に {0}個の +1/+1 カウンターを置きますか? diff --git a/forge-gui/res/languages/pt-BR.properties b/forge-gui/res/languages/pt-BR.properties index f0fd321cde0..3102e2e3d4b 100644 --- a/forge-gui/res/languages/pt-BR.properties +++ b/forge-gui/res/languages/pt-BR.properties @@ -1964,6 +1964,7 @@ lblChooseProliferateTarget=Escolha qualquer número de permanentes e/ou jogadore lblDoYouWantPutCounter=Você quer colocar o marcador? lblChooseACreatureWithLeastToughness=Escolha uma criatura com a menor resistência lblSelectCounterTypeAddTo=Selecione o tipo de marcador para adicionar a +lblSelectCounterType=Selecione o tipo de marcador lblHowManyCountersThis=Quantos marcadores você quer colocar em {0}? lblChooseAnOpponent=Escolha um adversário lblDoYouWantPutTargetP1P1CountersOnCard=Você quer colocar {0} +1/+1 marcadores em {1}? diff --git a/forge-gui/res/languages/zh-CN.properties b/forge-gui/res/languages/zh-CN.properties index 16c60fe1268..c5b578306a7 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -1906,6 +1906,7 @@ lblChooseProliferateTarget=选择任意数量的永久物和或牌手进行增 lblDoYouWantPutCounter=你想要放置指示物吗? lblChooseACreatureWithLeastToughness=选择防御力最小的生物 lblSelectCounterTypeAddTo=选择指示物类型以添加到 +lblSelectCounterType=Select counter type lblHowManyCountersThis=你想要在{0}上放置多少个指示物? lblChooseAnOpponent=选择一个对手 lblDoYouWantPutTargetP1P1CountersOnCard=你想要放置{0}个+1+1指示物到{1}吗? diff --git a/forge-gui/res/tokenscripts/b_2_2_rogue.txt b/forge-gui/res/tokenscripts/b_2_2_rogue.txt new file mode 100644 index 00000000000..6f970d995c0 --- /dev/null +++ b/forge-gui/res/tokenscripts/b_2_2_rogue.txt @@ -0,0 +1,6 @@ +Name:Rogue Token +ManaCost:no cost +Types:Creature Rogue +Colors:black +PT:2/2 +Oracle: