diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java index c3ae977cff0..966300ee475 100644 --- a/forge-ai/src/main/java/forge/ai/AiController.java +++ b/forge-ai/src/main/java/forge/ai/AiController.java @@ -937,9 +937,6 @@ public class AiController { if (!sa.checkRestrictions(spellHost, player)) { return AiPlayDecision.AnotherTime; } - if (sa instanceof SpellPermanent) { - return canPlayFromEffectAI((SpellPermanent) sa, false, true); - } if (sa.usesTargeting()) { if (!sa.isTargetNumberValid() && sa.getTargetRestrictions().getNumCandidates(sa, true) == 0) { return AiPlayDecision.TargetingFailed; @@ -949,6 +946,9 @@ public class AiController { } } if (sa instanceof Spell) { + if (card.isPermanent()) { + return canPlayFromEffectAI((Spell) sa, false, true); + } if (!player.cantLoseForZeroOrLessLife() && player.canLoseLife() && ComputerUtil.getDamageForPlaying(player, sa) >= player.getLife()) { return AiPlayDecision.CurseEffects; @@ -1279,7 +1279,7 @@ public class AiController { return AiPlayDecision.WillPlay; } - if (spell instanceof SpellPermanent) { + if (card.isPermanent()) { if (!checkETBEffects(card, spell, null)) { return AiPlayDecision.BadEtbEffects; } diff --git a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java index 6b60c89c64d..ec8db182168 100644 --- a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java +++ b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java @@ -1530,6 +1530,24 @@ public class PlayerControllerAi extends PlayerController { return SpellApiToAi.Converter.get(api).chooseCardName(player, sa, faces); } + @Override + public ICardFace chooseSingleCardFace(SpellAbility sa, List faces, String message) { + ApiType api = sa.getApi(); + if (null == api) { + throw new InvalidParameterException("SA is not api-based, this is not supported yet"); + } + return SpellApiToAi.Converter.get(api).chooseCardFace(player, sa, faces); + } + + @Override + public CardState chooseSingleCardState(SpellAbility sa, List states, String message, Map params) { + ApiType api = sa.getApi(); + if (null == api) { + throw new InvalidParameterException("SA is not api-based, this is not supported yet"); + } + return SpellApiToAi.Converter.get(api).chooseCardState(player, sa, states, params); + } + @Override public Card chooseDungeon(Player ai, List dungeonCards, String message) { // TODO: improve the conditions that define which dungeon is a viable option to choose diff --git a/forge-ai/src/main/java/forge/ai/SpellAbilityAi.java b/forge-ai/src/main/java/forge/ai/SpellAbilityAi.java index 1acee5072ee..5bae9afca53 100644 --- a/forge-ai/src/main/java/forge/ai/SpellAbilityAi.java +++ b/forge-ai/src/main/java/forge/ai/SpellAbilityAi.java @@ -8,6 +8,7 @@ import forge.card.mana.ManaCost; import forge.card.mana.ManaCostParser; import forge.game.GameEntity; import forge.game.card.Card; +import forge.game.card.CardState; import forge.game.card.CounterType; import forge.game.cost.Cost; import forge.game.mana.ManaCostBeingPaid; @@ -365,6 +366,18 @@ public abstract class SpellAbilityAi { return face == null ? "" : face.getName(); } + public ICardFace chooseCardFace(Player ai, SpellAbility sa, List faces) { + System.err.println("Warning: default (ie. inherited from base class) implementation of chooseCardFace is used for " + this.getClass().getName() + ". Consider declaring an overloaded method"); + + return Iterables.getFirst(faces, null); + } + + public CardState chooseCardState(Player ai, SpellAbility sa, List faces, Map params) { + System.err.println("Warning: default (ie. inherited from base class) implementation of chooseCardState is used for " + this.getClass().getName() + ". Consider declaring an overloaded method"); + + return Iterables.getFirst(faces, null); + } + public int chooseNumber(Player player, SpellAbility sa, int min, int max, Map params) { return max; } diff --git a/forge-ai/src/main/java/forge/ai/SpellApiToAi.java b/forge-ai/src/main/java/forge/ai/SpellApiToAi.java index 6c56786b187..db5e141ea87 100644 --- a/forge-ai/src/main/java/forge/ai/SpellApiToAi.java +++ b/forge-ai/src/main/java/forge/ai/SpellApiToAi.java @@ -190,6 +190,7 @@ public enum SpellApiToAi { .put(ApiType.TwoPiles, TwoPilesAi.class) .put(ApiType.Unattach, CannotPlayAi.class) .put(ApiType.UnattachAll, UnattachAllAi.class) + .put(ApiType.UnlockDoor, AlwaysPlayAi.class) .put(ApiType.Untap, UntapAi.class) .put(ApiType.UntapAll, UntapAllAi.class) .put(ApiType.Venture, VentureAi.class) diff --git a/forge-core/src/main/java/forge/card/CardStateName.java b/forge-core/src/main/java/forge/card/CardStateName.java index 42005ef9c9e..fdbc8fe11f3 100644 --- a/forge-core/src/main/java/forge/card/CardStateName.java +++ b/forge-core/src/main/java/forge/card/CardStateName.java @@ -12,6 +12,7 @@ public enum CardStateName { RightSplit, Adventure, Modal, + EmptyRoom, SpecializeW, SpecializeU, SpecializeB, diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index a192381de7b..df8fc772c4b 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -190,7 +190,12 @@ public class GameAction { // Make sure the card returns from the battlefield as the original card with two halves resetToOriginal = true; } - } else if (!zoneTo.is(ZoneType.Stack)) { + } else if (zoneTo.is(ZoneType.Battlefield) && c.isRoom()) { + if (c.getCastSA() == null) { + // need to set as empty room + c.updateRooms(); + } + } else if (!zoneTo.is(ZoneType.Stack) && !zoneTo.is(ZoneType.Battlefield)) { // For regular splits, recreate the original state unless the card is going to stack as one half resetToOriginal = true; } @@ -604,6 +609,9 @@ public class GameAction { // CR 603.6b if (toBattlefield) { zoneTo.saveLKI(copied, lastKnownInfo); + if (copied.isRoom() && copied.getCastSA() != null) { + copied.unlockRoom(copied.getCastSA().getActivatingPlayer(), copied.getCastSA().getCardStateName()); + } } // only now that the LKI preserved it diff --git a/forge-game/src/main/java/forge/game/ability/AbilityKey.java b/forge-game/src/main/java/forge/game/ability/AbilityKey.java index 7eda7e340bc..24faa6069b3 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityKey.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityKey.java @@ -30,6 +30,7 @@ public enum AbilityKey { Blockers("Blockers"), CanReveal("CanReveal"), Card("Card"), + CardState("CardState"), Cards("Cards"), CardsFiltered("CardsFiltered"), CardLKI("CardLKI"), diff --git a/forge-game/src/main/java/forge/game/ability/ApiType.java b/forge-game/src/main/java/forge/game/ability/ApiType.java index 0ba67421827..0475b035cac 100644 --- a/forge-game/src/main/java/forge/game/ability/ApiType.java +++ b/forge-game/src/main/java/forge/game/ability/ApiType.java @@ -194,6 +194,7 @@ public enum ApiType { TwoPiles (TwoPilesEffect.class), Unattach (UnattachEffect.class), UnattachAll (UnattachAllEffect.class), + UnlockDoor (UnlockDoorEffect.class), Untap (UntapEffect.class), UntapAll (UntapAllEffect.class), Venture (VentureEffect.class), diff --git a/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java index f811834cf00..7b5750284d5 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java @@ -144,6 +144,7 @@ public class CloneEffect extends SpellAbilityEffect { final long ts = game.getNextTimestamp(); tgtCard.addCloneState(CardFactory.getCloneStates(cardToCopy, tgtCard, sa), ts); + tgtCard.updateRooms(); // set ETB tapped of clone if (sa.hasParam("IntoPlayTapped")) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java index ba569b713c0..4a191e49719 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java @@ -273,6 +273,7 @@ public class CounterEffect extends SpellAbilityEffect { // card is no longer cast c.setCastSA(null); c.setCastFrom(null); + c.forceTurnFaceUp(); if (tgtSA instanceof SpellPermanent) { c.setController(srcSA.getActivatingPlayer(), 0); movedCard = game.getAction().moveToPlay(c, srcSA.getActivatingPlayer(), srcSA, params); diff --git a/forge-game/src/main/java/forge/game/ability/effects/UnlockDoorEffect.java b/forge-game/src/main/java/forge/game/ability/effects/UnlockDoorEffect.java new file mode 100644 index 00000000000..7ab3831e2bb --- /dev/null +++ b/forge-game/src/main/java/forge/game/ability/effects/UnlockDoorEffect.java @@ -0,0 +1,106 @@ +package forge.game.ability.effects; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + +import forge.card.CardStateName; +import forge.game.Game; +import forge.game.ability.SpellAbilityEffect; +import forge.game.card.Card; +import forge.game.card.CardCollection; +import forge.game.card.CardLists; +import forge.game.card.CardState; +import forge.game.player.Player; +import forge.game.spellability.SpellAbility; +import forge.game.zone.ZoneType; +import forge.util.Localizer; + +public class UnlockDoorEffect extends SpellAbilityEffect { + + @Override + public void resolve(SpellAbility sa) { + final Card source = sa.getHostCard(); + final Game game = source.getGame(); + final Player activator = sa.getActivatingPlayer(); + + CardCollection list; + + if (sa.hasParam("Choices")) { + Player chooser = activator; + String title = sa.hasParam("ChoiceTitle") ? sa.getParam("ChoiceTitle") : Localizer.getInstance().getMessage("lblChoose") + " "; + + CardCollection choices = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), sa.getParam("Choices"), activator, source, sa); + + Card c = chooser.getController().chooseSingleEntityForEffect(choices, sa, title, Maps.newHashMap()); + if (c == null) { + return; + } + list = new CardCollection(c); + } else { + list = getTargetCards(sa); + } + + for (Card c : list) { + Map params = Maps.newHashMap(); + params.put("Object", c); + switch (sa.getParamOrDefault("Mode", "ThisDoor")) { + case "ThisDoor": + c.unlockRoom(activator, sa.getCardStateName()); + break; + case "Unlock": + List states = c.getLockedRooms().stream().map(stateName -> c.getState(stateName)).collect(Collectors.toList()); + + // need to choose Room Name + CardState chosen = activator.getController().chooseSingleCardState(sa, states, "Choose Room to unlock", params); + if (chosen == null) { + continue; + } + c.unlockRoom(activator, chosen.getStateName()); + break; + case "LockOrUnlock": + switch (c.getLockedRooms().size()) { + case 0: + // no locked, all unlocked, can only lock door + List unlockStates = c.getUnlockedRooms().stream().map(stateName -> c.getState(stateName)).collect(Collectors.toList()); + CardState chosenUnlock = activator.getController().chooseSingleCardState(sa, unlockStates, "Choose Room to lock", params); + if (chosenUnlock == null) { + continue; + } + c.lockRoom(activator, chosenUnlock.getStateName()); + break; + case 1: + // TODO check for Lock vs Unlock first? + List bothStates = Lists.newArrayList(); + bothStates.add(c.getState(CardStateName.LeftSplit)); + bothStates.add(c.getState(CardStateName.RightSplit)); + CardState chosenBoth = activator.getController().chooseSingleCardState(sa, bothStates, "Choose Room to lock or unlock", params); + if (chosenBoth == null) { + continue; + } + if (c.getLockedRooms().contains(chosenBoth.getStateName())) { + c.unlockRoom(activator, chosenBoth.getStateName()); + } else { + c.lockRoom(activator, chosenBoth.getStateName()); + } + break; + case 2: + List lockStates = c.getLockedRooms().stream().map(stateName -> c.getState(stateName)).collect(Collectors.toList()); + + // need to choose Room Name + CardState chosenLock = activator.getController().chooseSingleCardState(sa, lockStates, "Choose Room to unlock", params); + if (chosenLock == null) { + continue; + } + c.unlockRoom(activator, chosenLock.getStateName()); + break; + } + break; + } + } + } + +} diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 0d989ad6f4a..0117e037d0c 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -215,6 +215,9 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr private boolean plotted; + private Set unlockedRooms = EnumSet.noneOf(CardStateName.class); + private Map unlockAbilities = Maps.newEnumMap(CardStateName.class); + private boolean specialized; private int timesCrewedThisTurn = 0; @@ -444,6 +447,9 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr if (state == CardStateName.FaceDown) { return getFaceDownState(); } + if (state == CardStateName.EmptyRoom) { + return getEmptyRoomState(); + } CardCloneStates clStates = getLastClonedState(); if (clStates == null) { return getOriginalState(state); @@ -452,7 +458,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr } public boolean hasState(final CardStateName state) { - if (state == CardStateName.FaceDown) { + if (state == CardStateName.FaceDown || state == CardStateName.EmptyRoom) { return true; } CardCloneStates clStates = getLastClonedState(); @@ -466,6 +472,9 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr if (state == CardStateName.FaceDown) { return getFaceDownState(); } + if (state == CardStateName.EmptyRoom) { + return getEmptyRoomState(); + } return states.get(state); } @@ -492,7 +501,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr boolean needsTransformAnimation = transform || rollback; // faceDown has higher priority over clone states // while text change states doesn't apply while the card is faceDown - if (state != CardStateName.FaceDown) { + if (state != CardStateName.FaceDown && state != CardStateName.EmptyRoom) { CardCloneStates cloneStates = getLastClonedState(); if (cloneStates != null) { if (!cloneStates.containsKey(state)) { @@ -796,6 +805,10 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr return setState(CardStateName.FaceDown, false); } + public void forceTurnFaceUp() { + turnFaceUp(false, null); + } + public boolean turnFaceUp(SpellAbility cause) { return turnFaceUp(true, cause); } @@ -930,6 +943,10 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr return alt ? StaticData.instance().getCommonCards().getName(name, true) : name; } + public final boolean hasNameOverwrite() { + return changedCardNames.values().stream().anyMatch(CardChangedName::isOverwrite); + } + public final boolean hasNonLegendaryCreatureNames() { boolean result = false; for (CardChangedName change : this.changedCardNames.values()) { @@ -1041,7 +1058,12 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr } public final boolean isSplitCard() { - return getRules() != null && getRules().getSplitType() == CardSplitType.Split; + // Normal Split Cards, these need to return true before Split States are added + if (getRules() != null && getRules().getSplitType() == CardSplitType.Split) { + return true; + }; + // in case or clones or copies + return hasState(CardStateName.LeftSplit); } public final boolean isAdventureCard() { @@ -1966,7 +1988,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr public final Integer getChosenNumber() { return chosenNumber; } - + public final void setChosenNumber(final int i) { setChosenNumber(i, false); } public final void setChosenNumber(final int i, final boolean secret) { chosenNumber = i; @@ -3122,7 +3144,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr } else if (keyword.startsWith("Entwine") || keyword.startsWith("Madness") || keyword.startsWith("Miracle") || keyword.startsWith("Recover") || keyword.startsWith("Escape") || keyword.startsWith("Foretell:") - || keyword.startsWith("Disturb") || keyword.startsWith("Overload") + || keyword.startsWith("Disturb") || keyword.startsWith("Overload") || keyword.startsWith("Plot")) { final String[] k = keyword.split(":"); final Cost cost = new Cost(k[1], false); @@ -4088,13 +4110,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr if (Iterables.isEmpty(changedCardTypes)) { return state.getType(); } - // CR 506.4 attacked planeswalkers leave combat - boolean checkCombat = state.getType().isPlaneswalker() && game.getCombat() != null && !game.getCombat().getAttackersOf(this).isEmpty(); - CardTypeView types = state.getType().getTypeWithChanges(changedCardTypes); - if (checkCombat && !types.isPlaneswalker()) { - game.getCombat().removeFromCombat(this); - } - return types; + return state.getType().getTypeWithChanges(changedCardTypes); } public final CardTypeView getOriginalType() { @@ -5577,6 +5593,8 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr public final boolean isOutlaw() { return getType().isOutlaw(); } + public final boolean isRoom() { return getType().hasSubtype("Room"); } + /** {@inheritDoc} */ @Override public final int compareTo(final Card that) { @@ -5987,9 +6005,21 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr boolean shares = getName(true).equals(name); // Split cards has extra logic to check if it does share a name with - if (isSplitCard()) { - shares |= name.equals(getState(CardStateName.LeftSplit).getName()); - shares |= name.equals(getState(CardStateName.RightSplit).getName()); + if (!shares && !hasNameOverwrite()) { + if (isInPlay()) { + // split cards in play are only rooms + for (String door : getUnlockedRoomNames()) { + shares |= name.equals(door); + } + } else { // not on the battlefield + if (hasState(CardStateName.LeftSplit)) { + shares |= name.equals(getState(CardStateName.LeftSplit).getName()); + } + if (hasState(CardStateName.RightSplit)) { + shares |= name.equals(getState(CardStateName.RightSplit).getName()); + } + } + // TODO does it need extra check for stack? } if (!shares && hasNonLegendaryCreatureNames()) { @@ -6637,7 +6667,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr if (plotted == true && !isLKI()) { final Map runParams = AbilityKey.mapFromCard(this); game.getTriggerHandler().runTrigger(TriggerType.BecomesPlotted, runParams, false); - } + } return true; } @@ -7476,6 +7506,15 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr } } + if (isInPlay() && !isPhasedOut() && player.canCastSorcery()) { + if (getCurrentStateName() == CardStateName.RightSplit || getCurrentStateName() == CardStateName.EmptyRoom) { + abilities.add(getUnlockAbility(CardStateName.LeftSplit)); + } + if (getCurrentStateName() == CardStateName.LeftSplit || getCurrentStateName() == CardStateName.EmptyRoom) { + abilities.add(getUnlockAbility(CardStateName.RightSplit)); + } + } + if (isInPlay() && isFaceDown() && oState.getType().isCreature() && oState.getManaCost() != null && !oState.getManaCost().isNoCost()) { if (isManifested()) { @@ -7715,12 +7754,6 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr } } - public void forceTurnFaceUp() { - getGame().getTriggerHandler().suppressMode(TriggerType.TurnFaceUp); - turnFaceUp(false, null); - getGame().getTriggerHandler().clearSuppression(TriggerType.TurnFaceUp); - } - public final void addGoad(Long timestamp, final Player p) { goad.put(timestamp, p); updateAbilityTextForView(); @@ -8083,4 +8116,107 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr } return StaticAbilityWitherDamage.isWitherDamage(this); } + + public Set getUnlockedRooms() { + return this.unlockedRooms; + } + public void setUnlockedRooms(Set set) { + this.unlockedRooms = set; + } + + public List getUnlockedRoomNames() { + List result = Lists.newArrayList(); + for (CardStateName stateName : unlockedRooms) { + if (this.hasState(stateName)) { + result.add(this.getState(stateName).getName()); + } + } + return result; + } + + public Set getLockedRooms() { + Set result = Sets.newHashSet(CardStateName.LeftSplit, CardStateName.RightSplit); + result.removeAll(this.unlockedRooms); + return result; + } + + public List getLockedRoomNames() { + List result = Lists.newArrayList(); + for (CardStateName stateName : getLockedRooms()) { + if (this.hasState(stateName)) { + result.add(this.getState(stateName).getName()); + } + } + return result; + } + + public boolean unlockRoom(Player p, CardStateName stateName) { + if (unlockedRooms.contains(stateName) || (stateName != CardStateName.LeftSplit && stateName != CardStateName.RightSplit)) { + return false; + } + unlockedRooms.add(stateName); + + updateRooms(); + + Map unlockParams = AbilityKey.mapFromPlayer(p); + unlockParams.put(AbilityKey.Card, this); + unlockParams.put(AbilityKey.CardState, getState(stateName)); + getGame().getTriggerHandler().runTrigger(TriggerType.UnlockDoor, unlockParams, true); + + // fully unlock + if (unlockedRooms.size() > 1) { + Map fullyUnlockParams = AbilityKey.mapFromPlayer(p); + fullyUnlockParams.put(AbilityKey.Card, this); + + getGame().getTriggerHandler().runTrigger(TriggerType.FullyUnlock, fullyUnlockParams, true); + } + + return true; + } + + public boolean lockRoom(Player p, CardStateName stateName) { + if (!unlockedRooms.contains(stateName) || (stateName != CardStateName.LeftSplit && stateName != CardStateName.RightSplit)) { + return false; + } + unlockedRooms.remove(stateName); + + updateRooms(); + + return true; + } + + public void updateRooms() { + if (!this.isRoom()) { + return; + } + if (this.isFaceDown()) { + return; + } + if (unlockedRooms.isEmpty()) { + this.setState(CardStateName.EmptyRoom, true); + } else if (unlockedRooms.size() > 1) { + this.setState(CardStateName.Original, true); + } else { // we already know the set is only one + for (CardStateName name : unlockedRooms) { + this.setState(name, true); + } + } + // update trigger after state change + getGame().getTriggerHandler().clearActiveTriggers(this, null); + getGame().getTriggerHandler().registerActiveTrigger(this, false); + } + + public CardState getEmptyRoomState() { + if (!states.containsKey(CardStateName.EmptyRoom)) { + states.put(CardStateName.EmptyRoom, CardUtil.getEmptyRoomCharacteristic(this)); + } + return states.get(CardStateName.EmptyRoom); + } + + public SpellAbility getUnlockAbility(CardStateName state) { + if (!unlockAbilities.containsKey(state)) { + unlockAbilities.put(state, CardFactoryUtil.abilityUnlockRoom(getState(state))); + } + return unlockAbilities.get(state); + } } diff --git a/forge-game/src/main/java/forge/game/card/CardFactory.java b/forge-game/src/main/java/forge/game/card/CardFactory.java index 45891ffedf3..577fef1e184 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactory.java +++ b/forge-game/src/main/java/forge/game/card/CardFactory.java @@ -258,6 +258,16 @@ public class CardFactory { final CardState original = card.getState(CardStateName.Original); original.addNonManaAbilities(card.getCurrentState().getNonManaAbilities()); original.addIntrinsicKeywords(card.getCurrentState().getIntrinsicKeywords()); // Copy 'Fuse' to original side + for (Trigger t : card.getCurrentState().getTriggers()) { + if (t.isIntrinsic()) { + original.addTrigger(t.copy(card, false)); + } + } + for (StaticAbility st : card.getCurrentState().getStaticAbilities()) { + if (st.isIntrinsic()) { + original.addStaticAbility(st.copy(card, false)); + } + } original.getSVars().putAll(card.getCurrentState().getSVars()); // Unfortunately need to copy these to (Effect looks for sVars on execute) } else if (state != CardStateName.Original) { CardFactoryUtil.setupKeywordedAbilities(card); @@ -415,7 +425,11 @@ public class CardFactory { c.setAttractionLights(face.getAttractionLights()); // SpellPermanent only for Original State - if (c.getCurrentStateName() == CardStateName.Original || c.getCurrentStateName() == CardStateName.Modal || c.getCurrentStateName().toString().startsWith("Specialize")) { + if (c.getCurrentStateName() == CardStateName.Original || + c.getCurrentStateName() == CardStateName.LeftSplit || + c.getCurrentStateName() == CardStateName.RightSplit || + c.getCurrentStateName() == CardStateName.Modal || + c.getCurrentStateName().toString().startsWith("Specialize")) { if (c.isLand()) { SpellAbility sa = new LandAbility(c); sa.setCardState(c.getCurrentState()); 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 ecb07b2b39b..1eee35c287a 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -119,6 +119,12 @@ public class CardFactoryUtil { return morphDown; } + public static SpellAbility abilityUnlockRoom(CardState cardState) { + String unlockStr = "ST$ UnlockDoor | Cost$ " + cardState.getManaCost().getShortString() + " | Unlock$ True | SpellDescription$ Unlock " + cardState.getName(); + + return AbilityFactory.getAbility(unlockStr, cardState); + } + /** *

* abilityMorphUp. diff --git a/forge-game/src/main/java/forge/game/card/CardUtil.java b/forge-game/src/main/java/forge/game/card/CardUtil.java index 3a9f4ee4314..3b85d955e93 100644 --- a/forge-game/src/main/java/forge/game/card/CardUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardUtil.java @@ -215,6 +215,24 @@ public final class CardUtil { return ret; } + public static CardState getEmptyRoomCharacteristic(Card c) { + return getEmptyRoomCharacteristic(c, CardStateName.EmptyRoom); + } + public static CardState getEmptyRoomCharacteristic(Card c, CardStateName state) { + final CardType type = new CardType(false); + type.add("Enchantment"); + type.add("Room"); + final CardState ret = new CardState(c, state); + + ret.setName(""); + ret.setType(type); + + // find new image key for empty room + ret.setImageKey(c.getImageKey()); + + return ret; + } + // a nice entry point with minimum parameters public static Set getReflectableManaColors(final SpellAbility sa) { return getReflectableManaColors(sa, sa, Sets.newHashSet(), new CardCollection()); diff --git a/forge-game/src/main/java/forge/game/card/CardView.java b/forge-game/src/main/java/forge/game/card/CardView.java index 79d180e7a3a..d93472e6a53 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -1,6 +1,7 @@ package forge.game.card; import com.google.common.collect.Iterables; +import com.google.common.collect.Maps; import com.google.common.collect.Sets; import forge.ImageKeys; import forge.StaticData; @@ -40,6 +41,14 @@ public class CardView extends GameEntityView { return s == null ? null : s.getView(); } + public static Map getStateMap(Iterable states) { + Map stateViewCache = Maps.newLinkedHashMap(); + for (CardState state : states) { + stateViewCache.put(state.getView(), state); + } + return stateViewCache; + } + public CardView getBackup() { if (get(TrackableProperty.PaperCardBackup) == null) return null; @@ -795,7 +804,7 @@ public class CardView extends GameEntityView { sb.append(getOwner().getCommanderInfo(this)).append("\r\n"); } - if (isSplitCard() && !isFaceDown() && getZone() != ZoneType.Stack) { + if (isSplitCard() && !isFaceDown() && getZone() != ZoneType.Stack && getZone() != ZoneType.Battlefield) { sb.append("(").append(getLeftSplitState().getName()).append(") "); sb.append(getLeftSplitState().getAbilityText()); sb.append("\r\n\r\n").append("(").append(getRightSplitState().getName()).append(") "); @@ -1183,6 +1192,11 @@ public class CardView extends GameEntityView { return StringUtils.EMPTY; } + @Override + public int hashCode() { + return Objects.hash(getId(), state); + } + @Override public String toString() { return (getName() + " (" + getDisplayId() + ")").trim(); diff --git a/forge-game/src/main/java/forge/game/combat/Combat.java b/forge-game/src/main/java/forge/game/combat/Combat.java index ed2a2f466d9..97b5e556680 100644 --- a/forge-game/src/main/java/forge/game/combat/Combat.java +++ b/forge-game/src/main/java/forge/game/combat/Combat.java @@ -626,7 +626,7 @@ public class Combat { } public final boolean removeAbsentCombatants() { - // iterate all attackers and remove illegal declarations + // CR 506.4 iterate all attackers and remove illegal declarations CardCollection missingCombatants = new CardCollection(); for (Entry ee : attackedByBands.entries()) { for (Card c : ee.getValue().getAttackers()) { @@ -634,6 +634,12 @@ public class Combat { missingCombatants.add(c); } } + if (ee.getKey() instanceof Card) { + Card c = (Card) ee.getKey(); + if (!c.isBattle() && !c.isPlaneswalker()) { + missingCombatants.add(c); + } + } } for (Entry be : blockedBands.entries()) { 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 13815bbfd45..b8b65ff8dc4 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -64,6 +64,8 @@ import org.apache.commons.lang3.tuple.Pair; import java.util.*; import java.util.Map.Entry; import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; /** *

@@ -3954,4 +3956,12 @@ public class Player extends GameEntity implements Comparable { Map.Entry e = declaresBlockers.lastEntry(); return e == null ? null : e.getValue(); } + + public List getUnlockedDoors() { + return StreamSupport.stream(getCardsIn(ZoneType.Battlefield).spliterator(), false) + .filter(Card::isRoom) + .map(Card::getUnlockedRoomNames) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + } } diff --git a/forge-game/src/main/java/forge/game/player/PlayerController.java b/forge-game/src/main/java/forge/game/player/PlayerController.java index 077d6c00196..909eb117925 100644 --- a/forge-game/src/main/java/forge/game/player/PlayerController.java +++ b/forge-game/src/main/java/forge/game/player/PlayerController.java @@ -243,6 +243,8 @@ public abstract class PlayerController { public abstract byte chooseColorAllowColorless(String message, Card c, ColorSet colors); public abstract ICardFace chooseSingleCardFace(SpellAbility sa, String message, Predicate cpp, String name); + public abstract ICardFace chooseSingleCardFace(SpellAbility sa, List faces, String message); + public abstract CardState chooseSingleCardState(SpellAbility sa, List states, String message, Map params); public abstract List chooseColors(String message, SpellAbility sa, int min, int max, List options); public abstract CounterType chooseCounterType(List options, SpellAbility sa, String prompt, Map params); diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java index 3fd91a5f9b5..43781bb594d 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java @@ -583,7 +583,6 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit public ApiType getApi() { return api; } - public void setApi(ApiType apiType) { api = apiType; } diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java b/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java index c940e25f161..82503e54189 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java @@ -38,7 +38,6 @@ import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbilityStackInstance; import forge.game.spellability.TargetChoices; -import forge.game.zone.ZoneType; import forge.util.Expressions; import forge.util.Localizer; import forge.util.collect.FCollection; @@ -229,23 +228,6 @@ public class TriggerSpellAbilityCastOrCopy extends Trigger { } } - if (hasParam("SharesNameWithActivatorsZone")) { - String zones = getParam("SharesNameWithActivatorsZone"); - if (si == null) { - return false; - } - boolean sameNameFound = false; - for (Card c: si.getSpellAbility().getActivatingPlayer().getCardsIn(ZoneType.listValueOf(zones))) { - if (cast.getName().equals(c.getName())) { - sameNameFound = true; - break; - } - } - if (!sameNameFound) { - return false; - } - } - if (hasParam("NoColoredMana")) { for (Mana m : spellAbility.getPayingMana()) { if (!m.isColorless()) { diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerType.java b/forge-game/src/main/java/forge/game/trigger/TriggerType.java index 2db1f4c9d77..0ec832a4277 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerType.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerType.java @@ -144,6 +144,7 @@ public enum TriggerType { TurnBegin(TriggerTurnBegin.class), TurnFaceUp(TriggerTurnFaceUp.class), Unattach(TriggerUnattach.class), + UnlockDoor(TriggerUnlockDoor.class), UntapAll(TriggerUntapAll.class), Untaps(TriggerUntaps.class), VisitAttraction(TriggerVisitAttraction.class), diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerUnlockDoor.java b/forge-game/src/main/java/forge/game/trigger/TriggerUnlockDoor.java new file mode 100644 index 00000000000..9aa90973b91 --- /dev/null +++ b/forge-game/src/main/java/forge/game/trigger/TriggerUnlockDoor.java @@ -0,0 +1,55 @@ +package forge.game.trigger; + +import java.util.Map; + +import forge.game.ability.AbilityKey; +import forge.game.card.Card; +import forge.game.card.CardState; +import forge.game.spellability.SpellAbility; +import forge.util.Localizer; + +public class TriggerUnlockDoor extends Trigger { + + public TriggerUnlockDoor(final Map params, final Card host, final boolean intrinsic) { + super(params, host, intrinsic); + } + + @Override + public boolean performTest(Map runParams) { + if (!matchesValidParam("ValidCard", runParams.get(AbilityKey.Card))) { + return false; + } + + if (!matchesValidParam("ValidPlayer", runParams.get(AbilityKey.Player))) { + return false; + } + + if (hasParam("ThisDoor")) { + CardState state = (CardState) runParams.get(AbilityKey.CardState); + // This Card + if (!getHostCard().equals(state.getCard())) { + return false; + } + // This Face + if (!getCardStateName().equals(state.getStateName())) { + return false; + } + } + + return true; + } + + @Override + public void setTriggeringObjects(SpellAbility sa, Map runParams) { + sa.setTriggeringObjectsFrom(runParams, AbilityKey.Card, AbilityKey.Player); + } + + @Override + public String getImportantStackObjects(SpellAbility sa) { + StringBuilder sb = new StringBuilder(); + sb.append(Localizer.getInstance().getMessage("lblPlayer")).append(": ").append(sa.getTriggeringObject(AbilityKey.Player)); + sb.append(", ").append(Localizer.getInstance().getMessage("lblCard")).append(": ").append(sa.getTriggeringObject(AbilityKey.Card)); + return sb.toString(); + } + +} diff --git a/forge-game/src/main/java/forge/trackable/TrackableObject.java b/forge-game/src/main/java/forge/trackable/TrackableObject.java index 280fe24d3d0..ac5d2729102 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableObject.java +++ b/forge-game/src/main/java/forge/trackable/TrackableObject.java @@ -47,7 +47,7 @@ public abstract class TrackableObject implements IIdentifiable, Serializable { @Override public final boolean equals(final Object o) { if (o == null) { return false; } - return o.hashCode() == id && o.getClass().equals(getClass()); + return o.hashCode() == hashCode() && o.getClass().equals(getClass()); } // don't know if this is really needed, but don't know a better way diff --git a/forge-gui-desktop/src/main/java/forge/gui/CardDetailPanel.java b/forge-gui-desktop/src/main/java/forge/gui/CardDetailPanel.java index 3bc4ecd7831..87fa9628d2e 100644 --- a/forge-gui-desktop/src/main/java/forge/gui/CardDetailPanel.java +++ b/forge-gui-desktop/src/main/java/forge/gui/CardDetailPanel.java @@ -198,7 +198,7 @@ public class CardDetailPanel extends SkinnedPanel { nameCost = name; } else { final String manaCost; - if (card.isSplitCard() && card.hasAlternateState() && !card.isFaceDown() && card.getZone() != ZoneType.Stack) { //only display current state's mana cost when on stack + if (card.isSplitCard() && card.hasAlternateState() && !card.isFaceDown() && card.getZone() != ZoneType.Stack && card.getZone() != ZoneType.Battlefield) { //only display current state's mana cost when on stack manaCost = card.getLeftSplitState().getManaCost() + " // " + card.getAlternateState().getManaCost(); } else { manaCost = state.getManaCost().toString(); diff --git a/forge-gui-desktop/src/main/java/forge/toolbox/imaging/FCardImageRenderer.java b/forge-gui-desktop/src/main/java/forge/toolbox/imaging/FCardImageRenderer.java index 911444b6be7..4b6fb7c1070 100644 --- a/forge-gui-desktop/src/main/java/forge/toolbox/imaging/FCardImageRenderer.java +++ b/forge-gui-desktop/src/main/java/forge/toolbox/imaging/FCardImageRenderer.java @@ -23,6 +23,7 @@ import java.util.regex.Pattern; import org.apache.commons.lang3.StringUtils; import forge.card.CardRarity; +import forge.card.CardStateName; import forge.card.mana.ManaCost; import forge.game.card.CardView; import forge.game.card.CardView.CardStateView; @@ -749,8 +750,11 @@ public class FCardImageRenderer { //draw type x += padding; w -= padding; - String typeLine = CardDetailUtil.formatCardType(state, true).replace(" - ", " — "); - drawVerticallyCenteredString(g, typeLine, new Rectangle(x, y, w, h), TYPE_FONT, TYPE_SIZE); + // check for shared type line + if (!state.getType().hasStringType("Room") || state.getState() != CardStateName.RightSplit) { + String typeLine = CardDetailUtil.formatCardType(state, true).replace(" - ", " — "); + drawVerticallyCenteredString(g, typeLine, new Rectangle(x, y, w, h), TYPE_FONT, TYPE_SIZE); + } } /** diff --git a/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java b/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java index 1adec86dd36..ebd255203b8 100644 --- a/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java +++ b/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java @@ -479,12 +479,15 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl private void displayIconOverlay(final Graphics g, final boolean canShow) { if (canShow && showCardManaCostOverlay() && cardWidth < 200) { - final boolean showSplitMana = card.isSplitCard(); + final boolean showSplitMana = card.isSplitCard() && card.getZone() != ZoneType.Battlefield; if (!showSplitMana) { drawManaCost(g, card.getCurrentState().getManaCost(), 0); } else { if (!card.isFaceDown()) { // no need to draw mana symbols on face down split cards (e.g. manifested) - PaperCard pc = StaticData.instance().getCommonCards().getCard(card.getName()); + PaperCard pc = null; + if (!card.getName().isEmpty()) { + pc = StaticData.instance().getCommonCards().getCard(card.getName()); + } int ofs = pc != null && Card.getCardForUi(pc).hasKeyword(Keyword.AFTERMATH) ? -12 : 12; drawManaCost(g, card.getLeftSplitState().getManaCost(), ofs); diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java index eb44cca1733..46ed3502a92 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java @@ -727,6 +727,18 @@ public class PlayerControllerForTests extends PlayerController { return null; } + @Override + public ICardFace chooseSingleCardFace(SpellAbility sa, List faces, String message) { + // TODO Auto-generated method stub + return null; + } + + @Override + public CardState chooseSingleCardState(SpellAbility sa, List states, String message, Map params) { + // TODO Auto-generated method stub + return null; + } + @Override public Card chooseDungeon(Player player, List dungeonCards, String message) { // TODO Auto-generated method stub diff --git a/forge-gui-mobile/src/forge/card/CardImageRenderer.java b/forge-gui-mobile/src/forge/card/CardImageRenderer.java index f689f2eb570..542b9bd2323 100644 --- a/forge-gui-mobile/src/forge/card/CardImageRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardImageRenderer.java @@ -278,7 +278,7 @@ public class CardImageRenderer { if (!noText && state != null) { //draw mana cost for card ManaCost mainManaCost = state.getManaCost(); - if (card.isSplitCard() && card.getAlternateState() != null) { + if (card.isSplitCard() && card.getAlternateState() != null && !card.isFaceDown() && card.getZone() != ZoneType.Stack && card.getZone() != ZoneType.Battlefield) { //handle rendering both parts of split card mainManaCost = card.getLeftSplitState().getManaCost(); ManaCost otherManaCost = card.getRightSplitState().getManaCost(); @@ -1117,7 +1117,7 @@ public class CardImageRenderer { float manaCostWidth = 0; if (canShow) { ManaCost mainManaCost = state.getManaCost(); - if (card.isSplitCard() && card.hasAlternateState() && !card.isFaceDown() && card.getZone() != ZoneType.Stack) { //only display current state's mana cost when on stack + if (card.isSplitCard() && card.hasAlternateState() && !card.isFaceDown() && card.getZone() != ZoneType.Stack && card.getZone() != ZoneType.Battlefield) { //only display current state's mana cost when on stack //handle rendering both parts of split card mainManaCost = card.getLeftSplitState().getManaCost(); ManaCost otherManaCost = card.getAlternateState().getManaCost(); diff --git a/forge-gui-mobile/src/forge/card/CardRenderer.java b/forge-gui-mobile/src/forge/card/CardRenderer.java index 8e2be4a410b..ce4eeafd841 100644 --- a/forge-gui-mobile/src/forge/card/CardRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardRenderer.java @@ -854,19 +854,17 @@ public class CardRenderer { } if (showCardManaCostOverlay(card)) { float manaSymbolSize = w / 4.5f; - if (card.isSplitCard() && card.hasAlternateState()) { - if (!card.isFaceDown()) { // no need to draw mana symbols on face down split cards (e.g. manifested) - if (isChoiceList) { - if (card.getRightSplitState().getName().equals(details.getName())) - drawManaCost(g, card.getRightSplitState().getManaCost(), x - padding, y, w + 2 * padding, h, manaSymbolSize); - else - drawManaCost(g, card.getLeftSplitState().getManaCost(), x - padding, y, w + 2 * padding, h, manaSymbolSize); - } else { - ManaCost leftManaCost = card.getLeftSplitState().getManaCost(); - ManaCost rightManaCost = card.getRightSplitState().getManaCost(); - drawManaCost(g, leftManaCost, x - padding, y-(manaSymbolSize/1.5f), w + 2 * padding, h, manaSymbolSize); - drawManaCost(g, rightManaCost, x - padding, y+(manaSymbolSize/1.5f), w + 2 * padding, h, manaSymbolSize); - } + if (card.isSplitCard() && card.hasAlternateState() && !card.isFaceDown() && card.getZone() != ZoneType.Stack && card.getZone() != ZoneType.Battlefield) { + if (isChoiceList) { + if (card.getRightSplitState().getName().equals(details.getName())) + drawManaCost(g, card.getRightSplitState().getManaCost(), x - padding, y, w + 2 * padding, h, manaSymbolSize); + else + drawManaCost(g, card.getLeftSplitState().getManaCost(), x - padding, y, w + 2 * padding, h, manaSymbolSize); + } else { + ManaCost leftManaCost = card.getLeftSplitState().getManaCost(); + ManaCost rightManaCost = card.getRightSplitState().getManaCost(); + drawManaCost(g, leftManaCost, x - padding, y-(manaSymbolSize/1.5f), w + 2 * padding, h, manaSymbolSize); + drawManaCost(g, rightManaCost, x - padding, y+(manaSymbolSize/1.5f), w + 2 * padding, h, manaSymbolSize); } } else { drawManaCost(g, showAltState ? card.getAlternateState().getManaCost() : card.getCurrentState().getManaCost(), x - padding, y, w + 2 * padding, h, manaSymbolSize); diff --git a/forge-gui/res/cardsfolder/a/abstruse_appropriation.txt b/forge-gui/res/cardsfolder/a/abstruse_appropriation.txt index 248b9e1535a..0dc20d03aae 100644 --- a/forge-gui/res/cardsfolder/a/abstruse_appropriation.txt +++ b/forge-gui/res/cardsfolder/a/abstruse_appropriation.txt @@ -4,7 +4,7 @@ Types:Instant K:Devoid A:SP$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Permanent.nonLand | RememberChanged$ True | TgtPromt$ Select target nonland permanent | SubAbility$ DBEffect | SpellDescription$ Exile target nonland permanent. SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ MayPlay,ManaConvert | SubAbility$ DBCleanup | Duration$ Permanent | ForgetOnMoved$ Exile | SpellDescription$ You may cast that card for as long as it remains exiled, and you may spend colorless mana as though it were mana of any color to cast that spell. -SVar:MayPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered+nonLand | AffectedZone$ Exile | Description$ You may cast that card for as long as it remains exiled +SVar:MayPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered+nonLand | AffectedZone$ Exile | Description$ You may cast that card for as long as it remains exiled. SVar:ManaConvert:Mode$ ManaConvert | ValidPlayer$ You | ValidCard$ Card.IsRemembered | ValidSA$ Spell.MayPlaySource | ManaConversion$ C->AnyColor | AffectedZone$ Exile | Description$ You may spend colorless mana as though it were mana of any color to cast that spell. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:Devoid\nExile target nonland permanent. You may cast that card for as long as it remains exiled, and you may spend colorless mana as though it were mana of any color to cast that spell. diff --git a/forge-gui/res/cardsfolder/a/aether_searcher.txt b/forge-gui/res/cardsfolder/a/aether_searcher.txt index cad608dbb8a..04bbbf04bd4 100644 --- a/forge-gui/res/cardsfolder/a/aether_searcher.txt +++ b/forge-gui/res/cardsfolder/a/aether_searcher.txt @@ -6,10 +6,10 @@ Draft:Reveal CARDNAME as you draft it. Draft:Reveal the next card you draft and note its name. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSearchHand | TriggerDescription$ When CARDNAME enters, you may search your hand and/or library for a card with a name noted as you drafted cards named Aether Searcher. You may cast it without paying its mana cost. If you searched your library this way, shuffle. SVar:TrigSearchHand:DB$ ChangeZone | Origin$ Hand | Destination$ Hand | ChangeType$ Card.NotedNameAetherSearcher | ChangeNum$ 1 | RememberChanged$ True | SubAbility$ TrigBranch -# Branch to casting the found spell +# Branch to cast that card from hand SVar:TrigBranch:DB$ Branch | BranchConditionSVar$ X | BranchConditionSVarCompare$ EQ1 | TrueSubAbility$ CastFromHand | FalseSubAbility$ SearchLibrary SVar:CastFromHand:DB$ Play | ValidZone$ Hand | Valid$ Card.IsRemembered | Controller$ You | WithoutManaCost$ True | Optional$ True | SubAbility$ DBCleanup -# Or search the library +# Branch to search the library and cast that card SVar:SearchLibrary:DB$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Card.NotedNameAetherSearcher | ChangeNum$ 1 | RememberChanged$ True | SubAbility$ CastFromLibrary SVar:CastFromLibrary:DB$ Play | ValidZone$ Library | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 | Valid$ Card.IsRemembered | Controller$ You | WithoutManaCost$ True | Optional$ True | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/a/afflicted_deserter_werewolf_ransacker.txt b/forge-gui/res/cardsfolder/a/afflicted_deserter_werewolf_ransacker.txt index fac0da9d041..296e97d00b2 100644 --- a/forge-gui/res/cardsfolder/a/afflicted_deserter_werewolf_ransacker.txt +++ b/forge-gui/res/cardsfolder/a/afflicted_deserter_werewolf_ransacker.txt @@ -14,7 +14,7 @@ ManaCost:no cost Colors:red Types:Creature Werewolf PT:5/4 -T:Mode$ Transformed | ValidCard$ Card.Self | Execute$ TrigDestroy | OptionalDecider$ You | TriggerDescription$ Whenever this creature transforms into CARDNAME, you may destroy target artifact. If that artifact is put into a graveyard this way, CARDNAME deals 3 damage to that artifact's controller +T:Mode$ Transformed | ValidCard$ Card.Self | Execute$ TrigDestroy | OptionalDecider$ You | TriggerDescription$ Whenever this creature transforms into CARDNAME, you may destroy target artifact. If that artifact is put into a graveyard this way, CARDNAME deals 3 damage to that artifact's controller. SVar:TrigDestroy:DB$ Destroy | ValidTgts$ Artifact | TgtPrompt$ Select target artifact. | RememberTargets$ True | ForgetOtherTargets$ True | SubAbility$ DBDamage SVar:DBDamage:DB$ DealDamage | Defined$ TargetedController | NumDmg$ 3 | SubAbility$ DBCleanup | ConditionCheckSVar$ IsDestroyed | ConditionSVarCompare$ GE1 SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/a/agency_outfitter.txt b/forge-gui/res/cardsfolder/a/agency_outfitter.txt index dd054968eff..08ae6a4c2ef 100644 --- a/forge-gui/res/cardsfolder/a/agency_outfitter.txt +++ b/forge-gui/res/cardsfolder/a/agency_outfitter.txt @@ -5,6 +5,6 @@ PT:4/3 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSearch | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, you may search your graveyard, hand, and/or library for a card named Magnifying Glass and/or a card named Thinking Cap and put them onto the battlefield. If you search your library this way, shuffle. SVar:TrigSearch:DB$ ChangeZone | OriginAlternative$ Graveyard,Hand | Hidden$ True | Origin$ Library | Destination$ Battlefield | DifferentNames$ True | ChangeType$ Card.namedMagnifying Glass,Card.namedThinking Cap | ChangeNum$ 2 | ShuffleNonMandatory$ True -DeckHas:Ability$Artifact|Equipment +DeckHas:Ability$Graveyard DeckHints:Name$Thinking Cap|Magnifying Glass Oracle:Flying\nWhen Agency Outfitter enters, you may search your graveyard, hand, and/or library for a card named Magnifying Glass and/or a card named Thinking Cap and put them onto the battlefield. If you search your library this way, shuffle. diff --git a/forge-gui/res/cardsfolder/a/aggressive_instinct.txt b/forge-gui/res/cardsfolder/a/aggressive_instinct.txt index f0d3cd231de..1f4562bb81e 100644 --- a/forge-gui/res/cardsfolder/a/aggressive_instinct.txt +++ b/forge-gui/res/cardsfolder/a/aggressive_instinct.txt @@ -1,7 +1,7 @@ Name:Aggressive Instinct ManaCost:1 G Types:Sorcery -A:SP$ Pump | ValidTgts$ Creature.YouCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you control | SubAbility$ SoulsDamage | StackDescription$ None | SpellDescription$ Target creature you control deals damage equal to its power to target creature you don't control +A:SP$ Pump | ValidTgts$ Creature.YouCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you control | SubAbility$ SoulsDamage | StackDescription$ None | SpellDescription$ Target creature you control deals damage equal to its power to target creature you don't control. SVar:SoulsDamage:DB$ DealDamage | ValidTgts$ Creature.YouDontCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you don't control | NumDmg$ X | DamageSource$ ParentTarget SVar:X:ParentTargeted$CardPower Oracle:Target creature you control deals damage equal to its power to target creature you don't control. diff --git a/forge-gui/res/cardsfolder/a/aid_the_fallen.txt b/forge-gui/res/cardsfolder/a/aid_the_fallen.txt index a476f84fb1d..6f4b6a55378 100644 --- a/forge-gui/res/cardsfolder/a/aid_the_fallen.txt +++ b/forge-gui/res/cardsfolder/a/aid_the_fallen.txt @@ -2,6 +2,6 @@ Name:Aid the Fallen ManaCost:1 B Types:Sorcery A:SP$ Charm | MinCharmNum$ 1 | CharmNum$ 2 | Choices$ DBCreature,DBPlaneswalker -SVar:DBCreature:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature in your graveyard | SpellDescription$ Return target creature card from your graveyard to your hand -SVar:DBPlaneswalker:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Planeswalker.YouCtrl | TgtPrompt$ Select target planeswalker in your graveyard | SpellDescription$ Return target planeswalker card from your graveyard to your hand +SVar:DBCreature:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature in your graveyard | SpellDescription$ Return target creature card from your graveyard to your hand. +SVar:DBPlaneswalker:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Planeswalker.YouCtrl | TgtPrompt$ Select target planeswalker in your graveyard | SpellDescription$ Return target planeswalker card from your graveyard to your hand. Oracle:Choose one or both —\n• Return target creature card from your graveyard to your hand.\n• Return target planeswalker card from your graveyard to your hand. diff --git a/forge-gui/res/cardsfolder/a/albiorix_goose_tyrant_wild_goose_chase.txt b/forge-gui/res/cardsfolder/a/albiorix_goose_tyrant_wild_goose_chase.txt index 5ac9a1e4e4e..5278f8f020a 100644 --- a/forge-gui/res/cardsfolder/a/albiorix_goose_tyrant_wild_goose_chase.txt +++ b/forge-gui/res/cardsfolder/a/albiorix_goose_tyrant_wild_goose_chase.txt @@ -17,7 +17,7 @@ ALTERNATE Name:Wild Goose Chase ManaCost:U G Types:Instant Adventure -A:SP$ Draw | Defined$ You | NumCards$ 2 | SubAbility$ TrigDiscard | SpellDescription$ Draw two cards, then discard two cards +A:SP$ Draw | Defined$ You | NumCards$ 2 | SubAbility$ TrigDiscard | SpellDescription$ Draw two cards, then discard two cards. SVar:TrigDiscard:DB$ Discard | Defined$ You | NumCards$ 2 | Mode$ TgtChoose | SubAbility$ DBToken SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_food_sac | TokenOwner$ You | SpellDescription$ Create a Food token. Oracle:Draw two cards, then discard two cards. Create a Food token. diff --git a/forge-gui/res/cardsfolder/a/all_will_be_one.txt b/forge-gui/res/cardsfolder/a/all_will_be_one.txt index ead9e205ec6..55f8ab8d425 100644 --- a/forge-gui/res/cardsfolder/a/all_will_be_one.txt +++ b/forge-gui/res/cardsfolder/a/all_will_be_one.txt @@ -1,7 +1,7 @@ Name:All Will Be One ManaCost:3 R R Types:Enchantment -T:Mode$ CounterPlayerAddedAll | ValidObject$ Permanent.inRealZoneBattlefield,Player | TriggerZones$ Battlefield | ValidSource$ You | Execute$ TrigDamage | TriggerDescription$ Whenever you put one or more counters on a permanent or player, CARDNAME deals that much damage to target opponent, creature an opponent controls, or planeswalker an opponent controls +T:Mode$ CounterPlayerAddedAll | ValidObject$ Permanent.inRealZoneBattlefield,Player | TriggerZones$ Battlefield | ValidSource$ You | Execute$ TrigDamage | TriggerDescription$ Whenever you put one or more counters on a permanent or player, CARDNAME deals that much damage to target opponent, creature an opponent controls, or planeswalker an opponent controls. SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature.OppCtrl,Planeswalker.OppCtrl,Opponent | TgtPrompt$ Select target opponent, creature an opponent controls, or planeswalker an opponent controls. | NumDmg$ X SVar:X:TriggerCount$Amount DeckNeeds:Ability$Counters diff --git a/forge-gui/res/cardsfolder/a/alrund_god_of_the_cosmos_hakka_whispering_raven.txt b/forge-gui/res/cardsfolder/a/alrund_god_of_the_cosmos_hakka_whispering_raven.txt index afe2ec35392..fe75a4210c0 100644 --- a/forge-gui/res/cardsfolder/a/alrund_god_of_the_cosmos_hakka_whispering_raven.txt +++ b/forge-gui/res/cardsfolder/a/alrund_god_of_the_cosmos_hakka_whispering_raven.txt @@ -9,7 +9,7 @@ SVar:Z:SVar$X/Plus.Y T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigChooseCardType | TriggerDescription$ At the beginning of your end step, choose a card type, then reveal the top two cards of your library. Put all cards of the chosen type revealed this way into your hand and the rest on the bottom of your library in any order. SVar:TrigChooseCardType:DB$ ChooseType | Defined$ You | Type$ Card | SubAbility$ DBDig SVar:DBDig:DB$ Dig | DigNum$ 2 | Reveal$ True | ChangeNum$ All | ChangeValid$ Card.ChosenType | DestinationZone2$ Library | LibraryPosition$ -1 -DeckHints:Ability$Foretell +DeckHints:Keyword$Foretell AI:RemoveDeck:All AlternateMode:Modal Oracle:Alrund gets +1/+1 for each card in your hand and each foretold card you own in exile.\nAt the beginning of your end step, choose a card type, then reveal the top two cards of your library. Put all cards of the chosen type revealed this way into your hand and the rest on the bottom of your library in any order. diff --git a/forge-gui/res/cardsfolder/a/archdemon_of_paliano.txt b/forge-gui/res/cardsfolder/a/archdemon_of_paliano.txt index 1a5e66f624b..20631a191a4 100644 --- a/forge-gui/res/cardsfolder/a/archdemon_of_paliano.txt +++ b/forge-gui/res/cardsfolder/a/archdemon_of_paliano.txt @@ -5,4 +5,4 @@ PT:5/4 Draft:Draft CARDNAME face up. Draft:As long as CARDNAME is face up during the draft, you can't look at booster packs and must draft cards at random. After you draft three cards this way, turn CARDNAME face down. (You may look at cards as you draft them.) K:Flying -Oracle:Draft Archdemon of Paliano face up.\n\nAs long as Archdemon of Paliano is face up during the draft, you can't look at booster packs and must draft cards at random. After you draft three cards this way, turn Archdemon of Paliano face down. (You may look at cards as you draft them.)\nFlying +Oracle:Draft Archdemon of Paliano face up.\nAs long as Archdemon of Paliano is face up during the draft, you can't look at booster packs and must draft cards at random. After you draft three cards this way, turn Archdemon of Paliano face down. (You may look at cards as you draft them.)\nFlying diff --git a/forge-gui/res/cardsfolder/a/argothian_uprooting.txt b/forge-gui/res/cardsfolder/a/argothian_uprooting.txt index 4f29b7ac187..dc2a73d768c 100644 --- a/forge-gui/res/cardsfolder/a/argothian_uprooting.txt +++ b/forge-gui/res/cardsfolder/a/argothian_uprooting.txt @@ -3,7 +3,7 @@ ManaCost:X G Types:Sorcery A:SP$ PutCounter | TargetMin$ 0 | TargetMax$ X | ValidTgts$ Land.YouCtrl | TgtPrompt$ Select up to X target lands you control | CounterType$ P1P1 | CounterNum$ 2 | SubAbility$ DBAnimate | SpellDescription$ Put two +1/+1 counters on each of up to X target lands you control. They each become 0/0 Elemental creatures with reach, haste, and "When this creature leaves the battlefield, conjure a card named Forest onto the battlefield tapped." They're still lands. SVar:DBAnimate:DB$ Animate | Defined$ ParentTarget | Power$ 0 | Toughness$ 0 | Types$ Creature,Elemental | Keywords$ Haste & Reach | Duration$ Permanent | Triggers$ DiesTrig -SVar:DiesTrig:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigConjure | TriggerDescription$ When this creature leaves the battlefield, conjure a card named Forest onto the battlefield tapped +SVar:DiesTrig:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigConjure | TriggerDescription$ When this creature leaves the battlefield, conjure a card named Forest onto the battlefield tapped. SVar:TrigConjure:DB$ MakeCard | Conjure$ True | Name$ Forest | Zone$ Battlefield | Tapped$ True SVar:X:Count$xPaid DeckHas:Type$Elemental & Ability$Counters diff --git a/forge-gui/res/cardsfolder/a/asinine_antics.txt b/forge-gui/res/cardsfolder/a/asinine_antics.txt index f5ff408f99a..57f71a6a66a 100644 --- a/forge-gui/res/cardsfolder/a/asinine_antics.txt +++ b/forge-gui/res/cardsfolder/a/asinine_antics.txt @@ -2,7 +2,7 @@ Name:Asinine Antics ManaCost:2 U U Types:Sorcery K:MayFlashCost:2 -A:SP$ RepeatEach | RepeatCards$ Creature.OppCtrl | Zone$ Battlefield | RepeatSubAbility$ DBToken | ChangeZoneTable$ True | SpellDescription$ For each creature your opponents control, create a Cursed Role token attached to that creature. (if you control another Role on it, put that one into the graveyard. Enchanted creature is 1/1) +A:SP$ RepeatEach | RepeatCards$ Creature.OppCtrl | Zone$ Battlefield | RepeatSubAbility$ DBToken | ChangeZoneTable$ True | SpellDescription$ For each creature your opponents control, create a Cursed Role token attached to that creature. (If you control another Role on it, put that one into the graveyard. Enchanted creature is 1/1.) SVar:DBToken:DB$ Token | TokenScript$ role_cursed | AttachedTo$ Remembered DeckHas:Type$Aura|Role & Ability$Token -Oracle:You may cast Asinine Antics as though it had flash if you pay {2} more to cast it. \nFor each creature your opponents control, create a Cursed Role token attached to that creature. (if you control another Role on it, put that one into the graveyard. Enchanted creature is 1/1) +Oracle:You may cast Asinine Antics as though it had flash if you pay {2} more to cast it. \nFor each creature your opponents control, create a Cursed Role token attached to that creature. (If you control another Role on it, put that one into the graveyard. Enchanted creature is 1/1.) diff --git a/forge-gui/res/cardsfolder/b/bane_lord_of_darkness.txt b/forge-gui/res/cardsfolder/b/bane_lord_of_darkness.txt index 6b211150ee5..a94f32b4d77 100644 --- a/forge-gui/res/cardsfolder/b/bane_lord_of_darkness.txt +++ b/forge-gui/res/cardsfolder/b/bane_lord_of_darkness.txt @@ -7,7 +7,7 @@ SVar:CurrentLife:Count$YourLifeTotal SVar:X:Count$YourStartingLife/HalfDown T:Mode$ ChangesZone | ValidCard$ Creature.nonToken+Other+YouCtrl | Origin$ Battlefield | Destination$ Graveyard | Execute$ DBAskOpponentDrawOrPlay | TriggerZones$ Battlefield | TriggerDescription$ Whenever another nontoken creature you control dies, target opponent may have you draw a card. If they don't, you may put a creature card with equal or lesser toughness from your hand onto the battlefield. SVar:DBAskOpponentDrawOrPlay:DB$ GenericChoice | ValidTgts$ Opponent | Choices$ DBDrawCard,DBCheatCreature -SVar:DBDrawCard:DB$ Draw | Defined$ You | NumCards$ 1 | SpellDescription$ Controller draws a card -SVar:DBCheatCreature:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature.toughnessLEY | ChangeNum$ 1 | SpellDescription$ Controller may put a creature card with equal or lesser toughness from your hand onto the battlefield. +SVar:DBDrawCard:DB$ Draw | Defined$ You | NumCards$ 1 | SpellDescription$ CARDNAME's controller draws a card. +SVar:DBCheatCreature:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature.toughnessLEY | ChangeNum$ 1 | SpellDescription$ CARDNAME's controller may put a creature card with equal or lesser toughness from their hand onto the battlefield. SVar:Y:TriggeredCard$CardToughness Oracle:As long as your life total is less than or equal to half your starting life total, Bane, Lord of Darkness has indestructible.\nWhenever another nontoken creature you control dies, target opponent may have you draw a card. If they don't, you may put a creature card with equal or lesser toughness from your hand onto the battlefield. diff --git a/forge-gui/res/cardsfolder/b/battershield_warrior.txt b/forge-gui/res/cardsfolder/b/battershield_warrior.txt index c13555a4c6e..8fc968961d0 100644 --- a/forge-gui/res/cardsfolder/b/battershield_warrior.txt +++ b/forge-gui/res/cardsfolder/b/battershield_warrior.txt @@ -2,5 +2,5 @@ Name:Battershield Warrior ManaCost:2 W Types:Creature Human Warrior PT:2/2 -A:AB$ PumpAll | Cost$ 1 W | ValidCards$ Creature.YouCtrl | NumAtt$ +1 | NumDef$ +1 | Boast$ True | SpellDescription$ Creatures you control get +1/+1 until end of turn +A:AB$ PumpAll | Cost$ 1 W | ValidCards$ Creature.YouCtrl | NumAtt$ +1 | NumDef$ +1 | Boast$ True | SpellDescription$ Creatures you control get +1/+1 until end of turn. Oracle:Boast — {1}{W}: Creatures you control get +1/+1 until end of turn. (Activate only if this creature attacked this turn and only once each turn.) diff --git a/forge-gui/res/cardsfolder/b/black_tulip.txt b/forge-gui/res/cardsfolder/b/black_tulip.txt index 2cd697a39b9..3d657d633e2 100644 --- a/forge-gui/res/cardsfolder/b/black_tulip.txt +++ b/forge-gui/res/cardsfolder/b/black_tulip.txt @@ -1,5 +1,5 @@ Name:Black Tulip ManaCost:0 Types:Artifact -A:AB$ Mana | Cost$ T Exile<1/CARDNAME> | Produced$ Any | Amount$ 3 | AILogic$ BlackLotus | CheckSVar$ Count$YourTurns | SVarCompare$ GE6 | SpellDescription$ Add three mana of any one color. You can't activate this ability until you've begun your sixth turn of the game (Keep track if this is in your deck!) -Oracle:{T}, Exile Black Tulip: Add three mana of any one color. You can't activate this ability until you've begun your sixth turn of the game (Keep track if this is in your deck!) +A:AB$ Mana | Cost$ T Exile<1/CARDNAME> | Produced$ Any | Amount$ 3 | AILogic$ BlackLotus | CheckSVar$ Count$YourTurns | SVarCompare$ GE6 | SpellDescription$ Add three mana of any one color. You can't activate this ability until you've begun your sixth turn of the game. (Keep track if this is in your deck!) +Oracle:{T}, Exile Black Tulip: Add three mana of any one color. You can't activate this ability until you've begun your sixth turn of the game. (Keep track if this is in your deck!) diff --git a/forge-gui/res/cardsfolder/b/boon_of_the_spirit_realm.txt b/forge-gui/res/cardsfolder/b/boon_of_the_spirit_realm.txt index 46efc20e369..655b6000a99 100644 --- a/forge-gui/res/cardsfolder/b/boon_of_the_spirit_realm.txt +++ b/forge-gui/res/cardsfolder/b/boon_of_the_spirit_realm.txt @@ -3,7 +3,7 @@ ManaCost:3 W W Types:Enchantment T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self,Enchantment.Other+YouCtrl | Execute$ TrigCounter | TriggerDescription$ Constellation — Whenever CARDNAME or another enchantment you control enters, put a blessing counter on CARDNAME. SVar:TrigCounter:DB$ PutCounter | CounterType$ BLESSING | CounterNum$ 1 -S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddPower$ X | AddToughness$ X | Description$ Creatures you control get +1/+1 for each blessing counter on CARDNAME +S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddPower$ X | AddToughness$ X | Description$ Creatures you control get +1/+1 for each blessing counter on CARDNAME. SVar:X:Count$CardCounters.BLESSING DeckHints:Type$Enchantment DeckHas:Ability$Counters diff --git a/forge-gui/res/cardsfolder/b/brainsurge.txt b/forge-gui/res/cardsfolder/b/brainsurge.txt index 68d591c459f..ed87d2379f0 100644 --- a/forge-gui/res/cardsfolder/b/brainsurge.txt +++ b/forge-gui/res/cardsfolder/b/brainsurge.txt @@ -1,6 +1,6 @@ Name:Brainsurge ManaCost:2 U Types:Instant -A:SP$ Draw | NumCards$ 4 | StackDescription$ {p:You} draws four cards, | SpellDescription$ Draw four cards, then put two cards from your hand on top of your library in any order | SubAbility$ ChangeZoneDB +A:SP$ Draw | NumCards$ 4 | StackDescription$ {p:You} draws four cards, | SpellDescription$ Draw four cards, then put two cards from your hand on top of your library in any order. | SubAbility$ ChangeZoneDB SVar:ChangeZoneDB:DB$ ChangeZone | Origin$ Hand | Destination$ Library | ChangeNum$ 2 | Mandatory$ True | Reorder$ True | StackDescription$ then puts two cards from their hand on top of their library in any order. Oracle:Draw four cards, then put two cards from your hand on top of your library in any order. diff --git a/forge-gui/res/cardsfolder/b/brawl.txt b/forge-gui/res/cardsfolder/b/brawl.txt index f7588b86db1..bf83bc50b0e 100644 --- a/forge-gui/res/cardsfolder/b/brawl.txt +++ b/forge-gui/res/cardsfolder/b/brawl.txt @@ -2,7 +2,7 @@ Name:Brawl ManaCost:3 R R Types:Instant A:SP$ AnimateAll | ValidCards$ Creature | Abilities$ ThrowPunch | SpellDescription$ Until end of turn, all creatures gain "{T}: This creature deals damage equal to its power to target creature." -SVar:ThrowPunch:AB$ DealDamage | Cost$ T | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ BrawlX | SpellDescription$ This creature deals damage equal to its power to target creature. +SVar:ThrowPunch:AB$ DealDamage | Cost$ T | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ BrawlX | SpellDescription$ CARDNAME deals damage equal to its power to target creature. SVar:BrawlX:Count$CardPower AI:RemoveDeck:All Oracle:Until end of turn, all creatures gain "{T}: This creature deals damage equal to its power to target creature." diff --git a/forge-gui/res/cardsfolder/b/bruna_light_of_alabaster.txt b/forge-gui/res/cardsfolder/b/bruna_light_of_alabaster.txt index 0fc5dff2d35..9e1bc7a06d0 100644 --- a/forge-gui/res/cardsfolder/b/bruna_light_of_alabaster.txt +++ b/forge-gui/res/cardsfolder/b/bruna_light_of_alabaster.txt @@ -8,8 +8,8 @@ T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ Aurify | TriggerDescription$ W T:Mode$ Blocks | ValidCard$ Card.Self | Execute$ Aurify | Secondary$ True | TriggerDescription$ Whenever CARDNAME attacks or blocks, you may attach to it any number of Auras on the battlefield and you may put onto the battlefield attached to it any number of Aura cards that could enchant it from your graveyard and/or hand. SVar:Aurify:DB$ RepeatEach | RepeatSubAbility$ BrunaAttach | RepeatCards$ Aura.CanEnchantSource+!Attached | SubAbility$ ZoneAuras SVar:BrunaAttach:DB$ Attach | Object$ Remembered | Defined$ Self | Optional$ True -SVar:ZoneAuras:DB$ ChangeZone | Origin$ Hand,Graveyard | Destination$ Battlefield | ChangeType$ Aura.CanEnchantSource+YouOwn | AttachedTo$ Self | ChangeNum$ Count | Optional$ True | Hidden$ True -SVar:Count:Count$ValidHand,Graveyard Aura.CanEnchantSource+YouOwn +SVar:ZoneAuras:DB$ ChangeZone | Origin$ Hand,Graveyard | Destination$ Battlefield | ChangeType$ Aura.CanEnchantSource+YouOwn | AttachedTo$ Self | ChangeNum$ CountAuras | Optional$ True | Hidden$ True +SVar:CountAuras:Count$ValidHand,Graveyard Aura.CanEnchantSource+YouOwn SVar:HasAttackEffect:TRUE SVar:HasBlockEffect:TRUE DeckNeeds:Type$Aura diff --git a/forge-gui/res/cardsfolder/c/cabal_inquisitor.txt b/forge-gui/res/cardsfolder/c/cabal_inquisitor.txt index f9f61989cd8..656150d6742 100644 --- a/forge-gui/res/cardsfolder/c/cabal_inquisitor.txt +++ b/forge-gui/res/cardsfolder/c/cabal_inquisitor.txt @@ -2,5 +2,5 @@ Name:Cabal Inquisitor ManaCost:1 B Types:Creature Human Minion PT:1/1 -A:AB$ Discard | Cost$ 1 B T ExileFromGrave<2/Card> | ValidTgts$ Player | Activation$ Threshold | NumCards$ 1 | Mode$ TgtChoose | SorcerySpeed$ True | SpellDescription$ Target player discards a card. Activate only as a sorcery and only if seven or more cards are in your graveyard. | PrecostDesc$ Threshold — +A:AB$ Discard | Cost$ 1 B T ExileFromGrave<2/Card> | ValidTgts$ Player | Activation$ Threshold | PrecostDesc$ Threshold — | NumCards$ 1 | Mode$ TgtChoose | SorcerySpeed$ True | SpellDescription$ Target player discards a card. Activate only as a sorcery and only if seven or more cards are in your graveyard. Oracle:Threshold — {1}{B}, {T}, Exile two cards from your graveyard: Target player discards a card. Activate only as a sorcery and only if seven or more cards are in your graveyard. diff --git a/forge-gui/res/cardsfolder/c/cabal_torturer.txt b/forge-gui/res/cardsfolder/c/cabal_torturer.txt index f35fd385e24..8f23665aabf 100644 --- a/forge-gui/res/cardsfolder/c/cabal_torturer.txt +++ b/forge-gui/res/cardsfolder/c/cabal_torturer.txt @@ -3,5 +3,5 @@ ManaCost:1 B B Types:Creature Human Minion PT:1/1 A:AB$ Pump | Cost$ B T | NumAtt$ -1 | NumDef$ -1 | IsCurse$ True | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ Target creature gets -1/-1 until end of turn. -A:AB$ Pump | Cost$ 3 B B T | NumAtt$ -2 | NumDef$ -2 | IsCurse$ True | ValidTgts$ Creature | TgtPrompt$ Select target creature | Activation$ Threshold | SpellDescription$ Target creature gets -2/-2 until end of turn. Activate only if seven or more cards are in your graveyard. | PrecostDesc$ Threshold — +A:AB$ Pump | Cost$ 3 B B T | NumAtt$ -2 | NumDef$ -2 | IsCurse$ True | ValidTgts$ Creature | TgtPrompt$ Select target creature | Activation$ Threshold | PrecostDesc$ Threshold — | SpellDescription$ Target creature gets -2/-2 until end of turn. Activate only if seven or more cards are in your graveyard. Oracle:{B}, {T}: Target creature gets -1/-1 until end of turn.\nThreshold — {3}{B}{B}, {T}: Target creature gets -2/-2 until end of turn. Activate only if seven or more cards are in your graveyard. diff --git a/forge-gui/res/cardsfolder/c/call_a_surprise_witness.txt b/forge-gui/res/cardsfolder/c/call_a_surprise_witness.txt index bc8c798bcd2..8b68815a23f 100644 --- a/forge-gui/res/cardsfolder/c/call_a_surprise_witness.txt +++ b/forge-gui/res/cardsfolder/c/call_a_surprise_witness.txt @@ -1,9 +1,9 @@ Name:Call a Surprise Witness ManaCost:1 W Types:Sorcery -A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Creature.YouCtrl+cmcLE3 | AnimateSubAbility$ DBAnimate | RememberChanged$ True | SubAbility$ DBPutCounter | TgtPrompt$ Select target creature card with mana value 3 or less | SpellDescription$ Return target creature card with mana value 3 or less from your graveyard to the battlefield. -SVar:DBPutCounter:DB$ PutCounter | Defined$ Remembered | CounterType$ Flying | CounterNum$ 1 | SubAbility$ DBCleanup | SpellDescription$ Put a flying counter on it -SVar:DBAnimate:DB$ Animate | Defined$ Remembered | Types$ Spirit | Duration$ Permanent | SpellDescription$ It's a Spirit in addition to its other types. +A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Creature.YouCtrl+cmcLE3 | AnimateSubAbility$ DBAnimate | RememberChanged$ True | SubAbility$ DBPutCounter | TgtPrompt$ Select target creature card with mana value 3 or less | StackDescription$ REP Return_{p:You} returns & target creature card with mana value 3 or less_{c:Targeted} & your_their & Put_{p:You} puts & on it_on {c:Targeted} | SpellDescription$ Return target creature card with mana value 3 or less from your graveyard to the battlefield. Put a flying counter on it. It's a Spirit in addition to its other types. +SVar:DBPutCounter:DB$ PutCounter | Defined$ Remembered | CounterType$ Flying | CounterNum$ 1 | SubAbility$ DBCleanup | StackDescription$ None +SVar:DBAnimate:DB$ Animate | Defined$ Remembered | Types$ Spirit | Duration$ Permanent SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Graveyard & Type$Spirit Oracle:Return target creature card with mana value 3 or less from your graveyard to the battlefield. Put a flying counter on it. It's a Spirit in addition to its other types. diff --git a/forge-gui/res/cardsfolder/c/call_for_aid.txt b/forge-gui/res/cardsfolder/c/call_for_aid.txt index 3004238fd52..e31409f2fe7 100644 --- a/forge-gui/res/cardsfolder/c/call_for_aid.txt +++ b/forge-gui/res/cardsfolder/c/call_for_aid.txt @@ -4,7 +4,7 @@ Types:Sorcery A:SP$ GainControl | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | AllValid$ Creature.TargetedPlayerCtrl | AddKWs$ Haste | Untap$ True | NewController$ You | LoseControl$ EOT | RememberControlled$ True | SubAbility$ DBEffect | SpellDescription$ Gain control of all creatures target opponent controls until end of turn. Untap those creatures. They gain haste until end of turn. You can't attack that player this turn. You can't sacrifice those creatures this turn. SVar:DBEffect:DB$ Effect | RememberObjects$ TargetedPlayer,RememberedCard | StaticAbilities$ CantSac,CantAttack | SubAbility$ DBCleanup SVar:CantSac:Mode$ CantSacrifice | ValidCard$ Card.IsRemembered+YouCtrl | Description$ You can't sacrifice those creatures this turn. -SVar:CantAttack:Mode$ CantAttack | ValidCard$ Creature.YouCtrl | Target$ Player.IsRemembered | Description$ You can't attack that player this turn +SVar:CantAttack:Mode$ CantAttack | ValidCard$ Creature.YouCtrl | Target$ Player.IsRemembered | Description$ You can't attack that player this turn. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True AI:RemoveDeck:All Oracle:Gain control of all creatures target opponent controls until end of turn. Untap those creatures. They gain haste until end of turn. You can't attack that player this turn. You can't sacrifice those creatures this turn. diff --git a/forge-gui/res/cardsfolder/c/casualties_of_war.txt b/forge-gui/res/cardsfolder/c/casualties_of_war.txt index 83944c824f4..cb327765165 100644 --- a/forge-gui/res/cardsfolder/c/casualties_of_war.txt +++ b/forge-gui/res/cardsfolder/c/casualties_of_war.txt @@ -2,9 +2,9 @@ Name:Casualties of War ManaCost:2 B B G G Types:Sorcery A:SP$ Charm | MinCharmNum$ 1 | CharmNum$ 5 | Choices$ DestroyArtifact,DestroyCreature,DestroyEnchantment,DestroyLand,DestroyPlaneswalker -SVar:DestroyArtifact:DB$ Destroy | ValidTgts$ Artifact | TgtPrompt$ Select target artifact | SpellDescription$ Destroy target artifact +SVar:DestroyArtifact:DB$ Destroy | ValidTgts$ Artifact | TgtPrompt$ Select target artifact | SpellDescription$ Destroy target artifact. SVar:DestroyCreature:DB$ Destroy | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ Destroy target creature. -SVar:DestroyEnchantment:DB$ Destroy | ValidTgts$ Enchantment | TgtPrompt$ Select target Enchantment | SpellDescription$ Destroy target Enchantment. +SVar:DestroyEnchantment:DB$ Destroy | ValidTgts$ Enchantment | TgtPrompt$ Select target Enchantment | SpellDescription$ Destroy target enchantment. SVar:DestroyLand:DB$ Destroy | ValidTgts$ Land | TgtPrompt$ Select target land | SpellDescription$ Destroy target land. SVar:DestroyPlaneswalker:DB$ Destroy | ValidTgts$ Planeswalker | TgtPrompt$ Select target planeswalker | SpellDescription$ Destroy target planeswalker. Oracle:Choose one or more —\n• Destroy target artifact.\n• Destroy target creature.\n• Destroy target enchantment.\n• Destroy target land.\n• Destroy target planeswalker. diff --git a/forge-gui/res/cardsfolder/c/cat_oven.txt b/forge-gui/res/cardsfolder/c/cat_oven.txt index d90e3777c76..21c388fa89d 100644 --- a/forge-gui/res/cardsfolder/c/cat_oven.txt +++ b/forge-gui/res/cardsfolder/c/cat_oven.txt @@ -3,10 +3,10 @@ ManaCost:1 Types:Artifact T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigFood | TriggerDescription$ When CARDNAME enters the battlefield, create a Food token. SVar:TrigFood:DB$ Token | TokenScript$ c_a_food_sac | TokenAmount$ 1 -A:AB$ Token | Cost$ T Sac<1/Food> | TokenScript$ b_1_1_cat | TokenAmount$ 1 | SubAbility$ DBDrain | SpellDescription$ Create a 1/1 black Cat creature token. Each opponent loses 1 life and you gain 1 life. +A:AB$ Token | Cost$ T Sac<1/Food> | TokenScript$ b_1_1_cat | TokenAmount$ 1 | SubAbility$ DBDrain | SpellDescription$ Create a 1/1 black Cat creature token. Each opponent loses 1 life and you gain 1 life. SVar:DBDrain:DB$ LoseLife | Defined$ Player.Opponent | LifeAmount$ 1 | SubAbility$ DBGainLife SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 SVar:AIPreference:SacCost$Food.token DeckHas:Ability$Token|Sacrifice|LifeGain & Type$Food|Artifact|Cat DeckHints:Type$Food -Oracle:When Cat Oven enters the battlefield, create a Food token.\n{T}, Sacrifice a Food: Create a 1/1 black Cat creature token. Each opponent loses 1 life and you gain 1 life. +Oracle:When Cat Oven enters the battlefield, create a Food token.\n{T}, Sacrifice a Food: Create a 1/1 black Cat creature token. Each opponent loses 1 life and you gain 1 life. diff --git a/forge-gui/res/cardsfolder/c/cavalcade_of_calamity.txt b/forge-gui/res/cardsfolder/c/cavalcade_of_calamity.txt index 6b2522795e4..6cd9d77a4c0 100644 --- a/forge-gui/res/cardsfolder/c/cavalcade_of_calamity.txt +++ b/forge-gui/res/cardsfolder/c/cavalcade_of_calamity.txt @@ -1,7 +1,7 @@ Name:Cavalcade of Calamity ManaCost:1 R Types:Enchantment -T:Mode$ Attacks | ValidCard$ Creature.powerLE1+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Whenever a creature you control with power 1 or less attacks, CARDNAME deals 1 damage to the player or planeswalker that creature is attacking +T:Mode$ Attacks | ValidCard$ Creature.powerLE1+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Whenever a creature you control with power 1 or less attacks, CARDNAME deals 1 damage to the player or planeswalker that creature is attacking. SVar:TrigDamage:DB$ DealDamage | Defined$ TriggeredDefender.Player & Valid Planeswalker.TriggeredDefender | NumDmg$ 1 SVar:PlayMain1:TRUE Oracle:Whenever a creature you control with power 1 or less attacks, Cavalcade of Calamity deals 1 damage to the player or planeswalker that creature is attacking. diff --git a/forge-gui/res/cardsfolder/c/chandra_fire_of_kaladesh_chandra_roaring_flame.txt b/forge-gui/res/cardsfolder/c/chandra_fire_of_kaladesh_chandra_roaring_flame.txt index 5d2c366e3c3..1fbbde0ca15 100644 --- a/forge-gui/res/cardsfolder/c/chandra_fire_of_kaladesh_chandra_roaring_flame.txt +++ b/forge-gui/res/cardsfolder/c/chandra_fire_of_kaladesh_chandra_roaring_flame.txt @@ -19,7 +19,7 @@ ManaCost:no cost Colors:red Types:Legendary Planeswalker Chandra Loyalty:4 -A:AB$ DealDamage | Cost$ AddCounter<1/LOYALTY> | ValidTgts$ Player,Planeswalker | TgtPrompt$ Select target player or planeswalker | Planeswalker$ True | NumDmg$ 2 | SpellDescription$ CARDNAME deals 2 damage to target player or planeswalker +A:AB$ DealDamage | Cost$ AddCounter<1/LOYALTY> | ValidTgts$ Player,Planeswalker | TgtPrompt$ Select target player or planeswalker | Planeswalker$ True | NumDmg$ 2 | SpellDescription$ CARDNAME deals 2 damage to target player or planeswalker. A:AB$ DealDamage | Cost$ SubCounter<2/LOYALTY> | ValidTgts$ Creature | Planeswalker$ True | NumDmg$ 2 | SpellDescription$ CARDNAME deals 2 damage to target creature. A:AB$ DealDamage | Cost$ SubCounter<7/LOYALTY> | Defined$ Player.Opponent | Planeswalker$ True | Ultimate$ True | NumDmg$ 6 | RememberDamaged$ True | SubAbility$ DBUltimateEmblem | SpellDescription$ CARDNAME deals 6 damage to each opponent. Each player dealt damage this way gets an emblem with "At the beginning of your upkeep, this emblem deals 3 damage to you." SVar:DBUltimateEmblem:DB$ Effect | Name$ Emblem — Chandra, Roaring Flame | Image$ emblem_chandra_roaring_flame | Stackable$ True | Triggers$ FlameTrigger | Duration$ Permanent | AILogic$ Always | EffectOwner$ Player.IsRemembered | SubAbility$ DBCleanup diff --git a/forge-gui/res/cardsfolder/c/charged_conjuration.txt b/forge-gui/res/cardsfolder/c/charged_conjuration.txt index 37856f1e62b..1941d76aa8a 100644 --- a/forge-gui/res/cardsfolder/c/charged_conjuration.txt +++ b/forge-gui/res/cardsfolder/c/charged_conjuration.txt @@ -4,5 +4,5 @@ Types:Enchantment T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigAnimate | TriggerDescription$ At the beginning of your upkeep, instant and sorcery cards in your hand perpetually gain "This spell costs {1} less to cast." SVar:TrigAnimate:DB$ AnimateAll | ValidCards$ Sorcery.YouOwn,Instant.YouOwn | Zone$ Hand | staticAbilities$ ReduceCost | Duration$ Perpetual SVar:ReduceCost:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 1 | EffectZone$ All | Description$ This spell costs {1} less to cast. -A:AB$ MakeCard | Cost$ Sac<1/CARDNAME> | Conjure$ True | Spellbook$ Empty the Warrens,Galvanic Relay,Grapeshot | SorcerySpeed$ True | Zone$ Hand | SpellDescription$ Conjure a card of your choice from Charged Conjuration's spellbook into your hand. Activate only as a sorcery. +A:AB$ MakeCard | Cost$ Sac<1/CARDNAME> | Conjure$ True | Spellbook$ Empty the Warrens,Galvanic Relay,Grapeshot | SorcerySpeed$ True | Zone$ Hand | SpellDescription$ Conjure a card of your choice from CARDNAME's spellbook into your hand. Activate only as a sorcery. Oracle:At the beginning of your upkeep, instant and sorcery cards in your hand perpetually gain "This spell costs {1} less to cast."\nSacrifice this enchantment: Conjure a card of your choice from Charged Conjuration's spellbook into your hand. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/c/choking_tethers.txt b/forge-gui/res/cardsfolder/c/choking_tethers.txt index fbdc933d560..65458b6ba54 100644 --- a/forge-gui/res/cardsfolder/c/choking_tethers.txt +++ b/forge-gui/res/cardsfolder/c/choking_tethers.txt @@ -3,6 +3,6 @@ ManaCost:3 U Types:Instant K:Cycling:1 U A:SP$ Tap | ValidTgts$ Creature | TgtPrompt$ Select target creature | TargetMin$ 0 | TargetMax$ 4 | SpellDescription$ Tap up to four target creatures. -T:Mode$ Cycled | ValidCard$ Card.Self | Execute$ TrigTap | OptionalDecider$ You | TriggerDescription$ When you cycle CARDNAME, you may tap target creature +T:Mode$ Cycled | ValidCard$ Card.Self | Execute$ TrigTap | OptionalDecider$ You | TriggerDescription$ When you cycle CARDNAME, you may tap target creature. SVar:TrigTap:DB$ Tap | ValidTgts$ Creature | TgtPrompt$ Select target creature Oracle:Tap up to four target creatures.\nCycling {1}{U} ({1}{U}, Discard this card: Draw a card.)\nWhen you cycle Choking Tethers, you may tap target creature. diff --git a/forge-gui/res/cardsfolder/c/choose_your_champion.txt b/forge-gui/res/cardsfolder/c/choose_your_champion.txt index 3a2eff44e61..80d9331267f 100644 --- a/forge-gui/res/cardsfolder/c/choose_your_champion.txt +++ b/forge-gui/res/cardsfolder/c/choose_your_champion.txt @@ -3,7 +3,7 @@ ManaCost:no cost Types:Scheme T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ ChooseChampion | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, target opponent chooses a player. Until your next turn, only you and the chosen player can cast spells and attack with creatures. SVar:ChooseChampion:DB$ ChoosePlayer | ValidTgts$ Opponent | Choices$ Player | AILogic$ BestAllyBoardPosition | SubAbility$ PrepChamps -SVar:PrepChamps:DB$ Effect | RememberObjects$ ChosenPlayer,You | Name$ Choose Your Champion Scheme | Duration$ UntilYourNextTurn | StaticAbilities$ RestrictAttackers,RestrictCasting +SVar:PrepChamps:DB$ Effect | RememberObjects$ ChosenPlayer,You | Duration$ UntilYourNextTurn | StaticAbilities$ RestrictAttackers,RestrictCasting SVar:RestrictAttackers:Mode$ CantAttack | EffectZone$ Command | ValidCard$ Creature.!RememberedPlayerCtrl | Description$ Until your next turn, only you and the chosen player can attack with creatures. SVar:RestrictCasting:Mode$ CantBeCast | ValidCard$ Card | Caster$ Player.IsNotRemembered | EffectZone$ Command | Description$ Until your next turn, only you and the chosen player can cast spells. Oracle:When you set this scheme in motion, target opponent chooses a player. Until your next turn, only you and the chosen player can cast spells and attack with creatures. diff --git a/forge-gui/res/cardsfolder/c/chronostutter.txt b/forge-gui/res/cardsfolder/c/chronostutter.txt index cc645fa1b30..fbf41cf7e4e 100644 --- a/forge-gui/res/cardsfolder/c/chronostutter.txt +++ b/forge-gui/res/cardsfolder/c/chronostutter.txt @@ -2,5 +2,5 @@ Name:Chronostutter ManaCost:5 U Types:Instant A:SP$ ChangeZone | Origin$ Battlefield | Destination$ Library | ValidTgts$ Creature | LibraryPosition$ 1 | SpellDescription$ Put target creature into its owner's library second from the top. -# Library Position is zero indexed. So 1 is second from the top +# LibraryPosition is zero indexed. So 1 is second from the top Oracle:Put target creature into its owner's library second from the top. diff --git a/forge-gui/res/cardsfolder/c/cindercone_smite.txt b/forge-gui/res/cardsfolder/c/cindercone_smite.txt index 43c9fead4f7..4b87ff716f3 100644 --- a/forge-gui/res/cardsfolder/c/cindercone_smite.txt +++ b/forge-gui/res/cardsfolder/c/cindercone_smite.txt @@ -1,7 +1,7 @@ Name:Cindercone Smite ManaCost:R Types:Sorcery -A:SP$ DealDamage | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 2 | SubAbility$ DBTreasure | SpellDescription$ CARDNAME deals 2 damage to target creature +A:SP$ DealDamage | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 2 | SubAbility$ DBTreasure | SpellDescription$ CARDNAME deals 2 damage to target creature. SVar:DBTreasure:DB$ Token | ConditionCheckSVar$ X | TokenScript$ c_a_treasure_sac | SpellDescription$ Then create a Treasure token if you weren't the starting player. SVar:X:Count$StartingPlayer.0.1 Oracle:Cindercone Smite deals 2 damage to target creature. Then create a Treasure token if you weren't the starting player. diff --git a/forge-gui/res/cardsfolder/c/clockwork_drawbridge.txt b/forge-gui/res/cardsfolder/c/clockwork_drawbridge.txt index 5ea4b555f1a..1f80b0c3919 100644 --- a/forge-gui/res/cardsfolder/c/clockwork_drawbridge.txt +++ b/forge-gui/res/cardsfolder/c/clockwork_drawbridge.txt @@ -4,4 +4,4 @@ Types:Artifact Creature Wall PT:0/3 K:Defender A:AB$ Tap | Cost$ 2 W T | ValidTgts$ Creature | SpellDescription$ Tap target creature. -Oracle:Defender\n{2}{W}, {T}: Tap target creature +Oracle:Defender\n{2}{W}, {T}: Tap target creature. diff --git a/forge-gui/res/cardsfolder/c/cobbled_lancer.txt b/forge-gui/res/cardsfolder/c/cobbled_lancer.txt index 86a475744c1..ad50e6e6747 100644 --- a/forge-gui/res/cardsfolder/c/cobbled_lancer.txt +++ b/forge-gui/res/cardsfolder/c/cobbled_lancer.txt @@ -2,7 +2,7 @@ Name:Cobbled Lancer ManaCost:U Types:Creature Zombie Horse PT:3/3 -A:SP$ PermanentCreature | Cost$ U ExileFromGrave<1/Creature/creature card> +A:SP$ PermanentCreature | Cost$ U ExileFromGrave<1/Creature> A:AB$ Draw | Cost$ 3 U ExileFromGrave<1/CARDNAME> | NumCards$ 1 | ActivationZone$ Graveyard | SpellDescription$ Draw a card. DeckHas:Ability$Graveyard Oracle:As an additional cost to cast this spell, exile a creature card from your graveyard.\n{3}{U}, Exile Cobbled Lancer from your graveyard: Draw a card. diff --git a/forge-gui/res/cardsfolder/c/commit_memory.txt b/forge-gui/res/cardsfolder/c/commit_memory.txt index 7063f1ef5b1..4ce33113715 100644 --- a/forge-gui/res/cardsfolder/c/commit_memory.txt +++ b/forge-gui/res/cardsfolder/c/commit_memory.txt @@ -2,7 +2,7 @@ Name:Commit ManaCost:3 U Types:Instant A:SP$ ChangeZone | TgtZone$ Stack,Battlefield | Origin$ Battlefield,Stack | Destination$ Library | ValidTgts$ Permanent.nonLand,Card.inZoneStack | TgtPrompt$ Select target spell or nonland permanent | LibraryPosition$ 1 | Fizzle$ True | SpellDescription$ Put target spell or nonland permanent into its owner's library second from the top. -# Library Position is zero indexed. So 1 is second from the top +# LibraryPosition is zero indexed. So 1 is second from the top AlternateMode:Split Oracle:Put target spell or nonland permanent into its owner's library second from the top. diff --git a/forge-gui/res/cardsfolder/c/craving_of_yeenoghu.txt b/forge-gui/res/cardsfolder/c/craving_of_yeenoghu.txt index d51d34fb067..183b91caf23 100644 --- a/forge-gui/res/cardsfolder/c/craving_of_yeenoghu.txt +++ b/forge-gui/res/cardsfolder/c/craving_of_yeenoghu.txt @@ -5,9 +5,9 @@ K:Enchant creature you control A:SP$ Attach | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | AILogic$ Pump S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 3 | AddToughness$ 2 | AddKeyword$ Haste | Description$ Enchanted creature gets +3/+2, has haste, and attacks each combat if able. S:Mode$ MustAttack | ValidCreature$ Creature.EnchantedBy -A:AB$ Pump | Cost$ R | ActivationZone$ Graveyard | ValidTgts$ Creature.YouCtrl | SorcerySpeed$ True | TgtPrompt$ Select target creature you control | SubAbility$ DBChange | StackDescription$ None | SpellDescription$ -SVar:DBChange:DB$ ChangeZone | Defined$ Self | Origin$ Graveyard | Destination$ Battlefield | AttachedTo$ ParentTarget | SubAbility$ DBAnimate | StackDescription$ REP target creature you control_{c:ParentTarget} | SpellDescription$ Return CARDNAME from your graveyard to the battlefield attached to target creature you control. -SVar:DBAnimate:DB$ Animate | staticAbilities$ Hunger | Defined$ Self | Duration$ Perpetual | StackDescription$ CARDNAME perpetually gains "Enchanted creature gets -1/-1." | SpellDescription$ CARDNAME perpetually gains "Enchanted creature gets -1/-1." Activate only as a sorcery. +A:AB$ Pump | Cost$ R | ActivationZone$ Graveyard | ValidTgts$ Creature.YouCtrl | SorcerySpeed$ True | TgtPrompt$ Select target creature you control | SubAbility$ DBChange | StackDescription$ REP Return_{p:You} returns & your_their & target creature you control_{c:Targeted} & ." Activate only as a sorcery._." | SpellDescription$ Return CARDNAME from your graveyard to the battlefield attached to target creature you control. CARDNAME perpetually gains "Enchanted creature gets -1/-1." Activate only as a sorcery. +SVar:DBChange:DB$ ChangeZone | Defined$ Self | Origin$ Graveyard | Destination$ Battlefield | AttachedTo$ ParentTarget | SubAbility$ DBAnimate | StackDescription$ None +SVar:DBAnimate:DB$ Animate | staticAbilities$ Hunger | Defined$ Self | Duration$ Perpetual | StackDescription$ None SVar:Hunger:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ -1 | AddToughness$ -1 | Description$ Enchanted creature gets -1/-1. DeckHas:Ability$Graveyard Oracle:Enchant creature you control\nEnchanted creature gets +3/+2, has haste, and attacks each combat if able.\n{R}: Return Craving of Yeenoghu from your graveyard to the battlefield attached to target creature you control. Craving of Yeenoghu perpetually gains "Enchanted creature gets -1/-1." Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/c/crown_of_convergence.txt b/forge-gui/res/cardsfolder/c/crown_of_convergence.txt index 0152b053907..6c866791c82 100644 --- a/forge-gui/res/cardsfolder/c/crown_of_convergence.txt +++ b/forge-gui/res/cardsfolder/c/crown_of_convergence.txt @@ -3,6 +3,6 @@ ManaCost:2 Types:Artifact S:Mode$ Continuous | Affected$ Card.TopLibrary+YouCtrl | AffectedZone$ Library | MayLookAt$ Player | Description$ Play with the top card of your library revealed. S:Mode$ Continuous | Affected$ Creature.YouCtrl+SharesColorWith TopOfLibrary | AddPower$ 1 | AddToughness$ 1 | TopCardOfLibraryIs$ Creature | Description$ As long as the top card of your library is a creature card, creatures you control that share a color with that card get +1/+1. -A:AB$ Dig | Cost$ G W | LibraryPosition$ -1 | DigNum$ 1 | Reveal$ False | DestinationZone$ Library | SpellDescription$ Put the top card of your library on the bottom of your library +A:AB$ Dig | Cost$ G W | LibraryPosition$ -1 | DigNum$ 1 | Reveal$ False | DestinationZone$ Library | SpellDescription$ Put the top card of your library on the bottom of your library. AI:RemoveDeck:All Oracle:Play with the top card of your library revealed.\nAs long as the top card of your library is a creature card, creatures you control that share a color with that card get +1/+1.\n{G}{W}: Put the top card of your library on the bottom of your library. diff --git a/forge-gui/res/cardsfolder/c/cruel_reality.txt b/forge-gui/res/cardsfolder/c/cruel_reality.txt index d76bad2bab0..a5f678a5dcc 100644 --- a/forge-gui/res/cardsfolder/c/cruel_reality.txt +++ b/forge-gui/res/cardsfolder/c/cruel_reality.txt @@ -4,7 +4,7 @@ Types:Enchantment Aura Curse K:Enchant player A:SP$ Attach | Cost$ 5 B B | ValidTgts$ Player | AILogic$ Curse T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player.EnchantedBy | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ At the beginning of enchanted player's upkeep, that player sacrifices a creature or planeswalker. If the player can't, they lose 5 life. -SVar:TrigSac:DB$ Sacrifice | SacValid$ Creature,Planeswalker | Defined$ TriggeredPlayer | SubAbility$ DBLoseLife | RememberSacrificed$ True | SpellDescription$ Sacrifice a creature or planeswalker +SVar:TrigSac:DB$ Sacrifice | SacValid$ Creature,Planeswalker | Defined$ TriggeredPlayer | SubAbility$ DBLoseLife | RememberSacrificed$ True | SpellDescription$ Sacrifice a creature or planeswalker. SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ 5 | Defined$ TriggeredPlayer | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ0 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Remembered$Amount diff --git a/forge-gui/res/cardsfolder/c/cyclopean_tomb.txt b/forge-gui/res/cardsfolder/c/cyclopean_tomb.txt index a86ab0cc936..cb5261addaa 100644 --- a/forge-gui/res/cardsfolder/c/cyclopean_tomb.txt +++ b/forge-gui/res/cardsfolder/c/cyclopean_tomb.txt @@ -3,7 +3,7 @@ ManaCost:4 Types:Artifact A:AB$ PutCounter | Cost$ 2 T | ValidTgts$ Land.nonSwamp | TgtPrompt$ Select target non-Swamp land | RememberCards$ True | CounterType$ MIRE | CounterNum$ 1 | ActivationPhases$ Upkeep | SubAbility$ DBEffect | SpellDescription$ Put a mire counter on target non-Swamp land. That land is a Swamp for as long as it has a mire counter on it. Activate only during your upkeep. SVar:DBEffect:DB$ Effect | RememberObjects$ Targeted | StaticAbilities$ TombStatic | ForgetOnMoved$ Battlefield | ForgetCounter$ MIRE | Duration$ Permanent -SVar:TombStatic:Mode$ Continuous | EffectZone$ Command | Affected$ Card.IsRemembered | AddType$ Swamp | RemoveLandTypes$ True | Description$ That land is a Swamp for as long as it has a mire counter on it +SVar:TombStatic:Mode$ Continuous | EffectZone$ Command | Affected$ Card.IsRemembered | AddType$ Swamp | RemoveLandTypes$ True | Description$ That land is a Swamp for as long as it has a mire counter on it. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigEffect | TriggerDescription$ When CARDNAME is put into a graveyard from the battlefield, at the beginning of each of your upkeeps for the rest of the game, remove all mire counters from a land that a mire counter was put onto with CARDNAME but that a mire counter has not been removed from with CARDNAME. SVar:TrigEffect:DB$ Effect | RememberObjects$ RememberedCard | Triggers$ UpkeepRemove | ForgetOnMoved$ Battlefield | Duration$ Permanent | SubAbility$ DBClearRemembered SVar:UpkeepRemove:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigRemove | TriggerZones$ Command | TriggerDescription$ At the beginning of your upkeep, remove all mire counters from a land that a mire counter was put onto with EFFECTSOURCE but that a mire counter has not been removed from with EFFECTSOURCE. diff --git a/forge-gui/res/cardsfolder/d/dance_with_calamity.txt b/forge-gui/res/cardsfolder/d/dance_with_calamity.txt index 71e0b4b647e..7b81cadb059 100644 --- a/forge-gui/res/cardsfolder/d/dance_with_calamity.txt +++ b/forge-gui/res/cardsfolder/d/dance_with_calamity.txt @@ -3,7 +3,7 @@ ManaCost:7 R Types:Sorcery A:SP$ Shuffle | SubAbility$ DBChoose | StackDescription$ {p:You} shuffles their library, | SpellDescription$ Shuffle your library. As many times as you choose, you may exile the top card of your library. If the total mana value of the cards exiled this way is 13 or less, you may cast any number of spells from among those cards without paying their mana costs. SVar:DBChoose:DB$ GenericChoice | Choices$ DBRepeat,Play | Defined$ You -SVar:DBRepeat:DB$ Repeat | RepeatSubAbility$ DBDig | RepeatOptional$ True | SubAbility$ Play | SpellDescription$ As many times as you choose, you may exile the top card of your library +SVar:DBRepeat:DB$ Repeat | RepeatSubAbility$ DBDig | RepeatOptional$ True | SubAbility$ Play | SpellDescription$ As many times as you choose, you may exile the top card of your library. SVar:DBDig:DB$ Dig | DigNum$ 1 | Reveal$ True | ChangeNum$ All | ChangeValid$ Card | DestinationZone$ Exile | RememberChanged$ True SVar:Play:DB$ Play | Defined$ Remembered | ValidSA$ Spell | Amount$ All | WithoutManaCost$ True | Optional$ True | ConditionCheckSVar$ X | ConditionSVarCompare$ LE13 | SubAbility$ DBCleanup | SpellDescription$ If the total mana value of the cards exiled this way is 13 or less, you may cast any number of spells from among those cards without paying their mana costs. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/d/dargo_the_shipwrecker.txt b/forge-gui/res/cardsfolder/d/dargo_the_shipwrecker.txt index 9a70a76a073..b1abea710c0 100644 --- a/forge-gui/res/cardsfolder/d/dargo_the_shipwrecker.txt +++ b/forge-gui/res/cardsfolder/d/dargo_the_shipwrecker.txt @@ -2,9 +2,9 @@ Name:Dargo, the Shipwrecker ManaCost:6 R Types:Legendary Creature Giant Pirate PT:7/5 -A:SP$ PermanentCreature | Cost$ 6 R Sac | AILogic$ SacToReduceCost | CostDesc$ As an additional cost to cast this spell, you may sacrifice any number of artifacts and/or creatures. | SpellDescription$ -S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Y | EffectZone$ All | Relative$ True | Description$ This spell costs {2} less to cast for each permanent sacrificed this way and {2} less to cast for each other artifact or creature you've sacrificed this turn. -S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Z | EffectZone$ All | Secondary$ True | Description$ This spell costs {2} less to cast for each permanent sacrificed this way and {2} less to cast for each other artifact or creature you've sacrificed this turn. +A:SP$ PermanentCreature | Cost$ 6 R Sac | AILogic$ SacToReduceCost | AdditionalDesc$ This spell costs {2} less to cast for each permanent sacrificed this way and {2} less to cast for each other artifact or creature you've sacrificed this turn. +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Y | EffectZone$ All | Relative$ True +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Z | EffectZone$ All SVar:X:Count$xPaid SVar:Y:SVar$X/Times.2 SVar:Z:PlayerCountPropertyYou$SacrificedThisTurn Artifact,Creature/Times.2 diff --git a/forge-gui/res/cardsfolder/d/davriel_soul_broker.txt b/forge-gui/res/cardsfolder/d/davriel_soul_broker.txt index 97e83731ead..c2584b3d294 100644 --- a/forge-gui/res/cardsfolder/d/davriel_soul_broker.txt +++ b/forge-gui/res/cardsfolder/d/davriel_soul_broker.txt @@ -43,5 +43,5 @@ SVar:UpkeepLoseTrig:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ Tr SVar:TrigLose:DB$ LoseLife | Defined$ You | LifeAmount$ Count$TypeYouCtrl.Creature SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True A:AB$ Pump | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls | IsCurse$ True | NumAtt$ -3 | NumDef$ -3 | Duration$ Perpetual | StackDescription$ REP Target creature an opponent controls_{c:Targeted} | SpellDescription$ Target creature an opponent controls perpetually gets -3/-3. -DeckHas:Ability$LifeGain|Graveyard|Sacrifice|LifeGain +DeckHas:Ability$LifeGain|Graveyard|Sacrifice Oracle:[+1]: Until your next turn, whenever an opponent attacks you and/or planeswalkers you control, they discard a card. If they can't, they sacrifice an attacking creature.\n[-2]: Accept one of Davriel's offers, then accept one of Davriel's conditions.\n[-3]: Target creature an opponent controls perpetually gets -3/-3. diff --git a/forge-gui/res/cardsfolder/d/death_mutation.txt b/forge-gui/res/cardsfolder/d/death_mutation.txt index ae6b2d3181d..de1e11d4254 100644 --- a/forge-gui/res/cardsfolder/d/death_mutation.txt +++ b/forge-gui/res/cardsfolder/d/death_mutation.txt @@ -2,7 +2,7 @@ Name:Death Mutation ManaCost:6 B G Types:Sorcery A:SP$ Destroy | ValidTgts$ Creature.nonBlack | TgtPrompt$ Select target nonblack creature | NoRegen$ True | SubAbility$ TrigToken | SpellDescription$ Destroy target nonblack creature. It can't be regenerated. Create X 1/1 green Saproling creature tokens, where X is that creature's mana value. -# X will be the Converted Mana Cost of the target of Mutation +# X will be the converted mana cost of the target of Death Mutation SVar:TrigToken:DB$ Token | TokenAmount$ X | TokenScript$ g_1_1_saproling | TokenOwner$ You SVar:X:Targeted$CardManaCost DeckHas:Ability$Token diff --git a/forge-gui/res/cardsfolder/d/deathless_behemoth.txt b/forge-gui/res/cardsfolder/d/deathless_behemoth.txt index e327e92d57a..8f24ba68a8e 100644 --- a/forge-gui/res/cardsfolder/d/deathless_behemoth.txt +++ b/forge-gui/res/cardsfolder/d/deathless_behemoth.txt @@ -3,6 +3,6 @@ ManaCost:6 Types:Creature Eldrazi PT:6/6 K:Vigilance -A:AB$ ChangeZone | Cost$ Sac<2/Eldrazi.Scion> | Origin$ Graveyard | Destination$ Hand | ActivationZone$ Graveyard | SorcerySpeed$ True | SpellDescription$ Return CARDNAME from your graveyard to your hand. Activate only as a sorcery. | CostDesc$ Sacrifice two Eldrazi Scions: +A:AB$ ChangeZone | Cost$ Sac<2/Eldrazi.Scion> | CostDesc$ Sacrifice two Eldrazi Scions: | Origin$ Graveyard | Destination$ Hand | ActivationZone$ Graveyard | SorcerySpeed$ True | SpellDescription$ Return CARDNAME from your graveyard to your hand. Activate only as a sorcery. SVar:DiscardMe:1 Oracle:Vigilance\nSacrifice two Eldrazi Scions: Return Deathless Behemoth from your graveyard to your hand. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/d/deathmist_raptor.txt b/forge-gui/res/cardsfolder/d/deathmist_raptor.txt index b3ee2a22d22..6fa904b4454 100644 --- a/forge-gui/res/cardsfolder/d/deathmist_raptor.txt +++ b/forge-gui/res/cardsfolder/d/deathmist_raptor.txt @@ -6,6 +6,6 @@ K:Deathtouch K:Megamorph:4 G T:Mode$ TurnFaceUp | ValidCard$ Permanent.YouCtrl | Execute$ TrigChange | TriggerZones$ Graveyard | OptionalDecider$ You | TriggerDescription$ Whenever a permanent you control is turned face up, you may return CARDNAME from your graveyard to the battlefield face up or face down. SVar:TrigChange:DB$ GenericChoice | Choices$ DBTop,DBBottom -SVar:DBTop:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | SpellDescription$ Put it on battlefield face up -SVar:DBBottom:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | FaceDown$ True | SpellDescription$ Put it on battlefield face down +SVar:DBTop:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | SpellDescription$ Put CARDNAME on battlefield face up. +SVar:DBBottom:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | FaceDown$ True | SpellDescription$ Put CARDNAME on battlefield face down. Oracle:Deathtouch\nWhenever a permanent you control is turned face up, you may return Deathmist Raptor from your graveyard to the battlefield face up or face down.\nMegamorph {4}{G} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its megamorph cost and put a +1/+1 counter on it.) diff --git a/forge-gui/res/cardsfolder/d/decree_of_annihilation.txt b/forge-gui/res/cardsfolder/d/decree_of_annihilation.txt index 9062dc89db9..6892743fb94 100644 --- a/forge-gui/res/cardsfolder/d/decree_of_annihilation.txt +++ b/forge-gui/res/cardsfolder/d/decree_of_annihilation.txt @@ -3,7 +3,7 @@ ManaCost:8 R R Types:Sorcery K:Cycling:5 R R A:SP$ ChangeZoneAll | ChangeType$ Artifact,Land,Creature | Origin$ Battlefield | Destination$ Exile | SubAbility$ DBExileHand | SpellDescription$ Exile all artifacts, creatures, and lands from the battlefield, all cards from all graveyards, and all cards from all hands. -T:Mode$ Cycled | ValidCard$ Card.Self | Execute$ TrigDestroyAll | TriggerDescription$ When you cycle CARDNAME, destroy all lands +T:Mode$ Cycled | ValidCard$ Card.Self | Execute$ TrigDestroyAll | TriggerDescription$ When you cycle CARDNAME, destroy all lands. SVar:DBExileHand:DB$ ChangeZoneAll | ChangeType$ Card | Origin$ Hand | Destination$ Exile | SubAbility$ DBExileGraveyard SVar:DBExileGraveyard:DB$ ChangeZoneAll | ChangeType$ Card | Origin$ Graveyard | Destination$ Exile SVar:TrigDestroyAll:DB$ DestroyAll | ValidCards$ Land | SpellDescription$ Destroy all lands. diff --git a/forge-gui/res/cardsfolder/d/deep_dish_pizza.txt b/forge-gui/res/cardsfolder/d/deep_dish_pizza.txt index d89d3a90ae8..170b36af19d 100644 --- a/forge-gui/res/cardsfolder/d/deep_dish_pizza.txt +++ b/forge-gui/res/cardsfolder/d/deep_dish_pizza.txt @@ -6,4 +6,4 @@ A:AB$ GainLife | Cost$ 2 T Sac<1/CARDNAME> | LifeAmount$ 3 | SubAbility$ DBDraw SVar:DBDraw:DB$ Draw | NumCards$ 3 | SubAbility$ DBDamage SVar:DBDamage:DB$ DealDamage | Defined$ Opponent | NumDmg$ 3 DeckHas:Ability$LifeGain|Sacrifice -Oracle:Suspend 2—{2} (Deep Dish Pizza has no mana cost and must be suspended.)\n{2}, {T}, Sacrifice Deep Dish Pizza: Gain 3 life, draw three cards, and Deep Dish Pizza deals 3 damage to each opponent. +Oracle:Suspend 2—{2} (Deep Dish Pizza has no mana cost and must be suspended.)\n{2}, {T}, Sacrifice Deep Dish Pizza: Gain 3 life, draw three cards, and Deep Dish Pizza deals 3 damage to each opponent. diff --git a/forge-gui/res/cardsfolder/d/dirge_of_dread.txt b/forge-gui/res/cardsfolder/d/dirge_of_dread.txt index fda55126a8b..53ada5ac5ab 100644 --- a/forge-gui/res/cardsfolder/d/dirge_of_dread.txt +++ b/forge-gui/res/cardsfolder/d/dirge_of_dread.txt @@ -2,7 +2,7 @@ Name:Dirge of Dread ManaCost:2 B Types:Sorcery A:SP$ PumpAll | ValidCards$ Creature | KW$ Fear | SpellDescription$ All creatures gain fear until end of turn. -T:Mode$ Cycled | ValidCard$ Card.Self | Execute$ TrigPump | OptionalDecider$ You | TriggerDescription$ When you cycle CARDNAME, you may have target creature gain fear until end of turn +T:Mode$ Cycled | ValidCard$ Card.Self | Execute$ TrigPump | OptionalDecider$ You | TriggerDescription$ When you cycle CARDNAME, you may have target creature gain fear until end of turn. K:Cycling:1 B SVar:TrigPump:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ Fear Oracle:All creatures gain fear until end of turn. (They can't be blocked except by artifact creatures and/or black creatures.)\nCycling {1}{B} ({1}{B}, Discard this card: Draw a card.)\nWhen you cycle Dirge of Dread, you may have target creature gain fear until end of turn. diff --git a/forge-gui/res/cardsfolder/d/diviners_wand.txt b/forge-gui/res/cardsfolder/d/diviners_wand.txt index 01a5a041698..0f52a5f90f9 100644 --- a/forge-gui/res/cardsfolder/d/diviners_wand.txt +++ b/forge-gui/res/cardsfolder/d/diviners_wand.txt @@ -5,7 +5,7 @@ K:Equip:3 S:Mode$ Continuous | Affected$ Card.EquippedBy | AddAbility$ DivinerDraw | AddTrigger$ TrigDraw | AddSVar$ DivinerTrigPump | Description$ Equipped creature has "Whenever you draw a card, this creature gets +1/+1 and gains flying until end of turn" and "{4}: Draw a card." T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Wizard | TriggerZones$ Battlefield | Execute$ TrigAttach | OptionalDecider$ You | TriggerDescription$ Whenever a Wizard creature enters, you may attach CARDNAME to it. SVar:TrigAttach:DB$ Attach | Defined$ TriggeredCard -SVar:TrigDraw:Mode$ Drawn | ValidCard$ Card.YouCtrl | TriggerZones$ Battlefield | Execute$ DivinerTrigPump | TriggerDescription$ Whenever you draw a card, CARDNAME gets +1/+1 and gains flying until end of turn +SVar:TrigDraw:Mode$ Drawn | ValidCard$ Card.YouCtrl | TriggerZones$ Battlefield | Execute$ DivinerTrigPump | TriggerDescription$ Whenever you draw a card, CARDNAME gets +1/+1 and gains flying until end of turn. SVar:DivinerTrigPump:DB$ Pump | Defined$ Self | NumAtt$ 1 | NumDef$ 1 | KW$ Flying SVar:DivinerDraw:AB$ Draw | Cost$ 4 | NumCards$ 1 | SpellDescription$ Draw a card. Oracle:Equipped creature has "Whenever you draw a card, this creature gets +1/+1 and gains flying until end of turn" and "{4}: Draw a card."\nWhenever a Wizard creature enters, you may attach Diviner's Wand to it.\nEquip {3} diff --git a/forge-gui/res/cardsfolder/d/dragonlord_kolaghan.txt b/forge-gui/res/cardsfolder/d/dragonlord_kolaghan.txt index 7239b2a5bf6..5a0f249f4ec 100644 --- a/forge-gui/res/cardsfolder/d/dragonlord_kolaghan.txt +++ b/forge-gui/res/cardsfolder/d/dragonlord_kolaghan.txt @@ -5,7 +5,7 @@ PT:6/5 K:Flying K:Haste S:Mode$ Continuous | Affected$ Creature.Other+YouCtrl | AddKeyword$ Haste | Description$ Other creatures you control have haste. -T:Mode$ SpellCast | ValidCard$ Creature,Planeswalker | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | SharesNameWithActivatorsZone$ Graveyard | Execute$ TrigLoseLife | TriggerDescription$ Whenever an opponent casts a creature or planeswalker spell with the same name as a card in their graveyard, that player loses 10 life. +T:Mode$ SpellCast | ValidSAonCard$ Spell.Creature+sharesNameWith YourGraveyard,Spell.Planeswalker+sharesNameWith YourGraveyard | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | Execute$ TrigLoseLife | TriggerDescription$ Whenever an opponent casts a creature or planeswalker spell with the same name as a card in their graveyard, that player loses 10 life. SVar:TrigLoseLife:DB$ LoseLife | Defined$ TriggeredActivator | LifeAmount$ 10 SVar:PlayMain1:TRUE Oracle:Flying, haste\nOther creatures you control have haste.\nWhenever an opponent casts a creature or planeswalker spell with the same name as a card in their graveyard, that player loses 10 life. diff --git a/forge-gui/res/cardsfolder/d/drowner_of_hope.txt b/forge-gui/res/cardsfolder/d/drowner_of_hope.txt index 5e218e2ce88..1fcd8d7b829 100644 --- a/forge-gui/res/cardsfolder/d/drowner_of_hope.txt +++ b/forge-gui/res/cardsfolder/d/drowner_of_hope.txt @@ -5,7 +5,7 @@ PT:5/5 K:Devoid T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters, create two 1/1 colorless Eldrazi Scion creature tokens. They have "Sacrifice this creature: Add {C}." SVar:TrigToken:DB$ Token | TokenAmount$ 2 | TokenScript$ c_1_1_eldrazi_scion_sac | TokenOwner$ You -A:AB$ Tap | Cost$ Sac<1/Card.Eldrazi+Scion> | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ Tap target creature. | CostDesc$ Sacrifice an Eldrazi Scion: +A:AB$ Tap | Cost$ Sac<1/Card.Eldrazi+Scion> | CostDesc$ Sacrifice an Eldrazi Scion: | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ Tap target creature. DeckHints:Type$Eldrazi DeckHas:Ability$Mana.Colorless|Token Oracle:Devoid (This card has no color.)\nWhen Drowner of Hope enters, create two 1/1 colorless Eldrazi Scion creature tokens. They have "Sacrifice this creature: Add {C}."\nSacrifice an Eldrazi Scion: Tap target creature. diff --git a/forge-gui/res/cardsfolder/d/dungeon_master.txt b/forge-gui/res/cardsfolder/d/dungeon_master.txt index ac646a56e1c..14b6c59bd7e 100644 --- a/forge-gui/res/cardsfolder/d/dungeon_master.txt +++ b/forge-gui/res/cardsfolder/d/dungeon_master.txt @@ -3,7 +3,7 @@ ManaCost:2 W U Types:Legendary Planeswalker Dungeon Master Loyalty:1 K:ETBReplacement:Other:RollLoyal -SVar:RollLoyal:DB$ RollDice | Sides$ 4 | ResultSVar$ Result | SubAbility$ DBLoyalty | SpellDescription$ Add 1d4 loyalty counters to CARDNAME +SVar:RollLoyal:DB$ RollDice | Sides$ 4 | ResultSVar$ Result | SubAbility$ DBLoyalty | SpellDescription$ Add 1d4 loyalty counters to CARDNAME. SVar:DBLoyalty:DB$ PutCounter | Defined$ Self | CounterType$ LOYALTY | CounterNum$ Result | ETB$ True A:AB$ Token | Cost$ AddCounter<1/LOYALTY> | ValidTgts$ Opponent | TokenOwner$ Targeted | TokenScript$ b_1_1_skeleton_opp_life | Planeswalker$ True | SpellDescription$ Target opponent creates a 1/1 black Skeleton creature token with "When this creature dies, each opponent gains 2 life." A:AB$ RollDice | Cost$ AddCounter<1/LOYALTY> | Sides$ 20 | ResultSubAbilities$ 1:DBSkipTurn,12-20:DBDraw | Planeswalker$ True | SpellDescription$ Roll a d20. If you roll a 1, skip your next turn. If you roll a 12 or higher, draw a card. diff --git a/forge-gui/res/cardsfolder/d/dusks_landing.txt b/forge-gui/res/cardsfolder/d/dusks_landing.txt index 087b9805842..7b1de225ddf 100644 --- a/forge-gui/res/cardsfolder/d/dusks_landing.txt +++ b/forge-gui/res/cardsfolder/d/dusks_landing.txt @@ -3,7 +3,7 @@ ManaCost:B Types:Sorcery A:SP$ Branch | BranchConditionSVar$ LifeCheck | BranchConditionSVarCompare$ GE2 | FalseSubAbility$ DBDraw | TrueSubAbility$ DBSeek | SpellDescription$ Draw a card. If an opponent lost life this turn and you gained life this turn, seek two Vampire cards instead. SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card. -SVar:DBSeek:DB$ Seek | Num$ 2 | Type$ Vampire | SpellDescription$ Seek two Vampire card +SVar:DBSeek:DB$ Seek | Num$ 2 | Type$ Vampire | SpellDescription$ Seek two Vampire cards. SVar:LifeCheck:SVar$Y/Plus.X SVar:X:Count$LifeOppsLostThisTurn/LimitMax.1 SVar:Y:Count$LifeYouGainedThisTurn/LimitMax.1 diff --git a/forge-gui/res/cardsfolder/d/dwindle.txt b/forge-gui/res/cardsfolder/d/dwindle.txt index 0fb8ccfa904..3c08bf17d50 100644 --- a/forge-gui/res/cardsfolder/d/dwindle.txt +++ b/forge-gui/res/cardsfolder/d/dwindle.txt @@ -2,7 +2,7 @@ Name:Dwindle ManaCost:2 U Types:Enchantment Aura K:Enchant creature -A:SP$ Attach | Cost$ 2 U | ValidTgts$ Creature | IsCurse$ True | SpellDescription$ Enchant creature +A:SP$ Attach | Cost$ 2 U | ValidTgts$ Creature | IsCurse$ True S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ -6 | AddToughness$ -0 | Description$ Enchanted creature gets -6/-0. T:Mode$ AttackerBlockedByCreature | ValidCard$ Creature | ValidBlocker$ Creature.EnchantedBy | TriggerZones$ Battlefield | Execute$ TrigDestroy | TriggerDescription$ When enchanted creature blocks, destroy it. SVar:TrigDestroy:DB$ Destroy | Defined$ TriggeredBlockerLKICopy diff --git a/forge-gui/res/cardsfolder/e/emberwilde_djinn.txt b/forge-gui/res/cardsfolder/e/emberwilde_djinn.txt index 05ed53226c5..34d24086442 100644 --- a/forge-gui/res/cardsfolder/e/emberwilde_djinn.txt +++ b/forge-gui/res/cardsfolder/e/emberwilde_djinn.txt @@ -5,6 +5,6 @@ PT:5/4 K:Flying T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigChoose | TriggerDescription$ At the beginning of each player's upkeep, that player may pay {R}{R} or 2 life. If the player does, they gain control of CARDNAME. SVar:TrigChoose:DB$ GenericChoice | Defined$ TriggeredPlayer | AILogic$ PayUnlessCost | Choices$ PayRR,Pay2Life -SVar:PayRR:DB$ GainControl | Defined$ Self | NewController$ TriggeredPlayer | UnlessCost$ R R | UnlessPayer$ TriggeredPlayer | UnlessSwitched$ True | UnlessAI$ OnlyDontControl | SpellDescription$ Pay R R to gain control of CARDNAME -SVar:Pay2Life:DB$ GainControl | Defined$ Self | NewController$ TriggeredPlayer | UnlessCost$ PayLife<2> | UnlessPayer$ TriggeredPlayer | UnlessSwitched$ True | UnlessAI$ OnlyDontControl | SpellDescription$ Pay 2 life to gain control of CARDNAME +SVar:PayRR:DB$ GainControl | Defined$ Self | NewController$ TriggeredPlayer | UnlessCost$ R R | UnlessPayer$ TriggeredPlayer | UnlessSwitched$ True | UnlessAI$ OnlyDontControl | SpellDescription$ Pay R R to gain control of CARDNAME. +SVar:Pay2Life:DB$ GainControl | Defined$ Self | NewController$ TriggeredPlayer | UnlessCost$ PayLife<2> | UnlessPayer$ TriggeredPlayer | UnlessSwitched$ True | UnlessAI$ OnlyDontControl | SpellDescription$ Pay 2 life to gain control of CARDNAME. Oracle:Flying\nAt the beginning of each player's upkeep, that player may pay {R}{R} or 2 life. If the player does, they gain control of Emberwilde Djinn. diff --git a/forge-gui/res/cardsfolder/e/emrakuls_evangel.txt b/forge-gui/res/cardsfolder/e/emrakuls_evangel.txt index 8a9928b3275..712b1b82800 100644 --- a/forge-gui/res/cardsfolder/e/emrakuls_evangel.txt +++ b/forge-gui/res/cardsfolder/e/emrakuls_evangel.txt @@ -2,7 +2,7 @@ Name:Emrakul's Evangel ManaCost:2 G Types:Creature Human Horror PT:3/2 -A:AB$ Token | Cost$ T Sac Sac<1/CARDNAME> | TokenAmount$ Y | TokenScript$ c_3_2_eldrazi_horror | TokenOwner$ You | SpellDescription$ Create a 3/2 colorless Eldrazi Horror creature token for each creature sacrificed this way. | CostDesc$ {T}, Sacrifice CARDNAME and any number of other non-Eldrazi creatures: +A:AB$ Token | Cost$ T Sac Sac<1/CARDNAME> | CostDesc$ {T}, Sacrifice CARDNAME and any number of other non-Eldrazi creatures: | TokenAmount$ Y | TokenScript$ c_3_2_eldrazi_horror | TokenOwner$ You | SpellDescription$ Create a 3/2 colorless Eldrazi Horror creature token for each creature sacrificed this way. SVar:Y:Sacrificed$Valid Creature SVar:X:Count$xPaid DeckHints:Ability$Token & Type$Eldrazi|Horror diff --git a/forge-gui/res/cardsfolder/e/enervate.txt b/forge-gui/res/cardsfolder/e/enervate.txt index 652658eeb57..27745feb767 100644 --- a/forge-gui/res/cardsfolder/e/enervate.txt +++ b/forge-gui/res/cardsfolder/e/enervate.txt @@ -1,7 +1,7 @@ Name:Enervate ManaCost:1 U Types:Instant -A:SP$ Tap | TgtPrompt$ Choose target artifact, creature or land | ValidTgts$ Artifact,Creature,Land | SpellDescription$ Tap target artifact, creature or land. Draw a card at the beginning of next turn's upkeep | SubAbility$ DelTrigSlowtrip +A:SP$ Tap | TgtPrompt$ Choose target artifact, creature or land | ValidTgts$ Artifact,Creature,Land | SpellDescription$ Tap target artifact, creature or land. Draw a card at the beginning of next turn's upkeep. | SubAbility$ DelTrigSlowtrip SVar:DelTrigSlowtrip:DB$ DelayedTrigger | NextTurn$ True | Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | Execute$ DrawSlowtrip | TriggerDescription$ Draw a card. SVar:DrawSlowtrip:DB$ Draw | NumCards$ 1 | Defined$ You AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/e/environmental_sciences.txt b/forge-gui/res/cardsfolder/e/environmental_sciences.txt index 5adaa38dd2b..ec41b822cb2 100644 --- a/forge-gui/res/cardsfolder/e/environmental_sciences.txt +++ b/forge-gui/res/cardsfolder/e/environmental_sciences.txt @@ -3,5 +3,5 @@ ManaCost:2 Types:Sorcery Lesson A:SP$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic | ChangeNum$ 1 | SubAbility$ DBGainLife | SpellDescription$ Search your library for a basic land card, reveal it, put it into your hand, then shuffle. You gain 2 life. SVar:DBGainLife:DB$ GainLife | LifeAmount$ 2 -DeckHas:Ability$GainLife +DeckHas:Ability$LifeGain Oracle:Search your library for a basic land card, reveal it, put it into your hand, then shuffle. You gain 2 life. diff --git a/forge-gui/res/cardsfolder/e/erhnam_djinn.txt b/forge-gui/res/cardsfolder/e/erhnam_djinn.txt index b4496126960..4d128e0f7ae 100644 --- a/forge-gui/res/cardsfolder/e/erhnam_djinn.txt +++ b/forge-gui/res/cardsfolder/e/erhnam_djinn.txt @@ -4,5 +4,5 @@ Types:Creature Djinn PT:4/5 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ At the beginning of your upkeep, target non-Wall creature an opponent controls gains forestwalk until your next upkeep. (It can't be blocked as long as defending player controls a Forest.) SVar:TrigPump:DB$ Pump | ValidTgts$ Creature.nonWall+OppCtrl | TgtPrompt$ Select target non-Wall creature an opponent controls | KW$ Landwalk:Forest | Duration$ UntilYourNextUpkeep -DeckHas:Ability$Forestwalk +DeckHas:Keyword$Forestwalk Oracle:At the beginning of your upkeep, target non-Wall creature an opponent controls gains forestwalk until your next upkeep. (It can't be blocked as long as defending player controls a Forest.) diff --git a/forge-gui/res/cardsfolder/e/erosion.txt b/forge-gui/res/cardsfolder/e/erosion.txt index f2e8c896e71..95f5137c9d9 100644 --- a/forge-gui/res/cardsfolder/e/erosion.txt +++ b/forge-gui/res/cardsfolder/e/erosion.txt @@ -5,6 +5,6 @@ K:Enchant land A:SP$ Attach | Cost$ U U U | ValidTgts$ Land | AILogic$ Curse T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player.EnchantedController | TriggerZones$ Battlefield | Execute$ TrigDestroy | TriggerDescription$ At the beginning of the upkeep of enchanted land's controller, destroy that land unless that player pays {1} or 1 life. SVar:TrigDestroy:DB$ GenericChoice | Choices$ Pay1,Pay1Life | AILogic$ PayUnlessCost | Defined$ TriggeredPlayer -SVar:Pay1:DB$ Destroy | Defined$ Enchanted | UnlessCost$ 1 | UnlessPayer$ TriggeredPlayer | SpellDescription$ Destroy enchanted land unless you pay {1} -SVar:Pay1Life:DB$ Destroy | Defined$ Enchanted | UnlessCost$ PayLife<1> | UnlessPayer$ TriggeredPlayer | SpellDescription$ Destroy enchanted land unless you pay 1 life +SVar:Pay1:DB$ Destroy | Defined$ Enchanted | UnlessCost$ 1 | UnlessPayer$ TriggeredPlayer | SpellDescription$ Destroy enchanted land unless you pay {1}. +SVar:Pay1Life:DB$ Destroy | Defined$ Enchanted | UnlessCost$ PayLife<1> | UnlessPayer$ TriggeredPlayer | SpellDescription$ Destroy enchanted land unless you pay 1 life. Oracle:Enchant land\nAt the beginning of the upkeep of enchanted land's controller, destroy that land unless that player pays {1} or 1 life. diff --git a/forge-gui/res/cardsfolder/e/etched_host_doombringer.txt b/forge-gui/res/cardsfolder/e/etched_host_doombringer.txt index 3640737ce6d..6e5116d4cdb 100644 --- a/forge-gui/res/cardsfolder/e/etched_host_doombringer.txt +++ b/forge-gui/res/cardsfolder/e/etched_host_doombringer.txt @@ -6,7 +6,7 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S SVar:TrigCharm:DB$ Charm | Choices$ Drain,Battle SVar:Drain:DB$ LoseLife | ValidTgts$ Opponent | LifeAmount$ 2 | SubAbility$ DBGainLife | SpellDescription$ Target opponent loses 2 life and you gain 2 life. SVar:DBGainLife:DB$ GainLife | LifeAmount$ 2 | StackDescription$ None -SVar:Battle:DB$ AddOrRemoveCounter | ValidTgts$ Battle | RemoveConditionSVar$ Targeted$Valid Battle.OppProtect | CounterType$ DEFENSE | CounterNum$ 3 | StackDescription$ REP Choose target battle. _ & it_{c:Targeted} | SpellDescription$ Choose target battle. If an opponent protects it, remove three defense counters from it. Otherwise, put three defense counters on it. +SVar:Battle:DB$ AddOrRemoveCounter | ValidTgts$ Battle | RemoveConditionSVar$ Targeted$Valid Battle.OppProtect | CounterType$ DEFENSE | CounterNum$ 3 | StackDescription$ REP Choose target battle_{p:You} chooses {c:Targeted} & remove_{p:You} removes & put_{p:You} puts | SpellDescription$ Choose target battle. If an opponent protects it, remove three defense counters from it. Otherwise, put three defense counters on it. DeckHas:Ability$LifeGain DeckHints:Type$Battle Oracle:When Etched Host Doombringer enters, choose one —\n• Target opponent loses 2 life and you gain 2 life.\n• Choose target battle. If an opponent protects it, remove three defense counters from it. Otherwise, put three defense counters on it. diff --git a/forge-gui/res/cardsfolder/e/eureka.txt b/forge-gui/res/cardsfolder/e/eureka.txt index 0c5c29572bf..110337eed18 100644 --- a/forge-gui/res/cardsfolder/e/eureka.txt +++ b/forge-gui/res/cardsfolder/e/eureka.txt @@ -5,9 +5,9 @@ A:SP$ Repeat | RepeatSubAbility$ ResetCheck | RepeatCheckSVar$ NumPlayerGiveup | SVar:ResetCheck:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ Number | Expression$ 0 | SubAbility$ DBRepeatChoice SVar:DBRepeatChoice:DB$ RepeatEach | StartingWith$ You | RepeatSubAbility$ DBChoice | RepeatPlayers$ Player SVar:DBChoice:DB$ GenericChoice | Choices$ DBCheckHand,DBNoChange | Defined$ Player.IsRemembered -SVar:DBCheckHand:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ CountSVar | Expression$ NumPlayerGiveup/Plus.1 | ConditionCheckSVar$ CheckHand | ConditionSVarCompare$ EQ0 | SubAbility$ DBChoose | SpellDescription$ Choose a permanent to put onto the battlefield +SVar:DBCheckHand:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ CountSVar | Expression$ NumPlayerGiveup/Plus.1 | ConditionCheckSVar$ CheckHand | ConditionSVarCompare$ EQ0 | SubAbility$ DBChoose | SpellDescription$ Choose a permanent to put onto the battlefield. SVar:DBChoose:DB$ ChangeZone | DefinedPlayer$ Player.IsRemembered | Origin$ Hand | Destination$ Battlefield | ChangeType$ Permanent | ChangeNum$ 1 | ConditionCheckSVar$ CheckHand | ConditionSVarCompare$ GE1 -SVar:DBNoChange:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ CountSVar | Expression$ NumPlayerGiveup/Plus.1 | SpellDescription$ Do not put a permanent onto the battlefield +SVar:DBNoChange:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ CountSVar | Expression$ NumPlayerGiveup/Plus.1 | SpellDescription$ Do not put a permanent onto the battlefield. SVar:FinalReset:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ Number | Expression$ 0 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:NumPlayerGiveup:Number$0 diff --git a/forge-gui/res/cardsfolder/e/euru_acorn_scrounger.txt b/forge-gui/res/cardsfolder/e/euru_acorn_scrounger.txt index c382198b507..09c5c466c94 100644 --- a/forge-gui/res/cardsfolder/e/euru_acorn_scrounger.txt +++ b/forge-gui/res/cardsfolder/e/euru_acorn_scrounger.txt @@ -2,7 +2,7 @@ Name:Euru, Acorn Scrounger ManaCost:2 B G Types:Legendary Creature Squirrel Soldier PT:3/3 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigImmediateTrig | TriggerDescription$When CARDNAME enters, you may forage. When you do, conjure a card named Chitterspitter onto the battlefield. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigImmediateTrig | TriggerDescription$ When CARDNAME enters, you may forage. When you do, conjure a card named Chitterspitter onto the battlefield. SVar:TrigImmediateTrig:AB$ ImmediateTrigger | Cost$ Forage | Execute$ TrigConjure | SpellDescription$ When you do, conjure a card named Chitterspitter onto the battlefield. SVar:TrigConjure:DB$ MakeCard | Name$ Chitterspitter | TokenCard$ True | Zone$ Battlefield T:Mode$ DamageDoneOnce | ValidSource$ Squirrel.YouCtrl | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigPutCounterAll | TriggerZones$ Battlefield | TriggerDescription$ Whenever one or more Squirrels you control deal combat damage to a player, you may sacrifice a token. If you do, put an acorn counter on each permanent you control named Chitterspitter. diff --git a/forge-gui/res/cardsfolder/f/ferris_wheel.txt b/forge-gui/res/cardsfolder/f/ferris_wheel.txt index 9b0b76da22f..5c9a87e6bbd 100644 --- a/forge-gui/res/cardsfolder/f/ferris_wheel.txt +++ b/forge-gui/res/cardsfolder/f/ferris_wheel.txt @@ -3,9 +3,9 @@ ManaCost:no cost Types:Artifact Attraction Lights:4 5 6 K:Visit:TrigPhaseOut -SVar:TrigPhaseOut:DB$ Phases | ValidTgts$ Creature.IsNotRemembered | RememberAffected$ True | WontPhaseInNormal$ True | SubAbility$ DBEffect | TgtPrompt$ Select target creature that hasn't been phased out by Ferris Wheel | SpellDescription$ Visit — Choose target creature that hasn't been phased out with CARDNAME. That creature phases out until you roll a 3 or less while rolling to visit your Attractions. +SVar:TrigPhaseOut:DB$ Phases | ValidTgts$ Creature.IsNotRemembered | RememberAffected$ True | WontPhaseInNormal$ True | SubAbility$ DBEffect | TgtPrompt$ Select target creature that hasn't been phased out by CARDNAME | SpellDescription$ Visit — Choose target creature that hasn't been phased out with CARDNAME. That creature phases out until you roll a 3 or less while rolling to visit your Attractions. SVar:DBEffect:DB$ Effect | Triggers$ TrigComeBack | RememberObjects$ Remembered | Duration$ Permanent -SVar:TrigComeBack:Mode$ RolledDie | TriggerZones$ Command | Execute$ TrigPhaseIn | Static$ True | ValidResult$ LE3 | RolledToVisitAttractions$ True | ValidPlayer$ You +SVar:TrigComeBack:Mode$ RolledDie | TriggerZones$ Command | Execute$ TrigPhaseIn | Static$ True | ValidResult$ LE3 | RolledToVisitAttractions$ True | ValidPlayer$ You SVar:TrigPhaseIn:DB$ Phases | Defined$ Remembered | PhaseInOrOut$ True | SubAbility$ DBExileSelf SVar:DBExileSelf:DB$ ChangeZone | Origin$ Command | Destination$ Exile | Defined$ Self T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigReset | Static$ True diff --git a/forge-gui/res/cardsfolder/f/fiery_gambit.txt b/forge-gui/res/cardsfolder/f/fiery_gambit.txt index 69d3b6afc39..c06e140ab45 100644 --- a/forge-gui/res/cardsfolder/f/fiery_gambit.txt +++ b/forge-gui/res/cardsfolder/f/fiery_gambit.txt @@ -3,7 +3,7 @@ ManaCost:2 R Types:Sorcery # Target a creature for three damage A:SP$ Pump | ValidTgts$ Creature | TgtPrompt$ Choose target creature for 3 damage | SubAbility$ RepeatFlip | StackDescription$ None | SpellDescription$ Flip a coin until you lose a flip or choose to stop flipping. If you lose a flip, CARDNAME has no effect. If you win one or more flips, CARDNAME deals 3 damage to target creature. If you win two or more flips, CARDNAME deals 6 damage to each opponent. If you win three or more flips, draw nine cards and untap all lands you control. -# Repeat Flip +# Repeat flip SVar:RepeatFlip:DB$ Repeat | RepeatSubAbility$ FlipAgain | RepeatCheckSVar$ Loss | RepeatSVarCompare$ EQ0 | RepeatOptional$ True | SubAbility$ DamageCreature SVar:FlipAgain:DB$ FlipACoin | WinSubAbility$ IncrementWins | LoseSubAbility$ IncrementLoss SVar:IncrementWins:DB$ StoreSVar | SVar$ Wins | Type$ CountSVar | Expression$ Wins/Plus.1 @@ -13,9 +13,9 @@ SVar:ResetWins:DB$ StoreSVar | SVar$ Wins | Type$ Number | Expression$ 0 SVar:DamageCreature:DB$ DealDamage | Defined$ Targeted | NumDmg$ 3 | ConditionCheckSVar$ Wins | ConditionSVarCompare$ GE1 | SubAbility$ DamageOpponents # Damage each opponent SVar:DamageOpponents:DB$ DealDamage | Defined$ Player.Opponent | NumDmg$ 6 | ConditionCheckSVar$ Wins | ConditionSVarCompare$ GE2 | SubAbility$ DrawNine -# Draw Nine Cards +# Draw nine cards SVar:DrawNine:DB$ Draw | Defined$ You | NumCards$ 9 | ConditionCheckSVar$ Wins | ConditionSVarCompare$ GE3 | SubAbility$ UntapLands -# Untap Lands +# Untap lands SVar:UntapLands:DB$ UntapAll | ValidCards$ Land.YouCtrl | ConditionCheckSVar$ Wins | ConditionSVarCompare$ GE3 SVar:Wins:Number$0 SVar:Loss:Number$0 diff --git a/forge-gui/res/cardsfolder/f/flame_fusillade.txt b/forge-gui/res/cardsfolder/f/flame_fusillade.txt index 1cefb66ebd8..7e9f600d89f 100644 --- a/forge-gui/res/cardsfolder/f/flame_fusillade.txt +++ b/forge-gui/res/cardsfolder/f/flame_fusillade.txt @@ -2,6 +2,6 @@ Name:Flame Fusillade ManaCost:3 R Types:Sorcery A:SP$ AnimateAll | ValidCards$ Permanent.YouCtrl | Abilities$ ABDamage | SpellDescription$ Until end of turn, permanents you control gain "{T}: This permanent deals 1 damage to any target." -SVar:ABDamage:AB$ DealDamage | Cost$ T | NumDmg$ 1 | ValidTgts$ Any | SpellDescription$ CARDNAME deals 1 damage to any target +SVar:ABDamage:AB$ DealDamage | Cost$ T | NumDmg$ 1 | ValidTgts$ Any | SpellDescription$ CARDNAME deals 1 damage to any target. AI:RemoveDeck:All Oracle:Until end of turn, permanents you control gain "{T}: This permanent deals 1 damage to any target." diff --git a/forge-gui/res/cardsfolder/f/fly.txt b/forge-gui/res/cardsfolder/f/fly.txt index 0307dcd5dfa..b43dbbed411 100644 --- a/forge-gui/res/cardsfolder/f/fly.txt +++ b/forge-gui/res/cardsfolder/f/fly.txt @@ -4,6 +4,6 @@ Types:Enchantment Aura K:Enchant creature A:SP$ Attach | Cost$ U | ValidTgts$ Creature | AILogic$ Pump S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Flying | AddTrigger$ TrigDamageDone | Description$ Enchanted creature has flying and "Whenever this creature deals combat damage to a player, venture into the dungeon." (Enter the first room or advance to the next room.) -SVar:TrigDamageDone:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigVenture | TriggerDescription$ Whenever this creature deals combat damage to a player, venture into the dungeon. +SVar:TrigDamageDone:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigVenture | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, venture into the dungeon. SVar:TrigVenture:DB$ Venture Oracle:Enchant creature\nEnchanted creature has flying and "Whenever this creature deals combat damage to a player, venture into the dungeon." (Enter the first room or advance to the next room.) diff --git a/forge-gui/res/cardsfolder/f/forbidden_ritual.txt b/forge-gui/res/cardsfolder/f/forbidden_ritual.txt index 53469145040..a39f629c185 100644 --- a/forge-gui/res/cardsfolder/f/forbidden_ritual.txt +++ b/forge-gui/res/cardsfolder/f/forbidden_ritual.txt @@ -4,8 +4,8 @@ Types:Sorcery A:SP$ Repeat | ValidTgts$ Opponent | RepeatSubAbility$ DBSac | RepeatOptional$ True | StackDescription$ SpellDescription | SpellDescription$ Sacrifice a nontoken permanent. If you do, target opponent loses 2 life unless that player sacrifices a permanent or discards a card. You may repeat this process any number of times. SVar:DBSac:DB$ Sacrifice | SacValid$ Permanent.nonToken | SacMessage$ nontoken permanent | RememberSacrificed$ True | SubAbility$ DBGenericChoice SVar:DBGenericChoice:DB$ GenericChoice | Choices$ PaySac,PayDiscard | Defined$ Targeted | AILogic$ PayUnlessCost | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ GE1 | SubAbility$ DBCleanup -SVar:PaySac:DB$ LoseLife | LifeAmount$ 2 | Defined$ Targeted | UnlessCost$ Sac<1/Permanent> | UnlessPayer$ Targeted | UnlessAI$ LifeLE2 | SpellDescription$ You lose 2 life unless you sacrifice a permanent -SVar:PayDiscard:DB$ LoseLife | LifeAmount$ 2 | Defined$ Targeted | UnlessCost$ Discard<1/Card> | UnlessPayer$ Targeted | UnlessAI$ LifeLE2 | SpellDescription$ You lose 2 life unless you discard a card +SVar:PaySac:DB$ LoseLife | LifeAmount$ 2 | Defined$ Targeted | UnlessCost$ Sac<1/Permanent> | UnlessPayer$ Targeted | UnlessAI$ LifeLE2 | SpellDescription$ You lose 2 life unless you sacrifice a permanent. +SVar:PayDiscard:DB$ LoseLife | LifeAmount$ 2 | Defined$ Targeted | UnlessCost$ Discard<1/Card> | UnlessPayer$ Targeted | UnlessAI$ LifeLE2 | SpellDescription$ You lose 2 life unless you discard a card. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True AI:RemoveDeck:All AI:RemoveDeck:Random diff --git a/forge-gui/res/cardsfolder/f/foul_imp.txt b/forge-gui/res/cardsfolder/f/foul_imp.txt index 39587b5244d..2ca039419c0 100644 --- a/forge-gui/res/cardsfolder/f/foul_imp.txt +++ b/forge-gui/res/cardsfolder/f/foul_imp.txt @@ -3,7 +3,6 @@ ManaCost:B B Types:Creature Imp PT:2/2 K:Flying -# Note: The Executing Ability needs to be a Drawback for the AI to properly test it's conditions T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigLoseLife | TriggerDescription$ When CARDNAME enters, you lose 2 life. SVar:TrigLoseLife:DB$ LoseLife | LifeAmount$ 2 Oracle:Flying\nWhen Foul Imp enters, you lose 2 life. diff --git a/forge-gui/res/cardsfolder/f/fractal_harness.txt b/forge-gui/res/cardsfolder/f/fractal_harness.txt index 605d9cb1391..6560b649e07 100644 --- a/forge-gui/res/cardsfolder/f/fractal_harness.txt +++ b/forge-gui/res/cardsfolder/f/fractal_harness.txt @@ -9,7 +9,7 @@ SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Count$xPaid T:Mode$ Attacks | ValidCard$ Card.EquippedBy | Execute$ TrigDoubleCounters | TriggerDescription$ Whenever equipped creature attacks, double the number of +1/+1 counters on it. SVar:TrigDoubleCounters:DB$ MultiplyCounter | Defined$ TriggeredAttackerLKICopy | CounterType$ P1P1 -S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddSVar$ AE | Secondary$ True | Description$ Add attack effect to attached +S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddSVar$ AE SVar:AE:SVar:HasAttackEffect:TRUE K:Equip:2 DeckHas:Ability$Token|Counters diff --git a/forge-gui/res/cardsfolder/f/frodo_determined_hero.txt b/forge-gui/res/cardsfolder/f/frodo_determined_hero.txt index afd304fe9a9..81d06d79ba5 100644 --- a/forge-gui/res/cardsfolder/f/frodo_determined_hero.txt +++ b/forge-gui/res/cardsfolder/f/frodo_determined_hero.txt @@ -3,7 +3,7 @@ ManaCost:1 W Types:Legendary Creature Halfling Warrior PT:2/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBAttach | OptionalDecider$ You | TriggerDescription$ Whenever CARDNAME enters or attacks, you may attach target Equipment you control with mana value 2 or 3 to NICKNAME. -T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ DBAttach | TriggerZones$ Battlefield | OptionalDecider$ You | Secondary$ True | TriggerDescription$ Whenever CARDNAME attacks, you may attach target Equipment you control with mana value 2 or 3 to NICKNAME +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ DBAttach | TriggerZones$ Battlefield | OptionalDecider$ You | Secondary$ True | TriggerDescription$ Whenever CARDNAME attacks, you may attach target Equipment you control with mana value 2 or 3 to NICKNAME. SVar:DBAttach:DB$ Attach | ValidTgts$ Equipment.cmcEQ2+YouCtrl,Equipment.cmcEQ3+YouCtrl | Object$ Targeted | Defined$ Self R:Event$ DamageDone | ActiveZones$ Battlefield | Prevent$ True | ValidTarget$ Card.Self | PlayerTurn$ True | Description$ As long as it's your turn, prevent all damage that would be dealt to NICKNAME. DeckHints:Type$Equipment diff --git a/forge-gui/res/cardsfolder/g/gabriel_angelfire.txt b/forge-gui/res/cardsfolder/g/gabriel_angelfire.txt index d75201c4c6e..5fdefa7cc6b 100644 --- a/forge-gui/res/cardsfolder/g/gabriel_angelfire.txt +++ b/forge-gui/res/cardsfolder/g/gabriel_angelfire.txt @@ -5,5 +5,5 @@ PT:4/4 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigChoice | TriggerDescription$ At the beginning of your upkeep, choose flying, first strike, trample, or rampage 3. CARDNAME gains that ability until your next upkeep. SVar:TrigChoice:DB$ Pump | Defined$ Self | KWChoice$ Flying,First Strike,Trample,Rampage:3 | Duration$ UntilYourNextUpkeep AI:RemoveDeck:All -DeckHas:Keyword$Rampage|Trample|FirstStrike|Flying +DeckHas:Keyword$Rampage|Trample|First Strike|Flying Oracle:At the beginning of your upkeep, choose flying, first strike, trample, or rampage 3. Gabriel Angelfire gains that ability until your next upkeep. (Whenever a creature with rampage 3 becomes blocked, it gets +3/+3 until end of turn for each creature blocking it beyond the first.) diff --git a/forge-gui/res/cardsfolder/g/galvanic_juggernaut.txt b/forge-gui/res/cardsfolder/g/galvanic_juggernaut.txt index d6eb2f52879..b5e12e6dd21 100644 --- a/forge-gui/res/cardsfolder/g/galvanic_juggernaut.txt +++ b/forge-gui/res/cardsfolder/g/galvanic_juggernaut.txt @@ -4,6 +4,6 @@ Types:Artifact Creature Juggernaut PT:5/5 S:Mode$ MustAttack | ValidCreature$ Card.Self | Description$ CARDNAME attacks each combat if able. K:CARDNAME doesn't untap during your untap step. -T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.Other | TriggerZones$ Battlefield | Execute$ TrigUntap | TriggerDescription$ Whenever another creature dies, untap CARDNAME +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.Other | TriggerZones$ Battlefield | Execute$ TrigUntap | TriggerDescription$ Whenever another creature dies, untap CARDNAME. SVar:TrigUntap:DB$ Untap | Defined$ Self Oracle:Galvanic Juggernaut attacks each combat if able.\nGalvanic Juggernaut doesn't untap during your untap step.\nWhenever another creature dies, untap Galvanic Juggernaut. diff --git a/forge-gui/res/cardsfolder/g/garruk_the_slayer.txt b/forge-gui/res/cardsfolder/g/garruk_the_slayer.txt index 8ac786c7151..065b670adc5 100644 --- a/forge-gui/res/cardsfolder/g/garruk_the_slayer.txt +++ b/forge-gui/res/cardsfolder/g/garruk_the_slayer.txt @@ -8,5 +8,5 @@ A:AB$ Pump | Cost$ AddCounter<4/LOYALTY> | Planeswalker$ True | NumAtt$ +1 | Num A:AB$ Destroy | Cost$ SubCounter<10/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature | TgtPrompt$ Select target creature | SubAbility$ DBAddLoyalty | SpellDescription$ Destroy target creature. Put loyalty counters on CARDNAME equal to that creature's toughness. SVar:DBAddLoyalty:DB$ PutCounter | Defined$ Self | CounterType$ LOYALTY | CounterNum$ X SVar:X:Targeted$CardToughness -A:AB$ DestroyAll | Cost$ SubCounter<25/LOYALTY> | Planeswalker$ True | Ultimate$ True | ValidCards$ Creature.YouDontCtrl | SpellDescription$ Destroy all creatures Garruk the Slayer doesn't control. +A:AB$ DestroyAll | Cost$ SubCounter<25/LOYALTY> | Planeswalker$ True | Ultimate$ True | ValidCards$ Creature.YouDontCtrl | SpellDescription$ Destroy all creatures CARDNAME doesn't control. Oracle:[0]: Put a 2/2 green Wolf creature token onto the battlefield.\n[+4]: Target Wolf creature gets +1/+0 and gains deathtouch until end of turn.\n[-10]: Destroy target creature. Put loyalty counters on Garruk the Slayer equal to that creature's toughness.\n[-25]: Destroy all creatures Garruk the Slayer doesn't control. diff --git a/forge-gui/res/cardsfolder/g/garruks_lost_wolf_hey_has_anyone_seen_garruk.txt b/forge-gui/res/cardsfolder/g/garruks_lost_wolf_hey_has_anyone_seen_garruk.txt index d2e9957ced7..a046d4c1aea 100644 --- a/forge-gui/res/cardsfolder/g/garruks_lost_wolf_hey_has_anyone_seen_garruk.txt +++ b/forge-gui/res/cardsfolder/g/garruks_lost_wolf_hey_has_anyone_seen_garruk.txt @@ -2,11 +2,11 @@ Name:Garruk's Lost Wolf ManaCost:3 G Types:Creature Wolf PT:2/2 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a Huntsman Role token attached to another target creature you control. (Enchanted creature gets +1/+1 and has "{T}: Add {G}") +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a Huntsman Role token attached to another target creature you control. (Enchanted creature gets +1/+1 and has "{T}: Add {G}.") SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_huntsman | TokenOwner$ You | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl+Other | TgtPrompt$ Select another target creature you control DeckHas:Ability$Mill|Graveyard|Token & Type$Aura|Enchantment|Role AlternateMode:Adventure -Oracle:When Garruk's Lost Wolf enters the battlefield, create a Huntsman Role token attached to another target creature you control. (Enchanted creature gets +1/+1 and has "{T}: Add {G}") +Oracle:When Garruk's Lost Wolf enters the battlefield, create a Huntsman Role token attached to another target creature you control. (Enchanted creature gets +1/+1 and has "{T}: Add {G}.") ALTERNATE diff --git a/forge-gui/res/cardsfolder/g/gates_of_istfell.txt b/forge-gui/res/cardsfolder/g/gates_of_istfell.txt index 53d613a7eee..09da2212316 100644 --- a/forge-gui/res/cardsfolder/g/gates_of_istfell.txt +++ b/forge-gui/res/cardsfolder/g/gates_of_istfell.txt @@ -6,5 +6,5 @@ SVar:ETBTapped:DB$ Tap | Defined$ Self | ETB$ True A:AB$ Mana | Cost$ T | Produced$ W | SpellDescription$ Add {W}. A:AB$ GainLife | Cost$ 2 W U U T Sac<1/CARDNAME> | Defined$ You | LifeAmount$ 2 | SubAbility$ DBDraw | SpellDescription$ You gain 2 life and draw two cards. SVar:DBDraw:DB$ Draw | NumCards$ 2 -DeckHas:Ability$GainLife|Sacrifice +DeckHas:Ability$LifeGain|Sacrifice Oracle:Gates of Istfell enters tapped.\n{T}: Add {W}.\n{2}{W}{U}{U}, {T}, Sacrifice Gates of Istfell: You gain 2 life and draw two cards. diff --git a/forge-gui/res/cardsfolder/g/ghost_lantern_bind_spirit.txt b/forge-gui/res/cardsfolder/g/ghost_lantern_bind_spirit.txt index f7f57c3cde3..2169cab7650 100644 --- a/forge-gui/res/cardsfolder/g/ghost_lantern_bind_spirit.txt +++ b/forge-gui/res/cardsfolder/g/ghost_lantern_bind_spirit.txt @@ -13,6 +13,6 @@ ALTERNATE Name:Bind Spirit ManaCost:1 B Types:Instant Adventure -A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature in your graveyard | SpellDescription$ Return target creature card from your graveyard to your hand +A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature in your graveyard | SpellDescription$ Return target creature card from your graveyard to your hand. DeckHas:Ability$Graveyard Oracle:Return target creature card from your graveyard to your hand. diff --git a/forge-gui/res/cardsfolder/g/gibbering_barricade.txt b/forge-gui/res/cardsfolder/g/gibbering_barricade.txt index 1afcad8b558..4983049ed60 100644 --- a/forge-gui/res/cardsfolder/g/gibbering_barricade.txt +++ b/forge-gui/res/cardsfolder/g/gibbering_barricade.txt @@ -5,6 +5,6 @@ PT:2/4 K:Defender A:AB$ GainLife | Cost$ 2 B Sac<1/Creature> | LifeAmount$ 1 | SubAbility$ DBDraw | SpellDescription$ You gain 1 life and draw a card. SVar:DBDraw:DB$ Draw -DeckHas:Ability$Sacrifice|Lifegain +DeckHas:Ability$Sacrifice|LifeGain DeckHints:Type$Creature Oracle:Defender\n{2}{B}, Sacrifice a creature: You gain 1 life and draw a card. diff --git a/forge-gui/res/cardsfolder/g/gideons_company.txt b/forge-gui/res/cardsfolder/g/gideons_company.txt index 3dce174442e..af135234459 100644 --- a/forge-gui/res/cardsfolder/g/gideons_company.txt +++ b/forge-gui/res/cardsfolder/g/gideons_company.txt @@ -4,7 +4,7 @@ Types:Creature Human Soldier PT:3/3 T:Mode$ LifeGained | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever you gain life, you put two +1/+1 counters on CARDNAME. SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 2 -A:AB$ PutCounter | Cost$ 3 W | ValidTgts$ Planeswalker.Gideon | TgtPrompt$ Select target Gideon planeswalker. | CounterType$ LOYALTY | CounterNum$ 1 | SpellDescription$ Put a loyalty counter on target Gideon Planeswalker +A:AB$ PutCounter | Cost$ 3 W | ValidTgts$ Planeswalker.Gideon | TgtPrompt$ Select target Gideon planeswalker. | CounterType$ LOYALTY | CounterNum$ 1 | SpellDescription$ Put a loyalty counter on target Gideon planeswalker. DeckHints:Ability$LifeGain & Type$Gideon DeckHas:Ability$Counters Oracle:Whenever you gain life, put two +1/+1 counters on Gideon's Company.\n{3}{W}: Put a loyalty counter on target Gideon planeswalker. diff --git a/forge-gui/res/cardsfolder/g/glowing_one.txt b/forge-gui/res/cardsfolder/g/glowing_one.txt index 1cc6af9b117..37cb25edf4a 100644 --- a/forge-gui/res/cardsfolder/g/glowing_one.txt +++ b/forge-gui/res/cardsfolder/g/glowing_one.txt @@ -7,5 +7,5 @@ T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | Execute$ Tri SVar:TrigRadiation:DB$ Radiation | Defined$ TriggeredTarget | Num$ 4 T:Mode$ Milled | ValidPlayer$ Player | ValidCard$ Card.nonLand | TriggerZones$ Battlefield | Execute$ TrigGainLife | TriggerDescription$ Whenever a player mills a nonland card, you gain 1 life. SVar:TrigGainLife:DB$ GainLife | LifeAmount$ 1 -DeckHas:Ability$LifeLink +DeckHas:Ability$LifeGain Oracle:Deathtouch\nWhenever Glowing One deals combat damage to a player, they get four rad counters.\nWhenever a player mills a nonland card, you gain 1 life. diff --git a/forge-gui/res/cardsfolder/g/gobland.txt b/forge-gui/res/cardsfolder/g/gobland.txt index 3976404419d..adb3dcd1d32 100644 --- a/forge-gui/res/cardsfolder/g/gobland.txt +++ b/forge-gui/res/cardsfolder/g/gobland.txt @@ -4,4 +4,4 @@ Colors:red Types:Land Creature Mountain Goblin PT:2/1 K:CARDNAME can't block. -Oracle:(Gobland isn’t a spell, it's affected by summoning sickness, and it has "{T}: Add {R}.")\nGobland can’t block. +Oracle:(Gobland isn't a spell, it's affected by summoning sickness, and it has "{T}: Add {R}.")\nGobland can't block. diff --git a/forge-gui/res/cardsfolder/g/goblin_picker.txt b/forge-gui/res/cardsfolder/g/goblin_picker.txt index 9011fc5b788..a0247576c2e 100644 --- a/forge-gui/res/cardsfolder/g/goblin_picker.txt +++ b/forge-gui/res/cardsfolder/g/goblin_picker.txt @@ -2,6 +2,6 @@ Name:Goblin Picker ManaCost:1 R Types:Creature Goblin PT:2/2 -A:AB$ Draw | Cost$ R T Discard<1/Card> | NumCards$ 1 | Defined$ You | SpellDescription$ Draw a card +A:AB$ Draw | Cost$ R T Discard<1/Card> | NumCards$ 1 | Defined$ You | SpellDescription$ Draw a card. DeckHas:Ability$Discard Oracle:{R} ,{T}, Discard a card: Draw a card. diff --git a/forge-gui/res/cardsfolder/g/gollum_patient_plotter.txt b/forge-gui/res/cardsfolder/g/gollum_patient_plotter.txt index 3b0239b8da2..2f8ce8df6e7 100644 --- a/forge-gui/res/cardsfolder/g/gollum_patient_plotter.txt +++ b/forge-gui/res/cardsfolder/g/gollum_patient_plotter.txt @@ -4,6 +4,6 @@ Types:Legendary Creature Halfling Horror PT:3/1 T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Execute$ TrigTempt | TriggerDescription$ When CARDNAME leaves the battlefield, the Ring tempts you. SVar:TrigTempt:DB$ RingTemptsYou -A:AB$ ChangeZone | Cost$ B Sac<1/Creature> | Origin$ Graveyard | Destination$ Hand | ActivationZone$ Graveyard | SorcerySpeed$ True | SpellDescription$ Return NICKNAME from your graveyard to your hand. Activate only as a sorcery. | CostDesc$ Sacrifice a creature: +A:AB$ ChangeZone | Cost$ B Sac<1/Creature> | Origin$ Graveyard | Destination$ Hand | ActivationZone$ Graveyard | SorcerySpeed$ True | SpellDescription$ Return NICKNAME from your graveyard to your hand. Activate only as a sorcery. SVar:AIPreference:SacCost$Creature.token,Creature.cmcLE1 Oracle:When Gollum, Patient Plotter leaves the battlefield, the Ring tempts you.\n{B}, Sacrifice a creature: Return Gollum from your graveyard to your hand. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/g/gorex_the_tombshell.txt b/forge-gui/res/cardsfolder/g/gorex_the_tombshell.txt index 56c9dfc6305..10b64f62fcc 100644 --- a/forge-gui/res/cardsfolder/g/gorex_the_tombshell.txt +++ b/forge-gui/res/cardsfolder/g/gorex_the_tombshell.txt @@ -2,8 +2,8 @@ Name:Gorex, the Tombshell ManaCost:6 B B Types:Legendary Creature Zombie Turtle PT:4/4 -A:SP$ PermanentCreature | Cost$ 6 B B ExileFromGrave | AdditionalDesc$ This spell costs {2} less to cast for each card exiled this way. -S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Y | EffectZone$ All | Relative$ True | Secondary$ True | Description$ This spell costs {2} less to cast for each card exiled this way. +A:SP$ PermanentCreature | Cost$ 6 B B ExileFromGrave | AdditionalDesc$ This spell costs {2} less to cast for each card exiled this way. +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Y | EffectZone$ All | Relative$ True SVar:X:Count$xPaid SVar:Y:SVar$X/Times.2 K:Deathtouch diff --git a/forge-gui/res/cardsfolder/g/graf_rats_chittering_host.txt b/forge-gui/res/cardsfolder/g/graf_rats_chittering_host.txt index 86197ca28fa..6f9c4a703be 100644 --- a/forge-gui/res/cardsfolder/g/graf_rats_chittering_host.txt +++ b/forge-gui/res/cardsfolder/g/graf_rats_chittering_host.txt @@ -2,7 +2,7 @@ Name:Graf Rats ManaCost:1 B Types:Creature Rat PT:2/1 -T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | IsPresent$ Card.Self+YouOwn | IsPresent2$ Creature.YouCtrl+YouOwn+namedMidnight Scavengers | Execute$ Meld | TriggerDescription$ At the beginning of combat on your turn, if you both own and control Graf Rats and a creature named Midnight Scavengers, exile them, then meld them into Chittering Host. +T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | IsPresent$ Card.Self+YouOwn | IsPresent2$ Creature.YouCtrl+YouOwn+namedMidnight Scavengers | Execute$ Meld | TriggerDescription$ At the beginning of combat on your turn, if you both own and control CARDNAME and a creature named Midnight Scavengers, exile them, then meld them into Chittering Host. SVar:Meld:DB$ Meld | Name$ Chittering Host | Primary$ Graf Rats | Secondary$ Midnight Scavengers DeckHints:Name$Midnight Scavengers MeldPair:Midnight Scavengers diff --git a/forge-gui/res/cardsfolder/g/graywaters_fixer.txt b/forge-gui/res/cardsfolder/g/graywaters_fixer.txt index cffb5a2f505..ade53c0eeeb 100644 --- a/forge-gui/res/cardsfolder/g/graywaters_fixer.txt +++ b/forge-gui/res/cardsfolder/g/graywaters_fixer.txt @@ -4,5 +4,5 @@ Types:Creature Lizard Mercenary PT:4/4 S:Mode$ Continuous | EffectZone$ Battlefield | AffectedZone$ Graveyard | Affected$ Creature.Outlaw+YouCtrl | AddKeyword$ Encore:X:XAlternative$ Number$ConvertedManaCost | Description$ Each outlaw creature card in your graveyard has encore {X}, where X is its mana value. (Exile it and pay its encore cost: For each opponent, create a token copy that attacks that opponent this turn if able. They gain haste. Sacrifice them at the beginning of the next end step. Activate only as a sorcery.) DeckHas:Ability$Token|Graveyard -DeckHints:Type$Mercenary|Assassin|Warlock|Pirate|Assassin +DeckHints:Type$Mercenary|Assassin|Warlock|Pirate|Rogue Oracle:Each outlaw creature card in your graveyard has encore {X}, where X is its mana value. (Exile it and pay its encore cost: For each opponent, create a token copy that attacks that opponent this turn if able. They gain haste. Sacrifice them at the beginning of the next end step. Activate only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/g/grothama_all_devouring.txt b/forge-gui/res/cardsfolder/g/grothama_all_devouring.txt index 4432f21b13d..9b1975a182f 100644 --- a/forge-gui/res/cardsfolder/g/grothama_all_devouring.txt +++ b/forge-gui/res/cardsfolder/g/grothama_all_devouring.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Wurm PT:10/8 S:Mode$ Continuous | Affected$ Creature.Other | AddTrigger$ GrothamaAttack | AddSVar$ HasAttackEffect | Description$ Other creatures have "Whenever this creature attacks, you may have it fight CARDNAME." SVar:GrothamaAttack:Mode$ Attacks | ValidCard$ Card.Self | Execute$ GrothamaFight | OptionalDecider$ You | TriggerDescription$ Whenever this creature attacks, ABILITY. -SVar:GrothamaFight:DB$ Fight | Defined$ TriggeredAttackerLKICopy & OriginalHost | AILogic$ Grothama | SpellDescription$ You may have it fight ORIGINALHOST +SVar:GrothamaFight:DB$ Fight | Defined$ TriggeredAttackerLKICopy & OriginalHost | AILogic$ Grothama | SpellDescription$ You may have it fight ORIGINALHOST. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigRepeat | TriggerDescription$ When NICKNAME leaves the battlefield, each player draws cards equal to the amount of damage dealt to NICKNAME this turn by sources they controlled. SVar:TrigRepeat:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ TrigDraw SVar:TrigDraw:DB$ Draw | Defined$ Remembered | NumCards$ X diff --git a/forge-gui/res/cardsfolder/g/guardian_of_the_great_door.txt b/forge-gui/res/cardsfolder/g/guardian_of_the_great_door.txt index 2adac170db1..2aa19b4ac6c 100644 --- a/forge-gui/res/cardsfolder/g/guardian_of_the_great_door.txt +++ b/forge-gui/res/cardsfolder/g/guardian_of_the_great_door.txt @@ -3,6 +3,6 @@ ManaCost:W W Types:Creature Angel PT:4/4 K:Flying -A:SP$ PermanentCreature | Cost$ W W tapXType<4/Artifact;Creature;Land/artifacts, creatures, and/or lands> | CostDesc$ As an additional cost to cast this spell, tap four untapped artifacts, creatures, and/or lands you control +A:SP$ PermanentCreature | Cost$ W W tapXType<4/Artifact;Creature;Land/artifacts, creatures, and/or lands> DeckHints:Type$Artifact Oracle:As an additional cost to cast this spell, tap four untapped artifacts, creatures, and/or lands you control.\nFlying diff --git a/forge-gui/res/cardsfolder/h/hag_of_ceaseless_torment.txt b/forge-gui/res/cardsfolder/h/hag_of_ceaseless_torment.txt index ec386259880..dbc05792a0c 100644 --- a/forge-gui/res/cardsfolder/h/hag_of_ceaseless_torment.txt +++ b/forge-gui/res/cardsfolder/h/hag_of_ceaseless_torment.txt @@ -4,8 +4,8 @@ Types:Creature Hag Warlock PT:2/2 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigChoose | TriggerDescription$ At the beginning of your upkeep, each opponent loses 3 life unless that player sacrifices a nonland permanent or discards a card. SVar:TrigChoose:DB$ GenericChoice | Defined$ Opponent | TempRemember$ Chooser | Choices$ SacNonland,Discard | FallbackAbility$ LoseLifeFallback | AILogic$ PayUnlessCost -SVar:SacNonland:DB$ LoseLife | Defined$ Remembered | LifeAmount$ 3 | UnlessCost$ Sac<1/Permanent.nonLand/nonland permanent> | UnlessPayer$ Remembered | SpellDescription$ You lose 3 life unless you sacrifice a nonland permanent -SVar:Discard:DB$ LoseLife | Defined$ Remembered | LifeAmount$ 3 | UnlessCost$ Discard<1/Card> | UnlessPayer$ Remembered | SpellDescription$ You lose 3 life unless you discard a card +SVar:SacNonland:DB$ LoseLife | Defined$ Remembered | LifeAmount$ 3 | UnlessCost$ Sac<1/Permanent.nonLand/nonland permanent> | UnlessPayer$ Remembered | SpellDescription$ You lose 3 life unless you sacrifice a nonland permanent. +SVar:Discard:DB$ LoseLife | Defined$ Remembered | LifeAmount$ 3 | UnlessCost$ Discard<1/Card> | UnlessPayer$ Remembered | SpellDescription$ You lose 3 life unless you discard a card. SVar:LoseLifeFallback:DB$ LoseLife | Defined$ Remembered | LifeAmount$ 3 DeckHas:Ability$Sacrifice|Discard Oracle:At the beginning of your upkeep, each opponent loses 3 life unless that player sacrifices a nonland permanent or discards a card. diff --git a/forge-gui/res/cardsfolder/h/hamlet_captain.txt b/forge-gui/res/cardsfolder/h/hamlet_captain.txt index c4b41e5d4f0..b9bc338fd51 100644 --- a/forge-gui/res/cardsfolder/h/hamlet_captain.txt +++ b/forge-gui/res/cardsfolder/h/hamlet_captain.txt @@ -3,7 +3,7 @@ ManaCost:1 G Types:Creature Human Warrior PT:2/2 T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPumpAll | TriggerDescription$ When CARDNAME attacks or blocks, other Humans you control get +1/+1 until end of turn -T:Mode$ Blocks | ValidCard$ Card.Self | Execute$ TrigPumpAll | Secondary$ True | TriggerDescription$ When CARDNAME attacks or blocks, other Human creatures you control get +1/+1 until end of turn +T:Mode$ Blocks | ValidCard$ Card.Self | Execute$ TrigPumpAll | Secondary$ True | TriggerDescription$ When CARDNAME attacks or blocks, other Human creatures you control get +1/+1 until end of turn. SVar:TrigPumpAll:DB$ PumpAll | ValidCards$ Creature.StrictlyOther+Human+YouCtrl | NumAtt$ +1 | NumDef$ +1 DeckHints:Type$Human Oracle:Whenever Hamlet Captain attacks or blocks, other Humans you control get +1/+1 until end of turn. diff --git a/forge-gui/res/cardsfolder/h/hans_eriksson.txt b/forge-gui/res/cardsfolder/h/hans_eriksson.txt index 9d769352d68..ab237e5e72e 100644 --- a/forge-gui/res/cardsfolder/h/hans_eriksson.txt +++ b/forge-gui/res/cardsfolder/h/hans_eriksson.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Human Scout PT:1/4 T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigDig | TriggerDescription$ Whenever CARDNAME attacks, reveal the top card of your library. If it's a creature card, put it onto the battlefield tapped and attacking defending player or a planeswalker they control. Otherwise, put that card into your hand. When you put a creature card onto the battlefield this way, it fights CARDNAME. SVar:TrigDig:DB$ Dig | DigNum$ 1 | ChangeNum$ All | Optional$ True | Reveal$ True | ChangeValid$ Creature | DestinationZone$ Battlefield | DestinationZone2$ Hand | Tapped$ True | Attacking$ DefendingPlayer & Valid Planeswalker.ControlledBy DefendingPlayer | RememberChanged$ True | SubAbility$ DBImmediateTriggerCheck -SVar:DBImmediateTriggerCheck:DB$ ImmediateTrigger | Execute$ DBFight | ConditionDefined$ Remembered | ConditionPresent$ Creature | ConditionCompare$ GE1 | TriggerDescription$ When you put a creature card onto the battlefield this way, it fights CARDNAME +SVar:DBImmediateTriggerCheck:DB$ ImmediateTrigger | Execute$ DBFight | ConditionDefined$ Remembered | ConditionPresent$ Creature | ConditionCompare$ GE1 | TriggerDescription$ When you put a creature card onto the battlefield this way, it fights CARDNAME. SVar:DBFight:DB$ Fight | Defined$ Remembered & Self | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:HasAttackEffect:TRUE diff --git a/forge-gui/res/cardsfolder/h/harold_and_bob_first_numens.txt b/forge-gui/res/cardsfolder/h/harold_and_bob_first_numens.txt index 01ef1024572..47be18f67e8 100644 --- a/forge-gui/res/cardsfolder/h/harold_and_bob_first_numens.txt +++ b/forge-gui/res/cardsfolder/h/harold_and_bob_first_numens.txt @@ -7,7 +7,7 @@ K:Reach T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self+Creature | Execute$ DBReturn | TriggerDescription$ When CARDNAME dies, if it was a creature, return it to the battlefield. It's an Aura enchantment with enchant Forest you control and "Enchanted Forest has '{T}: Add three mana of any one color. You get two rad counters.'" NICKNAME loses all other abilities. SVar:DBReturn:DB$ ChangeZone | Defined$ TriggeredNewCardLKICopy | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | AnimateSubAbility$ DBAnimate SVar:DBAnimate:DB$ Animate | Defined$ Remembered | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveAllAbilities$ True | Keywords$ Enchant Forest you control | Abilities$ SPAttach | staticAbilities$ STAura | Duration$ Permanent -SVar:STAura:Mode$ Continuous | Affected$ Land.EnchantedBy | AddAbility$ ABMana | Description$ Enchanted Forest has '{T}: Add three mana of any one color. You get two rad counters.' +SVar:STAura:Mode$ Continuous | Affected$ Land.EnchantedBy | AddAbility$ ABMana | Description$ Enchanted Forest has "{T}: Add three mana of any one color. You get two rad counters." SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Forest.YouCtrl | AILogic$ Pump SVar:ABMana:AB$ Mana | Cost$ T | Produced$ Any | Amount$ 3 | SubAbility$ DBRadiation | SpellDescription$ Add three mana of any one color. You get two rad counters. SVar:DBRadiation:DB$ Radiation | Defined$ You | Num$ 2 diff --git a/forge-gui/res/cardsfolder/h/haruspex.txt b/forge-gui/res/cardsfolder/h/haruspex.txt index 77e7c5b25cb..2a88a4c74a1 100644 --- a/forge-gui/res/cardsfolder/h/haruspex.txt +++ b/forge-gui/res/cardsfolder/h/haruspex.txt @@ -4,7 +4,7 @@ Types:Creature Tyranid PT:2/2 T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.Other | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Rapacious Hunger — Whenever another creature dies, put a +1/+1 counter on CARDNAME. SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 -A:AB$ Mana | Cost$ T SubCounter | Produced$ Any | PreCostDesc$ Devouring Monster — {T} | Amount$ X | SpellDescription$ Add X mana of any one color. +A:AB$ Mana | Cost$ T SubCounter | Produced$ Any | PrecostDesc$ Devouring Monster — {T} | Amount$ X | SpellDescription$ Add X mana of any one color. SVar:X:Count$xPaid DeckHas:Ability$Counters DeckHints:Ability$Sacrifice|Counters diff --git a/forge-gui/res/cardsfolder/h/haughty_djinn.txt b/forge-gui/res/cardsfolder/h/haughty_djinn.txt index 31a0057c9dd..ddc20ec2368 100644 --- a/forge-gui/res/cardsfolder/h/haughty_djinn.txt +++ b/forge-gui/res/cardsfolder/h/haughty_djinn.txt @@ -4,7 +4,7 @@ Types:Creature Djinn PT:*/4 K:Flying S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetPower$ X | Description$ CARDNAME's power is equal to the number of instant and sorcery cards in your graveyard. -S:Mode$ ReduceCost | ValidCard$ Instant,Sorcery | Type$ Spell | Activator$ You | Amount$ 1 | Description$ Instant and sorcery spells you cast cost {1} less to cast +S:Mode$ ReduceCost | ValidCard$ Instant,Sorcery | Type$ Spell | Activator$ You | Amount$ 1 | Description$ Instant and sorcery spells you cast cost {1} less to cast. SVar:X:Count$ValidGraveyard Instant.YouOwn,Sorcery.YouOwn DeckNeeds:Type$Instant|Sorcery AI:RemoveDeck:Random diff --git a/forge-gui/res/cardsfolder/h/havengul_lich.txt b/forge-gui/res/cardsfolder/h/havengul_lich.txt index a1857b9b132..6c5d0021926 100644 --- a/forge-gui/res/cardsfolder/h/havengul_lich.txt +++ b/forge-gui/res/cardsfolder/h/havengul_lich.txt @@ -2,7 +2,7 @@ Name:Havengul Lich ManaCost:3 U B Types:Creature Zombie Wizard PT:4/4 -A:AB$ Effect | Name$ Havengul Lich Delayed Trigger | Cost$ 1 | ValidTgts$ Creature | TgtZone$ Graveyard | TgtPrompt$ Select target creature card | StaticAbilities$ STPlay | Triggers$ DTCast | RememberObjects$ Targeted | ExileOnMoved$ Graveyard | SpellDescription$ You may cast target creature card in a graveyard this turn. When you cast it this turn, CARDNAME gains all activated abilities of that card until end of turn. +A:AB$ Effect | Name$ Havengul Lich's Delayed Trigger | Cost$ 1 | ValidTgts$ Creature | TgtZone$ Graveyard | TgtPrompt$ Select target creature card | StaticAbilities$ STPlay | Triggers$ DTCast | RememberObjects$ Targeted | ExileOnMoved$ Graveyard | SpellDescription$ You may cast target creature card in a graveyard this turn. When you cast it this turn, CARDNAME gains all activated abilities of that card until end of turn. SVar:STPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Graveyard | Description$ Until end of turn, you may cast a creature card in a graveyard. SVar:DTCast:Mode$ SpellCast | ValidCard$ Card.IsRemembered+nonLand | Execute$ StealAbs | TriggerDescription$ When you cast that card this turn, EFFECTSOURCE gains all activated abilities of that card until end of turn. SVar:StealAbs:DB$ Effect | RememberObjects$ TriggeredCard | StaticAbilities$ STSteal | Duration$ UntilHostLeavesPlayOrEOT diff --git a/forge-gui/res/cardsfolder/h/hazezon_shaper_of_sand.txt b/forge-gui/res/cardsfolder/h/hazezon_shaper_of_sand.txt index 7d95e66c335..28e95cd0a14 100644 --- a/forge-gui/res/cardsfolder/h/hazezon_shaper_of_sand.txt +++ b/forge-gui/res/cardsfolder/h/hazezon_shaper_of_sand.txt @@ -3,7 +3,7 @@ ManaCost:R G W Types:Legendary Creature Human Warrior PT:3/3 K:Landwalk:Desert -S:Mode$ Continuous | Affected$ Desert.YouOwn | MayPlay$ True | AffectedZone$ Graveyard | Description$ You may play Desert lands from your graveyard +S:Mode$ Continuous | Affected$ Desert.YouOwn | MayPlay$ True | AffectedZone$ Graveyard | Description$ You may play Desert lands from your graveyard. T:Mode$ ChangesZone | ValidCard$ Desert.YouCtrl | Origin$ Any | Destination$ Battlefield | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever a Desert you control enters, create two 1/1 red, green, and white Sand Warrior creature tokens. SVar:TrigToken:DB$ Token | TokenAmount$ 2 | TokenScript$ rgw_1_1_sand_warrior | TokenOwner$ You DeckHas:Ability$Token diff --git a/forge-gui/res/cardsfolder/h/hedron_detonator.txt b/forge-gui/res/cardsfolder/h/hedron_detonator.txt index f30a182a1e9..a8699a80488 100644 --- a/forge-gui/res/cardsfolder/h/hedron_detonator.txt +++ b/forge-gui/res/cardsfolder/h/hedron_detonator.txt @@ -10,4 +10,4 @@ SVar:EffSModeContinuous:Mode$ Continuous | EffectZone$ Command | Affected$ Card. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Sacrifice DeckHints:Type$Artifact -Oracle:Whenever an artifact you control enters, Hedron Detonator deals 1 damage to target opponent.\n{T}, Sacrifice two artifacts: Exile the top card of your library. You may play that card this turn +Oracle:Whenever an artifact you control enters, Hedron Detonator deals 1 damage to target opponent.\n{T}, Sacrifice two artifacts: Exile the top card of your library. You may play that card this turn. diff --git a/forge-gui/res/cardsfolder/h/hellspur_posse_boss.txt b/forge-gui/res/cardsfolder/h/hellspur_posse_boss.txt index b9ae1894404..46a57817735 100644 --- a/forge-gui/res/cardsfolder/h/hellspur_posse_boss.txt +++ b/forge-gui/res/cardsfolder/h/hellspur_posse_boss.txt @@ -5,6 +5,6 @@ PT:2/4 S:Mode$ Continuous | Affected$ Card.Outlaw+YouCtrl+Other | AddKeyword$ Haste | Description$ Other outlaws you control have haste. (Assassins, Mercenaries, Pirates, Rogues, and Warlocks are outlaws.) T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters, create two 1/1 red Mercenary creature tokens with "{T}: Target creature you control gets +1/+0 until end of turn. Activate only as a sorcery." SVar:TrigToken:DB$ Token | TokenAmount$ 2 | TokenScript$ r_1_1_mercenary_tappump | TokenOwner$ You -DeckHints:Type$Mercenary|Pirate|Rogue|Warlock +DeckHints:Type$Mercenary|Assassin|Pirate|Rogue|Warlock DeckHas:Ability$Token Oracle:Other outlaws you control have haste. (Assassins, Mercenaries, Pirates, Rogues, and Warlocks are outlaws.)\nWhen Hellspur Posse Boss enters, create two 1/1 red Mercenary creature tokens with "{T}: Target creature you control gets +1/+0 until end of turn. Activate only as a sorcery." diff --git a/forge-gui/res/cardsfolder/h/helm_of_the_ghastlord.txt b/forge-gui/res/cardsfolder/h/helm_of_the_ghastlord.txt index 2178292b184..f41bbc21406 100644 --- a/forge-gui/res/cardsfolder/h/helm_of_the_ghastlord.txt +++ b/forge-gui/res/cardsfolder/h/helm_of_the_ghastlord.txt @@ -5,7 +5,7 @@ K:Enchant creature A:SP$ Attach | Cost$ 3 UB | ValidTgts$ Creature | AITgts$ Card.Black,Card.Blue | AILogic$ Curiosity S:Mode$ Continuous | Affected$ Creature.EnchantedBy+Blue | AddPower$ 1 | AddToughness$ 1 | AddTrigger$ BlueTrigger | AddSVar$ HelmTrigDraw | Description$ As long as enchanted creature is blue, it gets +1/+1 and has "Whenever this creature deals damage to an opponent, draw a card." S:Mode$ Continuous | Affected$ Creature.EnchantedBy+Black | AddPower$ 1 | AddToughness$ 1 | AddTrigger$ BlackTrigger | AddSVar$ HelmTrigDiscard | Description$ As long as enchanted creature is black, it gets +1/+1 and has "Whenever this creature deals damage to an opponent, that player discards a card." -SVar:BlueTrigger:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Opponent | TriggerZones$ Battlefield | Execute$ HelmTrigDraw | TriggerDescription$ Whenever this creature deals damage to an opponent, draw a card +SVar:BlueTrigger:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Opponent | TriggerZones$ Battlefield | Execute$ HelmTrigDraw | TriggerDescription$ Whenever this creature deals damage to an opponent, draw a card. SVar:BlackTrigger:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Opponent | TriggerZones$ Battlefield | Execute$ HelmTrigDiscard | TriggerDescription$ Whenever this creature deals damage to an opponent, that player discards a card. SVar:HelmTrigDraw:DB$ Draw | NumCards$ 1 SVar:HelmTrigDiscard:DB$ Discard | Defined$ TriggeredTarget | NumCards$ 1 | Mode$ TgtChoose diff --git a/forge-gui/res/cardsfolder/h/hibernation_sliver.txt b/forge-gui/res/cardsfolder/h/hibernation_sliver.txt index d589147c5a0..d9e5bb00655 100644 --- a/forge-gui/res/cardsfolder/h/hibernation_sliver.txt +++ b/forge-gui/res/cardsfolder/h/hibernation_sliver.txt @@ -3,6 +3,6 @@ ManaCost:U B Types:Creature Sliver PT:2/2 S:Mode$ Continuous | Affected$ Sliver | AddAbility$ Bounce | Description$ All Slivers have "Pay 2 life, Return this permanent to its owner's hand." -SVar:Bounce:AB$ ChangeZone | Cost$ PayLife<2> | Defined$ Self | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return this permanent to its owner's hand +SVar:Bounce:AB$ ChangeZone | Cost$ PayLife<2> | Defined$ Self | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return this permanent to its owner's hand. SVar:PlayMain1:TRUE Oracle:All Slivers have "Pay 2 life: Return this permanent to its owner's hand." diff --git a/forge-gui/res/cardsfolder/h/hierophant_bio_titan.txt b/forge-gui/res/cardsfolder/h/hierophant_bio_titan.txt index 782f138006e..38ccd19105a 100644 --- a/forge-gui/res/cardsfolder/h/hierophant_bio_titan.txt +++ b/forge-gui/res/cardsfolder/h/hierophant_bio_titan.txt @@ -5,8 +5,8 @@ PT:12/12 K:Vigilance K:Reach K:Ward:2 -A:SP$ PermanentCreature | Cost$ 10 G G RemoveAnyCounter -S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Y | EffectZone$ All | Relative$ True | Description$ Frenzied Metabolism — As an additional cost to cast this spell, you may remove any number of +1/+1 counters from among creatures you control. This spell costs {2} less to cast for each counter removed this way. +A:SP$ PermanentCreature | Cost$ 10 G G RemoveAnyCounter | PrecostDesc$ Frenzied Metabolism — | AdditionalDesc$ This spell costs {2} less to cast for each counter removed this way. +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Y | EffectZone$ All | Relative$ True S:Mode$ CantBlockBy | ValidAttacker$ Card.Self | ValidBlocker$ Creature.powerLE2 | Description$ Titanic — CARDNAME can't be blocked by creatures with power 2 or less. SVar:X:Count$xPaid SVar:Y:SVar$X/Times.2 diff --git a/forge-gui/res/cardsfolder/h/highway_robbery.txt b/forge-gui/res/cardsfolder/h/highway_robbery.txt index e816d96aa0f..efa2d6e8df9 100644 --- a/forge-gui/res/cardsfolder/h/highway_robbery.txt +++ b/forge-gui/res/cardsfolder/h/highway_robbery.txt @@ -2,8 +2,8 @@ Name:Highway Robbery ManaCost:1 R Types:Sorcery A:SP$ GenericChoice | Choices$ DBDiscardToDraw,DBSacToDraw | SpellDescription$ You may discard a card or sacrifice a land. If you do, draw two cards. -SVar:DBSacToDraw:DB$ Draw | UnlessCost$ Sac<1/Land> | NumCards$ 2 | UnlessPayer$ You | UnlessSwitched$ True | SpellDescription$ Sacrifice a Land: Draw two cards. -SVar:DBDiscardToDraw:DB$ Draw | UnlessCost$ Discard<1/Card> | NumCards$ 2 | UnlessPayer$ You | UnlessSwitched$ True | SpellDescription$ Discard a card: Draw two cards. +SVar:DBSacToDraw:DB$ Draw | UnlessCost$ Sac<1/Land> | NumCards$ 2 | UnlessPayer$ You | UnlessSwitched$ True | SpellDescription$ Sacrifice a land. If you do, draw two cards. +SVar:DBDiscardToDraw:DB$ Draw | UnlessCost$ Discard<1/Card> | NumCards$ 2 | UnlessPayer$ You | UnlessSwitched$ True | SpellDescription$ Discard a card. If you do, draw two cards. K:Plot:1 R DeckHas:Ability$Sacrifice|Discard Oracle:You may discard a card or sacrifice a land. If you do, draw two cards.\nPlot {1}{R} (You may pay {1}{R} and exile this card from your hand. Cast it as a sorcery on a later turn without paying its mana cost. Plot only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/h/hypergenesis.txt b/forge-gui/res/cardsfolder/h/hypergenesis.txt index 62dc901958a..5f7b9e3900d 100644 --- a/forge-gui/res/cardsfolder/h/hypergenesis.txt +++ b/forge-gui/res/cardsfolder/h/hypergenesis.txt @@ -7,9 +7,9 @@ A:SP$ Repeat | RepeatSubAbility$ ResetCheck | RepeatCheckSVar$ NumPlayerGiveup | SVar:ResetCheck:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ Number | Expression$ 0 | SubAbility$ DBRepeatChoice SVar:DBRepeatChoice:DB$ RepeatEach | StartingWith$ You | RepeatSubAbility$ DBChoice | RepeatPlayers$ Player SVar:DBChoice:DB$ GenericChoice | Choices$ DBCheckHand,DBNoChange | Defined$ Player.IsRemembered -SVar:DBCheckHand:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ CountSVar | Expression$ NumPlayerGiveup/Plus.1 | ConditionCheckSVar$ CheckHand | ConditionSVarCompare$ EQ0 | SubAbility$ DBChoose | SpellDescription$ Choose an artifact, creature, enchantment, or land card from your hand onto the battlefield +SVar:DBCheckHand:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ CountSVar | Expression$ NumPlayerGiveup/Plus.1 | ConditionCheckSVar$ CheckHand | ConditionSVarCompare$ EQ0 | SubAbility$ DBChoose | SpellDescription$ Choose an artifact, creature, enchantment, or land card from your hand onto the battlefield. SVar:DBChoose:DB$ ChangeZone | DefinedPlayer$ Player.IsRemembered | Origin$ Hand | Destination$ Battlefield | ChangeType$ Artifact,Creature,Enchantment,Land | ChangeNum$ 1 | ConditionCheckSVar$ CheckHand | ConditionSVarCompare$ GE1 -SVar:DBNoChange:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ CountSVar | Expression$ NumPlayerGiveup/Plus.1 | SpellDescription$ Do not put an artifact, creature, enchantment, or land card from your hand onto the battlefield +SVar:DBNoChange:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ CountSVar | Expression$ NumPlayerGiveup/Plus.1 | SpellDescription$ Do not put an artifact, creature, enchantment, or land card from your hand onto the battlefield. SVar:FinalReset:DB$ StoreSVar | SVar$ NumPlayerGiveup | Type$ Number | Expression$ 0 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:NumPlayerGiveup:Number$0 diff --git a/forge-gui/res/cardsfolder/i/ichormoon_gauntlet.txt b/forge-gui/res/cardsfolder/i/ichormoon_gauntlet.txt index 4e5d110672f..07fc181aaf7 100644 --- a/forge-gui/res/cardsfolder/i/ichormoon_gauntlet.txt +++ b/forge-gui/res/cardsfolder/i/ichormoon_gauntlet.txt @@ -2,7 +2,7 @@ Name:Ichormoon Gauntlet ManaCost:2 U Types:Artifact S:Mode$ Continuous | Affected$ Planeswalker.YouCtrl | AddAbility$ PWProliferate & PWExtraTurn | Description$ Planeswalkers you control have "[0]: Proliferate" and "[-12]: Take an extra turn after this one." -SVar:PWProliferate:AB$ Proliferate | Cost$ AddCounter<0/LOYALTY> | Planeswalker$ True | SpellDescription$ Proliferate +SVar:PWProliferate:AB$ Proliferate | Cost$ AddCounter<0/LOYALTY> | Planeswalker$ True | SpellDescription$ Proliferate. SVar:PWExtraTurn:AB$ AddTurn | Cost$ SubCounter<12/LOYALTY> | Planeswalker$ True | NumTurns$ 1 | SpellDescription$ Take an extra turn after this one. T:Mode$ SpellCast | ValidCard$ Card.nonCreature | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever you cast a noncreature spell, choose a counter on target permanent. Put an additional counter of that kind on that permanent. SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Permanent | TgtPrompt$ Select target permanent | CounterType$ ExistingCounter | CounterNum$ 1 diff --git a/forge-gui/res/cardsfolder/i/illuminated_wings.txt b/forge-gui/res/cardsfolder/i/illuminated_wings.txt index 5abee4b9b65..6cc0e490fa0 100644 --- a/forge-gui/res/cardsfolder/i/illuminated_wings.txt +++ b/forge-gui/res/cardsfolder/i/illuminated_wings.txt @@ -4,6 +4,6 @@ Types:Enchantment Aura K:Enchant creature A:SP$ Attach | Cost$ 1 U | ValidTgts$ Creature | AILogic$ Pump S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Flying | Description$ Enchanted creature has flying. -A:AB$ Draw | Cost$ 2 Sac<1/CARDNAME> | Defined$ You | NumCards$ 1 | SpellDescription$ Draw a card +A:AB$ Draw | Cost$ 2 Sac<1/CARDNAME> | Defined$ You | NumCards$ 1 | SpellDescription$ Draw a card. AI:RemoveDeck:All Oracle:Enchant creature\nEnchanted creature has flying.\n{2}, Sacrifice Illuminated Wings: Draw a card. diff --git a/forge-gui/res/cardsfolder/i/indulgent_tormentor.txt b/forge-gui/res/cardsfolder/i/indulgent_tormentor.txt index 8f4e568959d..37302221955 100644 --- a/forge-gui/res/cardsfolder/i/indulgent_tormentor.txt +++ b/forge-gui/res/cardsfolder/i/indulgent_tormentor.txt @@ -5,6 +5,6 @@ PT:5/3 K:Flying T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigChoice | TriggerDescription$ At the beginning of your upkeep, draw a card unless target opponent sacrifices a creature or pays 3 life. SVar:TrigChoice:DB$ GenericChoice | ValidTgts$ Opponent | Choices$ DBPayLife,DBSacCreature | AILogic$ PayUnlessCost -SVar:DBSacCreature:DB$ Draw | Defined$ You | UnlessCost$ Sac<1/Creature> | UnlessPayer$ Targeted | UnlessAI$ Never | SpellDescription$ That player draws a card unless You sacrifices a creature -SVar:DBPayLife:DB$ Draw | Defined$ You | UnlessCost$ PayLife<3> | UnlessPayer$ Targeted | UnlessAI$ LowPriority | SpellDescription$ That player draws a card unless You pays 3 life. +SVar:DBSacCreature:DB$ Draw | Defined$ You | UnlessCost$ Sac<1/Creature> | UnlessPayer$ Targeted | UnlessAI$ Never | SpellDescription$ CARDNAME's controller draws a card unless you sacrifice a creature. +SVar:DBPayLife:DB$ Draw | Defined$ You | UnlessCost$ PayLife<3> | UnlessPayer$ Targeted | UnlessAI$ LowPriority | SpellDescription$ CARDNAME's controller draws a card unless you pay 3 life. Oracle:Flying\nAt the beginning of your upkeep, draw a card unless target opponent sacrifices a creature or pays 3 life. diff --git a/forge-gui/res/cardsfolder/i/infectious_bite.txt b/forge-gui/res/cardsfolder/i/infectious_bite.txt index c1378b02a5d..9b4acce3b42 100644 --- a/forge-gui/res/cardsfolder/i/infectious_bite.txt +++ b/forge-gui/res/cardsfolder/i/infectious_bite.txt @@ -5,5 +5,5 @@ A:SP$ Pump | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Choose target creature you SVar:DBFight:DB$ DealDamage | ValidTgts$ Creature.YouDontCtrl | DamageSource$ ParentTarget | TgtPrompt$ Choose target creature you don't control | NumDmg$ X | SubAbility$ DBPoison SVar:DBPoison:DB$ Poison | Defined$ Player.Opponent | Num$ 1 SVar:X:ParentTargeted$CardPower -DeckHints:Ability$Proliferate a Keyword$Infect|Toxic +DeckHints:Ability$Proliferate & Keyword$Infect|Toxic Oracle:Target creature you control deals damage equal to its power to target creature you don't control. Each opponent gets a poison counter. diff --git a/forge-gui/res/cardsfolder/i/infectious_inquiry.txt b/forge-gui/res/cardsfolder/i/infectious_inquiry.txt index fe602f88dad..231c971077b 100644 --- a/forge-gui/res/cardsfolder/i/infectious_inquiry.txt +++ b/forge-gui/res/cardsfolder/i/infectious_inquiry.txt @@ -4,5 +4,5 @@ Types:Sorcery A:SP$ Draw | NumCards$ 2 | SubAbility$ DBLoseLife | SpellDescription$ You draw two cards and you lose 2 life. Each opponent gets a poison counter. SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ 2 | SubAbility$ DBPoison SVar:DBPoison:DB$ Poison | Defined$ Player.Opponent | Num$ 1 -DeckHints:Ability$Proliferate a Keyword$Infect|Toxic +DeckHints:Ability$Proliferate & Keyword$Infect|Toxic Oracle:You draw two cards and you lose 2 life. Each opponent gets a poison counter. diff --git a/forge-gui/res/cardsfolder/i/introductions_are_in_order.txt b/forge-gui/res/cardsfolder/i/introductions_are_in_order.txt index 7dedcf1bf7a..70d3af5d4e0 100644 --- a/forge-gui/res/cardsfolder/i/introductions_are_in_order.txt +++ b/forge-gui/res/cardsfolder/i/introductions_are_in_order.txt @@ -3,6 +3,6 @@ ManaCost:no cost Types:Scheme T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ TrigCharm | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, ABILITY SVar:TrigCharm:DB$ Charm | Choices$ DBTutorCreature,DBPutCreature | CharmNum$ 1 -SVar:DBTutorCreature:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Card.Creature | ChangeNum$ 1 | SpellDescription$ Search your library for a creature card, reveal it, put it into your hand, then shuffle; +SVar:DBTutorCreature:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Card.Creature | ChangeNum$ 1 | SpellDescription$ Search your library for a creature card, reveal it, put it into your hand, then shuffle. SVar:DBPutCreature:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Card.Creature | ChangeNum$ 1 | SpellDescription$ or you may put a creature card from your hand onto the battlefield. Oracle:When you set this scheme in motion, choose one —\n• Search your library for a creature card, reveal it, put it into your hand, then shuffle.\n• You may put a creature card from your hand onto the battlefield. diff --git a/forge-gui/res/cardsfolder/i/invasion_of_tolvada_the_broken_sky.txt b/forge-gui/res/cardsfolder/i/invasion_of_tolvada_the_broken_sky.txt index 3f5e3df1aac..f64a2275875 100644 --- a/forge-gui/res/cardsfolder/i/invasion_of_tolvada_the_broken_sky.txt +++ b/forge-gui/res/cardsfolder/i/invasion_of_tolvada_the_broken_sky.txt @@ -5,9 +5,9 @@ Defense:5 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME enters, return target nonbattle permanent card from your graveyard to the battlefield. SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Permanent.nonBattle+YouCtrl | TgtPrompt$ Select target nonbattle permanent card in your graveyard DeckHas:Ability$Graveyard|Token & Type$Spirit -DeckHints:Ability$Graveyard|Mill|Tokens|LifeGain +DeckHints:Ability$Graveyard|Mill|Token|LifeGain AlternateMode:DoubleFaced -Oracle:(As a Siege enters, choose an opponent to protect it. You and others can attack it. When it's defeated, exile it, then cast it transformed.)\nWhen Invasion of Tolvada enters, return target nonbattle permanent card from your graveyard to the battlefield +Oracle:(As a Siege enters, choose an opponent to protect it. You and others can attack it. When it's defeated, exile it, then cast it transformed.)\nWhen Invasion of Tolvada enters, return target nonbattle permanent card from your graveyard to the battlefield. ALTERNATE diff --git a/forge-gui/res/cardsfolder/i/inys_haen.txt b/forge-gui/res/cardsfolder/i/inys_haen.txt index 4cb6edf82db..dee4395336e 100644 --- a/forge-gui/res/cardsfolder/i/inys_haen.txt +++ b/forge-gui/res/cardsfolder/i/inys_haen.txt @@ -4,7 +4,7 @@ Types:Plane Cridhe T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ TrigMill | TriggerZones$ Command | TriggerDescription$ When you planeswalk to CARDNAME and at the beginning of your upkeep, mill three cards. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ TrigMill | TriggerZones$ Command | Secondary$ True | TriggerDescription$ When you planeswalk to CARDNAME and at the beginning of your upkeep, mill three cards. SVar:TrigMill:DB$ Mill | NumCards$ 3 | Defined$ You -T:Mode$ PlaneswalkedFrom | ValidCard$ Plane.Self | Execute$ TrigChangeZoneAll | TriggerDescription$ When you planeswalk away from CARDNAME, each player returns all land cards from their graveyard to the battlefield tapped +T:Mode$ PlaneswalkedFrom | ValidCard$ Plane.Self | Execute$ TrigChangeZoneAll | TriggerDescription$ When you planeswalk away from CARDNAME, each player returns all land cards from their graveyard to the battlefield tapped. SVar:TrigChangeZoneAll:DB$ ChangeZoneAll | Tapped$ True | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Land T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, return target nonland card from your graveyard to your hand. SVar:RolledChaos:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Card.nonLand+YouCtrl | TgtPrompt$ Select target nonland card in your graveyard diff --git a/forge-gui/res/cardsfolder/j/jinnie_fay_jetmirs_second.txt b/forge-gui/res/cardsfolder/j/jinnie_fay_jetmirs_second.txt index a82cfb59aa2..8ca8ef7479b 100644 --- a/forge-gui/res/cardsfolder/j/jinnie_fay_jetmirs_second.txt +++ b/forge-gui/res/cardsfolder/j/jinnie_fay_jetmirs_second.txt @@ -4,8 +4,8 @@ Types:Legendary Creature Elf Druid PT:3/3 R:Event$ CreateToken | ActiveZones$ Battlefield | ValidToken$ Card.YouCtrl | ReplaceWith$ GenericChoice | Optional$ True | Description$ If you would create one or more tokens, you may instead create that many 2/2 green Cat creature tokens with haste or that many 3/1 green Dog creature tokens with vigilance. SVar:GenericChoice:DB$ GenericChoice | Choices$ Cat,Dog -SVar:Cat:DB$ ReplaceToken | Type$ ReplaceToken | ValidCard$ Card.YouCtrl | TokenScript$ g_2_2_cat_haste | SpellDescription$ Create that many 2/2 green Cat creature tokens with haste -SVar:Dog:DB$ ReplaceToken | Type$ ReplaceToken | ValidCard$ Card.YouCtrl | TokenScript$ g_3_1_dog_vigilance | SpellDescription$ Create that many 3/1 green Dog creature tokens with vigilance +SVar:Cat:DB$ ReplaceToken | Type$ ReplaceToken | ValidCard$ Card.YouCtrl | TokenScript$ g_2_2_cat_haste | SpellDescription$ Create that many 2/2 green Cat creature tokens with haste. +SVar:Dog:DB$ ReplaceToken | Type$ ReplaceToken | ValidCard$ Card.YouCtrl | TokenScript$ g_3_1_dog_vigilance | SpellDescription$ Create that many 3/1 green Dog creature tokens with vigilance. DeckNeeds:Ability$Token DeckHas:Type$Cat|Dog AI:RemoveDeck:Random diff --git a/forge-gui/res/cardsfolder/k/kamachal_ships_mascot.txt b/forge-gui/res/cardsfolder/k/kamachal_ships_mascot.txt index 77491068c77..10d4f1748f9 100644 --- a/forge-gui/res/cardsfolder/k/kamachal_ships_mascot.txt +++ b/forge-gui/res/cardsfolder/k/kamachal_ships_mascot.txt @@ -9,7 +9,7 @@ SVar:TrigTreasure:DB$ Token | TokenScript$ c_a_treasure_sac | SubAbility$ DBChoo SVar:DBChoose:DB$ ChooseCard | Choices$ Card.cmcEQX+ControlledBy TriggeredTarget | ChoiceZone$ Library | Amount$ 1 | AtRandom$ True | SubAbility$ DBChangeZoneAll SVar:DBChangeZoneAll:DB$ ChangeZoneAll | Origin$ Library | Destination$ Exile | ChangeType$ Card.ChosenCard | RememberChanged$ True | SubAbility$ DBEffect SVar:DBEffect:DB$ Effect | StaticAbilities$ MayPlay | RememberObjects$ Remembered | SubAbility$ DBCleanup -SVar:MayPlay:Mode$ Continuous | Affected$ Card.IsRemembered+nonLand | EffectZone$ Command | AffectedZone$ Exile | MayPlay$ True | Description$ You may cast that card this turn +SVar:MayPlay:Mode$ Continuous | Affected$ Card.IsRemembered+nonLand | EffectZone$ Command | AffectedZone$ Exile | MayPlay$ True | Description$ You may cast that card this turn. SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True | ClearRemembered$ True SVar:X:TriggerCount$DamageAmount DeckHas:Ability$Token & Type$Treasure diff --git a/forge-gui/res/cardsfolder/k/kami_of_restless_shadows.txt b/forge-gui/res/cardsfolder/k/kami_of_restless_shadows.txt index f92e454e1c8..660bcad1ac2 100644 --- a/forge-gui/res/cardsfolder/k/kami_of_restless_shadows.txt +++ b/forge-gui/res/cardsfolder/k/kami_of_restless_shadows.txt @@ -4,7 +4,7 @@ Types:Creature Spirit PT:3/3 T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigCharm | TriggerDescription$ When CARDNAME enters, ABILITY SVar:TrigCharm:DB$ Charm | Choices$ RaiseScoundrel,HauntedHarvest -SVar:RaiseScoundrel:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Creature.Ninja+YouOwn,Creature.Rogue+YouOwn | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target Ninja or Rogue creature card from your graveyard | SpellDescription$ Return up to one target Ninja or Rogue creature card from your graveyard to your hand +SVar:RaiseScoundrel:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Creature.Ninja+YouOwn,Creature.Rogue+YouOwn | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one target Ninja or Rogue creature card from your graveyard | SpellDescription$ Return up to one target Ninja or Rogue creature card from your graveyard to your hand. SVar:HauntedHarvest:DB$ ChangeZone | Origin$ Graveyard | Destination$ Library | ValidTgts$ Creature.YouOwn | TgtPrompt$ Select target creature card from your graveyard | SpellDescription$ Put target creature card from your graveyard on top of your library. DeckHas:Ability$Graveyard DeckHints:Type$Ninja|Rogue diff --git a/forge-gui/res/cardsfolder/k/kaya_ghost_assassin.txt b/forge-gui/res/cardsfolder/k/kaya_ghost_assassin.txt index fb4d5036bd7..a55ffebc55e 100644 --- a/forge-gui/res/cardsfolder/k/kaya_ghost_assassin.txt +++ b/forge-gui/res/cardsfolder/k/kaya_ghost_assassin.txt @@ -4,8 +4,8 @@ Types:Legendary Planeswalker Kaya Loyalty:5 A:AB$ Pump | Cost$ AddCounter<0/LOYALTY> | ValidTgts$ Creature | TargetMax$ 1 | TargetMin$ 0 | Planeswalker$ True | SubAbility$ DBChoose | StackDescription$ SpellDescription | SpellDescription$ Exile CARDNAME or up to one target creature. Return that card to the battlefield under its owner's control at the beginning of your next upkeep. You lose 2 life. SVar:DBChoose:DB$ GenericChoice | Choices$ DBExileSelf,DBExileTarget | Defined$ You -SVar:DBExileSelf:DB$ ChangeZone | Defined$ Self | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBDelTrig | SpellDescription$ Exile CARDNAME -SVar:DBExileTarget:DB$ ChangeZone | Defined$ Targeted | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBDelTrig | SpellDescription$ Exile up to one target creature +SVar:DBExileSelf:DB$ ChangeZone | Defined$ Self | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBDelTrig | SpellDescription$ Exile CARDNAME. +SVar:DBExileTarget:DB$ ChangeZone | Defined$ Targeted | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBDelTrig | SpellDescription$ Exile up to one target creature. SVar:DBDelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | Execute$ DBReturn | TriggerDescription$ Return that card to the battlefield under its owner's control at the beginning of your next upkeep. | RememberObjects$ RememberedLKI | SubAbility$ DBCleanup SVar:DBReturn:DB$ ChangeZone | Origin$ Exile | Defined$ DelayTriggerRememberedLKI | Destination$ Battlefield SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | SubAbility$ DBLoseLife diff --git a/forge-gui/res/cardsfolder/k/kaylas_command.txt b/forge-gui/res/cardsfolder/k/kaylas_command.txt index 8f5816180d6..3bf17bb2b14 100644 --- a/forge-gui/res/cardsfolder/k/kaylas_command.txt +++ b/forge-gui/res/cardsfolder/k/kaylas_command.txt @@ -9,5 +9,5 @@ SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Plains.Basic | ChangeNum$ 1 | SpellDescription$ Search your library for a basic Plains card, reveal it, put it into your hand, then shuffle. SVar:DBGainLife:DB$ GainLife | LifeAmount$ 2 | SubAbility$ DBScry | SpellDescription$ You gain 2 life and scry 2. SVar:DBScry:DB$ Scry | ScryNum$ 2 -DeckHas:Ability$Token|LifeGain|Counters & Type$Construct|Artifact & Keyword$DoubleStrike +DeckHas:Ability$Token|LifeGain|Counters & Type$Construct|Artifact & Keyword$Double Strike Oracle:Choose two —\n• Create a 2/2 colorless Construct artifact creature token.\n• Put a +1/+1 counter on a creature you control. It gains double strike until end of turn.\n• Search your library for a basic Plains card, reveal it, put it into your hand, then shuffle.\n• You gain 2 life and scry 2. diff --git a/forge-gui/res/cardsfolder/k/kitsune_ace.txt b/forge-gui/res/cardsfolder/k/kitsune_ace.txt index d97fb4f811e..7f76932f8d8 100644 --- a/forge-gui/res/cardsfolder/k/kitsune_ace.txt +++ b/forge-gui/res/cardsfolder/k/kitsune_ace.txt @@ -4,7 +4,7 @@ Types:Creature Fox Pilot PT:2/2 T:Mode$ Attacks | ValidCard$ Vehicle.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigCharm | TriggerDescription$ Whenever a Vehicle you control attacks, ABILITY SVar:TrigCharm:DB$ Charm | Choices$ DBPump,DBUntap -SVar:DBPump:DB$ Pump | Defined$ TriggeredAttackerLKICopy | KW$ First Strike | SpellDescription$ That Vehicle gains first strike until end of turn -SVar:DBUntap:DB$ Untap | Defined$ Self | SpellDescription$ Untap CARDNAME +SVar:DBPump:DB$ Pump | Defined$ TriggeredAttackerLKICopy | KW$ First Strike | SpellDescription$ That Vehicle gains first strike until end of turn. +SVar:DBUntap:DB$ Untap | Defined$ Self | SpellDescription$ Untap CARDNAME. DeckNeeds:Type$Vehicle Oracle:Whenever a Vehicle you control attacks, choose one —\n• That Vehicle gains first strike until end of turn.\n• Untap Kitsune Ace. diff --git a/forge-gui/res/cardsfolder/k/koth_of_the_hammer.txt b/forge-gui/res/cardsfolder/k/koth_of_the_hammer.txt index 0257e12addd..4a55b39990d 100644 --- a/forge-gui/res/cardsfolder/k/koth_of_the_hammer.txt +++ b/forge-gui/res/cardsfolder/k/koth_of_the_hammer.txt @@ -5,9 +5,9 @@ Loyalty:3 A:AB$ Untap | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | ValidTgts$ Mountain | TgtPrompt$ Select target Mountain | SubAbility$ DBAnimate | SpellDescription$ Untap target Mountain. It becomes a 4/4 red Elemental creature until end of turn. It's still a land. SVar:DBAnimate:DB$ Animate | Defined$ Targeted | Power$ 4 | Toughness$ 4 | Types$ Creature,Elemental | Colors$ Red | OverwriteColors$ True A:AB$ Mana | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | Produced$ R | Amount$ X | SpellDescription$ Add {R} for each Mountain you control. -A:AB$ Effect | Cost$ SubCounter<5/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Emblem — Koth of the Hammer | Image$ emblem_koth_of_the_hammer | StaticAbilities$ STDamage | Stackable$ False | Duration$ Permanent | SpellDescription$ You get an emblem with "Mountains you control have '{T}: This land deals 1 damage to any target." +A:AB$ Effect | Cost$ SubCounter<5/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Emblem — Koth of the Hammer | Image$ emblem_koth_of_the_hammer | StaticAbilities$ STDamage | Stackable$ False | Duration$ Permanent | SpellDescription$ You get an emblem with "Mountains you control have '{T}: This land deals 1 damage to any target.'" SVar:STDamage:Mode$ Continuous | EffectZone$ Command | Affected$ Mountain.YouCtrl | AddAbility$ ABDealDamage | AffectedZone$ Battlefield | Description$ Mountains you control have "{T}: This land deals 1 damage to any target." -SVar:ABDealDamage:AB$ DealDamage | Cost$ T | ValidTgts$ Any | NumDmg$ 1 | SpellDescription$ Deal 1 damage to any target +SVar:ABDealDamage:AB$ DealDamage | Cost$ T | ValidTgts$ Any | NumDmg$ 1 | SpellDescription$ CARDNAME deals 1 damage to any target. SVar:X:Count$Valid Mountain.YouCtrl SVar:PlayMain1:ALWAYS DeckNeeds:Type$Mountain diff --git a/forge-gui/res/cardsfolder/k/kyler_sigardian_emissary.txt b/forge-gui/res/cardsfolder/k/kyler_sigardian_emissary.txt index 3c6fcf5e85f..075b37d400c 100644 --- a/forge-gui/res/cardsfolder/k/kyler_sigardian_emissary.txt +++ b/forge-gui/res/cardsfolder/k/kyler_sigardian_emissary.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Human Cleric PT:2/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Human.Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever another Human you control enters, put a +1/+1 counter on CARDNAME. SVar:TrigPutCounter:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ 1 -S:Mode$ Continuous | Affected$ Card.Human+Other+YouCtrl | AddPower$ X | AddToughness$ X | Description$ Other Humans you control get +1/+1 for each counter on CARDNAME +S:Mode$ Continuous | Affected$ Card.Human+Other+YouCtrl | AddPower$ X | AddToughness$ X | Description$ Other Humans you control get +1/+1 for each counter on CARDNAME. SVar:X:Count$CardCounters.ALL DeckNeeds:Type$Human DeckHas:Ability$Counters diff --git a/forge-gui/res/cardsfolder/k/kytheon_hero_of_akros_gideon_battle_forged.txt b/forge-gui/res/cardsfolder/k/kytheon_hero_of_akros_gideon_battle_forged.txt index 9175ca161be..28de2c27c8e 100644 --- a/forge-gui/res/cardsfolder/k/kytheon_hero_of_akros_gideon_battle_forged.txt +++ b/forge-gui/res/cardsfolder/k/kytheon_hero_of_akros_gideon_battle_forged.txt @@ -2,7 +2,7 @@ Name:Kytheon, Hero of Akros ManaCost:W Types:Legendary Creature Human Soldier PT:2/1 -T:Mode$ Phase | Mode$ Phase | Phase$ EndCombat | IsPresent$ Card.Self+attackedThisCombat GE3 | Execute$ TrigExile | TriggerDescription$ At end of combat, if CARDNAME and at least two other creatures attacked this combat, exile NICKNAME, then return him to the battlefield transformed under his owner's control. +T:Mode$ Phase | Phase$ EndCombat | IsPresent$ Card.Self+attackedThisCombat GE3 | Execute$ TrigExile | TriggerDescription$ At end of combat, if CARDNAME and at least two other creatures attacked this combat, exile NICKNAME, then return him to the battlefield transformed under his owner's control. SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBReturn SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | Transformed$ True | ForgetOtherRemembered$ True | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/l/lava_storm.txt b/forge-gui/res/cardsfolder/l/lava_storm.txt index 308a39c8681..8d130cd654e 100644 --- a/forge-gui/res/cardsfolder/l/lava_storm.txt +++ b/forge-gui/res/cardsfolder/l/lava_storm.txt @@ -1,7 +1,7 @@ Name:Lava Storm ManaCost:3 R R Types:Instant -A:SP$ GenericChoice | Choices$ DBDmgAttackers,DBDmgBlockers | Defined$ You | AILogic$ BestOption | StackDescription$ SpellDescription | SpellDescription$ CARDNAME deals 2 damage to each attacking creature or CARDNAME deals 2 damage to each blocking creature -SVar:DBDmgAttackers:DB$ DamageAll | ValidCards$ Creature.attacking | NumDmg$ 2 | SpellDescription$ CARDNAME deals 2 damage to each attacking creature +A:SP$ GenericChoice | Choices$ DBDmgAttackers,DBDmgBlockers | Defined$ You | AILogic$ BestOption | StackDescription$ SpellDescription | SpellDescription$ CARDNAME deals 2 damage to each attacking creature or CARDNAME deals 2 damage to each blocking creature. +SVar:DBDmgAttackers:DB$ DamageAll | ValidCards$ Creature.attacking | NumDmg$ 2 | SpellDescription$ CARDNAME deals 2 damage to each attacking creature. SVar:DBDmgBlockers:DB$ DamageAll | ValidCards$ Creature.blocking | NumDmg$ 2 | SpellDescription$ CARDNAME deals 2 damage to each blocking creature. Oracle:Lava Storm deals 2 damage to each attacking creature or Lava Storm deals 2 damage to each blocking creature. diff --git a/forge-gui/res/cardsfolder/l/legion_loyalist.txt b/forge-gui/res/cardsfolder/l/legion_loyalist.txt index 36ced6d644f..6cd275a81fa 100644 --- a/forge-gui/res/cardsfolder/l/legion_loyalist.txt +++ b/forge-gui/res/cardsfolder/l/legion_loyalist.txt @@ -6,5 +6,5 @@ K:Haste T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigPump | IsPresent$ Creature.attacking+Other | NoResolvingCheck$ True | PresentCompare$ GE2 | TriggerDescription$ Battalion — Whenever CARDNAME and at least two other creatures attack, creatures you control gain first strike and trample until end of turn and can't be blocked by creature tokens this turn. SVar:TrigPump:DB$ PumpAll | ValidCards$ Creature.YouCtrl | KW$ First Strike & Trample | SubAbility$ TrigEffect SVar:TrigEffect:DB$ Effect | StaticAbilities$ KWPump -SVar:KWPump:Mode$ CantBlockBy | ValidAttacker$ Creature.YouCtrl | ValidBlocker$ Creature.token | EffectZone$ Command | Description$ Creatures you control can't be blocked by creature tokens this turn +SVar:KWPump:Mode$ CantBlockBy | ValidAttacker$ Creature.YouCtrl | ValidBlocker$ Creature.token | EffectZone$ Command | Description$ Creatures you control can't be blocked by creature tokens this turn. Oracle:Haste\nBattalion — Whenever Legion Loyalist and at least two other creatures attack, creatures you control gain first strike and trample until end of turn and can't be blocked by creature tokens this turn. diff --git a/forge-gui/res/cardsfolder/l/legolass_quick_reflexes.txt b/forge-gui/res/cardsfolder/l/legolass_quick_reflexes.txt index e04737015cf..ed4b17319a4 100644 --- a/forge-gui/res/cardsfolder/l/legolass_quick_reflexes.txt +++ b/forge-gui/res/cardsfolder/l/legolass_quick_reflexes.txt @@ -5,7 +5,7 @@ K:Split second A:SP$ Untap | ValidTgts$ Creature | SubAbility$ DBEffect | SpellDescription$ Untap target creature. Until end of turn, it gains hexproof, reach, and "Whenever this creature becomes tapped, it deals damage equal to its power to up to one target creature." SVar:DBEffect:DB$ Effect | RememberObjects$ Targeted | StaticAbilities$ PumpStatic SVar:PumpStatic:Mode$ Continuous | AddKeyword$ Hexproof & Reach | AddTrigger$ BecomesTapped | Affected$ Card.IsRemembered | EffectZone$ Command | Description$ Until end of turn, it gains hexproof, reach, and "Whenever this creature becomes tapped, it deals damage equal to its power to up to one target creature." -SVar:BecomesTapped:Mode$ Taps | ValidCard$ Card.Self | Execute$ TrigFight | TriggerDescription$ Whenever this creature becomes tapped, it deals damage equal to its power to up to one target creature +SVar:BecomesTapped:Mode$ Taps | ValidCard$ Card.Self | Execute$ TrigFight | TriggerDescription$ Whenever this creature becomes tapped, it deals damage equal to its power to up to one target creature. SVar:TrigFight:DB$ DealDamage | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 1 | AILogic$ PowerDmg | NumDmg$ X | DamageSource$ Self SVar:X:Count$CardPower Oracle:Split second (As long as this spell is on the stack, players can't cast spells or activate abilities that aren't mana abilities.)\nUntap target creature. Until end of turn, it gains hexproof, reach, and "Whenever this creature becomes tapped, it deals damage equal to its power to up to one target creature." diff --git a/forge-gui/res/cardsfolder/l/leovolds_operative.txt b/forge-gui/res/cardsfolder/l/leovolds_operative.txt index 69ae38fab0d..0b8ea4a9122 100644 --- a/forge-gui/res/cardsfolder/l/leovolds_operative.txt +++ b/forge-gui/res/cardsfolder/l/leovolds_operative.txt @@ -4,4 +4,4 @@ Types:Creature Elf Rogue PT:3/2 Draft:Draft CARDNAME face up. Draft:As you draft a card, you may draft an additional card from that booster pack. If you do, turn CARDNAME face down, then pass the next booster pack without drafting a card from it. (You may look at that booster pack.) -Oracle:Draft Leovold's Operative face up.\n\nAs you draft a card, you may draft an additional card from that booster pack. If you do, turn Leovold's Operative face down, then pass the next booster pack without drafting a card from it. (You may look at that booster pack.) +Oracle:Draft Leovold's Operative face up.\nAs you draft a card, you may draft an additional card from that booster pack. If you do, turn Leovold's Operative face down, then pass the next booster pack without drafting a card from it. (You may look at that booster pack.) diff --git a/forge-gui/res/cardsfolder/l/liars_pendulum.txt b/forge-gui/res/cardsfolder/l/liars_pendulum.txt index eb55b730a35..1475f39bbdd 100644 --- a/forge-gui/res/cardsfolder/l/liars_pendulum.txt +++ b/forge-gui/res/cardsfolder/l/liars_pendulum.txt @@ -3,8 +3,8 @@ ManaCost:1 Types:Artifact A:AB$ NameCard | Cost$ 2 T | Defined$ You | SubAbility$ DBGuess | SpellDescription$ Choose a card name. Target opponent guesses whether a card with that name is in your hand. You may reveal your hand. If you do and your opponent guessed wrong, draw a card. SVar:DBGuess:DB$ GenericChoice | ValidTgts$ Opponent | Choices$ GuessInHand,GuessNotInHand | AILogic$ Random | ShowChoice$ True | Guess$ True -SVar:GuessInHand:DB$ RevealHand | Defined$ You | Optional$ True | RememberRevealedPlayer$ True | SubAbility$ DBInHandDraw | SpellDescription$ A card with the chosen name is in that player's hand -SVar:GuessNotInHand:DB$ RevealHand | Defined$ You | Optional$ True | RememberRevealedPlayer$ True | SubAbility$ DBNotInHandDraw | SpellDescription$ A card with the chosen name is not in that player's hand +SVar:GuessInHand:DB$ RevealHand | Defined$ You | Optional$ True | RememberRevealedPlayer$ True | SubAbility$ DBInHandDraw | SpellDescription$ A card with the chosen name is in that player's hand. +SVar:GuessNotInHand:DB$ RevealHand | Defined$ You | Optional$ True | RememberRevealedPlayer$ True | SubAbility$ DBNotInHandDraw | SpellDescription$ A card with the chosen name is not in that player's hand. SVar:DBInHandDraw:DB$ Draw | Defined$ You | ConditionPlayerDefined$ Remembered | ConditionPlayerContains$ You | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ0 | SubAbility$ DBCleanup SVar:DBNotInHandDraw:DB$ Draw | Defined$ You | ConditionPlayerDefined$ Remembered | ConditionPlayerContains$ You | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/l/life_cloud.txt b/forge-gui/res/cardsfolder/l/life_cloud.txt index 6610ea329f3..d69d4060035 100644 --- a/forge-gui/res/cardsfolder/l/life_cloud.txt +++ b/forge-gui/res/cardsfolder/l/life_cloud.txt @@ -8,4 +8,4 @@ SVar:DBReturnCreature:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefi SVar:DBRepeatLand:DB$ RepeatEach | RepeatSubAbility$ DBReturnLand | RepeatPlayers$ Player SVar:DBReturnLand:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Land.RememberedPlayerCtrl | DefinedPlayer$ Player.IsRemembered | Chooser$ Player.IsRemembered | ChangeNum$ X | Hidden$ True | Mandatory$ True SVar:X:Count$xPaid -Oracle:Each player gains X life, draws X cards, returns X creatures from their graveyard to the battlefield, then returns X lands from their graveyard to the battlefield. +Oracle:Each player gains X life, draws X cards, returns X creatures from their graveyard to the battlefield, then returns X lands from their graveyard to the battlefield. diff --git a/forge-gui/res/cardsfolder/l/liliana_of_the_dark_realms.txt b/forge-gui/res/cardsfolder/l/liliana_of_the_dark_realms.txt index 552c7510fd5..5315010b550 100644 --- a/forge-gui/res/cardsfolder/l/liliana_of_the_dark_realms.txt +++ b/forge-gui/res/cardsfolder/l/liliana_of_the_dark_realms.txt @@ -2,13 +2,13 @@ Name:Liliana of the Dark Realms ManaCost:2 B B Types:Legendary Planeswalker Liliana Loyalty:3 -A:AB$ ChangeZone | Cost$ AddCounter<1/LOYALTY> | Origin$ Library | Destination$ Hand | Planeswalker$ True | NumCards$ 1 | ChangeType$ Swamp | SpellDescription$ Search your library for a swamp card, reveal it, put it into your hand, then shuffle. -A:AB$ Pump | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature | TgtPrompt$ Select target creature | SubAbility$ ABChoice | SpellDescription$ Target creature gets +X/+X or -X/-X until end of turn, where X is the number of swamps you control. | StackDescription$ Target creature gets +X/+X or -X/-X until end of turn, where X is the number of swamps you control. -A:AB$ Effect | Cost$ SubCounter<6/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Emblem — Liliana Of The Dark Realms | Image$ emblem_liliana_of_the_dark_realms | StaticAbilities$ SwampBoost | Stackable$ False | Duration$ Permanent | SpellDescription$ You get an emblem with "Swamps you control have '{T}: Add {B}{B}{B}{B}.'". +A:AB$ ChangeZone | Cost$ AddCounter<1/LOYALTY> | Origin$ Library | Destination$ Hand | Planeswalker$ True | NumCards$ 1 | ChangeType$ Swamp | SpellDescription$ Search your library for a Swamp card, reveal it, put it into your hand, then shuffle. +A:AB$ Pump | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature | TgtPrompt$ Select target creature | SubAbility$ ABChoice | SpellDescription$ Target creature gets +X/+X or -X/-X until end of turn, where X is the number of Swamps you control. | StackDescription$ Target creature gets +X/+X or -X/-X until end of turn, where X is the number of Swamps you control. +A:AB$ Effect | Cost$ SubCounter<6/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Emblem — Liliana Of The Dark Realms | Image$ emblem_liliana_of_the_dark_realms | StaticAbilities$ SwampBoost | Stackable$ False | Duration$ Permanent | SpellDescription$ You get an emblem with "Swamps you control have '{T}: Add {B}{B}{B}{B}.'" SVar:X:Count$Valid Swamp.YouCtrl SVar:ABChoice:DB$ GenericChoice | Defined$ You | Choices$ ABPump1,ABPump2 -SVar:ABPump1:DB$ Pump | Defined$ Targeted | NumAtt$ +X | NumDef$ +X | SpellDescription$ +X/+X -SVar:ABPump2:DB$ Pump | Defined$ Targeted | NumAtt$ -X | NumDef$ -X | SpellDescription$ -X/-X -SVar:SwampBoost:Mode$ Continuous | EffectZone$ Command | Affected$ Swamp.YouCtrl | AffectedZone$ Battlefield | AddAbility$ BlackTap | Description$ Swamps you control have '{T}: Add {B}{B}{B}{B}.' +SVar:ABPump1:DB$ Pump | Defined$ Targeted | NumAtt$ +X | NumDef$ +X | SpellDescription$ Target creature gets +X/+X until end of turn, where X is the number of Swamps you control. +SVar:ABPump2:DB$ Pump | Defined$ Targeted | NumAtt$ -X | NumDef$ -X | SpellDescription$ Target creature gets -X/-X until end of turn, where X is the number of Swamps you control. +SVar:SwampBoost:Mode$ Continuous | EffectZone$ Command | Affected$ Swamp.YouCtrl | AffectedZone$ Battlefield | AddAbility$ BlackTap | Description$ Swamps you control have "{T}: Add {B}{B}{B}{B}." SVar:BlackTap:AB$ Mana | Cost$ T | Produced$ B | Amount$ 4 | SpellDescription$ Add {B}{B}{B}{B}. Oracle:[+1]: Search your library for a Swamp card, reveal it, put it into your hand, then shuffle.\n[-3]: Target creature gets +X/+X or -X/-X until end of turn, where X is the number of Swamps you control.\n[-6]: You get an emblem with "Swamps you control have '{T}: Add {B}{B}{B}{B}.'" diff --git a/forge-gui/res/cardsfolder/l/lord_skitters_blessing.txt b/forge-gui/res/cardsfolder/l/lord_skitters_blessing.txt index 426c600f8fc..e6730914fc0 100644 --- a/forge-gui/res/cardsfolder/l/lord_skitters_blessing.txt +++ b/forge-gui/res/cardsfolder/l/lord_skitters_blessing.txt @@ -1,11 +1,11 @@ Name:Lord Skitter's Blessing ManaCost:1 B Types:Enchantment -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters, create a Wicked Role token attached to target creature you control. (if you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.) +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters, create a Wicked Role token attached to target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.) SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_wicked | TokenOwner$ You | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control T:Mode$ Phase | Phase$ Draw | ValidPlayer$ You | IsPresent$ Creature.enchanted+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigLoseLife | TriggerDescription$ At the beginning of your draw step, if you control an enchanted creature, you lose 1 life and you draw an additional card. SVar:TrigLoseLife:DB$ LoseLife | Defined$ You | LifeAmount$ 1 | SubAbility$ DBDraw SVar:DBDraw:DB$ Draw | NumCards$ 1 | Defined$ You DeckHas:Ability$Token & Type$Role|Aura DeckHints:Type$Aura -Oracle:When Lord Skitter's Blessing enters, create a Wicked Role token attached to target creature you control. (if you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.)\nAt the beginning of your draw step, if you control an enchanted creature, you lose 1 life and you draw an additional card. +Oracle:When Lord Skitter's Blessing enters, create a Wicked Role token attached to target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature gets +1/+1. When this Aura is put into a graveyard, each opponent loses 1 life.)\nAt the beginning of your draw step, if you control an enchanted creature, you lose 1 life and you draw an additional card. diff --git a/forge-gui/res/cardsfolder/l/love_song_of_night_and_day.txt b/forge-gui/res/cardsfolder/l/love_song_of_night_and_day.txt index b42f76303aa..7f7529cf446 100644 --- a/forge-gui/res/cardsfolder/l/love_song_of_night_and_day.txt +++ b/forge-gui/res/cardsfolder/l/love_song_of_night_and_day.txt @@ -6,5 +6,5 @@ K:Chapter:3:DBDraw,DBToken,DBPutCounter SVar:DBDraw:DB$ Draw | NumCards$ 2 | ValidTgts$ Opponent | Defined$ TargetedAndYou | SpellDescription$ You and target opponent each draw two cards. SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ w_1_1_bird_flying | SpellDescription$ Create a 1/1 white Bird creature token with flying. SVar:DBPutCounter:DB$ PutCounter | TargetMin$ 0 | TargetMax$ 2 | ValidTgts$ Creature | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Put a +1/+1 counter on each of up to two target creatures. -DeckHas:Ability$Counters|Tokens +DeckHas:Ability$Counters|Token Oracle:Read ahead (Choose a chapter and start with that many lore counters. Add one after your draw step. Skipped chapters don't trigger. Sacrifice after III.)\nI — You and target opponent each draw two cards.\nII — Create a 1/1 white Bird creature token with flying.\nIII — Put a +1/+1 counter on each of up to two target creatures. diff --git a/forge-gui/res/cardsfolder/l/loyal_cathar_unhallowed_cathar.txt b/forge-gui/res/cardsfolder/l/loyal_cathar_unhallowed_cathar.txt index 42bc1d13fec..44ef5d2394f 100644 --- a/forge-gui/res/cardsfolder/l/loyal_cathar_unhallowed_cathar.txt +++ b/forge-gui/res/cardsfolder/l/loyal_cathar_unhallowed_cathar.txt @@ -4,7 +4,7 @@ Types:Creature Human Soldier PT:2/2 K:Vigilance T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDelay | TriggerDescription$ When CARDNAME dies, return it to the battlefield transformed under your control at the beginning of the next end step. -SVar:TrigDelay:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigReturn | RememberObjects$ TriggeredNewCardLKICopy | TriggerDescription$ return CARDNAME to the battlefield transformed +SVar:TrigDelay:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigReturn | RememberObjects$ TriggeredNewCardLKICopy | TriggerDescription$ Return CARDNAME to the battlefield transformed under your control. SVar:TrigReturn:DB$ ChangeZone | Defined$ DelayTriggerRememberedLKI | Origin$ Graveyard | Destination$ Battlefield | Transformed$ True | GainControl$ True AlternateMode:DoubleFaced Oracle:Vigilance\nWhen Loyal Cathar dies, return it to the battlefield transformed under your control at the beginning of the next end step. diff --git a/forge-gui/res/cardsfolder/l/luxior_and_shadowspear.txt b/forge-gui/res/cardsfolder/l/luxior_and_shadowspear.txt index 9e6e4d5071f..e2cdd2ad41d 100644 --- a/forge-gui/res/cardsfolder/l/luxior_and_shadowspear.txt +++ b/forge-gui/res/cardsfolder/l/luxior_and_shadowspear.txt @@ -5,6 +5,6 @@ K:Equip:3:Planeswalker.YouCtrl:planeswalker K:Equip:3 S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ X | AddToughness$ X | AddKeyword$ Trample & Lifelink | Description$ Equipped creature gets +1/+1 for each counter on it, and has trample and lifelink. SVar:X:Equipped$CardCounters.ALL -S:Mode$ Continuous | Affected$ Permanent.EquippedBy | RemoveType$ Planeswalker | AddType$ Creature | Description$ Equipped permanent isn't a planeswalker and is a creature in addition it its other types. (Loyalty abilities can still be activated.) +S:Mode$ Continuous | Affected$ Permanent.EquippedBy | RemoveType$ Planeswalker | AddType$ Creature | Description$ Equipped permanent isn't a planeswalker and is a creature in addition to its other types. (Loyalty abilities can still be activated.) A:AB$ AnimateAll | Cost$ 1 | ValidCards$ Permanent.OppCtrl | RemoveKeywords$ Hexproof & Indestructible | SpellDescription$ Permanents your opponents control lose hexproof and indestructible until end of turn. | StackDescription$ SpellDescription -Oracle:Equipped creature gets +1/+1 for each counter on it, and has trample and lifelink.\n{1}: Permanents your opponents control lose hexproof and indestructible until end of turn.\nEquipped permanent isn't a planeswalker and is a creature in addition it its other types. (Loyalty abilities can still be activated.)\Equip creature or planeswalker {3} +Oracle:Equipped creature gets +1/+1 for each counter on it, and has trample and lifelink.\n{1}: Permanents your opponents control lose hexproof and indestructible until end of turn.\nEquipped permanent isn't a planeswalker and is a creature in addition to its other types. (Loyalty abilities can still be activated.)\Equip creature or planeswalker {3} diff --git a/forge-gui/res/cardsfolder/l/luxior_giadas_gift.txt b/forge-gui/res/cardsfolder/l/luxior_giadas_gift.txt index fb96c2470d6..f773e40ed73 100644 --- a/forge-gui/res/cardsfolder/l/luxior_giadas_gift.txt +++ b/forge-gui/res/cardsfolder/l/luxior_giadas_gift.txt @@ -5,5 +5,5 @@ K:Equip:1:Planeswalker.YouCtrl:planeswalker K:Equip:3 S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ X | AddToughness$ X | Description$ Equipped creature gets +1/+1 for each counter on it. SVar:X:Equipped$CardCounters.ALL -S:Mode$ Continuous | Affected$ Permanent.EquippedBy | RemoveType$ Planeswalker | AddType$ Creature | Description$ Equipped permanent isn't a planeswalker and is a creature in addition it its other types. (Loyalty abilities can still be activated.) -Oracle:Equipped creature gets +1/+1 for each counter on it.\nEquipped permanent isn't a planeswalker and is a creature in addition it its other types. (Loyalty abilities can still be activated.)\nEquip planeswalker 1\nEquip 3 +S:Mode$ Continuous | Affected$ Permanent.EquippedBy | RemoveType$ Planeswalker | AddType$ Creature | Description$ Equipped permanent isn't a planeswalker and is a creature in addition to its other types. (Loyalty abilities can still be activated.) +Oracle:Equipped creature gets +1/+1 for each counter on it.\nEquipped permanent isn't a planeswalker and is a creature in addition to its other types. (Loyalty abilities can still be activated.)\nEquip planeswalker 1\nEquip 3 diff --git a/forge-gui/res/cardsfolder/m/marker_beetles.txt b/forge-gui/res/cardsfolder/m/marker_beetles.txt index a5331739422..a476fe59fbc 100644 --- a/forge-gui/res/cardsfolder/m/marker_beetles.txt +++ b/forge-gui/res/cardsfolder/m/marker_beetles.txt @@ -2,7 +2,7 @@ Name:Marker Beetles ManaCost:1 G G Types:Creature Insect PT:2/3 -A:AB$ Draw | Cost$ 2 Sac<1/CARDNAME> | NumCards$ 1 | SpellDescription$ Draw a card +A:AB$ Draw | Cost$ 2 Sac<1/CARDNAME> | NumCards$ 1 | SpellDescription$ Draw a card. T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigPump | TriggerDescription$ When CARDNAME dies, target creature gets +1/+1 until end of turn. SVar:TrigPump:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +1 | NumDef$ +1 AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/m/masters_rebuke.txt b/forge-gui/res/cardsfolder/m/masters_rebuke.txt index 621e9150a52..bb2d2e62e1d 100644 --- a/forge-gui/res/cardsfolder/m/masters_rebuke.txt +++ b/forge-gui/res/cardsfolder/m/masters_rebuke.txt @@ -1,7 +1,7 @@ Name:Master's Rebuke ManaCost:1 G Types:Instant -A:SP$ Pump | ValidTgts$ Creature.YouCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you control | SubAbility$ RebukeDamage | StackDescription$ None | SpellDescription$ Target creature you control deals damage equal to its power to target creature or planeswalker you don't control +A:SP$ Pump | ValidTgts$ Creature.YouCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you control | SubAbility$ RebukeDamage | StackDescription$ None | SpellDescription$ Target creature you control deals damage equal to its power to target creature or planeswalker you don't control. SVar:RebukeDamage:DB$ DealDamage | ValidTgts$ Creature.YouDontCtrl,Planeswalker.YouDontCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature or planeswalker you don't control | NumDmg$ X | DamageSource$ ParentTarget SVar:X:ParentTargeted$CardPower Oracle:Target creature you control deals damage equal to its power to target creature or planeswalker you don't control. diff --git a/forge-gui/res/cardsfolder/m/millicent_restless_revenant.txt b/forge-gui/res/cardsfolder/m/millicent_restless_revenant.txt index 5f3190601f2..5356e05f1b2 100644 --- a/forge-gui/res/cardsfolder/m/millicent_restless_revenant.txt +++ b/forge-gui/res/cardsfolder/m/millicent_restless_revenant.txt @@ -8,6 +8,6 @@ SVar:X:Count$TypeYouCtrl.Spirit T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self,Spirit.Other+nonToken+YouCtrl | Execute$ TrigToken | TriggerDescription$ Whenever CARDNAME or another nontoken Spirit you control dies or deals combat damage to a player, create a 1/1 white Spirit creature token with flying. T:Mode$ DamageDone | ValidSource$ Card.Self,Spirit.Other+nonToken+YouCtrl | ValidTarget$ Player | Execute$ TrigToken | TriggerZones$ Battlefield | CombatDamage$ True | Secondary$ True | TriggerDescription$ Whenever CARDNAME or another nontoken Spirit you control dies or deals combat damage to a player, create a 1/1 white Spirit creature token with flying. SVar:TrigToken:DB$ Token | TokenScript$ w_1_1_spirit_flying -DeckHints:Type$Spirit & Ability$Disturb +DeckHints:Type$Spirit & Keyword$Disturb DeckHas:Ability$Token Oracle:This spell costs {1} less to cast for each Spirit you control.\nFlying\nWhenever Millicent, Restless Revenant or another nontoken Spirit you control dies or deals combat damage to a player, create a 1/1 white Spirit creature token with flying. diff --git a/forge-gui/res/cardsfolder/m/mishra_claimed_by_gix_mishra_lost_to_phyrexia.txt b/forge-gui/res/cardsfolder/m/mishra_claimed_by_gix_mishra_lost_to_phyrexia.txt index 171eb5edf79..317b64ce50d 100644 --- a/forge-gui/res/cardsfolder/m/mishra_claimed_by_gix_mishra_lost_to_phyrexia.txt +++ b/forge-gui/res/cardsfolder/m/mishra_claimed_by_gix_mishra_lost_to_phyrexia.txt @@ -26,7 +26,7 @@ T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigCharm | TriggerZones$ Batt SVar:TrigCharm:DB$ Charm | Choices$ DBDiscard,DBDamage,DBDestroy,DBPump,DBCurse,DBToken | CharmNum$ 3 SVar:DBDiscard:DB$ Discard | ValidTgts$ Opponent | NumCards$ 2 | Mode$ TgtChoose | SpellDescription$ Target opponent discards two cards. SVar:DBDamage:DB$ DealDamage | NumDmg$ 3 | ValidTgts$ Any | SpellDescription$ NICKNAME deals 3 damage to any target. -SVar:DBDestroy:DB$ Destroy | TargetMax$ 1 | ValidTgts$ Artifact,Planeswalker | TgtPrompt$ Select target artifact or planeswalker | SpellDescription$ Destroy target artifact or planeswalker +SVar:DBDestroy:DB$ Destroy | TargetMax$ 1 | ValidTgts$ Artifact,Planeswalker | TgtPrompt$ Select target artifact or planeswalker | SpellDescription$ Destroy target artifact or planeswalker. SVar:DBPump:DB$ PumpAll | ValidCards$ Card.Creature+YouCtrl | KW$ Menace & Trample | SpellDescription$ Creatures you control gain menace and trample until end of turn. SVar:DBCurse:DB$ PumpAll | ValidCards$ Card.Creature+YouDontCtrl | NumAtt$ -1 | NumDef$ -1 | SpellDescription$ Creatures you don't control get -1/-1 until end of turn. SVar:DBToken:DB$ Token | TokenAmount$ 2 | TokenTapped$ True | TokenScript$ c_a_powerstone | TokenOwner$ You | SpellDescription$ Create two tapped Powerstone tokens. diff --git a/forge-gui/res/cardsfolder/m/missy.txt b/forge-gui/res/cardsfolder/m/missy.txt index c7f54b8911c..89288159ddc 100644 --- a/forge-gui/res/cardsfolder/m/missy.txt +++ b/forge-gui/res/cardsfolder/m/missy.txt @@ -6,7 +6,7 @@ T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ SVar:TrigChangeZone:DB$ ChangeZone | Defined$ TriggeredCard | GainControl$ True | FaceDown$ True | Origin$ Graveyard | Destination$ Battlefield | Tapped$ True | FaceDownSetType$ Artifact & Creature & Cyberman | FaceDownPower$ 2 | FaceDownToughness$ 2 T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ VillainousChoice | TriggerDescription$ At the beginning of your end step, each opponent faces a villainous choice — Each artifact creature you control deals 1 damage to that opponent, or you draw a card and chaos ensues. SVar:VillainousChoice:DB$ VillainousChoice | Defined$ Opponent | Choices$ DBDamage,DBDraw -SVar:DBDamage:DB$ DealDamage | NumDmg$ 1 | DamageSource$ Valid Artifact.Creature+YouCtrl | Defined$ Remembered | SpellDescription$ Each artifact creature you control deals 1 damage to that opponent +SVar:DBDamage:DB$ DealDamage | NumDmg$ 1 | DamageSource$ Valid Artifact.Creature+YouCtrl | Defined$ Remembered | SpellDescription$ Each artifact creature you control deals 1 damage to that opponent. SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1 | SubAbility$ DBChaos | SpellDescription$ You draw a card and chaos ensues. SVar:DBChaos:DB$ ChaosEnsues DeckHints:Type$Artifact diff --git a/forge-gui/res/cardsfolder/m/mox_poison.txt b/forge-gui/res/cardsfolder/m/mox_poison.txt index 6747b294fc7..648a4e1cc45 100644 --- a/forge-gui/res/cardsfolder/m/mox_poison.txt +++ b/forge-gui/res/cardsfolder/m/mox_poison.txt @@ -1,6 +1,6 @@ Name:Mox Poison ManaCost:0 Types:Artifact -A:AB$ Mana | Cost$ T | Produced$ Any | SubAbility$ DBPain | SpellDescription$ Add one mana of any color. You get two poison counters +A:AB$ Mana | Cost$ T | Produced$ Any | SubAbility$ DBPain | SpellDescription$ Add one mana of any color. You get two poison counters. SVar:DBPain:DB$ Poison | Defined$ You | Num$ 2 -Oracle:{T}: Add one mana of any color. You get two poison counters +Oracle:{T}: Add one mana of any color. You get two poison counters. diff --git a/forge-gui/res/cardsfolder/m/mutual_epiphany.txt b/forge-gui/res/cardsfolder/m/mutual_epiphany.txt index 8cc47f3a06a..40ffe03986b 100644 --- a/forge-gui/res/cardsfolder/m/mutual_epiphany.txt +++ b/forge-gui/res/cardsfolder/m/mutual_epiphany.txt @@ -1,7 +1,7 @@ Name:Mutual Epiphany ManaCost:no cost Types:Phenomenon -T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ Epiphany | TriggerDescription$ When you encounter CARDNAME, each player draws four cards. (Then planeswalk away from this phenomenon) +T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ Epiphany | TriggerDescription$ When you encounter CARDNAME, each player draws four cards. (Then planeswalk away from this phenomenon.) SVar:Epiphany:DB$ Draw | Defined$ Player | NumCards$ 4 | SubAbility$ PWAway | SpellDescription$ Each player draws four cards. SVar:PWAway:DB$ Planeswalk Oracle:When you encounter Mutual Epiphany, each player draws four cards. (Then planeswalk away from this phenomenon.) diff --git a/forge-gui/res/cardsfolder/n/1996_world_champion.txt b/forge-gui/res/cardsfolder/n/1996_world_champion.txt new file mode 100644 index 00000000000..2873fe8c99e --- /dev/null +++ b/forge-gui/res/cardsfolder/n/1996_world_champion.txt @@ -0,0 +1,18 @@ +Name:1996 World Champion +ManaCost:W U B R G +Types:Legendary Creature Human Gamer +PT:*/* +Text:[Developer's note: Updated and adapted with reference to subsequent Oracle updates and EDH Silver's unofficial errata. This updated rules text is displayed in-game.] +# EDH Silver unofficial errata found at https://edhsilver.com/cards/uc/occ/1996-world-champion/ +K:MayEffectFromOpeningDeck:DBReveal +SVar:DBReveal:DB$ Reveal | RevealDefined$ Self | OptionalDecider$ You | SubAbility$ DBEffect | SpellDescription$ Before you shuffle your deck to start the game, you may reveal this card from your deck. If you do, you get an emblem with "Discard your hand: Search your library for a card named 1996 World Champion, reveal it, then shuffle and put that card on top. Activate only during your upkeep and only if a card named 1996 World Champion is in your library." +SVar:DBEffect:DB$ Effect | Name$ Emblem — 1996 World Champion | Image$ emblem_1996_world_champion | Abilities$ ABRiseToTop | Stackable$ False | Duration$ Permanent | AILogic$ Always +SVar:ABRiseToTop:AB$ ChangeZone | Cost$ Discard<1/Hand> | Origin$ Library | Destination$ Library | LibraryPosition$ 0 | ChangeType$ Card.named1996 World Champion | ActivationPhases$ Upkeep | PlayerTurn$ True | ActivationZone$ Command | IsPresent$ Card.YouOwn+named1996 World Champion | PresentZone$ Library | StackDescription$ REP Search your_{p:You} searches their & reveal_reveals & shuffle and put_{p:You} shuffles and puts & . Activate only during your upkeep and only if a card named 1996 World Champion is in your library._. | SpellDescription$ Search your library for a card named 1996 World Champion, reveal it, then shuffle and put that card on top. Activate only during your upkeep and only if a card named 1996 World Champion is in your library. +K:ETBReplacement:Other:ChooseP +SVar:ChooseP:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent | ChoiceTitle$ Choose an opponent | RememberChosen$ True | SpellDescription$ As CARDNAME enters, choose an opponent. +K:Shroud +S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetPower$ X | SetToughness$ X | Description$ CARDNAME's power and toughness are each equal to the chosen player's life total. +SVar:X:PlayerCountRemembered$LifeTotal +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ DBCleanup | Static$ True +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:Cannot be the target of spells or effects.\nWorld Champion has power and toughness equal to the life total of target opponent.\n{0}: Discard your hand to search your library for 1996 World Champion and reveal it to all players. Shuffle your library and put 1996 World Champion on top of it. Use this ability only at the beginning of your upkeep, and only if 1996 World Champion is in your library. diff --git a/forge-gui/res/cardsfolder/n/nantuko_monastery.txt b/forge-gui/res/cardsfolder/n/nantuko_monastery.txt index fc6036e92ae..9af9c4fbcca 100644 --- a/forge-gui/res/cardsfolder/n/nantuko_monastery.txt +++ b/forge-gui/res/cardsfolder/n/nantuko_monastery.txt @@ -2,6 +2,6 @@ Name:Nantuko Monastery ManaCost:no cost Types:Land A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. -A:AB$ Animate | Cost$ G W | Activation$ Threshold | Defined$ Self | Power$ 4 | Toughness$ 4 | Types$ Creature,Insect,Monk | Colors$ Green,White | OverwriteColors$ True | Keywords$ First Strike | SpellDescription$ CARDNAME becomes a 4/4 green and white Insect Monk creature with first strike until end of turn. It's still a land. Activate only if seven or more cards are in your graveyard. | PrecostDesc$ Threshold — +A:AB$ Animate | Cost$ G W | Activation$ Threshold | PrecostDesc$ Threshold — | Defined$ Self | Power$ 4 | Toughness$ 4 | Types$ Creature,Insect,Monk | Colors$ Green,White | OverwriteColors$ True | Keywords$ First Strike | SpellDescription$ CARDNAME becomes a 4/4 green and white Insect Monk creature with first strike until end of turn. It's still a land. Activate only if seven or more cards are in your graveyard. AI:RemoveDeck:Random Oracle:{T}: Add {C}.\nThreshold — {G}{W}: Nantuko Monastery becomes a 4/4 green and white Insect Monk creature with first strike until end of turn. It's still a land. Activate only if seven or more cards are in your graveyard. diff --git a/forge-gui/res/cardsfolder/n/nantuko_slicer.txt b/forge-gui/res/cardsfolder/n/nantuko_slicer.txt index dfc99c4fcfb..afa44542c7b 100644 --- a/forge-gui/res/cardsfolder/n/nantuko_slicer.txt +++ b/forge-gui/res/cardsfolder/n/nantuko_slicer.txt @@ -3,7 +3,7 @@ ManaCost:2 G G Types:Creature Insect PT:3/2 K:Kicker:B -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME enters, return target card from your graveyard to your hand. If this spell was kicked, conjure a duplicate of target card in an opponent's graveyard into your hand. It perpetually gains: "You may spend mana as though it were mana of any color to cast this spell." +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME enters, return target card from your graveyard to your hand. If this spell was kicked, conjure a duplicate of target card in an opponent's graveyard into your hand. It perpetually gains "You may spend mana as though it were mana of any color to cast this spell." SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Card.YouOwn | TgtPrompt$ Select target card from your graveyard | SubAbility$ DBConjure SVar:DBConjure:DB$ MakeCard | Condition$ Kicked | Conjure$ True | TgtPrompt$ Select target creature card in an opponent's graveyard | ValidTgts$ Creature.OppOwn | TgtZone$ Graveyard | DefinedName$ ThisTargetedCard | Zone$ Hand | RememberMade$ True | SubAbility$ DBAnimate SVar:DBAnimate:DB$ Animate | Defined$ Remembered | staticAbilities$ SpendAnyMana | Duration$ Perpetual | SubAbility$ DBCleanup diff --git a/forge-gui/res/cardsfolder/n/narfi_betrayer_king.txt b/forge-gui/res/cardsfolder/n/narfi_betrayer_king.txt index 03414882ed7..59e9be926b4 100644 --- a/forge-gui/res/cardsfolder/n/narfi_betrayer_king.txt +++ b/forge-gui/res/cardsfolder/n/narfi_betrayer_king.txt @@ -4,6 +4,6 @@ Types:Legendary Snow Creature Zombie Wizard PT:4/3 S:Mode$ Continuous | Affected$ Creature.Zombie+Other+YouCtrl,Creature.Snow+Other+YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Other Snow and Zombie creatures you control get +1/+1. SVar:PlayMain1:TRUE -A:AB$ ChangeZone | Cost$ S S S | Origin$ Graveyard | Destination$ Battlefield | ActivationZone$ Graveyard | Tapped$ True | SpellDescription$ Return CARDNAME from your graveyard to the battlefield tapped +A:AB$ ChangeZone | Cost$ S S S | Origin$ Graveyard | Destination$ Battlefield | ActivationZone$ Graveyard | Tapped$ True | SpellDescription$ Return CARDNAME from your graveyard to the battlefield tapped. DeckHints:Type$Snow|Zombie Oracle:Other snow and Zombie creatures you control get +1/+1.\n{S}{S}{S}: Return Narfi, Betrayer King from your graveyard to the battlefield tapped. ({S} can be paid with one mana from a snow source.) diff --git a/forge-gui/res/cardsfolder/n/natures_blessing.txt b/forge-gui/res/cardsfolder/n/natures_blessing.txt index 8783a9869bd..ac8a645eace 100644 --- a/forge-gui/res/cardsfolder/n/natures_blessing.txt +++ b/forge-gui/res/cardsfolder/n/natures_blessing.txt @@ -3,8 +3,8 @@ ManaCost:2 G W Types:Enchantment A:AB$ GenericChoice | Cost$ G W Discard<1/Card> | ValidTgts$ Creature | Defined$ You | Choices$ DBPutCounter,DBBanding,DBFirstStrike,DBTrample | SpellDescription$ Put a +1/+1 counter on target creature or that creature gains banding, first strike, or trample. SVar:DBPutCounter:DB$ PutCounter | Defined$ Targeted | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Put a +1/+1 counter on target creature. -SVar:DBBanding:DB$ Pump | Defined$ Targeted | KW$ Banding | Duration$ Permanent | SpellDescription$ Target creature gains Banding -SVar:DBFirstStrike:DB$ Pump | Defined$ Targeted | KW$ First Strike | Duration$ Permanent | SpellDescription$ Target creature gains first strike -SVar:DBTrample:DB$ Pump | Defined$ Targeted | KW$ Trample | Duration$ Permanent | SpellDescription$ Target creature gains Trample +SVar:DBBanding:DB$ Pump | Defined$ Targeted | KW$ Banding | Duration$ Permanent | SpellDescription$ Target creature gains banding. +SVar:DBFirstStrike:DB$ Pump | Defined$ Targeted | KW$ First Strike | Duration$ Permanent | SpellDescription$ Target creature gains first strike. +SVar:DBTrample:DB$ Pump | Defined$ Targeted | KW$ Trample | Duration$ Permanent | SpellDescription$ Target creature gains trample. SVar:NonStackingEffect:True Oracle:{G}{W}, Discard a card: Put a +1/+1 counter on target creature or that creature gains banding, first strike, or trample. (This effect lasts indefinitely. Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding a player controls are blocking or being blocked by a creature, that player divides that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.) diff --git a/forge-gui/res/cardsfolder/n/nettling_host.txt b/forge-gui/res/cardsfolder/n/nettling_host.txt index 07d650f8f79..b9c7c746cdd 100644 --- a/forge-gui/res/cardsfolder/n/nettling_host.txt +++ b/forge-gui/res/cardsfolder/n/nettling_host.txt @@ -3,7 +3,7 @@ ManaCost:2 W Types:Creature Phyrexian Rat PT:3/3 K:Toxic:2 -A:AB$ MakeCard | Cost$ ExileFromGrave<1/CARDNAME> | Conjure$ True | Name$ Nettlecyst | Zone$ Hand | ActivationZone$ Graveyard | PrecostDesc$ Corrupted — | CheckSVar$ X | SVarCompare$ GE3 | SpellDescription$ Conjure a card named Nettlecyst into your hand. Activate only if an opponent has three or more poison counters +A:AB$ MakeCard | Cost$ ExileFromGrave<1/CARDNAME> | Conjure$ True | Name$ Nettlecyst | Zone$ Hand | ActivationZone$ Graveyard | PrecostDesc$ Corrupted — | CheckSVar$ X | SVarCompare$ GE3 | SpellDescription$ Conjure a card named Nettlecyst into your hand. Activate only if an opponent has three or more poison counters. SVar:X:PlayerCountOpponents$HighestCounters.Poison SVar:SacMe:1 SVar:DiscardMe:1 diff --git a/forge-gui/res/cardsfolder/n/nicol_bolas_the_deceiver.txt b/forge-gui/res/cardsfolder/n/nicol_bolas_the_deceiver.txt index 007af168685..09461f571a7 100644 --- a/forge-gui/res/cardsfolder/n/nicol_bolas_the_deceiver.txt +++ b/forge-gui/res/cardsfolder/n/nicol_bolas_the_deceiver.txt @@ -3,8 +3,8 @@ ManaCost:5 U B R Types:Legendary Planeswalker Bolas Loyalty:5 A:AB$ GenericChoice | Cost$ AddCounter<3/LOYALTY> | Planeswalker$ True | Defined$ Opponent | Choices$ SacNonland,Discard | TempRemember$ Chooser | FallbackAbility$ LoseLifeFallback | AILogic$ PayUnlessCost | SpellDescription$ Each opponent loses 3 life unless that player sacrifices a nonland permanent or discards a card. -SVar:Discard:DB$ LoseLife | Defined$ Remembered | LifeAmount$ 3 | UnlessCost$ Discard<1/Card> | UnlessPayer$ Remembered | SpellDescription$ You lose 3 life unless you discard a card -SVar:SacNonland:DB$ LoseLife | Defined$ Remembered | LifeAmount$ 3 | UnlessCost$ Sac<1/Permanent.nonLand> | UnlessPayer$ Remembered | SpellDescription$ You lose 3 life unless you sacrifice a nonland permanent +SVar:Discard:DB$ LoseLife | Defined$ Remembered | LifeAmount$ 3 | UnlessCost$ Discard<1/Card> | UnlessPayer$ Remembered | SpellDescription$ You lose 3 life unless you discard a card. +SVar:SacNonland:DB$ LoseLife | Defined$ Remembered | LifeAmount$ 3 | UnlessCost$ Sac<1/Permanent.nonLand> | UnlessPayer$ Remembered | SpellDescription$ You lose 3 life unless you sacrifice a nonland permanent. SVar:LoseLifeFallback:DB$ LoseLife | Defined$ Remembered | LifeAmount$ 3 A:AB$ Destroy | Cost$ SubCounter<3/LOYALTY> | ValidTgts$ Creature | Planeswalker$ True | SubAbility$ DBDraw | SpellDescription$ Destroy target creature. Draw a card. SVar:DBDraw:DB$ Draw | NumCards$ 1 diff --git a/forge-gui/res/cardsfolder/n/niko_defies_destiny.txt b/forge-gui/res/cardsfolder/n/niko_defies_destiny.txt index 0345b7a370b..590158405f4 100644 --- a/forge-gui/res/cardsfolder/n/niko_defies_destiny.txt +++ b/forge-gui/res/cardsfolder/n/niko_defies_destiny.txt @@ -6,5 +6,5 @@ SVar:DBGainLife:DB$ GainLife | LifeAmount$ X | SpellDescription$ You gain 2 life SVar:X:Count$ValidExile Card.foretold+YouOwn/Times.2 SVar:DBMana:DB$ Mana | Produced$ W U | RestrictValid$ Static.Foretelling,Spell.withForetell | SpellDescription$ Add {W}{U}. Spend this mana only to foretell cards or cast spells that have foretell. SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Card.YouOwn+withForetell | SpellDescription$ Return target card with foretell from your graveyard to your hand. -DeckHas:Ability$Graveyard|GainLife +DeckHas:Ability$Graveyard|LifeGain Oracle:(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)\nI — You gain 2 life for each foretold card you own in exile.\nII — Add {W}{U}. Spend this mana only to foretell cards or cast spells that have foretell.\nIII — Return target card with foretell from your graveyard to your hand. diff --git a/forge-gui/res/cardsfolder/n/nissa_steward_of_elements.txt b/forge-gui/res/cardsfolder/n/nissa_steward_of_elements.txt index 2174eef7165..588ee6770cd 100644 --- a/forge-gui/res/cardsfolder/n/nissa_steward_of_elements.txt +++ b/forge-gui/res/cardsfolder/n/nissa_steward_of_elements.txt @@ -4,7 +4,7 @@ Types:Legendary Planeswalker Nissa Loyalty:X SVar:X:Count$xPaid A:AB$ Scry | Cost$ AddCounter<2/LOYALTY> | Planeswalker$ True | ScryNum$ 2 | SpellDescription$ Scry 2. -A:AB$ Dig | Cost$ AddCounter<0/LOYALTY> | Planeswalker$ True | DigNum$ 1 | ChangeNum$ 1 | Optional$ True | ChangeValid$ Land,Creature.cmcLEY | ForceRevealToController$ True | PromptToSkipOptionalAbility$ True | AILogic$ AlwaysConfirm | OptionalAbilityPrompt$ Would you like to put the permanent onto the battlefield? | DestinationZone$ Battlefield | LibraryPosition2$ 0 | SpellDescription$ Look at the top card of your library. If it's a land card or a creature card with mana value less than or equal to the number of loyalty counters on Nissa, Steward of Elements, you may put that card onto the battlefield. +A:AB$ Dig | Cost$ AddCounter<0/LOYALTY> | Planeswalker$ True | DigNum$ 1 | ChangeNum$ 1 | Optional$ True | ChangeValid$ Land,Creature.cmcLEY | ForceRevealToController$ True | PromptToSkipOptionalAbility$ True | AILogic$ AlwaysConfirm | OptionalAbilityPrompt$ Would you like to put the permanent onto the battlefield? | DestinationZone$ Battlefield | LibraryPosition2$ 0 | SpellDescription$ Look at the top card of your library. If it's a land card or a creature card with mana value less than or equal to the number of loyalty counters on CARDNAME, you may put that card onto the battlefield. A:AB$ Untap | Cost$ SubCounter<6/LOYALTY> | Planeswalker$ True | Ultimate$ True | ValidTgts$ Land.YouCtrl | TargetMin$ 0 | TargetMax$ 2 | SubAbility$ Animate | SpellDescription$ Untap up to two target lands you control. They become 5/5 Elemental creatures with flying and haste until end of turn. They're still lands. SVar:Animate:DB$ Animate | Defined$ Targeted | Power$ 5 | Toughness$ 5 | Types$ Creature,Elemental | Keywords$ Flying & Haste SVar:Y:Count$CardCounters.LOYALTY diff --git a/forge-gui/res/cardsfolder/n/nissas_pilgrimage.txt b/forge-gui/res/cardsfolder/n/nissas_pilgrimage.txt index 45c76eca43b..ff82211904d 100644 --- a/forge-gui/res/cardsfolder/n/nissas_pilgrimage.txt +++ b/forge-gui/res/cardsfolder/n/nissas_pilgrimage.txt @@ -2,7 +2,7 @@ Name:Nissa's Pilgrimage ManaCost:2 G Types:Sorcery A:SP$ ChangeZone | Origin$ Library | Destination$ Library | ChangeType$ Land.Basic+Forest | ChangeNum$ X | RememberChanged$ True | SubAbility$ DBBattlefield | Shuffle$ False | StackDescription$ SpellDescription | SpellDescription$ Search your library for up to two basic Forest cards, reveal those cards, and put one onto the battlefield tapped and the rest into your hand. Then shuffle. Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, search your library for up to three basic Forest cards instead of two. -SVar:DBBattlefield:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | SubAbility$ DBHand | ChangeType$ Card.IsRemembered | ChangeNum$ 1 | ForgetChanged$ True | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to go to the battlefield | Shuffle$ False | StackDescription$ None +SVar:DBBattlefield:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | Tapped$ True | SubAbility$ DBHand | ChangeType$ Card.IsRemembered | ChangeNum$ 1 | ForgetChanged$ True | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card to put onto the battlefield | Shuffle$ False | StackDescription$ None SVar:DBHand:DB$ ChangeZone | Origin$ Library | Destination$ Hand | Defined$ Remembered | NoLooking$ True | StackDescription$ None | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Count$Compare Y GE2.3.2 diff --git a/forge-gui/res/cardsfolder/n/nomad_decoy.txt b/forge-gui/res/cardsfolder/n/nomad_decoy.txt index 31e034cefad..033b6e27baf 100644 --- a/forge-gui/res/cardsfolder/n/nomad_decoy.txt +++ b/forge-gui/res/cardsfolder/n/nomad_decoy.txt @@ -3,7 +3,7 @@ ManaCost:2 W Types:Creature Human Nomad PT:1/2 A:AB$ Tap | Cost$ W T | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ Tap target creature. -A:AB$ Tap | Cost$ W W T | ValidTgts$ Creature | TgtPrompt$ Select target creature | TargetMin$ 2 | TargetMax$ 2 | CheckSVar$ X | SVarCompare$ GE7 | SpellDescription$ Tap two target creatures. Activate only if seven or more cards are in your graveyard. | PrecostDesc$ Threshold — +A:AB$ Tap | Cost$ W W T | ValidTgts$ Creature | TgtPrompt$ Select target creature | TargetMin$ 2 | TargetMax$ 2 | CheckSVar$ X | SVarCompare$ GE7 | PrecostDesc$ Threshold — | SpellDescription$ Tap two target creatures. Activate only if seven or more cards are in your graveyard. SVar:X:Count$InYourYard SVar:NonCombatPriority:1 Oracle:{W}, {T}: Tap target creature.\nThreshold — {W}{W}, {T}: Tap two target creatures. Activate only if seven or more cards are in your graveyard. diff --git a/forge-gui/res/cardsfolder/n/nuclear_fallout.txt b/forge-gui/res/cardsfolder/n/nuclear_fallout.txt index cc0745b0114..00d31ae49dc 100644 --- a/forge-gui/res/cardsfolder/n/nuclear_fallout.txt +++ b/forge-gui/res/cardsfolder/n/nuclear_fallout.txt @@ -1,7 +1,7 @@ Name:Nuclear Fallout ManaCost:X B B Types:Sorcery -A:SP$ PumpAll | ValidCards$ Creature | NumAtt$ -Y | NumDef$ -Y | SubAbility$ DBRadiation | SpellDescription$ Each creature gets twice -X/-X until end of turn +A:SP$ PumpAll | ValidCards$ Creature | NumAtt$ -Y | NumDef$ -Y | SubAbility$ DBRadiation | SpellDescription$ Each creature gets twice -X/-X until end of turn. SVar:DBRadiation:DB$ Radiation | Defined$ Player | Num$ X | SpellDescription$ Each player gets X rad counters. SVar:X:Count$xPaid SVar:Y:SVar$X/Twice diff --git a/forge-gui/res/cardsfolder/n/nuka_nuke_launcher.txt b/forge-gui/res/cardsfolder/n/nuka_nuke_launcher.txt index 5a4b968db75..41c0bfe2e21 100644 --- a/forge-gui/res/cardsfolder/n/nuka_nuke_launcher.txt +++ b/forge-gui/res/cardsfolder/n/nuka_nuke_launcher.txt @@ -4,7 +4,7 @@ Types:Artifact Equipment S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 3 | AddKeyword$ Intimidate | Description$ Equipped creature gets +3/+0 and has intimidate. (It can't be blocked except by artifact creatures and/or creatures that share a color with it.) T:Mode$ Attacks | ValidCard$ Card.EquippedBy | Execute$ TrigEffect | TriggerDescription$ Whenever equipped creature attacks, until the end of defending player's next turn, that player gets two rad counters whenever they cast a spell. SVar:TrigEffect:DB$ Effect | Duration$ UntilTheEndOfYourNextTurn | Triggers$ CastTrig | EffectOwner$ TriggeredDefendingPlayer -SVar:CastTrig:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ You | Execute$ TrigRadiation | TriggerDescription$ When you cast a spell, you get two rad counters +SVar:CastTrig:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ You | Execute$ TrigRadiation | TriggerDescription$ When you cast a spell, you get two rad counters. SVar:TrigRadiation:DB$ Radiation | Defined$ You | Num$ 2 K:Equip:3 Oracle:Equipped creature gets +3/+0 and has intimidate. (It can't be blocked except by artifact creatures and/or creatures that share a color with it.)\nWhenever equipped creature attacks, until the end of defending player's next turn, that player gets two rad counters whenever they cast a spell.\nEquip {3} diff --git a/forge-gui/res/cardsfolder/o/old_fogey.txt b/forge-gui/res/cardsfolder/o/old_fogey.txt index 8c49c70cf2d..e2b2bec0cad 100644 --- a/forge-gui/res/cardsfolder/o/old_fogey.txt +++ b/forge-gui/res/cardsfolder/o/old_fogey.txt @@ -8,7 +8,7 @@ K:Echo:G G K:Fading:3 K:Bands with other:Dinosaur K:Landwalk:Plains.Snow:Snow Plains -K:Protection:Homarid:Homarids +K:Protection:Homarid K:Flanking K:Rampage:2 Oracle:Phasing, cumulative upkeep {1}, echo {G}{G}, fading 3, bands with other Dinosaurs, protection from Homarids, snow-covered plainswalk, flanking, rampage 2 diff --git a/forge-gui/res/cardsfolder/o/old_growth_troll.txt b/forge-gui/res/cardsfolder/o/old_growth_troll.txt index f20ec371995..7b2c5e61209 100644 --- a/forge-gui/res/cardsfolder/o/old_growth_troll.txt +++ b/forge-gui/res/cardsfolder/o/old_growth_troll.txt @@ -6,7 +6,7 @@ K:Trample T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self+Creature | Execute$ DBReturn | TriggerDescription$ When CARDNAME dies, if it was a creature, return it to the battlefield. It's an Aura enchantment with enchant Forest you control and "Enchanted Forest has '{T}: Add {G}{G}' and '{1}, {T}, Sacrifice this land: Create a tapped 4/4 green Troll Warrior creature token with trample.'" SVar:DBReturn:DB$ ChangeZone | Defined$ TriggeredNewCardLKICopy | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | AnimateSubAbility$ DBAnimate SVar:DBAnimate:DB$ Animate | Defined$ Remembered | Types$ Enchantment,Aura | RemoveCardTypes$ True | RemoveAllAbilities$ True | Keywords$ Enchant Forest you control | Abilities$ SPAttach | staticAbilities$ STAura | Duration$ Permanent -SVar:STAura:Mode$ Continuous | Affected$ Land.EnchantedBy | AddAbility$ ABMana & ABToken | Description$ Enchanted Forest has '{T}: Add {G}{G}' and '{1}, {T}, Sacrifice this land: Create a tapped 4/4 green Troll Warrior creature token with trample.' +SVar:STAura:Mode$ Continuous | Affected$ Land.EnchantedBy | AddAbility$ ABMana & ABToken | Description$ Enchanted Forest has "{T}: Add {G}{G}" and "{1}, {T}, Sacrifice this land: Create a tapped 4/4 green Troll Warrior creature token with trample." SVar:SPAttach:SP$ Attach | Cost$ 0 | ValidTgts$ Forest.YouCtrl | AILogic$ Pump SVar:ABMana:AB$ Mana | Cost$ T | Produced$ G | Amount$ 2 | SpellDescription$ Add {G}{G}. SVar:ABToken:AB$ Token | Cost$ 1 T Sac<1/CARDNAME> | TokenAmount$ 1 | TokenScript$ g_4_4_troll_warrior_trample | TokenOwner$ You | TokenTapped$ True | SpellDescription$ Create a tapped 4/4 green Troll Warrior creature token with trample. diff --git a/forge-gui/res/cardsfolder/o/oust.txt b/forge-gui/res/cardsfolder/o/oust.txt index 75df80c1602..c5678e4f3c0 100644 --- a/forge-gui/res/cardsfolder/o/oust.txt +++ b/forge-gui/res/cardsfolder/o/oust.txt @@ -2,6 +2,6 @@ Name:Oust ManaCost:W Types:Sorcery A:SP$ ChangeZone | Origin$ Battlefield | Destination$ Library | ValidTgts$ Creature | LibraryPosition$ 1 | SubAbility$ DBGainLife | SpellDescription$ Put target creature into its owner's library second from the top. Its controller gains 3 life. -# Library Position is zero indexed. So 1 is second from the top +# LibraryPosition is zero indexed. So 1 is second from the top SVar:DBGainLife:DB$ GainLife | Defined$ TargetedController | LifeAmount$ 3 Oracle:Put target creature into its owner's library second from the top. Its controller gains 3 life. diff --git a/forge-gui/res/cardsfolder/p/penregon_strongbull.txt b/forge-gui/res/cardsfolder/p/penregon_strongbull.txt index e92971a012d..7fb1bb9530f 100644 --- a/forge-gui/res/cardsfolder/p/penregon_strongbull.txt +++ b/forge-gui/res/cardsfolder/p/penregon_strongbull.txt @@ -5,6 +5,6 @@ PT:2/3 A:AB$ Pump | Cost$ 1 Sac<1/Artifact> | Defined$ Self | NumAtt$ 1 | NumDef$ 1 | SubAbility$ DBPing | SpellDescription$ CARDNAME gets +1/+1 until end of turn and deals 1 damage to each opponent. SVar:DBPing:DB$ DealDamage | Defined$ Opponent | NumDmg$ 1 SVar:AIPreference:SacCost$Artifact.token -DeckHas:Ability$Artifact +DeckHas:Ability$Sacrifice DeckHints:Type$Artifact Oracle:{1}, Sacrifice an artifact: Penregon Strongbull gets +1/+1 until end of turn and deals 1 damage to each opponent. diff --git a/forge-gui/res/cardsfolder/p/phyrexian_esthetician.txt b/forge-gui/res/cardsfolder/p/phyrexian_esthetician.txt index 45fc8721a8d..13ee3ab85ce 100644 --- a/forge-gui/res/cardsfolder/p/phyrexian_esthetician.txt +++ b/forge-gui/res/cardsfolder/p/phyrexian_esthetician.txt @@ -3,6 +3,6 @@ ManaCost:3 R Types:Artifact Creature Phyrexian Cleric PT:4/3 K:Haste -A:AB$ PutCounter | Cost$ 3 R ExileFromGrave<1/CARDNAME> | ActivationZone$ Graveyard | ValidTgts$ Creature | CounterType$ OIL | CounterNum$ ScavengeX | SorcerySpeed$ True | PrecostDesc$ Oil Scavenge | CostDesc$ {3}{R} | SpellDescription$ ({3}{R}, Exile this card from your graveyard: Put a number of oil counters equal to this card's power on target creature. Oil Scavenge only as a sorcery.) +A:AB$ PutCounter | Cost$ 3 R ExileFromGrave<1/CARDNAME> | ActivationZone$ Graveyard | ValidTgts$ Creature | CounterType$ OIL | CounterNum$ ScavengeX | SorcerySpeed$ True | PrecostDesc$ Oil Scavenge {3}{R} | CostDesc$ ({3}{R}, Exile this card from your graveyard: | StackDescription$ {p:You} puts a number of oil counters equal to CARDNAME's power on {c:Targeted}. | SpellDescription$ Put a number of oil counters equal to this card's power on target creature. Oil Scavenge only as a sorcery.) SVar:ScavengeX:Exiled$CardPower Oracle:Haste\nOil Scavenge {3}{R} ({3}{R}, Exile this card from your graveyard: Put a number of oil counters equal to this card's power on target creature. Oil Scavenge only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/p/pirates_landing.txt b/forge-gui/res/cardsfolder/p/pirates_landing.txt index c86a9c7df84..f71d8fd9343 100644 --- a/forge-gui/res/cardsfolder/p/pirates_landing.txt +++ b/forge-gui/res/cardsfolder/p/pirates_landing.txt @@ -3,7 +3,7 @@ ManaCost:R Types:Sorcery A:SP$ Branch | BranchConditionSVar$ TreasureCheck | BranchConditionSVarCompare$ GE1 | FalseSubAbility$ DBDraw | TrueSubAbility$ DBSeek | SpellDescription$ Draw a card. If mana from a Treasure was spent to cast this spell, seek a Pirate card instead. SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card. -SVar:DBSeek:DB$ Seek | Type$ Pirate | SpellDescription$ Seek a Pirate card +SVar:DBSeek:DB$ Seek | Type$ Pirate | SpellDescription$ Seek a Pirate card. SVar:TreasureCheck:Count$CastTotalManaSpent Treasure SVar:AIPreference:ManaFrom$Treasure DeckNeeds:Type$Pirate|Treasure diff --git a/forge-gui/res/cardsfolder/p/planewide_disaster.txt b/forge-gui/res/cardsfolder/p/planewide_disaster.txt index a0947197e15..7ad040241d4 100644 --- a/forge-gui/res/cardsfolder/p/planewide_disaster.txt +++ b/forge-gui/res/cardsfolder/p/planewide_disaster.txt @@ -1,7 +1,7 @@ Name:Planewide Disaster ManaCost:no cost Types:Phenomenon -T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ Disaster | TriggerDescription$ When you encounter CARDNAME, destroy all creatures. (Then planeswalk away from this phenomenon) +T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ Disaster | TriggerDescription$ When you encounter CARDNAME, destroy all creatures. (Then planeswalk away from this phenomenon.) SVar:Disaster:DB$ DestroyAll | ValidCards$ Creature | SubAbility$ PWAway SVar:PWAway:DB$ Planeswalk Oracle:When you encounter Planewide Disaster, destroy all creatures. (Then planeswalk away from this phenomenon.) diff --git a/forge-gui/res/cardsfolder/p/pool_resources.txt b/forge-gui/res/cardsfolder/p/pool_resources.txt index 0a2903f6899..253544eeb6a 100644 --- a/forge-gui/res/cardsfolder/p/pool_resources.txt +++ b/forge-gui/res/cardsfolder/p/pool_resources.txt @@ -3,6 +3,6 @@ ManaCost:2 U Types:Instant K:Gift SVar:GiftAbility:DB$ Token | TokenAmount$ 1 | TokenScript$ u_1_1_fish | TokenTapped$ True | TokenOwner$ Promised | LockTokenScript$ True | GiftDescription$ a tapped Fish -A:SP$ Draw | ConditionPresent$ Card.Self+PromisedGift | ConditionCompare$ EQ0 | SubAbility$ DBSeek | NumCards$ 2 | SpellDescription$ -SVar:DBSeek:DB$ Seek | Defined$ You | Num$ 2 | ConditionPresent$ Card.Self+PromisedGift | ConditionCompare$ EQ1 |Type$ Card.nonLand +A:SP$ Draw | ConditionZone$ Stack | ConditionPresent$ Card.Self+PromisedGift | ConditionCompare$ EQ0 | SubAbility$ DBSeek | NumCards$ 2 | StackDescription$ {p:You} draws two cards. | SpellDescription$ Draw two cards. If the gift was promised, seek two nonland cards instead. +SVar:DBSeek:DB$ Seek | Defined$ You | Num$ 2 | ConditionZone$ Stack | ConditionPresent$ Card.Self+PromisedGift | ConditionCompare$ EQ1 | Type$ Card.nonLand | StackDescription$ If the gift was promised, {p:You} seeks two nonland cards instead. Oracle:Gift a tapped Fish\nDraw two cards. If the gift was promised, seek two nonland cards instead. diff --git a/forge-gui/res/cardsfolder/p/portent_tracker.txt b/forge-gui/res/cardsfolder/p/portent_tracker.txt index 29f094446d9..14f466a8726 100644 --- a/forge-gui/res/cardsfolder/p/portent_tracker.txt +++ b/forge-gui/res/cardsfolder/p/portent_tracker.txt @@ -3,6 +3,6 @@ ManaCost:1 G Types:Creature Satyr Scout PT:1/1 A:AB$ Untap | Cost$ T | ValidTgts$ Land | AILogic$ PoolExtraMana | SpellDescription$ Untap target land. -A:AB$ AddOrRemoveCounter | Cost$ T | ValidTgts$ Battle | RemoveConditionSVar$ Targeted$Valid Battle.OppProtect | CounterType$ DEFENSE | SorcerySpeed$ True | StackDescription$ REP Choose target battle. _ & it_{c:Targeted} & Activate only as a sorcery._ | SpellDescription$ Choose target battle. If an opponent protects it, remove a defense counter from it. Otherwise, put a defense counter on it. Activate only as a sorcery. +A:AB$ AddOrRemoveCounter | Cost$ T | ValidTgts$ Battle | RemoveConditionSVar$ Targeted$Valid Battle.OppProtect | CounterType$ DEFENSE | SorcerySpeed$ True | StackDescription$ REP Choose target battle_{p:You} chooses {c:Targeted} & remove_{p:You} removes & put_{p:You} puts & . Activate only as a sorcery._. | SpellDescription$ Choose target battle. If an opponent protects it, remove a defense counter from it. Otherwise, put a defense counter on it. Activate only as a sorcery. DeckHints:Type$Battle Oracle:{T}: Untap target land.\n{T}: Choose target battle. If an opponent protects it, remove a defense counter from it. Otherwise, put a defense counter on it. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/p/primal_clay.txt b/forge-gui/res/cardsfolder/p/primal_clay.txt index 6b8d16d7e57..c528b2acd6a 100644 --- a/forge-gui/res/cardsfolder/p/primal_clay.txt +++ b/forge-gui/res/cardsfolder/p/primal_clay.txt @@ -4,9 +4,9 @@ Types:Artifact Creature Shapeshifter PT:*/* K:ETBReplacement:Other:MoldChoice SVar:MoldChoice:DB$ GenericChoice | Defined$ You | Choices$ GroundMold,AirMold,WallMold | SpellDescription$ As CARDNAME enters, it becomes your choice of a 3/3 artifact creature, a 2/2 artifact creature with flying, or a 1/6 Wall artifact creature with defender in addition to its other types. -SVar:GroundMold:DB$ Animate | Defined$ Self | Duration$ Permanent | Power$ 3 | Toughness$ 3 | SpellDescription$ CARDNAME is 3/3 -SVar:AirMold:DB$ Animate | Defined$ Self | Duration$ Permanent | Power$ 2 | Toughness$ 2 | Keywords$ Flying | SpellDescription$ CARDNAME is 2/2 with flying -SVar:WallMold:DB$ Animate | Defined$ Self | Duration$ Permanent | Power$ 1 | Toughness$ 6 | Types$ Wall | Keywords$ Defender | SpellDescription$ CARDNAME is 1/6 with defender and is a wall in addition to its other types +SVar:GroundMold:DB$ Animate | Defined$ Self | Duration$ Permanent | Power$ 3 | Toughness$ 3 | SpellDescription$ CARDNAME is 3/3. +SVar:AirMold:DB$ Animate | Defined$ Self | Duration$ Permanent | Power$ 2 | Toughness$ 2 | Keywords$ Flying | SpellDescription$ CARDNAME is 2/2 with flying. +SVar:WallMold:DB$ Animate | Defined$ Self | Duration$ Permanent | Power$ 1 | Toughness$ 6 | Types$ Wall | Keywords$ Defender | SpellDescription$ CARDNAME is 1/6 with defender and is a Wall in addition to its other types. AI:RemoveDeck:Random DeckHas:Keyword$Defender|Flying & Type$Wall Oracle:As Primal Clay enters, it becomes your choice of a 3/3 artifact creature, a 2/2 artifact creature with flying, or a 1/6 Wall artifact creature with defender in addition to its other types. (A creature with defender can't attack.) diff --git a/forge-gui/res/cardsfolder/p/primal_plasma.txt b/forge-gui/res/cardsfolder/p/primal_plasma.txt index 6d93e0b3c01..2399b2b57ef 100644 --- a/forge-gui/res/cardsfolder/p/primal_plasma.txt +++ b/forge-gui/res/cardsfolder/p/primal_plasma.txt @@ -4,8 +4,8 @@ Types:Creature Elemental Shapeshifter PT:*/* R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplaceWith$ PlasmaChoice | ReplacementResult$ Updated | Description$ As CARDNAME enters, it becomes your choice of a 3/3 creature, a 2/2 creature with flying, or a 1/6 creature with defender. SVar:PlasmaChoice:DB$ GenericChoice | Defined$ You | Choices$ GroundPlasma,AirPlasma,WallPlasma -SVar:GroundPlasma:DB$ Animate | Defined$ Self | Duration$ Permanent | Power$ 3 | Toughness$ 3 | SpellDescription$ CARDNAME is 3/3 -SVar:AirPlasma:DB$ Animate | Defined$ Self | Duration$ Permanent | Power$ 2 | Toughness$ 2 | Keywords$ Flying | SpellDescription$ CARDNAME is 2/2 with flying -SVar:WallPlasma:DB$ Animate | Defined$ Self | Duration$ Permanent | Power$ 1 | Toughness$ 6 | Keywords$ Defender | SpellDescription$ CARDNAME is 1/6 with defender +SVar:GroundPlasma:DB$ Animate | Defined$ Self | Duration$ Permanent | Power$ 3 | Toughness$ 3 | SpellDescription$ CARDNAME is 3/3. +SVar:AirPlasma:DB$ Animate | Defined$ Self | Duration$ Permanent | Power$ 2 | Toughness$ 2 | Keywords$ Flying | SpellDescription$ CARDNAME is 2/2 with flying. +SVar:WallPlasma:DB$ Animate | Defined$ Self | Duration$ Permanent | Power$ 1 | Toughness$ 6 | Keywords$ Defender | SpellDescription$ CARDNAME is 1/6 with defender. AI:RemoveDeck:All Oracle:As Primal Plasma enters, it becomes your choice of a 3/3 creature, a 2/2 creature with flying, or a 1/6 creature with defender. diff --git a/forge-gui/res/cardsfolder/p/protean_war_engine.txt b/forge-gui/res/cardsfolder/p/protean_war_engine.txt index 12890282241..89681b142d5 100644 --- a/forge-gui/res/cardsfolder/p/protean_war_engine.txt +++ b/forge-gui/res/cardsfolder/p/protean_war_engine.txt @@ -8,5 +8,5 @@ T:Mode$ BecomesCrewed | ValidVehicle$ Card.Self | Execute$ TrigClone | TriggerDe SVar:TrigClone:DB$ Clone | Cost$ 3 | Defined$ Remembered | CloneTarget$ Self | AddTypes$ Vehicle | Duration$ UntilEndOfTurn K:Crew:3 SVar:HasAttackingEffect:TRUE -DeckHas:Type$Angel|Bird|Dragon|Elk|Human|Ogre|Cleric|Knight|Pirate|Soldier|Warrior & Ability$LifeGain|Token & Keyword$DoubleStrike|Haste|FirstStrike|Flying +DeckHas:Type$Angel|Bird|Dragon|Elk|Human|Ogre|Cleric|Knight|Pirate|Soldier|Warrior & Ability$LifeGain|Token & Keyword$Double Strike|Haste|First Strike|Flying Oracle:As Protean War Engine enters, draft a card from Protean War Engine's spellbook and exile it.\nWhenever Protean War Engine becomes crewed, until end of turn, it becomes a copy of the exiled card, except it's a Vehicle artifact in addition to its other types. diff --git a/forge-gui/res/cardsfolder/p/psychic_allergy.txt b/forge-gui/res/cardsfolder/p/psychic_allergy.txt index 14e84f0b930..53ddd707d87 100644 --- a/forge-gui/res/cardsfolder/p/psychic_allergy.txt +++ b/forge-gui/res/cardsfolder/p/psychic_allergy.txt @@ -3,7 +3,7 @@ ManaCost:3 U U Types:Enchantment K:ETBReplacement:Other:ChooseColor SVar:ChooseColor:DB$ ChooseColor | Defined$ You | SpellDescription$ As CARDNAME enters, choose a color. | AILogic$ MostProminentInHumanDeck -T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Opponent | TriggerZones$ Battlefield | Execute$ TrigDamageOpp | TriggerDescription$ At the beginning of each opponent's upkeep, CARDNAME deals X damage to that player, where X is the number of nontoken permanents of the chosen color they control +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Opponent | TriggerZones$ Battlefield | Execute$ TrigDamageOpp | TriggerDescription$ At the beginning of each opponent's upkeep, CARDNAME deals X damage to that player, where X is the number of nontoken permanents of the chosen color they control. SVar:TrigDamageOpp:DB$ DealDamage | Defined$ TriggeredPlayer | NumDmg$ X SVar:X:Count$Valid Permanent.ActivePlayerCtrl+ChosenColor+nonToken T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDestroy | TriggerDescription$ At the beginning of your upkeep, destroy CARDNAME unless you sacrifice two Islands. diff --git a/forge-gui/res/cardsfolder/p/psychic_overload.txt b/forge-gui/res/cardsfolder/p/psychic_overload.txt index b6530aab9ce..354c90c95f2 100644 --- a/forge-gui/res/cardsfolder/p/psychic_overload.txt +++ b/forge-gui/res/cardsfolder/p/psychic_overload.txt @@ -6,5 +6,5 @@ A:SP$ Attach | Cost$ 3 U | ValidTgts$ Permanent | AILogic$ KeepTapped T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigTap | TriggerDescription$ When CARDNAME enters, tap enchanted permanent. SVar:TrigTap:DB$ Tap | Defined$ Enchanted S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddHiddenKeyword$ CARDNAME doesn't untap during your untap step. | AddAbility$ Untap | Description$ Enchanted permanent doesn't untap during its controller's untap step. Enchanted permanent has "Discard two artifact cards: Untap this permanent." -SVar:Untap:AB$ Untap | Cost$ Discard<2/Artifact> | Defined$ Self | SpellDescription$ Discard two artifact cards: Untap this permanent. +SVar:Untap:AB$ Untap | Cost$ Discard<2/Artifact> | Defined$ Self | SpellDescription$ Untap CARDNAME. Oracle:Enchant permanent\nWhen Psychic Overload enters, tap enchanted permanent.\nEnchanted permanent doesn't untap during its controller's untap step.\nEnchanted permanent has "Discard two artifact cards: Untap this permanent." diff --git a/forge-gui/res/cardsfolder/p/psychic_trance.txt b/forge-gui/res/cardsfolder/p/psychic_trance.txt index 9392860693e..da1a09cdbae 100644 --- a/forge-gui/res/cardsfolder/p/psychic_trance.txt +++ b/forge-gui/res/cardsfolder/p/psychic_trance.txt @@ -2,7 +2,7 @@ Name:Psychic Trance ManaCost:2 U U Types:Instant A:SP$ AnimateAll | Abilities$ Counter | ValidCards$ Card.Wizard+YouCtrl | SpellDescription$ Until end of turn, Wizards you control gain "{T}: Counter target spell." -SVar:Counter:AB$ Counter | Cost$ T | TargetType$ Spell | ValidTgts$ Card | SpellDescription$ Counter target spell +SVar:Counter:AB$ Counter | Cost$ T | TargetType$ Spell | ValidTgts$ Card | SpellDescription$ Counter target spell. AI:RemoveDeck:Random AI:RemoveDeck:All Oracle:Until end of turn, Wizards you control gain "{T}: Counter target spell." diff --git a/forge-gui/res/cardsfolder/p/pursue_glory.txt b/forge-gui/res/cardsfolder/p/pursue_glory.txt index d8d65d064b0..e1d8de5b451 100644 --- a/forge-gui/res/cardsfolder/p/pursue_glory.txt +++ b/forge-gui/res/cardsfolder/p/pursue_glory.txt @@ -1,6 +1,6 @@ Name:Pursue Glory ManaCost:3 R Types:Instant -A:SP$ PumpAll | ValidCards$ Creature.attacking | NumAtt$ 2 | SpellDescription$ Attacking creatures get +2/+0 until end of turn +A:SP$ PumpAll | ValidCards$ Creature.attacking | NumAtt$ 2 | SpellDescription$ Attacking creatures get +2/+0 until end of turn. K:Cycling:2 Oracle:Attacking creatures get +2/+0 until end of turn.\nCycling {2} ({2}, Discard this card: Draw a card.) diff --git a/forge-gui/res/cardsfolder/p/pygmy_hippo.txt b/forge-gui/res/cardsfolder/p/pygmy_hippo.txt index b059c6bc002..ccdea29e8e8 100644 --- a/forge-gui/res/cardsfolder/p/pygmy_hippo.txt +++ b/forge-gui/res/cardsfolder/p/pygmy_hippo.txt @@ -7,7 +7,7 @@ SVar:TrigActivateManaAbility:DB$ ActivateAbility | Defined$ DefendingPlayer | Ty SVar:DBEmptyPool:DB$ DrainMana | Defined$ DefendingPlayer | SubAbility$ DBNoCombatDamage | RememberDrainedMana$ True SVar:DBNoCombatDamage:DB$ Effect | StaticAbilities$ SNoCombatDamage | Duration$ UntilHostLeavesPlayOrEOT | SubAbility$ DBDelTrig SVar:SNoCombatDamage:Mode$ AssignNoCombatDamage | ValidCard$ Card.EffectSource | Description$ EFFECTSOURCE assigns no combat damage this turn. -SVar:DBDelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ Main2 | Execute$ TrigAddMana | TriggerDescription$ At the beginning of your postcombat main phase, you add an amount of {C} equal to the amount of mana the defending player lost this way | SubAbility$ DBCleanup | RememberNumber$ True +SVar:DBDelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ Main2 | Execute$ TrigAddMana | TriggerDescription$ At the beginning of your postcombat main phase, you add an amount of {C} equal to the amount of mana the defending player lost this way. | SubAbility$ DBCleanup | RememberNumber$ True SVar:TrigAddMana:DB$ Mana | Produced$ C | Amount$ X SVar:X:Count$TriggerRememberAmount SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/q/questing_cosplayer.txt b/forge-gui/res/cardsfolder/q/questing_cosplayer.txt index a1df0385b6d..fd2ecbe0138 100644 --- a/forge-gui/res/cardsfolder/q/questing_cosplayer.txt +++ b/forge-gui/res/cardsfolder/q/questing_cosplayer.txt @@ -2,7 +2,7 @@ Name:Questing Cosplayer ManaCost:1 G Types:Creature Human Bard PT:1/1 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When Questing Cosplayer enters the battlefield, create a Questing Role token and attach it to target creature. (If you control another Role on it, put that one into the graveyard. Enchanted creature has all the abilities of Questing Beast.) +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a Questing Role token and attach it to target creature. (If you control another Role on it, put that one into the graveyard. Enchanted creature has all the abilities of Questing Beast.) SVar:TrigToken:DB$ Token | TokenScript$ role_questing | AttachedTo$ Targeted | ValidTgts$ Creature DeckHas:Type$Aura|Role & Ability$Token DeckHints:Type$Aura diff --git a/forge-gui/res/cardsfolder/r/rabid_bite.txt b/forge-gui/res/cardsfolder/r/rabid_bite.txt index 70239fe8503..6bbffb02dbd 100644 --- a/forge-gui/res/cardsfolder/r/rabid_bite.txt +++ b/forge-gui/res/cardsfolder/r/rabid_bite.txt @@ -1,7 +1,7 @@ Name:Rabid Bite ManaCost:1 G Types:Sorcery -A:SP$ Pump | ValidTgts$ Creature.YouCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you control | SubAbility$ SoulsDamage | StackDescription$ None | SpellDescription$ Target creature you control deals damage equal to its power to target creature you don't control +A:SP$ Pump | ValidTgts$ Creature.YouCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you control | SubAbility$ SoulsDamage | StackDescription$ None | SpellDescription$ Target creature you control deals damage equal to its power to target creature you don't control. SVar:SoulsDamage:DB$ DealDamage | ValidTgts$ Creature.YouDontCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you don't control | NumDmg$ X | DamageSource$ ParentTarget SVar:X:ParentTargeted$CardPower Oracle:Target creature you control deals damage equal to its power to target creature you don't control. diff --git a/forge-gui/res/cardsfolder/r/raid_bombardment.txt b/forge-gui/res/cardsfolder/r/raid_bombardment.txt index d19dec9551b..0611cd3964a 100644 --- a/forge-gui/res/cardsfolder/r/raid_bombardment.txt +++ b/forge-gui/res/cardsfolder/r/raid_bombardment.txt @@ -1,7 +1,7 @@ Name:Raid Bombardment ManaCost:2 R Types:Enchantment -T:Mode$ Attacks | ValidCard$ Creature.powerLE2+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Whenever a creature you control with power 2 or less attacks, CARDNAME deals 1 damage to the player or planeswalker that creature is attacking +T:Mode$ Attacks | ValidCard$ Creature.powerLE2+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Whenever a creature you control with power 2 or less attacks, CARDNAME deals 1 damage to the player or planeswalker that creature is attacking. SVar:TrigDamage:DB$ DealDamage | Defined$ TriggeredDefender.Player & Valid Planeswalker.TriggeredDefender | NumDmg$ 1 SVar:PlayMain1:TRUE Oracle:Whenever a creature you control with power 2 or less attacks, Raid Bombardment deals 1 damage to the player or planeswalker that creature is attacking. diff --git a/forge-gui/res/cardsfolder/r/rankles_prank.txt b/forge-gui/res/cardsfolder/r/rankles_prank.txt index 4073d2d7325..b138d517cc0 100644 --- a/forge-gui/res/cardsfolder/r/rankles_prank.txt +++ b/forge-gui/res/cardsfolder/r/rankles_prank.txt @@ -3,7 +3,7 @@ ManaCost:2 B B Types:Sorcery A:SP$ Charm | Choices$ DBDiscard,DBLoseLife,DBSac | MinCharmNum$ 1 | CharmNum$ 3 SVar:DBDiscard:DB$ Discard | NumCards$ 2 | Mode$ TgtChoose | Defined$ Player | AILogic$ AnyPhaseIfFavored | SpellDescription$ Each player discards two cards. -SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ 4 | Defined$ Player | AILogic$ AnyPhase | SpellDescription$ Each player loses 4 life +SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ 4 | Defined$ Player | AILogic$ AnyPhase | SpellDescription$ Each player loses 4 life. SVar:DBSac:DB$ Sacrifice | SacValid$ Creature | Defined$ Player | Amount$ 2 | SpellDescription$ Each player sacrifices two creatures. DeckHas:Ability$Sacrifice|Discard Oracle:Choose one or more —\n• Each player discards two cards.\n• Each player loses 4 life.\n• Each player sacrifices two creatures. diff --git a/forge-gui/res/cardsfolder/r/rapid_fire.txt b/forge-gui/res/cardsfolder/r/rapid_fire.txt index 1ed74d616a1..0b3ec1f34ae 100644 --- a/forge-gui/res/cardsfolder/r/rapid_fire.txt +++ b/forge-gui/res/cardsfolder/r/rapid_fire.txt @@ -5,5 +5,5 @@ Text:Cast this spell only before blockers are declared. A:SP$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ First Strike | ActivationPhases$ Upkeep->Declare Attackers | ActivationFirstCombat$ True | SubAbility$ DBPump | SpellDescription$ Target creature gains first strike until end of turn. If it doesn't have rampage, that creature gains rampage 2 until end of turn. (Whenever the creature becomes blocked, it gets +2/+2 until end of turn for each creature blocking it beyond the first.) SVar:DBPump:DB$ Pump | Defined$ Targeted | KW$ Rampage:2 | ConditionDefined$ Targeted | ConditionPresent$ Creature.withoutRampage AI:RemoveDeck:All -DeckHas:Keyword$FirstStrike|Rampage +DeckHas:Keyword$First Strike|Rampage Oracle:Cast this spell only before blockers are declared.\nTarget creature gains first strike until end of turn. If it doesn't have rampage, that creature gains rampage 2 until end of turn. (Whenever the creature becomes blocked, it gets +2/+2 until end of turn for each creature blocking it beyond the first.) diff --git a/forge-gui/res/cardsfolder/r/ratonhnhake_ton.txt b/forge-gui/res/cardsfolder/r/ratonhnhake_ton.txt index 91e29497cde..20b78d63103 100644 --- a/forge-gui/res/cardsfolder/r/ratonhnhake_ton.txt +++ b/forge-gui/res/cardsfolder/r/ratonhnhake_ton.txt @@ -11,4 +11,4 @@ SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefiel SVar:DBAttach:DB$ Attach | Object$ Targeted | Defined$ Remembered | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Token -Oracle:As long as Ratonhnhaké꞉ton hasn't dealt damage yet, it has hexproof and can't be blocked.\nWhenever Ratonhnhaké꞉ton deals combat damage to a player, create a 1/1 black Assassin creature token with menace. When you do, return target Equipment card from your graveyard to the battlefield, then attach it to that token. +Oracle:As long as Ratonhnhaké:ton hasn't dealt damage yet, it has hexproof and can't be blocked.\nWhenever Ratonhnhaké:ton deals combat damage to a player, create a 1/1 black Assassin creature token with menace. When you do, return target Equipment card from your graveyard to the battlefield, then attach it to that token. diff --git a/forge-gui/res/cardsfolder/r/raze_the_effigy.txt b/forge-gui/res/cardsfolder/r/raze_the_effigy.txt index 3f02dc39908..657777d929c 100644 --- a/forge-gui/res/cardsfolder/r/raze_the_effigy.txt +++ b/forge-gui/res/cardsfolder/r/raze_the_effigy.txt @@ -2,6 +2,6 @@ Name:Raze the Effigy ManaCost:R Types:Instant A:SP$ Charm | Choices$ DBDestroy,DBPump -SVar:DBDestroy:DB$ Destroy | ValidTgts$ Artifact | TgtPrompt$ Select target artifact | SpellDescription$ Destroy target artifact +SVar:DBDestroy:DB$ Destroy | ValidTgts$ Artifact | TgtPrompt$ Select target artifact | SpellDescription$ Destroy target artifact. SVar:DBPump:DB$ Pump | ValidTgts$ Creature.attacking | TgtPrompt$ Select target attacking creature | NumAtt$ +2 | NumDef$ +2 | SpellDescription$ Target attacking creature gets +2/+2 until end of turn. Oracle:Choose one —\n• Destroy target artifact.\n• Target attacking creature gets +2/+2 until end of turn. diff --git a/forge-gui/res/cardsfolder/r/reality_spasm.txt b/forge-gui/res/cardsfolder/r/reality_spasm.txt index 2af1c71cf71..399826b9e2f 100644 --- a/forge-gui/res/cardsfolder/r/reality_spasm.txt +++ b/forge-gui/res/cardsfolder/r/reality_spasm.txt @@ -2,7 +2,7 @@ Name:Reality Spasm ManaCost:X U U Types:Instant A:SP$ Charm | Choices$ Tap,Untap -SVar:Tap:DB$ Tap | TargetMin$ X | TargetMax$ X | ValidTgts$ Permanent | TgtPrompt$ Select X target permanents | SpellDescription$ Tap X target permanents +SVar:Tap:DB$ Tap | TargetMin$ X | TargetMax$ X | ValidTgts$ Permanent | TgtPrompt$ Select X target permanents | SpellDescription$ Tap X target permanents. SVar:Untap:DB$ Untap | TargetMin$ X | TargetMax$ X | ValidTgts$ Permanent | TgtPrompt$ Select X target permanents | SpellDescription$ Untap X target permanents. SVar:X:Count$xPaid AI:RemoveDeck:All diff --git a/forge-gui/res/cardsfolder/r/reckless_detective.txt b/forge-gui/res/cardsfolder/r/reckless_detective.txt index f3118eb267b..af4e5213135 100644 --- a/forge-gui/res/cardsfolder/r/reckless_detective.txt +++ b/forge-gui/res/cardsfolder/r/reckless_detective.txt @@ -4,8 +4,8 @@ Types:Creature Devil Detective PT:0/3 T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigChoice | TriggerDescription$ Whenever CARDNAME attacks, you may sacrifice an artifact or discard a card. If you do, draw a card and CARDNAME gets +2/+0 until end of turn. SVar:TrigChoice:DB$ GenericChoice | Choices$ DBSacToDraw,DBDiscardToDraw -SVar:DBSacToDraw:DB$ Draw | UnlessCost$ Sac<1/Artifact> | UnlessPayer$ You | UnlessSwitched$ True | SubAbility$ DBPump | SpellDescription$ Sacrifice an artifact -SVar:DBDiscardToDraw:DB$ Draw | UnlessCost$ Discard<1/Card> | UnlessPayer$ You | UnlessSwitched$ True | SubAbility$ DBPump | SpellDescription$ Discard a card +SVar:DBSacToDraw:DB$ Draw | UnlessCost$ Sac<1/Artifact> | UnlessPayer$ You | UnlessSwitched$ True | SubAbility$ DBPump | SpellDescription$ Sacrifice an artifact. +SVar:DBDiscardToDraw:DB$ Draw | UnlessCost$ Discard<1/Card> | UnlessPayer$ You | UnlessSwitched$ True | SubAbility$ DBPump | SpellDescription$ Discard a card. SVar:DBPump:DB$ Pump | Defined$ Self | NumAtt$ 2 DeckHas:Ability$Sacrifice|Graveyard|Discard DeckHints:Type$Artifact|Clue|Treasure diff --git a/forge-gui/res/cardsfolder/r/recruit_instructor.txt b/forge-gui/res/cardsfolder/r/recruit_instructor.txt index 8dcbfd34da3..14717fa2544 100644 --- a/forge-gui/res/cardsfolder/r/recruit_instructor.txt +++ b/forge-gui/res/cardsfolder/r/recruit_instructor.txt @@ -5,5 +5,5 @@ PT:1/1 T:Mode$ AttackersDeclared | ValidAttackers$ Mouse.YouCtrl | Execute$ TrigDraft | TriggerZones$ Battlefield | TriggerDescription$ Whenever one or more Mice you control attack, draft a card from CARDNAME's spellbook. SVar:TrigDraft:DB$ Draft | Spellbook$ Angelfire Ignition,Barge In,Become Brutes,Boon of Safety,Cheeky House-Mouse,Crumb and Get It,Defiant Strike,Embercleave,Feather of Flight,Mabel's Mettle,Might of the Meek,Moment of Heroism,Unleash Fury,War Squeak T:Mode$ BecomesTarget | ValidTarget$ Card.Self | ValidSource$ SpellAbility.YouCtrl | TriggerZones$ Battlefield | FirstTime$ True | Execute$ TrigToken | TriggerDescription$ Valiant — Whenever CARDNAME becomes the target of a spell or ability you control for the first time each turn, create a 1/1 white Mouse creature token. -SVar:TrigToken:DB$ Token | TokenScript$ w_1_1_mouse | TokenAmount$ 1 | TokenOwner$ You +SVar:TrigToken:DB$ Token | TokenScript$ w_1_1_mouse | TokenAmount$ 1 | TokenOwner$ You Oracle:Whenever one or more Mice you control attack, draft a card from Recruit Instructor's spellbook.\nValiant — Whenever Recruit Instructor becomes the target of a spell or ability you control for the first time each turn, create a 1/1 white Mouse creature token. diff --git a/forge-gui/res/cardsfolder/r/recruitment_drive.txt b/forge-gui/res/cardsfolder/r/recruitment_drive.txt index f6f7bb7c00d..f8bd6a20515 100644 --- a/forge-gui/res/cardsfolder/r/recruitment_drive.txt +++ b/forge-gui/res/cardsfolder/r/recruitment_drive.txt @@ -5,6 +5,5 @@ A:SP$ RollDice | Sides$ 20 | ResultSubAbilities$ 1-9:DBSToken,10-19:DBKToken,20: SVar:DBSToken:DB$ Token | TokenAmount$ 2 | TokenScript$ w_1_1_soldier | TokenOwner$ You | SpellDescription$ 1—9 VERT Create two 1/1 white Soldier creature tokens. SVar:DBKToken:DB$ Token | TokenAmount$ 2 | TokenScript$ w_2_2_knight | TokenOwner$ You | SpellDescription$ 10—19 VERT Create two 2/2 white Knight creature tokens. SVar:DBTokens:DB$ Token | TokenAmount$ 3 | TokenScript$ w_2_2_knight | TokenOwner$ You | SpellDescription$ 20 VERT Create three 2/2 white Knight creature tokens. -DeckHas:Ability$Token DeckHas:Ability$Token & Type$Soldier|Knight Oracle:Roll a d20.\n1—9 | Create two 1/1 white Soldier creature tokens.\n10—19 | Create two 2/2 white Knight creature tokens.\n20 | Create three 2/2 white Knight creature tokens. diff --git a/forge-gui/res/cardsfolder/r/redemptor_dreadnought.txt b/forge-gui/res/cardsfolder/r/redemptor_dreadnought.txt index 978079fa562..e9d87b29000 100644 --- a/forge-gui/res/cardsfolder/r/redemptor_dreadnought.txt +++ b/forge-gui/res/cardsfolder/r/redemptor_dreadnought.txt @@ -3,7 +3,7 @@ ManaCost:5 Types:Artifact Creature Astartes Dreadnought PT:4/4 K:Trample -A:SP$ PermanentCreature | Cost$ 5 ExileFromGrave | XMaxLimit$ 1 +S:Mode$ OptionalCost | EffectZone$ All | ValidCard$ Card.Self | ValidSA$ Spell | Cost$ ExileFromGrave<1/Creature> | Description$ Fallen Warrior — As an additional cost to cast this spell, you may exile a creature card from your graveyard. T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | IsPresent$ Card.ExiledWithSource | PresentZone$ Exile | TriggerDescription$ Plasma Incinerator — Whenever CARDNAME attacks, if a card is exiled with it, it gets +X/+X until end of turn, where X is the power of the exiled card. SVar:TrigPump:DB$ Pump | Defined$ Self | NumDef$ Y | NumAtt$ Y SVar:X:Count$xPaid diff --git a/forge-gui/res/cardsfolder/r/reign_of_terror.txt b/forge-gui/res/cardsfolder/r/reign_of_terror.txt index 2047edc1537..00d77171278 100644 --- a/forge-gui/res/cardsfolder/r/reign_of_terror.txt +++ b/forge-gui/res/cardsfolder/r/reign_of_terror.txt @@ -2,8 +2,8 @@ Name:Reign of Terror ManaCost:3 B B Types:Sorcery A:SP$ GenericChoice | Choices$ DestroyWhite,DestroyGreen | Defined$ You | StackDescription$ SpellDescription | SpellDescription$ Destroy all white or green creatures. They can't be regenerated. You lose 2 life for each creature that died this way. -SVar:DestroyWhite:DB$ DestroyAll | ValidCards$ Creature.White | NoRegen$ True | RememberDestroyed$ True | SubAbility$ DBLoseLife | SpellDescription$ Destroy all white creatures -SVar:DestroyGreen:DB$ DestroyAll | ValidCards$ Creature.Green | NoRegen$ True | RememberDestroyed$ True | SubAbility$ DBLoseLife | SpellDescription$ Destroy all green creatures +SVar:DestroyWhite:DB$ DestroyAll | ValidCards$ Creature.White | NoRegen$ True | RememberDestroyed$ True | SubAbility$ DBLoseLife | SpellDescription$ Destroy all white creatures. +SVar:DestroyGreen:DB$ DestroyAll | ValidCards$ Creature.Green | NoRegen$ True | RememberDestroyed$ True | SubAbility$ DBLoseLife | SpellDescription$ Destroy all green creatures. SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ X | Defined$ You | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Count$RememberedSize/Twice diff --git a/forge-gui/res/cardsfolder/r/remand.txt b/forge-gui/res/cardsfolder/r/remand.txt index 0a1b2035a7c..c7df2ae7c83 100644 --- a/forge-gui/res/cardsfolder/r/remand.txt +++ b/forge-gui/res/cardsfolder/r/remand.txt @@ -1,6 +1,6 @@ Name:Remand ManaCost:1 U Types:Instant -A:SP$ Counter | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | Destination$ Hand | SubAbility$ DBDraw | AITgts$ Card.cmcGE2 | SpellDescription$ Counter target spell. If that spell is countered this way, put it into it's owner's hand instead of into that player's graveyard. Draw a card. +A:SP$ Counter | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | Destination$ Hand | SubAbility$ DBDraw | AITgts$ Card.cmcGE2 | SpellDescription$ Counter target spell. If that spell is countered this way, put it into its owner's hand instead of into that player's graveyard. Draw a card. SVar:DBDraw:DB$ Draw | NumCards$ 1 Oracle:Counter target spell. If that spell is countered this way, put it into its owner's hand instead of into that player's graveyard.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/r/resounding_roar.txt b/forge-gui/res/cardsfolder/r/resounding_roar.txt index b883e23e0bd..fe9e7fae14c 100644 --- a/forge-gui/res/cardsfolder/r/resounding_roar.txt +++ b/forge-gui/res/cardsfolder/r/resounding_roar.txt @@ -3,7 +3,7 @@ ManaCost:1 G Types:Instant K:Cycling:5 R G W A:SP$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +3 | NumDef$ +3 | SpellDescription$ Target creature gets +3/+3 until end of turn. -T:Mode$ Cycled | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ When you cycle CARDNAME, target creature gets +6/+6 until end of turn +T:Mode$ Cycled | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ When you cycle CARDNAME, target creature gets +6/+6 until end of turn. SVar:TrigPump:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +6 | NumDef$ +6 AI:RemoveDeck:All Oracle:Target creature gets +3/+3 until end of turn.\nCycling {5}{R}{G}{W} ({5}{R}{G}{W}, Discard this card: Draw a card.)\nWhen you cycle Resounding Roar, target creature gets +6/+6 until end of turn. diff --git a/forge-gui/res/cardsfolder/r/resounding_wave.txt b/forge-gui/res/cardsfolder/r/resounding_wave.txt index 677d7d5bbe0..d4d7d87f6d8 100644 --- a/forge-gui/res/cardsfolder/r/resounding_wave.txt +++ b/forge-gui/res/cardsfolder/r/resounding_wave.txt @@ -3,6 +3,6 @@ ManaCost:2 U Types:Instant K:Cycling:5 W U B A:SP$ ChangeZone | ValidTgts$ Permanent | TgtPrompt$ Select target permanent | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return target permanent to its owner's hand. -T:Mode$ Cycled | ValidCard$ Card.Self | Execute$ TrigBounce | TriggerDescription$ When you cycle CARDNAME, return up to two target permanents to their owners' hands +T:Mode$ Cycled | ValidCard$ Card.Self | Execute$ TrigBounce | TriggerDescription$ When you cycle CARDNAME, return up to two target permanents to their owners' hands. SVar:TrigBounce:DB$ ChangeZone | ValidTgts$ Permanent | TgtPrompt$ Select target permanent | TargetMin$ 0 | TargetMax$ 2 | Origin$ Battlefield | Destination$ Hand Oracle:Return target permanent to its owner's hand.\nCycling {5}{W}{U}{B} ({5}{W}{U}{B}, Discard this card: Draw a card.)\nWhen you cycle Resounding Wave, return two target permanents to their owners' hands. diff --git a/forge-gui/res/cardsfolder/r/restless_fortress.txt b/forge-gui/res/cardsfolder/r/restless_fortress.txt index 839d9bd5d77..1ce2f4dcc0f 100644 --- a/forge-gui/res/cardsfolder/r/restless_fortress.txt +++ b/forge-gui/res/cardsfolder/r/restless_fortress.txt @@ -10,4 +10,4 @@ SVar:TrigLoseLife:DB$ LoseLife | Defined$ TriggeredDefendingPlayer | LifeAmount$ SVar:DBGainLife:DB$ GainLife | LifeAmount$ 2 DeckHas:Ability$LifeGain & Type$Nightmare & Color$White|Black SVar:HasAttackEffect:TRUE -Oracle:Restless Fortress enters tapped.\n{T}: Add {W} or {B}.\n\n{2}{W}{B}: Restless Fortress becomes a 1/4 white and black Nightmare creature until end of turn. It's still a land.\nWhenever Restless Fortress attacks, defending player loses 2 life and you gain 2 life. +Oracle:Restless Fortress enters tapped.\n{T}: Add {W} or {B}.\n{2}{W}{B}: Restless Fortress becomes a 1/4 white and black Nightmare creature until end of turn. It's still a land.\nWhenever Restless Fortress attacks, defending player loses 2 life and you gain 2 life. diff --git a/forge-gui/res/cardsfolder/r/return_to_nature.txt b/forge-gui/res/cardsfolder/r/return_to_nature.txt index d6d1e328196..1ce49f89928 100644 --- a/forge-gui/res/cardsfolder/r/return_to_nature.txt +++ b/forge-gui/res/cardsfolder/r/return_to_nature.txt @@ -2,7 +2,7 @@ Name:Return to Nature ManaCost:1 G Types:Instant A:SP$ Charm | Choices$ DBDestroyArtifact,DBDestroyEnchantment,DBExile -SVar:DBDestroyArtifact:DB$ Destroy | ValidTgts$ Artifact | Tgtprompt$ Select target artifact | SpellDescription$ Destroy target artifact +SVar:DBDestroyArtifact:DB$ Destroy | ValidTgts$ Artifact | Tgtprompt$ Select target artifact | SpellDescription$ Destroy target artifact. SVar:DBDestroyEnchantment:DB$ Destroy | ValidTgts$ Enchantment | Tgtprompt$ Select target enchantment | SpellDescription$ Destroy target enchantment. SVar:DBExile:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Card | TgtPrompt$ Select target card from a graveyard. | SpellDescription$ Exile target card fom a graveyard. Oracle:Choose one —\n• Destroy target artifact.\n• Destroy target enchantment.\n• Exile target card from a graveyard. diff --git a/forge-gui/res/cardsfolder/r/ride_the_avalanche.txt b/forge-gui/res/cardsfolder/r/ride_the_avalanche.txt index 3f4f2ad9c36..0928b85e5ec 100644 --- a/forge-gui/res/cardsfolder/r/ride_the_avalanche.txt +++ b/forge-gui/res/cardsfolder/r/ride_the_avalanche.txt @@ -3,7 +3,7 @@ ManaCost:G U Types:Instant A:SP$ Effect | StaticAbilities$ QuickenStA | Triggers$ TrigCounters | SpellDescription$ The next spell you cast this turn can be cast as though it had flash. When you cast your next spell this turn, put X +1/+1 counters on up to one target creature, where X is the mana value of that spell. SVar:QuickenStA:Mode$ CastWithFlash | ValidCard$ Card | ValidSA$ Spell | EffectZone$ Command | Caster$ You -SVar:TrigCounters:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ You | OneOff$ True | Execute$ PutCounter | TriggerDescription$ When you cast your next spell this turn, put X +1/+1 counters on up to one target creature, where X is the mana value of that spell +SVar:TrigCounters:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ You | OneOff$ True | Execute$ PutCounter | TriggerDescription$ When you cast your next spell this turn, put X +1/+1 counters on up to one target creature, where X is the mana value of that spell. SVar:PutCounter:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ X | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select target creature | ValidTgts$ Creature SVar:X:TriggeredStackInstance$CardManaCostLKI DeckHas:Ability$Counters diff --git a/forge-gui/res/cardsfolder/r/rise_of_the_eldrazi.txt b/forge-gui/res/cardsfolder/r/rise_of_the_eldrazi.txt index 3c81c3977bc..e3a0bbff819 100644 --- a/forge-gui/res/cardsfolder/r/rise_of_the_eldrazi.txt +++ b/forge-gui/res/cardsfolder/r/rise_of_the_eldrazi.txt @@ -5,5 +5,5 @@ R:Event$ Counter | ValidCard$ Card.Self | ValidSA$ Spell | Layer$ CantHappen | D A:SP$ Destroy | ValidTgts$ Permanent | SubAbility$ DBDraw | SpellDescription$ Destroy target permanent. SVar:DBDraw:DB$ Draw | NumCards$ 4 | ValidTgts$ Player | TgtPrompt$ Select target player | SubAbility$ DBExtraTurn | SpellDescription$ Target player draws four cards. SVar:DBExtraTurn:DB$ AddTurn | Defined$ You | NumTurns$ 1 | SubAbility$ DBChange | SpellDescription$ Take an extra turn after this one. -SVar:DBChange:DB$ ChangeZone | Origin$ Stack | Destination$ Exile | SpellDescription$ Exile CARDNAME +SVar:DBChange:DB$ ChangeZone | Origin$ Stack | Destination$ Exile | SpellDescription$ Exile CARDNAME. Oracle:This spell can't be countered.\nDestroy target permanent. Target player draws four cards. Take an extra turn after this one.\nExile Rise of the Eldrazi. diff --git a/forge-gui/res/cardsfolder/r/rite_of_ruin.txt b/forge-gui/res/cardsfolder/r/rite_of_ruin.txt index ea855008ef6..b290f461e2c 100644 --- a/forge-gui/res/cardsfolder/r/rite_of_ruin.txt +++ b/forge-gui/res/cardsfolder/r/rite_of_ruin.txt @@ -2,12 +2,12 @@ Name:Rite of Ruin ManaCost:5 R R Types:Sorcery A:SP$ GenericChoice | Choices$ ChooseC1L2A3,ChooseL1C2A3,ChooseA1L2C3,ChooseA1C2L3,ChooseC1A2L3,ChooseL1A2C3 | Defined$ You | StackDescription$ SpellDescription | SpellDescription$ Choose an order for artifacts, creatures, and lands. Each player sacrifices one permanent of the first type, sacrifices two of the second type, then sacrifices three of the third type. -SVar:ChooseC1L2A3:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ ChooseC1 | SubAbility$ SacC1L2A3 | SpellDescription$ Creature,Land,Artifact -SVar:ChooseL1C2A3:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ ChooseL1 | SubAbility$ SacL1C2A3 | SpellDescription$ Land,Creature,Artifact -SVar:ChooseA1L2C3:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ ChooseA1 | SubAbility$ SacA1L2C3 | SpellDescription$ Artifact,Land,Creature -SVar:ChooseA1C2L3:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ ChooseA1 | SubAbility$ SacA1C2L3 | SpellDescription$ Artifact,Creature,Land -SVar:ChooseC1A2L3:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ ChooseC1 | SubAbility$ SacC1A2L3 | SpellDescription$ Creature,Artifact,Land -SVar:ChooseL1A2C3:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ ChooseL1 | SubAbility$ SacL1A2C3 | SpellDescription$ Land,Artifact,Creature +SVar:ChooseC1L2A3:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ ChooseC1 | SubAbility$ SacC1L2A3 | SpellDescription$ Creature, Land, Artifact +SVar:ChooseL1C2A3:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ ChooseL1 | SubAbility$ SacL1C2A3 | SpellDescription$ Land, Creature, Artifact +SVar:ChooseA1L2C3:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ ChooseA1 | SubAbility$ SacA1L2C3 | SpellDescription$ Artifact, Land, Creature +SVar:ChooseA1C2L3:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ ChooseA1 | SubAbility$ SacA1C2L3 | SpellDescription$ Artifact, Creature, Land +SVar:ChooseC1A2L3:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ ChooseC1 | SubAbility$ SacC1A2L3 | SpellDescription$ Creature, Artifact, Land +SVar:ChooseL1A2C3:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ ChooseL1 | SubAbility$ SacL1A2C3 | SpellDescription$ Land, Artifact, Creature SVar:ChooseC1:DB$ ChooseCard | Defined$ Remembered | Choices$ Creature.RememberedPlayerCtrl | Amount$ 1 | Mandatory$ True | RememberChosen$ True SVar:ChooseC2:DB$ ChooseCard | Defined$ Remembered | Choices$ Creature.RememberedPlayerCtrl | Amount$ 2 | Mandatory$ True | RememberChosen$ True SVar:ChooseC3:DB$ ChooseCard | Defined$ Remembered | Choices$ Creature.RememberedPlayerCtrl | Amount$ 3 | Mandatory$ True | RememberChosen$ True diff --git a/forge-gui/res/cardsfolder/r/robaran_mercenaries.txt b/forge-gui/res/cardsfolder/r/robaran_mercenaries.txt index a45f2cbbd10..56331555e59 100644 --- a/forge-gui/res/cardsfolder/r/robaran_mercenaries.txt +++ b/forge-gui/res/cardsfolder/r/robaran_mercenaries.txt @@ -3,6 +3,6 @@ ManaCost:3 W Types:Creature Human Mercenary PT:3/4 K:Vigilance -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ Battlefield | GainsAbilitiesOf$ Creature.Legendary+YouCtrl | Description$ CARDNAME has all activated abilities of all legendary creatures you control +S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ Battlefield | GainsAbilitiesOf$ Creature.Legendary+YouCtrl | Description$ CARDNAME has all activated abilities of all legendary creatures you control. DeckHints:Type$Legendary Oracle:Vigilance\nRobaran Mercenaries has all activated abilities of all legendary creatures you control. diff --git a/forge-gui/res/cardsfolder/r/rottenmouth_viper.txt b/forge-gui/res/cardsfolder/r/rottenmouth_viper.txt index 8a73c567e16..e2bffcbacc2 100644 --- a/forge-gui/res/cardsfolder/r/rottenmouth_viper.txt +++ b/forge-gui/res/cardsfolder/r/rottenmouth_viper.txt @@ -2,8 +2,8 @@ Name:Rottenmouth Viper ManaCost:5 B Types:Creature Elemental Snake PT:6/6 -A:SP$ PermanentCreature | Cost$ 5 B Sac | AILogic$ SacToReduceCost -S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | EffectZone$ All | Relative$ True | Description$ As an additional cost to cast this spell, you may sacrifice any number of nonland permanents. This spell costs {1} less to cast for each permanent sacrificed this way. +A:SP$ PermanentCreature | Cost$ 5 B Sac | AILogic$ SacToReduceCost | AdditionalDesc$ This spell costs {1} less to cast for each permanent sacrificed this way. +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | EffectZone$ All | Relative$ True SVar:X:Count$xPaid SVar:AIPreference:SacCost$Artifact.token+nonLegendary,Creature.token+powerLE2+toughnessLE2,Creature.cmcLE2+powerLE2+toughnessLE2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPutCounter | TriggerDescription$ Whenever CARDNAME enters or attacks, put a blight counter on it. Then for each blight counter on it, each opponent loses 4 life unless that player sacrifices a nonland permanent or discards a card. @@ -11,8 +11,8 @@ T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPutCounter | Secondary$ Tr SVar:TrigPutCounter:DB$ PutCounter | CounterType$ BLIGHT | CounterNum$ 1 | SubAbility$ DBRepeat SVar:DBRepeat:DB$ Repeat | MaxRepeat$ Y | RepeatSubAbility$ RepeatTorment | AILogic$ MaxY | StackDescription$ Each opponent loses 4 life unless that player sacrifices a nonland permanent or discards a card. SVar:RepeatTorment:DB$ GenericChoice | Defined$ Opponent | TempRemember$ Chooser | Choices$ SacNonland,Discard | FallbackAbility$ LoseLifeFallback | AILogic$ PayUnlessCost -SVar:Discard:DB$ LoseLife | Defined$ Remembered | LifeAmount$ 4 | UnlessCost$ Discard<1/Card> | UnlessPayer$ Remembered | SpellDescription$ You lose 4 life unless you discard a card -SVar:SacNonland:DB$ LoseLife | Defined$ Remembered | LifeAmount$ 4 | UnlessCost$ Sac<1/Permanent.nonLand/nonland permanent> | UnlessPayer$ Remembered | SpellDescription$ You lose 4 life unless you sacrifice a nonland permanent +SVar:Discard:DB$ LoseLife | Defined$ Remembered | LifeAmount$ 4 | UnlessCost$ Discard<1/Card> | UnlessPayer$ Remembered | SpellDescription$ You lose 4 life unless you discard a card. +SVar:SacNonland:DB$ LoseLife | Defined$ Remembered | LifeAmount$ 4 | UnlessCost$ Sac<1/Permanent.nonLand/nonland permanent> | UnlessPayer$ Remembered | SpellDescription$ You lose 4 life unless you sacrifice a nonland permanent. SVar:LoseLifeFallback:DB$ LoseLife | Defined$ Remembered | LifeAmount$ 4 SVar:Y:Count$CardCounters.BLIGHT DeckHas:Ability$Sacrifice|Counters diff --git a/forge-gui/res/cardsfolder/r/rowan_kenrith.txt b/forge-gui/res/cardsfolder/r/rowan_kenrith.txt index d91e8854bd8..e27d04a42f1 100644 --- a/forge-gui/res/cardsfolder/r/rowan_kenrith.txt +++ b/forge-gui/res/cardsfolder/r/rowan_kenrith.txt @@ -9,7 +9,7 @@ SVar:MustAttack:Mode$ MustAttack | EffectZone$ Command | ValidCreature$ Creature SVar:RemoveEffect:Mode$ Phase | Phase$ Cleanup | ValidPlayer$ Player.IsRemembered | TriggerZones$ Command | Static$ True | Execute$ ExileEffect SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -A:AB$ DamageAll | Cost$ SubCounter<2/LOYALTY> | ValidTgts$ Player | TgtPrompt$ Select target player | NumDmg$ 3 | ValidCards$ Creature.tapped | Planeswalker$ True | ValidDescription$ each tapped creature target player controls. | SpellDescription$ CARDNAME deals 3 damage to each tapped creature target player controls +A:AB$ DamageAll | Cost$ SubCounter<2/LOYALTY> | ValidTgts$ Player | TgtPrompt$ Select target player | NumDmg$ 3 | ValidCards$ Creature.tapped | Planeswalker$ True | ValidDescription$ each tapped creature target player controls. | SpellDescription$ CARDNAME deals 3 damage to each tapped creature target player controls. A:AB$ Effect | Cost$ SubCounter<8/LOYALTY> | Planeswalker$ True | Ultimate$ True | ValidTgts$ Player | EffectOwner$ Targeted | Name$ Emblem — Rowan Kenrith | Image$ emblem_rowan_kenrith | Triggers$ CopyAbility | Duration$ Permanent | AILogic$ Always | SpellDescription$ Target player gets an emblem with "Whenever you activate an ability that isn't a mana ability, copy it. You may choose new targets for the copy." SVar:CopyAbility:Mode$ AbilityCast | ValidActivatingPlayer$ You | ValidSA$ SpellAbility.nonManaAbility | TriggerZones$ Command | Execute$ TrigCopy | TriggerDescription$ Whenever you activate an ability that isn't a mana ability, copy it. You may choose new targets for the copy. SVar:TrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | MayChooseTarget$ True diff --git a/forge-gui/res/cardsfolder/r/runeboggle.txt b/forge-gui/res/cardsfolder/r/runeboggle.txt index 931e6d08642..96961a6e4c5 100644 --- a/forge-gui/res/cardsfolder/r/runeboggle.txt +++ b/forge-gui/res/cardsfolder/r/runeboggle.txt @@ -1,6 +1,6 @@ Name:Runeboggle ManaCost:2 U Types:Instant -A:SP$ Counter | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | UnlessCost$ 1 | SubAbility$ DBDraw | SpellDescription$ Counter target spell unless its controller pays {1}. Draw a card +A:SP$ Counter | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | UnlessCost$ 1 | SubAbility$ DBDraw | SpellDescription$ Counter target spell unless its controller pays {1}. Draw a card. SVar:DBDraw:DB$ Draw | NumCards$ 1 Oracle:Counter target spell unless its controller pays {1}.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/r/ruthless_knave.txt b/forge-gui/res/cardsfolder/r/ruthless_knave.txt index 456b5e71c59..2c8eaae06d9 100644 --- a/forge-gui/res/cardsfolder/r/ruthless_knave.txt +++ b/forge-gui/res/cardsfolder/r/ruthless_knave.txt @@ -3,7 +3,7 @@ ManaCost:2 B Types:Creature Orc Pirate PT:3/2 A:AB$ Token | Cost$ 2 B Sac<1/Creature> | TokenAmount$ 2 | TokenScript$ c_a_treasure_sac | TokenOwner$ You | SpellDescription$ Create two Treasure tokens. -A:AB$ Draw | Cost$ Sac<3/Treasure> | NumCards$ 1 | SpellDescription$ Draw a card +A:AB$ Draw | Cost$ Sac<3/Treasure> | NumCards$ 1 | SpellDescription$ Draw a card. SVar:DBDiscard:DB$ Discard | Defined$ You | Mode$ TgtChoose | DiscardValid$ Card.IsRemembered | NumCards$ 1 | SubAbility$ DBCleanup DeckHas:Ability$Token Oracle:{2}{B}, Sacrifice a creature: Create two Treasure tokens. (They're artifacts with "{T}, Sacrifice this artifact: Add one mana of any color.")\nSacrifice three Treasures: Draw a card. diff --git a/forge-gui/res/cardsfolder/rebalanced/a-alrund_god_of_the_cosmos_hakka_whispering_raven.txt b/forge-gui/res/cardsfolder/rebalanced/a-alrund_god_of_the_cosmos_hakka_whispering_raven.txt index cca6477be21..ab17f9d2ade 100644 --- a/forge-gui/res/cardsfolder/rebalanced/a-alrund_god_of_the_cosmos_hakka_whispering_raven.txt +++ b/forge-gui/res/cardsfolder/rebalanced/a-alrund_god_of_the_cosmos_hakka_whispering_raven.txt @@ -9,7 +9,7 @@ SVar:Z:SVar$X/Plus.Y T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigChooseCardType | TriggerDescription$ At the beginning of your end step, choose a card type, then reveal the top three cards of your library. Put all cards of the chosen type revealed this way into your hand and the rest on the bottom of your library in any order. SVar:TrigChooseCardType:DB$ ChooseType | Defined$ You | Type$ Card | SubAbility$ DBDig SVar:DBDig:DB$ Dig | DigNum$ 3 | Reveal$ True | ChangeNum$ All | ChangeValid$ Card.ChosenType | DestinationZone2$ Library | LibraryPosition$ -1 -DeckHints:Ability$Foretell +DeckHints:Keyword$Foretell AI:RemoveDeck:All AlternateMode:Modal Oracle:Alrund gets +1/+1 for each card in your hand and each foretold card you own in exile.\nAt the beginning of your end step, choose a card type, then reveal the top three cards of your library. Put all cards of the chosen type revealed this way into your hand and the rest on the bottom of your library in any order. diff --git a/forge-gui/res/cardsfolder/rebalanced/a-cobbled_lancer.txt b/forge-gui/res/cardsfolder/rebalanced/a-cobbled_lancer.txt index 07d80e779d0..ecb92edafed 100644 --- a/forge-gui/res/cardsfolder/rebalanced/a-cobbled_lancer.txt +++ b/forge-gui/res/cardsfolder/rebalanced/a-cobbled_lancer.txt @@ -2,7 +2,7 @@ Name:A-Cobbled Lancer ManaCost:U Types:Creature Zombie Horse PT:3/3 -A:SP$ PermanentCreature | Cost$ U ExileFromGrave<1/Creature/creature card> +A:SP$ PermanentCreature | Cost$ U ExileFromGrave<1/Creature> A:AB$ Draw | Cost$ 1 U ExileFromGrave<1/CARDNAME> | NumCards$ 1 | ActivationZone$ Graveyard | SpellDescription$ Draw a card. DeckHas:Ability$Graveyard Oracle:As an additional cost to cast this spell, exile a creature card from your graveyard.\n{1}{U}, Exile Cobbled Lancer from your graveyard: Draw a card. diff --git a/forge-gui/res/cardsfolder/rebalanced/a-narfi_betrayer_king.txt b/forge-gui/res/cardsfolder/rebalanced/a-narfi_betrayer_king.txt index eec4a831930..e493bac5757 100644 --- a/forge-gui/res/cardsfolder/rebalanced/a-narfi_betrayer_king.txt +++ b/forge-gui/res/cardsfolder/rebalanced/a-narfi_betrayer_king.txt @@ -4,6 +4,6 @@ Types:Legendary Snow Creature Zombie Wizard PT:4/3 S:Mode$ Continuous | Affected$ Creature.Zombie+Other+YouCtrl,Creature.Snow+Other+YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Other Snow and Zombie creatures you control get +1/+1. SVar:PlayMain1:TRUE -A:AB$ ChangeZone | Cost$ S S S | Origin$ Graveyard | Destination$ Battlefield | ActivationZone$ Graveyard | Tapped$ True | SpellDescription$ Return CARDNAME from your graveyard to the battlefield tapped +A:AB$ ChangeZone | Cost$ S S S | Origin$ Graveyard | Destination$ Battlefield | ActivationZone$ Graveyard | Tapped$ True | SpellDescription$ Return CARDNAME from your graveyard to the battlefield tapped. DeckHints:Type$Snow|Zombie Oracle:Other snow and Zombie creatures you control get +1/+1.\n{S}{S}{S}: Return Narfi, Betrayer King from your graveyard to the battlefield tapped. diff --git a/forge-gui/res/cardsfolder/rebalanced/a-tome_shredder.txt b/forge-gui/res/cardsfolder/rebalanced/a-tome_shredder.txt index 22102dc727e..e4603784a6b 100644 --- a/forge-gui/res/cardsfolder/rebalanced/a-tome_shredder.txt +++ b/forge-gui/res/cardsfolder/rebalanced/a-tome_shredder.txt @@ -3,6 +3,6 @@ ManaCost:1 R Types:Creature Wolf PT:2/1 K:Haste -A:AB$ PutCounter | Cost$ T ExileFromGrave<1/Instant;Sorcery> | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Exile an instant or sorcery card from your graveyard: Put a +1/+1 counter on CARDNAME. +A:AB$ PutCounter | Cost$ T ExileFromGrave<1/Instant;Sorcery> | CostDesc$ {T}, Exile an instant or sorcery card from your graveyard: | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Put a +1/+1 counter on CARDNAME. DeckHas:Ability$Counters Oracle:Haste\n{T}, Exile an instant or sorcery card from your graveyard: Put a +1/+1 counter on Tome Shredder. diff --git a/forge-gui/res/cardsfolder/rebalanced/a-young_blue_dragon_sand_augury.txt b/forge-gui/res/cardsfolder/rebalanced/a-young_blue_dragon_sand_augury.txt index 8257878d0af..fccd47fa7ff 100644 --- a/forge-gui/res/cardsfolder/rebalanced/a-young_blue_dragon_sand_augury.txt +++ b/forge-gui/res/cardsfolder/rebalanced/a-young_blue_dragon_sand_augury.txt @@ -12,5 +12,5 @@ Name:A-Sand Augury ManaCost:1 U Types:Sorcery Adventure A:SP$ Scry | ScryNum$ 1 | SubAbility$ DBDraw | SpellDescription$ Scry 1, -SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1 | SpellDescription$ then draw a card +SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1 | SpellDescription$ then draw a card. Oracle:Scry 1, then draw a card. diff --git a/forge-gui/res/cardsfolder/s/sage_of_the_beyond.txt b/forge-gui/res/cardsfolder/s/sage_of_the_beyond.txt index 09387488e96..88452f0c408 100644 --- a/forge-gui/res/cardsfolder/s/sage_of_the_beyond.txt +++ b/forge-gui/res/cardsfolder/s/sage_of_the_beyond.txt @@ -3,6 +3,6 @@ ManaCost:5 U U Types:Creature Spirit Giant PT:5/5 K:Flying -S:Mode$ ReduceCost | ValidCard$ Card.!wasCastFromYourHand | Activator$ You | Type$ Spell | Amount$ 2 | Description$ Spells you cast from anywhere other than your hand cost {2} less to cast +S:Mode$ ReduceCost | ValidCard$ Card.!wasCastFromYourHand | Activator$ You | Type$ Spell | Amount$ 2 | Description$ Spells you cast from anywhere other than your hand cost {2} less to cast. K:Foretell:4 U Oracle:Flying\nSpells you cast from anywhere other than your hand cost {2} less to cast.\nForetell {4}{U} (During your turn, you may pay {2} and exile this card from your hand face down. Cast it on a later turn for its foretell cost.) diff --git a/forge-gui/res/cardsfolder/s/sand_scout.txt b/forge-gui/res/cardsfolder/s/sand_scout.txt index 0f95cb01212..a0369c3a66d 100644 --- a/forge-gui/res/cardsfolder/s/sand_scout.txt +++ b/forge-gui/res/cardsfolder/s/sand_scout.txt @@ -8,5 +8,5 @@ T:Mode$ ChangesZoneAll | ValidCards$ Land.YouOwn+nonToken | Origin$ Any | Destin SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ rgw_1_1_sand_warrior | TokenOwner$ You SVar:X:Count$Valid Land.YouCtrl SVar:Y:PlayerCountOpponents$HighestValid Land.YouCtrl -DeckHas:Ability$Graveyard|Token & Type$Sand|Warrior & Colors$Red|Green +DeckHas:Ability$Graveyard|Token & Type$Sand|Warrior & Color$Red|Green Oracle:When Sand Scout enters, if an opponent controls more lands than you, search your library for a Desert card, put it onto the battlefield tapped, then shuffle.\nWhenever one or more land cards are put into your graveyard from anywhere, create a 1/1 red, green, and white Sand Warrior creature token. This ability triggers only once each turn. diff --git a/forge-gui/res/cardsfolder/s/sanguine_soothsayer.txt b/forge-gui/res/cardsfolder/s/sanguine_soothsayer.txt index 024e0031a94..6c148133b74 100644 --- a/forge-gui/res/cardsfolder/s/sanguine_soothsayer.txt +++ b/forge-gui/res/cardsfolder/s/sanguine_soothsayer.txt @@ -9,6 +9,6 @@ SVar:TrigConjure:DB$ MakeCard | Conjure$ True | Name$ Sanguine Bond | Zone$ Libr SVar:DBAnimate:DB$ Animate | Defined$ Remembered | Triggers$ DrawTrig | staticAbilities$ FreeCast | Duration$ Perpetual | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:DrawTrig:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When this creature enters, draw a card. -SVar:FreeCast:Mode$ Continuous | MayPlay$ True | MayPlayAltManaCost$ 0 | MayPlayDontGrantZonePermissions$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Hand | Description$ You may pay {0} rather than pay this spell's mana cost +SVar:FreeCast:Mode$ Continuous | MayPlay$ True | MayPlayAltManaCost$ 0 | MayPlayDontGrantZonePermissions$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Hand | Description$ You may pay {0} rather than pay this spell's mana cost. SVar:TrigDraw:DB$ Draw Oracle:Flying, lifelink\nWhenever Sanguine Soothsayer attacks, conjure a card named Sanguine Bond into the top fifteen cards of your library at random. It perpetually gains "You may pay {0} rather than pay this spell's mana cost" and "When this permanent enters, draw a card." diff --git a/forge-gui/res/cardsfolder/s/savage_thallid.txt b/forge-gui/res/cardsfolder/s/savage_thallid.txt index 6b0c0c9d3e9..f54e7b8549f 100644 --- a/forge-gui/res/cardsfolder/s/savage_thallid.txt +++ b/forge-gui/res/cardsfolder/s/savage_thallid.txt @@ -5,7 +5,7 @@ PT:5/2 T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of your upkeep, put a spore counter on CARDNAME. SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ SPORE | CounterNum$ 1 | SpellDescription$ Put a spore counter on CARDNAME. A:AB$ Token | Cost$ SubCounter<3/SPORE> | TokenAmount$ 1 | TokenScript$ g_1_1_saproling | TokenOwner$ You | SpellDescription$ Create a 1/1 green Saproling creature token. -A:AB$ Regenerate | Cost$ Sac<1/Saproling> | ValidTgts$ Fungus | TgtPrompt$ Select target fungus. | SpellDescription$ Regenerate target Fungus +A:AB$ Regenerate | Cost$ Sac<1/Saproling> | ValidTgts$ Fungus | TgtPrompt$ Select target Fungus. | SpellDescription$ Regenerate target Fungus. DeckHints:Type$Fungus DeckHas:Ability$Counters|Token Oracle:At the beginning of your upkeep, put a spore counter on Savage Thallid.\nRemove three spore counters from Savage Thallid: Create a 1/1 green Saproling creature token.\nSacrifice a Saproling: Regenerate target Fungus. diff --git a/forge-gui/res/cardsfolder/s/screamer_killer.txt b/forge-gui/res/cardsfolder/s/screamer_killer.txt index 267ec0c2ad2..6acc1dbd148 100644 --- a/forge-gui/res/cardsfolder/s/screamer_killer.txt +++ b/forge-gui/res/cardsfolder/s/screamer_killer.txt @@ -3,6 +3,6 @@ ManaCost:4 R Types:Creature Tyranid PT:5/5 K:Trample -T:Mode$ SpellCast | ValidCard$ Creature.cmcGE5 | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Bio-Plasmic Scream — Whenever you cast a creature spell with mana value 5 or greater, CARDNAME deals 5 damage to any target +T:Mode$ SpellCast | ValidCard$ Creature.cmcGE5 | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Bio-Plasmic Scream — Whenever you cast a creature spell with mana value 5 or greater, CARDNAME deals 5 damage to any target. SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Any | TgtPrompt$ Select any target to deal 5 damage to | NumDmg$ 5 Oracle:Trample\nBio-Plasmic Scream — Whenever you cast a creature spell with mana value 5 or greater, Screamer-Killer deals 5 damage to any target. diff --git a/forge-gui/res/cardsfolder/s/sehts_tiger.txt b/forge-gui/res/cardsfolder/s/sehts_tiger.txt index 2576213e7a2..9259c220e9a 100644 --- a/forge-gui/res/cardsfolder/s/sehts_tiger.txt +++ b/forge-gui/res/cardsfolder/s/sehts_tiger.txt @@ -3,7 +3,7 @@ ManaCost:2 W W Types:Creature Cat PT:3/3 K:Flash -T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChoose | TriggerDescription$ When CARDNAME enters, you gain protection from the color of your choice until end of turn +T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChoose | TriggerDescription$ When CARDNAME enters, you gain protection from the color of your choice until end of turn. SVar:TrigChoose:DB$ ChooseColor | Defined$ You | AILogic$ MostProminentAttackers | SubAbility$ SehtsProtection SVar:SehtsProtection:DB$ ProtectionAll | ValidPlayers$ You | Gains$ ChosenColor Oracle:Flash (You may cast this spell any time you could cast an instant.)\nWhen Seht's Tiger enters, you gain protection from the color of your choice until end of turn. (You can't be targeted, dealt damage, or enchanted by anything of the chosen color.) diff --git a/forge-gui/res/cardsfolder/s/shattergang_brothers.txt b/forge-gui/res/cardsfolder/s/shattergang_brothers.txt index e649980129c..c67cf8e7754 100644 --- a/forge-gui/res/cardsfolder/s/shattergang_brothers.txt +++ b/forge-gui/res/cardsfolder/s/shattergang_brothers.txt @@ -4,5 +4,5 @@ Types:Legendary Creature Goblin Artificer PT:3/3 A:AB$ Sacrifice | Cost$ 2 B Sac<1/Creature> | Defined$ Player.Other | SacValid$ Creature | SpellDescription$ Each other player sacrifices a creature. A:AB$ Sacrifice | Cost$ 2 R Sac<1/Artifact> | Defined$ Player.Other | SacValid$ Artifact | SpellDescription$ Each other player sacrifices an artifact. -A:AB$ Sacrifice | Cost$ 2 G Sac<1/Enchantment> | Defined$ Player.Other | SacValid$ Enchantment | SpellDescription$ Each other player sacrifices an enchantment +A:AB$ Sacrifice | Cost$ 2 G Sac<1/Enchantment> | Defined$ Player.Other | SacValid$ Enchantment | SpellDescription$ Each other player sacrifices an enchantment. Oracle:{2}{B}, Sacrifice a creature: Each other player sacrifices a creature.\n{2}{R}, Sacrifice an artifact: Each other player sacrifices an artifact.\n{2}{G}, Sacrifice an enchantment: Each other player sacrifices an enchantment. diff --git a/forge-gui/res/cardsfolder/s/shellfish_scholar.txt b/forge-gui/res/cardsfolder/s/shellfish_scholar.txt index f2ce33cdad3..95fa394904b 100644 --- a/forge-gui/res/cardsfolder/s/shellfish_scholar.txt +++ b/forge-gui/res/cardsfolder/s/shellfish_scholar.txt @@ -2,7 +2,7 @@ Name:Shellfish Scholar ManaCost:2 U Types:Creature Rat Wizard PT:3/2 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self,Rat.Other+YouCtrl | Execute$ TrigConjure | TriggerDescription$ Whenever CARDNAME or another Rat you control enters, conjure a card named Think Twice into your graveyard +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self,Rat.Other+YouCtrl | Execute$ TrigConjure | TriggerDescription$ Whenever CARDNAME or another Rat you control enters, conjure a card named Think Twice into your graveyard. SVar:TrigConjure:DB$ MakeCard | Conjure$ True | Name$ Think Twice | Zone$ Graveyard | Amount$ 1 A:AB$ Effect | Cost$ T | StaticAbilities$ StaticReduce | Activation$ Threshold | PrecostDesc$ Threshold — | SpellDescription$ Spells you cast from your graveyard this turn cost {2} less to cast. Activate only if seven or more cards are in your graveyard. SVar:StaticReduce:Mode$ ReduceCost | ValidCard$ Card.wasCastFromYourGraveyard | Type$ Spell | Activator$ You | Amount$ 2 | Description$ Spells you cast from your graveyard this turn cost {2} less to cast. diff --git a/forge-gui/res/cardsfolder/s/shocker.txt b/forge-gui/res/cardsfolder/s/shocker.txt index 52cb12d8d13..4ab0c6d524f 100644 --- a/forge-gui/res/cardsfolder/s/shocker.txt +++ b/forge-gui/res/cardsfolder/s/shocker.txt @@ -3,8 +3,8 @@ ManaCost:1 R Types:Creature Insect PT:1/1 T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | TriggerZones$ Battlefield | Execute$ TrigDiscard | TriggerDescription$ Whenever CARDNAME deals damage to a player, that player discards all the cards in their hand, then draws that many cards. -SVar:TrigDiscard:DB$ Discard | Defined$ TriggeredTarget | Mode$ Hand | RememberDiscarded$ True | SubAbility$ DBDraw | SpellDescription$ Discard hand -SVar:DBDraw:DB$ Draw | NumCards$ X | Defined$ TriggeredTarget | SubAbility$ DBCleanup | SpellDescription$ Draw that many cards +SVar:TrigDiscard:DB$ Discard | Defined$ TriggeredTarget | Mode$ Hand | RememberDiscarded$ True | SubAbility$ DBDraw | SpellDescription$ Discard your hand, +SVar:DBDraw:DB$ Draw | NumCards$ X | Defined$ TriggeredTarget | SubAbility$ DBCleanup | SpellDescription$ then draw that many cards. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Remembered$Amount Oracle:Whenever Shocker deals damage to a player, that player discards all the cards in their hand, then draws that many cards. diff --git a/forge-gui/res/cardsfolder/s/shuriken.txt b/forge-gui/res/cardsfolder/s/shuriken.txt index 323bed1edc3..6ee57e1db27 100644 --- a/forge-gui/res/cardsfolder/s/shuriken.txt +++ b/forge-gui/res/cardsfolder/s/shuriken.txt @@ -3,7 +3,7 @@ ManaCost:1 Types:Artifact Equipment K:Equip:2 S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddAbility$ ShurikenDamage | AddSVar$ ShurikenGainCtrl & ShurikenForget | Description$ Equipped creature has "{T}, Unattach CARDNAME: CARDNAME deals 2 damage to target creature. That creature's controller gains control of CARDNAME unless it was unattached from a Ninja." -SVar:ShurikenDamage:AB$ DealDamage | Cost$ T Unattach | NumDmg$ 2 | DamageSource$ OriginalHost | ValidTgts$ Creature | SubAbility$ ShurikenGainCtrl | SpellDescription$ ORIGINALHOST deals 2 damage to target creature. That creature's controller gains control of ORIGINALHOST unless it was unattached from a Ninja +SVar:ShurikenDamage:AB$ DealDamage | Cost$ T Unattach | NumDmg$ 2 | DamageSource$ OriginalHost | ValidTgts$ Creature | SubAbility$ ShurikenGainCtrl | SpellDescription$ ORIGINALHOST deals 2 damage to target creature. That creature's controller gains control of ORIGINALHOST unless it was unattached from a Ninja. SVar:ShurikenGainCtrl:DB$ GainControl | NewController$ TargetedController | Defined$ OriginalHost | ConditionDefined$ Self | ConditionPresent$ Ninja | ConditionCompare$ EQ0 AI:RemoveDeck:Random SVar:NonStackingAttachEffect:True diff --git a/forge-gui/res/cardsfolder/s/silvergill_douser.txt b/forge-gui/res/cardsfolder/s/silvergill_douser.txt index 33ec55cd3ff..921b704e137 100644 --- a/forge-gui/res/cardsfolder/s/silvergill_douser.txt +++ b/forge-gui/res/cardsfolder/s/silvergill_douser.txt @@ -2,7 +2,7 @@ Name:Silvergill Douser ManaCost:1 U Types:Creature Merfolk Wizard PT:1/1 -A:AB$ Pump | Cost$ T | ValidTgts$ Creature | TgtPrompt$ Select target creature | IsCurse$ True | NumAtt$ -X | SpellDescription$ Target creature gets -X/-0 until end of turn, where X is the number of Merfolk and/or Faeries you control +A:AB$ Pump | Cost$ T | ValidTgts$ Creature | TgtPrompt$ Select target creature | IsCurse$ True | NumAtt$ -X | SpellDescription$ Target creature gets -X/-0 until end of turn, where X is the number of Merfolk and/or Faeries you control. SVar:X:Count$Valid Merfolk.YouCtrl,Faerie.YouCtrl DeckHints:Type$Merfolk|Faerie Oracle:{T}: Target creature gets -X/-0 until end of turn, where X is the number of Merfolk and/or Faeries you control. diff --git a/forge-gui/res/cardsfolder/s/simic_slaw.txt b/forge-gui/res/cardsfolder/s/simic_slaw.txt index 230397f37d0..600fee7c2a7 100644 --- a/forge-gui/res/cardsfolder/s/simic_slaw.txt +++ b/forge-gui/res/cardsfolder/s/simic_slaw.txt @@ -7,4 +7,4 @@ A:AB$ Draw | Cost$ 2 Sac<1/CARDNAME> | NumCards$ X | SubAbility$ DBLife | SpellD SVar:DBLife:DB$ GainLife | LifeAmount$ X SVar:X:Count$CardCounters.CHARGE DeckHas:Ability$LifeGain|Sacrifice|Counters -Oracle:Whenever one or more creatures die, put a charge counter on Simic Slaw.\n{2}, Sacrifice Simic Slaw: Draw X cards and gain X life, where X is the number of charge counters on Simic Slaw. +Oracle:Whenever one or more creatures die, put a charge counter on Simic Slaw.\n{2}, Sacrifice Simic Slaw: Draw X cards and gain X life, where X is the number of charge counters on Simic Slaw. diff --git a/forge-gui/res/cardsfolder/s/simon_wild_magic_sorcerer.txt b/forge-gui/res/cardsfolder/s/simon_wild_magic_sorcerer.txt index c482e2a578f..546ccac00a9 100644 --- a/forge-gui/res/cardsfolder/s/simon_wild_magic_sorcerer.txt +++ b/forge-gui/res/cardsfolder/s/simon_wild_magic_sorcerer.txt @@ -2,7 +2,7 @@ Name:Simon, Wild Magic Sorcerer ManaCost:2 U Types:Legendary Creature Human Elf Shaman PT:1/1 -T:Mode$ SpellCast | ValidCard$ Instant.cmcGE3,Sorcery.cmcGE3 | ValidActivatingPlayer$ You | Execute$ TrigRollDice | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast an instant or sorcery spell with mana value 3 or greater, roll a d20 +T:Mode$ SpellCast | ValidCard$ Instant.cmcGE3,Sorcery.cmcGE3 | ValidActivatingPlayer$ You | Execute$ TrigRollDice | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast an instant or sorcery spell with mana value 3 or greater, roll a d20. SVar:TrigRollDice:DB$ RollDice | Sides$ 20 | ResultSubAbilities$ 1-9:EachDraw,10-19:YouDraw,20:Copy | SpellDescription$ Roll a d20. SVar:EachDraw:DB$ Draw | Defined$ Player | SpellDescription$ 1—9 VERT Each player draws a card. SVar:YouDraw:DB$ Draw | SpellDescription$ 10—19 VERT You draw a card. diff --git a/forge-gui/res/cardsfolder/s/skeletonize.txt b/forge-gui/res/cardsfolder/s/skeletonize.txt index 8eaea1cd1e1..f06c342f74a 100644 --- a/forge-gui/res/cardsfolder/s/skeletonize.txt +++ b/forge-gui/res/cardsfolder/s/skeletonize.txt @@ -2,7 +2,8 @@ Name:Skeletonize ManaCost:4 R Types:Instant A:SP$ DealDamage | NumDmg$ 3 | ValidTgts$ Creature | TgtPrompt$ Select target creature | RememberDamaged$ True | SubAbility$ DBDelayedTrigger | SpellDescription$ CARDNAME deals 3 damage to target creature. -SVar:DBDelayedTrigger:DB$ DelayedTrigger | Mode$ ChangesZone | RememberObjects$ Remembered | ValidCard$ Card.IsTriggerRemembered | Origin$ Battlefield | Destination$ Graveyard | ThisTurn$ True | Execute$ TrigToken | SpellDescription$ When a creature dealt damage this way dies this turn, create a 1/1 black Skeleton creature token with "{B}: Regenerate this creature." +SVar:DBDelayedTrigger:DB$ DelayedTrigger | Mode$ ChangesZone | RememberObjects$ Remembered | ValidCard$ Card.IsTriggerRemembered | Origin$ Battlefield | Destination$ Graveyard | ThisTurn$ True | Execute$ TrigToken | SubAbility$ DBCleanup | SpellDescription$ When a creature dealt damage this way dies this turn, create a 1/1 black Skeleton creature token with "{B}: Regenerate this creature." SVar:TrigToken:DB$ Token | TokenScript$ b_1_1_skeleton_regenerate +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Token Oracle:Skeletonize deals 3 damage to target creature. When a creature dealt damage this way dies this turn, create a 1/1 black Skeleton creature token with "{B}: Regenerate this creature." diff --git a/forge-gui/res/cardsfolder/s/smash_to_dust.txt b/forge-gui/res/cardsfolder/s/smash_to_dust.txt index 532051b82c8..7798afe9cdc 100644 --- a/forge-gui/res/cardsfolder/s/smash_to_dust.txt +++ b/forge-gui/res/cardsfolder/s/smash_to_dust.txt @@ -2,7 +2,7 @@ Name:Smash to Dust ManaCost:1 R Types:Sorcery A:SP$ Charm | Choices$ DBDestroyArtifact,DBDestroyDefender,DBDamage -SVar:DBDestroyArtifact:DB$ Destroy | ValidTgts$ Artifact | SpellDescription$ Destroy target artifact +SVar:DBDestroyArtifact:DB$ Destroy | ValidTgts$ Artifact | SpellDescription$ Destroy target artifact. SVar:DBDestroyDefender:DB$ Destroy | ValidTgts$ Creature.withDefender | TgtPrompt$ Select target creature with defender. | SpellDescription$ Destroy target creature with defender. SVar:DBDamage:DB$ DamageAll | NumDmg$ 1 | ValidCards$ Creature.OppCtrl | ValidDescription$ each creature your opponents control. | SpellDescription$ CARDNAME deals 1 damage to each creature your opponents control. Oracle:Choose one —\n• Destroy target artifact.\n• Destroy target creature with defender.\n• Smash to Dust deals 1 damage to each creature your opponents control. diff --git a/forge-gui/res/cardsfolder/s/smokestack.txt b/forge-gui/res/cardsfolder/s/smokestack.txt index 4b4788a4449..bdd13307e89 100644 --- a/forge-gui/res/cardsfolder/s/smokestack.txt +++ b/forge-gui/res/cardsfolder/s/smokestack.txt @@ -1,7 +1,7 @@ Name:Smokestack ManaCost:4 Types:Artifact -T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigSacrifice | TriggerDescription$ At the beginning of each player's upkeep, that player sacrifices a permanent for each soot counter on CARDNAME +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigSacrifice | TriggerDescription$ At the beginning of each player's upkeep, that player sacrifices a permanent for each soot counter on CARDNAME. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of your upkeep, you may put a soot counter on CARDNAME. SVar:TrigSacrifice:DB$ Sacrifice | Defined$ TriggeredPlayer | Amount$ X | SacValid$ Permanent | SacMessage$ Permanent SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ SOOT | CounterNum$ 1 diff --git a/forge-gui/res/cardsfolder/s/soul_swallower.txt b/forge-gui/res/cardsfolder/s/soul_swallower.txt index b8c05f71cae..192cdcc726f 100644 --- a/forge-gui/res/cardsfolder/s/soul_swallower.txt +++ b/forge-gui/res/cardsfolder/s/soul_swallower.txt @@ -3,7 +3,7 @@ ManaCost:2 G G Types:Creature Wurm PT:3/3 K:Trample -T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Delirium$ True | Execute$ DBPutCounter | TriggerDescription$ Delirium — At the beginning of your upkeep, if there are four or more card types among cards in your graveyard, put three +1/+1 counters on CARDNAME +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Delirium$ True | Execute$ DBPutCounter | TriggerDescription$ Delirium — At the beginning of your upkeep, if there are four or more card types among cards in your graveyard, put three +1/+1 counters on CARDNAME. SVar:DBPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 3 DeckHints:Ability$Graveyard|Discard DeckHas:Ability$Delirium diff --git a/forge-gui/res/cardsfolder/s/sovereigns_realm.txt b/forge-gui/res/cardsfolder/s/sovereigns_realm.txt index 91bc342c1dc..4a17f7cf88d 100644 --- a/forge-gui/res/cardsfolder/s/sovereigns_realm.txt +++ b/forge-gui/res/cardsfolder/s/sovereigns_realm.txt @@ -4,7 +4,7 @@ Types:Conspiracy Text:(Start the game with this conspiracy face up in the command zone.) K:Your deck can't have basic land cards. K:Your starting hand size is five. -A:AB$ Effect | Cost$ ExileFromHand<1/Card> | SpellDescription$ Exile a card from your hand: This turn, you may play basic lands from outside the game. +A:AB$ Effect | Cost$ ExileFromHand<1/Card> | CostDesc$ Exile a card from your hand: | SpellDescription$ This turn, you may play basic lands from outside the game. S:Mode$ Continuous | Affected$ Land.Basic+YouCtrl | AddAbility$ AnyMana | Description$ Basic lands you control have "{T}: Add one mana of any color." SVar:AnyMana:AB$ Mana | Cost$ T | Produced$ Any | Amount$ 1 | SpellDescription$ Add one mana of any color. Oracle:(Start the game with this conspiracy face up in the command zone.)\nYour starting deck can't have basic land cards and your starting hand size is five.\nExile a card from your hand: This turn, you may play basic lands from outside the game.\nBasic lands you control have "{T}: Add one mana of any color." diff --git a/forge-gui/res/cardsfolder/s/sparkshaper_visionary.txt b/forge-gui/res/cardsfolder/s/sparkshaper_visionary.txt index a1a68e8c020..6ea7050750a 100644 --- a/forge-gui/res/cardsfolder/s/sparkshaper_visionary.txt +++ b/forge-gui/res/cardsfolder/s/sparkshaper_visionary.txt @@ -5,7 +5,7 @@ PT:0/5 T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigChoose | TriggerDescription$ At the beginning of combat on your turn, choose any number of target planeswalkers you control. Until end of turn, they become 3/3 blue Bird creatures with flying, hexproof, and "Whenever this creature deals combat damage to a player, scry 1." (They're no longer planeswalkers. Loyalty abilities can still be activated.) SVar:TrigChoose:DB$ ChooseCard | Choices$ Planeswalker.YouCtrl | Amount$ X | ChoiceTitle$ Choose any number of Planeswalkers you control | SubAbility$ DBAnimate SVar:DBAnimate:DB$ Animate | Defined$ ChosenCard | Power$ 3 | Toughness$ 3 | Triggers$ AttackTrigger | RemoveCardTypes$ True | Types$ Creature,Bird | Keywords$ Flying & Hexproof | Colors$ Blue | OverwriteColors$ True | SubAbility$ DBCleanup -SVar:AttackTrigger:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigScry | TriggerDescription$ Whenever this creature deals combat damage to a player, scry 1 +SVar:AttackTrigger:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigScry | TriggerDescription$ Whenever this creature deals combat damage to a player, scry 1. SVar:TrigScry:DB$ Scry | ScryNum$ 1 SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True SVar:X:Count$Valid Planeswalker.YouCtrl diff --git a/forge-gui/res/cardsfolder/s/spiteful_hexmage.txt b/forge-gui/res/cardsfolder/s/spiteful_hexmage.txt index ff4a1494915..f33b84a0568 100644 --- a/forge-gui/res/cardsfolder/s/spiteful_hexmage.txt +++ b/forge-gui/res/cardsfolder/s/spiteful_hexmage.txt @@ -2,7 +2,7 @@ Name:Spiteful Hexmage ManaCost:B Types:Creature Human Warlock PT:3/2 -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters, create a Cursed Role token attached to target creature you control. (if you control another Role on it, put that one into the graveyard. Enchanted creature is 1/1) +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters, create a Cursed Role token attached to target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature is 1/1.) SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ role_cursed | TokenOwner$ You | AttachedTo$ Targeted | ValidTgts$ Creature.YouCtrl | AILogic$ Curse | TgtPrompt$ Select target creature you control DeckHas:Ability$Token & Type$Role|Aura -Oracle:When Spiteful Hexmage enters, create a Cursed Role token attached to target creature you control. (if you control another Role on it, put that one into the graveyard. Enchanted creature is 1/1) +Oracle:When Spiteful Hexmage enters, create a Cursed Role token attached to target creature you control. (If you control another Role on it, put that one into the graveyard. Enchanted creature is 1/1.) diff --git a/forge-gui/res/cardsfolder/s/squees_revenge.txt b/forge-gui/res/cardsfolder/s/squees_revenge.txt index 2d8edb248c0..35f3bf4d2b1 100644 --- a/forge-gui/res/cardsfolder/s/squees_revenge.txt +++ b/forge-gui/res/cardsfolder/s/squees_revenge.txt @@ -2,13 +2,13 @@ Name:Squee's Revenge ManaCost:1 U R Types:Sorcery A:SP$ ChooseNumber | SubAbility$ RepeatFlip | SpellDescription$ Choose a number. Flip a coin that many times or until you lose a flip, whichever comes first. If you win all the flips, draw two cards for each flip. -# Repeat Flip +# Repeat flip SVar:RepeatFlip:DB$ Repeat | RepeatSubAbility$ FlipAgain | ConditionCheckSVar$ TimesToFlip | ConditionSVarCompare$ GT0 | RepeatCheckSVar$ FlipsDone | RepeatSVarCompare$ LTTimesToFlip | SubAbility$ DrawIfWin SVar:FlipAgain:DB$ FlipACoin | WinSubAbility$ IncrementFlips | LoseSubAbility$ IncrementLoss SVar:IncrementFlips:DB$ StoreSVar | SVar$ FlipsDone | Type$ CountSVar | Expression$ FlipsDone/Plus.1 SVar:IncrementLoss:DB$ StoreSVar | SVar$ Loss | Type$ CountSVar | Expression$ Loss/Plus.1 | SubAbility$ SetFilpsDone SVar:SetFilpsDone:DB$ StoreSVar | SVar$ FlipsDone | Type$ CountSVar | Expression$ TimesToFlip -# Draw Cards +# Draw cards SVar:DrawIfWin:DB$ Draw | Defined$ You | NumCards$ CardsToDraw | ConditionCheckSVar$ Loss | ConditionSVarCompare$ EQ0 SVar:TimesToFlip:Count$ChosenNumber SVar:FlipsDone:Number$0 diff --git a/forge-gui/res/cardsfolder/s/stalwart_valkyrie.txt b/forge-gui/res/cardsfolder/s/stalwart_valkyrie.txt index 4e7ca70ea90..895e858b46d 100644 --- a/forge-gui/res/cardsfolder/s/stalwart_valkyrie.txt +++ b/forge-gui/res/cardsfolder/s/stalwart_valkyrie.txt @@ -3,5 +3,5 @@ ManaCost:3 W Types:Creature Angel Warrior PT:3/2 K:Flying -S:Mode$ AlternativeCost | ValidSA$ Spell.Self | EffectZone$ All | Cost$ 1 W ExileFromGrave<1/Creature> | Description$ You may pay {1}{W} and exile a creature card from your graveyard rather than pay CARDNAME's mana cost +S:Mode$ AlternativeCost | ValidSA$ Spell.Self | EffectZone$ All | Cost$ 1 W ExileFromGrave<1/Creature> | Description$ You may pay {1}{W} and exile a creature card from your graveyard rather than pay CARDNAME's mana cost. Oracle:You may pay {1}{W} and exile a creature card from your graveyard rather than pay this spell's mana cost.\nFlying diff --git a/forge-gui/res/cardsfolder/s/starscape_cleric.txt b/forge-gui/res/cardsfolder/s/starscape_cleric.txt index e1edee16809..46d7a0c1e59 100644 --- a/forge-gui/res/cardsfolder/s/starscape_cleric.txt +++ b/forge-gui/res/cardsfolder/s/starscape_cleric.txt @@ -7,5 +7,5 @@ K:Flying K:CARDNAME can't block. T:Mode$ LifeGained | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDrain | TriggerDescription$ Whenever you gain life, each opponent loses 1 life. SVar:TrigDrain:DB$ LoseLife | Defined$ Player.Opponent | LifeAmount$ 1 -DeckHints:Ability$Lifegain +DeckHints:Ability$LifeGain Oracle:Offspring {2}{B} (You may pay an additional {2}{B} as you cast this spell. If you do, when this creature enters, create a 1/1 token copy of it.)\nFlying\nThis creature can't block.\nWhenever you gain life, each opponent loses 1 life. diff --git a/forge-gui/res/cardsfolder/s/starseer_mentor.txt b/forge-gui/res/cardsfolder/s/starseer_mentor.txt index 01419c4fad1..db80d37872e 100644 --- a/forge-gui/res/cardsfolder/s/starseer_mentor.txt +++ b/forge-gui/res/cardsfolder/s/starseer_mentor.txt @@ -6,8 +6,8 @@ K:Flying K:Vigilance T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | CheckSVar$ X | SVarCompare$ GE1 | Execute$ TrigGenericChoice | TriggerDescription$ At the beginning of your end step, if you gained or lost life this turn, target opponent loses 3 life unless they sacrifice a nonland permanent or discard a card. SVar:TrigGenericChoice:DB$ GenericChoice | ValidTgts$ Opponent | Choices$ PaySac,PayDiscard | FallbackAbility$ LoseLifeFallback | AILogic$ PayUnlessCost -SVar:PaySac:DB$ LoseLife | LifeAmount$ 3 | Defined$ Targeted | UnlessCost$ Sac<1/Permanent.nonland/nonland permanent> | UnlessPayer$ Targeted | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you sacrifice a nonland permanent -SVar:PayDiscard:DB$ LoseLife | LifeAmount$ 3 | Defined$ Targeted | UnlessCost$ Discard<1/Card> | UnlessPayer$ Targeted | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you discard a card +SVar:PaySac:DB$ LoseLife | LifeAmount$ 3 | Defined$ Targeted | UnlessCost$ Sac<1/Permanent.nonland/nonland permanent> | UnlessPayer$ Targeted | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you sacrifice a nonland permanent. +SVar:PayDiscard:DB$ LoseLife | LifeAmount$ 3 | Defined$ Targeted | UnlessCost$ Discard<1/Card> | UnlessPayer$ Targeted | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you discard a card. # TODO: Most likely the ChooseGenericEffect code can be simplified somehow to avoid the necessity of having a dedicated fallback ability SVar:LoseLifeFallback:DB$ LoseLife | Defined$ Targeted | LifeAmount$ 3 SVar:X:Count$LifeYouGainedThisTurn/Plus.Y diff --git a/forge-gui/res/cardsfolder/s/stew_the_coneys.txt b/forge-gui/res/cardsfolder/s/stew_the_coneys.txt index e1ef903758f..ee52dbe7c43 100644 --- a/forge-gui/res/cardsfolder/s/stew_the_coneys.txt +++ b/forge-gui/res/cardsfolder/s/stew_the_coneys.txt @@ -1,7 +1,7 @@ Name:Stew the Coneys ManaCost:2 G Types:Instant -A:SP$ Pump | ValidTgts$ Creature.YouCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you control | SubAbility$ SoulsDamage | StackDescription$ None | SpellDescription$ Target creature you control deals damage equal to its power to target creature you don't control +A:SP$ Pump | ValidTgts$ Creature.YouCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you control | SubAbility$ SoulsDamage | StackDescription$ None | SpellDescription$ Target creature you control deals damage equal to its power to target creature you don't control. SVar:SoulsDamage:DB$ DealDamage | ValidTgts$ Creature.YouDontCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you don't control | NumDmg$ X | DamageSource$ ParentTarget | SubAbility$ DBFood SVar:DBFood:DB$ Token | TokenScript$ c_a_food_sac | SpellDescription$ Create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") SVar:X:ParentTargeted$CardPower diff --git a/forge-gui/res/cardsfolder/s/stormkeld_curator_giant_secrets.txt b/forge-gui/res/cardsfolder/s/stormkeld_curator_giant_secrets.txt index 7900d6b9175..feee655223b 100644 --- a/forge-gui/res/cardsfolder/s/stormkeld_curator_giant_secrets.txt +++ b/forge-gui/res/cardsfolder/s/stormkeld_curator_giant_secrets.txt @@ -3,8 +3,8 @@ ManaCost:4 W W Types:Creature Giant PT:6/6 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigAurify | TriggerDescription$ When CARDNAME enters, you may put any number of Aura cards from your graveyard and/or hand onto the battlefield attached to it. -SVar:TrigAurify:DB$ ChangeZone | Origin$ Hand,Graveyard | Destination$ Battlefield | ChangeType$ Aura.CanEnchantSource+YouOwn | AttachedTo$ Self | ChangeNum$ Count | Optional$ True | Hidden$ True -SVar:Count:Count$ValidHand,Graveyard Aura.CanEnchantSource+YouOwn +SVar:TrigAurify:DB$ ChangeZone | Origin$ Hand,Graveyard | Destination$ Battlefield | ChangeType$ Aura.CanEnchantSource+YouOwn | AttachedTo$ Self | ChangeNum$ CountAuras | Optional$ True | Hidden$ True +SVar:CountAuras:Count$ValidHand,Graveyard Aura.CanEnchantSource+YouOwn DeckHints:Type$Aura DeckHas:Type$Aura|Enchantment & Ability$Graveyard AlternateMode:Adventure diff --git a/forge-gui/res/cardsfolder/s/strixhaven.txt b/forge-gui/res/cardsfolder/s/strixhaven.txt index 8f8b5664322..ecd6df70ec7 100644 --- a/forge-gui/res/cardsfolder/s/strixhaven.txt +++ b/forge-gui/res/cardsfolder/s/strixhaven.txt @@ -2,7 +2,7 @@ Name:Strixhaven ManaCost:no cost Types:Plane Arcavios S:Mode$ Continuous | AddKeyword$ Demonstrate | EffectZone$ Command | Affected$ Instant,Sorcery | AffectedZone$ Stack | Description$ Instant and sorcery spells players cast have demonstrate. (Whenever a player casts an instant or sorcery spell, they may copy it. If they do, they choose an opponent to also copy it. Players may choose new targets for their copies.) -T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, return up to one target instant or sorcery card from a graveyard to its owner's hand +T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, return up to one target instant or sorcery card from a graveyard to its owner's hand. SVar:RolledChaos:DB$ ChangeZone | Origin$ Graveyard | TargetMin$ 0 | TargetMax$ 1 | Destination$ Hand | ValidTgts$ Instant,Sorcery | TgtPrompt$ Select up to target instant or sorcery spell from any graveyard DeckHas:Ability$Graveyard DeckHints:Type$Instant|Sorcery diff --git a/forge-gui/res/cardsfolder/s/stump_stomp_burnwillow_clearing.txt b/forge-gui/res/cardsfolder/s/stump_stomp_burnwillow_clearing.txt index 222db02dde8..762958a584e 100644 --- a/forge-gui/res/cardsfolder/s/stump_stomp_burnwillow_clearing.txt +++ b/forge-gui/res/cardsfolder/s/stump_stomp_burnwillow_clearing.txt @@ -1,7 +1,7 @@ Name:Stump Stomp ManaCost:1 RG Types:Sorcery -A:SP$ Pump | ValidTgts$ Creature.YouCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you control | SubAbility$ SoulsDamage | StackDescription$ None | SpellDescription$ Target creature you control deals damage equal to its power to target creature or planeswalker you don't control +A:SP$ Pump | ValidTgts$ Creature.YouCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you control | SubAbility$ SoulsDamage | StackDescription$ None | SpellDescription$ Target creature you control deals damage equal to its power to target creature or planeswalker you don't control. SVar:SoulsDamage:DB$ DealDamage | ValidTgts$ Creature.YouDontCtrl,Planeswalker.YouDontCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature or planeswalker you don't control | NumDmg$ X | DamageSource$ ParentTarget SVar:X:ParentTargeted$CardPower AlternateMode:Modal diff --git a/forge-gui/res/cardsfolder/s/survivors_med_kit.txt b/forge-gui/res/cardsfolder/s/survivors_med_kit.txt index 67f0210ad28..b69636ec9ed 100644 --- a/forge-gui/res/cardsfolder/s/survivors_med_kit.txt +++ b/forge-gui/res/cardsfolder/s/survivors_med_kit.txt @@ -6,5 +6,5 @@ SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Stimpak — Draw a card. SVar:DBFood:DB$ Token | TokenScript$ c_a_food_sac | SpellDescription$ Fancy Lads Snack Cakes — Create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") SVar:DBRadAway:DB$ RemoveCounter | ValidTgts$ Player | TgtPrompt$ Select target player | CounterType$ RAD | CounterNum$ All | SubAbility$ DBSacSelf | SpellDescription$ RadAway — Target player loses all rad counters. Sacrifice CARDNAME. SVar:DBSacSelf:DB$ Sacrifice -DeckHas:Ability$Sacrifice|LifeGain|Tokens & Type$Food +DeckHas:Ability$Sacrifice|LifeGain|Token & Type$Food Oracle:{1}, {T}: Choose one that hasn't been chosen —\n• Stimpak — Draw a card.\n• Fancy Lads Snack Cakes — Create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.")\n• RadAway — Target player loses all rad counters. Sacrifice Survivor's Med Kit. diff --git a/forge-gui/res/cardsfolder/t/taigam_sidisis_hand.txt b/forge-gui/res/cardsfolder/t/taigam_sidisis_hand.txt index 6c4e308ba06..805972b95f9 100644 --- a/forge-gui/res/cardsfolder/t/taigam_sidisis_hand.txt +++ b/forge-gui/res/cardsfolder/t/taigam_sidisis_hand.txt @@ -5,7 +5,7 @@ PT:3/4 R:Event$ BeginPhase | ActiveZones$ Battlefield | ValidPlayer$ You | Phase$ Draw | Skip$ True | Description$ Skip your draw step. T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDig | TriggerDescription$ At the beginning of your upkeep, look at the top three cards of your library. Put one of them into your hand and the rest into your graveyard. SVar:TrigDig:DB$ Dig | DigNum$ 3 | DestinationZone2$ Graveyard | NoReveal$ True | SpellDescription$ Look at the top three cards of your library. Put one of them into your hand and the rest into your graveyard. -A:AB$ Pump | Cost$ B T ExileFromGrave | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ -X | NumDef$ -X | IsCurse$ True | SpellDescription$ Target creature gets -X/-X until end of turn. | CostDesc$ {B}, {T}, Exile X cards from your graveyard: +A:AB$ Pump | Cost$ B T ExileFromGrave | CostDesc$ {B}, {T}, Exile X cards from your graveyard: | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ -X | NumDef$ -X | IsCurse$ True | SpellDescription$ Target creature gets -X/-X until end of turn. SVar:X:Count$xPaid AI:RemoveDeck:All Oracle:Skip your draw step.\nAt the beginning of your upkeep, look at the top three cards of your library. Put one of them into your hand and the rest into your graveyard.\n{B}, {T}, Exile X cards from your graveyard: Target creature gets -X/-X until end of turn. diff --git a/forge-gui/res/cardsfolder/t/tandem_lookout.txt b/forge-gui/res/cardsfolder/t/tandem_lookout.txt index 32235b2758f..de5ee02ee62 100644 --- a/forge-gui/res/cardsfolder/t/tandem_lookout.txt +++ b/forge-gui/res/cardsfolder/t/tandem_lookout.txt @@ -4,6 +4,6 @@ Types:Creature Human Scout PT:2/1 K:Soulbond S:Mode$ Continuous | Affected$ Creature.PairedWith,Creature.Self+Paired | AddTrigger$ DamageTrigger | AddSVar$ TandemLookoutTrigDraw | Description$ As long as CARDNAME is paired with another creature, each of those creatures have "Whenever this creature deals damage to an opponent, draw a card." -SVar:DamageTrigger:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Opponent | TriggerZones$ Battlefield | Execute$ TandemLookoutTrigDraw | TriggerDescription$ Whenever CARDNAME deals damage to an opponent, draw a card +SVar:DamageTrigger:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Opponent | TriggerZones$ Battlefield | Execute$ TandemLookoutTrigDraw | TriggerDescription$ Whenever CARDNAME deals damage to an opponent, draw a card. SVar:TandemLookoutTrigDraw:DB$ Draw | NumCards$ 1 Oracle:Soulbond (You may pair this creature with another unpaired creature when either enters. They remain paired for as long as you control both of them.)\nAs long as Tandem Lookout is paired with another creature, each of those creatures has "Whenever this creature deals damage to an opponent, draw a card." diff --git a/forge-gui/res/cardsfolder/t/tangled_colony.txt b/forge-gui/res/cardsfolder/t/tangled_colony.txt index e531576308d..f0839dbc202 100644 --- a/forge-gui/res/cardsfolder/t/tangled_colony.txt +++ b/forge-gui/res/cardsfolder/t/tangled_colony.txt @@ -2,7 +2,7 @@ Name:Tangled Colony ManaCost:1 B Types:Creature Rat PT:3/2 -S:Mode$ CantBlockBy | ValidBlocker$ Creature.Self | Description$ CARDNAME can't block +S:Mode$ CantBlockBy | ValidBlocker$ Creature.Self | Description$ CARDNAME can't block. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME dies, create X 1/1 black Rat creature tokens with "This creature can't block," where X is the amount of damage dealt to it this turn. SVar:TrigToken:DB$ Token | TokenAmount$ X | TokenScript$ b_1_1_rat_noblock | TokenOwner$ You SVar:X:Count$TotalDamageReceivedThisTurn diff --git a/forge-gui/res/cardsfolder/t/temur_elevator.txt b/forge-gui/res/cardsfolder/t/temur_elevator.txt index 84e9621b34b..cad0555319c 100644 --- a/forge-gui/res/cardsfolder/t/temur_elevator.txt +++ b/forge-gui/res/cardsfolder/t/temur_elevator.txt @@ -2,7 +2,7 @@ Name:Temur Elevator ManaCost:no cost Types:Land K:Ascend -A:AB$ Mana | Cost$ T | Produced$ Combo G U R | SubAbility$ DBLoseLife | SpellDescription$ Add {G}, {U}, or {R}. If you don’t have the city’s blessing, you lose 1 life. +A:AB$ Mana | Cost$ T | Produced$ Combo G U R | SubAbility$ DBLoseLife | SpellDescription$ Add {G}, {U}, or {R}. If you don't have the city's blessing, you lose 1 life. SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ X | Defined$ You SVar:X:Count$Blessing.0.1 -Oracle:Ascend (If you control ten or more permanents, you get the city’s blessing for the rest of the game.)\n{T}: Add {G}, {U}, or {R}. If you don’t have the city’s blessing, you lose 1 life. +Oracle:Ascend (If you control ten or more permanents, you get the city's blessing for the rest of the game.)\n{T}: Add {G}, {U}, or {R}. If you don't have the city's blessing, you lose 1 life. diff --git a/forge-gui/res/cardsfolder/t/tergrid_god_of_fright_tergrids_lantern.txt b/forge-gui/res/cardsfolder/t/tergrid_god_of_fright_tergrids_lantern.txt index a46ae1de9d3..0891ec62eab 100644 --- a/forge-gui/res/cardsfolder/t/tergrid_god_of_fright_tergrids_lantern.txt +++ b/forge-gui/res/cardsfolder/t/tergrid_god_of_fright_tergrids_lantern.txt @@ -18,8 +18,8 @@ Types:Legendary Artifact A:AB$ Pump | Cost$ T | ValidTgts$ Player | TgtPrompt$ Select target player | SubAbility$ TrigGenericChoice | IsCurse$ True | SpellDescription$ Target player loses 3 life unless they sacrifice a nonland permanent or discard a card. | StackDescription$ {p:Targeted} loses 3 life unless they sacrifice a nonland permanent or discard a card. A:AB$ Untap | Cost$ 3 B | SpellDescription$ Untap CARDNAME. SVar:TrigGenericChoice:DB$ GenericChoice | Defined$ Targeted | Choices$ PaySac,PayDiscard | FallbackAbility$ LoseLifeFallback | AILogic$ PayUnlessCost -SVar:PaySac:DB$ LoseLife | LifeAmount$ 3 | Defined$ Targeted | UnlessCost$ Sac<1/Permanent.nonland/nonland permanent> | UnlessPayer$ Targeted | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you sacrifice a nonland permanent -SVar:PayDiscard:DB$ LoseLife | LifeAmount$ 3 | Defined$ Targeted | UnlessCost$ Discard<1/Card> | UnlessPayer$ Targeted | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you discard a card +SVar:PaySac:DB$ LoseLife | LifeAmount$ 3 | Defined$ Targeted | UnlessCost$ Sac<1/Permanent.nonland/nonland permanent> | UnlessPayer$ Targeted | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you sacrifice a nonland permanent. +SVar:PayDiscard:DB$ LoseLife | LifeAmount$ 3 | Defined$ Targeted | UnlessCost$ Discard<1/Card> | UnlessPayer$ Targeted | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you discard a card. # TODO: Most likely the ChooseGenericEffect code can be simplified somehow to avoid the necessity of having a dedicated fallback ability SVar:LoseLifeFallback:DB$ LoseLife | Defined$ Targeted | LifeAmount$ 3 Oracle:{T}: Target player loses 3 life unless they sacrifice a nonland permanent or discard a card.\n{3}{B}: Untap Tergrid's Lantern. diff --git a/forge-gui/res/cardsfolder/t/tezzerets_reckoning.txt b/forge-gui/res/cardsfolder/t/tezzerets_reckoning.txt index 747d8e1bd1e..7e389d7dbb7 100644 --- a/forge-gui/res/cardsfolder/t/tezzerets_reckoning.txt +++ b/forge-gui/res/cardsfolder/t/tezzerets_reckoning.txt @@ -3,7 +3,7 @@ ManaCost:1 U Types:Instant A:SP$ ChangeZone | Origin$ Library | Destination$ Exile | ChangeType$ Card | ChangeNum$ 3 | Hidden$ True | AtRandom$ True | NoShuffle$ True | FaceDown$ True | Mandatory$ True | NoLooking$ True | RememberChanged$ True | SubAbility$ DBEffect | SpellDescription$ Exile three random cards from your library face down and look at them. For as long as they remain exiled, you may play one of those cards. SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ STPlay | Triggers$ Play1,Play2 | SubAbility$ DBCleanup | ExileOnMoved$ Exile | Duration$ Permanent -SVar:STPlay:Mode$ Continuous | MayPlay$ True | MayLookAt$ You | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ For as long as they remain exiled, you may play one of those cards +SVar:STPlay:Mode$ Continuous | MayPlay$ True | MayLookAt$ You | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ For as long as they remain exiled, you may play one of those cards. SVar:Play1:Mode$ SpellCast | ValidCard$ Card.IsRemembered | ValidActivatingPlayer$ You | TriggerZones$ Command | Execute$ ExileSelf | Static$ True SVar:Play2:Mode$ LandPlayed | ValidCard$ Land.IsRemembered | TriggerZones$ Command | Execute$ ExileSelf | Static$ True SVar:ExileSelf:DB$ ChangeZone | Origin$ Command | Destination$ Exile diff --git a/forge-gui/res/cardsfolder/t/the_binding_of_the_titans.txt b/forge-gui/res/cardsfolder/t/the_binding_of_the_titans.txt index 00742aac8ee..2e53182c301 100644 --- a/forge-gui/res/cardsfolder/t/the_binding_of_the_titans.txt +++ b/forge-gui/res/cardsfolder/t/the_binding_of_the_titans.txt @@ -8,5 +8,5 @@ SVar:DBReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | TgtPrompt SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ X | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Remembered$Valid Creature -DeckHas:Ability$Graveyard|GainLife +DeckHas:Ability$Graveyard|LifeGain Oracle:(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)\nI — Each player mills three cards.\nII — Exile up to two target cards from graveyards. For each creature card exiled this way, you gain 1 life.\nIII — Return target creature or land card from your graveyard to your hand. diff --git a/forge-gui/res/cardsfolder/t/the_ever_changing_dane.txt b/forge-gui/res/cardsfolder/t/the_ever_changing_dane.txt index 33f6afc47b5..317f1c80937 100644 --- a/forge-gui/res/cardsfolder/t/the_ever_changing_dane.txt +++ b/forge-gui/res/cardsfolder/t/the_ever_changing_dane.txt @@ -2,6 +2,6 @@ Name:The Ever-Changing 'Dane ManaCost:W U B Types:Legendary Creature Shapeshifter PT:3/3 -A:AB$ Clone | Cost$ 1 Sac<1/Creature.Other> | Defined$ Sacrificed | GainThisAbility$ True | SpellDescription$ Sacrifice another creature: CARDNAME becomes a copy of the sacrificed creature, except it has this ability. -Oracle:{1}, Sacrifice another creature: The Ever-Changing 'Dane becomes a copy of the sacrificed creature, except it has this ability. +A:AB$ Clone | Cost$ 1 Sac<1/Creature.Other> | CostDesc$ Sacrifice another creature: | Defined$ Sacrificed | GainThisAbility$ True | SpellDescription$ CARDNAME becomes a copy of the sacrificed creature, except it has this ability. DeckHas:Ability$Sacrifice +Oracle:{1}, Sacrifice another creature: The Ever-Changing 'Dane becomes a copy of the sacrificed creature, except it has this ability. diff --git a/forge-gui/res/cardsfolder/t/the_hippodrome.txt b/forge-gui/res/cardsfolder/t/the_hippodrome.txt index aaa8a231726..9fee72fcc49 100644 --- a/forge-gui/res/cardsfolder/t/the_hippodrome.txt +++ b/forge-gui/res/cardsfolder/t/the_hippodrome.txt @@ -2,7 +2,7 @@ Name:The Hippodrome ManaCost:no cost Types:Plane Segovia S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature | AddPower$ -5 | Description$ All Creatures get -5/-0. -T:Mode$ ChaosEnsues | OptionalDecider$ You | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, you may destroy target creature if it's power is 0 or less. +T:Mode$ ChaosEnsues | OptionalDecider$ You | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, you may destroy target creature if its power is 0 or less. SVar:RolledChaos:DB$ Destroy | ValidTgts$ Creature | ConditionCheckSVar$ TgtPow | ConditionSVarCompare$ EQ1 | AITgts$ Creature.OppCtrl+powerLE0 SVar:TgtPow:Targeted$Valid Creature.powerLE0 SVar:AIRollPlanarDieParams:Mode$ Always diff --git a/forge-gui/res/cardsfolder/t/the_huntsmans_redemption.txt b/forge-gui/res/cardsfolder/t/the_huntsmans_redemption.txt index e4d910176af..534fd9fa3a9 100644 --- a/forge-gui/res/cardsfolder/t/the_huntsmans_redemption.txt +++ b/forge-gui/res/cardsfolder/t/the_huntsmans_redemption.txt @@ -4,6 +4,6 @@ Types:Enchantment Saga K:Chapter:3:DBToken,ABSearch,DBPump SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ g_3_3_beast | TokenOwner$ You | SpellDescription$ Create a 3/3 green Beast creature token. SVar:ABSearch:AB$ ChangeZone | Cost$ Sac<1/Creature> | CostDesc$ You may sacrifice a creature. | Origin$ Library | Destination$ Hand | ChangeType$ Land.Basic,Creature | ChangeNum$ 1 | SpellDescription$ If you do, search your library for a creature or basic land card, reveal it, put it into your hand, then shuffle. -SVar:DBPump:DB$ Pump | ValidTgts$ Creature | NumAtt$ +2 | NumDef$ +2 | TgtPrompt$ Select up to two target creatures | TargetMin$ 0 | TargetMax$ 2 | KW$ Trample | SpellDescription$ Up to two target creatures each get +2/+2 and gain trample until end of turn +SVar:DBPump:DB$ Pump | ValidTgts$ Creature | NumAtt$ +2 | NumDef$ +2 | TgtPrompt$ Select up to two target creatures | TargetMin$ 0 | TargetMax$ 2 | KW$ Trample | SpellDescription$ Up to two target creatures each get +2/+2 and gain trample until end of turn. DeckHas:Ability$Token|Sacrifice & Type$Beast Oracle:I — Create a 3/3 green Beast creature token.\nII — You may sacrifice a creature. If you do, search your library for a creature or basic land card, reveal it, put it into your hand, then shuffle.\nIII — Up to two target creatures each get +2/+2 and gain trample until end of turn diff --git a/forge-gui/res/cardsfolder/t/the_keeper_of_the_yellow_hat.txt b/forge-gui/res/cardsfolder/t/the_keeper_of_the_yellow_hat.txt index 5528ebbb499..8bcd1969784 100644 --- a/forge-gui/res/cardsfolder/t/the_keeper_of_the_yellow_hat.txt +++ b/forge-gui/res/cardsfolder/t/the_keeper_of_the_yellow_hat.txt @@ -3,7 +3,7 @@ ManaCost:W U Types:Legendary Creature Human Wizard PT:1/1 S:Mode$ CantBeCast | ValidCard$ Card.Self | EffectZone$ All | Caster$ Player.Active | CheckSVar$ Count$YourTurns | SVarCompare$ LE7 | Description$ You can't cast CARDNAME during your first seven turns of the game. (Keep track if you're playing with this!) -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a legendary artifact equipment token named Yellow Hat with equip {2} and "Equiped creature gets +4/+4 and gains lifelink." +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a legendary artifact equipment token named Yellow Hat with equip {2} and "Equipped creature gets +4/+4 and gains lifelink." SVar:TrigToken:DB$ Token | TokenScript$ yellow_hat DeckHas:Ability$Token & Type$Artifact|Equipment -Oracle:You can't cast Keeper of the Yellow Hat during your first seven turns of the game. (Keep track if you're playing with this!)\nWhen The Keeper of the Yellow Hat enters the battlefield, create a legendary artifact equipment token named Yellow Hat with equip {2} and "Equiped creature gets +4/+4 and gains lifelink." +Oracle:You can't cast Keeper of the Yellow Hat during your first seven turns of the game. (Keep track if you're playing with this!)\nWhen The Keeper of the Yellow Hat enters the battlefield, create a legendary artifact equipment token named Yellow Hat with equip {2} and "Equipped creature gets +4/+4 and gains lifelink." diff --git a/forge-gui/res/cardsfolder/t/the_marvelous_scientist.txt b/forge-gui/res/cardsfolder/t/the_marvelous_scientist.txt index f64fab5abc6..1ca81f60091 100644 --- a/forge-gui/res/cardsfolder/t/the_marvelous_scientist.txt +++ b/forge-gui/res/cardsfolder/t/the_marvelous_scientist.txt @@ -3,15 +3,15 @@ ManaCost:1 U R Types:Legendary Creature Human Wizard PT:2/2 K:ETBReplacement:Other:SiegeChoice -SVar:SiegeChoice:DB$ GenericChoice | Choices$ Cosplay,Science | Defined$ You | SetChosenMode$ True | ShowChoice$ ExceptSelf | SpellDescription$ As this creature enters the battlefield, choose cosplay or science. +SVar:SiegeChoice:DB$ GenericChoice | Choices$ Cosplay,Science | Defined$ You | SetChosenMode$ True | ShowChoice$ ExceptSelf | SpellDescription$ As CARDNAME enters the battlefield, choose cosplay or science. SVar:Cosplay:DB$ Pump | SpellDescription$ Cosplay SVar:Science:DB$ Pump | SpellDescription$ Science -S:Mode$ Continuous | Affected$ Card.Self+ChosenModeCosplay | AddTrigger$ CosplayTrigger | Description$ • Cosplay — Whenever you cast a creature or planeswalker spell, this creature's base power and toughness each become equal to that spell's mana value until end of turn. -S:Mode$ Continuous | Affected$ Card.Self+ChosenModeScience | AddTrigger$ ScienceTrigger | Description$ • Science — Whenever you cast an instant or sorcery spell, this creature deals 2 damage to each opponent. -SVar:CosplayTrigger:Mode$ SpellCast | ValidCard$ Creature,Planeswalker | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigAnimate | TriggerDescription$ Whenever you cast a creature or planeswalker spell, this creature's base power and toughness each become equal to that spell's mana value until end of turn. +S:Mode$ Continuous | Affected$ Card.Self+ChosenModeCosplay | AddTrigger$ CosplayTrigger | Description$ • Cosplay — Whenever you cast a creature or planeswalker spell, CARDNAME's base power and toughness each become equal to that spell's mana value until end of turn. +S:Mode$ Continuous | Affected$ Card.Self+ChosenModeScience | AddTrigger$ ScienceTrigger | Description$ • Science — Whenever you cast an instant or sorcery spell, CARDNAME deals 2 damage to each opponent. +SVar:CosplayTrigger:Mode$ SpellCast | ValidCard$ Creature,Planeswalker | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigAnimate | TriggerDescription$ Whenever you cast a creature or planeswalker spell, CARDNAME's base power and toughness each become equal to that spell's mana value until end of turn. SVar:TrigAnimate:DB$ Animate | Power$ X | Toughness$ X SVar:X:TriggeredStackInstance$CardManaCostLKI -SVar:ScienceTrigger:Mode$ SpellCast | ValidCard$ Instant,Sorcery | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Whenever you cast an instant or sorcery spell, this creature deals 2 damage to each opponent. +SVar:ScienceTrigger:Mode$ SpellCast | ValidCard$ Instant,Sorcery | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Whenever you cast an instant or sorcery spell, CARDNAME deals 2 damage to each opponent. SVar:TrigDamage:DB$ DealDamage | Defined$ Player.Opponent | NumDmg$ 2 DeckHints:Type$Instant|Sorcery -Oracle:As this creature enters the battlefield, choose cosplay or science.\n• Cosplay — Whenever you cast a creature or planeswalker spell, this creature's base power and toughness each become equal to that spell's mana value until end of turn.\n• Science — Whenever you cast an instant or sorcery spell, this creature deals 2 damage to each opponent. \ No newline at end of file +Oracle:As this creature enters the battlefield, choose cosplay or science.\n• Cosplay — Whenever you cast a creature or planeswalker spell, this creature's base power and toughness each become equal to that spell's mana value until end of turn.\n• Science — Whenever you cast an instant or sorcery spell, this creature deals 2 damage to each opponent. diff --git a/forge-gui/res/cardsfolder/t/the_pit.txt b/forge-gui/res/cardsfolder/t/the_pit.txt index 6e1f1127b71..be217ad856b 100644 --- a/forge-gui/res/cardsfolder/t/the_pit.txt +++ b/forge-gui/res/cardsfolder/t/the_pit.txt @@ -3,7 +3,7 @@ ManaCost:no cost Types:Plane The Abyss T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ TrigChoice | TriggerZones$ Command | TriggerDescription$ When you planeswalk to CARDNAME, each player creates their choice of a 3/3 white Angel creature token with flying or a 6/6 black Demon creature token with flying, trample, and "At the beginning of your upkeep, sacrifice another creature. If you can't, this creature deals 6 damage to you." SVar:TrigChoice:DB$ GenericChoice | Defined$ Player | Choices$ Angel,Demon | TempRemember$ Chooser | ChangeZoneTable$ True -SVar:Angel:DB$ Token | TokenScript$ w_3_3_angel_flying | TokenOwner$ Remembered | SpellDescription$ Create a 3/3 white Angel creature token with flying +SVar:Angel:DB$ Token | TokenScript$ w_3_3_angel_flying | TokenOwner$ Remembered | SpellDescription$ Create a 3/3 white Angel creature token with flying. SVar:Demon:DB$ Token | TokenScript$ b_6_6_demon_flying_trample_aristocrat | TokenOwner$ Remembered | SpellDescription$ a 6/6 black Demon creature token with flying, trample, and "At the beginning of your upkeep, sacrifice another creature. If you can't, this creature deals 6 damage to you." T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, each player sacrifices a nonartifact creature. SVar:RolledChaos:DB$ Sacrifice | SacValid$ Creature.nonArtifact | Defined$ Player diff --git a/forge-gui/res/cardsfolder/t/the_pride_of_hull_clade.txt b/forge-gui/res/cardsfolder/t/the_pride_of_hull_clade.txt index 9aa9b7d3d18..847b64adcb4 100644 --- a/forge-gui/res/cardsfolder/t/the_pride_of_hull_clade.txt +++ b/forge-gui/res/cardsfolder/t/the_pride_of_hull_clade.txt @@ -7,9 +7,9 @@ S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | EffectZone SVar:X:Count$Valid Creature.YouCtrl$SumToughness A:AB$ Pump | Cost$ 2 U U | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | NumAtt$ 1 | SubAbility$ DBEffect | SpellDescription$ Until end of turn, target creature you control gets +1/+0, gains "Whenever this creature deals combat damage to a player, draw cards equal to its toughness," and can attack as though it didn't have defender. SVar:DBEffect:DB$ Effect | RememberObjects$ Targeted | Triggers$ TrigDamage | StaticAbilities$ CanAttack | ForgetOnMoved$ Battlefield | SubAbility$ DBAnimate -SVar:CanAttack:Mode$ CanAttackDefender | ValidCard$ Card.IsRemembered | Description$ This creature can attack as though it didn't have defender. +SVar:CanAttack:Mode$ CanAttackDefender | ValidCard$ Card.IsRemembered | Description$ CARDNAME can attack as though it didn't have defender. SVar:DBAnimate:DB$ Animate | Defined$ Targeted | Triggers$ TrigDamage -SVar:TrigDamage:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | Execute$ TrigDraw | CombatDamage$ True | TriggerDescription$ Whenever this creature deals combat damage to a player, draw cards equal to its toughness +SVar:TrigDamage:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | Execute$ TrigDraw | CombatDamage$ True | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, draw cards equal to its toughness. SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ Y SVar:Y:Count$CardToughness DeckHints:Type$Wall|Treefolk & Keyword$Defender diff --git a/forge-gui/res/cardsfolder/t/the_seventh_doctor.txt b/forge-gui/res/cardsfolder/t/the_seventh_doctor.txt index cad8f86da83..aab4171a231 100644 --- a/forge-gui/res/cardsfolder/t/the_seventh_doctor.txt +++ b/forge-gui/res/cardsfolder/t/the_seventh_doctor.txt @@ -5,8 +5,8 @@ PT:3/6 T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigGuess | TriggerZones$ Battlefield | TriggerDescription$ When CARDNAME attacks, choose a card in your hand. Defending player guesses whether that card's mana value is greater than the number of artifacts you control. If they guessed wrong, you may cast it without paying its mana cost. If you don't cast a spell this way, investigate. (Create a Clue token. It's an artifact with "{2}, Sacrifice this artifact: Draw a card.") SVar:TrigGuess:DB$ ChooseCard | ChoiceZone$ Hand | Mandatory$ True | Defined$ You | Choices$ Card.YouOwn | AILogic$ RandomNonLand | Guess$ True | SubAbility$ DBGuess SVar:DBGuess:DB$ GenericChoice | Defined$ TriggeredDefendingPlayer | Choices$ GuessGreaterArtifacts,GuessNotGreaterArtifacts | AILogic$ Random | ShowChoice$ True -SVar:GuessGreaterArtifacts:DB$ Play | Controller$ You | Defined$ ChosenCard | Optional$ True | WithoutManaCost$ True | ConditionDefined$ ChosenCard | ConditionPresent$ Card.cmcLEX+nonLand | RememberPlayed$ True | ConditionCompare$ GE1 | SubAbility$ DBInvestigate | SpellDescription$ That card's mana value is greater the number of artifact attacking player controls -SVar:GuessNotGreaterArtifacts:DB$ Play | Controller$ You | Defined$ ChosenCard | Optional$ True | WithoutManaCost$ True | ValidSA$ Spell | ConditionDefined$ ChosenCard | ConditionPresent$ Card.cmcGTX+nonLand | RememberPlayed$ True | SubAbility$ DBInvestigate | ConditionCompare$ GE1 | SpellDescription$ That card's mana value is not greater than the number of artifact attacking player controls +SVar:GuessGreaterArtifacts:DB$ Play | Controller$ You | Defined$ ChosenCard | Optional$ True | WithoutManaCost$ True | ConditionDefined$ ChosenCard | ConditionPresent$ Card.cmcLEX+nonLand | RememberPlayed$ True | ConditionCompare$ GE1 | SubAbility$ DBInvestigate | SpellDescription$ The chosen card's mana value is greater the number of artifacts attacking player controls. +SVar:GuessNotGreaterArtifacts:DB$ Play | Controller$ You | Defined$ ChosenCard | Optional$ True | WithoutManaCost$ True | ValidSA$ Spell | ConditionDefined$ ChosenCard | ConditionPresent$ Card.cmcGTX+nonLand | RememberPlayed$ True | SubAbility$ DBInvestigate | ConditionCompare$ GE1 | SpellDescription$ The chosen card's mana value is not greater than the number of artifacts attacking player controls. SVar:DBInvestigate:DB$ Investigate | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ0 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True SVar:X:Count$Valid Artifact.YouCtrl diff --git a/forge-gui/res/cardsfolder/t/then_dreadmaws_ate_everyone.txt b/forge-gui/res/cardsfolder/t/then_dreadmaws_ate_everyone.txt index 00d7fde5d51..b1dd58703cb 100644 --- a/forge-gui/res/cardsfolder/t/then_dreadmaws_ate_everyone.txt +++ b/forge-gui/res/cardsfolder/t/then_dreadmaws_ate_everyone.txt @@ -1,7 +1,7 @@ Name:Then, Dreadmaws Ate Everyone ManaCost:X 4 G G Types:Sorcery -A:SP$ Token | TokenAmount$ X | TokenScript$ colossal_dreadmaw | TokenOwner$ You | SpellDescription$ Create X 6/6 green Dinosaur creature tokens with trample named Colossal Dreadmaw. +A:SP$ Token | TokenAmount$ X | TokenScript$ colossal_dreadmaw | TokenOwner$ You | SpellDescription$ Create X 6/6 green Dinosaur creature tokens with trample named Colossal Dreadmaw. SVar:X:Count$xPaid DeckHas:Ability$Token & Type$Dinosaur -Oracle:Create X 6/6 green Dinosaur creature tokens with trample named Colossal Dreadmaw. +Oracle:Create X 6/6 green Dinosaur creature tokens with trample named Colossal Dreadmaw. diff --git a/forge-gui/res/cardsfolder/t/thornplate_intimidator.txt b/forge-gui/res/cardsfolder/t/thornplate_intimidator.txt index ea07aad854b..1e8291913e0 100644 --- a/forge-gui/res/cardsfolder/t/thornplate_intimidator.txt +++ b/forge-gui/res/cardsfolder/t/thornplate_intimidator.txt @@ -5,8 +5,8 @@ PT:4/3 K:Offspring:3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigGenericChoice | TriggerDescription$ When this creature enters, target opponent loses 3 life unless they sacrifice a nonland permanent or discard a card. SVar:TrigGenericChoice:DB$ GenericChoice | ValidTgts$ Opponent | Choices$ PaySac,PayDiscard | FallbackAbility$ LoseLifeFallback | AILogic$ PayUnlessCost -SVar:PaySac:DB$ LoseLife | LifeAmount$ 3 | Defined$ Targeted | UnlessCost$ Sac<1/Permanent.nonland/nonland permanent> | UnlessPayer$ Targeted | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you sacrifice a nonland permanent -SVar:PayDiscard:DB$ LoseLife | LifeAmount$ 3 | Defined$ Targeted | UnlessCost$ Discard<1/Card> | UnlessPayer$ Targeted | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you discard a card +SVar:PaySac:DB$ LoseLife | LifeAmount$ 3 | Defined$ Targeted | UnlessCost$ Sac<1/Permanent.nonland/nonland permanent> | UnlessPayer$ Targeted | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you sacrifice a nonland permanent. +SVar:PayDiscard:DB$ LoseLife | LifeAmount$ 3 | Defined$ Targeted | UnlessCost$ Discard<1/Card> | UnlessPayer$ Targeted | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you discard a card. # TODO: Most likely the ChooseGenericEffect code can be simplified somehow to avoid the necessity of having a dedicated fallback ability SVar:LoseLifeFallback:DB$ LoseLife | Defined$ Targeted | LifeAmount$ 3 Oracle:Offspring {3} (You may pay an additional {3} as you cast this spell. If you do, when this creature enters, create a 1/1 token copy of it.)\nWhen this creature enters, target opponent loses 3 life unless they sacrifice a nonland permanent or discard a card. diff --git a/forge-gui/res/cardsfolder/t/thrash_threat.txt b/forge-gui/res/cardsfolder/t/thrash_threat.txt index 04d188292ee..b4d73beea07 100644 --- a/forge-gui/res/cardsfolder/t/thrash_threat.txt +++ b/forge-gui/res/cardsfolder/t/thrash_threat.txt @@ -1,7 +1,7 @@ Name:Thrash ManaCost:RG RG Types:Instant -A:SP$ Pump | ValidTgts$ Creature.YouCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you control | SubAbility$ SoulsDamage | StackDescription$ None | SpellDescription$ Target creature you control deals damage equal to its power to target creature you don't control +A:SP$ Pump | ValidTgts$ Creature.YouCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you control | SubAbility$ SoulsDamage | StackDescription$ None | SpellDescription$ Target creature you control deals damage equal to its power to target creature you don't control. SVar:SoulsDamage:DB$ DealDamage | ValidTgts$ Creature.YouDontCtrl,Planeswalker.YouDontCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature or planeswalker you don't control | NumDmg$ X | DamageSource$ ParentTarget SVar:X:ParentTargeted$CardPower AlternateMode:Split diff --git a/forge-gui/res/cardsfolder/t/throne_of_geth.txt b/forge-gui/res/cardsfolder/t/throne_of_geth.txt index 23eadd5c613..3cd831093e8 100644 --- a/forge-gui/res/cardsfolder/t/throne_of_geth.txt +++ b/forge-gui/res/cardsfolder/t/throne_of_geth.txt @@ -1,7 +1,7 @@ Name:Throne of Geth ManaCost:2 Types:Artifact -A:AB$ Proliferate | Cost$ T Sac<1/Artifact> | SpellDescription$ Proliferate +A:AB$ Proliferate | Cost$ T Sac<1/Artifact> | SpellDescription$ Proliferate. DeckHas:Ability$Proliferate DeckNeeds:Ability$Counters SVar:AIPreference:SacCost$Artifact.token,Artifact.cmcLE2 diff --git a/forge-gui/res/cardsfolder/t/thrull_wizard.txt b/forge-gui/res/cardsfolder/t/thrull_wizard.txt index 076acfcd113..52dbb48e3b3 100644 --- a/forge-gui/res/cardsfolder/t/thrull_wizard.txt +++ b/forge-gui/res/cardsfolder/t/thrull_wizard.txt @@ -3,8 +3,8 @@ ManaCost:2 B Types:Creature Thrull Wizard PT:1/1 A:AB$ GenericChoice | Cost$ 1 B | TgtPrompt$ Select target black spell | TargetType$ Spell | ValidTgts$ Card.Black | TgtZone$ Stack | Choices$ PayB,Pay3 | Defined$ TargetedController | AILogic$ PayUnlessCost | SpellDescription$ Counter target black spell unless that spell's controller pays {B} or {3}. -SVar:PayB:DB$ Counter | Defined$ Targeted | UnlessCost$ B | SpellDescription$ Counter spell unless you pay B -SVar:Pay3:DB$ Counter | Defined$ Targeted | UnlessCost$ 3 | SpellDescription$ Counter spell unless you pay 3 +SVar:PayB:DB$ Counter | Defined$ Targeted | UnlessCost$ B | SpellDescription$ Counter spell unless you pay {B}. +SVar:Pay3:DB$ Counter | Defined$ Targeted | UnlessCost$ 3 | SpellDescription$ Counter spell unless you pay {3}. AI:RemoveDeck:Random AI:RemoveDeck:All Oracle:{1}{B}: Counter target black spell unless that spell's controller pays {B} or {3}. diff --git a/forge-gui/res/cardsfolder/t/tome_shredder.txt b/forge-gui/res/cardsfolder/t/tome_shredder.txt index ec51141bbff..5a6eeb6a872 100644 --- a/forge-gui/res/cardsfolder/t/tome_shredder.txt +++ b/forge-gui/res/cardsfolder/t/tome_shredder.txt @@ -3,6 +3,6 @@ ManaCost:2 R Types:Creature Wolf PT:2/2 K:Haste -A:AB$ PutCounter | Cost$ T ExileFromGrave<1/Instant;Sorcery> | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Exile an instant or sorcery card from your graveyard: Put a +1/+1 counter on CARDNAME. +A:AB$ PutCounter | Cost$ T ExileFromGrave<1/Instant;Sorcery> | CostDesc$ {T}, Exile an instant or sorcery card from your graveyard: | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Put a +1/+1 counter on CARDNAME. DeckHas:Ability$Counters Oracle:Haste\n{T}, Exile an instant or sorcery card from your graveyard: Put a +1/+1 counter on Tome Shredder. diff --git a/forge-gui/res/cardsfolder/t/torgaar_famine_incarnate.txt b/forge-gui/res/cardsfolder/t/torgaar_famine_incarnate.txt index 5389d610ebd..1e6358925c4 100644 --- a/forge-gui/res/cardsfolder/t/torgaar_famine_incarnate.txt +++ b/forge-gui/res/cardsfolder/t/torgaar_famine_incarnate.txt @@ -2,8 +2,8 @@ Name:Torgaar, Famine Incarnate ManaCost:6 B B Types:Legendary Creature Avatar PT:7/6 -A:SP$ PermanentCreature | Cost$ 6 B B Sac | AILogic$ SacToReduceCost -S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Y | EffectZone$ All | Relative$ True | Description$ As an additional cost to cast this spell, you may sacrifice any number of creatures. This spell costs {2} less to cast for each creature sacrificed this way. +A:SP$ PermanentCreature | Cost$ 6 B B Sac | AILogic$ SacToReduceCost | AdditionalDesc$ This spell costs {2} less to cast for each creature sacrificed this way. +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Y | EffectZone$ All | Relative$ True SVar:X:Count$xPaid SVar:Y:SVar$X/Times.2 SVar:AIPreference:SacCost$Creature.token,Creature.cmcLE2 diff --git a/forge-gui/res/cardsfolder/t/torment_of_hailfire.txt b/forge-gui/res/cardsfolder/t/torment_of_hailfire.txt index bc29335dd19..b1a959e9d72 100644 --- a/forge-gui/res/cardsfolder/t/torment_of_hailfire.txt +++ b/forge-gui/res/cardsfolder/t/torment_of_hailfire.txt @@ -3,8 +3,8 @@ ManaCost:X B B Types:Sorcery A:SP$ Repeat | MaxRepeat$ X | RepeatSubAbility$ RepeatTorment | AILogic$ MaxX | StackDescription$ SpellDescription | SpellDescription$ Repeat the following process X times. Each opponent loses 3 life unless that player sacrifices a nonland permanent or discards a card. SVar:RepeatTorment:DB$ GenericChoice | Defined$ Opponent | TempRemember$ Chooser | Choices$ SacNonland,Discard | FallbackAbility$ LoseLifeFallback | AILogic$ PayUnlessCost -SVar:Discard:DB$ LoseLife | Defined$ Remembered | LifeAmount$ 3 | UnlessCost$ Discard<1/Card> | UnlessPayer$ Remembered | SpellDescription$ You lose 3 life unless you discard a card -SVar:SacNonland:DB$ LoseLife | Defined$ Remembered | LifeAmount$ 3 | UnlessCost$ Sac<1/Permanent.nonLand/nonland permanent> | UnlessPayer$ Remembered | SpellDescription$ You lose 3 life unless you sacrifice a nonland permanent +SVar:Discard:DB$ LoseLife | Defined$ Remembered | LifeAmount$ 3 | UnlessCost$ Discard<1/Card> | UnlessPayer$ Remembered | SpellDescription$ You lose 3 life unless you discard a card. +SVar:SacNonland:DB$ LoseLife | Defined$ Remembered | LifeAmount$ 3 | UnlessCost$ Sac<1/Permanent.nonLand/nonland permanent> | UnlessPayer$ Remembered | SpellDescription$ You lose 3 life unless you sacrifice a nonland permanent. SVar:LoseLifeFallback:DB$ LoseLife | Defined$ Remembered | LifeAmount$ 3 SVar:X:Count$xPaid SVar:AIPreference:SacCost$Permanent.nonLand | DiscardCost$Card diff --git a/forge-gui/res/cardsfolder/t/torment_of_scarabs.txt b/forge-gui/res/cardsfolder/t/torment_of_scarabs.txt index 699066c3ec3..3063a30aa1b 100644 --- a/forge-gui/res/cardsfolder/t/torment_of_scarabs.txt +++ b/forge-gui/res/cardsfolder/t/torment_of_scarabs.txt @@ -5,8 +5,8 @@ K:Enchant player A:SP$ Attach | Cost$ 3 B | ValidTgts$ Player | AILogic$ Curse T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player.EnchantedBy | TriggerZones$ Battlefield | Execute$ TrigGenericChoice | TriggerDescription$ At the beginning of enchanted player's upkeep, that player loses 3 life unless they sacrifice a nonland permanent or discard a card. SVar:TrigGenericChoice:DB$ GenericChoice | Choices$ PaySac,PayDiscard | Defined$ TriggeredPlayer | FallbackAbility$ LoseLifeFallback | AILogic$ PayUnlessCost -SVar:PaySac:DB$ LoseLife | LifeAmount$ 3 | Defined$ TriggeredPlayer | UnlessCost$ Sac<1/Permanent.nonland/nonland permanent> | UnlessPayer$ TriggeredPlayer | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you sacrifice a nonland permanent -SVar:PayDiscard:DB$ LoseLife | LifeAmount$ 3 | Defined$ TriggeredPlayer | UnlessCost$ Discard<1/Card> | UnlessPayer$ TriggeredPlayer | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you discard a card +SVar:PaySac:DB$ LoseLife | LifeAmount$ 3 | Defined$ TriggeredPlayer | UnlessCost$ Sac<1/Permanent.nonland/nonland permanent> | UnlessPayer$ TriggeredPlayer | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you sacrifice a nonland permanent. +SVar:PayDiscard:DB$ LoseLife | LifeAmount$ 3 | Defined$ TriggeredPlayer | UnlessCost$ Discard<1/Card> | UnlessPayer$ TriggeredPlayer | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you discard a card. # TODO: Most likely the ChooseGenericEffect code can be simplified somehow to avoid the necessity of having a dedicated fallback ability SVar:LoseLifeFallback:DB$ LoseLife | Defined$ Player.IsRemembered | LifeAmount$ 3 Oracle:Enchant player\nAt the beginning of enchanted player's upkeep, that player loses 3 life unless they sacrifice a nonland permanent or discard a card. diff --git a/forge-gui/res/cardsfolder/t/torment_of_venom.txt b/forge-gui/res/cardsfolder/t/torment_of_venom.txt index 597393a52c5..04044a30d52 100644 --- a/forge-gui/res/cardsfolder/t/torment_of_venom.txt +++ b/forge-gui/res/cardsfolder/t/torment_of_venom.txt @@ -3,8 +3,8 @@ ManaCost:2 B B Types:Instant A:SP$ PutCounter | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ M1M1 | CounterNum$ 3 | IsCurse$ True | RememberTargets$ True | SubAbility$ DBGenericChoice | SpellDescription$ Put three -1/-1 counters on target creature. Its controller loses 3 life unless they sacrifice another nonland permanent or discards a card. SVar:DBGenericChoice:DB$ GenericChoice | Choices$ PaySac,PayDiscard | Defined$ TargetedController | FallbackAbility$ LoseLifeFallback | AILogic$ PayUnlessCost | SubAbility$ DBCleanup -SVar:PaySac:DB$ LoseLife | LifeAmount$ 3 | Defined$ TargetedController | UnlessCost$ Sac<1/Permanent.IsNotRemembered+nonland/another nonland permanent> | UnlessPayer$ TargetedController | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you sacrifice another nonland permanent -SVar:PayDiscard:DB$ LoseLife | LifeAmount$ 3 | Defined$ TargetedController | UnlessCost$ Discard<1/Card> | UnlessPayer$ TargetedController | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you discard a card +SVar:PaySac:DB$ LoseLife | LifeAmount$ 3 | Defined$ TargetedController | UnlessCost$ Sac<1/Permanent.IsNotRemembered+nonland/another nonland permanent> | UnlessPayer$ TargetedController | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you sacrifice another nonland permanent. +SVar:PayDiscard:DB$ LoseLife | LifeAmount$ 3 | Defined$ TargetedController | UnlessCost$ Discard<1/Card> | UnlessPayer$ TargetedController | UnlessAI$ LifeLE3 | SpellDescription$ You lose 3 life unless you discard a card. # TODO: Most likely the ChooseGenericEffect code can be simplified somehow to avoid the necessity of having a dedicated fallback ability SVar:LoseLifeFallback:DB$ LoseLife | Defined$ Player.IsRemembered | LifeAmount$ 3 SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/t/tower_above.txt b/forge-gui/res/cardsfolder/t/tower_above.txt index 945b8da3805..fc4888cfb1c 100644 --- a/forge-gui/res/cardsfolder/t/tower_above.txt +++ b/forge-gui/res/cardsfolder/t/tower_above.txt @@ -3,6 +3,6 @@ ManaCost:2G 2G 2G Types:Sorcery A:SP$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ 4 | NumDef$ 4 | KW$ Trample & Wither | SubAbility$ DBAnimate | SpellDescription$ Until end of turn, target creature gets +4/+4 and gains trample, wither, and "When this creature attacks, target creature blocks it this turn if able." (It deals damage to creatures in the form of -1/-1 counters.) SVar:DBAnimate:DB$ Animate | Defined$ Targeted | Triggers$ TrigAttack -SVar:TrigAttack:Mode$ Attacks | ValidCard$ Creature.Self | Execute$ TowerAboveTrigBlock | TriggerDescription$ Whenever CARDNAME attacks, target creature blocks it this turn if able +SVar:TrigAttack:Mode$ Attacks | ValidCard$ Creature.Self | Execute$ TowerAboveTrigBlock | TriggerDescription$ Whenever CARDNAME attacks, target creature blocks it this turn if able. SVar:TowerAboveTrigBlock:DB$ MustBlock | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ Target creature blocks CARDNAME this turn if able. Oracle:({2/G} can be paid with any two mana or with {G}. This card's mana value is 6.)\nUntil end of turn, target creature gets +4/+4 and gains trample, wither, and "When this creature attacks, target creature blocks it this turn if able." (It deals damage to creatures in the form of -1/-1 counters.) diff --git a/forge-gui/res/cardsfolder/t/traverse_valley.txt b/forge-gui/res/cardsfolder/t/traverse_valley.txt index 95cb306843b..c28a7d50459 100644 --- a/forge-gui/res/cardsfolder/t/traverse_valley.txt +++ b/forge-gui/res/cardsfolder/t/traverse_valley.txt @@ -1,8 +1,8 @@ Name:Traverse Valley ManaCost:G Types:Sorcery -K:Kicker:Forage -A:SP$ Seek | Type$ Land.nonBasic | RememberFound$ True | SubAbility$ DBChangeZone | SpellDescription$ Seek a nonbasic land card. +K:Kicker:Forage +A:SP$ Seek | Type$ Land.nonBasic | RememberFound$ True | SubAbility$ DBChangeZone | SpellDescription$ Seek a nonbasic land card. SVar:DBChangeZone:DB$ ChangeZone | Defined$ Remembered | Tapped$ True | Condition$ Kicked | Origin$ Hand | Destination$ Battlefield | SubAbility$ DBCleanup | SpellDescription$ If this spell was kicked, put that card onto the battlefield tapped. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:Kicker — Forage.\nSeek a nonbasic land card. If this spell was kicked, put that card onto the battlefield tapped. diff --git a/forge-gui/res/cardsfolder/t/treebeard_gracious_host.txt b/forge-gui/res/cardsfolder/t/treebeard_gracious_host.txt index f1db245e531..ef355c2e44e 100644 --- a/forge-gui/res/cardsfolder/t/treebeard_gracious_host.txt +++ b/forge-gui/res/cardsfolder/t/treebeard_gracious_host.txt @@ -6,7 +6,7 @@ K:Trample K:Ward:2 T:Mode$ ChangesZone | ValidCard$ Card.Self | Destination$ Battlefield | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters, create two Food tokens. SVar:TrigToken:DB$ Token | TokenScript$ c_a_food_sac | TokenAmount$ 2 -T:Mode$ LifeGained | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever you gain life, put that many +1/+1 counters on target Halfling or Treefolk +T:Mode$ LifeGained | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever you gain life, put that many +1/+1 counters on target Halfling or Treefolk. SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature.Halfling,Creature.Treefolk | TgtPrompt$ Select target Halfling or Treefolk | CounterType$ P1P1 | CounterNum$ X SVar:X:TriggerCount$LifeAmount DeckHints:Ability$Counters|LifeGain|Token diff --git a/forge-gui/res/cardsfolder/t/trumpet_blast.txt b/forge-gui/res/cardsfolder/t/trumpet_blast.txt index 663053d6200..983d6403ba5 100644 --- a/forge-gui/res/cardsfolder/t/trumpet_blast.txt +++ b/forge-gui/res/cardsfolder/t/trumpet_blast.txt @@ -1,5 +1,5 @@ Name:Trumpet Blast ManaCost:2 R Types:Instant -A:SP$ PumpAll | ValidCards$ Creature.attacking | NumAtt$ 2 | SpellDescription$ Attacking creatures get +2/+0 until end of turn +A:SP$ PumpAll | ValidCards$ Creature.attacking | NumAtt$ 2 | SpellDescription$ Attacking creatures get +2/+0 until end of turn. Oracle:Attacking creatures get +2/+0 until end of turn. diff --git a/forge-gui/res/cardsfolder/t/tunnel_of_love.txt b/forge-gui/res/cardsfolder/t/tunnel_of_love.txt index c5c894611d2..a54c5d6f54e 100644 --- a/forge-gui/res/cardsfolder/t/tunnel_of_love.txt +++ b/forge-gui/res/cardsfolder/t/tunnel_of_love.txt @@ -8,9 +8,9 @@ SVar:TrigChoose:DB$ ChoosePlayer | Defined$ You | Choices$ Opponent | AILogic$ C SVar:DBChoose:DB$ ChooseCard | Defined$ ChosenPlayer | RememberChosen$ True | Choices$ Creature.ControlledBy ChosenPlayer | Amount$ 1 | SubAbility$ DBChooseYou SVar:DBChooseYou:DB$ ChooseCard | Defined$ You | RememberChosen$ True | Choices$ Creature.YouCtrl | Mandatory$ True | Amount$ 1 | SubAbility$ DBGenericChoice SVar:DBGenericChoice:DB$ GenericChoice | Choices$ DBBlink,DBFight -SVar:DBBlink:DB$ ChangeZone | Defined$ Remembered | Origin$ Battlefield | Destination$ Exile | SubAbility$ DelTrig | RememberChanged$ True | SpellDescription$ You may exile the chosen creatures. If you do, return them to the battlefield under their owners’ control at the beginning of the next end step. +SVar:DBBlink:DB$ ChangeZone | Defined$ Remembered | Origin$ Battlefield | Destination$ Exile | SubAbility$ DelTrig | RememberChanged$ True | SpellDescription$ You may exile the chosen creatures. If you do, return them to the battlefield under their owners' control at the beginning of the next end step. SVar:DelTrig:DB$ DelayedTrigger | RememberObjects$ Remembered | Mode$ Phase | Phase$ End of Turn | Execute$ TrigReturn | SubAbility$ DBCleanup | TriggerDescription$ Return exiled card to the battlefield. -SVar:TrigReturn:DB$ ChangeZone | Defined$ DelayTriggerRememberedLKI | Origin$ Exile | Destination$ Battlefield +SVar:TrigReturn:DB$ ChangeZone | Defined$ DelayTriggerRememberedLKI | Origin$ Exile | Destination$ Battlefield SVar:DBFight:DB$ Fight | Defined$ Remembered | SubAbility$ DBCleanup | SpellDescription$ The chosen creatures fight each other. SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True | ClearRemembered$ True Oracle:Visit — Choose an opponent. They choose a creature they control, then you choose a creature you control. You may exile the chosen creatures. If you do, return them to the battlefield under their owners' control at the beginning of the next end step. Otherwise, the chosen creatures fight each other. diff --git a/forge-gui/res/cardsfolder/t/two_streams_facility.txt b/forge-gui/res/cardsfolder/t/two_streams_facility.txt index 365b7bab924..4ba55ac93c9 100644 --- a/forge-gui/res/cardsfolder/t/two_streams_facility.txt +++ b/forge-gui/res/cardsfolder/t/two_streams_facility.txt @@ -4,8 +4,8 @@ Types:Plane Apalapucia T:Mode$ PlaneswalkedTo | ValidCard$ Card.Self | Execute$ TrigChoose | TriggerDescription$ Whenever you planeswalk to CARDNAME and at the beginning of the first upkeep of the game, each player chooses green anchor or red waterfall. T:Mode$ Phase | FirstUpkeepThisGame$ True | Execute$ TrigChoose | TriggerZones$ Command | Secondary$ True | TriggerDescription$ Whenever you planeswalk to CARDNAME and at the beginning of the first upkeep of the game, each player chooses green anchor or red waterfall. SVar:TrigChoose:DB$ GenericChoice | Defined$ Player | TempRemember$ Chooser | Choices$ GreenAnchor,RedWaterfall | ShowChoice$ ExceptSelf -SVar:GreenAnchor:DB$ Pump | Defined$ Remembered | NoteCards$ Self | NoteCardsFor$ GreenAnchor | SpellDescription$ Green Anchor (You may play an additional land during each of your turns) -SVar:RedWaterfall:DB$ Pump | Defined$ Remembered | NoteCards$ Self | NoteCardsFor$ RedWaterfall | SpellDescription$ Red Waterfall (Creatures you control get +2/+0 and have haste) +SVar:GreenAnchor:DB$ Pump | Defined$ Remembered | NoteCards$ Self | NoteCardsFor$ GreenAnchor | SpellDescription$ Green Anchor (You may play an additional land during each of your turns.) +SVar:RedWaterfall:DB$ Pump | Defined$ Remembered | NoteCards$ Self | NoteCardsFor$ RedWaterfall | SpellDescription$ Red Waterfall (Creatures you control get +2/+0 and have haste.) S:Mode$ Continuous | EffectZone$ Command | Affected$ Player.NotedForGreenAnchor | AdjustLandPlays$ 1 | Description$ Each player who last chose green anchor may play an additional land during each of their turns. S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.ControlledBy Player.NotedForRedWaterfall | AddPower$ 2 | AddKeyword$ Haste | Description$ Creatures controlled by players who last chose red waterfall get +2/+0 and have haste. T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ TrigSwitch | TriggerDescription$ Whenever chaos ensues, each player who last chose green anchor chooses red waterfall, and vice versa. diff --git a/forge-gui/res/cardsfolder/u/unexpected_allies.txt b/forge-gui/res/cardsfolder/u/unexpected_allies.txt index 5afb6fc8e38..d949829e449 100644 --- a/forge-gui/res/cardsfolder/u/unexpected_allies.txt +++ b/forge-gui/res/cardsfolder/u/unexpected_allies.txt @@ -5,5 +5,5 @@ A:SP$ Pump | ValidTgts$ Creature.YouCtrl+nonToken | TgtPrompt$ Select target non SVar:TrigEffect:DB$ Pump | ConditionCheckSVar$ X | Defined$ Targeted | KW$ First Strike SVar:X:Count$Valid Creature.NotDefinedTargeted+YouCtrl+sharesNameWith Targeted/Plus.Y SVar:Y:Count$ValidGraveyard Creature.YouOwn+sharesNameWith Targeted -DeckHas:Keyword$Double Team|First Strike +DeckHas:Keyword$Double team|First Strike Oracle:Target nontoken creature you control gets +2/+0 and gains double team until end of turn. It also gains first strike until end of turn if it has the same name as another creature you control or a creature card in your graveyard. diff --git a/forge-gui/res/cardsfolder/u/urzas_avenger.txt b/forge-gui/res/cardsfolder/u/urzas_avenger.txt index 48551cad57f..1e6d74e8904 100644 --- a/forge-gui/res/cardsfolder/u/urzas_avenger.txt +++ b/forge-gui/res/cardsfolder/u/urzas_avenger.txt @@ -4,5 +4,5 @@ Types:Artifact Creature Shapeshifter PT:4/4 A:AB$ Pump | Cost$ 0 | NumAtt$ -1 | NumDef$ -1 | KWChoice$ Flying,Banding,First Strike,Trample | StackDescription$ SpellDescription | SpellDescription$ CARDNAME gets -1/-1 and gains your choice of banding, flying, first strike, or trample until end of turn. AI:RemoveDeck:All -DeckHas:Keyword$Banding|Flying|FirstStrike|Trample +DeckHas:Keyword$Banding|Flying|First Strike|Trample Oracle:{0}: Urza's Avenger gets -1/-1 and gains your choice of banding, flying, first strike, or trample until end of turn. (Any creatures with banding, and up to one without, can attack in a band. Bands are blocked as a group. If any creatures with banding you control are blocking or being blocked by a creature, you divide that creature's combat damage, not its controller, among any of the creatures it's being blocked by or is blocking.) diff --git a/forge-gui/res/cardsfolder/upcoming/dollmakers_shop_porcelain_gallery.txt b/forge-gui/res/cardsfolder/upcoming/dollmakers_shop_porcelain_gallery.txt new file mode 100644 index 00000000000..edaac8c507f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/dollmakers_shop_porcelain_gallery.txt @@ -0,0 +1,16 @@ +Name:Dollmaker's Shop +ManaCost:1 W +Types:Enchantment Room +T:Mode$ AttackersDeclaredOneTarget | Execute$ TrigToken | AttackedTarget$ Player | ValidAttackers$ Creature.YouCtrl+!Toy | TriggerZones$ Battlefield | AttackingPlayer$ You | TriggerDescription$ Whenever one or more non-Toy creatures you control attack a player, create a 1/1 white Toy artifact creature token. +SVar:TrigToken:DB$ Token | TokenScript$ w_1_1_a_toy +AlternateMode:Split +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nWhenever one or more non-Toy creatures you control attack a player, create a 1/1 white Toy artifact creature token. + +ALTERNATE + +Name:Porcelain Gallery +ManaCost:4 W W +Types:Enchantment Room +S:Mode$ Continuous | Affected$ Creature.YouCtrl | AffectedZone$ Battlefield | SetPower$ X | SetToughness$ X | Description$ Creatures you control have base power and toughness each equal to the number of creatures you control. +SVar:X:Count$Valid Creature.YouCtrl +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nCreatures you control have base power and toughness each equal to the number of creatures you control. diff --git a/forge-gui/res/cardsfolder/upcoming/ghostly_keybearer.txt b/forge-gui/res/cardsfolder/upcoming/ghostly_keybearer.txt new file mode 100644 index 00000000000..60e74d8b49d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ghostly_keybearer.txt @@ -0,0 +1,8 @@ +Name:Ghostly Keybearer +ManaCost:3 U +Types:Creature Spirit +PT:3/3 +K:Flying +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | Execute$ TrigUnlock | CombatDamage$ True | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, unlock a locked door of up to one target Room you control. +SVar:TrigUnlock:DB$ UnlockDoor | Mode$ Unlock | ValidTgts$ Room.YouCtrl | TgtPrompt$ Choose target Room you control | TargetMin$ 0 | TargetMax$ 1 +Oracle:Flying\nWhenever Ghostly Keybearer deals combat damage to a player, unlock a locked door of up to one target Room you control. diff --git a/forge-gui/res/cardsfolder/upcoming/glassworks_shattered_yard.txt b/forge-gui/res/cardsfolder/upcoming/glassworks_shattered_yard.txt new file mode 100644 index 00000000000..3353e2b44ed --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/glassworks_shattered_yard.txt @@ -0,0 +1,16 @@ +Name:Glassworks +ManaCost:2 R +Types:Enchantment Room +T:Mode$ UnlockDoor | ValidPlayer$ You | ValidCard$ Card.Self | ThisDoor$ True | Execute$ TrigDamage | TriggerDescription$ When you unlock this door, this Room deals 4 damage to target creature an opponent controls. +SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls | NumDmg$ 4 +AlternateMode:Split +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nWhen you unlock this door, this Room deals 4 damage to target creature an opponent controls. + +ALTERNATE + +Name:Shattered Yard +ManaCost:4 R R +Types:Enchantment Room +T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigAllDamage | TriggerDescription$ At the beginning of your end step, this Room deals 1 damage to each opponent. +SVar:TrigAllDamage:DB$ DamageAll | ValidPlayers$ Player.Opponent | NumDmg$ 1 +Oracle:(You may cast either half. That door unlocks on the battlefield. As a sorcery, you may pay the mana cost of a locked door to unlock it.)\nAt the beginning of your end step, this Room deals 1 damage to each opponent. diff --git a/forge-gui/res/cardsfolder/w/whirling_strike.txt b/forge-gui/res/cardsfolder/w/whirling_strike.txt index 88c695ac2a2..034c00ed990 100644 --- a/forge-gui/res/cardsfolder/w/whirling_strike.txt +++ b/forge-gui/res/cardsfolder/w/whirling_strike.txt @@ -2,5 +2,5 @@ Name:Whirling Strike ManaCost:1 R Types:Instant A:SP$ Pump | ValidTgts$ Creature | NumAtt$ +2 | KW$ First Strike & Trample | SpellDescription$ Target creature gets +2/+0 and gains first strike and trample until end of turn. -DeckHas:Keyword$FirstStrike|Trample +DeckHas:Keyword$First Strike|Trample Oracle:Target creature gets +2/+0 and gains first strike and trample until end of turn. diff --git a/forge-gui/res/editions/Duskmourn House of Horror Commander.txt b/forge-gui/res/editions/Duskmourn House of Horror Commander.txt index c3fefaba972..110ef125d9e 100644 --- a/forge-gui/res/editions/Duskmourn House of Horror Commander.txt +++ b/forge-gui/res/editions/Duskmourn House of Horror Commander.txt @@ -15,30 +15,30 @@ ScryfallCode=DSC 7 M Winter, Cynical Opportunist @Andrey Kuzinskiy 8 M Zimone, Mystery Unraveler @Mila Pesic 9 R Redress Fate @Julie Dillon -10 R Secret Arcade @Arthur Yuan +10 R Secret Arcade // Dusty Parlor @Arthur Yuan 11 R Soaring Lightbringer @Michele Giorgi 12 R Fear of Sleep Paralysis @Joshua Raphael 13 R Glitch Interpreter @Miguel Mercado 14 R They Came from the Pipes @Andreas Zafiratos 15 R Zimone's Hypothesis @Crystal Fae 16 R Ancient Cellarspawn @Alexandre Honoré -17 R Cramped Vents @Arthur Yuan +17 R Cramped Vents // Access Maze @Arthur Yuan 18 R Deluge of Doom @Nereida 19 R Demonic Covenant @LA Draws 20 R Into the Pit @Greg Staples 21 R Metamorphosis Fanatic @Andreas Zafiratos 22 R Persistent Constrictor @Steve Ellis -23 R Polluted Cistern @Arthur Yuan +23 R Polluted Cistern // Dim Oubliette @Arthur Yuan 24 R Sadistic Shell Game @Karl Kopinski 25 R Suspended Sentence @LA Draws 26 R Barbflare Gremlin @Matt Stewart 27 R Gleeful Arsonist @Nereida -28 R Spiked Corridor @Arthur Yuan +28 R Spiked Corridor // Torture Pit @Arthur Yuan 29 R Star Athlete @Andrey Kuzinskiy 30 R Curator Beastie @Nils Hamm 31 R Demolisher Spawn @Nino Is 32 R Disorienting Choice @Mirko Failoni -33 R Experimental Lab @Arthur Yuan +33 R Experimental Lab // Staff Room @Arthur Yuan 34 R Formless Genesis @Mark Poole 35 R Shriekwood Devourer @David Astruga 36 R Ursine Monstrosity @Carlos Palma Cruchaga diff --git a/forge-gui/res/editions/Duskmourn House of Horror.txt b/forge-gui/res/editions/Duskmourn House of Horror.txt index 13216f7a173..0289eaaf0a7 100644 --- a/forge-gui/res/editions/Duskmourn House of Horror.txt +++ b/forge-gui/res/editions/Duskmourn House of Horror.txt @@ -8,8 +8,8 @@ ScryfallCode=DSK [cards] 1 C Acrobatic Cheerleader @Julia Metzger 2 C Cult Healer @Diana Franco -3 R Dazzling Theater @Henry Peters -4 M Dollmaker's Shop @Chris Cold +3 R Dazzling Theater // Prop Room @Henry Peters +4 M Dollmaker's Shop // Porcelain Gallery @Chris Cold 5 C Emerge from the Cocoon @Marta Nael 6 R Enduring Innocence @Liiga Smilshkalne 7 U Ethereal Armor @Tyler Walpole @@ -20,7 +20,7 @@ ScryfallCode=DSK 12 C Friendly Ghost @Sean Murray 13 R Ghostly Dancers @Josh Newton 14 U Glimmer Seeker @Kev Fang -15 C Grand Entryway @Carlos Palma Cruchaga +15 C Grand Entryway // Elegant Rotunda @Carlos Palma Cruchaga 16 C Hardened Escort @John Stanko 17 C Jump Scare @John Tedrick 18 R Leyline of Hope @Sergey Glushakov @@ -39,7 +39,7 @@ ScryfallCode=DSK 31 C Shepherding Spirits @Billy Christian 32 R Split Up @Dominik Mayer 33 U Splitskin Doll @Diana Franco -34 U Surgical Suite @Titus Lunter +34 U Surgical Suite // Hospital Room @Titus Lunter 35 R Toby, Beastie Befriender @Jehan Choo 36 C Trapped in the Screen @Michael Phillippi 37 R Unidentified Hovership @Jana Heidersdorf @@ -48,8 +48,8 @@ ScryfallCode=DSK 40 U Veteran Survivor @Kai Carpenter 41 M The Wandering Rescuer @Anna Pavleeva 42 M Abhorrent Oculus @Bryan Sola -43 U Bottomless Pool @Diana Franco -44 R Central Elevator @Cristi Balanescu +43 U Bottomless Pool // Locker Room @Diana Franco +44 R Central Elevator // Promising Stairs @Cristi Balanescu 45 C Clammy Prowler @John Tedrick 46 C Creeping Peeper @Maxime Minard 47 U Cursed Windbreaker @Nino Vecia @@ -70,9 +70,9 @@ ScryfallCode=DSK 62 C Glimmerburst @Dan Watson 63 R Leyline of Transformation @Sergey Glushakov 64 R Marina Vendrell's Grimoire @Denys Tsiperko -65 C Meat Locker @Sergey Glushakov +65 C Meat Locker // Drowned Diner @Sergey Glushakov 66 R The Mindskinner @Abz J Harding -67 M Mirror Room @Helge C. Balzer +67 M Mirror Room // Fractured Realm @Helge C. Balzer 68 M Overlord of the Floodpits @Abz J Harding 69 U Paranormal Analyst @James Ryman 70 C Piranha Fly @Kekai Kotaki @@ -84,7 +84,7 @@ ScryfallCode=DSK 76 C Tunnel Surveyor @John Stanko 77 C Twist Reality @Allen Williams 78 C Unable to Scream @Fariba Khamseh -79 C Underwater Tunnel @Titus Lunter +79 C Underwater Tunnel // Slimy Aquarium @Titus Lunter 80 U Unnerving Grasp @Jeremy Wilson 81 U Unwilling Vessel @Josu Hernaiz 82 C Vanish from Sight @Billy Christian @@ -96,16 +96,16 @@ ScryfallCode=DSK 88 C Cracked Skull @Mirko Failoni 89 U Cynical Loner @Miranda Meeks 90 U Dashing Bloodsucker @Randy Gallegos -91 U Defiled Crypt @Martin de Diego Sádaba +91 U Defiled Crypt // Cadaver Lab @Martin de Diego Sádaba 92 R Demonic Counsel @Babs Webb -93 C Derelict Attic @Marc Simonetti +93 C Derelict Attic // Widow's Walk @Marc Simonetti 94 R Doomsday Excruciator @Denys Tsiperko 95 R Enduring Tenacity @Isis 96 C Fanatic of the Harrowing @Fajareka Setiawan 97 C Fear of Lost Teeth @Oriana Menendez 98 C Fear of the Dark @Sam Wolfe Connelly 99 C Final Vengeance @David Szabo -100 M Funeral Room @Miklós Ligeti +100 M Funeral Room // Awakening Hall @Miklós Ligeti 101 C Give In to Violence @Septian Fajrianto 102 R Grievous Wound @Martina Fačková 103 C Innocuous Rat @Maxime Minard @@ -123,7 +123,7 @@ ScryfallCode=DSK 115 C Resurrected Cultist @Tyler Walpole 116 C Spectral Snatcher @Domenico Cava 117 U Sporogenic Infection @Warren Mahy -118 R Unholy Annex @Matteo Bassini +118 R Unholy Annex // Ritual Chamber @Matteo Bassini 119 R Unstoppable Slasher @Maxime Minard 120 M Valgavoth, Terror Eater @Antonio José Manzanedo 121 U Valgavoth's Faithful @Jodie Muir @@ -134,7 +134,7 @@ ScryfallCode=DSK 126 U Betrayer's Bargain @Billy Christian 127 C Boilerbilges Ripper @Kai Carpenter 128 R Chainsaw @J.P. Targete -129 M Charred Foyer @Andrew Mar +129 M Charred Foyer // Warped Space @Andrew Mar 130 C Clockwork Percussionist @Eric Wilkerson 131 R Cursed Recording @Kim Sokol 132 U Diversion Specialist @Tuan Duong Chu @@ -142,7 +142,7 @@ ScryfallCode=DSK 134 U Fear of Being Hunted @Maxime Minard 135 U Fear of Burning Alive @J.P. Targete 136 R Fear of Missing Out @John Stanko -137 C Glassworks @Sergey Glushakov +137 C Glassworks // Shattered Yard @Sergey Glushakov 138 C Grab the Prize @Halil Ural 139 C Hand That Feeds @Loïc Canavaggia 140 C Impossible Inferno @Edgar Sánchez Hidalgo @@ -152,7 +152,7 @@ ScryfallCode=DSK 144 C Most Valuable Slayer @Patrik Hell 145 U Norin, Swift Survivalist @Yigit Koroglu 146 M Overlord of the Boilerbilges @Helge C. Balzer -147 U Painter's Studio @Marc Simonetti +147 U Painter's Studio // Defaced Gallery @Marc Simonetti 148 U Piggy Bank @Steve Ellis 149 U Pyroclasm @Néstor Ossandón Leal 150 C Ragged Playmate @Kaitlyn McCulley @@ -163,7 +163,7 @@ ScryfallCode=DSK 155 M The Rollercrusher Ride @Deruchenko Alexander 156 C Scorching Dragonfire @Marta Nael 157 M Screaming Nemesis @Liiga Smilshkalne -158 C Ticket Booth @Marco Gorlei +158 C Ticket Booth // Tunnel of Hate @Marco Gorlei 159 U Trial of Agony @Mike Sass 160 C Turn Inside Out @Loïc Canavaggia 161 U Untimely Malfunction @Jarel Threat @@ -186,7 +186,7 @@ ScryfallCode=DSK 178 C Flesh Burrower @Maxime Minard 179 C Frantic Strength @Flavio Greco Paglia 180 C Grasping Longneck @Mathias Kollros -181 U Greenhouse @John Di Giovanni +181 U Greenhouse // Rickety Gazebo @John Di Giovanni 182 M Hauntwoods Shrieker @John Tedrick 183 R Hedge Shredder @Cristi Balanescu 184 C Horrid Vigor @Chris Cold @@ -195,7 +195,7 @@ ScryfallCode=DSK 187 R Kona, Rescue Beastie @Brian Valeza 188 R Leyline of Mutation @Sergey Glushakov 189 C Manifest Dread @Andrey Kuzinskiy -190 C Moldering Gym @Helge C. Balzer +190 C Moldering Gym // Weight Room @Helge C. Balzer 191 C Monstrous Emergence @Loïc Canavaggia 192 R Omnivorous Flytrap @Antonio José Manzanedo 193 U Overgrown Zealot @Tyler Walpole @@ -210,7 +210,7 @@ ScryfallCode=DSK 202 M Tyvar, the Pummeler @Olivier Bernard 203 U Under the Skin @Fernando Falcone 204 R Valgavoth's Onslaught @Lie Setiawan -205 M Walk-In Closet @Miklós Ligeti +205 M Walk-In Closet // Forgotten Cellar @Miklós Ligeti 206 C Wary Watchdog @Olivier Bernard 207 U Wickerfolk Thresher @WolfSkullJack 208 U Arabella, Abandoned Doll @J.P. Targete @@ -232,15 +232,15 @@ ScryfallCode=DSK 224 M Niko, Light of Hope @Aurore Folny 225 U Oblivious Bookworm @Josh Newton 226 R Peer Past the Veil @Tuan Duong Chu -227 R Restricted Office @Antonio José Manzanedo +227 R Restricted Office // Lecture Hall @Antonio José Manzanedo 228 R Rip, Spawn Hunter @Justine Cruz 229 U Rite of the Moth @A. M. Sartor -230 R Roaring Furnace @Miklós Ligeti +230 R Roaring Furnace // Steaming Sauna @Miklós Ligeti 231 U Sawblade Skinripper @Zezhou Chen 232 U Shrewd Storyteller @David Palumbo 233 U Shroudstomper @Campbell White 234 U Skullsnap Nuisance @Allen Douglas -235 U Smoky Lounge @Marco Gorlei +235 U Smoky Lounge // Misty Salon @Marco Gorlei 236 R The Swarmweaver @Helge C. Balzer 237 R Undead Sprinter @Nino Vecia 238 R Victor, Valgavoth's Seneschal @Jeremy Wilson @@ -294,7 +294,7 @@ ScryfallCode=DSK 286 L Forest @Josu Hernaiz [alternate art] -287 C Grand Entryway @Carlos Palma Cruchaga +287 C Grand Entryway // Elegant Rotunda @Carlos Palma Cruchaga 288 U Optimistic Scavenger @Brian Valeza 289 R Reluctant Role Model @Chris Rallis 290 R Entity Tracker @Cristi Balanescu @@ -387,16 +387,16 @@ ScryfallCode=DSK 331 R Gloomlake Verge @Julian Kok Joon Wen 332 R Hushwood Verge @Henry Peters 333 R Thornspire Verge @Pavel Kolomeyets -334 R Dazzling Theater @Ivan Shavrin -335 M Dollmaker's Shop @Cacho Rubione -336 R Central Elevator @Ivan Shavrin -337 M Mirror Room @Cacho Rubione -338 M Funeral Room @Alexandre Chaudret -339 R Unholy Annex @Alexis Ziritt -340 M Charred Foyer @Oliver Barrett -341 M Walk-In Closet @Bastien Grivet -342 R Restricted Office @Scott Buoncristiano -343 R Roaring Furnace @Toni Infante +334 R Dazzling Theater // Prop Room @Ivan Shavrin +335 M Dollmaker's Shop // Porcelain Gallery @Cacho Rubione +336 R Central Elevator // Promising Stairs @Ivan Shavrin +337 M Mirror Room // Fractured Realm @Cacho Rubione +338 M Funeral Room // Awakening Hall @Alexandre Chaudret +339 R Unholy Annex // Ritual Chamber @Alexis Ziritt +340 M Charred Foyer // Warped Space @Oliver Barrett +341 M Walk-In Closet // Forgotten Cellar @Bastien Grivet +342 R Restricted Office // Lecture Hall @Scott Buoncristiano +343 R Roaring Furnace // Steaming Sauna @Toni Infante 344 M Abhorrent Oculus @Igor Krstic 345 R Silent Hallcreeper @Inkognit 346 R Doomsday Excruciator @Jarel Threat diff --git a/forge-gui/res/tokenscripts/w_1_1_a_toy.txt b/forge-gui/res/tokenscripts/w_1_1_a_toy.txt new file mode 100644 index 00000000000..54e76aca8da --- /dev/null +++ b/forge-gui/res/tokenscripts/w_1_1_a_toy.txt @@ -0,0 +1,6 @@ +Name:Toy Token +ManaCost:no cost +Types:Artifact Creature Toy +Colors:white +PT:1/1 +Oracle: diff --git a/forge-gui/src/main/java/forge/gamemodes/match/input/InputPayManaOfCostPayment.java b/forge-gui/src/main/java/forge/gamemodes/match/input/InputPayManaOfCostPayment.java index ab204505f24..fb1d1a01267 100644 --- a/forge-gui/src/main/java/forge/gamemodes/match/input/InputPayManaOfCostPayment.java +++ b/forge-gui/src/main/java/forge/gamemodes/match/input/InputPayManaOfCostPayment.java @@ -83,7 +83,7 @@ public class InputPayManaOfCostPayment extends InputPayMana { msg.append(messagePrefix).append("\n"); } if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DETAILED_SPELLDESC_IN_PROMPT)) { - if (saPaidFor.isSpell()) { + if (saPaidFor.isSpell()) { msg.append(saPaidFor.getStackDescription().replace("(Targeting ERROR)", "")).append("\n\n"); } else { msg.append(saPaidFor.getHostCard()).append(" - ").append(saPaidFor.toString()).append("\n\n"); diff --git a/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectCardsForConvokeOrImprovise.java b/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectCardsForConvokeOrImprovise.java index 97075abb257..11930667c04 100644 --- a/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectCardsForConvokeOrImprovise.java +++ b/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectCardsForConvokeOrImprovise.java @@ -44,11 +44,11 @@ public final class InputSelectCardsForConvokeOrImprovise extends InputSelectMany @Override protected String getMessage() { - StringBuilder sb = new StringBuilder(); + StringBuilder sb = new StringBuilder(); if ( FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DETAILED_SPELLDESC_IN_PROMPT) && - sa != null ) { - sb.append(sa.getStackDescription()).append("\n"); - } + sa != null ) { + sb.append(sa.getStackDescription()).append("\n"); + } sb.append(TextUtil.concatNoSpace("Choose ", cardType, " to tap for ", description, ".\nRemaining mana cost is ", remainingCost.toString())); return sb.toString(); } diff --git a/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectManyBase.java b/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectManyBase.java index 401ff362fc6..3deaa9cd323 100644 --- a/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectManyBase.java +++ b/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectManyBase.java @@ -77,13 +77,19 @@ public abstract class InputSelectManyBase extends InputSyn @Override public final void showMessage() { if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DETAILED_SPELLDESC_IN_PROMPT) && - card != null) { + card != null) { final StringBuilder sb = new StringBuilder(); sb.append(card.toString()); - if ( (sa != null) && (!sa.toString().isEmpty()) ) { // some spell abilities have no useful string value - sb.append(" - ").append(sa.toString()); + if (sa != null) { + if (sa.isSpell() && sa.getHostCard().isPermanent() && !sa.hasParam("SpellDescription") && !sa.getPayCosts().isOnlyManaCost()) { + sb.append(" - ").append(sa.getPayCosts().toString()); + } else if (!sa.toString().isEmpty()) { // some spell abilities have no useful string value + sb.append("\n - ").append(sa.toString()); + } else { + sb.append("\n"); + } } - sb.append("\n\n").append(getMessage()); + sb.append("\n").append(getMessage()); showMessage(sb.toString(), card); } else { if (card != null) { diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index 78c692fe010..b5f64a0fcf9 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -19,6 +19,7 @@ import forge.game.ability.AbilityKey; import forge.game.ability.AbilityUtils; import forge.game.ability.ApiType; import forge.game.card.*; +import forge.game.card.CardView.CardStateView; import forge.game.card.token.TokenInfo; import forge.game.combat.Combat; import forge.game.combat.CombatUtil; @@ -1829,6 +1830,11 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont return StaticData.instance().getCommonCards().getFaceByName(cardFaceView.getOracleName()); } + @Override + public ICardFace chooseSingleCardFace(SpellAbility sa, List faces, String message) { + return getGui().one(message, faces); + } + @Override public CounterType chooseCounterType(final List options, final SpellAbility sa, final String prompt, Map params) { @@ -1838,6 +1844,16 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont return getGui().one(prompt, options); } + @Override + public CardState chooseSingleCardState(SpellAbility sa, List states, String message, Map params) { + if (states.size() <= 1) { + return Iterables.getFirst(states, null); + } + Map cache = CardView.getStateMap(states); + CardStateView chosen = getGui().one(message, Lists.newArrayList(cache.keySet())); + return cache.get(chosen); + } + @Override public String chooseKeywordForPump(final List options, final SpellAbility sa, final String prompt, final Card tgtCard) { if (options.size() <= 1) { @@ -3216,7 +3232,7 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont @Override public String chooseCardName(SpellAbility sa, List faces, String message) { - ICardFace face = getGui().one(message, faces); + ICardFace face = chooseSingleCardFace(sa, faces, message); return face == null ? "" : face.getName(); }