diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java index 465f6c86b91..9c1cc7cd8aa 100644 --- a/forge-ai/src/main/java/forge/ai/AiController.java +++ b/forge-ai/src/main/java/forge/ai/AiController.java @@ -814,9 +814,6 @@ public class AiController { } public AiPlayDecision canPlaySa(SpellAbility sa) { - final Card card = sa.getHostCard(); - final boolean isRightTiming = sa.canCastTiming(player); - if (!checkAiSpecificRestrictions(sa)) { return AiPlayDecision.CantPlayAi; } @@ -824,6 +821,12 @@ public class AiController { return canPlaySa(((WrappedAbility) sa).getWrappedAbility()); } + if (!sa.canCastTiming(player)) { + return AiPlayDecision.AnotherTime; + } + + final Card card = sa.getHostCard(); + // Trying to play a card that has Buyback without a Buyback cost, look for possible additional considerations if (getBooleanProperty(AiProps.TRY_TO_PRESERVE_BUYBACK_SPELLS)) { if (card.hasKeyword(Keyword.BUYBACK) && !sa.isBuyBackAbility() && !canPlaySpellWithoutBuyback(card, sa)) { @@ -898,9 +901,6 @@ public class AiController { return AiPlayDecision.AnotherTime; } if (sa instanceof SpellPermanent) { - if (!isRightTiming) { - return AiPlayDecision.AnotherTime; - } return canPlayFromEffectAI((SpellPermanent)sa, false, true); } if (sa.usesTargeting()) { @@ -912,18 +912,13 @@ public class AiController { } } if (sa instanceof Spell) { - if (ComputerUtil.getDamageForPlaying(player, sa) >= player.getLife() - && !player.cantLoseForZeroOrLessLife() && player.canLoseLife()) { + if (!player.cantLoseForZeroOrLessLife() && player.canLoseLife() && + ComputerUtil.getDamageForPlaying(player, sa) >= player.getLife()) { return AiPlayDecision.CurseEffects; } - if (!isRightTiming) { - return AiPlayDecision.AnotherTime; - } return canPlaySpellBasic(card, sa); } - if (!isRightTiming) { - return AiPlayDecision.AnotherTime; - } + return AiPlayDecision.WillPlay; } @@ -1411,8 +1406,8 @@ public class AiController { if (!checkETBEffects(card, spell, null)) { return AiPlayDecision.BadEtbEffects; } - if (damage + ComputerUtil.getDamageFromETB(player, card) >= player.getLife() - && !player.cantLoseForZeroOrLessLife() && player.canLoseLife()) { + if (!player.cantLoseForZeroOrLessLife() && player.canLoseLife() + && damage + ComputerUtil.getDamageFromETB(player, card) >= player.getLife()) { return AiPlayDecision.BadEtbEffects; } } @@ -1496,35 +1491,33 @@ public class AiController { if (landsWannaPlay != null && !landsWannaPlay.isEmpty()) { // TODO search for other land it might want to play? Card land = chooseBestLandToPlay(landsWannaPlay); - if (ComputerUtil.getDamageFromETB(player, land) < player.getLife() || !player.canLoseLife() - || player.cantLoseForZeroOrLessLife() ) { - if (!game.getPhaseHandler().is(PhaseType.MAIN1) || !isSafeToHoldLandDropForMain2(land)) { - final List abilities = Lists.newArrayList(); + if ((!player.canLoseLife() || player.cantLoseForZeroOrLessLife() || ComputerUtil.getDamageFromETB(player, land) < player.getLife()) + && (!game.getPhaseHandler().is(PhaseType.MAIN1) || !isSafeToHoldLandDropForMain2(land))) { + final List abilities = Lists.newArrayList(); - // TODO extend this logic to evaluate MDFC with both sides land - // this can only happen if its a MDFC land - if (!land.isLand()) { - land.setState(CardStateName.Modal, true); - land.setBackSide(true); - } + // TODO extend this logic to evaluate MDFC with both sides land + // this can only happen if its a MDFC land + if (!land.isLand()) { + land.setState(CardStateName.Modal, true); + land.setBackSide(true); + } - LandAbility la = new LandAbility(land, player, null); + LandAbility la = new LandAbility(land, player, null); + la.setCardState(land.getCurrentState()); + if (la.canPlay()) { + abilities.add(la); + } + + // add mayPlay option + for (CardPlayOption o : land.mayPlay(player)) { + la = new LandAbility(land, player, o.getAbility()); la.setCardState(land.getCurrentState()); if (la.canPlay()) { abilities.add(la); } - - // add mayPlay option - for (CardPlayOption o : land.mayPlay(player)) { - la = new LandAbility(land, player, o.getAbility()); - la.setCardState(land.getCurrentState()); - if (la.canPlay()) { - abilities.add(la); - } - } - if (!abilities.isEmpty()) { - return abilities; - } + } + if (!abilities.isEmpty()) { + return abilities; } } } diff --git a/forge-ai/src/main/java/forge/ai/ability/DamageAiBase.java b/forge-ai/src/main/java/forge/ai/ability/DamageAiBase.java index 748cdb44d46..dc2a3632c1f 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DamageAiBase.java +++ b/forge-ai/src/main/java/forge/ai/ability/DamageAiBase.java @@ -100,20 +100,19 @@ public abstract class DamageAiBase extends SpellAbilityAi { return false; } + if (!enemy.canLoseLife()) { + return false; + } + if (!noPrevention) { restDamage = ComputerUtilCombat.predictDamageTo(enemy, restDamage, hostcard, false); } else { restDamage = enemy.staticReplaceDamage(restDamage, hostcard, false); } - if (restDamage == 0) { return false; } - if (!enemy.canLoseLife()) { - return false; - } - final CardCollectionView hand = comp.getCardsIn(ZoneType.Hand); if ((enemy.getLife() - restDamage) < 5) { diff --git a/forge-ai/src/main/java/forge/ai/ability/MillAi.java b/forge-ai/src/main/java/forge/ai/ability/MillAi.java index 05c813613e2..0b5c53382a5 100644 --- a/forge-ai/src/main/java/forge/ai/ability/MillAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/MillAi.java @@ -39,8 +39,6 @@ public class MillAi extends SpellAbilityAi { } else if (aiLogic.equals("LilianaMill")) { // Only mill if a "Raise Dead" target is available, in case of control decks with few creatures return CardLists.filter(ai.getCardsIn(ZoneType.Graveyard), CardPredicates.Presets.CREATURES).size() >= 1; - } else if (aiLogic.equals("Rebirth")) { - return ai.getLife() <= 8; } return true; } diff --git a/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java b/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java index 63f37a8b06c..ac5432613c7 100644 --- a/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java +++ b/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java @@ -91,6 +91,15 @@ public class GameCopier { newPlayer.setLifeLostLastTurn(origPlayer.getLifeLostLastTurn()); newPlayer.setLifeLostThisTurn(origPlayer.getLifeLostThisTurn()); newPlayer.setLifeGainedThisTurn(origPlayer.getLifeGainedThisTurn()); + newPlayer.setBlessing(origPlayer.hasBlessing()); + newPlayer.setRevolt(origPlayer.hasRevolt()); + newPlayer.setLibrarySearched(origPlayer.getLibrarySearched()); + newPlayer.setSpellsCastLastTurn(origPlayer.getSpellsCastLastTurn()); + for (int j = 0; j < origPlayer.getSpellsCastThisTurn(); j++) { + newPlayer.addSpellCastThisTurn(); + } + newPlayer.setMaxHandSize(origPlayer.getMaxHandSize()); + newPlayer.setUnlimitedHandSize(origPlayer.isUnlimitedHandSize()); // TODO creatureAttackedThisTurn for (Mana m : origPlayer.getManaPool()) { newPlayer.getManaPool().addMana(m, false); @@ -117,6 +126,20 @@ public class GameCopier { p.setCommanders(commanders); ((PlayerZoneBattlefield) p.getZone(ZoneType.Battlefield)).setTriggers(true); } + for (Player origPlayer : playerMap.keySet()) { + Player newPlayer = playerMap.get(origPlayer); + for (final Card c : origPlayer.getCommanders()) { + Card newCommander = gameObjectMap.map(c); + int castTimes = origPlayer.getCommanderCast(c); + for (int i = 0; i < castTimes; i++) { + newPlayer.incCommanderCast(newCommander); + } + } + for (Map.Entry entry : origPlayer.getCommanderDamage()) { + Card newCommander = gameObjectMap.map(entry.getKey()); + newPlayer.addCommanderDamage(newCommander, entry.getValue()); + } + } newGame.getTriggerHandler().clearSuppression(TriggerType.ChangesZone); for (Card c : newGame.getCardsInGame()) { @@ -216,9 +239,21 @@ public class GameCopier { // TODO countersAddedThisTurn + if (origGame.getStartingPlayer() != null) { + newGame.setStartingPlayer(playerMap.get(origGame.getStartingPlayer())); + } if (origGame.getMonarch() != null) { newGame.setMonarch(playerMap.get(origGame.getMonarch())); } + if (origGame.getMonarchBeginTurn() != null) { + newGame.setMonarchBeginTurn(playerMap.get(origGame.getMonarchBeginTurn())); + } + if (origGame.getHasInitiative() != null) { + newGame.setHasInitiative(playerMap.get(origGame.getHasInitiative())); + } + if (origGame.getDayTime() != null) { + newGame.setDayTime(origGame.getDayTime()); + } for (ZoneType zone : ZONES) { for (Card card : origGame.getCardsIn(zone)) { diff --git a/forge-core/src/main/java/forge/deck/generation/DeckGeneratorBase.java b/forge-core/src/main/java/forge/deck/generation/DeckGeneratorBase.java index 3bf67c08cb7..87bb8b48e0a 100644 --- a/forge-core/src/main/java/forge/deck/generation/DeckGeneratorBase.java +++ b/forge-core/src/main/java/forge/deck/generation/DeckGeneratorBase.java @@ -88,7 +88,7 @@ public abstract class DeckGeneratorBase { protected void addCreaturesAndSpells(int size, List> cmcLevels, boolean forAi) { trace.append("Building deck of ").append(size).append("cards\n"); - + final Iterable cards = selectCardsOfMatchingColorForPlayer(forAi); // build subsets based on type @@ -102,7 +102,7 @@ public abstract class DeckGeneratorBase { final int spellCnt = (int) Math.ceil(getSpellPercentage() * size); trace.append("Spells to add:").append(spellCnt).append("\n"); addCmcAdjusted(spells, spellCnt, cmcLevels); - + trace.append(String.format("Current deck size: %d... should be %f%n", tDeck.countAll(), size * (getCreaturePercentage() + getSpellPercentage()))); } @@ -258,7 +258,7 @@ public abstract class DeckGeneratorBase { for (ImmutablePair pair : cmcLevels) { totalWeight += pair.getRight(); } - + float variability = 0.6f; // if set to 1, you'll get minimum cards to choose from float desiredWeight = (float)cnt / ( maxDuplicates * variability ); float desiredOverTotal = desiredWeight / totalWeight; diff --git a/forge-core/src/main/java/forge/util/ImageUtil.java b/forge-core/src/main/java/forge/util/ImageUtil.java index b2058364019..d30180b432e 100644 --- a/forge-core/src/main/java/forge/util/ImageUtil.java +++ b/forge-core/src/main/java/forge/util/ImageUtil.java @@ -18,14 +18,45 @@ public class ImageUtil { if (imageKey == null || imageKey.length() < 2) { return null; } + if (imageKey.startsWith(ImageKeys.CARD_PREFIX)) + key = imageKey.substring(ImageKeys.CARD_PREFIX.length()); + else if (imageKey.startsWith(ImageKeys.TOKEN_PREFIX)) + key = imageKey.substring(ImageKeys.TOKEN_PREFIX.length()); + else if (imageKey.startsWith(ImageKeys.ICON_PREFIX)) + key = imageKey.substring(ImageKeys.ICON_PREFIX.length()); + else if (imageKey.startsWith(ImageKeys.BOOSTER_PREFIX)) + key = imageKey.substring(ImageKeys.BOOSTER_PREFIX.length()); + else if (imageKey.startsWith(ImageKeys.FATPACK_PREFIX)) + key = imageKey.substring(ImageKeys.FATPACK_PREFIX.length()); + else if (imageKey.startsWith(ImageKeys.BOOSTERBOX_PREFIX)) + key = imageKey.substring(ImageKeys.BOOSTERBOX_PREFIX.length()); + else if (imageKey.startsWith(ImageKeys.PRECON_PREFIX)) + key = imageKey.substring(ImageKeys.PRECON_PREFIX.length()); + else if (imageKey.startsWith(ImageKeys.TOURNAMENTPACK_PREFIX)) + key = imageKey.substring(ImageKeys.TOURNAMENTPACK_PREFIX.length()); + else if (imageKey.startsWith(ImageKeys.ADVENTURECARD_PREFIX)) + key = imageKey.substring(ImageKeys.ADVENTURECARD_PREFIX.length()); + else if (imageKey.contains(".full")) {//no prefix found, construct a valid key if imageKey is art imagekey. + key = transformKey(imageKey); + } else //try anyway... + key = imageKey; - key = imageKey.substring(2); PaperCard cp = StaticData.instance().getCommonCards().getCard(key); if (cp == null) { cp = StaticData.instance().getVariantCards().getCard(key); } return cp; } + public static String transformKey(String imageKey) { + String key; + String edition= imageKey.substring(0, imageKey.indexOf("/")); + String artIndex = imageKey.substring(imageKey.indexOf("/")+1, imageKey.indexOf(".")).replaceAll("[^0-9]", ""); + String name = artIndex.isEmpty() ? imageKey.substring(imageKey.indexOf("/")+1, imageKey.indexOf(".")) : imageKey.substring(imageKey.indexOf("/")+1, imageKey.indexOf(artIndex)); + key = name + "|" + edition; + if (!artIndex.isEmpty()) + key += "|" + artIndex; + return key; + } public static String getImageRelativePath(PaperCard cp, String face, boolean includeSet, boolean isDownloadUrl) { final String nameToUse = cp == null ? null : getNameToUse(cp, face); diff --git a/forge-game/src/main/java/forge/game/Game.java b/forge-game/src/main/java/forge/game/Game.java index 59506328d64..eca09fc5de3 100644 --- a/forge-game/src/main/java/forge/game/Game.java +++ b/forge-game/src/main/java/forge/game/Game.java @@ -139,7 +139,6 @@ public class Game { private Direction turnOrder = Direction.getDefaultDirection(); private Boolean daytime = null; - private Boolean previous = null; private long timestamp = 0; public final GameAction action; @@ -184,7 +183,7 @@ public class Game { public Player getHasInitiative() { return initiative; } - public void setHasInitiative(final Player p ) { + public void setHasInitiative(final Player p) { initiative = p; } @@ -1228,21 +1227,12 @@ public class Game { public boolean isNeitherDayNorNight() { return this.daytime == null; } - public boolean previousTimeIsDay() { - return this.previous != null && this.previous == false; - } - public boolean previousTimeIsNight() { - return this.previous != null && this.previous == true; - } - public boolean previousTimeisNeitherDayNorNight() { - return this.previous == null; - } public Boolean getDayTime() { return this.daytime; } public void setDayTime(Boolean value) { - previous = this.daytime; + Boolean previous = this.daytime; this.daytime = value; if (previous != null && value != null && previous != value) { diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index b1ba74b841e..9d03a7a36be 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -1420,10 +1420,8 @@ public class GameAction { checkAgain = true; } } - if (!spaceSculptors.isEmpty()) { - for (Player p : spaceSculptors) { - checkAgain |= stateBasedAction704_5u(p); - } + for (Player p : spaceSculptors) { + checkAgain |= stateBasedAction704_5u(p); } // 704.5m World rule checkAgain |= handleWorldRule(noRegCreats); diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index 7bf9039878c..9a8ca6c6a6b 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -549,7 +549,6 @@ public class ChangeZoneEffect extends SpellAbilityEffect { final Zone originZone = game.getZoneOf(gameCard); // if Target isn't in the expected Zone, continue - if (originZone == null || (!origin.isEmpty() && !origin.contains(originZone.getZoneType()))) { continue; } @@ -559,10 +558,10 @@ public class ChangeZoneEffect extends SpellAbilityEffect { if (destination.equals(ZoneType.Library)) { // library position is zero indexed int libraryPosition = 0; - if (!altDest) { - libraryPosition = sa.hasParam("LibraryPosition") ? AbilityUtils.calculateAmount(hostCard, sa.getParam("LibraryPosition"), sa) : 0; - } else { + if (altDest) { libraryPosition = sa.hasParam("LibraryPositionAlternative") ? Integer.parseInt(sa.getParam("LibraryPositionAlternative")) : 0; + } else { + libraryPosition = sa.hasParam("LibraryPosition") ? AbilityUtils.calculateAmount(hostCard, sa.getParam("LibraryPosition"), sa) : 0; } // If a card is moved to library from the stack, remove its spells from the stack @@ -606,7 +605,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { if (sa.hasParam("GainControl")) { final String g = sa.getParam("GainControl"); Player newController = g.equals("True") ? player : - AbilityUtils.getDefinedPlayers(sa.getHostCard(), g, sa).get(0); + AbilityUtils.getDefinedPlayers(hostCard, g, sa).get(0); if (newController != null) { if (newController != gameCard.getController()) { gameCard.runChangeControllerCommands(); @@ -1318,7 +1317,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { if (sa.hasParam("GainControl")) { final String g = sa.getParam("GainControl"); Player newController = g.equals("True") ? sa.getActivatingPlayer() : - AbilityUtils.getDefinedPlayers(sa.getHostCard(), g, sa).get(0); + AbilityUtils.getDefinedPlayers(source, g, sa).get(0); if (newController != c.getController()) { c.runChangeControllerCommands(); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/DamageDealEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DamageDealEffect.java index f74cc649e8d..af7592e4830 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DamageDealEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DamageDealEffect.java @@ -39,12 +39,7 @@ public class DamageDealEffect extends DamageBaseEffect { // when damageStackDescription is called, just build exactly what is happening final StringBuilder stringBuilder = new StringBuilder(); final String damage = spellAbility.getParam("NumDmg"); - int dmg; - try { // try-catch to fix Volcano Hellion Crash - dmg = AbilityUtils.calculateAmount(spellAbility.getHostCard(), damage, spellAbility); - } catch (NullPointerException e) { - dmg = 0; - } + int dmg = AbilityUtils.calculateAmount(spellAbility.getHostCard(), damage, spellAbility); List targets = SpellAbilityEffect.getTargets(spellAbility); final List definedSources = AbilityUtils.getDefinedCards(spellAbility.getHostCard(), spellAbility.getParam("DamageSource"), spellAbility); diff --git a/forge-game/src/main/java/forge/game/ability/effects/DraftEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DraftEffect.java index 45778fbfbff..9ae1331ed61 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DraftEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DraftEffect.java @@ -63,7 +63,6 @@ import java.util.*; } Card chosenCard = player.getController().chooseSingleCardForZoneChange(ZoneType.None, new ArrayList(), sa, new CardCollection(draftOptions), null, Localizer.getInstance().getMessage("lblChooseCardDraft"), false, player); - chosenCard.setTokenCard(true); game.getAction().moveTo(ZoneType.None, chosenCard, sa, moveParams); drafted.add(chosenCard); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/MakeCardEffect.java b/forge-game/src/main/java/forge/game/ability/effects/MakeCardEffect.java index 608a7460db1..2b5b166cb12 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/MakeCardEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/MakeCardEffect.java @@ -108,6 +108,7 @@ public class MakeCardEffect extends SpellAbilityEffect { pc = StaticData.instance().getCommonCards().getUniqueByName(name); } Card card = Card.fromPaperCard(pc, player); + if (sa.hasParam("TokenCard")) { card.setTokenCard(true); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/RestartGameEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RestartGameEffect.java index 5eeac688763..97375d26c58 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RestartGameEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RestartGameEffect.java @@ -80,8 +80,7 @@ public class RestartGameEffect extends SpellAbilityEffect { } // special handling for Karn to filter out non-cards - CardCollection cmdCards = new CardCollection(p.getCardsIn(ZoneType.Command)); - for (Card c : cmdCards) { + for (Card c : p.getCardsIn(ZoneType.Command)) { if (c.isCommander()) { newLibrary.add(c); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/RollDiceEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RollDiceEffect.java index 83971c0b5ff..9dc8daa1b08 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RollDiceEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RollDiceEffect.java @@ -124,13 +124,15 @@ public class RollDiceEffect extends SpellAbilityEffect { total += modifier; // Run triggers + int rollNum = 1; for (Integer roll : rolls) { final Map runParams = AbilityKey.mapFromPlayer(player); runParams.put(AbilityKey.Sides, sides); runParams.put(AbilityKey.Modifier, modifier); runParams.put(AbilityKey.Result, roll); - runParams.put(AbilityKey.Number, player.getNumRollsThisTurn() + 1 - amount + rolls.indexOf(roll)); + runParams.put(AbilityKey.Number, player.getNumRollsThisTurn() - amount + rollNum); player.getGame().getTriggerHandler().runTrigger(TriggerType.RolledDie, runParams, false); + rollNum++; } final Map runParams = AbilityKey.mapFromPlayer(player); runParams.put(AbilityKey.Sides, sides); diff --git a/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java b/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java index 8c819811153..a4ec4a79a96 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java @@ -92,7 +92,6 @@ public class SacrificeEffect extends SpellAbilityEffect { // Expand Sacrifice keyword here depending on what we need out of it. final String num = sa.getParamOrDefault("Amount", "1"); final int amount = AbilityUtils.calculateAmount(card, num, sa); - final List tgts = getTargetPlayers(sa); final boolean devour = sa.hasParam("Devour"); final boolean exploit = sa.hasParam("Exploit"); final boolean sacEachValid = sa.hasParam("SacEachValid"); @@ -120,7 +119,7 @@ public class SacrificeEffect extends SpellAbilityEffect { } } else { CardCollectionView choosenToSacrifice = null; - for (final Player p : tgts) { + for (final Player p : getTargetPlayers(sa)) { CardCollectionView battlefield = p.getCardsIn(ZoneType.Battlefield); if (sacEachValid) { // Sacrifice maximum permanents in any combination of types specified by SacValid String [] validArray = valid.split(" & "); diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index e83dc910ad4..a51e6101540 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -931,8 +931,7 @@ public class CardFactoryUtil { ab.append(" | Champion$ True | Hidden$ True | Optional$ True | ChangeType$ ").append(changeType); StringBuilder subAb = new StringBuilder(); - subAb.append("DB$ Sacrifice | Defined$ Card.Self"); - subAb.append(" | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ0"); + subAb.append("DB$ Sacrifice | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ0"); String returnChampion = "DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield"; final Trigger parsedTrigger = TriggerHandler.parseTrigger(trig.toString(), card, intrinsic); diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 922af3691e2..50191ded7fd 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -691,8 +691,7 @@ public class Player extends GameEntity implements Comparable { && !this.getGame().getRules().hasAppliedVariant(GameType.Brawl)) { // In case that commander is merged permanent, get the real commander card final Card realCommander = source.getRealCommander(); - int damage = getCommanderDamage(realCommander) + amount; - commanderDamage.put(realCommander, damage); + addCommanderDamage(realCommander, amount); view.updateCommanderDamage(this); if (realCommander != source) { view.updateMergedCommanderDamage(source, realCommander); @@ -1922,7 +1921,7 @@ public class Player extends GameEntity implements Comparable { } public final boolean cantLoseForZeroOrLessLife() { - return hasKeyword("You don't lose the game for having 0 or less life."); + return cantLose() || hasKeyword("You don't lose the game for having 0 or less life."); } public final boolean cantWin() { @@ -2675,6 +2674,9 @@ public class Player extends GameEntity implements Comparable { Integer damage = commanderDamage.get(commander); return damage == null ? 0 : damage.intValue(); } + public void addCommanderDamage(Card commander, int damage) { + commanderDamage.merge(commander, damage, Integer::sum); + } public ColorSet getCommanderColorID() { if (commanders.isEmpty()) { diff --git a/forge-game/src/main/java/forge/game/spellability/TargetRestrictions.java b/forge-game/src/main/java/forge/game/spellability/TargetRestrictions.java index 0f4c4a7cc12..a9f6a82cf6c 100644 --- a/forge-game/src/main/java/forge/game/spellability/TargetRestrictions.java +++ b/forge-game/src/main/java/forge/game/spellability/TargetRestrictions.java @@ -585,7 +585,7 @@ public class TargetRestrictions { final Card srcCard = sa.getHostCard(); // should there be OrginalHost at any moment? for (final Card c : game.getCardsIn(this.tgtZone)) { - if (c.isValid(this.validTgts, srcCard.getController(), srcCard, sa) + if (c.isValid(this.validTgts, sa.getActivatingPlayer(), srcCard, sa) && (!isTargeted || sa.canTarget(c)) && !sa.getTargets().contains(c)) { candidates.add(c); diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerDamagePrevented.java b/forge-game/src/main/java/forge/game/trigger/TriggerDamagePrevented.java index f58dab78055..d3c0f00a10f 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerDamagePrevented.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerDamagePrevented.java @@ -80,11 +80,6 @@ public class TriggerDamagePrevented extends Trigger { if (!Expressions.compare(actualAmount, operator, operand)) { return false; } - - System.out.print("DamageDone Amount Operator: "); - System.out.println(operator); - System.out.print("DamageDone Amount Operand: "); - System.out.println(operand); } return true; diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerDamagePreventedOnce.java b/forge-game/src/main/java/forge/game/trigger/TriggerDamagePreventedOnce.java index d64c2ca41f6..6ade0a05ec8 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerDamagePreventedOnce.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerDamagePreventedOnce.java @@ -75,11 +75,6 @@ public class TriggerDamagePreventedOnce extends Trigger { if (!Expressions.compare(actualAmount, operator, operand)) { return false; } - - System.out.print("DamageDone Amount Operator: "); - System.out.println(operator); - System.out.print("DamageDone Amount Operand: "); - System.out.println(operand); } return true; diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java index b91a39db1e4..7f33bc8604a 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java @@ -19,11 +19,13 @@ package forge.game.trigger; import java.util.*; +import com.google.common.base.Predicates; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Iterables; import com.google.common.collect.ListMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Multimaps; +import com.google.common.collect.Table.Cell; import forge.game.CardTraitBase; import forge.game.CardTraitPredicates; @@ -445,29 +447,71 @@ public class TriggerHandler { // Torpor Orb check if (game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noCreatureETBTriggers) - && !regtrig.isStatic() && mode.equals(TriggerType.ChangesZone)) { - if (runParams.get(AbilityKey.Destination) instanceof String) { - final String dest = (String) runParams.get(AbilityKey.Destination); - if (dest.equals("Battlefield") && runParams.get(AbilityKey.Card) instanceof Card) { - final Card card = (Card) runParams.get(AbilityKey.Card); - if (card.isCreature()) { - return false; + && !regtrig.isStatic()) { + if (mode.equals(TriggerType.ChangesZone)) { + if (runParams.get(AbilityKey.Destination) instanceof String) { + final String dest = (String) runParams.get(AbilityKey.Destination); + if (dest.equals("Battlefield") && runParams.get(AbilityKey.Card) instanceof Card) { + final Card card = (Card) runParams.get(AbilityKey.Card); + if (card.isCreature()) { + return false; + } } } + } else if (mode.equals(TriggerType.ChangesZoneAll)) { + CardZoneTable table = (CardZoneTable) runParams.get(AbilityKey.Cards); + // find out if any other cards would still trigger it + boolean found = false; + for (Cell cell : table.cellSet()) { + // this currently assumes the table will not contain multiple destinations + // however with some effects (e.g. Goblin Welder) that should indeed be the case + // once Forge handles that correctly this section needs to account for that + // (by doing a closer check of the triggered ability first) + if (cell.getColumnKey() != ZoneType.Battlefield) { + found = true; + } else if (Iterables.any(cell.getValue(), Predicates.not(CardPredicates.isType("Creature")))) { + found = true; + } + if (found) break; + } + if (!found) { + return false; + } } } // Torpor Orb check if (game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noCreatureDyingTriggers) - && !regtrig.isStatic() && mode.equals(TriggerType.ChangesZone)) { - if (runParams.get(AbilityKey.Destination) instanceof String && runParams.get(AbilityKey.Origin) instanceof String) { - final String dest = (String) runParams.get(AbilityKey.Destination); - final String origin = (String) runParams.get(AbilityKey.Origin); - if (dest.equals("Graveyard") && origin.equals("Battlefield") && runParams.get(AbilityKey.Card) instanceof Card) { - final Card card = (Card) runParams.get(AbilityKey.Card); - if (card.isCreature()) { - return false; + && !regtrig.isStatic()) { + if (mode.equals(TriggerType.ChangesZone)) { + if (runParams.get(AbilityKey.Destination) instanceof String && runParams.get(AbilityKey.Origin) instanceof String) { + final String dest = (String) runParams.get(AbilityKey.Destination); + final String origin = (String) runParams.get(AbilityKey.Origin); + if (dest.equals("Graveyard") && origin.equals("Battlefield") && runParams.get(AbilityKey.Card) instanceof Card) { + // It will trigger if the ability is of a dying creature that triggers only when that creature is put into a graveyard from anywhere + if (!"Card.Self".equals(regtrig.getParam("ValidCard")) || (regtrig.hasParam("Origin") && !"Any".equals(regtrig.getParam("Origin")))) { + final Card card = (Card) runParams.get(AbilityKey.Card); + if (card.isCreature()) { + return false; + } + } } } + } else if (mode.equals(TriggerType.ChangesZoneAll)) { + CardZoneTable table = (CardZoneTable) runParams.get(AbilityKey.Cards); + boolean found = false; + for (Cell cell : table.cellSet()) { + if (cell.getRowKey() != ZoneType.Battlefield) { + found = true; + } else if (cell.getColumnKey() != ZoneType.Graveyard) { + found = true; + } else if (Iterables.any(cell.getValue(), Predicates.not(CardPredicates.isType("Creature")))) { + found = true; + } + if (found) break; + } + if (!found) { + return false; + } } } return true; diff --git a/forge-gui-desktop/src/test/java/forge/ai/simulation/SpellAbilityPickerSimulationTest.java b/forge-gui-desktop/src/test/java/forge/ai/simulation/SpellAbilityPickerSimulationTest.java index 18fe2cad984..8aa56bc5053 100644 --- a/forge-gui-desktop/src/test/java/forge/ai/simulation/SpellAbilityPickerSimulationTest.java +++ b/forge-gui-desktop/src/test/java/forge/ai/simulation/SpellAbilityPickerSimulationTest.java @@ -440,7 +440,8 @@ public class SpellAbilityPickerSimulationTest extends SimulationTest { AssertJUnit.assertEquals(blocker, sa.getTargetCard()); } - @Test + // Run the test 100 times to ensure there's no flakiness. + @Test(invocationCount = 100) public void testChoicesResultingFromRandomEffects() { // Sometimes, the effect of a spell can be random, and as a result of that, new choices // could be selected during simulation. This test verifies that this doesn't cause problems. @@ -449,40 +450,37 @@ public class SpellAbilityPickerSimulationTest extends SimulationTest { // seed during choice evaluation, although in the future, it may make sense to handle it // some other way. - // Run the test 100 times to ensure there's no flakiness. - for (int i = 0; i < 100; i++) { - Game game = initAndCreateGame(); - Player p = game.getPlayers().get(1); - Player opponent = game.getPlayers().get(0); + Game game = initAndCreateGame(); + Player p = game.getPlayers().get(1); + Player opponent = game.getPlayers().get(0); - addCardToZone("Chaos Warp", p, ZoneType.Hand); - addCard("Mountain", p); - addCard("Mountain", p); - addCard("Mountain", p); + addCardToZone("Chaos Warp", p, ZoneType.Hand); + addCard("Mountain", p); + addCard("Mountain", p); + addCard("Mountain", p); - addCard("Plains", opponent); - addCard("Mountain", opponent); - addCard("Forest", opponent); - // Use a card that is worthwhile to target even if the shuffle ends up choosing it - // again. In this case, life loss on ETB and leaving. - Card expectedTarget = addCard("Raving Oni-Slave", opponent); + addCard("Plains", opponent); + addCard("Mountain", opponent); + addCard("Forest", opponent); + // Use a card that is worthwhile to target even if the shuffle ends up choosing it + // again. In this case, life loss on ETB and leaving. + Card expectedTarget = addCard("Raving Oni-Slave", opponent); - addCardToZone("Chaos Warp", opponent, ZoneType.Library); - addCardToZone("Island", opponent, ZoneType.Library); - addCardToZone("Swamp", opponent, ZoneType.Library); - // The presence of Pilgrim's Eye in the library is important for this test, as this - // will result in sub-choices (which land to pick) if this card ends up being the top - // of the library during simulation. - addCardToZone("Pilgrim's Eye", opponent, ZoneType.Library); + addCardToZone("Chaos Warp", opponent, ZoneType.Library); + addCardToZone("Island", opponent, ZoneType.Library); + addCardToZone("Swamp", opponent, ZoneType.Library); + // The presence of Pilgrim's Eye in the library is important for this test, as this + // will result in sub-choices (which land to pick) if this card ends up being the top + // of the library during simulation. + addCardToZone("Pilgrim's Eye", opponent, ZoneType.Library); - game.getPhaseHandler().devModeSet(PhaseType.MAIN2, p); - game.getAction().checkStateEffects(true); + game.getPhaseHandler().devModeSet(PhaseType.MAIN2, p); + game.getAction().checkStateEffects(true); - SpellAbilityPicker picker = new SpellAbilityPicker(game, p); - SpellAbility sa = picker.chooseSpellAbilityToPlay(null); - AssertJUnit.assertNotNull(sa); - AssertJUnit.assertEquals("Chaos Warp", sa.getHostCard().getName()); - AssertJUnit.assertEquals(expectedTarget, sa.getTargetCard()); - } + SpellAbilityPicker picker = new SpellAbilityPicker(game, p); + SpellAbility sa = picker.chooseSpellAbilityToPlay(null); + AssertJUnit.assertNotNull(sa); + AssertJUnit.assertEquals("Chaos Warp", sa.getHostCard().getName()); + AssertJUnit.assertEquals(expectedTarget, sa.getTargetCard()); } } diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index 528839b8465..e7a15839c43 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -153,11 +153,8 @@ public class Forge implements ApplicationListener { GuiBase.setIsAndroid(Gdx.app.getType() == Application.ApplicationType.Android); - if (!GuiBase.isAndroid() || (androidVersion > 28 && totalDeviceRAM > 7000)) { + if (!GuiBase.isAndroid() || (androidVersion > 25 && totalDeviceRAM > 3400)) { allowCardBG = true; - } else { - // don't allow to read and process - ForgeConstants.SPRITE_CARDBG_FILE = ""; } assets = new Assets(); graphics = new Graphics(); diff --git a/forge-gui-mobile/src/forge/Graphics.java b/forge-gui-mobile/src/forge/Graphics.java index 4d3242ebca4..80df838870a 100644 --- a/forge-gui-mobile/src/forge/Graphics.java +++ b/forge-gui-mobile/src/forge/Graphics.java @@ -753,10 +753,24 @@ public class Graphics { fillRoundRect(borderColor, x + 1, y + 1, w - 1.5f, h - 1.5f, (h - w) / 10);//used by zoom let some edges show... } - public void drawAvatarImage(FImage image, float x, float y, float w, float h, boolean drawGrayscale) { + public void drawAvatarImage(FImage image, float x, float y, float w, float h, boolean drawGrayscale, float amount) { if (image == null) return; - if (!drawGrayscale) { + if (amount > 0) { + batch.end(); + shaderWarp.bind(); + shaderWarp.setUniformf("u_amount", 0.2f); + shaderWarp.setUniformf("u_speed", 0.2f); + shaderWarp.setUniformf("u_time", amount); + batch.setShader(shaderWarp); + batch.begin(); + //draw + image.draw(this, x, y, w, h); + //reset + batch.end(); + batch.setShader(null); + batch.begin(); + } else if (!drawGrayscale) { image.draw(this, x, y, w, h); } else { batch.end(); diff --git a/forge-gui-mobile/src/forge/adventure/util/RewardActor.java b/forge-gui-mobile/src/forge/adventure/util/RewardActor.java index fe3a0bf922a..04bf2b3eec1 100644 --- a/forge-gui-mobile/src/forge/adventure/util/RewardActor.java +++ b/forge-gui-mobile/src/forge/adventure/util/RewardActor.java @@ -61,7 +61,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb final int preview_h = 680; static TextureRegion backTexture; - Texture image, T; + Texture image, T, Talt; Graphics graphics; Texture generatedTooltip = null; //Storage for a generated tooltip. To dispose of on exit. boolean needsToBeDisposed; @@ -88,6 +88,8 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb } if (T != null) T.dispose(); + if (Talt != null) + Talt.dispose(); } public boolean toolTipIsVisible() { @@ -102,6 +104,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb @Override public void onImageFetched() { + ImageCache.clear(); String imageKey = reward.getCard().getImageKey(false); PaperCard card = ImageUtil.getPaperCardFromImageKey(imageKey); imageKey = card.getCardImageKey(); @@ -139,6 +142,8 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb } if (T != null) T.dispose(); + if (alternate && Talt != null) + Talt.dispose(); ImageCache.updateSynqCount(imageFile, count); Gdx.graphics.requestRendering(); } @@ -216,10 +221,15 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb } } else if (!ImageCache.imageKeyFileExists(reward.getCard().getImageKey(false))) { //Cannot find an image file, set up a rendered card until (if) a file is downloaded. - T = renderPlaceholder(getGraphics(), reward.getCard()); //Now we can render the card. + T = renderPlaceholder(new Graphics(), reward.getCard(), false); //Now we can render the card. setCardImage(T); loaded = false; fetcher.fetchImage(reward.getCard().getImageKey(false), this); + if (reward.getCard().hasBackFace()) { + if (!ImageCache.imageKeyFileExists(reward.getCard().getImageKey(true))) { + fetcher.fetchImage(reward.getCard().getImageKey(true), this); + } + } } } break; @@ -325,17 +335,16 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb if (!reward.getCard().hasBackFace()) return; Texture alt = ImageCache.getImage(reward.getCard().getImageKey(true), false); - PaperCard altCard = ImageUtil.getPaperCardFromImageKey(reward.getCard().getCardAltImageKey()); if (GuiBase.isAndroid() || Forge.hasGamepad()) { if (alternate) { if (alt != null) { holdTooltip.tooltip_actor.clear(); holdTooltip.tooltip_actor.add(new RewardImage(processDrawable(alt))); } else { - if (T == null) - T = renderPlaceholder(getGraphics(), altCard); + if (Talt == null) + Talt = renderPlaceholder(new Graphics(), reward.getCard(), true); holdTooltip.tooltip_actor.clear(); - holdTooltip.tooltip_actor.add(new RewardImage(processDrawable(T))); + holdTooltip.tooltip_actor.add(new RewardImage(processDrawable(Talt))); } } else { if (toolTipImage != null) { @@ -349,9 +358,9 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb if (alt != null) { tooltip.setActor(new RewardImage(processDrawable(alt))); } else { - if (T == null) - T = renderPlaceholder(getGraphics(), altCard); - tooltip.setActor(new RewardImage(processDrawable(T))); + if (Talt == null) + Talt = renderPlaceholder(new Graphics(), reward.getCard(), true); + tooltip.setActor(new RewardImage(processDrawable(Talt))); } } else { if (toolTipImage != null) @@ -441,7 +450,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb } } - private Texture renderPlaceholder(Graphics g, PaperCard card) { //Use CardImageRenderer to output a Texture. + private Texture renderPlaceholder(Graphics g, PaperCard card, boolean alternate) { //Use CardImageRenderer to output a Texture. if (renderedCount++ == 0) { //The first time we find a card that has no art, render one out of view to fully initialize CardImageRenderer. g.begin(preview_w, preview_h); @@ -456,7 +465,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb g.begin(preview_w, preview_h); g.setProjectionMatrix(m); g.startClip(); - CardImageRenderer.drawCardImage(g, CardView.getCardForUi(card), false, 0, 0, preview_w, preview_h, CardRenderer.CardStackPosition.Top, Forge.allowCardBG, true); + CardImageRenderer.drawCardImage(g, CardView.getCardForUi(card), alternate, 0, 0, preview_w, preview_h, CardRenderer.CardStackPosition.Top, Forge.allowCardBG, true); g.end(); g.endClip(); //Rendering ends here. Create a new Pixmap to Texture with mipmaps, otherwise will render as full black. @@ -623,7 +632,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb drawCard(batch, image, x, width); } else if (!loaded) { if (T == null) - T = renderPlaceholder(getGraphics(), reward.getCard()); + T = renderPlaceholder(getGraphics(), reward.getCard(), false); drawCard(batch, T, x, width); } } else if (image != null) { @@ -637,7 +646,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb batch.end(); shaderRoundRect.bind(); shaderRoundRect.setUniformf("u_resolution", image.getWidth(), image.getHeight()); - shaderRoundRect.setUniformf("edge_radius", (image.getHeight()/image.getWidth())*20); + shaderRoundRect.setUniformf("edge_radius", (image.getHeight() / image.getWidth()) * 20); shaderRoundRect.setUniformf("u_gray", sold ? 1f : 0f); batch.setShader(shaderRoundRect); batch.begin(); @@ -816,6 +825,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb shown = false; } } + class RewardImage extends Image { public RewardImage(TextureRegionDrawable processDrawable) { setDrawable(processDrawable); @@ -829,7 +839,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb if (getDrawable() instanceof TextureRegionDrawable) { Texture t = ((TextureRegionDrawable) getDrawable()).getRegion().getTexture(); if (t != null) { - float x = GuiBase.isAndroid() || Forge.hasGamepad() ? Scene.getIntendedWidth() / 2 - holdTooltip.tooltip_actor.getWidth() / 2: tooltip.getActor().getImageX(); + float x = GuiBase.isAndroid() || Forge.hasGamepad() ? Scene.getIntendedWidth() / 2 - holdTooltip.tooltip_actor.getWidth() / 2 : tooltip.getActor().getImageX(); float y = GuiBase.isAndroid() || Forge.hasGamepad() ? Scene.getIntendedHeight() / 2 - holdTooltip.tooltip_actor.getHeight() / 2 : tooltip.getActor().getImageY(); float w = GuiBase.isAndroid() || Forge.hasGamepad() ? holdTooltip.tooltip_actor.getPrefWidth() : tooltip.getActor().getPrefWidth(); float h = GuiBase.isAndroid() || Forge.hasGamepad() ? holdTooltip.tooltip_actor.getPrefHeight() : tooltip.getActor().getPrefHeight(); @@ -837,7 +847,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb batch.end(); shaderRoundRect.bind(); shaderRoundRect.setUniformf("u_resolution", t.getWidth(), t.getHeight()); - shaderRoundRect.setUniformf("edge_radius", (t.getHeight()/t.getWidth())*ImageCache.getRadius(t)); + shaderRoundRect.setUniformf("edge_radius", (t.getHeight() / t.getWidth()) * ImageCache.getRadius(t)); shaderRoundRect.setUniformf("u_gray", sold ? 0.8f : 0f); batch.setShader(shaderRoundRect); batch.begin(); diff --git a/forge-gui-mobile/src/forge/assets/FSkinImage.java b/forge-gui-mobile/src/forge/assets/FSkinImage.java index 90bd5b603bb..9998d6bc8ae 100644 --- a/forge-gui-mobile/src/forge/assets/FSkinImage.java +++ b/forge-gui-mobile/src/forge/assets/FSkinImage.java @@ -131,53 +131,6 @@ public enum FSkinImage implements FImage { DRAFTRANK_A (FSkinProp.IMG_DRAFTRANK_A, SourceFile.DRAFTRANKS), DRAFTRANK_S (FSkinProp.IMG_DRAFTRANK_S, SourceFile.DRAFTRANKS), - //CardBG - CARDBG_A (FSkinProp.IMG_CARDBG_A, SourceFile.CARDBG), - CARDBG_B (FSkinProp.IMG_CARDBG_B, SourceFile.CARDBG), - CARDBG_BG (FSkinProp.IMG_CARDBG_BG, SourceFile.CARDBG), - CARDBG_BR (FSkinProp.IMG_CARDBG_BR, SourceFile.CARDBG), - CARDBG_C (FSkinProp.IMG_CARDBG_C, SourceFile.CARDBG), - CARDBG_G (FSkinProp.IMG_CARDBG_G, SourceFile.CARDBG), - CARDBG_L (FSkinProp.IMG_CARDBG_L, SourceFile.CARDBG), - CARDBG_M (FSkinProp.IMG_CARDBG_M, SourceFile.CARDBG), - CARDBG_R (FSkinProp.IMG_CARDBG_R, SourceFile.CARDBG), - CARDBG_RG (FSkinProp.IMG_CARDBG_RG, SourceFile.CARDBG), - CARDBG_U (FSkinProp.IMG_CARDBG_U, SourceFile.CARDBG), - CARDBG_UB (FSkinProp.IMG_CARDBG_UB, SourceFile.CARDBG), - CARDBG_UG (FSkinProp.IMG_CARDBG_UG, SourceFile.CARDBG), - CARDBG_UR (FSkinProp.IMG_CARDBG_UR, SourceFile.CARDBG), - CARDBG_V (FSkinProp.IMG_CARDBG_V, SourceFile.CARDBG), - CARDBG_W (FSkinProp.IMG_CARDBG_W, SourceFile.CARDBG), - CARDBG_WB (FSkinProp.IMG_CARDBG_WB, SourceFile.CARDBG), - CARDBG_WG (FSkinProp.IMG_CARDBG_WG, SourceFile.CARDBG), - CARDBG_WR (FSkinProp.IMG_CARDBG_WR, SourceFile.CARDBG), - CARDBG_WU (FSkinProp.IMG_CARDBG_WU, SourceFile.CARDBG), - //PWBG - PWBG_B (FSkinProp.IMG_PWBG_B, SourceFile.CARDBG), - PWBG_BG (FSkinProp.IMG_PWBG_BG, SourceFile.CARDBG), - PWBG_BR (FSkinProp.IMG_PWBG_BR, SourceFile.CARDBG), - PWBG_C (FSkinProp.IMG_PWBG_C, SourceFile.CARDBG), - PWBG_G (FSkinProp.IMG_PWBG_G, SourceFile.CARDBG), - PWBG_M (FSkinProp.IMG_PWBG_M, SourceFile.CARDBG), - PWBG_R (FSkinProp.IMG_PWBG_R, SourceFile.CARDBG), - PWBG_RG (FSkinProp.IMG_PWBG_RG, SourceFile.CARDBG), - PWBG_U (FSkinProp.IMG_PWBG_U, SourceFile.CARDBG), - PWBG_UB (FSkinProp.IMG_PWBG_UB, SourceFile.CARDBG), - PWBG_UG (FSkinProp.IMG_PWBG_UG, SourceFile.CARDBG), - PWBG_UR (FSkinProp.IMG_PWBG_UR, SourceFile.CARDBG), - PWBG_W (FSkinProp.IMG_PWBG_W, SourceFile.CARDBG), - PWBG_WB (FSkinProp.IMG_PWBG_WB, SourceFile.CARDBG), - PWBG_WG (FSkinProp.IMG_PWBG_WG, SourceFile.CARDBG), - PWBG_WR (FSkinProp.IMG_PWBG_WR, SourceFile.CARDBG), - PWBG_WU (FSkinProp.IMG_PWBG_WU, SourceFile.CARDBG), - //NYX OVERLAY - NYX_B (FSkinProp.IMG_NYX_B, SourceFile.CARDBG), - NYX_G (FSkinProp.IMG_NYX_G, SourceFile.CARDBG), - NYX_M (FSkinProp.IMG_NYX_M, SourceFile.CARDBG), - NYX_R (FSkinProp.IMG_NYX_R, SourceFile.CARDBG), - NYX_U (FSkinProp.IMG_NYX_U, SourceFile.CARDBG), - NYX_W (FSkinProp.IMG_NYX_W, SourceFile.CARDBG), - //Gameplay TAP (FSkinProp.IMG_TAP, SourceFile.MANAICONS), UNTAP (FSkinProp.IMG_UNTAP, SourceFile.MANAICONS), @@ -531,7 +484,6 @@ public enum FSkinImage implements FImage { WATERMARKS(ForgeConstants.SPRITE_WATERMARK_FILE), DRAFTRANKS(ForgeConstants.SPRITE_DRAFTRANKS_FILE), CRACKS(ForgeConstants.SPRITE_CRACKS_FILE), - CARDBG(ForgeConstants.SPRITE_CARDBG_FILE), PLANAR_CONQUEST(ForgeConstants.SPRITE_PLANAR_CONQUEST_FILE); private final String filename; diff --git a/forge-gui-mobile/src/forge/assets/FSkinTexture.java b/forge-gui-mobile/src/forge/assets/FSkinTexture.java index 8d2a5e686ca..4437f8d7e66 100644 --- a/forge-gui-mobile/src/forge/assets/FSkinTexture.java +++ b/forge-gui-mobile/src/forge/assets/FSkinTexture.java @@ -34,6 +34,52 @@ public enum FSkinTexture implements FImage { ADV_BG_CAVE(ForgeConstants.ADV_BG_CAVE_FILE, false, false), ADV_BG_DUNGEON(ForgeConstants.ADV_BG_DUNGEON_FILE, false, false), ADV_BG_CASTLE(ForgeConstants.ADV_BG_CASTLE_FILE, false, false), + //CARD BG + CARDBG_A (ForgeConstants.IMG_CARDBG_A, false, false), + CARDBG_B (ForgeConstants.IMG_CARDBG_B, false, false), + CARDBG_BG (ForgeConstants.IMG_CARDBG_BG, false, false), + CARDBG_BR (ForgeConstants.IMG_CARDBG_BR, false, false), + CARDBG_C (ForgeConstants.IMG_CARDBG_C, false, false), + CARDBG_G (ForgeConstants.IMG_CARDBG_G, false, false), + CARDBG_L (ForgeConstants.IMG_CARDBG_L, false, false), + CARDBG_M (ForgeConstants.IMG_CARDBG_M, false, false), + CARDBG_R (ForgeConstants.IMG_CARDBG_R, false, false), + CARDBG_RG (ForgeConstants.IMG_CARDBG_RG, false, false), + CARDBG_U (ForgeConstants.IMG_CARDBG_U, false, false), + CARDBG_UB (ForgeConstants.IMG_CARDBG_UB, false, false), + CARDBG_UG (ForgeConstants.IMG_CARDBG_UG, false, false), + CARDBG_UR (ForgeConstants.IMG_CARDBG_UR, false, false), + CARDBG_V (ForgeConstants.IMG_CARDBG_V, false, false), + CARDBG_W (ForgeConstants.IMG_CARDBG_W, false, false), + CARDBG_WB (ForgeConstants.IMG_CARDBG_WB, false, false), + CARDBG_WG (ForgeConstants.IMG_CARDBG_WG, false, false), + CARDBG_WR (ForgeConstants.IMG_CARDBG_WR, false, false), + CARDBG_WU (ForgeConstants.IMG_CARDBG_WU, false, false), + PWBG_B (ForgeConstants.IMG_PWBG_B, false, false), + PWBG_BG (ForgeConstants.IMG_PWBG_BG, false, false), + PWBG_BR (ForgeConstants.IMG_PWBG_BR, false, false), + PWBG_C (ForgeConstants.IMG_PWBG_C, false, false), + PWBG_G (ForgeConstants.IMG_PWBG_G, false, false), + PWBG_M (ForgeConstants.IMG_PWBG_M, false, false), + PWBG_R (ForgeConstants.IMG_PWBG_R, false, false), + PWBG_RG (ForgeConstants.IMG_PWBG_RG, false, false), + PWBG_U (ForgeConstants.IMG_PWBG_U, false, false), + PWBG_UB (ForgeConstants.IMG_PWBG_UB, false, false), + PWBG_UG (ForgeConstants.IMG_PWBG_UG, false, false), + PWBG_UR (ForgeConstants.IMG_PWBG_UR, false, false), + PWBG_W (ForgeConstants.IMG_PWBG_W, false, false), + PWBG_WB (ForgeConstants.IMG_PWBG_WB, false, false), + PWBG_WG (ForgeConstants.IMG_PWBG_WG, false, false), + PWBG_WR (ForgeConstants.IMG_PWBG_WR, false, false), + PWBG_WU (ForgeConstants.IMG_PWBG_WU, false, false), + NYX_B (ForgeConstants.IMG_NYX_B, false, false), + NYX_G (ForgeConstants.IMG_NYX_G, false, false), + NYX_M (ForgeConstants.IMG_NYX_M, false, false), + NYX_R (ForgeConstants.IMG_NYX_R, false, false), + NYX_U (ForgeConstants.IMG_NYX_U, false, false), + NYX_W (ForgeConstants.IMG_NYX_W, false, false), + NYX_C (ForgeConstants.IMG_NYX_C, false, false), + //Planechase Academy_at_Tolaria_West(ForgeConstants.BG_1, false, true), Agyrem(ForgeConstants.BG_2, false, true), diff --git a/forge-gui-mobile/src/forge/card/CardImageRenderer.java b/forge-gui-mobile/src/forge/card/CardImageRenderer.java index e2a3385b412..83b3ab8b514 100644 --- a/forge-gui-mobile/src/forge/card/CardImageRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardImageRenderer.java @@ -377,6 +377,10 @@ public class CardImageRenderer { } private static void drawSplitCard(CardView card, FImageComplex cardArt, Graphics g, float x, float y, float w, float h, boolean altState, boolean isFaceDown) { + if (cardArt.getTexture() == forgeArt.getTexture()) { + g.drawImage(cardArt, x, y, w, h); + return; + } CardView alt = card.getBackup(); if (alt == null) alt = card.getAlternateState().getCard(); @@ -858,7 +862,7 @@ public class CardImageRenderer { } else { borderColors = CardDetailUtil.getBorderColors(state, canShow); } - Color[] colors = fillColorBackground(g, borderColors, x, y, w, h); + Color[] colors = Forge.allowCardBG ? drawCardBackgroundTexture(state, g, !altState ? borderColors : CardDetailUtil.getBorderColors(state, canShow), x, y, w, h) : fillColorBackground(g, borderColors, x, y, w, h); Color idForeColor = FSkinColor.getHighContrastColor(colors[0]); @@ -907,79 +911,110 @@ public class CardImageRenderer { switch (backColors.size()) { case 1: if (backColors.get(0) == DetailColors.FACE_DOWN) { - g.drawImage(FSkinImage.CARDBG_C, x, y, w, h); + g.drawImage(FSkinTexture.CARDBG_C, x, y, w, h); } else if (backColors.get(0) == DetailColors.LAND) { - g.drawImage(isPW ? FSkinImage.PWBG_C : FSkinImage.CARDBG_L, x, y, w, h); + g.drawImage(isPW ? FSkinTexture.PWBG_C : FSkinTexture.CARDBG_L, x, y, w, h); } else if (backColors.get(0) == DetailColors.MULTICOLOR) { - g.drawImage(isPW ? FSkinImage.PWBG_M : FSkinImage.CARDBG_M, x, y, w, h); - if (isNyx) - g.drawImage(FSkinImage.NYX_M, x, y, w, (h / 2) + (h / 5)); - } else if (backColors.get(0) == DetailColors.COLORLESS) { - if (isPW) - g.drawImage(FSkinImage.PWBG_C, x, y, w, h); - else if (state.isVehicle()) - g.drawImage(FSkinImage.CARDBG_V, x, y, w, h); - else if (state.isArtifact()) - g.drawImage(FSkinImage.CARDBG_A, x, y, w, h); + if (state.isVehicle()) + g.drawImage(FSkinTexture.CARDBG_V, x, y, w, h); + else if (isNyx) + g.drawImage(FSkinTexture.NYX_M, x, y, w, h); else - g.drawImage(FSkinImage.CARDBG_C, x, y, w, h); - //todo add NYX for colorless? + g.drawImage(isPW ? FSkinTexture.PWBG_M : FSkinTexture.CARDBG_M, x, y, w, h); + } else if (backColors.get(0) == DetailColors.COLORLESS) { + if (state.isVehicle()) + g.drawImage(FSkinTexture.CARDBG_V, x, y, w, h); + else if (isPW) + g.drawImage(FSkinTexture.PWBG_C, x, y, w, h); + else if (state.isArtifact()) + g.drawImage(FSkinTexture.CARDBG_A, x, y, w, h); + else if (isNyx) + g.drawImage(FSkinTexture.NYX_C, x, y, w, h); + else + g.drawImage(FSkinTexture.CARDBG_C, x, y, w, h); } else if (backColors.get(0) == DetailColors.GREEN) { - g.drawImage(isPW ? FSkinImage.PWBG_G : FSkinImage.CARDBG_G, x, y, w, h); - if (isNyx) - g.drawImage(FSkinImage.NYX_G, x, y, w, (h / 2) + (h / 5)); + if (state.isVehicle()) + g.drawImage(FSkinTexture.CARDBG_V, x, y, w, h); + else if (isNyx) + g.drawImage(FSkinTexture.NYX_G, x, y, w, h); + else + g.drawImage(isPW ? FSkinTexture.PWBG_G : FSkinTexture.CARDBG_G, x, y, w, h); } else if (backColors.get(0) == DetailColors.RED) { - g.drawImage(isPW ? FSkinImage.PWBG_R : FSkinImage.CARDBG_R, x, y, w, h); - if (isNyx) - g.drawImage(FSkinImage.NYX_R, x, y, w, (h / 2) + (h / 5)); + if (state.isVehicle()) + g.drawImage(FSkinTexture.CARDBG_V, x, y, w, h); + else if (isNyx) + g.drawImage(FSkinTexture.NYX_R, x, y, w, h); + else + g.drawImage(isPW ? FSkinTexture.PWBG_R : FSkinTexture.CARDBG_R, x, y, w, h); } else if (backColors.get(0) == DetailColors.BLACK) { - g.drawImage(isPW ? FSkinImage.PWBG_B : FSkinImage.CARDBG_B, x, y, w, h); - if (isNyx) - g.drawImage(FSkinImage.NYX_B, x, y, w, (h / 2) + (h / 5)); + if (state.isVehicle()) + g.drawImage(FSkinTexture.CARDBG_V, x, y, w, h); + else if (isNyx) + g.drawImage(FSkinTexture.NYX_B, x, y, w, h); + else + g.drawImage(isPW ? FSkinTexture.PWBG_B : FSkinTexture.CARDBG_B, x, y, w, h); } else if (backColors.get(0) == DetailColors.BLUE) { - g.drawImage(isPW ? FSkinImage.PWBG_U : FSkinImage.CARDBG_U, x, y, w, h); - if (isNyx) - g.drawImage(FSkinImage.NYX_U, x, y, w, (h / 2) + (h / 5)); + if (state.isVehicle()) + g.drawImage(FSkinTexture.CARDBG_V, x, y, w, h); + else if (isNyx) + g.drawImage(FSkinTexture.NYX_U, x, y, w, h); + else + g.drawImage(isPW ? FSkinTexture.PWBG_U : FSkinTexture.CARDBG_U, x, y, w, h); } else if (backColors.get(0) == DetailColors.WHITE) { - g.drawImage(isPW ? FSkinImage.PWBG_W : FSkinImage.CARDBG_W, x, y, w, h); - if (isNyx) - g.drawImage(FSkinImage.NYX_W, x, y, w, (h / 2) + (h / 5)); + if (state.isVehicle()) + g.drawImage(FSkinTexture.CARDBG_V, x, y, w, h); + else if (isNyx) + g.drawImage(FSkinTexture.NYX_W, x, y, w, h); + else + g.drawImage(isPW ? FSkinTexture.PWBG_W : FSkinTexture.CARDBG_W, x, y, w, h); } break; case 2: - if (!isHybrid) { - g.drawImage(isPW ? FSkinImage.PWBG_M : FSkinImage.CARDBG_M, x, y, w, h); - } else if (backColors.contains(DetailColors.WHITE) && backColors.contains(DetailColors.BLUE)) { - g.drawImage(isPW ? FSkinImage.PWBG_WU : FSkinImage.CARDBG_WU, x, y, w, h); - } else if (backColors.contains(DetailColors.WHITE) && backColors.contains(DetailColors.BLACK)) { - g.drawImage(isPW ? FSkinImage.PWBG_WB : FSkinImage.CARDBG_WB, x, y, w, h); - } else if (backColors.contains(DetailColors.WHITE) && backColors.contains(DetailColors.RED)) { - g.drawImage(isPW ? FSkinImage.PWBG_WR : FSkinImage.CARDBG_WR, x, y, w, h); - } else if (backColors.contains(DetailColors.WHITE) && backColors.contains(DetailColors.GREEN)) { - g.drawImage(isPW ? FSkinImage.PWBG_WG : FSkinImage.CARDBG_WG, x, y, w, h); - } else if (backColors.contains(DetailColors.BLUE) && backColors.contains(DetailColors.BLACK)) { - g.drawImage(isPW ? FSkinImage.PWBG_UB : FSkinImage.CARDBG_UB, x, y, w, h); - } else if (backColors.contains(DetailColors.BLUE) && backColors.contains(DetailColors.RED)) { - g.drawImage(isPW ? FSkinImage.PWBG_UR : FSkinImage.CARDBG_UR, x, y, w, h); - } else if (backColors.contains(DetailColors.BLUE) && backColors.contains(DetailColors.GREEN)) { - g.drawImage(isPW ? FSkinImage.PWBG_UG : FSkinImage.CARDBG_UG, x, y, w, h); - } else if (backColors.contains(DetailColors.BLACK) && backColors.contains(DetailColors.RED)) { - g.drawImage(isPW ? FSkinImage.PWBG_BR : FSkinImage.CARDBG_BR, x, y, w, h); - } else if (backColors.contains(DetailColors.BLACK) && backColors.contains(DetailColors.GREEN)) { - g.drawImage(isPW ? FSkinImage.PWBG_BG : FSkinImage.CARDBG_BG, x, y, w, h); - } else if (backColors.contains(DetailColors.RED) && backColors.contains(DetailColors.GREEN)) { - g.drawImage(isPW ? FSkinImage.PWBG_RG : FSkinImage.CARDBG_RG, x, y, w, h); + if (state.isVehicle()) + g.drawImage(FSkinTexture.CARDBG_V, x, y, w, h); + else if (isNyx) + g.drawImage(FSkinTexture.NYX_M, x, y, w, h); + else { + if (!isHybrid) { + g.drawImage(isPW ? FSkinTexture.PWBG_M : FSkinTexture.CARDBG_M, x, y, w, h); + } else if (backColors.contains(DetailColors.WHITE) && backColors.contains(DetailColors.BLUE)) { + g.drawImage(isPW ? FSkinTexture.PWBG_WU : FSkinTexture.CARDBG_WU, x, y, w, h); + } else if (backColors.contains(DetailColors.WHITE) && backColors.contains(DetailColors.BLACK)) { + g.drawImage(isPW ? FSkinTexture.PWBG_WB : FSkinTexture.CARDBG_WB, x, y, w, h); + } else if (backColors.contains(DetailColors.WHITE) && backColors.contains(DetailColors.RED)) { + g.drawImage(isPW ? FSkinTexture.PWBG_WR : FSkinTexture.CARDBG_WR, x, y, w, h); + } else if (backColors.contains(DetailColors.WHITE) && backColors.contains(DetailColors.GREEN)) { + g.drawImage(isPW ? FSkinTexture.PWBG_WG : FSkinTexture.CARDBG_WG, x, y, w, h); + } else if (backColors.contains(DetailColors.BLUE) && backColors.contains(DetailColors.BLACK)) { + g.drawImage(isPW ? FSkinTexture.PWBG_UB : FSkinTexture.CARDBG_UB, x, y, w, h); + } else if (backColors.contains(DetailColors.BLUE) && backColors.contains(DetailColors.RED)) { + g.drawImage(isPW ? FSkinTexture.PWBG_UR : FSkinTexture.CARDBG_UR, x, y, w, h); + } else if (backColors.contains(DetailColors.BLUE) && backColors.contains(DetailColors.GREEN)) { + g.drawImage(isPW ? FSkinTexture.PWBG_UG : FSkinTexture.CARDBG_UG, x, y, w, h); + } else if (backColors.contains(DetailColors.BLACK) && backColors.contains(DetailColors.RED)) { + g.drawImage(isPW ? FSkinTexture.PWBG_BR : FSkinTexture.CARDBG_BR, x, y, w, h); + } else if (backColors.contains(DetailColors.BLACK) && backColors.contains(DetailColors.GREEN)) { + g.drawImage(isPW ? FSkinTexture.PWBG_BG : FSkinTexture.CARDBG_BG, x, y, w, h); + } else if (backColors.contains(DetailColors.RED) && backColors.contains(DetailColors.GREEN)) { + g.drawImage(isPW ? FSkinTexture.PWBG_RG : FSkinTexture.CARDBG_RG, x, y, w, h); + } } - if (isNyx) - g.drawImage(FSkinImage.NYX_M, x, y, w, (h / 2) + (h / 5)); break; case 3: - g.drawImage(isPW ? FSkinImage.PWBG_M : FSkinImage.CARDBG_M, x, y, w, h); - if (isNyx) - g.drawImage(FSkinImage.NYX_M, x, y, w, (h / 2) + (h / 5)); + if (state.isVehicle()) + g.drawImage(FSkinTexture.CARDBG_V, x, y, w, h); + else if (isNyx) + g.drawImage(FSkinTexture.NYX_M, x, y, w, h); + else + g.drawImage(isPW ? FSkinTexture.PWBG_M : FSkinTexture.CARDBG_M, x, y, w, h); break; default: - g.drawImage(isPW ? FSkinImage.PWBG_C : FSkinImage.CARDBG_C, x, y, w, h); + if (state.isVehicle()) + g.drawImage(FSkinTexture.CARDBG_V, x, y, w, h); + else if (isNyx) + g.drawImage(FSkinTexture.NYX_C, x, y, w, h); + else + g.drawImage(isPW ? FSkinTexture.PWBG_C : FSkinTexture.CARDBG_C, x, y, w, h); break; } return colors; diff --git a/forge-gui-mobile/src/forge/card/CardRenderer.java b/forge-gui-mobile/src/forge/card/CardRenderer.java index b2db4286d10..3be0823cad2 100644 --- a/forge-gui-mobile/src/forge/card/CardRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardRenderer.java @@ -594,7 +594,7 @@ public class CardRenderer { } } else { //if card has invalid or no texture due to sudden changes in ImageCache, draw CardImageRenderer instead and wait for it to refresh automatically - CardImageRenderer.drawCardImage(g, CardView.getCardForUi(pc), false, x, y, w, h, pos, Forge.enableUIMask.equals("Art"), true); + CardImageRenderer.drawCardImage(g, CardView.getCardForUi(pc), false, x, y, w, h, pos, true, true); } } @@ -662,7 +662,7 @@ public class CardRenderer { drawFoilEffect(g, card, x, y, w, h, false); } else { //if card has invalid or no texture due to sudden changes in ImageCache, draw CardImageRenderer instead and wait for it to refresh automatically - CardImageRenderer.drawCardImage(g, card, showAltState, x, y, w, h, pos, Forge.enableUIMask.equals("Art"), false, isChoiceList, !showCardIdOverlay(card)); + CardImageRenderer.drawCardImage(g, card, showAltState, x, y, w, h, pos, true, false, isChoiceList, !showCardIdOverlay(card)); } g.setAlphaComposite(oldAlpha); } diff --git a/forge-gui-mobile/src/forge/screens/match/views/VAvatar.java b/forge-gui-mobile/src/forge/screens/match/views/VAvatar.java index 10722d558e7..91eb7663829 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VAvatar.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VAvatar.java @@ -2,7 +2,6 @@ package forge.screens.match.views; import com.badlogic.gdx.Input; import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Align; @@ -10,7 +9,6 @@ import forge.Forge; import forge.Graphics; import forge.animation.ForgeAnimation; import forge.assets.FImage; -import forge.assets.FSkin; import forge.assets.FSkinColor; import forge.assets.FSkinFont; import forge.game.card.CounterEnumType; @@ -44,9 +42,8 @@ public class VAvatar extends FDisplayObject { avatarAnimation = new AvatarAnimation(); } private class AvatarAnimation extends ForgeAnimation { - private static final float DURATION = 0.6f; + private static final float DURATION = 0.8f; private float progress = 0; - Texture splatter = FSkin.splatter; private void drawAvatar(Graphics g, FImage image, float x, float y, float w, float h) { float percentage = progress / DURATION; @@ -60,23 +57,14 @@ public class VAvatar extends FDisplayObject { float oldAlpha = g.getfloatAlphaComposite(); float fade = 1-(percentage*1); if (amount > 0) { - g.drawAvatarImage(image, x, y, w, h, player.getHasLost()); + g.drawAvatarImage(image, x, y, w, h, player.getHasLost(), 0); drawPlayerIndicator(g, w, h, percentage); g.setAlphaComposite(fade); g.drawRect(w / 12f, Color.WHITE, 0, 0, w, h); g.drawOutlinedText("+"+amount, Forge.altZoneTabs ? LIFE_FONT_ALT : LIFE_FONT, Color.WHITE, Color.SKY, 0, (getHeight()/2)*fade, getWidth(), getHeight(), false, Align.center, true); g.setAlphaComposite(oldAlpha); } else if (amount < 0) { - if (splatter == null) { - g.setColorRGBA(1, percentage, percentage, oldAlpha); - g.drawAvatarImage(image, x, y, w, h, player.getHasLost()); - g.resetColorRGBA(oldAlpha); - } else { - g.drawAvatarImage(image, x, y, w, h, player.getHasLost()); - g.setAlphaComposite(fade); - g.drawImage(splatter, x-mod/2, y-mod/2, w+mod, h+mod); - g.setAlphaComposite(oldAlpha); - } + g.drawAvatarImage(image, x, y, w, h, player.getHasLost(), 1-percentage); drawPlayerIndicator(g, w, h, percentage); g.setAlphaComposite(fade); g.drawOutlinedText(String.valueOf(amount), Forge.altZoneTabs ? LIFE_FONT_ALT : LIFE_FONT, Color.RED, Color.ORANGE, 0, (getHeight()/2)*fade, getWidth(), getHeight(), false, Align.center, true); @@ -120,11 +108,11 @@ public class VAvatar extends FDisplayObject { avatarAnimation.start(); avatarAnimation.drawAvatar(g, image, 0, 0, w, h); } else { - g.drawAvatarImage(image, 0, 0, w, h, player.getHasLost()); + g.drawAvatarImage(image, 0, 0, w, h, player.getHasLost(), 0); drawPlayerIndicator(g, w, h, 1); } } else { - g.drawAvatarImage(image, 0, 0, w, h, player.getHasLost()); + g.drawAvatarImage(image, 0, 0, w, h, player.getHasLost(), 0); } if (Forge.altPlayerLayout && !Forge.altZoneTabs && Forge.isLandscapeMode()) diff --git a/forge-gui/res/blockdata/blocks.txt b/forge-gui/res/blockdata/blocks.txt index d78703a2e27..746f9fd754c 100644 --- a/forge-gui/res/blockdata/blocks.txt +++ b/forge-gui/res/blockdata/blocks.txt @@ -103,6 +103,7 @@ 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 +Alchemy Horizons: Baldur's Gate, 3/6/HBG, HBG Double Masters 2022, 3/6/2X2, 2X2 Dominaria United, 3/6/DMU, DMU The Brothers' War, 3/6/BRO, BRO diff --git a/forge-gui/res/cardsfolder/a/afiya_grove.txt b/forge-gui/res/cardsfolder/a/afiya_grove.txt index 24b946f0a70..f5438b4f105 100644 --- a/forge-gui/res/cardsfolder/a/afiya_grove.txt +++ b/forge-gui/res/cardsfolder/a/afiya_grove.txt @@ -5,6 +5,6 @@ K:etbCounter:P1P1:3 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigMoveCounter | TriggerDescription$ At the beginning of your upkeep, move a +1/+1 counter from CARDNAME onto target creature. SVar:TrigMoveCounter:DB$ MoveCounter | Source$ Self | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ P1P1 | CounterNum$ 1 T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Card.Self+counters_EQ0_P1P1 | Execute$ TrigSac | TriggerDescription$ When CARDNAME has no +1/+1 counters on it, sacrifice it. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:NeedsToPlay:Creature.YouCtrl Oracle:Afiya Grove enters the battlefield with three +1/+1 counters on it.\nAt the beginning of your upkeep, move a +1/+1 counter from Afiya Grove onto target creature.\nWhen Afiya Grove has no +1/+1 counters on it, sacrifice it. diff --git a/forge-gui/res/cardsfolder/a/amulet_of_quoz.txt b/forge-gui/res/cardsfolder/a/amulet_of_quoz.txt index f22b07f61e3..ae79d3d002f 100644 --- a/forge-gui/res/cardsfolder/a/amulet_of_quoz.txt +++ b/forge-gui/res/cardsfolder/a/amulet_of_quoz.txt @@ -2,7 +2,7 @@ Name:Amulet of Quoz ManaCost:6 Types:Artifact K:Remove CARDNAME from your deck before playing if you're not playing for ante. -A:AB$ Dig | Cost$ T Sac<1/CARDNAME> | ValidTgts$ Opponent | DestinationZone$ Ante | DigNum$ 1 | ChangeNum$ All | RememberChanged$ True | Optional$ True | SubAbility$ DBFlip | PlayerTurn$ True | ActivationPhases$ Upkeep | SpellDescription$ Target opponent may ante the top card of their library. If they don't, you flip a coin. If you win the flip, that player loses the game. If you lose the flip, you lose the game. Activate only during your upkeep. +A:AB$ Dig | Cost$ T Sac<1/CARDNAME> | ValidTgts$ Opponent | DestinationZone$ Ante | DigNum$ 1 | ChangeNum$ All | RememberChanged$ True | Optional$ True | PromptToSkipOptionalAbility$ True | SubAbility$ DBFlip | PlayerTurn$ True | ActivationPhases$ Upkeep | SpellDescription$ Target opponent may ante the top card of their library. If they don't, you flip a coin. If you win the flip, that player loses the game. If you lose the flip, you lose the game. Activate only during your upkeep. SVar:DBFlip:DB$ FlipACoin | Caller$ You | WinSubAbility$ OppLoseGame | LoseSubAbility$ YouLoseGame | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ0 | SubAbility$ DBCleanup SVar:OppLoseGame:DB$ LosesGame | Defined$ Targeted SVar:YouLoseGame:DB$ LosesGame | Defined$ You diff --git a/forge-gui/res/cardsfolder/a/archway_commons.txt b/forge-gui/res/cardsfolder/a/archway_commons.txt index 5e5183603f1..aceadb05e5b 100644 --- a/forge-gui/res/cardsfolder/a/archway_commons.txt +++ b/forge-gui/res/cardsfolder/a/archway_commons.txt @@ -3,7 +3,7 @@ ManaCost:no cost Types:Land K:CARDNAME enters the battlefield tapped. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you pay {1}. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | UnlessCost$ 1 | UnlessPayer$ You +SVar:TrigSac:DB$ Sacrifice | UnlessCost$ 1 | UnlessPayer$ You A:AB$ Mana | Cost$ T | Produced$ Any | SpellDescription$ Add one mana of any color. SVar:NeedsToPlay:Land.untapped+YouCtrl Oracle:Archway Commons enters the battlefield tapped.\nWhen Archway Commons enters the battlefield, sacrifice it unless you pay {1}.\n{T}: Add one mana of any color. diff --git a/forge-gui/res/cardsfolder/a/ashcoat_of_the_shadow_swarm.txt b/forge-gui/res/cardsfolder/a/ashcoat_of_the_shadow_swarm.txt index 1d808fc1103..af54e6306ac 100644 --- a/forge-gui/res/cardsfolder/a/ashcoat_of_the_shadow_swarm.txt +++ b/forge-gui/res/cardsfolder/a/ashcoat_of_the_shadow_swarm.txt @@ -7,7 +7,7 @@ T:Mode$ Blocks | ValidCard$ Card.Self | Execute$ TrigPump | Secondary$ True | Tr SVar:TrigPump:DB$ PumpAll | ValidCards$ Rat.Other+YouCtrl | NumAtt$ +X | NumDef$ +X SVar:X:Count$Valid Rat.YouCtrl T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigChange | TriggerDescription$ At the beginning of your end step, you may mill four cards. If you do, return up to two Rat creature cards from your graveyard to your hand. (To mill a card, put the top card of your library into your graveyard.) -SVar:TrigChange:AB$ ChangeZone | Cost$ Mill<4> | Origin$ Graveyard | Destination$ Hand | ChangeType$ Rat.Creature+YouOwn | ChangeNum$ 2 | SelectPrompt$ Select up to two Rat creature cards +SVar:TrigChange:AB$ ChangeZone | Cost$ Mill<4> | Origin$ Graveyard | Destination$ Hand | ChangeType$ Rat.Creature+YouOwn | ChangeNum$ 2 | Hidden$ True | SelectPrompt$ Select up to two Rat creature cards SVar:HasAttackEffect:TRUE SVar:HasBlockEffect:TRUE DeckNeeds:Type$Rat diff --git a/forge-gui/res/cardsfolder/a/avatar_of_discord.txt b/forge-gui/res/cardsfolder/a/avatar_of_discord.txt index af4bcfc8f0e..32b5179a96b 100644 --- a/forge-gui/res/cardsfolder/a/avatar_of_discord.txt +++ b/forge-gui/res/cardsfolder/a/avatar_of_discord.txt @@ -4,7 +4,7 @@ Types:Creature Avatar PT:5/3 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBSacSelf | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you discard two cards. -SVar:DBSacSelf:DB$ Sacrifice | Defined$ Self | UnlessCost$ Discard<2/Card> | UnlessPayer$ You +SVar:DBSacSelf:DB$ Sacrifice | UnlessCost$ Discard<2/Card> | UnlessPayer$ You SVar:NeedsToPlayVar:Y GE3 SVar:Y:Count$InYourHand Oracle:({B/R} can be paid with either {B} or {R}.)\nFlying\nWhen Avatar of Discord enters the battlefield, sacrifice it unless you discard two cards. diff --git a/forge-gui/res/cardsfolder/a/azorius_herald.txt b/forge-gui/res/cardsfolder/a/azorius_herald.txt index 1d0a0b6c00e..fe45c73e6c5 100644 --- a/forge-gui/res/cardsfolder/a/azorius_herald.txt +++ b/forge-gui/res/cardsfolder/a/azorius_herald.txt @@ -6,7 +6,7 @@ S:Mode$ CantBlockBy | ValidAttacker$ Creature.Self | Description$ CARDNAME can't T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigGainLife | TriggerDescription$ When CARDNAME enters the battlefield, you gain 4 life. T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSac | ManaNotSpent$ U | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless {U} was spent to cast it. SVar:TrigGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 4 -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:ManaNeededToAvoidNegativeEffect:blue AI:RemoveDeck:Random DeckNeeds:Color$Blue diff --git a/forge-gui/res/cardsfolder/b/barbarian_outcast.txt b/forge-gui/res/cardsfolder/b/barbarian_outcast.txt index 22f4ae8bbe5..84a85548c0c 100644 --- a/forge-gui/res/cardsfolder/b/barbarian_outcast.txt +++ b/forge-gui/res/cardsfolder/b/barbarian_outcast.txt @@ -3,7 +3,7 @@ ManaCost:1 R Types:Creature Human Barbarian Beast PT:2/2 T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Swamp.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no Swamps, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:NeedsToPlay:Swamp.YouCtrl AI:RemoveDeck:Random DeckNeeds:Color$Black diff --git a/forge-gui/res/cardsfolder/b/bog_serpent.txt b/forge-gui/res/cardsfolder/b/bog_serpent.txt index 3b0cd4389d4..8c2e55a3f49 100644 --- a/forge-gui/res/cardsfolder/b/bog_serpent.txt +++ b/forge-gui/res/cardsfolder/b/bog_serpent.txt @@ -4,6 +4,6 @@ Types:Creature Serpent PT:5/5 S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Swamp | Description$ CARDNAME can't attack unless defending player controls a Swamp. T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Swamp.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no Swamps, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:NeedsToPlay:Swamp.YouCtrl Oracle:Bog Serpent can't attack unless defending player controls a Swamp.\nWhen you control no Swamps, sacrifice Bog Serpent. diff --git a/forge-gui/res/cardsfolder/b/boneshard_slasher.txt b/forge-gui/res/cardsfolder/b/boneshard_slasher.txt index 46117accf96..5202974f2ba 100644 --- a/forge-gui/res/cardsfolder/b/boneshard_slasher.txt +++ b/forge-gui/res/cardsfolder/b/boneshard_slasher.txt @@ -5,6 +5,6 @@ PT:1/1 K:Flying S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 2 | AddToughness$ 2 | AddTrigger$ SpellTarget | AddSVar$ SlasherSac & SlasherTarget | Condition$ Threshold | Description$ Threshold — As long as seven or more cards are in your graveyard, CARDNAME gets +2/+2 and has "When CARDNAME becomes the target of a spell or ability, sacrifice it." SVar:SpellTarget:Mode$ BecomesTarget | ValidTarget$ Card.Self | TriggerZones$ Battlefield | Execute$ SlasherSac | TriggerDescription$ When CARDNAME becomes the target of a spell or ability, sacrifice it. -SVar:SlasherSac:DB$ Sacrifice | Defined$ Self +SVar:SlasherSac:DB$ Sacrifice SVar:SlasherTarget:Targeting:Dies Oracle:Flying\nThreshold — As long as seven or more cards are in your graveyard, Boneshard Slasher gets +2/+2 and has "When Boneshard Slasher becomes the target of a spell or ability, sacrifice it." diff --git a/forge-gui/res/cardsfolder/b/brink_of_madness.txt b/forge-gui/res/cardsfolder/b/brink_of_madness.txt index bf7f9148a8b..adce68f3f9c 100644 --- a/forge-gui/res/cardsfolder/b/brink_of_madness.txt +++ b/forge-gui/res/cardsfolder/b/brink_of_madness.txt @@ -2,7 +2,7 @@ Name:Brink of Madness ManaCost:2 B B Types:Enchantment T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | IsPresent$ Card.YouCtrl | PresentZone$ Hand | PresentCompare$ EQ0 | TriggerZones$ Battlefield | Execute$ TrigSacDiscard | TriggerDescription$ At the beginning of your upkeep, if you have no cards in hand, sacrifice CARDNAME and target opponent discards their hand. -SVar:TrigSacDiscard:DB$ Sacrifice | Defined$ Self | SubAbility$ DBDiscard +SVar:TrigSacDiscard:DB$ Sacrifice | SubAbility$ DBDiscard SVar:DBDiscard:DB$ Discard | ValidTgts$ Opponent | TgtPrompt$ Select target opponent to discard their hand | Mode$ Hand SVar:NonStackingEffect:True Oracle:At the beginning of your upkeep, if you have no cards in hand, sacrifice Brink of Madness and target opponent discards their hand. diff --git a/forge-gui/res/cardsfolder/b/bull_elephant.txt b/forge-gui/res/cardsfolder/b/bull_elephant.txt index 3037b89a11c..5e32b22151a 100644 --- a/forge-gui/res/cardsfolder/b/bull_elephant.txt +++ b/forge-gui/res/cardsfolder/b/bull_elephant.txt @@ -2,11 +2,8 @@ Name:Bull Elephant ManaCost:3 G Types:Creature Elephant PT:4/4 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return two Forests you control to their owner's hand. -SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | ChangeType$ Forest.YouCtrl | ChangeNum$ 2 | RememberChanged$ True | SubAbility$ DBSac -SVar:DBSac:DB$ Sacrifice | Defined$ Self | SubAbility$ DBCleanup | ConditionCheckSVar$ X | ConditionSVarCompare$ LT2 -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:X:Remembered$Amount +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return two Forests you control to their owner's hand. +SVar:TrigSac:DB$ Sacrifice | UnlessCost$ Return<2/Forest> | UnlessPayer$ You SVar:NeedsToPlayVar:Y GE2 SVar:Y:Count$Valid Forest.YouCtrl Oracle:When Bull Elephant enters the battlefield, sacrifice it unless you return two Forests you control to their owner's hand. diff --git a/forge-gui/res/cardsfolder/c/cabaretti_courtyard.txt b/forge-gui/res/cardsfolder/c/cabaretti_courtyard.txt index ba7c6806170..3c254d781ce 100644 --- a/forge-gui/res/cardsfolder/c/cabaretti_courtyard.txt +++ b/forge-gui/res/cardsfolder/c/cabaretti_courtyard.txt @@ -2,7 +2,7 @@ Name:Cabaretti Courtyard ManaCost:no cost Types:Land T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBSacrifice | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it. When you do, search your library for a basic Mountain, Forest, or Plains card, put it onto the battlefield tapped, then shuffle and you gain 1 life. -SVar:DBSacrifice:DB$ Sacrifice | Defined$ Self | RememberSacrificed$ True | SubAbility$ DBImmediateTrigger +SVar:DBSacrifice:DB$ Sacrifice | RememberSacrificed$ True | SubAbility$ DBImmediateTrigger SVar:DBImmediateTrigger:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card | Execute$ DBChangeZone | SubAbility$ DBCleanup | TriggerDescription$ Search your library for a basic Mountain, Forest, or Plains card, put it onto the battlefield tapped, then shuffle and you gain 1 life. SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Mountain+Basic,Land.Forest+Basic,Land.Plains+Basic | ChangeNum$ 1 | SubAbility$ DBGainLife SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 diff --git a/forge-gui/res/cardsfolder/c/call_of_the_full_moon.txt b/forge-gui/res/cardsfolder/c/call_of_the_full_moon.txt index 0d4861e24be..25646e90ccd 100644 --- a/forge-gui/res/cardsfolder/c/call_of_the_full_moon.txt +++ b/forge-gui/res/cardsfolder/c/call_of_the_full_moon.txt @@ -5,5 +5,5 @@ K:Enchant creature A:SP$ Attach | Cost$ 1 R | ValidTgts$ Creature | AILogic$ Pump S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 3 | AddToughness$ 2 | AddKeyword$ Trample | Description$ Enchanted creature gets +3/+2 and has trample. T:Mode$ Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice Oracle:Enchant creature\nEnchanted creature gets +3/+2 and has trample. (It can deal excess combat damage to the player or planeswalker it's attacking.)\nAt the beginning of each upkeep, if a player cast two or more spells last turn, sacrifice Call of the Full Moon. diff --git a/forge-gui/res/cardsfolder/c/call_to_the_grave.txt b/forge-gui/res/cardsfolder/c/call_to_the_grave.txt index e3626c76bb9..99eda0a642b 100644 --- a/forge-gui/res/cardsfolder/c/call_to_the_grave.txt +++ b/forge-gui/res/cardsfolder/c/call_to_the_grave.txt @@ -4,7 +4,7 @@ Types:Enchantment T:Mode$ Phase | Phase$ Upkeep | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ At the beginning of each player's upkeep, that player sacrifices a non-Zombie creature. SVar:TrigSac:DB$ Sacrifice | SacValid$ Creature.nonZombie | Defined$ TriggeredPlayer T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | IsPresent$ Creature | PresentCompare$ EQ0 | Execute$ TrigSacSelf | TriggerDescription$ At the beginning of the end step, if no creatures are on the battlefield, sacrifice CARDNAME. -SVar:TrigSacSelf:DB$ Sacrifice | Defined$ Self +SVar:TrigSacSelf:DB$ Sacrifice AI:RemoveDeck:Random DeckHints:Type$Zombie Oracle:At the beginning of each player's upkeep, that player sacrifices a non-Zombie creature.\nAt the beginning of the end step, if no creatures are on the battlefield, sacrifice Call to the Grave. diff --git a/forge-gui/res/cardsfolder/c/captain_rex_nebula.txt b/forge-gui/res/cardsfolder/c/captain_rex_nebula.txt index e0a69cfbaa5..1711c671f50 100644 --- a/forge-gui/res/cardsfolder/c/captain_rex_nebula.txt +++ b/forge-gui/res/cardsfolder/c/captain_rex_nebula.txt @@ -6,7 +6,7 @@ T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefiel SVar:TrigAnimate:DB$ Animate | ValidTgts$ Permanent.nonLand+YouCtrl | TgtPrompt$ Select target nonland permanent you control | RemoveCardTypes$ True | Power$ X | Toughness$ X | Types$ Vehicle,Artifact | Keywords$ Crew:2 | Triggers$ CrashLand SVar:CrashLand:Mode$ DamageDealtOnce | ValidSource$ Card.Self | ValidTarget$ Player,Permanent | Execute$ RollCounters | TriggerZones$ Battlefield | TriggerDescription$ Crash Land — Whenever this Vehicle deals damage, roll a six-sided die. If the result is equal to this Vehicle's mana value, sacrifice this Vehicle, then it deals that much damage to any target. SVar:RollCounters:DB$ RollDice | ResultSVar$ Result | SubAbility$ Crash -SVar:Crash:DB$ Sacrifice | Defined$ Card.Self | ConditionCheckSVar$ Result | ConditionSVarCompare$ EQY | SubAbility$ CrashDamage +SVar:Crash:DB$ Sacrifice | ConditionCheckSVar$ Result | ConditionSVarCompare$ EQY | SubAbility$ CrashDamage SVar:CrashDamage:DB$ DealDamage | ValidTgt$ Planeswalker,Player,Permanent | TgtPromp$ Choose any target | NumDmg$ Y | ConditionCheckSVar$ Result | ConditionSVarCompare$ EQY SVar:X:Targeted$CardManaCost SVar:Y:Count$CardManaCost diff --git a/forge-gui/res/cardsfolder/c/chisei_heart_of_oceans.txt b/forge-gui/res/cardsfolder/c/chisei_heart_of_oceans.txt index 5e9cca07dfe..0b9ee538c2a 100644 --- a/forge-gui/res/cardsfolder/c/chisei_heart_of_oceans.txt +++ b/forge-gui/res/cardsfolder/c/chisei_heart_of_oceans.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Spirit PT:4/4 K:Flying T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ At the beginning of your upkeep, sacrifice CARDNAME unless you remove a counter from a permanent you control. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | UnlessPayer$ You | UnlessCost$ RemoveAnyCounter<1/Any/Permanent.YouCtrl/a permanent you control> +SVar:TrigSac:DB$ Sacrifice | UnlessPayer$ You | UnlessCost$ RemoveAnyCounter<1/Any/Permanent.YouCtrl/a permanent you control> DeckNeeds:Ability$Counters SVar:NeedsToPlay:Creature.YouCtrl+HasCounters SVar:AIRemoveCounterCostPriority:ANY diff --git a/forge-gui/res/cardsfolder/c/city_of_traitors.txt b/forge-gui/res/cardsfolder/c/city_of_traitors.txt index 41c06b16a8e..874a6cad0b9 100644 --- a/forge-gui/res/cardsfolder/c/city_of_traitors.txt +++ b/forge-gui/res/cardsfolder/c/city_of_traitors.txt @@ -2,7 +2,7 @@ Name:City of Traitors ManaCost:no cost Types:Land T:Mode$ LandPlayed | ValidCard$ Land.Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When you play another land, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice A:AB$ Mana | Cost$ T | Produced$ C | Amount$ 2 | SpellDescription$ Add {C}{C}. AI:RemoveDeck:All Oracle:When you play another land, sacrifice City of Traitors.\n{T}: Add {C}{C}. diff --git a/forge-gui/res/cardsfolder/c/cocoon.txt b/forge-gui/res/cardsfolder/c/cocoon.txt index 4df87bb8e8f..3f1a710f628 100644 --- a/forge-gui/res/cardsfolder/c/cocoon.txt +++ b/forge-gui/res/cardsfolder/c/cocoon.txt @@ -12,7 +12,7 @@ SVar:TrigRemoveCounter:DB$ RemoveCounter | Defined$ Self | CounterType$ PUPA | C # TODO need EnchantedLKI because it isn't enchanted anymore if this is sacrificed SVar:TrigPutCounter:DB$ PutCounter | Defined$ Enchanted | CounterType$ P1P1 | CounterNum$ 1 | ConditionCheckSVar$ X | ConditionSVarCompare$ LE0 | SubAbility$ TrigPump SVar:TrigPump:DB$ Pump | Defined$ Enchanted | KW$ Flying | Duration$ Permanent | ConditionCheckSVar$ X | ConditionSVarCompare$ LE0 | SubAbility$ TrigSac -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | ConditionCheckSVar$ X | ConditionSVarCompare$ LE0 | SubAbility$ DBCleanup +SVar:TrigSac:DB$ Sacrifice | ConditionCheckSVar$ X | ConditionSVarCompare$ LE0 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Count$RememberedSize AI:RemoveDeck:Random diff --git a/forge-gui/res/cardsfolder/c/colfenors_urn.txt b/forge-gui/res/cardsfolder/c/colfenors_urn.txt index aebe7f82eab..d7a33d281e0 100644 --- a/forge-gui/res/cardsfolder/c/colfenors_urn.txt +++ b/forge-gui/res/cardsfolder/c/colfenors_urn.txt @@ -3,8 +3,8 @@ ManaCost:3 Types:Artifact T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Battlefield | ValidCard$ Creature.toughnessGE4+YouOwn | OptionalDecider$ You | Execute$ TrigExile | TriggerDescription$ Whenever a creature with toughness 4 or greater is put into your graveyard from the battlefield, you may exile it. SVar:TrigExile:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | Defined$ TriggeredNewCardLKICopy | RememberChanged$ True -T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | CheckSVar$ X | SVarCompare$ GE3 | Execute$ TrigReturnAll | TriggerDescription$ At the beginning of the end step, if three or more cards have been exiled with Colfenor's Urn, sacrifice it. If you do, return those cards to the battlefield under their owner's control. +T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | CheckSVar$ X | SVarCompare$ GE3 | Execute$ TrigReturnAll | TriggerDescription$ At the beginning of the end step, if three or more cards have been exiled with CARDNAME, sacrifice it. If you do, return those cards to the battlefield under their owner's control. SVar:TrigReturnAll:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Exile | Destination$ Battlefield | SubAbility$ DBSacSelf -SVar:DBSacSelf:DB$ Sacrifice | Defined$ Self +SVar:DBSacSelf:DB$ Sacrifice SVar:X:Remembered$Amount Oracle:Whenever a creature with toughness 4 or greater is put into your graveyard from the battlefield, you may exile it.\nAt the beginning of the end step, if three or more cards have been exiled with Colfenor's Urn, sacrifice it. If you do, return those cards to the battlefield under their owner's control. diff --git a/forge-gui/res/cardsfolder/c/coral_atoll.txt b/forge-gui/res/cardsfolder/c/coral_atoll.txt index 69d55d668ba..ee7cce86157 100644 --- a/forge-gui/res/cardsfolder/c/coral_atoll.txt +++ b/forge-gui/res/cardsfolder/c/coral_atoll.txt @@ -3,7 +3,7 @@ ManaCost:no cost Types:Land K:CARDNAME enters the battlefield tapped. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return an untapped Island you control to its owner's hand. -SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Return<1/Island.untapped/untapped Island> | UnlessPayer$ You +SVar:TrigSacUnless:DB$ Sacrifice | UnlessCost$ Return<1/Island.untapped/untapped Island> | UnlessPayer$ You A:AB$ Mana | Cost$ T | Produced$ C U | SpellDescription$ Add {C}{U}. SVar:NeedsToPlay:Land.Island+YouCtrl+untapped Oracle:Coral Atoll enters the battlefield tapped.\nWhen Coral Atoll enters the battlefield, sacrifice it unless you return an untapped Island you control to its owner's hand.\n{T}: Add {C}{U}. diff --git a/forge-gui/res/cardsfolder/c/coral_net.txt b/forge-gui/res/cardsfolder/c/coral_net.txt index 2430df84aa9..82815d5faeb 100644 --- a/forge-gui/res/cardsfolder/c/coral_net.txt +++ b/forge-gui/res/cardsfolder/c/coral_net.txt @@ -6,7 +6,7 @@ A:SP$ Attach | Cost$ U | ValidTgts$ Creature.Green,Creature.White | TgtPrompt$ S S:Mode$ Continuous | Affected$ Creature.AttachedBy | AddTrigger$ TrigCoralPhase | AddSVar$ TrigCoralDiscard & DBCoralSacrifice & DBCoralCleanup | Description$ Enchanted creature has "At the beginning of your upkeep, sacrifice this creature unless you discard a card." SVar:TrigCoralPhase:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigCoralDiscard | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of your upkeep, sacrifice this creature unless you discard a card. SVar:TrigCoralDiscard:DB$ Discard | Defined$ You | Mode$ TgtChoose | NumCards$ 1 | Optional$ True | RememberDiscarded$ True | SubAbility$ DBCoralSacrifice -SVar:DBCoralSacrifice:DB$ Sacrifice | Defined$ Self | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ0 | SubAbility$ DBCoralCleanup +SVar:DBCoralSacrifice:DB$ Sacrifice | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ0 | SubAbility$ DBCoralCleanup SVar:DBCoralCleanup:DB$ Cleanup | ClearRemembered$ True AI:RemoveDeck:Random SVar:NonStackingAttachEffect:True diff --git a/forge-gui/res/cardsfolder/c/court_hussar.txt b/forge-gui/res/cardsfolder/c/court_hussar.txt index 2c6d786cb9a..ff2891e9d1c 100644 --- a/forge-gui/res/cardsfolder/c/court_hussar.txt +++ b/forge-gui/res/cardsfolder/c/court_hussar.txt @@ -6,7 +6,7 @@ K:Vigilance T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDig | TriggerDescription$ When CARDNAME enters the battlefield, look at the top three cards of your library, then put one of them into your hand and the rest on the bottom of your library in any order. T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSac | ManaNotSpent$ W | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless {W} was spent to cast it. SVar:TrigDig:DB$ Dig | DigNum$ 3 | Defined$ You -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:ManaNeededToAvoidNegativeEffect:white AI:RemoveDeck:Random DeckNeeds:Color$White diff --git a/forge-gui/res/cardsfolder/c/covetous_dragon.txt b/forge-gui/res/cardsfolder/c/covetous_dragon.txt index 03aef0406dc..9a53c7a1fbd 100644 --- a/forge-gui/res/cardsfolder/c/covetous_dragon.txt +++ b/forge-gui/res/cardsfolder/c/covetous_dragon.txt @@ -4,7 +4,7 @@ Types:Creature Dragon PT:6/5 K:Flying T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Artifact.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no artifacts, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:NeedsToPlay:Artifact.YouCtrl AI:RemoveDeck:Random Oracle:Flying\nWhen you control no artifacts, sacrifice Covetous Dragon. diff --git a/forge-gui/res/cardsfolder/c/crackling_emergence.txt b/forge-gui/res/cardsfolder/c/crackling_emergence.txt index b26ffd77a55..d1ee523d05c 100644 --- a/forge-gui/res/cardsfolder/c/crackling_emergence.txt +++ b/forge-gui/res/cardsfolder/c/crackling_emergence.txt @@ -5,7 +5,7 @@ K:Enchant land you control A:SP$ Attach | Cost$ 1 R | ValidTgts$ Land.YouCtrl | TgtPrompt$ Select target land you control | AILogic$ Animate S:Mode$ Continuous | Affected$ Land.EnchantedBy | AddType$ Creature & Spirit | SetColor$ Red | SetPower$ 3 | SetToughness$ 3 | AddKeyword$ Haste | Description$ Enchanted land is a 3/3 red Spirit creature with haste. It's still a land. R:Event$ Destroy | ValidCard$ Card.EnchantedBy | ReplaceWith$ CracklingEgress | Description$ If enchanted land would be destroyed, instead sacrifice CARDNAME and that land gains indestructible until end of turn. -SVar:CracklingEgress:DB$ Sacrifice | Defined$ Card.Self | SubAbility$ DBPump +SVar:CracklingEgress:DB$ Sacrifice | SubAbility$ DBPump SVar:DBPump:DB$ Pump | Defined$ Enchanted | KW$ Indestructible DeckHas:Ability$Sacrifice & Type$Spirit Oracle:Enchant land you control\nEnchanted land is a 3/3 red Spirit creature with haste. It's still a land.\nIf enchanted land would be destroyed, instead sacrifice Crackling Emergence and that land gains indestructible until end of turn. diff --git a/forge-gui/res/cardsfolder/c/crosiss_catacombs.txt b/forge-gui/res/cardsfolder/c/crosiss_catacombs.txt index 547b91de983..7168125d759 100644 --- a/forge-gui/res/cardsfolder/c/crosiss_catacombs.txt +++ b/forge-gui/res/cardsfolder/c/crosiss_catacombs.txt @@ -3,6 +3,6 @@ ManaCost:no cost Types:Land Lair A:AB$ Mana | Cost$ T | Produced$ Combo U B R | SpellDescription$ Add {U}, {B}, or {R}. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return a non-Lair land you control to its owner's hand. -SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Return<1/Land.nonLair/non-Lair land> | UnlessPayer$ You +SVar:TrigSacUnless:DB$ Sacrifice | UnlessCost$ Return<1/Land.nonLair/non-Lair land> | UnlessPayer$ You SVar:NeedsToPlay:Land.nonLair+YouCtrl Oracle:When Crosis's Catacombs enters the battlefield, sacrifice it unless you return a non-Lair land you control to its owner's hand.\n{T}: Add {U}, {B}, or {R}. diff --git a/forge-gui/res/cardsfolder/c/crypt_champion.txt b/forge-gui/res/cardsfolder/c/crypt_champion.txt index aa75415dcb9..8f1905fec1f 100644 --- a/forge-gui/res/cardsfolder/c/crypt_champion.txt +++ b/forge-gui/res/cardsfolder/c/crypt_champion.txt @@ -7,6 +7,6 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSac | ManaNotSpent$ R | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless {R} was spent to cast it. SVar:TrigChangeZone:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBChangeZone SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.RememberedPlayerCtrl+cmcLE3 | ChangeNum$ 1 | Hidden$ True | DefinedPlayer$ Player.IsRemembered | Chooser$ Player.IsRemembered | Mandatory$ True -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:ManaNeededToAvoidNegativeEffect:red Oracle:Double strike\nWhen Crypt Champion enters the battlefield, each player puts a creature card with mana value 3 or less from their graveyard onto the battlefield.\nWhen Crypt Champion enters the battlefield, sacrifice it unless {R} was spent to cast it. diff --git a/forge-gui/res/cardsfolder/c/cursed_monstrosity.txt b/forge-gui/res/cardsfolder/c/cursed_monstrosity.txt index 7e217904bbc..95ae4a4e588 100644 --- a/forge-gui/res/cardsfolder/c/cursed_monstrosity.txt +++ b/forge-gui/res/cardsfolder/c/cursed_monstrosity.txt @@ -4,6 +4,6 @@ Types:Creature Horror PT:4/3 K:Flying T:Mode$ BecomesTarget | ValidTarget$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When CARDNAME becomes the target of a spell or ability, sacrifice it unless you discard a land card. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | UnlessCost$ Discard<1/Land> | UnlessPayer$ You +SVar:TrigSac:DB$ Sacrifice | UnlessCost$ Discard<1/Land> | UnlessPayer$ You SVar:Targeting:Dies Oracle:Flying\nWhenever Cursed Monstrosity becomes the target of a spell or ability, sacrifice it unless you discard a land card. diff --git a/forge-gui/res/cardsfolder/c/cyclone.txt b/forge-gui/res/cardsfolder/c/cyclone.txt index 0f8e594a6d9..79647a37c05 100644 --- a/forge-gui/res/cardsfolder/c/cyclone.txt +++ b/forge-gui/res/cardsfolder/c/cyclone.txt @@ -3,7 +3,7 @@ ManaCost:2 G G Types:Enchantment T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of your upkeep, put a wind counter on CARDNAME, then sacrifice CARDNAME unless you pay {G} for each wind counter on it. If you pay, CARDNAME deals damage equal to the number of wind counters on it to each creature and each player. SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ WIND | CounterNum$ 1 | SubAbility$ SacSelf -SVar:SacSelf:DB$ Sacrifice | Defined$ Card.Self | UnlessCost$ X | UnlessXColor$ G | UnlessPayer$ You | UnlessResolveSubs$ WhenPaid | SubAbility$ DBDamageAll +SVar:SacSelf:DB$ Sacrifice | UnlessCost$ X | UnlessXColor$ G | UnlessPayer$ You | UnlessResolveSubs$ WhenPaid | SubAbility$ DBDamageAll SVar:DBDamageAll:DB$ DamageAll | NumDmg$ X | ValidCards$ Creature | ValidPlayers$ Player SVar:X:Count$CardCounters.WIND AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/d/dance_of_many.txt b/forge-gui/res/cardsfolder/d/dance_of_many.txt index b34ad44ab34..b486eabfe49 100644 --- a/forge-gui/res/cardsfolder/d/dance_of_many.txt +++ b/forge-gui/res/cardsfolder/d/dance_of_many.txt @@ -7,7 +7,7 @@ T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.S SVar:TrigExile:DB$ ChangeZone | Defined$ Remembered | Origin$ Battlefield | Destination$ Exile | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.IsRemembered | Execute$ TrigSac | TriggerDescription$ When the token leaves the battlefield, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | SubAbility$ DBCleanup +SVar:TrigSac:DB$ Sacrifice | SubAbility$ DBCleanup K:UpkeepCost:U U DeckHas:Ability$Token|Sacrifice Oracle:When Dance of Many enters the battlefield, create a token that's a copy of target nontoken creature.\nWhen Dance of Many leaves the battlefield, exile the token.\nWhen the token leaves the battlefield, sacrifice Dance of Many.\nAt the beginning of your upkeep, sacrifice Dance of Many unless you pay {U}{U}. diff --git a/forge-gui/res/cardsfolder/d/dandan.txt b/forge-gui/res/cardsfolder/d/dandan.txt index 520a0aa1476..0271ddd07d1 100644 --- a/forge-gui/res/cardsfolder/d/dandan.txt +++ b/forge-gui/res/cardsfolder/d/dandan.txt @@ -4,7 +4,7 @@ Types:Creature Fish PT:4/1 S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Island | Description$ Dandân can't attack unless defending player controls an Island. T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Island.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no Islands, sacrifice Dandân. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:NeedsToPlay:Island.YouCtrl DeckHas:Ability$Sacrifice Oracle:Dandân can't attack unless defending player controls an Island.\nWhen you control no Islands, sacrifice Dandân. diff --git a/forge-gui/res/cardsfolder/d/darigaazs_caldera.txt b/forge-gui/res/cardsfolder/d/darigaazs_caldera.txt index 32207e371da..23ad913fafd 100644 --- a/forge-gui/res/cardsfolder/d/darigaazs_caldera.txt +++ b/forge-gui/res/cardsfolder/d/darigaazs_caldera.txt @@ -3,6 +3,6 @@ ManaCost:no cost Types:Land Lair A:AB$ Mana | Cost$ T | Produced$ Combo B R G | SpellDescription$ Add {B}, {R}, or {G}. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return a non-Lair land you control to its owner's hand. -SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Return<1/Land.nonLair/non-Lair land> | UnlessPayer$ You +SVar:TrigSacUnless:DB$ Sacrifice | UnlessCost$ Return<1/Land.nonLair/non-Lair land> | UnlessPayer$ You SVar:NeedsToPlay:Land.nonLair+YouCtrl Oracle:When Darigaaz's Caldera enters the battlefield, sacrifice it unless you return a non-Lair land you control to its owner's hand.\n{T}: Add {B}, {R}, or {G}. diff --git a/forge-gui/res/cardsfolder/d/decree_of_silence.txt b/forge-gui/res/cardsfolder/d/decree_of_silence.txt index e368dc63777..8ec2ac3a8c1 100644 --- a/forge-gui/res/cardsfolder/d/decree_of_silence.txt +++ b/forge-gui/res/cardsfolder/d/decree_of_silence.txt @@ -5,7 +5,7 @@ K:Cycling:4 U U T:Mode$ SpellCast | ValidCard$ Card.OppCtrl | Execute$ TrigCounterSpell | TriggerZones$ Battlefield | TriggerDescription$ Whenever an opponent casts a spell, counter that spell and put a depletion counter on CARDNAME. If there are three or more depletion counters on CARDNAME, sacrifice it. SVar:TrigCounterSpell:DB$ Counter | Defined$ TriggeredSpellAbility | SubAbility$ DBPutCounter SVar:DBPutCounter:DB$ PutCounter | CounterType$ DEPLETION | CounterNum$ 1 | Defined$ Self | SubAbility$ DBSac -SVar:DBSac:DB$ Sacrifice | Defined$ Self | ConditionCheckSVar$ DecreeX | ConditionSVarCompare$ GE1 +SVar:DBSac:DB$ Sacrifice | ConditionCheckSVar$ DecreeX | ConditionSVarCompare$ GE1 T:Mode$ Cycled | ValidCard$ Card.Self | Execute$ TrigCounter | OptionalDecider$ You | TriggerDescription$ When you cycle CARDNAME, you may counter target spell. SVar:TrigCounter:DB$ Counter | TargetType$ Spell | ValidTgts$ Card SVar:DecreeX:Count$Valid Card.Self+counters_GE3_DEPLETION diff --git a/forge-gui/res/cardsfolder/d/demonic_attorney.txt b/forge-gui/res/cardsfolder/d/demonic_attorney.txt index ee26573174c..52ef8ade9c1 100644 --- a/forge-gui/res/cardsfolder/d/demonic_attorney.txt +++ b/forge-gui/res/cardsfolder/d/demonic_attorney.txt @@ -2,7 +2,7 @@ Name:Demonic Attorney ManaCost:1 B B Types:Sorcery K:Remove CARDNAME from your deck before playing if you're not playing for ante. -A:SP$ Dig | Cost$ 1 B B | Defined$ Player | DigNum$ 1 | DestinationZone$ Ante | SpellDescription$ Each player antes the top card of their library. +A:SP$ Dig | Cost$ 1 B B | Defined$ Player | DigNum$ 1 | ChangeNum$ All | DestinationZone$ Ante | SpellDescription$ Each player antes the top card of their library. AI:RemoveDeck:All AI:RemoveDeck:Random Oracle:Remove Demonic Attorney from your deck before playing if you're not playing for ante.\nEach player antes the top card of their library. diff --git a/forge-gui/res/cardsfolder/d/dismiss_into_dream.txt b/forge-gui/res/cardsfolder/d/dismiss_into_dream.txt index 4e65082b11d..ede9d4929fb 100644 --- a/forge-gui/res/cardsfolder/d/dismiss_into_dream.txt +++ b/forge-gui/res/cardsfolder/d/dismiss_into_dream.txt @@ -3,7 +3,7 @@ ManaCost:6 U Types:Enchantment S:Mode$ Continuous | Affected$ Creature.OppCtrl | AddType$ Illusion | AddTrigger$ DismissTarget | AddSVar$ DismissSac & TargetingSac | Description$ Each creature your opponents control is an Illusion in addition to its other types and has "When this creature becomes the target of a spell or ability, sacrifice it." SVar:DismissTarget:Mode$ BecomesTarget | ValidTarget$ Card.Self | TriggerZones$ Battlefield | Execute$ DismissSac | TriggerDescription$ When CARDNAME becomes the target of a spell or ability, sacrifice it. -SVar:DismissSac:DB$ Sacrifice | Defined$ Self +SVar:DismissSac:DB$ Sacrifice SVar:NonStackingEffect:True SVar:TargetingSac:SVar:Targeting:Dies Oracle:Each creature your opponents control is an Illusion in addition to its other types and has "When this creature becomes the target of a spell or ability, sacrifice it." diff --git a/forge-gui/res/cardsfolder/d/disruption_aura.txt b/forge-gui/res/cardsfolder/d/disruption_aura.txt index 8f4390c5a48..b286a3535b4 100644 --- a/forge-gui/res/cardsfolder/d/disruption_aura.txt +++ b/forge-gui/res/cardsfolder/d/disruption_aura.txt @@ -5,6 +5,6 @@ K:Enchant artifact A:SP$ Attach | Cost$ 2 U | ValidTgts$ Artifact | TgtPrompt$ Select target artifact | AITgts$ Card.cmcGE1 | AILogic$ Curse S:Mode$ Continuous | Affected$ Artifact.EnchantedBy | AddTrigger$ TrigPhase | AddSVar$ TrigDisruptionAura | Description$ Enchanted artifact has "At the beginning of your upkeep, sacrifice this artifact unless you pay its mana cost." SVar:TrigPhase:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigDisruptionAura | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of your upkeep, sacrifice this artifact unless you pay its mana cost. -SVar:TrigDisruptionAura:DB$ Sacrifice | Defined$ Self | UnlessCost$ CardManaCost | UnlessPayer$ You +SVar:TrigDisruptionAura:DB$ Sacrifice | UnlessCost$ CardManaCost | UnlessPayer$ You SVar:NonStackingAttachEffect:True Oracle:Enchant artifact\nEnchanted artifact has "At the beginning of your upkeep, sacrifice this artifact unless you pay its mana cost." diff --git a/forge-gui/res/cardsfolder/d/district_guide.txt b/forge-gui/res/cardsfolder/d/district_guide.txt index f227c42871b..85720f104c3 100644 --- a/forge-gui/res/cardsfolder/d/district_guide.txt +++ b/forge-gui/res/cardsfolder/d/district_guide.txt @@ -2,6 +2,6 @@ Name:District Guide ManaCost:2 G Types:Creature Elf Scout PT:2/2 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library for a basic land card or Gate card, reveal it, put it into your hand, then shuffle. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library for a basic land card or Gate card, reveal it, put it into your hand, then shuffle. SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic,Card.Gate | ChangeNum$ 1 | ShuffleNonMandatory$ True Oracle:When District Guide enters the battlefield, you may search your library for a basic land card or Gate card, reveal it, put it into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/d/djeru_with_eyes_open.txt b/forge-gui/res/cardsfolder/d/djeru_with_eyes_open.txt index 4f2f2363548..32d1d25f730 100644 --- a/forge-gui/res/cardsfolder/d/djeru_with_eyes_open.txt +++ b/forge-gui/res/cardsfolder/d/djeru_with_eyes_open.txt @@ -3,7 +3,7 @@ ManaCost:3 W W Types:Legendary Creature Human Warrior PT:4/3 K:Vigilance -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library for a planeswalker card, reveal it, put it into your hand, then shuffle. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library for a planeswalker card, reveal it, put it into your hand, then shuffle. SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Planeswalker | ChangeNum$ 1 | ShuffleNonMandatory$ True R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ Planeswalker.YouCtrl | ReplaceWith$ DBReplace | PreventionEffect$ True | Description$ If a source would deal damage to a planeswalker you control, prevent 1 of that damage. SVar:DBReplace:DB$ ReplaceDamage | Amount$ 1 diff --git a/forge-gui/res/cardsfolder/d/domestication.txt b/forge-gui/res/cardsfolder/d/domestication.txt index 9d41dba9271..40fd0283e64 100644 --- a/forge-gui/res/cardsfolder/d/domestication.txt +++ b/forge-gui/res/cardsfolder/d/domestication.txt @@ -5,5 +5,5 @@ K:Enchant creature A:SP$ Attach | Cost$ 2 U U | ValidTgts$ Creature | AILogic$ GainControl | AITgts$ Creature.powerLT4 S:Mode$ Continuous | Affected$ Card.EnchantedBy | GainControl$ You | Description$ You control enchanted creature. T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | IsPresent$ Card.AttachedBy+powerGE4 | Execute$ TrigSac | TriggerDescription$ At the beginning of your end step, if enchanted creature's power is 4 or greater, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice Oracle:Enchant creature\nYou control enchanted creature.\nAt the beginning of your end step, if enchanted creature's power is 4 or greater, sacrifice Domestication. diff --git a/forge-gui/res/cardsfolder/d/dormant_volcano.txt b/forge-gui/res/cardsfolder/d/dormant_volcano.txt index 3281ad2f8bb..b8e11724842 100644 --- a/forge-gui/res/cardsfolder/d/dormant_volcano.txt +++ b/forge-gui/res/cardsfolder/d/dormant_volcano.txt @@ -4,6 +4,6 @@ Types:Land K:CARDNAME enters the battlefield tapped. A:AB$ Mana | Cost$ T | Produced$ C R | SpellDescription$ Add {C}{R}. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return an untapped Mountain you control to its owner's hand. -SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Return<1/Mountain.untapped/untapped Mountain> | UnlessPayer$ You +SVar:TrigSacUnless:DB$ Sacrifice | UnlessCost$ Return<1/Mountain.untapped/untapped Mountain> | UnlessPayer$ You SVar:NeedsToPlay:Mountain.YouCtrl+untapped Oracle:Dormant Volcano enters the battlefield tapped.\nWhen Dormant Volcano enters the battlefield, sacrifice it unless you return an untapped Mountain you control to its owner's hand.\n{T}: Add {C}{R}. diff --git a/forge-gui/res/cardsfolder/d/draco.txt b/forge-gui/res/cardsfolder/d/draco.txt index a175b55e20e..718b5148591 100644 --- a/forge-gui/res/cardsfolder/d/draco.txt +++ b/forge-gui/res/cardsfolder/d/draco.txt @@ -5,7 +5,7 @@ PT:9/9 K:Flying S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | EffectZone$ All | Description$ Domain — This spell costs {2} less to cast for each basic land type among lands you control. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ Domain — At the beginning of your upkeep, sacrifice CARDNAME unless you pay {10}. This cost is reduced by {2} for each basic land type among lands you control. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | UnlessCost$ UpkeepX | UnlessPayer$ You +SVar:TrigSac:DB$ Sacrifice | UnlessCost$ UpkeepX | UnlessPayer$ You SVar:X:Count$Domain/Twice SVar:UpkeepX:Number$10/Minus.X Oracle:Domain — This spell costs {2} less to cast for each basic land type among lands you control.\nFlying\nDomain — At the beginning of your upkeep, sacrifice Draco unless you pay {10}. This cost is reduced by {2} for each basic land type among lands you control. diff --git a/forge-gui/res/cardsfolder/d/dread.txt b/forge-gui/res/cardsfolder/d/dread.txt index 51d664eadce..39b56b691b3 100644 --- a/forge-gui/res/cardsfolder/d/dread.txt +++ b/forge-gui/res/cardsfolder/d/dread.txt @@ -4,7 +4,7 @@ Types:Creature Elemental Incarnation PT:6/6 K:Fear T:Mode$ DamageDone | ValidSource$ Creature.inZoneBattlefield | ValidTarget$ You | Execute$ TrigDestroy | TriggerZones$ Battlefield | TriggerDescription$ Whenever a creature deals damage to you, destroy it. -T:Mode$ ChangesZone | Origin$ Any | Destination$ Graveyard | ValidCard$ Creature.Self | Execute$ TrigShuffle | TriggerDescription$ When CARDNAME is put into a graveyard from anywhere, shuffle it into its owner's library. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigShuffle | TriggerDescription$ When CARDNAME is put into a graveyard from anywhere, shuffle it into its owner's library. SVar:TrigShuffle:DB$ ChangeZone | Origin$ Graveyard | Destination$ Library | Shuffle$ True | Defined$ TriggeredCardLKICopy SVar:TrigDestroy:DB$ Destroy | Defined$ TriggeredSourceLKICopy Oracle:Fear (This creature can't be blocked except by artifact creatures and/or black creatures.)\nWhenever a creature deals damage to you, destroy it.\nWhen Dread is put into a graveyard from anywhere, shuffle it into its owner's library. diff --git a/forge-gui/res/cardsfolder/d/drekavac.txt b/forge-gui/res/cardsfolder/d/drekavac.txt index 6e94dd944ae..47de0c02d4e 100644 --- a/forge-gui/res/cardsfolder/d/drekavac.txt +++ b/forge-gui/res/cardsfolder/d/drekavac.txt @@ -3,7 +3,7 @@ ManaCost:1 B Types:Creature Beast PT:3/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBSacSelf | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you discard a noncreature card. -SVar:DBSacSelf:DB$ Sacrifice | Defined$ Self | UnlessCost$ Discard<1/Card.nonCreature> | UnlessPayer$ You +SVar:DBSacSelf:DB$ Sacrifice | UnlessCost$ Discard<1/Card.nonCreature> | UnlessPayer$ You SVar:NeedsToPlayVar:Y GE1 SVar:Y:Count$ValidHand Card.nonCreature+YouCtrl Oracle:When Drekavac enters the battlefield, sacrifice it unless you discard a noncreature card. diff --git a/forge-gui/res/cardsfolder/d/dromars_cavern.txt b/forge-gui/res/cardsfolder/d/dromars_cavern.txt index 3099cd083db..0c037c2cc3d 100644 --- a/forge-gui/res/cardsfolder/d/dromars_cavern.txt +++ b/forge-gui/res/cardsfolder/d/dromars_cavern.txt @@ -3,6 +3,6 @@ ManaCost:no cost Types:Land Lair A:AB$ Mana | Cost$ T | Produced$ Combo W U B | SpellDescription$ Add {W}, {U}, or {B}. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return a non-Lair land you control to its owner's hand. -SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Return<1/Land.nonLair/non-Lair land> | UnlessPayer$ You +SVar:TrigSacUnless:DB$ Sacrifice | UnlessCost$ Return<1/Land.nonLair/non-Lair land> | UnlessPayer$ You SVar:NeedsToPlay:Land.nonLair+YouCtrl Oracle:When Dromar's Cavern enters the battlefield, sacrifice it unless you return a non-Lair land you control to its owner's hand.\n{T}: Add {W}, {U}, or {B}. diff --git a/forge-gui/res/cardsfolder/d/drop_of_honey.txt b/forge-gui/res/cardsfolder/d/drop_of_honey.txt index d1542958c50..ab57ed6fb6a 100644 --- a/forge-gui/res/cardsfolder/d/drop_of_honey.txt +++ b/forge-gui/res/cardsfolder/d/drop_of_honey.txt @@ -5,7 +5,7 @@ T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | E SVar:TrigChooseOneToDestroy:DB$ ChooseCard | Choices$ Creature.leastPower+withoutIndestructible | Mandatory$ True | SubAbility$ DBDestroy SVar:DBDestroy:DB$ Destroy | Defined$ ChosenCard | NoRegen$ True T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Creature | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When there are no creatures on the battlefield, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:NeedsToPlay:Creature.YouDontCtrl+leastPower DeckHas:Ability$Sacrifice AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/e/egon_god_of_death_throne_of_death.txt b/forge-gui/res/cardsfolder/e/egon_god_of_death_throne_of_death.txt index 1410acb6d0d..545a8df4b8e 100644 --- a/forge-gui/res/cardsfolder/e/egon_god_of_death_throne_of_death.txt +++ b/forge-gui/res/cardsfolder/e/egon_god_of_death_throne_of_death.txt @@ -4,7 +4,7 @@ Types:Legendary Creature God PT:6/6 K:Deathtouch T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ DBSacSelf | TriggerDescription$ At the beginning of your upkeep, exile two cards from your graveyard. If you can't, sacrifice NICKNAME and draw a card. -SVar:DBSacSelf:DB$ Sacrifice | Defined$ Self | UnlessCost$ Mandatory ExileFromGrave<2/Card> | UnlessPayer$ You | UnlessResolveSubs$ WhenNotPaid | SubAbility$ DBDraw +SVar:DBSacSelf:DB$ Sacrifice | UnlessCost$ Mandatory ExileFromGrave<2/Card> | UnlessPayer$ You | UnlessResolveSubs$ WhenNotPaid | SubAbility$ DBDraw SVar:DBDraw:DB$ Draw | NumCards$ 1 AlternateMode:Modal DeckHints:Ability$Discard|Graveyard diff --git a/forge-gui/res/cardsfolder/e/elder_spawn.txt b/forge-gui/res/cardsfolder/e/elder_spawn.txt index 3ffdbd0fbef..553b8bff3dc 100644 --- a/forge-gui/res/cardsfolder/e/elder_spawn.txt +++ b/forge-gui/res/cardsfolder/e/elder_spawn.txt @@ -4,7 +4,7 @@ Types:Creature Spawn PT:6/6 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigElderSpawnSacrifice | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of your upkeep, unless you sacrifice an Island, sacrifice CARDNAME and it deals 6 damage to you. CARDNAME can't be blocked by red creatures. SVar:TrigElderSpawnSacrifice:DB$ Sacrifice | SacValid$ Island | Optional$ True | RememberSacrificed$ True | SubAbility$ DBElderSpawnSacrificeMe -SVar:DBElderSpawnSacrificeMe:DB$ Sacrifice | Defined$ Self | ConditionDefined$ Remembered | ConditionPresent$ Island | ConditionCompare$ EQ0 | SubAbility$ DBElderSpawnDamage +SVar:DBElderSpawnSacrificeMe:DB$ Sacrifice | ConditionDefined$ Remembered | ConditionPresent$ Island | ConditionCompare$ EQ0 | SubAbility$ DBElderSpawnDamage SVar:DBElderSpawnDamage:DB$ DealDamage | Defined$ You | NumDmg$ 6 | ConditionDefined$ Remembered | ConditionPresent$ Island | ConditionCompare$ EQ0 | SubAbility$ DBElderSpawnCleanup SVar:DBElderSpawnCleanup:DB$ Cleanup | ClearRemembered$ True S:Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.Red | Description$ CARDNAME can't be blocked by red creatures. diff --git a/forge-gui/res/cardsfolder/e/eldrazi_monument.txt b/forge-gui/res/cardsfolder/e/eldrazi_monument.txt index a5eda95ee1e..d25f5a8b924 100644 --- a/forge-gui/res/cardsfolder/e/eldrazi_monument.txt +++ b/forge-gui/res/cardsfolder/e/eldrazi_monument.txt @@ -3,7 +3,7 @@ ManaCost:5 Types:Artifact T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ At the beginning of your upkeep, sacrifice a creature. If you can't, sacrifice CARDNAME. SVar:TrigSac:DB$ Sacrifice | Defined$ You | SacValid$ Creature | SubAbility$ DBSacSelf | RememberSacrificed$ True -SVar:DBSacSelf:DB$ Sacrifice | Defined$ Self | SubAbility$ DBCleanup | ConditionCheckSVar$ X | ConditionSVarCompare$ LT1 | SubAbility$ DBCleanup +SVar:DBSacSelf:DB$ Sacrifice | SubAbility$ DBCleanup | ConditionCheckSVar$ X | ConditionSVarCompare$ LT1 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Remembered$Amount S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Flying & Indestructible | Description$ Creatures you control get +1/+1 and have flying and indestructible. diff --git a/forge-gui/res/cardsfolder/e/emperor_crocodile.txt b/forge-gui/res/cardsfolder/e/emperor_crocodile.txt index 98355b09067..c0c1cb29865 100644 --- a/forge-gui/res/cardsfolder/e/emperor_crocodile.txt +++ b/forge-gui/res/cardsfolder/e/emperor_crocodile.txt @@ -3,6 +3,6 @@ ManaCost:3 G Types:Creature Crocodile PT:5/5 T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Creature.Other+YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no other creatures, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:NeedsToPlay:Creature.YouCtrl Oracle:When you control no other creatures, sacrifice Emperor Crocodile. diff --git a/forge-gui/res/cardsfolder/e/emrakul_the_aeons_torn.txt b/forge-gui/res/cardsfolder/e/emrakul_the_aeons_torn.txt index ba1d21bbe8e..883771f9f04 100644 --- a/forge-gui/res/cardsfolder/e/emrakul_the_aeons_torn.txt +++ b/forge-gui/res/cardsfolder/e/emrakul_the_aeons_torn.txt @@ -6,7 +6,7 @@ K:This spell can't be countered. K:Flying K:Protection:Spell.nonColorless:Protection from colored spells K:Annihilator:6 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Graveyard | ValidCard$ Creature.Self | Execute$ TrigShuffle | TriggerDescription$ When CARDNAME is put into a graveyard from anywhere, its owner shuffles their graveyard into their library. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigShuffle | TriggerDescription$ When CARDNAME is put into a graveyard from anywhere, its owner shuffles their graveyard into their library. SVar:TrigShuffle:DB$ ChangeZoneAll | Defined$ TriggeredCardOwner | ChangeType$ Card | Origin$ Graveyard | Destination$ Library | Shuffle$ True T:Mode$ SpellCast | ValidCard$ Card.Self | Execute$ TrigAddTurn | TriggerDescription$ When you cast CARDNAME, take an extra turn after this one. SVar:TrigAddTurn:DB$ AddTurn | Defined$ You | NumTurns$ 1 diff --git a/forge-gui/res/cardsfolder/e/endangered_armodon.txt b/forge-gui/res/cardsfolder/e/endangered_armodon.txt index 4bff13f632d..fcdbb686f8b 100644 --- a/forge-gui/res/cardsfolder/e/endangered_armodon.txt +++ b/forge-gui/res/cardsfolder/e/endangered_armodon.txt @@ -3,6 +3,6 @@ ManaCost:2 G G Types:Creature Elephant PT:4/5 T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Creature.toughnessLE2+YouCtrl | PresentCompare$ GE1 | Execute$ TrigSac | TriggerDescription$ When you control a creature with toughness 2 or less, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice AI:RemoveDeck:Random Oracle:When you control a creature with toughness 2 or less, sacrifice Endangered Armodon. diff --git a/forge-gui/res/cardsfolder/e/endrek_sahr_master_breeder.txt b/forge-gui/res/cardsfolder/e/endrek_sahr_master_breeder.txt index c9016d87b4e..ced057b0909 100644 --- a/forge-gui/res/cardsfolder/e/endrek_sahr_master_breeder.txt +++ b/forge-gui/res/cardsfolder/e/endrek_sahr_master_breeder.txt @@ -6,5 +6,5 @@ T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ You | Execute$ T:Mode$ Always | IsPresent$ Card.Thrull+YouCtrl | PresentCompare$ GE7 | Execute$ TrigSac | TriggerZones$ Battlefield | TriggerDescription$ When you control seven or more Thrulls, sacrifice CARDNAME. SVar:TrigToken:DB$ Token | TokenOwner$ You | TokenAmount$ X | TokenScript$ b_1_1_thrull SVar:X:TriggeredStackInstance$CardManaCostLKI -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice Oracle:Whenever you cast a creature spell, create X 1/1 black Thrull creature tokens, where X is that spell's mana value.\nWhen you control seven or more Thrulls, sacrifice Endrek Sahr, Master Breeder. diff --git a/forge-gui/res/cardsfolder/e/energy_field.txt b/forge-gui/res/cardsfolder/e/energy_field.txt index 629597c7773..2d2f58801d2 100644 --- a/forge-gui/res/cardsfolder/e/energy_field.txt +++ b/forge-gui/res/cardsfolder/e/energy_field.txt @@ -2,7 +2,7 @@ Name:Energy Field ManaCost:1 U Types:Enchantment T:Mode$ ChangesZone | Origin$ Any | Destination$ Graveyard | ValidCard$ Card.nonToken+YouOwn+Other | Execute$ TrigSac | TriggerZones$ Battlefield | TriggerDescription$ When a card is put into your graveyard from anywhere, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice R:Event$ DamageDone | ActiveZones$ Battlefield | Prevent$ True | ValidTarget$ You | ValidSource$ Card.YouDontCtrl,Emblem.YouDontCtrl | Description$ Prevent all damage that would be dealt to you by sources you don't control. SVar:NonStackingEffect:True #NOTE: The AI will not play around this effect, so it's only good in properly designed decks that circumvent the necessity to worry about the detrimental effect. diff --git a/forge-gui/res/cardsfolder/e/essence_leak.txt b/forge-gui/res/cardsfolder/e/essence_leak.txt index 9edf124b492..b4cd578be1c 100644 --- a/forge-gui/res/cardsfolder/e/essence_leak.txt +++ b/forge-gui/res/cardsfolder/e/essence_leak.txt @@ -5,7 +5,7 @@ K:Enchant permanent A:SP$ Attach | Cost$ U | ValidTgts$ Permanent | TgtPrompt$ Select target permanent | AITgts$ Card.cmcGE1+Green,Card.cmcGE1+Red | AILogic$ Curse S:Mode$ Continuous | Affected$ Permanent.AttachedBy+Red,Permanent.AttachedBy+Green | AddTrigger$ TrigEssencePhase | AddSVar$ TrigEssenceLeak | Description$ As long as enchanted permanent is red or green, it has "At the beginning of your upkeep, sacrifice this permanent unless you pay its mana cost." SVar:TrigEssencePhase:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigEssenceLeak | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of your upkeep, sacrifice this permanent unless you pay its mana cost. -SVar:TrigEssenceLeak:DB$ Sacrifice | Defined$ Self | UnlessCost$ CardManaCost | UnlessPayer$ You +SVar:TrigEssenceLeak:DB$ Sacrifice | UnlessCost$ CardManaCost | UnlessPayer$ You AI:RemoveDeck:Random SVar:NonStackingAttachEffect:True Oracle:Enchant permanent\nAs long as enchanted permanent is red or green, it has "At the beginning of your upkeep, sacrifice this permanent unless you pay its mana cost." diff --git a/forge-gui/res/cardsfolder/e/everglades.txt b/forge-gui/res/cardsfolder/e/everglades.txt index 946703065b8..ba57622fe0f 100644 --- a/forge-gui/res/cardsfolder/e/everglades.txt +++ b/forge-gui/res/cardsfolder/e/everglades.txt @@ -4,6 +4,6 @@ Types:Land K:CARDNAME enters the battlefield tapped. A:AB$ Mana | Cost$ T | Produced$ C B | SpellDescription$ Add {C}{B}. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return an untapped Swamp you control to its owner's hand. -SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Return<1/Swamp.untapped/untapped Swamp> | UnlessPayer$ You +SVar:TrigSacUnless:DB$ Sacrifice | UnlessCost$ Return<1/Swamp.untapped/untapped Swamp> | UnlessPayer$ You SVar:NeedsToPlay:Swamp.YouCtrl+untapped Oracle:Everglades enters the battlefield tapped.\nWhen Everglades enters the battlefield, sacrifice it unless you return an untapped Swamp you control to its owner's hand.\n{T}: Add {C}{B}. diff --git a/forge-gui/res/cardsfolder/f/faerie_impostor.txt b/forge-gui/res/cardsfolder/f/faerie_impostor.txt index 68faa1d1879..a932d198c43 100644 --- a/forge-gui/res/cardsfolder/f/faerie_impostor.txt +++ b/forge-gui/res/cardsfolder/f/faerie_impostor.txt @@ -4,6 +4,6 @@ Types:Creature Faerie Rogue PT:2/1 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return another creature you control to its owner's hand. -SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Return<1/Creature.Other/other creature> | UnlessPayer$ You +SVar:TrigSacUnless:DB$ Sacrifice | UnlessCost$ Return<1/Creature.Other/other creature> | UnlessPayer$ You SVar:NeedsToPlay:Creature.YouCtrl Oracle:Flying\nWhen Faerie Impostor enters the battlefield, sacrifice it unless you return another creature you control to its owner's hand. diff --git a/forge-gui/res/cardsfolder/f/fallow_wurm.txt b/forge-gui/res/cardsfolder/f/fallow_wurm.txt index 372f2669d90..1b9fefb5105 100644 --- a/forge-gui/res/cardsfolder/f/fallow_wurm.txt +++ b/forge-gui/res/cardsfolder/f/fallow_wurm.txt @@ -3,7 +3,7 @@ ManaCost:2 G Types:Creature Wurm PT:4/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBSacSelf | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you discard a land card. -SVar:DBSacSelf:DB$ Sacrifice | Defined$ Self | UnlessCost$ Discard<1/Land> | UnlessPayer$ You +SVar:DBSacSelf:DB$ Sacrifice | UnlessCost$ Discard<1/Land> | UnlessPayer$ You SVar:NeedsToPlayVar:Y GE1 SVar:Y:Count$TypeInYourHand.Land Oracle:When Fallow Wurm enters the battlefield, sacrifice it unless you discard a land card. diff --git a/forge-gui/res/cardsfolder/f/flames_of_moradin.txt b/forge-gui/res/cardsfolder/f/flames_of_moradin.txt index bc31efe1eee..3f24cb0a689 100644 --- a/forge-gui/res/cardsfolder/f/flames_of_moradin.txt +++ b/forge-gui/res/cardsfolder/f/flames_of_moradin.txt @@ -6,6 +6,6 @@ SVar:DBConjure:DB$ MakeCard | Conjure$ True | DefinedName$ Targeted.nonToken | Z SVar:DBEffect:DB$ Effect | StaticAbilities$ PerpetualAbility | RememberObjects$ Remembered | Name$ Flames of Moradin's Perpetual Effect | Duration$ Permanent SVar:PerpetualAbility:Mode$ Continuous | RememberObjects$ Targeted | AddKeyword$ Alternative Cost: R | Affected$ Card.IsRemembered | AddTrigger$ TrigSac | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ This creature perpetually gains "You may pay {R} rather than pay this spell's mana cost" and "at the beginning of your end step, sacrifice this artifact." SVar:TrigSac:Mode$ Phase | ValidPlayer$ You | Phase$ End of Turn | Execute$ TrigSacrifice | TriggerZones$ Battlefield | TriggerDescription$ Sacrifice CARDNAME at you end step. -SVar:TrigSacrifice:DB$ Sacrifice | Defined$ Self +SVar:TrigSacrifice:DB$ Sacrifice DeckHas:Type$Artifact & Ability$Sacrifice Oracle:Destroy up to three target artifacts. Conjure a duplicate of each nontoken artifact destroyed this way into your hand. The duplicates perpetually gain "You may pay {R} rather than pay this spell's mana cost" and "at the beginning of your end step, sacrifice this artifact.". diff --git a/forge-gui/res/cardsfolder/f/force_bubble.txt b/forge-gui/res/cardsfolder/f/force_bubble.txt index 1e1f7641b11..37f3f14cfa8 100644 --- a/forge-gui/res/cardsfolder/f/force_bubble.txt +++ b/forge-gui/res/cardsfolder/f/force_bubble.txt @@ -4,7 +4,7 @@ Types:Enchantment R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ You | ReplaceWith$ Counters | Description$ If damage would be dealt to you, put that many depletion counters on CARDNAME instead. SVar:Counters:DB$ PutCounter | Defined$ Self | CounterType$ DEPLETION | CounterNum$ X T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Card.Self+counters_GE4_DEPLETION | Execute$ TrigSac | TriggerDescription$ When there are four or more depletion counters on CARDNAME, sacrifice it. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | Execute$ TrigRemoveCounter | TriggerDescription$ At the beginning of each end step, remove all depletion counters from CARDNAME. SVar:TrigRemoveCounter:DB$ RemoveCounter | CounterType$ DEPLETION | CounterNum$ All SVar:X:ReplaceCount$DamageAmount diff --git a/forge-gui/res/cardsfolder/f/frenetic_efreet.txt b/forge-gui/res/cardsfolder/f/frenetic_efreet.txt index 0706fa29e99..2a5d9049867 100644 --- a/forge-gui/res/cardsfolder/f/frenetic_efreet.txt +++ b/forge-gui/res/cardsfolder/f/frenetic_efreet.txt @@ -5,5 +5,5 @@ PT:2/1 K:Flying A:AB$ FlipACoin | Cost$ 0 | WinSubAbility$ DBPhase | LoseSubAbility$ DBSacrifice | AILogic$ PhaseOut | SpellDescription$ Flip a coin. If you win the flip, Frenetic Efreet phases out. If you lose the flip, sacrifice Frenetic Efreet. (While it's phased out, it's treated as though it doesn't exist. It phases in before you untap during your next untap step.) SVar:DBPhase:DB$ Phases | Defined$ Self -SVar:DBSacrifice:DB$ Sacrifice | Defined$ Self +SVar:DBSacrifice:DB$ Sacrifice Oracle:Flying\n{0}: Flip a coin. If you win the flip, Frenetic Efreet phases out. If you lose the flip, sacrifice Frenetic Efreet. (While it's phased out, it's treated as though it doesn't exist. It phases in before you untap during your next untap step.) diff --git a/forge-gui/res/cardsfolder/f/frenetic_sliver.txt b/forge-gui/res/cardsfolder/f/frenetic_sliver.txt index e5d1f363a77..6cb38dcbd99 100644 --- a/forge-gui/res/cardsfolder/f/frenetic_sliver.txt +++ b/forge-gui/res/cardsfolder/f/frenetic_sliver.txt @@ -7,7 +7,7 @@ SVar:Frenetic:AB$ FlipACoin | Cost$ 0 | ConditionPresent$ Card.Self | ConditionC SVar:DBExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | Defined$ Self | SubAbility$ DelTrig 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:DBSacSelf:DB$ Sacrifice SVar:PlayMain1:TRUE AI:RemoveDeck:All Oracle: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." diff --git a/forge-gui/res/cardsfolder/f/frost_walker.txt b/forge-gui/res/cardsfolder/f/frost_walker.txt index 2f0f3eea1e5..d3d24afc639 100644 --- a/forge-gui/res/cardsfolder/f/frost_walker.txt +++ b/forge-gui/res/cardsfolder/f/frost_walker.txt @@ -3,6 +3,6 @@ ManaCost:1 U Types:Creature Elemental PT:4/1 T:Mode$ BecomesTarget | ValidTarget$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When CARDNAME becomes the target of a spell or ability, sacrifice it. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:Targeting:Dies Oracle:When Frost Walker becomes the target of a spell or ability, sacrifice it. diff --git a/forge-gui/res/cardsfolder/g/gargantuan_gorilla.txt b/forge-gui/res/cardsfolder/g/gargantuan_gorilla.txt index 29e7b1d8770..a07d96ee436 100644 --- a/forge-gui/res/cardsfolder/g/gargantuan_gorilla.txt +++ b/forge-gui/res/cardsfolder/g/gargantuan_gorilla.txt @@ -5,7 +5,7 @@ PT:7/7 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigSacrifice | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of your upkeep, you may sacrifice a Forest. If you sacrifice a snow Forest this way, CARDNAME gains trample until end of turn. If you don't sacrifice a Forest, sacrifice CARDNAME and it deals 7 damage to you. SVar:TrigSacrifice:DB$ Sacrifice | Optional$ True | SacValid$ Forest | Amount$ 1 | RememberSacrificed$ True | SubAbility$ DBPump SVar:DBPump:DB$ Pump | Defined$ Self | KW$ Trample | ConditionDefined$ Remembered | ConditionPresent$ Forest.Snow | ConditionCompare$ EQ1 | SubAbility$ DBSacMe -SVar:DBSacMe:DB$ Sacrifice | Defined$ Self | ConditionDefined$ Remembered | ConditionPresent$ Forest | ConditionCompare$ EQ0 | SubAbility$ DBRageDamage +SVar:DBSacMe:DB$ Sacrifice | ConditionDefined$ Remembered | ConditionPresent$ Forest | ConditionCompare$ EQ0 | SubAbility$ DBRageDamage SVar:DBRageDamage:DB$ DealDamage | Defined$ You | NumDmg$ 7 | ConditionDefined$ Remembered | ConditionPresent$ Forest | ConditionCompare$ EQ0 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True A:AB$ DealDamage | Cost$ T | ValidTgts$ Creature.Other | TgtPrompt$ Select another target creature | NumDmg$ X | SubAbility$ DamageThis | SpellDescription$ CARDNAME deals damage equal to its power to another target creature. That creature deals damage equal to its power to CARDNAME. diff --git a/forge-gui/res/cardsfolder/g/gateway_plaza.txt b/forge-gui/res/cardsfolder/g/gateway_plaza.txt index 3b779838642..66c961e99a7 100644 --- a/forge-gui/res/cardsfolder/g/gateway_plaza.txt +++ b/forge-gui/res/cardsfolder/g/gateway_plaza.txt @@ -3,7 +3,7 @@ ManaCost:no cost Types:Land Gate K:CARDNAME enters the battlefield tapped. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you pay {1}. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | UnlessCost$ 1 | UnlessPayer$ You +SVar:TrigSac:DB$ Sacrifice | UnlessCost$ 1 | UnlessPayer$ You SVar:NeedsToPlay:Land.untapped+YouCtrl A:AB$ Mana | Cost$ T | Produced$ Any | SpellDescription$ Add one mana of any color. Oracle:Gateway Plaza enters the battlefield tapped.\nWhen Gateway Plaza enters the battlefield, sacrifice it unless you pay {1}.\n{T}: Add one mana of any color. diff --git a/forge-gui/res/cardsfolder/g/giant_shark.txt b/forge-gui/res/cardsfolder/g/giant_shark.txt index eb4d5b7a387..be7158974d0 100644 --- a/forge-gui/res/cardsfolder/g/giant_shark.txt +++ b/forge-gui/res/cardsfolder/g/giant_shark.txt @@ -7,7 +7,7 @@ T:Mode$ AttackerBlockedByCreature | ValidCard$ Card.Self | ValidBlocker$ Creatur SVar:TrigPumpShark:DB$ Pump | Defined$ Self | NumAtt$ 2 | NumDef$ 0 | KW$ Trample S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Island | Description$ CARDNAME can't attack unless defending player controls an Island. T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Island.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no Islands, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:NeedsToPlay:Island.YouCtrl DeckHas:Keyword$Trample Oracle:Giant Shark can't attack unless defending player controls an Island.\nWhenever Giant Shark blocks or becomes blocked by a creature that has been dealt damage this turn, Giant Shark gets +2/+0 and gains trample until end of turn.\nWhen you control no Islands, sacrifice Giant Shark. diff --git a/forge-gui/res/cardsfolder/g/gilded_drake.txt b/forge-gui/res/cardsfolder/g/gilded_drake.txt index 2b73b4c97be..b5ea8e09e23 100644 --- a/forge-gui/res/cardsfolder/g/gilded_drake.txt +++ b/forge-gui/res/cardsfolder/g/gilded_drake.txt @@ -5,6 +5,6 @@ PT:3/3 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExchange | TriggerDescription$ When CARDNAME enters the battlefield, exchange control of CARDNAME and up to one target creature an opponent controls. If you don't or can't make an exchange, sacrifice CARDNAME. This ability still resolves if its target becomes illegal. SVar:TrigExchange:DB$ ExchangeControl | Defined$ Self | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls | TargetMin$ 0 | TargetMax$ 1 | CantFizzle$ True | SubAbility$ DBSacSelf -SVar:DBSacSelf:DB$ Sacrifice | Defined$ Self | ConditionDefined$ Self | ConditionPresent$ Card.YouCtrl +SVar:DBSacSelf:DB$ Sacrifice | ConditionDefined$ Self | ConditionPresent$ Card.YouCtrl SVar:NeedsToPlay:Creature.OppCtrl Oracle:Flying\nWhen Gilded Drake enters the battlefield, exchange control of Gilded Drake and up to one target creature an opponent controls. If you don't or can't make an exchange, sacrifice Gilded Drake. This ability still resolves if its target becomes illegal. diff --git a/forge-gui/res/cardsfolder/g/glimmervoid.txt b/forge-gui/res/cardsfolder/g/glimmervoid.txt index 0a82f3d3cdc..66e52988e04 100644 --- a/forge-gui/res/cardsfolder/g/glimmervoid.txt +++ b/forge-gui/res/cardsfolder/g/glimmervoid.txt @@ -3,7 +3,7 @@ ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ Any | Amount$ 1 | SpellDescription$ Add one mana of any color. T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | IsPresent$ Artifact.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ At the beginning of the end step, if you control no artifacts, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:NeedsToPlay:Artifact.YouCtrl AI:RemoveDeck:Random Oracle:At the beginning of the end step, if you control no artifacts, sacrifice Glimmervoid.\n{T}: Add one mana of any color. diff --git a/forge-gui/res/cardsfolder/g/glint_hawk.txt b/forge-gui/res/cardsfolder/g/glint_hawk.txt index ea289df40cf..3d614d7fe34 100644 --- a/forge-gui/res/cardsfolder/g/glint_hawk.txt +++ b/forge-gui/res/cardsfolder/g/glint_hawk.txt @@ -4,6 +4,6 @@ Types:Creature Bird PT:2/2 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBSac | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return an artifact you control to its owner's hand. -SVar:DBSac:DB$ Sacrifice | Defined$ Self | UnlessCost$ Return<1/Artifact> | UnlessPayer$ You +SVar:DBSac:DB$ Sacrifice | UnlessCost$ Return<1/Artifact> | UnlessPayer$ You SVar:NeedsToPlay:Artifact.YouCtrl Oracle:Flying\nWhen Glint Hawk enters the battlefield, sacrifice it unless you return an artifact you control to its owner's hand. diff --git a/forge-gui/res/cardsfolder/g/goblin_archaeologist.txt b/forge-gui/res/cardsfolder/g/goblin_archaeologist.txt index 13abe1b08a3..0a98d103efc 100644 --- a/forge-gui/res/cardsfolder/g/goblin_archaeologist.txt +++ b/forge-gui/res/cardsfolder/g/goblin_archaeologist.txt @@ -5,6 +5,6 @@ PT:1/2 A:AB$ FlipACoin | Cost$ R T | ValidTgts$ Artifact | TgtPrompt$ Select target artifact | WinSubAbility$ DBDestroy | LoseSubAbility$ DBSacSelf | SpellDescription$ Flip a coin. If you win the flip, destroy target artifact and untap Goblin Archaeologist. If you lose the flip, sacrifice Goblin Archaeologist. SVar:DBDestroy:DB$ Destroy | Defined$ Targeted | SubAbility$ DBUntapSelf SVar:DBUntapSelf:DB$ Untap | Defined$ Self -SVar:DBSacSelf:DB$ Sacrifice | Defined$ Self +SVar:DBSacSelf:DB$ Sacrifice AI:RemoveDeck:All Oracle:{R}, {T}: Flip a coin. If you win the flip, destroy target artifact and untap Goblin Archaeologist. If you lose the flip, sacrifice Goblin Archaeologist. diff --git a/forge-gui/res/cardsfolder/g/goblin_boom_keg.txt b/forge-gui/res/cardsfolder/g/goblin_boom_keg.txt index 47dccb3c223..bed6181e893 100644 --- a/forge-gui/res/cardsfolder/g/goblin_boom_keg.txt +++ b/forge-gui/res/cardsfolder/g/goblin_boom_keg.txt @@ -2,7 +2,7 @@ Name:Goblin Boom Keg ManaCost:4 Types:Artifact T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ At the beginning of your upkeep, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDealDamage | TriggerDescription$ When CARDNAME is put into a graveyard from the battlefield, it deals 3 damage to any target. SVar:TrigDealDamage:DB$ DealDamage | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 3 SVar:SacMe:4 diff --git a/forge-gui/res/cardsfolder/g/goblin_cannon.txt b/forge-gui/res/cardsfolder/g/goblin_cannon.txt index 487ee36ed80..5f1065e5f4c 100644 --- a/forge-gui/res/cardsfolder/g/goblin_cannon.txt +++ b/forge-gui/res/cardsfolder/g/goblin_cannon.txt @@ -2,6 +2,6 @@ Name:Goblin Cannon ManaCost:4 Types:Artifact A:AB$ DealDamage | Cost$ 2 | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 1 | SubAbility$ DBSac | SpellDescription$ CARDNAME deals 1 damage to any target. Sacrifice CARDNAME. -SVar:DBSac:DB$ Sacrifice | Defined$ Self +SVar:DBSac:DB$ Sacrifice AI:RemoveDeck:All Oracle:{2}: Goblin Cannon deals 1 damage to any target. Sacrifice Goblin Cannon. diff --git a/forge-gui/res/cardsfolder/g/goblin_trapfinder.txt b/forge-gui/res/cardsfolder/g/goblin_trapfinder.txt index c2589436c17..8cba062559e 100644 --- a/forge-gui/res/cardsfolder/g/goblin_trapfinder.txt +++ b/forge-gui/res/cardsfolder/g/goblin_trapfinder.txt @@ -8,7 +8,7 @@ SVar:DBEffect:DB$ Effect | StaticAbilities$ PerpetualAbility | RememberObjects$ SVar:PerpetualAbility:Mode$ Continuous | Affected$ Card.IsRemembered | AddTrigger$ TrigSac | AddStaticAbility$ PerpetualReduceCost | AddKeyword$ Haste | EffectZone$ Command | | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ This card perpetually gains haste, "This spell costs {2} less to cast," and "At the beginning of your end step, sacrifice this creature." SVar:PerpetualReduceCost:Mode$ ReduceCost | ValidCard$ Creature.IsRemembererd | Type$ Spell | Amount$ 2 | EffectZone$ All | Description$ This spell costs {1} less to cast. SVar:TrigSac:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | Execute$ TrigSacrifice | TriggerZones$ Battlefield | TriggerDescription$ Sacrifice CARDNAME at you end step. -SVar:TrigSacrifice:DB$ Sacrifice | Defined$ Self +SVar:TrigSacrifice:DB$ Sacrifice SVar:Update:Mode$ ChangesZone | Origin$ Any | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered | Execute$ DBUpdate SVar:DBUpdate:DB$ UpdateRemember Oracle:When Goblin Trapfinder dies, seek a creature card with mana value 3 or less. That card perpetually gains haste, "This spell costs {2} less to cast," and "At the beginning of your end step, sacrifice this creature." \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/g/goblins_of_the_flarg.txt b/forge-gui/res/cardsfolder/g/goblins_of_the_flarg.txt index 4880c22e4f8..dd322380ecb 100644 --- a/forge-gui/res/cardsfolder/g/goblins_of_the_flarg.txt +++ b/forge-gui/res/cardsfolder/g/goblins_of_the_flarg.txt @@ -4,7 +4,7 @@ Types:Creature Goblin Warrior PT:1/1 K:Mountainwalk T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Dwarf.YouCtrl | PresentCompare$ GE1 | Execute$ TrigSac | TriggerDescription$ When you control a Dwarf, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:NeedsToPlayVar:DwarfsYouCtrl EQ0 SVar:DwarfsYouCtrl:Count$Valid Dwarf.YouCtrl DeckHas:Ability$Sacrifice diff --git a/forge-gui/res/cardsfolder/g/gorilla_pack.txt b/forge-gui/res/cardsfolder/g/gorilla_pack.txt index 760274e73b5..8b305bdebcd 100644 --- a/forge-gui/res/cardsfolder/g/gorilla_pack.txt +++ b/forge-gui/res/cardsfolder/g/gorilla_pack.txt @@ -4,6 +4,6 @@ Types:Creature Ape PT:3/3 S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Forest | Description$ CARDNAME can't attack unless defending player controls a Forest. T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Forest.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no Forests, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:NeedsToPlay:Forest.YouCtrl Oracle:Gorilla Pack can't attack unless defending player controls a Forest.\nWhen you control no Forests, sacrifice Gorilla Pack. diff --git a/forge-gui/res/cardsfolder/g/gossamer_phantasm.txt b/forge-gui/res/cardsfolder/g/gossamer_phantasm.txt index f0568822240..6a2d93723bf 100644 --- a/forge-gui/res/cardsfolder/g/gossamer_phantasm.txt +++ b/forge-gui/res/cardsfolder/g/gossamer_phantasm.txt @@ -4,6 +4,6 @@ Types:Creature Illusion PT:2/1 K:Flying T:Mode$ BecomesTarget | ValidTarget$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When CARDNAME becomes the target of a spell or ability, sacrifice it. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:Targeting:Dies Oracle:Flying\nWhen Gossamer Phantasm becomes the target of a spell or ability, sacrifice it. diff --git a/forge-gui/res/cardsfolder/h/harmonious_emergence.txt b/forge-gui/res/cardsfolder/h/harmonious_emergence.txt index e9c80e5094d..2886cdc3e85 100644 --- a/forge-gui/res/cardsfolder/h/harmonious_emergence.txt +++ b/forge-gui/res/cardsfolder/h/harmonious_emergence.txt @@ -5,7 +5,7 @@ K:Enchant land you control A:SP$ Attach | ValidTgts$ Land.YouCtrl | TgtPrompt$ Select target land you control | AILogic$ Animate S:Mode$ Continuous | Affected$ Land.EnchantedBy | AddType$ Creature & Spirit | SetColor$ Green | SetPower$ 4 | SetToughness$ 5 | AddKeyword$ Vigilance & Haste | Description$ Enchanted land is a 4/5 green Spirit creature with vigilance and haste. It's still a land. R:Event$ Destroy | ValidCard$ Card.EnchantedBy | ReplaceWith$ HarmoniousEgress | Description$ If enchanted land would be destroyed, instead sacrifice CARDNAME and that land gains indestructible until end of turn. -SVar:HarmoniousEgress:DB$ Sacrifice | Defined$ Card.Self | SubAbility$ DBPump +SVar:HarmoniousEgress:DB$ Sacrifice | SubAbility$ DBPump SVar:DBPump:DB$ Pump | Defined$ Enchanted | KW$ Indestructible DeckHas:Ability$Sacrifice & Type$Spirit Oracle:Enchant land you control\nEnchanted land is a 4/5 green Spirit creature with vigilance and haste. It's still a land.\nIf enchanted land would be destroyed, instead sacrifice Harmonious Emergence and that land gains indestructible until end of turn. diff --git a/forge-gui/res/cardsfolder/h/harvest_wurm.txt b/forge-gui/res/cardsfolder/h/harvest_wurm.txt index 5d2590d06a9..20dde7aa847 100644 --- a/forge-gui/res/cardsfolder/h/harvest_wurm.txt +++ b/forge-gui/res/cardsfolder/h/harvest_wurm.txt @@ -4,7 +4,7 @@ Types:Creature Wurm PT:3/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return a basic land card from your graveyard to your hand. SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | Hidden$ True | ChangeType$ Land.Basic+YouOwn | RememberChanged$ True | SubAbility$ DBSac -SVar:DBSac:DB$ Sacrifice | Defined$ Self | SubAbility$ DBCleanup | ConditionCheckSVar$ X | ConditionSVarCompare$ LT1 +SVar:DBSac:DB$ Sacrifice | SubAbility$ DBCleanup | ConditionCheckSVar$ X | ConditionSVarCompare$ LT1 SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Remembered$Amount SVar:NeedsToPlayVar:Y GE1 diff --git a/forge-gui/res/cardsfolder/h/hecatomb.txt b/forge-gui/res/cardsfolder/h/hecatomb.txt index a4521134600..56caf45ffad 100644 --- a/forge-gui/res/cardsfolder/h/hecatomb.txt +++ b/forge-gui/res/cardsfolder/h/hecatomb.txt @@ -2,10 +2,7 @@ Name:Hecatomb ManaCost:1 B B Types:Enchantment T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigSac | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice CARDNAME unless you sacrifice four creatures. -SVar:TrigSac:DB$ Sacrifice | Amount$ 4 | SacValid$ Creature | RememberSacrificed$ True | Optional$ True | SubAbility$ DBSacSelf -SVar:DBSacSelf:DB$ Sacrifice | Defined$ Self | SubAbility$ DBCleanup | ConditionCheckSVar$ X | ConditionSVarCompare$ LT4 -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:X:Remembered$Amount +SVar:TrigSac:DB$ Sacrifice | UnlessCost$ Sac<4/Creature> | UnlessPayer$ You A:AB$ DealDamage | Cost$ tapXType<1/Swamp> | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 1 | SpellDescription$ CARDNAME deals 1 damage to any target. AI:RemoveDeck:All SVar:NonStackingEffect:True diff --git a/forge-gui/res/cardsfolder/h/hellish_rebuke.txt b/forge-gui/res/cardsfolder/h/hellish_rebuke.txt index bef9455b52c..327e0c32270 100644 --- a/forge-gui/res/cardsfolder/h/hellish_rebuke.txt +++ b/forge-gui/res/cardsfolder/h/hellish_rebuke.txt @@ -4,7 +4,7 @@ Types:Instant A:SP$ Effect | StaticAbilities$ OppPerms | RememberObjects$ Caster | SubAbility$ DBCleanup | SpellDescription$ Until end of turn, permanents your opponents control gain "When this permanent deals damage to the player who cast Hellish Rebuke, sacrifice this permanent. You lose 2 life." SVar:OppPerms:Mode$ Continuous | EffectZone$ Command | Affected$ Permanent.OppCtrl | AddTrigger$ DamageTrig | Description$ Until end of turn, permanents your opponents control gain "When this permanent deals damage to the player who cast Hellish Rebuke, sacrifice this permanent. You lose 2 life." SVar:DamageTrig:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player.OriginalHostRemembered | Execute$ TrigSac | TriggerDescription$ When this permanent deals damage to the player who cast Hellish Rebuke, sacrifice this permanent. You lose 2 life. -SVar:TrigSac:DB$ Sacrifice | Defined$ TriggeredSourceLKICopy | SubAbility$ DBLoseLife +SVar:TrigSac:DB$ Sacrifice | SubAbility$ DBLoseLife SVar:DBLoseLife:DB$ LoseLife | Defined$ TriggeredSourceController | LifeAmount$ 2 SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/h/helm_of_obedience.txt b/forge-gui/res/cardsfolder/h/helm_of_obedience.txt index ff3fd813088..7370df9502a 100644 --- a/forge-gui/res/cardsfolder/h/helm_of_obedience.txt +++ b/forge-gui/res/cardsfolder/h/helm_of_obedience.txt @@ -8,7 +8,7 @@ SVar:DBMill:DB$ Mill | NumCards$ 1 | RememberMilled$ True | Defined$ Targeted | SVar:DBAccumulateX:DB$ StoreSVar | SVar$ AccumulatedMilled | Type$ CountSVar | Expression$ AccumulatedMilled/Plus.1 | ConditionCheckSVar$ MilledCard | ConditionSVarCompare$ EQ1 | SubAbility$ DBMilledCreature SVar:DBMilledCreature:DB$ StoreSVar | SVar$ AccumulatedMilled | Type$ Calculate | Expression$ X | ConditionCheckSVar$ MilledCreature | ConditionSVarCompare$ EQ1 | SubAbility$ DBEmptyLibrary SVar:DBEmptyLibrary:DB$ StoreSVar | SVar$ AccumulatedMilled | Type$ Calculate | Expression$ X | ConditionCheckSVar$ TargetedLibrary | ConditionSVarCompare$ EQ0 -SVar:DBSacHelm:DB$ Sacrifice | Defined$ Self | ConditionCheckSVar$ MilledCreature | ConditionSVarCompare$ EQ1 | SubAbility$ DBStealCreature +SVar:DBSacHelm:DB$ Sacrifice | ConditionCheckSVar$ MilledCreature | ConditionSVarCompare$ EQ1 | SubAbility$ DBStealCreature SVar:DBStealCreature:DB$ ChangeZone | Defined$ Remembered | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | SubAbility$ DBResetCounter | ConditionCheckSVar$ MilledCreature | ConditionSVarCompare$ EQ1 SVar:DBResetCounter:DB$ StoreSVar | SVar$ AccumulatedMilled | Type$ Number | Expression$ 0 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/h/hidden_horror.txt b/forge-gui/res/cardsfolder/h/hidden_horror.txt index 421b4a1799d..83adac4aabc 100644 --- a/forge-gui/res/cardsfolder/h/hidden_horror.txt +++ b/forge-gui/res/cardsfolder/h/hidden_horror.txt @@ -3,7 +3,7 @@ ManaCost:1 B B Types:Creature Horror PT:4/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBSacSelf | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you discard a creature card. -SVar:DBSacSelf:DB$ Sacrifice | Defined$ Self | UnlessCost$ Discard<1/Creature> | UnlessPayer$ You +SVar:DBSacSelf:DB$ Sacrifice | UnlessCost$ Discard<1/Creature> | UnlessPayer$ You SVar:NeedsToPlayVar:Y GE2 SVar:Y:Count$TypeInYourHand.Creature Oracle:When Hidden Horror enters the battlefield, sacrifice it unless you discard a creature card. diff --git a/forge-gui/res/cardsfolder/h/hostility.txt b/forge-gui/res/cardsfolder/h/hostility.txt index 2df2f1d4fd2..e2077ab6d37 100644 --- a/forge-gui/res/cardsfolder/h/hostility.txt +++ b/forge-gui/res/cardsfolder/h/hostility.txt @@ -6,6 +6,6 @@ K:Haste R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Spell.YouCtrl | ValidTarget$ Opponent | PreventionEffect$ True | ReplaceWith$ HostilityTokens | Description$ If a spell you control would deal damage to an opponent, prevent that damage. Create a 3/1 red Elemental Shaman creature token with haste for each 1 damage prevented this way. SVar:HostilityTokens:DB$ Token | TokenAmount$ X | TokenScript$ r_3_1_elemental_shaman_haste | TokenOwner$ You SVar:X:ReplaceCount$DamageAmount -T:Mode$ ChangesZone | Origin$ Any | Destination$ Graveyard | ValidCard$ Creature.Self | Execute$ TrigShuffle | TriggerDescription$ When CARDNAME is put into a graveyard from anywhere, shuffle it into its owner's library. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigShuffle | TriggerDescription$ When CARDNAME is put into a graveyard from anywhere, shuffle it into its owner's library. SVar:TrigShuffle:DB$ ChangeZone | Origin$ Graveyard | Destination$ Library | Shuffle$ True | Defined$ TriggeredCardLKICopy Oracle:Haste\nIf a spell you control would deal damage to an opponent, prevent that damage. Create a 3/1 red Elemental Shaman creature token with haste for each 1 damage prevented this way.\nWhen Hostility is put into a graveyard from anywhere, shuffle it into its owner's library. diff --git a/forge-gui/res/cardsfolder/h/hungry_hungry_heifer.txt b/forge-gui/res/cardsfolder/h/hungry_hungry_heifer.txt index 593ec09f7ea..8b1545c06ec 100644 --- a/forge-gui/res/cardsfolder/h/hungry_hungry_heifer.txt +++ b/forge-gui/res/cardsfolder/h/hungry_hungry_heifer.txt @@ -3,7 +3,7 @@ ManaCost:2 G Types:Creature Cow PT:3/3 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ At the beginning of your upkeep, you may remove a counter from a permanent you control. If you don't, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | UnlessPayer$ You | UnlessCost$ RemoveAnyCounter<1/Any/Permanent.YouCtrl/a permanent you control> +SVar:TrigSac:DB$ Sacrifice | UnlessPayer$ You | UnlessCost$ RemoveAnyCounter<1/Any/Permanent.YouCtrl/a permanent you control> DeckNeeds:Ability$Counters SVar:NeedsToPlay:Permanent.YouCtrl+HasCounters SVar:AIRemoveCounterCostPriority:ANY diff --git a/forge-gui/res/cardsfolder/h/hunters_insight.txt b/forge-gui/res/cardsfolder/h/hunters_insight.txt index 1a4865e5cd7..b8b1a609362 100644 --- a/forge-gui/res/cardsfolder/h/hunters_insight.txt +++ b/forge-gui/res/cardsfolder/h/hunters_insight.txt @@ -1,7 +1,7 @@ Name:Hunter's Insight ManaCost:2 G Types:Instant -A:SP$ Effect | ValidTgts$ Creature | TgtPrompt$ Select target creature | Triggers$ TrigDamage | RememberObjects$ Targeted | SpellDescription$ Choose target creature you control. Whenever that creature deals combat damage to a player or planeswalker this turn, draw that many cards. +A:SP$ Effect | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature | Triggers$ TrigDamage | RememberObjects$ Targeted | SpellDescription$ Choose target creature you control. Whenever that creature deals combat damage to a player or planeswalker this turn, draw that many cards. SVar:TrigDamage:Mode$ DamageDone | ValidSource$ Creature.IsRemembered | ValidTarget$ Player,Planeswalker | Execute$ TrigDraw | CombatDamage$ True | TriggerDescription$ Whenever that creature deals combat damage to a player or planeswalker this turn, draw that many cards. SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ X SVar:X:TriggerCount$DamageAmount diff --git a/forge-gui/res/cardsfolder/i/icy_prison.txt b/forge-gui/res/cardsfolder/i/icy_prison.txt index c8f3afa7394..5e6f2cab3ad 100644 --- a/forge-gui/res/cardsfolder/i/icy_prison.txt +++ b/forge-gui/res/cardsfolder/i/icy_prison.txt @@ -6,7 +6,7 @@ SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | Remem T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerDescription$ When CARDNAME leaves the battlefield, return the exiled card to the battlefield under its owner's control. SVar:TrigReturn:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | Defined$ Remembered T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ At the beginning of your upkeep, sacrifice CARDNAME unless any player pays {3}. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | UnlessCost$ 3 | UnlessPayer$ Player | UnlessAI$ OnlyOwn +SVar:TrigSac:DB$ Sacrifice | UnlessCost$ 3 | UnlessPayer$ Player | UnlessAI$ OnlyOwn SVar:PlayMain1:TRUE SVar:NeedsToPlayVar:Y GE3 SVar:Y:Count$Valid Land.YouCtrl diff --git a/forge-gui/res/cardsfolder/i/illusionary_armor.txt b/forge-gui/res/cardsfolder/i/illusionary_armor.txt index b6a7d8d2082..d4f02c45552 100644 --- a/forge-gui/res/cardsfolder/i/illusionary_armor.txt +++ b/forge-gui/res/cardsfolder/i/illusionary_armor.txt @@ -5,5 +5,5 @@ K:Enchant creature A:SP$ Attach | Cost$ 4 U | ValidTgts$ Creature | AILogic$ Pump S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 4 | AddToughness$ 4 | Description$ Enchanted creature gets +4/+4. T:Mode$ BecomesTarget | ValidTarget$ Card.AttachedBy | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When enchanted creature becomes the target of a spell or ability, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice Oracle:Enchant creature\nEnchanted creature gets +4/+4.\nWhen enchanted creature becomes the target of a spell or ability, sacrifice Illusionary Armor. diff --git a/forge-gui/res/cardsfolder/i/illusionary_servant.txt b/forge-gui/res/cardsfolder/i/illusionary_servant.txt index faec1ec6f04..20d3b871fab 100644 --- a/forge-gui/res/cardsfolder/i/illusionary_servant.txt +++ b/forge-gui/res/cardsfolder/i/illusionary_servant.txt @@ -4,6 +4,6 @@ Types:Creature Illusion PT:3/4 K:Flying T:Mode$ BecomesTarget | ValidTarget$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When CARDNAME becomes the target of a spell or ability, sacrifice it. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:Targeting:Dies Oracle:Flying\nWhen Illusionary Servant becomes the target of a spell or ability, sacrifice it. diff --git a/forge-gui/res/cardsfolder/i/impending_disaster.txt b/forge-gui/res/cardsfolder/i/impending_disaster.txt index de6223a96e6..164c94ed9c4 100644 --- a/forge-gui/res/cardsfolder/i/impending_disaster.txt +++ b/forge-gui/res/cardsfolder/i/impending_disaster.txt @@ -2,7 +2,7 @@ Name:Impending Disaster ManaCost:1 R Types:Enchantment T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigSac | IsPresent$ Land | PresentCompare$ GE7 | TriggerDescription$ At the beginning of your upkeep, if there are seven or more lands on the battlefield, sacrifice CARDNAME and destroy all lands. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | SubAbility$ DBDestroyAll +SVar:TrigSac:DB$ Sacrifice | SubAbility$ DBDestroyAll SVar:DBDestroyAll:DB$ DestroyAll | ValidCards$ Land | SpellDescription$ Destroy all lands. AI:RemoveDeck:Random Oracle:At the beginning of your upkeep, if there are seven or more lands on the battlefield, sacrifice Impending Disaster and destroy all lands. diff --git a/forge-gui/res/cardsfolder/i/instill_furor.txt b/forge-gui/res/cardsfolder/i/instill_furor.txt index fb6b7b5fa63..9890d5e8aa3 100644 --- a/forge-gui/res/cardsfolder/i/instill_furor.txt +++ b/forge-gui/res/cardsfolder/i/instill_furor.txt @@ -5,7 +5,7 @@ K:Enchant creature A:SP$ Attach | Cost$ 1 R | ValidTgts$ Creature | AILogic$ Curse S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddTrigger$ EOTTrigger | AddSVar$ InstillTrigSac & MustAttack | Description$ Enchanted creature has "At the beginning of your end step, sacrifice this creature unless it attacked this turn." SVar:EOTTrigger:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ InstillTrigSac | TriggerDescription$ At the beginning of your end step, sacrifice this creature unless it attacked this turn. -SVar:InstillTrigSac:DB$ Sacrifice | Defined$ Self | ConditionPresent$ Card.Self+notAttackedThisTurn | ConditionCompare$ GE1 +SVar:InstillTrigSac:DB$ Sacrifice | ConditionPresent$ Card.Self+notAttackedThisTurn | ConditionCompare$ GE1 SVar:MustAttack:True SVar:NonStackingAttachEffect:True Oracle:Enchant creature\nEnchanted creature has "At the beginning of your end step, sacrifice this creature unless it attacked this turn." diff --git a/forge-gui/res/cardsfolder/i/island_fish_jasconius.txt b/forge-gui/res/cardsfolder/i/island_fish_jasconius.txt index d9447f73534..1171258b405 100644 --- a/forge-gui/res/cardsfolder/i/island_fish_jasconius.txt +++ b/forge-gui/res/cardsfolder/i/island_fish_jasconius.txt @@ -5,7 +5,7 @@ PT:6/8 S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Island | Description$ CARDNAME can't attack unless defending player controls an Island. K:CARDNAME doesn't untap during your untap step. T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Island.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no Islands, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigUntap | TriggerDescription$ At the beginning of your upkeep, you may pay {U}{U}{U}. If you do, untap CARDNAME. SVar:TrigUntap:AB$Untap | Cost$ U U U | Defined$ Self SVar:NeedsToPlay:Island.YouCtrl diff --git a/forge-gui/res/cardsfolder/j/jack_in_the_mox.txt b/forge-gui/res/cardsfolder/j/jack_in_the_mox.txt index 8ddbfbfdebb..bff3e2a1da3 100644 --- a/forge-gui/res/cardsfolder/j/jack_in_the_mox.txt +++ b/forge-gui/res/cardsfolder/j/jack_in_the_mox.txt @@ -2,7 +2,7 @@ Name:Jack-in-the-Mox ManaCost:0 Types:Artifact A:AB$ RollDice | Cost$ T | ResultSubAbilities$ 1:DBSac,2:AddW,3:AddU,4:AddB,5:AddR,6:AddG | InstantSpeed$ True | SubAbility$ Add0 | SpellDescription$ Roll a six-sided die. This ability has the indicated effect. -SVar:DBSac:DB$ Sacrifice | Defined$ Self | SubAbility$ DBLoseLife | SpellDescription$ 1 — Sacrifice CARDNAME and you lose 5 life. +SVar:DBSac:DB$ Sacrifice | SubAbility$ DBLoseLife | SpellDescription$ 1 — Sacrifice CARDNAME and you lose 5 life. SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ 5 SVar:AddW:DB$ Mana | Produced$ W | SpellDescription$ 2 — Add {W}. SVar:AddU:DB$ Mana | Produced$ U | SpellDescription$ 3 — Add {U}. diff --git a/forge-gui/res/cardsfolder/j/jihad.txt b/forge-gui/res/cardsfolder/j/jihad.txt index f1ee5c07bf2..46dc09dbafa 100644 --- a/forge-gui/res/cardsfolder/j/jihad.txt +++ b/forge-gui/res/cardsfolder/j/jihad.txt @@ -6,7 +6,7 @@ SVar:ChooseColor:DB$ ChooseColor | Defined$ You | SubAbility$ ChooseP | AILogic$ SVar:ChooseP:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent S:Mode$ Continuous | Affected$ Creature.White | AddPower$ 2 | AddToughness$ 1 | CheckSVar$ X | Description$ White creatures get +2/+1 as long as the chosen player controls a nontoken permanent of the chosen color. T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Permanent.nontoken+ChosenColor+ChosenCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When the chosen player controls no nontoken permanents of the chosen color, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:X:Count$Valid Permanent.nontoken+ChosenColor+ChosenCtrl SVar:NeedsToPlay:Permanent.nonColorless+OppCtrl Oracle:As Jihad enters the battlefield, choose a color and an opponent.\nWhite creatures get +2/+1 as long as the chosen player controls a nontoken permanent of the chosen color.\nWhen the chosen player controls no nontoken permanents of the chosen color, sacrifice Jihad. diff --git a/forge-gui/res/cardsfolder/j/jokulmorder.txt b/forge-gui/res/cardsfolder/j/jokulmorder.txt index c52da4876c8..dce77a1da85 100644 --- a/forge-gui/res/cardsfolder/j/jokulmorder.txt +++ b/forge-gui/res/cardsfolder/j/jokulmorder.txt @@ -5,7 +5,7 @@ PT:12/12 K:Trample K:CARDNAME enters the battlefield tapped. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you sacrifice five lands. -SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Sac<5/Land> | UnlessPayer$ You +SVar:TrigSacUnless:DB$ Sacrifice | UnlessCost$ Sac<5/Land> | UnlessPayer$ You K:CARDNAME doesn't untap during your untap step. T:Mode$ LandPlayed | ValidCard$ Island.YouCtrl | Execute$ TrigUntap | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ Whenever you play an Island, you may untap CARDNAME. SVar:TrigUntap:DB$ Untap | Defined$ Self diff --git a/forge-gui/res/cardsfolder/j/jungle_basin.txt b/forge-gui/res/cardsfolder/j/jungle_basin.txt index 064fe324d65..dc778bb2fe1 100644 --- a/forge-gui/res/cardsfolder/j/jungle_basin.txt +++ b/forge-gui/res/cardsfolder/j/jungle_basin.txt @@ -4,6 +4,6 @@ Types:Land K:CARDNAME enters the battlefield tapped. A:AB$ Mana | Cost$ T | Produced$ C G | SpellDescription$ Add {C}{G}. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return an untapped Forest you control to its owner's hand. -SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Return<1/Forest.untapped/untapped Forest> | UnlessPayer$ You +SVar:TrigSacUnless:DB$ Sacrifice | UnlessCost$ Return<1/Forest.untapped/untapped Forest> | UnlessPayer$ You SVar:NeedsToPlay:Forest.YouCtrl+untapped Oracle:Jungle Basin enters the battlefield tapped.\nWhen Jungle Basin enters the battlefield, sacrifice it unless you return an untapped Forest you control to its owner's hand.\n{T}: Add {C}{G}. diff --git a/forge-gui/res/cardsfolder/j/junk_golem.txt b/forge-gui/res/cardsfolder/j/junk_golem.txt index 3d5f3b5ca0f..c761cabd34a 100644 --- a/forge-gui/res/cardsfolder/j/junk_golem.txt +++ b/forge-gui/res/cardsfolder/j/junk_golem.txt @@ -4,7 +4,7 @@ Types:Artifact Creature Golem PT:0/0 K:etbCounter:P1P1:3 K:UpkeepCost:SubCounter<1/P1P1> -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | UnlessCost$ SubCounter<1/P1P1> | UnlessPayer$ You +SVar:TrigSac:DB$ Sacrifice | UnlessCost$ SubCounter<1/P1P1> | UnlessPayer$ You A:AB$ PutCounter | Cost$ 1 Discard<1/Card> | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Put a +1/+1 counter on CARDNAME. AI:RemoveDeck:All Oracle:Junk Golem enters the battlefield with three +1/+1 counters on it.\nAt the beginning of your upkeep, sacrifice Junk Golem unless you remove a +1/+1 counter from it.\n{1}, Discard a card: Put a +1/+1 counter on Junk Golem. diff --git a/forge-gui/res/cardsfolder/k/karoo.txt b/forge-gui/res/cardsfolder/k/karoo.txt index 7b5c3f835da..f49055fd236 100644 --- a/forge-gui/res/cardsfolder/k/karoo.txt +++ b/forge-gui/res/cardsfolder/k/karoo.txt @@ -4,6 +4,6 @@ Types:Land K:CARDNAME enters the battlefield tapped. A:AB$ Mana | Cost$ T | Produced$ C W | SpellDescription$ Add {C}{W}. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return an untapped Plains you control to its owner's hand. -SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Return<1/Plains.untapped/untapped Plains> | UnlessPayer$ You +SVar:TrigSacUnless:DB$ Sacrifice | UnlessCost$ Return<1/Plains.untapped/untapped Plains> | UnlessPayer$ You SVar:NeedsToPlay:Plains.YouCtrl+untapped Oracle:Karoo enters the battlefield tapped.\nWhen Karoo enters the battlefield, sacrifice it unless you return an untapped Plains you control to its owner's hand.\n{T}: Add {C}{W}. diff --git a/forge-gui/res/cardsfolder/k/krazy_kow.txt b/forge-gui/res/cardsfolder/k/krazy_kow.txt index 634694504ff..c8f102694c5 100644 --- a/forge-gui/res/cardsfolder/k/krazy_kow.txt +++ b/forge-gui/res/cardsfolder/k/krazy_kow.txt @@ -4,6 +4,6 @@ Types:Creature Cow PT:3/3 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigRoll | TriggerDescription$ At the beginning of your upkeep, roll a six-sided die. If you a roll a 1, sacrifice Krazy Kow and it deals 3 damage to each creature and each player. SVar:TrigRoll:DB$ RollDice | ResultSubAbilities$ 1:DBSac -SVar:DBSac:DB$ Sacrifice | Defined$ Self | SubAbility$ DBDamage +SVar:DBSac:DB$ Sacrifice | SubAbility$ DBDamage SVar:DBDamage:DB$ DamageAll | ValidCards$ Creature | ValidPlayers$ Player | NumDmg$ 3 Oracle:At the beginning of your upkeep, roll a six-sided die. If you a roll a 1, sacrifice Krazy Kow and it deals 3 damage to each creature and each player. diff --git a/forge-gui/res/cardsfolder/k/kukemssa_serpent.txt b/forge-gui/res/cardsfolder/k/kukemssa_serpent.txt index 15c0e171d18..ada9836877f 100644 --- a/forge-gui/res/cardsfolder/k/kukemssa_serpent.txt +++ b/forge-gui/res/cardsfolder/k/kukemssa_serpent.txt @@ -5,7 +5,7 @@ PT:4/3 S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Island | Description$ CARDNAME can't attack unless defending player controls an Island. A:AB$ Animate | Cost$ U Sac<1/Island> | ValidTgts$ Land.OppCtrl | TgtPrompt$ Select target land an opponent controls | Types$ Island | RemoveLandTypes$ True | SpellDescription$ Target land an opponent controls becomes an Island until end of turn. T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Island.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no Islands, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:NeedsToPlay:Island.YouCtrl AI:RemoveDeck:All Oracle:Kukemssa Serpent can't attack unless defending player controls an Island.\n{U}, Sacrifice an Island: Target land an opponent controls becomes an Island until end of turn.\nWhen you control no Islands, sacrifice Kukemssa Serpent. diff --git a/forge-gui/res/cardsfolder/l/labyrinth_guardian.txt b/forge-gui/res/cardsfolder/l/labyrinth_guardian.txt index 106721c5dd8..16a21e0ec48 100644 --- a/forge-gui/res/cardsfolder/l/labyrinth_guardian.txt +++ b/forge-gui/res/cardsfolder/l/labyrinth_guardian.txt @@ -3,7 +3,7 @@ ManaCost:1 U Types:Creature Illusion Warrior PT:2/3 T:Mode$ BecomesTarget | ValidTarget$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigSac | ValidSource$ Spell | TriggerDescription$ When CARDNAME becomes the target of a spell, sacrifice it. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice K:Embalm:3 U SVar:Targeting:Dies DeckHas:Ability$Token diff --git a/forge-gui/res/cardsfolder/l/last_laugh.txt b/forge-gui/res/cardsfolder/l/last_laugh.txt index 84d199b0903..ba19c4157f4 100644 --- a/forge-gui/res/cardsfolder/l/last_laugh.txt +++ b/forge-gui/res/cardsfolder/l/last_laugh.txt @@ -2,7 +2,7 @@ Name:Last Laugh ManaCost:2 B B Types:Enchantment T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Creature | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When there are no creatures on the battlefield, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Permanent.Other | TriggerZones$ Battlefield | Execute$ TrigDamageAll | TriggerDescription$ Whenever a permanent other than CARDNAME is put into a graveyard from the battlefield, CARDNAME deals 1 damage to each creature and each player. SVar:TrigDamageAll:DB$ DamageAll | ValidCards$ Creature | ValidPlayers$ Player | ValidDescription$ each creature and each player. | NumDmg$ 1 AI:RemoveDeck:Random diff --git a/forge-gui/res/cardsfolder/l/longhorn_firebeast.txt b/forge-gui/res/cardsfolder/l/longhorn_firebeast.txt index d81ff8145ee..3f9b72465a5 100644 --- a/forge-gui/res/cardsfolder/l/longhorn_firebeast.txt +++ b/forge-gui/res/cardsfolder/l/longhorn_firebeast.txt @@ -4,5 +4,5 @@ Types:Creature Elemental Ox Beast PT:3/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDealDamage | OptionalDecider$ Opponent | TriggerDescription$ When CARDNAME enters the battlefield, any opponent may have it deal 5 damage to them. If a player does, sacrifice CARDNAME. SVar:TrigDealDamage:DB$ DealDamage | Defined$ Opponent | NumDmg$ 5 | SubAbility$ DBSacrifice -SVar:DBSacrifice:DB$ Sacrifice | Defined$ Self +SVar:DBSacrifice:DB$ Sacrifice Oracle:When Longhorn Firebeast enters the battlefield, any opponent may have it deal 5 damage to them. If a player does, sacrifice Longhorn Firebeast. diff --git a/forge-gui/res/cardsfolder/l/lord_of_tresserhorn.txt b/forge-gui/res/cardsfolder/l/lord_of_tresserhorn.txt index ebec32e0139..e188b8272dd 100644 --- a/forge-gui/res/cardsfolder/l/lord_of_tresserhorn.txt +++ b/forge-gui/res/cardsfolder/l/lord_of_tresserhorn.txt @@ -2,7 +2,7 @@ Name:Lord of Tresserhorn ManaCost:1 U B R Types:Legendary Creature Zombie PT:10/4 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigLose | AILogic$ BadETB | TriggerDescription$ When CARDNAME enters the battlefield, you lose 2 life, you sacrifice two creatures, and target opponent draws two cards. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigLose | AILogic$ BadETB | TriggerDescription$ When CARDNAME enters the battlefield, you lose 2 life, you sacrifice two creatures, and target opponent draws two cards. A:AB$ Regenerate | Cost$ B | SpellDescription$ Regenerate CARDNAME. SVar:TrigLose:DB$ LoseLife | LifeAmount$ 2 | SubAbility$ DBSac SVar:DBSac:DB$ Sacrifice | Amount$ 2 | SacValid$ Creature | SubAbility$ DBDraw diff --git a/forge-gui/res/cardsfolder/m/maestros_theater.txt b/forge-gui/res/cardsfolder/m/maestros_theater.txt index 84b3b37505f..7e64f35a99c 100644 --- a/forge-gui/res/cardsfolder/m/maestros_theater.txt +++ b/forge-gui/res/cardsfolder/m/maestros_theater.txt @@ -2,7 +2,7 @@ Name:Maestros Theater ManaCost:no cost Types:Land T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBSacrifice | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it. When you do, search your library for a basic Island, Swamp, or Mountain card, put it onto the battlefield tapped, then shuffle and you gain 1 life. -SVar:DBSacrifice:DB$ Sacrifice | Defined$ Self | RememberSacrificed$ True | SubAbility$ DBImmediateTrigger +SVar:DBSacrifice:DB$ Sacrifice | RememberSacrificed$ True | SubAbility$ DBImmediateTrigger SVar:DBImmediateTrigger:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card | Execute$ DBChangeZone | SubAbility$ DBCleanup | TriggerDescription$ Search your library for a basic Island, Swamp, or Mountain card, put it onto the battlefield tapped, then shuffle and you gain 1 life. SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Island+Basic,Land.Swamp+Basic,Land.Mountain+Basic | ChangeNum$ 1 | SubAbility$ DBGainLife SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 diff --git a/forge-gui/res/cardsfolder/m/magmasaur.txt b/forge-gui/res/cardsfolder/m/magmasaur.txt index 1f7101902fc..41769104dc2 100644 --- a/forge-gui/res/cardsfolder/m/magmasaur.txt +++ b/forge-gui/res/cardsfolder/m/magmasaur.txt @@ -4,7 +4,7 @@ Types:Creature Elemental Dinosaur PT:0/0 K:etbCounter:P1P1:5 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ SelfDestruct | TriggerDescription$ At the beginning of your upkeep, you may remove a +1/+1 counter from CARDNAME. If you don't, sacrifice CARDNAME and it deals damage equal to the number of +1/+1 counters on it to each creature without flying and each player. -SVar:SelfDestruct:DB$ Sacrifice | Defined$ Self | RememberSacrificed$ True | UnlessCost$ SubCounter<1/P1P1> | UnlessPayer$ You | SubAbility$ LetEmHaveIt +SVar:SelfDestruct:DB$ Sacrifice | RememberSacrificed$ True | UnlessCost$ SubCounter<1/P1P1> | UnlessPayer$ You | SubAbility$ LetEmHaveIt SVar:LetEmHaveIt:DB$ DamageAll | ValidCards$ Creature.withoutFlying | ValidPlayers$ Player | NumDmg$ X | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Count$CardCounters.P1P1 diff --git a/forge-gui/res/cardsfolder/m/makeshift_mannequin.txt b/forge-gui/res/cardsfolder/m/makeshift_mannequin.txt index 769b61e22b1..d4cdadd020c 100644 --- a/forge-gui/res/cardsfolder/m/makeshift_mannequin.txt +++ b/forge-gui/res/cardsfolder/m/makeshift_mannequin.txt @@ -5,6 +5,6 @@ A:SP$ ChangeZone | Cost$ 3 B | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select t SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ MannequinStatic | Duration$ Permanent | SubAbility$ DBCleanup | ForgetOnMoved$ Battlefield | ForgetCounter$ MANNEQUIN SVar:MannequinStatic:Mode$ Continuous | EffectZone$ Command | Affected$ Card.IsRemembered | AddTrigger$ MannequinBecomesTarget | Description$ For as long as that creature has a mannequin counter on it, it has "When this creature becomes the target of a spell or ability, sacrifice it." SVar:MannequinBecomesTarget:Mode$ BecomesTarget | ValidTarget$ Card.Self | TriggerZones$ Battlefield | Execute$ MakeshiftSac | TriggerDescription$ When CARDNAME becomes the target of a spell or ability, sacrifice it. -SVar:MakeshiftSac:DB$ Sacrifice | Defined$ Self +SVar:MakeshiftSac:DB$ Sacrifice SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:Return target creature card from your graveyard to the battlefield with a mannequin counter on it. For as long as that creature has a mannequin counter on it, it has "When this creature becomes the target of a spell or ability, sacrifice it." diff --git a/forge-gui/res/cardsfolder/m/mana_vortex.txt b/forge-gui/res/cardsfolder/m/mana_vortex.txt index 14068c5245f..6bd62b1ecb8 100644 --- a/forge-gui/res/cardsfolder/m/mana_vortex.txt +++ b/forge-gui/res/cardsfolder/m/mana_vortex.txt @@ -6,7 +6,7 @@ SVar:TrigCounter:DB$ Counter | Defined$ TriggeredSpellAbility | UnlessCost$ Sac< T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ At the beginning of each player's upkeep, that player sacrifices a land. SVar:TrigSac:DB$ Sacrifice | SacValid$ Land | Defined$ TriggeredPlayer | SacMessage$ land T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Land | PresentCompare$ EQ0 | Execute$ TrigSacSelf | TriggerDescription$ When there are no lands on the battlefield, sacrifice CARDNAME. -SVar:TrigSacSelf:DB$ Sacrifice | Defined$ Self +SVar:TrigSacSelf:DB$ Sacrifice AI:RemoveDeck:Random DeckHas:Ability$Sacrifice Oracle:When you cast this spell, counter it unless you sacrifice a land.\nAt the beginning of each player's upkeep, that player sacrifices a land.\nWhen there are no lands on the battlefield, sacrifice Mana Vortex. diff --git a/forge-gui/res/cardsfolder/m/mandate_of_abaddon.txt b/forge-gui/res/cardsfolder/m/mandate_of_abaddon.txt index 9036d835c98..7ac1feed5b2 100644 --- a/forge-gui/res/cardsfolder/m/mandate_of_abaddon.txt +++ b/forge-gui/res/cardsfolder/m/mandate_of_abaddon.txt @@ -1,7 +1,7 @@ Name:Mandate of Abaddon ManaCost:3 B Types:Sorcery -A:SP$ ChooseCard | Choices$ Creature.YouCtrl | TgtPrompt$ Choose target creature you control | SubAbility$ DBDestroyAll | SpellDescription$ Choose target creature you control. Destroy all creatures with power less than that creature's power. +A:SP$ ChooseCard | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Choose target creature you control | SubAbility$ DBDestroyAll | SpellDescription$ Choose target creature you control. Destroy all creatures with power less than that creature's power. SVar:DBDestroyAll:DB$ DestroyAll | ValidCards$ Creature.powerLTX SVar:X:Targeted$CardPower Oracle:Choose target creature you control. Destroy all creatures with power less than that creature's power. diff --git a/forge-gui/res/cardsfolder/m/manta_ray.txt b/forge-gui/res/cardsfolder/m/manta_ray.txt index 3bc098b38d2..c15d11e7053 100644 --- a/forge-gui/res/cardsfolder/m/manta_ray.txt +++ b/forge-gui/res/cardsfolder/m/manta_ray.txt @@ -5,6 +5,6 @@ PT:3/3 S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Island | Description$ CARDNAME can't attack unless defending player controls an Island. S:Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.nonBlue | Description$ CARDNAME can't be blocked except by blue creatures. T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Island.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no Islands, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:NeedsToPlay:Island.YouCtrl Oracle:Manta Ray can't attack unless defending player controls an Island.\nManta Ray can't be blocked except by blue creatures.\nWhen you control no Islands, sacrifice Manta Ray. diff --git a/forge-gui/res/cardsfolder/m/marjhan.txt b/forge-gui/res/cardsfolder/m/marjhan.txt index 4baca9bce2e..024635a7c2c 100644 --- a/forge-gui/res/cardsfolder/m/marjhan.txt +++ b/forge-gui/res/cardsfolder/m/marjhan.txt @@ -5,7 +5,7 @@ PT:8/8 K:CARDNAME doesn't untap during your untap step. S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Island | Description$ CARDNAME can't attack unless defending player controls an Island. T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Island.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no Islands, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice A:AB$ Untap | Cost$ U U Sac<1/Creature> | ActivationPhases$ Upkeep | PlayerTurn$ True | SpellDescription$ Untap CARDNAME. Activate only during your upkeep. A:AB$ DealDamage | Cost$ U U | NumDmg$ 1 | ValidTgts$ Creature.attacking+withoutFlying | TgtPrompt$ Select target attacking creature without flying | SubAbility$ DBPump | SpellDescription$ CARDNAME gets -1/-0 until end of turn and deals 1 damage to target attacking creature without flying. SVar:DBPump:DB$ Pump | NumAtt$ -1 | Defined$ Self diff --git a/forge-gui/res/cardsfolder/m/mark_of_the_oni.txt b/forge-gui/res/cardsfolder/m/mark_of_the_oni.txt index db66361887e..c6a05a22417 100644 --- a/forge-gui/res/cardsfolder/m/mark_of_the_oni.txt +++ b/forge-gui/res/cardsfolder/m/mark_of_the_oni.txt @@ -5,7 +5,7 @@ K:Enchant creature A:SP$ Attach | Cost$ 2 B | ValidTgts$ Creature | AILogic$ GainControl S:Mode$ Continuous | Affected$ Card.EnchantedBy | GainControl$ You | Description$ You control enchanted creature. T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | IsPresent$ Demon.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ At the beginning of the end step, if you control no Demons, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:PlayMain1:TRUE AI:RemoveDeck:Random SVar:NeedsToPlay:Demon.YouCtrl diff --git a/forge-gui/res/cardsfolder/m/measure_of_wickedness.txt b/forge-gui/res/cardsfolder/m/measure_of_wickedness.txt index a2c54f9749f..792cb96b694 100644 --- a/forge-gui/res/cardsfolder/m/measure_of_wickedness.txt +++ b/forge-gui/res/cardsfolder/m/measure_of_wickedness.txt @@ -2,7 +2,7 @@ Name:Measure of Wickedness ManaCost:3 B Types:Enchantment T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ At the beginning of your end step, sacrifice CARDNAME and you lose 8 life. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | SubAbility$ DBLoseLife +SVar:TrigSac:DB$ Sacrifice | SubAbility$ DBLoseLife SVar:DBLoseLife:DB$ LoseLife | Defined$ You | LifeAmount$ 8 T:Mode$ ChangesZone | Origin$ Any | Destination$ Graveyard | ValidCard$ Card.nonToken+YouOwn+Other | TriggerZones$ Battlefield | Execute$ TrigGainControl | TriggerDescription$ Whenever another card is put into your graveyard from anywhere, target opponent gains control of CARDNAME. SVar:TrigGainControl:DB$ GainControl | Defined$ Self | ValidTgts$ Opponent | TgtPrompt$ Select target opponent diff --git a/forge-gui/res/cardsfolder/m/megatherium.txt b/forge-gui/res/cardsfolder/m/megatherium.txt index 327570a016e..f46e5d8e4b6 100644 --- a/forge-gui/res/cardsfolder/m/megatherium.txt +++ b/forge-gui/res/cardsfolder/m/megatherium.txt @@ -4,7 +4,7 @@ Types:Creature Beast PT:4/4 K:Trample T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you pay {1} for each card in your hand. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | UnlessCost$ X | UnlessPayer$ You +SVar:TrigSac:DB$ Sacrifice | UnlessCost$ X | UnlessPayer$ You SVar:X:Count$InYourHand AI:RemoveDeck:All Oracle:Trample\nWhen Megatherium enters the battlefield, sacrifice it unless you pay {1} for each card in your hand. diff --git a/forge-gui/res/cardsfolder/m/mercenary_knight.txt b/forge-gui/res/cardsfolder/m/mercenary_knight.txt index 5bc98c37941..48f216820fd 100644 --- a/forge-gui/res/cardsfolder/m/mercenary_knight.txt +++ b/forge-gui/res/cardsfolder/m/mercenary_knight.txt @@ -3,7 +3,7 @@ ManaCost:2 B Types:Creature Human Mercenary Knight PT:4/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBSacSelf | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you discard a creature card. -SVar:DBSacSelf:DB$ Sacrifice | Defined$ Self | UnlessCost$ Discard<1/Creature> | UnlessPayer$ You +SVar:DBSacSelf:DB$ Sacrifice | UnlessCost$ Discard<1/Creature> | UnlessPayer$ You SVar:NeedsToPlayVar:Y GE2 SVar:Y:Count$TypeInYourHand.Creature Oracle:When Mercenary Knight enters the battlefield, sacrifice it unless you discard a creature card. diff --git a/forge-gui/res/cardsfolder/m/merchant_ship.txt b/forge-gui/res/cardsfolder/m/merchant_ship.txt index 104889b0c5c..eb68f0f9bba 100644 --- a/forge-gui/res/cardsfolder/m/merchant_ship.txt +++ b/forge-gui/res/cardsfolder/m/merchant_ship.txt @@ -4,7 +4,7 @@ Types:Creature Human PT:0/2 S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Island | Description$ CARDNAME can't attack unless defending player controls an Island. T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Island.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no Islands, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice T:Mode$ AttackerUnblocked | ValidCard$ Card.Self | Execute$ TrigGainLife | TriggerDescription$ Whenever CARDNAME attacks and isn't blocked, you gain 2 life. SVar:TrigGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 2 SVar:NeedsToPlay:Island.YouCtrl diff --git a/forge-gui/res/cardsfolder/m/mogg_bombers.txt b/forge-gui/res/cardsfolder/m/mogg_bombers.txt index 018b367a2ac..b8f322ae694 100644 --- a/forge-gui/res/cardsfolder/m/mogg_bombers.txt +++ b/forge-gui/res/cardsfolder/m/mogg_bombers.txt @@ -3,6 +3,6 @@ ManaCost:3 R Types:Creature Goblin PT:3/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Other | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When another creature enters the battlefield, sacrifice CARDNAME and it deals 3 damage to target player or planeswalker. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | SubAbility$ DBDamage +SVar:TrigSac:DB$ Sacrifice | SubAbility$ DBDamage SVar:DBDamage:DB$ DealDamage | ValidTgts$ Player,Planeswalker | TgtPrompt$ Select target player or planeswalker to deal 3 damage to | NumDmg$ 3 Oracle:When another creature enters the battlefield, sacrifice Mogg Bombers and it deals 3 damage to target player or planeswalker. diff --git a/forge-gui/res/cardsfolder/m/mold_demon.txt b/forge-gui/res/cardsfolder/m/mold_demon.txt index e4187c4b212..cbabe6c8e50 100644 --- a/forge-gui/res/cardsfolder/m/mold_demon.txt +++ b/forge-gui/res/cardsfolder/m/mold_demon.txt @@ -3,7 +3,7 @@ ManaCost:5 B B Types:Creature Fungus Demon PT:6/6 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you sacrifice two Swamps. -SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Sac<2/Swamp> | UnlessPayer$ You +SVar:TrigSacUnless:DB$ Sacrifice | UnlessCost$ Sac<2/Swamp> | UnlessPayer$ You SVar:NeedsToPlayVar:Y GE2 SVar:Y:Count$Valid Swamp.YouCtrl DeckHas:Ability$Sacrifice diff --git a/forge-gui/res/cardsfolder/m/monkey_cage.txt b/forge-gui/res/cardsfolder/m/monkey_cage.txt index 9aaef33d18c..e57a596c2ae 100644 --- a/forge-gui/res/cardsfolder/m/monkey_cage.txt +++ b/forge-gui/res/cardsfolder/m/monkey_cage.txt @@ -2,7 +2,7 @@ Name:Monkey Cage ManaCost:5 Types:Artifact T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When a creature enters the battlefield, sacrifice CARDNAME and create X 2/2 green Monkey creature tokens, where X is that creature's mana value. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | SubAbility$ DBToken | RememberSacrificed$ True +SVar:TrigSac:DB$ Sacrifice | SubAbility$ DBToken | RememberSacrificed$ True SVar:DBToken:DB$ Token | ConditionDefined$ Remembered | ConditionPresent$ Card.Self | TokenAmount$ X | TokenScript$ g_2_2_monkey | TokenOwner$ You SVar:X:TriggeredCard$CardManaCost DeckHas:Ability$Sacrifice|Token & Type$Monkey & Color$Green diff --git a/forge-gui/res/cardsfolder/n/nettlevine_blight.txt b/forge-gui/res/cardsfolder/n/nettlevine_blight.txt index 0315b9bb741..e66bf440e63 100644 --- a/forge-gui/res/cardsfolder/n/nettlevine_blight.txt +++ b/forge-gui/res/cardsfolder/n/nettlevine_blight.txt @@ -5,7 +5,7 @@ K:Enchant creature or land A:SP$ Attach | Cost$ 4 B B | ValidTgts$ Creature,Land | AILogic$ Curse S:Mode$ Continuous | Affected$ Card.AttachedBy | AddTrigger$ NettlevineTrig | Description$ Enchanted permanent has "At the beginning of your end step, sacrifice this permanent and attach CARDNAME to a creature or land you control." SVar:NettlevineTrig:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ NettlevineSac | TriggerDescription$ At the beginning of your end step, sacrifice CARDNAME and ORIGINALHOST to a creature or land you control. -SVar:NettlevineSac:DB$ Sacrifice | Defined$ Self | SubAbility$ NettlevineAttach +SVar:NettlevineSac:DB$ Sacrifice | SubAbility$ NettlevineAttach SVar:NettlevineAttach:DB$ Attach | Object$ OriginalHost | Choices$ Creature.YouCtrl,Land.YouCtrl SVar:NonStackingAttachEffect:True Oracle:Enchant creature or land\nEnchanted permanent has "At the beginning of your end step, sacrifice this permanent and attach Nettlevine Blight to a creature or land you control." diff --git a/forge-gui/res/cardsfolder/n/nicol_bolas_dragon_god.txt b/forge-gui/res/cardsfolder/n/nicol_bolas_dragon_god.txt index 1da2899ce24..d947b80f1f8 100644 --- a/forge-gui/res/cardsfolder/n/nicol_bolas_dragon_god.txt +++ b/forge-gui/res/cardsfolder/n/nicol_bolas_dragon_god.txt @@ -5,7 +5,7 @@ Loyalty:4 S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ Battlefield | GainsAbilitiesOf$ Planeswalker.Other | GainsValidAbilities$ Activated.Loyalty | Description$ CARDNAME has all loyalty abilities of all other planeswalkers on the battlefield. A:AB$ Draw | Cost$ AddCounter<1/LOYALTY> | NumCards$ 1 | SubAbility$ DBChangeZone | Planeswalker$ True | SpellDescription$ You draw a card. Each opponent exiles a card from their hand or a permanent they control. SVar:DBChangeZone:DB$ ChangeZone | Origin$ Battlefield,Hand | Destination$ Exile | DefinedPlayer$ Player.Opponent | ChangeType$ Card | ChangeNum$ 1 | Mandatory$ True -AI:RemoveDeck:Random A:AB$ Destroy | Cost$ SubCounter<3/LOYALTY> | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | Planeswalker$ True | SpellDescription$ Destroy target creature or planeswalker. A:AB$ LosesGame | Cost$ SubCounter<8/LOYALTY> | Defined$ Player.Opponent+controlsLegendary.Creature_EQ0+controlsPlaneswalker_LE0 | Planeswalker$ True | Ultimate$ True | SpellDescription$ Each opponent who doesn't control a legendary creature or planeswalker loses the game. +AI:RemoveDeck:Random Oracle:Nicol Bolas, Dragon-God has all loyalty abilities of all other planeswalkers on the battlefield.\n[+1]: You draw a card. Each opponent exiles a card from their hand or a permanent they control.\n[-3]: Destroy target creature or planeswalker.\n[-8]: Each opponent who doesn't control a legendary creature or planeswalker loses the game. diff --git a/forge-gui/res/cardsfolder/o/obscura_storefront.txt b/forge-gui/res/cardsfolder/o/obscura_storefront.txt index c17d4cc81e2..2a7f49a7c95 100644 --- a/forge-gui/res/cardsfolder/o/obscura_storefront.txt +++ b/forge-gui/res/cardsfolder/o/obscura_storefront.txt @@ -2,7 +2,7 @@ Name:Obscura Storefront ManaCost:no cost Types:Land T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBSacrifice | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it. When you do, search your library for a basic Plains, Island, or Swamp card, put it onto the battlefield tapped, then shuffle and you gain 1 life. -SVar:DBSacrifice:DB$ Sacrifice | Defined$ Self | RememberSacrificed$ True | SubAbility$ DBImmediateTrigger +SVar:DBSacrifice:DB$ Sacrifice | RememberSacrificed$ True | SubAbility$ DBImmediateTrigger SVar:DBImmediateTrigger:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card | Execute$ DBChangeZone | SubAbility$ DBCleanup | TriggerDescription$ Search your library for a basic Plains, Island, or Swamp card, put it onto the battlefield tapped, then shuffle and you gain 1 life. SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Plains+Basic,Land.Island+Basic,Land.Swamp+Basic | ChangeNum$ 1 | SubAbility$ DBGainLife SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 diff --git a/forge-gui/res/cardsfolder/o/ovinomancer.txt b/forge-gui/res/cardsfolder/o/ovinomancer.txt index dc33c759f99..939bba3178d 100644 --- a/forge-gui/res/cardsfolder/o/ovinomancer.txt +++ b/forge-gui/res/cardsfolder/o/ovinomancer.txt @@ -5,9 +5,6 @@ PT:0/1 T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigBounce | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return three basic lands you control to their owner's hand. A:AB$ Destroy | Cost$ Return<1/CARDNAME> T | ValidTgts$ Creature | TgtPrompt$ Select target creature | NoRegen$ True | SubAbility$ DBToken | SpellDescription$ Destroy target creature. It can't be regenerated. SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ g_0_1_sheep | TokenOwner$ TargetedController -SVar:TrigBounce:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | ChangeType$ Land.Basic+YouCtrl | ChangeNum$ 3 | Optional$ True | RememberChanged$ True | SubAbility$ DBSacSelf -SVar:DBSacSelf:DB$ Sacrifice | Defined$ Self | SubAbility$ DBCleanup | ConditionCheckSVar$ X | ConditionSVarCompare$ LT3 -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:X:Remembered$Amount +SVar:TrigBounce:DB$ Sacrifice | UnlessCost$ Return<3/Land.Basic> | UnlessPayer$ You AI:RemoveDeck:All Oracle:When Ovinomancer enters the battlefield, sacrifice it unless you return three basic lands you control to their owner's hand.\n{T}, Return Ovinomancer to its owner's hand: Destroy target creature. It can't be regenerated. That creature's controller creates a 0/1 green Sheep creature token. diff --git a/forge-gui/res/cardsfolder/p/patagia_viper.txt b/forge-gui/res/cardsfolder/p/patagia_viper.txt index 77d30ff8709..3b08de58e12 100644 --- a/forge-gui/res/cardsfolder/p/patagia_viper.txt +++ b/forge-gui/res/cardsfolder/p/patagia_viper.txt @@ -6,7 +6,7 @@ K:Flying T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create two 1/1 green and blue Snake creature tokens. T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSac | ManaNotSpent$ U | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless {U} was spent to cast it. SVar:TrigToken:DB$ Token | TokenAmount$ 2 | TokenScript$ gu_1_1_snake | TokenOwner$ You -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:ManaNeededToAvoidNegativeEffect:blue AI:RemoveDeck:Random DeckNeeds:Color$Blue diff --git a/forge-gui/res/cardsfolder/p/pendrell_flux.txt b/forge-gui/res/cardsfolder/p/pendrell_flux.txt index 520addfcf6a..f6a54be0b31 100644 --- a/forge-gui/res/cardsfolder/p/pendrell_flux.txt +++ b/forge-gui/res/cardsfolder/p/pendrell_flux.txt @@ -5,6 +5,6 @@ K:Enchant creature A:SP$ Attach | Cost$ 1 U | ValidTgts$ Creature | TgtPrompt$ Select target creature | AITgts$ Card.cmcGE1 | AILogic$ Curse S:Mode$ Continuous | Affected$ Creature.AttachedBy | AddTrigger$ TrigPhase | AddSVar$ TrigPendrellFlux | Description$ Enchanted creature has "At the beginning of your upkeep, sacrifice this creature unless you pay its mana cost." SVar:TrigPhase:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigPendrellFlux | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of your upkeep, sacrifice this creature unless you pay its mana cost. -SVar:TrigPendrellFlux:DB$ Sacrifice | Defined$ Self | UnlessCost$ CardManaCost | UnlessPayer$ You +SVar:TrigPendrellFlux:DB$ Sacrifice | UnlessCost$ CardManaCost | UnlessPayer$ You SVar:NonStackingAttachEffect:True Oracle:Enchant creature\nEnchanted creature has "At the beginning of your upkeep, sacrifice this creature unless you pay its mana cost." diff --git a/forge-gui/res/cardsfolder/p/pestilence.txt b/forge-gui/res/cardsfolder/p/pestilence.txt index 87409ca2b4a..2ae9aeb04fc 100644 --- a/forge-gui/res/cardsfolder/p/pestilence.txt +++ b/forge-gui/res/cardsfolder/p/pestilence.txt @@ -2,7 +2,7 @@ Name:Pestilence ManaCost:2 B B Types:Enchantment T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | IsPresent$ Creature | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ At the beginning of the end step, if no creatures are on the battlefield, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice A:AB$ DamageAll | Cost$ B | NumDmg$ 1 | ValidCards$ Creature | ValidPlayers$ Player | ValidDescription$ each creature and each player. | AILogic$ DmgAllCreaturesAndPlayers | SpellDescription$ CARDNAME deals 1 damage to each creature and each player. SVar:NeedsToPlay:Creature SVar:NonStackingEffect:True diff --git a/forge-gui/res/cardsfolder/p/phantasmal_abomination.txt b/forge-gui/res/cardsfolder/p/phantasmal_abomination.txt index 2a141577b2d..388c992cc0d 100644 --- a/forge-gui/res/cardsfolder/p/phantasmal_abomination.txt +++ b/forge-gui/res/cardsfolder/p/phantasmal_abomination.txt @@ -4,6 +4,6 @@ Types:Creature Illusion PT:5/5 K:Defender T:Mode$ BecomesTarget | ValidTarget$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When CARDNAME becomes the target of a spell or ability, sacrifice it. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:Targeting:Dies Oracle:Defender\nWhen Phantasmal Abomination becomes the target of a spell or ability, sacrifice it. diff --git a/forge-gui/res/cardsfolder/p/phantasmal_bear.txt b/forge-gui/res/cardsfolder/p/phantasmal_bear.txt index 19772ea51ba..de811d14dc4 100644 --- a/forge-gui/res/cardsfolder/p/phantasmal_bear.txt +++ b/forge-gui/res/cardsfolder/p/phantasmal_bear.txt @@ -3,6 +3,6 @@ ManaCost:U Types:Creature Bear Illusion PT:2/2 T:Mode$ BecomesTarget | ValidTarget$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When CARDNAME becomes the target of a spell or ability, sacrifice it. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:Targeting:Dies Oracle:When Phantasmal Bear becomes the target of a spell or ability, sacrifice it. diff --git a/forge-gui/res/cardsfolder/p/phantasmal_dragon.txt b/forge-gui/res/cardsfolder/p/phantasmal_dragon.txt index c9c0114ed20..b31df343219 100644 --- a/forge-gui/res/cardsfolder/p/phantasmal_dragon.txt +++ b/forge-gui/res/cardsfolder/p/phantasmal_dragon.txt @@ -4,6 +4,6 @@ Types:Creature Dragon Illusion PT:5/5 K:Flying T:Mode$ BecomesTarget | ValidTarget$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When CARDNAME becomes the target of a spell or ability, sacrifice it. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:Targeting:Dies Oracle:Flying\nWhen Phantasmal Dragon becomes the target of a spell or ability, sacrifice it. diff --git a/forge-gui/res/cardsfolder/p/phantasmal_dreadmaw.txt b/forge-gui/res/cardsfolder/p/phantasmal_dreadmaw.txt index d5ee0c86a3e..f2a25c9c7ad 100644 --- a/forge-gui/res/cardsfolder/p/phantasmal_dreadmaw.txt +++ b/forge-gui/res/cardsfolder/p/phantasmal_dreadmaw.txt @@ -4,6 +4,6 @@ Types:Creature Dinosaur Illusion PT:6/6 K:Trample T:Mode$ BecomesTarget | ValidTarget$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When CARDNAME becomes the target of a spell or ability, sacrifice it. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:Targeting:Dies Oracle:Trample\nWhen Phantasmal Dreadmaw becomes the target of a spell or ability, sacrifice it. diff --git a/forge-gui/res/cardsfolder/p/phantasmal_image.txt b/forge-gui/res/cardsfolder/p/phantasmal_image.txt index 2bf2f9ccbdd..4dab252d509 100644 --- a/forge-gui/res/cardsfolder/p/phantasmal_image.txt +++ b/forge-gui/res/cardsfolder/p/phantasmal_image.txt @@ -6,7 +6,7 @@ PT:0/0 K:ETBReplacement:Copy:DBCopy:Optional SVar:DBCopy:DB$ Clone | Choices$ Creature.Other | AddTypes$ Illusion | AddTriggers$ PhantasmalImageTgtTrig | AddSVars$ PhantasmalImageSac,Targeting | SpellDescription$ You may have CARDNAME enter the battlefield as a copy of any creature on the battlefield, except it's an Illusion in addition to its other types and it has "When this creature becomes the target of a spell or ability, sacrifice it." SVar:PhantasmalImageTgtTrig:Mode$ BecomesTarget | ValidTarget$ Card.Self | Execute$ PhantasmalImageSac | TriggerDescription$ When this creature becomes the target of a spell or ability, sacrifice it. -SVar:PhantasmalImageSac:DB$ Sacrifice | Defined$ Self +SVar:PhantasmalImageSac:DB$ Sacrifice SVar:Targeting:Dies SVar:NeedsToPlay:Creature Oracle:You may have Phantasmal Image enter the battlefield as a copy of any creature on the battlefield, except it's an Illusion in addition to its other types and it has "When this creature becomes the target of a spell or ability, sacrifice it." diff --git a/forge-gui/res/cardsfolder/p/phantasmal_sphere.txt b/forge-gui/res/cardsfolder/p/phantasmal_sphere.txt index bac6b7c80f3..80bc0d0574a 100644 --- a/forge-gui/res/cardsfolder/p/phantasmal_sphere.txt +++ b/forge-gui/res/cardsfolder/p/phantasmal_sphere.txt @@ -5,7 +5,7 @@ PT:0/1 K:Flying T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of your upkeep, put a +1/+1 counter on CARDNAME, then sacrifice CARDNAME unless you pay {1} for each +1/+1 counter on it. SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ SacSelf -SVar:SacSelf:DB$ Sacrifice | Defined$ Card.Self | UnlessCost$ X | UnlessPayer$ You +SVar:SacSelf:DB$ Sacrifice | UnlessCost$ X | UnlessPayer$ You T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ OrbToken | TriggerDescription$ When CARDNAME leaves the battlefield, target opponent creates an X/X blue Orb creature token with flying, where X is the number of +1/+1 counters on CARDNAME. SVar:OrbToken:DB$ Token | ValidTgts$ Opponent | TokenOwner$ Targeted | TokenScript$ u_x_x_orb_flying | TokenPower$ XLKI | TokenToughness$ XLKI | TokenAmount$ 1 SVar:X:Count$CardCounters.P1P1 diff --git a/forge-gui/res/cardsfolder/p/phantom_beast.txt b/forge-gui/res/cardsfolder/p/phantom_beast.txt index d182e1ddb44..2a217e18aff 100644 --- a/forge-gui/res/cardsfolder/p/phantom_beast.txt +++ b/forge-gui/res/cardsfolder/p/phantom_beast.txt @@ -3,6 +3,6 @@ ManaCost:3 U Types:Creature Illusion Beast PT:4/5 T:Mode$ BecomesTarget | ValidTarget$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When CARDNAME becomes the target of a spell or ability, sacrifice it. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:Targeting:Dies Oracle:When Phantom Beast becomes the target of a spell or ability, sacrifice it. diff --git a/forge-gui/res/cardsfolder/p/phylactery_lich.txt b/forge-gui/res/cardsfolder/p/phylactery_lich.txt index e70252a9dd1..7df2fe31752 100644 --- a/forge-gui/res/cardsfolder/p/phylactery_lich.txt +++ b/forge-gui/res/cardsfolder/p/phylactery_lich.txt @@ -8,7 +8,7 @@ SVar:TrigChooseArtifact:DB$ ChooseCard | Choices$ Artifact.YouCtrl | Mandatory$ SVar:DBPutCounter:DB$ PutCounter | CounterType$ PHYLACTERY | CounterNum$ 1 | Defined$ ChosenCard | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Permanent.counters_GE1_PHYLACTERY+YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no permanents with phylactery counters on them, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice AI:RemoveDeck:Random DeckHints:Type$Artifact SVar:NeedsToPlay:Artifact.YouCtrl diff --git a/forge-gui/res/cardsfolder/p/phyrexian_devourer.txt b/forge-gui/res/cardsfolder/p/phyrexian_devourer.txt index 24720d91556..651740ffce8 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_devourer.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_devourer.txt @@ -3,7 +3,7 @@ ManaCost:6 Types:Artifact Creature Phyrexian Construct PT:1/1 T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Creature.Self+powerGE7 | PresentCompare$ GE1 | Execute$ TrigSac | TriggerDescription$ When CARDNAME's power is 7 or greater, sacrifice it. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice A:AB$ PutCounter | Cost$ ExileFromTop<1/Card> | Defined$ Self | CounterNum$ X | CounterType$ P1P1 | SpellDescription$ Put X +1/+1 counters on CARDNAME, where X is the exiled card's mana value. SVar:X:Exiled$CardManaCost AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/p/phyrexian_dreadnought.txt b/forge-gui/res/cardsfolder/p/phyrexian_dreadnought.txt index 39f074906ef..4db97af22e9 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_dreadnought.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_dreadnought.txt @@ -5,7 +5,7 @@ PT:12/12 K:Trample T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ ChooseCreatures | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you sacrifice any number of creatures with total power 12 or greater. SVar:ChooseCreatures:DB$ ChooseCard | Defined$ You | Amount$ X | MinAmount$ 0 | Choices$ Creature.YouCtrl | ChoiceTitle$ Sacrifice any number of creatures with total power 12 or greater. | ChoiceZone$ Battlefield | RememberChosen$ True | SubAbility$ SacrificeSelf -SVar:SacrificeSelf:DB$ Sacrifice | Defined$ Self | ConditionCheckSVar$ TotalPower | ConditionSVarCompare$ LT12 | SubAbility$ SacrificeCreatures +SVar:SacrificeSelf:DB$ Sacrifice | ConditionCheckSVar$ TotalPower | ConditionSVarCompare$ LT12 | SubAbility$ SacrificeCreatures SVar:SacrificeCreatures:DB$ SacrificeAll | Defined$ Remembered | ConditionCheckSVar$ TotalPower | ConditionSVarCompare$ GE12 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:TotalPower:Remembered$CardPower diff --git a/forge-gui/res/cardsfolder/p/pirate_ship.txt b/forge-gui/res/cardsfolder/p/pirate_ship.txt index 42a55aa50ed..7aa6958de13 100644 --- a/forge-gui/res/cardsfolder/p/pirate_ship.txt +++ b/forge-gui/res/cardsfolder/p/pirate_ship.txt @@ -4,7 +4,7 @@ Types:Creature Human Pirate PT:4/3 S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Island | Description$ CARDNAME can't attack unless defending player controls an Island. T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Island.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no Islands, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice A:AB$ DealDamage | Cost$ T | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 1 | SpellDescription$ CARDNAME deals 1 damage to any target. SVar:NeedsToPlay:Island.YouCtrl Oracle:Pirate Ship can't attack unless defending player controls an Island.\n{T}: Pirate Ship deals 1 damage to any target.\nWhen you control no Islands, sacrifice Pirate Ship. diff --git a/forge-gui/res/cardsfolder/p/pitchstone_wall.txt b/forge-gui/res/cardsfolder/p/pitchstone_wall.txt index 46eff675b52..f1152e9343a 100644 --- a/forge-gui/res/cardsfolder/p/pitchstone_wall.txt +++ b/forge-gui/res/cardsfolder/p/pitchstone_wall.txt @@ -4,6 +4,6 @@ Types:Creature Wall PT:2/5 K:Defender T:Mode$ Discarded | ValidCard$ Card.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigChange | TriggerDescription$ Whenever you discard a card, you may sacrifice CARDNAME. If you do, return the discarded card from your graveyard to your hand. -SVar:TrigChange:AB$ ChangeZone | Cost$ Sac<1/CARDNAME> | Defined$ TriggeredCardLKICopy | Origin$ Graveyard | Destination$ Hand +SVar:TrigChange:AB$ ChangeZone | Cost$ Sac<1/CARDNAME> | Defined$ TriggeredCard | Origin$ Graveyard | Destination$ Hand AI:RemoveDeck:All Oracle:Defender (This creature can't attack.)\nWhenever you discard a card, you may sacrifice Pitchstone Wall. If you do, return the discarded card from your graveyard to your hand. diff --git a/forge-gui/res/cardsfolder/p/planar_chaos.txt b/forge-gui/res/cardsfolder/p/planar_chaos.txt index 6183277dda2..3ba05ae7450 100644 --- a/forge-gui/res/cardsfolder/p/planar_chaos.txt +++ b/forge-gui/res/cardsfolder/p/planar_chaos.txt @@ -3,7 +3,7 @@ ManaCost:2 R Types:Enchantment T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigFlipUpkeep | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of your upkeep, flip a coin. If you lose the flip, sacrifice CARDNAME. SVar:TrigFlipUpkeep:DB$ FlipACoin | LoseSubAbility$ DBSacrifice -SVar:DBSacrifice:DB$ Sacrifice | Defined$ Self +SVar:DBSacrifice:DB$ Sacrifice T:Mode$ SpellCast | ValidCard$ Card | TriggerZones$ Battlefield | Execute$ TrigFlipYouCast | TriggerDescription$ Whenever a player casts a spell, that player flips a coin. If they lose the flip, counter that spell. SVar:TrigFlipYouCast:DB$ FlipACoin | LoseSubAbility$ DBCounter | Caller$ TriggeredActivator SVar:DBCounter:DB$ Counter | Defined$ TriggeredSpellAbility diff --git a/forge-gui/res/cardsfolder/p/plant_elemental.txt b/forge-gui/res/cardsfolder/p/plant_elemental.txt index 8149e70fa8a..d55eea35203 100644 --- a/forge-gui/res/cardsfolder/p/plant_elemental.txt +++ b/forge-gui/res/cardsfolder/p/plant_elemental.txt @@ -3,6 +3,6 @@ ManaCost:1 G Types:Creature Plant Elemental PT:3/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you sacrifice a Forest. -SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Sac<1/Forest> | UnlessPayer$ You +SVar:TrigSacUnless:DB$ Sacrifice | UnlessCost$ Sac<1/Forest> | UnlessPayer$ You SVar:NeedsToPlay:Forest.YouCtrl Oracle:When Plant Elemental enters the battlefield, sacrifice it unless you sacrifice a Forest. diff --git a/forge-gui/res/cardsfolder/p/plaxmanta.txt b/forge-gui/res/cardsfolder/p/plaxmanta.txt index 6d9bc2ebf31..f9716623304 100644 --- a/forge-gui/res/cardsfolder/p/plaxmanta.txt +++ b/forge-gui/res/cardsfolder/p/plaxmanta.txt @@ -6,7 +6,7 @@ K:Flash T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPumpAll | TriggerDescription$ When CARDNAME enters the battlefield, creatures you control gain shroud until end of turn. (They can't be the targets of spells or abilities.) T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSac | ManaNotSpent$ G | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless {G} was spent to cast it. SVar:TrigPumpAll:DB$ PumpAll | ValidCards$ Creature.YouCtrl | KW$ Shroud -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:ManaNeededToAvoidNegativeEffect:green AI:RemoveDeck:Random Oracle:Flash\nWhen Plaxmanta enters the battlefield, creatures you control gain shroud until end of turn. (They can't be the targets of spells or abilities.)\nWhen Plaxmanta enters the battlefield, sacrifice it unless {G} was spent to cast it. diff --git a/forge-gui/res/cardsfolder/p/porphyry_nodes.txt b/forge-gui/res/cardsfolder/p/porphyry_nodes.txt index c223424991b..3c18465eef6 100644 --- a/forge-gui/res/cardsfolder/p/porphyry_nodes.txt +++ b/forge-gui/res/cardsfolder/p/porphyry_nodes.txt @@ -5,7 +5,7 @@ T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | E SVar:TrigChooseOneToDestroy:DB$ ChooseCard | Choices$ Creature.leastPower+withoutIndestructible | Mandatory$ True | SubAbility$ DBDestroy SVar:DBDestroy:DB$ Destroy | Defined$ ChosenCard | NoRegen$ True T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Creature | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When there are no creatures on the battlefield, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:NeedsToPlay:Creature.YouDontCtrl+leastPower AI:RemoveDeck:Random Oracle:At the beginning of your upkeep, destroy the creature with the least power. It can't be regenerated. If two or more creatures are tied for least power, you choose one of them.\nWhen there are no creatures on the battlefield, sacrifice Porphyry Nodes. diff --git a/forge-gui/res/cardsfolder/p/poultrygeist.txt b/forge-gui/res/cardsfolder/p/poultrygeist.txt index 69bdad81919..8370e28457f 100644 --- a/forge-gui/res/cardsfolder/p/poultrygeist.txt +++ b/forge-gui/res/cardsfolder/p/poultrygeist.txt @@ -5,7 +5,7 @@ PT:1/1 K:Flying T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature | TriggerZones$ Battlefield | Execute$ TrigRoll | TriggerDescription$ Whenever a creature dies, you may roll a six-sided die. If you roll a 1, sacrifice CARDNAME. Otherwise, put a +1/+1 counter on CARDNAME. SVar:TrigRoll:DB$ RollDice | ResultSubAbilities$ 1:DBSac,Else:DBCounter -SVar:DBSac:DB$ Sacrifice | Defined$ Self +SVar:DBSac:DB$ Sacrifice SVar:DBCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 DeckHas:Ability$Counters Oracle:Flying\nWhenever a creature dies, you may roll a six-sided die. If you roll a 1, sacrifice Poultrygeist. Otherwise, put a +1/+1 counter on Poultrygeist. diff --git a/forge-gui/res/cardsfolder/p/primal_cocoon.txt b/forge-gui/res/cardsfolder/p/primal_cocoon.txt index 5461ae1c140..fb639065d73 100644 --- a/forge-gui/res/cardsfolder/p/primal_cocoon.txt +++ b/forge-gui/res/cardsfolder/p/primal_cocoon.txt @@ -7,6 +7,6 @@ T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | E SVar:TrigPutCounter:DB$ PutCounter | Defined$ Enchanted | CounterType$ P1P1 | CounterNum$ 1 T:Mode$ Attacks | ValidCard$ Card.AttachedBy | Execute$ TrigSac | TriggerDescription$ When enchanted creature attacks or blocks, sacrifice Primal Cocoon. T:Mode$ Blocks | ValidCard$ Card.AttachedBy | Execute$ TrigSac | Secondary$ True | TriggerDescription$ When enchanted creature attacks or blocks, sacrifice Primal Cocoon. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice AI:RemoveDeck:All Oracle:Enchant creature\nAt the beginning of your upkeep, put a +1/+1 counter on enchanted creature.\nWhen enchanted creature attacks or blocks, sacrifice Primal Cocoon. diff --git a/forge-gui/res/cardsfolder/p/primeval_force.txt b/forge-gui/res/cardsfolder/p/primeval_force.txt index 64832aac996..8f402ae2195 100644 --- a/forge-gui/res/cardsfolder/p/primeval_force.txt +++ b/forge-gui/res/cardsfolder/p/primeval_force.txt @@ -3,7 +3,7 @@ ManaCost:2 G G G Types:Creature Elemental PT:8/8 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you sacrifice three Forests. -SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Sac<3/Forest> | UnlessPayer$ You +SVar:TrigSacUnless:DB$ Sacrifice | UnlessCost$ Sac<3/Forest> | UnlessPayer$ You SVar:NeedsToPlayVar:Y GE3 SVar:Y:Count$Valid Forest.YouCtrl Oracle:When Primeval Force enters the battlefield, sacrifice it unless you sacrifice three Forests. diff --git a/forge-gui/res/cardsfolder/p/promise_of_tomorrow.txt b/forge-gui/res/cardsfolder/p/promise_of_tomorrow.txt index 79f55a9408c..595f988e482 100644 --- a/forge-gui/res/cardsfolder/p/promise_of_tomorrow.txt +++ b/forge-gui/res/cardsfolder/p/promise_of_tomorrow.txt @@ -4,6 +4,6 @@ Types:Enchantment T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigChange | TriggerDescription$ Whenever a creature you control dies, exile it. SVar:TrigChange:DB$ ChangeZone | Defined$ TriggeredNewCardLKICopy | Origin$ Graveyard | Destination$ Exile T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | IsPresent$ Creature.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ At the beginning of each end step, if you control no creatures, sacrifice CARDNAME and return all cards exiled with it to the battlefield under your control. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | SubAbility$ DBChangeZoneAll +SVar:TrigSac:DB$ Sacrifice | SubAbility$ DBChangeZoneAll SVar:DBChangeZoneAll:DB$ ChangeZoneAll | Origin$ Exile | Destination$ Battlefield | ChangeType$ Card.ExiledWithSource Oracle:Whenever a creature you control dies, exile it.\nAt the beginning of each end step, if you control no creatures, sacrifice Promise of Tomorrow and return all cards exiled with it to the battlefield under your control. diff --git a/forge-gui/res/cardsfolder/p/prowling_pangolin.txt b/forge-gui/res/cardsfolder/p/prowling_pangolin.txt index 4826e7f7b30..12bc96d5f6f 100644 --- a/forge-gui/res/cardsfolder/p/prowling_pangolin.txt +++ b/forge-gui/res/cardsfolder/p/prowling_pangolin.txt @@ -3,7 +3,7 @@ ManaCost:3 B B Types:Creature Pangolin Beast PT:6/5 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ When CARDNAME enters the battlefield, any player may sacrifice two creatures. If a player does, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | UnlessCost$ Sac<2/Creature> | UnlessPayer$ Player | UnlessSwitched$ True +SVar:TrigSac:DB$ Sacrifice | UnlessCost$ Sac<2/Creature> | UnlessPayer$ Player | UnlessSwitched$ True SVar:AIPreference:SacCost$Creature.token,Creature SVar:AIPreferenceParams:CreatureEvalThreshold$ 150 | MinCreaturesBelowThreshold$ 2 Oracle:When Prowling Pangolin enters the battlefield, any player may sacrifice two creatures. If a player does, sacrifice Prowling Pangolin. diff --git a/forge-gui/res/cardsfolder/p/pyrohemia.txt b/forge-gui/res/cardsfolder/p/pyrohemia.txt index 5f002de18cc..d385e4c93b2 100644 --- a/forge-gui/res/cardsfolder/p/pyrohemia.txt +++ b/forge-gui/res/cardsfolder/p/pyrohemia.txt @@ -2,7 +2,7 @@ Name:Pyrohemia ManaCost:2 R R Types:Enchantment T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | IsPresent$ Creature | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ At the beginning of the end step, if no creatures are on the battlefield, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice A:AB$ DamageAll | Cost$ R | NumDmg$ 1 | ValidCards$ Creature | ValidPlayers$ Player | ValidDescription$ each creature and each player. | AILogic$ DmgAllCreaturesAndPlayers | SpellDescription$ CARDNAME deals 1 damage to each creature and each player. SVar:NeedsToPlay:Creature Oracle:At the beginning of the end step, if no creatures are on the battlefield, sacrifice Pyrohemia.\n{R}: Pyrohemia deals 1 damage to each creature and each player. diff --git a/forge-gui/res/cardsfolder/q/quagmire.txt b/forge-gui/res/cardsfolder/q/quagmire.txt index c05f7d6f7c2..e83d1bc1187 100644 --- a/forge-gui/res/cardsfolder/q/quagmire.txt +++ b/forge-gui/res/cardsfolder/q/quagmire.txt @@ -1,7 +1,7 @@ Name:Quagmire ManaCost:2 B Types:Enchantment -S:Mode$ Continuous | Affected$ Creature.withSwampwalk | AddHiddenKeyword$ May be blocked as though it doesn't have Mountainwalk. | Description$ Creatures with swampwalk can be blocked as though they didn't have swampwalk. +S:Mode$ Continuous | Affected$ Creature.withSwampwalk | AddHiddenKeyword$ May be blocked as though it doesn't have Swampwalk. | Description$ Creatures with swampwalk can be blocked as though they didn't have swampwalk. SVar:NonStackingEffect:True AI:RemoveDeck:Random Oracle:Creatures with swampwalk can be blocked as though they didn't have swampwalk. diff --git a/forge-gui/res/cardsfolder/q/quickling.txt b/forge-gui/res/cardsfolder/q/quickling.txt index 74725803b39..2bcf75fca65 100644 --- a/forge-gui/res/cardsfolder/q/quickling.txt +++ b/forge-gui/res/cardsfolder/q/quickling.txt @@ -5,6 +5,6 @@ PT:2/2 K:Flying K:Flash T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return another creature you control to its owner's hand. -SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Return<1/Creature.Other/other creature> | UnlessPayer$ You +SVar:TrigSacUnless:DB$ Sacrifice | UnlessCost$ Return<1/Creature.Other/other creature> | UnlessPayer$ You SVar:NeedsToPlay:Creature.YouCtrl Oracle:Flash (You may cast this spell any time you could cast an instant.)\nFlying\nWhen Quickling enters the battlefield, sacrifice it unless you return another creature you control to its owner's hand. diff --git a/forge-gui/res/cardsfolder/r/rathi_dragon.txt b/forge-gui/res/cardsfolder/r/rathi_dragon.txt index 006902f98f6..9d715e0d6e6 100644 --- a/forge-gui/res/cardsfolder/r/rathi_dragon.txt +++ b/forge-gui/res/cardsfolder/r/rathi_dragon.txt @@ -4,7 +4,7 @@ Types:Creature Dragon PT:5/5 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you sacrifice two Mountains. -SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Sac<2/Mountain> | UnlessPayer$ You +SVar:TrigSacUnless:DB$ Sacrifice | UnlessCost$ Sac<2/Mountain> | UnlessPayer$ You SVar:NeedsToPlayVar:Y GE2 SVar:Y:Count$Valid Mountain.YouCtrl Oracle:Flying (This creature can't be blocked except by creatures with flying or reach.)\nWhen Rathi Dragon enters the battlefield, sacrifice it unless you sacrifice two Mountains. diff --git a/forge-gui/res/cardsfolder/r/rebirth.txt b/forge-gui/res/cardsfolder/r/rebirth.txt index 6b00761c1c2..ee3c2853052 100644 --- a/forge-gui/res/cardsfolder/r/rebirth.txt +++ b/forge-gui/res/cardsfolder/r/rebirth.txt @@ -2,8 +2,7 @@ Name:Rebirth ManaCost:3 G G G Types:Sorcery K:Remove CARDNAME from your deck before playing if you're not playing for ante. -A:SP$ RepeatEach | Cost$ 3 G G G | RepeatPlayers$ Player | RepeatSubAbility$ Ante | SpellDescription$ Each player may ante the top card of their library. If a player does, that player's life total becomes 20. -SVar:Ante:DB$ Dig | Defined$ Player.IsRemembered | Destination$ Ante | DigNum$ 1 | ChangeNum$ All | RememberChanged$ True | Optional$ True | SubAbility$ 20Life | AILogic$ Rebirth -SVar:20Life:DB$ SetLife | Defined$ Player.IsRemembered | LifeAmount$ 20 | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ1 | SubAbility$ DBCleanup +A:SP$ Dig | Defined$ Player | DestinationZone$ Ante | DigNum$ 1 | ChangeNum$ All | RememberChanged$ True | Optional$ True | PromptToSkipOptionalAbility$ True | SubAbility$ 20Life | SpellDescription$ Each player may ante the top card of their library. If a player does, that player's life total becomes 20. +SVar:20Life:DB$ SetLife | Defined$ RememberedOwner | LifeAmount$ 20 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:Remove Rebirth from your deck before playing if you're not playing for ante.\nEach player may ante the top card of their library. If a player does, that player's life total becomes 20. diff --git a/forge-gui/res/cardsfolder/r/riths_grove.txt b/forge-gui/res/cardsfolder/r/riths_grove.txt index 5ee738f80e1..2df193f97c0 100644 --- a/forge-gui/res/cardsfolder/r/riths_grove.txt +++ b/forge-gui/res/cardsfolder/r/riths_grove.txt @@ -3,6 +3,6 @@ ManaCost:no cost Types:Land Lair A:AB$ Mana | Cost$ T | Produced$ Combo R G W | SpellDescription$ Add {R}, {G}, or {W}. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return a non-Lair land you control to its owner's hand. -SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Return<1/Land.nonLair/non-Lair land> | UnlessPayer$ You +SVar:TrigSacUnless:DB$ Sacrifice | UnlessCost$ Return<1/Land.nonLair/non-Lair land> | UnlessPayer$ You SVar:NeedsToPlay:Land.nonLair+YouCtrl Oracle:When Rith's Grove enters the battlefield, sacrifice it unless you return a non-Lair land you control to its owner's hand.\n{T}: Add {R}, {G}, or {W}. diff --git a/forge-gui/res/cardsfolder/r/riveteers_overlook.txt b/forge-gui/res/cardsfolder/r/riveteers_overlook.txt index b954f4f1952..ca0b9c0e6e9 100644 --- a/forge-gui/res/cardsfolder/r/riveteers_overlook.txt +++ b/forge-gui/res/cardsfolder/r/riveteers_overlook.txt @@ -2,7 +2,7 @@ Name:Riveteers Overlook ManaCost:no cost Types:Land T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBSacrifice | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it. When you do, search your library for a basic Swamp, Mountain, or Forest card, put it onto the battlefield tapped, then shuffle and you gain 1 life. -SVar:DBSacrifice:DB$ Sacrifice | Defined$ Self | RememberSacrificed$ True | SubAbility$ DBImmediateTrigger +SVar:DBSacrifice:DB$ Sacrifice | RememberSacrificed$ True | SubAbility$ DBImmediateTrigger SVar:DBImmediateTrigger:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card | Execute$ DBChangeZone | SubAbility$ DBCleanup | TriggerDescription$ Search your library for a basic Swamp, Mountain, or Forest card, put it onto the battlefield tapped, then shuffle and you gain 1 life. SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.Swamp+Basic,Land.Mountain+Basic,Land.Forest+Basic | ChangeNum$ 1 | SubAbility$ DBGainLife SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 diff --git a/forge-gui/res/cardsfolder/r/rogue_elephant.txt b/forge-gui/res/cardsfolder/r/rogue_elephant.txt index 385303fb494..636e29724bf 100644 --- a/forge-gui/res/cardsfolder/r/rogue_elephant.txt +++ b/forge-gui/res/cardsfolder/r/rogue_elephant.txt @@ -3,6 +3,6 @@ ManaCost:G Types:Creature Elephant PT:3/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you sacrifice a Forest. -SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Sac<1/Forest> | UnlessPayer$ You +SVar:TrigSacUnless:DB$ Sacrifice | UnlessCost$ Sac<1/Forest> | UnlessPayer$ You SVar:NeedsToPlay:Forest.YouCtrl Oracle:When Rogue Elephant enters the battlefield, sacrifice it unless you sacrifice a Forest. diff --git a/forge-gui/res/cardsfolder/r/ronom_serpent.txt b/forge-gui/res/cardsfolder/r/ronom_serpent.txt index 658113d64a7..10f71264bd2 100644 --- a/forge-gui/res/cardsfolder/r/ronom_serpent.txt +++ b/forge-gui/res/cardsfolder/r/ronom_serpent.txt @@ -4,7 +4,7 @@ Types:Snow Creature Serpent PT:5/6 S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Land.Snow | Description$ CARDNAME can't attack unless defending player controls a snow land. T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Land.Snow+YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no snow lands, sacrifice Ronom Serpent. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:NeedsToPlay:Land.Snow+YouCtrl AI:RemoveDeck:Random Oracle:Ronom Serpent can't attack unless defending player controls a snow land.\nWhen you control no snow lands, sacrifice Ronom Serpent. diff --git a/forge-gui/res/cardsfolder/r/rotting_giant.txt b/forge-gui/res/cardsfolder/r/rotting_giant.txt index 2ea4f4adbb6..fcb8d3b2214 100644 --- a/forge-gui/res/cardsfolder/r/rotting_giant.txt +++ b/forge-gui/res/cardsfolder/r/rotting_giant.txt @@ -4,6 +4,6 @@ Types:Creature Zombie Giant PT:3/3 T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ Whenever CARDNAME attacks or blocks, sacrifice it unless you exile a card from your graveyard. T:Mode$ Blocks | ValidCard$ Card.Self | Execute$ TrigSac | Secondary$ True | TriggerDescription$ Whenever CARDNAME attacks or blocks, sacrifice it unless you exile a card from your graveyard. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | UnlessCost$ ExileFromGrave<1/Card> | UnlessPayer$ You +SVar:TrigSac:DB$ Sacrifice | UnlessCost$ ExileFromGrave<1/Card> | UnlessPayer$ You AI:RemoveDeck:All Oracle:Whenever Rotting Giant attacks or blocks, sacrifice it unless you exile a card from your graveyard. diff --git a/forge-gui/res/cardsfolder/r/rupture_spire.txt b/forge-gui/res/cardsfolder/r/rupture_spire.txt index 20d4c4644e5..bd64fdf6e3a 100644 --- a/forge-gui/res/cardsfolder/r/rupture_spire.txt +++ b/forge-gui/res/cardsfolder/r/rupture_spire.txt @@ -3,7 +3,7 @@ ManaCost:no cost Types:Land K:CARDNAME enters the battlefield tapped. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you pay {1}. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | UnlessCost$ 1 | UnlessPayer$ You +SVar:TrigSac:DB$ Sacrifice | UnlessCost$ 1 | UnlessPayer$ You A:AB$ Mana | Cost$ T | Produced$ Any | SpellDescription$ Add one mana of any color. SVar:NeedsToPlay:Land.untapped+YouCtrl Oracle:Rupture Spire enters the battlefield tapped.\nWhen Rupture Spire enters the battlefield, sacrifice it unless you pay {1}.\n{T}: Add one mana of any color. diff --git a/forge-gui/res/cardsfolder/s/scythe_tiger.txt b/forge-gui/res/cardsfolder/s/scythe_tiger.txt index 1a0bccee5ef..40ff4d9bbe9 100644 --- a/forge-gui/res/cardsfolder/s/scythe_tiger.txt +++ b/forge-gui/res/cardsfolder/s/scythe_tiger.txt @@ -4,6 +4,6 @@ Types:Creature Cat PT:3/2 K:Shroud T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you sacrifice a Land. -SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Sac<1/Land> | UnlessPayer$ You +SVar:TrigSacUnless:DB$ Sacrifice | UnlessCost$ Sac<1/Land> | UnlessPayer$ You SVar:NeedsToPlay:Land.YouCtrl Oracle:Shroud (This creature can't be the target of spells or abilities.)\nWhen Scythe Tiger enters the battlefield, sacrifice it unless you sacrifice a land. diff --git a/forge-gui/res/cardsfolder/s/sea_serpent.txt b/forge-gui/res/cardsfolder/s/sea_serpent.txt index 438b6455b51..d2730916a3e 100644 --- a/forge-gui/res/cardsfolder/s/sea_serpent.txt +++ b/forge-gui/res/cardsfolder/s/sea_serpent.txt @@ -4,6 +4,6 @@ Types:Creature Serpent PT:5/5 S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Island | Description$ CARDNAME can't attack unless defending player controls an Island. T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Island.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no Islands, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:NeedsToPlay:Island.YouCtrl Oracle:Sea Serpent can't attack unless defending player controls an Island.\nWhen you control no Islands, sacrifice Sea Serpent. diff --git a/forge-gui/res/cardsfolder/s/search_the_city.txt b/forge-gui/res/cardsfolder/s/search_the_city.txt index b7ebb07cbcb..edb8b493208 100644 --- a/forge-gui/res/cardsfolder/s/search_the_city.txt +++ b/forge-gui/res/cardsfolder/s/search_the_city.txt @@ -6,7 +6,7 @@ SVar:SetupSearch:DB$ Dig | Defined$ You | DigNum$ 5 | ChangeNum$ All | Destinati T:Mode$ SpellCast | ValidCard$ Card.sharesNameWith Remembered | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigFind | TriggerDescription$ Whenever you play a card with the same name as one of the exiled cards, you may put one of those cards with that name into its owner's hand. Then if there are no cards exiled with CARDNAME, sacrifice it. If you do, take an extra turn after this one. T:Mode$ LandPlayed | ValidCard$ Land.YouCtrl+sharesNameWith Remembered | TriggerZones$ Battlefield | Execute$ TrigFind | OptionalDecider$ You | Secondary$ True | TriggerDescription$ Whenever you play a card with the same name as one of the exiled cards, you may put one of those cards with that name into its owner's hand. Then if there are no cards exiled with CARDNAME, sacrifice it. If you do, take an extra turn after this one. SVar:TrigFind:DB$ ChangeZone | ChangeType$ TriggeredCard.sharesNameWith | Hidden$ True | TgtPrompt$ Select a card that shares a name with the played card | Origin$ Exile | Destination$ Hand | ChangeNum$ 1 | ForgetChanged$ True | SubAbility$ SacSelf -SVar:SacSelf:DB$ Sacrifice | Defined$ Self | ConditionCheckSVar$ StillLooking | ConditionSVarCompare$ EQ0 | RememberSacrificed$ True | SubAbility$ AllFoundCelebration +SVar:SacSelf:DB$ Sacrifice | ConditionCheckSVar$ StillLooking | ConditionSVarCompare$ EQ0 | RememberSacrificed$ True | SubAbility$ AllFoundCelebration SVar:AllFoundCelebration:DB$ AddTurn | NumTurns$ 1 | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ1 SVar:StillLooking:Remembered$Amount SVar:X:Remembered$Amount diff --git a/forge-gui/res/cardsfolder/s/seasinger.txt b/forge-gui/res/cardsfolder/s/seasinger.txt index 8fcf9d842b6..c6020a01284 100644 --- a/forge-gui/res/cardsfolder/s/seasinger.txt +++ b/forge-gui/res/cardsfolder/s/seasinger.txt @@ -4,7 +4,7 @@ Types:Creature Merfolk PT:0/1 K:You may choose not to untap CARDNAME during your untap step. T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Island.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no Islands, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice A:AB$ GainControl | Cost$ T | ValidTgts$ Creature.ControllerControlsIsland | TgtPrompt$ Select target creature whose controller controls an Island | LoseControl$ Untap,LeavesPlay,LoseControl | SpellDescription$ Gain control of target creature whose controller controls an Island for as long as you control CARDNAME and CARDNAME remains tapped. SVar:NeedsToPlay:Island.YouCtrl Oracle:When you control no Islands, sacrifice Seasinger.\nYou may choose not to untap Seasinger during your untap step.\n{T}: Gain control of target creature whose controller controls an Island for as long as you control Seasinger and Seasinger remains tapped. diff --git a/forge-gui/res/cardsfolder/s/second_chance.txt b/forge-gui/res/cardsfolder/s/second_chance.txt index 7f12a0e4886..2324a20db3b 100644 --- a/forge-gui/res/cardsfolder/s/second_chance.txt +++ b/forge-gui/res/cardsfolder/s/second_chance.txt @@ -2,6 +2,6 @@ Name:Second Chance ManaCost:2 U Types:Enchantment T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | LifeTotal$ You | LifeAmount$ LE5 | Execute$ TrigSac | TriggerDescription$ At the beginning of your upkeep, if you have 5 or less life, sacrifice CARDNAME and take an extra turn after this one. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | SubAbility$ DBAddTurn +SVar:TrigSac:DB$ Sacrifice | SubAbility$ DBAddTurn SVar:DBAddTurn:DB$ AddTurn | Defined$ You | NumTurns$ 1 Oracle:At the beginning of your upkeep, if you have 5 or less life, sacrifice Second Chance and take an extra turn after this one. diff --git a/forge-gui/res/cardsfolder/s/serendib_djinn.txt b/forge-gui/res/cardsfolder/s/serendib_djinn.txt index 34e78d30e85..637ee14f242 100644 --- a/forge-gui/res/cardsfolder/s/serendib_djinn.txt +++ b/forge-gui/res/cardsfolder/s/serendib_djinn.txt @@ -8,7 +8,7 @@ SVar:TrigSac2:DB$ Sacrifice | Defined$ You | SacValid$ Land | RememberSacrificed SVar:Dmg:DB$ DealDamage | NumDmg$ 3 | Defined$ You | ConditionDefined$ Remembered | ConditionPresent$ Card.Island | ConditionCompare$ EQ1 | SubAbility$ Clean SVar:Clean:DB$ Cleanup | ClearRemembered$ True T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Land.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no lands, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:NeedsToPlay:Island.YouCtrl AI:RemoveDeck:All Oracle:Flying\nAt the beginning of your upkeep, sacrifice a land. If you sacrifice an Island this way, Serendib Djinn deals 3 damage to you.\nWhen you control no lands, sacrifice Serendib Djinn. diff --git a/forge-gui/res/cardsfolder/s/serra_avatar.txt b/forge-gui/res/cardsfolder/s/serra_avatar.txt index adc5e5bc115..1cc4b9c1673 100644 --- a/forge-gui/res/cardsfolder/s/serra_avatar.txt +++ b/forge-gui/res/cardsfolder/s/serra_avatar.txt @@ -4,6 +4,6 @@ Types:Creature Avatar PT:*/* S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetPower$ X | SetToughness$ X | Description$ CARDNAME's power and toughness are each equal to your life total. SVar:X:Count$YourLifeTotal -T:Mode$ ChangesZone | Origin$ Any | Destination$ Graveyard | ValidCard$ Creature.Self | Execute$ TrigShuffle | TriggerDescription$ When CARDNAME is put into a graveyard from anywhere, shuffle it into its owner's library. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigShuffle | TriggerDescription$ When CARDNAME is put into a graveyard from anywhere, shuffle it into its owner's library. SVar:TrigShuffle:DB$ ChangeZone | Origin$ Graveyard | Destination$ Library | Shuffle$ True | Defined$ TriggeredCardLKICopy Oracle:Serra Avatar's power and toughness are each equal to your life total.\nWhen Serra Avatar is put into a graveyard from anywhere, shuffle it into its owner's library. diff --git a/forge-gui/res/cardsfolder/s/serrated_arrows.txt b/forge-gui/res/cardsfolder/s/serrated_arrows.txt index 3578b17c146..26cda1773fe 100644 --- a/forge-gui/res/cardsfolder/s/serrated_arrows.txt +++ b/forge-gui/res/cardsfolder/s/serrated_arrows.txt @@ -3,6 +3,6 @@ ManaCost:4 Types:Artifact K:etbCounter:ARROWHEAD:3 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | IsPresent$ Card.Self+counters_GE1_ARROWHEAD | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ At the beginning of your upkeep, if there are no arrowhead counters on CARDNAME, sacrifice it. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice A:AB$ PutCounter | Cost$ T SubCounter<1/ARROWHEAD> | IsCurse$ True | ValidTgts$ Creature | TgtPrompt$ Select target Creature | CounterType$ M1M1 | CounterNum$ 1 | SpellDescription$ Put a -1/-1 counter on target creature. Oracle:Serrated Arrows enters the battlefield with three arrowhead counters on it.\nAt the beginning of your upkeep, if there are no arrowhead counters on Serrated Arrows, sacrifice it.\n{T}, Remove an arrowhead counter from Serrated Arrows: Put a -1/-1 counter on target creature. diff --git a/forge-gui/res/cardsfolder/s/skeleton_ship.txt b/forge-gui/res/cardsfolder/s/skeleton_ship.txt index 8d87e418157..1b35c112f21 100644 --- a/forge-gui/res/cardsfolder/s/skeleton_ship.txt +++ b/forge-gui/res/cardsfolder/s/skeleton_ship.txt @@ -3,7 +3,7 @@ ManaCost:3 U B Types:Legendary Creature Skeleton PT:0/3 T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Island.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no Islands, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice A:AB$ PutCounter | Cost$ T | IsCurse$ True | ValidTgts$ Creature | TgtPrompt$ Select target Creature | CounterType$ M1M1 | CounterNum$ 1 | IsCurse$ True | SpellDescription$ Put a -1/-1 counter on target creature. SVar:NeedsToPlay:Island.YouCtrl Oracle:When you control no Islands, sacrifice Skeleton Ship.\n{T}: Put a -1/-1 counter on target creature. diff --git a/forge-gui/res/cardsfolder/s/skittering_horror.txt b/forge-gui/res/cardsfolder/s/skittering_horror.txt index 5be67fc0b8c..4f81737211b 100644 --- a/forge-gui/res/cardsfolder/s/skittering_horror.txt +++ b/forge-gui/res/cardsfolder/s/skittering_horror.txt @@ -3,6 +3,6 @@ ManaCost:2 B Types:Creature Phyrexian Horror PT:4/3 T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When you cast a creature spell, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice AI:RemoveDeck:All Oracle:When you cast a creature spell, sacrifice Skittering Horror. diff --git a/forge-gui/res/cardsfolder/s/skittering_monstrosity.txt b/forge-gui/res/cardsfolder/s/skittering_monstrosity.txt index d0d8455125f..8069cc7ce15 100644 --- a/forge-gui/res/cardsfolder/s/skittering_monstrosity.txt +++ b/forge-gui/res/cardsfolder/s/skittering_monstrosity.txt @@ -3,6 +3,6 @@ ManaCost:3 B B Types:Creature Horror PT:5/5 T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ You | Execute$ TrigSac | TriggerZones$ Battlefield | TriggerDescription$ When you cast a creature spell, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice AI:RemoveDeck:All Oracle:When you cast a creature spell, sacrifice Skittering Monstrosity. diff --git a/forge-gui/res/cardsfolder/s/skizzik.txt b/forge-gui/res/cardsfolder/s/skizzik.txt index f5867c5c522..da2b8ea574b 100644 --- a/forge-gui/res/cardsfolder/s/skizzik.txt +++ b/forge-gui/res/cardsfolder/s/skizzik.txt @@ -6,7 +6,7 @@ K:Haste K:Trample K:Kicker:R T:Mode$ Phase | Phase$ End of Turn | IsPresent$ Card.Self+notkicked | Execute$ TrigNotKicked | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of the end step, if CARDNAME wasn't kicked, sacrifice it. -SVar:TrigNotKicked:DB$ Sacrifice | Defined$ Self +SVar:TrigNotKicked:DB$ Sacrifice # The following construct specifies that the AI always plays the spell kicked, and plays it unkicked on its own turn only if it will attack SVar:NeedsToPlay:WillAttack SVar:NeedsToPlayKickedVar:Z GE1 diff --git a/forge-gui/res/cardsfolder/s/skulking_fugitive.txt b/forge-gui/res/cardsfolder/s/skulking_fugitive.txt index b324425b471..ecdeb132273 100644 --- a/forge-gui/res/cardsfolder/s/skulking_fugitive.txt +++ b/forge-gui/res/cardsfolder/s/skulking_fugitive.txt @@ -3,6 +3,6 @@ ManaCost:2 B Types:Creature Horror Mercenary PT:3/4 T:Mode$ BecomesTarget | ValidTarget$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When CARDNAME becomes the target of a spell or ability, sacrifice it. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:Targeting:Dies Oracle:When Skulking Fugitive becomes the target of a spell or ability, sacrifice it. diff --git a/forge-gui/res/cardsfolder/s/skulking_ghost.txt b/forge-gui/res/cardsfolder/s/skulking_ghost.txt index effb4be0bc3..ded77b4f2e6 100644 --- a/forge-gui/res/cardsfolder/s/skulking_ghost.txt +++ b/forge-gui/res/cardsfolder/s/skulking_ghost.txt @@ -4,6 +4,6 @@ Types:Creature Spirit PT:2/1 K:Flying T:Mode$ BecomesTarget | ValidTarget$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When CARDNAME becomes the target of a spell or ability, sacrifice it. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:Targeting:Dies Oracle:Flying\nWhen Skulking Ghost becomes the target of a spell or ability, sacrifice it. diff --git a/forge-gui/res/cardsfolder/s/skulking_knight.txt b/forge-gui/res/cardsfolder/s/skulking_knight.txt index 7c3590aaa12..c684e49f131 100644 --- a/forge-gui/res/cardsfolder/s/skulking_knight.txt +++ b/forge-gui/res/cardsfolder/s/skulking_knight.txt @@ -4,6 +4,6 @@ Types:Creature Zombie Knight PT:3/3 K:Flanking T:Mode$ BecomesTarget | ValidTarget$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When CARDNAME becomes the target of a spell or ability, sacrifice it. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:Targeting:Dies Oracle:Flanking (Whenever a creature without flanking blocks this creature, the blocking creature gets -1/-1 until end of turn.)\nWhen Skulking Knight becomes the target of a spell or ability, sacrifice it. diff --git a/forge-gui/res/cardsfolder/s/skyline_savior.txt b/forge-gui/res/cardsfolder/s/skyline_savior.txt index 734dc67e916..16a848f3387 100644 --- a/forge-gui/res/cardsfolder/s/skyline_savior.txt +++ b/forge-gui/res/cardsfolder/s/skyline_savior.txt @@ -3,7 +3,7 @@ ManaCost:1 W W Types:Creature Angel PT:3/4 K:Flying -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters the battlefield, return a permanent you control to its owner's hand. If it's a non-Angel creature card, it perpetually gets +1/+1, gains flying, and becomes an Angel in addition to its other types. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters the battlefield, return a permanent you control to its owner's hand. If it's a non-Angel creature card, it perpetually gets +1/+1, gains flying, and becomes an Angel in addition to its other types. SVar:TrigChange:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Hidden$ True | Mandatory$ True | ChangeType$ Permanent.YouCtrl | RememberChanged$ True | SubAbility$ DBEffect SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ PerpetualAbility | Duration$ Permanent | Triggers$ Update | Name$ Skyline Savior's Perpetual Effect | ConditionDefined$ Remembered | ConditionPresent$ Creature+nonAngel | SubAbility$ DBCleanup SVar:PerpetualAbility:Mode$ Continuous | Affected$ Card.IsRemembered | AddPower$ 1 | AddToughness$ 1 | AddType$ Angel | AddKeyword$ Flying | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ This creature perpetually gets +1/+1, gains flying, and becomes an Angel in addition to its other types. diff --git a/forge-gui/res/cardsfolder/s/sleeping_potion.txt b/forge-gui/res/cardsfolder/s/sleeping_potion.txt index 241c4804ad5..ff2a95424d1 100644 --- a/forge-gui/res/cardsfolder/s/sleeping_potion.txt +++ b/forge-gui/res/cardsfolder/s/sleeping_potion.txt @@ -7,5 +7,5 @@ SVar:TrigTap:DB$ Tap | Defined$ Enchanted A:SP$ Attach | Cost$ 1 U | ValidTgts$ Creature | AILogic$ KeepTapped S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME doesn't untap during your untap step. | Description$ Enchanted creature doesn't untap during its controller's untap step. T:Mode$ BecomesTarget | ValidTarget$ Card.AttachedBy | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When enchanted creature becomes the target of a spell or ability, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice Oracle:Enchant creature\nWhen Sleeping Potion enters the battlefield, tap enchanted creature.\nEnchanted creature doesn't untap during its controller's untap step.\nWhen enchanted creature becomes the target of a spell or ability, sacrifice Sleeping Potion. diff --git a/forge-gui/res/cardsfolder/s/slipstream_serpent.txt b/forge-gui/res/cardsfolder/s/slipstream_serpent.txt index cd76bd37ee4..5ce2b3a8abf 100644 --- a/forge-gui/res/cardsfolder/s/slipstream_serpent.txt +++ b/forge-gui/res/cardsfolder/s/slipstream_serpent.txt @@ -5,6 +5,6 @@ PT:6/6 K:Morph:5 U S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Island | Description$ CARDNAME can't attack unless defending player controls an Island. T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Island.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no Islands, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:NeedsToPlay:Island.YouCtrl Oracle:Slipstream Serpent can't attack unless defending player controls an Island.\nWhen you control no Islands, sacrifice Slipstream Serpent.\nMorph {5}{U} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.) diff --git a/forge-gui/res/cardsfolder/s/sorcerers_strongbox.txt b/forge-gui/res/cardsfolder/s/sorcerers_strongbox.txt index 6f8634dd9da..18ae9ec8c1c 100644 --- a/forge-gui/res/cardsfolder/s/sorcerers_strongbox.txt +++ b/forge-gui/res/cardsfolder/s/sorcerers_strongbox.txt @@ -2,6 +2,6 @@ Name:Sorcerer's Strongbox ManaCost:4 Types:Artifact A:AB$ FlipACoin | Cost$ 2 T | WinSubAbility$ DBSac | SpellDescription$ Flip a coin. If you win the flip, sacrifice CARDNAME and draw three cards. -SVar:DBSac:DB$ Sacrifice | Defined$ Self | SubAbility$ DBDraw +SVar:DBSac:DB$ Sacrifice | SubAbility$ DBDraw SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 3 Oracle:{2}, {T}: Flip a coin. If you win the flip, sacrifice Sorcerer's Strongbox and draw three cards. diff --git a/forge-gui/res/cardsfolder/s/soul_echo.txt b/forge-gui/res/cardsfolder/s/soul_echo.txt index 45d754dfa92..1f735abdbad 100644 --- a/forge-gui/res/cardsfolder/s/soul_echo.txt +++ b/forge-gui/res/cardsfolder/s/soul_echo.txt @@ -5,7 +5,7 @@ K:etbCounter:ECHO:X SVar:X:Count$xPaid S:Mode$ Continuous | Affected$ You | AddKeyword$ You don't lose the game for having 0 or less life. | Description$ You don't lose the game for having 0 or less life. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ At the beginning of your upkeep, sacrifice CARDNAME if there are no echo counters on it. Otherwise, target opponent may choose that for each 1 damage that would be dealt to you until your next upkeep, you remove an echo counter from CARDNAME instead. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | ConditionPresent$ Card.Self+counters_EQ0_ECHO | SubAbility$ TrigChoose +SVar:TrigSac:DB$ Sacrifice | ConditionPresent$ Card.Self+counters_EQ0_ECHO | SubAbility$ TrigChoose SVar:TrigChoose:DB$ GenericChoice | AILogic$ SoulEcho | ConditionPresent$ Card.Self+counters_GT0_ECHO | ValidTgts$ Opponent | Choices$ RemoveCounters,DealDamage SVar:DealDamage:DB$ Pump | Defined$ You | SpellDescription$ Damage will be applied to this player's life as usual. SVar:RemoveCounters:DB$ Effect | ReplacementEffects$ Damage | ExileOnMoved$ Exile | Duration$ UntilYourNextUpkeep | SpellDescription$ For each 1 damage that would be dealt to this player until their next upkeep, they remove an echo counter from CARDNAME instead. diff --git a/forge-gui/res/cardsfolder/s/soul_of_emancipation.txt b/forge-gui/res/cardsfolder/s/soul_of_emancipation.txt index a434c8fa7c5..99a84b94924 100644 --- a/forge-gui/res/cardsfolder/s/soul_of_emancipation.txt +++ b/forge-gui/res/cardsfolder/s/soul_of_emancipation.txt @@ -4,7 +4,8 @@ Types:Creature Avatar PT:5/7 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDestroy | TriggerDescription$ When CARDNAME enters the battlefield, destroy up to three other target nonland permanents. For each of those permanents, its controller creates a 3/3 white Angel creature token with flying. SVar:TrigDestroy:DB$ Destroy | TargetMin$ 0 | TargetMax$ 3 | ValidTgts$ Permanent.nonLand | TgtPrompt$ Choose up to three nonland permanents | RememberTargets$ True | SubAbility$ MakeTokens -SVar:MakeTokens:DB$ RepeatEach | RepeatSubAbility$ DBToken | DefinedCards$ Remembered | UseImprinted$ True | ChangeZoneTable$ True +SVar:MakeTokens:DB$ RepeatEach | RepeatSubAbility$ DBToken | DefinedCards$ Remembered | UseImprinted$ True | ChangeZoneTable$ True | SubAbility$ DBCleanup SVar:DBToken:DB$ Token | TokenScript$ w_3_3_angel_flying | TokenOwner$ ImprintedController +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Token & Type$Angel Oracle:When Soul of Emancipation enters the battlefield, destroy up to three other target nonland permanents. For each of those permanents, its controller creates a 3/3 white Angel creature token with flying. diff --git a/forge-gui/res/cardsfolder/s/spark_fiend.txt b/forge-gui/res/cardsfolder/s/spark_fiend.txt index 70187978c77..6bee8d12c25 100644 --- a/forge-gui/res/cardsfolder/s/spark_fiend.txt +++ b/forge-gui/res/cardsfolder/s/spark_fiend.txt @@ -4,7 +4,7 @@ Types:Creature Beast PT:5/6 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigRollETB | TriggerDescription$ When Spark Fiend enters the battlefield, roll two six-sided dice. If you rolled 2, 3, or 12, sacrifice CARDNAME. If you rolled 7 or 11, don't roll dice for CARDNAME during any of your following upkeeps. If you rolled any other total, note that total. SVar:TrigRollETB:DB$ RollDice | Amount$ 2 | ResultSubAbilities$ 2-3:DBSac,12:DBSac,7:DBSafe,Else:DBNote | ResultSVar$ Result -SVar:DBSac:DB$ Sacrifice | Defined$ Self +SVar:DBSac:DB$ Sacrifice SVar:Safe:Number$1 SVar:Noted:Number$0 SVar:DBSafe:DB$ StoreSVar | SVar$ Safe | Type$ Number | Expression$ 0 diff --git a/forge-gui/res/cardsfolder/s/spectral_prison.txt b/forge-gui/res/cardsfolder/s/spectral_prison.txt index e2f67a687ec..9155cc1514d 100644 --- a/forge-gui/res/cardsfolder/s/spectral_prison.txt +++ b/forge-gui/res/cardsfolder/s/spectral_prison.txt @@ -5,5 +5,5 @@ K:Enchant creature A:SP$ Attach | Cost$ 1 U | ValidTgts$ Creature | AILogic$ Curse S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME doesn't untap during your untap step. | Description$ Enchanted creature doesn't untap during its controller's untap step. T:Mode$ BecomesTarget | ValidTarget$ Card.EnchantedBy | ValidSource$ Spell | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ Whenever enchanted creature becomes the target of a spell, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice Oracle:Enchant creature\nEnchanted creature doesn't untap during its controller's untap step.\nWhen enchanted creature becomes the target of a spell, sacrifice Spectral Prison. diff --git a/forge-gui/res/cardsfolder/s/squadron_hawk.txt b/forge-gui/res/cardsfolder/s/squadron_hawk.txt index 98486985942..a2749a1ad9d 100644 --- a/forge-gui/res/cardsfolder/s/squadron_hawk.txt +++ b/forge-gui/res/cardsfolder/s/squadron_hawk.txt @@ -3,7 +3,7 @@ ManaCost:1 W Types:Creature Bird PT:1/1 K:Flying -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library for up to three cards named Squadron Hawk, reveal them, put them into your hand, then shuffle. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library for up to three cards named Squadron Hawk, reveal them, put them into your hand, then shuffle. SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Card.namedSquadron Hawk | ChangeNum$ 3 | ShuffleNonMandatory$ True DeckHints:Name$Squadron Hawk Oracle:Flying\nWhen Squadron Hawk enters the battlefield, you may search your library for up to three cards named Squadron Hawk, reveal them, put them into your hand, then shuffle. diff --git a/forge-gui/res/cardsfolder/s/squealing_devil.txt b/forge-gui/res/cardsfolder/s/squealing_devil.txt index 02735651d4e..b39fd8104e5 100644 --- a/forge-gui/res/cardsfolder/s/squealing_devil.txt +++ b/forge-gui/res/cardsfolder/s/squealing_devil.txt @@ -7,7 +7,7 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSac | ManaNotSpent$ B | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless {B} was spent to cast it. SVar:TrigPump:AB$ Pump | Cost$ X | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +X | SpellDescription$ Target creature gets +X/+0 until end of turn. SVar:X:Count$xPaid -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:ManaNeededToAvoidNegativeEffect:black AI:RemoveDeck:All Oracle:Fear (This creature can't be blocked except by artifact creatures and/or black creatures.)\nWhen Squealing Devil enters the battlefield, you may pay {X}. If you do, target creature gets +X/+0 until end of turn.\nWhen Squealing Devil enters the battlefield, sacrifice it unless {B} was spent to cast it. diff --git a/forge-gui/res/cardsfolder/s/stalking_yeti.txt b/forge-gui/res/cardsfolder/s/stalking_yeti.txt index 9a818134cb7..d9db5d3a2b3 100644 --- a/forge-gui/res/cardsfolder/s/stalking_yeti.txt +++ b/forge-gui/res/cardsfolder/s/stalking_yeti.txt @@ -2,7 +2,7 @@ Name:Stalking Yeti ManaCost:2 R R Types:Snow Creature Yeti PT:3/3 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigDamage | TriggerDescription$ When CARDNAME enters the battlefield, if it's on the battlefield, it deals damage equal to its power to target creature an opponent controls and that creature deals damage equal to its power to CARDNAME. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDamage | TriggerDescription$ When CARDNAME enters the battlefield, if it's on the battlefield, it deals damage equal to its power to target creature an opponent controls and that creature deals damage equal to its power to CARDNAME. SVar:TrigDamage:DB$ DealDamage | IsPresent$ Card.Self | PresentZone$ Battlefield | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls | NumDmg$ X | SubAbility$ DBDamage SVar:DBDamage:DB$ DealDamage | Defined$ Self | DamageSource$ Targeted | NumDmg$ Y A:AB$ ChangeZone | Cost$ 2 S | Origin$ Battlefield | Destination$ Hand | SorcerySpeed$ True | SpellDescription$ Return CARDNAME to its owner's hand. Activate only any time you could cast a sorcery. diff --git a/forge-gui/res/cardsfolder/s/stangg.txt b/forge-gui/res/cardsfolder/s/stangg.txt index 84659223e89..137d680ab0a 100644 --- a/forge-gui/res/cardsfolder/s/stangg.txt +++ b/forge-gui/res/cardsfolder/s/stangg.txt @@ -8,6 +8,6 @@ T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.S SVar:TrigExile:DB$ ChangeZone | Defined$ Remembered | Origin$ Battlefield | Destination$ Exile | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.IsRemembered | Execute$ TrigSac | TriggerDescription$ When that token leaves the battlefield, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | SubAbility$ DBCleanup +SVar:TrigSac:DB$ Sacrifice | SubAbility$ DBCleanup DeckHas:Ability$Token Oracle:When Stangg enters the battlefield, create Stangg Twin, a legendary 3/4 red and green Human Warrior creature token. Exile that token when Stangg leaves the battlefield. Sacrifice Stangg when that token leaves the battlefield. diff --git a/forge-gui/res/cardsfolder/s/stenchskipper.txt b/forge-gui/res/cardsfolder/s/stenchskipper.txt index 649b00efbde..fd167170f8f 100644 --- a/forge-gui/res/cardsfolder/s/stenchskipper.txt +++ b/forge-gui/res/cardsfolder/s/stenchskipper.txt @@ -4,7 +4,7 @@ Types:Creature Elemental PT:6/5 K:Flying T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | IsPresent$ Goblin.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ At the beginning of the end step, if you control no Goblins, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice AI:RemoveDeck:Random SVar:NeedsToPlay:Goblin.YouCtrl Oracle:Flying\nAt the beginning of the end step, if you control no Goblins, sacrifice Stenchskipper. diff --git a/forge-gui/res/cardsfolder/s/straw_golem.txt b/forge-gui/res/cardsfolder/s/straw_golem.txt index a70c60d0c92..4f5a8312907 100644 --- a/forge-gui/res/cardsfolder/s/straw_golem.txt +++ b/forge-gui/res/cardsfolder/s/straw_golem.txt @@ -3,6 +3,6 @@ ManaCost:1 Types:Artifact Creature Golem PT:2/3 T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | Execute$ TrigSacrifice | TriggerDescription$ When an opponent casts a creature spell, sacrifice CARDNAME. -SVar:TrigSacrifice:DB$ Sacrifice | Defined$ Self +SVar:TrigSacrifice:DB$ Sacrifice SVar:AntiBuffedBy:Creature Oracle:When an opponent casts a creature spell, sacrifice Straw Golem. diff --git a/forge-gui/res/cardsfolder/s/synod_centurion.txt b/forge-gui/res/cardsfolder/s/synod_centurion.txt index 147c990c4a3..5658b04bc2c 100644 --- a/forge-gui/res/cardsfolder/s/synod_centurion.txt +++ b/forge-gui/res/cardsfolder/s/synod_centurion.txt @@ -3,6 +3,6 @@ ManaCost:4 Types:Artifact Creature Construct PT:4/4 T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Artifact.Other+YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no other artifacts, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:NeedsToPlay:Artifact.YouCtrl Oracle:When you control no other artifacts, sacrifice Synod Centurion. diff --git a/forge-gui/res/cardsfolder/t/tar_pit_warrior.txt b/forge-gui/res/cardsfolder/t/tar_pit_warrior.txt index 3a1e1170fb9..fc11aeb5e34 100644 --- a/forge-gui/res/cardsfolder/t/tar_pit_warrior.txt +++ b/forge-gui/res/cardsfolder/t/tar_pit_warrior.txt @@ -3,6 +3,6 @@ ManaCost:2 B Types:Creature Cyclops Warrior PT:3/4 T:Mode$ BecomesTarget | ValidTarget$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When CARDNAME becomes the target of a spell or ability, sacrifice it. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:Targeting:Dies Oracle:When Tar Pit Warrior becomes the target of a spell or ability, sacrifice it. diff --git a/forge-gui/res/cardsfolder/t/task_mage_assembly.txt b/forge-gui/res/cardsfolder/t/task_mage_assembly.txt index fb8ce137ea1..9a971698732 100644 --- a/forge-gui/res/cardsfolder/t/task_mage_assembly.txt +++ b/forge-gui/res/cardsfolder/t/task_mage_assembly.txt @@ -2,7 +2,7 @@ Name:Task Mage Assembly ManaCost:2 R Types:Enchantment T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Creature | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When there are no creatures on the battlefield, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice A:AB$ DealDamage | Cost$ 2 | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 1 | Activator$ Player | SorcerySpeed$ True | SpellDescription$ CARDNAME deals 1 damage to target creature. Any player may activate this ability but only as a sorcery. SVar:NeedsToPlay:Creature.YouCtrl SVar:NonStackingEffect:True diff --git a/forge-gui/res/cardsfolder/t/tethered_griffin.txt b/forge-gui/res/cardsfolder/t/tethered_griffin.txt index afc40de1285..70931ea1f40 100644 --- a/forge-gui/res/cardsfolder/t/tethered_griffin.txt +++ b/forge-gui/res/cardsfolder/t/tethered_griffin.txt @@ -4,7 +4,7 @@ Types:Creature Griffin PT:2/3 K:Flying T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Enchantment.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no enchantments, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice SVar:NeedsToPlay:Enchantment.YouCtrl AI:RemoveDeck:Random DeckNeeds:Type$Enchantment diff --git a/forge-gui/res/cardsfolder/t/thing_from_the_deep.txt b/forge-gui/res/cardsfolder/t/thing_from_the_deep.txt index 6f7bdf15971..cba3cd5156e 100644 --- a/forge-gui/res/cardsfolder/t/thing_from_the_deep.txt +++ b/forge-gui/res/cardsfolder/t/thing_from_the_deep.txt @@ -3,7 +3,7 @@ ManaCost:6 U U U Types:Creature Leviathan PT:9/9 T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigSacUnless | TriggerDescription$ Whenever CARDNAME attacks, sacrifice it unless you sacrifice an Island. -SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Sac<1/Island> | UnlessPayer$ You +SVar:TrigSacUnless:DB$ Sacrifice | UnlessCost$ Sac<1/Island> | UnlessPayer$ You SVar:NeedsToPlay:Island.YouCtrl AI:RemoveDeck:All Oracle:Whenever Thing from the Deep attacks, sacrifice it unless you sacrifice an Island. diff --git a/forge-gui/res/cardsfolder/t/thundering_wurm.txt b/forge-gui/res/cardsfolder/t/thundering_wurm.txt index a3f0db8e0f4..8999e6a8c86 100644 --- a/forge-gui/res/cardsfolder/t/thundering_wurm.txt +++ b/forge-gui/res/cardsfolder/t/thundering_wurm.txt @@ -3,7 +3,7 @@ ManaCost:2 G Types:Creature Wurm PT:4/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBSacSelf | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you discard a land card. -SVar:DBSacSelf:DB$ Sacrifice | Defined$ Self | UnlessCost$ Discard<1/Land> | UnlessPayer$ You +SVar:DBSacSelf:DB$ Sacrifice | UnlessCost$ Discard<1/Land> | UnlessPayer$ You SVar:NeedsToPlayVar:Y GE1 SVar:Y:Count$TypeInYourHand.Land SVar:PlayMain1:TRUE diff --git a/forge-gui/res/cardsfolder/t/timmerian_fiends.txt b/forge-gui/res/cardsfolder/t/timmerian_fiends.txt index 363f71c8392..13c465b9dbc 100644 --- a/forge-gui/res/cardsfolder/t/timmerian_fiends.txt +++ b/forge-gui/res/cardsfolder/t/timmerian_fiends.txt @@ -4,7 +4,7 @@ Types:Creature Horror PT:1/1 K:Remove CARDNAME from your deck before playing if you're not playing for ante. A:AB$ Pump | Cost$ B B B Sac<1/CARDNAME> | ValidTgts$ Artifact | SubAbility$ DBAnte | ImprintCards$ Targeted | RememberObjects$ TargetedController | StackDescription$ SpellDescription | SpellDescription$ The owner of target artifact may ante the top card of their library. If that player doesn't, exchange ownership of that artifact and CARDNAME. Put the artifact card into your graveyard and CARDNAME from anywhere into that player's graveyard. This change in ownership is permanent. -SVar:DBAnte:DB$ Dig | Defined$ Player.IsRemembered | DestinationZone$ Ante | DigNum$ 1 | ChangeNum$ All | RememberChanged$ True | Optional$ True | SubAbility$ ExchangeOwn1 | AILogic$ TimmerianFiends | StackDescription$ None +SVar:DBAnte:DB$ Dig | Defined$ Player.IsRemembered | DestinationZone$ Ante | DigNum$ 1 | ChangeNum$ All | RememberChanged$ True | Optional$ True | PromptToSkipOptionalAbility$ True | SubAbility$ ExchangeOwn1 | AILogic$ TimmerianFiends | StackDescription$ None SVar:ExchangeOwn1:DB$ GainOwnership | Defined$ Imprinted | DefinedPlayer$ You | SubAbility$ ToGrave1 | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ0 SVar:ToGrave1:DB$ ChangeZone | Defined$ Imprinted | Origin$ Battlefield | Destination$ Graveyard | SubAbility$ ExchangeOwn2 | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ0 | StackDescription$ None SVar:ExchangeOwn2:DB$ GainOwnership | Defined$ Self | DefinedPlayer$ Remembered | SubAbility$ ToGrave | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ0 diff --git a/forge-gui/res/cardsfolder/t/timothar_baron_of_bats.txt b/forge-gui/res/cardsfolder/t/timothar_baron_of_bats.txt index 01b4860e327..1de0c71fd52 100644 --- a/forge-gui/res/cardsfolder/t/timothar_baron_of_bats.txt +++ b/forge-gui/res/cardsfolder/t/timothar_baron_of_bats.txt @@ -7,7 +7,7 @@ T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ SVar:TrigToken:AB$ Token | Cost$ 1 ExileFromGrave<1/Card.TriggeredNewCard/the Vampire card> | TokenRemembered$ ExiledCards | TokenScript$ b_1_1_bat_flying | ImprintTokens$ True | SubAbility$ DBAnimate SVar:DBAnimate:DB$ Animate | Defined$ Imprinted | Duration$ Permanent | Triggers$ CDTrigger SVar:CDTrigger:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigSac | TriggerZones$ Battlefield | TriggerDescription$ When this creature deals combat damage to a player, sacrifice it and return the exiled card to the battlefield tapped. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | SubAbility$ DBReturn +SVar:TrigSac:DB$ Sacrifice | SubAbility$ DBReturn SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | Tapped$ True DeckNeeds:Type$Vampire DeckHas:Ability$Token|Sacrifice diff --git a/forge-gui/res/cardsfolder/t/tourachs_gate.txt b/forge-gui/res/cardsfolder/t/tourachs_gate.txt index 9dd90b12bcc..0e720d56b05 100644 --- a/forge-gui/res/cardsfolder/t/tourachs_gate.txt +++ b/forge-gui/res/cardsfolder/t/tourachs_gate.txt @@ -6,7 +6,7 @@ A:SP$ Attach | Cost$ 1 B B | ValidTgts$ Land.YouCtrl | TgtPrompt$ Select target A:AB$ PutCounter | Cost$ Sac<1/Thrull> | Defined$ Self | CounterType$ TIME | CounterNum$ 3 | SpellDescription$ Put three time counters on CARDNAME. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigSubCounter | TriggerDescription$ At the beginning of your upkeep, remove a time counter from CARDNAME. If there are no time counters on CARDNAME, sacrifice it. SVar:TrigSubCounter:DB$ RemoveCounter | Defined$ Self | CounterType$ TIME | CounterNum$ 1 | SubAbility$ Sac -SVar:Sac:DB$ Sacrifice | Defined$ Self | ConditionPresent$ Card.Self+counters_EQ0_TIME +SVar:Sac:DB$ Sacrifice | ConditionPresent$ Card.Self+counters_EQ0_TIME A:AB$ PumpAll | Cost$ tapXType<1/Land.EnchantedBy/Enchanted Land> | ValidCards$ Creature.attacking+YouCtrl | NumAtt$ 2 | NumDef$ -1 | SpellDescription$ Attacking creatures you control get +2/-1 until end of turn. AI:RemoveDeck:Random SVar:NonStackingAttachEffect:True diff --git a/forge-gui/res/cardsfolder/t/transguild_promenade.txt b/forge-gui/res/cardsfolder/t/transguild_promenade.txt index 515cb87962d..a99c9f6393a 100644 --- a/forge-gui/res/cardsfolder/t/transguild_promenade.txt +++ b/forge-gui/res/cardsfolder/t/transguild_promenade.txt @@ -3,7 +3,7 @@ ManaCost:no cost Types:Land K:CARDNAME enters the battlefield tapped. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you pay {1}. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | UnlessCost$ 1 | UnlessPayer$ You +SVar:TrigSac:DB$ Sacrifice | UnlessCost$ 1 | UnlessPayer$ You A:AB$ Mana | Cost$ T | Produced$ Any | SpellDescription$ Add one mana of any color. SVar:NeedsToPlay:Land.untapped+YouCtrl Oracle:Transguild Promenade enters the battlefield tapped.\nWhen Transguild Promenade enters the battlefield, sacrifice it unless you pay {1}.\n{T}: Add one mana of any color. diff --git a/forge-gui/res/cardsfolder/t/treacherous_vampire.txt b/forge-gui/res/cardsfolder/t/treacherous_vampire.txt index 0737082f163..833e2ff9ef4 100644 --- a/forge-gui/res/cardsfolder/t/treacherous_vampire.txt +++ b/forge-gui/res/cardsfolder/t/treacherous_vampire.txt @@ -8,6 +8,6 @@ SVar:Dies:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | Val SVar:TrigLose:DB$ LoseLife | Defined$ You | LifeAmount$ 6 T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ Whenever CARDNAME attacks or blocks, sacrifice it unless you exile a card from your graveyard. T:Mode$ Blocks | ValidCard$ Card.Self | Execute$ TrigSac | Secondary$ True | TriggerDescription$ Whenever CARDNAME attacks or blocks, sacrifice it unless you exile a card from your graveyard. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | UnlessCost$ ExileFromGrave<1/Card> | UnlessPayer$ You +SVar:TrigSac:DB$ Sacrifice | UnlessCost$ ExileFromGrave<1/Card> | UnlessPayer$ You AI:RemoveDeck:All Oracle:Flying\nWhenever Treacherous Vampire attacks or blocks, sacrifice it unless you exile a card from your graveyard.\nThreshold — As long as seven or more cards are in your graveyard, Treacherous Vampire gets +2/+2 and has "When Treacherous Vampire dies, you lose 6 life." diff --git a/forge-gui/res/cardsfolder/t/trevas_ruins.txt b/forge-gui/res/cardsfolder/t/trevas_ruins.txt index ad9f4df03c6..1bd76c4efe9 100644 --- a/forge-gui/res/cardsfolder/t/trevas_ruins.txt +++ b/forge-gui/res/cardsfolder/t/trevas_ruins.txt @@ -3,6 +3,6 @@ ManaCost:no cost Types:Land Lair A:AB$ Mana | Cost$ T | Produced$ Combo G W U | SpellDescription$ Add {G}, {W}, or {U}. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you return a non-Lair land you control to its owner's hand. -SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Return<1/Land.nonLair/non-Lair land> | UnlessPayer$ You +SVar:TrigSacUnless:DB$ Sacrifice | UnlessCost$ Return<1/Land.nonLair/non-Lair land> | UnlessPayer$ You SVar:NeedsToPlay:Land.nonLair+YouCtrl Oracle:When Treva's Ruins enters the battlefield, sacrifice it unless you return a non-Lair land you control to its owner's hand.\n{T}: Add {G}, {W}, or {U}. diff --git a/forge-gui/res/cardsfolder/upcoming/argivian_welcome.txt b/forge-gui/res/cardsfolder/upcoming/argivian_welcome.txt index fdd9631d269..a3d2605360a 100644 --- a/forge-gui/res/cardsfolder/upcoming/argivian_welcome.txt +++ b/forge-gui/res/cardsfolder/upcoming/argivian_welcome.txt @@ -1,8 +1,8 @@ Name:Argivian Welcome ManaCost:W U Types:Instant -A:SP$ Destroy | ValidTgts$ Creature.powerGE4 | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target creature with power 4 or greater | SubAbility$ DBChoose | StackDescription$ SpellDescription | SpellDescription$ Destroy up to one target creature with power 4 or greater. Choose a nonland card in your hand. It perpetually gains flash. +A:SP$ Destroy | ValidTgts$ Creature.powerGE4 | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target creature with power 4 or greater | SubAbility$ DBChoose | StackDescription$ SpellDescription | SpellDescription$ Destroy up to one target creature with power 4 or greater. Choose a nonland card in your hand. It perpetually gains flash. SVar:DBChoose:DB$ ChooseCard | Mandatory$ True | ChoiceZone$ Hand | Choices$ Card.nonLand+YouOwn | ChoiceTitle$ Choose a nonland card in your hand | Amount$ 1 | SubAbility$ DBEffect SVar:DBEffect:DB$ Effect | StaticAbilities$ PerpetualFlash | Name$ Argivian Welcome's Perpetual Effect | Duration$ Permanent SVar:PerpetualFlash:Mode$ Continuous | Affected$ Card.ChosenCard | AddKeyword$ Flash | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ The chosen card perpetually gains flash. -Oracle:Destroy up to one target creature with power 4 or greater.\nChoose a nonland card in your hand. It perpetually gains flash. +Oracle:Destroy up to one target creature with power 4 or greater.\nChoose a nonland card in your hand. It perpetually gains flash. diff --git a/forge-gui/res/cardsfolder/upcoming/blue_suns_twilight.txt b/forge-gui/res/cardsfolder/upcoming/blue_suns_twilight.txt new file mode 100644 index 00000000000..cd39ec52e94 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/blue_suns_twilight.txt @@ -0,0 +1,8 @@ +Name:Blue Sun's Twilight +ManaCost:X U U +Types:Sorcery +A:SP$ GainControl | ValidTgts$ Creature.cmcLEX | TgtPrompt$ Select target creature with mana value X or less | SubAbility$ DBCopy | SpellDescription$ Gain control of target creature with mana value X or less. If X is 5 or more, create a token that's a copy of that creature. +SVar:DBCopy:DB$ CopyPermanent | Defined$ Targeted | ConditionCheckSVar$ X | ConditionSVarCompare$ GE5 +SVar:X:Count$xPaid +DeckHas:Ability$Token +Oracle:Gain control of target creature with mana value X or less. If X is 5 or more, create a token that's a copy of that creature. diff --git a/forge-gui/res/cardsfolder/upcoming/crucias_titan_of_the_waves.txt b/forge-gui/res/cardsfolder/upcoming/crucias_titan_of_the_waves.txt index 67fed24d589..c591e6c6eb7 100644 --- a/forge-gui/res/cardsfolder/upcoming/crucias_titan_of_the_waves.txt +++ b/forge-gui/res/cardsfolder/upcoming/crucias_titan_of_the_waves.txt @@ -2,11 +2,11 @@ Name:Crucias, Titan of the Waves ManaCost:1 B R Types:Legendary Creature Human Pirate PT:3/3 -T:Mode$ Phase | Phase$ End of Turn | OptionalDecider$ You | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ At the beginning of your end step, you may discard a card. If you do, create a Treasure token and choose ambitious or expedient. If you chose ambitious, seek a card with greater mana value than the discarded card. If you chose expedient, seek a card with lesser mana value than the discarded card. +T:Mode$ Phase | Phase$ End of Turn | OptionalDecider$ You | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ At the beginning of your end step, you may discard a card. If you do, create a Treasure token and choose ambitious or expedient. If you chose ambitious, seek a card with greater mana value than the discarded card. If you chose expedient, seek a card with lesser mana value than the discarded card. SVar:TrigToken:AB$ Token | Cost$ Discard<1/Card> | TokenScript$ c_a_treasure_sac | SubAbility$ DBChoose SVar:DBChoose:DB$ GenericChoice | Choices$ Ambitious,Expedient | Defined$ You | AILogic$ Random SVar:Ambitious:DB$ ChangeZone | Origin$ Library | Destination$ Hand | AtRandom$ True | NoShuffle$ True | Mandatory$ True | NoLooking$ True | NoReveal$ True | ChangeType$ Card.cmcGTX | ChangeNum$ 1 | SpellDescription$ Ambitious - Seek a card with greater mana value than the discarded card. -SVar:Expedient:DB$ ChangeZone | Origin$ Library | Destination$ Hand | AtRandom$ True | NoShuffle$ True | Mandatory$ True | NoLooking$ True | NoReveal$ True | ChangeType$ Card.cmcLTX | ChangeNum$ 1 | SpellDescription$ Expedient - Seek a card with lesser mana value than the discarded card. +SVar:Expedient:DB$ ChangeZone | Origin$ Library | Destination$ Hand | AtRandom$ True | NoShuffle$ True | Mandatory$ True | NoLooking$ True | NoReveal$ True | ChangeType$ Card.cmcLTX | ChangeNum$ 1 | SpellDescription$ Expedient - Seek a card with lesser mana value than the discarded card. DeckHas:Ability$Sacrifice|Token|Discard & Type$Treasure|Artifact SVar:X:Discarded$CardManaCost -Oracle:At the beginning of your end step, you may discard a card. If you do, create a Treasure token and choose ambitious or expedient. If you chose ambitious, seek a card with greater mana value than the discarded card. If you chose expedient, seek a card with lesser mana value than the discarded card. +Oracle:At the beginning of your end step, you may discard a card. If you do, create a Treasure token and choose ambitious or expedient. If you chose ambitious, seek a card with greater mana value than the discarded card. If you chose expedient, seek a card with lesser mana value than the discarded card. diff --git a/forge-gui/res/cardsfolder/upcoming/fallaji_antiquarian.txt b/forge-gui/res/cardsfolder/upcoming/fallaji_antiquarian.txt index 7b566062e21..1b5380ea3e9 100644 --- a/forge-gui/res/cardsfolder/upcoming/fallaji_antiquarian.txt +++ b/forge-gui/res/cardsfolder/upcoming/fallaji_antiquarian.txt @@ -3,11 +3,11 @@ ManaCost:3 R Types:Creature Human Artificer PT:2/4 K:Haste -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | Execute$ TrigConjure | TriggerDescription$ When CARDNAME enters the battlefield, conjure a duplicate of another target nontoken creature or artifact you control into your graveyard. The duplicate perpetually gains unearth {1}{R}. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | Execute$ TrigConjure | TriggerDescription$ When CARDNAME enters the battlefield, conjure a duplicate of another target nontoken creature or artifact you control into your graveyard. The duplicate perpetually gains unearth {1}{R}. SVar:TrigConjure:DB$ MakeCard | Conjure$ True | TgtPrompt$ Select another target nontoken creature or artifact | DefinedName$ Targeted | ValidTgts$ Creature.YouCtrl+Other+nonToken,Artifact.YouCtrl+Other+nonToken | Zone$ Graveyard | RememberMade$ True | SubAbility$ DBEffect SVar:DBEffect:DB$ Effect | StaticAbilities$ PerpetualUnearth | RememberObjects$ Remembered | Name$ Fallaji Antiquarian's perpetual Effect | Duration$ Permanent | SubAbility$ DBCleanup SVar:PerpetualUnearth:Mode$ Continuous | Affected$ Card.IsRemembered | AddKeyword$ Unearth:2 R | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ This creature perpetually gains unearth {1}{R}. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Graveyard DeckHints:Type$Artifact -Oracle:Haste\nWhen Fallaji Antiquarian enters the battlefield, conjure a duplicate of another target nontoken creature or artifact you control into your graveyard. The duplicate perpetually gains unearth {1}{R}. +Oracle:Haste\nWhen Fallaji Antiquarian enters the battlefield, conjure a duplicate of another target nontoken creature or artifact you control into your graveyard. The duplicate perpetually gains unearth {1}{R}. diff --git a/forge-gui/res/cardsfolder/upcoming/forgefire_automaton.txt b/forge-gui/res/cardsfolder/upcoming/forgefire_automaton.txt index ff9565df634..bcb2be99da9 100644 --- a/forge-gui/res/cardsfolder/upcoming/forgefire_automaton.txt +++ b/forge-gui/res/cardsfolder/upcoming/forgefire_automaton.txt @@ -10,4 +10,4 @@ SVar:PerpetualStatic:Mode$ Continuous | Affected$ Card.IsRemembered | SetPower$ SVar:X:Count$CardPower SVar:Y:Imprinted$CardPower DeckHints:Ability$Graveyard|Discard|Mill & Color$Black -Oracle:Prototype {2}{B} — 3/2 (You may cast this spell with different mana cost, color, and size. It keeps its abilities and types.)\nAt the beginning of your upkeep, return target creature card with power less than Forgefire Automaton's power from your graveyard to the battlefield. Its base power perpetually becomes equal to Forgefire Automaton's power. +Oracle:Prototype {2}{B} — 3/2\nAt the beginning of your upkeep, return target creature card with power less than Forgefire Automaton's power from your graveyard to the battlefield. Its base power perpetually becomes equal to Forgefire Automaton's power. diff --git a/forge-gui/res/cardsfolder/upcoming/foundry_groundbreaker.txt b/forge-gui/res/cardsfolder/upcoming/foundry_groundbreaker.txt index 1f0572be908..e5f619e9402 100644 --- a/forge-gui/res/cardsfolder/upcoming/foundry_groundbreaker.txt +++ b/forge-gui/res/cardsfolder/upcoming/foundry_groundbreaker.txt @@ -6,4 +6,4 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S SVar:TrigSacrifice:DB$ Sacrifice | SacValid$ Land | Defined$ You | SubAbility$ DBConjure SVar:DBConjure:DB$ MakeCard | Conjure$ True | Name$ Mishra's Foundry | Amount$ 2 | Zone$ Battlefield | Tapped$ True DeckHas:Ability$Sacrifice & Type$Assembly-Worker|Artifact -Oracle:When Foundry Groundbreaker enters the battlefield, sacrifice a land. Then conjure two cards named Mishra's Foundry onto the battlefield tapped. \ No newline at end of file +Oracle:When Foundry Groundbreaker enters the battlefield, sacrifice a land. Then conjure two cards named Mishra's Foundry onto the battlefield tapped. diff --git a/forge-gui/res/cardsfolder/upcoming/gixian_recycler.txt b/forge-gui/res/cardsfolder/upcoming/gixian_recycler.txt new file mode 100644 index 00000000000..887874dfb43 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/gixian_recycler.txt @@ -0,0 +1,12 @@ +Name:Gixian Recycler +ManaCost:2 +Types:Artifact Creature Phyrexian Horror +PT:3/1 +K:Unearth:1 B +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigConjure | TriggerDescription$ When CARDNAME dies or is put into your graveyard from your hand or library, conjure a card named Gixian Recycler into your graveyard. +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Hand,Library | Destination$ Graveyard | Execute$ TrigConjure | Secondary$ True | TriggerDescription$ When CARDNAME dies or is put into your graveyard from your hand or library, conjure a card named Gixian Recycler into your graveyard. +SVar:TrigConjure:DB$ MakeCard | Conjure$ True | Name$ Gixian Recycler | Amount$ 1 | Zone$ Graveyard +SVar:DiscardMe:2 +DeckHas:Ability$Graveyard +DeckHints:Color$Black +Oracle:When Gixian Recycler dies or is put into your graveyard from your hand or library, conjure a card named Gixian Recycler into your graveyard.\nUnearth {1}{B} \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/hurkyls_prodigy.txt b/forge-gui/res/cardsfolder/upcoming/hurkyls_prodigy.txt new file mode 100644 index 00000000000..e86e5347fbf --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/hurkyls_prodigy.txt @@ -0,0 +1,14 @@ +Name:Hurkyl's Prodigy +ManaCost:2 U +Types:Creature Human Soldier +PT:1/4 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a tapped Powerstone token. +SVar:TrigToken:DB$ Token | TokenTapped$ True | TokenScript$ c_a_powerstone +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigUnblockable | TriggerDescription$ Whenever CARDNAME attacks, you may pay {3}. If you do, CARDNAME can't be blocked this turn and it perpetually gets +2/+0. +SVar:TrigUnblockable:AB$ Effect | Cost$ 3 | StaticAbilities$ Unblockable | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | StaticAbilities$ PerpetualPump | Duration$ Permanent | Name$ Hurkyl's Prodigy's Perpetual Effect +SVar:Unblockable:Mode$ CantBlockBy | ValidAttacker$ Creature.Self | Description$ This creature can't be blocked. +SVar:PerpetualPump:Mode$ Continuous | Affected$ Card.EffectSource | AddPower$ 2 | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ EFFECTSOURCE perpetually gets +2/+0. +SVar:HasAttackEffect:TRUE +DeckHas:Ability$Token & Type$Artifact|Powerstone +Oracle:When Hurkyl's Prodigy enter the battlefield, create a tapped Powerstone token.\nWhenever Hurkyl's Prodigy attacks, you may pay {3}. If you do, Hurkyl's Prodigy can't be blocked this turn and it perpetually gets +2/+0. diff --git a/forge-gui/res/cardsfolder/upcoming/jarsyl_dark_age_scion.txt b/forge-gui/res/cardsfolder/upcoming/jarsyl_dark_age_scion.txt new file mode 100644 index 00000000000..cd3fc16fe5f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/jarsyl_dark_age_scion.txt @@ -0,0 +1,14 @@ +Name:Jarsyl, Dark Age Scion +ManaCost:1 R G +Types:Legendary Creature Human Wizard +PT:3/3 +K:Starting intensity:1 +T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigChoose | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, you may cast a spell with mana value equal to CARDNAME's intensity from your graveyard without paying its mana cost. If you do, perpetually increase NICKNAME's intensity by 1. +SVar:TrigChoose:DB$ ChooseCard | ChoiceZone$ Graveyard | Choices$ Card.YouCtrl+cmcEQX | ChoiceTitle$ Choose a spell with mana value equal to Jarsyl, Dark Age Scion's intensity | MinAmount$ 1 | Amount$ 1 | SubAbility$ DBPlay +SVar:DBPlay:DB$ Play | Defined$ ChosenCard | ValidSA$ Spell | WithoutManaCost$ True | Optional$ True | AILogic$ ReplaySpell | SubAbility$ DBIncrease | RememberPlayed$ True +SVar:DBIncrease:DB$ Intensify | ConditionDefined$ Remembered | ConditionPresent$ Card | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True +SVar:X:Count$Intensity +DeckHas:Ability$Graveyard +DeckHints:Ability$Mill|Graveyard +Oracle:Starting intensity 1\nAt the beginning of combat on your turn, you may cast a spell with mana value equal to Jarsyl, Dark Age Scion's intensity from your graveyard without paying its mana cost. If you do, perpetually increase Jarsyl's intensity by 1. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/jor_kadeen_first_goldwarden.txt b/forge-gui/res/cardsfolder/upcoming/jor_kadeen_first_goldwarden.txt new file mode 100644 index 00000000000..c5a0525ebaa --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/jor_kadeen_first_goldwarden.txt @@ -0,0 +1,12 @@ +Name:Jor Kadeen, First Goldwarden +ManaCost:R W +Types:Legendary Creature Human Rebel +PT:2/2 +K:Trample +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, it gets +X/+X until end of turn, where X is the number of equipped creatures you control. Then if NICKNAME's power is 4 or greater, draw a card. +SVar:TrigPump:DB$ Pump | Defined$ Self | NumAtt$ X | NumDef$ X | SubAbility$ DBDraw +SVar:DBDraw:DB$ Draw | ConditionDefined$ Self | ConditionPresent$ Card.powerGE4 +SVar:X:Count$Valid Creature.YouCtrl+equipped +DeckNeeds:Type$Equipment +SVar:HasAttackEffect:TRUE +Oracle:Trample\nWhenever Jor Kadeen, First Goldwarden attacks, it gets +X/+X until end of turn, where X is the number of equipped creatures you control. Then if Jor Kadeen's power is 4 or greater, draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/kaylas_kindling.txt b/forge-gui/res/cardsfolder/upcoming/kaylas_kindling.txt index faa12fca823..8fdb4372ac0 100644 --- a/forge-gui/res/cardsfolder/upcoming/kaylas_kindling.txt +++ b/forge-gui/res/cardsfolder/upcoming/kaylas_kindling.txt @@ -3,11 +3,11 @@ ManaCost:3 R R Types:Enchantment T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigDamage | TriggerDescription$ When CARDNAME enters the battlefield, it deals 2 damage to any target. SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 2 -T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDraft | TriggerDescription$ At the beginning of your upkeep, draft a card from CARDNAME's spellbook and exile it. Until end of turn, you may cast that card. +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDraft | TriggerDescription$ At the beginning of your upkeep, draft a card from CARDNAME's spellbook and exile it. Until end of turn, you may cast that card. SVar:TrigDraft:DB$ Draft | Spellbook$ Abrade,Cleansing Wildfire,Terror of the Peaks,Explosive Singularity,Guttersnipe,Seasoned Pyromancer,Unexpected Windfall,Banefire,Lightning Bolt,Dualcaster Mage,Electrodominance,Crackle with Power,Volcanic Fallout,Young Pyromancer,Siege-Gang Commander | Zone$ Exile | RememberDrafted$ True | SubAbility$ DBEffect SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ Play | ExileOnMoved$ Exile | SubAbility$ DBCleanup SVar:Play:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ Until the end of turn, you may play that card. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHints:Type$Goblin|Instant|Sorcery DeckHas:Type$Goblin|Elemental|Human|Shaman|Wizard & Ability$Graveyard|Discard|Token -Oracle:When Kayla's Kindling enters the battlefield, it deals 2 damage to any target.\nAt the beginning of your upkeep, draft a card from Kayla's Kindling's spellbook and exile it. Until end of turn, you may cast that card. \ No newline at end of file +Oracle:When Kayla's Kindling enters the battlefield, it deals 2 damage to any target.\nAt the beginning of your upkeep, draft a card from Kayla's Kindling's spellbook and exile it. Until end of turn, you may cast that card. diff --git a/forge-gui/res/cardsfolder/upcoming/koth_fire_of_resistance.txt b/forge-gui/res/cardsfolder/upcoming/koth_fire_of_resistance.txt new file mode 100644 index 00000000000..b306e8b5a3f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/koth_fire_of_resistance.txt @@ -0,0 +1,13 @@ +Name:Koth, Fire of Resistance +ManaCost:2 R R +Types:Legendary Planeswalker Koth +Loyalty:4 +A:AB$ ChangeZone | Cost$ AddCounter<2/LOYALTY> | Origin$ Library | Destination$ Hand | Planeswalker$ True | NumCards$ 1 | ChangeType$ Mountain.Basic | Mandatory$ True | SpellDescription$ Search your library for a basic Mountain card, reveal it, put it into your hand, then shuffle. +A:AB$ DealDamage | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature | NumDmg$ X | SpellDescription$ CARDNAME deals damage to target creature equal to the number of Mountains you control. +A:AB$ Effect | Cost$ SubCounter<7/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Emblem - Koth, Fire of Resistance | Triggers$ STDamage | Duration$ Permanent | SpellDescription$ You get an emblem with "Whenever a Mountain enters the battlefield under your control, this emblem deals 4 damage to any target." +SVar:STDamage:Mode$ ChangesZone | ValidCard$ Mountain.YouCtrl | Origin$ Any | Destination$ Battlefield | Execute$ TrigDamage | TriggerZones$ Battlefield | TriggerDescription$ Whenever a Mountain enters the battlefield under your control, this emblem deals 4 damage to any target. +SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 4 +SVar:X:Count$Valid Mountain.YouCtrl +DeckNeeds:Type$Mountain +SVar:BuffedBy:Mountain +Oracle:[+2]: Search your library for a basic Mountain card, reveal it, put it into your hand, then shuffle.\n[−3]: Koth, Fire of Resistance deals damage to target creature equal to the number of Mountains you control.\n[−7]: You get an emblem with "Whenever a Mountain enters the battlefield under your control, this emblem deals 4 damage to any target." diff --git a/forge-gui/res/cardsfolder/upcoming/legion_of_clay.txt b/forge-gui/res/cardsfolder/upcoming/legion_of_clay.txt new file mode 100644 index 00000000000..43dab09bcde --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/legion_of_clay.txt @@ -0,0 +1,10 @@ +Name:Legion of Clay +ManaCost:3 G +Types:Enchantment +S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddKeyword$ Trample | Description$ Creatures you control have trample. +T:Mode$ ChangesZoneAll | ValidCards$ Artifact.YouCtrl+nonToken | Origin$ Any | Destination$ Battlefield | TriggerZones$ Battlefield | Execute$ TrigEffect | TriggerDescription$ Whenever one or more nontoken artifacts enter the battlefield under your control, creatures you control perpetually get +1/+1. +SVar:TrigEffect:DB$ Effect | RememberObjects$ Valid Creature.YouCtrl | StaticAbilities$ PerpetualP1P1 | Duration$ Permanent | SubAbility$ DBCleanup | Name$ Legion of Clay's Perpetual Effect +SVar:PerpetualP1P1:Mode$ Continuous | Affected$ Card.IsRemembered | AddPower$ 1 | AddToughness$ 1 | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ Creatures you control perpetually get +1/+1. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +DeckHints:Type$Artifact|Golem|Construct|Thopter|Assembly-Worker|Myr|Necron|Juggernaut|Scarecrow +Oracle:Creatures you control have trample.\nWhenever one or more nontoken artifacts enter the battlefield under your control, creatures you control perpetually get +1/+1. diff --git a/forge-gui/res/cardsfolder/upcoming/lonely_end.txt b/forge-gui/res/cardsfolder/upcoming/lonely_end.txt index db9404d199e..9f9d9e9d1ea 100644 --- a/forge-gui/res/cardsfolder/upcoming/lonely_end.txt +++ b/forge-gui/res/cardsfolder/upcoming/lonely_end.txt @@ -7,4 +7,4 @@ SVar:DBLoyalty:DB$ RemoveCounter | ValidTgts$ Planeswalker | CounterType$ LOYALT SVar:DBGainLife:DB$ GainLife | LifeAmount$ 2 | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ0 | SpellDescription$ If you weren't the starting player, you gain two life. SVar:X:Count$StartingPlayer.1.0 DeckHas:Ability$LifeGain -Oracle:Choose one -\n• Target creature gets -3/-3 until end of turn.\n• Remove three loyalty counters from target planeswalker.\nIf you weren't the starting player, you gain 2 life. +Oracle:Choose one -\n• Target creature gets -3/-3 until end of turn.\n• Remove three loyalty counters from target planeswalker.\nIf you weren't the starting player, you gain 2 life. diff --git a/forge-gui/res/cardsfolder/upcoming/melt_through.txt b/forge-gui/res/cardsfolder/upcoming/melt_through.txt new file mode 100644 index 00000000000..2fea4bce785 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/melt_through.txt @@ -0,0 +1,7 @@ +Name:Melt Through +ManaCost:R +Types:Instant +A:SP$ DealDamage | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 2 | SubAbility$ DBEffect | SpellDescription$ CARDNAME deals 2 damage to any target. If it's a creature, it perpetually gains "As long as this creature is on the battlefield, damage isn't removed from it during cleanup steps." +SVar:DBEffect:DB$ Effect | ConditionDefined$ Targeted | ConditionPresent$ Creature | RememberObjects$ Targeted | StaticAbilities$ PerpetualEffect | Name$ Melt Through's Perpetual Effect | Duration$ Permanent +SVar:PerpetualEffect:Mode$ Continuous | Affected$ Card.IsRemembered | AddHiddenKeyword$ Damage isn't removed from CARDNAME during cleanup steps. | Description$ As long as this creature is on the battlefield, damage isn't removed from it during cleanup steps. +Oracle:Melt Through deals 2 damage to any target. If it's a creature, it perpetually gains "As long as this creature is on the battlefield, damage isn't removed from it during cleanup steps." diff --git a/forge-gui/res/cardsfolder/upcoming/mizzix_replica_rider.txt b/forge-gui/res/cardsfolder/upcoming/mizzix_replica_rider.txt new file mode 100644 index 00000000000..0107818145c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/mizzix_replica_rider.txt @@ -0,0 +1,15 @@ +Name:Mizzix, Replica Rider +ManaCost:4 R +Types:Legendary Creature Goblin Wizard +PT:4/5 +K:Flying +T:Mode$ SpellCast | ValidCard$ Card.wasNotCastFromYourHand | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigCopy | TriggerDescription$ Whenever you cast a spell from anywhere other than your hand, you may pay {1}{U/R}. If you do, copy that spell and you may choose new targets for the copy. If the copy is a permanent spell, it gains haste and "At the beginning of the end step, sacrifice this permanent." (A copy of a permanent spell becomes a token.) +SVar:TrigCopy:AB$ CopySpellAbility | Cost$ 1 UR | Defined$ TriggeredSpellAbility | MayChooseTarget$ True | RememberNewCard$ True | SubAbility$ DBAnimate +SVar:DBAnimate:DB$ Animate | Defined$ Remembered | ConditionDefined$ Remembered | ConditionPresent$ Permanent | Keywords$ Haste | Duration$ Permanent | Triggers$ EOTSac | SubAbility$ DBCleanup +SVar:EOTSac:Mode$ Phase | Phase$ End of Turn | Execute$ TrigSac | TriggerDescription$ At the beginning of the end step, sacrifice this permanent. +SVar:TrigSac:DB$ Sacrifice +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +AI:RemoveDeck:Random +DeckHas:Ability$Token|Sacrifice +DeckHints:Type$Instant|Sorcery & Keyword$Foretell|Flashback +Oracle:Flying\nWhenever you cast a spell from anywhere other than your hand, you may pay {1}{U/R}. If you do, copy that spell and you may choose new targets for the copy. If the copy is a permanent spell, it gains haste and "At the beginning of the end step, sacrifice this permanent." (A copy of a permanent spell becomes a token.) diff --git a/forge-gui/res/cardsfolder/upcoming/norns_disassembly.txt b/forge-gui/res/cardsfolder/upcoming/norns_disassembly.txt new file mode 100644 index 00000000000..7506f1f00de --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/norns_disassembly.txt @@ -0,0 +1,7 @@ +Name:Norn's Disassembly +ManaCost:W +Types:Enchantment +A:AB$ ChangeZone | Cost$ 1 W Sac<1/Permanent.Historic/Historic permanent> | Origin$ Library | Destination$ Hand | AtRandom$ True | NoShuffle$ True | Mandatory$ True | NoLooking$ True | NoReveal$ True | ChangeType$ Card.Historic | ChangeNum$ 1 | SpellDescription$ Seek a historic card. +DeckHas:Ability$Sacrifice +DeckNeeds:Type$Legendary|Artifact|Planeswalker +Oracle:{1}{W}, Sacrifice a historic permanent: Seek a historic card. diff --git a/forge-gui/res/cardsfolder/upcoming/patchplate_resolute.txt b/forge-gui/res/cardsfolder/upcoming/patchplate_resolute.txt new file mode 100644 index 00000000000..81b99fbd990 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/patchplate_resolute.txt @@ -0,0 +1,15 @@ +Name:Patchplate Resolute +ManaCost:3 +Types:Artifact Creature Soldier +PT:3/3 +K:Unearth:1 W +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigBoon | TriggerDescription$ When CARDNAME enters or leaves the battlefield, you get a boon with "When you cast your next creature spell, that creature enters the battlefield with an additional +1/+1 counter on it." +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Any | Execute$ TrigBoon | Secondary$ True | TriggerDescription$ When CARDNAME enters or leaves the battlefield, you get a boon with "When you cast your next creature spell, that creature enters the battlefield with an additional +1/+1 counter on it." +SVar:TrigBoon:DB$ Effect | Boon$ True | Duration$ Permanent | Triggers$ SpellCast +SVar:SpellCast:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ You | OneOff$ True | TriggerZones$ Command | Execute$ ReplEffAddCounter | TriggerDescription$ When you cast your next creature spell, that creature enters the battlefield with an additional +1/+1 counter on it. +SVar:ReplEffAddCounter:DB$ Effect | ReplacementEffects$ ETBAddCounter | RememberObjects$ TriggeredCard +SVar:ETBAddCounter:Event$ Moved | Origin$ Stack | Destination$ Battlefield | ValidCard$ Card.IsRemembered | ReplaceWith$ ETBAddExtraCounter | ReplacementResult$ Updated +SVar:ETBAddExtraCounter:DB$ PutCounter | ETB$ True | Defined$ ReplacedCard | CounterType$ P1P1 | CounterNum$ 1 +DeckHas:Ability$Counters +DeckHints:Color$White +Oracle:When Patchplate Resolute enters or leaves the battlefield, you get a boon with "When you cast your next creature spell, that creature enters the battlefield with an additional +1/+1 counter on it."\nUnearth {1}{W} diff --git a/forge-gui/res/cardsfolder/upcoming/penregon_besieged.txt b/forge-gui/res/cardsfolder/upcoming/penregon_besieged.txt index 32aeecfb25d..4b7805861cd 100644 --- a/forge-gui/res/cardsfolder/upcoming/penregon_besieged.txt +++ b/forge-gui/res/cardsfolder/upcoming/penregon_besieged.txt @@ -5,6 +5,6 @@ T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefiel SVar:TrigChoose:DB$ ChooseCard | Choices$ Creature.leastToughness+OppCtrl | ChoiceTitle$ Choose a creature with the least toughness among creatures your opponents control | Mandatory$ True | SubAbility$ DBEffect SVar:DBEffect:DB$ Effect | StaticAbilities$ PerpetualDebuff | Name$ Penregon Besieged's Perpetual Effect | Duration$ Permanent SVar:PerpetualDebuff:Mode$ Continuous | Affected$ Card.ChosenCard | AddPower$ -1 | AddToughness$ -1 | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ This creature perpetually gets -1/-1. -T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Creature.OppCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When your opponents control no creatures, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self -Oracle:At the beginning of your end step, choose a creature with the least toughness among creatures your opponents control. It perpetually gets -1/-1.\nWhen your opponents control no creatures, sacrifice Penregon Besieged. +T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Creature.OppCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When your opponents control no creatures, sacrifice CARDNAME. +SVar:TrigSac:DB$ Sacrifice +Oracle:At the beginning of your end step, choose a creature with the least toughness among creatures your opponents control. It perpetually gets -1/-1.\nWhen your opponents control no creatures, sacrifice Penregon Besieged. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/perilous_iteration.txt b/forge-gui/res/cardsfolder/upcoming/perilous_iteration.txt new file mode 100644 index 00000000000..ee1c210f68a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/perilous_iteration.txt @@ -0,0 +1,9 @@ +Name:Perilous Iteration +ManaCost:R G +Types:Sorcery +A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | AtRandom$ True | NoShuffle$ True | Mandatory$ True | NoLooking$ True | NoReveal$ True | ChangeType$ Card.YouOwn+cmcLE2 | ChangeNum$ 1 | RememberChanged$ True | SubAbility$ DBSeek | SpellDescription$ Seek a card with mana value 2 or less and a card with mana value 3 or greater. Discard those cards at the beginning of your next turn's end step. +SVar:DBSeek:DB$ ChangeZone | Origin$ Library | Destination$ Hand | AtRandom$ True | NoShuffle$ True | Mandatory$ True | NoLooking$ True | NoReveal$ True | ChangeType$ Card.YouOwn+cmcGE3 | ChangeNum$ 1 | RememberChanged$ True | SubAbility$ DBDelay +SVar:DBDelay:DB$ DelayedTrigger | DelayedTriggerDefinedPlayer$ You | Mode$ Phase | Phase$ End of Turn | Execute$ TrigDiscard | RememberObjects$ Remembered | TriggerDescription$ Discard those cards at the beginning of your next turn's end step. +SVar:TrigDiscard:DB$ Discard | Mode$ Defined | DefinedCards$ DelayTriggerRemembered | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:Seek a card with mana value 2 or less and a card with mana value 3 or greater. Discard those cards at the beginning of your next turn's end step. diff --git a/forge-gui/res/cardsfolder/upcoming/piece_it_together.txt b/forge-gui/res/cardsfolder/upcoming/piece_it_together.txt new file mode 100644 index 00000000000..08f2c276c80 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/piece_it_together.txt @@ -0,0 +1,11 @@ +Name:Piece It Together +ManaCost:U +Types:Sorcery +K:Starting intensity:1 +A:SP$ Branch | BranchConditionSVar$ X | BranchConditionSVarCompare$ EQ4 | TrueSubAbility$ DBExtraTurn | FalseSubAbility$ DBDraw | SpellDescription$ Draw a card. If CARDNAME's intensity is 4, instead take an extra turn after this one. Perpetually increase CARDNAME's intensity and the intensity of cards named Piece It Together in your graveyard, hand, and library by 1. +SVar:DBDraw:DB$ Draw | NumCards$ 1 | SubAbility$ DBIntensify +SVar:DBExtraTurn:DB$ AddTurn | NumTurns$ 1 | SubAbility$ DBIntensify +SVar:DBIntensify:DB$ Intensify | AllDefined$ Card.Self,Card.inZoneGraveyard+namedPiece It Together+YouOwn,Card.inZoneHand+namedPiece It Together+YouOwn,Card.inZoneLibrary+namedPiece It Together+YouOwn +SVar:X:Count$Intensity +DeckNeeds:Name$Piece It Together +Oracle:Starting intensity 1\nDraw a card. If Piece It Together's intensity is 4, instead take an extra turn after this one.\nPerpetually increase Piece It Together's intensity and the intensity of cards named Piece It Together in your graveyard, hand, and library by 1. diff --git a/forge-gui/res/cardsfolder/upcoming/raddic_tal_zealot.txt b/forge-gui/res/cardsfolder/upcoming/raddic_tal_zealot.txt index 69c9b66526f..743d6f2411c 100644 --- a/forge-gui/res/cardsfolder/upcoming/raddic_tal_zealot.txt +++ b/forge-gui/res/cardsfolder/upcoming/raddic_tal_zealot.txt @@ -8,4 +8,4 @@ T:Mode$ AttackersDeclared | ValidAttackers$ Knight.YouCtrl |Execute$ TrigDraft | SVar:TrigDraft:DB$ Draft | Spellbook$ Midnight Reaper,Guardian of Faith,Knight of the Ebon Legion,Cavalier of Dawn,Benalish Marshal,Cavalier of Night,Murderous Rider,Order of Midnight,Acclaimed Contender,Dauntless Bodyguard,Valiant Knight,Smitten Swordmaster,Blacklance Paragon,History of Benalia,The Circle of Loyalty DeckHints:Type$Knight DeckHas:Type$Saga|Enchantment|Vampire|Artifact|Zombie|Elemental & Ability$Graveyard|LifeGain|Token|Counters -Oracle:Hexproof from white, Hexproof from black\nWhenever one or more Knights you control attack, draft a card from Raddic, Tal Zealot's spellbook. \ No newline at end of file +Oracle:Hexproof from white, Hexproof from black\nWhenever one or more Knights you control attack, draft a card from Raddic, Tal Zealot's spellbook. diff --git a/forge-gui/res/cardsfolder/upcoming/richlau_headmaster.txt b/forge-gui/res/cardsfolder/upcoming/richlau_headmaster.txt index f13b54e7cce..d4cf25744fc 100644 --- a/forge-gui/res/cardsfolder/upcoming/richlau_headmaster.txt +++ b/forge-gui/res/cardsfolder/upcoming/richlau_headmaster.txt @@ -2,8 +2,8 @@ Name:Richlau, Headmaster ManaCost:1 W U Types:Legendary Creature Human Advisor PT:2/4 -T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigImmediateTrig | TriggerDescription$ At the beginning of your end step, you may pay {1}. When you do, target artifact card in your graveyard perpetually gains "This spell costs {1} less to cast." If it's a creature or Vehicle card, it perpetually gets +2/+2. Put it into your library second from the top. -SVar:TrigImmediateTrig:AB$ ImmediateTrigger | Cost$ 1 | Execute$ TrigPump | TriggerDescription$ When you do, target artifact card in your graveyard perpetually gains "This spell costs {1} less to cast." If it's a creature or Vehicle card, it perpetually gets +2/+2. Put it into your library second from the top. +T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigImmediateTrig | TriggerDescription$ At the beginning of your end step, you may pay {1}. When you do, target artifact card in your graveyard perpetually gains "This spell costs {1} less to cast." If it's a creature or Vehicle card, it perpetually gets +2/+2. Put it into your library second from the top. +SVar:TrigImmediateTrig:AB$ ImmediateTrigger | Cost$ 1 | Execute$ TrigPump | TriggerDescription$ When you do, target artifact card in your graveyard perpetually gains "This spell costs {1} less to cast." If it's a creature or Vehicle card, it perpetually gets +2/+2. Put it into your library second from the top. SVar:TrigPump:DB$ Effect | TgtZone$ Graveyard | ValidTgts$ Artifact.YouOwn | TgtPrompt$ Select target artifact card in your graveyard | StaticAbilities$ CostReduction | RememberObjects$ Targeted | Name$ Richlau, Headmaster's Perpetual Effect | Duration$ Permanent | SubAbility$ PumpVehicle SVar:CostReduction:Mode$ Continuous | Affected$ Card.IsRemembered | AddStaticAbility$ PerpetualReduce | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ The card perpetually gains "This spell costs {1} less to cast." SVar:PerpetualReduce:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 1 | EffectZone$ All | Description$ This spell costs {1} less to cast. @@ -11,4 +11,4 @@ SVar:PumpVehicle:DB$ Effect | ConditionDefined$ Targeted | ConditionPresent$ Veh SVar:PerpetualPump:Mode$ Continuous | AddPower$ 2 | AddToughness$ 2 | Affected$ Card.IsRemembered | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ If it's a creature or Vehicle card, it perpetually gets +2/+2. SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Library | LibraryPosition$ 1 | Defined$ Targeted DeckHints:Ability$Graveyard & Type$Vehicle -Oracle:At the beginning of your end step, you may pay {1}. When you do, target artifact card in your graveyard perpetually gains "This spell costs {1} less to cast." If it's a creature or Vehicle card, it perpetually gets +2/+2. Put it into your library second from the top. +Oracle:At the beginning of your end step, you may pay {1}. When you do, target artifact card in your graveyard perpetually gains "This spell costs {1} less to cast." If it's a creature or Vehicle card, it perpetually gets +2/+2. Put it into your library second from the top. diff --git a/forge-gui/res/cardsfolder/upcoming/rusko_clockmaker.txt b/forge-gui/res/cardsfolder/upcoming/rusko_clockmaker.txt index dd9c2ad8494..e12ef55c39a 100644 --- a/forge-gui/res/cardsfolder/upcoming/rusko_clockmaker.txt +++ b/forge-gui/res/cardsfolder/upcoming/rusko_clockmaker.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Human Artificer PT:3/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigConjure | TriggerDescription$ When CARDNAME enters the battlefield, conjure a card named Midnight Clock onto the battlefield. SVar:TrigConjure:DB$ MakeCard | Conjure$ True | Name$ Midnight Clock | Zone$ Battlefield -T:Mode$ SpellCast | ValidCard$ Card.nonCreature | ValidActivatingPlayer$ You | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ SpellDescription$ Whenever you cast a noncreature spell, put an hour counter on each permanent you control named Midnight Clock. Each opponent loses 1 life and you gain 1 life. +T:Mode$ SpellCast | ValidCard$ Card.nonCreature | ValidActivatingPlayer$ You | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ SpellDescription$ Whenever you cast a noncreature spell, put an hour counter on each permanent you control named Midnight Clock. Each opponent loses 1 life and you gain 1 life. SVar:TrigPutCounter:DB$ PutCounterAll | ValidCards$ Permanent.YouCtrl+namedMidnight Clock | CounterType$ HOUR | CounterNum$ 1 | SubAbility$ DBDrain SVar:DBDrain:DB$ LoseLife | Defined$ Opponent | LifeAmount$ 1 | SubAbility$ DBGainLife SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 diff --git a/forge-gui/res/cardsfolder/upcoming/slobad_iron_goblin.txt b/forge-gui/res/cardsfolder/upcoming/slobad_iron_goblin.txt new file mode 100644 index 00000000000..580937b5994 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/slobad_iron_goblin.txt @@ -0,0 +1,9 @@ +Name:Slobad, Iron Goblin +ManaCost:2 R +Types:Legendary Creature Phyrexian Goblin Artificer +PT:3/3 +A:AB$ Mana | Cost$ T Sac<1/Artifact> | Produced$ R | Amount$ X | RestrictValid$ Spell.Artifact,Activated.Artifact+inZoneBattlefield | SpellDescription$ Add an amount of {R} equal to the sacrificed artifact's mana value. Spend this mana only to cast artifact spells or activate abilities of artifacts. +SVar:X:Sacrificed$CardManaCost +DeckHas:Ability$Sacrifice +DeckNeeds:Type$Artifact +Oracle:{T}, Sacrifice an artifact: Add an amount of {R} equal to the sacrificed artifact's mana value. Spend this mana only to cast artifact spells or activate abilities of artifacts. diff --git a/forge-gui/res/cardsfolder/upcoming/sylvan_smite.txt b/forge-gui/res/cardsfolder/upcoming/sylvan_smite.txt new file mode 100644 index 00000000000..123923957ff --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/sylvan_smite.txt @@ -0,0 +1,10 @@ +Name:Sylvan Smite +ManaCost:1 G +Types:Instant +A:SP$ PutCounter | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | CounterType$ P1P1 | CounterNum$ 1 | ConditionCheckSVar$ X | RememberTargets$ True | ConditionSVarCompare$ EQ0 | SubAbility$ DBDealDamage | SpellDescription$ Put a +1/+1 counter on target creature you control if you weren't the starting player. Then that creature deals damage equal to its power to target creature you don't control. +SVar:DBDealDamage:DB$ DealDamage | NumDmg$ Y | ValidTgts$ Creature.OppCtrl | DamageSource$ Remembered | TgtPrompt$ Select target creature an opponent controls | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:X:Count$StartingPlayer.1.0 +SVar:Y:Remembered$CardPower +DeckHas:Ability$Counters +Oracle:Put a +1/+1 counter on target creature you control if you weren't the starting player. Then that creature deals damage equal to its power to target creature you don't control. diff --git a/forge-gui/res/cardsfolder/upcoming/tawnos_endures.txt b/forge-gui/res/cardsfolder/upcoming/tawnos_endures.txt new file mode 100644 index 00000000000..dba68540558 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/tawnos_endures.txt @@ -0,0 +1,12 @@ +Name:Tawnos Endures +ManaCost:W +Types:Instant +A:SP$ ChangeZone | ValidTgts$ Creature | Origin$ Battlefield | Destination$ Exile | RememberLKI$ True | SubAbility$ DBEffect | SpellDescription$ Exile target creature. It gains "At the beginning of your upkeep, if this card is exiled, it perpetually gets +1/+1, then you may put it onto the battlefield." +SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | Duration$ Permanent | StaticAbilities$ PerpetualEffect | Name$ Tawnos Endures's Perpetual Effect | SubAbility$ DBCleanup +SVar:PerpetualEffect:Mode$ Continuous | Affected$ Card.IsRemembered | AddTrigger$ UpkeepTrig | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ At the beginning of your upkeep, if this card is exiled, it perpetually gets +1/+1, then you may put it onto the battlefield. +SVar:UpkeepTrig:Mode$ Phase | Phase$ Upkeep | TriggerZones$ Exile | Execute$ TrigPerpetual | ValidPlayer$ You | TriggerDescription$ At the beginning of your upkeep, if this card is exiled, it perpetually gets +1/+1, then you may put it onto the battlefield. +SVar:TrigPerpetual:DB$ Effect | StaticAbilities$ PerpetualBuff | Name$ Tawnos Endures's Perpetual Effect | Duration$ Permanent | SubAbility$ DBReturn +SVar:DBReturn:DB$ ChangeZone | Defined$ Self | Origin$ Exile | Destination$ Battlefield | Optional$ True +SVar:PerpetualBuff:Mode$ Continuous | Affected$ Card.EffectSource | AddPower$ +1 | AddToughness$ +1 | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ This creature perpetually gets +1/+1 +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:Exile target creature. It gains "At the beginning of your upkeep, if this card is exiled, it perpetually gets +1/+1, then you may put it onto the battlefield." diff --git a/forge-gui/res/cardsfolder/upcoming/tomakul_phoenix.txt b/forge-gui/res/cardsfolder/upcoming/tomakul_phoenix.txt index 2818b888818..a26e07dc5fe 100644 --- a/forge-gui/res/cardsfolder/upcoming/tomakul_phoenix.txt +++ b/forge-gui/res/cardsfolder/upcoming/tomakul_phoenix.txt @@ -7,10 +7,10 @@ K:Haste T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigEffect | TriggerDescription$ When CARDNAME dies, it perpetually gets +2/+2. SVar:TrigEffect:DB$ Effect | StaticAbilities$ PerpetualBuff | RememberObjects$ Self | Name$ Tomakul Phoenix's Perpetual Effect | Duration$ Permanent SVar:PerpetualBuff:Mode$ Continuous | Affected$ Card.IsRemembered | AddPower$ 2 | AddToughness$ 2 | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ This creature perpetually gets +2/+2. -T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Graveyard | Execute$ TrigReturn | TriggerDescription$ At the beginning of combat on your turn, you may pay {X}{R}, where X is CARDNAME's power. If you do, return it from you graveyard to the battlefield. +T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Graveyard | Execute$ TrigReturn | TriggerDescription$ At the beginning of combat on your turn, you may pay {X}{R}, where X is CARDNAME's power. If you do, return it from you graveyard to the battlefield. SVar:TrigReturn:AB$ ChangeZone | Cost$ X R | Defined$ Self | Origin$ Graveyard | Destination$ Battlefield SVar:X:Count$CardPower DeckHas:Ability$Graveyard SVar:SacMe:1 SVar:DiscardMe:1 -Oracle:Flying, haste\nWhen Tomakul Phoenix dies, it perpetually gets +2/+2.\nAt the beginning of combat on your turn, you may pay {X}{R}, where X is Tomakul Phoenix's power. If you do, return it from you graveyard to the battlefield. \ No newline at end of file +Oracle:Flying, haste\nWhen Tomakul Phoenix dies, it perpetually gets +2/+2.\nAt the beginning of combat on your turn, you may pay {X}{R}, where X is Tomakul Phoenix's power. If you do, return it from you graveyard to the battlefield. diff --git a/forge-gui/res/cardsfolder/upcoming/urzas_construction_drone.txt b/forge-gui/res/cardsfolder/upcoming/urzas_construction_drone.txt new file mode 100644 index 00000000000..2360461397e --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/urzas_construction_drone.txt @@ -0,0 +1,13 @@ +Name:Urza's Construction Drone +ManaCost:3 +Types:Artifact Creature Construct +PT:3/3 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigConjure | TriggerDescription$ When CARDNAME enters the battlefield, conjure cards named Urza's Mine, Urza's Power Plant, and Urza's Tower into your library, then shuffle. +SVar:TrigConjure:DB$ MakeCard | Conjure$ True | Names$ Urza's Mine,Urza's Tower,Urza's Power Plant | Zone$ Library +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigSeek | TriggerDescription$ Whenever CARDNAME attacks or dies, seek an Urza's land card. +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigSeek | Secondary$ True | Execute$ TrigSeek | TriggerDescription$ Whenever CARDNAME attacks or dies, seek an Urza's land card. +SVar:TrigSeek:DB$ ChangeZone | Origin$ Library | Destination$ Hand | AtRandom$ True | NoShuffle$ True | Mandatory$ True | NoLooking$ True | NoReveal$ True | ChangeType$ Land.Urza's | ChangeNum$ 1 +SVar:HasAttackEffect:TRUE +DeckHas:Type$Urza's +DeckHints:Type$Urza's +Oracle:When Urza's Construction Drone enters the battlefield, conjure cards named Urza's Mine, Urza's Power Plant, and Urza's Tower into your library, then shuffle.\nWhenever Urza's Construction Drone attacks or dies, seek an Urza's land card. diff --git a/forge-gui/res/cardsfolder/upcoming/warzone_duplicator.txt b/forge-gui/res/cardsfolder/upcoming/warzone_duplicator.txt index 9cefc5e3494..080b4be9d70 100644 --- a/forge-gui/res/cardsfolder/upcoming/warzone_duplicator.txt +++ b/forge-gui/res/cardsfolder/upcoming/warzone_duplicator.txt @@ -12,4 +12,4 @@ SVar:SpendAnyMana:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | Aff SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:TriggeredCard$CardPower DeckHints:Color$Blue -Oracle:Prototype {3}{U} — 3/3 (You may cast this spell with different mana cost, color, and size. It keeps its abilities and types.)\n\nWhen Warzone Duplicator enters the battlefield, return target creature an opponent controls with power less than Warzone Duplicator's power to it's owner's hand. If that creature wasn't a token, conjure a duplicate of it into your hand. It perpetually gains "You may spend mana as though it were mana of any color to cast this spell." \ No newline at end of file +Oracle:Prototype {3}{U} — 3/3\nWhen Warzone Duplicator enters the battlefield, return target creature an opponent controls with power less than Warzone Duplicator's power to it's owner's hand. If that creature wasn't a token, conjure a duplicate of it into your hand. It perpetually gains "You may spend mana as though it were mana of any color to cast this spell." diff --git a/forge-gui/res/cardsfolder/v/vexing_devil.txt b/forge-gui/res/cardsfolder/v/vexing_devil.txt index 68f23ac0ef6..a8550cb225f 100644 --- a/forge-gui/res/cardsfolder/v/vexing_devil.txt +++ b/forge-gui/res/cardsfolder/v/vexing_devil.txt @@ -3,5 +3,5 @@ ManaCost:R Types:Creature Devil PT:4/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBSacrifice | TriggerDescription$ When CARDNAME enters the battlefield, any opponent may have it deal 4 damage to them. If a player does, sacrifice CARDNAME. -SVar:DBSacrifice:DB$ Sacrifice | Defined$ Self | UnlessCost$ DamageYou<4> | UnlessPayer$ Opponent | UnlessSwitched$ True +SVar:DBSacrifice:DB$ Sacrifice | UnlessCost$ DamageYou<4> | UnlessPayer$ Opponent | UnlessSwitched$ True Oracle:When Vexing Devil enters the battlefield, any opponent may have it deal 4 damage to them. If a player does, sacrifice Vexing Devil. diff --git a/forge-gui/res/cardsfolder/v/viashino_sandswimmer.txt b/forge-gui/res/cardsfolder/v/viashino_sandswimmer.txt index 34e3d9b8d20..2f016018527 100644 --- a/forge-gui/res/cardsfolder/v/viashino_sandswimmer.txt +++ b/forge-gui/res/cardsfolder/v/viashino_sandswimmer.txt @@ -4,6 +4,6 @@ Types:Creature Viashino PT:3/2 A:AB$ FlipACoin | Cost$ R | WinSubAbility$ DBReturn | LoseSubAbility$ DBSacrifice | SpellDescription$ Flip a coin. If you win the flip, return CARDNAME to its owner's hand. If you lose the flip, sacrifice CARDNAME. SVar:DBReturn:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand -SVar:DBSacrifice:DB$ Sacrifice | Defined$ Self +SVar:DBSacrifice:DB$ Sacrifice AI:RemoveDeck:All Oracle:{R}: Flip a coin. If you win the flip, return Viashino Sandswimmer to its owner's hand. If you lose the flip, sacrifice Viashino Sandswimmer. diff --git a/forge-gui/res/cardsfolder/v/vigor.txt b/forge-gui/res/cardsfolder/v/vigor.txt index 524e3c01fca..1a8b81ab7f5 100644 --- a/forge-gui/res/cardsfolder/v/vigor.txt +++ b/forge-gui/res/cardsfolder/v/vigor.txt @@ -6,6 +6,6 @@ K:Trample R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ Creature.YouCtrl+Other | ReplaceWith$ Counters | PreventionEffect$ True | ExecuteMode$ PerTarget | Description$ If damage would be dealt to another creature you control, prevent that damage. Put a +1/+1 counter on that creature for each 1 damage prevented this way. SVar:Counters:DB$ PutCounter | Defined$ ReplacedTarget | CounterType$ P1P1 | CounterNum$ X SVar:X:ReplaceCount$DamageAmount -T:Mode$ ChangesZone | Origin$ Any | Destination$ Graveyard | ValidCard$ Creature.Self | Execute$ TrigShuffle | TriggerDescription$ When CARDNAME is put into a graveyard from anywhere, shuffle it into its owner's library. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigShuffle | TriggerDescription$ When CARDNAME is put into a graveyard from anywhere, shuffle it into its owner's library. SVar:TrigShuffle:DB$ ChangeZone | Origin$ Graveyard | Destination$ Library | Shuffle$ True | Defined$ TriggeredCardLKICopy Oracle:Trample\nIf damage would be dealt to another creature you control, prevent that damage. Put a +1/+1 counter on that creature for each 1 damage prevented this way.\nWhen Vigor is put into a graveyard from anywhere, shuffle it into its owner's library. diff --git a/forge-gui/res/cardsfolder/v/vodalian_knights.txt b/forge-gui/res/cardsfolder/v/vodalian_knights.txt index ed48800a007..3bcf64e6d93 100644 --- a/forge-gui/res/cardsfolder/v/vodalian_knights.txt +++ b/forge-gui/res/cardsfolder/v/vodalian_knights.txt @@ -5,7 +5,7 @@ PT:2/2 K:First Strike S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefenderControls$ Island | Description$ CARDNAME can't attack unless defending player controls an Island. T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Island.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no Islands, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice A:AB$ Pump | Cost$ U | Defined$ Self | KW$ Flying | SpellDescription$ CARDNAME gains flying until end of turn. SVar:NeedsToPlay:Island.YouCtrl Oracle:First strike\nVodalian Knights can't attack unless defending player controls an Island.\nWhen you control no Islands, sacrifice Vodalian Knights.\n{U}: Vodalian Knights gains flying until end of turn. diff --git a/forge-gui/res/cardsfolder/v/volatile_rig.txt b/forge-gui/res/cardsfolder/v/volatile_rig.txt index b87774b9ee0..d227c1dcfd0 100644 --- a/forge-gui/res/cardsfolder/v/volatile_rig.txt +++ b/forge-gui/res/cardsfolder/v/volatile_rig.txt @@ -6,7 +6,7 @@ K:Trample S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. T:Mode$ DamageDoneOnce | Execute$ TrigFlipSac | ValidTarget$ Card.Self | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME is dealt damage, flip a coin. If you lose the flip, sacrifice CARDNAME. SVar:TrigFlipSac:DB$ FlipACoin | LoseSubAbility$ DBSacrifice -SVar:DBSacrifice:DB$ Sacrifice | Defined$ Self +SVar:DBSacrifice:DB$ Sacrifice T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigFlipDamage | TriggerDescription$ When CARDNAME dies, flip a coin. If you lose the flip, it deals 4 damage to each creature and each player. SVar:TrigFlipDamage:DB$ FlipACoin | LoseSubAbility$ DBDamage SVar:DBDamage:DB$ DamageAll | ValidCards$ Creature | ValidPlayers$ Player | NumDmg$ 4 | ValidDescription$ each creature and each player. diff --git a/forge-gui/res/cardsfolder/v/vulshok_war_boar.txt b/forge-gui/res/cardsfolder/v/vulshok_war_boar.txt index be6f2a5a630..489a5a4f956 100644 --- a/forge-gui/res/cardsfolder/v/vulshok_war_boar.txt +++ b/forge-gui/res/cardsfolder/v/vulshok_war_boar.txt @@ -3,6 +3,6 @@ ManaCost:2 R R Types:Creature Boar Beast PT:5/5 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSacUnless | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you sacrifice an artifact. -SVar:TrigSacUnless:DB$ Sacrifice | Defined$ Self | UnlessCost$ Sac<1/Artifact> | UnlessPayer$ You +SVar:TrigSacUnless:DB$ Sacrifice | UnlessCost$ Sac<1/Artifact> | UnlessPayer$ You AI:RemoveDeck:Random Oracle:When Vulshok War Boar enters the battlefield, sacrifice it unless you sacrifice an artifact. diff --git a/forge-gui/res/cardsfolder/w/war_elemental.txt b/forge-gui/res/cardsfolder/w/war_elemental.txt index 509d4f84f54..46c003b9f9d 100644 --- a/forge-gui/res/cardsfolder/w/war_elemental.txt +++ b/forge-gui/res/cardsfolder/w/war_elemental.txt @@ -3,7 +3,7 @@ ManaCost:R R R Types:Creature Elemental PT:1/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless an opponent was dealt damage this turn. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self | ConditionCheckSVar$ WarElementalX | ConditionSVarCompare$ EQ0 +SVar:TrigSac:DB$ Sacrifice | ConditionCheckSVar$ WarElementalX | ConditionSVarCompare$ EQ0 SVar:WarElementalX:PlayerCountPropertyYou$DamageToOppsThisTurn T:Mode$ DamageDoneOnce | ValidSource$ Card | ValidTarget$ Opponent | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever an opponent is dealt damage, put that many +1/+1 counters on CARDNAME. SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ WarElementalY diff --git a/forge-gui/res/cardsfolder/w/withering_wisps.txt b/forge-gui/res/cardsfolder/w/withering_wisps.txt index 413fafa04b0..14106d529c5 100644 --- a/forge-gui/res/cardsfolder/w/withering_wisps.txt +++ b/forge-gui/res/cardsfolder/w/withering_wisps.txt @@ -2,7 +2,7 @@ Name:Withering Wisps ManaCost:1 B B Types:Enchantment T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | IsPresent$ Creature | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ At the beginning of the end step, if no creatures are on the battlefield, sacrifice CARDNAME. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice A:AB$ DamageAll | Cost$ B | NumDmg$ 1 | ValidCards$ Creature | ValidPlayers$ Player | ValidDescription$ each creature and each player. | ActivationLimit$ X | AILogic$ DmgAllCreaturesAndPlayers | SpellDescription$ CARDNAME deals 1 damage to each creature and each player. Activate no more times each turn than the number of snow Swamps you control. SVar:X:Count$Valid Swamp.Snow+YouCtrl SVar:NeedsToPlay:Creature diff --git a/forge-gui/res/cardsfolder/w/woebringer_demon.txt b/forge-gui/res/cardsfolder/w/woebringer_demon.txt index 43d4ee4c492..21c6da93a1f 100644 --- a/forge-gui/res/cardsfolder/w/woebringer_demon.txt +++ b/forge-gui/res/cardsfolder/w/woebringer_demon.txt @@ -5,7 +5,7 @@ PT:4/4 K:Flying T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ At the beginning of each player's upkeep, that player sacrifices a creature. If the player can't, sacrifice CARDNAME. SVar:TrigSac:DB$ Sacrifice | Defined$ TriggeredPlayer | SacValid$ Creature | SubAbility$ DBSacSelf | RememberSacrificed$ True -SVar:DBSacSelf:DB$ Sacrifice | Defined$ Self | ConditionCheckSVar$ X | ConditionSVarCompare$ LT1 | SubAbility$ DBCleanup +SVar:DBSacSelf:DB$ Sacrifice | ConditionCheckSVar$ X | ConditionSVarCompare$ LT1 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Remembered$Amount SVar:NeedsToPlayVar:Y GE2 diff --git a/forge-gui/res/cardsfolder/w/worldspine_wurm.txt b/forge-gui/res/cardsfolder/w/worldspine_wurm.txt index 83620907ced..c4090c1f5c5 100644 --- a/forge-gui/res/cardsfolder/w/worldspine_wurm.txt +++ b/forge-gui/res/cardsfolder/w/worldspine_wurm.txt @@ -4,7 +4,7 @@ Types:Creature Wurm PT:15/15 K:Trample T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME dies, create three 5/5 green Wurm creature tokens with trample. -T:Mode$ ChangesZone | Origin$ Any | Destination$ Graveyard | ValidCard$ Creature.Self | Execute$ TrigShuffle | TriggerDescription$ When CARDNAME is put into a graveyard from anywhere, shuffle it into its owner's library. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigShuffle | TriggerDescription$ When CARDNAME is put into a graveyard from anywhere, shuffle it into its owner's library. SVar:TrigShuffle:DB$ ChangeZone | Origin$ Graveyard | Destination$ Library | Shuffle$ True | Defined$ TriggeredCardLKICopy SVar:TrigToken:DB$ Token | TokenAmount$ 3 | TokenScript$ g_5_5_wurm_trample | TokenOwner$ TriggeredCardController DeckHas:Ability$Token diff --git a/forge-gui/res/draft/rankings.txt b/forge-gui/res/draft/rankings.txt index 037f06a9d80..c0e619f539d 100644 --- a/forge-gui/res/draft/rankings.txt +++ b/forge-gui/res/draft/rankings.txt @@ -307,336 +307,336 @@ #306|Forest 2|C|30A #307|Forest 3|C|30A //Rank|Name|Rarity|Set -#1|Wurmcoil Engine|M|BRR -#2|Platoon Dispenser|M|BRO -#3|Teferi, Temporal Pilgrim|M|BRO +#1|Teferi, Temporal Pilgrim|M|BRO +#2|Wurmcoil Engine|M|BRR +#3|Platoon Dispenser|M|BRO #4|Tyrant of Kher Ridges|R|BRO -#5|In the Trenches|M|BRO -#6|Phyrexian Fleshgorger|M|BRO -#7|Steel Seraph|R|BRO -#8|Surge Engine|M|BRO -#9|Gix, Yawgmoth Praetor|M|BRO -#10|Rootwire Amalgam|M|BRO -#11|Saheeli, Filigree Master|M|BRO -#12|Skitterbeam Battalion|M|BRO -#13|Clay Champion|M|BRO -#14|Myrel, Shield of Argive|M|BRO -#15|Skystrike Officer|R|BRO -#16|Arcane Proxy|M|BRO -#17|Gix's Command|R|BRO -#18|Draconic Destiny|M|BRO -#19|Visions of Phyrexia|R|BRO -#20|Simian Simulacrum|R|BRO -#21|Mishra, Claimed by Gix|M|BRO -#22|Bladecoil Serpent|M|BRO -#23|Staff of Domination|M|BRR -#24|Autonomous Assembler|R|BRO -#25|Gixian Puppeteer|R|BRO -#26|Misery's Shadow|R|BRO -#27|Titania's Command|R|BRO -#28|Tocasia, Dig Site Mentor|R|BRO -#29|Cityscape Leveler|M|BRO -#30|Siege Veteran|R|BRO -#31|Hurkyl, Master Wizard|R|BRO -#32|Phyrexian Dragon Engine|R|BRO -#33|Legions to Ashes|R|BRO -#34|Sarinth Greatwurm|M|BRO -#35|Platinum Angel|M|BRR -#36|Go for the Throat|U|BRO -#37|Titania, Voice of Gaea|M|BRO -#38|Urza, Prince of Kroog|R|BRO -#39|The Mightstone and Weakstone|R|BRO -#40|Portal to Phyrexia|M|BRO -#41|Horned Stoneseeker|U|BRO -#42|Kayla's Command|R|BRO -#43|Loran of the Third Path|R|BRO -#44|The Temporal Anchor|R|BRO -#45|Brotherhood's End|R|BRO -#46|Obliterating Bolt|U|BRO -#47|Teething Wurmlet|R|BRO -#48|Mishra, Tamer of Mak Fawa|R|BRO -#49|Mazemind Tome|R|BRR -#50|Perilous Vault|M|BRR -#51|Static Net|U|BRO -#52|Combat Thresher|U|BRO -#53|Urza's Command|R|BRO -#54|Ashnod, Flesh Mechanist|R|BRO -#55|Razorlash Transmogrant|R|BRO -#56|Feldon, Ronom Excavator|R|BRO -#57|Mishra's Command|R|BRO -#58|Fade from History|R|BRO -#59|Gwenna, Eyes of Gaea|R|BRO -#60|Obstinate Baloth|U|BRO -#61|Battery Bearer|U|BRO -#62|Harbin, Vanguard Aviator|R|BRO -#63|Hero of the Dunes|U|BRO -#64|Skyfisher Spider|U|BRO -#65|Third Path Iconoclast|U|BRO -#66|Excavation Explosion|C|BRO -#67|Caged Sun|M|BRR -#68|Precursor Golem|R|BRR -#69|Recruitment Officer|U|BRO -#70|Drafna, Founder of Lat-Nam|R|BRO -#71|Thopter Mechanic|U|BRO -#72|Overwhelming Remorse|C|BRO -#73|Transmogrant's Crown|R|BRO -#74|Sarinth Steelseeker|U|BRO -#75|Arbalest Engineers|U|BRO -#76|Evangel of Synthesis|U|BRO -#77|Hajar, Loyal Bodyguard|R|BRO -#78|Junkyard Genius|U|BRO -#79|Yotian Dissident|U|BRO -#80|Liberator, Urza's Battlethopter|R|BRO -#81|Prison Sentence|C|BRO -#82|Ramos, Dragon Engine|M|BRR -#83|Sundering Titan|M|BRR -#84|Loran, Disciple of History|U|BRO -#85|Zephyr Sentinel|U|BRO -#86|Disfigure|C|BRO -#87|Gruesome Realization|U|BRO -#88|Bushwhack|U|BRO -#89|Gaea's Courser|U|BRO -#90|Fallaji Vanguard|U|BRO -#91|Queen Kayla bin-Kroog|R|BRO -#92|Urza, Lord Protector|M|BRO -#93|Thran Spider|R|BRO -#94|Yotian Tactician|U|BRO -#95|Helm of the Host|M|BRR -#96|Lodestone Golem|R|BRR -#97|Sculpting Steel|R|BRR -#98|Urza's Sylex|M|BRO -#99|Stern Lesson|C|BRO -#100|Urza, Powerstone Prodigy|U|BRO -#101|Weakstone's Subjugation|C|BRO -#102|Battlefield Butcher|U|BRO -#103|Gurgling Anointer|U|BRO -#104|Giant Cindermaw|U|BRO -#105|Mishra, Excavation Prodigy|U|BRO -#106|Epic Confrontation|C|BRO -#107|Fauna Shaman|R|BRO -#108|Perennial Behemoth|R|BRO -#109|Blast Zone|R|BRO -#110|Fortified Beachhead|R|BRO -#111|Mishra's Foundry|R|BRO -#112|Wing Commando|C|BRO -#113|Perimeter Patrol|C|BRO -#114|Altar of Dementia|M|BRR -#115|Foundry Inspector|U|BRR -#116|Key to the City|R|BRR -#117|Mystic Forge|M|BRR -#118|Phyrexian Processor|R|BRR -#119|Pristine Talisman|U|BRR -#120|Scrap Trawler|R|BRR -#121|Airlift Chaplain|C|BRO -#122|Disenchant|C|BRO -#123|Soul Partition|R|BRO -#124|Thopter Architect|U|BRO -#125|Tocasia's Welcome|R|BRO -#126|Defabricate|U|BRO -#127|Fallaji Archaeologist|C|BRO -#128|Machine Over Matter|C|BRO -#129|Third Path Savant|C|BRO -#130|Urza's Rebuff|C|BRO -#131|Spotter Thopter|U|BRO -#132|Diabolic Intent|R|BRO -#133|Gix's Caress|C|BRO -#134|No One Left Behind|U|BRO -#135|Ashnod's Harvester|U|BRO -#136|Monastery Swiftspear|U|BRO -#137|Raze to the Ground|C|BRO -#138|Fallaji Dragon Engine|U|BRO -#139|Mishra's Research Desk|U|BRO -#140|Argothian Opportunist|C|BRO -#141|Audacity|U|BRO -#142|Awaken the Woods|M|BRO -#143|Wasteful Harvest|C|BRO -#144|Iron-Craw Crusher|U|BRO -#145|Mask of the Jadecrafter|U|BRO -#146|Rust Goliath|C|BRO -#147|Deathbloom Ritualist|R|BRO -#148|Tawnos, the Toymaker|R|BRO -#149|Argivian Avenger|U|BRO -#150|Steel Exemplar|U|BRO -#151|Argoth, Sanctum of Nature|R|BRO -#152|Hall of Tagsin|R|BRO -#153|Meticulous Excavation|U|BRO -#154|Conscripted Infantry|C|BRO -#155|Scatter Ray|C|BRO -#156|Hostile Negotiations|R|BRO -#157|Unleash Shell|C|BRO -#158|Shoot Down|C|BRO -#159|Blackblade Reforged|R|BRR -#160|Burnished Hart|U|BRR -#161|Chromatic Star|U|BRR -#162|Gilded Lotus|R|BRR -#163|Ichor Wellspring|U|BRR -#164|Psychosis Crawler|R|BRR -#165|Self-Assembler|U|BRR -#166|Swiftfoot Boots|U|BRR -#167|Aeronaut Cavalry|C|BRO -#168|Phalanx Vanguard|C|BRO -#169|Repair and Recharge|U|BRO -#170|Warlord's Elite|C|BRO -#171|Scrapwork Cohort|C|BRO -#172|Flow of Knowledge|U|BRO -#173|Koilos Roc|C|BRO -#174|Lat-Nam Adept|C|BRO -#175|One with the Multiverse|M|BRO -#176|Combat Courier|C|BRO -#177|Depth Charge Colossus|C|BRO -#178|Hulking Metamorph|U|BRO -#179|Terisian Mindbreaker|R|BRO -#180|Disciples of Gix|U|BRO -#181|Gnawing Vermin|U|BRO -#182|Powerstone Fracture|C|BRO -#183|Transmogrant Altar|U|BRO -#184|Pyrrhic Blast|U|BRO -#185|Heavyweight Demolisher|U|BRO -#186|Mishra's Juggernaut|C|BRO -#187|Argothian Sprite|C|BRO -#188|Fallaji Excavation|U|BRO -#189|Giant Growth|C|BRO -#190|Haywire Mite|U|BRO -#191|Levitating Statue|U|BRO -#192|Reconstructed Thopter|U|BRO -#193|Su-Chi Cave Guard|U|BRO -#194|Symmetry Matrix|U|BRO -#195|Battlefield Forge|R|BRO -#196|Brushland|R|BRO -#197|Llanowar Wastes|R|BRO -#198|Underground River|R|BRO -#199|Burrowing Razormaw|C|BRO -#200|Roc Hunter|C|BRO -#201|Penregon Strongbull|C|BRO -#202|Emergency Weld|C|BRO +#5|Gix, Yawgmoth Praetor|M|BRO +#6|Titania's Command|R|BRO +#7|Phyrexian Fleshgorger|M|BRO +#8|Steel Seraph|R|BRO +#9|Gix's Command|R|BRO +#10|Visions of Phyrexia|R|BRO +#11|Bladecoil Serpent|M|BRO +#12|Clay Champion|M|BRO +#13|Cityscape Leveler|M|BRO +#14|Portal to Phyrexia|M|BRO +#15|In the Trenches|M|BRO +#16|Myrel, Shield of Argive|M|BRO +#17|Siege Veteran|R|BRO +#18|Skystrike Officer|R|BRO +#19|Surge Engine|M|BRO +#20|Saheeli, Filigree Master|M|BRO +#21|Gixian Puppeteer|R|BRO +#22|Phyrexian Dragon Engine|R|BRO +#23|Simian Simulacrum|R|BRO +#24|Sarinth Greatwurm|M|BRO +#25|Liberator, Urza's Battlethopter|R|BRO +#26|Keening Stone|R|BRR +#27|Loran of the Third Path|R|BRO +#28|Autonomous Assembler|R|BRO +#29|Misery's Shadow|R|BRO +#30|Transmogrant's Crown|R|BRO +#31|Draconic Destiny|M|BRO +#32|Rootwire Amalgam|M|BRO +#33|Mishra, Claimed by Gix|M|BRO +#34|Skyfisher Spider|U|BRO +#35|Urza, Prince of Kroog|R|BRO +#36|Altar of Dementia|M|BRR +#37|Staff of Domination|M|BRR +#38|Urza's Command|R|BRO +#39|Skitterbeam Battalion|M|BRO +#40|Legions to Ashes|R|BRO +#41|Tocasia, Dig Site Mentor|R|BRO +#42|The Mightstone and Weakstone|R|BRO +#43|Mazemind Tome|R|BRR +#44|Precursor Golem|R|BRR +#45|Arcane Proxy|M|BRO +#46|Go for the Throat|U|BRO +#47|Razorlash Transmogrant|R|BRO +#48|Teething Wurmlet|R|BRO +#49|Fallaji Vanguard|U|BRO +#50|Harbin, Vanguard Aviator|R|BRO +#51|Queen Kayla bin-Kroog|R|BRO +#52|Phyrexian Processor|R|BRR +#53|Static Net|U|BRO +#54|Combat Thresher|U|BRO +#55|Drafna, Founder of Lat-Nam|R|BRO +#56|Hurkyl, Master Wizard|R|BRO +#57|Feldon, Ronom Excavator|R|BRO +#58|Obliterating Bolt|U|BRO +#59|Battery Bearer|U|BRO +#60|Evangel of Synthesis|U|BRO +#61|Hero of the Dunes|U|BRO +#62|Junkyard Genius|U|BRO +#63|Excavation Explosion|C|BRO +#64|Perilous Vault|M|BRR +#65|Thopter Mechanic|U|BRO +#66|Zephyr Sentinel|U|BRO +#67|Ashnod, Flesh Mechanist|R|BRO +#68|Overwhelming Remorse|C|BRO +#69|Mishra's Command|R|BRO +#70|Mishra's Research Desk|U|BRO +#71|Obstinate Baloth|U|BRO +#72|Titania, Voice of Gaea|M|BRO +#73|Hajar, Loyal Bodyguard|R|BRO +#74|Mishra, Tamer of Mak Fawa|R|BRO +#75|Third Path Iconoclast|U|BRO +#76|Thran Spider|R|BRO +#77|Yotian Tactician|U|BRO +#78|Horned Stoneseeker|U|BRO +#79|Helm of the Host|M|BRR +#80|Platinum Angel|M|BRR +#81|Kayla's Command|R|BRO +#82|Urza's Sylex|M|BRO +#83|Gurgling Anointer|U|BRO +#84|Awaken the Woods|M|BRO +#85|Bushwhack|U|BRO +#86|Gaea's Courser|U|BRO +#87|Sarinth Steelseeker|U|BRO +#88|Arbalest Engineers|U|BRO +#89|Yotian Dissident|U|BRO +#90|Prison Sentence|C|BRO +#91|Foundry Inspector|U|BRR +#92|Ramos, Dragon Engine|M|BRR +#93|Scrap Trawler|R|BRR +#94|Swiftfoot Boots|U|BRR +#95|Loran, Disciple of History|U|BRO +#96|Recruitment Officer|U|BRO +#97|Tocasia's Welcome|R|BRO +#98|Corrupt|U|BRO +#99|Disfigure|C|BRO +#100|Gruesome Realization|U|BRO +#101|Audacity|U|BRO +#102|Fauna Shaman|R|BRO +#103|Iron-Craw Crusher|U|BRO +#104|Urza, Lord Protector|M|BRO +#105|Trench Stalker|C|BRO +#106|Boulderbranch Golem|C|BRO +#107|Hostile Negotiations|R|BRO +#108|Scrapwork Mutt|C|BRO +#109|Chromatic Star|U|BRR +#110|Lodestone Golem|R|BRR +#111|Sculpting Steel|R|BRR +#112|Stern Lesson|C|BRO +#113|Spotter Thopter|U|BRO +#114|Dreams of Steel and Oil|U|BRO +#115|Ashnod's Harvester|U|BRO +#116|Giant Cindermaw|U|BRO +#117|Argothian Opportunist|C|BRO +#118|Epic Confrontation|C|BRO +#119|Gwenna, Eyes of Gaea|R|BRO +#120|Deathbloom Ritualist|R|BRO +#121|Blast Zone|R|BRO +#122|Penregon Strongbull|C|BRO +#123|Emergency Weld|C|BRO +#124|Scrapwork Rager|C|BRO +#125|Blanchwood Prowler|C|BRO +#126|Ichor Wellspring|U|BRR +#127|Key to the City|R|BRR +#128|Pristine Talisman|U|BRR +#129|Sundering Titan|M|BRR +#130|Airlift Chaplain|C|BRO +#131|Phalanx Vanguard|C|BRO +#132|Scrapwork Cohort|C|BRO +#133|Fallaji Archaeologist|C|BRO +#134|Mightstone's Animation|C|BRO +#135|Urza, Powerstone Prodigy|U|BRO +#136|Weakstone's Subjugation|C|BRO +#137|Combat Courier|C|BRO +#138|Terisian Mindbreaker|R|BRO +#139|Battlefield Butcher|U|BRO +#140|Gix's Caress|C|BRO +#141|Brotherhood's End|R|BRO +#142|Mishra, Excavation Prodigy|U|BRO +#143|Raze to the Ground|C|BRO +#144|Argothian Sprite|C|BRO +#145|Gaea's Gift|C|BRO +#146|Mask of the Jadecrafter|U|BRO +#147|Rust Goliath|C|BRO +#148|Fortified Beachhead|R|BRO +#149|Mishra's Foundry|R|BRO +#150|Evolving Wilds|C|BRO +#151|Energy Refractor|C|BRO +#152|Blitz Automaton|C|BRO +#153|Wing Commando|C|BRO +#154|Desynchronize|C|BRO +#155|Loran's Escape|C|BRO +#156|Ravenous Gigamole|C|BRO +#157|Shoot Down|C|BRO +#158|Elsewhere Flask|U|BRR +#159|Mind's Eye|M|BRR +#160|Mishra's Bauble|U|BRR +#161|Self-Assembler|U|BRR +#162|Aeronaut Cavalry|C|BRO +#163|Disenchant|C|BRO +#164|Soul Partition|R|BRO +#165|Warlord's Elite|C|BRO +#166|Flow of Knowledge|U|BRO +#167|Machine Over Matter|C|BRO +#168|Third Path Savant|C|BRO +#169|Urza's Rebuff|C|BRO +#170|Hulking Metamorph|U|BRO +#171|The Temporal Anchor|R|BRO +#172|Disciples of Gix|U|BRO +#173|No One Left Behind|U|BRO +#174|Powerstone Fracture|C|BRO +#175|Transmogrant Altar|U|BRO +#176|Bitter Reunion|C|BRO +#177|Monastery Swiftspear|U|BRO +#178|Sibling Rivalry|C|BRO +#179|Fallaji Dragon Engine|U|BRO +#180|Mishra's Juggernaut|C|BRO +#181|Alloy Animist|U|BRO +#182|Giant Growth|C|BRO +#183|Perennial Behemoth|R|BRO +#184|Argivian Avenger|U|BRO +#185|Levitating Statue|U|BRO +#186|Power Plant Worker|C|BRO +#187|Reconstructed Thopter|U|BRO +#188|Steel Exemplar|U|BRO +#189|Argoth, Sanctum of Nature|R|BRO +#190|Battlefield Forge|R|BRO +#191|Brushland|R|BRO +#192|Hall of Tagsin|R|BRO +#193|Llanowar Wastes|R|BRO +#194|Underground River|R|BRO +#195|Burrowing Razormaw|C|BRO +#196|Tomakul Scrapsmith|C|BRO +#197|Roc Hunter|C|BRO +#198|Conscripted Infantry|C|BRO +#199|Goring Warplow|C|BRO +#200|Moment of Defiance|C|BRO +#201|Coastal Bulwark|C|BRO +#202|Scatter Ray|C|BRO #203|Air Marshal|C|BRO -#204|Gnarlroot Pallbearer|C|BRO -#205|Cradle Clearcutter|U|BRO -#206|Deadly Riposte|C|BRO -#207|Kill-Zone Acrobat|C|BRO -#208|Thraxodemon|C|BRO -#209|Scrapwork Mutt|C|BRO -#210|Blanchwood Prowler|C|BRO -#211|Adaptive Automaton|R|BRR +#204|Gixian Infiltrator|C|BRO +#205|Gnarlroot Pallbearer|C|BRO +#206|Tomakul Honor Guard|C|BRO +#207|Thraxodemon|C|BRO +#208|Unleash Shell|C|BRO +#209|Whirling Strike|C|BRO +#210|Perimeter Patrol|C|BRO +#211|Burnished Hart|U|BRR #212|Chromatic Lantern|R|BRR -#213|Elsewhere Flask|U|BRR -#214|Inspiring Statuary|R|BRR -#215|Mishra's Bauble|U|BRR -#216|Phyrexian Revoker|R|BRR -#217|Runechanter's Pike|R|BRR -#218|Great Desert Prospector|U|BRO -#219|Lay Down Arms|U|BRO -#220|Mass Production|U|BRO -#221|Powerstone Engineer|C|BRO -#222|Union of the Third Path|C|BRO -#223|Tocasia's Onulet|C|BRO -#224|Forging the Anchor|U|BRO -#225|Keeper of the Cadence|U|BRO -#226|Mightstone's Animation|C|BRO -#227|Ashnod's Intervention|C|BRO -#228|Corrupt|U|BRO -#229|Dreams of Steel and Oil|U|BRO -#230|Painful Quandary|R|BRO -#231|Bitter Reunion|C|BRO -#232|The Fall of Kroog|U|BRO -#233|Fallaji Chaindancer|C|BRO -#234|Mechanized Warfare|R|BRO -#235|Mishra's Onslaught|C|BRO -#236|Sibling Rivalry|C|BRO -#237|Alloy Animist|U|BRO -#238|Blanchwood Armor|U|BRO -#239|Gaea's Gift|C|BRO -#240|Tawnos's Tinkering|C|BRO -#241|Goblin Firebomb|C|BRO -#242|Mine Worker|C|BRO -#243|Power Plant Worker|C|BRO -#244|Tocasia's Dig Site|C|BRO -#245|Evolving Wilds|C|BRO -#246|Tomakul Scrapsmith|C|BRO -#247|Dwarven Forge-Chanter|C|BRO -#248|Desynchronize|C|BRO -#249|Involuntary Cooldown|U|BRO -#250|Gixian Infiltrator|C|BRO -#251|Tomakul Honor Guard|C|BRO -#252|Boulderbranch Golem|C|BRO -#253|Ravenous Gigamole|C|BRO -#254|Scrapwork Rager|C|BRO -#255|Whirling Strike|C|BRO -#256|Aetherflux Reservoir|M|BRR -#257|Ashnod's Altar|R|BRR -#258|Astral Cornucopia|R|BRR -#259|Cloud Key|R|BRR -#260|Goblin Charbelcher|R|BRR -#261|Journeyer's Kite|R|BRR -#262|Liquimetal Coating|U|BRR -#263|Mesmeric Orb|M|BRR -#264|Mind's Eye|M|BRR -#265|Quietus Spike|R|BRR -#266|Semblance Anvil|R|BRR -#267|Sigil of Valor|U|BRR -#268|Soul-Guide Lantern|U|BRR -#269|Sword of the Meek|R|BRR -#270|Well of Lost Dreams|R|BRR -#271|Ambush Paratrooper|C|BRO -#272|Kayla's Reconstruction|R|BRO -#273|Recommission|C|BRO -#274|Survivor of Korlis|C|BRO -#275|Yotian Medic|C|BRO -#276|Veteran's Powerblade|C|BRO -#277|Yotian Frontliner|U|BRO -#278|Splitting the Powerstone|U|BRO -#279|Take Flight|U|BRO -#280|Fateful Handoff|R|BRO -#281|Thran Vigil|U|BRO -#282|Clay Revenant|C|BRO -#283|Goblin Blast-Runner|C|BRO -#284|Mishra's Domination|C|BRO -#285|Sardian Cliffstomper|U|BRO -#286|Fog of War|C|BRO -#287|Thran Power Suit|U|BRO -#288|Tower Worker|C|BRO -#289|Slagstone Refinery|U|BRO -#290|Aeronaut's Wings|C|BRO -#291|Blitz Automaton|C|BRO -#292|Goring Warplow|C|BRO -#293|Trench Stalker|C|BRO -#294|Carrion Locust|C|BRO -#295|Military Discipline|C|BRO -#296|Loran's Escape|C|BRO -#297|Citanul Stalwart|C|BRO -#298|Hoarding Recluse|C|BRO -#299|Gixian Skullflayer|C|BRO -#300|Dredging Claw|C|BRO +#213|Gilded Lotus|R|BRR +#214|Phyrexian Revoker|R|BRR +#215|Psychosis Crawler|R|BRR +#216|Soul-Guide Lantern|U|BRR +#217|Mass Production|U|BRO +#218|Powerstone Engineer|C|BRO +#219|Repair and Recharge|U|BRO +#220|Thopter Architect|U|BRO +#221|Tocasia's Onulet|C|BRO +#222|Defabricate|U|BRO +#223|Koilos Roc|C|BRO +#224|Lat-Nam Adept|C|BRO +#225|Take Flight|U|BRO +#226|Depth Charge Colossus|C|BRO +#227|Diabolic Intent|R|BRO +#228|Gnawing Vermin|U|BRO +#229|Clay Revenant|C|BRO +#230|Fallaji Chaindancer|C|BRO +#231|Goblin Blast-Runner|C|BRO +#232|Pyrrhic Blast|U|BRO +#233|Sardian Cliffstomper|U|BRO +#234|Heavyweight Demolisher|U|BRO +#235|Fade from History|R|BRO +#236|Haywire Mite|U|BRO +#237|Mine Worker|C|BRO +#238|Su-Chi Cave Guard|U|BRO +#239|Symmetry Matrix|U|BRO +#240|Tocasia's Dig Site|C|BRO +#241|Tower Worker|C|BRO +#242|Stone Retrieval Unit|C|BRO +#243|Meticulous Excavation|U|BRO +#244|Dwarven Forge-Chanter|C|BRO +#245|Carrion Locust|C|BRO +#246|Curate|C|BRO +#247|Involuntary Cooldown|U|BRO +#248|Citanul Stalwart|C|BRO +#249|Hoarding Recluse|C|BRO +#250|Cradle Clearcutter|U|BRO +#251|Deadly Riposte|C|BRO +#252|Gixian Skullflayer|C|BRO +#253|Kill-Zone Acrobat|C|BRO +#254|Adaptive Automaton|R|BRR +#255|Blackblade Reforged|R|BRR +#256|Journeyer's Kite|R|BRR +#257|Mystic Forge|M|BRR +#258|Ambush Paratrooper|C|BRO +#259|Great Desert Prospector|U|BRO +#260|Lay Down Arms|U|BRO +#261|Yotian Medic|C|BRO +#262|Keeper of the Cadence|U|BRO +#263|One with the Multiverse|M|BRO +#264|Ashnod's Intervention|C|BRO +#265|Painful Quandary|R|BRO +#266|Thran Vigil|U|BRO +#267|Mishra's Domination|C|BRO +#268|Mishra's Onslaught|C|BRO +#269|Blanchwood Armor|U|BRO +#270|Wasteful Harvest|C|BRO +#271|Tawnos, the Toymaker|R|BRO +#272|Goblin Firebomb|C|BRO +#273|Aeronaut's Wings|C|BRO +#274|Retrieval Agent|C|BRO +#275|Military Discipline|C|BRO +#276|Dredging Claw|C|BRO +#277|Ashnod's Altar|R|BRR +#278|Astral Cornucopia|R|BRR +#279|Caged Sun|M|BRR +#280|Inspiring Statuary|R|BRR +#281|Mesmeric Orb|M|BRR +#282|Quietus Spike|R|BRR +#283|Runechanter's Pike|R|BRR +#284|Semblance Anvil|R|BRR +#285|Sigil of Valor|U|BRR +#286|Kayla's Reconstruction|R|BRO +#287|Recommission|C|BRO +#288|Survivor of Korlis|C|BRO +#289|Union of the Third Path|C|BRO +#290|Yotian Frontliner|U|BRO +#291|Forging the Anchor|U|BRO +#292|The Fall of Kroog|U|BRO +#293|Mechanized Warfare|R|BRO +#294|Fallaji Excavation|U|BRO +#295|Tawnos's Tinkering|C|BRO +#296|Thran Power Suit|U|BRO +#297|Swiftgear Drake|C|BRO +#298|Supply Drop|C|BRO +#299|Cloud Key|R|BRR +#300|Howling Mine|R|BRR #301|Jalum Tome|U|BRR -#302|Millstone|U|BRR -#303|Mox Amber|M|BRR -#304|Ornithopter|U|BRR -#305|Quicksilver Amulet|R|BRR -#306|Springleaf Drum|U|BRR -#307|Thorn of Amethyst|R|BRR -#308|Arms Race|U|BRO -#309|The Stasis Coffin|R|BRO -#310|Supply Drop|C|BRO -#311|Stone Retrieval Unit|C|BRO -#312|Energy Refractor|C|BRO -#313|Moment of Defiance|C|BRO -#314|Coastal Bulwark|C|BRO -#315|Retrieval Agent|C|BRO -#316|Curate|C|BRO -#317|Bone Saw|U|BRR -#318|Howling Mine|R|BRR -#319|Ivory Tower|U|BRR -#320|Keening Stone|R|BRR +#302|Sword of the Meek|R|BRR +#303|Well of Lost Dreams|R|BRR +#304|Veteran's Powerblade|C|BRO +#305|Fateful Handoff|R|BRO +#306|Fog of War|C|BRO +#307|Slagstone Refinery|U|BRO +#308|Over the Top|R|BRO +#309|Aetherflux Reservoir|M|BRR +#310|Goblin Charbelcher|R|BRR +#311|Liquimetal Coating|U|BRR +#312|Millstone|U|BRR +#313|Ornithopter|U|BRR +#314|Quicksilver Amulet|R|BRR +#315|Springleaf Drum|U|BRR +#316|Hurkyl's Final Meditation|R|BRO +#317|Arms Race|U|BRO +#318|Spectrum Sentinel|U|BRO +#319|Bone Saw|U|BRR +#320|Thorn of Amethyst|R|BRR #321|Unwinding Clock|R|BRR -#322|Calamity's Wake|U|BRO -#323|Hurkyl's Final Meditation|R|BRO -#324|Swiftgear Drake|C|BRO -#325|Over the Top|R|BRO -#326|Door to Nothingness|R|BRR -#327|The Stone Brain|R|BRO -#328|Demolition Field|U|BRO -#329|Spectrum Sentinel|U|BRO -#330|Defense Grid|R|BRR +#322|Splitting the Powerstone|U|BRO +#323|The Stasis Coffin|R|BRO +#324|The Stone Brain|R|BRO +#325|Demolition Field|U|BRO +#326|Defense Grid|R|BRR +#327|Door to Nothingness|R|BRR +#328|Ivory Tower|U|BRR +#329|Mox Amber|M|BRR +#330|Calamity's Wake|U|BRO #331|Plains 1|C|BRO #332|Plains 2|C|BRO #333|Island 1|C|BRO @@ -1272,6 +1272,293 @@ #330|Summer Bloom|U|2X2 #331|Shadowborn Apostle|C|2X2 //Rank|Name|Rarity|Set +#1|Champions of Tyr|M|HBG +#2|Snowborn Simulacra|M|HBG +#3|The Hourglass Coven|R|HBG +#4|Ancient Gold Dragon|M|HBG +#5|Ancient Brass Dragon|M|HBG +#6|Ancient Bronze Dragon|M|HBG +#7|Miirym, Sentinel Wyrm|R|HBG +#8|Verdant Rejuvenation|M|HBG +#9|Tasha, Unholy Archmage|M|HBG +#10|Prosper, Tome-Bound|M|HBG +#11|Minsc & Boo, Timeless Heroes|M|HBG +#12|Lae'zel, Githyanki Warrior|R|HBG +#13|Lukamina, Moon Druid|M|HBG +#14|Thayan Evokers|R|HBG +#15|Chaos Balor|M|HBG +#16|Oyaminartok, Polar Werebear|R|HBG +#17|Jon Irenicus, the Exile|R|HBG +#18|Klement, Novice Acolyte|R|HBG +#19|Wyll, Pact-Bound Duelist|M|HBG +#20|Calim, Djinn Emperor|R|HBG +#21|Horn of Valhalla|R|HBG +#22|Illithid Harvester|R|HBG +#23|Altar of Bhaal|R|HBG +#24|Wrathful Red Dragon|R|HBG +#25|Raphael, Fiendish Savior|R|HBG +#26|Sune's Intervention|R|HBG +#27|Ulder Ravengard, Marshal|R|HBG +#28|Nalia de'Arnise|M|HBG +#29|Skullport Merchant|U|HBG +#30|Sword Coast Serpent|U|HBG +#31|Ancient Copper Dragon|M|HBG +#32|Astarion, the Decadent|R|HBG +#33|Oji, the Exquisite Blade|U|HBG +#34|Fraying Line|R|HBG +#35|Seatower Imprisonment|U|HBG +#36|Grim Hireling|R|HBG +#37|Uthgardt Fury|R|HBG +#38|Earthquake Dragon|R|HBG +#39|Rasaad, Monk of Selune|U|HBG +#40|Gale, Conduit of the Arcane|M|HBG +#41|Imoen, Trickster Friend|R|HBG +#42|Shadowheart, Sharran Cleric|R|HBG +#43|Juvenile Mist Dragon|U|HBG +#44|Cast Down|U|HBG +#45|Tiefling Outcasts|R|HBG +#46|Ancient Silver Dragon|M|HBG +#47|Meteor Golem|U|HBG +#48|Stick Together|R|HBG +#49|Craving of Yeenoghu|U|HBG +#50|Mephit's Enthusiasm|U|HBG +#51|Priest of Ancient Lore|C|HBG +#52|Grim Bounty|C|HBG +#53|Krydle of Baldur's Gate|U|HBG +#54|Gale's Redirection|R|HBG +#55|Young Blue Dragon|C|HBG +#56|Blood Money|M|HBG +#57|Alaundo the Seer|R|HBG +#58|Kagha, Shadow Archdruid|U|HBG +#59|Korlessa, Scale Singer|U|HBG +#60|Basilisk Collar|R|HBG +#61|Grave Choice|U|HBG +#62|Kardum, Patron of Flames|R|HBG +#63|Liara of the Flaming Fist|U|HBG +#64|Viconia, Nightsinger's Disciple|U|HBG +#65|Karlach, Raging Tiefling|R|HBG +#66|Wilson, Bear Comrade|R|HBG +#67|Black Dragon|U|HBG +#68|Dragon's Fire|C|HBG +#69|Trelasarra, Moon Dancer|U|HBG +#70|Displacer Kitten|R|HBG +#71|Draconic Muralists|U|HBG +#72|Thrakkus the Butcher|U|HBG +#73|Signature Spells|R|HBG +#74|Black Market Connections|R|HBG +#75|Jaheira, Harper Emissary|U|HBG +#76|Battle Cry Goblin|U|HBG +#77|Red Dragon|U|HBG +#78|Lurking Roper|U|HBG +#79|Kalain, Reclusive Painter|U|HBG +#80|Rescuer Chwinga|U|HBG +#81|Goggles of Night|U|HBG +#82|Bonecaller Cleric|U|HBG +#83|Intellect Devourer|R|HBG +#84|Pact Weapon|M|HBG +#85|Breath Weapon|U|HBG +#86|Swashbuckler Extraordinaire|U|HBG +#87|Gorion, Wise Mentor|R|HBG +#88|Jan Jansen, Chaos Crafter|R|HBG +#89|Lozhan, Dragons' Legacy|U|HBG +#90|Raggadragga, Goreguts Boss|R|HBG +#91|Boareskyr Tollkeeper|U|HBG +#92|Patriar's Humiliation|C|HBG +#93|Vladimir and Godfrey|R|HBG +#94|Minthara of the Absolute|U|HBG +#95|Catti-brie of Mithral Hall|R|HBG +#96|Ambergris, Citadel Agent|U|HBG +#97|Skanos, Dragon Vassal|U|HBG +#98|Owlbear|C|HBG +#99|Prosperous Innkeeper|U|HBG +#100|You're Confronted by Robbers|U|HBG +#101|Irenicus's Vile Duplication|U|HBG +#102|Circle of the Land Druid|C|HBG +#103|Druid of the Emerald Grove|U|HBG +#104|Undercellar Myconid|C|HBG +#105|Sewer Plague|C|HBG +#106|Dragonborn Immolator|U|HBG +#107|Gnoll Hunting Party|U|HBG +#108|Favored Enemy|R|HBG +#109|Baba Lysaga, Night Witch|R|HBG +#110|Alora, Rogue Companion|U|HBG +#111|Vhal, Eager Scholar|U|HBG +#112|Portable Hole|U|HBG +#113|Soulknife Spy|C|HBG +#114|You Come to a River|C|HBG +#115|Deadly Dispute|C|HBG +#116|Eyes of the Beholder|C|HBG +#117|Guiding Bolt|U|HBG +#118|Pegasus Guardian|U|HBG +#119|Draconic Lore|U|HBG +#120|Ghost Lantern|U|HBG +#121|Young Red Dragon|C|HBG +#122|Band Together|C|HBG +#123|Dread Linnorm|C|HBG +#124|Emerald Dragon|U|HBG +#125|Jade Orb of Dragonkind|U|HBG +#126|Owlbear Shepherd|U|HBG +#127|Pilgrim's Eye|C|HBG +#128|Moradin's Disciples|U|HBG +#129|Water Weird|C|HBG +#130|Genasi Rabble-Rouser|C|HBG +#131|Fiendlash|R|HBG +#132|Gate of the Black Dragon|U|HBG +#133|Gate to Manorborn|U|HBG +#134|Gate to Seatower|U|HBG +#135|Gate to the Citadel|U|HBG +#136|Gate to Tumbledown|U|HBG +#137|Sarevok the Usurper|U|HBG +#138|Steadfast Paladin|C|HBG +#139|You Hear Something on Watch|C|HBG +#140|Air-Cult Elemental|C|HBG +#141|Clever Conjurer|C|HBG +#142|Ray of Frost|U|HBG +#143|Manticore|C|HBG +#144|Shambling Ghast|C|HBG +#145|Vampire Spawn|C|HBG +#146|Hobgoblin Captain|C|HBG +#147|Circle of the Moon Druid|C|HBG +#148|Hill Giant Herdgorger|C|HBG +#149|Blessed Hippogriff|C|HBG +#150|Icewind Stalwart|C|HBG +#151|Lapis Orb of Dragonkind|U|HBG +#152|Pseudodragon Familiar|C|HBG +#153|Guildsworn Prowler|C|HBG +#154|Nefarious Imp|C|HBG +#155|Carnelian Orb of Dragonkind|U|HBG +#156|Two-Handed Axe|U|HBG +#157|Scaled Nurturer|C|HBG +#158|Prophetic Prism|C|HBG +#159|Flaming Fist Duskguard|C|HBG +#160|Ranger Squadron|C|HBG +#161|Soldiers of the Watch|C|HBG +#162|Lizardfolk Librarians|C|HBG +#163|Undersimplify|C|HBG +#164|Stroke of Luck|R|HBG +#165|Sepulcher Ghoul|C|HBG +#166|Giant Fire Beetles|C|HBG +#167|Kobold Warcaller|C|HBG +#168|Lulu, Forgetful Hollyphant|U|HBG +#169|Minimus Containment|C|HBG +#170|Monk of the Open Hand|U|HBG +#171|Rally Maneuver|U|HBG +#172|Charmed Sleep|C|HBG +#173|Rimeshield Frost Giant|C|HBG +#174|Demogorgon's Clutches|C|HBG +#175|Grim Wanderer|U|HBG +#176|Farideh's Fireball|C|HBG +#177|Improvised Weaponry|C|HBG +#178|Unexpected Windfall|C|HBG +#179|Valor Singer|C|HBG +#180|Choose Your Weapon|U|HBG +#181|Gnoll Hunter|C|HBG +#182|Wild Shape|U|HBG +#183|Guardian Naga|C|HBG +#184|Dragonborn Looter|C|HBG +#185|Kenku Artificer|U|HBG +#186|Kindred Discovery|R|HBG +#187|Chain Devil|C|HBG +#188|Gray Slaad|C|HBG +#189|Sigil of Myrkul|U|HBG +#190|Summon Undead|C|HBG +#191|Reckless Barbarian|C|HBG +#192|Druidic Ritual|C|HBG +#193|Ettercap|C|HBG +#194|Bronze Walrus|U|HBG +#195|Lantern of Revealing|C|HBG +#196|Navigation Orb|U|HBG +#197|Wizened Githzerai|C|HBG +#198|Seek New Knowledge|U|HBG +#199|Wand of Orcus|R|HBG +#200|Goblin Trapfinder|U|HBG +#201|Incessant Provocation|C|HBG +#202|Warriors of Tiamat|C|HBG +#203|Nalfeshnee|R|HBG +#204|Follow the Tracks|C|HBG +#205|You Line Up the Shot|C|HBG +#206|Yuan-Ti Scaleshield|R|HBG +#207|Gut, Fanatical Priestess|U|HBG +#208|Celestial Unicorn|C|HBG +#209|Devoted Paladin|C|HBG +#210|Contact Other Plane|C|HBG +#211|Guild Thief|U|HBG +#212|You Find the Villains' Lair|C|HBG +#213|Baleful Beholder|C|HBG +#214|Drider|U|HBG +#215|Hoard Robber|C|HBG +#216|Earth-Cult Elemental|C|HBG +#217|Jaded Sell-Sword|C|HBG +#218|You Find Some Prisoners|C|HBG +#219|Inspiring Bard|C|HBG +#220|Sylvan Shepherd|C|HBG +#221|Underdark Basilisk|C|HBG +#222|Bag of Holding|U|HBG +#223|Iron Golem|U|HBG +#224|Archivist of Oghma|R|HBG +#225|Ascend from Avernus|R|HBG +#226|Flaming Fist Officer|C|HBG +#227|Scouting Hawk|U|HBG +#228|Steadfast Unicorn|C|HBG +#229|Blur|C|HBG +#230|Dream Fracture|U|HBG +#231|Tymora's Invoker|C|HBG +#232|Ambition's Cost|U|HBG +#233|Armor of Shadows|C|HBG +#234|Ambitious Dragonborn|C|HBG +#235|Poison the Blade|C|HBG +#236|Split the Spoils|U|HBG +#237|Mazzy, Truesword Paladin|R|HBG +#238|Neera, Wild Mage|R|HBG +#239|Chardalyn Dragon|U|HBG +#240|Sworn to the Legion|M|HBG +#241|Valiant Farewell|C|HBG +#242|Hypnotic Pattern|C|HBG +#243|Hook Horror|C|HBG +#244|Unexpected Allies|C|HBG +#245|Arcane Archery|C|HBG +#246|Dawnbringer Cleric|C|HBG +#247|You're Ambushed on the Road|C|HBG +#248|Shocking Grasp|C|HBG +#249|Thieves' Tools|C|HBG +#250|Dueling Rapier|C|HBG +#251|You Come to the Gnoll Camp|C|HBG +#252|You Meet in a Tavern|U|HBG +#253|Spiked Pit Trap|C|HBG +#254|Lae'zel's Acrobatics|R|HBG +#255|Cloak of the Bat|C|HBG +#256|Mirror of Life Trapping|R|HBG +#257|Mind Spike|U|HBG +#258|Monster Manual|R|HBG +#259|Mace of Disruption|C|HBG +#260|Belt of Giant Strength|R|HBG +#261|Robe of the Archmagi|R|HBG +#262|Eldritch Pact|R|HBG +#263|Storm King's Thunder|M|HBG +#264|Traverse the Outlands|R|HBG +#265|Baldur's Gate|R|HBG +#266|Flames of Moradin|R|HBG +#267|Plains 1|C|HBG +#268|Plains 2|C|HBG +#269|Plains 3|C|HBG +#270|Plains 4|C|HBG +#271|Island 1|C|HBG +#272|Island 2|C|HBG +#273|Island 3|C|HBG +#274|Island 4|C|HBG +#275|Swamp 1|C|HBG +#276|Swamp 2|C|HBG +#277|Swamp 3|C|HBG +#278|Swamp 4|C|HBG +#279|Mountain 1|C|HBG +#280|Mountain 2|C|HBG +#281|Mountain 3|C|HBG +#282|Mountain 4|C|HBG +#283|Forest 1|C|HBG +#284|Forest 2|C|HBG +#285|Forest 3|C|HBG +#286|Forest 4|C|HBG +//Rank|Name|Rarity|Set #1|Sanctuary Warden|M|SNC #2|All-Seeing Arbiter|M|SNC #3|Ziatora, the Incinerator|M|SNC diff --git a/forge-gui/res/editions/Alchemy Horizons Baldur's Gate.txt b/forge-gui/res/editions/Alchemy Horizons Baldur's Gate.txt index 2308f92fc70..979c8e8939d 100644 --- a/forge-gui/res/editions/Alchemy Horizons Baldur's Gate.txt +++ b/forge-gui/res/editions/Alchemy Horizons Baldur's Gate.txt @@ -3,6 +3,10 @@ Code=HBG Date=2022-07-07 Name=Alchemy Horizons: Baldur's Gate Type=Online +BoosterCovers=3 +Booster=10 Common:fromsheet("HBG cards"), 3 Uncommon:fromSheet("HBG cards"), 1 RareMythic:fromSheet("HBG cards"), 1 BasicLand:fromSheet("HBG cards") +Prerelease=6 Boosters, 1 RareMythic+ +BoosterBox=36 ScryfallCode=HBG [cards] diff --git a/forge-gui/res/editions/Arena.txt b/forge-gui/res/editions/Arena.txt deleted file mode 100644 index 2dfb7be7a83..00000000000 --- a/forge-gui/res/editions/Arena.txt +++ /dev/null @@ -1,10 +0,0 @@ -[metadata] -Code=ARENA -Date=1994-09-01 -Name=Arena -Type=Promo -ScryfallCode=PHPR - -[cards] -1 C Arena @Rob Alexander -2 C Sewers of Estark @Melissa A. Benson diff --git a/forge-gui/res/editions/Dominaria United.txt b/forge-gui/res/editions/Dominaria United.txt index 90a7cd1a241..f1afd50f873 100644 --- a/forge-gui/res/editions/Dominaria United.txt +++ b/forge-gui/res/editions/Dominaria United.txt @@ -458,6 +458,8 @@ ScryfallCode=DMU 432 U Cut Down @Dominik Mayer 433 C Lightning Strike @Marta Nael 434 U Nishoba Brawler @Valera Lutfullina +435 M Sheoldred, the Apocalypse @Richard Whitters +436 M Sheoldred, the Apocalypse @Richard Whitters [lands] 2 Plains|DMU|1 diff --git a/forge-gui/res/editions/Final Sacrifice.txt b/forge-gui/res/editions/Final Sacrifice.txt deleted file mode 100644 index 6686e2eb712..00000000000 --- a/forge-gui/res/editions/Final Sacrifice.txt +++ /dev/null @@ -1,9 +0,0 @@ -[metadata] -Code=FS -Date=1994-09-01 -Name=Final Sacrifice -Type=Promo -ScryfallCode=PHPR - -[cards] -5 C Mana Crypt @Mark Tedin diff --git a/forge-gui/res/editions/HarperPrism Book Promos.txt b/forge-gui/res/editions/HarperPrism Book Promos.txt new file mode 100644 index 00000000000..026c6e3ce96 --- /dev/null +++ b/forge-gui/res/editions/HarperPrism Book Promos.txt @@ -0,0 +1,13 @@ +[metadata] +Code=PHPR +Date=1994-09-01 +Name=HarperPrism Book Promos +Type=Promo +ScryfallCode=PHPR + +[cards] +1 R Arena @Rob Alexander +2 R Sewers of Estark @Melissa A. Benson +3 R Windseeker Centaur @Anson Maddocks +4 R Giant Badger @Liz Danforth +5 R Mana Crypt @Mark Tedin diff --git a/forge-gui/res/editions/Judge Gift Cards 2023.txt b/forge-gui/res/editions/Judge Gift Cards 2023.txt index 3120bbb8c48..87d8affad33 100644 --- a/forge-gui/res/editions/Judge Gift Cards 2023.txt +++ b/forge-gui/res/editions/Judge Gift Cards 2023.txt @@ -7,6 +7,7 @@ ScryfallCode=P23 [cards] 1 R Painter's Servant @Mike Dringenberg +2 R Grindstone @Dan Scott 3 R Mycosynth Lattice @Anthony S. Waters 4 R Retrofitter Foundry @Dmitry Burmak 5 M Sword of War and Peace @Chris Rahn diff --git a/forge-gui/res/editions/Kaldheim.txt b/forge-gui/res/editions/Kaldheim.txt index 2f4740ac006..e0e72a84c42 100644 --- a/forge-gui/res/editions/Kaldheim.txt +++ b/forge-gui/res/editions/Kaldheim.txt @@ -429,6 +429,8 @@ ScryfallCode=KHM 403 U Poison the Cup @Colin Boyer 404 C Frost Bite @Caio Monteiro 405 C Masked Vandal @Jason A. Engle +406 M Vorinclex, Monstrous Raider @Richard Whitters +407 M Vorinclex, Monstrous Raider @Richard Whitters [rebalanced] A40 M A-Alrund, God of the Cosmos @Kieran Yanner diff --git a/forge-gui/res/editions/Kamigawa Neon Dynasty.txt b/forge-gui/res/editions/Kamigawa Neon Dynasty.txt index 5b1afe8d8c5..2a5174ef020 100644 --- a/forge-gui/res/editions/Kamigawa Neon Dynasty.txt +++ b/forge-gui/res/editions/Kamigawa Neon Dynasty.txt @@ -533,6 +533,8 @@ ScryfallCode=NEO 510 U Jukai Naturalist @Anna Steinbauer 511 U Silver-Fur Master @Carl Critchlow 512 U Secluded Courtyard @Sam Burley +513 M Jin-Gitaxias, Progress Tyrant @Richard Whitters +514 M Jin-Gitaxias, Progress Tyrant @Richard Whitters [lands] 1 Plains|NEO|1 diff --git a/forge-gui/res/editions/Phyrexia All Will Be One.txt b/forge-gui/res/editions/Phyrexia All Will Be One.txt new file mode 100644 index 00000000000..0817b63128b --- /dev/null +++ b/forge-gui/res/editions/Phyrexia All Will Be One.txt @@ -0,0 +1,52 @@ +[metadata] +Code=ONE +Date=2023-02-10 +Name=Phyrexia: All Will Be One +Type=Expansion +ScryfallCode=ONE + +[cards] +10 M Elesh Norn, Mother of Machines @Martina Fackova +43 R Blue Sun's Twilight @Piotr Dura +105 M Phyrexian Obliterator @Maxim Kostin +138 R Koth, Fire of Resistance @Eric Wilkerson +149 R Slobad, Iron Goblin @Chris Seaman +203 R Jor Kadeen, First Goldwarden @Jeremy Wilson +262 L Plains @Alayna Danner +263 L Island @Alayna Danner +264 L Swamp @Alayna Danner +265 L Mountain @Alayna Danner +266 L Forest @Alayna Danner +267 L Plains @Mark Riddick +268 L Island @Mark Riddick +269 L Swamp @Mark Riddick +270 L Mountain @Mark Riddick +271 L Forest @Mark Riddick +272 L Plains @Sergey Glushakov +273 L Island @David Alvarez +274 L Swamp @Julian Kok Joon Wen +275 L Mountain @Muhammad Firdaus +276 L Forest @Nadia Hurianova +298 M Elesh Norn, Mother of Machines @Dominik Mayer +308 M Phyrexian Obliterator @Yu-ki Nishimoto +311 R Slobad, Iron Goblin @Dominik Mayer +332 R Jor Kadeen, First Goldwarden @Sansyu +338 R Koth, Fire of Resistance @Ai Nanahira +345 M Elesh Norn, Mother of Machines @Pedro Potier +365 L Plains @Dan Mumford +366 L Island @Evan Cagle +367 L Swamp @Daria Khlebnikova +368 L Mountain @Indra Nugroho +369 L Forest @Alayna Danner +379 R Blue Sun's Twilight @Piotr Dura +414 M Elesh Norn, Mother of Machines @Martina Fackova +415 M Elesh Norn, Mother of Machines @Junji Ito +416 M Elesh Norn, Mother of Machines @Richard Whitters +418 M Elesh Norn, Mother of Machines @Martina Fackova +419 M Elesh Norn, Mother of Machines @Junji Ito +420 M Elesh Norn, Mother of Machines @Dominik Mayer +421 M Elesh Norn, Mother of Machines @Richard Whitters +440 M Phyrexian Obliterator @Yu-ki Nishimoto +446 R Koth, Fire of Resistance @Ai Nanahira +448 R Slobad, Iron Goblin @Dominik Mayer +462 R Jor Kadeen, First Goldwarden @Sansyu diff --git a/forge-gui/res/editions/Secret Lair Drop Series.txt b/forge-gui/res/editions/Secret Lair Drop Series.txt index 8d5a668f045..ef42aef9726 100644 --- a/forge-gui/res/editions/Secret Lair Drop Series.txt +++ b/forge-gui/res/editions/Secret Lair Drop Series.txt @@ -590,8 +590,11 @@ ScryfallCode=SLD 618 R Diffusion Sliver @Trevor Claxton 619 R Galerider Sliver @James Zapata 620 R Mesmeric Sliver @Michael Bruinsma +624 R Shadow Sliver @Warren Mahy 626 R Synapse Sliver @Thomas M. Baxa 628 R Winged Sliver @Anthony S. Waters +629 R Basal Sliver @Drew Tucker +632 R Leeching Sliver @Svetlin Velinov 634 R Syphon Sliver @Tyler Jacobson 636 R Belligerent Sliver @Raymond Swanland 641 R Magma Sliver @Wayne England @@ -612,6 +615,7 @@ ScryfallCode=SLD 663 R Harmonic Sliver @Luca Zontini 664 R Hibernation Sliver @Scott Kirschner 665 R Lavabelly Sliver @Mark Behm +666 R Necrotic Sliver @Dave Allsop 667 R Opaline Sliver @Dave Dorman 668 R Sliver Hive @Igor Kieryluk 669 R Battlefield Forge @MSCHF @@ -625,6 +629,7 @@ ScryfallCode=SLD 677 R Command Tower @Kevin Gnutzmans 678 R Torbran, Thane of Red Fell @Wayne Reynolds 679 R Ghost Quarter @Sidharth Chaturvedi +682 R Shadowborn Apostle @Diego Andrade 683 R Shadowborn Apostle @Jakub Rebelka 684 R Shadowborn Apostle @Laynes 690 R Forest @Magali Villeneuve @@ -649,6 +654,8 @@ ScryfallCode=SLD 718 R Maro @Jesper Ejsing 719 R Maro @Mark Rosewater 721 R Diabolic Tutor @Brain Dead +726 R Zur the Enchanter @Chase Stone +727 R Fabled Passage @Warren Mahy 900 R The Scarab God @Barely Human 1001 M Elspeth, Knight-Errant @Volkan Baǵa 1002 R Patron Wizard @Volkan Baǵa diff --git a/forge-gui/res/editions/Shattered Chains.txt b/forge-gui/res/editions/Shattered Chains.txt deleted file mode 100644 index bd6cac6858d..00000000000 --- a/forge-gui/res/editions/Shattered Chains.txt +++ /dev/null @@ -1,9 +0,0 @@ -[metadata] -Code=SHC -Date=1994-09-01 -Name=Shattered Chains -Type=Promo -ScryfallCode=PHPR - -[cards] -4 C Giant Badger @Liz Danforth diff --git a/forge-gui/res/editions/Streets of New Capenna.txt b/forge-gui/res/editions/Streets of New Capenna.txt index 6c8419c19b8..f32c271ebce 100644 --- a/forge-gui/res/editions/Streets of New Capenna.txt +++ b/forge-gui/res/editions/Streets of New Capenna.txt @@ -490,6 +490,8 @@ ScryfallCode=SNC 465 C Incriminate @Kieran Yanner 466 C Light 'Em Up @Tony Foti 467 U Courier's Briefcase @Josu Hernaiz +468 M Urabrask, Heretic Praetor @Richard Whitters +469 M Urabrask, Heretic Praetor @Richard Whitters [rebalanced] A6 C A-Buy Your Silence @Tony Foti diff --git a/forge-gui/res/editions/The Brothers War Commander.txt b/forge-gui/res/editions/The Brothers War Commander.txt index 7863b23ab01..e2d8b2ba884 100644 --- a/forge-gui/res/editions/The Brothers War Commander.txt +++ b/forge-gui/res/editions/The Brothers War Commander.txt @@ -42,8 +42,6 @@ ScryfallCode=BRC 34 L Swamp @Robin Olausson 35 L Mountain @Bruce Brenneise 36 L Mountain @Victor Harmatiuk -37 L Forest -38 L Forest 39 M Mishra, Eminent One @Randy Vargas 40 M Urza, Chief Artificer @Bartlomiej Gawel 41 R Disciple of Caelus Nin @Steve Argyle diff --git a/forge-gui/res/editions/Universes Within.txt b/forge-gui/res/editions/Universes Within.txt index 240803f76d8..8f51c39005f 100644 --- a/forge-gui/res/editions/Universes Within.txt +++ b/forge-gui/res/editions/Universes Within.txt @@ -15,3 +15,11 @@ ScryfallCode=SLX 7 R Sophina, Spearsage Deserter @Bartek Fedyczak 8 R Wernog, Rider's Chaplain @Diego Gisbert 9 R Havengul Laboratory @Rafater +10 R Baldin, Century Herdmaster @Zoltan Boros +11 R Vikya, Scorching Stalwart @Zoltan Boros +12 R Aisha of Sparks and Smoke @Evyn Fong +13 R The Howling Abomination @Helge C. Balzer +14 R Immard, the Stormcleaver @Kai Carpenter +15 R Maarika, Brutal Gladiator @Wisnu Tan +16 R Tadeas, Juniper Ascendant @Alexander Mokhov +17 R Zethi, Arcane Blademaster @Billy Christian diff --git a/forge-gui/res/editions/Whispering Woods.txt b/forge-gui/res/editions/Whispering Woods.txt deleted file mode 100644 index 26e55aa2654..00000000000 --- a/forge-gui/res/editions/Whispering Woods.txt +++ /dev/null @@ -1,9 +0,0 @@ -[metadata] -Code=WW -Date=1994-09-01 -Name=Whispering Woods -Type=Promo -ScryfallCode=PHPR - -[cards] -3 C Windseeker Centaur @Anson Maddocks diff --git a/forge-gui/res/skins/default/IMG_CARDBG_A.png b/forge-gui/res/skins/default/IMG_CARDBG_A.png new file mode 100644 index 00000000000..33d16ad327b Binary files /dev/null and b/forge-gui/res/skins/default/IMG_CARDBG_A.png differ diff --git a/forge-gui/res/skins/default/IMG_CARDBG_B.png b/forge-gui/res/skins/default/IMG_CARDBG_B.png new file mode 100644 index 00000000000..b98f2f1d1af Binary files /dev/null and b/forge-gui/res/skins/default/IMG_CARDBG_B.png differ diff --git a/forge-gui/res/skins/default/IMG_CARDBG_BG.png b/forge-gui/res/skins/default/IMG_CARDBG_BG.png new file mode 100644 index 00000000000..1fb85d92f1a Binary files /dev/null and b/forge-gui/res/skins/default/IMG_CARDBG_BG.png differ diff --git a/forge-gui/res/skins/default/IMG_CARDBG_BR.png b/forge-gui/res/skins/default/IMG_CARDBG_BR.png new file mode 100644 index 00000000000..38a263de520 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_CARDBG_BR.png differ diff --git a/forge-gui/res/skins/default/IMG_CARDBG_C.png b/forge-gui/res/skins/default/IMG_CARDBG_C.png new file mode 100644 index 00000000000..1be2fa1336c Binary files /dev/null and b/forge-gui/res/skins/default/IMG_CARDBG_C.png differ diff --git a/forge-gui/res/skins/default/IMG_CARDBG_G.png b/forge-gui/res/skins/default/IMG_CARDBG_G.png new file mode 100644 index 00000000000..3fbe9e08be6 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_CARDBG_G.png differ diff --git a/forge-gui/res/skins/default/IMG_CARDBG_L.png b/forge-gui/res/skins/default/IMG_CARDBG_L.png new file mode 100644 index 00000000000..bcc1b8f15bf Binary files /dev/null and b/forge-gui/res/skins/default/IMG_CARDBG_L.png differ diff --git a/forge-gui/res/skins/default/IMG_CARDBG_M.png b/forge-gui/res/skins/default/IMG_CARDBG_M.png new file mode 100644 index 00000000000..925ccb287ee Binary files /dev/null and b/forge-gui/res/skins/default/IMG_CARDBG_M.png differ diff --git a/forge-gui/res/skins/default/IMG_CARDBG_R.png b/forge-gui/res/skins/default/IMG_CARDBG_R.png new file mode 100644 index 00000000000..227ba4a0159 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_CARDBG_R.png differ diff --git a/forge-gui/res/skins/default/IMG_CARDBG_RG.png b/forge-gui/res/skins/default/IMG_CARDBG_RG.png new file mode 100644 index 00000000000..eefd588d88a Binary files /dev/null and b/forge-gui/res/skins/default/IMG_CARDBG_RG.png differ diff --git a/forge-gui/res/skins/default/IMG_CARDBG_U.png b/forge-gui/res/skins/default/IMG_CARDBG_U.png new file mode 100644 index 00000000000..e37e31d8f16 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_CARDBG_U.png differ diff --git a/forge-gui/res/skins/default/IMG_CARDBG_UB.png b/forge-gui/res/skins/default/IMG_CARDBG_UB.png new file mode 100644 index 00000000000..658f1123f10 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_CARDBG_UB.png differ diff --git a/forge-gui/res/skins/default/IMG_CARDBG_UG.png b/forge-gui/res/skins/default/IMG_CARDBG_UG.png new file mode 100644 index 00000000000..a256fe611b1 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_CARDBG_UG.png differ diff --git a/forge-gui/res/skins/default/IMG_CARDBG_UR.png b/forge-gui/res/skins/default/IMG_CARDBG_UR.png new file mode 100644 index 00000000000..488d8724b4c Binary files /dev/null and b/forge-gui/res/skins/default/IMG_CARDBG_UR.png differ diff --git a/forge-gui/res/skins/default/IMG_CARDBG_V.png b/forge-gui/res/skins/default/IMG_CARDBG_V.png new file mode 100644 index 00000000000..ea64df49c44 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_CARDBG_V.png differ diff --git a/forge-gui/res/skins/default/IMG_CARDBG_W.png b/forge-gui/res/skins/default/IMG_CARDBG_W.png new file mode 100644 index 00000000000..f1557ae5df0 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_CARDBG_W.png differ diff --git a/forge-gui/res/skins/default/IMG_CARDBG_WB.png b/forge-gui/res/skins/default/IMG_CARDBG_WB.png new file mode 100644 index 00000000000..1503a494dc3 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_CARDBG_WB.png differ diff --git a/forge-gui/res/skins/default/IMG_CARDBG_WG.png b/forge-gui/res/skins/default/IMG_CARDBG_WG.png new file mode 100644 index 00000000000..e5032e8d742 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_CARDBG_WG.png differ diff --git a/forge-gui/res/skins/default/IMG_CARDBG_WR.png b/forge-gui/res/skins/default/IMG_CARDBG_WR.png new file mode 100644 index 00000000000..3f2694cdcfd Binary files /dev/null and b/forge-gui/res/skins/default/IMG_CARDBG_WR.png differ diff --git a/forge-gui/res/skins/default/IMG_CARDBG_WU.png b/forge-gui/res/skins/default/IMG_CARDBG_WU.png new file mode 100644 index 00000000000..ab93905081e Binary files /dev/null and b/forge-gui/res/skins/default/IMG_CARDBG_WU.png differ diff --git a/forge-gui/res/skins/default/IMG_NYX_B.png b/forge-gui/res/skins/default/IMG_NYX_B.png new file mode 100644 index 00000000000..cd2bc9e5592 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_NYX_B.png differ diff --git a/forge-gui/res/skins/default/IMG_NYX_C.png b/forge-gui/res/skins/default/IMG_NYX_C.png new file mode 100644 index 00000000000..0699fc784f4 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_NYX_C.png differ diff --git a/forge-gui/res/skins/default/IMG_NYX_G.png b/forge-gui/res/skins/default/IMG_NYX_G.png new file mode 100644 index 00000000000..80cd49e488f Binary files /dev/null and b/forge-gui/res/skins/default/IMG_NYX_G.png differ diff --git a/forge-gui/res/skins/default/IMG_NYX_M.png b/forge-gui/res/skins/default/IMG_NYX_M.png new file mode 100644 index 00000000000..0e8fd30cccd Binary files /dev/null and b/forge-gui/res/skins/default/IMG_NYX_M.png differ diff --git a/forge-gui/res/skins/default/IMG_NYX_R.png b/forge-gui/res/skins/default/IMG_NYX_R.png new file mode 100644 index 00000000000..8f56f7f1ff4 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_NYX_R.png differ diff --git a/forge-gui/res/skins/default/IMG_NYX_U.png b/forge-gui/res/skins/default/IMG_NYX_U.png new file mode 100644 index 00000000000..dafa47d5ae0 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_NYX_U.png differ diff --git a/forge-gui/res/skins/default/IMG_NYX_W.png b/forge-gui/res/skins/default/IMG_NYX_W.png new file mode 100644 index 00000000000..0ed4b07c074 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_NYX_W.png differ diff --git a/forge-gui/res/skins/default/IMG_PWBG_B.png b/forge-gui/res/skins/default/IMG_PWBG_B.png new file mode 100644 index 00000000000..e356fc51465 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_PWBG_B.png differ diff --git a/forge-gui/res/skins/default/IMG_PWBG_BG.png b/forge-gui/res/skins/default/IMG_PWBG_BG.png new file mode 100644 index 00000000000..1e5fee4bf6d Binary files /dev/null and b/forge-gui/res/skins/default/IMG_PWBG_BG.png differ diff --git a/forge-gui/res/skins/default/IMG_PWBG_BR.png b/forge-gui/res/skins/default/IMG_PWBG_BR.png new file mode 100644 index 00000000000..dbe696da738 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_PWBG_BR.png differ diff --git a/forge-gui/res/skins/default/IMG_PWBG_C.png b/forge-gui/res/skins/default/IMG_PWBG_C.png new file mode 100644 index 00000000000..da27c6aca9f Binary files /dev/null and b/forge-gui/res/skins/default/IMG_PWBG_C.png differ diff --git a/forge-gui/res/skins/default/IMG_PWBG_G.png b/forge-gui/res/skins/default/IMG_PWBG_G.png new file mode 100644 index 00000000000..b05f9c9f2df Binary files /dev/null and b/forge-gui/res/skins/default/IMG_PWBG_G.png differ diff --git a/forge-gui/res/skins/default/IMG_PWBG_M.png b/forge-gui/res/skins/default/IMG_PWBG_M.png new file mode 100644 index 00000000000..07f8c58c9b2 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_PWBG_M.png differ diff --git a/forge-gui/res/skins/default/IMG_PWBG_R.png b/forge-gui/res/skins/default/IMG_PWBG_R.png new file mode 100644 index 00000000000..5265966b594 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_PWBG_R.png differ diff --git a/forge-gui/res/skins/default/IMG_PWBG_RG.png b/forge-gui/res/skins/default/IMG_PWBG_RG.png new file mode 100644 index 00000000000..896c6c7a39e Binary files /dev/null and b/forge-gui/res/skins/default/IMG_PWBG_RG.png differ diff --git a/forge-gui/res/skins/default/IMG_PWBG_U.png b/forge-gui/res/skins/default/IMG_PWBG_U.png new file mode 100644 index 00000000000..0dcfc38d57f Binary files /dev/null and b/forge-gui/res/skins/default/IMG_PWBG_U.png differ diff --git a/forge-gui/res/skins/default/IMG_PWBG_UB.png b/forge-gui/res/skins/default/IMG_PWBG_UB.png new file mode 100644 index 00000000000..64d3bb8854d Binary files /dev/null and b/forge-gui/res/skins/default/IMG_PWBG_UB.png differ diff --git a/forge-gui/res/skins/default/IMG_PWBG_UG.png b/forge-gui/res/skins/default/IMG_PWBG_UG.png new file mode 100644 index 00000000000..7933af08444 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_PWBG_UG.png differ diff --git a/forge-gui/res/skins/default/IMG_PWBG_UR.png b/forge-gui/res/skins/default/IMG_PWBG_UR.png new file mode 100644 index 00000000000..03ab5e5734d Binary files /dev/null and b/forge-gui/res/skins/default/IMG_PWBG_UR.png differ diff --git a/forge-gui/res/skins/default/IMG_PWBG_W.png b/forge-gui/res/skins/default/IMG_PWBG_W.png new file mode 100644 index 00000000000..0742a258c38 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_PWBG_W.png differ diff --git a/forge-gui/res/skins/default/IMG_PWBG_WB.png b/forge-gui/res/skins/default/IMG_PWBG_WB.png new file mode 100644 index 00000000000..9e7e41b9b4c Binary files /dev/null and b/forge-gui/res/skins/default/IMG_PWBG_WB.png differ diff --git a/forge-gui/res/skins/default/IMG_PWBG_WG.png b/forge-gui/res/skins/default/IMG_PWBG_WG.png new file mode 100644 index 00000000000..1bfa21addf6 Binary files /dev/null and b/forge-gui/res/skins/default/IMG_PWBG_WG.png differ diff --git a/forge-gui/res/skins/default/IMG_PWBG_WR.png b/forge-gui/res/skins/default/IMG_PWBG_WR.png new file mode 100644 index 00000000000..5ad936b336f Binary files /dev/null and b/forge-gui/res/skins/default/IMG_PWBG_WR.png differ diff --git a/forge-gui/res/skins/default/IMG_PWBG_WU.png b/forge-gui/res/skins/default/IMG_PWBG_WU.png new file mode 100644 index 00000000000..cc35cc8f5de Binary files /dev/null and b/forge-gui/res/skins/default/IMG_PWBG_WU.png differ diff --git a/forge-gui/res/skins/default/sprite_cardbg.png b/forge-gui/res/skins/default/sprite_cardbg.png deleted file mode 100644 index 1eea41c2b03..00000000000 Binary files a/forge-gui/res/skins/default/sprite_cardbg.png and /dev/null differ diff --git a/forge-gui/res/tokenscripts/rg_5_4_dragon_spirit_damagesac.txt b/forge-gui/res/tokenscripts/rg_5_4_dragon_spirit_damagesac.txt index 3cef63cb6a6..21958bd2a47 100644 --- a/forge-gui/res/tokenscripts/rg_5_4_dragon_spirit_damagesac.txt +++ b/forge-gui/res/tokenscripts/rg_5_4_dragon_spirit_damagesac.txt @@ -4,5 +4,5 @@ Types:Creature Dragon Spirit Colors:red,green PT:5/4 T:Mode$ DamageDealtOnce | ValidSource$ Card.Self | Execute$ TrigSac | TriggerZones$ Battlefield | TriggerDescription$ When this creature deals damage, sacrifice it. -SVar:TrigSac:DB$ Sacrifice | Defined$ Self +SVar:TrigSac:DB$ Sacrifice Oracle:When this creature deals damage, sacrifice it. diff --git a/forge-gui/res/tokenscripts/u_2_2_illusion_illusory.txt b/forge-gui/res/tokenscripts/u_2_2_illusion_illusory.txt index 7ae15913bcd..2442984e82d 100644 --- a/forge-gui/res/tokenscripts/u_2_2_illusion_illusory.txt +++ b/forge-gui/res/tokenscripts/u_2_2_illusion_illusory.txt @@ -5,5 +5,5 @@ Colors:blue PT:2/2 T:Mode$ BecomesTarget | ValidTarget$ Card.Self | ValidSource$ Spell | TriggerZones$ Battlefield | Execute$ DoSac | TriggerDescription$ When CARDNAME becomes the target of a spell, sacrifice it. SVar:TokenTgtDies:SVar:Targeting:Dies -SVar:DoSac:DB$ Sacrifice | Defined$ Self +SVar:DoSac:DB$ Sacrifice Oracle:When this creatures becomes the target of a spell, sacrifice it. diff --git a/forge-gui/src/main/java/forge/gamemodes/quest/data/GameFormatQuest.java b/forge-gui/src/main/java/forge/gamemodes/quest/data/GameFormatQuest.java index fc63af93743..54030ccd2c8 100644 --- a/forge-gui/src/main/java/forge/gamemodes/quest/data/GameFormatQuest.java +++ b/forge-gui/src/main/java/forge/gamemodes/quest/data/GameFormatQuest.java @@ -61,7 +61,7 @@ public final class GameFormatQuest extends GameFormat { // Filter must be continuously rebuilt if the format is mutable if(setRotation != null) return super.buildFilter(true); - return super.getFilterRules(); + return super.getFilterPrinted(); } /** diff --git a/forge-gui/src/main/java/forge/localinstance/properties/ForgeConstants.java b/forge-gui/src/main/java/forge/localinstance/properties/ForgeConstants.java index d0b33e1f416..d6857260cfc 100644 --- a/forge-gui/src/main/java/forge/localinstance/properties/ForgeConstants.java +++ b/forge-gui/src/main/java/forge/localinstance/properties/ForgeConstants.java @@ -130,7 +130,6 @@ public final class ForgeConstants { public static final String SPRITE_SETLOGO_FILE = "sprite_setlogo.png"; public static final String SPRITE_WATERMARK_FILE = "sprite_watermark.png"; public static final String SPRITE_DRAFTRANKS_FILE = "sprite_draftranks.png"; - public static String SPRITE_CARDBG_FILE = "sprite_cardbg.png"; public static final String FONT_FILE = "font1.ttf"; public static final String SPLASH_BG_FILE = "bg_splash.png"; public static final String MATCH_BG_FILE = "bg_match.jpg"; @@ -243,6 +242,51 @@ public final class ForgeConstants { public static final String BG_84 = "Morphic_Tide.jpg"; public static final String BG_85 = "Mutual_Epiphany.jpg"; public static final String BG_86 = "Time_Distortion.jpg"; + //CARD BG + public static final String IMG_CARDBG_A = "IMG_CARDBG_A.png"; + public static final String IMG_CARDBG_B = "IMG_CARDBG_B.png"; + public static final String IMG_CARDBG_BG = "IMG_CARDBG_BG.png"; + public static final String IMG_CARDBG_BR = "IMG_CARDBG_BR.png"; + public static final String IMG_CARDBG_C = "IMG_CARDBG_C.png"; + public static final String IMG_CARDBG_G = "IMG_CARDBG_G.png"; + public static final String IMG_CARDBG_L = "IMG_CARDBG_L.png"; + public static final String IMG_CARDBG_M = "IMG_CARDBG_M.png"; + public static final String IMG_CARDBG_R = "IMG_CARDBG_R.png"; + public static final String IMG_CARDBG_RG = "IMG_CARDBG_RG.png"; + public static final String IMG_CARDBG_U = "IMG_CARDBG_U.png"; + public static final String IMG_CARDBG_UB = "IMG_CARDBG_UB.png"; + public static final String IMG_CARDBG_UG = "IMG_CARDBG_UG.png"; + public static final String IMG_CARDBG_UR = "IMG_CARDBG_UR.png"; + public static final String IMG_CARDBG_V = "IMG_CARDBG_V.png"; + public static final String IMG_CARDBG_W = "IMG_CARDBG_W.png"; + public static final String IMG_CARDBG_WB = "IMG_CARDBG_WB.png"; + public static final String IMG_CARDBG_WG = "IMG_CARDBG_WG.png"; + public static final String IMG_CARDBG_WR = "IMG_CARDBG_WR.png"; + public static final String IMG_CARDBG_WU = "IMG_CARDBG_WU.png"; + public static final String IMG_PWBG_B = "IMG_PWBG_B.png"; + public static final String IMG_PWBG_BG = "IMG_PWBG_BG.png"; + public static final String IMG_PWBG_BR = "IMG_PWBG_BR.png"; + public static final String IMG_PWBG_C = "IMG_PWBG_C.png"; + public static final String IMG_PWBG_G = "IMG_PWBG_G.png"; + public static final String IMG_PWBG_M = "IMG_PWBG_M.png"; + public static final String IMG_PWBG_R = "IMG_PWBG_R.png"; + public static final String IMG_PWBG_RG = "IMG_PWBG_RG.png"; + public static final String IMG_PWBG_U = "IMG_PWBG_U.png"; + public static final String IMG_PWBG_UB = "IMG_PWBG_UB.png"; + public static final String IMG_PWBG_UG = "IMG_PWBG_UG.png"; + public static final String IMG_PWBG_UR = "IMG_PWBG_UR.png"; + public static final String IMG_PWBG_W = "IMG_PWBG_W.png"; + public static final String IMG_PWBG_WB = "IMG_PWBG_WB.png"; + public static final String IMG_PWBG_WG = "IMG_PWBG_WG.png"; + public static final String IMG_PWBG_WR = "IMG_PWBG_WR.png"; + public static final String IMG_PWBG_WU = "IMG_PWBG_WU.png"; + public static final String IMG_NYX_B = "IMG_NYX_B.png"; + public static final String IMG_NYX_G = "IMG_NYX_G.png"; + public static final String IMG_NYX_M = "IMG_NYX_M.png"; + public static final String IMG_NYX_R = "IMG_NYX_R.png"; + public static final String IMG_NYX_U = "IMG_NYX_U.png"; + public static final String IMG_NYX_W = "IMG_NYX_W.png"; + public static final String IMG_NYX_C = "IMG_NYX_C.png"; // data tree roots public static final String USER_DIR; diff --git a/forge-gui/src/main/java/forge/localinstance/skin/FSkinProp.java b/forge-gui/src/main/java/forge/localinstance/skin/FSkinProp.java index 500defc2ada..d8f4f72fe2d 100644 --- a/forge-gui/src/main/java/forge/localinstance/skin/FSkinProp.java +++ b/forge-gui/src/main/java/forge/localinstance/skin/FSkinProp.java @@ -472,53 +472,6 @@ public enum FSkinProp { IMG_DRAFTRANK_A (new int[] {244, 244, 240, 240}, PropType.DRAFTRANKS), IMG_DRAFTRANK_S (new int[] {2, 486, 240, 240}, PropType.DRAFTRANKS), - //FOR CARDBG - IMG_CARDBG_A (new int[] {2, 2, 339, 496}, PropType.CARDBG), - IMG_CARDBG_B (new int[] {343, 2, 339, 496}, PropType.CARDBG), - IMG_CARDBG_BG (new int[] {684, 2, 339, 496}, PropType.CARDBG), - IMG_CARDBG_BR (new int[] {1025, 2, 339, 496}, PropType.CARDBG), - IMG_CARDBG_C (new int[] {1366, 2, 339, 496}, PropType.CARDBG), - IMG_CARDBG_G (new int[] {2, 500, 339, 496}, PropType.CARDBG), - IMG_CARDBG_L (new int[] {343, 500, 339, 496}, PropType.CARDBG), - IMG_CARDBG_M (new int[] {684, 500, 339, 496}, PropType.CARDBG), - IMG_CARDBG_R (new int[] {1025, 500, 339, 496}, PropType.CARDBG), - IMG_CARDBG_RG (new int[] {1366, 500, 339, 496}, PropType.CARDBG), - IMG_CARDBG_U (new int[] {2, 998, 339, 496}, PropType.CARDBG), - IMG_CARDBG_UB (new int[] {343, 998, 339, 496}, PropType.CARDBG), - IMG_CARDBG_UG (new int[] {684, 998, 339, 496}, PropType.CARDBG), - IMG_CARDBG_UR (new int[] {1025, 998, 339, 496}, PropType.CARDBG), - IMG_CARDBG_V (new int[] {1366, 998, 339, 496}, PropType.CARDBG), - IMG_CARDBG_W (new int[] {2, 1496, 339, 496}, PropType.CARDBG), - IMG_CARDBG_WB (new int[] {343, 1496, 339, 496}, PropType.CARDBG), - IMG_CARDBG_WG (new int[] {684, 1496, 339, 496}, PropType.CARDBG), - IMG_CARDBG_WR (new int[] {1025, 1496, 339, 496}, PropType.CARDBG), - IMG_CARDBG_WU (new int[] {1366, 1496, 339, 496}, PropType.CARDBG), - //FOR PW BG - IMG_PWBG_B (new int[] {2, 1994, 339, 496}, PropType.CARDBG), - IMG_PWBG_BG (new int[] {343, 1994, 339, 496}, PropType.CARDBG), - IMG_PWBG_BR (new int[] {684, 1994, 339, 496}, PropType.CARDBG), - IMG_PWBG_C (new int[] {1025, 1994, 339, 496}, PropType.CARDBG), - IMG_PWBG_G (new int[] {1366, 1994, 339, 496}, PropType.CARDBG), - IMG_PWBG_M (new int[] {2, 2492, 339, 496}, PropType.CARDBG), - IMG_PWBG_R (new int[] {343, 2492, 339, 496}, PropType.CARDBG), - IMG_PWBG_RG (new int[] {684, 2492, 339, 496}, PropType.CARDBG), - IMG_PWBG_U (new int[] {1025, 2492, 339, 496}, PropType.CARDBG), - IMG_PWBG_UB (new int[] {1366, 2492, 339, 496}, PropType.CARDBG), - IMG_PWBG_UG (new int[] {2, 2990, 339, 496}, PropType.CARDBG), - IMG_PWBG_UR (new int[] {343, 2990, 339, 496}, PropType.CARDBG), - IMG_PWBG_W (new int[] {684, 2990, 339, 496}, PropType.CARDBG), - IMG_PWBG_WB (new int[] {1025, 2990, 339, 496}, PropType.CARDBG), - IMG_PWBG_WG (new int[] {1366, 2990, 339, 496}, PropType.CARDBG), - IMG_PWBG_WR (new int[] {2, 3488, 339, 496}, PropType.CARDBG), - IMG_PWBG_WU (new int[] {343, 3488, 339, 496}, PropType.CARDBG), - //NYX OVERLAY - IMG_NYX_B (new int[] {684, 3488, 339, 248}, PropType.CARDBG), - IMG_NYX_G (new int[] {1025, 3488, 339, 248}, PropType.CARDBG), - IMG_NYX_M (new int[] {1366, 3488, 339, 248}, PropType.CARDBG), - IMG_NYX_R (new int[] {684, 3736, 339, 248}, PropType.CARDBG), - IMG_NYX_U (new int[] {1025, 3736, 339, 248}, PropType.CARDBG), - IMG_NYX_W (new int[] {1366, 3736, 339, 248}, PropType.CARDBG), - IMG_FAV1 (new int[] {0, 0, 100, 100}, PropType.FAVICON), IMG_FAV2 (new int[] {100, 0, 100, 100}, PropType.FAVICON), IMG_FAV3 (new int[] {200, 0, 100, 100}, PropType.FAVICON), @@ -626,7 +579,6 @@ public enum FSkinProp { SETLOGO, WATERMARKS, DRAFTRANKS, - CARDBG, FAVICON } }